@kyro-cms/core 0.9.8 → 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/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/{chunk-2GXALYKV.js → chunk-3AKCVYDB.js} +4 -109
- package/dist/chunk-3AKCVYDB.js.map +1 -0
- package/dist/{chunk-KGJRJ7CU.cjs → chunk-4OCMVGEY.cjs} +4 -110
- package/dist/chunk-4OCMVGEY.cjs.map +1 -0
- package/dist/{chunk-HA4MGAZJ.js → chunk-5RFGYEQ3.js} +109 -28
- 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-EQTMBMDR.js → chunk-BVUDFKKS.js} +16 -3
- package/dist/chunk-BVUDFKKS.js.map +1 -0
- package/dist/{chunk-OVZO4KB6.cjs → chunk-E4JZ73FY.cjs} +34 -25
- package/dist/chunk-E4JZ73FY.cjs.map +1 -0
- package/dist/{chunk-2CBCU5ML.cjs → chunk-IEIHABVR.cjs} +129 -48
- package/dist/chunk-IEIHABVR.cjs.map +1 -0
- package/dist/{chunk-Z7OH3MWT.cjs → chunk-LNTFRAHF.cjs} +110 -2
- 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-65DSXNQL.js → chunk-OX6GOIPH.js} +4 -4
- package/dist/{chunk-65DSXNQL.js.map → chunk-OX6GOIPH.js.map} +1 -1
- package/dist/{chunk-PJ7F4TCC.cjs → chunk-OXYSOU6Z.cjs} +18 -5
- package/dist/chunk-OXYSOU6Z.cjs.map +1 -0
- package/dist/{chunk-ZFHTJ2YX.js → chunk-OYCICW4B.js} +16 -7
- package/dist/chunk-OYCICW4B.js.map +1 -0
- package/dist/{chunk-W3GT55TY.cjs → chunk-TQG7G7YI.cjs} +13 -13
- package/dist/{chunk-W3GT55TY.cjs.map → chunk-TQG7G7YI.cjs.map} +1 -1
- package/dist/{chunk-2Z7YAJBS.js → chunk-WDTTHKDS.js} +109 -3
- 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/graphql/index.cjs +7 -7
- package/dist/graphql/index.d.cts +21 -13
- package/dist/graphql/index.d.ts +21 -13
- package/dist/graphql/index.js +2 -2
- package/dist/index.cjs +70 -70
- package/dist/index.d.cts +6 -5
- package/dist/index.d.ts +6 -5
- package/dist/index.js +7 -7
- package/dist/rest/index.cjs +5 -5
- package/dist/rest/index.js +3 -3
- package/dist/trpc/index.cjs +12 -12
- package/dist/trpc/index.js +3 -3
- package/package.json +1 -1
- package/dist/chunk-2CBCU5ML.cjs.map +0 -1
- package/dist/chunk-2GXALYKV.js.map +0 -1
- package/dist/chunk-2Z7YAJBS.js.map +0 -1
- package/dist/chunk-6DURKQ6W.js +0 -1072
- package/dist/chunk-6DURKQ6W.js.map +0 -1
- package/dist/chunk-EQTMBMDR.js.map +0 -1
- package/dist/chunk-HA4MGAZJ.js.map +0 -1
- package/dist/chunk-KGJRJ7CU.cjs.map +0 -1
- package/dist/chunk-OVZO4KB6.cjs.map +0 -1
- package/dist/chunk-PF642V5O.cjs +0 -1080
- package/dist/chunk-PF642V5O.cjs.map +0 -1
- package/dist/chunk-PJ7F4TCC.cjs.map +0 -1
- package/dist/chunk-Z7OH3MWT.cjs.map +0 -1
- package/dist/chunk-ZFHTJ2YX.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":";;;;;;;;;AAcO,IAAI,YAAA,GAAoB;AAC/B,IAAI,WAAA,GAAoC,IAAA;AAExC,eAAe,MAAA,GAAwB;AACrC,EAAA,IAAI,YAAA,EAAc;AAElB,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,GAAS,cAAc,OAAA,IAAW,aAAA;AACxC,IAAA,YAAA,GAAe,WAAW,MAAM,CAAA;AAChC,IAAA,MAAM,aAAa,IAAA,EAAK;AACxB,IAAA,MAAM,aAAa,YAAA,EAAa;AAEhC,IAAA,MAAM,KAAK,YAAA,CAAa,EAAA;AACxB,IAAA,IAAI,oBAAA,GAA4B,KAAA,CAAA;AAEhC,IAAA,IAAI,cAAc,cAAA,EAAgB;AAChC,MAAA,IAAI,EAAA,CAAG,YAAY,UAAA,EAAY;AAC7B,QAAA,oBAAA,GAAuB,IAAI,mBAAA,CAAoB,EAAE,EAAA,EAAI,EAAA,CAAG,QAAQ,CAAA;AAAA,MAClE,CAAA,MAAA,IAAW,EAAA,CAAG,OAAA,KAAY,QAAA,EAAU;AAClC,QAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,GAAA,CAAI,iBAAA,IAAqB,gBAAA;AACpD,QAAA,oBAAA,GAAuB,IAAI,iBAAA,CAAkB,EAAE,IAAA,EAAM,YAAY,CAAA;AAAA,MACnE;AAAA,IACF,CAAA,MAAA,IAAW,cAAc,YAAA,EAAc;AACrC,MAAA,MAAM,UAAA,GAAa,OAAA,CAAQ,GAAA,CAAI,iBAAA,IAAqB,gBAAA;AACpD,MAAA,oBAAA,GAAuB,IAAI,iBAAA,CAAkB,EAAE,IAAA,EAAM,YAAY,CAAA;AAAA,IACnE,CAAA,MAAA,IAAW,cAAc,cAAA,EAAgB;AACvC,MAAA,oBAAA,GAAuB,IAAI,kBAAA,CAAmB,EAAE,EAAA,EAAI,EAAA,CAAG,IAAI,CAAA;AAAA,IAC7D;AAEA,IAAA,IAAI,sBAAsB,OAAA,EAAS;AACjC,MAAA,MAAM,qBAAqB,OAAA,EAAQ;AAAA,IACrC;AAEA,IAAA,MAAM,MAAA,GAAS,MAAM,aAAA,CAAc,oBAAoB,CAAA;AACvD,IAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,yCAAA,EAA4C,MAAA,CAAO,IAAA,EAAM,KAAK,CAAA,CAAE,CAAA;AAAA,IAC9E;AAGA,IAAA,IAAI,OAAO,YAAA,CAAa,cAAA,KAAmB,UAAA,EAAY;AACrD,MAAA,YAAA,CAAa,cAAA,EAAe,CAAE,KAAA,CAAM,CAAC,GAAA,KAAa;AAChD,QAAA,OAAA,CAAQ,KAAA,CAAM,uCAAuC,GAAG,CAAA;AAAA,MAC1D,CAAC,CAAA;AAAA,IACH;AAGA,IAAC,WAAmB,iBAAA,GAAoB,YAAA;AAExC,IAAA,OAAA,CAAQ,IAAI,sDAAsD,CAAA;AAAA,EACpE,SAAS,GAAA,EAAK;AACZ,IAAA,YAAA,GAAe,IAAA;AACf,IAAA,WAAA,GAAc,IAAA;AACd,IAAA,OAAA,CAAQ,KAAA,CAAM,uCAAuC,GAAG,CAAA;AACxD,IAAA,MAAM,GAAA;AAAA,EACR;AACF;AAEA,eAAsB,gBAAA,GAAkC;AACtD,EAAA,IAAI,CAAC,WAAA,EAAa;AAChB,IAAA,WAAA,GAAc,MAAA,EAAO;AAAA,EACvB;AACA,EAAA,MAAM,WAAA;AACR;AAEO,IAAM,GAAA,GAAgB,OAAO,OAAA,KAAY;AAC9C,EAAA,IAAI,CAAC,YAAA,EAAc;AACjB,IAAA,IAAI,CAAC,WAAA,EAAa;AAChB,MAAA,WAAA,GAAc,MAAA,EAAO;AAAA,IACvB;AAEA,IAAA,IAAI;AACF,MAAA,MAAM,QAAQ,IAAA,CAAK;AAAA,QACjB,WAAA;AAAA,QACA,IAAI,OAAA;AAAA,UAAc,CAAC,CAAA,EAAG,MAAA,KACpB,UAAA,CAAW,MAAM,MAAA,CAAO,IAAI,KAAA,CAAM,wBAAwB,CAAC,CAAA,EAAG,GAAK;AAAA;AACrE,OACD,CAAA;AAAA,IACH,CAAA,CAAA,MAAQ;AACN,MAAA,OAAO,IAAI,QAAA,CAAS,IAAA,CAAK,SAAA,CAAU;AAAA,QACjC,KAAA,EAAO,qBAAA;AAAA,QACP,OAAA,EAAS;AAAA,OACV,CAAA,EAAG;AAAA,QACF,MAAA,EAAQ,GAAA;AAAA,QACR,OAAA,EAAS;AAAA,UACP,cAAA,EAAgB,kBAAA;AAAA,UAChB,aAAA,EAAe;AAAA;AACjB,OACD,CAAA;AAAA,IACH;AAAA,EACF;AAEA,EAAA,MAAM,GAAA,GAAM,IAAI,GAAA,CAAI,OAAA,CAAQ,QAAQ,GAAG,CAAA;AACvC,EAAA,MAAM,OAAO,GAAA,CAAI,QAAA;AACjB,EAAA,MAAM,CAAA,GAAI,iBAAA;AAEV,EAAA,IAAI,SAAS,CAAA,EAAG,CAAC,cAAc,OAAO,YAAA,CAAa,eAAe,UAAA,EAAY;AAC5E,IAAA,MAAM,IAAA,GAAO,aAAa,UAAA,EAAW;AACrC,IAAA,MAAM,MAAM,MAAM,IAAA,CAAK,MAAM,OAAA,CAAQ,OAAA,EAAS,QAAQ,MAAM,CAAA;AAC5D,IAAA,OAAO,IAAI,QAAA,CAAS,GAAA,CAAI,IAAA,EAAM,GAAG,CAAA;AAAA,EACnC;AAEA,EAAA,IAAI,IAAA,CAAK,WAAW,CAAA,EAAG,CAAC,QAAQ,CAAA,IAAK,OAAO,YAAA,CAAa,OAAA,KAAY,UAAA,EAAY;AAC/E,IAAA,MAAM,IAAA,GAAO,aAAa,OAAA,EAAQ;AAClC,IAAA,MAAM,MAAM,MAAM,IAAA,CAAK,MAAM,OAAA,CAAQ,OAAA,EAAS,QAAQ,MAAM,CAAA;AAC5D,IAAA,OAAO,IAAI,QAAA,CAAS,GAAA,CAAI,IAAA,EAAM,GAAG,CAAA;AAAA,EACnC;AAEA,EAAA,MAAM,GAAA,GAAM,aAAa,OAAA,EAAQ;AACjC,EAAA,OAAO,GAAA,CAAI,KAAA,CAAM,OAAA,CAAQ,OAAA,EAAS,QAAQ,MAAM,CAAA;AAClD","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,12 +1,14 @@
|
|
|
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
14
|
var graphqlYoga = require('graphql-yoga');
|
|
@@ -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,7 +1636,7 @@ var Kyro = class {
|
|
|
1627
1636
|
});
|
|
1628
1637
|
}
|
|
1629
1638
|
getGraphQL(options) {
|
|
1630
|
-
const schema =
|
|
1639
|
+
const schema = chunkN4GN6Q3V_cjs.buildGraphQLSchema({
|
|
1631
1640
|
registry: this.registry,
|
|
1632
1641
|
db: this.db,
|
|
1633
1642
|
settings: this.settings
|
|
@@ -1635,14 +1644,14 @@ var Kyro = class {
|
|
|
1635
1644
|
const yoga = graphqlYoga.createYoga({
|
|
1636
1645
|
schema,
|
|
1637
1646
|
context: async ({ request }) => {
|
|
1638
|
-
const apiKeyRaw =
|
|
1647
|
+
const apiKeyRaw = chunk4OCMVGEY_cjs.extractApiKeyFromRequest(request);
|
|
1639
1648
|
let gqlUser;
|
|
1640
1649
|
let apiKeyCtx;
|
|
1641
1650
|
if (apiKeyRaw && this.db) {
|
|
1642
|
-
const apiKeyResult = await
|
|
1651
|
+
const apiKeyResult = await chunk4OCMVGEY_cjs.validateApiKey(apiKeyRaw, this.db);
|
|
1643
1652
|
if (apiKeyResult.user) {
|
|
1644
1653
|
gqlUser = apiKeyResult.user;
|
|
1645
|
-
apiKeyCtx =
|
|
1654
|
+
apiKeyCtx = chunk4OCMVGEY_cjs.createApiKeyContext(apiKeyResult);
|
|
1646
1655
|
}
|
|
1647
1656
|
}
|
|
1648
1657
|
const tenantID = options?.tenantID;
|
|
@@ -1653,7 +1662,7 @@ var Kyro = class {
|
|
|
1653
1662
|
req: request,
|
|
1654
1663
|
tenantID,
|
|
1655
1664
|
apiKey: apiKeyCtx,
|
|
1656
|
-
relationLoader: new
|
|
1665
|
+
relationLoader: new chunkN4GN6Q3V_cjs.RelationLoader({ db: this.db, tenantID, user: gqlUser })
|
|
1657
1666
|
};
|
|
1658
1667
|
},
|
|
1659
1668
|
graphiql: false,
|
|
@@ -1684,7 +1693,7 @@ var Kyro = class {
|
|
|
1684
1693
|
{ status: 400, headers: { "Content-Type": "application/json" } }
|
|
1685
1694
|
);
|
|
1686
1695
|
}
|
|
1687
|
-
const ctx = await
|
|
1696
|
+
const ctx = await chunkTQG7G7YI_cjs.createContext({
|
|
1688
1697
|
db: this.db,
|
|
1689
1698
|
registry: this.registry,
|
|
1690
1699
|
req: request,
|
|
@@ -1692,7 +1701,7 @@ var Kyro = class {
|
|
|
1692
1701
|
tenantID: options?.tenantID,
|
|
1693
1702
|
settings: this.settings
|
|
1694
1703
|
});
|
|
1695
|
-
const kyroRouter =
|
|
1704
|
+
const kyroRouter = chunkTQG7G7YI_cjs.createKyroServer(ctx);
|
|
1696
1705
|
const collectionRouter = kyroRouter[slug];
|
|
1697
1706
|
if (!collectionRouter) {
|
|
1698
1707
|
return new Response(
|
|
@@ -1770,7 +1779,7 @@ var Kyro = class {
|
|
|
1770
1779
|
return null;
|
|
1771
1780
|
}
|
|
1772
1781
|
const defaultVerifyToken = async (token) => {
|
|
1773
|
-
const result = await
|
|
1782
|
+
const result = await chunk4OCMVGEY_cjs.validateApiKey(token, this.db);
|
|
1774
1783
|
if (!result.valid) throw new Error(result.error || "Invalid API key");
|
|
1775
1784
|
if (!result.user) throw new Error("API key has no associated user");
|
|
1776
1785
|
return result.user;
|
|
@@ -1798,7 +1807,7 @@ var Kyro = class {
|
|
|
1798
1807
|
function createKyro(config) {
|
|
1799
1808
|
return new Kyro(config);
|
|
1800
1809
|
}
|
|
1801
|
-
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)));
|
|
1802
1811
|
var modPath = "node:sqlite";
|
|
1803
1812
|
var { DatabaseSync } = _require(modPath);
|
|
1804
1813
|
function flattenFields(fields) {
|
|
@@ -2749,5 +2758,5 @@ exports.validateCollection = validateCollection;
|
|
|
2749
2758
|
exports.validateConfig = validateConfig;
|
|
2750
2759
|
exports.validateFields = validateFields;
|
|
2751
2760
|
exports.validateGlobal = validateGlobal;
|
|
2752
|
-
//# sourceMappingURL=chunk-
|
|
2753
|
-
//# sourceMappingURL=chunk-
|
|
2761
|
+
//# sourceMappingURL=chunk-E4JZ73FY.cjs.map
|
|
2762
|
+
//# sourceMappingURL=chunk-E4JZ73FY.cjs.map
|