workers-sentinel 0.1.0
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/LICENSE +21 -0
- package/README.md +341 -0
- package/dist/README.md +1 -0
- package/dist/dashboard/assets/EventDetail-DgqYLyiF.js +1 -0
- package/dist/dashboard/assets/IssueDetail-CjG-J6cD.js +1 -0
- package/dist/dashboard/assets/Issues-Cfnqb_a0.js +33 -0
- package/dist/dashboard/assets/Layout-Edli6x7p.js +1 -0
- package/dist/dashboard/assets/Login-DHYJjZXJ.js +1 -0
- package/dist/dashboard/assets/ProjectCreate-D5GeKxHe.js +33 -0
- package/dist/dashboard/assets/ProjectSettings-6OwGPcir.js +1 -0
- package/dist/dashboard/assets/Projects-Bth0OyBs.js +1 -0
- package/dist/dashboard/assets/Register-C3zVYtDV.js +1 -0
- package/dist/dashboard/assets/index-7dRN2NZv.js +30 -0
- package/dist/dashboard/assets/index-JMAa_1Q2.css +1 -0
- package/dist/dashboard/assets/projects-BUj8O17i.js +1 -0
- package/dist/dashboard/index.html +14 -0
- package/dist/durable-objects/auth-state.d.ts +28 -0
- package/dist/durable-objects/auth-state.d.ts.map +1 -0
- package/dist/durable-objects/project-state.d.ts +23 -0
- package/dist/durable-objects/project-state.d.ts.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4774 -0
- package/dist/index.js.map +8 -0
- package/dist/lib/envelope-parser.d.ts +38 -0
- package/dist/lib/envelope-parser.d.ts.map +1 -0
- package/dist/lib/fingerprint.d.ts +23 -0
- package/dist/lib/fingerprint.d.ts.map +1 -0
- package/dist/middleware/auth.d.ts +10 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/routes/auth.d.ts +6 -0
- package/dist/routes/auth.d.ts.map +1 -0
- package/dist/routes/events.d.ts +11 -0
- package/dist/routes/events.d.ts.map +1 -0
- package/dist/routes/ingestion.d.ts +6 -0
- package/dist/routes/ingestion.d.ts.map +1 -0
- package/dist/routes/issues.d.ts +11 -0
- package/dist/routes/issues.d.ts.map +1 -0
- package/dist/routes/projects.d.ts +11 -0
- package/dist/routes/projects.d.ts.map +1 -0
- package/dist/rpc.d.ts +59 -0
- package/dist/rpc.d.ts.map +1 -0
- package/dist/types.d.ts +166 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../node_modules/.pnpm/unenv@2.0.0-rc.24/node_modules/unenv/dist/runtime/_internal/utils.mjs", "../../../node_modules/.pnpm/unenv@2.0.0-rc.24/node_modules/unenv/dist/runtime/node/internal/perf_hooks/performance.mjs", "../../../node_modules/.pnpm/@cloudflare+unenv-preset@2.10.0_unenv@2.0.0-rc.24_workerd@1.20260114.0/node_modules/@cloudflare/unenv-preset/dist/runtime/polyfill/performance.mjs", "../../../node_modules/.pnpm/unenv@2.0.0-rc.24/node_modules/unenv/dist/runtime/node/internal/process/hrtime.mjs", "../../../node_modules/.pnpm/unenv@2.0.0-rc.24/node_modules/unenv/dist/runtime/node/internal/process/process.mjs", "../../../node_modules/.pnpm/unenv@2.0.0-rc.24/node_modules/unenv/dist/runtime/node/internal/tty/read-stream.mjs", "../../../node_modules/.pnpm/unenv@2.0.0-rc.24/node_modules/unenv/dist/runtime/node/internal/tty/write-stream.mjs", "../../../node_modules/.pnpm/unenv@2.0.0-rc.24/node_modules/unenv/dist/runtime/node/internal/process/node-version.mjs", "../../../node_modules/.pnpm/@cloudflare+unenv-preset@2.10.0_unenv@2.0.0-rc.24_workerd@1.20260114.0/node_modules/@cloudflare/unenv-preset/dist/runtime/node/process.mjs", "../../../node_modules/.pnpm/wrangler@4.59.2_@cloudflare+workers-types@4.20260118.0/node_modules/wrangler/_virtual_unenv_global_polyfill-@cloudflare-unenv-preset-node-process", "../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/compose.js", "../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/request/constants.js", "../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/utils/body.js", "../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/utils/url.js", "../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/request.js", "../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/utils/html.js", "../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/context.js", "../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/router.js", "../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/utils/constants.js", "../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/hono-base.js", "../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/router/reg-exp-router/matcher.js", "../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/router/reg-exp-router/node.js", "../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/router/reg-exp-router/trie.js", "../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/router/reg-exp-router/router.js", "../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/router/smart-router/router.js", "../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/router/trie-router/node.js", "../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/router/trie-router/router.js", "../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/hono.js", "../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/middleware/cors/index.js", "../../../node_modules/.pnpm/hono@4.11.3/node_modules/hono/dist/helper/factory/index.js", "../src/middleware/auth.ts", "../src/routes/auth.ts", "../src/routes/events.ts", "../src/lib/envelope-parser.ts", "../src/routes/ingestion.ts", "../src/routes/issues.ts", "../src/routes/projects.ts", "../src/durable-objects/auth-state.ts", "../src/durable-objects/project-state.ts", "../src/lib/fingerprint.ts", "../src/rpc.ts", "../src/index.ts"],
|
|
4
|
+
"sourceRoot": "dist",
|
|
5
|
+
"sourcesContent": ["/* @__NO_SIDE_EFFECTS__ */\nexport function rawHeaders(headers) {\n\tconst rawHeaders = [];\n\tfor (const key in headers) {\n\t\tif (Array.isArray(headers[key])) {\n\t\t\tfor (const h of headers[key]) {\n\t\t\t\trawHeaders.push(key, h);\n\t\t\t}\n\t\t} else {\n\t\t\trawHeaders.push(key, headers[key]);\n\t\t}\n\t}\n\treturn rawHeaders;\n}\n/* @__NO_SIDE_EFFECTS__ */\nexport function mergeFns(...functions) {\n\treturn function(...args) {\n\t\tfor (const fn of functions) {\n\t\t\tfn(...args);\n\t\t}\n\t};\n}\n/* @__NO_SIDE_EFFECTS__ */\nexport function createNotImplementedError(name) {\n\treturn new Error(`[unenv] ${name} is not implemented yet!`);\n}\n/* @__NO_SIDE_EFFECTS__ */\nexport function notImplemented(name) {\n\tconst fn = () => {\n\t\tthrow createNotImplementedError(name);\n\t};\n\treturn Object.assign(fn, { __unenv__: true });\n}\n/* @__NO_SIDE_EFFECTS__ */\nexport function notImplementedAsync(name) {\n\tconst fn = notImplemented(name);\n\tfn.__promisify__ = () => notImplemented(name + \".__promisify__\");\n\tfn.native = fn;\n\treturn fn;\n}\n/* @__NO_SIDE_EFFECTS__ */\nexport function notImplementedClass(name) {\n\treturn class {\n\t\t__unenv__ = true;\n\t\tconstructor() {\n\t\t\tthrow new Error(`[unenv] ${name} is not implemented yet!`);\n\t\t}\n\t};\n}\n", "import { createNotImplementedError } from \"../../../_internal/utils.mjs\";\nconst _timeOrigin = globalThis.performance?.timeOrigin ?? Date.now();\nconst _performanceNow = globalThis.performance?.now ? globalThis.performance.now.bind(globalThis.performance) : () => Date.now() - _timeOrigin;\nconst nodeTiming = {\n\tname: \"node\",\n\tentryType: \"node\",\n\tstartTime: 0,\n\tduration: 0,\n\tnodeStart: 0,\n\tv8Start: 0,\n\tbootstrapComplete: 0,\n\tenvironment: 0,\n\tloopStart: 0,\n\tloopExit: 0,\n\tidleTime: 0,\n\tuvMetricsInfo: {\n\t\tloopCount: 0,\n\t\tevents: 0,\n\t\teventsWaiting: 0\n\t},\n\tdetail: undefined,\n\ttoJSON() {\n\t\treturn this;\n\t}\n};\n// PerformanceEntry\nexport class PerformanceEntry {\n\t__unenv__ = true;\n\tdetail;\n\tentryType = \"event\";\n\tname;\n\tstartTime;\n\tconstructor(name, options) {\n\t\tthis.name = name;\n\t\tthis.startTime = options?.startTime || _performanceNow();\n\t\tthis.detail = options?.detail;\n\t}\n\tget duration() {\n\t\treturn _performanceNow() - this.startTime;\n\t}\n\ttoJSON() {\n\t\treturn {\n\t\t\tname: this.name,\n\t\t\tentryType: this.entryType,\n\t\t\tstartTime: this.startTime,\n\t\t\tduration: this.duration,\n\t\t\tdetail: this.detail\n\t\t};\n\t}\n}\n// PerformanceMark\nexport const PerformanceMark = class PerformanceMark extends PerformanceEntry {\n\tentryType = \"mark\";\n\tconstructor() {\n\t\t// @ts-ignore\n\t\tsuper(...arguments);\n\t}\n\tget duration() {\n\t\treturn 0;\n\t}\n};\n// PerformanceMark\nexport class PerformanceMeasure extends PerformanceEntry {\n\tentryType = \"measure\";\n}\n// PerformanceResourceTiming\nexport class PerformanceResourceTiming extends PerformanceEntry {\n\tentryType = \"resource\";\n\tserverTiming = [];\n\tconnectEnd = 0;\n\tconnectStart = 0;\n\tdecodedBodySize = 0;\n\tdomainLookupEnd = 0;\n\tdomainLookupStart = 0;\n\tencodedBodySize = 0;\n\tfetchStart = 0;\n\tinitiatorType = \"\";\n\tname = \"\";\n\tnextHopProtocol = \"\";\n\tredirectEnd = 0;\n\tredirectStart = 0;\n\trequestStart = 0;\n\tresponseEnd = 0;\n\tresponseStart = 0;\n\tsecureConnectionStart = 0;\n\tstartTime = 0;\n\ttransferSize = 0;\n\tworkerStart = 0;\n\tresponseStatus = 0;\n}\n// PerformanceObserverEntryList\nexport class PerformanceObserverEntryList {\n\t__unenv__ = true;\n\tgetEntries() {\n\t\treturn [];\n\t}\n\tgetEntriesByName(_name, _type) {\n\t\treturn [];\n\t}\n\tgetEntriesByType(type) {\n\t\treturn [];\n\t}\n}\n// Performance\nexport class Performance {\n\t__unenv__ = true;\n\ttimeOrigin = _timeOrigin;\n\teventCounts = new Map();\n\t_entries = [];\n\t_resourceTimingBufferSize = 0;\n\tnavigation = undefined;\n\ttiming = undefined;\n\ttimerify(_fn, _options) {\n\t\tthrow createNotImplementedError(\"Performance.timerify\");\n\t}\n\tget nodeTiming() {\n\t\treturn nodeTiming;\n\t}\n\teventLoopUtilization() {\n\t\treturn {};\n\t}\n\tmarkResourceTiming() {\n\t\t// TODO: create a new PerformanceResourceTiming entry\n\t\t// so that performance.getEntries, getEntriesByName, and getEntriesByType return it\n\t\t// see: https://nodejs.org/api/perf_hooks.html#performancemarkresourcetimingtiminginfo-requestedurl-initiatortype-global-cachemode-bodyinfo-responsestatus-deliverytype\n\t\treturn new PerformanceResourceTiming(\"\");\n\t}\n\tonresourcetimingbufferfull = null;\n\tnow() {\n\t\t// https://developer.mozilla.org/en-US/docs/Web/API/Performance/now\n\t\tif (this.timeOrigin === _timeOrigin) {\n\t\t\treturn _performanceNow();\n\t\t}\n\t\treturn Date.now() - this.timeOrigin;\n\t}\n\tclearMarks(markName) {\n\t\tthis._entries = markName ? this._entries.filter((e) => e.name !== markName) : this._entries.filter((e) => e.entryType !== \"mark\");\n\t}\n\tclearMeasures(measureName) {\n\t\tthis._entries = measureName ? this._entries.filter((e) => e.name !== measureName) : this._entries.filter((e) => e.entryType !== \"measure\");\n\t}\n\tclearResourceTimings() {\n\t\tthis._entries = this._entries.filter((e) => e.entryType !== \"resource\" || e.entryType !== \"navigation\");\n\t}\n\tgetEntries() {\n\t\treturn this._entries;\n\t}\n\tgetEntriesByName(name, type) {\n\t\treturn this._entries.filter((e) => e.name === name && (!type || e.entryType === type));\n\t}\n\tgetEntriesByType(type) {\n\t\treturn this._entries.filter((e) => e.entryType === type);\n\t}\n\tmark(name, options) {\n\t\t// @ts-expect-error constructor is not protected\n\t\tconst entry = new PerformanceMark(name, options);\n\t\tthis._entries.push(entry);\n\t\treturn entry;\n\t}\n\tmeasure(measureName, startOrMeasureOptions, endMark) {\n\t\tlet start;\n\t\tlet end;\n\t\tif (typeof startOrMeasureOptions === \"string\") {\n\t\t\tstart = this.getEntriesByName(startOrMeasureOptions, \"mark\")[0]?.startTime;\n\t\t\tend = this.getEntriesByName(endMark, \"mark\")[0]?.startTime;\n\t\t} else {\n\t\t\tstart = Number.parseFloat(startOrMeasureOptions?.start) || this.now();\n\t\t\tend = Number.parseFloat(startOrMeasureOptions?.end) || this.now();\n\t\t}\n\t\tconst entry = new PerformanceMeasure(measureName, {\n\t\t\tstartTime: start,\n\t\t\tdetail: {\n\t\t\t\tstart,\n\t\t\t\tend\n\t\t\t}\n\t\t});\n\t\tthis._entries.push(entry);\n\t\treturn entry;\n\t}\n\tsetResourceTimingBufferSize(maxSize) {\n\t\tthis._resourceTimingBufferSize = maxSize;\n\t}\n\taddEventListener(type, listener, options) {\n\t\tthrow createNotImplementedError(\"Performance.addEventListener\");\n\t}\n\tremoveEventListener(type, listener, options) {\n\t\tthrow createNotImplementedError(\"Performance.removeEventListener\");\n\t}\n\tdispatchEvent(event) {\n\t\tthrow createNotImplementedError(\"Performance.dispatchEvent\");\n\t}\n\ttoJSON() {\n\t\treturn this;\n\t}\n}\n// PerformanceObserver\nexport class PerformanceObserver {\n\t__unenv__ = true;\n\tstatic supportedEntryTypes = [];\n\t_callback = null;\n\tconstructor(callback) {\n\t\tthis._callback = callback;\n\t}\n\ttakeRecords() {\n\t\treturn [];\n\t}\n\tdisconnect() {\n\t\tthrow createNotImplementedError(\"PerformanceObserver.disconnect\");\n\t}\n\tobserve(options) {\n\t\tthrow createNotImplementedError(\"PerformanceObserver.observe\");\n\t}\n\tbind(fn) {\n\t\treturn fn;\n\t}\n\trunInAsyncScope(fn, thisArg, ...args) {\n\t\treturn fn.call(thisArg, ...args);\n\t}\n\tasyncId() {\n\t\treturn 0;\n\t}\n\ttriggerAsyncId() {\n\t\treturn 0;\n\t}\n\temitDestroy() {\n\t\treturn this;\n\t}\n}\n// workerd implements a subset of globalThis.performance (as of last check, only timeOrigin set to 0 + now() implemented)\n// We already use performance.now() from globalThis.performance, if provided (see top of this file)\n// If we detect this condition, we can just use polyfill instead.\nexport const performance = globalThis.performance && \"addEventListener\" in globalThis.performance ? globalThis.performance : new Performance();\n", "import {\n performance,\n Performance,\n PerformanceEntry,\n PerformanceMark,\n PerformanceMeasure,\n PerformanceObserver,\n PerformanceObserverEntryList,\n PerformanceResourceTiming\n} from \"node:perf_hooks\";\nglobalThis.performance = performance;\nglobalThis.Performance = Performance;\nglobalThis.PerformanceEntry = PerformanceEntry;\nglobalThis.PerformanceMark = PerformanceMark;\nglobalThis.PerformanceMeasure = PerformanceMeasure;\nglobalThis.PerformanceObserver = PerformanceObserver;\nglobalThis.PerformanceObserverEntryList = PerformanceObserverEntryList;\nglobalThis.PerformanceResourceTiming = PerformanceResourceTiming;\n", "// https://nodejs.org/api/process.html#processhrtime\nexport const hrtime = /* @__PURE__ */ Object.assign(function hrtime(startTime) {\n\tconst now = Date.now();\n\t// millis to seconds\n\tconst seconds = Math.trunc(now / 1e3);\n\t// convert millis to nanos\n\tconst nanos = now % 1e3 * 1e6;\n\tif (startTime) {\n\t\tlet diffSeconds = seconds - startTime[0];\n\t\tlet diffNanos = nanos - startTime[0];\n\t\tif (diffNanos < 0) {\n\t\t\tdiffSeconds = diffSeconds - 1;\n\t\t\tdiffNanos = 1e9 + diffNanos;\n\t\t}\n\t\treturn [diffSeconds, diffNanos];\n\t}\n\treturn [seconds, nanos];\n}, { bigint: function bigint() {\n\t// Convert milliseconds to nanoseconds\n\treturn BigInt(Date.now() * 1e6);\n} });\n", "import { EventEmitter } from \"node:events\";\nimport { ReadStream, WriteStream } from \"node:tty\";\nimport { notImplemented, createNotImplementedError } from \"../../../_internal/utils.mjs\";\n// node-version.ts is generated at build time\nimport { NODE_VERSION } from \"./node-version.mjs\";\nexport class Process extends EventEmitter {\n\tenv;\n\thrtime;\n\tnextTick;\n\tconstructor(impl) {\n\t\tsuper();\n\t\tthis.env = impl.env;\n\t\tthis.hrtime = impl.hrtime;\n\t\tthis.nextTick = impl.nextTick;\n\t\tfor (const prop of [...Object.getOwnPropertyNames(Process.prototype), ...Object.getOwnPropertyNames(EventEmitter.prototype)]) {\n\t\t\tconst value = this[prop];\n\t\t\tif (typeof value === \"function\") {\n\t\t\t\tthis[prop] = value.bind(this);\n\t\t\t}\n\t\t}\n\t}\n\t// --- event emitter ---\n\temitWarning(warning, type, code) {\n\t\tconsole.warn(`${code ? `[${code}] ` : \"\"}${type ? `${type}: ` : \"\"}${warning}`);\n\t}\n\temit(...args) {\n\t\t// @ts-ignore\n\t\treturn super.emit(...args);\n\t}\n\tlisteners(eventName) {\n\t\treturn super.listeners(eventName);\n\t}\n\t// --- stdio (lazy initializers) ---\n\t#stdin;\n\t#stdout;\n\t#stderr;\n\tget stdin() {\n\t\treturn this.#stdin ??= new ReadStream(0);\n\t}\n\tget stdout() {\n\t\treturn this.#stdout ??= new WriteStream(1);\n\t}\n\tget stderr() {\n\t\treturn this.#stderr ??= new WriteStream(2);\n\t}\n\t// --- cwd ---\n\t#cwd = \"/\";\n\tchdir(cwd) {\n\t\tthis.#cwd = cwd;\n\t}\n\tcwd() {\n\t\treturn this.#cwd;\n\t}\n\t// --- dummy props and getters ---\n\tarch = \"\";\n\tplatform = \"\";\n\targv = [];\n\targv0 = \"\";\n\texecArgv = [];\n\texecPath = \"\";\n\ttitle = \"\";\n\tpid = 200;\n\tppid = 100;\n\tget version() {\n\t\treturn `v${NODE_VERSION}`;\n\t}\n\tget versions() {\n\t\treturn { node: NODE_VERSION };\n\t}\n\tget allowedNodeEnvironmentFlags() {\n\t\treturn new Set();\n\t}\n\tget sourceMapsEnabled() {\n\t\treturn false;\n\t}\n\tget debugPort() {\n\t\treturn 0;\n\t}\n\tget throwDeprecation() {\n\t\treturn false;\n\t}\n\tget traceDeprecation() {\n\t\treturn false;\n\t}\n\tget features() {\n\t\treturn {};\n\t}\n\tget release() {\n\t\treturn {};\n\t}\n\tget connected() {\n\t\treturn false;\n\t}\n\tget config() {\n\t\treturn {};\n\t}\n\tget moduleLoadList() {\n\t\treturn [];\n\t}\n\tconstrainedMemory() {\n\t\treturn 0;\n\t}\n\tavailableMemory() {\n\t\treturn 0;\n\t}\n\tuptime() {\n\t\treturn 0;\n\t}\n\tresourceUsage() {\n\t\treturn {};\n\t}\n\t// --- noop methods ---\n\tref() {\n\t\t// noop\n\t}\n\tunref() {\n\t\t// noop\n\t}\n\t// --- unimplemented methods ---\n\tumask() {\n\t\tthrow createNotImplementedError(\"process.umask\");\n\t}\n\tgetBuiltinModule() {\n\t\treturn undefined;\n\t}\n\tgetActiveResourcesInfo() {\n\t\tthrow createNotImplementedError(\"process.getActiveResourcesInfo\");\n\t}\n\texit() {\n\t\tthrow createNotImplementedError(\"process.exit\");\n\t}\n\treallyExit() {\n\t\tthrow createNotImplementedError(\"process.reallyExit\");\n\t}\n\tkill() {\n\t\tthrow createNotImplementedError(\"process.kill\");\n\t}\n\tabort() {\n\t\tthrow createNotImplementedError(\"process.abort\");\n\t}\n\tdlopen() {\n\t\tthrow createNotImplementedError(\"process.dlopen\");\n\t}\n\tsetSourceMapsEnabled() {\n\t\tthrow createNotImplementedError(\"process.setSourceMapsEnabled\");\n\t}\n\tloadEnvFile() {\n\t\tthrow createNotImplementedError(\"process.loadEnvFile\");\n\t}\n\tdisconnect() {\n\t\tthrow createNotImplementedError(\"process.disconnect\");\n\t}\n\tcpuUsage() {\n\t\tthrow createNotImplementedError(\"process.cpuUsage\");\n\t}\n\tsetUncaughtExceptionCaptureCallback() {\n\t\tthrow createNotImplementedError(\"process.setUncaughtExceptionCaptureCallback\");\n\t}\n\thasUncaughtExceptionCaptureCallback() {\n\t\tthrow createNotImplementedError(\"process.hasUncaughtExceptionCaptureCallback\");\n\t}\n\tinitgroups() {\n\t\tthrow createNotImplementedError(\"process.initgroups\");\n\t}\n\topenStdin() {\n\t\tthrow createNotImplementedError(\"process.openStdin\");\n\t}\n\tassert() {\n\t\tthrow createNotImplementedError(\"process.assert\");\n\t}\n\tbinding() {\n\t\tthrow createNotImplementedError(\"process.binding\");\n\t}\n\t// --- attached interfaces ---\n\tpermission = { has: /* @__PURE__ */ notImplemented(\"process.permission.has\") };\n\treport = {\n\t\tdirectory: \"\",\n\t\tfilename: \"\",\n\t\tsignal: \"SIGUSR2\",\n\t\tcompact: false,\n\t\treportOnFatalError: false,\n\t\treportOnSignal: false,\n\t\treportOnUncaughtException: false,\n\t\tgetReport: /* @__PURE__ */ notImplemented(\"process.report.getReport\"),\n\t\twriteReport: /* @__PURE__ */ notImplemented(\"process.report.writeReport\")\n\t};\n\tfinalization = {\n\t\tregister: /* @__PURE__ */ notImplemented(\"process.finalization.register\"),\n\t\tunregister: /* @__PURE__ */ notImplemented(\"process.finalization.unregister\"),\n\t\tregisterBeforeExit: /* @__PURE__ */ notImplemented(\"process.finalization.registerBeforeExit\")\n\t};\n\tmemoryUsage = Object.assign(() => ({\n\t\tarrayBuffers: 0,\n\t\trss: 0,\n\t\texternal: 0,\n\t\theapTotal: 0,\n\t\theapUsed: 0\n\t}), { rss: () => 0 });\n\t// --- undefined props ---\n\tmainModule = undefined;\n\tdomain = undefined;\n\t// optional\n\tsend = undefined;\n\texitCode = undefined;\n\tchannel = undefined;\n\tgetegid = undefined;\n\tgeteuid = undefined;\n\tgetgid = undefined;\n\tgetgroups = undefined;\n\tgetuid = undefined;\n\tsetegid = undefined;\n\tseteuid = undefined;\n\tsetgid = undefined;\n\tsetgroups = undefined;\n\tsetuid = undefined;\n\t// internals\n\t_events = undefined;\n\t_eventsCount = undefined;\n\t_exiting = undefined;\n\t_maxListeners = undefined;\n\t_debugEnd = undefined;\n\t_debugProcess = undefined;\n\t_fatalException = undefined;\n\t_getActiveHandles = undefined;\n\t_getActiveRequests = undefined;\n\t_kill = undefined;\n\t_preload_modules = undefined;\n\t_rawDebug = undefined;\n\t_startProfilerIdleNotifier = undefined;\n\t_stopProfilerIdleNotifier = undefined;\n\t_tickCallback = undefined;\n\t_disconnect = undefined;\n\t_handleQueue = undefined;\n\t_pendingMessage = undefined;\n\t_channel = undefined;\n\t_send = undefined;\n\t_linkedBinding = undefined;\n}\n", "export class ReadStream {\n\tfd;\n\tisRaw = false;\n\tisTTY = false;\n\tconstructor(fd) {\n\t\tthis.fd = fd;\n\t}\n\tsetRawMode(mode) {\n\t\tthis.isRaw = mode;\n\t\treturn this;\n\t}\n}\n", "export class WriteStream {\n\tfd;\n\tcolumns = 80;\n\trows = 24;\n\tisTTY = false;\n\tconstructor(fd) {\n\t\tthis.fd = fd;\n\t}\n\tclearLine(dir, callback) {\n\t\tcallback && callback();\n\t\treturn false;\n\t}\n\tclearScreenDown(callback) {\n\t\tcallback && callback();\n\t\treturn false;\n\t}\n\tcursorTo(x, y, callback) {\n\t\tcallback && typeof callback === \"function\" && callback();\n\t\treturn false;\n\t}\n\tmoveCursor(dx, dy, callback) {\n\t\tcallback && callback();\n\t\treturn false;\n\t}\n\tgetColorDepth(env) {\n\t\treturn 1;\n\t}\n\thasColors(count, env) {\n\t\treturn false;\n\t}\n\tgetWindowSize() {\n\t\treturn [this.columns, this.rows];\n\t}\n\twrite(str, encoding, cb) {\n\t\tif (str instanceof Uint8Array) {\n\t\t\tstr = new TextDecoder().decode(str);\n\t\t}\n\t\ttry {\n\t\t\tconsole.log(str);\n\t\t} catch {}\n\t\tcb && typeof cb === \"function\" && cb();\n\t\treturn false;\n\t}\n}\n", "// Extracted from .nvmrc\nexport const NODE_VERSION = \"22.14.0\";\n", "import { hrtime as UnenvHrTime } from \"unenv/node/internal/process/hrtime\";\nimport { Process as UnenvProcess } from \"unenv/node/internal/process/process\";\nconst globalProcess = globalThis[\"process\"];\nexport const getBuiltinModule = globalProcess.getBuiltinModule;\nconst workerdProcess = getBuiltinModule(\"node:process\");\nconst isWorkerdProcessV2 = globalThis.Cloudflare.compatibilityFlags.enable_nodejs_process_v2;\nconst unenvProcess = new UnenvProcess({\n env: globalProcess.env,\n // `hrtime` is only available from workerd process v2\n hrtime: isWorkerdProcessV2 ? workerdProcess.hrtime : UnenvHrTime,\n // `nextTick` is available from workerd process v1\n nextTick: workerdProcess.nextTick\n});\nexport const { exit, features, platform } = workerdProcess;\nexport const {\n // Always implemented by workerd\n env,\n // Only implemented in workerd v2\n hrtime,\n // Always implemented by workerd\n nextTick\n} = unenvProcess;\nexport const {\n _channel,\n _disconnect,\n _events,\n _eventsCount,\n _handleQueue,\n _maxListeners,\n _pendingMessage,\n _send,\n assert,\n disconnect,\n mainModule\n} = unenvProcess;\nexport const {\n // @ts-expect-error `_debugEnd` is missing typings\n _debugEnd,\n // @ts-expect-error `_debugProcess` is missing typings\n _debugProcess,\n // @ts-expect-error `_exiting` is missing typings\n _exiting,\n // @ts-expect-error `_fatalException` is missing typings\n _fatalException,\n // @ts-expect-error `_getActiveHandles` is missing typings\n _getActiveHandles,\n // @ts-expect-error `_getActiveRequests` is missing typings\n _getActiveRequests,\n // @ts-expect-error `_kill` is missing typings\n _kill,\n // @ts-expect-error `_linkedBinding` is missing typings\n _linkedBinding,\n // @ts-expect-error `_preload_modules` is missing typings\n _preload_modules,\n // @ts-expect-error `_rawDebug` is missing typings\n _rawDebug,\n // @ts-expect-error `_startProfilerIdleNotifier` is missing typings\n _startProfilerIdleNotifier,\n // @ts-expect-error `_stopProfilerIdleNotifier` is missing typings\n _stopProfilerIdleNotifier,\n // @ts-expect-error `_tickCallback` is missing typings\n _tickCallback,\n abort,\n addListener,\n allowedNodeEnvironmentFlags,\n arch,\n argv,\n argv0,\n availableMemory,\n // @ts-expect-error `binding` is missing typings\n binding,\n channel,\n chdir,\n config,\n connected,\n constrainedMemory,\n cpuUsage,\n cwd,\n debugPort,\n dlopen,\n // @ts-expect-error `domain` is missing typings\n domain,\n emit,\n emitWarning,\n eventNames,\n execArgv,\n execPath,\n exitCode,\n finalization,\n getActiveResourcesInfo,\n getegid,\n geteuid,\n getgid,\n getgroups,\n getMaxListeners,\n getuid,\n hasUncaughtExceptionCaptureCallback,\n // @ts-expect-error `initgroups` is missing typings\n initgroups,\n kill,\n listenerCount,\n listeners,\n loadEnvFile,\n memoryUsage,\n // @ts-expect-error `moduleLoadList` is missing typings\n moduleLoadList,\n off,\n on,\n once,\n // @ts-expect-error `openStdin` is missing typings\n openStdin,\n permission,\n pid,\n ppid,\n prependListener,\n prependOnceListener,\n rawListeners,\n // @ts-expect-error `reallyExit` is missing typings\n reallyExit,\n ref,\n release,\n removeAllListeners,\n removeListener,\n report,\n resourceUsage,\n send,\n setegid,\n seteuid,\n setgid,\n setgroups,\n setMaxListeners,\n setSourceMapsEnabled,\n setuid,\n setUncaughtExceptionCaptureCallback,\n sourceMapsEnabled,\n stderr,\n stdin,\n stdout,\n throwDeprecation,\n title,\n traceDeprecation,\n umask,\n unref,\n uptime,\n version,\n versions\n} = isWorkerdProcessV2 ? workerdProcess : unenvProcess;\nconst _process = {\n abort,\n addListener,\n allowedNodeEnvironmentFlags,\n hasUncaughtExceptionCaptureCallback,\n setUncaughtExceptionCaptureCallback,\n loadEnvFile,\n sourceMapsEnabled,\n arch,\n argv,\n argv0,\n chdir,\n config,\n connected,\n constrainedMemory,\n availableMemory,\n cpuUsage,\n cwd,\n debugPort,\n dlopen,\n disconnect,\n emit,\n emitWarning,\n env,\n eventNames,\n execArgv,\n execPath,\n exit,\n finalization,\n features,\n getBuiltinModule,\n getActiveResourcesInfo,\n getMaxListeners,\n hrtime,\n kill,\n listeners,\n listenerCount,\n memoryUsage,\n nextTick,\n on,\n off,\n once,\n pid,\n platform,\n ppid,\n prependListener,\n prependOnceListener,\n rawListeners,\n release,\n removeAllListeners,\n removeListener,\n report,\n resourceUsage,\n setMaxListeners,\n setSourceMapsEnabled,\n stderr,\n stdin,\n stdout,\n title,\n throwDeprecation,\n traceDeprecation,\n umask,\n uptime,\n version,\n versions,\n // @ts-expect-error old API\n domain,\n initgroups,\n moduleLoadList,\n reallyExit,\n openStdin,\n assert,\n binding,\n send,\n exitCode,\n channel,\n getegid,\n geteuid,\n getgid,\n getgroups,\n getuid,\n setegid,\n seteuid,\n setgid,\n setgroups,\n setuid,\n permission,\n mainModule,\n _events,\n _eventsCount,\n _exiting,\n _maxListeners,\n _debugEnd,\n _debugProcess,\n _fatalException,\n _getActiveHandles,\n _getActiveRequests,\n _kill,\n _preload_modules,\n _rawDebug,\n _startProfilerIdleNotifier,\n _stopProfilerIdleNotifier,\n _tickCallback,\n _disconnect,\n _handleQueue,\n _pendingMessage,\n _channel,\n _send,\n _linkedBinding\n};\nexport default _process;\n", "import { default as defaultExport } from \"@cloudflare/unenv-preset/node/process\";\nglobalThis.process = defaultExport;", "// src/compose.ts\nvar compose = (middleware, onError, onNotFound) => {\n return (context, next) => {\n let index = -1;\n return dispatch(0);\n async function dispatch(i) {\n if (i <= index) {\n throw new Error(\"next() called multiple times\");\n }\n index = i;\n let res;\n let isError = false;\n let handler;\n if (middleware[i]) {\n handler = middleware[i][0][0];\n context.req.routeIndex = i;\n } else {\n handler = i === middleware.length && next || void 0;\n }\n if (handler) {\n try {\n res = await handler(context, () => dispatch(i + 1));\n } catch (err) {\n if (err instanceof Error && onError) {\n context.error = err;\n res = await onError(err, context);\n isError = true;\n } else {\n throw err;\n }\n }\n } else {\n if (context.finalized === false && onNotFound) {\n res = await onNotFound(context);\n }\n }\n if (res && (context.finalized === false || isError)) {\n context.res = res;\n }\n return context;\n }\n };\n};\nexport {\n compose\n};\n", "// src/request/constants.ts\nvar GET_MATCH_RESULT = /* @__PURE__ */ Symbol();\nexport {\n GET_MATCH_RESULT\n};\n", "// src/utils/body.ts\nimport { HonoRequest } from \"../request.js\";\nvar parseBody = async (request, options = /* @__PURE__ */ Object.create(null)) => {\n const { all = false, dot = false } = options;\n const headers = request instanceof HonoRequest ? request.raw.headers : request.headers;\n const contentType = headers.get(\"Content-Type\");\n if (contentType?.startsWith(\"multipart/form-data\") || contentType?.startsWith(\"application/x-www-form-urlencoded\")) {\n return parseFormData(request, { all, dot });\n }\n return {};\n};\nasync function parseFormData(request, options) {\n const formData = await request.formData();\n if (formData) {\n return convertFormDataToBodyData(formData, options);\n }\n return {};\n}\nfunction convertFormDataToBodyData(formData, options) {\n const form = /* @__PURE__ */ Object.create(null);\n formData.forEach((value, key) => {\n const shouldParseAllValues = options.all || key.endsWith(\"[]\");\n if (!shouldParseAllValues) {\n form[key] = value;\n } else {\n handleParsingAllValues(form, key, value);\n }\n });\n if (options.dot) {\n Object.entries(form).forEach(([key, value]) => {\n const shouldParseDotValues = key.includes(\".\");\n if (shouldParseDotValues) {\n handleParsingNestedValues(form, key, value);\n delete form[key];\n }\n });\n }\n return form;\n}\nvar handleParsingAllValues = (form, key, value) => {\n if (form[key] !== void 0) {\n if (Array.isArray(form[key])) {\n ;\n form[key].push(value);\n } else {\n form[key] = [form[key], value];\n }\n } else {\n if (!key.endsWith(\"[]\")) {\n form[key] = value;\n } else {\n form[key] = [value];\n }\n }\n};\nvar handleParsingNestedValues = (form, key, value) => {\n let nestedForm = form;\n const keys = key.split(\".\");\n keys.forEach((key2, index) => {\n if (index === keys.length - 1) {\n nestedForm[key2] = value;\n } else {\n if (!nestedForm[key2] || typeof nestedForm[key2] !== \"object\" || Array.isArray(nestedForm[key2]) || nestedForm[key2] instanceof File) {\n nestedForm[key2] = /* @__PURE__ */ Object.create(null);\n }\n nestedForm = nestedForm[key2];\n }\n });\n};\nexport {\n parseBody\n};\n", "// src/utils/url.ts\nvar splitPath = (path) => {\n const paths = path.split(\"/\");\n if (paths[0] === \"\") {\n paths.shift();\n }\n return paths;\n};\nvar splitRoutingPath = (routePath) => {\n const { groups, path } = extractGroupsFromPath(routePath);\n const paths = splitPath(path);\n return replaceGroupMarks(paths, groups);\n};\nvar extractGroupsFromPath = (path) => {\n const groups = [];\n path = path.replace(/\\{[^}]+\\}/g, (match, index) => {\n const mark = `@${index}`;\n groups.push([mark, match]);\n return mark;\n });\n return { groups, path };\n};\nvar replaceGroupMarks = (paths, groups) => {\n for (let i = groups.length - 1; i >= 0; i--) {\n const [mark] = groups[i];\n for (let j = paths.length - 1; j >= 0; j--) {\n if (paths[j].includes(mark)) {\n paths[j] = paths[j].replace(mark, groups[i][1]);\n break;\n }\n }\n }\n return paths;\n};\nvar patternCache = {};\nvar getPattern = (label, next) => {\n if (label === \"*\") {\n return \"*\";\n }\n const match = label.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n if (match) {\n const cacheKey = `${label}#${next}`;\n if (!patternCache[cacheKey]) {\n if (match[2]) {\n patternCache[cacheKey] = next && next[0] !== \":\" && next[0] !== \"*\" ? [cacheKey, match[1], new RegExp(`^${match[2]}(?=/${next})`)] : [label, match[1], new RegExp(`^${match[2]}$`)];\n } else {\n patternCache[cacheKey] = [label, match[1], true];\n }\n }\n return patternCache[cacheKey];\n }\n return null;\n};\nvar tryDecode = (str, decoder) => {\n try {\n return decoder(str);\n } catch {\n return str.replace(/(?:%[0-9A-Fa-f]{2})+/g, (match) => {\n try {\n return decoder(match);\n } catch {\n return match;\n }\n });\n }\n};\nvar tryDecodeURI = (str) => tryDecode(str, decodeURI);\nvar getPath = (request) => {\n const url = request.url;\n const start = url.indexOf(\"/\", url.indexOf(\":\") + 4);\n let i = start;\n for (; i < url.length; i++) {\n const charCode = url.charCodeAt(i);\n if (charCode === 37) {\n const queryIndex = url.indexOf(\"?\", i);\n const path = url.slice(start, queryIndex === -1 ? void 0 : queryIndex);\n return tryDecodeURI(path.includes(\"%25\") ? path.replace(/%25/g, \"%2525\") : path);\n } else if (charCode === 63) {\n break;\n }\n }\n return url.slice(start, i);\n};\nvar getQueryStrings = (url) => {\n const queryIndex = url.indexOf(\"?\", 8);\n return queryIndex === -1 ? \"\" : \"?\" + url.slice(queryIndex + 1);\n};\nvar getPathNoStrict = (request) => {\n const result = getPath(request);\n return result.length > 1 && result.at(-1) === \"/\" ? result.slice(0, -1) : result;\n};\nvar mergePath = (base, sub, ...rest) => {\n if (rest.length) {\n sub = mergePath(sub, ...rest);\n }\n return `${base?.[0] === \"/\" ? \"\" : \"/\"}${base}${sub === \"/\" ? \"\" : `${base?.at(-1) === \"/\" ? \"\" : \"/\"}${sub?.[0] === \"/\" ? sub.slice(1) : sub}`}`;\n};\nvar checkOptionalParameter = (path) => {\n if (path.charCodeAt(path.length - 1) !== 63 || !path.includes(\":\")) {\n return null;\n }\n const segments = path.split(\"/\");\n const results = [];\n let basePath = \"\";\n segments.forEach((segment) => {\n if (segment !== \"\" && !/\\:/.test(segment)) {\n basePath += \"/\" + segment;\n } else if (/\\:/.test(segment)) {\n if (/\\?/.test(segment)) {\n if (results.length === 0 && basePath === \"\") {\n results.push(\"/\");\n } else {\n results.push(basePath);\n }\n const optionalSegment = segment.replace(\"?\", \"\");\n basePath += \"/\" + optionalSegment;\n results.push(basePath);\n } else {\n basePath += \"/\" + segment;\n }\n }\n });\n return results.filter((v, i, a) => a.indexOf(v) === i);\n};\nvar _decodeURI = (value) => {\n if (!/[%+]/.test(value)) {\n return value;\n }\n if (value.indexOf(\"+\") !== -1) {\n value = value.replace(/\\+/g, \" \");\n }\n return value.indexOf(\"%\") !== -1 ? tryDecode(value, decodeURIComponent_) : value;\n};\nvar _getQueryParam = (url, key, multiple) => {\n let encoded;\n if (!multiple && key && !/[%+]/.test(key)) {\n let keyIndex2 = url.indexOf(\"?\", 8);\n if (keyIndex2 === -1) {\n return void 0;\n }\n if (!url.startsWith(key, keyIndex2 + 1)) {\n keyIndex2 = url.indexOf(`&${key}`, keyIndex2 + 1);\n }\n while (keyIndex2 !== -1) {\n const trailingKeyCode = url.charCodeAt(keyIndex2 + key.length + 1);\n if (trailingKeyCode === 61) {\n const valueIndex = keyIndex2 + key.length + 2;\n const endIndex = url.indexOf(\"&\", valueIndex);\n return _decodeURI(url.slice(valueIndex, endIndex === -1 ? void 0 : endIndex));\n } else if (trailingKeyCode == 38 || isNaN(trailingKeyCode)) {\n return \"\";\n }\n keyIndex2 = url.indexOf(`&${key}`, keyIndex2 + 1);\n }\n encoded = /[%+]/.test(url);\n if (!encoded) {\n return void 0;\n }\n }\n const results = {};\n encoded ??= /[%+]/.test(url);\n let keyIndex = url.indexOf(\"?\", 8);\n while (keyIndex !== -1) {\n const nextKeyIndex = url.indexOf(\"&\", keyIndex + 1);\n let valueIndex = url.indexOf(\"=\", keyIndex);\n if (valueIndex > nextKeyIndex && nextKeyIndex !== -1) {\n valueIndex = -1;\n }\n let name = url.slice(\n keyIndex + 1,\n valueIndex === -1 ? nextKeyIndex === -1 ? void 0 : nextKeyIndex : valueIndex\n );\n if (encoded) {\n name = _decodeURI(name);\n }\n keyIndex = nextKeyIndex;\n if (name === \"\") {\n continue;\n }\n let value;\n if (valueIndex === -1) {\n value = \"\";\n } else {\n value = url.slice(valueIndex + 1, nextKeyIndex === -1 ? void 0 : nextKeyIndex);\n if (encoded) {\n value = _decodeURI(value);\n }\n }\n if (multiple) {\n if (!(results[name] && Array.isArray(results[name]))) {\n results[name] = [];\n }\n ;\n results[name].push(value);\n } else {\n results[name] ??= value;\n }\n }\n return key ? results[key] : results;\n};\nvar getQueryParam = _getQueryParam;\nvar getQueryParams = (url, key) => {\n return _getQueryParam(url, key, true);\n};\nvar decodeURIComponent_ = decodeURIComponent;\nexport {\n checkOptionalParameter,\n decodeURIComponent_,\n getPath,\n getPathNoStrict,\n getPattern,\n getQueryParam,\n getQueryParams,\n getQueryStrings,\n mergePath,\n splitPath,\n splitRoutingPath,\n tryDecode\n};\n", "// src/request.ts\nimport { HTTPException } from \"./http-exception.js\";\nimport { GET_MATCH_RESULT } from \"./request/constants.js\";\nimport { parseBody } from \"./utils/body.js\";\nimport { decodeURIComponent_, getQueryParam, getQueryParams, tryDecode } from \"./utils/url.js\";\nvar tryDecodeURIComponent = (str) => tryDecode(str, decodeURIComponent_);\nvar HonoRequest = class {\n /**\n * `.raw` can get the raw Request object.\n *\n * @see {@link https://hono.dev/docs/api/request#raw}\n *\n * @example\n * ```ts\n * // For Cloudflare Workers\n * app.post('/', async (c) => {\n * const metadata = c.req.raw.cf?.hostMetadata?\n * ...\n * })\n * ```\n */\n raw;\n #validatedData;\n // Short name of validatedData\n #matchResult;\n routeIndex = 0;\n /**\n * `.path` can get the pathname of the request.\n *\n * @see {@link https://hono.dev/docs/api/request#path}\n *\n * @example\n * ```ts\n * app.get('/about/me', (c) => {\n * const pathname = c.req.path // `/about/me`\n * })\n * ```\n */\n path;\n bodyCache = {};\n constructor(request, path = \"/\", matchResult = [[]]) {\n this.raw = request;\n this.path = path;\n this.#matchResult = matchResult;\n this.#validatedData = {};\n }\n param(key) {\n return key ? this.#getDecodedParam(key) : this.#getAllDecodedParams();\n }\n #getDecodedParam(key) {\n const paramKey = this.#matchResult[0][this.routeIndex][1][key];\n const param = this.#getParamValue(paramKey);\n return param && /\\%/.test(param) ? tryDecodeURIComponent(param) : param;\n }\n #getAllDecodedParams() {\n const decoded = {};\n const keys = Object.keys(this.#matchResult[0][this.routeIndex][1]);\n for (const key of keys) {\n const value = this.#getParamValue(this.#matchResult[0][this.routeIndex][1][key]);\n if (value !== void 0) {\n decoded[key] = /\\%/.test(value) ? tryDecodeURIComponent(value) : value;\n }\n }\n return decoded;\n }\n #getParamValue(paramKey) {\n return this.#matchResult[1] ? this.#matchResult[1][paramKey] : paramKey;\n }\n query(key) {\n return getQueryParam(this.url, key);\n }\n queries(key) {\n return getQueryParams(this.url, key);\n }\n header(name) {\n if (name) {\n return this.raw.headers.get(name) ?? void 0;\n }\n const headerData = {};\n this.raw.headers.forEach((value, key) => {\n headerData[key] = value;\n });\n return headerData;\n }\n async parseBody(options) {\n return this.bodyCache.parsedBody ??= await parseBody(this, options);\n }\n #cachedBody = (key) => {\n const { bodyCache, raw } = this;\n const cachedBody = bodyCache[key];\n if (cachedBody) {\n return cachedBody;\n }\n const anyCachedKey = Object.keys(bodyCache)[0];\n if (anyCachedKey) {\n return bodyCache[anyCachedKey].then((body) => {\n if (anyCachedKey === \"json\") {\n body = JSON.stringify(body);\n }\n return new Response(body)[key]();\n });\n }\n return bodyCache[key] = raw[key]();\n };\n /**\n * `.json()` can parse Request body of type `application/json`\n *\n * @see {@link https://hono.dev/docs/api/request#json}\n *\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.json()\n * })\n * ```\n */\n json() {\n return this.#cachedBody(\"text\").then((text) => JSON.parse(text));\n }\n /**\n * `.text()` can parse Request body of type `text/plain`\n *\n * @see {@link https://hono.dev/docs/api/request#text}\n *\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.text()\n * })\n * ```\n */\n text() {\n return this.#cachedBody(\"text\");\n }\n /**\n * `.arrayBuffer()` parse Request body as an `ArrayBuffer`\n *\n * @see {@link https://hono.dev/docs/api/request#arraybuffer}\n *\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.arrayBuffer()\n * })\n * ```\n */\n arrayBuffer() {\n return this.#cachedBody(\"arrayBuffer\");\n }\n /**\n * Parses the request body as a `Blob`.\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.blob();\n * });\n * ```\n * @see https://hono.dev/docs/api/request#blob\n */\n blob() {\n return this.#cachedBody(\"blob\");\n }\n /**\n * Parses the request body as `FormData`.\n * @example\n * ```ts\n * app.post('/entry', async (c) => {\n * const body = await c.req.formData();\n * });\n * ```\n * @see https://hono.dev/docs/api/request#formdata\n */\n formData() {\n return this.#cachedBody(\"formData\");\n }\n /**\n * Adds validated data to the request.\n *\n * @param target - The target of the validation.\n * @param data - The validated data to add.\n */\n addValidatedData(target, data) {\n this.#validatedData[target] = data;\n }\n valid(target) {\n return this.#validatedData[target];\n }\n /**\n * `.url()` can get the request url strings.\n *\n * @see {@link https://hono.dev/docs/api/request#url}\n *\n * @example\n * ```ts\n * app.get('/about/me', (c) => {\n * const url = c.req.url // `http://localhost:8787/about/me`\n * ...\n * })\n * ```\n */\n get url() {\n return this.raw.url;\n }\n /**\n * `.method()` can get the method name of the request.\n *\n * @see {@link https://hono.dev/docs/api/request#method}\n *\n * @example\n * ```ts\n * app.get('/about/me', (c) => {\n * const method = c.req.method // `GET`\n * })\n * ```\n */\n get method() {\n return this.raw.method;\n }\n get [GET_MATCH_RESULT]() {\n return this.#matchResult;\n }\n /**\n * `.matchedRoutes()` can return a matched route in the handler\n *\n * @deprecated\n *\n * Use matchedRoutes helper defined in \"hono/route\" instead.\n *\n * @see {@link https://hono.dev/docs/api/request#matchedroutes}\n *\n * @example\n * ```ts\n * app.use('*', async function logger(c, next) {\n * await next()\n * c.req.matchedRoutes.forEach(({ handler, method, path }, i) => {\n * const name = handler.name || (handler.length < 2 ? '[handler]' : '[middleware]')\n * console.log(\n * method,\n * ' ',\n * path,\n * ' '.repeat(Math.max(10 - path.length, 0)),\n * name,\n * i === c.req.routeIndex ? '<- respond from here' : ''\n * )\n * })\n * })\n * ```\n */\n get matchedRoutes() {\n return this.#matchResult[0].map(([[, route]]) => route);\n }\n /**\n * `routePath()` can retrieve the path registered within the handler\n *\n * @deprecated\n *\n * Use routePath helper defined in \"hono/route\" instead.\n *\n * @see {@link https://hono.dev/docs/api/request#routepath}\n *\n * @example\n * ```ts\n * app.get('/posts/:id', (c) => {\n * return c.json({ path: c.req.routePath })\n * })\n * ```\n */\n get routePath() {\n return this.#matchResult[0].map(([[, route]]) => route)[this.routeIndex].path;\n }\n};\nvar cloneRawRequest = async (req) => {\n if (!req.raw.bodyUsed) {\n return req.raw.clone();\n }\n const cacheKey = Object.keys(req.bodyCache)[0];\n if (!cacheKey) {\n throw new HTTPException(500, {\n message: \"Cannot clone request: body was already consumed and not cached. Please use HonoRequest methods (e.g., req.json(), req.text()) instead of consuming req.raw directly.\"\n });\n }\n const requestInit = {\n body: await req[cacheKey](),\n cache: req.raw.cache,\n credentials: req.raw.credentials,\n headers: req.header(),\n integrity: req.raw.integrity,\n keepalive: req.raw.keepalive,\n method: req.method,\n mode: req.raw.mode,\n redirect: req.raw.redirect,\n referrer: req.raw.referrer,\n referrerPolicy: req.raw.referrerPolicy,\n signal: req.raw.signal\n };\n return new Request(req.url, requestInit);\n};\nexport {\n HonoRequest,\n cloneRawRequest\n};\n", "// src/utils/html.ts\nvar HtmlEscapedCallbackPhase = {\n Stringify: 1,\n BeforeStream: 2,\n Stream: 3\n};\nvar raw = (value, callbacks) => {\n const escapedString = new String(value);\n escapedString.isEscaped = true;\n escapedString.callbacks = callbacks;\n return escapedString;\n};\nvar escapeRe = /[&<>'\"]/;\nvar stringBufferToString = async (buffer, callbacks) => {\n let str = \"\";\n callbacks ||= [];\n const resolvedBuffer = await Promise.all(buffer);\n for (let i = resolvedBuffer.length - 1; ; i--) {\n str += resolvedBuffer[i];\n i--;\n if (i < 0) {\n break;\n }\n let r = resolvedBuffer[i];\n if (typeof r === \"object\") {\n callbacks.push(...r.callbacks || []);\n }\n const isEscaped = r.isEscaped;\n r = await (typeof r === \"object\" ? r.toString() : r);\n if (typeof r === \"object\") {\n callbacks.push(...r.callbacks || []);\n }\n if (r.isEscaped ?? isEscaped) {\n str += r;\n } else {\n const buf = [str];\n escapeToBuffer(r, buf);\n str = buf[0];\n }\n }\n return raw(str, callbacks);\n};\nvar escapeToBuffer = (str, buffer) => {\n const match = str.search(escapeRe);\n if (match === -1) {\n buffer[0] += str;\n return;\n }\n let escape;\n let index;\n let lastIndex = 0;\n for (index = match; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n escape = \""\";\n break;\n case 39:\n escape = \"'\";\n break;\n case 38:\n escape = \"&\";\n break;\n case 60:\n escape = \"<\";\n break;\n case 62:\n escape = \">\";\n break;\n default:\n continue;\n }\n buffer[0] += str.substring(lastIndex, index) + escape;\n lastIndex = index + 1;\n }\n buffer[0] += str.substring(lastIndex, index);\n};\nvar resolveCallbackSync = (str) => {\n const callbacks = str.callbacks;\n if (!callbacks?.length) {\n return str;\n }\n const buffer = [str];\n const context = {};\n callbacks.forEach((c) => c({ phase: HtmlEscapedCallbackPhase.Stringify, buffer, context }));\n return buffer[0];\n};\nvar resolveCallback = async (str, phase, preserveCallbacks, context, buffer) => {\n if (typeof str === \"object\" && !(str instanceof String)) {\n if (!(str instanceof Promise)) {\n str = str.toString();\n }\n if (str instanceof Promise) {\n str = await str;\n }\n }\n const callbacks = str.callbacks;\n if (!callbacks?.length) {\n return Promise.resolve(str);\n }\n if (buffer) {\n buffer[0] += str;\n } else {\n buffer = [str];\n }\n const resStr = Promise.all(callbacks.map((c) => c({ phase, buffer, context }))).then(\n (res) => Promise.all(\n res.filter(Boolean).map((str2) => resolveCallback(str2, phase, false, context, buffer))\n ).then(() => buffer[0])\n );\n if (preserveCallbacks) {\n return raw(await resStr, callbacks);\n } else {\n return resStr;\n }\n};\nexport {\n HtmlEscapedCallbackPhase,\n escapeToBuffer,\n raw,\n resolveCallback,\n resolveCallbackSync,\n stringBufferToString\n};\n", "// src/context.ts\nimport { HonoRequest } from \"./request.js\";\nimport { HtmlEscapedCallbackPhase, resolveCallback } from \"./utils/html.js\";\nvar TEXT_PLAIN = \"text/plain; charset=UTF-8\";\nvar setDefaultContentType = (contentType, headers) => {\n return {\n \"Content-Type\": contentType,\n ...headers\n };\n};\nvar Context = class {\n #rawRequest;\n #req;\n /**\n * `.env` can get bindings (environment variables, secrets, KV namespaces, D1 database, R2 bucket etc.) in Cloudflare Workers.\n *\n * @see {@link https://hono.dev/docs/api/context#env}\n *\n * @example\n * ```ts\n * // Environment object for Cloudflare Workers\n * app.get('*', async c => {\n * const counter = c.env.COUNTER\n * })\n * ```\n */\n env = {};\n #var;\n finalized = false;\n /**\n * `.error` can get the error object from the middleware if the Handler throws an error.\n *\n * @see {@link https://hono.dev/docs/api/context#error}\n *\n * @example\n * ```ts\n * app.use('*', async (c, next) => {\n * await next()\n * if (c.error) {\n * // do something...\n * }\n * })\n * ```\n */\n error;\n #status;\n #executionCtx;\n #res;\n #layout;\n #renderer;\n #notFoundHandler;\n #preparedHeaders;\n #matchResult;\n #path;\n /**\n * Creates an instance of the Context class.\n *\n * @param req - The Request object.\n * @param options - Optional configuration options for the context.\n */\n constructor(req, options) {\n this.#rawRequest = req;\n if (options) {\n this.#executionCtx = options.executionCtx;\n this.env = options.env;\n this.#notFoundHandler = options.notFoundHandler;\n this.#path = options.path;\n this.#matchResult = options.matchResult;\n }\n }\n /**\n * `.req` is the instance of {@link HonoRequest}.\n */\n get req() {\n this.#req ??= new HonoRequest(this.#rawRequest, this.#path, this.#matchResult);\n return this.#req;\n }\n /**\n * @see {@link https://hono.dev/docs/api/context#event}\n * The FetchEvent associated with the current request.\n *\n * @throws Will throw an error if the context does not have a FetchEvent.\n */\n get event() {\n if (this.#executionCtx && \"respondWith\" in this.#executionCtx) {\n return this.#executionCtx;\n } else {\n throw Error(\"This context has no FetchEvent\");\n }\n }\n /**\n * @see {@link https://hono.dev/docs/api/context#executionctx}\n * The ExecutionContext associated with the current request.\n *\n * @throws Will throw an error if the context does not have an ExecutionContext.\n */\n get executionCtx() {\n if (this.#executionCtx) {\n return this.#executionCtx;\n } else {\n throw Error(\"This context has no ExecutionContext\");\n }\n }\n /**\n * @see {@link https://hono.dev/docs/api/context#res}\n * The Response object for the current request.\n */\n get res() {\n return this.#res ||= new Response(null, {\n headers: this.#preparedHeaders ??= new Headers()\n });\n }\n /**\n * Sets the Response object for the current request.\n *\n * @param _res - The Response object to set.\n */\n set res(_res) {\n if (this.#res && _res) {\n _res = new Response(_res.body, _res);\n for (const [k, v] of this.#res.headers.entries()) {\n if (k === \"content-type\") {\n continue;\n }\n if (k === \"set-cookie\") {\n const cookies = this.#res.headers.getSetCookie();\n _res.headers.delete(\"set-cookie\");\n for (const cookie of cookies) {\n _res.headers.append(\"set-cookie\", cookie);\n }\n } else {\n _res.headers.set(k, v);\n }\n }\n }\n this.#res = _res;\n this.finalized = true;\n }\n /**\n * `.render()` can create a response within a layout.\n *\n * @see {@link https://hono.dev/docs/api/context#render-setrenderer}\n *\n * @example\n * ```ts\n * app.get('/', (c) => {\n * return c.render('Hello!')\n * })\n * ```\n */\n render = (...args) => {\n this.#renderer ??= (content) => this.html(content);\n return this.#renderer(...args);\n };\n /**\n * Sets the layout for the response.\n *\n * @param layout - The layout to set.\n * @returns The layout function.\n */\n setLayout = (layout) => this.#layout = layout;\n /**\n * Gets the current layout for the response.\n *\n * @returns The current layout function.\n */\n getLayout = () => this.#layout;\n /**\n * `.setRenderer()` can set the layout in the custom middleware.\n *\n * @see {@link https://hono.dev/docs/api/context#render-setrenderer}\n *\n * @example\n * ```tsx\n * app.use('*', async (c, next) => {\n * c.setRenderer((content) => {\n * return c.html(\n * <html>\n * <body>\n * <p>{content}</p>\n * </body>\n * </html>\n * )\n * })\n * await next()\n * })\n * ```\n */\n setRenderer = (renderer) => {\n this.#renderer = renderer;\n };\n /**\n * `.header()` can set headers.\n *\n * @see {@link https://hono.dev/docs/api/context#header}\n *\n * @example\n * ```ts\n * app.get('/welcome', (c) => {\n * // Set headers\n * c.header('X-Message', 'Hello!')\n * c.header('Content-Type', 'text/plain')\n *\n * return c.body('Thank you for coming')\n * })\n * ```\n */\n header = (name, value, options) => {\n if (this.finalized) {\n this.#res = new Response(this.#res.body, this.#res);\n }\n const headers = this.#res ? this.#res.headers : this.#preparedHeaders ??= new Headers();\n if (value === void 0) {\n headers.delete(name);\n } else if (options?.append) {\n headers.append(name, value);\n } else {\n headers.set(name, value);\n }\n };\n status = (status) => {\n this.#status = status;\n };\n /**\n * `.set()` can set the value specified by the key.\n *\n * @see {@link https://hono.dev/docs/api/context#set-get}\n *\n * @example\n * ```ts\n * app.use('*', async (c, next) => {\n * c.set('message', 'Hono is hot!!')\n * await next()\n * })\n * ```\n */\n set = (key, value) => {\n this.#var ??= /* @__PURE__ */ new Map();\n this.#var.set(key, value);\n };\n /**\n * `.get()` can use the value specified by the key.\n *\n * @see {@link https://hono.dev/docs/api/context#set-get}\n *\n * @example\n * ```ts\n * app.get('/', (c) => {\n * const message = c.get('message')\n * return c.text(`The message is \"${message}\"`)\n * })\n * ```\n */\n get = (key) => {\n return this.#var ? this.#var.get(key) : void 0;\n };\n /**\n * `.var` can access the value of a variable.\n *\n * @see {@link https://hono.dev/docs/api/context#var}\n *\n * @example\n * ```ts\n * const result = c.var.client.oneMethod()\n * ```\n */\n // c.var.propName is a read-only\n get var() {\n if (!this.#var) {\n return {};\n }\n return Object.fromEntries(this.#var);\n }\n #newResponse(data, arg, headers) {\n const responseHeaders = this.#res ? new Headers(this.#res.headers) : this.#preparedHeaders ?? new Headers();\n if (typeof arg === \"object\" && \"headers\" in arg) {\n const argHeaders = arg.headers instanceof Headers ? arg.headers : new Headers(arg.headers);\n for (const [key, value] of argHeaders) {\n if (key.toLowerCase() === \"set-cookie\") {\n responseHeaders.append(key, value);\n } else {\n responseHeaders.set(key, value);\n }\n }\n }\n if (headers) {\n for (const [k, v] of Object.entries(headers)) {\n if (typeof v === \"string\") {\n responseHeaders.set(k, v);\n } else {\n responseHeaders.delete(k);\n for (const v2 of v) {\n responseHeaders.append(k, v2);\n }\n }\n }\n }\n const status = typeof arg === \"number\" ? arg : arg?.status ?? this.#status;\n return new Response(data, { status, headers: responseHeaders });\n }\n newResponse = (...args) => this.#newResponse(...args);\n /**\n * `.body()` can return the HTTP response.\n * You can set headers with `.header()` and set HTTP status code with `.status`.\n * This can also be set in `.text()`, `.json()` and so on.\n *\n * @see {@link https://hono.dev/docs/api/context#body}\n *\n * @example\n * ```ts\n * app.get('/welcome', (c) => {\n * // Set headers\n * c.header('X-Message', 'Hello!')\n * c.header('Content-Type', 'text/plain')\n * // Set HTTP status code\n * c.status(201)\n *\n * // Return the response body\n * return c.body('Thank you for coming')\n * })\n * ```\n */\n body = (data, arg, headers) => this.#newResponse(data, arg, headers);\n /**\n * `.text()` can render text as `Content-Type:text/plain`.\n *\n * @see {@link https://hono.dev/docs/api/context#text}\n *\n * @example\n * ```ts\n * app.get('/say', (c) => {\n * return c.text('Hello!')\n * })\n * ```\n */\n text = (text, arg, headers) => {\n return !this.#preparedHeaders && !this.#status && !arg && !headers && !this.finalized ? new Response(text) : this.#newResponse(\n text,\n arg,\n setDefaultContentType(TEXT_PLAIN, headers)\n );\n };\n /**\n * `.json()` can render JSON as `Content-Type:application/json`.\n *\n * @see {@link https://hono.dev/docs/api/context#json}\n *\n * @example\n * ```ts\n * app.get('/api', (c) => {\n * return c.json({ message: 'Hello!' })\n * })\n * ```\n */\n json = (object, arg, headers) => {\n return this.#newResponse(\n JSON.stringify(object),\n arg,\n setDefaultContentType(\"application/json\", headers)\n );\n };\n html = (html, arg, headers) => {\n const res = (html2) => this.#newResponse(html2, arg, setDefaultContentType(\"text/html; charset=UTF-8\", headers));\n return typeof html === \"object\" ? resolveCallback(html, HtmlEscapedCallbackPhase.Stringify, false, {}).then(res) : res(html);\n };\n /**\n * `.redirect()` can Redirect, default status code is 302.\n *\n * @see {@link https://hono.dev/docs/api/context#redirect}\n *\n * @example\n * ```ts\n * app.get('/redirect', (c) => {\n * return c.redirect('/')\n * })\n * app.get('/redirect-permanently', (c) => {\n * return c.redirect('/', 301)\n * })\n * ```\n */\n redirect = (location, status) => {\n const locationString = String(location);\n this.header(\n \"Location\",\n // Multibyes should be encoded\n // eslint-disable-next-line no-control-regex\n !/[^\\x00-\\xFF]/.test(locationString) ? locationString : encodeURI(locationString)\n );\n return this.newResponse(null, status ?? 302);\n };\n /**\n * `.notFound()` can return the Not Found Response.\n *\n * @see {@link https://hono.dev/docs/api/context#notfound}\n *\n * @example\n * ```ts\n * app.get('/notfound', (c) => {\n * return c.notFound()\n * })\n * ```\n */\n notFound = () => {\n this.#notFoundHandler ??= () => new Response();\n return this.#notFoundHandler(this);\n };\n};\nexport {\n Context,\n TEXT_PLAIN\n};\n", "// src/router.ts\nvar METHOD_NAME_ALL = \"ALL\";\nvar METHOD_NAME_ALL_LOWERCASE = \"all\";\nvar METHODS = [\"get\", \"post\", \"put\", \"delete\", \"options\", \"patch\"];\nvar MESSAGE_MATCHER_IS_ALREADY_BUILT = \"Can not add a route since the matcher is already built.\";\nvar UnsupportedPathError = class extends Error {\n};\nexport {\n MESSAGE_MATCHER_IS_ALREADY_BUILT,\n METHODS,\n METHOD_NAME_ALL,\n METHOD_NAME_ALL_LOWERCASE,\n UnsupportedPathError\n};\n", "// src/utils/constants.ts\nvar COMPOSED_HANDLER = \"__COMPOSED_HANDLER\";\nexport {\n COMPOSED_HANDLER\n};\n", "// src/hono-base.ts\nimport { compose } from \"./compose.js\";\nimport { Context } from \"./context.js\";\nimport { METHODS, METHOD_NAME_ALL, METHOD_NAME_ALL_LOWERCASE } from \"./router.js\";\nimport { COMPOSED_HANDLER } from \"./utils/constants.js\";\nimport { getPath, getPathNoStrict, mergePath } from \"./utils/url.js\";\nvar notFoundHandler = (c) => {\n return c.text(\"404 Not Found\", 404);\n};\nvar errorHandler = (err, c) => {\n if (\"getResponse\" in err) {\n const res = err.getResponse();\n return c.newResponse(res.body, res);\n }\n console.error(err);\n return c.text(\"Internal Server Error\", 500);\n};\nvar Hono = class _Hono {\n get;\n post;\n put;\n delete;\n options;\n patch;\n all;\n on;\n use;\n /*\n This class is like an abstract class and does not have a router.\n To use it, inherit the class and implement router in the constructor.\n */\n router;\n getPath;\n // Cannot use `#` because it requires visibility at JavaScript runtime.\n _basePath = \"/\";\n #path = \"/\";\n routes = [];\n constructor(options = {}) {\n const allMethods = [...METHODS, METHOD_NAME_ALL_LOWERCASE];\n allMethods.forEach((method) => {\n this[method] = (args1, ...args) => {\n if (typeof args1 === \"string\") {\n this.#path = args1;\n } else {\n this.#addRoute(method, this.#path, args1);\n }\n args.forEach((handler) => {\n this.#addRoute(method, this.#path, handler);\n });\n return this;\n };\n });\n this.on = (method, path, ...handlers) => {\n for (const p of [path].flat()) {\n this.#path = p;\n for (const m of [method].flat()) {\n handlers.map((handler) => {\n this.#addRoute(m.toUpperCase(), this.#path, handler);\n });\n }\n }\n return this;\n };\n this.use = (arg1, ...handlers) => {\n if (typeof arg1 === \"string\") {\n this.#path = arg1;\n } else {\n this.#path = \"*\";\n handlers.unshift(arg1);\n }\n handlers.forEach((handler) => {\n this.#addRoute(METHOD_NAME_ALL, this.#path, handler);\n });\n return this;\n };\n const { strict, ...optionsWithoutStrict } = options;\n Object.assign(this, optionsWithoutStrict);\n this.getPath = strict ?? true ? options.getPath ?? getPath : getPathNoStrict;\n }\n #clone() {\n const clone = new _Hono({\n router: this.router,\n getPath: this.getPath\n });\n clone.errorHandler = this.errorHandler;\n clone.#notFoundHandler = this.#notFoundHandler;\n clone.routes = this.routes;\n return clone;\n }\n #notFoundHandler = notFoundHandler;\n // Cannot use `#` because it requires visibility at JavaScript runtime.\n errorHandler = errorHandler;\n /**\n * `.route()` allows grouping other Hono instance in routes.\n *\n * @see {@link https://hono.dev/docs/api/routing#grouping}\n *\n * @param {string} path - base Path\n * @param {Hono} app - other Hono instance\n * @returns {Hono} routed Hono instance\n *\n * @example\n * ```ts\n * const app = new Hono()\n * const app2 = new Hono()\n *\n * app2.get(\"/user\", (c) => c.text(\"user\"))\n * app.route(\"/api\", app2) // GET /api/user\n * ```\n */\n route(path, app) {\n const subApp = this.basePath(path);\n app.routes.map((r) => {\n let handler;\n if (app.errorHandler === errorHandler) {\n handler = r.handler;\n } else {\n handler = async (c, next) => (await compose([], app.errorHandler)(c, () => r.handler(c, next))).res;\n handler[COMPOSED_HANDLER] = r.handler;\n }\n subApp.#addRoute(r.method, r.path, handler);\n });\n return this;\n }\n /**\n * `.basePath()` allows base paths to be specified.\n *\n * @see {@link https://hono.dev/docs/api/routing#base-path}\n *\n * @param {string} path - base Path\n * @returns {Hono} changed Hono instance\n *\n * @example\n * ```ts\n * const api = new Hono().basePath('/api')\n * ```\n */\n basePath(path) {\n const subApp = this.#clone();\n subApp._basePath = mergePath(this._basePath, path);\n return subApp;\n }\n /**\n * `.onError()` handles an error and returns a customized Response.\n *\n * @see {@link https://hono.dev/docs/api/hono#error-handling}\n *\n * @param {ErrorHandler} handler - request Handler for error\n * @returns {Hono} changed Hono instance\n *\n * @example\n * ```ts\n * app.onError((err, c) => {\n * console.error(`${err}`)\n * return c.text('Custom Error Message', 500)\n * })\n * ```\n */\n onError = (handler) => {\n this.errorHandler = handler;\n return this;\n };\n /**\n * `.notFound()` allows you to customize a Not Found Response.\n *\n * @see {@link https://hono.dev/docs/api/hono#not-found}\n *\n * @param {NotFoundHandler} handler - request handler for not-found\n * @returns {Hono} changed Hono instance\n *\n * @example\n * ```ts\n * app.notFound((c) => {\n * return c.text('Custom 404 Message', 404)\n * })\n * ```\n */\n notFound = (handler) => {\n this.#notFoundHandler = handler;\n return this;\n };\n /**\n * `.mount()` allows you to mount applications built with other frameworks into your Hono application.\n *\n * @see {@link https://hono.dev/docs/api/hono#mount}\n *\n * @param {string} path - base Path\n * @param {Function} applicationHandler - other Request Handler\n * @param {MountOptions} [options] - options of `.mount()`\n * @returns {Hono} mounted Hono instance\n *\n * @example\n * ```ts\n * import { Router as IttyRouter } from 'itty-router'\n * import { Hono } from 'hono'\n * // Create itty-router application\n * const ittyRouter = IttyRouter()\n * // GET /itty-router/hello\n * ittyRouter.get('/hello', () => new Response('Hello from itty-router'))\n *\n * const app = new Hono()\n * app.mount('/itty-router', ittyRouter.handle)\n * ```\n *\n * @example\n * ```ts\n * const app = new Hono()\n * // Send the request to another application without modification.\n * app.mount('/app', anotherApp, {\n * replaceRequest: (req) => req,\n * })\n * ```\n */\n mount(path, applicationHandler, options) {\n let replaceRequest;\n let optionHandler;\n if (options) {\n if (typeof options === \"function\") {\n optionHandler = options;\n } else {\n optionHandler = options.optionHandler;\n if (options.replaceRequest === false) {\n replaceRequest = (request) => request;\n } else {\n replaceRequest = options.replaceRequest;\n }\n }\n }\n const getOptions = optionHandler ? (c) => {\n const options2 = optionHandler(c);\n return Array.isArray(options2) ? options2 : [options2];\n } : (c) => {\n let executionContext = void 0;\n try {\n executionContext = c.executionCtx;\n } catch {\n }\n return [c.env, executionContext];\n };\n replaceRequest ||= (() => {\n const mergedPath = mergePath(this._basePath, path);\n const pathPrefixLength = mergedPath === \"/\" ? 0 : mergedPath.length;\n return (request) => {\n const url = new URL(request.url);\n url.pathname = url.pathname.slice(pathPrefixLength) || \"/\";\n return new Request(url, request);\n };\n })();\n const handler = async (c, next) => {\n const res = await applicationHandler(replaceRequest(c.req.raw), ...getOptions(c));\n if (res) {\n return res;\n }\n await next();\n };\n this.#addRoute(METHOD_NAME_ALL, mergePath(path, \"*\"), handler);\n return this;\n }\n #addRoute(method, path, handler) {\n method = method.toUpperCase();\n path = mergePath(this._basePath, path);\n const r = { basePath: this._basePath, path, method, handler };\n this.router.add(method, path, [handler, r]);\n this.routes.push(r);\n }\n #handleError(err, c) {\n if (err instanceof Error) {\n return this.errorHandler(err, c);\n }\n throw err;\n }\n #dispatch(request, executionCtx, env, method) {\n if (method === \"HEAD\") {\n return (async () => new Response(null, await this.#dispatch(request, executionCtx, env, \"GET\")))();\n }\n const path = this.getPath(request, { env });\n const matchResult = this.router.match(method, path);\n const c = new Context(request, {\n path,\n matchResult,\n env,\n executionCtx,\n notFoundHandler: this.#notFoundHandler\n });\n if (matchResult[0].length === 1) {\n let res;\n try {\n res = matchResult[0][0][0][0](c, async () => {\n c.res = await this.#notFoundHandler(c);\n });\n } catch (err) {\n return this.#handleError(err, c);\n }\n return res instanceof Promise ? res.then(\n (resolved) => resolved || (c.finalized ? c.res : this.#notFoundHandler(c))\n ).catch((err) => this.#handleError(err, c)) : res ?? this.#notFoundHandler(c);\n }\n const composed = compose(matchResult[0], this.errorHandler, this.#notFoundHandler);\n return (async () => {\n try {\n const context = await composed(c);\n if (!context.finalized) {\n throw new Error(\n \"Context is not finalized. Did you forget to return a Response object or `await next()`?\"\n );\n }\n return context.res;\n } catch (err) {\n return this.#handleError(err, c);\n }\n })();\n }\n /**\n * `.fetch()` will be entry point of your app.\n *\n * @see {@link https://hono.dev/docs/api/hono#fetch}\n *\n * @param {Request} request - request Object of request\n * @param {Env} Env - env Object\n * @param {ExecutionContext} - context of execution\n * @returns {Response | Promise<Response>} response of request\n *\n */\n fetch = (request, ...rest) => {\n return this.#dispatch(request, rest[1], rest[0], request.method);\n };\n /**\n * `.request()` is a useful method for testing.\n * You can pass a URL or pathname to send a GET request.\n * app will return a Response object.\n * ```ts\n * test('GET /hello is ok', async () => {\n * const res = await app.request('/hello')\n * expect(res.status).toBe(200)\n * })\n * ```\n * @see https://hono.dev/docs/api/hono#request\n */\n request = (input, requestInit, Env, executionCtx) => {\n if (input instanceof Request) {\n return this.fetch(requestInit ? new Request(input, requestInit) : input, Env, executionCtx);\n }\n input = input.toString();\n return this.fetch(\n new Request(\n /^https?:\\/\\//.test(input) ? input : `http://localhost${mergePath(\"/\", input)}`,\n requestInit\n ),\n Env,\n executionCtx\n );\n };\n /**\n * `.fire()` automatically adds a global fetch event listener.\n * This can be useful for environments that adhere to the Service Worker API, such as non-ES module Cloudflare Workers.\n * @deprecated\n * Use `fire` from `hono/service-worker` instead.\n * ```ts\n * import { Hono } from 'hono'\n * import { fire } from 'hono/service-worker'\n *\n * const app = new Hono()\n * // ...\n * fire(app)\n * ```\n * @see https://hono.dev/docs/api/hono#fire\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API\n * @see https://developers.cloudflare.com/workers/reference/migrate-to-module-workers/\n */\n fire = () => {\n addEventListener(\"fetch\", (event) => {\n event.respondWith(this.#dispatch(event.request, event, void 0, event.request.method));\n });\n };\n};\nexport {\n Hono as HonoBase\n};\n", "// src/router/reg-exp-router/matcher.ts\nimport { METHOD_NAME_ALL } from \"../../router.js\";\nvar emptyParam = [];\nfunction match(method, path) {\n const matchers = this.buildAllMatchers();\n const match2 = ((method2, path2) => {\n const matcher = matchers[method2] || matchers[METHOD_NAME_ALL];\n const staticMatch = matcher[2][path2];\n if (staticMatch) {\n return staticMatch;\n }\n const match3 = path2.match(matcher[0]);\n if (!match3) {\n return [[], emptyParam];\n }\n const index = match3.indexOf(\"\", 1);\n return [matcher[1][index], match3];\n });\n this.match = match2;\n return match2(method, path);\n}\nexport {\n emptyParam,\n match\n};\n", "// src/router/reg-exp-router/node.ts\nvar LABEL_REG_EXP_STR = \"[^/]+\";\nvar ONLY_WILDCARD_REG_EXP_STR = \".*\";\nvar TAIL_WILDCARD_REG_EXP_STR = \"(?:|/.*)\";\nvar PATH_ERROR = /* @__PURE__ */ Symbol();\nvar regExpMetaChars = new Set(\".\\\\+*[^]$()\");\nfunction compareKey(a, b) {\n if (a.length === 1) {\n return b.length === 1 ? a < b ? -1 : 1 : -1;\n }\n if (b.length === 1) {\n return 1;\n }\n if (a === ONLY_WILDCARD_REG_EXP_STR || a === TAIL_WILDCARD_REG_EXP_STR) {\n return 1;\n } else if (b === ONLY_WILDCARD_REG_EXP_STR || b === TAIL_WILDCARD_REG_EXP_STR) {\n return -1;\n }\n if (a === LABEL_REG_EXP_STR) {\n return 1;\n } else if (b === LABEL_REG_EXP_STR) {\n return -1;\n }\n return a.length === b.length ? a < b ? -1 : 1 : b.length - a.length;\n}\nvar Node = class _Node {\n #index;\n #varIndex;\n #children = /* @__PURE__ */ Object.create(null);\n insert(tokens, index, paramMap, context, pathErrorCheckOnly) {\n if (tokens.length === 0) {\n if (this.#index !== void 0) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n this.#index = index;\n return;\n }\n const [token, ...restTokens] = tokens;\n const pattern = token === \"*\" ? restTokens.length === 0 ? [\"\", \"\", ONLY_WILDCARD_REG_EXP_STR] : [\"\", \"\", LABEL_REG_EXP_STR] : token === \"/*\" ? [\"\", \"\", TAIL_WILDCARD_REG_EXP_STR] : token.match(/^\\:([^\\{\\}]+)(?:\\{(.+)\\})?$/);\n let node;\n if (pattern) {\n const name = pattern[1];\n let regexpStr = pattern[2] || LABEL_REG_EXP_STR;\n if (name && pattern[2]) {\n if (regexpStr === \".*\") {\n throw PATH_ERROR;\n }\n regexpStr = regexpStr.replace(/^\\((?!\\?:)(?=[^)]+\\)$)/, \"(?:\");\n if (/\\((?!\\?:)/.test(regexpStr)) {\n throw PATH_ERROR;\n }\n }\n node = this.#children[regexpStr];\n if (!node) {\n if (Object.keys(this.#children).some(\n (k) => k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n )) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n node = this.#children[regexpStr] = new _Node();\n if (name !== \"\") {\n node.#varIndex = context.varIndex++;\n }\n }\n if (!pathErrorCheckOnly && name !== \"\") {\n paramMap.push([name, node.#varIndex]);\n }\n } else {\n node = this.#children[token];\n if (!node) {\n if (Object.keys(this.#children).some(\n (k) => k.length > 1 && k !== ONLY_WILDCARD_REG_EXP_STR && k !== TAIL_WILDCARD_REG_EXP_STR\n )) {\n throw PATH_ERROR;\n }\n if (pathErrorCheckOnly) {\n return;\n }\n node = this.#children[token] = new _Node();\n }\n }\n node.insert(restTokens, index, paramMap, context, pathErrorCheckOnly);\n }\n buildRegExpStr() {\n const childKeys = Object.keys(this.#children).sort(compareKey);\n const strList = childKeys.map((k) => {\n const c = this.#children[k];\n return (typeof c.#varIndex === \"number\" ? `(${k})@${c.#varIndex}` : regExpMetaChars.has(k) ? `\\\\${k}` : k) + c.buildRegExpStr();\n });\n if (typeof this.#index === \"number\") {\n strList.unshift(`#${this.#index}`);\n }\n if (strList.length === 0) {\n return \"\";\n }\n if (strList.length === 1) {\n return strList[0];\n }\n return \"(?:\" + strList.join(\"|\") + \")\";\n }\n};\nexport {\n Node,\n PATH_ERROR\n};\n", "// src/router/reg-exp-router/trie.ts\nimport { Node } from \"./node.js\";\nvar Trie = class {\n #context = { varIndex: 0 };\n #root = new Node();\n insert(path, index, pathErrorCheckOnly) {\n const paramAssoc = [];\n const groups = [];\n for (let i = 0; ; ) {\n let replaced = false;\n path = path.replace(/\\{[^}]+\\}/g, (m) => {\n const mark = `@\\\\${i}`;\n groups[i] = [mark, m];\n i++;\n replaced = true;\n return mark;\n });\n if (!replaced) {\n break;\n }\n }\n const tokens = path.match(/(?::[^\\/]+)|(?:\\/\\*$)|./g) || [];\n for (let i = groups.length - 1; i >= 0; i--) {\n const [mark] = groups[i];\n for (let j = tokens.length - 1; j >= 0; j--) {\n if (tokens[j].indexOf(mark) !== -1) {\n tokens[j] = tokens[j].replace(mark, groups[i][1]);\n break;\n }\n }\n }\n this.#root.insert(tokens, index, paramAssoc, this.#context, pathErrorCheckOnly);\n return paramAssoc;\n }\n buildRegExp() {\n let regexp = this.#root.buildRegExpStr();\n if (regexp === \"\") {\n return [/^$/, [], []];\n }\n let captureIndex = 0;\n const indexReplacementMap = [];\n const paramReplacementMap = [];\n regexp = regexp.replace(/#(\\d+)|@(\\d+)|\\.\\*\\$/g, (_, handlerIndex, paramIndex) => {\n if (handlerIndex !== void 0) {\n indexReplacementMap[++captureIndex] = Number(handlerIndex);\n return \"$()\";\n }\n if (paramIndex !== void 0) {\n paramReplacementMap[Number(paramIndex)] = ++captureIndex;\n return \"\";\n }\n return \"\";\n });\n return [new RegExp(`^${regexp}`), indexReplacementMap, paramReplacementMap];\n }\n};\nexport {\n Trie\n};\n", "// src/router/reg-exp-router/router.ts\nimport {\n MESSAGE_MATCHER_IS_ALREADY_BUILT,\n METHOD_NAME_ALL,\n UnsupportedPathError\n} from \"../../router.js\";\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nimport { match, emptyParam } from \"./matcher.js\";\nimport { PATH_ERROR } from \"./node.js\";\nimport { Trie } from \"./trie.js\";\nvar nullMatcher = [/^$/, [], /* @__PURE__ */ Object.create(null)];\nvar wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\nfunction buildWildcardRegExp(path) {\n return wildcardRegExpCache[path] ??= new RegExp(\n path === \"*\" ? \"\" : `^${path.replace(\n /\\/\\*$|([.\\\\+*[^\\]$()])/g,\n (_, metaChar) => metaChar ? `\\\\${metaChar}` : \"(?:|/.*)\"\n )}$`\n );\n}\nfunction clearWildcardRegExpCache() {\n wildcardRegExpCache = /* @__PURE__ */ Object.create(null);\n}\nfunction buildMatcherFromPreprocessedRoutes(routes) {\n const trie = new Trie();\n const handlerData = [];\n if (routes.length === 0) {\n return nullMatcher;\n }\n const routesWithStaticPathFlag = routes.map(\n (route) => [!/\\*|\\/:/.test(route[0]), ...route]\n ).sort(\n ([isStaticA, pathA], [isStaticB, pathB]) => isStaticA ? 1 : isStaticB ? -1 : pathA.length - pathB.length\n );\n const staticMap = /* @__PURE__ */ Object.create(null);\n for (let i = 0, j = -1, len = routesWithStaticPathFlag.length; i < len; i++) {\n const [pathErrorCheckOnly, path, handlers] = routesWithStaticPathFlag[i];\n if (pathErrorCheckOnly) {\n staticMap[path] = [handlers.map(([h]) => [h, /* @__PURE__ */ Object.create(null)]), emptyParam];\n } else {\n j++;\n }\n let paramAssoc;\n try {\n paramAssoc = trie.insert(path, j, pathErrorCheckOnly);\n } catch (e) {\n throw e === PATH_ERROR ? new UnsupportedPathError(path) : e;\n }\n if (pathErrorCheckOnly) {\n continue;\n }\n handlerData[j] = handlers.map(([h, paramCount]) => {\n const paramIndexMap = /* @__PURE__ */ Object.create(null);\n paramCount -= 1;\n for (; paramCount >= 0; paramCount--) {\n const [key, value] = paramAssoc[paramCount];\n paramIndexMap[key] = value;\n }\n return [h, paramIndexMap];\n });\n }\n const [regexp, indexReplacementMap, paramReplacementMap] = trie.buildRegExp();\n for (let i = 0, len = handlerData.length; i < len; i++) {\n for (let j = 0, len2 = handlerData[i].length; j < len2; j++) {\n const map = handlerData[i][j]?.[1];\n if (!map) {\n continue;\n }\n const keys = Object.keys(map);\n for (let k = 0, len3 = keys.length; k < len3; k++) {\n map[keys[k]] = paramReplacementMap[map[keys[k]]];\n }\n }\n }\n const handlerMap = [];\n for (const i in indexReplacementMap) {\n handlerMap[i] = handlerData[indexReplacementMap[i]];\n }\n return [regexp, handlerMap, staticMap];\n}\nfunction findMiddleware(middleware, path) {\n if (!middleware) {\n return void 0;\n }\n for (const k of Object.keys(middleware).sort((a, b) => b.length - a.length)) {\n if (buildWildcardRegExp(k).test(path)) {\n return [...middleware[k]];\n }\n }\n return void 0;\n}\nvar RegExpRouter = class {\n name = \"RegExpRouter\";\n #middleware;\n #routes;\n constructor() {\n this.#middleware = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n this.#routes = { [METHOD_NAME_ALL]: /* @__PURE__ */ Object.create(null) };\n }\n add(method, path, handler) {\n const middleware = this.#middleware;\n const routes = this.#routes;\n if (!middleware || !routes) {\n throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n }\n if (!middleware[method]) {\n ;\n [middleware, routes].forEach((handlerMap) => {\n handlerMap[method] = /* @__PURE__ */ Object.create(null);\n Object.keys(handlerMap[METHOD_NAME_ALL]).forEach((p) => {\n handlerMap[method][p] = [...handlerMap[METHOD_NAME_ALL][p]];\n });\n });\n }\n if (path === \"/*\") {\n path = \"*\";\n }\n const paramCount = (path.match(/\\/:/g) || []).length;\n if (/\\*$/.test(path)) {\n const re = buildWildcardRegExp(path);\n if (method === METHOD_NAME_ALL) {\n Object.keys(middleware).forEach((m) => {\n middleware[m][path] ||= findMiddleware(middleware[m], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n });\n } else {\n middleware[method][path] ||= findMiddleware(middleware[method], path) || findMiddleware(middleware[METHOD_NAME_ALL], path) || [];\n }\n Object.keys(middleware).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n Object.keys(middleware[m]).forEach((p) => {\n re.test(p) && middleware[m][p].push([handler, paramCount]);\n });\n }\n });\n Object.keys(routes).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n Object.keys(routes[m]).forEach(\n (p) => re.test(p) && routes[m][p].push([handler, paramCount])\n );\n }\n });\n return;\n }\n const paths = checkOptionalParameter(path) || [path];\n for (let i = 0, len = paths.length; i < len; i++) {\n const path2 = paths[i];\n Object.keys(routes).forEach((m) => {\n if (method === METHOD_NAME_ALL || method === m) {\n routes[m][path2] ||= [\n ...findMiddleware(middleware[m], path2) || findMiddleware(middleware[METHOD_NAME_ALL], path2) || []\n ];\n routes[m][path2].push([handler, paramCount - len + i + 1]);\n }\n });\n }\n }\n match = match;\n buildAllMatchers() {\n const matchers = /* @__PURE__ */ Object.create(null);\n Object.keys(this.#routes).concat(Object.keys(this.#middleware)).forEach((method) => {\n matchers[method] ||= this.#buildMatcher(method);\n });\n this.#middleware = this.#routes = void 0;\n clearWildcardRegExpCache();\n return matchers;\n }\n #buildMatcher(method) {\n const routes = [];\n let hasOwnRoute = method === METHOD_NAME_ALL;\n [this.#middleware, this.#routes].forEach((r) => {\n const ownRoute = r[method] ? Object.keys(r[method]).map((path) => [path, r[method][path]]) : [];\n if (ownRoute.length !== 0) {\n hasOwnRoute ||= true;\n routes.push(...ownRoute);\n } else if (method !== METHOD_NAME_ALL) {\n routes.push(\n ...Object.keys(r[METHOD_NAME_ALL]).map((path) => [path, r[METHOD_NAME_ALL][path]])\n );\n }\n });\n if (!hasOwnRoute) {\n return null;\n } else {\n return buildMatcherFromPreprocessedRoutes(routes);\n }\n }\n};\nexport {\n RegExpRouter\n};\n", "// src/router/smart-router/router.ts\nimport { MESSAGE_MATCHER_IS_ALREADY_BUILT, UnsupportedPathError } from \"../../router.js\";\nvar SmartRouter = class {\n name = \"SmartRouter\";\n #routers = [];\n #routes = [];\n constructor(init) {\n this.#routers = init.routers;\n }\n add(method, path, handler) {\n if (!this.#routes) {\n throw new Error(MESSAGE_MATCHER_IS_ALREADY_BUILT);\n }\n this.#routes.push([method, path, handler]);\n }\n match(method, path) {\n if (!this.#routes) {\n throw new Error(\"Fatal error\");\n }\n const routers = this.#routers;\n const routes = this.#routes;\n const len = routers.length;\n let i = 0;\n let res;\n for (; i < len; i++) {\n const router = routers[i];\n try {\n for (let i2 = 0, len2 = routes.length; i2 < len2; i2++) {\n router.add(...routes[i2]);\n }\n res = router.match(method, path);\n } catch (e) {\n if (e instanceof UnsupportedPathError) {\n continue;\n }\n throw e;\n }\n this.match = router.match.bind(router);\n this.#routers = [router];\n this.#routes = void 0;\n break;\n }\n if (i === len) {\n throw new Error(\"Fatal error\");\n }\n this.name = `SmartRouter + ${this.activeRouter.name}`;\n return res;\n }\n get activeRouter() {\n if (this.#routes || this.#routers.length !== 1) {\n throw new Error(\"No active router has been determined yet.\");\n }\n return this.#routers[0];\n }\n};\nexport {\n SmartRouter\n};\n", "// src/router/trie-router/node.ts\nimport { METHOD_NAME_ALL } from \"../../router.js\";\nimport { getPattern, splitPath, splitRoutingPath } from \"../../utils/url.js\";\nvar emptyParams = /* @__PURE__ */ Object.create(null);\nvar Node = class _Node {\n #methods;\n #children;\n #patterns;\n #order = 0;\n #params = emptyParams;\n constructor(method, handler, children) {\n this.#children = children || /* @__PURE__ */ Object.create(null);\n this.#methods = [];\n if (method && handler) {\n const m = /* @__PURE__ */ Object.create(null);\n m[method] = { handler, possibleKeys: [], score: 0 };\n this.#methods = [m];\n }\n this.#patterns = [];\n }\n insert(method, path, handler) {\n this.#order = ++this.#order;\n let curNode = this;\n const parts = splitRoutingPath(path);\n const possibleKeys = [];\n for (let i = 0, len = parts.length; i < len; i++) {\n const p = parts[i];\n const nextP = parts[i + 1];\n const pattern = getPattern(p, nextP);\n const key = Array.isArray(pattern) ? pattern[0] : p;\n if (key in curNode.#children) {\n curNode = curNode.#children[key];\n if (pattern) {\n possibleKeys.push(pattern[1]);\n }\n continue;\n }\n curNode.#children[key] = new _Node();\n if (pattern) {\n curNode.#patterns.push(pattern);\n possibleKeys.push(pattern[1]);\n }\n curNode = curNode.#children[key];\n }\n curNode.#methods.push({\n [method]: {\n handler,\n possibleKeys: possibleKeys.filter((v, i, a) => a.indexOf(v) === i),\n score: this.#order\n }\n });\n return curNode;\n }\n #getHandlerSets(node, method, nodeParams, params) {\n const handlerSets = [];\n for (let i = 0, len = node.#methods.length; i < len; i++) {\n const m = node.#methods[i];\n const handlerSet = m[method] || m[METHOD_NAME_ALL];\n const processedSet = {};\n if (handlerSet !== void 0) {\n handlerSet.params = /* @__PURE__ */ Object.create(null);\n handlerSets.push(handlerSet);\n if (nodeParams !== emptyParams || params && params !== emptyParams) {\n for (let i2 = 0, len2 = handlerSet.possibleKeys.length; i2 < len2; i2++) {\n const key = handlerSet.possibleKeys[i2];\n const processed = processedSet[handlerSet.score];\n handlerSet.params[key] = params?.[key] && !processed ? params[key] : nodeParams[key] ?? params?.[key];\n processedSet[handlerSet.score] = true;\n }\n }\n }\n }\n return handlerSets;\n }\n search(method, path) {\n const handlerSets = [];\n this.#params = emptyParams;\n const curNode = this;\n let curNodes = [curNode];\n const parts = splitPath(path);\n const curNodesQueue = [];\n for (let i = 0, len = parts.length; i < len; i++) {\n const part = parts[i];\n const isLast = i === len - 1;\n const tempNodes = [];\n for (let j = 0, len2 = curNodes.length; j < len2; j++) {\n const node = curNodes[j];\n const nextNode = node.#children[part];\n if (nextNode) {\n nextNode.#params = node.#params;\n if (isLast) {\n if (nextNode.#children[\"*\"]) {\n handlerSets.push(\n ...this.#getHandlerSets(nextNode.#children[\"*\"], method, node.#params)\n );\n }\n handlerSets.push(...this.#getHandlerSets(nextNode, method, node.#params));\n } else {\n tempNodes.push(nextNode);\n }\n }\n for (let k = 0, len3 = node.#patterns.length; k < len3; k++) {\n const pattern = node.#patterns[k];\n const params = node.#params === emptyParams ? {} : { ...node.#params };\n if (pattern === \"*\") {\n const astNode = node.#children[\"*\"];\n if (astNode) {\n handlerSets.push(...this.#getHandlerSets(astNode, method, node.#params));\n astNode.#params = params;\n tempNodes.push(astNode);\n }\n continue;\n }\n const [key, name, matcher] = pattern;\n if (!part && !(matcher instanceof RegExp)) {\n continue;\n }\n const child = node.#children[key];\n const restPathString = parts.slice(i).join(\"/\");\n if (matcher instanceof RegExp) {\n const m = matcher.exec(restPathString);\n if (m) {\n params[name] = m[0];\n handlerSets.push(...this.#getHandlerSets(child, method, node.#params, params));\n if (Object.keys(child.#children).length) {\n child.#params = params;\n const componentCount = m[0].match(/\\//)?.length ?? 0;\n const targetCurNodes = curNodesQueue[componentCount] ||= [];\n targetCurNodes.push(child);\n }\n continue;\n }\n }\n if (matcher === true || matcher.test(part)) {\n params[name] = part;\n if (isLast) {\n handlerSets.push(...this.#getHandlerSets(child, method, params, node.#params));\n if (child.#children[\"*\"]) {\n handlerSets.push(\n ...this.#getHandlerSets(child.#children[\"*\"], method, params, node.#params)\n );\n }\n } else {\n child.#params = params;\n tempNodes.push(child);\n }\n }\n }\n }\n curNodes = tempNodes.concat(curNodesQueue.shift() ?? []);\n }\n if (handlerSets.length > 1) {\n handlerSets.sort((a, b) => {\n return a.score - b.score;\n });\n }\n return [handlerSets.map(({ handler, params }) => [handler, params])];\n }\n};\nexport {\n Node\n};\n", "// src/router/trie-router/router.ts\nimport { checkOptionalParameter } from \"../../utils/url.js\";\nimport { Node } from \"./node.js\";\nvar TrieRouter = class {\n name = \"TrieRouter\";\n #node;\n constructor() {\n this.#node = new Node();\n }\n add(method, path, handler) {\n const results = checkOptionalParameter(path);\n if (results) {\n for (let i = 0, len = results.length; i < len; i++) {\n this.#node.insert(method, results[i], handler);\n }\n return;\n }\n this.#node.insert(method, path, handler);\n }\n match(method, path) {\n return this.#node.search(method, path);\n }\n};\nexport {\n TrieRouter\n};\n", "// src/hono.ts\nimport { HonoBase } from \"./hono-base.js\";\nimport { RegExpRouter } from \"./router/reg-exp-router/index.js\";\nimport { SmartRouter } from \"./router/smart-router/index.js\";\nimport { TrieRouter } from \"./router/trie-router/index.js\";\nvar Hono = class extends HonoBase {\n /**\n * Creates an instance of the Hono class.\n *\n * @param options - Optional configuration options for the Hono instance.\n */\n constructor(options = {}) {\n super(options);\n this.router = options.router ?? new SmartRouter({\n routers: [new RegExpRouter(), new TrieRouter()]\n });\n }\n};\nexport {\n Hono\n};\n", "// src/middleware/cors/index.ts\nvar cors = (options) => {\n const defaults = {\n origin: \"*\",\n allowMethods: [\"GET\", \"HEAD\", \"PUT\", \"POST\", \"DELETE\", \"PATCH\"],\n allowHeaders: [],\n exposeHeaders: []\n };\n const opts = {\n ...defaults,\n ...options\n };\n const findAllowOrigin = ((optsOrigin) => {\n if (typeof optsOrigin === \"string\") {\n if (optsOrigin === \"*\") {\n return () => optsOrigin;\n } else {\n return (origin) => optsOrigin === origin ? origin : null;\n }\n } else if (typeof optsOrigin === \"function\") {\n return optsOrigin;\n } else {\n return (origin) => optsOrigin.includes(origin) ? origin : null;\n }\n })(opts.origin);\n const findAllowMethods = ((optsAllowMethods) => {\n if (typeof optsAllowMethods === \"function\") {\n return optsAllowMethods;\n } else if (Array.isArray(optsAllowMethods)) {\n return () => optsAllowMethods;\n } else {\n return () => [];\n }\n })(opts.allowMethods);\n return async function cors2(c, next) {\n function set(key, value) {\n c.res.headers.set(key, value);\n }\n const allowOrigin = await findAllowOrigin(c.req.header(\"origin\") || \"\", c);\n if (allowOrigin) {\n set(\"Access-Control-Allow-Origin\", allowOrigin);\n }\n if (opts.credentials) {\n set(\"Access-Control-Allow-Credentials\", \"true\");\n }\n if (opts.exposeHeaders?.length) {\n set(\"Access-Control-Expose-Headers\", opts.exposeHeaders.join(\",\"));\n }\n if (c.req.method === \"OPTIONS\") {\n if (opts.origin !== \"*\") {\n set(\"Vary\", \"Origin\");\n }\n if (opts.maxAge != null) {\n set(\"Access-Control-Max-Age\", opts.maxAge.toString());\n }\n const allowMethods = await findAllowMethods(c.req.header(\"origin\") || \"\", c);\n if (allowMethods.length) {\n set(\"Access-Control-Allow-Methods\", allowMethods.join(\",\"));\n }\n let headers = opts.allowHeaders;\n if (!headers?.length) {\n const requestHeaders = c.req.header(\"Access-Control-Request-Headers\");\n if (requestHeaders) {\n headers = requestHeaders.split(/\\s*,\\s*/);\n }\n }\n if (headers?.length) {\n set(\"Access-Control-Allow-Headers\", headers.join(\",\"));\n c.res.headers.append(\"Vary\", \"Access-Control-Request-Headers\");\n }\n c.res.headers.delete(\"Content-Length\");\n c.res.headers.delete(\"Content-Type\");\n return new Response(null, {\n headers: c.res.headers,\n status: 204,\n statusText: \"No Content\"\n });\n }\n await next();\n if (opts.origin !== \"*\") {\n c.header(\"Vary\", \"Origin\", { append: true });\n }\n };\n};\nexport {\n cors\n};\n", "// src/helper/factory/index.ts\nimport { Hono } from \"../../hono.js\";\nvar Factory = class {\n initApp;\n #defaultAppOptions;\n constructor(init) {\n this.initApp = init?.initApp;\n this.#defaultAppOptions = init?.defaultAppOptions;\n }\n createApp = (options) => {\n const app = new Hono(\n options && this.#defaultAppOptions ? { ...this.#defaultAppOptions, ...options } : options ?? this.#defaultAppOptions\n );\n if (this.initApp) {\n this.initApp(app);\n }\n return app;\n };\n createMiddleware = (middleware) => middleware;\n createHandlers = (...handlers) => {\n return handlers.filter((handler) => handler !== void 0);\n };\n};\nvar createFactory = (init) => new Factory(init);\nvar createMiddleware = (middleware) => middleware;\nexport {\n Factory,\n createFactory,\n createMiddleware\n};\n", "import { createMiddleware } from 'hono/factory';\nimport type { AuthContext, Env } from '../types';\n\ntype Variables = {\n\tauth?: AuthContext;\n};\n\nexport const authMiddleware = createMiddleware<{\n\tBindings: Env;\n\tVariables: Variables;\n}>(async (c, next) => {\n\tconst authHeader = c.req.header('Authorization');\n\n\tif (!authHeader || !authHeader.startsWith('Bearer ')) {\n\t\treturn c.json(\n\t\t\t{ error: 'unauthorized', message: 'Missing or invalid authorization header' },\n\t\t\t401,\n\t\t);\n\t}\n\n\tconst token = authHeader.substring(7);\n\n\t// Get the singleton AuthState Durable Object\n\tconst authStateId = c.env.AUTH_STATE.idFromName('global');\n\tconst authState = c.env.AUTH_STATE.get(authStateId);\n\n\t// Validate session\n\tconst response = await authState.fetch(\n\t\tnew Request('http://internal/validate-session', {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\tbody: JSON.stringify({ token }),\n\t\t}),\n\t);\n\n\tif (!response.ok) {\n\t\treturn c.json({ error: 'unauthorized', message: 'Invalid or expired session' }, 401);\n\t}\n\n\tconst auth = (await response.json()) as AuthContext;\n\tc.set('auth', auth);\n\n\treturn next();\n});\n", "import { Hono } from 'hono';\nimport type { Env } from '../types';\n\nexport const authRoutes = new Hono<{ Bindings: Env }>();\n\n// Register a new user\nauthRoutes.post('/register', async (c) => {\n\tconst body = await c.req.json<{ email: string; password: string; name: string }>();\n\n\tif (!body.email || !body.password || !body.name) {\n\t\treturn c.json(\n\t\t\t{ error: 'missing_fields', message: 'Email, password, and name are required' },\n\t\t\t400,\n\t\t);\n\t}\n\n\tconst authStateId = c.env.AUTH_STATE.idFromName('global');\n\tconst authState = c.env.AUTH_STATE.get(authStateId);\n\n\tconst response = await authState.fetch(\n\t\tnew Request('http://internal/register', {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\tbody: JSON.stringify(body),\n\t\t}),\n\t);\n\n\tconst data = await response.json();\n\treturn c.json(data, response.status as 200 | 400 | 409);\n});\n\n// Login\nauthRoutes.post('/login', async (c) => {\n\tconst body = await c.req.json<{ email: string; password: string }>();\n\n\tif (!body.email || !body.password) {\n\t\treturn c.json({ error: 'missing_fields', message: 'Email and password are required' }, 400);\n\t}\n\n\tconst authStateId = c.env.AUTH_STATE.idFromName('global');\n\tconst authState = c.env.AUTH_STATE.get(authStateId);\n\n\tconst response = await authState.fetch(\n\t\tnew Request('http://internal/login', {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\tbody: JSON.stringify(body),\n\t\t}),\n\t);\n\n\tconst data = await response.json();\n\treturn c.json(data, response.status as 200 | 400 | 401);\n});\n\n// Logout\nauthRoutes.post('/logout', async (c) => {\n\tconst authHeader = c.req.header('Authorization');\n\tconst token = authHeader?.startsWith('Bearer ') ? authHeader.substring(7) : null;\n\n\tif (!token) {\n\t\treturn c.json({ success: true });\n\t}\n\n\tconst authStateId = c.env.AUTH_STATE.idFromName('global');\n\tconst authState = c.env.AUTH_STATE.get(authStateId);\n\n\tawait authState.fetch(\n\t\tnew Request('http://internal/logout', {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\tbody: JSON.stringify({ token }),\n\t\t}),\n\t);\n\n\treturn c.json({ success: true });\n});\n\n// Get current user\nauthRoutes.get('/me', async (c) => {\n\tconst authHeader = c.req.header('Authorization');\n\n\tif (!authHeader || !authHeader.startsWith('Bearer ')) {\n\t\treturn c.json({ error: 'unauthorized', message: 'Missing authorization header' }, 401);\n\t}\n\n\tconst token = authHeader.substring(7);\n\n\tconst authStateId = c.env.AUTH_STATE.idFromName('global');\n\tconst authState = c.env.AUTH_STATE.get(authStateId);\n\n\tconst response = await authState.fetch(\n\t\tnew Request('http://internal/validate-session', {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\tbody: JSON.stringify({ token }),\n\t\t}),\n\t);\n\n\tif (!response.ok) {\n\t\treturn c.json({ error: 'unauthorized', message: 'Invalid or expired session' }, 401);\n\t}\n\n\tconst data = await response.json();\n\treturn c.json(data);\n});\n", "import { type Context, Hono } from 'hono';\nimport type { AuthContext, Env, Project } from '../types';\n\ntype Variables = {\n\tauth?: AuthContext;\n};\n\ntype AppContext = Context<{ Bindings: Env; Variables: Variables }>;\n\nexport const eventRoutes = new Hono<{ Bindings: Env; Variables: Variables }>();\n\n// Helper to get project and verify access\nasync function getProjectWithAccess(\n\tc: AppContext,\n\tslug: string,\n): Promise<{ project: Project } | Response> {\n\tconst auth = c.get('auth');\n\tif (!auth) {\n\t\treturn c.json({ error: 'unauthorized' }, 401);\n\t}\n\n\tconst authStateId = c.env.AUTH_STATE.idFromName('global');\n\tconst authState = c.env.AUTH_STATE.get(authStateId);\n\n\tconst response = await authState.fetch(\n\t\tnew Request('http://internal/get-project', {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\tbody: JSON.stringify({ slug, userId: auth.user.id }),\n\t\t}),\n\t);\n\n\tif (!response.ok) {\n\t\treturn c.json({ error: 'project_not_found' }, 404);\n\t}\n\n\treturn response.json();\n}\n\n// List events for an issue\n// GET /api/projects/:slug/issues/:issueId/events\neventRoutes.get('/:slug/issues/:issueId/events', async (c) => {\n\tconst slug = c.req.param('slug');\n\tconst issueId = c.req.param('issueId');\n\n\tconst projectResult = await getProjectWithAccess(c, slug);\n\tif (projectResult instanceof Response) {\n\t\treturn projectResult;\n\t}\n\n\tconst { project } = projectResult;\n\n\tconst cursor = c.req.query('cursor');\n\tconst limit = c.req.query('limit');\n\n\tconst projectStateId = c.env.PROJECT_STATE.idFromName(project.id);\n\tconst projectState = c.env.PROJECT_STATE.get(projectStateId);\n\n\tconst response = await projectState.fetch(\n\t\tnew Request('http://internal/issue/events', {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\tbody: JSON.stringify({\n\t\t\t\tissueId,\n\t\t\t\tcursor,\n\t\t\t\tlimit: limit ? parseInt(limit, 10) : undefined,\n\t\t\t}),\n\t\t}),\n\t);\n\n\tconst data = await response.json();\n\treturn c.json(data);\n});\n\n// Get a specific event\n// GET /api/projects/:slug/events/:eventId\neventRoutes.get('/:slug/events/:eventId', async (c) => {\n\tconst slug = c.req.param('slug');\n\tconst eventId = c.req.param('eventId');\n\n\tconst projectResult = await getProjectWithAccess(c, slug);\n\tif (projectResult instanceof Response) {\n\t\treturn projectResult;\n\t}\n\n\tconst { project } = projectResult;\n\n\tconst projectStateId = c.env.PROJECT_STATE.idFromName(project.id);\n\tconst projectState = c.env.PROJECT_STATE.get(projectStateId);\n\n\tconst response = await projectState.fetch(\n\t\tnew Request('http://internal/event', {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\tbody: JSON.stringify({ eventId }),\n\t\t}),\n\t);\n\n\tif (!response.ok) {\n\t\tconst error = await response.json();\n\t\treturn c.json(error, response.status as 404);\n\t}\n\n\tconst data = await response.json();\n\treturn c.json(data);\n});\n\n// Get latest events for a project\n// GET /api/projects/:slug/events/latest\neventRoutes.get('/:slug/events/latest', async (c) => {\n\tconst slug = c.req.param('slug');\n\n\tconst projectResult = await getProjectWithAccess(c, slug);\n\tif (projectResult instanceof Response) {\n\t\treturn projectResult;\n\t}\n\n\tconst { project } = projectResult;\n\n\tconst limit = c.req.query('limit');\n\n\tconst projectStateId = c.env.PROJECT_STATE.idFromName(project.id);\n\tconst projectState = c.env.PROJECT_STATE.get(projectStateId);\n\n\tconst response = await projectState.fetch(\n\t\tnew Request('http://internal/events/latest', {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\tbody: JSON.stringify({\n\t\t\t\tlimit: limit ? parseInt(limit, 10) : undefined,\n\t\t\t}),\n\t\t}),\n\t);\n\n\tconst data = await response.json();\n\treturn c.json(data);\n});\n", "import type { EnvelopeHeader, EnvelopeItem, ParsedEnvelope, SentryEvent } from '../types';\n\n/**\n * Parse a Sentry envelope.\n * Envelope format:\n * ```\n * {header_json}\\n\n * {item_header_json}\\n\n * {item_payload_json}\\n\n * {item_header_json}\\n\n * {item_payload_json}\\n\n * ...\n * ```\n */\nexport function parseEnvelope(body: string): ParsedEnvelope {\n\tconst lines = body.split('\\n');\n\n\tif (lines.length < 1) {\n\t\tthrow new Error('Invalid envelope: empty body');\n\t}\n\n\t// Parse envelope header (first line)\n\tlet header: EnvelopeHeader;\n\ttry {\n\t\theader = JSON.parse(lines[0]);\n\t} catch {\n\t\tthrow new Error('Invalid envelope: failed to parse header');\n\t}\n\n\tconst items: EnvelopeItem[] = [];\n\tlet i = 1;\n\n\t// Parse items (pairs of header + payload)\n\twhile (i < lines.length) {\n\t\t// Skip empty lines\n\t\tif (!lines[i] || lines[i].trim() === '') {\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Parse item header\n\t\tlet itemHeader: { type: string; length?: number; content_type?: string };\n\t\ttry {\n\t\t\titemHeader = JSON.parse(lines[i]);\n\t\t} catch {\n\t\t\t// May be end of envelope or malformed\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\n\t\ti++;\n\n\t\t// Parse item payload\n\t\tif (i >= lines.length) {\n\t\t\tbreak;\n\t\t}\n\n\t\tlet payload: unknown;\n\n\t\tif (itemHeader.length !== undefined) {\n\t\t\t// Binary/fixed-length payload\n\t\t\tconst payloadStr = lines[i].substring(0, itemHeader.length);\n\t\t\ttry {\n\t\t\t\tpayload = JSON.parse(payloadStr);\n\t\t\t} catch {\n\t\t\t\tpayload = payloadStr;\n\t\t\t}\n\t\t} else {\n\t\t\t// JSON payload\n\t\t\ttry {\n\t\t\t\tpayload = JSON.parse(lines[i]);\n\t\t\t} catch {\n\t\t\t\tpayload = lines[i];\n\t\t\t}\n\t\t}\n\n\t\titems.push({\n\t\t\ttype: itemHeader.type as EnvelopeItem['type'],\n\t\t\tpayload,\n\t\t});\n\n\t\ti++;\n\t}\n\n\treturn { header, items };\n}\n\n/**\n * Parse DSN from various sources.\n * DSN format: https://{public_key}@{host}/{project_id}\n */\nexport function parseDSN(dsn: string): {\n\tprotocol: string;\n\tpublicKey: string;\n\thost: string;\n\tprojectId: string;\n} | null {\n\ttry {\n\t\tconst url = new URL(dsn);\n\t\tconst publicKey = url.username;\n\t\tconst pathParts = url.pathname.split('/').filter(Boolean);\n\t\tconst projectId = pathParts[pathParts.length - 1];\n\n\t\tif (!publicKey || !projectId) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn {\n\t\t\tprotocol: url.protocol.replace(':', ''),\n\t\t\tpublicKey,\n\t\t\thost: url.host,\n\t\t\tprojectId,\n\t\t};\n\t} catch {\n\t\treturn null;\n\t}\n}\n\n/**\n * Extract public key from Sentry auth header.\n * Format: Sentry sentry_version=7, sentry_key={key}, ...\n */\nexport function extractKeyFromAuthHeader(header: string): string | null {\n\tif (!header.startsWith('Sentry ')) {\n\t\treturn null;\n\t}\n\n\tconst parts = header.substring(7).split(',');\n\tfor (const part of parts) {\n\t\tconst [key, value] = part.trim().split('=');\n\t\tif (key === 'sentry_key') {\n\t\t\treturn value;\n\t\t}\n\t}\n\n\treturn null;\n}\n\n/**\n * Validate and extract event items from an envelope.\n */\nexport function extractEvents(envelope: ParsedEnvelope): SentryEvent[] {\n\tconst events: SentryEvent[] = [];\n\n\tfor (const item of envelope.items) {\n\t\tif (item.type === 'event' || item.type === 'transaction') {\n\t\t\tconst event = item.payload as SentryEvent;\n\n\t\t\t// Ensure event_id\n\t\t\tif (!event.event_id) {\n\t\t\t\tevent.event_id = crypto.randomUUID().replace(/-/g, '');\n\t\t\t}\n\n\t\t\t// Ensure timestamp\n\t\t\tif (!event.timestamp) {\n\t\t\t\tevent.timestamp = new Date().toISOString();\n\t\t\t}\n\n\t\t\tevents.push(event);\n\t\t}\n\t}\n\n\treturn events;\n}\n\n/**\n * Decompress gzip-encoded body if necessary.\n */\nexport async function maybeDecompress(\n\tbody: ArrayBuffer,\n\tcontentEncoding: string | null,\n): Promise<string> {\n\tif (contentEncoding === 'gzip') {\n\t\tconst ds = new DecompressionStream('gzip');\n\t\tconst decompressed = new Response(body).body!.pipeThrough(ds);\n\t\treturn await new Response(decompressed).text();\n\t}\n\n\treturn new TextDecoder().decode(body);\n}\n", "import { type Context, Hono } from 'hono';\nimport {\n\textractEvents,\n\textractKeyFromAuthHeader,\n\tmaybeDecompress,\n\tparseEnvelope,\n} from '../lib/envelope-parser';\nimport type { Env, Project } from '../types';\n\nexport const ingestionRoutes = new Hono<{ Bindings: Env }>();\n\n// Main envelope ingestion endpoint\n// POST /api/{project_id}/envelope/\ningestionRoutes.post('/:projectId/envelope', handleIngestion);\ningestionRoutes.post('/:projectId/envelope/', handleIngestion);\n\n// Legacy store endpoint (for older SDKs)\n// POST /api/{project_id}/store/\ningestionRoutes.post('/:projectId/store', handleIngestion);\ningestionRoutes.post('/:projectId/store/', handleIngestion);\n\nasync function handleIngestion(c: Context<{ Bindings: Env }>): Promise<Response> {\n\tconst projectId = c.req.param('projectId');\n\n\t// Extract public key from various sources\n\tlet publicKey: string | null = null;\n\n\t// 1. Query parameter: ?sentry_key=xxx\n\tconst sentryKeyParam = c.req.query('sentry_key');\n\tif (sentryKeyParam) {\n\t\tpublicKey = sentryKeyParam;\n\t}\n\n\t// 2. X-Sentry-Auth header: Sentry sentry_version=7, sentry_key=xxx, ...\n\tif (!publicKey) {\n\t\tconst authHeader = c.req.header('X-Sentry-Auth');\n\t\tif (authHeader) {\n\t\t\tpublicKey = extractKeyFromAuthHeader(authHeader);\n\t\t}\n\t}\n\n\t// 3. Authorization header (basic auth style)\n\tif (!publicKey) {\n\t\tconst authHeader = c.req.header('Authorization');\n\t\tif (authHeader?.startsWith('Basic ')) {\n\t\t\ttry {\n\t\t\t\tconst decoded = atob(authHeader.substring(6));\n\t\t\t\tpublicKey = decoded.split(':')[0];\n\t\t\t} catch {\n\t\t\t\t// Invalid base64\n\t\t\t}\n\t\t}\n\t}\n\n\tif (!publicKey) {\n\t\treturn c.json({ error: 'missing_auth', message: 'No authentication provided' }, 401);\n\t}\n\n\t// Validate the public key against the project\n\tconst authStateId = c.env.AUTH_STATE.idFromName('global');\n\tconst authState = c.env.AUTH_STATE.get(authStateId);\n\n\tconst projectResponse = await authState.fetch(\n\t\tnew Request('http://internal/get-project-by-key', {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\tbody: JSON.stringify({ publicKey }),\n\t\t}),\n\t);\n\n\tif (!projectResponse.ok) {\n\t\treturn c.json({ error: 'invalid_auth', message: 'Invalid DSN' }, 401);\n\t}\n\n\tconst projectData = (await projectResponse.json()) as { project: Project };\n\tconst project = projectData.project;\n\n\t// Verify project ID matches (if provided in URL)\n\tif (projectId && projectId !== project.id) {\n\t\treturn c.json({ error: 'project_mismatch', message: 'Project ID does not match DSN' }, 400);\n\t}\n\n\t// Parse the request body\n\tconst contentEncoding = c.req.header('Content-Encoding') ?? null;\n\tconst contentType = c.req.header('Content-Type') || '';\n\tconst bodyBuffer = await c.req.arrayBuffer();\n\n\tlet bodyText: string;\n\ttry {\n\t\tbodyText = await maybeDecompress(bodyBuffer, contentEncoding);\n\t} catch {\n\t\treturn c.json({ error: 'decompression_failed', message: 'Failed to decompress body' }, 400);\n\t}\n\n\t// Parse envelope or raw event\n\tlet events;\n\ttry {\n\t\tif (contentType.includes('application/json') && !bodyText.includes('\\n{')) {\n\t\t\t// Raw JSON event (legacy store endpoint)\n\t\t\tconst event = JSON.parse(bodyText);\n\t\t\tevents = [event];\n\t\t} else {\n\t\t\t// Envelope format\n\t\t\tconst envelope = parseEnvelope(bodyText);\n\t\t\tevents = extractEvents(envelope);\n\t\t}\n\t} catch (error) {\n\t\tconsole.error('Parse error:', error);\n\t\treturn c.json({ error: 'parse_failed', message: 'Failed to parse envelope' }, 400);\n\t}\n\n\tif (events.length === 0) {\n\t\treturn c.json({ id: null, message: 'No events in envelope' });\n\t}\n\n\t// Get the ProjectState Durable Object for this project\n\tconst projectStateId = c.env.PROJECT_STATE.idFromName(project.id);\n\tconst projectState = c.env.PROJECT_STATE.get(projectStateId);\n\n\t// Ingest each event\n\tconst results = [];\n\tfor (const event of events) {\n\t\ttry {\n\t\t\tconst response = await projectState.fetch(\n\t\t\t\tnew Request('http://internal/ingest', {\n\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\t\t\tbody: JSON.stringify(event),\n\t\t\t\t}),\n\t\t\t);\n\n\t\t\tif (response.ok) {\n\t\t\t\tconst result = await response.json();\n\t\t\t\tresults.push(result);\n\t\t\t} else {\n\t\t\t\tconsole.error('Ingest error:', await response.text());\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error('Ingest error:', error);\n\t\t}\n\t}\n\n\t// Return the first event ID (standard Sentry response)\n\tconst firstResult = results[0] as { eventId: string } | undefined;\n\treturn c.json({ id: firstResult?.eventId || events[0]?.event_id || null });\n}\n\n// Security endpoint - returns project configuration\n// GET /api/{project_id}/security/\ningestionRoutes.get('/:projectId/security', async (c) => {\n\t// Return CORS headers for browser SDKs\n\treturn c.json({\n\t\tallowedDomains: ['*'],\n\t\tscrubData: true,\n\t});\n});\n", "import { type Context, Hono } from 'hono';\nimport type { AuthContext, Env, Project } from '../types';\n\ntype Variables = {\n\tauth?: AuthContext;\n};\n\ntype AppContext = Context<{ Bindings: Env; Variables: Variables }>;\n\nexport const issueRoutes = new Hono<{ Bindings: Env; Variables: Variables }>();\n\n// Helper to get project and verify access\nasync function getProjectWithAccess(\n\tc: AppContext,\n\tslug: string,\n): Promise<{ project: Project } | Response> {\n\tconst auth = c.get('auth');\n\tif (!auth) {\n\t\treturn c.json({ error: 'unauthorized' }, 401);\n\t}\n\n\tconst authStateId = c.env.AUTH_STATE.idFromName('global');\n\tconst authState = c.env.AUTH_STATE.get(authStateId);\n\n\tconst response = await authState.fetch(\n\t\tnew Request('http://internal/get-project', {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\tbody: JSON.stringify({ slug, userId: auth.user.id }),\n\t\t}),\n\t);\n\n\tif (!response.ok) {\n\t\treturn c.json({ error: 'project_not_found' }, 404);\n\t}\n\n\treturn response.json();\n}\n\n// List issues for a project\n// GET /api/projects/:slug/issues\nissueRoutes.get('/:slug/issues', async (c) => {\n\tconst slug = c.req.param('slug');\n\tconst projectResult = await getProjectWithAccess(c, slug);\n\n\tif (projectResult instanceof Response) {\n\t\treturn projectResult;\n\t}\n\n\tconst { project } = projectResult;\n\n\t// Get query parameters\n\tconst status = c.req.query('status');\n\tconst level = c.req.query('level');\n\tconst environment = c.req.query('environment');\n\tconst query = c.req.query('query');\n\tconst sort = c.req.query('sort');\n\tconst cursor = c.req.query('cursor');\n\tconst limit = c.req.query('limit');\n\n\tconst projectStateId = c.env.PROJECT_STATE.idFromName(project.id);\n\tconst projectState = c.env.PROJECT_STATE.get(projectStateId);\n\n\tconst response = await projectState.fetch(\n\t\tnew Request('http://internal/issues', {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\tbody: JSON.stringify({\n\t\t\t\tstatus,\n\t\t\t\tlevel,\n\t\t\t\tenvironment,\n\t\t\t\tquery,\n\t\t\t\tsort,\n\t\t\t\tcursor,\n\t\t\t\tlimit: limit ? parseInt(limit, 10) : undefined,\n\t\t\t}),\n\t\t}),\n\t);\n\n\tconst data = await response.json();\n\treturn c.json(data);\n});\n\n// Get a specific issue\n// GET /api/projects/:slug/issues/:issueId\nissueRoutes.get('/:slug/issues/:issueId', async (c) => {\n\tconst slug = c.req.param('slug');\n\tconst issueId = c.req.param('issueId');\n\n\tconst projectResult = await getProjectWithAccess(c, slug);\n\tif (projectResult instanceof Response) {\n\t\treturn projectResult;\n\t}\n\n\tconst { project } = projectResult;\n\n\tconst projectStateId = c.env.PROJECT_STATE.idFromName(project.id);\n\tconst projectState = c.env.PROJECT_STATE.get(projectStateId);\n\n\tconst response = await projectState.fetch(\n\t\tnew Request('http://internal/issue', {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\tbody: JSON.stringify({ issueId }),\n\t\t}),\n\t);\n\n\tif (!response.ok) {\n\t\tconst error = await response.json();\n\t\treturn c.json(error, response.status as 404);\n\t}\n\n\tconst data = await response.json();\n\treturn c.json(data);\n});\n\n// Update an issue (status, assignee)\n// PUT/PATCH /api/projects/:slug/issues/:issueId\nconst updateIssueHandler = async (c: AppContext) => {\n\tconst slug = c.req.param('slug');\n\tconst issueId = c.req.param('issueId');\n\n\tconst projectResult = await getProjectWithAccess(c, slug);\n\tif (projectResult instanceof Response) {\n\t\treturn projectResult;\n\t}\n\n\tconst { project } = projectResult;\n\tconst body = await c.req.json<{ status?: string; assignee?: string }>();\n\n\tconst projectStateId = c.env.PROJECT_STATE.idFromName(project.id);\n\tconst projectState = c.env.PROJECT_STATE.get(projectStateId);\n\n\tconst response = await projectState.fetch(\n\t\tnew Request('http://internal/issue/update', {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\tbody: JSON.stringify({\n\t\t\t\tissueId,\n\t\t\t\tstatus: body.status,\n\t\t\t\tassignee: body.assignee,\n\t\t\t}),\n\t\t}),\n\t);\n\n\tconst data = await response.json();\n\treturn c.json(data, response.status as 200 | 400);\n};\n\nissueRoutes.patch('/:slug/issues/:issueId', updateIssueHandler);\nissueRoutes.put('/:slug/issues/:issueId', updateIssueHandler);\n\n// Delete an issue\n// DELETE /api/projects/:slug/issues/:issueId\nissueRoutes.delete('/:slug/issues/:issueId', async (c) => {\n\tconst slug = c.req.param('slug');\n\tconst issueId = c.req.param('issueId');\n\n\tconst projectResult = await getProjectWithAccess(c, slug);\n\tif (projectResult instanceof Response) {\n\t\treturn projectResult;\n\t}\n\n\tconst { project } = projectResult;\n\n\tconst projectStateId = c.env.PROJECT_STATE.idFromName(project.id);\n\tconst projectState = c.env.PROJECT_STATE.get(projectStateId);\n\n\tconst response = await projectState.fetch(\n\t\tnew Request('http://internal/issue/delete', {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\tbody: JSON.stringify({ issueId }),\n\t\t}),\n\t);\n\n\tconst data = await response.json();\n\treturn c.json(data);\n});\n\n// Get project stats\n// GET /api/projects/:slug/stats\nissueRoutes.get('/:slug/stats', async (c) => {\n\tconst slug = c.req.param('slug');\n\n\tconst projectResult = await getProjectWithAccess(c, slug);\n\tif (projectResult instanceof Response) {\n\t\treturn projectResult;\n\t}\n\n\tconst { project } = projectResult;\n\n\tconst interval = c.req.query('interval') as '1h' | '1d' | '1w' | undefined;\n\tconst start = c.req.query('start');\n\tconst end = c.req.query('end');\n\n\tconst projectStateId = c.env.PROJECT_STATE.idFromName(project.id);\n\tconst projectState = c.env.PROJECT_STATE.get(projectStateId);\n\n\tconst response = await projectState.fetch(\n\t\tnew Request('http://internal/stats', {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\tbody: JSON.stringify({ interval, start, end }),\n\t\t}),\n\t);\n\n\tconst data = await response.json();\n\treturn c.json(data);\n});\n", "import { Hono } from 'hono';\nimport type { AuthContext, Env } from '../types';\n\ntype Variables = {\n\tauth?: AuthContext;\n};\n\nexport const projectRoutes = new Hono<{ Bindings: Env; Variables: Variables }>();\n\n// List all projects for the current user\nprojectRoutes.get('/', async (c) => {\n\tconst auth = c.get('auth');\n\tif (!auth) {\n\t\treturn c.json({ error: 'unauthorized' }, 401);\n\t}\n\n\tconst authStateId = c.env.AUTH_STATE.idFromName('global');\n\tconst authState = c.env.AUTH_STATE.get(authStateId);\n\n\tconst response = await authState.fetch(\n\t\tnew Request('http://internal/list-projects', {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\tbody: JSON.stringify({ userId: auth.user.id }),\n\t\t}),\n\t);\n\n\tconst data = await response.json();\n\treturn c.json(data);\n});\n\n// Create a new project\nprojectRoutes.post('/', async (c) => {\n\tconst auth = c.get('auth');\n\tif (!auth) {\n\t\treturn c.json({ error: 'unauthorized' }, 401);\n\t}\n\n\tconst body = await c.req.json<{ name: string; platform?: string }>();\n\n\tif (!body.name) {\n\t\treturn c.json({ error: 'missing_fields', message: 'Name is required' }, 400);\n\t}\n\n\tconst authStateId = c.env.AUTH_STATE.idFromName('global');\n\tconst authState = c.env.AUTH_STATE.get(authStateId);\n\n\tconst response = await authState.fetch(\n\t\tnew Request('http://internal/create-project', {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\tbody: JSON.stringify({\n\t\t\t\tname: body.name,\n\t\t\t\tplatform: body.platform,\n\t\t\t\tuserId: auth.user.id,\n\t\t\t}),\n\t\t}),\n\t);\n\n\tconst data = (await response.json()) as { project: { id: string; publicKey: string } };\n\n\t// Generate DSN\n\tconst host = new URL(c.req.url).host;\n\tconst dsn = `https://${data.project.publicKey}@${host}/${data.project.id}`;\n\n\treturn c.json({ ...data, dsn }, response.status as 200 | 400);\n});\n\n// Get a specific project by slug\nprojectRoutes.get('/:slug', async (c) => {\n\tconst auth = c.get('auth');\n\tif (!auth) {\n\t\treturn c.json({ error: 'unauthorized' }, 401);\n\t}\n\n\tconst slug = c.req.param('slug');\n\n\tconst authStateId = c.env.AUTH_STATE.idFromName('global');\n\tconst authState = c.env.AUTH_STATE.get(authStateId);\n\n\tconst response = await authState.fetch(\n\t\tnew Request('http://internal/get-project', {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\tbody: JSON.stringify({ slug, userId: auth.user.id }),\n\t\t}),\n\t);\n\n\tif (!response.ok) {\n\t\tconst error = await response.json();\n\t\treturn c.json(error, response.status as 404);\n\t}\n\n\tconst data = (await response.json()) as { project: { id: string; publicKey: string } };\n\n\t// Generate DSN\n\tconst host = new URL(c.req.url).host;\n\tconst dsn = `https://${data.project.publicKey}@${host}/${data.project.id}`;\n\n\treturn c.json({ ...data, dsn });\n});\n\n// Update a project\nprojectRoutes.patch('/:slug', async (c) => {\n\tconst auth = c.get('auth');\n\tif (!auth) {\n\t\treturn c.json({ error: 'unauthorized' }, 401);\n\t}\n\n\t// For now, we don't support updates\n\treturn c.json({ error: 'not_implemented' }, 501);\n});\n\n// Delete a project\nprojectRoutes.delete('/:slug', async (c) => {\n\tconst auth = c.get('auth');\n\tif (!auth) {\n\t\treturn c.json({ error: 'unauthorized' }, 401);\n\t}\n\n\tconst slug = c.req.param('slug');\n\n\tconst authStateId = c.env.AUTH_STATE.idFromName('global');\n\tconst authState = c.env.AUTH_STATE.get(authStateId);\n\n\t// First get the project to get its ID\n\tconst getResponse = await authState.fetch(\n\t\tnew Request('http://internal/get-project', {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\tbody: JSON.stringify({ slug, userId: auth.user.id }),\n\t\t}),\n\t);\n\n\tif (!getResponse.ok) {\n\t\tconst error = await getResponse.json();\n\t\treturn c.json(error, getResponse.status as 404);\n\t}\n\n\tconst projectData = (await getResponse.json()) as { project: { id: string } };\n\n\t// Delete the project\n\tconst deleteResponse = await authState.fetch(\n\t\tnew Request('http://internal/delete-project', {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\tbody: JSON.stringify({\n\t\t\t\tprojectId: projectData.project.id,\n\t\t\t\tuserId: auth.user.id,\n\t\t\t}),\n\t\t}),\n\t);\n\n\tconst data = await deleteResponse.json();\n\treturn c.json(data, deleteResponse.status as 200 | 403);\n});\n", "import { DurableObject } from 'cloudflare:workers';\nimport type { Env, Project, Session, User } from '../types';\n\nconst SCHEMA = `\nCREATE TABLE IF NOT EXISTS users (\n id TEXT PRIMARY KEY,\n email TEXT UNIQUE NOT NULL,\n password_hash TEXT NOT NULL,\n name TEXT NOT NULL,\n role TEXT NOT NULL DEFAULT 'member',\n created_at TEXT NOT NULL,\n updated_at TEXT NOT NULL\n);\n\nCREATE TABLE IF NOT EXISTS sessions (\n id TEXT PRIMARY KEY,\n user_id TEXT NOT NULL,\n expires_at TEXT NOT NULL,\n created_at TEXT NOT NULL,\n FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE\n);\nCREATE INDEX IF NOT EXISTS idx_sessions_user ON sessions(user_id);\nCREATE INDEX IF NOT EXISTS idx_sessions_expires ON sessions(expires_at);\n\nCREATE TABLE IF NOT EXISTS projects (\n id TEXT PRIMARY KEY,\n name TEXT NOT NULL,\n slug TEXT UNIQUE NOT NULL,\n platform TEXT NOT NULL DEFAULT 'javascript',\n public_key TEXT UNIQUE NOT NULL,\n created_at TEXT NOT NULL,\n created_by TEXT NOT NULL,\n FOREIGN KEY (created_by) REFERENCES users(id)\n);\nCREATE INDEX IF NOT EXISTS idx_projects_slug ON projects(slug);\nCREATE INDEX IF NOT EXISTS idx_projects_public_key ON projects(public_key);\n\nCREATE TABLE IF NOT EXISTS project_members (\n project_id TEXT NOT NULL,\n user_id TEXT NOT NULL,\n role TEXT NOT NULL DEFAULT 'member',\n created_at TEXT NOT NULL,\n PRIMARY KEY (project_id, user_id),\n FOREIGN KEY (project_id) REFERENCES projects(id) ON DELETE CASCADE,\n FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE\n);\n`;\n\nexport class AuthState extends DurableObject<Env> {\n\tprivate sql: SqlStorage;\n\tprivate initialized = false;\n\n\tconstructor(ctx: DurableObjectState, env: Env) {\n\t\tsuper(ctx, env);\n\t\tthis.sql = ctx.storage.sql;\n\t}\n\n\tprivate async ensureSchema(): Promise<void> {\n\t\tif (this.initialized) return;\n\t\tthis.sql.exec(SCHEMA);\n\t\tthis.initialized = true;\n\t}\n\n\tasync fetch(request: Request): Promise<Response> {\n\t\tawait this.ensureSchema();\n\n\t\tconst url = new URL(request.url);\n\t\tconst path = url.pathname;\n\n\t\ttry {\n\t\t\tswitch (path) {\n\t\t\t\tcase '/register':\n\t\t\t\t\treturn this.handleRegister(request);\n\t\t\t\tcase '/login':\n\t\t\t\t\treturn this.handleLogin(request);\n\t\t\t\tcase '/logout':\n\t\t\t\t\treturn this.handleLogout(request);\n\t\t\t\tcase '/validate-session':\n\t\t\t\t\treturn this.handleValidateSession(request);\n\t\t\t\tcase '/me':\n\t\t\t\t\treturn this.handleGetMe(request);\n\t\t\t\tcase '/create-project':\n\t\t\t\t\treturn this.handleCreateProject(request);\n\t\t\t\tcase '/list-projects':\n\t\t\t\t\treturn this.handleListProjects(request);\n\t\t\t\tcase '/get-project':\n\t\t\t\t\treturn this.handleGetProject(request);\n\t\t\t\tcase '/get-project-by-key':\n\t\t\t\t\treturn this.handleGetProjectByKey(request);\n\t\t\t\tcase '/delete-project':\n\t\t\t\t\treturn this.handleDeleteProject(request);\n\t\t\t\tcase '/check-access':\n\t\t\t\t\treturn this.handleCheckAccess(request);\n\t\t\t\tdefault:\n\t\t\t\t\treturn new Response(JSON.stringify({ error: 'not_found' }), {\n\t\t\t\t\t\tstatus: 404,\n\t\t\t\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\t\t\t});\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error('AuthState error:', error);\n\t\t\treturn new Response(\n\t\t\t\tJSON.stringify({\n\t\t\t\t\terror: 'internal_error',\n\t\t\t\t\tmessage: error instanceof Error ? error.message : 'Unknown error',\n\t\t\t\t}),\n\t\t\t\t{ status: 500, headers: { 'Content-Type': 'application/json' } },\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate async handleRegister(request: Request): Promise<Response> {\n\t\tconst { email, password, name } = (await request.json()) as {\n\t\t\temail: string;\n\t\t\tpassword: string;\n\t\t\tname: string;\n\t\t};\n\n\t\tif (!email || !password || !name) {\n\t\t\treturn this.jsonResponse(\n\t\t\t\t{ error: 'missing_fields', message: 'Email, password, and name are required' },\n\t\t\t\t400,\n\t\t\t);\n\t\t}\n\n\t\t// Check if user already exists\n\t\tconst existing = this.sql.exec('SELECT id FROM users WHERE email = ?', email).toArray();\n\t\tif (existing.length > 0) {\n\t\t\treturn this.jsonResponse(\n\t\t\t\t{ error: 'user_exists', message: 'User with this email already exists' },\n\t\t\t\t409,\n\t\t\t);\n\t\t}\n\n\t\t// Check if this is the first user (becomes admin)\n\t\tconst userCount = this.sql.exec('SELECT COUNT(*) as count FROM users').one();\n\t\tconst isFirstUser = (userCount?.count as number) === 0;\n\n\t\t// Hash password\n\t\tconst passwordHash = await this.hashPassword(password);\n\n\t\t// Create user\n\t\tconst userId = crypto.randomUUID();\n\t\tconst now = new Date().toISOString();\n\t\tconst role = isFirstUser ? 'admin' : 'member';\n\n\t\tthis.sql.exec(\n\t\t\t'INSERT INTO users (id, email, password_hash, name, role, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?)',\n\t\t\tuserId,\n\t\t\temail.toLowerCase(),\n\t\t\tpasswordHash,\n\t\t\tname,\n\t\t\trole,\n\t\t\tnow,\n\t\t\tnow,\n\t\t);\n\n\t\t// Create session\n\t\tconst session = await this.createSession(userId);\n\n\t\tconst user: User = {\n\t\t\tid: userId,\n\t\t\temail: email.toLowerCase(),\n\t\t\tname,\n\t\t\trole: role as 'admin' | 'member',\n\t\t\tcreatedAt: now,\n\t\t\tupdatedAt: now,\n\t\t};\n\n\t\treturn this.jsonResponse({ user, token: session.id });\n\t}\n\n\tprivate async handleLogin(request: Request): Promise<Response> {\n\t\tconst { email, password } = (await request.json()) as {\n\t\t\temail: string;\n\t\t\tpassword: string;\n\t\t};\n\n\t\tif (!email || !password) {\n\t\t\treturn this.jsonResponse(\n\t\t\t\t{ error: 'missing_fields', message: 'Email and password are required' },\n\t\t\t\t400,\n\t\t\t);\n\t\t}\n\n\t\t// Find user\n\t\tconst userRows = this.sql\n\t\t\t.exec(\n\t\t\t\t'SELECT id, email, password_hash, name, role, created_at, updated_at FROM users WHERE email = ?',\n\t\t\t\temail.toLowerCase(),\n\t\t\t)\n\t\t\t.toArray();\n\n\t\tif (userRows.length === 0) {\n\t\t\treturn this.jsonResponse(\n\t\t\t\t{ error: 'invalid_credentials', message: 'Invalid email or password' },\n\t\t\t\t401,\n\t\t\t);\n\t\t}\n\n\t\tconst userRow = userRows[0];\n\n\t\t// Verify password\n\t\tconst valid = await this.verifyPassword(password, userRow.password_hash as string);\n\t\tif (!valid) {\n\t\t\treturn this.jsonResponse(\n\t\t\t\t{ error: 'invalid_credentials', message: 'Invalid email or password' },\n\t\t\t\t401,\n\t\t\t);\n\t\t}\n\n\t\t// Create session\n\t\tconst session = await this.createSession(userRow.id as string);\n\n\t\tconst user: User = {\n\t\t\tid: userRow.id as string,\n\t\t\temail: userRow.email as string,\n\t\t\tname: userRow.name as string,\n\t\t\trole: userRow.role as 'admin' | 'member',\n\t\t\tcreatedAt: userRow.created_at as string,\n\t\t\tupdatedAt: userRow.updated_at as string,\n\t\t};\n\n\t\treturn this.jsonResponse({ user, token: session.id });\n\t}\n\n\tprivate async handleLogout(request: Request): Promise<Response> {\n\t\tconst { token } = (await request.json()) as { token: string };\n\n\t\tif (token) {\n\t\t\tthis.sql.exec('DELETE FROM sessions WHERE id = ?', token);\n\t\t}\n\n\t\treturn this.jsonResponse({ success: true });\n\t}\n\n\tprivate async handleValidateSession(request: Request): Promise<Response> {\n\t\tconst { token } = (await request.json()) as { token: string };\n\n\t\tif (!token) {\n\t\t\treturn this.jsonResponse({ error: 'missing_token' }, 400);\n\t\t}\n\n\t\t// Clean expired sessions periodically\n\t\tawait this.cleanExpiredSessions();\n\n\t\t// Get session with user\n\t\tconst rows = this.sql\n\t\t\t.exec(\n\t\t\t\t`SELECT s.id as session_id, s.expires_at, s.created_at as session_created,\n u.id as user_id, u.email, u.name, u.role, u.created_at, u.updated_at\n FROM sessions s\n JOIN users u ON s.user_id = u.id\n WHERE s.id = ? AND s.expires_at > ?`,\n\t\t\t\ttoken,\n\t\t\t\tnew Date().toISOString(),\n\t\t\t)\n\t\t\t.toArray();\n\n\t\tif (rows.length === 0) {\n\t\t\treturn this.jsonResponse({ error: 'invalid_session' }, 401);\n\t\t}\n\n\t\tconst row = rows[0];\n\n\t\tconst user: User = {\n\t\t\tid: row.user_id as string,\n\t\t\temail: row.email as string,\n\t\t\tname: row.name as string,\n\t\t\trole: row.role as 'admin' | 'member',\n\t\t\tcreatedAt: row.created_at as string,\n\t\t\tupdatedAt: row.updated_at as string,\n\t\t};\n\n\t\tconst session: Session = {\n\t\t\tid: row.session_id as string,\n\t\t\tuserId: row.user_id as string,\n\t\t\texpiresAt: row.expires_at as string,\n\t\t\tcreatedAt: row.session_created as string,\n\t\t};\n\n\t\treturn this.jsonResponse({ user, session });\n\t}\n\n\tprivate async handleGetMe(request: Request): Promise<Response> {\n\t\tconst { token } = (await request.json()) as { token: string };\n\t\treturn this.handleValidateSession(\n\t\t\tnew Request(request.url, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\tbody: JSON.stringify({ token }),\n\t\t\t}),\n\t\t);\n\t}\n\n\tprivate async handleCreateProject(request: Request): Promise<Response> {\n\t\tconst { name, platform, userId } = (await request.json()) as {\n\t\t\tname: string;\n\t\t\tplatform?: string;\n\t\t\tuserId: string;\n\t\t};\n\n\t\tif (!name || !userId) {\n\t\t\treturn this.jsonResponse(\n\t\t\t\t{ error: 'missing_fields', message: 'Name and userId are required' },\n\t\t\t\t400,\n\t\t\t);\n\t\t}\n\n\t\t// Generate unique slug\n\t\tconst baseSlug = this.slugify(name);\n\t\tlet slug = baseSlug;\n\t\tlet counter = 1;\n\t\twhile (this.sql.exec('SELECT id FROM projects WHERE slug = ?', slug).toArray().length > 0) {\n\t\t\tslug = `${baseSlug}-${counter}`;\n\t\t\tcounter++;\n\t\t}\n\n\t\t// Generate public key for DSN\n\t\tconst publicKey = this.generateKey(32);\n\n\t\tconst projectId = crypto.randomUUID();\n\t\tconst now = new Date().toISOString();\n\n\t\tthis.sql.exec(\n\t\t\t'INSERT INTO projects (id, name, slug, platform, public_key, created_at, created_by) VALUES (?, ?, ?, ?, ?, ?, ?)',\n\t\t\tprojectId,\n\t\t\tname,\n\t\t\tslug,\n\t\t\tplatform || 'javascript',\n\t\t\tpublicKey,\n\t\t\tnow,\n\t\t\tuserId,\n\t\t);\n\n\t\t// Add creator as owner\n\t\tthis.sql.exec(\n\t\t\t'INSERT INTO project_members (project_id, user_id, role, created_at) VALUES (?, ?, ?, ?)',\n\t\t\tprojectId,\n\t\t\tuserId,\n\t\t\t'owner',\n\t\t\tnow,\n\t\t);\n\n\t\tconst project: Project = {\n\t\t\tid: projectId,\n\t\t\tname,\n\t\t\tslug,\n\t\t\tplatform: platform || 'javascript',\n\t\t\tpublicKey,\n\t\t\tcreatedAt: now,\n\t\t\tcreatedBy: userId,\n\t\t};\n\n\t\treturn this.jsonResponse({ project });\n\t}\n\n\tprivate async handleListProjects(request: Request): Promise<Response> {\n\t\tconst { userId } = (await request.json()) as { userId: string };\n\n\t\tif (!userId) {\n\t\t\treturn this.jsonResponse({ error: 'missing_user_id' }, 400);\n\t\t}\n\n\t\tconst rows = this.sql\n\t\t\t.exec(\n\t\t\t\t`SELECT p.id, p.name, p.slug, p.platform, p.public_key, p.created_at, p.created_by, pm.role as member_role\n FROM projects p\n JOIN project_members pm ON p.id = pm.project_id\n WHERE pm.user_id = ?\n ORDER BY p.created_at DESC`,\n\t\t\t\tuserId,\n\t\t\t)\n\t\t\t.toArray();\n\n\t\tconst projects = rows.map((row) => ({\n\t\t\tid: row.id as string,\n\t\t\tname: row.name as string,\n\t\t\tslug: row.slug as string,\n\t\t\tplatform: row.platform as string,\n\t\t\tpublicKey: row.public_key as string,\n\t\t\tcreatedAt: row.created_at as string,\n\t\t\tcreatedBy: row.created_by as string,\n\t\t\tmemberRole: row.member_role as string,\n\t\t}));\n\n\t\treturn this.jsonResponse({ projects });\n\t}\n\n\tprivate async handleGetProject(request: Request): Promise<Response> {\n\t\tconst { slug, userId } = (await request.json()) as { slug: string; userId: string };\n\n\t\tif (!slug) {\n\t\t\treturn this.jsonResponse({ error: 'missing_slug' }, 400);\n\t\t}\n\n\t\tlet rows;\n\t\tif (userId) {\n\t\t\trows = this.sql\n\t\t\t\t.exec(\n\t\t\t\t\t`SELECT p.id, p.name, p.slug, p.platform, p.public_key, p.created_at, p.created_by\n FROM projects p\n JOIN project_members pm ON p.id = pm.project_id AND pm.user_id = ?\n WHERE p.slug = ?`,\n\t\t\t\t\tuserId,\n\t\t\t\t\tslug,\n\t\t\t\t)\n\t\t\t\t.toArray();\n\t\t} else {\n\t\t\trows = this.sql\n\t\t\t\t.exec(\n\t\t\t\t\t`SELECT p.id, p.name, p.slug, p.platform, p.public_key, p.created_at, p.created_by\n FROM projects p\n WHERE p.slug = ?`,\n\t\t\t\t\tslug,\n\t\t\t\t)\n\t\t\t\t.toArray();\n\t\t}\n\n\t\tif (rows.length === 0) {\n\t\t\treturn this.jsonResponse({ error: 'project_not_found' }, 404);\n\t\t}\n\n\t\tconst row = rows[0];\n\n\t\tconst project: Project = {\n\t\t\tid: row.id as string,\n\t\t\tname: row.name as string,\n\t\t\tslug: row.slug as string,\n\t\t\tplatform: row.platform as string,\n\t\t\tpublicKey: row.public_key as string,\n\t\t\tcreatedAt: row.created_at as string,\n\t\t\tcreatedBy: row.created_by as string,\n\t\t};\n\n\t\treturn this.jsonResponse({ project });\n\t}\n\n\tprivate async handleGetProjectByKey(request: Request): Promise<Response> {\n\t\tconst { publicKey } = (await request.json()) as { publicKey: string };\n\n\t\tif (!publicKey) {\n\t\t\treturn this.jsonResponse({ error: 'missing_key' }, 400);\n\t\t}\n\n\t\tconst rows = this.sql\n\t\t\t.exec(\n\t\t\t\t'SELECT id, name, slug, platform, public_key, created_at, created_by FROM projects WHERE public_key = ?',\n\t\t\t\tpublicKey,\n\t\t\t)\n\t\t\t.toArray();\n\n\t\tif (rows.length === 0) {\n\t\t\treturn this.jsonResponse({ error: 'project_not_found' }, 404);\n\t\t}\n\n\t\tconst row = rows[0];\n\n\t\tconst project: Project = {\n\t\t\tid: row.id as string,\n\t\t\tname: row.name as string,\n\t\t\tslug: row.slug as string,\n\t\t\tplatform: row.platform as string,\n\t\t\tpublicKey: row.public_key as string,\n\t\t\tcreatedAt: row.created_at as string,\n\t\t\tcreatedBy: row.created_by as string,\n\t\t};\n\n\t\treturn this.jsonResponse({ project });\n\t}\n\n\tprivate async handleDeleteProject(request: Request): Promise<Response> {\n\t\tconst { projectId, userId } = (await request.json()) as { projectId: string; userId: string };\n\n\t\tif (!projectId || !userId) {\n\t\t\treturn this.jsonResponse({ error: 'missing_fields' }, 400);\n\t\t}\n\n\t\t// Check if user is owner\n\t\tconst memberRows = this.sql\n\t\t\t.exec(\n\t\t\t\t'SELECT role FROM project_members WHERE project_id = ? AND user_id = ?',\n\t\t\t\tprojectId,\n\t\t\t\tuserId,\n\t\t\t)\n\t\t\t.toArray();\n\n\t\tif (memberRows.length === 0 || memberRows[0].role !== 'owner') {\n\t\t\treturn this.jsonResponse(\n\t\t\t\t{ error: 'forbidden', message: 'Only project owner can delete' },\n\t\t\t\t403,\n\t\t\t);\n\t\t}\n\n\t\t// Delete project (cascade deletes members)\n\t\tthis.sql.exec('DELETE FROM projects WHERE id = ?', projectId);\n\n\t\treturn this.jsonResponse({ success: true });\n\t}\n\n\tprivate async handleCheckAccess(request: Request): Promise<Response> {\n\t\tconst { projectId, userId } = (await request.json()) as { projectId: string; userId: string };\n\n\t\tif (!projectId || !userId) {\n\t\t\treturn this.jsonResponse({ error: 'missing_fields' }, 400);\n\t\t}\n\n\t\tconst memberRows = this.sql\n\t\t\t.exec(\n\t\t\t\t'SELECT role FROM project_members WHERE project_id = ? AND user_id = ?',\n\t\t\t\tprojectId,\n\t\t\t\tuserId,\n\t\t\t)\n\t\t\t.toArray();\n\n\t\tconst member = memberRows.length > 0 ? memberRows[0] : null;\n\t\treturn this.jsonResponse({\n\t\t\thasAccess: !!member,\n\t\t\trole: member?.role || null,\n\t\t});\n\t}\n\n\tprivate async createSession(userId: string): Promise<Session> {\n\t\tconst sessionId = this.generateKey(64);\n\t\tconst now = new Date();\n\t\tconst expiresAt = new Date(now.getTime() + 30 * 24 * 60 * 60 * 1000); // 30 days\n\n\t\tthis.sql.exec(\n\t\t\t'INSERT INTO sessions (id, user_id, expires_at, created_at) VALUES (?, ?, ?, ?)',\n\t\t\tsessionId,\n\t\t\tuserId,\n\t\t\texpiresAt.toISOString(),\n\t\t\tnow.toISOString(),\n\t\t);\n\n\t\treturn {\n\t\t\tid: sessionId,\n\t\t\tuserId,\n\t\t\texpiresAt: expiresAt.toISOString(),\n\t\t\tcreatedAt: now.toISOString(),\n\t\t};\n\t}\n\n\tprivate async cleanExpiredSessions(): Promise<void> {\n\t\tthis.sql.exec('DELETE FROM sessions WHERE expires_at < ?', new Date().toISOString());\n\t}\n\n\tprivate async hashPassword(password: string): Promise<string> {\n\t\tconst encoder = new TextEncoder();\n\t\tconst data = encoder.encode(password);\n\t\tconst hashBuffer = await crypto.subtle.digest('SHA-256', data);\n\t\tconst hashArray = Array.from(new Uint8Array(hashBuffer));\n\t\treturn hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');\n\t}\n\n\tprivate async verifyPassword(password: string, hash: string): Promise<boolean> {\n\t\tconst passwordHash = await this.hashPassword(password);\n\t\treturn passwordHash === hash;\n\t}\n\n\tprivate generateKey(length: number): string {\n\t\tconst array = new Uint8Array(length);\n\t\tcrypto.getRandomValues(array);\n\t\treturn Array.from(array)\n\t\t\t.map((b) => b.toString(16).padStart(2, '0'))\n\t\t\t.join('')\n\t\t\t.slice(0, length);\n\t}\n\n\tprivate slugify(text: string): string {\n\t\treturn text\n\t\t\t.toLowerCase()\n\t\t\t.replace(/[^a-z0-9]+/g, '-')\n\t\t\t.replace(/^-|-$/g, '')\n\t\t\t.slice(0, 50);\n\t}\n\n\tprivate jsonResponse(data: unknown, status = 200): Response {\n\t\treturn new Response(JSON.stringify(data), {\n\t\t\tstatus,\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t});\n\t}\n}\n", "import { DurableObject } from 'cloudflare:workers';\nimport {\n\textractCulprit,\n\textractMetadata,\n\textractTitle,\n\tgenerateFingerprint,\n} from '../lib/fingerprint';\nimport type { Env, Issue, SentryEvent } from '../types';\n\nconst SCHEMA = `\nCREATE TABLE IF NOT EXISTS issues (\n id TEXT PRIMARY KEY,\n fingerprint TEXT UNIQUE NOT NULL,\n title TEXT NOT NULL,\n culprit TEXT,\n level TEXT NOT NULL DEFAULT 'error',\n platform TEXT NOT NULL DEFAULT 'javascript',\n first_seen TEXT NOT NULL,\n last_seen TEXT NOT NULL,\n count INTEGER NOT NULL DEFAULT 1,\n user_count INTEGER NOT NULL DEFAULT 0,\n status TEXT NOT NULL DEFAULT 'unresolved',\n metadata TEXT NOT NULL DEFAULT '{}'\n);\nCREATE INDEX IF NOT EXISTS idx_issues_fingerprint ON issues(fingerprint);\nCREATE INDEX IF NOT EXISTS idx_issues_last_seen ON issues(last_seen DESC);\nCREATE INDEX IF NOT EXISTS idx_issues_status ON issues(status);\n\nCREATE TABLE IF NOT EXISTS events (\n id TEXT PRIMARY KEY,\n issue_id TEXT NOT NULL,\n timestamp TEXT NOT NULL,\n received_at TEXT NOT NULL,\n level TEXT NOT NULL DEFAULT 'error',\n platform TEXT,\n environment TEXT,\n release TEXT,\n transaction_name TEXT,\n user_id TEXT,\n user_email TEXT,\n user_ip TEXT,\n tags TEXT,\n data TEXT NOT NULL,\n FOREIGN KEY (issue_id) REFERENCES issues(id) ON DELETE CASCADE\n);\nCREATE INDEX IF NOT EXISTS idx_events_issue ON events(issue_id);\nCREATE INDEX IF NOT EXISTS idx_events_timestamp ON events(timestamp DESC);\nCREATE INDEX IF NOT EXISTS idx_events_environment ON events(environment);\nCREATE INDEX IF NOT EXISTS idx_events_release ON events(release);\n\nCREATE TABLE IF NOT EXISTS issue_stats (\n issue_id TEXT NOT NULL,\n bucket TEXT NOT NULL,\n count INTEGER NOT NULL DEFAULT 0,\n PRIMARY KEY (issue_id, bucket),\n FOREIGN KEY (issue_id) REFERENCES issues(id) ON DELETE CASCADE\n);\n\nCREATE TABLE IF NOT EXISTS issue_users (\n issue_id TEXT NOT NULL,\n user_hash TEXT NOT NULL,\n first_seen TEXT NOT NULL,\n last_seen TEXT NOT NULL,\n PRIMARY KEY (issue_id, user_hash),\n FOREIGN KEY (issue_id) REFERENCES issues(id) ON DELETE CASCADE\n);\n`;\n\nexport class ProjectState extends DurableObject<Env> {\n\tprivate sql: SqlStorage;\n\tprivate initialized = false;\n\n\tconstructor(ctx: DurableObjectState, env: Env) {\n\t\tsuper(ctx, env);\n\t\tthis.sql = ctx.storage.sql;\n\t}\n\n\tprivate async ensureSchema(): Promise<void> {\n\t\tif (this.initialized) return;\n\t\tthis.sql.exec(SCHEMA);\n\t\tthis.initialized = true;\n\t}\n\n\tasync fetch(request: Request): Promise<Response> {\n\t\tawait this.ensureSchema();\n\n\t\tconst url = new URL(request.url);\n\t\tconst path = url.pathname;\n\n\t\ttry {\n\t\t\tswitch (path) {\n\t\t\t\tcase '/ingest':\n\t\t\t\t\treturn this.handleIngest(request);\n\t\t\t\tcase '/issues':\n\t\t\t\t\treturn this.handleGetIssues(request);\n\t\t\t\tcase '/issue':\n\t\t\t\t\treturn this.handleGetIssue(request);\n\t\t\t\tcase '/issue/update':\n\t\t\t\t\treturn this.handleUpdateIssue(request);\n\t\t\t\tcase '/issue/delete':\n\t\t\t\t\treturn this.handleDeleteIssue(request);\n\t\t\t\tcase '/issue/events':\n\t\t\t\t\treturn this.handleGetIssueEvents(request);\n\t\t\t\tcase '/event':\n\t\t\t\t\treturn this.handleGetEvent(request);\n\t\t\t\tcase '/events/latest':\n\t\t\t\t\treturn this.handleGetLatestEvents(request);\n\t\t\t\tcase '/stats':\n\t\t\t\t\treturn this.handleGetStats(request);\n\t\t\t\tdefault:\n\t\t\t\t\treturn new Response(JSON.stringify({ error: 'not_found' }), {\n\t\t\t\t\t\tstatus: 404,\n\t\t\t\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\t\t\t});\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.error('ProjectState error:', error);\n\t\t\treturn new Response(\n\t\t\t\tJSON.stringify({\n\t\t\t\t\terror: 'internal_error',\n\t\t\t\t\tmessage: error instanceof Error ? error.message : 'Unknown error',\n\t\t\t\t}),\n\t\t\t\t{ status: 500, headers: { 'Content-Type': 'application/json' } },\n\t\t\t);\n\t\t}\n\t}\n\n\tprivate async handleIngest(request: Request): Promise<Response> {\n\t\tconst event = (await request.json()) as SentryEvent;\n\n\t\tconst eventId = event.event_id || crypto.randomUUID();\n\t\tconst now = new Date().toISOString();\n\t\tconst timestamp = event.timestamp || now;\n\n\t\t// Generate fingerprint\n\t\tconst fingerprint = generateFingerprint(event);\n\n\t\t// Check for existing issue\n\t\tconst existingRows = this.sql\n\t\t\t.exec('SELECT id, count FROM issues WHERE fingerprint = ?', fingerprint)\n\t\t\t.toArray();\n\t\tconst existingIssue = existingRows.length > 0 ? existingRows[0] : null;\n\n\t\tlet issueId: string;\n\n\t\tif (existingIssue) {\n\t\t\t// Update existing issue\n\t\t\tissueId = existingIssue.id as string;\n\t\t\tthis.sql.exec(\n\t\t\t\t'UPDATE issues SET last_seen = ?, count = count + 1 WHERE id = ?',\n\t\t\t\tnow,\n\t\t\t\tissueId,\n\t\t\t);\n\t\t} else {\n\t\t\t// Create new issue\n\t\t\tissueId = crypto.randomUUID();\n\t\t\tconst title = extractTitle(event);\n\t\t\tconst culprit = extractCulprit(event);\n\t\t\tconst metadata = extractMetadata(event);\n\n\t\t\tthis.sql.exec(\n\t\t\t\t`INSERT INTO issues (id, fingerprint, title, culprit, level, platform, first_seen, last_seen, count, status, metadata)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1, 'unresolved', ?)`,\n\t\t\t\tissueId,\n\t\t\t\tfingerprint,\n\t\t\t\ttitle,\n\t\t\t\tculprit,\n\t\t\t\tevent.level || 'error',\n\t\t\t\tevent.platform || 'javascript',\n\t\t\t\tnow,\n\t\t\t\tnow,\n\t\t\t\tJSON.stringify(metadata),\n\t\t\t);\n\t\t}\n\n\t\t// Store event\n\t\tthis.sql.exec(\n\t\t\t`INSERT INTO events (id, issue_id, timestamp, received_at, level, platform, environment, release, transaction_name, user_id, user_email, user_ip, tags, data)\n VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`,\n\t\t\teventId,\n\t\t\tissueId,\n\t\t\ttimestamp,\n\t\t\tnow,\n\t\t\tevent.level || 'error',\n\t\t\tevent.platform || null,\n\t\t\tevent.environment || null,\n\t\t\tevent.release || null,\n\t\t\tevent.transaction || null,\n\t\t\tevent.user?.id || null,\n\t\t\tevent.user?.email || null,\n\t\t\tevent.user?.ip_address || null,\n\t\t\tevent.tags ? JSON.stringify(event.tags) : null,\n\t\t\tJSON.stringify(event),\n\t\t);\n\n\t\t// Update hourly stats\n\t\tconst bucket = this.getHourBucket(timestamp);\n\t\tthis.sql.exec(\n\t\t\t`INSERT INTO issue_stats (issue_id, bucket, count)\n VALUES (?, ?, 1)\n ON CONFLICT (issue_id, bucket) DO UPDATE SET count = count + 1`,\n\t\t\tissueId,\n\t\t\tbucket,\n\t\t);\n\n\t\t// Track unique users\n\t\tif (event.user) {\n\t\t\tconst userHash = await this.hashUserIdentifier(event.user);\n\t\t\tif (userHash) {\n\t\t\t\tconst existingUser = this.sql\n\t\t\t\t\t.exec(\n\t\t\t\t\t\t'SELECT issue_id FROM issue_users WHERE issue_id = ? AND user_hash = ?',\n\t\t\t\t\t\tissueId,\n\t\t\t\t\t\tuserHash,\n\t\t\t\t\t)\n\t\t\t\t\t.one();\n\n\t\t\t\tif (existingUser) {\n\t\t\t\t\tthis.sql.exec(\n\t\t\t\t\t\t'UPDATE issue_users SET last_seen = ? WHERE issue_id = ? AND user_hash = ?',\n\t\t\t\t\t\tnow,\n\t\t\t\t\t\tissueId,\n\t\t\t\t\t\tuserHash,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tthis.sql.exec(\n\t\t\t\t\t\t'INSERT INTO issue_users (issue_id, user_hash, first_seen, last_seen) VALUES (?, ?, ?, ?)',\n\t\t\t\t\t\tissueId,\n\t\t\t\t\t\tuserHash,\n\t\t\t\t\t\tnow,\n\t\t\t\t\t\tnow,\n\t\t\t\t\t);\n\t\t\t\t\t// Update user count\n\t\t\t\t\tthis.sql.exec('UPDATE issues SET user_count = user_count + 1 WHERE id = ?', issueId);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.jsonResponse({ eventId, issueId });\n\t}\n\n\tprivate async handleGetIssues(request: Request): Promise<Response> {\n\t\tconst { status, level, query, sort, cursor, limit } = (await request.json()) as {\n\t\t\tstatus?: string;\n\t\t\tlevel?: string;\n\t\t\tquery?: string;\n\t\t\tsort?: string;\n\t\t\tcursor?: string;\n\t\t\tlimit?: number;\n\t\t};\n\n\t\tconst pageLimit = Math.min(limit || 25, 100);\n\t\tconst sortField = sort || 'last_seen';\n\t\tconst sortOrder = 'DESC';\n\n\t\tlet sql = 'SELECT * FROM issues WHERE 1=1';\n\t\tconst params: (string | number)[] = [];\n\n\t\tif (status) {\n\t\t\tsql += ' AND status = ?';\n\t\t\tparams.push(status);\n\t\t}\n\n\t\tif (level) {\n\t\t\tsql += ' AND level = ?';\n\t\t\tparams.push(level);\n\t\t}\n\n\t\tif (query) {\n\t\t\tsql += ' AND (title LIKE ? OR culprit LIKE ?)';\n\t\t\tparams.push(`%${query}%`, `%${query}%`);\n\t\t}\n\n\t\tif (cursor) {\n\t\t\tsql += ` AND ${sortField} < ?`;\n\t\t\tparams.push(cursor);\n\t\t}\n\n\t\tsql += ` ORDER BY ${sortField} ${sortOrder} LIMIT ?`;\n\t\tparams.push(pageLimit + 1);\n\n\t\tconst rows = this.sql.exec(sql, ...params).toArray();\n\t\tconst hasMore = rows.length > pageLimit;\n\t\tconst issues = rows.slice(0, pageLimit).map((row) => this.rowToIssue(row));\n\n\t\tconst nextCursor =\n\t\t\thasMore && issues.length > 0\n\t\t\t\t? (issues[issues.length - 1] as Issue)[sortField as keyof Issue]\n\t\t\t\t: undefined;\n\n\t\treturn this.jsonResponse({\n\t\t\tissues,\n\t\t\tnextCursor,\n\t\t\thasMore,\n\t\t});\n\t}\n\n\tprivate async handleGetIssue(request: Request): Promise<Response> {\n\t\tconst { issueId } = (await request.json()) as { issueId: string };\n\n\t\tconst rows = this.sql.exec('SELECT * FROM issues WHERE id = ?', issueId).toArray();\n\n\t\tif (rows.length === 0) {\n\t\t\treturn this.jsonResponse({ error: 'issue_not_found' }, 404);\n\t\t}\n\n\t\tconst row = rows[0];\n\n\t\t// Get recent stats (7 days of hourly buckets)\n\t\tconst statsRows = this.sql\n\t\t\t.exec(\n\t\t\t\t'SELECT bucket, count FROM issue_stats WHERE issue_id = ? ORDER BY bucket DESC LIMIT 168',\n\t\t\t\tissueId,\n\t\t\t)\n\t\t\t.toArray();\n\n\t\tconst stats = statsRows.map((s) => ({\n\t\t\tbucket: s.bucket as string,\n\t\t\tcount: s.count as number,\n\t\t}));\n\n\t\treturn this.jsonResponse({\n\t\t\tissue: this.rowToIssue(row),\n\t\t\tstats,\n\t\t});\n\t}\n\n\tprivate async handleUpdateIssue(request: Request): Promise<Response> {\n\t\tconst { issueId, status } = (await request.json()) as {\n\t\t\tissueId: string;\n\t\t\tstatus?: string;\n\t\t};\n\n\t\tif (!issueId) {\n\t\t\treturn this.jsonResponse({ error: 'missing_issue_id' }, 400);\n\t\t}\n\n\t\tconst updates: string[] = [];\n\t\tconst params: (string | null)[] = [];\n\n\t\tif (status) {\n\t\t\tupdates.push('status = ?');\n\t\t\tparams.push(status);\n\t\t}\n\n\t\tif (updates.length === 0) {\n\t\t\treturn this.jsonResponse({ error: 'no_updates' }, 400);\n\t\t}\n\n\t\tparams.push(issueId);\n\t\tthis.sql.exec(`UPDATE issues SET ${updates.join(', ')} WHERE id = ?`, ...params);\n\n\t\tconst row = this.sql.exec('SELECT * FROM issues WHERE id = ?', issueId).one();\n\t\treturn this.jsonResponse({ issue: row ? this.rowToIssue(row) : null });\n\t}\n\n\tprivate async handleDeleteIssue(request: Request): Promise<Response> {\n\t\tconst { issueId } = (await request.json()) as { issueId: string };\n\n\t\tif (!issueId) {\n\t\t\treturn this.jsonResponse({ error: 'missing_issue_id' }, 400);\n\t\t}\n\n\t\t// Delete cascade handles events, stats, users\n\t\tthis.sql.exec('DELETE FROM issues WHERE id = ?', issueId);\n\n\t\treturn this.jsonResponse({ success: true });\n\t}\n\n\tprivate async handleGetIssueEvents(request: Request): Promise<Response> {\n\t\tconst { issueId, cursor, limit } = (await request.json()) as {\n\t\t\tissueId: string;\n\t\t\tcursor?: string;\n\t\t\tlimit?: number;\n\t\t};\n\n\t\tconst pageLimit = Math.min(limit || 25, 100);\n\n\t\tlet sql = 'SELECT * FROM events WHERE issue_id = ?';\n\t\tconst params: (string | number)[] = [issueId];\n\n\t\tif (cursor) {\n\t\t\tsql += ' AND timestamp < ?';\n\t\t\tparams.push(cursor);\n\t\t}\n\n\t\tsql += ' ORDER BY timestamp DESC LIMIT ?';\n\t\tparams.push(pageLimit + 1);\n\n\t\tconst rows = this.sql.exec(sql, ...params).toArray();\n\t\tconst hasMore = rows.length > pageLimit;\n\t\tconst events = rows.slice(0, pageLimit).map((row) => JSON.parse(row.data as string));\n\n\t\tconst nextCursor =\n\t\t\thasMore && events.length > 0\n\t\t\t\t? (events[events.length - 1] as SentryEvent).timestamp\n\t\t\t\t: undefined;\n\n\t\treturn this.jsonResponse({\n\t\t\tevents,\n\t\t\tnextCursor,\n\t\t\thasMore,\n\t\t});\n\t}\n\n\tprivate async handleGetEvent(request: Request): Promise<Response> {\n\t\tconst { eventId } = (await request.json()) as { eventId: string };\n\n\t\tconst rows = this.sql.exec('SELECT * FROM events WHERE id = ?', eventId).toArray();\n\n\t\tif (rows.length === 0) {\n\t\t\treturn this.jsonResponse({ error: 'event_not_found' }, 404);\n\t\t}\n\n\t\tconst row = rows[0];\n\t\treturn this.jsonResponse({\n\t\t\tevent: JSON.parse(row.data as string),\n\t\t\tissueId: row.issue_id,\n\t\t});\n\t}\n\n\tprivate async handleGetLatestEvents(request: Request): Promise<Response> {\n\t\tconst { limit } = (await request.json()) as { limit?: number };\n\n\t\tconst pageLimit = Math.min(limit || 25, 100);\n\n\t\tconst rows = this.sql\n\t\t\t.exec('SELECT * FROM events ORDER BY timestamp DESC LIMIT ?', pageLimit)\n\t\t\t.toArray();\n\n\t\tconst events = rows.map((row) => ({\n\t\t\t...JSON.parse(row.data as string),\n\t\t\tissueId: row.issue_id,\n\t\t}));\n\n\t\treturn this.jsonResponse({ events });\n\t}\n\n\tprivate async handleGetStats(request: Request): Promise<Response> {\n\t\tconst { interval, start, end } = (await request.json()) as {\n\t\t\tinterval?: '1h' | '1d' | '1w';\n\t\t\tstart?: string;\n\t\t\tend?: string;\n\t\t};\n\n\t\tconst endDate = end ? new Date(end) : new Date();\n\t\tconst startDate = start\n\t\t\t? new Date(start)\n\t\t\t: new Date(\n\t\t\t\t\tendDate.getTime() -\n\t\t\t\t\t\t(interval === '1w' ? 7 : interval === '1d' ? 1 : 1) * 24 * 60 * 60 * 1000,\n\t\t\t\t);\n\n\t\t// Aggregate stats by bucket\n\t\tconst rows = this.sql\n\t\t\t.exec(\n\t\t\t\t`SELECT bucket, SUM(count) as count\n FROM issue_stats\n WHERE bucket >= ? AND bucket <= ?\n GROUP BY bucket\n ORDER BY bucket ASC`,\n\t\t\t\tstartDate.toISOString(),\n\t\t\t\tendDate.toISOString(),\n\t\t\t)\n\t\t\t.toArray();\n\n\t\tconst series = rows.map((row) => ({\n\t\t\tbucket: row.bucket as string,\n\t\t\tcount: row.count as number,\n\t\t}));\n\n\t\tconst total = series.reduce((sum, s) => sum + s.count, 0);\n\n\t\treturn this.jsonResponse({ total, series });\n\t}\n\n\tprivate getHourBucket(timestamp: string): string {\n\t\tconst date = new Date(timestamp);\n\t\tdate.setMinutes(0, 0, 0);\n\t\treturn date.toISOString();\n\t}\n\n\tprivate async hashUserIdentifier(user: SentryEvent['user']): Promise<string | null> {\n\t\tif (!user) return null;\n\n\t\tconst identifier = user.id || user.email || user.ip_address || user.username;\n\t\tif (!identifier) return null;\n\n\t\tconst encoder = new TextEncoder();\n\t\tconst data = encoder.encode(identifier);\n\t\tconst hashBuffer = await crypto.subtle.digest('SHA-256', data);\n\t\tconst hashArray = Array.from(new Uint8Array(hashBuffer));\n\t\treturn hashArray\n\t\t\t.map((b) => b.toString(16).padStart(2, '0'))\n\t\t\t.join('')\n\t\t\t.slice(0, 32);\n\t}\n\n\tprivate rowToIssue(row: Record<string, SqlStorageValue>): Issue {\n\t\treturn {\n\t\t\tid: row.id as string,\n\t\t\tfingerprint: row.fingerprint as string,\n\t\t\ttitle: row.title as string,\n\t\t\tculprit: row.culprit as string | null,\n\t\t\tlevel: row.level as Issue['level'],\n\t\t\tplatform: row.platform as string,\n\t\t\tfirstSeen: row.first_seen as string,\n\t\t\tlastSeen: row.last_seen as string,\n\t\t\tcount: row.count as number,\n\t\t\tuserCount: row.user_count as number,\n\t\t\tstatus: row.status as Issue['status'],\n\t\t\tmetadata: JSON.parse((row.metadata as string) || '{}'),\n\t\t};\n\t}\n\n\tprivate jsonResponse(data: unknown, status = 200): Response {\n\t\treturn new Response(JSON.stringify(data), {\n\t\t\tstatus,\n\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t});\n\t}\n}\n", "import type { IssueMetadata, SentryEvent, StackFrame, Stacktrace } from '../types';\n\n/**\n * Generate a fingerprint for grouping events into issues.\n * Priority:\n * 1. Explicit fingerprint from SDK (if not default)\n * 2. Exception-based grouping (type + message + top frames)\n * 3. Message-based grouping\n * 4. Fallback to event ID (no grouping)\n */\nexport function generateFingerprint(event: SentryEvent): string {\n\t// Priority 1: Explicit fingerprint from SDK\n\tif (event.fingerprint && event.fingerprint.length > 0) {\n\t\tconst nonDefault = event.fingerprint.filter((f) => f !== '{{ default }}');\n\t\tif (nonDefault.length > 0) {\n\t\t\treturn hashArray(nonDefault);\n\t\t}\n\t}\n\n\t// Priority 2: Exception-based grouping\n\tif (event.exception?.values && event.exception.values.length > 0) {\n\t\tconst exc = event.exception.values[0];\n\t\tconst parts: string[] = [];\n\n\t\t// Exception type\n\t\tparts.push(exc.type || 'Error');\n\n\t\t// Normalized message (remove variable parts like IDs, timestamps)\n\t\tconst normalizedMessage = normalizeMessage(exc.value || '');\n\t\tparts.push(normalizedMessage);\n\n\t\t// Top in-app frames\n\t\tconst topFrames = getTopFrames(exc.stacktrace, 3);\n\t\tfor (const frame of topFrames) {\n\t\t\tparts.push(formatFrame(frame));\n\t\t}\n\n\t\treturn hashArray(parts);\n\t}\n\n\t// Priority 3: Message-based grouping\n\tif (event.message) {\n\t\tconst normalizedMessage = normalizeMessage(event.message);\n\t\treturn hashArray([event.level || 'error', normalizedMessage]);\n\t}\n\n\t// Fallback: unique per event\n\treturn hashArray([event.event_id]);\n}\n\n/**\n * Extract the title for an issue from an event.\n */\nexport function extractTitle(event: SentryEvent): string {\n\tif (event.exception?.values && event.exception.values.length > 0) {\n\t\tconst exc = event.exception.values[0];\n\t\tconst type = exc.type || 'Error';\n\t\tconst value = exc.value || '';\n\n\t\t// Truncate long messages\n\t\tconst truncatedValue = value.length > 100 ? value.slice(0, 97) + '...' : value;\n\n\t\treturn `${type}: ${truncatedValue}`;\n\t}\n\n\tif (event.message) {\n\t\treturn event.message.length > 128 ? event.message.slice(0, 125) + '...' : event.message;\n\t}\n\n\treturn 'Unknown Error';\n}\n\n/**\n * Extract the culprit (location) from an event.\n */\nexport function extractCulprit(event: SentryEvent): string | null {\n\t// Use transaction if available\n\tif (event.transaction) {\n\t\treturn event.transaction;\n\t}\n\n\t// Extract from stack trace\n\tif (event.exception?.values && event.exception.values.length > 0) {\n\t\tconst exc = event.exception.values[0];\n\t\tconst frame = getTopFrame(exc.stacktrace);\n\n\t\tif (frame) {\n\t\t\tconst parts: string[] = [];\n\n\t\t\tif (frame.filename) {\n\t\t\t\tparts.push(frame.filename);\n\t\t\t}\n\n\t\t\tif (frame.function && frame.function !== '<anonymous>') {\n\t\t\t\tparts.push(`in ${frame.function}`);\n\t\t\t}\n\n\t\t\tif (frame.lineno) {\n\t\t\t\tparts.push(`at line ${frame.lineno}`);\n\t\t\t}\n\n\t\t\tif (parts.length > 0) {\n\t\t\t\treturn parts.join(' ');\n\t\t\t}\n\t\t}\n\t}\n\n\treturn null;\n}\n\n/**\n * Extract metadata for quick display.\n */\nexport function extractMetadata(event: SentryEvent): IssueMetadata {\n\tconst metadata: IssueMetadata = {\n\t\ttype: 'Error',\n\t\tvalue: '',\n\t};\n\n\tif (event.exception?.values && event.exception.values.length > 0) {\n\t\tconst exc = event.exception.values[0];\n\t\tmetadata.type = exc.type || 'Error';\n\t\tmetadata.value = (exc.value || '').slice(0, 200);\n\n\t\tconst frame = getTopFrame(exc.stacktrace);\n\t\tif (frame) {\n\t\t\tmetadata.filename = frame.filename;\n\t\t\tmetadata.function = frame.function;\n\t\t}\n\t} else if (event.message) {\n\t\tmetadata.type = 'Message';\n\t\tmetadata.value = event.message.slice(0, 200);\n\t}\n\n\treturn metadata;\n}\n\n/**\n * Get the top N in-app frames from a stacktrace.\n */\nfunction getTopFrames(stacktrace: Stacktrace | undefined, count: number): StackFrame[] {\n\tif (!stacktrace?.frames || stacktrace.frames.length === 0) {\n\t\treturn [];\n\t}\n\n\t// Frames are usually in reverse order (most recent last)\n\tconst frames = [...stacktrace.frames].reverse();\n\n\t// Prefer in-app frames\n\tconst inAppFrames = frames.filter((f) => f.in_app !== false);\n\tif (inAppFrames.length > 0) {\n\t\treturn inAppFrames.slice(0, count);\n\t}\n\n\t// Fall back to any frames\n\treturn frames.slice(0, count);\n}\n\n/**\n * Get the top frame from a stacktrace.\n */\nfunction getTopFrame(stacktrace: Stacktrace | undefined): StackFrame | null {\n\tconst frames = getTopFrames(stacktrace, 1);\n\treturn frames.length > 0 ? frames[0] : null;\n}\n\n/**\n * Format a stack frame for fingerprinting.\n */\nfunction formatFrame(frame: StackFrame): string {\n\tconst parts: string[] = [];\n\n\tif (frame.filename) {\n\t\t// Remove query strings and hashes, normalize path\n\t\tconst filename = frame.filename.split('?')[0].split('#')[0];\n\t\tparts.push(filename);\n\t}\n\n\tif (frame.function) {\n\t\tparts.push(frame.function);\n\t}\n\n\tif (frame.lineno) {\n\t\tparts.push(String(frame.lineno));\n\t}\n\n\treturn parts.join(':');\n}\n\n/**\n * Normalize a message by removing variable parts.\n */\nfunction normalizeMessage(message: string): string {\n\treturn (\n\t\tmessage\n\t\t\t// Remove UUIDs\n\t\t\t.replace(/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/gi, '<uuid>')\n\t\t\t// Remove hex strings (likely IDs)\n\t\t\t.replace(/\\b[0-9a-f]{24,}\\b/gi, '<id>')\n\t\t\t// Remove numbers (but keep error codes like \"404\")\n\t\t\t.replace(/\\b\\d{6,}\\b/g, '<num>')\n\t\t\t// Remove timestamps\n\t\t\t.replace(/\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}:\\d{2}/g, '<timestamp>')\n\t\t\t// Remove IP addresses\n\t\t\t.replace(/\\b\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\b/g, '<ip>')\n\t\t\t// Remove email addresses\n\t\t\t.replace(/\\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Z|a-z]{2,}\\b/g, '<email>')\n\t\t\t// Normalize whitespace\n\t\t\t.replace(/\\s+/g, ' ')\n\t\t\t.trim()\n\t\t\t// Truncate\n\t\t\t.slice(0, 500)\n\t);\n}\n\n/**\n * Hash an array of strings to create a fingerprint.\n */\nfunction hashArray(parts: string[]): string {\n\tconst str = parts.join('||');\n\treturn simpleHash(str);\n}\n\n/**\n * Simple hash function (djb2 algorithm).\n * For production, consider using SHA-256 via crypto.subtle.\n */\nfunction simpleHash(str: string): string {\n\tlet hash = 5381;\n\tfor (let i = 0; i < str.length; i++) {\n\t\thash = (hash * 33) ^ str.charCodeAt(i);\n\t}\n\t// Convert to hex string\n\treturn (hash >>> 0).toString(16).padStart(8, '0');\n}\n", "import { WorkerEntrypoint } from 'cloudflare:workers';\nimport { extractEvents } from './lib/envelope-parser';\nimport type { EnvelopeItem, Env, Project } from './types';\n\n// Sentry envelope format: [header, ...items] where each item is [itemHeader, payload]\ntype SentryEnvelope = [Record<string, unknown>, Array<[Record<string, unknown>, unknown]>];\n\n/**\n * RPC entrypoint for Workers Sentinel.\n *\n * Allows other Cloudflare Workers to send events via service binding RPC\n * instead of HTTP, reducing latency.\n *\n * Usage in target worker:\n *\n * ```typescript\n * // wrangler.jsonc\n * {\n * \"services\": [{ \"binding\": \"SENTINEL\", \"service\": \"workers-sentinel\", \"entrypoint\": \"SentinelRpc\" }]\n * }\n *\n * // index.ts\n * import * as Sentry from \"@sentry/cloudflare\";\n * import { waitUntil } from \"cloudflare:workers\";\n *\n * const DSN = \"https://<public_key>@sentinel/<project_id>\";\n *\n * export default Sentry.withSentry(\n * (env) => ({\n * dsn: DSN,\n * transport: () => ({\n * send: async (envelope) => {\n * const rpcPromise = env.SENTINEL.captureEnvelope(DSN, envelope);\n * waitUntil(rpcPromise);\n * const result = await rpcPromise;\n * return { statusCode: result.status };\n * },\n * flush: async () => true,\n * }),\n * }),\n * { async fetch(request, env, ctx) { ... } }\n * );\n * ```\n */\nexport class SentinelRpc extends WorkerEntrypoint<Env> {\n\t/**\n\t * Capture a Sentry envelope.\n\t *\n\t * @param dsn - The full DSN string (e.g., \"https://publicKey@host/projectId\")\n\t * @param envelope - The Sentry envelope object (not serialized)\n\t * @returns Object with status code and optional event ID\n\t */\n\tasync captureEnvelope(\n\t\tdsn: string,\n\t\tenvelope: SentryEnvelope,\n\t): Promise<{ status: number; eventId?: string }> {\n\t\t// Parse DSN to extract publicKey and projectId\n\t\tlet publicKey: string;\n\t\tlet projectId: string;\n\t\ttry {\n\t\t\tconst url = new URL(dsn);\n\t\t\tpublicKey = url.username;\n\t\t\tprojectId = url.pathname.split('/').filter(Boolean).pop() || '';\n\t\t\tif (!publicKey || !projectId) {\n\t\t\t\treturn { status: 400 };\n\t\t\t}\n\t\t} catch {\n\t\t\treturn { status: 400 };\n\t\t}\n\n\t\t// Convert Sentry envelope format to our ParsedEnvelope format\n\t\tconst parsed = {\n\t\t\theader: envelope[0],\n\t\t\titems: (envelope[1] || []).map(([header, payload]) => ({\n\t\t\t\ttype: (header as { type: string }).type as EnvelopeItem['type'],\n\t\t\t\tpayload,\n\t\t\t})),\n\t\t};\n\n\t\t// Validate the public key against the project\n\t\tconst authStateId = this.env.AUTH_STATE.idFromName('global');\n\t\tconst authState = this.env.AUTH_STATE.get(authStateId);\n\n\t\tconst projectResponse = await authState.fetch(\n\t\t\tnew Request('http://internal/get-project-by-key', {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\t\tbody: JSON.stringify({ publicKey }),\n\t\t\t}),\n\t\t);\n\n\t\tif (!projectResponse.ok) {\n\t\t\treturn { status: 401 };\n\t\t}\n\n\t\tconst projectData = (await projectResponse.json()) as { project: Project };\n\t\tconst project = projectData.project;\n\n\t\t// Verify project ID matches\n\t\tif (projectId !== project.id) {\n\t\t\treturn { status: 400 };\n\t\t}\n\n\t\t// Extract events from envelope\n\t\tconst events = extractEvents(parsed);\n\n\t\tif (events.length === 0) {\n\t\t\treturn { status: 200 };\n\t\t}\n\n\t\t// Get the ProjectState Durable Object for this project\n\t\tconst projectStateId = this.env.PROJECT_STATE.idFromName(project.id);\n\t\tconst projectState = this.env.PROJECT_STATE.get(projectStateId);\n\n\t\t// Ingest each event\n\t\tlet firstEventId: string | undefined;\n\t\tfor (const event of events) {\n\t\t\ttry {\n\t\t\t\tconst response = await projectState.fetch(\n\t\t\t\t\tnew Request('http://internal/ingest', {\n\t\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\t\theaders: { 'Content-Type': 'application/json' },\n\t\t\t\t\t\tbody: JSON.stringify(event),\n\t\t\t\t\t}),\n\t\t\t\t);\n\n\t\t\t\tif (response.ok && !firstEventId) {\n\t\t\t\t\tconst result = (await response.json()) as { eventId: string };\n\t\t\t\t\tfirstEventId = result.eventId;\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\t// Silently continue on ingest errors\n\t\t\t}\n\t\t}\n\n\t\treturn { status: 200, eventId: firstEventId };\n\t}\n\n\t/**\n\t * Handle fetch requests (fallback for non-RPC calls)\n\t */\n\tasync fetch(): Promise<Response> {\n\t\treturn new Response('SentinelRpc: Use captureEnvelope() RPC method', { status: 400 });\n\t}\n}\n", "import { Hono } from 'hono';\nimport { cors } from 'hono/cors';\nimport { authMiddleware } from './middleware/auth';\nimport { authRoutes } from './routes/auth';\nimport { eventRoutes } from './routes/events';\nimport { ingestionRoutes } from './routes/ingestion';\nimport { issueRoutes } from './routes/issues';\nimport { projectRoutes } from './routes/projects';\nimport type { AuthContext, Env } from './types';\n\n// Re-export Durable Objects\nexport { AuthState } from './durable-objects/auth-state';\nexport { ProjectState } from './durable-objects/project-state';\n\n// Re-export RPC entrypoint for service bindings\nexport { SentinelRpc } from './rpc';\n\ntype Variables = {\n\tauth?: AuthContext;\n};\n\nconst app = new Hono<{ Bindings: Env; Variables: Variables }>();\n\n// CORS for dashboard\napp.use(\n\t'/api/*',\n\tcors({\n\t\torigin: '*',\n\t\tallowHeaders: ['Content-Type', 'Authorization'],\n\t\tallowMethods: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'],\n\t\tcredentials: true,\n\t}),\n);\n\n// Health check\napp.get('/api/health', (c) => c.json({ status: 'ok', timestamp: new Date().toISOString() }));\n\n// Public routes (no auth required)\napp.route('/api/auth', authRoutes);\n\n// Ingestion routes (DSN auth, not session auth)\napp.route('/api', ingestionRoutes);\n\n// Protected routes (session auth required)\napp.use('/api/projects/*', authMiddleware);\napp.route('/api/projects', projectRoutes);\napp.route('/api/projects', issueRoutes);\napp.route('/api/projects', eventRoutes);\n\n// Serve dashboard for all non-API routes\napp.get('*', (c) => {\n\t// Assets binding handles static files\n\treturn c.env.ASSETS?.fetch(c.req.raw) ?? c.text('Dashboard not found', 404);\n});\n\nexport default app;\n"],
|
|
6
|
+
"mappings": "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",
|
|
7
|
+
"names": ["PerformanceMark", "hrtime", "env", "cwd", "hrtime", "match", "raw", "app", "env", "Node", "_Node", "Node", "Hono", "Hono", "Hono", "Hono", "Hono", "getProjectWithAccess", "Hono", "env", "platform", "hashArray", "DurableObject", "SCHEMA", "DurableObject", "env", "title", "hashArray", "Hono"]
|
|
8
|
+
}
|