modelence 0.18.0-dev.0 → 0.18.0-dev.1

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.
@@ -1,3 +1,3 @@
1
- var s="module",i="modelence",r="0.18.0-dev.0",c="The Node.js Framework for Real-Time MongoDB Apps",n="dist/index.js",o="dist/global.d.ts",p={".":"./dist/index.js","./client":"./dist/client.js","./server":"./dist/server.js","./telemetry":"./dist/telemetry.js","./mongodb":"./dist/mongo.js","./types":{types:"./dist/types.d.ts",default:"./dist/types.js"}},d=["dist","dist/bin"],a={modelence:"./dist/bin/modelence.js"},l={build:"tsup",dev:"tsup --watch",format:'prettier --write "src/**/*.{ts,tsx,js,jsx,json,css,md}"',"format:check":'prettier --check "src/**/*.{ts,tsx,js,jsx,json,css,md}"',lint:"eslint src --ext .ts,.tsx --fix","lint:check":"eslint src --ext .ts,.tsx",prepublishOnly:"npm run build",bench:"tsx src/bench/index.ts",test:"NODE_OPTIONS=--experimental-vm-modules jest","test:watch":"NODE_OPTIONS=--experimental-vm-modules jest --watch","test:coverage":"NODE_OPTIONS=--experimental-vm-modules jest --coverage",postversion:"git push && git push --tags",prepare:"cd ../.. && git config core.hooksPath .husky"},m={type:"git",url:"git+https://github.com/modelence/modelence.git"},y="Modelence",u="SEE LICENSE IN LICENSE",h={url:"https://github.com/modelence/modelence/issues"},j="https://modelence.com",g={"@tanstack/react-query":"^5.100.7","@types/archiver":"^6.0.3","@types/bcrypt":"^6.0.0","@types/cookie-parser":"^1.4.9","@types/express":"^5.0.0","@types/fs-extra":"^11.0.4","@types/jest":"^30.0.0","@types/node":"^22.5.1","@types/react":"^19.0.0","@types/react-dom":"^19.0.1","@types/socket.io":"^3.0.1","@typescript-eslint/eslint-plugin":"^8.17.0","@typescript-eslint/parser":"^8.17.0",eslint:"^9.37.0",husky:"^9.1.7",jest:"^30.2.0","lint-staged":"^16.2.7",prettier:"^3.6.2",react:"^19.0.0","react-dom":"^19.0.0","ts-jest":"^29.4.5","ts-node":"^10.9.2"},x={"@socket.io/mongo-adapter":"^0.4.0","@vitejs/plugin-react":"^4.3.4",archiver:"^7.0.1",bcrypt:"^6.0.0",commander:"^12.0.0","cookie-parser":"^1.4.7",dotenv:"^16.4.5","elastic-apm-node":"^4.15.0",express:"^4.21.0","fs-extra":"^11.2.0",jiti:"^2.4.2",mongodb:"^6.8.1",open:"^10.1.0","socket.io":"^4.8.1","socket.io-client":"^4.8.1",tsup:"^8.3.6",tsx:"^4.19.3",typescript:"^5.7.2",vite:"^6.0.3","vite-plugin-eslint":"^1.8.1",winston:"^3.15.0","winston-elasticsearch":"^0.19.0",zod:"^3.23.8",zustand:"^5.0.2"},v={"@tanstack/react-query":">=5.0.0",react:">=18.0.0","react-dom":">=18.0.0"},b={type:s,name:i,version:r,description:c,main:n,types:o,exports:p,files:d,bin:a,scripts:l,"lint-staged":{"src/**/*.{ts,tsx,js,jsx,json,css,md}":"prettier --write"},repository:m,author:y,license:u,bugs:h,homepage:j,devDependencies:g,dependencies:x,peerDependencies:v};
2
- export{s as a,i as b,r as c,c as d,n as e,o as f,p as g,d as h,a as i,l as j,m as k,y as l,u as m,h as n,j as o,g as p,x as q,v as r,b as s};//# sourceMappingURL=chunk-7E2S5HNK.js.map
3
- //# sourceMappingURL=chunk-7E2S5HNK.js.map
1
+ var s="module",i="modelence",r="0.18.0-dev.1",c="The Node.js Framework for Real-Time MongoDB Apps",n="dist/index.js",o="dist/global.d.ts",p={".":"./dist/index.js","./client":"./dist/client.js","./server":"./dist/server.js","./telemetry":"./dist/telemetry.js","./mongodb":"./dist/mongo.js","./types":{types:"./dist/types.d.ts",default:"./dist/types.js"}},d=["dist","dist/bin"],a={modelence:"./dist/bin/modelence.js"},l={build:"tsup",dev:"tsup --watch",format:'prettier --write "src/**/*.{ts,tsx,js,jsx,json,css,md}"',"format:check":'prettier --check "src/**/*.{ts,tsx,js,jsx,json,css,md}"',lint:"eslint src --ext .ts,.tsx --fix","lint:check":"eslint src --ext .ts,.tsx",prepublishOnly:"npm run build",bench:"tsx src/bench/index.ts",test:"NODE_OPTIONS=--experimental-vm-modules jest","test:watch":"NODE_OPTIONS=--experimental-vm-modules jest --watch","test:coverage":"NODE_OPTIONS=--experimental-vm-modules jest --coverage",postversion:"git push && git push --tags",prepare:"cd ../.. && git config core.hooksPath .husky"},m={type:"git",url:"git+https://github.com/modelence/modelence.git"},y="Modelence",u="SEE LICENSE IN LICENSE",h={url:"https://github.com/modelence/modelence/issues"},j="https://modelence.com",g={"@tanstack/react-query":"^5.100.7","@types/archiver":"^6.0.3","@types/bcrypt":"^6.0.0","@types/cookie-parser":"^1.4.9","@types/express":"^5.0.0","@types/fs-extra":"^11.0.4","@types/jest":"^30.0.0","@types/node":"^22.5.1","@types/react":"^19.0.0","@types/react-dom":"^19.0.1","@types/socket.io":"^3.0.1","@typescript-eslint/eslint-plugin":"^8.17.0","@typescript-eslint/parser":"^8.17.0",eslint:"^9.37.0",husky:"^9.1.7",jest:"^30.2.0","lint-staged":"^16.2.7",prettier:"^3.6.2",react:"^19.0.0","react-dom":"^19.0.0","ts-jest":"^29.4.5","ts-node":"^10.9.2"},x={"@socket.io/mongo-adapter":"^0.4.0","@vitejs/plugin-react":"^4.3.4",archiver:"^7.0.1",bcrypt:"^6.0.0",commander:"^12.0.0","cookie-parser":"^1.4.7",dotenv:"^16.4.5","elastic-apm-node":"^4.15.0",express:"^4.21.0","fs-extra":"^11.2.0",jiti:"^2.4.2",mongodb:"^6.8.1",open:"^10.1.0","socket.io":"^4.8.1","socket.io-client":"^4.8.1",tsup:"^8.3.6",tsx:"^4.19.3",typescript:"^5.7.2",vite:"^6.0.3","vite-plugin-eslint":"^1.8.1",winston:"^3.15.0","winston-elasticsearch":"^0.19.0",zod:"^3.23.8",zustand:"^5.0.2"},v={"@tanstack/react-query":">=5.0.0",react:">=18.0.0","react-dom":">=18.0.0"},b={type:s,name:i,version:r,description:c,main:n,types:o,exports:p,files:d,bin:a,scripts:l,"lint-staged":{"src/**/*.{ts,tsx,js,jsx,json,css,md}":"prettier --write"},repository:m,author:y,license:u,bugs:h,homepage:j,devDependencies:g,dependencies:x,peerDependencies:v};
2
+ export{s as a,i as b,r as c,c as d,n as e,o as f,p as g,d as h,a as i,l as j,m as k,y as l,u as m,h as n,j as o,g as p,x as q,v as r,b as s};//# sourceMappingURL=chunk-KU4GANYW.js.map
3
+ //# sourceMappingURL=chunk-KU4GANYW.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../package.json"],"names":["type","name","version","description","main","types","exports","files","bin","scripts","repository","author","license","bugs","homepage","devDependencies","dependencies","peerDependencies","package_default"],"mappings":"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","file":"chunk-7E2S5HNK.js","sourcesContent":["{\n \"type\": \"module\",\n \"name\": \"modelence\",\n \"version\": \"0.18.0-dev.0\",\n \"description\": \"The Node.js Framework for Real-Time MongoDB Apps\",\n \"main\": \"dist/index.js\",\n \"types\": \"dist/global.d.ts\",\n \"exports\": {\n \".\": \"./dist/index.js\",\n \"./client\": \"./dist/client.js\",\n \"./server\": \"./dist/server.js\",\n \"./telemetry\": \"./dist/telemetry.js\",\n \"./mongodb\": \"./dist/mongo.js\",\n \"./types\": {\n \"types\": \"./dist/types.d.ts\",\n \"default\": \"./dist/types.js\"\n }\n },\n \"files\": [\n \"dist\",\n \"dist/bin\"\n ],\n \"bin\": {\n \"modelence\": \"./dist/bin/modelence.js\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"format\": \"prettier --write \\\"src/**/*.{ts,tsx,js,jsx,json,css,md}\\\"\",\n \"format:check\": \"prettier --check \\\"src/**/*.{ts,tsx,js,jsx,json,css,md}\\\"\",\n \"lint\": \"eslint src --ext .ts,.tsx --fix\",\n \"lint:check\": \"eslint src --ext .ts,.tsx\",\n \"prepublishOnly\": \"npm run build\",\n \"bench\": \"tsx src/bench/index.ts\",\n \"test\": \"NODE_OPTIONS=--experimental-vm-modules jest\",\n \"test:watch\": \"NODE_OPTIONS=--experimental-vm-modules jest --watch\",\n \"test:coverage\": \"NODE_OPTIONS=--experimental-vm-modules jest --coverage\",\n \"postversion\": \"git push && git push --tags\",\n \"prepare\": \"cd ../.. && git config core.hooksPath .husky\"\n },\n \"lint-staged\": {\n \"src/**/*.{ts,tsx,js,jsx,json,css,md}\": \"prettier --write\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/modelence/modelence.git\"\n },\n \"author\": \"Modelence\",\n \"license\": \"SEE LICENSE IN LICENSE\",\n \"bugs\": {\n \"url\": \"https://github.com/modelence/modelence/issues\"\n },\n \"homepage\": \"https://modelence.com\",\n \"devDependencies\": {\n \"@tanstack/react-query\": \"^5.100.7\",\n \"@types/archiver\": \"^6.0.3\",\n \"@types/bcrypt\": \"^6.0.0\",\n \"@types/cookie-parser\": \"^1.4.9\",\n \"@types/express\": \"^5.0.0\",\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/jest\": \"^30.0.0\",\n \"@types/node\": \"^22.5.1\",\n \"@types/react\": \"^19.0.0\",\n \"@types/react-dom\": \"^19.0.1\",\n \"@types/socket.io\": \"^3.0.1\",\n \"@typescript-eslint/eslint-plugin\": \"^8.17.0\",\n \"@typescript-eslint/parser\": \"^8.17.0\",\n \"eslint\": \"^9.37.0\",\n \"husky\": \"^9.1.7\",\n \"jest\": \"^30.2.0\",\n \"lint-staged\": \"^16.2.7\",\n \"prettier\": \"^3.6.2\",\n \"react\": \"^19.0.0\",\n \"react-dom\": \"^19.0.0\",\n \"ts-jest\": \"^29.4.5\",\n \"ts-node\": \"^10.9.2\"\n },\n \"dependencies\": {\n \"@socket.io/mongo-adapter\": \"^0.4.0\",\n \"@vitejs/plugin-react\": \"^4.3.4\",\n \"archiver\": \"^7.0.1\",\n \"bcrypt\": \"^6.0.0\",\n \"commander\": \"^12.0.0\",\n \"cookie-parser\": \"^1.4.7\",\n \"dotenv\": \"^16.4.5\",\n \"elastic-apm-node\": \"^4.15.0\",\n \"express\": \"^4.21.0\",\n \"fs-extra\": \"^11.2.0\",\n \"jiti\": \"^2.4.2\",\n \"mongodb\": \"^6.8.1\",\n \"open\": \"^10.1.0\",\n \"socket.io\": \"^4.8.1\",\n \"socket.io-client\": \"^4.8.1\",\n \"tsup\": \"^8.3.6\",\n \"tsx\": \"^4.19.3\",\n \"typescript\": \"^5.7.2\",\n \"vite\": \"^6.0.3\",\n \"vite-plugin-eslint\": \"^1.8.1\",\n \"winston\": \"^3.15.0\",\n \"winston-elasticsearch\": \"^0.19.0\",\n \"zod\": \"^3.23.8\",\n \"zustand\": \"^5.0.2\"\n },\n \"peerDependencies\": {\n \"@tanstack/react-query\": \">=5.0.0\",\n \"react\": \">=18.0.0\",\n \"react-dom\": \">=18.0.0\"\n }\n}\n"]}
1
+ {"version":3,"sources":["../package.json"],"names":["type","name","version","description","main","types","exports","files","bin","scripts","repository","author","license","bugs","homepage","devDependencies","dependencies","peerDependencies","package_default"],"mappings":"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","file":"chunk-KU4GANYW.js","sourcesContent":["{\n \"type\": \"module\",\n \"name\": \"modelence\",\n \"version\": \"0.18.0-dev.1\",\n \"description\": \"The Node.js Framework for Real-Time MongoDB Apps\",\n \"main\": \"dist/index.js\",\n \"types\": \"dist/global.d.ts\",\n \"exports\": {\n \".\": \"./dist/index.js\",\n \"./client\": \"./dist/client.js\",\n \"./server\": \"./dist/server.js\",\n \"./telemetry\": \"./dist/telemetry.js\",\n \"./mongodb\": \"./dist/mongo.js\",\n \"./types\": {\n \"types\": \"./dist/types.d.ts\",\n \"default\": \"./dist/types.js\"\n }\n },\n \"files\": [\n \"dist\",\n \"dist/bin\"\n ],\n \"bin\": {\n \"modelence\": \"./dist/bin/modelence.js\"\n },\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"format\": \"prettier --write \\\"src/**/*.{ts,tsx,js,jsx,json,css,md}\\\"\",\n \"format:check\": \"prettier --check \\\"src/**/*.{ts,tsx,js,jsx,json,css,md}\\\"\",\n \"lint\": \"eslint src --ext .ts,.tsx --fix\",\n \"lint:check\": \"eslint src --ext .ts,.tsx\",\n \"prepublishOnly\": \"npm run build\",\n \"bench\": \"tsx src/bench/index.ts\",\n \"test\": \"NODE_OPTIONS=--experimental-vm-modules jest\",\n \"test:watch\": \"NODE_OPTIONS=--experimental-vm-modules jest --watch\",\n \"test:coverage\": \"NODE_OPTIONS=--experimental-vm-modules jest --coverage\",\n \"postversion\": \"git push && git push --tags\",\n \"prepare\": \"cd ../.. && git config core.hooksPath .husky\"\n },\n \"lint-staged\": {\n \"src/**/*.{ts,tsx,js,jsx,json,css,md}\": \"prettier --write\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/modelence/modelence.git\"\n },\n \"author\": \"Modelence\",\n \"license\": \"SEE LICENSE IN LICENSE\",\n \"bugs\": {\n \"url\": \"https://github.com/modelence/modelence/issues\"\n },\n \"homepage\": \"https://modelence.com\",\n \"devDependencies\": {\n \"@tanstack/react-query\": \"^5.100.7\",\n \"@types/archiver\": \"^6.0.3\",\n \"@types/bcrypt\": \"^6.0.0\",\n \"@types/cookie-parser\": \"^1.4.9\",\n \"@types/express\": \"^5.0.0\",\n \"@types/fs-extra\": \"^11.0.4\",\n \"@types/jest\": \"^30.0.0\",\n \"@types/node\": \"^22.5.1\",\n \"@types/react\": \"^19.0.0\",\n \"@types/react-dom\": \"^19.0.1\",\n \"@types/socket.io\": \"^3.0.1\",\n \"@typescript-eslint/eslint-plugin\": \"^8.17.0\",\n \"@typescript-eslint/parser\": \"^8.17.0\",\n \"eslint\": \"^9.37.0\",\n \"husky\": \"^9.1.7\",\n \"jest\": \"^30.2.0\",\n \"lint-staged\": \"^16.2.7\",\n \"prettier\": \"^3.6.2\",\n \"react\": \"^19.0.0\",\n \"react-dom\": \"^19.0.0\",\n \"ts-jest\": \"^29.4.5\",\n \"ts-node\": \"^10.9.2\"\n },\n \"dependencies\": {\n \"@socket.io/mongo-adapter\": \"^0.4.0\",\n \"@vitejs/plugin-react\": \"^4.3.4\",\n \"archiver\": \"^7.0.1\",\n \"bcrypt\": \"^6.0.0\",\n \"commander\": \"^12.0.0\",\n \"cookie-parser\": \"^1.4.7\",\n \"dotenv\": \"^16.4.5\",\n \"elastic-apm-node\": \"^4.15.0\",\n \"express\": \"^4.21.0\",\n \"fs-extra\": \"^11.2.0\",\n \"jiti\": \"^2.4.2\",\n \"mongodb\": \"^6.8.1\",\n \"open\": \"^10.1.0\",\n \"socket.io\": \"^4.8.1\",\n \"socket.io-client\": \"^4.8.1\",\n \"tsup\": \"^8.3.6\",\n \"tsx\": \"^4.19.3\",\n \"typescript\": \"^5.7.2\",\n \"vite\": \"^6.0.3\",\n \"vite-plugin-eslint\": \"^1.8.1\",\n \"winston\": \"^3.15.0\",\n \"winston-elasticsearch\": \"^0.19.0\",\n \"zod\": \"^3.23.8\",\n \"zustand\": \"^5.0.2\"\n },\n \"peerDependencies\": {\n \"@tanstack/react-query\": \">=5.0.0\",\n \"react\": \">=18.0.0\",\n \"react-dom\": \">=18.0.0\"\n }\n}\n"]}
@@ -0,0 +1,19 @@
1
+ import {s as s$1}from'./chunk-KU4GANYW.js';import {a,b as b$1,c,k as k$1,l,m,n,g,h,f,s,e,i,d,j as j$1,o,t,u,v,w as w$1,x,q as q$1,p,A,y as y$1,z as z$1}from'./chunk-LDVLXJLS.js';import {d as d$1,a as a$4}from'./chunk-C3UESBRX.js';import {a as a$2,f as f$1,e as e$1,g as g$1,c as c$1,h as h$1,k as k$2,j as j$2,d as d$2,i as i$1,l as l$1,m as m$1}from'./chunk-3SPXJEOR.js';import {a as a$3,b as b$2}from'./chunk-5M6FUMUK.js';import {a as a$1}from'./chunk-DO5TZLF5.js';import Rr from'dotenv';import Io from'fs/promises';import ao from'os';import J from'path';import {Server}from'socket.io';import {createAdapter}from'@socket.io/mongo-adapter';import {MongoClient,MongoError,MongoServerError}from'mongodb';export{ObjectId as m}from'mongodb';import Br from'bcrypt';import L,{z}from'zod';import {randomBytes,randomUUID}from'crypto';import {createServer,defineConfig,loadConfigFromFile,mergeConfig}from'vite';import So from'@vitejs/plugin-react';import qe from'fs';import U,{Router}from'express';import bn from'cookie-parser';import En from'http';var te=new a("_system",{configSchema:{mongodbUri:{type:"secret",isPublic:false,default:""},mongodbPoolSize:{type:"number",isPublic:false,default:10},"env.type":{type:"string",isPublic:true,default:""},"site.url":{type:"string",isPublic:true,default:""},multiInstance:{type:"boolean",isPublic:false,default:false}}});var P=null;async function kt(){if(P)return P;let e=T();if(!e)throw new Error("MongoDB URI is not set");let t=te.getConfig("mongodbPoolSize");P=new MongoClient(e,{driverInfo:{name:"Modelence",version:s$1.version},ignoreUndefined:true,maxPoolSize:t});try{return await P.connect(),await P.db("admin").command({ping:1}),console.log("Pinged your deployment. You successfully connected to MongoDB!"),P}catch(r){throw console.error(r),P=null,r}}function T(){return te.getConfig("mongodbUri")||void 0}function fe(){return P}var re=null,Hr="_modelenceSocketio",At=60;async function Gr({httpServer:e,channels:t}){let r=fe(),o=!!a$2("_system.multiInstance");console.log("Initializing Socket.IO server...");let n=null;if(o&&r){n=r.db().collection(Hr);try{await n.createIndex({createdAt:1},{expireAfterSeconds:At,background:!0});}catch(i){if(i instanceof Error&&"code"in i&&i.code===85)try{await n.dropIndex("createdAt_1"),await n.createIndex({createdAt:1},{expireAfterSeconds:At,background:!0});}catch(s){console.error("Failed to recreate index on MongoDB collection for Socket.IO:",s);}else console.error("Failed to create index on MongoDB collection for Socket.IO:",i);}}re=new Server(e,{cors:{origin:"*",methods:["GET","POST"]},adapter:n?createAdapter(n):void 0,transports:["websocket"],perMessageDeflate:false}),re.on("error",i=>{console.error("Socket.IO error:",i);}),re.use(async(i,s)=>{let a=i.handshake.auth.token;try{i.data=await q$1(a);}finally{s();}}),re.on("connection",i=>{i.on("disconnect",()=>{A(i);}),i.on("joinChannel",async s=>{let[a]=s.split(":"),c=false;for(let l of t)if(l.category===a){(!l.canAccessChannel||await l.canAccessChannel(i.data))&&(i.join(s),c=true,i.emit("joinedChannel",s));break}c||i.emit("joinError",{channel:s,error:"Access denied"});}),i.on("leaveChannel",s=>{i.leave(s),console.log(`User ${i.id} left channel ${s}`),i.emit("leftChannel",s);}),i.on("subscribeLiveQuery",s=>y$1(i,s)),i.on("unsubscribeLiveQuery",s=>z$1(i,s));}),console.log("Socket.IO server initialized");}function Fr({category:e,id:t,data:r}){re?.to(`${e}:${t}`).emit(e,r);}var xt={init:Gr,broadcast:Fr};async function Rt(e){let t=e.toLowerCase().trim().split("@");if(t.length!==2)return false;let r=t[1];return !!await l.findOne({domain:r})}var Ot={interval:a$1.days(1),async handler(){let e=await fetch("https://disposable.github.io/disposable-email-domains/domains.txt");if(!e.ok)throw new Error(`HTTP ${e.status}: ${e.statusText}`);let r=(await e.text()).split(`
2
+ `).map(i=>i.trim().toLowerCase()).filter(i=>i.length>0),o=new Date,n=500;for(let i=0;i<r.length;i+=n){let s=r.slice(i,i+n);try{await l.insertMany(s.map(a=>({domain:a,addedAt:o})));}catch(a){a&&typeof a=="object"&&"name"in a&&a.name;}}}};var ge=3,D=50,_t=8,Pt=128,Mt=254,Lt=e=>z.string().trim().min(e.min??1,{message:`must be at least ${e.min??1} characters`}).max(e.max,{message:`must be at most ${e.max} characters`}),Oe=e=>z.string().trim().max(e.max,{message:`must be at most ${e.max} characters`}).transform(t=>t===""?void 0:t).optional(),Vr=z.object({firstName:Oe({max:50}),lastName:Oe({max:50}),avatarUrl:Oe({max:400}),handle:Lt({min:ge,max:D})}).strict();function he(e){let t=Vr.partial().safeParse(e);if(!t.success){let r=t.error.issues[0],o=r.path.join("."),n=o?`${o}: ${r.message}`:r.message;throw new Error(n)}return t.data}function we(e){return z.string().min(_t,{message:`Password must contain at least ${_t} characters`}).max(Pt,{message:`Password must be at most ${Pt} characters`}).parse(e)}function M(e){return z.string().max(Mt,{message:`Email must be at most ${Mt} characters`}).email({message:"Invalid email address"}).parse(e).toLowerCase()}function Ut(e){return Lt({min:ge,max:D}).parse(e)}function ye(e){return {id:e._id,handle:e.handle,roles:e.roles||[],firstName:e.firstName??void 0,lastName:e.lastName??void 0,avatarUrl:e.avatarUrl??void 0}}async function It(e){let t=e.slice(0,D);try{if(!await k$1.findOne({handle:t},{collation:{locale:"en",strength:2}}))return t}catch(n){throw new Error(`Database error while checking handle availability: ${n}`)}let r=51;for(let n=2;n<=r;n++){let i=`_${n}`,s=`${t.slice(0,D-i.length)}${i}`;try{if(!await k$1.findOne({handle:s},{collation:{locale:"en",strength:2}}))return s}catch(a){throw new Error(`Database error while checking handle "${s}": ${a}`)}}let o=10;for(let n=0;n<o;n++){let i=`_${randomBytes(3).toString("hex")}`,s=`${t.slice(0,D-i.length)}${i}`;try{if(!await k$1.findOne({handle:s},{collation:{locale:"en",strength:2}}))return s}catch(a){throw new Error(`Database error while checking handle "${s}": ${a}`)}}throw new Error(`Could not generate a unique handle for base "${e}" after exhausting all attempts.`)}async function $(e,t,{throwOnConflict:r=true}={}){if(e!=null&&String(e).trim()!==""){let n=Ut(String(e).trim());if(r){if(await k$1.findOne({handle:n},{collation:{locale:"en",strength:2}}))throw new Error("Handle already taken.");return n}return It(n)}let o=t.split("@")[0].padEnd(ge,"_").slice(0,D);return It(o)}var _e=Object.freeze({});function Nt(e){_e=Object.freeze(Object.assign({},_e,e));}function y(){return _e}var Pe=Object.freeze({});function Tt(e){Pe=Object.freeze(Object.assign({},Pe,e));}function b(){return Pe}async function $t(e,{user:t,session:r,connectionInfo:o,res:n}){try{if(!r)throw new Error("Session is not initialized");let i=o?.ip;i&&await k({bucket:"signin",type:"ip",value:i});let s=M(e.email),a=z.string().parse(e.password),c=await k$1.findOne({"emails.address":s,status:{$nin:["deleted","disabled"]}},{collation:{locale:"en",strength:2}}),l=c?.authMethods?.password?.hash;if(!l)throw Dt();if(!c.emails?.find(h=>h.address.toLowerCase()===s)?.verified&&y()?.provider)throw new Error("Your email address hasn't been verified yet. Please check your inbox for the verification email.");if(!await Br.compare(a,l))throw Dt();return await d(r.authToken,c._id),n&&h(n,r.authToken),b().onAfterLogin?.({provider:"email",user:c,session:r,connectionInfo:o}),b().login?.onSuccess?.(c),{user:ye(c)}}catch(i){throw i instanceof Error&&(b().onLoginError?.({provider:"email",error:i,session:r,connectionInfo:o}),b().login?.onError?.(i)),i}}async function jt(e$1,{session:t,res:r}){if(!t)throw new Error("Session is not initialized");await e(t.authToken),r&&i(r);}function Dt(){return new Error("Incorrect email/password combination")}async function Ht(e,{user:t}){if(!t)throw new Error("Not authenticated");let r=await k$1.requireById(t.id);return {handle:r.handle,emails:r.emails,authMethods:Object.keys(r.authMethods||{}),firstName:r.firstName??void 0,lastName:r.lastName??void 0,avatarUrl:r.avatarUrl??void 0}}async function Gt(e,{user:t}){if(!t)throw new Error("Not authenticated");let r=await k$1.requireById(t.id),o=he(e);if(await b().validateProfileUpdate?.(o),"handle"in o&&o.handle!==void 0&&await k$1.findOne({handle:o.handle,_id:{$ne:r._id}},{collation:{locale:"en",strength:2}}))throw new Error("Handle already taken.");if(Object.keys(o).length>0){let n={},i={};for(let[a,c]of Object.entries(o))c===void 0?i[a]="":n[a]=c;let s={};Object.keys(n).length>0&&(s.$set=n),Object.keys(i).length>0&&(s.$unset=i);try{await k$1.updateOne({_id:r._id},s);let a=Object.fromEntries(Object.keys(i).map(c=>[c,void 0]));r={...r,...n,...a};}catch(a){throw a instanceof Error&&"code"in a&&a.code===11e3?new Error("Handle already taken."):a}}return {user:ye(r)}}var Me=["google","github"];async function Ft({provider:e},{user:t}){if(!t)throw new Error("You must be signed in to unlink a provider.");if(typeof e!="string"||!Me.includes(e))throw new Error(`Invalid provider. Supported providers are: ${Me.join(", ")}.`);let r=await k$1.requireById(t.id),o=r.authMethods??{};if(!o[e])throw new Error(`${e} is not linked to your account.`);if(Object.values(o).filter(Boolean).length<=1)throw new Error("Cannot unlink your only authentication method. Please add another method first.");let s=Object.keys(o).filter(l=>l!==e&&o[l]),a=s.length>0?{$or:s.map(l=>({[`authMethods.${l}`]:{$exists:true}}))}:{};if((await k$1.updateOne({_id:r._id,...a},{$unset:{[`authMethods.${e}`]:""}})).matchedCount===0)throw new Error("Cannot unlink your only authentication method. Please add another method first.")}var ne=new b$1("_modelenceRateLimits",{schema:{bucket:c.string(),type:c.enum(["ip","user","email"]),value:c.string(),windowMs:c.number(),windowStart:c.date(),windowCount:c.number(),prevWindowCount:c.number(),expiresAt:c.date()},indexes:[{key:{bucket:1,type:1,value:1,windowMs:1},unique:true},{key:{expiresAt:1},expireAfterSeconds:0}]});var Le=[];function Vt(e){if(Le.length>0)throw new Error("Duplicate call to initRateLimits - already initialized");Le=e;}async function k(e){let{bucket:t,type:r,value:o,message:n}=e,i=Le.filter(a=>a.bucket===t&&a.type===r),s=n?()=>new d$1(n):void 0;for(let a of i)await Jr(a,o,s);}async function Jr(e,t,r){let o=()=>r?r():new d$1(`Rate limit exceeded for ${e.bucket}`),n=await ne.findOne({bucket:e.bucket,type:e.type,value:t,windowMs:e.window}),i=Date.now(),s=Math.floor(i/e.window)*e.window,{count:a,modifier:c}=n?Wr(n,s,i):{count:0,modifier:{$setOnInsert:{windowStart:new Date(s),windowCount:1,prevWindowCount:0,expiresAt:new Date(s+e.window+e.window)}}};if(a>=e.limit)throw o();await ne.upsertOne({bucket:e.bucket,type:e.type,value:t,windowMs:e.window},c);}function Wr(e,t,r){let o=t-e.windowMs;if(e.windowStart.getTime()===t){let n=e.windowCount,i=e.prevWindowCount,s=1-(r-t)/e.windowMs;return {count:Math.round(n+i*s),modifier:{$inc:{windowCount:1},$setOnInsert:{windowStart:new Date(t),prevWindowCount:0,expiresAt:new Date(t+e.windowMs+e.windowMs)}}}}if(e.windowStart.getTime()===o){let n=1-(r-t)/e.windowMs;return {count:Math.round(e.windowCount*n),modifier:{$set:{windowStart:new Date(t),windowCount:1,prevWindowCount:e.windowCount,expiresAt:new Date(t+e.windowMs+e.windowMs)}}}}return {count:0,modifier:{$set:{windowStart:new Date(t),windowCount:1,prevWindowCount:0,expiresAt:new Date(t+e.windowMs+e.windowMs)}}}}function zt({name:e,email:t,verificationUrl:r}){return `
3
+ <p>Hi${e?` ${e}`:""},</p>
4
+ <p>Please verify your email address ${t} by clicking the link below:</p>
5
+ <p><a href="${r}">${r}</a></p>
6
+ <p>If you did not request this, please ignore this email.</p>
7
+ `}async function Yr(e){let t=await m.findOne({token:e,expiresAt:{$gt:new Date}});if(!t)throw new Error("Invalid or expired verification token");if(!await k$1.findOne({_id:t.userId,status:{$nin:["deleted","disabled"]}}))throw new Error("User not found");let o=t.email;if(!o)throw new Error("Email not found in token");let n=await k$1.findOneAndUpdate({_id:t.userId,status:{$nin:["deleted","disabled"]},"emails.address":o,"emails.verified":{$ne:true}},{$set:{"emails.$.verified":true}},{returnDocument:"after"});if(!n)throw await k$1.findOne({_id:t.userId,"emails.address":o})?new Error("Email is already verified"):new Error("Email address not found for this user");return await m.deleteOne({_id:t._id}),{userDoc:n,email:o}}async function Bt(e){let t=a$2("_system.site.url"),r=y().verification?.redirectUrl||y().emailVerifiedRedirectUrl||t||"/";try{let o=z.string().parse(e.query.token),{userDoc:n}=await Yr(o);b().onAfterEmailVerification?.({provider:"email",user:n,session:null,connectionInfo:{baseUrl:t,ip:e.req.ip||e.req.socket.remoteAddress,userAgent:e.headers["user-agent"],acceptLanguage:e.headers["accept-language"],referrer:e.headers.referer}});let{authToken:s}=await g(n._id);return h(e.res,s),{status:301,redirect:`${r}?status=verified`}}catch(o){let n=o instanceof Error?o.message:"An unexpected error occurred";return o instanceof Error&&(b().onEmailVerificationError?.({provider:"email",error:o,session:null,connectionInfo:{baseUrl:t,ip:e.req.ip||e.req.socket.remoteAddress,userAgent:e.headers["user-agent"],acceptLanguage:e.headers["accept-language"],referrer:e.headers.referer}}),console.error("Error verifying email:",o)),{status:301,redirect:`${r}?status=error&message=${encodeURIComponent(n)}`}}}async function Ie({userId:e,email:t,baseUrl:r=a$2("_system.site.url")}){if(y().provider){let o=y().provider,n=randomBytes(32).toString("hex"),i=new Date(Date.now()+a$1.hours(24));await m.insertOne({userId:e,email:t,token:n,createdAt:new Date,expiresAt:i});let s$1=`${r}/api/_internal/auth/verify-email?token=${n}`,c=(y()?.verification?.template||zt)({name:"",email:t,verificationUrl:s$1}),l=s(c);await o?.sendEmail({to:t,from:y()?.from||"noreply@modelence.com",subject:y()?.verification?.subject||"Verify your email address",text:l,html:c});}}var Ue={success:true,message:"If that email is registered and not yet verified, a verification email has been sent"};async function qt(e,{connectionInfo:t}){let r=M(e.email),o=await k$1.findOne({"emails.address":r,status:{$nin:["deleted","disabled"]}},{collation:{locale:"en",strength:2}});if(!o)return Ue;let n=o.emails?.find(i=>i.address.toLowerCase()===r);if(!n||n.verified)return Ue;if(!y().provider)throw new Error("Email provider is not configured");return await k({bucket:"verification",type:"user",value:o._id.toString(),message:"Please wait at least 60 seconds before requesting another verification email"}),await Ie({userId:o._id,email:r,baseUrl:t?.baseUrl}),Ue}async function Jt(e,{user:t,session:r,connectionInfo:o}){let n=b();try{let i=e,{firstName:s,lastName:a,avatarUrl:c,handle:l}=i,d=M(i.email),m=we(i.password),h=o?.ip;if(h&&await k({bucket:"signupAttempt",type:"ip",value:h}),await Rt(d))throw new Error("Please use a permanent email address");let C=await k$1.findOne({"emails.address":d},{collation:{locale:"en",strength:2}});if(C){let le=C.emails?.find(X=>X.address.toLowerCase()===d);throw C.status==="disabled"?new Error("User is marked for deletion, please contact support if you want to restore the account."):new Error(`User with email already exists: ${le?.address}`)}h&&await k({bucket:"signup",type:"ip",value:h});let E=he({firstName:s,lastName:a,avatarUrl:c,handle:l});await n.validateSignup?.({email:d,password:m,...E});let A;if(E.handle)A=await $(E.handle,d);else if(n.generateHandle){let le=await n.generateHandle({email:d,firstName:E.firstName,lastName:E.lastName});A=await $(le,d,{throwOnConflict:!1});}else A=await $(void 0,d);let Q=await Br.hash(m,10),Y=await k$1.insertOne({handle:A,status:"active",emails:[{address:d,verified:!1}],createdAt:new Date,authMethods:{password:{hash:Q}},...E.firstName!==void 0&&{firstName:E.firstName},...E.lastName!==void 0&&{lastName:E.lastName},...E.avatarUrl!==void 0&&{avatarUrl:E.avatarUrl}}),I=await k$1.findOne({_id:Y.insertedId},{readPreference:"primary"});if(!I)throw new Error("User not found");return await Ie({userId:Y?.insertedId,email:d,baseUrl:o?.baseUrl}),n.onAfterSignup?.({provider:"email",user:I,session:r,connectionInfo:o}),n.signup?.onSuccess?.(I),Y.insertedId}catch(i){throw i instanceof Error&&(n.onSignupError?.({provider:"email",error:i,session:r,connectionInfo:o}),n.signup?.onError?.(i)),i}}function ro(e,t){return t?t.startsWith("http://")||t.startsWith("https://")?t:`${e}${t.startsWith("/")?"":"/"}${t}`:e}function oo({email:e,resetUrl:t}){return `
8
+ <p>Hi,</p>
9
+ <p>We received a request to reset your password for ${e}.</p>
10
+ <p>Click the link below to reset your password:</p>
11
+ <p><a href="${t}">${t}</a></p>
12
+ <p>This link will expire in 1 hour.</p>
13
+ <p>If you did not request this password reset, please ignore this email.</p>
14
+ `}var Ne={success:true,message:"If an account with that email exists, a password reset link has been sent"};async function Wt(e,{connectionInfo:t}){let r=M(e.email),o=t?.ip;o&&await k({bucket:"passwordReset",type:"ip",value:o}),await k({bucket:"passwordReset",type:"email",value:r});let n$1=await k$1.findOne({"emails.address":r,status:{$nin:["deleted","disabled"]}},{collation:{locale:"en",strength:2}});if(!n$1||!n$1.authMethods?.password)return Ne;let i=y().provider;if(!i)throw new Error("Email provider is not configured");let s$1=randomBytes(32).toString("hex"),a=Date.now(),c=new Date(a),l=new Date(a+a$1.hours(1));await n.insertOne({userId:n$1._id,email:r,token:s$1,createdAt:c,expiresAt:l});let d=a$2("_system.site.url")||t?.baseUrl,h=`${ro(d,y().passwordReset?.redirectUrl)}?token=${s$1}`,E=(y()?.passwordReset?.template||oo)({email:r,resetUrl:h,name:""}),A=s(E);return await i.sendEmail({to:r,from:y()?.from||"noreply@modelence.com",subject:y()?.passwordReset?.subject||"Reset your password",text:A,html:E}),Ne}async function Kt(e,{}){let t=z.string().parse(e.token),r=we(e.password),o=await n.findOne({token:t});if(!o)throw new Error("Invalid or expired reset token");if(o.expiresAt<new Date)throw await n.deleteOne({token:t}),new Error("Reset token has expired");let n$1=await k$1.findOne({_id:o.userId});if(!n$1)throw new Error("User not found");let i=await Br.hash(r,10);return await k$1.updateOne({_id:n$1._id},{$set:{"authMethods.password.hash":i}}),o.email&&await k$1.updateOne({_id:n$1._id,"emails.address":o.email},{$set:{"emails.$.verified":true}}),await f(n$1._id),await n.deleteOne({token:t}),{success:true,message:"Password has been reset successfully"}}function Te(e={}){return [{bucket:"signup",type:"ip",window:a$1.minutes(15),limit:e.signup?.perIp15Minutes??20},{bucket:"signup",type:"ip",window:a$1.days(1),limit:e.signup?.perIpPerDay??200},{bucket:"signupAttempt",type:"ip",window:a$1.minutes(15),limit:e.signupAttempt?.perIp15Minutes??50},{bucket:"signupAttempt",type:"ip",window:a$1.days(1),limit:e.signupAttempt?.perIpPerDay??500},{bucket:"signin",type:"ip",window:a$1.minutes(15),limit:e.signin?.perIp15Minutes??50},{bucket:"signin",type:"ip",window:a$1.days(1),limit:e.signin?.perIpPerDay??500},{bucket:"verification",type:"user",window:a$1.seconds(60),limit:e.verification?.perUserPerMinute??1},{bucket:"verification",type:"user",window:a$1.days(1),limit:e.verification?.perUserPerDay??10},{bucket:"passwordReset",type:"ip",window:a$1.minutes(15),limit:e.passwordReset?.perIp15Minutes??10},{bucket:"passwordReset",type:"ip",window:a$1.days(1),limit:e.passwordReset?.perIpPerDay??100},{bucket:"passwordReset",type:"email",window:a$1.hours(1),limit:e.passwordReset?.perEmailPerHour??5},{bucket:"passwordReset",type:"email",window:a$1.days(1),limit:e.passwordReset?.perEmailPerDay??10}]}var De=new a("_system.user",{stores:[k$1,l,m,n],queries:{getOwnProfile:Ht},mutations:{signupWithPassword:Jt,loginWithPassword:$t,logout:jt,resendEmailVerification:qt,sendResetPasswordToken:Wt,resetPassword:Kt,updateProfile:Gt,unlinkOAuthProvider:Ft},cronJobs:{updateDisposableEmailList:Ot},rateLimits:Te(),configSchema:{"auth.email.enabled":{type:"boolean",isPublic:true,default:true},"auth.email.from":{type:"string",isPublic:false,default:""},"auth.email.verification":{type:"boolean",isPublic:true,default:false},"auth.google.enabled":{type:"boolean",isPublic:true,default:false},"auth.google.clientId":{type:"string",isPublic:false,default:""},"auth.google.clientSecret":{type:"secret",isPublic:false,default:""},"auth.github.enabled":{type:"boolean",isPublic:true,default:false},"auth.github.clientId":{type:"string",isPublic:false,default:""},"auth.github.clientSecret":{type:"secret",isPublic:false,default:""}},routes:[{path:"/api/_internal/auth/verify-email",handlers:{get:Bt}}]});var no={withoutRemoteServer:{MONGODB_URI:"_system.mongodbUri",MONGODB_POOL_SIZE:"_system.mongodbPoolSize",MODELENCE_AUTH_GOOGLE_ENABLED:"_system.user.auth.google.enabled",MODELENCE_AUTH_GOOGLE_CLIENT_ID:"_system.user.auth.google.clientId",MODELENCE_AUTH_GOOGLE_CLIENT_SECRET:"_system.user.auth.google.clientSecret",MODELENCE_AUTH_GITHUB_ENABLED:"_system.user.auth.github.enabled",MODELENCE_AUTH_GITHUB_CLIENT_ID:"_system.user.auth.github.clientId",MODELENCE_AUTH_GITHUB_CLIENT_SECRET:"_system.user.auth.github.clientSecret",MODELENCE_AUTH_GITHUB_CLIENT_SCOPES:"_system.user.auth.github.scopes",MODELENCE_EMAIL_RESEND_API_KEY:"_system.email.resend.apiKey",MODELENCE_EMAIL_AWS_SES_REGION:"_system.email.awsSes.region",MODELENCE_EMAIL_AWS_SES_ACCESS_KEY_ID:"_system.email.awsSes.accessKeyId",MODELENCE_EMAIL_AWS_SES_SECRET_ACCESS_KEY:"_system.email.awsSes.secretAccessKey",MODELENCE_EMAIL_SMTP_HOST:"_system.email.smtp.host",MODELENCE_EMAIL_SMTP_PORT:"_system.email.smtp.port",MODELENCE_EMAIL_SMTP_USER:"_system.email.smtp.user",MODELENCE_EMAIL_SMTP_PASS:"_system.email.smtp.pass",MODELENCE_SITE_URL:"_system.site.url",MODELENCE_ENV_TYPE:"_system.env.type",MODELENCE_MULTI_INSTANCE:"_system.multiInstance",MODELENCE_ENV:"_system.env",GOOGLE_AUTH_ENABLED:"_system.user.auth.google.enabled",GOOGLE_AUTH_CLIENT_ID:"_system.user.auth.google.clientId",GOOGLE_AUTH_CLIENT_SECRET:"_system.user.auth.google.clientSecret"},withRemoteServer:{MODELENCE_SITE_URL:"_system.site.url"}};function io(e,t){if(t==="number"){let r=Number(e);if(isNaN(r))throw new Error(`Invalid number value for config: ${e}`);return r}if(t==="boolean"){if(e.toLowerCase()==="true")return true;if(e.toLowerCase()==="false")return false;throw new Error(`Invalid boolean value for config: ${e}`)}return e}function so(e,t){let r=[];for(let[o,n]of Object.entries(e)){let i=process.env[o],s=t[n];if(i){let a=s?.type??"string";r.push({key:n,type:a,value:io(i,a)});}}return r}function be(e,t="withoutRemoteServer"){let r=no[t];return so(r,e)}async function Qt({configSchema:e,cronJobsMetadata:t,stores:r,roles:o}){let n=process.env.MODELENCE_CONTAINER_ID;if(!n)throw new Error("Unable to connect to Modelence Cloud: MODELENCE_CONTAINER_ID is not set");try{let i=(r??[]).map(a=>({name:a.getName(),schema:a.getSerializedSchema(),collections:[a.getName()],version:2,indexes:a.getIndexes(),searchIndexes:a.getSearchIndexes(),indexCreationMode:a.getIndexCreationMode()})),s=await $e("/api/connect","POST",{hostname:ao.hostname(),containerId:n,dataModels:i,configSchema:e,cronJobsMetadata:t,roles:o});if(s.status==="error")throw new Error(s.error);return console.log("Successfully connected to Modelence Cloud"),s}catch(i){throw console.error("Unable to connect to Modelence Cloud:",i),i}}async function Yt(){return $e("/api/configs","GET")}async function Xt(){return await $e("/api/sync","POST",{containerId:process.env.MODELENCE_CONTAINER_ID})}async function $e(e,t,r){return B(e,t,r?JSON.stringify(r):void 0,r?{"Content-Type":"application/json"}:{})}async function B(e,t,r,o){let{MODELENCE_SERVICE_ENDPOINT:n,MODELENCE_SERVICE_TOKEN:i}=process.env;if(!n)throw new Error("Unable to connect to Modelence Cloud: MODELENCE_SERVICE_ENDPOINT is not set");let s=await fetch(`${n}${e}`,{method:t,headers:{Authorization:`Bearer ${i}`,...o},body:r});if(!s.ok){let a=await s.text();try{let c=JSON.parse(a);throw new Error(`Unable to connect to Modelence Cloud: HTTP status: ${s.status}, ${c?.error}`)}catch{throw new Error(`Unable to connect to Modelence Cloud: HTTP status: ${s.status}, ${a}`)}}if(!(s.status===204||s.headers?.get("content-length")==="0"))return await s.json()}var je=false,co=a$1.seconds(10);function Zt(){setInterval(async()=>{if(!je){je=true;try{await Xt();}catch(e){console.error("Error syncing status",e);}try{await lo();}catch(e){console.error("Error syncing config",e);}je=false;}},co);}function He(e){c$1(e),c$1(be(d$2(),"withRemoteServer"));}async function lo(){let{configs:e}=await Yt();He(e);}var j=new b$1("_modelenceLocks",{schema:{_id:c.string(),instanceId:c.string(),acquiredAt:c.date(),resource:c.string()},indexes:[{key:{resource:1},unique:true},{key:{resource:1,instanceId:1}},{key:{resource:1,acquiredAt:1}}],indexCreationMode:"blocking"});var H={},er=a$1.seconds(10),nr=randomBytes(32).toString("base64url"),mo=a$1.seconds(30),q=new Map,Ge=e=>e instanceof MongoError&&e.code===11e3,tr=(e,t)=>typeof e.keyPattern=="object"&&e.keyPattern!==null&&Object.prototype.hasOwnProperty.call(e.keyPattern,t),fo=async({error:e,resource:t})=>{if(tr(e,"resource"))return true;if(tr(e,"_id"))return false;let r=await j.findOne({resource:t});return !!r&&r._id!==t},rr=async({resource:e,staleThresholdDate:t,instanceId:r})=>{let o=await j.upsertOne({_id:e,$or:[{instanceId:r},{acquiredAt:{$lt:t}}]},{$set:{resource:e,instanceId:r,acquiredAt:new Date},$setOnInsert:{_id:e}});return o.upsertedCount>0||o.modifiedCount>0},ir=async({resource:e,instanceId:t,staleThresholdDate:r})=>{let o=r?{resource:e,_id:{$ne:e},$or:[{instanceId:t},{acquiredAt:{$lt:r}}]}:{resource:e,instanceId:t};return (await j.deleteOne(o)).deletedCount>0},go=e=>{let t=e,r=q.get(t);r&&(r.stopRequested=true,r.timer&&(clearTimeout(r.timer),r.timer=null),q.delete(t));},or=({resource:e,lockDuration:t,instanceId:r})=>{let o=Math.floor(t/3),n=e,i=q.get(n);if(i&&!i.stopRequested&&i.heartbeatInterval===o&&i.lockDuration===t)return;i&&(i.stopRequested=true,i.timer&&(clearTimeout(i.timer),i.timer=null),q.delete(n));let s={timer:null,stopRequested:false,lockDuration:t,heartbeatInterval:o},a=()=>{s.timer=setTimeout(()=>{G(e,{lockDuration:t,bypassCache:true,instanceId:r}).then(c=>{c||(s.stopRequested=true,i$1(`Lost lock while refreshing heartbeat: ${e}`,{source:"lock",resource:e,instanceId:r}));}).finally(()=>{if(s.stopRequested){q.delete(n);return}a();});},o);};q.set(n,s),a();};async function G(e,{lockDuration:t=mo,successfulLockCacheDuration:r=er,failedLockCacheDuration:o=er,heartbeat:n,bypassCache:i,instanceId:s=nr}={}){let a=Date.now();if(!i&&H[e]&&a<H[e].expiresAt)return H[e].value&&n&&or({resource:e,lockDuration:t,instanceId:s}),H[e].value;let c=new Date(a-t);i$1(`Attempting to acquire lock: ${e}`,{source:"lock",resource:e,instanceId:s});try{let l=await ho({resource:e,staleThresholdDate:c,instanceId:s});return H[e]={value:l,expiresAt:a+(l?r:o)},l?(n&&or({resource:e,lockDuration:t,instanceId:s}),i$1(`Lock acquired: ${e}`,{source:"lock",resource:e,instanceId:s})):i$1(`Failed to acquire lock (already held): ${e}`,{source:"lock",resource:e,instanceId:s}),l}catch{return H[e]={value:false,expiresAt:a+o},i$1(`Failed to acquire lock (already held): ${e}`,{source:"lock",resource:e,instanceId:s}),false}}var ho=async({resource:e,staleThresholdDate:t,instanceId:r})=>{try{return await rr({resource:e,staleThresholdDate:t,instanceId:r})}catch(o){if(Ge(o)&&await fo({error:o,resource:e})){if(!await ir({resource:e,staleThresholdDate:t,instanceId:r}))return false;try{return await rr({resource:e,staleThresholdDate:t,instanceId:r})}catch(i){if(Ge(i))return false;throw i}}if(Ge(o))return false;throw o}};async function ie(e,{instanceId:t=nr}={}){go(e);try{let r=await j.deleteOne({_id:e,instanceId:t});return r.deletedCount===0?await ir({resource:e,instanceId:t}):r.deletedCount>0}catch{return false}finally{delete H[e];}}var F={},Fe=null,Ve=new b$1("_modelenceCronJobs",{schema:{alias:c.string(),lastStartDate:c.date().optional()},indexes:[{key:{alias:1},unique:true,background:true}]});function ar(e,{description:t="",interval:r,timeout:o=Math.min(Math.max(r,a$1.minutes(1)),a$1.days(1)),handler:n}){if(F[e])throw new Error(`Duplicate cron job declaration: '${e}' already exists`);if(Fe)throw new Error(`Unable to add a cron job - cron jobs have already been initialized: [${e}]`);if(r<a$1.seconds(5))throw new Error(`Cron job interval should not be less than 5 second [${e}]`);if(o>a$1.days(1))throw new Error(`Cron job timeout should not be longer than 1 day [${e}]`);F[e]={alias:e,params:{description:t,interval:r,timeout:o},handler:n,state:{isRunning:false}};}async function cr(){if(Fe)throw new Error("Cron jobs already started");let e=Object.keys(F);if(e.length>0){let t={alias:{$in:e}},r=await Ve.fetch(t),o=Date.now();r.forEach(n=>{let i=F[n.alias];i&&(i.state.scheduledRunTs=n.lastStartDate?n.lastStartDate.getTime()+i.params.interval:o);}),Object.values(F).forEach(n=>{n.state.scheduledRunTs||(n.state.scheduledRunTs=o);}),Fe=setInterval(wo,a$1.seconds(1));}}async function wo(){let e=Date.now();await G("cron",{successfulLockCacheDuration:a$1.seconds(10),failedLockCacheDuration:a$1.seconds(30)})&&Object.values(F).forEach(async r=>{let{params:o,state:n}=r;if(n.isRunning){n.startTs&&n.startTs+o.timeout<e&&(n.isRunning=false);return}n.scheduledRunTs&&n.scheduledRunTs<=e&&await yo(r);});}async function yo(e){let{alias:t,params:r,handler:o,state:n}=e;n.isRunning=true,n.startTs=Date.now(),await Ve.updateOne({alias:t},{$set:{lastStartDate:new Date(n.startTs)}});let i=l$1("cron",`cron:${t}`);try{await o(),sr(n,r),i.end("success");}catch(s){sr(n,r);let a=s instanceof Error?s:new Error(String(s));m$1(a),i.end("error"),console.error(`Error in cron job '${t}':`,s);}}function sr(e,t){e.scheduledRunTs=e.startTs?e.startTs+t.interval:Date.now(),e.startTs=void 0,e.isRunning=false;}function lr(){return Object.values(F).map(({alias:e,params:t})=>({alias:e,description:t.description,interval:t.interval,timeout:t.timeout}))}var dr=new a("_system.cron",{stores:[Ve]});function ur(e){let t=[...new Set(e)],r=new Map;for(let i of t){let s=i.getChainRoot();r.set(s,s.getChainTail());}let o=[...new Set(r.values())],n=new Map;for(let[i,s]of r){let a=s.getName(),c=n.get(a);if(c!==void 0&&c!==i)throw new Error(`Store collision: multiple unrelated stores use collection name '${a}'. Use .extend() to create a single extension chain instead of independent stores.`);n.set(a,i);}return {storesToInit:t,effectiveStores:o}}var ze=new a("_system.lock",{stores:[j]});var se=new b$1("_modelenceMigrations",{schema:{version:c.number(),status:c.enum(["completed","failed"]),description:c.string().optional(),output:c.string().optional(),appliedAt:c.date()},indexes:[{key:{version:1},unique:true},{key:{version:1,status:1}}]});async function Be(e,{lockMode:t="acquire"}={}){if(e.length!==0){if(t==="acquire"&&!await G("migrations")){j$2("Another instance is running migrations. Skipping migration run.",{source:"migrations"});return}try{let r=e.map(({version:s})=>s),o=await se.fetch({version:{$in:r}}),n=new Set(o.map(({version:s})=>s)),i=e.filter(({version:s})=>!n.has(s));if(i.length===0)return;j$2(`Running migrations (${i.length})...`,{source:"migrations"});for(let{version:s,description:a,handler:c}of i){j$2(`Running migration v${s}: ${a}`,{source:"migrations"});try{let d=(await c()||"").toString().trim(),m=15*1024*1024,h=d.length>m?d.slice(0,m)+`
15
+ [Output truncated - exceeded size limit]`:d;await se.upsertOne({version:s},{$set:{version:s,status:"completed",description:a,output:h,appliedAt:new Date}}),j$2(`Migration v${s} complete`,{source:"migrations"});}catch(l){l instanceof Error&&(await se.upsertOne({version:s},{$set:{version:s,status:"failed",description:a,output:l.message||"",appliedAt:new Date}}),j$2(`Migration v${s} is failed: ${l.message}`,{source:"migrations"}));}}}finally{t==="acquire"&&await ie("migrations");}}}function pr(e){setTimeout(()=>{Be(e).catch(t=>{console.error("Error running migrations:",t);});},0);}var mr=new a("_system.migration",{stores:[se]});var fr=new a("_system.rateLimit",{stores:[ne]});async function gr({filePath:e,contentType:t,visibility:r}){return await B("/api/files/upload","POST",JSON.stringify({filePath:e,contentType:t,visibility:r}),{"Content-Type":"application/json"})}async function hr(e){await B("/api/files/delete","POST",JSON.stringify({filePath:e}),{"Content-Type":"application/json"});}async function wr(e){return await B("/api/files/download","POST",JSON.stringify({filePath:e}),{"Content-Type":"application/json"})}async function yr(e){return await B("/api/files/url","POST",JSON.stringify({filePath:e}),{"Content-Type":"application/json"})}var br=new a("_system.files",{queries:{async downloadFile({filePath:e}){return wr(e)},async getFileUrl({filePath:e}){return yr(e)}},mutations:{async getUploadUrl({filePath:e,contentType:t,visibility:r}){return gr({filePath:e,contentType:t,visibility:r})},async deleteFile({filePath:e}){return hr(e)}}});var ae="./.modelence/build/client".replace(/\\/g,"/"),ko="./.modelence/build/ssr".replace(/\\/g,"/"),vr="/index.tsx",Sr=/<div id="root">\s*<\/div>/,Ao="</head>",Je=class{constructor(){this.ssrEnabled=false;this.ssrTransportInstalled=false;this.prodEntryLoaded=false;}enableSsr(){this.ssrEnabled=true;}async init({httpServer:t}){if(this.config=await Lo(this.isDev()?t:void 0,{ssr:this.ssrEnabled}),this.isDev()&&(console.log("Starting Vite dev server..."),this.viteServer=await createServer(this.config)),this.ssrEnabled&&!this.ssrTransportInstalled){let{installSsrCallMethodTransport:r}=await import('./transport-BOPYDAVH.js');r(),this.ssrTransportInstalled=true;}}middlewares(){if(this.isDev())return this.viteServer?.middlewares??[];let t=[U.static(ae)];return this.config?.publicDir&&t.push(U.static(this.config.publicDir)),t}async handler(t,r){if(this.ssrEnabled&&xo(t)){try{await this.handleSsr(t,r);}catch(o){if(this.isDev()&&this.viteServer&&o instanceof Error&&this.viteServer.ssrFixStacktrace(o),console.error("SSR render error:",{url:t.originalUrl,method:t.method,userAgent:t.get("user-agent"),error:o}),r.headersSent){r.end();return}this.serveStaticShell(r);}return}if(this.ssrEnabled){r.status(404).end();return}this.serveStaticShell(r);}async handleSsr(t,r){let o=await this.getTemplate(t.originalUrl);await this.evaluateUserSsrEntry();let[{renderSsrTreeStream:n},{_getSsrSnapshot:i},{getCallContext:s},a]=await Promise.all([import('./render-57TPXKHI.js'),import('./renderApp-3FQ6KUQ2.js'),import('./server-JB4DTGBT.js'),import('./collectCss-4V7I3QV3.js')]),c=await s(t,r),l=i();if(!l)throw new Error("Modelence SSR is enabled but no SSR snapshot was captured. Make sure 'src/client/index.tsx' calls renderApp(...) from 'modelence/client'.");let d=this.collectCssAssets(a);_o(r,a.buildEarlyHintsLink(d));let{sessionState:m,pipe:h,getQueryState:C}=await n({callContext:c,loadingElement:l.loadingElement,routesElement:l.routesElement,router:l.router,location:t.originalUrl});if(!Sr.test(o))throw new Error('SSR template is missing the expected `<div id="root"></div>` placeholder.');let[E,A]=Ro(o),Q=Oo(E,a.renderStylesheetLinks(d));r.setHeader("Content-Type","text/html; charset=utf-8"),r.setHeader("Cache-Control","no-store"),r.status(200),r.write(Q),r.write(`<script id="__MODELENCE_STATE__" type="application/json">${Cr(m)}</script>`),r.write('<div id="root">'),await h(r),r.write("</div>"),r.write(`<script id="__MODELENCE_QUERY_STATE__" type="application/json">${Cr(C())}</script>`),r.end(A);}collectCssAssets(t){return this.isDev()?this.viteServer?t.collectDevCssAssets(this.viteServer,vr):{hrefs:[],source:"dev"}:(this.prodCssAssetsCache||(this.prodCssAssetsCache=t.loadProdCssAssets(ae)),this.prodCssAssetsCache)}async getTemplate(t){if(this.isDev()){let o=J.resolve(process.cwd(),"src/client/index.html"),n=qe.readFileSync(o,"utf-8");return this.viteServer&&(n=await this.viteServer.transformIndexHtml(t,n)),n}let r=J.resolve(process.cwd(),ae,"index.html");return qe.readFileSync(r,"utf-8")}async evaluateUserSsrEntry(){if(this.isDev()){if(!this.viteServer)throw new Error("Vite dev server not initialized");await this.viteServer.ssrLoadModule(vr);return}this.prodEntryLoaded||(await import(J.resolve(process.cwd(),ko,"index.mjs")),this.prodEntryLoaded=true);}serveStaticShell(t){if(this.isDev())try{t.setHeader("Cache-Control","no-store"),t.sendFile("index.html",{root:"./src/client"});}catch(r){console.error("Error serving index.html:",r),t.status(500).send("Internal Server Error");}else t.sendFile("index.html",{root:ae});}isDev(){return process.env.NODE_ENV!=="production"}};function xo(e){if(e.method!=="GET"&&e.method!=="HEAD"||!(e.get("accept")??"").includes("text/html"))return false;let r=(e.path??e.url??"").split("?")[0];if(r.startsWith("/api/"))return false;let o=r.split("/").pop()??"",n=o.lastIndexOf(".");if(n>0){let i=o.slice(n).toLowerCase();if(i!==".html"&&i!==".htm")return false}return true}function Cr(e){return e.replace(/[<>&\u2028\u2029]/g,t=>`\\u${t.charCodeAt(0).toString(16).padStart(4,"0")}`)}function Ro(e){let t=e.match(Sr);if(!t||t.index===void 0)throw new Error('SSR template is missing the expected `<div id="root"></div>` placeholder.');let r=e.slice(0,t.index),o=e.slice(t.index+t[0].length);return [r,o]}function Oo(e,t){if(!t)return e;let r=e.lastIndexOf(Ao);return r===-1?t+e:e.slice(0,r)+t+e.slice(r)}function _o(e,t){if(t.length===0)return;let r=e;if(typeof r.writeEarlyHints=="function")try{r.writeEarlyHints({link:t});}catch(o){process.env.NODE_ENV!=="production"&&console.warn("Modelence SSR: writeEarlyHints failed",o);}}async function Po(){let e=process.cwd();try{return (await loadConfigFromFile({command:"serve",mode:"development"},void 0,e))?.config||{}}catch(t){return console.warn("Could not load vite config:",t),{}}}function Mo(e,t){let r=mergeConfig(e,t);if(r.plugins&&Array.isArray(r.plugins)){let o=new Set;r.plugins=r.plugins.flat().filter(n=>{if(!n||typeof n!="object"||Array.isArray(n))return true;let i=n.name;return !i||o.has(i)?false:(o.add(i),true)}).reverse(),r.plugins.reverse();}return r}async function Lo(e,t={}){let r=process.cwd(),o=await Po(),n=[".eslintrc.js",".eslintrc.json",".eslintrc","eslint.config.js",".eslintrc.yml",".eslintrc.yaml"].find(a=>qe.existsSync(J.join(r,a))),i=[So(),Uo()];if(n){let a=(await import('vite-plugin-eslint')).default;i.push(a({failOnError:false,include:["src/**/*.js","src/**/*.jsx","src/**/*.ts","src/**/*.tsx"],cwd:r,overrideConfigFile:J.resolve(r,n)}));}let s=defineConfig({plugins:i,build:{outDir:ae,emptyOutDir:true},server:{middlewareMode:true,hmr:e?{server:e}:void 0},appType:t.ssr?"custom":"spa",root:"./src/client",resolve:{alias:{"@":J.resolve(r,"src").replace(/\\/g,"/")}}});return Mo(s,o)}function Uo(){return {name:"modelence-asset-handler",async transform(e,t){if(/\.(png|jpe?g|gif|svg|mpwebm|ogg|mp3|wav|flac|aac)$/.test(t))return process.env.NODE_ENV==="development",e}}}var Ee=new Je;var We=Object.freeze({});function kr(e){We=Object.freeze(Object.assign({},We,e));}function Ar(){return We}var Ke=Object.freeze({});function xr(e){Ke=Object.freeze(Object.assign({},Ke,e));}function ve(){return Ke}async function Do({modules:e=[],roles:t={},defaultRoles:r={},server:o$1=Ee,migrations:n=[],email:i={},auth:s={},security:a={},websocket:c={},ssr:l=false}){l&&o$1===Ee&&Ee.enableSsr(),Rr.config(),Rr.config({path:".modelence.env"});let d=!!process.env.MODELENCE_SERVICE_ENDPOINT;Wo().then(()=>{}).catch(()=>{});let m=[De,j$1,dr,mr,fr,te,ze,br],h=[...m,...e];f$1(),jo(m),$o(e),o(t,r);let C=Bo(h);e$1(C);let E=Ho(h),A=Go(h);qo(h),De.rateLimits=Te(s.rateLimits);let Q=Fo(h);Vt(Q);let{storesToInit:Y,effectiveStores:I}=ur(E);if(d){let{configs:X,environmentId:Ur,appAlias:Ir,environmentAlias:Nr,telemetry:Tr}=await Qt({configSchema:C,cronJobsMetadata:lr(),stores:I,roles:t});He(X),g$1({environmentId:Ur,appAlias:Ir,environmentAlias:Nr,telemetry:Tr});}else c$1(be(C));if(Nt(i),Tt(s),kr(a),xr({...c,provider:c.provider||xt}),T()){await kt();let X=[...new Set([...Y,...I])];Jo(X),await zo(I,n);}else pr(n);d&&(await h$1(),Zt()),cr().catch(console.error),await Or(o$1,{combinedModules:h,channels:A});}function $o(e){for(let t$1 of e){for(let[r,o]of Object.entries(t$1.queries))t(`${t$1.name}.${r}`,o);for(let[r,o]of Object.entries(t$1.mutations))u(`${t$1.name}.${r}`,o);}}function jo(e){for(let t of e){for(let[r,o]of Object.entries(t.queries))v(`${t.name}.${r}`,o);for(let[r,o]of Object.entries(t.mutations))w$1(`${t.name}.${r}`,o);}}function Ho(e){return e.flatMap(t=>t.stores)}function Go(e){return e.flatMap(t=>t.channels)}function Fo(e){return e.flatMap(t=>t.rateLimits)}function Vo(e,t){console.warn(`Failed to create indexes for store '${e}'. Continuing startup.`,t);}var Qe="migrations";async function zo(e,t){if(!await G(Qe,{lockDuration:a$1.seconds(30),heartbeat:true}))return;let o,n;try{o=e.filter(a=>a.getIndexCreationMode()==="blocking"),n=e.filter(a=>a.getIndexCreationMode()==="background");for(let a of o)await Ye(a,"full");for(let a of n)await Ye(a,"drop-only");}catch(a){throw await ie(Qe),a}let i=(async()=>{for(let a of n)await Ye(a,"create-only");})(),s=Be(t,{lockMode:"skip"});Promise.allSettled([i,s]).then(([a,c])=>{a.status==="rejected"&&console.error("Error creating background indexes:",a.reason),c.status==="rejected"&&console.error("Error running migrations:",c.reason);}).finally(async()=>{await ie(Qe);});}async function Ye(e,t="full"){let r=e.getName();try{await e.createIndexes(t);}catch(o){Vo(r,o);}}function Bo(e){let t={};for(let r of e)for(let[o,n]of Object.entries(r.configSchema)){let i=`${r.name}.${o}`;if(i in t)throw new Error(`Duplicate config schema key: ${i} (${r.name})`);t[i]=n;}return t}function qo(e){for(let t of e)for(let[r,o]of Object.entries(t.cronJobs))ar(`${t.name}.${r}`,o);}function Jo(e){let t=fe();if(!t)throw new Error("Failed to initialize stores: MongoDB client not initialized");for(let r of e)r.init(t);}async function Wo(){if(process.env.MODELENCE_TRACKING_ENABLED!=="false"){let t=process.env.MODELENCE_SERVICE_ENDPOINT??"https://cloud.modelence.com",r=process.env.MODELENCE_ENVIRONMENT_ID,o=await Ko(),n=await import('./package-XQQF6NGT.js');await fetch(`${t}/api/track/app-start`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({projectName:o.name,version:n.default.version,localHostname:ao.hostname(),environmentId:r})});}}async function Ko(){try{let e=J.join(process.cwd(),"package.json"),t=await Io.readFile(e,"utf-8");return {name:JSON.parse(t).name||"unknown"}}catch{return {name:"unknown"}}}async function _r(e){await m.deleteMany({userId:e}),await n.deleteMany({userId:e});}async function Yo(e){await _r(e),await k$1.updateOne(e,{$set:{status:"disabled",disabledAt:new Date}});}async function Xo(e){await _r(e),await k$1.updateOne({_id:e},{$set:{handle:`deleted-${e}-${randomUUID()}`,status:"deleted",deletedAt:new Date,authMethods:{},emails:[]}});}var Xe=class{constructor(t,r){this.category=t,this.canAccessChannel=r||null;}broadcast(t,r){let o=ve().provider;if(!o){k$2("Websockets provider should be added to startApp",{});return}o.broadcast({category:this.category,id:t,data:r});}};function Zo(e){if(!y().provider)throw new Error("Email provider is not configured, see https://docs.modelence.com/email for more details.");return y().provider?.sendEmail(e)}function w(e,t,r){let o=b(),n=e.status(t);if(o.errorComponent)try{let i=o.errorComponent({error:r,statusCode:t});if(i)return n.send(i)}catch(i){console.error("Unhandled error in authConfig.errorComponent:",i);}return n.json({error:r})}async function Ze(e,t){let{authToken:r}=await g(t);h(e,r),e.status(302),e.redirect("/");}async function tn(e,t,r,o,n){let i=b();try{if(r.status==="disabled"||r.status==="deleted"){w(e,400,"User account is not active.");return}let s={};r.firstName===void 0&&t.firstName&&(s.firstName=t.firstName),r.lastName===void 0&&t.lastName&&(s.lastName=t.lastName),r.avatarUrl===void 0&&t.avatarUrl&&(s.avatarUrl=t.avatarUrl);let a=r;Object.keys(s).length>0&&(await k$1.updateOne({_id:r._id},{$set:s}),a={...r,...s}),await Ze(e,r._id),i.onAfterLogin?.({provider:t.providerName,user:a,session:o,connectionInfo:n}),i.login?.onSuccess?.(a);}catch(s){throw s instanceof Error&&(i.login?.onError?.(s),i.onLoginError?.({provider:t.providerName,error:s,session:o,connectionInfo:n})),s}}async function rn(e,t,r,o,n){let i=b();if((i.oauthAccountLinking??"manual")==="auto"&&t.emailVerified){if(r.status==="disabled"||r.status==="deleted"){w(e,400,"User account is not active.");return}if(!r.emails?.find(c=>c.address.toLowerCase()===t.email.toLowerCase())?.verified){w(e,400,"User with this email already exists. Please log in instead.");return}try{let c={...r.firstName===void 0&&t.firstName&&{firstName:t.firstName},...r.lastName===void 0&&t.lastName&&{lastName:t.lastName},...r.avatarUrl===void 0&&t.avatarUrl&&{avatarUrl:t.avatarUrl}};if(!((await k$1.updateOne({_id:r._id,status:{$nin:["deleted","disabled"]},$or:[{[`authMethods.${t.providerName}.id`]:{$exists:!1}},{[`authMethods.${t.providerName}.id`]:t.id}]},{$set:{[`authMethods.${t.providerName}.id`]:t.id,...c}})).matchedCount>0)){w(e,400,"User with this email already exists. Please log in instead.");return}await Ze(e,r._id);let m={...r,...c,authMethods:{...r.authMethods,[t.providerName]:{id:t.id}}};i.onAfterLogin?.({provider:t.providerName,user:m,session:o,connectionInfo:n}),i.login?.onSuccess?.(m);return}catch(c){throw c instanceof Error&&(i.login?.onError?.(c),i.onLoginError?.({provider:t.providerName,error:c,session:o,connectionInfo:n})),c}}w(e,400,"User with this email already exists. Please log in instead.");}async function on(e,t,r,o){let n=b();try{let i;if(n.generateHandle){let l=await n.generateHandle({email:t.email,firstName:t.firstName,lastName:t.lastName});i=await $(l,t.email,{throwOnConflict:!1});}else i=await $(void 0,t.email);let s={handle:i,status:"active",emails:[{address:t.email,verified:t.emailVerified}],createdAt:new Date,authMethods:{[t.providerName]:{id:t.id}},...t.firstName!==void 0&&{firstName:t.firstName},...t.lastName!==void 0&&{lastName:t.lastName},...t.avatarUrl!==void 0&&{avatarUrl:t.avatarUrl}},a=await k$1.insertOne(s);await Ze(e,a.insertedId);let c=await k$1.findOne({_id:a.insertedId},{readPreference:"primary"});c&&(n.onAfterSignup?.({provider:t.providerName,user:c,session:r,connectionInfo:o}),n.signup?.onSuccess?.(c));}catch(i){throw i instanceof Error&&(n.onSignupError?.({provider:t.providerName,error:i,session:r,connectionInfo:o}),n.signup?.onError?.(i)),i}}function K(e){return `${a$2("_system.site.url")}/api/_internal/auth/${e}/callback`}async function Ce(e,t,r){let o=await k$1.findOne({[`authMethods.${r.providerName}.id`]:r.id}),{session:n,connectionInfo:i}=await ce(e);if(o)return tn(t,r,o,n,i);if(!r.email){w(t,400,`Email address is required for ${r.providerName} authentication.`);return}let s;try{s=await k$1.findOne({"emails.address":r.email,status:{$ne:"deleted"}},{collation:{locale:"en",strength:2}});}catch(a){if(a instanceof Error){let c=b();c.onSignupError?.({provider:r.providerName,error:a,session:n,connectionInfo:i}),c.signup?.onError?.(a);}throw a}return s?rn(t,r,s,n,i):on(t,r,n,i)}function S(e){e.cookie("oauthLinkToken","",{httpOnly:true,maxAge:0,path:"/api/_internal/auth/",sameSite:"lax",secure:process.env.NODE_ENV==="production"});}function W(e){if(e)try{e();}catch(t){console.error("Error executing OAuth hook:",t);}}function Se(e,t,r){let o=e.query.state,n=e.cookies[r],[i,s]=(n||"").split(":");return !o||!n||o!==i?(w(t,400,"Invalid OAuth state - possible CSRF attack"),null):(t.clearCookie(r),s||"login")}async function ke(e,t,r){let o=b(),{session:n,connectionInfo:i}=await ce(e);if(!n?.userId){S(t),w(t,401,"You must be signed in to link a provider.");return}let s=n.userId;try{let a=`authMethods.${r.providerName}.id`;if((await k$1.updateOne({_id:s,status:{$nin:["deleted","disabled"]},$or:[{[a]:{$exists:!1}},{[a]:r.id}]},{$set:{[a]:r.id}})).matchedCount===0){let d=await k$1.findOne({_id:s});if(!d||d.status==="deleted"||d.status==="disabled"){W(()=>o.onOAuthLinkError?.({provider:r.providerName,error:new Error("User account not found or not active"),session:n,connectionInfo:i})),S(t),w(t,400,"User account is not active.");return}let m=d?.authMethods?.[r.providerName]?.id;if(m&&m!==r.id){W(()=>o.onOAuthLinkError?.({provider:r.providerName,error:new Error(`User already has a different ${r.providerName} account linked`),session:n,connectionInfo:i})),S(t),w(t,400,`You have already linked a different ${r.providerName} account.`);return}W(()=>o.onOAuthLinkError?.({provider:r.providerName,error:new Error(`Unexpected OAuth linking state for ${r.providerName}`),session:n,connectionInfo:i})),S(t),w(t,400,`Unable to link ${r.providerName} account.`);return}let l=await k$1.findOne({_id:s},{readPreference:"primary"});l&&W(()=>o.onAfterOAuthLink?.({provider:r.providerName,user:l,session:n,connectionInfo:i})),S(t),t.status(302).redirect("/");}catch(a){if(a instanceof MongoServerError&&a.code===11e3){W(()=>o.onOAuthLinkError?.({provider:r.providerName,error:a,session:n,connectionInfo:i})),S(t),w(t,400,`This ${r.providerName} account is already linked to a different user.`);return}if(a instanceof Error&&W(()=>o.onOAuthLinkError?.({provider:r.providerName,error:a,session:n,connectionInfo:i})),S(t),!t.headersSent)throw a}}function Ae(e){return !e||typeof e!="string"?null:e}async function an(e,t,r,o){let n=await fetch("https://oauth2.googleapis.com/token",{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({code:e,client_id:t,client_secret:r,redirect_uri:o,grant_type:"authorization_code"})});if(!n.ok)throw new Error(`Failed to exchange code for token: ${n.statusText}`);return n.json()}async function cn(e){let t=await fetch("https://www.googleapis.com/oauth2/v2/userinfo",{headers:{Authorization:`Bearer ${e}`}});if(!t.ok)throw new Error(`Failed to fetch user info: ${t.statusText}`);return t.json()}async function ln(e,t){let r=Ae(e.query.code);if(!r){w(t,400,"Missing authorization code");return}let o=Se(e,t,"authStateGoogle");if(!o)return;let n=String(a$2("_system.user.auth.google.clientId")),i=String(a$2("_system.user.auth.google.clientSecret")),s=K("google");try{let a=await an(r,n,i,s),c=await cn(a.access_token),l={id:c.id,email:c.email,emailVerified:c.verified_email,providerName:"google",firstName:c.given_name||void 0,lastName:c.family_name||void 0,avatarUrl:c.picture||void 0};o==="link"?await ke(e,t,l):await Ce(e,t,l);}catch(a){console.error("Google OAuth error:",a),o==="link"&&S(t),w(t,500,"Authentication failed");}}function dn(){let e=Router(),t=(r,o,n)=>{let i=!!a$2("_system.user.auth.google.enabled"),s=String(a$2("_system.user.auth.google.clientId")),a=String(a$2("_system.user.auth.google.clientSecret"));if(!i||!s||!a){w(o,503,"Google authentication is not configured");return}n();};return e.get("/api/_internal/auth/google",t,(r,o)=>{let n=String(a$2("_system.user.auth.google.clientId")),i=K("google"),s=randomBytes(32).toString("hex"),a=r.query.mode==="link"?"link":"login";o.cookie("authStateGoogle",`${s}:${a}`,{httpOnly:true,secure:process.env.NODE_ENV==="production",sameSite:"lax",maxAge:a$1.minutes(10)});let c=new URL("https://accounts.google.com/o/oauth2/v2/auth");c.searchParams.append("client_id",n),c.searchParams.append("redirect_uri",i),c.searchParams.append("response_type","code"),c.searchParams.append("scope","profile email"),c.searchParams.append("access_type","online"),c.searchParams.append("state",s),o.redirect(c.toString());}),e.get("/api/_internal/auth/google/callback",t,ln),e}var Pr=dn;async function mn(e,t,r,o){let n=await fetch("https://github.com/login/oauth/access_token",{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({client_id:t,client_secret:r,code:e,redirect_uri:o})});if(!n.ok)throw new Error(`Failed to exchange code for token: ${n.statusText}`);return n.json()}async function fn(e){let t=await fetch("https://api.github.com/user",{headers:{Authorization:`Bearer ${e}`,Accept:"application/vnd.github.v3+json"}});if(!t.ok)throw new Error(`Failed to fetch user info: ${t.statusText}`);return t.json()}async function gn(e){let t=await fetch("https://api.github.com/user/emails",{headers:{Authorization:`Bearer ${e}`,Accept:"application/vnd.github.v3+json"}});if(!t.ok)throw new Error(`Failed to fetch user emails: ${t.statusText}`);return t.json()}async function hn(e,t){return e.email?e.email:(await gn(t)).find(o=>o.primary&&o.verified)?.email??null}async function wn(e,t){let r=Ae(e.query.code);if(!r){w(t,400,"Missing authorization code");return}let o=Se(e,t,"authStateGithub");if(!o)return;let n=String(a$2("_system.user.auth.github.clientId")),i=String(a$2("_system.user.auth.github.clientSecret")),s=K("github");try{let a=await mn(r,n,i,s),c=await fn(a.access_token),l=await hn(c,a.access_token);if(!l){o==="link"&&S(t),w(t,400,"Unable to retrieve a primary verified email from GitHub. Please ensure your GitHub account has a verified email set as primary.");return}let d=c.name?c.name.trim().split(/\s+/):[],m=d[0]||void 0,h=d.length>1?d.slice(1).join(" "):void 0,C={id:String(c.id),email:l,emailVerified:!0,providerName:"github",firstName:m,lastName:h,avatarUrl:c.avatar_url||void 0};o==="link"?await ke(e,t,C):await Ce(e,t,C);}catch(a){console.error("GitHub OAuth error:",a),o==="link"&&S(t),w(t,500,"Authentication failed");}}function yn(){let e=Router(),t=(r,o,n)=>{let i=!!a$2("_system.user.auth.github.enabled"),s=String(a$2("_system.user.auth.github.clientId")),a=String(a$2("_system.user.auth.github.clientSecret"));if(!i||!s||!a){w(o,503,"GitHub authentication is not configured");return}n();};return e.get("/api/_internal/auth/github",t,(r,o)=>{let n=String(a$2("_system.user.auth.github.clientId")),i=K("github"),s=a$2("_system.user.auth.github.scopes"),a=s?String(s).split(",").map(m=>m.trim()).join(" "):"user:email",c=randomBytes(32).toString("hex"),l=r.query.mode==="link"?"link":"login";o.cookie("authStateGithub",`${c}:${l}`,{httpOnly:true,secure:process.env.NODE_ENV==="production",sameSite:"lax",maxAge:a$1.minutes(10)});let d=new URL("https://github.com/login/oauth/authorize");d.searchParams.append("client_id",n),d.searchParams.append("redirect_uri",i),d.searchParams.append("scope",a),d.searchParams.append("state",c),o.redirect(d.toString());}),e.get("/api/_internal/auth/github/callback",t,wn),e}var Mr=yn;function Lr(e,t,r){return async(o,n,i)=>{let s=o.headers["x-modelence-auth-token"],a={session:null,user:null};if(typeof s=="string"&&T())try{let{session:l,user:d}=await q$1(s);a={session:l,user:d};}catch{}let c=l$1("route",`route:${e.toLowerCase()}:${t}`,{method:e,path:t,query:o.query,body:o.body,params:o.params});try{let l=await r({query:o.query,body:o.body,params:o.params,headers:o.headers,cookies:o.cookies,rawBody:Buffer.isBuffer(o.body)?o.body:void 0,req:o,res:n,next:i},a);c.end(),l&&(n.status(l.status||200),l.redirect&&n.redirect(l.redirect),l.headers&&Object.entries(l.headers).forEach(([d,m])=>{n.setHeader(d,m);}),n.send(l.data));}catch(l){c.end("error"),l instanceof a$4?n.status(l.status).send(l.message):(console.error(`Error in route handler: ${o.path}`),console.error(l),n.status(500).send(String(l)));}}}function vn(e){let t=[];if(!e)return t.push(U.json({limit:"16mb"})),t.push(U.urlencoded({extended:true,limit:"16mb"})),t;if(e.json!==false){let r=typeof e.json=="object"?e.json:{limit:"16mb"};t.push(U.json(r));}if(e.urlencoded!==false){let r=typeof e.urlencoded=="object"?e.urlencoded:{extended:true,limit:"16mb"};t.push(U.urlencoded(r));}if(e.raw){let r=typeof e.raw=="object"?e.raw:{},o={limit:r.limit||"16mb",type:r.type||"*/*"};t.push(U.raw(o));}return t}function Cn(e,t){for(let r of t)for(let o of r.routes){let{path:n,handlers:i,body:s}=o,a=vn(s);Object.entries(i).forEach(([c,l])=>{e[c](n,...a,Lr(c,n,l));});}}async function Or(e,{combinedModules:t,channels:r}){let o=U();o.use(bn()),o.use(An()),Cn(o,t),o.use(U.json({limit:"16mb"})),o.use(U.urlencoded({extended:true,limit:"16mb"})),o.use(Pr()),o.use(Mr()),o.post("/api/_internal/auth/set-link-cookie",async(a,c)=>{let{session:l}=await ce(a);if(!l?.userId){c.status(401).json({error:"Not authenticated"});return}c.cookie("oauthLinkToken",l.authToken,{httpOnly:true,secure:process.env.NODE_ENV==="production",sameSite:"lax",path:"/api/_internal/auth/",maxAge:10*60*1e3}),c.json({ok:true});}),o.post("/api/_internal/method/:methodName(*)",async(a,c)=>{let{methodName:l}=a.params,d=await ce(a,c);try{let m=a$3(await x(l,a.body.args,d));c.json({data:m,typeMap:b$2(m)});}catch(m){Sn(c,l,m);}});let n=En.createServer(o);await e.init({httpServer:n}),e.middlewares&&o.use(e.middlewares()),o.all("*",(a,c,l)=>{Promise.resolve(e.handler(a,c)).catch(l);}),process.on("unhandledRejection",(a,c)=>{console.error("Unhandled Promise Rejection:"),console.error(a instanceof Error?a.stack:a),console.error("Promise:",c);}),process.on("uncaughtException",a=>{console.error("Uncaught Exception:"),console.error(a.stack),console.trace("Full application stack:");});let i=ve()?.provider;i&&i.init({httpServer:n,channels:r});let s=process.env.MODELENCE_PORT||process.env.PORT||3e3;n.listen(s,()=>{j$2("Application started",{source:"app"});let a=a$2("_system.site.url")||`http://localhost:${s}`;console.log(`
16
+ Application started on ${a}
17
+ `);});}async function ce(e,t=null){let r=(e.path??e.url??"").split("?")[0],o=r.startsWith("/api/_internal/auth/")&&r.endsWith("/callback"),n=e.body??{},i=L.string().nullish().transform(l=>l??null).parse(e.cookies.authToken||(o?e.cookies.oauthLinkToken:null)||n.authToken),s=L.object({screenWidth:L.number(),screenHeight:L.number(),windowWidth:L.number(),windowHeight:L.number(),pixelRatio:L.number(),orientation:L.string().nullable()}).nullish().parse(n.clientInfo)??{screenWidth:0,screenHeight:0,windowWidth:0,windowHeight:0,pixelRatio:1,orientation:null},a={ip:xn(e),userAgent:e.get("user-agent"),acceptLanguage:e.get("accept-language"),referrer:e.get("referrer"),baseUrl:e.protocol+"://"+e.get("host")};if(!!T()){let{session:l,user:d,roles:m}=await q$1(i);return {clientInfo:s,connectionInfo:a,session:l,user:d,roles:m,res:t}}return {clientInfo:s,connectionInfo:a,session:null,user:null,roles:p(),res:t}}function Sn(e,t,r){if(r instanceof a$4){r.status>=500&&r.status<600&&console.error(`Error calling ${t}:`,r),e.status(r.status).send(r.message);return}if(r instanceof Error&&r?.constructor?.name==="ZodError"&&"errors"in r){let o="";try{o=kn(r);}catch(n){console.error(`Error parsing Zod error in ${t}:`,n),o="Validation failed";}e.status(400).send(o);return}console.error(`Error calling ${t}:`,r),e.status(500).send(r instanceof Error?r.message:String(r));}function kn(e){let t=e.flatten(),r=Object.entries(t.fieldErrors).map(([i,s])=>`${i}: ${(s??[]).join(", ")}`),o=t.formErrors;return [...r,...o].filter(Boolean).join("; ")}function An(){let{frameAncestors:e}=Ar(),t=e&&e.length>0,r=t?["'self'",...e].join(" "):"'self'";return (o,n,i)=>{n.setHeader("Content-Security-Policy",`frame-ancestors ${r}`),t||n.setHeader("X-Frame-Options","SAMEORIGIN"),i();}}function xn(e){let t=e.headers["x-forwarded-for"];if(t)return (Array.isArray(t)?t[0]:t.split(",")[0]).trim();let r=e.ip||e.socket?.remoteAddress;if(r)return r.startsWith("::ffff:")?r.substring(7):r}
18
+ export{k as a,gr as b,hr as c,wr as d,yr as e,Or as f,ce as g,Do as h,Yo as i,Xo as j,Xe as k,Zo as l};//# sourceMappingURL=chunk-S2E4OO6G.js.map
19
+ //# sourceMappingURL=chunk-S2E4OO6G.js.map