gemi 0.88.1 → 0.88.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-bhzb8e5r.js → chunk-1jaehgna.js} +2 -2
- package/dist/{chunk-bhzb8e5r.js.map → chunk-1jaehgna.js.map} +1 -1
- package/dist/{chunk-7awbkbbx.js → chunk-7hegzdkc.js} +2 -2
- package/dist/{chunk-7awbkbbx.js.map → chunk-7hegzdkc.js.map} +3 -3
- package/dist/{chunk-q77qf42t.js → chunk-e71e31kj.js} +1 -1
- package/dist/{chunk-d1zt6sfj.js → chunk-k7r6fp2t.js} +1 -1
- package/dist/{chunk-x5ajfnrx.js → chunk-smpmwb7e.js} +2 -2
- package/dist/{chunk-x5ajfnrx.js.map → chunk-smpmwb7e.js.map} +3 -3
- package/dist/client/auth/useEmailCode.d.ts +9 -3
- package/dist/client/auth/useEmailCode.d.ts.map +1 -1
- package/dist/client/index.js +24 -11
- package/dist/client/index.js.map +1 -1
- package/dist/facades/index.js +1 -1
- package/dist/http/index.js +1 -1
- package/dist/i18n/index.js +1 -1
- package/dist/kernel/index.js +1 -1
- package/dist/server/compression.d.ts.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/services/index.js +1 -1
- package/dist/services/router/ApiRouteDispatcher.d.ts +6 -0
- package/dist/services/router/ApiRouteDispatcher.d.ts.map +1 -1
- package/package.json +1 -1
- /package/dist/{chunk-q77qf42t.js.map → chunk-e71e31kj.js.map} +0 -0
- /package/dist/{chunk-d1zt6sfj.js.map → chunk-k7r6fp2t.js.map} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
import{va as j}from"./chunk-8z37k28d.js";import{createElement as x}from"react";function h(i,n){let s=Object.keys(n).sort((u,r)=>r.length-u.length).map((u)=>u.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")),b=new RegExp(s.join("|"),"g");return i.replace(b,(u)=>n[u])}async function J(i,n,s=[]){let b=[...s.map((t)=>`${i}/views/${t}.tsx`),`${i}/views/RootLayout.tsx`],u=new Set;for(let t of b){let e=n.moduleGraph.getModulesByFile(t);if(e)for(let g of e)u.add(g)}let r=[],p=[],l={};for(let t of u)if(t)for(let e of t.importedModules){if(e.file.includes("module.css"))l[e.file]=e.ssrTransformResult.map.sourcesContent.join("");if(e.file.includes(".css"))p.push(e.file)}for(let t of p){let e=await n.transformRequest(t+"?direct"),g=t.includes("module.css"),a="";if(g)a=h(l[t],e.default);r.push({isDev:!0,id:t,content:g?a:e.code})}return r.map((t,e)=>{return x("style",{key:e,type:"text/css","data-vite-dev-id":t.id,dangerouslySetInnerHTML:{__html:t.content}})})}async function L(i=[]){return i.map((n,s)=>{return x("style",{key:s,id:n?.id,type:"text/css",dangerouslySetInnerHTML:{__html:n.content}})})}import{existsSync as v}from"fs";import{basename as f}from"path";import{networkInterfaces as k}from"os";var y={name:"gemi",version:"0.88.
|
|
2
|
+
import{va as j}from"./chunk-8z37k28d.js";import{createElement as x}from"react";function h(i,n){let s=Object.keys(n).sort((u,r)=>r.length-u.length).map((u)=>u.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")),b=new RegExp(s.join("|"),"g");return i.replace(b,(u)=>n[u])}async function J(i,n,s=[]){let b=[...s.map((t)=>`${i}/views/${t}.tsx`),`${i}/views/RootLayout.tsx`],u=new Set;for(let t of b){let e=n.moduleGraph.getModulesByFile(t);if(e)for(let g of e)u.add(g)}let r=[],p=[],l={};for(let t of u)if(t)for(let e of t.importedModules){if(e.file.includes("module.css"))l[e.file]=e.ssrTransformResult.map.sourcesContent.join("");if(e.file.includes(".css"))p.push(e.file)}for(let t of p){let e=await n.transformRequest(t+"?direct"),g=t.includes("module.css"),a="";if(g)a=h(l[t],e.default);r.push({isDev:!0,id:t,content:g?a:e.code})}return r.map((t,e)=>{return x("style",{key:e,type:"text/css","data-vite-dev-id":t.id,dangerouslySetInnerHTML:{__html:t.content}})})}async function L(i=[]){return i.map((n,s)=>{return x("style",{key:s,id:n?.id,type:"text/css",dangerouslySetInnerHTML:{__html:n.content}})})}import{existsSync as v}from"fs";import{basename as f}from"path";import{networkInterfaces as k}from"os";var y={name:"gemi",version:"0.88.2",private:!1,license:"MIT",author:"Enes Tufekci <enes@gemijs.dev>",repository:{type:"git",url:"git+https://github.com/nstfkc/gemi.git",directory:"packages/gemi"},bin:{gemi:"./dist/bin/gemi.js","gemi-orm-generator":"./dist/bin/orm-generator.js"},files:["dist/**/*","ide/typescript-plugin/package.json","skills/**/*"],module:!0,exports:{"./http":"./http/index.ts","./client":"./client/index.ts","./ai":"./ai/index.ts","./ai/client":"./ai/client/index.ts","./testing":"./testing/index.ts","./app":"./app/index.ts","./facades":"./facades/index.ts","./email":"./email/index.ts","./vite":"./dist/vite/index.mjs","./kernel":"./kernel/index.ts","./services":"./services/index.ts","./i18n":"./i18n/index.ts","./dictionary":"./i18n/dictionaryRuntime.ts","./server":"./server/index.ts","./config":"./config/index.ts","./container":"./container/index.ts","./foundation":"./foundation/index.ts","./database":"./database/index.ts","./orm":"./orm/index.ts","./support":"./support/index.ts","./console/run":"./console/run.ts","./queue/work":"./services/queue/work.ts","./ide/typescript-plugin":"./ide/typescript-plugin/index.ts","./bun/preload":"./bun/preload.ts","./bun/plugin":"./bun/plugin.ts"},scripts:{lint:"oxlint",typecheck:"tsc --noEmit -p tsconfig.json && tsc --noEmit -p tsconfig.browser.json && tsc --noEmit -p ide/typescript-plugin/tsconfig.json",build:"NODE_ENV=production bun run build:core && bun run build:bin && bun run build:types && bun run build:client && bun run build:plugin && bun run build:ts-plugin && bun run build:client-types && bun run build:augmentation","build:core":"bun ./scripts/build.ts","build:bin":"bun build --outdir=./dist/bin --target=bun --external=vite --external=react-dom --external=react/jsx-runtime --external=bun --external=sharp --external=@azure/storage-blob --external=typescript --sourcemap ./bin/gemi.ts ./bin/orm-generator.ts && bun ./scripts/prepare-bin.ts","build:client":"rm -rf dist/client dist/testing dist/ai/client dist/chunks && vite build -c vite.client.config.mts","build:plugin":"vite build -c vite.plugin.config.mts","build:ts-plugin":"bun ./scripts/build-ts-plugin.ts","build:types":"tsc -p tsconfig.build.json","build:client-types":"tsc -p tsconfig.browser.json",test:"bun --bun vitest","test:types":"vitest run --typecheck.only","test:live":"bun --bun vitest run ai/live","test:packaging":"bun --bun vitest run --config vitest.packaging.config.ts","build:publish":"bun scripts/build-publish.ts",prepublishOnly:"echo 'Do not publish from this directory \u2014 its exports point at TS source. Run: bun run build:publish, then publish from .publish/' && exit 1","build:augmentation":"bun ./scripts/wire-augmentation.ts"},dependencies:{"@aws-sdk/client-s3":"^3.629.0","@aws-sdk/s3-request-presigner":"^3.629.0","ast-types":"^0.14.2",commander:"^12.1.0",history:"^5.3.0","jsx-email":"2.0.0-rc2.1","magic-string":"^0.30.17",open:"^10.1.0","react-error-boundary":"^6.0.0",recast:"^0.23.9",resend:"^6.12.3",satori:"^0.12.2","temporal-polyfill":"^0.2.5","twitter-api-v2":"^1.20.2","urlpattern-polyfill":"^10.0.0",uuid:"^9.0.1"},devDependencies:{"@babel/parser":"^7.25.4","@prisma/generator-helper":"^6.5.0","@repo/typescript-config":"*","@testing-library/react":"^16.3.2","@types/bun":"^1.3.14","@types/eslint":"^8.56.5","@types/node":"^20.11.24","@types/react":"^19.0.2","@types/react-dom":"^19.0.2",eslint:"^8.57.0",jsdom:"^30.0.1",oxlint:"^1.39.0",react:"19.2.3","react-dom":"19.2.3",typescript:"^5.7.3",vitest:"^4.0.0"},peerDependencies:{"@azure/storage-blob":"^12.28.0",react:">=19","react-dom":">=19",sharp:"^0.34.2",typescript:">=5",vite:"^8.0.0"},peerDependenciesMeta:{"@azure/storage-blob":{optional:!0},typescript:{optional:!0}}};var q=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2557\u2588\u2588\u2557","\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2551","\u2588\u2588\u2551 \u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2554\u2588\u2588\u2588\u2588\u2554\u2588\u2588\u2551\u2588\u2588\u2551","\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2551\u255A\u2588\u2588\u2554\u255D\u2588\u2588\u2551\u2588\u2588\u2551","\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u255A\u2550\u255D \u2588\u2588\u2551\u2588\u2588\u2551"," \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u255D"],z=Boolean(process.stdout.isTTY)&&!process.env.NO_COLOR,c=(i,n)=>z?`\x1B[${i}m${n}\x1B[0m`:n,E=(i)=>c("1",i),d=(i)=>c("2",i),o=(i)=>c("36",i),O=(i)=>c("32",i),T=(i)=>c("35",i);function R(){return y.version??"?"}function _(i){for(let n of Object.values(k()))for(let s of n??[])if((s.family==="IPv4"||s.family===4)&&!s.internal)return`http://${s.address}:${i}`;return null}function G(i){return j(i).filter((n)=>v(n)).map((n)=>f(n))}function A(i){let{port:n,rootDir:s}=i,b=`http://localhost:${n}`,u=_(n),r=G(s),p=(t,e)=>` ${O("\u279C")} ${E(t.padEnd(9))}${e}`,l=["",...q.map((t)=>T(t)),"",` ${d("gemi")} ${o(`v${R()}`)}`,"",p("Local:",o(b)),p("Network:",u?o(u):d("unavailable")),p("Env:",r.length?r.join(", "):d("none")),""];console.log(l.join(`
|
|
3
3
|
`))}
|
|
4
4
|
export{J as h,L as i,A as j};
|
|
5
5
|
|
|
6
|
-
//# debugId=
|
|
6
|
+
//# debugId=4242126AB63029ED64756E2164756E21
|
|
@@ -6,6 +6,6 @@
|
|
|
6
6
|
"import { existsSync } from \"node:fs\";\nimport { basename } from \"node:path\";\nimport { networkInterfaces } from \"node:os\";\nimport { envFiles } from \"./watchEnv\";\nimport pkg from \"../package.json\";\n\n// \"GEMI\" — ANSI Shadow figlet font.\nconst ART = [\n \" ██████╗ ███████╗███╗ ███╗██╗\",\n \"██╔════╝ ██╔════╝████╗ ████║██║\",\n \"██║ ███╗█████╗ ██╔████╔██║██║\",\n \"██║ ██║██╔══╝ ██║╚██╔╝██║██║\",\n \"╚██████╔╝███████╗██║ ╚═╝ ██║██║\",\n \" ╚═════╝ ╚══════╝╚═╝ ╚═╝╚═╝\",\n];\n\nconst useColor = Boolean(process.stdout.isTTY) && !process.env.NO_COLOR;\nconst paint = (code: string, text: string) =>\n useColor ? `\\x1b[${code}m${text}\\x1b[0m` : text;\nconst bold = (t: string) => paint(\"1\", t);\nconst dim = (t: string) => paint(\"2\", t);\nconst cyan = (t: string) => paint(\"36\", t);\nconst green = (t: string) => paint(\"32\", t);\nconst magenta = (t: string) => paint(\"35\", t);\n\nfunction gemiVersion(): string {\n return (pkg as { version?: string }).version ?? \"?\";\n}\n\nfunction networkUrl(port: number | string): string | null {\n for (const ifaces of Object.values(networkInterfaces())) {\n for (const iface of ifaces ?? []) {\n // Node <18 reported `family` as the number 4; newer Bun/Node use \"IPv4\".\n const isV4 = iface.family === \"IPv4\" || (iface.family as unknown) === 4;\n if (isV4 && !iface.internal) return `http://${iface.address}:${port}`;\n }\n }\n return null;\n}\n\nfunction loadedEnvFiles(rootDir: string): string[] {\n return envFiles(rootDir)\n .filter((file) => existsSync(file))\n .map((file) => basename(file));\n}\n\nexport function printStartupBanner(params: {\n port: number | string;\n rootDir: string;\n}) {\n const { port, rootDir } = params;\n const local = `http://localhost:${port}`;\n const network = networkUrl(port);\n const env = loadedEnvFiles(rootDir);\n\n const row = (label: string, value: string) =>\n ` ${green(\"➜\")} ${bold(label.padEnd(9))}${value}`;\n\n const out = [\n \"\",\n ...ART.map((line) => magenta(line)),\n \"\",\n ` ${dim(\"gemi\")} ${cyan(`v${gemiVersion()}`)}`,\n \"\",\n row(\"Local:\", cyan(local)),\n row(\"Network:\", network ? cyan(network) : dim(\"unavailable\")),\n row(\"Env:\", env.length ? env.join(\", \") : dim(\"none\")),\n \"\",\n ];\n\n console.log(out.join(\"\\n\"));\n}\n"
|
|
7
7
|
],
|
|
8
8
|
"mappings": ";yCAAA,wBAAS,cAGT,SAAS,CAAc,CAAC,EAAc,EAAwC,CAC5E,IAAM,EAAc,OAAO,KAAK,CAAM,EACnC,KAAK,CAAC,EAAG,IAAM,EAAE,OAAS,EAAE,MAAM,EAClC,IAAI,CAAC,IAAQ,EAAI,QAAQ,sBAAuB,MAAM,CAAC,EAGpD,EAAQ,IAAI,OAAO,EAAY,KAAK,GAAG,EAAG,GAAG,EAEnD,OAAO,EAAK,QAAQ,EAAO,CAAC,IAAU,EAAO,EAAM,EAGrD,eAAsB,CAAe,CACnC,EACA,EACA,EAAyB,CAAC,EAC1B,CACA,IAAM,EAAQ,CACZ,GAAG,EAAa,IAAI,CAAC,IAAS,GAAG,WAAgB,OAAU,EAC3D,GAAG,wBACL,EAEM,EAAU,IAAI,IACpB,QAAW,KAAQ,EAAO,CACxB,IAAM,EAAM,EAAK,YAAY,iBAAiB,CAAI,EAClD,GAAI,EACF,QAAW,KAAK,EAAK,EAAQ,IAAI,CAAC,EAItC,IAAM,EAAS,CAAC,EACV,EAAa,CAAC,EACd,EAA2C,CAAC,EAClD,QAAW,KAAO,EAChB,GAAI,EACF,QAAW,KAAY,EAAI,gBAAiB,CAC1C,GAAI,EAAS,KAAK,SAAS,YAAY,EACrC,EAAiB,EAAS,MAAQ,EAAS,mBAAmB,IAAI,eAAe,KAAK,EAAE,EAE1F,GAAI,EAAS,KAAK,SAAS,MAAM,EAC/B,EAAW,KAAK,EAAS,IAAI,EAMrC,QAAW,KAAiB,EAAY,CACtC,IAAM,EAAY,MAAM,EAAK,iBAAiB,EAAgB,SAAS,EAEjE,EAAc,EAAc,SAAS,YAAY,EAEnD,EAAuB,GAE3B,GAAI,EACF,EAAuB,EACrB,EAAiB,GAGhB,EAA6D,OAChE,EAGF,EAAO,KAAK,CACV,MAAO,GACP,GAAI,EACJ,QAAS,EAAc,EAAuB,EAAU,IAC1D,CAAC,EAGH,OAAO,EAAO,IAAI,CAAC,EAAO,IAAM,CAC9B,OAAO,EAAc,QAAS,CAC5B,IAAK,EACL,KAAM,WACN,mBAAoB,EAAM,GAC1B,wBAAyB,CAAE,OAAQ,EAAM,OAAQ,CACnD,CAAC,EACF,EAGH,eAAsB,CAAY,CAAC,EAAS,CAAC,EAAG,CAC9C,OAAO,EAAO,IAAI,CAAC,EAAO,IAAM,CAC9B,OAAO,EAAc,QAAS,CAC5B,IAAK,EACL,GAAI,GAAO,GACX,KAAM,WACN,wBAAyB,CAAE,OAAQ,EAAM,OAAQ,CACnD,CAAC,EACF,ECzFH,qBAAS,WACT,mBAAS,aACT,4BAAS,gpHAKT,IAAM,EAAM,CACV,oKACA,mLACA,yKACA,oKACA,mLACA,yJACF,EAEM,EAAW,QAAQ,QAAQ,OAAO,KAAK,GAAK,CAAC,QAAQ,IAAI,SACzD,EAAQ,CAAC,EAAc,IAC3B,EAAW,QAAQ,KAAQ,WAAgB,EACvC,EAAO,CAAC,IAAc,EAAM,IAAK,CAAC,EAClC,EAAM,CAAC,IAAc,EAAM,IAAK,CAAC,EACjC,EAAO,CAAC,IAAc,EAAM,KAAM,CAAC,EACnC,EAAQ,CAAC,IAAc,EAAM,KAAM,CAAC,EACpC,EAAU,CAAC,IAAc,EAAM,KAAM,CAAC,EAE5C,SAAS,CAAW,EAAW,CAC7B,OAAQ,EAA6B,SAAW,IAGlD,SAAS,CAAU,CAAC,EAAsC,CACxD,QAAW,KAAU,OAAO,OAAO,EAAkB,CAAC,EACpD,QAAW,KAAS,GAAU,CAAC,EAG7B,IADa,EAAM,SAAW,QAAW,EAAM,SAAuB,IAC1D,CAAC,EAAM,SAAU,MAAO,UAAU,EAAM,WAAW,IAGnE,OAAO,KAGT,SAAS,CAAc,CAAC,EAA2B,CACjD,OAAO,EAAS,CAAO,EACpB,OAAO,CAAC,IAAS,EAAW,CAAI,CAAC,EACjC,IAAI,CAAC,IAAS,EAAS,CAAI,CAAC,EAG1B,SAAS,CAAkB,CAAC,EAGhC,CACD,IAAQ,OAAM,WAAY,EACpB,EAAQ,oBAAoB,IAC5B,EAAU,EAAW,CAAI,EACzB,EAAM,EAAe,CAAO,EAE5B,EAAM,CAAC,EAAe,IAC1B,KAAK,EAAM,QAAE,MAAM,EAAK,EAAM,OAAO,CAAC,CAAC,IAAI,IAEvC,EAAM,CACV,GACA,GAAG,EAAI,IAAI,CAAC,IAAS,EAAQ,CAAI,CAAC,EAClC,GACA,KAAK,EAAI,MAAM,KAAK,EAAK,IAAI,EAAY,GAAG,IAC5C,GACA,EAAI,SAAU,EAAK,CAAK,CAAC,EACzB,EAAI,WAAY,EAAU,EAAK,CAAO,EAAI,EAAI,aAAa,CAAC,EAC5D,EAAI,OAAQ,EAAI,OAAS,EAAI,KAAK,IAAI,EAAI,EAAI,MAAM,CAAC,EACrD,EACF,EAEA,QAAQ,IAAI,EAAI,KAAK;AAAA,CAAI,CAAC",
|
|
9
|
-
"debugId": "
|
|
9
|
+
"debugId": "4242126AB63029ED64756E2164756E21",
|
|
10
10
|
"names": []
|
|
11
11
|
}
|
|
@@ -12,6 +12,6 @@ if('system'===e||(!e&&'system'===defaultTheme)){
|
|
|
12
12
|
}else if(e){
|
|
13
13
|
c.add(e||'')
|
|
14
14
|
}}catch(e){}}()
|
|
15
|
-
`;async function lX($,Z,O){let j=`${O==="italic"?"italic,":""}wght@${O==="italic"?"1,":""}${Z}`,J=(await(await fetch(`https://fonts.googleapis.com/css2?family=${$}:${j}&display=swap`,{headers:{"User-Agent":"Mozilla/5.0 Firefox/1.0"}})).text()).match(/url\(([^)]+)\)/)?.[1];return await fetch(J).then((W)=>W.arrayBuffer())}var L4="/assets";function dX($){return $===L4||$.startsWith(`${L4}/`)}function iX($){let Z=$.filter(dX);if(Z.length>0){let O=Z.length>1;throw Error(`View route path${O?"s":""} ${Z.map((j)=>`"${j}"`).join(", ")} use${O?"":"s"} the reserved "${L4}" prefix. The client build output is served from there before the router runs, so the route would never match. Mount it somewhere else.`)}}function uX($){let Z=C(s0).resolver;return{...$.domain,root:Z.root,origin:Z.publicOrigin($.rawRequest)}}function f4($){let{status:Z=400,error:O}=$;return new Response(O?.message,{...$,status:Z})}function sX($){let{status:Z=400,data:O,directive:j,headers:T}=$;return new Response(JSON.stringify({data:O,directive:j}),{headers:T,status:Z})}class nZ{static token="router.view";flatViewRoutes={};routeManifest={};clientRouteManifest={};componentTree=[];flatComponentTree=[];root=null;shellReporter=BJ();preloadCache=new WeakMap;hooks;partialRendering;constructor($){let Z=P7();this.partialRendering=$.partialRendering??Z.partialRendering,this.hooks={onRequestStart:$.onRequestStart??Z.onRequestStart,onRequestEnd:$.onRequestEnd??Z.onRequestEnd,onRequestFail:$.onRequestFail??Z.onRequestFail,onStreamComplete:$.onStreamComplete??Z.onStreamComplete};let O={"/":$.rootRouter,"/auth":g6};this.flatViewRoutes=S3(O),iX(Object.keys(this.flatViewRoutes)),this.routeManifest=_3(O),this.clientRouteManifest=Object.fromEntries(Object.entries(this.routeManifest).filter(([,j])=>j.at(-1)!=="FILE")),this.componentTree=x3(O),this.flatComponentTree=X4(this.componentTree),this.root=$.root}async passesFeatureGates($){let Z=C(n$);for(let O of $)if(!await Z.enabled(O))return!1;return!0}async onRequestEnd($){return V4(),await this.hooks.onRequestEnd($)}completeStream($,Z){let O=(j)=>{X$.error(j?.message??'Error in "onStreamComplete" event handler',{err:JSON.stringify(j)})};try{Promise.resolve(this.hooks.onStreamComplete($,Z)).catch(O)}catch(j){O(j)}}modulePreloadLinks($){let{clientEntry:Z,modulePreloadManifest:O,views:j,routeKey:T}=$,z=()=>{let Y=new Set(Z?.preload??[]);for(let X of j)for(let F of O?.[X]??[])Y.add(F);return[...Y].map((X)=>e$("link",{key:`modulepreload:${X}`,rel:"modulepreload",href:X}))};if(!O)return z();let J=this.preloadCache.get(O);if(!J||J.clientEntry!==Z)J={clientEntry:Z,byRoute:new Map},this.preloadCache.set(O,J);let W=J.byRoute.get(T);if(!W)W=z(),J.byRoute.set(T,W);return W}async render($){let{req:Z,runInRequestScope:O,csrfTokenHMAC:j,currentPathName:T,headers:z,i18n:J,params:W,pathname:Y,serverQueries:X,userAgent:F,noStream:U,url:D,user:B,viewData:G,breadcrumbs:K,urlLocaleSegment:Q,meta:f,isOgRequest:I,appId:V,features:x}=$,P=Y.replace(`/${Q}`,""),L={kind:"view",data:{meta:f,pageData:{[P]:G},__csrf:j.toString("base64"),prefetchedData:{},i18n:J,auth:{user:B},routeManifest:this.clientRouteManifest,breadcrumbs:K,router:{urlLocaleSegment:Q,pathname:T,params:W,currentPath:Y,searchParams:D.search,is404:!T?!0:!1,domain:Z.domain?uX(Z):null},appId:V,features:x,componentTree:[["404",[]],...this.componentTree]},head:{}},M=this.root,E=this.routeManifest[T];return async(A)=>{let{bootstrapModules:Z0=[],loaders:w,getStyles:g,viewImportMap:O0,cssManifest:q3,ogMap:aZ,viewModules:F$,clientEntry:z1,modulePreloadManifest:m1,assetBase:j0}=A,OZ=z1?[]:Z0,oZ=(S0)=>[S0,`window.loaders=${w}`,...z1?[`import(${JSON.stringify(z1.module)}).catch(function(e){setTimeout(function(){throw e})})`]:[]].join(";");if(I){let S0=null,G$=null;for(let B$ of E??[])if(typeof aZ[B$]==="function")G$=B$,S0=aZ[B$];if(!S0)return new Response("Not found",{status:404});let dJ=Object.values(L.data.pageData)[0];try{await C4(e$(S0,dJ[G$]),{onError:()=>{}})}catch(B$){let{fonts:iJ,...uJ}=B$.satoriOptions,sJ=await Promise.all(iJ.map((tZ)=>{return lX(tZ.name,tZ.weight,tZ.style).then((tJ)=>({...tZ,data:tJ}))})),E4=new Headers(z);E4.set("Content-Type","image/png");let[nJ,aJ]=await Promise.all([pX(),I3("Rendering an OG image")]),oJ=await nJ(B$.jsx,{...uJ,fonts:sJ}),rJ=await aJ(Buffer.from(oJ)).png({compressionLevel:0,effort:10}).toBuffer();return new Response(new Uint8Array(rJ),{headers:E4})}return new Response("data")}if(L.data.cssManifest=q3,L.data.modulePreloadManifest=m1??{},j0&&j0!=="/")L.data.assetBase=j0;let D$=this.modulePreloadLinks({clientEntry:z1,modulePreloadManifest:m1,views:E??["404"],routeKey:T??"404"}),jZ=await g(E);L.data.prefetchedData=X.snapshotResolved(),X.markRenderStart();let C1=new AbortController,rZ=setTimeout(()=>C1.abort(),hX),b=E3(F)||U,M0=Bun.env.NODE_ENV!=="production"&&!b&&T&&this.shellReporter.shouldObserve(T)?KJ():null,U$=VJ();try{let S0=await C4(e$(mX,{children:[...D$,...jZ,e$("script",{key:"theme-script",dangerouslySetInnerHTML:{__html:cX}}),e$(M,{data:L.data,viewImportMap:O0,viewModules:F$,serverQueries:X,dictionarySink:U$,key:"root"})]}),{bootstrapScriptContent:oZ(`window.__GEMI_DATA__ = ${Y$(L.data)}`),bootstrapModules:OZ,signal:C1.signal,...b?{progressiveChunkSize:Number.MAX_SAFE_INTEGER}:{},onError(G$){if(Bun.env.NODE_ENV!=="production")console.error(G$)}});if(S0.allReady.catch(()=>{}).finally(()=>clearTimeout(rZ)),b)await S0.allReady.catch(()=>{});return new Response(D4(S0,X,{onShell:b?void 0:()=>X.markShell(),onChunk:M0?.onChunk,onClose:()=>O(()=>{if(this.completeStream(Z,X.summarize(C1.signal.aborted)),M0)this.shellReporter.report(T,M0.measure())})},U$),{status:!T?404:200,headers:z})}catch(S0){if(clearTimeout(rZ),Bun.env.NODE_ENV==="production")throw O(()=>this.completeStream(Z,X.summarize(C1.signal.aborted))),S0;let G$=await C4(e$("div"),{bootstrapScriptContent:oZ(`window.error= ${Y$(S0.message)}; window.stack_trace=${Y$(S0.stack)};window.__GEMI_DATA__ = ${Y$(L.data)}`),bootstrapModules:Bun.env.NODE_ENV==="development"?["/render-error.js",...OZ]:OZ});return new Response(D4(G$,X,{onClose:()=>O(()=>this.completeStream(Z,X.summarize(C1.signal.aborted)))}),{status:!T?404:200,headers:z})}}}async handleViewRequest($,Z){let O=new URL($.url),j=O.pathname.endsWith(".json"),T=O.pathname.endsWith(".og"),z=O.pathname.replace(".json","").replace(".og",""),[,J,...W]=z.split("/"),Y=`/${W.join("/")}`,X=null,F=null,U=C(i);if(!U.supportedLocales.includes(J))Y=z;else X=J,F=J;let B=F===null&&dZ(this.flatViewRoutes,Y)!==null;if(U.isLocaleAware&&!T&&F===null&&!B){let L=CJ(J,U.supportedLocales,U.defaultLocale);if(L){let M=W.length?`/${W.join("/")}`:"";return new Response("",{status:302,headers:{"Cache-Control":"private, no-cache, no-store, max-age=0, must-revalidate",Location:`/${L}${M}${j?".json":""}${O.search}`}})}}if(U.isLocaleAware&&!T){let L=C(i).detectLocale(new _($,{},"view",Y));if(F===null&&L!==U.defaultLocale){let M=O.pathname==="/"?"":O.pathname;return new Response("",{status:302,headers:{"Cache-Control":"private, no-cache, no-store, max-age=0, must-revalidate",Location:`/${L}${M}${O.search}`}})}}Y=Y.replace("//","/");let G=[],K=[],Q=null,f={},I=null,V=!1,x=[];try{let L=dZ(this.flatViewRoutes,Y);if(L){if(Q=L.routePath,f=L.params,G=L.route.exec,K=L.route.middleware,x=L.route.features,V=K.includes("no-stream"),j&&this.partialRendering){let M=$.headers.get(Y4),E=e7({flatViewRoutes:this.flatViewRoutes,supportedLocales:C(i).supportedLocales,from:M,origin:O.origin,to:{segments:L.route.segments,params:f,search:O.search}});if(E.startIndex>0)G=G.slice(E.startIndex),I={from:M,carriedViews:E.carriedViews}}}}catch(L){throw L}let P=new _($,f,"view",Q);return this.hooks.onRequestStart(P),await N.run(P,async()=>{let L=null,M=N.getStore(),E=r$.getStore(),A=(g)=>r$.run(E,()=>N.runWith(M,g));M.serverQueries=new a$(iZ($));let Z0=new Set;if(M.serverQueries.onQueryFail((g)=>{Z0.add(g.error);try{A(()=>Promise.resolve(this.hooks.onRequestFail(w,g.error)).catch(()=>{}))}catch{}}),F){let g=F.replaceAll("/","");s$.setLocale(g)}else s$.setLocale();let w=M.req;V4();try{let g=!1;try{await C(lZ).runMiddleware(K)}catch(b){if(!$Z(b))throw b;g=!0}if(g||x.length>0&&!await this.passesFeatureGates(x))Q=null,G=[],w.routePath="";let O0=C(i),q3=O0.isEnabled,aZ=O0.isLocaleAware,F$={};if(aZ){let b=null;if(F)b=F.replaceAll("/",""),M.setLocale(b);else b=O0.detectLocale(new _($,w.params)),M.setLocale(b);let M0=q3?O0.getPageTranslations(b,w.routePath):{};F$={supportedLocales:O0.supportedLocales,currentLocale:b,dictionary:{[b]:M0},defaultLocale:O0.defaultLocale}}await fJ(F$.currentLocale??"");let z1;try{z1=await Promise.all(G.map((b)=>b(w)))}catch(b){if(!$Z(b))throw b;Q=null,G=[],w.routePath="",z1=[]}let{cookies:m1,headers:j0}=M;L={data:z1,cookies:m1,headers:j0,user:M.user,prefetchedData:M.serverQueries.snapshotResolved(),currentPathName:Q,params:w.params,urlLocaleSegment:X,meta:M.renderMeta(),appId:C(F4).id,features:await C(n$).forClient()};let{params:OZ,user:oZ}=L,D$={},jZ={};for(let b of z1??[]){let[M0,U$]=Object.entries(b)?.[0]??[];if(!M0||!U$)continue;jZ[`${M0}:${Q}`]=U$.breadcrumb,D$[M0]=U$}let C1=D$.FILE;if(C1){for(let b of m1)j0.append("Set-Cookie",b.toString());try{await this.onRequestEnd(w)}catch(b){X$.error(b?.message??'Error in "onRequestEnd" event handler',{err:JSON.stringify(b)})}return await d3(C1,j0)}if(j){j0.set("Content-Type","application/x-ndjson; charset=utf-8"),j0.append("Vary",Y4),m1.forEach((M0)=>j0.append("Set-Cookie",M0.toString())),await this.hooks.onRequestEnd(w);let b={meta:I&&!M.metadata.touched?null:L.meta,data:{[Y]:D$},breadcrumbs:jZ,prefetchedData:M.serverQueries.snapshotResolved(),i18n:F$,features:L.features,is404:!Q,appId:L.appId,partial:I};return new Response(QJ(b,M.serverQueries,void 0,({aborted:M0})=>A(()=>this.completeStream(w,M.serverQueries.summarize(M0)))),{headers:j0})}if(j0.set("Content-Type","text/html; charset=utf-8"),!V)j0.append("Vary","User-Agent");for(let b of m1)j0.append("Set-Cookie",b.toString());let rZ=Bun.CSRF.generate(process.env.SECRET);j0.append("Set-Cookie",`csrf_token=${rZ}; HttpOnly; Secure; SameSite=Strict; Expires=${new Date(Date.now()+86400000).toUTCString()}`);try{await this.onRequestEnd(w)}catch(b){X$.error(b?.message??'Error in "onRequestEnd" event handler',{err:JSON.stringify(b)})}return await this.render({req:w,runInRequestScope:A,csrfTokenHMAC:Buffer.from(""),currentPathName:Q,headers:j0,i18n:F$,params:OZ,pathname:O.pathname,serverQueries:M.serverQueries,userAgent:$.headers.get("user-agent"),noStream:V,url:O,user:oZ,viewData:D$,breadcrumbs:jZ,urlLocaleSegment:X,meta:L.meta,appId:L.appId,features:L.features,isOgRequest:T})}catch(g){if(g.kind===uZ)if(j)return sX(g.payload.viewData??g.payload.api);else return f4(g.payload.view);if(!Z0.has(g))this.hooks.onRequestFail(w,g);if(sZ(g))return console.error(g),j?o$():f4(K4());if(g instanceof y1&&g.status===403)return j?o$():f4(K4());throw g}},Z)}}function M4(){let $=JSON.stringify({error:V1("not_found","Not found",404)});return new Response($,{status:404,headers:{"Content-Type":"application/json","Content-Length":String(Buffer.byteLength($)),"Cache-Control":"no-store"}})}class _J extends N0{routes={"/api-routes":this.get(()=>{let $=C(H3).flatRoutes,Z=[];for(let[O,j]of Object.entries($))for(let[T,z]of Object.entries(j)){let{exec:J,middleware:W}=z;Z.push({path:O,method:T,middleware:W})}return Z}),"/view-routes":this.get(()=>{let $=C(nZ).flatViewRoutes,Z=[];for(let[O,{middleware:j,viewPath:T}]of Object.entries($))Z.push({path:O,method:"GET",viewPath:T,middleware:j});return Z})}}function nX($,Z){let O=$.body.getReader(),j=!1,T=()=>{if(j)return;j=!0;try{Z()}catch(J){console.error(J)}},z=new ReadableStream({async pull(J){let W;try{W=await O.read()}catch(Y){T(),J.error(Y);return}if(W.done){T();try{J.close()}catch{}return}try{J.enqueue(W.value)}catch{}},async cancel(J){try{await O.cancel(J)}finally{T()}}},{highWaterMark:0});return new Response(z,{status:$.status,statusText:$.statusText,headers:$.headers})}function LJ($){let{status:Z=400,data:O,headers:j}=$,T=new Headers({"Content-Type":"application/json",...j});if(!T.has("Cache-Control"))T.set("Cache-Control","no-store");return new Response(JSON.stringify(O),{status:Z,headers:T})}function IJ($,Z,O){let j=[];Z?.forEach((J,W)=>j.push([W,J]));let T=[...typeof Z?.getSetCookie==="function"?Z.getSetCookie():[],...Array.from(O??[])];if(j.length===0&&T.length===0)return $;let z=(J)=>{for(let[W,Y]of j){if(W.toLowerCase()==="set-cookie")continue;if(!J.has(W))J.set(W,Y)}for(let W of T)J.append("Set-Cookie",W)};try{return z($.headers),$}catch{let J=new Headers($.headers);return z(J),new Response($.body,{status:$.status,statusText:$.statusText,headers:J})}}class H3{static token="router.api";flatRoutes={};onRequestStart;onRequestEnd;onRequestFail;constructor($){let Z=x7();this.onRequestStart=$.onRequestStart??Z.onRequestStart,this.onRequestEnd=$.onRequestEnd??Z.onRequestEnd,this.onRequestFail=$.onRequestFail??Z.onRequestFail,this.flatRoutes=d6({"/":$.rootRouter,"/auth":y6,"/__gemi__/services/i18n":m6,"/__gemi__/services/logs":l6,"/__gemi__/services/image":c6,"/__gemi__/debug":_J})}getRouteHandlerAndParams($){let Z=new URL($.url),O=NJ(Z.pathname),j={},T;for(let[z]of Object.entries(this.flatRoutes))try{let J=new URLPattern({pathname:z});if(J.test({pathname:O})){T=z,j=J.exec({pathname:O})?.pathname.groups;break}}catch(J){console.error(J)}return{params:j,path:T}}async runRouteMiddleware($,Z){let j=this.flatRoutes[$][Z.rawRequest.method].middleware;try{await C(lZ).runMiddleware(j)}catch(T){if(T.kind===uZ)return LJ(T.payload.api);else{if($Z(T))return M4();if(this.onRequestFail(Z,T),console.error(T),sZ(T))return o$();throw T}}}async getRouteData($){let Z=this.flatRoutes[$],O=N.getStore(),j=Z[O.req.rawRequest.method].exec??(()=>Promise.resolve({})),T={};try{T=await j()}catch(z){if(z.kind===uZ)return LJ(z.payload.api);if($Z(z))return M4();if(this.onRequestFail(O.req,z),console.error(z),sZ(z))return o$();throw z}return T}isFrameworkRoute($){return $.startsWith("/__gemi__")}async endRequest($,Z,O){let j=async()=>{try{if(!this.isFrameworkRoute(O))await this.onRequestEnd(Z)}catch(T){X$.error(T?.message??'Error in "onRequestEnd" event handler',{err:JSON.stringify(T)})}finally{$.destroy()}};if(!$.hasPendingWork()){await j();return}$.whenIdle().then(j).catch((T)=>{console.error(T)})}isOpenEndedBody($,Z){return $.method!=="HEAD"&&Z.body!==null&&!Z.headers.has("Content-Length")}async handleApiRequest($,Z){let{params:O,path:j}=this.getRouteHandlerAndParams($),T=this.flatRoutes[j];if(!T||!T[$.method])return new Response(JSON.stringify({error:V1("not_found","Not found",404)}),{status:404});let z=new _($,O,"api",j);if(!this.isFrameworkRoute(j))this.onRequestStart(z);return await N.run(z,async()=>{let J=N.getStore(),W=!1,Y=async()=>{W=!0,await this.endRequest(J,z,j)};try{let X=C(i);if(X.isEnabled){let K=X.detectLocale(z);J.setLocale(K)}J.setRequest(z);let F=await this.runRouteMiddleware(j,z);if(F instanceof Response){let K=IJ(F,J.headers,J.cookies);return await Y(),K}let U=await this.getRouteData(j),D=J.headers,B=J.cookies;if(U instanceof Response){let K=IJ(U,D,B);if(this.isOpenEndedBody($,K)){let Q=nX(K,()=>this.endRequest(J,z,j));return W=!0,Q}return await Y(),K}let G=(K$(U)?U:zZ.json(U)).toResponse(D,B);return await Y(),G}catch(X){if(!W)try{await Y()}catch(F){console.error(F)}throw X}},Z)}async dispatchAs($,Z,O,j){let T=new URL($.rawRequest.url).origin,z=new URL(`${T}/api${O}`),J=`/api${O.split(/[?#]/)[0]}`;if(!O.startsWith("/")||z.origin!==T||z.pathname!==J||z.hash!==""||z.pathname.startsWith("/api/__gemi__")||z.pathname==="/api/auth"||z.pathname.startsWith("/api/auth/"))throw Error(`dispatchAs: "${O}" is not an app api path. Pass the route's own path, without "/api", with every param encoded.`);let W=new Headers,Y=$.cookies.get(WZ);if(Y)W.set("Cookie",`${WZ}=${Y}`);let X=$.headers.get(WZ);if(X)W.set(WZ,X);let F=$.headers.get("User-Agent");if(F)W.set("User-Agent",F);let U;if(j instanceof FormData)U=j;else if(j!==void 0)W.set("Content-Type","application/json"),U=JSON.stringify(j);let D=new Request(z,{method:Z,headers:W,body:U});if(MJ(D,C$($)),$.domain)t$(D,$.domain);return N.exit(()=>SJ.exit(()=>this.handleApiRequest(D)))}}import{timingSafeEqual as aX}from"crypto";var b3="",_4="*",oX=60000,rX=1e4,S4=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/,A3=16,xJ=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,N4="x-forwarded-host";function PJ($){return $.startsWith(":")}function x4($,Z){if($===null)return!1;let O=Buffer.from($,"utf8"),j=Buffer.from(Z,"utf8");return O.length===j.length&&aX(O,j)}function tX($){if(!$)return null;if($===!0)return{header:N4,secret:null};return{header:($.hostHeader??N4).toLowerCase(),secret:$.secret?{header:$.secret.header.toLowerCase(),value:$.secret.value}:null}}function eX($){if(!$||$===!0)return;let{hostHeader:Z,secret:O}=$;if(Z!==void 0&&(typeof Z!=="string"||!xJ.test(Z)))throw Error(`\`route.domains.trustProxy.hostHeader\` must be a single header name, e.g. "x-forwarded-host". Got ${JSON.stringify(Z)}.`);if(!O)return;if(typeof O.header!=="string"||!xJ.test(O.header))throw Error(`\`route.domains.trustProxy.secret.header\` must be a header name. Got "${O.header}".`);if(O.header.toLowerCase()===(Z??N4).toLowerCase())throw Error("`route.domains.trustProxy.secret.header` names the same header as `hostHeader`; the secret needs a header of its own.");if(typeof O.value!=="string"||O.value.length<A3)throw Error(`\`route.domains.trustProxy.secret.value\` must be at least ${A3} characters. A guessable one lets any client name its own host.`)}function T1($){if(!$)return null;try{return new URL(`http://${$.trim()}`).hostname.toLowerCase().replace(/\.$/,"")||null}catch{return null}}function $F($){try{let Z=new URL(`http://${$.trim()}`),O=Z.hostname.toLowerCase().replace(/\.$/,"");return O?Z.port?`${O}:${Z.port}`:O:null}catch{return null}}function ZF($){let Z=T1($.root),O=$.root?.trim().toLowerCase().replace(/\.$/,"");if(!Z||Z!==O||!Z.split(".").every((z)=>S4.test(z)))throw Error(`\`route.domains.root\` must be a bare hostname, e.g. "example.com" \u2014 no scheme, port or path. Got "${$.root}".`);if($.custom&&($.custom.cacheTtlMs??0)<0)throw Error(`\`route.domains.custom.cacheTtlMs\` is ${$.custom.cacheTtlMs}; it cannot be negative. Use 0 to disable the cache.`);if($.ask&&$.ask.secret.length<A3)throw Error(`\`route.domains.ask.secret\` must be at least ${A3} characters. A guessable one is worse than leaving \`ask\` out.`);eX($.trustProxy);let j=new Set,T=null;for(let z of $.groups??[]){let{subdomain:J}=z;if(j.has(J))throw Error(`\`route.domains\` declares the subdomain "${J}" twice.`);if(j.add(J),PJ(J)){if(!/^:[A-Za-z_][A-Za-z0-9_]*$/.test(J))throw Error(`"${J}" is not a valid param subdomain. It must be a single \`:name\` label.`);if(T)throw Error(`\`route.domains\` declares two param subdomains, "${T.subdomain}" and "${J}"; a host could match either.`);T=z;continue}if(z.exists)throw Error(`The subdomain "${J}" is fixed, so \`exists\` has no param to check. It only applies to a \`:param\` subdomain.`);if(!J.split(".").every((W)=>S4.test(W)))throw Error(`"${J}" is not a valid subdomain.`)}if($.custom&&!j.has($.custom.group))throw Error(`\`route.domains.custom.group\` is "${$.custom.group}", but no group declares that subdomain.`);if($.ask&&T&&!T.exists)throw Error(`\`route.domains.ask\` is set, so "${T.subdomain}" needs an \`exists\` to say which tenants are real. Without one every host under the root would be approved for a certificate.`)}class P4{root;hostTrust;fixed=new Map;param=null;custom;cacheTtlMs;cache=new Map;inFlight=new Map;askSecret;proxySecretHeader;constructor($){ZF($),this.root=T1($.root),this.hostTrust=tX($.trustProxy);for(let Z of $.groups??[])if(PJ(Z.subdomain))this.param={...Z,name:Z.subdomain.slice(1)};else this.fixed.set(Z.subdomain.toLowerCase(),Z);this.custom=$.custom??null,this.cacheTtlMs=this.custom?.cacheTtlMs??oX,this.askSecret=$.ask?.secret??null,this.proxySecretHeader=this.hostTrust?.secret?.header??null}forwardedHost($){let Z=this.hostTrust;if(!Z)return null;if(Z.secret&&!x4($.headers.get(Z.secret.header),Z.secret.value))return null;return $.headers.get(Z.header)?.split(",")[0]?.trim()||null}hostOf($){return T1(this.forwardedHost($))??T1(new URL($.url).host)}publicOrigin($){let Z=new URL($.url),O=$.headers.get("x-forwarded-proto")?.split(",")[0]?.trim(),j=O==="http"||O==="https"?O:Z.protocol.replace(/:$/,""),T=this.forwardedHost($),z=T&&T1(T)?$F(T):null;return`${j}://${z??Z.host}`}async resolve($){let Z=this.hostOf($);if(!Z)return null;let O=await this.match(Z,$);if(O)return O;if(this.custom?.fallback&&!this.isUnderRoot(Z))return{host:Z,group:_4,params:{},custom:!0};return null}async allows($,Z){let O=T1($);return O?await this.match(O,Z)!==null:!1}isUnderRoot($){return $===this.root||$.endsWith(`.${this.root}`)}async match($,Z){if($===this.root)return{host:$,group:b3,params:{},custom:!1};if($.endsWith(`.${this.root}`)){let j=$.slice(0,-(this.root.length+1)),T=this.fixed.get(j);if(T)return{host:$,group:T.subdomain,params:{},custom:!1};if(this.param&&S4.test(j)){let z={[this.param.name]:j};if(this.param.exists&&!await this.param.exists(z,Z))return null;return{host:$,group:this.param.subdomain,params:z,custom:!1}}return null}if(!this.custom)return null;let O=await this.resolveCustom($);return O?{host:$,group:this.custom.group,params:O,custom:!0}:null}async resolveCustom($){let Z=Date.now(),O=this.cache.get($);if(O&&O.expiresAt>Z)return this.cache.delete($),this.cache.set($,O),O.value;let j=this.inFlight.get($);if(j)return j;let T=(async()=>await this.custom.resolve($)??null)();this.inFlight.set($,T);let z;try{z=await T}finally{this.inFlight.delete($)}if(this.cacheTtlMs>0){if(this.cache.size>=rX)this.cache.delete(this.cache.keys().next().value);this.cache.delete($),this.cache.set($,{value:z,expiresAt:Date.now()+this.cacheTtlMs})}return z}forget($){if($===void 0)this.cache.clear();else{let Z=T1($);if(Z)this.cache.delete(Z)}}}var OF="/__gemi__/domains/ask";class s0{static token="router.domains";resolver;acceptsCustomDomains;groups=new Map;constructor($,Z){this.groups.set(b3,$);let{domains:O}=Z;if(this.acceptsCustomDomains=Boolean(O?.custom),!O){this.resolver=null;return}this.resolver=new P4(O);let j=(T)=>({api:T.api?new H3({...Z.api,...T.api}):$.api,view:T.view?new nZ({...Z.view,...T.view}):$.view});for(let T of O.groups??[])this.groups.set(T.subdomain,j(T));if(O.custom?.fallback)this.groups.set(_4,j(O.custom.fallback))}async route($){if(!this.resolver)return this.dispatchers(null);if(this.resolver.proxySecretHeader)EJ($,this.resolver.proxySecretHeader);let Z=await this.resolver.resolve($);if(!Z)return null;return t$($,Z),this.dispatchers(Z)}async ask($){if(!this.resolver?.askSecret||$.method!=="GET")return null;let Z=new URL($.url);if(Z.pathname!==OF)return null;if(!x4(Z.searchParams.get("secret"),this.resolver.askSecret))return null;let O=Z.searchParams.get("domain"),j=O?await this.resolver.allows(O,$):!1;return new Response(null,{status:j?200:404})}dispatchers($){return this.groups.get($?.group??b3)}viewDispatchers(){return Array.from(new Set(Array.from(this.groups.values(),($)=>$.view)))}}function v3($){let Z=new Date($??0).getTime();return Number.isFinite(Z)?Z:0}var HJ=600000;function AJ($,Z){return[zO($,Z),zO($,Z-1)]}class H{static token="auth";config;provider;constructor($={},Z=new Jj){this.config={...bJ(B8($),$),emailCode:Tj($.emailCode)},this.provider=Z}get userProvider(){return this.provider}accessTokenCookieOptions($,Z){return{expires:Z,secure:this.publicOrigin($).startsWith("https://"),httpOnly:!0,domain:this.cookieDomain($)}}publicOrigin($){let Z=C().bound(s0)?C(s0).resolver:null;return Z?Z.publicOrigin($.rawRequest):new URL($.rawRequest.url).origin}cookieDomain($){let Z=this.config.cookieDomain;if(!Z)return;let O=Z==="root"?C(s0).resolver?.root:T1(Z);if(!O)throw Error('`auth.cookieDomain` is "root", but `route.domains` is not configured.');let j=$.domain?.host??T1(new URL($.rawRequest.url).host);return j===O||j?.endsWith(`.${O}`)?O:void 0}async getSession($,Z){if(!$)return null;if(!r3($))return this.config.migrateLegacySession?this.convertLegacySession($,Z,this.config.migrateLegacySession):null;let O=await this.userProvider.findSession({token:$,userAgent:Z});if(!O?.user)return null;let j=Date.now(),T=v3(O.expiresAt),z=v3(O.absoluteExpiresAt);if(T<=j||z<=j)return await this.userProvider.deleteSession({token:$}),null;let W=await this.slideSession(O,j);return W.user.extension=await this.config.extendSession(W.user),W}async convertLegacySession($,Z,O){let j=N.getStore()?.req;if(!j)return null;let T=Date.now(),z=Math.floor(T/HJ),J=null,W=await this.userProvider.findSession({token:$,userAgent:Z});if(W?.user){if(!await O(W,{token:$,req:j,userAgent:Z}))return null;let X=zO($,z),F=W.user.id;if(await this.userProvider.withLegacySessionLock($,async()=>{if(!await this.userProvider.claimLegacySession({token:$}))return!1;return await this.userProvider.createSessionV2({token:X,userId:F,userAgent:Z,...this.freshLifetime(T)}),!0}))J=X}if(!J){for(let X of AJ($,z))if((await this.userProvider.findSession({token:X,userAgent:Z}))?.user){J=X;break}}if(!J)return null;let Y=await this.getSession(J,Z);if(Y)j.ctx().setCookie("access_token",J,this.accessTokenCookieOptions(j,new Date(Y.expiresAt)));return Y}async revokeSession($,Z){if(!$)return await this.userProvider.deleteSession({token:$}),null;if(r3($)||!this.config.migrateLegacySession){let T=await this.userProvider.findSession({token:$,userAgent:Z});return await this.userProvider.deleteSession({token:$}),T}let O=Math.floor(Date.now()/HJ),j=AJ($,O);return this.userProvider.withLegacySessionLock($,async()=>{let T=await this.userProvider.findSession({token:$,userAgent:Z});for(let z of j){if(T?.user)break;T=await this.userProvider.findSession({token:z,userAgent:Z})}await this.userProvider.deleteSession({token:$});for(let z of j)await this.userProvider.deleteSession({token:z});return T})}requestCarryingCookie($){let Z=N.getStore()?.req;return Z?.cookies.get("access_token")===$?Z:null}async slideSession($,Z){let O=this.config.sessionExpiresInHours*3600000;if(new Date($.expiresAt).getTime()-Z>=O/2)return $;let j=new Date(Math.min(Z+O,new Date($.absoluteExpiresAt).getTime())),T=await this.userProvider.updateSession({token:$.token,expiresAt:j}),z=this.requestCarryingCookie($.token);if(z)z.ctx().setCookie("access_token",$.token,this.accessTokenCookieOptions(z,j));if(!T)return $;return{...$,expiresAt:T.expiresAt??j}}freshLifetime($){return{expiresAt:new Date($+this.config.sessionExpiresInHours*3600000),absoluteExpiresAt:new Date($+this.config.sessionAbsoluteExpiresInHours*3600000)}}async generateMagicLink($){}async upsertSession($){await this.userProvider.findSession({token:"",userAgent:""})}async authenticate($){try{let Z=await this.userProvider.findUserByEmailAddress($,!1);if(!Z)throw Error(`User not found with email: ${$}`);let O=await this.createOrUpdateSession({email:$,id:Z.id}),j=new _;if(j.ctx().setCookie("access_token",O.token,this.accessTokenCookieOptions(j,O.expiresAt)),O?.user)O.user.extension=await this.config.extendSession(O.user);return O}catch(Z){console.log(Z)}}async createOrUpdateSessionV2($){let Z=await this.createOrUpdateSession($),O=null;if(Z?.user)O=await this.config.extendSession(Z.user),Z.user.extension=O;return Z}async createOrUpdateSession($){let Z=new _,O=$.id??(await this.userProvider.findUserByEmailAddress($.email,!1))?.id;if(!O)throw new p1;let j=Bun.env.NODE_ENV==="development"?"local":Z.headers.get("User-Agent"),T=j8(O),z=await this.userProvider.createSessionV2({token:T,userId:O,userAgent:j,...this.freshLifetime(Date.now())}),J=await this.userProvider.findSession({token:T,userAgent:j??""});return J?.user?J:z}async createMagicLinkToken($){let Z=await this.userProvider.findUserByEmailAddress($,!1);if(Z){let{pin:O,token:j}=await this.issueOneTimeCode($,6);return{user:Z,email:$,pin:O,token:j}}return{}}async issueOneTimeCode($,Z){await this.userProvider.deleteMagicLinkToken($);let O=await this.config.generateMagicLinkToken($),j=await this.config.generateCode($),T=typeof j==="string"&&j!==""?j:F8(Z);return await this.userProvider.createMagicLinkToken({email:$,token:JO("link",$,O),pin:JO("pin",$,T)}),{email:$,pin:T,token:O}}async verifyOneTimeCode($,Z,O={}){let{expiresInMinutes:j,maxAttempts:T}=this.config.emailCode,z=await this.userProvider.findMagicLinkTokenByEmail($);if(!z)return XZ("pin",$,null,Z),{status:"invalid"};let J=v3(z.createdAt);if(J+j*60000<=Date.now())return XZ("pin",$,null,Z),{status:"expired"};if(!await G8(z.id,J,T,j))return await this.userProvider.claimMagicLinkToken(z.id),{status:"too_many_attempts"};if(!XZ("pin",$,z.pin,Z))return{status:"invalid"};if(O.claim!==!1&&!await this.userProvider.claimMagicLinkToken(z.id))return{status:"invalid"};return{status:"ok",row:z}}async verifyMagicLinkToken($,Z){let O=await this.userProvider.findMagicLinkTokenByEmail($),j=XZ("link",$,O?.token,Z);if(!O||!j)return!1;if(v3(O.createdAt)+this.config.emailCode.linkExpiresInMinutes*60000<=Date.now())return!1;return await this.userProvider.claimMagicLinkToken(O.id)}}class z$ extends v0{static getFacadeAccessor(){return H}static async user(){let $=N.getStore(),Z=$?.user;if(!Z){if(Z=await jO(this.getFacadeRoot(),$?.req),Z)$?.setUser(Z)}if(Z)return Z;throw new p1({redirectTo:OO($?.req,this.getFacadeRoot().config.signInPath)})}static intendedUrl($){let Z=N.getStore()?.req;return JZ(Z?.search.get(Q$),$??this.getFacadeRoot().config.redirectPath)}static async guard($){let Z=await z$.user();if(!await $(Z))throw new a3}static async guardSafe($){let Z=await z$.user();try{return await $(Z)}catch(O){return!1}}static async authenticate($){return await this.getFacadeRoot().authenticate($)}static async createMagicLink($){return await this.getFacadeRoot().createMagicLinkToken($)}}class R3{static ensure($,Z={}){let O=N.getStore();if(O.req.kind==="api")throw Error("Query.prefetch() cannot be called from an API request");return O.serverQueries??=new a$(iZ(O.req.rawRequest)),O.serverQueries.ensure($,Z,"prefetch")}static async instant($,...Z){let O=R3.ensure($,Z[0]);if(await O.promise,O.status==="rejected")throw O.error;return O.data}static prefetch($,...Z){R3.ensure($,Z[0])}static noPrefetch(){let $=N.getStore();if($.req.kind==="api")throw Error("Query.noPrefetch() cannot be called from an API request");$.serverQueries??=new a$(iZ($.req.rawRequest)),$.serverQueries.muteDiscoveryHints()}}function vJ($,Z,O="/"){let j=new URL($.origin),T=Z.host?Z.host:Z.subdomain?`${Z.subdomain}.${$.root}`:$.root,z=new URL(O.startsWith("/")?O:`/${O}`,j),J=jF(T);if(!J)throw Error(`"${T}" is not a hostname, so there is no URL for it. Give a bare host, optionally with a port \u2014 no scheme, path or credentials.`);if(z.hostname=J.hostname,J.port)z.port=J.port;return z.toString()}function jF($){try{let Z=new URL(`http://${$.trim()}`);return Z.host===$.trim().toLowerCase()&&Z.pathname==="/"?{hostname:Z.hostname,port:Z.port}:null}catch{return null}}class RJ{static absolute($,...Z){return`${process.env.HOST_NAME}${T0(String($),Z[0]??{})}`}static relative($,...Z){return T0(String($),Z[0]??{})}static forDomain($,Z,...O){let j=C(s0).resolver;if(!j)throw Error("`Url.forDomain` needs `route.domains` to be configured.");let T=N.getStore()?.req?.rawRequest,z=T?j.publicOrigin(T):process.env.HOST_NAME;if(!z)throw Error("`Url.forDomain` outside a request needs `HOST_NAME` for the protocol.");return vJ({root:j.root,origin:z},$,T0(String(Z),O[0]??{}))}}class wJ{name="Meta";static description($){N.getStore().metadata.description($)}static title($){N.getStore().metadata.title($)}static openGraph($){N.getStore().metadata.openGraph($)}}var TF={set($,Z,O){N.getStore().setCookie($,Z,O)},setIfAbsent($,Z,O){if(N.getStore().req.cookies.has($))return!1;return N.getStore().setCookie($,Z,O),!0},delete($,Z){N.getStore().deleteCookie($,Z)}};class Q1 extends v0{static getFacadeAccessor(){return qJ}static get client(){return this.getFacadeRoot().client}static get($){return Q1.client.get($)}static set($,Z){return Q1.client.set($,Z)}static del(...$){return Q1.client.del(...$)}static exists($){return Q1.client.exists($)}static incr($){return Q1.client.incr($)}static expire($,Z){return Q1.client.expire($,Z)}static ttl($){return Q1.client.ttl($)}}class kJ extends v0{static getFacadeAccessor(){return a0}static consume($,Z={}){return this.getFacadeRoot().consume($,Z)}}class gJ extends v0{static getFacadeAccessor(){return n$}static enabled($){return this.getFacadeRoot().enabled($)}static all(){return this.getFacadeRoot().forClient()}static explain($){return this.getFacadeRoot().explain($)}static for($){return this.getFacadeRoot().for($)}static list(){return this.getFacadeRoot().list()}static set($,Z,O){return this.getFacadeRoot().set($,Z,O)}static refresh(){return this.getFacadeRoot().refresh()}static invalidate(){return this.getFacadeRoot().invalidate()}}class w3{bound;constructor($){this.bound=$}get name(){return this.bound??UZ()}get sql(){return this.connection().sql}get dialect(){return this.connection().dialect}async query($){return await this.run($,"query")}async execute($){let Z=await this.run($,"execute");return Number(Z?.count??0)}async transaction($){let Z=this.name,O=this.connection(Z);return pJ(O.sql,(j)=>yJ(Z,()=>$(j)),{slowTransactionThreshold:O.config.slowTransactionThreshold,connection:Z})}async schema(){let $=this.connection(),{introspect:Z}=await import("./chunk-yafxbmy3.js");return Z(this.handle()??$.sql,$.dialect)}run($,Z){let O=this.connection(),{text:j,values:T}=cJ($,hJ(O.dialect),Z);return(this.handle()??O.sql).unsafe(j,T)}handle(){let $=DZ();if($===void 0)return;return UZ()===this.name?$:void 0}connection($=this.name){return mJ($),C(GZ).connection($)}}var ZZ=new w3;class lJ extends v0{static getFacadeAccessor(){return GZ}static connection($){return new w3($)}static get sql(){return ZZ.sql}static get dialect(){return ZZ.dialect}static query($){return ZZ.query($)}static execute($){return ZZ.execute($)}static transaction($){return ZZ.transaction($)}static schema(){return ZZ.schema()}static close(){return this.getFacadeRoot().close()}}export{J1 as hc,TZ as ic,m3 as jc,N0 as kc,c3 as lc,k4 as mc,ZO as nc,zZ as oc,d3 as pc,f1 as qc,R0 as rc,jW as sc,TW as tc,o3 as uc,r3 as vc,j8 as wc,a0 as xc,YZ as yc,o4 as zc,C$ as Ac,T8 as Bc,z8 as Cc,e3 as Dc,$j as Ec,JO as Fc,XZ as Gc,YU as Hc,B8 as Ic,fW as Jc,Jj as Kc,z$ as Lc,s$ as Mc,R3 as Nc,RJ as Oc,wJ as Pc,TF as Qc,Q1 as Rc,kJ as Sc,JJ as Tc,U4 as Uc,WJ as Vc,YJ as Wc,NX as Xc,XJ as Yc,G4 as Zc,PX as _c,EX as $c,B4 as ad,FJ as bd,DJ as cd,n$ as dd,gJ as ed,w3 as fd,lJ as gd,p6 as hd,h6 as id,oU as jd,S7 as kd,N7 as ld,lZ as md,FG as nd,x7 as od,P7 as pd,F4 as qd,o$ as rd,K4 as sd,L4 as td,dX as ud,f4 as vd,sX as wd,nZ as xd,M4 as yd,LJ as zd,IJ as Ad,H3 as Bd,s0 as Cd,H as Dd,d4 as Ed,i4 as Fd,u4 as Gd,e4 as Hd,$8 as Id,Z8 as Jd};
|
|
15
|
+
`;async function lX($,Z,O){let j=`${O==="italic"?"italic,":""}wght@${O==="italic"?"1,":""}${Z}`,J=(await(await fetch(`https://fonts.googleapis.com/css2?family=${$}:${j}&display=swap`,{headers:{"User-Agent":"Mozilla/5.0 Firefox/1.0"}})).text()).match(/url\(([^)]+)\)/)?.[1];return await fetch(J).then((W)=>W.arrayBuffer())}var L4="/assets";function dX($){return $===L4||$.startsWith(`${L4}/`)}function iX($){let Z=$.filter(dX);if(Z.length>0){let O=Z.length>1;throw Error(`View route path${O?"s":""} ${Z.map((j)=>`"${j}"`).join(", ")} use${O?"":"s"} the reserved "${L4}" prefix. The client build output is served from there before the router runs, so the route would never match. Mount it somewhere else.`)}}function uX($){let Z=C(s0).resolver;return{...$.domain,root:Z.root,origin:Z.publicOrigin($.rawRequest)}}function f4($){let{status:Z=400,error:O}=$;return new Response(O?.message,{...$,status:Z})}function sX($){let{status:Z=400,data:O,directive:j,headers:T}=$;return new Response(JSON.stringify({data:O,directive:j}),{headers:T,status:Z})}class nZ{static token="router.view";flatViewRoutes={};routeManifest={};clientRouteManifest={};componentTree=[];flatComponentTree=[];root=null;shellReporter=BJ();preloadCache=new WeakMap;hooks;partialRendering;constructor($){let Z=P7();this.partialRendering=$.partialRendering??Z.partialRendering,this.hooks={onRequestStart:$.onRequestStart??Z.onRequestStart,onRequestEnd:$.onRequestEnd??Z.onRequestEnd,onRequestFail:$.onRequestFail??Z.onRequestFail,onStreamComplete:$.onStreamComplete??Z.onStreamComplete};let O={"/":$.rootRouter,"/auth":g6};this.flatViewRoutes=S3(O),iX(Object.keys(this.flatViewRoutes)),this.routeManifest=_3(O),this.clientRouteManifest=Object.fromEntries(Object.entries(this.routeManifest).filter(([,j])=>j.at(-1)!=="FILE")),this.componentTree=x3(O),this.flatComponentTree=X4(this.componentTree),this.root=$.root}async passesFeatureGates($){let Z=C(n$);for(let O of $)if(!await Z.enabled(O))return!1;return!0}async onRequestEnd($){return V4(),await this.hooks.onRequestEnd($)}completeStream($,Z){let O=(j)=>{X$.error(j?.message??'Error in "onStreamComplete" event handler',{err:JSON.stringify(j)})};try{Promise.resolve(this.hooks.onStreamComplete($,Z)).catch(O)}catch(j){O(j)}}modulePreloadLinks($){let{clientEntry:Z,modulePreloadManifest:O,views:j,routeKey:T}=$,z=()=>{let Y=new Set(Z?.preload??[]);for(let X of j)for(let F of O?.[X]??[])Y.add(F);return[...Y].map((X)=>e$("link",{key:`modulepreload:${X}`,rel:"modulepreload",href:X}))};if(!O)return z();let J=this.preloadCache.get(O);if(!J||J.clientEntry!==Z)J={clientEntry:Z,byRoute:new Map},this.preloadCache.set(O,J);let W=J.byRoute.get(T);if(!W)W=z(),J.byRoute.set(T,W);return W}async render($){let{req:Z,runInRequestScope:O,csrfTokenHMAC:j,currentPathName:T,headers:z,i18n:J,params:W,pathname:Y,serverQueries:X,userAgent:F,noStream:U,url:D,user:B,viewData:G,breadcrumbs:K,urlLocaleSegment:Q,meta:f,isOgRequest:I,appId:V,features:x}=$,P=Y.replace(`/${Q}`,""),L={kind:"view",data:{meta:f,pageData:{[P]:G},__csrf:j.toString("base64"),prefetchedData:{},i18n:J,auth:{user:B},routeManifest:this.clientRouteManifest,breadcrumbs:K,router:{urlLocaleSegment:Q,pathname:T,params:W,currentPath:Y,searchParams:D.search,is404:!T?!0:!1,domain:Z.domain?uX(Z):null},appId:V,features:x,componentTree:[["404",[]],...this.componentTree]},head:{}},M=this.root,E=this.routeManifest[T];return async(A)=>{let{bootstrapModules:Z0=[],loaders:w,getStyles:g,viewImportMap:O0,cssManifest:q3,ogMap:aZ,viewModules:F$,clientEntry:z1,modulePreloadManifest:m1,assetBase:j0}=A,OZ=z1?[]:Z0,oZ=(S0)=>[S0,`window.loaders=${w}`,...z1?[`import(${JSON.stringify(z1.module)}).catch(function(e){setTimeout(function(){throw e})})`]:[]].join(";");if(I){let S0=null,G$=null;for(let B$ of E??[])if(typeof aZ[B$]==="function")G$=B$,S0=aZ[B$];if(!S0)return new Response("Not found",{status:404});let dJ=Object.values(L.data.pageData)[0];try{await C4(e$(S0,dJ[G$]),{onError:()=>{}})}catch(B$){let{fonts:iJ,...uJ}=B$.satoriOptions,sJ=await Promise.all(iJ.map((tZ)=>{return lX(tZ.name,tZ.weight,tZ.style).then((tJ)=>({...tZ,data:tJ}))})),E4=new Headers(z);E4.set("Content-Type","image/png");let[nJ,aJ]=await Promise.all([pX(),I3("Rendering an OG image")]),oJ=await nJ(B$.jsx,{...uJ,fonts:sJ}),rJ=await aJ(Buffer.from(oJ)).png({compressionLevel:0,effort:10}).toBuffer();return new Response(new Uint8Array(rJ),{headers:E4})}return new Response("data")}if(L.data.cssManifest=q3,L.data.modulePreloadManifest=m1??{},j0&&j0!=="/")L.data.assetBase=j0;let D$=this.modulePreloadLinks({clientEntry:z1,modulePreloadManifest:m1,views:E??["404"],routeKey:T??"404"}),jZ=await g(E);L.data.prefetchedData=X.snapshotResolved(),X.markRenderStart();let C1=new AbortController,rZ=setTimeout(()=>C1.abort(),hX),b=E3(F)||U,M0=Bun.env.NODE_ENV!=="production"&&!b&&T&&this.shellReporter.shouldObserve(T)?KJ():null,U$=VJ();try{let S0=await C4(e$(mX,{children:[...D$,...jZ,e$("script",{key:"theme-script",dangerouslySetInnerHTML:{__html:cX}}),e$(M,{data:L.data,viewImportMap:O0,viewModules:F$,serverQueries:X,dictionarySink:U$,key:"root"})]}),{bootstrapScriptContent:oZ(`window.__GEMI_DATA__ = ${Y$(L.data)}`),bootstrapModules:OZ,signal:C1.signal,...b?{progressiveChunkSize:Number.MAX_SAFE_INTEGER}:{},onError(G$){if(Bun.env.NODE_ENV!=="production")console.error(G$)}});if(S0.allReady.catch(()=>{}).finally(()=>clearTimeout(rZ)),b)await S0.allReady.catch(()=>{});return new Response(D4(S0,X,{onShell:b?void 0:()=>X.markShell(),onChunk:M0?.onChunk,onClose:()=>O(()=>{if(this.completeStream(Z,X.summarize(C1.signal.aborted)),M0)this.shellReporter.report(T,M0.measure())})},U$),{status:!T?404:200,headers:z})}catch(S0){if(clearTimeout(rZ),Bun.env.NODE_ENV==="production")throw O(()=>this.completeStream(Z,X.summarize(C1.signal.aborted))),S0;let G$=await C4(e$("div"),{bootstrapScriptContent:oZ(`window.error= ${Y$(S0.message)}; window.stack_trace=${Y$(S0.stack)};window.__GEMI_DATA__ = ${Y$(L.data)}`),bootstrapModules:Bun.env.NODE_ENV==="development"?["/render-error.js",...OZ]:OZ});return new Response(D4(G$,X,{onClose:()=>O(()=>this.completeStream(Z,X.summarize(C1.signal.aborted)))}),{status:!T?404:200,headers:z})}}}async handleViewRequest($,Z){let O=new URL($.url),j=O.pathname.endsWith(".json"),T=O.pathname.endsWith(".og"),z=O.pathname.replace(".json","").replace(".og",""),[,J,...W]=z.split("/"),Y=`/${W.join("/")}`,X=null,F=null,U=C(i);if(!U.supportedLocales.includes(J))Y=z;else X=J,F=J;let B=F===null&&dZ(this.flatViewRoutes,Y)!==null;if(U.isLocaleAware&&!T&&F===null&&!B){let L=CJ(J,U.supportedLocales,U.defaultLocale);if(L){let M=W.length?`/${W.join("/")}`:"";return new Response("",{status:302,headers:{"Cache-Control":"private, no-cache, no-store, max-age=0, must-revalidate",Location:`/${L}${M}${j?".json":""}${O.search}`}})}}if(U.isLocaleAware&&!T){let L=C(i).detectLocale(new _($,{},"view",Y));if(F===null&&L!==U.defaultLocale){let M=O.pathname==="/"?"":O.pathname;return new Response("",{status:302,headers:{"Cache-Control":"private, no-cache, no-store, max-age=0, must-revalidate",Location:`/${L}${M}${O.search}`}})}}Y=Y.replace("//","/");let G=[],K=[],Q=null,f={},I=null,V=!1,x=[];try{let L=dZ(this.flatViewRoutes,Y);if(L){if(Q=L.routePath,f=L.params,G=L.route.exec,K=L.route.middleware,x=L.route.features,V=K.includes("no-stream"),j&&this.partialRendering){let M=$.headers.get(Y4),E=e7({flatViewRoutes:this.flatViewRoutes,supportedLocales:C(i).supportedLocales,from:M,origin:O.origin,to:{segments:L.route.segments,params:f,search:O.search}});if(E.startIndex>0)G=G.slice(E.startIndex),I={from:M,carriedViews:E.carriedViews}}}}catch(L){throw L}let P=new _($,f,"view",Q);return this.hooks.onRequestStart(P),await N.run(P,async()=>{let L=null,M=N.getStore(),E=r$.getStore(),A=(g)=>r$.run(E,()=>N.runWith(M,g));M.serverQueries=new a$(iZ($));let Z0=new Set;if(M.serverQueries.onQueryFail((g)=>{Z0.add(g.error);try{A(()=>Promise.resolve(this.hooks.onRequestFail(w,g.error)).catch(()=>{}))}catch{}}),F){let g=F.replaceAll("/","");s$.setLocale(g)}else s$.setLocale();let w=M.req;V4();try{let g=!1;try{await C(lZ).runMiddleware(K)}catch(b){if(!$Z(b))throw b;g=!0}if(g||x.length>0&&!await this.passesFeatureGates(x))Q=null,G=[],w.routePath="";let O0=C(i),q3=O0.isEnabled,aZ=O0.isLocaleAware,F$={};if(aZ){let b=null;if(F)b=F.replaceAll("/",""),M.setLocale(b);else b=O0.detectLocale(new _($,w.params)),M.setLocale(b);let M0=q3?O0.getPageTranslations(b,w.routePath):{};F$={supportedLocales:O0.supportedLocales,currentLocale:b,dictionary:{[b]:M0},defaultLocale:O0.defaultLocale}}await fJ(F$.currentLocale??"");let z1;try{z1=await Promise.all(G.map((b)=>b(w)))}catch(b){if(!$Z(b))throw b;Q=null,G=[],w.routePath="",z1=[]}let{cookies:m1,headers:j0}=M;L={data:z1,cookies:m1,headers:j0,user:M.user,prefetchedData:M.serverQueries.snapshotResolved(),currentPathName:Q,params:w.params,urlLocaleSegment:X,meta:M.renderMeta(),appId:C(F4).id,features:await C(n$).forClient()};let{params:OZ,user:oZ}=L,D$={},jZ={};for(let b of z1??[]){let[M0,U$]=Object.entries(b)?.[0]??[];if(!M0||!U$)continue;jZ[`${M0}:${Q}`]=U$.breadcrumb,D$[M0]=U$}let C1=D$.FILE;if(C1){for(let b of m1)j0.append("Set-Cookie",b.toString());try{await this.onRequestEnd(w)}catch(b){X$.error(b?.message??'Error in "onRequestEnd" event handler',{err:JSON.stringify(b)})}return await d3(C1,j0)}if(j){j0.set("Content-Type","application/x-ndjson; charset=utf-8"),j0.append("Vary",Y4),m1.forEach((M0)=>j0.append("Set-Cookie",M0.toString())),await this.hooks.onRequestEnd(w);let b={meta:I&&!M.metadata.touched?null:L.meta,data:{[Y]:D$},breadcrumbs:jZ,prefetchedData:M.serverQueries.snapshotResolved(),i18n:F$,features:L.features,is404:!Q,appId:L.appId,partial:I};return new Response(QJ(b,M.serverQueries,void 0,({aborted:M0})=>A(()=>this.completeStream(w,M.serverQueries.summarize(M0)))),{headers:j0})}if(j0.set("Content-Type","text/html; charset=utf-8"),!V)j0.append("Vary","User-Agent");for(let b of m1)j0.append("Set-Cookie",b.toString());let rZ=Bun.CSRF.generate(process.env.SECRET);j0.append("Set-Cookie",`csrf_token=${rZ}; HttpOnly; Secure; SameSite=Strict; Expires=${new Date(Date.now()+86400000).toUTCString()}`);try{await this.onRequestEnd(w)}catch(b){X$.error(b?.message??'Error in "onRequestEnd" event handler',{err:JSON.stringify(b)})}return await this.render({req:w,runInRequestScope:A,csrfTokenHMAC:Buffer.from(""),currentPathName:Q,headers:j0,i18n:F$,params:OZ,pathname:O.pathname,serverQueries:M.serverQueries,userAgent:$.headers.get("user-agent"),noStream:V,url:O,user:oZ,viewData:D$,breadcrumbs:jZ,urlLocaleSegment:X,meta:L.meta,appId:L.appId,features:L.features,isOgRequest:T})}catch(g){if(g.kind===uZ)if(j)return sX(g.payload.viewData??g.payload.api);else return f4(g.payload.view);if(!Z0.has(g))this.hooks.onRequestFail(w,g);if(sZ(g))return console.error(g),j?o$():f4(K4());if(g instanceof y1&&g.status===403)return j?o$():f4(K4());throw g}},Z)}}function M4(){let $=JSON.stringify({error:V1("not_found","Not found",404)});return new Response($,{status:404,headers:{"Content-Type":"application/json","Content-Length":String(Buffer.byteLength($)),"Cache-Control":"no-store"}})}class _J extends N0{routes={"/api-routes":this.get(()=>{let $=C(H3).flatRoutes,Z=[];for(let[O,j]of Object.entries($))for(let[T,z]of Object.entries(j)){let{exec:J,middleware:W}=z;Z.push({path:O,method:T,middleware:W})}return Z}),"/view-routes":this.get(()=>{let $=C(nZ).flatViewRoutes,Z=[];for(let[O,{middleware:j,viewPath:T}]of Object.entries($))Z.push({path:O,method:"GET",viewPath:T,middleware:j});return Z})}}function nX($,Z){let O=$.body.getReader(),j=!1,T=()=>{if(j)return;j=!0;try{Z()}catch(J){console.error(J)}},z=new ReadableStream({async pull(J){let W;try{W=await O.read()}catch(Y){T(),J.error(Y);return}if(W.done){T();try{J.close()}catch{}return}try{J.enqueue(W.value)}catch{}},async cancel(J){try{await O.cancel(J)}finally{T()}}},{highWaterMark:0});return new Response(z,{status:$.status,statusText:$.statusText,headers:$.headers})}function LJ($){let{status:Z=400,data:O,headers:j}=$,T=new Headers({"Content-Type":"application/json",...j});if(!T.has("Cache-Control"))T.set("Cache-Control","no-store");return new Response(JSON.stringify(O),{status:Z,headers:T})}function IJ($,Z,O){let j=[];Z?.forEach((J,W)=>j.push([W,J]));let T=[...typeof Z?.getSetCookie==="function"?Z.getSetCookie():[],...Array.from(O??[])];if(j.length===0&&T.length===0)return $;let z=(J)=>{for(let[W,Y]of j){if(W.toLowerCase()==="set-cookie")continue;if(!J.has(W))J.set(W,Y)}for(let W of T)J.append("Set-Cookie",W)};try{return z($.headers),$}catch{let J=new Headers($.headers);return z(J),new Response($.body,{status:$.status,statusText:$.statusText,headers:J})}}class H3{static token="router.api";flatRoutes={};onRequestStart;onRequestEnd;onRequestFail;constructor($){let Z=x7();this.onRequestStart=$.onRequestStart??Z.onRequestStart,this.onRequestEnd=$.onRequestEnd??Z.onRequestEnd,this.onRequestFail=$.onRequestFail??Z.onRequestFail,this.flatRoutes=d6({"/":$.rootRouter,"/auth":y6,"/__gemi__/services/i18n":m6,"/__gemi__/services/logs":l6,"/__gemi__/services/image":c6,"/__gemi__/debug":_J})}getRouteHandlerAndParams($){let Z=new URL($.url),O=NJ(Z.pathname),j={},T;for(let[z]of Object.entries(this.flatRoutes))try{let J=new URLPattern({pathname:z});if(J.test({pathname:O})){T=z,j=J.exec({pathname:O})?.pathname.groups;break}}catch(J){console.error(J)}return{params:j,path:T}}async runRouteMiddleware($,Z){let j=this.flatRoutes[$][Z.rawRequest.method].middleware;try{await C(lZ).runMiddleware(j)}catch(T){if(T.kind===uZ)return LJ(T.payload.api);else{if($Z(T))return M4();if(this.onRequestFail(Z,T),console.error(T),sZ(T))return o$();throw T}}}async getRouteData($){let Z=this.flatRoutes[$],O=N.getStore(),j=Z[O.req.rawRequest.method].exec??(()=>Promise.resolve({})),T={};try{T=await j()}catch(z){if(z.kind===uZ)return LJ(z.payload.api);if($Z(z))return M4();if(this.onRequestFail(O.req,z),console.error(z),sZ(z))return o$();throw z}return T}isFrameworkRoute($){return $.startsWith("/__gemi__")}async endRequest($,Z,O){let j=async()=>{try{if(!this.isFrameworkRoute(O))await this.onRequestEnd(Z)}catch(T){X$.error(T?.message??'Error in "onRequestEnd" event handler',{err:JSON.stringify(T)})}finally{$.destroy()}};if(!$.hasPendingWork()){await j();return}$.whenIdle().then(j).catch((T)=>{console.error(T)})}isOpenEndedBody($,Z){return $.method!=="HEAD"&&!Z.headers.has("Content-Length")&&Z.body!==null}async handleApiRequest($,Z){let{params:O,path:j}=this.getRouteHandlerAndParams($),T=this.flatRoutes[j];if(!T||!T[$.method])return new Response(JSON.stringify({error:V1("not_found","Not found",404)}),{status:404});let z=new _($,O,"api",j);if(!this.isFrameworkRoute(j))this.onRequestStart(z);return await N.run(z,async()=>{let J=N.getStore(),W=!1,Y=async()=>{W=!0,await this.endRequest(J,z,j)};try{let X=C(i);if(X.isEnabled){let K=X.detectLocale(z);J.setLocale(K)}J.setRequest(z);let F=await this.runRouteMiddleware(j,z);if(F instanceof Response){let K=IJ(F,J.headers,J.cookies);return await Y(),K}let U=await this.getRouteData(j),D=J.headers,B=J.cookies;if(U instanceof Response){let K=IJ(U,D,B);if(this.isOpenEndedBody($,K)){let Q=nX(K,()=>this.endRequest(J,z,j));return W=!0,Q}return await Y(),K}let G=(K$(U)?U:zZ.json(U)).toResponse(D,B);return await Y(),G}catch(X){if(!W)try{await Y()}catch(F){console.error(F)}throw X}},Z)}async dispatchAs($,Z,O,j){let T=new URL($.rawRequest.url).origin,z=new URL(`${T}/api${O}`),J=`/api${O.split(/[?#]/)[0]}`;if(!O.startsWith("/")||z.origin!==T||z.pathname!==J||z.hash!==""||z.pathname.startsWith("/api/__gemi__")||z.pathname==="/api/auth"||z.pathname.startsWith("/api/auth/"))throw Error(`dispatchAs: "${O}" is not an app api path. Pass the route's own path, without "/api", with every param encoded.`);let W=new Headers,Y=$.cookies.get(WZ);if(Y)W.set("Cookie",`${WZ}=${Y}`);let X=$.headers.get(WZ);if(X)W.set(WZ,X);let F=$.headers.get("User-Agent");if(F)W.set("User-Agent",F);let U;if(j instanceof FormData)U=j;else if(j!==void 0)W.set("Content-Type","application/json"),U=JSON.stringify(j);let D=new Request(z,{method:Z,headers:W,body:U});if(MJ(D,C$($)),$.domain)t$(D,$.domain);return N.exit(()=>SJ.exit(()=>this.handleApiRequest(D)))}}import{timingSafeEqual as aX}from"crypto";var b3="",_4="*",oX=60000,rX=1e4,S4=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/,A3=16,xJ=/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/,N4="x-forwarded-host";function PJ($){return $.startsWith(":")}function x4($,Z){if($===null)return!1;let O=Buffer.from($,"utf8"),j=Buffer.from(Z,"utf8");return O.length===j.length&&aX(O,j)}function tX($){if(!$)return null;if($===!0)return{header:N4,secret:null};return{header:($.hostHeader??N4).toLowerCase(),secret:$.secret?{header:$.secret.header.toLowerCase(),value:$.secret.value}:null}}function eX($){if(!$||$===!0)return;let{hostHeader:Z,secret:O}=$;if(Z!==void 0&&(typeof Z!=="string"||!xJ.test(Z)))throw Error(`\`route.domains.trustProxy.hostHeader\` must be a single header name, e.g. "x-forwarded-host". Got ${JSON.stringify(Z)}.`);if(!O)return;if(typeof O.header!=="string"||!xJ.test(O.header))throw Error(`\`route.domains.trustProxy.secret.header\` must be a header name. Got "${O.header}".`);if(O.header.toLowerCase()===(Z??N4).toLowerCase())throw Error("`route.domains.trustProxy.secret.header` names the same header as `hostHeader`; the secret needs a header of its own.");if(typeof O.value!=="string"||O.value.length<A3)throw Error(`\`route.domains.trustProxy.secret.value\` must be at least ${A3} characters. A guessable one lets any client name its own host.`)}function T1($){if(!$)return null;try{return new URL(`http://${$.trim()}`).hostname.toLowerCase().replace(/\.$/,"")||null}catch{return null}}function $F($){try{let Z=new URL(`http://${$.trim()}`),O=Z.hostname.toLowerCase().replace(/\.$/,"");return O?Z.port?`${O}:${Z.port}`:O:null}catch{return null}}function ZF($){let Z=T1($.root),O=$.root?.trim().toLowerCase().replace(/\.$/,"");if(!Z||Z!==O||!Z.split(".").every((z)=>S4.test(z)))throw Error(`\`route.domains.root\` must be a bare hostname, e.g. "example.com" \u2014 no scheme, port or path. Got "${$.root}".`);if($.custom&&($.custom.cacheTtlMs??0)<0)throw Error(`\`route.domains.custom.cacheTtlMs\` is ${$.custom.cacheTtlMs}; it cannot be negative. Use 0 to disable the cache.`);if($.ask&&$.ask.secret.length<A3)throw Error(`\`route.domains.ask.secret\` must be at least ${A3} characters. A guessable one is worse than leaving \`ask\` out.`);eX($.trustProxy);let j=new Set,T=null;for(let z of $.groups??[]){let{subdomain:J}=z;if(j.has(J))throw Error(`\`route.domains\` declares the subdomain "${J}" twice.`);if(j.add(J),PJ(J)){if(!/^:[A-Za-z_][A-Za-z0-9_]*$/.test(J))throw Error(`"${J}" is not a valid param subdomain. It must be a single \`:name\` label.`);if(T)throw Error(`\`route.domains\` declares two param subdomains, "${T.subdomain}" and "${J}"; a host could match either.`);T=z;continue}if(z.exists)throw Error(`The subdomain "${J}" is fixed, so \`exists\` has no param to check. It only applies to a \`:param\` subdomain.`);if(!J.split(".").every((W)=>S4.test(W)))throw Error(`"${J}" is not a valid subdomain.`)}if($.custom&&!j.has($.custom.group))throw Error(`\`route.domains.custom.group\` is "${$.custom.group}", but no group declares that subdomain.`);if($.ask&&T&&!T.exists)throw Error(`\`route.domains.ask\` is set, so "${T.subdomain}" needs an \`exists\` to say which tenants are real. Without one every host under the root would be approved for a certificate.`)}class P4{root;hostTrust;fixed=new Map;param=null;custom;cacheTtlMs;cache=new Map;inFlight=new Map;askSecret;proxySecretHeader;constructor($){ZF($),this.root=T1($.root),this.hostTrust=tX($.trustProxy);for(let Z of $.groups??[])if(PJ(Z.subdomain))this.param={...Z,name:Z.subdomain.slice(1)};else this.fixed.set(Z.subdomain.toLowerCase(),Z);this.custom=$.custom??null,this.cacheTtlMs=this.custom?.cacheTtlMs??oX,this.askSecret=$.ask?.secret??null,this.proxySecretHeader=this.hostTrust?.secret?.header??null}forwardedHost($){let Z=this.hostTrust;if(!Z)return null;if(Z.secret&&!x4($.headers.get(Z.secret.header),Z.secret.value))return null;return $.headers.get(Z.header)?.split(",")[0]?.trim()||null}hostOf($){return T1(this.forwardedHost($))??T1(new URL($.url).host)}publicOrigin($){let Z=new URL($.url),O=$.headers.get("x-forwarded-proto")?.split(",")[0]?.trim(),j=O==="http"||O==="https"?O:Z.protocol.replace(/:$/,""),T=this.forwardedHost($),z=T&&T1(T)?$F(T):null;return`${j}://${z??Z.host}`}async resolve($){let Z=this.hostOf($);if(!Z)return null;let O=await this.match(Z,$);if(O)return O;if(this.custom?.fallback&&!this.isUnderRoot(Z))return{host:Z,group:_4,params:{},custom:!0};return null}async allows($,Z){let O=T1($);return O?await this.match(O,Z)!==null:!1}isUnderRoot($){return $===this.root||$.endsWith(`.${this.root}`)}async match($,Z){if($===this.root)return{host:$,group:b3,params:{},custom:!1};if($.endsWith(`.${this.root}`)){let j=$.slice(0,-(this.root.length+1)),T=this.fixed.get(j);if(T)return{host:$,group:T.subdomain,params:{},custom:!1};if(this.param&&S4.test(j)){let z={[this.param.name]:j};if(this.param.exists&&!await this.param.exists(z,Z))return null;return{host:$,group:this.param.subdomain,params:z,custom:!1}}return null}if(!this.custom)return null;let O=await this.resolveCustom($);return O?{host:$,group:this.custom.group,params:O,custom:!0}:null}async resolveCustom($){let Z=Date.now(),O=this.cache.get($);if(O&&O.expiresAt>Z)return this.cache.delete($),this.cache.set($,O),O.value;let j=this.inFlight.get($);if(j)return j;let T=(async()=>await this.custom.resolve($)??null)();this.inFlight.set($,T);let z;try{z=await T}finally{this.inFlight.delete($)}if(this.cacheTtlMs>0){if(this.cache.size>=rX)this.cache.delete(this.cache.keys().next().value);this.cache.delete($),this.cache.set($,{value:z,expiresAt:Date.now()+this.cacheTtlMs})}return z}forget($){if($===void 0)this.cache.clear();else{let Z=T1($);if(Z)this.cache.delete(Z)}}}var OF="/__gemi__/domains/ask";class s0{static token="router.domains";resolver;acceptsCustomDomains;groups=new Map;constructor($,Z){this.groups.set(b3,$);let{domains:O}=Z;if(this.acceptsCustomDomains=Boolean(O?.custom),!O){this.resolver=null;return}this.resolver=new P4(O);let j=(T)=>({api:T.api?new H3({...Z.api,...T.api}):$.api,view:T.view?new nZ({...Z.view,...T.view}):$.view});for(let T of O.groups??[])this.groups.set(T.subdomain,j(T));if(O.custom?.fallback)this.groups.set(_4,j(O.custom.fallback))}async route($){if(!this.resolver)return this.dispatchers(null);if(this.resolver.proxySecretHeader)EJ($,this.resolver.proxySecretHeader);let Z=await this.resolver.resolve($);if(!Z)return null;return t$($,Z),this.dispatchers(Z)}async ask($){if(!this.resolver?.askSecret||$.method!=="GET")return null;let Z=new URL($.url);if(Z.pathname!==OF)return null;if(!x4(Z.searchParams.get("secret"),this.resolver.askSecret))return null;let O=Z.searchParams.get("domain"),j=O?await this.resolver.allows(O,$):!1;return new Response(null,{status:j?200:404})}dispatchers($){return this.groups.get($?.group??b3)}viewDispatchers(){return Array.from(new Set(Array.from(this.groups.values(),($)=>$.view)))}}function v3($){let Z=new Date($??0).getTime();return Number.isFinite(Z)?Z:0}var HJ=600000;function AJ($,Z){return[zO($,Z),zO($,Z-1)]}class H{static token="auth";config;provider;constructor($={},Z=new Jj){this.config={...bJ(B8($),$),emailCode:Tj($.emailCode)},this.provider=Z}get userProvider(){return this.provider}accessTokenCookieOptions($,Z){return{expires:Z,secure:this.publicOrigin($).startsWith("https://"),httpOnly:!0,domain:this.cookieDomain($)}}publicOrigin($){let Z=C().bound(s0)?C(s0).resolver:null;return Z?Z.publicOrigin($.rawRequest):new URL($.rawRequest.url).origin}cookieDomain($){let Z=this.config.cookieDomain;if(!Z)return;let O=Z==="root"?C(s0).resolver?.root:T1(Z);if(!O)throw Error('`auth.cookieDomain` is "root", but `route.domains` is not configured.');let j=$.domain?.host??T1(new URL($.rawRequest.url).host);return j===O||j?.endsWith(`.${O}`)?O:void 0}async getSession($,Z){if(!$)return null;if(!r3($))return this.config.migrateLegacySession?this.convertLegacySession($,Z,this.config.migrateLegacySession):null;let O=await this.userProvider.findSession({token:$,userAgent:Z});if(!O?.user)return null;let j=Date.now(),T=v3(O.expiresAt),z=v3(O.absoluteExpiresAt);if(T<=j||z<=j)return await this.userProvider.deleteSession({token:$}),null;let W=await this.slideSession(O,j);return W.user.extension=await this.config.extendSession(W.user),W}async convertLegacySession($,Z,O){let j=N.getStore()?.req;if(!j)return null;let T=Date.now(),z=Math.floor(T/HJ),J=null,W=await this.userProvider.findSession({token:$,userAgent:Z});if(W?.user){if(!await O(W,{token:$,req:j,userAgent:Z}))return null;let X=zO($,z),F=W.user.id;if(await this.userProvider.withLegacySessionLock($,async()=>{if(!await this.userProvider.claimLegacySession({token:$}))return!1;return await this.userProvider.createSessionV2({token:X,userId:F,userAgent:Z,...this.freshLifetime(T)}),!0}))J=X}if(!J){for(let X of AJ($,z))if((await this.userProvider.findSession({token:X,userAgent:Z}))?.user){J=X;break}}if(!J)return null;let Y=await this.getSession(J,Z);if(Y)j.ctx().setCookie("access_token",J,this.accessTokenCookieOptions(j,new Date(Y.expiresAt)));return Y}async revokeSession($,Z){if(!$)return await this.userProvider.deleteSession({token:$}),null;if(r3($)||!this.config.migrateLegacySession){let T=await this.userProvider.findSession({token:$,userAgent:Z});return await this.userProvider.deleteSession({token:$}),T}let O=Math.floor(Date.now()/HJ),j=AJ($,O);return this.userProvider.withLegacySessionLock($,async()=>{let T=await this.userProvider.findSession({token:$,userAgent:Z});for(let z of j){if(T?.user)break;T=await this.userProvider.findSession({token:z,userAgent:Z})}await this.userProvider.deleteSession({token:$});for(let z of j)await this.userProvider.deleteSession({token:z});return T})}requestCarryingCookie($){let Z=N.getStore()?.req;return Z?.cookies.get("access_token")===$?Z:null}async slideSession($,Z){let O=this.config.sessionExpiresInHours*3600000;if(new Date($.expiresAt).getTime()-Z>=O/2)return $;let j=new Date(Math.min(Z+O,new Date($.absoluteExpiresAt).getTime())),T=await this.userProvider.updateSession({token:$.token,expiresAt:j}),z=this.requestCarryingCookie($.token);if(z)z.ctx().setCookie("access_token",$.token,this.accessTokenCookieOptions(z,j));if(!T)return $;return{...$,expiresAt:T.expiresAt??j}}freshLifetime($){return{expiresAt:new Date($+this.config.sessionExpiresInHours*3600000),absoluteExpiresAt:new Date($+this.config.sessionAbsoluteExpiresInHours*3600000)}}async generateMagicLink($){}async upsertSession($){await this.userProvider.findSession({token:"",userAgent:""})}async authenticate($){try{let Z=await this.userProvider.findUserByEmailAddress($,!1);if(!Z)throw Error(`User not found with email: ${$}`);let O=await this.createOrUpdateSession({email:$,id:Z.id}),j=new _;if(j.ctx().setCookie("access_token",O.token,this.accessTokenCookieOptions(j,O.expiresAt)),O?.user)O.user.extension=await this.config.extendSession(O.user);return O}catch(Z){console.log(Z)}}async createOrUpdateSessionV2($){let Z=await this.createOrUpdateSession($),O=null;if(Z?.user)O=await this.config.extendSession(Z.user),Z.user.extension=O;return Z}async createOrUpdateSession($){let Z=new _,O=$.id??(await this.userProvider.findUserByEmailAddress($.email,!1))?.id;if(!O)throw new p1;let j=Bun.env.NODE_ENV==="development"?"local":Z.headers.get("User-Agent"),T=j8(O),z=await this.userProvider.createSessionV2({token:T,userId:O,userAgent:j,...this.freshLifetime(Date.now())}),J=await this.userProvider.findSession({token:T,userAgent:j??""});return J?.user?J:z}async createMagicLinkToken($){let Z=await this.userProvider.findUserByEmailAddress($,!1);if(Z){let{pin:O,token:j}=await this.issueOneTimeCode($,6);return{user:Z,email:$,pin:O,token:j}}return{}}async issueOneTimeCode($,Z){await this.userProvider.deleteMagicLinkToken($);let O=await this.config.generateMagicLinkToken($),j=await this.config.generateCode($),T=typeof j==="string"&&j!==""?j:F8(Z);return await this.userProvider.createMagicLinkToken({email:$,token:JO("link",$,O),pin:JO("pin",$,T)}),{email:$,pin:T,token:O}}async verifyOneTimeCode($,Z,O={}){let{expiresInMinutes:j,maxAttempts:T}=this.config.emailCode,z=await this.userProvider.findMagicLinkTokenByEmail($);if(!z)return XZ("pin",$,null,Z),{status:"invalid"};let J=v3(z.createdAt);if(J+j*60000<=Date.now())return XZ("pin",$,null,Z),{status:"expired"};if(!await G8(z.id,J,T,j))return await this.userProvider.claimMagicLinkToken(z.id),{status:"too_many_attempts"};if(!XZ("pin",$,z.pin,Z))return{status:"invalid"};if(O.claim!==!1&&!await this.userProvider.claimMagicLinkToken(z.id))return{status:"invalid"};return{status:"ok",row:z}}async verifyMagicLinkToken($,Z){let O=await this.userProvider.findMagicLinkTokenByEmail($),j=XZ("link",$,O?.token,Z);if(!O||!j)return!1;if(v3(O.createdAt)+this.config.emailCode.linkExpiresInMinutes*60000<=Date.now())return!1;return await this.userProvider.claimMagicLinkToken(O.id)}}class z$ extends v0{static getFacadeAccessor(){return H}static async user(){let $=N.getStore(),Z=$?.user;if(!Z){if(Z=await jO(this.getFacadeRoot(),$?.req),Z)$?.setUser(Z)}if(Z)return Z;throw new p1({redirectTo:OO($?.req,this.getFacadeRoot().config.signInPath)})}static intendedUrl($){let Z=N.getStore()?.req;return JZ(Z?.search.get(Q$),$??this.getFacadeRoot().config.redirectPath)}static async guard($){let Z=await z$.user();if(!await $(Z))throw new a3}static async guardSafe($){let Z=await z$.user();try{return await $(Z)}catch(O){return!1}}static async authenticate($){return await this.getFacadeRoot().authenticate($)}static async createMagicLink($){return await this.getFacadeRoot().createMagicLinkToken($)}}class R3{static ensure($,Z={}){let O=N.getStore();if(O.req.kind==="api")throw Error("Query.prefetch() cannot be called from an API request");return O.serverQueries??=new a$(iZ(O.req.rawRequest)),O.serverQueries.ensure($,Z,"prefetch")}static async instant($,...Z){let O=R3.ensure($,Z[0]);if(await O.promise,O.status==="rejected")throw O.error;return O.data}static prefetch($,...Z){R3.ensure($,Z[0])}static noPrefetch(){let $=N.getStore();if($.req.kind==="api")throw Error("Query.noPrefetch() cannot be called from an API request");$.serverQueries??=new a$(iZ($.req.rawRequest)),$.serverQueries.muteDiscoveryHints()}}function vJ($,Z,O="/"){let j=new URL($.origin),T=Z.host?Z.host:Z.subdomain?`${Z.subdomain}.${$.root}`:$.root,z=new URL(O.startsWith("/")?O:`/${O}`,j),J=jF(T);if(!J)throw Error(`"${T}" is not a hostname, so there is no URL for it. Give a bare host, optionally with a port \u2014 no scheme, path or credentials.`);if(z.hostname=J.hostname,J.port)z.port=J.port;return z.toString()}function jF($){try{let Z=new URL(`http://${$.trim()}`);return Z.host===$.trim().toLowerCase()&&Z.pathname==="/"?{hostname:Z.hostname,port:Z.port}:null}catch{return null}}class RJ{static absolute($,...Z){return`${process.env.HOST_NAME}${T0(String($),Z[0]??{})}`}static relative($,...Z){return T0(String($),Z[0]??{})}static forDomain($,Z,...O){let j=C(s0).resolver;if(!j)throw Error("`Url.forDomain` needs `route.domains` to be configured.");let T=N.getStore()?.req?.rawRequest,z=T?j.publicOrigin(T):process.env.HOST_NAME;if(!z)throw Error("`Url.forDomain` outside a request needs `HOST_NAME` for the protocol.");return vJ({root:j.root,origin:z},$,T0(String(Z),O[0]??{}))}}class wJ{name="Meta";static description($){N.getStore().metadata.description($)}static title($){N.getStore().metadata.title($)}static openGraph($){N.getStore().metadata.openGraph($)}}var TF={set($,Z,O){N.getStore().setCookie($,Z,O)},setIfAbsent($,Z,O){if(N.getStore().req.cookies.has($))return!1;return N.getStore().setCookie($,Z,O),!0},delete($,Z){N.getStore().deleteCookie($,Z)}};class Q1 extends v0{static getFacadeAccessor(){return qJ}static get client(){return this.getFacadeRoot().client}static get($){return Q1.client.get($)}static set($,Z){return Q1.client.set($,Z)}static del(...$){return Q1.client.del(...$)}static exists($){return Q1.client.exists($)}static incr($){return Q1.client.incr($)}static expire($,Z){return Q1.client.expire($,Z)}static ttl($){return Q1.client.ttl($)}}class kJ extends v0{static getFacadeAccessor(){return a0}static consume($,Z={}){return this.getFacadeRoot().consume($,Z)}}class gJ extends v0{static getFacadeAccessor(){return n$}static enabled($){return this.getFacadeRoot().enabled($)}static all(){return this.getFacadeRoot().forClient()}static explain($){return this.getFacadeRoot().explain($)}static for($){return this.getFacadeRoot().for($)}static list(){return this.getFacadeRoot().list()}static set($,Z,O){return this.getFacadeRoot().set($,Z,O)}static refresh(){return this.getFacadeRoot().refresh()}static invalidate(){return this.getFacadeRoot().invalidate()}}class w3{bound;constructor($){this.bound=$}get name(){return this.bound??UZ()}get sql(){return this.connection().sql}get dialect(){return this.connection().dialect}async query($){return await this.run($,"query")}async execute($){let Z=await this.run($,"execute");return Number(Z?.count??0)}async transaction($){let Z=this.name,O=this.connection(Z);return pJ(O.sql,(j)=>yJ(Z,()=>$(j)),{slowTransactionThreshold:O.config.slowTransactionThreshold,connection:Z})}async schema(){let $=this.connection(),{introspect:Z}=await import("./chunk-yafxbmy3.js");return Z(this.handle()??$.sql,$.dialect)}run($,Z){let O=this.connection(),{text:j,values:T}=cJ($,hJ(O.dialect),Z);return(this.handle()??O.sql).unsafe(j,T)}handle(){let $=DZ();if($===void 0)return;return UZ()===this.name?$:void 0}connection($=this.name){return mJ($),C(GZ).connection($)}}var ZZ=new w3;class lJ extends v0{static getFacadeAccessor(){return GZ}static connection($){return new w3($)}static get sql(){return ZZ.sql}static get dialect(){return ZZ.dialect}static query($){return ZZ.query($)}static execute($){return ZZ.execute($)}static transaction($){return ZZ.transaction($)}static schema(){return ZZ.schema()}static close(){return this.getFacadeRoot().close()}}export{J1 as hc,TZ as ic,m3 as jc,N0 as kc,c3 as lc,k4 as mc,ZO as nc,zZ as oc,d3 as pc,f1 as qc,R0 as rc,jW as sc,TW as tc,o3 as uc,r3 as vc,j8 as wc,a0 as xc,YZ as yc,o4 as zc,C$ as Ac,T8 as Bc,z8 as Cc,e3 as Dc,$j as Ec,JO as Fc,XZ as Gc,YU as Hc,B8 as Ic,fW as Jc,Jj as Kc,z$ as Lc,s$ as Mc,R3 as Nc,RJ as Oc,wJ as Pc,TF as Qc,Q1 as Rc,kJ as Sc,JJ as Tc,U4 as Uc,WJ as Vc,YJ as Wc,NX as Xc,XJ as Yc,G4 as Zc,PX as _c,EX as $c,B4 as ad,FJ as bd,DJ as cd,n$ as dd,gJ as ed,w3 as fd,lJ as gd,p6 as hd,h6 as id,oU as jd,S7 as kd,N7 as ld,lZ as md,FG as nd,x7 as od,P7 as pd,F4 as qd,o$ as rd,K4 as sd,L4 as td,dX as ud,f4 as vd,sX as wd,nZ as xd,M4 as yd,LJ as zd,IJ as Ad,H3 as Bd,s0 as Cd,H as Dd,d4 as Ed,i4 as Fd,u4 as Gd,e4 as Hd,$8 as Id,Z8 as Jd};
|
|
16
16
|
|
|
17
|
-
//# debugId=
|
|
17
|
+
//# debugId=6848F7287B0DE31764756E2164756E21
|