@kyro-cms/core 0.12.48 → 0.12.49

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 (172) hide show
  1. package/README.md +1 -0
  2. package/dist/api-handler-graphql.cjs +1 -1
  3. package/dist/api-handler-graphql.js +1 -1
  4. package/dist/api-handler-trpc.cjs +1 -1
  5. package/dist/api-handler-trpc.js +1 -1
  6. package/dist/api-handler.cjs +1 -1
  7. package/dist/api-handler.js +1 -1
  8. package/dist/auth-session-DHVGXHOH.cjs +1 -0
  9. package/dist/auth-session-O7IIH7EP.js +1 -0
  10. package/dist/bcryptjs-ZEEHSMAG.js +2 -0
  11. package/dist/{better-sqlite3-42Q3FG3E.js → better-sqlite3-B34RIU4C.js} +1 -1
  12. package/dist/bootstrap-4FK3LPPH.js +1 -0
  13. package/dist/bootstrap-F4SDJLPK.cjs +1 -0
  14. package/dist/{bowser-FI5JQGKZ.js → bowser-SB3ZUPO4.js} +1 -1
  15. package/dist/chokidar-5RVQZVHP.cjs +5 -0
  16. package/dist/chokidar-BOYGRT4Q.js +6 -0
  17. package/dist/{chunk-DS5DE5BU.js → chunk-24L3UEJJ.js} +1 -1
  18. package/dist/{chunk-HT44I66C.js → chunk-2HA6EKXX.js} +1 -1
  19. package/dist/{chunk-7AQSH3KR.js → chunk-3NSZZCOJ.js} +1 -1
  20. package/dist/{chunk-VIUU4D5I.js → chunk-47CXBWMA.js} +1 -1
  21. package/dist/{chunk-6MSS5X77.js → chunk-5M3FKE2V.js} +1 -1
  22. package/dist/chunk-63BSQ3FK.cjs +1 -0
  23. package/dist/chunk-6TPICJ2L.js +7 -0
  24. package/dist/{chunk-K7YNEKVE.js → chunk-7FXEXHK6.js} +1 -1
  25. package/dist/{chunk-WSP7PSXC.js → chunk-7MNDQU6K.js} +1 -1
  26. package/dist/{chunk-7V67ONUD.js → chunk-7N7U2ERH.js} +1 -1
  27. package/dist/{chunk-BPMA2ECA.js → chunk-7NH7H3WA.js} +1 -1
  28. package/dist/{chunk-ZJE3VAAW.js → chunk-BU6O3TP7.js} +3 -3
  29. package/dist/{chunk-W46LZ4MY.js → chunk-C7QCZX7X.js} +1 -1
  30. package/dist/chunk-CFZVJTXW.cjs +264 -0
  31. package/dist/{chunk-2WFTETFB.js → chunk-CIVA6SKW.js} +1 -1
  32. package/dist/chunk-EFGOYI57.js +265 -0
  33. package/dist/{chunk-2BUODBE2.js → chunk-EML5FDUU.js} +1 -1
  34. package/dist/{chunk-66BJXVFJ.js → chunk-FLMUMPDE.js} +1 -1
  35. package/dist/{chunk-QYI3GOHF.cjs → chunk-HKNQVI76.cjs} +1 -1
  36. package/dist/{chunk-IP6JUEH3.js → chunk-HRAY65XH.js} +1 -1
  37. package/dist/{chunk-KH7LM52S.js → chunk-IKGVPXMK.js} +1 -1
  38. package/dist/{chunk-M2QRXAWT.js → chunk-JR6IOJO7.js} +2 -2
  39. package/dist/{chunk-XOACKBG7.js → chunk-JRUQ5ABB.js} +2 -2
  40. package/dist/{chunk-OMWQVPV7.js → chunk-JV4HJBXW.js} +1 -1
  41. package/dist/{chunk-X54XZACS.cjs → chunk-KZHXYXSH.cjs} +2 -2
  42. package/dist/{chunk-UD6ZPO7T.js → chunk-L2QXP26Q.js} +1 -1
  43. package/dist/{chunk-ORG67NXX.js → chunk-L3Q64RUX.js} +1 -1
  44. package/dist/chunk-LELK3TYX.js +3 -0
  45. package/dist/chunk-LGYBTBWE.js +2 -0
  46. package/dist/{chunk-7I6URA6F.js → chunk-LVBHOZZF.js} +1 -1
  47. package/dist/{chunk-R3NEPC4I.js → chunk-LWM4WABU.js} +1 -1
  48. package/dist/{chunk-TR3ZS3T3.js → chunk-M75VGFCI.js} +1 -1
  49. package/dist/chunk-MCIZG4A3.cjs +1 -0
  50. package/dist/{chunk-VBPAAQEF.js → chunk-N5POANYV.js} +1 -1
  51. package/dist/chunk-O4YE57OS.cjs +6 -0
  52. package/dist/{chunk-A73AVVFR.js → chunk-OBYAIJVU.js} +1 -1
  53. package/dist/chunk-OLRCZ6E3.js +2 -0
  54. package/dist/{chunk-WGESLAWV.js → chunk-OXGJOYEO.js} +1 -1
  55. package/dist/{chunk-CGPAS4U5.js → chunk-P6JITOFF.js} +1 -1
  56. package/dist/{chunk-JUJZOG6P.js → chunk-PA4ZZREG.js} +1 -1
  57. package/dist/{chunk-45TJAB5X.js → chunk-PENOCINR.js} +3 -3
  58. package/dist/{chunk-MZOWPV4D.js → chunk-PRMILS4Y.js} +1 -1
  59. package/dist/chunk-QDBGBDCT.js +2 -0
  60. package/dist/{chunk-XBH4YMC7.js → chunk-R25WLKX4.js} +1 -1
  61. package/dist/{chunk-J6U5LWZ7.js → chunk-RPRGGGIW.js} +3 -3
  62. package/dist/{chunk-E27KEZPT.js → chunk-RTHJ6SS5.js} +1 -1
  63. package/dist/{chunk-MCZ3YZ2L.js → chunk-SLMIYECU.js} +1 -1
  64. package/dist/{chunk-IPXOY4RI.js → chunk-SQBTIMWF.js} +1 -1
  65. package/dist/{chunk-VJ2WMKPK.js → chunk-SZT6BLUR.js} +1 -1
  66. package/dist/{chunk-6KRR7YHA.js → chunk-TBHNE4VV.js} +1 -1
  67. package/dist/{chunk-OSAVAYJZ.js → chunk-TYQYKKWJ.js} +1 -1
  68. package/dist/{chunk-ICVQWR2A.js → chunk-U6KFONKM.js} +1 -1
  69. package/dist/chunk-UT7RGIYS.js +2 -0
  70. package/dist/{chunk-PBOZJOKN.js → chunk-UWHWSWDE.js} +1 -1
  71. package/dist/chunk-VVVCCB6R.js +2 -0
  72. package/dist/{chunk-MY42EWZP.js → chunk-W45TLOOT.js} +1 -1
  73. package/dist/{chunk-FAAAHE5O.cjs → chunk-WC7H45ZG.cjs} +3 -3
  74. package/dist/chunk-WJBQ2NBD.cjs +1 -0
  75. package/dist/{chunk-ATBH763U.js → chunk-WPM6LFCY.js} +1 -1
  76. package/dist/chunk-XBQ6HV3T.cjs +114 -0
  77. package/dist/{chunk-C2PXMVR5.js → chunk-Y2YAKDEQ.js} +1 -1
  78. package/dist/chunk-YENNL5HG.js +2 -0
  79. package/dist/{chunk-SYEP5QLG.js → chunk-YUUXFD73.js} +1 -1
  80. package/dist/{chunk-NWCREF47.js → chunk-YZEMLLD2.js} +1 -1
  81. package/dist/chunk-ZKHTFR5S.cjs +2 -0
  82. package/dist/{chunk-7T35572E.js → chunk-ZMG7Z3KF.js} +1 -1
  83. package/dist/{chunk-HLAEJB5R.js → chunk-ZRIBWDYJ.js} +1 -1
  84. package/dist/chunk-ZWDBPEXL.js +115 -0
  85. package/dist/cli/index.cjs +1 -1
  86. package/dist/cli/index.js +2 -2
  87. package/dist/client.js +1 -1
  88. package/dist/{d1-VPH75GI2.js → d1-HPB6B253.js} +1 -1
  89. package/dist/{dist-es-6TQTDPE7.js → dist-es-64F22JL2.js} +2 -2
  90. package/dist/{dist-es-XZBHIIKY.js → dist-es-F2ZR55UK.js} +2 -2
  91. package/dist/dist-es-IPSSZNFP.js +1 -0
  92. package/dist/{dist-es-SJ76GYCI.js → dist-es-M2F7M27Y.js} +1 -1
  93. package/dist/{dist-es-U4ZB3ZDA.js → dist-es-M66JKZF5.js} +1 -1
  94. package/dist/{dist-es-MNIQZC4U.js → dist-es-OKLLRYI3.js} +2 -2
  95. package/dist/{dist-es-TX4DBXEW.js → dist-es-SVHZDVUF.js} +2 -2
  96. package/dist/{dist-es-EMUQ6ZNZ.js → dist-es-WFI55HKT.js} +1 -1
  97. package/dist/drizzle/index.cjs +1 -1
  98. package/dist/drizzle/index.d.cts +1 -0
  99. package/dist/drizzle/index.d.ts +1 -0
  100. package/dist/drizzle/index.js +1 -1
  101. package/dist/drizzle-orm-XRTSOQJS.js +1 -0
  102. package/dist/event-streams-7NAWZW2I.js +1 -0
  103. package/dist/fields/index.js +1 -1
  104. package/dist/fs-KWBRQ6T6.js +1 -0
  105. package/dist/fs-ZQYOJOIO.cjs +1 -0
  106. package/dist/graphql/index.js +1 -1
  107. package/dist/index.cjs +9 -9
  108. package/dist/index.js +10 -10
  109. package/dist/integration.js +1 -1
  110. package/dist/{jsonwebtoken-S7BG2YWK.js → jsonwebtoken-OD67R5JS.js} +3 -3
  111. package/dist/{lib-IYW32OER.js → lib-XXYYUPMW.js} +3 -3
  112. package/dist/{loadSso-YTG2GQGW.js → loadSso-UQR6545M.js} +1 -1
  113. package/dist/local-3V3XEQUY.js +1 -0
  114. package/dist/media-E762GEHL.js +1 -0
  115. package/dist/mongo-auth-adapter-QDXVHREJ.js +1 -0
  116. package/dist/{mongo-auth-adapter-7K64Y2QM.cjs → mongo-auth-adapter-W3HLB7OR.cjs} +1 -1
  117. package/dist/mongodb/index.cjs +1 -1
  118. package/dist/mongodb/index.js +1 -1
  119. package/dist/{nodemailer-AXROO37D.js → nodemailer-NITB45SS.js} +3 -3
  120. package/dist/postgres-auth-adapter-SK3N3OSS.js +1 -0
  121. package/dist/postgres-auth-adapter-ZO6HK5AK.cjs +1 -0
  122. package/dist/postgres-js-3Y54EXVQ.cjs +1 -1
  123. package/dist/postgres-js-4CI7FMYS.js +1 -0
  124. package/dist/redis-adapter-QPCTMF55.js +1 -0
  125. package/dist/rest/index.cjs +1 -1
  126. package/dist/rest/index.js +1 -1
  127. package/dist/schema-YFMSJK2P.js +2 -0
  128. package/dist/{signin-KZBIAHGS.js → signin-N3T2KF5Q.js} +1 -1
  129. package/dist/sqlite-adapter-4TPNROJK.js +1 -0
  130. package/dist/src-QBADSZV4.js +1 -0
  131. package/dist/{sso-oidc-SX5OIQGG.js → sso-oidc-UB7G4END.js} +1 -1
  132. package/dist/{sts-HVGDJYIF.js → sts-WAA6I22C.js} +1 -1
  133. package/dist/templates/index.js +1 -1
  134. package/dist/trpc/index.js +1 -1
  135. package/dist/ws/index.js +1 -1
  136. package/package.json +2 -2
  137. package/dist/bcryptjs-AZA6WEN2.js +0 -2
  138. package/dist/bootstrap-7CI3NVSY.js +0 -1
  139. package/dist/bootstrap-DOOM2CNQ.cjs +0 -1
  140. package/dist/chokidar-24HVS6XD.cjs +0 -5
  141. package/dist/chokidar-43DT7CVN.js +0 -6
  142. package/dist/chunk-5DWYVUQR.cjs +0 -1
  143. package/dist/chunk-6QWLXJ7L.js +0 -2
  144. package/dist/chunk-B3GDQ7UI.cjs +0 -114
  145. package/dist/chunk-BLH2MRK4.js +0 -2
  146. package/dist/chunk-EOOZDOL7.js +0 -3
  147. package/dist/chunk-IIOVJTCD.cjs +0 -1
  148. package/dist/chunk-L4ZAI2XB.cjs +0 -269
  149. package/dist/chunk-PL5AIE6F.js +0 -2
  150. package/dist/chunk-QDHP5E4P.cjs +0 -2
  151. package/dist/chunk-R2CLQMNJ.js +0 -270
  152. package/dist/chunk-R4LXRAMX.js +0 -2
  153. package/dist/chunk-SVYUTQVE.js +0 -115
  154. package/dist/chunk-UB5TJHQR.js +0 -2
  155. package/dist/chunk-XPPVX4GQ.cjs +0 -1
  156. package/dist/chunk-XRINX47D.js +0 -2
  157. package/dist/dist-es-6SVFVYN3.js +0 -1
  158. package/dist/drizzle-orm-7YTX5NTT.js +0 -1
  159. package/dist/event-streams-25YJ2Z6R.js +0 -1
  160. package/dist/fs-DGKZLRM6.cjs +0 -1
  161. package/dist/fs-YZJ5FM6J.js +0 -2
  162. package/dist/local-VDCSEMC2.js +0 -1
  163. package/dist/media-HK2IZMUZ.js +0 -1
  164. package/dist/mongo-auth-adapter-BUKINEZL.js +0 -1
  165. package/dist/postgres-auth-adapter-2M4RNEY3.cjs +0 -1
  166. package/dist/postgres-auth-adapter-MKSHIJDL.js +0 -1
  167. package/dist/postgres-js-INQPBHJP.js +0 -1
  168. package/dist/redis-adapter-SXOXLHNH.js +0 -1
  169. package/dist/schema-XC5ISGNR.js +0 -2
  170. package/dist/sqlite-adapter-DV7ZX2EJ.js +0 -1
  171. package/dist/src-GZRZ4VAO.js +0 -1
  172. /package/dist/{chunk-P7XYIKL6.cjs → chunk-YUER4JU3.cjs} +0 -0
