UNPKG

@lucidcms/core

Version:

The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.

1 lines 13.7 kB
{"version":3,"file":"client-integrations.mjs","names":["queryBuilder"],"sources":["../../../src/libs/repositories/client-integrations.ts"],"sourcesContent":["import { sql } from \"kysely\";\nimport z from \"zod\";\nimport type { GetAllQueryParams } from \"../../schemas/client-integrations.js\";\nimport type DatabaseAdapter from \"../db/adapter-base.js\";\nimport queryBuilder from \"../db/query-builder/index.js\";\nimport type { KyselyDB } from \"../db/types.js\";\nimport StaticRepository from \"./parents/static-repository.js\";\nimport type { QueryProps } from \"./types.js\";\n\nexport default class ClientIntegrationsRepository extends StaticRepository<\"lucid_client_integrations\"> {\n\tconstructor(db: KyselyDB, dbAdapter: DatabaseAdapter) {\n\t\tsuper(db, dbAdapter, \"lucid_client_integrations\");\n\t}\n\ttableSchema = z.object({\n\t\tid: z.number(),\n\t\tname: z.string(),\n\t\tdescription: z.string().nullable(),\n\t\tenabled: z.union([\n\t\t\tz.literal(this.dbAdapter.config.defaults.boolean.true),\n\t\t\tz.literal(this.dbAdapter.config.defaults.boolean.false),\n\t\t]),\n\t\tscopes: z\n\t\t\t.array(\n\t\t\t\tz.object({\n\t\t\t\t\tscope: z.string(),\n\t\t\t\t}),\n\t\t\t)\n\t\t\t.optional(),\n\t\tkey: z.string(),\n\t\tapi_key: z.string(),\n\t\tsecret: z.string(),\n\t\ttenant_key: z.string().nullable(),\n\t\tlast_used_at: z.union([z.string(), z.date()]).nullable(),\n\t\tlast_used_ip: z.string().nullable(),\n\t\tlast_used_user_agent: z.string().nullable(),\n\t\tcreated_at: z.union([z.string(), z.date()]).nullable(),\n\t\tupdated_at: z.union([z.string(), z.date()]).nullable(),\n\t});\n\tcolumnFormats = {\n\t\tid: this.dbAdapter.getDataType(\"primary\"),\n\t\tname: this.dbAdapter.getDataType(\"text\"),\n\t\tdescription: this.dbAdapter.getDataType(\"text\"),\n\t\tenabled: this.dbAdapter.getDataType(\"boolean\"),\n\t\tkey: this.dbAdapter.getDataType(\"text\"),\n\t\tapi_key: this.dbAdapter.getDataType(\"text\"),\n\t\tsecret: this.dbAdapter.getDataType(\"text\"),\n\t\ttenant_key: this.dbAdapter.getDataType(\"text\"),\n\t\tlast_used_at: this.dbAdapter.getDataType(\"timestamp\"),\n\t\tlast_used_ip: this.dbAdapter.getDataType(\"varchar\", 255),\n\t\tlast_used_user_agent: this.dbAdapter.getDataType(\"text\"),\n\t\tcreated_at: this.dbAdapter.getDataType(\"timestamp\"),\n\t\tupdated_at: this.dbAdapter.getDataType(\"timestamp\"),\n\t};\n\tqueryConfig = {\n\t\ttableKeys: {\n\t\t\tfilters: {\n\t\t\t\tkey: \"key\",\n\t\t\t\tname: \"name\",\n\t\t\t\tdescription: \"description\",\n\t\t\t\tenabled: \"enabled\",\n\t\t\t\tlastUsedAt: \"last_used_at\",\n\t\t\t\tlastUsedIp: \"last_used_ip\",\n\t\t\t\tcreatedAt: \"created_at\",\n\t\t\t\tupdatedAt: \"updated_at\",\n\t\t\t},\n\t\t\tsorts: {\n\t\t\t\tname: \"name\",\n\t\t\t\tdescription: \"description\",\n\t\t\t\tenabled: \"enabled\",\n\t\t\t\tcreatedAt: \"created_at\",\n\t\t\t\tupdatedAt: \"updated_at\",\n\t\t\t},\n\t\t},\n\t\toperators: {\n\t\t\tname: \"contains\",\n\t\t\tdescription: \"contains\",\n\t\t},\n\t} as const;\n\n\tasync selectSingleByIdWithScopes<V extends boolean = false>(\n\t\tprops: QueryProps<\n\t\t\tV,\n\t\t\t{\n\t\t\t\tid: number;\n\t\t\t\ttenantKey?: string | null;\n\t\t\t}\n\t\t>,\n\t) {\n\t\tconst query = this.db\n\t\t\t.selectFrom(\"lucid_client_integrations\")\n\t\t\t.select((eb) => [\n\t\t\t\t\"id\",\n\t\t\t\t\"key\",\n\t\t\t\t\"name\",\n\t\t\t\t\"description\",\n\t\t\t\t\"enabled\",\n\t\t\t\t\"tenant_key\",\n\t\t\t\t\"last_used_at\",\n\t\t\t\t\"last_used_ip\",\n\t\t\t\t\"last_used_user_agent\",\n\t\t\t\t\"created_at\",\n\t\t\t\t\"updated_at\",\n\t\t\t\tthis.dbAdapter\n\t\t\t\t\t.jsonArrayFrom(\n\t\t\t\t\t\teb\n\t\t\t\t\t\t\t.selectFrom(\"lucid_client_integration_scopes\")\n\t\t\t\t\t\t\t.select([\"scope\"])\n\t\t\t\t\t\t\t.whereRef(\n\t\t\t\t\t\t\t\t\"lucid_client_integration_scopes.client_integration_id\",\n\t\t\t\t\t\t\t\t\"=\",\n\t\t\t\t\t\t\t\t\"lucid_client_integrations.id\",\n\t\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t\t.as(\"scopes\"),\n\t\t\t])\n\t\t\t.where(\"id\", \"=\", props.id)\n\t\t\t.$call((qb) =>\n\t\t\t\tqueryBuilder.tenantScope(qb, {\n\t\t\t\t\ttenantKey: props.tenantKey,\n\t\t\t\t\tcolumn: \"lucid_client_integrations.tenant_key\",\n\t\t\t\t}),\n\t\t\t);\n\n\t\tconst exec = await this.executeQuery(() => query.executeTakeFirst(), {\n\t\t\tmethod: \"selectSingleByIdWithScopes\",\n\t\t});\n\t\tif (exec.response.error) return exec.response;\n\n\t\treturn this.validateResponse(exec, {\n\t\t\t...props.validation,\n\t\t\tmode: \"single\",\n\t\t\tselect: [\n\t\t\t\t\"id\",\n\t\t\t\t\"key\",\n\t\t\t\t\"name\",\n\t\t\t\t\"description\",\n\t\t\t\t\"enabled\",\n\t\t\t\t\"tenant_key\",\n\t\t\t\t\"last_used_at\",\n\t\t\t\t\"last_used_ip\",\n\t\t\t\t\"last_used_user_agent\",\n\t\t\t\t\"created_at\",\n\t\t\t\t\"updated_at\",\n\t\t\t\t\"scopes\",\n\t\t\t],\n\t\t});\n\t}\n\n\tasync selectSingleByKeyWithScopes<V extends boolean = false>(\n\t\tprops: QueryProps<\n\t\t\tV,\n\t\t\t{\n\t\t\t\tkey: string;\n\t\t\t}\n\t\t>,\n\t) {\n\t\tconst query = this.db\n\t\t\t.selectFrom(\"lucid_client_integrations\")\n\t\t\t.select((eb) => [\n\t\t\t\t\"id\",\n\t\t\t\t\"key\",\n\t\t\t\t\"api_key\",\n\t\t\t\t\"secret\",\n\t\t\t\t\"enabled\",\n\t\t\t\t\"tenant_key\",\n\t\t\t\tthis.dbAdapter\n\t\t\t\t\t.jsonArrayFrom(\n\t\t\t\t\t\teb\n\t\t\t\t\t\t\t.selectFrom(\"lucid_client_integration_scopes\")\n\t\t\t\t\t\t\t.select([\"scope\"])\n\t\t\t\t\t\t\t.whereRef(\n\t\t\t\t\t\t\t\t\"lucid_client_integration_scopes.client_integration_id\",\n\t\t\t\t\t\t\t\t\"=\",\n\t\t\t\t\t\t\t\t\"lucid_client_integrations.id\",\n\t\t\t\t\t\t\t),\n\t\t\t\t\t)\n\t\t\t\t\t.as(\"scopes\"),\n\t\t\t])\n\t\t\t.where(\"key\", \"=\", props.key);\n\n\t\tconst exec = await this.executeQuery(() => query.executeTakeFirst(), {\n\t\t\tmethod: \"selectSingleByKeyWithScopes\",\n\t\t});\n\t\tif (exec.response.error) return exec.response;\n\n\t\treturn this.validateResponse(exec, {\n\t\t\t...props.validation,\n\t\t\tmode: \"single\",\n\t\t\tselect: [\"id\", \"key\", \"api_key\", \"secret\", \"enabled\", \"scopes\"],\n\t\t});\n\t}\n\n\tasync selectMultipleFilteredWithScopes<V extends boolean = false>(\n\t\tprops: QueryProps<\n\t\t\tV,\n\t\t\t{\n\t\t\t\tqueryParams: GetAllQueryParams;\n\t\t\t\ttenantKey?: string | null;\n\t\t\t}\n\t\t>,\n\t) {\n\t\tconst exec = await this.executeQuery(\n\t\t\tasync () => {\n\t\t\t\tconst mainQuery = this.db\n\t\t\t\t\t.selectFrom(\"lucid_client_integrations\")\n\t\t\t\t\t.select((eb) => [\n\t\t\t\t\t\t\"id\",\n\t\t\t\t\t\t\"key\",\n\t\t\t\t\t\t\"name\",\n\t\t\t\t\t\t\"description\",\n\t\t\t\t\t\t\"enabled\",\n\t\t\t\t\t\t\"tenant_key\",\n\t\t\t\t\t\t\"last_used_at\",\n\t\t\t\t\t\t\"last_used_ip\",\n\t\t\t\t\t\t\"last_used_user_agent\",\n\t\t\t\t\t\t\"created_at\",\n\t\t\t\t\t\t\"updated_at\",\n\t\t\t\t\t\tthis.dbAdapter\n\t\t\t\t\t\t\t.jsonArrayFrom(\n\t\t\t\t\t\t\t\teb\n\t\t\t\t\t\t\t\t\t.selectFrom(\"lucid_client_integration_scopes\")\n\t\t\t\t\t\t\t\t\t.select([\"scope\"])\n\t\t\t\t\t\t\t\t\t.whereRef(\n\t\t\t\t\t\t\t\t\t\t\"lucid_client_integration_scopes.client_integration_id\",\n\t\t\t\t\t\t\t\t\t\t\"=\",\n\t\t\t\t\t\t\t\t\t\t\"lucid_client_integrations.id\",\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.as(\"scopes\"),\n\t\t\t\t\t])\n\t\t\t\t\t.$call((qb) =>\n\t\t\t\t\t\tqueryBuilder.tenantScope(qb, {\n\t\t\t\t\t\t\ttenantKey: props.tenantKey,\n\t\t\t\t\t\t\tcolumn: \"lucid_client_integrations.tenant_key\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\n\t\t\t\tconst countQuery = this.db\n\t\t\t\t\t.selectFrom(\"lucid_client_integrations\")\n\t\t\t\t\t.select(sql`count(*)`.as(\"count\"))\n\t\t\t\t\t.$call((qb) =>\n\t\t\t\t\t\tqueryBuilder.tenantScope(qb, {\n\t\t\t\t\t\t\ttenantKey: props.tenantKey,\n\t\t\t\t\t\t\tcolumn: \"lucid_client_integrations.tenant_key\",\n\t\t\t\t\t\t}),\n\t\t\t\t\t);\n\n\t\t\t\tconst { main, count } = queryBuilder.main(\n\t\t\t\t\t{\n\t\t\t\t\t\tmain: mainQuery,\n\t\t\t\t\t\tcount: countQuery,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tqueryParams: props.queryParams,\n\t\t\t\t\t\tdatabase: this.dbAdapter.config,\n\t\t\t\t\t\tmeta: {\n\t\t\t\t\t\t\t...this.queryConfig,\n\t\t\t\t\t\t\tcustomFilters: {\n\t\t\t\t\t\t\t\tscope: ({ eb, filter }) => {\n\t\t\t\t\t\t\t\t\tconst values = Array.isArray(filter.value)\n\t\t\t\t\t\t\t\t\t\t? filter.value\n\t\t\t\t\t\t\t\t\t\t: [filter.value];\n\t\t\t\t\t\t\t\t\treturn eb.exists(\n\t\t\t\t\t\t\t\t\t\teb\n\t\t\t\t\t\t\t\t\t\t\t.selectFrom(\"lucid_client_integration_scopes\")\n\t\t\t\t\t\t\t\t\t\t\t.select(\"lucid_client_integration_scopes.id\")\n\t\t\t\t\t\t\t\t\t\t\t.whereRef(\n\t\t\t\t\t\t\t\t\t\t\t\t\"lucid_client_integration_scopes.client_integration_id\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"=\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"lucid_client_integrations.id\",\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t\t.where(\n\t\t\t\t\t\t\t\t\t\t\t\t\"lucid_client_integration_scopes.scope\",\n\t\t\t\t\t\t\t\t\t\t\t\t\"in\",\n\t\t\t\t\t\t\t\t\t\t\t\tvalues.map(String),\n\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t);\n\n\t\t\t\tconst [mainResult, countResult] = await Promise.all([\n\t\t\t\t\tmain.execute(),\n\t\t\t\t\tcount?.executeTakeFirst() as Promise<{ count: string } | undefined>,\n\t\t\t\t]);\n\n\t\t\t\treturn [mainResult, countResult] as const;\n\t\t\t},\n\t\t\t{\n\t\t\t\tmethod: \"selectMultipleFilteredWithScopes\",\n\t\t\t},\n\t\t);\n\t\tif (exec.response.error) return exec.response;\n\n\t\treturn this.validateResponse(exec, {\n\t\t\t...props.validation,\n\t\t\tmode: \"multiple-count\",\n\t\t\tselect: [\n\t\t\t\t\"id\",\n\t\t\t\t\"key\",\n\t\t\t\t\"name\",\n\t\t\t\t\"description\",\n\t\t\t\t\"enabled\",\n\t\t\t\t\"tenant_key\",\n\t\t\t\t\"last_used_at\",\n\t\t\t\t\"last_used_ip\",\n\t\t\t\t\"last_used_user_agent\",\n\t\t\t\t\"created_at\",\n\t\t\t\t\"updated_at\",\n\t\t\t\t\"scopes\",\n\t\t\t],\n\t\t});\n\t}\n}\n"],"mappings":"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"}