@kyro-cms/core 0.9.9 → 0.10.0

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.
Files changed (68) hide show
  1. package/dist/api-handler-graphql.cjs +11 -11
  2. package/dist/api-handler-graphql.js +7 -7
  3. package/dist/api-handler-trpc.cjs +9 -9
  4. package/dist/api-handler-trpc.js +7 -7
  5. package/dist/api-handler.cjs +10 -10
  6. package/dist/api-handler.js +7 -7
  7. package/dist/{bootstrap-4CELFLJO.cjs → bootstrap-FUAPY2OF.cjs} +9 -9
  8. package/dist/{bootstrap-4CELFLJO.cjs.map → bootstrap-FUAPY2OF.cjs.map} +1 -1
  9. package/dist/bootstrap-OXNVM7FP.js +7 -0
  10. package/dist/{bootstrap-3PV3GJ3S.js.map → bootstrap-OXNVM7FP.js.map} +1 -1
  11. package/dist/{chunk-5RFGYEQ3.js → chunk-354ISGA4.js} +5 -23
  12. package/dist/chunk-354ISGA4.js.map +1 -0
  13. package/dist/{chunk-E4JZ73FY.cjs → chunk-3P5AHK2U.cjs} +11 -24
  14. package/dist/chunk-3P5AHK2U.cjs.map +1 -0
  15. package/dist/{chunk-BVUDFKKS.js → chunk-526M5MOA.js} +6 -8
  16. package/dist/chunk-526M5MOA.js.map +1 -0
  17. package/dist/{chunk-5PMQQFRE.cjs → chunk-5GFQPHGT.cjs} +6 -9
  18. package/dist/chunk-5GFQPHGT.cjs.map +1 -0
  19. package/dist/{chunk-OYCICW4B.js → chunk-AN2L2CJZ.js} +4 -17
  20. package/dist/chunk-AN2L2CJZ.js.map +1 -0
  21. package/dist/{chunk-RFFSZSCL.cjs → chunk-GYIJ3JJM.cjs} +3 -11
  22. package/dist/chunk-GYIJ3JJM.cjs.map +1 -0
  23. package/dist/{chunk-PQ72Z6WC.js → chunk-GZS4LMR7.js} +2 -5
  24. package/dist/chunk-GZS4LMR7.js.map +1 -0
  25. package/dist/{chunk-GAAHG2Z4.js → chunk-HY6B7B5A.js} +4 -7
  26. package/dist/chunk-HY6B7B5A.js.map +1 -0
  27. package/dist/{chunk-IEIHABVR.cjs → chunk-ISKYUUP4.cjs} +15 -33
  28. package/dist/chunk-ISKYUUP4.cjs.map +1 -0
  29. package/dist/{chunk-6UNONDW7.js → chunk-N5QSHUA6.js} +2 -11
  30. package/dist/chunk-N5QSHUA6.js.map +1 -0
  31. package/dist/{chunk-OXYSOU6Z.cjs → chunk-NQJJYRLP.cjs} +11 -13
  32. package/dist/chunk-NQJJYRLP.cjs.map +1 -0
  33. package/dist/{chunk-Q23GAMLE.cjs → chunk-THBQG64D.cjs} +2 -5
  34. package/dist/chunk-THBQG64D.cjs.map +1 -0
  35. package/dist/{chunk-Y7AQK4R4.cjs → chunk-VKREAIBA.cjs} +2 -11
  36. package/dist/chunk-VKREAIBA.cjs.map +1 -0
  37. package/dist/{chunk-V7KZQIZ6.js → chunk-XHAAAEXX.js} +2 -10
  38. package/dist/chunk-XHAAAEXX.js.map +1 -0
  39. package/dist/cli/index.cjs +1 -41
  40. package/dist/cli/index.cjs.map +1 -1
  41. package/dist/cli/index.js +1 -41
  42. package/dist/cli/index.js.map +1 -1
  43. package/dist/drizzle/index.cjs +9 -9
  44. package/dist/drizzle/index.js +1 -1
  45. package/dist/index.cjs +62 -64
  46. package/dist/index.cjs.map +1 -1
  47. package/dist/index.js +8 -10
  48. package/dist/index.js.map +1 -1
  49. package/dist/mongodb/index.cjs +3 -3
  50. package/dist/mongodb/index.js +1 -1
  51. package/dist/rest/index.cjs +6 -6
  52. package/dist/rest/index.js +4 -4
  53. package/package.json +1 -1
  54. package/dist/bootstrap-3PV3GJ3S.js +0 -7
  55. package/dist/chunk-5PMQQFRE.cjs.map +0 -1
  56. package/dist/chunk-5RFGYEQ3.js.map +0 -1
  57. package/dist/chunk-6UNONDW7.js.map +0 -1
  58. package/dist/chunk-BVUDFKKS.js.map +0 -1
  59. package/dist/chunk-E4JZ73FY.cjs.map +0 -1
  60. package/dist/chunk-GAAHG2Z4.js.map +0 -1
  61. package/dist/chunk-IEIHABVR.cjs.map +0 -1
  62. package/dist/chunk-OXYSOU6Z.cjs.map +0 -1
  63. package/dist/chunk-OYCICW4B.js.map +0 -1
  64. package/dist/chunk-PQ72Z6WC.js.map +0 -1
  65. package/dist/chunk-Q23GAMLE.cjs.map +0 -1
  66. package/dist/chunk-RFFSZSCL.cjs.map +0 -1
  67. package/dist/chunk-V7KZQIZ6.js.map +0 -1
  68. package/dist/chunk-Y7AQK4R4.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/api-handler.ts"],"names":[],"mappings":"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","file":"chunk-526M5MOA.js","sourcesContent":["import type { APIRoute } from \"astro\";\nimport { createKyro } from \"./createKyro.js\";\nimport { autoBootstrap } from \"./auth/bootstrap.js\";\nimport { DrizzleAdapter } from \"./database/drizzle/adapter.js\";\nimport { PostgresAuthAdapter } from \"./database/drizzle/postgres-auth-adapter.js\";\nimport { LocalAdapter } from \"./database/local/adapter.js\";\nimport { SQLiteAuthAdapter } from \"./auth/sqlite-adapter.js\";\nimport { MongoDBAdapter } from \"./database/mongodb/adapter.js\";\nimport { MongoDBAuthAdapter } from \"./database/mongodb/mongo-auth-adapter.js\";\n// @ts-ignore - handled by vite alias\nimport projectConfig from \"kyro:config\";\n\ndeclare var __KYRO_API_PATH__: string;\n\nexport let kyroInstance: any = null;\nlet initPromise: Promise<void> | null = null;\n\nasync function doInit(): Promise<void> {\n if (kyroInstance) return;\n\n try {\n const config = projectConfig.default || projectConfig;\n kyroInstance = createKyro(config);\n await kyroInstance.init();\n await kyroInstance.loadSettings();\n\n const db = kyroInstance.db;\n let bootstrapAuthAdapter: any = undefined;\n \n if (db instanceof DrizzleAdapter) {\n if (db.dialect === \"postgres\") {\n bootstrapAuthAdapter = new PostgresAuthAdapter({ db: db.client });\n } else if (db.dialect === \"sqlite\") {\n const authDbPath = process.env.KYRO_AUTH_DB_PATH || \"./data/auth.db\";\n bootstrapAuthAdapter = new SQLiteAuthAdapter({ path: authDbPath });\n }\n } else if (db instanceof LocalAdapter) {\n const authDbPath = process.env.KYRO_AUTH_DB_PATH || \"./data/auth.db\";\n bootstrapAuthAdapter = new SQLiteAuthAdapter({ path: authDbPath });\n } else if (db instanceof MongoDBAdapter) {\n bootstrapAuthAdapter = new MongoDBAuthAdapter({ db: db.db });\n }\n\n if (bootstrapAuthAdapter?.connect) {\n await bootstrapAuthAdapter.connect();\n }\n\n const result = await autoBootstrap(bootstrapAuthAdapter);\n if (result?.success) {\n }\n\n // Auto-start WebSocket (checks settings.access.apiAccess.wsEnabled internally)\n if (typeof kyroInstance.startWebSocket === \"function\") {\n kyroInstance.startWebSocket().catch((err: any) => {\n console.error(\"[Kyro] WebSocket auto-start failed:\", err);\n });\n }\n\n // Expose instance globally so admin SSR can read DB directly\n (globalThis as any).__KYRO_INSTANCE__ = kyroInstance;\n\n } catch (err) {\n kyroInstance = null;\n initPromise = null;\n console.error(\"[Kyro API] Init failed, will retry:\", err);\n throw err;\n }\n}\n\nexport async function warmKyroInstance(): Promise<void> {\n if (!initPromise) {\n initPromise = doInit();\n }\n await initPromise;\n}\n\nexport const ALL: APIRoute = async (context) => {\n if (!kyroInstance) {\n if (!initPromise) {\n initPromise = doInit();\n }\n\n try {\n await Promise.race([\n initPromise,\n new Promise<void>((_, reject) =>\n setTimeout(() => reject(new Error(\"Initialization timeout\")), 30000)\n ),\n ]);\n } catch {\n return new Response(JSON.stringify({\n error: \"Service Unavailable\",\n message: \"Kyro CMS is still starting up. Please try again in a moment.\",\n }), {\n status: 503,\n headers: {\n \"Content-Type\": \"application/json\",\n \"Retry-After\": \"5\",\n },\n });\n }\n }\n\n const url = new URL(context.request.url);\n const path = url.pathname;\n const p = __KYRO_API_PATH__;\n\n if (path === `${p}/graphql` && typeof kyroInstance.getGraphQL === \"function\") {\n const yoga = kyroInstance.getGraphQL();\n const res = await yoga.fetch(context.request, context.locals);\n return new Response(res.body, res);\n }\n\n if (path.startsWith(`${p}/trpc/`) && typeof kyroInstance.getTRPC === \"function\") {\n const trpc = kyroInstance.getTRPC();\n const res = await trpc.fetch(context.request, context.locals);\n return new Response(res.body, res);\n }\n\n const app = kyroInstance.getREST();\n return app.fetch(context.request, context.locals);\n};\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkY7AQK4R4_cjs = require('./chunk-Y7AQK4R4.cjs');
