@bleedingdev/modern-js-runtime-extensions 3.8.3-ultramodern.6 → 3.9.0-ultramodern.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (200) hide show
  1. package/dist/cjs/buildIdentity.js +73 -0
  2. package/dist/cjs/contextExtensions.js +74 -0
  3. package/dist/cjs/headRuntime.js +91 -0
  4. package/dist/cjs/helmetContext.js +54 -0
  5. package/dist/cjs/index.js +18 -4
  6. package/dist/cjs/localisedLoaderIdentity.js +51 -0
  7. package/dist/cjs/prefetchPolicy.js +52 -0
  8. package/dist/cjs/reactContext.js +45 -0
  9. package/dist/cjs/request-policy/browser.js +139 -0
  10. package/dist/cjs/request-policy/client.js +234 -0
  11. package/dist/cjs/request-policy/node.js +149 -0
  12. package/dist/cjs/request-policy/policyCore.js +266 -0
  13. package/dist/cjs/request-policy/requestContext.js +137 -0
  14. package/dist/cjs/request-policy/traceparent.js +56 -0
  15. package/dist/cjs/request-policy/transport.js +234 -0
  16. package/dist/cjs/request-policy/types.js +57 -0
  17. package/dist/cjs/routeHydration.js +127 -0
  18. package/dist/cjs/routerPrefetchPolicy.js +153 -0
  19. package/dist/cjs/routerProvider.js +105 -0
  20. package/dist/cjs/routerState.js +204 -0
  21. package/dist/cjs/routerStatePlugin.js +86 -0
  22. package/dist/cjs/routerStateTypes.js +18 -0
  23. package/dist/cjs/rsc-disabled/rscDisabledClientBrowserRuntime.js +69 -0
  24. package/dist/cjs/rsc-disabled/rscDisabledClientEdgeRuntime.js +61 -0
  25. package/dist/cjs/rsc-disabled/rscDisabledClientNodeRuntime.js +65 -0
  26. package/dist/cjs/rsc-disabled/rscDisabledRuntimeError.js +42 -0
  27. package/dist/cjs/rsc-disabled/rscDisabledServerEdgeRuntime.js +93 -0
  28. package/dist/cjs/rsc-disabled/rscDisabledServerNodeRuntime.js +101 -0
  29. package/dist/cjs/runtimeContextProjection.js +112 -0
  30. package/dist/cjs/server-config/bffRuntime.js +18 -0
  31. package/dist/cjs/server-config/index.js +18 -0
  32. package/dist/cjs/server-config/serverTelemetry.js +18 -0
  33. package/dist/cjs/shellStream.js +34 -2
  34. package/dist/cjs/workspaceEvents.js +159 -0
  35. package/dist/esm/buildIdentity.mjs +35 -0
  36. package/dist/esm/contextExtensions.mjs +33 -0
  37. package/dist/esm/headRuntime.mjs +43 -0
  38. package/dist/esm/helmetContext.mjs +13 -0
  39. package/dist/esm/index.mjs +2 -0
  40. package/dist/esm/localisedLoaderIdentity.mjs +13 -0
  41. package/dist/esm/prefetchPolicy.mjs +11 -0
  42. package/dist/esm/reactContext.mjs +7 -0
  43. package/dist/esm/request-policy/browser.mjs +11 -0
  44. package/dist/esm/request-policy/client.mjs +195 -0
  45. package/dist/esm/request-policy/policyCore.mjs +171 -0
  46. package/dist/esm/request-policy/requestContext.mjs +75 -0
  47. package/dist/esm/request-policy/traceparent.mjs +18 -0
  48. package/dist/esm/request-policy/transport.mjs +196 -0
  49. package/dist/esm/request-policy/types.mjs +10 -0
  50. package/dist/esm/routeHydration.mjs +77 -0
  51. package/dist/esm/routerPrefetchPolicy.mjs +115 -0
  52. package/dist/esm/routerProvider.mjs +58 -0
  53. package/dist/esm/routerState.mjs +139 -0
  54. package/dist/esm/routerStatePlugin.mjs +48 -0
  55. package/dist/esm/routerStateTypes.mjs +0 -0
  56. package/dist/esm/rsc-disabled/rscDisabledClientBrowserRuntime.mjs +10 -0
  57. package/dist/esm/rsc-disabled/rscDisabledClientEdgeRuntime.mjs +8 -0
  58. package/dist/esm/rsc-disabled/rscDisabledClientNodeRuntime.mjs +9 -0
  59. package/dist/esm/rsc-disabled/rscDisabledRuntimeError.mjs +4 -0
  60. package/dist/esm/rsc-disabled/rscDisabledServerEdgeRuntime.mjs +16 -0
  61. package/dist/esm/rsc-disabled/rscDisabledServerNodeRuntime.mjs +18 -0
  62. package/dist/esm/runtimeContextProjection.mjs +74 -0
  63. package/dist/esm/server-config/bffRuntime.mjs +0 -0
  64. package/dist/esm/server-config/index.mjs +0 -0
  65. package/dist/esm/server-config/serverTelemetry.mjs +0 -0
  66. package/dist/esm/shellStream.mjs +34 -2
  67. package/dist/esm/workspaceEvents.mjs +66 -0
  68. package/dist/esm-node/buildIdentity.mjs +36 -0
  69. package/dist/esm-node/contextExtensions.mjs +34 -0
  70. package/dist/esm-node/headRuntime.mjs +44 -0
  71. package/dist/esm-node/helmetContext.mjs +14 -0
  72. package/dist/esm-node/index.mjs +2 -0
  73. package/dist/esm-node/localisedLoaderIdentity.mjs +14 -0
  74. package/dist/esm-node/prefetchPolicy.mjs +12 -0
  75. package/dist/esm-node/reactContext.mjs +8 -0
  76. package/dist/esm-node/request-policy/browser.mjs +12 -0
  77. package/dist/esm-node/request-policy/client.mjs +196 -0
  78. package/dist/esm-node/request-policy/node.mjs +22 -0
  79. package/dist/esm-node/request-policy/policyCore.mjs +172 -0
  80. package/dist/esm-node/request-policy/requestContext.mjs +76 -0
  81. package/dist/esm-node/request-policy/traceparent.mjs +19 -0
  82. package/dist/esm-node/request-policy/transport.mjs +197 -0
  83. package/dist/esm-node/request-policy/types.mjs +11 -0
  84. package/dist/esm-node/routeHydration.mjs +78 -0
  85. package/dist/esm-node/routerPrefetchPolicy.mjs +116 -0
  86. package/dist/esm-node/routerProvider.mjs +59 -0
  87. package/dist/esm-node/routerState.mjs +140 -0
  88. package/dist/esm-node/routerStatePlugin.mjs +49 -0
  89. package/dist/esm-node/routerStateTypes.mjs +1 -0
  90. package/dist/esm-node/rsc-disabled/rscDisabledClientBrowserRuntime.mjs +11 -0
  91. package/dist/esm-node/rsc-disabled/rscDisabledClientEdgeRuntime.mjs +9 -0
  92. package/dist/esm-node/rsc-disabled/rscDisabledClientNodeRuntime.mjs +10 -0
  93. package/dist/esm-node/rsc-disabled/rscDisabledRuntimeError.mjs +5 -0
  94. package/dist/esm-node/rsc-disabled/rscDisabledServerEdgeRuntime.mjs +17 -0
  95. package/dist/esm-node/rsc-disabled/rscDisabledServerNodeRuntime.mjs +19 -0
  96. package/dist/esm-node/runtimeContextProjection.mjs +75 -0
  97. package/dist/esm-node/server-config/bffRuntime.mjs +1 -0
  98. package/dist/esm-node/server-config/index.mjs +1 -0
  99. package/dist/esm-node/server-config/serverTelemetry.mjs +1 -0
  100. package/dist/esm-node/shellStream.mjs +34 -2
  101. package/dist/esm-node/workspaceEvents.mjs +67 -0
  102. package/dist/types/buildIdentity.d.ts +37 -0
  103. package/dist/types/contextExtensions.d.ts +34 -0
  104. package/dist/types/headRuntime.d.ts +12 -0
  105. package/dist/types/helmetContext.d.ts +10 -0
  106. package/dist/types/index.d.ts +6 -4
  107. package/dist/types/localisedLoaderIdentity.d.ts +10 -0
  108. package/dist/types/node.d.ts +1 -1
  109. package/dist/types/prefetchPolicy.d.ts +4 -0
  110. package/dist/types/reactContext.d.ts +6 -0
  111. package/dist/types/rendererHead.d.ts +1 -1
  112. package/dist/types/request-policy/browser.d.ts +10 -0
  113. package/dist/types/request-policy/client.d.ts +14 -0
  114. package/dist/types/request-policy/node.d.ts +10 -0
  115. package/dist/types/request-policy/policyCore.d.ts +107 -0
  116. package/dist/types/request-policy/requestContext.d.ts +22 -0
  117. package/dist/types/request-policy/traceparent.d.ts +10 -0
  118. package/dist/types/request-policy/transport.d.ts +12 -0
  119. package/dist/types/request-policy/types.d.ts +144 -0
  120. package/dist/types/routeHydration.d.ts +24 -0
  121. package/dist/types/routerPrefetchPolicy.d.ts +28 -0
  122. package/dist/types/routerProvider.d.ts +55 -0
  123. package/dist/types/routerState.d.ts +18 -0
  124. package/dist/types/routerStatePlugin.d.ts +19 -0
  125. package/dist/types/routerStateTypes.d.ts +40 -0
  126. package/dist/types/rsc-disabled/rscDisabledClientBrowserRuntime.d.ts +9 -0
  127. package/dist/types/rsc-disabled/rscDisabledClientEdgeRuntime.d.ts +7 -0
  128. package/dist/types/rsc-disabled/rscDisabledClientNodeRuntime.d.ts +8 -0
  129. package/dist/types/rsc-disabled/rscDisabledRuntimeError.d.ts +1 -0
  130. package/dist/types/rsc-disabled/rscDisabledServerEdgeRuntime.d.ts +15 -0
  131. package/dist/types/rsc-disabled/rscDisabledServerNodeRuntime.d.ts +17 -0
  132. package/dist/types/runtimeContextProjection.d.ts +30 -0
  133. package/dist/types/server-config/bffRuntime.d.ts +122 -0
  134. package/dist/types/server-config/index.d.ts +2 -0
  135. package/dist/types/server-config/serverTelemetry.d.ts +322 -0
  136. package/dist/types/workspaceEvents.d.ts +62 -0
  137. package/package.json +240 -15
  138. package/rslib.config.mts +17 -2
  139. package/rstest.config.mts +33 -2
  140. package/src/buildIdentity.ts +61 -0
  141. package/src/contextExtensions.ts +81 -0
  142. package/src/headRuntime.tsx +77 -0
  143. package/src/helmetContext.ts +31 -0
  144. package/src/index.ts +2 -0
  145. package/src/localisedLoaderIdentity.ts +30 -0
  146. package/src/prefetchPolicy.ts +33 -0
  147. package/src/reactContext.ts +16 -0
  148. package/src/request-policy/browser.ts +22 -0
  149. package/src/request-policy/client.ts +404 -0
  150. package/src/request-policy/node.ts +41 -0
  151. package/src/request-policy/policyCore.ts +424 -0
  152. package/src/request-policy/requestContext.ts +149 -0
  153. package/src/request-policy/traceparent.ts +43 -0
  154. package/src/request-policy/transport.ts +349 -0
  155. package/src/request-policy/types.ts +229 -0
  156. package/src/routeHydration.ts +208 -0
  157. package/src/routerPrefetchPolicy.ts +195 -0
  158. package/src/routerProvider.ts +160 -0
  159. package/src/routerState.ts +290 -0
  160. package/src/routerStatePlugin.ts +86 -0
  161. package/src/routerStateTypes.ts +46 -0
  162. package/src/rsc-disabled/rscDisabledClientBrowserRuntime.ts +10 -0
  163. package/src/rsc-disabled/rscDisabledClientEdgeRuntime.ts +8 -0
  164. package/src/rsc-disabled/rscDisabledClientNodeRuntime.ts +9 -0
  165. package/src/rsc-disabled/rscDisabledRuntimeError.ts +3 -0
  166. package/src/rsc-disabled/rscDisabledServerEdgeRuntime.ts +16 -0
  167. package/src/rsc-disabled/rscDisabledServerNodeRuntime.ts +18 -0
  168. package/src/runtimeContextProjection.ts +105 -0
  169. package/src/server-config/bffRuntime.ts +136 -0
  170. package/src/server-config/index.ts +2 -0
  171. package/src/server-config/serverTelemetry.ts +337 -0
  172. package/src/shellStream.ts +55 -25
  173. package/src/workspaceEvents.ts +324 -0
  174. package/tests/buildIdentity.test.ts +51 -0
  175. package/tests/contextExtensions.test.ts +27 -0
  176. package/tests/headRuntime.test.tsx +229 -0
  177. package/tests/rendererHead.test.ts +1 -113
  178. package/tests/request-policy/browser-policy.test.ts +108 -0
  179. package/tests/request-policy/client-isolation.test.ts +109 -0
  180. package/tests/request-policy/node-policy.test.ts +447 -0
  181. package/tests/request-policy/policyCore.test.ts +129 -0
  182. package/tests/request-policy/requestContext.test.ts +66 -0
  183. package/tests/request-policy/requestFactory.outbound-contract.test.ts +290 -0
  184. package/tests/request-policy/traceparent.test.ts +52 -0
  185. package/tests/request-policy/transport-retry.test.ts +367 -0
  186. package/tests/routeHydration.test.ts +180 -0
  187. package/tests/routerPrefetchPolicy.test.ts +102 -0
  188. package/tests/routerProvider.test.ts +29 -0
  189. package/tests/routerState.test.ts +78 -0
  190. package/tests/routerStatePlugin.test.ts +63 -0
  191. package/tests/runtimeContextProjection.test.ts +83 -0
  192. package/tests/safeFailure.test.ts +10 -28
  193. package/tests/shellStream.test.ts +37 -0
  194. package/tests/workspaceEvents.test.ts +221 -0
  195. package/dist/cjs/rscHtmlStream.js +0 -128
  196. package/dist/esm/rscHtmlStream.mjs +0 -86
  197. package/dist/esm-node/rscHtmlStream.mjs +0 -87
  198. package/dist/types/rscHtmlStream.d.ts +0 -4
  199. package/src/rscHtmlStream.ts +0 -142
  200. package/tests/rscHtmlStream.test.ts +0 -153
