@kyro-cms/core 0.10.3 → 0.10.5

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 (301) hide show
  1. package/dist/api-handler-graphql.cjs +1 -49
  2. package/dist/api-handler-graphql.js +1 -46
  3. package/dist/api-handler-trpc.cjs +1 -38
  4. package/dist/api-handler-trpc.js +1 -36
  5. package/dist/api-handler.cjs +1 -44
  6. package/dist/api-handler.js +1 -27
  7. package/dist/bootstrap-IVQWSJXZ.js +1 -0
  8. package/dist/bootstrap-OHGQGMRV.cjs +1 -0
  9. package/dist/chunk-2BTRHVT3.cjs +20 -0
  10. package/dist/chunk-2W4FK6CJ.js +122 -0
  11. package/dist/chunk-4ORJMSJU.cjs +1 -0
  12. package/dist/chunk-5J6HXUF6.js +1 -0
  13. package/dist/chunk-65G73T7Z.cjs +2 -0
  14. package/dist/chunk-6CLRVJPP.cjs +133 -0
  15. package/dist/chunk-7N6NKCRT.js +1 -0
  16. package/dist/chunk-7WOX27LK.js +259 -0
  17. package/dist/chunk-AE6GXUT7.js +1 -0
  18. package/dist/chunk-AHSFSERC.cjs +1 -0
  19. package/dist/chunk-AJAZ7D3W.cjs +259 -0
  20. package/dist/chunk-ATLSIYRH.cjs +1 -0
  21. package/dist/chunk-AU6IWTBO.js +2 -0
  22. package/dist/chunk-CIE3XMLH.cjs +2 -0
  23. package/dist/chunk-CVVW4LXZ.cjs +1 -0
  24. package/dist/chunk-DV4LFLPL.cjs +1 -0
  25. package/dist/chunk-ELICKLFM.cjs +3 -0
  26. package/dist/chunk-EQUQJBPP.cjs +2 -0
  27. package/dist/chunk-ET6NN2V2.cjs +122 -0
  28. package/dist/chunk-F3Z67QWS.cjs +86 -0
  29. package/dist/chunk-F7SR5IDT.cjs +1 -0
  30. package/dist/chunk-FO3HLBC7.js +1 -0
  31. package/dist/chunk-G6A7OSIG.js +2 -0
  32. package/dist/chunk-GFU7AOI3.cjs +1 -0
  33. package/dist/chunk-GYQMNXXW.cjs +114 -0
  34. package/dist/chunk-HLSB2MCK.js +1 -0
  35. package/dist/chunk-HVXO3OFB.cjs +1 -0
  36. package/dist/chunk-ISWMETHJ.cjs +1 -0
  37. package/dist/chunk-K6WUOU6P.js +1 -0
  38. package/dist/chunk-KDNYHLD2.js +1 -0
  39. package/dist/chunk-L6CZYN3L.cjs +20 -0
  40. package/dist/chunk-LZ6YFYQM.js +20 -0
  41. package/dist/chunk-MIOMMB23.cjs +1 -0
  42. package/dist/chunk-MSSRVZH6.js +1 -0
  43. package/dist/chunk-NGBJKZMT.js +90 -0
  44. package/dist/chunk-NRLIGDYF.js +1 -0
  45. package/dist/chunk-NY47CFVP.cjs +1 -0
  46. package/dist/chunk-NZ35PV5R.js +2 -0
  47. package/dist/chunk-OG7CNQGU.js +1 -0
  48. package/dist/chunk-P7CESLDJ.js +1 -0
  49. package/dist/chunk-POWTSLKC.js +21 -0
  50. package/dist/chunk-PP5S2UBV.js +0 -0
  51. package/dist/chunk-PWGS2GPI.js +86 -0
  52. package/dist/chunk-Q3Q7BJVQ.cjs +1 -0
  53. package/dist/chunk-Q4CSLXCO.cjs +90 -0
  54. package/dist/chunk-QRXDCV6K.js +0 -0
  55. package/dist/chunk-R6UUTH3T.js +2 -0
  56. package/dist/chunk-RHCWCG3O.js +114 -0
  57. package/dist/chunk-SL3LZQCF.js +1 -0
  58. package/dist/chunk-TD6RULJU.cjs +21 -0
  59. package/dist/chunk-UBHFUFD4.cjs +1 -0
  60. package/dist/chunk-UBRYJP2G.js +1 -0
  61. package/dist/chunk-UDSJGML2.cjs +2 -0
  62. package/dist/chunk-UHFDH3PG.js +20 -0
  63. package/dist/chunk-UJNSOOYZ.cjs +1 -0
  64. package/dist/chunk-UVTS2IWM.js +1 -0
  65. package/dist/chunk-V65NPSR5.cjs +1 -0
  66. package/dist/chunk-VKXQUYYV.js +133 -0
  67. package/dist/chunk-WIZ6C5QZ.cjs +1 -0
  68. package/dist/chunk-Y7K26TBA.cjs +1 -0
  69. package/dist/chunk-ZAQOSRP6.js +1 -0
  70. package/dist/chunk-ZELCS7IC.js +3 -0
  71. package/dist/cli/index.cjs +35 -405
  72. package/dist/cli/index.js +35 -402
  73. package/dist/client.cjs +1 -55
  74. package/dist/client.js +1 -6
  75. package/dist/drizzle/index.cjs +1 -50
  76. package/dist/drizzle/index.d.cts +1 -2
  77. package/dist/drizzle/index.d.ts +1 -2
  78. package/dist/drizzle/index.js +1 -9
  79. package/dist/fields/index.cjs +1 -89
  80. package/dist/fields/index.js +1 -4
  81. package/dist/graphql/index.cjs +1 -31
  82. package/dist/graphql/index.d.cts +1 -1
  83. package/dist/graphql/index.d.ts +1 -1
  84. package/dist/graphql/index.js +1 -6
  85. package/dist/{index-jLs0zlft.d.ts → index-DXr33e0x.d.ts} +1 -1
  86. package/dist/{index-DHbywDs-.d.cts → index-DuuUzWBq.d.cts} +1 -1
  87. package/dist/index.cjs +29 -2464
  88. package/dist/index.d.cts +2 -2
  89. package/dist/index.d.ts +2 -2
  90. package/dist/index.js +29 -1929
  91. package/dist/integration.cjs +1 -10
  92. package/dist/integration.js +1 -4
  93. package/dist/media-L5XDD47D.js +1 -0
  94. package/dist/media-OUBQTIQP.cjs +1 -0
  95. package/dist/mongo-auth-adapter-LG5O4LIH.js +1 -0
  96. package/dist/mongo-auth-adapter-YPONSOCY.cjs +1 -0
  97. package/dist/mongodb/index.cjs +1 -29
  98. package/dist/mongodb/index.d.cts +1 -2
  99. package/dist/mongodb/index.d.ts +1 -2
  100. package/dist/mongodb/index.js +1 -8
  101. package/dist/postgres-auth-adapter-33QOIRXT.js +1 -0
  102. package/dist/postgres-auth-adapter-JKDYYULH.cjs +1 -0
  103. package/dist/redis-adapter-KECGVSVX.cjs +1 -0
  104. package/dist/redis-adapter-VAXP43GR.js +1 -0
  105. package/dist/rest/index.cjs +1 -31
  106. package/dist/rest/index.d.cts +1 -1
  107. package/dist/rest/index.d.ts +1 -1
  108. package/dist/rest/index.js +1 -18
  109. package/dist/schema-HIUSHSUI.cjs +1 -0
  110. package/dist/schema-KFYUM674.js +1 -0
  111. package/dist/sqlite-adapter-FP45QCYK.js +1 -0
  112. package/dist/sqlite-adapter-Z3IBBI4X.cjs +1 -0
  113. package/dist/templates/index.cjs +1 -207
  114. package/dist/templates/index.js +1 -6
  115. package/dist/trpc/index.cjs +1 -48
  116. package/dist/trpc/index.js +1 -7
  117. package/dist/ws/index.cjs +1 -25
  118. package/dist/ws/index.js +1 -4
  119. package/package.json +49 -12
  120. package/dist/api-handler-graphql.cjs.map +0 -1
  121. package/dist/api-handler-graphql.js.map +0 -1
  122. package/dist/api-handler-trpc.cjs.map +0 -1
  123. package/dist/api-handler-trpc.js.map +0 -1
  124. package/dist/api-handler.cjs.map +0 -1
  125. package/dist/api-handler.js.map +0 -1
  126. package/dist/bootstrap-FUAPY2OF.cjs +0 -32
  127. package/dist/bootstrap-FUAPY2OF.cjs.map +0 -1
  128. package/dist/bootstrap-OXNVM7FP.js +0 -7
  129. package/dist/bootstrap-OXNVM7FP.js.map +0 -1
  130. package/dist/chunk-2HFJUUFZ.js +0 -250
  131. package/dist/chunk-2HFJUUFZ.js.map +0 -1
  132. package/dist/chunk-354ISGA4.js +0 -6457
  133. package/dist/chunk-354ISGA4.js.map +0 -1
  134. package/dist/chunk-3AKCVYDB.js +0 -162
  135. package/dist/chunk-3AKCVYDB.js.map +0 -1
  136. package/dist/chunk-3KTWGODI.cjs +0 -178
  137. package/dist/chunk-3KTWGODI.cjs.map +0 -1
  138. package/dist/chunk-3P5AHK2U.cjs +0 -2749
  139. package/dist/chunk-3P5AHK2U.cjs.map +0 -1
  140. package/dist/chunk-3YELQL7Z.cjs +0 -4
  141. package/dist/chunk-3YELQL7Z.cjs.map +0 -1
  142. package/dist/chunk-4CV4JOE5.js +0 -24
  143. package/dist/chunk-4CV4JOE5.js.map +0 -1
  144. package/dist/chunk-4OCMVGEY.cjs +0 -173
  145. package/dist/chunk-4OCMVGEY.cjs.map +0 -1
  146. package/dist/chunk-4PWRCMTQ.cjs +0 -15
  147. package/dist/chunk-4PWRCMTQ.cjs.map +0 -1
  148. package/dist/chunk-526M5MOA.js +0 -103
  149. package/dist/chunk-526M5MOA.js.map +0 -1
  150. package/dist/chunk-53NYVYVX.js +0 -3243
  151. package/dist/chunk-53NYVYVX.js.map +0 -1
  152. package/dist/chunk-5GFQPHGT.cjs +0 -156
  153. package/dist/chunk-5GFQPHGT.cjs.map +0 -1
  154. package/dist/chunk-5RPRLTTN.js +0 -861
  155. package/dist/chunk-5RPRLTTN.js.map +0 -1
  156. package/dist/chunk-7OGPN7MP.js +0 -352
  157. package/dist/chunk-7OGPN7MP.js.map +0 -1
  158. package/dist/chunk-7OS7TX2Q.cjs +0 -495
  159. package/dist/chunk-7OS7TX2Q.cjs.map +0 -1
  160. package/dist/chunk-ADLJSJSN.cjs +0 -13
  161. package/dist/chunk-ADLJSJSN.cjs.map +0 -1
  162. package/dist/chunk-AN2L2CJZ.js +0 -2728
  163. package/dist/chunk-AN2L2CJZ.js.map +0 -1
  164. package/dist/chunk-BYBMTIMT.js +0 -419
  165. package/dist/chunk-BYBMTIMT.js.map +0 -1
  166. package/dist/chunk-CF7OL6HR.js +0 -355
  167. package/dist/chunk-CF7OL6HR.js.map +0 -1
  168. package/dist/chunk-CJX74IYK.js +0 -489
  169. package/dist/chunk-CJX74IYK.js.map +0 -1
  170. package/dist/chunk-CKVOU6MX.cjs +0 -52
  171. package/dist/chunk-CKVOU6MX.cjs.map +0 -1
  172. package/dist/chunk-CZLDE2OZ.cjs +0 -28
  173. package/dist/chunk-CZLDE2OZ.cjs.map +0 -1
  174. package/dist/chunk-DPA3KWPY.cjs +0 -205
  175. package/dist/chunk-DPA3KWPY.cjs.map +0 -1
  176. package/dist/chunk-EEJUFDMF.cjs +0 -424
  177. package/dist/chunk-EEJUFDMF.cjs.map +0 -1
  178. package/dist/chunk-FIAMXNTH.js +0 -220
  179. package/dist/chunk-FIAMXNTH.js.map +0 -1
  180. package/dist/chunk-GAOXD3XT.js +0 -175
  181. package/dist/chunk-GAOXD3XT.js.map +0 -1
  182. package/dist/chunk-GTGRLD4Y.js +0 -3
  183. package/dist/chunk-GTGRLD4Y.js.map +0 -1
  184. package/dist/chunk-GUUB5EAG.cjs +0 -223
  185. package/dist/chunk-GUUB5EAG.cjs.map +0 -1
  186. package/dist/chunk-GXFOGU7N.cjs +0 -359
  187. package/dist/chunk-GXFOGU7N.cjs.map +0 -1
  188. package/dist/chunk-GYIJ3JJM.cjs +0 -1069
  189. package/dist/chunk-GYIJ3JJM.cjs.map +0 -1
  190. package/dist/chunk-GZS4LMR7.js +0 -422
  191. package/dist/chunk-GZS4LMR7.js.map +0 -1
  192. package/dist/chunk-HY6B7B5A.js +0 -150
  193. package/dist/chunk-HY6B7B5A.js.map +0 -1
  194. package/dist/chunk-IDVRRRAK.cjs +0 -824
  195. package/dist/chunk-IDVRRRAK.cjs.map +0 -1
  196. package/dist/chunk-ISKYUUP4.cjs +0 -6486
  197. package/dist/chunk-ISKYUUP4.cjs.map +0 -1
  198. package/dist/chunk-KC2GDBLS.cjs +0 -84
  199. package/dist/chunk-KC2GDBLS.cjs.map +0 -1
  200. package/dist/chunk-L4EZKIEX.js +0 -185
  201. package/dist/chunk-L4EZKIEX.js.map +0 -1
  202. package/dist/chunk-LNTFRAHF.cjs +0 -473
  203. package/dist/chunk-LNTFRAHF.cjs.map +0 -1
  204. package/dist/chunk-MTIRYI7F.cjs +0 -4
  205. package/dist/chunk-MTIRYI7F.cjs.map +0 -1
  206. package/dist/chunk-N4GN6Q3V.cjs +0 -869
  207. package/dist/chunk-N4GN6Q3V.cjs.map +0 -1
  208. package/dist/chunk-N4H37VN4.cjs +0 -259
  209. package/dist/chunk-N4H37VN4.cjs.map +0 -1
  210. package/dist/chunk-N5QSHUA6.js +0 -1135
  211. package/dist/chunk-N5QSHUA6.js.map +0 -1
  212. package/dist/chunk-NKPKR5BW.cjs +0 -188
  213. package/dist/chunk-NKPKR5BW.cjs.map +0 -1
  214. package/dist/chunk-NQJJYRLP.cjs +0 -110
  215. package/dist/chunk-NQJJYRLP.cjs.map +0 -1
  216. package/dist/chunk-OJ2AM75W.cjs +0 -253
  217. package/dist/chunk-OJ2AM75W.cjs.map +0 -1
  218. package/dist/chunk-OX6GOIPH.js +0 -516
  219. package/dist/chunk-OX6GOIPH.js.map +0 -1
  220. package/dist/chunk-P2YW545G.js +0 -11
  221. package/dist/chunk-P2YW545G.js.map +0 -1
  222. package/dist/chunk-PHJRNPHY.cjs +0 -3291
  223. package/dist/chunk-PHJRNPHY.cjs.map +0 -1
  224. package/dist/chunk-Q72BOAPK.js +0 -817
  225. package/dist/chunk-Q72BOAPK.js.map +0 -1
  226. package/dist/chunk-QU2RFFH4.js +0 -3
  227. package/dist/chunk-QU2RFFH4.js.map +0 -1
  228. package/dist/chunk-RP7VZUEL.js +0 -49
  229. package/dist/chunk-RP7VZUEL.js.map +0 -1
  230. package/dist/chunk-SHTTJMLT.cjs +0 -361
  231. package/dist/chunk-SHTTJMLT.cjs.map +0 -1
  232. package/dist/chunk-THBQG64D.cjs +0 -425
  233. package/dist/chunk-THBQG64D.cjs.map +0 -1
  234. package/dist/chunk-TQG7G7YI.cjs +0 -526
  235. package/dist/chunk-TQG7G7YI.cjs.map +0 -1
  236. package/dist/chunk-U3VVLYXG.cjs +0 -189
  237. package/dist/chunk-U3VVLYXG.cjs.map +0 -1
  238. package/dist/chunk-UUDTPZX6.js +0 -193
  239. package/dist/chunk-UUDTPZX6.js.map +0 -1
  240. package/dist/chunk-VKREAIBA.cjs +0 -1139
  241. package/dist/chunk-VKREAIBA.cjs.map +0 -1
  242. package/dist/chunk-WDTTHKDS.js +0 -458
  243. package/dist/chunk-WDTTHKDS.js.map +0 -1
  244. package/dist/chunk-WXVB364T.js +0 -218
  245. package/dist/chunk-WXVB364T.js.map +0 -1
  246. package/dist/chunk-X4BPPD6K.js +0 -181
  247. package/dist/chunk-X4BPPD6K.js.map +0 -1
  248. package/dist/chunk-XEB7PH2E.js +0 -81
  249. package/dist/chunk-XEB7PH2E.js.map +0 -1
  250. package/dist/chunk-XHAAAEXX.js +0 -1055
  251. package/dist/chunk-XHAAAEXX.js.map +0 -1
  252. package/dist/chunk-YT7HXXVN.js +0 -13
  253. package/dist/chunk-YT7HXXVN.js.map +0 -1
  254. package/dist/cli/index.cjs.map +0 -1
  255. package/dist/cli/index.js.map +0 -1
  256. package/dist/client.cjs.map +0 -1
  257. package/dist/client.js.map +0 -1
  258. package/dist/drizzle/index.cjs.map +0 -1
  259. package/dist/drizzle/index.js.map +0 -1
  260. package/dist/fields/index.cjs.map +0 -1
  261. package/dist/fields/index.js.map +0 -1
  262. package/dist/graphql/index.cjs.map +0 -1
  263. package/dist/graphql/index.js.map +0 -1
  264. package/dist/index.cjs.map +0 -1
  265. package/dist/index.js.map +0 -1
  266. package/dist/integration.cjs.map +0 -1
  267. package/dist/integration.js.map +0 -1
  268. package/dist/media-7WDX4BDJ.js +0 -4
  269. package/dist/media-7WDX4BDJ.js.map +0 -1
  270. package/dist/media-TUSLVRQ6.cjs +0 -17
  271. package/dist/media-TUSLVRQ6.cjs.map +0 -1
  272. package/dist/mongo-auth-adapter-GT4S7SCU.cjs +0 -17
  273. package/dist/mongo-auth-adapter-GT4S7SCU.cjs.map +0 -1
  274. package/dist/mongo-auth-adapter-M7VV4LNB.js +0 -4
  275. package/dist/mongo-auth-adapter-M7VV4LNB.js.map +0 -1
  276. package/dist/mongodb/index.cjs.map +0 -1
  277. package/dist/mongodb/index.js.map +0 -1
  278. package/dist/postgres-auth-adapter-AFAPISH7.js +0 -5
  279. package/dist/postgres-auth-adapter-AFAPISH7.js.map +0 -1
  280. package/dist/postgres-auth-adapter-SFDTLONT.cjs +0 -14
  281. package/dist/postgres-auth-adapter-SFDTLONT.cjs.map +0 -1
  282. package/dist/redis-adapter-UQX4EE3B.cjs +0 -13
  283. package/dist/redis-adapter-UQX4EE3B.cjs.map +0 -1
  284. package/dist/redis-adapter-XALOGWY3.js +0 -4
  285. package/dist/redis-adapter-XALOGWY3.js.map +0 -1
  286. package/dist/rest/index.cjs.map +0 -1
  287. package/dist/rest/index.js.map +0 -1
  288. package/dist/schema-6QL3USNB.cjs +0 -67
  289. package/dist/schema-6QL3USNB.cjs.map +0 -1
  290. package/dist/schema-FNNWEAAW.js +0 -6
  291. package/dist/schema-FNNWEAAW.js.map +0 -1
  292. package/dist/sqlite-adapter-AQB5TCGV.cjs +0 -13
  293. package/dist/sqlite-adapter-AQB5TCGV.cjs.map +0 -1
  294. package/dist/sqlite-adapter-N5H6IM2X.js +0 -4
  295. package/dist/sqlite-adapter-N5H6IM2X.js.map +0 -1
  296. package/dist/templates/index.cjs.map +0 -1
  297. package/dist/templates/index.js.map +0 -1
  298. package/dist/trpc/index.cjs.map +0 -1
  299. package/dist/trpc/index.js.map +0 -1
  300. package/dist/ws/index.cjs.map +0 -1
  301. package/dist/ws/index.js.map +0 -1
