@reckona/mreact-router 0.0.180 → 0.0.182
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.d.ts.map +1 -1
- package/dist/actions.js +20 -8
- package/dist/actions.js.map +1 -1
- package/dist/adapters/cloudflare.d.ts.map +1 -1
- package/dist/adapters/cloudflare.js +53 -18
- package/dist/adapters/cloudflare.js.map +1 -1
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +65 -12
- package/dist/build.js.map +1 -1
- package/dist/built-assets.d.ts.map +1 -1
- package/dist/built-assets.js +2 -2
- package/dist/built-assets.js.map +1 -1
- package/dist/cache-config.d.ts +1 -1
- package/dist/cache-config.d.ts.map +1 -1
- package/dist/cache-config.js.map +1 -1
- package/dist/cache.d.ts.map +1 -1
- package/dist/cache.js +18 -1
- package/dist/cache.js.map +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +16 -6
- package/dist/client.js.map +1 -1
- package/dist/csrf.js +10 -6
- package/dist/csrf.js.map +1 -1
- package/dist/navigation.d.ts.map +1 -1
- package/dist/navigation.js +14 -1
- package/dist/navigation.js.map +1 -1
- package/dist/render.d.ts +2 -0
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +81 -38
- package/dist/render.js.map +1 -1
- package/dist/vite.d.ts.map +1 -1
- package/dist/vite.js +5 -3
- package/dist/vite.js.map +1 -1
- package/package.json +11 -11
- package/src/actions.ts +26 -9
- package/src/adapters/cloudflare.ts +98 -41
- package/src/build.ts +93 -30
- package/src/built-assets.ts +2 -3
- package/src/cache-config.ts +1 -0
- package/src/cache.ts +20 -1
- package/src/client.ts +16 -6
- package/src/csrf.ts +13 -6
- package/src/navigation.ts +16 -1
- package/src/render.ts +168 -70
- package/src/vite.ts +6 -3
package/dist/actions.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,KAAK,0BAA0B,EAE/B,KAAK,uBAAuB,EAC5B,KAAK,4BAA4B,EAElC,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,KAAK,cAAc,EAAyB,MAAM,YAAY,CAAC;AAExE,OAAO,EAAqC,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACnG,OAAO,EAAW,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,WAAW,CAAC;AAOnB,OAAO,EAEL,KAAK,+BAA+B,EACrC,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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"}
|
package/dist/actions.js
CHANGED
|
@@ -15,13 +15,17 @@ import { collectRuntimeInferredServerActions, } from "./server-action-inference.
|
|
|
15
15
|
function isProductionEnvironment() {
|
|
16
16
|
return process.env.NODE_ENV === "production";
|
|
17
17
|
}
|
|
18
|
+
function isLocalServerActionEnvironment() {
|
|
19
|
+
return process.env.NODE_ENV === "development" || process.env.NODE_ENV === "test";
|
|
20
|
+
}
|
|
18
21
|
const formFieldModuleId = "__mreact_module_id";
|
|
19
22
|
const formFieldExportName = "__mreact_export_name";
|
|
20
23
|
const formFieldNonce = "__mreact_action_nonce";
|
|
21
24
|
const formFieldActionToken = "__mreact_action_token";
|
|
22
25
|
const csrfTokenPlaceholder = "__mreact_action_csrf_placeholder__";
|
|
23
26
|
const actionNoncePlaceholder = "__mreact_action_nonce_placeholder__";
|
|
24
|
-
const
|
|
27
|
+
const MIN_ACTION_TOKEN_SECRET_BYTES = 32;
|
|
28
|
+
const actionTokenSecret = configuredActionTokenSecret(process.env.MREACT_SERVER_ACTION_SECRET);
|
|
25
29
|
// Bounded default replay store for form-action nonces. The previous
|
|
26
30
|
// implementation was an unbounded Set that grew with every successful
|
|
27
31
|
// submission (Issue 069). Production callers should still pass a shared
|
|
@@ -50,6 +54,15 @@ function defaultActionTokenSecret() {
|
|
|
50
54
|
}
|
|
51
55
|
return randomBytes(32).toString("base64url");
|
|
52
56
|
}
|
|
57
|
+
function configuredActionTokenSecret(value) {
|
|
58
|
+
if (value === undefined) {
|
|
59
|
+
return defaultActionTokenSecret();
|
|
60
|
+
}
|
|
61
|
+
if (Buffer.byteLength(value, "utf8") < MIN_ACTION_TOKEN_SECRET_BYTES) {
|
|
62
|
+
throw new Error(`MREACT_SERVER_ACTION_SECRET must be at least ${MIN_ACTION_TOKEN_SECRET_BYTES} bytes.`);
|
|
63
|
+
}
|
|
64
|
+
return value;
|
|
65
|
+
}
|
|
53
66
|
class BoundedReplayStore {
|
|
54
67
|
ttlMs;
|
|
55
68
|
maxEntries;
|
|
@@ -577,7 +590,7 @@ function isAllowedServerAction(reference, allowedActions) {
|
|
|
577
590
|
}
|
|
578
591
|
function warnIfUnrestrictedServerActions(allowedActions) {
|
|
579
592
|
if (allowedActions !== undefined ||
|
|
580
|
-
|
|
593
|
+
isLocalServerActionEnvironment() ||
|
|
581
594
|
warnedUnrestrictedServerActions) {
|
|
582
595
|
return;
|
|
583
596
|
}
|
|
@@ -585,7 +598,7 @@ function warnIfUnrestrictedServerActions(allowedActions) {
|
|
|
585
598
|
console.warn("[mreact] Server actions are running without an allowedActions manifest. Built app-router deployments generate this manifest automatically; direct production integrations should pass serverActions.allowedActions.");
|
|
586
599
|
}
|
|
587
600
|
function validateServerActionManifest(allowedActions) {
|
|
588
|
-
if (allowedActions !== undefined ||
|
|
601
|
+
if (allowedActions !== undefined || isLocalServerActionEnvironment()) {
|
|
589
602
|
return undefined;
|
|
590
603
|
}
|
|
591
604
|
return jsonResponse({ ok: false, error: "Server action manifest required." }, 403);
|
|
@@ -951,9 +964,6 @@ function moduleIdForFile(appDir, file) {
|
|
|
951
964
|
return relative(appDir, file).split(sep).join("/");
|
|
952
965
|
}
|
|
953
966
|
function validateServerActionRequestOrigin(request) {
|
|
954
|
-
if (!isProductionEnvironment()) {
|
|
955
|
-
return undefined;
|
|
956
|
-
}
|
|
957
967
|
const expectedOrigin = new URL(request.url).origin;
|
|
958
968
|
const origin = request.headers.get("origin");
|
|
959
969
|
if (origin !== null) {
|
|
@@ -962,8 +972,10 @@ function validateServerActionRequestOrigin(request) {
|
|
|
962
972
|
: jsonResponse({ ok: false, error: "Origin not allowed." }, 403);
|
|
963
973
|
}
|
|
964
974
|
const referer = request.headers.get("referer");
|
|
965
|
-
if (referer === null) {
|
|
966
|
-
return
|
|
975
|
+
if (referer === null || isLocalServerActionEnvironment()) {
|
|
976
|
+
return isLocalServerActionEnvironment()
|
|
977
|
+
? undefined
|
|
978
|
+
: jsonResponse({ ok: false, error: "Origin not allowed." }, 403);
|
|
967
979
|
}
|
|
968
980
|
try {
|
|
969
981
|
return new URL(referer).origin === expectedOrigin
|
package/dist/actions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash, createHmac, randomBytes, randomUUID, timingSafeEqual } from \"node:crypto\";\nimport { access, readdir, readFile } from \"node:fs/promises\";\nimport { dirname, join, relative, sep } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport {\n collectFormActionExpressionReferences,\n hasModuleDirective,\n} from \"@reckona/mreact-compiler\";\nimport {\n createServerActionHandler,\n type ServerActionHandlerOptions,\n type ServerActionRegistry,\n type ServerActionReplayStore,\n type ServerActionRequestReference,\n type ServerActionValidationResult,\n} from \"@reckona/mreact-server\";\nimport { bundleRouterModule, type RouterCompatBuildApi } from \"./bundle-pipeline.js\";\nimport { type AppRouterCache, withRouteCacheContext } from \"./cache.js\";\nimport { fileImportMetaUrlPlugin, importAppRouterSourceModule } from \"./module-runner.js\";\nimport { createAppRouterImportPolicyPlugin, type AppRouterImportPolicy } from \"./import-policy.js\";\nimport { cookies, type RequestCookies } from \"./navigation.js\";\nexport {\n createFormCsrfToken,\n formCsrfCookie,\n formCsrfFieldName,\n serverActionCookie,\n validateFormCsrf,\n} from \"./csrf.js\";\nimport {\n formCsrfFieldName,\n readExistingFormCsrfToken,\n serverActionCookieName,\n validateFormCsrf,\n} from \"./csrf.js\";\nimport {\n collectRuntimeInferredServerActions,\n type ServerActionInferenceDiagnostic,\n} from \"./server-action-inference.js\";\n\nfunction isProductionEnvironment(): boolean {\n return process.env.NODE_ENV === \"production\";\n}\nconst formFieldModuleId = \"__mreact_module_id\";\nconst formFieldExportName = \"__mreact_export_name\";\nconst formFieldNonce = \"__mreact_action_nonce\";\nconst formFieldActionToken = \"__mreact_action_token\";\nconst csrfTokenPlaceholder = \"__mreact_action_csrf_placeholder__\";\nconst actionNoncePlaceholder = \"__mreact_action_nonce_placeholder__\";\nconst actionTokenSecret = process.env.MREACT_SERVER_ACTION_SECRET ?? defaultActionTokenSecret();\n// Bounded default replay store for form-action nonces. The previous\n// implementation was an unbounded Set that grew with every successful\n// submission (Issue 069). Production callers should still pass a shared\n// store (Redis / KV) via `serverActions.replayStore` for multi-instance\n// deployments -- this default only guarantees replay protection within\n// a single process and is the safe fallback for dev / single-node setups.\n//\n// Retention model:\n// - TTL: 10 minutes. Form nonces are minted at SSR time and the user\n// has to submit before the cookie's SameSite=Lax window anyway; this\n// is generous for any realistic submit cadence.\n// - Max size: 50_000 entries. Old entries are evicted FIFO once the cap\n// is reached so a flood cannot trigger OOM.\n//\n// Both bounds are intentional defaults -- tight enough that a single\n// process cannot leak unbounded RSS, loose enough that legitimate\n// traffic does not trip false-positive 409s.\nconst DEFAULT_REPLAY_TTL_MS = 10 * 60 * 1000;\nconst DEFAULT_REPLAY_MAX_ENTRIES = 50_000;\nconst DEFAULT_ACTION_BODY_MAX_BYTES = 10 * 1024 * 1024;\nconst DEFAULT_ACTION_FORM_MAX_FIELDS = 1_000;\nlet warnedUnrestrictedServerActions = false;\n\n/**\n * Request context passed to authorized server actions.\n *\n * It exposes normalized cookies, headers, and the original `Request`. `clientIp` is reserved for trusted adapter integrations and is omitted by the default header-only dispatcher because forwarded IP headers are attacker-controlled without a trusted proxy boundary.\n */\nexport interface ServerActionContext {\n clientIp?: string | undefined;\n cookies: RequestCookies;\n headers: Headers;\n request: Request;\n}\n\nfunction defaultActionTokenSecret(): string {\n if (isProductionEnvironment()) {\n console.warn(\n \"mreact-router: MREACT_SERVER_ACTION_SECRET is not set. Inferred server action tokens use a per-process secret and may fail across multiple production instances.\",\n );\n }\n\n return randomBytes(32).toString(\"base64url\");\n}\n\nclass BoundedReplayStore {\n private readonly entries = new Map<string, number>();\n\n constructor(\n private readonly ttlMs: number,\n private readonly maxEntries: number,\n ) {}\n\n has(value: string): boolean {\n const expiresAt = this.entries.get(value);\n if (expiresAt === undefined) return false;\n if (expiresAt < Date.now()) {\n this.entries.delete(value);\n return false;\n }\n return true;\n }\n\n add(value: string): void {\n const now = Date.now();\n if (this.entries.size >= this.maxEntries) {\n const oldest = this.entries.entries().next().value;\n if (oldest !== undefined) {\n const [key, expiresAt] = oldest;\n this.entries.delete(key);\n if (expiresAt < now) {\n while (this.entries.size >= this.maxEntries) {\n const nextOldest = this.entries.entries().next().value;\n if (nextOldest === undefined || nextOldest[1] >= now) {\n break;\n }\n this.entries.delete(nextOldest[0]);\n }\n }\n }\n }\n this.entries.set(value, now + this.ttlMs);\n }\n\n // Exposed for tests; not part of the ServerActionReplayStore interface.\n size(): number {\n return this.entries.size;\n }\n}\n\nconst usedFormActionNonces = new BoundedReplayStore(\n DEFAULT_REPLAY_TTL_MS,\n DEFAULT_REPLAY_MAX_ENTRIES,\n);\n\n// Test helpers: drop all entries between cases / expose the bounded store\n// so tests can drive its eviction semantics directly. Not part of the\n// public surface (prefixed with `__`).\nexport function __clearDefaultReplayStore(): void {\n (usedFormActionNonces as unknown as { entries: Map<string, number> }).entries.clear();\n}\n\nexport function __readDefaultReplayStore(): BoundedReplayStore {\n return usedFormActionNonces;\n}\n\n/**\n * Configures app-router server action dispatch, authorization, body limits, and replay protection.\n *\n * Production multi-instance deployments should provide a shared `replayStore` and a stable `MREACT_SERVER_ACTION_SECRET`.\n */\nexport interface AppRouterServerActionOptions {\n allowedActions?: readonly AppRouterAllowedServerAction[] | \"any\" | undefined;\n authorize?: ServerActionHandlerOptions[\"authorize\"] | undefined;\n maxBodyBytes?: number | undefined;\n maxFormFields?: number | undefined;\n replayStore?: ServerActionReplayStore | undefined;\n}\n\n/**\n * Describes a server action request reference that the app router may dispatch.\n */\nexport interface AppRouterAllowedServerAction extends ServerActionRequestReference {\n inferred?: boolean | undefined;\n}\n\nexport interface PreparedRouteActions {\n actionNonce?: string;\n code: string;\n csrfToken?: string;\n diagnostics?: ServerActionInferenceDiagnostic[] | undefined;\n htmlReplacements?: readonly (readonly [string, string])[] | undefined;\n // True when the cookie should be (re)set on the response. False means\n // the incoming request already carried a valid CSRF cookie that the\n // render is reusing -- skipping Set-Cookie avoids cookie thrash across\n // concurrent tabs (Issue 070).\n csrfTokenIsNew?: boolean;\n hasFormActions: boolean;\n}\n\ninterface ActionReference {\n exportName: string;\n expression?: string | undefined;\n inferred: boolean;\n moduleId: string;\n}\n\n/**\n * Identifies an inferred form action expression rewritten during route preparation.\n */\nexport interface PreparedFormActionReference {\n end: number;\n expression: string;\n expressionEnd: number;\n expressionStart: number;\n exportName: string;\n inferred: boolean;\n moduleId: string;\n sourceHash: string;\n start: number;\n}\n\nconst inferredServerActionReferences = new Map<string, Map<string, Map<string, ActionReference>>>();\n\nexport async function prepareRouteServerActions(options: {\n appDir: string;\n code: string;\n formActionReferences?: readonly PreparedFormActionReference[] | undefined;\n placeholders?: boolean | undefined;\n pageFile: string;\n request?: Request | undefined;\n}): Promise<PreparedRouteActions> {\n if (options.formActionReferences !== undefined && options.formActionReferences.length === 0) {\n replaceInferredServerActionReferences(options.appDir, options.pageFile, new Map());\n return { code: options.code, hasFormActions: false };\n }\n\n if (!hasFormActionCandidate(options.code, options.pageFile)) {\n replaceInferredServerActionReferences(options.appDir, options.pageFile, new Map());\n return { code: options.code, hasFormActions: false };\n }\n\n const inference =\n options.formActionReferences === undefined\n ? await collectImportedServerActions(options)\n : {\n diagnostics: [],\n references: formActionReferenceMap(options.code, options.formActionReferences),\n };\n const { diagnostics, references } = inference;\n\n if (references.size === 0) {\n replaceInferredServerActionReferences(options.appDir, options.pageFile, new Map());\n return diagnostics.length === 0\n ? { code: options.code, hasFormActions: false }\n : { code: options.code, diagnostics, hasFormActions: false };\n }\n\n // Reuse the existing CSRF token when the browser already sent one.\n // Rotating the cookie on every render (Issue 070) broke concurrent\n // forms because the older tab's hidden input no longer matched the\n // cookie value. The actionNonce stays per-render -- that is the field\n // tied to a specific submission via replay protection.\n const existingToken = readExistingFormCsrfToken(options.request);\n const csrfToken = existingToken ?? randomUUID();\n const csrfTokenIsNew = existingToken === undefined;\n const actionNonce = randomUUID();\n const usePlaceholders =\n options.placeholders === true && canUseStableFormActionPlaceholders(references);\n const lowered = lowerFormActions({\n actionNonce,\n code: options.code,\n csrfToken,\n placeholders: usePlaceholders,\n references,\n });\n\n if (lowered === options.code) {\n replaceInferredServerActionReferences(options.appDir, options.pageFile, new Map());\n return diagnostics.length === 0\n ? { code: options.code, hasFormActions: false }\n : { code: options.code, diagnostics, hasFormActions: false };\n }\n\n replaceInferredServerActionReferences(options.appDir, options.pageFile, references);\n\n return {\n actionNonce,\n code: lowered,\n csrfToken,\n csrfTokenIsNew,\n diagnostics,\n hasFormActions: true,\n ...(usePlaceholders\n ? { htmlReplacements: formActionHtmlReplacements({ actionNonce, csrfToken, references }) }\n : {}),\n };\n}\n\nexport function prepareRouteServerActionPlaceholders(options: {\n code: string;\n formActionReferences: readonly PreparedFormActionReference[];\n}): string {\n const references = formActionReferenceMap(options.code, options.formActionReferences);\n\n if (references.size === 0) {\n return options.code;\n }\n\n if (!canUseStableFormActionPlaceholders(references)) {\n return options.code;\n }\n\n return lowerFormActions({\n actionNonce: actionNoncePlaceholder,\n code: options.code,\n csrfToken: csrfTokenPlaceholder,\n placeholders: true,\n references,\n });\n}\n\nfunction canUseStableFormActionPlaceholders(\n references: ReadonlyMap<string, ActionReference>,\n): boolean {\n return [...references.values()].every(\n (reference) =>\n reference.expression === reference.exportName &&\n /^[A-Za-z_$][\\w$]*$/u.test(reference.expression),\n );\n}\n\nfunction formActionReferenceMap(\n code: string,\n references: readonly PreparedFormActionReference[],\n): Map<string, ActionReference> {\n const sourceHash = formActionSourceHash(code);\n\n return new Map(\n references\n .filter((reference) => reference.sourceHash === sourceHash)\n .map((reference) => [\n formActionOccurrenceKey(reference),\n {\n exportName: reference.exportName,\n expression: reference.expression,\n inferred: reference.inferred,\n moduleId: reference.moduleId,\n },\n ]),\n );\n}\n\nfunction hasFormActionCandidate(code: string, filename: string): boolean {\n return collectFormActionExpressionReferences({ code, filename }).length > 0;\n}\n\nexport async function dispatchServerActionRequest(options: {\n appDir: string;\n importPolicy?: AppRouterImportPolicy | undefined;\n request: Request;\n renderSingleFlightNavigation?: ((options: {\n path: string;\n request: Request;\n revalidatedPaths: readonly string[];\n }) => Promise<Response | undefined>) | undefined;\n routeCache?: AppRouterCache | undefined;\n serverActionCacheVersion?: string | undefined;\n serverActions?: AppRouterServerActionOptions | undefined;\n}): Promise<Response> {\n const { revalidatedPaths, value } = await withRouteCacheContext(options.routeCache, () =>\n dispatchServerActionRequestWithoutCacheContext(options),\n );\n const singleFlight = await renderSingleFlightActionResponse({\n render: options.renderSingleFlightNavigation,\n request: options.request,\n response: value,\n revalidatedPaths,\n });\n\n return withRevalidationHeader(singleFlight ?? value, revalidatedPaths);\n}\n\nasync function dispatchServerActionRequestWithoutCacheContext(options: {\n appDir: string;\n importPolicy?: AppRouterImportPolicy | undefined;\n request: Request;\n serverActionCacheVersion?: string | undefined;\n serverActions?: AppRouterServerActionOptions | undefined;\n}): Promise<Response> {\n // Validate everything we can statically before touching the filesystem\n // / bundler. A flood of malformed POSTs must not pay the registry-load\n // cost (Issue 067).\n if (options.request.method !== \"POST\") {\n return jsonResponse({ ok: false, error: \"Method not allowed.\" }, 405);\n }\n\n const bodySizeResponse = validateServerActionBodySize(\n options.request,\n options.serverActions?.maxBodyBytes ?? DEFAULT_ACTION_BODY_MAX_BYTES,\n );\n if (bodySizeResponse !== undefined) {\n return bodySizeResponse;\n }\n\n const originResponse = validateServerActionRequestOrigin(options.request);\n if (originResponse !== undefined) {\n return originResponse;\n }\n\n const contentType = options.request.headers.get(\"content-type\") ?? \"\";\n\n if (contentType.includes(\"application/json\")) {\n const manifestResponse = validateServerActionManifest(options.serverActions?.allowedActions);\n if (manifestResponse !== undefined) {\n return manifestResponse;\n }\n\n // JSON path delegates CSRF/replay to createServerActionHandler. The\n // registry is still needed here, but the handler short-circuits on\n // CSRF mismatch before invoking the action.\n let registry: ServerActionRegistry;\n try {\n registry = await loadServerActionRegistry({\n appDir: options.appDir,\n cacheVersion: options.serverActionCacheVersion,\n importPolicy: options.importPolicy,\n });\n } catch (error) {\n return jsonResponse(\n { ok: false, error: error instanceof Error ? error.message : String(error) },\n 500,\n );\n }\n\n const replayStore = options.serverActions?.replayStore ?? usedFormActionNonces;\n const handle = createServerActionHandler(jsonServerActionRegistry({\n allowedActions: options.serverActions?.allowedActions,\n appDir: options.appDir,\n registry,\n }), {\n ...(options.serverActions?.authorize === undefined\n ? {}\n : { authorize: options.serverActions.authorize }),\n ...(options.serverActions?.allowedActions === undefined ||\n options.serverActions.allowedActions === \"any\"\n ? {}\n : { allowedActions: jsonAllowedServerActions(options.serverActions.allowedActions) }),\n csrf: { cookieName: serverActionCookieName() },\n maxBodyBytes: options.serverActions?.maxBodyBytes ?? DEFAULT_ACTION_BODY_MAX_BYTES,\n replayProtection: { seen: replayStore },\n });\n\n return handle(options.request);\n }\n\n if (\n !contentType.includes(\"application/x-www-form-urlencoded\") &&\n !contentType.includes(\"multipart/form-data\")\n ) {\n return jsonResponse({ ok: false, error: \"Unsupported server action content type.\" }, 415);\n }\n\n const manifestResponse = validateServerActionManifest(options.serverActions?.allowedActions);\n if (manifestResponse !== undefined) {\n return manifestResponse;\n }\n\n const boundedRequest = await readServerActionRequestWithLimit(\n options.request,\n options.serverActions?.maxBodyBytes ?? DEFAULT_ACTION_BODY_MAX_BYTES,\n );\n if (boundedRequest instanceof Response) {\n return boundedRequest;\n }\n\n const formData = await boundedRequest.formData();\n const fieldCountResponse = validateServerActionFormFieldCount(\n formData,\n options.serverActions?.maxFormFields ?? DEFAULT_ACTION_FORM_MAX_FIELDS,\n );\n\n if (fieldCountResponse !== undefined) {\n return fieldCountResponse;\n }\n\n const csrfResponse = validateFormCsrf(options.request, formData);\n\n if (csrfResponse !== undefined) {\n return csrfResponse;\n }\n\n const moduleId = stringFormValue(formData.get(formFieldModuleId));\n const exportName = stringFormValue(formData.get(formFieldExportName));\n const nonce = stringFormValue(formData.get(formFieldNonce));\n\n if (moduleId === undefined || exportName === undefined || nonce === undefined) {\n return jsonResponse({ ok: false, error: \"Invalid server action reference.\" }, 400);\n }\n\n if (!isAllowedServerAction({ moduleId, exportName }, options.serverActions?.allowedActions)) {\n return jsonResponse({ ok: false, error: \"Unknown server action.\" }, 404);\n }\n\n if (\n isInferredServerActionReference({\n allowedActions: options.serverActions?.allowedActions,\n appDir: options.appDir,\n exportName,\n moduleId,\n }) &&\n !isValidFormActionToken({\n csrfToken: stringFormValue(formData.get(formCsrfFieldName)),\n exportName,\n moduleId,\n nonce,\n token: stringFormValue(formData.get(formFieldActionToken)),\n })\n ) {\n return jsonResponse({ ok: false, error: \"Unknown server action.\" }, 404);\n }\n\n const nonceResponse = validateFormNonce(\n formData,\n options.serverActions?.replayStore ?? usedFormActionNonces,\n );\n\n if (nonceResponse !== undefined) {\n return nonceResponse;\n }\n\n let registry: ServerActionRegistry;\n try {\n registry = await loadServerActionRegistry({\n appDir: options.appDir,\n cacheVersion: options.serverActionCacheVersion,\n importPolicy: options.importPolicy,\n });\n } catch (error) {\n return jsonResponse(\n { ok: false, error: error instanceof Error ? error.message : String(error) },\n 500,\n );\n }\n\n const action = registry[`${moduleId}#${exportName}`];\n\n if (typeof action !== \"function\") {\n return jsonResponse({ ok: false, error: \"Unknown server action.\" }, 404);\n }\n\n const actionFormData = cleanActionFormData(formData);\n const authorizationResponse = await authorizeFormAction({\n args: [actionFormData],\n authorize: options.serverActions?.authorize,\n exportName,\n moduleId,\n request: options.request,\n });\n\n if (authorizationResponse !== undefined) {\n return authorizationResponse;\n }\n\n try {\n const value = await action(actionFormData, createServerActionContext(options.request));\n\n if (value instanceof Response) {\n return value;\n }\n\n if (value === undefined || value === null) {\n return redirectToFormReferer(options.request);\n }\n\n return jsonResponse({ ok: true, value }, 200);\n } catch (error) {\n return jsonResponse(\n { ok: false, error: error instanceof Error ? error.message : String(error) },\n 500,\n );\n }\n}\n\nfunction createServerActionContext(request: Request): ServerActionContext {\n const clientIp = clientIpFromRequest(request);\n\n return {\n ...(clientIp === undefined ? {} : { clientIp }),\n cookies: cookies(request),\n headers: request.headers,\n request,\n };\n}\n\nfunction clientIpFromRequest(request: Request): string | undefined {\n void request;\n return undefined;\n}\n\nfunction validateServerActionBodySize(\n request: Request,\n maxBodyBytes: number,\n): Response | undefined {\n if (!Number.isFinite(maxBodyBytes) || maxBodyBytes < 0) {\n return undefined;\n }\n\n const contentLength = request.headers.get(\"content-length\");\n if (contentLength === null) {\n return undefined;\n }\n\n const bytes = Number(contentLength);\n if (!Number.isFinite(bytes) || bytes < 0) {\n return jsonResponse({ ok: false, error: \"Invalid Content-Length header.\" }, 400);\n }\n\n if (bytes > maxBodyBytes) {\n return jsonResponse({ ok: false, error: \"Server action request body is too large.\" }, 413);\n }\n\n return undefined;\n}\n\nasync function readServerActionRequestWithLimit(\n request: Request,\n maxBodyBytes: number,\n): Promise<Request | Response> {\n if (!Number.isFinite(maxBodyBytes) || maxBodyBytes < 0) {\n return request;\n }\n\n const body = request.body;\n if (body === null) {\n return request;\n }\n\n const reader = body.getReader();\n const chunks: Uint8Array[] = [];\n let total = 0;\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n total += value.byteLength;\n if (total > maxBodyBytes) {\n await reader.cancel();\n return jsonResponse({ ok: false, error: \"Server action request body is too large.\" }, 413);\n }\n chunks.push(value);\n }\n } finally {\n reader.releaseLock?.();\n }\n\n const buffer = new Uint8Array(total);\n let offset = 0;\n for (const chunk of chunks) {\n buffer.set(chunk, offset);\n offset += chunk.byteLength;\n }\n\n const headers = new Headers(request.headers);\n headers.delete(\"content-length\");\n return new Request(request.url, {\n body: buffer,\n headers,\n method: request.method,\n });\n}\n\nfunction validateServerActionFormFieldCount(\n formData: FormData,\n maxFormFields: number,\n): Response | undefined {\n if (!Number.isFinite(maxFormFields) || maxFormFields < 0) {\n return undefined;\n }\n\n let count = 0;\n for (const _ of formData.keys()) {\n count += 1;\n if (count > maxFormFields) {\n return jsonResponse({\n ok: false,\n error: \"Server action form field count is too large.\",\n }, 413);\n }\n }\n\n return undefined;\n}\n\nfunction redirectToFormReferer(request: Request): Response {\n return new Response(null, {\n status: 303,\n headers: {\n location: sameOriginRefererPath(request) ?? \"/\",\n },\n });\n}\n\nasync function renderSingleFlightActionResponse(options: {\n render:\n | ((options: {\n path: string;\n request: Request;\n revalidatedPaths: readonly string[];\n }) => Promise<Response | undefined>)\n | undefined;\n request: Request;\n response: Response;\n revalidatedPaths: readonly string[];\n}): Promise<Response | undefined> {\n if (\n options.render === undefined ||\n options.revalidatedPaths.length === 0 ||\n options.request.headers.get(\"x-mreact-action-single-flight\") !== \"1\" ||\n !isFormActionRedirectResponse(options.response)\n ) {\n return undefined;\n }\n\n const path = sameOriginResponseLocationPath(options.request, options.response);\n\n if (path === undefined || !options.revalidatedPaths.includes(normalizeActionPath(path))) {\n return undefined;\n }\n\n const rendered = await options.render({\n path,\n request: options.request,\n revalidatedPaths: options.revalidatedPaths,\n });\n\n if (rendered === undefined) {\n return undefined;\n }\n\n rendered.headers.set(\"x-mreact-action-single-flight\", \"1\");\n return rendered;\n}\n\nfunction isFormActionRedirectResponse(response: Response): boolean {\n return response.status >= 300 && response.status < 400 && response.headers.has(\"location\");\n}\n\nfunction sameOriginResponseLocationPath(request: Request, response: Response): string | undefined {\n const location = response.headers.get(\"location\");\n\n if (location === null) {\n return undefined;\n }\n\n try {\n const requestUrl = new URL(request.url);\n const locationUrl = new URL(location, requestUrl);\n\n return locationUrl.origin === requestUrl.origin\n ? `${locationUrl.pathname}${locationUrl.search}`\n : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction sameOriginRefererPath(request: Request): string | undefined {\n const referer = request.headers.get(\"referer\");\n\n if (referer === null) {\n return undefined;\n }\n\n try {\n const requestUrl = new URL(request.url);\n const refererUrl = new URL(referer, requestUrl);\n\n return refererUrl.origin === requestUrl.origin\n ? `${refererUrl.pathname}${refererUrl.search}`\n : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction normalizeActionPath(path: string): string {\n const pathname = path.startsWith(\"/\") ? path : `/${path}`;\n const withoutTrailing = pathname.length > 1 ? pathname.replace(/\\/+$/, \"\") : pathname;\n\n return withoutTrailing === \"\" ? \"/\" : withoutTrailing;\n}\n\nfunction withRevalidationHeader(response: Response, paths: string[]): Response {\n if (paths.length > 0) {\n response.headers.set(\"x-mreact-revalidate\", paths.join(\",\"));\n }\n\n return response;\n}\n\nasync function authorizeFormAction(options: {\n args: unknown[];\n authorize?: ServerActionHandlerOptions[\"authorize\"];\n exportName: string;\n moduleId: string;\n request: Request;\n}): Promise<Response | undefined> {\n const reference: ServerActionRequestReference = {\n exportName: options.exportName,\n moduleId: options.moduleId,\n };\n const authorizationResult = await options.authorize?.(options.request, reference, options.args);\n\n return authorizationResult !== undefined && authorizationResult !== true\n ? jsonResponse(\n {\n ok: false,\n error: authorizationError(authorizationResult),\n },\n 403,\n )\n : undefined;\n}\n\nfunction authorizationError(result: Exclude<ServerActionValidationResult, true>): string {\n return typeof result === \"string\" ? result : \"Server action not authorized.\";\n}\n\nfunction jsonAllowedServerActions(\n allowedActions: readonly AppRouterAllowedServerAction[],\n): ServerActionRequestReference[] {\n return allowedActions\n .filter((reference) => reference.inferred !== true)\n .map((reference) => ({\n exportName: reference.exportName,\n moduleId: reference.moduleId,\n }));\n}\n\nfunction jsonServerActionRegistry(options: {\n allowedActions: readonly AppRouterAllowedServerAction[] | \"any\" | undefined;\n appDir: string;\n registry: ServerActionRegistry;\n}): ServerActionRegistry {\n const inferredKeys = new Set<string>();\n\n for (const reference of inferredServerActionReferencesForApp(options.appDir).values()) {\n inferredKeys.add(serverActionKey(reference));\n }\n\n if (Array.isArray(options.allowedActions)) {\n for (const reference of options.allowedActions) {\n if (reference.inferred === true) {\n inferredKeys.add(serverActionKey(reference));\n }\n }\n }\n\n if (inferredKeys.size === 0) {\n return options.registry;\n }\n\n const registry: ServerActionRegistry = {};\n\n for (const [key, value] of Object.entries(options.registry)) {\n if (!inferredKeys.has(key)) {\n registry[key] = value;\n }\n }\n\n return registry;\n}\n\nfunction serverActionKey(reference: ServerActionRequestReference): string {\n return `${reference.moduleId}#${reference.exportName}`;\n}\n\nfunction isAllowedServerAction(\n reference: ServerActionRequestReference,\n allowedActions: readonly AppRouterAllowedServerAction[] | \"any\" | undefined,\n): boolean {\n if (allowedActions === undefined) {\n warnIfUnrestrictedServerActions(allowedActions);\n return true;\n }\n\n if (allowedActions === \"any\") {\n return true;\n }\n\n return allowedActions.some(\n (allowed) =>\n allowed.moduleId === reference.moduleId && allowed.exportName === reference.exportName,\n );\n}\n\nfunction warnIfUnrestrictedServerActions(\n allowedActions: readonly AppRouterAllowedServerAction[] | \"any\" | undefined,\n): void {\n if (\n allowedActions !== undefined ||\n !isProductionEnvironment() ||\n warnedUnrestrictedServerActions\n ) {\n return;\n }\n\n warnedUnrestrictedServerActions = true;\n console.warn(\n \"[mreact] Server actions are running without an allowedActions manifest. Built app-router deployments generate this manifest automatically; direct production integrations should pass serverActions.allowedActions.\",\n );\n}\n\nfunction validateServerActionManifest(\n allowedActions: readonly AppRouterAllowedServerAction[] | \"any\" | undefined,\n): Response | undefined {\n if (allowedActions !== undefined || !isProductionEnvironment()) {\n return undefined;\n }\n\n return jsonResponse({ ok: false, error: \"Server action manifest required.\" }, 403);\n}\n\nfunction lowerFormActions(options: {\n actionNonce: string;\n code: string;\n csrfToken: string;\n placeholders?: boolean | undefined;\n references: Map<string, ActionReference>;\n}): string {\n let code = options.code;\n const formReferences = collectFormActionExpressionReferences({ code: options.code });\n\n for (const formReference of [...formReferences].reverse()) {\n const reference = options.references.get(formActionOccurrenceKey(formReference));\n\n if (reference === undefined) {\n continue;\n }\n\n const opening = code.slice(formReference.start, formReference.end);\n const loweredOpening = lowerFormActionOpening({\n actionNonce: options.actionNonce,\n csrfToken: options.csrfToken,\n opening,\n placeholders: options.placeholders === true,\n reference,\n referenceName: formReference.expression,\n });\n\n if (loweredOpening === opening) {\n continue;\n }\n\n code = `${code.slice(0, formReference.start)}${loweredOpening}${code.slice(formReference.end)}`;\n }\n\n return code;\n}\n\nfunction formActionHtmlReplacements(options: {\n actionNonce: string;\n csrfToken: string;\n references: ReadonlyMap<string, ActionReference>;\n}): readonly (readonly [string, string])[] {\n const replacements: Array<readonly [string, string]> = [\n [csrfTokenPlaceholder, options.csrfToken],\n [actionNoncePlaceholder, options.actionNonce],\n ];\n const seenTokens = new Set<string>();\n\n for (const reference of options.references.values()) {\n const placeholder = actionTokenPlaceholder(reference);\n\n if (seenTokens.has(placeholder)) {\n continue;\n }\n\n seenTokens.add(placeholder);\n replacements.push([\n placeholder,\n formActionToken({\n csrfToken: options.csrfToken,\n exportName: reference.exportName,\n moduleId: reference.moduleId,\n nonce: options.actionNonce,\n }),\n ]);\n }\n\n return replacements;\n}\n\nfunction formActionOccurrenceKey(reference: {\n end: number;\n expression: string;\n expressionEnd: number;\n expressionStart: number;\n start: number;\n}): string {\n return [\n reference.start,\n reference.end,\n reference.expressionStart,\n reference.expressionEnd,\n reference.expression,\n ].join(\":\");\n}\n\nfunction formActionSourceHash(code: string): string {\n return createHash(\"sha256\").update(code).digest(\"base64url\");\n}\n\nfunction lowerFormActionOpening(options: {\n actionNonce: string;\n csrfToken: string;\n opening: string;\n placeholders: boolean;\n reference: ActionReference;\n referenceName: string;\n}): string {\n const actionPattern = new RegExp(\n `^(?<prefix><form\\\\b[\\\\s\\\\S]*?)\\\\saction=\\\\{${escapeRegExp(options.referenceName)}\\\\}(?<suffix>[\\\\s\\\\S]*?)>$`,\n \"u\",\n );\n const match = options.opening.match(actionPattern);\n const prefix = match?.groups?.prefix;\n const suffix = match?.groups?.suffix;\n\n if (prefix === undefined || suffix === undefined) {\n return options.opening;\n }\n\n const attrs = `${prefix.slice(\"<form\".length)}${suffix}`.replace(\n /\\s+method=(?:\"[^\"]*\"|'[^']*'|\\{[^}]*\\})/g,\n \"\",\n );\n const hidden = [\n hiddenInput(formFieldModuleId, options.reference.moduleId),\n hiddenInput(formFieldExportName, options.reference.exportName),\n hiddenInput(\n formCsrfFieldName,\n options.placeholders ? csrfTokenPlaceholder : options.csrfToken,\n ),\n hiddenInput(\n formFieldNonce,\n options.placeholders ? actionNoncePlaceholder : options.actionNonce,\n ),\n hiddenInput(\n formFieldActionToken,\n options.placeholders\n ? actionTokenPlaceholder(options.reference)\n : formActionToken({\n csrfToken: options.csrfToken,\n exportName: options.reference.exportName,\n moduleId: options.reference.moduleId,\n nonce: options.actionNonce,\n }),\n ),\n ].join(\"\");\n\n return `<form${attrs} method=\"post\" action=\"/_mreact/actions\">${hidden}`;\n}\n\nfunction actionTokenPlaceholder(reference: ActionReference): string {\n return `__mreact_action_token_${createHash(\"sha256\")\n .update(reference.moduleId)\n .update(\"\\0\")\n .update(reference.exportName)\n .digest(\"hex\")\n .slice(0, 16)}__`;\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction hiddenInput(name: string, value: string): string {\n return `<input type=\"hidden\" name=\"${escapeAttribute(name)}\" value=\"${escapeAttribute(value)}\" />`;\n}\n\nasync function collectImportedServerActions(options: {\n appDir: string;\n code: string;\n pageFile: string;\n}): Promise<{\n diagnostics: ServerActionInferenceDiagnostic[];\n references: Map<string, ActionReference>;\n}> {\n return await collectRuntimeInferredServerActions({\n appDir: options.appDir,\n code: options.code,\n fileSystem: {\n isUseServerFile,\n resolveSourceFile,\n },\n pageFile: options.pageFile,\n });\n}\n\nfunction isInferredServerActionReference(options: {\n allowedActions: readonly AppRouterAllowedServerAction[] | \"any\" | undefined;\n appDir: string;\n exportName: string;\n moduleId: string;\n}): boolean {\n if (\n Array.isArray(options.allowedActions) &&\n options.allowedActions.some(\n (allowed) =>\n allowed.inferred === true &&\n allowed.moduleId === options.moduleId &&\n allowed.exportName === options.exportName,\n )\n ) {\n return true;\n }\n\n return inferredServerActionReferencesForApp(options.appDir).has(\n `${options.moduleId}#${options.exportName}`,\n );\n}\n\nfunction formActionToken(options: {\n csrfToken: string;\n exportName: string;\n moduleId: string;\n nonce: string;\n}): string {\n return createHmac(\"sha256\", actionTokenSecret)\n .update(options.moduleId)\n .update(\"\\0\")\n .update(options.exportName)\n .update(\"\\0\")\n .update(options.csrfToken)\n .update(\"\\0\")\n .update(options.nonce)\n .digest(\"base64url\");\n}\n\nfunction isValidFormActionToken(options: {\n csrfToken: string | undefined;\n exportName: string;\n moduleId: string;\n nonce: string;\n token: string | undefined;\n}): boolean {\n if (options.csrfToken === undefined || options.token === undefined) {\n return false;\n }\n\n const expected = Buffer.from(\n formActionToken({\n csrfToken: options.csrfToken,\n exportName: options.exportName,\n moduleId: options.moduleId,\n nonce: options.nonce,\n }),\n );\n const actual = Buffer.from(options.token);\n\n return actual.length === expected.length && timingSafeEqual(actual, expected);\n}\n\nfunction replaceInferredServerActionReferences(\n appDir: string,\n pageFile: string,\n references: ReadonlyMap<string, ActionReference>,\n): void {\n const nextReferences = new Map(\n Array.from(references.values())\n .filter((reference) => reference.inferred)\n .map((reference) => [`${reference.moduleId}#${reference.exportName}`, reference]),\n );\n let appReferencesByPage = inferredServerActionReferences.get(appDir);\n const previousReferences = appReferencesByPage?.get(pageFile) ?? new Map();\n const changed = !sameActionReferenceKeys(previousReferences, nextReferences);\n\n if (!changed) {\n return;\n }\n\n if (nextReferences.size === 0) {\n appReferencesByPage?.delete(pageFile);\n if (appReferencesByPage?.size === 0) {\n inferredServerActionReferences.delete(appDir);\n }\n } else {\n if (appReferencesByPage === undefined) {\n appReferencesByPage = new Map();\n inferredServerActionReferences.set(appDir, appReferencesByPage);\n }\n appReferencesByPage.set(pageFile, nextReferences);\n }\n\n clearServerActionRegistryCacheForApp(appDir);\n}\n\n// Cache the (expensive) collect+bundle+evaluate work keyed by appDir +\n// caller-supplied version. Production callers pass the build-time hash\n// (serverModuleCacheVersion) so the registry is reused for the lifetime\n// of one deployment. Dev callers omit the version; the entry is then\n// keyed on \"dev\" so the work happens once per process — restarts handle\n// invalidation. Concurrent callers share a single in-flight promise.\nconst serverActionRegistryCache = new Map<string, Promise<ServerActionRegistry>>();\n\nasync function loadServerActionRegistry(options: {\n appDir: string;\n cacheVersion?: string | undefined;\n importPolicy?: AppRouterImportPolicy | undefined;\n}): Promise<ServerActionRegistry> {\n const cacheKey = `${options.appDir}::${options.cacheVersion ?? \"dev\"}`;\n const cached = serverActionRegistryCache.get(cacheKey);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const pending = buildServerActionRegistry(options).catch((error) => {\n // Drop the failed promise so a retry can re-run the load.\n serverActionRegistryCache.delete(cacheKey);\n throw error;\n });\n serverActionRegistryCache.set(cacheKey, pending);\n return pending;\n}\n\nasync function buildServerActionRegistry(options: {\n appDir: string;\n importPolicy?: AppRouterImportPolicy | undefined;\n}): Promise<ServerActionRegistry> {\n const files = await collectFiles(options.appDir);\n const registry: ServerActionRegistry = {};\n const inferredReferences = inferredServerActionReferencesForApp(options.appDir);\n\n for (const file of files) {\n const moduleId = moduleIdForFile(options.appDir, file);\n const inferredExportNames = inferredExportNamesForModule(inferredReferences, moduleId);\n const useServerFile = await isUseServerFile(file);\n\n if (!useServerFile && inferredExportNames.size === 0) {\n continue;\n }\n\n const module = await importServerActionModule({\n appDir: options.appDir,\n file,\n importPolicy: options.importPolicy,\n });\n\n for (const [exportName, value] of Object.entries(module)) {\n if (typeof value === \"function\" && (useServerFile || inferredExportNames.has(exportName))) {\n registry[`${moduleId}#${exportName}`] = value as (...args: unknown[]) => unknown;\n }\n }\n }\n\n return registry;\n}\n\n// Exposed for tests that need a clean slate between cases (in-process state).\nexport function __clearServerActionRegistryCache(): void {\n serverActionRegistryCache.clear();\n inferredServerActionReferences.clear();\n}\n\nfunction clearServerActionRegistryCacheForApp(appDir: string): void {\n const prefix = `${appDir}::`;\n\n for (const key of serverActionRegistryCache.keys()) {\n if (key.startsWith(prefix)) {\n serverActionRegistryCache.delete(key);\n }\n }\n}\n\nfunction sameActionReferenceKeys(\n left: ReadonlyMap<string, ActionReference>,\n right: ReadonlyMap<string, ActionReference>,\n): boolean {\n if (left.size !== right.size) {\n return false;\n }\n\n for (const key of left.keys()) {\n if (!right.has(key)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction inferredServerActionReferencesForApp(appDir: string): Map<string, ActionReference> {\n const references = new Map<string, ActionReference>();\n const appReferencesByPage = inferredServerActionReferences.get(appDir);\n\n if (appReferencesByPage === undefined) {\n return references;\n }\n\n for (const pageReferences of appReferencesByPage.values()) {\n for (const [key, reference] of pageReferences) {\n references.set(key, reference);\n }\n }\n\n return references;\n}\n\nfunction inferredExportNamesForModule(\n references: ReadonlyMap<string, ActionReference>,\n moduleId: string,\n): Set<string> {\n const names = new Set<string>();\n\n for (const reference of references.values()) {\n if (reference.moduleId === moduleId) {\n names.add(reference.exportName);\n }\n }\n\n return names;\n}\n\nasync function importServerActionModule(options: {\n appDir: string;\n file: string;\n importPolicy?: AppRouterImportPolicy | undefined;\n}): Promise<Record<string, unknown>> {\n const bundled = await bundleRouterModule({\n code: `export * from ${JSON.stringify(options.file)};`,\n filename: options.file,\n platform: \"node\",\n plugins: [\n fileImportMetaUrlPlugin(),\n serverActionRuntimePlugin(),\n createAppRouterImportPolicyPlugin({\n appDir: options.appDir,\n importPolicy: options.importPolicy,\n label: \"Server action\",\n }),\n ],\n });\n const code = bundled.code;\n\n if (code === undefined) {\n throw new Error(`Failed to compile server action module ${options.file}.`);\n }\n\n return importAppRouterSourceModule<Record<string, unknown>>({\n code,\n label: `server-action:${options.file}`,\n });\n}\n\nfunction serverActionRuntimePlugin() {\n const currentDir = dirname(fileURLToPath(import.meta.url));\n const cachePath = join(currentDir, currentDir.endsWith(`${sep}dist`) ? \"cache.js\" : \"cache.ts\");\n\n return {\n name: \"mreact-router-server-action-runtime\",\n setup(buildApi: RouterCompatBuildApi) {\n buildApi.onResolve({ filter: /^@reckona\\/mreact-router$/ }, () => ({\n namespace: \"mreact-router-server-api\",\n path: \"index\",\n }));\n buildApi.onLoad({ filter: /^index$/, namespace: \"mreact-router-server-api\" }, () => ({\n contents: `export { revalidatePath } from ${JSON.stringify(cachePath)};`,\n loader: \"ts\",\n resolveDir: dirname(cachePath),\n }));\n },\n };\n}\n\nasync function collectFiles(directory: string): Promise<string[]> {\n const entries = await readdir(directory, { withFileTypes: true });\n const files: string[] = [];\n\n for (const entry of entries) {\n const path = join(directory, entry.name);\n\n if (entry.isDirectory()) {\n if (shouldSkipServerActionScanDirectory(entry.name)) {\n continue;\n }\n\n files.push(...(await collectFiles(path)));\n continue;\n }\n\n if (entry.isFile() && /\\.(?:mreact\\.tsx|tsx|ts)$/.test(entry.name)) {\n files.push(path);\n }\n }\n\n return files;\n}\n\nfunction shouldSkipServerActionScanDirectory(name: string): boolean {\n return name === \"node_modules\" || name === \"__tests__\" || name.startsWith(\".\");\n}\n\nasync function resolveSourceFile(directory: string, source: string): Promise<string | undefined> {\n const base = join(directory, source);\n const tsEsmBase = /\\.[cm]?js$/.test(base) ? base.replace(/\\.[cm]?js$/, \"\") : undefined;\n const candidates = [\n base,\n ...(tsEsmBase === undefined\n ? []\n : [\n `${tsEsmBase}.ts`,\n `${tsEsmBase}.tsx`,\n `${tsEsmBase}.mreact.tsx`,\n join(tsEsmBase, \"index.ts\"),\n join(tsEsmBase, \"index.tsx\"),\n ]),\n `${base}.ts`,\n `${base}.tsx`,\n `${base}.mreact.tsx`,\n join(base, \"index.ts\"),\n join(base, \"index.tsx\"),\n ];\n\n for (const candidate of candidates) {\n try {\n await access(candidate);\n return candidate;\n } catch {\n // Try the next candidate.\n }\n }\n\n return undefined;\n}\n\nasync function isUseServerFile(file: string): Promise<boolean> {\n const code = await readFile(file, \"utf8\");\n\n return hasModuleDirective({ code, directive: \"use server\", filename: file });\n}\n\nfunction moduleIdForFile(appDir: string, file: string): string {\n return relative(appDir, file).split(sep).join(\"/\");\n}\n\nfunction validateServerActionRequestOrigin(request: Request): Response | undefined {\n if (!isProductionEnvironment()) {\n return undefined;\n }\n\n const expectedOrigin = new URL(request.url).origin;\n const origin = request.headers.get(\"origin\");\n\n if (origin !== null) {\n return origin === expectedOrigin\n ? undefined\n : jsonResponse({ ok: false, error: \"Origin not allowed.\" }, 403);\n }\n\n const referer = request.headers.get(\"referer\");\n\n if (referer === null) {\n return jsonResponse({ ok: false, error: \"Origin not allowed.\" }, 403);\n }\n\n try {\n return new URL(referer).origin === expectedOrigin\n ? undefined\n : jsonResponse({ ok: false, error: \"Origin not allowed.\" }, 403);\n } catch {\n return jsonResponse({ ok: false, error: \"Origin not allowed.\" }, 403);\n }\n}\n\nfunction validateFormNonce(\n formData: FormData,\n replayStore: ServerActionReplayStore,\n): Response | undefined {\n const nonce = stringFormValue(formData.get(formFieldNonce));\n\n if (nonce === undefined || nonce.length === 0) {\n return jsonResponse({ ok: false, error: \"Missing server action nonce.\" }, 400);\n }\n\n if (replayStore.has(nonce)) {\n return jsonResponse({ ok: false, error: \"Server action nonce was already used.\" }, 409);\n }\n\n replayStore.add(nonce);\n return undefined;\n}\n\nfunction cleanActionFormData(formData: FormData): FormData {\n const cleaned = new FormData();\n\n for (const [name, value] of formData.entries()) {\n if (\n name !== formFieldModuleId &&\n name !== formFieldExportName &&\n name !== formCsrfFieldName &&\n name !== formFieldNonce &&\n name !== formFieldActionToken\n ) {\n cleaned.append(name, value);\n }\n }\n\n return cleaned;\n}\n\nfunction stringFormValue(value: FormDataEntryValue | null): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction jsonResponse(payload: unknown, status: number): Response {\n return new Response(JSON.stringify(payload), {\n headers: { \"content-type\": \"application/json; charset=utf-8\" },\n status,\n });\n}\n\nfunction escapeAttribute(value: string): string {\n return value\n .replaceAll(\"&\", \"&\")\n .replaceAll('\"', \""\")\n .replaceAll(\"<\", \"<\")\n .replaceAll(\">\", \">\");\n}\n"]}
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash, createHmac, randomBytes, randomUUID, timingSafeEqual } from \"node:crypto\";\nimport { access, readdir, readFile } from \"node:fs/promises\";\nimport { dirname, join, relative, sep } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport {\n collectFormActionExpressionReferences,\n hasModuleDirective,\n} from \"@reckona/mreact-compiler\";\nimport {\n createServerActionHandler,\n type ServerActionHandlerOptions,\n type ServerActionRegistry,\n type ServerActionReplayStore,\n type ServerActionRequestReference,\n type ServerActionValidationResult,\n} from \"@reckona/mreact-server\";\nimport { bundleRouterModule, type RouterCompatBuildApi } from \"./bundle-pipeline.js\";\nimport { type AppRouterCache, withRouteCacheContext } from \"./cache.js\";\nimport { fileImportMetaUrlPlugin, importAppRouterSourceModule } from \"./module-runner.js\";\nimport { createAppRouterImportPolicyPlugin, type AppRouterImportPolicy } from \"./import-policy.js\";\nimport { cookies, type RequestCookies } from \"./navigation.js\";\nexport {\n createFormCsrfToken,\n formCsrfCookie,\n formCsrfFieldName,\n serverActionCookie,\n validateFormCsrf,\n} from \"./csrf.js\";\nimport {\n formCsrfFieldName,\n readExistingFormCsrfToken,\n serverActionCookieName,\n validateFormCsrf,\n} from \"./csrf.js\";\nimport {\n collectRuntimeInferredServerActions,\n type ServerActionInferenceDiagnostic,\n} from \"./server-action-inference.js\";\n\nfunction isProductionEnvironment(): boolean {\n return process.env.NODE_ENV === \"production\";\n}\n\nfunction isLocalServerActionEnvironment(): boolean {\n return process.env.NODE_ENV === \"development\" || process.env.NODE_ENV === \"test\";\n}\nconst formFieldModuleId = \"__mreact_module_id\";\nconst formFieldExportName = \"__mreact_export_name\";\nconst formFieldNonce = \"__mreact_action_nonce\";\nconst formFieldActionToken = \"__mreact_action_token\";\nconst csrfTokenPlaceholder = \"__mreact_action_csrf_placeholder__\";\nconst actionNoncePlaceholder = \"__mreact_action_nonce_placeholder__\";\nconst MIN_ACTION_TOKEN_SECRET_BYTES = 32;\nconst actionTokenSecret = configuredActionTokenSecret(process.env.MREACT_SERVER_ACTION_SECRET);\n// Bounded default replay store for form-action nonces. The previous\n// implementation was an unbounded Set that grew with every successful\n// submission (Issue 069). Production callers should still pass a shared\n// store (Redis / KV) via `serverActions.replayStore` for multi-instance\n// deployments -- this default only guarantees replay protection within\n// a single process and is the safe fallback for dev / single-node setups.\n//\n// Retention model:\n// - TTL: 10 minutes. Form nonces are minted at SSR time and the user\n// has to submit before the cookie's SameSite=Lax window anyway; this\n// is generous for any realistic submit cadence.\n// - Max size: 50_000 entries. Old entries are evicted FIFO once the cap\n// is reached so a flood cannot trigger OOM.\n//\n// Both bounds are intentional defaults -- tight enough that a single\n// process cannot leak unbounded RSS, loose enough that legitimate\n// traffic does not trip false-positive 409s.\nconst DEFAULT_REPLAY_TTL_MS = 10 * 60 * 1000;\nconst DEFAULT_REPLAY_MAX_ENTRIES = 50_000;\nconst DEFAULT_ACTION_BODY_MAX_BYTES = 10 * 1024 * 1024;\nconst DEFAULT_ACTION_FORM_MAX_FIELDS = 1_000;\nlet warnedUnrestrictedServerActions = false;\n\n/**\n * Request context passed to authorized server actions.\n *\n * It exposes normalized cookies, headers, and the original `Request`. `clientIp` is reserved for trusted adapter integrations and is omitted by the default header-only dispatcher because forwarded IP headers are attacker-controlled without a trusted proxy boundary.\n */\nexport interface ServerActionContext {\n clientIp?: string | undefined;\n cookies: RequestCookies;\n headers: Headers;\n request: Request;\n}\n\nfunction defaultActionTokenSecret(): string {\n if (isProductionEnvironment()) {\n console.warn(\n \"mreact-router: MREACT_SERVER_ACTION_SECRET is not set. Inferred server action tokens use a per-process secret and may fail across multiple production instances.\",\n );\n }\n\n return randomBytes(32).toString(\"base64url\");\n}\n\nfunction configuredActionTokenSecret(value: string | undefined): string {\n if (value === undefined) {\n return defaultActionTokenSecret();\n }\n\n if (Buffer.byteLength(value, \"utf8\") < MIN_ACTION_TOKEN_SECRET_BYTES) {\n throw new Error(\n `MREACT_SERVER_ACTION_SECRET must be at least ${MIN_ACTION_TOKEN_SECRET_BYTES} bytes.`,\n );\n }\n\n return value;\n}\n\nclass BoundedReplayStore {\n private readonly entries = new Map<string, number>();\n\n constructor(\n private readonly ttlMs: number,\n private readonly maxEntries: number,\n ) {}\n\n has(value: string): boolean {\n const expiresAt = this.entries.get(value);\n if (expiresAt === undefined) return false;\n if (expiresAt < Date.now()) {\n this.entries.delete(value);\n return false;\n }\n return true;\n }\n\n add(value: string): void {\n const now = Date.now();\n if (this.entries.size >= this.maxEntries) {\n const oldest = this.entries.entries().next().value;\n if (oldest !== undefined) {\n const [key, expiresAt] = oldest;\n this.entries.delete(key);\n if (expiresAt < now) {\n while (this.entries.size >= this.maxEntries) {\n const nextOldest = this.entries.entries().next().value;\n if (nextOldest === undefined || nextOldest[1] >= now) {\n break;\n }\n this.entries.delete(nextOldest[0]);\n }\n }\n }\n }\n this.entries.set(value, now + this.ttlMs);\n }\n\n // Exposed for tests; not part of the ServerActionReplayStore interface.\n size(): number {\n return this.entries.size;\n }\n}\n\nconst usedFormActionNonces = new BoundedReplayStore(\n DEFAULT_REPLAY_TTL_MS,\n DEFAULT_REPLAY_MAX_ENTRIES,\n);\n\n// Test helpers: drop all entries between cases / expose the bounded store\n// so tests can drive its eviction semantics directly. Not part of the\n// public surface (prefixed with `__`).\nexport function __clearDefaultReplayStore(): void {\n (usedFormActionNonces as unknown as { entries: Map<string, number> }).entries.clear();\n}\n\nexport function __readDefaultReplayStore(): BoundedReplayStore {\n return usedFormActionNonces;\n}\n\n/**\n * Configures app-router server action dispatch, authorization, body limits, and replay protection.\n *\n * Production multi-instance deployments should provide a shared `replayStore` and a stable `MREACT_SERVER_ACTION_SECRET`.\n */\nexport interface AppRouterServerActionOptions {\n allowedActions?: readonly AppRouterAllowedServerAction[] | \"any\" | undefined;\n authorize?: ServerActionHandlerOptions[\"authorize\"] | undefined;\n maxBodyBytes?: number | undefined;\n maxFormFields?: number | undefined;\n replayStore?: ServerActionReplayStore | undefined;\n}\n\n/**\n * Describes a server action request reference that the app router may dispatch.\n */\nexport interface AppRouterAllowedServerAction extends ServerActionRequestReference {\n inferred?: boolean | undefined;\n}\n\nexport interface PreparedRouteActions {\n actionNonce?: string;\n code: string;\n csrfToken?: string;\n diagnostics?: ServerActionInferenceDiagnostic[] | undefined;\n htmlReplacements?: readonly (readonly [string, string])[] | undefined;\n // True when the cookie should be (re)set on the response. False means\n // the incoming request already carried a valid CSRF cookie that the\n // render is reusing -- skipping Set-Cookie avoids cookie thrash across\n // concurrent tabs (Issue 070).\n csrfTokenIsNew?: boolean;\n hasFormActions: boolean;\n}\n\ninterface ActionReference {\n exportName: string;\n expression?: string | undefined;\n inferred: boolean;\n moduleId: string;\n}\n\n/**\n * Identifies an inferred form action expression rewritten during route preparation.\n */\nexport interface PreparedFormActionReference {\n end: number;\n expression: string;\n expressionEnd: number;\n expressionStart: number;\n exportName: string;\n inferred: boolean;\n moduleId: string;\n sourceHash: string;\n start: number;\n}\n\nconst inferredServerActionReferences = new Map<string, Map<string, Map<string, ActionReference>>>();\n\nexport async function prepareRouteServerActions(options: {\n appDir: string;\n code: string;\n formActionReferences?: readonly PreparedFormActionReference[] | undefined;\n placeholders?: boolean | undefined;\n pageFile: string;\n request?: Request | undefined;\n}): Promise<PreparedRouteActions> {\n if (options.formActionReferences !== undefined && options.formActionReferences.length === 0) {\n replaceInferredServerActionReferences(options.appDir, options.pageFile, new Map());\n return { code: options.code, hasFormActions: false };\n }\n\n if (!hasFormActionCandidate(options.code, options.pageFile)) {\n replaceInferredServerActionReferences(options.appDir, options.pageFile, new Map());\n return { code: options.code, hasFormActions: false };\n }\n\n const inference =\n options.formActionReferences === undefined\n ? await collectImportedServerActions(options)\n : {\n diagnostics: [],\n references: formActionReferenceMap(options.code, options.formActionReferences),\n };\n const { diagnostics, references } = inference;\n\n if (references.size === 0) {\n replaceInferredServerActionReferences(options.appDir, options.pageFile, new Map());\n return diagnostics.length === 0\n ? { code: options.code, hasFormActions: false }\n : { code: options.code, diagnostics, hasFormActions: false };\n }\n\n // Reuse the existing CSRF token when the browser already sent one.\n // Rotating the cookie on every render (Issue 070) broke concurrent\n // forms because the older tab's hidden input no longer matched the\n // cookie value. The actionNonce stays per-render -- that is the field\n // tied to a specific submission via replay protection.\n const existingToken = readExistingFormCsrfToken(options.request);\n const csrfToken = existingToken ?? randomUUID();\n const csrfTokenIsNew = existingToken === undefined;\n const actionNonce = randomUUID();\n const usePlaceholders =\n options.placeholders === true && canUseStableFormActionPlaceholders(references);\n const lowered = lowerFormActions({\n actionNonce,\n code: options.code,\n csrfToken,\n placeholders: usePlaceholders,\n references,\n });\n\n if (lowered === options.code) {\n replaceInferredServerActionReferences(options.appDir, options.pageFile, new Map());\n return diagnostics.length === 0\n ? { code: options.code, hasFormActions: false }\n : { code: options.code, diagnostics, hasFormActions: false };\n }\n\n replaceInferredServerActionReferences(options.appDir, options.pageFile, references);\n\n return {\n actionNonce,\n code: lowered,\n csrfToken,\n csrfTokenIsNew,\n diagnostics,\n hasFormActions: true,\n ...(usePlaceholders\n ? { htmlReplacements: formActionHtmlReplacements({ actionNonce, csrfToken, references }) }\n : {}),\n };\n}\n\nexport function prepareRouteServerActionPlaceholders(options: {\n code: string;\n formActionReferences: readonly PreparedFormActionReference[];\n}): string {\n const references = formActionReferenceMap(options.code, options.formActionReferences);\n\n if (references.size === 0) {\n return options.code;\n }\n\n if (!canUseStableFormActionPlaceholders(references)) {\n return options.code;\n }\n\n return lowerFormActions({\n actionNonce: actionNoncePlaceholder,\n code: options.code,\n csrfToken: csrfTokenPlaceholder,\n placeholders: true,\n references,\n });\n}\n\nfunction canUseStableFormActionPlaceholders(\n references: ReadonlyMap<string, ActionReference>,\n): boolean {\n return [...references.values()].every(\n (reference) =>\n reference.expression === reference.exportName &&\n /^[A-Za-z_$][\\w$]*$/u.test(reference.expression),\n );\n}\n\nfunction formActionReferenceMap(\n code: string,\n references: readonly PreparedFormActionReference[],\n): Map<string, ActionReference> {\n const sourceHash = formActionSourceHash(code);\n\n return new Map(\n references\n .filter((reference) => reference.sourceHash === sourceHash)\n .map((reference) => [\n formActionOccurrenceKey(reference),\n {\n exportName: reference.exportName,\n expression: reference.expression,\n inferred: reference.inferred,\n moduleId: reference.moduleId,\n },\n ]),\n );\n}\n\nfunction hasFormActionCandidate(code: string, filename: string): boolean {\n return collectFormActionExpressionReferences({ code, filename }).length > 0;\n}\n\nexport async function dispatchServerActionRequest(options: {\n appDir: string;\n importPolicy?: AppRouterImportPolicy | undefined;\n request: Request;\n renderSingleFlightNavigation?: ((options: {\n path: string;\n request: Request;\n revalidatedPaths: readonly string[];\n }) => Promise<Response | undefined>) | undefined;\n routeCache?: AppRouterCache | undefined;\n serverActionCacheVersion?: string | undefined;\n serverActions?: AppRouterServerActionOptions | undefined;\n}): Promise<Response> {\n const { revalidatedPaths, value } = await withRouteCacheContext(options.routeCache, () =>\n dispatchServerActionRequestWithoutCacheContext(options),\n );\n const singleFlight = await renderSingleFlightActionResponse({\n render: options.renderSingleFlightNavigation,\n request: options.request,\n response: value,\n revalidatedPaths,\n });\n\n return withRevalidationHeader(singleFlight ?? value, revalidatedPaths);\n}\n\nasync function dispatchServerActionRequestWithoutCacheContext(options: {\n appDir: string;\n importPolicy?: AppRouterImportPolicy | undefined;\n request: Request;\n serverActionCacheVersion?: string | undefined;\n serverActions?: AppRouterServerActionOptions | undefined;\n}): Promise<Response> {\n // Validate everything we can statically before touching the filesystem\n // / bundler. A flood of malformed POSTs must not pay the registry-load\n // cost (Issue 067).\n if (options.request.method !== \"POST\") {\n return jsonResponse({ ok: false, error: \"Method not allowed.\" }, 405);\n }\n\n const bodySizeResponse = validateServerActionBodySize(\n options.request,\n options.serverActions?.maxBodyBytes ?? DEFAULT_ACTION_BODY_MAX_BYTES,\n );\n if (bodySizeResponse !== undefined) {\n return bodySizeResponse;\n }\n\n const originResponse = validateServerActionRequestOrigin(options.request);\n if (originResponse !== undefined) {\n return originResponse;\n }\n\n const contentType = options.request.headers.get(\"content-type\") ?? \"\";\n\n if (contentType.includes(\"application/json\")) {\n const manifestResponse = validateServerActionManifest(options.serverActions?.allowedActions);\n if (manifestResponse !== undefined) {\n return manifestResponse;\n }\n\n // JSON path delegates CSRF/replay to createServerActionHandler. The\n // registry is still needed here, but the handler short-circuits on\n // CSRF mismatch before invoking the action.\n let registry: ServerActionRegistry;\n try {\n registry = await loadServerActionRegistry({\n appDir: options.appDir,\n cacheVersion: options.serverActionCacheVersion,\n importPolicy: options.importPolicy,\n });\n } catch (error) {\n return jsonResponse(\n { ok: false, error: error instanceof Error ? error.message : String(error) },\n 500,\n );\n }\n\n const replayStore = options.serverActions?.replayStore ?? usedFormActionNonces;\n const handle = createServerActionHandler(jsonServerActionRegistry({\n allowedActions: options.serverActions?.allowedActions,\n appDir: options.appDir,\n registry,\n }), {\n ...(options.serverActions?.authorize === undefined\n ? {}\n : { authorize: options.serverActions.authorize }),\n ...(options.serverActions?.allowedActions === undefined ||\n options.serverActions.allowedActions === \"any\"\n ? {}\n : { allowedActions: jsonAllowedServerActions(options.serverActions.allowedActions) }),\n csrf: { cookieName: serverActionCookieName() },\n maxBodyBytes: options.serverActions?.maxBodyBytes ?? DEFAULT_ACTION_BODY_MAX_BYTES,\n replayProtection: { seen: replayStore },\n });\n\n return handle(options.request);\n }\n\n if (\n !contentType.includes(\"application/x-www-form-urlencoded\") &&\n !contentType.includes(\"multipart/form-data\")\n ) {\n return jsonResponse({ ok: false, error: \"Unsupported server action content type.\" }, 415);\n }\n\n const manifestResponse = validateServerActionManifest(options.serverActions?.allowedActions);\n if (manifestResponse !== undefined) {\n return manifestResponse;\n }\n\n const boundedRequest = await readServerActionRequestWithLimit(\n options.request,\n options.serverActions?.maxBodyBytes ?? DEFAULT_ACTION_BODY_MAX_BYTES,\n );\n if (boundedRequest instanceof Response) {\n return boundedRequest;\n }\n\n const formData = await boundedRequest.formData();\n const fieldCountResponse = validateServerActionFormFieldCount(\n formData,\n options.serverActions?.maxFormFields ?? DEFAULT_ACTION_FORM_MAX_FIELDS,\n );\n\n if (fieldCountResponse !== undefined) {\n return fieldCountResponse;\n }\n\n const csrfResponse = validateFormCsrf(options.request, formData);\n\n if (csrfResponse !== undefined) {\n return csrfResponse;\n }\n\n const moduleId = stringFormValue(formData.get(formFieldModuleId));\n const exportName = stringFormValue(formData.get(formFieldExportName));\n const nonce = stringFormValue(formData.get(formFieldNonce));\n\n if (moduleId === undefined || exportName === undefined || nonce === undefined) {\n return jsonResponse({ ok: false, error: \"Invalid server action reference.\" }, 400);\n }\n\n if (!isAllowedServerAction({ moduleId, exportName }, options.serverActions?.allowedActions)) {\n return jsonResponse({ ok: false, error: \"Unknown server action.\" }, 404);\n }\n\n if (\n isInferredServerActionReference({\n allowedActions: options.serverActions?.allowedActions,\n appDir: options.appDir,\n exportName,\n moduleId,\n }) &&\n !isValidFormActionToken({\n csrfToken: stringFormValue(formData.get(formCsrfFieldName)),\n exportName,\n moduleId,\n nonce,\n token: stringFormValue(formData.get(formFieldActionToken)),\n })\n ) {\n return jsonResponse({ ok: false, error: \"Unknown server action.\" }, 404);\n }\n\n const nonceResponse = validateFormNonce(\n formData,\n options.serverActions?.replayStore ?? usedFormActionNonces,\n );\n\n if (nonceResponse !== undefined) {\n return nonceResponse;\n }\n\n let registry: ServerActionRegistry;\n try {\n registry = await loadServerActionRegistry({\n appDir: options.appDir,\n cacheVersion: options.serverActionCacheVersion,\n importPolicy: options.importPolicy,\n });\n } catch (error) {\n return jsonResponse(\n { ok: false, error: error instanceof Error ? error.message : String(error) },\n 500,\n );\n }\n\n const action = registry[`${moduleId}#${exportName}`];\n\n if (typeof action !== \"function\") {\n return jsonResponse({ ok: false, error: \"Unknown server action.\" }, 404);\n }\n\n const actionFormData = cleanActionFormData(formData);\n const authorizationResponse = await authorizeFormAction({\n args: [actionFormData],\n authorize: options.serverActions?.authorize,\n exportName,\n moduleId,\n request: options.request,\n });\n\n if (authorizationResponse !== undefined) {\n return authorizationResponse;\n }\n\n try {\n const value = await action(actionFormData, createServerActionContext(options.request));\n\n if (value instanceof Response) {\n return value;\n }\n\n if (value === undefined || value === null) {\n return redirectToFormReferer(options.request);\n }\n\n return jsonResponse({ ok: true, value }, 200);\n } catch (error) {\n return jsonResponse(\n { ok: false, error: error instanceof Error ? error.message : String(error) },\n 500,\n );\n }\n}\n\nfunction createServerActionContext(request: Request): ServerActionContext {\n const clientIp = clientIpFromRequest(request);\n\n return {\n ...(clientIp === undefined ? {} : { clientIp }),\n cookies: cookies(request),\n headers: request.headers,\n request,\n };\n}\n\nfunction clientIpFromRequest(request: Request): string | undefined {\n void request;\n return undefined;\n}\n\nfunction validateServerActionBodySize(\n request: Request,\n maxBodyBytes: number,\n): Response | undefined {\n if (!Number.isFinite(maxBodyBytes) || maxBodyBytes < 0) {\n return undefined;\n }\n\n const contentLength = request.headers.get(\"content-length\");\n if (contentLength === null) {\n return undefined;\n }\n\n const bytes = Number(contentLength);\n if (!Number.isFinite(bytes) || bytes < 0) {\n return jsonResponse({ ok: false, error: \"Invalid Content-Length header.\" }, 400);\n }\n\n if (bytes > maxBodyBytes) {\n return jsonResponse({ ok: false, error: \"Server action request body is too large.\" }, 413);\n }\n\n return undefined;\n}\n\nasync function readServerActionRequestWithLimit(\n request: Request,\n maxBodyBytes: number,\n): Promise<Request | Response> {\n if (!Number.isFinite(maxBodyBytes) || maxBodyBytes < 0) {\n return request;\n }\n\n const body = request.body;\n if (body === null) {\n return request;\n }\n\n const reader = body.getReader();\n const chunks: Uint8Array[] = [];\n let total = 0;\n\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n total += value.byteLength;\n if (total > maxBodyBytes) {\n await reader.cancel();\n return jsonResponse({ ok: false, error: \"Server action request body is too large.\" }, 413);\n }\n chunks.push(value);\n }\n } finally {\n reader.releaseLock?.();\n }\n\n const buffer = new Uint8Array(total);\n let offset = 0;\n for (const chunk of chunks) {\n buffer.set(chunk, offset);\n offset += chunk.byteLength;\n }\n\n const headers = new Headers(request.headers);\n headers.delete(\"content-length\");\n return new Request(request.url, {\n body: buffer,\n headers,\n method: request.method,\n });\n}\n\nfunction validateServerActionFormFieldCount(\n formData: FormData,\n maxFormFields: number,\n): Response | undefined {\n if (!Number.isFinite(maxFormFields) || maxFormFields < 0) {\n return undefined;\n }\n\n let count = 0;\n for (const _ of formData.keys()) {\n count += 1;\n if (count > maxFormFields) {\n return jsonResponse({\n ok: false,\n error: \"Server action form field count is too large.\",\n }, 413);\n }\n }\n\n return undefined;\n}\n\nfunction redirectToFormReferer(request: Request): Response {\n return new Response(null, {\n status: 303,\n headers: {\n location: sameOriginRefererPath(request) ?? \"/\",\n },\n });\n}\n\nasync function renderSingleFlightActionResponse(options: {\n render:\n | ((options: {\n path: string;\n request: Request;\n revalidatedPaths: readonly string[];\n }) => Promise<Response | undefined>)\n | undefined;\n request: Request;\n response: Response;\n revalidatedPaths: readonly string[];\n}): Promise<Response | undefined> {\n if (\n options.render === undefined ||\n options.revalidatedPaths.length === 0 ||\n options.request.headers.get(\"x-mreact-action-single-flight\") !== \"1\" ||\n !isFormActionRedirectResponse(options.response)\n ) {\n return undefined;\n }\n\n const path = sameOriginResponseLocationPath(options.request, options.response);\n\n if (path === undefined || !options.revalidatedPaths.includes(normalizeActionPath(path))) {\n return undefined;\n }\n\n const rendered = await options.render({\n path,\n request: options.request,\n revalidatedPaths: options.revalidatedPaths,\n });\n\n if (rendered === undefined) {\n return undefined;\n }\n\n rendered.headers.set(\"x-mreact-action-single-flight\", \"1\");\n return rendered;\n}\n\nfunction isFormActionRedirectResponse(response: Response): boolean {\n return response.status >= 300 && response.status < 400 && response.headers.has(\"location\");\n}\n\nfunction sameOriginResponseLocationPath(request: Request, response: Response): string | undefined {\n const location = response.headers.get(\"location\");\n\n if (location === null) {\n return undefined;\n }\n\n try {\n const requestUrl = new URL(request.url);\n const locationUrl = new URL(location, requestUrl);\n\n return locationUrl.origin === requestUrl.origin\n ? `${locationUrl.pathname}${locationUrl.search}`\n : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction sameOriginRefererPath(request: Request): string | undefined {\n const referer = request.headers.get(\"referer\");\n\n if (referer === null) {\n return undefined;\n }\n\n try {\n const requestUrl = new URL(request.url);\n const refererUrl = new URL(referer, requestUrl);\n\n return refererUrl.origin === requestUrl.origin\n ? `${refererUrl.pathname}${refererUrl.search}`\n : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction normalizeActionPath(path: string): string {\n const pathname = path.startsWith(\"/\") ? path : `/${path}`;\n const withoutTrailing = pathname.length > 1 ? pathname.replace(/\\/+$/, \"\") : pathname;\n\n return withoutTrailing === \"\" ? \"/\" : withoutTrailing;\n}\n\nfunction withRevalidationHeader(response: Response, paths: string[]): Response {\n if (paths.length > 0) {\n response.headers.set(\"x-mreact-revalidate\", paths.join(\",\"));\n }\n\n return response;\n}\n\nasync function authorizeFormAction(options: {\n args: unknown[];\n authorize?: ServerActionHandlerOptions[\"authorize\"];\n exportName: string;\n moduleId: string;\n request: Request;\n}): Promise<Response | undefined> {\n const reference: ServerActionRequestReference = {\n exportName: options.exportName,\n moduleId: options.moduleId,\n };\n const authorizationResult = await options.authorize?.(options.request, reference, options.args);\n\n return authorizationResult !== undefined && authorizationResult !== true\n ? jsonResponse(\n {\n ok: false,\n error: authorizationError(authorizationResult),\n },\n 403,\n )\n : undefined;\n}\n\nfunction authorizationError(result: Exclude<ServerActionValidationResult, true>): string {\n return typeof result === \"string\" ? result : \"Server action not authorized.\";\n}\n\nfunction jsonAllowedServerActions(\n allowedActions: readonly AppRouterAllowedServerAction[],\n): ServerActionRequestReference[] {\n return allowedActions\n .filter((reference) => reference.inferred !== true)\n .map((reference) => ({\n exportName: reference.exportName,\n moduleId: reference.moduleId,\n }));\n}\n\nfunction jsonServerActionRegistry(options: {\n allowedActions: readonly AppRouterAllowedServerAction[] | \"any\" | undefined;\n appDir: string;\n registry: ServerActionRegistry;\n}): ServerActionRegistry {\n const inferredKeys = new Set<string>();\n\n for (const reference of inferredServerActionReferencesForApp(options.appDir).values()) {\n inferredKeys.add(serverActionKey(reference));\n }\n\n if (Array.isArray(options.allowedActions)) {\n for (const reference of options.allowedActions) {\n if (reference.inferred === true) {\n inferredKeys.add(serverActionKey(reference));\n }\n }\n }\n\n if (inferredKeys.size === 0) {\n return options.registry;\n }\n\n const registry: ServerActionRegistry = {};\n\n for (const [key, value] of Object.entries(options.registry)) {\n if (!inferredKeys.has(key)) {\n registry[key] = value;\n }\n }\n\n return registry;\n}\n\nfunction serverActionKey(reference: ServerActionRequestReference): string {\n return `${reference.moduleId}#${reference.exportName}`;\n}\n\nfunction isAllowedServerAction(\n reference: ServerActionRequestReference,\n allowedActions: readonly AppRouterAllowedServerAction[] | \"any\" | undefined,\n): boolean {\n if (allowedActions === undefined) {\n warnIfUnrestrictedServerActions(allowedActions);\n return true;\n }\n\n if (allowedActions === \"any\") {\n return true;\n }\n\n return allowedActions.some(\n (allowed) =>\n allowed.moduleId === reference.moduleId && allowed.exportName === reference.exportName,\n );\n}\n\nfunction warnIfUnrestrictedServerActions(\n allowedActions: readonly AppRouterAllowedServerAction[] | \"any\" | undefined,\n): void {\n if (\n allowedActions !== undefined ||\n isLocalServerActionEnvironment() ||\n warnedUnrestrictedServerActions\n ) {\n return;\n }\n\n warnedUnrestrictedServerActions = true;\n console.warn(\n \"[mreact] Server actions are running without an allowedActions manifest. Built app-router deployments generate this manifest automatically; direct production integrations should pass serverActions.allowedActions.\",\n );\n}\n\nfunction validateServerActionManifest(\n allowedActions: readonly AppRouterAllowedServerAction[] | \"any\" | undefined,\n): Response | undefined {\n if (allowedActions !== undefined || isLocalServerActionEnvironment()) {\n return undefined;\n }\n\n return jsonResponse({ ok: false, error: \"Server action manifest required.\" }, 403);\n}\n\nfunction lowerFormActions(options: {\n actionNonce: string;\n code: string;\n csrfToken: string;\n placeholders?: boolean | undefined;\n references: Map<string, ActionReference>;\n}): string {\n let code = options.code;\n const formReferences = collectFormActionExpressionReferences({ code: options.code });\n\n for (const formReference of [...formReferences].reverse()) {\n const reference = options.references.get(formActionOccurrenceKey(formReference));\n\n if (reference === undefined) {\n continue;\n }\n\n const opening = code.slice(formReference.start, formReference.end);\n const loweredOpening = lowerFormActionOpening({\n actionNonce: options.actionNonce,\n csrfToken: options.csrfToken,\n opening,\n placeholders: options.placeholders === true,\n reference,\n referenceName: formReference.expression,\n });\n\n if (loweredOpening === opening) {\n continue;\n }\n\n code = `${code.slice(0, formReference.start)}${loweredOpening}${code.slice(formReference.end)}`;\n }\n\n return code;\n}\n\nfunction formActionHtmlReplacements(options: {\n actionNonce: string;\n csrfToken: string;\n references: ReadonlyMap<string, ActionReference>;\n}): readonly (readonly [string, string])[] {\n const replacements: Array<readonly [string, string]> = [\n [csrfTokenPlaceholder, options.csrfToken],\n [actionNoncePlaceholder, options.actionNonce],\n ];\n const seenTokens = new Set<string>();\n\n for (const reference of options.references.values()) {\n const placeholder = actionTokenPlaceholder(reference);\n\n if (seenTokens.has(placeholder)) {\n continue;\n }\n\n seenTokens.add(placeholder);\n replacements.push([\n placeholder,\n formActionToken({\n csrfToken: options.csrfToken,\n exportName: reference.exportName,\n moduleId: reference.moduleId,\n nonce: options.actionNonce,\n }),\n ]);\n }\n\n return replacements;\n}\n\nfunction formActionOccurrenceKey(reference: {\n end: number;\n expression: string;\n expressionEnd: number;\n expressionStart: number;\n start: number;\n}): string {\n return [\n reference.start,\n reference.end,\n reference.expressionStart,\n reference.expressionEnd,\n reference.expression,\n ].join(\":\");\n}\n\nfunction formActionSourceHash(code: string): string {\n return createHash(\"sha256\").update(code).digest(\"base64url\");\n}\n\nfunction lowerFormActionOpening(options: {\n actionNonce: string;\n csrfToken: string;\n opening: string;\n placeholders: boolean;\n reference: ActionReference;\n referenceName: string;\n}): string {\n const actionPattern = new RegExp(\n `^(?<prefix><form\\\\b[\\\\s\\\\S]*?)\\\\saction=\\\\{${escapeRegExp(options.referenceName)}\\\\}(?<suffix>[\\\\s\\\\S]*?)>$`,\n \"u\",\n );\n const match = options.opening.match(actionPattern);\n const prefix = match?.groups?.prefix;\n const suffix = match?.groups?.suffix;\n\n if (prefix === undefined || suffix === undefined) {\n return options.opening;\n }\n\n const attrs = `${prefix.slice(\"<form\".length)}${suffix}`.replace(\n /\\s+method=(?:\"[^\"]*\"|'[^']*'|\\{[^}]*\\})/g,\n \"\",\n );\n const hidden = [\n hiddenInput(formFieldModuleId, options.reference.moduleId),\n hiddenInput(formFieldExportName, options.reference.exportName),\n hiddenInput(\n formCsrfFieldName,\n options.placeholders ? csrfTokenPlaceholder : options.csrfToken,\n ),\n hiddenInput(\n formFieldNonce,\n options.placeholders ? actionNoncePlaceholder : options.actionNonce,\n ),\n hiddenInput(\n formFieldActionToken,\n options.placeholders\n ? actionTokenPlaceholder(options.reference)\n : formActionToken({\n csrfToken: options.csrfToken,\n exportName: options.reference.exportName,\n moduleId: options.reference.moduleId,\n nonce: options.actionNonce,\n }),\n ),\n ].join(\"\");\n\n return `<form${attrs} method=\"post\" action=\"/_mreact/actions\">${hidden}`;\n}\n\nfunction actionTokenPlaceholder(reference: ActionReference): string {\n return `__mreact_action_token_${createHash(\"sha256\")\n .update(reference.moduleId)\n .update(\"\\0\")\n .update(reference.exportName)\n .digest(\"hex\")\n .slice(0, 16)}__`;\n}\n\nfunction escapeRegExp(value: string): string {\n return value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction hiddenInput(name: string, value: string): string {\n return `<input type=\"hidden\" name=\"${escapeAttribute(name)}\" value=\"${escapeAttribute(value)}\" />`;\n}\n\nasync function collectImportedServerActions(options: {\n appDir: string;\n code: string;\n pageFile: string;\n}): Promise<{\n diagnostics: ServerActionInferenceDiagnostic[];\n references: Map<string, ActionReference>;\n}> {\n return await collectRuntimeInferredServerActions({\n appDir: options.appDir,\n code: options.code,\n fileSystem: {\n isUseServerFile,\n resolveSourceFile,\n },\n pageFile: options.pageFile,\n });\n}\n\nfunction isInferredServerActionReference(options: {\n allowedActions: readonly AppRouterAllowedServerAction[] | \"any\" | undefined;\n appDir: string;\n exportName: string;\n moduleId: string;\n}): boolean {\n if (\n Array.isArray(options.allowedActions) &&\n options.allowedActions.some(\n (allowed) =>\n allowed.inferred === true &&\n allowed.moduleId === options.moduleId &&\n allowed.exportName === options.exportName,\n )\n ) {\n return true;\n }\n\n return inferredServerActionReferencesForApp(options.appDir).has(\n `${options.moduleId}#${options.exportName}`,\n );\n}\n\nfunction formActionToken(options: {\n csrfToken: string;\n exportName: string;\n moduleId: string;\n nonce: string;\n}): string {\n return createHmac(\"sha256\", actionTokenSecret)\n .update(options.moduleId)\n .update(\"\\0\")\n .update(options.exportName)\n .update(\"\\0\")\n .update(options.csrfToken)\n .update(\"\\0\")\n .update(options.nonce)\n .digest(\"base64url\");\n}\n\nfunction isValidFormActionToken(options: {\n csrfToken: string | undefined;\n exportName: string;\n moduleId: string;\n nonce: string;\n token: string | undefined;\n}): boolean {\n if (options.csrfToken === undefined || options.token === undefined) {\n return false;\n }\n\n const expected = Buffer.from(\n formActionToken({\n csrfToken: options.csrfToken,\n exportName: options.exportName,\n moduleId: options.moduleId,\n nonce: options.nonce,\n }),\n );\n const actual = Buffer.from(options.token);\n\n return actual.length === expected.length && timingSafeEqual(actual, expected);\n}\n\nfunction replaceInferredServerActionReferences(\n appDir: string,\n pageFile: string,\n references: ReadonlyMap<string, ActionReference>,\n): void {\n const nextReferences = new Map(\n Array.from(references.values())\n .filter((reference) => reference.inferred)\n .map((reference) => [`${reference.moduleId}#${reference.exportName}`, reference]),\n );\n let appReferencesByPage = inferredServerActionReferences.get(appDir);\n const previousReferences = appReferencesByPage?.get(pageFile) ?? new Map();\n const changed = !sameActionReferenceKeys(previousReferences, nextReferences);\n\n if (!changed) {\n return;\n }\n\n if (nextReferences.size === 0) {\n appReferencesByPage?.delete(pageFile);\n if (appReferencesByPage?.size === 0) {\n inferredServerActionReferences.delete(appDir);\n }\n } else {\n if (appReferencesByPage === undefined) {\n appReferencesByPage = new Map();\n inferredServerActionReferences.set(appDir, appReferencesByPage);\n }\n appReferencesByPage.set(pageFile, nextReferences);\n }\n\n clearServerActionRegistryCacheForApp(appDir);\n}\n\n// Cache the (expensive) collect+bundle+evaluate work keyed by appDir +\n// caller-supplied version. Production callers pass the build-time hash\n// (serverModuleCacheVersion) so the registry is reused for the lifetime\n// of one deployment. Dev callers omit the version; the entry is then\n// keyed on \"dev\" so the work happens once per process — restarts handle\n// invalidation. Concurrent callers share a single in-flight promise.\nconst serverActionRegistryCache = new Map<string, Promise<ServerActionRegistry>>();\n\nasync function loadServerActionRegistry(options: {\n appDir: string;\n cacheVersion?: string | undefined;\n importPolicy?: AppRouterImportPolicy | undefined;\n}): Promise<ServerActionRegistry> {\n const cacheKey = `${options.appDir}::${options.cacheVersion ?? \"dev\"}`;\n const cached = serverActionRegistryCache.get(cacheKey);\n\n if (cached !== undefined) {\n return cached;\n }\n\n const pending = buildServerActionRegistry(options).catch((error) => {\n // Drop the failed promise so a retry can re-run the load.\n serverActionRegistryCache.delete(cacheKey);\n throw error;\n });\n serverActionRegistryCache.set(cacheKey, pending);\n return pending;\n}\n\nasync function buildServerActionRegistry(options: {\n appDir: string;\n importPolicy?: AppRouterImportPolicy | undefined;\n}): Promise<ServerActionRegistry> {\n const files = await collectFiles(options.appDir);\n const registry: ServerActionRegistry = {};\n const inferredReferences = inferredServerActionReferencesForApp(options.appDir);\n\n for (const file of files) {\n const moduleId = moduleIdForFile(options.appDir, file);\n const inferredExportNames = inferredExportNamesForModule(inferredReferences, moduleId);\n const useServerFile = await isUseServerFile(file);\n\n if (!useServerFile && inferredExportNames.size === 0) {\n continue;\n }\n\n const module = await importServerActionModule({\n appDir: options.appDir,\n file,\n importPolicy: options.importPolicy,\n });\n\n for (const [exportName, value] of Object.entries(module)) {\n if (typeof value === \"function\" && (useServerFile || inferredExportNames.has(exportName))) {\n registry[`${moduleId}#${exportName}`] = value as (...args: unknown[]) => unknown;\n }\n }\n }\n\n return registry;\n}\n\n// Exposed for tests that need a clean slate between cases (in-process state).\nexport function __clearServerActionRegistryCache(): void {\n serverActionRegistryCache.clear();\n inferredServerActionReferences.clear();\n}\n\nfunction clearServerActionRegistryCacheForApp(appDir: string): void {\n const prefix = `${appDir}::`;\n\n for (const key of serverActionRegistryCache.keys()) {\n if (key.startsWith(prefix)) {\n serverActionRegistryCache.delete(key);\n }\n }\n}\n\nfunction sameActionReferenceKeys(\n left: ReadonlyMap<string, ActionReference>,\n right: ReadonlyMap<string, ActionReference>,\n): boolean {\n if (left.size !== right.size) {\n return false;\n }\n\n for (const key of left.keys()) {\n if (!right.has(key)) {\n return false;\n }\n }\n\n return true;\n}\n\nfunction inferredServerActionReferencesForApp(appDir: string): Map<string, ActionReference> {\n const references = new Map<string, ActionReference>();\n const appReferencesByPage = inferredServerActionReferences.get(appDir);\n\n if (appReferencesByPage === undefined) {\n return references;\n }\n\n for (const pageReferences of appReferencesByPage.values()) {\n for (const [key, reference] of pageReferences) {\n references.set(key, reference);\n }\n }\n\n return references;\n}\n\nfunction inferredExportNamesForModule(\n references: ReadonlyMap<string, ActionReference>,\n moduleId: string,\n): Set<string> {\n const names = new Set<string>();\n\n for (const reference of references.values()) {\n if (reference.moduleId === moduleId) {\n names.add(reference.exportName);\n }\n }\n\n return names;\n}\n\nasync function importServerActionModule(options: {\n appDir: string;\n file: string;\n importPolicy?: AppRouterImportPolicy | undefined;\n}): Promise<Record<string, unknown>> {\n const bundled = await bundleRouterModule({\n code: `export * from ${JSON.stringify(options.file)};`,\n filename: options.file,\n platform: \"node\",\n plugins: [\n fileImportMetaUrlPlugin(),\n serverActionRuntimePlugin(),\n createAppRouterImportPolicyPlugin({\n appDir: options.appDir,\n importPolicy: options.importPolicy,\n label: \"Server action\",\n }),\n ],\n });\n const code = bundled.code;\n\n if (code === undefined) {\n throw new Error(`Failed to compile server action module ${options.file}.`);\n }\n\n return importAppRouterSourceModule<Record<string, unknown>>({\n code,\n label: `server-action:${options.file}`,\n });\n}\n\nfunction serverActionRuntimePlugin() {\n const currentDir = dirname(fileURLToPath(import.meta.url));\n const cachePath = join(currentDir, currentDir.endsWith(`${sep}dist`) ? \"cache.js\" : \"cache.ts\");\n\n return {\n name: \"mreact-router-server-action-runtime\",\n setup(buildApi: RouterCompatBuildApi) {\n buildApi.onResolve({ filter: /^@reckona\\/mreact-router$/ }, () => ({\n namespace: \"mreact-router-server-api\",\n path: \"index\",\n }));\n buildApi.onLoad({ filter: /^index$/, namespace: \"mreact-router-server-api\" }, () => ({\n contents: `export { revalidatePath } from ${JSON.stringify(cachePath)};`,\n loader: \"ts\",\n resolveDir: dirname(cachePath),\n }));\n },\n };\n}\n\nasync function collectFiles(directory: string): Promise<string[]> {\n const entries = await readdir(directory, { withFileTypes: true });\n const files: string[] = [];\n\n for (const entry of entries) {\n const path = join(directory, entry.name);\n\n if (entry.isDirectory()) {\n if (shouldSkipServerActionScanDirectory(entry.name)) {\n continue;\n }\n\n files.push(...(await collectFiles(path)));\n continue;\n }\n\n if (entry.isFile() && /\\.(?:mreact\\.tsx|tsx|ts)$/.test(entry.name)) {\n files.push(path);\n }\n }\n\n return files;\n}\n\nfunction shouldSkipServerActionScanDirectory(name: string): boolean {\n return name === \"node_modules\" || name === \"__tests__\" || name.startsWith(\".\");\n}\n\nasync function resolveSourceFile(directory: string, source: string): Promise<string | undefined> {\n const base = join(directory, source);\n const tsEsmBase = /\\.[cm]?js$/.test(base) ? base.replace(/\\.[cm]?js$/, \"\") : undefined;\n const candidates = [\n base,\n ...(tsEsmBase === undefined\n ? []\n : [\n `${tsEsmBase}.ts`,\n `${tsEsmBase}.tsx`,\n `${tsEsmBase}.mreact.tsx`,\n join(tsEsmBase, \"index.ts\"),\n join(tsEsmBase, \"index.tsx\"),\n ]),\n `${base}.ts`,\n `${base}.tsx`,\n `${base}.mreact.tsx`,\n join(base, \"index.ts\"),\n join(base, \"index.tsx\"),\n ];\n\n for (const candidate of candidates) {\n try {\n await access(candidate);\n return candidate;\n } catch {\n // Try the next candidate.\n }\n }\n\n return undefined;\n}\n\nasync function isUseServerFile(file: string): Promise<boolean> {\n const code = await readFile(file, \"utf8\");\n\n return hasModuleDirective({ code, directive: \"use server\", filename: file });\n}\n\nfunction moduleIdForFile(appDir: string, file: string): string {\n return relative(appDir, file).split(sep).join(\"/\");\n}\n\nfunction validateServerActionRequestOrigin(request: Request): Response | undefined {\n const expectedOrigin = new URL(request.url).origin;\n const origin = request.headers.get(\"origin\");\n\n if (origin !== null) {\n return origin === expectedOrigin\n ? undefined\n : jsonResponse({ ok: false, error: \"Origin not allowed.\" }, 403);\n }\n\n const referer = request.headers.get(\"referer\");\n\n if (referer === null || isLocalServerActionEnvironment()) {\n return isLocalServerActionEnvironment()\n ? undefined\n : jsonResponse({ ok: false, error: \"Origin not allowed.\" }, 403);\n }\n\n try {\n return new URL(referer).origin === expectedOrigin\n ? undefined\n : jsonResponse({ ok: false, error: \"Origin not allowed.\" }, 403);\n } catch {\n return jsonResponse({ ok: false, error: \"Origin not allowed.\" }, 403);\n }\n}\n\nfunction validateFormNonce(\n formData: FormData,\n replayStore: ServerActionReplayStore,\n): Response | undefined {\n const nonce = stringFormValue(formData.get(formFieldNonce));\n\n if (nonce === undefined || nonce.length === 0) {\n return jsonResponse({ ok: false, error: \"Missing server action nonce.\" }, 400);\n }\n\n if (replayStore.has(nonce)) {\n return jsonResponse({ ok: false, error: \"Server action nonce was already used.\" }, 409);\n }\n\n replayStore.add(nonce);\n return undefined;\n}\n\nfunction cleanActionFormData(formData: FormData): FormData {\n const cleaned = new FormData();\n\n for (const [name, value] of formData.entries()) {\n if (\n name !== formFieldModuleId &&\n name !== formFieldExportName &&\n name !== formCsrfFieldName &&\n name !== formFieldNonce &&\n name !== formFieldActionToken\n ) {\n cleaned.append(name, value);\n }\n }\n\n return cleaned;\n}\n\nfunction stringFormValue(value: FormDataEntryValue | null): string | undefined {\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction jsonResponse(payload: unknown, status: number): Response {\n return new Response(JSON.stringify(payload), {\n headers: { \"content-type\": \"application/json; charset=utf-8\" },\n status,\n });\n}\n\nfunction escapeAttribute(value: string): string {\n return value\n .replaceAll(\"&\", \"&\")\n .replaceAll('\"', \""\")\n .replaceAll(\"<\", \"<\")\n .replaceAll(\">\", \">\");\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../src/adapters/cloudflare.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAyB,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC9E,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAE7D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAC1D,OAAO,EASL,KAAK,WAAW,EACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EACV,uBAAuB,EAGvB,aAAa,EAEd,MAAM,aAAa,CAAC;AACrB,OAAO,EAML,KAAK,eAAe,EACrB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../src/adapters/cloudflare.ts"],"names":[],"mappings":"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"}
|