everything-dev 1.14.0 → 1.14.3

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 (56) hide show
  1. package/dist/cli/upgrade.cjs +2 -1
  2. package/dist/cli/upgrade.cjs.map +1 -1
  3. package/dist/cli/upgrade.mjs +2 -1
  4. package/dist/cli/upgrade.mjs.map +1 -1
  5. package/dist/contract.d.cts +31 -31
  6. package/dist/contract.d.mts +31 -31
  7. package/dist/orchestrator.cjs +0 -1
  8. package/dist/orchestrator.cjs.map +1 -1
  9. package/dist/plugin.cjs +39 -44
  10. package/dist/plugin.cjs.map +1 -1
  11. package/dist/plugin.d.cts +31 -31
  12. package/dist/plugin.d.mts +31 -31
  13. package/dist/plugin.mjs +39 -44
  14. package/dist/plugin.mjs.map +1 -1
  15. package/dist/shared.cjs +0 -10
  16. package/dist/shared.cjs.map +1 -1
  17. package/dist/shared.mjs +1 -9
  18. package/dist/shared.mjs.map +1 -1
  19. package/package.json +4 -30
  20. package/src/cli/upgrade.ts +1 -0
  21. package/src/plugin.ts +57 -49
  22. package/dist/api.cjs +0 -124
  23. package/dist/api.cjs.map +0 -1
  24. package/dist/api.d.cts +0 -36
  25. package/dist/api.d.cts.map +0 -1
  26. package/dist/api.d.mts +0 -36
  27. package/dist/api.d.mts.map +0 -1
  28. package/dist/api.mjs +0 -119
  29. package/dist/api.mjs.map +0 -1
  30. package/dist/federation.server.cjs +0 -27
  31. package/dist/federation.server.cjs.map +0 -1
  32. package/dist/federation.server.mjs +0 -27
  33. package/dist/federation.server.mjs.map +0 -1
  34. package/dist/host.cjs +0 -402
  35. package/dist/host.cjs.map +0 -1
  36. package/dist/host.d.cts +0 -22
  37. package/dist/host.d.cts.map +0 -1
  38. package/dist/host.d.mts +0 -22
  39. package/dist/host.d.mts.map +0 -1
  40. package/dist/host.mjs +0 -399
  41. package/dist/host.mjs.map +0 -1
  42. package/dist/orchestrator.d.cts +0 -44
  43. package/dist/orchestrator.d.cts.map +0 -1
  44. package/dist/orchestrator.d.mts +0 -44
  45. package/dist/orchestrator.d.mts.map +0 -1
  46. package/dist/service-descriptor.d.cts +0 -137
  47. package/dist/service-descriptor.d.cts.map +0 -1
  48. package/dist/service-descriptor.d.mts +0 -137
  49. package/dist/service-descriptor.d.mts.map +0 -1
  50. package/dist/shared.d.cts +0 -36
  51. package/dist/shared.d.cts.map +0 -1
  52. package/dist/shared.d.mts +0 -36
  53. package/dist/shared.d.mts.map +0 -1
  54. package/src/api.ts +0 -181
  55. package/src/federation.server.ts +0 -43
  56. package/src/host.ts +0 -573
