nucleus-core-ts 0.8.61 → 0.8.63
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/index.js
CHANGED
|
@@ -57,10 +57,10 @@ var I1=Object.create;var{getPrototypeOf:Z1,defineProperty:Zc,getOwnPropertyNames
|
|
|
57
57
|
</div>
|
|
58
58
|
</body>
|
|
59
59
|
</html>
|
|
60
|
-
`}getActiveAlerts(){return Array.from(this.state.activeAlerts.values())}acknowledgeAlert(n){for(let[r,t]of this.state.activeAlerts)if(t.id===n)return t.acknowledged=!0,!0;return!1}clearAlert(n){this.state.activeAlerts.delete(n)}}class Rl{config;requestCount=0;responseTimes=[];errorCount=0;rateLimitBlocks=0;byEndpoint={};byMethod={};byStatus={};byErrorType={};lastCollectTime=Date.now();constructor(n){this.config=n}recordRequest(n){if(!this.config?.enabled)return;if(this.requestCount++,this.config.metrics?.responseTime!==!1){if(this.responseTimes.push(n.responseTimeMs),this.responseTimes.length>1e4)this.responseTimes=this.responseTimes.slice(-5000)}if(this.config.metrics?.requests!==!1)this.byEndpoint[n.endpoint]=(this.byEndpoint[n.endpoint]||0)+1,this.byMethod[n.method]=(this.byMethod[n.method]||0)+1,this.byStatus[String(n.status)]=(this.byStatus[String(n.status)]||0)+1;if(this.config.metrics?.errors!==!1&&n.isError){if(this.errorCount++,n.errorType)this.byErrorType[n.errorType]=(this.byErrorType[n.errorType]||0)+1}}recordRateLimitBlock(){if(!this.config?.enabled||this.config.metrics?.rateLimits===!1)return;this.rateLimitBlocks++}collect(){if(!this.config?.enabled)return null;let r=(Date.now()-this.lastCollectTime)/1000/60,t=r>0?Math.round(this.requestCount/r):0,o=r>0?Math.round(this.rateLimitBlocks/r):0,c=[...this.responseTimes].sort((i,s)=>i-s),a=c.length;return{requests:{total:this.requestCount,perMinute:t,byEndpoint:{...this.byEndpoint},byMethod:{...this.byMethod},byStatus:{...this.byStatus}},responseTime:{avg:a>0?Math.round(c.reduce((i,s)=>i+s,0)/a*100)/100:0,min:a>0?c[0]??0:0,max:a>0?c[a-1]??0:0,p50:a>0?c[Math.floor(a*0.5)]??0:0,p95:a>0?c[Math.floor(a*0.95)]??0:0,p99:a>0?c[Math.floor(a*0.99)]??0:0},errors:{total:this.errorCount,rate:this.requestCount>0?Math.round(this.errorCount/this.requestCount*100*100)/100:0,byType:{...this.byErrorType}},rateLimits:{blocked:this.rateLimitBlocks,blockedPerMinute:o}}}reset(){this.requestCount=0,this.responseTimes=[],this.errorCount=0,this.rateLimitBlocks=0,this.byEndpoint={},this.byMethod={},this.byStatus={},this.byErrorType={},this.lastCollectTime=Date.now()}getRequestsPerMinute(){let n=(Date.now()-this.lastCollectTime)/1000/60;return n>0?Math.round(this.requestCount/n):0}getErrorRate(){return this.requestCount>0?this.errorCount/this.requestCount*100:0}getRateLimitBlocksPerMinute(){let n=(Date.now()-this.lastCollectTime)/1000/60;return n>0?Math.round(this.rateLimitBlocks/n):0}getAvgResponseTime(){if(this.responseTimes.length===0)return 0;return this.responseTimes.reduce((n,r)=>n+r,0)/this.responseTimes.length}}import*as yb from"fs";import*as oo from"os";class Al{config;lastCpuInfo=null;constructor(n){this.config=n}async collect(){if(!this.config?.enabled)return null;let n={cpu:{usage:0,cores:0},memory:{total:0,used:0,free:0,usagePercent:0,heapUsed:0,heapTotal:0},disk:{total:0,used:0,free:0,usagePercent:0},network:{bytesIn:0,bytesOut:0},process:{uptime:0,pid:0,eventLoopLag:0}};if(this.config.metrics?.cpu!==!1)n.cpu=this.collectCpu();if(this.config.metrics?.memory!==!1)n.memory=this.collectMemory();if(this.config.metrics?.disk!==!1)n.disk=await this.collectDisk();if(this.config.metrics?.network)n.network=this.collectNetwork();if(this.config.metrics?.process!==!1)n.process=await this.collectProcess();return n}collectCpu(){let n=oo.cpus(),r=n.length,t=0,o=0;for(let a of n)t+=a.times.idle,o+=a.times.user+a.times.nice+a.times.sys+a.times.idle+a.times.irq;let c=0;if(this.lastCpuInfo){let a=t-this.lastCpuInfo.idle,e=o-this.lastCpuInfo.total;c=e>0?Math.round((1-a/e)*100*100)/100:0}return this.lastCpuInfo={idle:t,total:o},{usage:c,cores:r}}collectMemory(){let n=oo.totalmem(),r=oo.freemem(),t=n-r,o=Math.round(t/n*100*100)/100,c=process.memoryUsage();return{total:n,used:t,free:r,usagePercent:o,heapUsed:c.heapUsed,heapTotal:c.heapTotal}}async collectDisk(){try{let n=yb.statfsSync("/"),r=n.blocks*n.bsize,t=n.bfree*n.bsize,o=r-t,c=Math.round(o/r*100*100)/100;return{total:r,used:o,free:t,usagePercent:c}}catch{return{total:0,used:0,free:0,usagePercent:0}}}collectNetwork(){let n=oo.networkInterfaces(),r=0,t=0;for(let o in n){let c=n[o];if(c){for(let a of c)if(!a.internal)r+=0,t+=0}}return{bytesIn:r,bytesOut:t}}async collectProcess(){let n=process.uptime(),r=process.pid,t=Date.now(),o=await new Promise((c)=>{setImmediate(()=>{c(Date.now()-t)})});return{uptime:n,pid:r,eventLoopLag:o}}}var nu=()=>{};import*as tu from"os";import{randomUUID as ru}from"crypto";class We{store;memoryInterval=null;cpuInterval=null;lastCpuInfo=null;isRunning=!1;constructor(n){let r={...n5,...n};this.store={requests:[],configs:{logMemory:r.logMemory,logCpu:r.logCpu,logDapr:r.logDapr,logWebSocket:r.logWebSocket,cpuLogInterval:r.cpuLogInterval,memoryLogInterval:r.memoryLogInterval},logs:{memory:[],cpu:[],dapr:[],ws:[]},logLimits:{memory:r.memoryLogLimit,cpu:r.cpuLogLimit,dapr:r.daprLogLimit,ws:r.wsLogLimit,request:r.requestLogLimit},worker:{pid:process.pid,workerId:null,memory:null,cpu:null,updatedAt:Date.now()},allWorkers:[],daprEvents:[],wsEvents:[]}}start(){if(this.isRunning)return;if(this.isRunning=!0,this.store.configs.logMemory)this.startMemoryCollector();if(this.store.configs.logCpu)this.startCpuCollector()}stop(){if(!this.isRunning)return;if(this.isRunning=!1,this.memoryInterval)clearInterval(this.memoryInterval),this.memoryInterval=null;if(this.cpuInterval)clearInterval(this.cpuInterval),this.cpuInterval=null}startMemoryCollector(){if(this.memoryInterval)clearInterval(this.memoryInterval);let n=()=>{if(!this.store.configs.logMemory)return;let r=process.memoryUsage(),t={timestamp:Date.now(),rss:r.rss,heapUsed:r.heapUsed,heapTotal:r.heapTotal};if(this.store.logs.memory.push(t),this.store.logs.memory.length>this.store.logLimits.memory*2)this.store.logs.memory=this.store.logs.memory.slice(-this.store.logLimits.memory);this.store.worker.memory=t,this.store.worker.updatedAt=Date.now()};n(),this.memoryInterval=setInterval(n,this.store.configs.memoryLogInterval)}startCpuCollector(){if(this.cpuInterval)clearInterval(this.cpuInterval);let n=()=>{if(!this.store.configs.logCpu)return;let r=tu.cpus(),t=0,o=0,c=0,a=0;for(let l of r)t+=l.times.user,o+=l.times.sys,c+=l.times.idle,a+=l.times.user+l.times.nice+l.times.sys+l.times.idle+l.times.irq;let e=0,i=0;if(this.lastCpuInfo){let l=a-this.lastCpuInfo.total,d=c-this.lastCpuInfo.idle;if(l>0){let b=l-d;e=Math.round((t-0)/(b||1)*100*100)/100,i=Math.round((o-0)/(b||1)*100*100)/100;let u=Math.round((1-d/l)*100*100)/100;e=Math.round(u*0.7*100)/100,i=Math.round(u*0.3*100)/100}}this.lastCpuInfo={idle:c,total:a};let s={timestamp:Date.now(),user:e,system:i};if(this.store.logs.cpu.push(s),this.store.logs.cpu.length>this.store.logLimits.cpu*2)this.store.logs.cpu=this.store.logs.cpu.slice(-this.store.logLimits.cpu);this.store.worker.cpu=s,this.store.worker.updatedAt=Date.now()};n(),this.cpuInterval=setInterval(n,this.store.configs.cpuLogInterval)}recordRequest(n){if(this.store.requests.push(n),this.store.requests.length>this.store.logLimits.request*2)this.store.requests=this.store.requests.slice(-this.store.logLimits.request)}recordDaprEvent(n,r){if(!this.store.configs.logDapr)return;let t={id:ru(),type:n,timestamp:Date.now(),...r};if(this.store.logs.dapr.push(t),this.store.daprEvents.push(t),this.store.logs.dapr.length>this.store.logLimits.dapr*2)this.store.logs.dapr=this.store.logs.dapr.slice(-this.store.logLimits.dapr);if(this.store.daprEvents.length>this.store.logLimits.dapr*2)this.store.daprEvents=this.store.daprEvents.slice(-this.store.logLimits.dapr)}recordWsEvent(n,r){if(!this.store.configs.logWebSocket)return;let t={id:ru(),type:n,timestamp:Date.now(),...r};if(this.store.logs.ws.push(t),this.store.wsEvents.push(t),this.store.logs.ws.length>this.store.logLimits.ws*2)this.store.logs.ws=this.store.logs.ws.slice(-this.store.logLimits.ws);if(this.store.wsEvents.length>this.store.logLimits.ws*2)this.store.wsEvents=this.store.wsEvents.slice(-this.store.logLimits.ws)}getSnapshot(){return{memory:this.store.logs.memory.slice(-this.store.logLimits.memory),cpu:this.store.logs.cpu.slice(-this.store.logLimits.cpu),requests:this.store.requests.slice(-this.store.logLimits.request),dapr:this.store.logs.dapr.slice(-this.store.logLimits.dapr),ws:this.store.logs.ws.slice(-this.store.logLimits.ws),workers:this.store.allWorkers.length?this.store.allWorkers:[this.store.worker],logLimits:{...this.store.logLimits},configs:{...this.store.configs}}}getUpdatesSince(n){let r=this.store.logs.memory.filter((i)=>i.timestamp>n.memory),t=this.store.logs.cpu.filter((i)=>i.timestamp>n.cpu),o=this.store.requests.filter((i)=>i.timestamp>n.request),c=this.store.logs.dapr.filter((i)=>i.timestamp>n.dapr),a=this.store.logs.ws.filter((i)=>i.timestamp>n.ws);if(!(r.length>0||t.length>0||o.length>0||c.length>0||a.length>0))return null;return{memory:r,cpu:t,requests:o,dapr:c,ws:a,timestamp:Date.now()}}getLogs(){return{memory:this.store.logs.memory,cpu:this.store.logs.cpu,requests:this.store.requests,dapr:this.store.logs.dapr,ws:this.store.logs.ws,daprEvents:this.store.daprEvents,wsEvents:this.store.wsEvents,configs:{logMemory:this.store.configs.logMemory,logCpu:this.store.configs.logCpu,logDapr:this.store.configs.logDapr,logWebSocket:this.store.configs.logWebSocket},limits:{...this.store.logLimits}}}getSettings(){return{configs:{...this.store.configs},logLimits:{...this.store.logLimits}}}changeSettings(n){if(n.logMemory!==void 0)this.store.configs.logMemory=n.logMemory;if(n.logCpu!==void 0)this.store.configs.logCpu=n.logCpu;if(n.logDapr!==void 0)this.store.configs.logDapr=n.logDapr;if(n.logWebSocket!==void 0)this.store.configs.logWebSocket=n.logWebSocket;if(n.cpuLogInterval!==void 0){if(this.store.configs.cpuLogInterval=n.cpuLogInterval,this.isRunning&&this.store.configs.logCpu)this.startCpuCollector()}if(n.memoryLogInterval!==void 0){if(this.store.configs.memoryLogInterval=n.memoryLogInterval,this.isRunning&&this.store.configs.logMemory)this.startMemoryCollector()}if(n.memoryLogLimit!==void 0)this.store.logLimits.memory=n.memoryLogLimit;if(n.cpuLogLimit!==void 0)this.store.logLimits.cpu=n.cpuLogLimit;if(n.daprLogLimit!==void 0)this.store.logLimits.dapr=n.daprLogLimit;if(n.wsLogLimit!==void 0)this.store.logLimits.ws=n.wsLogLimit;if(n.requestLogLimit!==void 0)this.store.logLimits.request=n.requestLogLimit;return{message:"Settings updated successfully",configs:{...this.store.configs},logLimits:{...this.store.logLimits}}}getStore(){return this.store}isEnabled(){return this.isRunning}}var n5;var ou=f(()=>{n5={enabled:!0,logMemory:!0,logCpu:!0,logDapr:!0,logWebSocket:!0,memoryLogInterval:1000,cpuLogInterval:1000,memoryLogLimit:100,cpuLogLimit:100,daprLogLimit:100,wsLogLimit:100,requestLogLimit:100,streamInterval:150}});class Sl{redis;logger;config;appId;flushToDb;systemCollector;applicationCollector;alertService;collectInterval=null;flushInterval=null;pendingMetrics=[];isRunning=!1;constructor(n){this.redis=n.redis,this.logger=n.logger,this.config=this.mergeConfig(n.config),this.appId=n.appId,this.flushToDb=n.flushToDb,this.systemCollector=new Al(this.config.system),this.applicationCollector=new Rl(this.config.application),this.alertService=new Be({logger:n.logger,gmail:n.gmail,config:this.config,appId:n.appId})}mergeConfig(n){return{enabled:n.enabled??An.enabled,system:{enabled:n.system?.enabled??An.system.enabled,collectInterval:n.system?.collectInterval??An.system.collectInterval,metrics:{cpu:n.system?.metrics?.cpu??An.system.metrics.cpu,memory:n.system?.metrics?.memory??An.system.metrics.memory,disk:n.system?.metrics?.disk??An.system.metrics.disk,network:n.system?.metrics?.network??An.system.metrics.network,process:n.system?.metrics?.process??An.system.metrics.process}},application:{enabled:n.application?.enabled??An.application.enabled,metrics:{requests:n.application?.metrics?.requests??An.application.metrics.requests,responseTime:n.application?.metrics?.responseTime??An.application.metrics.responseTime,errors:n.application?.metrics?.errors??An.application.metrics.errors,rateLimits:n.application?.metrics?.rateLimits??An.application.metrics.rateLimits}},database:{enabled:n.database?.enabled??An.database.enabled,metrics:{connections:n.database?.metrics?.connections??An.database.metrics.connections,queryTime:n.database?.metrics?.queryTime??An.database.metrics.queryTime,slowQueryThreshold:n.database?.metrics?.slowQueryThreshold??An.database.metrics.slowQueryThreshold}},redis:{enabled:n.redis?.enabled??An.redis.enabled},persistence:{enabled:n.persistence?.enabled??An.persistence.enabled,flushInterval:n.persistence?.flushInterval??An.persistence.flushInterval,retentionDays:n.persistence?.retentionDays??An.persistence.retentionDays},alerts:{enabled:n.alerts?.enabled??An.alerts.enabled,email:{enabled:n.alerts?.email?.enabled??An.alerts.email.enabled,recipients:n.alerts?.email?.recipients??An.alerts.email.recipients},thresholds:{cpuPercent:n.alerts?.thresholds?.cpuPercent??An.alerts.thresholds.cpuPercent,memoryPercent:n.alerts?.thresholds?.memoryPercent??An.alerts.thresholds.memoryPercent,diskPercent:n.alerts?.thresholds?.diskPercent??An.alerts.thresholds.diskPercent,errorRatePercent:n.alerts?.thresholds?.errorRatePercent??An.alerts.thresholds.errorRatePercent,responseTimeMs:n.alerts?.thresholds?.responseTimeMs??An.alerts.thresholds.responseTimeMs,rateLimitBlocksPerMinute:n.alerts?.thresholds?.rateLimitBlocksPerMinute??An.alerts.thresholds.rateLimitBlocksPerMinute},cooldown:n.alerts?.cooldown??An.alerts.cooldown}}}parseTimeToMs(n){let r=n.match(/^(\d+)(ms|s|m|h|d)$/);if(!r||!r[1]||!r[2])return 1e4;let t=parseInt(r[1],10);switch(r[2]){case"ms":return t;case"s":return t*1000;case"m":return t*60*1000;case"h":return t*60*60*1000;case"d":return t*24*60*60*1000;default:return 1e4}}start(){if(!this.config.enabled||this.isRunning)return;this.isRunning=!0,this.logger.info("[Monitoring] Starting monitoring service");let n=this.parseTimeToMs(this.config.system.collectInterval);if(this.collectInterval=setInterval(()=>{this.collect()},n),this.config.persistence.enabled&&this.flushToDb){let r=this.parseTimeToMs(this.config.persistence.flushInterval);this.flushInterval=setInterval(()=>{this.flush()},r)}this.collect()}stop(){if(!this.isRunning)return;if(this.isRunning=!1,this.logger.info("[Monitoring] Stopping monitoring service"),this.collectInterval)clearInterval(this.collectInterval),this.collectInterval=null;if(this.flushInterval)clearInterval(this.flushInterval),this.flushInterval=null;this.flush()}async collect(){let n=Date.now(),r={timestamp:n};if(this.config.system.enabled){let t=await this.systemCollector.collect();if(t)r.system=t,this.addMetricPoints("system",t,n)}if(this.config.application.enabled){let t=this.applicationCollector.collect();if(t)r.application=t,this.addMetricPoints("application",t,n)}if(await this.storeSnapshot(r),this.config.alerts.enabled)await this.alertService.checkAndAlert(r)}addMetricPoints(n,r,t){let o=(c,a="")=>{for(let e in c){let i=c[e],s=a?`${a}.${e}`:e;if(typeof i==="number")this.pendingMetrics.push({timestamp:t,metricType:n,metricName:s,value:i});else if(typeof i==="object"&&i!==null&&!Array.isArray(i))o(i,s)}};o(r)}async storeSnapshot(n){let r=`monitoring:${this.appId}:latest`;await this.redis.create(r,n,3600);let t=`monitoring:${this.appId}:history`,o=await this.redis.read(t),c=o.success&&o.data?o.data:[];c.push(n);let a=Date.now()-3600000,e=c.filter((i)=>i.timestamp>a);await this.redis.create(t,e,3600)}async flush(){if(this.pendingMetrics.length===0)return;if(!this.flushToDb)return;let n=[...this.pendingMetrics];this.pendingMetrics=[];try{await this.flushToDb(n),this.logger.debug(`[Monitoring] Flushed ${n.length} metrics to database`)}catch(r){this.logger.error(`[Monitoring] Failed to flush metrics: ${r}`),this.pendingMetrics=[...n,...this.pendingMetrics]}}recordRequest(n){if(!this.config.enabled||!this.config.application.enabled)return;this.applicationCollector.recordRequest(n)}recordRateLimitBlock(){if(!this.config.enabled||!this.config.application.enabled)return;this.applicationCollector.recordRateLimitBlock()}async getLatestSnapshot(){let n=`monitoring:${this.appId}:latest`,r=await this.redis.read(n);return r.success?r.data:null}async getHistory(n=60){let r=`monitoring:${this.appId}:history`,t=await this.redis.read(r);if(!t.success||!t.data)return[];let o=Date.now()-n*60000;return t.data.filter((c)=>c.timestamp>o)}getActiveAlerts(){return this.alertService.getActiveAlerts()}acknowledgeAlert(n){return this.alertService.acknowledgeAlert(n)}isEnabled(){return this.config.enabled}getConfig(){return this.config}}var An;var cu=f(()=>{nu();ou();An={enabled:!1,system:{enabled:!0,collectInterval:"10s",metrics:{cpu:!0,memory:!0,disk:!0,network:!1,process:!0}},application:{enabled:!0,metrics:{requests:!0,responseTime:!0,errors:!0,rateLimits:!0}},database:{enabled:!1,metrics:{connections:!0,queryTime:!0,slowQueryThreshold:"100ms"}},redis:{enabled:!1},persistence:{enabled:!0,flushInterval:"1m",retentionDays:30},alerts:{enabled:!1,email:{enabled:!1,recipients:[]},thresholds:{cpuPercent:80,memoryPercent:85,diskPercent:90,errorRatePercent:5,responseTimeMs:1000,rateLimitBlocksPerMinute:100},cooldown:"5m"}}});var au=()=>{};import{and as xM,eq as LM}from"drizzle-orm";var eu=f(()=>{au()});class El{redis;logger;config;constructor(n){this.redis=n.redis,this.logger=n.logger,this.config=this.mergeConfig(n.config)}mergeConfig(n){return{enabled:n.enabled??er.enabled,strategy:n.strategy??er.strategy,keyPrefix:n.keyPrefix??er.keyPrefix,authRoutes:{window:n.authRoutes?.window??er.authRoutes.window,max:n.authRoutes?.max??er.authRoutes.max,login:{window:n.authRoutes?.login?.window??Ye.window,max:n.authRoutes?.login?.max??Ye.max,blockDuration:n.authRoutes?.login?.blockDuration??Ye.blockDuration},register:{window:n.authRoutes?.register?.window??Je.window,max:n.authRoutes?.register?.max??Je.max,blockDuration:n.authRoutes?.register?.blockDuration??Je.blockDuration},passwordReset:{window:n.authRoutes?.passwordReset?.window??Xe.window,max:n.authRoutes?.passwordReset?.max??Xe.max,blockDuration:n.authRoutes?.passwordReset?.blockDuration??Xe.blockDuration},magicLink:{window:n.authRoutes?.magicLink?.window??xe.window,max:n.authRoutes?.magicLink?.max??xe.max,blockDuration:n.authRoutes?.magicLink?.blockDuration??xe.blockDuration}},publicRoutes:{window:n.publicRoutes?.window??er.publicRoutes.window,max:n.publicRoutes?.max??er.publicRoutes.max},privateRoutes:{window:n.privateRoutes?.window??er.privateRoutes.window,max:n.privateRoutes?.max??er.privateRoutes.max},byIp:n.byIp??er.byIp,byUserId:n.byUserId??er.byUserId,byEndpoint:n.byEndpoint??er.byEndpoint,skipSuccessfulRequests:n.skipSuccessfulRequests??er.skipSuccessfulRequests,headers:{remaining:n.headers?.remaining??er.headers.remaining,reset:n.headers?.reset??er.headers.reset,limit:n.headers?.limit??er.headers.limit},whitelist:n.whitelist??er.whitelist,blacklist:n.blacklist??er.blacklist}}parseTimeToMs(n){let r=n.match(/^(\d+)(ms|s|m|h|d)$/);if(!r||!r[1]||!r[2])return 60000;let t=parseInt(r[1],10);switch(r[2]){case"ms":return t;case"s":return t*1000;case"m":return t*60*1000;case"h":return t*60*60*1000;case"d":return t*24*60*60*1000;default:return 60000}}buildKey(n){let r=[this.config.keyPrefix,n.category];if(n.authType&&n.authType!=="other")r.push(n.authType);if(this.config.byIp&&n.ip)r.push(`ip:${n.ip}`);if(this.config.byUserId&&n.userId)r.push(`user:${n.userId}`);if(this.config.byEndpoint&&n.endpoint)r.push(`ep:${n.endpoint.replace(/\//g,"_")}`);return r.join(":")}getLimits(n,r){if(n==="auth"){if(r&&r!=="other"){let t=this.config.authRoutes[r];if(t)return t}return{window:this.config.authRoutes.window,max:this.config.authRoutes.max}}if(n==="public")return this.config.publicRoutes;return this.config.privateRoutes}isWhitelisted(n){return this.config.whitelist.some((r)=>{if(r.includes("*"))return new RegExp(`^${r.replace(/\*/g,".*")}$`).test(n);return r===n})}isBlacklisted(n){return this.config.blacklist.some((r)=>{if(r.includes("*"))return new RegExp(`^${r.replace(/\*/g,".*")}$`).test(n);return r===n})}async readRedis(n){let r=await this.redis.read(n);if(r.success)return r.data;return null}async check(n){if(!this.config.enabled)return{allowed:!0,remaining:-1,resetAt:0,limit:-1};if(this.isWhitelisted(n.ip))return{allowed:!0,remaining:-1,resetAt:0,limit:-1};if(this.isBlacklisted(n.ip))return this.logger.warn(`[RateLimit] Blacklisted IP: ${n.ip}`),{allowed:!1,remaining:0,resetAt:Date.now()+86400000,limit:0,retryAfter:86400};let r=this.buildKey(n),t=this.getLimits(n.category,n.authType),o=this.parseTimeToMs(t.window),c=`${r}:blocked`,a=await this.readRedis(c);if(a&&a.until>Date.now()){let e=Math.ceil((a.until-Date.now())/1000);return this.logger.warn(`[RateLimit] Blocked: ${r}, retry after ${e}s`),{allowed:!1,remaining:0,resetAt:a.until,limit:t.max,retryAfter:e}}if(this.config.strategy==="sliding-window")return this.slidingWindowCheck(r,t.max,o,t.blockDuration);if(this.config.strategy==="fixed-window")return this.fixedWindowCheck(r,t.max,o,t.blockDuration);return this.tokenBucketCheck(r,t.max,o)}async slidingWindowCheck(n,r,t,o){let c=Date.now(),a=c-t,e=`${n}:sw`,s=(await this.readRedis(e))?.timestamps||[];s=s.filter((u)=>u>a);let l=s.length,d=s[0],b=d!==void 0?d+t:c+t;if(l>=r){if(o){let u=this.parseTimeToMs(o);await this.redis.create(`${n}:blocked`,{until:c+u},Math.ceil(u/1000))}return{allowed:!1,remaining:0,resetAt:b,limit:r,retryAfter:Math.ceil((b-c)/1000)}}return s.push(c),await this.redis.create(e,{timestamps:s},Math.ceil(t/1000)+1),{allowed:!0,remaining:r-s.length,resetAt:b,limit:r}}async fixedWindowCheck(n,r,t,o){let c=Date.now(),a=Math.floor(c/t),e=`${n}:fw:${a}`,i=(a+1)*t,l=(await this.readRedis(e))?.count||0;if(l>=r){if(o){let d=this.parseTimeToMs(o);await this.redis.create(`${n}:blocked`,{until:c+d},Math.ceil(d/1000))}return{allowed:!1,remaining:0,resetAt:i,limit:r,retryAfter:Math.ceil((i-c)/1000)}}return await this.redis.create(e,{count:l+1},Math.ceil(t/1000)+1),{allowed:!0,remaining:r-(l+1),resetAt:i,limit:r}}async tokenBucketCheck(n,r,t){let o=Date.now(),c=r/t,a=`${n}:tb`,e=await this.readRedis(a),i=e?.tokens??r,s=e?.lastRefill??o,d=(o-s)*c;if(i=Math.min(r,i+d),i<1){let b=Math.ceil((1-i)/c);return{allowed:!1,remaining:0,resetAt:o+b,limit:r,retryAfter:Math.ceil(b/1000)}}return i-=1,await this.redis.create(a,{tokens:i,lastRefill:o},Math.ceil(t/1000)*2),{allowed:!0,remaining:Math.floor(i),resetAt:o+t,limit:r}}async decrement(n){if(!this.config.skipSuccessfulRequests)return;let r=this.buildKey(n);if(this.config.strategy==="sliding-window"){let t=`${r}:sw`,o=await this.readRedis(t);if(o?.timestamps?.length){o.timestamps.pop();let c=this.parseTimeToMs(this.getLimits(n.category,n.authType).window);await this.redis.create(t,o,Math.ceil(c/1000)+1)}}else if(this.config.strategy==="fixed-window"){let t=this.parseTimeToMs(this.getLimits(n.category,n.authType).window),o=Math.floor(Date.now()/t),c=`${r}:fw:${o}`,a=await this.readRedis(c);if(a?.count)await this.redis.create(c,{count:a.count-1},Math.ceil(t/1000)+1)}}getHeaders(n){let r={};return r[this.config.headers.remaining]=String(n.remaining),r[this.config.headers.reset]=String(Math.ceil(n.resetAt/1000)),r[this.config.headers.limit]=String(n.limit),r}isEnabled(){return this.config.enabled}}var Ye,Je,Xe,xe,er;var iu=f(()=>{Ye={window:"15m",max:5,blockDuration:"30m"},Je={window:"1h",max:3,blockDuration:"1h"},Xe={window:"1h",max:3,blockDuration:"1h"},xe={window:"1h",max:5,blockDuration:"1h"},er={enabled:!0,strategy:"sliding-window",keyPrefix:"rl:",authRoutes:{window:"1m",max:10,login:Ye,register:Je,passwordReset:Xe,magicLink:xe},publicRoutes:{window:"1m",max:100},privateRoutes:{window:"1m",max:60},byIp:!0,byUserId:!0,byEndpoint:!1,skipSuccessfulRequests:!1,headers:{remaining:"X-RateLimit-Remaining",reset:"X-RateLimit-Reset",limit:"X-RateLimit-Limit"},whitelist:[],blacklist:[]}});var su=()=>{};import{and as Le,desc as r5,eq as Xr}from"drizzle-orm";class Ml{db;schemaTables;config;logger;constructor(n){this.db=n.db,this.schemaTables=n.schemaTables,this.config=n.config,this.logger=n.logger}getTable(n){return this.schemaTables[n]}getCol(n,r){return n[r]}async getStatus(n,r){let t=this.getTable("verificationFlows"),o=this.getTable("verificationSteps"),c=this.getTable("verifications"),a=this.getTable("verificationRequirements");if(!t||!o||!c||!a)return this.logger.error("[Verification] Required tables not found"),{entity_name:n,entity_id:r,flow:null,current_step:0,total_steps:0,is_completed:!1,is_rejected:!1,verifications:[],pending_verifiers:[]};let i=(await this.db.select().from(t).where(Le(Xr(this.getCol(t,"entity_name"),n),Xr(this.getCol(t,"is_draft"),!1))).limit(1))[0];if(!i)return{entity_name:n,entity_id:r,flow:null,current_step:0,total_steps:0,is_completed:!0,is_rejected:!1,verifications:[],pending_verifiers:[]};let s=await this.db.select().from(a).where(Xr(this.getCol(a,"entity_name"),n)).orderBy(this.getCol(a,"step_order")),l=await this.db.select().from(c).where(Le(Xr(this.getCol(c,"entity_name"),n),Xr(this.getCol(c,"entity_id"),r))).orderBy(r5(this.getCol(c,"created_at"))),d=s.length,b=l.filter((R)=>R.decision==="approved"),u=l.find((R)=>R.decision==="rejected"),$=u?1:b.length+1,k=b.length>=d&&!u,w=!!u,_=s.filter((R)=>R.step_order>=$);return{entity_name:n,entity_id:r,flow:i,current_step:$,total_steps:d,is_completed:k,is_rejected:w,verifications:l,pending_verifiers:_.map((R)=>({step_order:R.step_order,verifier_type:R.verifier_type,verifier_id:R.verifier_id,verifier_role:R.verifier_role,is_signature_mandatory:R.is_signature_mandatory}))}}async decide(n){let{entity_name:r,entity_id:t,user_id:o,decision:c,reason:a,signature_id:e,diff:i}=n,s=this.getTable("verifications"),l=this.getTable("verificationRequirements"),d=this.getTable("user_roles"),b=this.getTable("roles");if(!s||!l)return{success:!1,message:"Verification tables not configured"};let u=await this.getStatus(r,t);if(u.is_completed)return{success:!1,message:"Verification flow already completed"};if(u.total_steps===0)return{success:!1,message:"No verification flow configured for this entity"};let $=u.pending_verifiers.filter((M)=>M.step_order===u.current_step);if($.length===0)return{success:!1,message:"No pending requirements for current step"};let k=!1,w=null;for(let M of $){if(M.verifier_type==="user"&&M.verifier_id===o){k=!0,w=M;break}if(M.verifier_type==="role"&&M.verifier_role&&d&&b){let A=d,z=b;if((await this.db.select({role_name:z.name}).from(d).innerJoin(b,Xr(A.role_id,z.id)).where(Xr(A.user_id,o))).some((B)=>B.role_name===M.verifier_role)){k=!0,w=M;break}}if(M.verifier_type==="entity_creator"){k=!0,w=M;break}}if(!k||!w)return{success:!1,message:"User is not authorized to verify at this step"};if(w.is_signature_mandatory&&!e)return{success:!1,message:"Signature is required for this verification step"};let R=(await this.db.select().from(l).where(Le(Xr(this.getCol(l,"entity_name"),r),Xr(this.getCol(l,"step_order"),u.current_step))))[0];if(!R)return{success:!1,message:"Requirement not found"};let X={requirement_id:R.id,verifier_id:o,signature_id:e||null,entity_name:r,entity_id:t,step_order:u.current_step,decision:c,reason:a||null,diff:i||null},[x]=await this.db.insert(s).values(X).returning();if(c==="rejected"&&this.config.autoResetOnRejection)this.logger.info(`[Verification] Flow reset due to rejection for ${r}:${t}`);let E=c==="approved"&&u.current_step>=u.total_steps,P=c==="approved"?u.current_step+1:1;return{success:!0,message:c==="approved"?E?"Verification flow completed":`Step ${u.current_step} approved`:"Verification rejected, flow reset",verification:x,flow_completed:E,next_step:E?void 0:P}}async getPending(n){let r=this.getTable("verificationRequirements"),t=this.getTable("verificationFlows"),o=this.getTable("user_roles"),c=this.getTable("roles");if(!r||!t)return[];let a=o,e=c,s=(o&&c?await this.db.select({role_name:e.name}).from(o).innerJoin(c,Xr(a.role_id,e.id)).where(Xr(a.user_id,n)):[]).map((b)=>b.role_name),l=await this.db.select().from(r),d=[];for(let b of l){if(!(b.verifier_type==="user"&&b.verifier_id===n||b.verifier_type==="role"&&s.includes(b.verifier_role)||b.verifier_type==="entity_creator"))continue;let k=(await this.db.select().from(t).where(Le(Xr(this.getCol(t,"entity_name"),b.entity_name),Xr(this.getCol(t,"is_draft"),!1))).limit(1))[0];if(!k)continue;d.push({entity_name:b.entity_name,entity_id:b.entity_id,flow_name:k.name,step_order:b.step_order,step_name:void 0,is_signature_mandatory:b.is_signature_mandatory,created_at:b.created_at,diff:void 0})}return d}}var Dl=f(()=>{su()});var Hl=f(()=>{Xb();ml();$l();Ib();Zb();cu();eu();iu();Dl()});import{access as oD,mkdir as e5}from"fs/promises";import{dirname as i5,resolve as du}from"path";var fa,Bl,Mn=(n)=>{if(!n||typeof n!=="string")throw On("INVALID_PATH","Path must be a non-empty string",n,"resolvePath");return du(n)},xt=(n)=>{let r=Mn(n);return i5(r)},tt=async(n)=>{let r=du(n);try{await e5(r,{recursive:!0})}catch(t){if(t.code!=="EEXIST")throw On("DIRECTORY_CREATE_FAILED",`Failed to create directory: ${r}`,r,"ensureDirectory")}},Wl=(n)=>{let r=n,t=0;while(r>=1024&&t<Bl.length-1)r/=1024,t++;return`${r.toFixed(2)} ${Bl[t]}`},bu=(n,r)=>{return n.toLowerCase().endsWith(r.toLowerCase())},Yl=(n,r)=>{let t=r.startsWith(".")?r:`.${r}`;if(bu(n,t))return n;return`${n}${t}`},On=(n,r,t,o)=>{return{code:n,message:r,path:t,operation:o||"unknown"}},Ve=(n)=>{try{return JSON.stringify(n,null,2)}catch{return"{}"}},Jl=async(n,r,t=fa.maxConcurrency)=>{let o=[];for(let c=0;c<n.length;c+=t){let a=n.slice(c,c+t),e=[];for(let s of a)e.push(r(s));let i=await Promise.allSettled(e);o.push(...i)}return o},Ce=(n,r={})=>{let t=[],o=[],c=r.strict??!0;if(n.defaultEncoding!==void 0){if(!["utf-8","utf8","ascii","base64","hex"].includes(n.defaultEncoding))t.push(`Invalid defaultEncoding: ${n.defaultEncoding}`)}if(n.maxConcurrency!==void 0){if(!Number.isInteger(n.maxConcurrency)||n.maxConcurrency<1)t.push("maxConcurrency must be a positive integer");if(n.maxConcurrency>50)o.push("maxConcurrency > 50 may cause performance issues")}if(n.defaultCreateDir!==void 0&&typeof n.defaultCreateDir!=="boolean")t.push("defaultCreateDir must be a boolean");if(n.defaultRecursive!==void 0&&typeof n.defaultRecursive!=="boolean")t.push("defaultRecursive must be a boolean");if(c&&!r.allowUnknownKeys){let a=["defaultEncoding","defaultCreateDir","defaultRecursive","maxConcurrency"],e=Object.keys(n);for(let i of e)if(!a.includes(i))t.push(`Unknown configuration key: ${i}`)}return{isValid:t.length===0,errors:t,warnings:o}},uu=(n,r=fa)=>{let t=Ce(n);if(!t.isValid)throw On("CONFIG_VALIDATION_FAILED",`Configuration validation failed: ${t.errors.join(", ")}`,void 0,"mergeConfig");return{...r,...n}},gu=(n)=>{let r=(a)=>({read:Boolean(a&4),write:Boolean(a&2),execute:Boolean(a&1)}),t=n>>6&7,o=n>>3&7,c=n&7;return{owner:r(t),group:r(o),others:r(c)}},_u=(n)=>{return Number.isInteger(n)&&n>=0&&n<=511};var dc=f(()=>{fa={defaultEncoding:"utf-8",defaultCreateDir:!0,defaultRecursive:!0,maxConcurrency:5},Bl=["B","KB","MB","GB","TB"]});import{copyFile as Xl,rename as xl,unlink as s5}from"fs/promises";import{basename as mu,dirname as wu,extname as l5,join as f5}from"path";var Qe,d5=(n,r=".tmp")=>{let t=Mn(n),o=Date.now(),c=Math.random().toString(36).substring(2,8);return`${t}${r}.${o}.${c}`},hu=(n,r,t=!0)=>{let o=Mn(n),c=r?Mn(r):wu(o),a=mu(o),e=l5(a),i=mu(a,e),s=t?`.${new Date().toISOString().replace(/[:.]/g,"-")}`:"",l=`${i}.backup${s}${e}`;return f5(c,l)},da=async({path:n,data:r,tempSuffix:t=Qe.tempSuffix,backup:o=Qe.backup,sync:c=Qe.sync})=>{let a=Mn(n),e=d5(a,t),i;try{if(await tt(xt(a)),o){if(await Bun.file(a).exists())i=hu(a),await Xl(a,i)}let s=await Bun.write(e,r);return await xl(e,a),{success:!0,bytesWritten:s,tempPath:e,backupPath:i}}catch(s){try{await s5(e)}catch{}throw On("ATOMIC_WRITE_FAILED",`Atomic write failed: ${s}`,a,"atomicWrite")}},$u=async(n,r,t={})=>{let o=JSON.stringify(r,null,2);return da({path:n,data:o,...t})},Ll=async({sourcePath:n,backupDir:r,keepOriginal:t=!0,timestamp:o=Qe.timestamp})=>{let c=Mn(n);if(!await Bun.file(c).exists())throw On("SOURCE_NOT_FOUND",`Source file not found: ${n}`,c,"createBackup");let e=hu(c,r,o);if(await tt(wu(e)),t)await Xl(c,e);else await xl(c,e);return e},Vl=async(n,r,t=!1)=>{let o=Mn(n),c=Mn(r);if(!await Bun.file(o).exists())throw On("BACKUP_NOT_FOUND",`Backup file not found: ${n}`,o,"restoreFromBackup");try{if(await tt(xt(c)),t)await xl(o,c);else await Xl(o,c);return!0}catch(e){return console.error(`Error restoring from backup ${n}:`,e),!1}},ku=async(n,r,t={})=>{let o=Mn(n),c=Bun.file(o),a;try{if(await c.exists())a=await Ll({sourcePath:o,keepOriginal:!0,timestamp:!0});let e=await c.exists()?await c.text():"",i=await r(e),s=await da({path:o,data:i,backup:!1,...t});return{success:s.success,bytesWritten:s.bytesWritten,tempPath:s.tempPath,backupPath:a}}catch(e){if(a)try{await Vl(a,o,!1)}catch(i){console.error("Rollback failed:",i)}throw e}},Ru=async(n)=>{let r=[],t=[];for(let o of n)try{let c=await da(o);r.push(c)}catch(c){t.push({operation:o,error:c})}return{successful:r,failed:t}};var Au=f(()=>{dc();Qe={tempSuffix:".tmp",backup:!1,sync:!0,timestamp:!0}});import{chmod as b5,stat as u5}from"fs/promises";var g5,co=async(n,r)=>{let t=Mn(n);if(!_u(r))throw On("INVALID_PERMISSION_MODE",`Invalid permission mode: ${r.toString(8)}`,t,"setFilePermissions");try{return await b5(t,r),!0}catch(o){return console.error(`Error setting permissions for ${n}:`,o),!1}},Xo=async(n)=>{let r=Mn(n);try{let o=(await u5(r)).mode&511,c=gu(o);return{path:r,mode:o,owner:c.owner,group:c.group,others:c.others}}catch(t){throw On("PERMISSION_READ_FAILED",`Failed to read permissions: ${t}`,r,"getFilePermissions")}},Su=async(n,r)=>{try{return((await Xo(n)).mode&r)===r}catch{return!1}},Eu=async(n)=>{let t=(await Xo(n)).mode|256;return co(n,t)},Mu=async(n)=>{let t=(await Xo(n)).mode|128;return co(n,t)},Du=async(n)=>{let t=(await Xo(n)).mode|64;return co(n,t)},Hu=async(n)=>{let t=(await Xo(n)).mode&-147;return co(n,t)},zu=async(n,r)=>{let t=g5[r];return co(n,t)};var Uu=f(()=>{dc();g5={OWNER_READ_WRITE:384,OWNER_ALL:448,GROUP_READ:416,GROUP_READ_WRITE:432,ALL_READ:420,ALL_READ_WRITE:438,ALL_READ_EXECUTE:493,ALL_FULL:511,READ_ONLY:292,EXECUTABLE:493}});var _5,Pe=async(n,r={})=>{let t=Mn(n),o={..._5,...r};await tt(xt(t));let a=Bun.file(t).writer({highWaterMark:o.highWaterMark}),e=!1;return{write:(s)=>{if(e)throw On("WRITER_CLOSED","Cannot write to closed writer",t,"streamWrite");try{let l=a.write(s);if(o.autoFlush)a.flush();return l}catch(l){throw On("WRITE_FAILED",`Failed to write chunk: ${l}`,t,"streamWrite")}},flush:()=>{if(e)return 0;try{return a.flush()}catch(s){throw On("FLUSH_FAILED",`Failed to flush writer: ${s}`,t,"streamFlush")}},end:async(s)=>{if(e)return 0;try{let l=await a.end(s);return e=!0,l}catch(l){throw e=!0,On("END_FAILED",`Failed to end writer: ${l}`,t,"streamEnd")}},ref:()=>{if(!e)a.ref()},unref:()=>{if(!e)a.unref()}}},Cl=async(n,r,t={})=>{let o=await Pe(n,t),c=0;try{for(let a of r){let e=o.write(a);c+=e}return await o.flush(),await o.end(),c}catch(a){try{await o.end(a)}catch{}throw a}},Bu=async(n,r,t={})=>{let o=Mn(n),c=Bun.file(o),a=await c.exists()?await c.arrayBuffer():new ArrayBuffer(0),e=[];if(a.byteLength>0)e.push(a);return e.push(...r),Cl(o,e,t)},Wu=async(n,r,t={})=>{let o=Mn(n),c=Bun.file(o);if(!await c.exists())throw On("SOURCE_NOT_FOUND",`Source file not found: ${n}`,o,"copyFileStream");let a=c.stream(),e=await Pe(r,t),i=0;try{let s=a.getReader();while(!0){let{done:l,value:d}=await s.read();if(l)break;let b=e.write(d);i+=b}return await e.flush(),await e.end(),i}catch(s){try{await e.end(s)}catch{}throw s}},Yu=async(n,r)=>{let t=Mn(n),o=Bun.file(t);if(!await o.exists())throw On("FILE_NOT_FOUND",`File not found: ${n}`,t,"readFileStream");let a=o.stream().getReader();try{while(!0){let{done:e,value:i}=await a.read();if(e)break;await r(i)}}finally{a.releaseLock()}};var Ju=f(()=>{dc();_5={highWaterMark:1048576,autoFlush:!0,closeOnEnd:!0}});import{readdir as m5,rm as w5,rmdir as h5,stat as $5}from"fs/promises";import{extname as k5,join as R5}from"path";class ao{static instance;config;constructor(){this.config={...fa}}static getInstance(){if(!ao.instance)ao.instance=new ao;return ao.instance}async createFile({dir:n,name:r,data:t,options:o={}}){let c=Mn(R5(n,r));if(o.createDir!==!1)await tt(xt(c));let a=o.type?new Blob([t],{type:o.type}):t;return await Bun.write(c,a)}async createJsonFile(n,r,t){let o=Yl(r,".json"),c=Ve(t);return this.createFile({dir:n,name:o,data:c,options:{type:"application/json"}})}async createDirectory({path:n}){await tt(n)}async readFile({path:n,format:r="text"}){let t=Mn(n),o=Bun.file(t);if(!await o.exists())throw On("FILE_NOT_FOUND",`File not found: ${n}`,t,"readFile");switch(r){case"text":return await o.text();case"json":return await o.json();case"buffer":return await o.arrayBuffer();case"bytes":return await o.bytes();case"stream":return o.stream();default:return await o.text()}}async readJsonFile(n){return this.readFile({path:n,format:"json"})}async getFileInfo(n){let r=Mn(n),t=Bun.file(r),o=n.split("/").pop()||n,c=null;try{c=await $5(r)}catch{}return{name:o,path:r,size:t.size,type:t.type,exists:await t.exists(),extension:k5(o),createdAt:c?.birthtime,modifiedAt:c?.mtime}}async readDirectory({path:n,recursive:r=!1}){let t=Mn(n);return await m5(t,{recursive:r,encoding:"utf8"})}async getFilesByExtension(n,r){let t=await this.readDirectory({path:n}),o=r.startsWith(".")?r:`.${r}`;return t.filter((c)=>c.endsWith(o))}async updateFile({path:n,data:r,mode:t="overwrite"}){let o=Mn(n);if(t==="append"){let a=await this.readFile({path:n,format:"text"})+r;return await Bun.write(o,a)}return await Bun.write(o,r)}async updateJsonFile(n,r,t=!1){let o=r;if(t)try{let c=await this.readJsonFile(n);if(typeof c==="object"&&c!==null&&!Array.isArray(c)&&typeof r==="object"&&r!==null&&!Array.isArray(r))o={...c,...r}}catch{}return this.updateFile({path:n,data:Ve(o),mode:"overwrite"})}async appendToFile(n,r){return this.updateFile({path:n,data:r,mode:"append"})}async deleteFile(n){try{let r=Mn(n);return await Bun.file(r).delete(),!0}catch(r){return console.error(`Error deleting file ${n}:`,r),!1}}async deleteDirectory({path:n,recursive:r=!1}){try{let t=Mn(n);if(r)await w5(t,{recursive:!0,force:!0});else await h5(t);return!0}catch(t){return console.error(`Error deleting directory ${n}:`,t),!1}}async deleteFiles(n){let r=await Jl(n,async(c)=>{if(!await this.deleteFile(c))throw Error(`Failed to delete: ${c}`);return c}),t=[],o=[];for(let c=0;c<r.length;c++){let a=r[c],e=n[c];if(a?.status==="fulfilled")t.push(e||"");else o.push(e||"")}return{success:t,failed:o}}async exists(n){let r=Mn(n);return await Bun.file(r).exists()}async copyFile(n,r){let t=Mn(n),o=Mn(r),c=Bun.file(t);if(!await c.exists())throw On("SOURCE_NOT_FOUND",`Source file not found: ${n}`,t,"copyFile");return await tt(xt(o)),await Bun.write(o,c)}async moveFile(n,r){try{return await this.copyFile(n,r),await this.deleteFile(n),!0}catch(t){return console.error(`Error moving file from ${n} to ${r}:`,t),!1}}getFormattedFileSize(n){return Wl(n)}getConfig(){return{...this.config}}updateConfig(n){let r=Ce(n);if(r.isValid){let t=uu(n,this.config);Object.assign(this.config,t)}return r}validateConfiguration(n){return Ce(n)}async createStreamWriter(n,r={}){return Pe(n,r)}async writeStream(n,r,t={}){return Cl(n,r,t)}async appendStream(n,r,t={}){return Bu(n,r,t)}async copyFileStream(n,r,t={}){return Wu(n,r,t)}async readFileStream(n,r){return Yu(n,r)}async setPermissions(n,r){return co(n,r)}async setPermissionsAdvanced(n){return co(n.path,n.mode)}async getPermissions(n){return Xo(n)}async checkPermissions(n,r){return Su(n,r)}async makeFileReadable(n){return Eu(n)}async makeFileWritable(n){return Mu(n)}async makeFileExecutable(n){return Du(n)}async makeFileReadOnly(n){return Hu(n)}async setCommonPermission(n,r){return zu(n,r)}async atomicWrite(n){return da(n)}async atomicJsonWrite(n,r,t={}){return $u(n,r,t)}async createFileBackup(n){return Ll(n)}async restoreFileFromBackup(n,r,t=!1){return Vl(n,r,t)}async safeFileUpdate(n,r,t={}){return ku(n,r,t)}async batchAtomicOperations(n){return Ru(n)}}var Ql=f(()=>{Au();Uu();Ju();dc()});var Rt;var Ge=f(()=>{Ql();dc();Ql();Rt=ao.getInstance()});import{Pool as YD}from"pg";var Xu=()=>{};var xu=f(()=>{tl();Ge();Xu();Xt()});function Vu(n,r){let t=(n.get("cookie")?.split(";")||[]).reduce((o,c)=>{let[a,e]=c.trim().split("=");if(a&&e)o[a]=e;return o},{});return{access_token:t[r.access_token]||n.get("authorization")?.split(" ")[1],refresh_token:t[r.refresh_token],session_token:t[r.session_token]}}function Gl(n){if(!n.redis){console.log("Redis not configured, skipping");return}if(n.redis.withDapr){Pl=new Nn({withDapr:!0,stateStoreName:n.redis.stateStoreName});return}let r=n.redis.url?process.env[n.redis.url]:void 0,t=n.redis.host?process.env[n.redis.host]:void 0,o=n.redis.port?parseInt(process.env[n.redis.port]||"",10):void 0;Pl=new Nn({url:r,host:t,port:Number.isNaN(o)?void 0:o})}function qe(){return Pl}function ot(n){if(typeof n==="number")return n;if(!n||n.trim()==="")throw Error("Time string cannot be empty");let r=n.trim().match(/^(\d+(?:\.\d+)?)\s*([smhdwMy])$/);if(!r||!r[1]||!r[2])throw Error(`Invalid time format: "${n}". Expected format: "75s", "10m", "2h", "1d", "1w", "2M", "1y"`);let t=parseFloat(r[1]),o=r[2],a={s:1,m:60,h:3600,d:86400,w:604800,M:2592000,y:31536000}[o];if(a===void 0)throw Error(`Unknown time unit: "${o}"`);let e=Math.floor(t*a);if(e<=0)throw Error(`Time value must be positive: "${n}"`);return e}function Cu({sessionData:n,options:r,refreshTokenId:t}){let o=r.authentication?.accessToken?.secret;if(!o)throw Error("Access token secret env name is not configured");let c=process.env[o];if(!c)throw Error(`Access token secret env "${o}" is not set`);return ca({subject:n.userId,issuer:r.authentication?.accessToken?.issuer,audience:r.authentication?.accessToken?.audience,algorithm:r.authentication?.accessToken?.algorithm,expiresInSeconds:ot(r.authentication?.accessToken?.expiresIn??"15m"),sessionId:n.id,customClaims:{refreshTokenId:t}},c)}function xo(n,r){return n?{entityName:n.entity_name,entityId:n.entity_id===" - "?null:n.entity_id,operation:n.operation_type,userId:n.user_id==="unknown"?null:n.user_id,summary:r,ipAddress:n.ip_address,userAgent:n.user_agent,path:n.path,query:n.query}:void 0}function ql(n){let r=(a)=>{if(typeof a!=="string")return;try{return JSON.parse(a)}catch{return}},t=n.page?parseInt(n.page,10):1,o=n.limit?parseInt(n.limit,10):20,c=n.offset?parseInt(n.offset,10):(t-1)*o;return{page:t,limit:o,offset:c,search:n.search,searchFields:n.searchFields?n.searchFields.split(","):void 0,filters:r(n.filters),sort:r(n.sort),select:n.select?n.select.split(","):void 0,with:r(n.with),distinct:n.distinct==="true",distinctOn:n.distinctOn?n.distinctOn.split(","):void 0}}function Qu(n,r,t,o){let c=Math.ceil(o/r),a=n<c,e=n>1;return{page:n,limit:r,offset:t,totalItems:o,totalPages:c,hasNextPage:a,hasPrevPage:e,nextPage:a?n+1:null,prevPage:e?n-1:null}}function S5(n){let r=["varchar","char","text","uuid","citext","bit","varbit"],t=["integer","smallint","bigint","serial","smallserial","bigserial","real","doublePrecision","numeric","decimal"],o=["boolean"];if(r.includes(n))return(c)=>({valid:typeof c==="string",expectedType:"string"});if(t.includes(n))return(c)=>({valid:typeof c==="number",expectedType:"number"});if(o.includes(n))return(c)=>({valid:typeof c==="boolean",expectedType:"boolean"});if(n==="json"||n==="jsonb")return(c)=>({valid:typeof c==="object",expectedType:"object"});return()=>({valid:!0,expectedType:"any"})}function bc(n,r,t=!1){let o=[];for(let c of r){let a=n[c.name],e=c.notNull&&!c.nullable&&c.default===void 0&&!c.defaultRaw;if(a===void 0||a===null){if(e&&!t)o.push({field:c.name,message:c.validation?.customMessage||`${c.name} is required`});continue}let i=S5(c.type)(a);if(!i.valid){o.push({field:c.name,message:c.validation?.customMessage||`${c.name} must be of type ${i.expectedType}`});continue}if(typeof a==="string"){let s=a.length;if(c.length&&s>c.length)o.push({field:c.name,message:c.validation?.customMessage||`${c.name} exceeds max length of ${c.length}`});if(c.validation?.minLength&&s<c.validation.minLength)o.push({field:c.name,message:c.validation.customMessage||`${c.name} must be at least ${c.validation.minLength} characters`});if(c.validation?.maxLength&&s>c.validation.maxLength)o.push({field:c.name,message:c.validation.customMessage||`${c.name} must be at most ${c.validation.maxLength} characters`});if(c.validation?.pattern){if(!new RegExp(c.validation.pattern).test(a))o.push({field:c.name,message:c.validation.customMessage||`${c.name} does not match required pattern`})}if(c.validation?.format){let l=A5[c.validation.format];if(l&&!l.test(a))o.push({field:c.name,message:c.validation.customMessage||`${c.name} must be a valid ${c.validation.format}`})}}if(typeof a==="number"){if(c.validation?.min!==void 0&&a<c.validation.min)o.push({field:c.name,message:c.validation.customMessage||`${c.name} must be at least ${c.validation.min}`});if(c.validation?.max!==void 0&&a>c.validation.max)o.push({field:c.name,message:c.validation.customMessage||`${c.name} must be at most ${c.validation.max}`})}if(c.enumValues&&c.enumValues.length>0){if(!c.enumValues.includes(a))o.push({field:c.name,message:c.validation?.customMessage||`${c.name} must be one of: ${c.enumValues.join(", ")}`})}}return{valid:o.length===0,errors:o}}function M5(n){return n.replace(/[&<>"'`=/]/g,(r)=>E5[r]||r)}function D5(n){return n.replace(/<[^>]*>/g,"")}function H5(n){let r=n.split("@"),t=r[0],o=r[1];if(!t||!o)return n;let c=t.split("+")[0];if(!c)return n;return`${c.replace(/\./g,"")}@${o.toLowerCase()}`}function z5(n){return n.toLowerCase().trim().replace(/[^\w\s-]/g,"").replace(/[\s_-]+/g,"-").replace(/^-+|-+$/g,"")}function U5(n,r){if(n===null||n===void 0)return n;switch(r){case"trim":return typeof n==="string"?n.trim():n;case"lowercase":return typeof n==="string"?n.toLowerCase():n;case"uppercase":return typeof n==="string"?n.toUpperCase():n;case"escapeHtml":return typeof n==="string"?M5(n):n;case"stripTags":return typeof n==="string"?D5(n):n;case"normalizeEmail":return typeof n==="string"?H5(n):n;case"toNumber":if(typeof n==="number")return n;if(typeof n==="string"){let t=Number(n);return Number.isNaN(t)?n:t}return n;case"toBoolean":if(typeof n==="boolean")return n;if(typeof n==="string"){let t=n.toLowerCase();if(t==="true"||t==="1"||t==="yes")return!0;if(t==="false"||t==="0"||t==="no")return!1}if(typeof n==="number")return n!==0;return n;case"slugify":return typeof n==="string"?z5(n):n;default:return n}}function uc(n,r){let t={};for(let o of Object.keys(n)){let c=n[o],a=r.find((e)=>e.name===o);if(a?.sanitize&&a.sanitize.length>0)for(let e of a.sanitize)c=U5(c,e);t[o]=c}return t}async function Pu(n,r,t){let o=new Nn,c=`${W5}${n}`,a=`${B5}${n}:${r}`,e=await o.read(a);if(e.success&&e.data)return{success:!0,accessToken:e.data,fromCache:!0};let i=await o.acquireLock(c,Y5);if(!i.success)return{success:!1,error:i.error};if(i.data)try{let b=t();return await o.create(a,b,Lu),{success:!0,accessToken:b,fromCache:!1}}finally{await o.releaseLock(c)}let s=await o.waitForLock(c,J5,50);if(!s.success)return{success:!1,error:s.error};if(!s.data)return{success:!1,error:"Lock wait timeout"};let l=await o.read(a);if(l.success&&l.data)return{success:!0,accessToken:l.data,fromCache:!0};let d=t();return await o.create(a,d,Lu),{success:!0,accessToken:d,fromCache:!1}}function Gu(n){let r=[],t={};if(n.database?.url){let o=process.env[n.database.url];if(!o)r.push({field:"database.url",envName:n.database.url,message:`Environment variable "${n.database.url}" is not set. Please set it in your .env file.`});else t.databaseUrl=o}if(n.redis&&!n.redis.withDapr)if(n.redis.url){let o=process.env[n.redis.url];if(!o)r.push({field:"redis.url",envName:n.redis.url,message:`Environment variable "${n.redis.url}" is not set. Please set it in your .env file.`});else t.redisUrl=o}else{if(n.redis.host){if(!process.env[n.redis.host])r.push({field:"redis.host",envName:n.redis.host,message:`Environment variable "${n.redis.host}" is not set. Please set it in your .env file.`})}if(n.redis.port){if(!process.env[n.redis.port])r.push({field:"redis.port",envName:n.redis.port,message:`Environment variable "${n.redis.port}" is not set. Please set it in your .env file.`})}}if(n.authentication?.enabled){if(n.authentication.accessToken?.secret){let o=process.env[n.authentication.accessToken.secret];if(!o)r.push({field:"authentication.accessToken.secret",envName:n.authentication.accessToken.secret,message:`Environment variable "${n.authentication.accessToken.secret}" is not set. Please set it in your .env file.`});else t.accessTokenSecret=o}else r.push({field:"authentication.accessToken.secret",envName:"",message:"authentication.accessToken.secret is required when authentication is enabled."});if(n.authentication.refreshToken?.secret){let o=process.env[n.authentication.refreshToken.secret];if(!o)r.push({field:"authentication.refreshToken.secret",envName:n.authentication.refreshToken.secret,message:`Environment variable "${n.authentication.refreshToken.secret}" is not set. Please set it in your .env file.`});else t.refreshTokenSecret=o}else r.push({field:"authentication.refreshToken.secret",envName:"",message:"authentication.refreshToken.secret is required when authentication is enabled."});if(n.authentication.sessionToken?.secret){let o=process.env[n.authentication.sessionToken.secret];if(!o)r.push({field:"authentication.sessionToken.secret",envName:n.authentication.sessionToken.secret,message:`Environment variable "${n.authentication.sessionToken.secret}" is not set. Please set it in your .env file.`});else t.sessionTokenSecret=o}else r.push({field:"authentication.sessionToken.secret",envName:"",message:"authentication.sessionToken.secret is required when authentication is enabled."})}return{valid:r.length===0,errors:r,resolved:t}}async function qu(n,r){let{Pool:t}=await import("pg"),c=new URL(n).pathname.replace("/","");if(!c)return;let a=new URL(n);a.pathname="/postgres";let e=new t({connectionString:a.toString()});try{if((await e.query("SELECT 1 FROM pg_database WHERE datname = $1",[c])).rowCount===0)r.info(`[Database] Creating database "${c}"...`),await e.query(`CREATE DATABASE "${c}" TEMPLATE template0`),r.info(`[Database] Database "${c}" created successfully`);else r.info(`[Database] Database "${c}" exists`)}catch(i){let s=i instanceof Error?i.message:String(i);r.warn(`[Database] Could not auto-create database: ${s}`)}finally{await e.end()}}var Pl=null,A5,E5,B5="access_token:",W5="refresh_lock:",Y5=5,J5=3000,Lu=60;var Ne=f(()=>{xu();Hl();A5={email:/^[^\s@]+@[^\s@]+\.[^\s@]+$/,url:/^https?:\/\/.+/,uuid:/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,date:/^\d{4}-\d{2}-\d{2}$/,datetime:/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/,time:/^\d{2}:\d{2}:\d{2}$/,uri:/^[a-z][a-z0-9+.-]*:/i,ipv4:/^(\d{1,3}\.){3}\d{1,3}$/,ipv6:/^([0-9a-f]{1,4}:){7}[0-9a-f]{1,4}$/i};E5={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="}});import Oe from"path";import X5,{t as Fe}from"elysia";function Nl(n){if(!n)return Lo;return{enabled:n.enabled??Lo.enabled,basePath:n.basePath??Lo.basePath,cacheMaxAge:n.cacheMaxAge??Lo.cacheMaxAge,enableRangeRequests:n.enableRangeRequests??Lo.enableRangeRequests,enableEtag:n.enableEtag??Lo.enableEtag,corsOrigins:n.corsOrigins??Lo.corsOrigins}}function x5(n){let r=["image/","video/","audio/","text/","application/pdf"];for(let t of r)if(n.startsWith(t)||n===t)return"inline";return"attachment"}function L5(n){return n.replace(/[^A-Za-z0-9._-]+/g,"_").replace(/_{2,}/g,"_").slice(0,200)}function Ol(n){let{cdn:r,storagePath:t,logger:o,getFileRecord:c}=n,a=new X5({prefix:r.basePath});if(!r.enabled)return a;return a.get("/:id",async({params:e,request:i,set:s})=>{let{id:l}=e,d=i.headers.get("x-schema-name")||void 0,b,u,$;if(c){let g=await c(l,d);if(!g)return s.status=404,{success:!1,message:"File not found"};b=Oe.join(g.path,g.name),u=g.name,$=g.mimeType||g.mime_type||"application/octet-stream"}else b=Oe.join(t,l),u=l,$="application/octet-stream";if(!await Rt.exists(b))return s.status=404,{success:!1,message:"Physical file not found"};let w=await Rt.getFileInfo(b),_=new Date(w.modifiedAt||Date.now()).toUTCString(),R=r.enableEtag?`"${w.size}-${w.modifiedAt?.getTime()||Date.now()}"`:void 0,X={"Cache-Control":`public, max-age=${r.cacheMaxAge}`,"Last-Modified":_};if(R)X.ETag=R;if(r.corsOrigins.length>0)X["Access-Control-Allow-Origin"]=r.corsOrigins[0]==="*"?"*":r.corsOrigins.join(", "),X["Access-Control-Allow-Methods"]="GET, HEAD, OPTIONS";let x=i.headers.get("if-none-match");if(R&&x===R)return new Response(null,{status:304,headers:X});let E=Bun.file(b),P=i.headers.get("range");if(r.enableRangeRequests&&P){let g=P.match(/bytes=(\d*)-(\d*)/);if(!g)return s.status=416,new Response("Range not satisfiable",{status:416,headers:{"Content-Range":`bytes */${w.size}`,"Content-Type":$,...X}});let B=g[1]||"0",G=g[2]||"",L=parseInt(B,10),O=G?parseInt(G,10):w.size-1;if(L>=w.size||O>=w.size||L>O)return new Response("Range not satisfiable",{status:416,headers:{"Content-Range":`bytes */${w.size}`,"Content-Type":$,...X}});let v=O-L+1,J=E.slice(L,O+1);return new Response(J,{status:206,headers:{"Content-Range":`bytes ${L}-${O}/${w.size}`,"Accept-Ranges":"bytes","Content-Length":v.toString(),"Content-Type":$,...X}})}let M=x5($),A=L5(u),z=encodeURIComponent(u),h=`${M}; filename="${A}"; filename*=UTF-8''${z}`;return new Response(E,{status:200,headers:{"Content-Length":w.size.toString(),"Content-Type":$,"Accept-Ranges":r.enableRangeRequests?"bytes":"none","Content-Disposition":h,...X}})},{params:Fe.Object({id:Fe.String()}),detail:{tags:["CDN"],summary:"Get file by ID",description:"Serve file with streaming, range requests, and caching support"}}),a.head("/:id",async({params:e,request:i,set:s})=>{let{id:l}=e,d=i.headers.get("x-schema-name")||void 0,b,u;if(c){let X=await c(l,d);if(!X)return s.status=404,new Response(null,{status:404});b=Oe.join(X.path,X.name),u=X.mime_type||"application/octet-stream"}else b=Oe.join(t,l),u="application/octet-stream";if(!await Rt.exists(b))return s.status=404,new Response(null,{status:404});let k=await Rt.getFileInfo(b),w=new Date(k.modifiedAt||Date.now()).toUTCString(),_=r.enableEtag?`"${k.size}-${k.modifiedAt?.getTime()||Date.now()}"`:void 0,R={"Content-Length":k.size.toString(),"Content-Type":u,"Accept-Ranges":r.enableRangeRequests?"bytes":"none","Cache-Control":`public, max-age=${r.cacheMaxAge}`,"Last-Modified":w};if(_)R.ETag=_;if(r.corsOrigins.length>0)R["Access-Control-Allow-Origin"]=r.corsOrigins[0]==="*"?"*":r.corsOrigins.join(", "),R["Access-Control-Allow-Methods"]="GET, HEAD, OPTIONS";return new Response(null,{status:200,headers:R})},{params:Fe.Object({id:Fe.String()}),detail:{tags:["CDN"],summary:"Get file metadata",description:"Get file headers without body for preflight checks"}}),o.info(`[CDN] Routes enabled at ${r.basePath}`),a}var Lo;var Nu=f(()=>{Ge();Lo={enabled:!0,basePath:"/cdn",cacheMaxAge:86400,enableRangeRequests:!0,enableEtag:!0,corsOrigins:["*"]}});import{randomUUID as V5}from"crypto";import Fl from"path";function ba(n){if(!n)return Lt;return{enabled:n.enabled??Lt.enabled,basePath:n.basePath??Lt.basePath,maxFileSizeBytes:n.maxFileSizeBytes??Lt.maxFileSizeBytes,allowedMimeTypes:n.allowedMimeTypes??Lt.allowedMimeTypes,blockedMimeTypes:n.blockedMimeTypes??Lt.blockedMimeTypes,formData:{filesField:n.formData?.filesField??Lt.formData.filesField,dataField:n.formData?.dataField??Lt.formData.dataField,maxFiles:n.formData?.maxFiles??Lt.formData.maxFiles}}}function ua(n,r){let t={data:{},files:[]};if(!n||typeof n!=="object")return t;let o=n,c=o[r.formData.dataField];if(c){if(typeof c==="string")try{t.data=JSON.parse(c)}catch{t.data={}}else if(typeof c==="object")t.data=c}let a=o[r.formData.filesField];if(a){if(a instanceof File)t.files=[a];else if(Array.isArray(a))t.files=a.filter((e)=>e instanceof File)}return t}function jl(n,r){if(n.size>r.maxFileSizeBytes)return{valid:!1,error:`File ${n.name} exceeds maximum size of ${r.maxFileSizeBytes} bytes`};if(r.blockedMimeTypes.length>0&&r.blockedMimeTypes.includes(n.type))return{valid:!1,error:`File type ${n.type} is not allowed`};if(r.allowedMimeTypes.length>0&&!r.allowedMimeTypes.includes(n.type))return{valid:!1,error:`File type ${n.type} is not in allowed list`};return{valid:!0}}async function Kl(n,r,t){let o=V5(),c=Fl.extname(n.name),a=`${o}${c}`,e=t?Fl.join(r.basePath,t):r.basePath,i=await n.arrayBuffer(),s=new Uint8Array(i);return await Rt.createFile({dir:e,name:a,data:s,options:{type:n.type,createDir:!0}}),{id:o,name:a,originalName:n.name,path:e,mimeType:n.type,size:n.size,createdAt:new Date}}async function ga(n,r,t){let o=[],c=[];for(let a of n.slice(0,r.formData.maxFiles)){let e=jl(a,r);if(!e.valid){c.push({file:a.name,error:e.error||"Unknown error"});continue}try{let i=await Kl(a,r,t);o.push(i)}catch(i){c.push({file:a.name,error:i instanceof Error?i.message:"Upload failed"})}}return{success:o,failed:c}}async function Ou(n,r){try{let t=Fl.join(n,r);return await Rt.deleteFile(t)}catch{return!1}}var Lt;var Fu=f(()=>{Ge();Lt={enabled:!1,basePath:"./uploads",maxFileSizeBytes:104857600,allowedMimeTypes:[],blockedMimeTypes:["application/x-executable","application/x-msdos-program"],formData:{filesField:"files",dataField:"data",maxFiles:10}}});var ju={};Zt(ju,{validateFile:()=>jl,uploadFiles:()=>ga,uploadFile:()=>Kl,parseFormDataBody:()=>ua,mergeStorageConfig:()=>ba,mergeCdnConfig:()=>Nl,deleteFile:()=>Ou,createCdnRoutes:()=>Ol});var je=f(()=>{Nu();Fu()});import{Elysia as W$,t as Rr}from"elysia";function xg(n){let{captchaService:r,logger:t,basePath:o="/auth/captcha"}=n,c=new W$;if(!r.isEnabled())return c;return c.get(`${o}/generate`,async(a)=>{let{type:e,difficulty:i}=a.query,s=a.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||a.request.headers.get("x-real-ip")?.trim()||a.request.headers.get("cf-connecting-ip")?.trim()||"unknown",l=await r.generate(e,i,s);if(l.rateLimited)return a.set.status=429,{success:!1,message:l.message??"Too many requests. Please try again later."};return t.info("[CAPTCHA] Challenge generated via endpoint",{challengeId:l.challengeId,type:l.type,ipAddress:s}),{success:!0,data:{challengeId:l.challengeId,type:l.type,question:l.question,expiresAt:l.expiresAt,...l.imageData?{imageData:l.imageData}:{},...l.puzzleData?{puzzleData:{pieces:l.puzzleData.pieces}}:{}}}},{query:Y$,detail:{tags:["Captcha"],summary:"Generate Captcha",description:"Generate a new captcha challenge"}}),c.post(`${o}/validate`,async(a)=>{let{challengeId:e,answer:i}=a.body,s=await r.validate(e,i);if(!s.valid)a.set.status=400;return s},{body:J$,detail:{tags:["Captcha"],summary:"Validate Captcha",description:"Validate a captcha answer"}}),c}var Y$,J$;var Lg=f(()=>{Y$=Rr.Object({type:Rr.Optional(Rr.Union([Rr.Literal("math"),Rr.Literal("image"),Rr.Literal("puzzle"),Rr.Literal("text")])),difficulty:Rr.Optional(Rr.Union([Rr.Literal("easy"),Rr.Literal("medium"),Rr.Literal("hard")]))}),J$=Rr.Object({challengeId:Rr.String(),answer:Rr.String()})});import X$ from"crypto";var{password:x$}=globalThis.Bun;async function bo(n){return await x$.hash(n,{algorithm:"bcrypt",cost:10})}function ye(){return X$.randomBytes(32).toString("hex")}function Bc(n){let r=n.match(/^(\d+)(s|m|h|d)$/);if(!r||!r[1]||!r[2])return 86400000;let t=Number.parseInt(r[1],10);switch(r[2]){case"s":return t*1000;case"m":return t*60*1000;case"h":return t*60*60*1000;case"d":return t*24*60*60*1000;default:return 86400000}}function Vg(n){let r=[];if(n.length<8)r.push("Password must be at least 8 characters");if(!/[A-Z]/.test(n))r.push("Password must contain uppercase letter");if(!/[a-z]/.test(n))r.push("Password must contain lowercase letter");if(!/[0-9]/.test(n))r.push("Password must contain a number");return{valid:r.length===0,errors:r}}var Wc=()=>{};import{sql as ni}from"drizzle-orm";import{Elysia as L$,t as ri}from"elysia";function ti(n){let{authConfig:r,registerConfig:t,emailService:o,appName:c}=n,{db:a,logger:e,usersTable:i}=r,s=new L$;if(!t.enabled||!t.emailVerification?.enabled)return s;let l="/verify-email",d="/resend-verification";return s.get(l,async(b)=>{if(!a||!i)return{success:!1,message:"Database not configured"};let u=b.query.token;if(!u)return{success:!1,message:"Verification token is required"};let $=await a.select().from(i).where(ni`email_verification_token = ${u}`).limit(1);if($.length===0)return e.warn("[AUTH] Email verification failed - invalid token"),{success:!1,message:"Invalid or expired verification token"};let k=$[0],w=k.emailVerificationTokenExpiresAt;if(w&&new Date>new Date(w))return e.warn("[AUTH] Email verification failed - token expired",{userId:k.id,email:k.email}),{success:!1,message:"Verification token has expired. Please request a new one."};if(await a.update(i).set({verifiedAt:new Date,emailVerificationToken:null,emailVerificationTokenExpiresAt:null}).where(ni`id = ${k.id}`),e.info("[AUTH] Email verified successfully",{userId:k.id,email:k.email}),t.emailVerification?.templates?.welcome?.enabled&&o?.isAvailable())o.sendWelcomeEmail(k.email,k.email.split("@")[0]||"User",c||"Nucleus").catch((R)=>{e.error("[AUTH] Failed to send welcome email after verification",{email:k.email,error:R})});return{success:!0,message:"Email verified successfully. You can now log in.",data:{redirectUrl:t.emailVerification?.redirectUrl||"/login",verified:!0}}},{query:ri.Object({token:ri.String()}),detail:{tags:["Authentication"],summary:"Verify Email",description:"Verify user email address using the verification token"}}),s.post(d,async(b)=>{if(!a||!i)return{success:!1,message:"Database not configured"};if(!o?.isAvailable())return{success:!1,message:"Email service not available"};let{email:u}=b.body,$=await a.select().from(i).where(ni`email = ${u}`).limit(1);if($.length===0)return{success:!0,message:"If your email is registered, you will receive a verification email."};let k=$[0];if(k.verifiedAt)return{success:!1,message:"Email is already verified"};let w=t.emailVerification?.maxResendAttempts||3,_=k.emailVerificationAttempts||0;if(_>=w)return e.warn("[AUTH] Resend verification failed - max attempts reached",{email:u,attempts:_}),{success:!1,message:"Maximum resend attempts reached. Please contact support.",data:{maxAttemptsReached:!0,attemptsUsed:_,maxAttempts:w}};let R=t.emailVerification?.resendCooldown||"60s",X=Bc(R),x=k.emailVerificationSentAt;if(x){let g=Date.now()-new Date(x).getTime();if(g<X){let B=Math.ceil((X-g)/1000);return{success:!1,message:`Please wait ${B} seconds before requesting another verification email.`,data:{cooldownRemaining:B,canResendAt:new Date(Date.now()+B*1000).toISOString()}}}}let E=ye(),P=t.emailVerification?.tokenExpiresIn||"24h",M=new Date(Date.now()+Bc(P));await a.update(i).set({emailVerificationToken:E,emailVerificationTokenExpiresAt:M,emailVerificationSentAt:new Date,emailVerificationAttempts:_+1}).where(ni`id = ${k.id}`);let z=`${(t.emailVerification?.redirectUrl||"http://localhost:3000/login").replace("/login","/verify-email")}?token=${E}`,h=await o.sendVerificationEmail(u,u.split("@")[0]||"User",z,c||"Nucleus");if(h.success)return e.info("[AUTH] Verification email resent",{email:u}),{success:!0,message:"Verification email sent. Please check your inbox.",data:{cooldownSeconds:Math.ceil(X/1000),canResendAt:new Date(Date.now()+X).toISOString(),attemptsRemaining:w-(_+1)}};return e.error("[AUTH] Failed to resend verification email",{email:u,error:h.error}),{success:!1,message:"Failed to send verification email. Please try again later."}},{body:ri.Object({email:ri.String({format:"email"})}),detail:{tags:["Authentication"],summary:"Resend Verification Email",description:"Resend the email verification link to the user"}}),s}var bf=f(()=>{Wc()});import Cg from"crypto";function oi(){return Cg.randomBytes(32).toString("hex")}function Pt(n){return Cg.createHash("sha256").update(n).digest("hex")}function ci(n){let r=n.match(/^(\d+)(s|m|h|d)$/);if(!r?.[1]||!r[2])return 900000;let t=parseInt(r[1],10);switch(r[2]){case"s":return t*1000;case"m":return t*60*1000;case"h":return t*60*60*1000;case"d":return t*24*60*60*1000;default:return 900000}}var ai=()=>{};import{eq as V$}from"drizzle-orm";import{Elysia as C$,t as ei}from"elysia";function ii(n,r,t,o,c,a){let{db:e,logger:i,usersTable:s}=n,l=r.route||"/auth/invite",d=r.tokenExpiresIn||"7d",b=r.redirectUrl||"",u=new C$;if(!r.enabled)return u;if(u.post(l,async($)=>{if(!e||!s)return{success:!1,message:"Database not configured"};if(!t?.isAvailable())return i.error("[AUTH] Invite requested but email service not available"),{success:!1,message:"Email service not available"};let{email:k}=$.body,w=await e.select().from(s).where(V$(s.email,k)).limit(1),_;if(w.length>0){let M=w[0];if(M.verifiedAt||M.password)return i.warn("[AUTH] Invite failed - user already verified",{email:k}),{success:!1,message:"User with this email is already verified"};_=M.id,i.info("[AUTH] Resending invitation to existing unverified user",{userId:_,email:k})}else{let M={email:k,password:null,emailVerified:!1,isLocked:!1,createdAt:new Date,updatedAt:new Date},z=(await e.insert(s).values(M).returning())[0];if(!z)return i.error("[AUTH] Failed to create invited user",{email:k}),{success:!1,message:"Failed to create user"};_=z.id,i.info("[AUTH] Invited user created",{userId:_,email:k})}let R=oi(),X=Pt(R),x=new Date(Date.now()+ci(d));await o({userId:_,email:k,tokenHash:X,expiresAt:x});let E=b?`${b}?token=${R}&invite=true`:`/auth/magic-link/verify?token=${R}`,P=await t.sendInvitationEmail(k,E,c||"Nucleus");if(!P.success)return i.error("[AUTH] Failed to send invitation email",{email:k,error:P.error}),{success:!0,message:"User created but failed to send invitation email",data:{id:_,email:k}};return i.info("[AUTH] Invitation email sent",{email:k,userId:_}),{success:!0,message:"Invitation sent successfully",data:{id:_,email:k}}},{body:Q$,detail:{tags:["Authentication"],summary:"Invite User",description:"Invite a new user by sending them an email with a magic link to set their password"}}),a)u.post(`${l}/verify`,async($)=>{let{token:k}=$.body;if(!k)return{success:!1,message:"Token is required"};let w=Pt(k),_=await a(w);if(!_)return i.warn("[AUTH] Invalid invite verify token"),{success:!1,message:"Invalid or expired token"};if(new Date>_.expiresAt)return i.warn("[AUTH] Expired invite verify token",{email:_.email}),{success:!1,message:"Invalid or expired token"};return i.info("[AUTH] Invite token verified (not consumed)",{email:_.email,userId:_.userId}),{success:!0,data:{userId:_.userId,email:_.email}}},{body:ei.Object({token:ei.String()}),detail:{tags:["Authentication"],summary:"Verify Invite Token",description:"Validate an invite token without consuming it. Returns user info if valid."}});return u}var Q$;var uf=f(()=>{ai();Q$=ei.Object({email:ei.String({format:"email"})})});import{t as In}from"elysia";var gf,P$;var _f=f(()=>{gf=In.Object({email:In.String({format:"email"}),password:In.String({minLength:1}),rememberMe:In.Optional(In.Boolean()),captchaId:In.Optional(In.String()),captchaAnswer:In.Optional(In.String())}),P$=In.Object({success:In.Boolean(),message:In.Optional(In.String()),data:In.Optional(In.Object({user:In.Object({id:In.String(),email:In.String()}),accessToken:In.String(),refreshToken:In.String()}))})});var{password:G$}=globalThis.Bun;async function si(n,r){try{return await G$.verify(n,r)}catch{return!1}}function Qg(n,r){let t=n.toLowerCase(),o=["headlesschrome","headless","phantomjs","nightmare","selenium","webdriver","puppeteer","playwright"],c=["bot","crawler","spider","scraper","curl","wget","python-requests","python-urllib","java/","httpclient","go-http-client","node-fetch","axios","postman","insomnia","httpie"],a=o.some((w)=>t.includes(w)),e=c.some((w)=>t.includes(w)),i=a||e,s=[];if(a)s.push("headless_browser");if(e)s.push("bot_user_agent");if(!t||t.length<10)s.push("missing_or_short_ua");if(t==="mozilla/5.0")s.push("generic_ua");if(t.includes("nucleusserveraction")||t.includes("serveraction"))s.push("server_action");let l="unknown";if(t.includes("mobile")||t.includes("android")&&!t.includes("tablet"))l="mobile";else if(t.includes("tablet")||t.includes("ipad"))l="tablet";else if(t.includes("windows")||t.includes("macintosh")||t.includes("linux"))l="desktop";let d,b;if(a)d="Headless Browser";else if(e)d="Bot/Crawler";else if(t.includes("chrome")&&!t.includes("edg")){d="Chrome";let w=n.match(/Chrome\/(\d+\.\d+)/i);if(w?.[1])b=w[1]}else if(t.includes("firefox")){d="Firefox";let w=n.match(/Firefox\/(\d+\.\d+)/i);if(w?.[1])b=w[1]}else if(t.includes("safari")&&!t.includes("chrome")){d="Safari";let w=n.match(/Version\/(\d+\.\d+)/i);if(w?.[1])b=w[1]}else if(t.includes("edg")){d="Edge";let w=n.match(/Edg\/(\d+\.\d+)/i);if(w?.[1])b=w[1]}let u,$;if(t.includes("windows nt 10"))u="Windows",$="10/11";else if(t.includes("windows nt"))u="Windows";else if(t.includes("mac os x")){u="macOS";let w=n.match(/Mac OS X (\d+[._]\d+)/i);if(w?.[1])$=w[1].replace("_",".")}else if(t.includes("android")){u="Android";let w=n.match(/Android (\d+\.?\d*)/i);if(w?.[1])$=w[1]}else if(t.includes("iphone")||t.includes("ipad")){u="iOS";let w=n.match(/OS (\d+[._]\d+)/i);if(w?.[1])$=w[1].replace("_",".")}else if(t.includes("linux"))u="Linux";return{deviceName:d&&u?`${d} on ${u}`:"Unknown Device",deviceType:l,browserName:d,browserVersion:b,osName:u,osVersion:$,ipAddress:r,userAgent:n,locationCountry:void 0,locationCity:void 0,isHeadless:a,isBot:e,isSuspicious:i,suspiciousPatterns:s}}var mf=()=>{};import{eq as wf}from"drizzle-orm";import{Elysia as q$}from"elysia";function li(n,r,t,o,c,a,e,i,s){let{db:l,logger:d,usersTable:b}=n,u=r.route||"/auth/login",$={accessTokenName:e?.accessTokenName||"access_token",refreshTokenName:e?.refreshTokenName||"refresh_token",sessionTokenName:e?.sessionTokenName||"session_token",accessTokenMaxAge:e?.accessTokenMaxAge||900,refreshTokenMaxAge:e?.refreshTokenMaxAge||604800,sessionTokenMaxAge:e?.sessionTokenMaxAge||900,secure:e?.secure??!0,httpOnly:e?.httpOnly??!0,sameSite:e?.sameSite||"strict",path:e?.path||"/"},k=new q$;if(!r.enabled)return k;return k.post(u,async(w)=>{if(!l||!b)return{success:!1,message:"Database not configured"};let{email:_,password:R,rememberMe:X,captchaId:x,captchaAnswer:E}=w.body;if(s?.isEnabled()){if(!x||!E)return w.set.status=400,{success:!1,message:"Captcha is required"};let rn=await s.validate(x,E);if(!rn.valid)return w.set.status=400,{success:!1,message:rn.message||"Invalid captcha",attemptsRemaining:rn.attemptsRemaining}}let M=(await l.select().from(b).where(wf(b.email,_)).limit(1))[0],A=new URL(w.request.url),z=w.request.headers.get("cf-connecting-ip")?.trim()||w.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||w.request.headers.get("x-real-ip")?.trim()||"unknown",h=w.request.headers.get("user-agent")||"unknown";if(!M)return d.warn("[AUTH] Login failed - user not found",{email:_}),await d.audit({entityName:"users",operation:"LOGIN_FAILED",summary:`Login failed: user not found (${_})`,ipAddress:z,userAgent:h,path:A.pathname,query:A.search}),{success:!1,message:"Invalid email or password"};if(M.isLocked)return d.warn("[AUTH] Login failed - account locked",{email:_,userId:M.id}),await d.audit({entityName:"users",entityId:M.id,operation:"LOGIN_FAILED",userId:M.id,summary:`Login failed: account locked (${_})`,ipAddress:z,userAgent:h,path:A.pathname,query:A.search}),{success:!1,message:"Account is locked"};if(!await si(R,M.password)){let rn=(M.failedLoginAttempts||0)+1;return await l.update(b).set({failedLoginAttempts:rn,isLocked:rn>=5,lockedUntil:rn>=5?new Date(Date.now()+1800000):null}).where(wf(b.id,M.id)),d.warn("[AUTH] Login failed - invalid password",{email:_,failedAttempts:rn}),await d.audit({entityName:"users",entityId:M.id,operation:"LOGIN_FAILED",userId:M.id,summary:`Login failed: invalid password (${_}, attempt ${rn})`,ipAddress:z,userAgent:h,path:A.pathname,query:A.search}),{success:!1,message:"Invalid email or password"}}await l.update(b).set({failedLoginAttempts:0,lastLoginAt:new Date,loginCount:(M.loginCount||0)+1}).where(wf(b.id,M.id));let B={};w.request.headers.forEach((rn,en)=>{B[en]=rn}),d.info("[AUTH] Login request headers",{headers:B});let G=w.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim(),L=(rn)=>!rn||rn==="127.0.0.1"||rn==="::1"||rn==="localhost"||rn.startsWith("10.")||rn.startsWith("192.168.")||rn.startsWith("172."),O=w.request.headers.get("cf-connecting-ip")?.trim()||w.request.headers.get("true-client-ip")?.trim()||(!L(G)?G:void 0)||w.request.headers.get("x-real-ip")?.trim()||w.request.headers.get("x-client-ip")?.trim()||G||"127.0.0.1",v=w.request.headers.get("user-agent")||"Unknown Browser";d.info("[AUTH] Parsed device info",{ipAddress:O,userAgent:v});let J=Qg(v,O);try{if(!L(O)){let rn=await fetch(`http://ip-api.com/json/${O}?fields=country,city`);if(rn.ok){let en=await rn.json();if(en.country)J.locationCountry=en.country;if(en.city)J.locationCity=en.city}}}catch{}let W=t(M.id),U=o(M.id),Y={userId:M.id,deviceInfo:J,loginMethod:"password",rememberMe:X},Q=await c(Y);if(a)await a(Q,Y);d.info("[AUTH] Login successful",{userId:M.id,email:_,rememberMe:X}),await d.audit({entityName:"users",entityId:M.id,operation:"LOGIN",userId:M.id,summary:`${_} logged in successfully`,ipAddress:O,userAgent:v,path:A.pathname,query:A.search});let F={accessToken:{setHeadersEnabled:i?.accessToken?.setHeadersEnabled??!0,returnJson:i?.accessToken?.returnJson??!0},refreshToken:{setHeadersEnabled:i?.refreshToken?.setHeadersEnabled??!0,returnJson:i?.refreshToken?.returnJson??!0},sessionToken:{setHeadersEnabled:i?.sessionToken?.setHeadersEnabled??!0,returnJson:i?.sessionToken?.returnJson??!0}},K=$.secure?"; Secure":"",N=`; Path=${$.path}; HttpOnly; SameSite=${$.sameSite}${K}`,tn=[];if(F.accessToken.setHeadersEnabled)tn.push(`${$.accessTokenName}=${W}${N}; Max-Age=${$.accessTokenMaxAge}`);if(F.refreshToken.setHeadersEnabled)tn.push(`${$.refreshTokenName}=${U}${N}; Max-Age=${$.refreshTokenMaxAge}`);if(F.sessionToken.setHeadersEnabled)tn.push(`${$.sessionTokenName}=${Q}${N}; Max-Age=${$.sessionTokenMaxAge}`);w.set.headers["x-session-id"]=Q;let sn={user:{id:M.id,email:M.email}};if(F.accessToken.returnJson)sn.accessToken=W;if(F.refreshToken.returnJson)sn.refreshToken=U;if(F.sessionToken.returnJson)sn.sessionId=Q;let kn=JSON.stringify({success:!0,data:sn}),ar=new Headers;ar.set("Content-Type","application/json"),ar.set("x-session-id",Q);for(let rn of tn)ar.append("Set-Cookie",rn);return new Response(kn,{status:200,headers:ar})},{body:gf,detail:{tags:["Authentication"],summary:"Login",description:"Authenticate user with email and password"}}),k}var hf=f(()=>{_f();mf();_f()});function Pg(){return{"Set-Cookie":["access_token=; Path=/; HttpOnly; SameSite=Strict; Max-Age=0","refresh_token=; Path=/; HttpOnly; SameSite=Strict; Max-Age=0","session_token=; Path=/; HttpOnly; SameSite=Strict; Max-Age=0"].join(", ")}}import{t as fi}from"elysia";var N$;var Gg=f(()=>{N$=fi.Object({success:fi.Boolean(),message:fi.Optional(fi.String())})});import{Elysia as O$}from"elysia";function di(n,r,t,o){let{logger:c}=n,a=r.route||"/auth/logout",e=new O$;if(!r.enabled)return e;return e.post(a,async(i)=>{let s=i.request.headers.get("x-session-id"),l=i.request.headers.get("x-user-id");if(s){if(await t(s),o)await o(s,"user_logout")}let d=Pg();for(let[u,$]of Object.entries(d))i.set.headers[u]=$;c.info("[AUTH] Logout successful",{userId:l,sessionId:s});let b=new URL(i.request.url);return c.audit({entityName:"users",entityId:l||void 0,operation:"LOGOUT",userId:l||void 0,summary:`User logged out${s?` (session: ${s.substring(0,8)}...)`:""}`,ipAddress:i.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||i.request.headers.get("x-real-ip")?.trim()||"unknown",userAgent:i.request.headers.get("user-agent")||"unknown",path:b.pathname,query:b.search}),{success:!0,message:"Logged out successfully"}},{detail:{tags:["Authentication"],summary:"Logout",description:"Logout and invalidate session"}}),e}var $f=f(()=>{Gg()});var mr={};Zt(mr,{IsUndefined:()=>Kn,IsUint8Array:()=>qt,IsSymbol:()=>Ef,IsString:()=>Wn,IsRegExp:()=>Ha,IsObject:()=>Dn,IsNumber:()=>Lr,IsNull:()=>Sf,IsIterator:()=>Af,IsFunction:()=>Rf,IsDate:()=>No,IsBoolean:()=>Gt,IsBigInt:()=>Da,IsAsyncIterator:()=>kf,IsArray:()=>jn,HasPropertyKey:()=>bi});function bi(n,r){return r in n}function kf(n){return Dn(n)&&!jn(n)&&!qt(n)&&Symbol.asyncIterator in n}function jn(n){return Array.isArray(n)}function Da(n){return typeof n==="bigint"}function Gt(n){return typeof n==="boolean"}function No(n){return n instanceof globalThis.Date}function Rf(n){return typeof n==="function"}function Af(n){return Dn(n)&&!jn(n)&&!qt(n)&&Symbol.iterator in n}function Sf(n){return n===null}function Lr(n){return typeof n==="number"}function Dn(n){return typeof n==="object"&&n!==null}function Ha(n){return n instanceof globalThis.RegExp}function Wn(n){return typeof n==="string"}function Ef(n){return typeof n==="symbol"}function qt(n){return n instanceof globalThis.Uint8Array}function Kn(n){return n===void 0}function F$(n){return n.map((r)=>ui(r))}function j$(n){return new Date(n.getTime())}function K$(n){return new Uint8Array(n)}function p$(n){return new RegExp(n.source,n.flags)}function T$(n){let r={};for(let t of Object.getOwnPropertyNames(n))r[t]=ui(n[t]);for(let t of Object.getOwnPropertySymbols(n))r[t]=ui(n[t]);return r}function ui(n){return jn(n)?F$(n):No(n)?j$(n):qt(n)?K$(n):Ha(n)?p$(n):Dn(n)?T$(n):n}function Xn(n){return ui(n)}var Mr=()=>{};function Yc(n,r){return r===void 0?Xn(n):Xn({...r,...n})}var gi=f(()=>{Mr()});var Mf=f(()=>{gi();Mr()});function qg(n){return n!==null&&typeof n==="object"}function Ng(n){return globalThis.Array.isArray(n)&&!globalThis.ArrayBuffer.isView(n)}function Og(n){return n===void 0}function Fg(n){return typeof n==="number"}var jg=()=>{};var _i;var Kg=f(()=>{jg();(function(n){n.InstanceMode="default",n.ExactOptionalPropertyTypes=!1,n.AllowArrayObject=!1,n.AllowNaN=!1,n.AllowNullVoid=!1;function r(e,i){return n.ExactOptionalPropertyTypes?i in e:e[i]!==void 0}n.IsExactOptionalProperty=r;function t(e){let i=qg(e);return n.AllowArrayObject?i:i&&!Ng(e)}n.IsObjectLike=t;function o(e){return t(e)&&!(e instanceof Date)&&!(e instanceof Uint8Array)}n.IsRecordLike=o;function c(e){return n.AllowNaN?Fg(e):Number.isFinite(e)}n.IsNumberLike=c;function a(e){let i=Og(e);return n.AllowNullVoid?i||e===null:i}n.IsVoidLike=a})(_i||(_i={}))});function v$(n){return globalThis.Object.freeze(n).map((r)=>za(r))}function I$(n){return n}function Z$(n){return n}function y$(n){return n}function nk(n){let r={};for(let t of Object.getOwnPropertyNames(n))r[t]=za(n[t]);for(let t of Object.getOwnPropertySymbols(n))r[t]=za(n[t]);return globalThis.Object.freeze(r)}function za(n){return jn(n)?v$(n):No(n)?I$(n):qt(n)?Z$(n):Ha(n)?y$(n):Dn(n)?nk(n):n}var pg=()=>{};function D(n,r){let t=r!==void 0?{...r,...n}:n;switch(_i.InstanceMode){case"freeze":return za(t);case"clone":return Xn(t);default:return t}}var I=f(()=>{Kg();pg();Mr()});var Nt=f(()=>{I()});var fr;var Tg=f(()=>{fr=class fr extends Error{constructor(n){super(n)}}});var Mt=f(()=>{Tg()});var Zn,lt,dr,Tr,C;var Ua=f(()=>{Zn=Symbol.for("TypeBox.Transform"),lt=Symbol.for("TypeBox.Readonly"),dr=Symbol.for("TypeBox.Optional"),Tr=Symbol.for("TypeBox.Hint"),C=Symbol.for("TypeBox.Kind")});var y=f(()=>{Ua()});function Jc(n){return Dn(n)&&n[lt]==="Readonly"}function Dr(n){return Dn(n)&&n[dr]==="Optional"}function Df(n){return bn(n,"Any")}function Hf(n){return bn(n,"Argument")}function ft(n){return bn(n,"Array")}function Oo(n){return bn(n,"AsyncIterator")}function Fo(n){return bn(n,"BigInt")}function Ot(n){return bn(n,"Boolean")}function dt(n){return bn(n,"Computed")}function bt(n){return bn(n,"Constructor")}function rk(n){return bn(n,"Date")}function ut(n){return bn(n,"Function")}function gt(n){return bn(n,"Integer")}function Cn(n){return bn(n,"Intersect")}function jo(n){return bn(n,"Iterator")}function bn(n,r){return Dn(n)&&C in n&&n[C]===r}function mi(n){return Gt(n)||Lr(n)||Wn(n)}function Vr(n){return bn(n,"Literal")}function Cr(n){return bn(n,"MappedKey")}function xn(n){return bn(n,"MappedResult")}function uo(n){return bn(n,"Never")}function tk(n){return bn(n,"Not")}function Ba(n){return bn(n,"Null")}function _t(n){return bn(n,"Number")}function pn(n){return bn(n,"Object")}function Ko(n){return bn(n,"Promise")}function po(n){return bn(n,"Record")}function Gn(n){return bn(n,"Ref")}function zf(n){return bn(n,"RegExp")}function Ft(n){return bn(n,"String")}function Wa(n){return bn(n,"Symbol")}function Qr(n){return bn(n,"TemplateLiteral")}function ok(n){return bn(n,"This")}function go(n){return Dn(n)&&Zn in n}function Pr(n){return bn(n,"Tuple")}function Ya(n){return bn(n,"Undefined")}function gn(n){return bn(n,"Union")}function ck(n){return bn(n,"Uint8Array")}function ak(n){return bn(n,"Unknown")}function ek(n){return bn(n,"Unsafe")}function ik(n){return bn(n,"Void")}function sk(n){return Dn(n)&&C in n&&Wn(n[C])}function Gr(n){return Df(n)||Hf(n)||ft(n)||Ot(n)||Fo(n)||Oo(n)||dt(n)||bt(n)||rk(n)||ut(n)||gt(n)||Cn(n)||jo(n)||Vr(n)||Cr(n)||xn(n)||uo(n)||tk(n)||Ba(n)||_t(n)||pn(n)||Ko(n)||po(n)||Gn(n)||zf(n)||Ft(n)||Wa(n)||Qr(n)||ok(n)||Pr(n)||Ya(n)||gn(n)||ck(n)||ak(n)||ek(n)||ik(n)||sk(n)}var hn=f(()=>{y()});var m={};Zt(m,{TypeGuardUnknownTypeError:()=>vg,IsVoid:()=>V_,IsUnsafe:()=>L_,IsUnknown:()=>x_,IsUnionLiteral:()=>wk,IsUnion:()=>Wf,IsUndefined:()=>J_,IsUint8Array:()=>X_,IsTuple:()=>Y_,IsTransform:()=>W_,IsThis:()=>B_,IsTemplateLiteral:()=>U_,IsSymbol:()=>z_,IsString:()=>H_,IsSchema:()=>ir,IsRegExp:()=>D_,IsRef:()=>M_,IsRecursive:()=>mk,IsRecord:()=>E_,IsReadonly:()=>bk,IsProperties:()=>wi,IsPromise:()=>S_,IsOptional:()=>uk,IsObject:()=>A_,IsNumber:()=>R_,IsNull:()=>k_,IsNot:()=>$_,IsNever:()=>h_,IsMappedResult:()=>w_,IsMappedKey:()=>m_,IsLiteralValue:()=>__,IsLiteralString:()=>u_,IsLiteralNumber:()=>g_,IsLiteralBoolean:()=>_k,IsLiteral:()=>Xa,IsKindOf:()=>fn,IsKind:()=>C_,IsIterator:()=>b_,IsIntersect:()=>d_,IsInteger:()=>f_,IsImport:()=>gk,IsFunction:()=>l_,IsDate:()=>s_,IsConstructor:()=>i_,IsComputed:()=>e_,IsBoolean:()=>a_,IsBigInt:()=>c_,IsAsyncIterator:()=>o_,IsArray:()=>t_,IsArgument:()=>r_,IsAny:()=>n_});function Ig(n){try{return new RegExp(n),!0}catch{return!1}}function Uf(n){if(!Wn(n))return!1;for(let r=0;r<n.length;r++){let t=n.charCodeAt(r);if(t>=7&&t<=13||t===27||t===127)return!1}return!0}function Zg(n){return Bf(n)||ir(n)}function Ja(n){return Kn(n)||Da(n)}function Yn(n){return Kn(n)||Lr(n)}function Bf(n){return Kn(n)||Gt(n)}function Hn(n){return Kn(n)||Wn(n)}function fk(n){return Kn(n)||Wn(n)&&Uf(n)&&Ig(n)}function dk(n){return Kn(n)||Wn(n)&&Uf(n)}function yg(n){return Kn(n)||ir(n)}function bk(n){return Dn(n)&&n[lt]==="Readonly"}function uk(n){return Dn(n)&&n[dr]==="Optional"}function n_(n){return fn(n,"Any")&&Hn(n.$id)}function r_(n){return fn(n,"Argument")&&Lr(n.index)}function t_(n){return fn(n,"Array")&&n.type==="array"&&Hn(n.$id)&&ir(n.items)&&Yn(n.minItems)&&Yn(n.maxItems)&&Bf(n.uniqueItems)&&yg(n.contains)&&Yn(n.minContains)&&Yn(n.maxContains)}function o_(n){return fn(n,"AsyncIterator")&&n.type==="AsyncIterator"&&Hn(n.$id)&&ir(n.items)}function c_(n){return fn(n,"BigInt")&&n.type==="bigint"&&Hn(n.$id)&&Ja(n.exclusiveMaximum)&&Ja(n.exclusiveMinimum)&&Ja(n.maximum)&&Ja(n.minimum)&&Ja(n.multipleOf)}function a_(n){return fn(n,"Boolean")&&n.type==="boolean"&&Hn(n.$id)}function e_(n){return fn(n,"Computed")&&Wn(n.target)&&jn(n.parameters)&&n.parameters.every((r)=>ir(r))}function i_(n){return fn(n,"Constructor")&&n.type==="Constructor"&&Hn(n.$id)&&jn(n.parameters)&&n.parameters.every((r)=>ir(r))&&ir(n.returns)}function s_(n){return fn(n,"Date")&&n.type==="Date"&&Hn(n.$id)&&Yn(n.exclusiveMaximumTimestamp)&&Yn(n.exclusiveMinimumTimestamp)&&Yn(n.maximumTimestamp)&&Yn(n.minimumTimestamp)&&Yn(n.multipleOfTimestamp)}function l_(n){return fn(n,"Function")&&n.type==="Function"&&Hn(n.$id)&&jn(n.parameters)&&n.parameters.every((r)=>ir(r))&&ir(n.returns)}function gk(n){return fn(n,"Import")&&bi(n,"$defs")&&Dn(n.$defs)&&wi(n.$defs)&&bi(n,"$ref")&&Wn(n.$ref)&&n.$ref in n.$defs}function f_(n){return fn(n,"Integer")&&n.type==="integer"&&Hn(n.$id)&&Yn(n.exclusiveMaximum)&&Yn(n.exclusiveMinimum)&&Yn(n.maximum)&&Yn(n.minimum)&&Yn(n.multipleOf)}function wi(n){return Dn(n)&&Object.entries(n).every(([r,t])=>Uf(r)&&ir(t))}function d_(n){return fn(n,"Intersect")&&(Wn(n.type)&&n.type!=="object"?!1:!0)&&jn(n.allOf)&&n.allOf.every((r)=>ir(r)&&!W_(r))&&Hn(n.type)&&(Bf(n.unevaluatedProperties)||yg(n.unevaluatedProperties))&&Hn(n.$id)}function b_(n){return fn(n,"Iterator")&&n.type==="Iterator"&&Hn(n.$id)&&ir(n.items)}function fn(n,r){return Dn(n)&&C in n&&n[C]===r}function u_(n){return Xa(n)&&Wn(n.const)}function g_(n){return Xa(n)&&Lr(n.const)}function _k(n){return Xa(n)&&Gt(n.const)}function Xa(n){return fn(n,"Literal")&&Hn(n.$id)&&__(n.const)}function __(n){return Gt(n)||Lr(n)||Wn(n)}function m_(n){return fn(n,"MappedKey")&&jn(n.keys)&&n.keys.every((r)=>Lr(r)||Wn(r))}function w_(n){return fn(n,"MappedResult")&&wi(n.properties)}function h_(n){return fn(n,"Never")&&Dn(n.not)&&Object.getOwnPropertyNames(n.not).length===0}function $_(n){return fn(n,"Not")&&ir(n.not)}function k_(n){return fn(n,"Null")&&n.type==="null"&&Hn(n.$id)}function R_(n){return fn(n,"Number")&&n.type==="number"&&Hn(n.$id)&&Yn(n.exclusiveMaximum)&&Yn(n.exclusiveMinimum)&&Yn(n.maximum)&&Yn(n.minimum)&&Yn(n.multipleOf)}function A_(n){return fn(n,"Object")&&n.type==="object"&&Hn(n.$id)&&wi(n.properties)&&Zg(n.additionalProperties)&&Yn(n.minProperties)&&Yn(n.maxProperties)}function S_(n){return fn(n,"Promise")&&n.type==="Promise"&&Hn(n.$id)&&ir(n.item)}function E_(n){return fn(n,"Record")&&n.type==="object"&&Hn(n.$id)&&Zg(n.additionalProperties)&&Dn(n.patternProperties)&&((r)=>{let t=Object.getOwnPropertyNames(r.patternProperties);return t.length===1&&Ig(t[0])&&Dn(r.patternProperties)&&ir(r.patternProperties[t[0]])})(n)}function mk(n){return Dn(n)&&Tr in n&&n[Tr]==="Recursive"}function M_(n){return fn(n,"Ref")&&Hn(n.$id)&&Wn(n.$ref)}function D_(n){return fn(n,"RegExp")&&Hn(n.$id)&&Wn(n.source)&&Wn(n.flags)&&Yn(n.maxLength)&&Yn(n.minLength)}function H_(n){return fn(n,"String")&&n.type==="string"&&Hn(n.$id)&&Yn(n.minLength)&&Yn(n.maxLength)&&fk(n.pattern)&&dk(n.format)}function z_(n){return fn(n,"Symbol")&&n.type==="symbol"&&Hn(n.$id)}function U_(n){return fn(n,"TemplateLiteral")&&n.type==="string"&&Wn(n.pattern)&&n.pattern[0]==="^"&&n.pattern[n.pattern.length-1]==="$"}function B_(n){return fn(n,"This")&&Hn(n.$id)&&Wn(n.$ref)}function W_(n){return Dn(n)&&Zn in n}function Y_(n){return fn(n,"Tuple")&&n.type==="array"&&Hn(n.$id)&&Lr(n.minItems)&&Lr(n.maxItems)&&n.minItems===n.maxItems&&(Kn(n.items)&&Kn(n.additionalItems)&&n.minItems===0||jn(n.items)&&n.items.every((r)=>ir(r)))}function J_(n){return fn(n,"Undefined")&&n.type==="undefined"&&Hn(n.$id)}function wk(n){return Wf(n)&&n.anyOf.every((r)=>u_(r)||g_(r))}function Wf(n){return fn(n,"Union")&&Hn(n.$id)&&Dn(n)&&jn(n.anyOf)&&n.anyOf.every((r)=>ir(r))}function X_(n){return fn(n,"Uint8Array")&&n.type==="Uint8Array"&&Hn(n.$id)&&Yn(n.minByteLength)&&Yn(n.maxByteLength)}function x_(n){return fn(n,"Unknown")&&Hn(n.$id)}function L_(n){return fn(n,"Unsafe")}function V_(n){return fn(n,"Void")&&n.type==="void"&&Hn(n.$id)}function C_(n){return Dn(n)&&C in n&&Wn(n[C])&&!lk.includes(n[C])}function ir(n){return Dn(n)&&(n_(n)||r_(n)||t_(n)||a_(n)||c_(n)||o_(n)||e_(n)||i_(n)||s_(n)||l_(n)||f_(n)||d_(n)||b_(n)||Xa(n)||m_(n)||w_(n)||h_(n)||$_(n)||k_(n)||R_(n)||A_(n)||S_(n)||E_(n)||M_(n)||D_(n)||H_(n)||z_(n)||U_(n)||B_(n)||Y_(n)||J_(n)||Wf(n)||X_(n)||x_(n)||L_(n)||V_(n)||C_(n))}var vg,lk;var Q_=f(()=>{y();Mt();vg=class vg extends fr{};lk=["Argument","Any","Array","AsyncIterator","BigInt","Boolean","Computed","Constructor","Date","Enum","Function","Integer","Intersect","Iterator","Literal","MappedKey","MappedResult","Not","Null","Number","Object","Promise","Record","Ref","RegExp","String","Symbol","TemplateLiteral","This","Tuple","Undefined","Union","Uint8Array","Unknown","Void"]});var Yf=f(()=>{hn();Q_()});var P_=()=>{};var G_="(true|false)",hi="(0|[1-9][0-9]*)",q_="(.*)",_o="^(0|[1-9][0-9]*)$",mo="^(.*)$",N_="^(?!.*)$";var xa=()=>{};var O_=()=>{};var F_=()=>{};var j_=f(()=>{O_();F_()});function K_(n,r){return n.includes(r)}function p_(n){return[...new Set(n)]}function kk(n,r){return n.filter((t)=>r.includes(t))}function Rk(n,r){return n.reduce((t,o)=>{return kk(t,o)},r)}function T_(n){return n.length===1?n[0]:n.length>1?Rk(n.slice(1),n[0]):[]}function v_(n){let r=[];for(let t of n)r.push(...t);return r}var La=()=>{};function wo(n){return D({[C]:"Any"},n)}var I_=f(()=>{Nt();y()});var Va=f(()=>{I_()});function Xc(n,r){return D({[C]:"Array",type:"array",items:n},r)}var Z_=f(()=>{I();y()});var Ca=f(()=>{Z_()});function y_(n){return D({[C]:"Argument",index:n})}var nm=f(()=>{I();y()});var Jf=f(()=>{nm()});function xc(n,r){return D({[C]:"AsyncIterator",type:"AsyncIterator",items:n},r)}var rm=f(()=>{y();I()});var Qa=f(()=>{rm()});function Jn(n,r,t){return D({[C]:"Computed",target:n,parameters:r},t)}var tm=f(()=>{Nt();Ua()});var ho=f(()=>{tm()});function Ak(n,r){let{[r]:t,...o}=n;return o}function Qn(n,r){return r.reduce((t,o)=>Ak(t,o),n)}var Kt=()=>{};function _n(n){return D({[C]:"Never",not:{}},n)}var om=f(()=>{I();y()});var br=f(()=>{om()});var cm=()=>{};function $n(n){return D({[C]:"MappedResult",properties:n})}var Xf=f(()=>{I();y()});function Lc(n,r,t){return D({[C]:"Constructor",type:"Constructor",parameters:n,returns:r},t)}var am=f(()=>{I();y()});var Pa=f(()=>{am()});function Dt(n,r,t){return D({[C]:"Function",type:"Function",parameters:n,returns:r},t)}var em=f(()=>{I();y()});var To=f(()=>{em()});function Ga(n,r){return D({[C]:"Union",anyOf:n},r)}var xf=f(()=>{I();y()});function Sk(n){return n.some((r)=>Dr(r))}function im(n){return n.map((r)=>Dr(r)?Ek(r):r)}function Ek(n){return Qn(n,[dr])}function Mk(n,r){return Sk(n)?wr(Ga(im(n),r)):Ga(im(n),r)}function Ht(n,r){return n.length===1?D(n[0],r):n.length===0?_n(r):Mk(n,r)}var sm=f(()=>{I();y();Kt();br();pt();xf();hn()});var lm=()=>{};function Sn(n,r){return n.length===0?_n(r):n.length===1?D(n[0],r):Ga(n,r)}var fm=f(()=>{br();I();xf()});var yn=f(()=>{sm();lm();fm()});function Dk(n){return n.replace(/\\\$/g,"$").replace(/\\\*/g,"*").replace(/\\\^/g,"^").replace(/\\\|/g,"|").replace(/\\\(/g,"(").replace(/\\\)/g,")")}function Vf(n,r,t){return n[r]===t&&n.charCodeAt(r-1)!==92}function Tt(n,r){return Vf(n,r,"(")}function qa(n,r){return Vf(n,r,")")}function dm(n,r){return Vf(n,r,"|")}function Hk(n){if(!(Tt(n,0)&&qa(n,n.length-1)))return!1;let r=0;for(let t=0;t<n.length;t++){if(Tt(n,t))r+=1;if(qa(n,t))r-=1;if(r===0&&t!==n.length-1)return!1}return!0}function zk(n){return n.slice(1,n.length-1)}function Uk(n){let r=0;for(let t=0;t<n.length;t++){if(Tt(n,t))r+=1;if(qa(n,t))r-=1;if(dm(n,t)&&r===0)return!0}return!1}function Bk(n){for(let r=0;r<n.length;r++)if(Tt(n,r))return!0;return!1}function Wk(n){let[r,t]=[0,0],o=[];for(let a=0;a<n.length;a++){if(Tt(n,a))r+=1;if(qa(n,a))r-=1;if(dm(n,a)&&r===0){let e=n.slice(t,a);if(e.length>0)o.push(Vc(e));t=a+1}}let c=n.slice(t);if(c.length>0)o.push(Vc(c));if(o.length===0)return{type:"const",const:""};if(o.length===1)return o[0];return{type:"or",expr:o}}function Yk(n){function r(c,a){if(!Tt(c,a))throw new Lf("TemplateLiteralParser: Index must point to open parens");let e=0;for(let i=a;i<c.length;i++){if(Tt(c,i))e+=1;if(qa(c,i))e-=1;if(e===0)return[a,i]}throw new Lf("TemplateLiteralParser: Unclosed group parens in expression")}function t(c,a){for(let e=a;e<c.length;e++)if(Tt(c,e))return[a,e];return[a,c.length]}let o=[];for(let c=0;c<n.length;c++)if(Tt(n,c)){let[a,e]=r(n,c),i=n.slice(a,e+1);o.push(Vc(i)),c=e}else{let[a,e]=t(n,c),i=n.slice(a,e);if(i.length>0)o.push(Vc(i));c=e-1}return o.length===0?{type:"const",const:""}:o.length===1?o[0]:{type:"and",expr:o}}function Vc(n){return Hk(n)?Vc(zk(n)):Uk(n)?Wk(n):Bk(n)?Yk(n):{type:"const",const:Dk(n)}}function Cc(n){return Vc(n.slice(1,n.length-1))}var Lf;var $i=f(()=>{Mt();Lf=class Lf extends fr{}});function Jk(n){return n.type==="or"&&n.expr.length===2&&n.expr[0].type==="const"&&n.expr[0].const==="0"&&n.expr[1].type==="const"&&n.expr[1].const==="[1-9][0-9]*"}function Xk(n){return n.type==="or"&&n.expr.length===2&&n.expr[0].type==="const"&&n.expr[0].const==="true"&&n.expr[1].type==="const"&&n.expr[1].const==="false"}function xk(n){return n.type==="const"&&n.const===".*"}function vo(n){return Jk(n)||xk(n)?!1:Xk(n)?!0:n.type==="and"?n.expr.every((r)=>vo(r)):n.type==="or"?n.expr.every((r)=>vo(r)):n.type==="const"?!0:(()=>{throw new bm("Unknown expression type")})()}function um(n){let r=Cc(n.pattern);return vo(r)}var bm;var Cf=f(()=>{$i();Mt();bm=class bm extends fr{}});function*_m(n){if(n.length===1)return yield*n[0];for(let r of n[0])for(let t of _m(n.slice(1)))yield`${r}${t}`}function*Lk(n){return yield*_m(n.expr.map((r)=>[...Na(r)]))}function*Vk(n){for(let r of n.expr)yield*Na(r)}function*Ck(n){return yield n.const}function*Na(n){return n.type==="and"?yield*Lk(n):n.type==="or"?yield*Vk(n):n.type==="const"?yield*Ck(n):(()=>{throw new gm("Unknown expression")})()}function ki(n){let r=Cc(n.pattern);return vo(r)?[...Na(r)]:[]}var gm;var Qf=f(()=>{Cf();$i();Mt();gm=class gm extends fr{}});function Rn(n,r){return D({[C]:"Literal",const:n,type:typeof n},r)}var mm=f(()=>{I();y()});var Hr=f(()=>{mm()});function Ri(n){return D({[C]:"Boolean",type:"boolean"},n)}var wm=f(()=>{y();Nt()});var Ai=f(()=>{wm()});function Qc(n){return D({[C]:"BigInt",type:"bigint"},n)}var hm=f(()=>{y();Nt()});var Oa=f(()=>{hm()});function vr(n){return D({[C]:"Number",type:"number"},n)}var $m=f(()=>{I();y()});var Io=f(()=>{$m()});function mt(n){return D({[C]:"String",type:"string"},n)}var km=f(()=>{I();y()});var Pc=f(()=>{km()});function*Qk(n){let r=n.trim().replace(/"|'/g,"");return r==="boolean"?yield Ri():r==="number"?yield vr():r==="bigint"?yield Qc():r==="string"?yield mt():yield(()=>{let t=r.split("|").map((o)=>Rn(o.trim()));return t.length===0?_n():t.length===1?t[0]:Ht(t)})()}function*Pk(n){if(n[1]!=="{"){let r=Rn("$"),t=Pf(n.slice(1));return yield*[r,...t]}for(let r=2;r<n.length;r++)if(n[r]==="}"){let t=Qk(n.slice(2,r)),o=Pf(n.slice(r+1));return yield*[...t,...o]}yield Rn(n)}function*Pf(n){for(let r=0;r<n.length;r++)if(n[r]==="$"){let t=Rn(n.slice(0,r)),o=Pk(n.slice(r));return yield*[t,...o]}yield Rn(n)}function Rm(n){return[...Pf(n)]}var Gf=f(()=>{Hr();Ai();Oa();Io();Pc();yn();br()});function Gk(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Sm(n,r){return Qr(n)?n.pattern.slice(1,n.pattern.length-1):gn(n)?`(${n.anyOf.map((t)=>Sm(t,r)).join("|")})`:_t(n)?`${r}${hi}`:gt(n)?`${r}${hi}`:Fo(n)?`${r}${hi}`:Ft(n)?`${r}${q_}`:Vr(n)?`${r}${Gk(n.const.toString())}`:Ot(n)?`${r}${G_}`:(()=>{throw new Am(`Unexpected Kind '${n[C]}'`)})()}function qf(n){return`^${n.map((r)=>Sm(r,"")).join("")}$`}var Am;var Nf=f(()=>{xa();y();Mt();hn();Am=class Am extends fr{}});function Zo(n){let t=ki(n).map((o)=>Rn(o));return Ht(t)}var Em=f(()=>{yn();Hr();Qf()});function Si(n,r){let t=Wn(n)?qf(Rm(n)):qf(n);return D({[C]:"TemplateLiteral",type:"string",pattern:t},r)}var Mm=f(()=>{I();Gf();Nf();y()});var vt=f(()=>{Cf();Qf();Gf();$i();Nf();Em();Mm()});function qk(n){return ki(n).map((t)=>t.toString())}function Nk(n){let r=[];for(let t of n)r.push(...zr(t));return r}function Ok(n){return[n.toString()]}function zr(n){return[...new Set(Qr(n)?qk(n):gn(n)?Nk(n.anyOf):Vr(n)?Ok(n.const):_t(n)?["[number]"]:gt(n)?["[number]"]:[])]}var Ei=f(()=>{vt();hn()});function Fk(n,r,t){let o={};for(let c of Object.getOwnPropertyNames(r))o[c]=$o(n,zr(r[c]),t);return o}function jk(n,r,t){return Fk(n,r.properties,t)}function Dm(n,r,t){let o=jk(n,r,t);return $n(o)}var Of=f(()=>{cr();Ei();zt()});function zm(n,r){return n.map((t)=>Um(t,r))}function Kk(n){return n.filter((r)=>!uo(r))}function pk(n,r){return Mi(Kk(zm(n,r)))}function Tk(n){return n.some((r)=>uo(r))?[]:n}function vk(n,r){return Ht(Tk(zm(n,r)))}function Ik(n,r){return r in n?n[r]:r==="[number]"?Ht(n):_n()}function Zk(n,r){return r==="[number]"?n:_n()}function yk(n,r){return r in n?n[r]:_n()}function Um(n,r){return Cn(n)?pk(n.allOf,r):gn(n)?vk(n.anyOf,r):Pr(n)?Ik(n.items??[],r):ft(n)?Zk(n.items,r):pn(n)?yk(n.properties,r):_n()}function Ff(n,r){return r.map((t)=>Um(n,t))}function Hm(n,r){return Ht(Ff(n,r))}function $o(n,r,t){if(Gn(n)||Gn(r)){if(!Gr(n)||!Gr(r))throw new fr("Index types using Ref parameters require both Type and Key to be of TSchema");return Jn("Index",[n,r])}if(xn(r))return Dm(n,r,t);if(Cr(r))return Bm(n,r,t);return D(Gr(r)?Hm(n,zr(r)):Hm(n,r),t)}var jf=f(()=>{I();Mt();ho();br();Ir();yn();Ei();Kf();Of();hn()});function nR(n,r,t){return{[r]:$o(n,[r],Xn(t))}}function rR(n,r,t){return r.reduce((o,c)=>{return{...o,...nR(n,c,t)}},{})}function tR(n,r,t){return rR(n,r.keys,t)}function Bm(n,r,t){let o=tR(n,r,t);return $n(o)}var Kf=f(()=>{jf();cr();Mr()});var zt=f(()=>{Kf();Of();Ei();jf()});function Gc(n,r){return D({[C]:"Iterator",type:"Iterator",items:n},r)}var Wm=f(()=>{I();y()});var Fa=f(()=>{Wm()});function oR(n){return globalThis.Object.keys(n).filter((r)=>!Dr(n[r]))}function cR(n,r){let t=oR(n),o=t.length>0?{[C]:"Object",type:"object",required:t,properties:n}:{[C]:"Object",type:"object",properties:n};return D(o,r)}var zn;var Ym=f(()=>{I();y();hn();zn=cR});var qr=f(()=>{Ym()});function Di(n,r){return D({[C]:"Promise",type:"Promise",item:n},r)}var Jm=f(()=>{I();y()});var Hi=f(()=>{Jm()});function aR(n){return D(Qn(n,[lt]))}function eR(n){return D({...n,[lt]:"Readonly"})}function iR(n,r){return r===!1?aR(n):eR(n)}function Ur(n,r){let t=r??!0;return xn(n)?Xm(n,t):iR(n,t)}var pf=f(()=>{I();y();Kt();Tf();hn()});function sR(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(n))t[o]=Ur(n[o],r);return t}function lR(n,r){return sR(n.properties,r)}function Xm(n,r){let t=lR(n,r);return $n(t)}var Tf=f(()=>{cr();pf()});var yo=f(()=>{Tf();pf()});function Zr(n,r){return D(n.length>0?{[C]:"Tuple",type:"array",items:n,additionalItems:!1,minItems:n.length,maxItems:n.length}:{[C]:"Tuple",type:"array",minItems:n.length,maxItems:n.length},r)}var xm=f(()=>{I();y()});var ko=f(()=>{xm()});function Lm(n,r){return n in r?yr(n,r[n]):$n(r)}function fR(n){return{[n]:Rn(n)}}function dR(n){let r={};for(let t of n)r[t]=Rn(t);return r}function bR(n,r){return K_(r,n)?fR(n):dR(r)}function uR(n,r){let t=bR(n,r);return Lm(n,t)}function ja(n,r){return r.map((t)=>yr(n,t))}function gR(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(r))t[o]=yr(n,r[o]);return t}function yr(n,r){let t={...r};return Dr(r)?wr(yr(n,Qn(r,[dr]))):Jc(r)?Ur(yr(n,Qn(r,[lt]))):xn(r)?Lm(n,r.properties):Cr(r)?uR(n,r.keys):bt(r)?Lc(ja(n,r.parameters),yr(n,r.returns),t):ut(r)?Dt(ja(n,r.parameters),yr(n,r.returns),t):Oo(r)?xc(yr(n,r.items),t):jo(r)?Gc(yr(n,r.items),t):Cn(r)?hr(ja(n,r.allOf),t):gn(r)?Sn(ja(n,r.anyOf),t):Pr(r)?Zr(ja(n,r.items??[]),t):pn(r)?zn(gR(n,r.properties),t):ft(r)?Xc(yr(n,r.items),t):Ko(r)?Di(yr(n,r.item),t):r}function _R(n,r){let t={};for(let o of n)t[o]=yr(o,r);return t}function Vm(n,r,t){let o=Gr(n)?zr(n):n,c=r({[C]:"MappedKey",keys:o}),a=_R(o,c);return zn(a,t)}var Cm=f(()=>{y();Kt();Ca();Qa();Pa();To();zt();Ir();Fa();Hr();qr();pt();Hi();yo();ko();yn();La();Xf();hn()});var cr=f(()=>{cm();Xf();Cm()});function mR(n){return D(Qn(n,[dr]))}function wR(n){return D({...n,[dr]:"Optional"})}function hR(n,r){return r===!1?mR(n):wR(n)}function wr(n,r){let t=r??!0;return xn(n)?Qm(n,t):hR(n,t)}var vf=f(()=>{I();y();Kt();If();hn()});function $R(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(n))t[o]=wr(n[o],r);return t}function kR(n,r){return $R(n.properties,r)}function Qm(n,r){let t=kR(n,r);return $n(t)}var If=f(()=>{cr();vf()});var pt=f(()=>{If();vf()});function Ka(n,r={}){let t=n.every((c)=>pn(c)),o=Gr(r.unevaluatedProperties)?{unevaluatedProperties:r.unevaluatedProperties}:{};return D(r.unevaluatedProperties===!1||Gr(r.unevaluatedProperties)||t?{...o,[C]:"Intersect",type:"object",allOf:n}:{...o,[C]:"Intersect",allOf:n},r)}var Zf=f(()=>{I();y();hn()});function RR(n){return n.every((r)=>Dr(r))}function AR(n){return Qn(n,[dr])}function Pm(n){return n.map((r)=>Dr(r)?AR(r):r)}function SR(n,r){return RR(n)?wr(Ka(Pm(n),r)):Ka(Pm(n),r)}function Mi(n,r={}){if(n.length===1)return D(n[0],r);if(n.length===0)return _n(r);if(n.some((t)=>go(t)))throw Error("Cannot intersect transform types");return SR(n,r)}var Gm=f(()=>{y();I();Kt();br();pt();Zf();hn()});var qm=()=>{};function hr(n,r){if(n.length===1)return D(n[0],r);if(n.length===0)return _n(r);if(n.some((t)=>go(t)))throw Error("Cannot intersect transform types");return Ka(n,r)}var Nm=f(()=>{I();br();Zf();hn()});var Ir=f(()=>{Gm();qm();Nm()});function Ut(...n){let[r,t]=typeof n[0]==="string"?[n[0],n[1]]:[n[0].$id,n[1]];if(typeof r!=="string")throw new fr("Ref: $ref must be a string");return D({[C]:"Ref",$ref:r},t)}var Om=f(()=>{Mt();I();y()});var nc=f(()=>{Om()});function ER(n,r){return Jn("Awaited",[Jn(n,r)])}function MR(n){return Jn("Awaited",[Ut(n)])}function DR(n){return hr(Fm(n))}function HR(n){return Sn(Fm(n))}function zR(n){return qc(n)}function Fm(n){return n.map((r)=>qc(r))}function qc(n,r){return D(dt(n)?ER(n.target,n.parameters):Cn(n)?DR(n.allOf):gn(n)?HR(n.anyOf):Ko(n)?zR(n.item):Gn(n)?MR(n.$ref):n,r)}var jm=f(()=>{I();ho();Ir();yn();nc();hn()});var zi=f(()=>{jm()});function Km(n){let r=[];for(let t of n)r.push(pa(t));return r}function UR(n){let r=Km(n);return v_(r)}function BR(n){let r=Km(n);return T_(r)}function WR(n){return n.map((r,t)=>t.toString())}function YR(n){return["[number]"]}function JR(n){return globalThis.Object.getOwnPropertyNames(n)}function XR(n){if(!xR)return[];return globalThis.Object.getOwnPropertyNames(n).map((t)=>{return t[0]==="^"&&t[t.length-1]==="$"?t.slice(1,t.length-1):t})}function pa(n){return Cn(n)?UR(n.allOf):gn(n)?BR(n.anyOf):Pr(n)?WR(n.items??[]):ft(n)?YR(n.items):pn(n)?JR(n.properties):po(n)?XR(n.patternProperties):[]}var xR=!1;var yf=f(()=>{La();hn()});function LR(n,r){return Jn("KeyOf",[Jn(n,r)])}function VR(n){return Jn("KeyOf",[Ut(n)])}function CR(n,r){let t=pa(n),o=QR(t),c=Ht(o);return D(c,r)}function QR(n){return n.map((r)=>r==="[number]"?vr():Rn(r))}function Nc(n,r){return dt(n)?LR(n.target,n.parameters):Gn(n)?VR(n.$ref):xn(n)?pm(n,r):CR(n,r)}var n0=f(()=>{I();Hr();Io();ho();nc();yf();yn();r0();hn()});function PR(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(n))t[o]=Nc(n[o],Xn(r));return t}function GR(n,r){return PR(n.properties,r)}function pm(n,r){let t=GR(n,r);return $n(t)}var r0=f(()=>{cr();n0();Mr()});var Tm=()=>{};var Ta=f(()=>{r0();Tm();yf();n0()});function qR(n){let r=[];for(let t of n)r.push(...pa(t));return p_(r)}function NR(n){return n.filter((r)=>!uo(r))}function OR(n,r){let t=[];for(let o of n)t.push(...Ff(o,[r]));return NR(t)}function FR(n,r){let t={};for(let o of r)t[o]=Mi(OR(n,o));return t}function vm(n,r){let t=qR(n),o=FR(n,t);return zn(o,r)}var Im=f(()=>{Ir();zt();Ta();qr();La();hn()});var t0=f(()=>{Im()});function Ui(n){return D({[C]:"Date",type:"Date"},n)}var Zm=f(()=>{y();I()});var Bi=f(()=>{Zm()});function Wi(n){return D({[C]:"Null",type:"null"},n)}var ym=f(()=>{I();y()});var Yi=f(()=>{ym()});function Ji(n){return D({[C]:"Symbol",type:"symbol"},n)}var nw=f(()=>{I();y()});var Xi=f(()=>{nw()});function xi(n){return D({[C]:"Undefined",type:"undefined"},n)}var rw=f(()=>{I();y()});var Li=f(()=>{rw()});function Vi(n){return D({[C]:"Uint8Array",type:"Uint8Array"},n)}var tw=f(()=>{I();y()});var Ci=f(()=>{tw()});function Ro(n){return D({[C]:"Unknown"},n)}var ow=f(()=>{I();y()});var Oc=f(()=>{ow()});function jR(n){return n.map((r)=>o0(r,!1))}function KR(n){let r={};for(let t of globalThis.Object.getOwnPropertyNames(n))r[t]=Ur(o0(n[t],!1));return r}function Qi(n,r){return r===!0?n:Ur(n)}function o0(n,r){return kf(n)?Qi(wo(),r):Af(n)?Qi(wo(),r):jn(n)?Ur(Zr(jR(n))):qt(n)?Vi():No(n)?Ui():Dn(n)?Qi(zn(KR(n)),r):Rf(n)?Qi(Dt([],Ro()),r):Kn(n)?xi():Sf(n)?Wi():Ef(n)?Ji():Da(n)?Qc():Lr(n)?Rn(n):Gt(n)?Rn(n):Wn(n)?Rn(n):zn({})}function cw(n,r){return D(o0(n,!0),r)}var aw=f(()=>{Va();Oa();Bi();To();Hr();Yi();qr();Xi();ko();yo();Li();Ci();Oc();Nt()});var c0=f(()=>{aw()});function ew(n,r){return bt(n)?Zr(n.parameters,r):_n(r)}var iw=f(()=>{ko();br();hn()});var a0=f(()=>{iw()});function sw(n,r){if(Kn(n))throw Error("Enum undefined or empty");let t=globalThis.Object.getOwnPropertyNames(n).filter((a)=>isNaN(a)).map((a)=>n[a]),c=[...new Set(t)].map((a)=>Rn(a));return Sn(c,{...r,[Tr]:"Enum"})}var lw=f(()=>{Hr();y();yn()});var e0=f(()=>{lw()});function nt(n){return n===H.False?n:H.True}function Fc(n){throw new gw(n)}function nr(n){return m.IsNever(n)||m.IsIntersect(n)||m.IsUnion(n)||m.IsUnknown(n)||m.IsAny(n)}function rr(n,r){return m.IsNever(r)?ww(n,r):m.IsIntersect(r)?Pi(n,r):m.IsUnion(r)?d0(n,r):m.IsUnknown(r)?Rw(n,r):m.IsAny(r)?f0(n,r):Fc("StructuralRight")}function f0(n,r){return H.True}function pR(n,r){return m.IsIntersect(r)?Pi(n,r):m.IsUnion(r)&&r.anyOf.some((t)=>m.IsAny(t)||m.IsUnknown(t))?H.True:m.IsUnion(r)?H.Union:m.IsUnknown(r)?H.True:m.IsAny(r)?H.True:H.Union}function TR(n,r){return m.IsUnknown(n)?H.False:m.IsAny(n)?H.Union:m.IsNever(n)?H.True:H.False}function vR(n,r){return m.IsObject(r)&&Gi(r)?H.True:nr(r)?rr(n,r):!m.IsArray(r)?H.False:nt(Un(n.items,r.items))}function IR(n,r){return nr(r)?rr(n,r):!m.IsAsyncIterator(r)?H.False:nt(Un(n.items,r.items))}function ZR(n,r){return nr(r)?rr(n,r):m.IsObject(r)?$r(n,r):m.IsRecord(r)?rt(n,r):m.IsBigInt(r)?H.True:H.False}function _w(n,r){return m.IsLiteralBoolean(n)?H.True:m.IsBoolean(n)?H.True:H.False}function yR(n,r){return nr(r)?rr(n,r):m.IsObject(r)?$r(n,r):m.IsRecord(r)?rt(n,r):m.IsBoolean(r)?H.True:H.False}function n3(n,r){return nr(r)?rr(n,r):m.IsObject(r)?$r(n,r):!m.IsConstructor(r)?H.False:n.parameters.length>r.parameters.length?H.False:!n.parameters.every((t,o)=>nt(Un(r.parameters[o],t))===H.True)?H.False:nt(Un(n.returns,r.returns))}function r3(n,r){return nr(r)?rr(n,r):m.IsObject(r)?$r(n,r):m.IsRecord(r)?rt(n,r):m.IsDate(r)?H.True:H.False}function t3(n,r){return nr(r)?rr(n,r):m.IsObject(r)?$r(n,r):!m.IsFunction(r)?H.False:n.parameters.length>r.parameters.length?H.False:!n.parameters.every((t,o)=>nt(Un(r.parameters[o],t))===H.True)?H.False:nt(Un(n.returns,r.returns))}function mw(n,r){return m.IsLiteral(n)&&mr.IsNumber(n.const)?H.True:m.IsNumber(n)||m.IsInteger(n)?H.True:H.False}function o3(n,r){return m.IsInteger(r)||m.IsNumber(r)?H.True:nr(r)?rr(n,r):m.IsObject(r)?$r(n,r):m.IsRecord(r)?rt(n,r):H.False}function Pi(n,r){return r.allOf.every((t)=>Un(n,t)===H.True)?H.True:H.False}function c3(n,r){return n.allOf.some((t)=>Un(t,r)===H.True)?H.True:H.False}function a3(n,r){return nr(r)?rr(n,r):!m.IsIterator(r)?H.False:nt(Un(n.items,r.items))}function e3(n,r){return m.IsLiteral(r)&&r.const===n.const?H.True:nr(r)?rr(n,r):m.IsObject(r)?$r(n,r):m.IsRecord(r)?rt(n,r):m.IsString(r)?kw(n,r):m.IsNumber(r)?hw(n,r):m.IsInteger(r)?mw(n,r):m.IsBoolean(r)?_w(n,r):H.False}function ww(n,r){return H.False}function i3(n,r){return H.True}function fw(n){let[r,t]=[n,0];while(!0){if(!m.IsNot(r))break;r=r.not,t+=1}return t%2===0?r:Ro()}function s3(n,r){return m.IsNot(n)?Un(fw(n),r):m.IsNot(r)?Un(n,fw(r)):Fc("Invalid fallthrough for Not")}function l3(n,r){return nr(r)?rr(n,r):m.IsObject(r)?$r(n,r):m.IsRecord(r)?rt(n,r):m.IsNull(r)?H.True:H.False}function hw(n,r){return m.IsLiteralNumber(n)?H.True:m.IsNumber(n)||m.IsInteger(n)?H.True:H.False}function f3(n,r){return nr(r)?rr(n,r):m.IsObject(r)?$r(n,r):m.IsRecord(r)?rt(n,r):m.IsInteger(r)||m.IsNumber(r)?H.True:H.False}function Br(n,r){return Object.getOwnPropertyNames(n.properties).length===r}function dw(n){return Gi(n)}function bw(n){return Br(n,0)||Br(n,1)&&"description"in n.properties&&m.IsUnion(n.properties.description)&&n.properties.description.anyOf.length===2&&(m.IsString(n.properties.description.anyOf[0])&&m.IsUndefined(n.properties.description.anyOf[1])||m.IsString(n.properties.description.anyOf[1])&&m.IsUndefined(n.properties.description.anyOf[0]))}function i0(n){return Br(n,0)}function uw(n){return Br(n,0)}function d3(n){return Br(n,0)}function b3(n){return Br(n,0)}function u3(n){return Gi(n)}function g3(n){let r=vr();return Br(n,0)||Br(n,1)&&"length"in n.properties&&nt(Un(n.properties.length,r))===H.True}function _3(n){return Br(n,0)}function Gi(n){let r=vr();return Br(n,0)||Br(n,1)&&"length"in n.properties&&nt(Un(n.properties.length,r))===H.True}function m3(n){let r=Dt([wo()],wo());return Br(n,0)||Br(n,1)&&"then"in n.properties&&nt(Un(n.properties.then,r))===H.True}function $w(n,r){return Un(n,r)===H.False?H.False:m.IsOptional(n)&&!m.IsOptional(r)?H.False:H.True}function $r(n,r){return m.IsUnknown(n)?H.False:m.IsAny(n)?H.Union:m.IsNever(n)||m.IsLiteralString(n)&&dw(r)||m.IsLiteralNumber(n)&&i0(r)||m.IsLiteralBoolean(n)&&uw(r)||m.IsSymbol(n)&&bw(r)||m.IsBigInt(n)&&d3(r)||m.IsString(n)&&dw(r)||m.IsSymbol(n)&&bw(r)||m.IsNumber(n)&&i0(r)||m.IsInteger(n)&&i0(r)||m.IsBoolean(n)&&uw(r)||m.IsUint8Array(n)&&u3(r)||m.IsDate(n)&&b3(r)||m.IsConstructor(n)&&_3(r)||m.IsFunction(n)&&g3(r)?H.True:m.IsRecord(n)&&m.IsString(s0(n))?(()=>{return r[Tr]==="Record"?H.True:H.False})():m.IsRecord(n)&&m.IsNumber(s0(n))?(()=>{return Br(r,0)?H.True:H.False})():H.False}function w3(n,r){return nr(r)?rr(n,r):m.IsRecord(r)?rt(n,r):!m.IsObject(r)?H.False:(()=>{for(let t of Object.getOwnPropertyNames(r.properties)){if(!(t in n.properties)&&!m.IsOptional(r.properties[t]))return H.False;if(m.IsOptional(r.properties[t]))return H.True;if($w(n.properties[t],r.properties[t])===H.False)return H.False}return H.True})()}function h3(n,r){return nr(r)?rr(n,r):m.IsObject(r)&&m3(r)?H.True:!m.IsPromise(r)?H.False:nt(Un(n.item,r.item))}function s0(n){return _o in n.patternProperties?vr():(mo in n.patternProperties)?mt():Fc("Unknown record key pattern")}function l0(n){return _o in n.patternProperties?n.patternProperties[_o]:(mo in n.patternProperties)?n.patternProperties[mo]:Fc("Unable to get record value schema")}function rt(n,r){let[t,o]=[s0(r),l0(r)];return m.IsLiteralString(n)&&m.IsNumber(t)&&nt(Un(n,o))===H.True?H.True:m.IsUint8Array(n)&&m.IsNumber(t)?Un(n,o):m.IsString(n)&&m.IsNumber(t)?Un(n,o):m.IsArray(n)&&m.IsNumber(t)?Un(n,o):m.IsObject(n)?(()=>{for(let c of Object.getOwnPropertyNames(n.properties))if($w(o,n.properties[c])===H.False)return H.False;return H.True})():H.False}function $3(n,r){return nr(r)?rr(n,r):m.IsObject(r)?$r(n,r):!m.IsRecord(r)?H.False:Un(l0(n),l0(r))}function k3(n,r){let t=m.IsRegExp(n)?mt():n,o=m.IsRegExp(r)?mt():r;return Un(t,o)}function kw(n,r){return m.IsLiteral(n)&&mr.IsString(n.const)?H.True:m.IsString(n)?H.True:H.False}function R3(n,r){return nr(r)?rr(n,r):m.IsObject(r)?$r(n,r):m.IsRecord(r)?rt(n,r):m.IsString(r)?H.True:H.False}function A3(n,r){return nr(r)?rr(n,r):m.IsObject(r)?$r(n,r):m.IsRecord(r)?rt(n,r):m.IsSymbol(r)?H.True:H.False}function S3(n,r){return m.IsTemplateLiteral(n)?Un(Zo(n),r):m.IsTemplateLiteral(r)?Un(n,Zo(r)):Fc("Invalid fallthrough for TemplateLiteral")}function E3(n,r){return m.IsArray(r)&&n.items!==void 0&&n.items.every((t)=>Un(t,r.items)===H.True)}function M3(n,r){return m.IsNever(n)?H.True:m.IsUnknown(n)?H.False:m.IsAny(n)?H.Union:H.False}function D3(n,r){return nr(r)?rr(n,r):m.IsObject(r)&&Gi(r)?H.True:m.IsArray(r)&&E3(n,r)?H.True:!m.IsTuple(r)?H.False:mr.IsUndefined(n.items)&&!mr.IsUndefined(r.items)||!mr.IsUndefined(n.items)&&mr.IsUndefined(r.items)?H.False:mr.IsUndefined(n.items)&&!mr.IsUndefined(r.items)?H.True:n.items.every((t,o)=>Un(t,r.items[o])===H.True)?H.True:H.False}function H3(n,r){return nr(r)?rr(n,r):m.IsObject(r)?$r(n,r):m.IsRecord(r)?rt(n,r):m.IsUint8Array(r)?H.True:H.False}function z3(n,r){return nr(r)?rr(n,r):m.IsObject(r)?$r(n,r):m.IsRecord(r)?rt(n,r):m.IsVoid(r)?W3(n,r):m.IsUndefined(r)?H.True:H.False}function d0(n,r){return r.anyOf.some((t)=>Un(n,t)===H.True)?H.True:H.False}function U3(n,r){return n.anyOf.every((t)=>Un(t,r)===H.True)?H.True:H.False}function Rw(n,r){return H.True}function B3(n,r){return m.IsNever(r)?ww(n,r):m.IsIntersect(r)?Pi(n,r):m.IsUnion(r)?d0(n,r):m.IsAny(r)?f0(n,r):m.IsString(r)?kw(n,r):m.IsNumber(r)?hw(n,r):m.IsInteger(r)?mw(n,r):m.IsBoolean(r)?_w(n,r):m.IsArray(r)?TR(n,r):m.IsTuple(r)?M3(n,r):m.IsObject(r)?$r(n,r):m.IsUnknown(r)?H.True:H.False}function W3(n,r){return m.IsUndefined(n)?H.True:m.IsUndefined(n)?H.True:H.False}function Y3(n,r){return m.IsIntersect(r)?Pi(n,r):m.IsUnion(r)?d0(n,r):m.IsUnknown(r)?Rw(n,r):m.IsAny(r)?f0(n,r):m.IsObject(r)?$r(n,r):m.IsVoid(r)?H.True:H.False}function Un(n,r){return m.IsTemplateLiteral(n)||m.IsTemplateLiteral(r)?S3(n,r):m.IsRegExp(n)||m.IsRegExp(r)?k3(n,r):m.IsNot(n)||m.IsNot(r)?s3(n,r):m.IsAny(n)?pR(n,r):m.IsArray(n)?vR(n,r):m.IsBigInt(n)?ZR(n,r):m.IsBoolean(n)?yR(n,r):m.IsAsyncIterator(n)?IR(n,r):m.IsConstructor(n)?n3(n,r):m.IsDate(n)?r3(n,r):m.IsFunction(n)?t3(n,r):m.IsInteger(n)?o3(n,r):m.IsIntersect(n)?c3(n,r):m.IsIterator(n)?a3(n,r):m.IsLiteral(n)?e3(n,r):m.IsNever(n)?i3(n,r):m.IsNull(n)?l3(n,r):m.IsNumber(n)?f3(n,r):m.IsObject(n)?w3(n,r):m.IsRecord(n)?$3(n,r):m.IsString(n)?R3(n,r):m.IsSymbol(n)?A3(n,r):m.IsTuple(n)?D3(n,r):m.IsPromise(n)?h3(n,r):m.IsUint8Array(n)?H3(n,r):m.IsUndefined(n)?z3(n,r):m.IsUnion(n)?U3(n,r):m.IsUnknown(n)?B3(n,r):m.IsVoid(n)?Y3(n,r):Fc(`Unknown left type operand '${n[C]}'`)}function Ao(n,r){return Un(n,r)}var gw,H;var b0=f(()=>{Va();To();Io();Pc();Oc();vt();xa();y();Mt();Yf();gw=class gw extends fr{};(function(n){n[n.Union=0]="Union",n[n.True=1]="True",n[n.False=2]="False"})(H||(H={}))});function J3(n,r,t,o,c){let a={};for(let e of globalThis.Object.getOwnPropertyNames(n))a[e]=jc(n[e],r,t,o,Xn(c));return a}function X3(n,r,t,o,c){return J3(n.properties,r,t,o,c)}function Aw(n,r,t,o,c){let a=X3(n,r,t,o,c);return $n(a)}var u0=f(()=>{cr();qi();Mr()});function x3(n,r,t,o){let c=Ao(n,r);return c===H.Union?Sn([t,o]):c===H.True?t:o}function jc(n,r,t,o,c){return xn(n)?Aw(n,r,t,o,c):Cr(n)?D(Sw(n,r,t,o,c)):D(x3(n,r,t,o),c)}var qi=f(()=>{I();yn();b0();g0();u0();hn()});function L3(n,r,t,o,c){return{[n]:jc(Rn(n),r,t,o,Xn(c))}}function V3(n,r,t,o,c){return n.reduce((a,e)=>{return{...a,...L3(e,r,t,o,c)}},{})}function C3(n,r,t,o,c){return V3(n.keys,r,t,o,c)}function Sw(n,r,t,o,c){let a=C3(n,r,t,o,c);return $n(a)}var g0=f(()=>{cr();Hr();qi();Mr()});var Ew=()=>{};var va=f(()=>{b0();g0();u0();Ew();qi()});function Mw(n,r){return Kc(Zo(n),r)}var _0=f(()=>{Ni();vt()});function Q3(n,r){let t=n.filter((o)=>Ao(o,r)===H.False);return t.length===1?t[0]:Sn(t)}function Kc(n,r,t={}){if(Qr(n))return D(Mw(n,r),t);if(xn(n))return D(Dw(n,r),t);return D(gn(n)?Q3(n.anyOf,r):Ao(n,r)!==H.False?_n():n,t)}var Ni=f(()=>{I();yn();br();va();m0();_0();hn()});function P3(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(n))t[o]=Kc(n[o],r);return t}function G3(n,r){return P3(n.properties,r)}function Dw(n,r){let t=G3(n,r);return $n(t)}var m0=f(()=>{cr();Ni()});var w0=f(()=>{m0();_0();Ni()});function Hw(n,r){return pc(Zo(n),r)}var h0=f(()=>{Oi();vt()});function q3(n,r){let t=n.filter((o)=>Ao(o,r)!==H.False);return t.length===1?t[0]:Sn(t)}function pc(n,r,t){if(Qr(n))return D(Hw(n,r),t);if(xn(n))return D(zw(n,r),t);return D(gn(n)?q3(n.anyOf,r):Ao(n,r)!==H.False?n:_n(),t)}var Oi=f(()=>{I();yn();br();va();$0();h0();hn()});function N3(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(n))t[o]=pc(n[o],r);return t}function O3(n,r){return N3(n.properties,r)}function zw(n,r){let t=O3(n,r);return $n(t)}var $0=f(()=>{cr();Oi()});var k0=f(()=>{$0();h0();Oi()});function Uw(n,r){return bt(n)?D(n.returns,r):_n(r)}var Bw=f(()=>{I();br();hn()});var R0=f(()=>{Bw()});function Fi(n){return Ur(wr(n))}var Ww=f(()=>{yo();pt()});var ji=f(()=>{Ww()});function rc(n,r,t){return D({[C]:"Record",type:"object",patternProperties:{[n]:r}},t)}function A0(n,r,t){let o={};for(let c of n)o[c]=r;return zn(o,{...t,[Tr]:"Record"})}function F3(n,r,t){return um(n)?A0(zr(n),r,t):rc(n.pattern,r,t)}function j3(n,r,t){return A0(zr(Sn(n)),r,t)}function K3(n,r,t){return A0([n.toString()],r,t)}function p3(n,r,t){return rc(n.source,r,t)}function T3(n,r,t){let o=Kn(n.pattern)?mo:n.pattern;return rc(o,r,t)}function v3(n,r,t){return rc(mo,r,t)}function I3(n,r,t){return rc(N_,r,t)}function Z3(n,r,t){return zn({true:r,false:r},t)}function y3(n,r,t){return rc(_o,r,t)}function nA(n,r,t){return rc(_o,r,t)}function Ki(n,r,t={}){return gn(n)?j3(n.anyOf,r,t):Qr(n)?F3(n,r,t):Vr(n)?K3(n.const,r,t):Ot(n)?Z3(n,r,t):gt(n)?y3(n,r,t):_t(n)?nA(n,r,t):zf(n)?p3(n,r,t):Ft(n)?T3(n,r,t):Df(n)?v3(n,r,t):uo(n)?I3(n,r,t):_n(t)}function pi(n){return globalThis.Object.getOwnPropertyNames(n.patternProperties)[0]}function Yw(n){let r=pi(n);return r===mo?mt():r===_o?vr():mt({pattern:r})}function Ti(n){return n.patternProperties[pi(n)]}var Jw=f(()=>{I();y();br();Io();qr();Pc();yn();vt();xa();zt();hn()});var Ia=f(()=>{Jw()});function rA(n,r){return r.parameters=Za(n,r.parameters),r.returns=wt(n,r.returns),r}function tA(n,r){return r.parameters=Za(n,r.parameters),r.returns=wt(n,r.returns),r}function oA(n,r){return r.allOf=Za(n,r.allOf),r}function cA(n,r){return r.anyOf=Za(n,r.anyOf),r}function aA(n,r){if(Kn(r.items))return r;return r.items=Za(n,r.items),r}function eA(n,r){return r.items=wt(n,r.items),r}function iA(n,r){return r.items=wt(n,r.items),r}function sA(n,r){return r.items=wt(n,r.items),r}function lA(n,r){return r.item=wt(n,r.item),r}function fA(n,r){let t=gA(n,r.properties);return{...r,...zn(t)}}function dA(n,r){let t=wt(n,Yw(r)),o=wt(n,Ti(r)),c=Ki(t,o);return{...r,...c}}function bA(n,r){return r.index in n?n[r.index]:Ro()}function uA(n,r){let t=Jc(r),o=Dr(r),c=wt(n,r);return t&&o?Fi(c):t&&!o?Ur(c):!t&&o?wr(c):c}function gA(n,r){return globalThis.Object.getOwnPropertyNames(r).reduce((t,o)=>{return{...t,[o]:uA(n,r[o])}},{})}function Za(n,r){return r.map((t)=>wt(n,t))}function wt(n,r){return bt(r)?rA(n,r):ut(r)?tA(n,r):Cn(r)?oA(n,r):gn(r)?cA(n,r):Pr(r)?aA(n,r):ft(r)?eA(n,r):Oo(r)?iA(n,r):jo(r)?sA(n,r):Ko(r)?lA(n,r):pn(r)?fA(n,r):po(r)?dA(n,r):Hf(r)?bA(n,r):r}function Xw(n,r){return wt(r,Yc(n))}var xw=f(()=>{gi();Oc();ji();yo();pt();qr();Ia();hn()});var S0=f(()=>{xw()});function Lw(n){return D({[C]:"Integer",type:"integer"},n)}var Vw=f(()=>{I();y()});var E0=f(()=>{Vw()});function _A(n,r,t){return{[n]:ht(Rn(n),r,Xn(t))}}function mA(n,r,t){return n.reduce((c,a)=>{return{...c,..._A(a,r,t)}},{})}function wA(n,r,t){return mA(n.keys,r,t)}function Cw(n,r,t){let o=wA(n,r,t);return $n(o)}var M0=f(()=>{cr();tc();Hr();Mr()});function hA(n){let[r,t]=[n.slice(0,1),n.slice(1)];return[r.toLowerCase(),t].join("")}function $A(n){let[r,t]=[n.slice(0,1),n.slice(1)];return[r.toUpperCase(),t].join("")}function kA(n){return n.toUpperCase()}function RA(n){return n.toLowerCase()}function AA(n,r,t){let o=Cc(n.pattern);if(!vo(o))return{...n,pattern:Qw(n.pattern,r)};let e=[...Na(o)].map((l)=>Rn(l)),i=Pw(e,r),s=Sn(i);return Si([s],t)}function Qw(n,r){return typeof n==="string"?r==="Uncapitalize"?hA(n):r==="Capitalize"?$A(n):r==="Uppercase"?kA(n):r==="Lowercase"?RA(n):n:n.toString()}function Pw(n,r){return n.map((t)=>ht(t,r))}function ht(n,r,t={}){return Cr(n)?Cw(n,r,t):Qr(n)?AA(n,r,t):gn(n)?Sn(Pw(n.anyOf,r),t):Vr(n)?Rn(Qw(n.const,r),t):D(n,t)}var tc=f(()=>{I();vt();M0();Hr();yn();hn()});function Gw(n,r={}){return ht(n,"Capitalize",r)}var qw=f(()=>{tc()});function Nw(n,r={}){return ht(n,"Lowercase",r)}var Ow=f(()=>{tc()});function Fw(n,r={}){return ht(n,"Uncapitalize",r)}var jw=f(()=>{tc()});function Kw(n,r={}){return ht(n,"Uppercase",r)}var pw=f(()=>{tc()});var D0=f(()=>{qw();M0();tc();Ow();jw();pw()});function SA(n,r,t){let o={};for(let c of globalThis.Object.getOwnPropertyNames(n))o[c]=So(n[c],r,Xn(t));return o}function EA(n,r,t){return SA(n.properties,r,t)}function Tw(n,r,t){let o=EA(n,r,t);return $n(o)}var H0=f(()=>{cr();vi();Mr()});function MA(n,r){return n.map((t)=>z0(t,r))}function DA(n,r){return n.map((t)=>z0(t,r))}function HA(n,r){let{[r]:t,...o}=n;return o}function zA(n,r){return r.reduce((t,o)=>HA(t,o),n)}function UA(n,r,t){let o=Qn(n,[Zn,"$id","required","properties"]),c=zA(t,r);return zn(c,o)}function BA(n){let r=n.reduce((t,o)=>mi(o)?[...t,Rn(o)]:t,[]);return Sn(r)}function z0(n,r){return Cn(n)?hr(MA(n.allOf,r)):gn(n)?Sn(DA(n.anyOf,r)):pn(n)?UA(n,r,n.properties):zn({})}function So(n,r,t){let o=jn(r)?BA(r):r,c=Gr(r)?zr(r):r,a=Gn(n),e=Gn(r);return xn(n)?Tw(n,c,t):Cr(r)?vw(n,r,t):a&&e?Jn("Omit",[n,o],t):!a&&e?Jn("Omit",[n,o],t):a&&!e?Jn("Omit",[n,o],t):D({...z0(n,c),...t})}var vi=f(()=>{I();Ua();ho();Hr();zt();Ir();yn();qr();U0();H0();hn()});function WA(n,r,t){return{[r]:So(n,[r],Xn(t))}}function YA(n,r,t){return r.reduce((o,c)=>{return{...o,...WA(n,c,t)}},{})}function JA(n,r,t){return YA(n,r.keys,t)}function vw(n,r,t){let o=JA(n,r,t);return $n(o)}var U0=f(()=>{cr();vi();Mr()});var Ii=f(()=>{U0();H0();vi()});function XA(n,r,t){let o={};for(let c of globalThis.Object.getOwnPropertyNames(n))o[c]=Eo(n[c],r,Xn(t));return o}function xA(n,r,t){return XA(n.properties,r,t)}function Iw(n,r,t){let o=xA(n,r,t);return $n(o)}var B0=f(()=>{cr();Zi();Mr()});function LA(n,r){return n.map((t)=>W0(t,r))}function VA(n,r){return n.map((t)=>W0(t,r))}function CA(n,r){let t={};for(let o of r)if(o in n)t[o]=n[o];return t}function QA(n,r,t){let o=Qn(n,[Zn,"$id","required","properties"]),c=CA(t,r);return zn(c,o)}function PA(n){let r=n.reduce((t,o)=>mi(o)?[...t,Rn(o)]:t,[]);return Sn(r)}function W0(n,r){return Cn(n)?hr(LA(n.allOf,r)):gn(n)?Sn(VA(n.anyOf,r)):pn(n)?QA(n,r,n.properties):zn({})}function Eo(n,r,t){let o=jn(r)?PA(r):r,c=Gr(r)?zr(r):r,a=Gn(n),e=Gn(r);return xn(n)?Iw(n,c,t):Cr(r)?Zw(n,r,t):a&&e?Jn("Pick",[n,o],t):!a&&e?Jn("Pick",[n,o],t):a&&!e?Jn("Pick",[n,o],t):D({...W0(n,c),...t})}var Zi=f(()=>{I();ho();Ir();Hr();qr();yn();zt();Ua();hn();Y0();B0()});function GA(n,r,t){return{[r]:Eo(n,[r],Xn(t))}}function qA(n,r,t){return r.reduce((o,c)=>{return{...o,...GA(n,c,t)}},{})}function NA(n,r,t){return qA(n,r.keys,t)}function Zw(n,r,t){let o=NA(n,r,t);return $n(o)}var Y0=f(()=>{cr();Zi();Mr()});var yi=f(()=>{Y0();B0();Zi()});function OA(n,r){return Jn("Partial",[Jn(n,r)])}function FA(n){return Jn("Partial",[Ut(n)])}function jA(n){let r={};for(let t of globalThis.Object.getOwnPropertyNames(n))r[t]=wr(n[t]);return r}function KA(n,r){let t=Qn(n,[Zn,"$id","required","properties"]),o=jA(r);return zn(o,t)}function yw(n){return n.map((r)=>n1(r))}function n1(n){return dt(n)?OA(n.target,n.parameters):Gn(n)?FA(n.$ref):Cn(n)?hr(yw(n.allOf)):gn(n)?Sn(yw(n.anyOf)):pn(n)?KA(n,n.properties):Fo(n)?n:Ot(n)?n:gt(n)?n:Vr(n)?n:Ba(n)?n:_t(n)?n:Ft(n)?n:Wa(n)?n:Ya(n)?n:zn({})}function Tc(n,r){if(xn(n))return r1(n,r);else return D({...n1(n),...r})}var J0=f(()=>{I();ho();pt();qr();Ir();yn();nc();Kt();y();X0();hn()});function pA(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(n))t[o]=Tc(n[o],Xn(r));return t}function TA(n,r){return pA(n.properties,r)}function r1(n,r){let t=TA(n,r);return $n(t)}var X0=f(()=>{cr();J0();Mr()});var ns=f(()=>{X0();J0()});function vA(n,r){return Jn("Required",[Jn(n,r)])}function IA(n){return Jn("Required",[Ut(n)])}function ZA(n){let r={};for(let t of globalThis.Object.getOwnPropertyNames(n))r[t]=Qn(n[t],[dr]);return r}function yA(n,r){let t=Qn(n,[Zn,"$id","required","properties"]),o=ZA(r);return zn(o,t)}function t1(n){return n.map((r)=>o1(r))}function o1(n){return dt(n)?vA(n.target,n.parameters):Gn(n)?IA(n.$ref):Cn(n)?hr(t1(n.allOf)):gn(n)?Sn(t1(n.anyOf)):pn(n)?yA(n,n.properties):Fo(n)?n:Ot(n)?n:gt(n)?n:Vr(n)?n:Ba(n)?n:_t(n)?n:Ft(n)?n:Wa(n)?n:Ya(n)?n:zn({})}function vc(n,r){if(xn(n))return c1(n,r);else return D({...o1(n),...r})}var x0=f(()=>{I();ho();qr();Ir();yn();nc();y();Kt();L0();hn()});function n4(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(n))t[o]=vc(n[o],r);return t}function r4(n,r){return n4(n.properties,r)}function c1(n,r){let t=r4(n,r);return $n(t)}var L0=f(()=>{cr();x0()});var rs=f(()=>{L0();x0()});function t4(n,r){return r.map((t)=>{return Gn(t)?V0(n,t.$ref):Nr(n,t)})}function V0(n,r){return r in n?Gn(n[r])?V0(n,n[r].$ref):Nr(n,n[r]):_n()}function o4(n){return qc(n[0])}function c4(n){return $o(n[0],n[1])}function a4(n){return Nc(n[0])}function e4(n){return Tc(n[0])}function i4(n){return So(n[0],n[1])}function s4(n){return Eo(n[0],n[1])}function l4(n){return vc(n[0])}function f4(n,r,t){let o=t4(n,t);return r==="Awaited"?o4(o):r==="Index"?c4(o):r==="KeyOf"?a4(o):r==="Partial"?e4(o):r==="Omit"?i4(o):r==="Pick"?s4(o):r==="Required"?l4(o):_n()}function d4(n,r){return Xc(Nr(n,r))}function b4(n,r){return xc(Nr(n,r))}function u4(n,r,t){return Lc(ya(n,r),Nr(n,t))}function g4(n,r,t){return Dt(ya(n,r),Nr(n,t))}function _4(n,r){return hr(ya(n,r))}function m4(n,r){return Gc(Nr(n,r))}function w4(n,r){return zn(globalThis.Object.keys(r).reduce((t,o)=>{return{...t,[o]:Nr(n,r[o])}},{}))}function h4(n,r){let[t,o]=[Nr(n,Ti(r)),pi(r)],c=Yc(r);return c.patternProperties[o]=t,c}function $4(n,r){return Gn(r)?{...V0(n,r.$ref),[Zn]:r[Zn]}:r}function k4(n,r){return Zr(ya(n,r))}function R4(n,r){return Sn(ya(n,r))}function ya(n,r){return r.map((t)=>Nr(n,t))}function Nr(n,r){return Dr(r)?D(Nr(n,Qn(r,[dr])),r):Jc(r)?D(Nr(n,Qn(r,[lt])),r):go(r)?D($4(n,r),r):ft(r)?D(d4(n,r.items),r):Oo(r)?D(b4(n,r.items),r):dt(r)?D(f4(n,r.target,r.parameters)):bt(r)?D(u4(n,r.parameters,r.returns),r):ut(r)?D(g4(n,r.parameters,r.returns),r):Cn(r)?D(_4(n,r.allOf),r):jo(r)?D(m4(n,r.items),r):pn(r)?D(w4(n,r.properties),r):po(r)?D(h4(n,r)):Pr(r)?D(k4(n,r.items||[]),r):gn(r)?D(R4(n,r.anyOf),r):r}function A4(n,r){return r in n?Nr(n,n[r]):_n()}function a1(n){return globalThis.Object.getOwnPropertyNames(n).reduce((r,t)=>{return{...r,[t]:A4(n,t)}},{})}var e1=f(()=>{Nt();Mf();Kt();Ca();zi();Qa();Pa();zt();To();Ir();Fa();Ta();qr();Ii();yi();br();ns();Ia();rs();ko();yn();y();hn()});class i1{constructor(n){let r=a1(n),t=this.WithIdentifiers(r);this.$defs=t}Import(n,r){let t={...this.$defs,[n]:D(this.$defs[n],r)};return D({[C]:"Import",$defs:t,$ref:n})}WithIdentifiers(n){return globalThis.Object.getOwnPropertyNames(n).reduce((r,t)=>{return{...r,[t]:{...n[t],$id:t}}},{})}}function s1(n){return new i1(n)}var l1=f(()=>{Nt();y();e1()});var C0=f(()=>{l1()});function f1(n,r){return D({[C]:"Not",not:n},r)}var d1=f(()=>{I();y()});var Q0=f(()=>{d1()});function b1(n,r){return ut(n)?Zr(n.parameters,r):_n()}var u1=f(()=>{ko();br();hn()});var P0=f(()=>{u1()});function g1(n,r={}){if(Kn(r.$id))r.$id=`T${S4++}`;let t=Yc(n({[C]:"This",$ref:`${r.$id}`}));return t.$id=r.$id,D({[Tr]:"Recursive",...t},r)}var S4=0;var _1=f(()=>{gi();I();y()});var G0=f(()=>{_1()});function m1(n,r){let t=Wn(n)?new globalThis.RegExp(n):n;return D({[C]:"RegExp",type:"RegExp",source:t.source,flags:t.flags},r)}var w1=f(()=>{I();y()});var q0=f(()=>{w1()});function E4(n){return Cn(n)?n.allOf:gn(n)?n.anyOf:Pr(n)?n.items??[]:[]}function h1(n){return E4(n)}var $1=f(()=>{hn()});var N0=f(()=>{$1()});function k1(n,r){return ut(n)?D(n.returns,r):_n(r)}var R1=f(()=>{I();br();hn()});var O0=f(()=>{R1()});var A1=()=>{};var S1=()=>{};var E1=f(()=>{A1();S1()});var M1=()=>{};var D1=f(()=>{M1()});class H1{constructor(n){this.schema=n}Decode(n){return new z1(this.schema,n)}}class z1{constructor(n,r){this.schema=n,this.decode=r}EncodeTransform(n,r){let c={Encode:(a)=>r[Zn].Encode(n(a)),Decode:(a)=>this.decode(r[Zn].Decode(a))};return{...r,[Zn]:c}}EncodeSchema(n,r){let t={Decode:this.decode,Encode:n};return{...r,[Zn]:t}}Encode(n){return go(this.schema)?this.EncodeTransform(n,this.schema):this.EncodeSchema(n,this.schema)}}function U1(n){return new H1(n)}var B1=f(()=>{y();hn()});var F0=f(()=>{B1()});function W1(n={}){return D({[C]:n[C]??"Unsafe"},n)}var Y1=f(()=>{I();y()});var j0=f(()=>{Y1()});function J1(n){return D({[C]:"Void",type:"void"},n)}var X1=f(()=>{I();y()});var K0=f(()=>{X1()});var p0={};Zt(p0,{Void:()=>J1,Uppercase:()=>Kw,Unsafe:()=>W1,Unknown:()=>Ro,Union:()=>Sn,Undefined:()=>xi,Uncapitalize:()=>Fw,Uint8Array:()=>Vi,Tuple:()=>Zr,Transform:()=>U1,TemplateLiteral:()=>Si,Symbol:()=>Ji,String:()=>mt,ReturnType:()=>k1,Rest:()=>h1,Required:()=>vc,RegExp:()=>m1,Ref:()=>Ut,Recursive:()=>g1,Record:()=>Ki,ReadonlyOptional:()=>Fi,Readonly:()=>Ur,Promise:()=>Di,Pick:()=>Eo,Partial:()=>Tc,Parameters:()=>b1,Optional:()=>wr,Omit:()=>So,Object:()=>zn,Number:()=>vr,Null:()=>Wi,Not:()=>f1,Never:()=>_n,Module:()=>s1,Mapped:()=>Vm,Lowercase:()=>Nw,Literal:()=>Rn,KeyOf:()=>Nc,Iterator:()=>Gc,Intersect:()=>hr,Integer:()=>Lw,Instantiate:()=>Xw,InstanceType:()=>Uw,Index:()=>$o,Function:()=>Dt,Extract:()=>pc,Extends:()=>jc,Exclude:()=>Kc,Enum:()=>sw,Date:()=>Ui,ConstructorParameters:()=>ew,Constructor:()=>Lc,Const:()=>cw,Composite:()=>vm,Capitalize:()=>Gw,Boolean:()=>Ri,BigInt:()=>Qc,Awaited:()=>qc,AsyncIterator:()=>xc,Array:()=>Xc,Argument:()=>y_,Any:()=>wo});var x1=f(()=>{Va();Jf();Ca();Qa();zi();Oa();Ai();t0();c0();Pa();a0();Bi();e0();w0();va();k0();To();zt();R0();S0();E0();Ir();D0();Fa();Ta();Hr();cr();C0();br();Q0();Yi();Io();qr();Ii();pt();P0();ns();yi();Hi();yo();ji();Ia();G0();nc();q0();rs();N0();O0();Pc();Xi();vt();F0();ko();Ci();Li();yn();Oc();j0();K0()});var tr;var L1=f(()=>{x1();tr=p0});var V1=f(()=>{Mf();Nt();Mt();Yf();P_();xa();j_();La();y();Va();Ca();Jf();Qa();zi();Oa();Ai();t0();c0();Pa();a0();Bi();e0();w0();va();k0();To();zt();R0();S0();E0();Ir();Fa();D0();Ta();Hr();C0();cr();br();Q0();Yi();Io();qr();Ii();pt();P0();ns();yi();Hi();yo();ji();Ia();G0();nc();q0();rs();N0();O0();E1();D1();Pc();Xi();vt();F0();ko();Ci();Li();yn();Oc();j0();K0();L1()});var T0,v0,qq,Nq;var I0=f(()=>{V1();T0=tr.Object({email:tr.String({format:"email"})}),v0=tr.Object({token:tr.String()}),qq=tr.Object({success:tr.Boolean(),message:tr.Optional(tr.String())}),Nq=tr.Object({success:tr.Boolean(),message:tr.Optional(tr.String()),data:tr.Optional(tr.Object({user:tr.Object({id:tr.String(),email:tr.String()}),accessToken:tr.String(),refreshToken:tr.String()}))})});import{eq as Z0}from"drizzle-orm";import{Elysia as M4}from"elysia";function ts(n,r,t,o,c,a,e,i,s,l){let{db:d,logger:b,usersTable:u}=n,$=r.route||"/auth/magic-link",k=r.verifyRoute||"/auth/magic-link/verify",w=r.expiresIn||"15m",_=r.redirectUrl||"",R=new M4;if(!r.enabled)return R;return R.post($,async(X)=>{if(!d||!u)return{success:!1,message:"Database not configured"};if(!t?.isAvailable())return b.error("[AUTH] Magic link requested but email service not available"),{success:!1,message:"Email service not available"};let{email:x}=X.body,P=(await d.select().from(u).where(Z0(u.email,x)).limit(1))[0];if(!P)return b.info("[AUTH] Magic link requested for non-existent email",{email:x}),{success:!0,message:"If an account exists, a magic link has been sent"};if(P.isLocked)return b.warn("[AUTH] Magic link requested for locked account",{email:x}),{success:!0,message:"If an account exists, a magic link has been sent"};let M=oi(),A=Pt(M),z=new Date(Date.now()+ci(w));await e({userId:P.id,email:x,tokenHash:A,expiresAt:z});let h=_?`${_}?token=${M}`:`${k}?token=${M}`,g=await t.sendMagicLinkEmail(x,h,l);if(!g.success)return b.error("[AUTH] Failed to send magic link email",{email:x,error:g.error}),{success:!1,message:"Failed to send email"};return b.info("[AUTH] Magic link sent",{email:x,userId:P.id}),{success:!0,message:"If an account exists, a magic link has been sent"}},{body:T0,detail:{tags:["Authentication"],summary:"Request Magic Link",description:"Send a magic link to the user's email for passwordless login"}}),R.get(k,async(X)=>{if(!d||!u)return{success:!1,message:"Database not configured"};let x=X.query.token;if(!x)return{success:!1,message:"Token is required"};let E=Pt(x),P=await i(E);if(!P)return b.warn("[AUTH] Invalid magic link token"),{success:!1,message:"Invalid or expired token"};if(new Date>P.expiresAt)return await s(E),b.warn("[AUTH] Expired magic link token",{email:P.email}),{success:!1,message:"Invalid or expired token"};let A=(await d.select().from(u).where(Z0(u.id,P.userId)).limit(1))[0];if(!A)return await s(E),{success:!1,message:"User not found"};await s(E),await d.update(u).set({lastLoginAt:new Date,loginCount:(A.loginCount||0)+1,emailVerified:!0}).where(Z0(u.id,A.id));let z=X.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||X.request.headers.get("x-real-ip")?.trim()||"unknown",h=X.request.headers.get("user-agent")||"",g=o(A.id),B=c(A.id),G=await a({userId:A.id,deviceInfo:{ipAddress:z,userAgent:h,deviceType:"unknown"},loginMethod:"magic_link"});return b.info("[AUTH] Magic link login successful",{userId:A.id,email:A.email}),X.set.headers["x-session-id"]=G,{success:!0,data:{user:{id:A.id,email:A.email},accessToken:g,refreshToken:B}}},{query:v0,detail:{tags:["Authentication"],summary:"Verify Magic Link",description:"Verify magic link token and login user"}}),R}var y0=f(()=>{I0();ai();I0()});import{eq as Ic}from"drizzle-orm";import{Elysia as D4}from"elysia";function os(n,r,t,o,c){let{db:a,logger:e,usersTable:i}=n,s=r.route||"/auth/me",l=new D4;if(!r.enabled)return l;return l.get(s,async(d)=>{if(!a||!i)return{success:!1,message:"Database not configured"};let b=d.request.headers.get("x-user-id");if(!b)return d.set.status=401,{success:!1,message:"Unauthorized"};let $=(await a.select().from(i).where(Ic(i.id,b)).limit(1))[0];if(!$)return d.set.status=404,{success:!1,message:"User not found"};let{password:k,...w}=$,_=null,R=[],X=[],x=[],E=[];if(r.includeProfile&&t){let M=t.profiles;if(M&&a)_=(await a.select().from(M).where(Ic(M.userId,b)).limit(1))[0]||null}if(r.includeAddresses&&t){let M=t.addresses;if(M&&a)R=await a.select().from(M).where(Ic(M.ownerId,b))}if(r.includePhones&&t){let M=t.phones;if(M&&a)X=await a.select().from(M).where(Ic(M.ownerId,b))}if(r.includeFiles&&t){let M=t.files;if(M&&a)x=await a.select().from(M).where(Ic(M.uploadedBy,b))}if(r.includeRoles&&t){let{userRoles:M,roles:A}=t;if(M&&A&&a){let h=(await a.select().from(M).where(Ic(M.userId,b))).map((g)=>g.roleId);if(h.length>0){let{inArray:g}=await import("drizzle-orm");E=await a.select().from(A).where(g(A.id,h))}}}return e.info("[AUTH] Me endpoint accessed",{userId:b}),JSON.parse(JSON.stringify({success:!0,data:{user:w,profile:_,addresses:R,phones:X,files:x,roles:E}},(M,A)=>typeof A==="bigint"?Number(A):A))},{detail:{tags:["Authentication"],summary:"Get current user",description:"Get the currently authenticated user with profile, addresses, phones and files"}}),l}var nd=()=>{};import{t as Mo}from"elysia";var rd,H4;var td=f(()=>{rd=Mo.Object({currentPassword:Mo.String({minLength:1}),newPassword:Mo.String({minLength:8}),confirmPassword:Mo.String({minLength:8})}),H4=Mo.Object({success:Mo.Boolean(),message:Mo.Optional(Mo.String())})});function C1(n,r){return n===r}import{eq as Q1}from"drizzle-orm";import{Elysia as z4}from"elysia";function cs(n,r){let{db:t,logger:o,usersTable:c}=n,a=r.route||"/auth/password-change",e=new z4;if(!r.enabled)return e;return e.post(a,async(i)=>{if(!t||!c)return i.set.status=500,{success:!1,message:"Database not configured"};let s=i.request.headers.get("x-user-id");if(!s)return i.set.status=401,{success:!1,message:"Authentication required"};let{currentPassword:l,newPassword:d,confirmPassword:b}=i.body;if(!C1(d,b))return i.set.status=422,{success:!1,message:"New passwords do not match"};let $=(await t.select().from(c).where(Q1(c.id,s)).limit(1))[0];if(!$)return i.set.status=404,{success:!1,message:"User not found"};let k=await si(l,$.password),w=new URL(i.request.url),_=i.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||i.request.headers.get("x-real-ip")?.trim()||"unknown",R=i.request.headers.get("user-agent")||"unknown";if(!k)return o.warn("[AUTH] Password change failed - invalid current password",{userId:s}),o.audit({entityName:"users",entityId:s,operation:"PASSWORD_CHANGE_FAILED",userId:s,summary:"Password change failed: invalid current password",ipAddress:_,userAgent:R,path:w.pathname,query:w.search}),i.set.status=400,{success:!1,message:"Current password is incorrect"};let X=await bo(d);return await t.update(c).set({password:X,updatedAt:new Date}).where(Q1(c.id,s)),o.info("[AUTH] Password change successful",{userId:s}),o.audit({entityName:"users",entityId:s,operation:"PASSWORD_CHANGE",userId:s,summary:"Password changed successfully",ipAddress:_,userAgent:R,path:w.pathname,query:w.search}),{success:!0,message:"Password changed successfully"}},{body:rd,detail:{tags:["Authentication"],summary:"Change Password",description:"Change password for authenticated user"}}),e}var od=f(()=>{mf();Wc();td();td()});import{t as Bt}from"elysia";var cd,ad,U4;var ed=f(()=>{cd=Bt.Object({email:Bt.String({format:"email"})}),ad=Bt.Object({token:Bt.String(),newPassword:Bt.String({minLength:8}),confirmPassword:Bt.String({minLength:8})}),U4=Bt.Object({success:Bt.Boolean(),message:Bt.Optional(Bt.String())})});import{randomBytes as B4}from"crypto";function P1(){return B4(32).toString("hex")}function G1(n){return new Date>n}var q1=()=>{};import{Elysia as W4}from"elysia";function as(n,r,t,o,c,a){let{db:e,logger:i,usersTable:s}=n,l=r.route||"/auth/password-reset",d=new W4;if(!r.enabled)return d;return d.post(`${l}/request`,async(b)=>{if(!e||!s)return{success:!1,message:"Database not configured"};let{email:u}=b.body,{eq:$}=await import("drizzle-orm"),w=(await e.select().from(s).where($(s.email,u)).limit(1))[0];if(!w)return{success:!0,message:"If email exists, reset link will be sent"};let _=P1(),R=new Date(Date.now()+3600000);if(await t(w.id,_,R),a)try{await a(u,_),i.info("[AUTH] Password reset email sent",{email:u})}catch(x){i.error("[AUTH] Failed to send password reset email",{email:u,error:x})}else i.warn("[AUTH] sendResetEmail not configured - email not sent",{email:u});i.info("[AUTH] Password reset requested",{userId:w.id,email:u});let X=new URL(b.request.url);return i.audit({entityName:"users",entityId:w.id,operation:"PASSWORD_RESET_REQUEST",userId:w.id,summary:`Password reset requested for ${u}`,ipAddress:b.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||b.request.headers.get("x-real-ip")?.trim()||"unknown",userAgent:b.request.headers.get("user-agent")||"unknown",path:X.pathname,query:X.search}),{success:!0,message:"If email exists, reset link will be sent"}},{body:cd,detail:{tags:["Authentication"],summary:"Request Password Reset",description:"Request a password reset email"}}),d.post(`${l}/confirm`,async(b)=>{if(!e||!s)return{success:!1,message:"Database not configured"};let{token:u,newPassword:$,confirmPassword:k}=b.body;if($!==k)return{success:!1,message:"Passwords do not match"};let w=await o(u);if(!w)return{success:!1,message:"Invalid or expired reset token"};if(G1(w.expiresAt))return await c(u),{success:!1,message:"Reset token has expired"};let _=await bo($),{eq:R}=await import("drizzle-orm");await e.update(s).set({password:_}).where(R(s.id,w.userId)),await c(u),i.info("[AUTH] Password reset successful",{userId:w.userId});let X=new URL(b.request.url);return i.audit({entityName:"users",entityId:w.userId,operation:"PASSWORD_RESET",userId:w.userId,summary:"Password reset completed successfully",ipAddress:b.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||b.request.headers.get("x-real-ip")?.trim()||"unknown",userAgent:b.request.headers.get("user-agent")||"unknown",path:X.pathname,query:X.search}),{success:!0,message:"Password has been reset"}},{body:ad,detail:{tags:["Authentication"],summary:"Confirm Password Reset",description:"Reset password with token"}}),d}var id=f(()=>{Wc();ed();q1();ed()});import{t as It}from"elysia";var sd,Y4;var ld=f(()=>{sd=It.Object({newPassword:It.String({minLength:8}),userId:It.Optional(It.String()),token:It.Optional(It.String())}),Y4=It.Object({success:It.Boolean(),message:It.String()})});import{eq as N1}from"drizzle-orm";import{Elysia as J4}from"elysia";function es(n,r,t,o){let{db:c,logger:a,usersTable:e}=n,i=r.route||"/auth/password-set",s=new J4;if(!r.enabled)return s;return s.post(i,async(l)=>{if(a.info("[AUTH] Password set request received"),!c||!e)return a.error("[AUTH] Password set failed - database not configured"),{success:!1,message:"Database not configured"};let{newPassword:d,userId:b,token:u}=l.body,$=b;if(u&&t&&o){let X=Pt(u),x=await t(X);if(!x)return a.warn("[AUTH] Password set failed - invalid token"),{success:!1,message:"Invalid or expired token"};if(new Date>x.expiresAt)return await o(X),a.warn("[AUTH] Password set failed - expired token",{email:x.email}),{success:!1,message:"Invalid or expired token"};$=x.userId,a.info("[AUTH] Password set - userId resolved from token",{userId:$,email:x.email})}if(!$)return a.warn("[AUTH] Password set failed - no userId in payload or token"),{success:!1,message:"User ID or token required"};let w=(await c.select().from(e).where(N1(e.id,$)).limit(1))[0];if(a.info("[AUTH] Password set - user found",{found:!!w,hasPassword:!!w?.password}),!w)return{success:!1,message:"User not found"};if(w.password)return a.warn("[AUTH] Password set failed - user already has password",{userId:$}),{success:!1,message:"Password already set. Use password change instead."};let _=await bo(d);a.info("[AUTH] Password set - updating user with verifiedAt",{userId:$});let R=await c.update(e).set({password:_,verifiedAt:new Date,updatedAt:new Date}).where(N1(e.id,$));if(a.info("[AUTH] Password set successful for invited user",{userId:$,updateResult:R}),u&&o){let X=Pt(u);await o(X),a.info("[AUTH] Invite token consumed after password set",{userId:$})}return{success:!0,message:"Password set successfully"}},{body:sd,detail:{tags:["Authentication"],summary:"Set Password",description:"Set password for the first time (for invited users who do not have a password yet)"}}),s}var fd=f(()=>{ai();Wc();ld();ld()});function dd(n){let r=n.match(/^(\d+)([smhd])$/);if(!r)return 900;let t=r[1],o=r[2];if(!t||!o)return 900;let c=parseInt(t,10);switch(o){case"s":return c;case"m":return c*60;case"h":return c*3600;case"d":return c*86400;default:return 900}}import{t as oc}from"elysia";var X4;var O1=f(()=>{X4=oc.Object({success:oc.Boolean(),message:oc.Optional(oc.String()),data:oc.Optional(oc.Object({accessToken:oc.String()}))})});import{Elysia as x4}from"elysia";function is(n,r,t,o,c,a,e){let{logger:i,authentication:s}=n,l=r.route||"/auth/refresh",d=new x4;if(!r.enabled)return d;return d.post(l,async(b)=>{let u=s?.refreshToken?.name||"refresh_token",$=s?.accessToken?.name||"access_token",k=b.request.headers.get("x-refresh-token");if(!k){let O=b.request.headers.get("cookie");if(O)k=O.split(";").reduce((J,W)=>{let[U,Y]=W.trim().split("=");if(U&&Y)J[U]=Y;return J},{})[u]||null}if(!k)return b.set.status=401,{success:!1,message:"Refresh token required"};let w=t(k);if(!w.valid||!w.payload)return i.warn("[AUTH] Refresh failed - invalid token"),b.set.status=401,{success:!1,message:"Invalid refresh token"};let _=w.payload.sub,R=o(_),X=c?c(_):null,x=a?.accessToken?.setHeadersEnabled??!0,E=a?.accessToken?.returnJson??!0,P=a?.refreshToken?.setHeadersEnabled??!0,M=a?.refreshToken?.returnJson??!1,A=s?.accessToken?.expiresIn||"15m",z=Math.max(0,dd(A)-(e??0)),h=s?.refreshToken?.expiresIn||"7d",g=dd(h),B=new Headers;if(B.set("Content-Type","application/json"),x)B.append("Set-Cookie",`${$}=${R}; Path=/; HttpOnly; SameSite=Strict; Secure; Max-Age=${z}`);if(X&&P)B.append("Set-Cookie",`${u}=${X}; Path=/; HttpOnly; SameSite=Strict; Secure; Max-Age=${g}`);i.info("[AUTH] Token refresh successful",{userId:_,rotatedRefreshToken:!!X});let G={};if(E)G.accessToken=R;if(X&&M)G.refreshToken=X;let L=JSON.stringify({success:!0,data:G});return new Response(L,{status:200,headers:B})},{detail:{tags:["Authentication"],summary:"Refresh Token",description:"Get new access token using refresh token"}}),d}var bd=f(()=>{O1()});import{t as Wr}from"elysia";var ud,L4;var gd=f(()=>{ud=Wr.Object({email:Wr.String({format:"email"}),password:Wr.String({minLength:8}),confirmPassword:Wr.Optional(Wr.String({minLength:8}))}),L4=Wr.Object({success:Wr.Boolean(),message:Wr.Optional(Wr.String()),data:Wr.Optional(Wr.Object({user:Wr.Object({id:Wr.String(),email:Wr.String()})}))})});import{eq as V4}from"drizzle-orm";import{Elysia as C4}from"elysia";function ss(n,r,t,o,c,a,e,i,s,l){let{db:d,logger:b,usersTable:u}=n,$=r.route||"/auth/register",k={accessTokenName:e?.accessTokenName||"access_token",refreshTokenName:e?.refreshTokenName||"refresh_token",sessionTokenName:e?.sessionTokenName||"session_token",accessTokenMaxAge:e?.accessTokenMaxAge||900,refreshTokenMaxAge:e?.refreshTokenMaxAge||604800,sessionTokenMaxAge:e?.sessionTokenMaxAge||900,secure:e?.secure??!0,httpOnly:e?.httpOnly??!0,sameSite:e?.sameSite||"strict",path:e?.path||"/"},w=new C4;if(!r.enabled)return w;return w.post($,async(_)=>{if(!d||!u)return _.set.status=500,{success:!1,message:"Database not configured"};let{email:R,password:X,confirmPassword:x}=_.body;if(x&&X!==x)return _.set.status=400,{success:!1,message:"Passwords do not match"};let E=Vg(X);if(!E.valid)return _.set.status=400,{success:!1,message:"Password too weak",errors:E.errors};let P=await d.select().from(u).where(V4(u.email,R)).limit(1),M=new URL(_.request.url),A=_.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||_.request.headers.get("x-real-ip")?.trim()||"unknown",z=_.request.headers.get("user-agent")||"unknown";if(P.length>0)return b.warn("[AUTH] Registration failed - email exists",{email:R}),b.audit({entityName:"users",operation:"REGISTER_FAILED",summary:`Registration failed: email already exists (${R})`,ipAddress:A,userAgent:z,path:M.pathname,query:M.search}),_.set.status=409,{success:!1,message:"Email already registered"};let h=await bo(X),g=r.emailVerification?.enabled&&s?.isAvailable(),B=g?ye():null,G=r.emailVerification?.tokenExpiresIn||"24h",L=g?new Date(Date.now()+Bc(G)):null,O={email:R,password:h};if(g&&B)O.emailVerificationToken=B,O.emailVerificationTokenExpiresAt=L,O.emailVerificationSentAt=new Date,O.emailVerificationAttempts=1;let J=(await d.insert(u).values(O).returning())[0];if(b.info("[AUTH] Registration successful",{userId:J.id,email:R,emailVerificationEnabled:g}),b.audit({entityName:"users",entityId:J.id,operation:"REGISTER",userId:J.id,summary:`New user registered: ${R}`,ipAddress:A,userAgent:z,path:M.pathname,query:M.search}),g&&s&&B){let U=`${(r.emailVerification?.redirectUrl||"http://localhost:3000/login").replace("/login","/verify-email")}?token=${B}`;s.sendVerificationEmail(R,R.split("@")[0]||"User",U,l||"Nucleus").then((K)=>{if(K.success)b.info("[AUTH] Verification email sent",{email:R});else b.error("[AUTH] Failed to send verification email",{email:R,error:K.error})}).catch((K)=>{b.error("[AUTH] Failed to send verification email",{email:R,error:K})});let Y=r.emailVerification?.resendCooldown||"60s",Q=Bc(Y)/1000,F=r.emailVerification?.maxResendAttempts||3;return{success:!0,message:"Registration successful. Please check your email to verify your account.",data:{user:{id:J.id,email:J.email},emailVerificationRequired:!0,verification:{cooldownSeconds:Q,canResendAt:new Date(Date.now()+Q*1000).toISOString(),attemptsRemaining:F-1,maxAttempts:F}}}}if(t)t(R,R.split("@")[0]||"User").catch((W)=>{b.error("[AUTH] Failed to send welcome email",{email:R,error:W})});if(o&&c&&a){let W=_.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||_.request.headers.get("x-real-ip")?.trim()||"unknown",U=_.request.headers.get("user-agent")||"",Y=o(J.id),Q=c(J.id),F=await a({userId:J.id,deviceInfo:{ipAddress:W,userAgent:U},loginMethod:"register"}),K={accessToken:{setHeadersEnabled:i?.accessToken?.setHeadersEnabled??!0,returnJson:i?.accessToken?.returnJson??!0},refreshToken:{setHeadersEnabled:i?.refreshToken?.setHeadersEnabled??!0,returnJson:i?.refreshToken?.returnJson??!0},sessionToken:{setHeadersEnabled:i?.sessionToken?.setHeadersEnabled??!0,returnJson:i?.sessionToken?.returnJson??!0}},N=k.secure?"; Secure":"",tn=`; Path=${k.path}; HttpOnly; SameSite=${k.sameSite}${N}`,sn=[];if(K.accessToken.setHeadersEnabled)sn.push(`${k.accessTokenName}=${Y}${tn}; Max-Age=${k.accessTokenMaxAge}`);if(K.refreshToken.setHeadersEnabled)sn.push(`${k.refreshTokenName}=${Q}${tn}; Max-Age=${k.refreshTokenMaxAge}`);if(K.sessionToken.setHeadersEnabled)sn.push(`${k.sessionTokenName}=${F}${tn}; Max-Age=${k.sessionTokenMaxAge}`);let kn={user:{id:J.id,email:J.email}};if(K.accessToken.returnJson)kn.accessToken=Y;if(K.refreshToken.returnJson)kn.refreshToken=Q;if(K.sessionToken.returnJson)kn.sessionId=F;let ar=JSON.stringify({success:!0,data:kn}),rn=new Headers;rn.set("Content-Type","application/json"),rn.set("x-session-id",F);for(let en of sn)rn.append("Set-Cookie",en);return new Response(ar,{status:200,headers:rn})}return{success:!0,data:{user:{id:J.id,email:J.email}}}},{body:ud,detail:{tags:["Authentication"],summary:"Register",description:"Register a new user account"}}),w}var _d=f(()=>{gd();Wc();gd()});import{t as T}from"elysia";var F1,Q4,md,wd,jN;var hd=f(()=>{F1=T.Object({id:T.String(),deviceName:T.Optional(T.String()),deviceType:T.Optional(T.String()),browserName:T.Optional(T.String()),browserVersion:T.Optional(T.String()),osName:T.Optional(T.String()),osVersion:T.Optional(T.String()),ipAddress:T.String(),locationCountry:T.Optional(T.String()),locationCity:T.Optional(T.String()),lastActivityAt:T.String(),createdAt:T.String(),isCurrent:T.Boolean(),loginMethod:T.Optional(T.String()),trustScore:T.Optional(T.Number())}),Q4=T.Object({success:T.Boolean(),data:T.Optional(T.Object({sessions:T.Array(F1),currentSessionId:T.Optional(T.String()),totalCount:T.Number()})),message:T.Optional(T.String())}),md=T.Object({reason:T.Optional(T.String())}),wd=T.Object({excludeCurrent:T.Optional(T.Boolean()),reason:T.Optional(T.String())}),jN=T.Object({success:T.Boolean(),data:T.Optional(T.Object({recentActivity:T.Array(T.Object({sessionId:T.String(),action:T.String(),ipAddress:T.String(),timestamp:T.String(),deviceInfo:T.Optional(T.String())}))})),message:T.Optional(T.String())})});function ls(n){let r=(o,c)=>n[o]??n[c],t=(o,c)=>{let a=n[o]??n[c];if(!a)return;return a instanceof Date?a.toISOString():String(a)};return{id:n.id,deviceName:r("device_name","deviceName"),deviceType:r("device_type","deviceType"),deviceFingerprint:r("device_fingerprint","deviceFingerprint"),browserName:r("browser_name","browserName"),browserVersion:r("browser_version","browserVersion"),osName:r("os_name","osName"),osVersion:r("os_version","osVersion"),ipAddress:r("ip_address","ipAddress"),locationCountry:r("location_country","locationCountry"),locationCity:r("location_city","locationCity"),lastActivityAt:t("last_activity_at","lastActivityAt"),createdAt:t("created_at","createdAt"),isCurrent:r("is_current","isCurrent"),loginMethod:r("login_method","loginMethod"),trustScore:r("trust_score","trustScore")}}var j1=()=>{};import{and as Do,desc as K1,eq as qn,isNull as p1}from"drizzle-orm";import{Elysia as P4}from"elysia";function fs(n,r,t){let{db:o,logger:c}=n,a=r.route||"/auth/sessions",e=new P4;if(!r.enabled||!t)return e;let i=t,s=(l)=>{let d=l.replace(/([A-Z])/g,"_$1").toLowerCase();return i[l]||i[d]};return e.get(a,async(l)=>{if(!o)return{success:!1,message:"Database not configured"};let d=l.request.headers.get("x-user-id");if(!d)return{success:!1,message:"Authentication required"};let b=l.request.headers.get("x-session-id"),u=await o.select().from(t).where(Do(qn(s("userId"),d),qn(s("isActive"),!0),p1(s("revokedAt")))).orderBy(K1(s("lastActivityAt"))),$=u.filter((w)=>{let _=w,R=(_.deviceFingerprint||"").toLowerCase(),X=_.ipAddress||"";return!((!R||R==="--"||R==="--unknown"||R.includes("bot/crawler")||R.includes("headless")||R.includes("unknown-unknown"))&&(X==="127.0.0.1"||X==="::1"||X==="localhost"||!X))}),k=$.map((w)=>{let _=w,R=ls(_);return R.isCurrent=_.id===b,R});return c.info("[AUTH] Sessions list retrieved",{userId:d,totalInDb:u.length,filteredCount:$.length,hiddenBotSessions:u.length-$.length}),{success:!0,data:{sessions:k,currentSessionId:b,totalCount:$.length}}},{detail:{tags:["Authentication"],summary:"List active sessions",description:"Get all active sessions for the current user"}}),e.get(`${a}/current`,async(l)=>{if(!o)return{success:!1,message:"Database not configured"};let d=l.request.headers.get("x-user-id"),b=l.request.headers.get("x-session-id");if(!d||!b)return{success:!1,message:"Authentication required"};let u=await o.select().from(t).where(qn(s("id"),b)).limit(1);if(u.length===0)return{success:!1,message:"Session not found"};let $=u[0],k=ls($);return k.isCurrent=!0,{success:!0,data:k}},{detail:{tags:["Authentication"],summary:"Get current session",description:"Get details of the current session"}}),e.delete(`${a}/:sessionId`,async(l)=>{if(!o)return{success:!1,message:"Database not configured"};let d=l.request.headers.get("x-user-id");if(!d)return{success:!1,message:"Authentication required"};let{sessionId:b}=l.params,u=l.body,$=l.request.headers.get("x-session-id");if((await o.select().from(t).where(Do(qn(s("id"),b),qn(s("userId"),d))).limit(1)).length===0)return{success:!1,message:"Session not found"};let w=b===$;await o.update(t).set({isActive:!1,revokedAt:new Date,revokedReason:w?"user_logout":u.reason||"user_revoked"}).where(qn(s("id"),b)),c.info("[AUTH] Session revoked",{userId:d,sessionId:b,isCurrentSession:w,reason:u.reason||"user_revoked"});let _=new URL(l.request.url);return c.audit({entityName:"user_sessions",entityId:b,operation:w?"LOGOUT":"SESSION_REVOKE",userId:d||void 0,summary:w?"User logged out via session revoke":`Session revoked (${b.substring(0,8)}...)`,ipAddress:l.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||l.request.headers.get("x-real-ip")?.trim()||"unknown",userAgent:l.request.headers.get("user-agent")||"unknown",path:_.pathname,query:_.search}),{success:!0,message:w?"Logged out successfully":"Session revoked successfully"}},{body:md,detail:{tags:["Authentication"],summary:"Revoke session",description:"Revoke a specific session by ID"}}),e.delete(`${a}/all`,async(l)=>{if(!o)return{success:!1,message:"Database not configured"};let d=l.request.headers.get("x-user-id");if(!d)return{success:!1,message:"Authentication required"};let b=l.body,u=l.request.headers.get("x-session-id"),$=o.update(t).set({isActive:!1,revokedAt:new Date,revokedReason:b.reason||"user_revoked"}).where(Do(qn(s("userId"),d),qn(s("isActive"),!0)));if(b.excludeCurrent&&u){let{ne:w}=await import("drizzle-orm");$=o.update(t).set({isActive:!1,revokedAt:new Date,revokedReason:b.reason||"user_revoked"}).where(Do(qn(s("userId"),d),qn(s("isActive"),!0),w(s("id"),u)))}await $,c.info("[AUTH] All sessions revoked",{userId:d,excludeCurrent:b.excludeCurrent,reason:b.reason||"user_revoked"});let k=new URL(l.request.url);return c.audit({entityName:"user_sessions",operation:"SESSION_REVOKE_ALL",userId:d||void 0,summary:b.excludeCurrent?"All other sessions revoked":"All sessions revoked",ipAddress:l.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||l.request.headers.get("x-real-ip")?.trim()||"unknown",userAgent:l.request.headers.get("user-agent")||"unknown",path:k.pathname,query:k.search}),{success:!0,message:b.excludeCurrent?"All other sessions revoked successfully":"All sessions revoked successfully"}},{body:wd,detail:{tags:["Authentication"],summary:"Revoke all sessions",description:"Revoke all sessions for the current user (optionally exclude current)"}}),e.get(`${a}/stats`,async(l)=>{if(!o)return{success:!1,message:"Database not configured"};let d=l.request.headers.get("x-user-id");if(!d)return{success:!1,message:"Authentication required"};let{count:b,countDistinct:u}=await import("drizzle-orm"),$=await o.select({count:b()}).from(t).where(Do(qn(s("userId"),d),qn(s("isActive"),!0),p1(s("revokedAt")))),k=await o.select({count:u(s("deviceFingerprint"))}).from(t).where(Do(qn(s("userId"),d),qn(s("isActive"),!0))),w=await o.select({count:u(s("ipAddress"))}).from(t).where(Do(qn(s("userId"),d),qn(s("isActive"),!0)));return{success:!0,data:{activeSessions:$[0]?.count||0,uniqueDevices:k[0]?.count||0,uniqueIpAddresses:w[0]?.count||0}}},{detail:{tags:["Authentication"],summary:"Session statistics",description:"Get session statistics for the current user"}}),e.post(`${a}/approve`,async(l)=>{if(!o)return{success:!1,message:"Database not configured"};let{token:d}=l.body;if(!d)return{success:!1,message:"Token is required"};let b=await o.select().from(t).where(qn(s("approvalToken"),d)).limit(1);if(b.length===0)return{success:!1,message:"Invalid or expired approval token"};let u=b[0];if(u.approvalStatus!=="pending")return{success:!1,message:"Session already processed"};return await o.update(t).set({approvalStatus:"approved",isActive:!0,approvalRespondedAt:new Date,approvalToken:null}).where(qn(s("id"),u.id)),c.info("[AUTH] Device approved",{sessionId:u.id,userId:u.userId}),{success:!0,message:"Device approved successfully"}},{detail:{tags:["Authentication"],summary:"Approve pending device",description:"Approve a pending device login request"}}),e.post(`${a}/reject`,async(l)=>{if(!o)return{success:!1,message:"Database not configured"};let{token:d}=l.body;if(!d)return{success:!1,message:"Token is required"};let b=await o.select().from(t).where(qn(s("approvalToken"),d)).limit(1);if(b.length===0)return{success:!1,message:"Invalid or expired approval token"};let u=b[0];if(u.approvalStatus!=="pending")return{success:!1,message:"Session already processed"};return await o.update(t).set({approvalStatus:"rejected",isActive:!1,revokedAt:new Date,revokedReason:"user_rejected",approvalRespondedAt:new Date,approvalToken:null}).where(qn(s("id"),u.id)),c.info("[AUTH] Device rejected",{sessionId:u.id,userId:u.userId}),{success:!0,message:"Device rejected and blocked"}},{detail:{tags:["Authentication"],summary:"Reject pending device",description:"Reject a pending device login request"}}),e.get(`${a}/pending`,async(l)=>{if(!o)return{success:!1,message:"Database not configured"};let d=l.request.headers.get("x-user-id");if(!d)return{success:!1,message:"Authentication required"};let b=await o.select().from(t).where(Do(qn(s("userId"),d),qn(s("approvalStatus"),"pending"))).orderBy(K1(s("createdAt")));return{success:!0,data:{sessions:b.map(($)=>{let k=$;return{...ls(k),approvalStatus:k.approval_status||k.approvalStatus,approvalToken:k.approval_token||k.approvalToken,approvalRequestedAt:k.approval_requested_at?.toISOString()||k.approvalRequestedAt?.toISOString()}}),totalCount:b.length}}},{detail:{tags:["Authentication"],summary:"List pending devices",description:"Get all pending device approval requests for the current user"}}),e}var $d=f(()=>{hd();j1();hd()});var v1={};Zt(v1,{createSessionsRoute:()=>fs,createRegisterRoute:()=>ss,createRefreshRoute:()=>is,createPasswordSetRoute:()=>es,createPasswordResetRoute:()=>as,createPasswordChangeRoute:()=>cs,createMeRoute:()=>os,createMagicLinkRoute:()=>ts,createLogoutRoute:()=>di,createLoginRoute:()=>li,createInviteRoute:()=>ii,createEmailVerificationRoutes:()=>ti,createAuthRoutes:()=>T1});function T1(n,r){let{authConfig:t,features:o,helpers:c}=r,a=t.authentication?.cookieMaxAgeBufferSeconds??0,e={accessTokenName:t.authentication?.accessToken?.name||"access_token",refreshTokenName:t.authentication?.refreshToken?.name||"refresh_token",sessionTokenName:t.authentication?.sessionToken?.name||"session_token",accessTokenMaxAge:Math.max(0,ot(t.authentication?.accessToken?.expiresIn||"15m")-a),refreshTokenMaxAge:ot(t.authentication?.refreshToken?.expiresIn||"7d"),sessionTokenMaxAge:ot(t.authentication?.sessionToken?.expiresIn||"30d")};if(t.logger.info("[AUTH] Cookie config created",{accessTokenMaxAge:e.accessTokenMaxAge,refreshTokenMaxAge:e.refreshTokenMaxAge,sessionTokenMaxAge:e.sessionTokenMaxAge,accessTokenExpiresIn:t.authentication?.accessToken?.expiresIn,sessionTokenExpiresIn:t.authentication?.sessionToken?.expiresIn}),o.login?.enabled){let i=li(t,o.login,c.signAccessToken,c.signRefreshToken,c.createSession,c.saveSessionToDb,e,r.tokenResponseConfig);n.use(i)}if(o.register?.enabled){let i=ss(t,o.register,c.sendWelcomeEmail,c.signAccessToken,c.signRefreshToken,c.createSession,e,r.tokenResponseConfig,r.emailService,r.appName);if(n.use(i),o.register.emailVerification?.enabled){let s=ti({authConfig:t,registerConfig:o.register,emailService:r.emailService,appName:r.appName});n.use(s)}}if(o.logout?.enabled){let i=di(t,o.logout,c.destroySession,c.revokeSessionInDb);n.use(i)}if(o.refresh?.enabled){let i=is(t,o.refresh,c.verifyRefreshToken,c.signAccessToken,c.signRefreshToken,r.tokenResponseConfig,a);n.use(i)}if(o.passwordReset?.enabled&&c.storeResetToken&&c.getResetToken&&c.deleteResetToken){let i=as(t,o.passwordReset,c.storeResetToken,c.getResetToken,c.deleteResetToken,c.sendResetEmail);n.use(i)}if(o.passwordChange?.enabled){let i=cs(t,o.passwordChange);n.use(i)}if(o.passwordSet?.enabled){let i=es(t,o.passwordSet,c.getMagicToken,c.deleteMagicToken);n.use(i)}if(o.sessions?.enabled&&r.sessionsTable){let i=fs(t,o.sessions,r.sessionsTable);n.use(i)}if(o.magicLink?.enabled&&r.emailService?.isAvailable()&&c.storeMagicToken&&c.getMagicToken&&c.deleteMagicToken){let i=ts(t,o.magicLink,r.emailService,c.signAccessToken,c.signRefreshToken,c.createSession,c.storeMagicToken,c.getMagicToken,c.deleteMagicToken,r.appName);n.use(i)}if(o.me?.enabled){let i=os(t,o.me,r.schemaTables||{},r.schemaRelations||{},r.databaseUrl);n.use(i)}if(o.invite?.enabled&&r.emailService?.isAvailable()&&c.storeMagicToken){let i=ii(t,o.invite,r.emailService,c.storeMagicToken,r.appName,c.getMagicToken);n.use(i)}if(o.captcha?.enabled&&r.captchaService){let i=xg({captchaService:r.captchaService,logger:t.logger,basePath:o.captcha.route||"/auth/captcha"});n.use(i)}return n}var kd=f(()=>{Ne();Lg();bf();uf();hf();$f();y0();nd();od();id();fd();bd();_d();$d();bf();uf();hf();$f();y0();nd();od();id();fd();bd();_d();$d()});import{batch as us,createStore as r2}from"h-state";import{useEffectEvent as t2}from"react";function o2(n){let r={};for(let t of Object.keys(n))r[t]={isPending:!1,data:null,error:null,code:null};return r}function c2(n,r){let{useStore:t}=r2(o2(n),{_callEndpoint:(o)=>async(c,a)=>{if(!o[c])return;us(()=>{o[c].isPending=!0,o[c].error=null});try{let i=await r(c,a.payload);if(us(()=>{if(o[c].isPending=!1,o[c].code=i.code??null,i.isSuccess&&i.data!==void 0)o[c].data=i.data,o[c].error=null;else o[c].error=i.errors??null}),i.isSuccess)a.onAfterHandle?.(i.data??i);else a.onErrorHandle?.(i.errors??{message:"Request failed"},i.code)}catch(i){us(()=>{o[c].isPending=!1,o[c].error={message:i instanceof Error?i.message:"Unknown error"}}),a.onErrorHandle?.({message:i instanceof Error?i.message:"Unknown error"},null)}}});return function(){let c=t(),a=t2((i,s)=>{c._callEndpoint(i,s)}),e={};for(let i of Object.keys(n)){let s=(l)=>{a(i,l)};e[i]={state:c[i],start:s}}return e}}var Ed={$schema:"../schemas/nucleus.tables.schema.json",tables:[{table_name:"users",feature_set:["authentication"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"email",type:"varchar",length:255},{name:"password",type:"varchar",length:255},{name:"verified_at",type:"timestamp"},{name:"email_verification_token",type:"varchar",length:255},{name:"email_verification_token_expires_at",type:"timestamp"},{name:"email_verification_sent_at",type:"timestamp"},{name:"email_verification_attempts",type:"integer",default:0},{name:"last_login_at",type:"timestamp"},{name:"login_count",type:"integer",default:0},{name:"is_locked",type:"boolean",default:!1},{name:"locked_until",type:"timestamp"},{name:"failed_login_attempts",type:"integer",default:0},{name:"is_god",type:"boolean",default:!1}],indexes:[{columns:["email"],unique:!0},{columns:["email","is_active"]},{columns:["last_login_at"]},{columns:["is_locked","locked_until"]}]},{table_name:"profiles",feature_set:["authentication"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"user_id",type:"uuid",notNull:!0,references:{table:"users",column:"id"}},{name:"first_name",type:"varchar",length:100,notNull:!0},{name:"last_name",type:"varchar",length:100,notNull:!0}],indexes:[{columns:["user_id"],unique:!0},{columns:["first_name","last_name"]}]},{table_name:"roles",feature_set:["authentication","authorization"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"name",type:"varchar",length:100,notNull:!0},{name:"description",type:"varchar",length:500}],indexes:[{columns:["name"],unique:!0}]},{table_name:"claims",feature_set:["authentication","authorization"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"action",type:"varchar",length:100,notNull:!0},{name:"description",type:"varchar",length:500},{name:"path",type:"varchar",length:200,notNull:!0},{name:"method",type:"varchar",length:10,notNull:!0}],indexes:[{columns:["action"],unique:!0},{columns:["path","method"]}]},{table_name:"user_roles",feature_set:["authentication","authorization"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"user_id",type:"uuid",notNull:!0,references:{table:"users",column:"id",onDelete:"cascade"}},{name:"role_id",type:"uuid",notNull:!0,references:{table:"roles",column:"id",onDelete:"cascade"}}],indexes:[{columns:["user_id"]},{columns:["role_id"]}],constraints:{unique:[{name:"unique_user_role",columns:["user_id","role_id"]}]}},{table_name:"role_claims",feature_set:["authentication","authorization"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"role_id",type:"uuid",notNull:!0,references:{table:"roles",column:"id",onDelete:"cascade"}},{name:"claim_id",type:"uuid",notNull:!0,references:{table:"claims",column:"id",onDelete:"cascade"}},{name:"scope",type:"text"}],indexes:[{columns:["role_id"]},{columns:["claim_id"]},{columns:["role_id","claim_id","scope"]}]},{table_name:"files",feature_set:["storage"],add_base_columns:!0,is_form_data:!0,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"name",type:"varchar",length:255,notNull:!0},{name:"original_name",type:"varchar",length:255,notNull:!0},{name:"type",type:"varchar",length:50,enumValues:["image","document","video","audio","profile_picture"]},{name:"path",type:"varchar",length:500,notNull:!0},{name:"size",type:"bigint",mode:"number",notNull:!0},{name:"mime_type",type:"varchar",length:100,notNull:!0},{name:"extension",type:"varchar",length:10,notNull:!0},{name:"uploaded_by",type:"uuid",references:{table:"users",column:"id"}}],indexes:[{columns:["type"]},{columns:["uploaded_by"]},{columns:["size"]}]},{table_name:"addresses",feature_set:["authentication"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"owner_type",type:"varchar",length:50,notNull:!0,enumValues:["user","company","contact"]},{name:"owner_id",type:"uuid",notNull:!0},{name:"name",type:"varchar",length:100,notNull:!0},{name:"street",type:"varchar",length:255},{name:"city",type:"varchar",length:100},{name:"state",type:"varchar",length:50},{name:"zip",type:"varchar",length:20},{name:"country",type:"varchar",length:50,default:"US"},{name:"latitude",type:"decimal",precision:10,scale:8},{name:"longitude",type:"decimal",precision:11,scale:8},{name:"neighborhood",type:"varchar",length:100},{name:"apartment",type:"varchar",length:50},{name:"province",type:"varchar",length:100},{name:"district",type:"varchar",length:100},{name:"type",type:"varchar",length:50}],indexes:[{columns:["city","state"]},{columns:["latitude","longitude"]},{columns:["type"]},{columns:["owner_type","owner_id"]}]},{table_name:"phones",feature_set:["authentication"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"owner_type",type:"varchar",length:50,notNull:!0,enumValues:["user","company","contact"]},{name:"owner_id",type:"uuid",notNull:!0},{name:"name",type:"varchar",length:100,notNull:!0},{name:"type",type:"varchar",length:50,enumValues:["mobile","office","fax"]},{name:"number",type:"varchar",length:20,notNull:!0},{name:"country_code",type:"varchar",length:10,notNull:!0,default:"+1"},{name:"extension",type:"varchar",length:10}],indexes:[{columns:["number"]},{columns:["type"]},{columns:["owner_type","owner_id"]}]},{table_name:"notifications",feature_set:["authentication","notification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],columns:[{name:"user_id",type:"uuid",notNull:!0},{name:"title",type:"varchar",length:255,notNull:!0},{name:"body",type:"varchar",length:1000},{name:"entity_name",type:"varchar",length:100},{name:"entity_id",type:"uuid"},{name:"is_seen",type:"boolean",notNull:!0,default:!1},{name:"seen_at",type:"timestamptz"}],indexes:[{columns:["user_id","created_at"]},{columns:["is_seen"]}]},{table_name:"tenants",feature_set:["multi-tenant"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["main"],excluded_schemas:[],excluded_methods:[],columns:[{name:"subdomain",type:"varchar",length:100,notNull:!0,unique:!0},{name:"company_id",type:"uuid",notNull:!0},{name:"schema_name",type:"varchar",length:100,notNull:!0,unique:!0},{name:"company_name",type:"varchar",length:255},{name:"god_admin_email",type:"varchar",length:255}],indexes:[]},{table_name:"verifications",feature_set:["authentication","verification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],columns:[{name:"requirement_id",type:"uuid",notNull:!0,references:{table:"verificationRequirements",column:"id"}},{name:"verifier_id",type:"uuid",notNull:!0,references:{table:"users",column:"id"}},{name:"signature_id",type:"uuid",references:{table:"files",column:"id"}},{name:"entity_name",type:"varchar",length:100,notNull:!0},{name:"entity_id",type:"uuid",notNull:!0},{name:"step_order",type:"integer",notNull:!0,default:1},{name:"decision",type:"varchar",length:50,notNull:!0,default:"pending",enumValues:["approved","rejected","pending"]},{name:"reason",type:"text"},{name:"diff",type:"jsonb"}],indexes:[{columns:["requirement_id"]},{columns:["verifier_id"]},{columns:["entity_name","entity_id"]},{columns:["entity_name","entity_id","step_order"]},{columns:["decision"]}]},{table_name:"verificationRequirements",feature_set:["authentication","verification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],columns:[{name:"entity_id",type:"uuid"},{name:"entity_name",type:"varchar",length:100},{name:"verifier_type",type:"varchar",length:30,enumValues:["user","role","entity_creator"]},{name:"verifier_id",type:"uuid"},{name:"verifier_role",type:"varchar",length:50},{name:"is_signature_mandatory",type:"boolean",notNull:!0},{name:"step_order",type:"integer",notNull:!0,default:1},{name:"is_all_required",type:"boolean",notNull:!0,default:!1},{name:"connected_from_step_order",type:"integer"},{name:"position_x",type:"numeric"},{name:"position_y",type:"numeric"}],indexes:[{columns:["entity_id"]}]},{table_name:"verificationFlows",feature_set:["authentication","verification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],columns:[{name:"entity_name",type:"varchar",length:100,notNull:!0},{name:"name",type:"varchar",length:255,notNull:!0},{name:"description",type:"text"},{name:"trigger_on",type:"varchar",length:50,notNull:!0,default:"update",enumValues:["create","update","delete","manual"]},{name:"trigger_fields",type:"jsonb"},{name:"is_draft",type:"boolean",notNull:!0,default:!0},{name:"published_at",type:"timestamptz"},{name:"viewport",type:"jsonb"}],indexes:[{columns:["entity_name"]},{columns:["entity_name","trigger_on"]},{columns:["is_draft"]}]},{table_name:"verificationSteps",feature_set:["authentication","verification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],columns:[{name:"flow_id",type:"uuid",notNull:!0,references:{table:"verificationFlows",column:"id",onDelete:"cascade"}},{name:"entity_name",type:"varchar",length:100,notNull:!0},{name:"node_id",type:"varchar",length:100,notNull:!0},{name:"node_type",type:"varchar",length:50,notNull:!0,default:"step",enumValues:["start","step","condition","notification","end"]},{name:"step_order",type:"integer",notNull:!0,default:1},{name:"name",type:"varchar",length:255},{name:"description",type:"text"},{name:"position_x",type:"numeric",notNull:!0,default:0},{name:"position_y",type:"numeric",notNull:!0,default:0},{name:"width",type:"numeric"},{name:"height",type:"numeric"},{name:"style",type:"jsonb"},{name:"data",type:"jsonb"}],indexes:[{columns:["flow_id"]},{columns:["entity_name"]},{columns:["flow_id","node_id"],unique:!0},{columns:["entity_name","step_order"]}]},{table_name:"verificationEdges",feature_set:["authentication","verification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],columns:[{name:"flow_id",type:"uuid",notNull:!0,references:{table:"verificationFlows",column:"id",onDelete:"cascade"}},{name:"edge_id",type:"varchar",length:100,notNull:!0},{name:"source_node_id",type:"varchar",length:100,notNull:!0},{name:"target_node_id",type:"varchar",length:100,notNull:!0},{name:"source_handle",type:"varchar",length:50},{name:"target_handle",type:"varchar",length:50},{name:"edge_type",type:"varchar",length:50,default:"default",enumValues:["default","conditional","success","failure"]},{name:"label",type:"varchar",length:255},{name:"condition",type:"jsonb"},{name:"style",type:"jsonb"},{name:"animated",type:"boolean",default:!1}],indexes:[{columns:["flow_id"]},{columns:["flow_id","edge_id"],unique:!0},{columns:["source_node_id"]},{columns:["target_node_id"]}]},{table_name:"verificationNotificationRules",feature_set:["authentication","verification","notification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],columns:[{name:"flow_id",type:"uuid",notNull:!0,references:{table:"verificationFlows",column:"id",onDelete:"cascade"}},{name:"step_node_id",type:"varchar",length:100},{name:"trigger",type:"varchar",length:50,notNull:!0,enumValues:["on_flow_started","on_step_reached","on_approved","on_rejected","on_flow_completed"]},{name:"channel",type:"varchar",length:20,notNull:!0,default:"portal",enumValues:["portal","email","both"]},{name:"title_template",type:"varchar",length:255},{name:"body_template",type:"text"},{name:"starts_at",type:"timestamptz"},{name:"expires_at",type:"timestamptz"}],indexes:[{columns:["flow_id"]},{columns:["flow_id","step_node_id"]},{columns:["trigger"]}]},{table_name:"verificationNotificationRecipients",feature_set:["authentication","verification","notification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],columns:[{name:"rule_id",type:"uuid",notNull:!0},{name:"recipient_type",type:"varchar",length:20,notNull:!0,enumValues:["user","role","all_verifiers","step_verifier"]},{name:"recipient_user_id",type:"uuid"},{name:"recipient_role_id",type:"uuid"},{name:"channel",type:"varchar",length:20,notNull:!0,enumValues:["portal"]}],indexes:[{columns:["rule_id"]},{columns:["recipient_type"]},{columns:["channel"]}]},{table_name:"user_sessions",feature_set:["authentication"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:["POST","PUT","PATCH"],columns:[{name:"user_id",type:"uuid",notNull:!0,references:{table:"users",column:"id",onDelete:"cascade"}},{name:"token_hash",type:"varchar",length:255,notNull:!0},{name:"refresh_token_hash",type:"varchar",length:255},{name:"device_fingerprint",type:"varchar",length:255},{name:"device_name",type:"varchar",length:100},{name:"device_type",type:"varchar",length:50,enumValues:["desktop","mobile","tablet","unknown"]},{name:"browser_name",type:"varchar",length:50},{name:"browser_version",type:"varchar",length:20},{name:"os_name",type:"varchar",length:50},{name:"os_version",type:"varchar",length:20},{name:"ip_address",type:"varchar",length:45,notNull:!0},{name:"location_country",type:"varchar",length:100},{name:"location_city",type:"varchar",length:100},{name:"location_coordinates",type:"varchar",length:50},{name:"last_activity_at",type:"timestamptz",notNull:!0,defaultRaw:"now()"},{name:"expires_at",type:"timestamptz",notNull:!0},{name:"revoked_at",type:"timestamptz"},{name:"revoked_reason",type:"varchar",length:100,enumValues:["user_logout","user_revoked","admin_revoked","security_concern","password_changed","expired","replaced"]},{name:"is_current",type:"boolean",notNull:!0,default:!1},{name:"login_method",type:"varchar",length:50,enumValues:["password","oauth_google","oauth_github","oauth_microsoft","magic_link","sso","api_key"]},{name:"remember_me",type:"boolean",notNull:!0,default:!1},{name:"trust_score",type:"integer",default:100},{name:"approval_status",type:"varchar",length:20,default:"approved",enumValues:["approved","pending","rejected"]},{name:"approval_token",type:"varchar",length:64},{name:"approval_requested_at",type:"timestamptz"},{name:"approval_responded_at",type:"timestamptz"}],indexes:[{columns:["user_id"]},{columns:["token_hash"],unique:!0},{columns:["refresh_token_hash"]},{columns:["user_id","is_active"]},{columns:["expires_at"]},{columns:["device_fingerprint"]},{columns:["ip_address"]},{columns:["last_activity_at"]},{columns:["approval_status"]},{columns:["approval_token"]}]},{table_name:"password_reset_tokens",feature_set:["authentication"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:["POST","PUT","PATCH","DELETE"],columns:[{name:"user_id",type:"uuid",notNull:!0,references:{table:"users",column:"id",onDelete:"cascade"}},{name:"token_hash",type:"varchar",length:255,notNull:!0},{name:"expires_at",type:"timestamptz",notNull:!0},{name:"used_at",type:"timestamptz"}],indexes:[{columns:["token_hash"],unique:!0},{columns:["user_id"]},{columns:["expires_at"]}]},{table_name:"magic_link_tokens",feature_set:["authentication"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:["POST","PUT","PATCH","DELETE"],columns:[{name:"user_id",type:"uuid",notNull:!0,references:{table:"users",column:"id",onDelete:"cascade"}},{name:"email",type:"varchar",length:255,notNull:!0},{name:"token_hash",type:"varchar",length:255,notNull:!0},{name:"expires_at",type:"timestamptz",notNull:!0},{name:"used_at",type:"timestamptz"}],indexes:[{columns:["token_hash"],unique:!0},{columns:["user_id"]},{columns:["email"]},{columns:["expires_at"]}]},{table_name:"audit_logs",feature_set:["audit"],add_base_columns:!1,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:["POST","PUT","DELETE","PATCH","TOGGLE","VERIFICATION"],columns:[{name:"id",type:"uuid",primaryKey:!0,defaultRaw:"gen_random_uuid()"},{name:"entity_id",type:"uuid"},{name:"entity_name",type:"text",notNull:!0},{name:"operation_type",type:"text",notNull:!0},{name:"user_id",type:"uuid"},{name:"ip_address",type:"text"},{name:"user_agent",type:"text"},{name:"summary",type:"text"},{name:"old_values",type:"jsonb"},{name:"new_values",type:"jsonb"},{name:"created_at",type:"timestamp",notNull:!0,defaultRaw:"now()"},{name:"path",type:"text"},{name:"query",type:"text"}],indexes:[{columns:["entity_id"]},{columns:["entity_name"]},{columns:["user_id"]},{columns:["created_at"]}]}]};var gs={login:{key:"LOGIN",method:"POST",defaultRoute:"/auth/login",defaultIsPublic:!0,_payload:void 0,_success:void 0,_error:void 0},register:{key:"REGISTER",method:"POST",defaultRoute:"/auth/register",defaultIsPublic:!0,_payload:void 0,_success:void 0,_error:void 0},logout:{key:"LOGOUT",method:"POST",defaultRoute:"/auth/logout",defaultIsPublic:!1,_payload:void 0,_success:void 0,_error:void 0},refresh:{key:"REFRESH",method:"POST",defaultRoute:"/auth/refresh",defaultIsPublic:!1,_payload:void 0,_success:void 0,_error:void 0},me:{key:"ME",method:"GET",defaultRoute:"/auth/me",defaultIsPublic:!1,_payload:void 0,_success:void 0,_error:void 0},passwordChange:{key:"PASSWORD_CHANGE",method:"POST",defaultRoute:"/auth/password-change",defaultIsPublic:!1,_payload:void 0,_success:void 0,_error:void 0},passwordSet:{key:"PASSWORD_SET",method:"POST",defaultRoute:"/auth/password-set",defaultIsPublic:!1,_payload:void 0,_success:void 0,_error:void 0},passwordReset:{key:"PASSWORD_RESET_REQUEST",method:"POST",defaultRoute:"/auth/password-reset",defaultIsPublic:!0,subEndpoints:[{key:"PASSWORD_RESET_REQUEST",method:"POST",suffix:"/request",_payload:void 0,_success:void 0,_error:void 0},{key:"PASSWORD_RESET_CONFIRM",method:"POST",suffix:"/confirm",_payload:void 0,_success:void 0,_error:void 0}]},sessions:{key:"SESSIONS",method:"GET",defaultRoute:"/auth/sessions",defaultIsPublic:!1,subEndpoints:[{key:"SESSIONS",method:"GET",suffix:"",_payload:void 0,_success:void 0,_error:void 0},{key:"SESSIONS_CURRENT",method:"GET",suffix:"/current",_payload:void 0,_success:void 0,_error:void 0},{key:"SESSIONS_STATS",method:"GET",suffix:"/stats",_payload:void 0,_success:void 0,_error:void 0},{key:"SESSIONS_PENDING",method:"GET",suffix:"/pending",_payload:void 0,_success:void 0,_error:void 0},{key:"SESSIONS_REVOKE",method:"DELETE",suffix:"/:sessionId",_payload:void 0,_success:void 0,_error:void 0},{key:"SESSIONS_REVOKE_ALL",method:"DELETE",suffix:"/all",_payload:void 0,_success:void 0,_error:void 0},{key:"SESSIONS_APPROVE",method:"POST",suffix:"/approve",_payload:void 0,_success:void 0,_error:void 0},{key:"SESSIONS_REJECT",method:"POST",suffix:"/reject",_payload:void 0,_success:void 0,_error:void 0}]},magicLink:{key:"MAGIC_LINK",method:"POST",defaultRoute:"/auth/magic-link",defaultIsPublic:!0,subEndpoints:[{key:"MAGIC_LINK",method:"POST",suffix:"",_payload:void 0,_success:void 0,_error:void 0},{key:"MAGIC_LINK_VERIFY",method:"GET",suffix:"/verify",routeKey:"verifyRoute",_payload:void 0,_success:void 0,_error:void 0}]},invite:{key:"INVITE",method:"POST",defaultRoute:"/auth/invite",defaultIsPublic:!1,subEndpoints:[{key:"INVITE",method:"POST",suffix:"",_payload:void 0,_success:void 0,_error:void 0},{key:"INVITE_VERIFY",method:"POST",suffix:"/verify",_payload:void 0,_success:void 0,_error:void 0}]},emailVerification:{key:"VERIFY_EMAIL",method:"GET",defaultRoute:"/verify-email",defaultIsPublic:!0,subEndpoints:[{key:"VERIFY_EMAIL",method:"GET",suffix:"",_payload:void 0,_success:void 0,_error:void 0},{key:"RESEND_VERIFICATION",method:"POST",suffix:"",routeKey:"resendRoute",defaultRoute:"/resend-verification",_payload:void 0,_success:void 0,_error:void 0}]},captcha:{key:"CAPTCHA",method:"GET",defaultRoute:"/auth/captcha",defaultIsPublic:!0,subEndpoints:[{key:"CAPTCHA_GENERATE",method:"GET",suffix:"/generate",_payload:void 0,_success:void 0,_error:void 0},{key:"CAPTCHA_VALIDATE",method:"POST",suffix:"/validate",_payload:void 0,_success:void 0,_error:void 0}]}},Md={healthCheck:{key:"MONITORING_HEALTH_CHECK",method:"GET",suffix:"/health",_payload:void 0,_success:void 0,_error:void 0},getSettings:{key:"MONITORING_GET_SETTINGS",method:"GET",suffix:"/settings",_payload:void 0,_success:void 0,_error:void 0},changeSettings:{key:"MONITORING_CHANGE_SETTINGS",method:"PATCH",suffix:"/settings",_payload:void 0,_success:void 0,_error:void 0},getLogs:{key:"MONITORING_GET_LOGS",method:"GET",suffix:"/logs",_payload:void 0,_success:void 0,_error:void 0}};var e2=["profiles","addresses","phones","files","users","roles","claims","user_roles","role_claims","audit_logs"],i2=Ed.tables.filter((n)=>e2.includes(n.table_name));function ic(n){return n.replace(/([a-z])([A-Z])/g,"$1_$2").replace(/[\s-]+/g,"_").toUpperCase()}function s2(n){return n.replace(/_([a-z])/g,(r,t)=>t.toUpperCase())}function _s(n){if(n.endsWith("ies"))return`${n.slice(0,-3)}y`;if(n.endsWith("ses"))return`${n.slice(0,-2)}`;if(n.endsWith("s"))return n.slice(0,-1);return n}function $t(n,r){let t=ic(n),o=ic(_s(n));switch(r){case"GET":return`GET_${t}`;case"POST":return`ADD_${o}`;case"PUT":return`UPDATE_${o}`;case"PATCH":return`PATCH_${o}`;case"DELETE":return`DELETE_${o}`}}function ec(n,r){let t=ic(n);switch(r){case"POST":return`BULK_ADD_${t}`;case"PUT":return`BULK_UPDATE_${t}`;case"DELETE":return`BULK_DELETE_${t}`}}function yt(n,r){if(!n.excluded_methods)return!1;let t={GET:"GET",POST:"POST",PUT:"PUT",PATCH:"PATCH",DELETE:"DELETE"};return n.excluded_methods.includes(t[r])}function Dd(n){let r={};for(let t of n.entities){let o=t.table_name,c=`/${o}`;if(!yt(t,"GET")){r[$t(o,"GET")]={method:"GET",path:c,isPublic:t.is_public?.GET??!1,_payload:void 0,_success:void 0,_error:void 0};let a=ic(_s(o));r[`GET_${a}_BY_ID`]={method:"GET",path:`${c}/:id`,isPublic:t.is_public?.GET??!1,_payload:void 0,_success:void 0,_error:void 0},r[`GET_${ic(o)}_DISTINCT`]={method:"GET",path:`${c}/distinct/:field`,isPublic:t.is_public?.GET??!1,_payload:void 0,_success:void 0,_error:void 0}}if(!yt(t,"POST"))r[$t(o,"POST")]={method:"POST",path:c,isPublic:t.is_public?.POST??!1,isFormData:t.is_form_data,_payload:void 0,_success:void 0,_error:void 0};if(!yt(t,"PUT"))r[$t(o,"PUT")]={method:"PUT",path:`${c}/:id`,isPublic:t.is_public?.PUT??!1,isFormData:t.is_form_data,_payload:void 0,_success:void 0,_error:void 0};if(!yt(t,"PATCH"))r[$t(o,"PATCH")]={method:"PATCH",path:`${c}/:id`,isPublic:t.is_public?.PATCH??!1,_payload:void 0,_success:void 0,_error:void 0};if(!yt(t,"DELETE"))r[$t(o,"DELETE")]={method:"DELETE",path:`${c}/:id`,isPublic:t.is_public?.DELETE??!1,_payload:void 0,_success:void 0,_error:void 0};if(t.bulk_endpoints_enabled){if(!yt(t,"POST"))r[ec(o,"POST")]={method:"POST",path:`${c}/bulk`,isPublic:t.is_public?.POST??!1,_payload:void 0,_success:void 0,_error:void 0};if(!yt(t,"PUT"))r[ec(o,"PUT")]={method:"PUT",path:`${c}/bulk`,isPublic:t.is_public?.PUT??!1,_payload:void 0,_success:void 0,_error:void 0};if(!yt(t,"DELETE"))r[ec(o,"DELETE")]={method:"DELETE",path:`${c}/bulk`,isPublic:t.is_public?.DELETE??!1,_payload:void 0,_success:void 0,_error:void 0}}}return r}function Hd(n){let r={},t=n.authentication;if(!t?.enabled)return r;for(let[o,c]of Object.entries(gs)){let a=t[o];if(!a?.enabled)continue;let e=a.route||c.defaultRoute,i=a.isPublic??c.defaultIsPublic;if("subEndpoints"in c&&c.subEndpoints)for(let s of c.subEndpoints){let l="routeKey"in s&&s.routeKey&&a[s.routeKey]?String(a[s.routeKey]):("defaultRoute"in s)&&s.defaultRoute?String(s.defaultRoute):`${e}${s.suffix}`;r[s.key]={method:s.method,path:l,isPublic:s.key==="MAGIC_LINK_VERIFY"?!0:i,_payload:s._payload,_success:s._success,_error:s._error}}else if("_payload"in c)r[c.key]={method:c.method,path:e,isPublic:i,_payload:c._payload,_success:c._success,_error:c._error}}return r}function zd(){let n={};for(let r of i2){let t=r.table_name,c=`/${s2(t)}`,a=t==="files";n[$t(t,"GET")]={method:"GET",path:c,isPublic:!1,_payload:void 0,_success:void 0,_error:void 0};let e=ic(_s(t));if(n[`GET_${e}_BY_ID`]={method:"GET",path:`${c}/:id`,isPublic:!1,_payload:void 0,_success:void 0,_error:void 0},n[$t(t,"POST")]={method:"POST",path:c,isPublic:!1,isFormData:a,_payload:void 0,_success:void 0,_error:void 0},n[$t(t,"PUT")]={method:"PUT",path:`${c}/:id`,isPublic:!1,isFormData:a,_payload:void 0,_success:void 0,_error:void 0},n[$t(t,"PATCH")]={method:"PATCH",path:`${c}/:id`,isPublic:!1,_payload:void 0,_success:void 0,_error:void 0},n[$t(t,"DELETE")]={method:"DELETE",path:`${c}/:id`,isPublic:!1,_payload:void 0,_success:void 0,_error:void 0},r.bulk_endpoints_enabled)n[ec(t,"POST")]={method:"POST",path:`${c}/bulk`,isPublic:!1,_payload:void 0,_success:void 0,_error:void 0},n[ec(t,"PUT")]={method:"PUT",path:`${c}/bulk`,isPublic:!1,_payload:void 0,_success:void 0,_error:void 0},n[ec(t,"DELETE")]={method:"DELETE",path:`${c}/bulk`,isPublic:!1,_payload:void 0,_success:void 0,_error:void 0}}return n}function Ud(n){let r={},t=n.liveMonitoring;if(!t?.enabled)return r;let o=t.basePath||"/monitoring";for(let c of Object.values(Md))r[c.key]={method:c.method,path:`${o}${c.suffix}`,isPublic:!1,_payload:c._payload,_success:c._success,_error:c._error};return r}function l2(n,r){let t=Dd(n),o=Hd(n),c=zd(),a=Ud(n);return{...t,...o,...c,...a,...r??{}}}Ms();import{randomUUID as g2}from"crypto";var _2={timeout:30000,retries:0,retryDelay:1000,debug:!1};class na{config;logger;constructor(n={}){this.config={..._2,...n},this.logger=new Yr({service:"ServerFetch",prettyPrint:this.config.debug,colorize:this.config.debug,auditEnabled:!1})}buildUrl(n){if(n.startsWith("http://")||n.startsWith("https://"))return n;return this.config.baseUrl?`${this.config.baseUrl}${n}`:n}buildHeaders(n){let r=new Headers;if(this.config.defaultHeaders)for(let[t,o]of Object.entries(this.config.defaultHeaders))r.set(t,o);if(n)if(n instanceof Headers)n.forEach((t,o)=>{r.set(o,t)});else if(Array.isArray(n))for(let[t,o]of n)r.set(t,o);else for(let[t,o]of Object.entries(n))r.set(t,o);return r}parseResponseHeaders(n){let r={};if(n.forEach((t,o)=>{if(o.toLowerCase()==="set-cookie"){let c=r[o];r[o]=c?`${c}, ${t}`:t}else r[o]=t}),typeof n.getSetCookie==="function"){let t=n.getSetCookie();if(t.length>0)r["set-cookie"]=t.join(", ")}return r}async executeWithTimeout(n,r,t){let o=new AbortController,c=setTimeout(()=>o.abort(),r);try{return await Promise.race([n,new Promise((e,i)=>{o.signal.addEventListener("abort",()=>{i(Error(`Request timeout after ${r}ms`))})})])}finally{clearTimeout(c)}}async fetch(n){let r=g2(),t=performance.now(),o=this.buildUrl(n.url),c=this.buildHeaders(n.headers),a=n.timeout??this.config.timeout??30000,e=n.retries??this.config.retries??0,i=n.retryDelay??this.config.retryDelay??1000,s;if(n.body)if(typeof n.body==="object"&&!(n.body instanceof FormData)&&!(n.body instanceof URLSearchParams)&&!(n.body instanceof Blob)&&!(n.body instanceof ArrayBuffer)){if(s=JSON.stringify(n.body),!c.has("content-type"))c.set("content-type","application/json")}else s=n.body;this.logger.debug(`[${r}] ${n.method} ${o}`,{method:n.method,url:o,hasBody:!!s});let l=null,d=0;while(d<=e)try{let u=await this.executeWithTimeout(fetch(o,{method:n.method,headers:c,body:s}),a,r),$=performance.now()-t,k=this.parseResponseHeaders(u.headers),w,_,R=await u.text();if(R)try{let x=JSON.parse(R);if(u.ok)w=x;else _=x}catch{if(!u.ok)_={message:R||u.statusText}}else if(!u.ok)_={message:u.statusText};let X={isSuccess:u.ok,response:w,errors:_,code:u.status,headers:k,durationMs:$,requestId:r,createdAt:new Date};if(u.ok)this.logger.info(`[${r}] ${n.method} ${o} ${u.status}`,{method:n.method,url:o,statusCode:u.status,durationMs:Math.round($)});else this.logger.warn(`[${r}] ${n.method} ${o} ${u.status}`,{method:n.method,url:o,statusCode:u.status,durationMs:Math.round($),error:_});return X}catch(u){if(l=u instanceof Error?u:Error(String(u)),d++,d<=e)this.logger.warn(`[${r}] Retry ${d}/${e} after error`,{method:n.method,url:o,error:l.message,attempt:d,retries:e}),await new Promise(($)=>setTimeout($,i))}let b=performance.now()-t;return this.logger.error(`[${r}] ${n.method} ${o} failed`,l,{method:n.method,url:o,durationMs:Math.round(b),attempts:d}),{isSuccess:!1,response:void 0,errors:{message:l?.message||"Unknown error"},code:null,headers:{},durationMs:b,requestId:r,createdAt:new Date}}async get(n,r){return this.fetch({...r,url:n,method:"GET"})}async post(n,r,t){return this.fetch({...t,url:n,method:"POST",body:r})}async put(n,r,t){return this.fetch({...t,url:n,method:"PUT",body:r})}async patch(n,r,t){return this.fetch({...t,url:n,method:"PATCH",body:r})}async delete(n,r){return this.fetch({...r,url:n,method:"DELETE"})}}var m2=new na;var w2={accessToken:"access_token",refreshToken:"refresh_token",sessionToken:"session_token"};function h2(n){let r=[],t="";for(let o=0;o<n.length;o++){let c=n[o];if(c===","){let a=n.slice(o+1).trimStart();if(/^[a-zA-Z0-9_-]+=/.test(a)){r.push(t.trim()),t="";continue}}t+=c}if(t.trim())r.push(t.trim());return r}function $2(n,r){let t={},o=["x-forwarded-for","x-real-ip","user-agent","accept-language","x-request-id","x-client-ip","cf-connecting-ip","true-client-ip"];for(let s of o){let l=n.get(s);if(l)t[s]=l}if(!t["user-agent"])t["user-agent"]="Nucleus-ServerAction/1.0";let c=n.get(`x-${r.accessToken}`),a=n.get(`x-${r.refreshToken}`),e=n.get(`x-${r.sessionToken}`);if(c)t[`x-${r.accessToken}`]=c;if(a)t[`x-${r.refreshToken}`]=a;if(e)t[`x-${r.sessionToken}`]=e;let i=n.get("cookie");if(i)t.cookie=i;return t}function k2(n){return n.replace(/_([a-z])/g,(r,t)=>t.toUpperCase())}function Jd(n){let r={};for(let[t,o]of Object.entries(n)){let c=t.startsWith("_")?t:k2(t);if(o instanceof Date)r[c]=o.toISOString();else if(o&&typeof o==="object"&&!Array.isArray(o))r[c]=Jd(o);else r[c]=o}return r}function R2(n,r){let t=new URLSearchParams,o=(a,e)=>{if(e===void 0||e===null)return;if(Array.isArray(e))for(let i of e)o(`${a}[]`,i);else if(e instanceof Date)t.append(a,e.toISOString());else if(typeof e==="object")for(let[i,s]of Object.entries(e))o(`${a}[${i}]`,s);else t.append(a,String(e))};for(let[a,e]of Object.entries(r))o(a,e);let c=t.toString();if(!c)return n;return n.includes("?")?`${n}&${c}`:`${n}?${c}`}function A2(n,r,t,o){let c={...w2,...r.tokenNames},a=new na({baseUrl:r.baseUrl,debug:r.debug,timeout:30000,retries:0});return async function(i,s){let l=n[i];if(!l)return{isSuccess:!1,errors:{message:`Endpoint "${i}" not found`},code:404};let d=await t(),b=await o(),u={};b.forEach((X,x)=>{u[x]=X});let $=$2(b,c),k=l.path,w;if(s&&typeof s==="object"&&!(s instanceof FormData)){let X=s;for(let[x,E]of Object.entries(X))if(E!=null){if(x.startsWith("_"))k=k.replace(`:${x.substring(1)}`,String(E));else if(x==="id"&&k.includes(":id"))k=k.replace(":id",String(E))}}if(l.method==="GET"&&s&&typeof s==="object")k=R2(k,s);else if(s!==void 0){if(l.isFormData&&s instanceof FormData)w=s;else if(w=Jd(s),!$["content-type"])$["content-type"]="application/json"}let _=await a.fetch({url:k,method:l.method,headers:$,body:w});if(_.headers["set-cookie"])try{let X=_.headers["set-cookie"],x=h2(X);for(let E of x){let[P,...M]=E.split(";");if(!P)continue;let[A,z]=P.split("=");if(A&&z){let h={};for(let g of M){let[B,G]=g.trim().split("=");if(!B)continue;let L=B.toLowerCase();if(L==="path")h.path=G;else if(L==="max-age")h.maxAge=Number(G);else if(L==="expires"&&G)h.expires=new Date(G);else if(L==="httponly")h.httpOnly=!0;else if(L==="secure")h.secure=!0;else if(L==="samesite")h.sameSite=G}d.set(A.trim(),z.trim(),h)}}}catch(X){console.warn("[ServerFactory] Failed to process Set-Cookie headers:",X instanceof Error?X.message:String(X))}let R=_.response;if(_.isSuccess&&R&&typeof R==="object"&&!Array.isArray(R)){let X=R;if("success"in X&&!("data"in X)){let{success:x,message:E,error:P,...M}=X;R={success:x,...E!==void 0?{message:E}:{},...P!==void 0?{error:P}:{},...Object.keys(M).length>0?{data:M}:{}}}}return{isSuccess:_.isSuccess,data:R,errors:_.errors,code:_.code,message:_.isSuccess?void 0:_.errors?.message}}}import{useEffect as Xd,useEffectEvent as zo,useRef as ra}from"react";import{batch as S2,createStore as E2}from"h-state";var M2={connection:{status:"disconnected",clientId:null,subscribedTopics:[],error:null,reconnectAttempt:0},events:[],maxEvents:100},{useStore:Ds}=E2(M2,{setConnectionStatus:(n)=>(r)=>{n.connection.status=r},setClientId:(n)=>(r)=>{n.connection.clientId=r},setSubscribedTopics:(n)=>(r)=>{n.connection.subscribedTopics=r},setError:(n)=>(r)=>{n.connection.error=r},setReconnectAttempt:(n)=>(r)=>{n.connection.reconnectAttempt=r},addEvent:(n)=>(r)=>{let t=[r,...n.events];n.events=t.slice(0,n.maxEvents)},clearEvents:(n)=>()=>{n.events=[]},reset:(n)=>()=>{S2(()=>{n.connection.status="disconnected",n.connection.clientId=null,n.connection.subscribedTopics=[],n.connection.error=null,n.connection.reconnectAttempt=0,n.events=[]})}});function D2(n){if(n.wsUrl){let a=n.wsUrl.replace(/\/$/,""),e=n.wsPath||"/api/events/subscribe",i=(n.topics||["*"]).join(",");return`${a}${e}?userId=${encodeURIComponent(n.userId)}&topics=${encodeURIComponent(i)}`}if(typeof window>"u")return"";let r=window.location.protocol==="https:"?"wss:":"ws:",t=window.location.host,o=n.wsPath||"/api/events/subscribe",c=(n.topics||["*"]).join(",");return`${r}//${t}${o}?userId=${encodeURIComponent(n.userId)}&topics=${encodeURIComponent(c)}`}var H2=0;function z2(n){let r=Ds(),t=ra(null),o=ra(null),c=ra(null),a=ra(!1),e=ra(n);e.current=n;let i=n.autoReconnect??!0,s=n.maxReconnectAttempts??10,l=n.reconnectBaseDelay??1000,d=n.reconnectMaxDelay??30000,b=n.heartbeatInterval??30000,u=n.debug??!1,$=(...z)=>{if(u)console.log("[usePubSub]",...z)},k=()=>{if(o.current)clearInterval(o.current),o.current=null},w=()=>{if(c.current)clearTimeout(c.current),c.current=null},_=(z)=>{k(),o.current=setInterval(()=>{if(z.readyState===WebSocket.OPEN)z.send(JSON.stringify({type:"ping"}))},b)},R=zo((z)=>{try{let h=JSON.parse(z.data);switch(h.type){case"connected":r.setConnectionStatus("connected"),r.setClientId(h.clientId),r.setSubscribedTopics(h.subscribedTopics),r.setReconnectAttempt(0),r.setError(null),$("Connected, clientId:",h.clientId);break;case"subscribed":r.setSubscribedTopics(h.topics),$("Subscribed to:",h.topics);break;case"event":{let g={id:`evt_${Date.now()}_${H2++}`,topic:h.topic,data:h.data,timestamp:h.timestamp,receivedAt:Date.now(),messageId:h.messageId,isRedelivery:h.isRedelivery};if(r.addEvent(g),h.messageId&&t.current?.readyState===WebSocket.OPEN)t.current.send(JSON.stringify({type:"ack",messageId:h.messageId}));break}case"pong":break;case"error":r.setError(Error(h.error)),$("Server error:",h.error);break}}catch{$("Failed to parse message")}}),X=zo((z)=>{if(a.current)return;if(!i)return;if(z>=s){r.setConnectionStatus("disconnected"),r.setError(Error("Max reconnection attempts reached")),$("Max reconnect attempts reached");return}let h=Math.min(l*2**z,d);$(`Reconnecting in ${h}ms (attempt ${z+1}/${s})`),r.setConnectionStatus("reconnecting"),r.setReconnectAttempt(z+1),w(),c.current=setTimeout(()=>{if(!a.current)x()},h)}),x=zo(()=>{if(a.current)return;if(t.current?.readyState===WebSocket.OPEN)return;if(!e.current.userId)return;if(t.current){if(t.current.onopen=null,t.current.onmessage=null,t.current.onerror=null,t.current.onclose=null,t.current.readyState===WebSocket.OPEN||t.current.readyState===WebSocket.CONNECTING)t.current.close();t.current=null}let z=D2(e.current);if(!z)return;r.setConnectionStatus("connecting"),r.setError(null),$("Connecting to:",z);let h=new WebSocket(z);t.current=h,h.onopen=()=>{$("WebSocket opened"),_(h)},h.onmessage=R,h.onerror=()=>{$("WebSocket error"),r.setError(Error("WebSocket connection error"))},h.onclose=(g)=>{if($("WebSocket closed",g.code,g.reason),k(),r.setConnectionStatus("disconnected"),r.setClientId(null),!a.current&&g.code!==4001){let B=r.connection.reconnectAttempt;X(B)}}}),E=zo(()=>{if(k(),w(),t.current){if(t.current.onopen=null,t.current.onmessage=null,t.current.onerror=null,t.current.onclose=null,t.current.readyState===WebSocket.OPEN||t.current.readyState===WebSocket.CONNECTING)t.current.close();t.current=null}r.setConnectionStatus("disconnected"),r.setClientId(null)}),P=zo((z)=>{if(t.current?.readyState!==WebSocket.OPEN)return;t.current.send(JSON.stringify({type:"subscribe",topics:z}))}),M=zo((z)=>{if(t.current?.readyState!==WebSocket.OPEN)return;t.current.send(JSON.stringify({type:"unsubscribe",topics:z}))}),A=zo((z)=>{return r.events.filter((h)=>h.topic===z)});return Xd(()=>{if(a.current=!1,n.userId)x();return()=>{a.current=!0,E()}},[n.userId]),Xd(()=>{if(r.connection.status==="connected"&&n.topics)P(n.topics)},[n.topics?.join(",")]),{isConnected:r.connection.status==="connected",isConnecting:r.connection.status==="connecting"||r.connection.status==="reconnecting",clientId:r.connection.clientId,subscribedTopics:r.connection.subscribedTopics,events:r.events,error:r.connection.error,reconnectAttempt:r.connection.reconnectAttempt,connect:x,disconnect:E,subscribe:P,unsubscribe:M,clearEvents:r.clearEvents,getEventsByTopic:A}}import{randomUUID as G4}from"crypto";var Js=kr(Cd(),1);import{Elysia as se,NotFoundError as lc}from"elysia";var Fr,no,Wt=typeof Bun<"u"&&!!Bun.file;function sc(){if(Fr||(Fr=process.getBuiltinModule("fs/promises")),no||(no=process.getBuiltinModule("path")),!no){console.warn("@elysiajs/static require path to be available.");return}return[Fr,no]}async function Qd(n){if(Fr||sc(),Wt){let r=new Bun.Glob("**/*.html"),t=[];for await(let o of r.scan(n))t.push(no.join(n,o));return t}return[]}async function zs(n){if(Fr||sc(),Wt){let t=new Bun.Glob("**/*"),o=[];for await(let c of t.scan(n))o.push(no.join(n,c));return o}let r=await Fr.readdir(n).catch(()=>[]);return(await Promise.all(r.map(async(t)=>{let o=n+no.sep+t,c=await Fr.stat(o).catch(()=>null);return c?c.isDirectory()?await zs(o):[no.resolve(n,o)]:[]}))).flat()}function Us(n){return Fr||sc(),Fr.stat(n).then(()=>!0,()=>!1)}class Bs{constructor(n=250,r=10800){this.max=n,this.ttl=r,this.map=new Map}get(n){let r=this.map.get(n);if(r)return r[1]<=Date.now()?void this.delete(n):(this.map.delete(n),this.map.set(n,r),r[0])}set(n,r){if(this.interval||(this.interval=setInterval(()=>{let t=Date.now();for(let[o,c]of this.map)c[1]<=t&&this.map.delete(o)},this.ttl)),this.map.has(n))this.map.delete(n);else if(this.map.size>=this.max){let t=this.map.keys().next().value;t!==void 0&&this.delete(t)}this.map.set(n,[r,Date.now()+this.ttl*1000])}delete(n){this.map.get(n)&&this.map.delete(n)}clear(){this.map.clear()}size(){return this.map.size}[Symbol.dispose](){this.interval&&clearInterval(this.interval)}}function Ws(n,r,t){if(n["cache-control"]&&/no-cache|no-store/.test(n["cache-control"]))return!1;if("if-none-match"in n){let o=n["if-none-match"];return o==="*"?!0:o===null||typeof r!="string"?!1:o===r}if(n["if-modified-since"]){let o=n["if-modified-since"];try{return Fr.stat(t).then((c)=>{if(c.mtime!==void 0&&c.mtime.getTime()<=Date.parse(o))return!0})}catch{}}return!1}var ie;function ta(n){return Wt?Bun.file(n):(Fr||sc(),Fr.readFile(n))}async function Ys(n){return Wt?new Bun.CryptoHasher("md5").update(await n.arrayBuffer()).digest("base64"):(ie||(ie=process.getBuiltinModule("crypto")),ie?ie.createHash("md5").update(n).digest("base64"):void console.warn("[@elysiajs/static] crypto is required to generate etag."))}var oa=(n)=>{if(!n)return!1;for(let r in n)return!0;return!1};async function Pd({assets:n="public",prefix:r="/public",staticLimit:t=1024,alwaysStatic:o=!1,ignorePatterns:c=[".DS_Store",".git",".env"],headers:a,maxAge:e=86400,directive:i="public",etag:s=!0,extension:l=!0,indexHTML:d=!0,decodeURI:b,silent:u}={}){if(typeof process>"u"||typeof process.getBuiltinModule>"u")return u||console.warn("[@elysiajs/static] require process.getBuiltinModule. Static plugin is disabled"),new se;let $=sc();if(!$)return new se;let[k,w]=$,_=w.sep!=="/"?(M)=>M.replace(/\\/g,"/"):(M)=>M,R=new Bs;r===w.sep&&(r="");let X=w.resolve(n),x=c.length?(M)=>c.find((A)=>typeof A=="string"?A.includes(M):A.test(M)):()=>!1,E=new se({name:"static",seed:r});if(o){let M=await zs(w.resolve(n));if(M.length<=t)for(let A of M){let z=function({headers:L}){if(G){let J=Ws(L,G,A);if(J===!0)return new Response(null,{status:304,headers:oa(a)?a:void 0});if(J!==!1){let W=R.get(g);return W?W.clone():J.then((U)=>{if(U)return new Response(null,{status:304,headers:a||void 0});let Y=new Response(B,{headers:Object.assign({"Cache-Control":e?`${i}, max-age=${e}`:i},a,G?{Etag:G}:{})});return R.set(r,Y),Y.clone()})}}let O=R.get(g);if(O)return O.clone();let v=new Response(B,{headers:Object.assign({"Cache-Control":e?`${i}, max-age=${e}`:i},a,G?{Etag:G}:{})});return R.set(g,v),v.clone()};var P=z;if(!A||x(A))continue;let h=A.replace(X,"");b&&(h=Js.default(h)??h);let g=_(w.join(r,h));if(Wt&&A.endsWith(".html")){let L=await import(A);E.get(g,L.default),d&&g.endsWith("/index.html")&&E.get(g.replace("/index.html",""),L.default);continue}l||(g=_(g.slice(0,g.lastIndexOf("."))));let B=Wt?ta(A):await ta(A);if(!B)return u||console.warn(`[@elysiajs/static] Failed to load file: ${A}`),new se;let G=await Ys(B);E.get(g,s?z:new Response(B,oa(a)?{headers:a}:void 0)),d&&g.endsWith("/index.html")&&E.get(g.replace("/index.html",""),s?z:new Response(B,oa(a)?{headers:a}:void 0))}return E}if(!(`GET_${r}/*`in E.routeTree)){if(Wt){let M=await Qd(w.resolve(n));for(let A of M){if(!A||x(A))continue;let z=A.replace(X,""),h=_(w.join(r,z)),g=await import(A);E.get(h,g.default),d&&h.endsWith("/index.html")&&E.get(h.replace("/index.html",""),g.default)}}E.onError(()=>{}).get(`${r.endsWith("/")?r.slice(0,-1):r}/*`,async({params:M,headers:A})=>{let z=_(w.join(n,b?Js.default(M["*"])??M["*"]:M["*"]));if(x(z))throw new lc;let h=R.get(z);if(h)return h.clone();try{let g=await k.stat(z).catch(()=>null);if(!g)throw new lc;if(!d&&g.isDirectory())throw new lc;let B;if(!Wt&&d){let O=w.join(z,"index.html"),v=R.get(O);if(v)return v.clone();await Us(O)&&(B=await ta(O))}if(!B&&!g.isDirectory()&&await Us(z))B=await ta(z);else throw new lc;if(!s)return new Response(B,oa(a)?{headers:a}:void 0);let G=await Ys(B);if(G&&await Ws(A,G,z))return new Response(null,{status:304});let L=new Response(B,{headers:Object.assign({"Cache-Control":e?`${i}, max-age=${e}`:i},a,G?{Etag:G}:{})});return R.set(z,L),L.clone()}catch(g){throw g instanceof lc?g:(u||console.error("[@elysiajs/static]",g),new lc)}})}return E}Hl();$l();import{pushSchema as q4}from"drizzle-kit/api";import{and as ne,eq as ur}from"drizzle-orm";import{drizzle as N4}from"drizzle-orm/node-postgres";import{pgSchema as O4}from"drizzle-orm/pg-core";import F4 from"elysia";var lu=[{table_name:"users",feature_set:["authentication"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"email",type:"varchar",length:255},{name:"password",type:"varchar",length:255},{name:"verified_at",type:"timestamp"},{name:"last_login_at",type:"timestamp"},{name:"login_count",type:"integer",default:0},{name:"is_locked",type:"boolean",default:!1},{name:"locked_until",type:"timestamp"},{name:"failed_login_attempts",type:"integer",default:0},{name:"is_god",type:"boolean",default:!1}],indexes:[{columns:["email"],unique:!0},{columns:["email","is_active"]},{columns:["last_login_at"]},{columns:["is_locked","locked_until"]}]},{table_name:"profiles",feature_set:["authentication"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"user_id",type:"uuid",notNull:!0,references:{table:"users",column:"id"}},{name:"first_name",type:"varchar",length:100,notNull:!0},{name:"last_name",type:"varchar",length:100,notNull:!0}],indexes:[{columns:["user_id"],unique:!0},{columns:["first_name","last_name"]}]},{table_name:"roles",feature_set:["authentication","authorization"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"name",type:"varchar",length:100,notNull:!0},{name:"description",type:"varchar",length:500}],indexes:[{columns:["name"],unique:!0}]},{table_name:"claims",feature_set:["authentication","authorization"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"action",type:"varchar",length:100,notNull:!0},{name:"description",type:"varchar",length:500},{name:"path",type:"varchar",length:200,notNull:!0},{name:"method",type:"varchar",length:10,notNull:!0}],indexes:[{columns:["action"],unique:!0},{columns:["path","method"]}]},{table_name:"user_roles",feature_set:["authentication","authorization"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"user_id",type:"uuid",notNull:!0,references:{table:"users",column:"id",onDelete:"cascade"}},{name:"role_id",type:"uuid",notNull:!0,references:{table:"roles",column:"id",onDelete:"cascade"}}],indexes:[{columns:["user_id"]},{columns:["role_id"]}],constraints:{unique:[{name:"unique_user_role",columns:["user_id","role_id"]}]}},{table_name:"role_claims",feature_set:["authentication","authorization"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"role_id",type:"uuid",notNull:!0,references:{table:"roles",column:"id",onDelete:"cascade"}},{name:"claim_id",type:"uuid",notNull:!0,references:{table:"claims",column:"id",onDelete:"cascade"}},{name:"scope",type:"text"}],indexes:[{columns:["role_id"]},{columns:["claim_id"]},{columns:["role_id","claim_id","scope"]}]},{table_name:"files",feature_set:["storage"],add_base_columns:!0,is_form_data:!0,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"name",type:"varchar",length:255,notNull:!0},{name:"original_name",type:"varchar",length:255,notNull:!0},{name:"type",type:"varchar",length:50,enumValues:["image","document","video","audio","profile_picture"]},{name:"path",type:"varchar",length:500,notNull:!0},{name:"size",type:"bigint",mode:"number",notNull:!0},{name:"mime_type",type:"varchar",length:100,notNull:!0},{name:"extension",type:"varchar",length:10,notNull:!0},{name:"uploaded_by",type:"uuid",references:{table:"users",column:"id"}}],indexes:[{columns:["type"]},{columns:["uploaded_by"]},{columns:["size"]}]},{table_name:"addresses",feature_set:["authentication"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"owner_type",type:"varchar",length:50,notNull:!0,enumValues:["user","company","contact"]},{name:"owner_id",type:"uuid",notNull:!0},{name:"name",type:"varchar",length:100,notNull:!0},{name:"street",type:"varchar",length:255},{name:"city",type:"varchar",length:100},{name:"state",type:"varchar",length:50},{name:"zip",type:"varchar",length:20},{name:"country",type:"varchar",length:50,default:"US"},{name:"latitude",type:"decimal",precision:10,scale:8},{name:"longitude",type:"decimal",precision:11,scale:8},{name:"neighborhood",type:"varchar",length:100},{name:"apartment",type:"varchar",length:50},{name:"province",type:"varchar",length:100},{name:"district",type:"varchar",length:100},{name:"type",type:"varchar",length:50}],indexes:[{columns:["city","state"]},{columns:["latitude","longitude"]},{columns:["type"]},{columns:["owner_type","owner_id"]}]},{table_name:"phones",feature_set:["authentication"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"owner_type",type:"varchar",length:50,notNull:!0,enumValues:["user","company","contact"]},{name:"owner_id",type:"uuid",notNull:!0},{name:"name",type:"varchar",length:100,notNull:!0},{name:"type",type:"varchar",length:50,enumValues:["mobile","office","fax"]},{name:"number",type:"varchar",length:20,notNull:!0},{name:"country_code",type:"varchar",length:10,notNull:!0,default:"+1"},{name:"extension",type:"varchar",length:10}],indexes:[{columns:["number"]},{columns:["type"]},{columns:["owner_type","owner_id"]}]},{table_name:"notifications",feature_set:["authentication","notification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"user_id",type:"uuid",notNull:!0},{name:"title",type:"varchar",length:255,notNull:!0},{name:"body",type:"varchar",length:1000},{name:"entity_name",type:"varchar",length:100},{name:"entity_id",type:"uuid"},{name:"is_seen",type:"boolean",notNull:!0,default:!1},{name:"seen_at",type:"timestamptz"}],indexes:[{columns:["user_id","created_at"]},{columns:["is_seen"]}]},{table_name:"tenants",feature_set:["multi-tenant"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["main"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"subdomain",type:"varchar",length:100,notNull:!0,unique:!0},{name:"company_id",type:"uuid",notNull:!0},{name:"schema_name",type:"varchar",length:100,notNull:!0,unique:!0},{name:"company_name",type:"varchar",length:255},{name:"god_admin_email",type:"varchar",length:255}],indexes:[]},{table_name:"verifications",feature_set:["authentication","verification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"requirement_id",type:"uuid",notNull:!0,references:{table:"verificationRequirements",column:"id"}},{name:"verifier_id",type:"uuid",notNull:!0,references:{table:"users",column:"id"}},{name:"signature_id",type:"uuid",references:{table:"files",column:"id"}},{name:"entity_name",type:"varchar",length:100,notNull:!0},{name:"entity_id",type:"uuid",notNull:!0},{name:"step_order",type:"integer",notNull:!0,default:1},{name:"decision",type:"varchar",length:50,notNull:!0,default:"pending",enumValues:["approved","rejected","pending"]},{name:"reason",type:"text"},{name:"diff",type:"jsonb"}],indexes:[{columns:["requirement_id"]},{columns:["verifier_id"]},{columns:["entity_name","entity_id"]},{columns:["entity_name","entity_id","step_order"]},{columns:["decision"]}]},{table_name:"verificationRequirements",feature_set:["authentication","verification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"entity_id",type:"uuid"},{name:"entity_name",type:"varchar",length:100},{name:"verifier_type",type:"varchar",length:30,enumValues:["user","role","entity_creator"]},{name:"verifier_id",type:"uuid"},{name:"verifier_role",type:"varchar",length:50},{name:"is_signature_mandatory",type:"boolean",notNull:!0},{name:"step_order",type:"integer",notNull:!0,default:1},{name:"is_all_required",type:"boolean",notNull:!0,default:!1},{name:"connected_from_step_order",type:"integer"},{name:"position_x",type:"numeric"},{name:"position_y",type:"numeric"}],indexes:[{columns:["entity_id"]}]},{table_name:"verificationFlows",feature_set:["authentication","verification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"entity_name",type:"varchar",length:100,notNull:!0},{name:"name",type:"varchar",length:255,notNull:!0},{name:"description",type:"text"},{name:"trigger_on",type:"varchar",length:50,notNull:!0,default:"update",enumValues:["create","update","delete","manual"]},{name:"trigger_fields",type:"jsonb"},{name:"is_draft",type:"boolean",notNull:!0,default:!0},{name:"published_at",type:"timestamptz"},{name:"viewport",type:"jsonb"}],indexes:[{columns:["entity_name"]},{columns:["entity_name","trigger_on"]},{columns:["is_draft"]}]},{table_name:"verificationSteps",feature_set:["authentication","verification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"flow_id",type:"uuid",notNull:!0,references:{table:"verificationFlows",column:"id",onDelete:"cascade"}},{name:"entity_name",type:"varchar",length:100,notNull:!0},{name:"node_id",type:"varchar",length:100,notNull:!0},{name:"node_type",type:"varchar",length:50,notNull:!0,default:"step",enumValues:["start","step","condition","notification","end"]},{name:"step_order",type:"integer",notNull:!0,default:1},{name:"name",type:"varchar",length:255},{name:"description",type:"text"},{name:"position_x",type:"numeric",notNull:!0,default:0},{name:"position_y",type:"numeric",notNull:!0,default:0},{name:"width",type:"numeric"},{name:"height",type:"numeric"},{name:"style",type:"jsonb"},{name:"data",type:"jsonb"}],indexes:[{columns:["flow_id"]},{columns:["entity_name"]},{columns:["flow_id","node_id"],unique:!0},{columns:["entity_name","step_order"]}]},{table_name:"verificationEdges",feature_set:["authentication","verification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"flow_id",type:"uuid",notNull:!0,references:{table:"verificationFlows",column:"id",onDelete:"cascade"}},{name:"edge_id",type:"varchar",length:100,notNull:!0},{name:"source_node_id",type:"varchar",length:100,notNull:!0},{name:"target_node_id",type:"varchar",length:100,notNull:!0},{name:"source_handle",type:"varchar",length:50},{name:"target_handle",type:"varchar",length:50},{name:"edge_type",type:"varchar",length:50,default:"default",enumValues:["default","conditional","success","failure"]},{name:"label",type:"varchar",length:255},{name:"condition",type:"jsonb"},{name:"style",type:"jsonb"},{name:"animated",type:"boolean",default:!1}],indexes:[{columns:["flow_id"]},{columns:["flow_id","edge_id"],unique:!0},{columns:["source_node_id"]},{columns:["target_node_id"]}]},{table_name:"verificationNotificationRules",feature_set:["authentication","verification","notification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"flow_id",type:"uuid",notNull:!0,references:{table:"verificationFlows",column:"id",onDelete:"cascade"}},{name:"step_node_id",type:"varchar",length:100},{name:"trigger",type:"varchar",length:50,notNull:!0,enumValues:["on_flow_started","on_step_reached","on_approved","on_rejected","on_flow_completed"]},{name:"channel",type:"varchar",length:20,notNull:!0,default:"portal",enumValues:["portal","email","both"]},{name:"title_template",type:"varchar",length:255},{name:"body_template",type:"text"},{name:"starts_at",type:"timestamptz"},{name:"expires_at",type:"timestamptz"}],indexes:[{columns:["flow_id"]},{columns:["flow_id","step_node_id"]},{columns:["trigger"]}]},{table_name:"verificationNotificationRecipients",feature_set:["authentication","verification","notification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"rule_id",type:"uuid",notNull:!0},{name:"recipient_type",type:"varchar",length:20,notNull:!0,enumValues:["user","role","all_verifiers","step_verifier"]},{name:"recipient_user_id",type:"uuid"},{name:"recipient_role_id",type:"uuid"},{name:"channel",type:"varchar",length:20,notNull:!0,enumValues:["portal"]}],indexes:[{columns:["rule_id"]},{columns:["recipient_type"]},{columns:["channel"]}]},{table_name:"user_sessions",feature_set:["authentication"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:["POST","PUT","PATCH"],bulk_endpoints_enabled:!0,columns:[{name:"user_id",type:"uuid",notNull:!0,references:{table:"users",column:"id",onDelete:"cascade"}},{name:"token_hash",type:"varchar",length:255,notNull:!0},{name:"refresh_token_hash",type:"varchar",length:255},{name:"device_fingerprint",type:"varchar",length:255},{name:"device_name",type:"varchar",length:100},{name:"device_type",type:"varchar",length:50,enumValues:["desktop","mobile","tablet","unknown"]},{name:"browser_name",type:"varchar",length:50},{name:"browser_version",type:"varchar",length:20},{name:"os_name",type:"varchar",length:50},{name:"os_version",type:"varchar",length:20},{name:"ip_address",type:"varchar",length:45,notNull:!0},{name:"location_country",type:"varchar",length:100},{name:"location_city",type:"varchar",length:100},{name:"location_coordinates",type:"varchar",length:50},{name:"last_activity_at",type:"timestamptz",notNull:!0,defaultRaw:"now()"},{name:"expires_at",type:"timestamptz",notNull:!0},{name:"revoked_at",type:"timestamptz"},{name:"revoked_reason",type:"varchar",length:100,enumValues:["user_logout","user_revoked","admin_revoked","security_concern","password_changed","expired","replaced"]},{name:"is_current",type:"boolean",notNull:!0,default:!1},{name:"login_method",type:"varchar",length:50,enumValues:["password","oauth_google","oauth_github","oauth_microsoft","magic_link","sso","api_key"]},{name:"trust_score",type:"integer",default:100},{name:"approval_status",type:"varchar",length:20,default:"approved",enumValues:["approved","pending","rejected"]},{name:"approval_token",type:"varchar",length:64},{name:"approval_requested_at",type:"timestamptz"},{name:"approval_responded_at",type:"timestamptz"}],indexes:[{columns:["user_id"]},{columns:["token_hash"],unique:!0},{columns:["refresh_token_hash"]},{columns:["user_id","is_active"]},{columns:["expires_at"]},{columns:["device_fingerprint"]},{columns:["ip_address"]},{columns:["last_activity_at"]},{columns:["approval_status"]},{columns:["approval_token"]}]},{table_name:"password_reset_tokens",feature_set:["authentication"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:["POST","PUT","PATCH","DELETE"],bulk_endpoints_enabled:!0,columns:[{name:"user_id",type:"uuid",notNull:!0,references:{table:"users",column:"id",onDelete:"cascade"}},{name:"token_hash",type:"varchar",length:255,notNull:!0},{name:"expires_at",type:"timestamptz",notNull:!0},{name:"used_at",type:"timestamptz"}],indexes:[{columns:["token_hash"],unique:!0},{columns:["user_id"]},{columns:["expires_at"]}]},{table_name:"magic_link_tokens",feature_set:["authentication"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:["POST","PUT","PATCH","DELETE"],bulk_endpoints_enabled:!0,columns:[{name:"user_id",type:"uuid",notNull:!0,references:{table:"users",column:"id",onDelete:"cascade"}},{name:"email",type:"varchar",length:255,notNull:!0},{name:"token_hash",type:"varchar",length:255,notNull:!0},{name:"expires_at",type:"timestamptz",notNull:!0},{name:"used_at",type:"timestamptz"}],indexes:[{columns:["token_hash"],unique:!0},{columns:["user_id"]},{columns:["email"]},{columns:["expires_at"]}]},{table_name:"audit_logs",feature_set:["audit"],add_base_columns:!1,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:["POST","PUT","DELETE","PATCH","TOGGLE","VERIFICATION"],bulk_endpoints_enabled:!0,columns:[{name:"id",type:"uuid",primaryKey:!0,defaultRaw:"gen_random_uuid()"},{name:"entity_id",type:"uuid"},{name:"entity_name",type:"text",notNull:!0},{name:"operation_type",type:"text",notNull:!0},{name:"user_id",type:"uuid"},{name:"ip_address",type:"text"},{name:"user_agent",type:"text"},{name:"summary",type:"text"},{name:"old_values",type:"jsonb"},{name:"new_values",type:"jsonb"},{name:"created_at",type:"timestamp",notNull:!0,defaultRaw:"now()"},{name:"path",type:"text"},{name:"query",type:"text"}],indexes:[{columns:["entity_id"]},{columns:["entity_name"]},{columns:["user_id"]},{columns:["created_at"]}]}];var t5={GET:["GET"],POST:["POST"],PUT:["PUT"],DELETE:["DELETE"],PATCH:["PATCH"],TOGGLE:["PATCH"],VERIFICATION:["POST"]};function o5(n,r){let t=[],o=n.authentication;if(!o)return t;if(o.login?.enabled&&o.login?.isPublic)t.push({path:o.login.route||`${r}/auth/login`,method:"POST",source:"auth"});if(o.register?.enabled&&o.register?.isPublic)t.push({path:o.register.route||`${r}/auth/register`,method:"POST",source:"auth"});if(o.logout?.enabled&&o.logout?.isPublic)t.push({path:o.logout.route||`${r}/auth/logout`,method:"POST",source:"auth"});if(o.refresh?.enabled&&o.refresh?.isPublic)t.push({path:o.refresh.route||`${r}/auth/refresh`,method:"POST",source:"auth"});if(o.passwordReset?.enabled&&o.passwordReset?.isPublic){let c=o.passwordReset.route||`${r}/auth/password-reset`;t.push({path:`${c}/request`,method:"POST",source:"auth"},{path:`${c}/confirm`,method:"POST",source:"auth"})}if(o.passwordChange?.enabled&&o.passwordChange?.isPublic)t.push({path:o.passwordChange.route||`${r}/auth/password-change`,method:"POST",source:"auth"});if(o.magicLink?.enabled&&o.magicLink?.isPublic)t.push({path:o.magicLink.route||`${r}/auth/magic-link`,method:"POST",source:"auth"},{path:o.magicLink.verifyRoute||`${r}/auth/magic-link/verify`,method:"POST",source:"auth"});if(o.register?.enabled&&o.register?.emailVerification?.enabled)t.push({path:`${r}/verify-email`,method:"GET",source:"auth"},{path:`${r}/resend-verification`,method:"POST",source:"auth"});if(o.invite?.enabled&&o.invite?.isPublic)t.push({path:o.invite.route||`${r}/auth/invite`,method:"POST",source:"auth"});if(o.invite?.enabled){let c=o.invite.route||`${r}/auth/invite`;t.push({path:`${c}/verify`,method:"POST",source:"auth"})}if(o.passwordSet?.enabled)t.push({path:o.passwordSet.route||`${r}/auth/password-set`,method:"POST",source:"auth"});if(o.captcha?.enabled&&o.captcha?.isPublic){let c=o.captcha.route||`${r}/auth/captcha`;t.push({path:`${c}/generate`,method:"GET",source:"auth"},{path:`${c}/validate`,method:"POST",source:"auth"})}return t}function fu(n,r,t){let o=[];for(let c of n){if(!c.is_public)continue;let a=`${r}/${t}/${c.table_name}`;for(let[e,i]of Object.entries(c.is_public)){if(!i)continue;let s=t5[e];if(!s)continue;for(let l of s)if(l==="GET")o.push({path:a,method:"GET",source:"entity"}),o.push({path:`${a}/:id`,method:"GET",source:"entity"});else if(l==="POST")o.push({path:a,method:"POST",source:"entity"});else if(l==="PUT"||l==="PATCH")o.push({path:`${a}/:id`,method:l,source:"entity"});else if(l==="DELETE")o.push({path:`${a}/:id`,method:"DELETE",source:"entity"})}}return o}function c5(n,r,t){return fu(n,r,t)}function zl(n,r,t="",o="public"){let c=o5(n,t),a=fu(n.entities||[],t,o),e=c5(r,t,o),i=[];if(n.pubsub?.enabled){let l=n.pubsub.basePath||"/subs",d=n.pubsub.wsPath||"/api/events/subscribe";i.push({path:`${l}/:topic`,method:"POST",source:"system"},{path:d,method:"GET",source:"system"})}let s=[{path:"/nucleus-core",method:"GET",source:"custom"},{path:"/public",method:"GET",source:"custom"},{path:"/docs",method:"GET",source:"custom"},{path:"/docs/json",method:"GET",source:"custom"},{path:"/swagger",method:"GET",source:"custom"},{path:"/swagger/json",method:"GET",source:"custom"}];return[...c,...a,...e,...i,...s]}function Ul(n,r,t){let o=r.replace(/\/$/,""),c=t.toUpperCase();for(let a of n){if(a.method!==c)continue;if(a5(a.path,o))return!0}return!1}function a5(n,r){if(n===r)return!0;let t=n.split("/").filter(Boolean),o=r.split("/").filter(Boolean);if(t.length!==o.length)return!1;for(let c=0;c<t.length;c++){let a=t[c],e=o[c];if(a?.startsWith(":"))continue;if(a!==e)return!1}return!0}ml();Ne();je();import{asc as C5,desc as Q5,eq as Sr,ilike as pu,inArray as P5,notInArray as G5,or as q5}from"drizzle-orm";import{drizzle as N5}from"drizzle-orm/node-postgres";import{Elysia as O5,t as Ln}from"elysia";import{t as Pn}from"elysia";function pl(n){let r={};if(!n||n.length===0)return Pn.Object({},{additionalProperties:!0});for(let t of n)switch(t.type?.toLowerCase()||"string"){case"integer":case"int":case"serial":case"bigserial":case"numeric":case"decimal":r[t.name]=t.notNull?Pn.Number():Pn.Optional(Pn.Number());break;case"boolean":r[t.name]=t.notNull?Pn.Boolean():Pn.Optional(Pn.Boolean());break;case"timestamp":case"timestamptz":case"date":r[t.name]=t.notNull?Pn.String({format:"date-time"}):Pn.Optional(Pn.String({format:"date-time"}));break;case"json":case"jsonb":r[t.name]=Pn.Optional(Pn.Unknown());break;case"uuid":r[t.name]=t.notNull?Pn.String({format:"uuid"}):Pn.Optional(Pn.String({format:"uuid"}));break;default:r[t.name]=t.notNull?Pn.String():Pn.Optional(Pn.String())}return Pn.Object(r,{additionalProperties:!0})}function Ku(n){return Pn.Array(Pn.Object({id:Pn.String(),data:pl(n)}))}function Tl(n,r){let{db:t,schemaTables:o,schemaRelations:c,entities:a,logger:e,databaseUrl:i,storage:s,authorization:l}=r,d=ba(s),b=l?.enabled??!1;if(!t)return n;let u=Object.keys(o),$=a.map((E)=>E.table_name),k=u.filter((E)=>!$.includes(E)),w=["userSessions","passwordResetTokens","magicLinkTokens"],_=["passwordResetTokens","magicLinkTokens"],R=["files"],X=k.filter((E)=>{if(_.includes(E)&&!r.emailServiceAvailable)return e.info(`Skipping ${E} routes - email service not available`),!1;return!0}).map((E)=>({table_name:E,group_name:w.includes(E)?"Authentication":E,is_form_data:R.includes(E)})),x=[...a,...X];e.info(`All entities: ${x.map((E)=>E.table_name).join(", ")}`);for(let E of x){let P=E.table_name,M=E.group_name||E.table_name,A=o[P];if(!A)continue;let z=c[`${P}Relations`];e.info(`Creating routes for table: ${P}`);let h=A,g=h.id,B=t,G=pl(E.columns),L=Ln.Array(G),O=Ku(E.columns),v=Ln.Array(Ln.String()),J=new O5({prefix:`/${P}`});if(!E.excluded_methods?.includes("GET"))J.get("/",async(W)=>{if(!B)return{success:!1,message:"DB not initialized"};let U=W.request.headers.get("x-user-id"),Y=E.columns?.map((vn)=>vn.name),Q=Object.keys(c).filter((vn)=>vn.startsWith(`${E.table_name}Relations`)).map((vn)=>vn.replace("Relations","")),F=null;if(b&&U){if(F=await _l({userId:U,method:"GET",entity:E.table_name,requestedFields:Y,requestedRelations:Q,db:B,schemaTables:o,logger:e}),!F.authorized)return{success:!1,message:F.reason||"Unauthorized",status:403}}let K=ql(W.query),N=[];if(b&&F?.scopeFilters)for(let[vn,on]of Object.entries(F.scopeFilters)){let Bn=h[vn];if(Bn)N.push(Sr(Bn,on))}if(K.search&&K.searchFields){let vn=K.searchFields.map((on)=>{let Bn=h[on.trim()];return Bn?pu(Bn,`%${K.search}%`):null}).filter((on)=>on!==null);if(vn.length>0){let on=q5(...vn);if(on)N.push(on)}}if(K.filters){let{ne:vn,gt:on,gte:Bn,lt:Ar,lte:Or,like:Ho,isNull:ac,isNotNull:ds}=await import("drizzle-orm");for(let gr of K.filters){let sr=h[gr.field];if(!sr)continue;switch(gr.operator){case"eq":N.push(Sr(sr,gr.value));break;case"neq":N.push(vn(sr,gr.value));break;case"gt":N.push(on(sr,gr.value));break;case"gte":N.push(Bn(sr,gr.value));break;case"lt":N.push(Ar(sr,gr.value));break;case"lte":N.push(Or(sr,gr.value));break;case"like":N.push(Ho(sr,gr.value));break;case"ilike":N.push(pu(sr,gr.value));break;case"in":N.push(P5(sr,gr.value));break;case"notIn":N.push(G5(sr,gr.value));break;case"isNull":N.push(ac(sr));break;case"isNotNull":N.push(ds(sr));break}}}let tn=B.select().from(A);if(N.length>0){let{and:vn}=await import("drizzle-orm"),on=vn(...N);if(on)tn=tn.where(on)}if(K.sort&&K.sort.length>0){let vn=K.sort.map((on)=>{let Bn=h[on.field];if(!Bn)return null;return on.direction==="desc"?Q5(Bn):C5(Bn)}).filter((on)=>on!==null);if(vn.length>0)tn=tn.orderBy(...vn)}let sn=K.page??1,kn=K.limit??20,ar=K.offset??(sn-1)*kn,rn=B.select().from(A);if(N.length>0){let{and:vn}=await import("drizzle-orm"),on=vn(...N);if(on)rn.where(on)}let Tn=(await rn).length;tn=tn.limit(kn).offset(ar);let cc=await tn,re=Qu(sn,kn,ar,Tn);if(b&&F?.allowedFields)cc=Ue(cc,F.allowedFields);return{success:!0,data:{items:cc,meta:re}}},{detail:{tags:[M],summary:`List ${P}`,description:`Get paginated list of ${P} records with filtering, sorting, and search`}}),J.get("/:id",async(W)=>{if(!B||!g)return{success:!1,message:"No id column or DB"};let U=W.params,Y=ql(W.query),Q=W.request.headers.get("x-user-id"),F=E.columns?.map((kn)=>kn.name),K=Y.with?.map((kn)=>kn.name),N=null;if(b&&Q){if(N=await _l({userId:Q,method:"GET",entity:E.table_name,requestedFields:F,requestedRelations:K,db:B,schemaTables:o,logger:e}),!N.authorized)return{success:!1,message:N.reason||"Unauthorized",status:403}}if(Y.with&&Y.with.length>0&&z&&i){let kn=b&&N?.allowedRelations?Y.with.filter((en)=>N.allowedRelations?.includes(en.name)??!1):Y.with,rn=await N5(i,{schema:{...o,...c}}).query[E.table_name]?.findFirst({where:Sr(g,U.id),with:kn.reduce((en,Tn)=>{return en[Tn.name]=Tn.limit?{limit:Tn.limit}:!0,en},{})});if(b&&N?.allowedFields&&rn)rn=Ue(rn,N.allowedFields);if(b&&N?.allowedRelations&&rn)rn=qb(rn,N.allowedRelations);return{success:!0,data:rn||null}}let sn=(await B.select().from(A).where(Sr(g,U.id)))[0]||null;if(b&&N?.allowedFields&&sn)sn=Ue(sn,N.allowedFields);return{success:!0,data:sn}},{detail:{tags:[M],summary:`Get ${P} by ID`,description:`Get a single ${P} record by its ID with optional relations`}}),J.get("/distinct/:field",async(W)=>{if(!B)return{success:!1,message:"DB not initialized"};let U=W.params,Y=h[U.field];if(!Y)return{success:!1,message:"Field not found"};return{success:!0,data:await B.selectDistinct({value:Y}).from(A)}},{detail:{tags:[M],summary:`Get distinct ${P} values`,description:`Get distinct values for a specific field in ${P}`}});if(!E.excluded_methods?.includes("POST"))if(E.is_form_data&&d.enabled)J.post("/",async(W)=>{if(!B)return{success:!1,message:"DB not initialized"};let U=W.request.headers.get("x-user-id"),{data:Y,files:Q}=ua(W.body,d),F=Y;if(E.columns){F=uc(F,E.columns);let tn=bc(F,E.columns,!1);if(!tn.valid)return{success:!1,message:"Validation failed",errors:tn.errors}}let K=null;if(Q.length>0){if(K=await ga(Q,d,E.table_name),K.failed.length>0&&K.success.length===0)return{success:!1,message:"File upload failed",errors:K.failed};if(K.success.length>0){let tn=K.success[0];if(tn){let sn=tn.originalName.split(".").pop()||"";F={...F,id:tn.id,name:tn.name,originalName:tn.originalName,path:tn.path,mimeType:tn.mimeType,size:tn.size,extension:sn,uploadedBy:U}}}}if(U)F.createdBy=U;let N=await B.insert(A).values(F).returning();{let tn=new URL(W.request.url);e.audit({entityName:E.table_name,entityId:String(N[0]?.id??""),operation:"CREATE",userId:U||void 0,summary:`Created ${E.table_name}`,newValues:N[0],ipAddress:W.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||W.request.headers.get("x-real-ip")?.trim()||"unknown",userAgent:W.request.headers.get("user-agent")||"unknown",path:tn.pathname,query:tn.search})}return{success:!0,data:N[0]}},{type:"formdata",body:Ln.Object({[d.formData.dataField]:Ln.Optional(Ln.Union([Ln.String(),Ln.Any()])),[d.formData.filesField]:Ln.Optional(Ln.Union([Ln.File(),Ln.Array(Ln.File())]))}),detail:{tags:[M],summary:`Create ${P} with files`,description:`Create a new ${P} record with file upload support`}});else J.post("/",async(W)=>{if(!B)return{success:!1,message:"DB not initialized"};let U=W.body,Y=W.request.headers.get("x-user-id");if(E.columns){U=uc(U,E.columns);let F=bc(U,E.columns,!1);if(!F.valid)return{success:!1,message:"Validation failed",errors:F.errors}}if(Y)U.createdBy=Y;let Q=await B.insert(A).values(U).returning();{let F=new URL(W.request.url);e.audit({entityName:E.table_name,entityId:String(Q[0]?.id??""),operation:"CREATE",userId:Y||void 0,summary:`Created ${E.table_name}`,newValues:Q[0],ipAddress:W.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||W.request.headers.get("x-real-ip")?.trim()||"unknown",userAgent:W.request.headers.get("user-agent")||"unknown",path:F.pathname,query:F.search})}return{success:!0,data:Q[0]}},{body:G,detail:{tags:[M],summary:`Create ${P}`,description:`Create a new ${P} record`}});if(!E.excluded_methods?.includes("PUT"))if(E.is_form_data&&d.enabled)J.put("/:id",async(W)=>{if(!B||!g)return{success:!1,message:"No id column or DB"};let U=W.params,Y=W.request.headers.get("x-user-id"),{data:Q,files:F}=ua(W.body,d),K=Q,N=await B.select().from(A).where(Sr(g,U.id)).limit(1);if(E.columns){K=uc(K,E.columns);let kn=bc(K,E.columns,!1);if(!kn.valid)return{success:!1,message:"Validation failed",errors:kn.errors}}let tn=null;if(F.length>0)tn=await ga(F,d,E.table_name);let sn=await B.update(A).set(K).where(Sr(g,U.id)).returning();{let kn=new URL(W.request.url);e.audit({entityName:E.table_name,entityId:U.id,operation:"UPDATE",userId:Y||void 0,summary:`Updated ${E.table_name} (${U.id})`,oldValues:N[0],newValues:sn[0],ipAddress:W.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||W.request.headers.get("x-real-ip")?.trim()||"unknown",userAgent:W.request.headers.get("user-agent")||"unknown",path:kn.pathname,query:kn.search})}return{success:!0,data:{record:sn[0],files:tn?.success||[],fileErrors:tn?.failed||[]}}},{type:"formdata",body:Ln.Object({[d.formData.dataField]:Ln.Optional(Ln.Union([Ln.String(),Ln.Any()])),[d.formData.filesField]:Ln.Optional(Ln.Union([Ln.File(),Ln.Array(Ln.File())]))}),detail:{tags:[M],summary:`Update ${P} with files`,description:`Full update of ${P} record with file upload support`}});else J.put("/:id",async(W)=>{if(!B||!g)return{success:!1,message:"No id column or DB"};let{params:U,body:Y}=W,Q=W.request.headers.get("x-user-id"),F=await B.select().from(A).where(Sr(g,U.id)).limit(1);if(E.columns){Y=uc(Y,E.columns);let N=bc(Y,E.columns,!1);if(!N.valid)return{success:!1,message:"Validation failed",errors:N.errors}}if(Y.updatedAt=new Date,Q)Y.updatedBy=Q;let K=await B.update(A).set(Y).where(Sr(g,U.id)).returning();{let N=new URL(W.request.url);e.audit({entityName:E.table_name,entityId:U.id,operation:"UPDATE",userId:Q||void 0,summary:`Updated ${E.table_name} (${U.id})`,oldValues:F[0],newValues:K[0],ipAddress:W.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||W.request.headers.get("x-real-ip")?.trim()||"unknown",userAgent:W.request.headers.get("user-agent")||"unknown",path:N.pathname,query:N.search})}return{success:!0,data:K[0]}},{body:G,detail:{tags:[M],summary:`Update ${P}`,description:`Full update of ${P} record`}});if(!E.excluded_methods?.includes("PATCH"))J.patch("/:id",async(W)=>{if(!B||!g)return{success:!1,message:"No id column or DB"};let{params:U,body:Y}=W,Q=W.request.headers.get("x-user-id"),F=await B.select().from(A).where(Sr(g,U.id)).limit(1);if(E.columns){Y=uc(Y,E.columns);let N=bc(Y,E.columns,!0);if(!N.valid)return{success:!1,message:"Validation failed",errors:N.errors}}if(Y.updatedAt=new Date,Q)Y.updatedBy=Q;let K=await B.update(A).set(Y).where(Sr(g,U.id)).returning();{let N=new URL(W.request.url);e.audit({entityName:E.table_name,entityId:U.id,operation:"PATCH",userId:Q||void 0,summary:`Patched ${E.table_name} (${U.id})`,oldValues:F[0],newValues:K[0],ipAddress:W.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||W.request.headers.get("x-real-ip")?.trim()||"unknown",userAgent:W.request.headers.get("user-agent")||"unknown",path:N.pathname,query:N.search})}return{success:!0,data:K[0]}},{body:G,detail:{tags:[M],summary:`Patch ${P}`,description:`Partial update of ${P} record`}});if(!E.excluded_methods?.includes("DELETE"))J.delete("/:id",async(W)=>{if(!B||!g)return{success:!1,message:"No id column or DB"};let U=W.params,Y=W.request.headers.get("x-user-id"),Q=await B.select().from(A).where(Sr(g,U.id)).limit(1);await B.delete(A).where(Sr(g,U.id));{let F=new URL(W.request.url);e.audit({entityName:E.table_name,entityId:U.id,operation:"DELETE",userId:Y||void 0,summary:`Deleted ${E.table_name} (${U.id})`,oldValues:Q[0],ipAddress:W.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||W.request.headers.get("x-real-ip")?.trim()||"unknown",userAgent:W.request.headers.get("user-agent")||"unknown",path:F.pathname,query:F.search})}return{success:!0,data:null}},{detail:{tags:[M],summary:`Delete ${P}`,description:`Delete a ${P} record`}});if(E.bulk_endpoints_enabled){if(!E.excluded_methods?.includes("POST"))J.post("/bulk",async(W)=>{if(!B)return{success:!1,message:"DB not initialized"};let U=W.body;if(!Array.isArray(U))return{success:!1,message:"Body must be an array"};try{return{success:!0,data:await B.transaction(async(Q)=>{let F=[];for(let K of U){let N=await Q.insert(A).values(K).returning();F.push(N[0])}return F})}}catch(Y){return{success:!1,message:Y instanceof Error?Y.message:"Transaction failed"}}},{body:L,detail:{tags:[M],summary:`Bulk create ${P}`,description:`Create multiple ${P} records`}});if(!E.excluded_methods?.includes("PUT"))J.put("/bulk",async(W)=>{if(!B||!g)return{success:!1,message:"No id column or DB"};let U=W.body;if(!Array.isArray(U))return{success:!1,message:"Body must be an array"};try{return{success:!0,data:await B.transaction(async(Q)=>{let F=[];for(let K of U){let N=await Q.update(A).set(K.data).where(Sr(g,K.id)).returning();F.push(N[0])}return F})}}catch(Y){return{success:!1,message:Y instanceof Error?Y.message:"Transaction failed"}}},{body:O,detail:{tags:[M],summary:`Bulk update ${P}`,description:`Update multiple ${P} records`}});if(!E.excluded_methods?.includes("DELETE"))J.delete("/bulk",async(W)=>{if(!B||!g)return{success:!1,message:"No id column or DB"};let U=W.body;if(!Array.isArray(U))return{success:!1,message:"Body must be an array of ids"};try{return await B.transaction(async(Y)=>{for(let Q of U)await Y.delete(A).where(Sr(g,Q))}),{success:!0,data:{deleted:U.length}}}catch(Y){return{success:!1,message:Y instanceof Error?Y.message:"Transaction failed"}}},{body:v,detail:{tags:[M],summary:`Bulk delete ${P}`,description:`Delete multiple ${P} records`}})}n.use(J)}return n}import F5,{t as _a}from"elysia";function j5(n){let r=n.match(/^(\d+)(ms|s|m|h)$/);if(!r||!r[1]||!r[2])return 5000;let t=parseInt(r[1],10);switch(r[2]){case"ms":return t;case"s":return t*1000;case"m":return t*60*1000;case"h":return t*60*60*1000;default:return 5000}}function vl(n){let{monitoringService:r,logger:t,endpoints:o}=n,c=new F5({prefix:o.basePath});if(!o.enabled)return c;if(o.stream.enabled)c.get(o.stream.path,async function*({request:a}){t.info("[Monitoring] SSE stream connected");let e=j5(o.stream.interval),i=!0;a.signal.addEventListener("abort",()=>{i=!1,t.info("[Monitoring] SSE stream disconnected")});let s=await r.getLatestSnapshot();if(s)yield{event:"snapshot",data:JSON.stringify(s)};while(i){if(await new Promise((b)=>setTimeout(b,e)),!i)break;let l=await r.getLatestSnapshot();if(l)yield{event:"snapshot",data:JSON.stringify(l)};let d=r.getActiveAlerts();if(d.length>0)yield{event:"alerts",data:JSON.stringify(d)}}},{detail:{tags:["Monitoring"],summary:"Stream real-time monitoring data",description:"Server-Sent Events stream for real-time monitoring metrics"}});if(o.snapshot.enabled)c.get(o.snapshot.path,async()=>{let a=await r.getLatestSnapshot();if(!a)return{isSuccess:!1,message:"No monitoring data available",data:null};return{isSuccess:!0,message:"Current monitoring snapshot",data:a}},{detail:{tags:["Monitoring"],summary:"Get current monitoring snapshot",description:"Returns the latest monitoring metrics snapshot"}});if(o.history.enabled)c.get(o.history.path,async({query:a})=>{let e=Math.min(a.minutes?parseInt(String(a.minutes),10):60,o.history.maxMinutes),i=await r.getHistory(e);return{isSuccess:!0,message:`Monitoring history for last ${e} minutes`,data:{minutes:e,count:i.length,snapshots:i}}},{query:_a.Object({minutes:_a.Optional(_a.Numeric())}),detail:{tags:["Monitoring"],summary:"Get monitoring history",description:"Returns historical monitoring data for the specified time range"}});if(o.alerts.enabled)c.get(o.alerts.path,()=>{let a=r.getActiveAlerts();return{isSuccess:!0,message:"Active alerts",data:{count:a.length,alerts:a}}},{detail:{tags:["Monitoring"],summary:"Get active alerts",description:"Returns all currently active monitoring alerts"}}),c.post(`${o.alerts.path}/:alertId/acknowledge`,({params:a})=>{if(!r.acknowledgeAlert(a.alertId))return{isSuccess:!1,message:"Alert not found",data:null};return{isSuccess:!0,message:"Alert acknowledged",data:{alertId:a.alertId}}},{params:_a.Object({alertId:_a.String()}),detail:{tags:["Monitoring"],summary:"Acknowledge an alert",description:"Mark an alert as acknowledged"}});return t.info(`[Monitoring] Routes enabled at ${o.basePath} (stream: ${o.stream.enabled}, snapshot: ${o.snapshot.enabled}, history: ${o.history.enabled}, alerts: ${o.alerts.enabled})`),c}import K5,{t as xr}from"elysia";var p5={"Content-Type":"text/event-stream; charset=utf-8","Cache-Control":"no-cache, no-transform",Connection:"keep-alive"},T5=new TextEncoder,Il=(n,r)=>{let t=typeof r==="string"?r:JSON.stringify(r);return T5.encode(`event: ${n}
|
|
60
|
+
`}getActiveAlerts(){return Array.from(this.state.activeAlerts.values())}acknowledgeAlert(n){for(let[r,t]of this.state.activeAlerts)if(t.id===n)return t.acknowledged=!0,!0;return!1}clearAlert(n){this.state.activeAlerts.delete(n)}}class Rl{config;requestCount=0;responseTimes=[];errorCount=0;rateLimitBlocks=0;byEndpoint={};byMethod={};byStatus={};byErrorType={};lastCollectTime=Date.now();constructor(n){this.config=n}recordRequest(n){if(!this.config?.enabled)return;if(this.requestCount++,this.config.metrics?.responseTime!==!1){if(this.responseTimes.push(n.responseTimeMs),this.responseTimes.length>1e4)this.responseTimes=this.responseTimes.slice(-5000)}if(this.config.metrics?.requests!==!1)this.byEndpoint[n.endpoint]=(this.byEndpoint[n.endpoint]||0)+1,this.byMethod[n.method]=(this.byMethod[n.method]||0)+1,this.byStatus[String(n.status)]=(this.byStatus[String(n.status)]||0)+1;if(this.config.metrics?.errors!==!1&&n.isError){if(this.errorCount++,n.errorType)this.byErrorType[n.errorType]=(this.byErrorType[n.errorType]||0)+1}}recordRateLimitBlock(){if(!this.config?.enabled||this.config.metrics?.rateLimits===!1)return;this.rateLimitBlocks++}collect(){if(!this.config?.enabled)return null;let r=(Date.now()-this.lastCollectTime)/1000/60,t=r>0?Math.round(this.requestCount/r):0,o=r>0?Math.round(this.rateLimitBlocks/r):0,c=[...this.responseTimes].sort((i,s)=>i-s),a=c.length;return{requests:{total:this.requestCount,perMinute:t,byEndpoint:{...this.byEndpoint},byMethod:{...this.byMethod},byStatus:{...this.byStatus}},responseTime:{avg:a>0?Math.round(c.reduce((i,s)=>i+s,0)/a*100)/100:0,min:a>0?c[0]??0:0,max:a>0?c[a-1]??0:0,p50:a>0?c[Math.floor(a*0.5)]??0:0,p95:a>0?c[Math.floor(a*0.95)]??0:0,p99:a>0?c[Math.floor(a*0.99)]??0:0},errors:{total:this.errorCount,rate:this.requestCount>0?Math.round(this.errorCount/this.requestCount*100*100)/100:0,byType:{...this.byErrorType}},rateLimits:{blocked:this.rateLimitBlocks,blockedPerMinute:o}}}reset(){this.requestCount=0,this.responseTimes=[],this.errorCount=0,this.rateLimitBlocks=0,this.byEndpoint={},this.byMethod={},this.byStatus={},this.byErrorType={},this.lastCollectTime=Date.now()}getRequestsPerMinute(){let n=(Date.now()-this.lastCollectTime)/1000/60;return n>0?Math.round(this.requestCount/n):0}getErrorRate(){return this.requestCount>0?this.errorCount/this.requestCount*100:0}getRateLimitBlocksPerMinute(){let n=(Date.now()-this.lastCollectTime)/1000/60;return n>0?Math.round(this.rateLimitBlocks/n):0}getAvgResponseTime(){if(this.responseTimes.length===0)return 0;return this.responseTimes.reduce((n,r)=>n+r,0)/this.responseTimes.length}}import*as yb from"fs";import*as oo from"os";class Al{config;lastCpuInfo=null;constructor(n){this.config=n}async collect(){if(!this.config?.enabled)return null;let n={cpu:{usage:0,cores:0},memory:{total:0,used:0,free:0,usagePercent:0,heapUsed:0,heapTotal:0},disk:{total:0,used:0,free:0,usagePercent:0},network:{bytesIn:0,bytesOut:0},process:{uptime:0,pid:0,eventLoopLag:0}};if(this.config.metrics?.cpu!==!1)n.cpu=this.collectCpu();if(this.config.metrics?.memory!==!1)n.memory=this.collectMemory();if(this.config.metrics?.disk!==!1)n.disk=await this.collectDisk();if(this.config.metrics?.network)n.network=this.collectNetwork();if(this.config.metrics?.process!==!1)n.process=await this.collectProcess();return n}collectCpu(){let n=oo.cpus(),r=n.length,t=0,o=0;for(let a of n)t+=a.times.idle,o+=a.times.user+a.times.nice+a.times.sys+a.times.idle+a.times.irq;let c=0;if(this.lastCpuInfo){let a=t-this.lastCpuInfo.idle,e=o-this.lastCpuInfo.total;c=e>0?Math.round((1-a/e)*100*100)/100:0}return this.lastCpuInfo={idle:t,total:o},{usage:c,cores:r}}collectMemory(){let n=oo.totalmem(),r=oo.freemem(),t=n-r,o=Math.round(t/n*100*100)/100,c=process.memoryUsage();return{total:n,used:t,free:r,usagePercent:o,heapUsed:c.heapUsed,heapTotal:c.heapTotal}}async collectDisk(){try{let n=yb.statfsSync("/"),r=n.blocks*n.bsize,t=n.bfree*n.bsize,o=r-t,c=Math.round(o/r*100*100)/100;return{total:r,used:o,free:t,usagePercent:c}}catch{return{total:0,used:0,free:0,usagePercent:0}}}collectNetwork(){let n=oo.networkInterfaces(),r=0,t=0;for(let o in n){let c=n[o];if(c){for(let a of c)if(!a.internal)r+=0,t+=0}}return{bytesIn:r,bytesOut:t}}async collectProcess(){let n=process.uptime(),r=process.pid,t=Date.now(),o=await new Promise((c)=>{setImmediate(()=>{c(Date.now()-t)})});return{uptime:n,pid:r,eventLoopLag:o}}}var nu=()=>{};import*as tu from"os";import{randomUUID as ru}from"crypto";class We{store;memoryInterval=null;cpuInterval=null;lastCpuInfo=null;isRunning=!1;constructor(n){let r={...n5,...n};this.store={requests:[],configs:{logMemory:r.logMemory,logCpu:r.logCpu,logDapr:r.logDapr,logWebSocket:r.logWebSocket,cpuLogInterval:r.cpuLogInterval,memoryLogInterval:r.memoryLogInterval},logs:{memory:[],cpu:[],dapr:[],ws:[]},logLimits:{memory:r.memoryLogLimit,cpu:r.cpuLogLimit,dapr:r.daprLogLimit,ws:r.wsLogLimit,request:r.requestLogLimit},worker:{pid:process.pid,workerId:null,memory:null,cpu:null,updatedAt:Date.now()},allWorkers:[],daprEvents:[],wsEvents:[]}}start(){if(this.isRunning)return;if(this.isRunning=!0,this.store.configs.logMemory)this.startMemoryCollector();if(this.store.configs.logCpu)this.startCpuCollector()}stop(){if(!this.isRunning)return;if(this.isRunning=!1,this.memoryInterval)clearInterval(this.memoryInterval),this.memoryInterval=null;if(this.cpuInterval)clearInterval(this.cpuInterval),this.cpuInterval=null}startMemoryCollector(){if(this.memoryInterval)clearInterval(this.memoryInterval);let n=()=>{if(!this.store.configs.logMemory)return;let r=process.memoryUsage(),t={timestamp:Date.now(),rss:r.rss,heapUsed:r.heapUsed,heapTotal:r.heapTotal};if(this.store.logs.memory.push(t),this.store.logs.memory.length>this.store.logLimits.memory*2)this.store.logs.memory=this.store.logs.memory.slice(-this.store.logLimits.memory);this.store.worker.memory=t,this.store.worker.updatedAt=Date.now()};n(),this.memoryInterval=setInterval(n,this.store.configs.memoryLogInterval)}startCpuCollector(){if(this.cpuInterval)clearInterval(this.cpuInterval);let n=()=>{if(!this.store.configs.logCpu)return;let r=tu.cpus(),t=0,o=0,c=0,a=0;for(let l of r)t+=l.times.user,o+=l.times.sys,c+=l.times.idle,a+=l.times.user+l.times.nice+l.times.sys+l.times.idle+l.times.irq;let e=0,i=0;if(this.lastCpuInfo){let l=a-this.lastCpuInfo.total,d=c-this.lastCpuInfo.idle;if(l>0){let b=l-d;e=Math.round((t-0)/(b||1)*100*100)/100,i=Math.round((o-0)/(b||1)*100*100)/100;let u=Math.round((1-d/l)*100*100)/100;e=Math.round(u*0.7*100)/100,i=Math.round(u*0.3*100)/100}}this.lastCpuInfo={idle:c,total:a};let s={timestamp:Date.now(),user:e,system:i};if(this.store.logs.cpu.push(s),this.store.logs.cpu.length>this.store.logLimits.cpu*2)this.store.logs.cpu=this.store.logs.cpu.slice(-this.store.logLimits.cpu);this.store.worker.cpu=s,this.store.worker.updatedAt=Date.now()};n(),this.cpuInterval=setInterval(n,this.store.configs.cpuLogInterval)}recordRequest(n){if(this.store.requests.push(n),this.store.requests.length>this.store.logLimits.request*2)this.store.requests=this.store.requests.slice(-this.store.logLimits.request)}recordDaprEvent(n,r){if(!this.store.configs.logDapr)return;let t={id:ru(),type:n,timestamp:Date.now(),...r};if(this.store.logs.dapr.push(t),this.store.daprEvents.push(t),this.store.logs.dapr.length>this.store.logLimits.dapr*2)this.store.logs.dapr=this.store.logs.dapr.slice(-this.store.logLimits.dapr);if(this.store.daprEvents.length>this.store.logLimits.dapr*2)this.store.daprEvents=this.store.daprEvents.slice(-this.store.logLimits.dapr)}recordWsEvent(n,r){if(!this.store.configs.logWebSocket)return;let t={id:ru(),type:n,timestamp:Date.now(),...r};if(this.store.logs.ws.push(t),this.store.wsEvents.push(t),this.store.logs.ws.length>this.store.logLimits.ws*2)this.store.logs.ws=this.store.logs.ws.slice(-this.store.logLimits.ws);if(this.store.wsEvents.length>this.store.logLimits.ws*2)this.store.wsEvents=this.store.wsEvents.slice(-this.store.logLimits.ws)}getSnapshot(){return{memory:this.store.logs.memory.slice(-this.store.logLimits.memory),cpu:this.store.logs.cpu.slice(-this.store.logLimits.cpu),requests:this.store.requests.slice(-this.store.logLimits.request),dapr:this.store.logs.dapr.slice(-this.store.logLimits.dapr),ws:this.store.logs.ws.slice(-this.store.logLimits.ws),workers:this.store.allWorkers.length?this.store.allWorkers:[this.store.worker],logLimits:{...this.store.logLimits},configs:{...this.store.configs}}}getUpdatesSince(n){let r=this.store.logs.memory.filter((i)=>i.timestamp>n.memory),t=this.store.logs.cpu.filter((i)=>i.timestamp>n.cpu),o=this.store.requests.filter((i)=>i.timestamp>n.request),c=this.store.logs.dapr.filter((i)=>i.timestamp>n.dapr),a=this.store.logs.ws.filter((i)=>i.timestamp>n.ws);if(!(r.length>0||t.length>0||o.length>0||c.length>0||a.length>0))return null;return{memory:r,cpu:t,requests:o,dapr:c,ws:a,timestamp:Date.now()}}getLogs(){return{memory:this.store.logs.memory,cpu:this.store.logs.cpu,requests:this.store.requests,dapr:this.store.logs.dapr,ws:this.store.logs.ws,daprEvents:this.store.daprEvents,wsEvents:this.store.wsEvents,configs:{logMemory:this.store.configs.logMemory,logCpu:this.store.configs.logCpu,logDapr:this.store.configs.logDapr,logWebSocket:this.store.configs.logWebSocket},limits:{...this.store.logLimits}}}getSettings(){return{configs:{...this.store.configs},logLimits:{...this.store.logLimits}}}changeSettings(n){if(n.logMemory!==void 0)this.store.configs.logMemory=n.logMemory;if(n.logCpu!==void 0)this.store.configs.logCpu=n.logCpu;if(n.logDapr!==void 0)this.store.configs.logDapr=n.logDapr;if(n.logWebSocket!==void 0)this.store.configs.logWebSocket=n.logWebSocket;if(n.cpuLogInterval!==void 0){if(this.store.configs.cpuLogInterval=n.cpuLogInterval,this.isRunning&&this.store.configs.logCpu)this.startCpuCollector()}if(n.memoryLogInterval!==void 0){if(this.store.configs.memoryLogInterval=n.memoryLogInterval,this.isRunning&&this.store.configs.logMemory)this.startMemoryCollector()}if(n.memoryLogLimit!==void 0)this.store.logLimits.memory=n.memoryLogLimit;if(n.cpuLogLimit!==void 0)this.store.logLimits.cpu=n.cpuLogLimit;if(n.daprLogLimit!==void 0)this.store.logLimits.dapr=n.daprLogLimit;if(n.wsLogLimit!==void 0)this.store.logLimits.ws=n.wsLogLimit;if(n.requestLogLimit!==void 0)this.store.logLimits.request=n.requestLogLimit;return{message:"Settings updated successfully",configs:{...this.store.configs},logLimits:{...this.store.logLimits}}}getStore(){return this.store}isEnabled(){return this.isRunning}}var n5;var ou=f(()=>{n5={enabled:!0,logMemory:!0,logCpu:!0,logDapr:!0,logWebSocket:!0,memoryLogInterval:1000,cpuLogInterval:1000,memoryLogLimit:100,cpuLogLimit:100,daprLogLimit:100,wsLogLimit:100,requestLogLimit:100,streamInterval:150}});class Sl{redis;logger;config;appId;flushToDb;systemCollector;applicationCollector;alertService;collectInterval=null;flushInterval=null;pendingMetrics=[];isRunning=!1;constructor(n){this.redis=n.redis,this.logger=n.logger,this.config=this.mergeConfig(n.config),this.appId=n.appId,this.flushToDb=n.flushToDb,this.systemCollector=new Al(this.config.system),this.applicationCollector=new Rl(this.config.application),this.alertService=new Be({logger:n.logger,gmail:n.gmail,config:this.config,appId:n.appId})}mergeConfig(n){return{enabled:n.enabled??An.enabled,system:{enabled:n.system?.enabled??An.system.enabled,collectInterval:n.system?.collectInterval??An.system.collectInterval,metrics:{cpu:n.system?.metrics?.cpu??An.system.metrics.cpu,memory:n.system?.metrics?.memory??An.system.metrics.memory,disk:n.system?.metrics?.disk??An.system.metrics.disk,network:n.system?.metrics?.network??An.system.metrics.network,process:n.system?.metrics?.process??An.system.metrics.process}},application:{enabled:n.application?.enabled??An.application.enabled,metrics:{requests:n.application?.metrics?.requests??An.application.metrics.requests,responseTime:n.application?.metrics?.responseTime??An.application.metrics.responseTime,errors:n.application?.metrics?.errors??An.application.metrics.errors,rateLimits:n.application?.metrics?.rateLimits??An.application.metrics.rateLimits}},database:{enabled:n.database?.enabled??An.database.enabled,metrics:{connections:n.database?.metrics?.connections??An.database.metrics.connections,queryTime:n.database?.metrics?.queryTime??An.database.metrics.queryTime,slowQueryThreshold:n.database?.metrics?.slowQueryThreshold??An.database.metrics.slowQueryThreshold}},redis:{enabled:n.redis?.enabled??An.redis.enabled},persistence:{enabled:n.persistence?.enabled??An.persistence.enabled,flushInterval:n.persistence?.flushInterval??An.persistence.flushInterval,retentionDays:n.persistence?.retentionDays??An.persistence.retentionDays},alerts:{enabled:n.alerts?.enabled??An.alerts.enabled,email:{enabled:n.alerts?.email?.enabled??An.alerts.email.enabled,recipients:n.alerts?.email?.recipients??An.alerts.email.recipients},thresholds:{cpuPercent:n.alerts?.thresholds?.cpuPercent??An.alerts.thresholds.cpuPercent,memoryPercent:n.alerts?.thresholds?.memoryPercent??An.alerts.thresholds.memoryPercent,diskPercent:n.alerts?.thresholds?.diskPercent??An.alerts.thresholds.diskPercent,errorRatePercent:n.alerts?.thresholds?.errorRatePercent??An.alerts.thresholds.errorRatePercent,responseTimeMs:n.alerts?.thresholds?.responseTimeMs??An.alerts.thresholds.responseTimeMs,rateLimitBlocksPerMinute:n.alerts?.thresholds?.rateLimitBlocksPerMinute??An.alerts.thresholds.rateLimitBlocksPerMinute},cooldown:n.alerts?.cooldown??An.alerts.cooldown}}}parseTimeToMs(n){let r=n.match(/^(\d+)(ms|s|m|h|d)$/);if(!r||!r[1]||!r[2])return 1e4;let t=parseInt(r[1],10);switch(r[2]){case"ms":return t;case"s":return t*1000;case"m":return t*60*1000;case"h":return t*60*60*1000;case"d":return t*24*60*60*1000;default:return 1e4}}start(){if(!this.config.enabled||this.isRunning)return;this.isRunning=!0,this.logger.info("[Monitoring] Starting monitoring service");let n=this.parseTimeToMs(this.config.system.collectInterval);if(this.collectInterval=setInterval(()=>{this.collect()},n),this.config.persistence.enabled&&this.flushToDb){let r=this.parseTimeToMs(this.config.persistence.flushInterval);this.flushInterval=setInterval(()=>{this.flush()},r)}this.collect()}stop(){if(!this.isRunning)return;if(this.isRunning=!1,this.logger.info("[Monitoring] Stopping monitoring service"),this.collectInterval)clearInterval(this.collectInterval),this.collectInterval=null;if(this.flushInterval)clearInterval(this.flushInterval),this.flushInterval=null;this.flush()}async collect(){let n=Date.now(),r={timestamp:n};if(this.config.system.enabled){let t=await this.systemCollector.collect();if(t)r.system=t,this.addMetricPoints("system",t,n)}if(this.config.application.enabled){let t=this.applicationCollector.collect();if(t)r.application=t,this.addMetricPoints("application",t,n)}if(await this.storeSnapshot(r),this.config.alerts.enabled)await this.alertService.checkAndAlert(r)}addMetricPoints(n,r,t){let o=(c,a="")=>{for(let e in c){let i=c[e],s=a?`${a}.${e}`:e;if(typeof i==="number")this.pendingMetrics.push({timestamp:t,metricType:n,metricName:s,value:i});else if(typeof i==="object"&&i!==null&&!Array.isArray(i))o(i,s)}};o(r)}async storeSnapshot(n){let r=`monitoring:${this.appId}:latest`;await this.redis.create(r,n,3600);let t=`monitoring:${this.appId}:history`,o=await this.redis.read(t),c=o.success&&o.data?o.data:[];c.push(n);let a=Date.now()-3600000,e=c.filter((i)=>i.timestamp>a);await this.redis.create(t,e,3600)}async flush(){if(this.pendingMetrics.length===0)return;if(!this.flushToDb)return;let n=[...this.pendingMetrics];this.pendingMetrics=[];try{await this.flushToDb(n),this.logger.debug(`[Monitoring] Flushed ${n.length} metrics to database`)}catch(r){this.logger.error(`[Monitoring] Failed to flush metrics: ${r}`),this.pendingMetrics=[...n,...this.pendingMetrics]}}recordRequest(n){if(!this.config.enabled||!this.config.application.enabled)return;this.applicationCollector.recordRequest(n)}recordRateLimitBlock(){if(!this.config.enabled||!this.config.application.enabled)return;this.applicationCollector.recordRateLimitBlock()}async getLatestSnapshot(){let n=`monitoring:${this.appId}:latest`,r=await this.redis.read(n);return r.success?r.data:null}async getHistory(n=60){let r=`monitoring:${this.appId}:history`,t=await this.redis.read(r);if(!t.success||!t.data)return[];let o=Date.now()-n*60000;return t.data.filter((c)=>c.timestamp>o)}getActiveAlerts(){return this.alertService.getActiveAlerts()}acknowledgeAlert(n){return this.alertService.acknowledgeAlert(n)}isEnabled(){return this.config.enabled}getConfig(){return this.config}}var An;var cu=f(()=>{nu();ou();An={enabled:!1,system:{enabled:!0,collectInterval:"10s",metrics:{cpu:!0,memory:!0,disk:!0,network:!1,process:!0}},application:{enabled:!0,metrics:{requests:!0,responseTime:!0,errors:!0,rateLimits:!0}},database:{enabled:!1,metrics:{connections:!0,queryTime:!0,slowQueryThreshold:"100ms"}},redis:{enabled:!1},persistence:{enabled:!0,flushInterval:"1m",retentionDays:30},alerts:{enabled:!1,email:{enabled:!1,recipients:[]},thresholds:{cpuPercent:80,memoryPercent:85,diskPercent:90,errorRatePercent:5,responseTimeMs:1000,rateLimitBlocksPerMinute:100},cooldown:"5m"}}});var au=()=>{};import{and as xM,eq as LM}from"drizzle-orm";var eu=f(()=>{au()});class El{redis;logger;config;constructor(n){this.redis=n.redis,this.logger=n.logger,this.config=this.mergeConfig(n.config)}mergeConfig(n){return{enabled:n.enabled??er.enabled,strategy:n.strategy??er.strategy,keyPrefix:n.keyPrefix??er.keyPrefix,authRoutes:{window:n.authRoutes?.window??er.authRoutes.window,max:n.authRoutes?.max??er.authRoutes.max,login:{window:n.authRoutes?.login?.window??Ye.window,max:n.authRoutes?.login?.max??Ye.max,blockDuration:n.authRoutes?.login?.blockDuration??Ye.blockDuration},register:{window:n.authRoutes?.register?.window??Je.window,max:n.authRoutes?.register?.max??Je.max,blockDuration:n.authRoutes?.register?.blockDuration??Je.blockDuration},passwordReset:{window:n.authRoutes?.passwordReset?.window??Xe.window,max:n.authRoutes?.passwordReset?.max??Xe.max,blockDuration:n.authRoutes?.passwordReset?.blockDuration??Xe.blockDuration},magicLink:{window:n.authRoutes?.magicLink?.window??xe.window,max:n.authRoutes?.magicLink?.max??xe.max,blockDuration:n.authRoutes?.magicLink?.blockDuration??xe.blockDuration}},publicRoutes:{window:n.publicRoutes?.window??er.publicRoutes.window,max:n.publicRoutes?.max??er.publicRoutes.max},privateRoutes:{window:n.privateRoutes?.window??er.privateRoutes.window,max:n.privateRoutes?.max??er.privateRoutes.max},byIp:n.byIp??er.byIp,byUserId:n.byUserId??er.byUserId,byEndpoint:n.byEndpoint??er.byEndpoint,skipSuccessfulRequests:n.skipSuccessfulRequests??er.skipSuccessfulRequests,headers:{remaining:n.headers?.remaining??er.headers.remaining,reset:n.headers?.reset??er.headers.reset,limit:n.headers?.limit??er.headers.limit},whitelist:n.whitelist??er.whitelist,blacklist:n.blacklist??er.blacklist}}parseTimeToMs(n){let r=n.match(/^(\d+)(ms|s|m|h|d)$/);if(!r||!r[1]||!r[2])return 60000;let t=parseInt(r[1],10);switch(r[2]){case"ms":return t;case"s":return t*1000;case"m":return t*60*1000;case"h":return t*60*60*1000;case"d":return t*24*60*60*1000;default:return 60000}}buildKey(n){let r=[this.config.keyPrefix,n.category];if(n.authType&&n.authType!=="other")r.push(n.authType);if(this.config.byIp&&n.ip)r.push(`ip:${n.ip}`);if(this.config.byUserId&&n.userId)r.push(`user:${n.userId}`);if(this.config.byEndpoint&&n.endpoint)r.push(`ep:${n.endpoint.replace(/\//g,"_")}`);return r.join(":")}getLimits(n,r){if(n==="auth"){if(r&&r!=="other"){let t=this.config.authRoutes[r];if(t)return t}return{window:this.config.authRoutes.window,max:this.config.authRoutes.max}}if(n==="public")return this.config.publicRoutes;return this.config.privateRoutes}isWhitelisted(n){return this.config.whitelist.some((r)=>{if(r.includes("*"))return new RegExp(`^${r.replace(/\*/g,".*")}$`).test(n);return r===n})}isBlacklisted(n){return this.config.blacklist.some((r)=>{if(r.includes("*"))return new RegExp(`^${r.replace(/\*/g,".*")}$`).test(n);return r===n})}async readRedis(n){let r=await this.redis.read(n);if(r.success)return r.data;return null}async check(n){if(!this.config.enabled)return{allowed:!0,remaining:-1,resetAt:0,limit:-1};if(this.isWhitelisted(n.ip))return{allowed:!0,remaining:-1,resetAt:0,limit:-1};if(this.isBlacklisted(n.ip))return this.logger.warn(`[RateLimit] Blacklisted IP: ${n.ip}`),{allowed:!1,remaining:0,resetAt:Date.now()+86400000,limit:0,retryAfter:86400};let r=this.buildKey(n),t=this.getLimits(n.category,n.authType),o=this.parseTimeToMs(t.window),c=`${r}:blocked`,a=await this.readRedis(c);if(a&&a.until>Date.now()){let e=Math.ceil((a.until-Date.now())/1000);return this.logger.warn(`[RateLimit] Blocked: ${r}, retry after ${e}s`),{allowed:!1,remaining:0,resetAt:a.until,limit:t.max,retryAfter:e}}if(this.config.strategy==="sliding-window")return this.slidingWindowCheck(r,t.max,o,t.blockDuration);if(this.config.strategy==="fixed-window")return this.fixedWindowCheck(r,t.max,o,t.blockDuration);return this.tokenBucketCheck(r,t.max,o)}async slidingWindowCheck(n,r,t,o){let c=Date.now(),a=c-t,e=`${n}:sw`,s=(await this.readRedis(e))?.timestamps||[];s=s.filter((u)=>u>a);let l=s.length,d=s[0],b=d!==void 0?d+t:c+t;if(l>=r){if(o){let u=this.parseTimeToMs(o);await this.redis.create(`${n}:blocked`,{until:c+u},Math.ceil(u/1000))}return{allowed:!1,remaining:0,resetAt:b,limit:r,retryAfter:Math.ceil((b-c)/1000)}}return s.push(c),await this.redis.create(e,{timestamps:s},Math.ceil(t/1000)+1),{allowed:!0,remaining:r-s.length,resetAt:b,limit:r}}async fixedWindowCheck(n,r,t,o){let c=Date.now(),a=Math.floor(c/t),e=`${n}:fw:${a}`,i=(a+1)*t,l=(await this.readRedis(e))?.count||0;if(l>=r){if(o){let d=this.parseTimeToMs(o);await this.redis.create(`${n}:blocked`,{until:c+d},Math.ceil(d/1000))}return{allowed:!1,remaining:0,resetAt:i,limit:r,retryAfter:Math.ceil((i-c)/1000)}}return await this.redis.create(e,{count:l+1},Math.ceil(t/1000)+1),{allowed:!0,remaining:r-(l+1),resetAt:i,limit:r}}async tokenBucketCheck(n,r,t){let o=Date.now(),c=r/t,a=`${n}:tb`,e=await this.readRedis(a),i=e?.tokens??r,s=e?.lastRefill??o,d=(o-s)*c;if(i=Math.min(r,i+d),i<1){let b=Math.ceil((1-i)/c);return{allowed:!1,remaining:0,resetAt:o+b,limit:r,retryAfter:Math.ceil(b/1000)}}return i-=1,await this.redis.create(a,{tokens:i,lastRefill:o},Math.ceil(t/1000)*2),{allowed:!0,remaining:Math.floor(i),resetAt:o+t,limit:r}}async decrement(n){if(!this.config.skipSuccessfulRequests)return;let r=this.buildKey(n);if(this.config.strategy==="sliding-window"){let t=`${r}:sw`,o=await this.readRedis(t);if(o?.timestamps?.length){o.timestamps.pop();let c=this.parseTimeToMs(this.getLimits(n.category,n.authType).window);await this.redis.create(t,o,Math.ceil(c/1000)+1)}}else if(this.config.strategy==="fixed-window"){let t=this.parseTimeToMs(this.getLimits(n.category,n.authType).window),o=Math.floor(Date.now()/t),c=`${r}:fw:${o}`,a=await this.readRedis(c);if(a?.count)await this.redis.create(c,{count:a.count-1},Math.ceil(t/1000)+1)}}getHeaders(n){let r={};return r[this.config.headers.remaining]=String(n.remaining),r[this.config.headers.reset]=String(Math.ceil(n.resetAt/1000)),r[this.config.headers.limit]=String(n.limit),r}isEnabled(){return this.config.enabled}}var Ye,Je,Xe,xe,er;var iu=f(()=>{Ye={window:"15m",max:5,blockDuration:"30m"},Je={window:"1h",max:3,blockDuration:"1h"},Xe={window:"1h",max:3,blockDuration:"1h"},xe={window:"1h",max:5,blockDuration:"1h"},er={enabled:!0,strategy:"sliding-window",keyPrefix:"rl:",authRoutes:{window:"1m",max:10,login:Ye,register:Je,passwordReset:Xe,magicLink:xe},publicRoutes:{window:"1m",max:100},privateRoutes:{window:"1m",max:60},byIp:!0,byUserId:!0,byEndpoint:!1,skipSuccessfulRequests:!1,headers:{remaining:"X-RateLimit-Remaining",reset:"X-RateLimit-Reset",limit:"X-RateLimit-Limit"},whitelist:[],blacklist:[]}});var su=()=>{};import{and as Le,desc as r5,eq as Xr}from"drizzle-orm";class Ml{db;schemaTables;config;logger;constructor(n){this.db=n.db,this.schemaTables=n.schemaTables,this.config=n.config,this.logger=n.logger}getTable(n){return this.schemaTables[n]}getCol(n,r){return n[r]}async getStatus(n,r){let t=this.getTable("verificationFlows"),o=this.getTable("verificationSteps"),c=this.getTable("verifications"),a=this.getTable("verificationRequirements");if(!t||!o||!c||!a)return this.logger.error("[Verification] Required tables not found"),{entity_name:n,entity_id:r,flow:null,current_step:0,total_steps:0,is_completed:!1,is_rejected:!1,verifications:[],pending_verifiers:[]};let i=(await this.db.select().from(t).where(Le(Xr(this.getCol(t,"entity_name"),n),Xr(this.getCol(t,"is_draft"),!1))).limit(1))[0];if(!i)return{entity_name:n,entity_id:r,flow:null,current_step:0,total_steps:0,is_completed:!0,is_rejected:!1,verifications:[],pending_verifiers:[]};let s=await this.db.select().from(a).where(Xr(this.getCol(a,"entity_name"),n)).orderBy(this.getCol(a,"step_order")),l=await this.db.select().from(c).where(Le(Xr(this.getCol(c,"entity_name"),n),Xr(this.getCol(c,"entity_id"),r))).orderBy(r5(this.getCol(c,"created_at"))),d=s.length,b=l.filter((R)=>R.decision==="approved"),u=l.find((R)=>R.decision==="rejected"),$=u?1:b.length+1,k=b.length>=d&&!u,w=!!u,_=s.filter((R)=>R.step_order>=$);return{entity_name:n,entity_id:r,flow:i,current_step:$,total_steps:d,is_completed:k,is_rejected:w,verifications:l,pending_verifiers:_.map((R)=>({step_order:R.step_order,verifier_type:R.verifier_type,verifier_id:R.verifier_id,verifier_role:R.verifier_role,is_signature_mandatory:R.is_signature_mandatory}))}}async decide(n){let{entity_name:r,entity_id:t,user_id:o,decision:c,reason:a,signature_id:e,diff:i}=n,s=this.getTable("verifications"),l=this.getTable("verificationRequirements"),d=this.getTable("user_roles"),b=this.getTable("roles");if(!s||!l)return{success:!1,message:"Verification tables not configured"};let u=await this.getStatus(r,t);if(u.is_completed)return{success:!1,message:"Verification flow already completed"};if(u.total_steps===0)return{success:!1,message:"No verification flow configured for this entity"};let $=u.pending_verifiers.filter((M)=>M.step_order===u.current_step);if($.length===0)return{success:!1,message:"No pending requirements for current step"};let k=!1,w=null;for(let M of $){if(M.verifier_type==="user"&&M.verifier_id===o){k=!0,w=M;break}if(M.verifier_type==="role"&&M.verifier_role&&d&&b){let A=d,z=b;if((await this.db.select({role_name:z.name}).from(d).innerJoin(b,Xr(A.role_id,z.id)).where(Xr(A.user_id,o))).some((B)=>B.role_name===M.verifier_role)){k=!0,w=M;break}}if(M.verifier_type==="entity_creator"){k=!0,w=M;break}}if(!k||!w)return{success:!1,message:"User is not authorized to verify at this step"};if(w.is_signature_mandatory&&!e)return{success:!1,message:"Signature is required for this verification step"};let R=(await this.db.select().from(l).where(Le(Xr(this.getCol(l,"entity_name"),r),Xr(this.getCol(l,"step_order"),u.current_step))))[0];if(!R)return{success:!1,message:"Requirement not found"};let X={requirement_id:R.id,verifier_id:o,signature_id:e||null,entity_name:r,entity_id:t,step_order:u.current_step,decision:c,reason:a||null,diff:i||null},[x]=await this.db.insert(s).values(X).returning();if(c==="rejected"&&this.config.autoResetOnRejection)this.logger.info(`[Verification] Flow reset due to rejection for ${r}:${t}`);let E=c==="approved"&&u.current_step>=u.total_steps,P=c==="approved"?u.current_step+1:1;return{success:!0,message:c==="approved"?E?"Verification flow completed":`Step ${u.current_step} approved`:"Verification rejected, flow reset",verification:x,flow_completed:E,next_step:E?void 0:P}}async getPending(n){let r=this.getTable("verificationRequirements"),t=this.getTable("verificationFlows"),o=this.getTable("user_roles"),c=this.getTable("roles");if(!r||!t)return[];let a=o,e=c,s=(o&&c?await this.db.select({role_name:e.name}).from(o).innerJoin(c,Xr(a.role_id,e.id)).where(Xr(a.user_id,n)):[]).map((b)=>b.role_name),l=await this.db.select().from(r),d=[];for(let b of l){if(!(b.verifier_type==="user"&&b.verifier_id===n||b.verifier_type==="role"&&s.includes(b.verifier_role)||b.verifier_type==="entity_creator"))continue;let k=(await this.db.select().from(t).where(Le(Xr(this.getCol(t,"entity_name"),b.entity_name),Xr(this.getCol(t,"is_draft"),!1))).limit(1))[0];if(!k)continue;d.push({entity_name:b.entity_name,entity_id:b.entity_id,flow_name:k.name,step_order:b.step_order,step_name:void 0,is_signature_mandatory:b.is_signature_mandatory,created_at:b.created_at,diff:void 0})}return d}}var Dl=f(()=>{su()});var Hl=f(()=>{Xb();ml();$l();Ib();Zb();cu();eu();iu();Dl()});import{access as oD,mkdir as e5}from"fs/promises";import{dirname as i5,resolve as du}from"path";var fa,Bl,Mn=(n)=>{if(!n||typeof n!=="string")throw On("INVALID_PATH","Path must be a non-empty string",n,"resolvePath");return du(n)},xt=(n)=>{let r=Mn(n);return i5(r)},tt=async(n)=>{let r=du(n);try{await e5(r,{recursive:!0})}catch(t){if(t.code!=="EEXIST")throw On("DIRECTORY_CREATE_FAILED",`Failed to create directory: ${r}`,r,"ensureDirectory")}},Wl=(n)=>{let r=n,t=0;while(r>=1024&&t<Bl.length-1)r/=1024,t++;return`${r.toFixed(2)} ${Bl[t]}`},bu=(n,r)=>{return n.toLowerCase().endsWith(r.toLowerCase())},Yl=(n,r)=>{let t=r.startsWith(".")?r:`.${r}`;if(bu(n,t))return n;return`${n}${t}`},On=(n,r,t,o)=>{return{code:n,message:r,path:t,operation:o||"unknown"}},Ve=(n)=>{try{return JSON.stringify(n,null,2)}catch{return"{}"}},Jl=async(n,r,t=fa.maxConcurrency)=>{let o=[];for(let c=0;c<n.length;c+=t){let a=n.slice(c,c+t),e=[];for(let s of a)e.push(r(s));let i=await Promise.allSettled(e);o.push(...i)}return o},Ce=(n,r={})=>{let t=[],o=[],c=r.strict??!0;if(n.defaultEncoding!==void 0){if(!["utf-8","utf8","ascii","base64","hex"].includes(n.defaultEncoding))t.push(`Invalid defaultEncoding: ${n.defaultEncoding}`)}if(n.maxConcurrency!==void 0){if(!Number.isInteger(n.maxConcurrency)||n.maxConcurrency<1)t.push("maxConcurrency must be a positive integer");if(n.maxConcurrency>50)o.push("maxConcurrency > 50 may cause performance issues")}if(n.defaultCreateDir!==void 0&&typeof n.defaultCreateDir!=="boolean")t.push("defaultCreateDir must be a boolean");if(n.defaultRecursive!==void 0&&typeof n.defaultRecursive!=="boolean")t.push("defaultRecursive must be a boolean");if(c&&!r.allowUnknownKeys){let a=["defaultEncoding","defaultCreateDir","defaultRecursive","maxConcurrency"],e=Object.keys(n);for(let i of e)if(!a.includes(i))t.push(`Unknown configuration key: ${i}`)}return{isValid:t.length===0,errors:t,warnings:o}},uu=(n,r=fa)=>{let t=Ce(n);if(!t.isValid)throw On("CONFIG_VALIDATION_FAILED",`Configuration validation failed: ${t.errors.join(", ")}`,void 0,"mergeConfig");return{...r,...n}},gu=(n)=>{let r=(a)=>({read:Boolean(a&4),write:Boolean(a&2),execute:Boolean(a&1)}),t=n>>6&7,o=n>>3&7,c=n&7;return{owner:r(t),group:r(o),others:r(c)}},_u=(n)=>{return Number.isInteger(n)&&n>=0&&n<=511};var dc=f(()=>{fa={defaultEncoding:"utf-8",defaultCreateDir:!0,defaultRecursive:!0,maxConcurrency:5},Bl=["B","KB","MB","GB","TB"]});import{copyFile as Xl,rename as xl,unlink as s5}from"fs/promises";import{basename as mu,dirname as wu,extname as l5,join as f5}from"path";var Qe,d5=(n,r=".tmp")=>{let t=Mn(n),o=Date.now(),c=Math.random().toString(36).substring(2,8);return`${t}${r}.${o}.${c}`},hu=(n,r,t=!0)=>{let o=Mn(n),c=r?Mn(r):wu(o),a=mu(o),e=l5(a),i=mu(a,e),s=t?`.${new Date().toISOString().replace(/[:.]/g,"-")}`:"",l=`${i}.backup${s}${e}`;return f5(c,l)},da=async({path:n,data:r,tempSuffix:t=Qe.tempSuffix,backup:o=Qe.backup,sync:c=Qe.sync})=>{let a=Mn(n),e=d5(a,t),i;try{if(await tt(xt(a)),o){if(await Bun.file(a).exists())i=hu(a),await Xl(a,i)}let s=await Bun.write(e,r);return await xl(e,a),{success:!0,bytesWritten:s,tempPath:e,backupPath:i}}catch(s){try{await s5(e)}catch{}throw On("ATOMIC_WRITE_FAILED",`Atomic write failed: ${s}`,a,"atomicWrite")}},$u=async(n,r,t={})=>{let o=JSON.stringify(r,null,2);return da({path:n,data:o,...t})},Ll=async({sourcePath:n,backupDir:r,keepOriginal:t=!0,timestamp:o=Qe.timestamp})=>{let c=Mn(n);if(!await Bun.file(c).exists())throw On("SOURCE_NOT_FOUND",`Source file not found: ${n}`,c,"createBackup");let e=hu(c,r,o);if(await tt(wu(e)),t)await Xl(c,e);else await xl(c,e);return e},Vl=async(n,r,t=!1)=>{let o=Mn(n),c=Mn(r);if(!await Bun.file(o).exists())throw On("BACKUP_NOT_FOUND",`Backup file not found: ${n}`,o,"restoreFromBackup");try{if(await tt(xt(c)),t)await xl(o,c);else await Xl(o,c);return!0}catch(e){return console.error(`Error restoring from backup ${n}:`,e),!1}},ku=async(n,r,t={})=>{let o=Mn(n),c=Bun.file(o),a;try{if(await c.exists())a=await Ll({sourcePath:o,keepOriginal:!0,timestamp:!0});let e=await c.exists()?await c.text():"",i=await r(e),s=await da({path:o,data:i,backup:!1,...t});return{success:s.success,bytesWritten:s.bytesWritten,tempPath:s.tempPath,backupPath:a}}catch(e){if(a)try{await Vl(a,o,!1)}catch(i){console.error("Rollback failed:",i)}throw e}},Ru=async(n)=>{let r=[],t=[];for(let o of n)try{let c=await da(o);r.push(c)}catch(c){t.push({operation:o,error:c})}return{successful:r,failed:t}};var Au=f(()=>{dc();Qe={tempSuffix:".tmp",backup:!1,sync:!0,timestamp:!0}});import{chmod as b5,stat as u5}from"fs/promises";var g5,co=async(n,r)=>{let t=Mn(n);if(!_u(r))throw On("INVALID_PERMISSION_MODE",`Invalid permission mode: ${r.toString(8)}`,t,"setFilePermissions");try{return await b5(t,r),!0}catch(o){return console.error(`Error setting permissions for ${n}:`,o),!1}},Xo=async(n)=>{let r=Mn(n);try{let o=(await u5(r)).mode&511,c=gu(o);return{path:r,mode:o,owner:c.owner,group:c.group,others:c.others}}catch(t){throw On("PERMISSION_READ_FAILED",`Failed to read permissions: ${t}`,r,"getFilePermissions")}},Su=async(n,r)=>{try{return((await Xo(n)).mode&r)===r}catch{return!1}},Eu=async(n)=>{let t=(await Xo(n)).mode|256;return co(n,t)},Mu=async(n)=>{let t=(await Xo(n)).mode|128;return co(n,t)},Du=async(n)=>{let t=(await Xo(n)).mode|64;return co(n,t)},Hu=async(n)=>{let t=(await Xo(n)).mode&-147;return co(n,t)},zu=async(n,r)=>{let t=g5[r];return co(n,t)};var Uu=f(()=>{dc();g5={OWNER_READ_WRITE:384,OWNER_ALL:448,GROUP_READ:416,GROUP_READ_WRITE:432,ALL_READ:420,ALL_READ_WRITE:438,ALL_READ_EXECUTE:493,ALL_FULL:511,READ_ONLY:292,EXECUTABLE:493}});var _5,Pe=async(n,r={})=>{let t=Mn(n),o={..._5,...r};await tt(xt(t));let a=Bun.file(t).writer({highWaterMark:o.highWaterMark}),e=!1;return{write:(s)=>{if(e)throw On("WRITER_CLOSED","Cannot write to closed writer",t,"streamWrite");try{let l=a.write(s);if(o.autoFlush)a.flush();return l}catch(l){throw On("WRITE_FAILED",`Failed to write chunk: ${l}`,t,"streamWrite")}},flush:()=>{if(e)return 0;try{return a.flush()}catch(s){throw On("FLUSH_FAILED",`Failed to flush writer: ${s}`,t,"streamFlush")}},end:async(s)=>{if(e)return 0;try{let l=await a.end(s);return e=!0,l}catch(l){throw e=!0,On("END_FAILED",`Failed to end writer: ${l}`,t,"streamEnd")}},ref:()=>{if(!e)a.ref()},unref:()=>{if(!e)a.unref()}}},Cl=async(n,r,t={})=>{let o=await Pe(n,t),c=0;try{for(let a of r){let e=o.write(a);c+=e}return await o.flush(),await o.end(),c}catch(a){try{await o.end(a)}catch{}throw a}},Bu=async(n,r,t={})=>{let o=Mn(n),c=Bun.file(o),a=await c.exists()?await c.arrayBuffer():new ArrayBuffer(0),e=[];if(a.byteLength>0)e.push(a);return e.push(...r),Cl(o,e,t)},Wu=async(n,r,t={})=>{let o=Mn(n),c=Bun.file(o);if(!await c.exists())throw On("SOURCE_NOT_FOUND",`Source file not found: ${n}`,o,"copyFileStream");let a=c.stream(),e=await Pe(r,t),i=0;try{let s=a.getReader();while(!0){let{done:l,value:d}=await s.read();if(l)break;let b=e.write(d);i+=b}return await e.flush(),await e.end(),i}catch(s){try{await e.end(s)}catch{}throw s}},Yu=async(n,r)=>{let t=Mn(n),o=Bun.file(t);if(!await o.exists())throw On("FILE_NOT_FOUND",`File not found: ${n}`,t,"readFileStream");let a=o.stream().getReader();try{while(!0){let{done:e,value:i}=await a.read();if(e)break;await r(i)}}finally{a.releaseLock()}};var Ju=f(()=>{dc();_5={highWaterMark:1048576,autoFlush:!0,closeOnEnd:!0}});import{readdir as m5,rm as w5,rmdir as h5,stat as $5}from"fs/promises";import{extname as k5,join as R5}from"path";class ao{static instance;config;constructor(){this.config={...fa}}static getInstance(){if(!ao.instance)ao.instance=new ao;return ao.instance}async createFile({dir:n,name:r,data:t,options:o={}}){let c=Mn(R5(n,r));if(o.createDir!==!1)await tt(xt(c));let a=o.type?new Blob([t],{type:o.type}):t;return await Bun.write(c,a)}async createJsonFile(n,r,t){let o=Yl(r,".json"),c=Ve(t);return this.createFile({dir:n,name:o,data:c,options:{type:"application/json"}})}async createDirectory({path:n}){await tt(n)}async readFile({path:n,format:r="text"}){let t=Mn(n),o=Bun.file(t);if(!await o.exists())throw On("FILE_NOT_FOUND",`File not found: ${n}`,t,"readFile");switch(r){case"text":return await o.text();case"json":return await o.json();case"buffer":return await o.arrayBuffer();case"bytes":return await o.bytes();case"stream":return o.stream();default:return await o.text()}}async readJsonFile(n){return this.readFile({path:n,format:"json"})}async getFileInfo(n){let r=Mn(n),t=Bun.file(r),o=n.split("/").pop()||n,c=null;try{c=await $5(r)}catch{}return{name:o,path:r,size:t.size,type:t.type,exists:await t.exists(),extension:k5(o),createdAt:c?.birthtime,modifiedAt:c?.mtime}}async readDirectory({path:n,recursive:r=!1}){let t=Mn(n);return await m5(t,{recursive:r,encoding:"utf8"})}async getFilesByExtension(n,r){let t=await this.readDirectory({path:n}),o=r.startsWith(".")?r:`.${r}`;return t.filter((c)=>c.endsWith(o))}async updateFile({path:n,data:r,mode:t="overwrite"}){let o=Mn(n);if(t==="append"){let a=await this.readFile({path:n,format:"text"})+r;return await Bun.write(o,a)}return await Bun.write(o,r)}async updateJsonFile(n,r,t=!1){let o=r;if(t)try{let c=await this.readJsonFile(n);if(typeof c==="object"&&c!==null&&!Array.isArray(c)&&typeof r==="object"&&r!==null&&!Array.isArray(r))o={...c,...r}}catch{}return this.updateFile({path:n,data:Ve(o),mode:"overwrite"})}async appendToFile(n,r){return this.updateFile({path:n,data:r,mode:"append"})}async deleteFile(n){try{let r=Mn(n);return await Bun.file(r).delete(),!0}catch(r){return console.error(`Error deleting file ${n}:`,r),!1}}async deleteDirectory({path:n,recursive:r=!1}){try{let t=Mn(n);if(r)await w5(t,{recursive:!0,force:!0});else await h5(t);return!0}catch(t){return console.error(`Error deleting directory ${n}:`,t),!1}}async deleteFiles(n){let r=await Jl(n,async(c)=>{if(!await this.deleteFile(c))throw Error(`Failed to delete: ${c}`);return c}),t=[],o=[];for(let c=0;c<r.length;c++){let a=r[c],e=n[c];if(a?.status==="fulfilled")t.push(e||"");else o.push(e||"")}return{success:t,failed:o}}async exists(n){let r=Mn(n);return await Bun.file(r).exists()}async copyFile(n,r){let t=Mn(n),o=Mn(r),c=Bun.file(t);if(!await c.exists())throw On("SOURCE_NOT_FOUND",`Source file not found: ${n}`,t,"copyFile");return await tt(xt(o)),await Bun.write(o,c)}async moveFile(n,r){try{return await this.copyFile(n,r),await this.deleteFile(n),!0}catch(t){return console.error(`Error moving file from ${n} to ${r}:`,t),!1}}getFormattedFileSize(n){return Wl(n)}getConfig(){return{...this.config}}updateConfig(n){let r=Ce(n);if(r.isValid){let t=uu(n,this.config);Object.assign(this.config,t)}return r}validateConfiguration(n){return Ce(n)}async createStreamWriter(n,r={}){return Pe(n,r)}async writeStream(n,r,t={}){return Cl(n,r,t)}async appendStream(n,r,t={}){return Bu(n,r,t)}async copyFileStream(n,r,t={}){return Wu(n,r,t)}async readFileStream(n,r){return Yu(n,r)}async setPermissions(n,r){return co(n,r)}async setPermissionsAdvanced(n){return co(n.path,n.mode)}async getPermissions(n){return Xo(n)}async checkPermissions(n,r){return Su(n,r)}async makeFileReadable(n){return Eu(n)}async makeFileWritable(n){return Mu(n)}async makeFileExecutable(n){return Du(n)}async makeFileReadOnly(n){return Hu(n)}async setCommonPermission(n,r){return zu(n,r)}async atomicWrite(n){return da(n)}async atomicJsonWrite(n,r,t={}){return $u(n,r,t)}async createFileBackup(n){return Ll(n)}async restoreFileFromBackup(n,r,t=!1){return Vl(n,r,t)}async safeFileUpdate(n,r,t={}){return ku(n,r,t)}async batchAtomicOperations(n){return Ru(n)}}var Ql=f(()=>{Au();Uu();Ju();dc()});var Rt;var Ge=f(()=>{Ql();dc();Ql();Rt=ao.getInstance()});import{Pool as YD}from"pg";var Xu=()=>{};var xu=f(()=>{tl();Ge();Xu();Xt()});function Vu(n,r){let t=(n.get("cookie")?.split(";")||[]).reduce((o,c)=>{let[a,e]=c.trim().split("=");if(a&&e)o[a]=e;return o},{});return{access_token:t[r.access_token]||n.get("authorization")?.split(" ")[1],refresh_token:t[r.refresh_token],session_token:t[r.session_token]}}function Gl(n){if(!n.redis){console.log("Redis not configured, skipping");return}if(n.redis.withDapr){Pl=new Nn({withDapr:!0,stateStoreName:n.redis.stateStoreName});return}let r=n.redis.url?process.env[n.redis.url]:void 0,t=n.redis.host?process.env[n.redis.host]:void 0,o=n.redis.port?parseInt(process.env[n.redis.port]||"",10):void 0;Pl=new Nn({url:r,host:t,port:Number.isNaN(o)?void 0:o})}function qe(){return Pl}function ot(n){if(typeof n==="number")return n;if(!n||n.trim()==="")throw Error("Time string cannot be empty");let r=n.trim().match(/^(\d+(?:\.\d+)?)\s*([smhdwMy])$/);if(!r||!r[1]||!r[2])throw Error(`Invalid time format: "${n}". Expected format: "75s", "10m", "2h", "1d", "1w", "2M", "1y"`);let t=parseFloat(r[1]),o=r[2],a={s:1,m:60,h:3600,d:86400,w:604800,M:2592000,y:31536000}[o];if(a===void 0)throw Error(`Unknown time unit: "${o}"`);let e=Math.floor(t*a);if(e<=0)throw Error(`Time value must be positive: "${n}"`);return e}function Cu({sessionData:n,options:r,refreshTokenId:t}){let o=r.authentication?.accessToken?.secret;if(!o)throw Error("Access token secret env name is not configured");let c=process.env[o];if(!c)throw Error(`Access token secret env "${o}" is not set`);return ca({subject:n.userId,issuer:r.authentication?.accessToken?.issuer,audience:r.authentication?.accessToken?.audience,algorithm:r.authentication?.accessToken?.algorithm,expiresInSeconds:ot(r.authentication?.accessToken?.expiresIn??"15m"),sessionId:n.id,customClaims:{refreshTokenId:t}},c)}function xo(n,r){return n?{entityName:n.entity_name,entityId:n.entity_id===" - "?null:n.entity_id,operation:n.operation_type,userId:n.user_id==="unknown"?null:n.user_id,summary:r,ipAddress:n.ip_address,userAgent:n.user_agent,path:n.path,query:n.query}:void 0}function ql(n){let r=(a)=>{if(typeof a!=="string")return;try{return JSON.parse(a)}catch{return}},t=n.page?parseInt(n.page,10):1,o=n.limit?parseInt(n.limit,10):20,c=n.offset?parseInt(n.offset,10):(t-1)*o;return{page:t,limit:o,offset:c,search:n.search,searchFields:n.searchFields?n.searchFields.split(","):void 0,filters:r(n.filters),sort:r(n.sort),select:n.select?n.select.split(","):void 0,with:r(n.with),distinct:n.distinct==="true",distinctOn:n.distinctOn?n.distinctOn.split(","):void 0}}function Qu(n,r,t,o){let c=Math.ceil(o/r),a=n<c,e=n>1;return{page:n,limit:r,offset:t,totalItems:o,totalPages:c,hasNextPage:a,hasPrevPage:e,nextPage:a?n+1:null,prevPage:e?n-1:null}}function S5(n){let r=["varchar","char","text","uuid","citext","bit","varbit"],t=["integer","smallint","bigint","serial","smallserial","bigserial","real","doublePrecision","numeric","decimal"],o=["boolean"];if(r.includes(n))return(c)=>({valid:typeof c==="string",expectedType:"string"});if(t.includes(n))return(c)=>({valid:typeof c==="number",expectedType:"number"});if(o.includes(n))return(c)=>({valid:typeof c==="boolean",expectedType:"boolean"});if(n==="json"||n==="jsonb")return(c)=>({valid:typeof c==="object",expectedType:"object"});return()=>({valid:!0,expectedType:"any"})}function bc(n,r,t=!1){let o=[];for(let c of r){let a=n[c.name],e=c.notNull&&!c.nullable&&c.default===void 0&&!c.defaultRaw;if(a===void 0||a===null){if(e&&!t)o.push({field:c.name,message:c.validation?.customMessage||`${c.name} is required`});continue}let i=S5(c.type)(a);if(!i.valid){o.push({field:c.name,message:c.validation?.customMessage||`${c.name} must be of type ${i.expectedType}`});continue}if(typeof a==="string"){let s=a.length;if(c.length&&s>c.length)o.push({field:c.name,message:c.validation?.customMessage||`${c.name} exceeds max length of ${c.length}`});if(c.validation?.minLength&&s<c.validation.minLength)o.push({field:c.name,message:c.validation.customMessage||`${c.name} must be at least ${c.validation.minLength} characters`});if(c.validation?.maxLength&&s>c.validation.maxLength)o.push({field:c.name,message:c.validation.customMessage||`${c.name} must be at most ${c.validation.maxLength} characters`});if(c.validation?.pattern){if(!new RegExp(c.validation.pattern).test(a))o.push({field:c.name,message:c.validation.customMessage||`${c.name} does not match required pattern`})}if(c.validation?.format){let l=A5[c.validation.format];if(l&&!l.test(a))o.push({field:c.name,message:c.validation.customMessage||`${c.name} must be a valid ${c.validation.format}`})}}if(typeof a==="number"){if(c.validation?.min!==void 0&&a<c.validation.min)o.push({field:c.name,message:c.validation.customMessage||`${c.name} must be at least ${c.validation.min}`});if(c.validation?.max!==void 0&&a>c.validation.max)o.push({field:c.name,message:c.validation.customMessage||`${c.name} must be at most ${c.validation.max}`})}if(c.enumValues&&c.enumValues.length>0){if(!c.enumValues.includes(a))o.push({field:c.name,message:c.validation?.customMessage||`${c.name} must be one of: ${c.enumValues.join(", ")}`})}}return{valid:o.length===0,errors:o}}function M5(n){return n.replace(/[&<>"'`=/]/g,(r)=>E5[r]||r)}function D5(n){return n.replace(/<[^>]*>/g,"")}function H5(n){let r=n.split("@"),t=r[0],o=r[1];if(!t||!o)return n;let c=t.split("+")[0];if(!c)return n;return`${c.replace(/\./g,"")}@${o.toLowerCase()}`}function z5(n){return n.toLowerCase().trim().replace(/[^\w\s-]/g,"").replace(/[\s_-]+/g,"-").replace(/^-+|-+$/g,"")}function U5(n,r){if(n===null||n===void 0)return n;switch(r){case"trim":return typeof n==="string"?n.trim():n;case"lowercase":return typeof n==="string"?n.toLowerCase():n;case"uppercase":return typeof n==="string"?n.toUpperCase():n;case"escapeHtml":return typeof n==="string"?M5(n):n;case"stripTags":return typeof n==="string"?D5(n):n;case"normalizeEmail":return typeof n==="string"?H5(n):n;case"toNumber":if(typeof n==="number")return n;if(typeof n==="string"){let t=Number(n);return Number.isNaN(t)?n:t}return n;case"toBoolean":if(typeof n==="boolean")return n;if(typeof n==="string"){let t=n.toLowerCase();if(t==="true"||t==="1"||t==="yes")return!0;if(t==="false"||t==="0"||t==="no")return!1}if(typeof n==="number")return n!==0;return n;case"slugify":return typeof n==="string"?z5(n):n;default:return n}}function uc(n,r){let t={};for(let o of Object.keys(n)){let c=n[o],a=r.find((e)=>e.name===o);if(a?.sanitize&&a.sanitize.length>0)for(let e of a.sanitize)c=U5(c,e);t[o]=c}return t}async function Pu(n,r,t){let o=new Nn,c=`${W5}${n}`,a=`${B5}${n}:${r}`,e=await o.read(a);if(e.success&&e.data)return{success:!0,accessToken:e.data,fromCache:!0};let i=await o.acquireLock(c,Y5);if(!i.success)return{success:!1,error:i.error};if(i.data)try{let b=t();return await o.create(a,b,Lu),{success:!0,accessToken:b,fromCache:!1}}finally{await o.releaseLock(c)}let s=await o.waitForLock(c,J5,50);if(!s.success)return{success:!1,error:s.error};if(!s.data)return{success:!1,error:"Lock wait timeout"};let l=await o.read(a);if(l.success&&l.data)return{success:!0,accessToken:l.data,fromCache:!0};let d=t();return await o.create(a,d,Lu),{success:!0,accessToken:d,fromCache:!1}}function Gu(n){let r=[],t={};if(n.database?.url){let o=process.env[n.database.url];if(!o)r.push({field:"database.url",envName:n.database.url,message:`Environment variable "${n.database.url}" is not set. Please set it in your .env file.`});else t.databaseUrl=o}if(n.redis&&!n.redis.withDapr)if(n.redis.url){let o=process.env[n.redis.url];if(!o)r.push({field:"redis.url",envName:n.redis.url,message:`Environment variable "${n.redis.url}" is not set. Please set it in your .env file.`});else t.redisUrl=o}else{if(n.redis.host){if(!process.env[n.redis.host])r.push({field:"redis.host",envName:n.redis.host,message:`Environment variable "${n.redis.host}" is not set. Please set it in your .env file.`})}if(n.redis.port){if(!process.env[n.redis.port])r.push({field:"redis.port",envName:n.redis.port,message:`Environment variable "${n.redis.port}" is not set. Please set it in your .env file.`})}}if(n.authentication?.enabled){if(n.authentication.accessToken?.secret){let o=process.env[n.authentication.accessToken.secret];if(!o)r.push({field:"authentication.accessToken.secret",envName:n.authentication.accessToken.secret,message:`Environment variable "${n.authentication.accessToken.secret}" is not set. Please set it in your .env file.`});else t.accessTokenSecret=o}else r.push({field:"authentication.accessToken.secret",envName:"",message:"authentication.accessToken.secret is required when authentication is enabled."});if(n.authentication.refreshToken?.secret){let o=process.env[n.authentication.refreshToken.secret];if(!o)r.push({field:"authentication.refreshToken.secret",envName:n.authentication.refreshToken.secret,message:`Environment variable "${n.authentication.refreshToken.secret}" is not set. Please set it in your .env file.`});else t.refreshTokenSecret=o}else r.push({field:"authentication.refreshToken.secret",envName:"",message:"authentication.refreshToken.secret is required when authentication is enabled."});if(n.authentication.sessionToken?.secret){let o=process.env[n.authentication.sessionToken.secret];if(!o)r.push({field:"authentication.sessionToken.secret",envName:n.authentication.sessionToken.secret,message:`Environment variable "${n.authentication.sessionToken.secret}" is not set. Please set it in your .env file.`});else t.sessionTokenSecret=o}else r.push({field:"authentication.sessionToken.secret",envName:"",message:"authentication.sessionToken.secret is required when authentication is enabled."})}return{valid:r.length===0,errors:r,resolved:t}}async function qu(n,r){let{Pool:t}=await import("pg"),c=new URL(n).pathname.replace("/","");if(!c)return;let a=new URL(n);a.pathname="/postgres";let e=new t({connectionString:a.toString()});try{if((await e.query("SELECT 1 FROM pg_database WHERE datname = $1",[c])).rowCount===0)r.info(`[Database] Creating database "${c}"...`),await e.query(`CREATE DATABASE "${c}" TEMPLATE template0`),r.info(`[Database] Database "${c}" created successfully`);else r.info(`[Database] Database "${c}" exists`)}catch(i){let s=i instanceof Error?i.message:String(i);r.warn(`[Database] Could not auto-create database: ${s}`)}finally{await e.end()}}var Pl=null,A5,E5,B5="access_token:",W5="refresh_lock:",Y5=5,J5=3000,Lu=60;var Ne=f(()=>{xu();Hl();A5={email:/^[^\s@]+@[^\s@]+\.[^\s@]+$/,url:/^https?:\/\/.+/,uuid:/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,date:/^\d{4}-\d{2}-\d{2}$/,datetime:/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/,time:/^\d{2}:\d{2}:\d{2}$/,uri:/^[a-z][a-z0-9+.-]*:/i,ipv4:/^(\d{1,3}\.){3}\d{1,3}$/,ipv6:/^([0-9a-f]{1,4}:){7}[0-9a-f]{1,4}$/i};E5={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="}});import Oe from"path";import X5,{t as Fe}from"elysia";function Nl(n){if(!n)return Lo;return{enabled:n.enabled??Lo.enabled,basePath:n.basePath??Lo.basePath,cacheMaxAge:n.cacheMaxAge??Lo.cacheMaxAge,enableRangeRequests:n.enableRangeRequests??Lo.enableRangeRequests,enableEtag:n.enableEtag??Lo.enableEtag,corsOrigins:n.corsOrigins??Lo.corsOrigins}}function x5(n){let r=["image/","video/","audio/","text/","application/pdf"];for(let t of r)if(n.startsWith(t)||n===t)return"inline";return"attachment"}function L5(n){return n.replace(/[^A-Za-z0-9._-]+/g,"_").replace(/_{2,}/g,"_").slice(0,200)}function Ol(n){let{cdn:r,storagePath:t,logger:o,getFileRecord:c}=n,a=new X5({prefix:r.basePath});if(!r.enabled)return a;return a.get("/:id",async({params:e,request:i,set:s})=>{let{id:l}=e,d=i.headers.get("x-schema-name")||void 0,b,u,$;if(c){let g=await c(l,d);if(!g)return s.status=404,{success:!1,message:"File not found"};b=Oe.join(g.path,g.name),u=g.name,$=g.mimeType||g.mime_type||"application/octet-stream"}else b=Oe.join(t,l),u=l,$="application/octet-stream";if(!await Rt.exists(b))return s.status=404,{success:!1,message:"Physical file not found"};let w=await Rt.getFileInfo(b),_=new Date(w.modifiedAt||Date.now()).toUTCString(),R=r.enableEtag?`"${w.size}-${w.modifiedAt?.getTime()||Date.now()}"`:void 0,X={"Cache-Control":`public, max-age=${r.cacheMaxAge}`,"Last-Modified":_};if(R)X.ETag=R;if(r.corsOrigins.length>0)X["Access-Control-Allow-Origin"]=r.corsOrigins[0]==="*"?"*":r.corsOrigins.join(", "),X["Access-Control-Allow-Methods"]="GET, HEAD, OPTIONS";let x=i.headers.get("if-none-match");if(R&&x===R)return new Response(null,{status:304,headers:X});let E=Bun.file(b),P=i.headers.get("range");if(r.enableRangeRequests&&P){let g=P.match(/bytes=(\d*)-(\d*)/);if(!g)return s.status=416,new Response("Range not satisfiable",{status:416,headers:{"Content-Range":`bytes */${w.size}`,"Content-Type":$,...X}});let B=g[1]||"0",G=g[2]||"",L=parseInt(B,10),O=G?parseInt(G,10):w.size-1;if(L>=w.size||O>=w.size||L>O)return new Response("Range not satisfiable",{status:416,headers:{"Content-Range":`bytes */${w.size}`,"Content-Type":$,...X}});let v=O-L+1,J=E.slice(L,O+1);return new Response(J,{status:206,headers:{"Content-Range":`bytes ${L}-${O}/${w.size}`,"Accept-Ranges":"bytes","Content-Length":v.toString(),"Content-Type":$,...X}})}let M=x5($),A=L5(u),z=encodeURIComponent(u),h=`${M}; filename="${A}"; filename*=UTF-8''${z}`;return new Response(E,{status:200,headers:{"Content-Length":w.size.toString(),"Content-Type":$,"Accept-Ranges":r.enableRangeRequests?"bytes":"none","Content-Disposition":h,...X}})},{params:Fe.Object({id:Fe.String()}),detail:{tags:["CDN"],summary:"Get file by ID",description:"Serve file with streaming, range requests, and caching support"}}),a.head("/:id",async({params:e,request:i,set:s})=>{let{id:l}=e,d=i.headers.get("x-schema-name")||void 0,b,u;if(c){let X=await c(l,d);if(!X)return s.status=404,new Response(null,{status:404});b=Oe.join(X.path,X.name),u=X.mime_type||"application/octet-stream"}else b=Oe.join(t,l),u="application/octet-stream";if(!await Rt.exists(b))return s.status=404,new Response(null,{status:404});let k=await Rt.getFileInfo(b),w=new Date(k.modifiedAt||Date.now()).toUTCString(),_=r.enableEtag?`"${k.size}-${k.modifiedAt?.getTime()||Date.now()}"`:void 0,R={"Content-Length":k.size.toString(),"Content-Type":u,"Accept-Ranges":r.enableRangeRequests?"bytes":"none","Cache-Control":`public, max-age=${r.cacheMaxAge}`,"Last-Modified":w};if(_)R.ETag=_;if(r.corsOrigins.length>0)R["Access-Control-Allow-Origin"]=r.corsOrigins[0]==="*"?"*":r.corsOrigins.join(", "),R["Access-Control-Allow-Methods"]="GET, HEAD, OPTIONS";return new Response(null,{status:200,headers:R})},{params:Fe.Object({id:Fe.String()}),detail:{tags:["CDN"],summary:"Get file metadata",description:"Get file headers without body for preflight checks"}}),o.info(`[CDN] Routes enabled at ${r.basePath}`),a}var Lo;var Nu=f(()=>{Ge();Lo={enabled:!0,basePath:"/cdn",cacheMaxAge:86400,enableRangeRequests:!0,enableEtag:!0,corsOrigins:["*"]}});import{randomUUID as V5}from"crypto";import Fl from"path";function ba(n){if(!n)return Lt;return{enabled:n.enabled??Lt.enabled,basePath:n.basePath??Lt.basePath,maxFileSizeBytes:n.maxFileSizeBytes??Lt.maxFileSizeBytes,allowedMimeTypes:n.allowedMimeTypes??Lt.allowedMimeTypes,blockedMimeTypes:n.blockedMimeTypes??Lt.blockedMimeTypes,formData:{filesField:n.formData?.filesField??Lt.formData.filesField,dataField:n.formData?.dataField??Lt.formData.dataField,maxFiles:n.formData?.maxFiles??Lt.formData.maxFiles}}}function ua(n,r){let t={data:{},files:[]};if(!n||typeof n!=="object")return t;let o=n,c=o[r.formData.dataField];if(c){if(typeof c==="string")try{t.data=JSON.parse(c)}catch{t.data={}}else if(typeof c==="object")t.data=c}let a=o[r.formData.filesField];if(a){if(a instanceof File)t.files=[a];else if(Array.isArray(a))t.files=a.filter((e)=>e instanceof File)}return t}function jl(n,r){if(n.size>r.maxFileSizeBytes)return{valid:!1,error:`File ${n.name} exceeds maximum size of ${r.maxFileSizeBytes} bytes`};if(r.blockedMimeTypes.length>0&&r.blockedMimeTypes.includes(n.type))return{valid:!1,error:`File type ${n.type} is not allowed`};if(r.allowedMimeTypes.length>0&&!r.allowedMimeTypes.includes(n.type))return{valid:!1,error:`File type ${n.type} is not in allowed list`};return{valid:!0}}async function Kl(n,r,t){let o=V5(),c=Fl.extname(n.name),a=`${o}${c}`,e=t?Fl.join(r.basePath,t):r.basePath,i=await n.arrayBuffer(),s=new Uint8Array(i);return await Rt.createFile({dir:e,name:a,data:s,options:{type:n.type,createDir:!0}}),{id:o,name:a,originalName:n.name,path:e,mimeType:n.type,size:n.size,createdAt:new Date}}async function ga(n,r,t){let o=[],c=[];for(let a of n.slice(0,r.formData.maxFiles)){let e=jl(a,r);if(!e.valid){c.push({file:a.name,error:e.error||"Unknown error"});continue}try{let i=await Kl(a,r,t);o.push(i)}catch(i){c.push({file:a.name,error:i instanceof Error?i.message:"Upload failed"})}}return{success:o,failed:c}}async function Ou(n,r){try{let t=Fl.join(n,r);return await Rt.deleteFile(t)}catch{return!1}}var Lt;var Fu=f(()=>{Ge();Lt={enabled:!1,basePath:"./uploads",maxFileSizeBytes:104857600,allowedMimeTypes:[],blockedMimeTypes:["application/x-executable","application/x-msdos-program"],formData:{filesField:"files",dataField:"data",maxFiles:10}}});var ju={};Zt(ju,{validateFile:()=>jl,uploadFiles:()=>ga,uploadFile:()=>Kl,parseFormDataBody:()=>ua,mergeStorageConfig:()=>ba,mergeCdnConfig:()=>Nl,deleteFile:()=>Ou,createCdnRoutes:()=>Ol});var je=f(()=>{Nu();Fu()});import{Elysia as W$,t as Rr}from"elysia";function xg(n){let{captchaService:r,logger:t,basePath:o="/auth/captcha"}=n,c=new W$;if(!r.isEnabled())return c;return c.get(`${o}/generate`,async(a)=>{let{type:e,difficulty:i}=a.query,s=a.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||a.request.headers.get("x-real-ip")?.trim()||a.request.headers.get("cf-connecting-ip")?.trim()||"unknown",l=await r.generate(e,i,s);if(l.rateLimited)return a.set.status=429,{success:!1,message:l.message??"Too many requests. Please try again later."};return t.info("[CAPTCHA] Challenge generated via endpoint",{challengeId:l.challengeId,type:l.type,ipAddress:s}),{success:!0,data:{challengeId:l.challengeId,type:l.type,question:l.question,expiresAt:l.expiresAt,...l.imageData?{imageData:l.imageData}:{},...l.puzzleData?{puzzleData:{pieces:l.puzzleData.pieces}}:{}}}},{query:Y$,detail:{tags:["Captcha"],summary:"Generate Captcha",description:"Generate a new captcha challenge"}}),c.post(`${o}/validate`,async(a)=>{let{challengeId:e,answer:i}=a.body,s=await r.validate(e,i);if(!s.valid)a.set.status=400;return s},{body:J$,detail:{tags:["Captcha"],summary:"Validate Captcha",description:"Validate a captcha answer"}}),c}var Y$,J$;var Lg=f(()=>{Y$=Rr.Object({type:Rr.Optional(Rr.Union([Rr.Literal("math"),Rr.Literal("image"),Rr.Literal("puzzle"),Rr.Literal("text")])),difficulty:Rr.Optional(Rr.Union([Rr.Literal("easy"),Rr.Literal("medium"),Rr.Literal("hard")]))}),J$=Rr.Object({challengeId:Rr.String(),answer:Rr.String()})});import X$ from"crypto";var{password:x$}=globalThis.Bun;async function bo(n){return await x$.hash(n,{algorithm:"bcrypt",cost:10})}function ye(){return X$.randomBytes(32).toString("hex")}function Bc(n){let r=n.match(/^(\d+)(s|m|h|d)$/);if(!r||!r[1]||!r[2])return 86400000;let t=Number.parseInt(r[1],10);switch(r[2]){case"s":return t*1000;case"m":return t*60*1000;case"h":return t*60*60*1000;case"d":return t*24*60*60*1000;default:return 86400000}}function Vg(n){let r=[];if(n.length<8)r.push("Password must be at least 8 characters");if(!/[A-Z]/.test(n))r.push("Password must contain uppercase letter");if(!/[a-z]/.test(n))r.push("Password must contain lowercase letter");if(!/[0-9]/.test(n))r.push("Password must contain a number");return{valid:r.length===0,errors:r}}var Wc=()=>{};import{sql as ni}from"drizzle-orm";import{Elysia as L$,t as ri}from"elysia";function ti(n){let{authConfig:r,registerConfig:t,emailService:o,appName:c}=n,{db:a,logger:e,usersTable:i}=r,s=new L$;if(!t.enabled||!t.emailVerification?.enabled)return s;let l="/verify-email",d="/resend-verification";return s.get(l,async(b)=>{if(!a||!i)return{success:!1,message:"Database not configured"};let u=b.query.token;if(!u)return{success:!1,message:"Verification token is required"};let $=await a.select().from(i).where(ni`email_verification_token = ${u}`).limit(1);if($.length===0)return e.warn("[AUTH] Email verification failed - invalid token"),{success:!1,message:"Invalid or expired verification token"};let k=$[0],w=k.emailVerificationTokenExpiresAt;if(w&&new Date>new Date(w))return e.warn("[AUTH] Email verification failed - token expired",{userId:k.id,email:k.email}),{success:!1,message:"Verification token has expired. Please request a new one."};if(await a.update(i).set({verifiedAt:new Date,emailVerificationToken:null,emailVerificationTokenExpiresAt:null}).where(ni`id = ${k.id}`),e.info("[AUTH] Email verified successfully",{userId:k.id,email:k.email}),t.emailVerification?.templates?.welcome?.enabled&&o?.isAvailable())o.sendWelcomeEmail(k.email,k.email.split("@")[0]||"User",c||"Nucleus").catch((R)=>{e.error("[AUTH] Failed to send welcome email after verification",{email:k.email,error:R})});return{success:!0,message:"Email verified successfully. You can now log in.",data:{redirectUrl:t.emailVerification?.redirectUrl||"/login",verified:!0}}},{query:ri.Object({token:ri.String()}),detail:{tags:["Authentication"],summary:"Verify Email",description:"Verify user email address using the verification token"}}),s.post(d,async(b)=>{if(!a||!i)return{success:!1,message:"Database not configured"};if(!o?.isAvailable())return{success:!1,message:"Email service not available"};let{email:u}=b.body,$=await a.select().from(i).where(ni`email = ${u}`).limit(1);if($.length===0)return{success:!0,message:"If your email is registered, you will receive a verification email."};let k=$[0];if(k.verifiedAt)return{success:!1,message:"Email is already verified"};let w=t.emailVerification?.maxResendAttempts||3,_=k.emailVerificationAttempts||0;if(_>=w)return e.warn("[AUTH] Resend verification failed - max attempts reached",{email:u,attempts:_}),{success:!1,message:"Maximum resend attempts reached. Please contact support.",data:{maxAttemptsReached:!0,attemptsUsed:_,maxAttempts:w}};let R=t.emailVerification?.resendCooldown||"60s",X=Bc(R),x=k.emailVerificationSentAt;if(x){let g=Date.now()-new Date(x).getTime();if(g<X){let B=Math.ceil((X-g)/1000);return{success:!1,message:`Please wait ${B} seconds before requesting another verification email.`,data:{cooldownRemaining:B,canResendAt:new Date(Date.now()+B*1000).toISOString()}}}}let E=ye(),P=t.emailVerification?.tokenExpiresIn||"24h",M=new Date(Date.now()+Bc(P));await a.update(i).set({emailVerificationToken:E,emailVerificationTokenExpiresAt:M,emailVerificationSentAt:new Date,emailVerificationAttempts:_+1}).where(ni`id = ${k.id}`);let z=`${(t.emailVerification?.redirectUrl||"http://localhost:3000/login").replace("/login","/verify-email")}?token=${E}`,h=await o.sendVerificationEmail(u,u.split("@")[0]||"User",z,c||"Nucleus");if(h.success)return e.info("[AUTH] Verification email resent",{email:u}),{success:!0,message:"Verification email sent. Please check your inbox.",data:{cooldownSeconds:Math.ceil(X/1000),canResendAt:new Date(Date.now()+X).toISOString(),attemptsRemaining:w-(_+1)}};return e.error("[AUTH] Failed to resend verification email",{email:u,error:h.error}),{success:!1,message:"Failed to send verification email. Please try again later."}},{body:ri.Object({email:ri.String({format:"email"})}),detail:{tags:["Authentication"],summary:"Resend Verification Email",description:"Resend the email verification link to the user"}}),s}var bf=f(()=>{Wc()});import Cg from"crypto";function oi(){return Cg.randomBytes(32).toString("hex")}function Pt(n){return Cg.createHash("sha256").update(n).digest("hex")}function ci(n){let r=n.match(/^(\d+)(s|m|h|d)$/);if(!r?.[1]||!r[2])return 900000;let t=parseInt(r[1],10);switch(r[2]){case"s":return t*1000;case"m":return t*60*1000;case"h":return t*60*60*1000;case"d":return t*24*60*60*1000;default:return 900000}}var ai=()=>{};import{eq as V$}from"drizzle-orm";import{Elysia as C$,t as ei}from"elysia";function ii(n,r,t,o,c,a){let{db:e,logger:i,usersTable:s}=n,l=r.route||"/auth/invite",d=r.tokenExpiresIn||"7d",b=r.redirectUrl||"",u=new C$;if(!r.enabled)return u;if(u.post(l,async($)=>{if(!e||!s)return{success:!1,message:"Database not configured"};if(!t?.isAvailable())return i.error("[AUTH] Invite requested but email service not available"),{success:!1,message:"Email service not available"};let{email:k}=$.body,w=await e.select().from(s).where(V$(s.email,k)).limit(1),_;if(w.length>0){let M=w[0];if(M.verifiedAt||M.password)return i.warn("[AUTH] Invite failed - user already verified",{email:k}),{success:!1,message:"User with this email is already verified"};_=M.id,i.info("[AUTH] Resending invitation to existing unverified user",{userId:_,email:k})}else{let M={email:k,password:null,emailVerified:!1,isLocked:!1,createdAt:new Date,updatedAt:new Date},z=(await e.insert(s).values(M).returning())[0];if(!z)return i.error("[AUTH] Failed to create invited user",{email:k}),{success:!1,message:"Failed to create user"};_=z.id,i.info("[AUTH] Invited user created",{userId:_,email:k})}let R=oi(),X=Pt(R),x=new Date(Date.now()+ci(d));await o({userId:_,email:k,tokenHash:X,expiresAt:x});let E=b?`${b}?token=${R}&invite=true`:`/auth/magic-link/verify?token=${R}`,P=await t.sendInvitationEmail(k,E,c||"Nucleus");if(!P.success)return i.error("[AUTH] Failed to send invitation email",{email:k,error:P.error}),{success:!0,message:"User created but failed to send invitation email",data:{id:_,email:k}};return i.info("[AUTH] Invitation email sent",{email:k,userId:_}),{success:!0,message:"Invitation sent successfully",data:{id:_,email:k}}},{body:Q$,detail:{tags:["Authentication"],summary:"Invite User",description:"Invite a new user by sending them an email with a magic link to set their password"}}),a)u.post(`${l}/verify`,async($)=>{let{token:k}=$.body;if(!k)return{success:!1,message:"Token is required"};let w=Pt(k),_=await a(w);if(!_)return i.warn("[AUTH] Invalid invite verify token"),{success:!1,message:"Invalid or expired token"};if(new Date>_.expiresAt)return i.warn("[AUTH] Expired invite verify token",{email:_.email}),{success:!1,message:"Invalid or expired token"};return i.info("[AUTH] Invite token verified (not consumed)",{email:_.email,userId:_.userId}),{success:!0,data:{userId:_.userId,email:_.email}}},{body:ei.Object({token:ei.String()}),detail:{tags:["Authentication"],summary:"Verify Invite Token",description:"Validate an invite token without consuming it. Returns user info if valid."}});return u}var Q$;var uf=f(()=>{ai();Q$=ei.Object({email:ei.String({format:"email"})})});import{t as In}from"elysia";var gf,P$;var _f=f(()=>{gf=In.Object({email:In.String({format:"email"}),password:In.String({minLength:1}),rememberMe:In.Optional(In.Boolean()),captchaId:In.Optional(In.String()),captchaAnswer:In.Optional(In.String())}),P$=In.Object({success:In.Boolean(),message:In.Optional(In.String()),data:In.Optional(In.Object({user:In.Object({id:In.String(),email:In.String()}),accessToken:In.String(),refreshToken:In.String()}))})});var{password:G$}=globalThis.Bun;async function si(n,r){try{return await G$.verify(n,r)}catch{return!1}}function Qg(n,r){let t=n.toLowerCase(),o=["headlesschrome","headless","phantomjs","nightmare","selenium","webdriver","puppeteer","playwright"],c=["bot","crawler","spider","scraper","curl","wget","python-requests","python-urllib","java/","httpclient","go-http-client","node-fetch","axios","postman","insomnia","httpie"],a=o.some((w)=>t.includes(w)),e=c.some((w)=>t.includes(w)),i=a||e,s=[];if(a)s.push("headless_browser");if(e)s.push("bot_user_agent");if(!t||t.length<10)s.push("missing_or_short_ua");if(t==="mozilla/5.0")s.push("generic_ua");if(t.includes("nucleusserveraction")||t.includes("serveraction"))s.push("server_action");let l="unknown";if(t.includes("mobile")||t.includes("android")&&!t.includes("tablet"))l="mobile";else if(t.includes("tablet")||t.includes("ipad"))l="tablet";else if(t.includes("windows")||t.includes("macintosh")||t.includes("linux"))l="desktop";let d,b;if(a)d="Headless Browser";else if(e)d="Bot/Crawler";else if(t.includes("chrome")&&!t.includes("edg")){d="Chrome";let w=n.match(/Chrome\/(\d+\.\d+)/i);if(w?.[1])b=w[1]}else if(t.includes("firefox")){d="Firefox";let w=n.match(/Firefox\/(\d+\.\d+)/i);if(w?.[1])b=w[1]}else if(t.includes("safari")&&!t.includes("chrome")){d="Safari";let w=n.match(/Version\/(\d+\.\d+)/i);if(w?.[1])b=w[1]}else if(t.includes("edg")){d="Edge";let w=n.match(/Edg\/(\d+\.\d+)/i);if(w?.[1])b=w[1]}let u,$;if(t.includes("windows nt 10"))u="Windows",$="10/11";else if(t.includes("windows nt"))u="Windows";else if(t.includes("mac os x")){u="macOS";let w=n.match(/Mac OS X (\d+[._]\d+)/i);if(w?.[1])$=w[1].replace("_",".")}else if(t.includes("android")){u="Android";let w=n.match(/Android (\d+\.?\d*)/i);if(w?.[1])$=w[1]}else if(t.includes("iphone")||t.includes("ipad")){u="iOS";let w=n.match(/OS (\d+[._]\d+)/i);if(w?.[1])$=w[1].replace("_",".")}else if(t.includes("linux"))u="Linux";return{deviceName:d&&u?`${d} on ${u}`:"Unknown Device",deviceType:l,browserName:d,browserVersion:b,osName:u,osVersion:$,ipAddress:r,userAgent:n,locationCountry:void 0,locationCity:void 0,isHeadless:a,isBot:e,isSuspicious:i,suspiciousPatterns:s}}var mf=()=>{};import{eq as wf}from"drizzle-orm";import{Elysia as q$}from"elysia";function li(n,r,t,o,c,a,e,i,s){let{db:l,logger:d,usersTable:b}=n,u=r.route||"/auth/login",$={accessTokenName:e?.accessTokenName||"access_token",refreshTokenName:e?.refreshTokenName||"refresh_token",sessionTokenName:e?.sessionTokenName||"session_token",accessTokenMaxAge:e?.accessTokenMaxAge||900,refreshTokenMaxAge:e?.refreshTokenMaxAge||604800,sessionTokenMaxAge:e?.sessionTokenMaxAge||900,secure:e?.secure??!0,httpOnly:e?.httpOnly??!0,sameSite:e?.sameSite||"strict",path:e?.path||"/"},k=new q$;if(!r.enabled)return k;return k.post(u,async(w)=>{if(!l||!b)return{success:!1,message:"Database not configured"};let{email:_,password:R,rememberMe:X,captchaId:x,captchaAnswer:E}=w.body;if(s?.isEnabled()){if(!x||!E)return w.set.status=400,{success:!1,message:"Captcha is required"};let rn=await s.validate(x,E);if(!rn.valid)return w.set.status=400,{success:!1,message:rn.message||"Invalid captcha",attemptsRemaining:rn.attemptsRemaining}}let M=(await l.select().from(b).where(wf(b.email,_)).limit(1))[0],A=new URL(w.request.url),z=w.request.headers.get("cf-connecting-ip")?.trim()||w.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||w.request.headers.get("x-real-ip")?.trim()||"unknown",h=w.request.headers.get("user-agent")||"unknown";if(!M)return d.warn("[AUTH] Login failed - user not found",{email:_}),await d.audit({entityName:"users",operation:"LOGIN_FAILED",summary:`Login failed: user not found (${_})`,ipAddress:z,userAgent:h,path:A.pathname,query:A.search}),{success:!1,message:"Invalid email or password"};if(M.isLocked)return d.warn("[AUTH] Login failed - account locked",{email:_,userId:M.id}),await d.audit({entityName:"users",entityId:M.id,operation:"LOGIN_FAILED",userId:M.id,summary:`Login failed: account locked (${_})`,ipAddress:z,userAgent:h,path:A.pathname,query:A.search}),{success:!1,message:"Account is locked"};if(!await si(R,M.password)){let rn=(M.failedLoginAttempts||0)+1;return await l.update(b).set({failedLoginAttempts:rn,isLocked:rn>=5,lockedUntil:rn>=5?new Date(Date.now()+1800000):null}).where(wf(b.id,M.id)),d.warn("[AUTH] Login failed - invalid password",{email:_,failedAttempts:rn}),await d.audit({entityName:"users",entityId:M.id,operation:"LOGIN_FAILED",userId:M.id,summary:`Login failed: invalid password (${_}, attempt ${rn})`,ipAddress:z,userAgent:h,path:A.pathname,query:A.search}),{success:!1,message:"Invalid email or password"}}await l.update(b).set({failedLoginAttempts:0,lastLoginAt:new Date,loginCount:(M.loginCount||0)+1}).where(wf(b.id,M.id));let B={};w.request.headers.forEach((rn,en)=>{B[en]=rn}),d.info("[AUTH] Login request headers",{headers:B});let G=w.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim(),L=(rn)=>!rn||rn==="127.0.0.1"||rn==="::1"||rn==="localhost"||rn.startsWith("10.")||rn.startsWith("192.168.")||rn.startsWith("172."),O=w.request.headers.get("cf-connecting-ip")?.trim()||w.request.headers.get("true-client-ip")?.trim()||(!L(G)?G:void 0)||w.request.headers.get("x-real-ip")?.trim()||w.request.headers.get("x-client-ip")?.trim()||G||"127.0.0.1",v=w.request.headers.get("user-agent")||"Unknown Browser";d.info("[AUTH] Parsed device info",{ipAddress:O,userAgent:v});let J=Qg(v,O);try{if(!L(O)){let rn=await fetch(`http://ip-api.com/json/${O}?fields=country,city`);if(rn.ok){let en=await rn.json();if(en.country)J.locationCountry=en.country;if(en.city)J.locationCity=en.city}}}catch{}let W=t(M.id),U=o(M.id),Y={userId:M.id,deviceInfo:J,loginMethod:"password",rememberMe:X},Q=await c(Y);if(a)await a(Q,Y);d.info("[AUTH] Login successful",{userId:M.id,email:_,rememberMe:X}),await d.audit({entityName:"users",entityId:M.id,operation:"LOGIN",userId:M.id,summary:`${_} logged in successfully`,ipAddress:O,userAgent:v,path:A.pathname,query:A.search});let F={accessToken:{setHeadersEnabled:i?.accessToken?.setHeadersEnabled??!0,returnJson:i?.accessToken?.returnJson??!0},refreshToken:{setHeadersEnabled:i?.refreshToken?.setHeadersEnabled??!0,returnJson:i?.refreshToken?.returnJson??!0},sessionToken:{setHeadersEnabled:i?.sessionToken?.setHeadersEnabled??!0,returnJson:i?.sessionToken?.returnJson??!0}},K=$.secure?"; Secure":"",N=`; Path=${$.path}; HttpOnly; SameSite=${$.sameSite}${K}`,tn=[];if(F.accessToken.setHeadersEnabled)tn.push(`${$.accessTokenName}=${W}${N}; Max-Age=${$.accessTokenMaxAge}`);if(F.refreshToken.setHeadersEnabled)tn.push(`${$.refreshTokenName}=${U}${N}; Max-Age=${$.refreshTokenMaxAge}`);if(F.sessionToken.setHeadersEnabled)tn.push(`${$.sessionTokenName}=${Q}${N}; Max-Age=${$.sessionTokenMaxAge}`);w.set.headers["x-session-id"]=Q;let sn={user:{id:M.id,email:M.email}};if(F.accessToken.returnJson)sn.accessToken=W;if(F.refreshToken.returnJson)sn.refreshToken=U;if(F.sessionToken.returnJson)sn.sessionId=Q;let kn=JSON.stringify({success:!0,data:sn}),ar=new Headers;ar.set("Content-Type","application/json"),ar.set("x-session-id",Q);for(let rn of tn)ar.append("Set-Cookie",rn);return new Response(kn,{status:200,headers:ar})},{body:gf,detail:{tags:["Authentication"],summary:"Login",description:"Authenticate user with email and password"}}),k}var hf=f(()=>{_f();mf();_f()});function Pg(){return{"Set-Cookie":["access_token=; Path=/; HttpOnly; SameSite=Strict; Max-Age=0","refresh_token=; Path=/; HttpOnly; SameSite=Strict; Max-Age=0","session_token=; Path=/; HttpOnly; SameSite=Strict; Max-Age=0"].join(", ")}}import{t as fi}from"elysia";var N$;var Gg=f(()=>{N$=fi.Object({success:fi.Boolean(),message:fi.Optional(fi.String())})});import{Elysia as O$}from"elysia";function di(n,r,t,o){let{logger:c}=n,a=r.route||"/auth/logout",e=new O$;if(!r.enabled)return e;return e.post(a,async(i)=>{let s=i.request.headers.get("x-session-id"),l=i.request.headers.get("x-user-id");if(s){if(await t(s),o)await o(s,"user_logout")}let d=Pg();for(let[u,$]of Object.entries(d))i.set.headers[u]=$;c.info("[AUTH] Logout successful",{userId:l,sessionId:s});let b=new URL(i.request.url);return c.audit({entityName:"users",entityId:l||void 0,operation:"LOGOUT",userId:l||void 0,summary:`User logged out${s?` (session: ${s.substring(0,8)}...)`:""}`,ipAddress:i.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||i.request.headers.get("x-real-ip")?.trim()||"unknown",userAgent:i.request.headers.get("user-agent")||"unknown",path:b.pathname,query:b.search}),{success:!0,message:"Logged out successfully"}},{detail:{tags:["Authentication"],summary:"Logout",description:"Logout and invalidate session"}}),e}var $f=f(()=>{Gg()});var mr={};Zt(mr,{IsUndefined:()=>Kn,IsUint8Array:()=>qt,IsSymbol:()=>Ef,IsString:()=>Wn,IsRegExp:()=>Ha,IsObject:()=>Dn,IsNumber:()=>Lr,IsNull:()=>Sf,IsIterator:()=>Af,IsFunction:()=>Rf,IsDate:()=>No,IsBoolean:()=>Gt,IsBigInt:()=>Da,IsAsyncIterator:()=>kf,IsArray:()=>jn,HasPropertyKey:()=>bi});function bi(n,r){return r in n}function kf(n){return Dn(n)&&!jn(n)&&!qt(n)&&Symbol.asyncIterator in n}function jn(n){return Array.isArray(n)}function Da(n){return typeof n==="bigint"}function Gt(n){return typeof n==="boolean"}function No(n){return n instanceof globalThis.Date}function Rf(n){return typeof n==="function"}function Af(n){return Dn(n)&&!jn(n)&&!qt(n)&&Symbol.iterator in n}function Sf(n){return n===null}function Lr(n){return typeof n==="number"}function Dn(n){return typeof n==="object"&&n!==null}function Ha(n){return n instanceof globalThis.RegExp}function Wn(n){return typeof n==="string"}function Ef(n){return typeof n==="symbol"}function qt(n){return n instanceof globalThis.Uint8Array}function Kn(n){return n===void 0}function F$(n){return n.map((r)=>ui(r))}function j$(n){return new Date(n.getTime())}function K$(n){return new Uint8Array(n)}function p$(n){return new RegExp(n.source,n.flags)}function T$(n){let r={};for(let t of Object.getOwnPropertyNames(n))r[t]=ui(n[t]);for(let t of Object.getOwnPropertySymbols(n))r[t]=ui(n[t]);return r}function ui(n){return jn(n)?F$(n):No(n)?j$(n):qt(n)?K$(n):Ha(n)?p$(n):Dn(n)?T$(n):n}function Xn(n){return ui(n)}var Mr=()=>{};function Yc(n,r){return r===void 0?Xn(n):Xn({...r,...n})}var gi=f(()=>{Mr()});var Mf=f(()=>{gi();Mr()});function qg(n){return n!==null&&typeof n==="object"}function Ng(n){return globalThis.Array.isArray(n)&&!globalThis.ArrayBuffer.isView(n)}function Og(n){return n===void 0}function Fg(n){return typeof n==="number"}var jg=()=>{};var _i;var Kg=f(()=>{jg();(function(n){n.InstanceMode="default",n.ExactOptionalPropertyTypes=!1,n.AllowArrayObject=!1,n.AllowNaN=!1,n.AllowNullVoid=!1;function r(e,i){return n.ExactOptionalPropertyTypes?i in e:e[i]!==void 0}n.IsExactOptionalProperty=r;function t(e){let i=qg(e);return n.AllowArrayObject?i:i&&!Ng(e)}n.IsObjectLike=t;function o(e){return t(e)&&!(e instanceof Date)&&!(e instanceof Uint8Array)}n.IsRecordLike=o;function c(e){return n.AllowNaN?Fg(e):Number.isFinite(e)}n.IsNumberLike=c;function a(e){let i=Og(e);return n.AllowNullVoid?i||e===null:i}n.IsVoidLike=a})(_i||(_i={}))});function v$(n){return globalThis.Object.freeze(n).map((r)=>za(r))}function I$(n){return n}function Z$(n){return n}function y$(n){return n}function nk(n){let r={};for(let t of Object.getOwnPropertyNames(n))r[t]=za(n[t]);for(let t of Object.getOwnPropertySymbols(n))r[t]=za(n[t]);return globalThis.Object.freeze(r)}function za(n){return jn(n)?v$(n):No(n)?I$(n):qt(n)?Z$(n):Ha(n)?y$(n):Dn(n)?nk(n):n}var pg=()=>{};function D(n,r){let t=r!==void 0?{...r,...n}:n;switch(_i.InstanceMode){case"freeze":return za(t);case"clone":return Xn(t);default:return t}}var I=f(()=>{Kg();pg();Mr()});var Nt=f(()=>{I()});var fr;var Tg=f(()=>{fr=class fr extends Error{constructor(n){super(n)}}});var Mt=f(()=>{Tg()});var Zn,lt,dr,Tr,C;var Ua=f(()=>{Zn=Symbol.for("TypeBox.Transform"),lt=Symbol.for("TypeBox.Readonly"),dr=Symbol.for("TypeBox.Optional"),Tr=Symbol.for("TypeBox.Hint"),C=Symbol.for("TypeBox.Kind")});var y=f(()=>{Ua()});function Jc(n){return Dn(n)&&n[lt]==="Readonly"}function Dr(n){return Dn(n)&&n[dr]==="Optional"}function Df(n){return bn(n,"Any")}function Hf(n){return bn(n,"Argument")}function ft(n){return bn(n,"Array")}function Oo(n){return bn(n,"AsyncIterator")}function Fo(n){return bn(n,"BigInt")}function Ot(n){return bn(n,"Boolean")}function dt(n){return bn(n,"Computed")}function bt(n){return bn(n,"Constructor")}function rk(n){return bn(n,"Date")}function ut(n){return bn(n,"Function")}function gt(n){return bn(n,"Integer")}function Cn(n){return bn(n,"Intersect")}function jo(n){return bn(n,"Iterator")}function bn(n,r){return Dn(n)&&C in n&&n[C]===r}function mi(n){return Gt(n)||Lr(n)||Wn(n)}function Vr(n){return bn(n,"Literal")}function Cr(n){return bn(n,"MappedKey")}function xn(n){return bn(n,"MappedResult")}function uo(n){return bn(n,"Never")}function tk(n){return bn(n,"Not")}function Ba(n){return bn(n,"Null")}function _t(n){return bn(n,"Number")}function pn(n){return bn(n,"Object")}function Ko(n){return bn(n,"Promise")}function po(n){return bn(n,"Record")}function Gn(n){return bn(n,"Ref")}function zf(n){return bn(n,"RegExp")}function Ft(n){return bn(n,"String")}function Wa(n){return bn(n,"Symbol")}function Qr(n){return bn(n,"TemplateLiteral")}function ok(n){return bn(n,"This")}function go(n){return Dn(n)&&Zn in n}function Pr(n){return bn(n,"Tuple")}function Ya(n){return bn(n,"Undefined")}function gn(n){return bn(n,"Union")}function ck(n){return bn(n,"Uint8Array")}function ak(n){return bn(n,"Unknown")}function ek(n){return bn(n,"Unsafe")}function ik(n){return bn(n,"Void")}function sk(n){return Dn(n)&&C in n&&Wn(n[C])}function Gr(n){return Df(n)||Hf(n)||ft(n)||Ot(n)||Fo(n)||Oo(n)||dt(n)||bt(n)||rk(n)||ut(n)||gt(n)||Cn(n)||jo(n)||Vr(n)||Cr(n)||xn(n)||uo(n)||tk(n)||Ba(n)||_t(n)||pn(n)||Ko(n)||po(n)||Gn(n)||zf(n)||Ft(n)||Wa(n)||Qr(n)||ok(n)||Pr(n)||Ya(n)||gn(n)||ck(n)||ak(n)||ek(n)||ik(n)||sk(n)}var hn=f(()=>{y()});var m={};Zt(m,{TypeGuardUnknownTypeError:()=>vg,IsVoid:()=>V_,IsUnsafe:()=>L_,IsUnknown:()=>x_,IsUnionLiteral:()=>wk,IsUnion:()=>Wf,IsUndefined:()=>J_,IsUint8Array:()=>X_,IsTuple:()=>Y_,IsTransform:()=>W_,IsThis:()=>B_,IsTemplateLiteral:()=>U_,IsSymbol:()=>z_,IsString:()=>H_,IsSchema:()=>ir,IsRegExp:()=>D_,IsRef:()=>M_,IsRecursive:()=>mk,IsRecord:()=>E_,IsReadonly:()=>bk,IsProperties:()=>wi,IsPromise:()=>S_,IsOptional:()=>uk,IsObject:()=>A_,IsNumber:()=>R_,IsNull:()=>k_,IsNot:()=>$_,IsNever:()=>h_,IsMappedResult:()=>w_,IsMappedKey:()=>m_,IsLiteralValue:()=>__,IsLiteralString:()=>u_,IsLiteralNumber:()=>g_,IsLiteralBoolean:()=>_k,IsLiteral:()=>Xa,IsKindOf:()=>fn,IsKind:()=>C_,IsIterator:()=>b_,IsIntersect:()=>d_,IsInteger:()=>f_,IsImport:()=>gk,IsFunction:()=>l_,IsDate:()=>s_,IsConstructor:()=>i_,IsComputed:()=>e_,IsBoolean:()=>a_,IsBigInt:()=>c_,IsAsyncIterator:()=>o_,IsArray:()=>t_,IsArgument:()=>r_,IsAny:()=>n_});function Ig(n){try{return new RegExp(n),!0}catch{return!1}}function Uf(n){if(!Wn(n))return!1;for(let r=0;r<n.length;r++){let t=n.charCodeAt(r);if(t>=7&&t<=13||t===27||t===127)return!1}return!0}function Zg(n){return Bf(n)||ir(n)}function Ja(n){return Kn(n)||Da(n)}function Yn(n){return Kn(n)||Lr(n)}function Bf(n){return Kn(n)||Gt(n)}function Hn(n){return Kn(n)||Wn(n)}function fk(n){return Kn(n)||Wn(n)&&Uf(n)&&Ig(n)}function dk(n){return Kn(n)||Wn(n)&&Uf(n)}function yg(n){return Kn(n)||ir(n)}function bk(n){return Dn(n)&&n[lt]==="Readonly"}function uk(n){return Dn(n)&&n[dr]==="Optional"}function n_(n){return fn(n,"Any")&&Hn(n.$id)}function r_(n){return fn(n,"Argument")&&Lr(n.index)}function t_(n){return fn(n,"Array")&&n.type==="array"&&Hn(n.$id)&&ir(n.items)&&Yn(n.minItems)&&Yn(n.maxItems)&&Bf(n.uniqueItems)&&yg(n.contains)&&Yn(n.minContains)&&Yn(n.maxContains)}function o_(n){return fn(n,"AsyncIterator")&&n.type==="AsyncIterator"&&Hn(n.$id)&&ir(n.items)}function c_(n){return fn(n,"BigInt")&&n.type==="bigint"&&Hn(n.$id)&&Ja(n.exclusiveMaximum)&&Ja(n.exclusiveMinimum)&&Ja(n.maximum)&&Ja(n.minimum)&&Ja(n.multipleOf)}function a_(n){return fn(n,"Boolean")&&n.type==="boolean"&&Hn(n.$id)}function e_(n){return fn(n,"Computed")&&Wn(n.target)&&jn(n.parameters)&&n.parameters.every((r)=>ir(r))}function i_(n){return fn(n,"Constructor")&&n.type==="Constructor"&&Hn(n.$id)&&jn(n.parameters)&&n.parameters.every((r)=>ir(r))&&ir(n.returns)}function s_(n){return fn(n,"Date")&&n.type==="Date"&&Hn(n.$id)&&Yn(n.exclusiveMaximumTimestamp)&&Yn(n.exclusiveMinimumTimestamp)&&Yn(n.maximumTimestamp)&&Yn(n.minimumTimestamp)&&Yn(n.multipleOfTimestamp)}function l_(n){return fn(n,"Function")&&n.type==="Function"&&Hn(n.$id)&&jn(n.parameters)&&n.parameters.every((r)=>ir(r))&&ir(n.returns)}function gk(n){return fn(n,"Import")&&bi(n,"$defs")&&Dn(n.$defs)&&wi(n.$defs)&&bi(n,"$ref")&&Wn(n.$ref)&&n.$ref in n.$defs}function f_(n){return fn(n,"Integer")&&n.type==="integer"&&Hn(n.$id)&&Yn(n.exclusiveMaximum)&&Yn(n.exclusiveMinimum)&&Yn(n.maximum)&&Yn(n.minimum)&&Yn(n.multipleOf)}function wi(n){return Dn(n)&&Object.entries(n).every(([r,t])=>Uf(r)&&ir(t))}function d_(n){return fn(n,"Intersect")&&(Wn(n.type)&&n.type!=="object"?!1:!0)&&jn(n.allOf)&&n.allOf.every((r)=>ir(r)&&!W_(r))&&Hn(n.type)&&(Bf(n.unevaluatedProperties)||yg(n.unevaluatedProperties))&&Hn(n.$id)}function b_(n){return fn(n,"Iterator")&&n.type==="Iterator"&&Hn(n.$id)&&ir(n.items)}function fn(n,r){return Dn(n)&&C in n&&n[C]===r}function u_(n){return Xa(n)&&Wn(n.const)}function g_(n){return Xa(n)&&Lr(n.const)}function _k(n){return Xa(n)&&Gt(n.const)}function Xa(n){return fn(n,"Literal")&&Hn(n.$id)&&__(n.const)}function __(n){return Gt(n)||Lr(n)||Wn(n)}function m_(n){return fn(n,"MappedKey")&&jn(n.keys)&&n.keys.every((r)=>Lr(r)||Wn(r))}function w_(n){return fn(n,"MappedResult")&&wi(n.properties)}function h_(n){return fn(n,"Never")&&Dn(n.not)&&Object.getOwnPropertyNames(n.not).length===0}function $_(n){return fn(n,"Not")&&ir(n.not)}function k_(n){return fn(n,"Null")&&n.type==="null"&&Hn(n.$id)}function R_(n){return fn(n,"Number")&&n.type==="number"&&Hn(n.$id)&&Yn(n.exclusiveMaximum)&&Yn(n.exclusiveMinimum)&&Yn(n.maximum)&&Yn(n.minimum)&&Yn(n.multipleOf)}function A_(n){return fn(n,"Object")&&n.type==="object"&&Hn(n.$id)&&wi(n.properties)&&Zg(n.additionalProperties)&&Yn(n.minProperties)&&Yn(n.maxProperties)}function S_(n){return fn(n,"Promise")&&n.type==="Promise"&&Hn(n.$id)&&ir(n.item)}function E_(n){return fn(n,"Record")&&n.type==="object"&&Hn(n.$id)&&Zg(n.additionalProperties)&&Dn(n.patternProperties)&&((r)=>{let t=Object.getOwnPropertyNames(r.patternProperties);return t.length===1&&Ig(t[0])&&Dn(r.patternProperties)&&ir(r.patternProperties[t[0]])})(n)}function mk(n){return Dn(n)&&Tr in n&&n[Tr]==="Recursive"}function M_(n){return fn(n,"Ref")&&Hn(n.$id)&&Wn(n.$ref)}function D_(n){return fn(n,"RegExp")&&Hn(n.$id)&&Wn(n.source)&&Wn(n.flags)&&Yn(n.maxLength)&&Yn(n.minLength)}function H_(n){return fn(n,"String")&&n.type==="string"&&Hn(n.$id)&&Yn(n.minLength)&&Yn(n.maxLength)&&fk(n.pattern)&&dk(n.format)}function z_(n){return fn(n,"Symbol")&&n.type==="symbol"&&Hn(n.$id)}function U_(n){return fn(n,"TemplateLiteral")&&n.type==="string"&&Wn(n.pattern)&&n.pattern[0]==="^"&&n.pattern[n.pattern.length-1]==="$"}function B_(n){return fn(n,"This")&&Hn(n.$id)&&Wn(n.$ref)}function W_(n){return Dn(n)&&Zn in n}function Y_(n){return fn(n,"Tuple")&&n.type==="array"&&Hn(n.$id)&&Lr(n.minItems)&&Lr(n.maxItems)&&n.minItems===n.maxItems&&(Kn(n.items)&&Kn(n.additionalItems)&&n.minItems===0||jn(n.items)&&n.items.every((r)=>ir(r)))}function J_(n){return fn(n,"Undefined")&&n.type==="undefined"&&Hn(n.$id)}function wk(n){return Wf(n)&&n.anyOf.every((r)=>u_(r)||g_(r))}function Wf(n){return fn(n,"Union")&&Hn(n.$id)&&Dn(n)&&jn(n.anyOf)&&n.anyOf.every((r)=>ir(r))}function X_(n){return fn(n,"Uint8Array")&&n.type==="Uint8Array"&&Hn(n.$id)&&Yn(n.minByteLength)&&Yn(n.maxByteLength)}function x_(n){return fn(n,"Unknown")&&Hn(n.$id)}function L_(n){return fn(n,"Unsafe")}function V_(n){return fn(n,"Void")&&n.type==="void"&&Hn(n.$id)}function C_(n){return Dn(n)&&C in n&&Wn(n[C])&&!lk.includes(n[C])}function ir(n){return Dn(n)&&(n_(n)||r_(n)||t_(n)||a_(n)||c_(n)||o_(n)||e_(n)||i_(n)||s_(n)||l_(n)||f_(n)||d_(n)||b_(n)||Xa(n)||m_(n)||w_(n)||h_(n)||$_(n)||k_(n)||R_(n)||A_(n)||S_(n)||E_(n)||M_(n)||D_(n)||H_(n)||z_(n)||U_(n)||B_(n)||Y_(n)||J_(n)||Wf(n)||X_(n)||x_(n)||L_(n)||V_(n)||C_(n))}var vg,lk;var Q_=f(()=>{y();Mt();vg=class vg extends fr{};lk=["Argument","Any","Array","AsyncIterator","BigInt","Boolean","Computed","Constructor","Date","Enum","Function","Integer","Intersect","Iterator","Literal","MappedKey","MappedResult","Not","Null","Number","Object","Promise","Record","Ref","RegExp","String","Symbol","TemplateLiteral","This","Tuple","Undefined","Union","Uint8Array","Unknown","Void"]});var Yf=f(()=>{hn();Q_()});var P_=()=>{};var G_="(true|false)",hi="(0|[1-9][0-9]*)",q_="(.*)",_o="^(0|[1-9][0-9]*)$",mo="^(.*)$",N_="^(?!.*)$";var xa=()=>{};var O_=()=>{};var F_=()=>{};var j_=f(()=>{O_();F_()});function K_(n,r){return n.includes(r)}function p_(n){return[...new Set(n)]}function kk(n,r){return n.filter((t)=>r.includes(t))}function Rk(n,r){return n.reduce((t,o)=>{return kk(t,o)},r)}function T_(n){return n.length===1?n[0]:n.length>1?Rk(n.slice(1),n[0]):[]}function v_(n){let r=[];for(let t of n)r.push(...t);return r}var La=()=>{};function wo(n){return D({[C]:"Any"},n)}var I_=f(()=>{Nt();y()});var Va=f(()=>{I_()});function Xc(n,r){return D({[C]:"Array",type:"array",items:n},r)}var Z_=f(()=>{I();y()});var Ca=f(()=>{Z_()});function y_(n){return D({[C]:"Argument",index:n})}var nm=f(()=>{I();y()});var Jf=f(()=>{nm()});function xc(n,r){return D({[C]:"AsyncIterator",type:"AsyncIterator",items:n},r)}var rm=f(()=>{y();I()});var Qa=f(()=>{rm()});function Jn(n,r,t){return D({[C]:"Computed",target:n,parameters:r},t)}var tm=f(()=>{Nt();Ua()});var ho=f(()=>{tm()});function Ak(n,r){let{[r]:t,...o}=n;return o}function Qn(n,r){return r.reduce((t,o)=>Ak(t,o),n)}var Kt=()=>{};function _n(n){return D({[C]:"Never",not:{}},n)}var om=f(()=>{I();y()});var br=f(()=>{om()});var cm=()=>{};function $n(n){return D({[C]:"MappedResult",properties:n})}var Xf=f(()=>{I();y()});function Lc(n,r,t){return D({[C]:"Constructor",type:"Constructor",parameters:n,returns:r},t)}var am=f(()=>{I();y()});var Pa=f(()=>{am()});function Dt(n,r,t){return D({[C]:"Function",type:"Function",parameters:n,returns:r},t)}var em=f(()=>{I();y()});var To=f(()=>{em()});function Ga(n,r){return D({[C]:"Union",anyOf:n},r)}var xf=f(()=>{I();y()});function Sk(n){return n.some((r)=>Dr(r))}function im(n){return n.map((r)=>Dr(r)?Ek(r):r)}function Ek(n){return Qn(n,[dr])}function Mk(n,r){return Sk(n)?wr(Ga(im(n),r)):Ga(im(n),r)}function Ht(n,r){return n.length===1?D(n[0],r):n.length===0?_n(r):Mk(n,r)}var sm=f(()=>{I();y();Kt();br();pt();xf();hn()});var lm=()=>{};function Sn(n,r){return n.length===0?_n(r):n.length===1?D(n[0],r):Ga(n,r)}var fm=f(()=>{br();I();xf()});var yn=f(()=>{sm();lm();fm()});function Dk(n){return n.replace(/\\\$/g,"$").replace(/\\\*/g,"*").replace(/\\\^/g,"^").replace(/\\\|/g,"|").replace(/\\\(/g,"(").replace(/\\\)/g,")")}function Vf(n,r,t){return n[r]===t&&n.charCodeAt(r-1)!==92}function Tt(n,r){return Vf(n,r,"(")}function qa(n,r){return Vf(n,r,")")}function dm(n,r){return Vf(n,r,"|")}function Hk(n){if(!(Tt(n,0)&&qa(n,n.length-1)))return!1;let r=0;for(let t=0;t<n.length;t++){if(Tt(n,t))r+=1;if(qa(n,t))r-=1;if(r===0&&t!==n.length-1)return!1}return!0}function zk(n){return n.slice(1,n.length-1)}function Uk(n){let r=0;for(let t=0;t<n.length;t++){if(Tt(n,t))r+=1;if(qa(n,t))r-=1;if(dm(n,t)&&r===0)return!0}return!1}function Bk(n){for(let r=0;r<n.length;r++)if(Tt(n,r))return!0;return!1}function Wk(n){let[r,t]=[0,0],o=[];for(let a=0;a<n.length;a++){if(Tt(n,a))r+=1;if(qa(n,a))r-=1;if(dm(n,a)&&r===0){let e=n.slice(t,a);if(e.length>0)o.push(Vc(e));t=a+1}}let c=n.slice(t);if(c.length>0)o.push(Vc(c));if(o.length===0)return{type:"const",const:""};if(o.length===1)return o[0];return{type:"or",expr:o}}function Yk(n){function r(c,a){if(!Tt(c,a))throw new Lf("TemplateLiteralParser: Index must point to open parens");let e=0;for(let i=a;i<c.length;i++){if(Tt(c,i))e+=1;if(qa(c,i))e-=1;if(e===0)return[a,i]}throw new Lf("TemplateLiteralParser: Unclosed group parens in expression")}function t(c,a){for(let e=a;e<c.length;e++)if(Tt(c,e))return[a,e];return[a,c.length]}let o=[];for(let c=0;c<n.length;c++)if(Tt(n,c)){let[a,e]=r(n,c),i=n.slice(a,e+1);o.push(Vc(i)),c=e}else{let[a,e]=t(n,c),i=n.slice(a,e);if(i.length>0)o.push(Vc(i));c=e-1}return o.length===0?{type:"const",const:""}:o.length===1?o[0]:{type:"and",expr:o}}function Vc(n){return Hk(n)?Vc(zk(n)):Uk(n)?Wk(n):Bk(n)?Yk(n):{type:"const",const:Dk(n)}}function Cc(n){return Vc(n.slice(1,n.length-1))}var Lf;var $i=f(()=>{Mt();Lf=class Lf extends fr{}});function Jk(n){return n.type==="or"&&n.expr.length===2&&n.expr[0].type==="const"&&n.expr[0].const==="0"&&n.expr[1].type==="const"&&n.expr[1].const==="[1-9][0-9]*"}function Xk(n){return n.type==="or"&&n.expr.length===2&&n.expr[0].type==="const"&&n.expr[0].const==="true"&&n.expr[1].type==="const"&&n.expr[1].const==="false"}function xk(n){return n.type==="const"&&n.const===".*"}function vo(n){return Jk(n)||xk(n)?!1:Xk(n)?!0:n.type==="and"?n.expr.every((r)=>vo(r)):n.type==="or"?n.expr.every((r)=>vo(r)):n.type==="const"?!0:(()=>{throw new bm("Unknown expression type")})()}function um(n){let r=Cc(n.pattern);return vo(r)}var bm;var Cf=f(()=>{$i();Mt();bm=class bm extends fr{}});function*_m(n){if(n.length===1)return yield*n[0];for(let r of n[0])for(let t of _m(n.slice(1)))yield`${r}${t}`}function*Lk(n){return yield*_m(n.expr.map((r)=>[...Na(r)]))}function*Vk(n){for(let r of n.expr)yield*Na(r)}function*Ck(n){return yield n.const}function*Na(n){return n.type==="and"?yield*Lk(n):n.type==="or"?yield*Vk(n):n.type==="const"?yield*Ck(n):(()=>{throw new gm("Unknown expression")})()}function ki(n){let r=Cc(n.pattern);return vo(r)?[...Na(r)]:[]}var gm;var Qf=f(()=>{Cf();$i();Mt();gm=class gm extends fr{}});function Rn(n,r){return D({[C]:"Literal",const:n,type:typeof n},r)}var mm=f(()=>{I();y()});var Hr=f(()=>{mm()});function Ri(n){return D({[C]:"Boolean",type:"boolean"},n)}var wm=f(()=>{y();Nt()});var Ai=f(()=>{wm()});function Qc(n){return D({[C]:"BigInt",type:"bigint"},n)}var hm=f(()=>{y();Nt()});var Oa=f(()=>{hm()});function vr(n){return D({[C]:"Number",type:"number"},n)}var $m=f(()=>{I();y()});var Io=f(()=>{$m()});function mt(n){return D({[C]:"String",type:"string"},n)}var km=f(()=>{I();y()});var Pc=f(()=>{km()});function*Qk(n){let r=n.trim().replace(/"|'/g,"");return r==="boolean"?yield Ri():r==="number"?yield vr():r==="bigint"?yield Qc():r==="string"?yield mt():yield(()=>{let t=r.split("|").map((o)=>Rn(o.trim()));return t.length===0?_n():t.length===1?t[0]:Ht(t)})()}function*Pk(n){if(n[1]!=="{"){let r=Rn("$"),t=Pf(n.slice(1));return yield*[r,...t]}for(let r=2;r<n.length;r++)if(n[r]==="}"){let t=Qk(n.slice(2,r)),o=Pf(n.slice(r+1));return yield*[...t,...o]}yield Rn(n)}function*Pf(n){for(let r=0;r<n.length;r++)if(n[r]==="$"){let t=Rn(n.slice(0,r)),o=Pk(n.slice(r));return yield*[t,...o]}yield Rn(n)}function Rm(n){return[...Pf(n)]}var Gf=f(()=>{Hr();Ai();Oa();Io();Pc();yn();br()});function Gk(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Sm(n,r){return Qr(n)?n.pattern.slice(1,n.pattern.length-1):gn(n)?`(${n.anyOf.map((t)=>Sm(t,r)).join("|")})`:_t(n)?`${r}${hi}`:gt(n)?`${r}${hi}`:Fo(n)?`${r}${hi}`:Ft(n)?`${r}${q_}`:Vr(n)?`${r}${Gk(n.const.toString())}`:Ot(n)?`${r}${G_}`:(()=>{throw new Am(`Unexpected Kind '${n[C]}'`)})()}function qf(n){return`^${n.map((r)=>Sm(r,"")).join("")}$`}var Am;var Nf=f(()=>{xa();y();Mt();hn();Am=class Am extends fr{}});function Zo(n){let t=ki(n).map((o)=>Rn(o));return Ht(t)}var Em=f(()=>{yn();Hr();Qf()});function Si(n,r){let t=Wn(n)?qf(Rm(n)):qf(n);return D({[C]:"TemplateLiteral",type:"string",pattern:t},r)}var Mm=f(()=>{I();Gf();Nf();y()});var vt=f(()=>{Cf();Qf();Gf();$i();Nf();Em();Mm()});function qk(n){return ki(n).map((t)=>t.toString())}function Nk(n){let r=[];for(let t of n)r.push(...zr(t));return r}function Ok(n){return[n.toString()]}function zr(n){return[...new Set(Qr(n)?qk(n):gn(n)?Nk(n.anyOf):Vr(n)?Ok(n.const):_t(n)?["[number]"]:gt(n)?["[number]"]:[])]}var Ei=f(()=>{vt();hn()});function Fk(n,r,t){let o={};for(let c of Object.getOwnPropertyNames(r))o[c]=$o(n,zr(r[c]),t);return o}function jk(n,r,t){return Fk(n,r.properties,t)}function Dm(n,r,t){let o=jk(n,r,t);return $n(o)}var Of=f(()=>{cr();Ei();zt()});function zm(n,r){return n.map((t)=>Um(t,r))}function Kk(n){return n.filter((r)=>!uo(r))}function pk(n,r){return Mi(Kk(zm(n,r)))}function Tk(n){return n.some((r)=>uo(r))?[]:n}function vk(n,r){return Ht(Tk(zm(n,r)))}function Ik(n,r){return r in n?n[r]:r==="[number]"?Ht(n):_n()}function Zk(n,r){return r==="[number]"?n:_n()}function yk(n,r){return r in n?n[r]:_n()}function Um(n,r){return Cn(n)?pk(n.allOf,r):gn(n)?vk(n.anyOf,r):Pr(n)?Ik(n.items??[],r):ft(n)?Zk(n.items,r):pn(n)?yk(n.properties,r):_n()}function Ff(n,r){return r.map((t)=>Um(n,t))}function Hm(n,r){return Ht(Ff(n,r))}function $o(n,r,t){if(Gn(n)||Gn(r)){if(!Gr(n)||!Gr(r))throw new fr("Index types using Ref parameters require both Type and Key to be of TSchema");return Jn("Index",[n,r])}if(xn(r))return Dm(n,r,t);if(Cr(r))return Bm(n,r,t);return D(Gr(r)?Hm(n,zr(r)):Hm(n,r),t)}var jf=f(()=>{I();Mt();ho();br();Ir();yn();Ei();Kf();Of();hn()});function nR(n,r,t){return{[r]:$o(n,[r],Xn(t))}}function rR(n,r,t){return r.reduce((o,c)=>{return{...o,...nR(n,c,t)}},{})}function tR(n,r,t){return rR(n,r.keys,t)}function Bm(n,r,t){let o=tR(n,r,t);return $n(o)}var Kf=f(()=>{jf();cr();Mr()});var zt=f(()=>{Kf();Of();Ei();jf()});function Gc(n,r){return D({[C]:"Iterator",type:"Iterator",items:n},r)}var Wm=f(()=>{I();y()});var Fa=f(()=>{Wm()});function oR(n){return globalThis.Object.keys(n).filter((r)=>!Dr(n[r]))}function cR(n,r){let t=oR(n),o=t.length>0?{[C]:"Object",type:"object",required:t,properties:n}:{[C]:"Object",type:"object",properties:n};return D(o,r)}var zn;var Ym=f(()=>{I();y();hn();zn=cR});var qr=f(()=>{Ym()});function Di(n,r){return D({[C]:"Promise",type:"Promise",item:n},r)}var Jm=f(()=>{I();y()});var Hi=f(()=>{Jm()});function aR(n){return D(Qn(n,[lt]))}function eR(n){return D({...n,[lt]:"Readonly"})}function iR(n,r){return r===!1?aR(n):eR(n)}function Ur(n,r){let t=r??!0;return xn(n)?Xm(n,t):iR(n,t)}var pf=f(()=>{I();y();Kt();Tf();hn()});function sR(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(n))t[o]=Ur(n[o],r);return t}function lR(n,r){return sR(n.properties,r)}function Xm(n,r){let t=lR(n,r);return $n(t)}var Tf=f(()=>{cr();pf()});var yo=f(()=>{Tf();pf()});function Zr(n,r){return D(n.length>0?{[C]:"Tuple",type:"array",items:n,additionalItems:!1,minItems:n.length,maxItems:n.length}:{[C]:"Tuple",type:"array",minItems:n.length,maxItems:n.length},r)}var xm=f(()=>{I();y()});var ko=f(()=>{xm()});function Lm(n,r){return n in r?yr(n,r[n]):$n(r)}function fR(n){return{[n]:Rn(n)}}function dR(n){let r={};for(let t of n)r[t]=Rn(t);return r}function bR(n,r){return K_(r,n)?fR(n):dR(r)}function uR(n,r){let t=bR(n,r);return Lm(n,t)}function ja(n,r){return r.map((t)=>yr(n,t))}function gR(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(r))t[o]=yr(n,r[o]);return t}function yr(n,r){let t={...r};return Dr(r)?wr(yr(n,Qn(r,[dr]))):Jc(r)?Ur(yr(n,Qn(r,[lt]))):xn(r)?Lm(n,r.properties):Cr(r)?uR(n,r.keys):bt(r)?Lc(ja(n,r.parameters),yr(n,r.returns),t):ut(r)?Dt(ja(n,r.parameters),yr(n,r.returns),t):Oo(r)?xc(yr(n,r.items),t):jo(r)?Gc(yr(n,r.items),t):Cn(r)?hr(ja(n,r.allOf),t):gn(r)?Sn(ja(n,r.anyOf),t):Pr(r)?Zr(ja(n,r.items??[]),t):pn(r)?zn(gR(n,r.properties),t):ft(r)?Xc(yr(n,r.items),t):Ko(r)?Di(yr(n,r.item),t):r}function _R(n,r){let t={};for(let o of n)t[o]=yr(o,r);return t}function Vm(n,r,t){let o=Gr(n)?zr(n):n,c=r({[C]:"MappedKey",keys:o}),a=_R(o,c);return zn(a,t)}var Cm=f(()=>{y();Kt();Ca();Qa();Pa();To();zt();Ir();Fa();Hr();qr();pt();Hi();yo();ko();yn();La();Xf();hn()});var cr=f(()=>{cm();Xf();Cm()});function mR(n){return D(Qn(n,[dr]))}function wR(n){return D({...n,[dr]:"Optional"})}function hR(n,r){return r===!1?mR(n):wR(n)}function wr(n,r){let t=r??!0;return xn(n)?Qm(n,t):hR(n,t)}var vf=f(()=>{I();y();Kt();If();hn()});function $R(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(n))t[o]=wr(n[o],r);return t}function kR(n,r){return $R(n.properties,r)}function Qm(n,r){let t=kR(n,r);return $n(t)}var If=f(()=>{cr();vf()});var pt=f(()=>{If();vf()});function Ka(n,r={}){let t=n.every((c)=>pn(c)),o=Gr(r.unevaluatedProperties)?{unevaluatedProperties:r.unevaluatedProperties}:{};return D(r.unevaluatedProperties===!1||Gr(r.unevaluatedProperties)||t?{...o,[C]:"Intersect",type:"object",allOf:n}:{...o,[C]:"Intersect",allOf:n},r)}var Zf=f(()=>{I();y();hn()});function RR(n){return n.every((r)=>Dr(r))}function AR(n){return Qn(n,[dr])}function Pm(n){return n.map((r)=>Dr(r)?AR(r):r)}function SR(n,r){return RR(n)?wr(Ka(Pm(n),r)):Ka(Pm(n),r)}function Mi(n,r={}){if(n.length===1)return D(n[0],r);if(n.length===0)return _n(r);if(n.some((t)=>go(t)))throw Error("Cannot intersect transform types");return SR(n,r)}var Gm=f(()=>{y();I();Kt();br();pt();Zf();hn()});var qm=()=>{};function hr(n,r){if(n.length===1)return D(n[0],r);if(n.length===0)return _n(r);if(n.some((t)=>go(t)))throw Error("Cannot intersect transform types");return Ka(n,r)}var Nm=f(()=>{I();br();Zf();hn()});var Ir=f(()=>{Gm();qm();Nm()});function Ut(...n){let[r,t]=typeof n[0]==="string"?[n[0],n[1]]:[n[0].$id,n[1]];if(typeof r!=="string")throw new fr("Ref: $ref must be a string");return D({[C]:"Ref",$ref:r},t)}var Om=f(()=>{Mt();I();y()});var nc=f(()=>{Om()});function ER(n,r){return Jn("Awaited",[Jn(n,r)])}function MR(n){return Jn("Awaited",[Ut(n)])}function DR(n){return hr(Fm(n))}function HR(n){return Sn(Fm(n))}function zR(n){return qc(n)}function Fm(n){return n.map((r)=>qc(r))}function qc(n,r){return D(dt(n)?ER(n.target,n.parameters):Cn(n)?DR(n.allOf):gn(n)?HR(n.anyOf):Ko(n)?zR(n.item):Gn(n)?MR(n.$ref):n,r)}var jm=f(()=>{I();ho();Ir();yn();nc();hn()});var zi=f(()=>{jm()});function Km(n){let r=[];for(let t of n)r.push(pa(t));return r}function UR(n){let r=Km(n);return v_(r)}function BR(n){let r=Km(n);return T_(r)}function WR(n){return n.map((r,t)=>t.toString())}function YR(n){return["[number]"]}function JR(n){return globalThis.Object.getOwnPropertyNames(n)}function XR(n){if(!xR)return[];return globalThis.Object.getOwnPropertyNames(n).map((t)=>{return t[0]==="^"&&t[t.length-1]==="$"?t.slice(1,t.length-1):t})}function pa(n){return Cn(n)?UR(n.allOf):gn(n)?BR(n.anyOf):Pr(n)?WR(n.items??[]):ft(n)?YR(n.items):pn(n)?JR(n.properties):po(n)?XR(n.patternProperties):[]}var xR=!1;var yf=f(()=>{La();hn()});function LR(n,r){return Jn("KeyOf",[Jn(n,r)])}function VR(n){return Jn("KeyOf",[Ut(n)])}function CR(n,r){let t=pa(n),o=QR(t),c=Ht(o);return D(c,r)}function QR(n){return n.map((r)=>r==="[number]"?vr():Rn(r))}function Nc(n,r){return dt(n)?LR(n.target,n.parameters):Gn(n)?VR(n.$ref):xn(n)?pm(n,r):CR(n,r)}var n0=f(()=>{I();Hr();Io();ho();nc();yf();yn();r0();hn()});function PR(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(n))t[o]=Nc(n[o],Xn(r));return t}function GR(n,r){return PR(n.properties,r)}function pm(n,r){let t=GR(n,r);return $n(t)}var r0=f(()=>{cr();n0();Mr()});var Tm=()=>{};var Ta=f(()=>{r0();Tm();yf();n0()});function qR(n){let r=[];for(let t of n)r.push(...pa(t));return p_(r)}function NR(n){return n.filter((r)=>!uo(r))}function OR(n,r){let t=[];for(let o of n)t.push(...Ff(o,[r]));return NR(t)}function FR(n,r){let t={};for(let o of r)t[o]=Mi(OR(n,o));return t}function vm(n,r){let t=qR(n),o=FR(n,t);return zn(o,r)}var Im=f(()=>{Ir();zt();Ta();qr();La();hn()});var t0=f(()=>{Im()});function Ui(n){return D({[C]:"Date",type:"Date"},n)}var Zm=f(()=>{y();I()});var Bi=f(()=>{Zm()});function Wi(n){return D({[C]:"Null",type:"null"},n)}var ym=f(()=>{I();y()});var Yi=f(()=>{ym()});function Ji(n){return D({[C]:"Symbol",type:"symbol"},n)}var nw=f(()=>{I();y()});var Xi=f(()=>{nw()});function xi(n){return D({[C]:"Undefined",type:"undefined"},n)}var rw=f(()=>{I();y()});var Li=f(()=>{rw()});function Vi(n){return D({[C]:"Uint8Array",type:"Uint8Array"},n)}var tw=f(()=>{I();y()});var Ci=f(()=>{tw()});function Ro(n){return D({[C]:"Unknown"},n)}var ow=f(()=>{I();y()});var Oc=f(()=>{ow()});function jR(n){return n.map((r)=>o0(r,!1))}function KR(n){let r={};for(let t of globalThis.Object.getOwnPropertyNames(n))r[t]=Ur(o0(n[t],!1));return r}function Qi(n,r){return r===!0?n:Ur(n)}function o0(n,r){return kf(n)?Qi(wo(),r):Af(n)?Qi(wo(),r):jn(n)?Ur(Zr(jR(n))):qt(n)?Vi():No(n)?Ui():Dn(n)?Qi(zn(KR(n)),r):Rf(n)?Qi(Dt([],Ro()),r):Kn(n)?xi():Sf(n)?Wi():Ef(n)?Ji():Da(n)?Qc():Lr(n)?Rn(n):Gt(n)?Rn(n):Wn(n)?Rn(n):zn({})}function cw(n,r){return D(o0(n,!0),r)}var aw=f(()=>{Va();Oa();Bi();To();Hr();Yi();qr();Xi();ko();yo();Li();Ci();Oc();Nt()});var c0=f(()=>{aw()});function ew(n,r){return bt(n)?Zr(n.parameters,r):_n(r)}var iw=f(()=>{ko();br();hn()});var a0=f(()=>{iw()});function sw(n,r){if(Kn(n))throw Error("Enum undefined or empty");let t=globalThis.Object.getOwnPropertyNames(n).filter((a)=>isNaN(a)).map((a)=>n[a]),c=[...new Set(t)].map((a)=>Rn(a));return Sn(c,{...r,[Tr]:"Enum"})}var lw=f(()=>{Hr();y();yn()});var e0=f(()=>{lw()});function nt(n){return n===H.False?n:H.True}function Fc(n){throw new gw(n)}function nr(n){return m.IsNever(n)||m.IsIntersect(n)||m.IsUnion(n)||m.IsUnknown(n)||m.IsAny(n)}function rr(n,r){return m.IsNever(r)?ww(n,r):m.IsIntersect(r)?Pi(n,r):m.IsUnion(r)?d0(n,r):m.IsUnknown(r)?Rw(n,r):m.IsAny(r)?f0(n,r):Fc("StructuralRight")}function f0(n,r){return H.True}function pR(n,r){return m.IsIntersect(r)?Pi(n,r):m.IsUnion(r)&&r.anyOf.some((t)=>m.IsAny(t)||m.IsUnknown(t))?H.True:m.IsUnion(r)?H.Union:m.IsUnknown(r)?H.True:m.IsAny(r)?H.True:H.Union}function TR(n,r){return m.IsUnknown(n)?H.False:m.IsAny(n)?H.Union:m.IsNever(n)?H.True:H.False}function vR(n,r){return m.IsObject(r)&&Gi(r)?H.True:nr(r)?rr(n,r):!m.IsArray(r)?H.False:nt(Un(n.items,r.items))}function IR(n,r){return nr(r)?rr(n,r):!m.IsAsyncIterator(r)?H.False:nt(Un(n.items,r.items))}function ZR(n,r){return nr(r)?rr(n,r):m.IsObject(r)?$r(n,r):m.IsRecord(r)?rt(n,r):m.IsBigInt(r)?H.True:H.False}function _w(n,r){return m.IsLiteralBoolean(n)?H.True:m.IsBoolean(n)?H.True:H.False}function yR(n,r){return nr(r)?rr(n,r):m.IsObject(r)?$r(n,r):m.IsRecord(r)?rt(n,r):m.IsBoolean(r)?H.True:H.False}function n3(n,r){return nr(r)?rr(n,r):m.IsObject(r)?$r(n,r):!m.IsConstructor(r)?H.False:n.parameters.length>r.parameters.length?H.False:!n.parameters.every((t,o)=>nt(Un(r.parameters[o],t))===H.True)?H.False:nt(Un(n.returns,r.returns))}function r3(n,r){return nr(r)?rr(n,r):m.IsObject(r)?$r(n,r):m.IsRecord(r)?rt(n,r):m.IsDate(r)?H.True:H.False}function t3(n,r){return nr(r)?rr(n,r):m.IsObject(r)?$r(n,r):!m.IsFunction(r)?H.False:n.parameters.length>r.parameters.length?H.False:!n.parameters.every((t,o)=>nt(Un(r.parameters[o],t))===H.True)?H.False:nt(Un(n.returns,r.returns))}function mw(n,r){return m.IsLiteral(n)&&mr.IsNumber(n.const)?H.True:m.IsNumber(n)||m.IsInteger(n)?H.True:H.False}function o3(n,r){return m.IsInteger(r)||m.IsNumber(r)?H.True:nr(r)?rr(n,r):m.IsObject(r)?$r(n,r):m.IsRecord(r)?rt(n,r):H.False}function Pi(n,r){return r.allOf.every((t)=>Un(n,t)===H.True)?H.True:H.False}function c3(n,r){return n.allOf.some((t)=>Un(t,r)===H.True)?H.True:H.False}function a3(n,r){return nr(r)?rr(n,r):!m.IsIterator(r)?H.False:nt(Un(n.items,r.items))}function e3(n,r){return m.IsLiteral(r)&&r.const===n.const?H.True:nr(r)?rr(n,r):m.IsObject(r)?$r(n,r):m.IsRecord(r)?rt(n,r):m.IsString(r)?kw(n,r):m.IsNumber(r)?hw(n,r):m.IsInteger(r)?mw(n,r):m.IsBoolean(r)?_w(n,r):H.False}function ww(n,r){return H.False}function i3(n,r){return H.True}function fw(n){let[r,t]=[n,0];while(!0){if(!m.IsNot(r))break;r=r.not,t+=1}return t%2===0?r:Ro()}function s3(n,r){return m.IsNot(n)?Un(fw(n),r):m.IsNot(r)?Un(n,fw(r)):Fc("Invalid fallthrough for Not")}function l3(n,r){return nr(r)?rr(n,r):m.IsObject(r)?$r(n,r):m.IsRecord(r)?rt(n,r):m.IsNull(r)?H.True:H.False}function hw(n,r){return m.IsLiteralNumber(n)?H.True:m.IsNumber(n)||m.IsInteger(n)?H.True:H.False}function f3(n,r){return nr(r)?rr(n,r):m.IsObject(r)?$r(n,r):m.IsRecord(r)?rt(n,r):m.IsInteger(r)||m.IsNumber(r)?H.True:H.False}function Br(n,r){return Object.getOwnPropertyNames(n.properties).length===r}function dw(n){return Gi(n)}function bw(n){return Br(n,0)||Br(n,1)&&"description"in n.properties&&m.IsUnion(n.properties.description)&&n.properties.description.anyOf.length===2&&(m.IsString(n.properties.description.anyOf[0])&&m.IsUndefined(n.properties.description.anyOf[1])||m.IsString(n.properties.description.anyOf[1])&&m.IsUndefined(n.properties.description.anyOf[0]))}function i0(n){return Br(n,0)}function uw(n){return Br(n,0)}function d3(n){return Br(n,0)}function b3(n){return Br(n,0)}function u3(n){return Gi(n)}function g3(n){let r=vr();return Br(n,0)||Br(n,1)&&"length"in n.properties&&nt(Un(n.properties.length,r))===H.True}function _3(n){return Br(n,0)}function Gi(n){let r=vr();return Br(n,0)||Br(n,1)&&"length"in n.properties&&nt(Un(n.properties.length,r))===H.True}function m3(n){let r=Dt([wo()],wo());return Br(n,0)||Br(n,1)&&"then"in n.properties&&nt(Un(n.properties.then,r))===H.True}function $w(n,r){return Un(n,r)===H.False?H.False:m.IsOptional(n)&&!m.IsOptional(r)?H.False:H.True}function $r(n,r){return m.IsUnknown(n)?H.False:m.IsAny(n)?H.Union:m.IsNever(n)||m.IsLiteralString(n)&&dw(r)||m.IsLiteralNumber(n)&&i0(r)||m.IsLiteralBoolean(n)&&uw(r)||m.IsSymbol(n)&&bw(r)||m.IsBigInt(n)&&d3(r)||m.IsString(n)&&dw(r)||m.IsSymbol(n)&&bw(r)||m.IsNumber(n)&&i0(r)||m.IsInteger(n)&&i0(r)||m.IsBoolean(n)&&uw(r)||m.IsUint8Array(n)&&u3(r)||m.IsDate(n)&&b3(r)||m.IsConstructor(n)&&_3(r)||m.IsFunction(n)&&g3(r)?H.True:m.IsRecord(n)&&m.IsString(s0(n))?(()=>{return r[Tr]==="Record"?H.True:H.False})():m.IsRecord(n)&&m.IsNumber(s0(n))?(()=>{return Br(r,0)?H.True:H.False})():H.False}function w3(n,r){return nr(r)?rr(n,r):m.IsRecord(r)?rt(n,r):!m.IsObject(r)?H.False:(()=>{for(let t of Object.getOwnPropertyNames(r.properties)){if(!(t in n.properties)&&!m.IsOptional(r.properties[t]))return H.False;if(m.IsOptional(r.properties[t]))return H.True;if($w(n.properties[t],r.properties[t])===H.False)return H.False}return H.True})()}function h3(n,r){return nr(r)?rr(n,r):m.IsObject(r)&&m3(r)?H.True:!m.IsPromise(r)?H.False:nt(Un(n.item,r.item))}function s0(n){return _o in n.patternProperties?vr():(mo in n.patternProperties)?mt():Fc("Unknown record key pattern")}function l0(n){return _o in n.patternProperties?n.patternProperties[_o]:(mo in n.patternProperties)?n.patternProperties[mo]:Fc("Unable to get record value schema")}function rt(n,r){let[t,o]=[s0(r),l0(r)];return m.IsLiteralString(n)&&m.IsNumber(t)&&nt(Un(n,o))===H.True?H.True:m.IsUint8Array(n)&&m.IsNumber(t)?Un(n,o):m.IsString(n)&&m.IsNumber(t)?Un(n,o):m.IsArray(n)&&m.IsNumber(t)?Un(n,o):m.IsObject(n)?(()=>{for(let c of Object.getOwnPropertyNames(n.properties))if($w(o,n.properties[c])===H.False)return H.False;return H.True})():H.False}function $3(n,r){return nr(r)?rr(n,r):m.IsObject(r)?$r(n,r):!m.IsRecord(r)?H.False:Un(l0(n),l0(r))}function k3(n,r){let t=m.IsRegExp(n)?mt():n,o=m.IsRegExp(r)?mt():r;return Un(t,o)}function kw(n,r){return m.IsLiteral(n)&&mr.IsString(n.const)?H.True:m.IsString(n)?H.True:H.False}function R3(n,r){return nr(r)?rr(n,r):m.IsObject(r)?$r(n,r):m.IsRecord(r)?rt(n,r):m.IsString(r)?H.True:H.False}function A3(n,r){return nr(r)?rr(n,r):m.IsObject(r)?$r(n,r):m.IsRecord(r)?rt(n,r):m.IsSymbol(r)?H.True:H.False}function S3(n,r){return m.IsTemplateLiteral(n)?Un(Zo(n),r):m.IsTemplateLiteral(r)?Un(n,Zo(r)):Fc("Invalid fallthrough for TemplateLiteral")}function E3(n,r){return m.IsArray(r)&&n.items!==void 0&&n.items.every((t)=>Un(t,r.items)===H.True)}function M3(n,r){return m.IsNever(n)?H.True:m.IsUnknown(n)?H.False:m.IsAny(n)?H.Union:H.False}function D3(n,r){return nr(r)?rr(n,r):m.IsObject(r)&&Gi(r)?H.True:m.IsArray(r)&&E3(n,r)?H.True:!m.IsTuple(r)?H.False:mr.IsUndefined(n.items)&&!mr.IsUndefined(r.items)||!mr.IsUndefined(n.items)&&mr.IsUndefined(r.items)?H.False:mr.IsUndefined(n.items)&&!mr.IsUndefined(r.items)?H.True:n.items.every((t,o)=>Un(t,r.items[o])===H.True)?H.True:H.False}function H3(n,r){return nr(r)?rr(n,r):m.IsObject(r)?$r(n,r):m.IsRecord(r)?rt(n,r):m.IsUint8Array(r)?H.True:H.False}function z3(n,r){return nr(r)?rr(n,r):m.IsObject(r)?$r(n,r):m.IsRecord(r)?rt(n,r):m.IsVoid(r)?W3(n,r):m.IsUndefined(r)?H.True:H.False}function d0(n,r){return r.anyOf.some((t)=>Un(n,t)===H.True)?H.True:H.False}function U3(n,r){return n.anyOf.every((t)=>Un(t,r)===H.True)?H.True:H.False}function Rw(n,r){return H.True}function B3(n,r){return m.IsNever(r)?ww(n,r):m.IsIntersect(r)?Pi(n,r):m.IsUnion(r)?d0(n,r):m.IsAny(r)?f0(n,r):m.IsString(r)?kw(n,r):m.IsNumber(r)?hw(n,r):m.IsInteger(r)?mw(n,r):m.IsBoolean(r)?_w(n,r):m.IsArray(r)?TR(n,r):m.IsTuple(r)?M3(n,r):m.IsObject(r)?$r(n,r):m.IsUnknown(r)?H.True:H.False}function W3(n,r){return m.IsUndefined(n)?H.True:m.IsUndefined(n)?H.True:H.False}function Y3(n,r){return m.IsIntersect(r)?Pi(n,r):m.IsUnion(r)?d0(n,r):m.IsUnknown(r)?Rw(n,r):m.IsAny(r)?f0(n,r):m.IsObject(r)?$r(n,r):m.IsVoid(r)?H.True:H.False}function Un(n,r){return m.IsTemplateLiteral(n)||m.IsTemplateLiteral(r)?S3(n,r):m.IsRegExp(n)||m.IsRegExp(r)?k3(n,r):m.IsNot(n)||m.IsNot(r)?s3(n,r):m.IsAny(n)?pR(n,r):m.IsArray(n)?vR(n,r):m.IsBigInt(n)?ZR(n,r):m.IsBoolean(n)?yR(n,r):m.IsAsyncIterator(n)?IR(n,r):m.IsConstructor(n)?n3(n,r):m.IsDate(n)?r3(n,r):m.IsFunction(n)?t3(n,r):m.IsInteger(n)?o3(n,r):m.IsIntersect(n)?c3(n,r):m.IsIterator(n)?a3(n,r):m.IsLiteral(n)?e3(n,r):m.IsNever(n)?i3(n,r):m.IsNull(n)?l3(n,r):m.IsNumber(n)?f3(n,r):m.IsObject(n)?w3(n,r):m.IsRecord(n)?$3(n,r):m.IsString(n)?R3(n,r):m.IsSymbol(n)?A3(n,r):m.IsTuple(n)?D3(n,r):m.IsPromise(n)?h3(n,r):m.IsUint8Array(n)?H3(n,r):m.IsUndefined(n)?z3(n,r):m.IsUnion(n)?U3(n,r):m.IsUnknown(n)?B3(n,r):m.IsVoid(n)?Y3(n,r):Fc(`Unknown left type operand '${n[C]}'`)}function Ao(n,r){return Un(n,r)}var gw,H;var b0=f(()=>{Va();To();Io();Pc();Oc();vt();xa();y();Mt();Yf();gw=class gw extends fr{};(function(n){n[n.Union=0]="Union",n[n.True=1]="True",n[n.False=2]="False"})(H||(H={}))});function J3(n,r,t,o,c){let a={};for(let e of globalThis.Object.getOwnPropertyNames(n))a[e]=jc(n[e],r,t,o,Xn(c));return a}function X3(n,r,t,o,c){return J3(n.properties,r,t,o,c)}function Aw(n,r,t,o,c){let a=X3(n,r,t,o,c);return $n(a)}var u0=f(()=>{cr();qi();Mr()});function x3(n,r,t,o){let c=Ao(n,r);return c===H.Union?Sn([t,o]):c===H.True?t:o}function jc(n,r,t,o,c){return xn(n)?Aw(n,r,t,o,c):Cr(n)?D(Sw(n,r,t,o,c)):D(x3(n,r,t,o),c)}var qi=f(()=>{I();yn();b0();g0();u0();hn()});function L3(n,r,t,o,c){return{[n]:jc(Rn(n),r,t,o,Xn(c))}}function V3(n,r,t,o,c){return n.reduce((a,e)=>{return{...a,...L3(e,r,t,o,c)}},{})}function C3(n,r,t,o,c){return V3(n.keys,r,t,o,c)}function Sw(n,r,t,o,c){let a=C3(n,r,t,o,c);return $n(a)}var g0=f(()=>{cr();Hr();qi();Mr()});var Ew=()=>{};var va=f(()=>{b0();g0();u0();Ew();qi()});function Mw(n,r){return Kc(Zo(n),r)}var _0=f(()=>{Ni();vt()});function Q3(n,r){let t=n.filter((o)=>Ao(o,r)===H.False);return t.length===1?t[0]:Sn(t)}function Kc(n,r,t={}){if(Qr(n))return D(Mw(n,r),t);if(xn(n))return D(Dw(n,r),t);return D(gn(n)?Q3(n.anyOf,r):Ao(n,r)!==H.False?_n():n,t)}var Ni=f(()=>{I();yn();br();va();m0();_0();hn()});function P3(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(n))t[o]=Kc(n[o],r);return t}function G3(n,r){return P3(n.properties,r)}function Dw(n,r){let t=G3(n,r);return $n(t)}var m0=f(()=>{cr();Ni()});var w0=f(()=>{m0();_0();Ni()});function Hw(n,r){return pc(Zo(n),r)}var h0=f(()=>{Oi();vt()});function q3(n,r){let t=n.filter((o)=>Ao(o,r)!==H.False);return t.length===1?t[0]:Sn(t)}function pc(n,r,t){if(Qr(n))return D(Hw(n,r),t);if(xn(n))return D(zw(n,r),t);return D(gn(n)?q3(n.anyOf,r):Ao(n,r)!==H.False?n:_n(),t)}var Oi=f(()=>{I();yn();br();va();$0();h0();hn()});function N3(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(n))t[o]=pc(n[o],r);return t}function O3(n,r){return N3(n.properties,r)}function zw(n,r){let t=O3(n,r);return $n(t)}var $0=f(()=>{cr();Oi()});var k0=f(()=>{$0();h0();Oi()});function Uw(n,r){return bt(n)?D(n.returns,r):_n(r)}var Bw=f(()=>{I();br();hn()});var R0=f(()=>{Bw()});function Fi(n){return Ur(wr(n))}var Ww=f(()=>{yo();pt()});var ji=f(()=>{Ww()});function rc(n,r,t){return D({[C]:"Record",type:"object",patternProperties:{[n]:r}},t)}function A0(n,r,t){let o={};for(let c of n)o[c]=r;return zn(o,{...t,[Tr]:"Record"})}function F3(n,r,t){return um(n)?A0(zr(n),r,t):rc(n.pattern,r,t)}function j3(n,r,t){return A0(zr(Sn(n)),r,t)}function K3(n,r,t){return A0([n.toString()],r,t)}function p3(n,r,t){return rc(n.source,r,t)}function T3(n,r,t){let o=Kn(n.pattern)?mo:n.pattern;return rc(o,r,t)}function v3(n,r,t){return rc(mo,r,t)}function I3(n,r,t){return rc(N_,r,t)}function Z3(n,r,t){return zn({true:r,false:r},t)}function y3(n,r,t){return rc(_o,r,t)}function nA(n,r,t){return rc(_o,r,t)}function Ki(n,r,t={}){return gn(n)?j3(n.anyOf,r,t):Qr(n)?F3(n,r,t):Vr(n)?K3(n.const,r,t):Ot(n)?Z3(n,r,t):gt(n)?y3(n,r,t):_t(n)?nA(n,r,t):zf(n)?p3(n,r,t):Ft(n)?T3(n,r,t):Df(n)?v3(n,r,t):uo(n)?I3(n,r,t):_n(t)}function pi(n){return globalThis.Object.getOwnPropertyNames(n.patternProperties)[0]}function Yw(n){let r=pi(n);return r===mo?mt():r===_o?vr():mt({pattern:r})}function Ti(n){return n.patternProperties[pi(n)]}var Jw=f(()=>{I();y();br();Io();qr();Pc();yn();vt();xa();zt();hn()});var Ia=f(()=>{Jw()});function rA(n,r){return r.parameters=Za(n,r.parameters),r.returns=wt(n,r.returns),r}function tA(n,r){return r.parameters=Za(n,r.parameters),r.returns=wt(n,r.returns),r}function oA(n,r){return r.allOf=Za(n,r.allOf),r}function cA(n,r){return r.anyOf=Za(n,r.anyOf),r}function aA(n,r){if(Kn(r.items))return r;return r.items=Za(n,r.items),r}function eA(n,r){return r.items=wt(n,r.items),r}function iA(n,r){return r.items=wt(n,r.items),r}function sA(n,r){return r.items=wt(n,r.items),r}function lA(n,r){return r.item=wt(n,r.item),r}function fA(n,r){let t=gA(n,r.properties);return{...r,...zn(t)}}function dA(n,r){let t=wt(n,Yw(r)),o=wt(n,Ti(r)),c=Ki(t,o);return{...r,...c}}function bA(n,r){return r.index in n?n[r.index]:Ro()}function uA(n,r){let t=Jc(r),o=Dr(r),c=wt(n,r);return t&&o?Fi(c):t&&!o?Ur(c):!t&&o?wr(c):c}function gA(n,r){return globalThis.Object.getOwnPropertyNames(r).reduce((t,o)=>{return{...t,[o]:uA(n,r[o])}},{})}function Za(n,r){return r.map((t)=>wt(n,t))}function wt(n,r){return bt(r)?rA(n,r):ut(r)?tA(n,r):Cn(r)?oA(n,r):gn(r)?cA(n,r):Pr(r)?aA(n,r):ft(r)?eA(n,r):Oo(r)?iA(n,r):jo(r)?sA(n,r):Ko(r)?lA(n,r):pn(r)?fA(n,r):po(r)?dA(n,r):Hf(r)?bA(n,r):r}function Xw(n,r){return wt(r,Yc(n))}var xw=f(()=>{gi();Oc();ji();yo();pt();qr();Ia();hn()});var S0=f(()=>{xw()});function Lw(n){return D({[C]:"Integer",type:"integer"},n)}var Vw=f(()=>{I();y()});var E0=f(()=>{Vw()});function _A(n,r,t){return{[n]:ht(Rn(n),r,Xn(t))}}function mA(n,r,t){return n.reduce((c,a)=>{return{...c,..._A(a,r,t)}},{})}function wA(n,r,t){return mA(n.keys,r,t)}function Cw(n,r,t){let o=wA(n,r,t);return $n(o)}var M0=f(()=>{cr();tc();Hr();Mr()});function hA(n){let[r,t]=[n.slice(0,1),n.slice(1)];return[r.toLowerCase(),t].join("")}function $A(n){let[r,t]=[n.slice(0,1),n.slice(1)];return[r.toUpperCase(),t].join("")}function kA(n){return n.toUpperCase()}function RA(n){return n.toLowerCase()}function AA(n,r,t){let o=Cc(n.pattern);if(!vo(o))return{...n,pattern:Qw(n.pattern,r)};let e=[...Na(o)].map((l)=>Rn(l)),i=Pw(e,r),s=Sn(i);return Si([s],t)}function Qw(n,r){return typeof n==="string"?r==="Uncapitalize"?hA(n):r==="Capitalize"?$A(n):r==="Uppercase"?kA(n):r==="Lowercase"?RA(n):n:n.toString()}function Pw(n,r){return n.map((t)=>ht(t,r))}function ht(n,r,t={}){return Cr(n)?Cw(n,r,t):Qr(n)?AA(n,r,t):gn(n)?Sn(Pw(n.anyOf,r),t):Vr(n)?Rn(Qw(n.const,r),t):D(n,t)}var tc=f(()=>{I();vt();M0();Hr();yn();hn()});function Gw(n,r={}){return ht(n,"Capitalize",r)}var qw=f(()=>{tc()});function Nw(n,r={}){return ht(n,"Lowercase",r)}var Ow=f(()=>{tc()});function Fw(n,r={}){return ht(n,"Uncapitalize",r)}var jw=f(()=>{tc()});function Kw(n,r={}){return ht(n,"Uppercase",r)}var pw=f(()=>{tc()});var D0=f(()=>{qw();M0();tc();Ow();jw();pw()});function SA(n,r,t){let o={};for(let c of globalThis.Object.getOwnPropertyNames(n))o[c]=So(n[c],r,Xn(t));return o}function EA(n,r,t){return SA(n.properties,r,t)}function Tw(n,r,t){let o=EA(n,r,t);return $n(o)}var H0=f(()=>{cr();vi();Mr()});function MA(n,r){return n.map((t)=>z0(t,r))}function DA(n,r){return n.map((t)=>z0(t,r))}function HA(n,r){let{[r]:t,...o}=n;return o}function zA(n,r){return r.reduce((t,o)=>HA(t,o),n)}function UA(n,r,t){let o=Qn(n,[Zn,"$id","required","properties"]),c=zA(t,r);return zn(c,o)}function BA(n){let r=n.reduce((t,o)=>mi(o)?[...t,Rn(o)]:t,[]);return Sn(r)}function z0(n,r){return Cn(n)?hr(MA(n.allOf,r)):gn(n)?Sn(DA(n.anyOf,r)):pn(n)?UA(n,r,n.properties):zn({})}function So(n,r,t){let o=jn(r)?BA(r):r,c=Gr(r)?zr(r):r,a=Gn(n),e=Gn(r);return xn(n)?Tw(n,c,t):Cr(r)?vw(n,r,t):a&&e?Jn("Omit",[n,o],t):!a&&e?Jn("Omit",[n,o],t):a&&!e?Jn("Omit",[n,o],t):D({...z0(n,c),...t})}var vi=f(()=>{I();Ua();ho();Hr();zt();Ir();yn();qr();U0();H0();hn()});function WA(n,r,t){return{[r]:So(n,[r],Xn(t))}}function YA(n,r,t){return r.reduce((o,c)=>{return{...o,...WA(n,c,t)}},{})}function JA(n,r,t){return YA(n,r.keys,t)}function vw(n,r,t){let o=JA(n,r,t);return $n(o)}var U0=f(()=>{cr();vi();Mr()});var Ii=f(()=>{U0();H0();vi()});function XA(n,r,t){let o={};for(let c of globalThis.Object.getOwnPropertyNames(n))o[c]=Eo(n[c],r,Xn(t));return o}function xA(n,r,t){return XA(n.properties,r,t)}function Iw(n,r,t){let o=xA(n,r,t);return $n(o)}var B0=f(()=>{cr();Zi();Mr()});function LA(n,r){return n.map((t)=>W0(t,r))}function VA(n,r){return n.map((t)=>W0(t,r))}function CA(n,r){let t={};for(let o of r)if(o in n)t[o]=n[o];return t}function QA(n,r,t){let o=Qn(n,[Zn,"$id","required","properties"]),c=CA(t,r);return zn(c,o)}function PA(n){let r=n.reduce((t,o)=>mi(o)?[...t,Rn(o)]:t,[]);return Sn(r)}function W0(n,r){return Cn(n)?hr(LA(n.allOf,r)):gn(n)?Sn(VA(n.anyOf,r)):pn(n)?QA(n,r,n.properties):zn({})}function Eo(n,r,t){let o=jn(r)?PA(r):r,c=Gr(r)?zr(r):r,a=Gn(n),e=Gn(r);return xn(n)?Iw(n,c,t):Cr(r)?Zw(n,r,t):a&&e?Jn("Pick",[n,o],t):!a&&e?Jn("Pick",[n,o],t):a&&!e?Jn("Pick",[n,o],t):D({...W0(n,c),...t})}var Zi=f(()=>{I();ho();Ir();Hr();qr();yn();zt();Ua();hn();Y0();B0()});function GA(n,r,t){return{[r]:Eo(n,[r],Xn(t))}}function qA(n,r,t){return r.reduce((o,c)=>{return{...o,...GA(n,c,t)}},{})}function NA(n,r,t){return qA(n,r.keys,t)}function Zw(n,r,t){let o=NA(n,r,t);return $n(o)}var Y0=f(()=>{cr();Zi();Mr()});var yi=f(()=>{Y0();B0();Zi()});function OA(n,r){return Jn("Partial",[Jn(n,r)])}function FA(n){return Jn("Partial",[Ut(n)])}function jA(n){let r={};for(let t of globalThis.Object.getOwnPropertyNames(n))r[t]=wr(n[t]);return r}function KA(n,r){let t=Qn(n,[Zn,"$id","required","properties"]),o=jA(r);return zn(o,t)}function yw(n){return n.map((r)=>n1(r))}function n1(n){return dt(n)?OA(n.target,n.parameters):Gn(n)?FA(n.$ref):Cn(n)?hr(yw(n.allOf)):gn(n)?Sn(yw(n.anyOf)):pn(n)?KA(n,n.properties):Fo(n)?n:Ot(n)?n:gt(n)?n:Vr(n)?n:Ba(n)?n:_t(n)?n:Ft(n)?n:Wa(n)?n:Ya(n)?n:zn({})}function Tc(n,r){if(xn(n))return r1(n,r);else return D({...n1(n),...r})}var J0=f(()=>{I();ho();pt();qr();Ir();yn();nc();Kt();y();X0();hn()});function pA(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(n))t[o]=Tc(n[o],Xn(r));return t}function TA(n,r){return pA(n.properties,r)}function r1(n,r){let t=TA(n,r);return $n(t)}var X0=f(()=>{cr();J0();Mr()});var ns=f(()=>{X0();J0()});function vA(n,r){return Jn("Required",[Jn(n,r)])}function IA(n){return Jn("Required",[Ut(n)])}function ZA(n){let r={};for(let t of globalThis.Object.getOwnPropertyNames(n))r[t]=Qn(n[t],[dr]);return r}function yA(n,r){let t=Qn(n,[Zn,"$id","required","properties"]),o=ZA(r);return zn(o,t)}function t1(n){return n.map((r)=>o1(r))}function o1(n){return dt(n)?vA(n.target,n.parameters):Gn(n)?IA(n.$ref):Cn(n)?hr(t1(n.allOf)):gn(n)?Sn(t1(n.anyOf)):pn(n)?yA(n,n.properties):Fo(n)?n:Ot(n)?n:gt(n)?n:Vr(n)?n:Ba(n)?n:_t(n)?n:Ft(n)?n:Wa(n)?n:Ya(n)?n:zn({})}function vc(n,r){if(xn(n))return c1(n,r);else return D({...o1(n),...r})}var x0=f(()=>{I();ho();qr();Ir();yn();nc();y();Kt();L0();hn()});function n4(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(n))t[o]=vc(n[o],r);return t}function r4(n,r){return n4(n.properties,r)}function c1(n,r){let t=r4(n,r);return $n(t)}var L0=f(()=>{cr();x0()});var rs=f(()=>{L0();x0()});function t4(n,r){return r.map((t)=>{return Gn(t)?V0(n,t.$ref):Nr(n,t)})}function V0(n,r){return r in n?Gn(n[r])?V0(n,n[r].$ref):Nr(n,n[r]):_n()}function o4(n){return qc(n[0])}function c4(n){return $o(n[0],n[1])}function a4(n){return Nc(n[0])}function e4(n){return Tc(n[0])}function i4(n){return So(n[0],n[1])}function s4(n){return Eo(n[0],n[1])}function l4(n){return vc(n[0])}function f4(n,r,t){let o=t4(n,t);return r==="Awaited"?o4(o):r==="Index"?c4(o):r==="KeyOf"?a4(o):r==="Partial"?e4(o):r==="Omit"?i4(o):r==="Pick"?s4(o):r==="Required"?l4(o):_n()}function d4(n,r){return Xc(Nr(n,r))}function b4(n,r){return xc(Nr(n,r))}function u4(n,r,t){return Lc(ya(n,r),Nr(n,t))}function g4(n,r,t){return Dt(ya(n,r),Nr(n,t))}function _4(n,r){return hr(ya(n,r))}function m4(n,r){return Gc(Nr(n,r))}function w4(n,r){return zn(globalThis.Object.keys(r).reduce((t,o)=>{return{...t,[o]:Nr(n,r[o])}},{}))}function h4(n,r){let[t,o]=[Nr(n,Ti(r)),pi(r)],c=Yc(r);return c.patternProperties[o]=t,c}function $4(n,r){return Gn(r)?{...V0(n,r.$ref),[Zn]:r[Zn]}:r}function k4(n,r){return Zr(ya(n,r))}function R4(n,r){return Sn(ya(n,r))}function ya(n,r){return r.map((t)=>Nr(n,t))}function Nr(n,r){return Dr(r)?D(Nr(n,Qn(r,[dr])),r):Jc(r)?D(Nr(n,Qn(r,[lt])),r):go(r)?D($4(n,r),r):ft(r)?D(d4(n,r.items),r):Oo(r)?D(b4(n,r.items),r):dt(r)?D(f4(n,r.target,r.parameters)):bt(r)?D(u4(n,r.parameters,r.returns),r):ut(r)?D(g4(n,r.parameters,r.returns),r):Cn(r)?D(_4(n,r.allOf),r):jo(r)?D(m4(n,r.items),r):pn(r)?D(w4(n,r.properties),r):po(r)?D(h4(n,r)):Pr(r)?D(k4(n,r.items||[]),r):gn(r)?D(R4(n,r.anyOf),r):r}function A4(n,r){return r in n?Nr(n,n[r]):_n()}function a1(n){return globalThis.Object.getOwnPropertyNames(n).reduce((r,t)=>{return{...r,[t]:A4(n,t)}},{})}var e1=f(()=>{Nt();Mf();Kt();Ca();zi();Qa();Pa();zt();To();Ir();Fa();Ta();qr();Ii();yi();br();ns();Ia();rs();ko();yn();y();hn()});class i1{constructor(n){let r=a1(n),t=this.WithIdentifiers(r);this.$defs=t}Import(n,r){let t={...this.$defs,[n]:D(this.$defs[n],r)};return D({[C]:"Import",$defs:t,$ref:n})}WithIdentifiers(n){return globalThis.Object.getOwnPropertyNames(n).reduce((r,t)=>{return{...r,[t]:{...n[t],$id:t}}},{})}}function s1(n){return new i1(n)}var l1=f(()=>{Nt();y();e1()});var C0=f(()=>{l1()});function f1(n,r){return D({[C]:"Not",not:n},r)}var d1=f(()=>{I();y()});var Q0=f(()=>{d1()});function b1(n,r){return ut(n)?Zr(n.parameters,r):_n()}var u1=f(()=>{ko();br();hn()});var P0=f(()=>{u1()});function g1(n,r={}){if(Kn(r.$id))r.$id=`T${S4++}`;let t=Yc(n({[C]:"This",$ref:`${r.$id}`}));return t.$id=r.$id,D({[Tr]:"Recursive",...t},r)}var S4=0;var _1=f(()=>{gi();I();y()});var G0=f(()=>{_1()});function m1(n,r){let t=Wn(n)?new globalThis.RegExp(n):n;return D({[C]:"RegExp",type:"RegExp",source:t.source,flags:t.flags},r)}var w1=f(()=>{I();y()});var q0=f(()=>{w1()});function E4(n){return Cn(n)?n.allOf:gn(n)?n.anyOf:Pr(n)?n.items??[]:[]}function h1(n){return E4(n)}var $1=f(()=>{hn()});var N0=f(()=>{$1()});function k1(n,r){return ut(n)?D(n.returns,r):_n(r)}var R1=f(()=>{I();br();hn()});var O0=f(()=>{R1()});var A1=()=>{};var S1=()=>{};var E1=f(()=>{A1();S1()});var M1=()=>{};var D1=f(()=>{M1()});class H1{constructor(n){this.schema=n}Decode(n){return new z1(this.schema,n)}}class z1{constructor(n,r){this.schema=n,this.decode=r}EncodeTransform(n,r){let c={Encode:(a)=>r[Zn].Encode(n(a)),Decode:(a)=>this.decode(r[Zn].Decode(a))};return{...r,[Zn]:c}}EncodeSchema(n,r){let t={Decode:this.decode,Encode:n};return{...r,[Zn]:t}}Encode(n){return go(this.schema)?this.EncodeTransform(n,this.schema):this.EncodeSchema(n,this.schema)}}function U1(n){return new H1(n)}var B1=f(()=>{y();hn()});var F0=f(()=>{B1()});function W1(n={}){return D({[C]:n[C]??"Unsafe"},n)}var Y1=f(()=>{I();y()});var j0=f(()=>{Y1()});function J1(n){return D({[C]:"Void",type:"void"},n)}var X1=f(()=>{I();y()});var K0=f(()=>{X1()});var p0={};Zt(p0,{Void:()=>J1,Uppercase:()=>Kw,Unsafe:()=>W1,Unknown:()=>Ro,Union:()=>Sn,Undefined:()=>xi,Uncapitalize:()=>Fw,Uint8Array:()=>Vi,Tuple:()=>Zr,Transform:()=>U1,TemplateLiteral:()=>Si,Symbol:()=>Ji,String:()=>mt,ReturnType:()=>k1,Rest:()=>h1,Required:()=>vc,RegExp:()=>m1,Ref:()=>Ut,Recursive:()=>g1,Record:()=>Ki,ReadonlyOptional:()=>Fi,Readonly:()=>Ur,Promise:()=>Di,Pick:()=>Eo,Partial:()=>Tc,Parameters:()=>b1,Optional:()=>wr,Omit:()=>So,Object:()=>zn,Number:()=>vr,Null:()=>Wi,Not:()=>f1,Never:()=>_n,Module:()=>s1,Mapped:()=>Vm,Lowercase:()=>Nw,Literal:()=>Rn,KeyOf:()=>Nc,Iterator:()=>Gc,Intersect:()=>hr,Integer:()=>Lw,Instantiate:()=>Xw,InstanceType:()=>Uw,Index:()=>$o,Function:()=>Dt,Extract:()=>pc,Extends:()=>jc,Exclude:()=>Kc,Enum:()=>sw,Date:()=>Ui,ConstructorParameters:()=>ew,Constructor:()=>Lc,Const:()=>cw,Composite:()=>vm,Capitalize:()=>Gw,Boolean:()=>Ri,BigInt:()=>Qc,Awaited:()=>qc,AsyncIterator:()=>xc,Array:()=>Xc,Argument:()=>y_,Any:()=>wo});var x1=f(()=>{Va();Jf();Ca();Qa();zi();Oa();Ai();t0();c0();Pa();a0();Bi();e0();w0();va();k0();To();zt();R0();S0();E0();Ir();D0();Fa();Ta();Hr();cr();C0();br();Q0();Yi();Io();qr();Ii();pt();P0();ns();yi();Hi();yo();ji();Ia();G0();nc();q0();rs();N0();O0();Pc();Xi();vt();F0();ko();Ci();Li();yn();Oc();j0();K0()});var tr;var L1=f(()=>{x1();tr=p0});var V1=f(()=>{Mf();Nt();Mt();Yf();P_();xa();j_();La();y();Va();Ca();Jf();Qa();zi();Oa();Ai();t0();c0();Pa();a0();Bi();e0();w0();va();k0();To();zt();R0();S0();E0();Ir();Fa();D0();Ta();Hr();C0();cr();br();Q0();Yi();Io();qr();Ii();pt();P0();ns();yi();Hi();yo();ji();Ia();G0();nc();q0();rs();N0();O0();E1();D1();Pc();Xi();vt();F0();ko();Ci();Li();yn();Oc();j0();K0();L1()});var T0,v0,qq,Nq;var I0=f(()=>{V1();T0=tr.Object({email:tr.String({format:"email"})}),v0=tr.Object({token:tr.String()}),qq=tr.Object({success:tr.Boolean(),message:tr.Optional(tr.String())}),Nq=tr.Object({success:tr.Boolean(),message:tr.Optional(tr.String()),data:tr.Optional(tr.Object({user:tr.Object({id:tr.String(),email:tr.String()}),accessToken:tr.String(),refreshToken:tr.String()}))})});import{eq as Z0}from"drizzle-orm";import{Elysia as M4}from"elysia";function ts(n,r,t,o,c,a,e,i,s,l){let{db:d,logger:b,usersTable:u}=n,$=r.route||"/auth/magic-link",k=r.verifyRoute||"/auth/magic-link/verify",w=r.expiresIn||"15m",_=r.redirectUrl||"",R=new M4;if(!r.enabled)return R;return R.post($,async(X)=>{if(!d||!u)return{success:!1,message:"Database not configured"};if(!t?.isAvailable())return b.error("[AUTH] Magic link requested but email service not available"),{success:!1,message:"Email service not available"};let{email:x}=X.body,P=(await d.select().from(u).where(Z0(u.email,x)).limit(1))[0];if(!P)return b.info("[AUTH] Magic link requested for non-existent email",{email:x}),{success:!0,message:"If an account exists, a magic link has been sent"};if(P.isLocked)return b.warn("[AUTH] Magic link requested for locked account",{email:x}),{success:!0,message:"If an account exists, a magic link has been sent"};let M=oi(),A=Pt(M),z=new Date(Date.now()+ci(w));await e({userId:P.id,email:x,tokenHash:A,expiresAt:z});let h=_?`${_}?token=${M}`:`${k}?token=${M}`,g=await t.sendMagicLinkEmail(x,h,l);if(!g.success)return b.error("[AUTH] Failed to send magic link email",{email:x,error:g.error}),{success:!1,message:"Failed to send email"};return b.info("[AUTH] Magic link sent",{email:x,userId:P.id}),{success:!0,message:"If an account exists, a magic link has been sent"}},{body:T0,detail:{tags:["Authentication"],summary:"Request Magic Link",description:"Send a magic link to the user's email for passwordless login"}}),R.get(k,async(X)=>{if(!d||!u)return{success:!1,message:"Database not configured"};let x=X.query.token;if(!x)return{success:!1,message:"Token is required"};let E=Pt(x),P=await i(E);if(!P)return b.warn("[AUTH] Invalid magic link token"),{success:!1,message:"Invalid or expired token"};if(new Date>P.expiresAt)return await s(E),b.warn("[AUTH] Expired magic link token",{email:P.email}),{success:!1,message:"Invalid or expired token"};let A=(await d.select().from(u).where(Z0(u.id,P.userId)).limit(1))[0];if(!A)return await s(E),{success:!1,message:"User not found"};await s(E),await d.update(u).set({lastLoginAt:new Date,loginCount:(A.loginCount||0)+1,emailVerified:!0}).where(Z0(u.id,A.id));let z=X.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||X.request.headers.get("x-real-ip")?.trim()||"unknown",h=X.request.headers.get("user-agent")||"",g=o(A.id),B=c(A.id),G=await a({userId:A.id,deviceInfo:{ipAddress:z,userAgent:h,deviceType:"unknown"},loginMethod:"magic_link"});return b.info("[AUTH] Magic link login successful",{userId:A.id,email:A.email}),X.set.headers["x-session-id"]=G,{success:!0,data:{user:{id:A.id,email:A.email},accessToken:g,refreshToken:B}}},{query:v0,detail:{tags:["Authentication"],summary:"Verify Magic Link",description:"Verify magic link token and login user"}}),R}var y0=f(()=>{I0();ai();I0()});import{eq as Ic}from"drizzle-orm";import{Elysia as D4}from"elysia";function os(n,r,t,o,c){let{db:a,logger:e,usersTable:i}=n,s=r.route||"/auth/me",l=new D4;if(!r.enabled)return l;return l.get(s,async(d)=>{if(!a||!i)return{success:!1,message:"Database not configured"};let b=d.request.headers.get("x-user-id");if(!b)return d.set.status=401,{success:!1,message:"Unauthorized"};let $=(await a.select().from(i).where(Ic(i.id,b)).limit(1))[0];if(!$)return d.set.status=404,{success:!1,message:"User not found"};let{password:k,...w}=$,_=null,R=[],X=[],x=[],E=[];if(r.includeProfile&&t){let M=t.profiles;if(M&&a)_=(await a.select().from(M).where(Ic(M.userId,b)).limit(1))[0]||null}if(r.includeAddresses&&t){let M=t.addresses;if(M&&a)R=await a.select().from(M).where(Ic(M.ownerId,b))}if(r.includePhones&&t){let M=t.phones;if(M&&a)X=await a.select().from(M).where(Ic(M.ownerId,b))}if(r.includeFiles&&t){let M=t.files;if(M&&a)x=await a.select().from(M).where(Ic(M.uploadedBy,b))}if(r.includeRoles&&t){let{userRoles:M,roles:A}=t;if(M&&A&&a){let h=(await a.select().from(M).where(Ic(M.userId,b))).map((g)=>g.roleId);if(h.length>0){let{inArray:g}=await import("drizzle-orm");E=await a.select().from(A).where(g(A.id,h))}}}return e.info("[AUTH] Me endpoint accessed",{userId:b}),JSON.parse(JSON.stringify({success:!0,data:{user:w,profile:_,addresses:R,phones:X,files:x,roles:E}},(M,A)=>typeof A==="bigint"?Number(A):A))},{detail:{tags:["Authentication"],summary:"Get current user",description:"Get the currently authenticated user with profile, addresses, phones and files"}}),l}var nd=()=>{};import{t as Mo}from"elysia";var rd,H4;var td=f(()=>{rd=Mo.Object({currentPassword:Mo.String({minLength:1}),newPassword:Mo.String({minLength:8}),confirmPassword:Mo.String({minLength:8})}),H4=Mo.Object({success:Mo.Boolean(),message:Mo.Optional(Mo.String())})});function C1(n,r){return n===r}import{eq as Q1}from"drizzle-orm";import{Elysia as z4}from"elysia";function cs(n,r){let{db:t,logger:o,usersTable:c}=n,a=r.route||"/auth/password-change",e=new z4;if(!r.enabled)return e;return e.post(a,async(i)=>{if(!t||!c)return i.set.status=500,{success:!1,message:"Database not configured"};let s=i.request.headers.get("x-user-id");if(!s)return i.set.status=401,{success:!1,message:"Authentication required"};let{currentPassword:l,newPassword:d,confirmPassword:b}=i.body;if(!C1(d,b))return i.set.status=422,{success:!1,message:"New passwords do not match"};let $=(await t.select().from(c).where(Q1(c.id,s)).limit(1))[0];if(!$)return i.set.status=404,{success:!1,message:"User not found"};let k=await si(l,$.password),w=new URL(i.request.url),_=i.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||i.request.headers.get("x-real-ip")?.trim()||"unknown",R=i.request.headers.get("user-agent")||"unknown";if(!k)return o.warn("[AUTH] Password change failed - invalid current password",{userId:s}),o.audit({entityName:"users",entityId:s,operation:"PASSWORD_CHANGE_FAILED",userId:s,summary:"Password change failed: invalid current password",ipAddress:_,userAgent:R,path:w.pathname,query:w.search}),i.set.status=400,{success:!1,message:"Current password is incorrect"};let X=await bo(d);return await t.update(c).set({password:X,updatedAt:new Date}).where(Q1(c.id,s)),o.info("[AUTH] Password change successful",{userId:s}),o.audit({entityName:"users",entityId:s,operation:"PASSWORD_CHANGE",userId:s,summary:"Password changed successfully",ipAddress:_,userAgent:R,path:w.pathname,query:w.search}),{success:!0,message:"Password changed successfully"}},{body:rd,detail:{tags:["Authentication"],summary:"Change Password",description:"Change password for authenticated user"}}),e}var od=f(()=>{mf();Wc();td();td()});import{t as Bt}from"elysia";var cd,ad,U4;var ed=f(()=>{cd=Bt.Object({email:Bt.String({format:"email"})}),ad=Bt.Object({token:Bt.String(),newPassword:Bt.String({minLength:8}),confirmPassword:Bt.String({minLength:8})}),U4=Bt.Object({success:Bt.Boolean(),message:Bt.Optional(Bt.String())})});import{randomBytes as B4}from"crypto";function P1(){return B4(32).toString("hex")}function G1(n){return new Date>n}var q1=()=>{};import{Elysia as W4}from"elysia";function as(n,r,t,o,c,a){let{db:e,logger:i,usersTable:s}=n,l=r.route||"/auth/password-reset",d=new W4;if(!r.enabled)return d;return d.post(`${l}/request`,async(b)=>{if(!e||!s)return{success:!1,message:"Database not configured"};let{email:u}=b.body,{eq:$}=await import("drizzle-orm"),w=(await e.select().from(s).where($(s.email,u)).limit(1))[0];if(!w)return{success:!0,message:"If email exists, reset link will be sent"};let _=P1(),R=new Date(Date.now()+3600000);if(await t(w.id,_,R),a)try{await a(u,_),i.info("[AUTH] Password reset email sent",{email:u})}catch(x){i.error("[AUTH] Failed to send password reset email",{email:u,error:x})}else i.warn("[AUTH] sendResetEmail not configured - email not sent",{email:u});i.info("[AUTH] Password reset requested",{userId:w.id,email:u});let X=new URL(b.request.url);return i.audit({entityName:"users",entityId:w.id,operation:"PASSWORD_RESET_REQUEST",userId:w.id,summary:`Password reset requested for ${u}`,ipAddress:b.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||b.request.headers.get("x-real-ip")?.trim()||"unknown",userAgent:b.request.headers.get("user-agent")||"unknown",path:X.pathname,query:X.search}),{success:!0,message:"If email exists, reset link will be sent"}},{body:cd,detail:{tags:["Authentication"],summary:"Request Password Reset",description:"Request a password reset email"}}),d.post(`${l}/confirm`,async(b)=>{if(!e||!s)return{success:!1,message:"Database not configured"};let{token:u,newPassword:$,confirmPassword:k}=b.body;if($!==k)return{success:!1,message:"Passwords do not match"};let w=await o(u);if(!w)return{success:!1,message:"Invalid or expired reset token"};if(G1(w.expiresAt))return await c(u),{success:!1,message:"Reset token has expired"};let _=await bo($),{eq:R}=await import("drizzle-orm");await e.update(s).set({password:_}).where(R(s.id,w.userId)),await c(u),i.info("[AUTH] Password reset successful",{userId:w.userId});let X=new URL(b.request.url);return i.audit({entityName:"users",entityId:w.userId,operation:"PASSWORD_RESET",userId:w.userId,summary:"Password reset completed successfully",ipAddress:b.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||b.request.headers.get("x-real-ip")?.trim()||"unknown",userAgent:b.request.headers.get("user-agent")||"unknown",path:X.pathname,query:X.search}),{success:!0,message:"Password has been reset"}},{body:ad,detail:{tags:["Authentication"],summary:"Confirm Password Reset",description:"Reset password with token"}}),d}var id=f(()=>{Wc();ed();q1();ed()});import{t as It}from"elysia";var sd,Y4;var ld=f(()=>{sd=It.Object({newPassword:It.String({minLength:8}),userId:It.Optional(It.String()),token:It.Optional(It.String())}),Y4=It.Object({success:It.Boolean(),message:It.String()})});import{eq as N1}from"drizzle-orm";import{Elysia as J4}from"elysia";function es(n,r,t,o){let{db:c,logger:a,usersTable:e}=n,i=r.route||"/auth/password-set",s=new J4;if(!r.enabled)return s;return s.post(i,async(l)=>{if(a.info("[AUTH] Password set request received"),!c||!e)return a.error("[AUTH] Password set failed - database not configured"),{success:!1,message:"Database not configured"};let{newPassword:d,userId:b,token:u}=l.body,$=b;if(u&&t&&o){let X=Pt(u),x=await t(X);if(!x)return a.warn("[AUTH] Password set failed - invalid token"),{success:!1,message:"Invalid or expired token"};if(new Date>x.expiresAt)return await o(X),a.warn("[AUTH] Password set failed - expired token",{email:x.email}),{success:!1,message:"Invalid or expired token"};$=x.userId,a.info("[AUTH] Password set - userId resolved from token",{userId:$,email:x.email})}if(!$)return a.warn("[AUTH] Password set failed - no userId in payload or token"),{success:!1,message:"User ID or token required"};let w=(await c.select().from(e).where(N1(e.id,$)).limit(1))[0];if(a.info("[AUTH] Password set - user found",{found:!!w,hasPassword:!!w?.password}),!w)return{success:!1,message:"User not found"};if(w.password)return a.warn("[AUTH] Password set failed - user already has password",{userId:$}),{success:!1,message:"Password already set. Use password change instead."};let _=await bo(d);a.info("[AUTH] Password set - updating user with verifiedAt",{userId:$});let R=await c.update(e).set({password:_,verifiedAt:new Date,updatedAt:new Date}).where(N1(e.id,$));if(a.info("[AUTH] Password set successful for invited user",{userId:$,updateResult:R}),u&&o){let X=Pt(u);await o(X),a.info("[AUTH] Invite token consumed after password set",{userId:$})}return{success:!0,message:"Password set successfully"}},{body:sd,detail:{tags:["Authentication"],summary:"Set Password",description:"Set password for the first time (for invited users who do not have a password yet)"}}),s}var fd=f(()=>{ai();Wc();ld();ld()});function dd(n){let r=n.match(/^(\d+)([smhd])$/);if(!r)return 900;let t=r[1],o=r[2];if(!t||!o)return 900;let c=parseInt(t,10);switch(o){case"s":return c;case"m":return c*60;case"h":return c*3600;case"d":return c*86400;default:return 900}}import{t as oc}from"elysia";var X4;var O1=f(()=>{X4=oc.Object({success:oc.Boolean(),message:oc.Optional(oc.String()),data:oc.Optional(oc.Object({accessToken:oc.String()}))})});import{Elysia as x4}from"elysia";function is(n,r,t,o,c,a,e){let{logger:i,authentication:s}=n,l=r.route||"/auth/refresh",d=new x4;if(!r.enabled)return d;return d.post(l,async(b)=>{let u=s?.refreshToken?.name||"refresh_token",$=s?.accessToken?.name||"access_token",k=b.request.headers.get("x-refresh-token");if(!k){let O=b.request.headers.get("cookie");if(O)k=O.split(";").reduce((J,W)=>{let[U,Y]=W.trim().split("=");if(U&&Y)J[U]=Y;return J},{})[u]||null}if(!k)return b.set.status=401,{success:!1,message:"Refresh token required"};let w=t(k);if(!w.valid||!w.payload)return i.warn("[AUTH] Refresh failed - invalid token"),b.set.status=401,{success:!1,message:"Invalid refresh token"};let _=w.payload.sub,R=o(_),X=c?c(_):null,x=a?.accessToken?.setHeadersEnabled??!0,E=a?.accessToken?.returnJson??!0,P=a?.refreshToken?.setHeadersEnabled??!0,M=a?.refreshToken?.returnJson??!1,A=s?.accessToken?.expiresIn||"15m",z=Math.max(0,dd(A)-(e??0)),h=s?.refreshToken?.expiresIn||"7d",g=dd(h),B=new Headers;if(B.set("Content-Type","application/json"),x)B.append("Set-Cookie",`${$}=${R}; Path=/; HttpOnly; SameSite=Strict; Secure; Max-Age=${z}`);if(X&&P)B.append("Set-Cookie",`${u}=${X}; Path=/; HttpOnly; SameSite=Strict; Secure; Max-Age=${g}`);i.info("[AUTH] Token refresh successful",{userId:_,rotatedRefreshToken:!!X});let G={};if(E)G.accessToken=R;if(X&&M)G.refreshToken=X;let L=JSON.stringify({success:!0,data:G});return new Response(L,{status:200,headers:B})},{detail:{tags:["Authentication"],summary:"Refresh Token",description:"Get new access token using refresh token"}}),d}var bd=f(()=>{O1()});import{t as Wr}from"elysia";var ud,L4;var gd=f(()=>{ud=Wr.Object({email:Wr.String({format:"email"}),password:Wr.String({minLength:8}),confirmPassword:Wr.Optional(Wr.String({minLength:8}))}),L4=Wr.Object({success:Wr.Boolean(),message:Wr.Optional(Wr.String()),data:Wr.Optional(Wr.Object({user:Wr.Object({id:Wr.String(),email:Wr.String()})}))})});import{eq as V4}from"drizzle-orm";import{Elysia as C4}from"elysia";function ss(n,r,t,o,c,a,e,i,s,l){let{db:d,logger:b,usersTable:u}=n,$=r.route||"/auth/register",k={accessTokenName:e?.accessTokenName||"access_token",refreshTokenName:e?.refreshTokenName||"refresh_token",sessionTokenName:e?.sessionTokenName||"session_token",accessTokenMaxAge:e?.accessTokenMaxAge||900,refreshTokenMaxAge:e?.refreshTokenMaxAge||604800,sessionTokenMaxAge:e?.sessionTokenMaxAge||900,secure:e?.secure??!0,httpOnly:e?.httpOnly??!0,sameSite:e?.sameSite||"strict",path:e?.path||"/"},w=new C4;if(!r.enabled)return w;return w.post($,async(_)=>{if(!d||!u)return _.set.status=500,{success:!1,message:"Database not configured"};let{email:R,password:X,confirmPassword:x}=_.body;if(x&&X!==x)return _.set.status=400,{success:!1,message:"Passwords do not match"};let E=Vg(X);if(!E.valid)return _.set.status=400,{success:!1,message:"Password too weak",errors:E.errors};let P=await d.select().from(u).where(V4(u.email,R)).limit(1),M=new URL(_.request.url),A=_.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||_.request.headers.get("x-real-ip")?.trim()||"unknown",z=_.request.headers.get("user-agent")||"unknown";if(P.length>0)return b.warn("[AUTH] Registration failed - email exists",{email:R}),b.audit({entityName:"users",operation:"REGISTER_FAILED",summary:`Registration failed: email already exists (${R})`,ipAddress:A,userAgent:z,path:M.pathname,query:M.search}),_.set.status=409,{success:!1,message:"Email already registered"};let h=await bo(X),g=r.emailVerification?.enabled&&s?.isAvailable(),B=g?ye():null,G=r.emailVerification?.tokenExpiresIn||"24h",L=g?new Date(Date.now()+Bc(G)):null,O={email:R,password:h};if(g&&B)O.emailVerificationToken=B,O.emailVerificationTokenExpiresAt=L,O.emailVerificationSentAt=new Date,O.emailVerificationAttempts=1;let J=(await d.insert(u).values(O).returning())[0];if(b.info("[AUTH] Registration successful",{userId:J.id,email:R,emailVerificationEnabled:g}),b.audit({entityName:"users",entityId:J.id,operation:"REGISTER",userId:J.id,summary:`New user registered: ${R}`,ipAddress:A,userAgent:z,path:M.pathname,query:M.search}),g&&s&&B){let U=`${(r.emailVerification?.redirectUrl||"http://localhost:3000/login").replace("/login","/verify-email")}?token=${B}`;s.sendVerificationEmail(R,R.split("@")[0]||"User",U,l||"Nucleus").then((K)=>{if(K.success)b.info("[AUTH] Verification email sent",{email:R});else b.error("[AUTH] Failed to send verification email",{email:R,error:K.error})}).catch((K)=>{b.error("[AUTH] Failed to send verification email",{email:R,error:K})});let Y=r.emailVerification?.resendCooldown||"60s",Q=Bc(Y)/1000,F=r.emailVerification?.maxResendAttempts||3;return{success:!0,message:"Registration successful. Please check your email to verify your account.",data:{user:{id:J.id,email:J.email},emailVerificationRequired:!0,verification:{cooldownSeconds:Q,canResendAt:new Date(Date.now()+Q*1000).toISOString(),attemptsRemaining:F-1,maxAttempts:F}}}}if(t)t(R,R.split("@")[0]||"User").catch((W)=>{b.error("[AUTH] Failed to send welcome email",{email:R,error:W})});if(o&&c&&a){let W=_.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||_.request.headers.get("x-real-ip")?.trim()||"unknown",U=_.request.headers.get("user-agent")||"",Y=o(J.id),Q=c(J.id),F=await a({userId:J.id,deviceInfo:{ipAddress:W,userAgent:U},loginMethod:"register"}),K={accessToken:{setHeadersEnabled:i?.accessToken?.setHeadersEnabled??!0,returnJson:i?.accessToken?.returnJson??!0},refreshToken:{setHeadersEnabled:i?.refreshToken?.setHeadersEnabled??!0,returnJson:i?.refreshToken?.returnJson??!0},sessionToken:{setHeadersEnabled:i?.sessionToken?.setHeadersEnabled??!0,returnJson:i?.sessionToken?.returnJson??!0}},N=k.secure?"; Secure":"",tn=`; Path=${k.path}; HttpOnly; SameSite=${k.sameSite}${N}`,sn=[];if(K.accessToken.setHeadersEnabled)sn.push(`${k.accessTokenName}=${Y}${tn}; Max-Age=${k.accessTokenMaxAge}`);if(K.refreshToken.setHeadersEnabled)sn.push(`${k.refreshTokenName}=${Q}${tn}; Max-Age=${k.refreshTokenMaxAge}`);if(K.sessionToken.setHeadersEnabled)sn.push(`${k.sessionTokenName}=${F}${tn}; Max-Age=${k.sessionTokenMaxAge}`);let kn={user:{id:J.id,email:J.email}};if(K.accessToken.returnJson)kn.accessToken=Y;if(K.refreshToken.returnJson)kn.refreshToken=Q;if(K.sessionToken.returnJson)kn.sessionId=F;let ar=JSON.stringify({success:!0,data:kn}),rn=new Headers;rn.set("Content-Type","application/json"),rn.set("x-session-id",F);for(let en of sn)rn.append("Set-Cookie",en);return new Response(ar,{status:200,headers:rn})}return{success:!0,data:{user:{id:J.id,email:J.email}}}},{body:ud,detail:{tags:["Authentication"],summary:"Register",description:"Register a new user account"}}),w}var _d=f(()=>{gd();Wc();gd()});import{t as T}from"elysia";var F1,Q4,md,wd,jN;var hd=f(()=>{F1=T.Object({id:T.String(),deviceName:T.Optional(T.String()),deviceType:T.Optional(T.String()),browserName:T.Optional(T.String()),browserVersion:T.Optional(T.String()),osName:T.Optional(T.String()),osVersion:T.Optional(T.String()),ipAddress:T.String(),locationCountry:T.Optional(T.String()),locationCity:T.Optional(T.String()),lastActivityAt:T.String(),createdAt:T.String(),isCurrent:T.Boolean(),loginMethod:T.Optional(T.String()),trustScore:T.Optional(T.Number())}),Q4=T.Object({success:T.Boolean(),data:T.Optional(T.Object({sessions:T.Array(F1),currentSessionId:T.Optional(T.String()),totalCount:T.Number()})),message:T.Optional(T.String())}),md=T.Object({reason:T.Optional(T.String())}),wd=T.Object({excludeCurrent:T.Optional(T.Boolean()),reason:T.Optional(T.String())}),jN=T.Object({success:T.Boolean(),data:T.Optional(T.Object({recentActivity:T.Array(T.Object({sessionId:T.String(),action:T.String(),ipAddress:T.String(),timestamp:T.String(),deviceInfo:T.Optional(T.String())}))})),message:T.Optional(T.String())})});function ls(n){let r=(o,c)=>n[o]??n[c],t=(o,c)=>{let a=n[o]??n[c];if(!a)return;return a instanceof Date?a.toISOString():String(a)};return{id:n.id,deviceName:r("device_name","deviceName"),deviceType:r("device_type","deviceType"),deviceFingerprint:r("device_fingerprint","deviceFingerprint"),browserName:r("browser_name","browserName"),browserVersion:r("browser_version","browserVersion"),osName:r("os_name","osName"),osVersion:r("os_version","osVersion"),ipAddress:r("ip_address","ipAddress"),locationCountry:r("location_country","locationCountry"),locationCity:r("location_city","locationCity"),lastActivityAt:t("last_activity_at","lastActivityAt"),createdAt:t("created_at","createdAt"),isCurrent:r("is_current","isCurrent"),loginMethod:r("login_method","loginMethod"),trustScore:r("trust_score","trustScore")}}var j1=()=>{};import{and as Do,desc as K1,eq as qn,isNull as p1}from"drizzle-orm";import{Elysia as P4}from"elysia";function fs(n,r,t){let{db:o,logger:c}=n,a=r.route||"/auth/sessions",e=new P4;if(!r.enabled||!t)return e;let i=t,s=(l)=>{let d=l.replace(/([A-Z])/g,"_$1").toLowerCase();return i[l]||i[d]};return e.get(a,async(l)=>{if(!o)return{success:!1,message:"Database not configured"};let d=l.request.headers.get("x-user-id");if(!d)return{success:!1,message:"Authentication required"};let b=l.request.headers.get("x-session-id"),u=await o.select().from(t).where(Do(qn(s("userId"),d),qn(s("isActive"),!0),p1(s("revokedAt")))).orderBy(K1(s("lastActivityAt"))),$=u.filter((w)=>{let _=w,R=(_.deviceFingerprint||"").toLowerCase(),X=_.ipAddress||"";return!((!R||R==="--"||R==="--unknown"||R.includes("bot/crawler")||R.includes("headless")||R.includes("unknown-unknown"))&&(X==="127.0.0.1"||X==="::1"||X==="localhost"||!X))}),k=$.map((w)=>{let _=w,R=ls(_);return R.isCurrent=_.id===b,R});return c.info("[AUTH] Sessions list retrieved",{userId:d,totalInDb:u.length,filteredCount:$.length,hiddenBotSessions:u.length-$.length}),{success:!0,data:{sessions:k,currentSessionId:b,totalCount:$.length}}},{detail:{tags:["Authentication"],summary:"List active sessions",description:"Get all active sessions for the current user"}}),e.get(`${a}/current`,async(l)=>{if(!o)return{success:!1,message:"Database not configured"};let d=l.request.headers.get("x-user-id"),b=l.request.headers.get("x-session-id");if(!d||!b)return{success:!1,message:"Authentication required"};let u=await o.select().from(t).where(qn(s("id"),b)).limit(1);if(u.length===0)return{success:!1,message:"Session not found"};let $=u[0],k=ls($);return k.isCurrent=!0,{success:!0,data:k}},{detail:{tags:["Authentication"],summary:"Get current session",description:"Get details of the current session"}}),e.delete(`${a}/:sessionId`,async(l)=>{if(!o)return{success:!1,message:"Database not configured"};let d=l.request.headers.get("x-user-id");if(!d)return{success:!1,message:"Authentication required"};let{sessionId:b}=l.params,u=l.body,$=l.request.headers.get("x-session-id");if((await o.select().from(t).where(Do(qn(s("id"),b),qn(s("userId"),d))).limit(1)).length===0)return{success:!1,message:"Session not found"};let w=b===$;await o.update(t).set({isActive:!1,revokedAt:new Date,revokedReason:w?"user_logout":u.reason||"user_revoked"}).where(qn(s("id"),b)),c.info("[AUTH] Session revoked",{userId:d,sessionId:b,isCurrentSession:w,reason:u.reason||"user_revoked"});let _=new URL(l.request.url);return c.audit({entityName:"user_sessions",entityId:b,operation:w?"LOGOUT":"SESSION_REVOKE",userId:d||void 0,summary:w?"User logged out via session revoke":`Session revoked (${b.substring(0,8)}...)`,ipAddress:l.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||l.request.headers.get("x-real-ip")?.trim()||"unknown",userAgent:l.request.headers.get("user-agent")||"unknown",path:_.pathname,query:_.search}),{success:!0,message:w?"Logged out successfully":"Session revoked successfully"}},{body:md,detail:{tags:["Authentication"],summary:"Revoke session",description:"Revoke a specific session by ID"}}),e.delete(`${a}/all`,async(l)=>{if(!o)return{success:!1,message:"Database not configured"};let d=l.request.headers.get("x-user-id");if(!d)return{success:!1,message:"Authentication required"};let b=l.body,u=l.request.headers.get("x-session-id"),$=o.update(t).set({isActive:!1,revokedAt:new Date,revokedReason:b.reason||"user_revoked"}).where(Do(qn(s("userId"),d),qn(s("isActive"),!0)));if(b.excludeCurrent&&u){let{ne:w}=await import("drizzle-orm");$=o.update(t).set({isActive:!1,revokedAt:new Date,revokedReason:b.reason||"user_revoked"}).where(Do(qn(s("userId"),d),qn(s("isActive"),!0),w(s("id"),u)))}await $,c.info("[AUTH] All sessions revoked",{userId:d,excludeCurrent:b.excludeCurrent,reason:b.reason||"user_revoked"});let k=new URL(l.request.url);return c.audit({entityName:"user_sessions",operation:"SESSION_REVOKE_ALL",userId:d||void 0,summary:b.excludeCurrent?"All other sessions revoked":"All sessions revoked",ipAddress:l.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||l.request.headers.get("x-real-ip")?.trim()||"unknown",userAgent:l.request.headers.get("user-agent")||"unknown",path:k.pathname,query:k.search}),{success:!0,message:b.excludeCurrent?"All other sessions revoked successfully":"All sessions revoked successfully"}},{body:wd,detail:{tags:["Authentication"],summary:"Revoke all sessions",description:"Revoke all sessions for the current user (optionally exclude current)"}}),e.get(`${a}/stats`,async(l)=>{if(!o)return{success:!1,message:"Database not configured"};let d=l.request.headers.get("x-user-id");if(!d)return{success:!1,message:"Authentication required"};let{count:b,countDistinct:u}=await import("drizzle-orm"),$=await o.select({count:b()}).from(t).where(Do(qn(s("userId"),d),qn(s("isActive"),!0),p1(s("revokedAt")))),k=await o.select({count:u(s("deviceFingerprint"))}).from(t).where(Do(qn(s("userId"),d),qn(s("isActive"),!0))),w=await o.select({count:u(s("ipAddress"))}).from(t).where(Do(qn(s("userId"),d),qn(s("isActive"),!0)));return{success:!0,data:{activeSessions:$[0]?.count||0,uniqueDevices:k[0]?.count||0,uniqueIpAddresses:w[0]?.count||0}}},{detail:{tags:["Authentication"],summary:"Session statistics",description:"Get session statistics for the current user"}}),e.post(`${a}/approve`,async(l)=>{if(!o)return{success:!1,message:"Database not configured"};let{token:d}=l.body;if(!d)return{success:!1,message:"Token is required"};let b=await o.select().from(t).where(qn(s("approvalToken"),d)).limit(1);if(b.length===0)return{success:!1,message:"Invalid or expired approval token"};let u=b[0];if(u.approvalStatus!=="pending")return{success:!1,message:"Session already processed"};return await o.update(t).set({approvalStatus:"approved",isActive:!0,approvalRespondedAt:new Date,approvalToken:null}).where(qn(s("id"),u.id)),c.info("[AUTH] Device approved",{sessionId:u.id,userId:u.userId}),{success:!0,message:"Device approved successfully"}},{detail:{tags:["Authentication"],summary:"Approve pending device",description:"Approve a pending device login request"}}),e.post(`${a}/reject`,async(l)=>{if(!o)return{success:!1,message:"Database not configured"};let{token:d}=l.body;if(!d)return{success:!1,message:"Token is required"};let b=await o.select().from(t).where(qn(s("approvalToken"),d)).limit(1);if(b.length===0)return{success:!1,message:"Invalid or expired approval token"};let u=b[0];if(u.approvalStatus!=="pending")return{success:!1,message:"Session already processed"};return await o.update(t).set({approvalStatus:"rejected",isActive:!1,revokedAt:new Date,revokedReason:"user_rejected",approvalRespondedAt:new Date,approvalToken:null}).where(qn(s("id"),u.id)),c.info("[AUTH] Device rejected",{sessionId:u.id,userId:u.userId}),{success:!0,message:"Device rejected and blocked"}},{detail:{tags:["Authentication"],summary:"Reject pending device",description:"Reject a pending device login request"}}),e.get(`${a}/pending`,async(l)=>{if(!o)return{success:!1,message:"Database not configured"};let d=l.request.headers.get("x-user-id");if(!d)return{success:!1,message:"Authentication required"};let b=await o.select().from(t).where(Do(qn(s("userId"),d),qn(s("approvalStatus"),"pending"))).orderBy(K1(s("createdAt")));return{success:!0,data:{sessions:b.map(($)=>{let k=$;return{...ls(k),approvalStatus:k.approval_status||k.approvalStatus,approvalToken:k.approval_token||k.approvalToken,approvalRequestedAt:k.approval_requested_at?.toISOString()||k.approvalRequestedAt?.toISOString()}}),totalCount:b.length}}},{detail:{tags:["Authentication"],summary:"List pending devices",description:"Get all pending device approval requests for the current user"}}),e}var $d=f(()=>{hd();j1();hd()});var v1={};Zt(v1,{createSessionsRoute:()=>fs,createRegisterRoute:()=>ss,createRefreshRoute:()=>is,createPasswordSetRoute:()=>es,createPasswordResetRoute:()=>as,createPasswordChangeRoute:()=>cs,createMeRoute:()=>os,createMagicLinkRoute:()=>ts,createLogoutRoute:()=>di,createLoginRoute:()=>li,createInviteRoute:()=>ii,createEmailVerificationRoutes:()=>ti,createAuthRoutes:()=>T1});function T1(n,r){let{authConfig:t,features:o,helpers:c}=r,a=t.authentication?.cookieMaxAgeBufferSeconds??0,e={accessTokenName:t.authentication?.accessToken?.name||"access_token",refreshTokenName:t.authentication?.refreshToken?.name||"refresh_token",sessionTokenName:t.authentication?.sessionToken?.name||"session_token",accessTokenMaxAge:Math.max(0,ot(t.authentication?.accessToken?.expiresIn||"15m")-a),refreshTokenMaxAge:ot(t.authentication?.refreshToken?.expiresIn||"7d"),sessionTokenMaxAge:ot(t.authentication?.sessionToken?.expiresIn||"30d")};if(t.logger.info("[AUTH] Cookie config created",{accessTokenMaxAge:e.accessTokenMaxAge,refreshTokenMaxAge:e.refreshTokenMaxAge,sessionTokenMaxAge:e.sessionTokenMaxAge,accessTokenExpiresIn:t.authentication?.accessToken?.expiresIn,sessionTokenExpiresIn:t.authentication?.sessionToken?.expiresIn}),o.login?.enabled){let i=li(t,o.login,c.signAccessToken,c.signRefreshToken,c.createSession,c.saveSessionToDb,e,r.tokenResponseConfig);n.use(i)}if(o.register?.enabled){let i=ss(t,o.register,c.sendWelcomeEmail,c.signAccessToken,c.signRefreshToken,c.createSession,e,r.tokenResponseConfig,r.emailService,r.appName);if(n.use(i),o.register.emailVerification?.enabled){let s=ti({authConfig:t,registerConfig:o.register,emailService:r.emailService,appName:r.appName});n.use(s)}}if(o.logout?.enabled){let i=di(t,o.logout,c.destroySession,c.revokeSessionInDb);n.use(i)}if(o.refresh?.enabled){let i=is(t,o.refresh,c.verifyRefreshToken,c.signAccessToken,c.signRefreshToken,r.tokenResponseConfig,a);n.use(i)}if(o.passwordReset?.enabled&&c.storeResetToken&&c.getResetToken&&c.deleteResetToken){let i=as(t,o.passwordReset,c.storeResetToken,c.getResetToken,c.deleteResetToken,c.sendResetEmail);n.use(i)}if(o.passwordChange?.enabled){let i=cs(t,o.passwordChange);n.use(i)}if(o.passwordSet?.enabled){let i=es(t,o.passwordSet,c.getMagicToken,c.deleteMagicToken);n.use(i)}if(o.sessions?.enabled&&r.sessionsTable){let i=fs(t,o.sessions,r.sessionsTable);n.use(i)}if(o.magicLink?.enabled&&r.emailService?.isAvailable()&&c.storeMagicToken&&c.getMagicToken&&c.deleteMagicToken){let i=ts(t,o.magicLink,r.emailService,c.signAccessToken,c.signRefreshToken,c.createSession,c.storeMagicToken,c.getMagicToken,c.deleteMagicToken,r.appName);n.use(i)}if(o.me?.enabled){let i=os(t,o.me,r.schemaTables||{},r.schemaRelations||{},r.databaseUrl);n.use(i)}if(o.invite?.enabled&&r.emailService?.isAvailable()&&c.storeMagicToken){let i=ii(t,o.invite,r.emailService,c.storeMagicToken,r.appName,c.getMagicToken);n.use(i)}if(o.captcha?.enabled&&r.captchaService){let i=xg({captchaService:r.captchaService,logger:t.logger,basePath:o.captcha.route||"/auth/captcha"});n.use(i)}return n}var kd=f(()=>{Ne();Lg();bf();uf();hf();$f();y0();nd();od();id();fd();bd();_d();$d();bf();uf();hf();$f();y0();nd();od();id();fd();bd();_d();$d()});import{batch as us,createStore as r2}from"h-state";import{useEffectEvent as t2}from"react";function o2(n){let r={};for(let t of Object.keys(n))r[t]={isPending:!1,data:null,error:null,code:null};return r}function c2(n,r){let{useStore:t}=r2(o2(n),{_callEndpoint:(o)=>async(c,a)=>{if(!o[c])return;us(()=>{o[c].isPending=!0,o[c].error=null});try{let i=await r(c,a.payload);if(us(()=>{if(o[c].isPending=!1,o[c].code=i.code??null,i.isSuccess&&i.data!==void 0)o[c].data=i.data,o[c].error=null;else o[c].error=i.errors??null}),i.isSuccess)a.onAfterHandle?.(i.data??i);else a.onErrorHandle?.(i.errors??{message:"Request failed"},i.code)}catch(i){us(()=>{o[c].isPending=!1,o[c].error={message:i instanceof Error?i.message:"Unknown error"}}),a.onErrorHandle?.({message:i instanceof Error?i.message:"Unknown error"},null)}}});return function(){let c=t(),a=t2((i,s)=>{c._callEndpoint(i,s)}),e={};for(let i of Object.keys(n)){let s=(l)=>{a(i,l)};e[i]={state:c[i],start:s}}return e}}var Ed={$schema:"../schemas/nucleus.tables.schema.json",tables:[{table_name:"users",feature_set:["authentication"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"email",type:"varchar",length:255},{name:"password",type:"varchar",length:255},{name:"verified_at",type:"timestamp"},{name:"email_verification_token",type:"varchar",length:255},{name:"email_verification_token_expires_at",type:"timestamp"},{name:"email_verification_sent_at",type:"timestamp"},{name:"email_verification_attempts",type:"integer",default:0},{name:"last_login_at",type:"timestamp"},{name:"login_count",type:"integer",default:0},{name:"is_locked",type:"boolean",default:!1},{name:"locked_until",type:"timestamp"},{name:"failed_login_attempts",type:"integer",default:0},{name:"is_god",type:"boolean",default:!1}],indexes:[{columns:["email"],unique:!0},{columns:["email","is_active"]},{columns:["last_login_at"]},{columns:["is_locked","locked_until"]}]},{table_name:"profiles",feature_set:["authentication"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"user_id",type:"uuid",notNull:!0,references:{table:"users",column:"id"}},{name:"first_name",type:"varchar",length:100,notNull:!0},{name:"last_name",type:"varchar",length:100,notNull:!0}],indexes:[{columns:["user_id"],unique:!0},{columns:["first_name","last_name"]}]},{table_name:"roles",feature_set:["authentication","authorization"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"name",type:"varchar",length:100,notNull:!0},{name:"description",type:"varchar",length:500}],indexes:[{columns:["name"],unique:!0}]},{table_name:"claims",feature_set:["authentication","authorization"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"action",type:"varchar",length:100,notNull:!0},{name:"description",type:"varchar",length:500},{name:"path",type:"varchar",length:200,notNull:!0},{name:"method",type:"varchar",length:10,notNull:!0}],indexes:[{columns:["action"],unique:!0},{columns:["path","method"]}]},{table_name:"user_roles",feature_set:["authentication","authorization"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"user_id",type:"uuid",notNull:!0,references:{table:"users",column:"id",onDelete:"cascade"}},{name:"role_id",type:"uuid",notNull:!0,references:{table:"roles",column:"id",onDelete:"cascade"}}],indexes:[{columns:["user_id"]},{columns:["role_id"]}],constraints:{unique:[{name:"unique_user_role",columns:["user_id","role_id"]}]}},{table_name:"role_claims",feature_set:["authentication","authorization"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"role_id",type:"uuid",notNull:!0,references:{table:"roles",column:"id",onDelete:"cascade"}},{name:"claim_id",type:"uuid",notNull:!0,references:{table:"claims",column:"id",onDelete:"cascade"}},{name:"scope",type:"text"}],indexes:[{columns:["role_id"]},{columns:["claim_id"]},{columns:["role_id","claim_id","scope"]}]},{table_name:"files",feature_set:["storage"],add_base_columns:!0,is_form_data:!0,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"name",type:"varchar",length:255,notNull:!0},{name:"original_name",type:"varchar",length:255,notNull:!0},{name:"type",type:"varchar",length:50,enumValues:["image","document","video","audio","profile_picture"]},{name:"path",type:"varchar",length:500,notNull:!0},{name:"size",type:"bigint",mode:"number",notNull:!0},{name:"mime_type",type:"varchar",length:100,notNull:!0},{name:"extension",type:"varchar",length:10,notNull:!0},{name:"uploaded_by",type:"uuid",references:{table:"users",column:"id"}}],indexes:[{columns:["type"]},{columns:["uploaded_by"]},{columns:["size"]}]},{table_name:"addresses",feature_set:["authentication"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"owner_type",type:"varchar",length:50,notNull:!0,enumValues:["user","company","contact"]},{name:"owner_id",type:"uuid",notNull:!0},{name:"name",type:"varchar",length:100,notNull:!0},{name:"street",type:"varchar",length:255},{name:"city",type:"varchar",length:100},{name:"state",type:"varchar",length:50},{name:"zip",type:"varchar",length:20},{name:"country",type:"varchar",length:50,default:"US"},{name:"latitude",type:"decimal",precision:10,scale:8},{name:"longitude",type:"decimal",precision:11,scale:8},{name:"neighborhood",type:"varchar",length:100},{name:"apartment",type:"varchar",length:50},{name:"province",type:"varchar",length:100},{name:"district",type:"varchar",length:100},{name:"type",type:"varchar",length:50}],indexes:[{columns:["city","state"]},{columns:["latitude","longitude"]},{columns:["type"]},{columns:["owner_type","owner_id"]}]},{table_name:"phones",feature_set:["authentication"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"owner_type",type:"varchar",length:50,notNull:!0,enumValues:["user","company","contact"]},{name:"owner_id",type:"uuid",notNull:!0},{name:"name",type:"varchar",length:100,notNull:!0},{name:"type",type:"varchar",length:50,enumValues:["mobile","office","fax"]},{name:"number",type:"varchar",length:20,notNull:!0},{name:"country_code",type:"varchar",length:10,notNull:!0,default:"+1"},{name:"extension",type:"varchar",length:10}],indexes:[{columns:["number"]},{columns:["type"]},{columns:["owner_type","owner_id"]}]},{table_name:"notifications",feature_set:["authentication","notification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],columns:[{name:"user_id",type:"uuid",notNull:!0},{name:"title",type:"varchar",length:255,notNull:!0},{name:"body",type:"varchar",length:1000},{name:"entity_name",type:"varchar",length:100},{name:"entity_id",type:"uuid"},{name:"is_seen",type:"boolean",notNull:!0,default:!1},{name:"seen_at",type:"timestamptz"}],indexes:[{columns:["user_id","created_at"]},{columns:["is_seen"]}]},{table_name:"tenants",feature_set:["multi-tenant"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["main"],excluded_schemas:[],excluded_methods:[],columns:[{name:"subdomain",type:"varchar",length:100,notNull:!0,unique:!0},{name:"company_id",type:"uuid",notNull:!0},{name:"schema_name",type:"varchar",length:100,notNull:!0,unique:!0},{name:"company_name",type:"varchar",length:255},{name:"god_admin_email",type:"varchar",length:255}],indexes:[]},{table_name:"verifications",feature_set:["authentication","verification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],columns:[{name:"requirement_id",type:"uuid",notNull:!0,references:{table:"verificationRequirements",column:"id"}},{name:"verifier_id",type:"uuid",notNull:!0,references:{table:"users",column:"id"}},{name:"signature_id",type:"uuid",references:{table:"files",column:"id"}},{name:"entity_name",type:"varchar",length:100,notNull:!0},{name:"entity_id",type:"uuid",notNull:!0},{name:"step_order",type:"integer",notNull:!0,default:1},{name:"decision",type:"varchar",length:50,notNull:!0,default:"pending",enumValues:["approved","rejected","pending"]},{name:"reason",type:"text"},{name:"diff",type:"jsonb"}],indexes:[{columns:["requirement_id"]},{columns:["verifier_id"]},{columns:["entity_name","entity_id"]},{columns:["entity_name","entity_id","step_order"]},{columns:["decision"]}]},{table_name:"verificationRequirements",feature_set:["authentication","verification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],columns:[{name:"entity_id",type:"uuid"},{name:"entity_name",type:"varchar",length:100},{name:"verifier_type",type:"varchar",length:30,enumValues:["user","role","entity_creator"]},{name:"verifier_id",type:"uuid"},{name:"verifier_role",type:"varchar",length:50},{name:"is_signature_mandatory",type:"boolean",notNull:!0},{name:"step_order",type:"integer",notNull:!0,default:1},{name:"is_all_required",type:"boolean",notNull:!0,default:!1},{name:"connected_from_step_order",type:"integer"},{name:"position_x",type:"numeric"},{name:"position_y",type:"numeric"}],indexes:[{columns:["entity_id"]}]},{table_name:"verificationFlows",feature_set:["authentication","verification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],columns:[{name:"entity_name",type:"varchar",length:100,notNull:!0},{name:"name",type:"varchar",length:255,notNull:!0},{name:"description",type:"text"},{name:"trigger_on",type:"varchar",length:50,notNull:!0,default:"update",enumValues:["create","update","delete","manual"]},{name:"trigger_fields",type:"jsonb"},{name:"is_draft",type:"boolean",notNull:!0,default:!0},{name:"published_at",type:"timestamptz"},{name:"viewport",type:"jsonb"}],indexes:[{columns:["entity_name"]},{columns:["entity_name","trigger_on"]},{columns:["is_draft"]}]},{table_name:"verificationSteps",feature_set:["authentication","verification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],columns:[{name:"flow_id",type:"uuid",notNull:!0,references:{table:"verificationFlows",column:"id",onDelete:"cascade"}},{name:"entity_name",type:"varchar",length:100,notNull:!0},{name:"node_id",type:"varchar",length:100,notNull:!0},{name:"node_type",type:"varchar",length:50,notNull:!0,default:"step",enumValues:["start","step","condition","notification","end"]},{name:"step_order",type:"integer",notNull:!0,default:1},{name:"name",type:"varchar",length:255},{name:"description",type:"text"},{name:"position_x",type:"numeric",notNull:!0,default:0},{name:"position_y",type:"numeric",notNull:!0,default:0},{name:"width",type:"numeric"},{name:"height",type:"numeric"},{name:"style",type:"jsonb"},{name:"data",type:"jsonb"}],indexes:[{columns:["flow_id"]},{columns:["entity_name"]},{columns:["flow_id","node_id"],unique:!0},{columns:["entity_name","step_order"]}]},{table_name:"verificationEdges",feature_set:["authentication","verification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],columns:[{name:"flow_id",type:"uuid",notNull:!0,references:{table:"verificationFlows",column:"id",onDelete:"cascade"}},{name:"edge_id",type:"varchar",length:100,notNull:!0},{name:"source_node_id",type:"varchar",length:100,notNull:!0},{name:"target_node_id",type:"varchar",length:100,notNull:!0},{name:"source_handle",type:"varchar",length:50},{name:"target_handle",type:"varchar",length:50},{name:"edge_type",type:"varchar",length:50,default:"default",enumValues:["default","conditional","success","failure"]},{name:"label",type:"varchar",length:255},{name:"condition",type:"jsonb"},{name:"style",type:"jsonb"},{name:"animated",type:"boolean",default:!1}],indexes:[{columns:["flow_id"]},{columns:["flow_id","edge_id"],unique:!0},{columns:["source_node_id"]},{columns:["target_node_id"]}]},{table_name:"verificationNotificationRules",feature_set:["authentication","verification","notification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],columns:[{name:"flow_id",type:"uuid",notNull:!0,references:{table:"verificationFlows",column:"id",onDelete:"cascade"}},{name:"step_node_id",type:"varchar",length:100},{name:"trigger",type:"varchar",length:50,notNull:!0,enumValues:["on_flow_started","on_step_reached","on_approved","on_rejected","on_flow_completed"]},{name:"channel",type:"varchar",length:20,notNull:!0,default:"portal",enumValues:["portal","email","both"]},{name:"title_template",type:"varchar",length:255},{name:"body_template",type:"text"},{name:"starts_at",type:"timestamptz"},{name:"expires_at",type:"timestamptz"}],indexes:[{columns:["flow_id"]},{columns:["flow_id","step_node_id"]},{columns:["trigger"]}]},{table_name:"verificationNotificationRecipients",feature_set:["authentication","verification","notification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],columns:[{name:"rule_id",type:"uuid",notNull:!0},{name:"recipient_type",type:"varchar",length:20,notNull:!0,enumValues:["user","role","all_verifiers","step_verifier"]},{name:"recipient_user_id",type:"uuid"},{name:"recipient_role_id",type:"uuid"},{name:"channel",type:"varchar",length:20,notNull:!0,enumValues:["portal"]}],indexes:[{columns:["rule_id"]},{columns:["recipient_type"]},{columns:["channel"]}]},{table_name:"user_sessions",feature_set:["authentication"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:["POST","PUT","PATCH"],columns:[{name:"user_id",type:"uuid",notNull:!0,references:{table:"users",column:"id",onDelete:"cascade"}},{name:"token_hash",type:"varchar",length:255,notNull:!0},{name:"refresh_token_hash",type:"varchar",length:255},{name:"device_fingerprint",type:"varchar",length:255},{name:"device_name",type:"varchar",length:100},{name:"device_type",type:"varchar",length:50,enumValues:["desktop","mobile","tablet","unknown"]},{name:"browser_name",type:"varchar",length:50},{name:"browser_version",type:"varchar",length:20},{name:"os_name",type:"varchar",length:50},{name:"os_version",type:"varchar",length:20},{name:"ip_address",type:"varchar",length:45,notNull:!0},{name:"location_country",type:"varchar",length:100},{name:"location_city",type:"varchar",length:100},{name:"location_coordinates",type:"varchar",length:50},{name:"last_activity_at",type:"timestamptz",notNull:!0,defaultRaw:"now()"},{name:"expires_at",type:"timestamptz",notNull:!0},{name:"revoked_at",type:"timestamptz"},{name:"revoked_reason",type:"varchar",length:100,enumValues:["user_logout","user_revoked","admin_revoked","security_concern","password_changed","expired","replaced"]},{name:"is_current",type:"boolean",notNull:!0,default:!1},{name:"login_method",type:"varchar",length:50,enumValues:["password","oauth_google","oauth_github","oauth_microsoft","magic_link","sso","api_key"]},{name:"remember_me",type:"boolean",notNull:!0,default:!1},{name:"trust_score",type:"integer",default:100},{name:"approval_status",type:"varchar",length:20,default:"approved",enumValues:["approved","pending","rejected"]},{name:"approval_token",type:"varchar",length:64},{name:"approval_requested_at",type:"timestamptz"},{name:"approval_responded_at",type:"timestamptz"}],indexes:[{columns:["user_id"]},{columns:["token_hash"],unique:!0},{columns:["refresh_token_hash"]},{columns:["user_id","is_active"]},{columns:["expires_at"]},{columns:["device_fingerprint"]},{columns:["ip_address"]},{columns:["last_activity_at"]},{columns:["approval_status"]},{columns:["approval_token"]}]},{table_name:"password_reset_tokens",feature_set:["authentication"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:["POST","PUT","PATCH","DELETE"],columns:[{name:"user_id",type:"uuid",notNull:!0,references:{table:"users",column:"id",onDelete:"cascade"}},{name:"token_hash",type:"varchar",length:255,notNull:!0},{name:"expires_at",type:"timestamptz",notNull:!0},{name:"used_at",type:"timestamptz"}],indexes:[{columns:["token_hash"],unique:!0},{columns:["user_id"]},{columns:["expires_at"]}]},{table_name:"magic_link_tokens",feature_set:["authentication"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:["POST","PUT","PATCH","DELETE"],columns:[{name:"user_id",type:"uuid",notNull:!0,references:{table:"users",column:"id",onDelete:"cascade"}},{name:"email",type:"varchar",length:255,notNull:!0},{name:"token_hash",type:"varchar",length:255,notNull:!0},{name:"expires_at",type:"timestamptz",notNull:!0},{name:"used_at",type:"timestamptz"}],indexes:[{columns:["token_hash"],unique:!0},{columns:["user_id"]},{columns:["email"]},{columns:["expires_at"]}]},{table_name:"audit_logs",feature_set:["audit"],add_base_columns:!1,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:["POST","PUT","DELETE","PATCH","TOGGLE","VERIFICATION"],columns:[{name:"id",type:"uuid",primaryKey:!0,defaultRaw:"gen_random_uuid()"},{name:"entity_id",type:"uuid"},{name:"entity_name",type:"text",notNull:!0},{name:"operation_type",type:"text",notNull:!0},{name:"user_id",type:"uuid"},{name:"ip_address",type:"text"},{name:"user_agent",type:"text"},{name:"summary",type:"text"},{name:"old_values",type:"jsonb"},{name:"new_values",type:"jsonb"},{name:"created_at",type:"timestamp",notNull:!0,defaultRaw:"now()"},{name:"path",type:"text"},{name:"query",type:"text"}],indexes:[{columns:["entity_id"]},{columns:["entity_name"]},{columns:["user_id"]},{columns:["created_at"]}]}]};var gs={login:{key:"LOGIN",method:"POST",defaultRoute:"/auth/login",defaultIsPublic:!0,_payload:void 0,_success:void 0,_error:void 0},register:{key:"REGISTER",method:"POST",defaultRoute:"/auth/register",defaultIsPublic:!0,_payload:void 0,_success:void 0,_error:void 0},logout:{key:"LOGOUT",method:"POST",defaultRoute:"/auth/logout",defaultIsPublic:!1,_payload:void 0,_success:void 0,_error:void 0},refresh:{key:"REFRESH",method:"POST",defaultRoute:"/auth/refresh",defaultIsPublic:!1,_payload:void 0,_success:void 0,_error:void 0},me:{key:"ME",method:"GET",defaultRoute:"/auth/me",defaultIsPublic:!1,_payload:void 0,_success:void 0,_error:void 0},passwordChange:{key:"PASSWORD_CHANGE",method:"POST",defaultRoute:"/auth/password-change",defaultIsPublic:!1,_payload:void 0,_success:void 0,_error:void 0},passwordSet:{key:"PASSWORD_SET",method:"POST",defaultRoute:"/auth/password-set",defaultIsPublic:!1,_payload:void 0,_success:void 0,_error:void 0},passwordReset:{key:"PASSWORD_RESET_REQUEST",method:"POST",defaultRoute:"/auth/password-reset",defaultIsPublic:!0,subEndpoints:[{key:"PASSWORD_RESET_REQUEST",method:"POST",suffix:"/request",_payload:void 0,_success:void 0,_error:void 0},{key:"PASSWORD_RESET_CONFIRM",method:"POST",suffix:"/confirm",_payload:void 0,_success:void 0,_error:void 0}]},sessions:{key:"SESSIONS",method:"GET",defaultRoute:"/auth/sessions",defaultIsPublic:!1,subEndpoints:[{key:"SESSIONS",method:"GET",suffix:"",_payload:void 0,_success:void 0,_error:void 0},{key:"SESSIONS_CURRENT",method:"GET",suffix:"/current",_payload:void 0,_success:void 0,_error:void 0},{key:"SESSIONS_STATS",method:"GET",suffix:"/stats",_payload:void 0,_success:void 0,_error:void 0},{key:"SESSIONS_PENDING",method:"GET",suffix:"/pending",_payload:void 0,_success:void 0,_error:void 0},{key:"SESSIONS_REVOKE",method:"DELETE",suffix:"/:sessionId",_payload:void 0,_success:void 0,_error:void 0},{key:"SESSIONS_REVOKE_ALL",method:"DELETE",suffix:"/all",_payload:void 0,_success:void 0,_error:void 0},{key:"SESSIONS_APPROVE",method:"POST",suffix:"/approve",_payload:void 0,_success:void 0,_error:void 0},{key:"SESSIONS_REJECT",method:"POST",suffix:"/reject",_payload:void 0,_success:void 0,_error:void 0}]},magicLink:{key:"MAGIC_LINK",method:"POST",defaultRoute:"/auth/magic-link",defaultIsPublic:!0,subEndpoints:[{key:"MAGIC_LINK",method:"POST",suffix:"",_payload:void 0,_success:void 0,_error:void 0},{key:"MAGIC_LINK_VERIFY",method:"GET",suffix:"/verify",routeKey:"verifyRoute",_payload:void 0,_success:void 0,_error:void 0}]},invite:{key:"INVITE",method:"POST",defaultRoute:"/auth/invite",defaultIsPublic:!1,subEndpoints:[{key:"INVITE",method:"POST",suffix:"",_payload:void 0,_success:void 0,_error:void 0},{key:"INVITE_VERIFY",method:"POST",suffix:"/verify",_payload:void 0,_success:void 0,_error:void 0}]},emailVerification:{key:"VERIFY_EMAIL",method:"GET",defaultRoute:"/verify-email",defaultIsPublic:!0,subEndpoints:[{key:"VERIFY_EMAIL",method:"GET",suffix:"",_payload:void 0,_success:void 0,_error:void 0},{key:"RESEND_VERIFICATION",method:"POST",suffix:"",routeKey:"resendRoute",defaultRoute:"/resend-verification",_payload:void 0,_success:void 0,_error:void 0}]},captcha:{key:"CAPTCHA",method:"GET",defaultRoute:"/auth/captcha",defaultIsPublic:!0,subEndpoints:[{key:"CAPTCHA_GENERATE",method:"GET",suffix:"/generate",_payload:void 0,_success:void 0,_error:void 0},{key:"CAPTCHA_VALIDATE",method:"POST",suffix:"/validate",_payload:void 0,_success:void 0,_error:void 0}]}},Md={healthCheck:{key:"MONITORING_HEALTH_CHECK",method:"GET",suffix:"/health",_payload:void 0,_success:void 0,_error:void 0},getSettings:{key:"MONITORING_GET_SETTINGS",method:"GET",suffix:"/settings",_payload:void 0,_success:void 0,_error:void 0},changeSettings:{key:"MONITORING_CHANGE_SETTINGS",method:"PATCH",suffix:"/settings",_payload:void 0,_success:void 0,_error:void 0},getLogs:{key:"MONITORING_GET_LOGS",method:"GET",suffix:"/logs",_payload:void 0,_success:void 0,_error:void 0}};var e2=["profiles","addresses","phones","files","users","roles","claims","user_roles","role_claims","audit_logs"],i2=Ed.tables.filter((n)=>e2.includes(n.table_name));function ic(n){return n.replace(/([a-z])([A-Z])/g,"$1_$2").replace(/[\s-]+/g,"_").toUpperCase()}function s2(n){return n.replace(/_([a-z])/g,(r,t)=>t.toUpperCase())}function _s(n){if(n.endsWith("ies"))return`${n.slice(0,-3)}y`;if(n.endsWith("ses"))return`${n.slice(0,-2)}`;if(n.endsWith("s"))return n.slice(0,-1);return n}function $t(n,r){let t=ic(n),o=ic(_s(n));switch(r){case"GET":return`GET_${t}`;case"POST":return`ADD_${o}`;case"PUT":return`UPDATE_${o}`;case"PATCH":return`PATCH_${o}`;case"DELETE":return`DELETE_${o}`}}function ec(n,r){let t=ic(n);switch(r){case"POST":return`BULK_ADD_${t}`;case"PUT":return`BULK_UPDATE_${t}`;case"DELETE":return`BULK_DELETE_${t}`}}function yt(n,r){if(!n.excluded_methods)return!1;let t={GET:"GET",POST:"POST",PUT:"PUT",PATCH:"PATCH",DELETE:"DELETE"};return n.excluded_methods.includes(t[r])}function Dd(n){let r={};for(let t of n.entities){let o=t.table_name,c=`/${o}`;if(!yt(t,"GET")){r[$t(o,"GET")]={method:"GET",path:c,isPublic:t.is_public?.GET??!1,_payload:void 0,_success:void 0,_error:void 0};let a=ic(_s(o));r[`GET_${a}_BY_ID`]={method:"GET",path:`${c}/:id`,isPublic:t.is_public?.GET??!1,_payload:void 0,_success:void 0,_error:void 0},r[`GET_${ic(o)}_DISTINCT`]={method:"GET",path:`${c}/distinct/:field`,isPublic:t.is_public?.GET??!1,_payload:void 0,_success:void 0,_error:void 0}}if(!yt(t,"POST"))r[$t(o,"POST")]={method:"POST",path:c,isPublic:t.is_public?.POST??!1,isFormData:t.is_form_data,_payload:void 0,_success:void 0,_error:void 0};if(!yt(t,"PUT"))r[$t(o,"PUT")]={method:"PUT",path:`${c}/:id`,isPublic:t.is_public?.PUT??!1,isFormData:t.is_form_data,_payload:void 0,_success:void 0,_error:void 0};if(!yt(t,"PATCH"))r[$t(o,"PATCH")]={method:"PATCH",path:`${c}/:id`,isPublic:t.is_public?.PATCH??!1,_payload:void 0,_success:void 0,_error:void 0};if(!yt(t,"DELETE"))r[$t(o,"DELETE")]={method:"DELETE",path:`${c}/:id`,isPublic:t.is_public?.DELETE??!1,_payload:void 0,_success:void 0,_error:void 0};if(t.bulk_endpoints_enabled){if(!yt(t,"POST"))r[ec(o,"POST")]={method:"POST",path:`${c}/bulk`,isPublic:t.is_public?.POST??!1,_payload:void 0,_success:void 0,_error:void 0};if(!yt(t,"PUT"))r[ec(o,"PUT")]={method:"PUT",path:`${c}/bulk`,isPublic:t.is_public?.PUT??!1,_payload:void 0,_success:void 0,_error:void 0};if(!yt(t,"DELETE"))r[ec(o,"DELETE")]={method:"DELETE",path:`${c}/bulk`,isPublic:t.is_public?.DELETE??!1,_payload:void 0,_success:void 0,_error:void 0}}}return r}function Hd(n){let r={},t=n.authentication;if(!t?.enabled)return r;for(let[o,c]of Object.entries(gs)){let a=t[o];if(!a?.enabled)continue;let e=a.route||c.defaultRoute,i=a.isPublic??c.defaultIsPublic;if("subEndpoints"in c&&c.subEndpoints)for(let s of c.subEndpoints){let l="routeKey"in s&&s.routeKey&&a[s.routeKey]?String(a[s.routeKey]):("defaultRoute"in s)&&s.defaultRoute?String(s.defaultRoute):`${e}${s.suffix}`;r[s.key]={method:s.method,path:l,isPublic:s.key==="MAGIC_LINK_VERIFY"?!0:i,_payload:s._payload,_success:s._success,_error:s._error}}else if("_payload"in c)r[c.key]={method:c.method,path:e,isPublic:i,_payload:c._payload,_success:c._success,_error:c._error}}return r}function zd(){let n={};for(let r of i2){let t=r.table_name,c=`/${s2(t)}`,a=t==="files";n[$t(t,"GET")]={method:"GET",path:c,isPublic:!1,_payload:void 0,_success:void 0,_error:void 0};let e=ic(_s(t));if(n[`GET_${e}_BY_ID`]={method:"GET",path:`${c}/:id`,isPublic:!1,_payload:void 0,_success:void 0,_error:void 0},n[$t(t,"POST")]={method:"POST",path:c,isPublic:!1,isFormData:a,_payload:void 0,_success:void 0,_error:void 0},n[$t(t,"PUT")]={method:"PUT",path:`${c}/:id`,isPublic:!1,isFormData:a,_payload:void 0,_success:void 0,_error:void 0},n[$t(t,"PATCH")]={method:"PATCH",path:`${c}/:id`,isPublic:!1,_payload:void 0,_success:void 0,_error:void 0},n[$t(t,"DELETE")]={method:"DELETE",path:`${c}/:id`,isPublic:!1,_payload:void 0,_success:void 0,_error:void 0},r.bulk_endpoints_enabled)n[ec(t,"POST")]={method:"POST",path:`${c}/bulk`,isPublic:!1,_payload:void 0,_success:void 0,_error:void 0},n[ec(t,"PUT")]={method:"PUT",path:`${c}/bulk`,isPublic:!1,_payload:void 0,_success:void 0,_error:void 0},n[ec(t,"DELETE")]={method:"DELETE",path:`${c}/bulk`,isPublic:!1,_payload:void 0,_success:void 0,_error:void 0}}return n}function Ud(n){let r={},t=n.liveMonitoring;if(!t?.enabled)return r;let o=t.basePath||"/monitoring";for(let c of Object.values(Md))r[c.key]={method:c.method,path:`${o}${c.suffix}`,isPublic:!1,_payload:c._payload,_success:c._success,_error:c._error};return r}function l2(n,r){let t=Dd(n),o=Hd(n),c=zd(),a=Ud(n);return{...t,...o,...c,...a,...r??{}}}Ms();import{randomUUID as g2}from"crypto";var _2={timeout:30000,retries:0,retryDelay:1000,debug:!1};class na{config;logger;constructor(n={}){this.config={..._2,...n},this.logger=new Yr({service:"ServerFetch",prettyPrint:this.config.debug,colorize:this.config.debug,auditEnabled:!1})}buildUrl(n){if(n.startsWith("http://")||n.startsWith("https://"))return n;return this.config.baseUrl?`${this.config.baseUrl}${n}`:n}buildHeaders(n){let r=new Headers;if(this.config.defaultHeaders)for(let[t,o]of Object.entries(this.config.defaultHeaders))r.set(t,o);if(n)if(n instanceof Headers)n.forEach((t,o)=>{r.set(o,t)});else if(Array.isArray(n))for(let[t,o]of n)r.set(t,o);else for(let[t,o]of Object.entries(n))r.set(t,o);return r}parseResponseHeaders(n){let r={};if(n.forEach((t,o)=>{if(o.toLowerCase()==="set-cookie"){let c=r[o];r[o]=c?`${c}, ${t}`:t}else r[o]=t}),typeof n.getSetCookie==="function"){let t=n.getSetCookie();if(t.length>0)r["set-cookie"]=t.join(", ")}return r}async executeWithTimeout(n,r,t){let o=new AbortController,c=setTimeout(()=>o.abort(),r);try{return await Promise.race([n,new Promise((e,i)=>{o.signal.addEventListener("abort",()=>{i(Error(`Request timeout after ${r}ms`))})})])}finally{clearTimeout(c)}}async fetch(n){let r=g2(),t=performance.now(),o=this.buildUrl(n.url),c=this.buildHeaders(n.headers),a=n.timeout??this.config.timeout??30000,e=n.retries??this.config.retries??0,i=n.retryDelay??this.config.retryDelay??1000,s;if(n.body)if(typeof n.body==="object"&&!(n.body instanceof FormData)&&!(n.body instanceof URLSearchParams)&&!(n.body instanceof Blob)&&!(n.body instanceof ArrayBuffer)){if(s=JSON.stringify(n.body),!c.has("content-type"))c.set("content-type","application/json")}else s=n.body;this.logger.debug(`[${r}] ${n.method} ${o}`,{method:n.method,url:o,hasBody:!!s});let l=null,d=0;while(d<=e)try{let u=await this.executeWithTimeout(fetch(o,{method:n.method,headers:c,body:s}),a,r),$=performance.now()-t,k=this.parseResponseHeaders(u.headers),w,_,R=await u.text();if(R)try{let x=JSON.parse(R);if(u.ok)w=x;else _=x}catch{if(!u.ok)_={message:R||u.statusText}}else if(!u.ok)_={message:u.statusText};let X={isSuccess:u.ok,response:w,errors:_,code:u.status,headers:k,durationMs:$,requestId:r,createdAt:new Date};if(u.ok)this.logger.info(`[${r}] ${n.method} ${o} ${u.status}`,{method:n.method,url:o,statusCode:u.status,durationMs:Math.round($)});else this.logger.warn(`[${r}] ${n.method} ${o} ${u.status}`,{method:n.method,url:o,statusCode:u.status,durationMs:Math.round($),error:_});return X}catch(u){if(l=u instanceof Error?u:Error(String(u)),d++,d<=e)this.logger.warn(`[${r}] Retry ${d}/${e} after error`,{method:n.method,url:o,error:l.message,attempt:d,retries:e}),await new Promise(($)=>setTimeout($,i))}let b=performance.now()-t;return this.logger.error(`[${r}] ${n.method} ${o} failed`,l,{method:n.method,url:o,durationMs:Math.round(b),attempts:d}),{isSuccess:!1,response:void 0,errors:{message:l?.message||"Unknown error"},code:null,headers:{},durationMs:b,requestId:r,createdAt:new Date}}async get(n,r){return this.fetch({...r,url:n,method:"GET"})}async post(n,r,t){return this.fetch({...t,url:n,method:"POST",body:r})}async put(n,r,t){return this.fetch({...t,url:n,method:"PUT",body:r})}async patch(n,r,t){return this.fetch({...t,url:n,method:"PATCH",body:r})}async delete(n,r){return this.fetch({...r,url:n,method:"DELETE"})}}var m2=new na;var w2={accessToken:"access_token",refreshToken:"refresh_token",sessionToken:"session_token"};function h2(n){let r=[],t="";for(let o=0;o<n.length;o++){let c=n[o];if(c===","){let a=n.slice(o+1).trimStart();if(/^[a-zA-Z0-9_-]+=/.test(a)){r.push(t.trim()),t="";continue}}t+=c}if(t.trim())r.push(t.trim());return r}function $2(n,r){let t={},o=["x-forwarded-for","x-real-ip","user-agent","accept-language","x-request-id","x-client-ip","cf-connecting-ip","true-client-ip"];for(let s of o){let l=n.get(s);if(l)t[s]=l}if(!t["user-agent"])t["user-agent"]="Nucleus-ServerAction/1.0";let c=n.get(`x-${r.accessToken}`),a=n.get(`x-${r.refreshToken}`),e=n.get(`x-${r.sessionToken}`);if(c)t[`x-${r.accessToken}`]=c;if(a)t[`x-${r.refreshToken}`]=a;if(e)t[`x-${r.sessionToken}`]=e;let i=n.get("cookie");if(i)t.cookie=i;return t}function k2(n){return n.replace(/_([a-z])/g,(r,t)=>t.toUpperCase())}function Jd(n){let r={};for(let[t,o]of Object.entries(n)){let c=t.startsWith("_")?t:k2(t);if(o instanceof Date)r[c]=o.toISOString();else if(o&&typeof o==="object"&&!Array.isArray(o))r[c]=Jd(o);else r[c]=o}return r}function R2(n,r){let t=new URLSearchParams,o=(a,e)=>{if(e===void 0||e===null)return;if(Array.isArray(e))for(let i of e)o(`${a}[]`,i);else if(e instanceof Date)t.append(a,e.toISOString());else if(typeof e==="object")for(let[i,s]of Object.entries(e))o(`${a}[${i}]`,s);else t.append(a,String(e))};for(let[a,e]of Object.entries(r))o(a,e);let c=t.toString();if(!c)return n;return n.includes("?")?`${n}&${c}`:`${n}?${c}`}function A2(n,r,t,o){let c={...w2,...r.tokenNames},a=new na({baseUrl:r.baseUrl,debug:r.debug,timeout:30000,retries:0});return async function(i,s){let l=n[i];if(!l)return{isSuccess:!1,errors:{message:`Endpoint "${i}" not found`},code:404};let d=await t(),b=await o(),u={};b.forEach((X,x)=>{u[x]=X});let $=$2(b,c),k=l.path,w;if(s&&typeof s==="object"&&!(s instanceof FormData)){let X=s;for(let[x,E]of Object.entries(X))if(E!=null){if(x.startsWith("_"))k=k.replace(`:${x.substring(1)}`,String(E));else if(x==="id"&&k.includes(":id"))k=k.replace(":id",String(E))}}if(l.method==="GET"&&s&&typeof s==="object")k=R2(k,s);else if(s!==void 0){if(l.isFormData&&s instanceof FormData)w=s;else if(w=Jd(s),!$["content-type"])$["content-type"]="application/json"}let _=await a.fetch({url:k,method:l.method,headers:$,body:w});if(_.headers["set-cookie"])try{let X=_.headers["set-cookie"],x=h2(X);for(let E of x){let[P,...M]=E.split(";");if(!P)continue;let[A,z]=P.split("=");if(A&&z){let h={};for(let g of M){let[B,G]=g.trim().split("=");if(!B)continue;let L=B.toLowerCase();if(L==="path")h.path=G;else if(L==="max-age")h.maxAge=Number(G);else if(L==="expires"&&G)h.expires=new Date(G);else if(L==="httponly")h.httpOnly=!0;else if(L==="secure")h.secure=!0;else if(L==="samesite")h.sameSite=G}d.set(A.trim(),z.trim(),h)}}}catch(X){console.warn("[ServerFactory] Failed to process Set-Cookie headers:",X instanceof Error?X.message:String(X))}let R=_.response;if(_.isSuccess&&R&&typeof R==="object"&&!Array.isArray(R)){let X=R;if("success"in X&&!("data"in X)){let{success:x,message:E,error:P,...M}=X;R={success:x,...E!==void 0?{message:E}:{},...P!==void 0?{error:P}:{},...Object.keys(M).length>0?{data:M}:{}}}}return{isSuccess:_.isSuccess,data:R,errors:_.errors,code:_.code,message:_.isSuccess?void 0:_.errors?.message}}}import{useEffect as Xd,useEffectEvent as zo,useRef as ra}from"react";import{batch as S2,createStore as E2}from"h-state";var M2={connection:{status:"disconnected",clientId:null,subscribedTopics:[],error:null,reconnectAttempt:0},events:[],maxEvents:100},{useStore:Ds}=E2(M2,{setConnectionStatus:(n)=>(r)=>{n.connection.status=r},setClientId:(n)=>(r)=>{n.connection.clientId=r},setSubscribedTopics:(n)=>(r)=>{n.connection.subscribedTopics=r},setError:(n)=>(r)=>{n.connection.error=r},setReconnectAttempt:(n)=>(r)=>{n.connection.reconnectAttempt=r},addEvent:(n)=>(r)=>{let t=[r,...n.events];n.events=t.slice(0,n.maxEvents)},clearEvents:(n)=>()=>{n.events=[]},reset:(n)=>()=>{S2(()=>{n.connection.status="disconnected",n.connection.clientId=null,n.connection.subscribedTopics=[],n.connection.error=null,n.connection.reconnectAttempt=0,n.events=[]})}});function D2(n){if(n.wsUrl){let a=n.wsUrl.replace(/\/$/,""),e=n.wsPath||"/api/events/subscribe",i=(n.topics||["*"]).join(",");return`${a}${e}?userId=${encodeURIComponent(n.userId)}&topics=${encodeURIComponent(i)}`}if(typeof window>"u")return"";let r=window.location.protocol==="https:"?"wss:":"ws:",t=window.location.host,o=n.wsPath||"/api/events/subscribe",c=(n.topics||["*"]).join(",");return`${r}//${t}${o}?userId=${encodeURIComponent(n.userId)}&topics=${encodeURIComponent(c)}`}var H2=0;function z2(n){let r=Ds(),t=ra(null),o=ra(null),c=ra(null),a=ra(!1),e=ra(n);e.current=n;let i=n.autoReconnect??!0,s=n.maxReconnectAttempts??10,l=n.reconnectBaseDelay??1000,d=n.reconnectMaxDelay??30000,b=n.heartbeatInterval??30000,u=n.debug??!1,$=(...z)=>{if(u)console.log("[usePubSub]",...z)},k=()=>{if(o.current)clearInterval(o.current),o.current=null},w=()=>{if(c.current)clearTimeout(c.current),c.current=null},_=(z)=>{k(),o.current=setInterval(()=>{if(z.readyState===WebSocket.OPEN)z.send(JSON.stringify({type:"ping"}))},b)},R=zo((z)=>{try{let h=JSON.parse(z.data);switch(h.type){case"connected":r.setConnectionStatus("connected"),r.setClientId(h.clientId),r.setSubscribedTopics(h.subscribedTopics),r.setReconnectAttempt(0),r.setError(null),$("Connected, clientId:",h.clientId);break;case"subscribed":r.setSubscribedTopics(h.topics),$("Subscribed to:",h.topics);break;case"event":{let g={id:`evt_${Date.now()}_${H2++}`,topic:h.topic,data:h.data,timestamp:h.timestamp,receivedAt:Date.now(),messageId:h.messageId,isRedelivery:h.isRedelivery};if(r.addEvent(g),h.messageId&&t.current?.readyState===WebSocket.OPEN)t.current.send(JSON.stringify({type:"ack",messageId:h.messageId}));break}case"pong":break;case"error":r.setError(Error(h.error)),$("Server error:",h.error);break}}catch{$("Failed to parse message")}}),X=zo((z)=>{if(a.current)return;if(!i)return;if(z>=s){r.setConnectionStatus("disconnected"),r.setError(Error("Max reconnection attempts reached")),$("Max reconnect attempts reached");return}let h=Math.min(l*2**z,d);$(`Reconnecting in ${h}ms (attempt ${z+1}/${s})`),r.setConnectionStatus("reconnecting"),r.setReconnectAttempt(z+1),w(),c.current=setTimeout(()=>{if(!a.current)x()},h)}),x=zo(()=>{if(a.current)return;if(t.current?.readyState===WebSocket.OPEN)return;if(!e.current.userId)return;if(t.current){if(t.current.onopen=null,t.current.onmessage=null,t.current.onerror=null,t.current.onclose=null,t.current.readyState===WebSocket.OPEN||t.current.readyState===WebSocket.CONNECTING)t.current.close();t.current=null}let z=D2(e.current);if(!z)return;r.setConnectionStatus("connecting"),r.setError(null),$("Connecting to:",z);let h=new WebSocket(z);t.current=h,h.onopen=()=>{$("WebSocket opened"),_(h)},h.onmessage=R,h.onerror=()=>{$("WebSocket error"),r.setError(Error("WebSocket connection error"))},h.onclose=(g)=>{if($("WebSocket closed",g.code,g.reason),k(),r.setConnectionStatus("disconnected"),r.setClientId(null),!a.current&&g.code!==4001){let B=r.connection.reconnectAttempt;X(B)}}}),E=zo(()=>{if(k(),w(),t.current){if(t.current.onopen=null,t.current.onmessage=null,t.current.onerror=null,t.current.onclose=null,t.current.readyState===WebSocket.OPEN||t.current.readyState===WebSocket.CONNECTING)t.current.close();t.current=null}r.setConnectionStatus("disconnected"),r.setClientId(null)}),P=zo((z)=>{if(t.current?.readyState!==WebSocket.OPEN)return;t.current.send(JSON.stringify({type:"subscribe",topics:z}))}),M=zo((z)=>{if(t.current?.readyState!==WebSocket.OPEN)return;t.current.send(JSON.stringify({type:"unsubscribe",topics:z}))}),A=zo((z)=>{return r.events.filter((h)=>h.topic===z)});return Xd(()=>{if(a.current=!1,n.userId)x();return()=>{a.current=!0,E()}},[n.userId]),Xd(()=>{if(r.connection.status==="connected"&&n.topics)P(n.topics)},[n.topics?.join(",")]),{isConnected:r.connection.status==="connected",isConnecting:r.connection.status==="connecting"||r.connection.status==="reconnecting",clientId:r.connection.clientId,subscribedTopics:r.connection.subscribedTopics,events:r.events,error:r.connection.error,reconnectAttempt:r.connection.reconnectAttempt,connect:x,disconnect:E,subscribe:P,unsubscribe:M,clearEvents:r.clearEvents,getEventsByTopic:A}}import{randomUUID as G4}from"crypto";var Js=kr(Cd(),1);import{Elysia as se,NotFoundError as lc}from"elysia";var Fr,no,Wt=typeof Bun<"u"&&!!Bun.file;function sc(){if(Fr||(Fr=process.getBuiltinModule("fs/promises")),no||(no=process.getBuiltinModule("path")),!no){console.warn("@elysiajs/static require path to be available.");return}return[Fr,no]}async function Qd(n){if(Fr||sc(),Wt){let r=new Bun.Glob("**/*.html"),t=[];for await(let o of r.scan(n))t.push(no.join(n,o));return t}return[]}async function zs(n){if(Fr||sc(),Wt){let t=new Bun.Glob("**/*"),o=[];for await(let c of t.scan(n))o.push(no.join(n,c));return o}let r=await Fr.readdir(n).catch(()=>[]);return(await Promise.all(r.map(async(t)=>{let o=n+no.sep+t,c=await Fr.stat(o).catch(()=>null);return c?c.isDirectory()?await zs(o):[no.resolve(n,o)]:[]}))).flat()}function Us(n){return Fr||sc(),Fr.stat(n).then(()=>!0,()=>!1)}class Bs{constructor(n=250,r=10800){this.max=n,this.ttl=r,this.map=new Map}get(n){let r=this.map.get(n);if(r)return r[1]<=Date.now()?void this.delete(n):(this.map.delete(n),this.map.set(n,r),r[0])}set(n,r){if(this.interval||(this.interval=setInterval(()=>{let t=Date.now();for(let[o,c]of this.map)c[1]<=t&&this.map.delete(o)},this.ttl)),this.map.has(n))this.map.delete(n);else if(this.map.size>=this.max){let t=this.map.keys().next().value;t!==void 0&&this.delete(t)}this.map.set(n,[r,Date.now()+this.ttl*1000])}delete(n){this.map.get(n)&&this.map.delete(n)}clear(){this.map.clear()}size(){return this.map.size}[Symbol.dispose](){this.interval&&clearInterval(this.interval)}}function Ws(n,r,t){if(n["cache-control"]&&/no-cache|no-store/.test(n["cache-control"]))return!1;if("if-none-match"in n){let o=n["if-none-match"];return o==="*"?!0:o===null||typeof r!="string"?!1:o===r}if(n["if-modified-since"]){let o=n["if-modified-since"];try{return Fr.stat(t).then((c)=>{if(c.mtime!==void 0&&c.mtime.getTime()<=Date.parse(o))return!0})}catch{}}return!1}var ie;function ta(n){return Wt?Bun.file(n):(Fr||sc(),Fr.readFile(n))}async function Ys(n){return Wt?new Bun.CryptoHasher("md5").update(await n.arrayBuffer()).digest("base64"):(ie||(ie=process.getBuiltinModule("crypto")),ie?ie.createHash("md5").update(n).digest("base64"):void console.warn("[@elysiajs/static] crypto is required to generate etag."))}var oa=(n)=>{if(!n)return!1;for(let r in n)return!0;return!1};async function Pd({assets:n="public",prefix:r="/public",staticLimit:t=1024,alwaysStatic:o=!1,ignorePatterns:c=[".DS_Store",".git",".env"],headers:a,maxAge:e=86400,directive:i="public",etag:s=!0,extension:l=!0,indexHTML:d=!0,decodeURI:b,silent:u}={}){if(typeof process>"u"||typeof process.getBuiltinModule>"u")return u||console.warn("[@elysiajs/static] require process.getBuiltinModule. Static plugin is disabled"),new se;let $=sc();if(!$)return new se;let[k,w]=$,_=w.sep!=="/"?(M)=>M.replace(/\\/g,"/"):(M)=>M,R=new Bs;r===w.sep&&(r="");let X=w.resolve(n),x=c.length?(M)=>c.find((A)=>typeof A=="string"?A.includes(M):A.test(M)):()=>!1,E=new se({name:"static",seed:r});if(o){let M=await zs(w.resolve(n));if(M.length<=t)for(let A of M){let z=function({headers:L}){if(G){let J=Ws(L,G,A);if(J===!0)return new Response(null,{status:304,headers:oa(a)?a:void 0});if(J!==!1){let W=R.get(g);return W?W.clone():J.then((U)=>{if(U)return new Response(null,{status:304,headers:a||void 0});let Y=new Response(B,{headers:Object.assign({"Cache-Control":e?`${i}, max-age=${e}`:i},a,G?{Etag:G}:{})});return R.set(r,Y),Y.clone()})}}let O=R.get(g);if(O)return O.clone();let v=new Response(B,{headers:Object.assign({"Cache-Control":e?`${i}, max-age=${e}`:i},a,G?{Etag:G}:{})});return R.set(g,v),v.clone()};var P=z;if(!A||x(A))continue;let h=A.replace(X,"");b&&(h=Js.default(h)??h);let g=_(w.join(r,h));if(Wt&&A.endsWith(".html")){let L=await import(A);E.get(g,L.default),d&&g.endsWith("/index.html")&&E.get(g.replace("/index.html",""),L.default);continue}l||(g=_(g.slice(0,g.lastIndexOf("."))));let B=Wt?ta(A):await ta(A);if(!B)return u||console.warn(`[@elysiajs/static] Failed to load file: ${A}`),new se;let G=await Ys(B);E.get(g,s?z:new Response(B,oa(a)?{headers:a}:void 0)),d&&g.endsWith("/index.html")&&E.get(g.replace("/index.html",""),s?z:new Response(B,oa(a)?{headers:a}:void 0))}return E}if(!(`GET_${r}/*`in E.routeTree)){if(Wt){let M=await Qd(w.resolve(n));for(let A of M){if(!A||x(A))continue;let z=A.replace(X,""),h=_(w.join(r,z)),g=await import(A);E.get(h,g.default),d&&h.endsWith("/index.html")&&E.get(h.replace("/index.html",""),g.default)}}E.onError(()=>{}).get(`${r.endsWith("/")?r.slice(0,-1):r}/*`,async({params:M,headers:A})=>{let z=_(w.join(n,b?Js.default(M["*"])??M["*"]:M["*"]));if(x(z))throw new lc;let h=R.get(z);if(h)return h.clone();try{let g=await k.stat(z).catch(()=>null);if(!g)throw new lc;if(!d&&g.isDirectory())throw new lc;let B;if(!Wt&&d){let O=w.join(z,"index.html"),v=R.get(O);if(v)return v.clone();await Us(O)&&(B=await ta(O))}if(!B&&!g.isDirectory()&&await Us(z))B=await ta(z);else throw new lc;if(!s)return new Response(B,oa(a)?{headers:a}:void 0);let G=await Ys(B);if(G&&await Ws(A,G,z))return new Response(null,{status:304});let L=new Response(B,{headers:Object.assign({"Cache-Control":e?`${i}, max-age=${e}`:i},a,G?{Etag:G}:{})});return R.set(z,L),L.clone()}catch(g){throw g instanceof lc?g:(u||console.error("[@elysiajs/static]",g),new lc)}})}return E}Hl();$l();import{pushSchema as q4}from"drizzle-kit/api";import{and as ne,eq as ur}from"drizzle-orm";import{drizzle as N4}from"drizzle-orm/node-postgres";import{pgSchema as O4}from"drizzle-orm/pg-core";import F4 from"elysia";var lu=[{table_name:"users",feature_set:["authentication"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"email",type:"varchar",length:255},{name:"password",type:"varchar",length:255},{name:"verified_at",type:"timestamp"},{name:"last_login_at",type:"timestamp"},{name:"login_count",type:"integer",default:0},{name:"is_locked",type:"boolean",default:!1},{name:"locked_until",type:"timestamp"},{name:"failed_login_attempts",type:"integer",default:0},{name:"is_god",type:"boolean",default:!1}],indexes:[{columns:["email"],unique:!0},{columns:["email","is_active"]},{columns:["last_login_at"]},{columns:["is_locked","locked_until"]}]},{table_name:"profiles",feature_set:["authentication"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"user_id",type:"uuid",notNull:!0,references:{table:"users",column:"id"}},{name:"first_name",type:"varchar",length:100,notNull:!0},{name:"last_name",type:"varchar",length:100,notNull:!0}],indexes:[{columns:["user_id"],unique:!0},{columns:["first_name","last_name"]}]},{table_name:"roles",feature_set:["authentication","authorization"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"name",type:"varchar",length:100,notNull:!0},{name:"description",type:"varchar",length:500}],indexes:[{columns:["name"],unique:!0}]},{table_name:"claims",feature_set:["authentication","authorization"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"action",type:"varchar",length:100,notNull:!0},{name:"description",type:"varchar",length:500},{name:"path",type:"varchar",length:200,notNull:!0},{name:"method",type:"varchar",length:10,notNull:!0}],indexes:[{columns:["action"],unique:!0},{columns:["path","method"]}]},{table_name:"user_roles",feature_set:["authentication","authorization"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"user_id",type:"uuid",notNull:!0,references:{table:"users",column:"id",onDelete:"cascade"}},{name:"role_id",type:"uuid",notNull:!0,references:{table:"roles",column:"id",onDelete:"cascade"}}],indexes:[{columns:["user_id"]},{columns:["role_id"]}],constraints:{unique:[{name:"unique_user_role",columns:["user_id","role_id"]}]}},{table_name:"role_claims",feature_set:["authentication","authorization"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"role_id",type:"uuid",notNull:!0,references:{table:"roles",column:"id",onDelete:"cascade"}},{name:"claim_id",type:"uuid",notNull:!0,references:{table:"claims",column:"id",onDelete:"cascade"}},{name:"scope",type:"text"}],indexes:[{columns:["role_id"]},{columns:["claim_id"]},{columns:["role_id","claim_id","scope"]}]},{table_name:"files",feature_set:["storage"],add_base_columns:!0,is_form_data:!0,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"name",type:"varchar",length:255,notNull:!0},{name:"original_name",type:"varchar",length:255,notNull:!0},{name:"type",type:"varchar",length:50,enumValues:["image","document","video","audio","profile_picture"]},{name:"path",type:"varchar",length:500,notNull:!0},{name:"size",type:"bigint",mode:"number",notNull:!0},{name:"mime_type",type:"varchar",length:100,notNull:!0},{name:"extension",type:"varchar",length:10,notNull:!0},{name:"uploaded_by",type:"uuid",references:{table:"users",column:"id"}}],indexes:[{columns:["type"]},{columns:["uploaded_by"]},{columns:["size"]}]},{table_name:"addresses",feature_set:["authentication"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"owner_type",type:"varchar",length:50,notNull:!0,enumValues:["user","company","contact"]},{name:"owner_id",type:"uuid",notNull:!0},{name:"name",type:"varchar",length:100,notNull:!0},{name:"street",type:"varchar",length:255},{name:"city",type:"varchar",length:100},{name:"state",type:"varchar",length:50},{name:"zip",type:"varchar",length:20},{name:"country",type:"varchar",length:50,default:"US"},{name:"latitude",type:"decimal",precision:10,scale:8},{name:"longitude",type:"decimal",precision:11,scale:8},{name:"neighborhood",type:"varchar",length:100},{name:"apartment",type:"varchar",length:50},{name:"province",type:"varchar",length:100},{name:"district",type:"varchar",length:100},{name:"type",type:"varchar",length:50}],indexes:[{columns:["city","state"]},{columns:["latitude","longitude"]},{columns:["type"]},{columns:["owner_type","owner_id"]}]},{table_name:"phones",feature_set:["authentication"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"owner_type",type:"varchar",length:50,notNull:!0,enumValues:["user","company","contact"]},{name:"owner_id",type:"uuid",notNull:!0},{name:"name",type:"varchar",length:100,notNull:!0},{name:"type",type:"varchar",length:50,enumValues:["mobile","office","fax"]},{name:"number",type:"varchar",length:20,notNull:!0},{name:"country_code",type:"varchar",length:10,notNull:!0,default:"+1"},{name:"extension",type:"varchar",length:10}],indexes:[{columns:["number"]},{columns:["type"]},{columns:["owner_type","owner_id"]}]},{table_name:"notifications",feature_set:["authentication","notification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"user_id",type:"uuid",notNull:!0},{name:"title",type:"varchar",length:255,notNull:!0},{name:"body",type:"varchar",length:1000},{name:"entity_name",type:"varchar",length:100},{name:"entity_id",type:"uuid"},{name:"is_seen",type:"boolean",notNull:!0,default:!1},{name:"seen_at",type:"timestamptz"}],indexes:[{columns:["user_id","created_at"]},{columns:["is_seen"]}]},{table_name:"tenants",feature_set:["multi-tenant"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["main"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"subdomain",type:"varchar",length:100,notNull:!0,unique:!0},{name:"company_id",type:"uuid",notNull:!0},{name:"schema_name",type:"varchar",length:100,notNull:!0,unique:!0},{name:"company_name",type:"varchar",length:255},{name:"god_admin_email",type:"varchar",length:255}],indexes:[]},{table_name:"verifications",feature_set:["authentication","verification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"requirement_id",type:"uuid",notNull:!0,references:{table:"verificationRequirements",column:"id"}},{name:"verifier_id",type:"uuid",notNull:!0,references:{table:"users",column:"id"}},{name:"signature_id",type:"uuid",references:{table:"files",column:"id"}},{name:"entity_name",type:"varchar",length:100,notNull:!0},{name:"entity_id",type:"uuid",notNull:!0},{name:"step_order",type:"integer",notNull:!0,default:1},{name:"decision",type:"varchar",length:50,notNull:!0,default:"pending",enumValues:["approved","rejected","pending"]},{name:"reason",type:"text"},{name:"diff",type:"jsonb"}],indexes:[{columns:["requirement_id"]},{columns:["verifier_id"]},{columns:["entity_name","entity_id"]},{columns:["entity_name","entity_id","step_order"]},{columns:["decision"]}]},{table_name:"verificationRequirements",feature_set:["authentication","verification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"entity_id",type:"uuid"},{name:"entity_name",type:"varchar",length:100},{name:"verifier_type",type:"varchar",length:30,enumValues:["user","role","entity_creator"]},{name:"verifier_id",type:"uuid"},{name:"verifier_role",type:"varchar",length:50},{name:"is_signature_mandatory",type:"boolean",notNull:!0},{name:"step_order",type:"integer",notNull:!0,default:1},{name:"is_all_required",type:"boolean",notNull:!0,default:!1},{name:"connected_from_step_order",type:"integer"},{name:"position_x",type:"numeric"},{name:"position_y",type:"numeric"}],indexes:[{columns:["entity_id"]}]},{table_name:"verificationFlows",feature_set:["authentication","verification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"entity_name",type:"varchar",length:100,notNull:!0},{name:"name",type:"varchar",length:255,notNull:!0},{name:"description",type:"text"},{name:"trigger_on",type:"varchar",length:50,notNull:!0,default:"update",enumValues:["create","update","delete","manual"]},{name:"trigger_fields",type:"jsonb"},{name:"is_draft",type:"boolean",notNull:!0,default:!0},{name:"published_at",type:"timestamptz"},{name:"viewport",type:"jsonb"}],indexes:[{columns:["entity_name"]},{columns:["entity_name","trigger_on"]},{columns:["is_draft"]}]},{table_name:"verificationSteps",feature_set:["authentication","verification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"flow_id",type:"uuid",notNull:!0,references:{table:"verificationFlows",column:"id",onDelete:"cascade"}},{name:"entity_name",type:"varchar",length:100,notNull:!0},{name:"node_id",type:"varchar",length:100,notNull:!0},{name:"node_type",type:"varchar",length:50,notNull:!0,default:"step",enumValues:["start","step","condition","notification","end"]},{name:"step_order",type:"integer",notNull:!0,default:1},{name:"name",type:"varchar",length:255},{name:"description",type:"text"},{name:"position_x",type:"numeric",notNull:!0,default:0},{name:"position_y",type:"numeric",notNull:!0,default:0},{name:"width",type:"numeric"},{name:"height",type:"numeric"},{name:"style",type:"jsonb"},{name:"data",type:"jsonb"}],indexes:[{columns:["flow_id"]},{columns:["entity_name"]},{columns:["flow_id","node_id"],unique:!0},{columns:["entity_name","step_order"]}]},{table_name:"verificationEdges",feature_set:["authentication","verification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"flow_id",type:"uuid",notNull:!0,references:{table:"verificationFlows",column:"id",onDelete:"cascade"}},{name:"edge_id",type:"varchar",length:100,notNull:!0},{name:"source_node_id",type:"varchar",length:100,notNull:!0},{name:"target_node_id",type:"varchar",length:100,notNull:!0},{name:"source_handle",type:"varchar",length:50},{name:"target_handle",type:"varchar",length:50},{name:"edge_type",type:"varchar",length:50,default:"default",enumValues:["default","conditional","success","failure"]},{name:"label",type:"varchar",length:255},{name:"condition",type:"jsonb"},{name:"style",type:"jsonb"},{name:"animated",type:"boolean",default:!1}],indexes:[{columns:["flow_id"]},{columns:["flow_id","edge_id"],unique:!0},{columns:["source_node_id"]},{columns:["target_node_id"]}]},{table_name:"verificationNotificationRules",feature_set:["authentication","verification","notification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"flow_id",type:"uuid",notNull:!0,references:{table:"verificationFlows",column:"id",onDelete:"cascade"}},{name:"step_node_id",type:"varchar",length:100},{name:"trigger",type:"varchar",length:50,notNull:!0,enumValues:["on_flow_started","on_step_reached","on_approved","on_rejected","on_flow_completed"]},{name:"channel",type:"varchar",length:20,notNull:!0,default:"portal",enumValues:["portal","email","both"]},{name:"title_template",type:"varchar",length:255},{name:"body_template",type:"text"},{name:"starts_at",type:"timestamptz"},{name:"expires_at",type:"timestamptz"}],indexes:[{columns:["flow_id"]},{columns:["flow_id","step_node_id"]},{columns:["trigger"]}]},{table_name:"verificationNotificationRecipients",feature_set:["authentication","verification","notification"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:[],bulk_endpoints_enabled:!0,columns:[{name:"rule_id",type:"uuid",notNull:!0},{name:"recipient_type",type:"varchar",length:20,notNull:!0,enumValues:["user","role","all_verifiers","step_verifier"]},{name:"recipient_user_id",type:"uuid"},{name:"recipient_role_id",type:"uuid"},{name:"channel",type:"varchar",length:20,notNull:!0,enumValues:["portal"]}],indexes:[{columns:["rule_id"]},{columns:["recipient_type"]},{columns:["channel"]}]},{table_name:"user_sessions",feature_set:["authentication"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:["POST","PUT","PATCH"],bulk_endpoints_enabled:!0,columns:[{name:"user_id",type:"uuid",notNull:!0,references:{table:"users",column:"id",onDelete:"cascade"}},{name:"token_hash",type:"varchar",length:255,notNull:!0},{name:"refresh_token_hash",type:"varchar",length:255},{name:"device_fingerprint",type:"varchar",length:255},{name:"device_name",type:"varchar",length:100},{name:"device_type",type:"varchar",length:50,enumValues:["desktop","mobile","tablet","unknown"]},{name:"browser_name",type:"varchar",length:50},{name:"browser_version",type:"varchar",length:20},{name:"os_name",type:"varchar",length:50},{name:"os_version",type:"varchar",length:20},{name:"ip_address",type:"varchar",length:45,notNull:!0},{name:"location_country",type:"varchar",length:100},{name:"location_city",type:"varchar",length:100},{name:"location_coordinates",type:"varchar",length:50},{name:"last_activity_at",type:"timestamptz",notNull:!0,defaultRaw:"now()"},{name:"expires_at",type:"timestamptz",notNull:!0},{name:"revoked_at",type:"timestamptz"},{name:"revoked_reason",type:"varchar",length:100,enumValues:["user_logout","user_revoked","admin_revoked","security_concern","password_changed","expired","replaced"]},{name:"is_current",type:"boolean",notNull:!0,default:!1},{name:"login_method",type:"varchar",length:50,enumValues:["password","oauth_google","oauth_github","oauth_microsoft","magic_link","sso","api_key"]},{name:"trust_score",type:"integer",default:100},{name:"approval_status",type:"varchar",length:20,default:"approved",enumValues:["approved","pending","rejected"]},{name:"approval_token",type:"varchar",length:64},{name:"approval_requested_at",type:"timestamptz"},{name:"approval_responded_at",type:"timestamptz"}],indexes:[{columns:["user_id"]},{columns:["token_hash"],unique:!0},{columns:["refresh_token_hash"]},{columns:["user_id","is_active"]},{columns:["expires_at"]},{columns:["device_fingerprint"]},{columns:["ip_address"]},{columns:["last_activity_at"]},{columns:["approval_status"]},{columns:["approval_token"]}]},{table_name:"password_reset_tokens",feature_set:["authentication"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:["POST","PUT","PATCH","DELETE"],bulk_endpoints_enabled:!0,columns:[{name:"user_id",type:"uuid",notNull:!0,references:{table:"users",column:"id",onDelete:"cascade"}},{name:"token_hash",type:"varchar",length:255,notNull:!0},{name:"expires_at",type:"timestamptz",notNull:!0},{name:"used_at",type:"timestamptz"}],indexes:[{columns:["token_hash"],unique:!0},{columns:["user_id"]},{columns:["expires_at"]}]},{table_name:"magic_link_tokens",feature_set:["authentication"],add_base_columns:!0,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:["POST","PUT","PATCH","DELETE"],bulk_endpoints_enabled:!0,columns:[{name:"user_id",type:"uuid",notNull:!0,references:{table:"users",column:"id",onDelete:"cascade"}},{name:"email",type:"varchar",length:255,notNull:!0},{name:"token_hash",type:"varchar",length:255,notNull:!0},{name:"expires_at",type:"timestamptz",notNull:!0},{name:"used_at",type:"timestamptz"}],indexes:[{columns:["token_hash"],unique:!0},{columns:["user_id"]},{columns:["email"]},{columns:["expires_at"]}]},{table_name:"audit_logs",feature_set:["audit"],add_base_columns:!1,is_form_data:!1,available_app_ids:["default_be"],available_schemas:["*"],excluded_schemas:[],excluded_methods:["POST","PUT","DELETE","PATCH","TOGGLE","VERIFICATION"],bulk_endpoints_enabled:!0,columns:[{name:"id",type:"uuid",primaryKey:!0,defaultRaw:"gen_random_uuid()"},{name:"entity_id",type:"uuid"},{name:"entity_name",type:"text",notNull:!0},{name:"operation_type",type:"text",notNull:!0},{name:"user_id",type:"uuid"},{name:"ip_address",type:"text"},{name:"user_agent",type:"text"},{name:"summary",type:"text"},{name:"old_values",type:"jsonb"},{name:"new_values",type:"jsonb"},{name:"created_at",type:"timestamp",notNull:!0,defaultRaw:"now()"},{name:"path",type:"text"},{name:"query",type:"text"}],indexes:[{columns:["entity_id"]},{columns:["entity_name"]},{columns:["user_id"]},{columns:["created_at"]}]}];var t5={GET:["GET"],POST:["POST"],PUT:["PUT"],DELETE:["DELETE"],PATCH:["PATCH"],TOGGLE:["PATCH"],VERIFICATION:["POST"]};function o5(n,r){let t=[],o=n.authentication;if(!o)return t;if(o.login?.enabled&&o.login?.isPublic)t.push({path:o.login.route||`${r}/auth/login`,method:"POST",source:"auth"});if(o.register?.enabled&&o.register?.isPublic)t.push({path:o.register.route||`${r}/auth/register`,method:"POST",source:"auth"});if(o.logout?.enabled&&o.logout?.isPublic)t.push({path:o.logout.route||`${r}/auth/logout`,method:"POST",source:"auth"});if(o.refresh?.enabled&&o.refresh?.isPublic)t.push({path:o.refresh.route||`${r}/auth/refresh`,method:"POST",source:"auth"});if(o.passwordReset?.enabled&&o.passwordReset?.isPublic){let c=o.passwordReset.route||`${r}/auth/password-reset`;t.push({path:`${c}/request`,method:"POST",source:"auth"},{path:`${c}/confirm`,method:"POST",source:"auth"})}if(o.passwordChange?.enabled&&o.passwordChange?.isPublic)t.push({path:o.passwordChange.route||`${r}/auth/password-change`,method:"POST",source:"auth"});if(o.magicLink?.enabled&&o.magicLink?.isPublic)t.push({path:o.magicLink.route||`${r}/auth/magic-link`,method:"POST",source:"auth"},{path:o.magicLink.verifyRoute||`${r}/auth/magic-link/verify`,method:"GET",source:"auth"});if(o.register?.enabled&&o.register?.emailVerification?.enabled)t.push({path:`${r}/verify-email`,method:"GET",source:"auth"},{path:`${r}/resend-verification`,method:"POST",source:"auth"});if(o.invite?.enabled&&o.invite?.isPublic)t.push({path:o.invite.route||`${r}/auth/invite`,method:"POST",source:"auth"});if(o.invite?.enabled){let c=o.invite.route||`${r}/auth/invite`;t.push({path:`${c}/verify`,method:"POST",source:"auth"})}if(o.passwordSet?.enabled)t.push({path:o.passwordSet.route||`${r}/auth/password-set`,method:"POST",source:"auth"});if(o.captcha?.enabled&&o.captcha?.isPublic){let c=o.captcha.route||`${r}/auth/captcha`;t.push({path:`${c}/generate`,method:"GET",source:"auth"},{path:`${c}/validate`,method:"POST",source:"auth"})}return t}function fu(n,r,t){let o=[];for(let c of n){if(!c.is_public)continue;let a=`${r}/${t}/${c.table_name}`;for(let[e,i]of Object.entries(c.is_public)){if(!i)continue;let s=t5[e];if(!s)continue;for(let l of s)if(l==="GET")o.push({path:a,method:"GET",source:"entity"}),o.push({path:`${a}/:id`,method:"GET",source:"entity"});else if(l==="POST")o.push({path:a,method:"POST",source:"entity"});else if(l==="PUT"||l==="PATCH")o.push({path:`${a}/:id`,method:l,source:"entity"});else if(l==="DELETE")o.push({path:`${a}/:id`,method:"DELETE",source:"entity"})}}return o}function c5(n,r,t){return fu(n,r,t)}function zl(n,r,t="",o="public"){let c=o5(n,t),a=fu(n.entities||[],t,o),e=c5(r,t,o),i=[];if(n.pubsub?.enabled){let l=n.pubsub.basePath||"/subs",d=n.pubsub.wsPath||"/api/events/subscribe";i.push({path:`${l}/:topic`,method:"POST",source:"system"},{path:d,method:"GET",source:"system"})}let s=[{path:"/nucleus-core",method:"GET",source:"custom"},{path:"/public",method:"GET",source:"custom"},{path:"/docs",method:"GET",source:"custom"},{path:"/docs/json",method:"GET",source:"custom"},{path:"/swagger",method:"GET",source:"custom"},{path:"/swagger/json",method:"GET",source:"custom"}];return[...c,...a,...e,...i,...s]}function Ul(n,r,t){let o=r.replace(/\/$/,""),c=t.toUpperCase();for(let a of n){if(a.method!==c)continue;if(a5(a.path,o))return!0}return!1}function a5(n,r){if(n===r)return!0;let t=n.split("/").filter(Boolean),o=r.split("/").filter(Boolean);if(t.length!==o.length)return!1;for(let c=0;c<t.length;c++){let a=t[c],e=o[c];if(a?.startsWith(":"))continue;if(a!==e)return!1}return!0}ml();Ne();je();import{asc as C5,desc as Q5,eq as Sr,ilike as pu,inArray as P5,notInArray as G5,or as q5}from"drizzle-orm";import{drizzle as N5}from"drizzle-orm/node-postgres";import{Elysia as O5,t as Ln}from"elysia";import{t as Pn}from"elysia";function pl(n){let r={};if(!n||n.length===0)return Pn.Object({},{additionalProperties:!0});for(let t of n)switch(t.type?.toLowerCase()||"string"){case"integer":case"int":case"serial":case"bigserial":case"numeric":case"decimal":r[t.name]=t.notNull?Pn.Number():Pn.Optional(Pn.Number());break;case"boolean":r[t.name]=t.notNull?Pn.Boolean():Pn.Optional(Pn.Boolean());break;case"timestamp":case"timestamptz":case"date":r[t.name]=t.notNull?Pn.String({format:"date-time"}):Pn.Optional(Pn.String({format:"date-time"}));break;case"json":case"jsonb":r[t.name]=Pn.Optional(Pn.Unknown());break;case"uuid":r[t.name]=t.notNull?Pn.String({format:"uuid"}):Pn.Optional(Pn.String({format:"uuid"}));break;default:r[t.name]=t.notNull?Pn.String():Pn.Optional(Pn.String())}return Pn.Object(r,{additionalProperties:!0})}function Ku(n){return Pn.Array(Pn.Object({id:Pn.String(),data:pl(n)}))}function Tl(n,r){let{db:t,schemaTables:o,schemaRelations:c,entities:a,logger:e,databaseUrl:i,storage:s,authorization:l}=r,d=ba(s),b=l?.enabled??!1;if(!t)return n;let u=Object.keys(o),$=a.map((E)=>E.table_name),k=u.filter((E)=>!$.includes(E)),w=["userSessions","passwordResetTokens","magicLinkTokens"],_=["passwordResetTokens","magicLinkTokens"],R=["files"],X=k.filter((E)=>{if(_.includes(E)&&!r.emailServiceAvailable)return e.info(`Skipping ${E} routes - email service not available`),!1;return!0}).map((E)=>({table_name:E,group_name:w.includes(E)?"Authentication":E,is_form_data:R.includes(E)})),x=[...a,...X];e.info(`All entities: ${x.map((E)=>E.table_name).join(", ")}`);for(let E of x){let P=E.table_name,M=E.group_name||E.table_name,A=o[P];if(!A)continue;let z=c[`${P}Relations`];e.info(`Creating routes for table: ${P}`);let h=A,g=h.id,B=t,G=pl(E.columns),L=Ln.Array(G),O=Ku(E.columns),v=Ln.Array(Ln.String()),J=new O5({prefix:`/${P}`});if(!E.excluded_methods?.includes("GET"))J.get("/",async(W)=>{if(!B)return{success:!1,message:"DB not initialized"};let U=W.request.headers.get("x-user-id"),Y=E.columns?.map((vn)=>vn.name),Q=Object.keys(c).filter((vn)=>vn.startsWith(`${E.table_name}Relations`)).map((vn)=>vn.replace("Relations","")),F=null;if(b&&U){if(F=await _l({userId:U,method:"GET",entity:E.table_name,requestedFields:Y,requestedRelations:Q,db:B,schemaTables:o,logger:e}),!F.authorized)return{success:!1,message:F.reason||"Unauthorized",status:403}}let K=ql(W.query),N=[];if(b&&F?.scopeFilters)for(let[vn,on]of Object.entries(F.scopeFilters)){let Bn=h[vn];if(Bn)N.push(Sr(Bn,on))}if(K.search&&K.searchFields){let vn=K.searchFields.map((on)=>{let Bn=h[on.trim()];return Bn?pu(Bn,`%${K.search}%`):null}).filter((on)=>on!==null);if(vn.length>0){let on=q5(...vn);if(on)N.push(on)}}if(K.filters){let{ne:vn,gt:on,gte:Bn,lt:Ar,lte:Or,like:Ho,isNull:ac,isNotNull:ds}=await import("drizzle-orm");for(let gr of K.filters){let sr=h[gr.field];if(!sr)continue;switch(gr.operator){case"eq":N.push(Sr(sr,gr.value));break;case"neq":N.push(vn(sr,gr.value));break;case"gt":N.push(on(sr,gr.value));break;case"gte":N.push(Bn(sr,gr.value));break;case"lt":N.push(Ar(sr,gr.value));break;case"lte":N.push(Or(sr,gr.value));break;case"like":N.push(Ho(sr,gr.value));break;case"ilike":N.push(pu(sr,gr.value));break;case"in":N.push(P5(sr,gr.value));break;case"notIn":N.push(G5(sr,gr.value));break;case"isNull":N.push(ac(sr));break;case"isNotNull":N.push(ds(sr));break}}}let tn=B.select().from(A);if(N.length>0){let{and:vn}=await import("drizzle-orm"),on=vn(...N);if(on)tn=tn.where(on)}if(K.sort&&K.sort.length>0){let vn=K.sort.map((on)=>{let Bn=h[on.field];if(!Bn)return null;return on.direction==="desc"?Q5(Bn):C5(Bn)}).filter((on)=>on!==null);if(vn.length>0)tn=tn.orderBy(...vn)}let sn=K.page??1,kn=K.limit??20,ar=K.offset??(sn-1)*kn,rn=B.select().from(A);if(N.length>0){let{and:vn}=await import("drizzle-orm"),on=vn(...N);if(on)rn.where(on)}let Tn=(await rn).length;tn=tn.limit(kn).offset(ar);let cc=await tn,re=Qu(sn,kn,ar,Tn);if(b&&F?.allowedFields)cc=Ue(cc,F.allowedFields);return{success:!0,data:{items:cc,meta:re}}},{detail:{tags:[M],summary:`List ${P}`,description:`Get paginated list of ${P} records with filtering, sorting, and search`}}),J.get("/:id",async(W)=>{if(!B||!g)return{success:!1,message:"No id column or DB"};let U=W.params,Y=ql(W.query),Q=W.request.headers.get("x-user-id"),F=E.columns?.map((kn)=>kn.name),K=Y.with?.map((kn)=>kn.name),N=null;if(b&&Q){if(N=await _l({userId:Q,method:"GET",entity:E.table_name,requestedFields:F,requestedRelations:K,db:B,schemaTables:o,logger:e}),!N.authorized)return{success:!1,message:N.reason||"Unauthorized",status:403}}if(Y.with&&Y.with.length>0&&z&&i){let kn=b&&N?.allowedRelations?Y.with.filter((en)=>N.allowedRelations?.includes(en.name)??!1):Y.with,rn=await N5(i,{schema:{...o,...c}}).query[E.table_name]?.findFirst({where:Sr(g,U.id),with:kn.reduce((en,Tn)=>{return en[Tn.name]=Tn.limit?{limit:Tn.limit}:!0,en},{})});if(b&&N?.allowedFields&&rn)rn=Ue(rn,N.allowedFields);if(b&&N?.allowedRelations&&rn)rn=qb(rn,N.allowedRelations);return{success:!0,data:rn||null}}let sn=(await B.select().from(A).where(Sr(g,U.id)))[0]||null;if(b&&N?.allowedFields&&sn)sn=Ue(sn,N.allowedFields);return{success:!0,data:sn}},{detail:{tags:[M],summary:`Get ${P} by ID`,description:`Get a single ${P} record by its ID with optional relations`}}),J.get("/distinct/:field",async(W)=>{if(!B)return{success:!1,message:"DB not initialized"};let U=W.params,Y=h[U.field];if(!Y)return{success:!1,message:"Field not found"};return{success:!0,data:await B.selectDistinct({value:Y}).from(A)}},{detail:{tags:[M],summary:`Get distinct ${P} values`,description:`Get distinct values for a specific field in ${P}`}});if(!E.excluded_methods?.includes("POST"))if(E.is_form_data&&d.enabled)J.post("/",async(W)=>{if(!B)return{success:!1,message:"DB not initialized"};let U=W.request.headers.get("x-user-id"),{data:Y,files:Q}=ua(W.body,d),F=Y;if(E.columns){F=uc(F,E.columns);let tn=bc(F,E.columns,!1);if(!tn.valid)return{success:!1,message:"Validation failed",errors:tn.errors}}let K=null;if(Q.length>0){if(K=await ga(Q,d,E.table_name),K.failed.length>0&&K.success.length===0)return{success:!1,message:"File upload failed",errors:K.failed};if(K.success.length>0){let tn=K.success[0];if(tn){let sn=tn.originalName.split(".").pop()||"";F={...F,id:tn.id,name:tn.name,originalName:tn.originalName,path:tn.path,mimeType:tn.mimeType,size:tn.size,extension:sn,uploadedBy:U}}}}if(U)F.createdBy=U;let N=await B.insert(A).values(F).returning();{let tn=new URL(W.request.url);e.audit({entityName:E.table_name,entityId:String(N[0]?.id??""),operation:"CREATE",userId:U||void 0,summary:`Created ${E.table_name}`,newValues:N[0],ipAddress:W.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||W.request.headers.get("x-real-ip")?.trim()||"unknown",userAgent:W.request.headers.get("user-agent")||"unknown",path:tn.pathname,query:tn.search})}return{success:!0,data:N[0]}},{type:"formdata",body:Ln.Object({[d.formData.dataField]:Ln.Optional(Ln.Union([Ln.String(),Ln.Any()])),[d.formData.filesField]:Ln.Optional(Ln.Union([Ln.File(),Ln.Array(Ln.File())]))}),detail:{tags:[M],summary:`Create ${P} with files`,description:`Create a new ${P} record with file upload support`}});else J.post("/",async(W)=>{if(!B)return{success:!1,message:"DB not initialized"};let U=W.body,Y=W.request.headers.get("x-user-id");if(E.columns){U=uc(U,E.columns);let F=bc(U,E.columns,!1);if(!F.valid)return{success:!1,message:"Validation failed",errors:F.errors}}if(Y)U.createdBy=Y;let Q=await B.insert(A).values(U).returning();{let F=new URL(W.request.url);e.audit({entityName:E.table_name,entityId:String(Q[0]?.id??""),operation:"CREATE",userId:Y||void 0,summary:`Created ${E.table_name}`,newValues:Q[0],ipAddress:W.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||W.request.headers.get("x-real-ip")?.trim()||"unknown",userAgent:W.request.headers.get("user-agent")||"unknown",path:F.pathname,query:F.search})}return{success:!0,data:Q[0]}},{body:G,detail:{tags:[M],summary:`Create ${P}`,description:`Create a new ${P} record`}});if(!E.excluded_methods?.includes("PUT"))if(E.is_form_data&&d.enabled)J.put("/:id",async(W)=>{if(!B||!g)return{success:!1,message:"No id column or DB"};let U=W.params,Y=W.request.headers.get("x-user-id"),{data:Q,files:F}=ua(W.body,d),K=Q,N=await B.select().from(A).where(Sr(g,U.id)).limit(1);if(E.columns){K=uc(K,E.columns);let kn=bc(K,E.columns,!1);if(!kn.valid)return{success:!1,message:"Validation failed",errors:kn.errors}}let tn=null;if(F.length>0)tn=await ga(F,d,E.table_name);let sn=await B.update(A).set(K).where(Sr(g,U.id)).returning();{let kn=new URL(W.request.url);e.audit({entityName:E.table_name,entityId:U.id,operation:"UPDATE",userId:Y||void 0,summary:`Updated ${E.table_name} (${U.id})`,oldValues:N[0],newValues:sn[0],ipAddress:W.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||W.request.headers.get("x-real-ip")?.trim()||"unknown",userAgent:W.request.headers.get("user-agent")||"unknown",path:kn.pathname,query:kn.search})}return{success:!0,data:{record:sn[0],files:tn?.success||[],fileErrors:tn?.failed||[]}}},{type:"formdata",body:Ln.Object({[d.formData.dataField]:Ln.Optional(Ln.Union([Ln.String(),Ln.Any()])),[d.formData.filesField]:Ln.Optional(Ln.Union([Ln.File(),Ln.Array(Ln.File())]))}),detail:{tags:[M],summary:`Update ${P} with files`,description:`Full update of ${P} record with file upload support`}});else J.put("/:id",async(W)=>{if(!B||!g)return{success:!1,message:"No id column or DB"};let{params:U,body:Y}=W,Q=W.request.headers.get("x-user-id"),F=await B.select().from(A).where(Sr(g,U.id)).limit(1);if(E.columns){Y=uc(Y,E.columns);let N=bc(Y,E.columns,!1);if(!N.valid)return{success:!1,message:"Validation failed",errors:N.errors}}if(Y.updatedAt=new Date,Q)Y.updatedBy=Q;let K=await B.update(A).set(Y).where(Sr(g,U.id)).returning();{let N=new URL(W.request.url);e.audit({entityName:E.table_name,entityId:U.id,operation:"UPDATE",userId:Q||void 0,summary:`Updated ${E.table_name} (${U.id})`,oldValues:F[0],newValues:K[0],ipAddress:W.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||W.request.headers.get("x-real-ip")?.trim()||"unknown",userAgent:W.request.headers.get("user-agent")||"unknown",path:N.pathname,query:N.search})}return{success:!0,data:K[0]}},{body:G,detail:{tags:[M],summary:`Update ${P}`,description:`Full update of ${P} record`}});if(!E.excluded_methods?.includes("PATCH"))J.patch("/:id",async(W)=>{if(!B||!g)return{success:!1,message:"No id column or DB"};let{params:U,body:Y}=W,Q=W.request.headers.get("x-user-id"),F=await B.select().from(A).where(Sr(g,U.id)).limit(1);if(E.columns){Y=uc(Y,E.columns);let N=bc(Y,E.columns,!0);if(!N.valid)return{success:!1,message:"Validation failed",errors:N.errors}}if(Y.updatedAt=new Date,Q)Y.updatedBy=Q;let K=await B.update(A).set(Y).where(Sr(g,U.id)).returning();{let N=new URL(W.request.url);e.audit({entityName:E.table_name,entityId:U.id,operation:"PATCH",userId:Q||void 0,summary:`Patched ${E.table_name} (${U.id})`,oldValues:F[0],newValues:K[0],ipAddress:W.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||W.request.headers.get("x-real-ip")?.trim()||"unknown",userAgent:W.request.headers.get("user-agent")||"unknown",path:N.pathname,query:N.search})}return{success:!0,data:K[0]}},{body:G,detail:{tags:[M],summary:`Patch ${P}`,description:`Partial update of ${P} record`}});if(!E.excluded_methods?.includes("DELETE"))J.delete("/:id",async(W)=>{if(!B||!g)return{success:!1,message:"No id column or DB"};let U=W.params,Y=W.request.headers.get("x-user-id"),Q=await B.select().from(A).where(Sr(g,U.id)).limit(1);await B.delete(A).where(Sr(g,U.id));{let F=new URL(W.request.url);e.audit({entityName:E.table_name,entityId:U.id,operation:"DELETE",userId:Y||void 0,summary:`Deleted ${E.table_name} (${U.id})`,oldValues:Q[0],ipAddress:W.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||W.request.headers.get("x-real-ip")?.trim()||"unknown",userAgent:W.request.headers.get("user-agent")||"unknown",path:F.pathname,query:F.search})}return{success:!0,data:null}},{detail:{tags:[M],summary:`Delete ${P}`,description:`Delete a ${P} record`}});if(E.bulk_endpoints_enabled){if(!E.excluded_methods?.includes("POST"))J.post("/bulk",async(W)=>{if(!B)return{success:!1,message:"DB not initialized"};let U=W.body;if(!Array.isArray(U))return{success:!1,message:"Body must be an array"};try{return{success:!0,data:await B.transaction(async(Q)=>{let F=[];for(let K of U){let N=await Q.insert(A).values(K).returning();F.push(N[0])}return F})}}catch(Y){return{success:!1,message:Y instanceof Error?Y.message:"Transaction failed"}}},{body:L,detail:{tags:[M],summary:`Bulk create ${P}`,description:`Create multiple ${P} records`}});if(!E.excluded_methods?.includes("PUT"))J.put("/bulk",async(W)=>{if(!B||!g)return{success:!1,message:"No id column or DB"};let U=W.body;if(!Array.isArray(U))return{success:!1,message:"Body must be an array"};try{return{success:!0,data:await B.transaction(async(Q)=>{let F=[];for(let K of U){let N=await Q.update(A).set(K.data).where(Sr(g,K.id)).returning();F.push(N[0])}return F})}}catch(Y){return{success:!1,message:Y instanceof Error?Y.message:"Transaction failed"}}},{body:O,detail:{tags:[M],summary:`Bulk update ${P}`,description:`Update multiple ${P} records`}});if(!E.excluded_methods?.includes("DELETE"))J.delete("/bulk",async(W)=>{if(!B||!g)return{success:!1,message:"No id column or DB"};let U=W.body;if(!Array.isArray(U))return{success:!1,message:"Body must be an array of ids"};try{return await B.transaction(async(Y)=>{for(let Q of U)await Y.delete(A).where(Sr(g,Q))}),{success:!0,data:{deleted:U.length}}}catch(Y){return{success:!1,message:Y instanceof Error?Y.message:"Transaction failed"}}},{body:v,detail:{tags:[M],summary:`Bulk delete ${P}`,description:`Delete multiple ${P} records`}})}n.use(J)}return n}import F5,{t as _a}from"elysia";function j5(n){let r=n.match(/^(\d+)(ms|s|m|h)$/);if(!r||!r[1]||!r[2])return 5000;let t=parseInt(r[1],10);switch(r[2]){case"ms":return t;case"s":return t*1000;case"m":return t*60*1000;case"h":return t*60*60*1000;default:return 5000}}function vl(n){let{monitoringService:r,logger:t,endpoints:o}=n,c=new F5({prefix:o.basePath});if(!o.enabled)return c;if(o.stream.enabled)c.get(o.stream.path,async function*({request:a}){t.info("[Monitoring] SSE stream connected");let e=j5(o.stream.interval),i=!0;a.signal.addEventListener("abort",()=>{i=!1,t.info("[Monitoring] SSE stream disconnected")});let s=await r.getLatestSnapshot();if(s)yield{event:"snapshot",data:JSON.stringify(s)};while(i){if(await new Promise((b)=>setTimeout(b,e)),!i)break;let l=await r.getLatestSnapshot();if(l)yield{event:"snapshot",data:JSON.stringify(l)};let d=r.getActiveAlerts();if(d.length>0)yield{event:"alerts",data:JSON.stringify(d)}}},{detail:{tags:["Monitoring"],summary:"Stream real-time monitoring data",description:"Server-Sent Events stream for real-time monitoring metrics"}});if(o.snapshot.enabled)c.get(o.snapshot.path,async()=>{let a=await r.getLatestSnapshot();if(!a)return{isSuccess:!1,message:"No monitoring data available",data:null};return{isSuccess:!0,message:"Current monitoring snapshot",data:a}},{detail:{tags:["Monitoring"],summary:"Get current monitoring snapshot",description:"Returns the latest monitoring metrics snapshot"}});if(o.history.enabled)c.get(o.history.path,async({query:a})=>{let e=Math.min(a.minutes?parseInt(String(a.minutes),10):60,o.history.maxMinutes),i=await r.getHistory(e);return{isSuccess:!0,message:`Monitoring history for last ${e} minutes`,data:{minutes:e,count:i.length,snapshots:i}}},{query:_a.Object({minutes:_a.Optional(_a.Numeric())}),detail:{tags:["Monitoring"],summary:"Get monitoring history",description:"Returns historical monitoring data for the specified time range"}});if(o.alerts.enabled)c.get(o.alerts.path,()=>{let a=r.getActiveAlerts();return{isSuccess:!0,message:"Active alerts",data:{count:a.length,alerts:a}}},{detail:{tags:["Monitoring"],summary:"Get active alerts",description:"Returns all currently active monitoring alerts"}}),c.post(`${o.alerts.path}/:alertId/acknowledge`,({params:a})=>{if(!r.acknowledgeAlert(a.alertId))return{isSuccess:!1,message:"Alert not found",data:null};return{isSuccess:!0,message:"Alert acknowledged",data:{alertId:a.alertId}}},{params:_a.Object({alertId:_a.String()}),detail:{tags:["Monitoring"],summary:"Acknowledge an alert",description:"Mark an alert as acknowledged"}});return t.info(`[Monitoring] Routes enabled at ${o.basePath} (stream: ${o.stream.enabled}, snapshot: ${o.snapshot.enabled}, history: ${o.history.enabled}, alerts: ${o.alerts.enabled})`),c}import K5,{t as xr}from"elysia";var p5={"Content-Type":"text/event-stream; charset=utf-8","Cache-Control":"no-cache, no-transform",Connection:"keep-alive"},T5=new TextEncoder,Il=(n,r)=>{let t=typeof r==="string"?r:JSON.stringify(r);return T5.encode(`event: ${n}
|
|
61
61
|
data: ${t}
|
|
62
62
|
|
|
63
|
-
`)};function Tu(n){let{getService:r,logger:t,basePath:o,streamInterval:c}=n,a=new K5({prefix:o}),e=()=>{let i=r();if(!i)throw Error("Live monitoring service not initialized");return i};return a.get("/health",()=>{let i=r();return{status:i?"ok":"initializing",timestamp:Date.now(),monitoring:i?.isEnabled()??!1}},{detail:{tags:["Live Monitoring"],summary:"Health check for live monitoring"}}),a.get("/settings",()=>{return e().getSettings()},{detail:{tags:["Live Monitoring"],summary:"Get live monitoring settings"}}),a.patch("/settings",({body:i})=>{return e().changeSettings(i)},{body:xr.Partial(xr.Object({logMemory:xr.Boolean(),logCpu:xr.Boolean(),logDapr:xr.Boolean(),logWebSocket:xr.Boolean(),memoryLogInterval:xr.Number(),cpuLogInterval:xr.Number(),memoryLogLimit:xr.Number(),cpuLogLimit:xr.Number(),daprLogLimit:xr.Number(),wsLogLimit:xr.Number(),requestLogLimit:xr.Number()})),detail:{tags:["Live Monitoring"],summary:"Change live monitoring settings"}}),a.get("/logs",()=>{return e().getLogs()},{detail:{tags:["Live Monitoring"],summary:"Get all live monitoring logs"}}),a.get("/logs/stream",({request:i})=>{let s=i.signal,l,d=e(),b=d.getSnapshot(),u={memory:b.memory.length?b.memory[b.memory.length-1]?.timestamp??0:0,cpu:b.cpu.length?b.cpu[b.cpu.length-1]?.timestamp??0:0,request:b.requests.length?b.requests[b.requests.length-1]?.timestamp??0:0,dapr:b.dapr.length?b.dapr[b.dapr.length-1]?.timestamp??0:0,ws:b.ws.length?b.ws[b.ws.length-1]?.timestamp??0:0},$=new ReadableStream({start(k){let w=!1;k.enqueue(Il("snapshot",b));let R=setInterval(()=>{if(w)return;let x=d.getUpdatesSince(u);if(!x){k.enqueue(Il("heartbeat",{timestamp:Date.now()}));return}if(x.memory.length)u.memory=x.memory[x.memory.length-1]?.timestamp??u.memory;if(x.cpu.length)u.cpu=x.cpu[x.cpu.length-1]?.timestamp??u.cpu;if(x.requests.length)u.request=x.requests[x.requests.length-1]?.timestamp??u.request;if(x.dapr.length)u.dapr=x.dapr[x.dapr.length-1]?.timestamp??u.dapr;if(x.ws.length)u.ws=x.ws[x.ws.length-1]?.timestamp??u.ws;k.enqueue(Il("update",x))},c),X=()=>{if(w)return;w=!0,clearInterval(R),s?.removeEventListener("abort",X);try{k.close()}catch{}};l=X,s?.addEventListener("abort",X)},cancel(){l?.()}});return new Response($,{headers:p5})},{detail:{tags:["Live Monitoring"],summary:"Stream real-time live monitoring data via SSE"}}),t.info(`[LiveMonitoring] Routes enabled at ${o} (stream interval: ${c}ms)`),a}import nh from"elysia";var ma=new Map;var vu=null;function v5(){let n=Date.now();for(let[r,t]of ma)if(n-t>1e4)ma.delete(r)}var Vo={totalSent:0,totalAcked:0,totalFailed:0,averageLatencyMs:0};function Iu(){if(vu)return;vu=setInterval(v5,30000)}function Zl(){return`msg_${Date.now()}_${Math.random().toString(36).substring(2,11)}`}async function yl(n,r,t){if(!r.userId)return;let o=`pubsub:pending:user:${r.userId}:${r.messageId}`,c=`pubsub:user:pending-set:${r.userId}`;await n.create(o,r,t);let a=await n.read(c),e=a.success&&a.data?a.data:[];if(!e.includes(r.messageId))e.push(r.messageId),await n.create(c,e,t)}async function Zu(n,r,t,o){let c=`${r}:${t}`;if(ma.has(c))return!1;let a=`pubsub:pending:user:${r}:${t}`,e=`pubsub:user:pending-set:${r}`,i=`pubsub:ack:${r}:${t}`,s=await n.read(a);if(!s.success||!s.data)return ma.set(c,Date.now()),!1;ma.set(c,Date.now());let l=s.data,d={messageId:t,clientId:l.clientId,ackedAt:Date.now()};await n.create(i,d,60),await n.remove(a);let b=await n.read(e),$=(b.success&&b.data?b.data:[]).filter((w)=>w!==t);if($.length>0)await n.create(e,$,o);else await n.remove(e);let k=Date.now()-l.sentAt;return Z5(k),!0}async function yu(n,r){if(!r)return[];let t=`pubsub:user:pending-set:${r}`,o=await n.read(t),c=o.success&&o.data?o.data:[],a=[];for(let e of c){let i=`pubsub:pending:user:${r}:${e}`,s=await n.read(i);if(s.success&&s.data)a.push(s.data)}return a.sort((e,i)=>e.sentAt-i.sentAt),a}async function ng(n,r){if(!r)return 0;let t=`pubsub:user:pending-set:${r}`,o=await n.read(t);return(o.success&&o.data?o.data:[]).length}async function rg(n,r,t,o,c){let a=`pubsub:pending:user:${r}:${t}`,e=await n.read(a);if(!e.success||!e.data)return!1;let i={...e.data,retryCount:e.data.retryCount+1};if(i.retryCount>=c)return await I5(n,r,t),y5(),!1;return await n.create(a,i,o),!0}async function I5(n,r,t){let o=`pubsub:pending:user:${r}:${t}`,c=`pubsub:user:pending-set:${r}`;await n.remove(o);let a=await n.read(c),i=(a.success&&a.data?a.data:[]).filter((s)=>s!==t);if(i.length>0)await n.create(c,i,300);else await n.remove(c)}function nf(){Vo.totalSent++}function Z5(n){Vo.totalAcked++,Vo.averageLatencyMs=(Vo.averageLatencyMs*(Vo.totalAcked-1)+n)/Vo.totalAcked}function y5(){Vo.totalFailed++}var or=new Map,wa=new Map;function tg(n){let{redis:r,logger:t}=n,o=n.ack.ttlSeconds,c=n.ack.enabled,a=n.ack.maxRetries,e=n.presence.enabled,i=n.presence.debounceMs,s=n.maxClientsPerUser;function l(){return`client_${Date.now()}_${Math.random().toString(36).substring(2,9)}`}function d(A,z,h,g){let B=$(h);if(B.length>=s){let G=B[0];if(G)t.info("[PubSub] Max clients reached, closing oldest",{userId:h,oldestClientId:G}),b(G)}or.set(A,{ws:z,userId:h,subscribedTopics:new Set(g),connectedAt:Date.now(),pendingAcks:new Map}),t.info("[PubSub] Client registered",{clientId:A,userId:h,topics:g,totalClients:or.size})}function b(A){let z=or.get(A);if(!z)return;let h=z.userId;if(or.delete(A),t.info("[PubSub] Client unregistered",{clientId:A,userId:h,totalClients:or.size}),e&&h){if($(h).length===0)E(h,"offline")}}function u(A,z){let h=or.get(A);if(h)h.subscribedTopics=new Set(z)}function $(A){let z=[];for(let[h,g]of or)if(g.userId===A)z.push(h);return z}function k(){let A=new Set;for(let[,z]of or)if(z.userId)A.add(z.userId);return A}function w(){return or.size}function _(A,z){let h=or.get(A);if(!h)return!1;try{return h.ws.send(JSON.stringify(z)),!0}catch{return or.delete(A),!1}}function R(A,z){let h=Zl(),g=Date.now(),B=JSON.stringify({type:"event",messageId:c?h:void 0,topic:A,data:z,timestamp:g}),G=0;for(let[L,O]of or)if(O.subscribedTopics.has("*")||O.subscribedTopics.has(A))try{if(O.ws.send(B),G++,c){if(O.pendingAcks.set(h,{sentAt:g,retryCount:0}),nf(),O.userId)yl(r,{messageId:h,topic:A,clientId:L,userId:O.userId,data:z,sentAt:g,retryCount:0,maxRetries:a},o).catch(()=>{})}}catch{or.delete(L)}t.info("[PubSub] Broadcasted event",{topic:A,messageId:h,sentCount:G})}function X(A,z,h){let g=Zl(),B=Date.now(),G=JSON.stringify({type:"event",messageId:c?g:void 0,topic:z,data:h,timestamp:B}),L=0,O=!1;for(let[v,J]of or){if(J.userId!==A)continue;if(!J.subscribedTopics.has("*")&&!J.subscribedTopics.has(z))continue;try{if(J.ws.send(G),L++,O=!0,c)J.pendingAcks.set(g,{sentAt:B,retryCount:0}),nf()}catch{or.delete(v)}}if(c)yl(r,{messageId:g,topic:z,clientId:O?"delivered":"pending",userId:A,data:h,sentAt:B,retryCount:0,maxRetries:a},o).catch(()=>{});t.info("[PubSub] Broadcasted to user",{userId:A,topic:z,messageId:g,sentCount:L,storedForOffline:!O})}function x(A,z,h){let g=Date.now(),B=JSON.stringify({type:"event",topic:z,data:h,timestamp:g});for(let[G,L]of or){if(L.userId!==A)continue;if(!L.subscribedTopics.has("*")&&!L.subscribedTopics.has(z))continue;try{L.ws.send(B)}catch{or.delete(G)}}}function E(A,z){let h=`${A}:${z}`,g=Date.now(),B=wa.get(h);if(B&&g-B<i)return;if(wa.set(h,g),wa.size>1000){let L=g-i*2;for(let[O,v]of wa)if(v<L)wa.delete(O)}let G=k();for(let L of G)if(L!==A)x(L,"user-presence",{type:"user-presence",data:{userId:A,status:z}})}async function P(A,z){if(!c)return!0;let h=or.get(A);if(!h)return!1;if(h.pendingAcks.get(z))h.pendingAcks.delete(z);if(h.userId)return Zu(r,h.userId,z,o);return!0}async function M(A,z){if(!c)return 0;let h=or.get(z);if(!h||h.userId!==A)return 0;let g=await yu(r,A);if(g.length===0)return 0;t.info("[PubSub] Delivering pending messages",{userId:A,count:g.length});let B=0;for(let G of g){if(!h.subscribedTopics.has("*")&&!h.subscribedTopics.has(G.topic))continue;let L=JSON.stringify({type:"event",messageId:G.messageId,topic:G.topic,data:G.data,timestamp:G.sentAt,isRedelivery:!0});try{h.ws.send(L),h.pendingAcks.set(G.messageId,{sentAt:Date.now(),retryCount:G.retryCount+1}),await rg(r,A,G.messageId,o,a),B++}catch{break}}return B}return{generateClientId:l,registerClient:d,unregisterClient:b,updateClientTopics:u,getClientsByUser:$,getConnectedUserIds:k,getClientCount:w,sendToClient:_,broadcastEvent:R,broadcastToUser:X,broadcastToUserNoAck:x,broadcastPresenceToOthers:E,handleClientAck:P,deliverPendingMessages:M,getPendingMessageCount:(A)=>ng(r,A)}}function rf(n){let{logger:r,liveMonitoringService:t}=n,o=tg(n);if(n.ack.enabled)Iu();let c=null,a=new nh;return a.onStart(()=>{if(n.cleanupIntervalMs>0)c=setInterval(()=>{r.info("[PubSub] Periodic cleanup running",{totalClients:o.getClientCount()})},n.cleanupIntervalMs);r.info("[PubSub] Routes initialized",{basePath:n.basePath,wsPath:n.wsPath,ackEnabled:n.ack.enabled,presenceEnabled:n.presence.enabled})}),a.onStop(()=>{if(c)clearInterval(c),c=null}),a.post(`${n.basePath}/:topic`,async({params:e,body:i,request:s,set:l})=>{let d=e.topic,b;try{if(!i){let $=await s.text();b=JSON.parse($)}else b=i}catch{return l.status=200,{status:"DROP"}}r.info("[PubSub] Dapr event received",{topic:d,eventId:b.id,source:b.source});let u=b.data?.user_id;if(u)o.broadcastToUser(u,d,b);else o.broadcastEvent(d,b);if(t)t.recordDaprEvent("pubsub_subscribe",{topic:d,success:!0,metadata:{eventId:b.id,source:b.source,userId:u||null}});return l.status=200,{status:"SUCCESS"}}),a.ws(n.wsPath,{idleTimeout:n.wsIdleTimeout,open(e){let i=e.data?.query||{};if(!i.userId){if(e.send(JSON.stringify({type:"error",error:"userId is required for WebSocket connection",timestamp:Date.now()})),e.close(4001,"userId is required"),t)t.recordWsEvent("error",{success:!1,error:"userId is required"});return}let s=o.generateClientId(),l=i.topics?.split(",").map((b)=>b.trim())||["*"];if(e.data.clientId=s,o.registerClient(s,e,i.userId,l),e.send(JSON.stringify({type:"connected",clientId:s,subscribedTopics:l,timestamp:Date.now()})),t)t.recordWsEvent("connection",{clientId:s,userId:i.userId,topic:l.join(","),success:!0});if(n.presence.enabled)o.broadcastPresenceToOthers(i.userId,"online");let d=i.userId;if(n.ack.enabled&&d)o.getPendingMessageCount(d).then((b)=>{if(b>0)r.info("[PubSub] Delivering pending messages",{userId:d,count:b}),o.deliverPendingMessages(d,s).catch(()=>{})}).catch(()=>{})},message(e,i){let s=e.data.clientId;try{let l=null;if(typeof i==="string")l=JSON.parse(i);else if(i&&typeof i==="object"){if(l="type"in i?i:null,typeof l==="string")l=JSON.parse(l)}if(!l?.type)return;if(t)t.recordWsEvent("message",{clientId:s,messageType:l.type,success:!0,dataSize:typeof i==="string"?i.length:0});switch(l.type){case"subscribe":if(Array.isArray(l.topics))o.updateClientTopics(s,l.topics),o.sendToClient(s,{type:"subscribed",topics:l.topics,timestamp:Date.now()});break;case"unsubscribe":r.info("[PubSub] Unsubscribe request",{clientId:s,topics:l.topics});break;case"ping":o.sendToClient(s,{type:"pong",timestamp:Date.now()});break;case"ack":if(l.messageId)o.handleClientAck(s,l.messageId).catch(()=>{});break}}catch{r.warn("[PubSub] Failed to parse client message",{clientId:s})}},close(e,i,s){let l=e.data.clientId;if(l)o.unregisterClient(l);if(t)t.recordWsEvent("close",{clientId:l,success:!0,metadata:{code:i,reason:s||""}});r.info("[PubSub] Client disconnected",{clientId:l,code:i,reason:s})}}),{plugin:a,clientManager:o}}Dl();import{Elysia as rh,t as Fn}from"elysia";function og(n){let{db:r,schemaTables:t,config:o,logger:c}=n,a=new Ml({db:r,schemaTables:t,config:o,logger:c}),e=o.endpoints?.basePath||"/verifications",i=new rh({prefix:e});return i.get("/status/:entity_name/:entity_id",async({params:s})=>{return{success:!0,data:await a.getStatus(s.entity_name,s.entity_id)}},{params:Fn.Object({entity_name:Fn.String(),entity_id:Fn.String()})}),i.post("/:entity_name/:entity_id/decide",async({params:s,body:l,request:d})=>{let b=d.headers.get("x-user-id");if(!b)return{success:!1,message:"User ID required",status:401};return await a.decide({entity_name:s.entity_name,entity_id:s.entity_id,user_id:b,decision:l.decision,reason:l.reason,signature_id:l.signature_id,diff:l.diff})},{params:Fn.Object({entity_name:Fn.String(),entity_id:Fn.String()}),body:Fn.Object({decision:Fn.Union([Fn.Literal("approved"),Fn.Literal("rejected")]),reason:Fn.Optional(Fn.String()),signature_id:Fn.Optional(Fn.String()),diff:Fn.Optional(Fn.Record(Fn.String(),Fn.Unknown()))})}),i.get("/pending",async({request:s})=>{let l=s.headers.get("x-user-id");if(!l)return{success:!1,message:"User ID required",status:401};return{success:!0,data:await a.getPending(l)}}),i.get("/history/:entity_name/:entity_id",async({params:s})=>{let l=await a.getStatus(s.entity_name,s.entity_id);return{success:!0,data:{verifications:l.verifications,current_step:l.current_step,total_steps:l.total_steps,is_completed:l.is_completed,is_rejected:l.is_rejected}}},{params:Fn.Object({entity_name:Fn.String(),entity_id:Fn.String()})}),c.info(`[Verification] Routes registered at ${e}`),i}import{Elysia as S$}from"elysia";var cg=`/* basic theme */
|
|
63
|
+
`)};function Tu(n){let{getService:r,logger:t,basePath:o,streamInterval:c}=n,a=new K5({prefix:o}),e=()=>{let i=r();if(!i)throw Error("Live monitoring service not initialized");return i};return a.get("/health",()=>{let i=r();return{status:i?"ok":"initializing",timestamp:Date.now(),monitoring:i?.isEnabled()??!1}},{detail:{tags:["Live Monitoring"],summary:"Health check for live monitoring"}}),a.get("/settings",()=>{return e().getSettings()},{detail:{tags:["Live Monitoring"],summary:"Get live monitoring settings"}}),a.patch("/settings",({body:i})=>{return e().changeSettings(i)},{body:xr.Partial(xr.Object({logMemory:xr.Boolean(),logCpu:xr.Boolean(),logDapr:xr.Boolean(),logWebSocket:xr.Boolean(),memoryLogInterval:xr.Number(),cpuLogInterval:xr.Number(),memoryLogLimit:xr.Number(),cpuLogLimit:xr.Number(),daprLogLimit:xr.Number(),wsLogLimit:xr.Number(),requestLogLimit:xr.Number()})),detail:{tags:["Live Monitoring"],summary:"Change live monitoring settings"}}),a.get("/logs",()=>{return e().getLogs()},{detail:{tags:["Live Monitoring"],summary:"Get all live monitoring logs"}}),a.get("/logs/stream",({request:i})=>{let s=i.signal,l,d=e(),b=d.getSnapshot(),u={memory:b.memory.length?b.memory[b.memory.length-1]?.timestamp??0:0,cpu:b.cpu.length?b.cpu[b.cpu.length-1]?.timestamp??0:0,request:b.requests.length?b.requests[b.requests.length-1]?.timestamp??0:0,dapr:b.dapr.length?b.dapr[b.dapr.length-1]?.timestamp??0:0,ws:b.ws.length?b.ws[b.ws.length-1]?.timestamp??0:0},$=new ReadableStream({start(k){let w=!1;k.enqueue(Il("snapshot",b));let R=setInterval(()=>{if(w)return;let x=d.getUpdatesSince(u);if(!x){k.enqueue(Il("heartbeat",{timestamp:Date.now()}));return}if(x.memory.length)u.memory=x.memory[x.memory.length-1]?.timestamp??u.memory;if(x.cpu.length)u.cpu=x.cpu[x.cpu.length-1]?.timestamp??u.cpu;if(x.requests.length)u.request=x.requests[x.requests.length-1]?.timestamp??u.request;if(x.dapr.length)u.dapr=x.dapr[x.dapr.length-1]?.timestamp??u.dapr;if(x.ws.length)u.ws=x.ws[x.ws.length-1]?.timestamp??u.ws;k.enqueue(Il("update",x))},c),X=()=>{if(w)return;w=!0,clearInterval(R),s?.removeEventListener("abort",X);try{k.close()}catch{}};l=X,s?.addEventListener("abort",X)},cancel(){l?.()}});return new Response($,{headers:p5})},{detail:{tags:["Live Monitoring"],summary:"Stream real-time live monitoring data via SSE"}}),t.info(`[LiveMonitoring] Routes enabled at ${o} (stream interval: ${c}ms)`),a}import nh from"elysia";var ma=new Map;var vu=null;function v5(){let n=Date.now();for(let[r,t]of ma)if(n-t>1e4)ma.delete(r)}var Vo={totalSent:0,totalAcked:0,totalFailed:0,averageLatencyMs:0};function Iu(){if(vu)return;vu=setInterval(v5,30000)}function Zl(){return`msg_${Date.now()}_${Math.random().toString(36).substring(2,11)}`}async function yl(n,r,t){if(!r.userId)return;let o=`pubsub:pending:user:${r.userId}:${r.messageId}`,c=`pubsub:user:pending-set:${r.userId}`;await n.create(o,r,t);let a=await n.read(c),e=a.success&&a.data?a.data:[];if(!e.includes(r.messageId))e.push(r.messageId),await n.create(c,e,t)}async function Zu(n,r,t,o){let c=`${r}:${t}`;if(ma.has(c))return!1;let a=`pubsub:pending:user:${r}:${t}`,e=`pubsub:user:pending-set:${r}`,i=`pubsub:ack:${r}:${t}`,s=await n.read(a);if(!s.success||!s.data)return ma.set(c,Date.now()),!1;ma.set(c,Date.now());let l=s.data,d={messageId:t,clientId:l.clientId,ackedAt:Date.now()};await n.create(i,d,60),await n.remove(a);let b=await n.read(e),$=(b.success&&b.data?b.data:[]).filter((w)=>w!==t);if($.length>0)await n.create(e,$,o);else await n.remove(e);let k=Date.now()-l.sentAt;return Z5(k),!0}async function yu(n,r){if(!r)return[];let t=`pubsub:user:pending-set:${r}`,o=await n.read(t),c=o.success&&o.data?o.data:[],a=[];for(let e of c){let i=`pubsub:pending:user:${r}:${e}`,s=await n.read(i);if(s.success&&s.data)a.push(s.data)}return a.sort((e,i)=>e.sentAt-i.sentAt),a}async function ng(n,r){if(!r)return 0;let t=`pubsub:user:pending-set:${r}`,o=await n.read(t);return(o.success&&o.data?o.data:[]).length}async function rg(n,r,t,o,c){let a=`pubsub:pending:user:${r}:${t}`,e=await n.read(a);if(!e.success||!e.data)return!1;let i={...e.data,retryCount:e.data.retryCount+1};if(i.retryCount>=c)return await I5(n,r,t),y5(),!1;return await n.create(a,i,o),!0}async function I5(n,r,t){let o=`pubsub:pending:user:${r}:${t}`,c=`pubsub:user:pending-set:${r}`;await n.remove(o);let a=await n.read(c),i=(a.success&&a.data?a.data:[]).filter((s)=>s!==t);if(i.length>0)await n.create(c,i,300);else await n.remove(c)}function nf(){Vo.totalSent++}function Z5(n){Vo.totalAcked++,Vo.averageLatencyMs=(Vo.averageLatencyMs*(Vo.totalAcked-1)+n)/Vo.totalAcked}function y5(){Vo.totalFailed++}var or=new Map,wa=new Map;function tg(n){let{redis:r,logger:t}=n,o=n.ack.ttlSeconds,c=n.ack.enabled,a=n.ack.maxRetries,e=n.presence.enabled,i=n.presence.debounceMs,s=n.maxClientsPerUser;function l(){return`client_${Date.now()}_${Math.random().toString(36).substring(2,9)}`}function d(A,z,h,g){let B=$(h);if(B.length>=s){let G=B[0];if(G)t.info("[PubSub] Max clients reached, closing oldest",{userId:h,oldestClientId:G}),b(G)}or.set(A,{ws:z,userId:h,subscribedTopics:new Set(g),connectedAt:Date.now(),pendingAcks:new Map}),t.info("[PubSub] Client registered",{clientId:A,userId:h,topics:g,totalClients:or.size})}function b(A){let z=or.get(A);if(!z)return;let h=z.userId;if(or.delete(A),t.info("[PubSub] Client unregistered",{clientId:A,userId:h,totalClients:or.size}),e&&h){if($(h).length===0)E(h,"offline")}}function u(A,z){let h=or.get(A);if(h)h.subscribedTopics=new Set(z)}function $(A){let z=[];for(let[h,g]of or)if(g.userId===A)z.push(h);return z}function k(){let A=new Set;for(let[,z]of or)if(z.userId)A.add(z.userId);return A}function w(){return or.size}function _(A,z){let h=or.get(A);if(!h)return!1;try{return h.ws.send(JSON.stringify(z)),!0}catch{return or.delete(A),!1}}function R(A,z){let h=Zl(),g=Date.now(),B=JSON.stringify({type:"event",messageId:c?h:void 0,topic:A,data:z,timestamp:g}),G=0;for(let[L,O]of or)if(O.subscribedTopics.has("*")||O.subscribedTopics.has(A))try{if(O.ws.send(B),G++,c){if(O.pendingAcks.set(h,{sentAt:g,retryCount:0}),nf(),O.userId)yl(r,{messageId:h,topic:A,clientId:L,userId:O.userId,data:z,sentAt:g,retryCount:0,maxRetries:a},o).catch(()=>{})}}catch{or.delete(L)}t.info("[PubSub] Broadcasted event",{topic:A,messageId:h,sentCount:G})}function X(A,z,h){let g=Zl(),B=Date.now(),G=JSON.stringify({type:"event",messageId:c?g:void 0,topic:z,data:h,timestamp:B}),L=0,O=!1;for(let[v,J]of or){if(J.userId!==A)continue;if(!J.subscribedTopics.has("*")&&!J.subscribedTopics.has(z))continue;try{if(J.ws.send(G),L++,O=!0,c)J.pendingAcks.set(g,{sentAt:B,retryCount:0}),nf()}catch{or.delete(v)}}if(c)yl(r,{messageId:g,topic:z,clientId:O?"delivered":"pending",userId:A,data:h,sentAt:B,retryCount:0,maxRetries:a},o).catch(()=>{});t.info("[PubSub] Broadcasted to user",{userId:A,topic:z,messageId:g,sentCount:L,storedForOffline:!O})}function x(A,z,h){let g=Date.now(),B=JSON.stringify({type:"event",topic:z,data:h,timestamp:g});for(let[G,L]of or){if(L.userId!==A)continue;if(!L.subscribedTopics.has("*")&&!L.subscribedTopics.has(z))continue;try{L.ws.send(B)}catch{or.delete(G)}}}function E(A,z){let h=`${A}:${z}`,g=Date.now(),B=wa.get(h);if(B&&g-B<i)return;if(wa.set(h,g),wa.size>1000){let L=g-i*2;for(let[O,v]of wa)if(v<L)wa.delete(O)}let G=k();for(let L of G)if(L!==A)x(L,"user-presence",{type:"user-presence",data:{userId:A,status:z}})}async function P(A,z){if(!c)return!0;let h=or.get(A);if(!h)return!1;if(h.pendingAcks.get(z))h.pendingAcks.delete(z);if(h.userId)return Zu(r,h.userId,z,o);return!0}async function M(A,z){if(!c)return 0;let h=or.get(z);if(!h||h.userId!==A)return 0;let g=await yu(r,A);if(g.length===0)return 0;t.info("[PubSub] Delivering pending messages",{userId:A,count:g.length});let B=0;for(let G of g){if(!h.subscribedTopics.has("*")&&!h.subscribedTopics.has(G.topic))continue;let L=JSON.stringify({type:"event",messageId:G.messageId,topic:G.topic,data:G.data,timestamp:G.sentAt,isRedelivery:!0});try{h.ws.send(L),h.pendingAcks.set(G.messageId,{sentAt:Date.now(),retryCount:G.retryCount+1}),await rg(r,A,G.messageId,o,a),B++}catch{break}}return B}return{generateClientId:l,registerClient:d,unregisterClient:b,updateClientTopics:u,getClientsByUser:$,getConnectedUserIds:k,getClientCount:w,sendToClient:_,broadcastEvent:R,broadcastToUser:X,broadcastToUserNoAck:x,broadcastPresenceToOthers:E,handleClientAck:P,deliverPendingMessages:M,getPendingMessageCount:(A)=>ng(r,A)}}function rf(n){let{logger:r,getLiveMonitoringService:t}=n,o=tg(n);if(n.ack.enabled)Iu();let c=null,a=new nh;return a.onStart(()=>{if(n.cleanupIntervalMs>0)c=setInterval(()=>{r.info("[PubSub] Periodic cleanup running",{totalClients:o.getClientCount()})},n.cleanupIntervalMs);r.info("[PubSub] Routes initialized",{basePath:n.basePath,wsPath:n.wsPath,ackEnabled:n.ack.enabled,presenceEnabled:n.presence.enabled})}),a.onStop(()=>{if(c)clearInterval(c),c=null}),a.post(`${n.basePath}/:topic`,async({params:e,body:i,request:s,set:l})=>{let d=e.topic,b;try{if(!i){let $=await s.text();b=JSON.parse($)}else b=i}catch{return l.status=200,{status:"DROP"}}r.info("[PubSub] Dapr event received",{topic:d,eventId:b.id,source:b.source});let u=b.data?.user_id;if(u)o.broadcastToUser(u,d,b);else o.broadcastEvent(d,b);return t?.()?.recordDaprEvent("pubsub_subscribe",{topic:d,success:!0,metadata:{eventId:b.id,source:b.source,userId:u||null}}),l.status=200,{status:"SUCCESS"}}),a.ws(n.wsPath,{idleTimeout:n.wsIdleTimeout,open(e){let i=e.data?.query||{};if(!i.userId){e.send(JSON.stringify({type:"error",error:"userId is required for WebSocket connection",timestamp:Date.now()})),e.close(4001,"userId is required"),t?.()?.recordWsEvent("error",{success:!1,error:"userId is required"});return}let s=o.generateClientId(),l=i.topics?.split(",").map((b)=>b.trim())||["*"];if(e.data.clientId=s,o.registerClient(s,e,i.userId,l),e.send(JSON.stringify({type:"connected",clientId:s,subscribedTopics:l,timestamp:Date.now()})),t?.()?.recordWsEvent("connection",{clientId:s,userId:i.userId,topic:l.join(","),success:!0}),n.presence.enabled)o.broadcastPresenceToOthers(i.userId,"online");let d=i.userId;if(n.ack.enabled&&d)o.getPendingMessageCount(d).then((b)=>{if(b>0)r.info("[PubSub] Delivering pending messages",{userId:d,count:b}),o.deliverPendingMessages(d,s).catch(()=>{})}).catch(()=>{})},message(e,i){let s=e.data.clientId;try{let l=null;if(typeof i==="string")l=JSON.parse(i);else if(i&&typeof i==="object"){if(l="type"in i?i:null,typeof l==="string")l=JSON.parse(l)}if(!l?.type)return;switch(t?.()?.recordWsEvent("message",{clientId:s,messageType:l.type,success:!0,dataSize:typeof i==="string"?i.length:0}),l.type){case"subscribe":if(Array.isArray(l.topics))o.updateClientTopics(s,l.topics),o.sendToClient(s,{type:"subscribed",topics:l.topics,timestamp:Date.now()});break;case"unsubscribe":r.info("[PubSub] Unsubscribe request",{clientId:s,topics:l.topics});break;case"ping":o.sendToClient(s,{type:"pong",timestamp:Date.now()});break;case"ack":if(l.messageId)o.handleClientAck(s,l.messageId).catch(()=>{});break}}catch{r.warn("[PubSub] Failed to parse client message",{clientId:s})}},close(e,i,s){let l=e.data.clientId;if(l)o.unregisterClient(l);t?.()?.recordWsEvent("close",{clientId:l,success:!0,metadata:{code:i,reason:s||""}}),r.info("[PubSub] Client disconnected",{clientId:l,code:i,reason:s})}}),{plugin:a,clientManager:o}}Dl();import{Elysia as rh,t as Fn}from"elysia";function og(n){let{db:r,schemaTables:t,config:o,logger:c}=n,a=new Ml({db:r,schemaTables:t,config:o,logger:c}),e=o.endpoints?.basePath||"/verifications",i=new rh({prefix:e});return i.get("/status/:entity_name/:entity_id",async({params:s})=>{return{success:!0,data:await a.getStatus(s.entity_name,s.entity_id)}},{params:Fn.Object({entity_name:Fn.String(),entity_id:Fn.String()})}),i.post("/:entity_name/:entity_id/decide",async({params:s,body:l,request:d})=>{let b=d.headers.get("x-user-id");if(!b)return{success:!1,message:"User ID required",status:401};return await a.decide({entity_name:s.entity_name,entity_id:s.entity_id,user_id:b,decision:l.decision,reason:l.reason,signature_id:l.signature_id,diff:l.diff})},{params:Fn.Object({entity_name:Fn.String(),entity_id:Fn.String()}),body:Fn.Object({decision:Fn.Union([Fn.Literal("approved"),Fn.Literal("rejected")]),reason:Fn.Optional(Fn.String()),signature_id:Fn.Optional(Fn.String()),diff:Fn.Optional(Fn.Record(Fn.String(),Fn.Unknown()))})}),i.get("/pending",async({request:s})=>{let l=s.headers.get("x-user-id");if(!l)return{success:!1,message:"User ID required",status:401};return{success:!0,data:await a.getPending(l)}}),i.get("/history/:entity_name/:entity_id",async({params:s})=>{let l=await a.getStatus(s.entity_name,s.entity_id);return{success:!0,data:{verifications:l.verifications,current_step:l.current_step,total_steps:l.total_steps,is_completed:l.is_completed,is_rejected:l.is_rejected}}},{params:Fn.Object({entity_name:Fn.String(),entity_id:Fn.String()})}),c.info(`[Verification] Routes registered at ${e}`),i}import{Elysia as S$}from"elysia";var cg=`/* basic theme */
|
|
64
64
|
:root {
|
|
65
65
|
--scalar-text-decoration: underline;
|
|
66
66
|
--scalar-text-decoration-hover: underline;
|
|
@@ -1529,4 +1529,4 @@ data: ${t}
|
|
|
1529
1529
|
<li><strong>Time:</strong> ${new Date().toISOString()}</li>
|
|
1530
1530
|
</ul>
|
|
1531
1531
|
<p>If this wasn't you, please secure your account immediately.</p>
|
|
1532
|
-
`}z?.sendEmail({to:Ar.email,subject:gr,html:sr}).catch((bs)=>{d.warn("[AUTH] Failed to send login notification email",{error:bs,userId:W.userId,trustScore:en,requiresApproval:sn})})}}}d.info("[AUTH] Session saved to DB",{sessionId:J,userId:W.userId,isNewDevice:N,deviceFingerprint:Q,ipAddress:Y.ipAddress})},storeResetToken:async(J,W,U)=>{let Y=R.passwordResetTokens;if(!Y||!_)return;await _.insert(Y).values({userId:J,tokenHash:W,expiresAt:U})},getResetToken:async(J)=>{let{eq:W}=En("drizzle-orm"),U=R.passwordResetTokens;if(!U||!_)return null;let Q=(await _.select().from(U).where(W(U.tokenHash,J)).limit(1))[0];if(!Q||Q.usedAt)return null;return{userId:Q.userId,expiresAt:Q.expiresAt}},deleteResetToken:async(J)=>{let{eq:W}=En("drizzle-orm"),U=R.passwordResetTokens;if(!U||!_)return;await _.delete(U).where(W(U.tokenHash,J))},revokeSessionInDb:async(J,W)=>{if(!g||!_)return;await _.update(g).set({isActive:!1,revokedAt:new Date,revokedReason:W}).where(ur(g.id,J)),d.info("[AUTH] Session revoked in DB",{sessionId:J,reason:W})},sendResetEmail:async(J,W)=>{if(!z?.isAvailable()){d.warn("[AUTH] Cannot send reset email - gmail service not available");return}let U=`${a.passwordReset?.redirectUrl||"http://localhost:3000/reset-password"}?token=${W}`;await z.sendEmail({to:J,subject:"Password Reset Request",html:`<p>Click the link to reset your password:</p><a href="${U}">${U}</a>`})},storeMagicToken:async(J)=>{let W=R.magicLinkTokens;if(!W||!_)return;await _.insert(W).values({userId:J.userId,email:J.email,tokenHash:J.tokenHash,expiresAt:J.expiresAt})},getMagicToken:async(J)=>{let{eq:W}=En("drizzle-orm"),U=R.magicLinkTokens;if(!U||!_)return null;let Q=(await _.select().from(U).where(W(U.tokenHash,J)).limit(1))[0];if(!Q||Q.usedAt)return null;return{userId:Q.userId,email:Q.email,tokenHash:Q.tokenHash,expiresAt:Q.expiresAt}},deleteMagicToken:async(J)=>{let{eq:W}=En("drizzle-orm"),U=R.magicLinkTokens;if(!U||!_)return;await _.delete(U).where(W(U.tokenHash,J))}}}),d.info("[AUTH] Routes registered")}}if(o.storage?.enabled&&o.storage?.cdn?.enabled){let{createCdnRoutes:h,mergeCdnConfig:g,mergeStorageConfig:B}=(je(),te(ju)),G=g(o.storage.cdn),L=B(o.storage),O=R.files;r.use(h({cdn:G,storagePath:L.basePath,logger:d,getFileRecord:O&&_?async(v)=>{let J=O,W=await _.select().from(J).where(ur(J.id,v)).limit(1);if(W.length===0)return null;let U=W[0];return{id:U.id,name:U.name,path:U.path,mime_type:U.mimeType||U.mime_type}}:void 0})),d.info(`[Storage] CDN routes enabled at ${G.basePath}`)}if(o.verification?.enabled&&_)r.use(og({db:_,schemaTables:R,config:o.verification,logger:d}));if(o.pubsub?.enabled){let h=qe();if(h){let g=o.pubsub,{plugin:B}=rf({redis:h,logger:d,basePath:g.basePath||"/subs",wsPath:g.wsPath||"/api/events/subscribe",pubsubName:g.pubsubName||"pubsub-redis",maxClientsPerUser:g.maxClientsPerUser??10,wsIdleTimeout:g.wsIdleTimeout??120,ack:{enabled:g.ack?.enabled??!0,ttlSeconds:g.ack?.ttlSeconds??300,maxRetries:g.ack?.maxRetries??3,retryIntervalMs:g.ack?.retryIntervalMs??5000},presence:{enabled:g.presence?.enabled??!0,debounceMs:g.presence?.debounceMs??5000},cleanupIntervalMs:g.cleanupIntervalMs??60000,
|
|
1532
|
+
`}z?.sendEmail({to:Ar.email,subject:gr,html:sr}).catch((bs)=>{d.warn("[AUTH] Failed to send login notification email",{error:bs,userId:W.userId,trustScore:en,requiresApproval:sn})})}}}d.info("[AUTH] Session saved to DB",{sessionId:J,userId:W.userId,isNewDevice:N,deviceFingerprint:Q,ipAddress:Y.ipAddress})},storeResetToken:async(J,W,U)=>{let Y=R.passwordResetTokens;if(!Y||!_)return;await _.insert(Y).values({userId:J,tokenHash:W,expiresAt:U})},getResetToken:async(J)=>{let{eq:W}=En("drizzle-orm"),U=R.passwordResetTokens;if(!U||!_)return null;let Q=(await _.select().from(U).where(W(U.tokenHash,J)).limit(1))[0];if(!Q||Q.usedAt)return null;return{userId:Q.userId,expiresAt:Q.expiresAt}},deleteResetToken:async(J)=>{let{eq:W}=En("drizzle-orm"),U=R.passwordResetTokens;if(!U||!_)return;await _.delete(U).where(W(U.tokenHash,J))},revokeSessionInDb:async(J,W)=>{if(!g||!_)return;await _.update(g).set({isActive:!1,revokedAt:new Date,revokedReason:W}).where(ur(g.id,J)),d.info("[AUTH] Session revoked in DB",{sessionId:J,reason:W})},sendResetEmail:async(J,W)=>{if(!z?.isAvailable()){d.warn("[AUTH] Cannot send reset email - gmail service not available");return}let U=`${a.passwordReset?.redirectUrl||"http://localhost:3000/reset-password"}?token=${W}`;await z.sendEmail({to:J,subject:"Password Reset Request",html:`<p>Click the link to reset your password:</p><a href="${U}">${U}</a>`})},storeMagicToken:async(J)=>{let W=R.magicLinkTokens;if(!W||!_)return;await _.insert(W).values({userId:J.userId,email:J.email,tokenHash:J.tokenHash,expiresAt:J.expiresAt})},getMagicToken:async(J)=>{let{eq:W}=En("drizzle-orm"),U=R.magicLinkTokens;if(!U||!_)return null;let Q=(await _.select().from(U).where(W(U.tokenHash,J)).limit(1))[0];if(!Q||Q.usedAt)return null;return{userId:Q.userId,email:Q.email,tokenHash:Q.tokenHash,expiresAt:Q.expiresAt}},deleteMagicToken:async(J)=>{let{eq:W}=En("drizzle-orm"),U=R.magicLinkTokens;if(!U||!_)return;await _.delete(U).where(W(U.tokenHash,J))}}}),d.info("[AUTH] Routes registered")}}if(o.storage?.enabled&&o.storage?.cdn?.enabled){let{createCdnRoutes:h,mergeCdnConfig:g,mergeStorageConfig:B}=(je(),te(ju)),G=g(o.storage.cdn),L=B(o.storage),O=R.files;r.use(h({cdn:G,storagePath:L.basePath,logger:d,getFileRecord:O&&_?async(v)=>{let J=O,W=await _.select().from(J).where(ur(J.id,v)).limit(1);if(W.length===0)return null;let U=W[0];return{id:U.id,name:U.name,path:U.path,mime_type:U.mimeType||U.mime_type}}:void 0})),d.info(`[Storage] CDN routes enabled at ${G.basePath}`)}if(o.verification?.enabled&&_)r.use(og({db:_,schemaTables:R,config:o.verification,logger:d}));if(o.pubsub?.enabled){let h=qe();if(h){let g=o.pubsub,{plugin:B}=rf({redis:h,logger:d,basePath:g.basePath||"/subs",wsPath:g.wsPath||"/api/events/subscribe",pubsubName:g.pubsubName||"pubsub-redis",maxClientsPerUser:g.maxClientsPerUser??10,wsIdleTimeout:g.wsIdleTimeout??120,ack:{enabled:g.ack?.enabled??!0,ttlSeconds:g.ack?.ttlSeconds??300,maxRetries:g.ack?.maxRetries??3,retryIntervalMs:g.ack?.retryIntervalMs??5000},presence:{enabled:g.presence?.enabled??!0,debounceMs:g.presence?.debounceMs??5000},cleanupIntervalMs:g.cleanupIntervalMs??60000,getLiveMonitoringService:()=>A});r.use(B),d.info("[PubSub] Enabled",{basePath:g.basePath||"/subs",wsPath:g.wsPath||"/api/events/subscribe"})}else d.warn("[PubSub] pubsub is enabled but Redis is not configured. Disabling PubSub.")}return r.onStart(()=>{let h=Number(process.env.PORT)||3000,g=o.appId||"nucleus",B=o.mode||"production";console.log(""),console.log(` \x1B[32m\uD83D\uDE80 ${g}\x1B[0m \x1B[90mv${Date.now()}\x1B[0m`),console.log(` \x1B[36m\u279C\x1B[0m Local: \x1B[36mhttp://localhost:${h}\x1B[0m`),console.log(` \x1B[36m\u279C\x1B[0m Mode: \x1B[33m${B}\x1B[0m`),console.log("")}),r}export{Ds as usePubSubStore,z2 as usePubSub,m2 as serverFetch,zd as generateSystemTableEndpoints,Ud as generateMonitoringEndpoints,Dd as generateEndpointsFromConfig,Hd as generateAuthEndpoints,l2 as generateAllEndpoints,A2 as createServerFactory,c2 as createApiHook,na as ServerFetch,T4 as NucleusElysiaPlugin,gs as AUTH_ENDPOINT_CONFIGS};
|