@@ -0,0 +1 @@
1
+ 'use strict';var chunkHTYVI2HK_cjs=require('./chunk-HTYVI2HK.cjs'),chunkBUNLC3II_cjs=require('./chunk-BUNLC3II.cjs'),crypto=require('crypto');chunkBUNLC3II_cjs.h();var c=chunkBUNLC3II_cjs.e(chunkHTYVI2HK_cjs.a(),1);var g=class{db;adapter;prefix;sessionTTL;refreshTokenTTL;indexesEnsured=false;constructor(e){this.db=e.db,this.adapter=e.adapter,this.prefix=e.collectionPrefix||"",this.sessionTTL=e.sessionTTL||86400,this.refreshTokenTTL=e.refreshTokenTTL||604800;}getDatabase(){let e=typeof this.db=="function"?this.db():this.db;if(!e&&this.adapter&&(this.adapter.db?e=this.adapter.db:this.adapter.client&&(this.adapter.db=this.adapter.client.db(this.adapter.database||"kyro_cms"),e=this.adapter.db)),!e)throw new Error("MongoDB database not initialized");return e}col(e){return this.getDatabase().collection(`${this.prefix}${e}`)}async connect(){this.adapter&&!this.adapter.connected&&await this.adapter.connect(),this.indexesEnsured||await this.ensureIndexes();}async disconnect(){}async ensureIndexes(){await this.col("users").createIndex({email:1},{unique:true}),await this.col("users").createIndex({tenantId:1}),await this.col("users").createIndex({role:1}),await this.col("sessions").createIndex({token:1},{unique:true}),await this.col("sessions").createIndex({refreshToken:1}),await this.col("sessions").createIndex({userId:1}),await this.col("sessions").createIndex({expiresAt:1},{expireAfterSeconds:0}),await this.col("audit_logs").createIndex({timestamp:-1}),await this.col("audit_logs").createIndex({userId:1}),await this.col("audit_logs").createIndex({action:1}),await this.col("audit_logs").createIndex({resource:1}),await this.col("password_history").createIndex({userId:1,createdAt:-1}),await this.col("lockouts").createIndex({userId:1},{unique:true}),await this.col("lockouts").createIndex({lockedUntil:1}),this.indexesEnsured=true;}async createUser(e){let s=crypto.randomUUID(),t=new Date,i=await this.hashPassword(e.password),r={_id:s,name:e.name||null,email:e.email.toLowerCase(),passwordHash:i,role:e.role||"customer",avatar:e.avatar||null,tenantId:e.tenantId||null,emailVerified:false,locked:false,lastLogin:null,failedLoginAttempts:0,createdAt:t,updatedAt:t};return await this.col("users").insertOne(r),this.docToAuthUser(r)}async findUserByEmail(e){let s=await this.col("users").findOne({email:e.toLowerCase()});return s?this.docToAuthUser(s):null}async findUserById(e){let s=await this.col("users").findOne({_id:e});return s?this.docToAuthUser(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.avatar!==void 0&&(t.avatar=s.avatar),s.tenantId!==void 0&&(t.tenantId=s.tenantId),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 i=await this.col("users").findOneAndUpdate({_id:e},{$set:t},{returnDocument:"after"});return i?this.docToAuthUser(i):null}async deleteUser(e){return (await this.col("users").deleteOne({_id:e})).deletedCount>0}async verifyPassword(e,s){let t=await this.findUserByEmail(e);if(!t)return null;let i=await this.col("users").findOne({email:e.toLowerCase()},{projection:{passwordHash:1}});return i?.passwordHash&&await c.default.compare(s,i.passwordHash)?t:null}async hashPassword(e){return c.default.hash(e,12)}async createSession(e,s){let t=crypto.randomUUID(),i=crypto.randomBytes(32).toString("base64url"),r=crypto.randomBytes(32).toString("base64url"),o=new Date,u=new Date(o.getTime()+this.sessionTTL*1e3),d={_id:t,userId:e,token:i,refreshToken:r,ipAddress:s?.ipAddress||null,userAgent:s?.userAgent||null,expiresAt:u,createdAt:o};return await this.col("sessions").insertOne(d),this.docToSession(d)}async findSessionByToken(e){let s=await this.col("sessions").findOne({token:e,expiresAt:{$gt:new Date}});return s?this.docToSession(s):null}async findSessionByRefreshToken(e){let s=await this.col("sessions").findOne({refreshToken:e,expiresAt:{$gt:new Date}});return s?this.docToSession(s):null}async deleteSession(e){return (await this.col("sessions").deleteOne({_id:e})).deletedCount>0}async deleteUserSessions(e){return (await this.col("sessions").deleteMany({userId:e})).deletedCount}async hasAnyUsers(){return await this.col("users").countDocuments()>0}async addPasswordToHistory(e,s){await this.col("password_history").insertOne({userId:e,passwordHash:s,createdAt:new Date});}async getPasswordHistory(e,s=5){return (await this.col("password_history").find({userId:e}).sort({createdAt:-1}).limit(s).toArray()).map(i=>i.passwordHash)}async isPasswordInHistory(e,s,t=5){let i=await this.getPasswordHistory(s,t);for(let r of i)if(await c.default.compare(e,r))return true;return false}async findAuditLogs(e){let{limit:s=50,offset:t=0,userId:i,action:r,resource:o,resourceId:u,success:d,startDate:f,endDate:h}=e,a={};i&&(a.userId=i),r&&(Array.isArray(r)?a.action={$in:r}:a.action=r),o&&(a.resource=o),u&&(a.resourceId=u),d!==void 0&&(a.success=d),(f||h)&&(a.timestamp={},f&&(a.timestamp.$gte=f),h&&(a.timestamp.$lte=h));let w=await this.col("audit_logs").countDocuments(a);return {logs:(await this.col("audit_logs").find(a).sort({timestamp:-1}).skip(t).limit(s).toArray()).map(n=>({id:n._id,timestamp:n.timestamp,action:n.action,userId:n.userId||void 0,userEmail:n.userEmail||void 0,role:n.role||void 0,resource:n.resource,resourceId:n.resourceId||void 0,changes:n.changes||void 0,ipAddress:n.ipAddress||void 0,userAgent:n.userAgent||void 0,success:n.success,error:n.error||void 0,metadata:n.metadata||void 0})),total:w}}async createAuditLog(e){let s=crypto.randomUUID(),t=new Date;return await this.col("audit_logs").insertOne({_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}}docToAuthUser(e){return {id:e._id,name:e.name||void 0,email:e.email,passwordHash:e.passwordHash||void 0,role:e.role,tenantId:e.tenantId||void 0,avatar:e.avatar||void 0,emailVerified:e.emailVerified||false,locked:e.locked||false,lastLogin:e.lastLogin?.toISOString?.()||e.lastLogin||void 0,failedLoginAttempts:e.failedLoginAttempts||0,createdAt:e.createdAt?.toISOString?.()||e.createdAt,updatedAt:e.updatedAt?.toISOString?.()||e.updatedAt}}docToSession(e){return {id:e._id,userId:e.userId,token:e.token,refreshToken:e.refreshToken||void 0,expiresAt:e.expiresAt?.toISOString?.()||e.expiresAt,createdAt:e.createdAt?.toISOString?.()||e.createdAt,ipAddress:e.ipAddress||void 0,userAgent:e.userAgent||void 0}}async createEmailVerificationToken(e){let s=crypto.randomBytes(32).toString("hex"),t=new Date(Date.now()+1440*60*1e3),i=await import('./lib-5QYYN6ML.cjs'),r=i.ObjectId??i.default?.ObjectId;return await this.db.collection("email_verifications").insertOne({userId:new r(e),token:s,expiresAt:t,createdAt:new Date}),{token:s,expiresAt:t}}async verifyEmailToken(e){let s=await this.db.collection("email_verifications").findOne({token:e});return s?s.expiresAt<new Date?{success:false,error:"Verification token has expired"}:(await this.db.collection("users").updateOne({_id:s.userId},{$set:{emailVerified:true}}),await this.db.collection("email_verifications").deleteOne({_id:s._id}),{success:true,userId:s.userId.toString()}):{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=crypto.randomBytes(32).toString("hex"),i=new Date(Date.now()+3600*1e3),r=await import('./lib-5QYYN6ML.cjs'),o=r.ObjectId??r.default?.ObjectId;return await this.db.collection("password_resets").insertOne({userId:new o(s.id),token:t,expiresAt:i,createdAt:new Date}),{token:t,expiresAt:i}}async resetPasswordWithToken(e,s){let t=await this.db.collection("password_resets").findOne({token:e});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 i=await this.hashPassword(s);return await this.db.collection("users").updateOne({_id:t.userId},{$set:{passwordHash:i,updatedAt:new Date}}),await this.db.collection("password_resets").updateOne({_id:t._id},{$set:{usedAt:new Date}}),await this.db.collection("sessions").deleteMany({userId:t.userId}),{success:true}}};exports.a=g;
@@ -1,2 +1,2 @@
1
- import {createRequire}from'module';import {c}from'./chunk-ICVQWR2A.js';import {t,s,e,c as c$1}from'./chunk-OSAVAYJZ.js';import {g}from'./chunk-C2PXMVR5.js';import {Readable}from'stream';createRequire(import.meta.url);
1
+ import {c}from'./chunk-U6KFONKM.js';import {t,s,e,c as c$1}from'./chunk-TYQYKKWJ.js';import {g}from'./chunk-Y2YAKDEQ.js';import {Readable}from'stream';if (typeof window === "undefined") { const { createRequire } = await import(/* @vite-ignore */ 'module'); createRequire(import.meta.url); }
2
2
  g();g();g();g();var k=class n{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&&R(t),new n(t)}valueOf(){let e=this.bytes.slice(0),t$1=e[0]&128;return t$1&&R(e),parseInt(t(e),16)*(t$1?-1:1)}toString(){return String(this.valueOf())}};function R(n){for(let e=0;e<8;e++)n[e]^=255;for(let e=7;e>-1&&(n[e]++,n[e]===0);e--);}var z=class{toUtf8;fromUtf8;constructor(e,t){this.toUtf8=e,this.fromUtf8=t;}format(e){let t=[];for(let a of Object.keys(e)){let c=this.fromUtf8(a);t.push(Uint8Array.from([c.byteLength]),c,this.formatHeaderValue(e[a]));}let r=new Uint8Array(t.reduce((a,c)=>a+c.byteLength,0)),s=0;for(let a of t)r.set(a,s),s+=a.byteLength;return r}formatHeaderValue(e){switch(e.type){case "boolean":return Uint8Array.from([e.value?y.boolTrue:y.boolFalse]);case "byte":return Uint8Array.from([y.byte,e.value]);case "short":let t=new DataView(new ArrayBuffer(3));return t.setUint8(0,y.short),t.setInt16(1,e.value,false),new Uint8Array(t.buffer);case "integer":let r=new DataView(new ArrayBuffer(5));return r.setUint8(0,y.integer),r.setInt32(1,e.value,false),new Uint8Array(r.buffer);case "long":let s$1=new Uint8Array(9);return s$1[0]=y.long,s$1.set(e.value.bytes,1),s$1;case "binary":let a=new DataView(new ArrayBuffer(3+e.value.byteLength));a.setUint8(0,y.byteArray),a.setUint16(1,e.value.byteLength,false);let c=new Uint8Array(a.buffer);return c.set(e.value,3),c;case "string":let o=this.fromUtf8(e.value),f=new DataView(new ArrayBuffer(3+o.byteLength));f.setUint8(0,y.string),f.setUint16(1,o.byteLength,false);let w=new Uint8Array(f.buffer);return w.set(o,3),w;case "timestamp":let g=new Uint8Array(9);return g[0]=y.timestamp,g.set(k.fromNumber(e.value.valueOf()).bytes,1),g;case "uuid":if(!se.test(e.value))throw new Error(`Invalid UUID received: ${e.value}`);let l=new Uint8Array(17);return l[0]=y.uuid,l.set(s(e.value.replace(/-/g,"")),1),l}}parse(e){let t$1={},r=0;for(;r<e.byteLength;){let s=e.getUint8(r++),a=this.toUtf8(new Uint8Array(e.buffer,e.byteOffset+r,s));switch(r+=s,e.getUint8(r++)){case y.boolTrue:t$1[a]={type:X,value:true};break;case y.boolFalse:t$1[a]={type:X,value:false};break;case y.byte:t$1[a]={type:V,value:e.getInt8(r++)};break;case y.short:t$1[a]={type:E,value:e.getInt16(r,false)},r+=2;break;case y.integer:t$1[a]={type:_,value:e.getInt32(r,false)},r+=4;break;case y.long:t$1[a]={type:Y,value:new k(new Uint8Array(e.buffer,e.byteOffset+r,8))},r+=8;break;case y.byteArray:let c=e.getUint16(r,false);r+=2,t$1[a]={type:ee,value:new Uint8Array(e.buffer,e.byteOffset+r,c)},r+=c;break;case y.string:let o=e.getUint16(r,false);r+=2,t$1[a]={type:te,value:this.toUtf8(new Uint8Array(e.buffer,e.byteOffset+r,o))},r+=o;break;case y.timestamp:t$1[a]={type:re,value:new Date(new k(new Uint8Array(e.buffer,e.byteOffset+r,8)).valueOf())},r+=8;break;case y.uuid:let f=new Uint8Array(e.buffer,e.byteOffset+r,16);r+=16,t$1[a]={type:ne,value:`${t(f.subarray(0,4))}-${t(f.subarray(4,6))}-${t(f.subarray(6,8))}-${t(f.subarray(8,10))}-${t(f.subarray(10))}`};break;default:throw new Error("Unrecognized header type tag")}}return t$1}},y;(function(n){n[n.boolTrue=0]="boolTrue",n[n.boolFalse=1]="boolFalse",n[n.byte=2]="byte",n[n.short=3]="short",n[n.integer=4]="integer",n[n.long=5]="long",n[n.byteArray=6]="byteArray",n[n.string=7]="string",n[n.timestamp=8]="timestamp",n[n.uuid=9]="uuid";})(y||(y={}));var X="boolean",V="byte",E="short",_="integer",Y="long",ee="binary",te="string",re="timestamp",ne="uuid",se=/^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/;g();var Z=4,M=Z*2,B=4,ae=M+B*2;function H({byteLength:n,byteOffset:e,buffer:t}){if(n<ae)throw new Error("Provided message too short to accommodate event stream message overhead");let r=new DataView(t,e,n),s=r.getUint32(0,false);if(n!==s)throw new Error("Reported message length does not match received message length");let a=r.getUint32(Z,false),c$1=r.getUint32(M,false),o=r.getUint32(n-B,false),f=new c;if(f.update(new Uint8Array(t,e,M)),c$1!==f.digestSync())throw new Error(`The prelude checksum specified in the message (${c$1}) does not match the calculated CRC32 checksum (${f.digestSync()})`);if(f.update(new Uint8Array(t,e+M,n-(M+B))),o!==f.digestSync())throw new Error(`The message checksum (${f.digestSync()}) did not match the expected value of ${o}`);return {headers:new DataView(t,e+M+B,a),body:new Uint8Array(t,e+M+B+a,s-a-(M+B+B))}}var O=class{headerMarshaller;messageBuffer;isEndOfStream;constructor(e,t){this.headerMarshaller=new z(e,t),this.messageBuffer=[],this.isEndOfStream=false;}feed(e){this.messageBuffer.push(this.decode(e));}endOfStream(){this.isEndOfStream=true;}getMessage(){let e=this.messageBuffer.pop(),t=this.isEndOfStream;return {getMessage(){return e},isEndOfStream(){return t}}}getAvailableMessages(){let e=this.messageBuffer;this.messageBuffer=[];let t=this.isEndOfStream;return {getMessages(){return e},isEndOfStream(){return t}}}encode({headers:e,body:t}){let r=this.headerMarshaller.format(e),s=r.byteLength+t.byteLength+16,a=new Uint8Array(s),c$1=new DataView(a.buffer,a.byteOffset,a.byteLength),o=new c;return c$1.setUint32(0,s,false),c$1.setUint32(4,r.byteLength,false),o.update(a.subarray(0,8)),c$1.setUint32(8,o.digestSync(),false),a.set(r,12),a.set(t,r.byteLength+12),o.update(a.subarray(8,s-4)),c$1.setUint32(s-4,o.digestSync(),false),a}decode(e){let{headers:t,body:r}=H(e);return {headers:this.headerMarshaller.parse(t),body:r}}formatHeaders(e){return this.headerMarshaller.format(e)}};g();var N=class{options;constructor(e){this.options=e;}[Symbol.asyncIterator](){return this.asyncIterator()}async*asyncIterator(){for await(let e of this.options.inputStream)yield this.options.decoder.decode(e);}};g();var G=class{options;constructor(e){this.options=e;}[Symbol.asyncIterator](){return this.asyncIterator()}async*asyncIterator(){for await(let e of this.options.messageStream)yield this.options.encoder.encode(e);this.options.includeEndFrame&&(yield new Uint8Array(0));}};g();var $=class{options;constructor(e){this.options=e;}[Symbol.asyncIterator](){return this.asyncIterator()}async*asyncIterator(){for await(let e of this.options.messageStream){let t=await this.options.deserializer(e);t!==void 0&&(yield t);}}};g();var A=class{options;constructor(e){this.options=e;}[Symbol.asyncIterator](){return this.asyncIterator()}async*asyncIterator(){for await(let e of this.options.inputStream)yield this.options.serializer(e);}};g();g();g();function K(n){let e=0,t=0,r=null,s=null,a=o=>{if(typeof o!="number")throw new Error("Attempted to allocate an event message where size was not a number: "+o);e=o,t=4,r=new Uint8Array(o),new DataView(r.buffer).setUint32(0,o,false);},c=async function*(){let o=n[Symbol.asyncIterator]();for(;;){let{value:f,done:w}=await o.next();if(w){if(e)if(e===t)yield r;else throw new Error("Truncated event message received.");else return;return}let g=f.length,l=0;for(;l<g;){if(!r){let m=g-l;s||(s=new Uint8Array(4));let d=Math.min(4-t,m);if(s.set(f.slice(l,l+d),t),t+=d,l+=d,t<4)break;a(new DataView(s.buffer).getUint32(0,false)),s=null;}let u=Math.min(e-t,g-l);r.set(f.slice(l,l+u),t),t+=u,l+=u,e&&e===t&&(yield r,r=null,e=0,t=0);}}};return {[Symbol.asyncIterator]:c}}g();function oe(n,e){let t=F(e.deserializer,e.toUtf8);return {[Symbol.asyncIterator]:async function*(){for await(let r of n){let s=e.eventStreamCodec.decode(r),a=await t(s);a!==void 0&&(yield a);}}}}function F(n,e){return async function(t){let{value:r}=t.headers[":message-type"];if(r==="error"){let s=new Error(t.headers[":error-message"].value||"UnknownError");throw s.name=t.headers[":error-code"].value,s}else if(r==="exception"){let s=t.headers[":exception-type"].value,a={[s]:t},c=await n(a);if(c.$unknown){let o=new Error(e(t.body));throw o.name=s,o}throw c[s]}else if(r==="event"){let s={[t.headers[":event-type"].value]:t},a=await n(s);return a.$unknown?void 0:a}else throw Error(`Unrecognizable event type: ${t.headers[":event-type"].value}`)}}var C=class{eventStreamCodec;utfEncoder;constructor({utf8Encoder:e,utf8Decoder:t}){this.eventStreamCodec=new O(e,t),this.utfEncoder=e;}deserialize(e,t){let r=K(e);return new $({messageStream:new N({inputStream:r,decoder:this.eventStreamCodec}),deserializer:F(t,this.utfEncoder)})}serialize(e,t){return new G({messageStream:new A({inputStream:e,serializer:t}),encoder:this.eventStreamCodec,includeEndFrame:true})}},ie=n=>new C(n);var j=class{universalMarshaller;constructor({utf8Encoder:e,utf8Decoder:t}){this.universalMarshaller=new C({utf8Decoder:t,utf8Encoder:e});}deserialize(e,t){let r=typeof e[Symbol.asyncIterator]=="function"?e:fe(e);return this.universalMarshaller.deserialize(r,t)}serialize(e,t){return Readable.from(this.universalMarshaller.serialize(e,t))}},le=n=>new j(n);async function*fe(n){let e=false,t=false,r=new Array;for(n.on("error",s=>{if(e||(e=true),s)throw s}),n.on("data",s=>{r.push(s);}),n.on("end",()=>{e=true;});!t;){let s=await new Promise(a=>setTimeout(()=>a(r.shift()),0));s&&(yield s),t=e&&r.length===0;}}g();var ue=n=>({[Symbol.asyncIterator]:async function*(){let e=n.getReader();try{for(;;){let{done:t,value:r}=await e.read();if(t)return;yield r;}}finally{e.releaseLock();}}}),me=n=>{let e=n[Symbol.asyncIterator]();return new ReadableStream({async pull(t){let{done:r,value:s}=await e.next();if(r)return t.close();t.enqueue(s);}})};g();var ye=n=>Object.assign(n,{eventStreamMarshaller:n.eventStreamSerdeProvider(n)});g();var q=class{marshaller;serializer;deserializer;serdeContext;defaultContentType;constructor({marshaller:e,serializer:t,deserializer:r,serdeContext:s,defaultContentType:a}){this.marshaller=e,this.serializer=t,this.deserializer=r,this.serdeContext=s,this.defaultContentType=a;}async serializeEventStream({eventStream:e,requestSchema:t,initialRequest:r}){let s=this.marshaller,a=t.getEventStreamMember(),c=t.getMemberSchema(a),o=this.serializer,f=this.defaultContentType,w=Symbol("initialRequestMarker"),g={async*[Symbol.asyncIterator](){if(r){let l={":event-type":{type:"string",value:"initial-request"},":message-type":{type:"string",value:"event"},":content-type":{type:"string",value:f}};o.write(t,r);let u=o.flush();yield {[w]:true,headers:l,body:u};}for await(let l of e)yield l;}};return s.serialize(g,l=>{if(l[w])return {headers:l.headers,body:l.body};let u="";for(let h in l)if(h!=="__type"){u=h;break}let{additionalHeaders:m,body:d,eventType:S,explicitPayloadContentType:v}=this.writeEventBody(u,c,l);return {headers:{":event-type":{type:"string",value:S},":message-type":{type:"string",value:"event"},":content-type":{type:"string",value:v??f},...m},body:d}})}async deserializeEventStream({response:e$1,responseSchema:t,initialResponseContainer:r}){let s=this.marshaller,a=t.getEventStreamMember(),o=t.getMemberSchema(a).getMemberSchemas(),f=Symbol("initialResponseMarker"),w=s.deserialize(e$1.body,async u=>{let m="";for(let S in u)if(S!=="__type"){m=S;break}let d=u[m].body;if(m==="initial-response"){let S=await this.deserializer.read(t,d);return delete S[a],{[f]:true,...S}}else if(m in o){let S=o[m];if(S.isStructSchema()){let v={},U=false;for(let[h,T]of S.structIterator()){let{eventHeader:P,eventPayload:W}=T.getMergedTraits();if(U=U||!!(P||W),W)T.isBlobSchema()?v[h]=d:T.isStringSchema()?v[h]=(this.serdeContext?.utf8Encoder??e)(d):T.isStructSchema()&&(v[h]=await this.deserializer.read(T,d));else if(P){let I=u[m].headers[h]?.value;I!=null&&(T.isNumericSchema()?I&&typeof I=="object"&&"bytes"in I?v[h]=BigInt(I.toString()):v[h]=Number(I):v[h]=I);}}if(U)return {[m]:v};if(d.byteLength===0)return {[m]:{}}}return {[m]:await this.deserializer.read(S,d)}}else return {$unknown:u}}),g=w[Symbol.asyncIterator](),l=await g.next();if(l.done)return w;if(l.value?.[f]){if(!t)throw new Error("@smithy::core/protocols - initial-response event encountered in event stream but no response schema given.");for(let u in l.value)r[u]=l.value[u];}return {async*[Symbol.asyncIterator](){for(l?.value?.[f]||(yield l.value);;){let{done:u,value:m}=await g.next();if(u)break;yield m;}}}}writeEventBody(e,t,r){let s=this.serializer,a=e,c=null,o,f=t.getSchema()[4].includes(e),w={};if(f){let u=t.getMemberSchema(e);if(u.isStructSchema()){for(let[m,d]of u.structIterator()){let{eventHeader:S,eventPayload:v}=d.getMergedTraits();if(v)c=m;else if(S){let U=r[e][m],h="binary";d.isNumericSchema()?(-2)**31<=U&&U<=2**31-1?h="integer":h="long":d.isTimestampSchema()?h="timestamp":d.isStringSchema()?h="string":d.isBooleanSchema()&&(h="boolean"),U!=null&&(w[m]={type:h,value:U},delete r[e][m]);}}if(c!==null){let m=u.getMemberSchema(c);m.isBlobSchema()?o="application/octet-stream":m.isStringSchema()&&(o="text/plain"),s.write(m,r[e][c]);}else s.write(u,r[e]);}else if(u.isUnitSchema())s.write(u,{});else throw new Error("@smithy/core/event-streams - non-struct member not supported in event stream union.")}else {let[u,m]=r[e];a=u,s.write(15,m);}let g=s.flush()??new Uint8Array;return {body:typeof g=="string"?(this.serdeContext?.utf8Decoder??c$1)(g):g,eventType:a,explicitPayloadContentType:o,additionalHeaders:w}}};export{k as a,z as b,O as c,N as d,G as e,$ as f,A as g,K as h,oe as i,F as j,C as k,ie as l,j as m,le as n,ue as o,me as p,ye as q,q as r};
@@ -0,0 +1,114 @@
1
+ 'use strict';var chunk7JWQ2PZP_cjs=require('./chunk-7JWQ2PZP.cjs'),chunkBCEE4NBZ_cjs=require('./chunk-BCEE4NBZ.cjs'),chunkVRZC4TTF_cjs=require('./chunk-VRZC4TTF.cjs'),chunkHTYVI2HK_cjs=require('./chunk-HTYVI2HK.cjs'),chunkBUNLC3II_cjs=require('./chunk-BUNLC3II.cjs'),crypto$1=require('crypto');chunkBUNLC3II_cjs.h();var R=chunkBUNLC3II_cjs.e(chunkHTYVI2HK_cjs.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(chunkVRZC4TTF_cjs.J`
2
+ CREATE TABLE IF NOT EXISTS "users" (
3
+ "id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
4
+ "name" VARCHAR(255),
5
+ "email" VARCHAR(255) NOT NULL,
6
+ "password_hash" VARCHAR(255),
7
+ "role" VARCHAR(50) NOT NULL DEFAULT 'customer',
8
+ "tenant_id" UUID,
9
+ "email_verified" BOOLEAN DEFAULT false,
10
+ "locked" BOOLEAN DEFAULT false,
11
+ "last_login" TIMESTAMP,
12
+ "failed_login_attempts" INTEGER DEFAULT 0,
13
+ "metadata" JSONB,
14
+ "avatar" VARCHAR(255),
15
+ "created_at" TIMESTAMP NOT NULL DEFAULT NOW(),
16
+ "updated_at" TIMESTAMP NOT NULL DEFAULT NOW()
17
+ )
18
+ `),await this.db.execute(chunkVRZC4TTF_cjs.J`ALTER TABLE "users" ADD COLUMN IF NOT EXISTS "avatar" VARCHAR(255)`),await this.db.execute(chunkVRZC4TTF_cjs.J`CREATE UNIQUE INDEX IF NOT EXISTS "users_email_idx" ON "users" ("email")`),await this.db.execute(chunkVRZC4TTF_cjs.J`CREATE INDEX IF NOT EXISTS "users_tenant_idx" ON "users" ("tenant_id")`),await this.db.execute(chunkVRZC4TTF_cjs.J`CREATE INDEX IF NOT EXISTS "users_role_idx" ON "users" ("role")`),await this.db.execute(chunkVRZC4TTF_cjs.J`
19
+ CREATE TABLE IF NOT EXISTS "sessions" (
20
+ "id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
21
+ "user_id" UUID NOT NULL REFERENCES "users"("id") ON DELETE CASCADE,
22
+ "token" VARCHAR(512) NOT NULL UNIQUE,
23
+ "refresh_token" VARCHAR(512),
24
+ "ip_address" VARCHAR(45),
25
+ "user_agent" TEXT,
26
+ "expires_at" TIMESTAMP NOT NULL,
27
+ "created_at" TIMESTAMP NOT NULL DEFAULT NOW()
28
+ )
29
+ `),await this.db.execute(chunkVRZC4TTF_cjs.J`CREATE INDEX IF NOT EXISTS "sessions_user_idx" ON "sessions" ("user_id")`),await this.db.execute(chunkVRZC4TTF_cjs.J`CREATE INDEX IF NOT EXISTS "sessions_token_idx" ON "sessions" ("token")`),await this.db.execute(chunkVRZC4TTF_cjs.J`CREATE INDEX IF NOT EXISTS "sessions_expires_idx" ON "sessions" ("expires_at")`),await this.db.execute(chunkVRZC4TTF_cjs.J`
30
+ CREATE TABLE IF NOT EXISTS "audit_logs" (
31
+ "id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
32
+ "action" VARCHAR(100) NOT NULL,
33
+ "user_id" UUID REFERENCES "users"("id") ON DELETE SET NULL,
34
+ "user_email" VARCHAR(255),
35
+ "role" VARCHAR(50),
36
+ "resource" VARCHAR(100) NOT NULL,
37
+ "resource_id" VARCHAR(255),
38
+ "changes" JSONB,
39
+ "ip_address" VARCHAR(45),
40
+ "user_agent" TEXT,
41
+ "success" BOOLEAN NOT NULL DEFAULT true,
42
+ "error" TEXT,
43
+ "metadata" JSONB,
44
+ "timestamp" TIMESTAMP NOT NULL DEFAULT NOW()
45
+ )
46
+ `),await this.db.execute(chunkVRZC4TTF_cjs.J`ALTER TABLE "audit_logs" ALTER COLUMN "resource_id" TYPE VARCHAR(255)`),await this.db.execute(chunkVRZC4TTF_cjs.J`CREATE INDEX IF NOT EXISTS "audit_logs_user_idx" ON "audit_logs" ("user_id")`),await this.db.execute(chunkVRZC4TTF_cjs.J`CREATE INDEX IF NOT EXISTS "audit_logs_action_idx" ON "audit_logs" ("action")`),await this.db.execute(chunkVRZC4TTF_cjs.J`CREATE INDEX IF NOT EXISTS "audit_logs_resource_idx" ON "audit_logs" ("resource")`),await this.db.execute(chunkVRZC4TTF_cjs.J`CREATE INDEX IF NOT EXISTS "audit_logs_timestamp_idx" ON "audit_logs" ("timestamp")`),await this.db.execute(chunkVRZC4TTF_cjs.J`
47
+ CREATE TABLE IF NOT EXISTS "password_history" (
48
+ "id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
49
+ "user_id" UUID NOT NULL REFERENCES "users"("id") ON DELETE CASCADE,
50
+ "password_hash" VARCHAR(255) NOT NULL,
51
+ "created_at" TIMESTAMP NOT NULL DEFAULT NOW()
52
+ )
53
+ `),await this.db.execute(chunkVRZC4TTF_cjs.J`CREATE INDEX IF NOT EXISTS "password_history_user_idx" ON "password_history" ("user_id")`),await this.db.execute(chunkVRZC4TTF_cjs.J`
54
+ CREATE TABLE IF NOT EXISTS "lockouts" (
55
+ "id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
56
+ "user_id" UUID NOT NULL REFERENCES "users"("id") ON DELETE CASCADE,
57
+ "ip_address" VARCHAR(45),
58
+ "reason" VARCHAR(255),
59
+ "locked_until" TIMESTAMP NOT NULL,
60
+ "released_at" TIMESTAMP,
61
+ "created_at" TIMESTAMP NOT NULL DEFAULT NOW()
62
+ )
63
+ `),await this.db.execute(chunkVRZC4TTF_cjs.J`CREATE INDEX IF NOT EXISTS "lockouts_user_idx" ON "lockouts" ("user_id")`),await this.db.execute(chunkVRZC4TTF_cjs.J`CREATE INDEX IF NOT EXISTS "lockouts_locked_until_idx" ON "lockouts" ("locked_until")`),await this.db.execute(chunkVRZC4TTF_cjs.J`
64
+ CREATE TABLE IF NOT EXISTS "roles" (
65
+ "id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
66
+ "name" VARCHAR(100) NOT NULL UNIQUE,
67
+ "level" INTEGER NOT NULL DEFAULT 0,
68
+ "inherits" TEXT[],
69
+ "description" TEXT,
70
+ "permissions" JSONB DEFAULT '[]',
71
+ "is_system" BOOLEAN DEFAULT false,
72
+ "created_at" TIMESTAMP NOT NULL DEFAULT NOW(),
73
+ "updated_at" TIMESTAMP NOT NULL DEFAULT NOW()
74
+ )
75
+ `),await this.db.execute(chunkVRZC4TTF_cjs.J`CREATE INDEX IF NOT EXISTS "roles_level_idx" ON "roles" ("level")`),await this.db.execute(chunkVRZC4TTF_cjs.J`
76
+ CREATE TABLE IF NOT EXISTS "tenants" (
77
+ "id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
78
+ "name" VARCHAR(255) NOT NULL,
79
+ "slug" VARCHAR(100) NOT NULL UNIQUE,
80
+ "settings" JSONB DEFAULT '{}',
81
+ "is_active" BOOLEAN DEFAULT true,
82
+ "created_at" TIMESTAMP NOT NULL DEFAULT NOW(),
83
+ "updated_at" TIMESTAMP NOT NULL DEFAULT NOW()
84
+ )
85
+ `),await this.db.execute(chunkVRZC4TTF_cjs.J`
86
+ CREATE TABLE IF NOT EXISTS "api_keys" (
87
+ "id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
88
+ "user_id" UUID NOT NULL REFERENCES "users"("id") ON DELETE CASCADE,
89
+ "name" VARCHAR(255) NOT NULL,
90
+ "key" VARCHAR(64) NOT NULL UNIQUE,
91
+ "key_prefix" VARCHAR(8) NOT NULL,
92
+ "permissions" JSONB DEFAULT '[]',
93
+ "last_used_at" TIMESTAMP,
94
+ "expires_at" TIMESTAMP,
95
+ "created_at" TIMESTAMP NOT NULL DEFAULT NOW()
96
+ )
97
+ `),await this.db.execute(chunkVRZC4TTF_cjs.J`
98
+ CREATE TABLE IF NOT EXISTS "email_verifications" (
99
+ "id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
100
+ "user_id" UUID NOT NULL REFERENCES "users"("id") ON DELETE CASCADE,
101
+ "token" VARCHAR(64) NOT NULL UNIQUE,
102
+ "expires_at" TIMESTAMP NOT NULL,
103
+ "created_at" TIMESTAMP NOT NULL DEFAULT NOW()
104
+ )
105
+ `),await this.db.execute(chunkVRZC4TTF_cjs.J`
106
+ CREATE TABLE IF NOT EXISTS "password_resets" (
107
+ "id" UUID PRIMARY KEY DEFAULT gen_random_uuid(),
108
+ "user_id" UUID NOT NULL REFERENCES "users"("id") ON DELETE CASCADE,
109
+ "token" VARCHAR(64) NOT NULL UNIQUE,
110
+ "expires_at" TIMESTAMP NOT NULL,
111
+ "used_at" TIMESTAMP,
112
+ "created_at" TIMESTAMP NOT NULL DEFAULT NOW()
113
+ )
114
+ `),S=true);}async disconnect(){}async createUser(e){let s=await this.hashPassword(e.password),[t]=await this.db.insert(chunk7JWQ2PZP_cjs.a).values({email:e.email.toLowerCase(),name:e.name,passwordHash:s,role:e.role||"customer",avatar:e.avatar,tenantId:e.tenantId,emailVerified:e.emailVerified??true}).returning();return this.userToAuthUser(t)}async findUserByEmail(e){let[s]=await this.db.select().from(chunk7JWQ2PZP_cjs.a).where(chunkBCEE4NBZ_cjs.n(chunk7JWQ2PZP_cjs.a.email,e.toLowerCase())).limit(1);return s?this.userToAuthUser(s):null}async findUserById(e){let[s]=await this.db.select().from(chunk7JWQ2PZP_cjs.a).where(chunkBCEE4NBZ_cjs.n(chunk7JWQ2PZP_cjs.a.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(chunk7JWQ2PZP_cjs.a).set(t).where(chunkBCEE4NBZ_cjs.n(chunk7JWQ2PZP_cjs.a.id,e)).returning();return r?this.userToAuthUser(r):null}async deleteUser(e){return await this.db.delete(chunk7JWQ2PZP_cjs.a).where(chunkBCEE4NBZ_cjs.n(chunk7JWQ2PZP_cjs.a.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(chunk7JWQ2PZP_cjs.a).where(chunkVRZC4TTF_cjs.J`${chunk7JWQ2PZP_cjs.a.email} ILIKE ${m}`).orderBy(chunkBCEE4NBZ_cjs.M(chunk7JWQ2PZP_cjs.a.createdAt)).limit(t).offset(r),this.db.select({count:chunkVRZC4TTF_cjs.J`count(*)`}).from(chunk7JWQ2PZP_cjs.a).where(chunkVRZC4TTF_cjs.J`${chunk7JWQ2PZP_cjs.a.email} ILIKE ${m}`)]);return {users:w.map(T=>this.userToAuthUser(T)),total:Number(p)}}let[c,[{count:E}]]=await Promise.all([this.db.select().from(chunk7JWQ2PZP_cjs.a).orderBy(chunkBCEE4NBZ_cjs.M(chunk7JWQ2PZP_cjs.a.createdAt)).limit(t).offset(r),this.db.select({count:chunkVRZC4TTF_cjs.J`count(*)`}).from(chunk7JWQ2PZP_cjs.a)]);return {users:c.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(chunk7JWQ2PZP_cjs.a).where(chunkBCEE4NBZ_cjs.n(chunk7JWQ2PZP_cjs.a.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=crypto$1.randomBytes(32).toString("base64url"),r=crypto$1.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(chunk7JWQ2PZP_cjs.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]=await this.db.select().from(chunk7JWQ2PZP_cjs.d).where(chunkBCEE4NBZ_cjs.p(chunkBCEE4NBZ_cjs.n(chunk7JWQ2PZP_cjs.d.token,e),chunkBCEE4NBZ_cjs.s(chunk7JWQ2PZP_cjs.d.expiresAt,new Date))).limit(1);return s?this.sessionToSession(s):null}async findSessionByRefreshToken(e){let[s]=await this.db.select().from(chunk7JWQ2PZP_cjs.d).where(chunkBCEE4NBZ_cjs.p(chunkBCEE4NBZ_cjs.n(chunk7JWQ2PZP_cjs.d.refreshToken,e),chunkBCEE4NBZ_cjs.s(chunk7JWQ2PZP_cjs.d.expiresAt,new Date))).limit(1);return s?this.sessionToSession(s):null}async deleteSession(e){return await this.db.delete(chunk7JWQ2PZP_cjs.d).where(chunkBCEE4NBZ_cjs.n(chunk7JWQ2PZP_cjs.d.id,e)),true}async deleteUserSessions(e){return await this.db.delete(chunk7JWQ2PZP_cjs.d).where(chunkBCEE4NBZ_cjs.n(chunk7JWQ2PZP_cjs.d.userId,e)),1}async addPasswordToHistory(e,s){await this.db.insert(chunk7JWQ2PZP_cjs.j).values({userId:e,passwordHash:s});}async getPasswordHistory(e,s=5){return (await this.db.select({passwordHash:chunk7JWQ2PZP_cjs.j.passwordHash}).from(chunk7JWQ2PZP_cjs.j).where(chunkBCEE4NBZ_cjs.n(chunk7JWQ2PZP_cjs.j.userId,e)).orderBy(chunkBCEE4NBZ_cjs.M(chunk7JWQ2PZP_cjs.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]=await this.db.select().from(chunk7JWQ2PZP_cjs.k).where(chunkBCEE4NBZ_cjs.p(chunkBCEE4NBZ_cjs.n(chunk7JWQ2PZP_cjs.k.userId,e),chunkBCEE4NBZ_cjs.s(chunk7JWQ2PZP_cjs.k.lockedUntil,new Date))).limit(1);return !!s}async getLockout(e){let[s]=await this.db.select().from(chunk7JWQ2PZP_cjs.k).where(chunkBCEE4NBZ_cjs.p(chunkBCEE4NBZ_cjs.n(chunk7JWQ2PZP_cjs.k.userId,e),chunkBCEE4NBZ_cjs.s(chunk7JWQ2PZP_cjs.k.lockedUntil,new Date))).limit(1);return s?{lockedUntil:s.lockedUntil}:null}async recordFailedAttempt(e,s){let r=((await this.findUserById(e))?.failedLoginAttempts||0)+1;await this.updateUser(e,{failedLoginAttempts:r});let c=r>=5;return c&&await this.db.insert(chunk7JWQ2PZP_cjs.k).values({userId:e,ipAddress:s,reason:"Too many failed login attempts",lockedUntil:new Date(Date.now()+9e5)}),{attempts:r,locked:c}}async resetAttempts(e){await this.updateUser(e,{failedLoginAttempts:0});}async findAuditLogs(e){let{limit:s=50,offset:t=0,userId:r,action:u,resource:c,resourceId:E,success:m,startDate:w,endDate:p}=e,T=[];r&&T.push(chunkBCEE4NBZ_cjs.n(chunk7JWQ2PZP_cjs.e.userId,r)),u&&(Array.isArray(u)?T.push(chunkVRZC4TTF_cjs.J`${chunk7JWQ2PZP_cjs.e.action} = ANY(${u})`):T.push(chunkBCEE4NBZ_cjs.n(chunk7JWQ2PZP_cjs.e.action,u))),c&&T.push(chunkBCEE4NBZ_cjs.n(chunk7JWQ2PZP_cjs.e.resource,c)),E&&T.push(chunkBCEE4NBZ_cjs.n(chunk7JWQ2PZP_cjs.e.resourceId,E)),m!==void 0&&T.push(chunkBCEE4NBZ_cjs.n(chunk7JWQ2PZP_cjs.e.success,m)),w&&T.push(chunkVRZC4TTF_cjs.J`${chunk7JWQ2PZP_cjs.e.timestamp} >= ${w}`),p&&T.push(chunkVRZC4TTF_cjs.J`${chunk7JWQ2PZP_cjs.e.timestamp} <= ${p}`);let O=T.length>0?chunkBCEE4NBZ_cjs.p(...T):void 0,b=await this.db.select({count:chunkVRZC4TTF_cjs.J`count(*)`}).from(chunk7JWQ2PZP_cjs.e).where(O);return {logs:(await this.db.select().from(chunk7JWQ2PZP_cjs.e).where(O).orderBy(chunkBCEE4NBZ_cjs.M(chunk7JWQ2PZP_cjs.e.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(chunk7JWQ2PZP_cjs.e).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=crypto$1.randomBytes(32).toString("hex"),t=new Date(Date.now()+1440*60*1e3);return await this.db.insert(chunk7JWQ2PZP_cjs.h).values({userId:e,token:s,expiresAt:t}),{token:s,expiresAt:t}}async verifyEmailToken(e){let[s]=await this.db.select().from(chunk7JWQ2PZP_cjs.h).where(chunkBCEE4NBZ_cjs.n(chunk7JWQ2PZP_cjs.h.token,e)).limit(1);return s?s.expiresAt<new Date?{success:false,error:"Verification token has expired"}:(await this.db.update(chunk7JWQ2PZP_cjs.a).set({emailVerified:true}).where(chunkBCEE4NBZ_cjs.n(chunk7JWQ2PZP_cjs.a.id,s.userId)),await this.db.delete(chunk7JWQ2PZP_cjs.h).where(chunkBCEE4NBZ_cjs.n(chunk7JWQ2PZP_cjs.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=crypto$1.randomBytes(32).toString("hex"),r=new Date(Date.now()+3600*1e3);return await this.db.insert(chunk7JWQ2PZP_cjs.i).values({userId:s.id,token:t,expiresAt:r}),{token:t,expiresAt:r}}async resetPasswordWithToken(e,s){let[t]=await this.db.select().from(chunk7JWQ2PZP_cjs.i).where(chunkBCEE4NBZ_cjs.n(chunk7JWQ2PZP_cjs.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(chunk7JWQ2PZP_cjs.a).set({passwordHash:r,updatedAt:new Date}).where(chunkBCEE4NBZ_cjs.n(chunk7JWQ2PZP_cjs.a.id,t.userId)),await this.db.update(chunk7JWQ2PZP_cjs.i).set({usedAt:new Date}).where(chunkBCEE4NBZ_cjs.n(chunk7JWQ2PZP_cjs.i.id,t.id)),await this.db.delete(chunk7JWQ2PZP_cjs.d).where(chunkBCEE4NBZ_cjs.n(chunk7JWQ2PZP_cjs.d.userId,t.userId)),{success:true}}};exports.a=_;
@@ -1,2 +1,2 @@
1
- import {createRequire}from'module';import'path';import'url';var require$1 = createRequire(import.meta.url);
1
+ import'path';import'url';var require$1; if (typeof window === "undefined") { const { createRequire } = await import(/* @vite-ignore */ 'module'); require$1 = createRequire(import.meta.url); }
2
2
  var a=Object.create;var r=Object.defineProperty;var p=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var f=Object.getPrototypeOf,l=Object.prototype.hasOwnProperty;var d=(t=>typeof require$1<"u"?require$1:typeof Proxy<"u"?new Proxy(t,{get:(e,o)=>(typeof require$1<"u"?require$1:e)[o]}):t)(function(t){if(typeof require$1<"u")return require$1.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var s=(t,e)=>()=>(t&&(e=t(t=0)),e);var g=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),h=(t,e)=>{for(var o in e)r(t,o,{get:e[o],enumerable:true});},n=(t,e,o,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let m of c(e))!l.call(t,m)&&m!==o&&r(t,m,{get:()=>e[m],enumerable:!(i=p(e,m))||i.enumerable});return t};var x=(t,e,o)=>(o=t!=null?a(f(t)):{},n(e||!t||!t.__esModule?r(o,"default",{value:t,enumerable:true}):o,t)),u=t=>n(r({},"__esModule",{value:true}),t);var _=s(()=>{});export{d as a,s as b,g as c,h as d,x as e,u as f,_ as g};
@@ -0,0 +1,2 @@
1
+ import {g}from'./chunk-Y2YAKDEQ.js';if (typeof window === "undefined") { const { createRequire } = await import(/* @vite-ignore */ 'module'); createRequire(import.meta.url); }
2
+ g();function t(e,r,o){let n=new Error(`[unstorage] [${e}] ${r}`,o);return Error.captureStackTrace&&Error.captureStackTrace(n,t),n}function a(e,r){return Array.isArray(r)?t(e,`Missing some of the required options ${r.map(o=>"`"+o+"`").join(", ")}`):t(e,`Missing required option \`${r}\`.`)}export{t as a,a as b};
@@ -1,4 +1,4 @@
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);
1
+ import {H,b,M,K as K$1,L,g as g$1,l}from'./chunk-OBYAIJVU.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-JRUQ5ABB.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-TYQYKKWJ.js';import {g}from'./chunk-Y2YAKDEQ.js';if (typeof window === "undefined") { const { createRequire } = await import(/* @vite-ignore */ 'module'); createRequire(import.meta.url); }
2
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
3
  ${this.getCanonicalPath(e)}
4
4
  ${bt(e)}
@@ -1,3 +1,3 @@
1
- import {createRequire}from'module';import {a as a$1,h}from'./chunk-E27KEZPT.js';import {a}from'./chunk-BLH2MRK4.js';import {a as a$2}from'./chunk-6KRR7YHA.js';import {g}from'./chunk-C2PXMVR5.js';import {createHmac,randomBytes,randomUUID}from'crypto';createRequire(import.meta.url);
1
+ import {a as a$1,h}from'./chunk-RTHJ6SS5.js';import {a}from'./chunk-VVVCCB6R.js';import {a as a$2}from'./chunk-TBHNE4VV.js';import {g}from'./chunk-Y2YAKDEQ.js';import {createHmac,randomBytes,randomUUID}from'crypto';if (typeof window === "undefined") { const { createRequire } = await import(/* @vite-ignore */ 'module'); createRequire(import.meta.url); }
2
2
  g();var _={COLLECTION_CREATE:"collection.create",COLLECTION_UPDATE:"collection.update",COLLECTION_DELETE:"collection.delete",MEDIA_UPLOAD:"media.upload",MEDIA_DELETE:"media.delete",AUTH_LOGIN:"auth.login",AUTH_REGISTER:"auth.register",AUTH_LOGOUT:"auth.logout",ORDER_CREATED:"order.created",ORDER_PAID:"order.paid",ORDER_SHIPPED:"order.shipped",ORDER_DELIVERED:"order.delivered"},G=Object.values(_);var k="_webhooks",w="_webhook_deliveries";g();g();g();g();async function L(o,t,s,e={}){let r=e.timeout||3e4,i=Date.now(),u=new AbortController,c=setTimeout(()=>u.abort(),r);try{let a=await fetch(o,{method:"POST",headers:t,body:s,signal:u.signal});clearTimeout(c);let n=Date.now()-i,l;try{l=(await a.text()).slice(0,1e3);}catch{}let d={success:a.ok,status:a.status,statusText:a.statusText,body:l,duration:n};return d.success&&e.onSuccess?e.onSuccess(d):!d.success&&e.onFailure&&e.onFailure(`HTTP ${a.status}: ${a.statusText}`),d}catch(a){clearTimeout(c);let n=Date.now()-i,l=a.name==="AbortError"?`Request timed out after ${r}ms`:a.message||"Unknown error";return e.onFailure&&e.onFailure(l),{success:false,status:0,duration:n,error:l}}}async function $(o,t,s={}){let e=JSON.stringify(t),r={"Content-Type":"application/json","User-Agent":"Kyro-CMS-Webhook/1.0","X-Webhook-Event":t.event,"X-Webhook-Delivery":t.id,"X-Webhook-Timestamp":t.timestamp,...o.headers||{}};return o.secret&&(r["X-Webhook-Signature"]=P(e,o.secret)),L(o.url,r,e,s)}g();async function j(o,t,s={}){let e=o.config||{},r=process.env.GITHUB_TOKEN;if(!r)return {success:false,status:0,duration:0,error:"GITHUB_TOKEN environment variable is not set"};if(!e.githubOwner||!e.githubRepo)return {success:false,status:0,duration:0,error:"GitHub owner and repo are required"};let i=e.githubBranch||"main",u=Date.now(),c=async(a,n,l)=>{let d=await fetch(a,{method:n,headers:{"Content-Type":"application/json",Accept:"application/vnd.github+json",Authorization:`Bearer ${r}`,"X-GitHub-Api-Version":"2022-11-28","User-Agent":"Kyro-CMS-Webhook/1.0"},body:l?JSON.stringify(l):void 0});if(!d.ok){let y=await d.text();throw new Error(`GitHub API HTTP ${d.status}: ${y}`)}return d.json()};try{let a=`https://api.github.com/repos/${e.githubOwner}/${e.githubRepo}/git/refs/heads/${i}`,l=(await c(a,"GET")).object.sha,d=`https://api.github.com/repos/${e.githubOwner}/${e.githubRepo}/git/commits/${l}`,f=(await c(d,"GET")).tree.sha,p=`https://api.github.com/repos/${e.githubOwner}/${e.githubRepo}/git/commits`,b=(await c(p,"POST",{message:`Content updated via Kyro CMS (${t.event})`,tree:f,parents:[l]})).sha;return await c(a,"PATCH",{sha:b,force:!1}),{success:!0,status:201,duration:Date.now()-u,body:`Successfully pushed empty commit ${b} to branch ${i}`}}catch(a){return {success:false,status:0,duration:Date.now()-u,error:a.message||"Failed to push empty commit to GitHub"}}}var K={generic:$,"github-push":j};function S(o){return K[o||"generic"]||K.generic}function P(o,t){return `sha256=${createHmac("sha256",t).update(o).digest("hex")}`}function x(){return randomBytes(32).toString("hex")}async function U(o,t,s={}){return S(o.action)(o,t,s)}async function I(o,t,s,e={}){let r=e.maxRetries??5,i=e.retryDelay??1e3,u=null;for(let c=0;c<=r;c++){if(c>0){let a=Math.min(i*Math.pow(2,c-1),3e4);e.onRetry&&e.onRetry(c,`Retrying in ${a}ms...`),await F(a);}if(e.onRetry&&c>0&&e.onRetry(c,`Attempt ${c+1}/${r+1}`),u=await U(o,t,{...e,onRetry:void 0,onSuccess:void 0,onFailure:void 0}),u.success)return u;if(!(u.error?.includes("timed out")&&c<r)&&u.status>=400&&u.status<500)return u}return u||{success:false,status:0,duration:0,error:"All delivery attempts failed"}}function H(o,t,s,e,r,i){return {id:o,webhookId:t,event:s,payload:e,attempt:r,status:i.success?"success":"failed",responseStatus:i.status||void 0,responseBody:i.body,duration:i.duration,error:i.error,createdAt:new Date().toISOString(),deliveredAt:i.success?new Date().toISOString():void 0}}function F(o){return new Promise(t=>setTimeout(t,o))}function z(){return {id:`test_${Date.now()}`,event:"collection.create",timestamp:new Date().toISOString(),collection:"test",operation:"create",data:{message:"This is a test webhook delivery"},user:{id:"system",email:"system@kyro.dev",role:"super_admin"}}}g();function N(o){let t=new Set,s=[];for(let e of o){let r=e==="create"||e==="update"||e==="delete"?`collection.${e}`:e;t.has(r)||(t.add(r),s.push(r));}return s}var O=class{db;constructor(t){this.db=t;}async getWebhooks(t){let e=(await this.db.find({collection:k,where:t?.status?{status:{equals:t.status}}:{},limit:100,page:1,draft:true})).docs;return t?.event?e.filter(r=>r.events.includes(t.event)):e}async getWebhookById(t){return this.db.findByID({collection:k,id:t,draft:true})}async createWebhook(t){let s=new Date().toISOString(),e=t.secret||x(),r={id:randomUUID(),name:t.name,url:t.url,events:N(t.events),collections:t.collections||[],status:t.status||"active",secret:e,headers:t.headers||{},action:t.action||"generic",config:t.config||{},createdAt:s,updatedAt:s};return await this.db.create({collection:k,data:r}),r}async updateWebhook(t,s){let e=await this.getWebhookById(t);if(!e)return null;let r={...e,...s,events:s.events?N(s.events):e.events,collections:s.collections!==void 0?s.collections:e.collections,action:s.action!==void 0?s.action:e.action,config:s.config!==void 0?{...e.config,...s.config}:e.config,updatedAt:new Date().toISOString()};return s.secret===""&&"secret"in s&&delete r.secret,await this.db.update({collection:k,id:t,data:r}),r}async deleteWebhook(t){await this.db.delete({collection:k,id:t});}async trigger(t,s){let e=await this.getWebhooks({status:"active",event:t}),r=s.collection,i=e.filter(a=>!a.collections||a.collections.length===0||!r?true:a.collections.includes(r));if(i.length===0)return [];let u={id:randomUUID(),event:t,timestamp:new Date().toISOString(),...s},c=[];for(let a of i){let n=await this.triggerWebhook(a,u);c.push(n);}return c}async triggerWebhook(t,s){let e=randomUUID();try{let r=await I(t,s,e,{maxRetries:5,retryDelay:1e3}),i=H(e,t.id,t.events[0],s,1,r);try{await this.db.create({collection:w,data:i});}catch{console.warn("[WebhookService] Failed to save delivery record:",e);}return r.success?await this.updateWebhook(t.id,{lastTriggered:new Date().toISOString(),lastError:null}).catch(()=>{}):await this.updateWebhook(t.id,{lastError:r.error||`HTTP ${r.status}`}).catch(()=>{}),{deliveryId:e,webhookId:t.id,event:t.events[0],status:r.success?"success":"failed",responseStatus:r.status,duration:r.duration,error:r.error}}catch(r){return {deliveryId:e,webhookId:t.id,event:t.events[0],status:"failed",error:r.message}}}async testWebhook(t){let s=await this.getWebhookById(t);if(!s)return null;let e={id:randomUUID(),event:s.events[0]||"collection.create",timestamp:new Date().toISOString(),collection:"test",operation:"create",data:{message:"This is a test webhook delivery from Kyro CMS"},user:{id:"system",email:"system@kyro.dev",role:"super_admin"}};return this.triggerWebhook(s,e)}async getDeliveryHistory(t,s=50){return (await this.db.find({collection:w,where:{webhookId:{equals:t}},sort:"-createdAt",limit:s,page:1})).docs}async retryDelivery(t){let s=await this.db.findByID({collection:w,id:t});if(!s)return null;let e=await this.getWebhookById(s.webhookId);return e?this.triggerWebhook(e,s.payload):null}};function X(o){return new O(o)}g();g();function Y(o){if(!o)return [];if(typeof o=="string")return [{id:o}];if(Array.isArray(o))return o.map(t=>typeof t=="object"?{id:t.value??t.id??t,relationTo:t.relationTo}:{id:t});if(typeof o=="object"){let t=o.value??o.id??o;if(typeof t=="string")return [{id:t,relationTo:o.relationTo}];if(Array.isArray(t))return t.map(s=>({id:s,relationTo:o.relationTo}))}return []}function W(o,t,s){if(!(!o||typeof o!="object")){for(let e of t)if(!(!e.name&&e.type!=="row"&&e.type!=="collapsible"&&e.type!=="tabs")){if(e.type==="relationship"||e.type==="upload")s(e,o);else if(e.type==="group"||e.type==="collapsible"||e.type==="row"){let r=e.name?o[e.name]:o;W(r,e.fields||[],s);}else if(e.type==="tabs"&&e.tabs){let r=e.name?o[e.name]:o;for(let i of e.tabs)W(r,i.fields||[],s);}else if(e.type==="array"&&e.name&&Array.isArray(o[e.name]))for(let r of o[e.name])W(r,e.fields||[],s);else if(e.type==="blocks"&&e.name&&Array.isArray(o[e.name]))for(let r of o[e.name]){if(!r||typeof r!="object")continue;let i=r.type||r.blockType;if(!i)continue;let u=e.blocks?.find(c=>c.slug===i);if(u&&Array.isArray(u.fields)){let c=r.data&&typeof r.data=="object"?r.data:r;W(c,u.fields,s);}}}}}function J(o,t,s){W(o,t,(e,r)=>{let i=r[e.name];if(!i)return;let u=Array.isArray(e.relationTo)?e.relationTo:[e.relationTo],c=Y(i);for(let a of c){if(!a.id)continue;let n=a.relationTo?[a.relationTo]:u;for(let l of n)l!=="*"&&(s.has(l)||s.set(l,new Set),s.get(l).add(a.id));}});}function Q(o,t,s){W(o,t,(e,r)=>{let i=r[e.name];if(!i)return;let u=Array.isArray(e.relationTo)?e.relationTo:[e.relationTo],c=n=>{r[e.name]=n;},a=(n,l)=>{let d=l?[l]:u;for(let y of d){let f=s.get(y);if(f&&f.has(n))return f.get(n)}return null};if(typeof i=="string"){let n=a(i);c(n||{id:i});}else if(Array.isArray(i))c(i.map(n=>{let l=typeof n=="object"?n.value??n.id:n,d=typeof n=="object"?n.relationTo:void 0,y=a(l,d);return y||{id:l}}));else if(typeof i=="object"){let n=i.value??i.id,l=i.relationTo,d=a(n,l);c(d||{id:n});}});}async function Z(o,t,s,e,r=1,i=0){if(!o||o.length===0||r>i)return;let u=new Map;for(let n of o)J(n,t,u);if(u.size===0)return;let c=new Map,a$1=new Map;for(let[n,l]of u.entries()){if(l.size===0||!e.getCollection(n))continue;let y=new Map,f=Array.from(l),p=[];for(let E of f){try{let v=(await s.find({collection:n,where:{id:{in:f}},limit:f.length,draft:!0}))?.docs||[];for(let A of v)A&&A.id&&(y.set(String(A.id),A),p.push(A));}catch{for(let b of f)try{let v=await s.findByID({collection:n,id:b,draft:!0});v&&(y.set(b,v),p.push(v));}catch{}}break}c.set(n,y),p.length>0&&a$1.set(n,p);}if(r<i)for(let[n,l]of a$1.entries()){let d=e.getCollection(n);d&&await Z(l,d.fields,s,e,r+1,i);}for(let n=0;n<o.length;n++)Q(o[n],t,c),o[n]=a(o[n]);}g();function M(o){return o==="read"?"read":o==="create"?"create":o==="update"?"update":"delete"}function ee(o,t){return {none:false,read:o==="read",create:o==="read"||o==="create",update:o==="read"||o==="create"||o==="update",delete:o==="read"||o==="create"||o==="update"||o==="delete",admin:true}[t]||false}async function Le(o,t,s,e={}){let{user:r,req:i,tenantId:u,apiKey:c}=s,{enablePublicAccess:a=true,defaultAccess:n="none"}=e,l=o.access?.[t];if(l){let y=await a$1(l,{req:i,user:r,tenantId:u});return y===false?{allowed:false,error:"Access denied",status:403}:typeof y=="object"?{allowed:true,extraWhere:y}:{allowed:true}}if(c?.permissions?.length>0){let y=o.slug,f=M(t),p=`${y}:${f}`;return !h(c.permissions,p)&&!h(c.permissions,`${y}:admin`)?{allowed:false,error:"Access denied: insufficient permissions",status:403}:{allowed:true}}if(r){let y=o.slug,f=M(t),p=`${y}:${f}`,E=a$2({id:r.id,email:r.email,role:r.role},p),b=a$2({id:r.id,email:r.email,role:r.role},`${y}:admin`);return E||b?{allowed:true}:{allowed:false,error:"Access denied: missing RBAC permission",status:403}}let d=ee(t,n);return a&&d?{allowed:true}:{allowed:false,error:"Authentication required",status:401}}async function $e(o,t,s,e={}){let{user:r,req:i,tenantId:u}=s,{enablePublicAccess:c=true}=e,a=o.access?.[t];if(a)return await a$1(a,{req:i,user:r,tenantId:u})===false?{allowed:false,error:"Access denied",status:403}:{allowed:true};if(r){let n=`globals:${t}`,l=a$2({id:r.id,email:r.email,role:r.role},n),d=a$2({id:r.id,email:r.email,role:r.role},"globals:admin");return l||d?{allowed:true}:{allowed:false,error:"Access denied: missing RBAC permission",status:403}}return c?{allowed:true}:{allowed:false,error:"Authentication required",status:401}}
3
3
  export{Z as a,Le as b,$e as c,_ as d,G as e,k as f,w as g,P as h,x as i,U as j,I as k,H as l,z as m,O as n,X as o};
@@ -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{let e=await import('./lib-5QYYN6ML.cjs');o=e.MongoClient??e.default?.MongoClient;}catch{chunkF4ITQ6XQ_cjs.a(["mongodb"]);let n=await import('./lib-5QYYN6ML.cjs');o=n.MongoClient??n.default?.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:l}=o,d=this.getCollectionConfig(e),f=this.getMongoCollection(e),g={...n};this.tenantContext&&d.tenantScoped&&(g=chunkVQ53TFYA_cjs.c({where:g},e,this.tenantContext,chunkVQ53TFYA_cjs.b).where||{});let u=this.buildFilter(g,d.tenantScoped?r:void 0),c=d.fields.find(p=>p.name==="status"),h=c?.type==="select"&&Array.isArray(c.options)&&c.options.some(p=>p.value==="published");!l&&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,d));return this.tenantContext&&!this.tenantContext.isSuperAdmin&&(C=C.filter(p=>chunkVQ53TFYA_cjs.d(p,e,this.tenantContext,chunkVQ53TFYA_cjs.b))),l&&(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 l=i.fields.find(u=>u.name==="status"),d=l?.type==="select"&&Array.isArray(l.options)&&l.options.some(u=>u.value==="published");!t&&d&&(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 l={...r,_id:a};return s&&t.tenantScoped&&(l.tenantId=s),await i.insertOne(l),this.processResult(l,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 l=this.prepareData(s,i),d=await r.findOneAndUpdate(a,{$set:l},{returnDocument:"after"});if(!d)throw new Error(`Document not found: ${e}/${n}`);return this.processResult(d,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),l=i.fields.find(u=>u.name==="status"),d=l?.type==="select"&&Array.isArray(l.options)&&l.options.some(u=>u.value==="published");!t&&d&&(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),l=this.getMongoCollection(`${e}_versions`),d={document_id:n,autosave:{$ne:true}};r&&a.tenantScoped&&(d.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([l.find(d).sort(u).skip(f).limit(t).toArray(),l.countDocuments(d)]);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:l}=o,d=this.getCollectionConfig(e),f=this.getMongoCollection(`${e}_versions`);if(l){let c={document_id:n,collection_slug:e,autosave:true};a&&d.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:l===true,created_by:i,change_description:r,createdAt:g,updatedAt:g};if(a&&d.tenantScoped&&(u.tenant_id=a),await f.insertOne(u),!l){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 d=(await r.find(a).sort({createdAt:-1}).limit(s).project({_id:1}).toArray()).map(f=>f._id);d.length>0&&await r.deleteMany({document_id:n,autosave:{$ne:true},_id:{$nin:d},...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;
@@ -1,4 +1,4 @@
1
- import {createRequire}from'module';import {h,a}from'./chunk-E27KEZPT.js';import {a as a$1}from'./chunk-6KRR7YHA.js';import {g}from'./chunk-C2PXMVR5.js';createRequire(import.meta.url);
1
+ import {h,a}from'./chunk-RTHJ6SS5.js';import {a as a$1}from'./chunk-TBHNE4VV.js';import {g}from'./chunk-Y2YAKDEQ.js';if (typeof window === "undefined") { const { createRequire } = await import(/* @vite-ignore */ 'module'); createRequire(import.meta.url); }
2
2
  g();g();g();g();var Mi=Object.freeze({major:16,minor:14,patch:2,preReleaseTag:null});g();function F(e,t){throw new Error(t)}g();g();g();g();function ae(e){return typeof e=="object"&&e!==null}g();g();function W(e,t){throw new Error(t??"Unexpected invariant triggered.")}var ji=/\r\n|[\n\r]/g;function Xe(e,t){let n=0,r=1;for(let i of e.body.matchAll(ji)){if(typeof i.index=="number"||W(),i.index>=t)break;n=i.index+i[0].length,r+=1;}return {line:r,column:t+1-n}}g();function wn(e){return Yt(e.source,Xe(e.source,e.start))}function Yt(e,t){let n=e.locationOffset.column-1,r="".padStart(n)+e.body,i=t.line-1,s=e.locationOffset.line-1,o=t.line+s,a=t.line===1?n:0,p=t.column+a,c=`${e.name}:${o}:${p}
3
3
  `,f=r.split(/\r\n|[\n\r]/g),d=f[i];if(d.length>120){let h=Math.floor(p/80),v=p%80,g=[];for(let A=0;A<d.length;A+=80)g.push(d.slice(A,A+80));return c+Jr([[`${o} |`,g[0]],...g.slice(1,h+1).map(A=>["|",A]),["|","^".padStart(v)],["|",g[h+1]]])}return c+Jr([[`${o-1} |`,f[i-1]],[`${o} |`,d],["|","^".padStart(p)],[`${o+1} |`,f[i+1]]])}function Jr(e){let t=e.filter(([r,i])=>i!==void 0),n=Math.max(...t.map(([r])=>r.length));return t.map(([r,i])=>r.padStart(n)+(i?" "+i:"")).join(`
4
4
  `)}function Gi(e){let t=e[0];return t==null||"kind"in t||"length"in t?{nodes:t,source:e[1],positions:e[2],path:e[3],originalError:e[4],extensions:e[5]}:t}var m=class e extends Error{constructor(t,...n){var r,i,s;let{nodes:o,source:a,positions:p,path:c,originalError:f,extensions:d}=Gi(n);super(t),this.name="GraphQLError",this.path=c??void 0,this.originalError=f??void 0,this.nodes=Xr(Array.isArray(o)?o:o?[o]:void 0);let h=Xr((r=this.nodes)===null||r===void 0?void 0:r.map(g=>g.loc).filter(g=>g!=null));this.source=a??(h==null||(i=h[0])===null||i===void 0?void 0:i.source),this.positions=p??h?.map(g=>g.start),this.locations=p&&a?p.map(g=>Xe(a,g)):h?.map(g=>Xe(g.source,g.start));let v=ae(f?.extensions)?f?.extensions:void 0;this.extensions=(s=d??v)!==null&&s!==void 0?s:Object.create(null),Object.defineProperties(this,{message:{writable:true,enumerable:true},name:{enumerable:false},nodes:{enumerable:false},source:{enumerable:false},positions:{enumerable:false},originalError:{enumerable:false}}),f!=null&&f.stack?Object.defineProperty(this,"stack",{value:f.stack,writable:true,configurable:true}):Error.captureStackTrace?Error.captureStackTrace(this,e):Object.defineProperty(this,"stack",{value:Error().stack,writable:true,configurable:true});}get[Symbol.toStringTag](){return "GraphQLError"}toString(){let t=this.message;if(this.nodes)for(let n of this.nodes)n.loc&&(t+=`
@@ -1,4 +1,4 @@
1
- import {createRequire}from'module';import {c as c$1}from'./chunk-WSP7PSXC.js';import {c,g,e}from'./chunk-C2PXMVR5.js';import {URL as URL$1,URLSearchParams as URLSearchParams$1}from'url';import Ip from'fs';import Rp from'path';import SR,{webcrypto}from'crypto';import {Buffer as Buffer$1,Blob}from'buffer';import {TextEncoder,TextDecoder as TextDecoder$1}from'util';import Fl from'stream';import {ReadableStream}from'stream/web';import Yx,{Script}from'vm';import {isIP}from'net';import BD from'http';import VD from'https';import Jp from'zlib';import sF from'child_process';import {PerformanceObserver,PerformanceEntry}from'perf_hooks';createRequire(import.meta.url);
1
+ import {c as c$1}from'./chunk-7MNDQU6K.js';import {c,g,e}from'./chunk-Y2YAKDEQ.js';import {URL as URL$1,URLSearchParams as URLSearchParams$1}from'url';import Ip from'fs';import Rp from'path';import SR,{webcrypto}from'crypto';import {Buffer as Buffer$1,Blob}from'buffer';import {TextEncoder,TextDecoder as TextDecoder$1}from'util';import Fl from'stream';import {ReadableStream}from'stream/web';import Yx,{Script}from'vm';import {isIP}from'net';import BD from'http';import VD from'https';import Jp from'zlib';import sF from'child_process';import {PerformanceObserver,PerformanceEntry}from'perf_hooks';if (typeof window === "undefined") { const { createRequire } = await import(/* @vite-ignore */ 'module'); createRequire(import.meta.url); }
2
2
  var vk=c((u6,Ek)=>{g();function bO(o){return o.toString("ascii",0,2)==="BM"}function gO(o){return {width:o.readUInt32LE(18),height:Math.abs(o.readInt32LE(22))}}Ek.exports={detect:bO,calculate:gO};});var wx=c((p6,kk)=>{g();var SO=1,PO=6,AO=16;function wO(o){var t;return o.readUInt16LE(0)!==0?false:(t=o.readUInt16LE(2),t===SO)}function Tk(o,t){var e=o.readUInt8(t);return e===0?256:e}function Ck(o,t){var e=PO+t*AO;return {width:Tk(o,e),height:Tk(o,e+1)}}function xO(o){var t=o.readUInt16LE(4),e=Ck(o,0),r;if(t===1)return e;for(e.images=[{width:e.width,height:e.height}],r=1;r<t;r+=1)e.images.push(Ck(o,r));return e}kk.exports={detect:wO,calculate:xO};});var Lk=c((h6,Nk)=>{g();var EO=2;function vO(o){var t;return o.readUInt16LE(0)!==0?false:(t=o.readUInt16LE(2),t===EO)}Nk.exports={detect:vO,calculate:wx().calculate};});var Ik=c((d6,Mk)=>{g();function TO(o){return o.readUInt32LE(0)===542327876}function CO(o){return {height:o.readUInt32LE(12),width:o.readUInt32LE(16)}}Mk.exports={detect:TO,calculate:CO};});var Dk=c((b6,Rk)=>{g();var kO=/^GIF8[79]a/;function NO(o){var t=o.toString("ascii",0,6);return kO.test(t)}function LO(o){return {width:o.readUInt16LE(6),height:o.readUInt16LE(8)}}Rk.exports={detect:NO,calculate:LO};});var Fk=c((S6,Ok)=>{g();function MO(o){var t=o.toString("hex",0,2);return t==="ffd8"}function IO(o,t){return {height:o.readUInt16BE(t),width:o.readUInt16BE(t+2)}}function RO(o,t){if(t>o.length)throw new TypeError("Corrupt JPG, exceeded buffer limits");if(o[t]!==255)throw new TypeError("Invalid JPG, marker table corrupted")}function DO(o){o=o.slice(4);for(var t,e;o.length;){if(t=o.readUInt16BE(0),RO(o,t),e=o[t+1],e===192||e===193||e===194)return IO(o,t+5);o=o.slice(t+2);}throw new TypeError("Invalid JPG, no size found")}Ok.exports={detect:MO,calculate:DO};});var Hk=c((A6,Vk)=>{g();var OO=`PNG\r
3
3
  
4
4
  `,FO="IHDR",Bk="CgBI";function BO(o){if(OO===o.toString("ascii",1,8)){var t=o.toString("ascii",12,16);if(t===Bk&&(t=o.toString("ascii",28,32)),t!==FO)throw new TypeError("invalid png");return true}}function VO(o){return o.toString("ascii",12,16)===Bk?{width:o.readUInt32BE(32),height:o.readUInt32BE(36)}:{width:o.readUInt32BE(16),height:o.readUInt32BE(20)}}Vk.exports={detect:BO,calculate:VO};});var Uk=c((x6,Gk)=>{g();function HO(o){return o.toString("ascii",0,4)==="8BPS"}function GO(o){return {width:o.readUInt32BE(18),height:o.readUInt32BE(14)}}Gk.exports={detect:HO,calculate:GO};});var zk=c((v6,Wk)=>{g();var UO=/<svg[^>]+[^>]*>/;function WO(o){return UO.test(o)}var HS={root:/<svg\s[^>]+>/,width:/\bwidth=(['"])([^%]+?)\1/,height:/\bheight=(['"])([^%]+?)\1/,viewbox:/\bviewBox=(['"])(.+?)\1/};function zO(o){var t=o.split(" ");return {width:parseInt(t[2],10),height:parseInt(t[3],10)}}function _O(o){var t=o.match(HS.width),e=o.match(HS.height),r=o.match(HS.viewbox);return {width:t&&parseInt(t[2],10),height:e&&parseInt(e[2],10),viewbox:r&&zO(r[2])}}function $O(o){return {width:o.width,height:o.height}}function KO(o){var t=o.viewbox.width/o.viewbox.height;return o.width?{width:o.width,height:Math.floor(o.width/t)}:o.height?{width:Math.floor(o.height*t),height:o.height}:{width:o.viewbox.width,height:o.viewbox.height}}function jO(o){var t=o.toString("utf8").match(HS.root);if(t){var e=_O(t[0]);if(e.width&&e.height)return $O(e);if(e.viewbox)return KO(e)}throw new TypeError("invalid svg")}Wk.exports={detect:WO,calculate:jO};});var $k=c((C6,_k)=>{g();function qO(o){var t=o.toString("ascii",0,4)==="RIFF",e=o.toString("ascii",8,12)==="WEBP",r=o.toString("ascii",12,15)==="VP8";return t&&e&&r}function YO(o){var t=o.toString("ascii",12,16);if(o=o.slice(20,30),t==="VP8X"){var e=o[0],r=(e&192)===0,n=(e&1)===0;return r&&n?QO(o):false}if(t==="VP8 "&&o[0]!==47)return XO(o);var i=o.toString("hex",3,6);return t==="VP8L"&&i!=="9d012a"?JO(o):false}function QO(o){return {width:1+o.readUIntLE(4,3),height:1+o.readUIntLE(7,3)}}function JO(o){return {width:1+((o[2]&63)<<8|o[1]),height:1+((o[4]&15)<<10|o[3]<<2|(o[2]&192)>>6)}}function XO(o){return {width:o.readInt16LE(6)&16383,height:o.readInt16LE(8)&16383}}_k.exports={detect:qO,calculate:YO};});var xx=c((N6,Kk)=>{g();var ZO={bmp:vk(),cur:Lk(),dds:Ik(),gif:Dk(),ico:wx(),jpg:Fk(),png:Hk(),psd:Uk(),svg:zk(),webp:$k()};Kk.exports=ZO;});var Yk=c((M6,qk)=>{g();var jk=xx();qk.exports=function(o){var t,e;for(t in jk)if(e=jk[t].detect(o),e)return t};});var Qk=c((R6,vx)=>{g();var Ex=xx(),tF=Yk();function eF(o){var t=tF(o);if(t in Ex){var e=Ex[t].calculate(o);if(e!==false)return e.type=t,e}throw new TypeError("unsupported file type: "+t)}vx.exports=function(o){if(Buffer.isBuffer(o))return eF(o);throw new TypeError("expecting only a buffer as input")};vx.exports.types=Object.keys(Ex);});var Rf=c(wu=>{g();wu.removeLeadingAndTrailingHTTPWhitespace=o=>o.replace(/^[ \t\n\r]+/u,"").replace(/[ \t\n\r]+$/u,"");wu.removeTrailingHTTPWhitespace=o=>o.replace(/[ \t\n\r]+$/u,"");wu.isHTTPWhitespaceChar=o=>o===" "||o===" "||o===`
@@ -0,0 +1,115 @@
1
+ import {a as a$1,d,j,k,e as e$1,h,i}from'./chunk-47CXBWMA.js';import {n,M,p,s}from'./chunk-HRAY65XH.js';import {J}from'./chunk-3NSZZCOJ.js';import {a}from'./chunk-7NH7H3WA.js';import {g,e}from'./chunk-Y2YAKDEQ.js';import {randomBytes}from'crypto';if (typeof window === "undefined") { const { createRequire } = await import(/* @vite-ignore */ 'module'); 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,emailVerified:e.emailVerified??true}).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(T=>this.userToAuthUser(T)),total:Number(p)}}let[c,[{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:c.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 c=r>=5;return c&&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:c}}async resetAttempts(e){await this.updateUser(e,{failedLoginAttempts:0});}async findAuditLogs(e){let{limit:s=50,offset:t=0,userId:r,action:u,resource:c,resourceId:E,success:m,startDate:w,endDate:p$1}=e,T=[];r&&T.push(n(e$1.userId,r)),u&&(Array.isArray(u)?T.push(J`${e$1.action} = ANY(${u})`):T.push(n(e$1.action,u))),c&&T.push(n(e$1.resource,c)),E&&T.push(n(e$1.resourceId,E)),m!==void 0&&T.push(n(e$1.success,m)),w&&T.push(J`${e$1.timestamp} >= ${w}`),p$1&&T.push(J`${e$1.timestamp} <= ${p$1}`);let O=T.length>0?p(...T):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};
@@ -390,4 +390,4 @@ bucket_name = "${u}"
390
390
  `);}catch(x){let _=x?.stdout?.toString?.()||"",L=x?.stderr?.toString?.()||"";ee.fail("Deployment failed"),_&&process.stdout.write(_),L&&process.stdout.write(L),console.log(`
391
391
  ${C.red.bold("\u2716 Deployment Failed!")}`),console.log(` ${C.dim("See the Wrangler error above.")}
392
392
  `),f&&process.stdout.write(JSON.stringify({ok:false,error:"Deployment failed"})+`
393
- `),process.exit(1);}}),i}var ng=url.fileURLToPath(chunkBUNLC3II_cjs.g),og=Gt.dirname(ng),Gl="0.1.0";try{Gl=JSON.parse(et.readFileSync(Gt.join(og,"../../package.json"),"utf-8")).version;}catch{}var jt=new ie;jt.name("kyro").description("Kyro CMS - Astro-native headless CMS").version(Gl);jt.command("dev").description("Start Kyro CMS development server").option("-p, --port <port>","Port to run on","4321").option("-h, --host <host>","Host to bind to","localhost").action(async i=>{let{exec:t}=await import('child_process'),e=t(`astro dev --port ${i.port} --host ${i.host}`,{env:{...process.env,NODE_NO_WARNINGS:"1"}});e.stdout?.on("data",s=>process.stdout.write(s)),e.stderr?.on("data",s=>process.stderr.write(s)),process.on("SIGINT",()=>{e.kill("SIGINT"),process.exit(0);}),process.on("SIGTERM",()=>{e.kill("SIGTERM"),process.exit(0);});});jt.addCommand(Bo());jt.addCommand(Vl());var ts=jt.command("db").description("Database management commands");ts.command("generate").description("Generate migrations from schema").action(async()=>{let{exec:i}=await import('child_process');i("npx drizzle-kit generate",(t,e,s)=>{t&&(console.error("\u274C Generation failed:",t.message),process.exit(1));});});ts.command("migrate").description("Run database migrations").action(async()=>{let{exec:i}=await import('child_process');i("npx drizzle-kit migrate",(t,e,s)=>{t&&(console.error("\u274C Migration failed:",t.message),process.exit(1));});});ts.command("push").description("Push schema to database (development)").action(async()=>{let{exec:i}=await import('child_process');i("npx drizzle-kit push",(t,e,s)=>{t&&(console.error("\u274C Push failed:",t.message),process.exit(1));});});ts.command("seed").description("Seed database with initial data").action(async()=>{let{exec:i}=await import('child_process');i("npx tsx src/database/drizzle/seed.ts",(t,e,s)=>{t&&(console.error("\u274C Seeding failed:",t.message),process.exit(1));});});ts.command("studio").description("Open Drizzle Studio").action(async()=>{let{exec:i}=await import('child_process');i("npx drizzle-kit studio",(t,e,s)=>{t&&(console.error("\u274C Studio failed:",t.message),process.exit(1));});});var ug=jt.command("auth").description("Authentication management commands");ug.command("bootstrap").description("Create initial admin user").option("-e, --email <email>","Admin email",process.env.KYRO_ADMIN_EMAIL).option("-p, --password <password>","Admin password",process.env.KYRO_ADMIN_PASSWORD).option("-r, --role <role>","Admin role",process.env.KYRO_ADMIN_ROLE||"admin").action(async i=>{(!i.email||!i.password)&&(console.error("\u274C Email and password are required. Set KYRO_ADMIN_EMAIL and KYRO_ADMIN_PASSWORD env vars or use -e and -p options."),process.exit(1));try{let{bootstrapAdmin:t}=await import('../bootstrap-DOOM2CNQ.cjs'),e=process.env.DATABASE_URL||"",s=e.toLowerCase().startsWith("postgres://")||e.toLowerCase().startsWith("postgresql://"),r=e.toLowerCase().startsWith("mongodb://")||e.toLowerCase().startsWith("mongodb+srv://"),n=!e||e.includes(".db")||e.includes("sqlite")||e.includes("file:"),o;if(s){let{PostgresAuthAdapter:a}=await import('../postgres-auth-adapter-2M4RNEY3.cjs'),{drizzle:h}=await import('../postgres-js-3Y54EXVQ.cjs'),{default:d}=await import('../src-6LAUXXDM.cjs'),c=d(e,{max:1,onnotice:()=>{}}),f=h(c);o=new a({db:f});}else if(r){let{MongoDBAuthAdapter:a}=await import('../mongo-auth-adapter-7K64Y2QM.cjs'),h=await import('../lib-5QYYN6ML.cjs'),d=new h.MongoClient(e);await d.connect();let c=d.db();o=new a({db:c});}else {let{SQLiteAuthAdapter:a}=await import('../sqlite-adapter-ZTABLT2X.cjs'),h=process.env.KYRO_AUTH_DB_PATH||"./data/auth.db";o=new a({path:h});}o.connect&&await o.connect();let u=await t({authAdapter:o,adminEmail:i.email,adminPassword:i.password,adminRole:i.role});o.disconnect&&await o.disconnect(),u.success||(console.error("\u274C Failed to create admin:",u.error),process.exit(1));}catch(t){console.error("\u274C Bootstrap failed:",t),process.exit(1);}});jt.command("health").description("Check system health").action(async()=>{let i=process.env.DATABASE_URL||"",t=i.toLowerCase().startsWith("postgres://")||i.toLowerCase().startsWith("postgresql://"),e=i.toLowerCase().startsWith("mongodb://")||i.toLowerCase().startsWith("mongodb+srv://"),s=!i||i.includes(".db")||i.includes("sqlite")||i.includes("file:");if(t)try{let{default:r}=await import('../src-6LAUXXDM.cjs'),n=r(i,{max:1,onnotice:()=>{}});await n.unsafe("SELECT 1"),await n.end();}catch{}else if(e)try{let r=await import('../lib-5QYYN6ML.cjs'),n=new r.MongoClient(i);await n.connect(),await n.db().admin().ping(),await n.close();}catch{}else if(s)try{let r=process.env.KYRO_AUTH_DB_PATH||"./data/auth.db",{existsSync:n}=await import('fs');n(r);}catch{}});jt.parse();process.argv.slice(2).length||jt.outputHelp();
393
+ `),process.exit(1);}}),i}var ng=url.fileURLToPath(chunkBUNLC3II_cjs.g),og=Gt.dirname(ng),Gl="0.1.0";try{Gl=JSON.parse(et.readFileSync(Gt.join(og,"../../package.json"),"utf-8")).version;}catch{}var jt=new ie;jt.name("kyro").description("Kyro CMS - Astro-native headless CMS").version(Gl);jt.command("dev").description("Start Kyro CMS development server").option("-p, --port <port>","Port to run on","4321").option("-h, --host <host>","Host to bind to","localhost").action(async i=>{let{exec:t}=await import('child_process'),e=t(`astro dev --port ${i.port} --host ${i.host}`,{env:{...process.env,NODE_NO_WARNINGS:"1"}});e.stdout?.on("data",s=>process.stdout.write(s)),e.stderr?.on("data",s=>process.stderr.write(s)),process.on("SIGINT",()=>{e.kill("SIGINT"),process.exit(0);}),process.on("SIGTERM",()=>{e.kill("SIGTERM"),process.exit(0);});});jt.addCommand(Bo());jt.addCommand(Vl());var ts=jt.command("db").description("Database management commands");ts.command("generate").description("Generate migrations from schema").action(async()=>{let{exec:i}=await import('child_process');i("npx drizzle-kit generate",(t,e,s)=>{t&&(console.error("\u274C Generation failed:",t.message),process.exit(1));});});ts.command("migrate").description("Run database migrations").action(async()=>{let{exec:i}=await import('child_process');i("npx drizzle-kit migrate",(t,e,s)=>{t&&(console.error("\u274C Migration failed:",t.message),process.exit(1));});});ts.command("push").description("Push schema to database (development)").action(async()=>{let{exec:i}=await import('child_process');i("npx drizzle-kit push",(t,e,s)=>{t&&(console.error("\u274C Push failed:",t.message),process.exit(1));});});ts.command("seed").description("Seed database with initial data").action(async()=>{let{exec:i}=await import('child_process');i("npx tsx src/database/drizzle/seed.ts",(t,e,s)=>{t&&(console.error("\u274C Seeding failed:",t.message),process.exit(1));});});ts.command("studio").description("Open Drizzle Studio").action(async()=>{let{exec:i}=await import('child_process');i("npx drizzle-kit studio",(t,e,s)=>{t&&(console.error("\u274C Studio failed:",t.message),process.exit(1));});});var ug=jt.command("auth").description("Authentication management commands");ug.command("bootstrap").description("Create initial admin user").option("-e, --email <email>","Admin email",process.env.KYRO_ADMIN_EMAIL).option("-p, --password <password>","Admin password",process.env.KYRO_ADMIN_PASSWORD).option("-r, --role <role>","Admin role",process.env.KYRO_ADMIN_ROLE||"admin").action(async i=>{(!i.email||!i.password)&&(console.error("\u274C Email and password are required. Set KYRO_ADMIN_EMAIL and KYRO_ADMIN_PASSWORD env vars or use -e and -p options."),process.exit(1));try{let{bootstrapAdmin:t}=await import('../bootstrap-F4SDJLPK.cjs'),e=process.env.DATABASE_URL||"",s=e.toLowerCase().startsWith("postgres://")||e.toLowerCase().startsWith("postgresql://"),r=e.toLowerCase().startsWith("mongodb://")||e.toLowerCase().startsWith("mongodb+srv://"),n=!e||e.includes(".db")||e.includes("sqlite")||e.includes("file:"),o;if(s){let{PostgresAuthAdapter:a}=await import('../postgres-auth-adapter-ZO6HK5AK.cjs'),{drizzle:h}=await import('../postgres-js-3Y54EXVQ.cjs'),{default:d}=await import('../src-6LAUXXDM.cjs'),c=d(e,{max:1,onnotice:()=>{}}),f=h(c);o=new a({db:f});}else if(r){let{MongoDBAuthAdapter:a}=await import('../mongo-auth-adapter-W3HLB7OR.cjs'),h=await import('../lib-5QYYN6ML.cjs'),d=h.MongoClient??h.default?.MongoClient,c=new d(e);await c.connect();let f=c.db();o=new a({db:f});}else {let{SQLiteAuthAdapter:a}=await import('../sqlite-adapter-ZTABLT2X.cjs'),h=process.env.KYRO_AUTH_DB_PATH||"./data/auth.db";o=new a({path:h});}o.connect&&await o.connect();let u=await t({authAdapter:o,adminEmail:i.email,adminPassword:i.password,adminRole:i.role});o.disconnect&&await o.disconnect(),u.success||(console.error("\u274C Failed to create admin:",u.error),process.exit(1));}catch(t){console.error("\u274C Bootstrap failed:",t),process.exit(1);}});jt.command("health").description("Check system health").action(async()=>{let i=process.env.DATABASE_URL||"",t=i.toLowerCase().startsWith("postgres://")||i.toLowerCase().startsWith("postgresql://"),e=i.toLowerCase().startsWith("mongodb://")||i.toLowerCase().startsWith("mongodb+srv://"),s=!i||i.includes(".db")||i.includes("sqlite")||i.includes("file:");if(t)try{let{default:r}=await import('../src-6LAUXXDM.cjs'),n=r(i,{max:1,onnotice:()=>{}});await n.unsafe("SELECT 1"),await n.end();}catch{}else if(e)try{let r=await import('../lib-5QYYN6ML.cjs'),n=r.MongoClient??r.default?.MongoClient,o=new n(i);await o.connect(),await o.db().admin().ping(),await o.close();}catch{}else if(s)try{let r=process.env.KYRO_AUTH_DB_PATH||"./data/auth.db",{existsSync:n}=await import('fs');n(r);}catch{}});jt.parse();process.argv.slice(2).length||jt.outputHelp();
package/dist/cli/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import {createRequire}from'module';import {c,g,a,e}from'../chunk-C2PXMVR5.js';import*as st from'fs';import st__default,{realpathSync,readFileSync,existsSync,mkdirSync,writeFileSync,readlinkSync,readdirSync,readdir as readdir$1,lstatSync}from'fs';import zt,{dirname,join,win32,posix,resolve}from'path';import {fileURLToPath}from'url';import {channel,tracingChannel}from'diagnostics_channel';import {realpath,readlink,readdir,lstat}from'fs/promises';import {EventEmitter}from'events';import ho from'stream';import {StringDecoder}from'string_decoder';import {execSync}from'child_process';import Vl from'crypto';import mt from'process';import mD from'os';import dl from'tty';createRequire(import.meta.url);
2
+ import {c,g,a,e}from'../chunk-Y2YAKDEQ.js';import*as st from'fs';import st__default,{realpathSync,readFileSync,existsSync,mkdirSync,writeFileSync,readlinkSync,readdirSync,readdir as readdir$1,lstatSync}from'fs';import zt,{dirname,join,win32,posix,resolve}from'path';import {fileURLToPath}from'url';import {channel,tracingChannel}from'diagnostics_channel';import {realpath,readlink,readdir,lstat}from'fs/promises';import {EventEmitter}from'events';import ho from'stream';import {StringDecoder}from'string_decoder';import {execSync}from'child_process';import Vl from'crypto';import mt from'process';import mD from'os';import dl from'tty';if (typeof window === "undefined") { const { createRequire } = await import(/* @vite-ignore */ 'module'); createRequire(import.meta.url); }
3
3
  var be=c(si=>{g();var ns=class extends Error{constructor(t,e,s){super(s),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name,this.code=e,this.exitCode=t,this.nestedError=void 0;}},ei=class extends ns{constructor(t){super(1,"commander.invalidArgument",t),Error.captureStackTrace(this,this.constructor),this.name=this.constructor.name;}};si.CommanderError=ns;si.InvalidArgumentError=ei;});var os=c(ri=>{g();var{InvalidArgumentError:Jl}=be(),ii=class{constructor(t,e){switch(this.description=e||"",this.variadic=false,this.parseArg=void 0,this.defaultValue=void 0,this.defaultValueDescription=void 0,this.argChoices=void 0,t[0]){case "<":this.required=true,this._name=t.slice(1,-1);break;case "[":this.required=false,this._name=t.slice(1,-1);break;default:this.required=true,this._name=t;break}this._name.length>3&&this._name.slice(-3)==="..."&&(this.variadic=true,this._name=this._name.slice(0,-3));}name(){return this._name}_concatValue(t,e){return e===this.defaultValue||!Array.isArray(e)?[t]:e.concat(t)}default(t,e){return this.defaultValue=t,this.defaultValueDescription=e,this}argParser(t){return this.parseArg=t,this}choices(t){return this.argChoices=t.slice(),this.parseArg=(e,s)=>{if(!this.argChoices.includes(e))throw new Jl(`Allowed choices are ${this.argChoices.join(", ")}.`);return this.variadic?this._concatValue(e,s):e},this}argRequired(){return this.required=true,this}argOptional(){return this.required=false,this}};function Zl(i){let t=i.name()+(i.variadic===true?"...":"");return i.required?"<"+t+">":"["+t+"]"}ri.Argument=ii;ri.humanReadableArgName=Zl;});var ui=c(oi=>{g();var{humanReadableArgName:Ql}=os(),ni=class{constructor(){this.helpWidth=void 0,this.minWidthToWrap=40,this.sortSubcommands=false,this.sortOptions=false,this.showGlobalOptions=false;}prepareContext(t){this.helpWidth=this.helpWidth??t.helpWidth??80;}visibleCommands(t){let e=t.commands.filter(r=>!r._hidden),s=t._getHelpCommand();return s&&!s._hidden&&e.push(s),this.sortSubcommands&&e.sort((r,n)=>r.name().localeCompare(n.name())),e}compareOptions(t,e){let s=r=>r.short?r.short.replace(/^-/,""):r.long.replace(/^--/,"");return s(t).localeCompare(s(e))}visibleOptions(t){let e=t.options.filter(r=>!r.hidden),s=t._getHelpOption();if(s&&!s.hidden){let r=s.short&&t._findOption(s.short),n=s.long&&t._findOption(s.long);!r&&!n?e.push(s):s.long&&!n?e.push(t.createOption(s.long,s.description)):s.short&&!r&&e.push(t.createOption(s.short,s.description));}return this.sortOptions&&e.sort(this.compareOptions),e}visibleGlobalOptions(t){if(!this.showGlobalOptions)return [];let e=[];for(let s=t.parent;s;s=s.parent){let r=s.options.filter(n=>!n.hidden);e.push(...r);}return this.sortOptions&&e.sort(this.compareOptions),e}visibleArguments(t){return t._argsDescription&&t.registeredArguments.forEach(e=>{e.description=e.description||t._argsDescription[e.name()]||"";}),t.registeredArguments.find(e=>e.description)?t.registeredArguments:[]}subcommandTerm(t){let e=t.registeredArguments.map(s=>Ql(s)).join(" ");return t._name+(t._aliases[0]?"|"+t._aliases[0]:"")+(t.options.length?" [options]":"")+(e?" "+e:"")}optionTerm(t){return t.flags}argumentTerm(t){return t.name()}longestSubcommandTermLength(t,e){return e.visibleCommands(t).reduce((s,r)=>Math.max(s,this.displayWidth(e.styleSubcommandTerm(e.subcommandTerm(r)))),0)}longestOptionTermLength(t,e){return e.visibleOptions(t).reduce((s,r)=>Math.max(s,this.displayWidth(e.styleOptionTerm(e.optionTerm(r)))),0)}longestGlobalOptionTermLength(t,e){return e.visibleGlobalOptions(t).reduce((s,r)=>Math.max(s,this.displayWidth(e.styleOptionTerm(e.optionTerm(r)))),0)}longestArgumentTermLength(t,e){return e.visibleArguments(t).reduce((s,r)=>Math.max(s,this.displayWidth(e.styleArgumentTerm(e.argumentTerm(r)))),0)}commandUsage(t){let e=t._name;t._aliases[0]&&(e=e+"|"+t._aliases[0]);let s="";for(let r=t.parent;r;r=r.parent)s=r.name()+" "+s;return s+e+" "+t.usage()}commandDescription(t){return t.description()}subcommandDescription(t){return t.summary()||t.description()}optionDescription(t){let e=[];return t.argChoices&&e.push(`choices: ${t.argChoices.map(s=>JSON.stringify(s)).join(", ")}`),t.defaultValue!==void 0&&(t.required||t.optional||t.isBoolean()&&typeof t.defaultValue=="boolean")&&e.push(`default: ${t.defaultValueDescription||JSON.stringify(t.defaultValue)}`),t.presetArg!==void 0&&t.optional&&e.push(`preset: ${JSON.stringify(t.presetArg)}`),t.envVar!==void 0&&e.push(`env: ${t.envVar}`),e.length>0?`${t.description} (${e.join(", ")})`:t.description}argumentDescription(t){let e=[];if(t.argChoices&&e.push(`choices: ${t.argChoices.map(s=>JSON.stringify(s)).join(", ")}`),t.defaultValue!==void 0&&e.push(`default: ${t.defaultValueDescription||JSON.stringify(t.defaultValue)}`),e.length>0){let s=`(${e.join(", ")})`;return t.description?`${t.description} ${s}`:s}return t.description}formatHelp(t,e){let s=e.padWidth(t,e),r=e.helpWidth??80;function n(c,f){return e.formatItem(c,s,f,e)}let o=[`${e.styleTitle("Usage:")} ${e.styleUsage(e.commandUsage(t))}`,""],u=e.commandDescription(t);u.length>0&&(o=o.concat([e.boxWrap(e.styleCommandDescription(u),r),""]));let a=e.visibleArguments(t).map(c=>n(e.styleArgumentTerm(e.argumentTerm(c)),e.styleArgumentDescription(e.argumentDescription(c))));a.length>0&&(o=o.concat([e.styleTitle("Arguments:"),...a,""]));let h=e.visibleOptions(t).map(c=>n(e.styleOptionTerm(e.optionTerm(c)),e.styleOptionDescription(e.optionDescription(c))));if(h.length>0&&(o=o.concat([e.styleTitle("Options:"),...h,""])),e.showGlobalOptions){let c=e.visibleGlobalOptions(t).map(f=>n(e.styleOptionTerm(e.optionTerm(f)),e.styleOptionDescription(e.optionDescription(f))));c.length>0&&(o=o.concat([e.styleTitle("Global Options:"),...c,""]));}let d=e.visibleCommands(t).map(c=>n(e.styleSubcommandTerm(e.subcommandTerm(c)),e.styleSubcommandDescription(e.subcommandDescription(c))));return d.length>0&&(o=o.concat([e.styleTitle("Commands:"),...d,""])),o.join(`
4
4
  `)}displayWidth(t){return En(t).length}styleTitle(t){return t}styleUsage(t){return t.split(" ").map(e=>e==="[options]"?this.styleOptionText(e):e==="[command]"?this.styleSubcommandText(e):e[0]==="["||e[0]==="<"?this.styleArgumentText(e):this.styleCommandText(e)).join(" ")}styleCommandDescription(t){return this.styleDescriptionText(t)}styleOptionDescription(t){return this.styleDescriptionText(t)}styleSubcommandDescription(t){return this.styleDescriptionText(t)}styleArgumentDescription(t){return this.styleDescriptionText(t)}styleDescriptionText(t){return t}styleOptionTerm(t){return this.styleOptionText(t)}styleSubcommandTerm(t){return t.split(" ").map(e=>e==="[options]"?this.styleOptionText(e):e[0]==="["||e[0]==="<"?this.styleArgumentText(e):this.styleSubcommandText(e)).join(" ")}styleArgumentTerm(t){return this.styleArgumentText(t)}styleOptionText(t){return t}styleArgumentText(t){return t}styleSubcommandText(t){return t}styleCommandText(t){return t}padWidth(t,e){return Math.max(e.longestOptionTermLength(t,e),e.longestGlobalOptionTermLength(t,e),e.longestSubcommandTermLength(t,e),e.longestArgumentTermLength(t,e))}preformatted(t){return /\n[^\S\r\n]/.test(t)}formatItem(t,e,s,r){let o=" ".repeat(2);if(!s)return o+t;let u=t.padEnd(e+t.length-r.displayWidth(t)),a=2,d=(this.helpWidth??80)-e-a-2,c;return d<this.minWidthToWrap||r.preformatted(s)?c=s:c=r.boxWrap(s,d).replace(/\n/g,`
5
5
  `+" ".repeat(e+a)),o+u+" ".repeat(a)+c.replace(/\n/g,`
@@ -391,4 +391,4 @@ bucket_name = "${u}"
391
391
  `);}catch(v){let S=v?.stdout?.toString?.()||"",W=v?.stderr?.toString?.()||"";se.fail("Deployment failed"),S&&process.stdout.write(S),W&&process.stdout.write(W),console.log(`
392
392
  ${E.red.bold("\u2716 Deployment Failed!")}`),console.log(` ${E.dim("See the Wrangler error above.")}
393
393
  `),f&&process.stdout.write(JSON.stringify({ok:false,error:"Deployment failed"})+`
394
- `),process.exit(1);}}),i}var og=fileURLToPath(import.meta.url),ug=dirname(og),zl="0.1.0";try{zl=JSON.parse(readFileSync(join(ug,"../../package.json"),"utf-8")).version;}catch{}var Nt=new re;Nt.name("kyro").description("Kyro CMS - Astro-native headless CMS").version(zl);Nt.command("dev").description("Start Kyro CMS development server").option("-p, --port <port>","Port to run on","4321").option("-h, --host <host>","Host to bind to","localhost").action(async i=>{let{exec:t}=await import('child_process'),e=t(`astro dev --port ${i.port} --host ${i.host}`,{env:{...process.env,NODE_NO_WARNINGS:"1"}});e.stdout?.on("data",s=>process.stdout.write(s)),e.stderr?.on("data",s=>process.stderr.write(s)),process.on("SIGINT",()=>{e.kill("SIGINT"),process.exit(0);}),process.on("SIGTERM",()=>{e.kill("SIGTERM"),process.exit(0);});});Nt.addCommand(Mo());Nt.addCommand(Gl());var es=Nt.command("db").description("Database management commands");es.command("generate").description("Generate migrations from schema").action(async()=>{let{exec:i}=await import('child_process');i("npx drizzle-kit generate",(t,e,s)=>{t&&(console.error("\u274C Generation failed:",t.message),process.exit(1));});});es.command("migrate").description("Run database migrations").action(async()=>{let{exec:i}=await import('child_process');i("npx drizzle-kit migrate",(t,e,s)=>{t&&(console.error("\u274C Migration failed:",t.message),process.exit(1));});});es.command("push").description("Push schema to database (development)").action(async()=>{let{exec:i}=await import('child_process');i("npx drizzle-kit push",(t,e,s)=>{t&&(console.error("\u274C Push failed:",t.message),process.exit(1));});});es.command("seed").description("Seed database with initial data").action(async()=>{let{exec:i}=await import('child_process');i("npx tsx src/database/drizzle/seed.ts",(t,e,s)=>{t&&(console.error("\u274C Seeding failed:",t.message),process.exit(1));});});es.command("studio").description("Open Drizzle Studio").action(async()=>{let{exec:i}=await import('child_process');i("npx drizzle-kit studio",(t,e,s)=>{t&&(console.error("\u274C Studio failed:",t.message),process.exit(1));});});var ag=Nt.command("auth").description("Authentication management commands");ag.command("bootstrap").description("Create initial admin user").option("-e, --email <email>","Admin email",process.env.KYRO_ADMIN_EMAIL).option("-p, --password <password>","Admin password",process.env.KYRO_ADMIN_PASSWORD).option("-r, --role <role>","Admin role",process.env.KYRO_ADMIN_ROLE||"admin").action(async i=>{(!i.email||!i.password)&&(console.error("\u274C Email and password are required. Set KYRO_ADMIN_EMAIL and KYRO_ADMIN_PASSWORD env vars or use -e and -p options."),process.exit(1));try{let{bootstrapAdmin:t}=await import('../bootstrap-7CI3NVSY.js'),e=process.env.DATABASE_URL||"",s=e.toLowerCase().startsWith("postgres://")||e.toLowerCase().startsWith("postgresql://"),r=e.toLowerCase().startsWith("mongodb://")||e.toLowerCase().startsWith("mongodb+srv://"),n=!e||e.includes(".db")||e.includes("sqlite")||e.includes("file:"),o;if(s){let{PostgresAuthAdapter:a}=await import('../postgres-auth-adapter-MKSHIJDL.js'),{drizzle:h}=await import('../postgres-js-INQPBHJP.js'),{default:d}=await import('../src-GZRZ4VAO.js'),c=d(e,{max:1,onnotice:()=>{}}),f=h(c);o=new a({db:f});}else if(r){let{MongoDBAuthAdapter:a}=await import('../mongo-auth-adapter-BUKINEZL.js'),h=await import('../lib-IYW32OER.js'),d=new h.MongoClient(e);await d.connect();let c=d.db();o=new a({db:c});}else {let{SQLiteAuthAdapter:a}=await import('../sqlite-adapter-DV7ZX2EJ.js'),h=process.env.KYRO_AUTH_DB_PATH||"./data/auth.db";o=new a({path:h});}o.connect&&await o.connect();let u=await t({authAdapter:o,adminEmail:i.email,adminPassword:i.password,adminRole:i.role});o.disconnect&&await o.disconnect(),u.success||(console.error("\u274C Failed to create admin:",u.error),process.exit(1));}catch(t){console.error("\u274C Bootstrap failed:",t),process.exit(1);}});Nt.command("health").description("Check system health").action(async()=>{let i=process.env.DATABASE_URL||"",t=i.toLowerCase().startsWith("postgres://")||i.toLowerCase().startsWith("postgresql://"),e=i.toLowerCase().startsWith("mongodb://")||i.toLowerCase().startsWith("mongodb+srv://"),s=!i||i.includes(".db")||i.includes("sqlite")||i.includes("file:");if(t)try{let{default:r}=await import('../src-GZRZ4VAO.js'),n=r(i,{max:1,onnotice:()=>{}});await n.unsafe("SELECT 1"),await n.end();}catch{}else if(e)try{let r=await import('../lib-IYW32OER.js'),n=new r.MongoClient(i);await n.connect(),await n.db().admin().ping(),await n.close();}catch{}else if(s)try{let r=process.env.KYRO_AUTH_DB_PATH||"./data/auth.db",{existsSync:n}=await import('fs');n(r);}catch{}});Nt.parse();process.argv.slice(2).length||Nt.outputHelp();
394
+ `),process.exit(1);}}),i}var og=fileURLToPath(import.meta.url),ug=dirname(og),zl="0.1.0";try{zl=JSON.parse(readFileSync(join(ug,"../../package.json"),"utf-8")).version;}catch{}var Nt=new re;Nt.name("kyro").description("Kyro CMS - Astro-native headless CMS").version(zl);Nt.command("dev").description("Start Kyro CMS development server").option("-p, --port <port>","Port to run on","4321").option("-h, --host <host>","Host to bind to","localhost").action(async i=>{let{exec:t}=await import('child_process'),e=t(`astro dev --port ${i.port} --host ${i.host}`,{env:{...process.env,NODE_NO_WARNINGS:"1"}});e.stdout?.on("data",s=>process.stdout.write(s)),e.stderr?.on("data",s=>process.stderr.write(s)),process.on("SIGINT",()=>{e.kill("SIGINT"),process.exit(0);}),process.on("SIGTERM",()=>{e.kill("SIGTERM"),process.exit(0);});});Nt.addCommand(Mo());Nt.addCommand(Gl());var es=Nt.command("db").description("Database management commands");es.command("generate").description("Generate migrations from schema").action(async()=>{let{exec:i}=await import('child_process');i("npx drizzle-kit generate",(t,e,s)=>{t&&(console.error("\u274C Generation failed:",t.message),process.exit(1));});});es.command("migrate").description("Run database migrations").action(async()=>{let{exec:i}=await import('child_process');i("npx drizzle-kit migrate",(t,e,s)=>{t&&(console.error("\u274C Migration failed:",t.message),process.exit(1));});});es.command("push").description("Push schema to database (development)").action(async()=>{let{exec:i}=await import('child_process');i("npx drizzle-kit push",(t,e,s)=>{t&&(console.error("\u274C Push failed:",t.message),process.exit(1));});});es.command("seed").description("Seed database with initial data").action(async()=>{let{exec:i}=await import('child_process');i("npx tsx src/database/drizzle/seed.ts",(t,e,s)=>{t&&(console.error("\u274C Seeding failed:",t.message),process.exit(1));});});es.command("studio").description("Open Drizzle Studio").action(async()=>{let{exec:i}=await import('child_process');i("npx drizzle-kit studio",(t,e,s)=>{t&&(console.error("\u274C Studio failed:",t.message),process.exit(1));});});var ag=Nt.command("auth").description("Authentication management commands");ag.command("bootstrap").description("Create initial admin user").option("-e, --email <email>","Admin email",process.env.KYRO_ADMIN_EMAIL).option("-p, --password <password>","Admin password",process.env.KYRO_ADMIN_PASSWORD).option("-r, --role <role>","Admin role",process.env.KYRO_ADMIN_ROLE||"admin").action(async i=>{(!i.email||!i.password)&&(console.error("\u274C Email and password are required. Set KYRO_ADMIN_EMAIL and KYRO_ADMIN_PASSWORD env vars or use -e and -p options."),process.exit(1));try{let{bootstrapAdmin:t}=await import('../bootstrap-4FK3LPPH.js'),e=process.env.DATABASE_URL||"",s=e.toLowerCase().startsWith("postgres://")||e.toLowerCase().startsWith("postgresql://"),r=e.toLowerCase().startsWith("mongodb://")||e.toLowerCase().startsWith("mongodb+srv://"),n=!e||e.includes(".db")||e.includes("sqlite")||e.includes("file:"),o;if(s){let{PostgresAuthAdapter:a}=await import('../postgres-auth-adapter-SK3N3OSS.js'),{drizzle:h}=await import('../postgres-js-4CI7FMYS.js'),{default:d}=await import('../src-QBADSZV4.js'),c=d(e,{max:1,onnotice:()=>{}}),f=h(c);o=new a({db:f});}else if(r){let{MongoDBAuthAdapter:a}=await import('../mongo-auth-adapter-QDXVHREJ.js'),h=await import('../lib-XXYYUPMW.js'),d=h.MongoClient??h.default?.MongoClient,c=new d(e);await c.connect();let f=c.db();o=new a({db:f});}else {let{SQLiteAuthAdapter:a}=await import('../sqlite-adapter-4TPNROJK.js'),h=process.env.KYRO_AUTH_DB_PATH||"./data/auth.db";o=new a({path:h});}o.connect&&await o.connect();let u=await t({authAdapter:o,adminEmail:i.email,adminPassword:i.password,adminRole:i.role});o.disconnect&&await o.disconnect(),u.success||(console.error("\u274C Failed to create admin:",u.error),process.exit(1));}catch(t){console.error("\u274C Bootstrap failed:",t),process.exit(1);}});Nt.command("health").description("Check system health").action(async()=>{let i=process.env.DATABASE_URL||"",t=i.toLowerCase().startsWith("postgres://")||i.toLowerCase().startsWith("postgresql://"),e=i.toLowerCase().startsWith("mongodb://")||i.toLowerCase().startsWith("mongodb+srv://"),s=!i||i.includes(".db")||i.includes("sqlite")||i.includes("file:");if(t)try{let{default:r}=await import('../src-QBADSZV4.js'),n=r(i,{max:1,onnotice:()=>{}});await n.unsafe("SELECT 1"),await n.end();}catch{}else if(e)try{let r=await import('../lib-XXYYUPMW.js'),n=r.MongoClient??r.default?.MongoClient,o=new n(i);await o.connect(),await o.db().admin().ping(),await o.close();}catch{}else if(s)try{let r=process.env.KYRO_AUTH_DB_PATH||"./data/auth.db",{existsSync:n}=await import('fs');n(r);}catch{}});Nt.parse();process.argv.slice(2).length||Nt.outputHelp();
package/dist/client.js CHANGED
@@ -1,2 +1,2 @@
1
- import {createRequire}from'module';export{a as CSSGenerator,g as createAdminStyling,d as defaultDarkTheme,h as defaultFieldStyling,c as defaultLightTheme,e as ecommerce2026Theme,f as generateCSSVariables,b as generateTailwindConfig}from'./chunk-K7YNEKVE.js';export{q as ALL_FIELD_TYPES,u as renderRichText,s as richTextStyles}from'./chunk-HLAEJB5R.js';import'./chunk-IPXOY4RI.js';export{a as createAuditContext}from'./chunk-UD6ZPO7T.js';import'./chunk-WSP7PSXC.js';import {g}from'./chunk-C2PXMVR5.js';createRequire(import.meta.url);
1
+ export{a as CSSGenerator,g as createAdminStyling,d as defaultDarkTheme,h as defaultFieldStyling,c as defaultLightTheme,e as ecommerce2026Theme,f as generateCSSVariables,b as generateTailwindConfig}from'./chunk-7FXEXHK6.js';export{q as ALL_FIELD_TYPES,u as renderRichText,s as richTextStyles}from'./chunk-ZRIBWDYJ.js';import'./chunk-SQBTIMWF.js';export{a as createAuditContext}from'./chunk-L2QXP26Q.js';import'./chunk-7MNDQU6K.js';import {g}from'./chunk-Y2YAKDEQ.js';if (typeof window === "undefined") { const { createRequire } = await import(/* @vite-ignore */ 'module'); createRequire(import.meta.url); }
2
2
  g();
@@ -1,2 +1,2 @@
1
- import {createRequire}from'module';import {c,d as d$1,b as b$1,a as a$1}from'./chunk-PBOZJOKN.js';import {i}from'./chunk-OMWQVPV7.js';import {d}from'./chunk-VBPAAQEF.js';import {aa,$,T,Y}from'./chunk-IP6JUEH3.js';import {a,J,M,Q}from'./chunk-7AQSH3KR.js';import {g as g$1}from'./chunk-C2PXMVR5.js';createRequire(import.meta.url);
1
+ import {c,d as d$1,b as b$1,a as a$1}from'./chunk-UWHWSWDE.js';import {i}from'./chunk-JV4HJBXW.js';import {d}from'./chunk-N5POANYV.js';import {aa,$,T,Y}from'./chunk-HRAY65XH.js';import {a,J,M,Q}from'./chunk-3NSZZCOJ.js';import {g as g$1}from'./chunk-Y2YAKDEQ.js';if (typeof window === "undefined") { const { createRequire } = await import(/* @vite-ignore */ 'module'); createRequire(import.meta.url); }
2
2
  g$1();g$1();g$1();var f=class extends c{constructor(t,s,r,e={}){super(s),this.client=t,this.schema=r,this.options=e,this.logger=e.logger??new aa,this.cache=e.cache??new d;}static[a]="SQLiteD1Session";logger;cache;prepareQuery(t,s,r,e,o,a,i){let n=this.client.prepare(t.sql);return new b(n,t,this.logger,this.cache,a,i,s,r,e,o)}async batch(t){let s=[],r=[];for(let o of t){let a=o._prepare(),i=a.getQuery();if(s.push(a),i.params.length>0)r.push(a.stmt.bind(...i.params));else {let n=a.getQuery();r.push(this.client.prepare(n.sql).bind(...n.params));}}return (await this.client.batch(r)).map((o,a)=>s[a].mapResult(o,true))}extractRawAllValueFromBatchResult(t){return t.results}extractRawGetValueFromBatchResult(t){return t.results[0]}extractRawValuesValueFromBatchResult(t){return g(t.results)}async transaction(t,s){let r=new w("async",this.dialect,this,this.schema);await this.run(J.raw(`begin${s?.behavior?" "+s.behavior:""}`));try{let e=await t(r);return await this.run(J`commit`),e}catch(e){throw await this.run(J`rollback`),e}}},w=class c extends d$1{static[a]="D1Transaction";async transaction(t){let s=`sp${this.nestedIndex}`,r=new c("async",this.dialect,this.session,this.schema,this.nestedIndex+1);await this.session.run(J.raw(`savepoint ${s}`));try{let e=await t(r);return await this.session.run(J.raw(`release savepoint ${s}`)),e}catch(e){throw await this.session.run(J.raw(`rollback to savepoint ${s}`)),e}}};function g(c){let t=[];for(let s of c){let r=Object.keys(s).map(e=>s[e]);t.push(r);}return t}var b=class extends b$1{constructor(t,s,r,e,o,a,i,n,l,d){super("async",n,s,e,o,a),this.logger=r,this._isResponseInArrayMode=l,this.customResultMapper=d,this.fields=i,this.stmt=t;}static[a]="D1PreparedQuery";customResultMapper;fields;stmt;async run(t){let s=M(this.query.params,t??{});return this.logger.logQuery(this.query.sql,s),await this.queryWithCache(this.query.sql,s,async()=>this.stmt.bind(...s).run())}async all(t){let{fields:s,query:r,logger:e,stmt:o,customResultMapper:a}=this;if(!s&&!a){let n=M(r.params,t??{});return e.logQuery(r.sql,n),await this.queryWithCache(r.sql,n,async()=>o.bind(...n).all().then(({results:l})=>this.mapAllResult(l)))}let i=await this.values(t);return this.mapAllResult(i)}mapAllResult(t,s){return s&&(t=g(t.results)),!this.fields&&!this.customResultMapper?t:this.customResultMapper?this.customResultMapper(t):t.map(r=>Q(this.fields,r,this.joinsNotNullableMap))}async get(t){let{fields:s,joinsNotNullableMap:r,query:e,logger:o,stmt:a,customResultMapper:i}=this;if(!s&&!i){let l=M(e.params,t??{});return o.logQuery(e.sql,l),await this.queryWithCache(e.sql,l,async()=>a.bind(...l).all().then(({results:d})=>d[0]))}let n=await this.values(t);if(n[0])return i?i(n):Q(s,n[0],r)}mapGetResult(t,s){return s&&(t=g(t.results)[0]),!this.fields&&!this.customResultMapper?t:this.customResultMapper?this.customResultMapper([t]):Q(this.fields,t,this.joinsNotNullableMap)}async values(t){let s=M(this.query.params,t??{});return this.logger.logQuery(this.query.sql,s),await this.queryWithCache(this.query.sql,s,async()=>this.stmt.bind(...s).raw())}isResponseInArrayMode(){return this._isResponseInArrayMode}};var R=class extends a$1{static[a]="D1Database";async batch(t){return this.session.batch(t)}};function E(c,t={}){let s=new i({casing:t.casing}),r;t.logger===true?r=new $:t.logger!==false&&(r=t.logger);let e;if(t.schema){let i=T(t.schema,Y);e={fullSchema:t.schema,schema:i.tables,tableNamesMap:i.tableNamesMap};}let o=new f(c,s,e,{logger:r,cache:t.cache}),a=new R("async",s,o,e);return a.$client=c,a.$cache=t.cache,a.$cache&&(a.$cache.invalidate=t.cache?.onMutate),a}export{b as D1PreparedQuery,w as D1Transaction,R as DrizzleD1Database,f as SQLiteD1Session,E as drizzle};