3
+ var chunkVKREAIBA_cjs = require('./chunk-VKREAIBA.cjs');
4
4
  var chunkIDVRRRAK_cjs = require('./chunk-IDVRRRAK.cjs');
5
5
 
6
6
  // src/auth/bootstrap.ts
@@ -24,7 +24,7 @@ async function bootstrapAdmin(config) {
24
24
  error: "Failed to connect to auth storage"
25
25
  };
26
26
  }
27
- const passwordPolicy = new chunkY7AQK4R4_cjs.PasswordPolicy();
27
+ const passwordPolicy = new chunkVKREAIBA_cjs.PasswordPolicy();
28
28
  const passwordValidation = passwordPolicy.validate(adminPassword);
29
29
  if (!passwordValidation.valid) {
30
30
  await authAdapter.disconnect?.();
@@ -49,7 +49,7 @@ async function bootstrapAdmin(config) {
49
49
  tenantId
50
50
  });
51
51
  if (sendWelcomeEmail && emailConfig) {
52
- const emailTransport = new chunkY7AQK4R4_cjs.EmailTransport(emailConfig);
52
+ const emailTransport = new chunkVKREAIBA_cjs.EmailTransport(emailConfig);
53
53
  const templates = emailTransport.getTemplates();
54
54
  const welcomeTemplate = templates.welcome(adminEmail.split("@")[0]);
55
55
  await emailTransport.send({
@@ -120,11 +120,8 @@ async function autoBootstrap(authAdapter) {
120
120
  }
121
121
  } catch {
122
122
  }
123
- console.log("Auto-bootstrapping admin user...");
124
123
  const result = await bootstrapAdmin(config);
125
- if (result.success) {
126
- console.log(`Admin user created: ${config.adminEmail}`);
127
- } else {
124
+ if (result.success) ; else {
128
125
  console.error(`Bootstrap failed: ${result.error}`);
129
126
  }
130
127
  return result;
@@ -155,5 +152,5 @@ exports.bootstrapAdmin = bootstrapAdmin;
155
152
  exports.bootstrapWithRetry = bootstrapWithRetry;
156
153
  exports.checkBootstrapRequired = checkBootstrapRequired;
157
154
  exports.getBootstrapFromEnv = getBootstrapFromEnv;
158
- //# sourceMappingURL=chunk-5PMQQFRE.cjs.map
159
- //# sourceMappingURL=chunk-5PMQQFRE.cjs.map
155
+ //# sourceMappingURL=chunk-5GFQPHGT.cjs.map
156
+ //# sourceMappingURL=chunk-5GFQPHGT.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/auth/bootstrap.ts"],"names":["SQLiteAuthAdapter","PasswordPolicy","EmailTransport"],"mappings":";;;;;;AAsBA,eAAsB,eACpB,MAAA,EAC0B;AAC1B,EAAA,MAAM;AAAA,IACJ,UAAA;AAAA,IACA,aAAA;AAAA,IACA,SAAA,GAAY,aAAA;AAAA,IACZ,QAAA;AAAA,IACA,WAAA;AAAA,IACA,gBAAA,GAAmB;AAAA,GACrB,GAAI,MAAA;AAEJ,EAAA,MAAM,WAAA,GACJ,MAAA,CAAO,WAAA,IACP,IAAIA,mCAAA,CAAkB;AAAA,IACpB,IAAA,EAAM,OAAO,UAAA,IAAc;AAAA,GAC5B,CAAA;AAEH,EAAA,IAAI;AACF,IAAA,MAAM,YAAY,OAAA,IAAU;AAAA,EAC9B,SAAS,KAAA,EAAO;AACd,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO;AAAA,KACT;AAAA,EACF;AAEA,EAAA,MAAM,cAAA,GAAiB,IAAIC,gCAAA,EAAe;AAC1C,EAAA,MAAM,kBAAA,GAAqB,cAAA,CAAe,QAAA,CAAS,aAAa,CAAA;AAChE,EAAA,IAAI,CAAC,mBAAmB,KAAA,EAAO;AAC7B,IAAA,MAAM,YAAY,UAAA,IAAa;AAC/B,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,OAAO,CAAA,kBAAA,EAAqB,kBAAA,CAAmB,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KAClE;AAAA,EACF;AAEA,EAAA,MAAM,YAAA,GAAe,MAAM,WAAA,CAAY,eAAA,CAAgB,UAAU,CAAA;AACjE,EAAA,IAAI,YAAA,EAAc;AAChB,IAAA,MAAM,YAAY,UAAA,IAAa;AAC/B,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EAAO;AAAA,KACT;AAAA,EACF;AAEA,EAAA,IAAI;AACF,IAAA,MAAM,IAAA,GAAO,MAAM,WAAA,CAAY,UAAA,CAAW;AAAA,MACxC,KAAA,EAAO,UAAA;AAAA,MACP,QAAA,EAAU,aAAA;AAAA,MACV,MAAO,SAAA,IAA0B,OAAA;AAAA,MACjC;AAAA,KACD,CAAA;AAED,IAAA,IAAI,oBAAoB,WAAA,EAAa;AACnC,MAAA,MAAM,cAAA,GAAiB,IAAIC,gCAAA,CAAe,WAAW,CAAA;AACrD,MAAA,MAAM,SAAA,GAAY,eAAe,YAAA,EAAa;AAC9C,MAAA,MAAM,eAAA,GAAkB,UAAU,OAAA,CAAQ,UAAA,CAAW,MAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CAAA;AAClE,MAAA,MAAM,eAAe,IAAA,CAAK;AAAA,QACxB,EAAA,EAAI,UAAA;AAAA,QACJ,GAAG;AAAA,OACJ,CAAA;AAAA,IACH;AAEA,IAAA,MAAM,YAAY,UAAA,IAAa;AAC/B,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,IAAA;AAAA,MACT;AAAA,KACF;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,MAAM,YAAY,UAAA,IAAa;AAC/B,IAAA,OAAO;AAAA,MACL,OAAA,EAAS,KAAA;AAAA,MACT,KAAA,EACE,KAAA,YAAiB,KAAA,GAAQ,KAAA,CAAM,OAAA,GAAU;AAAA,KAC7C;AAAA,EACF;AACF;AAEA,eAAsB,sBAAA,CACpB,aACA,UAAA,EACkB;AAClB,EAAA,MAAM,YAAA,GAAe,MAAM,WAAA,CAAY,eAAA,CAAgB,UAAU,CAAA;AACjE,EAAA,OAAO,CAAC,YAAA;AACV;AAEO,SAAS,mBAAA,GAA8C;AAC5D,EAAA,MAAM,KAAA,GAAQ,QAAQ,GAAA,CAAI,gBAAA;AAC1B,EAAA,MAAM,QAAA,GAAW,QAAQ,GAAA,CAAI,mBAAA;AAE7B,EAAA,IAAI,CAAC,KAAA,IAAS,CAAC,QAAA,EAAU;AACvB,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,OAAO;AAAA,IACL,UAAA,EAAY,OAAA,CAAQ,GAAA,CAAI,iBAAA,IAAqB,gBAAA;AAAA,IAC7C,UAAA,EAAY,KAAA;AAAA,IACZ,aAAA,EAAe,QAAA;AAAA,IACf,SAAA,EAAW,OAAA,CAAQ,GAAA,CAAI,eAAA,IAAmB,aAAA;AAAA,IAC1C,QAAA,EAAU,QAAQ,GAAA,CAAI,oBAAA;AAAA,IACtB,WAAA,EAAa,OAAA,CAAQ,GAAA,CAAI,SAAA,GACrB;AAAA,MACE,QAAA,EAAU,MAAA;AAAA,MACV,IAAA,EAAM;AAAA,QACJ,IAAA,EAAM,QAAQ,GAAA,CAAI,SAAA;AAAA,QAClB,MAAM,QAAA,CAAS,OAAA,CAAQ,GAAA,CAAI,SAAA,IAAa,OAAO,EAAE,CAAA;AAAA,QACjD,MAAA,EAAQ,OAAA,CAAQ,GAAA,CAAI,WAAA,KAAgB,MAAA;AAAA,QACpC,IAAA,EAAM;AAAA,UACJ,IAAA,EAAM,OAAA,CAAQ,GAAA,CAAI,SAAA,IAAa,EAAA;AAAA,UAC/B,IAAA,EAAM,OAAA,CAAQ,GAAA,CAAI,SAAA,IAAa;AAAA;AACjC,OACF;AAAA,MACA,IAAA,EAAM,OAAA,CAAQ,GAAA,CAAI,SAAA,IAAa,qBAAA;AAAA,MAC/B,QAAA,EAAU,QAAQ,GAAA,CAAI;AAAA,KACxB,GACA,MAAA;AAAA,IACJ,gBAAA,EAAkB,OAAA,CAAQ,GAAA,CAAI,uBAAA,KAA4B;AAAA,GAC5D;AACF;AAEA,eAAsB,cACpB,WAAA,EACiC;AACjC,EAAA,MAAM,SAAS,mBAAA,EAAoB;AACnC,EAAA,IAAI,CAAC,MAAA,EAAQ;AACX,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,MAAA,CAAO,WAAA,GAAc,WAAA;AAAA,EACvB;AAGA,EAAA,IAAI;AACF,IAAA,MAAM,MAAA,CAAO,aAAa,OAAA,IAAU;AACpC,IAAA,MAAM,eAAe,MAAM,MAAA,CAAO,WAAA,EAAa,eAAA,CAAgB,OAAO,UAAU,CAAA;AAChF,IAAA,IAAI,YAAA,EAAc;AAChB,MAAA,MAAM,MAAA,CAAO,aAAa,UAAA,IAAa;AACvC,MAAA,OAAO,EAAE,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,2BAAA,EAA4B;AAAA,IAC9D;AAAA,EACF,CAAA,CAAA,MAAQ;AAAA,EAER;AAEA,EAAA,MAAM,MAAA,GAAS,MAAM,cAAA,CAAe,MAAM,CAAA;AAE1C,EAAA,IAAI,OAAO,OAAA,EAAS,CACpB,MAAO;AACL,IAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,kBAAA,EAAqB,MAAA,CAAO,KAAK,CAAA,CAAE,CAAA;AAAA,EACnD;AAEA,EAAA,OAAO,MAAA;AACT;AAEA,eAAsB,kBAAA,CACpB,MAAA,EACA,UAAA,GAAqB,CAAA,EACrB,eAAuB,GAAA,EACG;AAC1B,EAAA,IAAI,SAAA,GAAoB,EAAA;AAExB,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,UAAA,EAAY,CAAA,EAAA,EAAK;AACnC,IAAA,MAAM,MAAA,GAAS,MAAM,cAAA,CAAe,MAAM,CAAA;AAE1C,IAAA,IAAI,OAAO,OAAA,EAAS;AAClB,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,SAAA,GAAY,OAAO,KAAA,IAAS,eAAA;AAE5B,IAAA,IAAI,SAAA,CAAU,QAAA,CAAS,gBAAgB,CAAA,EAAG;AACxC,MAAA,OAAO,MAAA;AAAA,IACT;AAEA,IAAA,IAAI,CAAA,GAAI,aAAa,CAAA,EAAG;AACtB,MAAA,MAAM,IAAI,OAAA,CAAQ,CAAC,YAAY,UAAA,CAAW,OAAA,EAAS,YAAY,CAAC,CAAA;AAAA,IAClE;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,OAAA,EAAS,KAAA;AAAA,IACT,KAAA,EAAO,CAAA,aAAA,EAAgB,UAAU,CAAA,UAAA,EAAa,SAAS,CAAA;AAAA,GACzD;AACF","file":"chunk-5GFQPHGT.cjs","sourcesContent":["import { SQLiteAuthAdapter } from \"./sqlite-adapter.js\";\nimport { EmailTransport, type EmailConfig } from \"./nodemailer-transport.js\";\nimport { PasswordPolicy } from \"./security/password-policy.js\";\nimport type { AuthUser, UserRole, AuthAdapter } from \"./types.js\";\n\nexport interface BootstrapConfig {\n authAdapter?: AuthAdapter;\n authDbPath?: string;\n adminEmail: string;\n adminPassword: string;\n adminRole?: string;\n tenantId?: string;\n emailConfig?: EmailConfig;\n sendWelcomeEmail?: boolean;\n}\n\nexport interface BootstrapResult {\n success: boolean;\n user?: AuthUser;\n error?: string;\n}\n\nexport async function bootstrapAdmin(\n config: BootstrapConfig,\n): Promise<BootstrapResult> {\n const {\n adminEmail,\n adminPassword,\n adminRole = \"super_admin\",\n tenantId,\n emailConfig,\n sendWelcomeEmail = false,\n } = config;\n\n const authAdapter =\n config.authAdapter ||\n new SQLiteAuthAdapter({\n path: config.authDbPath || \"./data/auth.db\",\n });\n\n try {\n await authAdapter.connect?.();\n } catch (error) {\n return {\n success: false,\n error: \"Failed to connect to auth storage\",\n };\n }\n\n const passwordPolicy = new PasswordPolicy();\n const passwordValidation = passwordPolicy.validate(adminPassword);\n if (!passwordValidation.valid) {\n await authAdapter.disconnect?.();\n return {\n success: false,\n error: `Invalid password: ${passwordValidation.errors.join(\", \")}`,\n };\n }\n\n const existingUser = await authAdapter.findUserByEmail(adminEmail);\n if (existingUser) {\n await authAdapter.disconnect?.();\n return {\n success: false,\n error: \"Admin user already exists\",\n };\n }\n\n try {\n const user = await authAdapter.createUser({\n email: adminEmail,\n password: adminPassword,\n role: (adminRole as UserRole) || \"admin\",\n tenantId,\n });\n\n if (sendWelcomeEmail && emailConfig) {\n const emailTransport = new EmailTransport(emailConfig);\n const templates = emailTransport.getTemplates();\n const welcomeTemplate = templates.welcome(adminEmail.split(\"@\")[0]);\n await emailTransport.send({\n to: adminEmail,\n ...welcomeTemplate,\n });\n }\n\n await authAdapter.disconnect?.();\n return {\n success: true,\n user,\n };\n } catch (error) {\n await authAdapter.disconnect?.();\n return {\n success: false,\n error:\n error instanceof Error ? error.message : \"Failed to create admin user\",\n };\n }\n}\n\nexport async function checkBootstrapRequired(\n authAdapter: AuthAdapter,\n adminEmail: string,\n): Promise<boolean> {\n const existingUser = await authAdapter.findUserByEmail(adminEmail);\n return !existingUser;\n}\n\nexport function getBootstrapFromEnv(): BootstrapConfig | null {\n const email = process.env.KYRO_ADMIN_EMAIL;\n const password = process.env.KYRO_ADMIN_PASSWORD;\n\n if (!email || !password) {\n return null;\n }\n\n return {\n authDbPath: process.env.KYRO_AUTH_DB_PATH || \"./data/auth.db\",\n adminEmail: email,\n adminPassword: password,\n adminRole: process.env.KYRO_ADMIN_ROLE || \"super_admin\",\n tenantId: process.env.KYRO_ADMIN_TENANT_ID,\n emailConfig: process.env.SMTP_HOST\n ? {\n provider: \"smtp\",\n smtp: {\n host: process.env.SMTP_HOST,\n port: parseInt(process.env.SMTP_PORT || \"587\", 10),\n secure: process.env.SMTP_SECURE === \"true\",\n auth: {\n user: process.env.SMTP_USER || \"\",\n pass: process.env.SMTP_PASS || \"\",\n },\n },\n from: process.env.SMTP_FROM || \"noreply@example.com\",\n fromName: process.env.SMTP_FROM_NAME,\n }\n : undefined,\n sendWelcomeEmail: process.env.KYRO_ADMIN_SEND_WELCOME === \"true\",\n };\n}\n\nexport async function autoBootstrap(\n authAdapter?: AuthAdapter,\n): Promise<BootstrapResult | null> {\n const config = getBootstrapFromEnv();\n if (!config) {\n return null;\n }\n\n if (authAdapter) {\n config.authAdapter = authAdapter;\n }\n\n // Check if bootstrap is actually needed before connecting\n try {\n await config.authAdapter?.connect?.();\n const existingUser = await config.authAdapter?.findUserByEmail(config.adminEmail);\n if (existingUser) {\n await config.authAdapter?.disconnect?.();\n return { success: false, error: \"Admin user already exists\" };\n }\n } catch {\n // Connection failed — let bootstrapAdmin handle the error\n }\n\n const result = await bootstrapAdmin(config);\n\n if (result.success) {\n } else {\n console.error(`Bootstrap failed: ${result.error}`);\n }\n\n return result;\n}\n\nexport async function bootstrapWithRetry(\n config: BootstrapConfig,\n maxRetries: number = 3,\n retryDelayMs: number = 2000,\n): Promise<BootstrapResult> {\n let lastError: string = \"\";\n\n for (let i = 0; i < maxRetries; i++) {\n const result = await bootstrapAdmin(config);\n\n if (result.success) {\n return result;\n }\n\n lastError = result.error || \"Unknown error\";\n\n if (lastError.includes(\"already exists\")) {\n return result;\n }\n\n if (i < maxRetries - 1) {\n await new Promise((resolve) => setTimeout(resolve, retryDelayMs));\n }\n }\n\n return {\n success: false,\n error: `Failed after ${maxRetries} retries: ${lastError}`,\n };\n}\n"]}
@@ -1,11 +1,11 @@
1
1
  import { createStorageSettingsGlobal } from './chunk-GAOXD3XT.js';
2
2
  import { createContext, createKyroServer } from './chunk-OX6GOIPH.js';
3
3
  import { buildGraphQLSchema, RelationLoader } from './chunk-5RPRLTTN.js';
4
- import { getDefaultRegistry, createHonoApp, createS3Storage, createCloudinaryStorage, createFtpStorage } from './chunk-5RFGYEQ3.js';
4
+ import { getDefaultRegistry, createHonoApp, createS3Storage, createCloudinaryStorage, createFtpStorage } from './chunk-354ISGA4.js';
5
5
  import { createWebhookService, WEBHOOK_COLLECTION, WEBHOOK_DELIVERY_COLLECTION } from './chunk-WDTTHKDS.js';
6
6
  import { API_KEY_COLLECTION, extractApiKeyFromRequest, validateApiKey, createApiKeyContext } from './chunk-3AKCVYDB.js';
7
7
  import { KyroPubSub, createWSServer } from './chunk-BYBMTIMT.js';
8
- import { DrizzleAdapter } from './chunk-V7KZQIZ6.js';
8
+ import { DrizzleAdapter } from './chunk-XHAAAEXX.js';
9
9
  import { apiKeys } from './chunk-UUDTPZX6.js';
10
10
  import { AbstractBaseAdapter, applyRLS, DEFAULT_RLS_CONFIG, canAccessDocument } from './chunk-WXVB364T.js';
11
11
  import { z } from 'zod';
@@ -1573,9 +1573,6 @@ var Kyro = class {
1573
1573
  );
1574
1574
  await this.loadPluginState();
1575
1575
  this.pubsub.autoRegisterHooks();
1576
- console.log("\u2705 Kyro CMS initialized");
1577
- console.log(` Collections: ${this.registry.getCollections().length}`);
1578
- console.log(` Globals: ${allGlobals.length}`);
1579
1576
  }
1580
1577
  // ============================================================================
1581
1578
  // API Methods
@@ -1592,7 +1589,6 @@ var Kyro = class {
1592
1589
  this.settings = { access: doc };
1593
1590
  }
1594
1591
  } catch (e) {
1595
- console.log("\u26A0\uFE0F No access-settings found, using defaults");
1596
1592
  }
1597
1593
  return this.settings || {};
1598
1594
  }
