@bleedingdev/modern-js-plugin-bff-extensions 3.9.0-ultramodern.2 → 3.9.0-ultramodern.20

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 (216) hide show
  1. package/README.md +25 -5
  2. package/dist/cjs/backend-federation/edge-runtime.js +3 -15
  3. package/dist/cjs/backend-federation/edge.js +9 -10
  4. package/dist/cjs/backend-federation/identity.js +26 -31
  5. package/dist/cjs/backend-federation/index.js +5 -5
  6. package/dist/cjs/backend-federation/integrity-plugin.js +112 -0
  7. package/dist/cjs/backend-federation/load.js +3 -13
  8. package/dist/cjs/backend-federation/node-shared.js +85 -0
  9. package/dist/cjs/backend-federation/node.js +6 -1
  10. package/dist/cjs/backend-federation/plugin.js +40 -21
  11. package/dist/cjs/backend-federation/runtime.js +16 -84
  12. package/dist/cjs/backend-federation/validate-loaded.js +2 -4
  13. package/dist/cjs/backend-federation-manifest/load.js +40 -12
  14. package/dist/cjs/backend-federation-manifest/metadata.js +3 -3
  15. package/dist/cjs/backend-federation-manifest/node.js +3 -1
  16. package/dist/cjs/backend-federation-manifest/remote.js +3 -9
  17. package/dist/cjs/backend-federation-manifest/validation.js +16 -12
  18. package/dist/cjs/cross-project-policy/evaluation.js +3 -3
  19. package/dist/cjs/cross-project-policy/node.js +11 -30
  20. package/dist/cjs/{backend-federation/legacy-warning.js → cross-project-policy/producer-runtime.js} +23 -5
  21. package/dist/cjs/{effect-adapter → effect-server}/cross-project-policy.js +5 -5
  22. package/dist/cjs/effect-server/entry.js +63 -0
  23. package/dist/cjs/{effect-adapter → effect-server}/error-response.js +4 -4
  24. package/dist/cjs/effect-server/index.js +199 -0
  25. package/dist/cjs/{client-generator → effect-source-loader}/built-entry.js +5 -6
  26. package/dist/cjs/{client-generator/runtime.js → effect-source-loader/http-api-runtime.js} +12 -20
  27. package/dist/cjs/effect-source-loader/index.js +18 -6
  28. package/dist/cjs/effect-source-loader/loader.js +17 -30
  29. package/dist/cjs/effect-source-loader/operation-contracts.js +60 -0
  30. package/dist/cjs/effect-source-loader/paths.js +90 -0
  31. package/dist/cjs/effect-source-loader/rspack-loader.js +73 -0
  32. package/dist/cjs/effect-source-loader/worker-runtime-source.js +71 -0
  33. package/dist/cjs/effect-source-loader/worker-runtime-wrapper.js +7 -50
  34. package/dist/cjs/hono/cross-project-policy.js +2 -1
  35. package/dist/cjs/{client-generator/paths.js → hono/node.js} +14 -25
  36. package/dist/esm/backend-federation/edge-runtime.mjs +2 -11
  37. package/dist/esm/backend-federation/edge.mjs +5 -6
  38. package/dist/esm/backend-federation/identity.mjs +21 -32
  39. package/dist/esm/backend-federation/index.mjs +1 -1
  40. package/dist/esm/backend-federation/integrity-plugin.mjs +68 -0
  41. package/dist/esm/backend-federation/load.mjs +2 -12
  42. package/dist/esm/backend-federation/node-shared.mjs +41 -0
  43. package/dist/esm/backend-federation/node.mjs +4 -2
  44. package/dist/esm/backend-federation/plugin.mjs +37 -18
  45. package/dist/esm/backend-federation/runtime.mjs +16 -84
  46. package/dist/esm/backend-federation/validate-loaded.mjs +2 -4
  47. package/dist/esm/backend-federation-manifest/load.mjs +40 -12
  48. package/dist/esm/backend-federation-manifest/metadata.mjs +1 -1
  49. package/dist/esm/backend-federation-manifest/node.mjs +3 -1
  50. package/dist/esm/backend-federation-manifest/remote.mjs +2 -8
  51. package/dist/esm/backend-federation-manifest/validation.mjs +15 -11
  52. package/dist/esm/cross-project-policy/evaluation.mjs +1 -1
  53. package/dist/esm/cross-project-policy/node.mjs +10 -19
  54. package/dist/esm/cross-project-policy/producer-runtime.mjs +20 -0
  55. package/dist/esm/{effect-adapter → effect-server}/cross-project-policy.mjs +3 -3
  56. package/dist/esm/effect-server/entry.mjs +15 -0
  57. package/dist/esm/{effect-adapter → effect-server}/error-response.mjs +2 -2
  58. package/dist/esm/effect-server/index.mjs +151 -0
  59. package/dist/esm/{client-generator → effect-source-loader}/built-entry.mjs +6 -7
  60. package/dist/esm/effect-source-loader/http-api-runtime.mjs +19 -0
  61. package/dist/esm/effect-source-loader/index.mjs +5 -2
  62. package/dist/esm/effect-source-loader/loader.mjs +17 -30
  63. package/dist/esm/effect-source-loader/operation-contracts.mjs +22 -0
  64. package/dist/esm/effect-source-loader/paths.mjs +43 -0
  65. package/dist/esm/effect-source-loader/rspack-loader.mjs +35 -0
  66. package/dist/esm/effect-source-loader/worker-runtime-source.mjs +23 -0
  67. package/dist/esm/effect-source-loader/worker-runtime-wrapper.mjs +5 -45
  68. package/dist/esm/hono/cross-project-policy.mjs +2 -1
  69. package/dist/esm-node/backend-federation/edge-runtime.mjs +2 -11
  70. package/dist/esm-node/backend-federation/edge.mjs +5 -6
  71. package/dist/esm-node/backend-federation/identity.mjs +21 -32
  72. package/dist/esm-node/backend-federation/index.mjs +1 -1
  73. package/dist/esm-node/backend-federation/integrity-plugin.mjs +69 -0
  74. package/dist/esm-node/backend-federation/load.mjs +2 -12
  75. package/dist/esm-node/backend-federation/node-shared.mjs +42 -0
  76. package/dist/esm-node/backend-federation/node.mjs +4 -2
  77. package/dist/esm-node/backend-federation/plugin.mjs +37 -18
  78. package/dist/esm-node/backend-federation/runtime.mjs +16 -84
  79. package/dist/esm-node/backend-federation/validate-loaded.mjs +2 -4
  80. package/dist/esm-node/backend-federation-manifest/load.mjs +40 -12
  81. package/dist/esm-node/backend-federation-manifest/metadata.mjs +1 -1
  82. package/dist/esm-node/backend-federation-manifest/node.mjs +3 -1
  83. package/dist/esm-node/backend-federation-manifest/remote.mjs +2 -8
  84. package/dist/esm-node/backend-federation-manifest/validation.mjs +15 -11
  85. package/dist/esm-node/cross-project-policy/evaluation.mjs +1 -1
  86. package/dist/esm-node/cross-project-policy/node.mjs +10 -19
  87. package/dist/esm-node/cross-project-policy/producer-runtime.mjs +21 -0
  88. package/dist/esm-node/{effect-adapter → effect-server}/cross-project-policy.mjs +3 -3
  89. package/dist/esm-node/effect-server/entry.mjs +16 -0
  90. package/dist/esm-node/{effect-adapter → effect-server}/error-response.mjs +2 -2
  91. package/dist/esm-node/effect-server/index.mjs +152 -0
  92. package/dist/esm-node/{client-generator → effect-source-loader}/built-entry.mjs +6 -7
  93. package/dist/esm-node/effect-source-loader/http-api-runtime.mjs +20 -0
  94. package/dist/esm-node/effect-source-loader/index.mjs +5 -2
  95. package/dist/esm-node/effect-source-loader/loader.mjs +17 -30
  96. package/dist/esm-node/effect-source-loader/operation-contracts.mjs +23 -0
  97. package/dist/esm-node/effect-source-loader/paths.mjs +44 -0
  98. package/dist/esm-node/effect-source-loader/rspack-loader.mjs +37 -0
  99. package/dist/esm-node/effect-source-loader/worker-runtime-source.mjs +24 -0
  100. package/dist/esm-node/effect-source-loader/worker-runtime-wrapper.mjs +5 -45
  101. package/dist/esm-node/hono/cross-project-policy.mjs +2 -1
  102. package/dist/esm-node/hono/node.mjs +14 -0
  103. package/dist/types/backend-federation/edge-runtime.d.ts +0 -5
  104. package/dist/types/backend-federation/edge.d.ts +5 -5
  105. package/dist/types/backend-federation/identity.d.ts +4 -16
  106. package/dist/types/backend-federation/index.d.ts +1 -1
  107. package/dist/types/backend-federation/integrity-plugin.d.ts +13 -0
  108. package/dist/types/backend-federation/load.d.ts +1 -7
  109. package/dist/types/backend-federation/node-shared.d.ts +20 -0
  110. package/dist/types/backend-federation/node.d.ts +4 -3
  111. package/dist/types/backend-federation/plugin.d.ts +4 -0
  112. package/dist/types/backend-federation/types.d.ts +3 -14
  113. package/dist/types/backend-federation/validate-loaded.d.ts +1 -2
  114. package/dist/types/backend-federation-manifest/metadata.d.ts +0 -6
  115. package/dist/types/backend-federation-manifest/types.d.ts +2 -1
  116. package/dist/types/cross-project-policy/evaluation.d.ts +1 -1
  117. package/dist/types/cross-project-policy/node.d.ts +3 -2
  118. package/dist/types/cross-project-policy/producer-runtime.d.ts +20 -0
  119. package/dist/types/effect-server/cross-project-policy.d.ts +5 -0
  120. package/dist/types/effect-server/entry.d.ts +3 -0
  121. package/dist/types/effect-server/error-response.d.ts +2 -0
  122. package/dist/types/effect-server/index.d.ts +4 -0
  123. package/dist/types/effect-source-loader/index.d.ts +5 -2
  124. package/dist/types/effect-source-loader/operation-contracts.d.ts +8 -0
  125. package/dist/types/effect-source-loader/paths.d.ts +23 -0
  126. package/dist/types/effect-source-loader/rspack-loader.d.ts +9 -0
  127. package/dist/types/effect-source-loader/worker-runtime-source.d.ts +4 -0
  128. package/dist/types/effect-source-loader/worker-runtime-wrapper.d.ts +4 -22
  129. package/dist/types/hono/node.d.ts +4 -0
  130. package/package.json +64 -36
  131. package/src/backend-federation/edge-runtime.ts +2 -13
  132. package/src/backend-federation/edge.ts +16 -21
  133. package/src/backend-federation/identity.ts +39 -65
  134. package/src/backend-federation/index.ts +1 -1
  135. package/src/backend-federation/integrity-plugin.ts +157 -0
  136. package/src/backend-federation/load.ts +7 -35
  137. package/src/backend-federation/node-shared.ts +76 -0
  138. package/src/backend-federation/node.ts +7 -14
  139. package/src/backend-federation/plugin.ts +73 -25
  140. package/src/backend-federation/runtime.ts +16 -90
  141. package/src/backend-federation/types.ts +3 -18
  142. package/src/backend-federation/validate-loaded.ts +2 -7
  143. package/src/backend-federation-manifest/load.ts +93 -38
  144. package/src/backend-federation-manifest/metadata.ts +1 -7
  145. package/src/backend-federation-manifest/node.ts +3 -2
  146. package/src/backend-federation-manifest/remote.ts +1 -7
  147. package/src/backend-federation-manifest/types.ts +2 -0
  148. package/src/backend-federation-manifest/validation.ts +29 -39
  149. package/src/cross-project-policy/evaluation.ts +1 -1
  150. package/src/cross-project-policy/node.ts +10 -41
  151. package/src/cross-project-policy/producer-runtime.ts +43 -0
  152. package/src/{effect-adapter → effect-server}/cross-project-policy.ts +8 -2
  153. package/src/effect-server/entry.ts +18 -0
  154. package/src/{effect-adapter → effect-server}/error-response.ts +1 -1
  155. package/src/effect-server/index.ts +242 -0
  156. package/src/{client-generator → effect-source-loader}/built-entry.ts +12 -12
  157. package/src/effect-source-loader/http-api-runtime.ts +39 -0
  158. package/src/effect-source-loader/index.ts +8 -5
  159. package/src/effect-source-loader/loader.ts +47 -52
  160. package/src/effect-source-loader/operation-contracts.ts +38 -0
  161. package/src/effect-source-loader/paths.ts +74 -0
  162. package/src/effect-source-loader/rspack-loader.ts +71 -0
  163. package/src/effect-source-loader/worker-runtime-source.ts +34 -0
  164. package/src/effect-source-loader/worker-runtime-wrapper.ts +5 -75
  165. package/src/hono/cross-project-policy.ts +2 -1
  166. package/src/hono/node.ts +24 -0
  167. package/dist/cjs/backend-federation/entry.js +0 -94
  168. package/dist/cjs/client-generator/generator.js +0 -73
  169. package/dist/cjs/client-generator/index.js +0 -54
  170. package/dist/cjs/client-generator/rendering.js +0 -253
  171. package/dist/cjs/client-generator/types.js +0 -18
  172. package/dist/cjs/effect-adapter/entry.js +0 -98
  173. package/dist/cjs/effect-adapter/index.js +0 -187
  174. package/dist/esm/backend-federation/entry.mjs +0 -56
  175. package/dist/esm/backend-federation/legacy-warning.mjs +0 -2
  176. package/dist/esm/client-generator/generator.mjs +0 -32
  177. package/dist/esm/client-generator/index.mjs +0 -3
  178. package/dist/esm/client-generator/paths.mjs +0 -24
  179. package/dist/esm/client-generator/rendering.mjs +0 -209
  180. package/dist/esm/client-generator/runtime.mjs +0 -27
  181. package/dist/esm/client-generator/types.mjs +0 -0
  182. package/dist/esm/effect-adapter/entry.mjs +0 -50
  183. package/dist/esm/effect-adapter/index.mjs +0 -139
  184. package/dist/esm-node/backend-federation/entry.mjs +0 -57
  185. package/dist/esm-node/backend-federation/legacy-warning.mjs +0 -3
  186. package/dist/esm-node/client-generator/generator.mjs +0 -33
  187. package/dist/esm-node/client-generator/index.mjs +0 -4
  188. package/dist/esm-node/client-generator/paths.mjs +0 -25
  189. package/dist/esm-node/client-generator/rendering.mjs +0 -210
  190. package/dist/esm-node/client-generator/runtime.mjs +0 -29
  191. package/dist/esm-node/client-generator/types.mjs +0 -1
  192. package/dist/esm-node/effect-adapter/entry.mjs +0 -51
  193. package/dist/esm-node/effect-adapter/index.mjs +0 -140
  194. package/dist/types/backend-federation/entry.d.ts +0 -2
  195. package/dist/types/backend-federation/legacy-warning.d.ts +0 -1
  196. package/dist/types/client-generator/generator.d.ts +0 -3
  197. package/dist/types/client-generator/index.d.ts +0 -4
  198. package/dist/types/client-generator/paths.d.ts +0 -5
  199. package/dist/types/client-generator/rendering.d.ts +0 -24
  200. package/dist/types/client-generator/types.d.ts +0 -33
  201. package/dist/types/effect-adapter/cross-project-policy.d.ts +0 -4
  202. package/dist/types/effect-adapter/entry.d.ts +0 -2
  203. package/dist/types/effect-adapter/error-response.d.ts +0 -2
  204. package/dist/types/effect-adapter/index.d.ts +0 -19
  205. package/src/backend-federation/entry.ts +0 -125
  206. package/src/backend-federation/legacy-warning.ts +0 -2
  207. package/src/client-generator/generator.ts +0 -52
  208. package/src/client-generator/index.ts +0 -10
  209. package/src/client-generator/paths.ts +0 -40
  210. package/src/client-generator/rendering.ts +0 -307
  211. package/src/client-generator/runtime.ts +0 -69
  212. package/src/client-generator/types.ts +0 -35
  213. package/src/effect-adapter/entry.ts +0 -95
  214. package/src/effect-adapter/index.ts +0 -246
  215. /package/dist/types/{client-generator → effect-source-loader}/built-entry.d.ts +0 -0
  216. /package/dist/types/{client-generator/runtime.d.ts → effect-source-loader/http-api-runtime.d.ts} +0 -0
