@kyro-cms/core 0.9.6 → 0.9.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{WebhookService-BKszZlG0.d.cts → WebhookService-Dj8pJ3sp.d.cts} +1 -1
- package/dist/{WebhookService-Ccf1j-IN.d.ts → WebhookService-DpRB940h.d.ts} +1 -1
- package/dist/api-handler-graphql.cjs +11 -11
- package/dist/api-handler-graphql.js +7 -7
- package/dist/api-handler-trpc.cjs +9 -9
- package/dist/api-handler-trpc.js +7 -7
- package/dist/api-handler.cjs +10 -10
- package/dist/api-handler.js +7 -7
- package/dist/{base-CIuXkrH4.d.cts → base-BjyoF6da.d.cts} +2 -2
- package/dist/{base-fFo4lqER.d.ts → base-C2YR8lWt.d.ts} +2 -2
- package/dist/{chunk-QVJNSAQL.cjs → chunk-2CBCU5ML.cjs} +47 -41
- package/dist/chunk-2CBCU5ML.cjs.map +1 -0
- package/dist/{chunk-NZEUU7QB.js → chunk-2GXALYKV.js} +2 -2
- package/dist/chunk-2GXALYKV.js.map +1 -0
- package/dist/{chunk-3UK5XBVJ.js → chunk-2Z7YAJBS.js} +10 -9
- package/dist/chunk-2Z7YAJBS.js.map +1 -0
- package/dist/{chunk-QX3WNQ7V.js → chunk-65DSXNQL.js} +4 -4
- package/dist/{chunk-QX3WNQ7V.js.map → chunk-65DSXNQL.js.map} +1 -1
- package/dist/{chunk-PONTBXR5.js → chunk-6DURKQ6W.js} +370 -140
- package/dist/chunk-6DURKQ6W.js.map +1 -0
- package/dist/{chunk-AX2TZRQJ.js → chunk-EQTMBMDR.js} +3 -3
- package/dist/{chunk-AX2TZRQJ.js.map → chunk-EQTMBMDR.js.map} +1 -1
- package/dist/{chunk-E5UJBLQ7.js → chunk-FIAMXNTH.js} +2 -2
- package/dist/chunk-FIAMXNTH.js.map +1 -0
- package/dist/{chunk-VLK5SJRI.js → chunk-HA4MGAZJ.js} +28 -22
- package/dist/chunk-HA4MGAZJ.js.map +1 -0
- package/dist/{chunk-FKKQUMXR.cjs → chunk-KGJRJ7CU.cjs} +2 -2
- package/dist/chunk-KGJRJ7CU.cjs.map +1 -0
- package/dist/{chunk-FSKONGCX.cjs → chunk-OJ2AM75W.cjs} +2 -2
- package/dist/chunk-OJ2AM75W.cjs.map +1 -0
- package/dist/{chunk-DRVOUQMT.cjs → chunk-OVZO4KB6.cjs} +45 -79
- package/dist/chunk-OVZO4KB6.cjs.map +1 -0
- package/dist/{chunk-RRKCIAPU.cjs → chunk-PF642V5O.cjs} +372 -140
- package/dist/chunk-PF642V5O.cjs.map +1 -0
- package/dist/{chunk-OZ3CCTTA.cjs → chunk-PJ7F4TCC.cjs} +5 -5
- package/dist/{chunk-OZ3CCTTA.cjs.map → chunk-PJ7F4TCC.cjs.map} +1 -1
- package/dist/{chunk-HVCUIII2.cjs → chunk-W3GT55TY.cjs} +13 -13
- package/dist/{chunk-HVCUIII2.cjs.map → chunk-W3GT55TY.cjs.map} +1 -1
- package/dist/{chunk-QFLB4EIJ.cjs → chunk-Z7OH3MWT.cjs} +10 -9
- package/dist/chunk-Z7OH3MWT.cjs.map +1 -0
- package/dist/{chunk-CMXVTUYV.js → chunk-ZFHTJ2YX.js} +29 -63
- package/dist/chunk-ZFHTJ2YX.js.map +1 -0
- package/dist/client.cjs +3 -3
- package/dist/client.d.cts +2 -2
- package/dist/client.d.ts +2 -2
- package/dist/client.js +1 -1
- package/dist/drizzle/index.d.cts +3 -3
- package/dist/drizzle/index.d.ts +3 -3
- package/dist/fields/index.cjs +21 -21
- package/dist/fields/index.d.cts +1 -1
- package/dist/fields/index.d.ts +1 -1
- package/dist/fields/index.js +1 -1
- package/dist/graphql/index.cjs +13 -5
- package/dist/graphql/index.d.cts +34 -12
- package/dist/graphql/index.d.ts +34 -12
- package/dist/graphql/index.js +2 -2
- package/dist/{index-BKta3cBH.d.cts → index-DHbywDs-.d.cts} +2 -2
- package/dist/{index-ClOqnkTO.d.ts → index-jLs0zlft.d.ts} +2 -2
- package/dist/index.cjs +90 -90
- package/dist/index.d.cts +9 -9
- package/dist/index.d.ts +9 -9
- package/dist/index.js +8 -8
- package/dist/mongodb/index.d.cts +3 -3
- package/dist/mongodb/index.d.ts +3 -3
- package/dist/rest/index.cjs +5 -5
- package/dist/rest/index.d.cts +4 -4
- package/dist/rest/index.d.ts +4 -4
- package/dist/rest/index.js +3 -3
- package/dist/templates/index.d.cts +2 -2
- package/dist/templates/index.d.ts +2 -2
- package/dist/trpc/index.cjs +12 -12
- package/dist/trpc/index.d.cts +3 -3
- package/dist/trpc/index.d.ts +3 -3
- package/dist/trpc/index.js +3 -3
- package/dist/{types-Dgzlftb7.d.ts → types-BzH3_rtP.d.ts} +7 -7
- package/dist/{types-Ds0tCA3L.d.cts → types-CY_iNunL.d.cts} +7 -7
- package/dist/{types-DeSApf9T.d.ts → types-C_rVxU2T.d.cts} +4 -4
- package/dist/{types-DeSApf9T.d.cts → types-C_rVxU2T.d.ts} +4 -4
- package/package.json +2 -1
- package/dist/chunk-3UK5XBVJ.js.map +0 -1
- package/dist/chunk-CMXVTUYV.js.map +0 -1
- package/dist/chunk-DRVOUQMT.cjs.map +0 -1
- package/dist/chunk-E5UJBLQ7.js.map +0 -1
- package/dist/chunk-FKKQUMXR.cjs.map +0 -1
- package/dist/chunk-FSKONGCX.cjs.map +0 -1
- package/dist/chunk-NZEUU7QB.js.map +0 -1
- package/dist/chunk-PONTBXR5.js.map +0 -1
- package/dist/chunk-QFLB4EIJ.cjs.map +0 -1
- package/dist/chunk-QVJNSAQL.cjs.map +0 -1
- package/dist/chunk-RRKCIAPU.cjs.map +0 -1
- package/dist/chunk-VLK5SJRI.js.map +0 -1
|
@@ -275,5 +275,5 @@ exports.generateApiKeyPrefix = generateApiKeyPrefix;
|
|
|
275
275
|
exports.getWhereClause = getWhereClause;
|
|
276
276
|
exports.mergeWhereClauses = mergeWhereClauses;
|
|
277
277
|
exports.validateApiKey = validateApiKey;
|
|
278
|
-
//# sourceMappingURL=chunk-
|
|
279
|
-
//# sourceMappingURL=chunk-
|
|
278
|
+
//# sourceMappingURL=chunk-KGJRJ7CU.cjs.map
|
|
279
|
+
//# sourceMappingURL=chunk-KGJRJ7CU.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/access/types.ts","../src/auth/api-key.ts","../src/access/checker.ts"],"names":["timingSafeEqual","hasPermission"],"mappings":"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","file":"chunk-KGJRJ7CU.cjs","sourcesContent":["import type { User, Request } from '../hooks/types.js';\n\n// ============================================================================\n// Access Control Types\n// ============================================================================\n\nexport interface WhereClause {\n [field: string]: any;\n}\n\nexport interface AccessArgs {\n req: Request;\n user?: User;\n data?: unknown;\n doc?: unknown;\n id?: string;\n tenantID?: string;\n context?: Record<string, unknown>;\n}\n\nexport type AccessControl = boolean | ((args: AccessArgs) => Promise<boolean | WhereClause> | boolean | WhereClause);\n\nexport interface CollectionAccess {\n create?: AccessControl;\n read?: AccessControl;\n update?: AccessControl;\n delete?: AccessControl;\n admin?: AccessControl;\n unlock?: AccessControl;\n readVersions?: AccessControl;\n}\n\nexport interface GlobalAccess {\n read?: AccessControl;\n update?: AccessControl;\n}\n\nexport interface FieldAccess {\n create?: AccessControl;\n read?: AccessControl;\n update?: AccessControl;\n}\n\n// ============================================================================\n// Access Control Evaluation\n// ============================================================================\n\nexport async function evaluateAccess(\n access: AccessControl,\n args: AccessArgs\n): Promise<boolean | WhereClause> {\n if (typeof access === 'boolean') {\n return access;\n }\n if (typeof access === 'function') {\n return await access(args);\n }\n return true;\n}\n\nexport function mergeWhereClauses(\n ...whereClauses: (WhereClause | boolean | undefined)[]\n): WhereClause {\n const result: WhereClause = {};\n for (const clause of whereClauses) {\n if (clause && typeof clause === 'object') {\n Object.assign(result, clause);\n }\n }\n return result;\n}\n\nexport function getWhereClause(\n access: AccessControl,\n args: AccessArgs\n): Promise<WhereClause | undefined> {\n return evaluateAccess(access, args).then(result => {\n if (result === true) return undefined;\n if (result === false) return { _id: { $eq: null } };\n return result;\n });\n}\n","import { timingSafeEqual } from \"crypto\";\nimport type { BaseAdapter } from \"../registry/types.js\";\nimport type { AuthUser, UserRole } from \"./types.js\";\n\nexport interface ApiKeyRecord {\n id: string;\n userId: string;\n name: string;\n key: string;\n keyPrefix: string;\n permissions: string[];\n lastUsedAt?: string;\n expiresAt?: string;\n createdAt: string;\n}\n\nexport interface ApiKeyValidationResult {\n valid: boolean;\n userId?: string;\n user?: Partial<AuthUser>;\n permissions?: string[];\n apiKeyId?: string;\n error?: string;\n tenantId?: string;\n role?: UserRole;\n}\n\nexport interface ApiKeyContext {\n userId: string;\n user: Partial<AuthUser>;\n permissions: string[];\n apiKeyId: string;\n tenantId?: string;\n role?: UserRole;\n}\n\nexport const API_KEY_COLLECTION = \"_api_keys\";\n\nfunction generateKeyPrefix(key: string): string {\n return key.substring(0, 8);\n}\n\nfunction constantTimeCompare(a: string, b: string): boolean {\n if (a.length !== b.length) {\n return false;\n }\n try {\n return timingSafeEqual(Buffer.from(a), Buffer.from(b));\n } catch {\n return false;\n }\n}\n\nexport async function validateApiKey(\n rawKey: string,\n db: BaseAdapter,\n userLookup?: (userId: string) => Promise<Partial<AuthUser> | null>,\n): Promise<ApiKeyValidationResult> {\n if (!rawKey || typeof rawKey !== \"string\") {\n return { valid: false, error: \"No API key provided\" };\n }\n\n if (!rawKey.startsWith(\"kyro_\")) {\n return { valid: false, error: \"Invalid API key format\" };\n }\n\n const keyPrefix = generateKeyPrefix(rawKey);\n\n try {\n const result = await db.find({\n collection: API_KEY_COLLECTION,\n where: { keyPrefix: { equals: keyPrefix } },\n limit: 100,\n page: 1,\n });\n\n if (!result.docs || result.docs.length === 0) {\n return { valid: false, error: \"Invalid API key\" };\n }\n\n let matchedKey: ApiKeyRecord | null = null;\n for (const doc of result.docs) {\n const record = doc as unknown as ApiKeyRecord;\n if (constantTimeCompare(record.key, rawKey)) {\n matchedKey = record;\n break;\n }\n }\n\n if (!matchedKey) {\n return { valid: false, error: \"Invalid API key\" };\n }\n\n if (matchedKey.expiresAt) {\n const expiresAt = new Date(matchedKey.expiresAt);\n if (expiresAt < new Date()) {\n return { valid: false, error: \"API key has expired\" };\n }\n }\n\n try {\n await db.update({\n collection: API_KEY_COLLECTION,\n id: matchedKey.id,\n data: { lastUsedAt: new Date().toISOString() },\n });\n } catch {\n // Non-critical: don't fail if lastUsedAt update fails\n }\n\n const user: Partial<AuthUser> = {\n id: matchedKey.userId,\n role: (matchedKey as any).role || \"author\",\n tenantId: (matchedKey as any).tenantId,\n };\n\n if (userLookup) {\n const dbUser = await userLookup(matchedKey.userId);\n if (dbUser) {\n Object.assign(user, dbUser);\n }\n }\n\n return {\n valid: true,\n userId: matchedKey.userId,\n user,\n permissions: matchedKey.permissions || [],\n apiKeyId: matchedKey.id,\n tenantId: user.tenantId,\n role: user.role,\n };\n } catch (error) {\n console.error(\"[ApiKey] Validation error:\", error);\n return { valid: false, error: \"Failed to validate API key\" };\n }\n}\n\nexport function extractApiKeyFromRequest(request: Request): string | null {\n const authHeader = request.headers.get(\"Authorization\");\n if (authHeader) {\n if (authHeader.startsWith(\"ApiKey \")) {\n return authHeader.slice(7).trim();\n }\n if (authHeader.startsWith(\"Bearer \")) {\n return null;\n }\n }\n\n const xApiKey = request.headers.get(\"X-API-Key\");\n if (xApiKey) {\n return xApiKey.trim();\n }\n\n return null;\n}\n\nexport function createApiKeyContext(\n result: ApiKeyValidationResult,\n): ApiKeyContext | null {\n if (!result.valid || !result.userId) {\n return null;\n }\n return {\n userId: result.userId,\n user: result.user || {},\n permissions: result.permissions || [],\n apiKeyId: result.apiKeyId || \"\",\n tenantId: result.tenantId,\n role: result.role,\n };\n}\n\nexport function hasApiKeyPermission(\n permissions: string[],\n required: string,\n): boolean {\n if (permissions.length === 0) return false;\n if (permissions.includes(\"*\")) return true;\n if (permissions.includes(required)) return true;\n\n const [resource, action] = required.split(\":\");\n if (permissions.includes(`${resource}:*`)) return true;\n\n return false;\n}\n\nexport function generateApiKey(): string {\n const chars = \"abcdefghijklmnopqrstuvwxyz0123456789\";\n let suffix = \"\";\n for (let i = 0; i < 32; i++) {\n suffix += chars[Math.floor(Math.random() * chars.length)];\n }\n return `kyro_${suffix}`;\n}\n\nexport function generateApiKeyPrefix(key: string): string {\n return key.substring(0, 8);\n}\n","import type { User, Request } from '../hooks/types.js';\nimport { evaluateAccess, type WhereClause } from './types.js';\nimport { hasPermission } from '../auth/rbac/checker.js';\nimport { hasApiKeyPermission } from '../auth/api-key.js';\n\nexport interface AccessCheckResult {\n allowed: boolean;\n extraWhere?: WhereClause;\n error?: string;\n status?: number;\n}\n\nexport interface AccessContext {\n user?: User;\n req?: Request;\n tenantID?: string;\n apiKey?: any;\n}\n\nexport interface AccessOptions {\n enablePublicAccess?: boolean;\n defaultAccess?: string;\n}\n\nfunction actionToPermission(\n operation: \"read\" | \"create\" | \"update\" | \"delete\",\n): string {\n if (operation === \"read\") return \"read\";\n if (operation === \"create\") return \"create\";\n if (operation === \"update\") return \"update\";\n return \"delete\";\n}\n\nfunction isDefaultAllowed(\n operation: \"read\" | \"create\" | \"update\" | \"delete\",\n defaultAccess: string,\n): boolean {\n const levels: Record<string, boolean> = {\n none: false,\n read: operation === \"read\",\n create: operation === \"read\" || operation === \"create\",\n update: operation === \"read\" || operation === \"create\" || operation === \"update\",\n delete: operation === \"read\" || operation === \"create\" || operation === \"update\" || operation === \"delete\",\n admin: true,\n };\n return levels[defaultAccess] || false;\n}\n\nexport async function checkCollectionAccess(\n config: { access?: any; slug: string },\n operation: \"read\" | \"create\" | \"update\" | \"delete\",\n context: AccessContext,\n options: AccessOptions = {},\n): Promise<AccessCheckResult> {\n const { user, req, tenantID, apiKey } = context;\n const { enablePublicAccess = true, defaultAccess = \"none\" } = options;\n const accessRule = config.access?.[operation];\n\n // Custom access function (highest priority)\n if (accessRule) {\n const allowed = await evaluateAccess(accessRule, {\n req: req!,\n user,\n tenantID,\n });\n if (allowed === false) {\n return { allowed: false, error: \"Access denied\", status: 403 };\n }\n if (typeof allowed === \"object\") {\n return { allowed: true, extraWhere: allowed as WhereClause };\n }\n return { allowed: true };\n }\n\n // API key permission check\n if (apiKey?.permissions?.length > 0) {\n const resource = config.slug;\n const action = actionToPermission(operation);\n const permission = `${resource}:${action}`;\n if (\n !hasApiKeyPermission(apiKey.permissions, permission) &&\n !hasApiKeyPermission(apiKey.permissions, `${resource}:admin`)\n ) {\n return { allowed: false, error: \"Access denied: insufficient permissions\", status: 403 };\n }\n return { allowed: true };\n }\n\n // No accessRule, no apiKey — authenticated user RBAC\n if (user) {\n const resource = config.slug;\n const action = actionToPermission(operation);\n const permission = `${resource}:${action}`;\n\n const userHas = hasPermission(\n { id: user.id, email: user.email, role: user.role } as any,\n permission,\n );\n const adminHas = hasPermission(\n { id: user.id, email: user.email, role: user.role } as any,\n `${resource}:admin`,\n );\n\n if (userHas || adminHas) {\n return { allowed: true };\n }\n return { allowed: false, error: \"Access denied: missing RBAC permission\", status: 403 };\n }\n\n // Unauthenticated — check public access\n const defaultAllowed = isDefaultAllowed(operation, defaultAccess);\n if (enablePublicAccess && defaultAllowed) {\n return { allowed: true };\n }\n\n return { allowed: false, error: \"Authentication required\", status: 401 };\n}\n\nexport async function checkGlobalAccess(\n config: { access?: any; slug: string },\n operation: \"read\" | \"update\",\n context: AccessContext,\n options: AccessOptions = {},\n): Promise<AccessCheckResult> {\n const { user, req, tenantID } = context;\n const { enablePublicAccess = true } = options;\n const accessRule = config.access?.[operation];\n\n // Custom access function\n if (accessRule) {\n const allowed = await evaluateAccess(accessRule, {\n req: req!,\n user,\n tenantID,\n });\n if (allowed === false) {\n return { allowed: false, error: \"Access denied\", status: 403 };\n }\n return { allowed: true };\n }\n\n // Authenticated user RBAC\n if (user) {\n const permission = `globals:${operation}`;\n const userHas = hasPermission(\n { id: user.id, email: user.email, role: user.role } as any,\n permission,\n );\n const adminHas = hasPermission(\n { id: user.id, email: user.email, role: user.role } as any,\n \"globals:admin\",\n );\n if (userHas || adminHas) {\n return { allowed: true };\n }\n return { allowed: false, error: \"Access denied: missing RBAC permission\", status: 403 };\n }\n\n // Unauthenticated\n if (enablePublicAccess) {\n return { allowed: true };\n }\n\n return { allowed: false, error: \"Authentication required\", status: 401 };\n}\n"]}
|
|
@@ -249,5 +249,5 @@ exports.isUploadField = isUploadField;
|
|
|
249
249
|
exports.normalizeRichTextValue = normalizeRichTextValue;
|
|
250
250
|
exports.renderRichText = renderRichText;
|
|
251
251
|
exports.richTextStyles = richTextStyles;
|
|
252
|
-
//# sourceMappingURL=chunk-
|
|
253
|
-
//# sourceMappingURL=chunk-
|
|
252
|
+
//# sourceMappingURL=chunk-OJ2AM75W.cjs.map
|
|
253
|
+
//# sourceMappingURL=chunk-OJ2AM75W.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/fields/types.ts","../src/fields/richtext.ts"],"names":["StarterKit","Link","Image","TextAlign","Underline","Highlight","TaskList","TaskItem","TextStyle","Color","html","generateHTML"],"mappings":"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","file":"chunk-OJ2AM75W.cjs","sourcesContent":["\n\n// ============================================================================\n// Base Field Interface\n// ============================================================================\n\n/**\n * Serializable condition for conditional field visibility.\n * Unlike function conditions, these survive JSON serialization\n * and can be used in admin configs that are built at compile time.\n */\nexport interface DeclarativeCondition {\n /** The field name to evaluate (resolved from root form data) */\n field: string;\n /** Show the field when the target field equals this value */\n equals?: string | number | boolean;\n /** Show the field when the target field does NOT equal this value */\n notEquals?: string | number | boolean;\n /** Show the field when the target field's value is one of these */\n in?: (string | number | boolean)[];\n}\n\nexport interface FieldAdmin {\n description?: string;\n placeholder?: string;\n readOnly?: boolean | ((\n data: Record<string, unknown>,\n siblingData: Record<string, unknown>,\n ) => boolean);\n hidden?: boolean | ((\n data: Record<string, unknown>,\n siblingData: Record<string, unknown>,\n ) => boolean);\n width?: string;\n position?: \"sidebar\" | \"main\";\n autoGenerate?: string;\n action?: string;\n method?: string;\n inline?: boolean;\n pickerMode?: \"drawer\" | \"dropdown\";\n condition?:\n | ((\n data: Record<string, unknown>,\n siblingData: Record<string, unknown>,\n ) => boolean)\n | DeclarativeCondition;\n}\n\nexport interface BaseField {\n name: string;\n label?: string;\n required?: boolean;\n unique?: boolean;\n indexed?: boolean;\n defaultValue?: any;\n admin?: FieldAdmin;\n validate?: (\n value: any,\n options: ValidateOptions,\n ) => string | true | Promise<string | true>;\n hooks?: {\n beforeValidate?: Hook[];\n beforeChange?: Hook[];\n afterChange?: Hook[];\n afterRead?: Hook[];\n };\n}\n\nexport interface ValidateOptions {\n data?: Record<string, any>;\n siblingData?: Record<string, any>;\n user?: unknown;\n operation?: string;\n required?: boolean;\n}\n\nexport type Hook = (args: any) => Promise<any> | any;\n\n// ============================================================================\n// Primitive Fields\n// ============================================================================\n\nexport type TextFieldVariant = \"text\" | \"email\" | \"password\" | \"url\" | \"id\";\n\nexport interface TextField extends BaseField {\n type: \"text\";\n variant?: TextFieldVariant;\n minLength?: number;\n maxLength?: number;\n pattern?: string;\n hasMany?: boolean;\n localized?: boolean;\n}\n\nexport interface NumberField extends BaseField {\n type: \"number\";\n min?: number;\n max?: number;\n step?: number;\n integer?: boolean;\n hasMany?: boolean;\n}\n\nexport interface CheckboxField extends BaseField {\n type: \"checkbox\";\n}\n\nexport interface DateField extends BaseField {\n type: \"date\";\n minDate?: string;\n maxDate?: string;\n time?: boolean;\n}\n\nexport interface EmailField extends BaseField {\n type: \"email\";\n}\n\nexport interface PasswordField extends BaseField {\n type: \"password\";\n}\n\nexport interface TextareaField extends BaseField {\n type: \"textarea\";\n minLength?: number;\n maxLength?: number;\n rows?: number;\n localized?: boolean;\n}\n\nexport interface SelectField extends BaseField {\n type: \"select\";\n options?: Array<{ label: string; value: string }>;\n dynamicOptions?: string;\n hasMany?: boolean;\n defaultValue?: string | string[];\n}\n\nexport interface RadioField extends BaseField {\n type: \"radio\";\n options: Array<{ label: string; value: string }>;\n defaultValue?: string;\n}\n\nexport interface ColorField extends BaseField {\n type: \"color\";\n format?: \"hex\" | \"rgb\" | \"hsl\";\n defaultValue?: string;\n}\n\nexport interface ImageField extends BaseField {\n type: \"image\";\n minCount?: number;\n maxCount?: number;\n allowedTypes?: string[];\n maxSize?: number;\n}\n\n// ============================================================================\n// Complex Fields\n// ============================================================================\n\nexport type RichTextBlock = Record<string, any>; // TipTap JSONContent\n\nexport interface RichTextField extends BaseField {\n type: \"richtext\";\n defaultValue?: Record<string, any>;\n localized?: boolean;\n}\n\nexport interface JSONField extends BaseField {\n type: \"json\";\n defaultValue?: Record<string, any>;\n}\n\nexport interface CodeField extends BaseField {\n type: \"code\";\n language?: string;\n defaultValue?: string;\n}\n\nexport interface UploadField extends BaseField {\n type: \"upload\";\n relationTo: string;\n hasMany?: boolean;\n maxDepth?: number;\n defaultValue?: string;\n}\n\nexport interface MarkdownField extends BaseField {\n type: \"markdown\";\n localized?: boolean;\n defaultValue?: string;\n}\n\n// ============================================================================\n// Relational Fields\n// ============================================================================\n\nexport interface RelationshipField extends BaseField {\n type: \"relationship\";\n relationTo: string | string[];\n hasMany?: boolean;\n maxDepth?: number;\n filterOptions?: (args: { data: any; user: any }) => Record<string, any>;\n defaultValue?: string | string[];\n}\n\nexport interface ArrayField extends BaseField {\n type: \"array\";\n fields: Field[];\n minRows?: number;\n maxRows?: number;\n labels?: { singular?: string; plural?: string };\n defaultValue?: Record<string, any>[];\n}\n\nexport interface ListField extends BaseField {\n type: \"list\";\n defaultValue?: string[];\n}\n\nexport interface GroupField extends BaseField {\n type: \"group\";\n fields: Field[];\n defaultValue?: Record<string, any>;\n}\n\nexport interface BlockImage {\n url: string;\n alt?: string;\n}\n\nexport interface BlockAdmin {\n group?: string;\n description?: string;\n images?: {\n icon?: BlockImage | string;\n thumbnail?: BlockImage | string;\n };\n}\n\nexport interface Block {\n slug: string;\n label: string;\n fields: Field[];\n imageURL?: string;\n admin?: BlockAdmin;\n}\n\nexport interface BlocksField extends BaseField {\n type: \"blocks\";\n blocks?: Block[];\n minRows?: number;\n maxRows?: number;\n defaultValue?: Array<{ blockType: string; [key: string]: any }>;\n}\n\nexport interface RowField extends Omit<BaseField, \"name\"> {\n type: \"row\";\n fields: Field[];\n name?: string;\n}\n\nexport interface CollapsibleField extends Omit<BaseField, \"name\"> {\n type: \"collapsible\";\n fields: Field[];\n label: string;\n name?: string;\n}\n\nexport interface TabsField extends Omit<BaseField, \"name\"> {\n type: \"tabs\";\n tabs: Array<{\n label: string;\n fields: Field[];\n name?: string;\n }>;\n name?: string;\n}\n\nexport interface ButtonField extends BaseField {\n type: \"button\";\n label: string;\n action?: string;\n method?: string;\n inline?: boolean;\n}\n\nexport interface ActionField extends BaseField {\n type: \"action\";\n label: string;\n action?: string;\n method?: string;\n inline?: boolean;\n}\n\nexport interface SecretField extends BaseField {\n type: \"secret\";\n}\n\n// ============================================================================\n// Union Type\n// ============================================================================\n\nexport type Field =\n | TextField\n | NumberField\n | CheckboxField\n | DateField\n | EmailField\n | PasswordField\n | TextareaField\n | SelectField\n | RadioField\n | ColorField\n | ImageField\n | RichTextField\n | JSONField\n | CodeField\n | UploadField\n | MarkdownField\n | RelationshipField\n | ArrayField\n | ListField\n | GroupField\n | BlocksField\n | RowField\n | CollapsibleField\n | TabsField\n | ButtonField\n | ActionField\n | SecretField;\n\nexport type FieldType = Field[\"type\"];\n\n// ============================================================================\n// Field Type Guards\n// ============================================================================\n\nexport function isTextField(field: Field): field is TextField {\n return field.type === \"text\";\n}\n\nexport function isNumberField(field: Field): field is NumberField {\n return field.type === \"number\";\n}\n\nexport function isRelationshipField(field: Field): field is RelationshipField {\n return field.type === \"relationship\";\n}\n\nexport function isArrayField(field: Field): field is ArrayField {\n return field.type === \"array\";\n}\n\nexport function isGroupField(field: Field): field is GroupField {\n return field.type === \"group\";\n}\n\nexport function isBlocksField(field: Field): field is BlocksField {\n return field.type === \"blocks\";\n}\n\nexport function isUploadField(field: Field): field is UploadField {\n return field.type === \"upload\";\n}\n\nexport function isImageField(field: Field): field is ImageField {\n return field.type === \"image\";\n}\n\nexport function isRichTextField(field: Field): field is RichTextField {\n return field.type === \"richtext\";\n}\n\nexport function isSelectField(field: Field): field is SelectField {\n return field.type === \"select\";\n}\n\nexport function isLayoutField(\n field: Field,\n): field is RowField | CollapsibleField | TabsField {\n return (\n field.type === \"row\" ||\n field.type === \"collapsible\" ||\n field.type === \"tabs\"\n );\n}\n\n// ============================================================================\n// Field Type List\n// ============================================================================\n\nexport const PRIMITIVE_FIELD_TYPES = [\n \"text\",\n \"number\",\n \"checkbox\",\n \"date\",\n \"email\",\n \"password\",\n \"textarea\",\n \"select\",\n \"radio\",\n \"color\",\n] as const;\n\nexport const COMPLEX_FIELD_TYPES = [\n \"richtext\",\n \"json\",\n \"code\",\n \"upload\",\n \"image\",\n \"markdown\",\n] as const;\n\nexport const RELATIONAL_FIELD_TYPES = [\n \"relationship\",\n \"array\",\n \"group\",\n \"blocks\",\n] as const;\n\nexport const LAYOUT_FIELD_TYPES = [\"row\", \"collapsible\", \"tabs\"] as const;\n\nexport const ALL_FIELD_TYPES = [\n ...PRIMITIVE_FIELD_TYPES,\n ...COMPLEX_FIELD_TYPES,\n ...RELATIONAL_FIELD_TYPES,\n ...LAYOUT_FIELD_TYPES,\n] as const;\n\n// ============================================================================\n// Field Factory Functions\n// ============================================================================\n\nexport function createRelationshipFieldConfig(\n name: string,\n relationTo: string | string[],\n options?: Partial<Omit<RelationshipField, \"type\" | \"name\" | \"relationTo\">>,\n): RelationshipField {\n return {\n name,\n type: \"relationship\",\n relationTo,\n ...options,\n required: options?.required ?? false,\n };\n}\n","import { generateHTML } from \"@tiptap/html\";\nimport StarterKit from \"@tiptap/starter-kit\";\nimport Link from \"@tiptap/extension-link\";\nimport Image from \"@tiptap/extension-image\";\nimport TextAlign from \"@tiptap/extension-text-align\";\nimport Underline from \"@tiptap/extension-underline\";\nimport Highlight from \"@tiptap/extension-highlight\";\nimport TaskList from \"@tiptap/extension-task-list\";\nimport TaskItem from \"@tiptap/extension-task-item\";\nimport { TextStyle } from \"@tiptap/extension-text-style\";\nimport Color from \"@tiptap/extension-color\";\n\nexport const richTextStyles = `\n.kyro-richtext {\n color: inherit;\n line-height: 1.7;\n}\n\n.kyro-richtext > *:first-child {\n margin-top: 0;\n}\n\n.kyro-richtext > *:last-child {\n margin-bottom: 0;\n}\n\n.kyro-richtext p,\n.kyro-richtext ul,\n.kyro-richtext ol,\n.kyro-richtext blockquote,\n.kyro-richtext pre {\n margin: 0 0 1rem;\n}\n\n.kyro-richtext h1,\n.kyro-richtext h2,\n.kyro-richtext h3,\n.kyro-richtext h4,\n.kyro-richtext h5,\n.kyro-richtext h6 {\n margin: 0 0 0.75rem;\n line-height: 1.2;\n}\n\n.kyro-richtext ul,\n.kyro-richtext ol {\n padding-left: 1.5rem;\n}\n\n.kyro-richtext blockquote {\n border-left: 4px solid rgba(148, 163, 184, 0.5);\n margin-left: 0;\n padding-left: 1rem;\n font-style: italic;\n}\n\n.kyro-richtext pre {\n overflow-x: auto;\n border-radius: 0.75rem;\n background: rgba(15, 23, 42, 0.92);\n color: #f8fafc;\n padding: 1rem;\n}\n\n.kyro-richtext code {\n font-family: ui-monospace, SFMono-Regular, Menlo, monospace;\n}\n\n.kyro-richtext img {\n display: block;\n max-width: 100%;\n height: auto;\n border-radius: 0.75rem;\n}\n\n.kyro-richtext ul[data-type=\"taskList\"] {\n list-style: none;\n padding: 0;\n}\n\n.kyro-richtext li[data-type=\"taskItem\"] {\n display: flex;\n align-items: flex-start;\n gap: 0.5rem;\n}\n\n.kyro-richtext li[data-type=\"taskItem\"] > label {\n user-select: none;\n pointer-events: none;\n margin-top: 0.2rem;\n}\n\n.kyro-richtext li[data-type=\"taskItem\"] > div {\n flex: 1;\n}\n\n.kyro-richtext mark {\n background-color: #fef08a;\n border-radius: 0.25rem;\n padding: 0.125rem 0.25rem;\n}\n`.trim();\n\nconst extensions = [\n StarterKit,\n Link.configure({\n openOnClick: false,\n }),\n Image,\n TextAlign.configure({\n types: [\"heading\", \"paragraph\"],\n }),\n Underline,\n Highlight.configure({\n multicolor: true,\n }),\n TaskList,\n TaskItem.configure({\n nested: true,\n }),\n TextStyle,\n Color,\n];\n\nexport function normalizeRichTextValue<T>(value: T): T {\n // TipTap JSON is already standard JSON, so we just ensure it's an object.\n if (typeof value === \"object\" && value !== null) {\n return value;\n }\n return {} as T;\n}\n\nexport function renderRichText(value: unknown): string {\n if (typeof value !== \"object\" || value === null) {\n return \"\";\n }\n \n try {\n const html = generateHTML(value as Record<string, any>, extensions);\n return `<div class=\"kyro-richtext\">${html}</div>`;\n } catch (error) {\n console.error(\"Failed to render rich text:\", error);\n return \"\";\n }\n}\n"]}
|
|
@@ -1,15 +1,15 @@
|
|
|
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 chunkW3GT55TY_cjs = require('./chunk-W3GT55TY.cjs');
|
|
5
|
+
var chunkPF642V5O_cjs = require('./chunk-PF642V5O.cjs');
|
|
6
|
+
var chunk2CBCU5ML_cjs = require('./chunk-2CBCU5ML.cjs');
|
|
7
|
+
var chunkZ7OH3MWT_cjs = require('./chunk-Z7OH3MWT.cjs');
|
|
8
|
+
var chunkKGJRJ7CU_cjs = require('./chunk-KGJRJ7CU.cjs');
|
|
9
9
|
var chunkEEJUFDMF_cjs = require('./chunk-EEJUFDMF.cjs');
|
|
10
10
|
var chunkGUUB5EAG_cjs = require('./chunk-GUUB5EAG.cjs');
|
|
11
11
|
var zod = require('zod');
|
|
12
|
-
var
|
|
12
|
+
var graphqlYoga = require('graphql-yoga');
|
|
13
13
|
var module$1 = require('module');
|
|
14
14
|
var crypto = require('crypto');
|
|
15
15
|
|
|
@@ -778,7 +778,7 @@ function globalToUpdateZod(global) {
|
|
|
778
778
|
|
|
779
779
|
// src/registry/index.ts
|
|
780
780
|
var Registry = class {
|
|
781
|
-
storageProviders =
|
|
781
|
+
storageProviders = chunk2CBCU5ML_cjs.getDefaultRegistry();
|
|
782
782
|
collections = /* @__PURE__ */ new Map();
|
|
783
783
|
globals = /* @__PURE__ */ new Map();
|
|
784
784
|
plugins = [];
|
|
@@ -1319,7 +1319,7 @@ var s3StoragePlugin = {
|
|
|
1319
1319
|
configFields: v.configFields,
|
|
1320
1320
|
extractConfig: (sc) => buildS3ConfigFromStorageConfig(v.type, v, sc),
|
|
1321
1321
|
extractRawConfig: (raw) => buildS3ConfigFromRaw(v.type, v, raw),
|
|
1322
|
-
factory: (c) =>
|
|
1322
|
+
factory: (c) => chunk2CBCU5ML_cjs.createS3Storage(c)
|
|
1323
1323
|
});
|
|
1324
1324
|
}
|
|
1325
1325
|
}
|
|
@@ -1367,7 +1367,7 @@ var cloudinaryStoragePlugin = {
|
|
|
1367
1367
|
uploadPreset: cl?.uploadPreset
|
|
1368
1368
|
};
|
|
1369
1369
|
},
|
|
1370
|
-
factory: (c) =>
|
|
1370
|
+
factory: (c) => chunk2CBCU5ML_cjs.createCloudinaryStorage(c)
|
|
1371
1371
|
});
|
|
1372
1372
|
}
|
|
1373
1373
|
};
|
|
@@ -1417,7 +1417,7 @@ var ftpStoragePlugin = {
|
|
|
1417
1417
|
type: "ftp"
|
|
1418
1418
|
};
|
|
1419
1419
|
},
|
|
1420
|
-
factory: (c) =>
|
|
1420
|
+
factory: (c) => chunk2CBCU5ML_cjs.createFtpStorage(c)
|
|
1421
1421
|
});
|
|
1422
1422
|
}
|
|
1423
1423
|
};
|
|
@@ -1477,7 +1477,7 @@ var Kyro = class {
|
|
|
1477
1477
|
this.registry = createRegistry();
|
|
1478
1478
|
this.db = config.adapter;
|
|
1479
1479
|
this.pubsub = new chunkEEJUFDMF_cjs.KyroPubSub(this.registry);
|
|
1480
|
-
this.webhookService =
|
|
1480
|
+
this.webhookService = chunkZ7OH3MWT_cjs.createWebhookService(this.db);
|
|
1481
1481
|
if (config.collections && config.admin?.collectionOverrides) {
|
|
1482
1482
|
applyCollectionOverrides(config.collections, config.admin.collectionOverrides);
|
|
1483
1483
|
}
|
|
@@ -1515,7 +1515,7 @@ var Kyro = class {
|
|
|
1515
1515
|
);
|
|
1516
1516
|
}
|
|
1517
1517
|
const systemCollection = {
|
|
1518
|
-
slug:
|
|
1518
|
+
slug: chunkKGJRJ7CU_cjs.API_KEY_COLLECTION,
|
|
1519
1519
|
fields: [
|
|
1520
1520
|
{ name: "userId", type: "text", required: true },
|
|
1521
1521
|
{ name: "name", type: "text", required: true },
|
|
@@ -1527,7 +1527,7 @@ var Kyro = class {
|
|
|
1527
1527
|
]
|
|
1528
1528
|
};
|
|
1529
1529
|
const webhookCollection = {
|
|
1530
|
-
slug:
|
|
1530
|
+
slug: chunkZ7OH3MWT_cjs.WEBHOOK_COLLECTION,
|
|
1531
1531
|
fields: [
|
|
1532
1532
|
{ name: "name", type: "text", required: true },
|
|
1533
1533
|
{ name: "url", type: "text", required: true },
|
|
@@ -1540,7 +1540,7 @@ var Kyro = class {
|
|
|
1540
1540
|
]
|
|
1541
1541
|
};
|
|
1542
1542
|
const webhookDeliveryCollection = {
|
|
1543
|
-
slug:
|
|
1543
|
+
slug: chunkZ7OH3MWT_cjs.WEBHOOK_DELIVERY_COLLECTION,
|
|
1544
1544
|
fields: [
|
|
1545
1545
|
{ name: "webhookId", type: "text", required: true },
|
|
1546
1546
|
{ name: "event", type: "text", required: true },
|
|
@@ -1614,7 +1614,7 @@ var Kyro = class {
|
|
|
1614
1614
|
const authObj = typeof this.config.auth === "object" ? this.config.auth : null;
|
|
1615
1615
|
const authSecret = authObj?.secret;
|
|
1616
1616
|
const checkSession = authObj?.checkSession !== false;
|
|
1617
|
-
return
|
|
1617
|
+
return chunk2CBCU5ML_cjs.createHonoApp({
|
|
1618
1618
|
registry: this.registry,
|
|
1619
1619
|
db: this.db,
|
|
1620
1620
|
authSecret,
|
|
@@ -1627,78 +1627,41 @@ var Kyro = class {
|
|
|
1627
1627
|
});
|
|
1628
1628
|
}
|
|
1629
1629
|
getGraphQL(options) {
|
|
1630
|
-
const
|
|
1630
|
+
const schema = chunkPF642V5O_cjs.buildGraphQLSchema({
|
|
1631
1631
|
registry: this.registry,
|
|
1632
1632
|
db: this.db,
|
|
1633
|
-
settings: this.settings
|
|
1634
|
-
user: options?.user,
|
|
1635
|
-
req: options?.req,
|
|
1636
|
-
tenantID: options?.tenantID
|
|
1633
|
+
settings: this.settings
|
|
1637
1634
|
});
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1635
|
+
const yoga = graphqlYoga.createYoga({
|
|
1636
|
+
schema,
|
|
1637
|
+
context: async ({ request }) => {
|
|
1638
|
+
const apiKeyRaw = chunkKGJRJ7CU_cjs.extractApiKeyFromRequest(request);
|
|
1641
1639
|
let gqlUser;
|
|
1642
1640
|
let apiKeyCtx;
|
|
1643
1641
|
if (apiKeyRaw && this.db) {
|
|
1644
|
-
const apiKeyResult = await
|
|
1645
|
-
if (!apiKeyResult.valid) {
|
|
1646
|
-
return new Response(
|
|
1647
|
-
JSON.stringify({ errors: [{ message: apiKeyResult.error || "Invalid API key" }] }),
|
|
1648
|
-
{ status: 401, headers: { "Content-Type": "application/json" } }
|
|
1649
|
-
);
|
|
1650
|
-
}
|
|
1642
|
+
const apiKeyResult = await chunkKGJRJ7CU_cjs.validateApiKey(apiKeyRaw, this.db);
|
|
1651
1643
|
if (apiKeyResult.user) {
|
|
1652
1644
|
gqlUser = apiKeyResult.user;
|
|
1653
|
-
apiKeyCtx =
|
|
1645
|
+
apiKeyCtx = chunkKGJRJ7CU_cjs.createApiKeyContext(apiKeyResult);
|
|
1654
1646
|
}
|
|
1655
1647
|
}
|
|
1656
|
-
const
|
|
1657
|
-
|
|
1658
|
-
registry: this.registry,
|
|
1648
|
+
const tenantID = options?.tenantID;
|
|
1649
|
+
return {
|
|
1659
1650
|
db: this.db,
|
|
1660
|
-
|
|
1651
|
+
registry: this.registry,
|
|
1661
1652
|
user: gqlUser,
|
|
1662
1653
|
req: request,
|
|
1663
|
-
tenantID
|
|
1664
|
-
apiKey: apiKeyCtx
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
const query = body.query || "";
|
|
1668
|
-
const variables = body.variables || {};
|
|
1669
|
-
if (!query) {
|
|
1670
|
-
return new Response(
|
|
1671
|
-
JSON.stringify({ error: "No GraphQL query provided" }),
|
|
1672
|
-
{ status: 400, headers: { "Content-Type": "application/json" } }
|
|
1673
|
-
);
|
|
1674
|
-
}
|
|
1675
|
-
try {
|
|
1676
|
-
const document = graphql.parse(query);
|
|
1677
|
-
const result = await graphql.execute({
|
|
1678
|
-
schema,
|
|
1679
|
-
document,
|
|
1680
|
-
variableValues: variables,
|
|
1681
|
-
contextValue: {
|
|
1682
|
-
db: this.db,
|
|
1683
|
-
registry: this.registry,
|
|
1684
|
-
settings: this.settings,
|
|
1685
|
-
user: gqlUser,
|
|
1686
|
-
req: request,
|
|
1687
|
-
tenantID: options?.tenantID
|
|
1688
|
-
}
|
|
1689
|
-
});
|
|
1690
|
-
return new Response(JSON.stringify(result), {
|
|
1691
|
-
status: 200,
|
|
1692
|
-
headers: { "Content-Type": "application/json" }
|
|
1693
|
-
});
|
|
1694
|
-
} catch (err) {
|
|
1695
|
-
return new Response(
|
|
1696
|
-
JSON.stringify({ errors: [{ message: err.message }] }),
|
|
1697
|
-
{ status: 400, headers: { "Content-Type": "application/json" } }
|
|
1698
|
-
);
|
|
1699
|
-
}
|
|
1654
|
+
tenantID,
|
|
1655
|
+
apiKey: apiKeyCtx,
|
|
1656
|
+
relationLoader: new chunkPF642V5O_cjs.RelationLoader({ db: this.db, tenantID, user: gqlUser })
|
|
1657
|
+
};
|
|
1700
1658
|
},
|
|
1701
|
-
|
|
1659
|
+
graphiql: false,
|
|
1660
|
+
plugins: []
|
|
1661
|
+
});
|
|
1662
|
+
return {
|
|
1663
|
+
fetch: yoga.fetch,
|
|
1664
|
+
schema
|
|
1702
1665
|
};
|
|
1703
1666
|
}
|
|
1704
1667
|
getTRPC(options) {
|
|
@@ -1721,7 +1684,7 @@ var Kyro = class {
|
|
|
1721
1684
|
{ status: 400, headers: { "Content-Type": "application/json" } }
|
|
1722
1685
|
);
|
|
1723
1686
|
}
|
|
1724
|
-
const ctx = await
|
|
1687
|
+
const ctx = await chunkW3GT55TY_cjs.createContext({
|
|
1725
1688
|
db: this.db,
|
|
1726
1689
|
registry: this.registry,
|
|
1727
1690
|
req: request,
|
|
@@ -1729,7 +1692,7 @@ var Kyro = class {
|
|
|
1729
1692
|
tenantID: options?.tenantID,
|
|
1730
1693
|
settings: this.settings
|
|
1731
1694
|
});
|
|
1732
|
-
const kyroRouter =
|
|
1695
|
+
const kyroRouter = chunkW3GT55TY_cjs.createKyroServer(ctx);
|
|
1733
1696
|
const collectionRouter = kyroRouter[slug];
|
|
1734
1697
|
if (!collectionRouter) {
|
|
1735
1698
|
return new Response(
|
|
@@ -1807,7 +1770,7 @@ var Kyro = class {
|
|
|
1807
1770
|
return null;
|
|
1808
1771
|
}
|
|
1809
1772
|
const defaultVerifyToken = async (token) => {
|
|
1810
|
-
const result = await
|
|
1773
|
+
const result = await chunkKGJRJ7CU_cjs.validateApiKey(token, this.db);
|
|
1811
1774
|
if (!result.valid) throw new Error(result.error || "Invalid API key");
|
|
1812
1775
|
if (!result.user) throw new Error("API key has no associated user");
|
|
1813
1776
|
return result.user;
|
|
@@ -1835,7 +1798,7 @@ var Kyro = class {
|
|
|
1835
1798
|
function createKyro(config) {
|
|
1836
1799
|
return new Kyro(config);
|
|
1837
1800
|
}
|
|
1838
|
-
var _require = module$1.createRequire((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('chunk-
|
|
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-OVZO4KB6.cjs', document.baseURI).href)));
|
|
1839
1802
|
var modPath = "node:sqlite";
|
|
1840
1803
|
var { DatabaseSync } = _require(modPath);
|
|
1841
1804
|
function flattenFields(fields) {
|
|
@@ -2293,6 +2256,7 @@ var LocalAdapter = class extends chunkGUUB5EAG_cjs.AbstractBaseAdapter {
|
|
|
2293
2256
|
this.db.prepare(
|
|
2294
2257
|
`INSERT OR REPLACE INTO ${tableName} (${quotedColumns.join(", ")}) VALUES (${placeholders})`
|
|
2295
2258
|
).run(...values);
|
|
2259
|
+
this.ensureVersionsTable();
|
|
2296
2260
|
return this.findByID({ collection: slug, id, tenantID, draft: true });
|
|
2297
2261
|
}
|
|
2298
2262
|
async update(args) {
|
|
@@ -2322,6 +2286,7 @@ var LocalAdapter = class extends chunkGUUB5EAG_cjs.AbstractBaseAdapter {
|
|
|
2322
2286
|
params.push(tenantID);
|
|
2323
2287
|
}
|
|
2324
2288
|
this.db.prepare(sql).run(...params);
|
|
2289
|
+
this.ensureVersionsTable();
|
|
2325
2290
|
return this.findByID({ collection: slug, id, tenantID, draft: true });
|
|
2326
2291
|
}
|
|
2327
2292
|
async delete(args) {
|
|
@@ -2329,6 +2294,7 @@ var LocalAdapter = class extends chunkGUUB5EAG_cjs.AbstractBaseAdapter {
|
|
|
2329
2294
|
const parsed = this.parseGlobalsSlug(slug);
|
|
2330
2295
|
const config = parsed.isGlobal ? this.globals.get(parsed.globalSlug) : this.getCollection(slug);
|
|
2331
2296
|
this.ensureTable(config, parsed.tableName);
|
|
2297
|
+
this.ensureVersionsTable();
|
|
2332
2298
|
const doc = await this.findByID({ collection: slug, id, tenantID, draft: true });
|
|
2333
2299
|
if (!doc) throw new Error(`Document not found: ${slug}/${id}`);
|
|
2334
2300
|
const tableName = parsed.tableName;
|
|
@@ -2783,5 +2749,5 @@ exports.validateCollection = validateCollection;
|
|
|
2783
2749
|
exports.validateConfig = validateConfig;
|
|
2784
2750
|
exports.validateFields = validateFields;
|
|
2785
2751
|
exports.validateGlobal = validateGlobal;
|
|
2786
|
-
//# sourceMappingURL=chunk-
|
|
2787
|
-
//# sourceMappingURL=chunk-
|
|
2752
|
+
//# sourceMappingURL=chunk-OVZO4KB6.cjs.map
|
|
2753
|
+
//# sourceMappingURL=chunk-OVZO4KB6.cjs.map
|