@@ -1772,7 +1768,6 @@ var Kyro = class {
1772
1768
  async startWebSocket(options) {
1773
1769
  const apiAccess = this.settings?.access?.apiAccess;
1774
1770
  if (apiAccess?.wsEnabled === false) {
1775
- console.log("\u26A0\uFE0F WebSocket is disabled in settings");
1776
1771
  return null;
1777
1772
  }
1778
1773
  const defaultVerifyToken = async (token) => {
@@ -1787,7 +1782,6 @@ var Kyro = class {
1787
1782
  requireAuth: options?.requireAuth ?? apiAccess?.requireAuth,
1788
1783
  verifyToken: options?.verifyToken || defaultVerifyToken
1789
1784
  });
1790
- console.log(`\u{1F50C} WebSocket server started on port ${options?.port || 8080}`);
1791
1785
  return this.wsServer;
1792
1786
  }
1793
1787
  // ============================================================================
@@ -1798,7 +1792,6 @@ var Kyro = class {
1798
1792
  await this.wsServer.close();
1799
1793
  }
1800
1794
  await this.db.disconnect();
1801
- console.log("\u{1F44B} Kyro CMS shut down");
1802
1795
  }
1803
1796
  };
1804
1797
  function createKyro(config) {
@@ -1953,16 +1946,12 @@ var LocalAdapter = class extends AbstractBaseAdapter {
1953
1946
  this.db.exec("PRAGMA journal_mode = WAL");
1954
1947
  this.db.exec("PRAGMA foreign_keys = ON");
1955
1948
  this.connected = true;
1956
- console.log(
1957
- `[LocalAdapter] Connected to SQLite (${this.path || "memory"})`
1958
- );
1959
1949
  }
1960
1950
  async disconnect() {
1961
1951
  if (this.db) {
1962
1952
  this.db.close();
1963
1953
  }
1964
1954
  this.connected = false;
1965
- console.log("[LocalAdapter] Disconnected");
1966
1955
  }
1967
1956
  // ========================================================================
1968
1957
  // Schema Management
@@ -2698,10 +2687,8 @@ var LocalAdapter = class extends AbstractBaseAdapter {
2698
2687
  for (const config of this.collections.values()) {
2699
2688
  this.ensureTable(config);
2700
2689
  }
2701
- console.log("[LocalAdapter] Migrations complete");
2702
2690
  }
2703
2691
  async rollback() {
2704
- console.log("[LocalAdapter] Rollback not supported for schema changes");
2705
2692
  }
2706
2693
  // ========================================================================
2707
2694
  // Transaction Support
@@ -2737,5 +2724,5 @@ function createLocalAdapter(options) {
2737
2724
  }
2738
2725
 
2739
2726
  export { ConfigValidationError, Kyro, LocalAdapter, Registry, collectionToCreateZod, collectionToUpdateZod, collectionToWhereZod, collectionToZod, createKyro, createLocalAdapter, createRegistry, fieldToZod, getRegistry, globalToZod, resetRegistry, validateCollection, validateConfig, validateFields, validateGlobal };
2740
- //# sourceMappingURL=chunk-OYCICW4B.js.map
2741
- //# sourceMappingURL=chunk-OYCICW4B.js.map
2727
+ //# sourceMappingURL=chunk-AN2L2CJZ.js.map
2728
+ //# sourceMappingURL=chunk-AN2L2CJZ.js.map