@@ -31,93 +31,25 @@ __webpack_require__.d(__webpack_exports__, {
31
31
  createBackendFederationRuntime: ()=>createBackendFederationRuntime
32
32
  });
33
33
  const runtime_namespaceObject = require("@module-federation/runtime");
34
- const external_entry_js_namespaceObject = require("./entry.js");
35
- const external_plugin_js_namespaceObject = require("./plugin.js");
34
+ const external_integrity_plugin_js_namespaceObject = require("./integrity-plugin.js");
36
35
  const external_remotes_js_namespaceObject = require("./remotes.js");
37
- function _check_private_redeclaration(obj, privateCollection) {
38
- if (privateCollection.has(obj)) throw new TypeError("Cannot initialize the same private elements twice on an object");
39
- }
40
- function _class_apply_descriptor_get(receiver, descriptor) {
41
- if (descriptor.get) return descriptor.get.call(receiver);
42
- return descriptor.value;
43
- }
44
- function _class_apply_descriptor_set(receiver, descriptor, value) {
45
- if (descriptor.set) descriptor.set.call(receiver, value);
46
- else {
47
- if (!descriptor.writable) throw new TypeError("attempted to set read only private field");
48
- descriptor.value = value;
49
- }
50
- }
51
- function _class_extract_field_descriptor(receiver, privateMap, action) {
52
- if (!privateMap.has(receiver)) throw new TypeError("attempted to " + action + " private field on non-instance");
53
- return privateMap.get(receiver);
54
- }
55
- function _class_private_field_get(receiver, privateMap) {
56
- var descriptor = _class_extract_field_descriptor(receiver, privateMap, "get");
57
- return _class_apply_descriptor_get(receiver, descriptor);
58
- }
59
- function _class_private_field_init(obj, privateMap, value) {
60
- _check_private_redeclaration(obj, privateMap);
61
- privateMap.set(obj, value);
62
- }
63
- function _class_private_field_set(receiver, privateMap, value) {
64
- var descriptor = _class_extract_field_descriptor(receiver, privateMap, "set");
65
- _class_apply_descriptor_set(receiver, descriptor, value);
66
- return value;
67
- }
68
- let nextRuntimeId = 0;
69
- function parseRemoteRequest(request) {
70
- const [remoteName, ...exposeParts] = request.split('/');
71
- if (void 0 === remoteName || 0 === remoteName.length || 0 === exposeParts.length) return;
72
- return remoteName;
73
- }
74
- function createLocalEntryPlugin(options, remotes) {
75
- return (0, external_plugin_js_namespaceObject.createBackendFederationLoadEntryPlugin)({
76
- resolveEntry (resolvedRemote) {
77
- const remote = remotes.find((candidate)=>candidate.name === resolvedRemote.name);
78
- if (void 0 === remote) return;
79
- return {
80
- get (expose) {
81
- return ()=>(0, external_entry_js_namespaceObject.loadBackendFederationExpose)(remote, expose, options);
82
- }
83
- };
84
- }
85
- });
86
- }
87
- function isolateRegisteredRemoteEntries(remotes) {
88
- const runtimeId = nextRuntimeId;
89
- nextRuntimeId += 1;
90
- return remotes.map((remote)=>({
91
- ...remote,
92
- entry: `${remote.entry}#modernjs-backend-runtime-${runtimeId}`
93
- }));
94
- }
95
- var _remoteNames = /*#__PURE__*/ new WeakMap();
96
- class BackendFederationRuntime extends runtime_namespaceObject.ModuleFederation {
97
- loadRemote(request, loadOptions) {
98
- const remoteName = parseRemoteRequest(request);
99
- if (void 0 === remoteName) return Promise.reject(new Error(`[BFF][Effect] Invalid backend federation request ${request}.`));
100
- if (!_class_private_field_get(this, _remoteNames).has(remoteName)) return Promise.reject(new Error(`[BFF][Effect] Missing backend federation remote ${remoteName}.`));
101
- return super.loadRemote(request, loadOptions);
102
- }
103
- constructor(options, remotes){
104
- super({
105
- name: options.hostName,
106
- remotes: isolateRegisteredRemoteEntries(remotes),
107
- shared: {},
108
- plugins: [
109
- createLocalEntryPlugin(options, remotes)
110
- ]
111
- }), _class_private_field_init(this, _remoteNames, {
112
- writable: true,
113
- value: void 0
114
- });
115
- _class_private_field_set(this, _remoteNames, new Set(remotes.map((remote)=>remote.name)));
116
- }
117
- }
118
36
  function createBackendFederationRuntime(options) {
119
37
  const remotes = (0, external_remotes_js_namespaceObject.collectRemotes)(options);
120
- return new BackendFederationRuntime(options, remotes);
38
+ return new runtime_namespaceObject.ModuleFederation({
39
+ name: options.hostName,
40
+ remotes: remotes.map(({ name, entry, type })=>({
41
+ name,
42
+ entry,
43
+ ...type ? {
44
+ type
45
+ } : {}
46
+ })),
47
+ shared: options.shared ?? {},
48
+ plugins: [
49
+ ...options.plugins ?? [],
50
+ (0, external_integrity_plugin_js_namespaceObject.createBackendFederationIntegrityPlugin)(options, remotes)
51
+ ]
52
+ });
121
53
  }