@@ -1,137 +0,0 @@
1
- import { SourceMode } from "./types.cjs";
2
- import { Context } from "effect";
3
-
4
- //#region src/service-descriptor.d.ts
5
- interface ServiceDescriptor {
6
- key: string;
7
- source: SourceMode;
8
- url: string;
9
- remoteUrl?: string;
10
- entry: string;
11
- name: string;
12
- localPath?: string;
13
- port?: number;
14
- readinessPath: string;
15
- defaultPort: number;
16
- integrity?: string;
17
- proxy?: string;
18
- variables?: Record<string, string>;
19
- secrets?: string[];
20
- ssr?: boolean;
21
- command?: string;
22
- args?: string[];
23
- readyPatterns?: RegExp[];
24
- errorPatterns?: RegExp[];
25
- }
26
- declare const ServiceDescriptorMap_base: Context.TagClass<ServiceDescriptorMap, "ServiceDescriptorMap", Map<string, ServiceDescriptor>>;
27
- declare class ServiceDescriptorMap extends ServiceDescriptorMap_base {}
28
- declare const DevRuntimeConfig_base: Context.TagClass<DevRuntimeConfig, "DevRuntimeConfig", {
29
- env: "development" | "production" | "staging";
30
- account: string;
31
- networkId: "testnet" | "mainnet";
32
- host: {
33
- name: string;
34
- url: string;
35
- entry: string;
36
- source: "local" | "remote";
37
- integrity?: string | undefined;
38
- localPath?: string | undefined;
39
- port?: number | undefined;
40
- secrets?: string[] | undefined;
41
- remoteUrl?: string | undefined;
42
- };
43
- ui: {
44
- name: string;
45
- url: string;
46
- entry: string;
47
- source: "local" | "remote";
48
- integrity?: string | undefined;
49
- localPath?: string | undefined;
50
- port?: number | undefined;
51
- ssrUrl?: string | undefined;
52
- ssrIntegrity?: string | undefined;
53
- };
54
- api: {
55
- name: string;
56
- url: string;
57
- entry: string;
58
- source: "local" | "remote";
59
- integrity?: string | undefined;
60
- localPath?: string | undefined;
61
- port?: number | undefined;
62
- proxy?: string | undefined;
63
- variables?: Record<string, string> | undefined;
64
- secrets?: string[] | undefined;
65
- };
66
- domain?: string | undefined;
67
- title?: string | undefined;
68
- repository?: string | undefined;
69
- shared?: {
70
- ui?: Record<string, {
71
- version: string;
72
- requiredVersion?: string | undefined;
73
- singleton?: boolean | undefined;
74
- eager?: boolean | undefined;
75
- strictVersion?: boolean | undefined;
76
- shareScope?: string | undefined;
77
- }> | undefined;
78
- plugins?: Record<string, {
79
- version: string;
80
- requiredVersion?: string | undefined;
81
- singleton?: boolean | undefined;
82
- eager?: boolean | undefined;
83
- strictVersion?: boolean | undefined;
84
- shareScope?: string | undefined;
85
- }> | undefined;
86
- } | undefined;
87
- auth?: {
88
- name: string;
89
- url: string;
90
- entry: string;
91
- source: "local" | "remote";
92
- integrity?: string | undefined;
93
- localPath?: string | undefined;
94
- port?: number | undefined;
95
- proxy?: string | undefined;
96
- variables?: Record<string, string> | undefined;
97
- secrets?: string[] | undefined;
98
- sidebar?: {
99
- icon: string;
100
- label: string;
101
- to?: string | undefined;
102
- roleRequired?: "anon" | "member" | "admin" | undefined;
103
- }[] | undefined;
104
- } | undefined;
105
- plugins?: Record<string, {
106
- name: string;
107
- url: string;
108
- entry: string;
109
- source: "local" | "remote";
110
- localPath?: string | undefined;
111
- port?: number | undefined;
112
- proxy?: string | undefined;
113
- variables?: Record<string, string> | undefined;
114
- secrets?: string[] | undefined;
115
- integrity?: string | undefined;
116
- ui?: {
117
- name: string;
118
- url: string;
119
- entry: string;
120
- source: "local" | "remote";
121
- localPath?: string | undefined;
122
- port?: number | undefined;
123
- integrity?: string | undefined;
124
- } | undefined;
125
- sidebar?: {
126
- icon: string;
127
- label: string;
128
- to?: string | undefined;
129
- roleRequired?: "anon" | "member" | "admin" | undefined;
130
- }[] | undefined;
131
- routes?: string[] | undefined;
132
- }> | undefined;
133
- }>;
134
- declare class DevRuntimeConfig extends DevRuntimeConfig_base {}
135
- //#endregion
136
- export { DevRuntimeConfig, ServiceDescriptor, ServiceDescriptorMap };
137
- //# sourceMappingURL=service-descriptor.d.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"service-descriptor.d.cts","names":[],"sources":["../src/service-descriptor.ts"],"mappings":";;;;UAGiB,iBAAA;EACf,GAAA;EACA,MAAA,EAAQ,UAAA;EACR,GAAA;EACA,SAAA;EACA,KAAA;EACA,IAAA;EACA,SAAA;EACA,IAAA;EACA,aAAA;EACA,WAAA;EACA,SAAA;EACA,KAAA;EACA,SAAA,GAAY,MAAA;EACZ,OAAA;EACA,GAAA;EACA,OAAA;EACA,IAAA;EACA,aAAA,GAAgB,MAAA;EAChB,aAAA,GAAgB,MAAA;AAAA;AAAA,cACjB,yBAAA;cAEY,oBAAA,SAA6B,yBAAA;AAAA,cAGpC,qBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAEO,gBAAA,SAAyB,qBAAA"}
@@ -1,137 +0,0 @@
1
- import { SourceMode } from "./types.mjs";
2
- import { Context, Layer } from "effect";
3
-
4
- //#region src/service-descriptor.d.ts
5
- interface ServiceDescriptor {
6
- key: string;
7
- source: SourceMode;
8
- url: string;
9
- remoteUrl?: string;
10
- entry: string;
11
- name: string;
12
- localPath?: string;
13
- port?: number;
14
- readinessPath: string;
15
- defaultPort: number;
16
- integrity?: string;
17
- proxy?: string;
18
- variables?: Record<string, string>;
19
- secrets?: string[];
20
- ssr?: boolean;
21
- command?: string;
22
- args?: string[];
23
- readyPatterns?: RegExp[];
24
- errorPatterns?: RegExp[];
25
- }
26
- declare const ServiceDescriptorMap_base: Context.TagClass<ServiceDescriptorMap, "ServiceDescriptorMap", Map<string, ServiceDescriptor>>;
27
- declare class ServiceDescriptorMap extends ServiceDescriptorMap_base {}
28
- declare const DevRuntimeConfig_base: Context.TagClass<DevRuntimeConfig, "DevRuntimeConfig", {
29
- env: "development" | "production" | "staging";
30
- account: string;
31
- networkId: "testnet" | "mainnet";
32
- host: {
33
- name: string;
34
- url: string;
35
- entry: string;
36
- source: "local" | "remote";
37
- integrity?: string | undefined;
38
- localPath?: string | undefined;
39
- port?: number | undefined;
40
- secrets?: string[] | undefined;
41
- remoteUrl?: string | undefined;
42
- };
43
- ui: {
44
- name: string;
45
- url: string;
46
- entry: string;
47
- source: "local" | "remote";
48
- integrity?: string | undefined;
49
- localPath?: string | undefined;
50
- port?: number | undefined;
51
- ssrUrl?: string | undefined;
52
- ssrIntegrity?: string | undefined;
53
- };
54
- api: {
55
- name: string;
56
- url: string;
57
- entry: string;
58
- source: "local" | "remote";
59
- integrity?: string | undefined;
60
- localPath?: string | undefined;
61
- port?: number | undefined;
62
- proxy?: string | undefined;
63
- variables?: Record<string, string> | undefined;
64
- secrets?: string[] | undefined;
65
- };
66
- domain?: string | undefined;
67
- title?: string | undefined;
68
- repository?: string | undefined;
69
- shared?: {
70
- ui?: Record<string, {
71
- version: string;
72
- requiredVersion?: string | undefined;
73
- singleton?: boolean | undefined;
74
- eager?: boolean | undefined;
75
- strictVersion?: boolean | undefined;
76
- shareScope?: string | undefined;
77
- }> | undefined;
78
- plugins?: Record<string, {
79
- version: string;
80
- requiredVersion?: string | undefined;
81
- singleton?: boolean | undefined;
82
- eager?: boolean | undefined;
83
- strictVersion?: boolean | undefined;
84
- shareScope?: string | undefined;
85
- }> | undefined;
86
- } | undefined;
87
- auth?: {
88
- name: string;
89
- url: string;
90
- entry: string;
91
- source: "local" | "remote";
92
- integrity?: string | undefined;
93
- localPath?: string | undefined;
94
- port?: number | undefined;
95
- proxy?: string | undefined;
96
- variables?: Record<string, string> | undefined;
97
- secrets?: string[] | undefined;
98
- sidebar?: {
99
- icon: string;
100
- label: string;
101
- to?: string | undefined;
102
- roleRequired?: "anon" | "member" | "admin" | undefined;
103
- }[] | undefined;
104
- } | undefined;
105
- plugins?: Record<string, {
106
- name: string;
107
- url: string;
108
- entry: string;
109
- source: "local" | "remote";
110
- localPath?: string | undefined;
111
- port?: number | undefined;
112
- proxy?: string | undefined;
113
- variables?: Record<string, string> | undefined;
114
- secrets?: string[] | undefined;
115
- integrity?: string | undefined;
116
- ui?: {
117
- name: string;
118
- url: string;
119
- entry: string;
120
- source: "local" | "remote";
121
- localPath?: string | undefined;
122
- port?: number | undefined;
123
- integrity?: string | undefined;
124
- } | undefined;
125
- sidebar?: {
126
- icon: string;
127
- label: string;
128
- to?: string | undefined;
129
- roleRequired?: "anon" | "member" | "admin" | undefined;
130
- }[] | undefined;
131
- routes?: string[] | undefined;
132
- }> | undefined;
133
- }>;
134
- declare class DevRuntimeConfig extends DevRuntimeConfig_base {}
135
- //#endregion
136
- export { DevRuntimeConfig, ServiceDescriptor, ServiceDescriptorMap };
137
- //# sourceMappingURL=service-descriptor.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"service-descriptor.d.mts","names":[],"sources":["../src/service-descriptor.ts"],"mappings":";;;;UAGiB,iBAAA;EACf,GAAA;EACA,MAAA,EAAQ,UAAA;EACR,GAAA;EACA,SAAA;EACA,KAAA;EACA,IAAA;EACA,SAAA;EACA,IAAA;EACA,aAAA;EACA,WAAA;EACA,SAAA;EACA,KAAA;EACA,SAAA,GAAY,MAAA;EACZ,OAAA;EACA,GAAA;EACA,OAAA;EACA,IAAA;EACA,aAAA,GAAgB,MAAA;EAChB,aAAA,GAAgB,MAAA;AAAA;AAAA,cACjB,yBAAA;cAEY,oBAAA,SAA6B,yBAAA;AAAA,cAGpC,qBAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAEO,gBAAA,SAAyB,qBAAA"}
package/dist/shared.d.cts DELETED
@@ -1,36 +0,0 @@
1
- import { BosConfig } from "./types.cjs";
2
- import { BosEnv } from "./merge.cjs";
3
-
4
- //#region src/shared.d.ts
5
- interface SharedUiResolvedDep {
6
- name: string;
7
- version: string;
8
- requiredVersion: string;
9
- shareScope: string;
10
- singleton: boolean;
11
- eager: boolean;
12
- strictVersion: boolean;
13
- }
14
- interface SharedUiResolved {
15
- deps: Record<string, SharedUiResolvedDep>;
16
- fingerprintSha256: string;
17
- }
18
- interface SharedSyncResult {
19
- mode: "catalog->bos" | "bos->catalog";
20
- hostMode: "local" | "remote";
21
- bosConfigChanged: boolean;
22
- catalogChanged: boolean;
23
- generatedChanged: boolean;
24
- resolved: SharedUiResolved;
25
- }
26
- declare function syncAndGenerateSharedUi(opts: {
27
- configDir: string;
28
- hostMode: "local" | "remote";
29
- bosConfig?: BosConfig;
30
- env?: BosEnv;
31
- extendsChain?: string[];
32
- }): Promise<SharedSyncResult>;
33
- declare function loadGeneratedSharedUi(configDir: string): SharedUiResolved | null;
34
- //#endregion
35
- export { SharedSyncResult, SharedUiResolved, SharedUiResolvedDep, loadGeneratedSharedUi, syncAndGenerateSharedUi };
36
- //# sourceMappingURL=shared.d.cts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shared.d.cts","names":[],"sources":["../src/shared.ts"],"mappings":";;;;UAoBiB,mBAAA;EACf,IAAA;EACA,OAAA;EACA,eAAA;EACA,UAAA;EACA,SAAA;EACA,KAAA;EACA,aAAA;AAAA;AAAA,UAGe,gBAAA;EACf,IAAA,EAAM,MAAA,SAAe,mBAAA;EACrB,iBAAA;AAAA;AAAA,UAGe,gBAAA;EACf,IAAA;EACA,QAAA;EACA,gBAAA;EACA,cAAA;EACA,gBAAA;EACA,QAAA,EAAU,gBAAA;AAAA;AAAA,iBAiDU,uBAAA,CAAwB,IAAA;EAC5C,SAAA;EACA,QAAA;EACA,SAAA,GAAY,SAAA;EACZ,GAAA,GAAM,MAAA;EACN,YAAA;AAAA,IACE,OAAA,CAAQ,gBAAA;AAAA,iBAgJI,qBAAA,CAAsB,SAAA,WAAoB,gBAAA"}
package/dist/shared.d.mts DELETED
@@ -1,36 +0,0 @@
1
- import { BosConfig } from "./types.mjs";
2
- import { BosEnv } from "./merge.mjs";
3
-
4
- //#region src/shared.d.ts
5
- interface SharedUiResolvedDep {
6
- name: string;
7
- version: string;
8
- requiredVersion: string;
9
- shareScope: string;
10
- singleton: boolean;
11
- eager: boolean;
12
- strictVersion: boolean;
13
- }
14
- interface SharedUiResolved {
15
- deps: Record<string, SharedUiResolvedDep>;
16
- fingerprintSha256: string;
17
- }
18
- interface SharedSyncResult {
19
- mode: "catalog->bos" | "bos->catalog";
20
- hostMode: "local" | "remote";
21
- bosConfigChanged: boolean;
22
- catalogChanged: boolean;
23
- generatedChanged: boolean;
24
- resolved: SharedUiResolved;
25
- }
26
- declare function syncAndGenerateSharedUi(opts: {
27
- configDir: string;
28
- hostMode: "local" | "remote";
29
- bosConfig?: BosConfig;
30
- env?: BosEnv;
31
- extendsChain?: string[];
32
- }): Promise<SharedSyncResult>;
33
- declare function loadGeneratedSharedUi(configDir: string): SharedUiResolved | null;
34
- //#endregion
35
- export { SharedSyncResult, SharedUiResolved, SharedUiResolvedDep, loadGeneratedSharedUi, syncAndGenerateSharedUi };
36
- //# sourceMappingURL=shared.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shared.d.mts","names":[],"sources":["../src/shared.ts"],"mappings":";;;;UAoBiB,mBAAA;EACf,IAAA;EACA,OAAA;EACA,eAAA;EACA,UAAA;EACA,SAAA;EACA,KAAA;EACA,aAAA;AAAA;AAAA,UAGe,gBAAA;EACf,IAAA,EAAM,MAAA,SAAe,mBAAA;EACrB,iBAAA;AAAA;AAAA,UAGe,gBAAA;EACf,IAAA;EACA,QAAA;EACA,gBAAA;EACA,cAAA;EACA,gBAAA;EACA,QAAA,EAAU,gBAAA;AAAA;AAAA,iBAiDU,uBAAA,CAAwB,IAAA;EAC5C,SAAA;EACA,QAAA;EACA,SAAA,GAAY,SAAA;EACZ,GAAA,GAAM,MAAA;EACN,YAAA;AAAA,IACE,OAAA,CAAQ,gBAAA;AAAA,iBAgJI,qBAAA,CAAsB,SAAA,WAAoB,gBAAA"}
package/src/api.ts DELETED
@@ -1,181 +0,0 @@
1
- import { verifySriForUrl } from "./integrity";
2
- import { ensureNodeRuntimePlugin, registerRemote } from "./mf";
3
- import { createPluginRuntime } from "./sdk";
4
- import type { RuntimeConfig, RuntimePluginConfig } from "./types";
5
-
6
- export interface LoadedPluginResult {
7
- key: string;
8
- name: string;
9
- router: any;
10
- createClient: (context?: unknown) => any;
11
- metadata: {
12
- remoteUrl: string;
13
- version?: string;
14
- };
15
- }
16
-
17
- export interface LoadedPluginsResult {
18
- base: LoadedPluginResult | null;
19
- plugins: LoadedPluginResult[];
20
- errors: Array<{ key: string; error: string }>;
21
- }
22
-
23
- export async function loadApiPlugin(opts: {
24
- key: string;
25
- runtimeId: string;
26
- name: string;
27
- entry: string;
28
- variables?: Record<string, string>;
29
- secrets?: Record<string, string>;
30
- integrity?: string;
31
- plugins?: Record<string, unknown>;
32
- }): Promise<LoadedPluginResult> {
33
- const remoteEntryUrl = (() => {
34
- if (opts.entry.endsWith("/remoteEntry.js")) return opts.entry;
35
- if (opts.entry.endsWith("/mf-manifest.json")) {
36
- return `${opts.entry.replace(/\/mf-manifest\.json$/, "")}/remoteEntry.js`;
37
- }
38
- if (opts.entry.endsWith(".js")) return opts.entry;
39
- return `${opts.entry.replace(/\/$/, "")}/remoteEntry.js`;
40
- })();
41
-
42
- if (opts.integrity) {
43
- await verifySriForUrl(remoteEntryUrl, opts.integrity);
44
- }
45
-
46
- await ensureNodeRuntimePlugin();
47
- await registerRemote({ name: opts.runtimeId, entry: remoteEntryUrl });
48
-
49
- const runtime: any = createPluginRuntime({
50
- registry: {
51
- [opts.runtimeId]: { remote: remoteEntryUrl },
52
- },
53
- secrets: opts.secrets ?? {},
54
- });
55
-
56
- // biome-ignore lint/correctness/useHookAtTopLevel: usePlugin is not a React hook
57
- const plugin = await runtime.usePlugin(
58
- opts.runtimeId,
59
- {
60
- variables: opts.variables ?? {},
61
- secrets: opts.secrets ?? {},
62
- },
63
- opts.plugins,
64
- );
65
-
66
- return {
67
- key: opts.key,
68
- name: opts.name,
69
- router: plugin.router,
70
- createClient: plugin.createClient as (context?: unknown) => any,
71
- metadata: {
72
- remoteUrl: remoteEntryUrl,
73
- version: plugin.metadata.version,
74
- },
75
- };
76
- }
77
-
78
- function collectSecrets(config: RuntimePluginConfig, envSecrets?: Record<string, string>) {
79
- const secrets: Record<string, string> = {};
80
- for (const key of config.secrets ?? []) {
81
- const value = envSecrets?.[key] ?? process.env[key];
82
- if (value) {
83
- secrets[key] = value;
84
- }
85
- }
86
- return secrets;
87
- }
88
-
89
- export async function loadApiPluginsFromRuntimeConfig(
90
- runtimeConfig: RuntimeConfig,
91
- envSecrets?: Record<string, string>,
92
- ): Promise<LoadedPluginsResult> {
93
- const entries: Array<[string, RuntimePluginConfig]> = [];
94
-
95
- if (runtimeConfig.api?.url) {
96
- entries.push(["api", runtimeConfig.api]);
97
- }
98
-
99
- for (const [key, plugin] of Object.entries(runtimeConfig.plugins ?? {})) {
100
- if (plugin.url) {
101
- entries.push([key, plugin]);
102
- }
103
- }
104
-
105
- if (entries.length === 0) {
106
- console.log("[API] No plugins configured");
107
- return { base: null, plugins: [], errors: [] };
108
- }
109
-
110
- // Phase 1: Load non-API plugins first
111
- const pluginEntries = entries.filter(([key]) => key !== "api");
112
- const apiEntry = entries.find(([key]) => key === "api");
113
-
114
- const pluginResults = await Promise.allSettled(
115
- pluginEntries.map(async ([key, pluginConfig]) => {
116
- console.log(`[API] Loading plugin: ${pluginConfig.name} from ${pluginConfig.entry}`);
117
- return loadApiPlugin({
118
- key,
119
- runtimeId: pluginConfig.name,
120
- name: pluginConfig.name,
121
- entry: pluginConfig.entry,
122
- variables: pluginConfig.variables,
123
- secrets: collectSecrets(pluginConfig, envSecrets),
124
- integrity: pluginConfig.integrity,
125
- });
126
- }),
127
- );
128
-
129
- const plugins: LoadedPluginResult[] = [];
130
- const errors: Array<{ key: string; error: string }> = [];
131
-
132
- const pluginsClient: Record<string, unknown> = {};
133
-
134
- pluginResults.forEach((result, index) => {
135
- const [key] = pluginEntries[index] ?? ["unknown"];
136
- if (result.status === "fulfilled") {
137
- plugins.push(result.value);
138
- pluginsClient[key] = result.value.createClient;
139
- } else {
140
- errors.push({
141
- key,
142
- error: result.reason instanceof Error ? result.reason.message : String(result.reason),
143
- });
144
- }
145
- });
146
-
147
- // Phase 2: Load API plugin with injected plugins client
148
- let base: LoadedPluginResult | null = null;
149
-
150
- if (apiEntry) {
151
- const [key, apiConfig] = apiEntry;
152
- try {
153
- console.log(`[API] Loading API plugin: ${apiConfig.name} from ${apiConfig.entry}`);
154
- base = await loadApiPlugin({
155
- key,
156
- runtimeId: apiConfig.name,
157
- name: apiConfig.name,
158
- entry: apiConfig.entry,
159
- variables: apiConfig.variables,
160
- secrets: collectSecrets(apiConfig, envSecrets),
161
- integrity: apiConfig.integrity,
162
- plugins: pluginsClient,
163
- });
164
- } catch (error) {
165
- errors.push({
166
- key,
167
- error: error instanceof Error ? error.message : String(error),
168
- });
169
- }
170
- }
171
-
172
- return { base, plugins, errors };
173
- }
174
-
175
- export function createStitchedRouter(baseRouter: any, plugins: LoadedPluginResult[] | null): any {
176
- if (!plugins || plugins.length === 0) {
177
- return baseRouter;
178
- }
179
-
180
- return plugins.reduce((router, plugin) => Object.assign(router, plugin.router), baseRouter);
181
- }
@@ -1,43 +0,0 @@
1
- import { verifySriForUrl } from "./integrity";
2
- import { ensureNodeRuntimePlugin, loadRemoteModule, registerRemote } from "./mf";
3
- import type { RuntimeConfig } from "./types";
4
- import type { RouterModule } from "./ui/types";
5
-
6
- export type { RouterModule };
7
-
8
- export async function loadRouterModule(config: RuntimeConfig): Promise<RouterModule> {
9
- const isLocalDev = config.ui.source === "local";
10
- const ssrUrl = config.ui.ssrUrl ?? (isLocalDev ? config.ui.url : undefined);
11
-
12
- if (!ssrUrl) {
13
- if (!isLocalDev) {
14
- throw new Error(
15
- "SSR URL not configured in production. Set app.ui.ssr in bos.config.json to enable SSR.",
16
- );
17
- }
18
-
19
- throw new Error(
20
- "SSR URL not configured. In local dev, set app.ui.ssr or use a UI package with SSR support.",
21
- );
22
- }
23
-
24
- const ssrEntryUrl = `${ssrUrl.replace(/\/$/, "")}/remoteEntry.server.js`;
25
-
26
- if (config.ui.ssrIntegrity) {
27
- await verifySriForUrl(ssrEntryUrl, config.ui.ssrIntegrity);
28
- }
29
-
30
- await ensureNodeRuntimePlugin();
31
- await registerRemote({
32
- name: config.ui.name,
33
- entry: ssrEntryUrl,
34
- type: "script",
35
- });
36
-
37
- const loadedModule = await loadRemoteModule<any>(`${config.ui.name}/Router`, { from: "build" });
38
- if (!loadedModule) {
39
- throw new Error(`Module not found: ${config.ui.name}/Router`);
40
- }
41
-
42
- return loadedModule.default as RouterModule;
43
- }