nucleus-core-ts 0.8.89 → 0.8.92

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +2 -2
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -74,7 +74,7 @@ var D2=Object.create;var{getPrototypeOf:H2,defineProperty:oc,getOwnPropertyNames
74
74
  AND ccu.table_name = 'users'
75
75
  AND ccu.column_name = 'id'
76
76
  AND tc.table_schema = 'public'
77
- `)).rows||[];return await R.transaction(async(C)=>{for(let N of M)await C.execute(Dl.raw(`UPDATE "${N.table_name}" SET "${N.column_name}" = '${b}' WHERE "${N.column_name}" = '${d}'`));await C.execute(Dl.raw(`UPDATE users SET id = '${b}' WHERE id = '${d}'`))}),a.info("[AUTH] User ID changed",{godminId:s,currentId:d,newId:b,email:_.email,affectedTables:M.map((C)=>C.table_name)}),await a.audit({entityName:"users",entityId:b,operation:"CHANGE_USER_ID",userId:s,summary:`Godmin changed user ID: ${d} \u2192 ${b} (${_.email})`,oldValues:{id:d},newValues:{id:b},ipAddress:i.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||"unknown",userAgent:i.request.headers.get("user-agent")||"unknown",path:new URL(i.request.url).pathname,query:""}),{success:!0,data:{oldId:d,newId:b,email:_.email,affectedTables:M.map((C)=>C.table_name)}}}catch(R){return a.error("[AUTH] Failed to change user ID",{error:R instanceof Error?R.message:String(R),currentId:d,newId:b}),{success:!1,message:R instanceof Error?R.message:"Failed to change user ID"}}},{body:Hl.Object({currentId:Hl.String(),newId:Hl.String()}),detail:{tags:["Authentication"],summary:"Change User ID",description:"Godmin: change a user's UUID while preserving all FK relations"}}),e}var zl=()=>{};import{eq as Ul}from"drizzle-orm";import{Elysia as lA,t as e_}from"elysia";function si(n,r,t,o,a,c){let{db:e,logger:i,usersTable:s}=n,f=new lA,l={accessTokenName:c?.accessTokenName||"access_token",refreshTokenName:c?.refreshTokenName||"refresh_token",sessionTokenName:c?.sessionTokenName||"session_token",accessTokenMaxAge:c?.accessTokenMaxAge||900,refreshTokenMaxAge:c?.refreshTokenMaxAge||604800,sessionTokenMaxAge:c?.sessionTokenMaxAge||900,secure:c?.secure??!0,sameSite:c?.sameSite||"strict",path:c?.path||"/"};return f.post("/auth/admin/impersonate",async(d)=>{if(!e||!s)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{targetUserId:w}=d.body,_=(await e.select().from(s).where(Ul(s.id,b)).limit(1))[0];if(!_||!_.isGod)return d.set.status=403,{success:!1,message:"Forbidden: godmin privileges required"};if(b===w)return d.set.status=400,{success:!1,message:"Cannot impersonate yourself"};let R=(await e.select().from(s).where(Ul(s.id,w)).limit(1))[0];if(!R)return d.set.status=404,{success:!1,message:"Target user not found"};let k=r(w),M=t(w),C=d.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||"unknown",N={userId:w,deviceInfo:{deviceName:"Impersonation Session",browserName:"Admin",osName:"Admin",ipAddress:C},loginMethod:"impersonation"},m=await o(N);if(a)await a(m,N);i.info("[AUTH] Impersonation started",{godminId:b,targetUserId:w,targetEmail:R.email}),await i.audit({entityName:"users",entityId:w,operation:"IMPERSONATE_START",userId:b,summary:`Godmin ${_.email} started impersonating ${R.email}`,ipAddress:d.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||"unknown",userAgent:d.request.headers.get("user-agent")||"unknown",path:new URL(d.request.url).pathname,query:""});let A=l.secure?"; Secure":"",H=`; Path=${l.path}; HttpOnly; SameSite=${l.sameSite}${A}`,D=[`${l.accessTokenName}=${k}${H}; Max-Age=${l.accessTokenMaxAge}`,`${l.refreshTokenName}=${M}${H}; Max-Age=${l.refreshTokenMaxAge}`,`${l.sessionTokenName}=${m}${H}; Max-Age=${l.sessionTokenMaxAge}`,`nucleus_impersonating_as=${w}${H}; Max-Age=${l.sessionTokenMaxAge}`,`nucleus_godmin_id=${b}${H}; Max-Age=${l.sessionTokenMaxAge}`],E=JSON.stringify({success:!0,data:{targetUser:{id:R.id,email:R.email},godminId:b,sessionId:m}}),S=new Headers;S.set("Content-Type","application/json");for(let z of D)S.append("Set-Cookie",z);return new Response(E,{status:200,headers:S})},{body:e_.Object({targetUserId:e_.String()}),detail:{tags:["Authentication"],summary:"Impersonate User",description:"Godmin: start a session as another user"}}),f.post("/auth/admin/impersonate/stop",async(d)=>{if(!e||!s)return{success:!1,message:"Database not configured"};let b=d.request.headers.get("cookie")||"",h=Object.fromEntries(b.split(";").map((z)=>{let[U,...P]=z.trim().split("=");return[U?.trim(),P.join("=")]})).nucleus_godmin_id;if(!h)return d.set.status=400,{success:!1,message:"No active impersonation session"};let g=(await e.select().from(s).where(Ul(s.id,h)).limit(1))[0];if(!g)return d.set.status=404,{success:!1,message:"Godmin user not found"};let R=r(h),k=t(h),M=d.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||"unknown",C={userId:h,deviceInfo:{deviceName:"Restored Admin Session",browserName:"Admin",osName:"Admin",ipAddress:M},loginMethod:"impersonation_stop"},N=await o(C);if(a)await a(N,C);i.info("[AUTH] Impersonation stopped",{godminId:h}),await i.audit({entityName:"users",entityId:h,operation:"IMPERSONATE_STOP",userId:h,summary:`Godmin ${g.email} stopped impersonation`,ipAddress:d.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||"unknown",userAgent:d.request.headers.get("user-agent")||"unknown",path:new URL(d.request.url).pathname,query:""});let m=l.secure?"; Secure":"",A=`; Path=${l.path}; HttpOnly; SameSite=${l.sameSite}${m}`,H=`; Path=${l.path}; HttpOnly; SameSite=${l.sameSite}${m}; Max-Age=0`,D=[`${l.accessTokenName}=${R}${A}; Max-Age=${l.accessTokenMaxAge}`,`${l.refreshTokenName}=${k}${A}; Max-Age=${l.refreshTokenMaxAge}`,`${l.sessionTokenName}=${N}${A}; Max-Age=${l.sessionTokenMaxAge}`,`nucleus_impersonating_as=deleted${H}`,`nucleus_godmin_id=deleted${H}`],E=JSON.stringify({success:!0,data:{godminUser:{id:g.id,email:g.email},sessionId:N}}),S=new Headers;S.set("Content-Type","application/json");for(let z of D)S.append("Set-Cookie",z);return new Response(E,{status:200,headers:S})},{detail:{tags:["Authentication"],summary:"Stop Impersonation",description:"Godmin: restore own session after impersonation"}}),f}var Bl=()=>{};import{Elysia as dA,t as Hr}from"elysia";function i_(n){let{captchaService:r,logger:t,basePath:o="/auth/captcha"}=n,a=new dA;if(!r.isEnabled())return a;return a.get(`${o}/generate`,async(c)=>{let{type:e,difficulty:i}=c.query,s=c.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||c.request.headers.get("x-real-ip")?.trim()||c.request.headers.get("cf-connecting-ip")?.trim()||"unknown",f=await r.generate(e,i,s);if(f.rateLimited)return c.set.status=429,{success:!1,message:f.message??"Too many requests. Please try again later."};return t.info("[CAPTCHA] Challenge generated via endpoint",{challengeId:f.challengeId,type:f.type,ipAddress:s}),{success:!0,data:{challengeId:f.challengeId,type:f.type,question:f.question,expiresAt:f.expiresAt,...f.imageData?{imageData:f.imageData}:{},...f.puzzleData?{puzzleData:{pieces:f.puzzleData.pieces}}:{}}}},{query:uA,detail:{tags:["Captcha"],summary:"Generate Captcha",description:"Generate a new captcha challenge"}}),a.post(`${o}/validate`,async(c)=>{let{challengeId:e,answer:i}=c.body,s=await r.validate(e,i);if(!s.valid)c.set.status=400;return s},{body:bA,detail:{tags:["Captcha"],summary:"Validate Captcha",description:"Validate a captcha answer"}}),a}var uA,bA;var s_=u(()=>{uA=Hr.Object({type:Hr.Optional(Hr.Union([Hr.Literal("math"),Hr.Literal("image"),Hr.Literal("puzzle"),Hr.Literal("text")])),difficulty:Hr.Optional(Hr.Union([Hr.Literal("easy"),Hr.Literal("medium"),Hr.Literal("hard")]))}),bA=Hr.Object({challengeId:Hr.String(),answer:Hr.String()})});function f_(n,r){let{db:t,logger:o}=n,a=r.route||"/auth/check";return(c)=>c.post(a,async(e)=>{let{body:i,request:s,set:f}=e,l=s.headers.get("x-user-id");if(!l)return f.status=401,{isSuccess:!1,message:"Unauthenticated",data:null};if(!t)return f.status=503,{isSuccess:!1,message:"Authorization service unavailable",data:null};let d=n.schemaTables;if(!d)return f.status=503,{isSuccess:!1,message:"Authorization tables not available",data:null};let{entity:b,method:w,fields:h,relations:_}=i;if(!b||!w)return f.status=400,{isSuccess:!1,message:"entity and method are required",data:null};let g=await _c({userId:l,method:w,entity:b,requestedFields:h,requestedRelations:_,db:t,schemaTables:d,logger:o});return{isSuccess:!0,message:g.authorized?"Authorized":"Forbidden",data:{authorized:g.authorized,reason:g.reason,allowedFields:g.allowedFields,allowedRelations:g.allowedRelations,scopeFilters:g.scopeFilters}}},{detail:{tags:["Auth"],summary:"Check authorization for a given entity and method",description:"Allows consumer/resource servers to perform full claim checks (including scope) against the IDP's authorization system."}})}var l_=u(()=>{zf()});import gA from"crypto";var{password:_A}=globalThis.Bun;async function Ao(n){return await _A.hash(n,{algorithm:"bcrypt",cost:10})}function fi(){return gA.randomBytes(32).toString("hex")}function Ja(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 d_(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 Xa=()=>{};import{sql as li}from"drizzle-orm";import{Elysia as mA,t as di}from"elysia";function ui(n){let{authConfig:r,registerConfig:t,emailService:o,appName:a}=n,{db:c,logger:e,usersTable:i}=r,s=new mA;if(!t.enabled||!t.emailVerification?.enabled)return s;let f="/verify-email",l="/resend-verification";return s.get(f,async(d)=>{if(!c||!i)return{success:!1,message:"Database not configured"};let b=d.query.token;if(!b)return{success:!1,message:"Verification token is required"};let w=await c.select().from(i).where(li`email_verification_token = ${b}`).limit(1);if(w.length===0)return e.warn("[AUTH] Email verification failed - invalid token"),{success:!1,message:"Invalid or expired verification token"};let h=w[0],_=h.emailVerificationTokenExpiresAt;if(_&&new Date>new Date(_))return e.warn("[AUTH] Email verification failed - token expired",{userId:h.id,email:h.email}),{success:!1,message:"Verification token has expired. Please request a new one."};if(await c.update(i).set({verifiedAt:new Date,emailVerificationToken:null,emailVerificationTokenExpiresAt:null}).where(li`id = ${h.id}`),e.info("[AUTH] Email verified successfully",{userId:h.id,email:h.email}),t.emailVerification?.templates?.welcome?.enabled&&o?.isAvailable())o.sendWelcomeEmail(h.email,h.email.split("@")[0]||"User",a||"Nucleus").catch((R)=>{e.error("[AUTH] Failed to send welcome email after verification",{email:h.email,error:R})});return{success:!0,message:"Email verified successfully. You can now log in.",data:{redirectUrl:t.emailVerification?.redirectUrl||"/login",verified:!0}}},{query:di.Object({token:di.String()}),detail:{tags:["Authentication"],summary:"Verify Email",description:"Verify user email address using the verification token"}}),s.post(l,async(d)=>{if(!c||!i)return{success:!1,message:"Database not configured"};if(!o?.isAvailable())return{success:!1,message:"Email service not available"};let{email:b}=d.body,w=await c.select().from(i).where(li`email = ${b}`).limit(1);if(w.length===0)return{success:!0,message:"If your email is registered, you will receive a verification email."};let h=w[0];if(h.verifiedAt)return{success:!1,message:"Email is already verified"};let _=t.emailVerification?.maxResendAttempts||3,g=h.emailVerificationAttempts||0;if(g>=_)return e.warn("[AUTH] Resend verification failed - max attempts reached",{email:b,attempts:g}),{success:!1,message:"Maximum resend attempts reached. Please contact support.",data:{maxAttemptsReached:!0,attemptsUsed:g,maxAttempts:_}};let R=t.emailVerification?.resendCooldown||"60s",k=Ja(R),M=h.emailVerificationSentAt;if(M){let E=Date.now()-new Date(M).getTime();if(E<k){let S=Math.ceil((k-E)/1000);return{success:!1,message:`Please wait ${S} seconds before requesting another verification email.`,data:{cooldownRemaining:S,canResendAt:new Date(Date.now()+S*1000).toISOString()}}}}let C=fi(),N=t.emailVerification?.tokenExpiresIn||"24h",m=new Date(Date.now()+Ja(N));await c.update(i).set({emailVerificationToken:C,emailVerificationTokenExpiresAt:m,emailVerificationSentAt:new Date,emailVerificationAttempts:g+1}).where(li`id = ${h.id}`);let H=`${(t.emailVerification?.redirectUrl||"http://localhost:3000/login").replace("/login","/verify-email")}?token=${C}`,D=await o.sendVerificationEmail(b,b.split("@")[0]||"User",H,a||"Nucleus");if(D.success)return e.info("[AUTH] Verification email resent",{email:b}),{success:!0,message:"Verification email sent. Please check your inbox.",data:{cooldownSeconds:Math.ceil(k/1000),canResendAt:new Date(Date.now()+k).toISOString(),attemptsRemaining:_-(g+1)}};return e.error("[AUTH] Failed to resend verification email",{email:b,error:D.error}),{success:!1,message:"Failed to send verification email. Please try again later."}},{body:di.Object({email:di.String({format:"email"})}),detail:{tags:["Authentication"],summary:"Resend Verification Email",description:"Resend the email verification link to the user"}}),s}var Wl=u(()=>{Xa()});import u_ from"crypto";function La(){return u_.randomBytes(32).toString("hex")}function gt(n){return u_.createHash("sha256").update(n).digest("hex")}function Va(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 Yc=()=>{};import{eq as wA}from"drizzle-orm";import{Elysia as hA,t as bi}from"elysia";function gi(n,r,t,o,a,c){let{db:e,logger:i,usersTable:s}=n,f=r.route||"/auth/invite",l=r.tokenExpiresIn||"7d",d=r.redirectUrl||"",b=new hA;if(!r.enabled)return b;if(b.post(f,async(w)=>{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:h}=w.body,_=await e.select().from(s).where(wA(s.email,h)).limit(1),g;if(_.length>0){let m=_[0];if(m.verifiedAt||m.password)return i.warn("[AUTH] Invite failed - user already verified",{email:h}),{success:!1,message:"User with this email is already verified"};g=m.id,i.info("[AUTH] Resending invitation to existing unverified user",{userId:g,email:h})}else{let m={email:h,password:null,emailVerified:!1,isLocked:!1,createdAt:new Date,updatedAt:new Date},H=(await e.insert(s).values(m).returning())[0];if(!H)return i.error("[AUTH] Failed to create invited user",{email:h}),{success:!1,message:"Failed to create user"};g=H.id,i.info("[AUTH] Invited user created",{userId:g,email:h})}let R=La(),k=gt(R),M=new Date(Date.now()+Va(l));await o({userId:g,email:h,tokenHash:k,expiresAt:M});let C=d?`${d}?token=${R}&invite=true`:`/auth/magic-link/verify?token=${R}`,N=await t.sendInvitationEmail(h,C,a||"Nucleus");if(!N.success)return i.error("[AUTH] Failed to send invitation email",{email:h,error:N.error}),{success:!0,message:"User created but failed to send invitation email",data:{id:g,email:h}};return i.info("[AUTH] Invitation email sent",{email:h,userId:g}),{success:!0,message:"Invitation sent successfully",data:{id:g,email:h}}},{body:$A,detail:{tags:["Authentication"],summary:"Invite User",description:"Invite a new user by sending them an email with a magic link to set their password"}}),c)b.post(`${f}/verify`,async(w)=>{let{token:h}=w.body;if(!h)return{success:!1,message:"Token is required"};let _=gt(h),g=await c(_);if(!g)return i.warn("[AUTH] Invalid invite verify token"),{success:!1,message:"Invalid or expired token"};if(new Date>g.expiresAt)return i.warn("[AUTH] Expired invite verify token",{email:g.email}),{success:!1,message:"Invalid or expired token"};return i.info("[AUTH] Invite token verified (not consumed)",{email:g.email,userId:g.userId}),{success:!0,data:{userId:g.userId,email:g.email}}},{body:bi.Object({token:bi.String()}),detail:{tags:["Authentication"],summary:"Verify Invite Token",description:"Validate an invite token without consuming it. Returns user info if valid."}});return b}var $A;var Yl=u(()=>{Yc();$A=bi.Object({email:bi.String({format:"email"})})});import{t as rr}from"elysia";var Jl,AA;var Xl=u(()=>{Jl=rr.Object({email:rr.String({format:"email"}),password:rr.String({minLength:1}),rememberMe:rr.Optional(rr.Boolean()),captchaId:rr.Optional(rr.String()),captchaAnswer:rr.Optional(rr.String())}),AA=rr.Object({success:rr.Boolean(),message:rr.Optional(rr.String()),data:rr.Optional(rr.Object({user:rr.Object({id:rr.String(),email:rr.String()}),accessToken:rr.String(),refreshToken:rr.String()}))})});var{password:RA}=globalThis.Bun;async function _i(n,r){try{return await RA.verify(n,r)}catch{return!1}}function mi(n,r){let t=n.toLowerCase(),o=["headlesschrome","headless","phantomjs","nightmare","selenium","webdriver","puppeteer","playwright"],a=["bot","crawler","spider","scraper","curl","wget","python-requests","python-urllib","java/","httpclient","go-http-client","node-fetch","axios","postman","insomnia","httpie"],c=o.some((_)=>t.includes(_)),e=a.some((_)=>t.includes(_)),i=c||e,s=[];if(c)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 f="unknown";if(t.includes("mobile")||t.includes("android")&&!t.includes("tablet"))f="mobile";else if(t.includes("tablet")||t.includes("ipad"))f="tablet";else if(t.includes("windows")||t.includes("macintosh")||t.includes("linux"))f="desktop";let l,d;if(c)l="Headless Browser";else if(e)l="Bot/Crawler";else if(t.includes("chrome")&&!t.includes("edg")){l="Chrome";let _=n.match(/Chrome\/(\d+\.\d+)/i);if(_?.[1])d=_[1]}else if(t.includes("firefox")){l="Firefox";let _=n.match(/Firefox\/(\d+\.\d+)/i);if(_?.[1])d=_[1]}else if(t.includes("safari")&&!t.includes("chrome")){l="Safari";let _=n.match(/Version\/(\d+\.\d+)/i);if(_?.[1])d=_[1]}else if(t.includes("edg")){l="Edge";let _=n.match(/Edg\/(\d+\.\d+)/i);if(_?.[1])d=_[1]}let b,w;if(t.includes("windows nt 10"))b="Windows",w="10/11";else if(t.includes("windows nt"))b="Windows";else if(t.includes("mac os x")){b="macOS";let _=n.match(/Mac OS X (\d+[._]\d+)/i);if(_?.[1])w=_[1].replace("_",".")}else if(t.includes("android")){b="Android";let _=n.match(/Android (\d+\.?\d*)/i);if(_?.[1])w=_[1]}else if(t.includes("iphone")||t.includes("ipad")){b="iOS";let _=n.match(/OS (\d+[._]\d+)/i);if(_?.[1])w=_[1].replace("_",".")}else if(t.includes("linux"))b="Linux";return{deviceName:l&&b?`${l} on ${b}`:"Unknown Device",deviceType:f,browserName:l,browserVersion:d,osName:b,osVersion:w,ipAddress:r,userAgent:n,locationCountry:void 0,locationCity:void 0,isHeadless:c,isBot:e,isSuspicious:i,suspiciousPatterns:s}}var wi=()=>{};import{eq as Ll}from"drizzle-orm";import{Elysia as kA}from"elysia";function hi(n,r,t,o,a,c,e,i,s){let{db:f,logger:l,usersTable:d}=n,b=r.route||"/auth/login",w={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||"/"},h=new kA;if(!r.enabled)return h;return h.post(b,async(_)=>{if(!f||!d)return{success:!1,message:"Database not configured"};let{email:g,password:R,rememberMe:k,captchaId:M,captchaAnswer:C}=_.body;if(s?.isEnabled()){if(!M||!C)return _.set.status=400,{success:!1,message:"Captcha is required"};let T=await s.validate(M,C);if(!T.valid)return _.set.status=400,{success:!1,message:T.message||"Invalid captcha",attemptsRemaining:T.attemptsRemaining}}let m=(await f.select().from(d).where(Ll(d.email,g)).limit(1))[0],A=new URL(_.request.url),H=_.request.headers.get("cf-connecting-ip")?.trim()||_.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||_.request.headers.get("x-real-ip")?.trim()||"unknown",D=_.request.headers.get("user-agent")||"unknown";if(!m)return l.warn("[AUTH] Login failed - user not found",{email:g}),await l.audit({entityName:"users",operation:"LOGIN_FAILED",summary:`Login failed: user not found (${g})`,ipAddress:H,userAgent:D,path:A.pathname,query:A.search}),{success:!1,message:"Invalid email or password"};if(m.isLocked)return l.warn("[AUTH] Login failed - account locked",{email:g,userId:m.id}),await l.audit({entityName:"users",entityId:m.id,operation:"LOGIN_FAILED",userId:m.id,summary:`Login failed: account locked (${g})`,ipAddress:H,userAgent:D,path:A.pathname,query:A.search}),{success:!1,message:"Account is locked"};if(!await _i(R,m.password)){let T=(m.failedLoginAttempts||0)+1;return await f.update(d).set({failedLoginAttempts:T,isLocked:T>=5,lockedUntil:T>=5?new Date(Date.now()+1800000):null}).where(Ll(d.id,m.id)),l.warn("[AUTH] Login failed - invalid password",{email:g,failedAttempts:T}),await l.audit({entityName:"users",entityId:m.id,operation:"LOGIN_FAILED",userId:m.id,summary:`Login failed: invalid password (${g}, attempt ${T})`,ipAddress:H,userAgent:D,path:A.pathname,query:A.search}),{success:!1,message:"Invalid email or password"}}await f.update(d).set({failedLoginAttempts:0,lastLoginAt:new Date,loginCount:(m.loginCount||0)+1}).where(Ll(d.id,m.id));let S={};_.request.headers.forEach((T,Jn)=>{S[Jn]=T}),l.info("[AUTH] Login request headers",{headers:S});let z=_.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim(),U=(T)=>!T||T==="127.0.0.1"||T==="::1"||T==="localhost"||T.startsWith("10.")||T.startsWith("192.168.")||T.startsWith("172."),P=_.request.headers.get("cf-connecting-ip")?.trim()||_.request.headers.get("true-client-ip")?.trim()||(!U(z)?z:void 0)||_.request.headers.get("x-real-ip")?.trim()||_.request.headers.get("x-client-ip")?.trim()||z||"127.0.0.1",p=_.request.headers.get("user-agent")||"Unknown Browser";l.info("[AUTH] Parsed device info",{ipAddress:P,userAgent:p});let K=mi(p,P);try{if(!U(P)){let T=await fetch(`http://ip-api.com/json/${P}?fields=country,city`);if(T.ok){let Jn=await T.json();if(Jn.country)K.locationCountry=Jn.country;if(Jn.city)K.locationCity=Jn.city}}}catch{}let B=[],L=[],Y=n.userRolesTable,Q=n.rolesTable,V=n.roleClaimsTable,q=n.claimsTable;if(f&&Y&&Q)try{let{eq:T,inArray:Jn}=await import("drizzle-orm"),qn=(await f.select().from(Y).where(T(Y.userId,m.id))).map((gr)=>gr.roleId);if(qn.length>0){if(B=(await f.select().from(Q).where(Jn(Q.id,qn))).map((Ar)=>Ar.name),V&&q){let Ar=await f.select().from(V).innerJoin(q,T(V.claimId,q.id)).where(Jn(V.roleId,qn)),Mt=new Set;for(let ir of Ar){let lr=ir.claims?.action;if(lr)Mt.add(lr)}L=Array.from(Mt)}}}catch{}let F=t(m.id,B.length>0?B:void 0,L.length>0?L:void 0),v=o(m.id),dn={userId:m.id,deviceInfo:K,loginMethod:"password",rememberMe:k},on=await a(dn);if(c)await c(on,dn);l.info("[AUTH] Login successful",{userId:m.id,email:g,rememberMe:k}),await l.audit({entityName:"users",entityId:m.id,operation:"LOGIN",userId:m.id,summary:`${g} logged in successfully`,ipAddress:P,userAgent:p,path:A.pathname,query:A.search});let un={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}},en=w.secure?"; Secure":"",Yn=`; Path=${w.path}; HttpOnly; SameSite=${w.sameSite}${en}`,nr=[];if(un.accessToken.setHeadersEnabled)nr.push(`${w.accessTokenName}=${F}${Yn}; Max-Age=${w.accessTokenMaxAge}`);if(un.refreshToken.setHeadersEnabled)nr.push(`${w.refreshTokenName}=${v}${Yn}; Max-Age=${w.refreshTokenMaxAge}`);if(un.sessionToken.setHeadersEnabled)nr.push(`${w.sessionTokenName}=${on}${Yn}; Max-Age=${w.sessionTokenMaxAge}`);_.set.headers["x-session-id"]=on;let gn={user:{id:m.id,email:m.email}};if(un.accessToken.returnJson)gn.accessToken=F;if(un.refreshToken.returnJson)gn.refreshToken=v;if(un.sessionToken.returnJson)gn.sessionId=on;let et=JSON.stringify({success:!0,data:gn}),_n=new Headers;_n.set("Content-Type","application/json"),_n.set("x-session-id",on);for(let T of nr)_n.append("Set-Cookie",T);return new Response(et,{status:200,headers:_n})},{body:Jl,detail:{tags:["Authentication"],summary:"Login",description:"Authenticate user with email and password"}}),h}var Vl=u(()=>{Xl();wi();Xl()});function b_(){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 $i}from"elysia";var EA;var g_=u(()=>{EA=$i.Object({success:$i.Boolean(),message:$i.Optional($i.String())})});import{Elysia as SA}from"elysia";function Ai(n,r,t,o){let{logger:a}=n,c=r.route||"/auth/logout",e=new SA;if(!r.enabled)return e;return e.post(c,async(i)=>{let s=i.request.headers.get("x-session-id"),f=i.request.headers.get("x-user-id");if(s){if(await t(s),o)await o(s,"user_logout")}let l=b_();for(let[b,w]of Object.entries(l))i.set.headers[b]=w;a.info("[AUTH] Logout successful",{userId:f,sessionId:s});let d=new URL(i.request.url);return a.audit({entityName:"users",entityId:f||void 0,operation:"LOGOUT",userId:f||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:d.pathname,query:d.search}),{success:!0,message:"Logged out successfully"}},{detail:{tags:["Authentication"],summary:"Logout",description:"Logout and invalidate session"}}),e}var Cl=u(()=>{g_()});var Er={};co(Er,{IsUndefined:()=>Zn,IsUint8Array:()=>vt,IsSymbol:()=>Nl,IsString:()=>Ln,IsRegExp:()=>Xc,IsObject:()=>zn,IsNumber:()=>Or,IsNull:()=>Ol,IsIterator:()=>Gl,IsFunction:()=>Pl,IsDate:()=>Ko,IsBoolean:()=>Kt,IsBigInt:()=>Jc,IsAsyncIterator:()=>Ql,IsArray:()=>In,HasPropertyKey:()=>Ri});function Ri(n,r){return r in n}function Ql(n){return zn(n)&&!In(n)&&!vt(n)&&Symbol.asyncIterator in n}function In(n){return Array.isArray(n)}function Jc(n){return typeof n==="bigint"}function Kt(n){return typeof n==="boolean"}function Ko(n){return n instanceof globalThis.Date}function Pl(n){return typeof n==="function"}function Gl(n){return zn(n)&&!In(n)&&!vt(n)&&Symbol.iterator in n}function Ol(n){return n===null}function Or(n){return typeof n==="number"}function zn(n){return typeof n==="object"&&n!==null}function Xc(n){return n instanceof globalThis.RegExp}function Ln(n){return typeof n==="string"}function Nl(n){return typeof n==="symbol"}function vt(n){return n instanceof globalThis.Uint8Array}function Zn(n){return n===void 0}function MA(n){return n.map((r)=>ki(r))}function DA(n){return new Date(n.getTime())}function HA(n){return new Uint8Array(n)}function zA(n){return new RegExp(n.source,n.flags)}function UA(n){let r={};for(let t of Object.getOwnPropertyNames(n))r[t]=ki(n[t]);for(let t of Object.getOwnPropertySymbols(n))r[t]=ki(n[t]);return r}function ki(n){return In(n)?MA(n):Ko(n)?DA(n):vt(n)?HA(n):Xc(n)?zA(n):zn(n)?UA(n):n}function Qn(n){return ki(n)}var Br=()=>{};function Ca(n,r){return r===void 0?Qn(n):Qn({...r,...n})}var Ei=u(()=>{Br()});var xl=u(()=>{Ei();Br()});function __(n){return n!==null&&typeof n==="object"}function m_(n){return globalThis.Array.isArray(n)&&!globalThis.ArrayBuffer.isView(n)}function w_(n){return n===void 0}function h_(n){return typeof n==="number"}var $_=()=>{};var Si;var A_=u(()=>{$_();(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=__(e);return n.AllowArrayObject?i:i&&!m_(e)}n.IsObjectLike=t;function o(e){return t(e)&&!(e instanceof Date)&&!(e instanceof Uint8Array)}n.IsRecordLike=o;function a(e){return n.AllowNaN?h_(e):Number.isFinite(e)}n.IsNumberLike=a;function c(e){let i=w_(e);return n.AllowNullVoid?i||e===null:i}n.IsVoidLike=c})(Si||(Si={}))});function BA(n){return globalThis.Object.freeze(n).map((r)=>Lc(r))}function WA(n){return n}function YA(n){return n}function JA(n){return n}function XA(n){let r={};for(let t of Object.getOwnPropertyNames(n))r[t]=Lc(n[t]);for(let t of Object.getOwnPropertySymbols(n))r[t]=Lc(n[t]);return globalThis.Object.freeze(r)}function Lc(n){return In(n)?BA(n):Ko(n)?WA(n):vt(n)?YA(n):Xc(n)?JA(n):zn(n)?XA(n):n}var R_=()=>{};function J(n,r){let t=r!==void 0?{...r,...n}:n;switch(Si.InstanceMode){case"freeze":return Lc(t);case"clone":return Qn(t);default:return t}}var y=u(()=>{A_();R_();Br()});var Tt=u(()=>{y()});var mr;var k_=u(()=>{mr=class mr extends Error{constructor(n){super(n)}}});var Yt=u(()=>{k_()});var tr,_t,wr,yr,O;var Vc=u(()=>{tr=Symbol.for("TypeBox.Transform"),_t=Symbol.for("TypeBox.Readonly"),wr=Symbol.for("TypeBox.Optional"),yr=Symbol.for("TypeBox.Hint"),O=Symbol.for("TypeBox.Kind")});var rn=u(()=>{Vc()});function Qa(n){return zn(n)&&n[_t]==="Readonly"}function Wr(n){return zn(n)&&n[wr]==="Optional"}function ql(n){return mn(n,"Any")}function Fl(n){return mn(n,"Argument")}function mt(n){return mn(n,"Array")}function vo(n){return mn(n,"AsyncIterator")}function To(n){return mn(n,"BigInt")}function It(n){return mn(n,"Boolean")}function wt(n){return mn(n,"Computed")}function ht(n){return mn(n,"Constructor")}function LA(n){return mn(n,"Date")}function $t(n){return mn(n,"Function")}function At(n){return mn(n,"Integer")}function Nn(n){return mn(n,"Intersect")}function Io(n){return mn(n,"Iterator")}function mn(n,r){return zn(n)&&O in n&&n[O]===r}function Mi(n){return Kt(n)||Or(n)||Ln(n)}function Nr(n){return mn(n,"Literal")}function xr(n){return mn(n,"MappedKey")}function Pn(n){return mn(n,"MappedResult")}function Ro(n){return mn(n,"Never")}function VA(n){return mn(n,"Not")}function Cc(n){return mn(n,"Null")}function Rt(n){return mn(n,"Number")}function yn(n){return mn(n,"Object")}function Zo(n){return mn(n,"Promise")}function yo(n){return mn(n,"Record")}function jn(n){return mn(n,"Ref")}function jl(n){return mn(n,"RegExp")}function Zt(n){return mn(n,"String")}function Qc(n){return mn(n,"Symbol")}function qr(n){return mn(n,"TemplateLiteral")}function CA(n){return mn(n,"This")}function ko(n){return zn(n)&&tr in n}function Fr(n){return mn(n,"Tuple")}function Pc(n){return mn(n,"Undefined")}function wn(n){return mn(n,"Union")}function QA(n){return mn(n,"Uint8Array")}function PA(n){return mn(n,"Unknown")}function GA(n){return mn(n,"Unsafe")}function OA(n){return mn(n,"Void")}function NA(n){return zn(n)&&O in n&&Ln(n[O])}function jr(n){return ql(n)||Fl(n)||mt(n)||It(n)||To(n)||vo(n)||wt(n)||ht(n)||LA(n)||$t(n)||At(n)||Nn(n)||Io(n)||Nr(n)||xr(n)||Pn(n)||Ro(n)||VA(n)||Cc(n)||Rt(n)||yn(n)||Zo(n)||yo(n)||jn(n)||jl(n)||Zt(n)||Qc(n)||qr(n)||CA(n)||Fr(n)||Pc(n)||wn(n)||QA(n)||PA(n)||GA(n)||OA(n)||NA(n)}var Rn=u(()=>{rn()});var $={};co($,{TypeGuardUnknownTypeError:()=>E_,IsVoid:()=>lm,IsUnsafe:()=>fm,IsUnknown:()=>sm,IsUnionLiteral:()=>IA,IsUnion:()=>vl,IsUndefined:()=>em,IsUint8Array:()=>im,IsTuple:()=>cm,IsTransform:()=>am,IsThis:()=>om,IsTemplateLiteral:()=>tm,IsSymbol:()=>rm,IsString:()=>nm,IsSchema:()=>br,IsRegExp:()=>y_,IsRef:()=>Z_,IsRecursive:()=>TA,IsRecord:()=>I_,IsReadonly:()=>jA,IsProperties:()=>Di,IsPromise:()=>T_,IsOptional:()=>pA,IsObject:()=>v_,IsNumber:()=>K_,IsNull:()=>p_,IsNot:()=>j_,IsNever:()=>F_,IsMappedResult:()=>q_,IsMappedKey:()=>x_,IsLiteralValue:()=>N_,IsLiteralString:()=>G_,IsLiteralNumber:()=>O_,IsLiteralBoolean:()=>vA,IsLiteral:()=>Oc,IsKindOf:()=>ln,IsKind:()=>dm,IsIterator:()=>P_,IsIntersect:()=>Q_,IsInteger:()=>C_,IsImport:()=>KA,IsFunction:()=>V_,IsDate:()=>L_,IsConstructor:()=>X_,IsComputed:()=>J_,IsBoolean:()=>Y_,IsBigInt:()=>W_,IsAsyncIterator:()=>B_,IsArray:()=>U_,IsArgument:()=>z_,IsAny:()=>H_});function S_(n){try{return new RegExp(n),!0}catch{return!1}}function pl(n){if(!Ln(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 M_(n){return Kl(n)||br(n)}function Gc(n){return Zn(n)||Jc(n)}function Vn(n){return Zn(n)||Or(n)}function Kl(n){return Zn(n)||Kt(n)}function Un(n){return Zn(n)||Ln(n)}function qA(n){return Zn(n)||Ln(n)&&pl(n)&&S_(n)}function FA(n){return Zn(n)||Ln(n)&&pl(n)}function D_(n){return Zn(n)||br(n)}function jA(n){return zn(n)&&n[_t]==="Readonly"}function pA(n){return zn(n)&&n[wr]==="Optional"}function H_(n){return ln(n,"Any")&&Un(n.$id)}function z_(n){return ln(n,"Argument")&&Or(n.index)}function U_(n){return ln(n,"Array")&&n.type==="array"&&Un(n.$id)&&br(n.items)&&Vn(n.minItems)&&Vn(n.maxItems)&&Kl(n.uniqueItems)&&D_(n.contains)&&Vn(n.minContains)&&Vn(n.maxContains)}function B_(n){return ln(n,"AsyncIterator")&&n.type==="AsyncIterator"&&Un(n.$id)&&br(n.items)}function W_(n){return ln(n,"BigInt")&&n.type==="bigint"&&Un(n.$id)&&Gc(n.exclusiveMaximum)&&Gc(n.exclusiveMinimum)&&Gc(n.maximum)&&Gc(n.minimum)&&Gc(n.multipleOf)}function Y_(n){return ln(n,"Boolean")&&n.type==="boolean"&&Un(n.$id)}function J_(n){return ln(n,"Computed")&&Ln(n.target)&&In(n.parameters)&&n.parameters.every((r)=>br(r))}function X_(n){return ln(n,"Constructor")&&n.type==="Constructor"&&Un(n.$id)&&In(n.parameters)&&n.parameters.every((r)=>br(r))&&br(n.returns)}function L_(n){return ln(n,"Date")&&n.type==="Date"&&Un(n.$id)&&Vn(n.exclusiveMaximumTimestamp)&&Vn(n.exclusiveMinimumTimestamp)&&Vn(n.maximumTimestamp)&&Vn(n.minimumTimestamp)&&Vn(n.multipleOfTimestamp)}function V_(n){return ln(n,"Function")&&n.type==="Function"&&Un(n.$id)&&In(n.parameters)&&n.parameters.every((r)=>br(r))&&br(n.returns)}function KA(n){return ln(n,"Import")&&Ri(n,"$defs")&&zn(n.$defs)&&Di(n.$defs)&&Ri(n,"$ref")&&Ln(n.$ref)&&n.$ref in n.$defs}function C_(n){return ln(n,"Integer")&&n.type==="integer"&&Un(n.$id)&&Vn(n.exclusiveMaximum)&&Vn(n.exclusiveMinimum)&&Vn(n.maximum)&&Vn(n.minimum)&&Vn(n.multipleOf)}function Di(n){return zn(n)&&Object.entries(n).every(([r,t])=>pl(r)&&br(t))}function Q_(n){return ln(n,"Intersect")&&(Ln(n.type)&&n.type!=="object"?!1:!0)&&In(n.allOf)&&n.allOf.every((r)=>br(r)&&!am(r))&&Un(n.type)&&(Kl(n.unevaluatedProperties)||D_(n.unevaluatedProperties))&&Un(n.$id)}function P_(n){return ln(n,"Iterator")&&n.type==="Iterator"&&Un(n.$id)&&br(n.items)}function ln(n,r){return zn(n)&&O in n&&n[O]===r}function G_(n){return Oc(n)&&Ln(n.const)}function O_(n){return Oc(n)&&Or(n.const)}function vA(n){return Oc(n)&&Kt(n.const)}function Oc(n){return ln(n,"Literal")&&Un(n.$id)&&N_(n.const)}function N_(n){return Kt(n)||Or(n)||Ln(n)}function x_(n){return ln(n,"MappedKey")&&In(n.keys)&&n.keys.every((r)=>Or(r)||Ln(r))}function q_(n){return ln(n,"MappedResult")&&Di(n.properties)}function F_(n){return ln(n,"Never")&&zn(n.not)&&Object.getOwnPropertyNames(n.not).length===0}function j_(n){return ln(n,"Not")&&br(n.not)}function p_(n){return ln(n,"Null")&&n.type==="null"&&Un(n.$id)}function K_(n){return ln(n,"Number")&&n.type==="number"&&Un(n.$id)&&Vn(n.exclusiveMaximum)&&Vn(n.exclusiveMinimum)&&Vn(n.maximum)&&Vn(n.minimum)&&Vn(n.multipleOf)}function v_(n){return ln(n,"Object")&&n.type==="object"&&Un(n.$id)&&Di(n.properties)&&M_(n.additionalProperties)&&Vn(n.minProperties)&&Vn(n.maxProperties)}function T_(n){return ln(n,"Promise")&&n.type==="Promise"&&Un(n.$id)&&br(n.item)}function I_(n){return ln(n,"Record")&&n.type==="object"&&Un(n.$id)&&M_(n.additionalProperties)&&zn(n.patternProperties)&&((r)=>{let t=Object.getOwnPropertyNames(r.patternProperties);return t.length===1&&S_(t[0])&&zn(r.patternProperties)&&br(r.patternProperties[t[0]])})(n)}function TA(n){return zn(n)&&yr in n&&n[yr]==="Recursive"}function Z_(n){return ln(n,"Ref")&&Un(n.$id)&&Ln(n.$ref)}function y_(n){return ln(n,"RegExp")&&Un(n.$id)&&Ln(n.source)&&Ln(n.flags)&&Vn(n.maxLength)&&Vn(n.minLength)}function nm(n){return ln(n,"String")&&n.type==="string"&&Un(n.$id)&&Vn(n.minLength)&&Vn(n.maxLength)&&qA(n.pattern)&&FA(n.format)}function rm(n){return ln(n,"Symbol")&&n.type==="symbol"&&Un(n.$id)}function tm(n){return ln(n,"TemplateLiteral")&&n.type==="string"&&Ln(n.pattern)&&n.pattern[0]==="^"&&n.pattern[n.pattern.length-1]==="$"}function om(n){return ln(n,"This")&&Un(n.$id)&&Ln(n.$ref)}function am(n){return zn(n)&&tr in n}function cm(n){return ln(n,"Tuple")&&n.type==="array"&&Un(n.$id)&&Or(n.minItems)&&Or(n.maxItems)&&n.minItems===n.maxItems&&(Zn(n.items)&&Zn(n.additionalItems)&&n.minItems===0||In(n.items)&&n.items.every((r)=>br(r)))}function em(n){return ln(n,"Undefined")&&n.type==="undefined"&&Un(n.$id)}function IA(n){return vl(n)&&n.anyOf.every((r)=>G_(r)||O_(r))}function vl(n){return ln(n,"Union")&&Un(n.$id)&&zn(n)&&In(n.anyOf)&&n.anyOf.every((r)=>br(r))}function im(n){return ln(n,"Uint8Array")&&n.type==="Uint8Array"&&Un(n.$id)&&Vn(n.minByteLength)&&Vn(n.maxByteLength)}function sm(n){return ln(n,"Unknown")&&Un(n.$id)}function fm(n){return ln(n,"Unsafe")}function lm(n){return ln(n,"Void")&&n.type==="void"&&Un(n.$id)}function dm(n){return zn(n)&&O in n&&Ln(n[O])&&!xA.includes(n[O])}function br(n){return zn(n)&&(H_(n)||z_(n)||U_(n)||Y_(n)||W_(n)||B_(n)||J_(n)||X_(n)||L_(n)||V_(n)||C_(n)||Q_(n)||P_(n)||Oc(n)||x_(n)||q_(n)||F_(n)||j_(n)||p_(n)||K_(n)||v_(n)||T_(n)||I_(n)||Z_(n)||y_(n)||nm(n)||rm(n)||tm(n)||om(n)||cm(n)||em(n)||vl(n)||im(n)||sm(n)||fm(n)||lm(n)||dm(n))}var E_,xA;var um=u(()=>{rn();Yt();E_=class E_ extends mr{};xA=["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 Tl=u(()=>{Rn();um()});var bm=()=>{};var gm="(true|false)",Hi="(0|[1-9][0-9]*)",_m="(.*)",Eo="^(0|[1-9][0-9]*)$",So="^(.*)$",mm="^(?!.*)$";var Nc=()=>{};var wm=()=>{};var hm=()=>{};var $m=u(()=>{wm();hm()});function Am(n,r){return n.includes(r)}function Rm(n){return[...new Set(n)]}function nR(n,r){return n.filter((t)=>r.includes(t))}function rR(n,r){return n.reduce((t,o)=>{return nR(t,o)},r)}function km(n){return n.length===1?n[0]:n.length>1?rR(n.slice(1),n[0]):[]}function Em(n){let r=[];for(let t of n)r.push(...t);return r}var xc=()=>{};function Mo(n){return J({[O]:"Any"},n)}var Sm=u(()=>{Tt();rn()});var qc=u(()=>{Sm()});function Pa(n,r){return J({[O]:"Array",type:"array",items:n},r)}var Mm=u(()=>{y();rn()});var Fc=u(()=>{Mm()});function Dm(n){return J({[O]:"Argument",index:n})}var Hm=u(()=>{y();rn()});var Il=u(()=>{Hm()});function Ga(n,r){return J({[O]:"AsyncIterator",type:"AsyncIterator",items:n},r)}var zm=u(()=>{rn();y()});var jc=u(()=>{zm()});function Cn(n,r,t){return J({[O]:"Computed",target:n,parameters:r},t)}var Um=u(()=>{Tt();Vc()});var Do=u(()=>{Um()});function tR(n,r){let{[r]:t,...o}=n;return o}function xn(n,r){return r.reduce((t,o)=>tR(t,o),n)}var no=()=>{};function hn(n){return J({[O]:"Never",not:{}},n)}var Bm=u(()=>{y();rn()});var hr=u(()=>{Bm()});var Wm=()=>{};function kn(n){return J({[O]:"MappedResult",properties:n})}var Zl=u(()=>{y();rn()});function Oa(n,r,t){return J({[O]:"Constructor",type:"Constructor",parameters:n,returns:r},t)}var Ym=u(()=>{y();rn()});var pc=u(()=>{Ym()});function Jt(n,r,t){return J({[O]:"Function",type:"Function",parameters:n,returns:r},t)}var Jm=u(()=>{y();rn()});var na=u(()=>{Jm()});function Kc(n,r){return J({[O]:"Union",anyOf:n},r)}var yl=u(()=>{y();rn()});function oR(n){return n.some((r)=>Wr(r))}function Xm(n){return n.map((r)=>Wr(r)?aR(r):r)}function aR(n){return xn(n,[wr])}function cR(n,r){return oR(n)?Sr(Kc(Xm(n),r)):Kc(Xm(n),r)}function Xt(n,r){return n.length===1?J(n[0],r):n.length===0?hn(r):cR(n,r)}var Lm=u(()=>{y();rn();no();hr();ro();yl();Rn()});var Vm=()=>{};function Dn(n,r){return n.length===0?hn(r):n.length===1?J(n[0],r):Kc(n,r)}var Cm=u(()=>{hr();y();yl()});var or=u(()=>{Lm();Vm();Cm()});function eR(n){return n.replace(/\\\$/g,"$").replace(/\\\*/g,"*").replace(/\\\^/g,"^").replace(/\\\|/g,"|").replace(/\\\(/g,"(").replace(/\\\)/g,")")}function r0(n,r,t){return n[r]===t&&n.charCodeAt(r-1)!==92}function to(n,r){return r0(n,r,"(")}function vc(n,r){return r0(n,r,")")}function Qm(n,r){return r0(n,r,"|")}function iR(n){if(!(to(n,0)&&vc(n,n.length-1)))return!1;let r=0;for(let t=0;t<n.length;t++){if(to(n,t))r+=1;if(vc(n,t))r-=1;if(r===0&&t!==n.length-1)return!1}return!0}function sR(n){return n.slice(1,n.length-1)}function fR(n){let r=0;for(let t=0;t<n.length;t++){if(to(n,t))r+=1;if(vc(n,t))r-=1;if(Qm(n,t)&&r===0)return!0}return!1}function lR(n){for(let r=0;r<n.length;r++)if(to(n,r))return!0;return!1}function dR(n){let[r,t]=[0,0],o=[];for(let c=0;c<n.length;c++){if(to(n,c))r+=1;if(vc(n,c))r-=1;if(Qm(n,c)&&r===0){let e=n.slice(t,c);if(e.length>0)o.push(Na(e));t=c+1}}let a=n.slice(t);if(a.length>0)o.push(Na(a));if(o.length===0)return{type:"const",const:""};if(o.length===1)return o[0];return{type:"or",expr:o}}function uR(n){function r(a,c){if(!to(a,c))throw new n0("TemplateLiteralParser: Index must point to open parens");let e=0;for(let i=c;i<a.length;i++){if(to(a,i))e+=1;if(vc(a,i))e-=1;if(e===0)return[c,i]}throw new n0("TemplateLiteralParser: Unclosed group parens in expression")}function t(a,c){for(let e=c;e<a.length;e++)if(to(a,e))return[c,e];return[c,a.length]}let o=[];for(let a=0;a<n.length;a++)if(to(n,a)){let[c,e]=r(n,a),i=n.slice(c,e+1);o.push(Na(i)),a=e}else{let[c,e]=t(n,a),i=n.slice(c,e);if(i.length>0)o.push(Na(i));a=e-1}return o.length===0?{type:"const",const:""}:o.length===1?o[0]:{type:"and",expr:o}}function Na(n){return iR(n)?Na(sR(n)):fR(n)?dR(n):lR(n)?uR(n):{type:"const",const:eR(n)}}function xa(n){return Na(n.slice(1,n.length-1))}var n0;var zi=u(()=>{Yt();n0=class n0 extends mr{}});function bR(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 gR(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 _R(n){return n.type==="const"&&n.const===".*"}function ra(n){return bR(n)||_R(n)?!1:gR(n)?!0:n.type==="and"?n.expr.every((r)=>ra(r)):n.type==="or"?n.expr.every((r)=>ra(r)):n.type==="const"?!0:(()=>{throw new Pm("Unknown expression type")})()}function Gm(n){let r=xa(n.pattern);return ra(r)}var Pm;var t0=u(()=>{zi();Yt();Pm=class Pm extends mr{}});function*Nm(n){if(n.length===1)return yield*n[0];for(let r of n[0])for(let t of Nm(n.slice(1)))yield`${r}${t}`}function*mR(n){return yield*Nm(n.expr.map((r)=>[...Tc(r)]))}function*wR(n){for(let r of n.expr)yield*Tc(r)}function*hR(n){return yield n.const}function*Tc(n){return n.type==="and"?yield*mR(n):n.type==="or"?yield*wR(n):n.type==="const"?yield*hR(n):(()=>{throw new Om("Unknown expression")})()}function Ui(n){let r=xa(n.pattern);return ra(r)?[...Tc(r)]:[]}var Om;var o0=u(()=>{t0();zi();Yt();Om=class Om extends mr{}});function En(n,r){return J({[O]:"Literal",const:n,type:typeof n},r)}var xm=u(()=>{y();rn()});var Yr=u(()=>{xm()});function Bi(n){return J({[O]:"Boolean",type:"boolean"},n)}var qm=u(()=>{rn();Tt()});var Wi=u(()=>{qm()});function qa(n){return J({[O]:"BigInt",type:"bigint"},n)}var Fm=u(()=>{rn();Tt()});var Ic=u(()=>{Fm()});function nt(n){return J({[O]:"Number",type:"number"},n)}var jm=u(()=>{y();rn()});var ta=u(()=>{jm()});function kt(n){return J({[O]:"String",type:"string"},n)}var pm=u(()=>{y();rn()});var Fa=u(()=>{pm()});function*$R(n){let r=n.trim().replace(/"|'/g,"");return r==="boolean"?yield Bi():r==="number"?yield nt():r==="bigint"?yield qa():r==="string"?yield kt():yield(()=>{let t=r.split("|").map((o)=>En(o.trim()));return t.length===0?hn():t.length===1?t[0]:Xt(t)})()}function*AR(n){if(n[1]!=="{"){let r=En("$"),t=a0(n.slice(1));return yield*[r,...t]}for(let r=2;r<n.length;r++)if(n[r]==="}"){let t=$R(n.slice(2,r)),o=a0(n.slice(r+1));return yield*[...t,...o]}yield En(n)}function*a0(n){for(let r=0;r<n.length;r++)if(n[r]==="$"){let t=En(n.slice(0,r)),o=AR(n.slice(r));return yield*[t,...o]}yield En(n)}function Km(n){return[...a0(n)]}var c0=u(()=>{Yr();Wi();Ic();ta();Fa();or();hr()});function RR(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Tm(n,r){return qr(n)?n.pattern.slice(1,n.pattern.length-1):wn(n)?`(${n.anyOf.map((t)=>Tm(t,r)).join("|")})`:Rt(n)?`${r}${Hi}`:At(n)?`${r}${Hi}`:To(n)?`${r}${Hi}`:Zt(n)?`${r}${_m}`:Nr(n)?`${r}${RR(n.const.toString())}`:It(n)?`${r}${gm}`:(()=>{throw new vm(`Unexpected Kind '${n[O]}'`)})()}function e0(n){return`^${n.map((r)=>Tm(r,"")).join("")}$`}var vm;var i0=u(()=>{Nc();rn();Yt();Rn();vm=class vm extends mr{}});function oa(n){let t=Ui(n).map((o)=>En(o));return Xt(t)}var Im=u(()=>{or();Yr();o0()});function Yi(n,r){let t=Ln(n)?e0(Km(n)):e0(n);return J({[O]:"TemplateLiteral",type:"string",pattern:t},r)}var Zm=u(()=>{y();c0();i0();rn()});var oo=u(()=>{t0();o0();c0();zi();i0();Im();Zm()});function kR(n){return Ui(n).map((t)=>t.toString())}function ER(n){let r=[];for(let t of n)r.push(...Jr(t));return r}function SR(n){return[n.toString()]}function Jr(n){return[...new Set(qr(n)?kR(n):wn(n)?ER(n.anyOf):Nr(n)?SR(n.const):Rt(n)?["[number]"]:At(n)?["[number]"]:[])]}var Ji=u(()=>{oo();Rn()});function MR(n,r,t){let o={};for(let a of Object.getOwnPropertyNames(r))o[a]=Ho(n,Jr(r[a]),t);return o}function DR(n,r,t){return MR(n,r.properties,t)}function ym(n,r,t){let o=DR(n,r,t);return kn(o)}var s0=u(()=>{fr();Ji();Lt()});function rw(n,r){return n.map((t)=>tw(t,r))}function HR(n){return n.filter((r)=>!Ro(r))}function zR(n,r){return Xi(HR(rw(n,r)))}function UR(n){return n.some((r)=>Ro(r))?[]:n}function BR(n,r){return Xt(UR(rw(n,r)))}function WR(n,r){return r in n?n[r]:r==="[number]"?Xt(n):hn()}function YR(n,r){return r==="[number]"?n:hn()}function JR(n,r){return r in n?n[r]:hn()}function tw(n,r){return Nn(n)?zR(n.allOf,r):wn(n)?BR(n.anyOf,r):Fr(n)?WR(n.items??[],r):mt(n)?YR(n.items,r):yn(n)?JR(n.properties,r):hn()}function f0(n,r){return r.map((t)=>tw(n,t))}function nw(n,r){return Xt(f0(n,r))}function Ho(n,r,t){if(jn(n)||jn(r)){if(!jr(n)||!jr(r))throw new mr("Index types using Ref parameters require both Type and Key to be of TSchema");return Cn("Index",[n,r])}if(Pn(r))return ym(n,r,t);if(xr(r))return ow(n,r,t);return J(jr(r)?nw(n,Jr(r)):nw(n,r),t)}var l0=u(()=>{y();Yt();Do();hr();rt();or();Ji();d0();s0();Rn()});function XR(n,r,t){return{[r]:Ho(n,[r],Qn(t))}}function LR(n,r,t){return r.reduce((o,a)=>{return{...o,...XR(n,a,t)}},{})}function VR(n,r,t){return LR(n,r.keys,t)}function ow(n,r,t){let o=VR(n,r,t);return kn(o)}var d0=u(()=>{l0();fr();Br()});var Lt=u(()=>{d0();s0();Ji();l0()});function ja(n,r){return J({[O]:"Iterator",type:"Iterator",items:n},r)}var aw=u(()=>{y();rn()});var Zc=u(()=>{aw()});function CR(n){return globalThis.Object.keys(n).filter((r)=>!Wr(n[r]))}function QR(n,r){let t=CR(n),o=t.length>0?{[O]:"Object",type:"object",required:t,properties:n}:{[O]:"Object",type:"object",properties:n};return J(o,r)}var Bn;var cw=u(()=>{y();rn();Rn();Bn=QR});var pr=u(()=>{cw()});function Li(n,r){return J({[O]:"Promise",type:"Promise",item:n},r)}var ew=u(()=>{y();rn()});var Vi=u(()=>{ew()});function PR(n){return J(xn(n,[_t]))}function GR(n){return J({...n,[_t]:"Readonly"})}function OR(n,r){return r===!1?PR(n):GR(n)}function Xr(n,r){let t=r??!0;return Pn(n)?iw(n,t):OR(n,t)}var u0=u(()=>{y();rn();no();b0();Rn()});function NR(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(n))t[o]=Xr(n[o],r);return t}function xR(n,r){return NR(n.properties,r)}function iw(n,r){let t=xR(n,r);return kn(t)}var b0=u(()=>{fr();u0()});var aa=u(()=>{b0();u0()});function tt(n,r){return J(n.length>0?{[O]:"Tuple",type:"array",items:n,additionalItems:!1,minItems:n.length,maxItems:n.length}:{[O]:"Tuple",type:"array",minItems:n.length,maxItems:n.length},r)}var sw=u(()=>{y();rn()});var zo=u(()=>{sw()});function fw(n,r){return n in r?ot(n,r[n]):kn(r)}function qR(n){return{[n]:En(n)}}function FR(n){let r={};for(let t of n)r[t]=En(t);return r}function jR(n,r){return Am(r,n)?qR(n):FR(r)}function pR(n,r){let t=jR(n,r);return fw(n,t)}function yc(n,r){return r.map((t)=>ot(n,t))}function KR(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(r))t[o]=ot(n,r[o]);return t}function ot(n,r){let t={...r};return Wr(r)?Sr(ot(n,xn(r,[wr]))):Qa(r)?Xr(ot(n,xn(r,[_t]))):Pn(r)?fw(n,r.properties):xr(r)?pR(n,r.keys):ht(r)?Oa(yc(n,r.parameters),ot(n,r.returns),t):$t(r)?Jt(yc(n,r.parameters),ot(n,r.returns),t):vo(r)?Ga(ot(n,r.items),t):Io(r)?ja(ot(n,r.items),t):Nn(r)?Mr(yc(n,r.allOf),t):wn(r)?Dn(yc(n,r.anyOf),t):Fr(r)?tt(yc(n,r.items??[]),t):yn(r)?Bn(KR(n,r.properties),t):mt(r)?Pa(ot(n,r.items),t):Zo(r)?Li(ot(n,r.item),t):r}function vR(n,r){let t={};for(let o of n)t[o]=ot(o,r);return t}function lw(n,r,t){let o=jr(n)?Jr(n):n,a=r({[O]:"MappedKey",keys:o}),c=vR(o,a);return Bn(c,t)}var dw=u(()=>{rn();no();Fc();jc();pc();na();Lt();rt();Zc();Yr();pr();ro();Vi();aa();zo();or();xc();Zl();Rn()});var fr=u(()=>{Wm();Zl();dw()});function TR(n){return J(xn(n,[wr]))}function IR(n){return J({...n,[wr]:"Optional"})}function ZR(n,r){return r===!1?TR(n):IR(n)}function Sr(n,r){let t=r??!0;return Pn(n)?uw(n,t):ZR(n,t)}var g0=u(()=>{y();rn();no();_0();Rn()});function yR(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(n))t[o]=Sr(n[o],r);return t}function n3(n,r){return yR(n.properties,r)}function uw(n,r){let t=n3(n,r);return kn(t)}var _0=u(()=>{fr();g0()});var ro=u(()=>{_0();g0()});function ne(n,r={}){let t=n.every((a)=>yn(a)),o=jr(r.unevaluatedProperties)?{unevaluatedProperties:r.unevaluatedProperties}:{};return J(r.unevaluatedProperties===!1||jr(r.unevaluatedProperties)||t?{...o,[O]:"Intersect",type:"object",allOf:n}:{...o,[O]:"Intersect",allOf:n},r)}var m0=u(()=>{y();rn();Rn()});function r3(n){return n.every((r)=>Wr(r))}function t3(n){return xn(n,[wr])}function bw(n){return n.map((r)=>Wr(r)?t3(r):r)}function o3(n,r){return r3(n)?Sr(ne(bw(n),r)):ne(bw(n),r)}function Xi(n,r={}){if(n.length===1)return J(n[0],r);if(n.length===0)return hn(r);if(n.some((t)=>ko(t)))throw Error("Cannot intersect transform types");return o3(n,r)}var gw=u(()=>{rn();y();no();hr();ro();m0();Rn()});var _w=()=>{};function Mr(n,r){if(n.length===1)return J(n[0],r);if(n.length===0)return hn(r);if(n.some((t)=>ko(t)))throw Error("Cannot intersect transform types");return ne(n,r)}var mw=u(()=>{y();hr();m0();Rn()});var rt=u(()=>{gw();_w();mw()});function Vt(...n){let[r,t]=typeof n[0]==="string"?[n[0],n[1]]:[n[0].$id,n[1]];if(typeof r!=="string")throw new mr("Ref: $ref must be a string");return J({[O]:"Ref",$ref:r},t)}var ww=u(()=>{Yt();y();rn()});var ca=u(()=>{ww()});function a3(n,r){return Cn("Awaited",[Cn(n,r)])}function c3(n){return Cn("Awaited",[Vt(n)])}function e3(n){return Mr(hw(n))}function i3(n){return Dn(hw(n))}function s3(n){return pa(n)}function hw(n){return n.map((r)=>pa(r))}function pa(n,r){return J(wt(n)?a3(n.target,n.parameters):Nn(n)?e3(n.allOf):wn(n)?i3(n.anyOf):Zo(n)?s3(n.item):jn(n)?c3(n.$ref):n,r)}var $w=u(()=>{y();Do();rt();or();ca();Rn()});var Ci=u(()=>{$w()});function Aw(n){let r=[];for(let t of n)r.push(re(t));return r}function f3(n){let r=Aw(n);return Em(r)}function l3(n){let r=Aw(n);return km(r)}function d3(n){return n.map((r,t)=>t.toString())}function u3(n){return["[number]"]}function b3(n){return globalThis.Object.getOwnPropertyNames(n)}function g3(n){if(!_3)return[];return globalThis.Object.getOwnPropertyNames(n).map((t)=>{return t[0]==="^"&&t[t.length-1]==="$"?t.slice(1,t.length-1):t})}function re(n){return Nn(n)?f3(n.allOf):wn(n)?l3(n.anyOf):Fr(n)?d3(n.items??[]):mt(n)?u3(n.items):yn(n)?b3(n.properties):yo(n)?g3(n.patternProperties):[]}var _3=!1;var w0=u(()=>{xc();Rn()});function m3(n,r){return Cn("KeyOf",[Cn(n,r)])}function w3(n){return Cn("KeyOf",[Vt(n)])}function h3(n,r){let t=re(n),o=$3(t),a=Xt(o);return J(a,r)}function $3(n){return n.map((r)=>r==="[number]"?nt():En(r))}function Ka(n,r){return wt(n)?m3(n.target,n.parameters):jn(n)?w3(n.$ref):Pn(n)?Rw(n,r):h3(n,r)}var h0=u(()=>{y();Yr();ta();Do();ca();w0();or();$0();Rn()});function A3(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(n))t[o]=Ka(n[o],Qn(r));return t}function R3(n,r){return A3(n.properties,r)}function Rw(n,r){let t=R3(n,r);return kn(t)}var $0=u(()=>{fr();h0();Br()});var kw=()=>{};var te=u(()=>{$0();kw();w0();h0()});function k3(n){let r=[];for(let t of n)r.push(...re(t));return Rm(r)}function E3(n){return n.filter((r)=>!Ro(r))}function S3(n,r){let t=[];for(let o of n)t.push(...f0(o,[r]));return E3(t)}function M3(n,r){let t={};for(let o of r)t[o]=Xi(S3(n,o));return t}function Ew(n,r){let t=k3(n),o=M3(n,t);return Bn(o,r)}var Sw=u(()=>{rt();Lt();te();pr();xc();Rn()});var A0=u(()=>{Sw()});function Qi(n){return J({[O]:"Date",type:"Date"},n)}var Mw=u(()=>{rn();y()});var Pi=u(()=>{Mw()});function Gi(n){return J({[O]:"Null",type:"null"},n)}var Dw=u(()=>{y();rn()});var Oi=u(()=>{Dw()});function Ni(n){return J({[O]:"Symbol",type:"symbol"},n)}var Hw=u(()=>{y();rn()});var xi=u(()=>{Hw()});function qi(n){return J({[O]:"Undefined",type:"undefined"},n)}var zw=u(()=>{y();rn()});var Fi=u(()=>{zw()});function ji(n){return J({[O]:"Uint8Array",type:"Uint8Array"},n)}var Uw=u(()=>{y();rn()});var pi=u(()=>{Uw()});function Uo(n){return J({[O]:"Unknown"},n)}var Bw=u(()=>{y();rn()});var va=u(()=>{Bw()});function D3(n){return n.map((r)=>R0(r,!1))}function H3(n){let r={};for(let t of globalThis.Object.getOwnPropertyNames(n))r[t]=Xr(R0(n[t],!1));return r}function Ki(n,r){return r===!0?n:Xr(n)}function R0(n,r){return Ql(n)?Ki(Mo(),r):Gl(n)?Ki(Mo(),r):In(n)?Xr(tt(D3(n))):vt(n)?ji():Ko(n)?Qi():zn(n)?Ki(Bn(H3(n)),r):Pl(n)?Ki(Jt([],Uo()),r):Zn(n)?qi():Ol(n)?Gi():Nl(n)?Ni():Jc(n)?qa():Or(n)?En(n):Kt(n)?En(n):Ln(n)?En(n):Bn({})}function Ww(n,r){return J(R0(n,!0),r)}var Yw=u(()=>{qc();Ic();Pi();na();Yr();Oi();pr();xi();zo();aa();Fi();pi();va();Tt()});var k0=u(()=>{Yw()});function Jw(n,r){return ht(n)?tt(n.parameters,r):hn(r)}var Xw=u(()=>{zo();hr();Rn()});var E0=u(()=>{Xw()});function Lw(n,r){if(Zn(n))throw Error("Enum undefined or empty");let t=globalThis.Object.getOwnPropertyNames(n).filter((c)=>isNaN(c)).map((c)=>n[c]),a=[...new Set(t)].map((c)=>En(c));return Dn(a,{...r,[yr]:"Enum"})}var Vw=u(()=>{Yr();rn();or()});var S0=u(()=>{Vw()});function at(n){return n===X.False?n:X.True}function Ta(n){throw new Ow(n)}function ar(n){return $.IsNever(n)||$.IsIntersect(n)||$.IsUnion(n)||$.IsUnknown(n)||$.IsAny(n)}function cr(n,r){return $.IsNever(r)?qw(n,r):$.IsIntersect(r)?vi(n,r):$.IsUnion(r)?U0(n,r):$.IsUnknown(r)?Kw(n,r):$.IsAny(r)?z0(n,r):Ta("StructuralRight")}function z0(n,r){return X.True}function z3(n,r){return $.IsIntersect(r)?vi(n,r):$.IsUnion(r)&&r.anyOf.some((t)=>$.IsAny(t)||$.IsUnknown(t))?X.True:$.IsUnion(r)?X.Union:$.IsUnknown(r)?X.True:$.IsAny(r)?X.True:X.Union}function U3(n,r){return $.IsUnknown(n)?X.False:$.IsAny(n)?X.Union:$.IsNever(n)?X.True:X.False}function B3(n,r){return $.IsObject(r)&&Ti(r)?X.True:ar(r)?cr(n,r):!$.IsArray(r)?X.False:at(Wn(n.items,r.items))}function W3(n,r){return ar(r)?cr(n,r):!$.IsAsyncIterator(r)?X.False:at(Wn(n.items,r.items))}function Y3(n,r){return ar(r)?cr(n,r):$.IsObject(r)?Dr(n,r):$.IsRecord(r)?ct(n,r):$.IsBigInt(r)?X.True:X.False}function Nw(n,r){return $.IsLiteralBoolean(n)?X.True:$.IsBoolean(n)?X.True:X.False}function J3(n,r){return ar(r)?cr(n,r):$.IsObject(r)?Dr(n,r):$.IsRecord(r)?ct(n,r):$.IsBoolean(r)?X.True:X.False}function X3(n,r){return ar(r)?cr(n,r):$.IsObject(r)?Dr(n,r):!$.IsConstructor(r)?X.False:n.parameters.length>r.parameters.length?X.False:!n.parameters.every((t,o)=>at(Wn(r.parameters[o],t))===X.True)?X.False:at(Wn(n.returns,r.returns))}function L3(n,r){return ar(r)?cr(n,r):$.IsObject(r)?Dr(n,r):$.IsRecord(r)?ct(n,r):$.IsDate(r)?X.True:X.False}function V3(n,r){return ar(r)?cr(n,r):$.IsObject(r)?Dr(n,r):!$.IsFunction(r)?X.False:n.parameters.length>r.parameters.length?X.False:!n.parameters.every((t,o)=>at(Wn(r.parameters[o],t))===X.True)?X.False:at(Wn(n.returns,r.returns))}function xw(n,r){return $.IsLiteral(n)&&Er.IsNumber(n.const)?X.True:$.IsNumber(n)||$.IsInteger(n)?X.True:X.False}function C3(n,r){return $.IsInteger(r)||$.IsNumber(r)?X.True:ar(r)?cr(n,r):$.IsObject(r)?Dr(n,r):$.IsRecord(r)?ct(n,r):X.False}function vi(n,r){return r.allOf.every((t)=>Wn(n,t)===X.True)?X.True:X.False}function Q3(n,r){return n.allOf.some((t)=>Wn(t,r)===X.True)?X.True:X.False}function P3(n,r){return ar(r)?cr(n,r):!$.IsIterator(r)?X.False:at(Wn(n.items,r.items))}function G3(n,r){return $.IsLiteral(r)&&r.const===n.const?X.True:ar(r)?cr(n,r):$.IsObject(r)?Dr(n,r):$.IsRecord(r)?ct(n,r):$.IsString(r)?pw(n,r):$.IsNumber(r)?Fw(n,r):$.IsInteger(r)?xw(n,r):$.IsBoolean(r)?Nw(n,r):X.False}function qw(n,r){return X.False}function O3(n,r){return X.True}function Cw(n){let[r,t]=[n,0];while(!0){if(!$.IsNot(r))break;r=r.not,t+=1}return t%2===0?r:Uo()}function N3(n,r){return $.IsNot(n)?Wn(Cw(n),r):$.IsNot(r)?Wn(n,Cw(r)):Ta("Invalid fallthrough for Not")}function x3(n,r){return ar(r)?cr(n,r):$.IsObject(r)?Dr(n,r):$.IsRecord(r)?ct(n,r):$.IsNull(r)?X.True:X.False}function Fw(n,r){return $.IsLiteralNumber(n)?X.True:$.IsNumber(n)||$.IsInteger(n)?X.True:X.False}function q3(n,r){return ar(r)?cr(n,r):$.IsObject(r)?Dr(n,r):$.IsRecord(r)?ct(n,r):$.IsInteger(r)||$.IsNumber(r)?X.True:X.False}function Lr(n,r){return Object.getOwnPropertyNames(n.properties).length===r}function Qw(n){return Ti(n)}function Pw(n){return Lr(n,0)||Lr(n,1)&&"description"in n.properties&&$.IsUnion(n.properties.description)&&n.properties.description.anyOf.length===2&&($.IsString(n.properties.description.anyOf[0])&&$.IsUndefined(n.properties.description.anyOf[1])||$.IsString(n.properties.description.anyOf[1])&&$.IsUndefined(n.properties.description.anyOf[0]))}function M0(n){return Lr(n,0)}function Gw(n){return Lr(n,0)}function F3(n){return Lr(n,0)}function j3(n){return Lr(n,0)}function p3(n){return Ti(n)}function K3(n){let r=nt();return Lr(n,0)||Lr(n,1)&&"length"in n.properties&&at(Wn(n.properties.length,r))===X.True}function v3(n){return Lr(n,0)}function Ti(n){let r=nt();return Lr(n,0)||Lr(n,1)&&"length"in n.properties&&at(Wn(n.properties.length,r))===X.True}function T3(n){let r=Jt([Mo()],Mo());return Lr(n,0)||Lr(n,1)&&"then"in n.properties&&at(Wn(n.properties.then,r))===X.True}function jw(n,r){return Wn(n,r)===X.False?X.False:$.IsOptional(n)&&!$.IsOptional(r)?X.False:X.True}function Dr(n,r){return $.IsUnknown(n)?X.False:$.IsAny(n)?X.Union:$.IsNever(n)||$.IsLiteralString(n)&&Qw(r)||$.IsLiteralNumber(n)&&M0(r)||$.IsLiteralBoolean(n)&&Gw(r)||$.IsSymbol(n)&&Pw(r)||$.IsBigInt(n)&&F3(r)||$.IsString(n)&&Qw(r)||$.IsSymbol(n)&&Pw(r)||$.IsNumber(n)&&M0(r)||$.IsInteger(n)&&M0(r)||$.IsBoolean(n)&&Gw(r)||$.IsUint8Array(n)&&p3(r)||$.IsDate(n)&&j3(r)||$.IsConstructor(n)&&v3(r)||$.IsFunction(n)&&K3(r)?X.True:$.IsRecord(n)&&$.IsString(D0(n))?(()=>{return r[yr]==="Record"?X.True:X.False})():$.IsRecord(n)&&$.IsNumber(D0(n))?(()=>{return Lr(r,0)?X.True:X.False})():X.False}function I3(n,r){return ar(r)?cr(n,r):$.IsRecord(r)?ct(n,r):!$.IsObject(r)?X.False:(()=>{for(let t of Object.getOwnPropertyNames(r.properties)){if(!(t in n.properties)&&!$.IsOptional(r.properties[t]))return X.False;if($.IsOptional(r.properties[t]))return X.True;if(jw(n.properties[t],r.properties[t])===X.False)return X.False}return X.True})()}function Z3(n,r){return ar(r)?cr(n,r):$.IsObject(r)&&T3(r)?X.True:!$.IsPromise(r)?X.False:at(Wn(n.item,r.item))}function D0(n){return Eo in n.patternProperties?nt():(So in n.patternProperties)?kt():Ta("Unknown record key pattern")}function H0(n){return Eo in n.patternProperties?n.patternProperties[Eo]:(So in n.patternProperties)?n.patternProperties[So]:Ta("Unable to get record value schema")}function ct(n,r){let[t,o]=[D0(r),H0(r)];return $.IsLiteralString(n)&&$.IsNumber(t)&&at(Wn(n,o))===X.True?X.True:$.IsUint8Array(n)&&$.IsNumber(t)?Wn(n,o):$.IsString(n)&&$.IsNumber(t)?Wn(n,o):$.IsArray(n)&&$.IsNumber(t)?Wn(n,o):$.IsObject(n)?(()=>{for(let a of Object.getOwnPropertyNames(n.properties))if(jw(o,n.properties[a])===X.False)return X.False;return X.True})():X.False}function y3(n,r){return ar(r)?cr(n,r):$.IsObject(r)?Dr(n,r):!$.IsRecord(r)?X.False:Wn(H0(n),H0(r))}function nk(n,r){let t=$.IsRegExp(n)?kt():n,o=$.IsRegExp(r)?kt():r;return Wn(t,o)}function pw(n,r){return $.IsLiteral(n)&&Er.IsString(n.const)?X.True:$.IsString(n)?X.True:X.False}function rk(n,r){return ar(r)?cr(n,r):$.IsObject(r)?Dr(n,r):$.IsRecord(r)?ct(n,r):$.IsString(r)?X.True:X.False}function tk(n,r){return ar(r)?cr(n,r):$.IsObject(r)?Dr(n,r):$.IsRecord(r)?ct(n,r):$.IsSymbol(r)?X.True:X.False}function ok(n,r){return $.IsTemplateLiteral(n)?Wn(oa(n),r):$.IsTemplateLiteral(r)?Wn(n,oa(r)):Ta("Invalid fallthrough for TemplateLiteral")}function ak(n,r){return $.IsArray(r)&&n.items!==void 0&&n.items.every((t)=>Wn(t,r.items)===X.True)}function ck(n,r){return $.IsNever(n)?X.True:$.IsUnknown(n)?X.False:$.IsAny(n)?X.Union:X.False}function ek(n,r){return ar(r)?cr(n,r):$.IsObject(r)&&Ti(r)?X.True:$.IsArray(r)&&ak(n,r)?X.True:!$.IsTuple(r)?X.False:Er.IsUndefined(n.items)&&!Er.IsUndefined(r.items)||!Er.IsUndefined(n.items)&&Er.IsUndefined(r.items)?X.False:Er.IsUndefined(n.items)&&!Er.IsUndefined(r.items)?X.True:n.items.every((t,o)=>Wn(t,r.items[o])===X.True)?X.True:X.False}function ik(n,r){return ar(r)?cr(n,r):$.IsObject(r)?Dr(n,r):$.IsRecord(r)?ct(n,r):$.IsUint8Array(r)?X.True:X.False}function sk(n,r){return ar(r)?cr(n,r):$.IsObject(r)?Dr(n,r):$.IsRecord(r)?ct(n,r):$.IsVoid(r)?dk(n,r):$.IsUndefined(r)?X.True:X.False}function U0(n,r){return r.anyOf.some((t)=>Wn(n,t)===X.True)?X.True:X.False}function fk(n,r){return n.anyOf.every((t)=>Wn(t,r)===X.True)?X.True:X.False}function Kw(n,r){return X.True}function lk(n,r){return $.IsNever(r)?qw(n,r):$.IsIntersect(r)?vi(n,r):$.IsUnion(r)?U0(n,r):$.IsAny(r)?z0(n,r):$.IsString(r)?pw(n,r):$.IsNumber(r)?Fw(n,r):$.IsInteger(r)?xw(n,r):$.IsBoolean(r)?Nw(n,r):$.IsArray(r)?U3(n,r):$.IsTuple(r)?ck(n,r):$.IsObject(r)?Dr(n,r):$.IsUnknown(r)?X.True:X.False}function dk(n,r){return $.IsUndefined(n)?X.True:$.IsUndefined(n)?X.True:X.False}function uk(n,r){return $.IsIntersect(r)?vi(n,r):$.IsUnion(r)?U0(n,r):$.IsUnknown(r)?Kw(n,r):$.IsAny(r)?z0(n,r):$.IsObject(r)?Dr(n,r):$.IsVoid(r)?X.True:X.False}function Wn(n,r){return $.IsTemplateLiteral(n)||$.IsTemplateLiteral(r)?ok(n,r):$.IsRegExp(n)||$.IsRegExp(r)?nk(n,r):$.IsNot(n)||$.IsNot(r)?N3(n,r):$.IsAny(n)?z3(n,r):$.IsArray(n)?B3(n,r):$.IsBigInt(n)?Y3(n,r):$.IsBoolean(n)?J3(n,r):$.IsAsyncIterator(n)?W3(n,r):$.IsConstructor(n)?X3(n,r):$.IsDate(n)?L3(n,r):$.IsFunction(n)?V3(n,r):$.IsInteger(n)?C3(n,r):$.IsIntersect(n)?Q3(n,r):$.IsIterator(n)?P3(n,r):$.IsLiteral(n)?G3(n,r):$.IsNever(n)?O3(n,r):$.IsNull(n)?x3(n,r):$.IsNumber(n)?q3(n,r):$.IsObject(n)?I3(n,r):$.IsRecord(n)?y3(n,r):$.IsString(n)?rk(n,r):$.IsSymbol(n)?tk(n,r):$.IsTuple(n)?ek(n,r):$.IsPromise(n)?Z3(n,r):$.IsUint8Array(n)?ik(n,r):$.IsUndefined(n)?sk(n,r):$.IsUnion(n)?fk(n,r):$.IsUnknown(n)?lk(n,r):$.IsVoid(n)?uk(n,r):Ta(`Unknown left type operand '${n[O]}'`)}function Bo(n,r){return Wn(n,r)}var Ow,X;var B0=u(()=>{qc();na();ta();Fa();va();oo();Nc();rn();Yt();Tl();Ow=class Ow extends mr{};(function(n){n[n.Union=0]="Union",n[n.True=1]="True",n[n.False=2]="False"})(X||(X={}))});function bk(n,r,t,o,a){let c={};for(let e of globalThis.Object.getOwnPropertyNames(n))c[e]=Ia(n[e],r,t,o,Qn(a));return c}function gk(n,r,t,o,a){return bk(n.properties,r,t,o,a)}function vw(n,r,t,o,a){let c=gk(n,r,t,o,a);return kn(c)}var W0=u(()=>{fr();Ii();Br()});function _k(n,r,t,o){let a=Bo(n,r);return a===X.Union?Dn([t,o]):a===X.True?t:o}function Ia(n,r,t,o,a){return Pn(n)?vw(n,r,t,o,a):xr(n)?J(Tw(n,r,t,o,a)):J(_k(n,r,t,o),a)}var Ii=u(()=>{y();or();B0();Y0();W0();Rn()});function mk(n,r,t,o,a){return{[n]:Ia(En(n),r,t,o,Qn(a))}}function wk(n,r,t,o,a){return n.reduce((c,e)=>{return{...c,...mk(e,r,t,o,a)}},{})}function hk(n,r,t,o,a){return wk(n.keys,r,t,o,a)}function Tw(n,r,t,o,a){let c=hk(n,r,t,o,a);return kn(c)}var Y0=u(()=>{fr();Yr();Ii();Br()});var Iw=()=>{};var oe=u(()=>{B0();Y0();W0();Iw();Ii()});function Zw(n,r){return Za(oa(n),r)}var J0=u(()=>{Zi();oo()});function $k(n,r){let t=n.filter((o)=>Bo(o,r)===X.False);return t.length===1?t[0]:Dn(t)}function Za(n,r,t={}){if(qr(n))return J(Zw(n,r),t);if(Pn(n))return J(yw(n,r),t);return J(wn(n)?$k(n.anyOf,r):Bo(n,r)!==X.False?hn():n,t)}var Zi=u(()=>{y();or();hr();oe();X0();J0();Rn()});function Ak(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(n))t[o]=Za(n[o],r);return t}function Rk(n,r){return Ak(n.properties,r)}function yw(n,r){let t=Rk(n,r);return kn(t)}var X0=u(()=>{fr();Zi()});var L0=u(()=>{X0();J0();Zi()});function n1(n,r){return ya(oa(n),r)}var V0=u(()=>{yi();oo()});function kk(n,r){let t=n.filter((o)=>Bo(o,r)!==X.False);return t.length===1?t[0]:Dn(t)}function ya(n,r,t){if(qr(n))return J(n1(n,r),t);if(Pn(n))return J(r1(n,r),t);return J(wn(n)?kk(n.anyOf,r):Bo(n,r)!==X.False?n:hn(),t)}var yi=u(()=>{y();or();hr();oe();C0();V0();Rn()});function Ek(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(n))t[o]=ya(n[o],r);return t}function Sk(n,r){return Ek(n.properties,r)}function r1(n,r){let t=Sk(n,r);return kn(t)}var C0=u(()=>{fr();yi()});var Q0=u(()=>{C0();V0();yi()});function t1(n,r){return ht(n)?J(n.returns,r):hn(r)}var o1=u(()=>{y();hr();Rn()});var P0=u(()=>{o1()});function ns(n){return Xr(Sr(n))}var a1=u(()=>{aa();ro()});var rs=u(()=>{a1()});function ea(n,r,t){return J({[O]:"Record",type:"object",patternProperties:{[n]:r}},t)}function G0(n,r,t){let o={};for(let a of n)o[a]=r;return Bn(o,{...t,[yr]:"Record"})}function Mk(n,r,t){return Gm(n)?G0(Jr(n),r,t):ea(n.pattern,r,t)}function Dk(n,r,t){return G0(Jr(Dn(n)),r,t)}function Hk(n,r,t){return G0([n.toString()],r,t)}function zk(n,r,t){return ea(n.source,r,t)}function Uk(n,r,t){let o=Zn(n.pattern)?So:n.pattern;return ea(o,r,t)}function Bk(n,r,t){return ea(So,r,t)}function Wk(n,r,t){return ea(mm,r,t)}function Yk(n,r,t){return Bn({true:r,false:r},t)}function Jk(n,r,t){return ea(Eo,r,t)}function Xk(n,r,t){return ea(Eo,r,t)}function ts(n,r,t={}){return wn(n)?Dk(n.anyOf,r,t):qr(n)?Mk(n,r,t):Nr(n)?Hk(n.const,r,t):It(n)?Yk(n,r,t):At(n)?Jk(n,r,t):Rt(n)?Xk(n,r,t):jl(n)?zk(n,r,t):Zt(n)?Uk(n,r,t):ql(n)?Bk(n,r,t):Ro(n)?Wk(n,r,t):hn(t)}function os(n){return globalThis.Object.getOwnPropertyNames(n.patternProperties)[0]}function c1(n){let r=os(n);return r===So?kt():r===Eo?nt():kt({pattern:r})}function as(n){return n.patternProperties[os(n)]}var e1=u(()=>{y();rn();hr();ta();pr();Fa();or();oo();Nc();Lt();Rn()});var ae=u(()=>{e1()});function Lk(n,r){return r.parameters=ce(n,r.parameters),r.returns=Et(n,r.returns),r}function Vk(n,r){return r.parameters=ce(n,r.parameters),r.returns=Et(n,r.returns),r}function Ck(n,r){return r.allOf=ce(n,r.allOf),r}function Qk(n,r){return r.anyOf=ce(n,r.anyOf),r}function Pk(n,r){if(Zn(r.items))return r;return r.items=ce(n,r.items),r}function Gk(n,r){return r.items=Et(n,r.items),r}function Ok(n,r){return r.items=Et(n,r.items),r}function Nk(n,r){return r.items=Et(n,r.items),r}function xk(n,r){return r.item=Et(n,r.item),r}function qk(n,r){let t=Kk(n,r.properties);return{...r,...Bn(t)}}function Fk(n,r){let t=Et(n,c1(r)),o=Et(n,as(r)),a=ts(t,o);return{...r,...a}}function jk(n,r){return r.index in n?n[r.index]:Uo()}function pk(n,r){let t=Qa(r),o=Wr(r),a=Et(n,r);return t&&o?ns(a):t&&!o?Xr(a):!t&&o?Sr(a):a}function Kk(n,r){return globalThis.Object.getOwnPropertyNames(r).reduce((t,o)=>{return{...t,[o]:pk(n,r[o])}},{})}function ce(n,r){return r.map((t)=>Et(n,t))}function Et(n,r){return ht(r)?Lk(n,r):$t(r)?Vk(n,r):Nn(r)?Ck(n,r):wn(r)?Qk(n,r):Fr(r)?Pk(n,r):mt(r)?Gk(n,r):vo(r)?Ok(n,r):Io(r)?Nk(n,r):Zo(r)?xk(n,r):yn(r)?qk(n,r):yo(r)?Fk(n,r):Fl(r)?jk(n,r):r}function i1(n,r){return Et(r,Ca(n))}var s1=u(()=>{Ei();va();rs();aa();ro();pr();ae();Rn()});var O0=u(()=>{s1()});function f1(n){return J({[O]:"Integer",type:"integer"},n)}var l1=u(()=>{y();rn()});var N0=u(()=>{l1()});function vk(n,r,t){return{[n]:St(En(n),r,Qn(t))}}function Tk(n,r,t){return n.reduce((a,c)=>{return{...a,...vk(c,r,t)}},{})}function Ik(n,r,t){return Tk(n.keys,r,t)}function d1(n,r,t){let o=Ik(n,r,t);return kn(o)}var x0=u(()=>{fr();ia();Yr();Br()});function Zk(n){let[r,t]=[n.slice(0,1),n.slice(1)];return[r.toLowerCase(),t].join("")}function yk(n){let[r,t]=[n.slice(0,1),n.slice(1)];return[r.toUpperCase(),t].join("")}function n4(n){return n.toUpperCase()}function r4(n){return n.toLowerCase()}function t4(n,r,t){let o=xa(n.pattern);if(!ra(o))return{...n,pattern:u1(n.pattern,r)};let e=[...Tc(o)].map((f)=>En(f)),i=b1(e,r),s=Dn(i);return Yi([s],t)}function u1(n,r){return typeof n==="string"?r==="Uncapitalize"?Zk(n):r==="Capitalize"?yk(n):r==="Uppercase"?n4(n):r==="Lowercase"?r4(n):n:n.toString()}function b1(n,r){return n.map((t)=>St(t,r))}function St(n,r,t={}){return xr(n)?d1(n,r,t):qr(n)?t4(n,r,t):wn(n)?Dn(b1(n.anyOf,r),t):Nr(n)?En(u1(n.const,r),t):J(n,t)}var ia=u(()=>{y();oo();x0();Yr();or();Rn()});function g1(n,r={}){return St(n,"Capitalize",r)}var _1=u(()=>{ia()});function m1(n,r={}){return St(n,"Lowercase",r)}var w1=u(()=>{ia()});function h1(n,r={}){return St(n,"Uncapitalize",r)}var $1=u(()=>{ia()});function A1(n,r={}){return St(n,"Uppercase",r)}var R1=u(()=>{ia()});var q0=u(()=>{_1();x0();ia();w1();$1();R1()});function o4(n,r,t){let o={};for(let a of globalThis.Object.getOwnPropertyNames(n))o[a]=Wo(n[a],r,Qn(t));return o}function a4(n,r,t){return o4(n.properties,r,t)}function k1(n,r,t){let o=a4(n,r,t);return kn(o)}var F0=u(()=>{fr();cs();Br()});function c4(n,r){return n.map((t)=>j0(t,r))}function e4(n,r){return n.map((t)=>j0(t,r))}function i4(n,r){let{[r]:t,...o}=n;return o}function s4(n,r){return r.reduce((t,o)=>i4(t,o),n)}function f4(n,r,t){let o=xn(n,[tr,"$id","required","properties"]),a=s4(t,r);return Bn(a,o)}function l4(n){let r=n.reduce((t,o)=>Mi(o)?[...t,En(o)]:t,[]);return Dn(r)}function j0(n,r){return Nn(n)?Mr(c4(n.allOf,r)):wn(n)?Dn(e4(n.anyOf,r)):yn(n)?f4(n,r,n.properties):Bn({})}function Wo(n,r,t){let o=In(r)?l4(r):r,a=jr(r)?Jr(r):r,c=jn(n),e=jn(r);return Pn(n)?k1(n,a,t):xr(r)?E1(n,r,t):c&&e?Cn("Omit",[n,o],t):!c&&e?Cn("Omit",[n,o],t):c&&!e?Cn("Omit",[n,o],t):J({...j0(n,a),...t})}var cs=u(()=>{y();Vc();Do();Yr();Lt();rt();or();pr();p0();F0();Rn()});function d4(n,r,t){return{[r]:Wo(n,[r],Qn(t))}}function u4(n,r,t){return r.reduce((o,a)=>{return{...o,...d4(n,a,t)}},{})}function b4(n,r,t){return u4(n,r.keys,t)}function E1(n,r,t){let o=b4(n,r,t);return kn(o)}var p0=u(()=>{fr();cs();Br()});var es=u(()=>{p0();F0();cs()});function g4(n,r,t){let o={};for(let a of globalThis.Object.getOwnPropertyNames(n))o[a]=Yo(n[a],r,Qn(t));return o}function _4(n,r,t){return g4(n.properties,r,t)}function S1(n,r,t){let o=_4(n,r,t);return kn(o)}var K0=u(()=>{fr();is();Br()});function m4(n,r){return n.map((t)=>v0(t,r))}function w4(n,r){return n.map((t)=>v0(t,r))}function h4(n,r){let t={};for(let o of r)if(o in n)t[o]=n[o];return t}function $4(n,r,t){let o=xn(n,[tr,"$id","required","properties"]),a=h4(t,r);return Bn(a,o)}function A4(n){let r=n.reduce((t,o)=>Mi(o)?[...t,En(o)]:t,[]);return Dn(r)}function v0(n,r){return Nn(n)?Mr(m4(n.allOf,r)):wn(n)?Dn(w4(n.anyOf,r)):yn(n)?$4(n,r,n.properties):Bn({})}function Yo(n,r,t){let o=In(r)?A4(r):r,a=jr(r)?Jr(r):r,c=jn(n),e=jn(r);return Pn(n)?S1(n,a,t):xr(r)?M1(n,r,t):c&&e?Cn("Pick",[n,o],t):!c&&e?Cn("Pick",[n,o],t):c&&!e?Cn("Pick",[n,o],t):J({...v0(n,a),...t})}var is=u(()=>{y();Do();rt();Yr();pr();or();Lt();Vc();Rn();T0();K0()});function R4(n,r,t){return{[r]:Yo(n,[r],Qn(t))}}function k4(n,r,t){return r.reduce((o,a)=>{return{...o,...R4(n,a,t)}},{})}function E4(n,r,t){return k4(n,r.keys,t)}function M1(n,r,t){let o=E4(n,r,t);return kn(o)}var T0=u(()=>{fr();is();Br()});var ss=u(()=>{T0();K0();is()});function S4(n,r){return Cn("Partial",[Cn(n,r)])}function M4(n){return Cn("Partial",[Vt(n)])}function D4(n){let r={};for(let t of globalThis.Object.getOwnPropertyNames(n))r[t]=Sr(n[t]);return r}function H4(n,r){let t=xn(n,[tr,"$id","required","properties"]),o=D4(r);return Bn(o,t)}function D1(n){return n.map((r)=>H1(r))}function H1(n){return wt(n)?S4(n.target,n.parameters):jn(n)?M4(n.$ref):Nn(n)?Mr(D1(n.allOf)):wn(n)?Dn(D1(n.anyOf)):yn(n)?H4(n,n.properties):To(n)?n:It(n)?n:At(n)?n:Nr(n)?n:Cc(n)?n:Rt(n)?n:Zt(n)?n:Qc(n)?n:Pc(n)?n:Bn({})}function nc(n,r){if(Pn(n))return z1(n,r);else return J({...H1(n),...r})}var I0=u(()=>{y();Do();ro();pr();rt();or();ca();no();rn();Z0();Rn()});function z4(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(n))t[o]=nc(n[o],Qn(r));return t}function U4(n,r){return z4(n.properties,r)}function z1(n,r){let t=U4(n,r);return kn(t)}var Z0=u(()=>{fr();I0();Br()});var fs=u(()=>{Z0();I0()});function B4(n,r){return Cn("Required",[Cn(n,r)])}function W4(n){return Cn("Required",[Vt(n)])}function Y4(n){let r={};for(let t of globalThis.Object.getOwnPropertyNames(n))r[t]=xn(n[t],[wr]);return r}function J4(n,r){let t=xn(n,[tr,"$id","required","properties"]),o=Y4(r);return Bn(o,t)}function U1(n){return n.map((r)=>B1(r))}function B1(n){return wt(n)?B4(n.target,n.parameters):jn(n)?W4(n.$ref):Nn(n)?Mr(U1(n.allOf)):wn(n)?Dn(U1(n.anyOf)):yn(n)?J4(n,n.properties):To(n)?n:It(n)?n:At(n)?n:Nr(n)?n:Cc(n)?n:Rt(n)?n:Zt(n)?n:Qc(n)?n:Pc(n)?n:Bn({})}function rc(n,r){if(Pn(n))return W1(n,r);else return J({...B1(n),...r})}var y0=u(()=>{y();Do();pr();rt();or();ca();rn();no();nd();Rn()});function X4(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(n))t[o]=rc(n[o],r);return t}function L4(n,r){return X4(n.properties,r)}function W1(n,r){let t=L4(n,r);return kn(t)}var nd=u(()=>{fr();y0()});var ls=u(()=>{nd();y0()});function V4(n,r){return r.map((t)=>{return jn(t)?rd(n,t.$ref):Kr(n,t)})}function rd(n,r){return r in n?jn(n[r])?rd(n,n[r].$ref):Kr(n,n[r]):hn()}function C4(n){return pa(n[0])}function Q4(n){return Ho(n[0],n[1])}function P4(n){return Ka(n[0])}function G4(n){return nc(n[0])}function O4(n){return Wo(n[0],n[1])}function N4(n){return Yo(n[0],n[1])}function x4(n){return rc(n[0])}function q4(n,r,t){let o=V4(n,t);return r==="Awaited"?C4(o):r==="Index"?Q4(o):r==="KeyOf"?P4(o):r==="Partial"?G4(o):r==="Omit"?O4(o):r==="Pick"?N4(o):r==="Required"?x4(o):hn()}function F4(n,r){return Pa(Kr(n,r))}function j4(n,r){return Ga(Kr(n,r))}function p4(n,r,t){return Oa(ee(n,r),Kr(n,t))}function K4(n,r,t){return Jt(ee(n,r),Kr(n,t))}function v4(n,r){return Mr(ee(n,r))}function T4(n,r){return ja(Kr(n,r))}function I4(n,r){return Bn(globalThis.Object.keys(r).reduce((t,o)=>{return{...t,[o]:Kr(n,r[o])}},{}))}function Z4(n,r){let[t,o]=[Kr(n,as(r)),os(r)],a=Ca(r);return a.patternProperties[o]=t,a}function y4(n,r){return jn(r)?{...rd(n,r.$ref),[tr]:r[tr]}:r}function nE(n,r){return tt(ee(n,r))}function rE(n,r){return Dn(ee(n,r))}function ee(n,r){return r.map((t)=>Kr(n,t))}function Kr(n,r){return Wr(r)?J(Kr(n,xn(r,[wr])),r):Qa(r)?J(Kr(n,xn(r,[_t])),r):ko(r)?J(y4(n,r),r):mt(r)?J(F4(n,r.items),r):vo(r)?J(j4(n,r.items),r):wt(r)?J(q4(n,r.target,r.parameters)):ht(r)?J(p4(n,r.parameters,r.returns),r):$t(r)?J(K4(n,r.parameters,r.returns),r):Nn(r)?J(v4(n,r.allOf),r):Io(r)?J(T4(n,r.items),r):yn(r)?J(I4(n,r.properties),r):yo(r)?J(Z4(n,r)):Fr(r)?J(nE(n,r.items||[]),r):wn(r)?J(rE(n,r.anyOf),r):r}function tE(n,r){return r in n?Kr(n,n[r]):hn()}function Y1(n){return globalThis.Object.getOwnPropertyNames(n).reduce((r,t)=>{return{...r,[t]:tE(n,t)}},{})}var J1=u(()=>{Tt();xl();no();Fc();Ci();jc();pc();Lt();na();rt();Zc();te();pr();es();ss();hr();fs();ae();ls();zo();or();rn();Rn()});class X1{constructor(n){let r=Y1(n),t=this.WithIdentifiers(r);this.$defs=t}Import(n,r){let t={...this.$defs,[n]:J(this.$defs[n],r)};return J({[O]:"Import",$defs:t,$ref:n})}WithIdentifiers(n){return globalThis.Object.getOwnPropertyNames(n).reduce((r,t)=>{return{...r,[t]:{...n[t],$id:t}}},{})}}function L1(n){return new X1(n)}var V1=u(()=>{Tt();rn();J1()});var td=u(()=>{V1()});function C1(n,r){return J({[O]:"Not",not:n},r)}var Q1=u(()=>{y();rn()});var od=u(()=>{Q1()});function P1(n,r){return $t(n)?tt(n.parameters,r):hn()}var G1=u(()=>{zo();hr();Rn()});var ad=u(()=>{G1()});function O1(n,r={}){if(Zn(r.$id))r.$id=`T${oE++}`;let t=Ca(n({[O]:"This",$ref:`${r.$id}`}));return t.$id=r.$id,J({[yr]:"Recursive",...t},r)}var oE=0;var N1=u(()=>{Ei();y();rn()});var cd=u(()=>{N1()});function x1(n,r){let t=Ln(n)?new globalThis.RegExp(n):n;return J({[O]:"RegExp",type:"RegExp",source:t.source,flags:t.flags},r)}var q1=u(()=>{y();rn()});var ed=u(()=>{q1()});function aE(n){return Nn(n)?n.allOf:wn(n)?n.anyOf:Fr(n)?n.items??[]:[]}function F1(n){return aE(n)}var j1=u(()=>{Rn()});var id=u(()=>{j1()});function p1(n,r){return $t(n)?J(n.returns,r):hn(r)}var K1=u(()=>{y();hr();Rn()});var sd=u(()=>{K1()});var v1=()=>{};var T1=()=>{};var I1=u(()=>{v1();T1()});var Z1=()=>{};var y1=u(()=>{Z1()});class n2{constructor(n){this.schema=n}Decode(n){return new r2(this.schema,n)}}class r2{constructor(n,r){this.schema=n,this.decode=r}EncodeTransform(n,r){let a={Encode:(c)=>r[tr].Encode(n(c)),Decode:(c)=>this.decode(r[tr].Decode(c))};return{...r,[tr]:a}}EncodeSchema(n,r){let t={Decode:this.decode,Encode:n};return{...r,[tr]:t}}Encode(n){return ko(this.schema)?this.EncodeTransform(n,this.schema):this.EncodeSchema(n,this.schema)}}function t2(n){return new n2(n)}var o2=u(()=>{rn();Rn()});var fd=u(()=>{o2()});function a2(n={}){return J({[O]:n[O]??"Unsafe"},n)}var c2=u(()=>{y();rn()});var ld=u(()=>{c2()});function e2(n){return J({[O]:"Void",type:"void"},n)}var i2=u(()=>{y();rn()});var dd=u(()=>{i2()});var ud={};co(ud,{Void:()=>e2,Uppercase:()=>A1,Unsafe:()=>a2,Unknown:()=>Uo,Union:()=>Dn,Undefined:()=>qi,Uncapitalize:()=>h1,Uint8Array:()=>ji,Tuple:()=>tt,Transform:()=>t2,TemplateLiteral:()=>Yi,Symbol:()=>Ni,String:()=>kt,ReturnType:()=>p1,Rest:()=>F1,Required:()=>rc,RegExp:()=>x1,Ref:()=>Vt,Recursive:()=>O1,Record:()=>ts,ReadonlyOptional:()=>ns,Readonly:()=>Xr,Promise:()=>Li,Pick:()=>Yo,Partial:()=>nc,Parameters:()=>P1,Optional:()=>Sr,Omit:()=>Wo,Object:()=>Bn,Number:()=>nt,Null:()=>Gi,Not:()=>C1,Never:()=>hn,Module:()=>L1,Mapped:()=>lw,Lowercase:()=>m1,Literal:()=>En,KeyOf:()=>Ka,Iterator:()=>ja,Intersect:()=>Mr,Integer:()=>f1,Instantiate:()=>i1,InstanceType:()=>t1,Index:()=>Ho,Function:()=>Jt,Extract:()=>ya,Extends:()=>Ia,Exclude:()=>Za,Enum:()=>Lw,Date:()=>Qi,ConstructorParameters:()=>Jw,Constructor:()=>Oa,Const:()=>Ww,Composite:()=>Ew,Capitalize:()=>g1,Boolean:()=>Bi,BigInt:()=>qa,Awaited:()=>pa,AsyncIterator:()=>Ga,Array:()=>Pa,Argument:()=>Dm,Any:()=>Mo});var s2=u(()=>{qc();Il();Fc();jc();Ci();Ic();Wi();A0();k0();pc();E0();Pi();S0();L0();oe();Q0();na();Lt();P0();O0();N0();rt();q0();Zc();te();Yr();fr();td();hr();od();Oi();ta();pr();es();ro();ad();fs();ss();Vi();aa();rs();ae();cd();ca();ed();ls();id();sd();Fa();xi();oo();fd();zo();pi();Fi();or();va();ld();dd()});var er;var f2=u(()=>{s2();er=ud});var l2=u(()=>{xl();Tt();Yt();Tl();bm();Nc();$m();xc();rn();qc();Fc();Il();jc();Ci();Ic();Wi();A0();k0();pc();E0();Pi();S0();L0();oe();Q0();na();Lt();P0();O0();N0();rt();Zc();q0();te();Yr();td();fr();hr();od();Oi();ta();pr();es();ro();ad();fs();ss();Vi();aa();rs();ae();cd();ca();ed();ls();id();sd();I1();y1();Fa();xi();oo();fd();zo();pi();Fi();or();va();ld();dd();f2()});var bd,gd,jx,px;var _d=u(()=>{l2();bd=er.Object({email:er.String({format:"email"})}),gd=er.Object({token:er.String()}),jx=er.Object({success:er.Boolean(),message:er.Optional(er.String())}),px=er.Object({success:er.Boolean(),message:er.Optional(er.String()),data:er.Optional(er.Object({user:er.Object({id:er.String(),email:er.String()}),accessToken:er.String(),refreshToken:er.String()}))})});import{eq as md}from"drizzle-orm";import{Elysia as cE}from"elysia";function ds(n,r,t,o,a,c,e,i,s,f){let{db:l,logger:d,usersTable:b}=n,w=r.route||"/auth/magic-link",h=r.verifyRoute||"/auth/magic-link/verify",_=r.expiresIn||"15m",g=r.redirectUrl||"",R=new cE;if(!r.enabled)return R;return R.post(w,async(k)=>{if(!l||!b)return{success:!1,message:"Database not configured"};if(!t?.isAvailable())return d.error("[AUTH] Magic link requested but email service not available"),{success:!1,message:"Email service not available"};let{email:M}=k.body,N=(await l.select().from(b).where(md(b.email,M)).limit(1))[0];if(!N)return d.info("[AUTH] Magic link requested for non-existent email",{email:M}),{success:!0,message:"If an account exists, a magic link has been sent"};if(N.isLocked)return d.warn("[AUTH] Magic link requested for locked account",{email:M}),{success:!0,message:"If an account exists, a magic link has been sent"};let m=La(),A=gt(m),H=new Date(Date.now()+Va(_));await e({userId:N.id,email:M,tokenHash:A,expiresAt:H});let D=g?`${g}?token=${m}`:`${h}?token=${m}`,E=await t.sendMagicLinkEmail(M,D,f);if(!E.success)return d.error("[AUTH] Failed to send magic link email",{email:M,error:E.error}),{success:!1,message:"Failed to send email"};return d.info("[AUTH] Magic link sent",{email:M,userId:N.id}),{success:!0,message:"If an account exists, a magic link has been sent"}},{body:bd,detail:{tags:["Authentication"],summary:"Request Magic Link",description:"Send a magic link to the user's email for passwordless login"}}),R.get(h,async(k)=>{if(!l||!b)return{success:!1,message:"Database not configured"};let M=k.query.token;if(!M)return{success:!1,message:"Token is required"};let C=gt(M),N=await i(C);if(!N)return d.warn("[AUTH] Invalid magic link token"),{success:!1,message:"Invalid or expired token"};if(new Date>N.expiresAt)return await s(C),d.warn("[AUTH] Expired magic link token",{email:N.email}),{success:!1,message:"Invalid or expired token"};let A=(await l.select().from(b).where(md(b.id,N.userId)).limit(1))[0];if(!A)return await s(C),{success:!1,message:"User not found"};await s(C),await l.update(b).set({lastLoginAt:new Date,loginCount:(A.loginCount||0)+1,emailVerified:!0}).where(md(b.id,A.id));let H=k.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||k.request.headers.get("x-real-ip")?.trim()||"unknown",D=k.request.headers.get("user-agent")||"",E=o(A.id),S=a(A.id),z=await c({userId:A.id,deviceInfo:{ipAddress:H,userAgent:D,deviceType:"unknown"},loginMethod:"magic_link"});return d.info("[AUTH] Magic link login successful",{userId:A.id,email:A.email}),k.set.headers["x-session-id"]=z,{success:!0,data:{user:{id:A.id,email:A.email},accessToken:E,refreshToken:S}}},{query:gd,detail:{tags:["Authentication"],summary:"Verify Magic Link",description:"Verify magic link token and login user"}}),R}var wd=u(()=>{_d();Yc();_d()});import{eq as tc}from"drizzle-orm";import{Elysia as eE}from"elysia";function us(n,r,t,o,a){let{db:c,logger:e,usersTable:i}=n,s=r.route||"/auth/me",f=new eE;if(!r.enabled)return f;return f.get(s,async(l)=>{if(!c||!i)return{success:!1,message:"Database not configured"};let d=l.request.headers.get("x-user-id");if(!d)return l.set.status=401,{success:!1,message:"Unauthorized"};let w=(await c.select().from(i).where(tc(i.id,d)).limit(1))[0];if(!w)return l.set.status=404,{success:!1,message:"User not found"};let{password:h,..._}=w,g=null,R=[],k=[],M=[],C=[];if(r.includeProfile&&t){let m=t.profiles;if(m&&c)g=(await c.select().from(m).where(tc(m.userId,d)).limit(1))[0]||null}if(r.includeAddresses&&t){let m=t.addresses;if(m&&c)R=await c.select().from(m).where(tc(m.ownerId,d))}if(r.includePhones&&t){let m=t.phones;if(m&&c)k=await c.select().from(m).where(tc(m.ownerId,d))}if(r.includeFiles&&t){let m=t.files;if(m&&c)M=await c.select().from(m).where(tc(m.uploadedBy,d))}if(r.includeRoles&&t){let{userRoles:m,roles:A}=t;if(m&&A&&c){let D=(await c.select().from(m).where(tc(m.userId,d))).map((E)=>E.roleId);if(D.length>0){let{inArray:E}=await import("drizzle-orm");C=await c.select().from(A).where(E(A.id,D))}}}return e.info("[AUTH] Me endpoint accessed",{userId:d}),JSON.parse(JSON.stringify({success:!0,data:{user:_,profile:g,addresses:R,phones:k,files:M,roles:C}},(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"}}),f}var hd=()=>{};import{eq as zr,and as bs}from"drizzle-orm";import{Elysia as iE}from"elysia";function d2(n,r,t,o,a,c,e,i,s,f,l){let{db:d,logger:b,usersTable:w}=n,h=r.basePath,_={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||"lax",path:e?.path||"/"},g={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}},R=new iE;return R.get(`${h}/:provider`,async(k)=>{let M=k.params.provider;if(!r.isProviderEnabled(M))return k.set.status=404,{success:!1,message:`OAuth provider "${M}" is not enabled`};let C=k.query.link_user_id,N=k.query.redirect_url,m=r.buildAuthorizationUrl(M,C,N);return k.set.status=302,k.set.headers.Location=m,null},{detail:{tags:["Authentication"],summary:"OAuth Redirect",description:"Redirects to the OAuth provider authorization page"}}),R.get(`${h}/:provider/callback`,async(k)=>{let M=k.params.provider,C=k.query,{code:N,state:m,error:A,error_description:H}=C,D=r.errorRedirectUrl;if(A)return b.warn("[OAUTH] Provider returned error",{provider:M,error:A,error_description:H}),k.set.status=302,k.set.headers.Location=`${D}?error=${encodeURIComponent(H||A)}`,null;if(!N||!m)return k.set.status=302,k.set.headers.Location=`${D}?error=missing_code_or_state`,null;let E=r.consumeState(m);if(!E)return b.warn("[OAUTH] Invalid or expired state",{provider:M,state:m}),k.set.status=302,k.set.headers.Location=`${D}?error=invalid_state`,null;if(E.provider!==M)return b.warn("[OAUTH] State provider mismatch",{expected:E.provider,got:M}),k.set.status=302,k.set.headers.Location=`${D}?error=provider_mismatch`,null;if(!d||!w)return k.set.status=302,k.set.headers.Location=`${D}?error=server_error`,null;let S;try{S=await r.exchangeCode(M,N)}catch(en){return b.error("[OAUTH] Code exchange failed",{provider:M,error:en}),k.set.status=302,k.set.headers.Location=`${D}?error=token_exchange_failed`,null}let{profile:z,tokens:U}=S,P=n.oauthAccountsTable,p=null;if(E.linkUserId&&r.allowAccountLinking){if(p=E.linkUserId,P){let Yn=await d.select().from(P).where(bs(zr(P.provider,M),zr(P.providerAccountId,z.providerAccountId))).limit(1);if(Yn.length>0){let nr=Yn[0];if(nr.userId!==p)return k.set.status=302,k.set.headers.Location=`${D}?error=account_already_linked_to_another_user`,null;await d.update(P).set({accessToken:U.accessToken,refreshToken:U.refreshToken??null,tokenExpiresAt:U.expiresAt??null,scope:U.scope??null,rawProfile:z.rawProfile,lastUsedAt:new Date}).where(zr(P.id,nr.id))}else await d.insert(P).values({userId:p,provider:M,providerAccountId:z.providerAccountId,providerEmail:z.email??null,providerName:z.name??null,providerAvatarUrl:z.avatarUrl??null,accessToken:U.accessToken,refreshToken:U.refreshToken??null,tokenExpiresAt:U.expiresAt??null,scope:U.scope??null,rawProfile:z.rawProfile,isPrimary:!1,lastUsedAt:new Date})}b.info("[OAUTH] Account linked successfully",{userId:p,provider:M});let en=E.redirectUrl||r.successRedirectUrl;return k.set.status=302,k.set.headers.Location=`${en}?linked=true&provider=${M}`,null}if(P){let en=await d.select().from(P).where(bs(zr(P.provider,M),zr(P.providerAccountId,z.providerAccountId))).limit(1);if(en.length>0){let Yn=en[0];p=Yn.userId,await d.update(P).set({accessToken:U.accessToken,refreshToken:U.refreshToken??null,tokenExpiresAt:U.expiresAt??null,scope:U.scope??null,rawProfile:z.rawProfile,lastUsedAt:new Date}).where(zr(P.id,Yn.id))}}if(!p&&z.email){let en=await d.select().from(w).where(zr(w.email,z.email)).limit(1);if(en.length>0){if(p=en[0].id,P)await d.insert(P).values({userId:p,provider:M,providerAccountId:z.providerAccountId,providerEmail:z.email??null,providerName:z.name??null,providerAvatarUrl:z.avatarUrl??null,accessToken:U.accessToken,refreshToken:U.refreshToken??null,tokenExpiresAt:U.expiresAt??null,scope:U.scope??null,rawProfile:z.rawProfile,isPrimary:!1,lastUsedAt:new Date}).onConflictDoNothing();b.info("[OAUTH] Merged OAuth account with existing user by email",{userId:p,provider:M,email:z.email})}}if(!p){if(!r.autoCreateUser)return k.set.status=302,k.set.headers.Location=`${D}?error=user_not_found`,null;let en=z.email??`${M}_${z.providerAccountId}@oauth.local`;if(p=(await d.insert(w).values({email:en,password:null,verifiedAt:z.email?new Date:null,isActive:!0}).returning())[0].id,P)await d.insert(P).values({userId:p,provider:M,providerAccountId:z.providerAccountId,providerEmail:z.email??null,providerName:z.name??null,providerAvatarUrl:z.avatarUrl??null,accessToken:U.accessToken,refreshToken:U.refreshToken??null,tokenExpiresAt:U.expiresAt??null,scope:U.scope??null,rawProfile:z.rawProfile,isPrimary:!0,lastUsedAt:new Date});if(b.info("[OAUTH] Created new user via OAuth",{userId:p,provider:M,email:z.email}),r.sendInviteOnCreate&&z.email&&s?.isAvailable()&&f)try{let gn=La(),et=gt(gn),_n=new Date(Date.now()+Va("7d"));await f({userId:p,email:z.email,tokenHash:et,expiresAt:_n});let Jn=`${r.successRedirectUrl.replace(/\/$/,"").replace(/\/[^/]+$/,"/set-password")}?token=${gn}`;await s.sendEmail({to:z.email,subject:`Welcome to ${l??"the platform"} \u2014 Set your password`,html:`
77
+ `)).rows||[];return await R.transaction(async(C)=>{for(let N of M)await C.execute(Dl.raw(`UPDATE "${N.table_name}" SET "${N.column_name}" = '${b}' WHERE "${N.column_name}" = '${d}'`));await C.execute(Dl.raw(`UPDATE users SET id = '${b}' WHERE id = '${d}'`))}),a.info("[AUTH] User ID changed",{godminId:s,currentId:d,newId:b,email:_.email,affectedTables:M.map((C)=>C.table_name)}),await a.audit({entityName:"users",entityId:b,operation:"CHANGE_USER_ID",userId:s,summary:`Godmin changed user ID: ${d} \u2192 ${b} (${_.email})`,oldValues:{id:d},newValues:{id:b},ipAddress:i.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||"unknown",userAgent:i.request.headers.get("user-agent")||"unknown",path:new URL(i.request.url).pathname,query:""}),{success:!0,data:{oldId:d,newId:b,email:_.email,affectedTables:M.map((C)=>C.table_name)}}}catch(R){return a.error("[AUTH] Failed to change user ID",{error:R instanceof Error?R.message:String(R),currentId:d,newId:b}),{success:!1,message:R instanceof Error?R.message:"Failed to change user ID"}}},{body:Hl.Object({currentId:Hl.String(),newId:Hl.String()}),detail:{tags:["Authentication"],summary:"Change User ID",description:"Godmin: change a user's UUID while preserving all FK relations"}}),e}var zl=()=>{};import{eq as Ul}from"drizzle-orm";import{Elysia as lA,t as e_}from"elysia";function si(n,r,t,o,a,c){let{db:e,logger:i,usersTable:s}=n,f=new lA,l={accessTokenName:c?.accessTokenName||"access_token",refreshTokenName:c?.refreshTokenName||"refresh_token",sessionTokenName:c?.sessionTokenName||"session_token",accessTokenMaxAge:c?.accessTokenMaxAge||900,refreshTokenMaxAge:c?.refreshTokenMaxAge||604800,sessionTokenMaxAge:c?.sessionTokenMaxAge||900,secure:c?.secure??!0,sameSite:c?.sameSite||"strict",path:c?.path||"/"};return f.post("/auth/admin/impersonate",async(d)=>{if(!e||!s)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{targetUserId:w}=d.body,_=(await e.select().from(s).where(Ul(s.id,b)).limit(1))[0];if(!_||!_.isGod)return d.set.status=403,{success:!1,message:"Forbidden: godmin privileges required"};if(b===w)return d.set.status=400,{success:!1,message:"Cannot impersonate yourself"};let R=(await e.select().from(s).where(Ul(s.id,w)).limit(1))[0];if(!R)return d.set.status=404,{success:!1,message:"Target user not found"};let k=r(w),M=t(w),C=d.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||"unknown",N={userId:w,deviceInfo:{deviceName:"Impersonation Session",browserName:"Admin",osName:"Admin",ipAddress:C},loginMethod:"impersonation"},m=await o(N);if(a)await a(m,N);i.info("[AUTH] Impersonation started",{godminId:b,targetUserId:w,targetEmail:R.email}),await i.audit({entityName:"users",entityId:w,operation:"IMPERSONATE_START",userId:b,summary:`Godmin ${_.email} started impersonating ${R.email}`,ipAddress:d.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||"unknown",userAgent:d.request.headers.get("user-agent")||"unknown",path:new URL(d.request.url).pathname,query:""});let A=l.secure?"; Secure":"",H=`; Path=${l.path}; HttpOnly; SameSite=${l.sameSite}${A}`,D=[`${l.accessTokenName}=${k}${H}; Max-Age=${l.accessTokenMaxAge}`,`${l.refreshTokenName}=${M}${H}; Max-Age=${l.refreshTokenMaxAge}`,`${l.sessionTokenName}=${m}${H}; Max-Age=${l.sessionTokenMaxAge}`,`nucleus_impersonating_as=${w}${H}; Max-Age=${l.sessionTokenMaxAge}`,`nucleus_godmin_id=${b}${H}; Max-Age=${l.sessionTokenMaxAge}`,`nucleus_impersonating_email=${encodeURIComponent(String(R.email))}${H}; Max-Age=${l.sessionTokenMaxAge}`],E=JSON.stringify({success:!0,data:{targetUser:{id:R.id,email:R.email},godminId:b,sessionId:m}}),S=new Headers;S.set("Content-Type","application/json");for(let z of D)S.append("Set-Cookie",z);return new Response(E,{status:200,headers:S})},{body:e_.Object({targetUserId:e_.String()}),detail:{tags:["Authentication"],summary:"Impersonate User",description:"Godmin: start a session as another user"}}),f.post("/auth/admin/impersonate/stop",async(d)=>{if(!e||!s)return{success:!1,message:"Database not configured"};let b=d.request.headers.get("cookie")||"",h=Object.fromEntries(b.split(";").map((z)=>{let[U,...P]=z.trim().split("=");return[U?.trim(),P.join("=")]})).nucleus_godmin_id;if(!h)return d.set.status=400,{success:!1,message:"No active impersonation session"};let g=(await e.select().from(s).where(Ul(s.id,h)).limit(1))[0];if(!g)return d.set.status=404,{success:!1,message:"Godmin user not found"};let R=r(h),k=t(h),M=d.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||"unknown",C={userId:h,deviceInfo:{deviceName:"Restored Admin Session",browserName:"Admin",osName:"Admin",ipAddress:M},loginMethod:"impersonation_stop"},N=await o(C);if(a)await a(N,C);i.info("[AUTH] Impersonation stopped",{godminId:h}),await i.audit({entityName:"users",entityId:h,operation:"IMPERSONATE_STOP",userId:h,summary:`Godmin ${g.email} stopped impersonation`,ipAddress:d.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||"unknown",userAgent:d.request.headers.get("user-agent")||"unknown",path:new URL(d.request.url).pathname,query:""});let m=l.secure?"; Secure":"",A=`; Path=${l.path}; HttpOnly; SameSite=${l.sameSite}${m}`,H=`; Path=${l.path}; HttpOnly; SameSite=${l.sameSite}${m}; Max-Age=0`,D=[`${l.accessTokenName}=${R}${A}; Max-Age=${l.accessTokenMaxAge}`,`${l.refreshTokenName}=${k}${A}; Max-Age=${l.refreshTokenMaxAge}`,`${l.sessionTokenName}=${N}${A}; Max-Age=${l.sessionTokenMaxAge}`,`nucleus_impersonating_as=deleted${H}`,`nucleus_godmin_id=deleted${H}`,`nucleus_impersonating_email=deleted${H}`],E=JSON.stringify({success:!0,data:{godminUser:{id:g.id,email:g.email},sessionId:N}}),S=new Headers;S.set("Content-Type","application/json");for(let z of D)S.append("Set-Cookie",z);return new Response(E,{status:200,headers:S})},{detail:{tags:["Authentication"],summary:"Stop Impersonation",description:"Godmin: restore own session after impersonation"}}),f}var Bl=()=>{};import{Elysia as dA,t as Hr}from"elysia";function i_(n){let{captchaService:r,logger:t,basePath:o="/auth/captcha"}=n,a=new dA;if(!r.isEnabled())return a;return a.get(`${o}/generate`,async(c)=>{let{type:e,difficulty:i}=c.query,s=c.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||c.request.headers.get("x-real-ip")?.trim()||c.request.headers.get("cf-connecting-ip")?.trim()||"unknown",f=await r.generate(e,i,s);if(f.rateLimited)return c.set.status=429,{success:!1,message:f.message??"Too many requests. Please try again later."};return t.info("[CAPTCHA] Challenge generated via endpoint",{challengeId:f.challengeId,type:f.type,ipAddress:s}),{success:!0,data:{challengeId:f.challengeId,type:f.type,question:f.question,expiresAt:f.expiresAt,...f.imageData?{imageData:f.imageData}:{},...f.puzzleData?{puzzleData:{pieces:f.puzzleData.pieces}}:{}}}},{query:uA,detail:{tags:["Captcha"],summary:"Generate Captcha",description:"Generate a new captcha challenge"}}),a.post(`${o}/validate`,async(c)=>{let{challengeId:e,answer:i}=c.body,s=await r.validate(e,i);if(!s.valid)c.set.status=400;return s},{body:bA,detail:{tags:["Captcha"],summary:"Validate Captcha",description:"Validate a captcha answer"}}),a}var uA,bA;var s_=u(()=>{uA=Hr.Object({type:Hr.Optional(Hr.Union([Hr.Literal("math"),Hr.Literal("image"),Hr.Literal("puzzle"),Hr.Literal("text")])),difficulty:Hr.Optional(Hr.Union([Hr.Literal("easy"),Hr.Literal("medium"),Hr.Literal("hard")]))}),bA=Hr.Object({challengeId:Hr.String(),answer:Hr.String()})});function f_(n,r){let{db:t,logger:o}=n,a=r.route||"/auth/check";return(c)=>c.post(a,async(e)=>{let{body:i,request:s,set:f}=e,l=s.headers.get("x-user-id");if(!l)return f.status=401,{isSuccess:!1,message:"Unauthenticated",data:null};if(!t)return f.status=503,{isSuccess:!1,message:"Authorization service unavailable",data:null};let d=n.schemaTables;if(!d)return f.status=503,{isSuccess:!1,message:"Authorization tables not available",data:null};let{entity:b,method:w,fields:h,relations:_}=i;if(!b||!w)return f.status=400,{isSuccess:!1,message:"entity and method are required",data:null};let g=await _c({userId:l,method:w,entity:b,requestedFields:h,requestedRelations:_,db:t,schemaTables:d,logger:o});return{isSuccess:!0,message:g.authorized?"Authorized":"Forbidden",data:{authorized:g.authorized,reason:g.reason,allowedFields:g.allowedFields,allowedRelations:g.allowedRelations,scopeFilters:g.scopeFilters}}},{detail:{tags:["Auth"],summary:"Check authorization for a given entity and method",description:"Allows consumer/resource servers to perform full claim checks (including scope) against the IDP's authorization system."}})}var l_=u(()=>{zf()});import gA from"crypto";var{password:_A}=globalThis.Bun;async function Ao(n){return await _A.hash(n,{algorithm:"bcrypt",cost:10})}function fi(){return gA.randomBytes(32).toString("hex")}function Ja(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 d_(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 Xa=()=>{};import{sql as li}from"drizzle-orm";import{Elysia as mA,t as di}from"elysia";function ui(n){let{authConfig:r,registerConfig:t,emailService:o,appName:a}=n,{db:c,logger:e,usersTable:i}=r,s=new mA;if(!t.enabled||!t.emailVerification?.enabled)return s;let f="/verify-email",l="/resend-verification";return s.get(f,async(d)=>{if(!c||!i)return{success:!1,message:"Database not configured"};let b=d.query.token;if(!b)return{success:!1,message:"Verification token is required"};let w=await c.select().from(i).where(li`email_verification_token = ${b}`).limit(1);if(w.length===0)return e.warn("[AUTH] Email verification failed - invalid token"),{success:!1,message:"Invalid or expired verification token"};let h=w[0],_=h.emailVerificationTokenExpiresAt;if(_&&new Date>new Date(_))return e.warn("[AUTH] Email verification failed - token expired",{userId:h.id,email:h.email}),{success:!1,message:"Verification token has expired. Please request a new one."};if(await c.update(i).set({verifiedAt:new Date,emailVerificationToken:null,emailVerificationTokenExpiresAt:null}).where(li`id = ${h.id}`),e.info("[AUTH] Email verified successfully",{userId:h.id,email:h.email}),t.emailVerification?.templates?.welcome?.enabled&&o?.isAvailable())o.sendWelcomeEmail(h.email,h.email.split("@")[0]||"User",a||"Nucleus").catch((R)=>{e.error("[AUTH] Failed to send welcome email after verification",{email:h.email,error:R})});return{success:!0,message:"Email verified successfully. You can now log in.",data:{redirectUrl:t.emailVerification?.redirectUrl||"/login",verified:!0}}},{query:di.Object({token:di.String()}),detail:{tags:["Authentication"],summary:"Verify Email",description:"Verify user email address using the verification token"}}),s.post(l,async(d)=>{if(!c||!i)return{success:!1,message:"Database not configured"};if(!o?.isAvailable())return{success:!1,message:"Email service not available"};let{email:b}=d.body,w=await c.select().from(i).where(li`email = ${b}`).limit(1);if(w.length===0)return{success:!0,message:"If your email is registered, you will receive a verification email."};let h=w[0];if(h.verifiedAt)return{success:!1,message:"Email is already verified"};let _=t.emailVerification?.maxResendAttempts||3,g=h.emailVerificationAttempts||0;if(g>=_)return e.warn("[AUTH] Resend verification failed - max attempts reached",{email:b,attempts:g}),{success:!1,message:"Maximum resend attempts reached. Please contact support.",data:{maxAttemptsReached:!0,attemptsUsed:g,maxAttempts:_}};let R=t.emailVerification?.resendCooldown||"60s",k=Ja(R),M=h.emailVerificationSentAt;if(M){let E=Date.now()-new Date(M).getTime();if(E<k){let S=Math.ceil((k-E)/1000);return{success:!1,message:`Please wait ${S} seconds before requesting another verification email.`,data:{cooldownRemaining:S,canResendAt:new Date(Date.now()+S*1000).toISOString()}}}}let C=fi(),N=t.emailVerification?.tokenExpiresIn||"24h",m=new Date(Date.now()+Ja(N));await c.update(i).set({emailVerificationToken:C,emailVerificationTokenExpiresAt:m,emailVerificationSentAt:new Date,emailVerificationAttempts:g+1}).where(li`id = ${h.id}`);let H=`${(t.emailVerification?.redirectUrl||"http://localhost:3000/login").replace("/login","/verify-email")}?token=${C}`,D=await o.sendVerificationEmail(b,b.split("@")[0]||"User",H,a||"Nucleus");if(D.success)return e.info("[AUTH] Verification email resent",{email:b}),{success:!0,message:"Verification email sent. Please check your inbox.",data:{cooldownSeconds:Math.ceil(k/1000),canResendAt:new Date(Date.now()+k).toISOString(),attemptsRemaining:_-(g+1)}};return e.error("[AUTH] Failed to resend verification email",{email:b,error:D.error}),{success:!1,message:"Failed to send verification email. Please try again later."}},{body:di.Object({email:di.String({format:"email"})}),detail:{tags:["Authentication"],summary:"Resend Verification Email",description:"Resend the email verification link to the user"}}),s}var Wl=u(()=>{Xa()});import u_ from"crypto";function La(){return u_.randomBytes(32).toString("hex")}function gt(n){return u_.createHash("sha256").update(n).digest("hex")}function Va(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 Yc=()=>{};import{eq as wA}from"drizzle-orm";import{Elysia as hA,t as bi}from"elysia";function gi(n,r,t,o,a,c){let{db:e,logger:i,usersTable:s}=n,f=r.route||"/auth/invite",l=r.tokenExpiresIn||"7d",d=r.redirectUrl||"",b=new hA;if(!r.enabled)return b;if(b.post(f,async(w)=>{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:h}=w.body,_=await e.select().from(s).where(wA(s.email,h)).limit(1),g;if(_.length>0){let m=_[0];if(m.verifiedAt||m.password)return i.warn("[AUTH] Invite failed - user already verified",{email:h}),{success:!1,message:"User with this email is already verified"};g=m.id,i.info("[AUTH] Resending invitation to existing unverified user",{userId:g,email:h})}else{let m={email:h,password:null,emailVerified:!1,isLocked:!1,createdAt:new Date,updatedAt:new Date},H=(await e.insert(s).values(m).returning())[0];if(!H)return i.error("[AUTH] Failed to create invited user",{email:h}),{success:!1,message:"Failed to create user"};g=H.id,i.info("[AUTH] Invited user created",{userId:g,email:h})}let R=La(),k=gt(R),M=new Date(Date.now()+Va(l));await o({userId:g,email:h,tokenHash:k,expiresAt:M});let C=d?`${d}?token=${R}&invite=true`:`/auth/magic-link/verify?token=${R}`,N=await t.sendInvitationEmail(h,C,a||"Nucleus");if(!N.success)return i.error("[AUTH] Failed to send invitation email",{email:h,error:N.error}),{success:!0,message:"User created but failed to send invitation email",data:{id:g,email:h}};return i.info("[AUTH] Invitation email sent",{email:h,userId:g}),{success:!0,message:"Invitation sent successfully",data:{id:g,email:h}}},{body:$A,detail:{tags:["Authentication"],summary:"Invite User",description:"Invite a new user by sending them an email with a magic link to set their password"}}),c)b.post(`${f}/verify`,async(w)=>{let{token:h}=w.body;if(!h)return{success:!1,message:"Token is required"};let _=gt(h),g=await c(_);if(!g)return i.warn("[AUTH] Invalid invite verify token"),{success:!1,message:"Invalid or expired token"};if(new Date>g.expiresAt)return i.warn("[AUTH] Expired invite verify token",{email:g.email}),{success:!1,message:"Invalid or expired token"};return i.info("[AUTH] Invite token verified (not consumed)",{email:g.email,userId:g.userId}),{success:!0,data:{userId:g.userId,email:g.email}}},{body:bi.Object({token:bi.String()}),detail:{tags:["Authentication"],summary:"Verify Invite Token",description:"Validate an invite token without consuming it. Returns user info if valid."}});return b}var $A;var Yl=u(()=>{Yc();$A=bi.Object({email:bi.String({format:"email"})})});import{t as rr}from"elysia";var Jl,AA;var Xl=u(()=>{Jl=rr.Object({email:rr.String({format:"email"}),password:rr.String({minLength:1}),rememberMe:rr.Optional(rr.Boolean()),captchaId:rr.Optional(rr.String()),captchaAnswer:rr.Optional(rr.String())}),AA=rr.Object({success:rr.Boolean(),message:rr.Optional(rr.String()),data:rr.Optional(rr.Object({user:rr.Object({id:rr.String(),email:rr.String()}),accessToken:rr.String(),refreshToken:rr.String()}))})});var{password:RA}=globalThis.Bun;async function _i(n,r){try{return await RA.verify(n,r)}catch{return!1}}function mi(n,r){let t=n.toLowerCase(),o=["headlesschrome","headless","phantomjs","nightmare","selenium","webdriver","puppeteer","playwright"],a=["bot","crawler","spider","scraper","curl","wget","python-requests","python-urllib","java/","httpclient","go-http-client","node-fetch","axios","postman","insomnia","httpie"],c=o.some((_)=>t.includes(_)),e=a.some((_)=>t.includes(_)),i=c||e,s=[];if(c)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 f="unknown";if(t.includes("mobile")||t.includes("android")&&!t.includes("tablet"))f="mobile";else if(t.includes("tablet")||t.includes("ipad"))f="tablet";else if(t.includes("windows")||t.includes("macintosh")||t.includes("linux"))f="desktop";let l,d;if(c)l="Headless Browser";else if(e)l="Bot/Crawler";else if(t.includes("chrome")&&!t.includes("edg")){l="Chrome";let _=n.match(/Chrome\/(\d+\.\d+)/i);if(_?.[1])d=_[1]}else if(t.includes("firefox")){l="Firefox";let _=n.match(/Firefox\/(\d+\.\d+)/i);if(_?.[1])d=_[1]}else if(t.includes("safari")&&!t.includes("chrome")){l="Safari";let _=n.match(/Version\/(\d+\.\d+)/i);if(_?.[1])d=_[1]}else if(t.includes("edg")){l="Edge";let _=n.match(/Edg\/(\d+\.\d+)/i);if(_?.[1])d=_[1]}let b,w;if(t.includes("windows nt 10"))b="Windows",w="10/11";else if(t.includes("windows nt"))b="Windows";else if(t.includes("mac os x")){b="macOS";let _=n.match(/Mac OS X (\d+[._]\d+)/i);if(_?.[1])w=_[1].replace("_",".")}else if(t.includes("android")){b="Android";let _=n.match(/Android (\d+\.?\d*)/i);if(_?.[1])w=_[1]}else if(t.includes("iphone")||t.includes("ipad")){b="iOS";let _=n.match(/OS (\d+[._]\d+)/i);if(_?.[1])w=_[1].replace("_",".")}else if(t.includes("linux"))b="Linux";return{deviceName:l&&b?`${l} on ${b}`:"Unknown Device",deviceType:f,browserName:l,browserVersion:d,osName:b,osVersion:w,ipAddress:r,userAgent:n,locationCountry:void 0,locationCity:void 0,isHeadless:c,isBot:e,isSuspicious:i,suspiciousPatterns:s}}var wi=()=>{};import{eq as Ll}from"drizzle-orm";import{Elysia as kA}from"elysia";function hi(n,r,t,o,a,c,e,i,s){let{db:f,logger:l,usersTable:d}=n,b=r.route||"/auth/login",w={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||"/"},h=new kA;if(!r.enabled)return h;return h.post(b,async(_)=>{if(!f||!d)return{success:!1,message:"Database not configured"};let{email:g,password:R,rememberMe:k,captchaId:M,captchaAnswer:C}=_.body;if(s?.isEnabled()){if(!M||!C)return _.set.status=400,{success:!1,message:"Captcha is required"};let T=await s.validate(M,C);if(!T.valid)return _.set.status=400,{success:!1,message:T.message||"Invalid captcha",attemptsRemaining:T.attemptsRemaining}}let m=(await f.select().from(d).where(Ll(d.email,g)).limit(1))[0],A=new URL(_.request.url),H=_.request.headers.get("cf-connecting-ip")?.trim()||_.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||_.request.headers.get("x-real-ip")?.trim()||"unknown",D=_.request.headers.get("user-agent")||"unknown";if(!m)return l.warn("[AUTH] Login failed - user not found",{email:g}),await l.audit({entityName:"users",operation:"LOGIN_FAILED",summary:`Login failed: user not found (${g})`,ipAddress:H,userAgent:D,path:A.pathname,query:A.search}),{success:!1,message:"Invalid email or password"};if(m.isLocked)return l.warn("[AUTH] Login failed - account locked",{email:g,userId:m.id}),await l.audit({entityName:"users",entityId:m.id,operation:"LOGIN_FAILED",userId:m.id,summary:`Login failed: account locked (${g})`,ipAddress:H,userAgent:D,path:A.pathname,query:A.search}),{success:!1,message:"Account is locked"};if(!await _i(R,m.password)){let T=(m.failedLoginAttempts||0)+1;return await f.update(d).set({failedLoginAttempts:T,isLocked:T>=5,lockedUntil:T>=5?new Date(Date.now()+1800000):null}).where(Ll(d.id,m.id)),l.warn("[AUTH] Login failed - invalid password",{email:g,failedAttempts:T}),await l.audit({entityName:"users",entityId:m.id,operation:"LOGIN_FAILED",userId:m.id,summary:`Login failed: invalid password (${g}, attempt ${T})`,ipAddress:H,userAgent:D,path:A.pathname,query:A.search}),{success:!1,message:"Invalid email or password"}}await f.update(d).set({failedLoginAttempts:0,lastLoginAt:new Date,loginCount:(m.loginCount||0)+1}).where(Ll(d.id,m.id));let S={};_.request.headers.forEach((T,Jn)=>{S[Jn]=T}),l.info("[AUTH] Login request headers",{headers:S});let z=_.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim(),U=(T)=>!T||T==="127.0.0.1"||T==="::1"||T==="localhost"||T.startsWith("10.")||T.startsWith("192.168.")||T.startsWith("172."),P=_.request.headers.get("cf-connecting-ip")?.trim()||_.request.headers.get("true-client-ip")?.trim()||(!U(z)?z:void 0)||_.request.headers.get("x-real-ip")?.trim()||_.request.headers.get("x-client-ip")?.trim()||z||"127.0.0.1",p=_.request.headers.get("user-agent")||"Unknown Browser";l.info("[AUTH] Parsed device info",{ipAddress:P,userAgent:p});let K=mi(p,P);try{if(!U(P)){let T=await fetch(`http://ip-api.com/json/${P}?fields=country,city`);if(T.ok){let Jn=await T.json();if(Jn.country)K.locationCountry=Jn.country;if(Jn.city)K.locationCity=Jn.city}}}catch{}let B=[],L=[],Y=n.userRolesTable,Q=n.rolesTable,V=n.roleClaimsTable,q=n.claimsTable;if(f&&Y&&Q)try{let{eq:T,inArray:Jn}=await import("drizzle-orm"),qn=(await f.select().from(Y).where(T(Y.userId,m.id))).map((gr)=>gr.roleId);if(qn.length>0){if(B=(await f.select().from(Q).where(Jn(Q.id,qn))).map((Ar)=>Ar.name),V&&q){let Ar=await f.select().from(V).innerJoin(q,T(V.claimId,q.id)).where(Jn(V.roleId,qn)),Mt=new Set;for(let ir of Ar){let lr=ir.claims?.action;if(lr)Mt.add(lr)}L=Array.from(Mt)}}}catch{}let F=t(m.id,B.length>0?B:void 0,L.length>0?L:void 0),v=o(m.id),dn={userId:m.id,deviceInfo:K,loginMethod:"password",rememberMe:k},on=await a(dn);if(c)await c(on,dn);l.info("[AUTH] Login successful",{userId:m.id,email:g,rememberMe:k}),await l.audit({entityName:"users",entityId:m.id,operation:"LOGIN",userId:m.id,summary:`${g} logged in successfully`,ipAddress:P,userAgent:p,path:A.pathname,query:A.search});let un={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}},en=w.secure?"; Secure":"",Yn=`; Path=${w.path}; HttpOnly; SameSite=${w.sameSite}${en}`,nr=[];if(un.accessToken.setHeadersEnabled)nr.push(`${w.accessTokenName}=${F}${Yn}; Max-Age=${w.accessTokenMaxAge}`);if(un.refreshToken.setHeadersEnabled)nr.push(`${w.refreshTokenName}=${v}${Yn}; Max-Age=${w.refreshTokenMaxAge}`);if(un.sessionToken.setHeadersEnabled)nr.push(`${w.sessionTokenName}=${on}${Yn}; Max-Age=${w.sessionTokenMaxAge}`);_.set.headers["x-session-id"]=on;let gn={user:{id:m.id,email:m.email}};if(un.accessToken.returnJson)gn.accessToken=F;if(un.refreshToken.returnJson)gn.refreshToken=v;if(un.sessionToken.returnJson)gn.sessionId=on;let et=JSON.stringify({success:!0,data:gn}),_n=new Headers;_n.set("Content-Type","application/json"),_n.set("x-session-id",on);for(let T of nr)_n.append("Set-Cookie",T);return new Response(et,{status:200,headers:_n})},{body:Jl,detail:{tags:["Authentication"],summary:"Login",description:"Authenticate user with email and password"}}),h}var Vl=u(()=>{Xl();wi();Xl()});function b_(){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 $i}from"elysia";var EA;var g_=u(()=>{EA=$i.Object({success:$i.Boolean(),message:$i.Optional($i.String())})});import{Elysia as SA}from"elysia";function Ai(n,r,t,o){let{logger:a}=n,c=r.route||"/auth/logout",e=new SA;if(!r.enabled)return e;return e.post(c,async(i)=>{let s=i.request.headers.get("x-session-id"),f=i.request.headers.get("x-user-id");if(s){if(await t(s),o)await o(s,"user_logout")}let l=b_();for(let[b,w]of Object.entries(l))i.set.headers[b]=w;a.info("[AUTH] Logout successful",{userId:f,sessionId:s});let d=new URL(i.request.url);return a.audit({entityName:"users",entityId:f||void 0,operation:"LOGOUT",userId:f||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:d.pathname,query:d.search}),{success:!0,message:"Logged out successfully"}},{detail:{tags:["Authentication"],summary:"Logout",description:"Logout and invalidate session"}}),e}var Cl=u(()=>{g_()});var Er={};co(Er,{IsUndefined:()=>Zn,IsUint8Array:()=>vt,IsSymbol:()=>Nl,IsString:()=>Ln,IsRegExp:()=>Xc,IsObject:()=>zn,IsNumber:()=>Or,IsNull:()=>Ol,IsIterator:()=>Gl,IsFunction:()=>Pl,IsDate:()=>Ko,IsBoolean:()=>Kt,IsBigInt:()=>Jc,IsAsyncIterator:()=>Ql,IsArray:()=>In,HasPropertyKey:()=>Ri});function Ri(n,r){return r in n}function Ql(n){return zn(n)&&!In(n)&&!vt(n)&&Symbol.asyncIterator in n}function In(n){return Array.isArray(n)}function Jc(n){return typeof n==="bigint"}function Kt(n){return typeof n==="boolean"}function Ko(n){return n instanceof globalThis.Date}function Pl(n){return typeof n==="function"}function Gl(n){return zn(n)&&!In(n)&&!vt(n)&&Symbol.iterator in n}function Ol(n){return n===null}function Or(n){return typeof n==="number"}function zn(n){return typeof n==="object"&&n!==null}function Xc(n){return n instanceof globalThis.RegExp}function Ln(n){return typeof n==="string"}function Nl(n){return typeof n==="symbol"}function vt(n){return n instanceof globalThis.Uint8Array}function Zn(n){return n===void 0}function MA(n){return n.map((r)=>ki(r))}function DA(n){return new Date(n.getTime())}function HA(n){return new Uint8Array(n)}function zA(n){return new RegExp(n.source,n.flags)}function UA(n){let r={};for(let t of Object.getOwnPropertyNames(n))r[t]=ki(n[t]);for(let t of Object.getOwnPropertySymbols(n))r[t]=ki(n[t]);return r}function ki(n){return In(n)?MA(n):Ko(n)?DA(n):vt(n)?HA(n):Xc(n)?zA(n):zn(n)?UA(n):n}function Qn(n){return ki(n)}var Br=()=>{};function Ca(n,r){return r===void 0?Qn(n):Qn({...r,...n})}var Ei=u(()=>{Br()});var xl=u(()=>{Ei();Br()});function __(n){return n!==null&&typeof n==="object"}function m_(n){return globalThis.Array.isArray(n)&&!globalThis.ArrayBuffer.isView(n)}function w_(n){return n===void 0}function h_(n){return typeof n==="number"}var $_=()=>{};var Si;var A_=u(()=>{$_();(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=__(e);return n.AllowArrayObject?i:i&&!m_(e)}n.IsObjectLike=t;function o(e){return t(e)&&!(e instanceof Date)&&!(e instanceof Uint8Array)}n.IsRecordLike=o;function a(e){return n.AllowNaN?h_(e):Number.isFinite(e)}n.IsNumberLike=a;function c(e){let i=w_(e);return n.AllowNullVoid?i||e===null:i}n.IsVoidLike=c})(Si||(Si={}))});function BA(n){return globalThis.Object.freeze(n).map((r)=>Lc(r))}function WA(n){return n}function YA(n){return n}function JA(n){return n}function XA(n){let r={};for(let t of Object.getOwnPropertyNames(n))r[t]=Lc(n[t]);for(let t of Object.getOwnPropertySymbols(n))r[t]=Lc(n[t]);return globalThis.Object.freeze(r)}function Lc(n){return In(n)?BA(n):Ko(n)?WA(n):vt(n)?YA(n):Xc(n)?JA(n):zn(n)?XA(n):n}var R_=()=>{};function J(n,r){let t=r!==void 0?{...r,...n}:n;switch(Si.InstanceMode){case"freeze":return Lc(t);case"clone":return Qn(t);default:return t}}var y=u(()=>{A_();R_();Br()});var Tt=u(()=>{y()});var mr;var k_=u(()=>{mr=class mr extends Error{constructor(n){super(n)}}});var Yt=u(()=>{k_()});var tr,_t,wr,yr,O;var Vc=u(()=>{tr=Symbol.for("TypeBox.Transform"),_t=Symbol.for("TypeBox.Readonly"),wr=Symbol.for("TypeBox.Optional"),yr=Symbol.for("TypeBox.Hint"),O=Symbol.for("TypeBox.Kind")});var rn=u(()=>{Vc()});function Qa(n){return zn(n)&&n[_t]==="Readonly"}function Wr(n){return zn(n)&&n[wr]==="Optional"}function ql(n){return mn(n,"Any")}function Fl(n){return mn(n,"Argument")}function mt(n){return mn(n,"Array")}function vo(n){return mn(n,"AsyncIterator")}function To(n){return mn(n,"BigInt")}function It(n){return mn(n,"Boolean")}function wt(n){return mn(n,"Computed")}function ht(n){return mn(n,"Constructor")}function LA(n){return mn(n,"Date")}function $t(n){return mn(n,"Function")}function At(n){return mn(n,"Integer")}function Nn(n){return mn(n,"Intersect")}function Io(n){return mn(n,"Iterator")}function mn(n,r){return zn(n)&&O in n&&n[O]===r}function Mi(n){return Kt(n)||Or(n)||Ln(n)}function Nr(n){return mn(n,"Literal")}function xr(n){return mn(n,"MappedKey")}function Pn(n){return mn(n,"MappedResult")}function Ro(n){return mn(n,"Never")}function VA(n){return mn(n,"Not")}function Cc(n){return mn(n,"Null")}function Rt(n){return mn(n,"Number")}function yn(n){return mn(n,"Object")}function Zo(n){return mn(n,"Promise")}function yo(n){return mn(n,"Record")}function jn(n){return mn(n,"Ref")}function jl(n){return mn(n,"RegExp")}function Zt(n){return mn(n,"String")}function Qc(n){return mn(n,"Symbol")}function qr(n){return mn(n,"TemplateLiteral")}function CA(n){return mn(n,"This")}function ko(n){return zn(n)&&tr in n}function Fr(n){return mn(n,"Tuple")}function Pc(n){return mn(n,"Undefined")}function wn(n){return mn(n,"Union")}function QA(n){return mn(n,"Uint8Array")}function PA(n){return mn(n,"Unknown")}function GA(n){return mn(n,"Unsafe")}function OA(n){return mn(n,"Void")}function NA(n){return zn(n)&&O in n&&Ln(n[O])}function jr(n){return ql(n)||Fl(n)||mt(n)||It(n)||To(n)||vo(n)||wt(n)||ht(n)||LA(n)||$t(n)||At(n)||Nn(n)||Io(n)||Nr(n)||xr(n)||Pn(n)||Ro(n)||VA(n)||Cc(n)||Rt(n)||yn(n)||Zo(n)||yo(n)||jn(n)||jl(n)||Zt(n)||Qc(n)||qr(n)||CA(n)||Fr(n)||Pc(n)||wn(n)||QA(n)||PA(n)||GA(n)||OA(n)||NA(n)}var Rn=u(()=>{rn()});var $={};co($,{TypeGuardUnknownTypeError:()=>E_,IsVoid:()=>lm,IsUnsafe:()=>fm,IsUnknown:()=>sm,IsUnionLiteral:()=>IA,IsUnion:()=>vl,IsUndefined:()=>em,IsUint8Array:()=>im,IsTuple:()=>cm,IsTransform:()=>am,IsThis:()=>om,IsTemplateLiteral:()=>tm,IsSymbol:()=>rm,IsString:()=>nm,IsSchema:()=>br,IsRegExp:()=>y_,IsRef:()=>Z_,IsRecursive:()=>TA,IsRecord:()=>I_,IsReadonly:()=>jA,IsProperties:()=>Di,IsPromise:()=>T_,IsOptional:()=>pA,IsObject:()=>v_,IsNumber:()=>K_,IsNull:()=>p_,IsNot:()=>j_,IsNever:()=>F_,IsMappedResult:()=>q_,IsMappedKey:()=>x_,IsLiteralValue:()=>N_,IsLiteralString:()=>G_,IsLiteralNumber:()=>O_,IsLiteralBoolean:()=>vA,IsLiteral:()=>Oc,IsKindOf:()=>ln,IsKind:()=>dm,IsIterator:()=>P_,IsIntersect:()=>Q_,IsInteger:()=>C_,IsImport:()=>KA,IsFunction:()=>V_,IsDate:()=>L_,IsConstructor:()=>X_,IsComputed:()=>J_,IsBoolean:()=>Y_,IsBigInt:()=>W_,IsAsyncIterator:()=>B_,IsArray:()=>U_,IsArgument:()=>z_,IsAny:()=>H_});function S_(n){try{return new RegExp(n),!0}catch{return!1}}function pl(n){if(!Ln(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 M_(n){return Kl(n)||br(n)}function Gc(n){return Zn(n)||Jc(n)}function Vn(n){return Zn(n)||Or(n)}function Kl(n){return Zn(n)||Kt(n)}function Un(n){return Zn(n)||Ln(n)}function qA(n){return Zn(n)||Ln(n)&&pl(n)&&S_(n)}function FA(n){return Zn(n)||Ln(n)&&pl(n)}function D_(n){return Zn(n)||br(n)}function jA(n){return zn(n)&&n[_t]==="Readonly"}function pA(n){return zn(n)&&n[wr]==="Optional"}function H_(n){return ln(n,"Any")&&Un(n.$id)}function z_(n){return ln(n,"Argument")&&Or(n.index)}function U_(n){return ln(n,"Array")&&n.type==="array"&&Un(n.$id)&&br(n.items)&&Vn(n.minItems)&&Vn(n.maxItems)&&Kl(n.uniqueItems)&&D_(n.contains)&&Vn(n.minContains)&&Vn(n.maxContains)}function B_(n){return ln(n,"AsyncIterator")&&n.type==="AsyncIterator"&&Un(n.$id)&&br(n.items)}function W_(n){return ln(n,"BigInt")&&n.type==="bigint"&&Un(n.$id)&&Gc(n.exclusiveMaximum)&&Gc(n.exclusiveMinimum)&&Gc(n.maximum)&&Gc(n.minimum)&&Gc(n.multipleOf)}function Y_(n){return ln(n,"Boolean")&&n.type==="boolean"&&Un(n.$id)}function J_(n){return ln(n,"Computed")&&Ln(n.target)&&In(n.parameters)&&n.parameters.every((r)=>br(r))}function X_(n){return ln(n,"Constructor")&&n.type==="Constructor"&&Un(n.$id)&&In(n.parameters)&&n.parameters.every((r)=>br(r))&&br(n.returns)}function L_(n){return ln(n,"Date")&&n.type==="Date"&&Un(n.$id)&&Vn(n.exclusiveMaximumTimestamp)&&Vn(n.exclusiveMinimumTimestamp)&&Vn(n.maximumTimestamp)&&Vn(n.minimumTimestamp)&&Vn(n.multipleOfTimestamp)}function V_(n){return ln(n,"Function")&&n.type==="Function"&&Un(n.$id)&&In(n.parameters)&&n.parameters.every((r)=>br(r))&&br(n.returns)}function KA(n){return ln(n,"Import")&&Ri(n,"$defs")&&zn(n.$defs)&&Di(n.$defs)&&Ri(n,"$ref")&&Ln(n.$ref)&&n.$ref in n.$defs}function C_(n){return ln(n,"Integer")&&n.type==="integer"&&Un(n.$id)&&Vn(n.exclusiveMaximum)&&Vn(n.exclusiveMinimum)&&Vn(n.maximum)&&Vn(n.minimum)&&Vn(n.multipleOf)}function Di(n){return zn(n)&&Object.entries(n).every(([r,t])=>pl(r)&&br(t))}function Q_(n){return ln(n,"Intersect")&&(Ln(n.type)&&n.type!=="object"?!1:!0)&&In(n.allOf)&&n.allOf.every((r)=>br(r)&&!am(r))&&Un(n.type)&&(Kl(n.unevaluatedProperties)||D_(n.unevaluatedProperties))&&Un(n.$id)}function P_(n){return ln(n,"Iterator")&&n.type==="Iterator"&&Un(n.$id)&&br(n.items)}function ln(n,r){return zn(n)&&O in n&&n[O]===r}function G_(n){return Oc(n)&&Ln(n.const)}function O_(n){return Oc(n)&&Or(n.const)}function vA(n){return Oc(n)&&Kt(n.const)}function Oc(n){return ln(n,"Literal")&&Un(n.$id)&&N_(n.const)}function N_(n){return Kt(n)||Or(n)||Ln(n)}function x_(n){return ln(n,"MappedKey")&&In(n.keys)&&n.keys.every((r)=>Or(r)||Ln(r))}function q_(n){return ln(n,"MappedResult")&&Di(n.properties)}function F_(n){return ln(n,"Never")&&zn(n.not)&&Object.getOwnPropertyNames(n.not).length===0}function j_(n){return ln(n,"Not")&&br(n.not)}function p_(n){return ln(n,"Null")&&n.type==="null"&&Un(n.$id)}function K_(n){return ln(n,"Number")&&n.type==="number"&&Un(n.$id)&&Vn(n.exclusiveMaximum)&&Vn(n.exclusiveMinimum)&&Vn(n.maximum)&&Vn(n.minimum)&&Vn(n.multipleOf)}function v_(n){return ln(n,"Object")&&n.type==="object"&&Un(n.$id)&&Di(n.properties)&&M_(n.additionalProperties)&&Vn(n.minProperties)&&Vn(n.maxProperties)}function T_(n){return ln(n,"Promise")&&n.type==="Promise"&&Un(n.$id)&&br(n.item)}function I_(n){return ln(n,"Record")&&n.type==="object"&&Un(n.$id)&&M_(n.additionalProperties)&&zn(n.patternProperties)&&((r)=>{let t=Object.getOwnPropertyNames(r.patternProperties);return t.length===1&&S_(t[0])&&zn(r.patternProperties)&&br(r.patternProperties[t[0]])})(n)}function TA(n){return zn(n)&&yr in n&&n[yr]==="Recursive"}function Z_(n){return ln(n,"Ref")&&Un(n.$id)&&Ln(n.$ref)}function y_(n){return ln(n,"RegExp")&&Un(n.$id)&&Ln(n.source)&&Ln(n.flags)&&Vn(n.maxLength)&&Vn(n.minLength)}function nm(n){return ln(n,"String")&&n.type==="string"&&Un(n.$id)&&Vn(n.minLength)&&Vn(n.maxLength)&&qA(n.pattern)&&FA(n.format)}function rm(n){return ln(n,"Symbol")&&n.type==="symbol"&&Un(n.$id)}function tm(n){return ln(n,"TemplateLiteral")&&n.type==="string"&&Ln(n.pattern)&&n.pattern[0]==="^"&&n.pattern[n.pattern.length-1]==="$"}function om(n){return ln(n,"This")&&Un(n.$id)&&Ln(n.$ref)}function am(n){return zn(n)&&tr in n}function cm(n){return ln(n,"Tuple")&&n.type==="array"&&Un(n.$id)&&Or(n.minItems)&&Or(n.maxItems)&&n.minItems===n.maxItems&&(Zn(n.items)&&Zn(n.additionalItems)&&n.minItems===0||In(n.items)&&n.items.every((r)=>br(r)))}function em(n){return ln(n,"Undefined")&&n.type==="undefined"&&Un(n.$id)}function IA(n){return vl(n)&&n.anyOf.every((r)=>G_(r)||O_(r))}function vl(n){return ln(n,"Union")&&Un(n.$id)&&zn(n)&&In(n.anyOf)&&n.anyOf.every((r)=>br(r))}function im(n){return ln(n,"Uint8Array")&&n.type==="Uint8Array"&&Un(n.$id)&&Vn(n.minByteLength)&&Vn(n.maxByteLength)}function sm(n){return ln(n,"Unknown")&&Un(n.$id)}function fm(n){return ln(n,"Unsafe")}function lm(n){return ln(n,"Void")&&n.type==="void"&&Un(n.$id)}function dm(n){return zn(n)&&O in n&&Ln(n[O])&&!xA.includes(n[O])}function br(n){return zn(n)&&(H_(n)||z_(n)||U_(n)||Y_(n)||W_(n)||B_(n)||J_(n)||X_(n)||L_(n)||V_(n)||C_(n)||Q_(n)||P_(n)||Oc(n)||x_(n)||q_(n)||F_(n)||j_(n)||p_(n)||K_(n)||v_(n)||T_(n)||I_(n)||Z_(n)||y_(n)||nm(n)||rm(n)||tm(n)||om(n)||cm(n)||em(n)||vl(n)||im(n)||sm(n)||fm(n)||lm(n)||dm(n))}var E_,xA;var um=u(()=>{rn();Yt();E_=class E_ extends mr{};xA=["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 Tl=u(()=>{Rn();um()});var bm=()=>{};var gm="(true|false)",Hi="(0|[1-9][0-9]*)",_m="(.*)",Eo="^(0|[1-9][0-9]*)$",So="^(.*)$",mm="^(?!.*)$";var Nc=()=>{};var wm=()=>{};var hm=()=>{};var $m=u(()=>{wm();hm()});function Am(n,r){return n.includes(r)}function Rm(n){return[...new Set(n)]}function nR(n,r){return n.filter((t)=>r.includes(t))}function rR(n,r){return n.reduce((t,o)=>{return nR(t,o)},r)}function km(n){return n.length===1?n[0]:n.length>1?rR(n.slice(1),n[0]):[]}function Em(n){let r=[];for(let t of n)r.push(...t);return r}var xc=()=>{};function Mo(n){return J({[O]:"Any"},n)}var Sm=u(()=>{Tt();rn()});var qc=u(()=>{Sm()});function Pa(n,r){return J({[O]:"Array",type:"array",items:n},r)}var Mm=u(()=>{y();rn()});var Fc=u(()=>{Mm()});function Dm(n){return J({[O]:"Argument",index:n})}var Hm=u(()=>{y();rn()});var Il=u(()=>{Hm()});function Ga(n,r){return J({[O]:"AsyncIterator",type:"AsyncIterator",items:n},r)}var zm=u(()=>{rn();y()});var jc=u(()=>{zm()});function Cn(n,r,t){return J({[O]:"Computed",target:n,parameters:r},t)}var Um=u(()=>{Tt();Vc()});var Do=u(()=>{Um()});function tR(n,r){let{[r]:t,...o}=n;return o}function xn(n,r){return r.reduce((t,o)=>tR(t,o),n)}var no=()=>{};function hn(n){return J({[O]:"Never",not:{}},n)}var Bm=u(()=>{y();rn()});var hr=u(()=>{Bm()});var Wm=()=>{};function kn(n){return J({[O]:"MappedResult",properties:n})}var Zl=u(()=>{y();rn()});function Oa(n,r,t){return J({[O]:"Constructor",type:"Constructor",parameters:n,returns:r},t)}var Ym=u(()=>{y();rn()});var pc=u(()=>{Ym()});function Jt(n,r,t){return J({[O]:"Function",type:"Function",parameters:n,returns:r},t)}var Jm=u(()=>{y();rn()});var na=u(()=>{Jm()});function Kc(n,r){return J({[O]:"Union",anyOf:n},r)}var yl=u(()=>{y();rn()});function oR(n){return n.some((r)=>Wr(r))}function Xm(n){return n.map((r)=>Wr(r)?aR(r):r)}function aR(n){return xn(n,[wr])}function cR(n,r){return oR(n)?Sr(Kc(Xm(n),r)):Kc(Xm(n),r)}function Xt(n,r){return n.length===1?J(n[0],r):n.length===0?hn(r):cR(n,r)}var Lm=u(()=>{y();rn();no();hr();ro();yl();Rn()});var Vm=()=>{};function Dn(n,r){return n.length===0?hn(r):n.length===1?J(n[0],r):Kc(n,r)}var Cm=u(()=>{hr();y();yl()});var or=u(()=>{Lm();Vm();Cm()});function eR(n){return n.replace(/\\\$/g,"$").replace(/\\\*/g,"*").replace(/\\\^/g,"^").replace(/\\\|/g,"|").replace(/\\\(/g,"(").replace(/\\\)/g,")")}function r0(n,r,t){return n[r]===t&&n.charCodeAt(r-1)!==92}function to(n,r){return r0(n,r,"(")}function vc(n,r){return r0(n,r,")")}function Qm(n,r){return r0(n,r,"|")}function iR(n){if(!(to(n,0)&&vc(n,n.length-1)))return!1;let r=0;for(let t=0;t<n.length;t++){if(to(n,t))r+=1;if(vc(n,t))r-=1;if(r===0&&t!==n.length-1)return!1}return!0}function sR(n){return n.slice(1,n.length-1)}function fR(n){let r=0;for(let t=0;t<n.length;t++){if(to(n,t))r+=1;if(vc(n,t))r-=1;if(Qm(n,t)&&r===0)return!0}return!1}function lR(n){for(let r=0;r<n.length;r++)if(to(n,r))return!0;return!1}function dR(n){let[r,t]=[0,0],o=[];for(let c=0;c<n.length;c++){if(to(n,c))r+=1;if(vc(n,c))r-=1;if(Qm(n,c)&&r===0){let e=n.slice(t,c);if(e.length>0)o.push(Na(e));t=c+1}}let a=n.slice(t);if(a.length>0)o.push(Na(a));if(o.length===0)return{type:"const",const:""};if(o.length===1)return o[0];return{type:"or",expr:o}}function uR(n){function r(a,c){if(!to(a,c))throw new n0("TemplateLiteralParser: Index must point to open parens");let e=0;for(let i=c;i<a.length;i++){if(to(a,i))e+=1;if(vc(a,i))e-=1;if(e===0)return[c,i]}throw new n0("TemplateLiteralParser: Unclosed group parens in expression")}function t(a,c){for(let e=c;e<a.length;e++)if(to(a,e))return[c,e];return[c,a.length]}let o=[];for(let a=0;a<n.length;a++)if(to(n,a)){let[c,e]=r(n,a),i=n.slice(c,e+1);o.push(Na(i)),a=e}else{let[c,e]=t(n,a),i=n.slice(c,e);if(i.length>0)o.push(Na(i));a=e-1}return o.length===0?{type:"const",const:""}:o.length===1?o[0]:{type:"and",expr:o}}function Na(n){return iR(n)?Na(sR(n)):fR(n)?dR(n):lR(n)?uR(n):{type:"const",const:eR(n)}}function xa(n){return Na(n.slice(1,n.length-1))}var n0;var zi=u(()=>{Yt();n0=class n0 extends mr{}});function bR(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 gR(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 _R(n){return n.type==="const"&&n.const===".*"}function ra(n){return bR(n)||_R(n)?!1:gR(n)?!0:n.type==="and"?n.expr.every((r)=>ra(r)):n.type==="or"?n.expr.every((r)=>ra(r)):n.type==="const"?!0:(()=>{throw new Pm("Unknown expression type")})()}function Gm(n){let r=xa(n.pattern);return ra(r)}var Pm;var t0=u(()=>{zi();Yt();Pm=class Pm extends mr{}});function*Nm(n){if(n.length===1)return yield*n[0];for(let r of n[0])for(let t of Nm(n.slice(1)))yield`${r}${t}`}function*mR(n){return yield*Nm(n.expr.map((r)=>[...Tc(r)]))}function*wR(n){for(let r of n.expr)yield*Tc(r)}function*hR(n){return yield n.const}function*Tc(n){return n.type==="and"?yield*mR(n):n.type==="or"?yield*wR(n):n.type==="const"?yield*hR(n):(()=>{throw new Om("Unknown expression")})()}function Ui(n){let r=xa(n.pattern);return ra(r)?[...Tc(r)]:[]}var Om;var o0=u(()=>{t0();zi();Yt();Om=class Om extends mr{}});function En(n,r){return J({[O]:"Literal",const:n,type:typeof n},r)}var xm=u(()=>{y();rn()});var Yr=u(()=>{xm()});function Bi(n){return J({[O]:"Boolean",type:"boolean"},n)}var qm=u(()=>{rn();Tt()});var Wi=u(()=>{qm()});function qa(n){return J({[O]:"BigInt",type:"bigint"},n)}var Fm=u(()=>{rn();Tt()});var Ic=u(()=>{Fm()});function nt(n){return J({[O]:"Number",type:"number"},n)}var jm=u(()=>{y();rn()});var ta=u(()=>{jm()});function kt(n){return J({[O]:"String",type:"string"},n)}var pm=u(()=>{y();rn()});var Fa=u(()=>{pm()});function*$R(n){let r=n.trim().replace(/"|'/g,"");return r==="boolean"?yield Bi():r==="number"?yield nt():r==="bigint"?yield qa():r==="string"?yield kt():yield(()=>{let t=r.split("|").map((o)=>En(o.trim()));return t.length===0?hn():t.length===1?t[0]:Xt(t)})()}function*AR(n){if(n[1]!=="{"){let r=En("$"),t=a0(n.slice(1));return yield*[r,...t]}for(let r=2;r<n.length;r++)if(n[r]==="}"){let t=$R(n.slice(2,r)),o=a0(n.slice(r+1));return yield*[...t,...o]}yield En(n)}function*a0(n){for(let r=0;r<n.length;r++)if(n[r]==="$"){let t=En(n.slice(0,r)),o=AR(n.slice(r));return yield*[t,...o]}yield En(n)}function Km(n){return[...a0(n)]}var c0=u(()=>{Yr();Wi();Ic();ta();Fa();or();hr()});function RR(n){return n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Tm(n,r){return qr(n)?n.pattern.slice(1,n.pattern.length-1):wn(n)?`(${n.anyOf.map((t)=>Tm(t,r)).join("|")})`:Rt(n)?`${r}${Hi}`:At(n)?`${r}${Hi}`:To(n)?`${r}${Hi}`:Zt(n)?`${r}${_m}`:Nr(n)?`${r}${RR(n.const.toString())}`:It(n)?`${r}${gm}`:(()=>{throw new vm(`Unexpected Kind '${n[O]}'`)})()}function e0(n){return`^${n.map((r)=>Tm(r,"")).join("")}$`}var vm;var i0=u(()=>{Nc();rn();Yt();Rn();vm=class vm extends mr{}});function oa(n){let t=Ui(n).map((o)=>En(o));return Xt(t)}var Im=u(()=>{or();Yr();o0()});function Yi(n,r){let t=Ln(n)?e0(Km(n)):e0(n);return J({[O]:"TemplateLiteral",type:"string",pattern:t},r)}var Zm=u(()=>{y();c0();i0();rn()});var oo=u(()=>{t0();o0();c0();zi();i0();Im();Zm()});function kR(n){return Ui(n).map((t)=>t.toString())}function ER(n){let r=[];for(let t of n)r.push(...Jr(t));return r}function SR(n){return[n.toString()]}function Jr(n){return[...new Set(qr(n)?kR(n):wn(n)?ER(n.anyOf):Nr(n)?SR(n.const):Rt(n)?["[number]"]:At(n)?["[number]"]:[])]}var Ji=u(()=>{oo();Rn()});function MR(n,r,t){let o={};for(let a of Object.getOwnPropertyNames(r))o[a]=Ho(n,Jr(r[a]),t);return o}function DR(n,r,t){return MR(n,r.properties,t)}function ym(n,r,t){let o=DR(n,r,t);return kn(o)}var s0=u(()=>{fr();Ji();Lt()});function rw(n,r){return n.map((t)=>tw(t,r))}function HR(n){return n.filter((r)=>!Ro(r))}function zR(n,r){return Xi(HR(rw(n,r)))}function UR(n){return n.some((r)=>Ro(r))?[]:n}function BR(n,r){return Xt(UR(rw(n,r)))}function WR(n,r){return r in n?n[r]:r==="[number]"?Xt(n):hn()}function YR(n,r){return r==="[number]"?n:hn()}function JR(n,r){return r in n?n[r]:hn()}function tw(n,r){return Nn(n)?zR(n.allOf,r):wn(n)?BR(n.anyOf,r):Fr(n)?WR(n.items??[],r):mt(n)?YR(n.items,r):yn(n)?JR(n.properties,r):hn()}function f0(n,r){return r.map((t)=>tw(n,t))}function nw(n,r){return Xt(f0(n,r))}function Ho(n,r,t){if(jn(n)||jn(r)){if(!jr(n)||!jr(r))throw new mr("Index types using Ref parameters require both Type and Key to be of TSchema");return Cn("Index",[n,r])}if(Pn(r))return ym(n,r,t);if(xr(r))return ow(n,r,t);return J(jr(r)?nw(n,Jr(r)):nw(n,r),t)}var l0=u(()=>{y();Yt();Do();hr();rt();or();Ji();d0();s0();Rn()});function XR(n,r,t){return{[r]:Ho(n,[r],Qn(t))}}function LR(n,r,t){return r.reduce((o,a)=>{return{...o,...XR(n,a,t)}},{})}function VR(n,r,t){return LR(n,r.keys,t)}function ow(n,r,t){let o=VR(n,r,t);return kn(o)}var d0=u(()=>{l0();fr();Br()});var Lt=u(()=>{d0();s0();Ji();l0()});function ja(n,r){return J({[O]:"Iterator",type:"Iterator",items:n},r)}var aw=u(()=>{y();rn()});var Zc=u(()=>{aw()});function CR(n){return globalThis.Object.keys(n).filter((r)=>!Wr(n[r]))}function QR(n,r){let t=CR(n),o=t.length>0?{[O]:"Object",type:"object",required:t,properties:n}:{[O]:"Object",type:"object",properties:n};return J(o,r)}var Bn;var cw=u(()=>{y();rn();Rn();Bn=QR});var pr=u(()=>{cw()});function Li(n,r){return J({[O]:"Promise",type:"Promise",item:n},r)}var ew=u(()=>{y();rn()});var Vi=u(()=>{ew()});function PR(n){return J(xn(n,[_t]))}function GR(n){return J({...n,[_t]:"Readonly"})}function OR(n,r){return r===!1?PR(n):GR(n)}function Xr(n,r){let t=r??!0;return Pn(n)?iw(n,t):OR(n,t)}var u0=u(()=>{y();rn();no();b0();Rn()});function NR(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(n))t[o]=Xr(n[o],r);return t}function xR(n,r){return NR(n.properties,r)}function iw(n,r){let t=xR(n,r);return kn(t)}var b0=u(()=>{fr();u0()});var aa=u(()=>{b0();u0()});function tt(n,r){return J(n.length>0?{[O]:"Tuple",type:"array",items:n,additionalItems:!1,minItems:n.length,maxItems:n.length}:{[O]:"Tuple",type:"array",minItems:n.length,maxItems:n.length},r)}var sw=u(()=>{y();rn()});var zo=u(()=>{sw()});function fw(n,r){return n in r?ot(n,r[n]):kn(r)}function qR(n){return{[n]:En(n)}}function FR(n){let r={};for(let t of n)r[t]=En(t);return r}function jR(n,r){return Am(r,n)?qR(n):FR(r)}function pR(n,r){let t=jR(n,r);return fw(n,t)}function yc(n,r){return r.map((t)=>ot(n,t))}function KR(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(r))t[o]=ot(n,r[o]);return t}function ot(n,r){let t={...r};return Wr(r)?Sr(ot(n,xn(r,[wr]))):Qa(r)?Xr(ot(n,xn(r,[_t]))):Pn(r)?fw(n,r.properties):xr(r)?pR(n,r.keys):ht(r)?Oa(yc(n,r.parameters),ot(n,r.returns),t):$t(r)?Jt(yc(n,r.parameters),ot(n,r.returns),t):vo(r)?Ga(ot(n,r.items),t):Io(r)?ja(ot(n,r.items),t):Nn(r)?Mr(yc(n,r.allOf),t):wn(r)?Dn(yc(n,r.anyOf),t):Fr(r)?tt(yc(n,r.items??[]),t):yn(r)?Bn(KR(n,r.properties),t):mt(r)?Pa(ot(n,r.items),t):Zo(r)?Li(ot(n,r.item),t):r}function vR(n,r){let t={};for(let o of n)t[o]=ot(o,r);return t}function lw(n,r,t){let o=jr(n)?Jr(n):n,a=r({[O]:"MappedKey",keys:o}),c=vR(o,a);return Bn(c,t)}var dw=u(()=>{rn();no();Fc();jc();pc();na();Lt();rt();Zc();Yr();pr();ro();Vi();aa();zo();or();xc();Zl();Rn()});var fr=u(()=>{Wm();Zl();dw()});function TR(n){return J(xn(n,[wr]))}function IR(n){return J({...n,[wr]:"Optional"})}function ZR(n,r){return r===!1?TR(n):IR(n)}function Sr(n,r){let t=r??!0;return Pn(n)?uw(n,t):ZR(n,t)}var g0=u(()=>{y();rn();no();_0();Rn()});function yR(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(n))t[o]=Sr(n[o],r);return t}function n3(n,r){return yR(n.properties,r)}function uw(n,r){let t=n3(n,r);return kn(t)}var _0=u(()=>{fr();g0()});var ro=u(()=>{_0();g0()});function ne(n,r={}){let t=n.every((a)=>yn(a)),o=jr(r.unevaluatedProperties)?{unevaluatedProperties:r.unevaluatedProperties}:{};return J(r.unevaluatedProperties===!1||jr(r.unevaluatedProperties)||t?{...o,[O]:"Intersect",type:"object",allOf:n}:{...o,[O]:"Intersect",allOf:n},r)}var m0=u(()=>{y();rn();Rn()});function r3(n){return n.every((r)=>Wr(r))}function t3(n){return xn(n,[wr])}function bw(n){return n.map((r)=>Wr(r)?t3(r):r)}function o3(n,r){return r3(n)?Sr(ne(bw(n),r)):ne(bw(n),r)}function Xi(n,r={}){if(n.length===1)return J(n[0],r);if(n.length===0)return hn(r);if(n.some((t)=>ko(t)))throw Error("Cannot intersect transform types");return o3(n,r)}var gw=u(()=>{rn();y();no();hr();ro();m0();Rn()});var _w=()=>{};function Mr(n,r){if(n.length===1)return J(n[0],r);if(n.length===0)return hn(r);if(n.some((t)=>ko(t)))throw Error("Cannot intersect transform types");return ne(n,r)}var mw=u(()=>{y();hr();m0();Rn()});var rt=u(()=>{gw();_w();mw()});function Vt(...n){let[r,t]=typeof n[0]==="string"?[n[0],n[1]]:[n[0].$id,n[1]];if(typeof r!=="string")throw new mr("Ref: $ref must be a string");return J({[O]:"Ref",$ref:r},t)}var ww=u(()=>{Yt();y();rn()});var ca=u(()=>{ww()});function a3(n,r){return Cn("Awaited",[Cn(n,r)])}function c3(n){return Cn("Awaited",[Vt(n)])}function e3(n){return Mr(hw(n))}function i3(n){return Dn(hw(n))}function s3(n){return pa(n)}function hw(n){return n.map((r)=>pa(r))}function pa(n,r){return J(wt(n)?a3(n.target,n.parameters):Nn(n)?e3(n.allOf):wn(n)?i3(n.anyOf):Zo(n)?s3(n.item):jn(n)?c3(n.$ref):n,r)}var $w=u(()=>{y();Do();rt();or();ca();Rn()});var Ci=u(()=>{$w()});function Aw(n){let r=[];for(let t of n)r.push(re(t));return r}function f3(n){let r=Aw(n);return Em(r)}function l3(n){let r=Aw(n);return km(r)}function d3(n){return n.map((r,t)=>t.toString())}function u3(n){return["[number]"]}function b3(n){return globalThis.Object.getOwnPropertyNames(n)}function g3(n){if(!_3)return[];return globalThis.Object.getOwnPropertyNames(n).map((t)=>{return t[0]==="^"&&t[t.length-1]==="$"?t.slice(1,t.length-1):t})}function re(n){return Nn(n)?f3(n.allOf):wn(n)?l3(n.anyOf):Fr(n)?d3(n.items??[]):mt(n)?u3(n.items):yn(n)?b3(n.properties):yo(n)?g3(n.patternProperties):[]}var _3=!1;var w0=u(()=>{xc();Rn()});function m3(n,r){return Cn("KeyOf",[Cn(n,r)])}function w3(n){return Cn("KeyOf",[Vt(n)])}function h3(n,r){let t=re(n),o=$3(t),a=Xt(o);return J(a,r)}function $3(n){return n.map((r)=>r==="[number]"?nt():En(r))}function Ka(n,r){return wt(n)?m3(n.target,n.parameters):jn(n)?w3(n.$ref):Pn(n)?Rw(n,r):h3(n,r)}var h0=u(()=>{y();Yr();ta();Do();ca();w0();or();$0();Rn()});function A3(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(n))t[o]=Ka(n[o],Qn(r));return t}function R3(n,r){return A3(n.properties,r)}function Rw(n,r){let t=R3(n,r);return kn(t)}var $0=u(()=>{fr();h0();Br()});var kw=()=>{};var te=u(()=>{$0();kw();w0();h0()});function k3(n){let r=[];for(let t of n)r.push(...re(t));return Rm(r)}function E3(n){return n.filter((r)=>!Ro(r))}function S3(n,r){let t=[];for(let o of n)t.push(...f0(o,[r]));return E3(t)}function M3(n,r){let t={};for(let o of r)t[o]=Xi(S3(n,o));return t}function Ew(n,r){let t=k3(n),o=M3(n,t);return Bn(o,r)}var Sw=u(()=>{rt();Lt();te();pr();xc();Rn()});var A0=u(()=>{Sw()});function Qi(n){return J({[O]:"Date",type:"Date"},n)}var Mw=u(()=>{rn();y()});var Pi=u(()=>{Mw()});function Gi(n){return J({[O]:"Null",type:"null"},n)}var Dw=u(()=>{y();rn()});var Oi=u(()=>{Dw()});function Ni(n){return J({[O]:"Symbol",type:"symbol"},n)}var Hw=u(()=>{y();rn()});var xi=u(()=>{Hw()});function qi(n){return J({[O]:"Undefined",type:"undefined"},n)}var zw=u(()=>{y();rn()});var Fi=u(()=>{zw()});function ji(n){return J({[O]:"Uint8Array",type:"Uint8Array"},n)}var Uw=u(()=>{y();rn()});var pi=u(()=>{Uw()});function Uo(n){return J({[O]:"Unknown"},n)}var Bw=u(()=>{y();rn()});var va=u(()=>{Bw()});function D3(n){return n.map((r)=>R0(r,!1))}function H3(n){let r={};for(let t of globalThis.Object.getOwnPropertyNames(n))r[t]=Xr(R0(n[t],!1));return r}function Ki(n,r){return r===!0?n:Xr(n)}function R0(n,r){return Ql(n)?Ki(Mo(),r):Gl(n)?Ki(Mo(),r):In(n)?Xr(tt(D3(n))):vt(n)?ji():Ko(n)?Qi():zn(n)?Ki(Bn(H3(n)),r):Pl(n)?Ki(Jt([],Uo()),r):Zn(n)?qi():Ol(n)?Gi():Nl(n)?Ni():Jc(n)?qa():Or(n)?En(n):Kt(n)?En(n):Ln(n)?En(n):Bn({})}function Ww(n,r){return J(R0(n,!0),r)}var Yw=u(()=>{qc();Ic();Pi();na();Yr();Oi();pr();xi();zo();aa();Fi();pi();va();Tt()});var k0=u(()=>{Yw()});function Jw(n,r){return ht(n)?tt(n.parameters,r):hn(r)}var Xw=u(()=>{zo();hr();Rn()});var E0=u(()=>{Xw()});function Lw(n,r){if(Zn(n))throw Error("Enum undefined or empty");let t=globalThis.Object.getOwnPropertyNames(n).filter((c)=>isNaN(c)).map((c)=>n[c]),a=[...new Set(t)].map((c)=>En(c));return Dn(a,{...r,[yr]:"Enum"})}var Vw=u(()=>{Yr();rn();or()});var S0=u(()=>{Vw()});function at(n){return n===X.False?n:X.True}function Ta(n){throw new Ow(n)}function ar(n){return $.IsNever(n)||$.IsIntersect(n)||$.IsUnion(n)||$.IsUnknown(n)||$.IsAny(n)}function cr(n,r){return $.IsNever(r)?qw(n,r):$.IsIntersect(r)?vi(n,r):$.IsUnion(r)?U0(n,r):$.IsUnknown(r)?Kw(n,r):$.IsAny(r)?z0(n,r):Ta("StructuralRight")}function z0(n,r){return X.True}function z3(n,r){return $.IsIntersect(r)?vi(n,r):$.IsUnion(r)&&r.anyOf.some((t)=>$.IsAny(t)||$.IsUnknown(t))?X.True:$.IsUnion(r)?X.Union:$.IsUnknown(r)?X.True:$.IsAny(r)?X.True:X.Union}function U3(n,r){return $.IsUnknown(n)?X.False:$.IsAny(n)?X.Union:$.IsNever(n)?X.True:X.False}function B3(n,r){return $.IsObject(r)&&Ti(r)?X.True:ar(r)?cr(n,r):!$.IsArray(r)?X.False:at(Wn(n.items,r.items))}function W3(n,r){return ar(r)?cr(n,r):!$.IsAsyncIterator(r)?X.False:at(Wn(n.items,r.items))}function Y3(n,r){return ar(r)?cr(n,r):$.IsObject(r)?Dr(n,r):$.IsRecord(r)?ct(n,r):$.IsBigInt(r)?X.True:X.False}function Nw(n,r){return $.IsLiteralBoolean(n)?X.True:$.IsBoolean(n)?X.True:X.False}function J3(n,r){return ar(r)?cr(n,r):$.IsObject(r)?Dr(n,r):$.IsRecord(r)?ct(n,r):$.IsBoolean(r)?X.True:X.False}function X3(n,r){return ar(r)?cr(n,r):$.IsObject(r)?Dr(n,r):!$.IsConstructor(r)?X.False:n.parameters.length>r.parameters.length?X.False:!n.parameters.every((t,o)=>at(Wn(r.parameters[o],t))===X.True)?X.False:at(Wn(n.returns,r.returns))}function L3(n,r){return ar(r)?cr(n,r):$.IsObject(r)?Dr(n,r):$.IsRecord(r)?ct(n,r):$.IsDate(r)?X.True:X.False}function V3(n,r){return ar(r)?cr(n,r):$.IsObject(r)?Dr(n,r):!$.IsFunction(r)?X.False:n.parameters.length>r.parameters.length?X.False:!n.parameters.every((t,o)=>at(Wn(r.parameters[o],t))===X.True)?X.False:at(Wn(n.returns,r.returns))}function xw(n,r){return $.IsLiteral(n)&&Er.IsNumber(n.const)?X.True:$.IsNumber(n)||$.IsInteger(n)?X.True:X.False}function C3(n,r){return $.IsInteger(r)||$.IsNumber(r)?X.True:ar(r)?cr(n,r):$.IsObject(r)?Dr(n,r):$.IsRecord(r)?ct(n,r):X.False}function vi(n,r){return r.allOf.every((t)=>Wn(n,t)===X.True)?X.True:X.False}function Q3(n,r){return n.allOf.some((t)=>Wn(t,r)===X.True)?X.True:X.False}function P3(n,r){return ar(r)?cr(n,r):!$.IsIterator(r)?X.False:at(Wn(n.items,r.items))}function G3(n,r){return $.IsLiteral(r)&&r.const===n.const?X.True:ar(r)?cr(n,r):$.IsObject(r)?Dr(n,r):$.IsRecord(r)?ct(n,r):$.IsString(r)?pw(n,r):$.IsNumber(r)?Fw(n,r):$.IsInteger(r)?xw(n,r):$.IsBoolean(r)?Nw(n,r):X.False}function qw(n,r){return X.False}function O3(n,r){return X.True}function Cw(n){let[r,t]=[n,0];while(!0){if(!$.IsNot(r))break;r=r.not,t+=1}return t%2===0?r:Uo()}function N3(n,r){return $.IsNot(n)?Wn(Cw(n),r):$.IsNot(r)?Wn(n,Cw(r)):Ta("Invalid fallthrough for Not")}function x3(n,r){return ar(r)?cr(n,r):$.IsObject(r)?Dr(n,r):$.IsRecord(r)?ct(n,r):$.IsNull(r)?X.True:X.False}function Fw(n,r){return $.IsLiteralNumber(n)?X.True:$.IsNumber(n)||$.IsInteger(n)?X.True:X.False}function q3(n,r){return ar(r)?cr(n,r):$.IsObject(r)?Dr(n,r):$.IsRecord(r)?ct(n,r):$.IsInteger(r)||$.IsNumber(r)?X.True:X.False}function Lr(n,r){return Object.getOwnPropertyNames(n.properties).length===r}function Qw(n){return Ti(n)}function Pw(n){return Lr(n,0)||Lr(n,1)&&"description"in n.properties&&$.IsUnion(n.properties.description)&&n.properties.description.anyOf.length===2&&($.IsString(n.properties.description.anyOf[0])&&$.IsUndefined(n.properties.description.anyOf[1])||$.IsString(n.properties.description.anyOf[1])&&$.IsUndefined(n.properties.description.anyOf[0]))}function M0(n){return Lr(n,0)}function Gw(n){return Lr(n,0)}function F3(n){return Lr(n,0)}function j3(n){return Lr(n,0)}function p3(n){return Ti(n)}function K3(n){let r=nt();return Lr(n,0)||Lr(n,1)&&"length"in n.properties&&at(Wn(n.properties.length,r))===X.True}function v3(n){return Lr(n,0)}function Ti(n){let r=nt();return Lr(n,0)||Lr(n,1)&&"length"in n.properties&&at(Wn(n.properties.length,r))===X.True}function T3(n){let r=Jt([Mo()],Mo());return Lr(n,0)||Lr(n,1)&&"then"in n.properties&&at(Wn(n.properties.then,r))===X.True}function jw(n,r){return Wn(n,r)===X.False?X.False:$.IsOptional(n)&&!$.IsOptional(r)?X.False:X.True}function Dr(n,r){return $.IsUnknown(n)?X.False:$.IsAny(n)?X.Union:$.IsNever(n)||$.IsLiteralString(n)&&Qw(r)||$.IsLiteralNumber(n)&&M0(r)||$.IsLiteralBoolean(n)&&Gw(r)||$.IsSymbol(n)&&Pw(r)||$.IsBigInt(n)&&F3(r)||$.IsString(n)&&Qw(r)||$.IsSymbol(n)&&Pw(r)||$.IsNumber(n)&&M0(r)||$.IsInteger(n)&&M0(r)||$.IsBoolean(n)&&Gw(r)||$.IsUint8Array(n)&&p3(r)||$.IsDate(n)&&j3(r)||$.IsConstructor(n)&&v3(r)||$.IsFunction(n)&&K3(r)?X.True:$.IsRecord(n)&&$.IsString(D0(n))?(()=>{return r[yr]==="Record"?X.True:X.False})():$.IsRecord(n)&&$.IsNumber(D0(n))?(()=>{return Lr(r,0)?X.True:X.False})():X.False}function I3(n,r){return ar(r)?cr(n,r):$.IsRecord(r)?ct(n,r):!$.IsObject(r)?X.False:(()=>{for(let t of Object.getOwnPropertyNames(r.properties)){if(!(t in n.properties)&&!$.IsOptional(r.properties[t]))return X.False;if($.IsOptional(r.properties[t]))return X.True;if(jw(n.properties[t],r.properties[t])===X.False)return X.False}return X.True})()}function Z3(n,r){return ar(r)?cr(n,r):$.IsObject(r)&&T3(r)?X.True:!$.IsPromise(r)?X.False:at(Wn(n.item,r.item))}function D0(n){return Eo in n.patternProperties?nt():(So in n.patternProperties)?kt():Ta("Unknown record key pattern")}function H0(n){return Eo in n.patternProperties?n.patternProperties[Eo]:(So in n.patternProperties)?n.patternProperties[So]:Ta("Unable to get record value schema")}function ct(n,r){let[t,o]=[D0(r),H0(r)];return $.IsLiteralString(n)&&$.IsNumber(t)&&at(Wn(n,o))===X.True?X.True:$.IsUint8Array(n)&&$.IsNumber(t)?Wn(n,o):$.IsString(n)&&$.IsNumber(t)?Wn(n,o):$.IsArray(n)&&$.IsNumber(t)?Wn(n,o):$.IsObject(n)?(()=>{for(let a of Object.getOwnPropertyNames(n.properties))if(jw(o,n.properties[a])===X.False)return X.False;return X.True})():X.False}function y3(n,r){return ar(r)?cr(n,r):$.IsObject(r)?Dr(n,r):!$.IsRecord(r)?X.False:Wn(H0(n),H0(r))}function nk(n,r){let t=$.IsRegExp(n)?kt():n,o=$.IsRegExp(r)?kt():r;return Wn(t,o)}function pw(n,r){return $.IsLiteral(n)&&Er.IsString(n.const)?X.True:$.IsString(n)?X.True:X.False}function rk(n,r){return ar(r)?cr(n,r):$.IsObject(r)?Dr(n,r):$.IsRecord(r)?ct(n,r):$.IsString(r)?X.True:X.False}function tk(n,r){return ar(r)?cr(n,r):$.IsObject(r)?Dr(n,r):$.IsRecord(r)?ct(n,r):$.IsSymbol(r)?X.True:X.False}function ok(n,r){return $.IsTemplateLiteral(n)?Wn(oa(n),r):$.IsTemplateLiteral(r)?Wn(n,oa(r)):Ta("Invalid fallthrough for TemplateLiteral")}function ak(n,r){return $.IsArray(r)&&n.items!==void 0&&n.items.every((t)=>Wn(t,r.items)===X.True)}function ck(n,r){return $.IsNever(n)?X.True:$.IsUnknown(n)?X.False:$.IsAny(n)?X.Union:X.False}function ek(n,r){return ar(r)?cr(n,r):$.IsObject(r)&&Ti(r)?X.True:$.IsArray(r)&&ak(n,r)?X.True:!$.IsTuple(r)?X.False:Er.IsUndefined(n.items)&&!Er.IsUndefined(r.items)||!Er.IsUndefined(n.items)&&Er.IsUndefined(r.items)?X.False:Er.IsUndefined(n.items)&&!Er.IsUndefined(r.items)?X.True:n.items.every((t,o)=>Wn(t,r.items[o])===X.True)?X.True:X.False}function ik(n,r){return ar(r)?cr(n,r):$.IsObject(r)?Dr(n,r):$.IsRecord(r)?ct(n,r):$.IsUint8Array(r)?X.True:X.False}function sk(n,r){return ar(r)?cr(n,r):$.IsObject(r)?Dr(n,r):$.IsRecord(r)?ct(n,r):$.IsVoid(r)?dk(n,r):$.IsUndefined(r)?X.True:X.False}function U0(n,r){return r.anyOf.some((t)=>Wn(n,t)===X.True)?X.True:X.False}function fk(n,r){return n.anyOf.every((t)=>Wn(t,r)===X.True)?X.True:X.False}function Kw(n,r){return X.True}function lk(n,r){return $.IsNever(r)?qw(n,r):$.IsIntersect(r)?vi(n,r):$.IsUnion(r)?U0(n,r):$.IsAny(r)?z0(n,r):$.IsString(r)?pw(n,r):$.IsNumber(r)?Fw(n,r):$.IsInteger(r)?xw(n,r):$.IsBoolean(r)?Nw(n,r):$.IsArray(r)?U3(n,r):$.IsTuple(r)?ck(n,r):$.IsObject(r)?Dr(n,r):$.IsUnknown(r)?X.True:X.False}function dk(n,r){return $.IsUndefined(n)?X.True:$.IsUndefined(n)?X.True:X.False}function uk(n,r){return $.IsIntersect(r)?vi(n,r):$.IsUnion(r)?U0(n,r):$.IsUnknown(r)?Kw(n,r):$.IsAny(r)?z0(n,r):$.IsObject(r)?Dr(n,r):$.IsVoid(r)?X.True:X.False}function Wn(n,r){return $.IsTemplateLiteral(n)||$.IsTemplateLiteral(r)?ok(n,r):$.IsRegExp(n)||$.IsRegExp(r)?nk(n,r):$.IsNot(n)||$.IsNot(r)?N3(n,r):$.IsAny(n)?z3(n,r):$.IsArray(n)?B3(n,r):$.IsBigInt(n)?Y3(n,r):$.IsBoolean(n)?J3(n,r):$.IsAsyncIterator(n)?W3(n,r):$.IsConstructor(n)?X3(n,r):$.IsDate(n)?L3(n,r):$.IsFunction(n)?V3(n,r):$.IsInteger(n)?C3(n,r):$.IsIntersect(n)?Q3(n,r):$.IsIterator(n)?P3(n,r):$.IsLiteral(n)?G3(n,r):$.IsNever(n)?O3(n,r):$.IsNull(n)?x3(n,r):$.IsNumber(n)?q3(n,r):$.IsObject(n)?I3(n,r):$.IsRecord(n)?y3(n,r):$.IsString(n)?rk(n,r):$.IsSymbol(n)?tk(n,r):$.IsTuple(n)?ek(n,r):$.IsPromise(n)?Z3(n,r):$.IsUint8Array(n)?ik(n,r):$.IsUndefined(n)?sk(n,r):$.IsUnion(n)?fk(n,r):$.IsUnknown(n)?lk(n,r):$.IsVoid(n)?uk(n,r):Ta(`Unknown left type operand '${n[O]}'`)}function Bo(n,r){return Wn(n,r)}var Ow,X;var B0=u(()=>{qc();na();ta();Fa();va();oo();Nc();rn();Yt();Tl();Ow=class Ow extends mr{};(function(n){n[n.Union=0]="Union",n[n.True=1]="True",n[n.False=2]="False"})(X||(X={}))});function bk(n,r,t,o,a){let c={};for(let e of globalThis.Object.getOwnPropertyNames(n))c[e]=Ia(n[e],r,t,o,Qn(a));return c}function gk(n,r,t,o,a){return bk(n.properties,r,t,o,a)}function vw(n,r,t,o,a){let c=gk(n,r,t,o,a);return kn(c)}var W0=u(()=>{fr();Ii();Br()});function _k(n,r,t,o){let a=Bo(n,r);return a===X.Union?Dn([t,o]):a===X.True?t:o}function Ia(n,r,t,o,a){return Pn(n)?vw(n,r,t,o,a):xr(n)?J(Tw(n,r,t,o,a)):J(_k(n,r,t,o),a)}var Ii=u(()=>{y();or();B0();Y0();W0();Rn()});function mk(n,r,t,o,a){return{[n]:Ia(En(n),r,t,o,Qn(a))}}function wk(n,r,t,o,a){return n.reduce((c,e)=>{return{...c,...mk(e,r,t,o,a)}},{})}function hk(n,r,t,o,a){return wk(n.keys,r,t,o,a)}function Tw(n,r,t,o,a){let c=hk(n,r,t,o,a);return kn(c)}var Y0=u(()=>{fr();Yr();Ii();Br()});var Iw=()=>{};var oe=u(()=>{B0();Y0();W0();Iw();Ii()});function Zw(n,r){return Za(oa(n),r)}var J0=u(()=>{Zi();oo()});function $k(n,r){let t=n.filter((o)=>Bo(o,r)===X.False);return t.length===1?t[0]:Dn(t)}function Za(n,r,t={}){if(qr(n))return J(Zw(n,r),t);if(Pn(n))return J(yw(n,r),t);return J(wn(n)?$k(n.anyOf,r):Bo(n,r)!==X.False?hn():n,t)}var Zi=u(()=>{y();or();hr();oe();X0();J0();Rn()});function Ak(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(n))t[o]=Za(n[o],r);return t}function Rk(n,r){return Ak(n.properties,r)}function yw(n,r){let t=Rk(n,r);return kn(t)}var X0=u(()=>{fr();Zi()});var L0=u(()=>{X0();J0();Zi()});function n1(n,r){return ya(oa(n),r)}var V0=u(()=>{yi();oo()});function kk(n,r){let t=n.filter((o)=>Bo(o,r)!==X.False);return t.length===1?t[0]:Dn(t)}function ya(n,r,t){if(qr(n))return J(n1(n,r),t);if(Pn(n))return J(r1(n,r),t);return J(wn(n)?kk(n.anyOf,r):Bo(n,r)!==X.False?n:hn(),t)}var yi=u(()=>{y();or();hr();oe();C0();V0();Rn()});function Ek(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(n))t[o]=ya(n[o],r);return t}function Sk(n,r){return Ek(n.properties,r)}function r1(n,r){let t=Sk(n,r);return kn(t)}var C0=u(()=>{fr();yi()});var Q0=u(()=>{C0();V0();yi()});function t1(n,r){return ht(n)?J(n.returns,r):hn(r)}var o1=u(()=>{y();hr();Rn()});var P0=u(()=>{o1()});function ns(n){return Xr(Sr(n))}var a1=u(()=>{aa();ro()});var rs=u(()=>{a1()});function ea(n,r,t){return J({[O]:"Record",type:"object",patternProperties:{[n]:r}},t)}function G0(n,r,t){let o={};for(let a of n)o[a]=r;return Bn(o,{...t,[yr]:"Record"})}function Mk(n,r,t){return Gm(n)?G0(Jr(n),r,t):ea(n.pattern,r,t)}function Dk(n,r,t){return G0(Jr(Dn(n)),r,t)}function Hk(n,r,t){return G0([n.toString()],r,t)}function zk(n,r,t){return ea(n.source,r,t)}function Uk(n,r,t){let o=Zn(n.pattern)?So:n.pattern;return ea(o,r,t)}function Bk(n,r,t){return ea(So,r,t)}function Wk(n,r,t){return ea(mm,r,t)}function Yk(n,r,t){return Bn({true:r,false:r},t)}function Jk(n,r,t){return ea(Eo,r,t)}function Xk(n,r,t){return ea(Eo,r,t)}function ts(n,r,t={}){return wn(n)?Dk(n.anyOf,r,t):qr(n)?Mk(n,r,t):Nr(n)?Hk(n.const,r,t):It(n)?Yk(n,r,t):At(n)?Jk(n,r,t):Rt(n)?Xk(n,r,t):jl(n)?zk(n,r,t):Zt(n)?Uk(n,r,t):ql(n)?Bk(n,r,t):Ro(n)?Wk(n,r,t):hn(t)}function os(n){return globalThis.Object.getOwnPropertyNames(n.patternProperties)[0]}function c1(n){let r=os(n);return r===So?kt():r===Eo?nt():kt({pattern:r})}function as(n){return n.patternProperties[os(n)]}var e1=u(()=>{y();rn();hr();ta();pr();Fa();or();oo();Nc();Lt();Rn()});var ae=u(()=>{e1()});function Lk(n,r){return r.parameters=ce(n,r.parameters),r.returns=Et(n,r.returns),r}function Vk(n,r){return r.parameters=ce(n,r.parameters),r.returns=Et(n,r.returns),r}function Ck(n,r){return r.allOf=ce(n,r.allOf),r}function Qk(n,r){return r.anyOf=ce(n,r.anyOf),r}function Pk(n,r){if(Zn(r.items))return r;return r.items=ce(n,r.items),r}function Gk(n,r){return r.items=Et(n,r.items),r}function Ok(n,r){return r.items=Et(n,r.items),r}function Nk(n,r){return r.items=Et(n,r.items),r}function xk(n,r){return r.item=Et(n,r.item),r}function qk(n,r){let t=Kk(n,r.properties);return{...r,...Bn(t)}}function Fk(n,r){let t=Et(n,c1(r)),o=Et(n,as(r)),a=ts(t,o);return{...r,...a}}function jk(n,r){return r.index in n?n[r.index]:Uo()}function pk(n,r){let t=Qa(r),o=Wr(r),a=Et(n,r);return t&&o?ns(a):t&&!o?Xr(a):!t&&o?Sr(a):a}function Kk(n,r){return globalThis.Object.getOwnPropertyNames(r).reduce((t,o)=>{return{...t,[o]:pk(n,r[o])}},{})}function ce(n,r){return r.map((t)=>Et(n,t))}function Et(n,r){return ht(r)?Lk(n,r):$t(r)?Vk(n,r):Nn(r)?Ck(n,r):wn(r)?Qk(n,r):Fr(r)?Pk(n,r):mt(r)?Gk(n,r):vo(r)?Ok(n,r):Io(r)?Nk(n,r):Zo(r)?xk(n,r):yn(r)?qk(n,r):yo(r)?Fk(n,r):Fl(r)?jk(n,r):r}function i1(n,r){return Et(r,Ca(n))}var s1=u(()=>{Ei();va();rs();aa();ro();pr();ae();Rn()});var O0=u(()=>{s1()});function f1(n){return J({[O]:"Integer",type:"integer"},n)}var l1=u(()=>{y();rn()});var N0=u(()=>{l1()});function vk(n,r,t){return{[n]:St(En(n),r,Qn(t))}}function Tk(n,r,t){return n.reduce((a,c)=>{return{...a,...vk(c,r,t)}},{})}function Ik(n,r,t){return Tk(n.keys,r,t)}function d1(n,r,t){let o=Ik(n,r,t);return kn(o)}var x0=u(()=>{fr();ia();Yr();Br()});function Zk(n){let[r,t]=[n.slice(0,1),n.slice(1)];return[r.toLowerCase(),t].join("")}function yk(n){let[r,t]=[n.slice(0,1),n.slice(1)];return[r.toUpperCase(),t].join("")}function n4(n){return n.toUpperCase()}function r4(n){return n.toLowerCase()}function t4(n,r,t){let o=xa(n.pattern);if(!ra(o))return{...n,pattern:u1(n.pattern,r)};let e=[...Tc(o)].map((f)=>En(f)),i=b1(e,r),s=Dn(i);return Yi([s],t)}function u1(n,r){return typeof n==="string"?r==="Uncapitalize"?Zk(n):r==="Capitalize"?yk(n):r==="Uppercase"?n4(n):r==="Lowercase"?r4(n):n:n.toString()}function b1(n,r){return n.map((t)=>St(t,r))}function St(n,r,t={}){return xr(n)?d1(n,r,t):qr(n)?t4(n,r,t):wn(n)?Dn(b1(n.anyOf,r),t):Nr(n)?En(u1(n.const,r),t):J(n,t)}var ia=u(()=>{y();oo();x0();Yr();or();Rn()});function g1(n,r={}){return St(n,"Capitalize",r)}var _1=u(()=>{ia()});function m1(n,r={}){return St(n,"Lowercase",r)}var w1=u(()=>{ia()});function h1(n,r={}){return St(n,"Uncapitalize",r)}var $1=u(()=>{ia()});function A1(n,r={}){return St(n,"Uppercase",r)}var R1=u(()=>{ia()});var q0=u(()=>{_1();x0();ia();w1();$1();R1()});function o4(n,r,t){let o={};for(let a of globalThis.Object.getOwnPropertyNames(n))o[a]=Wo(n[a],r,Qn(t));return o}function a4(n,r,t){return o4(n.properties,r,t)}function k1(n,r,t){let o=a4(n,r,t);return kn(o)}var F0=u(()=>{fr();cs();Br()});function c4(n,r){return n.map((t)=>j0(t,r))}function e4(n,r){return n.map((t)=>j0(t,r))}function i4(n,r){let{[r]:t,...o}=n;return o}function s4(n,r){return r.reduce((t,o)=>i4(t,o),n)}function f4(n,r,t){let o=xn(n,[tr,"$id","required","properties"]),a=s4(t,r);return Bn(a,o)}function l4(n){let r=n.reduce((t,o)=>Mi(o)?[...t,En(o)]:t,[]);return Dn(r)}function j0(n,r){return Nn(n)?Mr(c4(n.allOf,r)):wn(n)?Dn(e4(n.anyOf,r)):yn(n)?f4(n,r,n.properties):Bn({})}function Wo(n,r,t){let o=In(r)?l4(r):r,a=jr(r)?Jr(r):r,c=jn(n),e=jn(r);return Pn(n)?k1(n,a,t):xr(r)?E1(n,r,t):c&&e?Cn("Omit",[n,o],t):!c&&e?Cn("Omit",[n,o],t):c&&!e?Cn("Omit",[n,o],t):J({...j0(n,a),...t})}var cs=u(()=>{y();Vc();Do();Yr();Lt();rt();or();pr();p0();F0();Rn()});function d4(n,r,t){return{[r]:Wo(n,[r],Qn(t))}}function u4(n,r,t){return r.reduce((o,a)=>{return{...o,...d4(n,a,t)}},{})}function b4(n,r,t){return u4(n,r.keys,t)}function E1(n,r,t){let o=b4(n,r,t);return kn(o)}var p0=u(()=>{fr();cs();Br()});var es=u(()=>{p0();F0();cs()});function g4(n,r,t){let o={};for(let a of globalThis.Object.getOwnPropertyNames(n))o[a]=Yo(n[a],r,Qn(t));return o}function _4(n,r,t){return g4(n.properties,r,t)}function S1(n,r,t){let o=_4(n,r,t);return kn(o)}var K0=u(()=>{fr();is();Br()});function m4(n,r){return n.map((t)=>v0(t,r))}function w4(n,r){return n.map((t)=>v0(t,r))}function h4(n,r){let t={};for(let o of r)if(o in n)t[o]=n[o];return t}function $4(n,r,t){let o=xn(n,[tr,"$id","required","properties"]),a=h4(t,r);return Bn(a,o)}function A4(n){let r=n.reduce((t,o)=>Mi(o)?[...t,En(o)]:t,[]);return Dn(r)}function v0(n,r){return Nn(n)?Mr(m4(n.allOf,r)):wn(n)?Dn(w4(n.anyOf,r)):yn(n)?$4(n,r,n.properties):Bn({})}function Yo(n,r,t){let o=In(r)?A4(r):r,a=jr(r)?Jr(r):r,c=jn(n),e=jn(r);return Pn(n)?S1(n,a,t):xr(r)?M1(n,r,t):c&&e?Cn("Pick",[n,o],t):!c&&e?Cn("Pick",[n,o],t):c&&!e?Cn("Pick",[n,o],t):J({...v0(n,a),...t})}var is=u(()=>{y();Do();rt();Yr();pr();or();Lt();Vc();Rn();T0();K0()});function R4(n,r,t){return{[r]:Yo(n,[r],Qn(t))}}function k4(n,r,t){return r.reduce((o,a)=>{return{...o,...R4(n,a,t)}},{})}function E4(n,r,t){return k4(n,r.keys,t)}function M1(n,r,t){let o=E4(n,r,t);return kn(o)}var T0=u(()=>{fr();is();Br()});var ss=u(()=>{T0();K0();is()});function S4(n,r){return Cn("Partial",[Cn(n,r)])}function M4(n){return Cn("Partial",[Vt(n)])}function D4(n){let r={};for(let t of globalThis.Object.getOwnPropertyNames(n))r[t]=Sr(n[t]);return r}function H4(n,r){let t=xn(n,[tr,"$id","required","properties"]),o=D4(r);return Bn(o,t)}function D1(n){return n.map((r)=>H1(r))}function H1(n){return wt(n)?S4(n.target,n.parameters):jn(n)?M4(n.$ref):Nn(n)?Mr(D1(n.allOf)):wn(n)?Dn(D1(n.anyOf)):yn(n)?H4(n,n.properties):To(n)?n:It(n)?n:At(n)?n:Nr(n)?n:Cc(n)?n:Rt(n)?n:Zt(n)?n:Qc(n)?n:Pc(n)?n:Bn({})}function nc(n,r){if(Pn(n))return z1(n,r);else return J({...H1(n),...r})}var I0=u(()=>{y();Do();ro();pr();rt();or();ca();no();rn();Z0();Rn()});function z4(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(n))t[o]=nc(n[o],Qn(r));return t}function U4(n,r){return z4(n.properties,r)}function z1(n,r){let t=U4(n,r);return kn(t)}var Z0=u(()=>{fr();I0();Br()});var fs=u(()=>{Z0();I0()});function B4(n,r){return Cn("Required",[Cn(n,r)])}function W4(n){return Cn("Required",[Vt(n)])}function Y4(n){let r={};for(let t of globalThis.Object.getOwnPropertyNames(n))r[t]=xn(n[t],[wr]);return r}function J4(n,r){let t=xn(n,[tr,"$id","required","properties"]),o=Y4(r);return Bn(o,t)}function U1(n){return n.map((r)=>B1(r))}function B1(n){return wt(n)?B4(n.target,n.parameters):jn(n)?W4(n.$ref):Nn(n)?Mr(U1(n.allOf)):wn(n)?Dn(U1(n.anyOf)):yn(n)?J4(n,n.properties):To(n)?n:It(n)?n:At(n)?n:Nr(n)?n:Cc(n)?n:Rt(n)?n:Zt(n)?n:Qc(n)?n:Pc(n)?n:Bn({})}function rc(n,r){if(Pn(n))return W1(n,r);else return J({...B1(n),...r})}var y0=u(()=>{y();Do();pr();rt();or();ca();rn();no();nd();Rn()});function X4(n,r){let t={};for(let o of globalThis.Object.getOwnPropertyNames(n))t[o]=rc(n[o],r);return t}function L4(n,r){return X4(n.properties,r)}function W1(n,r){let t=L4(n,r);return kn(t)}var nd=u(()=>{fr();y0()});var ls=u(()=>{nd();y0()});function V4(n,r){return r.map((t)=>{return jn(t)?rd(n,t.$ref):Kr(n,t)})}function rd(n,r){return r in n?jn(n[r])?rd(n,n[r].$ref):Kr(n,n[r]):hn()}function C4(n){return pa(n[0])}function Q4(n){return Ho(n[0],n[1])}function P4(n){return Ka(n[0])}function G4(n){return nc(n[0])}function O4(n){return Wo(n[0],n[1])}function N4(n){return Yo(n[0],n[1])}function x4(n){return rc(n[0])}function q4(n,r,t){let o=V4(n,t);return r==="Awaited"?C4(o):r==="Index"?Q4(o):r==="KeyOf"?P4(o):r==="Partial"?G4(o):r==="Omit"?O4(o):r==="Pick"?N4(o):r==="Required"?x4(o):hn()}function F4(n,r){return Pa(Kr(n,r))}function j4(n,r){return Ga(Kr(n,r))}function p4(n,r,t){return Oa(ee(n,r),Kr(n,t))}function K4(n,r,t){return Jt(ee(n,r),Kr(n,t))}function v4(n,r){return Mr(ee(n,r))}function T4(n,r){return ja(Kr(n,r))}function I4(n,r){return Bn(globalThis.Object.keys(r).reduce((t,o)=>{return{...t,[o]:Kr(n,r[o])}},{}))}function Z4(n,r){let[t,o]=[Kr(n,as(r)),os(r)],a=Ca(r);return a.patternProperties[o]=t,a}function y4(n,r){return jn(r)?{...rd(n,r.$ref),[tr]:r[tr]}:r}function nE(n,r){return tt(ee(n,r))}function rE(n,r){return Dn(ee(n,r))}function ee(n,r){return r.map((t)=>Kr(n,t))}function Kr(n,r){return Wr(r)?J(Kr(n,xn(r,[wr])),r):Qa(r)?J(Kr(n,xn(r,[_t])),r):ko(r)?J(y4(n,r),r):mt(r)?J(F4(n,r.items),r):vo(r)?J(j4(n,r.items),r):wt(r)?J(q4(n,r.target,r.parameters)):ht(r)?J(p4(n,r.parameters,r.returns),r):$t(r)?J(K4(n,r.parameters,r.returns),r):Nn(r)?J(v4(n,r.allOf),r):Io(r)?J(T4(n,r.items),r):yn(r)?J(I4(n,r.properties),r):yo(r)?J(Z4(n,r)):Fr(r)?J(nE(n,r.items||[]),r):wn(r)?J(rE(n,r.anyOf),r):r}function tE(n,r){return r in n?Kr(n,n[r]):hn()}function Y1(n){return globalThis.Object.getOwnPropertyNames(n).reduce((r,t)=>{return{...r,[t]:tE(n,t)}},{})}var J1=u(()=>{Tt();xl();no();Fc();Ci();jc();pc();Lt();na();rt();Zc();te();pr();es();ss();hr();fs();ae();ls();zo();or();rn();Rn()});class X1{constructor(n){let r=Y1(n),t=this.WithIdentifiers(r);this.$defs=t}Import(n,r){let t={...this.$defs,[n]:J(this.$defs[n],r)};return J({[O]:"Import",$defs:t,$ref:n})}WithIdentifiers(n){return globalThis.Object.getOwnPropertyNames(n).reduce((r,t)=>{return{...r,[t]:{...n[t],$id:t}}},{})}}function L1(n){return new X1(n)}var V1=u(()=>{Tt();rn();J1()});var td=u(()=>{V1()});function C1(n,r){return J({[O]:"Not",not:n},r)}var Q1=u(()=>{y();rn()});var od=u(()=>{Q1()});function P1(n,r){return $t(n)?tt(n.parameters,r):hn()}var G1=u(()=>{zo();hr();Rn()});var ad=u(()=>{G1()});function O1(n,r={}){if(Zn(r.$id))r.$id=`T${oE++}`;let t=Ca(n({[O]:"This",$ref:`${r.$id}`}));return t.$id=r.$id,J({[yr]:"Recursive",...t},r)}var oE=0;var N1=u(()=>{Ei();y();rn()});var cd=u(()=>{N1()});function x1(n,r){let t=Ln(n)?new globalThis.RegExp(n):n;return J({[O]:"RegExp",type:"RegExp",source:t.source,flags:t.flags},r)}var q1=u(()=>{y();rn()});var ed=u(()=>{q1()});function aE(n){return Nn(n)?n.allOf:wn(n)?n.anyOf:Fr(n)?n.items??[]:[]}function F1(n){return aE(n)}var j1=u(()=>{Rn()});var id=u(()=>{j1()});function p1(n,r){return $t(n)?J(n.returns,r):hn(r)}var K1=u(()=>{y();hr();Rn()});var sd=u(()=>{K1()});var v1=()=>{};var T1=()=>{};var I1=u(()=>{v1();T1()});var Z1=()=>{};var y1=u(()=>{Z1()});class n2{constructor(n){this.schema=n}Decode(n){return new r2(this.schema,n)}}class r2{constructor(n,r){this.schema=n,this.decode=r}EncodeTransform(n,r){let a={Encode:(c)=>r[tr].Encode(n(c)),Decode:(c)=>this.decode(r[tr].Decode(c))};return{...r,[tr]:a}}EncodeSchema(n,r){let t={Decode:this.decode,Encode:n};return{...r,[tr]:t}}Encode(n){return ko(this.schema)?this.EncodeTransform(n,this.schema):this.EncodeSchema(n,this.schema)}}function t2(n){return new n2(n)}var o2=u(()=>{rn();Rn()});var fd=u(()=>{o2()});function a2(n={}){return J({[O]:n[O]??"Unsafe"},n)}var c2=u(()=>{y();rn()});var ld=u(()=>{c2()});function e2(n){return J({[O]:"Void",type:"void"},n)}var i2=u(()=>{y();rn()});var dd=u(()=>{i2()});var ud={};co(ud,{Void:()=>e2,Uppercase:()=>A1,Unsafe:()=>a2,Unknown:()=>Uo,Union:()=>Dn,Undefined:()=>qi,Uncapitalize:()=>h1,Uint8Array:()=>ji,Tuple:()=>tt,Transform:()=>t2,TemplateLiteral:()=>Yi,Symbol:()=>Ni,String:()=>kt,ReturnType:()=>p1,Rest:()=>F1,Required:()=>rc,RegExp:()=>x1,Ref:()=>Vt,Recursive:()=>O1,Record:()=>ts,ReadonlyOptional:()=>ns,Readonly:()=>Xr,Promise:()=>Li,Pick:()=>Yo,Partial:()=>nc,Parameters:()=>P1,Optional:()=>Sr,Omit:()=>Wo,Object:()=>Bn,Number:()=>nt,Null:()=>Gi,Not:()=>C1,Never:()=>hn,Module:()=>L1,Mapped:()=>lw,Lowercase:()=>m1,Literal:()=>En,KeyOf:()=>Ka,Iterator:()=>ja,Intersect:()=>Mr,Integer:()=>f1,Instantiate:()=>i1,InstanceType:()=>t1,Index:()=>Ho,Function:()=>Jt,Extract:()=>ya,Extends:()=>Ia,Exclude:()=>Za,Enum:()=>Lw,Date:()=>Qi,ConstructorParameters:()=>Jw,Constructor:()=>Oa,Const:()=>Ww,Composite:()=>Ew,Capitalize:()=>g1,Boolean:()=>Bi,BigInt:()=>qa,Awaited:()=>pa,AsyncIterator:()=>Ga,Array:()=>Pa,Argument:()=>Dm,Any:()=>Mo});var s2=u(()=>{qc();Il();Fc();jc();Ci();Ic();Wi();A0();k0();pc();E0();Pi();S0();L0();oe();Q0();na();Lt();P0();O0();N0();rt();q0();Zc();te();Yr();fr();td();hr();od();Oi();ta();pr();es();ro();ad();fs();ss();Vi();aa();rs();ae();cd();ca();ed();ls();id();sd();Fa();xi();oo();fd();zo();pi();Fi();or();va();ld();dd()});var er;var f2=u(()=>{s2();er=ud});var l2=u(()=>{xl();Tt();Yt();Tl();bm();Nc();$m();xc();rn();qc();Fc();Il();jc();Ci();Ic();Wi();A0();k0();pc();E0();Pi();S0();L0();oe();Q0();na();Lt();P0();O0();N0();rt();Zc();q0();te();Yr();td();fr();hr();od();Oi();ta();pr();es();ro();ad();fs();ss();Vi();aa();rs();ae();cd();ca();ed();ls();id();sd();I1();y1();Fa();xi();oo();fd();zo();pi();Fi();or();va();ld();dd();f2()});var bd,gd,jx,px;var _d=u(()=>{l2();bd=er.Object({email:er.String({format:"email"})}),gd=er.Object({token:er.String()}),jx=er.Object({success:er.Boolean(),message:er.Optional(er.String())}),px=er.Object({success:er.Boolean(),message:er.Optional(er.String()),data:er.Optional(er.Object({user:er.Object({id:er.String(),email:er.String()}),accessToken:er.String(),refreshToken:er.String()}))})});import{eq as md}from"drizzle-orm";import{Elysia as cE}from"elysia";function ds(n,r,t,o,a,c,e,i,s,f){let{db:l,logger:d,usersTable:b}=n,w=r.route||"/auth/magic-link",h=r.verifyRoute||"/auth/magic-link/verify",_=r.expiresIn||"15m",g=r.redirectUrl||"",R=new cE;if(!r.enabled)return R;return R.post(w,async(k)=>{if(!l||!b)return{success:!1,message:"Database not configured"};if(!t?.isAvailable())return d.error("[AUTH] Magic link requested but email service not available"),{success:!1,message:"Email service not available"};let{email:M}=k.body,N=(await l.select().from(b).where(md(b.email,M)).limit(1))[0];if(!N)return d.info("[AUTH] Magic link requested for non-existent email",{email:M}),{success:!0,message:"If an account exists, a magic link has been sent"};if(N.isLocked)return d.warn("[AUTH] Magic link requested for locked account",{email:M}),{success:!0,message:"If an account exists, a magic link has been sent"};let m=La(),A=gt(m),H=new Date(Date.now()+Va(_));await e({userId:N.id,email:M,tokenHash:A,expiresAt:H});let D=g?`${g}?token=${m}`:`${h}?token=${m}`,E=await t.sendMagicLinkEmail(M,D,f);if(!E.success)return d.error("[AUTH] Failed to send magic link email",{email:M,error:E.error}),{success:!1,message:"Failed to send email"};return d.info("[AUTH] Magic link sent",{email:M,userId:N.id}),{success:!0,message:"If an account exists, a magic link has been sent"}},{body:bd,detail:{tags:["Authentication"],summary:"Request Magic Link",description:"Send a magic link to the user's email for passwordless login"}}),R.get(h,async(k)=>{if(!l||!b)return{success:!1,message:"Database not configured"};let M=k.query.token;if(!M)return{success:!1,message:"Token is required"};let C=gt(M),N=await i(C);if(!N)return d.warn("[AUTH] Invalid magic link token"),{success:!1,message:"Invalid or expired token"};if(new Date>N.expiresAt)return await s(C),d.warn("[AUTH] Expired magic link token",{email:N.email}),{success:!1,message:"Invalid or expired token"};let A=(await l.select().from(b).where(md(b.id,N.userId)).limit(1))[0];if(!A)return await s(C),{success:!1,message:"User not found"};await s(C),await l.update(b).set({lastLoginAt:new Date,loginCount:(A.loginCount||0)+1,emailVerified:!0}).where(md(b.id,A.id));let H=k.request.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||k.request.headers.get("x-real-ip")?.trim()||"unknown",D=k.request.headers.get("user-agent")||"",E=o(A.id),S=a(A.id),z=await c({userId:A.id,deviceInfo:{ipAddress:H,userAgent:D,deviceType:"unknown"},loginMethod:"magic_link"});return d.info("[AUTH] Magic link login successful",{userId:A.id,email:A.email}),k.set.headers["x-session-id"]=z,{success:!0,data:{user:{id:A.id,email:A.email},accessToken:E,refreshToken:S}}},{query:gd,detail:{tags:["Authentication"],summary:"Verify Magic Link",description:"Verify magic link token and login user"}}),R}var wd=u(()=>{_d();Yc();_d()});import{eq as tc}from"drizzle-orm";import{Elysia as eE}from"elysia";function us(n,r,t,o,a){let{db:c,logger:e,usersTable:i}=n,s=r.route||"/auth/me",f=new eE;if(!r.enabled)return f;return f.get(s,async(l)=>{if(!c||!i)return{success:!1,message:"Database not configured"};let d=l.request.headers.get("x-user-id");if(!d)return l.set.status=401,{success:!1,message:"Unauthorized"};let w=(await c.select().from(i).where(tc(i.id,d)).limit(1))[0];if(!w)return l.set.status=404,{success:!1,message:"User not found"};let{password:h,..._}=w,g=null,R=[],k=[],M=[],C=[];if(r.includeProfile&&t){let m=t.profiles;if(m&&c)g=(await c.select().from(m).where(tc(m.userId,d)).limit(1))[0]||null}if(r.includeAddresses&&t){let m=t.addresses;if(m&&c)R=await c.select().from(m).where(tc(m.ownerId,d))}if(r.includePhones&&t){let m=t.phones;if(m&&c)k=await c.select().from(m).where(tc(m.ownerId,d))}if(r.includeFiles&&t){let m=t.files;if(m&&c)M=await c.select().from(m).where(tc(m.uploadedBy,d))}if(r.includeRoles&&t){let{userRoles:m,roles:A}=t;if(m&&A&&c){let D=(await c.select().from(m).where(tc(m.userId,d))).map((E)=>E.roleId);if(D.length>0){let{inArray:E}=await import("drizzle-orm");C=await c.select().from(A).where(E(A.id,D))}}}return e.info("[AUTH] Me endpoint accessed",{userId:d}),JSON.parse(JSON.stringify({success:!0,data:{user:_,profile:g,addresses:R,phones:k,files:M,roles:C}},(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"}}),f}var hd=()=>{};import{eq as zr,and as bs}from"drizzle-orm";import{Elysia as iE}from"elysia";function d2(n,r,t,o,a,c,e,i,s,f,l){let{db:d,logger:b,usersTable:w}=n,h=r.basePath,_={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||"lax",path:e?.path||"/"},g={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}},R=new iE;return R.get(`${h}/:provider`,async(k)=>{let M=k.params.provider;if(!r.isProviderEnabled(M))return k.set.status=404,{success:!1,message:`OAuth provider "${M}" is not enabled`};let C=k.query.link_user_id,N=k.query.redirect_url,m=r.buildAuthorizationUrl(M,C,N);return k.set.status=302,k.set.headers.Location=m,null},{detail:{tags:["Authentication"],summary:"OAuth Redirect",description:"Redirects to the OAuth provider authorization page"}}),R.get(`${h}/:provider/callback`,async(k)=>{let M=k.params.provider,C=k.query,{code:N,state:m,error:A,error_description:H}=C,D=r.errorRedirectUrl;if(A)return b.warn("[OAUTH] Provider returned error",{provider:M,error:A,error_description:H}),k.set.status=302,k.set.headers.Location=`${D}?error=${encodeURIComponent(H||A)}`,null;if(!N||!m)return k.set.status=302,k.set.headers.Location=`${D}?error=missing_code_or_state`,null;let E=r.consumeState(m);if(!E)return b.warn("[OAUTH] Invalid or expired state",{provider:M,state:m}),k.set.status=302,k.set.headers.Location=`${D}?error=invalid_state`,null;if(E.provider!==M)return b.warn("[OAUTH] State provider mismatch",{expected:E.provider,got:M}),k.set.status=302,k.set.headers.Location=`${D}?error=provider_mismatch`,null;if(!d||!w)return k.set.status=302,k.set.headers.Location=`${D}?error=server_error`,null;let S;try{S=await r.exchangeCode(M,N)}catch(en){return b.error("[OAUTH] Code exchange failed",{provider:M,error:en}),k.set.status=302,k.set.headers.Location=`${D}?error=token_exchange_failed`,null}let{profile:z,tokens:U}=S,P=n.oauthAccountsTable,p=null;if(E.linkUserId&&r.allowAccountLinking){if(p=E.linkUserId,P){let Yn=await d.select().from(P).where(bs(zr(P.provider,M),zr(P.providerAccountId,z.providerAccountId))).limit(1);if(Yn.length>0){let nr=Yn[0];if(nr.userId!==p)return k.set.status=302,k.set.headers.Location=`${D}?error=account_already_linked_to_another_user`,null;await d.update(P).set({accessToken:U.accessToken,refreshToken:U.refreshToken??null,tokenExpiresAt:U.expiresAt??null,scope:U.scope??null,rawProfile:z.rawProfile,lastUsedAt:new Date}).where(zr(P.id,nr.id))}else await d.insert(P).values({userId:p,provider:M,providerAccountId:z.providerAccountId,providerEmail:z.email??null,providerName:z.name??null,providerAvatarUrl:z.avatarUrl??null,accessToken:U.accessToken,refreshToken:U.refreshToken??null,tokenExpiresAt:U.expiresAt??null,scope:U.scope??null,rawProfile:z.rawProfile,isPrimary:!1,lastUsedAt:new Date})}b.info("[OAUTH] Account linked successfully",{userId:p,provider:M});let en=E.redirectUrl||r.successRedirectUrl;return k.set.status=302,k.set.headers.Location=`${en}?linked=true&provider=${M}`,null}if(P){let en=await d.select().from(P).where(bs(zr(P.provider,M),zr(P.providerAccountId,z.providerAccountId))).limit(1);if(en.length>0){let Yn=en[0];p=Yn.userId,await d.update(P).set({accessToken:U.accessToken,refreshToken:U.refreshToken??null,tokenExpiresAt:U.expiresAt??null,scope:U.scope??null,rawProfile:z.rawProfile,lastUsedAt:new Date}).where(zr(P.id,Yn.id))}}if(!p&&z.email){let en=await d.select().from(w).where(zr(w.email,z.email)).limit(1);if(en.length>0){if(p=en[0].id,P)await d.insert(P).values({userId:p,provider:M,providerAccountId:z.providerAccountId,providerEmail:z.email??null,providerName:z.name??null,providerAvatarUrl:z.avatarUrl??null,accessToken:U.accessToken,refreshToken:U.refreshToken??null,tokenExpiresAt:U.expiresAt??null,scope:U.scope??null,rawProfile:z.rawProfile,isPrimary:!1,lastUsedAt:new Date}).onConflictDoNothing();b.info("[OAUTH] Merged OAuth account with existing user by email",{userId:p,provider:M,email:z.email})}}if(!p){if(!r.autoCreateUser)return k.set.status=302,k.set.headers.Location=`${D}?error=user_not_found`,null;let en=z.email??`${M}_${z.providerAccountId}@oauth.local`;if(p=(await d.insert(w).values({email:en,password:null,verifiedAt:z.email?new Date:null,isActive:!0}).returning())[0].id,P)await d.insert(P).values({userId:p,provider:M,providerAccountId:z.providerAccountId,providerEmail:z.email??null,providerName:z.name??null,providerAvatarUrl:z.avatarUrl??null,accessToken:U.accessToken,refreshToken:U.refreshToken??null,tokenExpiresAt:U.expiresAt??null,scope:U.scope??null,rawProfile:z.rawProfile,isPrimary:!0,lastUsedAt:new Date});if(b.info("[OAUTH] Created new user via OAuth",{userId:p,provider:M,email:z.email}),r.sendInviteOnCreate&&z.email&&s?.isAvailable()&&f)try{let gn=La(),et=gt(gn),_n=new Date(Date.now()+Va("7d"));await f({userId:p,email:z.email,tokenHash:et,expiresAt:_n});let Jn=`${r.successRedirectUrl.replace(/\/$/,"").replace(/\/[^/]+$/,"/set-password")}?token=${gn}`;await s.sendEmail({to:z.email,subject:`Welcome to ${l??"the platform"} \u2014 Set your password`,html:`
78
78
  <p>Hi${z.name?` ${z.name}`:""},</p>
79
79
  <p>Your account has been created via ${M} login. You can optionally set a password to also sign in with your email and password.</p>
80
80
  <p><a href="${Jn}">Set your password</a></p>
@@ -1523,7 +1523,7 @@ data: ${t}
1523
1523
  </script>
1524
1524
  <script src="${o?o:`https://cdn.jsdelivr.net/npm/@scalar/api-reference@${r}/dist/browser/standalone.min.js`}" crossorigin></script>
1525
1525
  </body>
1526
- </html>`;var El=Symbol.for("TypeBox.Kind"),cA=(n)=>n.split("/").map((r)=>{if(r.startsWith(":")){if(r=r.slice(1,r.length),r.endsWith("?"))r=r.slice(0,-1);r=`{${r}}`}return r}).join("/"),kl=(n,r,t)=>{if(r===void 0)return[];if(typeof r==="string")if(r in t)r=t[r];else throw Error(`Can't find model ${r}`);return Object.entries(r?.properties??[]).map(([o,a])=>{let{type:c=void 0,description:e,examples:i,...s}=a;return{description:e,examples:i,schema:{type:c,...s},in:n,name:o,required:r.required?.includes(o)??!1}})},Wc=(n,r)=>{if(typeof r==="object"&&["void","undefined","null"].includes(r.type))return;let t={};for(let o of n)t[o]={schema:typeof r==="string"?{$ref:`#/components/schemas/${r}`}:("$ref"in r)&&(El in r)&&r[El]==="Ref"?{...r,$ref:`#/components/schemas/${r.$ref}`}:aA({...r},{from:Rl.Ref(""),to:({$ref:a,...c})=>{if(!a.startsWith("#/components/schemas/"))return Rl.Ref(`#/components/schemas/${a}`,c);return Rl.Ref(a,c)}})};return t},t_=(n)=>n.charAt(0).toUpperCase()+n.slice(1),eA=(n,r)=>{let t=n.toLowerCase();if(r==="/")return t+"Index";for(let o of r.split("/"))if(o.charCodeAt(0)===123)t+="By"+t_(o.slice(1,-1));else t+=t_(o);return t},Ya=(n)=>{if(!n)return;if(typeof n==="string")return n;if(Array.isArray(n))return[...n];return{...n}},o_=({schema:n,path:r,method:t,hook:o,models:a})=>{if(o=Ya(o),o.parse&&!Array.isArray(o.parse))o.parse=[o.parse];let c=o.parse?.map((w)=>{switch(typeof w){case"string":return w;case"object":if(w&&typeof w?.fn!=="string")return;switch(w?.fn){case"json":case"application/json":return"application/json";case"text":case"text/plain":return"text/plain";case"urlencoded":case"application/x-www-form-urlencoded":return"application/x-www-form-urlencoded";case"arrayBuffer":case"application/octet-stream":return"application/octet-stream";case"formdata":case"multipart/form-data":return"multipart/form-data"}}}).filter((w)=>w!==void 0);if(!c||c.length===0)c=["application/json","multipart/form-data","text/plain"];r=cA(r);let e=typeof c==="string"?[c]:c??["application/json"],i=Ya(o?.body),s=Ya(o?.params),f=Ya(o?.headers),l=Ya(o?.query),d=Ya(o?.response);if(typeof d==="object")if(El in d){let{type:w,properties:h,required:_,additionalProperties:g,patternProperties:R,$ref:k,...M}=d;d={"200":{...M,description:M.description,content:Wc(e,w==="object"||w==="array"?{type:w,properties:h,patternProperties:R,items:d.items,required:_}:d)}}}else Object.entries(d).forEach(([w,h])=>{if(typeof h==="string"){if(!a[h])return;let{type:_,properties:g,required:R,additionalProperties:k,patternProperties:M,...C}=a[h];d[w]={...C,description:C.description,content:Wc(e,h)}}else{let{type:_,properties:g,required:R,additionalProperties:k,patternProperties:M,...C}=h;d[w]={...C,description:C.description,content:Wc(e,_==="object"||_==="array"?{type:_,properties:g,patternProperties:M,items:h.items,required:R}:h)}}});else if(typeof d==="string"){if(!(d in a))return;let{type:w,properties:h,required:_,$ref:g,additionalProperties:R,patternProperties:k,...M}=a[d];d={"200":{...M,content:Wc(e,d)}}}let b=[...kl("header",f,a),...kl("path",s,a),...kl("query",l,a)];n[r]={...n[r]?n[r]:{},[t.toLowerCase()]:{...f||s||l||i?{parameters:b}:{},...d?{responses:d}:{},operationId:o?.detail?.operationId??eA(t,r),...o?.detail,...i?{requestBody:{required:!0,content:Wc(e,typeof i==="string"?{$ref:`#/components/schemas/${i}`}:i)}}:null}}},iA=(n,{excludeStaticFile:r=!0,exclude:t=[]})=>{let o={};for(let[a,c]of Object.entries(n))if(!t.some((e)=>{if(typeof e==="string")return a===e;return e.test(a)})&&!a.includes("*")&&(r?!a.includes("."):!0))Object.keys(c).forEach((e)=>{let i=c[e];if(a.includes("{")){if(!i.parameters)i.parameters=[];i.parameters=[...a.split("/").filter((s)=>s.startsWith("{")&&!i.parameters.find((f)=>f.in==="path"&&f.name===s.slice(1,s.length-1))).map((s)=>({schema:{type:"string"},in:"path",name:s.slice(1,s.length-1),required:!0})),...i.parameters]}if(!i.responses)i.responses={200:{}}}),o[a]=c;return o},c_=({provider:n="scalar",scalarVersion:r="latest",scalarCDN:t="",scalarConfig:o={},documentation:a={},version:c="5.9.0",excludeStaticFile:e=!0,path:i="/swagger",specPath:s=`${i}/json`,exclude:f=[],swaggerOptions:l={},theme:d=`https://unpkg.com/swagger-ui-dist@${c}/swagger-ui.css`,autoDarkMode:b=!0,excludeMethods:w=["OPTIONS"],excludeTags:h=[]}={})=>{let _={},g=0;if(!c)c=`https://unpkg.com/swagger-ui-dist@${c}/swagger-ui.css`;let R={title:"Elysia Documentation",description:"Development documentation",version:"0.0.0",...a.info},k=s.startsWith("/")?s.slice(1):s,M=new nA({name:"@elysiajs/swagger"}),C=new Response(n==="swagger-ui"?tA(R,c,d,JSON.stringify({url:k,dom_id:"#swagger-ui",...l},(N,m)=>typeof m==="function"?void 0:m),b):oA(R,r,{spec:{url:k,...o.spec},...o,_integration:"elysiajs"},t),{headers:{"content-type":"text/html; charset=utf8"}});return M.get(i,C,{detail:{hide:!0}}).get(s,function(){let m=M.getGlobalRoutes();if(m.length!==g){let A=["GET","PUT","POST","DELETE","OPTIONS","HEAD","PATCH","TRACE"];g=m.length,m.forEach((H)=>{if(H.hooks?.detail?.hide===!0)return;if(w.includes(H.method))return;if(A.includes(H.method)===!1&&H.method!=="ALL")return;if(H.method==="ALL")A.forEach((D)=>{o_({schema:_,hook:H.hooks,method:D,path:H.path,models:M.getGlobalDefinitions?.().type,contentType:H.hooks.type})});else o_({schema:_,hook:H.hooks,method:H.method,path:H.path,models:M.getGlobalDefinitions?.().type,contentType:H.hooks.type})})}return{openapi:"3.0.3",...{...a,tags:a.tags?.filter((A)=>!h?.includes(A?.name)),info:{title:"Elysia Documentation",description:"Development documentation",version:"0.0.0",...a.info}},paths:{...iA(_,{excludeStaticFile:e,exclude:Array.isArray(f)?f:[f]}),...a.paths},components:{...a.components,schemas:{...M.getGlobalDefinitions?.().type,...a.components?.schemas}}}},{detail:{hide:!0}}),M};function Sl(n){if(n?.enabled===!1)return null;let r={path:n?.path??"/swagger",provider:n?.provider??"scalar",excludeStaticFile:n?.excludeStaticFile??!0,exclude:n?.exclude??[],documentation:{info:{title:n?.documentation?.info?.title??"Nucleus API",description:n?.documentation?.info?.description??"Auto-generated API documentation",version:n?.documentation?.info?.version??"1.0.0",contact:n?.documentation?.info?.contact,license:n?.documentation?.info?.license},tags:n?.documentation?.tags??[],servers:n?.documentation?.servers},scalarConfig:n?.scalarConfig};return c_(r)}Ie();Qd();ni();var HE=(n)=>{let r=new Map;for(let t of n){let o=r.get(t.table_name),a=t.columns??o?.columns;r.set(t.table_name,{...o||{},...t,columns:a})}return Array.from(r.values())},zE=(n)=>({table_name:n.table_name,excluded_methods:n.excluded_methods?[...n.excluded_methods]:void 0,columns:n.columns?n.columns.map((r)=>({name:r.name,type:r.type})):void 0}),UE=(n)=>{let r=[];for(let[t,o]of Object.entries(n)){if(!o||typeof o!=="object")continue;let a=o,c=a._;if(c?.name){r.push({table_name:c.name});continue}let e=Object.getOwnPropertySymbols(a);for(let i of e){let s=a[i];if(s&&typeof s==="object"){let f=s;if(f.name&&typeof f.name==="string"){r.push({table_name:f.name});break}}}}return r};async function BE(n){let r=new DE;if(r.get("/health",()=>({status:"ok",timestamp:Date.now()})),n.staticAssets!==!1){let E=Sn("path"),S=Sn("fs"),z;if(typeof n.staticAssets==="string")z=n.staticAssets;else{let U=E.join(process.cwd(),"public"),P="";for(let p of["nucleus-core-ts","nucleus-core"])try{let K=Sn.resolve(`${p}/package.json`),B=E.join(E.dirname(K),"public");if(S.existsSync(B)){P=B;break}}catch{}if(P)z=P;else if(S.existsSync(U))z=U;else z=U}try{r.use(await au({prefix:"/nucleus-core",assets:z}))}catch{}}let t=[],o,a=process.cwd();if(typeof n.options==="string"){let E=Sn("fs"),S=Sn("path"),z=S.isAbsolute(n.options)?n.options:S.resolve(process.cwd(),n.options);a=S.dirname(z);let U=E.readFileSync(z,"utf-8");o=JSON.parse(U)}else o=n.options;if(o.email?.gmail?.json_file_path){let E=Sn("path"),S=o.email.gmail.json_file_path;if(!E.isAbsolute(S))o.email.gmail.json_file_path=E.resolve(a,S)}let{authentication:c,audit:e,entities:i,database:s}=o,f=o.mode==="development",l=new Cr({service:o.appId||"nucleus",prettyPrint:f,colorize:f,auditEnabled:e?.enabled??!1}),d=ug(o);if(!d.valid){for(let E of d.errors)l.error(`[CONFIG] ${E.message}`,{field:E.field,envName:E.envName});throw Error("Nucleus configuration error: Missing required environment variables. Check logs for details.")}let{resolved:b}=d,w={access_token:c?.accessToken?.name||"access_token",refresh_token:c?.refreshToken?.name||"refresh_token",session_token:c?.sessionToken?.name||"session_token"},h=s?.schemas?.[0]||"main",_=ME(h);if(b.databaseUrl)await bg(b.databaseUrl,l);let g=b.databaseUrl?SE(b.databaseUrl):null,R={},k={};if(n.schema){let S=Sn("path").resolve(process.cwd(),n.schema),z=Sn(S);R=z.createAllTablesForSchema?z.createAllTablesForSchema(_):{}}if(n.relations){let S=Sn("path").resolve(process.cwd(),n.relations);k=Sn(S)}let M=Sl(n.swagger);if(M)r.use(M);let C=n.systemTables||[];t=Nf(o,C,"",h),l.info(`[AUTH] Built ${t.length} public routes`);let N=null,m=null,A=null,H=null;if(o.email?.gmail?.enabled&&o.email.gmail.json_file_path)l.info("[GmailService] Initializing...",{jsonFilePath:o.email.gmail.json_file_path,fromEmail:o.email.gmail.from_email}),H=new Jf({enabled:!0,jsonFilePath:o.email.gmail.json_file_path,fromEmail:o.email.gmail.from_email||"",fromName:o.email.gmail.from_name},l),l.info("[GmailService] isAvailable:",{available:H.isAvailable()});if(o.liveMonitoring?.enabled){let E=o.liveMonitoring.basePath||"/monitoring",S=o.liveMonitoring.streamInterval||150;r.use(Ag({getService:()=>A,logger:l,basePath:E,streamInterval:S}))}r.onStart(async()=>{tl(o);let E=Te();if(E&&o.rateLimit?.enabled!==!1)N=new Qf({redis:E,logger:l,config:o.rateLimit||{}}),l.info(`[RateLimit] Enabled with strategy: ${o.rateLimit?.strategy||"sliding-window"}`);if(E&&o.monitoring?.enabled){if(m=new Vf({redis:E,logger:l,gmail:H||void 0,config:o.monitoring,appId:o.appId}),m.start(),l.info("[Monitoring] Service started"),o.monitoring.endpoints?.enabled){let z={enabled:!0,basePath:o.monitoring.endpoints.basePath||"/monitoring",stream:{enabled:o.monitoring.endpoints.stream?.enabled!==!1,path:o.monitoring.endpoints.stream?.path||"/stream",interval:o.monitoring.endpoints.stream?.interval||"5s"},snapshot:{enabled:o.monitoring.endpoints.snapshot?.enabled!==!1,path:o.monitoring.endpoints.snapshot?.path||"/snapshot"},history:{enabled:o.monitoring.endpoints.history?.enabled!==!1,path:o.monitoring.endpoints.history?.path||"/history",maxMinutes:o.monitoring.endpoints.history?.maxMinutes||60},alerts:{enabled:o.monitoring.endpoints.alerts?.enabled!==!1,path:o.monitoring.endpoints.alerts?.path||"/alerts"}};r.use(ll({monitoringService:m,logger:l,endpoints:z}))}}if(o.liveMonitoring?.enabled)A=new Ce(o.liveMonitoring),A.start(),l.info("[LiveMonitoring] Service started");let S=c?.mode==="consumer";if(g&&n.schema&&!S){let P=await import(Sn("path").resolve(process.cwd(),n.schema)),p=R.auditLogs||P.auditLogs;if(e?.enabled&&p)l.addAuditTransport(new de({db:g,table:p,enabled:!0}));try{l.info(`Syncing schema to database (target: ${h})...`);let{sql:B}=await import("drizzle-orm");await g.execute(B.raw(`CREATE SCHEMA IF NOT EXISTS "${h}"`));try{let L=Object.fromEntries(Object.entries(R).filter(([q,F])=>{if(F===void 0||F===null)return!1;if(typeof F==="object"&&F!==null)return Object.getOwnPropertySymbols(F).length>0||F._!==void 0;return!1})),Y=Object.keys(L);l.info("[Schema] Tables to sync:",{tables:Y,count:Y.length});let Q=L.users;if(Q){let q=Object.getOwnPropertyNames(Q).filter((F)=>!F.startsWith("_"));l.info("[Schema] Users table columns:",{columns:q})}await(await EE({schema:_,...L},g,[h])).apply(),l.info("[Schema] pushSchema completed successfully")}catch(L){let Y=L instanceof Error?L.message:String(L);l.warn(`[Schema] pushSchema warning: ${Y}`)}console.log("Schema sync completed")}catch(B){let L=B instanceof Error?B.message:String(B);console.error("Schema sync failed:",L)}if(console.log("Database connection established"),o.authorization?.enabled){let B={...ib,...o.authorization};if(B.autoSeedClaims){let L=UE(R),Y=qe.map((q)=>zE(q)),Q=o.entities||[],V=HE([...L,...Q,...Y,...n.systemTables||[]]);l.info("[Authorization] Seeding claims...",{schemaEntities:L.length,systemEntities:Y.length,configEntities:Q.length,totalEntities:V.length}),await yu(g,R,k,V,B,l)}if(B.godminEmail&&B.godminPassword)l.info("[Authorization] Setting up godmin..."),await rb(g,R,B,l);l.info("[Authorization] Enabled")}let K=R.userSessions;if(K&&o.authentication?.sessions?.enabled){let{lt:B}=await import("drizzle-orm"),L=await g.update(K).set({isActive:!1,revokedAt:new Date,revokedReason:"expired"}).where(ie($r(K.isActive,!0),B(K.expiresAt,new Date)));l.info("[AUTH] Expired sessions cleanup completed",{expiredCount:L}),setInterval(async()=>{try{await g.update(K).set({isActive:!1,revokedAt:new Date,revokedReason:"expired"}).where(ie($r(K.isActive,!0),B(K.expiresAt,new Date)))}catch(Y){l.warn("[AUTH] Session cleanup failed",{error:Y})}},3600000)}}}).onRequest(async({request:E,set:S})=>{let z=Date.now();E.headers.set("x-request-start-time",String(z));let U=new URL(E.url),P=U.pathname,p=E.method,K=U.search,B=E.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||E.headers.get("x-real-ip")?.trim()||"unknown",L=E.headers.get("user-agent")||"unknown",Y,Q={};if(E.method!=="GET"&&E.method!=="HEAD")try{let v=await E.clone().text();Q=v?JSON.parse(v):{}}catch{Q={}}let V=e?.enabled?{id:kE(),user_id:"unknown",entity_name:P.split("/").filter(Boolean)[0]||"root",entity_id:null,operation_type:p,summary:"",old_values:{},new_values:Q,ip_address:B,user_agent:L,timestamp:new Date().toISOString(),path:P,query:K}:null,q=xf(t,P,p);if(N){let F=q?"public":"private",v;if(P.includes("/auth/login"))v="login";else if(P.includes("/auth/register"))v="register";else if(P.includes("/auth/password-reset"))v="passwordReset";else if(P.includes("/auth/magic-link"))v="magicLink";let dn=v?"auth":F,on=await N.check({ip:B,endpoint:P,category:dn,authType:v}),un=N.getHeaders(on);for(let[en,Yn]of Object.entries(un))S.headers[en]=Yn;if(!on.allowed){if(S.status=429,on.retryAfter)S.headers["Retry-After"]=String(on.retryAfter);if(l.warn(`[RateLimit] Blocked request from ${B} to ${P}`),m)m.recordRateLimitBlock();return new Response(JSON.stringify({error:"Too Many Requests",retryAfter:on.retryAfter}),{status:429,headers:{"Content-Type":"application/json"}})}}if(P==="/health")return;if(c?.enabled&&!q){if(!c.accessToken?.secret)return S.status=500,l.traceSync({message:"Authentication secrets not defined",level:"error",context:{path:P,method:p},audit:xt(V,"Authentication secrets not defined")}),Error("One or more authentication secrets are not defined");if(c.mode==="consumer"){Y=rl(E.headers,w);let v=so(Y.access_token||"",b.accessTokenSecret||"");if(!v.valid)return S.status=401,l.traceSync({message:"Invalid or missing access token",level:"warn",context:{path:P,method:p},audit:xt(V,"Invalid or missing access token")}),Error("Unauthenticated");let dn=v.payload.sub,on=v.payload.roles,un=v.payload.claims;if(E.headers.set("x-access-token",Y.access_token||""),E.headers.set("x-user-id",dn||""),on&&on.length>0)E.headers.set("x-user-roles",on.join(","));if(un&&un.length>0)E.headers.set("x-user-claims",un.join(","))}else{if(!c.refreshToken?.secret||!c.sessionToken?.secret)return S.status=500,l.traceSync({message:"Authentication secrets not defined",level:"error",context:{path:P,method:p},audit:xt(V,"Authentication secrets not defined")}),Error("One or more authentication secrets are not defined");if(Y=rl(E.headers,w),!Y.session_token)return S.status=401,l.traceSync({message:"No session token",level:"warn",context:{path:P,method:p},audit:xt(V,"No session token")}),Error("Unauthenticated");let v=await Qo({sessionId:Y.session_token});if(!v)return S.status=401,l.traceSync({message:"Invalid session",level:"warn",context:{path:P,method:p,sessionId:Y.session_token},audit:xt(V,"Invalid session")}),Error("Unauthenticated");let dn=R.userSessions;if(dn&&g){let T=(await g.select().from(dn).where($r(dn.id,Y.session_token)).limit(1))[0],Jn=T?.revokedAt!==null&&T?.revokedAt!==void 0&&!(typeof T?.revokedAt==="object"&&Object.keys(T.revokedAt).length===0);if(!T||T.isActive===!1||Jn)return S.status=401,l.traceSync({message:"Session revoked or inactive",level:"warn",context:{path:P,method:p,sessionId:Y.session_token,isActive:T?.isActive,revokedAt:T?.revokedAt},audit:xt(V,"Session revoked")}),Error("Session has been revoked");if(T.expiresAt&&new Date(T.expiresAt)<new Date)return S.status=401,l.traceSync({message:"Session expired",level:"warn",context:{path:P,method:p,sessionId:Y.session_token,expiresAt:T.expiresAt},audit:xt(V,"Session expired")}),Error("Session has expired")}if(v.lastActiveAt&&c.sessions?.inactivityTimeout){let _n=new Date(v.lastActiveAt).getTime(),T=st(c.sessions.inactivityTimeout)*1000;if(Date.now()-_n>T)return S.status=401,l.traceSync({message:"Session inactive timeout",level:"warn",context:{path:P,method:p,sessionId:Y.session_token,lastActiveAt:v.lastActiveAt},audit:xt(V,"Session inactive timeout")}),Error("Session expired due to inactivity")}Af(Y.session_token).catch(()=>{});let on=R.userSessions;if(on&&g)g.update(on).set({lastActivityAt:new Date}).where($r(on.id,Y.session_token)).catch(()=>{});let un=so(Y.access_token||"",b.accessTokenSecret||""),en=Y.access_token?un.valid:!1,Yn=Y.refresh_token?so(Y.refresh_token,b.refreshTokenSecret||"").valid:!1;if(!en&&Yn&&Y.refresh_token&&v.rememberMe===!0){let _n=await dg(v.userId,v.id,()=>fg({refreshTokenId:Y.refresh_token,options:o,sessionData:v}));if(_n.success&&_n.accessToken){Y.access_token=_n.accessToken;let T=`${w.access_token}=${_n.accessToken}; Path=/; HttpOnly; SameSite=Strict;Secure; Max-Age=${st(c.accessToken.expiresIn??"15m")}`;S.headers["Set-Cookie"]=T}}let nr=un.valid?un.payload.sub:v.userId,gn=un.valid?un.payload.roles:void 0,et=un.valid?un.payload.claims:void 0;if(E.headers.set("x-access-token",Y.access_token||""),E.headers.set("x-refresh-token",Y.refresh_token||""),E.headers.set("x-session-id",Y.session_token||""),E.headers.set("x-user-id",nr||""),gn&&gn.length>0)E.headers.set("x-user-roles",gn.join(","));if(et&&et.length>0)E.headers.set("x-user-claims",et.join(","))}}}).onAfterHandle(({request:E,set:S})=>{if(m){let z=E.headers.get("x-request-start-time"),U=z?parseInt(z,10):Date.now(),P=Date.now()-U,p=new URL(E.url),K=typeof S.status==="number"?S.status:200;m.recordRequest({endpoint:p.pathname,method:E.method,status:K,responseTimeMs:P,isError:K>=400,errorType:K>=500?"server_error":K>=400?"client_error":void 0})}if(A){let z=new URL(E.url),U={};E.headers.forEach((P,p)=>{U[p]=P}),A.recordRequest({path:z.pathname,method:E.method,timestamp:Date.now(),headers:U})}}).onError((E)=>{let{set:S,code:z,error:U}=E,P=typeof z==="number"?z:500,p=U instanceof Error?U.message:"Internal Server Error";return S.status=P,Response.json({isSuccess:!1,message:p,status:P,errors:[U],data:null})}),l.info("Creating routes for entities"),fl(r,{db:g,schemaTables:R,schemaRelations:k,entities:i,logger:l,databaseUrl:b.databaseUrl,storage:o.storage,authorization:o.authorization,emailServiceAvailable:!!(o.email?.gmail?.enabled&&o.email.gmail.json_file_path)});let D=c?.mode==="consumer";if(c?.enabled&&!D&&g){let E=R.users,S=R.userSessions||R.user_sessions||R.sessions;if(!S&&c.sessions?.enabled)l.warn("[AUTH] sessions is enabled but user_sessions table not found in schema. Disabling sessions.");if(E){tl(o);let{createAuthRoutes:z}=(Qd(),se(M2)),{signJWT:U,verifyJWT:P}=(Vo(),se(wu)),{generateSession:p,deleteSession:K}=(Rf(),se(Iu));z(r,{authConfig:{db:g,logger:l,usersTable:E,sessionsTable:S,userRolesTable:R.userRoles,rolesTable:R.roles,roleClaimsTable:R.roleClaims,claimsTable:R.claims,authentication:{enabled:c.enabled,accessToken:c.accessToken,refreshToken:c.refreshToken,sessionToken:c.sessionToken}},features:{login:c.login,register:c.register,logout:c.logout,refresh:c.refresh,passwordReset:(()=>{let B=!!(o.email?.gmail?.enabled&&o.email.gmail.json_file_path);if(c.passwordReset?.enabled&&!B)return l.warn("[AUTH] passwordReset is enabled but no email provider is configured. Disabling passwordReset."),{...c.passwordReset,enabled:!1};return c.passwordReset})(),passwordChange:c.passwordChange,passwordSet:c.passwordSet,sessions:c.sessions,magicLink:(()=>{let B=!!(o.email?.gmail?.enabled&&o.email.gmail.json_file_path);if(c.magicLink?.enabled&&!B)return l.warn("[AUTH] magicLink is enabled but no email provider is configured. Disabling magicLink."),{...c.magicLink,enabled:!1};return c.magicLink})(),me:c.me||{enabled:!0,route:"/auth/me"},invite:(()=>{let B=!!(o.email?.gmail?.enabled&&o.email.gmail.json_file_path);if(c.invite?.enabled&&!B)return l.warn("[AUTH] invite is enabled but no email provider is configured. Disabling invite."),{...c.invite,enabled:!1};return c.invite})(),captcha:c.captcha,oauth:c.oauth?.enabled&&b.oauthProviders?{...c.oauth,providers:b.oauthProviders}:void 0},sessionsTable:S,oauthAccountsTable:R.oauthAccounts,schemaTables:R,schemaRelations:k,databaseUrl:b.databaseUrl,admin:{impersonate:{enabled:!0},changeUserId:{enabled:!0}},emailService:H,appName:o.appId,captchaService:(()=>{let B=Te();if(!c.captcha?.enabled||!B)return null;return new Wf({redis:{get:async(Y)=>{let Q=await B.read(Y);return Q.success?Q.data:null},set:async(Y,Q,V)=>{await B.create(Y,Q,V?.ex)},del:async(Y)=>{await B.remove(Y)}},logger:l,config:{enabled:!0,type:c.captcha.type||"math",difficulty:c.captcha.difficulty||"medium",expiresIn:c.captcha.expiresIn||"5m",maxAttempts:c.captcha.maxAttempts||3,caseSensitive:c.captcha.caseSensitive??!1}})})(),tokenResponseConfig:{accessToken:{setHeadersEnabled:c.accessToken?.setHeadersEnabled??!0,returnJson:c.accessToken?.returnJson??!0},refreshToken:{setHeadersEnabled:c.refreshToken?.setHeadersEnabled??!0,returnJson:c.refreshToken?.returnJson??!0},sessionToken:{setHeadersEnabled:c.sessionToken?.setHeadersEnabled??!0,returnJson:c.sessionToken?.returnJson??!0}},helpers:{signAccessToken:(B,L,Y)=>U({subject:B,expiresInSeconds:st(c.accessToken?.expiresIn||"15m"),issuer:c.accessToken?.issuer,audience:c.accessToken?.audience,customClaims:{...L&&L.length>0?{roles:L}:{},...Y&&Y.length>0?{claims:Y}:{}}},b.accessTokenSecret||"",c.accessToken?.algorithm||"HS256"),signRefreshToken:(B)=>U({subject:B,expiresInSeconds:st(c.refreshToken?.expiresIn||"7d"),issuer:c.refreshToken?.issuer,audience:c.refreshToken?.audience},b.refreshTokenSecret||"",c.refreshToken?.algorithm||"HS256"),verifyRefreshToken:(B)=>P(B,b.refreshTokenSecret||""),createSession:async(B)=>{let L=await p({userId:B.userId,deviceInfo:B.deviceInfo});return L.success?L.session.id:""},destroySession:async(B)=>K({sessionId:B}),saveSessionToDb:async(B,L)=>{if(!S||!g)return;let Y=c.sessions,Q=L.deviceInfo||{},V=`${Q.browserName||""}-${Q.osName||""}-${Q.deviceType||""}`,q=await g.select().from(S).where(ie($r(S.userId,L.userId),$r(S.isActive,!0))),F=V&&!V.includes("--unknown")&&!V.includes("Bot/Crawler")&&!V.includes("Headless")&&V!=="--"&&V!=="--unknown",v=F?!q.some((Gn)=>Gn.deviceFingerprint===V):!1,dn=q.some((Gn)=>Gn.approvalStatus==="approved"),on=L.loginMethod==="impersonation"||L.loginMethod==="impersonation_stop",un=!on&&Y?.trustNewDevices===!1&&v&&F&&dn;l.info("[AUTH] Device fingerprint analysis",{userId:L.userId,deviceFingerprint:V,hasValidFingerprint:F,isNewDevice:v,existingSessionCount:q.length,hasAnyApprovedSession:dn,requiresApproval:un});let en=null,Yn="approved";if(un){let{randomBytes:Gn}=await import("crypto");en=Gn(32).toString("hex"),Yn="pending",l.info("[AUTH] New device requires approval",{userId:L.userId,deviceFingerprint:V,ipAddress:Q.ipAddress})}let nr=q.filter((Gn)=>{let qn=Gn,gr=qn.deviceFingerprint||"",Ar=qn.ipAddress||"";return(!gr||gr==="--"||gr==="--unknown"||gr.includes("Bot/Crawler")||gr.includes("Headless")||gr.includes("unknown-unknown"))&&(Ar==="127.0.0.1"||Ar==="::1"||Ar==="localhost"||!Ar)});if(nr.length>0){for(let Gn of nr)await g.update(S).set({isActive:!1,revokedAt:new Date,revokedReason:"bot_session_cleanup"}).where($r(S.id,Gn.id));l.info("[AUTH] Cleaned up stale bot/crawler sessions",{userId:L.userId,cleanedCount:nr.length})}if(F&&!v&&!on){let Gn=q.filter((qn)=>qn.deviceFingerprint===V);for(let qn of Gn)await g.update(S).set({isActive:!1,revokedAt:new Date,revokedReason:"relogin_same_device"}).where($r(S.id,qn.id));l.info("[AUTH] Revoked old sessions from same device",{userId:L.userId,deviceFingerprint:V,revokedCount:Gn.length})}if(!Y?.allowMultipleDevices&&q.length>0){if(q.filter((qn)=>qn.deviceFingerprint===V).length===0&&v)for(let qn of q)await g.update(S).set({isActive:!1,revokedAt:new Date,revokedReason:"new_device_login"}).where($r(S.id,qn.id))}if(Y?.maxActiveSessions){let{count:Gn}=await import("drizzle-orm"),gr=(await g.select({count:Gn()}).from(S).where(ie($r(S.userId,L.userId),$r(S.isActive,!0))))[0]?.count||0;if(gr>=Y.maxActiveSessions){let{asc:Ar}=await import("drizzle-orm"),Mt=await g.select().from(S).where(ie($r(S.userId,L.userId),$r(S.isActive,!0))).orderBy(Ar(S.createdAt)).limit(gr-Y.maxActiveSessions+1);for(let ir of Mt)await g.update(S).set({isActive:!1,revokedAt:new Date,revokedReason:"max_sessions_exceeded"}).where($r(S.id,ir.id))}}let gn=100;if(Q.isHeadless)gn-=50;if(Q.isBot)gn-=40;if(Q.isSuspicious)l.warn("[AUTH] Suspicious login detected",{userId:L.userId,suspiciousPatterns:Q.suspiciousPatterns,userAgent:Q.userAgent,ipAddress:Q.ipAddress});if(v)gn-=25;if(!Q.ipAddress||Q.ipAddress==="unknown")gn-=20;if(!Q.browserName)gn-=15;if(!Q.osName)gn-=15;if(!Q.deviceType||Q.deviceType==="unknown")gn-=10;if(!Q.deviceName||Q.deviceName==="Unknown Device")gn-=5;let et=V&&!V.includes("--unknown")&&V!=="--",_n=Q.ipAddress&&Q.ipAddress!=="unknown";if(et){if(q.filter((qn)=>qn.deviceFingerprint===V).length>0)gn+=20}if(_n){if(q.filter((qn)=>qn.ipAddress===Q.ipAddress).length>0)gn+=15}gn=Math.max(0,Math.min(100,gn));let T=50;if(await g.insert(S).values({id:B,userId:L.userId,tokenHash:B,deviceFingerprint:V,deviceName:Q.deviceName,deviceType:Q.deviceType,browserName:Q.browserName,browserVersion:Q.browserVersion,osName:Q.osName,osVersion:Q.osVersion,ipAddress:Q.ipAddress,locationCountry:Q.locationCountry,locationCity:Q.locationCity,loginMethod:L.loginMethod||"password",rememberMe:L.rememberMe??!1,trustScore:gn,lastActivityAt:new Date,createdAt:new Date,expiresAt:new Date(Date.now()+st(c.sessionToken?.expiresIn||"30d")*1000),isActive:Yn==="approved",approvalStatus:Yn,approvalToken:en,approvalRequestedAt:un?new Date:null}),H&&(Y?.notifyOnNewDevice&&v||gn<T||un)){let Gn=R.users;if(Gn){let gr=(await g.select().from(Gn).where($r(Gn.id,L.userId)).limit(1))[0];if(gr?.email){let Ar=gn<T,Mt=c.sessions?.approvalRedirectUrl||"http://localhost:3000/devices",ir=en?`${Mt}?action=approve&token=${en}`:"",lr=en?`${Mt}?action=reject&token=${en}`:"",Rs,ks;if(un)Rs="\uD83D\uDD10 New Device Login Requires Approval",ks=`
1526
+ </html>`;var El=Symbol.for("TypeBox.Kind"),cA=(n)=>n.split("/").map((r)=>{if(r.startsWith(":")){if(r=r.slice(1,r.length),r.endsWith("?"))r=r.slice(0,-1);r=`{${r}}`}return r}).join("/"),kl=(n,r,t)=>{if(r===void 0)return[];if(typeof r==="string")if(r in t)r=t[r];else throw Error(`Can't find model ${r}`);return Object.entries(r?.properties??[]).map(([o,a])=>{let{type:c=void 0,description:e,examples:i,...s}=a;return{description:e,examples:i,schema:{type:c,...s},in:n,name:o,required:r.required?.includes(o)??!1}})},Wc=(n,r)=>{if(typeof r==="object"&&["void","undefined","null"].includes(r.type))return;let t={};for(let o of n)t[o]={schema:typeof r==="string"?{$ref:`#/components/schemas/${r}`}:("$ref"in r)&&(El in r)&&r[El]==="Ref"?{...r,$ref:`#/components/schemas/${r.$ref}`}:aA({...r},{from:Rl.Ref(""),to:({$ref:a,...c})=>{if(!a.startsWith("#/components/schemas/"))return Rl.Ref(`#/components/schemas/${a}`,c);return Rl.Ref(a,c)}})};return t},t_=(n)=>n.charAt(0).toUpperCase()+n.slice(1),eA=(n,r)=>{let t=n.toLowerCase();if(r==="/")return t+"Index";for(let o of r.split("/"))if(o.charCodeAt(0)===123)t+="By"+t_(o.slice(1,-1));else t+=t_(o);return t},Ya=(n)=>{if(!n)return;if(typeof n==="string")return n;if(Array.isArray(n))return[...n];return{...n}},o_=({schema:n,path:r,method:t,hook:o,models:a})=>{if(o=Ya(o),o.parse&&!Array.isArray(o.parse))o.parse=[o.parse];let c=o.parse?.map((w)=>{switch(typeof w){case"string":return w;case"object":if(w&&typeof w?.fn!=="string")return;switch(w?.fn){case"json":case"application/json":return"application/json";case"text":case"text/plain":return"text/plain";case"urlencoded":case"application/x-www-form-urlencoded":return"application/x-www-form-urlencoded";case"arrayBuffer":case"application/octet-stream":return"application/octet-stream";case"formdata":case"multipart/form-data":return"multipart/form-data"}}}).filter((w)=>w!==void 0);if(!c||c.length===0)c=["application/json","multipart/form-data","text/plain"];r=cA(r);let e=typeof c==="string"?[c]:c??["application/json"],i=Ya(o?.body),s=Ya(o?.params),f=Ya(o?.headers),l=Ya(o?.query),d=Ya(o?.response);if(typeof d==="object")if(El in d){let{type:w,properties:h,required:_,additionalProperties:g,patternProperties:R,$ref:k,...M}=d;d={"200":{...M,description:M.description,content:Wc(e,w==="object"||w==="array"?{type:w,properties:h,patternProperties:R,items:d.items,required:_}:d)}}}else Object.entries(d).forEach(([w,h])=>{if(typeof h==="string"){if(!a[h])return;let{type:_,properties:g,required:R,additionalProperties:k,patternProperties:M,...C}=a[h];d[w]={...C,description:C.description,content:Wc(e,h)}}else{let{type:_,properties:g,required:R,additionalProperties:k,patternProperties:M,...C}=h;d[w]={...C,description:C.description,content:Wc(e,_==="object"||_==="array"?{type:_,properties:g,patternProperties:M,items:h.items,required:R}:h)}}});else if(typeof d==="string"){if(!(d in a))return;let{type:w,properties:h,required:_,$ref:g,additionalProperties:R,patternProperties:k,...M}=a[d];d={"200":{...M,content:Wc(e,d)}}}let b=[...kl("header",f,a),...kl("path",s,a),...kl("query",l,a)];n[r]={...n[r]?n[r]:{},[t.toLowerCase()]:{...f||s||l||i?{parameters:b}:{},...d?{responses:d}:{},operationId:o?.detail?.operationId??eA(t,r),...o?.detail,...i?{requestBody:{required:!0,content:Wc(e,typeof i==="string"?{$ref:`#/components/schemas/${i}`}:i)}}:null}}},iA=(n,{excludeStaticFile:r=!0,exclude:t=[]})=>{let o={};for(let[a,c]of Object.entries(n))if(!t.some((e)=>{if(typeof e==="string")return a===e;return e.test(a)})&&!a.includes("*")&&(r?!a.includes("."):!0))Object.keys(c).forEach((e)=>{let i=c[e];if(a.includes("{")){if(!i.parameters)i.parameters=[];i.parameters=[...a.split("/").filter((s)=>s.startsWith("{")&&!i.parameters.find((f)=>f.in==="path"&&f.name===s.slice(1,s.length-1))).map((s)=>({schema:{type:"string"},in:"path",name:s.slice(1,s.length-1),required:!0})),...i.parameters]}if(!i.responses)i.responses={200:{}}}),o[a]=c;return o},c_=({provider:n="scalar",scalarVersion:r="latest",scalarCDN:t="",scalarConfig:o={},documentation:a={},version:c="5.9.0",excludeStaticFile:e=!0,path:i="/swagger",specPath:s=`${i}/json`,exclude:f=[],swaggerOptions:l={},theme:d=`https://unpkg.com/swagger-ui-dist@${c}/swagger-ui.css`,autoDarkMode:b=!0,excludeMethods:w=["OPTIONS"],excludeTags:h=[]}={})=>{let _={},g=0;if(!c)c=`https://unpkg.com/swagger-ui-dist@${c}/swagger-ui.css`;let R={title:"Elysia Documentation",description:"Development documentation",version:"0.0.0",...a.info},k=s.startsWith("/")?s.slice(1):s,M=new nA({name:"@elysiajs/swagger"}),C=new Response(n==="swagger-ui"?tA(R,c,d,JSON.stringify({url:k,dom_id:"#swagger-ui",...l},(N,m)=>typeof m==="function"?void 0:m),b):oA(R,r,{spec:{url:k,...o.spec},...o,_integration:"elysiajs"},t),{headers:{"content-type":"text/html; charset=utf8"}});return M.get(i,C,{detail:{hide:!0}}).get(s,function(){let m=M.getGlobalRoutes();if(m.length!==g){let A=["GET","PUT","POST","DELETE","OPTIONS","HEAD","PATCH","TRACE"];g=m.length,m.forEach((H)=>{if(H.hooks?.detail?.hide===!0)return;if(w.includes(H.method))return;if(A.includes(H.method)===!1&&H.method!=="ALL")return;if(H.method==="ALL")A.forEach((D)=>{o_({schema:_,hook:H.hooks,method:D,path:H.path,models:M.getGlobalDefinitions?.().type,contentType:H.hooks.type})});else o_({schema:_,hook:H.hooks,method:H.method,path:H.path,models:M.getGlobalDefinitions?.().type,contentType:H.hooks.type})})}return{openapi:"3.0.3",...{...a,tags:a.tags?.filter((A)=>!h?.includes(A?.name)),info:{title:"Elysia Documentation",description:"Development documentation",version:"0.0.0",...a.info}},paths:{...iA(_,{excludeStaticFile:e,exclude:Array.isArray(f)?f:[f]}),...a.paths},components:{...a.components,schemas:{...M.getGlobalDefinitions?.().type,...a.components?.schemas}}}},{detail:{hide:!0}}),M};function Sl(n){if(n?.enabled===!1)return null;let r={path:n?.path??"/swagger",provider:n?.provider??"scalar",excludeStaticFile:n?.excludeStaticFile??!0,exclude:n?.exclude??[],documentation:{info:{title:n?.documentation?.info?.title??"Nucleus API",description:n?.documentation?.info?.description??"Auto-generated API documentation",version:n?.documentation?.info?.version??"1.0.0",contact:n?.documentation?.info?.contact,license:n?.documentation?.info?.license},tags:n?.documentation?.tags??[],servers:n?.documentation?.servers},scalarConfig:n?.scalarConfig};return c_(r)}Ie();Qd();ni();var HE=(n)=>{let r=new Map;for(let t of n){let o=r.get(t.table_name),a=t.columns??o?.columns;r.set(t.table_name,{...o||{},...t,columns:a})}return Array.from(r.values())},zE=(n)=>({table_name:n.table_name,excluded_methods:n.excluded_methods?[...n.excluded_methods]:void 0,columns:n.columns?n.columns.map((r)=>({name:r.name,type:r.type})):void 0}),UE=(n)=>{let r=[];for(let[t,o]of Object.entries(n)){if(!o||typeof o!=="object")continue;let a=o,c=a._;if(c?.name){r.push({table_name:c.name});continue}let e=Object.getOwnPropertySymbols(a);for(let i of e){let s=a[i];if(s&&typeof s==="object"){let f=s;if(f.name&&typeof f.name==="string"){r.push({table_name:f.name});break}}}}return r};async function BE(n){let r=new DE;if(r.get("/health",()=>({status:"ok",timestamp:Date.now()})),n.staticAssets!==!1){let E=Sn("path"),S=Sn("fs"),z;if(typeof n.staticAssets==="string")z=n.staticAssets;else{let U=E.join(process.cwd(),"public"),P="";for(let p of["nucleus-core-ts","nucleus-core"])try{let K=Sn.resolve(`${p}/package.json`),B=E.join(E.dirname(K),"public");if(S.existsSync(B)){P=B;break}}catch{}if(P)z=P;else if(S.existsSync(U))z=U;else z=U}try{r.use(await au({prefix:"/nucleus-core",assets:z}))}catch{}}let t=[],o,a=process.cwd();if(typeof n.options==="string"){let E=Sn("fs"),S=Sn("path"),z=S.isAbsolute(n.options)?n.options:S.resolve(process.cwd(),n.options);a=S.dirname(z);let U=E.readFileSync(z,"utf-8");o=JSON.parse(U)}else o=n.options;if(o.email?.gmail?.json_file_path){let E=Sn("path"),S=o.email.gmail.json_file_path;if(!E.isAbsolute(S))o.email.gmail.json_file_path=E.resolve(a,S)}let{authentication:c,audit:e,entities:i,database:s}=o,f=o.mode==="development",l=new Cr({service:o.appId||"nucleus",prettyPrint:f,colorize:f,auditEnabled:e?.enabled??!1}),d=ug(o);if(!d.valid){for(let E of d.errors)l.error(`[CONFIG] ${E.message}`,{field:E.field,envName:E.envName});throw Error("Nucleus configuration error: Missing required environment variables. Check logs for details.")}let{resolved:b}=d,w={access_token:c?.accessToken?.name||"access_token",refresh_token:c?.refreshToken?.name||"refresh_token",session_token:c?.sessionToken?.name||"session_token"},h=s?.schemas?.[0]||"main",_=ME(h);if(b.databaseUrl)await bg(b.databaseUrl,l);let g=b.databaseUrl?SE(b.databaseUrl):null,R={},k={};if(n.schema){let S=Sn("path").resolve(process.cwd(),n.schema),z=Sn(S);R=z.createAllTablesForSchema?z.createAllTablesForSchema(_):{}}if(n.relations){let S=Sn("path").resolve(process.cwd(),n.relations);k=Sn(S)}let M=Sl(n.swagger);if(M)r.use(M);let C=n.systemTables||[];t=Nf(o,C,"",h),l.info(`[AUTH] Built ${t.length} public routes`);let N=null,m=null,A=null,H=null;if(o.email?.gmail?.enabled&&o.email.gmail.json_file_path)l.info("[GmailService] Initializing...",{jsonFilePath:o.email.gmail.json_file_path,fromEmail:o.email.gmail.from_email}),H=new Jf({enabled:!0,jsonFilePath:o.email.gmail.json_file_path,fromEmail:o.email.gmail.from_email||"",fromName:o.email.gmail.from_name},l),l.info("[GmailService] isAvailable:",{available:H.isAvailable()});if(o.liveMonitoring?.enabled){let E=o.liveMonitoring.basePath||"/monitoring",S=o.liveMonitoring.streamInterval||150;r.use(Ag({getService:()=>A,logger:l,basePath:E,streamInterval:S}))}r.onStart(async()=>{tl(o);let E=Te();if(E&&o.rateLimit?.enabled!==!1)N=new Qf({redis:E,logger:l,config:o.rateLimit||{}}),l.info(`[RateLimit] Enabled with strategy: ${o.rateLimit?.strategy||"sliding-window"}`);if(E&&o.monitoring?.enabled){if(m=new Vf({redis:E,logger:l,gmail:H||void 0,config:o.monitoring,appId:o.appId}),m.start(),l.info("[Monitoring] Service started"),o.monitoring.endpoints?.enabled){let z={enabled:!0,basePath:o.monitoring.endpoints.basePath||"/monitoring",stream:{enabled:o.monitoring.endpoints.stream?.enabled!==!1,path:o.monitoring.endpoints.stream?.path||"/stream",interval:o.monitoring.endpoints.stream?.interval||"5s"},snapshot:{enabled:o.monitoring.endpoints.snapshot?.enabled!==!1,path:o.monitoring.endpoints.snapshot?.path||"/snapshot"},history:{enabled:o.monitoring.endpoints.history?.enabled!==!1,path:o.monitoring.endpoints.history?.path||"/history",maxMinutes:o.monitoring.endpoints.history?.maxMinutes||60},alerts:{enabled:o.monitoring.endpoints.alerts?.enabled!==!1,path:o.monitoring.endpoints.alerts?.path||"/alerts"}};r.use(ll({monitoringService:m,logger:l,endpoints:z}))}}if(o.liveMonitoring?.enabled)A=new Ce(o.liveMonitoring),A.start(),l.info("[LiveMonitoring] Service started");let S=c?.mode==="consumer";if(g&&n.schema&&!S){let P=await import(Sn("path").resolve(process.cwd(),n.schema)),p=R.auditLogs||P.auditLogs;if(e?.enabled&&p)l.addAuditTransport(new de({db:g,table:p,enabled:!0}));try{l.info(`Syncing schema to database (target: ${h})...`);let{sql:B}=await import("drizzle-orm");await g.execute(B.raw(`CREATE SCHEMA IF NOT EXISTS "${h}"`));try{let L=Object.fromEntries(Object.entries(R).filter(([q,F])=>{if(F===void 0||F===null)return!1;if(typeof F==="object"&&F!==null)return Object.getOwnPropertySymbols(F).length>0||F._!==void 0;return!1})),Y=Object.keys(L);l.info("[Schema] Tables to sync:",{tables:Y,count:Y.length});let Q=L.users;if(Q){let q=Object.getOwnPropertyNames(Q).filter((F)=>!F.startsWith("_"));l.info("[Schema] Users table columns:",{columns:q})}await(await EE({schema:_,...L},g,[h])).apply(),l.info("[Schema] pushSchema completed successfully")}catch(L){let Y=L instanceof Error?L.message:String(L);l.warn(`[Schema] pushSchema warning: ${Y}`)}console.log("Schema sync completed")}catch(B){let L=B instanceof Error?B.message:String(B);console.error("Schema sync failed:",L)}if(console.log("Database connection established"),o.authorization?.enabled){let B={...ib,...o.authorization};if(B.autoSeedClaims){let L=UE(R),Y=qe.map((q)=>zE(q)),Q=o.entities||[],V=HE([...L,...Q,...Y,...n.systemTables||[]]);l.info("[Authorization] Seeding claims...",{schemaEntities:L.length,systemEntities:Y.length,configEntities:Q.length,totalEntities:V.length}),await yu(g,R,k,V,B,l)}if(B.godminEmail&&B.godminPassword)l.info("[Authorization] Setting up godmin..."),await rb(g,R,B,l);l.info("[Authorization] Enabled")}let K=R.userSessions;if(K&&o.authentication?.sessions?.enabled){let{lt:B}=await import("drizzle-orm"),L=await g.update(K).set({isActive:!1,revokedAt:new Date,revokedReason:"expired"}).where(ie($r(K.isActive,!0),B(K.expiresAt,new Date)));l.info("[AUTH] Expired sessions cleanup completed",{expiredCount:L}),setInterval(async()=>{try{await g.update(K).set({isActive:!1,revokedAt:new Date,revokedReason:"expired"}).where(ie($r(K.isActive,!0),B(K.expiresAt,new Date)))}catch(Y){l.warn("[AUTH] Session cleanup failed",{error:Y})}},3600000)}}}).onRequest(async({request:E,set:S})=>{let z=Date.now();E.headers.set("x-request-start-time",String(z));let U=new URL(E.url),P=U.pathname,p=E.method,K=U.search,B=E.headers.get("x-forwarded-for")?.split(",")[0]?.trim()||E.headers.get("x-real-ip")?.trim()||"unknown",L=E.headers.get("user-agent")||"unknown",Y,Q={};if(E.method!=="GET"&&E.method!=="HEAD")try{let v=await E.clone().text();Q=v?JSON.parse(v):{}}catch{Q={}}let V=e?.enabled?{id:kE(),user_id:"unknown",entity_name:P.split("/").filter(Boolean)[0]||"root",entity_id:null,operation_type:p,summary:"",old_values:{},new_values:Q,ip_address:B,user_agent:L,timestamp:new Date().toISOString(),path:P,query:K}:null,q=xf(t,P,p);if(N){let F=q?"public":"private",v;if(P.includes("/auth/login"))v="login";else if(P.includes("/auth/register"))v="register";else if(P.includes("/auth/password-reset"))v="passwordReset";else if(P.includes("/auth/magic-link"))v="magicLink";let dn=v?"auth":F,on=await N.check({ip:B,endpoint:P,category:dn,authType:v}),un=N.getHeaders(on);for(let[en,Yn]of Object.entries(un))S.headers[en]=Yn;if(!on.allowed){if(S.status=429,on.retryAfter)S.headers["Retry-After"]=String(on.retryAfter);if(l.warn(`[RateLimit] Blocked request from ${B} to ${P}`),m)m.recordRateLimitBlock();return new Response(JSON.stringify({error:"Too Many Requests",retryAfter:on.retryAfter}),{status:429,headers:{"Content-Type":"application/json"}})}}if(P==="/health")return;if(c?.enabled&&!q){if(!c.accessToken?.secret)return S.status=500,l.traceSync({message:"Authentication secrets not defined",level:"error",context:{path:P,method:p},audit:xt(V,"Authentication secrets not defined")}),Error("One or more authentication secrets are not defined");if(c.mode==="consumer"){Y=rl(E.headers,w);let v=so(Y.access_token||"",b.accessTokenSecret||"");if(!v.valid)return S.status=401,l.traceSync({message:"Invalid or missing access token",level:"warn",context:{path:P,method:p},audit:xt(V,"Invalid or missing access token")}),Error("Unauthenticated");let dn=v.payload.sub,on=v.payload.roles,un=v.payload.claims;if(E.headers.set("x-access-token",Y.access_token||""),E.headers.set("x-user-id",dn||""),on&&on.length>0)E.headers.set("x-user-roles",on.join(","));if(un&&un.length>0)E.headers.set("x-user-claims",un.join(","))}else{if(!c.refreshToken?.secret||!c.sessionToken?.secret)return S.status=500,l.traceSync({message:"Authentication secrets not defined",level:"error",context:{path:P,method:p},audit:xt(V,"Authentication secrets not defined")}),Error("One or more authentication secrets are not defined");if(Y=rl(E.headers,w),!Y.session_token)return S.status=401,l.traceSync({message:"No session token",level:"warn",context:{path:P,method:p},audit:xt(V,"No session token")}),Error("Unauthenticated");let v=await Qo({sessionId:Y.session_token});if(!v)return S.status=401,l.traceSync({message:"Invalid session",level:"warn",context:{path:P,method:p,sessionId:Y.session_token},audit:xt(V,"Invalid session")}),Error("Unauthenticated");let dn=R.userSessions;if(dn&&g){let T=(await g.select().from(dn).where($r(dn.id,Y.session_token)).limit(1))[0],Jn=T?.revokedAt!==null&&T?.revokedAt!==void 0&&!(typeof T?.revokedAt==="object"&&Object.keys(T.revokedAt).length===0);if(!T||T.isActive===!1||Jn)return S.status=401,l.traceSync({message:"Session revoked or inactive",level:"warn",context:{path:P,method:p,sessionId:Y.session_token,isActive:T?.isActive,revokedAt:T?.revokedAt},audit:xt(V,"Session revoked")}),Error("Session has been revoked");if(T.expiresAt&&new Date(T.expiresAt)<new Date)return S.status=401,l.traceSync({message:"Session expired",level:"warn",context:{path:P,method:p,sessionId:Y.session_token,expiresAt:T.expiresAt},audit:xt(V,"Session expired")}),Error("Session has expired")}if(v.lastActiveAt&&c.sessions?.inactivityTimeout){let _n=new Date(v.lastActiveAt).getTime(),T=st(c.sessions.inactivityTimeout)*1000;if(Date.now()-_n>T)return S.status=401,l.traceSync({message:"Session inactive timeout",level:"warn",context:{path:P,method:p,sessionId:Y.session_token,lastActiveAt:v.lastActiveAt},audit:xt(V,"Session inactive timeout")}),Error("Session expired due to inactivity")}Af(Y.session_token).catch(()=>{});let on=R.userSessions;if(on&&g)g.update(on).set({lastActivityAt:new Date}).where($r(on.id,Y.session_token)).catch(()=>{});let un=so(Y.access_token||"",b.accessTokenSecret||""),en=Y.access_token?un.valid:!1,Yn=Y.refresh_token?so(Y.refresh_token,b.refreshTokenSecret||"").valid:!1;if(!en&&Yn&&Y.refresh_token&&v.rememberMe===!0){let _n=await dg(v.userId,v.id,()=>fg({refreshTokenId:Y.refresh_token,options:o,sessionData:v}));if(_n.success&&_n.accessToken){Y.access_token=_n.accessToken;let T=`${w.access_token}=${_n.accessToken}; Path=/; HttpOnly; SameSite=Strict;Secure; Max-Age=${st(c.accessToken.expiresIn??"15m")}`;S.headers["Set-Cookie"]=T}}let nr=un.valid?un.payload.sub:v.userId,gn=un.valid?un.payload.roles:void 0,et=un.valid?un.payload.claims:void 0;if(E.headers.set("x-access-token",Y.access_token||""),E.headers.set("x-refresh-token",Y.refresh_token||""),E.headers.set("x-session-id",Y.session_token||""),E.headers.set("x-user-id",nr||""),gn&&gn.length>0)E.headers.set("x-user-roles",gn.join(","));if(et&&et.length>0)E.headers.set("x-user-claims",et.join(","))}}}).onAfterHandle(({request:E,set:S})=>{if(m){let z=E.headers.get("x-request-start-time"),U=z?parseInt(z,10):Date.now(),P=Date.now()-U,p=new URL(E.url),K=typeof S.status==="number"?S.status:200;m.recordRequest({endpoint:p.pathname,method:E.method,status:K,responseTimeMs:P,isError:K>=400,errorType:K>=500?"server_error":K>=400?"client_error":void 0})}if(A){let z=new URL(E.url),U={};E.headers.forEach((P,p)=>{U[p]=P}),A.recordRequest({path:z.pathname,method:E.method,timestamp:Date.now(),headers:U})}}).onError((E)=>{let{set:S,code:z,error:U}=E,P=typeof z==="number"?z:500,p=U instanceof Error?U.message:"Internal Server Error";return S.status=P,Response.json({isSuccess:!1,message:p,status:P,errors:[U],data:null})}),l.info("Creating routes for entities"),fl(r,{db:g,schemaTables:R,schemaRelations:k,entities:i,logger:l,databaseUrl:b.databaseUrl,storage:o.storage,authorization:o.authorization,emailServiceAvailable:!!(o.email?.gmail?.enabled&&o.email.gmail.json_file_path)});let D=c?.mode==="consumer";if(c?.enabled&&!D&&g){let E=R.users,S=R.userSessions||R.user_sessions||R.sessions;if(!S&&c.sessions?.enabled)l.warn("[AUTH] sessions is enabled but user_sessions table not found in schema. Disabling sessions.");if(E){tl(o);let{createAuthRoutes:z}=(Qd(),se(M2)),{signJWT:U,verifyJWT:P}=(Vo(),se(wu)),{generateSession:p,deleteSession:K}=(Rf(),se(Iu));z(r,{authConfig:{db:g,logger:l,usersTable:E,sessionsTable:S,userRolesTable:R.userRoles,rolesTable:R.roles,roleClaimsTable:R.roleClaims,claimsTable:R.claims,authentication:{enabled:c.enabled,accessToken:c.accessToken,refreshToken:c.refreshToken,sessionToken:c.sessionToken}},features:{login:c.login,register:c.register,logout:c.logout,refresh:c.refresh,passwordReset:(()=>{let B=!!(o.email?.gmail?.enabled&&o.email.gmail.json_file_path);if(c.passwordReset?.enabled&&!B)return l.warn("[AUTH] passwordReset is enabled but no email provider is configured. Disabling passwordReset."),{...c.passwordReset,enabled:!1};return c.passwordReset})(),passwordChange:c.passwordChange,passwordSet:c.passwordSet,sessions:c.sessions,magicLink:(()=>{let B=!!(o.email?.gmail?.enabled&&o.email.gmail.json_file_path);if(c.magicLink?.enabled&&!B)return l.warn("[AUTH] magicLink is enabled but no email provider is configured. Disabling magicLink."),{...c.magicLink,enabled:!1};return c.magicLink})(),me:c.me||{enabled:!0,route:"/auth/me"},invite:(()=>{let B=!!(o.email?.gmail?.enabled&&o.email.gmail.json_file_path);if(c.invite?.enabled&&!B)return l.warn("[AUTH] invite is enabled but no email provider is configured. Disabling invite."),{...c.invite,enabled:!1};return c.invite})(),captcha:c.captcha,oauth:c.oauth?.enabled&&b.oauthProviders?{...c.oauth,providers:b.oauthProviders}:void 0},sessionsTable:S,oauthAccountsTable:R.oauthAccounts,schemaTables:R,schemaRelations:k,databaseUrl:b.databaseUrl,admin:{impersonate:{enabled:!0},changeUserId:{enabled:!0}},emailService:H,appName:o.appId,captchaService:(()=>{let B=Te();if(!c.captcha?.enabled||!B)return null;return new Wf({redis:{get:async(Y)=>{let Q=await B.read(Y);return Q.success?Q.data:null},set:async(Y,Q,V)=>{await B.create(Y,Q,V?.ex)},del:async(Y)=>{await B.remove(Y)}},logger:l,config:{enabled:!0,type:c.captcha.type||"math",difficulty:c.captcha.difficulty||"medium",expiresIn:c.captcha.expiresIn||"5m",maxAttempts:c.captcha.maxAttempts||3,caseSensitive:c.captcha.caseSensitive??!1}})})(),tokenResponseConfig:{accessToken:{setHeadersEnabled:c.accessToken?.setHeadersEnabled??!0,returnJson:c.accessToken?.returnJson??!0},refreshToken:{setHeadersEnabled:c.refreshToken?.setHeadersEnabled??!0,returnJson:c.refreshToken?.returnJson??!0},sessionToken:{setHeadersEnabled:c.sessionToken?.setHeadersEnabled??!0,returnJson:c.sessionToken?.returnJson??!0}},helpers:{signAccessToken:(B,L,Y)=>U({subject:B,expiresInSeconds:st(c.accessToken?.expiresIn||"15m"),issuer:c.accessToken?.issuer,audience:c.accessToken?.audience,customClaims:{...L&&L.length>0?{roles:L}:{},...Y&&Y.length>0?{claims:Y}:{}}},b.accessTokenSecret||"",c.accessToken?.algorithm||"HS256"),signRefreshToken:(B)=>U({subject:B,expiresInSeconds:st(c.refreshToken?.expiresIn||"7d"),issuer:c.refreshToken?.issuer,audience:c.refreshToken?.audience},b.refreshTokenSecret||"",c.refreshToken?.algorithm||"HS256"),verifyRefreshToken:(B)=>P(B,b.refreshTokenSecret||""),createSession:async(B)=>{let L=await p({userId:B.userId,deviceInfo:B.deviceInfo});return L.success?L.session.id:""},destroySession:async(B)=>K({sessionId:B}),saveSessionToDb:async(B,L)=>{if(!S||!g)return;let Y=c.sessions,Q=L.deviceInfo||{},V=`${Q.browserName||""}-${Q.osName||""}-${Q.deviceType||""}`,q=await g.select().from(S).where(ie($r(S.userId,L.userId),$r(S.isActive,!0))),F=V&&!V.includes("--unknown")&&!V.includes("Bot/Crawler")&&!V.includes("Headless")&&V!=="--"&&V!=="--unknown",v=F?!q.some((Gn)=>Gn.deviceFingerprint===V):!1,dn=q.some((Gn)=>Gn.approvalStatus==="approved"),on=L.loginMethod==="impersonation"||L.loginMethod==="impersonation_stop",un=!on&&Y?.trustNewDevices===!1&&v&&F&&dn;l.info("[AUTH] Device fingerprint analysis",{userId:L.userId,deviceFingerprint:V,hasValidFingerprint:F,isNewDevice:v,loginMethod:L.loginMethod,isImpersonationLogin:on,existingSessionCount:q.length,hasAnyApprovedSession:dn,requiresApproval:un});let en=null,Yn="approved";if(un){let{randomBytes:Gn}=await import("crypto");en=Gn(32).toString("hex"),Yn="pending",l.info("[AUTH] New device requires approval",{userId:L.userId,deviceFingerprint:V,ipAddress:Q.ipAddress})}let nr=q.filter((Gn)=>{let qn=Gn,gr=qn.deviceFingerprint||"",Ar=qn.ipAddress||"";return(!gr||gr==="--"||gr==="--unknown"||gr.includes("Bot/Crawler")||gr.includes("Headless")||gr.includes("unknown-unknown"))&&(Ar==="127.0.0.1"||Ar==="::1"||Ar==="localhost"||!Ar)});if(nr.length>0){for(let Gn of nr)await g.update(S).set({isActive:!1,revokedAt:new Date,revokedReason:"bot_session_cleanup"}).where($r(S.id,Gn.id));l.info("[AUTH] Cleaned up stale bot/crawler sessions",{userId:L.userId,cleanedCount:nr.length})}if(F&&!v&&!on){let Gn=q.filter((qn)=>qn.deviceFingerprint===V);for(let qn of Gn)await g.update(S).set({isActive:!1,revokedAt:new Date,revokedReason:"relogin_same_device"}).where($r(S.id,qn.id));l.info("[AUTH] Revoked old sessions from same device",{userId:L.userId,deviceFingerprint:V,revokedCount:Gn.length})}if(!Y?.allowMultipleDevices&&q.length>0){if(q.filter((qn)=>qn.deviceFingerprint===V).length===0&&v)for(let qn of q)await g.update(S).set({isActive:!1,revokedAt:new Date,revokedReason:"new_device_login"}).where($r(S.id,qn.id))}if(Y?.maxActiveSessions){let{count:Gn}=await import("drizzle-orm"),gr=(await g.select({count:Gn()}).from(S).where(ie($r(S.userId,L.userId),$r(S.isActive,!0))))[0]?.count||0;if(gr>=Y.maxActiveSessions){let{asc:Ar}=await import("drizzle-orm"),Mt=await g.select().from(S).where(ie($r(S.userId,L.userId),$r(S.isActive,!0))).orderBy(Ar(S.createdAt)).limit(gr-Y.maxActiveSessions+1);for(let ir of Mt)await g.update(S).set({isActive:!1,revokedAt:new Date,revokedReason:"max_sessions_exceeded"}).where($r(S.id,ir.id))}}let gn=100;if(Q.isHeadless)gn-=50;if(Q.isBot)gn-=40;if(Q.isSuspicious)l.warn("[AUTH] Suspicious login detected",{userId:L.userId,suspiciousPatterns:Q.suspiciousPatterns,userAgent:Q.userAgent,ipAddress:Q.ipAddress});if(v)gn-=25;if(!Q.ipAddress||Q.ipAddress==="unknown")gn-=20;if(!Q.browserName)gn-=15;if(!Q.osName)gn-=15;if(!Q.deviceType||Q.deviceType==="unknown")gn-=10;if(!Q.deviceName||Q.deviceName==="Unknown Device")gn-=5;let et=V&&!V.includes("--unknown")&&V!=="--",_n=Q.ipAddress&&Q.ipAddress!=="unknown";if(et){if(q.filter((qn)=>qn.deviceFingerprint===V).length>0)gn+=20}if(_n){if(q.filter((qn)=>qn.ipAddress===Q.ipAddress).length>0)gn+=15}gn=Math.max(0,Math.min(100,gn));let T=50;if(await g.insert(S).values({id:B,userId:L.userId,tokenHash:B,deviceFingerprint:V,deviceName:Q.deviceName,deviceType:Q.deviceType,browserName:Q.browserName,browserVersion:Q.browserVersion,osName:Q.osName,osVersion:Q.osVersion,ipAddress:Q.ipAddress,locationCountry:Q.locationCountry,locationCity:Q.locationCity,loginMethod:L.loginMethod||"password",rememberMe:L.rememberMe??!1,trustScore:gn,lastActivityAt:new Date,createdAt:new Date,expiresAt:new Date(Date.now()+st(c.sessionToken?.expiresIn||"30d")*1000),isActive:Yn==="approved",approvalStatus:Yn,approvalToken:en,approvalRequestedAt:un?new Date:null}),!on&&H&&(Y?.notifyOnNewDevice&&v||gn<T||un)){let Gn=R.users;if(Gn){let gr=(await g.select().from(Gn).where($r(Gn.id,L.userId)).limit(1))[0];if(gr?.email){let Ar=gn<T,Mt=c.sessions?.approvalRedirectUrl||"http://localhost:3000/devices",ir=en?`${Mt}?action=approve&token=${en}`:"",lr=en?`${Mt}?action=reject&token=${en}`:"",Rs,ks;if(un)Rs="\uD83D\uDD10 New Device Login Requires Approval",ks=`
1527
1527
  <h2>\uD83D\uDD10 New Device Login Requires Your Approval</h2>
1528
1528
  <p>Someone is trying to log into your account from a new device:</p>
1529
1529
  <ul>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nucleus-core-ts",
3
- "version": "0.8.89",
3
+ "version": "0.8.92",
4
4
  "description": "Production-ready, enterprise-grade TypeScript framework for building multi-tenant APIs",
5
5
  "author": "Hidayet Can Özcan <hidayetcan@gmail.com>",
6
6
  "license": "SEE LICENSE IN LICENSE",