@@ -1,156 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkVKREAIBA_cjs = require('./chunk-VKREAIBA.cjs');
4
- var chunkIDVRRRAK_cjs = require('./chunk-IDVRRRAK.cjs');
5
-
6
- // src/auth/bootstrap.ts
7
- async function bootstrapAdmin(config) {
8
- const {
9
- adminEmail,
10
- adminPassword,
11
- adminRole = "super_admin",
12
- tenantId,
13
- emailConfig,
14
- sendWelcomeEmail = false
15
- } = config;
16
- const authAdapter = config.authAdapter || new chunkIDVRRRAK_cjs.SQLiteAuthAdapter({
17
- path: config.authDbPath || "./data/auth.db"
18
- });
19
- try {
20
- await authAdapter.connect?.();
21
- } catch (error) {
22
- return {
23
- success: false,
24
- error: "Failed to connect to auth storage"
25
- };
26
- }
27
- const passwordPolicy = new chunkVKREAIBA_cjs.PasswordPolicy();
28
- const passwordValidation = passwordPolicy.validate(adminPassword);
29
- if (!passwordValidation.valid) {
30
- await authAdapter.disconnect?.();
31
- return {
32
- success: false,
33
- error: `Invalid password: ${passwordValidation.errors.join(", ")}`
34
- };
35
- }
36
- const existingUser = await authAdapter.findUserByEmail(adminEmail);
37
- if (existingUser) {
38
- await authAdapter.disconnect?.();
39
- return {
40
- success: false,
41
- error: "Admin user already exists"
42
- };
43
- }
44
- try {
45
- const user = await authAdapter.createUser({
46
- email: adminEmail,
47
- password: adminPassword,
48
- role: adminRole || "admin",
49
- tenantId
50
- });
51
- if (sendWelcomeEmail && emailConfig) {
52
- const emailTransport = new chunkVKREAIBA_cjs.EmailTransport(emailConfig);
53
- const templates = emailTransport.getTemplates();
54
- const welcomeTemplate = templates.welcome(adminEmail.split("@")[0]);
55
- await emailTransport.send({
56
- to: adminEmail,
57
- ...welcomeTemplate
58
- });
59
- }
60
- await authAdapter.disconnect?.();
61
- return {
62
- success: true,
63
- user
64
- };
65
- } catch (error) {
66
- await authAdapter.disconnect?.();
67
- return {
68
- success: false,
69
- error: error instanceof Error ? error.message : "Failed to create admin user"
70
- };
71
- }
72
- }
73
- async function checkBootstrapRequired(authAdapter, adminEmail) {
74
- const existingUser = await authAdapter.findUserByEmail(adminEmail);
75
- return !existingUser;
76
- }
77
- function getBootstrapFromEnv() {
78
- const email = process.env.KYRO_ADMIN_EMAIL;
79
- const password = process.env.KYRO_ADMIN_PASSWORD;
80
- if (!email || !password) {
81
- return null;
82
- }
83
- return {
84
- authDbPath: process.env.KYRO_AUTH_DB_PATH || "./data/auth.db",
85
- adminEmail: email,
86
- adminPassword: password,
87
- adminRole: process.env.KYRO_ADMIN_ROLE || "super_admin",
88
- tenantId: process.env.KYRO_ADMIN_TENANT_ID,
89
- emailConfig: process.env.SMTP_HOST ? {
90
- provider: "smtp",
91
- smtp: {
92
- host: process.env.SMTP_HOST,
93
- port: parseInt(process.env.SMTP_PORT || "587", 10),
94
- secure: process.env.SMTP_SECURE === "true",
95
- auth: {
96
- user: process.env.SMTP_USER || "",
97
- pass: process.env.SMTP_PASS || ""
98
- }
99
- },
100
- from: process.env.SMTP_FROM || "noreply@example.com",
101
- fromName: process.env.SMTP_FROM_NAME
102
- } : void 0,
103
- sendWelcomeEmail: process.env.KYRO_ADMIN_SEND_WELCOME === "true"
104
- };
105
- }
106
- async function autoBootstrap(authAdapter) {
107
- const config = getBootstrapFromEnv();
108
- if (!config) {
109
- return null;
110
- }
111
- if (authAdapter) {
112
- config.authAdapter = authAdapter;
113
- }
114
- try {
115
- await config.authAdapter?.connect?.();
116
- const existingUser = await config.authAdapter?.findUserByEmail(config.adminEmail);
117
- if (existingUser) {
118
- await config.authAdapter?.disconnect?.();
119
- return { success: false, error: "Admin user already exists" };
120
- }
121
- } catch {
122
- }
123
- const result = await bootstrapAdmin(config);
124
- if (result.success) ; else {
125
- console.error(`Bootstrap failed: ${result.error}`);
126
- }
127
- return result;
128
- }
129
- async function bootstrapWithRetry(config, maxRetries = 3, retryDelayMs = 2e3) {
130
- let lastError = "";
131
- for (let i = 0; i < maxRetries; i++) {
132
- const result = await bootstrapAdmin(config);
133
- if (result.success) {
134
- return result;
135
- }
136
- lastError = result.error || "Unknown error";
137
- if (lastError.includes("already exists")) {
138
- return result;
139
- }
140
- if (i < maxRetries - 1) {
141
- await new Promise((resolve) => setTimeout(resolve, retryDelayMs));
142
- }
143
- }
144
- return {
145
- success: false,
146
- error: `Failed after ${maxRetries} retries: ${lastError}`
147
- };
148
- }
149
-
150
- exports.autoBootstrap = autoBootstrap;
151
- exports.bootstrapAdmin = bootstrapAdmin;
152
- exports.bootstrapWithRetry = bootstrapWithRetry;
153
- exports.checkBootstrapRequired = checkBootstrapRequired;
154
- exports.getBootstrapFromEnv = getBootstrapFromEnv;
155
- //# sourceMappingURL=chunk-5GFQPHGT.cjs.map
156
- //# sourceMappingURL=chunk-5GFQPHGT.cjs.map
@@ -1 +0,0 @@
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"]}