@kyro-cms/core 0.12.44 → 0.12.45

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 (311) hide show
  1. package/dist/{WebhookService-C19xR8qE.d.ts → WebhookService-CZf_na-J.d.ts} +1 -1
  2. package/dist/{WebhookService-BBcCHBo8.d.cts → WebhookService-DgIx21X-.d.cts} +1 -1
  3. package/dist/api-handler-graphql.cjs +1 -1
  4. package/dist/api-handler-graphql.js +2 -1
  5. package/dist/api-handler-trpc.cjs +1 -1
  6. package/dist/api-handler-trpc.js +2 -1
  7. package/dist/api-handler.cjs +1 -1
  8. package/dist/api-handler.js +1 -1
  9. package/dist/{base-yXdYZxFK.d.ts → base-7vJMzr4V.d.ts} +1 -1
  10. package/dist/{base-C2iwjdJQ.d.cts → base-DDEmdRqV.d.cts} +1 -1
  11. package/dist/bcryptjs-AZA6WEN2.js +2 -0
  12. package/dist/bcryptjs-WIQSWJGK.cjs +1 -0
  13. package/dist/better-sqlite3-42Q3FG3E.js +2 -0
  14. package/dist/better-sqlite3-5IISPX34.cjs +1 -0
  15. package/dist/bootstrap-7CI3NVSY.js +1 -0
  16. package/dist/bootstrap-DOOM2CNQ.cjs +1 -0
  17. package/dist/bowser-FI5JQGKZ.js +11 -0
  18. package/dist/bowser-VX6B6ZSE.cjs +10 -0
  19. package/dist/chokidar-24HVS6XD.cjs +5 -0
  20. package/dist/chokidar-43DT7CVN.js +6 -0
  21. package/dist/chunk-26Q7JXM4.cjs +3 -0
  22. package/dist/chunk-2BUODBE2.js +2 -0
  23. package/dist/chunk-2WFTETFB.js +2 -0
  24. package/dist/chunk-35PGCW3S.cjs +1 -0
  25. package/dist/chunk-3VXEK5ZW.cjs +1 -0
  26. package/dist/chunk-45TJAB5X.js +301 -0
  27. package/dist/chunk-5DWYVUQR.cjs +1 -0
  28. package/dist/chunk-5LPNEYK5.cjs +1 -0
  29. package/dist/chunk-66BJXVFJ.js +2 -0
  30. package/dist/chunk-6KRR7YHA.js +2 -0
  31. package/dist/chunk-6KUL2BSA.cjs +133 -0
  32. package/dist/chunk-6MSS5X77.js +2 -0
  33. package/dist/chunk-6QWLXJ7L.js +2 -0
  34. package/dist/chunk-6V3AP7HR.cjs +269 -0
  35. package/dist/chunk-73D2PNHD.cjs +7 -0
  36. package/dist/chunk-7ACHOBWY.cjs +13 -0
  37. package/dist/chunk-7AQSH3KR.js +2 -0
  38. package/dist/chunk-7GGZA5YU.cjs +2 -0
  39. package/dist/chunk-7I6URA6F.js +4 -0
  40. package/dist/chunk-7JWQ2PZP.cjs +1 -0
  41. package/dist/chunk-7SSFHJTR.js +57 -0
  42. package/dist/chunk-7T35572E.js +75 -0
  43. package/dist/chunk-7V67ONUD.js +4 -0
  44. package/dist/chunk-7WMMKGEO.cjs +1 -0
  45. package/dist/chunk-A73AVVFR.js +11 -0
  46. package/dist/chunk-AK754S3T.cjs +2 -0
  47. package/dist/chunk-AMGJ5AFH.cjs +1 -0
  48. package/dist/chunk-ATBH763U.js +2 -0
  49. package/dist/chunk-B3GDQ7UI.cjs +114 -0
  50. package/dist/chunk-BAVN7VDR.cjs +1 -0
  51. package/dist/chunk-BCEE4NBZ.cjs +2 -0
  52. package/dist/{chunk-J4252I5B.cjs → chunk-BHR7OAU4.cjs} +4 -4
  53. package/dist/chunk-BLH2MRK4.js +2 -0
  54. package/dist/chunk-BPMA2ECA.js +10 -0
  55. package/dist/chunk-BUNLC3II.cjs +1 -0
  56. package/dist/chunk-C2PXMVR5.js +2 -0
  57. package/dist/chunk-CGPAS4U5.js +4 -0
  58. package/dist/chunk-DS5DE5BU.js +2 -0
  59. package/dist/chunk-DUO523BH.cjs +1 -0
  60. package/dist/chunk-DVWYO3KK.cjs +1 -0
  61. package/dist/chunk-E27KEZPT.js +2 -0
  62. package/dist/chunk-EHWUALGH.cjs +1 -0
  63. package/dist/chunk-EN65ZEK2.cjs +2 -0
  64. package/dist/chunk-EOOZDOL7.js +3 -0
  65. package/dist/chunk-EZIDQBXI.cjs +1 -0
  66. package/dist/chunk-F4ITQ6XQ.cjs +3 -0
  67. package/dist/chunk-FLM37UVD.js +2 -0
  68. package/dist/chunk-GIS6X43A.cjs +3 -0
  69. package/dist/chunk-GNEVCEJU.cjs +3 -0
  70. package/dist/chunk-GNOSG3PK.cjs +1 -0
  71. package/dist/chunk-HLAEJB5R.js +384 -0
  72. package/dist/chunk-HPYH7GTS.cjs +1 -0
  73. package/dist/chunk-HT44I66C.js +24 -0
  74. package/dist/chunk-HTYVI2HK.cjs +9 -0
  75. package/dist/chunk-ICVQWR2A.js +2 -0
  76. package/dist/chunk-IP6JUEH3.js +3 -0
  77. package/dist/chunk-IPXOY4RI.js +2 -0
  78. package/dist/chunk-J6U5LWZ7.js +11 -0
  79. package/dist/{chunk-UHFDH3PG.js → chunk-JT36FTHY.cjs} +4 -4
  80. package/dist/chunk-JUJZOG6P.js +2 -0
  81. package/dist/{chunk-2BTRHVT3.cjs → chunk-K7YNEKVE.js} +5 -4
  82. package/dist/chunk-KCHPADCH.cjs +7 -0
  83. package/dist/chunk-KH7LM52S.js +3 -0
  84. package/dist/chunk-LEBM6ZSZ.cjs +10 -0
  85. package/dist/chunk-LQ3YZTPU.cjs +15 -0
  86. package/dist/chunk-LY7N3UHH.cjs +23 -0
  87. package/dist/chunk-M6ESQ5TE.cjs +56 -0
  88. package/dist/chunk-MCZ3YZ2L.js +2 -0
  89. package/dist/chunk-MP5VC5ER.cjs +1 -0
  90. package/dist/chunk-MVX2PYJJ.cjs +1 -0
  91. package/dist/chunk-MY42EWZP.js +2 -0
  92. package/dist/chunk-MZOWPV4D.js +20 -0
  93. package/dist/chunk-NGNJSUGL.cjs +1 -0
  94. package/dist/chunk-NWCREF47.js +3 -0
  95. package/dist/chunk-OMWQVPV7.js +14 -0
  96. package/dist/chunk-ORG67NXX.js +3 -0
  97. package/dist/chunk-OSAVAYJZ.js +16 -0
  98. package/dist/chunk-P7XYIKL6.cjs +300 -0
  99. package/dist/chunk-PBOZJOKN.js +2 -0
  100. package/dist/chunk-PITMDQYN.cjs +18 -0
  101. package/dist/chunk-PL5AIE6F.js +2 -0
  102. package/dist/chunk-QC4YXUBT.cjs +383 -0
  103. package/dist/chunk-QDHP5E4P.cjs +2 -0
  104. package/dist/chunk-QYI3GOHF.cjs +1 -0
  105. package/dist/chunk-R3NEPC4I.js +3 -0
  106. package/dist/chunk-R4LXRAMX.js +2 -0
  107. package/dist/chunk-S5HTTLN7.cjs +2 -0
  108. package/dist/chunk-STX5V7HG.cjs +20 -0
  109. package/dist/chunk-SVYUTQVE.js +115 -0
  110. package/dist/chunk-SYEP5QLG.js +19 -0
  111. package/dist/chunk-TR3ZS3T3.js +3 -0
  112. package/dist/chunk-UB5TJHQR.js +2 -0
  113. package/dist/chunk-UD6ZPO7T.js +2 -0
  114. package/dist/chunk-UK43ADRO.js +270 -0
  115. package/dist/chunk-UNYXWPLZ.cjs +2 -0
  116. package/dist/chunk-VBPAAQEF.js +2 -0
  117. package/dist/chunk-VIUU4D5I.js +2 -0
  118. package/dist/chunk-VJ2WMKPK.js +21 -0
  119. package/dist/chunk-VOQUO2EZ.cjs +74 -0
  120. package/dist/chunk-VQ53TFYA.cjs +1 -0
  121. package/dist/chunk-VRZC4TTF.cjs +1 -0
  122. package/dist/chunk-W46LZ4MY.js +2 -0
  123. package/dist/chunk-WCFHS7EZ.cjs +1 -0
  124. package/dist/chunk-WGESLAWV.js +8 -0
  125. package/dist/chunk-WSP7PSXC.js +8 -0
  126. package/dist/chunk-X54XZACS.cjs +10 -0
  127. package/dist/{chunk-Q2UYCYKV.js → chunk-XBH4YMC7.js} +5 -4
  128. package/dist/chunk-XDE7CFV6.cjs +19 -0
  129. package/dist/chunk-XOACKBG7.js +4 -0
  130. package/dist/chunk-XPPVX4GQ.cjs +1 -0
  131. package/dist/chunk-ZJE3VAAW.js +134 -0
  132. package/dist/chunk-ZO3YB5DK.cjs +1 -0
  133. package/dist/chunk-ZOVH6QT5.cjs +1 -0
  134. package/dist/chunk-ZYDOF65Q.cjs +1 -0
  135. package/dist/cli/index.cjs +197 -78
  136. package/dist/cli/index.js +198 -78
  137. package/dist/client.cjs +1 -1
  138. package/dist/client.d.cts +1 -1
  139. package/dist/client.d.ts +1 -1
  140. package/dist/client.js +2 -1
  141. package/dist/d1-5ZQJOFDX.cjs +1 -0
  142. package/dist/d1-VPH75GI2.js +2 -0
  143. package/dist/dist-es-3SSNUZST.cjs +1 -0
  144. package/dist/dist-es-6SVFVYN3.js +1 -0
  145. package/dist/dist-es-6TQTDPE7.js +2 -0
  146. package/dist/dist-es-A5OF2STN.cjs +2 -0
  147. package/dist/dist-es-BOW5V247.cjs +6 -0
  148. package/dist/dist-es-CRIMATLL.cjs +2 -0
  149. package/dist/dist-es-DL3VLVP6.cjs +1 -0
  150. package/dist/dist-es-EMUQ6ZNZ.js +3 -0
  151. package/dist/dist-es-MNIQZC4U.js +2 -0
  152. package/dist/dist-es-P25IKLBI.cjs +1 -0
  153. package/dist/dist-es-SJ76GYCI.js +2 -0
  154. package/dist/dist-es-SRPWSAF4.cjs +1 -0
  155. package/dist/dist-es-T2H2W5BX.cjs +3 -0
  156. package/dist/dist-es-TX4DBXEW.js +3 -0
  157. package/dist/dist-es-U4ZB3ZDA.js +7 -0
  158. package/dist/dist-es-XZBHIIKY.js +4 -0
  159. package/dist/drizzle/index.cjs +1 -1
  160. package/dist/drizzle/index.d.cts +2 -2
  161. package/dist/drizzle/index.d.ts +2 -2
  162. package/dist/drizzle/index.js +1 -1
  163. package/dist/drizzle-orm-47ELDEM6.cjs +1 -0
  164. package/dist/drizzle-orm-7YTX5NTT.js +1 -0
  165. package/dist/event-streams-25YJ2Z6R.js +1 -0
  166. package/dist/event-streams-JBMWCI2O.cjs +1 -0
  167. package/dist/fields/index.cjs +1 -1
  168. package/dist/fields/index.js +1 -1
  169. package/dist/fs-DGKZLRM6.cjs +1 -0
  170. package/dist/fs-YZJ5FM6J.js +2 -0
  171. package/dist/graphql/index.cjs +1 -1
  172. package/dist/graphql/index.d.cts +2 -2
  173. package/dist/graphql/index.d.ts +2 -2
  174. package/dist/graphql/index.js +1 -1
  175. package/dist/{index-DTz6u7w9.d.cts → index-BJ1rwHxk.d.cts} +1 -1
  176. package/dist/{index-BeQtbl3z.d.ts → index-BTjlptCL.d.ts} +1 -1
  177. package/dist/index.cjs +28 -46
  178. package/dist/index.d.cts +23 -9
  179. package/dist/index.d.ts +23 -9
  180. package/dist/index.js +29 -46
  181. package/dist/integration.cjs +1 -1
  182. package/dist/integration.js +1 -1
  183. package/dist/jsonwebtoken-DFB6ZBZA.cjs +8 -0
  184. package/dist/jsonwebtoken-S7BG2YWK.js +9 -0
  185. package/dist/lib-5QYYN6ML.cjs +12 -0
  186. package/dist/lib-IYW32OER.js +13 -0
  187. package/dist/loadSso-JY4WDQPS.cjs +2 -0
  188. package/dist/loadSso-YTG2GQGW.js +3 -0
  189. package/dist/local-VDCSEMC2.js +1 -0
  190. package/dist/local-YCWBUF3R.cjs +1 -0
  191. package/dist/media-3Z6YW5J4.cjs +1 -0
  192. package/dist/media-HK2IZMUZ.js +1 -0
  193. package/dist/mongo-auth-adapter-7K64Y2QM.cjs +1 -0
  194. package/dist/mongo-auth-adapter-BUKINEZL.js +1 -0
  195. package/dist/mongodb/index.cjs +1 -1
  196. package/dist/mongodb/index.d.cts +2 -2
  197. package/dist/mongodb/index.d.ts +2 -2
  198. package/dist/mongodb/index.js +1 -1
  199. package/dist/nodemailer-AXROO37D.js +54 -0
  200. package/dist/nodemailer-IDML4L6W.cjs +53 -0
  201. package/dist/postgres-auth-adapter-2M4RNEY3.cjs +1 -0
  202. package/dist/postgres-auth-adapter-MKSHIJDL.js +1 -0
  203. package/dist/postgres-js-3Y54EXVQ.cjs +1 -0
  204. package/dist/postgres-js-INQPBHJP.js +1 -0
  205. package/dist/redis-adapter-EGMUN65D.cjs +1 -0
  206. package/dist/redis-adapter-SXOXLHNH.js +1 -0
  207. package/dist/rest/index.cjs +1 -1
  208. package/dist/rest/index.d.cts +5 -5
  209. package/dist/rest/index.d.ts +5 -5
  210. package/dist/rest/index.js +1 -1
  211. package/dist/schema-RT6WSUYC.cjs +1 -0
  212. package/dist/schema-XC5ISGNR.js +2 -0
  213. package/dist/signin-KZBIAHGS.js +3 -0
  214. package/dist/signin-VFBLX7EL.cjs +2 -0
  215. package/dist/sqlite-adapter-DV7ZX2EJ.js +1 -0
  216. package/dist/sqlite-adapter-ZTABLT2X.cjs +1 -0
  217. package/dist/src-6LAUXXDM.cjs +1 -0
  218. package/dist/src-GZRZ4VAO.js +1 -0
  219. package/dist/sso-oidc-54BIRYR6.cjs +2 -0
  220. package/dist/sso-oidc-SX5OIQGG.js +3 -0
  221. package/dist/sts-HVGDJYIF.js +3 -0
  222. package/dist/sts-YLXXIB3X.cjs +2 -0
  223. package/dist/templates/index.cjs +1 -1
  224. package/dist/templates/index.d.cts +1 -1
  225. package/dist/templates/index.d.ts +1 -1
  226. package/dist/templates/index.js +1 -1
  227. package/dist/trpc/index.cjs +1 -1
  228. package/dist/trpc/index.d.cts +7 -7
  229. package/dist/trpc/index.d.ts +7 -7
  230. package/dist/trpc/index.js +1 -1
  231. package/dist/{types-CaXXmV9h.d.ts → types-CYGXsNcJ.d.ts} +5 -5
  232. package/dist/{types-BjivdGbU.d.cts → types-DOKMyC3y.d.cts} +5 -5
  233. package/dist/ws/index.cjs +1 -1
  234. package/dist/ws/index.js +1 -1
  235. package/package.json +2 -2
  236. package/dist/bootstrap-ROSTPMVL.js +0 -1
  237. package/dist/bootstrap-WW5NJ6EB.cjs +0 -1
  238. package/dist/chunk-3CVLI5C5.cjs +0 -3
  239. package/dist/chunk-3Q2WUG63.cjs +0 -2
  240. package/dist/chunk-3RSMK4DA.cjs +0 -2
  241. package/dist/chunk-4IGWJMBY.cjs +0 -2
  242. package/dist/chunk-4ORJMSJU.cjs +0 -1
  243. package/dist/chunk-4RMFCTWH.js +0 -1
  244. package/dist/chunk-5B6X2GBJ.js +0 -2
  245. package/dist/chunk-5J6HXUF6.js +0 -1
  246. package/dist/chunk-5KOQYQEE.js +0 -1
  247. package/dist/chunk-5SEHX7ON.js +0 -1
  248. package/dist/chunk-6ROHVUXF.js +0 -1
  249. package/dist/chunk-6SPPR5JZ.js +0 -3
  250. package/dist/chunk-7IVN6TTY.js +0 -133
  251. package/dist/chunk-AHSFSERC.cjs +0 -1
  252. package/dist/chunk-B5XWYVWK.js +0 -1
  253. package/dist/chunk-BGX27ZRG.cjs +0 -300
  254. package/dist/chunk-C2W5PSHC.js +0 -300
  255. package/dist/chunk-CCUQZ66T.cjs +0 -133
  256. package/dist/chunk-D5P2IPGX.cjs +0 -3
  257. package/dist/chunk-EPMGPNBE.js +0 -1
  258. package/dist/chunk-FHJJKFAU.cjs +0 -1
  259. package/dist/chunk-FVZ5RFLO.js +0 -2
  260. package/dist/chunk-FZ6Q2EBJ.cjs +0 -20
  261. package/dist/chunk-G3J2EU5D.cjs +0 -1
  262. package/dist/chunk-G7SSHELM.cjs +0 -1
  263. package/dist/chunk-GKYEJ2UF.js +0 -1
  264. package/dist/chunk-GO34AOBZ.cjs +0 -1
  265. package/dist/chunk-GYQMNXXW.cjs +0 -114
  266. package/dist/chunk-HLSB2MCK.js +0 -1
  267. package/dist/chunk-HQP2Y7QQ.js +0 -251
  268. package/dist/chunk-HS2KNFAB.cjs +0 -2
  269. package/dist/chunk-HVXO3OFB.cjs +0 -1
  270. package/dist/chunk-IETGL7WJ.js +0 -1
  271. package/dist/chunk-IFJ73O3A.cjs +0 -1
  272. package/dist/chunk-ILEZ3NYX.cjs +0 -2
  273. package/dist/chunk-INB4LNA6.js +0 -90
  274. package/dist/chunk-K6WUOU6P.js +0 -1
  275. package/dist/chunk-KD7LUCFY.cjs +0 -1
  276. package/dist/chunk-KDNYHLD2.js +0 -1
  277. package/dist/chunk-LHW4R367.js +0 -1
  278. package/dist/chunk-MIOMMB23.cjs +0 -1
  279. package/dist/chunk-N5VNHUJS.cjs +0 -4
  280. package/dist/chunk-NRLIGDYF.js +0 -1
  281. package/dist/chunk-NY47CFVP.cjs +0 -1
  282. package/dist/chunk-NZJAGASC.cjs +0 -251
  283. package/dist/chunk-OG7CNQGU.js +0 -1
  284. package/dist/chunk-PP5S2UBV.js +0 -0
  285. package/dist/chunk-PP7W5UKL.js +0 -2
  286. package/dist/chunk-Q3Q7BJVQ.cjs +0 -1
  287. package/dist/chunk-QCA3AP3M.cjs +0 -1
  288. package/dist/chunk-QOCHBPMK.js +0 -2
  289. package/dist/chunk-QYFU5Y7S.js +0 -3
  290. package/dist/chunk-RHCWCG3O.js +0 -114
  291. package/dist/chunk-SK2Q4PRV.cjs +0 -90
  292. package/dist/chunk-TFBHE5FF.cjs +0 -1
  293. package/dist/chunk-UBRYJP2G.js +0 -1
  294. package/dist/chunk-V65NPSR5.cjs +0 -1
  295. package/dist/chunk-VGQ4VUG6.js +0 -2
  296. package/dist/chunk-W7C6SJXZ.js +0 -20
  297. package/dist/chunk-WIZ6C5QZ.cjs +0 -1
  298. package/dist/chunk-ZIWJJRWQ.js +0 -4
  299. package/dist/chunk-ZUVP4UK7.cjs +0 -1
  300. package/dist/media-L5XDD47D.js +0 -1
  301. package/dist/media-OUBQTIQP.cjs +0 -1
  302. package/dist/mongo-auth-adapter-5TJO5J5U.js +0 -1
  303. package/dist/mongo-auth-adapter-JVE5M3S4.cjs +0 -1
  304. package/dist/postgres-auth-adapter-33QOIRXT.js +0 -1
  305. package/dist/postgres-auth-adapter-JKDYYULH.cjs +0 -1
  306. package/dist/redis-adapter-NN3H4GRX.js +0 -1
  307. package/dist/redis-adapter-OUKQGYCH.cjs +0 -1
  308. package/dist/schema-HIUSHSUI.cjs +0 -1
  309. package/dist/schema-KFYUM674.js +0 -1
  310. package/dist/sqlite-adapter-GTTVSXRV.cjs +0 -1
  311. package/dist/sqlite-adapter-UPANATIW.js +0 -1
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkVQ53TFYA_cjs=require('./chunk-VQ53TFYA.cjs'),chunkF4ITQ6XQ_cjs=require('./chunk-F4ITQ6XQ.cjs'),chunkZOVH6QT5_cjs=require('./chunk-ZOVH6QT5.cjs'),chunkBUNLC3II_cjs=require('./chunk-BUNLC3II.cjs'),crypto=require('crypto');chunkBUNLC3II_cjs.h();chunkBUNLC3II_cjs.h();var w=class extends chunkVQ53TFYA_cjs.a{dialect="mongodb";client;db;database;connectionString;constructor(o){if(super(),o.connectionString){this.connectionString=o.connectionString;try{let e=new URL(o.connectionString);this.database=e.pathname.replace(/^\//,"")||"kyro_cms";}catch{this.database="kyro_cms";}}else this.client=o.client,this.database=o.database;}async connect(){if(this.connectionString&&!this.client){let o;try{o=(await import('./lib-5QYYN6ML.cjs')).MongoClient;}catch{chunkF4ITQ6XQ_cjs.a(["mongodb"]),o=(await import('./lib-5QYYN6ML.cjs')).MongoClient;}this.client=new o(this.connectionString),await this.client.connect();}this.db=this.client.db(this.database),this.connected=true;}async disconnect(){this.client&&(await this.client.close(),this.connected=false);}getMongoCollection(o){if(!this.db)throw new Error("MongoDB not connected");return this.db.collection(o)}async find(o){let{collection:e,where:n={},sort:s,limit:t=10,page:i=1,tenantId:r,select:a,draft:d}=o,l=this.getCollectionConfig(e),f=this.getMongoCollection(e),g={...n};this.tenantContext&&l.tenantScoped&&(g=chunkVQ53TFYA_cjs.c({where:g},e,this.tenantContext,chunkVQ53TFYA_cjs.b).where||{});let u=this.buildFilter(g,l.tenantScoped?r:void 0),c=l.fields.find(p=>p.name==="status"),h=c?.type==="select"&&Array.isArray(c.options)&&c.options.some(p=>p.value==="published");!d&&h&&(u.status="published");let y=this.parseSort(s),O={[y.field]:y.direction==="asc"?1:-1},$=(i-1)*t,[x,M]=await Promise.all([f.find(u).sort(O).skip($).limit(t).project(this.buildProjection(a)).toArray(),f.countDocuments(u)]),C=x.map(p=>this.processResult(p,l));return this.tenantContext&&!this.tenantContext.isSuperAdmin&&(C=C.filter(p=>chunkVQ53TFYA_cjs.d(p,e,this.tenantContext,chunkVQ53TFYA_cjs.b))),d&&(C=await Promise.all(C.map(async p=>{let m=await this.getMongoCollection(`${e}_versions`).findOne({document_id:p.id},{sort:{createdAt:-1}});if(m){let P=typeof m.data=="string"?JSON.parse(m.data):m.data&&typeof m.data=="object"?m.data:{};return {...p,...P,status:p.status}}return p}))),{docs:C,...this.calculatePagination(i,t,M)}}async findByID(o){let{collection:e,id:n,tenantId:s,draft:t}=o,i=this.getCollectionConfig(e),r=this.getMongoCollection(e);if(this.tenantContext&&i.tenantScoped){let u={_id:n,tenantId:this.tenantContext.tenantId};if(!chunkVQ53TFYA_cjs.d(u,e,this.tenantContext,chunkVQ53TFYA_cjs.b))return null}let a={_id:n};s&&i.tenantScoped&&(a.tenantId=s);let d=i.fields.find(u=>u.name==="status"),l=d?.type==="select"&&Array.isArray(d.options)&&d.options.some(u=>u.value==="published");!t&&l&&(a.status="published");let f=await r.findOne(a);if(!f)return null;let g=this.processResult(f,i);if(t){let c=await this.getMongoCollection(`${e}_versions`).findOne({document_id:g.id},{sort:{createdAt:-1}});if(c){let h=typeof c.data=="string"?JSON.parse(c.data):c.data&&typeof c.data=="object"?c.data:{};g={...g,...h,status:g.status};}}return g}async create(o){let{collection:e,data:n,tenantId:s}=o,t=this.getCollectionConfig(e),i=this.getMongoCollection(e),r=this.prepareData(n,t),a=r.id||this.generateId();delete r.id;let d={...r,_id:a};return s&&t.tenantScoped&&(d.tenantId=s),await i.insertOne(d),this.processResult(d,t)}async update(o){let{collection:e,id:n,data:s,tenantId:t}=o,i=this.getCollectionConfig(e),r=this.getMongoCollection(e),a={_id:n};t&&i.tenantScoped&&(a.tenantId=t);let d=this.prepareData(s,i),l=await r.findOneAndUpdate(a,{$set:d},{returnDocument:"after"});if(!l)throw new Error(`Document not found: ${e}/${n}`);return this.processResult(l,i)}async delete(o){let{collection:e,id:n,tenantId:s}=o,t=this.getCollectionConfig(e),i=this.getMongoCollection(e),r={_id:n};s&&t.tenantScoped&&(r.tenantId=s);let a=await i.findOneAndDelete(r);if(!a)throw new Error(`Document not found: ${e}/${n}`);return this.processResult(a,t)}async count(o){let{collection:e,where:n={},tenantId:s}=o,t=this.getCollectionConfig(e),i=this.getMongoCollection(e),r=this.buildFilter(n,t.tenantScoped?s:void 0);return i.countDocuments(r)}async findOne(o){let{collection:e,where:n={},tenantId:s,draft:t}=o,i=this.getCollectionConfig(e),r=this.getMongoCollection(e),a=this.buildFilter(n,i.tenantScoped?s:void 0),d=i.fields.find(u=>u.name==="status"),l=d?.type==="select"&&Array.isArray(d.options)&&d.options.some(u=>u.value==="published");!t&&l&&(a.status="published");let f=await r.findOne(a);if(!f)return null;let g=this.processResult(f,i);if(t){let c=await this.getMongoCollection(`${e}_versions`).findOne({document_id:g.id},{sort:{createdAt:-1}});if(c){let h=typeof c.data=="string"?JSON.parse(c.data):c.data&&typeof c.data=="object"?c.data:{};g={...g,...h,status:g.status};}}return g}async findVersions(o){let{collection:e,documentId:n,sort:s,limit:t=10,page:i=1,tenantId:r}=o,a=this.getCollectionConfig(e),d=this.getMongoCollection(`${e}_versions`),l={document_id:n,autosave:{$ne:true}};r&&a.tenantScoped&&(l.tenant_id=r);let f=(i-1)*t,g=this.parseSort(s),u={[g.field]:g.direction==="asc"?1:-1},[c,h]=await Promise.all([d.find(l).sort(u).skip(f).limit(t).toArray(),d.countDocuments(l)]);return {docs:c.map(y=>this.processResult(y,{})),...this.calculatePagination(i,t,h)}}async findVersionByID(o){let{collection:e,versionId:n,tenantId:s}=o,t=this.getCollectionConfig(e),i=this.getMongoCollection(`${e}_versions`),r={_id:n};s&&t.tenantScoped&&(r.tenant_id=s);let a=await i.findOne(r);return a?this.processResult(a,{}):null}async createVersion(o){let{collection:e,documentId:n,data:s,status:t,createdBy:i,changeDescription:r,tenantId:a,autosave:d}=o,l=this.getCollectionConfig(e),f=this.getMongoCollection(`${e}_versions`);if(d){let c={document_id:n,collection_slug:e,autosave:true};a&&l.tenantScoped&&(c.tenant_id=a);let h=await f.findOne(c);if(h){let y=new Date().toISOString();return await f.updateOne({_id:h._id},{$set:{data:s,status:t,updatedAt:y}}),this.processResult({...h,data:s,status:t,updatedAt:y},{})}}let g=new Date().toISOString(),u={_id:this.generateId(),document_id:n,collection_slug:e,data:s,status:t,autosave:d===true,created_by:i,change_description:r,createdAt:g,updatedAt:g};if(a&&l.tenantScoped&&(u.tenant_id=a),await f.insertOne(u),!d){let c=this.getCollectionConfig(e);c.versions?.maxPerDoc&&await this.deleteVersions({collection:e,documentId:n,keepLatest:c.versions.maxPerDoc,tenantId:a});}return this.processResult(u,{})}async updateLatestVersion(o){return this.createVersion({...o,autosave:true})}async deleteVersions(o){let{collection:e,documentId:n,keepLatest:s,tenantId:t}=o,i=this.getCollectionConfig(e),r=this.getMongoCollection(`${e}_versions`);if(s){let a={document_id:n,autosave:{$ne:true}};t&&i.tenantScoped&&(a.tenant_id=t);let l=(await r.find(a).sort({createdAt:-1}).limit(s).project({_id:1}).toArray()).map(f=>f._id);l.length>0&&await r.deleteMany({document_id:n,autosave:{$ne:true},_id:{$nin:l},...t&&i.tenantScoped?{tenant_id:t}:{}});}else {let a={document_id:n};t&&i.tenantScoped&&(a.tenant_id=t),await r.deleteMany(a);}}async migrate(){for(let o of this.collections.values()){let e=this.getMongoCollection(o.slug);await e.createIndex({_id:1}),o.tenantScoped&&await e.createIndex({tenantId:1}),o.timestamps&&await e.createIndex({createdAt:-1});for(let n of o.fields)n.unique&&n.name&&await e.createIndex({[n.name]:1},{unique:true}),n.indexed&&n.name&&await e.createIndex({[n.name]:1});}}getCollectionConfig(o){if(o.startsWith("_globals_")){let n=o.replace("_globals_",""),s=this.globals.get(n);if(!s)throw new Error(`Global "${n}" not found`);return s}let e=this.collections.get(o);if(!e)throw new Error(`Collection "${o}" not found`);return e}buildFilter(o={},e){let n={};e&&(n.tenantId=e);for(let[s,t]of Object.entries(o))if(s==="AND"&&Array.isArray(t)){let i=t.map(r=>this.buildFilter(r));Object.assign(n,...i);}else if(s==="OR"&&Array.isArray(t))n.$or=t.map(i=>this.buildFilter(i));else if(typeof t=="object"&&t!==null&&!Array.isArray(t)){let i={};if(t.equals!==void 0){n[s==="id"?"_id":s]=t.equals;continue}t.not_equals!==void 0&&(i.$ne=t.not_equals),t.in!==void 0&&(i.$in=t.in),t.not_in!==void 0&&(i.$nin=t.not_in),t.greater_than!==void 0&&(i.$gt=t.greater_than),t.greater_than_equal!==void 0&&(i.$gte=t.greater_than_equal),t.less_than!==void 0&&(i.$lt=t.less_than),t.less_than_equal!==void 0&&(i.$lte=t.less_than_equal),t.like!==void 0&&(i.$regex=new RegExp(t.like.replace(/%/g,".*"),"i")),t.not_like!==void 0&&(i.$not=new RegExp(t.not_like.replace(/%/g,".*"),"i")),t.contains!==void 0&&(i.$regex=new RegExp(`.*${t.contains}.*`,"i")),t.exists!==void 0&&(i.$exists=t.exists),Object.keys(i).length>0&&(n[s==="id"?"_id":s]=i);}else n[s==="id"?"_id":s]=t;return n}buildProjection(o){if(!o||o.length===0)return;let e={_id:1};for(let n of o)e[n]=1;return e}processResult(o,e){if(!o)return null;let n={...o};for(let s of Object.keys(n))/^\d+$/.test(s)&&delete n[s];return o._id&&(n.id=o._id,delete n._id),delete n.__v,n.createdAt&&(n.createdAt=new Date(n.createdAt).toISOString()),n.updatedAt&&(n.updatedAt=new Date(n.updatedAt).toISOString()),chunkZOVH6QT5_cjs.a(n)}generateId(){let o=Date.now().toString(16).padStart(12,"0"),e=crypto.randomBytes(6).toString("hex");return o+e}};function V(v){return new w(v)}
2
+ exports.a=w;exports.b=V;
@@ -0,0 +1 @@
1
+ 'use strict';var chunkP7XYIKL6_cjs=require('./chunk-P7XYIKL6.cjs'),chunkBHR7OAU4_cjs=require('./chunk-BHR7OAU4.cjs'),chunkBUNLC3II_cjs=require('./chunk-BUNLC3II.cjs');chunkBUNLC3II_cjs.h();async function g(t){let{adminEmail:e,adminPassword:r,adminRole:a="super_admin",tenantId:n,emailConfig:o,sendWelcomeEmail:c=false}=t,s=t.authAdapter||new chunkBHR7OAU4_cjs.a({path:t.authDbPath||"./data/auth.db"});try{await s.connect?.();}catch{return {success:false,error:"Failed to connect to auth storage"}}let u=new chunkP7XYIKL6_cjs.l().validate(r);if(!u.valid)return await s.disconnect?.(),{success:false,error:`Invalid password: ${u.errors.join(", ")}`};if(await s.findUserByEmail(e))return await s.disconnect?.(),{success:false,error:"Admin user already exists"};try{let i=await s.createUser({name:"Super Admin",email:e,password:r,role:a||"admin",tenantId:n});if(await s.updateUser?.(i.id,{emailVerified:!0}),c&&o){let l=new chunkP7XYIKL6_cjs.k(o),A=l.getTemplates().welcome(e.split("@")[0]);await l.send({to:e,...A});}return await s.disconnect?.(),{success:!0,user:i}}catch(i){return await s.disconnect?.(),{success:false,error:i instanceof Error?i.message:"Failed to create admin user"}}}async function U(t,e){return !await t.findUserByEmail(e)}function w(t){let e=t.KYRO_ADMIN_EMAIL,r=t.KYRO_ADMIN_PASSWORD;return !e||!r?null:{authDbPath:t.KYRO_AUTH_DB_PATH||"./data/auth.db",adminEmail:e,adminPassword:r,adminRole:t.KYRO_ADMIN_ROLE||"super_admin",tenantId:t.KYRO_ADMIN_TENANT_ID,emailConfig:t.SMTP_HOST?{provider:"smtp",smtp:{host:t.SMTP_HOST,port:parseInt(t.SMTP_PORT||"587",10),secure:t.SMTP_SECURE==="true",auth:{user:t.SMTP_USER||"",pass:t.SMTP_PASS||""}},from:t.SMTP_FROM||"noreply@example.com",fromName:t.SMTP_FROM_NAME}:void 0,sendWelcomeEmail:t.KYRO_ADMIN_SEND_WELCOME==="true"}}function h(){return w(process.env)}async function E(){try{let{env:t}=await import('cloudflare:workers');if(t){let e=w(t);if(e)return e}}catch{}return null}async function M(t){let e=h()||await E();if(!e)return null;t&&(e.authAdapter=t);try{if(await e.authAdapter?.connect?.(),await e.authAdapter?.findUserByEmail(e.adminEmail))return await e.authAdapter?.disconnect?.(),{success:!1,error:"Admin user already exists"}}catch{}let r=await g(e);return r.success||console.error(`Bootstrap failed: ${r.error}`),r}async function x(t,e=3,r=2e3){let a="";for(let n=0;n<e;n++){let o=await g(t);if(o.success||(a=o.error||"Unknown error",a.includes("already exists")))return o;n<e-1&&await new Promise(c=>setTimeout(c,r));}return {success:false,error:`Failed after ${e} retries: ${a}`}}exports.a=g;exports.b=U;exports.c=w;exports.d=h;exports.e=M;exports.f=x;
@@ -0,0 +1,3 @@
1
+ import {createRequire}from'module';import {g}from'./chunk-C2PXMVR5.js';createRequire(import.meta.url);
2
+ g();var t=[{name:"uploadDir",type:"text",label:"Upload Directory",defaultValue:"./public/uploads"},{name:"baseUrl",type:"text",label:"Base URL",defaultValue:"/uploads"}],i=[{name:"bucket",type:"text",label:"Bucket Name",required:true},{name:"region",type:"text",label:"Region",defaultValue:"us-east-1",admin:{placeholder:"us-east-1"}},{name:"accessKeyId",type:"text",label:"Access Key ID",required:true},{name:"secretAccessKey",type:"password",label:"Secret Access Key",required:true},{name:"endpoint",type:"text",label:"Endpoint URL",admin:{placeholder:"https://s3.custom.com"}},{name:"cdnUrl",type:"text",label:"CDN URL",admin:{placeholder:"https://cdn.example.com"}},{name:"prefix",type:"text",label:"Path Prefix",admin:{placeholder:"uploads"}}],r=[{name:"accountId",type:"text",label:"Account ID",required:true,admin:{placeholder:"Your Cloudflare Account ID"}},{name:"accessKeyId",type:"text",label:"Access Key ID",required:true},{name:"secretAccessKey",type:"password",label:"Secret Access Key",required:true},{name:"bucket",type:"text",label:"Bucket Name",required:true},{name:"publicDevUrl",type:"text",label:"Public Dev URL ID",admin:{placeholder:"pub-xxxxxxxxxxxxxxxx",description:"Enter ONLY the ID (e.g., pub-b8d8c4cc8bcf4d868ddd95efc1b305aa). Do NOT include https:// or the full URL. Found in R2 Dashboard \u2192 Public Dev URL."}},{name:"cdnUrl",type:"text",label:"Custom CDN URL",admin:{placeholder:"https://assets.example.com (optional)"}},{name:"prefix",type:"text",label:"Path Prefix",admin:{placeholder:"uploads (optional)",description:"Optional prefix for all object keys. Do not use '/' as prefix."}}],d=[{name:"cloudName",type:"text",label:"Cloud Name",required:true},{name:"apiKey",type:"text",label:"API Key",required:true},{name:"apiSecret",type:"password",label:"API Secret",required:true},{name:"folder",type:"text",label:"Folder",admin:{placeholder:"Optional folder path"}},{name:"uploadPreset",type:"text",label:"Upload Preset (optional)",admin:{placeholder:"Leave empty for signed uploads",description:"If not set, uploads will be signed with API Secret"}}],o=[{name:"host",type:"text",label:"Host",required:true,admin:{placeholder:"ftp.example.com"}},{name:"port",type:"number",label:"Port",defaultValue:21,admin:{placeholder:"21 for FTP"}},{name:"user",type:"text",label:"Username",required:true},{name:"password",type:"password",label:"Password",required:true},{name:"secure",type:"checkbox",label:"Use TLS/SSL",defaultValue:false,admin:{description:"Enable TLS/SSL for secure connections (FTP only)"}},{name:"baseUrl",type:"text",label:"Base URL",required:true,admin:{placeholder:"https://files.example.com"}},{name:"prefix",type:"text",label:"Path Prefix",admin:{placeholder:"uploads"}}],s=[{name:"note",type:"text",label:"Storage Status",defaultValue:"Cloudflare R2 Native Binding ('STORAGE_BUCKET') active.",admin:{readOnly:true}}],l=[{type:"local",displayName:"Local Server",configFields:t},{type:"cloudflare_r2",displayName:"Cloudflare Native Assets (R2 Binding)",configFields:s},{type:"aws",displayName:"S3 Compatible (AWS, Backblaze, Wasabi, etc.)",configFields:i},{type:"r2",displayName:"Cloudflare R2 (S3 API)",configFields:r},{type:"cloudinary",displayName:"Cloudinary",configFields:d},{type:"ftp",displayName:"FTP",configFields:o}],p=l.map(e=>({label:e.displayName,value:e.type})),n=l.map(e=>({name:e.type,type:"group",label:`${e.displayName} Settings`,admin:{condition:{field:"provider",equals:e.type}},fields:e.configFields})),m={slug:"storage-settings",label:"Storage Settings",admin:{group:"settings"},access:{read:()=>true,update:()=>true},fields:[{name:"provider",type:"select",label:"Storage Provider",defaultValue:"local",options:p},...n,{name:"limits",type:"group",label:"Upload Limits",fields:[{name:"maxFileSize",type:"number",label:"Max File Size (bytes)",defaultValue:10485760},{name:"allowedTypes",type:"json",label:"Allowed MIME Types",defaultValue:["image/*","video/*","audio/*","application/pdf"]},{name:"maxFilesPerUpload",type:"number",label:"Max Files per Upload",defaultValue:10}]}]};
3
+ export{m as a};
@@ -0,0 +1,2 @@
1
+ import {createRequire}from'module';import {ra,ma,ia,pa}from'./chunk-7AQSH3KR.js';import {g}from'./chunk-C2PXMVR5.js';createRequire(import.meta.url);
2
+ g();var a=ra("settings",{key:pa("key",{length:255}).primaryKey(),value:ia("value").notNull(),description:ia("description"),updatedAt:ma("updated_at").defaultNow()});export{a};
@@ -0,0 +1,2 @@
1
+ 'use strict';var chunkF4ITQ6XQ_cjs=require('./chunk-F4ITQ6XQ.cjs'),chunkHTYVI2HK_cjs=require('./chunk-HTYVI2HK.cjs'),chunkBUNLC3II_cjs=require('./chunk-BUNLC3II.cjs'),crypto=require('crypto');chunkBUNLC3II_cjs.h();var g=chunkBUNLC3II_cjs.e(chunkHTYVI2HK_cjs.a(),1);var m="kyro:auth:",A=86400,x=604800,w=class{_redis=null;prefix;tokenExpiration;refreshExpiration;options;constructor(e={}){this.options=e,this.prefix=e.keyPrefix||m,this.tokenExpiration=e.tokenExpiration||A,this.refreshExpiration=e.refreshTokenExpiration||x;}async getRedis(){if(!this._redis){let e,t="ioredis";try{e=(await import(t)).Redis;}catch{chunkF4ITQ6XQ_cjs.a([t]),e=(await import(t)).Redis;}let s=this.options.url||`redis://${this.options.host||"localhost"}:${this.options.port||6379}`;this._redis=new e(s,{password:this.options.password,db:this.options.db,lazyConnect:true,tls:this.options.tls?{}:void 0});}return this._redis}async connect(){await this.getRedis();}async disconnect(){await(await this.getRedis()).quit();}userKey(e){return `${this.prefix}users:${e}`}sessionKey(e){return `${this.prefix}sessions:${e}`}refreshKey(e){return `${this.prefix}refresh:${e}`}userByEmailKey(e){return `${this.prefix}users:email:${e.toLowerCase()}`}passwordHistoryKey(e){return `${this.prefix}users:${e}:password_history`}async createUser(e){let t=crypto.randomBytes(16).toString("hex"),s=new Date().toISOString(),i=await this.hashPassword(e.password),r={id:t,email:e.email.toLowerCase(),passwordHash:i,role:e.role||"customer",tenantId:e.tenantId,createdAt:s,updatedAt:s},n=(await this.getRedis()).pipeline();return n.hset(this.userKey(t),this.userToHash(r)),n.set(this.userByEmailKey(e.email),t),await n.exec(),r}async findUserByEmail(e){let t=await(await this.getRedis()).get(this.userByEmailKey(e.toLowerCase()));return t?this.findUserById(t):null}async findUserById(e){let t=await(await this.getRedis()).hgetall(this.userKey(e));return !t||Object.keys(t).length===0?null:this.hashToUser(t)}async updateUser(e,t){let s=await this.findUserById(e);if(!s)return null;let i={...s,...t,id:e,updatedAt:new Date().toISOString()};if(t.email&&t.email!==s.email){let r=(await this.getRedis()).pipeline();r.del(this.userByEmailKey(s.email)),r.set(this.userByEmailKey(t.email),e),await r.exec();}return await(await this.getRedis()).hset(this.userKey(e),this.userToHash(i)),i}async deleteUser(e){let t=await this.findUserById(e);if(!t)return false;let s=(await this.getRedis()).pipeline();return s.del(this.userKey(e)),s.del(this.userByEmailKey(t.email)),s.del(this.passwordHistoryKey(e)),await s.exec(),true}async hashPassword(e){return g.default.hash(e,12)}async verifyPassword(e,t){let s=await(await this.getRedis()).get(this.userByEmailKey(e));if(!s)return null;let i=await this.findUserById(s);return !i||!i.passwordHash?null:await g.default.compare(t,i.passwordHash)?i:null}async createSession(e,t={}){let s=crypto.randomBytes(32).toString("hex"),i=crypto.randomBytes(32).toString("base64url"),r=crypto.randomBytes(32).toString("base64url"),n=new Date,a={id:s,userId:e,token:i,refreshToken:r,expiresAt:new Date(n.getTime()+this.tokenExpiration*1e3).toISOString(),createdAt:n.toISOString(),ipAddress:t.ipAddress,userAgent:t.userAgent},o=(await this.getRedis()).pipeline();return o.hset(this.sessionKey(s),this.sessionToHash(a)),o.setex(this.refreshKey(r),this.refreshExpiration,s),await o.exec(),a}async findSessionByToken(e){let t=await(await this.getRedis()).hgetall(this.sessionKey(e));return !t||Object.keys(t).length===0?null:this.hashToSession(t)}async findSessionByRefreshToken(e){let t=await(await this.getRedis()).get(this.refreshKey(e));if(!t)return null;let s=await(await this.getRedis()).hgetall(this.sessionKey(t));return !s||Object.keys(s).length===0?null:this.hashToSession(s)}async deleteSession(e){let t=await(await this.getRedis()).hgetall(this.sessionKey(e));if(!t||Object.keys(t).length===0)return false;let s=(await this.getRedis()).pipeline();return s.del(this.sessionKey(e)),t.refreshToken&&s.del(this.refreshKey(t.refreshToken)),await s.exec(),true}async deleteUserSessions(e){let t=`${this.prefix}sessions:*`,s="0",i=0;do{let[r,n]=await(await this.getRedis()).scan(s,"MATCH",t,"COUNT",100);s=r;for(let a of n)if((await(await this.getRedis()).hgetall(a)).userId===e){let l=a.replace(`${this.prefix}sessions:`,"");await this.deleteSession(l),i++;}}while(s!=="0");return i}async addPasswordToHistory(e,t){await(await this.getRedis()).lpush(this.passwordHistoryKey(e),t),await(await this.getRedis()).ltrim(this.passwordHistoryKey(e),0,4);}async getPasswordHistory(e,t=5){return (await this.getRedis()).lrange(this.passwordHistoryKey(e),0,t-1)}async isPasswordInHistory(e,t,s=5){let i=await this.getPasswordHistory(t,s);for(let r of i)if(await g.default.compare(e,r))return true;return false}userToHash(e){let t={id:e.id,email:e.email,passwordHash:e.passwordHash||"",role:e.role,createdAt:e.createdAt,updatedAt:e.updatedAt};return e.avatar&&(t.avatar=e.avatar),e.tenantId&&(t.tenantId=e.tenantId),e.emailVerified!==void 0&&(t.emailVerified=String(e.emailVerified)),e.locked!==void 0&&(t.locked=String(e.locked)),e.lastLogin&&(t.lastLogin=e.lastLogin),e.failedLoginAttempts!==void 0&&(t.failedLoginAttempts=String(e.failedLoginAttempts)),t}hashToUser(e){return {id:e.id,email:e.email,passwordHash:e.passwordHash,role:e.role,tenantId:e.tenantId,avatar:e.avatar,createdAt:e.createdAt,updatedAt:e.updatedAt,emailVerified:e.emailVerified==="true",locked:e.locked==="true",lastLogin:e.lastLogin,failedLoginAttempts:e.failedLoginAttempts?parseInt(e.failedLoginAttempts,10):0}}sessionToHash(e){let t={id:e.id,userId:e.userId,token:e.token,expiresAt:e.expiresAt,createdAt:e.createdAt};return e.refreshToken&&(t.refreshToken=e.refreshToken),e.ipAddress&&(t.ipAddress=e.ipAddress),e.userAgent&&(t.userAgent=e.userAgent),t}hashToSession(e){return {id:e.id,userId:e.userId,token:e.token,refreshToken:e.refreshToken,expiresAt:e.expiresAt,createdAt:e.createdAt,ipAddress:e.ipAddress,userAgent:e.userAgent}}tokenKey(e,t){return `${this.prefix}tokens:${e}:${t}`}async createEmailVerificationToken(e){let t=crypto.randomBytes(32).toString("hex"),s=new Date(Date.now()+1440*60*1e3);return await(await this.getRedis()).setex(this.tokenKey("email-verify",t),86400,e),{token:t,expiresAt:s}}async verifyEmailToken(e){let t=await this.getRedis(),s=await t.get(this.tokenKey("email-verify",e));return s?(await t.del(this.tokenKey("email-verify",e)),{success:true,userId:s}):{success:false,error:"Invalid or expired token"}}async createPasswordResetToken(e){let t=await this.findUserByEmail(e);if(!t)return {token:"",expiresAt:new Date,error:"User not found"};let s=crypto.randomBytes(32).toString("hex"),i=new Date(Date.now()+3600*1e3);return await(await this.getRedis()).setex(this.tokenKey("password-reset",s),3600,t.id),{token:s,expiresAt:i}}async resetPasswordWithToken(e,t){let s=await this.getRedis(),i=await s.get(this.tokenKey("password-reset",e));if(!i)return {success:false,error:"Invalid or expired token"};let r=await this.hashPassword(t);return await this.updateUser(i,{passwordHash:r}),await s.del(this.tokenKey("password-reset",e)),{success:true}}auditLogKey(e){return `${this.prefix}audit:logs:${e}`}auditLogIndexKey(){return `${this.prefix}audit:index`}async findAuditLogs(e){let{limit:t=50,offset:s=0}=e,i=this.auditLogIndexKey(),r=await(await this.getRedis()).zrevrange(i,0,-1),n=r.length,a=r.slice(s,s+t),o=[];for(let l of a){let u=await(await this.getRedis()).get(this.auditLogKey(l));if(u){let d=JSON.parse(u);(!e.userId||d.userId===e.userId)&&(!e.action||(Array.isArray(e.action)?e.action.includes(d.action):d.action===e.action))&&(!e.resource||d.resource===e.resource)&&(e.success===void 0||d.success===e.success)&&o.push({...d,timestamp:new Date(d.timestamp)});}}return {logs:o,total:n}}async createAuditLog(e){let t=crypto.randomBytes(16).toString("hex"),i={...e,id:t,timestamp:new Date};await(await this.getRedis()).set(this.auditLogKey(t),JSON.stringify(i)),await(await this.getRedis()).zadd(this.auditLogIndexKey(),Date.now(),t);let r=await(await this.getRedis()).zcard(this.auditLogIndexKey());if(r>1e4){let n=await(await this.getRedis()).zrange(this.auditLogIndexKey(),0,r-10001);for(let a of n)await(await this.getRedis()).del(this.auditLogKey(a)),await(await this.getRedis()).zrem(this.auditLogIndexKey(),a);}return i}};
2
+ exports.a=w;
@@ -0,0 +1,20 @@
1
+ 'use strict';var chunkBUNLC3II_cjs=require('./chunk-BUNLC3II.cjs'),r=require('path'),m=require('fs');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var r__default=/*#__PURE__*/_interopDefault(r);var m__default=/*#__PURE__*/_interopDefault(m);chunkBUNLC3II_cjs.h();var l=o=>{let s=r__default.default.join(process.cwd(),"node_modules","@kyro-cms","core"),e=r__default.default.resolve(s,"src",`${o}.ts`);return m__default.default.existsSync(e)?e:r__default.default.resolve(s,"dist",`${o}.js`)},E=l("api-handler"),x=l("api-handler-graphql"),P=l("api-handler-trpc"),S=["@kyro-cms/core","@kyro-cms/admin","@kyro-cms/astro","@kyro-cms/ai","@kyro-cms/connect"],_=["better-sqlite3","pg","mongodb","ioredis","sharp","ssh2","cpu-features","ssh2-sftp-client","nodemailer","jsonwebtoken","@mapbox/node-pre-gyp","mock-aws-s3","aws-sdk","nock"],A=["crypto","node:crypto","module","node:module","fs","node:fs","fs/promises","node:fs/promises","path","node:path","util","node:util","stream","node:stream","events","node:events","url","node:url","http","node:http","https","node:https","os","node:os","child_process","node:child_process","assert","node:assert","zlib","node:zlib","buffer","node:buffer"],f=[...S,..._],N=[...S,...A,..._];function R(o={}){let{configPath:s="./kyro.config.ts",apiPath:e="/api",adminPath:a="/admin",admin:O=true,enableGraphQL:c=false,enableTRPC:p=false,enableWebSocket:h=false}=o;return {name:"@kyro-cms/core",hooks:{"astro:config:setup":async({config:y,updateConfig:b,injectRoute:i,logger:n})=>{if(n.info(`Setting up Kyro CMS (API: ${e}, Admin: ${a})`),e===a)throw new Error(`Kyro CMS: apiPath and adminPath cannot be the same ("${e}")`);let u=r__default.default.resolve(y.root.pathname,s),g=u;m__default.default.existsSync(u)||n.warn(`Kyro config file not found at ${s}. The API will fail to boot if collections are needed.`),b({security:{checkOrigin:false},vite:{ssr:{external:N},build:{rollupOptions:{external:f}},optimizeDeps:{exclude:f},server:{watch:{ignored:["**/*.db","**/*.db-*","**/data/**","**/public/uploads/**","**/.kyro/**"]}},plugins:[{name:"use-sync-external-store-shim-fix",enforce:"pre",resolveId(t){if(t==="use-sync-external-store/shim"||t==="use-sync-external-store/shim/index.js")return "\0virtual:use-sync-external-store-shim";if(t==="use-sync-external-store/shim/with-selector"||t==="use-sync-external-store/shim/with-selector.js")return "\0virtual:use-sync-external-store-shim-with-selector"},load(t){if(t==="\0virtual:use-sync-external-store-shim")return 'export { useSyncExternalStore } from "react";';if(t==="\0virtual:use-sync-external-store-shim-with-selector")return `
2
+ import { useSyncExternalStore, useMemo } from "react";
3
+ export function useSyncExternalStoreWithSelector(subscribe, getSnapshot, getServerSnapshot, selector, isEqual) {
4
+ const memoizedSelector = useMemo(() => {
5
+ let last, lastSnap, hasMemo = false;
6
+ return (snap) => {
7
+ if (!hasMemo || !Object.is(lastSnap, snap)) {
8
+ const next = selector(snap);
9
+ if (!hasMemo || !(isEqual ? isEqual(last, next) : Object.is(last, next))) {
10
+ last = next; lastSnap = snap; hasMemo = true;
11
+ }
12
+ }
13
+ return last;
14
+ };
15
+ }, [selector, isEqual]);
16
+ const getSelection = () => memoizedSelector(getSnapshot());
17
+ const getServerSelection = getServerSnapshot != null ? () => memoizedSelector(getServerSnapshot()) : undefined;
18
+ return useSyncExternalStore(subscribe, getSelection, getServerSelection);
19
+ }
20
+ `}}],resolve:{alias:{"kyro:config":g}},define:{__KYRO_API_PATH__:JSON.stringify(e),__KYRO_ADMIN_PATH__:JSON.stringify(a),__KYRO_ENABLE_GRAPHQL__:JSON.stringify(c),__KYRO_ENABLE_TRPC__:JSON.stringify(p),__KYRO_ENABLE_WS__:JSON.stringify(h)}}}),i({pattern:`${e}/[...path]`,entrypoint:E}),c&&(i({pattern:`${e}/graphql`,entrypoint:x}),n.info(`GraphQL endpoint enabled at ${e}/graphql`)),p&&(i({pattern:`${e}/trpc/[...path]`,entrypoint:P}),n.info(`tRPC endpoint enabled at ${e}/trpc`)),h&&n.info("WebSocket support enabled (auto-starts at first request)");}}}}exports.a=R;
@@ -0,0 +1,115 @@
1
+ import {createRequire}from'module';import {a as a$1,d,j,k,e as e$1,h,i}from'./chunk-VIUU4D5I.js';import {n,M,p,s}from'./chunk-IP6JUEH3.js';import {J}from'./chunk-7AQSH3KR.js';import {a}from'./chunk-BPMA2ECA.js';import {g,e}from'./chunk-C2PXMVR5.js';import {randomBytes}from'crypto';createRequire(import.meta.url);
2
+ g();var R=e(a(),1);var S=false,_=class{db;prefix;sessionTTL;refreshTokenTTL;constructor(e){this.db=e.db,this.prefix=e.prefix||"kyro:",this.sessionTTL=e.sessionTTL||86400,this.refreshTokenTTL=e.refreshTokenTTL||604800;}async connect(){S||(await this.db.execute(J`
3
+ CREATE TABLE IF NOT EXISTS "users" (
4
+ "id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
5
+ "name" VARCHAR(255),
6
+ "email" VARCHAR(255) NOT NULL,
7
+ "password_hash" VARCHAR(255),
8
+ "role" VARCHAR(50) NOT NULL DEFAULT 'customer',
9
+ "tenant_id" UUID,
10
+ "email_verified" BOOLEAN DEFAULT false,
11
+ "locked" BOOLEAN DEFAULT false,
12
+ "last_login" TIMESTAMP,
13
+ "failed_login_attempts" INTEGER DEFAULT 0,
14
+ "metadata" JSONB,
15
+ "avatar" VARCHAR(255),
16
+ "created_at" TIMESTAMP NOT NULL DEFAULT NOW(),
17
+ "updated_at" TIMESTAMP NOT NULL DEFAULT NOW()
18
+ )
19
+ `),await this.db.execute(J`ALTER TABLE "users" ADD COLUMN IF NOT EXISTS "avatar" VARCHAR(255)`),await this.db.execute(J`CREATE UNIQUE INDEX IF NOT EXISTS "users_email_idx" ON "users" ("email")`),await this.db.execute(J`CREATE INDEX IF NOT EXISTS "users_tenant_idx" ON "users" ("tenant_id")`),await this.db.execute(J`CREATE INDEX IF NOT EXISTS "users_role_idx" ON "users" ("role")`),await this.db.execute(J`
20
+ CREATE TABLE IF NOT EXISTS "sessions" (
21
+ "id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
22
+ "user_id" UUID NOT NULL REFERENCES "users"("id") ON DELETE CASCADE,
23
+ "token" VARCHAR(512) NOT NULL UNIQUE,
24
+ "refresh_token" VARCHAR(512),
25
+ "ip_address" VARCHAR(45),
26
+ "user_agent" TEXT,
27
+ "expires_at" TIMESTAMP NOT NULL,
28
+ "created_at" TIMESTAMP NOT NULL DEFAULT NOW()
29
+ )
30
+ `),await this.db.execute(J`CREATE INDEX IF NOT EXISTS "sessions_user_idx" ON "sessions" ("user_id")`),await this.db.execute(J`CREATE INDEX IF NOT EXISTS "sessions_token_idx" ON "sessions" ("token")`),await this.db.execute(J`CREATE INDEX IF NOT EXISTS "sessions_expires_idx" ON "sessions" ("expires_at")`),await this.db.execute(J`
31
+ CREATE TABLE IF NOT EXISTS "audit_logs" (
32
+ "id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
33
+ "action" VARCHAR(100) NOT NULL,
34
+ "user_id" UUID REFERENCES "users"("id") ON DELETE SET NULL,
35
+ "user_email" VARCHAR(255),
36
+ "role" VARCHAR(50),
37
+ "resource" VARCHAR(100) NOT NULL,
38
+ "resource_id" VARCHAR(255),
39
+ "changes" JSONB,
40
+ "ip_address" VARCHAR(45),
41
+ "user_agent" TEXT,
42
+ "success" BOOLEAN NOT NULL DEFAULT true,
43
+ "error" TEXT,
44
+ "metadata" JSONB,
45
+ "timestamp" TIMESTAMP NOT NULL DEFAULT NOW()
46
+ )
47
+ `),await this.db.execute(J`ALTER TABLE "audit_logs" ALTER COLUMN "resource_id" TYPE VARCHAR(255)`),await this.db.execute(J`CREATE INDEX IF NOT EXISTS "audit_logs_user_idx" ON "audit_logs" ("user_id")`),await this.db.execute(J`CREATE INDEX IF NOT EXISTS "audit_logs_action_idx" ON "audit_logs" ("action")`),await this.db.execute(J`CREATE INDEX IF NOT EXISTS "audit_logs_resource_idx" ON "audit_logs" ("resource")`),await this.db.execute(J`CREATE INDEX IF NOT EXISTS "audit_logs_timestamp_idx" ON "audit_logs" ("timestamp")`),await this.db.execute(J`
48
+ CREATE TABLE IF NOT EXISTS "password_history" (
49
+ "id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
50
+ "user_id" UUID NOT NULL REFERENCES "users"("id") ON DELETE CASCADE,
51
+ "password_hash" VARCHAR(255) NOT NULL,
52
+ "created_at" TIMESTAMP NOT NULL DEFAULT NOW()
53
+ )
54
+ `),await this.db.execute(J`CREATE INDEX IF NOT EXISTS "password_history_user_idx" ON "password_history" ("user_id")`),await this.db.execute(J`
55
+ CREATE TABLE IF NOT EXISTS "lockouts" (
56
+ "id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
57
+ "user_id" UUID NOT NULL REFERENCES "users"("id") ON DELETE CASCADE,
58
+ "ip_address" VARCHAR(45),
59
+ "reason" VARCHAR(255),
60
+ "locked_until" TIMESTAMP NOT NULL,
61
+ "released_at" TIMESTAMP,
62
+ "created_at" TIMESTAMP NOT NULL DEFAULT NOW()
63
+ )
64
+ `),await this.db.execute(J`CREATE INDEX IF NOT EXISTS "lockouts_user_idx" ON "lockouts" ("user_id")`),await this.db.execute(J`CREATE INDEX IF NOT EXISTS "lockouts_locked_until_idx" ON "lockouts" ("locked_until")`),await this.db.execute(J`
65
+ CREATE TABLE IF NOT EXISTS "roles" (
66
+ "id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
67
+ "name" VARCHAR(100) NOT NULL UNIQUE,
68
+ "level" INTEGER NOT NULL DEFAULT 0,
69
+ "inherits" TEXT[],
70
+ "description" TEXT,
71
+ "permissions" JSONB DEFAULT '[]',
72
+ "is_system" BOOLEAN DEFAULT false,
73
+ "created_at" TIMESTAMP NOT NULL DEFAULT NOW(),
74
+ "updated_at" TIMESTAMP NOT NULL DEFAULT NOW()
75
+ )
76
+ `),await this.db.execute(J`CREATE INDEX IF NOT EXISTS "roles_level_idx" ON "roles" ("level")`),await this.db.execute(J`
77
+ CREATE TABLE IF NOT EXISTS "tenants" (
78
+ "id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
79
+ "name" VARCHAR(255) NOT NULL,
80
+ "slug" VARCHAR(100) NOT NULL UNIQUE,
81
+ "settings" JSONB DEFAULT '{}',
82
+ "is_active" BOOLEAN DEFAULT true,
83
+ "created_at" TIMESTAMP NOT NULL DEFAULT NOW(),
84
+ "updated_at" TIMESTAMP NOT NULL DEFAULT NOW()
85
+ )
86
+ `),await this.db.execute(J`
87
+ CREATE TABLE IF NOT EXISTS "api_keys" (
88
+ "id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
89
+ "user_id" UUID NOT NULL REFERENCES "users"("id") ON DELETE CASCADE,
90
+ "name" VARCHAR(255) NOT NULL,
91
+ "key" VARCHAR(64) NOT NULL UNIQUE,
92
+ "key_prefix" VARCHAR(8) NOT NULL,
93
+ "permissions" JSONB DEFAULT '[]',
94
+ "last_used_at" TIMESTAMP,
95
+ "expires_at" TIMESTAMP,
96
+ "created_at" TIMESTAMP NOT NULL DEFAULT NOW()
97
+ )
98
+ `),await this.db.execute(J`
99
+ CREATE TABLE IF NOT EXISTS "email_verifications" (
100
+ "id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
101
+ "user_id" UUID NOT NULL REFERENCES "users"("id") ON DELETE CASCADE,
102
+ "token" VARCHAR(64) NOT NULL UNIQUE,
103
+ "expires_at" TIMESTAMP NOT NULL,
104
+ "created_at" TIMESTAMP NOT NULL DEFAULT NOW()
105
+ )
106
+ `),await this.db.execute(J`
107
+ CREATE TABLE IF NOT EXISTS "password_resets" (
108
+ "id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
109
+ "user_id" UUID NOT NULL REFERENCES "users"("id") ON DELETE CASCADE,
110
+ "token" VARCHAR(64) NOT NULL UNIQUE,
111
+ "expires_at" TIMESTAMP NOT NULL,
112
+ "used_at" TIMESTAMP,
113
+ "created_at" TIMESTAMP NOT NULL DEFAULT NOW()
114
+ )
115
+ `),S=true);}async disconnect(){}async createUser(e){let s=await this.hashPassword(e.password),[t]=await this.db.insert(a$1).values({email:e.email.toLowerCase(),name:e.name,passwordHash:s,role:e.role||"customer",avatar:e.avatar,tenantId:e.tenantId}).returning();return this.userToAuthUser(t)}async findUserByEmail(e){let[s]=await this.db.select().from(a$1).where(n(a$1.email,e.toLowerCase())).limit(1);return s?this.userToAuthUser(s):null}async findUserById(e){let[s]=await this.db.select().from(a$1).where(n(a$1.id,e)).limit(1);return s?this.userToAuthUser(s):null}async updateUser(e,s){let t={updatedAt:new Date};s.name!==void 0&&(t.name=s.name),s.email!==void 0&&(t.email=s.email),s.passwordHash!==void 0&&(t.passwordHash=s.passwordHash),s.role!==void 0&&(t.role=s.role),s.tenantId!==void 0&&(t.tenantId=s.tenantId),s.avatar!==void 0&&(t.avatar=s.avatar),s.emailVerified!==void 0&&(t.emailVerified=s.emailVerified),s.locked!==void 0&&(t.locked=s.locked),s.lastLogin!==void 0&&(t.lastLogin=s.lastLogin?new Date(s.lastLogin):null),s.failedLoginAttempts!==void 0&&(t.failedLoginAttempts=s.failedLoginAttempts);let[r]=await this.db.update(a$1).set(t).where(n(a$1.id,e)).returning();return r?this.userToAuthUser(r):null}async deleteUser(e){return await this.db.delete(a$1).where(n(a$1.id,e)),true}async findUsers(e={}){let s=e.page??1,t=e.limit??10,r=(s-1)*t,u=e.search;if(u){let m=`%${u}%`,[w,[{count:p}]]=await Promise.all([this.db.select().from(a$1).where(J`${a$1.email} ILIKE ${m}`).orderBy(M(a$1.createdAt)).limit(t).offset(r),this.db.select({count:J`count(*)`}).from(a$1).where(J`${a$1.email} ILIKE ${m}`)]);return {users:w.map(c=>this.userToAuthUser(c)),total:Number(p)}}let[l,[{count:E}]]=await Promise.all([this.db.select().from(a$1).orderBy(M(a$1.createdAt)).limit(t).offset(r),this.db.select({count:J`count(*)`}).from(a$1)]);return {users:l.map(m=>this.userToAuthUser(m)),total:Number(E)}}async verifyPassword(e,s){let t=await this.findUserByEmail(e);if(!t)return null;let[r]=await this.db.select().from(a$1).where(n(a$1.email,e.toLowerCase())).limit(1);return r?.passwordHash&&await R.default.compare(s,r.passwordHash)?t:null}async hashPassword(e){return R.default.hash(e,12)}async createSession(e,s){let t=randomBytes(32).toString("base64url"),r=randomBytes(32).toString("base64url"),u=new Date(Date.now()+this.sessionTTL*1e3);new Date(Date.now()+this.refreshTokenTTL*1e3);let [E]=await this.db.insert(d).values({userId:e,token:t,refreshToken:r,ipAddress:s?.ipAddress,userAgent:s?.userAgent,expiresAt:u}).returning();return this.sessionToSession(E)}async findSessionByToken(e){let[s$1]=await this.db.select().from(d).where(p(n(d.token,e),s(d.expiresAt,new Date))).limit(1);return s$1?this.sessionToSession(s$1):null}async findSessionByRefreshToken(e){let[s$1]=await this.db.select().from(d).where(p(n(d.refreshToken,e),s(d.expiresAt,new Date))).limit(1);return s$1?this.sessionToSession(s$1):null}async deleteSession(e){return await this.db.delete(d).where(n(d.id,e)),true}async deleteUserSessions(e){return await this.db.delete(d).where(n(d.userId,e)),1}async addPasswordToHistory(e,s){await this.db.insert(j).values({userId:e,passwordHash:s});}async getPasswordHistory(e,s=5){return (await this.db.select({passwordHash:j.passwordHash}).from(j).where(n(j.userId,e)).orderBy(M(j.createdAt)).limit(s)).map(r=>r.passwordHash)}async isPasswordInHistory(e,s,t=5){let r=await this.getPasswordHistory(s,t);for(let u of r)if(await this.verifyPassword(e,u))return true;return false}async isLocked(e){let[s$1]=await this.db.select().from(k).where(p(n(k.userId,e),s(k.lockedUntil,new Date))).limit(1);return !!s$1}async getLockout(e){let[s$1]=await this.db.select().from(k).where(p(n(k.userId,e),s(k.lockedUntil,new Date))).limit(1);return s$1?{lockedUntil:s$1.lockedUntil}:null}async recordFailedAttempt(e,s){let r=((await this.findUserById(e))?.failedLoginAttempts||0)+1;await this.updateUser(e,{failedLoginAttempts:r});let l=r>=5;return l&&await this.db.insert(k).values({userId:e,ipAddress:s,reason:"Too many failed login attempts",lockedUntil:new Date(Date.now()+9e5)}),{attempts:r,locked:l}}async resetAttempts(e){await this.updateUser(e,{failedLoginAttempts:0});}async findAuditLogs(e){let{limit:s=50,offset:t=0,userId:r,action:u,resource:l,resourceId:E,success:m,startDate:w,endDate:p$1}=e,c=[];r&&c.push(n(e$1.userId,r)),u&&(Array.isArray(u)?c.push(J`${e$1.action} = ANY(${u})`):c.push(n(e$1.action,u))),l&&c.push(n(e$1.resource,l)),E&&c.push(n(e$1.resourceId,E)),m!==void 0&&c.push(n(e$1.success,m)),w&&c.push(J`${e$1.timestamp} >= ${w}`),p$1&&c.push(J`${e$1.timestamp} <= ${p$1}`);let O=c.length>0?p(...c):void 0,b=await this.db.select({count:J`count(*)`}).from(e$1).where(O);return {logs:(await this.db.select().from(e$1).where(O).orderBy(M(e$1.timestamp)).limit(s).offset(t)).map(o=>({id:o.id,timestamp:o.timestamp,action:o.action,userId:o.userId||void 0,userEmail:o.userEmail||void 0,role:o.role||void 0,resource:o.resource,resourceId:o.resourceId||void 0,changes:o.changes||void 0,ipAddress:o.ipAddress||void 0,userAgent:o.userAgent||void 0,success:o.success,error:o.error||void 0,metadata:o.metadata||void 0})),total:Number(b[0]?.count||0)}}async createAuditLog(e){let s=crypto.randomUUID(),t=new Date;return await this.db.insert(e$1).values({id:s,action:e.action,userId:e.userId??null,userEmail:e.userEmail??null,role:e.role??null,resource:e.resource,resourceId:e.resourceId??null,changes:e.changes??null,ipAddress:e.ipAddress??null,userAgent:e.userAgent??null,success:e.success,error:e.error??null,metadata:e.metadata??null,timestamp:t}),{...e,id:s,timestamp:t}}userToAuthUser(e){return {id:e.id,name:e.name||void 0,email:e.email,passwordHash:e.passwordHash||void 0,role:e.role,avatar:e.avatar&&typeof e.avatar=="object"?e.avatar.id||void 0:e.avatar||void 0,tenantId:e.tenantId||void 0,emailVerified:e.emailVerified||false,locked:e.locked||false,lastLogin:e.lastLogin?new Date(e.lastLogin).toISOString():void 0,failedLoginAttempts:e.failedLoginAttempts||0,createdAt:new Date(e.createdAt).toISOString(),updatedAt:new Date(e.updatedAt).toISOString()}}sessionToSession(e){return {id:e.id,userId:e.userId,token:e.token,refreshToken:e.refreshToken||void 0,expiresAt:new Date(e.expiresAt).toISOString(),createdAt:new Date(e.createdAt).toISOString(),ipAddress:e.ipAddress||void 0,userAgent:e.userAgent||void 0}}async createEmailVerificationToken(e){let s=randomBytes(32).toString("hex"),t=new Date(Date.now()+1440*60*1e3);return await this.db.insert(h).values({userId:e,token:s,expiresAt:t}),{token:s,expiresAt:t}}async verifyEmailToken(e){let[s]=await this.db.select().from(h).where(n(h.token,e)).limit(1);return s?s.expiresAt<new Date?{success:false,error:"Verification token has expired"}:(await this.db.update(a$1).set({emailVerified:true}).where(n(a$1.id,s.userId)),await this.db.delete(h).where(n(h.id,s.id)),{success:true,userId:s.userId}):{success:false,error:"Invalid verification token"}}async createPasswordResetToken(e){let s=await this.findUserByEmail(e);if(!s)return {token:"",expiresAt:new Date,error:"User not found"};let t=randomBytes(32).toString("hex"),r=new Date(Date.now()+3600*1e3);return await this.db.insert(i).values({userId:s.id,token:t,expiresAt:r}),{token:t,expiresAt:r}}async resetPasswordWithToken(e,s){let[t]=await this.db.select().from(i).where(n(i.token,e)).limit(1);if(!t)return {success:false,error:"Invalid reset token"};if(t.expiresAt<new Date)return {success:false,error:"Reset token has expired"};if(t.usedAt)return {success:false,error:"Reset token has already been used"};let r=await this.hashPassword(s);return await this.db.update(a$1).set({passwordHash:r,updatedAt:new Date}).where(n(a$1.id,t.userId)),await this.db.update(i).set({usedAt:new Date}).where(n(i.id,t.id)),await this.db.delete(d).where(n(d.userId,t.userId)),{success:true}}};export{_ as a};
@@ -0,0 +1,19 @@
1
+ import {createRequire}from'module';import {H,b,M,K as K$1,L,g as g$1,l}from'./chunk-A73AVVFR.js';import {e,o,L as L$1,Q,P,m,M as M$1,k,J as J$1,f,h,U as U$1,n,N as N$1,K as K$2,O}from'./chunk-XOACKBG7.js';import {t,v as v$1,c,s,a,d,D as D$1,r,f as f$1,e as e$1,k as k$1,b as b$1,j as j$1,i,h as h$1}from'./chunk-OSAVAYJZ.js';import {g}from'./chunk-C2PXMVR5.js';createRequire(import.meta.url);
2
+ g();g();g();var se=i=>f.isInstance(i)?i.headers?.date??i.headers?.Date:void 0;g();var U=i=>new Date(Date.now()+i);g();g();var st=(i,e)=>Math.abs(U(e).getTime()-i)>=3e5;var ie=(i,e)=>{let t=Date.parse(i);return st(t,e)?t-Date.now():e};var q=(i,e)=>{if(!e)throw new Error(`Property \`${i}\` is not resolved for AWS SDK SigV4Auth`);return e},v=async i=>{let e=q("context",i.context),t=q("config",i.config),r=e.endpointV2?.properties?.authSchemes?.[0],o=await q("signer",t.signer)(r),n=i?.signingRegion,a=i?.signingRegionSet,m=i?.signingName;return {config:t,signer:o,signingRegion:n,signingRegionSet:a,signingName:m}},K=class{async sign(e$1,t,r){if(!e.isInstance(e$1))throw new Error("The request is not an instance of `HttpRequest` and cannot be signed");let s=await v(r),{config:o,signer:n}=s,{signingRegion:a,signingName:m}=s,c=r.context;if(c?.authSchemes?.length??false){let[l,h]=c.authSchemes;l?.name==="sigv4a"&&h?.name==="sigv4"&&(a=h?.signingRegion??a,m=h?.signingName??m);}return r._preRequestSystemClockOffset=o.systemClockOffset,await n.sign(e$1,{signingDate:U(o.systemClockOffset),signingRegion:a,signingService:m})}errorHandler(e){return t=>{let r=t,s=r.ServerTime??se(r.$response);if(s){let o=q("config",e.config),n=e._preRequestSystemClockOffset,a=ie(s,o.systemClockOffset);(a!==o.systemClockOffset||n!==void 0&&n!==a)&&r.$metadata&&(o.systemClockOffset=a,r.$metadata.clockSkewCorrected=true);}throw t}}successHandler(e,t){let r=se(e);if(r){let s=q("config",t.config);s.systemClockOffset=ie(r,s.systemClockOffset);}}};g();var oe=class extends K{async sign(e$1,t,r){if(!e.isInstance(e$1))throw new Error("The request is not an instance of `HttpRequest` and cannot be signed");let{config:s,signer:o,signingRegion:n,signingRegionSet:a,signingName:m}=await v(r),f=(await s.sigv4aSigningRegionSet?.()??a??[n]).join(",");return r._preRequestSystemClockOffset=s.systemClockOffset,await o.sign(e$1,{signingDate:U(s.systemClockOffset),signingRegion:f,signingService:m})}};g();g();var be=i=>typeof i=="string"&&i.length>0?i.split(",").map(e=>e.trim()):[];g();var it=i=>`AWS_BEARER_TOKEN_${i.replace(/[\s-]/g,"_").toUpperCase()}`;var ot="AWS_AUTH_SCHEME_PREFERENCE",nt="auth_scheme_preference",at={environmentVariableSelector:(i,e)=>{if(e?.signingName&&it(e.signingName)in i)return ["httpBearerAuth"];if(ot in i)return be(i[ot])},configFileSelector:i=>{if(nt in i)return be(i[nt])},default:[]};g();var ct=i=>(i.sigv4aSigningRegionSet=H(i.sigv4aSigningRegionSet),i),mt={environmentVariableSelector(i){if(i.AWS_SIGV4A_SIGNING_REGION_SET)return i.AWS_SIGV4A_SIGNING_REGION_SET.split(",").map(e=>e.trim());throw new o("AWS_SIGV4A_SIGNING_REGION_SET not set in env.",{tryNextLink:true})},configFileSelector(i){if(i.sigv4a_signing_region_set)return (i.sigv4a_signing_region_set??"").split(",").map(e=>e.trim());throw new o("sigv4a_signing_region_set not set in profile.",{tryNextLink:true})},default:void 0};g();g();g();g();var ne=class{format(e){let t=[];for(let o of Object.keys(e)){let n=c(o);t.push(Uint8Array.from([n.byteLength]),n,this.formatHeaderValue(e[o]));}let r=new Uint8Array(t.reduce((o,n)=>o+n.byteLength,0)),s=0;for(let o of t)r.set(o,s),s+=o.byteLength;return r}formatHeaderValue(e){switch(e.type){case "boolean":return Uint8Array.from([e.value?T.boolTrue:T.boolFalse]);case "byte":return Uint8Array.from([T.byte,e.value]);case "short":let t=new DataView(new ArrayBuffer(3));return t.setUint8(0,T.short),t.setInt16(1,e.value,false),new Uint8Array(t.buffer);case "integer":let r=new DataView(new ArrayBuffer(5));return r.setUint8(0,T.integer),r.setInt32(1,e.value,false),new Uint8Array(r.buffer);case "long":let s$1=new Uint8Array(9);return s$1[0]=T.long,s$1.set(e.value.bytes,1),s$1;case "binary":let o=new DataView(new ArrayBuffer(3+e.value.byteLength));o.setUint8(0,T.byteArray),o.setUint16(1,e.value.byteLength,false);let n=new Uint8Array(o.buffer);return n.set(e.value,3),n;case "string":let a=c(e.value),m=new DataView(new ArrayBuffer(3+a.byteLength));m.setUint8(0,T.string),m.setUint16(1,a.byteLength,false);let c$1=new Uint8Array(m.buffer);return c$1.set(a,3),c$1;case "timestamp":let f=new Uint8Array(9);return f[0]=T.timestamp,f.set(Re.fromNumber(e.value.valueOf()).bytes,1),f;case "uuid":if(!Vt.test(e.value))throw new Error(`Invalid UUID received: ${e.value}`);let l=new Uint8Array(17);return l[0]=T.uuid,l.set(s(e.value.replace(/-/g,"")),1),l}}},T;(function(i){i[i.boolTrue=0]="boolTrue",i[i.boolFalse=1]="boolFalse",i[i.byte=2]="byte",i[i.short=3]="short",i[i.integer=4]="integer",i[i.long=5]="long",i[i.byteArray=6]="byteArray",i[i.string=7]="string",i[i.timestamp=8]="timestamp",i[i.uuid=9]="uuid";})(T||(T={}));var Vt=/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/,Re=class i{bytes;constructor(e){if(this.bytes=e,e.byteLength!==8)throw new Error("Int64 buffers must be exactly 8 bytes")}static fromNumber(e){if(e>9223372036854776e3||e<-9223372036854776e3)throw new Error(`${e} is too large (or, if negative, too small) to represent as an Int64`);let t=new Uint8Array(8);for(let r=7,s=Math.abs(Math.round(e));r>-1&&s>0;r--,s/=256)t[r]=s;return e<0&&ft(t),new i(t)}valueOf(){let e=this.bytes.slice(0),t$1=e[0]&128;return t$1&&ft(e),parseInt(t(e),16)*(t$1?-1:1)}toString(){return String(this.valueOf())}};function ft(i){for(let e=0;e<8;e++)i[e]^=255;for(let e=7;e>-1&&(i[e]++,i[e]===0);e--);}g();g();g();var dt="X-Amz-Algorithm",lt="X-Amz-Credential",Te="X-Amz-Date",ht="X-Amz-SignedHeaders",ut="X-Amz-Expires",_e="X-Amz-Signature",ke="X-Amz-Security-Token";var Ie="authorization",Me=Te.toLowerCase(),jt="date",gt=[Ie,Me,jt],pt=_e.toLowerCase(),J="x-amz-content-sha256",yt=ke.toLowerCase();var St={authorization:true,"cache-control":true,connection:true,expect:true,from:true,"keep-alive":true,"max-forwards":true,pragma:true,referer:true,te:true,trailer:true,"transfer-encoding":true,upgrade:true,"user-agent":true,"x-amzn-trace-id":true},wt=/^proxy-/,Et=/^sec-/;var ae="AWS4-HMAC-SHA256";var xt="AWS4-HMAC-SHA256-PAYLOAD",At="UNSIGNED-PAYLOAD",Nt=50,De="aws4_request",Ct=3600*24*7;var bt=({query:i={}})=>{let e=[],t={};for(let r of Object.keys(i)){if(r.toLowerCase()===pt)continue;let s=U$1(r);e.push(s);let o=i[r];typeof o=="string"?t[s]=`${s}=${U$1(o)}`:Array.isArray(o)&&(t[s]=o.slice(0).reduce((n,a)=>n.concat([`${s}=${U$1(a)}`]),[]).sort().join("&"));}return e.sort().map(r=>t[r]).filter(r=>r).join("&")};g();var Rt=i=>Xt(i).toISOString().replace(/\.\d{3}Z$/,"Z"),Xt=i=>typeof i=="number"?new Date(i*1e3):typeof i=="string"?Number(i)?new Date(Number(i)*1e3):new Date(i):i;var ce=class{service;regionProvider;credentialProvider;sha256;uriEscapePath;applyChecksum;constructor({applyChecksum:e,credentials:t,region:r,service:s,sha256:o,uriEscapePath:n=true}){this.service=s,this.sha256=o,this.uriEscapePath=n,this.applyChecksum=typeof e=="boolean"?e:true,this.regionProvider=h(r),this.credentialProvider=h(t);}createCanonicalRequest(e,t,r){let s=Object.keys(t).sort();return `${e.method}
3
+ ${this.getCanonicalPath(e)}
4
+ ${bt(e)}
5
+ ${s.map(o=>`${o}:${t[o]}`).join(`
6
+ `)}
7
+
8
+ ${s.join(";")}
9
+ ${r}`}async createStringToSign(e,t$1,r,s){let o=new this.sha256;o.update(v$1(r));let n=await o.digest();return `${s}
10
+ ${e}
11
+ ${t$1}
12
+ ${t(n)}`}getCanonicalPath({path:e}){if(this.uriEscapePath){let t=[];for(let o of e.split("/"))o?.length!==0&&o!=="."&&(o===".."?t.pop():t.push(o));let r=`${e?.startsWith("/")?"/":""}${t.join("/")}${t.length>0&&e?.endsWith("/")?"/":""}`;return U$1(r).replace(/%2F/g,"/")}return e}validateResolvedCredentials(e){if(typeof e!="object"||typeof e.accessKeyId!="string"||typeof e.secretAccessKey!="string")throw new Error("Resolved credential object is not valid")}formatDate(e){let t=Rt(e).replace(/[-:]/g,"");return {longDate:t,shortDate:t.slice(0,8)}}getCanonicalHeaderList(e){return Object.keys(e).sort().join(";")}};g();var me={},ze=[],fe=(i,e,t)=>`${i}/${e}/${t}/${De}`,_t=async(i,e,t$1,r,s)=>{let o=await Tt(i,e.secretAccessKey,e.accessKeyId),n=`${t$1}:${r}:${s}:${t(o)}:${e.sessionToken}`;if(n in me)return me[n];for(ze.push(n);ze.length>Nt;)delete me[ze.shift()];let a=`AWS4${e.secretAccessKey}`;for(let m of [t$1,r,s,De])a=await Tt(i,a,m);return me[n]=a};var Tt=(i,e,t)=>{let r=new i(e);return r.update(v$1(t)),r.digest()};g();var Oe=({headers:i},e,t)=>{let r={};for(let s of Object.keys(i).sort()){if(i[s]==null)continue;let o=s.toLowerCase();(o in St||e?.has(o)||wt.test(o)||Et.test(o))&&(!t||t&&!t.has(o))||(r[o]=i[s].trim().replace(/\s+/g," "));}return r};g();var de=async({headers:i,body:e},t$1)=>{for(let r of Object.keys(i))if(r.toLowerCase()===J)return i[r];if(e==null)return "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855";if(typeof e=="string"||ArrayBuffer.isView(e)||a(e)){let r=new t$1;return r.update(v$1(e)),t(await r.digest())}return At};g();var kt=(i,e)=>{i=i.toLowerCase();for(let t of Object.keys(e))if(i===t.toLowerCase())return true;return false};g();var It=(i,e$1={})=>{let{headers:t,query:r={}}=e.clone(i);for(let s of Object.keys(t)){let o=s.toLowerCase();(o.slice(0,6)==="x-amz-"&&!e$1.unhoistableHeaders?.has(o)||e$1.hoistableHeaders?.has(o))&&(r[s]=t[s],delete t[s]);}return {...i,headers:t,query:r}};g();var Pe=i=>{i=e.clone(i);for(let e of Object.keys(i.headers))gt.indexOf(e.toLowerCase())>-1&&delete i.headers[e];return i};var V=class extends ce{headerFormatter=new ne;constructor({applyChecksum:e,credentials:t,region:r,service:s,sha256:o,uriEscapePath:n=true}){super({applyChecksum:e,credentials:t,region:r,service:s,sha256:o,uriEscapePath:n});}async presign(e,t={}){let{signingDate:r=new Date,expiresIn:s=3600,unsignableHeaders:o,unhoistableHeaders:n,signableHeaders:a,hoistableHeaders:m,signingRegion:c,signingService:f}=t,l=await this.credentialProvider();this.validateResolvedCredentials(l);let h=c??await this.regionProvider(),{longDate:u,shortDate:y}=this.formatDate(r);if(s>Ct)return Promise.reject("Signature version 4 presigned URLs must have an expiration date less than one week in the future");let S=fe(y,h,f??this.service),w=It(Pe(e),{unhoistableHeaders:n,hoistableHeaders:m});l.sessionToken&&(w.query[ke]=l.sessionToken),w.query[dt]=ae,w.query[lt]=`${l.accessKeyId}/${S}`,w.query[Te]=u,w.query[ut]=s.toString(10);let b=Oe(w,o,a);return w.query[ht]=this.getCanonicalHeaderList(b),w.query[_e]=await this.getSignature(u,S,this.getSigningKey(l,h,y,f),this.createCanonicalRequest(w,b,await de(e,this.sha256))),w}async sign(e,t){return typeof e=="string"?this.signString(e,t):e.headers&&e.payload?this.signEvent(e,t):e.message?this.signMessage(e,t):this.signRequest(e,t)}async signEvent({headers:e,payload:t$1},{signingDate:r=new Date,priorSignature:s,signingRegion:o,signingService:n,eventStreamCredentials:a}){let m=o??await this.regionProvider(),{shortDate:c,longDate:f}=this.formatDate(r),l=fe(c,m,n??this.service),h=await de({headers:{},body:t$1},this.sha256),u=new this.sha256;u.update(e);let y=t(await u.digest()),S=[xt,f,l,s,y,h].join(`
13
+ `);return this.signString(S,{signingDate:r,signingRegion:m,signingService:n,eventStreamCredentials:a})}async signMessage(e,{signingDate:t=new Date,signingRegion:r,signingService:s,eventStreamCredentials:o}){return this.signEvent({headers:this.headerFormatter.format(e.message.headers),payload:e.message.body},{signingDate:t,signingRegion:r,signingService:s,priorSignature:e.priorSignature,eventStreamCredentials:o}).then(a=>({message:e.message,signature:a}))}async signString(e,{signingDate:t$1=new Date,signingRegion:r,signingService:s,eventStreamCredentials:o}={}){let n=o??await this.credentialProvider();this.validateResolvedCredentials(n);let a=r??await this.regionProvider(),{shortDate:m}=this.formatDate(t$1),c=new this.sha256(await this.getSigningKey(n,a,m,s));return c.update(v$1(e)),t(await c.digest())}async signRequest(e,{signingDate:t=new Date,signableHeaders:r,unsignableHeaders:s,signingRegion:o,signingService:n}={}){let a=await this.credentialProvider();this.validateResolvedCredentials(a);let m=o??await this.regionProvider(),c=Pe(e),{longDate:f,shortDate:l}=this.formatDate(t),h=fe(l,m,n??this.service);c.headers[Me]=f,a.sessionToken&&(c.headers[yt]=a.sessionToken);let u=await de(c,this.sha256);!kt(J,c.headers)&&this.applyChecksum&&(c.headers[J]=u);let y=Oe(c,s,r),S=await this.getSignature(f,h,this.getSigningKey(a,m,l,n),this.createCanonicalRequest(c,y,u));return c.headers[Ie]=`${ae} Credential=${a.accessKeyId}/${h}, SignedHeaders=${this.getCanonicalHeaderList(y)}, Signature=${S}`,c}async getSignature(e,t$1,r,s){let o=await this.createStringToSign(e,t$1,s,ae),n=new this.sha256(await r);return n.update(v$1(o)),t(await n.digest())}getSigningKey(e,t,r,s){return _t(this.sha256,e,r,t,s||this.service)}};g();var Ft={SignatureV4a:null};var Mt=i=>{let e=i.credentials,t=!!i.credentials,r;Object.defineProperty(i,"credentials",{set(c){c&&c!==e&&c!==r&&(t=true),e=c;let f=Gt(i,{credentials:e,credentialDefaultProvider:i.credentialDefaultProvider}),l=Qt(i,f);if(t&&!l.attributed){let h=typeof e=="object"&&e!==null;r=async u=>{let S=await l(u);return h&&(!S.$source||Object.keys(S.$source).length===0)?b(S,"CREDENTIALS_CODE","e"):S},r.memoized=l.memoized,r.configBound=l.configBound,r.attributed=true;}else r=l;},get(){return r},enumerable:true,configurable:true}),i.credentials=e;let{signingEscapePath:s=true,systemClockOffset:o=i.systemClockOffset||0,sha256:n}=i,a;return i.signer?a=H(i.signer):i.regionInfoProvider?a=()=>H(i.region)().then(async c=>[await i.regionInfoProvider(c,{useFipsEndpoint:await i.useFipsEndpoint(),useDualstackEndpoint:await i.useDualstackEndpoint()})||{},c]).then(([c,f])=>{let{signingRegion:l,signingService:h}=c;i.signingRegion=i.signingRegion||l||f,i.signingName=i.signingName||h||i.serviceId;let u={...i,credentials:i.credentials,region:i.signingRegion,service:i.signingName,sha256:n,uriEscapePath:s},y=i.signerConstructor||V;return new y(u)}):a=async c=>{c=Object.assign({},{name:"sigv4",signingName:i.signingName||i.defaultSigningName,signingRegion:await H(i.region)(),properties:{}},c);let f=c.signingRegion,l=c.signingName;i.signingRegion=i.signingRegion||f,i.signingName=i.signingName||l||i.serviceId;let h={...i,credentials:i.credentials,region:i.signingRegion,service:i.signingName,sha256:n,uriEscapePath:s},u=i.signerConstructor||V;return new u(h)},Object.assign(i,{systemClockOffset:o,signingEscapePath:s,signer:a})};function Gt(i,{credentials:e,credentialDefaultProvider:t}){let r;return e?e?.memoized?r=e:r=M(e,K$1,L):t?r=H(t(Object.assign({},i,{parentClientConfig:i}))):r=async()=>{throw new Error("@aws-sdk/core::resolveAwsSdkSigV4Config - `credentials` not provided and no credentialDefaultProvider was configured.")},r.memoized=true,r}function Qt(i,e){if(e.configBound)return e;let t=async r=>e({...r,callerClientConfig:i});return t.memoized=e.memoized,t.configBound=true,t}g();g();g();g();var D=class{queryCompat;errorRegistry;constructor(e=false){this.queryCompat=e;}resolveRestContentType(e,t){let r=t.getMemberSchemas(),s=Object.values(r).find(o=>!!o.getMergedTraits().httpPayload);if(s){let o=s.getMergedTraits().mediaType;return o||(s.isStringSchema()?"text/plain":s.isBlobSchema()?"application/octet-stream":e)}else if(!t.isUnitSchema()&&Object.values(r).find(n=>{let{httpQuery:a,httpQueryParams:m,httpHeader:c,httpLabel:f,httpPrefixHeaders:l}=n.getMergedTraits();return !a&&!m&&!c&&!f&&l===void 0}))return e}async getErrorSchemaOrThrowBaseException(e,t,r,s,o,n){let a=e;e.includes("#")&&([,a]=e.split("#"));let m={$metadata:o,$fault:r.statusCode<500?"client":"server"};if(!this.errorRegistry)throw new Error("@aws-sdk/core/protocols - error handler not initialized.");try{return {errorSchema:n?.(this.errorRegistry,a)??this.errorRegistry.getSchema(e),errorMetadata:m}}catch{s.message=s.message??s.Message??"UnknownError";let f=this.errorRegistry,l=f.getBaseException();if(l){let y=f.getErrorCtor(l)??Error;throw this.decorateServiceException(Object.assign(new y({name:a}),m),s)}let h=s,u=h?.message??h?.Message??h?.Error?.Message??h?.Error?.message;throw this.decorateServiceException(Object.assign(new Error(u),{name:a},m),s)}}compose(e,t,r){let s=r;t.includes("#")&&([s]=t.split("#"));let o=n.for(s),n$1=n.for("smithy.ts.sdk.synthetic."+r);e.copyFrom(o),e.copyFrom(n$1),this.errorRegistry=e;}decorateServiceException(e,t={}){if(this.queryCompat){let r=e.Message??t.Message,s=g$1(e,t);r&&(s.message=r);let o=s.Error??{};o.Type=s.Error?.Type,o.Code=s.Error?.Code,o.Message=s.Error?.message??s.Error?.Message??r,s.Error=o;let n=s.$metadata.requestId;return n&&(s.RequestId=n),s}return g$1(e,t)}setQueryCompatError(e,t){let r=t.headers?.["x-amzn-query-error"];if(e!==void 0&&r!=null){let[s,o]=r.split(";"),n=Object.keys(e),a={Code:s,Type:o};e.Code=s,e.Type=o;for(let m=0;m<n.length;m++){let c=n[m];a[c==="message"?"Message":c]=e[c];}delete a.__type,e.Error=a;}}queryCompatOutput(e,t){e.Error&&(t.Error=e.Error),e.Type&&(t.Type=e.Type),e.Code&&(t.Code=e.Code);}findQueryCompatibleError(e,t){try{return e.getSchema(t)}catch{return e.find(s=>m.of(s).getMergedTraits().awsQueryError?.[0]===t)}}};g();g();var A=class{serdeContext;setSerdeContext(e){this.serdeContext=e;}};g();g();var j=class{from;to;keys;constructor(e,t){this.from=e,this.to=t;let r=Object.keys(this.from),s=new Set(r);s.delete("__type"),this.keys=s;}mark(e){this.keys.delete(e);}hasUnknown(){return this.keys.size===1&&Object.keys(this.to).length===0}writeUnknown(){if(this.hasUnknown()){let e=this.keys.values().next().value,t=this.from[e];this.to.$unknown=[e,t];}}};g();function Dt(i,e,t){if(t?.source){let r$1=t.source;if(typeof e=="number"&&(e>Number.MAX_SAFE_INTEGER||e<Number.MIN_SAFE_INTEGER||r$1!==String(e)))return r$1.includes(".")?new r(r$1,"bigDecimal"):BigInt(r$1)}return e}g();g();var zt=(i,e)=>J$1(i,e).then(t=>(e?.utf8Encoder??e$1)(t));var Pt=(i,e)=>zt(i,e).then(t=>{if(t.length)try{return JSON.parse(t)}catch(r){throw r?.name==="SyntaxError"&&Object.defineProperty(r,"$responseBodyText",{value:t}),r}return {}});var Ot=(i,e)=>Object.keys(i).find(t=>t.toLowerCase()===e.toLowerCase()),He=i=>{let e=i;return typeof e=="number"&&(e=e.toString()),e.indexOf(",")>=0&&(e=e.split(",")[0]),e.indexOf(":")>=0&&(e=e.split(":")[0]),e.indexOf("#")>=0&&(e=e.split("#")[1]),e},Ht=(i,e)=>Jt(i,e,["header","code","type"]);var Jt=({headers:i},e,t)=>{for(;t.length>0;)switch(t.shift()){case "header":let s=Ot(i??{},"x-amzn-errortype");if(s!==void 0)return He(i[s]);break;case "code":let o=Ot(e??{},"code");if(o&&e[o]!==void 0)return He(e[o]);break;case "type":if(e?.__type!==void 0)return He(e.__type);break}};var le=class extends A{settings;constructor(e){super(),this.settings=e;}async read(e,t){return this._read(e,typeof t=="string"?JSON.parse(t,Dt):await Pt(t,this.serdeContext))}readObject(e,t){return this._read(e,t)}_read(e,t){let r$1=t!==null&&typeof t=="object",s=m.of(e);if(r$1){if(s.isStructSchema()){let n=t,a=s.isUnionSchema(),m={},c,{jsonName:f}=this.settings;f&&(c={});let l;a&&(l=new j(n,m));for(let[h,u]of s.structIterator()){let y=h;f&&(y=u.getMergedTraits().jsonName??y,c[y]=h),a&&l.mark(y),n[y]!=null&&(m[h]=this._read(u,n[y]));}if(a)l.writeUnknown();else if(typeof n.__type=="string")for(let h in n){let u=n[h],y=f?c[h]??h:h;y in m||(m[y]=u);}return m}if(Array.isArray(t)&&s.isListSchema()){let n=s.getValueSchema(),a=[];for(let m of t)a.push(this._read(n,m));return a}if(s.isMapSchema()){let n=s.getValueSchema(),a={};for(let m in t)a[m]=this._read(n,t[m]);return a}}if(s.isBlobSchema()&&typeof t=="string")return b$1(t);let o=s.getMergedTraits().mediaType;if(s.isStringSchema()&&typeof t=="string"&&o)return o==="application/json"||o.endsWith("+json")?k$1.from(t):t;if(s.isTimestampSchema()&&t!=null)switch(N$1(s,this.settings)){case 5:return h$1(t);case 6:return i(t);case 7:return j$1(t);default:return console.warn("Missing timestamp format, parsing value with Date constructor:",t),new Date(t)}if(s.isBigIntegerSchema()&&(typeof t=="number"||typeof t=="string"))return BigInt(t);if(s.isBigDecimalSchema()&&t!=null){if(t instanceof r)return t;let n=t;return n.type==="bigDecimal"&&"string"in n?new r(n.string,n.type):new r(String(t),"bigDecimal")}if(s.isNumericSchema()&&typeof t=="string"){switch(t){case "Infinity":return 1/0;case "-Infinity":return -1/0;case "NaN":return NaN}return t}if(s.isDocumentSchema())if(r$1){let n=Array.isArray(t)?[]:{};for(let a in t){let m=t[a];m instanceof r?n[a]=m:n[a]=this._read(s,m);}return n}else return structuredClone(t);return t}};g();g();var $t="\u039D",he=class{values=new Map;counter=0;stage=0;createReplacer(){if(this.stage===1)throw new Error("@aws-sdk/core/protocols - JsonReplacer already created.");if(this.stage===2)throw new Error("@aws-sdk/core/protocols - JsonReplacer exhausted.");return this.stage=1,(e,t)=>{if(t instanceof r){let r=`${$t+"nv"+this.counter++}_`+t.string;return this.values.set(`"${r}"`,t.string),r}if(typeof t=="bigint"){let r=t.toString(),s=`${$t+"b"+this.counter++}_`+r;return this.values.set(`"${s}"`,r),s}return t}}replaceInJson(e){if(this.stage===0)throw new Error("@aws-sdk/core/protocols - JsonReplacer not created yet.");if(this.stage===2)throw new Error("@aws-sdk/core/protocols - JsonReplacer exhausted.");if(this.stage=2,this.counter===0)return e;for(let[t,r]of this.values)e=e.replace(t,r);return e}};var ue=class extends A{settings;buffer;useReplacer=false;rootSchema;constructor(e){super(),this.settings=e;}write(e,t){this.rootSchema=m.of(e),this.buffer=this._write(this.rootSchema,t);}flush(){let{rootSchema:e,useReplacer:t}=this;if(this.rootSchema=void 0,this.useReplacer=false,e?.isStructSchema()||e?.isDocumentSchema()){if(!t)return JSON.stringify(this.buffer);let r=new he;return r.replaceInJson(JSON.stringify(this.buffer,r.createReplacer(),0))}return this.buffer}writeDiscriminatedDocument(e,t){this.write(e,t),typeof this.buffer=="object"&&(this.buffer.__type=m.of(e).getName(true));}_write(e,t,r$1){let s=t!==null&&typeof t=="object",o=m.of(e);if(s){if(o.isStructSchema()){let n=t,a={},{jsonName:m}=this.settings,c;m&&(c={});let f=0;for(let[l,h]of o.structIterator()){let u=this._write(h,n[l],o);if(u!==void 0){let y=l;m&&(y=h.getMergedTraits().jsonName??l,c[l]=y),a[y]=u,f++;}}if(o.isUnionSchema()&&f===0){let{$unknown:l}=n;if(Array.isArray(l)){let[h,u]=l;a[h]=this._write(15,u);}}else if(typeof n.__type=="string")for(let l in n){let h=n[l],u=m?c[l]??l:l;u in a||(a[u]=this._write(15,h));}return a}if(Array.isArray(t)&&o.isListSchema()){let n=o.getValueSchema(),a=[],m=!!o.getMergedTraits().sparse;for(let c of t)(m||c!=null)&&a.push(this._write(n,c));return a}if(o.isMapSchema()){let n=o.getValueSchema(),a={},m=!!o.getMergedTraits().sparse;for(let c in t){let f=t[c];(m||f!=null)&&(a[c]=this._write(n,f));}return a}if(t instanceof Uint8Array&&(o.isBlobSchema()||o.isDocumentSchema()))return o===this.rootSchema?t:(this.serdeContext?.base64Encoder??d)(t);if(t instanceof Date&&(o.isTimestampSchema()||o.isDocumentSchema()))switch(N$1(o,this.settings)){case 5:return t.toISOString().replace(".000Z","Z");case 6:return f$1(t);case 7:return t.getTime()/1e3;default:return console.warn("Missing timestamp format, using epoch seconds",t),t.getTime()/1e3}t instanceof r&&(this.useReplacer=true);}if(!(t===null&&r$1?.isStructSchema())){if(o.isStringSchema()){if(typeof t>"u"&&o.isIdempotencyToken())return D$1();let n=o.getMergedTraits().mediaType;return t!=null&&n&&(n==="application/json"||n.endsWith("+json"))?k$1.from(t):t}if(typeof t=="number"&&o.isNumericSchema())return Math.abs(t)===1/0||isNaN(t)?String(t):t;if(typeof t=="string"&&o.isBlobSchema())return o===this.rootSchema?t:(this.serdeContext?.base64Encoder??d)(t);if(typeof t=="bigint"&&(this.useReplacer=true),o.isDocumentSchema())if(s){let n=Array.isArray(t)?[]:{};for(let a in t){let m=t[a];m instanceof r?(this.useReplacer=true,n[a]=m):n[a]=this._write(o,m);}return n}else return structuredClone(t);return t}}};var ge=class extends A{settings;constructor(e){super(),this.settings=e;}createSerializer(){let e=new ue(this.settings);return e.setSerdeContext(this.serdeContext),e}createDeserializer(){let e=new le(this.settings);return e.setSerdeContext(this.serdeContext),e}};var $e=class extends L$1{serializer;deserializer;codec;mixin=new D;constructor({defaultNamespace:e,errorTypeRegistries:t}){super({defaultNamespace:e,errorTypeRegistries:t});let r={timestampFormat:{useTrait:true,default:7},httpBindings:true,jsonName:true};this.codec=new ge(r),this.serializer=new Q(this.codec.createSerializer(),r),this.deserializer=new P(this.codec.createDeserializer(),r);}getShapeId(){return "aws.protocols#restJson1"}getPayloadCodec(){return this.codec}setSerdeContext(e){this.codec.setSerdeContext(e),super.setSerdeContext(e);}async serializeRequest(e,t,r){let s=await super.serializeRequest(e,t,r),o=m.of(e.input);if(!s.headers["content-type"]){let n=this.mixin.resolveRestContentType(this.getDefaultContentType(),o);n&&(s.headers["content-type"]=n);}return s.body==null&&s.headers["content-type"]===this.getDefaultContentType()&&(s.body="{}"),s}async deserializeResponse(e,t,r){let s=await super.deserializeResponse(e,t,r),o=m.of(e.output);for(let[n,a]of o.structIterator())a.getMemberTraits().httpPayload&&!(n in s)&&(s[n]=null);return s}async handleError(e,t,r,s,o){let n=Ht(r,s)??"Unknown";this.mixin.compose(this.compositeErrorRegistry,n,this.options.defaultNamespace);let{errorSchema:a,errorMetadata:m$1}=await this.mixin.getErrorSchemaOrThrowBaseException(n,this.options.defaultNamespace,r,s,o),c=m.of(a),f=s.message??s.Message??"UnknownError",l=this.compositeErrorRegistry.getErrorCtor(a)??Error,h=new l({});await this.deserializeHttpMessage(a,t,r,s);let u={},y=this.codec.createDeserializer();for(let[S,w]of c.structIterator()){let b=w.getMergedTraits().jsonName??S;u[S]=y.readObject(w,s[b]);}throw this.mixin.decorateServiceException(Object.assign(h,m$1,{$fault:c.getMergedTraits().error,message:f},u),s)}getDefaultContentType(){return "application/json"}};g();g();g();g();g();var Wt=/[&<>"]/g,Yt={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;"};function Ut(i){return i.replace(Wt,e=>Yt[e])}g();g();var Zt=/[&"'<>\r\n\u0085\u2028]/g,er={"&":"&amp;",'"':"&quot;","'":"&apos;","<":"&lt;",">":"&gt;","\r":"&#x0D;","\n":"&#x0A;","\x85":"&#x85;","\u2028":"&#x2028;"};function Lt(i){return i.replace(Zt,e=>er[e])}var z=class{value;constructor(e){this.value=e;}toString(){return Lt(""+this.value)}};var N=class i{name;children;attributes={};static of(e,t,r){let s=new i(e);return t!==void 0&&s.addChildNode(new z(t)),r!==void 0&&s.withName(r),s}constructor(e,t=[]){this.name=e,this.children=t;}withName(e){return this.name=e,this}addAttribute(e,t){return this.attributes[e]=t,this}addChildNode(e){return this.children.push(e),this}removeAttribute(e){return delete this.attributes[e],this}n(e){return this.name=e,this}c(e){return this.children.push(e),this}a(e,t){return t!=null&&(this.attributes[e]=t),this}cc(e,t,r=t){if(e[t]!=null){let s=i.of(t,e[t]).withName(r);this.c(s);}}l(e,t,r,s){e[t]!=null&&s().map(n=>{n.withName(r),this.c(n);});}lc(e,t,r,s){if(e[t]!=null){let o=s(),n=new i(r);o.map(a=>{n.c(a);}),this.c(n);}}toString(){let e=!!this.children.length,t=`<${this.name}`,r=this.attributes;for(let s of Object.keys(r)){let o=r[s];o!=null&&(t+=` ${s}="${Ut(""+o)}"`);}return t+=e?`>${this.children.map(s=>s.toString()).join("")}</${this.name}>`:"/>"}};g();function Le(i){return new Ue(i).parse()}var Ue=class i{x;i=0;z;constructor(e){this.x=e,this.x=e.replace(/\r\n?/g,`
14
+ `),this.z=this.x.length;}parse(){let e=this,{z:t}=e;for(;e.i<t&&(e.trim(),!(e.i>=t));)if(e.isNext("<?"))e.readTo("?>"),e.trim();else if(e.isNext("<!--"))e.readTo("-->"),e.trim();else if(e.isNext("<!DOCTYPE",false))e.skipDoctype(),e.trim();else if(e.x[e.i]==="<"){let r=e.parseTag();return {[r.tag]:r.value}}else throw new Error("@aws-sdk XML parse error: unexpected content.");throw new Error("@aws-sdk XML parse error: no root element.")}isNext(e,t=true){let r=this;return t?r.x.startsWith(e,r.i):r.x.toLowerCase().startsWith(e.toLowerCase(),r.i)}readTo(e){let t=this,r=t.x.indexOf(e,t.i);if(r===-1)throw new Error(`@aws-sdk XML parse error: expected "${e}" not found.`);let s=t.x.slice(t.i,r);return t.i=r+e.length,s}trim(){let e=this;for(;e.i<e.z&&` \r
15
+ `.includes(e.x[e.i]);)++e.i;}readAttrValue(){let e=this,t=e.x[e.i];++e.i;let r="";for(;e.i<e.z&&e.x[e.i]!==t;)r+=e.x[e.i++];return ++e.i,e.decodeEntities(r)}parseTag(){let e=this;++e.i;let t="";for(;e.i<e.z&&!` \r
16
+ >/`.includes(e.x[e.i]);)t+=e.x[e.i++];let r=false,s=Object.create(null);for(;e.i<e.z&&(e.trim(),!">/".includes(e.x[e.i]));){let f="";for(;e.i<e.z&&!`= \r
17
+ >/?`.includes(e.x[e.i]);)f+=e.x[e.i++];if(e.trim(),e.x[e.i]!=="=")break;++e.i,e.trim(),s[f]=e.readAttrValue(),r=true;}if(e.i>=e.z)throw new Error("@aws-sdk XML parse error: unexpected end of input.");if(e.x[e.i]==="/"){if(++e.i,e.i>=e.z||e.x[e.i]!==">")throw new Error("@aws-sdk XML parse error: expected > at the end of self-closing tag.");return ++e.i,Object.setPrototypeOf(s,Object.prototype),{tag:t,value:r?s:""}}if(e.x[e.i]!==">")throw new Error("@aws-sdk XML parse error: expected > at the end of opening tag.");++e.i;let o=[],n=[],a=false;for(;e.i<e.z&&!e.isNext("</");)if(e.x[e.i]==="<")e.isNext("<!--")?e.readTo("-->"):e.isNext("<![CDATA[")?(e.i+=9,o.push(e.readTo("]]>"))):e.isNext("<?")?e.readTo("?>"):(a=true,n.push(e.parseTag()));else {let f="";for(;e.i<e.z&&e.x[e.i]!=="<";)f+=e.x[e.i++];o.push(e.decodeEntities(f));}if(!e.isNext("</"))throw new Error(`@aws-sdk XML parse error: missing closing tag </${t}>.`);e.i+=2;let m=e.readTo(">").trim();if(m!==t)throw new Error(`@aws-sdk XML parse error: mismatched tags <${t}> and </${m}>.`);if(!r&&o.length===0&&!a)return {tag:t,value:""};if(!r&&!a){let f=o.length===1?o[0]:o.join("");return f.trim()===""&&f.includes(`
18
+ `)?{tag:t,value:""}:{tag:t,value:f}}let c=Object.create(null);for(let f of o)f.trim()===""&&f.includes(`
19
+ `)||(c["#text"]="#text"in c?c["#text"]+f:f);for(let f of n)f.tag in c?Array.isArray(c[f.tag])?c[f.tag].push(f.value):c[f.tag]=[c[f.tag],f.value]:c[f.tag]=f.value;for(let[f,l]of Object.entries(s))c[f]=l;return Object.setPrototypeOf(c,Object.prototype),{tag:t,value:c}}static ENTITIES={amp:"&",lt:"<",gt:">",quot:'"',apos:"'"};skipDoctype(){let e=this;e.i+=9;let t=0;for(;e.i<e.z;){let r=e.x[e.i];if(r==="[")++t;else if(r==="]")--t;else if(r===">"&&t===0){++e.i;return}++e.i;}throw new Error("@aws-sdk XML parse error: unclosed DOCTYPE.")}decodeEntities(e){return e.replace(/&(?:#x([0-9a-fA-F]{1,6})|#(\d{1,7})|([a-zA-Z][a-zA-Z0-9]{0,30}));/g,(t,r,s,o)=>r?String.fromCharCode(parseInt(r,16)):s?String.fromCharCode(parseInt(s,10)):i.ENTITIES[o]??"")}};var X=class extends A{settings;stringDeserializer;constructor(e){super(),this.settings=e,this.stringDeserializer=new O(e);}setSerdeContext(e){this.serdeContext=e,this.stringDeserializer.setSerdeContext(e);}read(e,t,r){let s=m.of(e),o=s.getMemberSchemas();if(s.isStructSchema()&&s.isMemberSchema()&&!!Object.values(o).find(c=>!!c.getMemberTraits().eventPayload)){let c={},f=Object.keys(o)[0];return o[f].isBlobSchema()?c[f]=t:c[f]=this.read(o[f],t),c}let a=(this.serdeContext?.utf8Encoder??e$1)(t),m$1=this.parseXml(a);return this.readSchema(e,r?m$1[r]:m$1)}readSchema(e,t){let r=m.of(e);if(r.isUnitSchema())return;let s=r.getMergedTraits();if(r.isListSchema()&&!Array.isArray(t))return this.readSchema(r,[t]);if(t==null)return t;if(typeof t=="object"){let o=!!s.xmlFlattened;if(r.isListSchema()){let a=r.getValueSchema(),m=[],c=a.getMergedTraits().xmlName??"member",f=o?t:(t[0]??t)[c];if(f==null)return m;let l=Array.isArray(f)?f:[f];for(let h of l)m.push(this.readSchema(a,h));return m}let n={};if(r.isMapSchema()){let a=r.getKeySchema(),m=r.getValueSchema(),c;o?c=Array.isArray(t)?t:[t]:c=Array.isArray(t.entry)?t.entry:[t.entry];let f=a.getMergedTraits().xmlName??"key",l=m.getMergedTraits().xmlName??"value";for(let h of c){let u=h[f],y=h[l];n[u]=this.readSchema(m,y);}return n}if(r.isStructSchema()){let a=r.isUnionSchema(),m;a&&(m=new j(t,n));for(let[c,f]of r.structIterator()){let l=f.getMergedTraits(),h=l.httpPayload?l.xmlName??f.getName():f.getMemberTraits().xmlName??c;a&&m.mark(h),t[h]!=null&&(n[c]=this.readSchema(f,t[h]));}return a&&m.writeUnknown(),n}if(r.isDocumentSchema())return t;throw new Error(`@aws-sdk/core/protocols - xml deserializer unhandled schema type for ${r.getName(true)}`)}return r.isListSchema()?[]:r.isMapSchema()||r.isStructSchema()?{}:this.stringDeserializer.read(r,t)}parseXml(e){if(e.length){let t;try{t=Le(e);}catch(n){throw n&&typeof n=="object"&&Object.defineProperty(n,"$responseBodyText",{value:e}),n}let r="#text",s=Object.keys(t)[0],o=t[s];return o[r]&&(o[s]=o[r],delete o[r]),l(o)}return {}}};g();var pe=class extends A{settings;buffer;constructor(e){super(),this.settings=e;}write(e,t,r$1=""){this.buffer===void 0&&(this.buffer="");let s=m.of(e);if(r$1&&!r$1.endsWith(".")&&(r$1+="."),s.isBlobSchema())(typeof t=="string"||t instanceof Uint8Array)&&(this.writeKey(r$1),this.writeValue((this.serdeContext?.base64Encoder??d)(t)));else if(s.isBooleanSchema()||s.isNumericSchema()||s.isStringSchema())t!=null?(this.writeKey(r$1),this.writeValue(String(t))):s.isIdempotencyToken()&&(this.writeKey(r$1),this.writeValue(D$1()));else if(s.isBigIntegerSchema())t!=null&&(this.writeKey(r$1),this.writeValue(String(t)));else if(s.isBigDecimalSchema())t!=null&&(this.writeKey(r$1),this.writeValue(t instanceof r?t.string:String(t)));else if(s.isTimestampSchema()){if(t instanceof Date)switch(this.writeKey(r$1),N$1(s,this.settings)){case 5:this.writeValue(t.toISOString().replace(".000Z","Z"));break;case 6:this.writeValue(f$1(t));break;case 7:this.writeValue(String(t.getTime()/1e3));break}}else if(s.isDocumentSchema())Array.isArray(t)?this.write(79,t,r$1):t instanceof Date?this.write(4,t,r$1):t instanceof Uint8Array?this.write(21,t,r$1):t&&typeof t=="object"?this.write(143,t,r$1):(this.writeKey(r$1),this.writeValue(String(t)));else if(s.isListSchema()){if(Array.isArray(t))if(t.length===0)this.settings.serializeEmptyLists&&(this.writeKey(r$1),this.writeValue(""));else {let o=s.getValueSchema(),n=this.settings.flattenLists||s.getMergedTraits().xmlFlattened,a=1;for(let m of t){if(m==null)continue;let c=o.getMergedTraits(),f=this.getKey("member",c.xmlName,c.ec2QueryName),l=n?`${r$1}${a}`:`${r$1}${f}.${a}`;this.write(o,m,l),++a;}}}else if(s.isMapSchema()){if(t&&typeof t=="object"){let o=s.getKeySchema(),n=s.getValueSchema(),a=s.getMergedTraits().xmlFlattened,m=1;for(let c in t){let f=t[c];if(f==null)continue;let l=o.getMergedTraits(),h=this.getKey("key",l.xmlName,l.ec2QueryName),u=a?`${r$1}${m}.${h}`:`${r$1}entry.${m}.${h}`,y=n.getMergedTraits(),S=this.getKey("value",y.xmlName,y.ec2QueryName),w=a?`${r$1}${m}.${S}`:`${r$1}entry.${m}.${S}`;this.write(o,c,u),this.write(n,f,w),++m;}}}else if(s.isStructSchema()){if(t&&typeof t=="object"){let o=false;for(let[n,a]of s.structIterator()){if(t[n]==null&&!a.isIdempotencyToken())continue;let m=a.getMergedTraits(),c=this.getKey(n,m.xmlName,m.ec2QueryName,"struct"),f=`${r$1}${c}`;this.write(a,t[n],f),o=true;}if(!o&&s.isUnionSchema()){let{$unknown:n}=t;if(Array.isArray(n)){let[a,m]=n,c=`${r$1}${a}`;this.write(15,m,c);}}}}else if(!s.isUnitSchema())throw new Error(`@aws-sdk/core/protocols - QuerySerializer unrecognized schema type ${s.getName(true)}`)}flush(){if(this.buffer===void 0)throw new Error("@aws-sdk/core/protocols - QuerySerializer cannot flush with nothing written to buffer.");let e=this.buffer;return delete this.buffer,e}getKey(e,t,r,s){let{ec2:o,capitalizeKeys:n}=this.settings;if(o&&r)return r;let a=t??e;return n&&s==="struct"?a[0].toUpperCase()+a.slice(1):a}writeKey(e){e.endsWith(".")&&(e=e.slice(0,e.length-1)),this.buffer+=`&${K$2(e)}=`;}writeValue(e){this.buffer+=K$2(e);}};var Be=class extends M$1{options;serializer;deserializer;mixin=new D;constructor(e){super({defaultNamespace:e.defaultNamespace,errorTypeRegistries:e.errorTypeRegistries}),this.options=e;let t={timestampFormat:{useTrait:true,default:5},httpBindings:false,xmlNamespace:e.xmlNamespace,serviceNamespace:e.defaultNamespace,serializeEmptyLists:true};this.serializer=new pe(t),this.deserializer=new X(t);}getShapeId(){return "aws.protocols#awsQuery"}setSerdeContext(e){this.serializer.setSerdeContext(e),this.deserializer.setSerdeContext(e);}getPayloadCodec(){throw new Error("AWSQuery protocol has no payload codec.")}async serializeRequest(e,t,r){let s=await super.serializeRequest(e,t,r);s.path.endsWith("/")||(s.path+="/"),s.headers["content-type"]="application/x-www-form-urlencoded",(k(e.input)==="unit"||!s.body)&&(s.body="");let o=e.name.split("#")[1]??e.name;return s.body=`Action=${o}&Version=${this.options.version}`+s.body,s.body.endsWith("&")&&(s.body=s.body.slice(-1)),s}async deserializeResponse(e,t,r){let s=this.deserializer,o=m.of(e.output),n={};if(r.statusCode>=300){let f=await J$1(r.body,t);f.byteLength>0&&Object.assign(n,await s.read(15,f)),await this.handleError(e,t,r,n,this.deserializeMetadata(r));}for(let f in r.headers){let l=r.headers[f];delete r.headers[f],r.headers[f.toLowerCase()]=l;}let a=e.name.split("#")[1]??e.name,m$1=o.isStructSchema()&&this.useNestedResult()?a+"Result":void 0,c=await J$1(r.body,t);return c.byteLength>0&&Object.assign(n,await s.read(o,c,m$1)),n.$metadata=this.deserializeMetadata(r),n}useNestedResult(){return true}async handleError(e,t,r,s,o){let n=this.loadQueryErrorCode(r,s)??"Unknown";this.mixin.compose(this.compositeErrorRegistry,n,this.options.defaultNamespace);let a=this.loadQueryError(s)??{},m$1=this.loadQueryErrorMessage(s);a.message=m$1,a.Error={Type:a.Type,Code:a.Code,Message:m$1};let{errorSchema:c,errorMetadata:f}=await this.mixin.getErrorSchemaOrThrowBaseException(n,this.options.defaultNamespace,r,a,o,this.mixin.findQueryCompatibleError),l=m.of(c),h=this.compositeErrorRegistry.getErrorCtor(c)??Error,u=new h({}),y={Type:a.Error.Type,Code:a.Error.Code,Error:a.Error};for(let[S,w]of l.structIterator()){let b=w.getMergedTraits().xmlName??S,C=a[b]??s[b];y[S]=this.deserializer.readSchema(w,C);}throw this.mixin.decorateServiceException(Object.assign(u,f,{$fault:l.getMergedTraits().error,message:m$1},y),s)}loadQueryErrorCode(e,t){let r=(t.Errors?.[0]?.Error??t.Errors?.Error??t.Error)?.Code;if(r!==void 0)return r;if(e.statusCode==404)return "NotFound"}loadQueryError(e){return e.Errors?.[0]?.Error??e.Errors?.Error??e.Error}loadQueryErrorMessage(e){let t=this.loadQueryError(e);return t?.message??t?.Message??e.message??e.Message??"Unknown"}getDefaultContentType(){return "application/x-www-form-urlencoded"}};g();g();g();var Bt=(i,e)=>{if(e?.Error?.Code!==void 0)return e.Error.Code;if(e?.Code!==void 0)return e.Code;if(i.statusCode==404)return "NotFound"};g();g();var ye=class extends A{settings;stringBuffer;byteBuffer;buffer;constructor(e){super(),this.settings=e;}write(e,t){let r=m.of(e);if(r.isStringSchema()&&typeof t=="string")this.stringBuffer=t;else if(r.isBlobSchema())this.byteBuffer="byteLength"in t?t:(this.serdeContext?.base64Decoder??b$1)(t);else {this.buffer=this.writeStruct(r,t,void 0);let s=r.getMergedTraits();s.httpPayload&&!s.xmlName&&this.buffer.withName(r.getName());}}flush(){if(this.byteBuffer!==void 0){let t=this.byteBuffer;return delete this.byteBuffer,t}if(this.stringBuffer!==void 0){let t=this.stringBuffer;return delete this.stringBuffer,t}let e=this.buffer;return this.settings.xmlNamespace&&(e?.attributes?.xmlns||e.addAttribute("xmlns",this.settings.xmlNamespace)),delete this.buffer,e.toString()}writeStruct(e,t,r){let s=e.getMergedTraits(),o=e.isMemberSchema()&&!s.httpPayload?e.getMemberTraits().xmlName??e.getMemberName():s.xmlName??e.getName();if(!o||!e.isStructSchema())throw new Error(`@aws-sdk/core/protocols - xml serializer, cannot write struct with empty name or non-struct, schema=${e.getName(true)}.`);let n=N.of(o),[a,m]=this.getXmlnsAttribute(e,r);for(let[f,l]of e.structIterator()){let h=t[f];if(h!=null||l.isIdempotencyToken()){if(l.getMergedTraits().xmlAttribute){n.addAttribute(l.getMergedTraits().xmlName??f,this.writeSimple(l,h));continue}if(l.isListSchema())this.writeList(l,h,n,m);else if(l.isMapSchema())this.writeMap(l,h,n,m);else if(l.isStructSchema())n.addChildNode(this.writeStruct(l,h,m));else {let u=N.of(l.getMergedTraits().xmlName??l.getMemberName());this.writeSimpleInto(l,h,u,m),n.addChildNode(u);}}}let{$unknown:c}=t;if(c&&e.isUnionSchema()&&Array.isArray(c)&&Object.keys(t).length===1){let[f,l]=c,h=N.of(f);if(typeof l!="string")if(t instanceof N||t instanceof z)n.addChildNode(t);else throw new Error("@aws-sdk - $unknown union member in XML requires value of type string, @aws-sdk/xml-builder::XmlNode or XmlText.");this.writeSimpleInto(0,l,h,m),n.addChildNode(h);}return m&&n.addAttribute(a,m),n}writeList(e,t,r,s){if(!e.isMemberSchema())throw new Error(`@aws-sdk/core/protocols - xml serializer, cannot write non-member list: ${e.getName(true)}`);let o=e.getMergedTraits(),n=e.getValueSchema(),a=n.getMergedTraits(),m=!!a.sparse,c=!!o.xmlFlattened,[f,l]=this.getXmlnsAttribute(e,s),h=(u,y)=>{if(n.isListSchema())this.writeList(n,Array.isArray(y)?y:[y],u,l);else if(n.isMapSchema())this.writeMap(n,y,u,l);else if(n.isStructSchema()){let S=this.writeStruct(n,y,l);u.addChildNode(S.withName(c?o.xmlName??e.getMemberName():a.xmlName??"member"));}else {let S=N.of(c?o.xmlName??e.getMemberName():a.xmlName??"member");this.writeSimpleInto(n,y,S,l),u.addChildNode(S);}};if(c)for(let u of t)(m||u!=null)&&h(r,u);else {let u=N.of(o.xmlName??e.getMemberName());l&&u.addAttribute(f,l);for(let y of t)(m||y!=null)&&h(u,y);r.addChildNode(u);}}writeMap(e,t,r,s,o=false){if(!e.isMemberSchema())throw new Error(`@aws-sdk/core/protocols - xml serializer, cannot write non-member map: ${e.getName(true)}`);let n=e.getMergedTraits(),a=e.getKeySchema(),c=a.getMergedTraits().xmlName??"key",f=e.getValueSchema(),l=f.getMergedTraits(),h=l.xmlName??"value",u=!!l.sparse,y=!!n.xmlFlattened,[S,w]=this.getXmlnsAttribute(e,s),b=(C,O,_)=>{let F=N.of(c,O),[Kt,Ve]=this.getXmlnsAttribute(a,w);Ve&&F.addAttribute(Kt,Ve),C.addChildNode(F);let G=N.of(h);f.isListSchema()?this.writeList(f,_,G,w):f.isMapSchema()?this.writeMap(f,_,G,w,true):f.isStructSchema()?G=this.writeStruct(f,_,w):this.writeSimpleInto(f,_,G,w),C.addChildNode(G);};if(y)for(let C in t){let O=t[C];if(u||O!=null){let _=N.of(n.xmlName??e.getMemberName());b(_,C,O),r.addChildNode(_);}}else {let C;o||(C=N.of(n.xmlName??e.getMemberName()),w&&C.addAttribute(S,w),r.addChildNode(C));for(let O in t){let _=t[O];if(u||_!=null){let F=N.of("entry");b(F,O,_),(o?r:C).addChildNode(F);}}}}writeSimple(e,t){if(t===null)throw new Error("@aws-sdk/core/protocols - (XML serializer) cannot write null value.");let r$1=m.of(e),s=null;if(t&&typeof t=="object")if(r$1.isBlobSchema())s=(this.serdeContext?.base64Encoder??d)(t);else if(r$1.isTimestampSchema()&&t instanceof Date)switch(N$1(r$1,this.settings)){case 5:s=t.toISOString().replace(".000Z","Z");break;case 6:s=f$1(t);break;case 7:s=String(t.getTime()/1e3);break;default:console.warn("Missing timestamp format, using http date",t),s=f$1(t);break}else {if(r$1.isBigDecimalSchema()&&t)return t instanceof r?t.string:String(t);throw r$1.isMapSchema()||r$1.isListSchema()?new Error("@aws-sdk/core/protocols - xml serializer, cannot call _write() on List/Map schema, call writeList or writeMap() instead."):new Error(`@aws-sdk/core/protocols - xml serializer, unhandled schema type for object value and schema: ${r$1.getName(true)}`)}if((r$1.isBooleanSchema()||r$1.isNumericSchema()||r$1.isBigIntegerSchema()||r$1.isBigDecimalSchema())&&(s=String(t)),r$1.isStringSchema()&&(t===void 0&&r$1.isIdempotencyToken()?s=D$1():s=String(t)),s===null)throw new Error(`Unhandled schema-value pair ${r$1.getName(true)}=${t}`);return s}writeSimpleInto(e,t,r,s){let o=this.writeSimple(e,t),n=m.of(e),a=new z(o),[m$1,c]=this.getXmlnsAttribute(n,s);c&&r.addAttribute(m$1,c),r.addChildNode(a);}getXmlnsAttribute(e,t){let r=e.getMergedTraits(),[s,o]=r.xmlNamespace??[];return o&&o!==t?[s?`xmlns:${s}`:"xmlns",o]:[void 0,void 0]}};var Se=class extends A{settings;constructor(e){super(),this.settings=e;}createSerializer(){let e=new ye(this.settings);return e.setSerdeContext(this.serdeContext),e}createDeserializer(){let e=new X(this.settings);return e.setSerdeContext(this.serdeContext),e}};var Ke=class extends L$1{codec;serializer;deserializer;mixin=new D;constructor(e){super(e);let t={timestampFormat:{useTrait:true,default:5},httpBindings:true,xmlNamespace:e.xmlNamespace,serviceNamespace:e.defaultNamespace};this.codec=new Se(t),this.serializer=new Q(this.codec.createSerializer(),t),this.deserializer=new P(this.codec.createDeserializer(),t);}getPayloadCodec(){return this.codec}getShapeId(){return "aws.protocols#restXml"}async serializeRequest(e,t,r){let s=await super.serializeRequest(e,t,r),o=m.of(e.input);if(!s.headers["content-type"]){let n=this.mixin.resolveRestContentType(this.getDefaultContentType(),o);n&&(s.headers["content-type"]=n);}return typeof s.body=="string"&&s.headers["content-type"]===this.getDefaultContentType()&&!s.body.startsWith("<?xml ")&&!this.hasUnstructuredPayloadBinding(o)&&(s.body='<?xml version="1.0" encoding="UTF-8"?>'+s.body),s}async deserializeResponse(e,t,r){return super.deserializeResponse(e,t,r)}async handleError(e,t,r,s,o){let n=Bt(r,s)??"Unknown";if(this.mixin.compose(this.compositeErrorRegistry,n,this.options.defaultNamespace),s.Error&&typeof s.Error=="object")for(let S of Object.keys(s.Error))s[S]=s.Error[S],S.toLowerCase()==="message"&&(s.message=s.Error[S]);s.RequestId&&!o.requestId&&(o.requestId=s.RequestId);let{errorSchema:a,errorMetadata:m$1}=await this.mixin.getErrorSchemaOrThrowBaseException(n,this.options.defaultNamespace,r,s,o),c=m.of(a),f=s.Error?.message??s.Error?.Message??s.message??s.Message??"UnknownError",l=this.compositeErrorRegistry.getErrorCtor(a)??Error,h=new l({});await this.deserializeHttpMessage(a,t,r,s);let u={},y=this.codec.createDeserializer();for(let[S,w]of c.structIterator()){let b=w.getMergedTraits().xmlName??S,C=s.Error?.[b]??s[b];u[S]=y.readSchema(w,C);}throw this.mixin.decorateServiceException(Object.assign(h,m$1,{$fault:c.getMergedTraits().error,message:f},u),s)}getDefaultContentType(){return "application/xml"}hasUnstructuredPayloadBinding(e){for(let[,t]of e.structIterator())if(t.getMergedTraits().httpPayload)return !(t.isStructSchema()||t.isMapSchema()||t.isListSchema());return false}};export{V as a,Ft as b,$e as c,Be as d,Ke as e,K as f,oe as g,at as h,ct as i,mt as j,Mt as k};
@@ -0,0 +1,3 @@
1
+ import {createRequire}from'module';import {a as a$1}from'./chunk-CGPAS4U5.js';import {a}from'./chunk-BPMA2ECA.js';import {g as g$1,e}from'./chunk-C2PXMVR5.js';import {randomBytes}from'crypto';createRequire(import.meta.url);
2
+ g$1();var g=e(a(),1);var m="kyro:auth:",A=86400,x=604800,w=class{_redis=null;prefix;tokenExpiration;refreshExpiration;options;constructor(e={}){this.options=e,this.prefix=e.keyPrefix||m,this.tokenExpiration=e.tokenExpiration||A,this.refreshExpiration=e.refreshTokenExpiration||x;}async getRedis(){if(!this._redis){let e,t="ioredis";try{e=(await import(t)).Redis;}catch{a$1([t]),e=(await import(t)).Redis;}let s=this.options.url||`redis://${this.options.host||"localhost"}:${this.options.port||6379}`;this._redis=new e(s,{password:this.options.password,db:this.options.db,lazyConnect:true,tls:this.options.tls?{}:void 0});}return this._redis}async connect(){await this.getRedis();}async disconnect(){await(await this.getRedis()).quit();}userKey(e){return `${this.prefix}users:${e}`}sessionKey(e){return `${this.prefix}sessions:${e}`}refreshKey(e){return `${this.prefix}refresh:${e}`}userByEmailKey(e){return `${this.prefix}users:email:${e.toLowerCase()}`}passwordHistoryKey(e){return `${this.prefix}users:${e}:password_history`}async createUser(e){let t=randomBytes(16).toString("hex"),s=new Date().toISOString(),i=await this.hashPassword(e.password),r={id:t,email:e.email.toLowerCase(),passwordHash:i,role:e.role||"customer",tenantId:e.tenantId,createdAt:s,updatedAt:s},n=(await this.getRedis()).pipeline();return n.hset(this.userKey(t),this.userToHash(r)),n.set(this.userByEmailKey(e.email),t),await n.exec(),r}async findUserByEmail(e){let t=await(await this.getRedis()).get(this.userByEmailKey(e.toLowerCase()));return t?this.findUserById(t):null}async findUserById(e){let t=await(await this.getRedis()).hgetall(this.userKey(e));return !t||Object.keys(t).length===0?null:this.hashToUser(t)}async updateUser(e,t){let s=await this.findUserById(e);if(!s)return null;let i={...s,...t,id:e,updatedAt:new Date().toISOString()};if(t.email&&t.email!==s.email){let r=(await this.getRedis()).pipeline();r.del(this.userByEmailKey(s.email)),r.set(this.userByEmailKey(t.email),e),await r.exec();}return await(await this.getRedis()).hset(this.userKey(e),this.userToHash(i)),i}async deleteUser(e){let t=await this.findUserById(e);if(!t)return false;let s=(await this.getRedis()).pipeline();return s.del(this.userKey(e)),s.del(this.userByEmailKey(t.email)),s.del(this.passwordHistoryKey(e)),await s.exec(),true}async hashPassword(e){return g.default.hash(e,12)}async verifyPassword(e,t){let s=await(await this.getRedis()).get(this.userByEmailKey(e));if(!s)return null;let i=await this.findUserById(s);return !i||!i.passwordHash?null:await g.default.compare(t,i.passwordHash)?i:null}async createSession(e,t={}){let s=randomBytes(32).toString("hex"),i=randomBytes(32).toString("base64url"),r=randomBytes(32).toString("base64url"),n=new Date,a={id:s,userId:e,token:i,refreshToken:r,expiresAt:new Date(n.getTime()+this.tokenExpiration*1e3).toISOString(),createdAt:n.toISOString(),ipAddress:t.ipAddress,userAgent:t.userAgent},o=(await this.getRedis()).pipeline();return o.hset(this.sessionKey(s),this.sessionToHash(a)),o.setex(this.refreshKey(r),this.refreshExpiration,s),await o.exec(),a}async findSessionByToken(e){let t=await(await this.getRedis()).hgetall(this.sessionKey(e));return !t||Object.keys(t).length===0?null:this.hashToSession(t)}async findSessionByRefreshToken(e){let t=await(await this.getRedis()).get(this.refreshKey(e));if(!t)return null;let s=await(await this.getRedis()).hgetall(this.sessionKey(t));return !s||Object.keys(s).length===0?null:this.hashToSession(s)}async deleteSession(e){let t=await(await this.getRedis()).hgetall(this.sessionKey(e));if(!t||Object.keys(t).length===0)return false;let s=(await this.getRedis()).pipeline();return s.del(this.sessionKey(e)),t.refreshToken&&s.del(this.refreshKey(t.refreshToken)),await s.exec(),true}async deleteUserSessions(e){let t=`${this.prefix}sessions:*`,s="0",i=0;do{let[r,n]=await(await this.getRedis()).scan(s,"MATCH",t,"COUNT",100);s=r;for(let a of n)if((await(await this.getRedis()).hgetall(a)).userId===e){let l=a.replace(`${this.prefix}sessions:`,"");await this.deleteSession(l),i++;}}while(s!=="0");return i}async addPasswordToHistory(e,t){await(await this.getRedis()).lpush(this.passwordHistoryKey(e),t),await(await this.getRedis()).ltrim(this.passwordHistoryKey(e),0,4);}async getPasswordHistory(e,t=5){return (await this.getRedis()).lrange(this.passwordHistoryKey(e),0,t-1)}async isPasswordInHistory(e,t,s=5){let i=await this.getPasswordHistory(t,s);for(let r of i)if(await g.default.compare(e,r))return true;return false}userToHash(e){let t={id:e.id,email:e.email,passwordHash:e.passwordHash||"",role:e.role,createdAt:e.createdAt,updatedAt:e.updatedAt};return e.avatar&&(t.avatar=e.avatar),e.tenantId&&(t.tenantId=e.tenantId),e.emailVerified!==void 0&&(t.emailVerified=String(e.emailVerified)),e.locked!==void 0&&(t.locked=String(e.locked)),e.lastLogin&&(t.lastLogin=e.lastLogin),e.failedLoginAttempts!==void 0&&(t.failedLoginAttempts=String(e.failedLoginAttempts)),t}hashToUser(e){return {id:e.id,email:e.email,passwordHash:e.passwordHash,role:e.role,tenantId:e.tenantId,avatar:e.avatar,createdAt:e.createdAt,updatedAt:e.updatedAt,emailVerified:e.emailVerified==="true",locked:e.locked==="true",lastLogin:e.lastLogin,failedLoginAttempts:e.failedLoginAttempts?parseInt(e.failedLoginAttempts,10):0}}sessionToHash(e){let t={id:e.id,userId:e.userId,token:e.token,expiresAt:e.expiresAt,createdAt:e.createdAt};return e.refreshToken&&(t.refreshToken=e.refreshToken),e.ipAddress&&(t.ipAddress=e.ipAddress),e.userAgent&&(t.userAgent=e.userAgent),t}hashToSession(e){return {id:e.id,userId:e.userId,token:e.token,refreshToken:e.refreshToken,expiresAt:e.expiresAt,createdAt:e.createdAt,ipAddress:e.ipAddress,userAgent:e.userAgent}}tokenKey(e,t){return `${this.prefix}tokens:${e}:${t}`}async createEmailVerificationToken(e){let t=randomBytes(32).toString("hex"),s=new Date(Date.now()+1440*60*1e3);return await(await this.getRedis()).setex(this.tokenKey("email-verify",t),86400,e),{token:t,expiresAt:s}}async verifyEmailToken(e){let t=await this.getRedis(),s=await t.get(this.tokenKey("email-verify",e));return s?(await t.del(this.tokenKey("email-verify",e)),{success:true,userId:s}):{success:false,error:"Invalid or expired token"}}async createPasswordResetToken(e){let t=await this.findUserByEmail(e);if(!t)return {token:"",expiresAt:new Date,error:"User not found"};let s=randomBytes(32).toString("hex"),i=new Date(Date.now()+3600*1e3);return await(await this.getRedis()).setex(this.tokenKey("password-reset",s),3600,t.id),{token:s,expiresAt:i}}async resetPasswordWithToken(e,t){let s=await this.getRedis(),i=await s.get(this.tokenKey("password-reset",e));if(!i)return {success:false,error:"Invalid or expired token"};let r=await this.hashPassword(t);return await this.updateUser(i,{passwordHash:r}),await s.del(this.tokenKey("password-reset",e)),{success:true}}auditLogKey(e){return `${this.prefix}audit:logs:${e}`}auditLogIndexKey(){return `${this.prefix}audit:index`}async findAuditLogs(e){let{limit:t=50,offset:s=0}=e,i=this.auditLogIndexKey(),r=await(await this.getRedis()).zrevrange(i,0,-1),n=r.length,a=r.slice(s,s+t),o=[];for(let l of a){let u=await(await this.getRedis()).get(this.auditLogKey(l));if(u){let d=JSON.parse(u);(!e.userId||d.userId===e.userId)&&(!e.action||(Array.isArray(e.action)?e.action.includes(d.action):d.action===e.action))&&(!e.resource||d.resource===e.resource)&&(e.success===void 0||d.success===e.success)&&o.push({...d,timestamp:new Date(d.timestamp)});}}return {logs:o,total:n}}async createAuditLog(e){let t=randomBytes(16).toString("hex"),i={...e,id:t,timestamp:new Date};await(await this.getRedis()).set(this.auditLogKey(t),JSON.stringify(i)),await(await this.getRedis()).zadd(this.auditLogIndexKey(),Date.now(),t);let r=await(await this.getRedis()).zcard(this.auditLogIndexKey());if(r>1e4){let n=await(await this.getRedis()).zrange(this.auditLogIndexKey(),0,r-10001);for(let a of n)await(await this.getRedis()).del(this.auditLogKey(a)),await(await this.getRedis()).zrem(this.auditLogIndexKey(),a);}return i}};
3
+ export{w as a};
@@ -0,0 +1,2 @@
1
+ import {createRequire}from'module';import {g}from'./chunk-C2PXMVR5.js';createRequire(import.meta.url);
2
+ g();
@@ -0,0 +1,2 @@
1
+ import {createRequire}from'module';import {g}from'./chunk-C2PXMVR5.js';createRequire(import.meta.url);
2
+ g();function s(e){return {ipAddress:e.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||e.headers.get("x-real-ip")||"unknown",userAgent:e.headers.get("user-agent")||"unknown"}}export{s as a};