@kyro-cms/core 0.9.7 → 0.9.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{WebhookService-BKszZlG0.d.cts → WebhookService-Dj8pJ3sp.d.cts} +1 -1
- package/dist/{WebhookService-Ccf1j-IN.d.ts → WebhookService-DpRB940h.d.ts} +1 -1
- package/dist/api-handler-graphql.cjs +18 -13
- package/dist/api-handler-graphql.cjs.map +1 -1
- package/dist/api-handler-graphql.js +14 -9
- package/dist/api-handler-graphql.js.map +1 -1
- package/dist/api-handler-trpc.cjs +9 -9
- package/dist/api-handler-trpc.js +7 -7
- package/dist/api-handler.cjs +10 -10
- package/dist/api-handler.js +7 -7
- package/dist/{base-CIuXkrH4.d.cts → base-BjyoF6da.d.cts} +2 -2
- package/dist/{base-fFo4lqER.d.ts → base-C2YR8lWt.d.ts} +2 -2
- package/dist/{chunk-NZEUU7QB.js → chunk-3AKCVYDB.js} +4 -109
- package/dist/chunk-3AKCVYDB.js.map +1 -0
- package/dist/{chunk-FKKQUMXR.cjs → chunk-4OCMVGEY.cjs} +4 -110
- package/dist/chunk-4OCMVGEY.cjs.map +1 -0
- package/dist/{chunk-VLK5SJRI.js → chunk-5RFGYEQ3.js} +133 -46
- package/dist/chunk-5RFGYEQ3.js.map +1 -0
- package/dist/chunk-5RPRLTTN.js +861 -0
- package/dist/chunk-5RPRLTTN.js.map +1 -0
- package/dist/{chunk-AX2TZRQJ.js → chunk-BVUDFKKS.js} +16 -3
- package/dist/chunk-BVUDFKKS.js.map +1 -0
- package/dist/{chunk-DRVOUQMT.cjs → chunk-E4JZ73FY.cjs} +54 -79
- package/dist/chunk-E4JZ73FY.cjs.map +1 -0
- package/dist/{chunk-E5UJBLQ7.js → chunk-FIAMXNTH.js} +2 -2
- package/dist/chunk-FIAMXNTH.js.map +1 -0
- package/dist/{chunk-QVJNSAQL.cjs → chunk-IEIHABVR.cjs} +152 -65
- package/dist/chunk-IEIHABVR.cjs.map +1 -0
- package/dist/{chunk-QFLB4EIJ.cjs → chunk-LNTFRAHF.cjs} +118 -9
- package/dist/chunk-LNTFRAHF.cjs.map +1 -0
- package/dist/chunk-N4GN6Q3V.cjs +869 -0
- package/dist/chunk-N4GN6Q3V.cjs.map +1 -0
- package/dist/{chunk-FSKONGCX.cjs → chunk-OJ2AM75W.cjs} +2 -2
- package/dist/chunk-OJ2AM75W.cjs.map +1 -0
- package/dist/{chunk-QX3WNQ7V.js → chunk-OX6GOIPH.js} +4 -4
- package/dist/{chunk-QX3WNQ7V.js.map → chunk-OX6GOIPH.js.map} +1 -1
- package/dist/{chunk-OZ3CCTTA.cjs → chunk-OXYSOU6Z.cjs} +18 -5
- package/dist/chunk-OXYSOU6Z.cjs.map +1 -0
- package/dist/{chunk-CMXVTUYV.js → chunk-OYCICW4B.js} +38 -63
- package/dist/chunk-OYCICW4B.js.map +1 -0
- package/dist/{chunk-HVCUIII2.cjs → chunk-TQG7G7YI.cjs} +13 -13
- package/dist/{chunk-HVCUIII2.cjs.map → chunk-TQG7G7YI.cjs.map} +1 -1
- package/dist/{chunk-3UK5XBVJ.js → chunk-WDTTHKDS.js} +117 -10
- package/dist/chunk-WDTTHKDS.js.map +1 -0
- package/dist/cli/index.cjs +148 -14
- package/dist/cli/index.cjs.map +1 -1
- package/dist/cli/index.js +148 -14
- package/dist/cli/index.js.map +1 -1
- package/dist/client.cjs +3 -3
- package/dist/client.d.cts +2 -2
- package/dist/client.d.ts +2 -2
- package/dist/client.js +1 -1
- package/dist/drizzle/index.d.cts +3 -3
- package/dist/drizzle/index.d.ts +3 -3
- package/dist/fields/index.cjs +21 -21
- package/dist/fields/index.d.cts +1 -1
- package/dist/fields/index.d.ts +1 -1
- package/dist/fields/index.js +1 -1
- package/dist/graphql/index.cjs +13 -5
- package/dist/graphql/index.d.cts +37 -7
- package/dist/graphql/index.d.ts +37 -7
- package/dist/graphql/index.js +2 -2
- package/dist/{index-BKta3cBH.d.cts → index-DHbywDs-.d.cts} +2 -2
- package/dist/{index-ClOqnkTO.d.ts → index-jLs0zlft.d.ts} +2 -2
- package/dist/index.cjs +90 -90
- package/dist/index.d.cts +15 -14
- package/dist/index.d.ts +15 -14
- package/dist/index.js +8 -8
- package/dist/mongodb/index.d.cts +3 -3
- package/dist/mongodb/index.d.ts +3 -3
- package/dist/rest/index.cjs +5 -5
- package/dist/rest/index.d.cts +4 -4
- package/dist/rest/index.d.ts +4 -4
- package/dist/rest/index.js +3 -3
- package/dist/templates/index.d.cts +2 -2
- package/dist/templates/index.d.ts +2 -2
- package/dist/trpc/index.cjs +12 -12
- package/dist/trpc/index.d.cts +3 -3
- package/dist/trpc/index.d.ts +3 -3
- package/dist/trpc/index.js +3 -3
- package/dist/{types-Dgzlftb7.d.ts → types-BzH3_rtP.d.ts} +7 -7
- package/dist/{types-Ds0tCA3L.d.cts → types-CY_iNunL.d.cts} +7 -7
- package/dist/{types-DeSApf9T.d.ts → types-C_rVxU2T.d.cts} +4 -4
- package/dist/{types-DeSApf9T.d.cts → types-C_rVxU2T.d.ts} +4 -4
- package/package.json +2 -1
- package/dist/chunk-3UK5XBVJ.js.map +0 -1
- package/dist/chunk-AX2TZRQJ.js.map +0 -1
- package/dist/chunk-CMXVTUYV.js.map +0 -1
- package/dist/chunk-DRVOUQMT.cjs.map +0 -1
- package/dist/chunk-E5UJBLQ7.js.map +0 -1
- package/dist/chunk-FKKQUMXR.cjs.map +0 -1
- package/dist/chunk-FSKONGCX.cjs.map +0 -1
- package/dist/chunk-NZEUU7QB.js.map +0 -1
- package/dist/chunk-OZ3CCTTA.cjs.map +0 -1
- package/dist/chunk-PONTBXR5.js +0 -842
- package/dist/chunk-PONTBXR5.js.map +0 -1
- package/dist/chunk-QFLB4EIJ.cjs.map +0 -1
- package/dist/chunk-QVJNSAQL.cjs.map +0 -1
- package/dist/chunk-RRKCIAPU.cjs +0 -848
- package/dist/chunk-RRKCIAPU.cjs.map +0 -1
- package/dist/chunk-VLK5SJRI.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/api/graphql/schema.ts"],"names":["result","gqlType","id"],"mappings":"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","file":"chunk-5RPRLTTN.js","sourcesContent":["import {\n GraphQLSchema,\n GraphQLObjectType,\n GraphQLString,\n GraphQLInt,\n GraphQLBoolean,\n GraphQLFloat,\n GraphQLList,\n GraphQLNonNull,\n GraphQLInputObjectType,\n GraphQLUnionType,\n GraphQLScalarType,\n type GraphQLFieldConfig,\n type GraphQLType,\n type GraphQLOutputType,\n type GraphQLInputType,\n type GraphQLInputFieldConfig,\n Kind,\n} from \"graphql\";\nimport type {\n CollectionConfig,\n GlobalConfig,\n BaseAdapter,\n} from \"../../registry/types.js\";\nimport { Registry } from \"../../registry/index.js\";\nimport type { Field, SelectField } from \"../../fields/types.js\";\nimport { evaluateAccess, type WhereClause } from \"../../access/types.js\";\nimport type { User, Request } from \"../../hooks/types.js\";\nimport type { TenantContext } from \"../../auth/rls/tenant.js\";\nimport { hasApiKeyPermission } from \"../../auth/api-key.js\";\nimport { hasPermission } from \"../../auth/rbac/checker.js\";\n\n// ============================================================================\n// Batch Loading — DataLoader-style deferred batcher\n// ============================================================================\n\ninterface LoaderOptions {\n db: BaseAdapter;\n tenantID?: string;\n user?: User;\n}\n\nexport class RelationLoader {\n private db: BaseAdapter;\n private tenantID?: string;\n private user?: User;\n private caches = new Map<string, Map<string, any>>();\n private pending = new Map<string, Set<string>>();\n private waiting = new Map<string, (value: any) => void>();\n private flushScheduled = false;\n\n constructor(opts: LoaderOptions) {\n this.db = opts.db;\n this.tenantID = opts.tenantID;\n this.user = opts.user;\n }\n\n private getCacheKey(collection: string): string {\n return collection;\n }\n\n async load(collection: string, id: string): Promise<any | undefined> {\n const key = this.getCacheKey(collection);\n let cache = this.caches.get(key);\n if (!cache) {\n cache = new Map();\n this.caches.set(key, cache);\n }\n if (cache.has(id)) {\n return cache.get(id);\n }\n\n let pendingSet = this.pending.get(key);\n if (!pendingSet) {\n pendingSet = new Set();\n this.pending.set(key, pendingSet);\n }\n pendingSet.add(id);\n cache.set(id, undefined);\n\n if (!this.flushScheduled) {\n this.flushScheduled = true;\n queueMicrotask(() => {\n this.flushScheduled = false;\n this.flushAll();\n });\n }\n\n return new Promise((resolve) => {\n this.waiting.set(`${key}:${id}`, resolve);\n });\n }\n\n async flushAll(): Promise<void> {\n for (const [key, ids] of this.pending) {\n if (ids.size === 0) continue;\n const cache = this.caches.get(key)!;\n const docs = await this.db.find({\n collection: key,\n where: { id: { in: Array.from(ids) } },\n limit: ids.size,\n tenantID: this.tenantID,\n draft: !!this.user,\n });\n for (const doc of (docs.docs || []) as any[]) {\n if (doc && doc.id) {\n cache.set(doc.id, doc);\n const resolve = this.waiting.get(`${key}:${doc.id}`);\n if (resolve) {\n resolve(doc);\n this.waiting.delete(`${key}:${doc.id}`);\n }\n }\n }\n }\n\n for (const [keyId, resolve] of this.waiting) {\n resolve(undefined);\n }\n this.waiting.clear();\n this.pending.clear();\n }\n\n resolveOne(collection: string, id: string): any | undefined {\n return this.caches.get(this.getCacheKey(collection))?.get(id);\n }\n}\n\n// ============================================================================\n// JSON Scalar — for free-form data (tabs, json, richtext, blocks)\n// ============================================================================\n\nconst GraphQLJSON = new GraphQLScalarType({\n name: \"JSON\",\n description: \"Arbitrary JSON value\",\n serialize(value: any): any {\n return value;\n },\n parseValue(value: any): any {\n return value;\n },\n parseLiteral(ast: any): any {\n switch (ast.kind) {\n case Kind.STRING: return ast.value;\n case Kind.INT:\n case Kind.FLOAT: return parseFloat(ast.value);\n case Kind.BOOLEAN: return ast.value;\n case Kind.OBJECT: {\n const obj: any = {};\n for (const field of ast.fields) {\n obj[field.name.value] = GraphQLJSON.parseLiteral(field.value);\n }\n return obj;\n }\n case Kind.LIST: return ast.values.map((v: any) => GraphQLJSON.parseLiteral(v));\n case Kind.NULL: return null;\n default: return null;\n }\n },\n});\n\n// ============================================================================\n// GraphQL Context — passed through Yoga/execute contextValue per request\n// ============================================================================\n\nexport interface GraphQLContext {\n db: BaseAdapter;\n registry: Registry;\n user?: User;\n req?: Request;\n tenantID?: string;\n apiKey?: any;\n relationLoader: RelationLoader;\n}\n\n// ============================================================================\n// Depth Limiting — prevents runaway deeply-nested queries\n// ============================================================================\n\nexport function depthLimit(maxDepth: number) {\n return (validationContext: any) => {\n let depth = 0;\n return {\n Field() {\n depth++;\n if (depth > maxDepth) {\n validationContext.reportError(\n new Error(`Query exceeds max depth of ${maxDepth}`),\n );\n }\n },\n leaveField() { depth--; },\n };\n };\n}\n\n// ============================================================================\n// Naming Helpers\n// ============================================================================\n\nfunction toPascal(slug: string): string {\n return slug.split(/[-_]/).map(s => s.charAt(0).toUpperCase() + s.slice(1)).join('');\n}\n\nfunction toCamel(slug: string): string {\n const p = toPascal(slug);\n return p.charAt(0).toLowerCase() + p.slice(1);\n}\n\nfunction toSingular(slug: string): string {\n return slug.endsWith('s') && slug.length > 1 ? slug.slice(0, -1) : slug;\n}\n\n// ============================================================================\n// GraphQL Error Helpers\n// ============================================================================\n\nfunction gqlError(message: string, code: string): Error {\n const err = new Error(message);\n (err as any).extensions = { code };\n return err;\n}\n\n// ============================================================================\n// Access Control Helper\n// ============================================================================\n\nasync function checkGraphQLAccess(\n collection: { access?: any; slug: string },\n operation: \"read\" | \"create\" | \"update\" | \"delete\",\n context: { user?: User; req?: Request; tenantID?: string; apiKey?: any },\n): Promise<{ allowed: boolean; extraWhere?: WhereClause }> {\n const accessRule = collection.access?.[operation];\n\n // API key authentication — the key's own permissions govern access\n if (context.apiKey) {\n if (context.apiKey.permissions?.length > 0) {\n const resource = collection.slug;\n const action = operation === \"read\" ? \"read\" : operation === \"create\" ? \"create\" : \"update\";\n const permission = `${resource}:${action}`;\n if (\n !hasApiKeyPermission(context.apiKey.permissions, permission) &&\n !hasApiKeyPermission(context.apiKey.permissions, `${resource}:admin`)\n ) {\n return { allowed: false };\n }\n return { allowed: true };\n }\n // Unrestricted key (no explicit permissions) — check accessRule if present, otherwise allow\n if (accessRule) {\n const result = await evaluateAccess(accessRule, {\n req: context.req!,\n user: context.user,\n tenantID: context.tenantID,\n });\n if (typeof result === \"boolean\") {\n return { allowed: result };\n }\n return { allowed: true, extraWhere: result };\n }\n return { allowed: true };\n }\n\n // RBAC check for authenticated users (no API key)\n if (context.user) {\n const resource = collection.slug;\n const action = operation === \"read\" ? \"read\" : operation === \"create\" ? \"create\" : operation === \"update\" ? \"update\" : \"delete\";\n const permission = `${resource}:${action}`;\n const userHasPermission = hasPermission(\n { id: context.user.id, email: context.user.email, role: context.user.role } as any,\n permission,\n );\n if (!userHasPermission && !hasPermission(\n { id: context.user.id, email: context.user.email, role: context.user.role } as any,\n `${resource}:admin`,\n )) {\n if (!accessRule) {\n return { allowed: false };\n }\n }\n }\n\n if (!accessRule) {\n if (!context.user) {\n return { allowed: false };\n }\n return { allowed: true };\n }\n\n const result = await evaluateAccess(accessRule, {\n req: context.req!,\n user: context.user,\n tenantID: context.tenantID,\n });\n\n if (typeof result === \"boolean\") {\n return { allowed: result };\n }\n\n return { allowed: true, extraWhere: result };\n}\n\nasync function checkGlobalAccess(\n global: { access?: any; slug?: string },\n operation: \"read\" | \"update\",\n context: { user?: User; req?: Request; tenantID?: string; apiKey?: any },\n): Promise<{ allowed: boolean }> {\n const accessRule = global.access?.[operation];\n\n // API key authentication — the key's own permissions govern access\n if (context.apiKey) {\n if (context.apiKey.permissions?.length > 0) {\n const resource = global.slug;\n const permission = `${resource}:${operation}`;\n if (\n !hasApiKeyPermission(context.apiKey.permissions, permission) &&\n !hasApiKeyPermission(context.apiKey.permissions, `${resource}:admin`) &&\n !hasApiKeyPermission(context.apiKey.permissions, `${resource}:*`)\n ) {\n return { allowed: false };\n }\n return { allowed: true };\n }\n if (accessRule) {\n const result = await evaluateAccess(accessRule, {\n req: context.req!,\n user: context.user,\n tenantID: context.tenantID,\n });\n return { allowed: typeof result === \"boolean\" ? result : true };\n }\n return { allowed: true };\n }\n\n if (!accessRule) {\n if (!context.user) {\n return { allowed: false };\n }\n const userRole = context.user.role;\n if (userRole === \"super_admin\" || userRole === \"admin\") {\n return { allowed: true };\n }\n return { allowed: false };\n }\n\n const result = await evaluateAccess(accessRule, {\n req: context.req!,\n user: context.user,\n tenantID: context.tenantID,\n });\n\n if (typeof result === \"boolean\") {\n return { allowed: result };\n }\n\n return { allowed: true };\n}\n\n// ============================================================================\n// Media URL Helpers\n// ============================================================================\n\nfunction resolveMediaUrl(url: string | null | undefined, origin?: string): string | null {\n if (!url) return null;\n if (url.startsWith(\"http://\") || url.startsWith(\"https://\") || url.startsWith(\"blob:\") || url.startsWith(\"data:\")) return url;\n const base = (process.env.KYRO_BASE_URL || origin || \"http://localhost:4321\").replace(/\\/+$/, \"\");\n return `${base}${url.startsWith(\"/\") ? \"\" : \"/\"}${url}`;\n}\n\nfunction processMediaDoc(doc: any, origin?: string): any {\n if (!doc) return doc;\n if (doc.url) doc.url = resolveMediaUrl(doc.url, origin);\n if (doc.thumbnailUrl) doc.thumbnailUrl = resolveMediaUrl(doc.thumbnailUrl, origin);\n return doc;\n}\n\n// ============================================================================\n// Field → GraphQL Type Mapping\n// ============================================================================\n\nfunction fieldToGraphQLType(\n field: Field,\n registry: Registry,\n collectionTypes?: Record<string, GraphQLObjectType>,\n isInputType = false,\n): GraphQLType {\n switch (field.type) {\n case \"text\":\n case \"email\":\n case \"password\":\n case \"textarea\":\n case \"color\":\n case \"code\":\n case \"markdown\":\n case \"date\":\n case \"select\":\n case \"radio\":\n return GraphQLString;\n case \"upload\": {\n const uploadField = field as any;\n if (isInputType) {\n return uploadField.hasMany ? new GraphQLList(GraphQLString) : GraphQLString;\n }\n if (uploadField.relationTo && collectionTypes?.[uploadField.relationTo]) {\n const refType = collectionTypes[uploadField.relationTo];\n return uploadField.hasMany ? new GraphQLList(refType) : refType;\n }\n return GraphQLJSON;\n }\n case \"image\": {\n if (isInputType) return GraphQLString;\n const imageField = field as any;\n if (imageField.relationTo && collectionTypes?.[imageField.relationTo]) {\n return collectionTypes[imageField.relationTo];\n }\n return GraphQLJSON;\n }\n case \"number\":\n return field.integer ? GraphQLInt : GraphQLFloat;\n case \"checkbox\":\n return GraphQLBoolean;\n case \"json\":\n case \"richtext\":\n case \"blocks\":\n case \"tabs\":\n return isInputType ? GraphQLJSON : GraphQLJSON;\n case \"relationship\":\n if (typeof field.relationTo === \"string\") {\n if (isInputType) {\n return field.hasMany ? new GraphQLList(GraphQLString) : GraphQLString;\n }\n if (collectionTypes?.[field.relationTo]) {\n return field.hasMany ? new GraphQLList(collectionTypes[field.relationTo]) : collectionTypes[field.relationTo];\n }\n const relatedCollection = registry.getCollection(field.relationTo);\n if (relatedCollection) {\n return new GraphQLObjectType({\n name: `${toPascal(field.relationTo)}Ref`,\n fields: () => ({\n id: { type: GraphQLString },\n ...buildFieldsFromCollection(relatedCollection, registry, collectionTypes),\n }),\n });\n }\n }\n return GraphQLString;\n case \"array\":\n return new GraphQLList(GraphQLString);\n case \"group\":\n return isInputType ? GraphQLJSON : GraphQLJSON;\n default:\n return GraphQLString;\n }\n}\n\nfunction buildFieldsFromCollection(\n config: CollectionConfig,\n registry: Registry,\n collectionTypes?: Record<string, GraphQLObjectType>,\n): Record<string, GraphQLFieldConfig<any, any>> {\n const fields: Record<string, GraphQLFieldConfig<any, any>> = {};\n\n for (const field of config.fields) {\n if (field.name && field.admin?.hidden !== true) {\n const fieldConfig = buildFieldConfig(field, registry, collectionTypes);\n if (fieldConfig) {\n fields[field.name] = fieldConfig;\n }\n }\n }\n\n return fields;\n}\n\n// ============================================================================\n// Field Config Builder — builds GraphQL field configs with custom resolvers\n// ============================================================================\n\nfunction buildFieldConfig(\n field: Field,\n registry: Registry,\n collectionTypes?: Record<string, any>,\n): GraphQLFieldConfig<any, any> | null {\n if (!field.name) return null;\n const deprecationReason = (field as any).deprecated || undefined;\n if (field.type === \"upload\") {\n const gqlType = fieldToGraphQLType(field, registry, collectionTypes, false) as GraphQLOutputType;\n const uploadField = field as any;\n return {\n type: field.required ? new GraphQLNonNull(gqlType) : gqlType,\n description: field.admin?.description || field.label,\n deprecationReason,\n resolve: async (source: any, args: any, ctx: any) => {\n const loader: RelationLoader | undefined = ctx?.relationLoader;\n const value = source?.[uploadField.name];\n const origin = ctx?.req?.url ? new URL(ctx.req.url).origin : undefined;\n if (!value) return null;\n if (uploadField.hasMany) {\n const items: any[] = Array.isArray(value) ? value : [];\n return Promise.all(items.map(async (item: any) => {\n const id = typeof item === \"string\" ? item : item?.id;\n if (!id) return processMediaDoc(item, origin);\n if (typeof item === \"object\" && item?.url) return processMediaDoc(item, origin);\n if (loader) {\n const cached = loader.resolveOne(uploadField.relationTo, id);\n if (cached) return processMediaDoc(cached, origin);\n const loaded = await loader.load(uploadField.relationTo, id);\n if (loaded) return processMediaDoc(loaded, origin);\n }\n return { id };\n }));\n }\n const id = typeof value === \"string\" ? value : value?.id;\n if (!id) return processMediaDoc(value, origin);\n if (typeof value === \"object\" && value?.url) return processMediaDoc(value, origin);\n if (loader) {\n const cached = loader.resolveOne(uploadField.relationTo, id);\n if (cached) return processMediaDoc(cached, origin);\n const loaded = await loader.load(uploadField.relationTo, id);\n if (loaded) return processMediaDoc(loaded, origin);\n }\n return { id };\n },\n };\n }\n if (field.type === \"relationship\" && !(field as any).hasMany) {\n const gqlType = fieldToGraphQLType(field, registry, collectionTypes, false) as GraphQLOutputType;\n return {\n type: field.required ? new GraphQLNonNull(gqlType) : gqlType,\n description: field.admin?.description || field.label,\n deprecationReason,\n resolve: async (source: any, args: any, ctx: any) => {\n const loader: RelationLoader | undefined = ctx?.relationLoader;\n const relField = field as any;\n const id = source?.[relField.name];\n if (!id) return null;\n if (loader && typeof id === \"string\") {\n const cached = loader.resolveOne(relField.relationTo, id);\n if (cached) return cached;\n const loaded = await loader.load(relField.relationTo, id);\n if (loaded) return loaded;\n }\n return { id };\n },\n };\n }\n if (field.type === \"relationship\" && (field as any).hasMany) {\n const gqlType = fieldToGraphQLType(field, registry, collectionTypes, false) as GraphQLOutputType;\n return {\n type: gqlType,\n description: field.admin?.description || field.label,\n deprecationReason,\n resolve: async (source: any, args: any, ctx: any) => {\n const loader: RelationLoader | undefined = ctx?.relationLoader;\n const relField = field as any;\n const ids: string[] = source?.[relField.name] || [];\n if (!ids.length) return [];\n if (loader) {\n const results: any[] = [];\n for (const id of ids) {\n const cached = loader.resolveOne(relField.relationTo, id);\n if (cached) results.push(cached);\n else {\n const loaded = await loader.load(relField.relationTo, id);\n results.push(loaded || { id });\n }\n }\n return results;\n }\n return ids.map((id: string) => ({ id }));\n },\n };\n }\n // Default: build a simple field config without custom resolver\n const gqlType = fieldToGraphQLType(field, registry, collectionTypes, false) as GraphQLOutputType;\n return {\n type: field.required ? new GraphQLNonNull(gqlType) : gqlType,\n description: field.admin?.description || field.label,\n deprecationReason,\n };\n}\n\n// ============================================================================\n// GraphQL Schema Builder\n// ============================================================================\n\nexport interface GraphQLSchemaOptions {\n registry: Registry;\n db: BaseAdapter;\n user?: User;\n req?: Request;\n tenantID?: string;\n apiKey?: any;\n settings?: Record<string, any>;\n}\n\nexport function buildGraphQLSchema(\n options: GraphQLSchemaOptions,\n): GraphQLSchema {\n const { registry, db, user, req, tenantID, apiKey, settings } = options;\n\n // Check if GraphQL is disabled in settings\n const apiAccess = settings?.access?.apiAccess;\n if (apiAccess?.graphqlEnabled === false) {\n throw new Error(\"GraphQL API is disabled\");\n }\n\n const collections = registry.getCollections();\n const globals = registry.getGlobals();\n\n // Build collection types\n const collectionTypes: Record<string, GraphQLObjectType> = {};\n const collectionInputTypes: Record<string, GraphQLInputObjectType> = {};\n\n for (const collection of collections) {\n // Output type\n collectionTypes[collection.slug] = new GraphQLObjectType({\n name: toPascal(toSingular(collection.slug)),\n fields: () => ({\n id: { type: GraphQLString },\n ...buildFieldsFromCollection(collection, registry, collectionTypes),\n ...(collection.timestamps\n ? {\n createdAt: { type: GraphQLString },\n updatedAt: { type: GraphQLString },\n }\n : {}),\n ...(collection.tenantScoped\n ? {\n tenantID: { type: GraphQLString },\n }\n : {}),\n }),\n });\n\n // Input type for create/update\n const inputFields: Record<string, { type: GraphQLType }> = {};\n for (const field of collection.fields) {\n if (field.name && field.name !== \"id\") {\n inputFields[field.name] = {\n type: fieldToGraphQLType(field, registry, collectionTypes, true) as any,\n };\n }\n }\n\n collectionInputTypes[collection.slug] = new GraphQLInputObjectType({\n name: `${toPascal(toSingular(collection.slug))}Input`,\n fields: () => inputFields as any,\n });\n }\n\n // Build global types and input types\n const globalTypes: Record<string, GraphQLObjectType> = {};\n const globalInputTypes: Record<string, GraphQLInputObjectType> = {};\n\n for (const global of globals) {\n globalTypes[global.slug] = new GraphQLObjectType({\n name: `${toPascal(global.slug)}Global`,\n fields: () => ({\n id: { type: GraphQLString },\n ...buildFieldsFromCollection(\n { slug: global.slug, fields: global.fields } as CollectionConfig,\n registry,\n collectionTypes,\n ),\n }),\n });\n\n globalInputTypes[global.slug] = new GraphQLInputObjectType({\n name: `${toPascal(global.slug)}GlobalInput`,\n fields: () => {\n const inputFields: Record<string, { type: GraphQLType }> = {};\n for (const field of global.fields) {\n if (field.name && field.name !== \"id\") {\n inputFields[field.name] = {\n type: fieldToGraphQLType(field, registry, collectionTypes, true) as any,\n };\n }\n }\n return inputFields as any;\n },\n });\n }\n\n // Build query type\n const queryFields: Record<string, GraphQLFieldConfig<any, any>> = {};\n\n // List queries for each collection\n for (const collection of collections) {\n const type = collectionTypes[collection.slug];\n if (!type) continue;\n\n // FindMany query\n queryFields[toCamel(collection.slug)] = {\n type: new GraphQLObjectType({\n name: `${toPascal(toSingular(collection.slug))}FindResult`,\n fields: {\n docs: { type: new GraphQLList(type) },\n totalDocs: { type: GraphQLInt },\n page: { type: GraphQLInt },\n totalPages: { type: GraphQLInt },\n hasNextPage: { type: GraphQLBoolean },\n hasPrevPage: { type: GraphQLBoolean },\n },\n }),\n args: {\n where: { type: GraphQLString },\n sort: { type: GraphQLString },\n limit: { type: GraphQLInt },\n page: { type: GraphQLInt },\n draft: { type: GraphQLBoolean },\n },\n resolve: async (_: any, args: any, context: any) => {\n const access = await checkGraphQLAccess(collection, \"read\", {\n user: context.user,\n req: context.req,\n tenantID: context.tenantID,\n apiKey: context.apiKey,\n });\n if (!access.allowed) {\n throw new Error(\"Access denied\");\n }\n\n if (context.tenantID) {\n db.setTenantContext({ tenantId: context.tenantID, userId: context.user?.id ?? '', role: context.user?.role, isSuperAdmin: context.user?.role === 'super_admin' });\n }\n\n let where = {};\n if (args.where) {\n try {\n where = JSON.parse(args.where);\n } catch {}\n }\n\n if (access.extraWhere) {\n where = { ...where, ...access.extraWhere };\n }\n\n const isDraft = args.draft ?? !!context.user;\n\n return db.find({\n collection: collection.slug,\n where,\n sort: args.sort,\n limit: args.limit || 10,\n page: args.page || 1,\n tenantID: context.tenantID,\n draft: isDraft,\n });\n },\n };\n\n // FindByID query\n queryFields[toCamel(toSingular(collection.slug))] = {\n type,\n args: {\n id: { type: GraphQLString },\n slug: { type: GraphQLString },\n draft: { type: GraphQLBoolean },\n },\n resolve: async (_: any, args: any, context: any) => {\n if (!args.id && !args.slug) {\n throw new Error(\"Either id or slug is required\");\n }\n\n const access = await checkGraphQLAccess(collection, \"read\", {\n user: context.user,\n req: context.req,\n tenantID: context.tenantID,\n apiKey: context.apiKey,\n });\n if (!access.allowed) {\n throw new Error(\"Access denied\");\n }\n\n if (context.tenantID) {\n db.setTenantContext({ tenantId: context.tenantID, userId: context.user?.id ?? '', role: context.user?.role, isSuperAdmin: context.user?.role === 'super_admin' });\n }\n\n const isDraft = args.draft ?? !!context.user;\n\n if (args.id) {\n return db.findByID({\n collection: collection.slug,\n id: args.id,\n tenantID: context.tenantID,\n draft: isDraft,\n });\n }\n\n const result = await db.find({\n collection: collection.slug,\n where: { slug: { equals: args.slug } },\n limit: 1,\n page: 1,\n tenantID: context.tenantID,\n draft: isDraft,\n });\n return result.docs?.[0] || null;\n },\n };\n\n // Count query\n queryFields[`count${toPascal(collection.slug)}`] = {\n type: new GraphQLObjectType({\n name: `${toPascal(toSingular(collection.slug))}Count`,\n fields: {\n totalDocs: { type: GraphQLInt },\n },\n }),\n args: {\n where: { type: GraphQLString },\n },\n resolve: async (_: any, args: any, context: any) => {\n const access = await checkGraphQLAccess(collection, \"read\", {\n user: context.user,\n req: context.req,\n tenantID: context.tenantID,\n apiKey: context.apiKey,\n });\n if (!access.allowed) {\n return { totalDocs: 0 };\n }\n let where = {};\n if (args.where) {\n try {\n where = JSON.parse(args.where);\n } catch {}\n }\n const count = await db.count({\n collection: collection.slug,\n where,\n tenantID: context.tenantID,\n });\n return { totalDocs: count };\n },\n };\n }\n\n // Global queries\n for (const global of globals) {\n const type = globalTypes[global.slug];\n if (!type) continue;\n\n queryFields[toCamel(toSingular(global.slug))] = {\n type,\n resolve: async (_: any, args: any, context: any) => {\n const access = await checkGlobalAccess(global, \"read\", {\n user: context.user,\n req: context.req,\n tenantID: context.tenantID,\n apiKey: context.apiKey,\n });\n if (!access.allowed) {\n throw new Error(\"Access denied: cannot read global\");\n }\n if (context.tenantID) {\n db.setTenantContext({ tenantId: context.tenantID, userId: context.user?.id ?? '', role: context.user?.role, isSuperAdmin: context.user?.role === 'super_admin' });\n }\n return db.findOne({\n collection: `_globals_${global.slug}`,\n where: {},\n tenantID: context.tenantID,\n });\n },\n };\n }\n\n const Query = new GraphQLObjectType({\n name: \"Query\",\n fields: queryFields,\n });\n\n // Build mutation type\n const mutationFields: Record<string, GraphQLFieldConfig<any, any>> = {};\n\n for (const collection of collections) {\n const type = collectionTypes[collection.slug];\n const inputType = collectionInputTypes[collection.slug];\n if (!type || !inputType) continue;\n\n // Create mutation\n mutationFields[`create${toPascal(toSingular(collection.slug))}`] = {\n type: new GraphQLObjectType({\n name: `${toPascal(toSingular(collection.slug))}CreateResult`,\n fields: {\n doc: { type },\n message: { type: GraphQLString },\n },\n }),\n args: {\n data: { type: new GraphQLNonNull(inputType) },\n },\n resolve: async (_: any, args: any, context: any) => {\n const access = await checkGraphQLAccess(collection, \"create\", {\n user: context.user,\n req: context.req,\n tenantID: context.tenantID,\n apiKey: context.apiKey,\n });\n if (!access.allowed) {\n throw new Error(\"Access denied: cannot create\");\n }\n if (context.tenantID) {\n db.setTenantContext({ tenantId: context.tenantID, userId: context.user?.id ?? '', role: context.user?.role, isSuperAdmin: context.user?.role === 'super_admin' });\n }\n const schema = registry.getCreateZodSchema(collection.slug);\n\n const validated = schema.parse(args.data);\n\n const doc = await db.create({\n collection: collection.slug,\n data: validated,\n tenantID: context.tenantID,\n });\n\n return { doc, message: \"Created successfully\" };\n },\n };\n\n // Update mutation\n mutationFields[`update${toPascal(toSingular(collection.slug))}`] = {\n type: new GraphQLObjectType({\n name: `${toPascal(toSingular(collection.slug))}UpdateResult`,\n fields: {\n doc: { type },\n message: { type: GraphQLString },\n },\n }),\n args: {\n id: { type: new GraphQLNonNull(GraphQLString) },\n data: { type: new GraphQLNonNull(inputType) },\n baseUpdatedAt: { type: GraphQLString },\n },\n resolve: async (_: any, args: any, context: any) => {\n const access = await checkGraphQLAccess(collection, \"update\", {\n user: context.user,\n req: context.req,\n tenantID: context.tenantID,\n apiKey: context.apiKey,\n });\n if (!access.allowed) {\n throw new Error(\"Access denied: cannot update\");\n }\n if (context.tenantID) {\n db.setTenantContext({ tenantId: context.tenantID, userId: context.user?.id ?? '', role: context.user?.role, isSuperAdmin: context.user?.role === 'super_admin' });\n }\n\n // Revision conflict detection\n if (args.baseUpdatedAt) {\n const originalDoc = await db.findByID<Record<string, any>>({\n collection: collection.slug,\n id: args.id,\n tenantID: context.tenantID,\n draft: true,\n });\n if (originalDoc && originalDoc.updatedAt && args.baseUpdatedAt !== originalDoc.updatedAt) {\n throw new Error(`Revision conflict: document has changed since ${args.baseUpdatedAt}. Current updatedAt: ${originalDoc.updatedAt}`);\n }\n }\n\n const schema = registry.getUpdateZodSchema(collection.slug);\n\n const validated = schema.parse(args.data);\n\n const doc = await db.update({\n collection: collection.slug,\n id: args.id,\n data: validated,\n tenantID: context.tenantID,\n });\n\n return { doc, message: \"Updated successfully\" };\n },\n };\n\n // Delete mutation\n mutationFields[`delete${toPascal(toSingular(collection.slug))}`] = {\n type: new GraphQLObjectType({\n name: `${toPascal(toSingular(collection.slug))}DeleteResult`,\n fields: {\n doc: { type },\n message: { type: GraphQLString },\n },\n }),\n args: {\n id: { type: new GraphQLNonNull(GraphQLString) },\n },\n resolve: async (_: any, args: any, context: any) => {\n const access = await checkGraphQLAccess(collection, \"delete\", {\n user: context.user,\n req: context.req,\n tenantID: context.tenantID,\n apiKey: context.apiKey,\n });\n if (!access.allowed) {\n throw new Error(\"Access denied: cannot delete\");\n }\n if (context.tenantID) {\n db.setTenantContext({ tenantId: context.tenantID, userId: context.user?.id ?? '', role: context.user?.role, isSuperAdmin: context.user?.role === 'super_admin' });\n }\n const doc = await db.delete({\n collection: collection.slug,\n id: args.id,\n tenantID: context.tenantID,\n });\n\n return { doc, message: \"Deleted successfully\" };\n },\n };\n }\n\n // Global mutations\n for (const global of globals) {\n const inputType = globalInputTypes[global.slug];\n if (!inputType) continue;\n\n mutationFields[`update${toPascal(global.slug)}`] = {\n type: new GraphQLObjectType({\n name: `${toPascal(global.slug)}UpdateResult`,\n fields: {\n doc: { type: globalTypes[global.slug] || GraphQLString },\n message: { type: GraphQLString },\n },\n }),\n args: {\n data: { type: new GraphQLNonNull(inputType) },\n },\n resolve: async (_: any, args: any, context: any) => {\n const access = await checkGlobalAccess(global, \"update\", {\n user: context.user,\n req: context.req,\n tenantID: context.tenantID,\n apiKey: context.apiKey,\n });\n if (!access.allowed) {\n throw new Error(\"Access denied: cannot update global\");\n }\n if (context.tenantID) {\n db.setTenantContext({ tenantId: context.tenantID, userId: context.user?.id ?? '', role: context.user?.role, isSuperAdmin: context.user?.role === 'super_admin' });\n }\n\n const doc = await db.findOne({\n collection: `_globals_${global.slug}`,\n where: {},\n tenantID: context.tenantID,\n });\n\n let result;\n if (doc) {\n result = await db.update({\n collection: `_globals_${global.slug}`,\n id: doc.id,\n data: args.data,\n tenantID: context.tenantID,\n });\n } else {\n result = await db.create({\n collection: `_globals_${global.slug}`,\n data: args.data,\n tenantID: context.tenantID,\n });\n }\n\n return { doc: result, message: \"Updated successfully\" };\n },\n };\n }\n\n const Mutation = new GraphQLObjectType({\n name: \"Mutation\",\n fields: mutationFields,\n });\n\n return new GraphQLSchema({\n query: Query,\n mutation: Mutation,\n });\n}\n\n// ============================================================================\n// Factory\n// ============================================================================\n\nexport function createGraphQLSchema(\n registry: Registry,\n db: BaseAdapter,\n options?: {\n user?: User;\n req?: Request;\n tenantID?: string;\n apiKey?: any;\n },\n): GraphQLSchema {\n return buildGraphQLSchema({\n registry,\n db,\n user: options?.user,\n req: options?.req,\n tenantID: options?.tenantID,\n apiKey: options?.apiKey,\n });\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createKyro, LocalAdapter } from './chunk-
|
|
1
|
+
import { createKyro, LocalAdapter } from './chunk-OYCICW4B.js';
|
|
2
2
|
import { autoBootstrap } from './chunk-GAAHG2Z4.js';
|
|
3
3
|
import { SQLiteAuthAdapter } from './chunk-Q72BOAPK.js';
|
|
4
4
|
import { DrizzleAdapter } from './chunk-V7KZQIZ6.js';
|
|
@@ -83,10 +83,23 @@ var ALL = async (context) => {
|
|
|
83
83
|
});
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
|
+
const url = new URL(context.request.url);
|
|
87
|
+
const path = url.pathname;
|
|
88
|
+
const p = __KYRO_API_PATH__;
|
|
89
|
+
if (path === `${p}/graphql` && typeof kyroInstance.getGraphQL === "function") {
|
|
90
|
+
const yoga = kyroInstance.getGraphQL();
|
|
91
|
+
const res = await yoga.fetch(context.request, context.locals);
|
|
92
|
+
return new Response(res.body, res);
|
|
93
|
+
}
|
|
94
|
+
if (path.startsWith(`${p}/trpc/`) && typeof kyroInstance.getTRPC === "function") {
|
|
95
|
+
const trpc = kyroInstance.getTRPC();
|
|
96
|
+
const res = await trpc.fetch(context.request, context.locals);
|
|
97
|
+
return new Response(res.body, res);
|
|
98
|
+
}
|
|
86
99
|
const app = kyroInstance.getREST();
|
|
87
100
|
return app.fetch(context.request, context.locals);
|
|
88
101
|
};
|
|
89
102
|
|
|
90
103
|
export { ALL, kyroInstance, warmKyroInstance };
|
|
91
|
-
//# sourceMappingURL=chunk-
|
|
92
|
-
//# sourceMappingURL=chunk-
|
|
104
|
+
//# sourceMappingURL=chunk-BVUDFKKS.js.map
|
|
105
|
+
//# sourceMappingURL=chunk-BVUDFKKS.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/api-handler.ts"],"names":[],"mappings":"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","file":"chunk-BVUDFKKS.js","sourcesContent":["import type { APIRoute } from \"astro\";\nimport { createKyro } from \"./createKyro.js\";\nimport { autoBootstrap } from \"./auth/bootstrap.js\";\nimport { DrizzleAdapter } from \"./database/drizzle/adapter.js\";\nimport { PostgresAuthAdapter } from \"./database/drizzle/postgres-auth-adapter.js\";\nimport { LocalAdapter } from \"./database/local/adapter.js\";\nimport { SQLiteAuthAdapter } from \"./auth/sqlite-adapter.js\";\nimport { MongoDBAdapter } from \"./database/mongodb/adapter.js\";\nimport { MongoDBAuthAdapter } from \"./database/mongodb/mongo-auth-adapter.js\";\n// @ts-ignore - handled by vite alias\nimport projectConfig from \"kyro:config\";\n\ndeclare var __KYRO_API_PATH__: string;\n\nexport let kyroInstance: any = null;\nlet initPromise: Promise<void> | null = null;\n\nasync function doInit(): Promise<void> {\n if (kyroInstance) return;\n\n try {\n const config = projectConfig.default || projectConfig;\n kyroInstance = createKyro(config);\n await kyroInstance.init();\n await kyroInstance.loadSettings();\n\n const db = kyroInstance.db;\n let bootstrapAuthAdapter: any = undefined;\n \n if (db instanceof DrizzleAdapter) {\n if (db.dialect === \"postgres\") {\n bootstrapAuthAdapter = new PostgresAuthAdapter({ db: db.client });\n } else if (db.dialect === \"sqlite\") {\n const authDbPath = process.env.KYRO_AUTH_DB_PATH || \"./data/auth.db\";\n bootstrapAuthAdapter = new SQLiteAuthAdapter({ path: authDbPath });\n }\n } else if (db instanceof LocalAdapter) {\n const authDbPath = process.env.KYRO_AUTH_DB_PATH || \"./data/auth.db\";\n bootstrapAuthAdapter = new SQLiteAuthAdapter({ path: authDbPath });\n } else if (db instanceof MongoDBAdapter) {\n bootstrapAuthAdapter = new MongoDBAuthAdapter({ db: db.db });\n }\n\n if (bootstrapAuthAdapter?.connect) {\n await bootstrapAuthAdapter.connect();\n }\n\n const result = await autoBootstrap(bootstrapAuthAdapter);\n if (result?.success) {\n console.log(`[Kyro] Admin user auto-created from env: ${result.user?.email}`);\n }\n\n // Auto-start WebSocket (checks settings.access.apiAccess.wsEnabled internally)\n if (typeof kyroInstance.startWebSocket === \"function\") {\n kyroInstance.startWebSocket().catch((err: any) => {\n console.error(\"[Kyro] WebSocket auto-start failed:\", err);\n });\n }\n\n // Expose instance globally so admin SSR can read DB directly\n (globalThis as any).__KYRO_INSTANCE__ = kyroInstance;\n\n console.log(\"[Kyro API] Backend initialized via Astro Integration\");\n } catch (err) {\n kyroInstance = null;\n initPromise = null;\n console.error(\"[Kyro API] Init failed, will retry:\", err);\n throw err;\n }\n}\n\nexport async function warmKyroInstance(): Promise<void> {\n if (!initPromise) {\n initPromise = doInit();\n }\n await initPromise;\n}\n\nexport const ALL: APIRoute = async (context) => {\n if (!kyroInstance) {\n if (!initPromise) {\n initPromise = doInit();\n }\n\n try {\n await Promise.race([\n initPromise,\n new Promise<void>((_, reject) =>\n setTimeout(() => reject(new Error(\"Initialization timeout\")), 30000)\n ),\n ]);\n } catch {\n return new Response(JSON.stringify({\n error: \"Service Unavailable\",\n message: \"Kyro CMS is still starting up. Please try again in a moment.\",\n }), {\n status: 503,\n headers: {\n \"Content-Type\": \"application/json\",\n \"Retry-After\": \"5\",\n },\n });\n }\n }\n\n const url = new URL(context.request.url);\n const path = url.pathname;\n const p = __KYRO_API_PATH__;\n\n if (path === `${p}/graphql` && typeof kyroInstance.getGraphQL === \"function\") {\n const yoga = kyroInstance.getGraphQL();\n const res = await yoga.fetch(context.request, context.locals);\n return new Response(res.body, res);\n }\n\n if (path.startsWith(`${p}/trpc/`) && typeof kyroInstance.getTRPC === \"function\") {\n const trpc = kyroInstance.getTRPC();\n const res = await trpc.fetch(context.request, context.locals);\n return new Response(res.body, res);\n }\n\n const app = kyroInstance.getREST();\n return app.fetch(context.request, context.locals);\n};\n"]}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var chunk3KTWGODI_cjs = require('./chunk-3KTWGODI.cjs');
|
|
4
|
-
var
|
|
5
|
-
var
|
|
6
|
-
var
|
|
7
|
-
var
|
|
8
|
-
var
|
|
4
|
+
var chunkTQG7G7YI_cjs = require('./chunk-TQG7G7YI.cjs');
|
|
5
|
+
var chunkN4GN6Q3V_cjs = require('./chunk-N4GN6Q3V.cjs');
|
|
6
|
+
var chunkIEIHABVR_cjs = require('./chunk-IEIHABVR.cjs');
|
|
7
|
+
var chunkLNTFRAHF_cjs = require('./chunk-LNTFRAHF.cjs');
|
|
8
|
+
var chunk4OCMVGEY_cjs = require('./chunk-4OCMVGEY.cjs');
|
|
9
9
|
var chunkEEJUFDMF_cjs = require('./chunk-EEJUFDMF.cjs');
|
|
10
|
+
var chunkRFFSZSCL_cjs = require('./chunk-RFFSZSCL.cjs');
|
|
11
|
+
var chunkDPA3KWPY_cjs = require('./chunk-DPA3KWPY.cjs');
|
|
10
12
|
var chunkGUUB5EAG_cjs = require('./chunk-GUUB5EAG.cjs');
|
|
11
13
|
var zod = require('zod');
|
|
12
|
-
var
|
|
14
|
+
var graphqlYoga = require('graphql-yoga');
|
|
13
15
|
var module$1 = require('module');
|
|
14
16
|
var crypto = require('crypto');
|
|
15
17
|
|
|
@@ -778,7 +780,7 @@ function globalToUpdateZod(global) {
|
|
|
778
780
|
|
|
779
781
|
// src/registry/index.ts
|
|
780
782
|
var Registry = class {
|
|
781
|
-
storageProviders =
|
|
783
|
+
storageProviders = chunkIEIHABVR_cjs.getDefaultRegistry();
|
|
782
784
|
collections = /* @__PURE__ */ new Map();
|
|
783
785
|
globals = /* @__PURE__ */ new Map();
|
|
784
786
|
plugins = [];
|
|
@@ -1319,7 +1321,7 @@ var s3StoragePlugin = {
|
|
|
1319
1321
|
configFields: v.configFields,
|
|
1320
1322
|
extractConfig: (sc) => buildS3ConfigFromStorageConfig(v.type, v, sc),
|
|
1321
1323
|
extractRawConfig: (raw) => buildS3ConfigFromRaw(v.type, v, raw),
|
|
1322
|
-
factory: (c) =>
|
|
1324
|
+
factory: (c) => chunkIEIHABVR_cjs.createS3Storage(c)
|
|
1323
1325
|
});
|
|
1324
1326
|
}
|
|
1325
1327
|
}
|
|
@@ -1367,7 +1369,7 @@ var cloudinaryStoragePlugin = {
|
|
|
1367
1369
|
uploadPreset: cl?.uploadPreset
|
|
1368
1370
|
};
|
|
1369
1371
|
},
|
|
1370
|
-
factory: (c) =>
|
|
1372
|
+
factory: (c) => chunkIEIHABVR_cjs.createCloudinaryStorage(c)
|
|
1371
1373
|
});
|
|
1372
1374
|
}
|
|
1373
1375
|
};
|
|
@@ -1417,7 +1419,7 @@ var ftpStoragePlugin = {
|
|
|
1417
1419
|
type: "ftp"
|
|
1418
1420
|
};
|
|
1419
1421
|
},
|
|
1420
|
-
factory: (c) =>
|
|
1422
|
+
factory: (c) => chunkIEIHABVR_cjs.createFtpStorage(c)
|
|
1421
1423
|
});
|
|
1422
1424
|
}
|
|
1423
1425
|
};
|
|
@@ -1477,7 +1479,7 @@ var Kyro = class {
|
|
|
1477
1479
|
this.registry = createRegistry();
|
|
1478
1480
|
this.db = config.adapter;
|
|
1479
1481
|
this.pubsub = new chunkEEJUFDMF_cjs.KyroPubSub(this.registry);
|
|
1480
|
-
this.webhookService =
|
|
1482
|
+
this.webhookService = chunkLNTFRAHF_cjs.createWebhookService(this.db);
|
|
1481
1483
|
if (config.collections && config.admin?.collectionOverrides) {
|
|
1482
1484
|
applyCollectionOverrides(config.collections, config.admin.collectionOverrides);
|
|
1483
1485
|
}
|
|
@@ -1515,7 +1517,7 @@ var Kyro = class {
|
|
|
1515
1517
|
);
|
|
1516
1518
|
}
|
|
1517
1519
|
const systemCollection = {
|
|
1518
|
-
slug:
|
|
1520
|
+
slug: chunk4OCMVGEY_cjs.API_KEY_COLLECTION,
|
|
1519
1521
|
fields: [
|
|
1520
1522
|
{ name: "userId", type: "text", required: true },
|
|
1521
1523
|
{ name: "name", type: "text", required: true },
|
|
@@ -1527,7 +1529,7 @@ var Kyro = class {
|
|
|
1527
1529
|
]
|
|
1528
1530
|
};
|
|
1529
1531
|
const webhookCollection = {
|
|
1530
|
-
slug:
|
|
1532
|
+
slug: chunkLNTFRAHF_cjs.WEBHOOK_COLLECTION,
|
|
1531
1533
|
fields: [
|
|
1532
1534
|
{ name: "name", type: "text", required: true },
|
|
1533
1535
|
{ name: "url", type: "text", required: true },
|
|
@@ -1540,7 +1542,7 @@ var Kyro = class {
|
|
|
1540
1542
|
]
|
|
1541
1543
|
};
|
|
1542
1544
|
const webhookDeliveryCollection = {
|
|
1543
|
-
slug:
|
|
1545
|
+
slug: chunkLNTFRAHF_cjs.WEBHOOK_DELIVERY_COLLECTION,
|
|
1544
1546
|
fields: [
|
|
1545
1547
|
{ name: "webhookId", type: "text", required: true },
|
|
1546
1548
|
{ name: "event", type: "text", required: true },
|
|
@@ -1556,6 +1558,13 @@ var Kyro = class {
|
|
|
1556
1558
|
]
|
|
1557
1559
|
};
|
|
1558
1560
|
const allGlobals = this.registry.getGlobals();
|
|
1561
|
+
if (this.db instanceof chunkRFFSZSCL_cjs.DrizzleAdapter && this.db.dialect === "postgres") {
|
|
1562
|
+
const drizzle = this.db;
|
|
1563
|
+
const tableName = chunk4OCMVGEY_cjs.API_KEY_COLLECTION.replace(/-/g, "_");
|
|
1564
|
+
if (!drizzle.schema[tableName]) {
|
|
1565
|
+
drizzle.schema[tableName] = chunkDPA3KWPY_cjs.apiKeys;
|
|
1566
|
+
}
|
|
1567
|
+
}
|
|
1559
1568
|
await this.db.init(
|
|
1560
1569
|
[
|
|
1561
1570
|
...this.registry.getCollections(),
|
|
@@ -1614,7 +1623,7 @@ var Kyro = class {
|
|
|
1614
1623
|
const authObj = typeof this.config.auth === "object" ? this.config.auth : null;
|
|
1615
1624
|
const authSecret = authObj?.secret;
|
|
1616
1625
|
const checkSession = authObj?.checkSession !== false;
|
|
1617
|
-
return
|
|
1626
|
+
return chunkIEIHABVR_cjs.createHonoApp({
|
|
1618
1627
|
registry: this.registry,
|
|
1619
1628
|
db: this.db,
|
|
1620
1629
|
authSecret,
|
|
@@ -1627,78 +1636,41 @@ var Kyro = class {
|
|
|
1627
1636
|
});
|
|
1628
1637
|
}
|
|
1629
1638
|
getGraphQL(options) {
|
|
1630
|
-
const
|
|
1639
|
+
const schema = chunkN4GN6Q3V_cjs.buildGraphQLSchema({
|
|
1631
1640
|
registry: this.registry,
|
|
1632
1641
|
db: this.db,
|
|
1633
|
-
settings: this.settings
|
|
1634
|
-
user: options?.user,
|
|
1635
|
-
req: options?.req,
|
|
1636
|
-
tenantID: options?.tenantID
|
|
1642
|
+
settings: this.settings
|
|
1637
1643
|
});
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1644
|
+
const yoga = graphqlYoga.createYoga({
|
|
1645
|
+
schema,
|
|
1646
|
+
context: async ({ request }) => {
|
|
1647
|
+
const apiKeyRaw = chunk4OCMVGEY_cjs.extractApiKeyFromRequest(request);
|
|
1641
1648
|
let gqlUser;
|
|
1642
1649
|
let apiKeyCtx;
|
|
1643
1650
|
if (apiKeyRaw && this.db) {
|
|
1644
|
-
const apiKeyResult = await
|
|
1645
|
-
if (!apiKeyResult.valid) {
|
|
1646
|
-
return new Response(
|
|
1647
|
-
JSON.stringify({ errors: [{ message: apiKeyResult.error || "Invalid API key" }] }),
|
|
1648
|
-
{ status: 401, headers: { "Content-Type": "application/json" } }
|
|
1649
|
-
);
|
|
1650
|
-
}
|
|
1651
|
+
const apiKeyResult = await chunk4OCMVGEY_cjs.validateApiKey(apiKeyRaw, this.db);
|
|
1651
1652
|
if (apiKeyResult.user) {
|
|
1652
1653
|
gqlUser = apiKeyResult.user;
|
|
1653
|
-
apiKeyCtx =
|
|
1654
|
+
apiKeyCtx = chunk4OCMVGEY_cjs.createApiKeyContext(apiKeyResult);
|
|
1654
1655
|
}
|
|
1655
1656
|
}
|
|
1656
|
-
const
|
|
1657
|
-
|
|
1658
|
-
registry: this.registry,
|
|
1657
|
+
const tenantID = options?.tenantID;
|
|
1658
|
+
return {
|
|
1659
1659
|
db: this.db,
|
|
1660
|
-
|
|
1660
|
+
registry: this.registry,
|
|
1661
1661
|
user: gqlUser,
|
|
1662
1662
|
req: request,
|
|
1663
|
-
tenantID
|
|
1664
|
-
apiKey: apiKeyCtx
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
const query = body.query || "";
|
|
1668
|
-
const variables = body.variables || {};
|
|
1669
|
-
if (!query) {
|
|
1670
|
-
return new Response(
|
|
1671
|
-
JSON.stringify({ error: "No GraphQL query provided" }),
|
|
1672
|
-
{ status: 400, headers: { "Content-Type": "application/json" } }
|
|
1673
|
-
);
|
|
1674
|
-
}
|
|
1675
|
-
try {
|
|
1676
|
-
const document = graphql.parse(query);
|
|
1677
|
-
const result = await graphql.execute({
|
|
1678
|
-
schema,
|
|
1679
|
-
document,
|
|
1680
|
-
variableValues: variables,
|
|
1681
|
-
contextValue: {
|
|
1682
|
-
db: this.db,
|
|
1683
|
-
registry: this.registry,
|
|
1684
|
-
settings: this.settings,
|
|
1685
|
-
user: gqlUser,
|
|
1686
|
-
req: request,
|
|
1687
|
-
tenantID: options?.tenantID
|
|
1688
|
-
}
|
|
1689
|
-
});
|
|
1690
|
-
return new Response(JSON.stringify(result), {
|
|
1691
|
-
status: 200,
|
|
1692
|
-
headers: { "Content-Type": "application/json" }
|
|
1693
|
-
});
|
|
1694
|
-
} catch (err) {
|
|
1695
|
-
return new Response(
|
|
1696
|
-
JSON.stringify({ errors: [{ message: err.message }] }),
|
|
1697
|
-
{ status: 400, headers: { "Content-Type": "application/json" } }
|
|
1698
|
-
);
|
|
1699
|
-
}
|
|
1663
|
+
tenantID,
|
|
1664
|
+
apiKey: apiKeyCtx,
|
|
1665
|
+
relationLoader: new chunkN4GN6Q3V_cjs.RelationLoader({ db: this.db, tenantID, user: gqlUser })
|
|
1666
|
+
};
|
|
1700
1667
|
},
|
|
1701
|
-
|
|
1668
|
+
graphiql: false,
|
|
1669
|
+
plugins: []
|
|
1670
|
+
});
|
|
1671
|
+
return {
|
|
1672
|
+
fetch: yoga.fetch,
|
|
1673
|
+
schema
|
|
1702
1674
|
};
|
|
1703
1675
|
}
|
|
1704
1676
|
getTRPC(options) {
|
|
@@ -1721,7 +1693,7 @@ var Kyro = class {
|
|
|
1721
1693
|
{ status: 400, headers: { "Content-Type": "application/json" } }
|
|
1722
1694
|
);
|
|
1723
1695
|
}
|
|
1724
|
-
const ctx = await
|
|
1696
|
+
const ctx = await chunkTQG7G7YI_cjs.createContext({
|
|
1725
1697
|
db: this.db,
|
|
1726
1698
|
registry: this.registry,
|
|
1727
1699
|
req: request,
|
|
@@ -1729,7 +1701,7 @@ var Kyro = class {
|
|
|
1729
1701
|
tenantID: options?.tenantID,
|
|
1730
1702
|
settings: this.settings
|
|
1731
1703
|
});
|
|
1732
|
-
const kyroRouter =
|
|
1704
|
+
const kyroRouter = chunkTQG7G7YI_cjs.createKyroServer(ctx);
|
|
1733
1705
|
const collectionRouter = kyroRouter[slug];
|
|
1734
1706
|
if (!collectionRouter) {
|
|
1735
1707
|
return new Response(
|
|
@@ -1807,7 +1779,7 @@ var Kyro = class {
|
|
|
1807
1779
|
return null;
|
|
1808
1780
|
}
|
|
1809
1781
|
const defaultVerifyToken = async (token) => {
|
|
1810
|
-
const result = await
|
|
1782
|
+
const result = await chunk4OCMVGEY_cjs.validateApiKey(token, this.db);
|
|
1811
1783
|
if (!result.valid) throw new Error(result.error || "Invalid API key");
|
|
1812
1784
|
if (!result.user) throw new Error("API key has no associated user");
|
|
1813
1785
|
return result.user;
|
|
@@ -1835,7 +1807,7 @@ var Kyro = class {
|
|
|
1835
1807
|
function createKyro(config) {
|
|
1836
1808
|
return new Kyro(config);
|
|
1837
1809
|
}
|
|
1838
|
-
var _require = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-
|
|
1810
|
+
var _require = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-E4JZ73FY.cjs', document.baseURI).href)));
|
|
1839
1811
|
var modPath = "node:sqlite";
|
|
1840
1812
|
var { DatabaseSync } = _require(modPath);
|
|
1841
1813
|
function flattenFields(fields) {
|
|
@@ -2293,6 +2265,7 @@ var LocalAdapter = class extends chunkGUUB5EAG_cjs.AbstractBaseAdapter {
|
|
|
2293
2265
|
this.db.prepare(
|
|
2294
2266
|
`INSERT OR REPLACE INTO ${tableName} (${quotedColumns.join(", ")}) VALUES (${placeholders})`
|
|
2295
2267
|
).run(...values);
|
|
2268
|
+
this.ensureVersionsTable();
|
|
2296
2269
|
return this.findByID({ collection: slug, id, tenantID, draft: true });
|
|
2297
2270
|
}
|
|
2298
2271
|
async update(args) {
|
|
@@ -2322,6 +2295,7 @@ var LocalAdapter = class extends chunkGUUB5EAG_cjs.AbstractBaseAdapter {
|
|
|
2322
2295
|
params.push(tenantID);
|
|
2323
2296
|
}
|
|
2324
2297
|
this.db.prepare(sql).run(...params);
|
|
2298
|
+
this.ensureVersionsTable();
|
|
2325
2299
|
return this.findByID({ collection: slug, id, tenantID, draft: true });
|
|
2326
2300
|
}
|
|
2327
2301
|
async delete(args) {
|
|
@@ -2329,6 +2303,7 @@ var LocalAdapter = class extends chunkGUUB5EAG_cjs.AbstractBaseAdapter {
|
|
|
2329
2303
|
const parsed = this.parseGlobalsSlug(slug);
|
|
2330
2304
|
const config = parsed.isGlobal ? this.globals.get(parsed.globalSlug) : this.getCollection(slug);
|
|
2331
2305
|
this.ensureTable(config, parsed.tableName);
|
|
2306
|
+
this.ensureVersionsTable();
|
|
2332
2307
|
const doc = await this.findByID({ collection: slug, id, tenantID, draft: true });
|
|
2333
2308
|
if (!doc) throw new Error(`Document not found: ${slug}/${id}`);
|
|
2334
2309
|
const tableName = parsed.tableName;
|
|
@@ -2783,5 +2758,5 @@ exports.validateCollection = validateCollection;
|
|
|
2783
2758
|
exports.validateConfig = validateConfig;
|
|
2784
2759
|
exports.validateFields = validateFields;
|
|
2785
2760
|
exports.validateGlobal = validateGlobal;
|
|
2786
|
-
//# sourceMappingURL=chunk-
|
|
2787
|
-
//# sourceMappingURL=chunk-
|
|
2761
|
+
//# sourceMappingURL=chunk-E4JZ73FY.cjs.map
|
|
2762
|
+
//# sourceMappingURL=chunk-E4JZ73FY.cjs.map
|