@bleedingdev/modern-js-plugin-bff-extensions 3.8.3-ultramodern.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (228) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +29 -0
  3. package/dist/cjs/backend-federation/edge-runtime.js +230 -0
  4. package/dist/cjs/backend-federation/edge.js +80 -0
  5. package/dist/cjs/backend-federation/entry.js +94 -0
  6. package/dist/cjs/backend-federation/identity.js +82 -0
  7. package/dist/cjs/backend-federation/index.js +61 -0
  8. package/dist/cjs/backend-federation/legacy-warning.js +40 -0
  9. package/dist/cjs/backend-federation/load.js +72 -0
  10. package/dist/cjs/backend-federation/node.js +50 -0
  11. package/dist/cjs/backend-federation/plugin.js +63 -0
  12. package/dist/cjs/backend-federation/remotes.js +51 -0
  13. package/dist/cjs/backend-federation/runtime.js +128 -0
  14. package/dist/cjs/backend-federation/types.js +18 -0
  15. package/dist/cjs/backend-federation/utils.js +48 -0
  16. package/dist/cjs/backend-federation/validate-loaded.js +56 -0
  17. package/dist/cjs/backend-federation-manifest/errors.js +83 -0
  18. package/dist/cjs/backend-federation-manifest/index.js +48 -0
  19. package/dist/cjs/backend-federation-manifest/load.js +173 -0
  20. package/dist/cjs/backend-federation-manifest/metadata.js +101 -0
  21. package/dist/cjs/backend-federation-manifest/node.js +50 -0
  22. package/dist/cjs/backend-federation-manifest/reference.js +132 -0
  23. package/dist/cjs/backend-federation-manifest/remote.js +81 -0
  24. package/dist/cjs/backend-federation-manifest/types.js +18 -0
  25. package/dist/cjs/backend-federation-manifest/validation.js +110 -0
  26. package/dist/cjs/client-generator/built-entry.js +84 -0
  27. package/dist/cjs/client-generator/generator.js +73 -0
  28. package/dist/cjs/client-generator/index.js +54 -0
  29. package/dist/cjs/client-generator/paths.js +62 -0
  30. package/dist/cjs/client-generator/rendering.js +253 -0
  31. package/dist/cjs/client-generator/runtime.js +68 -0
  32. package/dist/cjs/client-generator/types.js +18 -0
  33. package/dist/cjs/cross-project-generation/index.js +40 -0
  34. package/dist/cjs/cross-project-generation/render.js +53 -0
  35. package/dist/cjs/cross-project-policy/evaluation.js +75 -0
  36. package/dist/cjs/cross-project-policy/index.js +40 -0
  37. package/dist/cjs/cross-project-policy/node.js +76 -0
  38. package/dist/cjs/effect-adapter/cross-project-policy.js +64 -0
  39. package/dist/cjs/effect-adapter/entry.js +98 -0
  40. package/dist/cjs/effect-adapter/error-response.js +75 -0
  41. package/dist/cjs/effect-adapter/index.js +187 -0
  42. package/dist/cjs/effect-source-loader/index.js +51 -0
  43. package/dist/cjs/effect-source-loader/loader.js +341 -0
  44. package/dist/cjs/effect-source-loader/worker-runtime-wrapper.js +97 -0
  45. package/dist/cjs/hono/bind-route-handlers.js +76 -0
  46. package/dist/cjs/hono/cross-project-policy.js +48 -0
  47. package/dist/cjs/hono/index.js +40 -0
  48. package/dist/esm/backend-federation/edge-runtime.mjs +186 -0
  49. package/dist/esm/backend-federation/edge.mjs +21 -0
  50. package/dist/esm/backend-federation/entry.mjs +56 -0
  51. package/dist/esm/backend-federation/identity.mjs +41 -0
  52. package/dist/esm/backend-federation/index.mjs +4 -0
  53. package/dist/esm/backend-federation/legacy-warning.mjs +2 -0
  54. package/dist/esm/backend-federation/load.mjs +34 -0
  55. package/dist/esm/backend-federation/node.mjs +12 -0
  56. package/dist/esm/backend-federation/plugin.mjs +25 -0
  57. package/dist/esm/backend-federation/remotes.mjs +13 -0
  58. package/dist/esm/backend-federation/runtime.mjs +90 -0
  59. package/dist/esm/backend-federation/types.mjs +0 -0
  60. package/dist/esm/backend-federation/utils.mjs +7 -0
  61. package/dist/esm/backend-federation/validate-loaded.mjs +18 -0
  62. package/dist/esm/backend-federation-manifest/errors.mjs +32 -0
  63. package/dist/esm/backend-federation-manifest/index.mjs +3 -0
  64. package/dist/esm/backend-federation-manifest/load.mjs +135 -0
  65. package/dist/esm/backend-federation-manifest/metadata.mjs +42 -0
  66. package/dist/esm/backend-federation-manifest/node.mjs +12 -0
  67. package/dist/esm/backend-federation-manifest/reference.mjs +88 -0
  68. package/dist/esm/backend-federation-manifest/remote.mjs +43 -0
  69. package/dist/esm/backend-federation-manifest/types.mjs +0 -0
  70. package/dist/esm/backend-federation-manifest/validation.mjs +66 -0
  71. package/dist/esm/client-generator/built-entry.mjs +40 -0
  72. package/dist/esm/client-generator/generator.mjs +32 -0
  73. package/dist/esm/client-generator/index.mjs +3 -0
  74. package/dist/esm/client-generator/paths.mjs +24 -0
  75. package/dist/esm/client-generator/rendering.mjs +209 -0
  76. package/dist/esm/client-generator/runtime.mjs +27 -0
  77. package/dist/esm/client-generator/types.mjs +0 -0
  78. package/dist/esm/cross-project-generation/index.mjs +1 -0
  79. package/dist/esm/cross-project-generation/render.mjs +15 -0
  80. package/dist/esm/cross-project-policy/evaluation.mjs +34 -0
  81. package/dist/esm/cross-project-policy/index.mjs +1 -0
  82. package/dist/esm/cross-project-policy/node.mjs +28 -0
  83. package/dist/esm/effect-adapter/cross-project-policy.mjs +26 -0
  84. package/dist/esm/effect-adapter/entry.mjs +50 -0
  85. package/dist/esm/effect-adapter/error-response.mjs +37 -0
  86. package/dist/esm/effect-adapter/index.mjs +139 -0
  87. package/dist/esm/effect-source-loader/index.mjs +3 -0
  88. package/dist/esm/effect-source-loader/loader.mjs +285 -0
  89. package/dist/esm/effect-source-loader/worker-runtime-wrapper.mjs +56 -0
  90. package/dist/esm/hono/bind-route-handlers.mjs +38 -0
  91. package/dist/esm/hono/cross-project-policy.mjs +10 -0
  92. package/dist/esm/hono/index.mjs +1 -0
  93. package/dist/esm-node/backend-federation/edge-runtime.mjs +187 -0
  94. package/dist/esm-node/backend-federation/edge.mjs +22 -0
  95. package/dist/esm-node/backend-federation/entry.mjs +57 -0
  96. package/dist/esm-node/backend-federation/identity.mjs +42 -0
  97. package/dist/esm-node/backend-federation/index.mjs +5 -0
  98. package/dist/esm-node/backend-federation/legacy-warning.mjs +3 -0
  99. package/dist/esm-node/backend-federation/load.mjs +35 -0
  100. package/dist/esm-node/backend-federation/node.mjs +13 -0
  101. package/dist/esm-node/backend-federation/plugin.mjs +26 -0
  102. package/dist/esm-node/backend-federation/remotes.mjs +14 -0
  103. package/dist/esm-node/backend-federation/runtime.mjs +91 -0
  104. package/dist/esm-node/backend-federation/types.mjs +1 -0
  105. package/dist/esm-node/backend-federation/utils.mjs +8 -0
  106. package/dist/esm-node/backend-federation/validate-loaded.mjs +19 -0
  107. package/dist/esm-node/backend-federation-manifest/errors.mjs +33 -0
  108. package/dist/esm-node/backend-federation-manifest/index.mjs +4 -0
  109. package/dist/esm-node/backend-federation-manifest/load.mjs +136 -0
  110. package/dist/esm-node/backend-federation-manifest/metadata.mjs +43 -0
  111. package/dist/esm-node/backend-federation-manifest/node.mjs +13 -0
  112. package/dist/esm-node/backend-federation-manifest/reference.mjs +89 -0
  113. package/dist/esm-node/backend-federation-manifest/remote.mjs +44 -0
  114. package/dist/esm-node/backend-federation-manifest/types.mjs +1 -0
  115. package/dist/esm-node/backend-federation-manifest/validation.mjs +67 -0
  116. package/dist/esm-node/client-generator/built-entry.mjs +41 -0
  117. package/dist/esm-node/client-generator/generator.mjs +33 -0
  118. package/dist/esm-node/client-generator/index.mjs +4 -0
  119. package/dist/esm-node/client-generator/paths.mjs +25 -0
  120. package/dist/esm-node/client-generator/rendering.mjs +210 -0
  121. package/dist/esm-node/client-generator/runtime.mjs +29 -0
  122. package/dist/esm-node/client-generator/types.mjs +1 -0
  123. package/dist/esm-node/cross-project-generation/index.mjs +2 -0
  124. package/dist/esm-node/cross-project-generation/render.mjs +16 -0
  125. package/dist/esm-node/cross-project-policy/evaluation.mjs +35 -0
  126. package/dist/esm-node/cross-project-policy/index.mjs +2 -0
  127. package/dist/esm-node/cross-project-policy/node.mjs +29 -0
  128. package/dist/esm-node/effect-adapter/cross-project-policy.mjs +27 -0
  129. package/dist/esm-node/effect-adapter/entry.mjs +51 -0
  130. package/dist/esm-node/effect-adapter/error-response.mjs +38 -0
  131. package/dist/esm-node/effect-adapter/index.mjs +140 -0
  132. package/dist/esm-node/effect-source-loader/index.mjs +4 -0
  133. package/dist/esm-node/effect-source-loader/loader.mjs +286 -0
  134. package/dist/esm-node/effect-source-loader/worker-runtime-wrapper.mjs +57 -0
  135. package/dist/esm-node/hono/bind-route-handlers.mjs +39 -0
  136. package/dist/esm-node/hono/cross-project-policy.mjs +11 -0
  137. package/dist/esm-node/hono/index.mjs +2 -0
  138. package/dist/types/backend-federation/edge-runtime.d.ts +46 -0
  139. package/dist/types/backend-federation/edge.d.ts +28 -0
  140. package/dist/types/backend-federation/entry.d.ts +2 -0
  141. package/dist/types/backend-federation/identity.d.ts +30 -0
  142. package/dist/types/backend-federation/index.d.ts +6 -0
  143. package/dist/types/backend-federation/legacy-warning.d.ts +1 -0
  144. package/dist/types/backend-federation/load.d.ts +13 -0
  145. package/dist/types/backend-federation/node.d.ts +4 -0
  146. package/dist/types/backend-federation/plugin.d.ts +3 -0
  147. package/dist/types/backend-federation/remotes.d.ts +2 -0
  148. package/dist/types/backend-federation/runtime.d.ts +3 -0
  149. package/dist/types/backend-federation/types.d.ts +76 -0
  150. package/dist/types/backend-federation/utils.d.ts +2 -0
  151. package/dist/types/backend-federation/validate-loaded.d.ts +8 -0
  152. package/dist/types/backend-federation-manifest/errors.d.ts +11 -0
  153. package/dist/types/backend-federation-manifest/index.d.ts +5 -0
  154. package/dist/types/backend-federation-manifest/load.d.ts +3 -0
  155. package/dist/types/backend-federation-manifest/metadata.d.ts +18 -0
  156. package/dist/types/backend-federation-manifest/node.d.ts +3 -0
  157. package/dist/types/backend-federation-manifest/reference.d.ts +4 -0
  158. package/dist/types/backend-federation-manifest/remote.d.ts +3 -0
  159. package/dist/types/backend-federation-manifest/types.d.ts +49 -0
  160. package/dist/types/backend-federation-manifest/validation.d.ts +5 -0
  161. package/dist/types/client-generator/built-entry.d.ts +16 -0
  162. package/dist/types/client-generator/generator.d.ts +3 -0
  163. package/dist/types/client-generator/index.d.ts +4 -0
  164. package/dist/types/client-generator/paths.d.ts +5 -0
  165. package/dist/types/client-generator/rendering.d.ts +24 -0
  166. package/dist/types/client-generator/runtime.d.ts +12 -0
  167. package/dist/types/client-generator/types.d.ts +33 -0
  168. package/dist/types/cross-project-generation/index.d.ts +1 -0
  169. package/dist/types/cross-project-generation/render.d.ts +1 -0
  170. package/dist/types/cross-project-policy/evaluation.d.ts +4 -0
  171. package/dist/types/cross-project-policy/index.d.ts +1 -0
  172. package/dist/types/cross-project-policy/node.d.ts +4 -0
  173. package/dist/types/effect-adapter/cross-project-policy.d.ts +4 -0
  174. package/dist/types/effect-adapter/entry.d.ts +2 -0
  175. package/dist/types/effect-adapter/error-response.d.ts +2 -0
  176. package/dist/types/effect-adapter/index.d.ts +19 -0
  177. package/dist/types/effect-source-loader/index.d.ts +3 -0
  178. package/dist/types/effect-source-loader/loader.d.ts +17 -0
  179. package/dist/types/effect-source-loader/worker-runtime-wrapper.d.ts +25 -0
  180. package/dist/types/hono/bind-route-handlers.d.ts +10 -0
  181. package/dist/types/hono/cross-project-policy.d.ts +3 -0
  182. package/dist/types/hono/index.d.ts +1 -0
  183. package/package.json +213 -0
  184. package/src/backend-federation/edge-runtime.ts +258 -0
  185. package/src/backend-federation/edge.ts +128 -0
  186. package/src/backend-federation/entry.ts +125 -0
  187. package/src/backend-federation/identity.ts +97 -0
  188. package/src/backend-federation/index.ts +30 -0
  189. package/src/backend-federation/legacy-warning.ts +2 -0
  190. package/src/backend-federation/load.ts +102 -0
  191. package/src/backend-federation/node.ts +33 -0
  192. package/src/backend-federation/plugin.ts +35 -0
  193. package/src/backend-federation/remotes.ts +17 -0
  194. package/src/backend-federation/runtime.ts +99 -0
  195. package/src/backend-federation/types.ts +103 -0
  196. package/src/backend-federation/utils.ts +7 -0
  197. package/src/backend-federation/validate-loaded.ts +72 -0
  198. package/src/backend-federation-manifest/errors.ts +85 -0
  199. package/src/backend-federation-manifest/index.ts +11 -0
  200. package/src/backend-federation-manifest/load.ts +266 -0
  201. package/src/backend-federation-manifest/metadata.ts +73 -0
  202. package/src/backend-federation-manifest/node.ts +19 -0
  203. package/src/backend-federation-manifest/reference.ts +240 -0
  204. package/src/backend-federation-manifest/remote.ts +102 -0
  205. package/src/backend-federation-manifest/types.ts +73 -0
  206. package/src/backend-federation-manifest/validation.ts +255 -0
  207. package/src/client-generator/built-entry.ts +70 -0
  208. package/src/client-generator/generator.ts +52 -0
  209. package/src/client-generator/index.ts +10 -0
  210. package/src/client-generator/paths.ts +40 -0
  211. package/src/client-generator/rendering.ts +307 -0
  212. package/src/client-generator/runtime.ts +69 -0
  213. package/src/client-generator/types.ts +35 -0
  214. package/src/cross-project-generation/index.ts +1 -0
  215. package/src/cross-project-generation/render.ts +14 -0
  216. package/src/cross-project-policy/evaluation.ts +70 -0
  217. package/src/cross-project-policy/index.ts +1 -0
  218. package/src/cross-project-policy/node.ts +63 -0
  219. package/src/effect-adapter/cross-project-policy.ts +63 -0
  220. package/src/effect-adapter/entry.ts +95 -0
  221. package/src/effect-adapter/error-response.ts +68 -0
  222. package/src/effect-adapter/index.ts +246 -0
  223. package/src/effect-source-loader/index.ts +6 -0
  224. package/src/effect-source-loader/loader.ts +397 -0
  225. package/src/effect-source-loader/worker-runtime-wrapper.ts +90 -0
  226. package/src/hono/bind-route-handlers.ts +62 -0
  227. package/src/hono/cross-project-policy.ts +26 -0
  228. package/src/hono/index.ts +4 -0
