everything-dev 0.3.2 → 1.3.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.
- package/README.md +64 -0
- package/cli.js +10 -0
- package/dist/_virtual/_rolldown/runtime.cjs +29 -0
- package/dist/api-contract.cjs +172 -0
- package/dist/api-contract.cjs.map +1 -0
- package/dist/api-contract.mjs +171 -0
- package/dist/api-contract.mjs.map +1 -0
- package/dist/api.cjs +124 -0
- package/dist/api.cjs.map +1 -0
- package/dist/api.d.cts +36 -0
- package/dist/api.d.cts.map +1 -0
- package/dist/api.d.mts +36 -0
- package/dist/api.d.mts.map +1 -0
- package/dist/api.mjs +119 -0
- package/dist/api.mjs.map +1 -0
- package/dist/app.cjs +156 -0
- package/dist/app.cjs.map +1 -0
- package/dist/app.mjs +153 -0
- package/dist/app.mjs.map +1 -0
- package/dist/cli/catalog.cjs +30 -0
- package/dist/cli/catalog.cjs.map +1 -0
- package/dist/cli/catalog.mjs +29 -0
- package/dist/cli/catalog.mjs.map +1 -0
- package/dist/cli/help.cjs +16 -0
- package/dist/cli/help.cjs.map +1 -0
- package/dist/cli/help.mjs +16 -0
- package/dist/cli/help.mjs.map +1 -0
- package/dist/cli/init.cjs +317 -0
- package/dist/cli/init.cjs.map +1 -0
- package/dist/cli/init.d.cts +36 -0
- package/dist/cli/init.d.cts.map +1 -0
- package/dist/cli/init.d.mts +36 -0
- package/dist/cli/init.d.mts.map +1 -0
- package/dist/cli/init.mjs +309 -0
- package/dist/cli/init.mjs.map +1 -0
- package/dist/cli/parse.cjs +96 -0
- package/dist/cli/parse.cjs.map +1 -0
- package/dist/cli/parse.mjs +95 -0
- package/dist/cli/parse.mjs.map +1 -0
- package/dist/cli/prompts.cjs +42 -0
- package/dist/cli/prompts.cjs.map +1 -0
- package/dist/cli/prompts.mjs +41 -0
- package/dist/cli/prompts.mjs.map +1 -0
- package/dist/cli.cjs +167 -0
- package/dist/cli.cjs.map +1 -0
- package/dist/cli.d.cts +1 -0
- package/dist/cli.d.mts +1 -0
- package/dist/cli.mjs +166 -0
- package/dist/cli.mjs.map +1 -0
- package/dist/components/dev-view.cjs +307 -0
- package/dist/components/dev-view.cjs.map +1 -0
- package/dist/components/dev-view.mjs +306 -0
- package/dist/components/dev-view.mjs.map +1 -0
- package/dist/components/streaming-view.cjs +146 -0
- package/dist/components/streaming-view.cjs.map +1 -0
- package/dist/components/streaming-view.mjs +144 -0
- package/dist/components/streaming-view.mjs.map +1 -0
- package/dist/config.cjs +280 -0
- package/dist/config.cjs.map +1 -0
- package/dist/config.d.cts +35 -0
- package/dist/config.d.cts.map +1 -0
- package/dist/config.d.mts +35 -0
- package/dist/config.d.mts.map +1 -0
- package/dist/config.mjs +266 -0
- package/dist/config.mjs.map +1 -0
- package/dist/contract.cjs +209 -0
- package/dist/contract.cjs.map +1 -0
- package/dist/contract.d.cts +490 -0
- package/dist/contract.d.cts.map +1 -0
- package/dist/contract.d.mts +490 -0
- package/dist/contract.d.mts.map +1 -0
- package/dist/contract.meta.cjs +104 -0
- package/dist/contract.meta.cjs.map +1 -0
- package/dist/contract.meta.d.cts +141 -0
- package/dist/contract.meta.d.cts.map +1 -0
- package/dist/contract.meta.d.mts +141 -0
- package/dist/contract.meta.d.mts.map +1 -0
- package/dist/contract.meta.mjs +102 -0
- package/dist/contract.meta.mjs.map +1 -0
- package/dist/contract.mjs +186 -0
- package/dist/contract.mjs.map +1 -0
- package/dist/dev-logs.cjs +53 -0
- package/dist/dev-logs.cjs.map +1 -0
- package/dist/dev-logs.mjs +51 -0
- package/dist/dev-logs.mjs.map +1 -0
- package/dist/dev-session.cjs +195 -0
- package/dist/dev-session.cjs.map +1 -0
- package/dist/dev-session.mjs +194 -0
- package/dist/dev-session.mjs.map +1 -0
- package/dist/fastkv.cjs +89 -0
- package/dist/fastkv.cjs.map +1 -0
- package/dist/fastkv.d.cts +11 -0
- package/dist/fastkv.d.cts.map +1 -0
- package/dist/fastkv.d.mts +11 -0
- package/dist/fastkv.d.mts.map +1 -0
- package/dist/fastkv.mjs +82 -0
- package/dist/fastkv.mjs.map +1 -0
- package/dist/federation.server.cjs +27 -0
- package/dist/federation.server.cjs.map +1 -0
- package/dist/federation.server.mjs +27 -0
- package/dist/federation.server.mjs.map +1 -0
- package/dist/host.cjs +367 -0
- package/dist/host.cjs.map +1 -0
- package/dist/host.d.cts +22 -0
- package/dist/host.d.cts.map +1 -0
- package/dist/host.d.mts +22 -0
- package/dist/host.d.mts.map +1 -0
- package/dist/host.mjs +364 -0
- package/dist/host.mjs.map +1 -0
- package/dist/index.cjs +122 -0
- package/dist/index.d.cts +7 -0
- package/dist/index.d.mts +7 -0
- package/dist/index.mjs +9 -0
- package/dist/integrity.cjs +39 -0
- package/dist/integrity.cjs.map +1 -0
- package/dist/integrity.d.cts +7 -0
- package/dist/integrity.d.cts.map +1 -0
- package/dist/integrity.d.mts +7 -0
- package/dist/integrity.d.mts.map +1 -0
- package/dist/integrity.mjs +35 -0
- package/dist/integrity.mjs.map +1 -0
- package/dist/mf.cjs +77 -0
- package/dist/mf.cjs.map +1 -0
- package/dist/mf.d.cts +19 -0
- package/dist/mf.d.cts.map +1 -0
- package/dist/mf.d.mts +19 -0
- package/dist/mf.d.mts.map +1 -0
- package/dist/mf.mjs +71 -0
- package/dist/mf.mjs.map +1 -0
- package/dist/near-cli.cjs +196 -0
- package/dist/near-cli.cjs.map +1 -0
- package/dist/near-cli.mjs +193 -0
- package/dist/near-cli.mjs.map +1 -0
- package/dist/network.cjs +9 -0
- package/dist/network.cjs.map +1 -0
- package/dist/network.mjs +8 -0
- package/dist/network.mjs.map +1 -0
- package/dist/orchestrator.cjs +441 -0
- package/dist/orchestrator.cjs.map +1 -0
- package/dist/orchestrator.d.cts +40 -0
- package/dist/orchestrator.d.cts.map +1 -0
- package/dist/orchestrator.d.mts +40 -0
- package/dist/orchestrator.d.mts.map +1 -0
- package/dist/orchestrator.mjs +436 -0
- package/dist/orchestrator.mjs.map +1 -0
- package/dist/plugin.cjs +825 -0
- package/dist/plugin.cjs.map +1 -0
- package/dist/plugin.d.cts +347 -0
- package/dist/plugin.d.cts.map +1 -0
- package/dist/plugin.d.mts +348 -0
- package/dist/plugin.d.mts.map +1 -0
- package/dist/plugin.mjs +822 -0
- package/dist/plugin.mjs.map +1 -0
- package/dist/process-registry.cjs +120 -0
- package/dist/process-registry.cjs.map +1 -0
- package/dist/process-registry.d.cts +25 -0
- package/dist/process-registry.d.cts.map +1 -0
- package/dist/process-registry.d.mts +25 -0
- package/dist/process-registry.d.mts.map +1 -0
- package/dist/process-registry.mjs +119 -0
- package/dist/process-registry.mjs.map +1 -0
- package/dist/sdk.cjs +61 -0
- package/dist/sdk.d.cts +5 -0
- package/dist/sdk.d.mts +5 -0
- package/dist/sdk.mjs +6 -0
- package/dist/shared.cjs +143 -0
- package/dist/shared.cjs.map +1 -0
- package/dist/shared.d.cts +33 -0
- package/dist/shared.d.cts.map +1 -0
- package/dist/shared.d.mts +33 -0
- package/dist/shared.d.mts.map +1 -0
- package/dist/shared.mjs +140 -0
- package/dist/shared.mjs.map +1 -0
- package/dist/types.cjs +160 -0
- package/dist/types.cjs.map +1 -0
- package/dist/types.d.cts +269 -0
- package/dist/types.d.cts.map +1 -0
- package/dist/types.d.mts +269 -0
- package/dist/types.d.mts.map +1 -0
- package/dist/types.mjs +144 -0
- package/dist/types.mjs.map +1 -0
- package/dist/ui/head.cjs +67 -0
- package/dist/ui/head.cjs.map +1 -0
- package/dist/ui/head.d.cts +19 -0
- package/dist/ui/head.d.cts.map +1 -0
- package/dist/ui/head.d.mts +19 -0
- package/dist/ui/head.d.mts.map +1 -0
- package/dist/ui/head.mjs +61 -0
- package/dist/ui/head.mjs.map +1 -0
- package/dist/ui/index.cjs +32 -0
- package/dist/ui/index.d.cts +7 -0
- package/dist/ui/index.d.mts +7 -0
- package/dist/ui/index.mjs +6 -0
- package/dist/ui/metadata.cjs +106 -0
- package/dist/ui/metadata.cjs.map +1 -0
- package/dist/ui/metadata.d.cts +35 -0
- package/dist/ui/metadata.d.cts.map +1 -0
- package/dist/ui/metadata.d.mts +35 -0
- package/dist/ui/metadata.d.mts.map +1 -0
- package/dist/ui/metadata.mjs +100 -0
- package/dist/ui/metadata.mjs.map +1 -0
- package/dist/ui/router.cjs +56 -0
- package/dist/ui/router.cjs.map +1 -0
- package/dist/ui/router.d.cts +11 -0
- package/dist/ui/router.d.cts.map +1 -0
- package/dist/ui/router.d.mts +11 -0
- package/dist/ui/router.d.mts.map +1 -0
- package/dist/ui/router.mjs +51 -0
- package/dist/ui/router.mjs.map +1 -0
- package/dist/ui/runtime.cjs +65 -0
- package/dist/ui/runtime.cjs.map +1 -0
- package/dist/ui/runtime.d.cts +29 -0
- package/dist/ui/runtime.d.cts.map +1 -0
- package/dist/ui/runtime.d.mts +29 -0
- package/dist/ui/runtime.d.mts.map +1 -0
- package/dist/ui/runtime.mjs +53 -0
- package/dist/ui/runtime.mjs.map +1 -0
- package/dist/ui/types.cjs +0 -0
- package/dist/ui/types.d.cts +52 -0
- package/dist/ui/types.d.cts.map +1 -0
- package/dist/ui/types.d.mts +52 -0
- package/dist/ui/types.d.mts.map +1 -0
- package/dist/ui/types.mjs +1 -0
- package/dist/utils/banner.cjs +24 -0
- package/dist/utils/banner.cjs.map +1 -0
- package/dist/utils/banner.mjs +23 -0
- package/dist/utils/banner.mjs.map +1 -0
- package/dist/utils/linkify.cjs +15 -0
- package/dist/utils/linkify.cjs.map +1 -0
- package/dist/utils/linkify.mjs +14 -0
- package/dist/utils/linkify.mjs.map +1 -0
- package/dist/utils/run.cjs +40 -0
- package/dist/utils/run.cjs.map +1 -0
- package/dist/utils/run.mjs +39 -0
- package/dist/utils/run.mjs.map +1 -0
- package/dist/utils/theme.cjs +44 -0
- package/dist/utils/theme.cjs.map +1 -0
- package/dist/utils/theme.mjs +37 -0
- package/dist/utils/theme.mjs.map +1 -0
- package/package.json +269 -80
- package/src/api-contract.ts +309 -0
- package/src/api.ts +181 -0
- package/src/app.ts +346 -0
- package/src/cli/catalog.ts +49 -0
- package/src/cli/help.ts +13 -0
- package/src/cli/init.ts +415 -0
- package/src/cli/parse.ts +130 -0
- package/src/cli/prompts.ts +64 -0
- package/src/cli.ts +203 -1507
- package/src/components/dev-view.tsx +104 -41
- package/src/components/streaming-view.ts +89 -22
- package/src/config.ts +462 -532
- package/src/contract.meta.ts +96 -0
- package/src/contract.ts +164 -561
- package/src/dev-logs.ts +85 -0
- package/src/dev-session.ts +318 -0
- package/src/fastkv.ts +153 -0
- package/src/federation.server.ts +43 -0
- package/src/host.ts +526 -0
- package/src/index.ts +6 -3
- package/src/integrity.ts +54 -0
- package/src/mf.ts +105 -0
- package/src/near-cli.ts +284 -0
- package/src/network.ts +3 -0
- package/src/orchestrator.ts +648 -0
- package/src/plugin.ts +1116 -2303
- package/src/process-registry.ts +154 -0
- package/src/scripts/sync-api-contract.ts +24 -0
- package/src/sdk.ts +14 -0
- package/src/shared.ts +206 -0
- package/src/types.ts +152 -206
- package/src/ui/head.ts +34 -27
- package/src/ui/index.ts +3 -3
- package/src/ui/metadata.ts +95 -0
- package/src/ui/router.ts +22 -6
- package/src/ui/runtime.ts +55 -6
- package/src/ui/types.ts +24 -11
- package/src/utils/banner.ts +10 -6
- package/src/utils/run.ts +26 -27
- package/src/utils/theme.ts +3 -66
- package/src/components/monitor-view.tsx +0 -475
- package/src/components/status-view.tsx +0 -173
- package/src/lib/env.ts +0 -109
- package/src/lib/near-cli.ts +0 -289
- package/src/lib/nova.ts +0 -266
- package/src/lib/orchestrator.ts +0 -276
- package/src/lib/process-registry.ts +0 -166
- package/src/lib/process.ts +0 -549
- package/src/lib/resource-monitor/assertions.ts +0 -234
- package/src/lib/resource-monitor/command.ts +0 -283
- package/src/lib/resource-monitor/diff.ts +0 -157
- package/src/lib/resource-monitor/errors.ts +0 -127
- package/src/lib/resource-monitor/index.ts +0 -305
- package/src/lib/resource-monitor/platform/darwin.ts +0 -306
- package/src/lib/resource-monitor/platform/index.ts +0 -35
- package/src/lib/resource-monitor/platform/linux.ts +0 -332
- package/src/lib/resource-monitor/platform/windows.ts +0 -298
- package/src/lib/resource-monitor/snapshot.ts +0 -217
- package/src/lib/resource-monitor/types.ts +0 -74
- package/src/lib/session-recorder/errors.ts +0 -102
- package/src/lib/session-recorder/flows/login.ts +0 -210
- package/src/lib/session-recorder/index.ts +0 -361
- package/src/lib/session-recorder/playwright.ts +0 -257
- package/src/lib/session-recorder/report.ts +0 -353
- package/src/lib/session-recorder/server.ts +0 -267
- package/src/lib/session-recorder/types.ts +0 -115
- package/src/lib/sync.ts +0 -1
- package/src/ui/files.ts +0 -134
package/dist/host.mjs
ADDED
|
@@ -0,0 +1,364 @@
|
|
|
1
|
+
import { createStitchedRouter, loadApiPluginsFromRuntimeConfig } from "./api.mjs";
|
|
2
|
+
import { loadRouterModule } from "./federation.server.mjs";
|
|
3
|
+
import { serve } from "@hono/node-server";
|
|
4
|
+
import { OpenAPIHandler } from "@orpc/openapi/fetch";
|
|
5
|
+
import { OpenAPIReferencePlugin } from "@orpc/openapi/plugins";
|
|
6
|
+
import { RPCHandler } from "@orpc/server/fetch";
|
|
7
|
+
import { BatchHandlerPlugin } from "@orpc/server/plugins";
|
|
8
|
+
import { ZodToJsonSchemaConverter } from "@orpc/zod/zod4";
|
|
9
|
+
import { Hono } from "hono";
|
|
10
|
+
import { cors } from "hono/cors";
|
|
11
|
+
import { secureHeaders } from "hono/secure-headers";
|
|
12
|
+
|
|
13
|
+
//#region src/host.ts
|
|
14
|
+
function buildClientRuntimeConfig(runtimeConfig) {
|
|
15
|
+
return {
|
|
16
|
+
env: runtimeConfig.env,
|
|
17
|
+
account: runtimeConfig.account,
|
|
18
|
+
networkId: runtimeConfig.networkId,
|
|
19
|
+
hostUrl: runtimeConfig.hostUrl,
|
|
20
|
+
assetsUrl: runtimeConfig.ui.url,
|
|
21
|
+
apiBase: "/api",
|
|
22
|
+
rpcBase: "/api/rpc",
|
|
23
|
+
ui: runtimeConfig.ui ? {
|
|
24
|
+
name: runtimeConfig.ui.name,
|
|
25
|
+
url: runtimeConfig.ui.url,
|
|
26
|
+
entry: runtimeConfig.ui.entry,
|
|
27
|
+
integrity: runtimeConfig.ui.integrity
|
|
28
|
+
} : void 0,
|
|
29
|
+
api: runtimeConfig.api ? {
|
|
30
|
+
name: runtimeConfig.api.name,
|
|
31
|
+
url: runtimeConfig.api.url,
|
|
32
|
+
entry: runtimeConfig.api.entry,
|
|
33
|
+
integrity: runtimeConfig.api.integrity
|
|
34
|
+
} : void 0,
|
|
35
|
+
plugins: runtimeConfig.plugins ? Object.fromEntries(Object.entries(runtimeConfig.plugins).map(([key, plugin]) => [key, {
|
|
36
|
+
name: plugin.name,
|
|
37
|
+
url: plugin.url,
|
|
38
|
+
entry: plugin.entry,
|
|
39
|
+
integrity: plugin.integrity
|
|
40
|
+
}])) : void 0
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function renderLoadingShell(runtimeConfig, error) {
|
|
44
|
+
const bootstrap = `window.__RUNTIME_CONFIG__ = ${JSON.stringify(runtimeConfig)};window.addEventListener('load', function handleEverythingDevHydrate() { window.__hydrate?.(); }, { once: true });`;
|
|
45
|
+
const errorMarkup = error ? `<p style="color: #fca5a5;">Error loading UI: ${escapeHtml(error)}</p>` : "<p>Loading UI...</p>";
|
|
46
|
+
const uiIntegrity = runtimeConfig.ui?.integrity;
|
|
47
|
+
const sriAttr = uiIntegrity ? ` integrity="${uiIntegrity}" crossorigin="anonymous"` : "";
|
|
48
|
+
return `
|
|
49
|
+
<!DOCTYPE html>
|
|
50
|
+
<html lang="en">
|
|
51
|
+
<head>
|
|
52
|
+
<meta charset="utf-8" />
|
|
53
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
54
|
+
<title>Loading...</title>
|
|
55
|
+
<style>
|
|
56
|
+
body { background: #171717; color: #fafafa; display: flex; align-items: center; justify-content: center; height: 100vh; font-family: system-ui; }
|
|
57
|
+
.fade { animation: fadeIn 0.3s ease-in; text-align: center; padding: 2rem; }
|
|
58
|
+
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
|
|
59
|
+
</style>
|
|
60
|
+
${runtimeConfig.assetsUrl ? `<script src="${runtimeConfig.assetsUrl}/remoteEntry.js"${sriAttr}><\/script>` : ""}
|
|
61
|
+
<script>${bootstrap}<\/script>
|
|
62
|
+
</head>
|
|
63
|
+
<body>
|
|
64
|
+
<div id="root" class="fade">${errorMarkup}</div>
|
|
65
|
+
</body>
|
|
66
|
+
</html>
|
|
67
|
+
`;
|
|
68
|
+
}
|
|
69
|
+
function escapeHtml(value) {
|
|
70
|
+
return value.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">").replaceAll("\"", """).replaceAll("'", "'");
|
|
71
|
+
}
|
|
72
|
+
function createHostServer(config) {
|
|
73
|
+
const port = config.port ?? 3e3;
|
|
74
|
+
const { runtimeConfig } = config;
|
|
75
|
+
let shutdownImpl = null;
|
|
76
|
+
const ready = (async () => {
|
|
77
|
+
shutdownImpl = (await runHostServer({
|
|
78
|
+
runtimeConfig,
|
|
79
|
+
port
|
|
80
|
+
})).shutdown;
|
|
81
|
+
})();
|
|
82
|
+
const shutdown = async () => {
|
|
83
|
+
console.log("[Host] Shutting down...");
|
|
84
|
+
const timeout = setTimeout(() => {
|
|
85
|
+
console.log("[Host] Force exit");
|
|
86
|
+
process.exit(0);
|
|
87
|
+
}, 5e3);
|
|
88
|
+
await ready.catch(() => {});
|
|
89
|
+
if (shutdownImpl) await shutdownImpl().catch(() => {});
|
|
90
|
+
clearTimeout(timeout);
|
|
91
|
+
console.log("[Host] Shutdown complete");
|
|
92
|
+
};
|
|
93
|
+
return {
|
|
94
|
+
ready,
|
|
95
|
+
shutdown
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
async function runHostServer(opts) {
|
|
99
|
+
const { runtimeConfig, port } = opts;
|
|
100
|
+
let apiPlugins = [];
|
|
101
|
+
let baseApiPlugin = null;
|
|
102
|
+
let apiPluginError = null;
|
|
103
|
+
let apiPluginLoading = null;
|
|
104
|
+
let ssrRouterModule = null;
|
|
105
|
+
let ssrRouterError = null;
|
|
106
|
+
let ssrRouterLoading = null;
|
|
107
|
+
let rpcHandler = null;
|
|
108
|
+
let openApiHandler = null;
|
|
109
|
+
const clientRuntimeConfig = buildClientRuntimeConfig(runtimeConfig);
|
|
110
|
+
const initApiHandlers = () => {
|
|
111
|
+
const stitchedRouter = createStitchedRouter(baseApiPlugin?.router ?? {}, apiPlugins.filter((plugin) => plugin.key !== "api"));
|
|
112
|
+
if (!baseApiPlugin) {
|
|
113
|
+
rpcHandler = null;
|
|
114
|
+
openApiHandler = null;
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
rpcHandler = new RPCHandler(stitchedRouter, { plugins: [new BatchHandlerPlugin()] });
|
|
118
|
+
openApiHandler = new OpenAPIHandler(stitchedRouter, { plugins: [new OpenAPIReferencePlugin({ schemaConverters: [new ZodToJsonSchemaConverter()] })] });
|
|
119
|
+
};
|
|
120
|
+
const ensureApiPluginLoaded = async () => {
|
|
121
|
+
if (apiPlugins.length > 0) return {
|
|
122
|
+
base: baseApiPlugin,
|
|
123
|
+
plugins: apiPlugins,
|
|
124
|
+
errors: []
|
|
125
|
+
};
|
|
126
|
+
if (!runtimeConfig.api) return null;
|
|
127
|
+
if (apiPluginLoading) return apiPluginLoading;
|
|
128
|
+
apiPluginLoading = loadApiPluginsFromRuntimeConfig(runtimeConfig, process.env).then((loaded) => {
|
|
129
|
+
if (loaded) {
|
|
130
|
+
apiPlugins = loaded.plugins;
|
|
131
|
+
baseApiPlugin = loaded.base;
|
|
132
|
+
apiPluginError = loaded.errors.length > 0 ? loaded.errors.map((item) => item.error).join("; ") : null;
|
|
133
|
+
initApiHandlers();
|
|
134
|
+
}
|
|
135
|
+
return loaded;
|
|
136
|
+
}).catch((e) => {
|
|
137
|
+
apiPluginError = e instanceof Error ? e.message : String(e);
|
|
138
|
+
return null;
|
|
139
|
+
}).finally(() => {
|
|
140
|
+
apiPluginLoading = null;
|
|
141
|
+
});
|
|
142
|
+
return apiPluginLoading;
|
|
143
|
+
};
|
|
144
|
+
const ensureRouterModuleLoaded = async () => {
|
|
145
|
+
if (ssrRouterModule) return ssrRouterModule;
|
|
146
|
+
if (ssrRouterLoading) return ssrRouterLoading;
|
|
147
|
+
ssrRouterLoading = loadRouterModule(runtimeConfig).then((routerModule) => {
|
|
148
|
+
ssrRouterModule = routerModule;
|
|
149
|
+
ssrRouterError = null;
|
|
150
|
+
return routerModule;
|
|
151
|
+
}).catch((error) => {
|
|
152
|
+
ssrRouterError = error instanceof Error ? error.message : String(error);
|
|
153
|
+
return null;
|
|
154
|
+
}).finally(() => {
|
|
155
|
+
ssrRouterLoading = null;
|
|
156
|
+
});
|
|
157
|
+
return ssrRouterLoading;
|
|
158
|
+
};
|
|
159
|
+
ensureApiPluginLoaded();
|
|
160
|
+
ensureRouterModuleLoaded();
|
|
161
|
+
const app = new Hono();
|
|
162
|
+
const corsOrigins = process.env.CORS_ORIGIN?.split(",").map((o) => o.trim()) ?? [runtimeConfig.hostUrl, ...runtimeConfig.ui?.url ? [runtimeConfig.ui.url] : []];
|
|
163
|
+
if (!process.env.CORS_ORIGIN && runtimeConfig.env === "production") console.warn("[Security] CORS_ORIGIN is not set in production. Using host and UI URLs as allowed origins.");
|
|
164
|
+
app.use("/*", cors({
|
|
165
|
+
origin: corsOrigins,
|
|
166
|
+
credentials: true
|
|
167
|
+
}));
|
|
168
|
+
app.use("*", secureHeaders());
|
|
169
|
+
app.get("/health", (c) => c.text("OK"));
|
|
170
|
+
app.get("/ready", async (c) => {
|
|
171
|
+
const probe = async (url, timeoutMs = 400) => {
|
|
172
|
+
const started = Date.now();
|
|
173
|
+
const controller = new AbortController();
|
|
174
|
+
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
175
|
+
try {
|
|
176
|
+
const res = await fetch(url, { signal: controller.signal });
|
|
177
|
+
return {
|
|
178
|
+
name: "",
|
|
179
|
+
url,
|
|
180
|
+
required: true,
|
|
181
|
+
ok: res.ok,
|
|
182
|
+
status: res.status,
|
|
183
|
+
latencyMs: Date.now() - started
|
|
184
|
+
};
|
|
185
|
+
} catch (e) {
|
|
186
|
+
return {
|
|
187
|
+
name: "",
|
|
188
|
+
url,
|
|
189
|
+
required: true,
|
|
190
|
+
ok: false,
|
|
191
|
+
latencyMs: Date.now() - started,
|
|
192
|
+
error: e instanceof Error ? e.message : String(e)
|
|
193
|
+
};
|
|
194
|
+
} finally {
|
|
195
|
+
clearTimeout(timer);
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
const checks = [];
|
|
199
|
+
if (runtimeConfig.ui?.url) {
|
|
200
|
+
const base = runtimeConfig.ui.url.replace(/\/$/, "");
|
|
201
|
+
const manifest = await probe(`${base}/mf-manifest.json`);
|
|
202
|
+
manifest.name = "ui";
|
|
203
|
+
manifest.required = false;
|
|
204
|
+
checks.push(manifest);
|
|
205
|
+
if (!manifest.ok) {
|
|
206
|
+
const remoteEntry = await probe(`${base}/remoteEntry.js`);
|
|
207
|
+
remoteEntry.name = "ui";
|
|
208
|
+
remoteEntry.required = true;
|
|
209
|
+
checks.push(remoteEntry);
|
|
210
|
+
} else manifest.required = true;
|
|
211
|
+
}
|
|
212
|
+
if (runtimeConfig.ui?.ssrUrl) {
|
|
213
|
+
const ssr = await probe(`${runtimeConfig.ui.ssrUrl.replace(/\/$/, "")}/`);
|
|
214
|
+
ssr.name = "ui-ssr";
|
|
215
|
+
ssr.required = false;
|
|
216
|
+
checks.push(ssr);
|
|
217
|
+
}
|
|
218
|
+
if (runtimeConfig.api?.url) {
|
|
219
|
+
const api = await probe(`${runtimeConfig.api.url.replace(/\/$/, "")}/`);
|
|
220
|
+
api.name = "api";
|
|
221
|
+
api.required = true;
|
|
222
|
+
checks.push(api);
|
|
223
|
+
}
|
|
224
|
+
if (runtimeConfig.api) {
|
|
225
|
+
checks.push({
|
|
226
|
+
name: "api-plugin",
|
|
227
|
+
url: runtimeConfig.api.entry,
|
|
228
|
+
required: true,
|
|
229
|
+
ok: baseApiPlugin !== null,
|
|
230
|
+
status: baseApiPlugin !== null ? 200 : 503,
|
|
231
|
+
error: baseApiPlugin !== null ? void 0 : apiPluginLoading ? "loading" : apiPluginError ?? "not loaded"
|
|
232
|
+
});
|
|
233
|
+
if (!baseApiPlugin && !apiPluginLoading) ensureApiPluginLoaded();
|
|
234
|
+
}
|
|
235
|
+
for (const [key, plugin] of Object.entries(runtimeConfig.plugins ?? {})) {
|
|
236
|
+
const loaded = apiPlugins.find((item) => item.key === key);
|
|
237
|
+
checks.push({
|
|
238
|
+
name: key,
|
|
239
|
+
url: plugin.entry,
|
|
240
|
+
required: true,
|
|
241
|
+
ok: Boolean(loaded),
|
|
242
|
+
status: loaded ? 200 : 503,
|
|
243
|
+
error: loaded ? void 0 : apiPluginError ?? "not loaded"
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
const allRequiredOk = checks.filter((x) => x.required).every((x) => x.ok);
|
|
247
|
+
return c.json({
|
|
248
|
+
status: allRequiredOk ? "ready" : "not_ready",
|
|
249
|
+
host: {
|
|
250
|
+
url: runtimeConfig.hostUrl,
|
|
251
|
+
env: runtimeConfig.env
|
|
252
|
+
},
|
|
253
|
+
checks,
|
|
254
|
+
timestamp: (/* @__PURE__ */ new Date()).toISOString()
|
|
255
|
+
}, allRequiredOk ? 200 : 503);
|
|
256
|
+
});
|
|
257
|
+
app.get("/api/_health", (c) => c.json({
|
|
258
|
+
status: "ready",
|
|
259
|
+
mode: runtimeConfig.env,
|
|
260
|
+
ui: runtimeConfig.ui?.url ?? null,
|
|
261
|
+
uiSsr: runtimeConfig.ui?.ssrUrl ?? null,
|
|
262
|
+
ssrRouterLoaded: ssrRouterModule !== null,
|
|
263
|
+
ssrRouterLoading: ssrRouterLoading !== null,
|
|
264
|
+
ssrRouterError,
|
|
265
|
+
api: runtimeConfig.api?.url ?? null,
|
|
266
|
+
apiPluginLoaded: baseApiPlugin !== null,
|
|
267
|
+
apiPluginLoading: apiPluginLoading !== null,
|
|
268
|
+
apiPluginError
|
|
269
|
+
}));
|
|
270
|
+
app.all("/api/rpc/*", async (c) => {
|
|
271
|
+
if (!rpcHandler) await ensureApiPluginLoaded();
|
|
272
|
+
if (!rpcHandler) return c.json({
|
|
273
|
+
error: "API plugin not loaded",
|
|
274
|
+
detail: apiPluginError
|
|
275
|
+
}, 503);
|
|
276
|
+
const result = await rpcHandler.handle(c.req.raw, {
|
|
277
|
+
prefix: "/api/rpc",
|
|
278
|
+
context: {}
|
|
279
|
+
});
|
|
280
|
+
return result.response ? c.newResponse(result.response.body, result.response) : c.text("Not Found", 404);
|
|
281
|
+
});
|
|
282
|
+
app.all("/api/*", async (c) => {
|
|
283
|
+
if (!openApiHandler) await ensureApiPluginLoaded();
|
|
284
|
+
if (!openApiHandler) return c.json({
|
|
285
|
+
error: "API plugin not loaded",
|
|
286
|
+
detail: apiPluginError
|
|
287
|
+
}, 503);
|
|
288
|
+
const result = await openApiHandler.handle(c.req.raw, {
|
|
289
|
+
prefix: "/api",
|
|
290
|
+
context: {}
|
|
291
|
+
});
|
|
292
|
+
return result.response ? c.newResponse(result.response.body, result.response) : c.text("Not Found", 404);
|
|
293
|
+
});
|
|
294
|
+
if (runtimeConfig.ui) {
|
|
295
|
+
app.all("/__mf/ui/*", async (c) => {
|
|
296
|
+
const targetUrl = `${runtimeConfig.ui.url}${c.req.path.replace("/__mf/ui", "")}`;
|
|
297
|
+
return await fetch(targetUrl, {
|
|
298
|
+
method: c.req.method,
|
|
299
|
+
headers: c.req.header()
|
|
300
|
+
});
|
|
301
|
+
});
|
|
302
|
+
if (runtimeConfig.ui.ssrUrl) app.all("/__mf/ui/ssr/*", async (c) => {
|
|
303
|
+
const targetUrl = `${runtimeConfig.ui.ssrUrl}${c.req.path.replace("/__mf/ui/ssr", "")}`;
|
|
304
|
+
return await fetch(targetUrl, {
|
|
305
|
+
method: c.req.method,
|
|
306
|
+
headers: c.req.header()
|
|
307
|
+
});
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
app.get("*", async (c) => {
|
|
311
|
+
const routerModule = await ensureRouterModuleLoaded();
|
|
312
|
+
if (!routerModule) return c.html(renderLoadingShell(clientRuntimeConfig, ssrRouterError), 503);
|
|
313
|
+
try {
|
|
314
|
+
const apiClient = baseApiPlugin?.createClient();
|
|
315
|
+
const result = await routerModule.renderToStream(c.req.raw, {
|
|
316
|
+
assetsUrl: runtimeConfig.ui.url,
|
|
317
|
+
runtimeConfig: clientRuntimeConfig,
|
|
318
|
+
apiClient
|
|
319
|
+
});
|
|
320
|
+
return new Response(result.stream, {
|
|
321
|
+
status: result.statusCode,
|
|
322
|
+
headers: result.headers
|
|
323
|
+
});
|
|
324
|
+
} catch (error) {
|
|
325
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
326
|
+
return c.html(renderLoadingShell(clientRuntimeConfig, message), 500);
|
|
327
|
+
}
|
|
328
|
+
});
|
|
329
|
+
const hostname = process.env.HOST ?? "0.0.0.0";
|
|
330
|
+
let resolveReady = null;
|
|
331
|
+
const ready = new Promise((resolve) => {
|
|
332
|
+
resolveReady = resolve;
|
|
333
|
+
});
|
|
334
|
+
const proxiedFetch = (req) => {
|
|
335
|
+
const url = new URL(req.url);
|
|
336
|
+
const forwardedProto = req.headers.get("x-forwarded-proto");
|
|
337
|
+
const forwardedHost = req.headers.get("x-forwarded-host");
|
|
338
|
+
if (forwardedProto) url.protocol = forwardedProto;
|
|
339
|
+
if (forwardedHost) url.host = forwardedHost;
|
|
340
|
+
if (forwardedProto || forwardedHost) req = new Request(url, req);
|
|
341
|
+
return app.fetch(req);
|
|
342
|
+
};
|
|
343
|
+
const server = serve({
|
|
344
|
+
fetch: proxiedFetch,
|
|
345
|
+
port,
|
|
346
|
+
hostname
|
|
347
|
+
}, (info) => {
|
|
348
|
+
console.log(`[Host] Server running at http://${hostname}:${info.port}`);
|
|
349
|
+
console.log(`[Host] API: http://${hostname}:${info.port}/api/rpc`);
|
|
350
|
+
resolveReady?.();
|
|
351
|
+
});
|
|
352
|
+
await ready;
|
|
353
|
+
return { shutdown: () => new Promise((resolve) => {
|
|
354
|
+
try {
|
|
355
|
+
server.close(() => resolve());
|
|
356
|
+
} catch {
|
|
357
|
+
resolve();
|
|
358
|
+
}
|
|
359
|
+
}) };
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
//#endregion
|
|
363
|
+
export { createHostServer, runHostServer };
|
|
364
|
+
//# sourceMappingURL=host.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"host.mjs","names":[],"sources":["../src/host.ts"],"sourcesContent":["import { serve } from \"@hono/node-server\";\nimport { OpenAPIHandler } from \"@orpc/openapi/fetch\";\nimport { OpenAPIReferencePlugin } from \"@orpc/openapi/plugins\";\nimport { RPCHandler } from \"@orpc/server/fetch\";\nimport { BatchHandlerPlugin } from \"@orpc/server/plugins\";\nimport { ZodToJsonSchemaConverter } from \"@orpc/zod/zod4\";\nimport { Hono } from \"hono\";\nimport { cors } from \"hono/cors\";\nimport { secureHeaders } from \"hono/secure-headers\";\nimport {\n createStitchedRouter,\n type LoadedPluginResult,\n type LoadedPluginsResult,\n loadApiPluginsFromRuntimeConfig,\n} from \"./api\";\nimport { loadRouterModule, type RouterModule } from \"./federation.server\";\nimport type { ClientRuntimeConfig, RuntimeConfig } from \"./types\";\n\nexport interface HostServerConfig {\n runtimeConfig: RuntimeConfig;\n configDir: string;\n port?: number;\n}\n\nexport interface HostServerHandle {\n ready: Promise<void>;\n shutdown: () => Promise<void>;\n}\n\nfunction buildClientRuntimeConfig(runtimeConfig: RuntimeConfig): ClientRuntimeConfig {\n return {\n env: runtimeConfig.env,\n account: runtimeConfig.account,\n networkId: runtimeConfig.networkId,\n hostUrl: runtimeConfig.hostUrl,\n assetsUrl: runtimeConfig.ui.url,\n apiBase: \"/api\",\n rpcBase: \"/api/rpc\",\n ui: runtimeConfig.ui\n ? {\n name: runtimeConfig.ui.name,\n url: runtimeConfig.ui.url,\n entry: runtimeConfig.ui.entry,\n integrity: runtimeConfig.ui.integrity,\n }\n : undefined,\n api: runtimeConfig.api\n ? {\n name: runtimeConfig.api.name,\n url: runtimeConfig.api.url,\n entry: runtimeConfig.api.entry,\n integrity: runtimeConfig.api.integrity,\n }\n : undefined,\n plugins: runtimeConfig.plugins\n ? Object.fromEntries(\n Object.entries(runtimeConfig.plugins).map(([key, plugin]) => [\n key,\n {\n name: plugin.name,\n url: plugin.url,\n entry: plugin.entry,\n integrity: plugin.integrity,\n },\n ]),\n )\n : undefined,\n };\n}\n\nfunction renderLoadingShell(runtimeConfig: ClientRuntimeConfig, error?: string | null) {\n const bootstrap = `window.__RUNTIME_CONFIG__ = ${JSON.stringify(runtimeConfig)};window.addEventListener('load', function handleEverythingDevHydrate() { window.__hydrate?.(); }, { once: true });`;\n const errorMarkup = error\n ? `<p style=\"color: #fca5a5;\">Error loading UI: ${escapeHtml(error)}</p>`\n : \"<p>Loading UI...</p>\";\n\n const uiIntegrity = runtimeConfig.ui?.integrity;\n const sriAttr = uiIntegrity ? ` integrity=\"${uiIntegrity}\" crossorigin=\"anonymous\"` : \"\";\n\n return `\n\t\t<!DOCTYPE html>\n\t\t<html lang=\"en\">\n\t\t\t<head>\n\t\t\t\t<meta charset=\"utf-8\" />\n\t\t\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n\t\t\t\t<title>Loading...</title>\n\t\t\t\t<style>\n\t\t\t\t\tbody { background: #171717; color: #fafafa; display: flex; align-items: center; justify-content: center; height: 100vh; font-family: system-ui; }\n\t\t\t\t\t.fade { animation: fadeIn 0.3s ease-in; text-align: center; padding: 2rem; }\n\t\t\t\t\t@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }\n\t\t\t\t</style>\n\t\t\t\t${runtimeConfig.assetsUrl ? `<script src=\"${runtimeConfig.assetsUrl}/remoteEntry.js\"${sriAttr}></script>` : \"\"}\n\t\t\t\t<script>${bootstrap}</script>\n\t\t\t</head>\n\t\t\t<body>\n\t\t\t\t<div id=\"root\" class=\"fade\">${errorMarkup}</div>\n\t\t\t</body>\n\t\t</html>\n\t`;\n}\n\nfunction escapeHtml(value: string) {\n return value\n .replaceAll(\"&\", \"&\")\n .replaceAll(\"<\", \"<\")\n .replaceAll(\">\", \">\")\n .replaceAll('\"', \""\")\n .replaceAll(\"'\", \"'\");\n}\n\nexport function createHostServer(config: HostServerConfig): HostServerHandle {\n const port = config.port ?? 3000;\n const { runtimeConfig } = config;\n\n let shutdownImpl: (() => Promise<void>) | null = null;\n\n const ready = (async () => {\n const started = await runHostServer({ runtimeConfig, port });\n shutdownImpl = started.shutdown;\n })();\n\n const shutdown = async () => {\n console.log(\"[Host] Shutting down...\");\n const timeout = setTimeout(() => {\n console.log(\"[Host] Force exit\");\n process.exit(0);\n }, 5000);\n await ready.catch(() => {});\n if (shutdownImpl) {\n await shutdownImpl().catch(() => {});\n }\n clearTimeout(timeout);\n console.log(\"[Host] Shutdown complete\");\n };\n\n return { ready, shutdown };\n}\n\nasync function runHostServer(opts: {\n runtimeConfig: RuntimeConfig;\n port: number;\n}): Promise<{ shutdown: () => Promise<void> }> {\n const { runtimeConfig, port } = opts;\n\n let apiPlugins: LoadedPluginResult[] = [];\n let baseApiPlugin: LoadedPluginResult | null = null;\n let apiPluginError: string | null = null;\n let apiPluginLoading: Promise<LoadedPluginsResult | null> | null = null;\n let ssrRouterModule: RouterModule | null = null;\n let ssrRouterError: string | null = null;\n let ssrRouterLoading: Promise<RouterModule | null> | null = null;\n let rpcHandler: RPCHandler<any> | null = null;\n let openApiHandler: OpenAPIHandler<any> | null = null;\n\n const clientRuntimeConfig = buildClientRuntimeConfig(runtimeConfig);\n\n const initApiHandlers = () => {\n const baseRouter = baseApiPlugin?.router ?? {};\n const stitchedRouter = createStitchedRouter(\n baseRouter,\n apiPlugins.filter((plugin) => plugin.key !== \"api\"),\n );\n\n if (!baseApiPlugin) {\n rpcHandler = null;\n openApiHandler = null;\n return;\n }\n\n rpcHandler = new RPCHandler(stitchedRouter as any, {\n plugins: [new BatchHandlerPlugin()],\n });\n openApiHandler = new OpenAPIHandler(stitchedRouter as any, {\n plugins: [\n new OpenAPIReferencePlugin({\n schemaConverters: [new ZodToJsonSchemaConverter()],\n }),\n ],\n });\n };\n\n const ensureApiPluginLoaded = async (): Promise<LoadedPluginsResult | null> => {\n if (apiPlugins.length > 0) return { base: baseApiPlugin, plugins: apiPlugins, errors: [] };\n if (!runtimeConfig.api) return null;\n if (apiPluginLoading) return apiPluginLoading;\n\n apiPluginLoading = loadApiPluginsFromRuntimeConfig(runtimeConfig, process.env as any)\n .then((loaded) => {\n if (loaded) {\n apiPlugins = loaded.plugins;\n baseApiPlugin = loaded.base;\n apiPluginError =\n loaded.errors.length > 0 ? loaded.errors.map((item) => item.error).join(\"; \") : null;\n initApiHandlers();\n }\n return loaded;\n })\n .catch((e) => {\n apiPluginError = e instanceof Error ? e.message : String(e);\n return null;\n })\n .finally(() => {\n apiPluginLoading = null;\n });\n\n return apiPluginLoading;\n };\n\n const ensureRouterModuleLoaded = async (): Promise<RouterModule | null> => {\n if (ssrRouterModule) {\n return ssrRouterModule;\n }\n\n if (ssrRouterLoading) {\n return ssrRouterLoading;\n }\n\n ssrRouterLoading = loadRouterModule(runtimeConfig)\n .then((routerModule) => {\n ssrRouterModule = routerModule;\n ssrRouterError = null;\n return routerModule;\n })\n .catch((error) => {\n ssrRouterError = error instanceof Error ? error.message : String(error);\n return null;\n })\n .finally(() => {\n ssrRouterLoading = null;\n });\n\n return ssrRouterLoading;\n };\n\n // Kick off API plugin load in the background; host should still start even if\n // the remote isn't ready yet.\n void ensureApiPluginLoaded();\n void ensureRouterModuleLoaded();\n\n const app = new Hono();\n\n const corsOrigins = process.env.CORS_ORIGIN?.split(\",\").map((o) => o.trim()) ?? [\n runtimeConfig.hostUrl,\n ...(runtimeConfig.ui?.url ? [runtimeConfig.ui.url] : []),\n ];\n\n if (!process.env.CORS_ORIGIN && runtimeConfig.env === \"production\") {\n console.warn(\n \"[Security] CORS_ORIGIN is not set in production. Using host and UI URLs as allowed origins.\",\n );\n }\n\n app.use(\n \"/*\",\n cors({\n origin: corsOrigins,\n credentials: true,\n }),\n );\n\n app.use(\"*\", secureHeaders());\n\n app.get(\"/health\", (c) => c.text(\"OK\"));\n app.get(\"/ready\", async (c) => {\n type Check = {\n name: string;\n url: string;\n required: boolean;\n ok: boolean;\n status?: number;\n latencyMs?: number;\n error?: string;\n };\n\n const probe = async (url: string, timeoutMs = 400): Promise<Check> => {\n const started = Date.now();\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n try {\n const res = await fetch(url, { signal: controller.signal });\n return {\n name: \"\",\n url,\n required: true,\n ok: res.ok,\n status: res.status,\n latencyMs: Date.now() - started,\n };\n } catch (e) {\n return {\n name: \"\",\n url,\n required: true,\n ok: false,\n latencyMs: Date.now() - started,\n error: e instanceof Error ? e.message : String(e),\n };\n } finally {\n clearTimeout(timer);\n }\n };\n\n const checks: Check[] = [];\n\n if (runtimeConfig.ui?.url) {\n const base = runtimeConfig.ui.url.replace(/\\/$/, \"\");\n const manifest = await probe(`${base}/mf-manifest.json`);\n manifest.name = \"ui\";\n // mf-manifest.json is preferred but not always present; fall back to\n // remoteEntry.js for readiness.\n manifest.required = false;\n checks.push(manifest);\n if (!manifest.ok) {\n const remoteEntry = await probe(`${base}/remoteEntry.js`);\n remoteEntry.name = \"ui\";\n remoteEntry.required = true;\n checks.push(remoteEntry);\n } else {\n manifest.required = true;\n }\n }\n\n if (runtimeConfig.ui?.ssrUrl) {\n const base = runtimeConfig.ui.ssrUrl.replace(/\\/$/, \"\");\n const ssr = await probe(`${base}/`);\n ssr.name = \"ui-ssr\";\n ssr.required = false;\n checks.push(ssr);\n }\n\n if (runtimeConfig.api?.url) {\n const base = runtimeConfig.api.url.replace(/\\/$/, \"\");\n const api = await probe(`${base}/`);\n api.name = \"api\";\n api.required = true;\n checks.push(api);\n }\n\n if (runtimeConfig.api) {\n checks.push({\n name: \"api-plugin\",\n url: runtimeConfig.api.entry,\n required: true,\n ok: baseApiPlugin !== null,\n status: baseApiPlugin !== null ? 200 : 503,\n error:\n baseApiPlugin !== null\n ? undefined\n : apiPluginLoading\n ? \"loading\"\n : (apiPluginError ?? \"not loaded\"),\n });\n if (!baseApiPlugin && !apiPluginLoading) {\n void ensureApiPluginLoaded();\n }\n }\n\n for (const [key, plugin] of Object.entries(runtimeConfig.plugins ?? {})) {\n const loaded = apiPlugins.find((item) => item.key === key);\n checks.push({\n name: key,\n url: plugin.entry,\n required: true,\n ok: Boolean(loaded),\n status: loaded ? 200 : 503,\n error: loaded ? undefined : (apiPluginError ?? \"not loaded\"),\n });\n }\n\n const allRequiredOk = checks.filter((x) => x.required).every((x) => x.ok);\n\n return c.json(\n {\n status: allRequiredOk ? \"ready\" : \"not_ready\",\n host: {\n url: runtimeConfig.hostUrl,\n env: runtimeConfig.env,\n },\n checks,\n timestamp: new Date().toISOString(),\n },\n allRequiredOk ? 200 : 503,\n );\n });\n app.get(\"/api/_health\", (c) =>\n c.json({\n status: \"ready\",\n mode: runtimeConfig.env,\n ui: runtimeConfig.ui?.url ?? null,\n uiSsr: runtimeConfig.ui?.ssrUrl ?? null,\n ssrRouterLoaded: ssrRouterModule !== null,\n ssrRouterLoading: ssrRouterLoading !== null,\n ssrRouterError,\n api: runtimeConfig.api?.url ?? null,\n apiPluginLoaded: baseApiPlugin !== null,\n apiPluginLoading: apiPluginLoading !== null,\n apiPluginError,\n }),\n );\n\n app.all(\"/api/rpc/*\", async (c) => {\n if (!rpcHandler) {\n await ensureApiPluginLoaded();\n }\n if (!rpcHandler) {\n return c.json({ error: \"API plugin not loaded\", detail: apiPluginError }, 503);\n }\n const result = await rpcHandler.handle(c.req.raw, {\n prefix: \"/api/rpc\",\n context: {},\n });\n return result.response\n ? c.newResponse(result.response.body, result.response)\n : c.text(\"Not Found\", 404);\n });\n\n app.all(\"/api/*\", async (c) => {\n if (!openApiHandler) {\n await ensureApiPluginLoaded();\n }\n if (!openApiHandler) {\n return c.json({ error: \"API plugin not loaded\", detail: apiPluginError }, 503);\n }\n const result = await openApiHandler.handle(c.req.raw, {\n prefix: \"/api\",\n context: {},\n });\n return result.response\n ? c.newResponse(result.response.body, result.response)\n : c.text(\"Not Found\", 404);\n });\n\n if (runtimeConfig.ui) {\n app.all(\"/__mf/ui/*\", async (c) => {\n const targetUrl = `${runtimeConfig.ui!.url}${c.req.path.replace(\"/__mf/ui\", \"\")}`;\n const response = await fetch(targetUrl, {\n method: c.req.method,\n headers: c.req.header(),\n });\n return response;\n });\n\n if (runtimeConfig.ui.ssrUrl) {\n app.all(\"/__mf/ui/ssr/*\", async (c) => {\n const targetUrl = `${runtimeConfig.ui!.ssrUrl}${c.req.path.replace(\"/__mf/ui/ssr\", \"\")}`;\n const response = await fetch(targetUrl, {\n method: c.req.method,\n headers: c.req.header(),\n });\n return response;\n });\n }\n }\n\n app.get(\"*\", async (c) => {\n const routerModule = await ensureRouterModuleLoaded();\n\n if (!routerModule) {\n return c.html(renderLoadingShell(clientRuntimeConfig, ssrRouterError), 503);\n }\n\n try {\n const apiClient = baseApiPlugin?.createClient();\n\n const result = await routerModule.renderToStream(c.req.raw, {\n assetsUrl: runtimeConfig.ui.url,\n runtimeConfig: clientRuntimeConfig,\n apiClient,\n });\n\n return new Response(result.stream, {\n status: result.statusCode,\n headers: result.headers,\n });\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return c.html(renderLoadingShell(clientRuntimeConfig, message), 500);\n }\n });\n\n const hostname = process.env.HOST ?? \"0.0.0.0\";\n let resolveReady: (() => void) | null = null;\n const ready = new Promise<void>((resolve) => {\n resolveReady = resolve;\n });\n\n const proxiedFetch = (req: Request): Response | Promise<Response> => {\n const url = new URL(req.url);\n const forwardedProto = req.headers.get(\"x-forwarded-proto\");\n const forwardedHost = req.headers.get(\"x-forwarded-host\");\n\n if (forwardedProto) {\n url.protocol = forwardedProto;\n }\n if (forwardedHost) {\n url.host = forwardedHost;\n }\n\n if (forwardedProto || forwardedHost) {\n req = new Request(url, req);\n }\n\n return app.fetch(req);\n };\n\n const server = serve({ fetch: proxiedFetch, port, hostname }, (info) => {\n console.log(`[Host] Server running at http://${hostname}:${info.port}`);\n console.log(`[Host] API: http://${hostname}:${info.port}/api/rpc`);\n resolveReady?.();\n });\n\n await ready;\n\n return {\n shutdown: () =>\n new Promise<void>((resolve) => {\n try {\n server.close(() => resolve());\n } catch {\n resolve();\n }\n }),\n };\n}\n\nexport { runHostServer };\n"],"mappings":"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"}
|
package/dist/index.cjs
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
|
|
3
|
+
const require_fastkv = require('./fastkv.cjs');
|
|
4
|
+
require('./sdk.cjs');
|
|
5
|
+
const require_types = require('./types.cjs');
|
|
6
|
+
const require_config = require('./config.cjs');
|
|
7
|
+
const require_contract = require('./contract.cjs');
|
|
8
|
+
const require_contract_meta = require('./contract.meta.cjs');
|
|
9
|
+
require('./plugin.cjs');
|
|
10
|
+
let every_plugin_effect = require("every-plugin/effect");
|
|
11
|
+
let every_plugin = require("every-plugin");
|
|
12
|
+
let every_plugin_orpc = require("every-plugin/orpc");
|
|
13
|
+
let every_plugin_zod = require("every-plugin/zod");
|
|
14
|
+
|
|
15
|
+
exports.ApiPluginConfigSchema = require_types.ApiPluginConfigSchema;
|
|
16
|
+
exports.BosConfigSchema = require_types.BosConfigSchema;
|
|
17
|
+
exports.BosPluginRefSchema = require_types.BosPluginRefSchema;
|
|
18
|
+
exports.BosStagingSchema = require_types.BosStagingSchema;
|
|
19
|
+
exports.BuildOptionsSchema = require_contract.BuildOptionsSchema;
|
|
20
|
+
exports.BuildResultSchema = require_contract.BuildResultSchema;
|
|
21
|
+
exports.ClientRuntimeConfigSchema = require_types.ClientRuntimeConfigSchema;
|
|
22
|
+
exports.ClientRuntimeInfoSchema = require_types.ClientRuntimeInfoSchema;
|
|
23
|
+
exports.ConfigResultSchema = require_contract.ConfigResultSchema;
|
|
24
|
+
Object.defineProperty(exports, 'Context', {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
get: function () {
|
|
27
|
+
return every_plugin_effect.Context;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
exports.DevOptionsSchema = require_contract.DevOptionsSchema;
|
|
31
|
+
exports.DevResultSchema = require_contract.DevResultSchema;
|
|
32
|
+
Object.defineProperty(exports, 'Effect', {
|
|
33
|
+
enumerable: true,
|
|
34
|
+
get: function () {
|
|
35
|
+
return every_plugin_effect.Effect;
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
exports.FederationEntrySchema = require_types.FederationEntrySchema;
|
|
39
|
+
exports.HostConfigSchema = require_types.HostConfigSchema;
|
|
40
|
+
exports.InitOptionsSchema = require_contract.InitOptionsSchema;
|
|
41
|
+
exports.InitResultSchema = require_contract.InitResultSchema;
|
|
42
|
+
exports.KeyPublishOptionsSchema = require_contract.KeyPublishOptionsSchema;
|
|
43
|
+
exports.KeyPublishResultSchema = require_contract.KeyPublishResultSchema;
|
|
44
|
+
Object.defineProperty(exports, 'Layer', {
|
|
45
|
+
enumerable: true,
|
|
46
|
+
get: function () {
|
|
47
|
+
return every_plugin_effect.Layer;
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
exports.PluginAddOptionsSchema = require_contract.PluginAddOptionsSchema;
|
|
51
|
+
exports.PluginAddResultSchema = require_contract.PluginAddResultSchema;
|
|
52
|
+
exports.PluginListResultSchema = require_contract.PluginListResultSchema;
|
|
53
|
+
exports.PluginPublishOptionsSchema = require_contract.PluginPublishOptionsSchema;
|
|
54
|
+
exports.PluginPublishResultSchema = require_contract.PluginPublishResultSchema;
|
|
55
|
+
exports.PluginRemoveOptionsSchema = require_contract.PluginRemoveOptionsSchema;
|
|
56
|
+
exports.PluginRemoveResultSchema = require_contract.PluginRemoveResultSchema;
|
|
57
|
+
Object.defineProperty(exports, 'PluginRuntime', {
|
|
58
|
+
enumerable: true,
|
|
59
|
+
get: function () {
|
|
60
|
+
return every_plugin.PluginRuntime;
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
exports.PublishOptionsSchema = require_contract.PublishOptionsSchema;
|
|
64
|
+
exports.PublishResultSchema = require_contract.PublishResultSchema;
|
|
65
|
+
exports.RuntimeConfigSchema = require_types.RuntimeConfigSchema;
|
|
66
|
+
exports.RuntimePluginConfigSchema = require_types.RuntimePluginConfigSchema;
|
|
67
|
+
Object.defineProperty(exports, 'Scope', {
|
|
68
|
+
enumerable: true,
|
|
69
|
+
get: function () {
|
|
70
|
+
return every_plugin_effect.Scope;
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
exports.SharedConfigSchema = require_types.SharedConfigSchema;
|
|
74
|
+
exports.SharedDepConfigSchema = require_types.SharedDepConfigSchema;
|
|
75
|
+
exports.SourceModeSchema = require_types.SourceModeSchema;
|
|
76
|
+
exports.StartOptionsSchema = require_contract.StartOptionsSchema;
|
|
77
|
+
exports.StartResultSchema = require_contract.StartResultSchema;
|
|
78
|
+
exports.UiConfigSchema = require_types.UiConfigSchema;
|
|
79
|
+
exports.bosContract = require_contract.bosContract;
|
|
80
|
+
exports.buildRegistryConfigUrl = require_fastkv.buildRegistryConfigUrl;
|
|
81
|
+
exports.buildRegistryConfigUrlForNetwork = require_fastkv.buildRegistryConfigUrlForNetwork;
|
|
82
|
+
exports.buildRuntimePluginsForConfig = require_config.buildRuntimePluginsForConfig;
|
|
83
|
+
exports.clearConfigCache = require_config.clearConfigCache;
|
|
84
|
+
exports.cliCommandMeta = require_contract_meta.cliCommandMeta;
|
|
85
|
+
Object.defineProperty(exports, 'createPlugin', {
|
|
86
|
+
enumerable: true,
|
|
87
|
+
get: function () {
|
|
88
|
+
return every_plugin.createPlugin;
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
Object.defineProperty(exports, 'createPluginRuntime', {
|
|
92
|
+
enumerable: true,
|
|
93
|
+
get: function () {
|
|
94
|
+
return every_plugin.createPluginRuntime;
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
exports.fetchBosConfigFromFastKv = require_fastkv.fetchBosConfigFromFastKv;
|
|
98
|
+
exports.findConfigPath = require_config.findConfigPath;
|
|
99
|
+
exports.getConfig = require_config.getConfig;
|
|
100
|
+
exports.getFastKvBaseUrlForNetwork = require_fastkv.getFastKvBaseUrlForNetwork;
|
|
101
|
+
exports.getHostDevelopmentPort = require_config.getHostDevelopmentPort;
|
|
102
|
+
exports.getProjectRoot = require_config.getProjectRoot;
|
|
103
|
+
exports.getRegistryNamespaceForAccount = require_fastkv.getRegistryNamespaceForAccount;
|
|
104
|
+
exports.getRegistryNamespaceForNetwork = require_fastkv.getRegistryNamespaceForNetwork;
|
|
105
|
+
exports.isLocalDevelopmentTarget = require_config.isLocalDevelopmentTarget;
|
|
106
|
+
exports.loadBosConfig = require_config.loadBosConfig;
|
|
107
|
+
exports.loadConfig = require_config.loadConfig;
|
|
108
|
+
Object.defineProperty(exports, 'oc', {
|
|
109
|
+
enumerable: true,
|
|
110
|
+
get: function () {
|
|
111
|
+
return every_plugin_orpc.oc;
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
exports.parsePort = require_config.parsePort;
|
|
115
|
+
exports.resolveDevelopmentHostUrl = require_config.resolveDevelopmentHostUrl;
|
|
116
|
+
exports.resolveLocalDevelopmentPath = require_config.resolveLocalDevelopmentPath;
|
|
117
|
+
Object.defineProperty(exports, 'z', {
|
|
118
|
+
enumerable: true,
|
|
119
|
+
get: function () {
|
|
120
|
+
return every_plugin_zod.z;
|
|
121
|
+
}
|
|
122
|
+
});
|
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { AnyContractRouter, AnySchema, Context, Effect, Layer, LoadedPluginWithBinding, Plugin, PluginRuntime, Scope, createPlugin, createPluginRuntime, oc, z } from "./sdk.cjs";
|
|
2
|
+
import { ApiPluginConfig, ApiPluginConfigSchema, BosConfig, BosConfigSchema, BosPluginRef, BosPluginRefSchema, BosStaging, BosStagingSchema, ClientRuntimeConfig, ClientRuntimeConfigSchema, ClientRuntimeInfo, ClientRuntimeInfoSchema, FederationEntry, FederationEntrySchema, HostConfig, HostConfigSchema, RuntimeConfig, RuntimeConfigSchema, RuntimePluginConfig, RuntimePluginConfigSchema, SharedConfig, SharedConfigSchema, SharedDepConfig, SharedDepConfigSchema, SourceMode, SourceModeSchema, UiConfig, UiConfigSchema } from "./types.cjs";
|
|
3
|
+
import { ConfigResult, buildRuntimePluginsForConfig, clearConfigCache, findConfigPath, getConfig, getHostDevelopmentPort, getProjectRoot, isLocalDevelopmentTarget, loadBosConfig, loadConfig, parsePort, resolveDevelopmentHostUrl, resolveLocalDevelopmentPath } from "./config.cjs";
|
|
4
|
+
import { CliCommandMeta, cliCommandMeta } from "./contract.meta.cjs";
|
|
5
|
+
import { NetworkId, buildRegistryConfigUrl, buildRegistryConfigUrlForNetwork, fetchBosConfigFromFastKv, getFastKvBaseUrlForNetwork, getRegistryNamespaceForAccount, getRegistryNamespaceForNetwork } from "./fastkv.cjs";
|
|
6
|
+
import { BosConfigResult, BuildOptions, BuildOptionsSchema, BuildResultSchema, ConfigResultSchema, DevOptions, DevOptionsSchema, DevResultSchema, InitOptions, InitOptionsSchema, InitResult, InitResultSchema, KeyPublishOptions, KeyPublishOptionsSchema, KeyPublishResult, KeyPublishResultSchema, PluginAddOptions, PluginAddOptionsSchema, PluginAddResult, PluginAddResultSchema, PluginListResult, PluginListResultSchema, PluginPublishOptions, PluginPublishOptionsSchema, PluginPublishResult, PluginPublishResultSchema, PluginRemoveOptions, PluginRemoveOptionsSchema, PluginRemoveResult, PluginRemoveResultSchema, PublishOptions, PublishOptionsSchema, PublishResultSchema, StartOptions, StartOptionsSchema, StartResultSchema, bosContract } from "./contract.cjs";
|
|
7
|
+
export { AnyContractRouter, AnySchema, ApiPluginConfig, ApiPluginConfigSchema, BosConfig, BosConfigResult, BosConfigSchema, BosPluginRef, BosPluginRefSchema, BosStaging, BosStagingSchema, BuildOptions, BuildOptionsSchema, BuildResultSchema, CliCommandMeta, ClientRuntimeConfig, ClientRuntimeConfigSchema, ClientRuntimeInfo, ClientRuntimeInfoSchema, ConfigResult, ConfigResultSchema, Context, DevOptions, DevOptionsSchema, DevResultSchema, Effect, FederationEntry, FederationEntrySchema, HostConfig, HostConfigSchema, InitOptions, InitOptionsSchema, InitResult, InitResultSchema, KeyPublishOptions, KeyPublishOptionsSchema, KeyPublishResult, KeyPublishResultSchema, Layer, LoadedPluginWithBinding, NetworkId, Plugin, PluginAddOptions, PluginAddOptionsSchema, PluginAddResult, PluginAddResultSchema, PluginListResult, PluginListResultSchema, PluginPublishOptions, PluginPublishOptionsSchema, PluginPublishResult, PluginPublishResultSchema, PluginRemoveOptions, PluginRemoveOptionsSchema, PluginRemoveResult, PluginRemoveResultSchema, PluginRuntime, PublishOptions, PublishOptionsSchema, PublishResultSchema, RuntimeConfig, RuntimeConfigSchema, RuntimePluginConfig, RuntimePluginConfigSchema, Scope, SharedConfig, SharedConfigSchema, SharedDepConfig, SharedDepConfigSchema, SourceMode, SourceModeSchema, StartOptions, StartOptionsSchema, StartResultSchema, UiConfig, UiConfigSchema, bosContract, buildRegistryConfigUrl, buildRegistryConfigUrlForNetwork, buildRuntimePluginsForConfig, clearConfigCache, cliCommandMeta, createPlugin, createPluginRuntime, fetchBosConfigFromFastKv, findConfigPath, getConfig, getFastKvBaseUrlForNetwork, getHostDevelopmentPort, getProjectRoot, getRegistryNamespaceForAccount, getRegistryNamespaceForNetwork, isLocalDevelopmentTarget, loadBosConfig, loadConfig, oc, parsePort, resolveDevelopmentHostUrl, resolveLocalDevelopmentPath, z };
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { AnyContractRouter, AnySchema, Context, Effect, Layer, LoadedPluginWithBinding, Plugin, PluginRuntime, Scope, createPlugin, createPluginRuntime, oc, z } from "./sdk.mjs";
|
|
2
|
+
import { ApiPluginConfig, ApiPluginConfigSchema, BosConfig, BosConfigSchema, BosPluginRef, BosPluginRefSchema, BosStaging, BosStagingSchema, ClientRuntimeConfig, ClientRuntimeConfigSchema, ClientRuntimeInfo, ClientRuntimeInfoSchema, FederationEntry, FederationEntrySchema, HostConfig, HostConfigSchema, RuntimeConfig, RuntimeConfigSchema, RuntimePluginConfig, RuntimePluginConfigSchema, SharedConfig, SharedConfigSchema, SharedDepConfig, SharedDepConfigSchema, SourceMode, SourceModeSchema, UiConfig, UiConfigSchema } from "./types.mjs";
|
|
3
|
+
import { ConfigResult, buildRuntimePluginsForConfig, clearConfigCache, findConfigPath, getConfig, getHostDevelopmentPort, getProjectRoot, isLocalDevelopmentTarget, loadBosConfig, loadConfig, parsePort, resolveDevelopmentHostUrl, resolveLocalDevelopmentPath } from "./config.mjs";
|
|
4
|
+
import { CliCommandMeta, cliCommandMeta } from "./contract.meta.mjs";
|
|
5
|
+
import { NetworkId, buildRegistryConfigUrl, buildRegistryConfigUrlForNetwork, fetchBosConfigFromFastKv, getFastKvBaseUrlForNetwork, getRegistryNamespaceForAccount, getRegistryNamespaceForNetwork } from "./fastkv.mjs";
|
|
6
|
+
import { BosConfigResult, BuildOptions, BuildOptionsSchema, BuildResultSchema, ConfigResultSchema, DevOptions, DevOptionsSchema, DevResultSchema, InitOptions, InitOptionsSchema, InitResult, InitResultSchema, KeyPublishOptions, KeyPublishOptionsSchema, KeyPublishResult, KeyPublishResultSchema, PluginAddOptions, PluginAddOptionsSchema, PluginAddResult, PluginAddResultSchema, PluginListResult, PluginListResultSchema, PluginPublishOptions, PluginPublishOptionsSchema, PluginPublishResult, PluginPublishResultSchema, PluginRemoveOptions, PluginRemoveOptionsSchema, PluginRemoveResult, PluginRemoveResultSchema, PublishOptions, PublishOptionsSchema, PublishResultSchema, StartOptions, StartOptionsSchema, StartResultSchema, bosContract } from "./contract.mjs";
|
|
7
|
+
export { AnyContractRouter, AnySchema, ApiPluginConfig, ApiPluginConfigSchema, BosConfig, BosConfigResult, BosConfigSchema, BosPluginRef, BosPluginRefSchema, BosStaging, BosStagingSchema, BuildOptions, BuildOptionsSchema, BuildResultSchema, CliCommandMeta, ClientRuntimeConfig, ClientRuntimeConfigSchema, ClientRuntimeInfo, ClientRuntimeInfoSchema, ConfigResult, ConfigResultSchema, Context, DevOptions, DevOptionsSchema, DevResultSchema, Effect, FederationEntry, FederationEntrySchema, HostConfig, HostConfigSchema, InitOptions, InitOptionsSchema, InitResult, InitResultSchema, KeyPublishOptions, KeyPublishOptionsSchema, KeyPublishResult, KeyPublishResultSchema, Layer, LoadedPluginWithBinding, NetworkId, Plugin, PluginAddOptions, PluginAddOptionsSchema, PluginAddResult, PluginAddResultSchema, PluginListResult, PluginListResultSchema, PluginPublishOptions, PluginPublishOptionsSchema, PluginPublishResult, PluginPublishResultSchema, PluginRemoveOptions, PluginRemoveOptionsSchema, PluginRemoveResult, PluginRemoveResultSchema, PluginRuntime, PublishOptions, PublishOptionsSchema, PublishResultSchema, RuntimeConfig, RuntimeConfigSchema, RuntimePluginConfig, RuntimePluginConfigSchema, Scope, SharedConfig, SharedConfigSchema, SharedDepConfig, SharedDepConfigSchema, SourceMode, SourceModeSchema, StartOptions, StartOptionsSchema, StartResultSchema, UiConfig, UiConfigSchema, bosContract, buildRegistryConfigUrl, buildRegistryConfigUrlForNetwork, buildRuntimePluginsForConfig, clearConfigCache, cliCommandMeta, createPlugin, createPluginRuntime, fetchBosConfigFromFastKv, findConfigPath, getConfig, getFastKvBaseUrlForNetwork, getHostDevelopmentPort, getProjectRoot, getRegistryNamespaceForAccount, getRegistryNamespaceForNetwork, isLocalDevelopmentTarget, loadBosConfig, loadConfig, oc, parsePort, resolveDevelopmentHostUrl, resolveLocalDevelopmentPath, z };
|
package/dist/index.mjs
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { buildRegistryConfigUrl, buildRegistryConfigUrlForNetwork, fetchBosConfigFromFastKv, getFastKvBaseUrlForNetwork, getRegistryNamespaceForAccount, getRegistryNamespaceForNetwork } from "./fastkv.mjs";
|
|
2
|
+
import { Context, Effect, Layer, PluginRuntime, Scope, createPlugin, createPluginRuntime, oc, z } from "./sdk.mjs";
|
|
3
|
+
import { ApiPluginConfigSchema, BosConfigSchema, BosPluginRefSchema, BosStagingSchema, ClientRuntimeConfigSchema, ClientRuntimeInfoSchema, FederationEntrySchema, HostConfigSchema, RuntimeConfigSchema, RuntimePluginConfigSchema, SharedConfigSchema, SharedDepConfigSchema, SourceModeSchema, UiConfigSchema } from "./types.mjs";
|
|
4
|
+
import { buildRuntimePluginsForConfig, clearConfigCache, findConfigPath, getConfig, getHostDevelopmentPort, getProjectRoot, isLocalDevelopmentTarget, loadBosConfig, loadConfig, parsePort, resolveDevelopmentHostUrl, resolveLocalDevelopmentPath } from "./config.mjs";
|
|
5
|
+
import { BuildOptionsSchema, BuildResultSchema, ConfigResultSchema, DevOptionsSchema, DevResultSchema, InitOptionsSchema, InitResultSchema, KeyPublishOptionsSchema, KeyPublishResultSchema, PluginAddOptionsSchema, PluginAddResultSchema, PluginListResultSchema, PluginPublishOptionsSchema, PluginPublishResultSchema, PluginRemoveOptionsSchema, PluginRemoveResultSchema, PublishOptionsSchema, PublishResultSchema, StartOptionsSchema, StartResultSchema, bosContract } from "./contract.mjs";
|
|
6
|
+
import { cliCommandMeta } from "./contract.meta.mjs";
|
|
7
|
+
import "./plugin.mjs";
|
|
8
|
+
|
|
9
|
+
export { ApiPluginConfigSchema, BosConfigSchema, BosPluginRefSchema, BosStagingSchema, BuildOptionsSchema, BuildResultSchema, ClientRuntimeConfigSchema, ClientRuntimeInfoSchema, ConfigResultSchema, Context, DevOptionsSchema, DevResultSchema, Effect, FederationEntrySchema, HostConfigSchema, InitOptionsSchema, InitResultSchema, KeyPublishOptionsSchema, KeyPublishResultSchema, Layer, PluginAddOptionsSchema, PluginAddResultSchema, PluginListResultSchema, PluginPublishOptionsSchema, PluginPublishResultSchema, PluginRemoveOptionsSchema, PluginRemoveResultSchema, PluginRuntime, PublishOptionsSchema, PublishResultSchema, RuntimeConfigSchema, RuntimePluginConfigSchema, Scope, SharedConfigSchema, SharedDepConfigSchema, SourceModeSchema, StartOptionsSchema, StartResultSchema, UiConfigSchema, bosContract, buildRegistryConfigUrl, buildRegistryConfigUrlForNetwork, buildRuntimePluginsForConfig, clearConfigCache, cliCommandMeta, createPlugin, createPluginRuntime, fetchBosConfigFromFastKv, findConfigPath, getConfig, getFastKvBaseUrlForNetwork, getHostDevelopmentPort, getProjectRoot, getRegistryNamespaceForAccount, getRegistryNamespaceForNetwork, isLocalDevelopmentTarget, loadBosConfig, loadConfig, oc, parsePort, resolveDevelopmentHostUrl, resolveLocalDevelopmentPath, z };
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
const require_runtime = require('./_virtual/_rolldown/runtime.cjs');
|
|
3
|
+
let node_crypto = require("node:crypto");
|
|
4
|
+
|
|
5
|
+
//#region src/integrity.ts
|
|
6
|
+
function computeSriHash(content) {
|
|
7
|
+
return `sha384-${(0, node_crypto.createHash)("sha384").update(content).digest("base64")}`;
|
|
8
|
+
}
|
|
9
|
+
async function computeSriHashForUrl(url) {
|
|
10
|
+
try {
|
|
11
|
+
const entryUrl = url.endsWith("/remoteEntry.js") ? url : url.endsWith("/mf-manifest.json") ? `${url.replace(/\/mf-manifest\.json$/, "")}/remoteEntry.js` : `${url.replace(/\/$/, "")}/remoteEntry.js`;
|
|
12
|
+
const response = await fetch(entryUrl);
|
|
13
|
+
if (!response.ok) {
|
|
14
|
+
console.warn(`[SRI] Failed to fetch ${entryUrl}: ${response.status} ${response.statusText}`);
|
|
15
|
+
return null;
|
|
16
|
+
}
|
|
17
|
+
return computeSriHash(Buffer.from(await response.arrayBuffer()));
|
|
18
|
+
} catch (error) {
|
|
19
|
+
console.warn(`[SRI] Error computing integrity for ${url}:`, error instanceof Error ? error.message : error);
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
async function verifySriForUrl(url, expectedIntegrity) {
|
|
24
|
+
const entryUrl = url.endsWith("/remoteEntry.js") ? url : url.endsWith("/mf-manifest.json") ? `${url.replace(/\/mf-manifest\.json$/, "")}/remoteEntry.js` : `${url.replace(/\/$/, "")}/remoteEntry.js`;
|
|
25
|
+
const response = await fetch(entryUrl);
|
|
26
|
+
if (!response.ok) {
|
|
27
|
+
console.warn(`[SRI] Failed to fetch ${entryUrl} for verification: ${response.status}`);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const computed = computeSriHash(Buffer.from(await response.arrayBuffer()));
|
|
31
|
+
if (computed !== expectedIntegrity) throw new Error(`[SRI] Integrity check failed for ${entryUrl}\n Expected: ${expectedIntegrity}\n Computed: ${computed}`);
|
|
32
|
+
console.log(`[SRI] Integrity verified for ${entryUrl}`);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
//#endregion
|
|
36
|
+
exports.computeSriHash = computeSriHash;
|
|
37
|
+
exports.computeSriHashForUrl = computeSriHashForUrl;
|
|
38
|
+
exports.verifySriForUrl = verifySriForUrl;
|
|
39
|
+
//# sourceMappingURL=integrity.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integrity.cjs","names":[],"sources":["../src/integrity.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\n\nexport function computeSriHash(content: string | Buffer): string {\n return `sha384-${createHash(\"sha384\").update(content).digest(\"base64\")}`;\n}\n\nexport async function computeSriHashForUrl(url: string): Promise<string | null> {\n try {\n const entryUrl = url.endsWith(\"/remoteEntry.js\")\n ? url\n : url.endsWith(\"/mf-manifest.json\")\n ? `${url.replace(/\\/mf-manifest\\.json$/, \"\")}/remoteEntry.js`\n : `${url.replace(/\\/$/, \"\")}/remoteEntry.js`;\n\n const response = await fetch(entryUrl);\n if (!response.ok) {\n console.warn(`[SRI] Failed to fetch ${entryUrl}: ${response.status} ${response.statusText}`);\n return null;\n }\n const buffer = Buffer.from(await response.arrayBuffer());\n return computeSriHash(buffer);\n } catch (error) {\n console.warn(\n `[SRI] Error computing integrity for ${url}:`,\n error instanceof Error ? error.message : error,\n );\n return null;\n }\n}\n\nexport async function verifySriForUrl(url: string, expectedIntegrity: string): Promise<void> {\n const entryUrl = url.endsWith(\"/remoteEntry.js\")\n ? url\n : url.endsWith(\"/mf-manifest.json\")\n ? `${url.replace(/\\/mf-manifest\\.json$/, \"\")}/remoteEntry.js`\n : `${url.replace(/\\/$/, \"\")}/remoteEntry.js`;\n\n const response = await fetch(entryUrl);\n if (!response.ok) {\n console.warn(`[SRI] Failed to fetch ${entryUrl} for verification: ${response.status}`);\n return;\n }\n\n const buffer = Buffer.from(await response.arrayBuffer());\n const computed = computeSriHash(buffer);\n\n if (computed !== expectedIntegrity) {\n throw new Error(\n `[SRI] Integrity check failed for ${entryUrl}\\n Expected: ${expectedIntegrity}\\n Computed: ${computed}`,\n );\n }\n\n console.log(`[SRI] Integrity verified for ${entryUrl}`);\n}\n"],"mappings":";;;;;AAEA,SAAgB,eAAe,SAAkC;AAC/D,QAAO,sCAAqB,SAAS,CAAC,OAAO,QAAQ,CAAC,OAAO,SAAS;;AAGxE,eAAsB,qBAAqB,KAAqC;AAC9E,KAAI;EACF,MAAM,WAAW,IAAI,SAAS,kBAAkB,GAC5C,MACA,IAAI,SAAS,oBAAoB,GAC/B,GAAG,IAAI,QAAQ,wBAAwB,GAAG,CAAC,mBAC3C,GAAG,IAAI,QAAQ,OAAO,GAAG,CAAC;EAEhC,MAAM,WAAW,MAAM,MAAM,SAAS;AACtC,MAAI,CAAC,SAAS,IAAI;AAChB,WAAQ,KAAK,yBAAyB,SAAS,IAAI,SAAS,OAAO,GAAG,SAAS,aAAa;AAC5F,UAAO;;AAGT,SAAO,eADQ,OAAO,KAAK,MAAM,SAAS,aAAa,CAAC,CAC3B;UACtB,OAAO;AACd,UAAQ,KACN,uCAAuC,IAAI,IAC3C,iBAAiB,QAAQ,MAAM,UAAU,MAC1C;AACD,SAAO;;;AAIX,eAAsB,gBAAgB,KAAa,mBAA0C;CAC3F,MAAM,WAAW,IAAI,SAAS,kBAAkB,GAC5C,MACA,IAAI,SAAS,oBAAoB,GAC/B,GAAG,IAAI,QAAQ,wBAAwB,GAAG,CAAC,mBAC3C,GAAG,IAAI,QAAQ,OAAO,GAAG,CAAC;CAEhC,MAAM,WAAW,MAAM,MAAM,SAAS;AACtC,KAAI,CAAC,SAAS,IAAI;AAChB,UAAQ,KAAK,yBAAyB,SAAS,qBAAqB,SAAS,SAAS;AACtF;;CAIF,MAAM,WAAW,eADF,OAAO,KAAK,MAAM,SAAS,aAAa,CAAC,CACjB;AAEvC,KAAI,aAAa,kBACf,OAAM,IAAI,MACR,oCAAoC,SAAS,gBAAgB,kBAAkB,gBAAgB,WAChG;AAGH,SAAQ,IAAI,gCAAgC,WAAW"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
//#region src/integrity.d.ts
|
|
2
|
+
declare function computeSriHash(content: string | Buffer): string;
|
|
3
|
+
declare function computeSriHashForUrl(url: string): Promise<string | null>;
|
|
4
|
+
declare function verifySriForUrl(url: string, expectedIntegrity: string): Promise<void>;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { computeSriHash, computeSriHashForUrl, verifySriForUrl };
|
|
7
|
+
//# sourceMappingURL=integrity.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integrity.d.cts","names":[],"sources":["../src/integrity.ts"],"mappings":";iBAEgB,cAAA,CAAe,OAAA,WAAkB,MAAA;AAAA,iBAI3B,oBAAA,CAAqB,GAAA,WAAc,OAAA;AAAA,iBAwBnC,eAAA,CAAgB,GAAA,UAAa,iBAAA,WAA4B,OAAA"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
//#region src/integrity.d.ts
|
|
2
|
+
declare function computeSriHash(content: string | Buffer): string;
|
|
3
|
+
declare function computeSriHashForUrl(url: string): Promise<string | null>;
|
|
4
|
+
declare function verifySriForUrl(url: string, expectedIntegrity: string): Promise<void>;
|
|
5
|
+
//#endregion
|
|
6
|
+
export { computeSriHash, computeSriHashForUrl, verifySriForUrl };
|
|
7
|
+
//# sourceMappingURL=integrity.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integrity.d.mts","names":[],"sources":["../src/integrity.ts"],"mappings":";iBAEgB,cAAA,CAAe,OAAA,WAAkB,MAAA;AAAA,iBAI3B,oBAAA,CAAqB,GAAA,WAAc,OAAA;AAAA,iBAwBnC,eAAA,CAAgB,GAAA,UAAa,iBAAA,WAA4B,OAAA"}
|