@kyro-cms/core 0.12.44 → 0.12.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{WebhookService-C19xR8qE.d.ts → WebhookService-CZf_na-J.d.ts} +1 -1
- package/dist/{WebhookService-BBcCHBo8.d.cts → WebhookService-DgIx21X-.d.cts} +1 -1
- package/dist/api-handler-graphql.cjs +1 -1
- package/dist/api-handler-graphql.js +2 -1
- package/dist/api-handler-trpc.cjs +1 -1
- package/dist/api-handler-trpc.js +2 -1
- package/dist/api-handler.cjs +1 -1
- package/dist/api-handler.js +1 -1
- package/dist/{base-yXdYZxFK.d.ts → base-7vJMzr4V.d.ts} +1 -1
- package/dist/{base-C2iwjdJQ.d.cts → base-DDEmdRqV.d.cts} +1 -1
- package/dist/bcryptjs-AZA6WEN2.js +2 -0
- package/dist/bcryptjs-WIQSWJGK.cjs +1 -0
- package/dist/better-sqlite3-42Q3FG3E.js +2 -0
- package/dist/better-sqlite3-5IISPX34.cjs +1 -0
- package/dist/bootstrap-7CI3NVSY.js +1 -0
- package/dist/bootstrap-DOOM2CNQ.cjs +1 -0
- package/dist/bowser-FI5JQGKZ.js +11 -0
- package/dist/bowser-VX6B6ZSE.cjs +10 -0
- package/dist/chokidar-24HVS6XD.cjs +5 -0
- package/dist/chokidar-43DT7CVN.js +6 -0
- package/dist/chunk-26Q7JXM4.cjs +3 -0
- package/dist/chunk-2BUODBE2.js +2 -0
- package/dist/chunk-2WFTETFB.js +2 -0
- package/dist/chunk-35PGCW3S.cjs +1 -0
- package/dist/chunk-3VXEK5ZW.cjs +1 -0
- package/dist/chunk-45TJAB5X.js +301 -0
- package/dist/chunk-5DWYVUQR.cjs +1 -0
- package/dist/chunk-5LPNEYK5.cjs +1 -0
- package/dist/chunk-66BJXVFJ.js +2 -0
- package/dist/chunk-6KRR7YHA.js +2 -0
- package/dist/chunk-6KUL2BSA.cjs +133 -0
- package/dist/chunk-6MSS5X77.js +2 -0
- package/dist/chunk-6QWLXJ7L.js +2 -0
- package/dist/chunk-6V3AP7HR.cjs +269 -0
- package/dist/chunk-73D2PNHD.cjs +7 -0
- package/dist/chunk-7ACHOBWY.cjs +13 -0
- package/dist/chunk-7AQSH3KR.js +2 -0
- package/dist/chunk-7GGZA5YU.cjs +2 -0
- package/dist/chunk-7I6URA6F.js +4 -0
- package/dist/chunk-7JWQ2PZP.cjs +1 -0
- package/dist/chunk-7SSFHJTR.js +57 -0
- package/dist/chunk-7T35572E.js +75 -0
- package/dist/chunk-7V67ONUD.js +4 -0
- package/dist/chunk-7WMMKGEO.cjs +1 -0
- package/dist/chunk-A73AVVFR.js +11 -0
- package/dist/chunk-AK754S3T.cjs +2 -0
- package/dist/chunk-AMGJ5AFH.cjs +1 -0
- package/dist/chunk-ATBH763U.js +2 -0
- package/dist/chunk-B3GDQ7UI.cjs +114 -0
- package/dist/chunk-BAVN7VDR.cjs +1 -0
- package/dist/chunk-BCEE4NBZ.cjs +2 -0
- package/dist/{chunk-J4252I5B.cjs → chunk-BHR7OAU4.cjs} +4 -4
- package/dist/chunk-BLH2MRK4.js +2 -0
- package/dist/chunk-BPMA2ECA.js +10 -0
- package/dist/chunk-BUNLC3II.cjs +1 -0
- package/dist/chunk-C2PXMVR5.js +2 -0
- package/dist/chunk-CGPAS4U5.js +4 -0
- package/dist/chunk-DS5DE5BU.js +2 -0
- package/dist/chunk-DUO523BH.cjs +1 -0
- package/dist/chunk-DVWYO3KK.cjs +1 -0
- package/dist/chunk-E27KEZPT.js +2 -0
- package/dist/chunk-EHWUALGH.cjs +1 -0
- package/dist/chunk-EN65ZEK2.cjs +2 -0
- package/dist/chunk-EOOZDOL7.js +3 -0
- package/dist/chunk-EZIDQBXI.cjs +1 -0
- package/dist/chunk-F4ITQ6XQ.cjs +3 -0
- package/dist/chunk-FLM37UVD.js +2 -0
- package/dist/chunk-GIS6X43A.cjs +3 -0
- package/dist/chunk-GNEVCEJU.cjs +3 -0
- package/dist/chunk-GNOSG3PK.cjs +1 -0
- package/dist/chunk-HLAEJB5R.js +384 -0
- package/dist/chunk-HPYH7GTS.cjs +1 -0
- package/dist/chunk-HT44I66C.js +24 -0
- package/dist/chunk-HTYVI2HK.cjs +9 -0
- package/dist/chunk-ICVQWR2A.js +2 -0
- package/dist/chunk-IP6JUEH3.js +3 -0
- package/dist/chunk-IPXOY4RI.js +2 -0
- package/dist/chunk-J6U5LWZ7.js +11 -0
- package/dist/{chunk-UHFDH3PG.js → chunk-JT36FTHY.cjs} +4 -4
- package/dist/chunk-JUJZOG6P.js +2 -0
- package/dist/{chunk-2BTRHVT3.cjs → chunk-K7YNEKVE.js} +5 -4
- package/dist/chunk-KCHPADCH.cjs +7 -0
- package/dist/chunk-KH7LM52S.js +3 -0
- package/dist/chunk-LEBM6ZSZ.cjs +10 -0
- package/dist/chunk-LQ3YZTPU.cjs +15 -0
- package/dist/chunk-LY7N3UHH.cjs +23 -0
- package/dist/chunk-M6ESQ5TE.cjs +56 -0
- package/dist/chunk-MCZ3YZ2L.js +2 -0
- package/dist/chunk-MP5VC5ER.cjs +1 -0
- package/dist/chunk-MVX2PYJJ.cjs +1 -0
- package/dist/chunk-MY42EWZP.js +2 -0
- package/dist/chunk-MZOWPV4D.js +20 -0
- package/dist/chunk-NGNJSUGL.cjs +1 -0
- package/dist/chunk-NWCREF47.js +3 -0
- package/dist/chunk-OMWQVPV7.js +14 -0
- package/dist/chunk-ORG67NXX.js +3 -0
- package/dist/chunk-OSAVAYJZ.js +16 -0
- package/dist/chunk-P7XYIKL6.cjs +300 -0
- package/dist/chunk-PBOZJOKN.js +2 -0
- package/dist/chunk-PITMDQYN.cjs +18 -0
- package/dist/chunk-PL5AIE6F.js +2 -0
- package/dist/chunk-QC4YXUBT.cjs +383 -0
- package/dist/chunk-QDHP5E4P.cjs +2 -0
- package/dist/chunk-QYI3GOHF.cjs +1 -0
- package/dist/chunk-R3NEPC4I.js +3 -0
- package/dist/chunk-R4LXRAMX.js +2 -0
- package/dist/chunk-S5HTTLN7.cjs +2 -0
- package/dist/chunk-STX5V7HG.cjs +20 -0
- package/dist/chunk-SVYUTQVE.js +115 -0
- package/dist/chunk-SYEP5QLG.js +19 -0
- package/dist/chunk-TR3ZS3T3.js +3 -0
- package/dist/chunk-UB5TJHQR.js +2 -0
- package/dist/chunk-UD6ZPO7T.js +2 -0
- package/dist/chunk-UK43ADRO.js +270 -0
- package/dist/chunk-UNYXWPLZ.cjs +2 -0
- package/dist/chunk-VBPAAQEF.js +2 -0
- package/dist/chunk-VIUU4D5I.js +2 -0
- package/dist/chunk-VJ2WMKPK.js +21 -0
- package/dist/chunk-VOQUO2EZ.cjs +74 -0
- package/dist/chunk-VQ53TFYA.cjs +1 -0
- package/dist/chunk-VRZC4TTF.cjs +1 -0
- package/dist/chunk-W46LZ4MY.js +2 -0
- package/dist/chunk-WCFHS7EZ.cjs +1 -0
- package/dist/chunk-WGESLAWV.js +8 -0
- package/dist/chunk-WSP7PSXC.js +8 -0
- package/dist/chunk-X54XZACS.cjs +10 -0
- package/dist/{chunk-Q2UYCYKV.js → chunk-XBH4YMC7.js} +5 -4
- package/dist/chunk-XDE7CFV6.cjs +19 -0
- package/dist/chunk-XOACKBG7.js +4 -0
- package/dist/chunk-XPPVX4GQ.cjs +1 -0
- package/dist/chunk-ZJE3VAAW.js +134 -0
- package/dist/chunk-ZO3YB5DK.cjs +1 -0
- package/dist/chunk-ZOVH6QT5.cjs +1 -0
- package/dist/chunk-ZYDOF65Q.cjs +1 -0
- package/dist/cli/index.cjs +197 -78
- package/dist/cli/index.js +198 -78
- package/dist/client.cjs +1 -1
- package/dist/client.d.cts +1 -1
- package/dist/client.d.ts +1 -1
- package/dist/client.js +2 -1
- package/dist/d1-5ZQJOFDX.cjs +1 -0
- package/dist/d1-VPH75GI2.js +2 -0
- package/dist/dist-es-3SSNUZST.cjs +1 -0
- package/dist/dist-es-6SVFVYN3.js +1 -0
- package/dist/dist-es-6TQTDPE7.js +2 -0
- package/dist/dist-es-A5OF2STN.cjs +2 -0
- package/dist/dist-es-BOW5V247.cjs +6 -0
- package/dist/dist-es-CRIMATLL.cjs +2 -0
- package/dist/dist-es-DL3VLVP6.cjs +1 -0
- package/dist/dist-es-EMUQ6ZNZ.js +3 -0
- package/dist/dist-es-MNIQZC4U.js +2 -0
- package/dist/dist-es-P25IKLBI.cjs +1 -0
- package/dist/dist-es-SJ76GYCI.js +2 -0
- package/dist/dist-es-SRPWSAF4.cjs +1 -0
- package/dist/dist-es-T2H2W5BX.cjs +3 -0
- package/dist/dist-es-TX4DBXEW.js +3 -0
- package/dist/dist-es-U4ZB3ZDA.js +7 -0
- package/dist/dist-es-XZBHIIKY.js +4 -0
- package/dist/drizzle/index.cjs +1 -1
- package/dist/drizzle/index.d.cts +2 -2
- package/dist/drizzle/index.d.ts +2 -2
- package/dist/drizzle/index.js +1 -1
- package/dist/drizzle-orm-47ELDEM6.cjs +1 -0
- package/dist/drizzle-orm-7YTX5NTT.js +1 -0
- package/dist/event-streams-25YJ2Z6R.js +1 -0
- package/dist/event-streams-JBMWCI2O.cjs +1 -0
- package/dist/fields/index.cjs +1 -1
- package/dist/fields/index.js +1 -1
- package/dist/fs-DGKZLRM6.cjs +1 -0
- package/dist/fs-YZJ5FM6J.js +2 -0
- package/dist/graphql/index.cjs +1 -1
- package/dist/graphql/index.d.cts +2 -2
- package/dist/graphql/index.d.ts +2 -2
- package/dist/graphql/index.js +1 -1
- package/dist/{index-DTz6u7w9.d.cts → index-BJ1rwHxk.d.cts} +1 -1
- package/dist/{index-BeQtbl3z.d.ts → index-BTjlptCL.d.ts} +1 -1
- package/dist/index.cjs +28 -46
- package/dist/index.d.cts +23 -9
- package/dist/index.d.ts +23 -9
- package/dist/index.js +29 -46
- package/dist/integration.cjs +1 -1
- package/dist/integration.js +1 -1
- package/dist/jsonwebtoken-DFB6ZBZA.cjs +8 -0
- package/dist/jsonwebtoken-S7BG2YWK.js +9 -0
- package/dist/lib-5QYYN6ML.cjs +12 -0
- package/dist/lib-IYW32OER.js +13 -0
- package/dist/loadSso-JY4WDQPS.cjs +2 -0
- package/dist/loadSso-YTG2GQGW.js +3 -0
- package/dist/local-VDCSEMC2.js +1 -0
- package/dist/local-YCWBUF3R.cjs +1 -0
- package/dist/media-3Z6YW5J4.cjs +1 -0
- package/dist/media-HK2IZMUZ.js +1 -0
- package/dist/mongo-auth-adapter-7K64Y2QM.cjs +1 -0
- package/dist/mongo-auth-adapter-BUKINEZL.js +1 -0
- package/dist/mongodb/index.cjs +1 -1
- package/dist/mongodb/index.d.cts +2 -2
- package/dist/mongodb/index.d.ts +2 -2
- package/dist/mongodb/index.js +1 -1
- package/dist/nodemailer-AXROO37D.js +54 -0
- package/dist/nodemailer-IDML4L6W.cjs +53 -0
- package/dist/postgres-auth-adapter-2M4RNEY3.cjs +1 -0
- package/dist/postgres-auth-adapter-MKSHIJDL.js +1 -0
- package/dist/postgres-js-3Y54EXVQ.cjs +1 -0
- package/dist/postgres-js-INQPBHJP.js +1 -0
- package/dist/redis-adapter-EGMUN65D.cjs +1 -0
- package/dist/redis-adapter-SXOXLHNH.js +1 -0
- package/dist/rest/index.cjs +1 -1
- package/dist/rest/index.d.cts +5 -5
- package/dist/rest/index.d.ts +5 -5
- package/dist/rest/index.js +1 -1
- package/dist/schema-RT6WSUYC.cjs +1 -0
- package/dist/schema-XC5ISGNR.js +2 -0
- package/dist/signin-KZBIAHGS.js +3 -0
- package/dist/signin-VFBLX7EL.cjs +2 -0
- package/dist/sqlite-adapter-DV7ZX2EJ.js +1 -0
- package/dist/sqlite-adapter-ZTABLT2X.cjs +1 -0
- package/dist/src-6LAUXXDM.cjs +1 -0
- package/dist/src-GZRZ4VAO.js +1 -0
- package/dist/sso-oidc-54BIRYR6.cjs +2 -0
- package/dist/sso-oidc-SX5OIQGG.js +3 -0
- package/dist/sts-HVGDJYIF.js +3 -0
- package/dist/sts-YLXXIB3X.cjs +2 -0
- package/dist/templates/index.cjs +1 -1
- package/dist/templates/index.d.cts +1 -1
- package/dist/templates/index.d.ts +1 -1
- package/dist/templates/index.js +1 -1
- package/dist/trpc/index.cjs +1 -1
- package/dist/trpc/index.d.cts +7 -7
- package/dist/trpc/index.d.ts +7 -7
- package/dist/trpc/index.js +1 -1
- package/dist/{types-CaXXmV9h.d.ts → types-CYGXsNcJ.d.ts} +5 -5
- package/dist/{types-BjivdGbU.d.cts → types-DOKMyC3y.d.cts} +5 -5
- package/dist/ws/index.cjs +1 -1
- package/dist/ws/index.js +1 -1
- package/package.json +2 -2
- package/dist/bootstrap-ROSTPMVL.js +0 -1
- package/dist/bootstrap-WW5NJ6EB.cjs +0 -1
- package/dist/chunk-3CVLI5C5.cjs +0 -3
- package/dist/chunk-3Q2WUG63.cjs +0 -2
- package/dist/chunk-3RSMK4DA.cjs +0 -2
- package/dist/chunk-4IGWJMBY.cjs +0 -2
- package/dist/chunk-4ORJMSJU.cjs +0 -1
- package/dist/chunk-4RMFCTWH.js +0 -1
- package/dist/chunk-5B6X2GBJ.js +0 -2
- package/dist/chunk-5J6HXUF6.js +0 -1
- package/dist/chunk-5KOQYQEE.js +0 -1
- package/dist/chunk-5SEHX7ON.js +0 -1
- package/dist/chunk-6ROHVUXF.js +0 -1
- package/dist/chunk-6SPPR5JZ.js +0 -3
- package/dist/chunk-7IVN6TTY.js +0 -133
- package/dist/chunk-AHSFSERC.cjs +0 -1
- package/dist/chunk-B5XWYVWK.js +0 -1
- package/dist/chunk-BGX27ZRG.cjs +0 -300
- package/dist/chunk-C2W5PSHC.js +0 -300
- package/dist/chunk-CCUQZ66T.cjs +0 -133
- package/dist/chunk-D5P2IPGX.cjs +0 -3
- package/dist/chunk-EPMGPNBE.js +0 -1
- package/dist/chunk-FHJJKFAU.cjs +0 -1
- package/dist/chunk-FVZ5RFLO.js +0 -2
- package/dist/chunk-FZ6Q2EBJ.cjs +0 -20
- package/dist/chunk-G3J2EU5D.cjs +0 -1
- package/dist/chunk-G7SSHELM.cjs +0 -1
- package/dist/chunk-GKYEJ2UF.js +0 -1
- package/dist/chunk-GO34AOBZ.cjs +0 -1
- package/dist/chunk-GYQMNXXW.cjs +0 -114
- package/dist/chunk-HLSB2MCK.js +0 -1
- package/dist/chunk-HQP2Y7QQ.js +0 -251
- package/dist/chunk-HS2KNFAB.cjs +0 -2
- package/dist/chunk-HVXO3OFB.cjs +0 -1
- package/dist/chunk-IETGL7WJ.js +0 -1
- package/dist/chunk-IFJ73O3A.cjs +0 -1
- package/dist/chunk-ILEZ3NYX.cjs +0 -2
- package/dist/chunk-INB4LNA6.js +0 -90
- package/dist/chunk-K6WUOU6P.js +0 -1
- package/dist/chunk-KD7LUCFY.cjs +0 -1
- package/dist/chunk-KDNYHLD2.js +0 -1
- package/dist/chunk-LHW4R367.js +0 -1
- package/dist/chunk-MIOMMB23.cjs +0 -1
- package/dist/chunk-N5VNHUJS.cjs +0 -4
- package/dist/chunk-NRLIGDYF.js +0 -1
- package/dist/chunk-NY47CFVP.cjs +0 -1
- package/dist/chunk-NZJAGASC.cjs +0 -251
- package/dist/chunk-OG7CNQGU.js +0 -1
- package/dist/chunk-PP5S2UBV.js +0 -0
- package/dist/chunk-PP7W5UKL.js +0 -2
- package/dist/chunk-Q3Q7BJVQ.cjs +0 -1
- package/dist/chunk-QCA3AP3M.cjs +0 -1
- package/dist/chunk-QOCHBPMK.js +0 -2
- package/dist/chunk-QYFU5Y7S.js +0 -3
- package/dist/chunk-RHCWCG3O.js +0 -114
- package/dist/chunk-SK2Q4PRV.cjs +0 -90
- package/dist/chunk-TFBHE5FF.cjs +0 -1
- package/dist/chunk-UBRYJP2G.js +0 -1
- package/dist/chunk-V65NPSR5.cjs +0 -1
- package/dist/chunk-VGQ4VUG6.js +0 -2
- package/dist/chunk-W7C6SJXZ.js +0 -20
- package/dist/chunk-WIZ6C5QZ.cjs +0 -1
- package/dist/chunk-ZIWJJRWQ.js +0 -4
- package/dist/chunk-ZUVP4UK7.cjs +0 -1
- package/dist/media-L5XDD47D.js +0 -1
- package/dist/media-OUBQTIQP.cjs +0 -1
- package/dist/mongo-auth-adapter-5TJO5J5U.js +0 -1
- package/dist/mongo-auth-adapter-JVE5M3S4.cjs +0 -1
- package/dist/postgres-auth-adapter-33QOIRXT.js +0 -1
- package/dist/postgres-auth-adapter-JKDYYULH.cjs +0 -1
- package/dist/redis-adapter-NN3H4GRX.js +0 -1
- package/dist/redis-adapter-OUKQGYCH.cjs +0 -1
- package/dist/schema-HIUSHSUI.cjs +0 -1
- package/dist/schema-KFYUM674.js +0 -1
- package/dist/sqlite-adapter-GTTVSXRV.cjs +0 -1
- package/dist/sqlite-adapter-UPANATIW.js +0 -1
package/dist/chunk-FZ6Q2EBJ.cjs
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
'use strict';var a=require('path'),h=require('fs');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var a__default=/*#__PURE__*/_interopDefault(a);var h__default=/*#__PURE__*/_interopDefault(h);var c=r=>{let s=typeof process<"u"&&process.cwd?a__default.default.join(process.cwd(),"node_modules","@kyro-cms","core","dist"):"",e=a__default.default.resolve(s,`${r}.ts`),o=a__default.default.resolve(s,`${r}.js`);return h__default.default.existsSync(e)?e:o},b=c("api-handler"),S=c("api-handler-graphql"),g=c("api-handler-trpc");function _(r={}){let{configPath:s="./kyro.config.ts",apiPath:e="/api",adminPath:o="/admin",admin:k=true,enableGraphQL:l=false,enableTRPC:p=false,enableWebSocket:m=false}=r;return {name:"@kyro-cms/core",hooks:{"astro:config:setup":async({config:f,updateConfig:u,injectRoute:i,logger:n})=>{if(n.info(`Setting up Kyro CMS (API: ${e}, Admin: ${o})`),e===o)throw new Error(`Kyro CMS: apiPath and adminPath cannot be the same ("${e}")`);let d=a__default.default.resolve(f.root.pathname,s),y=d;h__default.default.existsSync(d)||n.warn(`Kyro config file not found at ${s}. The API will fail to boot if collections are needed.`),u({security:{checkOrigin:false},vite:{ssr:{external:["@kyro-cms/core","@kyro-cms/admin","@kyro-cms/astro","@kyro-cms/ai","@kyro-cms/connect","crypto","node:crypto","module","node:module","fs","node:fs","fs/promises","node:fs/promises","path","node:path","util","node:util","stream","node:stream","events","node:events","url","node:url","http","node:http","https","node:https","os","node:os","child_process","node:child_process","assert","node:assert","zlib","node:zlib","buffer","node:buffer","better-sqlite3","pg","mongodb","ioredis","sharp","ssh2","cpu-features","ssh2-sftp-client","nodemailer","jsonwebtoken","@mapbox/node-pre-gyp","mock-aws-s3","aws-sdk","nock"]},build:{rollupOptions:{external:["@kyro-cms/core","@kyro-cms/admin","@kyro-cms/astro","@kyro-cms/ai","@kyro-cms/connect","better-sqlite3","pg","mongodb","ioredis","sharp","ssh2","cpu-features","ssh2-sftp-client","nodemailer","jsonwebtoken","@mapbox/node-pre-gyp","mock-aws-s3","aws-sdk","nock"]}},optimizeDeps:{exclude:["@kyro-cms/core","@kyro-cms/admin","@kyro-cms/astro","@kyro-cms/ai","@kyro-cms/connect","better-sqlite3","pg","mongodb","ioredis","sharp","ssh2","cpu-features","ssh2-sftp-client","nodemailer","jsonwebtoken","@mapbox/node-pre-gyp","mock-aws-s3","aws-sdk","nock"]},server:{watch:{ignored:["**/*.db","**/*.db-*","**/data/**","**/public/uploads/**","**/.kyro/**"]}},plugins:[{name:"use-sync-external-store-shim-fix",enforce:"pre",resolveId(t){if(t==="use-sync-external-store/shim"||t==="use-sync-external-store/shim/index.js")return "\0virtual:use-sync-external-store-shim";if(t==="use-sync-external-store/shim/with-selector"||t==="use-sync-external-store/shim/with-selector.js")return "\0virtual:use-sync-external-store-shim-with-selector"},load(t){if(t==="\0virtual:use-sync-external-store-shim")return 'export { useSyncExternalStore } from "react";';if(t==="\0virtual:use-sync-external-store-shim-with-selector")return `
|
|
2
|
-
import { useSyncExternalStore, useMemo } from "react";
|
|
3
|
-
export function useSyncExternalStoreWithSelector(subscribe, getSnapshot, getServerSnapshot, selector, isEqual) {
|
|
4
|
-
const memoizedSelector = useMemo(() => {
|
|
5
|
-
let last, lastSnap, hasMemo = false;
|
|
6
|
-
return (snap) => {
|
|
7
|
-
if (!hasMemo || !Object.is(lastSnap, snap)) {
|
|
8
|
-
const next = selector(snap);
|
|
9
|
-
if (!hasMemo || !(isEqual ? isEqual(last, next) : Object.is(last, next))) {
|
|
10
|
-
last = next; lastSnap = snap; hasMemo = true;
|
|
11
|
-
}
|
|
12
|
-
}
|
|
13
|
-
return last;
|
|
14
|
-
};
|
|
15
|
-
}, [selector, isEqual]);
|
|
16
|
-
const getSelection = () => memoizedSelector(getSnapshot());
|
|
17
|
-
const getServerSelection = getServerSnapshot != null ? () => memoizedSelector(getServerSnapshot()) : undefined;
|
|
18
|
-
return useSyncExternalStore(subscribe, getSelection, getServerSelection);
|
|
19
|
-
}
|
|
20
|
-
`}}],resolve:{alias:{"kyro:config":y}},define:{__KYRO_API_PATH__:JSON.stringify(e),__KYRO_ADMIN_PATH__:JSON.stringify(o),__KYRO_ENABLE_GRAPHQL__:JSON.stringify(l),__KYRO_ENABLE_TRPC__:JSON.stringify(p),__KYRO_ENABLE_WS__:JSON.stringify(m)}}}),i({pattern:`${e}/[...path]`,entrypoint:b}),l&&(i({pattern:`${e}/graphql`,entrypoint:S}),n.info(`GraphQL endpoint enabled at ${e}/graphql`)),p&&(i({pattern:`${e}/trpc/[...path]`,entrypoint:g}),n.info(`tRPC endpoint enabled at ${e}/trpc`)),m&&n.info("WebSocket support enabled (auto-starts at first request)");}}}}exports.a=_;
|
package/dist/chunk-G3J2EU5D.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
'use strict';var ws=require('ws');var o=class{channels=new Map;maxListeners;constructor(e=100){this.maxListeners=e;}subscribe(e,t){this.channels.has(e)||this.channels.set(e,new Set);let s=this.channels.get(e);if(s.size>=this.maxListeners)throw new Error(`Max listeners (${this.maxListeners}) reached for channel "${e}"`);return s.add(t),()=>{s.delete(t),s.size===0&&this.channels.delete(e);}}publish(e,t){let s=this.channels.get(e);if(s)for(let n of s)try{let i=n(t);i instanceof Promise&&i.catch(l=>{console.error(`[PubSub] Error in handler for channel "${e}":`,l);});}catch(i){console.error(`[PubSub] Error in handler for channel "${e}":`,i);}}hasSubscribers(e){return this.channels.has(e)&&this.channels.get(e).size>0}getSubscriberCount(e){return this.channels.get(e)?.size||0}getChannels(){return Array.from(this.channels.keys())}clear(){this.channels.clear();}},c=class extends o{registry;constructor(e,t=100){super(t),this.registry=e;}publishCollectionEvent(e,t){this.publish(`collection:${e}`,t),this.publish("events:collection",t),t.tenantId&&(this.publish(`tenant:${t.tenantId}:collection:${e}`,t),this.publish(`tenant:${t.tenantId}:events`,t)),this.publish(`collection:${e}:${t.type}`,t);}subscribeToCollection(e,t){return this.subscribe(`collection:${e}`,t)}subscribeToCollectionEvent(e,t,s){return this.subscribe(`collection:${e}:${t}`,s)}subscribeToTenant(e,t){return this.subscribe(`tenant:${e}:events`,t)}subscribeToTenantCollection(e,t,s){return this.subscribe(`tenant:${e}:collection:${t}`,s)}subscribeToAllCollections(e){return this.subscribe("events:collection",e)}createAfterChangeHook(e){return async t=>{this.publishCollectionEvent(e,{type:t.operation==="create"?"create":"update",collection:e,doc:t.doc,originalDoc:t.originalDoc,id:t.id||t.doc?.id,tenantId:t.tenantId,timestamp:new Date().toISOString(),user:t.user});}}createAfterDeleteHook(e){return async t=>{this.publishCollectionEvent(e,{type:"delete",collection:e,doc:t.doc,originalDoc:t.originalDoc,id:t.id||t.doc?.id,tenantId:t.tenantId,timestamp:new Date().toISOString(),user:t.user});}}autoRegisterHooks(){let e=this.registry.getCollections();for(let t of e){let s=this.registry.getCollection(t.slug);s&&(s.hooks||(s.hooks={}),s.hooks.afterChange||(s.hooks.afterChange=[]),s.hooks.afterDelete||(s.hooks.afterDelete=[]),s.hooks.afterChange.push(this.createAfterChangeHook(t.slug)),s.hooks.afterDelete.push(this.createAfterDeleteHook(t.slug)));}}};var a=class{wss;clients=new Map;pubsub;options;pingTimer;constructor(e){this.options=e,this.pubsub=e.pubsub,this.wss=new ws.WebSocketServer({port:e.port||8080}),this.setupServer(),this.startPingInterval();}setupServer(){this.wss.on("connection",(e,t)=>{let s=this.generateClientId();if(this.options.maxConnections&&this.clients.size>=this.options.maxConnections){e.close(1013,"Server at capacity");return}let n={id:s,ws:e,subscriptions:new Map,authenticated:false,connectedAt:new Date,lastActivity:new Date};this.clients.set(s,n),this.sendToClient(n,{type:"connected",clientId:s,timestamp:new Date().toISOString()}),e.on("message",i=>{this.handleMessage(n,i);}),e.on("error",i=>{console.error(`[WS] Client error ${s}:`,i);}),e.on("close",()=>{this.handleDisconnect(n);}),e.on("pong",()=>{n.lastActivity=new Date;});}),this.wss.on("error",e=>{console.error("[WS] Server error:",e);});}handleMessage(e,t){e.lastActivity=new Date;let s;try{s=JSON.parse(t.toString());}catch{this.sendToClient(e,{type:"error",error:"Invalid JSON"});return}switch(s.type){case "authenticate":this.handleAuthenticate(e,s);break;case "subscribe":this.handleSubscribe(e,s);break;case "unsubscribe":this.handleUnsubscribe(e,s);break;case "unsubscribeAll":this.handleUnsubscribeAll(e);break;case "list":this.handleList(e);break;case "ping":this.sendToClient(e,{type:"pong",timestamp:new Date().toISOString()});break;default:this.sendToClient(e,{type:"error",error:`Unknown message type: ${s.type}`});}}async handleAuthenticate(e,t){if(!this.options.requireAuth){e.authenticated=true,this.sendToClient(e,{type:"authenticated",success:true});return}if(!this.options.verifyToken){e.authenticated=true,this.sendToClient(e,{type:"authenticated",success:true});return}try{let s=await this.options.verifyToken(t.token);e.authenticated=!0,e.user=s,e.tenantId=s.tenantId,this.sendToClient(e,{type:"authenticated",success:!0,user:{id:s.id,email:s.email}});}catch(s){this.sendToClient(e,{type:"authenticated",success:false,error:s.message});}}handleSubscribe(e,t){if(this.options.requireAuth&&!e.authenticated){this.sendToClient(e,{type:"error",error:"Not authenticated"});return}let s=t.channel;if(!s){this.sendToClient(e,{type:"error",error:"Channel is required"});return}if(e.subscriptions.has(s)){this.sendToClient(e,{type:"subscribed",channel:s,success:true,message:"Already subscribed"});return}let n=this.pubsub.subscribe(s,i=>{this.sendToClient(e,{type:"event",channel:s,data:i,timestamp:new Date().toISOString()});});e.subscriptions.set(s,{channel:s,unsubscribe:n}),this.sendToClient(e,{type:"subscribed",channel:s,success:true});}handleUnsubscribe(e,t){let s=t.channel;if(!s){this.sendToClient(e,{type:"error",error:"Channel is required"});return}let n=e.subscriptions.get(s);n?(n.unsubscribe(),e.subscriptions.delete(s),this.sendToClient(e,{type:"unsubscribed",channel:s,success:true})):this.sendToClient(e,{type:"unsubscribed",channel:s,success:false,message:"Not subscribed"});}handleUnsubscribeAll(e){for(let[,t]of e.subscriptions)t.unsubscribe();e.subscriptions.clear(),this.sendToClient(e,{type:"unsubscribedAll",success:true});}handleList(e){let t=this.pubsub.getChannels();this.sendToClient(e,{type:"channels",channels:t,count:t.length});}handleDisconnect(e){for(let[,t]of e.subscriptions)t.unsubscribe();this.clients.delete(e.id);}sendToClient(e,t){e.ws.readyState===ws.WebSocket.OPEN&&e.ws.send(JSON.stringify(t));}generateClientId(){return `ws_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}startPingInterval(){this.options.pingInterval&&(this.pingTimer=setInterval(()=>{for(let[e,t]of this.clients)if(t.ws.readyState===ws.WebSocket.OPEN){if(Date.now()-t.lastActivity.getTime()>this.options.pingInterval*3){t.ws.terminate(),this.handleDisconnect(t);continue}t.ws.ping();}},this.options.pingInterval));}broadcast(e,t){this.pubsub.publish(e,t);}getConnectedClients(){return Array.from(this.clients.values())}getClientCount(){return this.clients.size}getSubscriptionCount(){let e=0;for(let t of this.clients.values())e+=t.subscriptions.size;return e}async close(){this.pingTimer&&clearInterval(this.pingTimer);for(let e of this.clients.values())e.ws.close(1001,"Server shutting down");return new Promise(e=>{this.wss.close(()=>{e();});})}getServer(){return this.wss}};function d(r){return new a(r)}exports.a=o;exports.b=c;exports.c=a;exports.d=d;
|
package/dist/chunk-G7SSHELM.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
'use strict';function a(e){if(e==null)return e;if(Array.isArray(e))return e.map(n=>a(n));if(typeof e=="object"&&!(e instanceof Date)&&!(e instanceof RegExp)){let n={};for(let r of Object.keys(e))/^\d+$/.test(r)||(n[r]=a(e[r]));return n}return e}exports.a=a;
|
package/dist/chunk-GKYEJ2UF.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import {WebSocketServer,WebSocket}from'ws';var o=class{channels=new Map;maxListeners;constructor(e=100){this.maxListeners=e;}subscribe(e,t){this.channels.has(e)||this.channels.set(e,new Set);let s=this.channels.get(e);if(s.size>=this.maxListeners)throw new Error(`Max listeners (${this.maxListeners}) reached for channel "${e}"`);return s.add(t),()=>{s.delete(t),s.size===0&&this.channels.delete(e);}}publish(e,t){let s=this.channels.get(e);if(s)for(let n of s)try{let i=n(t);i instanceof Promise&&i.catch(l=>{console.error(`[PubSub] Error in handler for channel "${e}":`,l);});}catch(i){console.error(`[PubSub] Error in handler for channel "${e}":`,i);}}hasSubscribers(e){return this.channels.has(e)&&this.channels.get(e).size>0}getSubscriberCount(e){return this.channels.get(e)?.size||0}getChannels(){return Array.from(this.channels.keys())}clear(){this.channels.clear();}},c=class extends o{registry;constructor(e,t=100){super(t),this.registry=e;}publishCollectionEvent(e,t){this.publish(`collection:${e}`,t),this.publish("events:collection",t),t.tenantId&&(this.publish(`tenant:${t.tenantId}:collection:${e}`,t),this.publish(`tenant:${t.tenantId}:events`,t)),this.publish(`collection:${e}:${t.type}`,t);}subscribeToCollection(e,t){return this.subscribe(`collection:${e}`,t)}subscribeToCollectionEvent(e,t,s){return this.subscribe(`collection:${e}:${t}`,s)}subscribeToTenant(e,t){return this.subscribe(`tenant:${e}:events`,t)}subscribeToTenantCollection(e,t,s){return this.subscribe(`tenant:${e}:collection:${t}`,s)}subscribeToAllCollections(e){return this.subscribe("events:collection",e)}createAfterChangeHook(e){return async t=>{this.publishCollectionEvent(e,{type:t.operation==="create"?"create":"update",collection:e,doc:t.doc,originalDoc:t.originalDoc,id:t.id||t.doc?.id,tenantId:t.tenantId,timestamp:new Date().toISOString(),user:t.user});}}createAfterDeleteHook(e){return async t=>{this.publishCollectionEvent(e,{type:"delete",collection:e,doc:t.doc,originalDoc:t.originalDoc,id:t.id||t.doc?.id,tenantId:t.tenantId,timestamp:new Date().toISOString(),user:t.user});}}autoRegisterHooks(){let e=this.registry.getCollections();for(let t of e){let s=this.registry.getCollection(t.slug);s&&(s.hooks||(s.hooks={}),s.hooks.afterChange||(s.hooks.afterChange=[]),s.hooks.afterDelete||(s.hooks.afterDelete=[]),s.hooks.afterChange.push(this.createAfterChangeHook(t.slug)),s.hooks.afterDelete.push(this.createAfterDeleteHook(t.slug)));}}};var a=class{wss;clients=new Map;pubsub;options;pingTimer;constructor(e){this.options=e,this.pubsub=e.pubsub,this.wss=new WebSocketServer({port:e.port||8080}),this.setupServer(),this.startPingInterval();}setupServer(){this.wss.on("connection",(e,t)=>{let s=this.generateClientId();if(this.options.maxConnections&&this.clients.size>=this.options.maxConnections){e.close(1013,"Server at capacity");return}let n={id:s,ws:e,subscriptions:new Map,authenticated:false,connectedAt:new Date,lastActivity:new Date};this.clients.set(s,n),this.sendToClient(n,{type:"connected",clientId:s,timestamp:new Date().toISOString()}),e.on("message",i=>{this.handleMessage(n,i);}),e.on("error",i=>{console.error(`[WS] Client error ${s}:`,i);}),e.on("close",()=>{this.handleDisconnect(n);}),e.on("pong",()=>{n.lastActivity=new Date;});}),this.wss.on("error",e=>{console.error("[WS] Server error:",e);});}handleMessage(e,t){e.lastActivity=new Date;let s;try{s=JSON.parse(t.toString());}catch{this.sendToClient(e,{type:"error",error:"Invalid JSON"});return}switch(s.type){case "authenticate":this.handleAuthenticate(e,s);break;case "subscribe":this.handleSubscribe(e,s);break;case "unsubscribe":this.handleUnsubscribe(e,s);break;case "unsubscribeAll":this.handleUnsubscribeAll(e);break;case "list":this.handleList(e);break;case "ping":this.sendToClient(e,{type:"pong",timestamp:new Date().toISOString()});break;default:this.sendToClient(e,{type:"error",error:`Unknown message type: ${s.type}`});}}async handleAuthenticate(e,t){if(!this.options.requireAuth){e.authenticated=true,this.sendToClient(e,{type:"authenticated",success:true});return}if(!this.options.verifyToken){e.authenticated=true,this.sendToClient(e,{type:"authenticated",success:true});return}try{let s=await this.options.verifyToken(t.token);e.authenticated=!0,e.user=s,e.tenantId=s.tenantId,this.sendToClient(e,{type:"authenticated",success:!0,user:{id:s.id,email:s.email}});}catch(s){this.sendToClient(e,{type:"authenticated",success:false,error:s.message});}}handleSubscribe(e,t){if(this.options.requireAuth&&!e.authenticated){this.sendToClient(e,{type:"error",error:"Not authenticated"});return}let s=t.channel;if(!s){this.sendToClient(e,{type:"error",error:"Channel is required"});return}if(e.subscriptions.has(s)){this.sendToClient(e,{type:"subscribed",channel:s,success:true,message:"Already subscribed"});return}let n=this.pubsub.subscribe(s,i=>{this.sendToClient(e,{type:"event",channel:s,data:i,timestamp:new Date().toISOString()});});e.subscriptions.set(s,{channel:s,unsubscribe:n}),this.sendToClient(e,{type:"subscribed",channel:s,success:true});}handleUnsubscribe(e,t){let s=t.channel;if(!s){this.sendToClient(e,{type:"error",error:"Channel is required"});return}let n=e.subscriptions.get(s);n?(n.unsubscribe(),e.subscriptions.delete(s),this.sendToClient(e,{type:"unsubscribed",channel:s,success:true})):this.sendToClient(e,{type:"unsubscribed",channel:s,success:false,message:"Not subscribed"});}handleUnsubscribeAll(e){for(let[,t]of e.subscriptions)t.unsubscribe();e.subscriptions.clear(),this.sendToClient(e,{type:"unsubscribedAll",success:true});}handleList(e){let t=this.pubsub.getChannels();this.sendToClient(e,{type:"channels",channels:t,count:t.length});}handleDisconnect(e){for(let[,t]of e.subscriptions)t.unsubscribe();this.clients.delete(e.id);}sendToClient(e,t){e.ws.readyState===WebSocket.OPEN&&e.ws.send(JSON.stringify(t));}generateClientId(){return `ws_${Date.now()}_${Math.random().toString(36).slice(2,9)}`}startPingInterval(){this.options.pingInterval&&(this.pingTimer=setInterval(()=>{for(let[e,t]of this.clients)if(t.ws.readyState===WebSocket.OPEN){if(Date.now()-t.lastActivity.getTime()>this.options.pingInterval*3){t.ws.terminate(),this.handleDisconnect(t);continue}t.ws.ping();}},this.options.pingInterval));}broadcast(e,t){this.pubsub.publish(e,t);}getConnectedClients(){return Array.from(this.clients.values())}getClientCount(){return this.clients.size}getSubscriptionCount(){let e=0;for(let t of this.clients.values())e+=t.subscriptions.size;return e}async close(){this.pingTimer&&clearInterval(this.pingTimer);for(let e of this.clients.values())e.ws.close(1001,"Server shutting down");return new Promise(e=>{this.wss.close(()=>{e();});})}getServer(){return this.wss}};function d(r){return new a(r)}export{o as a,c as b,a as c,d};
|
package/dist/chunk-GO34AOBZ.cjs
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
'use strict';var e={slug:"users",label:"Users",auth:true,fields:[{name:"name",type:"text",label:"Name"},{name:"email",type:"email",required:true},{name:"passwordHash",type:"text",label:"Password Hash",admin:{hidden:true}},{name:"role",type:"select",options:[{label:"Super Admin",value:"super_admin"},{label:"Admin",value:"admin"},{label:"Editor",value:"editor"},{label:"Author",value:"author"},{label:"Customer",value:"customer"},{label:"Guest",value:"guest"}],required:true},{name:"avatar",type:"upload",relationTo:"media",label:"Profile Picture"},{name:"tenantId",type:"text",label:"Tenant"},{name:"emailVerified",type:"checkbox",label:"Email Verified"},{name:"locked",type:"checkbox"},{name:"lastLogin",type:"date",time:true,label:"Last Login",admin:{readOnly:true}},{name:"failedLoginAttempts",type:"number",label:"Failed Login Attempts",admin:{readOnly:true}}],timestamps:true,admin:{useAsTitle:"email",defaultColumns:["email","role","tenantId","lastLogin"]}},t={slug:"audit_logs",label:"Audit Logs",access:{create:()=>false,update:()=>false,delete:()=>false},fields:[{name:"action",type:"text",required:true},{name:"userId",type:"text",label:"User ID"},{name:"userEmail",type:"email",label:"User Email"},{name:"role",type:"text"},{name:"resource",type:"text",label:"Resource"},{name:"ipAddress",type:"text",label:"IP Address"},{name:"success",type:"checkbox"},{name:"timestamp",type:"date",time:true,required:true,admin:{readOnly:true}}],admin:{defaultColumns:["action","userEmail","resource","success","timestamp"]}},a={users:e,audit_logs:t};exports.a=e;exports.b=a;
|
package/dist/chunk-GYQMNXXW.cjs
DELETED
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
'use strict';var chunkMIOMMB23_cjs=require('./chunk-MIOMMB23.cjs'),drizzleOrm=require('drizzle-orm'),O=require('bcryptjs'),crypto$1=require('crypto');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var O__default=/*#__PURE__*/_interopDefault(O);var D=false,S=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(){D||(await this.db.execute(drizzleOrm.sql`
|
|
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(drizzleOrm.sql`ALTER TABLE "users" ADD COLUMN IF NOT EXISTS "avatar" VARCHAR(255)`),await this.db.execute(drizzleOrm.sql`CREATE UNIQUE INDEX IF NOT EXISTS "users_email_idx" ON "users" ("email")`),await this.db.execute(drizzleOrm.sql`CREATE INDEX IF NOT EXISTS "users_tenant_idx" ON "users" ("tenant_id")`),await this.db.execute(drizzleOrm.sql`CREATE INDEX IF NOT EXISTS "users_role_idx" ON "users" ("role")`),await this.db.execute(drizzleOrm.sql`
|
|
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(drizzleOrm.sql`CREATE INDEX IF NOT EXISTS "sessions_user_idx" ON "sessions" ("user_id")`),await this.db.execute(drizzleOrm.sql`CREATE INDEX IF NOT EXISTS "sessions_token_idx" ON "sessions" ("token")`),await this.db.execute(drizzleOrm.sql`CREATE INDEX IF NOT EXISTS "sessions_expires_idx" ON "sessions" ("expires_at")`),await this.db.execute(drizzleOrm.sql`
|
|
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(drizzleOrm.sql`ALTER TABLE "audit_logs" ALTER COLUMN "resource_id" TYPE VARCHAR(255)`),await this.db.execute(drizzleOrm.sql`CREATE INDEX IF NOT EXISTS "audit_logs_user_idx" ON "audit_logs" ("user_id")`),await this.db.execute(drizzleOrm.sql`CREATE INDEX IF NOT EXISTS "audit_logs_action_idx" ON "audit_logs" ("action")`),await this.db.execute(drizzleOrm.sql`CREATE INDEX IF NOT EXISTS "audit_logs_resource_idx" ON "audit_logs" ("resource")`),await this.db.execute(drizzleOrm.sql`CREATE INDEX IF NOT EXISTS "audit_logs_timestamp_idx" ON "audit_logs" ("timestamp")`),await this.db.execute(drizzleOrm.sql`
|
|
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(drizzleOrm.sql`CREATE INDEX IF NOT EXISTS "password_history_user_idx" ON "password_history" ("user_id")`),await this.db.execute(drizzleOrm.sql`
|
|
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(drizzleOrm.sql`CREATE INDEX IF NOT EXISTS "lockouts_user_idx" ON "lockouts" ("user_id")`),await this.db.execute(drizzleOrm.sql`CREATE INDEX IF NOT EXISTS "lockouts_locked_until_idx" ON "lockouts" ("locked_until")`),await this.db.execute(drizzleOrm.sql`
|
|
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(drizzleOrm.sql`CREATE INDEX IF NOT EXISTS "roles_level_idx" ON "roles" ("level")`),await this.db.execute(drizzleOrm.sql`
|
|
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(drizzleOrm.sql`
|
|
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(drizzleOrm.sql`
|
|
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(drizzleOrm.sql`
|
|
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
|
-
`),D=true);}async disconnect(){}async createUser(e){let s=await this.hashPassword(e.password),[t]=await this.db.insert(chunkMIOMMB23_cjs.a).values({email:e.email.toLowerCase(),name:e.name,passwordHash:s,role:e.role||"customer",avatar:e.avatar,tenantId:e.tenantId}).returning();return this.userToAuthUser(t)}async findUserByEmail(e){let[s]=await this.db.select().from(chunkMIOMMB23_cjs.a).where(drizzleOrm.eq(chunkMIOMMB23_cjs.a.email,e.toLowerCase())).limit(1);return s?this.userToAuthUser(s):null}async findUserById(e){let[s]=await this.db.select().from(chunkMIOMMB23_cjs.a).where(drizzleOrm.eq(chunkMIOMMB23_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(chunkMIOMMB23_cjs.a).set(t).where(drizzleOrm.eq(chunkMIOMMB23_cjs.a.id,e)).returning();return r?this.userToAuthUser(r):null}async deleteUser(e){return await this.db.delete(chunkMIOMMB23_cjs.a).where(drizzleOrm.eq(chunkMIOMMB23_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}%`,[U,[{count:f}]]=await Promise.all([this.db.select().from(chunkMIOMMB23_cjs.a).where(drizzleOrm.sql`${chunkMIOMMB23_cjs.a.email} ILIKE ${m}`).orderBy(drizzleOrm.desc(chunkMIOMMB23_cjs.a.createdAt)).limit(t).offset(r),this.db.select({count:drizzleOrm.sql`count(*)`}).from(chunkMIOMMB23_cjs.a).where(drizzleOrm.sql`${chunkMIOMMB23_cjs.a.email} ILIKE ${m}`)]);return {users:U.map(c=>this.userToAuthUser(c)),total:Number(f)}}let[l,[{count:E}]]=await Promise.all([this.db.select().from(chunkMIOMMB23_cjs.a).orderBy(drizzleOrm.desc(chunkMIOMMB23_cjs.a.createdAt)).limit(t).offset(r),this.db.select({count:drizzleOrm.sql`count(*)`}).from(chunkMIOMMB23_cjs.a)]);return {users:l.map(m=>this.userToAuthUser(m)),total:Number(E)}}async verifyPassword(e,s){let t=await this.findUserByEmail(e);if(!t)return null;let[r]=await this.db.select().from(chunkMIOMMB23_cjs.a).where(drizzleOrm.eq(chunkMIOMMB23_cjs.a.email,e.toLowerCase())).limit(1);return r?.passwordHash&&await O__default.default.compare(s,r.passwordHash)?t:null}async hashPassword(e){return O__default.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(chunkMIOMMB23_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(chunkMIOMMB23_cjs.d).where(drizzleOrm.and(drizzleOrm.eq(chunkMIOMMB23_cjs.d.token,e),drizzleOrm.gt(chunkMIOMMB23_cjs.d.expiresAt,new Date))).limit(1);return s?this.sessionToSession(s):null}async findSessionByRefreshToken(e){let[s]=await this.db.select().from(chunkMIOMMB23_cjs.d).where(drizzleOrm.and(drizzleOrm.eq(chunkMIOMMB23_cjs.d.refreshToken,e),drizzleOrm.gt(chunkMIOMMB23_cjs.d.expiresAt,new Date))).limit(1);return s?this.sessionToSession(s):null}async deleteSession(e){return await this.db.delete(chunkMIOMMB23_cjs.d).where(drizzleOrm.eq(chunkMIOMMB23_cjs.d.id,e)),true}async deleteUserSessions(e){return await this.db.delete(chunkMIOMMB23_cjs.d).where(drizzleOrm.eq(chunkMIOMMB23_cjs.d.userId,e)),1}async addPasswordToHistory(e,s){await this.db.insert(chunkMIOMMB23_cjs.j).values({userId:e,passwordHash:s});}async getPasswordHistory(e,s=5){return (await this.db.select({passwordHash:chunkMIOMMB23_cjs.j.passwordHash}).from(chunkMIOMMB23_cjs.j).where(drizzleOrm.eq(chunkMIOMMB23_cjs.j.userId,e)).orderBy(drizzleOrm.desc(chunkMIOMMB23_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(chunkMIOMMB23_cjs.k).where(drizzleOrm.and(drizzleOrm.eq(chunkMIOMMB23_cjs.k.userId,e),drizzleOrm.gt(chunkMIOMMB23_cjs.k.lockedUntil,new Date))).limit(1);return !!s}async getLockout(e){let[s]=await this.db.select().from(chunkMIOMMB23_cjs.k).where(drizzleOrm.and(drizzleOrm.eq(chunkMIOMMB23_cjs.k.userId,e),drizzleOrm.gt(chunkMIOMMB23_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 l=r>=5;return l&&await this.db.insert(chunkMIOMMB23_cjs.k).values({userId:e,ipAddress:s,reason:"Too many failed login attempts",lockedUntil:new Date(Date.now()+9e5)}),{attempts:r,locked:l}}async resetAttempts(e){await this.updateUser(e,{failedLoginAttempts:0});}async findAuditLogs(e){let{limit:s=50,offset:t=0,userId:r,action:u,resource:l,resourceId:E,success:m,startDate:U,endDate:f}=e,c=[];r&&c.push(drizzleOrm.eq(chunkMIOMMB23_cjs.e.userId,r)),u&&(Array.isArray(u)?c.push(drizzleOrm.sql`${chunkMIOMMB23_cjs.e.action} = ANY(${u})`):c.push(drizzleOrm.eq(chunkMIOMMB23_cjs.e.action,u))),l&&c.push(drizzleOrm.eq(chunkMIOMMB23_cjs.e.resource,l)),E&&c.push(drizzleOrm.eq(chunkMIOMMB23_cjs.e.resourceId,E)),m!==void 0&&c.push(drizzleOrm.eq(chunkMIOMMB23_cjs.e.success,m)),U&&c.push(drizzleOrm.sql`${chunkMIOMMB23_cjs.e.timestamp} >= ${U}`),f&&c.push(drizzleOrm.sql`${chunkMIOMMB23_cjs.e.timestamp} <= ${f}`);let R=c.length>0?drizzleOrm.and(...c):void 0,_=await this.db.select({count:drizzleOrm.sql`count(*)`}).from(chunkMIOMMB23_cjs.e).where(R);return {logs:(await this.db.select().from(chunkMIOMMB23_cjs.e).where(R).orderBy(drizzleOrm.desc(chunkMIOMMB23_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(_[0]?.count||0)}}async createAuditLog(e){let s=crypto.randomUUID(),t=new Date;return await this.db.insert(chunkMIOMMB23_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(chunkMIOMMB23_cjs.h).values({userId:e,token:s,expiresAt:t}),{token:s,expiresAt:t}}async verifyEmailToken(e){let[s]=await this.db.select().from(chunkMIOMMB23_cjs.h).where(drizzleOrm.eq(chunkMIOMMB23_cjs.h.token,e)).limit(1);return s?s.expiresAt<new Date?{success:false,error:"Verification token has expired"}:(await this.db.update(chunkMIOMMB23_cjs.a).set({emailVerified:true}).where(drizzleOrm.eq(chunkMIOMMB23_cjs.a.id,s.userId)),await this.db.delete(chunkMIOMMB23_cjs.h).where(drizzleOrm.eq(chunkMIOMMB23_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(chunkMIOMMB23_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(chunkMIOMMB23_cjs.i).where(drizzleOrm.eq(chunkMIOMMB23_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(chunkMIOMMB23_cjs.a).set({passwordHash:r,updatedAt:new Date}).where(drizzleOrm.eq(chunkMIOMMB23_cjs.a.id,t.userId)),await this.db.update(chunkMIOMMB23_cjs.i).set({usedAt:new Date}).where(drizzleOrm.eq(chunkMIOMMB23_cjs.i.id,t.id)),await this.db.delete(chunkMIOMMB23_cjs.d).where(drizzleOrm.eq(chunkMIOMMB23_cjs.d.userId,t.userId)),{success:true}}};exports.a=S;
|
package/dist/chunk-HLSB2MCK.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import {timingSafeEqual}from'crypto';async function u(e,r){return typeof e=="boolean"?e:typeof e=="function"?await e(r):true}function A(...e){let r={};for(let t of e)t&&typeof t=="object"&&Object.assign(r,t);return r}function g(e,r){return u(e,r).then(t=>{if(t!==true)return t===false?{_id:{$eq:null}}:t})}var c="api_keys";function f(e){return e.substring(0,8)}function p(e,r){if(e.length!==r.length)return false;try{return timingSafeEqual(Buffer.from(e),Buffer.from(r))}catch{return false}}async function x(e,r,t){if(!e||typeof e!="string")return {valid:false,error:"No API key provided"};if(!e.startsWith("kyro_"))return {valid:false,error:"Invalid API key format"};let a=f(e);try{let s=await r.find({collection:c,where:{keyPrefix:{equals:a}},limit:100,page:1});if(!s.docs||s.docs.length===0)return {valid:!1,error:"Invalid API key"};let n=null;for(let i of s.docs){let l=i;if(p(l.key,e)){n=l;break}}if(!n)return {valid:!1,error:"Invalid API key"};if(n.expiresAt&&new Date(n.expiresAt)<new Date)return {valid:!1,error:"API key has expired"};try{await r.update({collection:c,id:n.id,data:{lastUsedAt:new Date().toISOString()}});}catch{}let o={id:n.userId,role:n.role||"author",tenantId:n.tenantId};if(t){let i=await t(n.userId);i&&Object.assign(o,i);}return {valid:!0,userId:n.userId,user:o,permissions:n.permissions||[],apiKeyId:n.id,tenantId:o.tenantId,role:o.role}}catch(s){return console.error("[ApiKey] Validation error:",s),{valid:false,error:"Failed to validate API key"}}}function I(e){let r=e.headers.get("Authorization");if(r){if(r.startsWith("ApiKey "))return r.slice(7).trim();if(r.startsWith("Bearer "))return null}let t=e.headers.get("X-API-Key");return t?t.trim():null}function m(e){return !e.valid||!e.userId?null:{userId:e.userId,user:e.user||{},permissions:e.permissions||[],apiKeyId:e.apiKeyId||"",tenantId:e.tenantId,role:e.role}}function C(e,r){if(e.length===0)return false;if(e.includes("*")||e.includes(r))return true;let[t,a]=r.split(":");return !!e.includes(`${t}:*`)}function P(){let e="abcdefghijklmnopqrstuvwxyz0123456789",r="";for(let t=0;t<32;t++)r+=e[Math.floor(Math.random()*e.length)];return `kyro_${r}`}function K(e){return e.substring(0,8)}export{u as a,A as b,g as c,c as d,x as e,I as f,m as g,C as h,P as i,K as j};
|