@kyro-cms/core 0.9.5 → 0.9.6
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 +10 -10
- package/dist/api-handler-graphql.js +6 -6
- package/dist/api-handler-trpc.cjs +8 -8
- package/dist/api-handler-trpc.js +6 -6
- package/dist/api-handler.cjs +9 -9
- package/dist/api-handler.js +6 -6
- package/dist/{chunk-YFAVQQTU.js → chunk-AX2TZRQJ.js} +3 -3
- package/dist/{chunk-YFAVQQTU.js.map → chunk-AX2TZRQJ.js.map} +1 -1
- package/dist/{chunk-5H3MWQJS.js → chunk-CMXVTUYV.js} +12 -12
- package/dist/chunk-CMXVTUYV.js.map +1 -0
- package/dist/{chunk-E2763JUP.cjs → chunk-DRVOUQMT.cjs} +27 -27
- package/dist/chunk-DRVOUQMT.cjs.map +1 -0
- package/dist/{chunk-4M7X5HAB.cjs → chunk-FKKQUMXR.cjs} +109 -3
- package/dist/chunk-FKKQUMXR.cjs.map +1 -0
- package/dist/{chunk-PV2I2KMI.cjs → chunk-HVCUIII2.cjs} +21 -75
- package/dist/chunk-HVCUIII2.cjs.map +1 -0
- package/dist/{chunk-CJONKRHJ.js → chunk-NZEUU7QB.js} +108 -3
- package/dist/chunk-NZEUU7QB.js.map +1 -0
- package/dist/{chunk-NWUEVLQT.cjs → chunk-OZ3CCTTA.cjs} +5 -5
- package/dist/{chunk-NWUEVLQT.cjs.map → chunk-OZ3CCTTA.cjs.map} +1 -1
- package/dist/chunk-PONTBXR5.js +842 -0
- package/dist/chunk-PONTBXR5.js.map +1 -0
- package/dist/{chunk-CNKT4PME.cjs → chunk-QVJNSAQL.cjs} +71 -149
- package/dist/chunk-QVJNSAQL.cjs.map +1 -0
- package/dist/{chunk-OHC6UHFY.js → chunk-QX3WNQ7V.js} +18 -72
- package/dist/chunk-QX3WNQ7V.js.map +1 -0
- package/dist/chunk-RRKCIAPU.cjs +848 -0
- package/dist/chunk-RRKCIAPU.cjs.map +1 -0
- package/dist/{chunk-IPTZM3VE.js → chunk-VLK5SJRI.js} +56 -134
- package/dist/chunk-VLK5SJRI.js.map +1 -0
- package/dist/graphql/index.cjs +8 -4
- package/dist/graphql/index.d.cts +4 -1
- package/dist/graphql/index.d.ts +4 -1
- package/dist/graphql/index.js +2 -2
- package/dist/index.cjs +57 -57
- package/dist/index.js +6 -6
- package/dist/rest/index.cjs +4 -4
- package/dist/rest/index.js +2 -2
- package/dist/trpc/index.cjs +11 -11
- package/dist/trpc/index.js +2 -2
- package/package.json +2 -2
- package/dist/chunk-3HR772HI.cjs +0 -555
- package/dist/chunk-3HR772HI.cjs.map +0 -1
- package/dist/chunk-4M7X5HAB.cjs.map +0 -1
- package/dist/chunk-5H3MWQJS.js.map +0 -1
- package/dist/chunk-CJONKRHJ.js.map +0 -1
- package/dist/chunk-CNKT4PME.cjs.map +0 -1
- package/dist/chunk-E2763JUP.cjs.map +0 -1
- package/dist/chunk-IPTZM3VE.js.map +0 -1
- package/dist/chunk-L5UKKZQN.js +0 -552
- package/dist/chunk-L5UKKZQN.js.map +0 -1
- package/dist/chunk-OHC6UHFY.js.map +0 -1
- package/dist/chunk-PV2I2KMI.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/api/graphql/schema.ts"],"names":["checkCollectionAccess","checkGlobalAccess","GraphQLString","GraphQLInt","GraphQLFloat","GraphQLBoolean","GraphQLList","GraphQLObjectType","GraphQLNonNull","GraphQLUnionType","GraphQLEnumType","GraphQLInputObjectType","GraphQLSchema","printSchema"],"mappings":"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","file":"chunk-RRKCIAPU.cjs","sourcesContent":["import {\n GraphQLSchema,\n GraphQLObjectType,\n GraphQLString,\n GraphQLInt,\n GraphQLBoolean,\n GraphQLFloat,\n GraphQLList,\n GraphQLNonNull,\n GraphQLInputObjectType,\n GraphQLEnumType,\n GraphQLUnionType,\n type GraphQLFieldConfig,\n type GraphQLType,\n type GraphQLOutputType,\n printSchema,\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 type { WhereClause } from \"../../access/types.js\";\nimport { checkCollectionAccess, checkGlobalAccess } from \"../../access/checker.js\";\nimport type { AccessContext } from \"../../access/checker.js\";\nimport type { User, Request } from \"../../hooks/types.js\";\n\n// ============================================================================\n// Simple DataLoader for Relationship N+1 Prevention\n// ============================================================================\n\ninterface LoaderOptions {\n db: BaseAdapter;\n tenantID?: string;\n user?: User;\n}\n\nclass 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\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 // Mark as pending so batch knows\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 // Placeholder — will be batch-resolved\n cache.set(id, undefined);\n return undefined;\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 }\n }\n }\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 static async withBatch<T>(\n loader: RelationLoader,\n fn: () => Promise<T>,\n ): Promise<T> {\n const result = await fn();\n await loader.flushAll();\n return result;\n }\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 Check — wraps shared checker with GraphQL error throwing\n// ============================================================================\n\nasync function checkAccess(\n config: { access?: any; slug: string },\n operation: \"read\" | \"create\" | \"update\" | \"delete\",\n context: AccessContext,\n): Promise<WhereClause | undefined> {\n const result = await checkCollectionAccess(config, operation, context);\n if (!result.allowed) {\n throw gqlError(result.error || \"Access denied\", \"FORBIDDEN\");\n }\n return result.extraWhere;\n}\n\nasync function checkGqlGlobalAccess(\n config: { access?: any; slug: string },\n operation: \"read\" | \"update\",\n context: AccessContext,\n): Promise<void> {\n const result = await checkGlobalAccess(config, operation, context);\n if (!result.allowed) {\n throw gqlError(result.error || \"Access denied\", \"FORBIDDEN\");\n }\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 loader?: RelationLoader,\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 case \"upload\":\n return GraphQLString;\n case \"number\":\n return field.integer ? GraphQLInt : GraphQLFloat;\n case \"checkbox\":\n return GraphQLBoolean;\n case \"json\":\n case \"richtext\":\n return GraphQLString;\n case \"relationship\":\n if (typeof field.relationTo === \"string\") {\n if (isInputType) {\n if (field.hasMany) {\n return new GraphQLList(GraphQLString);\n }\n return GraphQLString;\n }\n if (collectionTypes?.[field.relationTo]) {\n const refType = collectionTypes[field.relationTo];\n if (field.hasMany) {\n return new GraphQLList(refType);\n }\n return refType;\n }\n const relatedCollection = registry.getCollection(field.relationTo);\n if (relatedCollection) {\n const refName = `${field.relationTo.replace(/-/g, \"_\")}_ref`;\n const refType = new GraphQLObjectType({\n name: refName,\n fields: () => ({\n id: { type: GraphQLString },\n ...buildFieldsFromCollection(relatedCollection, registry, collectionTypes),\n }),\n });\n if (collectionTypes) {\n collectionTypes[field.relationTo] = refType;\n }\n if (field.hasMany) {\n return new GraphQLList(refType);\n }\n return refType;\n }\n }\n return field.hasMany ? new GraphQLList(GraphQLString) : GraphQLString;\n case \"array\": {\n if (isInputType) return GraphQLString;\n const arrFields = (field as any).fields as Field[] | undefined;\n if (arrFields && arrFields.length > 0) {\n const arrTypeName = `${field.name?.replace(/-/g, \"_\") || \"array\"}_item`;\n const itemType = fieldsToGraphQLObjectType(arrTypeName, arrFields, registry, collectionTypes, loader);\n return new GraphQLList(itemType);\n }\n return new GraphQLList(GraphQLString);\n }\n case \"group\": {\n if (isInputType) return GraphQLString;\n const groupFields = (field as any).fields as Field[] | undefined;\n if (groupFields && groupFields.length > 0) {\n const groupTypeName = `${field.name?.replace(/-/g, \"_\") || \"group\"}_group`;\n return fieldsToGraphQLObjectType(groupTypeName, groupFields, registry, collectionTypes, loader);\n }\n return GraphQLString;\n }\n case \"blocks\": {\n if (isInputType) return GraphQLString;\n const blocks = (field as any).blocks as Array<{ slug: string; label: string; fields: Field[] }> | undefined;\n if (blocks && blocks.length > 0) {\n const blockTypes: GraphQLObjectType[] = [];\n for (const block of blocks) {\n const blockTypeName = `Block_${block.slug.replace(/-/g, \"_\")}`;\n const bType = new GraphQLObjectType({\n name: blockTypeName,\n fields: () => {\n const out: Record<string, GraphQLFieldConfig<any, any>> = {\n blockType: { type: new GraphQLNonNull(GraphQLString) },\n id: { type: GraphQLString },\n };\n if (block.fields) {\n for (const bf of block.fields) {\n if (!bf.name) continue;\n const bfConfig = buildFieldConfig(bf, registry, collectionTypes, loader);\n if (bfConfig) out[bf.name] = bfConfig;\n }\n }\n return out;\n },\n });\n blockTypes.push(bType);\n }\n if (blockTypes.length > 0) {\n const unionName = `${field.name?.replace(/-/g, \"_\") || \"blocks\"}_union`;\n return new GraphQLUnionType({\n name: unionName,\n types: blockTypes,\n resolveType(value: any) {\n const blockName = `Block_${(value?.blockType || \"\").replace(/-/g, \"_\")}`;\n const blockType = blockTypes.find(\n (bt) => bt.name === blockName,\n );\n return blockType?.name || undefined;\n },\n });\n }\n }\n return new GraphQLList(GraphQLString);\n }\n case \"row\":\n case \"collapsible\":\n case \"tabs\":\n return GraphQLString;\n default:\n return GraphQLString;\n }\n}\n\nfunction buildFieldsFromCollection(\n config: CollectionConfig,\n registry: Registry,\n collectionTypes?: Record<string, GraphQLObjectType>,\n loader?: RelationLoader,\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 fc = buildFieldConfig(field, registry, collectionTypes, loader);\n if (fc) fields[field.name] = fc;\n }\n }\n\n return fields;\n}\n\n// ============================================================================\n// Sort Enum Builder\n// ============================================================================\n\nfunction buildSortEnum(\n config: CollectionConfig,\n): GraphQLEnumType | undefined {\n const sortFields: Record<string, { value: string }> = {\n id: { value: \"id\" },\n createdAt: { value: \"createdAt\" },\n updatedAt: { value: \"updatedAt\" },\n };\n\n for (const field of config.fields) {\n if (field.name) {\n sortFields[field.name] = { value: field.name };\n sortFields[`${field.name}_asc`] = { value: `${field.name}` };\n sortFields[`${field.name}_desc`] = { value: `-${field.name}` };\n }\n }\n\n return new GraphQLEnumType({\n name: `${config.slug.replace(/-/g, \"_\")}_sort`,\n values: sortFields,\n });\n}\n\n// ============================================================================\n// Typed Filter Input Builders\n// ============================================================================\n\nfunction buildFieldFilterType(\n field: Field,\n namePrefix: string,\n): GraphQLInputObjectType | undefined {\n const safeName = `${namePrefix}_${field.name?.replace(/-/g, \"_\") || \"field\"}_filter`;\n\n const stringOps: Record<string, { type: GraphQLType }> = {\n equals: { type: GraphQLString },\n not_equals: { type: GraphQLString },\n contains: { type: GraphQLString },\n not_contains: { type: GraphQLString },\n in: { type: new GraphQLList(GraphQLString) },\n not_in: { type: new GraphQLList(GraphQLString) },\n exists: { type: GraphQLBoolean },\n };\n\n const numberOps: Record<string, { type: GraphQLType }> = {\n equals: { type: GraphQLFloat },\n not_equals: { type: GraphQLFloat },\n greater_than: { type: GraphQLFloat },\n less_than: { type: GraphQLFloat },\n greater_than_equal: { type: GraphQLFloat },\n less_than_equal: { type: GraphQLFloat },\n in: { type: new GraphQLList(GraphQLFloat) },\n not_in: { type: new GraphQLList(GraphQLFloat) },\n exists: { type: GraphQLBoolean },\n };\n\n const boolOps: Record<string, { type: GraphQLType }> = {\n equals: { type: GraphQLBoolean },\n exists: { type: GraphQLBoolean },\n };\n\n const dateOps: Record<string, { type: GraphQLType }> = {\n equals: { type: GraphQLString },\n not_equals: { type: GraphQLString },\n greater_than: { type: GraphQLString },\n less_than: { type: GraphQLString },\n exists: { type: GraphQLBoolean },\n };\n\n const relationOps: Record<string, { type: GraphQLType }> = {\n equals: { type: GraphQLString },\n not_equals: { type: GraphQLString },\n in: { type: new GraphQLList(GraphQLString) },\n not_in: { type: new GraphQLList(GraphQLString) },\n exists: { type: GraphQLBoolean },\n };\n\n const jsonOps: Record<string, { type: GraphQLType }> = {\n exists: { type: GraphQLBoolean },\n };\n\n let ops: Record<string, { type: GraphQLType }>;\n\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 \"select\":\n case \"radio\":\n case \"upload\":\n ops = stringOps;\n break;\n case \"number\":\n ops = numberOps;\n break;\n case \"checkbox\":\n ops = boolOps;\n break;\n case \"date\":\n ops = dateOps;\n break;\n case \"relationship\":\n ops = relationOps;\n break;\n case \"json\":\n case \"richtext\":\n ops = jsonOps;\n break;\n default:\n ops = { exists: { type: GraphQLBoolean } };\n }\n\n return new GraphQLInputObjectType({\n name: safeName,\n fields: ops as any,\n });\n}\n\nfunction buildCollectionFilterType(\n config: CollectionConfig,\n namePrefix: string,\n): GraphQLInputObjectType {\n const fields: Record<string, { type: GraphQLType }> = {\n AND: { type: new GraphQLList(GraphQLString) },\n OR: { type: new GraphQLList(GraphQLString) },\n };\n\n for (const field of config.fields) {\n if (!field.name) continue;\n const filterType = buildFieldFilterType(field, namePrefix);\n if (filterType) {\n fields[field.name] = { type: filterType };\n }\n }\n\n return new GraphQLInputObjectType({\n name: `${namePrefix}_filter`,\n fields: fields as any,\n });\n}\n\nfunction translateFilter(filter: Record<string, any>): Record<string, any> {\n if (!filter || typeof filter !== \"object\") return filter || {};\n \n const result: Record<string, any> = {};\n \n for (const [key, value] of Object.entries(filter)) {\n if (key === \"AND\" || key === \"OR\") continue; // compound operators not yet supported at DB level\n result[key] = value;\n }\n \n return result;\n}\n\n// ============================================================================\n// Complex Field Type Helpers\n// ============================================================================\n\nfunction fieldsToGraphQLObjectType(\n name: string,\n fields: Field[],\n registry: Registry,\n collectionTypes?: Record<string, any>,\n loader?: RelationLoader,\n): GraphQLObjectType {\n return new GraphQLObjectType({\n name,\n fields: () => {\n const out: Record<string, GraphQLFieldConfig<any, any>> = {};\n for (const field of fields) {\n if (!field.name) continue;\n if (field.type === \"row\" || field.type === \"collapsible\") {\n const subFields = (field as any).fields as Field[];\n if (subFields) {\n for (const sf of subFields) {\n if (!sf.name) continue;\n const fc = buildFieldConfig(sf, registry, collectionTypes, loader);\n if (fc) out[sf.name] = fc;\n }\n }\n } else if (field.type === \"tabs\") {\n const tabs = (field as any).tabs as Array<{ label: string; fields: Field[] }>;\n if (tabs) {\n for (const tab of tabs) {\n if (tab.fields) {\n for (const sf of tab.fields) {\n if (!sf.name) continue;\n const fc = buildFieldConfig(sf, registry, collectionTypes, loader);\n if (fc) out[sf.name] = fc;\n }\n }\n }\n }\n } else {\n const fc = buildFieldConfig(field, registry, collectionTypes, loader);\n if (fc) out[field.name] = fc;\n }\n }\n return out;\n },\n });\n}\n\nfunction buildFieldConfig(\n field: Field,\n registry: Registry,\n collectionTypes?: Record<string, any>,\n loader?: RelationLoader,\n): GraphQLFieldConfig<any, any> | null {\n if (!field.name) return null;\n if (field.type === \"relationship\" && !(field as any).hasMany) {\n const gqlType = fieldToGraphQLType(field, registry, collectionTypes, false, loader) as GraphQLOutputType;\n return {\n type: field.required ? new GraphQLNonNull(gqlType) : gqlType,\n description: field.admin?.description || field.label,\n resolve: (source: any) => {\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 loader.load(relField.relationTo, id);\n }\n return { id };\n },\n };\n }\n if (field.type === \"relationship\" && (field as any).hasMany) {\n const gqlType = fieldToGraphQLType(field, registry, collectionTypes, false, loader) as GraphQLOutputType;\n return {\n type: gqlType,\n description: field.admin?.description || field.label,\n resolve: (source: any) => {\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 loader.load(relField.relationTo, id);\n results.push({ id });\n }\n }\n return results;\n }\n return ids.map((id: string) => ({ id }));\n },\n };\n }\n return {\n type: field.required\n ? new GraphQLNonNull(fieldToGraphQLType(field, registry, collectionTypes, false, loader) as any)\n : (fieldToGraphQLType(field, registry, collectionTypes, false, loader) as any),\n description: field.admin?.description || field.label,\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 // Create DataLoader for relationship resolution\n const relationLoader = new RelationLoader({ db, tenantID, user });\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: `${collection.slug.replace(/-/g, \"_\")}_type`,\n fields: () => ({\n id: { type: GraphQLString },\n ...buildFieldsFromCollection(collection, registry, collectionTypes, relationLoader),\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: `${collection.slug.replace(/-/g, \"_\")}_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: `${global.slug.replace(/-/g, \"_\")}_global_type`,\n fields: () => ({\n id: { type: GraphQLString },\n ...buildFieldsFromCollection(\n { slug: global.slug, fields: global.fields } as CollectionConfig,\n registry,\n collectionTypes,\n relationLoader,\n ),\n }),\n });\n\n globalInputTypes[global.slug] = new GraphQLInputObjectType({\n name: `${global.slug.replace(/-/g, \"_\")}_global_input`,\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 // Filter and sort types for this collection\n const filterType = buildCollectionFilterType(collection, collection.slug.replace(/-/g, \"_\"));\n const sortEnum = buildSortEnum(collection);\n\n // FindMany query\n queryFields[`${collection.slug.replace(/-/g, \"_\")}Find`] = {\n type: new GraphQLObjectType({\n name: `${collection.slug.replace(/-/g, \"_\")}_find_result`,\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: filterType },\n sort: { type: sortEnum || GraphQLString },\n limit: { type: GraphQLInt },\n page: { type: GraphQLInt },\n draft: { type: GraphQLBoolean },\n },\n resolve: async (_: any, args: any, ctx: any) => {\n const extraWhere = await checkAccess(collection, \"read\", {\n user,\n req,\n tenantID,\n apiKey,\n });\n\n if (tenantID) {\n db.setTenantContext({ tenantId: tenantID, userId: user?.id ?? '', role: user?.role, isSuperAdmin: user?.role === 'super_admin' });\n }\n\n let where: Record<string, any> = {};\n if (args.where) {\n if (typeof args.where === \"string\") {\n try { where = JSON.parse(args.where); } catch {}\n } else {\n where = translateFilter(args.where);\n }\n }\n\n if (extraWhere) {\n where = { ...where, ...extraWhere };\n }\n\n const isDraft = args.draft ?? !!user;\n\n return RelationLoader.withBatch(relationLoader, async () => {\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,\n draft: isDraft,\n });\n });\n },\n };\n\n // FindByID query\n queryFields[`${collection.slug.replace(/-/g, \"_\")}FindByID`] = {\n type,\n args: {\n id: { type: new GraphQLNonNull(GraphQLString) },\n draft: { type: GraphQLBoolean },\n },\n resolve: async (_: any, args: any, ctx: any) => {\n const access = await checkAccess(collection, \"read\", {\n user,\n req,\n tenantID,\n apiKey,\n });\n\n if (tenantID) {\n db.setTenantContext({ tenantId: tenantID, userId: user?.id ?? '', role: user?.role, isSuperAdmin: user?.role === 'super_admin' });\n }\n\n const isDraft = args.draft ?? !!user;\n return RelationLoader.withBatch(relationLoader, async () => {\n const doc = await db.findByID({\n collection: collection.slug,\n id: args.id,\n tenantID,\n draft: isDraft,\n });\n return doc;\n });\n },\n };\n\n // Count query\n queryFields[`${collection.slug.replace(/-/g, \"_\")}Count`] = {\n type: new GraphQLObjectType({\n name: `${collection.slug.replace(/-/g, \"_\")}_count`,\n fields: {\n totalDocs: { type: GraphQLInt },\n },\n }),\n args: {\n where: { type: GraphQLString },\n },\n resolve: async (_: any, args: any, ctx: any) => {\n await checkAccess(collection, \"read\", {\n user,\n req,\n tenantID,\n apiKey,\n });\n let where = {};\n if (args.where) {\n if (typeof args.where === \"string\") {\n try { where = JSON.parse(args.where); } catch {}\n } else {\n where = translateFilter(args.where);\n }\n }\n const count = await db.count({\n collection: collection.slug,\n where,\n 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[`${global.slug.replace(/-/g, \"_\")}Get`] = {\n type,\n resolve: async () => {\n await checkGqlGlobalAccess(global, \"read\", {\n user,\n req,\n tenantID,\n });\n if (tenantID) {\n db.setTenantContext({ tenantId: tenantID, userId: user?.id ?? '', role: user?.role, isSuperAdmin: user?.role === 'super_admin' });\n }\n return db.findOne({\n collection: `_globals_${global.slug}`,\n where: {},\n 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[`${collection.slug.replace(/-/g, \"_\")}Create`] = {\n type: new GraphQLObjectType({\n name: `${collection.slug.replace(/-/g, \"_\")}_create_result`,\n fields: {\n doc: { type },\n message: { type: GraphQLString },\n },\n }),\n args: {\n data: { type: new GraphQLNonNull(inputType) },\n draft: { type: GraphQLBoolean },\n },\n resolve: async (_: any, args: any, ctx: any) => {\n await checkAccess(collection, \"create\", {\n user,\n req,\n tenantID,\n apiKey,\n });\n if (tenantID) {\n db.setTenantContext({ tenantId: tenantID, userId: user?.id ?? '', role: user?.role, isSuperAdmin: 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,\n });\n\n return { doc, message: \"Created successfully\" };\n },\n };\n\n // Update mutation\n mutationFields[`${collection.slug.replace(/-/g, \"_\")}Update`] = {\n type: new GraphQLObjectType({\n name: `${collection.slug.replace(/-/g, \"_\")}_update_result`,\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 draft: { type: GraphQLBoolean },\n },\n resolve: async (_: any, args: any, ctx: any) => {\n await checkAccess(collection, \"update\", {\n user,\n req,\n tenantID,\n apiKey,\n });\n if (tenantID) {\n db.setTenantContext({ tenantId: tenantID, userId: user?.id ?? '', role: user?.role, isSuperAdmin: 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,\n draft: true,\n });\n if (originalDoc && originalDoc.updatedAt && args.baseUpdatedAt !== originalDoc.updatedAt) {\n throw gqlError(\n `Revision conflict: document has changed since ${args.baseUpdatedAt}. Current updatedAt: ${originalDoc.updatedAt}`,\n \"CONFLICT\",\n );\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,\n });\n\n return { doc, message: \"Updated successfully\" };\n },\n };\n\n // Delete mutation\n mutationFields[`${collection.slug.replace(/-/g, \"_\")}Delete`] = {\n type: new GraphQLObjectType({\n name: `${collection.slug.replace(/-/g, \"_\")}_delete_result`,\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, ctx: any) => {\n await checkAccess(collection, \"delete\", {\n user,\n req,\n tenantID,\n apiKey,\n });\n if (tenantID) {\n db.setTenantContext({ tenantId: tenantID, userId: user?.id ?? '', role: user?.role, isSuperAdmin: user?.role === 'super_admin' });\n }\n const doc = await db.delete({\n collection: collection.slug,\n id: args.id,\n 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[`${global.slug.replace(/-/g, \"_\")}Update`] = {\n type: new GraphQLObjectType({\n name: `${global.slug.replace(/-/g, \"_\")}_update_result`,\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, ctx: any) => {\n await checkGqlGlobalAccess(global, \"update\", {\n user,\n req,\n tenantID,\n });\n if (tenantID) {\n db.setTenantContext({ tenantId: tenantID, userId: user?.id ?? '', role: user?.role, isSuperAdmin: user?.role === 'super_admin' });\n }\n\n const doc = await db.findOne({\n collection: `_globals_${global.slug}`,\n where: {},\n 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,\n });\n } else {\n result = await db.create({\n collection: `_globals_${global.slug}`,\n data: args.data,\n 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 & { sdl: string } {\n const schema = buildGraphQLSchema({\n registry,\n db,\n user: options?.user,\n req: options?.req,\n tenantID: options?.tenantID,\n apiKey: options?.apiKey,\n });\n return Object.assign(schema, { sdl: printSchema(schema) });\n}\n"]}
|
|
@@ -3,7 +3,7 @@ import { usersCollection } from './chunk-XEB7PH2E.js';
|
|
|
3
3
|
import { SQLiteAuthAdapter } from './chunk-Q72BOAPK.js';
|
|
4
4
|
import { createAuditContext } from './chunk-P2YW545G.js';
|
|
5
5
|
import { WEBHOOK_EVENTS } from './chunk-3UK5XBVJ.js';
|
|
6
|
-
import { API_KEY_COLLECTION, generateApiKey, generateApiKeyPrefix,
|
|
6
|
+
import { API_KEY_COLLECTION, generateApiKey, generateApiKeyPrefix, checkCollectionAccess, checkGlobalAccess, extractApiKeyFromRequest, validateApiKey, createApiKeyContext } from './chunk-NZEUU7QB.js';
|
|
7
7
|
import { genId, DrizzleAdapter } from './chunk-V7KZQIZ6.js';
|
|
8
8
|
import { PostgresAuthAdapter } from './chunk-CJX74IYK.js';
|
|
9
9
|
import { MongoDBAdapter } from './chunk-PQ72Z6WC.js';
|
|
@@ -3535,105 +3535,27 @@ function buildConflictResponse(expectedUpdatedAt, currentDoc) {
|
|
|
3535
3535
|
}
|
|
3536
3536
|
};
|
|
3537
3537
|
}
|
|
3538
|
-
async function
|
|
3539
|
-
const
|
|
3540
|
-
|
|
3541
|
-
|
|
3542
|
-
|
|
3543
|
-
|
|
3544
|
-
|
|
3545
|
-
|
|
3546
|
-
|
|
3547
|
-
};
|
|
3548
|
-
|
|
3549
|
-
if (accessRule) {
|
|
3550
|
-
const allowed = await evaluateAccess(accessRule, {
|
|
3551
|
-
req,
|
|
3552
|
-
user: ctxUser,
|
|
3553
|
-
tenantID: ctxTenantID
|
|
3554
|
-
});
|
|
3555
|
-
if (allowed === false) {
|
|
3556
|
-
return { allowed: false, error: "Access denied", status: 403 };
|
|
3557
|
-
}
|
|
3558
|
-
} else if (!ctxUser) {
|
|
3559
|
-
const allowed = enablePublicAccess && isDefaultAllowed;
|
|
3560
|
-
if (!allowed) {
|
|
3561
|
-
return {
|
|
3562
|
-
allowed: false,
|
|
3563
|
-
error: "Authentication required",
|
|
3564
|
-
status: 401
|
|
3565
|
-
};
|
|
3566
|
-
}
|
|
3567
|
-
}
|
|
3568
|
-
if (apiKeyContext?.permissions?.length > 0) {
|
|
3569
|
-
const resource = collection.slug;
|
|
3570
|
-
const action = operation === "read" ? "read" : operation === "create" ? "create" : "update";
|
|
3571
|
-
const permission = `${resource}:${action}`;
|
|
3572
|
-
if (!hasApiKeyPermission(apiKeyContext.permissions, permission) && !hasApiKeyPermission(apiKeyContext.permissions, `${resource}:admin`)) {
|
|
3573
|
-
return {
|
|
3574
|
-
allowed: false,
|
|
3575
|
-
error: `Missing permission: ${permission}`,
|
|
3576
|
-
status: 403
|
|
3577
|
-
};
|
|
3578
|
-
}
|
|
3579
|
-
}
|
|
3580
|
-
if (ctxUser && !(apiKeyContext?.permissions?.length > 0)) {
|
|
3581
|
-
const resource = collection.slug;
|
|
3582
|
-
const action = operation === "read" ? "read" : operation === "create" ? "create" : operation === "update" ? "update" : "delete";
|
|
3583
|
-
const permission = `${resource}:${action}`;
|
|
3584
|
-
let rbacAllowed = false;
|
|
3585
|
-
if (ctxUser.role) {
|
|
3586
|
-
const userHasPermission = hasPermission(
|
|
3587
|
-
{ id: ctxUser.id, email: ctxUser.email, role: ctxUser.role },
|
|
3588
|
-
permission
|
|
3589
|
-
);
|
|
3590
|
-
if (userHasPermission) {
|
|
3591
|
-
rbacAllowed = true;
|
|
3592
|
-
} else {
|
|
3593
|
-
const adminPermission = hasPermission(
|
|
3594
|
-
{ id: ctxUser.id, email: ctxUser.email, role: ctxUser.role },
|
|
3595
|
-
`${resource}:admin`
|
|
3596
|
-
);
|
|
3597
|
-
if (adminPermission) rbacAllowed = true;
|
|
3598
|
-
}
|
|
3599
|
-
}
|
|
3600
|
-
if (!rbacAllowed && !isDefaultAllowed && !accessRule) {
|
|
3601
|
-
return {
|
|
3602
|
-
allowed: false,
|
|
3603
|
-
error: `Missing RBAC permission: ${permission}`,
|
|
3604
|
-
status: 403
|
|
3605
|
-
};
|
|
3606
|
-
}
|
|
3607
|
-
}
|
|
3608
|
-
return { allowed: true };
|
|
3538
|
+
async function checkCollectionAccess2(collection, operation, req, ctxUser, ctxTenantID, apiKeyContext, enablePublicAccess = true, defaultCollectionAccess = "none") {
|
|
3539
|
+
const result = await checkCollectionAccess(collection, operation, {
|
|
3540
|
+
user: ctxUser,
|
|
3541
|
+
req,
|
|
3542
|
+
tenantID: ctxTenantID,
|
|
3543
|
+
apiKey: apiKeyContext
|
|
3544
|
+
}, {
|
|
3545
|
+
enablePublicAccess,
|
|
3546
|
+
defaultAccess: defaultCollectionAccess
|
|
3547
|
+
});
|
|
3548
|
+
return result;
|
|
3609
3549
|
}
|
|
3610
|
-
async function
|
|
3611
|
-
const
|
|
3612
|
-
|
|
3613
|
-
|
|
3614
|
-
|
|
3615
|
-
|
|
3616
|
-
|
|
3617
|
-
|
|
3618
|
-
|
|
3619
|
-
return { allowed: false, error: "Access denied", status: 403 };
|
|
3620
|
-
}
|
|
3621
|
-
} else if (!ctxUser) {
|
|
3622
|
-
const accessLevels = {
|
|
3623
|
-
none: false,
|
|
3624
|
-
read: operation === "read",
|
|
3625
|
-
update: operation === "read" || operation === "update"
|
|
3626
|
-
};
|
|
3627
|
-
const allowed = enablePublicAccess && accessLevels[operation === "read" ? "read" : "admin"];
|
|
3628
|
-
if (!allowed) {
|
|
3629
|
-
return {
|
|
3630
|
-
allowed: false,
|
|
3631
|
-
error: "Authentication required",
|
|
3632
|
-
status: 401
|
|
3633
|
-
};
|
|
3634
|
-
}
|
|
3635
|
-
}
|
|
3636
|
-
return { allowed: true };
|
|
3550
|
+
async function checkGlobalAccess2(global, operation, req, ctxUser, ctxTenantID, enablePublicAccess = true) {
|
|
3551
|
+
const result = await checkGlobalAccess(global, operation, {
|
|
3552
|
+
user: ctxUser,
|
|
3553
|
+
req,
|
|
3554
|
+
tenantID: ctxTenantID
|
|
3555
|
+
}, {
|
|
3556
|
+
enablePublicAccess
|
|
3557
|
+
});
|
|
3558
|
+
return result;
|
|
3637
3559
|
}
|
|
3638
3560
|
async function resolveAuthContext(req, authMw, staticUser, staticTenantID) {
|
|
3639
3561
|
if (staticUser) {
|
|
@@ -3805,7 +3727,7 @@ function createHonoApp(options) {
|
|
|
3805
3727
|
const globals = {};
|
|
3806
3728
|
for (const col of registry.getCollections()) {
|
|
3807
3729
|
const permissions = {
|
|
3808
|
-
read: (await
|
|
3730
|
+
read: (await checkCollectionAccess2(
|
|
3809
3731
|
col,
|
|
3810
3732
|
"read",
|
|
3811
3733
|
c.req.raw,
|
|
@@ -3815,7 +3737,7 @@ function createHonoApp(options) {
|
|
|
3815
3737
|
enablePublicAccess,
|
|
3816
3738
|
defaultCollectionAccess
|
|
3817
3739
|
)).allowed,
|
|
3818
|
-
create: (await
|
|
3740
|
+
create: (await checkCollectionAccess2(
|
|
3819
3741
|
col,
|
|
3820
3742
|
"create",
|
|
3821
3743
|
c.req.raw,
|
|
@@ -3825,7 +3747,7 @@ function createHonoApp(options) {
|
|
|
3825
3747
|
enablePublicAccess,
|
|
3826
3748
|
defaultCollectionAccess
|
|
3827
3749
|
)).allowed,
|
|
3828
|
-
update: (await
|
|
3750
|
+
update: (await checkCollectionAccess2(
|
|
3829
3751
|
col,
|
|
3830
3752
|
"update",
|
|
3831
3753
|
c.req.raw,
|
|
@@ -3835,7 +3757,7 @@ function createHonoApp(options) {
|
|
|
3835
3757
|
enablePublicAccess,
|
|
3836
3758
|
defaultCollectionAccess
|
|
3837
3759
|
)).allowed,
|
|
3838
|
-
delete: (await
|
|
3760
|
+
delete: (await checkCollectionAccess2(
|
|
3839
3761
|
col,
|
|
3840
3762
|
"delete",
|
|
3841
3763
|
c.req.raw,
|
|
@@ -3850,7 +3772,7 @@ function createHonoApp(options) {
|
|
|
3850
3772
|
}
|
|
3851
3773
|
for (const globalConfig of registry.getGlobals()) {
|
|
3852
3774
|
const permissions = {
|
|
3853
|
-
read: (await
|
|
3775
|
+
read: (await checkGlobalAccess2(
|
|
3854
3776
|
globalConfig,
|
|
3855
3777
|
"read",
|
|
3856
3778
|
c.req.raw,
|
|
@@ -3858,7 +3780,7 @@ function createHonoApp(options) {
|
|
|
3858
3780
|
ctxTenantID,
|
|
3859
3781
|
enablePublicAccess
|
|
3860
3782
|
)).allowed,
|
|
3861
|
-
update: (await
|
|
3783
|
+
update: (await checkGlobalAccess2(
|
|
3862
3784
|
globalConfig,
|
|
3863
3785
|
"update",
|
|
3864
3786
|
c.req.raw,
|
|
@@ -3889,7 +3811,7 @@ function createHonoApp(options) {
|
|
|
3889
3811
|
user,
|
|
3890
3812
|
tenantID
|
|
3891
3813
|
);
|
|
3892
|
-
const access = await
|
|
3814
|
+
const access = await checkCollectionAccess2(
|
|
3893
3815
|
usersCollection2,
|
|
3894
3816
|
"read",
|
|
3895
3817
|
c.req.raw,
|
|
@@ -3953,7 +3875,7 @@ function createHonoApp(options) {
|
|
|
3953
3875
|
user,
|
|
3954
3876
|
tenantID
|
|
3955
3877
|
);
|
|
3956
|
-
const access = await
|
|
3878
|
+
const access = await checkCollectionAccess2(
|
|
3957
3879
|
usersCollection2,
|
|
3958
3880
|
"create",
|
|
3959
3881
|
c.req.raw,
|
|
@@ -4007,7 +3929,7 @@ function createHonoApp(options) {
|
|
|
4007
3929
|
user,
|
|
4008
3930
|
tenantID
|
|
4009
3931
|
);
|
|
4010
|
-
const access = await
|
|
3932
|
+
const access = await checkCollectionAccess2(
|
|
4011
3933
|
usersCollection2,
|
|
4012
3934
|
"update",
|
|
4013
3935
|
c.req.raw,
|
|
@@ -4076,7 +3998,7 @@ function createHonoApp(options) {
|
|
|
4076
3998
|
user,
|
|
4077
3999
|
tenantID
|
|
4078
4000
|
);
|
|
4079
|
-
const access = await
|
|
4001
|
+
const access = await checkCollectionAccess2(
|
|
4080
4002
|
usersCollection2,
|
|
4081
4003
|
"delete",
|
|
4082
4004
|
c.req.raw,
|
|
@@ -4125,7 +4047,7 @@ function createHonoApp(options) {
|
|
|
4125
4047
|
);
|
|
4126
4048
|
const auditLogsCollection = registry.getCollection("audit_logs");
|
|
4127
4049
|
if (auditLogsCollection) {
|
|
4128
|
-
const access = await
|
|
4050
|
+
const access = await checkCollectionAccess2(
|
|
4129
4051
|
auditLogsCollection,
|
|
4130
4052
|
"read",
|
|
4131
4053
|
c.req.raw,
|
|
@@ -4800,7 +4722,7 @@ function createHonoApp(options) {
|
|
|
4800
4722
|
);
|
|
4801
4723
|
for (const collection of registry.getCollections()) {
|
|
4802
4724
|
if (!targetCollections.includes(collection.slug)) continue;
|
|
4803
|
-
const access = await
|
|
4725
|
+
const access = await checkCollectionAccess2(
|
|
4804
4726
|
collection,
|
|
4805
4727
|
"read",
|
|
4806
4728
|
c.req.raw,
|
|
@@ -5159,7 +5081,7 @@ function createHonoApp(options) {
|
|
|
5159
5081
|
tenantID: ctxTenantID,
|
|
5160
5082
|
apiKeyContext
|
|
5161
5083
|
} = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
5162
|
-
const access = await
|
|
5084
|
+
const access = await checkCollectionAccess2(
|
|
5163
5085
|
collection,
|
|
5164
5086
|
"read",
|
|
5165
5087
|
c.req.raw,
|
|
@@ -5207,7 +5129,7 @@ function createHonoApp(options) {
|
|
|
5207
5129
|
tenantID: ctxTenantID,
|
|
5208
5130
|
apiKeyContext
|
|
5209
5131
|
} = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
5210
|
-
const access = await
|
|
5132
|
+
const access = await checkCollectionAccess2(
|
|
5211
5133
|
collection,
|
|
5212
5134
|
"read",
|
|
5213
5135
|
c.req.raw,
|
|
@@ -5261,7 +5183,7 @@ function createHonoApp(options) {
|
|
|
5261
5183
|
tenantID: ctxTenantID,
|
|
5262
5184
|
apiKeyContext
|
|
5263
5185
|
} = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
5264
|
-
const access = await
|
|
5186
|
+
const access = await checkCollectionAccess2(
|
|
5265
5187
|
collection,
|
|
5266
5188
|
"update",
|
|
5267
5189
|
c.req.raw,
|
|
@@ -5321,7 +5243,7 @@ function createHonoApp(options) {
|
|
|
5321
5243
|
tenantID: ctxTenantID,
|
|
5322
5244
|
apiKeyContext
|
|
5323
5245
|
} = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
5324
|
-
const access = await
|
|
5246
|
+
const access = await checkCollectionAccess2(
|
|
5325
5247
|
collection,
|
|
5326
5248
|
"update",
|
|
5327
5249
|
c.req.raw,
|
|
@@ -5356,7 +5278,7 @@ function createHonoApp(options) {
|
|
|
5356
5278
|
tenantID: ctxTenantID,
|
|
5357
5279
|
apiKeyContext
|
|
5358
5280
|
} = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
5359
|
-
const access = await
|
|
5281
|
+
const access = await checkCollectionAccess2(
|
|
5360
5282
|
collection,
|
|
5361
5283
|
"read",
|
|
5362
5284
|
c.req.raw,
|
|
@@ -5406,7 +5328,7 @@ function createHonoApp(options) {
|
|
|
5406
5328
|
tenantID: ctxTenantID,
|
|
5407
5329
|
apiKeyContext
|
|
5408
5330
|
} = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
5409
|
-
const access = await
|
|
5331
|
+
const access = await checkCollectionAccess2(
|
|
5410
5332
|
collection,
|
|
5411
5333
|
"create",
|
|
5412
5334
|
c.req.raw,
|
|
@@ -5530,7 +5452,7 @@ function createHonoApp(options) {
|
|
|
5530
5452
|
tenantID: ctxTenantID,
|
|
5531
5453
|
apiKeyContext
|
|
5532
5454
|
} = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
5533
|
-
const access = await
|
|
5455
|
+
const access = await checkCollectionAccess2(
|
|
5534
5456
|
collection,
|
|
5535
5457
|
"update",
|
|
5536
5458
|
c.req.raw,
|
|
@@ -5695,7 +5617,7 @@ function createHonoApp(options) {
|
|
|
5695
5617
|
tenantID: ctxTenantID,
|
|
5696
5618
|
apiKeyContext
|
|
5697
5619
|
} = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
5698
|
-
const access = await
|
|
5620
|
+
const access = await checkCollectionAccess2(
|
|
5699
5621
|
collection,
|
|
5700
5622
|
"delete",
|
|
5701
5623
|
c.req.raw,
|
|
@@ -5785,7 +5707,7 @@ function createHonoApp(options) {
|
|
|
5785
5707
|
tenantID: ctxTenantID,
|
|
5786
5708
|
apiKeyContext
|
|
5787
5709
|
} = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
5788
|
-
const access = await
|
|
5710
|
+
const access = await checkCollectionAccess2(
|
|
5789
5711
|
collection,
|
|
5790
5712
|
"create",
|
|
5791
5713
|
c.req.raw,
|
|
@@ -5833,7 +5755,7 @@ function createHonoApp(options) {
|
|
|
5833
5755
|
tenantID: ctxTenantID,
|
|
5834
5756
|
apiKeyContext
|
|
5835
5757
|
} = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
5836
|
-
const access = await
|
|
5758
|
+
const access = await checkCollectionAccess2(
|
|
5837
5759
|
collection,
|
|
5838
5760
|
"update",
|
|
5839
5761
|
c.req.raw,
|
|
@@ -5877,7 +5799,7 @@ function createHonoApp(options) {
|
|
|
5877
5799
|
tenantID: ctxTenantID,
|
|
5878
5800
|
apiKeyContext
|
|
5879
5801
|
} = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
5880
|
-
const access = await
|
|
5802
|
+
const access = await checkCollectionAccess2(
|
|
5881
5803
|
collection,
|
|
5882
5804
|
"update",
|
|
5883
5805
|
c.req.raw,
|
|
@@ -5924,7 +5846,7 @@ function createHonoApp(options) {
|
|
|
5924
5846
|
tenantID: ctxTenantID,
|
|
5925
5847
|
apiKeyContext
|
|
5926
5848
|
} = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
5927
|
-
const access = await
|
|
5849
|
+
const access = await checkCollectionAccess2(
|
|
5928
5850
|
collection,
|
|
5929
5851
|
"update",
|
|
5930
5852
|
c.req.raw,
|
|
@@ -6009,7 +5931,7 @@ function createHonoApp(options) {
|
|
|
6009
5931
|
tenantID: ctxTenantID,
|
|
6010
5932
|
apiKeyContext
|
|
6011
5933
|
} = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
6012
|
-
const access = await
|
|
5934
|
+
const access = await checkCollectionAccess2(
|
|
6013
5935
|
collection,
|
|
6014
5936
|
"update",
|
|
6015
5937
|
c.req.raw,
|
|
@@ -6059,7 +5981,7 @@ function createHonoApp(options) {
|
|
|
6059
5981
|
app.get(basePath, async (c) => {
|
|
6060
5982
|
try {
|
|
6061
5983
|
const { user: ctxUser, tenantID: ctxTenantID } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
6062
|
-
const access = await
|
|
5984
|
+
const access = await checkGlobalAccess2(
|
|
6063
5985
|
globalConfig,
|
|
6064
5986
|
"read",
|
|
6065
5987
|
c.req.raw,
|
|
@@ -6103,7 +6025,7 @@ function createHonoApp(options) {
|
|
|
6103
6025
|
const upsertGlobal = async (c) => {
|
|
6104
6026
|
try {
|
|
6105
6027
|
const { user: ctxUser, tenantID: ctxTenantID } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
6106
|
-
const access = await
|
|
6028
|
+
const access = await checkGlobalAccess2(
|
|
6107
6029
|
globalConfig,
|
|
6108
6030
|
"update",
|
|
6109
6031
|
c.req.raw,
|
|
@@ -6238,7 +6160,7 @@ function createHonoApp(options) {
|
|
|
6238
6160
|
app.post(`${basePath}/publish`, async (c) => {
|
|
6239
6161
|
try {
|
|
6240
6162
|
const { user: ctxUser, tenantID: ctxTenantID } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
6241
|
-
const access = await
|
|
6163
|
+
const access = await checkGlobalAccess2(globalConfig, "update", c.req.raw, ctxUser, ctxTenantID, enablePublicAccess);
|
|
6242
6164
|
if (!access.allowed) return c.json({ error: access.error }, 403);
|
|
6243
6165
|
const collectionSlug = `_globals_${slug}`;
|
|
6244
6166
|
const originalDoc = await db.findOne({
|
|
@@ -6288,7 +6210,7 @@ function createHonoApp(options) {
|
|
|
6288
6210
|
app.post(`${basePath}/unpublish`, async (c) => {
|
|
6289
6211
|
try {
|
|
6290
6212
|
const { user: ctxUser, tenantID: ctxTenantID } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
6291
|
-
const access = await
|
|
6213
|
+
const access = await checkGlobalAccess2(globalConfig, "update", c.req.raw, ctxUser, ctxTenantID, enablePublicAccess);
|
|
6292
6214
|
if (!access.allowed) return c.json({ error: access.error }, 403);
|
|
6293
6215
|
const doc = await db.update({
|
|
6294
6216
|
collection: `_globals_${slug}`,
|
|
@@ -6304,7 +6226,7 @@ function createHonoApp(options) {
|
|
|
6304
6226
|
app.get(`${basePath}/versions`, async (c) => {
|
|
6305
6227
|
try {
|
|
6306
6228
|
const { user: ctxUser, tenantID: ctxTenantID } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
6307
|
-
const access = await
|
|
6229
|
+
const access = await checkGlobalAccess2(globalConfig, "read", c.req.raw, ctxUser, ctxTenantID, enablePublicAccess);
|
|
6308
6230
|
if (!access.allowed) return c.json({ error: access.error }, 403);
|
|
6309
6231
|
const limit = parseInt(c.req.query("limit") || "10");
|
|
6310
6232
|
const page = parseInt(c.req.query("page") || "1");
|
|
@@ -6324,7 +6246,7 @@ function createHonoApp(options) {
|
|
|
6324
6246
|
try {
|
|
6325
6247
|
const versionId = c.req.param("versionId");
|
|
6326
6248
|
const { user: ctxUser, tenantID: ctxTenantID } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
6327
|
-
const access = await
|
|
6249
|
+
const access = await checkGlobalAccess2(globalConfig, "read", c.req.raw, ctxUser, ctxTenantID, enablePublicAccess);
|
|
6328
6250
|
if (!access.allowed) return c.json({ error: access.error }, 403);
|
|
6329
6251
|
const version = await db.findVersionByID({
|
|
6330
6252
|
collection: `_globals_${slug}`,
|
|
@@ -6341,7 +6263,7 @@ function createHonoApp(options) {
|
|
|
6341
6263
|
try {
|
|
6342
6264
|
const versionId = c.req.param("versionId");
|
|
6343
6265
|
const { user: ctxUser, tenantID: ctxTenantID } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
6344
|
-
const access = await
|
|
6266
|
+
const access = await checkGlobalAccess2(globalConfig, "update", c.req.raw, ctxUser, ctxTenantID, enablePublicAccess);
|
|
6345
6267
|
if (!access.allowed) return c.json({ error: access.error }, 403);
|
|
6346
6268
|
const collectionSlug = `_globals_${slug}`;
|
|
6347
6269
|
const version = await db.findVersionByID({
|
|
@@ -6369,7 +6291,7 @@ function createHonoApp(options) {
|
|
|
6369
6291
|
app.post(`${basePath}/test`, async (c) => {
|
|
6370
6292
|
try {
|
|
6371
6293
|
const { user: ctxUser, tenantID: ctxTenantID } = await resolveAuthContext(c.req.raw, authMw, user, tenantID);
|
|
6372
|
-
const access = await
|
|
6294
|
+
const access = await checkGlobalAccess2(
|
|
6373
6295
|
globalConfig,
|
|
6374
6296
|
"update",
|
|
6375
6297
|
c.req.raw,
|
|
@@ -6462,5 +6384,5 @@ function createRESTAPI(registry, db, options) {
|
|
|
6462
6384
|
}
|
|
6463
6385
|
|
|
6464
6386
|
export { AuditLogger, AuthRoutes, InMemoryAuditLogger, InMemoryRateLimiter, MediaService, createAuditContext2 as createAuditContext, createCloudinaryStorage, createFtpStorage, createHonoApp, createLocalStorage, createRESTAPI, createS3Storage, getAppSecret, getDefaultRegistry, getEncryptionKey, getSessionConfig, init_secret, loadSecrets, resolveProvider, setDbAdapter };
|
|
6465
|
-
//# sourceMappingURL=chunk-
|
|
6466
|
-
//# sourceMappingURL=chunk-
|
|
6387
|
+
//# sourceMappingURL=chunk-VLK5SJRI.js.map
|
|
6388
|
+
//# sourceMappingURL=chunk-VLK5SJRI.js.map
|