Skip to main content
Glama

mcp-google-sheets

database-connection.ts8.39 kB
import { AppSystemProp } from '@activepieces/server-shared' import { ApEdition, isNil } from '@activepieces/shared' import { ArrayContains, DataSource, EntitySchema, FindOperator, ObjectLiteral, Raw, SelectQueryBuilder, } from 'typeorm' import { AgentEntity } from '../agents/agent-entity' import { AgentRunEntity } from '../agents/agent-runs/agent-run.entity' import { AIProviderEntity } from '../ai/ai-provider-entity' import { AIUsageEntity } from '../ai/ai-usage-entity' import { AppConnectionEntity } from '../app-connection/app-connection.entity' import { UserIdentityEntity } from '../authentication/user-identity/user-identity-entity' import { AlertEntity } from '../ee/alerts/alerts-entity' import { PlatformAnalyticsReportEntity } from '../ee/analytics/platform-analytics-report.entity' import { ApiKeyEntity } from '../ee/api-keys/api-key-entity' import { AppCredentialEntity } from '../ee/app-credentials/app-credentials.entity' import { AppSumoEntity } from '../ee/appsumo/appsumo.entity' import { AuditEventEntity } from '../ee/audit-logs/audit-event-entity' import { OtpEntity } from '../ee/authentication/otp/otp-entity' import { ConnectionKeyEntity } from '../ee/connection-keys/connection-key.entity' import { CustomDomainEntity } from '../ee/custom-domains/custom-domain.entity' import { FlowTemplateEntity } from '../ee/flow-template/flow-template.entity' import { OAuthAppEntity } from '../ee/oauth-apps/oauth-app.entity' import { PlatformPlanEntity } from '../ee/platform/platform-plan/platform-plan.entity' import { ProjectMemberEntity } from '../ee/projects/project-members/project-member.entity' import { ProjectPlanEntity } from '../ee/projects/project-plan/project-plan.entity' import { GitRepoEntity } from '../ee/projects/project-release/git-sync/git-sync.entity' import { ProjectReleaseEntity } from '../ee/projects/project-release/project-release.entity' import { ProjectRoleEntity } from '../ee/projects/project-role/project-role.entity' import { SigningKeyEntity } from '../ee/signing-key/signing-key-entity' import { FileEntity } from '../file/file.entity' import { FlagEntity } from '../flags/flag.entity' import { FlowEntity } from '../flows/flow/flow.entity' import { FlowRunEntity } from '../flows/flow-run/flow-run-entity' import { FlowVersionEntity } from '../flows/flow-version/flow-version-entity' import { FolderEntity } from '../flows/folder/folder.entity' import { IssueEntity } from '../flows/issues/issues-entity' import { DatabaseType, system } from '../helper/system/system' import { McpRunEntity } from '../mcp/mcp-run/mcp-run.entity' import { McpEntity } from '../mcp/mcp-server/mcp-entity' import { McpToolEntity } from '../mcp/tool/mcp-tool.entity' import { PieceMetadataEntity } from '../pieces/piece-metadata-entity' import { PieceTagEntity } from '../pieces/tags/pieces/piece-tag.entity' import { TagEntity } from '../pieces/tags/tag-entity' import { PlatformEntity } from '../platform/platform.entity' import { ProjectEntity } from '../project/project-entity' import { StoreEntryEntity } from '../store-entry/store-entry-entity' import { FieldEntity } from '../tables/field/field.entity' import { CellEntity } from '../tables/record/cell.entity' import { RecordEntity } from '../tables/record/record.entity' import { TableWebhookEntity } from '../tables/table/table-webhook.entity' import { TableEntity } from '../tables/table/table.entity' import { TodoActivityEntity } from '../todos/activity/todos-activity.entity' import { TodoEntity } from '../todos/todo.entity' import { AppEventRoutingEntity } from '../trigger/app-event-routing/app-event-routing.entity' import { TriggerEventEntity } from '../trigger/trigger-events/trigger-event.entity' import { TriggerSourceEntity } from '../trigger/trigger-source/trigger-source-entity' import { UserEntity } from '../user/user-entity' import { UserInvitationEntity } from '../user-invitations/user-invitation.entity' import { WorkerMachineEntity } from '../workers/machine/machine-entity' import { createPostgresDataSource } from './postgres-connection' import { createSqlLiteDataSource } from './sqlite-connection' const databaseType = system.get(AppSystemProp.DB_TYPE) function getEntities(): EntitySchema<unknown>[] { const edition = system.getEdition() const entities: EntitySchema[] = [ TriggerEventEntity, AppEventRoutingEntity, FileEntity, FlagEntity, FlowEntity, FlowVersionEntity, FlowRunEntity, ProjectEntity, StoreEntryEntity, UserEntity, AppConnectionEntity, FolderEntity, PieceMetadataEntity, PlatformEntity, TagEntity, PieceTagEntity, IssueEntity, AlertEntity, UserInvitationEntity, WorkerMachineEntity, AIProviderEntity, ProjectRoleEntity, TableEntity, FieldEntity, RecordEntity, CellEntity, TableWebhookEntity, UserIdentityEntity, TodoEntity, McpEntity, AgentEntity, TodoActivityEntity, McpToolEntity, McpRunEntity, AIUsageEntity, AgentRunEntity, TriggerSourceEntity, ] switch (edition) { case ApEdition.CLOUD: case ApEdition.ENTERPRISE: entities.push( ProjectMemberEntity, ProjectPlanEntity, CustomDomainEntity, SigningKeyEntity, OAuthAppEntity, OtpEntity, ApiKeyEntity, FlowTemplateEntity, GitRepoEntity, AuditEventEntity, ProjectReleaseEntity, PlatformAnalyticsReportEntity, // CLOUD AppSumoEntity, ConnectionKeyEntity, AppCredentialEntity, PlatformPlanEntity, ) break case ApEdition.COMMUNITY: break default: throw new Error(`Unsupported edition: ${edition}`) } return entities } export const commonProperties = { subscribers: [], entities: getEntities(), } let _databaseConnection: DataSource | null = null export const databaseConnection = () => { if (isNil(_databaseConnection)) { _databaseConnection = databaseType === DatabaseType.SQLITE3 ? createSqlLiteDataSource() : createPostgresDataSource() } return _databaseConnection } export function getDatabaseType(): DatabaseType { return system.getOrThrow<DatabaseType>(AppSystemProp.DB_TYPE) } export function AddAPArrayContainsToQueryBuilder<T extends ObjectLiteral>( queryBuilder: SelectQueryBuilder<T>, columnName: string, values: string[], ): void { switch (getDatabaseType()) { case DatabaseType.POSTGRES: queryBuilder.andWhere(`${columnName} @> :values`, { values }) break case DatabaseType.SQLITE3:{ for (const value of values) { queryBuilder.andWhere(`${columnName} LIKE :value${values.indexOf(value)}`, { [`value${values.indexOf(value)}`]: `%${value}%` }) } break } } } export function APArrayContains<T>( columnName: string, values: string[], ): Record<string, FindOperator<T>> { const databaseType = getDatabaseType() switch (databaseType) { case DatabaseType.POSTGRES: return { [columnName]: ArrayContains(values), } case DatabaseType.SQLITE3: { const likeConditions = values .map((_, index) => `${columnName} LIKE :value${index}`) .join(' AND ') const likeParams = values.reduce((params, value, index) => { params[`value${index}`] = `%${value}%` return params }, {} as Record<string, string>) return { [columnName]: Raw(_ => `(${likeConditions})`, likeParams), } } default: throw new Error(`Unsupported database type: ${databaseType}`) } } // Uncomment the below line when running `nx db-migration server-api --name=<MIGRATION_NAME>` and recomment it after the migration is generated // export const exportedConnection = databaseConnection()

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/activepieces/activepieces'

If you have feedback or need assistance with the MCP directory API, please join our Discord server