@supatype/cli 0.1.0-alpha.8 → 0.1.0
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/.turbo/turbo-build.log +2 -2
- package/.turbo/turbo-test.log +274 -69
- package/.turbo/turbo-typecheck.log +1 -1
- package/assets/supatype-logo-wordmark.ascii.txt +6 -0
- package/bin/dev-entry.ts +2 -1
- package/dist/app/framework.js +1 -3
- package/dist/app/framework.js.map +1 -1
- package/dist/app/proxy-dev-app.d.ts +14 -0
- package/dist/app/proxy-dev-app.d.ts.map +1 -1
- package/dist/app/proxy-dev-app.js +110 -6
- package/dist/app/proxy-dev-app.js.map +1 -1
- package/dist/app-config.d.ts +10 -0
- package/dist/app-config.d.ts.map +1 -1
- package/dist/app-config.js +72 -0
- package/dist/app-config.js.map +1 -1
- package/dist/assets/supatype-logo-wordmark.ascii.txt +6 -0
- package/dist/binary-cache.d.ts +19 -7
- package/dist/binary-cache.d.ts.map +1 -1
- package/dist/binary-cache.js +92 -46
- package/dist/binary-cache.js.map +1 -1
- package/dist/cli.d.ts +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +17 -2
- package/dist/cli.js.map +1 -1
- package/dist/commands/add.d.ts +3 -0
- package/dist/commands/add.d.ts.map +1 -0
- package/dist/commands/add.js +86 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/admin.d.ts.map +1 -1
- package/dist/commands/admin.js +39 -53
- package/dist/commands/admin.js.map +1 -1
- package/dist/commands/adopt.d.ts +3 -0
- package/dist/commands/adopt.d.ts.map +1 -0
- package/dist/commands/adopt.js +55 -0
- package/dist/commands/adopt.js.map +1 -0
- package/dist/commands/app.d.ts.map +1 -1
- package/dist/commands/app.js +20 -17
- package/dist/commands/app.js.map +1 -1
- package/dist/commands/cache.d.ts.map +1 -1
- package/dist/commands/cache.js +11 -10
- package/dist/commands/cache.js.map +1 -1
- package/dist/commands/cloud.d.ts +4 -9
- package/dist/commands/cloud.d.ts.map +1 -1
- package/dist/commands/cloud.js +75 -125
- package/dist/commands/cloud.js.map +1 -1
- package/dist/commands/db.d.ts.map +1 -1
- package/dist/commands/db.js +37 -58
- package/dist/commands/db.js.map +1 -1
- package/dist/commands/deploy.d.ts.map +1 -1
- package/dist/commands/deploy.js +140 -96
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/dev.d.ts.map +1 -1
- package/dist/commands/dev.js +72 -39
- package/dist/commands/dev.js.map +1 -1
- package/dist/commands/diff.d.ts.map +1 -1
- package/dist/commands/diff.js +39 -39
- package/dist/commands/diff.js.map +1 -1
- package/dist/commands/doctor.d.ts +3 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +78 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/engine.d.ts.map +1 -1
- package/dist/commands/engine.js +5 -4
- package/dist/commands/engine.js.map +1 -1
- package/dist/commands/functions.d.ts.map +1 -1
- package/dist/commands/functions.js +172 -119
- package/dist/commands/functions.js.map +1 -1
- package/dist/commands/generate.d.ts.map +1 -1
- package/dist/commands/generate.js +5 -4
- package/dist/commands/generate.js.map +1 -1
- package/dist/commands/init.d.ts +30 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +814 -107
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/introspect.d.ts +3 -0
- package/dist/commands/introspect.d.ts.map +1 -0
- package/dist/commands/introspect.js +35 -0
- package/dist/commands/introspect.js.map +1 -0
- package/dist/commands/keys.d.ts +15 -1
- package/dist/commands/keys.d.ts.map +1 -1
- package/dist/commands/keys.js +46 -10
- package/dist/commands/keys.js.map +1 -1
- package/dist/commands/link-helpers.d.ts +15 -0
- package/dist/commands/link-helpers.d.ts.map +1 -0
- package/dist/commands/link-helpers.js +225 -0
- package/dist/commands/link-helpers.js.map +1 -0
- package/dist/commands/logs.d.ts.map +1 -1
- package/dist/commands/logs.js +5 -4
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/migrate-from-v1.d.ts.map +1 -1
- package/dist/commands/migrate-from-v1.js +3 -2
- package/dist/commands/migrate-from-v1.js.map +1 -1
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +119 -26
- package/dist/commands/migrate.js.map +1 -1
- package/dist/commands/pg.d.ts.map +1 -1
- package/dist/commands/pg.js +11 -12
- package/dist/commands/pg.js.map +1 -1
- package/dist/commands/plugins.d.ts.map +1 -1
- package/dist/commands/plugins.js +55 -46
- package/dist/commands/plugins.js.map +1 -1
- package/dist/commands/pull.d.ts.map +1 -1
- package/dist/commands/pull.js +33 -5
- package/dist/commands/pull.js.map +1 -1
- package/dist/commands/push.d.ts.map +1 -1
- package/dist/commands/push.js +110 -137
- package/dist/commands/push.js.map +1 -1
- package/dist/commands/seed.d.ts.map +1 -1
- package/dist/commands/seed.js +4 -3
- package/dist/commands/seed.js.map +1 -1
- package/dist/commands/self-host.d.ts +2 -2
- package/dist/commands/self-host.d.ts.map +1 -1
- package/dist/commands/self-host.js +65 -50
- package/dist/commands/self-host.js.map +1 -1
- package/dist/commands/self-update.d.ts.map +1 -1
- package/dist/commands/self-update.js +3 -2
- package/dist/commands/self-update.js.map +1 -1
- package/dist/commands/status.d.ts +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +95 -29
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/types.d.ts.map +1 -1
- package/dist/commands/types.js +3 -2
- package/dist/commands/types.js.map +1 -1
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +54 -21
- package/dist/commands/update.js.map +1 -1
- package/dist/config.d.ts +2 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js.map +1 -1
- package/dist/dev-compose.d.ts +26 -0
- package/dist/dev-compose.d.ts.map +1 -1
- package/dist/dev-compose.js +328 -34
- package/dist/dev-compose.js.map +1 -1
- package/dist/dev-log-bus.d.ts +30 -0
- package/dist/dev-log-bus.d.ts.map +1 -0
- package/dist/dev-log-bus.js +87 -0
- package/dist/dev-log-bus.js.map +1 -0
- package/dist/dev-log-filter.d.ts +10 -0
- package/dist/dev-log-filter.d.ts.map +1 -0
- package/dist/dev-log-filter.js +36 -0
- package/dist/dev-log-filter.js.map +1 -0
- package/dist/dev-logo.d.ts +12 -0
- package/dist/dev-logo.d.ts.map +1 -0
- package/dist/dev-logo.js +56 -0
- package/dist/dev-logo.js.map +1 -0
- package/dist/dev-session.d.ts +26 -0
- package/dist/dev-session.d.ts.map +1 -0
- package/dist/dev-session.js +106 -0
- package/dist/dev-session.js.map +1 -0
- package/dist/dev-shutdown.d.ts +9 -0
- package/dist/dev-shutdown.d.ts.map +1 -0
- package/dist/dev-shutdown.js +50 -0
- package/dist/dev-shutdown.js.map +1 -0
- package/dist/dev-task-colors.d.ts +13 -0
- package/dist/dev-task-colors.d.ts.map +1 -0
- package/dist/dev-task-colors.js +43 -0
- package/dist/dev-task-colors.js.map +1 -0
- package/dist/dev-tui.d.ts +24 -0
- package/dist/dev-tui.d.ts.map +1 -0
- package/dist/dev-tui.js +188 -0
- package/dist/dev-tui.js.map +1 -0
- package/dist/diff-output.d.ts +5 -1
- package/dist/diff-output.d.ts.map +1 -1
- package/dist/diff-output.js +69 -0
- package/dist/diff-output.js.map +1 -1
- package/dist/docker-runtime.d.ts +30 -0
- package/dist/docker-runtime.d.ts.map +1 -0
- package/dist/docker-runtime.js +118 -0
- package/dist/docker-runtime.js.map +1 -0
- package/dist/engine-client.d.ts +10 -1
- package/dist/engine-client.d.ts.map +1 -1
- package/dist/engine-client.js +76 -17
- package/dist/engine-client.js.map +1 -1
- package/dist/engine-push-output.d.ts +17 -0
- package/dist/engine-push-output.d.ts.map +1 -0
- package/dist/engine-push-output.js +64 -0
- package/dist/engine-push-output.js.map +1 -0
- package/dist/ensure-binary.js +2 -2
- package/dist/ensure-binary.js.map +1 -1
- package/dist/gitignore.d.ts +8 -0
- package/dist/gitignore.d.ts.map +1 -0
- package/dist/gitignore.js +41 -0
- package/dist/gitignore.js.map +1 -0
- package/dist/kong-config.d.ts +9 -0
- package/dist/kong-config.d.ts.map +1 -1
- package/dist/kong-config.js +18 -1
- package/dist/kong-config.js.map +1 -1
- package/dist/link.d.ts +66 -0
- package/dist/link.d.ts.map +1 -0
- package/dist/link.js +160 -0
- package/dist/link.js.map +1 -0
- package/dist/process-manager.d.ts +8 -0
- package/dist/process-manager.d.ts.map +1 -1
- package/dist/process-manager.js +53 -9
- package/dist/process-manager.js.map +1 -1
- package/dist/project-config.d.ts +30 -3
- package/dist/project-config.d.ts.map +1 -1
- package/dist/project-config.js +37 -4
- package/dist/project-config.js.map +1 -1
- package/dist/prompts.d.ts +3 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +3 -0
- package/dist/prompts.js.map +1 -0
- package/dist/pull-utils.d.ts +50 -14
- package/dist/pull-utils.d.ts.map +1 -1
- package/dist/pull-utils.js +152 -12
- package/dist/pull-utils.js.map +1 -1
- package/dist/resolve-target.d.ts +86 -0
- package/dist/resolve-target.d.ts.map +1 -0
- package/dist/resolve-target.js +291 -0
- package/dist/resolve-target.js.map +1 -0
- package/dist/restore-system-relation-targets.d.ts +3 -0
- package/dist/restore-system-relation-targets.d.ts.map +1 -0
- package/dist/restore-system-relation-targets.js +45 -0
- package/dist/restore-system-relation-targets.js.map +1 -0
- package/dist/runtime-routes.d.ts.map +1 -1
- package/dist/runtime-routes.js +7 -0
- package/dist/runtime-routes.js.map +1 -1
- package/dist/schema-ast-v2.d.ts +1 -1
- package/dist/schema-ast-v2.d.ts.map +1 -1
- package/dist/schema-ast-v2.js +2 -2
- package/dist/schema-ast-v2.js.map +1 -1
- package/dist/schema-sources.d.ts +40 -0
- package/dist/schema-sources.d.ts.map +1 -0
- package/dist/schema-sources.js +183 -0
- package/dist/schema-sources.js.map +1 -0
- package/dist/scripts/postinstall.js +5 -1
- package/dist/scripts/postinstall.js.map +1 -1
- package/dist/seed.d.ts +8 -0
- package/dist/seed.d.ts.map +1 -0
- package/dist/seed.js +32 -0
- package/dist/seed.js.map +1 -0
- package/dist/self-host-compose.d.ts +37 -1
- package/dist/self-host-compose.d.ts.map +1 -1
- package/dist/self-host-compose.js +233 -43
- package/dist/self-host-compose.js.map +1 -1
- package/dist/storage-provision.d.ts +4 -0
- package/dist/storage-provision.d.ts.map +1 -1
- package/dist/storage-provision.js +24 -2
- package/dist/storage-provision.js.map +1 -1
- package/dist/supatype-eval-1781522769253.d.mts +2 -0
- package/dist/supatype-eval-1781522769253.d.mts.map +1 -0
- package/dist/supatype-eval-1781522769253.mjs +3 -0
- package/dist/supatype-eval-1781522769253.mjs.map +1 -0
- package/dist/systemd.js +2 -2
- package/dist/systemd.js.map +1 -1
- package/dist/target-client.d.ts +10 -0
- package/dist/target-client.d.ts.map +1 -0
- package/dist/target-client.js +22 -0
- package/dist/target-client.js.map +1 -0
- package/dist/type-extractor.d.ts +11 -0
- package/dist/type-extractor.d.ts.map +1 -1
- package/dist/type-extractor.js +95 -8
- package/dist/type-extractor.js.map +1 -1
- package/dist/ui/brand.d.ts +9 -0
- package/dist/ui/brand.d.ts.map +1 -0
- package/dist/ui/brand.js +11 -0
- package/dist/ui/brand.js.map +1 -0
- package/dist/ui/confirm.d.ts +12 -0
- package/dist/ui/confirm.d.ts.map +1 -0
- package/dist/ui/confirm.js +28 -0
- package/dist/ui/confirm.js.map +1 -0
- package/dist/ui/fatal.d.ts +10 -0
- package/dist/ui/fatal.d.ts.map +1 -0
- package/dist/ui/fatal.js +34 -0
- package/dist/ui/fatal.js.map +1 -0
- package/dist/ui/index.d.ts +9 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +9 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/interactive.d.ts +3 -0
- package/dist/ui/interactive.d.ts.map +1 -0
- package/dist/ui/interactive.js +5 -0
- package/dist/ui/interactive.js.map +1 -0
- package/dist/ui/messages.d.ts +10 -0
- package/dist/ui/messages.d.ts.map +1 -0
- package/dist/ui/messages.js +35 -0
- package/dist/ui/messages.js.map +1 -0
- package/dist/ui/next-steps.d.ts +3 -0
- package/dist/ui/next-steps.d.ts.map +1 -0
- package/dist/ui/next-steps.js +10 -0
- package/dist/ui/next-steps.js.map +1 -0
- package/dist/ui/progress.d.ts +5 -0
- package/dist/ui/progress.d.ts.map +1 -0
- package/dist/ui/progress.js +24 -0
- package/dist/ui/progress.js.map +1 -0
- package/dist/ui/prompts.d.ts +14 -0
- package/dist/ui/prompts.d.ts.map +1 -0
- package/dist/ui/prompts.js +34 -0
- package/dist/ui/prompts.js.map +1 -0
- package/package.json +9 -4
- package/src/app/framework.ts +1 -3
- package/src/app/proxy-dev-app.ts +114 -6
- package/src/app-config.ts +80 -0
- package/src/binary-cache.ts +102 -52
- package/src/cli.ts +16 -2
- package/src/commands/add.ts +97 -0
- package/src/commands/admin.ts +39 -73
- package/src/commands/adopt.ts +82 -0
- package/src/commands/app.ts +20 -17
- package/src/commands/cache.ts +11 -10
- package/src/commands/cloud.ts +91 -142
- package/src/commands/db.ts +40 -63
- package/src/commands/deploy.ts +186 -126
- package/src/commands/dev.ts +95 -55
- package/src/commands/diff.ts +52 -43
- package/src/commands/doctor.ts +103 -0
- package/src/commands/engine.ts +5 -4
- package/src/commands/functions.ts +187 -123
- package/src/commands/generate.ts +5 -4
- package/src/commands/init.ts +996 -105
- package/src/commands/introspect.ts +48 -0
- package/src/commands/keys.ts +56 -14
- package/src/commands/link-helpers.ts +273 -0
- package/src/commands/logs.ts +5 -4
- package/src/commands/migrate-from-v1.ts +3 -2
- package/src/commands/migrate.ts +167 -27
- package/src/commands/pg.ts +13 -18
- package/src/commands/plugins.ts +55 -46
- package/src/commands/pull.ts +38 -9
- package/src/commands/push.ts +147 -174
- package/src/commands/seed.ts +5 -4
- package/src/commands/self-host.ts +85 -54
- package/src/commands/self-update.ts +3 -2
- package/src/commands/status.ts +102 -33
- package/src/commands/types.ts +3 -2
- package/src/commands/update.ts +59 -23
- package/src/config.ts +2 -1
- package/src/dev-compose.ts +426 -34
- package/src/dev-log-bus.ts +101 -0
- package/src/dev-log-filter.ts +32 -0
- package/src/dev-logo.ts +61 -0
- package/src/dev-session.ts +130 -0
- package/src/dev-shutdown.ts +54 -0
- package/src/dev-task-colors.ts +47 -0
- package/src/dev-tui.ts +232 -0
- package/src/diff-output.ts +79 -1
- package/src/docker-runtime.ts +151 -0
- package/src/engine-client.ts +81 -17
- package/src/engine-push-output.ts +75 -0
- package/src/ensure-binary.ts +2 -2
- package/src/gitignore.ts +48 -0
- package/src/kong-config.ts +24 -1
- package/src/link.ts +243 -0
- package/src/process-manager.ts +66 -10
- package/src/project-config.ts +62 -7
- package/src/prompts.ts +2 -0
- package/src/pull-utils.ts +217 -23
- package/src/resolve-target.ts +419 -0
- package/src/restore-system-relation-targets.ts +45 -0
- package/src/runtime-routes.ts +7 -0
- package/src/schema-ast-v2.ts +2 -1
- package/src/schema-sources.ts +248 -0
- package/src/scripts/postinstall.ts +7 -1
- package/src/seed.ts +43 -0
- package/src/self-host-compose.ts +261 -46
- package/src/storage-provision.ts +33 -1
- package/src/supatype-eval-1781522769253.mts +1 -0
- package/src/systemd.ts +2 -2
- package/src/target-client.ts +40 -0
- package/src/type-extractor.ts +124 -11
- package/src/ui/README.md +17 -0
- package/src/ui/brand.ts +12 -0
- package/src/ui/confirm.ts +38 -0
- package/src/ui/fatal.ts +43 -0
- package/src/ui/index.ts +8 -0
- package/src/ui/interactive.ts +4 -0
- package/src/ui/messages.ts +43 -0
- package/src/ui/next-steps.ts +10 -0
- package/src/ui/progress.ts +28 -0
- package/src/ui/prompts.ts +40 -0
- package/tests/cli-help.test.ts +27 -2
- package/tests/config.test.ts +29 -2
- package/tests/dev-ui.test.ts +139 -0
- package/tests/docker-runtime.test.ts +236 -0
- package/tests/engine-push-output.test.ts +67 -0
- package/tests/init.test.ts +197 -18
- package/tests/link.test.ts +148 -0
- package/tests/minisign.test.ts +102 -0
- package/tests/proxy-dev-app.test.ts +45 -1
- package/tests/pull-utils.test.ts +5 -4
- package/tests/runtime-contract.test.ts +186 -2
- package/tests/schema-sources.test.ts +119 -0
- package/tests/storage-provision.test.ts +100 -0
- package/tests/ui-confirm.test.ts +41 -0
- package/tests/ui-messages.test.ts +66 -0
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Spawn the frontend dev server during `supatype dev` when app.mode is proxy.
|
|
3
3
|
*/
|
|
4
|
+
import { execSync } from "node:child_process";
|
|
4
5
|
import { existsSync, readFileSync } from "node:fs";
|
|
5
6
|
import { join } from "node:path";
|
|
6
7
|
import { detectPackageManager } from "./framework.js";
|
|
7
|
-
import {
|
|
8
|
+
import { appendDevTaskLog } from "../dev-session.js";
|
|
9
|
+
import { ProcessManager, readPid } from "../process-manager.js";
|
|
8
10
|
import { projectRootFromConfig } from "../project-config.js";
|
|
9
11
|
const DEFAULT_PROXY_DEV_SCRIPT = "start";
|
|
10
12
|
/** package.json script name to run (only when app.mode is proxy). */
|
|
@@ -14,6 +16,102 @@ export function resolveProxyDevScript(config) {
|
|
|
14
16
|
const script = config.app.start?.trim();
|
|
15
17
|
return script && script.length > 0 ? script : DEFAULT_PROXY_DEV_SCRIPT;
|
|
16
18
|
}
|
|
19
|
+
/** Port from app.upstream (e.g. http://localhost:5285 → 5285). */
|
|
20
|
+
export function portFromUpstream(config) {
|
|
21
|
+
const raw = config.app?.upstream?.trim();
|
|
22
|
+
if (!raw)
|
|
23
|
+
return null;
|
|
24
|
+
try {
|
|
25
|
+
const port = new URL(raw).port;
|
|
26
|
+
if (!port)
|
|
27
|
+
return null;
|
|
28
|
+
const n = Number(port);
|
|
29
|
+
return Number.isFinite(n) && n > 0 ? n : null;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return null;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
function killPidTree(pid) {
|
|
36
|
+
if (!Number.isFinite(pid) || pid <= 0)
|
|
37
|
+
return;
|
|
38
|
+
try {
|
|
39
|
+
if (process.platform === "win32") {
|
|
40
|
+
execSync(`taskkill /pid ${pid} /T /F`, { stdio: "ignore" });
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
execSync(`kill -9 ${pid}`, { stdio: "ignore" });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
/* already gone */
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function killPortListeners(port) {
|
|
51
|
+
if (process.platform === "win32") {
|
|
52
|
+
try {
|
|
53
|
+
const out = execSync(`netstat -ano | findstr :${port}`, { encoding: "utf8" });
|
|
54
|
+
const pids = new Set();
|
|
55
|
+
for (const line of out.split("\n")) {
|
|
56
|
+
const match = line.match(/LISTENING\s+(\d+)/);
|
|
57
|
+
if (match?.[1])
|
|
58
|
+
pids.add(match[1]);
|
|
59
|
+
}
|
|
60
|
+
for (const pid of pids) {
|
|
61
|
+
try {
|
|
62
|
+
execSync(`taskkill /pid ${pid} /T /F`, { stdio: "ignore" });
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
/* already gone */
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
/* nothing listening */
|
|
71
|
+
}
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
try {
|
|
75
|
+
const out = execSync(`lsof -ti :${port}`, { encoding: "utf8" });
|
|
76
|
+
for (const pid of out.trim().split(/\s+/)) {
|
|
77
|
+
try {
|
|
78
|
+
execSync(`kill -9 ${pid}`, { stdio: "ignore" });
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
/* already gone */
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch {
|
|
86
|
+
/* nothing listening */
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/** Free the upstream port and any stale app PID before spawning Vite. */
|
|
90
|
+
export function freeProxyDevPort(pidDir, port) {
|
|
91
|
+
const stalePid = readPid(pidDir, "app");
|
|
92
|
+
if (stalePid)
|
|
93
|
+
killPidTree(stalePid);
|
|
94
|
+
killPortListeners(port);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* When a package.json script only runs Vite, spawn node + vite.js directly.
|
|
98
|
+
* Avoids Windows shell shims (pnpm → bash → vite) that orphan the real server
|
|
99
|
+
* and break PID-based cleanup / auto-restart.
|
|
100
|
+
*/
|
|
101
|
+
export function resolveViteDirectSpawn(appDir, script, scripts) {
|
|
102
|
+
const body = scripts?.[script]?.trim() ?? "";
|
|
103
|
+
if (!body)
|
|
104
|
+
return null;
|
|
105
|
+
const runsVite = body === "vite" ||
|
|
106
|
+
/^vite\s/.test(body) ||
|
|
107
|
+
body.includes("vite/bin/vite");
|
|
108
|
+
if (!runsVite)
|
|
109
|
+
return null;
|
|
110
|
+
const viteJs = join(appDir, "node_modules", "vite", "bin", "vite.js");
|
|
111
|
+
if (!existsSync(viteJs))
|
|
112
|
+
return null;
|
|
113
|
+
return { bin: process.execPath, args: [viteJs], shell: false };
|
|
114
|
+
}
|
|
17
115
|
/**
|
|
18
116
|
* Start the configured package.json script for proxy dev.
|
|
19
117
|
* Returns null when not in proxy mode or when the script is missing.
|
|
@@ -34,18 +132,24 @@ export function startProxyDevApp(cwd, config, pidDir) {
|
|
|
34
132
|
` Add "scripts.${script}" or set app.start in supatype.config.ts`);
|
|
35
133
|
return null;
|
|
36
134
|
}
|
|
135
|
+
const upstreamPort = portFromUpstream(config);
|
|
136
|
+
const directVite = resolveViteDirectSpawn(appDir, script, pkg.scripts);
|
|
37
137
|
const pm = detectPackageManager(appDir);
|
|
38
|
-
const bin = pm;
|
|
39
|
-
const args = pm === "yarn" ? [script] : ["run", script];
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
138
|
+
const bin = directVite?.bin ?? pm;
|
|
139
|
+
const args = directVite?.args ?? (pm === "yarn" ? [script] : ["run", script]);
|
|
140
|
+
const useShell = directVite ? false : process.platform === "win32";
|
|
141
|
+
appendDevTaskLog("app", "app", directVite
|
|
142
|
+
? `Proxy mode: running node vite.js (${appDir})`
|
|
143
|
+
: `Proxy mode: running ${bin} ${args.join(" ")} (${appDir})`);
|
|
144
|
+
if (upstreamPort)
|
|
145
|
+
freeProxyDevPort(pidDir, upstreamPort);
|
|
43
146
|
const manager = new ProcessManager(bin, args, {
|
|
44
147
|
label: "app",
|
|
45
148
|
pidDir,
|
|
46
149
|
cwd: appDir,
|
|
47
150
|
colour: "\x1b[33m",
|
|
48
151
|
shell: useShell,
|
|
152
|
+
...(upstreamPort ? { beforeRestart: () => freeProxyDevPort(pidDir, upstreamPort) } : {}),
|
|
49
153
|
});
|
|
50
154
|
manager.start();
|
|
51
155
|
return manager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy-dev-app.js","sourceRoot":"","sources":["../../src/app/proxy-dev-app.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"proxy-dev-app.js","sourceRoot":"","sources":["../../src/app/proxy-dev-app.ts"],"names":[],"mappings":"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"}
|
package/dist/app-config.d.ts
CHANGED
|
@@ -4,4 +4,14 @@ export interface UpdateAppConfigInput {
|
|
|
4
4
|
upstream?: string;
|
|
5
5
|
}
|
|
6
6
|
export declare function updateAppConfigInProject(cwd: string, input: UpdateAppConfigInput): string;
|
|
7
|
+
export interface UpdateServerConfigInput {
|
|
8
|
+
domain: string;
|
|
9
|
+
tlsEmail: string;
|
|
10
|
+
provider?: "kong" | "none";
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Set `server.mode = "standalone"` plus `domain` and `tls` in supatype.config.ts,
|
|
14
|
+
* enabling self-host HTTPS. Preserves other `server` keys (port, etc).
|
|
15
|
+
*/
|
|
16
|
+
export declare function updateServerConfigInProject(cwd: string, input: UpdateServerConfigInput): string;
|
|
7
17
|
//# sourceMappingURL=app-config.d.ts.map
|
package/dist/app-config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-config.d.ts","sourceRoot":"","sources":["../src/app-config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;IACjC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,MAAM,CAQzF"}
|
|
1
|
+
{"version":3,"file":"app-config.d.ts","sourceRoot":"","sources":["../src/app-config.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;IACjC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,oBAAoB,GAAG,MAAM,CAQzF;AAuCD,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAC3B;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,uBAAuB,GAAG,MAAM,CAQ/F"}
|
package/dist/app-config.js
CHANGED
|
@@ -46,6 +46,78 @@ function updateAppConfigAst(configPath, input) {
|
|
|
46
46
|
}
|
|
47
47
|
return sourceFile.getFullText();
|
|
48
48
|
}
|
|
49
|
+
/**
|
|
50
|
+
* Set `server.mode = "standalone"` plus `domain` and `tls` in supatype.config.ts,
|
|
51
|
+
* enabling self-host HTTPS. Preserves other `server` keys (port, etc).
|
|
52
|
+
*/
|
|
53
|
+
export function updateServerConfigInProject(cwd, input) {
|
|
54
|
+
const configPath = resolve(cwd, "supatype.config.ts");
|
|
55
|
+
if (!existsSync(configPath)) {
|
|
56
|
+
throw new Error("supatype.config.ts not found. Run: supatype init");
|
|
57
|
+
}
|
|
58
|
+
const next = updateServerConfigAst(configPath, input);
|
|
59
|
+
writeFileSync(configPath, next, "utf8");
|
|
60
|
+
return configPath;
|
|
61
|
+
}
|
|
62
|
+
function updateServerConfigAst(configPath, input) {
|
|
63
|
+
const project = new Project({
|
|
64
|
+
useInMemoryFileSystem: false,
|
|
65
|
+
skipAddingFilesFromTsConfig: true,
|
|
66
|
+
manipulationSettings: {
|
|
67
|
+
quoteKind: QuoteKind.Double,
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
const srcText = readFileSync(configPath, "utf8");
|
|
71
|
+
const sourceFile = project.createSourceFile(configPath, srcText, { overwrite: true });
|
|
72
|
+
const rootObject = getRootConfigObject(sourceFile);
|
|
73
|
+
const serverProperty = rootObject.getProperty("server");
|
|
74
|
+
if (serverProperty === undefined) {
|
|
75
|
+
rootObject.addPropertyAssignment({
|
|
76
|
+
name: "server",
|
|
77
|
+
initializer: renderServerInitializer(input),
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
else if (Node.isPropertyAssignment(serverProperty)) {
|
|
81
|
+
const init = serverProperty.getInitializer();
|
|
82
|
+
if (init && Node.isObjectLiteralExpression(init)) {
|
|
83
|
+
patchServerObject(init, input);
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
serverProperty.setInitializer(renderServerInitializer(input));
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
serverProperty.remove();
|
|
91
|
+
rootObject.addPropertyAssignment({
|
|
92
|
+
name: "server",
|
|
93
|
+
initializer: renderServerInitializer(input),
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
return sourceFile.getFullText();
|
|
97
|
+
}
|
|
98
|
+
function renderServerInitializer(input) {
|
|
99
|
+
const provider = input.provider ?? "kong";
|
|
100
|
+
return `{
|
|
101
|
+
mode: "standalone",
|
|
102
|
+
domain: "${input.domain}",
|
|
103
|
+
tls: { email: "${input.tlsEmail}", provider: "${provider}" },
|
|
104
|
+
}`;
|
|
105
|
+
}
|
|
106
|
+
function patchServerObject(serverObj, input) {
|
|
107
|
+
upsertStringProperty(serverObj, "mode", "standalone");
|
|
108
|
+
upsertStringProperty(serverObj, "domain", input.domain);
|
|
109
|
+
const provider = input.provider ?? "kong";
|
|
110
|
+
const tlsInitializer = `{ email: "${input.tlsEmail}", provider: "${provider}" }`;
|
|
111
|
+
const existing = serverObj.getProperty("tls");
|
|
112
|
+
if (existing && Node.isPropertyAssignment(existing)) {
|
|
113
|
+
existing.setInitializer(tlsInitializer);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
if (existing)
|
|
117
|
+
existing.remove();
|
|
118
|
+
serverObj.addPropertyAssignment({ name: "tls", initializer: tlsInitializer });
|
|
119
|
+
}
|
|
120
|
+
}
|
|
49
121
|
function getRootConfigObject(sourceFile) {
|
|
50
122
|
const exportAssignment = sourceFile.getFirstDescendantByKind(SyntaxKind.ExportAssignment);
|
|
51
123
|
if (!exportAssignment) {
|
package/dist/app-config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-config.js","sourceRoot":"","sources":["../src/app-config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"app-config.js","sourceRoot":"","sources":["../src/app-config.ts"],"names":[],"mappings":"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"}
|
package/dist/binary-cache.d.ts
CHANGED
|
@@ -7,10 +7,13 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Security model:
|
|
9
9
|
* 1. Download checksums.sha256 + checksums.sha256.minisig from CDN.
|
|
10
|
-
* 2. Verify Ed25519 minisign signature on the checksum file using the
|
|
11
|
-
*
|
|
10
|
+
* 2. Verify the Ed25519 minisign signature on the checksum file using the
|
|
11
|
+
* release public key (embedded at publish, overridable via
|
|
12
|
+
* SUPATYPE_RELEASE_PUBLIC_KEY).
|
|
12
13
|
* 3. Verify SHA256 of the downloaded binary against the signed checksum.
|
|
13
|
-
*
|
|
14
|
+
* Verification is mandatory and fails closed: if no public key is configured,
|
|
15
|
+
* the download errors out rather than silently degrading to SHA256-only.
|
|
16
|
+
* The only escape hatch is the explicit SUPATYPE_ALLOW_UNVERIFIED_DOWNLOADS=1.
|
|
14
17
|
*/
|
|
15
18
|
import type { SupatypeProjectConfig } from "./project-config.js";
|
|
16
19
|
/**
|
|
@@ -27,12 +30,12 @@ export declare function hasMeaningfulOverrides(config: SupatypeProjectConfig): b
|
|
|
27
30
|
export declare function describeActiveOverrides(config: SupatypeProjectConfig): string[];
|
|
28
31
|
/**
|
|
29
32
|
* True when this working tree is associated with a remote Supatype Cloud project:
|
|
30
|
-
* `project.ref
|
|
33
|
+
* `project.ref` or `.supatype/link.json` (cloud kind).
|
|
31
34
|
*/
|
|
32
35
|
export declare function isLinkedToCloudProject(cwd: string, config: SupatypeProjectConfig): boolean;
|
|
33
36
|
export type { Component, ComponentVersions } from "./components.js";
|
|
34
37
|
export { BINARY_COMPONENTS } from "./components.js";
|
|
35
|
-
import { type Component } from "./components.js";
|
|
38
|
+
import { type Component, type ComponentVersions } from "./components.js";
|
|
36
39
|
export interface PlatformId {
|
|
37
40
|
os: "linux" | "darwin" | "windows";
|
|
38
41
|
arch: "amd64" | "arm64";
|
|
@@ -66,12 +69,21 @@ export declare function resolveBinary(component: Component, config: SupatypeProj
|
|
|
66
69
|
/** Download if missing or invalid; return cached path for the given platform. */
|
|
67
70
|
export declare function ensureCachedBinary(component: Component, version: string, platform: PlatformId): Promise<string>;
|
|
68
71
|
export declare function download(component: Component, version: string, platform: PlatformId): Promise<string>;
|
|
72
|
+
/**
|
|
73
|
+
* Verify a minisign signature. Supports both Ed25519 legacy mode ("Ed", over the
|
|
74
|
+
* raw file) and prehashed mode ("ED", over BLAKE2b-512(file)). Throws if invalid.
|
|
75
|
+
*/
|
|
76
|
+
export declare function verifyMinisign(fileBytes: Buffer, sigFileContent: string, pubKeyStr: string): void;
|
|
69
77
|
/** Confirm a downloaded/cached artifact matches the expected CDN format (tests, CI). */
|
|
70
78
|
export declare function validateArtifactFormat(component: Component, filePath: string, platform: PlatformId): void;
|
|
71
79
|
/**
|
|
72
80
|
* On Windows, Git Bash represents paths as /c/Users/... — convert to C:\Users\...
|
|
73
81
|
*/
|
|
74
82
|
export declare function normalisePlatformPath(p: string): string;
|
|
83
|
+
export declare function pinnedVersion(component: Component, config: SupatypeProjectConfig): string | undefined;
|
|
84
|
+
/** Pinned version from config, or latest from CDN when unset. */
|
|
85
|
+
export declare function resolveVersionFor(component: Component, config: SupatypeProjectConfig): Promise<string>;
|
|
86
|
+
/** @deprecated Prefer {@link pinnedVersion} or {@link resolveVersionFor}. */
|
|
75
87
|
export declare function versionFor(component: Component, config: SupatypeProjectConfig): string;
|
|
76
88
|
/**
|
|
77
89
|
* Fetch the latest available version for a component.
|
|
@@ -89,6 +101,6 @@ export declare function fetchAllLatestVersions(): Promise<Record<Component, stri
|
|
|
89
101
|
* Verify all cached binaries for the current platform (used by integration CI).
|
|
90
102
|
* Throws if any cached component is missing or fails format checks.
|
|
91
103
|
*/
|
|
92
|
-
export declare function verifyCachedBinaries(versions:
|
|
93
|
-
export declare function downloadAll(versions:
|
|
104
|
+
export declare function verifyCachedBinaries(versions: Partial<ComponentVersions> | undefined): void;
|
|
105
|
+
export declare function downloadAll(versions: Partial<ComponentVersions> | undefined, graceful?: boolean): Promise<void>;
|
|
94
106
|
//# sourceMappingURL=binary-cache.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"binary-cache.d.ts","sourceRoot":"","sources":["../src/binary-cache.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"binary-cache.d.ts","sourceRoot":"","sources":["../src/binary-cache.ts"],"names":[],"mappings":"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"}
|
package/dist/binary-cache.js
CHANGED
|
@@ -7,16 +7,20 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Security model:
|
|
9
9
|
* 1. Download checksums.sha256 + checksums.sha256.minisig from CDN.
|
|
10
|
-
* 2. Verify Ed25519 minisign signature on the checksum file using the
|
|
11
|
-
*
|
|
10
|
+
* 2. Verify the Ed25519 minisign signature on the checksum file using the
|
|
11
|
+
* release public key (embedded at publish, overridable via
|
|
12
|
+
* SUPATYPE_RELEASE_PUBLIC_KEY).
|
|
12
13
|
* 3. Verify SHA256 of the downloaded binary against the signed checksum.
|
|
13
|
-
*
|
|
14
|
+
* Verification is mandatory and fails closed: if no public key is configured,
|
|
15
|
+
* the download errors out rather than silently degrading to SHA256-only.
|
|
16
|
+
* The only escape hatch is the explicit SUPATYPE_ALLOW_UNVERIFIED_DOWNLOADS=1.
|
|
14
17
|
*/
|
|
15
18
|
import { createHash, createPublicKey, verify as cryptoVerify } from "node:crypto";
|
|
16
|
-
import { closeSync, copyFileSync, createWriteStream, existsSync, mkdirSync, openSync, readFileSync, readSync, statSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
19
|
+
import { closeSync, copyFileSync, createWriteStream, existsSync, mkdirSync, openSync, readFileSync, readSync, rmdirSync, statSync, unlinkSync, writeFileSync, } from "node:fs";
|
|
17
20
|
import { chmod } from "node:fs/promises";
|
|
18
21
|
import { homedir } from "node:os";
|
|
19
22
|
import { basename, join, resolve, isAbsolute } from "node:path";
|
|
23
|
+
import { loadProjectLink, migrateLegacyLinkFiles } from "./link.js";
|
|
20
24
|
import { releasePublicKey } from "./release-public-key.js";
|
|
21
25
|
/**
|
|
22
26
|
* Set `versions.{engine|server|postgres|deno}: VERSION_PIN_LOCAL` to mean “use `overrides.*` only”
|
|
@@ -64,12 +68,16 @@ export function describeActiveOverrides(config) {
|
|
|
64
68
|
}
|
|
65
69
|
/**
|
|
66
70
|
* True when this working tree is associated with a remote Supatype Cloud project:
|
|
67
|
-
* `project.ref
|
|
71
|
+
* `project.ref` or `.supatype/link.json` (cloud kind).
|
|
68
72
|
*/
|
|
69
73
|
export function isLinkedToCloudProject(cwd, config) {
|
|
70
74
|
const ref = config.project.ref;
|
|
71
75
|
if (typeof ref === "string" && ref.trim() !== "")
|
|
72
76
|
return true;
|
|
77
|
+
migrateLegacyLinkFiles(cwd);
|
|
78
|
+
const link = loadProjectLink(cwd);
|
|
79
|
+
if (link?.kind === "cloud" && link.projectRef.trim() !== "")
|
|
80
|
+
return true;
|
|
73
81
|
const linkedPath = join(cwd, ".supatype", "linked.json");
|
|
74
82
|
if (existsSync(linkedPath)) {
|
|
75
83
|
try {
|
|
@@ -100,16 +108,6 @@ const CDN_BASE = "https://releases.supatype.com";
|
|
|
100
108
|
export function postgresArchiveTag(version) {
|
|
101
109
|
return version.split(".")[0];
|
|
102
110
|
}
|
|
103
|
-
/**
|
|
104
|
-
* Supatype release signing public key (minisign format).
|
|
105
|
-
* Generated with: minisign -G
|
|
106
|
-
* Rotate by: generating a new pair, updating this constant, and updating
|
|
107
|
-
* the MINISIGN_PRIVATE_KEY GitHub Actions secret.
|
|
108
|
-
*
|
|
109
|
-
* ⚠ PLACEHOLDER — replace with actual public key before first release.
|
|
110
|
-
* When empty, minisign verification is skipped with a warning (SHA256 only).
|
|
111
|
-
*/
|
|
112
|
-
const SUPATYPE_RELEASE_PUBLIC_KEY = "";
|
|
113
111
|
// CDN path templates per component.
|
|
114
112
|
const CDN_PATHS = {
|
|
115
113
|
engine: (v, p) => `/engine/v${v}/supatype-engine-${p.os}-${p.arch}${p.os === "windows" ? ".exe" : ""}`,
|
|
@@ -183,7 +181,7 @@ export async function resolveBinary(component, config) {
|
|
|
183
181
|
"Remove overrides from supatype.config.ts / supatype.local.config.ts, or remove the cloud link files / clear project.ref.");
|
|
184
182
|
}
|
|
185
183
|
const overridePath = config.overrides?.[component === "postgres" ? "postgres_dir" : component];
|
|
186
|
-
const version =
|
|
184
|
+
const version = await resolveVersionFor(component, config);
|
|
187
185
|
if (version === VERSION_PIN_LOCAL && !overridePath) {
|
|
188
186
|
const key = component === "postgres" ? "postgres_dir" : component;
|
|
189
187
|
throw new Error(`[versions] versions.${component} is "${VERSION_PIN_LOCAL}" but overrides.${key} is not set. ` +
|
|
@@ -261,11 +259,11 @@ export async function download(component, version, platform) {
|
|
|
261
259
|
const checksumsUrl = `${CDN_BASE}${checksumsDirPath(component, version)}`;
|
|
262
260
|
const minisigUrl = `${checksumsUrl}.minisig`;
|
|
263
261
|
console.log(`[supatype] Downloading ${component} v${version} (${platform.os}/${platform.arch})...`);
|
|
264
|
-
// ── Fetch checksums + optional minisig ────────────────────────────────────
|
|
265
|
-
const expectedChecksum = await withRetry(() => fetchChecksums(checksumsUrl, minisigUrl, name));
|
|
266
|
-
// ── Stream-download binary with progress ─────────────────────────────────
|
|
267
262
|
const tmpPath = destPath + ".tmp";
|
|
268
263
|
try {
|
|
264
|
+
// ── Fetch checksums + optional minisig (retried on transient failures) ───
|
|
265
|
+
const expectedChecksum = await withRetry(() => fetchChecksums(checksumsUrl, minisigUrl, name));
|
|
266
|
+
// ── Stream-download binary with progress (retried on transient failures) ─
|
|
269
267
|
await withRetry(() => streamToFileWithProgress(binaryUrl, tmpPath));
|
|
270
268
|
// ── Verify SHA256 ────────────────────────────────────────────────────────
|
|
271
269
|
await verifyChecksum(tmpPath, expectedChecksum, component);
|
|
@@ -275,10 +273,24 @@ export async function download(component, version, platform) {
|
|
|
275
273
|
await chmod(destPath, 0o755);
|
|
276
274
|
}
|
|
277
275
|
}
|
|
276
|
+
catch (err) {
|
|
277
|
+
// Never leave a partial binary or an empty version directory behind: a stale
|
|
278
|
+
// empty dir makes the next resolve look fine while silently lacking a binary.
|
|
279
|
+
try {
|
|
280
|
+
if (existsSync(destPath))
|
|
281
|
+
unlinkSync(destPath);
|
|
282
|
+
}
|
|
283
|
+
catch { /* ignore */ }
|
|
284
|
+
try {
|
|
285
|
+
rmdirSync(dir);
|
|
286
|
+
}
|
|
287
|
+
catch { /* dir not empty or already removed */ }
|
|
288
|
+
throw new Error(`Failed to download ${component} v${version} from ${CDN_BASE}: ${err.message}`);
|
|
289
|
+
}
|
|
278
290
|
finally {
|
|
279
291
|
if (existsSync(tmpPath)) {
|
|
280
292
|
try {
|
|
281
|
-
|
|
293
|
+
unlinkSync(tmpPath);
|
|
282
294
|
}
|
|
283
295
|
catch { /* ignore */ }
|
|
284
296
|
}
|
|
@@ -296,20 +308,28 @@ async function fetchChecksums(checksumsUrl, minisigUrl, binaryFilename) {
|
|
|
296
308
|
}
|
|
297
309
|
const checksumsText = await csResp.text();
|
|
298
310
|
const pubKey = releasePublicKey();
|
|
299
|
-
if (pubKey) {
|
|
300
|
-
//
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
311
|
+
if (!pubKey) {
|
|
312
|
+
// Fail closed: a missing public key means we cannot verify authenticity, only
|
|
313
|
+
// integrity (SHA256). Published builds always embed the key, so this only
|
|
314
|
+
// happens in source/contributor builds — never silently downgrade.
|
|
315
|
+
if (process.env["SUPATYPE_ALLOW_UNVERIFIED_DOWNLOADS"] === "1") {
|
|
316
|
+
console.warn("[supatype] \u26a0 SUPATYPE_ALLOW_UNVERIFIED_DOWNLOADS=1 — no minisign public " +
|
|
317
|
+
"key configured; verifying SHA256 only (authenticity NOT checked).");
|
|
318
|
+
return extractChecksum(checksumsText, binaryFilename);
|
|
305
319
|
}
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
320
|
+
throw new Error("No minisign public key configured — cannot verify release authenticity.\n" +
|
|
321
|
+
"Published @supatype/cli builds embed the key automatically; if you are building " +
|
|
322
|
+
"from source, set SUPATYPE_RELEASE_PUBLIC_KEY to the release public key, or set " +
|
|
323
|
+
"SUPATYPE_ALLOW_UNVERIFIED_DOWNLOADS=1 to download with SHA256-only verification (unsafe).");
|
|
324
|
+
}
|
|
325
|
+
// Minisign signature is mandatory when a public key is configured.
|
|
326
|
+
const sigResp = await fetch(minisigUrl);
|
|
327
|
+
if (!sigResp.ok) {
|
|
328
|
+
throw new Error(`Failed to fetch checksum signature from ${minisigUrl}: HTTP ${sigResp.status}\n` +
|
|
329
|
+
"Cannot verify release integrity. Aborting download.");
|
|
330
|
+
}
|
|
331
|
+
const sigText = await sigResp.text();
|
|
332
|
+
verifyMinisign(Buffer.from(checksumsText, "utf8"), sigText, pubKey);
|
|
313
333
|
return extractChecksum(checksumsText, binaryFilename);
|
|
314
334
|
}
|
|
315
335
|
// ---------------------------------------------------------------------------
|
|
@@ -330,10 +350,10 @@ async function fetchChecksums(checksumsUrl, minisigUrl, binaryFilename) {
|
|
|
330
350
|
*/
|
|
331
351
|
const ED25519_SPKI_PREFIX = Buffer.from("302a300506032b6570032100", "hex");
|
|
332
352
|
/**
|
|
333
|
-
* Verify a minisign signature
|
|
334
|
-
* Throws if
|
|
353
|
+
* Verify a minisign signature. Supports both Ed25519 legacy mode ("Ed", over the
|
|
354
|
+
* raw file) and prehashed mode ("ED", over BLAKE2b-512(file)). Throws if invalid.
|
|
335
355
|
*/
|
|
336
|
-
function verifyMinisign(fileBytes, sigFileContent, pubKeyStr) {
|
|
356
|
+
export function verifyMinisign(fileBytes, sigFileContent, pubKeyStr) {
|
|
337
357
|
// Parse public key: [2 algo][8 keyId][32 ed25519 key]
|
|
338
358
|
const pkLines = pubKeyStr.trim().split("\n");
|
|
339
359
|
const pkBytes = Buffer.from(pkLines[pkLines.length - 1].trim(), "base64");
|
|
@@ -355,19 +375,27 @@ function verifyMinisign(fileBytes, sigFileContent, pubKeyStr) {
|
|
|
355
375
|
const algo = sigBytes.subarray(0, 2);
|
|
356
376
|
const sigKeyId = sigBytes.subarray(2, 10);
|
|
357
377
|
const signature = sigBytes.subarray(10, 74);
|
|
358
|
-
//
|
|
359
|
-
//
|
|
360
|
-
|
|
361
|
-
|
|
378
|
+
// Both Ed25519 modes are supported:
|
|
379
|
+
// "Ed" (0x45, 0x64) — legacy: signature is over the raw file bytes.
|
|
380
|
+
// "ED" (0x45, 0x44) — prehashed: signature is over BLAKE2b-512(file).
|
|
381
|
+
// Modern minisign (and our release pipeline) default to prehashed mode.
|
|
382
|
+
if (algo[0] !== 0x45 || (algo[1] !== 0x64 && algo[1] !== 0x44)) {
|
|
383
|
+
throw new Error("Unsupported minisign algorithm — expected Ed25519 ('Ed' legacy or 'ED' prehashed).\n" +
|
|
362
384
|
`Got: 0x${algo[0]?.toString(16)}${algo[1]?.toString(16)}`);
|
|
363
385
|
}
|
|
386
|
+
const prehashed = algo[1] === 0x44;
|
|
364
387
|
if (!sigKeyId.equals(pkKeyId)) {
|
|
365
388
|
throw new Error("Minisign key ID mismatch — signature was produced with a different key.\n" +
|
|
366
389
|
"This could indicate a compromised release. Do not proceed.");
|
|
367
390
|
}
|
|
368
391
|
const spkiDer = Buffer.concat([ED25519_SPKI_PREFIX, pkEd25519]);
|
|
369
392
|
const keyObject = createPublicKey({ key: spkiDer, format: "der", type: "spki" });
|
|
370
|
-
|
|
393
|
+
// Pure Ed25519 (PureEdDSA) verifies over the message directly; for prehashed
|
|
394
|
+
// minisign the "message" is the BLAKE2b-512 digest of the file.
|
|
395
|
+
const signedData = prehashed
|
|
396
|
+
? createHash("blake2b512").update(fileBytes).digest()
|
|
397
|
+
: fileBytes;
|
|
398
|
+
const valid = cryptoVerify(null, signedData, keyObject, signature);
|
|
371
399
|
if (!valid) {
|
|
372
400
|
throw new Error("Minisign signature verification FAILED — the checksum file may have been tampered with.\n" +
|
|
373
401
|
"This could indicate a supply chain attack. Aborting download.");
|
|
@@ -587,10 +615,25 @@ export function normalisePlatformPath(p) {
|
|
|
587
615
|
}
|
|
588
616
|
return result;
|
|
589
617
|
}
|
|
618
|
+
export function pinnedVersion(component, config) {
|
|
619
|
+
const version = config.versions?.[component];
|
|
620
|
+
if (typeof version !== "string")
|
|
621
|
+
return undefined;
|
|
622
|
+
const trimmed = version.trim();
|
|
623
|
+
return trimmed === "" ? undefined : trimmed;
|
|
624
|
+
}
|
|
625
|
+
/** Pinned version from config, or latest from CDN when unset. */
|
|
626
|
+
export async function resolveVersionFor(component, config) {
|
|
627
|
+
const pinned = pinnedVersion(component, config);
|
|
628
|
+
if (pinned)
|
|
629
|
+
return pinned;
|
|
630
|
+
return fetchLatestVersion(component);
|
|
631
|
+
}
|
|
632
|
+
/** @deprecated Prefer {@link pinnedVersion} or {@link resolveVersionFor}. */
|
|
590
633
|
export function versionFor(component, config) {
|
|
591
|
-
const version = config
|
|
592
|
-
if (
|
|
593
|
-
throw new Error(`[supatype] versions.${component}
|
|
634
|
+
const version = pinnedVersion(component, config);
|
|
635
|
+
if (!version) {
|
|
636
|
+
throw new Error(`[supatype] versions.${component} is not pinned in supatype.config.ts (omit versions to use latest)`);
|
|
594
637
|
}
|
|
595
638
|
return version;
|
|
596
639
|
}
|
|
@@ -631,6 +674,9 @@ export async function fetchAllLatestVersions() {
|
|
|
631
674
|
* Throws if any cached component is missing or fails format checks.
|
|
632
675
|
*/
|
|
633
676
|
export function verifyCachedBinaries(versions) {
|
|
677
|
+
if (!versions) {
|
|
678
|
+
throw new Error("[supatype] verifyCachedBinaries requires pinned versions");
|
|
679
|
+
}
|
|
634
680
|
const platform = currentPlatform();
|
|
635
681
|
for (const component of BINARY_COMPONENTS) {
|
|
636
682
|
const version = versions[component];
|
|
@@ -647,9 +693,9 @@ export function verifyCachedBinaries(versions) {
|
|
|
647
693
|
export async function downloadAll(versions, graceful = false) {
|
|
648
694
|
const platform = currentPlatform();
|
|
649
695
|
const components = [...BINARY_COMPONENTS];
|
|
650
|
-
const
|
|
696
|
+
const latest = await fetchAllLatestVersions();
|
|
651
697
|
for (const component of components) {
|
|
652
|
-
const version =
|
|
698
|
+
const version = versions?.[component] ?? latest[component];
|
|
653
699
|
if (version === VERSION_PIN_LOCAL)
|
|
654
700
|
continue;
|
|
655
701
|
try {
|