theokit 0.71.0 → 0.72.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/dist/{actions-virtual-module-2SM6YMTM.js → actions-virtual-module-6LND2WHL.js} +4 -4
- package/dist/{actions-virtual-module-5LRBP6YK.js → actions-virtual-module-WP47EKD7.js} +3 -3
- package/dist/adapters/agent-mount.js +2 -2
- package/dist/{agent-4FXJXZFD.js → agent-KUP3XA2S.js} +2 -2
- package/dist/{app-typed-client-LIIPHLO6.js → app-typed-client-6VIHSYJH.js} +3 -3
- package/dist/{app-typed-client-JFPV4YLS.js → app-typed-client-IMRSVARP.js} +4 -4
- package/dist/{aws-lambda-MUGK4WNZ.js → aws-lambda-7AZNJGWU.js} +6 -4
- package/dist/{aws-lambda-MUGK4WNZ.js.map → aws-lambda-7AZNJGWU.js.map} +1 -1
- package/dist/{build-KCIH3HI6.js → build-4J24BAEC.js} +7 -7
- package/dist/build-4J24BAEC.js.map +1 -0
- package/dist/{bun-JWZ2UOLJ.js → bun-NKVHOFSJ.js} +6 -4
- package/dist/{bun-JWZ2UOLJ.js.map → bun-NKVHOFSJ.js.map} +1 -1
- package/dist/{chunk-PGDBSK2L.js → chunk-7CHPOMP5.js} +2 -2
- package/dist/{chunk-FWEXQ2BR.js → chunk-BZ6DFSKG.js} +8 -8
- package/dist/{chunk-IGCOTLQI.js → chunk-C5CAL3DX.js} +136 -5
- package/dist/{chunk-IGCOTLQI.js.map → chunk-C5CAL3DX.js.map} +1 -1
- package/dist/{chunk-OSBGZYXZ.js → chunk-D2R5SJEL.js} +16 -2
- package/dist/chunk-D2R5SJEL.js.map +1 -0
- package/dist/{chunk-5XXXJ6DT.js → chunk-EZHDAVAF.js} +23 -7
- package/dist/chunk-EZHDAVAF.js.map +1 -0
- package/dist/{chunk-3DGIANAN.js → chunk-FJEKQ4FT.js} +1 -1
- package/dist/{chunk-3DGIANAN.js.map → chunk-FJEKQ4FT.js.map} +1 -1
- package/dist/{chunk-KI4DOTN4.js → chunk-G7U7FQVC.js} +3 -1
- package/dist/chunk-G7U7FQVC.js.map +1 -0
- package/dist/{chunk-6AGXDYVE.js → chunk-IB5VIXLR.js} +2 -2
- package/dist/{chunk-3NAKOWTX.js → chunk-IVGQMV3S.js} +2 -2
- package/dist/{chunk-Q4NSUGMS.js → chunk-JJXBRY2U.js} +74 -6
- package/dist/chunk-JJXBRY2U.js.map +1 -0
- package/dist/{chunk-DSPEN7ZJ.js → chunk-LJNMSKFL.js} +4 -4
- package/dist/{chunk-MS4A7N77.js → chunk-PEL3MJLM.js} +2 -2
- package/dist/{chunk-V6VARIR3.js → chunk-RDG5GMDW.js} +9 -9
- package/dist/{chunk-TNI4MARH.js → chunk-SFGGRC35.js} +23 -6
- package/dist/chunk-SFGGRC35.js.map +1 -0
- package/dist/{chunk-FFS7IRZF.js → chunk-SZWGXHY3.js} +2 -2
- package/dist/{chunk-SX7ZAHNE.js → chunk-WBB3MEEN.js} +16 -2
- package/dist/chunk-WBB3MEEN.js.map +1 -0
- package/dist/{chunk-TMQ52AZR.js → chunk-X2LFNDJQ.js} +2 -2
- package/dist/{chunk-NZDGV4YJ.js → chunk-YCF3N4JS.js} +2 -2
- package/dist/cli/index.js +9 -9
- package/dist/{cloudflare-XO43ZIQF.js → cloudflare-4M4XVNUH.js} +5 -3
- package/dist/{cloudflare-XO43ZIQF.js.map → cloudflare-4M4XVNUH.js.map} +1 -1
- package/dist/{config-support-O4REYSK5.js → config-support-SB5NDQZB.js} +11 -5
- package/dist/{config-support-O4REYSK5.js.map → config-support-SB5NDQZB.js.map} +1 -1
- package/dist/{deno-deploy-EUQDK2RC.js → deno-deploy-IVACZ62D.js} +11 -5
- package/dist/deno-deploy-IVACZ62D.js.map +1 -0
- package/dist/{dev-CD4YU5FN.js → dev-JZVHEYN4.js} +9 -9
- package/dist/index.d.ts +12 -2
- package/dist/index.js +4 -4
- package/dist/{info-2H7I55YN.js → info-SUX7QVA3.js} +4 -4
- package/dist/{internal-api-TMLSNYMP.js → internal-api-3IZVNNGB.js} +3 -3
- package/dist/{internal-api-WAKX6AZW.js → internal-api-BNDRCEPZ.js} +4 -4
- package/dist/{load-config-VMKOV44Y.js → load-config-52H3EKAA.js} +4 -4
- package/dist/{mcp-HS26ZCU4.js → mcp-HCXHATU3.js} +3 -3
- package/dist/{netlify-LEYEQZK6.js → netlify-3HEWV375.js} +6 -4
- package/dist/{netlify-LEYEQZK6.js.map → netlify-3HEWV375.js.map} +1 -1
- package/dist/{node-OSVPYQ3D.js → node-QUGTW6XV.js} +2 -2
- package/dist/{observability-bootstrap-YQKMEYW7.js → observability-bootstrap-FP6LMMJE.js} +3 -3
- package/dist/{openapi-N4CXRUNT.js → openapi-Q53YOBIU.js} +4 -4
- package/dist/{preview-YDJSRJ2K.js → preview-FSUPVADO.js} +3 -3
- package/dist/{rate-limit-BdNDZ3vt.d.ts → rate-limit-fULgvzCz.d.ts} +11 -1
- package/dist/{rate-limit-store-BEJnhWdw.d.ts → rate-limit-store-n1wD4Yk4.d.ts} +48 -1
- package/dist/registry-SDBODRU6.js +23 -0
- package/dist/{routes-ECCDRHXZ.js → routes-FDF4SLOB.js} +4 -4
- package/dist/{schema-ND7GHPQK.js → schema-LHNWUR4V.js} +3 -3
- package/dist/{schemas-QCMSKQDK.js → schemas-2R2J64ZH.js} +2 -2
- package/dist/server/auth/index.d.ts +1 -1
- package/dist/server/index.d.ts +3 -3
- package/dist/server/index.js +10 -4
- package/dist/server/index.js.map +1 -1
- package/dist/server/rate-limit/index.d.ts +96 -14
- package/dist/server/rate-limit/index.js +10 -4
- package/dist/server/storage/index.js +1 -1
- package/dist/{server-boundary-RX2AFU5U.js → server-boundary-P52I6YMH.js} +4 -4
- package/dist/{server-boundary-NZPP33G6.js → server-boundary-WUKORSW2.js} +3 -3
- package/dist/{start-TYXS5I4M.js → start-LCA67RES.js} +14 -11
- package/dist/start-LCA67RES.js.map +1 -0
- package/dist/{static-7OJNB7D2.js → static-NQPLPAB6.js} +6 -2
- package/dist/{static-7OJNB7D2.js.map → static-NQPLPAB6.js.map} +1 -1
- package/dist/{theo-cloud-3ET4G5T6.js → theo-cloud-HMFNZ3FS.js} +3 -1
- package/dist/{theo-cloud-3ET4G5T6.js.map → theo-cloud-HMFNZ3FS.js.map} +1 -1
- package/dist/{vercel-HTAWCNAG.js → vercel-5PMYEEKF.js} +6 -4
- package/dist/{vercel-HTAWCNAG.js.map → vercel-5PMYEEKF.js.map} +1 -1
- package/dist/vite-plugin/index.d.ts +2 -2
- package/dist/vite-plugin/index.js +4 -4
- package/dist/{vite-plugin-DDILUFYY.js → vite-plugin-WFA7NPYK.js} +8 -8
- package/package.json +1 -1
- package/dist/build-KCIH3HI6.js.map +0 -1
- package/dist/chunk-5XXXJ6DT.js.map +0 -1
- package/dist/chunk-KI4DOTN4.js.map +0 -1
- package/dist/chunk-OSBGZYXZ.js.map +0 -1
- package/dist/chunk-Q4NSUGMS.js.map +0 -1
- package/dist/chunk-SX7ZAHNE.js.map +0 -1
- package/dist/chunk-TNI4MARH.js.map +0 -1
- package/dist/deno-deploy-EUQDK2RC.js.map +0 -1
- package/dist/registry-4JHCZ6EF.js +0 -23
- package/dist/start-TYXS5I4M.js.map +0 -1
- /package/dist/{actions-virtual-module-2SM6YMTM.js.map → actions-virtual-module-6LND2WHL.js.map} +0 -0
- /package/dist/{actions-virtual-module-5LRBP6YK.js.map → actions-virtual-module-WP47EKD7.js.map} +0 -0
- /package/dist/{agent-4FXJXZFD.js.map → agent-KUP3XA2S.js.map} +0 -0
- /package/dist/{app-typed-client-LIIPHLO6.js.map → app-typed-client-6VIHSYJH.js.map} +0 -0
- /package/dist/{app-typed-client-JFPV4YLS.js.map → app-typed-client-IMRSVARP.js.map} +0 -0
- /package/dist/{chunk-PGDBSK2L.js.map → chunk-7CHPOMP5.js.map} +0 -0
- /package/dist/{chunk-FWEXQ2BR.js.map → chunk-BZ6DFSKG.js.map} +0 -0
- /package/dist/{chunk-6AGXDYVE.js.map → chunk-IB5VIXLR.js.map} +0 -0
- /package/dist/{chunk-3NAKOWTX.js.map → chunk-IVGQMV3S.js.map} +0 -0
- /package/dist/{chunk-DSPEN7ZJ.js.map → chunk-LJNMSKFL.js.map} +0 -0
- /package/dist/{chunk-MS4A7N77.js.map → chunk-PEL3MJLM.js.map} +0 -0
- /package/dist/{chunk-V6VARIR3.js.map → chunk-RDG5GMDW.js.map} +0 -0
- /package/dist/{chunk-FFS7IRZF.js.map → chunk-SZWGXHY3.js.map} +0 -0
- /package/dist/{chunk-TMQ52AZR.js.map → chunk-X2LFNDJQ.js.map} +0 -0
- /package/dist/{chunk-NZDGV4YJ.js.map → chunk-YCF3N4JS.js.map} +0 -0
- /package/dist/{dev-CD4YU5FN.js.map → dev-JZVHEYN4.js.map} +0 -0
- /package/dist/{info-2H7I55YN.js.map → info-SUX7QVA3.js.map} +0 -0
- /package/dist/{internal-api-TMLSNYMP.js.map → internal-api-3IZVNNGB.js.map} +0 -0
- /package/dist/{internal-api-WAKX6AZW.js.map → internal-api-BNDRCEPZ.js.map} +0 -0
- /package/dist/{load-config-VMKOV44Y.js.map → load-config-52H3EKAA.js.map} +0 -0
- /package/dist/{mcp-HS26ZCU4.js.map → mcp-HCXHATU3.js.map} +0 -0
- /package/dist/{node-OSVPYQ3D.js.map → node-QUGTW6XV.js.map} +0 -0
- /package/dist/{observability-bootstrap-YQKMEYW7.js.map → observability-bootstrap-FP6LMMJE.js.map} +0 -0
- /package/dist/{openapi-N4CXRUNT.js.map → openapi-Q53YOBIU.js.map} +0 -0
- /package/dist/{preview-YDJSRJ2K.js.map → preview-FSUPVADO.js.map} +0 -0
- /package/dist/{registry-4JHCZ6EF.js.map → registry-SDBODRU6.js.map} +0 -0
- /package/dist/{routes-ECCDRHXZ.js.map → routes-FDF4SLOB.js.map} +0 -0
- /package/dist/{schema-ND7GHPQK.js.map → schema-LHNWUR4V.js.map} +0 -0
- /package/dist/{schemas-QCMSKQDK.js.map → schemas-2R2J64ZH.js.map} +0 -0
- /package/dist/{server-boundary-RX2AFU5U.js.map → server-boundary-P52I6YMH.js.map} +0 -0
- /package/dist/{server-boundary-NZPP33G6.js.map → server-boundary-WUKORSW2.js.map} +0 -0
- /package/dist/{vite-plugin-DDILUFYY.js.map → vite-plugin-WFA7NPYK.js.map} +0 -0
|
@@ -3,14 +3,14 @@ import "tsx/esm";
|
|
|
3
3
|
import {
|
|
4
4
|
deepMerge,
|
|
5
5
|
loadConfig
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-SZWGXHY3.js";
|
|
7
7
|
import "./chunk-3QPVEJ7D.js";
|
|
8
8
|
import "./chunk-U5PWXS3J.js";
|
|
9
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-X2LFNDJQ.js";
|
|
10
10
|
import "./chunk-ZNZISJDZ.js";
|
|
11
|
-
import "./chunk-
|
|
11
|
+
import "./chunk-D2R5SJEL.js";
|
|
12
12
|
export {
|
|
13
13
|
deepMerge,
|
|
14
14
|
loadConfig
|
|
15
15
|
};
|
|
16
|
-
//# sourceMappingURL=load-config-
|
|
16
|
+
//# sourceMappingURL=load-config-52H3EKAA.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import "tsx/esm";
|
|
3
3
|
import {
|
|
4
4
|
createAgentSsrLoader
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-LJNMSKFL.js";
|
|
6
6
|
import {
|
|
7
7
|
extractAppResources,
|
|
8
8
|
handleMcpJsonRpc
|
|
@@ -46,7 +46,7 @@ async function serveMcpStdio(mod, name, appResources, streams) {
|
|
|
46
46
|
// src/cli/commands/mcp.ts
|
|
47
47
|
async function mcpCommand(name, deps = {}) {
|
|
48
48
|
const projectRoot = deps.projectRoot ?? process.cwd();
|
|
49
|
-
const agentsDir = deps.agentsDir ?? (await (await import("./load-config-
|
|
49
|
+
const agentsDir = deps.agentsDir ?? (await (await import("./load-config-52H3EKAA.js")).loadConfig(projectRoot)).agentsDir;
|
|
50
50
|
const agent = scanAgents(projectRoot, agentsDir).find((a) => a.name === name);
|
|
51
51
|
if (!agent) {
|
|
52
52
|
const names = scanAgents(projectRoot, agentsDir).map((a) => a.name).join(", ");
|
|
@@ -75,4 +75,4 @@ async function mcpCommand(name, deps = {}) {
|
|
|
75
75
|
export {
|
|
76
76
|
mcpCommand
|
|
77
77
|
};
|
|
78
|
-
//# sourceMappingURL=mcp-
|
|
78
|
+
//# sourceMappingURL=mcp-HCXHATU3.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import "tsx/esm";
|
|
3
3
|
import {
|
|
4
4
|
deployedEntryPreamble
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-IB5VIXLR.js";
|
|
6
6
|
import {
|
|
7
7
|
JSON_NOT_FOUND_RESPONSE,
|
|
8
8
|
agentsDirLiteral,
|
|
@@ -13,10 +13,10 @@ import {
|
|
|
13
13
|
describeDeployedSecurityHeaders,
|
|
14
14
|
rateLimitCheckFragment,
|
|
15
15
|
scannedFromLoaderCache
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-C5CAL3DX.js";
|
|
17
17
|
import {
|
|
18
18
|
nodeAdapter
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-G7U7FQVC.js";
|
|
20
20
|
import {
|
|
21
21
|
buildSecurityHeaders
|
|
22
22
|
} from "./chunk-WSMLSIS5.js";
|
|
@@ -256,6 +256,8 @@ var netlifyAdapter = {
|
|
|
256
256
|
// The document is served by Netlify's static host and does not pass through
|
|
257
257
|
// it (usetheokit/theokit#412).
|
|
258
258
|
appliesConfig: ["securityHeaders", "csrf", "disallowed", "cors", "serialization"],
|
|
259
|
+
// B-257 — per-invocation: an in-process counter does not survive, so a declared limit needs a durable store.
|
|
260
|
+
enforcesRateLimit: "with-a-store",
|
|
259
261
|
build(config, cwd, ctx) {
|
|
260
262
|
return buildNetlify(config, cwd, {}, ctx);
|
|
261
263
|
}
|
|
@@ -267,4 +269,4 @@ export {
|
|
|
267
269
|
netlifyAdapter,
|
|
268
270
|
renderNetlifyFunction
|
|
269
271
|
};
|
|
270
|
-
//# sourceMappingURL=netlify-
|
|
272
|
+
//# sourceMappingURL=netlify-3HEWV375.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/adapters/netlify.ts"],"sourcesContent":["/* eslint-disable security/detect-non-literal-fs-filename --\n * Netlify deploy adapter. All paths derived from `cwd` and a fixed\n * `.theokit/netlify/` output layout. Build-time tool — no HTTP input.\n */\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\n\nimport type { TheoConfig } from '../config/schema.js'\nimport type { SecurityHeadersConfig } from '../core/contracts/security-headers.js'\nimport { assertServicesUnsupported, readManifest } from '../services/index.js'\n\nimport {\n deployedAgentsFragment,\n JSON_NOT_FOUND_RESPONSE,\n scannedFromLoaderCache,\n} from './deployed-agents.js'\nimport { type DeployedCorsOptions } from './deployed-cors.js'\nimport { type DeployedCsrfOptions } from './deployed-csrf.js'\nimport { deployedEntryPreamble } from './deployed-preamble.js'\nimport { deployedRateLimitFragment, rateLimitCheckFragment } from './deployed-rate-limit.js'\nimport type { DeployedRateLimitOptions } from './deployed-rate-limit.js'\nimport {\n agentsDirLiteral,\n type DeployedAgentsDirOptions,\n deployedRuntimeConfigFragment,\n type DeployedRuntimeConfigOptions,\n} from './deployed-runtime-config.js'\nimport { deployedTraceFragment } from './deployed-trace.js'\nimport { nodeAdapter } from './node.js'\nimport { buildSecurityHeaders, describeDeployedSecurityHeaders } from './security-headers.js'\nimport type { AdapterBuildContext, DeployAdapter } from './types.js'\n\nexport class NetlifyConflictError extends Error {\n constructor(path: string, currentTo: string) {\n super(\n `netlify.toml has a conflicting redirect: \"${path}\" → \"${currentTo}\". ` +\n `Remove it manually or edit it to point to \"/.netlify/functions/theo\" ` +\n `before running the Netlify adapter again.`,\n )\n this.name = 'NetlifyConflictError'\n }\n}\n\nexport interface NetlifyBuildDeps {\n runNodeBuild?: (config: TheoConfig, cwd: string, ctx?: AdapterBuildContext) => Promise<void>\n writeFile?: (path: string, content: string) => void\n ensureDir?: (path: string) => void\n readTomlIfExists?: () => string | null\n}\n\nexport function renderNetlifyFunction(\n opts: { securityHeaders?: SecurityHeadersConfig } & DeployedAgentsDirOptions &\n DeployedCsrfOptions &\n DeployedRuntimeConfigOptions &\n DeployedCorsOptions &\n DeployedRateLimitOptions = {},\n): string {\n const runtimeConfig = deployedRuntimeConfigFragment(opts)\n // B-235. Netlify's handler is `(request, context)` and already RECEIVES a Web `Request`, which\n // is the shape this branch needs — the item filed against it counted `new Request` occurrences\n // and concluded the opposite, measuring how the entry OBTAINS a request rather than whether it\n // has one. Deno is the model: same `loaderCache`, same filesystem `serverDir`, same guard.\n const agentsFragment = deployedAgentsFragment(scannedFromLoaderCache(agentsDirLiteral(opts)), {\n // Netlify answers its own 404 inline rather than through a helper, so the fragment is given\n // the expression instead of a call it would have to declare.\n notFound: `new Response('Not Found', { status: 404 })`,\n })\n return [\n `// Generated by Theo — Netlify Functions adapter`,\n `import { resolve } from 'node:path'`,\n `import { scanServerRoutes, matchRoute, executeRoute, createProductionLoader, extractTraceIdFromRequest, TRACE_HEADER, createCorsWebHandler } from 'theokit/server'`,\n `import { createWebShim } from 'theokit/adapters/web-shim'`,\n `import { buildSecurityHeaders, withSecurityHeaders } from 'theokit/adapters/security-headers'`,\n ``,\n `const cwd = process.cwd()`,\n `const serverDir = resolve(cwd, 'server')`,\n `let routesCache = null`,\n `let loaderCache = null`,\n ``,\n `// #410 — the security baseline \\`theokit start\\` puts on every response,`,\n `// carried here as a literal because the deployed function has no`,\n `// theo.config.ts to read. The netlify.toml redirect routes only /api/* here,`,\n `// so this covers the API and not the document Netlify's static host serves`,\n `// (usetheokit/theokit#412).`,\n ...deployedEntryPreamble(runtimeConfig, agentsFragment, opts, 'netlify'),\n ``,\n // B-027 — emitted only when a limit is declared.\n ...(opts.rateLimit === undefined\n ? []\n : [\n `import { createRateLimiterWeb } from 'theokit/server'`,\n `import { resolveClientIpFromRequest } from 'theokit/server/rate-limit'`,\n ``,\n ]),\n ...deployedRateLimitFragment(\n opts.rateLimit,\n 'netlify',\n // `context.ip` is the platform's own answer, read from the handler context Netlify passes.\n // The forwarded fallback covers a function shape that carries no context, and returns\n // `undefined` unless a `trustProxy` was declared — which is the named 503, not a shared key.\n `context?.ip ?? resolveClientIpFromRequest(request, TRUST_PROXY)`,\n // Both names are bound in the OUTER handler, which is where the check runs. Threading\n // `context` into `handleRequest` — which the plan called for — buys nothing: the limiter\n // never runs in there.\n 'request, context',\n ),\n ``,\n `export default async (request, context) => {`,\n ` // #409 — the preflight is answered BEFORE anything routes: an OPTIONS the router`,\n ` // handles is an OPTIONS the browser never gets a CORS answer to.`,\n ` const preflight = corsPreflight(request)`,\n ` if (preflight !== null) return withSecurityHeaders(preflight, SECURITY_HEADERS)`,\n ...rateLimitCheckFragment(opts.rateLimit, ' ', 'request, context'),\n ` return withCors(request, withSecurityHeaders(await handleRequest(request), SECURITY_HEADERS))`,\n `}`,\n ``,\n `async function handleRequest(request) {`,\n ` const url = new URL(request.url)`,\n ` if (!url.pathname.startsWith('/api/')${agentsFragment.hostBypass}) {`,\n ` return new Response('Not Found', { status: 404 })`,\n ` }`,\n ``,\n ` if (!routesCache) routesCache = scanServerRoutes(serverDir)`,\n ` if (!loaderCache) loaderCache = createProductionLoader()`,\n ``,\n ...agentsFragment.branch,\n ``,\n ` const match = matchRoute(url.pathname, routesCache)`,\n ` if (!match) return ${JSON_NOT_FOUND_RESPONSE}`,\n ``,\n ` const { req, res, toResponse } = createWebShim(request)`,\n ...deployedTraceFragment('request', ' '),\n ` const method = request.method.toUpperCase()`,\n ` // #382 — the run is not awaited: toResponse() settles at the headers and`,\n ` // carries a live body, so Netlify streams while the handler writes.`,\n ` return toResponse(executeRoute({ route: match.route, method, params: match.params, req, res, loadModule: loaderCache, serverDir, requestId, ...CSRF_CONFIG, ${runtimeConfig.executeRouteSpread} }))`,\n `}`,\n ].join('\\n')\n}\n\nconst THEO_REDIRECT_FROM = '/api/*'\nconst THEO_REDIRECT_TO = '/.netlify/functions/theo'\n\n/**\n * TOML merge (EC-2) — non-destructive.\n *\n * We avoid adding a TOML parser dependency by working at the line level. The\n * supported subset is sufficient for the Netlify use case:\n * - detect existing `[[redirects]]` blocks\n * - find a block whose `from = \"...\"` matches our target\n * - error if such a block points elsewhere\n * - otherwise append our block\n *\n * Unknown sections (e.g. `[build]`, `[[headers]]`, `[context.production.environment]`)\n * are preserved as-is.\n */\ninterface NetlifyRedirectBlock {\n startLine: number\n endLine: number\n from?: string\n to?: string\n}\n\nfunction parseRedirectBlocks(lines: readonly string[]): NetlifyRedirectBlock[] {\n const blocks: NetlifyRedirectBlock[] = []\n let current: NetlifyRedirectBlock | null = null\n\n for (let i = 0; i < lines.length; i++) {\n const trimmed = lines[i].trim()\n if (trimmed === '[[redirects]]') {\n if (current) {\n current.endLine = i - 1\n blocks.push(current)\n }\n current = { startLine: i, endLine: i }\n continue\n }\n if (current && /^\\[(\\[|[^[])/.test(trimmed)) {\n // Entering another section — close current.\n current.endLine = i - 1\n blocks.push(current)\n current = null\n }\n if (current) {\n const fromMatch = /^from\\s*=\\s*\"([^\"]+)\"/.exec(trimmed)\n if (fromMatch) current.from = fromMatch[1]\n const toMatch = /^to\\s*=\\s*\"([^\"]+)\"/.exec(trimmed)\n if (toMatch) current.to = toMatch[1]\n current.endLine = i\n }\n }\n if (current) blocks.push(current)\n return blocks\n}\n\nconst THEO_REDIRECT_TARGET = [\n '[[redirects]]',\n ' from = \"/api/*\"',\n ' to = \"/.netlify/functions/theo\"',\n ' status = 200',\n ' force = true',\n].join('\\n')\n\n/**\n * Marks the block this build owns, so it can be REGENERATED rather than merely not duplicated.\n *\n * Idempotence alone would be the wrong contract here: the block carries configuration, so a\n * `security.headers` change has to reach the file. Leaving an existing block in place — which is\n * what the redirect above correctly does, because its content is fixed — would silently pin the\n * baseline to whatever the first build emitted.\n */\nconst THEO_HEADERS_MARKER = '# Generated by Theo — security baseline (usetheokit/theokit#412)'\n\n/**\n * The `[[headers]]` block telling Netlify's static host the baseline.\n *\n * The emitted function applies these to every response IT returns, and it never returns the HTML\n * document: the `[[redirects]]` block routes only `/api/*`, so the page comes from Netlify's static\n * host and carried none of them. The values come from `buildSecurityHeaders` — the same function\n * the handler calls — rather than being written out here, because two lists of headers that must\n * agree are two lists that eventually do not.\n */\nfunction renderHeadersBlock(securityHeaders: SecurityHeadersConfig | undefined): string {\n const values = buildSecurityHeaders(securityHeaders ?? {}, { production: true })\n return [\n THEO_HEADERS_MARKER,\n '[[headers]]',\n ' for = \"/*\"',\n ' [headers.values]',\n ...Object.entries(values).map(([k, v]) => ` ${k} = ${JSON.stringify(v)}`),\n ].join('\\n')\n}\n\n/**\n * Drop a previously generated block, so the next one replaces it.\n *\n * Bounded by the marker and the next top-level section at column 0 (or EOF) — the shape TOML gives\n * a block. A user's own `[[headers]]` is untouched because it does not carry the marker: their\n * file, their rules, and Netlify applies both.\n */\nfunction withoutGeneratedHeaders(source: string): string {\n const lines = source.split(/\\r?\\n/)\n const start = lines.indexOf(THEO_HEADERS_MARKER)\n if (start < 0) return source\n\n const opensSection = (line: string | undefined): boolean => (line ?? '').startsWith('[')\n\n let end = start + 1\n while (end < lines.length && !opensSection(lines[end])) end += 1\n // The marker line itself opens the block, so `end` now sits on the NEXT section — but the block's\n // own `[[headers]]` is the first `[` after the marker, so step past it before scanning again.\n end += 1\n while (end < lines.length && !opensSection(lines[end])) end += 1\n\n return [...lines.slice(0, start), ...lines.slice(end)].join('\\n').replace(/\\n{3,}/gu, '\\n\\n')\n}\n\nexport function mergeNetlifyToml(\n existing: string | null,\n securityHeaders?: SecurityHeadersConfig,\n): string {\n const headersBlock = renderHeadersBlock(securityHeaders)\n\n if (existing === null || existing.trim().length === 0) {\n return `${THEO_REDIRECT_TARGET}\\n\\n${headersBlock}\\n`\n }\n\n existing = withoutGeneratedHeaders(existing)\n\n const blocks = parseRedirectBlocks(existing.split(/\\r?\\n/))\n\n // Detect conflict: every `/api/*` block must point at our function.\n for (const b of blocks) {\n if (b.from !== THEO_REDIRECT_FROM) continue\n if (b.to === THEO_REDIRECT_TO) {\n // The redirect is already there. The headers block is regenerated regardless, because it\n // carries configuration and the redirect does not.\n const sep = existing.endsWith('\\n') ? '' : '\\n'\n return `${existing}${sep}\\n${headersBlock}\\n`\n }\n throw new NetlifyConflictError(b.from, b.to ?? '(unknown)')\n }\n\n // No conflict — append target block.\n const sep = existing.endsWith('\\n') ? '' : '\\n'\n return `${existing}${sep}\\n${THEO_REDIRECT_TARGET}\\n\\n${headersBlock}\\n`\n}\n\nexport async function buildNetlify(\n config: TheoConfig,\n cwd: string,\n deps: NetlifyBuildDeps = {},\n ctx?: AdapterBuildContext,\n): Promise<void> {\n // Wave 2 (T2.2) — reject polyglot services on this adapter.\n assertServicesUnsupported('netlify', readManifest(cwd))\n\n const runNodeBuild = deps.runNodeBuild ?? nodeAdapter.build.bind(nodeAdapter)\n await runNodeBuild(config, cwd, ctx)\n\n const ensureDir = deps.ensureDir ?? ((p: string) => mkdirSync(p, { recursive: true }))\n const writeFile =\n deps.writeFile ??\n ((p, c) => {\n writeFileSync(p, c)\n })\n const readTomlIfExists =\n deps.readTomlIfExists ??\n (() => {\n const p = resolve(cwd, 'netlify.toml')\n return existsSync(p) ? readFileSync(p, 'utf-8') : null\n })\n\n const fnDir = resolve(cwd, '.netlify/functions')\n ensureDir(fnDir)\n writeFile(\n resolve(fnDir, 'theo.mjs'),\n renderNetlifyFunction({\n securityHeaders: config.security?.headers,\n // B-235 — pillar (a): the option existed and no build passed it, so a project with a\n // configured agents directory got the default `agents` on this target. Same defect\n // B-185 fixed for bun and deno, one target over.\n agentsDir: config.agentsDir,\n csrf: config.security?.csrf,\n disallowed: config.security?.disallowed,\n cors: config.security?.cors,\n // #425 — a selector, not a transformer, so it rides as a literal like the values above.\n serialization: config.serialization,\n }),\n )\n\n const existingToml = readTomlIfExists()\n const merged = mergeNetlifyToml(existingToml, config.security?.headers)\n writeFile(resolve(cwd, 'netlify.toml'), merged)\n\n // eslint-disable-next-line no-console -- CLI build progress\n console.log('\\n ✓ Netlify output → .netlify/functions/theo.mjs + netlify.toml')\n // eslint-disable-next-line no-console -- CLI build progress\n console.log(\n `${describeDeployedSecurityHeaders({\n target: 'netlify',\n securityHeaders: config.security?.headers,\n mintsNonce: false,\n documentHeaders: 'platform-configured',\n })}\\n`,\n )\n}\n\nexport const netlifyAdapter: DeployAdapter = {\n name: 'netlify',\n streamsResponses: true,\n // #409 / #410 — the generated entry calls `executeRoute` with routes, loader\n // and serverDir only. CSRF, route policy, file middleware and Zod validation\n // still run because they live inside `executeRoute`; none of the remaining\n // configurable concerns reach it. Declared explicitly rather than omitted so\n // the gap is a statement in the source and not an absence.\n //\n // `securityHeaders` IS applied -- to every response this function returns.\n // The document is served by Netlify's static host and does not pass through\n // it (usetheokit/theokit#412).\n appliesConfig: ['securityHeaders', 'csrf', 'disallowed', 'cors', 'serialization'],\n build(config, cwd, ctx) {\n return buildNetlify(config, cwd, {}, ctx)\n },\n}\n"],"mappings":"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","names":["sep"]}
|
|
1
|
+
{"version":3,"sources":["../src/adapters/netlify.ts"],"sourcesContent":["/* eslint-disable security/detect-non-literal-fs-filename --\n * Netlify deploy adapter. All paths derived from `cwd` and a fixed\n * `.theokit/netlify/` output layout. Build-time tool — no HTTP input.\n */\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\n\nimport type { TheoConfig } from '../config/schema.js'\nimport type { SecurityHeadersConfig } from '../core/contracts/security-headers.js'\nimport { assertServicesUnsupported, readManifest } from '../services/index.js'\n\nimport {\n deployedAgentsFragment,\n JSON_NOT_FOUND_RESPONSE,\n scannedFromLoaderCache,\n} from './deployed-agents.js'\nimport { type DeployedCorsOptions } from './deployed-cors.js'\nimport { type DeployedCsrfOptions } from './deployed-csrf.js'\nimport { deployedEntryPreamble } from './deployed-preamble.js'\nimport { deployedRateLimitFragment, rateLimitCheckFragment } from './deployed-rate-limit.js'\nimport type { DeployedRateLimitOptions } from './deployed-rate-limit.js'\nimport {\n agentsDirLiteral,\n type DeployedAgentsDirOptions,\n deployedRuntimeConfigFragment,\n type DeployedRuntimeConfigOptions,\n} from './deployed-runtime-config.js'\nimport { deployedTraceFragment } from './deployed-trace.js'\nimport { nodeAdapter } from './node.js'\nimport { buildSecurityHeaders, describeDeployedSecurityHeaders } from './security-headers.js'\nimport type { AdapterBuildContext, DeployAdapter } from './types.js'\n\nexport class NetlifyConflictError extends Error {\n constructor(path: string, currentTo: string) {\n super(\n `netlify.toml has a conflicting redirect: \"${path}\" → \"${currentTo}\". ` +\n `Remove it manually or edit it to point to \"/.netlify/functions/theo\" ` +\n `before running the Netlify adapter again.`,\n )\n this.name = 'NetlifyConflictError'\n }\n}\n\nexport interface NetlifyBuildDeps {\n runNodeBuild?: (config: TheoConfig, cwd: string, ctx?: AdapterBuildContext) => Promise<void>\n writeFile?: (path: string, content: string) => void\n ensureDir?: (path: string) => void\n readTomlIfExists?: () => string | null\n}\n\nexport function renderNetlifyFunction(\n opts: { securityHeaders?: SecurityHeadersConfig } & DeployedAgentsDirOptions &\n DeployedCsrfOptions &\n DeployedRuntimeConfigOptions &\n DeployedCorsOptions &\n DeployedRateLimitOptions = {},\n): string {\n const runtimeConfig = deployedRuntimeConfigFragment(opts)\n // B-235. Netlify's handler is `(request, context)` and already RECEIVES a Web `Request`, which\n // is the shape this branch needs — the item filed against it counted `new Request` occurrences\n // and concluded the opposite, measuring how the entry OBTAINS a request rather than whether it\n // has one. Deno is the model: same `loaderCache`, same filesystem `serverDir`, same guard.\n const agentsFragment = deployedAgentsFragment(scannedFromLoaderCache(agentsDirLiteral(opts)), {\n // Netlify answers its own 404 inline rather than through a helper, so the fragment is given\n // the expression instead of a call it would have to declare.\n notFound: `new Response('Not Found', { status: 404 })`,\n })\n return [\n `// Generated by Theo — Netlify Functions adapter`,\n `import { resolve } from 'node:path'`,\n `import { scanServerRoutes, matchRoute, executeRoute, createProductionLoader, extractTraceIdFromRequest, TRACE_HEADER, createCorsWebHandler } from 'theokit/server'`,\n `import { createWebShim } from 'theokit/adapters/web-shim'`,\n `import { buildSecurityHeaders, withSecurityHeaders } from 'theokit/adapters/security-headers'`,\n ``,\n `const cwd = process.cwd()`,\n `const serverDir = resolve(cwd, 'server')`,\n `let routesCache = null`,\n `let loaderCache = null`,\n ``,\n `// #410 — the security baseline \\`theokit start\\` puts on every response,`,\n `// carried here as a literal because the deployed function has no`,\n `// theo.config.ts to read. The netlify.toml redirect routes only /api/* here,`,\n `// so this covers the API and not the document Netlify's static host serves`,\n `// (usetheokit/theokit#412).`,\n ...deployedEntryPreamble(runtimeConfig, agentsFragment, opts, 'netlify'),\n ``,\n // B-027 — emitted only when a limit is declared.\n ...(opts.rateLimit === undefined\n ? []\n : [\n `import { createRateLimiterWeb } from 'theokit/server'`,\n `import { resolveClientIpFromRequest } from 'theokit/server/rate-limit'`,\n ``,\n ]),\n ...deployedRateLimitFragment(\n opts.rateLimit,\n 'netlify',\n // `context.ip` is the platform's own answer, read from the handler context Netlify passes.\n // The forwarded fallback covers a function shape that carries no context, and returns\n // `undefined` unless a `trustProxy` was declared — which is the named 503, not a shared key.\n `context?.ip ?? resolveClientIpFromRequest(request, TRUST_PROXY)`,\n // Both names are bound in the OUTER handler, which is where the check runs. Threading\n // `context` into `handleRequest` — which the plan called for — buys nothing: the limiter\n // never runs in there.\n 'request, context',\n ),\n ``,\n `export default async (request, context) => {`,\n ` // #409 — the preflight is answered BEFORE anything routes: an OPTIONS the router`,\n ` // handles is an OPTIONS the browser never gets a CORS answer to.`,\n ` const preflight = corsPreflight(request)`,\n ` if (preflight !== null) return withSecurityHeaders(preflight, SECURITY_HEADERS)`,\n ...rateLimitCheckFragment(opts.rateLimit, ' ', 'request, context'),\n ` return withCors(request, withSecurityHeaders(await handleRequest(request), SECURITY_HEADERS))`,\n `}`,\n ``,\n `async function handleRequest(request) {`,\n ` const url = new URL(request.url)`,\n ` if (!url.pathname.startsWith('/api/')${agentsFragment.hostBypass}) {`,\n ` return new Response('Not Found', { status: 404 })`,\n ` }`,\n ``,\n ` if (!routesCache) routesCache = scanServerRoutes(serverDir)`,\n ` if (!loaderCache) loaderCache = createProductionLoader()`,\n ``,\n ...agentsFragment.branch,\n ``,\n ` const match = matchRoute(url.pathname, routesCache)`,\n ` if (!match) return ${JSON_NOT_FOUND_RESPONSE}`,\n ``,\n ` const { req, res, toResponse } = createWebShim(request)`,\n ...deployedTraceFragment('request', ' '),\n ` const method = request.method.toUpperCase()`,\n ` // #382 — the run is not awaited: toResponse() settles at the headers and`,\n ` // carries a live body, so Netlify streams while the handler writes.`,\n ` return toResponse(executeRoute({ route: match.route, method, params: match.params, req, res, loadModule: loaderCache, serverDir, requestId, ...CSRF_CONFIG, ${runtimeConfig.executeRouteSpread} }))`,\n `}`,\n ].join('\\n')\n}\n\nconst THEO_REDIRECT_FROM = '/api/*'\nconst THEO_REDIRECT_TO = '/.netlify/functions/theo'\n\n/**\n * TOML merge (EC-2) — non-destructive.\n *\n * We avoid adding a TOML parser dependency by working at the line level. The\n * supported subset is sufficient for the Netlify use case:\n * - detect existing `[[redirects]]` blocks\n * - find a block whose `from = \"...\"` matches our target\n * - error if such a block points elsewhere\n * - otherwise append our block\n *\n * Unknown sections (e.g. `[build]`, `[[headers]]`, `[context.production.environment]`)\n * are preserved as-is.\n */\ninterface NetlifyRedirectBlock {\n startLine: number\n endLine: number\n from?: string\n to?: string\n}\n\nfunction parseRedirectBlocks(lines: readonly string[]): NetlifyRedirectBlock[] {\n const blocks: NetlifyRedirectBlock[] = []\n let current: NetlifyRedirectBlock | null = null\n\n for (let i = 0; i < lines.length; i++) {\n const trimmed = lines[i].trim()\n if (trimmed === '[[redirects]]') {\n if (current) {\n current.endLine = i - 1\n blocks.push(current)\n }\n current = { startLine: i, endLine: i }\n continue\n }\n if (current && /^\\[(\\[|[^[])/.test(trimmed)) {\n // Entering another section — close current.\n current.endLine = i - 1\n blocks.push(current)\n current = null\n }\n if (current) {\n const fromMatch = /^from\\s*=\\s*\"([^\"]+)\"/.exec(trimmed)\n if (fromMatch) current.from = fromMatch[1]\n const toMatch = /^to\\s*=\\s*\"([^\"]+)\"/.exec(trimmed)\n if (toMatch) current.to = toMatch[1]\n current.endLine = i\n }\n }\n if (current) blocks.push(current)\n return blocks\n}\n\nconst THEO_REDIRECT_TARGET = [\n '[[redirects]]',\n ' from = \"/api/*\"',\n ' to = \"/.netlify/functions/theo\"',\n ' status = 200',\n ' force = true',\n].join('\\n')\n\n/**\n * Marks the block this build owns, so it can be REGENERATED rather than merely not duplicated.\n *\n * Idempotence alone would be the wrong contract here: the block carries configuration, so a\n * `security.headers` change has to reach the file. Leaving an existing block in place — which is\n * what the redirect above correctly does, because its content is fixed — would silently pin the\n * baseline to whatever the first build emitted.\n */\nconst THEO_HEADERS_MARKER = '# Generated by Theo — security baseline (usetheokit/theokit#412)'\n\n/**\n * The `[[headers]]` block telling Netlify's static host the baseline.\n *\n * The emitted function applies these to every response IT returns, and it never returns the HTML\n * document: the `[[redirects]]` block routes only `/api/*`, so the page comes from Netlify's static\n * host and carried none of them. The values come from `buildSecurityHeaders` — the same function\n * the handler calls — rather than being written out here, because two lists of headers that must\n * agree are two lists that eventually do not.\n */\nfunction renderHeadersBlock(securityHeaders: SecurityHeadersConfig | undefined): string {\n const values = buildSecurityHeaders(securityHeaders ?? {}, { production: true })\n return [\n THEO_HEADERS_MARKER,\n '[[headers]]',\n ' for = \"/*\"',\n ' [headers.values]',\n ...Object.entries(values).map(([k, v]) => ` ${k} = ${JSON.stringify(v)}`),\n ].join('\\n')\n}\n\n/**\n * Drop a previously generated block, so the next one replaces it.\n *\n * Bounded by the marker and the next top-level section at column 0 (or EOF) — the shape TOML gives\n * a block. A user's own `[[headers]]` is untouched because it does not carry the marker: their\n * file, their rules, and Netlify applies both.\n */\nfunction withoutGeneratedHeaders(source: string): string {\n const lines = source.split(/\\r?\\n/)\n const start = lines.indexOf(THEO_HEADERS_MARKER)\n if (start < 0) return source\n\n const opensSection = (line: string | undefined): boolean => (line ?? '').startsWith('[')\n\n let end = start + 1\n while (end < lines.length && !opensSection(lines[end])) end += 1\n // The marker line itself opens the block, so `end` now sits on the NEXT section — but the block's\n // own `[[headers]]` is the first `[` after the marker, so step past it before scanning again.\n end += 1\n while (end < lines.length && !opensSection(lines[end])) end += 1\n\n return [...lines.slice(0, start), ...lines.slice(end)].join('\\n').replace(/\\n{3,}/gu, '\\n\\n')\n}\n\nexport function mergeNetlifyToml(\n existing: string | null,\n securityHeaders?: SecurityHeadersConfig,\n): string {\n const headersBlock = renderHeadersBlock(securityHeaders)\n\n if (existing === null || existing.trim().length === 0) {\n return `${THEO_REDIRECT_TARGET}\\n\\n${headersBlock}\\n`\n }\n\n existing = withoutGeneratedHeaders(existing)\n\n const blocks = parseRedirectBlocks(existing.split(/\\r?\\n/))\n\n // Detect conflict: every `/api/*` block must point at our function.\n for (const b of blocks) {\n if (b.from !== THEO_REDIRECT_FROM) continue\n if (b.to === THEO_REDIRECT_TO) {\n // The redirect is already there. The headers block is regenerated regardless, because it\n // carries configuration and the redirect does not.\n const sep = existing.endsWith('\\n') ? '' : '\\n'\n return `${existing}${sep}\\n${headersBlock}\\n`\n }\n throw new NetlifyConflictError(b.from, b.to ?? '(unknown)')\n }\n\n // No conflict — append target block.\n const sep = existing.endsWith('\\n') ? '' : '\\n'\n return `${existing}${sep}\\n${THEO_REDIRECT_TARGET}\\n\\n${headersBlock}\\n`\n}\n\nexport async function buildNetlify(\n config: TheoConfig,\n cwd: string,\n deps: NetlifyBuildDeps = {},\n ctx?: AdapterBuildContext,\n): Promise<void> {\n // Wave 2 (T2.2) — reject polyglot services on this adapter.\n assertServicesUnsupported('netlify', readManifest(cwd))\n\n const runNodeBuild = deps.runNodeBuild ?? nodeAdapter.build.bind(nodeAdapter)\n await runNodeBuild(config, cwd, ctx)\n\n const ensureDir = deps.ensureDir ?? ((p: string) => mkdirSync(p, { recursive: true }))\n const writeFile =\n deps.writeFile ??\n ((p, c) => {\n writeFileSync(p, c)\n })\n const readTomlIfExists =\n deps.readTomlIfExists ??\n (() => {\n const p = resolve(cwd, 'netlify.toml')\n return existsSync(p) ? readFileSync(p, 'utf-8') : null\n })\n\n const fnDir = resolve(cwd, '.netlify/functions')\n ensureDir(fnDir)\n writeFile(\n resolve(fnDir, 'theo.mjs'),\n renderNetlifyFunction({\n securityHeaders: config.security?.headers,\n // B-235 — pillar (a): the option existed and no build passed it, so a project with a\n // configured agents directory got the default `agents` on this target. Same defect\n // B-185 fixed for bun and deno, one target over.\n agentsDir: config.agentsDir,\n csrf: config.security?.csrf,\n disallowed: config.security?.disallowed,\n cors: config.security?.cors,\n // #425 — a selector, not a transformer, so it rides as a literal like the values above.\n serialization: config.serialization,\n }),\n )\n\n const existingToml = readTomlIfExists()\n const merged = mergeNetlifyToml(existingToml, config.security?.headers)\n writeFile(resolve(cwd, 'netlify.toml'), merged)\n\n // eslint-disable-next-line no-console -- CLI build progress\n console.log('\\n ✓ Netlify output → .netlify/functions/theo.mjs + netlify.toml')\n // eslint-disable-next-line no-console -- CLI build progress\n console.log(\n `${describeDeployedSecurityHeaders({\n target: 'netlify',\n securityHeaders: config.security?.headers,\n mintsNonce: false,\n documentHeaders: 'platform-configured',\n })}\\n`,\n )\n}\n\nexport const netlifyAdapter: DeployAdapter = {\n name: 'netlify',\n streamsResponses: true,\n // #409 / #410 — the generated entry calls `executeRoute` with routes, loader\n // and serverDir only. CSRF, route policy, file middleware and Zod validation\n // still run because they live inside `executeRoute`; none of the remaining\n // configurable concerns reach it. Declared explicitly rather than omitted so\n // the gap is a statement in the source and not an absence.\n //\n // `securityHeaders` IS applied -- to every response this function returns.\n // The document is served by Netlify's static host and does not pass through\n // it (usetheokit/theokit#412).\n appliesConfig: ['securityHeaders', 'csrf', 'disallowed', 'cors', 'serialization'],\n // B-257 — per-invocation: an in-process counter does not survive, so a declared limit needs a durable store.\n enforcesRateLimit: 'with-a-store',\n build(config, cwd, ctx) {\n return buildNetlify(config, cwd, {}, ctx)\n },\n}\n"],"mappings":"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","names":["sep"]}
|
|
@@ -4,13 +4,13 @@ import {
|
|
|
4
4
|
_resetObservabilityAdapter,
|
|
5
5
|
createObservabilityPluginFromConfig,
|
|
6
6
|
getObservabilityAdapter
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-PEL3MJLM.js";
|
|
8
8
|
import "./chunk-C27VRUVN.js";
|
|
9
9
|
import "./chunk-7UZZHCRN.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-D2R5SJEL.js";
|
|
11
11
|
export {
|
|
12
12
|
_resetObservabilityAdapter,
|
|
13
13
|
createObservabilityPluginFromConfig,
|
|
14
14
|
getObservabilityAdapter
|
|
15
15
|
};
|
|
16
|
-
//# sourceMappingURL=observability-bootstrap-
|
|
16
|
+
//# sourceMappingURL=observability-bootstrap-FP6LMMJE.js.map
|
|
@@ -12,12 +12,12 @@ import "./chunk-NO6HA4FG.js";
|
|
|
12
12
|
import "./chunk-Z7CJHDLS.js";
|
|
13
13
|
import {
|
|
14
14
|
loadConfig
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-SZWGXHY3.js";
|
|
16
16
|
import "./chunk-3QPVEJ7D.js";
|
|
17
17
|
import "./chunk-U5PWXS3J.js";
|
|
18
|
-
import "./chunk-
|
|
18
|
+
import "./chunk-X2LFNDJQ.js";
|
|
19
19
|
import "./chunk-ZNZISJDZ.js";
|
|
20
|
-
import "./chunk-
|
|
20
|
+
import "./chunk-D2R5SJEL.js";
|
|
21
21
|
|
|
22
22
|
// src/cli/commands/openapi.ts
|
|
23
23
|
import { mkdtempSync, rmSync } from "fs";
|
|
@@ -84,4 +84,4 @@ function emitOpenApiInMemory(manifest, config) {
|
|
|
84
84
|
export {
|
|
85
85
|
openapiCommand
|
|
86
86
|
};
|
|
87
|
-
//# sourceMappingURL=openapi-
|
|
87
|
+
//# sourceMappingURL=openapi-Q53YOBIU.js.map
|
|
@@ -4,8 +4,8 @@ import "tsx/esm";
|
|
|
4
4
|
// src/cli/commands/preview.ts
|
|
5
5
|
async function defaultSteps() {
|
|
6
6
|
const [{ buildCommand }, { startCommand }] = await Promise.all([
|
|
7
|
-
import("./build-
|
|
8
|
-
import("./start-
|
|
7
|
+
import("./build-4J24BAEC.js"),
|
|
8
|
+
import("./start-LCA67RES.js")
|
|
9
9
|
]);
|
|
10
10
|
return {
|
|
11
11
|
build: (opts) => buildCommand(opts),
|
|
@@ -20,4 +20,4 @@ async function previewCommand(options = {}, steps) {
|
|
|
20
20
|
export {
|
|
21
21
|
previewCommand
|
|
22
22
|
};
|
|
23
|
-
//# sourceMappingURL=preview-
|
|
23
|
+
//# sourceMappingURL=preview-FSUPVADO.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { IncomingMessage } from 'node:http';
|
|
2
|
-
import { R as RateLimitStore } from './rate-limit-store-
|
|
2
|
+
import { R as RateLimitStore, B as BakedStoreDeclaration } from './rate-limit-store-n1wD4Yk4.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Rate limit configuration — basic single-bucket shape. Per ADR D2, the
|
|
@@ -9,6 +9,16 @@ import { R as RateLimitStore } from './rate-limit-store-BEJnhWdw.js';
|
|
|
9
9
|
interface RateLimitConfig {
|
|
10
10
|
windowMs: number;
|
|
11
11
|
max: number;
|
|
12
|
+
/**
|
|
13
|
+
* B-257 — the durable store a DEPLOYED entry constructs. Declared here because the config schema
|
|
14
|
+
* accepts it and this type is what the parsed config narrows to.
|
|
15
|
+
*
|
|
16
|
+
* The synchronous facades below IGNORE it: they cannot await, which is the whole reason
|
|
17
|
+
* `createDurableRateLimiterWeb` exists beside them (ADR 0018). A deployed entry reads this field
|
|
18
|
+
* at BUILD time, through `adapters/deployed-rate-limit.ts`, and constructs the store in the
|
|
19
|
+
* generated source — it is never read at request time by this module.
|
|
20
|
+
*/
|
|
21
|
+
store?: RateLimitStore | BakedStoreDeclaration;
|
|
12
22
|
}
|
|
13
23
|
interface RateLimitResult {
|
|
14
24
|
limited: boolean;
|
|
@@ -21,7 +21,54 @@ interface RateLimitState {
|
|
|
21
21
|
count: number;
|
|
22
22
|
/** Absolute timestamp (ms since epoch) when this window expires. */
|
|
23
23
|
resetAt: number;
|
|
24
|
+
/**
|
|
25
|
+
* B-261 — how many requests the window BEFORE this one admitted, when the store can say.
|
|
26
|
+
*
|
|
27
|
+
* Optional, and the optionality IS the compatibility line: a third-party store returning only
|
|
28
|
+
* `{ count, resetAt }` keeps working with the behaviour it already had rather than breaking. A store
|
|
29
|
+
* that supplies this gets a sliding window instead of a fixed one.
|
|
30
|
+
*
|
|
31
|
+
* Why it is needed: with `resetAt` pinned at the first request of a window, filling the window late
|
|
32
|
+
* and the next one early spends two budgets inside one window's worth of time. Measured before the
|
|
33
|
+
* fix — `windowMs: 400, max: 5` admitted 10 in ~405ms, a factor of exactly 2.
|
|
34
|
+
*/
|
|
35
|
+
previousCount?: number;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* A durable store named at BUILD time, for an adapter to construct in a generated entry.
|
|
39
|
+
*
|
|
40
|
+
* B-257 — NOT a `RateLimitStore`. It has no methods, nothing calls it, and it exists only as text
|
|
41
|
+
* an adapter bakes into a generated entry: `config/schemas/rate-limit.ts` accepts it,
|
|
42
|
+
* `adapters/deployed-rate-limit.ts` emits it, and `createDurableRateLimiterWeb` receives the store
|
|
43
|
+
* the generated code constructed from it.
|
|
44
|
+
*
|
|
45
|
+
* It lives beside `RateLimitStore` because the two share a config key and a reader meeting one
|
|
46
|
+
* must be able to see the other. Declared once: the same shape was written inline in two modules
|
|
47
|
+
* before this, and two copies of one type diverge on the first change to either.
|
|
48
|
+
*/
|
|
49
|
+
interface BakedStoreDeclaration {
|
|
50
|
+
module: string;
|
|
51
|
+
factory: string;
|
|
52
|
+
options?: Record<string, string | number | boolean>;
|
|
24
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* The count a sliding window charges: the current window, plus whatever of the previous one is still
|
|
56
|
+
* inside `windowMs`.
|
|
57
|
+
*
|
|
58
|
+
* B-261 — it lives HERE and not in either limiter, because review found the first version living in
|
|
59
|
+
* `rate-limit-durable.ts` only: the durable path stopped bursting and the sync path still admitted 10
|
|
60
|
+
* against a nominal 5. Two limiters over one store disagreeing about what `max` means is the exact
|
|
61
|
+
* divergence B-260 had closed on the header contract, one item earlier, on a different axis.
|
|
62
|
+
*
|
|
63
|
+
* The weight is how much of the previous window has NOT yet slid out — nearly 1 just after a boundary,
|
|
64
|
+
* decaying to 0 by the end of the window. Clamped to 0..1, because a clock that moved would otherwise
|
|
65
|
+
* produce a negative weight (which CREDITS the caller) or one above 1 (which charges it for traffic
|
|
66
|
+
* that never happened).
|
|
67
|
+
*
|
|
68
|
+
* A store that cannot report `previousCount` yields the current count alone — today's behaviour and
|
|
69
|
+
* today's burst, so nothing breaks for a store nobody updated.
|
|
70
|
+
*/
|
|
71
|
+
declare function slidingCount(state: RateLimitState, windowMs: number): number;
|
|
25
72
|
interface RateLimitStore {
|
|
26
73
|
/**
|
|
27
74
|
* Atomic increment-and-get. If the key is missing OR the previous
|
|
@@ -69,4 +116,4 @@ declare class InMemoryStore implements RateLimitStore {
|
|
|
69
116
|
reset(key: string): Promise<void>;
|
|
70
117
|
}
|
|
71
118
|
|
|
72
|
-
export { InMemoryStore as I, type RateLimitStore as R, type RateLimitState as a };
|
|
119
|
+
export { type BakedStoreDeclaration as B, InMemoryStore as I, type RateLimitStore as R, type RateLimitState as a, slidingCount as s };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import "tsx/esm";
|
|
3
|
+
|
|
4
|
+
// src/adapters/registry.ts
|
|
5
|
+
var adapterRegistry = {
|
|
6
|
+
node: async () => (await import("./node-QUGTW6XV.js")).nodeAdapter,
|
|
7
|
+
vercel: async () => (await import("./vercel-5PMYEEKF.js")).vercelAdapter,
|
|
8
|
+
cloudflare: async () => (await import("./cloudflare-4M4XVNUH.js")).cloudflareAdapter,
|
|
9
|
+
static: async () => (await import("./static-NQPLPAB6.js")).staticAdapter,
|
|
10
|
+
bun: async () => (await import("./bun-NKVHOFSJ.js")).bunAdapter,
|
|
11
|
+
"deno-deploy": async () => (await import("./deno-deploy-IVACZ62D.js")).denoDeployAdapter,
|
|
12
|
+
netlify: async () => (await import("./netlify-3HEWV375.js")).netlifyAdapter,
|
|
13
|
+
"aws-lambda": async () => (await import("./aws-lambda-7AZNJGWU.js")).awsLambdaAdapter,
|
|
14
|
+
"theo-cloud": async () => (await import("./theo-cloud-HMFNZ3FS.js")).theoCloudAdapter
|
|
15
|
+
};
|
|
16
|
+
async function resolveAdapter(target) {
|
|
17
|
+
const factory = adapterRegistry[target];
|
|
18
|
+
return factory();
|
|
19
|
+
}
|
|
20
|
+
export {
|
|
21
|
+
resolveAdapter
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=registry-SDBODRU6.js.map
|
|
@@ -11,12 +11,12 @@ import {
|
|
|
11
11
|
import "./chunk-Z7CJHDLS.js";
|
|
12
12
|
import {
|
|
13
13
|
loadConfig
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-SZWGXHY3.js";
|
|
15
15
|
import "./chunk-3QPVEJ7D.js";
|
|
16
16
|
import "./chunk-U5PWXS3J.js";
|
|
17
|
-
import "./chunk-
|
|
17
|
+
import "./chunk-X2LFNDJQ.js";
|
|
18
18
|
import "./chunk-ZNZISJDZ.js";
|
|
19
|
-
import "./chunk-
|
|
19
|
+
import "./chunk-D2R5SJEL.js";
|
|
20
20
|
|
|
21
21
|
// src/cli/commands/routes.ts
|
|
22
22
|
import { resolve, relative } from "path";
|
|
@@ -64,4 +64,4 @@ async function routesCommand() {
|
|
|
64
64
|
export {
|
|
65
65
|
routesCommand
|
|
66
66
|
};
|
|
67
|
-
//# sourceMappingURL=routes-
|
|
67
|
+
//# sourceMappingURL=routes-FDF4SLOB.js.map
|
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
import "tsx/esm";
|
|
3
3
|
import {
|
|
4
4
|
theoConfigSchema
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-X2LFNDJQ.js";
|
|
6
6
|
import "./chunk-ZNZISJDZ.js";
|
|
7
7
|
import {
|
|
8
8
|
cacheSchema,
|
|
9
9
|
corsSchema,
|
|
10
10
|
securityHeadersSchema,
|
|
11
11
|
storageSchema
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-D2R5SJEL.js";
|
|
13
13
|
export {
|
|
14
14
|
cacheSchema,
|
|
15
15
|
corsSchema,
|
|
@@ -17,4 +17,4 @@ export {
|
|
|
17
17
|
storageSchema,
|
|
18
18
|
theoConfigSchema
|
|
19
19
|
};
|
|
20
|
-
//# sourceMappingURL=schema-
|
|
20
|
+
//# sourceMappingURL=schema-LHNWUR4V.js.map
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
securitySchema,
|
|
11
11
|
storageSchema,
|
|
12
12
|
uploadSchema
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-D2R5SJEL.js";
|
|
14
14
|
export {
|
|
15
15
|
cacheSchema,
|
|
16
16
|
corsSchema,
|
|
@@ -22,4 +22,4 @@ export {
|
|
|
22
22
|
storageSchema,
|
|
23
23
|
uploadSchema
|
|
24
24
|
};
|
|
25
|
-
//# sourceMappingURL=schemas-
|
|
25
|
+
//# sourceMappingURL=schemas-2R2J64ZH.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { IncomingMessage, ServerResponse } from 'node:http';
|
|
2
2
|
import { CanActivate } from '@theokit/http';
|
|
3
3
|
export { g as generateNonce } from '../../nonce-BXt7Qu_C.js';
|
|
4
|
-
import { R as RateLimitStore } from '../../rate-limit-store-
|
|
4
|
+
import { R as RateLimitStore } from '../../rate-limit-store-n1wD4Yk4.js';
|
|
5
5
|
|
|
6
6
|
declare class AuthRequiredError extends Error {
|
|
7
7
|
code: "AUTH_REQUIRED";
|
package/dist/server/index.d.ts
CHANGED
|
@@ -26,9 +26,9 @@ export { ConsoleObservabilityAdapter, LogLevel, LoggerFn, NoopObservabilityAdapt
|
|
|
26
26
|
export { a as AuditEvent, A as AuditLogger, J as JsonStdoutSink, c as createNoOpLogger, s as safeAudit } from '../audit-log-BQWM5YLG.js';
|
|
27
27
|
export { D as DuplicateDecorationError, a as DuplicatePluginError, P as PluginRunner } from '../plugin-runner-BVMOSxvb.js';
|
|
28
28
|
export { InvalidPluginShapeError, createPluginRunnerFromConfig } from './plugins/index.js';
|
|
29
|
-
export { DeriveKeyRequestContext, KeyByMode, RateLimited, RateLimitedKeyBy, RateLimitedOptions, RouteRateLimitConfig, TrustProxy, createRouteRateLimiter, createRouteRateLimiterWeb, deriveKey, deriveKeyFromRequest, matchRoutePattern, resolveClientIp, resolveClientIpFromRequest } from './rate-limit/index.js';
|
|
30
|
-
export { R as RateLimitConfig, a as RateLimitResult, c as createRateLimiter, b as createRateLimiterWeb } from '../rate-limit-
|
|
31
|
-
export { I as InMemoryStore, a as RateLimitState, R as RateLimitStore } from '../rate-limit-store-
|
|
29
|
+
export { DeriveKeyRequestContext, KeyByMode, RateLimited, RateLimitedKeyBy, RateLimitedOptions, RouteRateLimitConfig, TrustProxy, buildRateLimiter, createDurableRateLimiterWeb, createRouteRateLimiter, createRouteRateLimiterWeb, deriveKey, deriveKeyFromRequest, matchRoutePattern, resolveClientIp, resolveClientIpFromRequest } from './rate-limit/index.js';
|
|
30
|
+
export { R as RateLimitConfig, a as RateLimitResult, c as createRateLimiter, b as createRateLimiterWeb } from '../rate-limit-fULgvzCz.js';
|
|
31
|
+
export { B as BakedStoreDeclaration, I as InMemoryStore, a as RateLimitState, R as RateLimitStore, s as slidingCount } from '../rate-limit-store-n1wD4Yk4.js';
|
|
32
32
|
export { ChannelManager } from './realtime/index.js';
|
|
33
33
|
export { CSP_REPORT_PATH, CSRF_READINESS_PATH, CSRF_READINESS_RESET_PATH, CspReportHandlerOptions, CspViolation, CsrfDecision, CsrfMultiHeaderOptions, applySecurityHeaders, escapeHtml, escapeHtmlAttribute, evaluateCsrfMultiHeaderRequest, handleCspReport, handleCspReportRequest, handleCsrfReadiness, handleCsrfReadinessRequest, isCsrfOriginAllowed, matchWildcardDomain, normalizeLegacy, normalizeNew } from './security/index.js';
|
|
34
34
|
export { a as CSRF_WARN_CODE, b as CSRF_WARN_DOCS_URL, c as CsrfLogger, C as CsrfMode, d as CsrfWarnPayload, D as DisallowedConfig, e as enforceCsrf, m as matchDisallowed, v as validateCsrf, f as validateCsrfRequest } from '../csrf-Dgot9qSM.js';
|
package/dist/server/index.js
CHANGED
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
getStorageManager,
|
|
9
9
|
useDatabase,
|
|
10
10
|
useUnstorage
|
|
11
|
-
} from "../chunk-
|
|
11
|
+
} from "../chunk-FJEKQ4FT.js";
|
|
12
12
|
import {
|
|
13
13
|
BodyTooLargeError,
|
|
14
14
|
DEFAULT_MAX_BODY_BYTES,
|
|
@@ -68,6 +68,8 @@ import {
|
|
|
68
68
|
import "../chunk-GUBN5UTT.js";
|
|
69
69
|
import {
|
|
70
70
|
RateLimited,
|
|
71
|
+
buildRateLimiter,
|
|
72
|
+
createDurableRateLimiterWeb,
|
|
71
73
|
createRouteRateLimiter,
|
|
72
74
|
createRouteRateLimiterWeb,
|
|
73
75
|
deriveKey,
|
|
@@ -75,7 +77,7 @@ import {
|
|
|
75
77
|
matchRoutePattern,
|
|
76
78
|
resolveClientIp,
|
|
77
79
|
resolveClientIpFromRequest
|
|
78
|
-
} from "../chunk-
|
|
80
|
+
} from "../chunk-JJXBRY2U.js";
|
|
79
81
|
import {
|
|
80
82
|
ChannelManager
|
|
81
83
|
} from "../chunk-4PBJ266F.js";
|
|
@@ -202,8 +204,9 @@ import {
|
|
|
202
204
|
import {
|
|
203
205
|
InMemoryStore,
|
|
204
206
|
createRateLimiter,
|
|
205
|
-
createRateLimiterWeb
|
|
206
|
-
|
|
207
|
+
createRateLimiterWeb,
|
|
208
|
+
slidingCount
|
|
209
|
+
} from "../chunk-SFGGRC35.js";
|
|
207
210
|
import {
|
|
208
211
|
createProductionLoader,
|
|
209
212
|
createViteLoader
|
|
@@ -1220,6 +1223,7 @@ export {
|
|
|
1220
1223
|
assertProductionSecret,
|
|
1221
1224
|
buildCronManifest,
|
|
1222
1225
|
buildJobManifest,
|
|
1226
|
+
buildRateLimiter,
|
|
1223
1227
|
buildResourceDescriptors,
|
|
1224
1228
|
buildSecurityHeaders,
|
|
1225
1229
|
callProcedure,
|
|
@@ -1237,6 +1241,7 @@ export {
|
|
|
1237
1241
|
createCorsHandler,
|
|
1238
1242
|
createCorsWebHandler,
|
|
1239
1243
|
createCronScheduler,
|
|
1244
|
+
createDurableRateLimiterWeb,
|
|
1240
1245
|
createJobRunner,
|
|
1241
1246
|
createLogger,
|
|
1242
1247
|
createNoOpLogger,
|
|
@@ -1391,6 +1396,7 @@ export {
|
|
|
1391
1396
|
serverErrorToEnvelope,
|
|
1392
1397
|
setCookie,
|
|
1393
1398
|
slack,
|
|
1399
|
+
slidingCount,
|
|
1394
1400
|
splitFrontmatter,
|
|
1395
1401
|
streamAgentTurnInProcess,
|
|
1396
1402
|
stripe,
|
package/dist/server/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cache/constants.ts","../../src/cache/validation.ts","../../src/cache/define-cached-function.ts","../../src/cache/cache-control-header.ts","../../src/cache/key-derivation.ts","../../src/cache/define-cached-route.ts","../../src/cache/cache-engine.ts","../../src/cache/in-memory-adapter.ts","../../src/cache/engine-singleton.ts","../../src/cache/revalidate.ts","../../src/cache/route-rules.ts","../../src/server/serialization.ts","../../src/server/http/ctx-reconciliation.ts","../../src/server/index.ts"],"mappings":"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","names":["deriveKey","deriveKey","opts","warnOnce"]}
|
|
1
|
+
{"version":3,"sources":["../../src/cache/constants.ts","../../src/cache/validation.ts","../../src/cache/define-cached-function.ts","../../src/cache/cache-control-header.ts","../../src/cache/key-derivation.ts","../../src/cache/define-cached-route.ts","../../src/cache/cache-engine.ts","../../src/cache/in-memory-adapter.ts","../../src/cache/engine-singleton.ts","../../src/cache/revalidate.ts","../../src/cache/route-rules.ts","../../src/server/serialization.ts","../../src/server/http/ctx-reconciliation.ts","../../src/server/index.ts"],"mappings":"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","names":["deriveKey","deriveKey","opts","warnOnce"]}
|