@@ -0,0 +1,13 @@
1
+ import type { BackendFederatedEffectApiModule, BackendFederationIdentityLoadOptions, BackendFederationLoadOptions } from './types';
2
+ /**
3
+ * Load a federated Effect API with mandatory delivery-unit identity
4
+ * validation (MV-G23): the loaded expose's compatibility metadata must match
5
+ * `expected.unitId` + `expected.buildMarker`.
6
+ */
7
+ export declare function loadBackendFederatedEffectApi(options: BackendFederationIdentityLoadOptions): Promise<BackendFederatedEffectApiModule>;
8
+ /**
9
+ * @deprecated Pass `expected` (delivery-unit `unitId` + `buildMarker`).
10
+ * Loads without an expected identity cannot be validated against a resolved
11
+ * delivery-unit record and emit a runtime warning.
12
+ */
13
+ export declare function loadBackendFederatedEffectApi(options: BackendFederationLoadOptions): Promise<BackendFederatedEffectApiModule>;
@@ -0,0 +1,4 @@
1
+ import type { BackendFederatedEffectApiModule, BackendFederationIdentityLoadOptions, BackendFederationLoadOptions } from './types';
2
+ export declare function loadBackendFederatedEffectApi(options: BackendFederationIdentityLoadOptions): Promise<BackendFederatedEffectApiModule>;
3
+ /** @deprecated Pass `expected` delivery-unit identity. */
4
+ export declare function loadBackendFederatedEffectApi(options: BackendFederationLoadOptions): Promise<BackendFederatedEffectApiModule>;
@@ -0,0 +1,3 @@
1
+ import type { ModuleFederationRuntimePlugin } from '@module-federation/runtime';
2
+ import type { BackendFederationLoadEntryPluginOptions } from './types';
3
+ export declare function createBackendFederationLoadEntryPlugin(options: BackendFederationLoadEntryPluginOptions): ModuleFederationRuntimePlugin;
@@ -0,0 +1,2 @@
1
+ import type { BackendFederationRuntimeOptions } from './types';
2
+ export declare function collectRemotes(options: BackendFederationRuntimeOptions): import("./types").BackendFederationRemote[];
@@ -0,0 +1,3 @@
1
+ import { ModuleFederation } from '@module-federation/runtime';
2
+ import type { BackendFederationRuntimeOptions } from './types';
3
+ export declare function createBackendFederationRuntime(options: BackendFederationRuntimeOptions): ModuleFederation;
@@ -0,0 +1,76 @@
1
+ import type { EffectApiModule } from '@modern-js/bff-effect/effect';
2
+ import type { BackendFederationRemoteEntryPolicy, BackendFederationRemoteEntryVerification } from '@modern-js/server-runtime-extensions/backend-federation-security';
3
+ import type { BACKEND_FEDERATION_EFFECT_EXPOSE } from '@modern-js/utils/universal';
4
+ import type { ModuleFederation, ModuleFederationRuntimePlugin } from '@module-federation/runtime';
5
+ import type { BackendFederationExpectedIdentity } from './identity';
6
+ export type BackendFederationRemote = {
7
+ name: string;
8
+ entry: string;
9
+ type?: 'commonjs-module' | 'module' | string;
10
+ entryGlobalName?: string;
11
+ shareScope?: string | string[];
12
+ expose?: typeof BACKEND_FEDERATION_EFFECT_EXPOSE;
13
+ verification?: BackendFederationRemoteEntryVerification;
14
+ };
15
+ export type BackendFederationRuntimeOptions = {
16
+ hostName: string;
17
+ remote?: BackendFederationRemote;
18
+ remotes?: BackendFederationRemote[];
19
+ plugins?: ModuleFederationRuntimePlugin[];
20
+ entryPolicy?: BackendFederationRemoteEntryPolicy;
21
+ };
22
+ export type BackendFederationEntryExports = {
23
+ get: (id: string) => (() => Promise<unknown> | unknown) | Promise<() => Promise<unknown> | unknown>;
24
+ init?: (...args: unknown[]) => void | Promise<void>;
25
+ };
26
+ export type BackendFederatedEffectApiModule = EffectApiModule & {
27
+ backendFederationContract?: {
28
+ compatibility?: {
29
+ build?: unknown;
30
+ contractVersion?: unknown;
31
+ nodeAdapterVersion?: unknown;
32
+ packageName?: unknown;
33
+ /**
34
+ * ADR-0019 delivery-unit identity root, generator-emitted alongside
35
+ * manifest's `versionBoundary.deliveryUnit`. Additive/optional.
36
+ */
37
+ unitId?: unknown;
38
+ /** ADR-0019 delivery-unit source revision. Additive/optional. */
39
+ sourceRevision?: unknown;
40
+ };
41
+ name?: unknown;
42
+ role?: unknown;
43
+ runtimeFramework?: unknown;
44
+ strictEffectApproach?: unknown;
45
+ };
46
+ contract?: unknown;
47
+ operationContexts?: unknown;
48
+ runtime?: unknown;
49
+ };
50
+ export type BackendFederationLoadEntryPluginOptions = {
51
+ resolveEntry: (remote: BackendFederationRemote) => BackendFederationEntryExports | undefined | Promise<BackendFederationEntryExports | undefined>;
52
+ };
53
+ export type BackendFederationLoadOptions = BackendFederationRuntimeOptions & {
54
+ runtime?: ModuleFederation;
55
+ remoteName?: string;
56
+ expose?: string;
57
+ };
58
+ /**
59
+ * Identity-aware public load options (MV-G23): the expected delivery-unit
60
+ * `unitId` + `buildMarker` are mandatory and validated against the loaded
61
+ * expose's compatibility metadata.
62
+ */
63
+ export type BackendFederationIdentityLoadOptions = BackendFederationLoadOptions & {
64
+ expected: BackendFederationExpectedIdentity;
65
+ /**
66
+ * Tolerate legacy exposes without identity metadata (mismatching declared
67
+ * values still fail). Prefer leaving this unset: identity-less exposes
68
+ * cannot be validated against a resolved delivery-unit record.
69
+ */
70
+ allowMissingIdentityMetadata?: boolean;
71
+ };
72
+ export type BackendFederationLoadEntryPlugin = ModuleFederationRuntimePlugin & {
73
+ loadEntry?: (args: {
74
+ remoteInfo: BackendFederationRemote;
75
+ }) => BackendFederationEntryExports | undefined | Promise<BackendFederationEntryExports | undefined>;
76
+ };
@@ -0,0 +1,2 @@
1
+ export declare function normalizeExpose(expose: string): string;
2
+ export declare function isRecord(value: unknown): value is Record<string, unknown>;
@@ -0,0 +1,8 @@
1
+ import type { BackendFederationExpectedIdentity } from './identity';
2
+ import type { BackendFederatedEffectApiModule } from './types';
3
+ export declare function validateLoadedBackendFederatedEffectApi(loaded: unknown, options: {
4
+ allowMissingIdentityMetadata?: boolean;
5
+ expected?: BackendFederationExpectedIdentity;
6
+ remoteName: string;
7
+ remoteRequest: string;
8
+ }): BackendFederatedEffectApiModule;
@@ -0,0 +1,11 @@
1
+ export type BackendFederationManifestAdapterErrorCode = 'manifest_unavailable' | 'manifest_invalid' | 'remote_unavailable' | 'strict_effect_required' | 'timeout' | 'version_mismatch';
2
+ export declare const BACKEND_FEDERATION_MANIFEST_ADAPTER_FAILURE_EVENT: 'modernjs:microvertical-server-fallback';
3
+ export declare class BackendFederationManifestAdapterError extends Error {
4
+ code: BackendFederationManifestAdapterErrorCode;
5
+ readonly failureEvent: "modernjs:microvertical-server-fallback";
6
+ details?: Record<string, unknown>;
7
+ constructor(code: BackendFederationManifestAdapterErrorCode, message: string, cause?: unknown, details?: Record<string, unknown>);
8
+ }
9
+ export declare function assertManifestAdapter(condition: unknown, code: BackendFederationManifestAdapterErrorCode, message: string): asserts condition;
10
+ export declare function assertVersionValue(actual: string | undefined, expected: string | undefined, label: string, details?: Record<string, unknown>): void;
11
+ export declare function assertConsistentValue(left: string | undefined, right: string | undefined, label: string, details?: Record<string, unknown>): void;
@@ -0,0 +1,5 @@
1
+ export type { BackendFederationManifestAdapterErrorCode } from './errors';
2
+ export { BackendFederationManifestAdapterError } from './errors';
3
+ export { loadBackendFederationManifest } from './reference';
4
+ export { resolveBackendFederationRemoteFromManifest } from './remote';
5
+ export type { BackendFederationManifest, BackendFederationManifestAdapterFallback, BackendFederationManifestAdapterOptions, BackendFederationManifestFetchResponse, BackendFederationVersionBoundaryExpectation, } from './types';
@@ -0,0 +1,3 @@
1
+ import { type BackendFederatedEffectApiModule } from '../backend-federation';
2
+ import type { BackendFederationManifestAdapterOptions } from './types';
3
+ export declare function loadBackendFederatedEffectApiFromManifest(options: BackendFederationManifestAdapterOptions): Promise<BackendFederatedEffectApiModule>;
@@ -0,0 +1,18 @@
1
+ import type { BackendFederationManifest } from './types';
2
+ export declare function stringValue(value: unknown): string | undefined;
3
+ export declare function isRecord(value: unknown): value is Record<string, unknown>;
4
+ export declare function recordField(value: Record<string, unknown> | undefined, field: string): Record<string, unknown> | undefined;
5
+ export declare function resolveRemoteEntryFromMetadata(manifest: BackendFederationManifest): string | undefined;
6
+ export declare function backendFederationMetadata(manifest: BackendFederationManifest): Record<string, unknown> | undefined;
7
+ export declare function versionBoundaryMetadata(manifest: BackendFederationManifest): Record<string, unknown> | undefined;
8
+ export declare function deliveryUnitMetadata(record: Record<string, unknown> | undefined): Record<string, unknown> | undefined;
9
+ /**
10
+ * Resolves the delivery-unit identity root for a manifest (ADR-0019 §3):
11
+ * prefers `versionBoundary.deliveryUnit`, falls back to the top-level
12
+ * `backendFederation.deliveryUnit` record. Both are additive/optional so
13
+ * legacy manifests without delivery-unit metadata continue to validate.
14
+ */
15
+ export declare function manifestDeliveryUnit(backendFederation: Record<string, unknown> | undefined, boundary: Record<string, unknown> | undefined): {
16
+ boundary: Record<string, unknown> | undefined;
17
+ top: Record<string, unknown> | undefined;
18
+ };
@@ -0,0 +1,3 @@
1
+ import type { BackendFederatedEffectApiModule } from '../backend-federation';
2
+ import type { BackendFederationManifestAdapterOptions } from './types';
3
+ export declare function loadBackendFederatedEffectApiFromManifest(options: BackendFederationManifestAdapterOptions): Promise<BackendFederatedEffectApiModule>;
@@ -0,0 +1,4 @@
1
+ import type { BackendFederationManifest, BackendFederationManifestAdapterOptions } from './types';
2
+ export declare function resolveBackendFederationManifestReference(options: Pick<BackendFederationManifestAdapterOptions, 'env' | 'manifestEnv' | 'manifestPath' | 'manifestUrl'>): string | undefined;
3
+ export declare function withTimeout<T>(promise: Promise<T>, timeoutMs: number | undefined, label: string): Promise<T>;
4
+ export declare function loadBackendFederationManifest(options: Pick<BackendFederationManifestAdapterOptions, 'env' | 'expected' | 'fetch' | 'manifest' | 'manifestEnv' | 'manifestPolicy' | 'manifestPath' | 'manifestUrl' | 'signal' | 'timeoutMs'>): Promise<BackendFederationManifest>;
@@ -0,0 +1,3 @@
1
+ import { type BackendFederationRemote } from '../backend-federation';
2
+ import type { BackendFederationManifest } from './types';
3
+ export declare function resolveBackendFederationRemoteFromManifest(manifest: BackendFederationManifest, remoteOverride?: Partial<BackendFederationRemote>): BackendFederationRemote;
@@ -0,0 +1,49 @@
1
+ import type { BackendFederationRemoteEntryPolicy, BackendFederationResourcePolicy, BackendFederationResourceResponse } from '@modern-js/server-runtime-extensions/backend-federation-security';
2
+ import type { ModuleFederation, ModuleFederationRuntimePlugin } from '@module-federation/runtime';
3
+ import type { BackendFederatedEffectApiModule, BackendFederationRemote } from '../backend-federation';
4
+ import type { BackendFederationManifestAdapterError } from './errors';
5
+ export type BackendFederationManifest = Record<string, unknown>;
6
+ export type BackendFederationVersionBoundaryExpectation = {
7
+ buildVersion?: string;
8
+ /**
9
+ * Delivery-unit build marker (ADR-0019). Semantically the same value as
10
+ * `buildVersion`; treated as an alias. If both are set and disagree the
11
+ * expectation itself is invalid and fails closed before any manifest
12
+ * comparison runs.
13
+ */
14
+ buildMarker?: string;
15
+ contractVersion?: string;
16
+ nodeAdapterVersion?: string;
17
+ packageName?: string;
18
+ remoteName?: string;
19
+ /**
20
+ * Delivery-unit identity root (ADR-0019 §3). When set, the manifest's
21
+ * `backendFederation.versionBoundary.deliveryUnit.unitId` (or the
22
+ * top-level `backendFederation.deliveryUnit.unitId` fallback) must match.
23
+ */
24
+ unitId?: string;
25
+ version?: string;
26
+ };
27
+ export type BackendFederationManifestFetchResponse = BackendFederationResourceResponse;
28
+ export type BackendFederationManifestAdapterFallback = (error: BackendFederationManifestAdapterError, context: {
29
+ manifest?: BackendFederationManifest;
30
+ remote?: BackendFederationRemote;
31
+ }) => BackendFederatedEffectApiModule | Promise<BackendFederatedEffectApiModule>;
32
+ export type BackendFederationManifestAdapterOptions = {
33
+ entryPolicy?: BackendFederationRemoteEntryPolicy;
34
+ env?: Record<string, string | undefined>;
35
+ expected?: BackendFederationVersionBoundaryExpectation;
36
+ fallback?: BackendFederationManifestAdapterFallback;
37
+ fetch?: (url: string, init?: RequestInit) => Promise<BackendFederationManifestFetchResponse>;
38
+ hostName: string;
39
+ manifest?: BackendFederationManifest;
40
+ manifestEnv?: string;
41
+ manifestPolicy?: Omit<BackendFederationResourcePolicy, 'fetch'>;
42
+ manifestPath?: string;
43
+ manifestUrl?: string;
44
+ plugins?: ModuleFederationRuntimePlugin[];
45
+ remote?: Partial<BackendFederationRemote>;
46
+ runtime?: ModuleFederation;
47
+ signal?: AbortSignal;
48
+ timeoutMs?: number;
49
+ };
@@ -0,0 +1,5 @@
1
+ import { type BackendFederatedEffectApiModule, type BackendFederationRemote } from '../backend-federation';
2
+ import type { BackendFederationManifest, BackendFederationVersionBoundaryExpectation } from './types';
3
+ export declare function validateBackendFederationManifest(manifest: BackendFederationManifest, expected?: BackendFederationVersionBoundaryExpectation): void;
4
+ export declare function validateLoadedBackendFederationContract(loaded: BackendFederatedEffectApiModule, manifest: BackendFederationManifest, remote: BackendFederationRemote): void;
5
+ export declare function classifyLoadError(error: unknown): "remote_unavailable" | "strict_effect_required" | "timeout" | "version_mismatch";
@@ -0,0 +1,16 @@
1
+ export declare function resolveBuiltEffectEntry(appDirectory: string, distDirectory: string, sourceEntry: string | undefined): string | undefined;
2
+ export declare function bundleBuiltEffectEntryForNode(options: {
3
+ appDir: string;
4
+ apiDir: string;
5
+ distDir: string;
6
+ effectEntry?: string;
7
+ format: 'cjs' | 'esm';
8
+ }): Promise<void>;
9
+ export declare function resolveEffectEntryPaths(options: {
10
+ appDir: string;
11
+ apiDir: string;
12
+ effectEntry?: string;
13
+ }): {
14
+ sourceEffectEntry: string | undefined;
15
+ relativeEffectEntry: string;
16
+ };
@@ -0,0 +1,3 @@
1
+ import type { EffectClientCodegenOptions, GeneratedEffectClientArtifacts } from './types';
2
+ export declare function generateEffectClient(options: EffectClientCodegenOptions): Promise<GeneratedEffectClientArtifacts | null>;
3
+ export declare function generateEffectClientCode(options: EffectClientCodegenOptions): Promise<string | null>;
@@ -0,0 +1,4 @@
1
+ export { bundleBuiltEffectEntryForNode, resolveEffectEntryPaths, } from './built-entry';
2
+ export { generateEffectClient, generateEffectClientCode } from './generator';
3
+ export { resolveEffectEntryFile } from './paths';
4
+ export type { EffectClientCodegenOptions, GeneratedEffectClientArtifacts, } from './types';
@@ -0,0 +1,5 @@
1
+ export declare function resolveEffectEntryFile(options: {
2
+ appDir: string;
3
+ apiDir: string;
4
+ effectEntry?: string;
5
+ }): string | undefined;
@@ -0,0 +1,24 @@
1
+ import { type OperationContractMap } from '@modern-js/bff-core';
2
+ import { type EffectEndpointMeta } from '@modern-js/bff-effect/effect';
3
+ import type { EffectClientCodegenOptions } from './types';
4
+ export type EffectClientGeneration = {
5
+ config: Record<string, unknown>;
6
+ manifest: {
7
+ endpoints: Array<{
8
+ apiId: string;
9
+ group: string;
10
+ endpoint: string;
11
+ method: string;
12
+ routePath: string;
13
+ schemaHash: string;
14
+ operationVersion: number;
15
+ }>;
16
+ };
17
+ operationContracts: OperationContractMap;
18
+ operationVersion: number;
19
+ requestCreator: string;
20
+ requestId: string;
21
+ };
22
+ export declare function renderEffectClientCode(generation: EffectClientGeneration): string;
23
+ export declare function createEffectClientGeneration(endpoints: EffectEndpointMeta[], options: EffectClientCodegenOptions): EffectClientGeneration;
24
+ export declare function renderEffectClientDeclaration(endpoints?: EffectEndpointMeta[]): string;
@@ -0,0 +1,12 @@
1
+ import { type HttpApiLike, type HttpApiReflect } from '@modern-js/bff-effect/effect';
2
+ type HttpApiRuntime = {
3
+ isHttpApi: (value: unknown) => boolean;
4
+ reflect: HttpApiReflect;
5
+ };
6
+ export declare function getHttpApiRuntime(): Promise<HttpApiRuntime>;
7
+ export declare function loadEffectApi(options: {
8
+ appDir: string;
9
+ resourcePath: string;
10
+ onDependency?: (dependency: string) => void;
11
+ }): Promise<HttpApiLike | null>;
12
+ export {};
@@ -0,0 +1,33 @@
1
+ import type { OperationContractMap } from '@modern-js/bff-core';
2
+ import type { EffectEndpointMeta } from '@modern-js/bff-effect/effect';
3
+ import type { HttpMethodDecider } from '@modern-js/types';
4
+ export type EffectClientCodegenOptions = {
5
+ appDir: string;
6
+ apiDir: string;
7
+ resourcePath: string;
8
+ prefix: string;
9
+ port: number;
10
+ target?: string;
11
+ /** Producer identity used by cross-project clients and server contracts. */
12
+ requestId?: string;
13
+ requestCreator?: string;
14
+ httpMethodDecider?: HttpMethodDecider;
15
+ onDependency?: (dependency: string) => void;
16
+ dataPlatformBatch?: {
17
+ enabled?: boolean;
18
+ endpoint?: string;
19
+ flushIntervalMs?: number;
20
+ maxBatchSize?: number;
21
+ maxBatchBytes?: number;
22
+ requestTimeoutMs?: number;
23
+ allowedMethods?: string[];
24
+ };
25
+ };
26
+ export type GeneratedEffectClientArtifacts = {
27
+ code: string;
28
+ declaration: string;
29
+ endpoints: EffectEndpointMeta[];
30
+ operationContracts: OperationContractMap;
31
+ operationVersion: number;
32
+ requestId: string;
33
+ };
@@ -0,0 +1 @@
1
+ export { renderProducerRuntimeDefaults } from './render';
@@ -0,0 +1 @@
1
+ export declare const renderProducerRuntimeDefaults: (requestIdValue: string) => string;
@@ -0,0 +1,4 @@
1
+ import { type CrossProjectRequestObservation, type NormalizedCrossProjectPolicy } from '@modern-js/bff-core/security/cross-project-policy';
2
+ export type ResolvedCrossProjectPolicy = NormalizedCrossProjectPolicy;
3
+ export declare const checkCrossProjectPolicyResponse: (headers: Record<string, unknown>, policy: ResolvedCrossProjectPolicy | undefined, observedRequest?: CrossProjectRequestObservation) => Response | null;
4
+ export declare const checkCrossProjectPolicyForRequest: (request: Request, policy: ResolvedCrossProjectPolicy | undefined) => Response | null;
@@ -0,0 +1 @@
1
+ export { resolveAdapterCrossProjectPolicy } from './node';
@@ -0,0 +1,4 @@
1
+ import { type OperationContractSource } from '@modern-js/bff-core';
2
+ import type { ServerPluginAPI } from '@modern-js/server-core';
3
+ import type { ResolvedCrossProjectPolicy } from './evaluation';
4
+ export declare const resolveAdapterCrossProjectPolicy: (api: ServerPluginAPI, handlers: OperationContractSource[]) => ResolvedCrossProjectPolicy | undefined;
@@ -0,0 +1,4 @@
1
+ import { type EffectApiModule } from '@modern-js/bff-effect/effect';
2
+ import type { ServerPluginAPI } from '@modern-js/server-core';
3
+ import type { ResolvedCrossProjectPolicy } from '../cross-project-policy/evaluation';
4
+ export declare function resolveEffectAdapterCrossProjectPolicy(api: ServerPluginAPI, prefix: string, mod: EffectApiModule | null): Promise<ResolvedCrossProjectPolicy | undefined>;
@@ -0,0 +1,2 @@
1
+ import type { ServerPluginAPI } from '@modern-js/server-core';
2
+ export declare function resolveEffectAdapterEntryFile(api: ServerPluginAPI): string | undefined;
@@ -0,0 +1,2 @@
1
+ import type { Context, ServerPluginAPI } from '@modern-js/server-core';
2
+ export declare function createEffectAdapterRuntimeErrorResponse(api: ServerPluginAPI, error: unknown, context: Context): Promise<Response>;
@@ -0,0 +1,19 @@
1
+ import type { ServerPluginAPI } from '@modern-js/server-core';
2
+ interface EffectAdapterMiddlewareOptions {
3
+ prefix: string | readonly string[];
4
+ enableHandleWeb?: boolean;
5
+ }
6
+ export declare class EffectAdapter {
7
+ private api;
8
+ private handler;
9
+ private unregisterRuntimeDisposer?;
10
+ private prefix;
11
+ private prefixes;
12
+ private matchingPrefixes;
13
+ private retired;
14
+ constructor(api: ServerPluginAPI);
15
+ registerMiddleware: (options: EffectAdapterMiddlewareOptions) => Promise<void>;
16
+ dispose: () => Promise<void>;
17
+ private loadHandler;
18
+ }
19
+ export {};
@@ -0,0 +1,3 @@
1
+ export { resolveEffectEntryFile } from '../client-generator/paths';
2
+ export { bundleEffectEntryForNode } from './loader';
3
+ export { generateEffectClientCode, generateEffectWorkerRuntimeWrapper, } from './worker-runtime-wrapper';
@@ -0,0 +1,17 @@
1
+ export type EffectSourceLoaderOptions = {
2
+ resourcePath: string;
3
+ appDir?: string;
4
+ onDependency?: (dependency: string) => void;
5
+ };
6
+ export declare function bundleEffectEntryForNode(options: {
7
+ appDir: string;
8
+ entryPath: string;
9
+ format: 'cjs' | 'esm';
10
+ }): Promise<void>;
11
+ /** Loads a production artifact without changing its native Node boundary. */
12
+ export declare function loadEffectBuiltModule(resourcePath: string): Promise<unknown>;
13
+ /**
14
+ * Loads an Effect source entry as native ESM while reporting its complete
15
+ * local source graph to the framework watcher.
16
+ */
17
+ export declare function loadEffectSourceModule(options: EffectSourceLoaderOptions): Promise<unknown>;
@@ -0,0 +1,25 @@
1
+ import type { HttpMethodDecider } from '@modern-js/types';
2
+ import type { EffectClientCodegenOptions } from '../client-generator/types';
3
+ type EffectWorkerRuntimeGenerationOptions = {
4
+ apiDir: string;
5
+ appDir: string;
6
+ effectDataPlatformBatch?: {
7
+ allowedMethods?: string[];
8
+ enabled?: boolean;
9
+ endpoint?: string;
10
+ flushIntervalMs?: number;
11
+ maxBatchBytes?: number;
12
+ maxBatchSize?: number;
13
+ requestTimeoutMs?: number;
14
+ };
15
+ httpMethodDecider?: HttpMethodDecider;
16
+ port: number;
17
+ prefix: string;
18
+ requestCreator?: string;
19
+ requestId?: string;
20
+ };
21
+ export declare function generateEffectWorkerRuntimeWrapper(loader: {
22
+ addDependency: (dependency: string) => void;
23
+ }, options: EffectWorkerRuntimeGenerationOptions, resourcePath: string): Promise<string>;
24
+ export declare function generateEffectClientCode(options: EffectClientCodegenOptions): Promise<string | null>;
25
+ export {};
@@ -0,0 +1,10 @@
1
+ import type { Context, MiddlewareHandler } from '@modern-js/server-core';
2
+ import type { ResolvedCrossProjectPolicy } from '../cross-project-policy/evaluation';
3
+ export interface BindHonoRouteHandlersOptions {
4
+ handler: MiddlewareHandler | MiddlewareHandler[];
5
+ policy?: ResolvedCrossProjectPolicy;
6
+ routePath: string;
7
+ onError?: (error: Error, context: Context) => unknown | Promise<unknown>;
8
+ reportError?: (error: unknown) => void;
9
+ }
10
+ export declare const bindHonoRouteHandlers: ({ handler, policy, routePath, onError, reportError, }: BindHonoRouteHandlersOptions) => MiddlewareHandler | MiddlewareHandler[];
@@ -0,0 +1,3 @@
1
+ import type { MiddlewareHandler } from '@modern-js/server-core';
2
+ import { type ResolvedCrossProjectPolicy } from '../cross-project-policy/evaluation';
3
+ export declare const createHonoCrossProjectPolicyMiddleware: (policy: ResolvedCrossProjectPolicy, routePath: string) => MiddlewareHandler;
@@ -0,0 +1 @@
1
+ export { type BindHonoRouteHandlersOptions, bindHonoRouteHandlers, } from './bind-route-handlers';