@@ -0,0 +1,144 @@
1
+ import type { HttpMethodDecider, IOptions as NativeOptions, RequestCreatorOptions as NativeRequestCreatorOptions, UploadCreatorOptions as NativeUploadCreatorOptions, Sender } from '@modern-js/create-request/client';
2
+ export type { BFFRequestPayload, HttpMethodDecider, Sender, } from '@modern-js/create-request/client';
3
+ export declare const BFF_ENVELOPE_HEADER = "x-modernjs-bff-envelope";
4
+ export declare const BFF_OPERATION_CONTEXT_HEADER = "x-operation-id";
5
+ export declare const BFF_OPERATION_CONTEXT_DETAIL_HEADER = "x-modernjs-bff-operation-context";
6
+ export declare const BFF_DEFAULT_PROTECTED_IDENTITY_HEADERS: readonly ['x-tenant-id', 'x-subject-id', 'x-user-id', "x-operation-id"];
7
+ export type ResolveHeadersOptions = {
8
+ requestId: string;
9
+ allowedHeaders: string[];
10
+ incomingHeaders: Record<string, any>;
11
+ };
12
+ export type ResolveHeaders = (options: ResolveHeadersOptions) => Record<string, any> | void;
13
+ export type AllowCrossOriginEnvelopeOptions = {
14
+ requestId: string;
15
+ sourceOrigin?: string;
16
+ targetOrigin?: string;
17
+ target: 'server' | 'browser';
18
+ };
19
+ export type AllowCrossOriginEnvelope = boolean | ((options: AllowCrossOriginEnvelopeOptions) => boolean);
20
+ export type TransportTarget = 'server' | 'browser';
21
+ export type RetryDecisionContext = {
22
+ requestId: string;
23
+ target: TransportTarget;
24
+ method: string;
25
+ url: string;
26
+ attempt: number;
27
+ maxAttempts: number;
28
+ error: unknown;
29
+ statusCode?: number;
30
+ };
31
+ export type RetryBackoffOptions = {
32
+ retries?: number;
33
+ baseDelayMs?: number;
34
+ maxDelayMs?: number;
35
+ jitterRatio?: number;
36
+ retryableStatusCodes?: number[];
37
+ shouldRetry?: (context: RetryDecisionContext) => boolean;
38
+ };
39
+ export type DegradedModeReason = 'timeout' | 'retry' | 'retry_exhausted';
40
+ export type DegradedModeEvent = {
41
+ requestId: string;
42
+ target: TransportTarget;
43
+ method: string;
44
+ url: string;
45
+ reason: DegradedModeReason;
46
+ attempt: number;
47
+ maxAttempts: number;
48
+ timeoutMs?: number;
49
+ backoffMs?: number;
50
+ statusCode?: number;
51
+ error?: unknown;
52
+ };
53
+ export type TransportResilienceOptions = {
54
+ timeoutMs?: number;
55
+ retry?: RetryBackoffOptions;
56
+ onDegraded?: (event: DegradedModeEvent) => void;
57
+ };
58
+ export type IdentityBindingViolationReason = 'client_override_blocked' | 'client_override_rejected';
59
+ export type IdentityBindingViolation = {
60
+ requestId: string;
61
+ target: TransportTarget;
62
+ header: string;
63
+ reason: IdentityBindingViolationReason;
64
+ attemptedValue?: unknown;
65
+ derivedValue?: unknown;
66
+ };
67
+ export type DeriveIdentityHeadersOptions = {
68
+ requestId: string;
69
+ target: TransportTarget;
70
+ incomingHeaders: Record<string, any>;
71
+ protectedHeaders: string[];
72
+ };
73
+ export type IdentityBindingOptions = {
74
+ enabled?: boolean;
75
+ strict?: boolean;
76
+ protectedHeaders?: string[];
77
+ deriveHeaders?: (options: DeriveIdentityHeadersOptions) => Record<string, any> | void;
78
+ onViolation?: (violation: IdentityBindingViolation) => void;
79
+ };
80
+ export type OperationContractViolationReason = 'missing_schema_hash' | 'missing_operation_version';
81
+ export type OperationContractViolation = {
82
+ requestId: string;
83
+ target: TransportTarget;
84
+ operationId: string;
85
+ reason: OperationContractViolationReason;
86
+ routePath?: string;
87
+ method?: string;
88
+ schemaHash?: string;
89
+ operationVersion?: number;
90
+ };
91
+ export type CrossProjectOperationContract = {
92
+ schemaHash?: string;
93
+ operationVersion?: number;
94
+ };
95
+ export type CrossProjectPolicyViolationReason = 'missing_envelope' | 'invalid_envelope' | 'missing_request_id' | 'namespace_not_allowed' | 'missing_operation_context' | 'operation_context_mismatch' | 'missing_operation_context_details' | 'invalid_operation_context_details' | 'operation_context_details_request_id_mismatch' | 'missing_operation_schema_hash' | 'missing_operation_version' | 'unknown_operation_contract' | 'operation_schema_hash_mismatch' | 'operation_version_mismatch' | 'producer_identity_mismatch';
96
+ export type CrossProjectPolicyViolation = {
97
+ code: 'BFF_CROSS_PROJECT_POLICY_DENIED';
98
+ reason: CrossProjectPolicyViolationReason;
99
+ message: string;
100
+ status: number;
101
+ };
102
+ export type OperationContractOptions = {
103
+ enabled?: boolean;
104
+ strict?: boolean;
105
+ requireSchemaHash?: boolean;
106
+ requireOperationVersion?: boolean;
107
+ onViolation?: (violation: OperationContractViolation) => void;
108
+ };
109
+ export type OperationContextSource = 'client' | 'server' | 'generated-client' | 'effect-adapter' | 'data-platform' | 'unknown';
110
+ export type OperationContext = {
111
+ requestId?: string;
112
+ operationId?: string;
113
+ routePath?: string;
114
+ method?: string;
115
+ schemaHash?: string;
116
+ operationVersion?: number;
117
+ locale?: string;
118
+ traceparent?: string;
119
+ traceId?: string;
120
+ spanId?: string;
121
+ source?: OperationContextSource;
122
+ scope?: Record<string, unknown>;
123
+ sessionClaims?: Record<string, unknown>;
124
+ attributes?: Record<string, unknown>;
125
+ };
126
+ export type RequestCreatorOptions<F = typeof fetch> = Omit<NativeRequestCreatorOptions<F>, 'hooks'> & {
127
+ operationContext?: OperationContext;
128
+ };
129
+ export type RequestCreator<F = typeof fetch> = {
130
+ (options: RequestCreatorOptions<F>): Sender;
131
+ (path: string, method: string, port: number, httpMethodDecider?: HttpMethodDecider, fetch?: F, requestId?: string, operationContext?: OperationContext): Sender;
132
+ };
133
+ export type UploadCreatorOptions = Omit<NativeUploadCreatorOptions, 'hooks'> & {
134
+ operationContext?: OperationContext;
135
+ };
136
+ export type UploadCreator = (options: UploadCreatorOptions) => Sender;
137
+ export type IOptions<F = typeof fetch> = NativeOptions<F> & {
138
+ resolveHeaders?: ResolveHeaders;
139
+ transport?: TransportResilienceOptions;
140
+ requireEnvelope?: boolean;
141
+ allowCrossOriginEnvelope?: AllowCrossOriginEnvelope;
142
+ identityBinding?: IdentityBindingOptions;
143
+ operationContract?: OperationContractOptions;
144
+ };
@@ -0,0 +1,24 @@
1
+ type RouteAssetManifest = {
2
+ assets?: string[];
3
+ };
4
+ export type RouteManifestLike = {
5
+ routeAssets?: Record<string, RouteAssetManifest | undefined>;
6
+ };
7
+ export type ScriptChunkLike = {
8
+ filename?: string;
9
+ url?: string;
10
+ };
11
+ export declare function getMatchedRouteChunks<T>(routeManifest: RouteManifestLike | undefined, matchedRouteIds: string[], routeAssetToChunk: (asset: string) => T): T[];
12
+ export declare const orderHydrationScriptChunks: <T extends ScriptChunkLike>({ asyncEntryChunks, collectedChunks, matchedRouteChunks, entryName, }: {
13
+ asyncEntryChunks: T[];
14
+ collectedChunks: T[];
15
+ matchedRouteChunks: T[];
16
+ entryName: string;
17
+ }) => T[];
18
+ export declare function injectBeforeHydrationEntryScript(template: string, scripts: string, entryName?: string): string;
19
+ export declare function replaceChunkJsPlaceholder(template: string, scripts: string, entryName: string | undefined, placeholder: string): string;
20
+ export declare function createRouteHydrationScriptTags(routeManifest: RouteManifestLike | undefined, matchedRouteIds: string[], entryName: string, options?: {
21
+ nonce?: string;
22
+ template?: string;
23
+ }): string;
24
+ export {};
@@ -0,0 +1,28 @@
1
+ type PrefetchBehavior = 'intent' | 'render' | 'viewport' | 'none';
2
+ type PrefetchState = {
3
+ code: boolean;
4
+ data: boolean;
5
+ };
6
+ /** Policy-only contract: native links supply elements, route inputs and loads. */
7
+ export declare function createRouterPrefetchPolicy(): {
8
+ canWarmup: () => boolean;
9
+ allowData(route: unknown): boolean;
10
+ observe({ element, prefetch: inputPrefetch, preload: inputPreload, notify, }: {
11
+ element: HTMLAnchorElement | null;
12
+ prefetch?: PrefetchBehavior;
13
+ preload?: PrefetchBehavior | false;
14
+ notify: (state: PrefetchState) => void;
15
+ }): {
16
+ onIntent(): void;
17
+ onCancel(): void;
18
+ dispose(): void;
19
+ };
20
+ schedule({ runtimeContext, chunkLoader, publicPath, key: operationKey, run, }: {
21
+ runtimeContext: object;
22
+ chunkLoader: object;
23
+ publicPath: string;
24
+ key: string;
25
+ run: () => Promise<unknown>;
26
+ }): () => void;
27
+ };
28
+ export {};
@@ -0,0 +1,55 @@
1
+ /** Structural plugin contract; the composing integration supplies native hooks. */
2
+ export type RouterProviderPlugin = {
3
+ name?: string;
4
+ registryHooks?: Record<string, unknown>;
5
+ setup?: (api: any) => unknown;
6
+ [key: string]: unknown;
7
+ };
8
+ /**
9
+ * Guard for the wrapper plugin (`router/internal`): a resolved provider is
10
+ * only invoked through `setup`, so registry hooks outside the canonical
11
+ * router hook contract cannot be registered for it. Returns the offending
12
+ * hook names and warns once so they are surfaced instead of silently dropped.
13
+ */
14
+ export declare function reportUnsupportedProviderRegistryHooks(providerPlugin: {
15
+ name?: string;
16
+ registryHooks?: Record<string, unknown>;
17
+ }, routerProviderRegistryHooks: Record<string, unknown>): string[];
18
+ export type RouterProviderFactory = (userConfig?: any) => RouterProviderPlugin;
19
+ export type RouterProviderRegistration = {
20
+ name: string;
21
+ factory: RouterProviderFactory;
22
+ isDefault?: boolean;
23
+ };
24
+ /**
25
+ * App-owned provider catalog. Provider factories close over their module graph,
26
+ * so they must be resolved from the runtime wrapper that owns the app instead
27
+ * of from a page-global first-registration winner.
28
+ */
29
+ export type RouterProviderRealm = Readonly<{
30
+ defaultProvider?: string;
31
+ get: (name: string) => RouterProviderFactory | undefined;
32
+ names: () => readonly string[];
33
+ }>;
34
+ export declare function createRouterProviderRealm(registrations: readonly RouterProviderRegistration[]): RouterProviderRealm;
35
+ export declare function resolveRouterProvider(framework: string | undefined, options: {
36
+ realm: RouterProviderRealm;
37
+ }): RouterProviderFactory;
38
+ /** Compose app-owned providers without importing the native runtime graph. */
39
+ export declare function createRouterPlugin<Hooks extends Record<string, unknown>>({ defaultProvider, registryHooks, localProviders, }: {
40
+ defaultProvider: {
41
+ name: string;
42
+ factory: RouterProviderFactory;
43
+ };
44
+ registryHooks: Hooks;
45
+ localProviders?: readonly Omit<RouterProviderRegistration, 'isDefault'>[];
46
+ }): (userConfig?: Record<string, any>) => {
47
+ name: string;
48
+ registryHooks: Hooks;
49
+ setup(api: {
50
+ getRuntimeConfig: () => {
51
+ router?: Record<string, unknown>;
52
+ };
53
+ [key: string]: any;
54
+ }): void;
55
+ };
@@ -0,0 +1,18 @@
1
+ import type { InternalRouterRuntimeState, InternalRouterServerSnapshot, RouterServerPrepareResult } from './routerStateTypes.js';
2
+ export type { BuiltInRouterFramework, InternalRouterRuntimeState, InternalRouterServerSnapshot, RouterFramework, RouterLifecyclePhase, RouterRouteMatchSnapshot, RouterServerPrepareResult, } from './routerStateTypes.js';
3
+ export declare function getRouterRuntimeState(runtimeContext: object): InternalRouterRuntimeState | undefined;
4
+ export declare function getRouterServerSnapshot(runtimeContext: object): InternalRouterServerSnapshot | undefined;
5
+ type RouterSnapshotLike = Partial<InternalRouterServerSnapshot>;
6
+ export declare function createRouterServerSnapshot(state: RouterSnapshotLike): InternalRouterServerSnapshot;
7
+ export declare function createRouterRuntimeState(state: InternalRouterRuntimeState): InternalRouterRuntimeState;
8
+ /**
9
+ * Observe the router runtime-state slot for the given runtime context.
10
+ * Returns an unsubscribe function; safe to call for a context that never
11
+ * receives a router.
12
+ */
13
+ export declare function subscribeRouterRuntimeState(runtimeContext: object, listener: () => void): () => void;
14
+ export declare function applyRouterRuntimeState<Context extends object>(runtimeContext: Context, state: InternalRouterRuntimeState): Context;
15
+ export declare function applyRouterServerPrepareResult<Context extends object>(runtimeContext: Context, result: RouterServerPrepareResult): Context;
16
+ export declare function getRouterHydrationScripts(runtimeContext: object): string[];
17
+ export declare function getRouterMatchedRouteIds(runtimeContext: object): string[] | undefined;
18
+ export declare function cleanupRouterRuntimeState(runtimeContext: object): Promise<void>;
@@ -0,0 +1,19 @@
1
+ type RouterLifecycleEvent = {
2
+ framework: string;
3
+ phase: string;
4
+ runtimeContext: object;
5
+ basename?: string;
6
+ router?: unknown;
7
+ };
8
+ /** Install fork policy through lifecycle hooks supplied by the native owner. */
9
+ export declare function createRouterStatePlugin<Hooks extends Record<string, unknown>>({ registryHooks, }: {
10
+ registryHooks: Hooks;
11
+ }): {
12
+ name: string;
13
+ registryHooks: Hooks;
14
+ setup(api: {
15
+ onBeforeRender: (callback: (context: object) => void) => unknown;
16
+ onAfterCreateRouter: (callback: (event: RouterLifecycleEvent) => void) => unknown;
17
+ }): void;
18
+ };
19
+ export {};
@@ -0,0 +1,40 @@
1
+ export type BuiltInRouterFramework = 'react-router' | 'tanstack';
2
+ export type RouterFramework = BuiltInRouterFramework | (string & {});
3
+ export interface RouterRouteMatchSnapshot {
4
+ routeId: string;
5
+ assetRouteId?: string;
6
+ pathname?: string;
7
+ params?: Record<string, string>;
8
+ }
9
+ export interface InternalRouterServerSnapshot {
10
+ framework?: RouterFramework;
11
+ basename?: string;
12
+ statusCode?: number;
13
+ errors?: Record<string, unknown>;
14
+ routerData?: {
15
+ loaderData?: Record<string, unknown>;
16
+ errors?: Record<string, unknown>;
17
+ };
18
+ hydrationScript?: string;
19
+ hydrationScripts?: string[];
20
+ matchedRouteIds?: string[];
21
+ matches?: RouterRouteMatchSnapshot[];
22
+ }
23
+ export interface InternalRouterRuntimeState {
24
+ framework: RouterFramework;
25
+ basename?: string;
26
+ instance?: unknown;
27
+ hydrationScript?: string;
28
+ hydrationScripts?: string[];
29
+ matchedRouteIds?: string[];
30
+ matches?: RouterRouteMatchSnapshot[];
31
+ serverSnapshot?: InternalRouterServerSnapshot;
32
+ cleanup?: () => void | Promise<void>;
33
+ }
34
+ export interface RouterServerPrepareResult {
35
+ state: InternalRouterRuntimeState;
36
+ snapshot?: InternalRouterServerSnapshot;
37
+ redirect?: Response;
38
+ cleanup?: () => void | Promise<void>;
39
+ }
40
+ export type RouterLifecyclePhase = 'ssr-prepare' | 'client-create' | 'hydrate';
@@ -0,0 +1,9 @@
1
+ import { disabledRscRuntime } from './rscDisabledRuntimeError.js';
2
+ export declare const createFromFetch: typeof disabledRscRuntime;
3
+ export declare const createFromReadableStream: typeof disabledRscRuntime;
4
+ export declare const createServerReference: typeof disabledRscRuntime;
5
+ export declare const createTemporaryReferenceSet: typeof disabledRscRuntime;
6
+ export declare const encodeReply: typeof disabledRscRuntime;
7
+ export declare const registerServerReference: typeof disabledRscRuntime;
8
+ export declare const setFindSourceMapURLCallback: typeof disabledRscRuntime;
9
+ export declare const setServerCallback: typeof disabledRscRuntime;
@@ -0,0 +1,7 @@
1
+ import { disabledRscRuntime } from './rscDisabledRuntimeError.js';
2
+ export declare const createFromFetch: typeof disabledRscRuntime;
3
+ export declare const createFromReadableStream: typeof disabledRscRuntime;
4
+ export declare const createServerReference: typeof disabledRscRuntime;
5
+ export declare const createTemporaryReferenceSet: typeof disabledRscRuntime;
6
+ export declare const encodeReply: typeof disabledRscRuntime;
7
+ export declare const registerServerReference: typeof disabledRscRuntime;
@@ -0,0 +1,8 @@
1
+ import { disabledRscRuntime } from './rscDisabledRuntimeError.js';
2
+ export declare const createFromFetch: typeof disabledRscRuntime;
3
+ export declare const createFromNodeStream: typeof disabledRscRuntime;
4
+ export declare const createFromReadableStream: typeof disabledRscRuntime;
5
+ export declare const createServerReference: typeof disabledRscRuntime;
6
+ export declare const createTemporaryReferenceSet: typeof disabledRscRuntime;
7
+ export declare const encodeReply: typeof disabledRscRuntime;
8
+ export declare const registerServerReference: typeof disabledRscRuntime;
@@ -0,0 +1 @@
1
+ export declare function disabledRscRuntime(): never;
@@ -0,0 +1,15 @@
1
+ import { disabledRscRuntime } from './rscDisabledRuntimeError.js';
2
+ export declare const createServerEntry: typeof disabledRscRuntime;
3
+ export declare const createTemporaryReferenceSet: typeof disabledRscRuntime;
4
+ export declare const decodeAction: typeof disabledRscRuntime;
5
+ export declare const decodeFormState: typeof disabledRscRuntime;
6
+ export declare const decodeReply: typeof disabledRscRuntime;
7
+ export declare const decodeReplyFromAsyncIterable: typeof disabledRscRuntime;
8
+ export declare const decryptServerActionBoundArgs: typeof disabledRscRuntime;
9
+ export declare const encryptServerActionBoundArgs: typeof disabledRscRuntime;
10
+ export declare const ensureServerActions: typeof disabledRscRuntime;
11
+ export declare const loadServerAction: typeof disabledRscRuntime;
12
+ export declare const registerClientReference: typeof disabledRscRuntime;
13
+ export declare const registerServerReference: typeof disabledRscRuntime;
14
+ export declare const renderToReadableStream: typeof disabledRscRuntime;
15
+ export declare const setServerActionBoundArgsEncryption: typeof disabledRscRuntime;
@@ -0,0 +1,17 @@
1
+ import { disabledRscRuntime } from './rscDisabledRuntimeError.js';
2
+ export declare const createServerEntry: typeof disabledRscRuntime;
3
+ export declare const createTemporaryReferenceSet: typeof disabledRscRuntime;
4
+ export declare const decodeAction: typeof disabledRscRuntime;
5
+ export declare const decodeFormState: typeof disabledRscRuntime;
6
+ export declare const decodeReply: typeof disabledRscRuntime;
7
+ export declare const decodeReplyFromAsyncIterable: typeof disabledRscRuntime;
8
+ export declare const decodeReplyFromBusboy: typeof disabledRscRuntime;
9
+ export declare const decryptServerActionBoundArgs: typeof disabledRscRuntime;
10
+ export declare const encryptServerActionBoundArgs: typeof disabledRscRuntime;
11
+ export declare const ensureServerActions: typeof disabledRscRuntime;
12
+ export declare const loadServerAction: typeof disabledRscRuntime;
13
+ export declare const registerClientReference: typeof disabledRscRuntime;
14
+ export declare const registerServerReference: typeof disabledRscRuntime;
15
+ export declare const renderToPipeableStream: typeof disabledRscRuntime;
16
+ export declare const renderToReadableStream: typeof disabledRscRuntime;
17
+ export declare const setServerActionBoundArgsEncryption: typeof disabledRscRuntime;
@@ -0,0 +1,30 @@
1
+ interface ProjectionContext {
2
+ isBrowser?: boolean;
3
+ ssrContext?: {
4
+ request: {
5
+ url?: unknown;
6
+ userAgent?: unknown;
7
+ cookie?: unknown;
8
+ pathname?: unknown;
9
+ query?: object;
10
+ params?: object;
11
+ headers?: object;
12
+ host?: unknown;
13
+ referer?: unknown;
14
+ };
15
+ response: {
16
+ locals?: unknown;
17
+ };
18
+ };
19
+ }
20
+ export declare function projectRuntimeContext<InternalContext extends ProjectionContext, PublicContext extends ProjectionContext>(projection: {
21
+ internalContext: InternalContext;
22
+ publicContext: PublicContext;
23
+ }, options: {
24
+ context: InternalContext;
25
+ isRsc: boolean;
26
+ }): {
27
+ internalContext: InternalContext;
28
+ publicContext: PublicContext;
29
+ };
30
+ export {};
@@ -0,0 +1,122 @@
1
+ export type BffRuntimeFramework = 'hono' | 'effect';
2
+ /** Fork BFF options, independent of any native server config interface. */
3
+ export interface BffRuntimeUserConfig {
4
+ runtimeFramework?: BffRuntimeFramework;
5
+ effect?: BffEffectUserConfig;
6
+ crossProjectPolicy?: BffCrossProjectPolicyUserConfig;
7
+ }
8
+ export interface BffCrossProjectPolicyUserConfig {
9
+ /**
10
+ * Enable cross-project envelope and operation-context policy checks.
11
+ *
12
+ * @default false
13
+ */
14
+ enabled?: boolean;
15
+ /**
16
+ * Require cross-project envelope header when policy is enabled.
17
+ *
18
+ * @default true
19
+ */
20
+ requireEnvelope?: boolean;
21
+ /**
22
+ * Require operation-context header when policy is enabled.
23
+ *
24
+ * @default true
25
+ */
26
+ requireOperationContext?: boolean;
27
+ /**
28
+ * Require operation-context detail header carrying schema/version metadata.
29
+ *
30
+ * @default true
31
+ */
32
+ requireOperationContextDetails?: boolean;
33
+ /**
34
+ * Require operation schema hash in operation-context details.
35
+ *
36
+ * @default true
37
+ */
38
+ requireOperationSchemaHash?: boolean;
39
+ /**
40
+ * Require operation version in operation-context details.
41
+ *
42
+ * @default true
43
+ */
44
+ requireOperationVersion?: boolean;
45
+ /**
46
+ * Optional allowlist of producer namespaces derived from requestId.
47
+ */
48
+ allowedNamespaces?: string[];
49
+ /**
50
+ * Optional hook deriving a verified producer identity (namespace) from
51
+ * request headers, e.g. an mTLS subject or gateway-verified JWT claim.
52
+ * When provided, namespace checks bind to this verified value instead of
53
+ * the client-asserted requestId namespace; returning `undefined` denies
54
+ * the request. Without it the namespace checks are advisory only.
55
+ */
56
+ verifyProducerIdentity?: (headers: Record<string, unknown>) => string | undefined;
57
+ /**
58
+ * Optional operation-contract map keyed by:
59
+ * - `${METHOD}:${routePath}`
60
+ * - `operation:${requestId}:${operationId}`
61
+ */
62
+ expectedOperationContracts?: Record<string, {
63
+ schemaHash?: string;
64
+ operationVersion?: number;
65
+ }>;
66
+ /**
67
+ * Allow operations missing from expectedOperationContracts.
68
+ *
69
+ * @default false
70
+ */
71
+ allowUnknownOperations?: boolean;
72
+ /**
73
+ * HTTP status code used for denied requests.
74
+ *
75
+ * @default 403
76
+ */
77
+ denyStatus?: number;
78
+ }
79
+ export type BffEffectOpenApiUserConfig = boolean | {
80
+ path?: string;
81
+ };
82
+ export interface BffEffectDataPlatformSelectionUserConfig {
83
+ maxDepth?: number;
84
+ maxFields?: number;
85
+ allowedLeafPaths?: string[];
86
+ }
87
+ export interface BffEffectDataPlatformBatchUserConfig {
88
+ enabled?: boolean;
89
+ endpoint?: `/${string}`;
90
+ maxBatchSize?: number;
91
+ maxBatchBytes?: number;
92
+ flushIntervalMs?: number;
93
+ maxConcurrency?: number;
94
+ requestTimeoutMs?: number;
95
+ allowedMethods?: string[];
96
+ }
97
+ export interface BffEffectDataPlatformUserConfig {
98
+ enabled?: boolean;
99
+ requireEnvelope?: boolean;
100
+ envelopeHeader?: string;
101
+ expectedNamespace?: string;
102
+ validateOrigin?: boolean;
103
+ requireTraceContext?: boolean;
104
+ selection?: BffEffectDataPlatformSelectionUserConfig;
105
+ batch?: BffEffectDataPlatformBatchUserConfig;
106
+ }
107
+ export interface BffEffectUserConfig {
108
+ entry?: string;
109
+ /**
110
+ * Enforce Effect-native API/runtime modules instead of raw request handlers.
111
+ *
112
+ * Effect API entries must export a `defineEffectBff(...)`
113
+ * definition or a `{ api, layer }` HttpApi module. Raw `handler` exports,
114
+ * default request handlers, and unbranded custom `createHandler` factories
115
+ * are rejected.
116
+ *
117
+ * @default true
118
+ */
119
+ strictEffectApproach?: true;
120
+ openapi?: BffEffectOpenApiUserConfig;
121
+ dataPlatform?: BffEffectDataPlatformUserConfig;
122
+ }
@@ -0,0 +1,2 @@
1
+ export type * from './bffRuntime.js';
2
+ export type * from './serverTelemetry.js';