122
54
  exports.createBackendFederationRuntime = __webpack_exports__.createBackendFederationRuntime;
123
55
  for(var __rspack_i in __webpack_exports__)if (-1 === [
@@ -39,10 +39,8 @@ function validateLoadedBackendFederatedEffectApi(loaded, options) {
39
39
  if ('effect' !== backendContract.runtimeFramework) throw new Error(`[BFF][Effect] Backend federation expose ${options.remoteRequest} must expose strict Effect metadata (runtimeFramework: "effect").`);
40
40
  if ('string' == typeof backendContract.name && backendContract.name !== options.remoteName) throw new Error(`[BFF][Effect] Backend federation expose ${options.remoteRequest} metadata name mismatch: expected ${options.remoteName}, received ${backendContract.name}.`);
41
41
  if (!('runtime' in loaded)) throw new Error(`[BFF][Effect] Backend federation expose ${options.remoteRequest} must expose runtime.`);
42
- if (void 0 !== options.expected) {
43
- const issues = (0, external_identity_js_namespaceObject.validateExpectedBackendFederationIdentity)(loaded, options.expected, {
44
- allowMissingIdentityMetadata: true === options.allowMissingIdentityMetadata
45
- });
42
+ {
43
+ const issues = (0, external_identity_js_namespaceObject.validateExpectedBackendFederationIdentity)(loaded, options.expected);
46
44
  if (issues.length > 0) throw new Error(`[BFF][Effect] Backend federation expose ${options.remoteRequest} delivery-unit identity mismatch: ${(0, external_identity_js_namespaceObject.formatBackendFederationIdentityIssues)(issues)}.`);
47
45
  }
48
46
  return loaded;
@@ -33,9 +33,11 @@ __webpack_require__.d(__webpack_exports__, {
33
33
  const index_js_namespaceObject = require("../backend-federation/index.js");
34
34
  const load_js_namespaceObject = require("../backend-federation/load.js");
35
35
  const external_errors_js_namespaceObject = require("./errors.js");
36
+ const external_metadata_js_namespaceObject = require("./metadata.js");
36
37
  const external_reference_js_namespaceObject = require("./reference.js");
37
38
  const external_remote_js_namespaceObject = require("./remote.js");
38
39
  const external_validation_js_namespaceObject = require("./validation.js");
40
+ const DEFAULT_SHARED_MANIFEST_LOAD_TIMEOUT_MS = 10000;
39
41
  function createManifestLoadScope(options) {
40
42
  const controller = new AbortController();
41
43
  const policyTimeouts = [
@@ -47,7 +49,8 @@ function createManifestLoadScope(options) {
47
49
  ...policyTimeouts
48
50
  ].filter((timeout)=>void 0 !== timeout);
49
51
  for (const timeout of configuredTimeouts)if (!Number.isSafeInteger(timeout) || timeout < 0) throw new external_errors_js_namespaceObject.BackendFederationManifestAdapterError('manifest_invalid', '[BFF][Effect] Backend federation timeoutMs must be a non-negative safe integer.');
50
- const timeoutMs = options.timeoutMs ?? (policyTimeouts.length > 0 ? Math.min(...policyTimeouts) : 0);
52
+ const positivePolicyTimeouts = policyTimeouts.filter((timeout)=>timeout > 0);
53
+ const timeoutMs = options.timeoutMs ?? (0 === policyTimeouts.length ? DEFAULT_SHARED_MANIFEST_LOAD_TIMEOUT_MS : positivePolicyTimeouts.length > 0 ? Math.min(...positivePolicyTimeouts) : 0);
51
54
  const inputSignals = [
52
55
  options.signal,
53
56
  options.manifestPolicy?.signal,
@@ -101,6 +104,27 @@ function isCallerPinnedStaticRemote(options, remote) {
101
104
  function throwIfManifestLoadAborted(signal) {
102
105
  if (signal.aborted) throw new external_errors_js_namespaceObject.BackendFederationManifestAdapterError('remote_unavailable', '[BFF][Effect] Backend federation load was aborted before remote execution.', signal.reason);
103
106
  }
107
+ function settleOnSharedAbort(promise, signal) {
108
+ if (signal.aborted) {
109
+ promise.catch(()=>{});
110
+ throwIfManifestLoadAborted(signal);
111
+ }
112
+ let onAbort;
113
+ const aborted = new Promise((_resolve, reject)=>{
114
+ onAbort = ()=>{
115
+ reject(new external_errors_js_namespaceObject.BackendFederationManifestAdapterError('remote_unavailable', '[BFF][Effect] Backend federation load was aborted before remote execution.', signal.reason));
116
+ };
117
+ signal.addEventListener('abort', onAbort, {
118
+ once: true
119
+ });
120
+ });
121
+ return Promise.race([
122
+ promise,
123
+ aborted
124
+ ]).finally(()=>{
125
+ if (onAbort) signal.removeEventListener('abort', onAbort);
126
+ });
127
+ }
104
128
  async function loadBackendFederatedEffectApiFromManifest(options) {
105
129
  let manifest;
106
130
  let remote;
@@ -108,7 +132,7 @@ async function loadBackendFederatedEffectApiFromManifest(options) {
108
132
  try {
109
133
  scope = createManifestLoadScope(options);
110
134
  throwIfManifestLoadAborted(scope.signal);
111
- manifest = await (0, external_reference_js_namespaceObject.loadBackendFederationManifest)({
135
+ manifest = await settleOnSharedAbort((0, external_reference_js_namespaceObject.loadBackendFederationManifest)({
112
136
  ...options,
113
137
  manifestPolicy: {
114
138
  ...options.manifestPolicy,
@@ -117,7 +141,7 @@ async function loadBackendFederatedEffectApiFromManifest(options) {
117
141
  },
118
142
  signal: scope.signal,
119
143
  timeoutMs: 0
120
- });
144
+ }), scope.signal);
121
145
  (0, external_validation_js_namespaceObject.validateBackendFederationManifest)(manifest, options.expected);
122
146
  remote = (0, external_remote_js_namespaceObject.resolveBackendFederationRemoteFromManifest)(manifest, options.remote);
123
147
  throwIfManifestLoadAborted(scope.signal);
@@ -127,12 +151,19 @@ async function loadBackendFederatedEffectApiFromManifest(options) {
127
151
  if (remoteManifest && /^https?:\/\//iu.test(remote.entry) && !hasPinnedRemoteEntryExpectation(options)) throw new external_errors_js_namespaceObject.BackendFederationManifestAdapterError('manifest_invalid', `[BFF][Effect] Backend federation remote ${remote.name} from a network manifest requires caller-pinned entryUrl, remoteName, sha256, and byteLength values.`);
128
152
  if (/^https?:\/\//iu.test(remote.entry) && void 0 === remote.verification && options.entryPolicy?.expected === void 0) throw new external_errors_js_namespaceObject.BackendFederationManifestAdapterError('manifest_invalid', `[BFF][Effect] Backend federation remote ${remote.name} requires entry.sha256 and entry.byteLength before network execution.`);
129
153
  if (/^https?:\/\//iu.test(remote.entry) && void 0 !== options.runtime) throw new external_errors_js_namespaceObject.BackendFederationManifestAdapterError('manifest_invalid', `[BFF][Effect] Backend federation remote ${remote.name} cannot use a custom runtime for network entry execution.`);
130
- const loaded = await (0, load_js_namespaceObject.loadBackendFederatedEffectApi)({
154
+ const deliveryUnit = (0, external_metadata_js_namespaceObject.manifestDeliveryUnit)((0, external_metadata_js_namespaceObject.backendFederationMetadata)(manifest), (0, external_metadata_js_namespaceObject.versionBoundaryMetadata)(manifest));
155
+ const unitId = (0, external_metadata_js_namespaceObject.stringValue)(deliveryUnit.boundary?.unitId) ?? (0, external_metadata_js_namespaceObject.stringValue)(deliveryUnit.top?.unitId);
156
+ const buildMarker = (0, external_metadata_js_namespaceObject.stringValue)(deliveryUnit.boundary?.buildMarker);
157
+ if (!unitId || !buildMarker) throw new external_errors_js_namespaceObject.BackendFederationManifestAdapterError('manifest_invalid', 'Backend federation manifest requires delivery-unit identity.');
158
+ const loaded = await settleOnSharedAbort((0, load_js_namespaceObject.loadBackendFederatedEffectApi)({
131
159
  hostName: options.hostName,
132
160
  remote,
133
161
  ...options.plugins ? {
134
162
  plugins: options.plugins
135
163
  } : {},
164
+ ...options.shared ? {
165
+ shared: options.shared
166
+ } : {},
136
167
  entryPolicy: {
137
168
  ...options.entryPolicy,
138
169
  signal: scope.signal,
@@ -141,16 +172,13 @@ async function loadBackendFederatedEffectApiFromManifest(options) {
141
172
  ...options.runtime ? {
142
173
  runtime: options.runtime
143
174
  } : {},
144
- ...options.expected?.unitId && options.expected.buildMarker ? {
145
- expected: {
146
- unitId: options.expected.unitId,
147
- buildMarker: options.expected.buildMarker
148
- },
149
- allowMissingIdentityMetadata: true
150
- } : {}
175
+ expected: {
176
+ unitId,
177
+ buildMarker
178
+ }
151
179
  }).catch((error)=>{
152
180
  throw new external_errors_js_namespaceObject.BackendFederationManifestAdapterError(scope?.timedOut() === true ? 'timeout' : (0, external_validation_js_namespaceObject.classifyLoadError)(error), `[BFF][Effect] Backend federation remote ${remote?.name ?? 'unknown'} could not load ${remote?.expose ?? index_js_namespaceObject.BACKEND_FEDERATION_EFFECT_EXPOSE}.`, error);
153
- });
181
+ }), scope.signal);
154
182
  (0, external_validation_js_namespaceObject.validateLoadedBackendFederationContract)(loaded, manifest, remote);
155
183
  return loaded;
156
184
  } catch (error) {
@@ -37,7 +37,7 @@ __webpack_require__.d(__webpack_exports__, {
37
37
  stringValue: ()=>stringValue,
38
38
  versionBoundaryMetadata: ()=>versionBoundaryMetadata
39
39
  });
40
- const universal_namespaceObject = require("@modern-js/utils/universal");
40
+ const backend_federation_contracts_namespaceObject = require("@modern-js/backend-federation-contracts");
41
41
  function stringValue(value) {
42
42
  return 'string' == typeof value && value.length > 0 ? value : void 0;
43
43
  }
@@ -64,10 +64,10 @@ function resolveRemoteEntryFromMetadata(manifest) {
64
64
  ].filter(Boolean).join('/');
65
65
  }
66
66
  function backendFederationMetadata(manifest) {
67
- return (0, universal_namespaceObject.backendFederationMetadata)(manifest);
67
+ return (0, backend_federation_contracts_namespaceObject.backendFederationMetadata)(manifest);
68
68
  }
69
69
  function versionBoundaryMetadata(manifest) {
70
- return (0, universal_namespaceObject.backendFederationVersionBoundary)(manifest);
70
+ return (0, backend_federation_contracts_namespaceObject.backendFederationVersionBoundary)(manifest);
71
71
  }
72
72
  function deliveryUnitMetadata(record) {
73
73
  return recordField(record, 'deliveryUnit');
@@ -31,10 +31,12 @@ __webpack_require__.d(__webpack_exports__, {
31
31
  loadBackendFederatedEffectApiFromManifest: ()=>loadBackendFederatedEffectApiFromManifest
32
32
  });
33
33
  const node_namespaceObject = require("@modern-js/server-runtime-extensions/backend-federation-security/node");
34
+ const node_shared_js_namespaceObject = require("../backend-federation/node-shared.js");
34
35
  const external_load_js_namespaceObject = require("./load.js");
35
- function loadBackendFederatedEffectApiFromManifest(options) {
36
+ async function loadBackendFederatedEffectApiFromManifest(options) {
36
37
  return (0, external_load_js_namespaceObject.loadBackendFederatedEffectApiFromManifest)({
37
38
  ...options,
39
+ shared: (0, node_shared_js_namespaceObject.withEffectBffHostShared)(options.shared),
38
40
  entryPolicy: {
39
41
  ...options.entryPolicy,
40
42
  evaluateCommonJs: options.entryPolicy?.evaluateCommonJs ?? node_namespaceObject.evaluateNodeBackendFederationCommonJs
@@ -30,8 +30,8 @@ __webpack_require__.r(__webpack_exports__);
30
30
  __webpack_require__.d(__webpack_exports__, {
31
31
  resolveBackendFederationRemoteFromManifest: ()=>resolveBackendFederationRemoteFromManifest
32
32
  });
33
+ const backend_federation_contracts_namespaceObject = require("@modern-js/backend-federation-contracts");
33
34
  const backend_federation_security_namespaceObject = require("@modern-js/server-runtime-extensions/backend-federation-security");
34
- const universal_namespaceObject = require("@modern-js/utils/universal");
35
35
  const index_js_namespaceObject = require("../backend-federation/index.js");
36
36
  const external_errors_js_namespaceObject = require("./errors.js");
37
37
  const external_metadata_js_namespaceObject = require("./metadata.js");
@@ -44,7 +44,7 @@ function resolveBackendFederationRemoteFromManifest(manifest, remoteOverride = {
44
44
  const manifestEntryUrl = (0, external_metadata_js_namespaceObject.stringValue)(backendFederation?.containerEntry) ?? (0, external_metadata_js_namespaceObject.stringValue)(entry?.url) ?? (0, external_metadata_js_namespaceObject.resolveRemoteEntryFromMetadata)(manifest);
45
45
  const remoteEntryUrl = remoteOverride.entry ?? manifestEntryUrl;
46
46
  const remoteType = remoteOverride.type ?? (0, external_metadata_js_namespaceObject.stringValue)(backendFederation?.remoteType) ?? (0, external_metadata_js_namespaceObject.stringValue)(entry?.type) ?? (0, external_metadata_js_namespaceObject.stringValue)(remoteEntry?.type) ?? 'module';
47
- const expose = remoteOverride.expose ?? (0, universal_namespaceObject.backendFederationExposeNames)(backendFederation)[0] ?? index_js_namespaceObject.BACKEND_FEDERATION_EFFECT_EXPOSE;
47
+ const expose = remoteOverride.expose ?? (0, backend_federation_contracts_namespaceObject.backendFederationExposeNames)(backendFederation)[0] ?? index_js_namespaceObject.BACKEND_FEDERATION_EFFECT_EXPOSE;
48
48
  let verification;
49
49
  try {
50
50
  const manifestVerification = (0, backend_federation_security_namespaceObject.resolveBackendFederationRemoteEntryVerification)(manifest);
@@ -63,13 +63,7 @@ function resolveBackendFederationRemoteFromManifest(manifest, remoteOverride = {
63
63
  ...verification ? {
64
64
  verification
65
65
  } : {},
66
- ...remoteOverride.entryGlobalName ? {
67
- entryGlobalName: remoteOverride.entryGlobalName
68
- } : {},
69
- expose,
70
- ...remoteOverride.shareScope ? {
71
- shareScope: remoteOverride.shareScope
72
- } : {}
66
+ expose
73
67
  };
74
68
  }
75
69
  exports.resolveBackendFederationRemoteFromManifest = __webpack_exports__.resolveBackendFederationRemoteFromManifest;
@@ -32,8 +32,9 @@ __webpack_require__.d(__webpack_exports__, {
32
32
  validateBackendFederationManifest: ()=>validateBackendFederationManifest,
33
33
  validateLoadedBackendFederationContract: ()=>validateLoadedBackendFederationContract
34
34
  });
35
- const universal_namespaceObject = require("@modern-js/utils/universal");
35
+ const backend_federation_contracts_namespaceObject = require("@modern-js/backend-federation-contracts");
36
36
  const index_js_namespaceObject = require("../backend-federation/index.js");
37
+ const identity_js_namespaceObject = require("../backend-federation/identity.js");
37
38
  const external_errors_js_namespaceObject = require("./errors.js");
38
39
  const external_metadata_js_namespaceObject = require("./metadata.js");
39
40
  function resolveExpectedBuildMarker(expected) {
@@ -48,12 +49,11 @@ function validateBackendFederationManifest(manifest, expected = {}) {
48
49
  const expectedBuildMarker = resolveExpectedBuildMarker(expected);
49
50
  const backendFederation = (0, external_metadata_js_namespaceObject.backendFederationMetadata)(manifest);
50
51
  (0, external_errors_js_namespaceObject.assertManifestAdapter)(backendFederation, 'manifest_invalid', '[BFF][Effect] Backend federation manifest must declare backendFederation metadata.');
51
- const manifestShape = (0, universal_namespaceObject.validateBackendFederationManifest)(manifest, {
52
+ const manifestShape = (0, backend_federation_contracts_namespaceObject.validateBackendFederationManifest)(manifest, {
52
53
  expectedContractVersion: false,
53
- expectedNodeAdapterVersion: false,
54
- validateDeliveryUnit: false
54
+ expectedNodeAdapterVersion: false
55
55
  });
56
- (0, external_errors_js_namespaceObject.assertManifestAdapter)(manifestShape.ok, 'manifest_invalid', `[BFF][Effect] Backend federation manifest schema invalid: ${(0, universal_namespaceObject.formatBackendFederationValidationErrors)(manifestShape.errors)}.`);
56
+ (0, external_errors_js_namespaceObject.assertManifestAdapter)(manifestShape.ok, 'manifest_invalid', `[BFF][Effect] Backend federation manifest schema invalid: ${(0, backend_federation_contracts_namespaceObject.formatBackendFederationValidationErrors)(manifestShape.errors)}.`);
57
57
  (0, external_errors_js_namespaceObject.assertManifestAdapter)('effect' === backendFederation.runtimeFramework, 'strict_effect_required', '[BFF][Effect] Backend federation manifest must declare runtimeFramework: "effect".');
58
58
  (0, external_errors_js_namespaceObject.assertManifestAdapter)(true === backendFederation.strictEffectApproach, 'strict_effect_required', '[BFF][Effect] Backend federation manifest must declare strictEffectApproach: true.');
59
59
  (0, external_errors_js_namespaceObject.assertVersionValue)((0, external_metadata_js_namespaceObject.stringValue)(backendFederation.contractVersion), expected.contractVersion ?? index_js_namespaceObject.BACKEND_FEDERATION_CONTRACT_VERSION, 'manifest contractVersion');
@@ -69,6 +69,7 @@ function validateBackendFederationManifest(manifest, expected = {}) {
69
69
  (0, external_errors_js_namespaceObject.assertConsistentValue)((0, external_metadata_js_namespaceObject.stringValue)(deliveryUnit.boundary?.buildMarker), (0, external_metadata_js_namespaceObject.stringValue)(boundary?.buildVersion), 'versionBoundary.deliveryUnit.buildMarker vs versionBoundary.buildVersion');
70
70
  (0, external_errors_js_namespaceObject.assertConsistentValue)((0, external_metadata_js_namespaceObject.stringValue)(deliveryUnit.top?.unitId), (0, external_metadata_js_namespaceObject.stringValue)(deliveryUnit.boundary?.unitId), 'backendFederation.deliveryUnit.unitId vs versionBoundary.deliveryUnit.unitId');
71
71
  const manifestUnitId = (0, external_metadata_js_namespaceObject.stringValue)(deliveryUnit.boundary?.unitId) ?? (0, external_metadata_js_namespaceObject.stringValue)(deliveryUnit.top?.unitId);
72
+ (0, external_errors_js_namespaceObject.assertManifestAdapter)(manifestUnitId && (0, external_metadata_js_namespaceObject.stringValue)(deliveryUnit.boundary?.buildMarker), 'manifest_invalid', 'Backend federation manifest requires delivery-unit unitId and buildMarker.');
72
73
  (0, external_errors_js_namespaceObject.assertVersionValue)(manifestUnitId, expected.unitId, 'deliveryUnit.unitId');
73
74
  (0, external_errors_js_namespaceObject.assertVersionValue)((0, external_metadata_js_namespaceObject.stringValue)(deliveryUnit.boundary?.buildMarker), expectedBuildMarker, 'deliveryUnit.buildMarker');
74
75
  }
@@ -76,19 +77,22 @@ function validateLoadedBackendFederationContract(loaded, manifest, remote) {
76
77
  const loadedContract = loaded.backendFederationContract;
77
78
  const backendFederation = (0, external_metadata_js_namespaceObject.backendFederationMetadata)(manifest);
78
79
  const boundary = (0, external_metadata_js_namespaceObject.versionBoundaryMetadata)(manifest);
79
- const compatibility = (0, external_metadata_js_namespaceObject.recordField)(loadedContract, 'compatibility');
80
+ const compatibility = (0, identity_js_namespaceObject.backendFederationCompatibility)(loaded);
80
81
  (0, external_errors_js_namespaceObject.assertManifestAdapter)(compatibility, 'version_mismatch', `[BFF][Effect] Backend federation expose ${remote.name}/${remote.expose?.replace(/^\.\//u, '')} must declare compatibility metadata.`);
81
82
  (0, external_errors_js_namespaceObject.assertVersionValue)((0, external_metadata_js_namespaceObject.stringValue)(loadedContract?.role), 'microvertical-server', 'expose role');
82
83
  (0, external_errors_js_namespaceObject.assertVersionValue)((0, external_metadata_js_namespaceObject.stringValue)(loadedContract?.name), remote.name, 'expose name');
83
- (0, external_errors_js_namespaceObject.assertVersionValue)((0, external_metadata_js_namespaceObject.stringValue)(compatibility.contractVersion), (0, external_metadata_js_namespaceObject.stringValue)(backendFederation?.contractVersion), 'expose contractVersion');
84
- (0, external_errors_js_namespaceObject.assertVersionValue)((0, external_metadata_js_namespaceObject.stringValue)(compatibility.nodeAdapterVersion), (0, external_metadata_js_namespaceObject.stringValue)(backendFederation?.nodeAdapterVersion), 'expose nodeAdapterVersion');
85
- (0, external_errors_js_namespaceObject.assertVersionValue)((0, external_metadata_js_namespaceObject.stringValue)(compatibility.packageName), (0, external_metadata_js_namespaceObject.stringValue)(boundary?.packageName), 'expose packageName');
86
- (0, external_errors_js_namespaceObject.assertVersionValue)((0, external_metadata_js_namespaceObject.stringValue)(compatibility.build), (0, external_metadata_js_namespaceObject.stringValue)(boundary?.buildVersion), 'expose buildVersion');
87
84
  const deliveryUnit = (0, external_metadata_js_namespaceObject.manifestDeliveryUnit)(backendFederation, boundary);
88
85
  const manifestUnitId = (0, external_metadata_js_namespaceObject.stringValue)(deliveryUnit.boundary?.unitId) ?? (0, external_metadata_js_namespaceObject.stringValue)(deliveryUnit.top?.unitId);
89
86
  const manifestBuildMarker = (0, external_metadata_js_namespaceObject.stringValue)(deliveryUnit.boundary?.buildMarker);
90
- (0, external_errors_js_namespaceObject.assertConsistentValue)(manifestUnitId, (0, external_metadata_js_namespaceObject.stringValue)(compatibility.unitId), 'deliveryUnit.unitId vs expose compatibility.unitId');
91
- (0, external_errors_js_namespaceObject.assertConsistentValue)(manifestBuildMarker, (0, external_metadata_js_namespaceObject.stringValue)(compatibility.build), 'deliveryUnit.buildMarker vs expose compatibility.build');
87
+ const issues = (0, identity_js_namespaceObject.validateBackendFederationCompatibility)(compatibility, {
88
+ contractVersion: (0, external_metadata_js_namespaceObject.stringValue)(backendFederation?.contractVersion),
89
+ nodeAdapterVersion: (0, external_metadata_js_namespaceObject.stringValue)(backendFederation?.nodeAdapterVersion),
90
+ packageName: (0, external_metadata_js_namespaceObject.stringValue)(boundary?.packageName),
91
+ unitId: manifestUnitId,
92
+ build: manifestBuildMarker ?? (0, external_metadata_js_namespaceObject.stringValue)(boundary?.buildVersion)
93
+ });
94
+ (0, external_errors_js_namespaceObject.assertVersionValue)((0, external_metadata_js_namespaceObject.stringValue)(compatibility.build), (0, external_metadata_js_namespaceObject.stringValue)(boundary?.buildVersion), 'expose buildVersion');
95
+ (0, external_errors_js_namespaceObject.assertManifestAdapter)(0 === issues.length, 'version_mismatch', `[BFF][Effect] ${(0, identity_js_namespaceObject.formatBackendFederationIdentityIssues)(issues)}.`);
92
96
  }
93
97
  function classifyLoadError(error) {
94
98
  const message = error instanceof Error ? error.message : String(error);
@@ -31,13 +31,13 @@ __webpack_require__.d(__webpack_exports__, {
31
31
  checkCrossProjectPolicyForRequest: ()=>checkCrossProjectPolicyForRequest,
32
32
  checkCrossProjectPolicyResponse: ()=>checkCrossProjectPolicyResponse
33
33
  });
34
- const cross_project_policy_namespaceObject = require("@modern-js/bff-core/security/cross-project-policy");
34
+ const bff_policy_namespaceObject = require("@modern-js/server-runtime-extensions/bff-policy");
35
35
  const DENIAL_HEADERS = {
36
36
  'content-type': 'application/json; charset=utf-8'
37
37
  };
38
38
  const checkCrossProjectPolicyResponse = (headers, policy, observedRequest)=>{
39
39
  if (!policy?.enabled) return null;
40
- const violation = (0, cross_project_policy_namespaceObject.evaluateCrossProjectPolicy)(headers, policy, observedRequest);
40
+ const violation = (0, bff_policy_namespaceObject.evaluateCrossProjectPolicy)(headers, policy, observedRequest);
41
41
  if (!violation) return null;
42
42
  return new Response(JSON.stringify({
43
43
  code: violation.code,
@@ -54,7 +54,7 @@ const checkCrossProjectPolicyForRequest = (request, policy)=>{
54
54
  method: request.method,
55
55
  pathname: new URL(request.url).pathname
56
56
  };
57
- const observedRequest = (0, cross_project_policy_namespaceObject.resolveCrossProjectRequestObservation)(requestTarget, policy) ?? {
57
+ const observedRequest = (0, bff_policy_namespaceObject.resolveCrossProjectRequestObservation)(requestTarget, policy) ?? {
58
58
  method: requestTarget.method,
59
59
  routePath: requestTarget.pathname
60
60
  };
@@ -1,14 +1,5 @@
1
1
  "use strict";
2
2
  var __webpack_require__ = {};
3
- (()=>{
4
- __webpack_require__.n = (module)=>{
5
- var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
6
- __webpack_require__.d(getter, {
7
- a: getter
8
- });
9
- return getter;
10
- };
11
- })();
12
3
  (()=>{
13
4
  __webpack_require__.d = (exports1, getters, values)=>{
14
5
  var define = (defs, kind)=>{
@@ -39,32 +30,22 @@ __webpack_require__.r(__webpack_exports__);
39
30
  __webpack_require__.d(__webpack_exports__, {
40
31
  resolveAdapterCrossProjectPolicy: ()=>resolveAdapterCrossProjectPolicy
41
32
  });
42
- const external_node_fs_namespaceObject = require("node:fs");
43
- const external_node_path_namespaceObject = require("node:path");
44
- var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
45
- const bff_core_namespaceObject = require("@modern-js/bff-core");
46
- const readNearestPackageVersion = (startDir)=>{
47
- if (!startDir) return;
48
- let current = external_node_path_default().resolve(startDir);
49
- for(let depth = 0; depth < 10; depth += 1){
50
- try {
51
- const packageJson = JSON.parse((0, external_node_fs_namespaceObject.readFileSync)(external_node_path_default().join(current, 'package.json'), 'utf8'));
52
- if ('string' == typeof packageJson.version) return packageJson.version;
53
- } catch {}
54
- const parent = external_node_path_default().dirname(current);
55
- if (parent === current) break;
56
- current = parent;
57
- }
58
- };
59
- const resolveAdapterCrossProjectPolicy = (api, handlers)=>{
33
+ require("@modern-js/server-runtime-extensions/server-config");
34
+ const node_namespaceObject = require("@modern-js/server-runtime-extensions/bff-policy/node");
35
+ const resolveAdapterCrossProjectPolicy = (api, handlers, producer)=>{
60
36
  const bff = api.getServerConfig()?.bff;
61
37
  const { apiDirectory, appDirectory } = api.getServerContext();
62
- return (0, bff_core_namespaceObject.resolveCrossProjectPolicy)({
38
+ return (0, node_namespaceObject.resolveCrossProjectPolicy)({
63
39
  crossProjectPolicy: bff?.crossProjectPolicy,
64
40
  handlers,
65
- requestId: bff?.requestId,
66
41
  isCrossProjectServer: bff?.isCrossProjectServer,
67
- operationVersion: (0, bff_core_namespaceObject.deriveOperationVersion)(readNearestPackageVersion(apiDirectory) ?? readNearestPackageVersion(appDirectory))
42
+ ...producer ?? (0, node_namespaceObject.resolveOperationProducer)({
43
+ directories: [
44
+ apiDirectory,
45
+ appDirectory
46
+ ],
47
+ requestId: bff?.requestId || 'default'
48
+ })
68
49
  });
69
50
  };
70
51
  exports.resolveAdapterCrossProjectPolicy = __webpack_exports__.resolveAdapterCrossProjectPolicy;
@@ -27,13 +27,31 @@ var __webpack_require__ = {};
27
27
  })();
28
28
  var __webpack_exports__ = {};
29
29
  __webpack_require__.r(__webpack_exports__);
30
- const LEGACY_LOAD_WARNING = '[BFF][Effect] loadBackendFederatedEffectApi was called without an expected delivery-unit identity (expected.unitId + expected.buildMarker). Identity-less public backend loads are deprecated (ADR-0019/MV-G23) and will be rejected in a future major.';
31
- __webpack_require__.d(__webpack_exports__, {}, {
32
- LEGACY_LOAD_WARNING: LEGACY_LOAD_WARNING
30
+ function createProducerClient(configure, { requestId }) {
31
+ return (options)=>configure({
32
+ requestId,
33
+ requireEnvelope: true,
34
+ ...options,
35
+ identityBinding: {
36
+ enabled: true,
37
+ strict: true,
38
+ ...options?.identityBinding
39
+ },
40
+ operationContract: {
41
+ enabled: true,
42
+ strict: true,
43
+ requireSchemaHash: true,
44
+ requireOperationVersion: true,
45
+ ...options?.operationContract
46
+ }
47
+ });
48
+ }
49
+ __webpack_require__.d(__webpack_exports__, {
50
+ createProducerClient: ()=>createProducerClient
33
51
  });
34
- exports.LEGACY_LOAD_WARNING = __webpack_exports__.LEGACY_LOAD_WARNING;
52
+ exports.createProducerClient = __webpack_exports__.createProducerClient;
35
53
  for(var __rspack_i in __webpack_exports__)if (-1 === [
36
- "LEGACY_LOAD_WARNING"
54
+ "createProducerClient"
37
55
  ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
38
56
  Object.defineProperty(exports, '__esModule', {
39
57
  value: true
@@ -28,13 +28,13 @@ var __webpack_require__ = {};
28
28
  var __webpack_exports__ = {};
29
29
  __webpack_require__.r(__webpack_exports__);
30
30
  __webpack_require__.d(__webpack_exports__, {
31
- resolveEffectAdapterCrossProjectPolicy: ()=>resolveEffectAdapterCrossProjectPolicy
31
+ resolveEffectServerCrossProjectPolicy: ()=>resolveEffectServerCrossProjectPolicy
32
32
  });
33
33
  const effect_namespaceObject = require("@modern-js/bff-effect/effect");
34
34
  const utils_namespaceObject = require("@modern-js/utils");
35
35
  const httpapi_namespaceObject = require("effect/unstable/httpapi");
36
36
  const index_js_namespaceObject = require("../cross-project-policy/index.js");
37
- function resolveEffectAdapterCrossProjectPolicy(api, prefix, mod) {
37
+ function resolveEffectServerCrossProjectPolicy(api, prefix, mod, producer) {
38
38
  const contractSourcesPromise = null === mod ? Promise.resolve([]) : Promise.resolve().then(()=>(0, effect_namespaceObject.extractHttpApiFromModule)(mod, httpapi_namespaceObject.HttpApi.isHttpApi)).then((effectApi)=>{
39
39
  if (null === effectApi) return [];
40
40
  const reflect = (apiValue, handlers)=>{
@@ -50,14 +50,14 @@ function resolveEffectAdapterCrossProjectPolicy(api, prefix, mod) {
50
50
  return [];
51
51
  });
52
52
  return contractSourcesPromise.then((contractSources)=>{
53
- const policy = (0, index_js_namespaceObject.resolveAdapterCrossProjectPolicy)(api, contractSources);
53
+ const policy = (0, index_js_namespaceObject.resolveAdapterCrossProjectPolicy)(api, contractSources, producer);
54
54
  if (policy?.enabled === true && 0 === contractSources.length) utils_namespaceObject.logger.warn('[BFF][Effect] Cross-project policy enabled but no HttpApi endpoints could be reflected; requests fail operation-contract matching unless allowUnknownOperations is enabled.');
55
55
  return policy;
56
56
  });
57
57
  }
58
- exports.resolveEffectAdapterCrossProjectPolicy = __webpack_exports__.resolveEffectAdapterCrossProjectPolicy;
58
+ exports.resolveEffectServerCrossProjectPolicy = __webpack_exports__.resolveEffectServerCrossProjectPolicy;
59
59
  for(var __rspack_i in __webpack_exports__)if (-1 === [
60
- "resolveEffectAdapterCrossProjectPolicy"
60
+ "resolveEffectServerCrossProjectPolicy"
61
61
  ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
62
62
  Object.defineProperty(exports, '__esModule', {
63
63
  value: true
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.n = (module)=>{
5
+ var getter = module && module.__esModule ? ()=>module['default'] : ()=>module;
6
+ __webpack_require__.d(getter, {
7
+ a: getter
8
+ });
9
+ return getter;
10
+ };
11
+ })();
12
+ (()=>{
13
+ __webpack_require__.d = (exports1, getters, values)=>{
14
+ var define = (defs, kind)=>{
15
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
16
+ enumerable: true,
17
+ [kind]: defs[key]
18
+ });
19
+ };
20
+ define(getters, "get");
21
+ define(values, "value");
22
+ };
23
+ })();
24
+ (()=>{
25
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
26
+ })();
27
+ (()=>{
28
+ __webpack_require__.r = (exports1)=>{
29
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
30
+ value: 'Module'
31
+ });
32
+ Object.defineProperty(exports1, '__esModule', {
33
+ value: true
34
+ });
35
+ };
36
+ })();
37
+ var __webpack_exports__ = {};
38
+ __webpack_require__.r(__webpack_exports__);
39
+ __webpack_require__.d(__webpack_exports__, {
40
+ resolveEffectServerEntryFile: ()=>resolveEffectServerEntryFile
41
+ });
42
+ const external_node_path_namespaceObject = require("node:path");
43
+ var external_node_path_default = /*#__PURE__*/ __webpack_require__.n(external_node_path_namespaceObject);
44
+ require("@modern-js/server-runtime-extensions/server-config");
45
+ const utils_namespaceObject = require("@modern-js/utils");
46
+ const paths_js_namespaceObject = require("../effect-source-loader/paths.js");
47
+ function resolveEffectServerEntryFile(api) {
48
+ const { appDirectory, apiDirectory, distDirectory } = api.getServerContext();
49
+ const appDir = external_node_path_default().resolve(appDirectory || process.cwd());
50
+ return (0, paths_js_namespaceObject.resolveEffectEntry)({
51
+ appDir,
52
+ apiDir: external_node_path_default().resolve(appDir, apiDirectory || utils_namespaceObject.API_DIR),
53
+ effectEntry: api.getServerConfig()?.bff?.effect?.entry,
54
+ distDir: (0, utils_namespaceObject.isProd)() && distDirectory ? external_node_path_default().resolve(distDirectory) : void 0
55
+ }).path;
56
+ }
57
+ exports.resolveEffectServerEntryFile = __webpack_exports__.resolveEffectServerEntryFile;
58
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
59
+ "resolveEffectServerEntryFile"
60
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
61
+ Object.defineProperty(exports, '__esModule', {
62
+ value: true
63
+ });
@@ -28,11 +28,11 @@ var __webpack_require__ = {};
28
28
  var __webpack_exports__ = {};
29
29
  __webpack_require__.r(__webpack_exports__);
30
30
  __webpack_require__.d(__webpack_exports__, {
31
- createEffectAdapterRuntimeErrorResponse: ()=>createEffectAdapterRuntimeErrorResponse
31
+ createEffectServerRuntimeErrorResponse: ()=>createEffectServerRuntimeErrorResponse
32
32
  });
33
33
  const safe_failure_namespaceObject = require("@modern-js/runtime-extensions/safe-failure");
34
34
  const utils_namespaceObject = require("@modern-js/utils");
35
- function createEffectAdapterRuntimeErrorResponse(api, error, context) {
35
+ function createEffectServerRuntimeErrorResponse(api, error, context) {
36
36
  try {
37
37
  const onError = api.getServerConfig()?.onError;
38
38
  if (void 0 !== onError) return Promise.resolve(onError(error instanceof Error ? error : new Error(String(error)), ensureJsonContext(context))).then((result)=>result instanceof Response ? result : (0, safe_failure_namespaceObject.createSafeFailureResponse)(error)).catch((configError)=>{
@@ -66,9 +66,9 @@ function ensureJsonContext(context) {
66
66
  }
67
67
  });
68
68
  }
69
- exports.createEffectAdapterRuntimeErrorResponse = __webpack_exports__.createEffectAdapterRuntimeErrorResponse;
69
+ exports.createEffectServerRuntimeErrorResponse = __webpack_exports__.createEffectServerRuntimeErrorResponse;
70
70
  for(var __rspack_i in __webpack_exports__)if (-1 === [
71
- "createEffectAdapterRuntimeErrorResponse"
71
+ "createEffectServerRuntimeErrorResponse"
72
72
  ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
73
73
  Object.defineProperty(exports, '__esModule', {
74
74
  value: true