@supatype/cli 0.1.0-alpha.12 → 0.1.0-alpha.14
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 +1 -1
- package/.turbo/turbo-test.log +207 -89
- package/.turbo/turbo-typecheck.log +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/binary-cache.d.ts +11 -3
- package/dist/binary-cache.d.ts.map +1 -1
- package/dist/binary-cache.js +62 -39
- package/dist/binary-cache.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +2 -0
- 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 +83 -0
- package/dist/commands/add.js.map +1 -0
- package/dist/commands/app.js +2 -2
- package/dist/commands/app.js.map +1 -1
- package/dist/commands/init.d.ts +29 -1
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +569 -90
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/keys.d.ts +15 -1
- package/dist/commands/keys.d.ts.map +1 -1
- package/dist/commands/keys.js +39 -4
- package/dist/commands/keys.js.map +1 -1
- package/dist/engine-client.d.ts.map +1 -1
- package/dist/engine-client.js +12 -4
- package/dist/engine-client.js.map +1 -1
- 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/project-config.d.ts +16 -0
- package/dist/project-config.d.ts.map +1 -1
- package/dist/project-config.js +34 -0
- package/dist/project-config.js.map +1 -1
- package/dist/prompts.d.ts +8 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +20 -0
- package/dist/prompts.js.map +1 -0
- package/dist/scripts/postinstall.js +5 -1
- package/dist/scripts/postinstall.js.map +1 -1
- package/dist/self-host-compose.d.ts.map +1 -1
- package/dist/self-host-compose.js +61 -17
- package/dist/self-host-compose.js.map +1 -1
- package/package.json +2 -1
- package/src/app-config.ts +80 -0
- package/src/binary-cache.ts +64 -42
- package/src/cli.ts +2 -0
- package/src/commands/add.ts +94 -0
- package/src/commands/app.ts +2 -2
- package/src/commands/init.ts +738 -88
- package/src/commands/keys.ts +49 -4
- package/src/engine-client.ts +11 -4
- package/src/kong-config.ts +24 -1
- package/src/project-config.ts +45 -0
- package/src/prompts.ts +21 -0
- package/src/scripts/postinstall.ts +7 -1
- package/src/self-host-compose.ts +61 -17
- package/tests/config.test.ts +26 -0
- package/tests/init.test.ts +128 -15
- package/tests/minisign.test.ts +102 -0
- package/tests/runtime-contract.test.ts +111 -1
- package/tsconfig.tsbuildinfo +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
2
2
|
import { dirname, join, relative, resolve } from "node:path";
|
|
3
3
|
import { spawnSync } from "node:child_process";
|
|
4
|
-
import { preferredFunctionsPathFromProject } from "./project-config.js";
|
|
4
|
+
import { preferredFunctionsPathFromProject, selfHostTlsEnabled } from "./project-config.js";
|
|
5
5
|
import { hasEngineOverride, hasStudioOverride, pinnedVersion, fetchLatestVersion, VERSION_PIN_LOCAL } from "./binary-cache.js";
|
|
6
6
|
import { buildKongDeclarative } from "./kong-config.js";
|
|
7
7
|
/** Env keys written when `versions` pins exist in supatype.config.ts. */
|
|
@@ -196,6 +196,11 @@ export function renderSelfHostCompose(config, cwd = process.cwd(), options) {
|
|
|
196
196
|
const projectMount = projectMountPath(cwd);
|
|
197
197
|
const kongMount = kongMountPath(cwd);
|
|
198
198
|
const devLocal = options?.devLocal === true;
|
|
199
|
+
const tlsEnabled = selfHostTlsEnabled(config, devLocal);
|
|
200
|
+
const domain = config.server.domain?.trim() ?? "";
|
|
201
|
+
// When TLS is on, default external URLs to https://<domain> so auth links/redirects use HTTPS.
|
|
202
|
+
const externalUrlFallback = tlsEnabled ? `https://${domain}` : "http://localhost:18473";
|
|
203
|
+
const siteUrlFallback = tlsEnabled ? `https://${domain}` : "http://localhost:3000";
|
|
199
204
|
const studioHostDev = devLocal && hasStudioOverride(config);
|
|
200
205
|
const appEnv = serverAppEnvForCompose(config, devLocal);
|
|
201
206
|
const staticDir = staticDirForCompose(config) ?? "./dist";
|
|
@@ -207,7 +212,7 @@ export function renderSelfHostCompose(config, cwd = process.cwd(), options) {
|
|
|
207
212
|
studio:
|
|
208
213
|
${studioService}
|
|
209
214
|
environment:
|
|
210
|
-
SUPATYPE_CLOUD_JSON: '{"url":"\${API_EXTERNAL_URL
|
|
215
|
+
SUPATYPE_CLOUD_JSON: '{"url":"\${API_EXTERNAL_URL:-${externalUrlFallback}}","anonKey":"\${ANON_KEY:-}"}'
|
|
211
216
|
expose:
|
|
212
217
|
- "3002"
|
|
213
218
|
`;
|
|
@@ -237,6 +242,43 @@ ${studioService}
|
|
|
237
242
|
: ` ports:
|
|
238
243
|
- "9000:9000"
|
|
239
244
|
- "9001:9001"
|
|
245
|
+
`;
|
|
246
|
+
const kongTlsEnv = tlsEnabled
|
|
247
|
+
? ` KONG_PROXY_LISTEN: "0.0.0.0:8000, 0.0.0.0:8443 ssl"
|
|
248
|
+
KONG_LUA_SSL_TRUSTED_CERTIFICATE: system
|
|
249
|
+
`
|
|
250
|
+
: "";
|
|
251
|
+
const kongPorts = tlsEnabled
|
|
252
|
+
? ` - "80:8000"
|
|
253
|
+
- "443:8443"`
|
|
254
|
+
: ` - "\${SUPATYPE_KONG_PORT:-18473}:8000"`;
|
|
255
|
+
const kongTlsDependsOn = tlsEnabled ? "\n - valkey" : "";
|
|
256
|
+
const valkeyBlock = tlsEnabled
|
|
257
|
+
? `
|
|
258
|
+
valkey:
|
|
259
|
+
image: \${SUPATYPE_VALKEY_IMAGE:-valkey/valkey:8-alpine}
|
|
260
|
+
command: ["valkey-server", "--appendonly", "yes"]
|
|
261
|
+
expose:
|
|
262
|
+
- "6379"
|
|
263
|
+
volumes:
|
|
264
|
+
- valkey-data:/data
|
|
265
|
+
`
|
|
266
|
+
: "";
|
|
267
|
+
const tlsHintComment = tlsEnabled
|
|
268
|
+
? ""
|
|
269
|
+
: ` # HTTPS is off. To enable automatic TLS (Let's Encrypt) for production, set in supatype.config.ts:
|
|
270
|
+
# server: { mode: "standalone", domain: "your.domain", tls: { email: "you@example.com" } }
|
|
271
|
+
# then re-run \`supatype self-host compose up -d\`. Kong publishes :80/:443 and provisions certs automatically.
|
|
272
|
+
`;
|
|
273
|
+
const volumesBlock = tlsEnabled
|
|
274
|
+
? `volumes:
|
|
275
|
+
db-data:
|
|
276
|
+
minio-data:
|
|
277
|
+
valkey-data:
|
|
278
|
+
`
|
|
279
|
+
: `volumes:
|
|
280
|
+
db-data:
|
|
281
|
+
minio-data:
|
|
240
282
|
`;
|
|
241
283
|
return `# Generated by supatype self-host compose
|
|
242
284
|
# Kong → supatype-server (unified gateway) → internal PostgREST / storage / etc.
|
|
@@ -297,12 +339,12 @@ ${dbPorts} volumes:
|
|
|
297
339
|
SUPATYPE_FUNCTIONS_ROOT: /project/functions
|
|
298
340
|
SUPATYPE_DENO_FUNCTIONS_DIR: /project/functions
|
|
299
341
|
PORT: "8001"
|
|
300
|
-
SUPATYPE_URL: \${API_EXTERNAL_URL
|
|
342
|
+
SUPATYPE_URL: \${API_EXTERNAL_URL:-${externalUrlFallback}}
|
|
301
343
|
SUPATYPE_ANON_KEY: \${ANON_KEY:-}
|
|
302
344
|
SUPATYPE_SERVICE_ROLE_KEY: \${SERVICE_ROLE_KEY:-}
|
|
303
345
|
STRIPE_SECRET_KEY: \${STRIPE_SECRET_KEY:-}
|
|
304
346
|
STRIPE_WEBHOOK_SECRET: \${STRIPE_WEBHOOK_SECRET:-}
|
|
305
|
-
SITE_URL: \${SITE_URL:-\${API_EXTERNAL_URL
|
|
347
|
+
SITE_URL: \${SITE_URL:-\${API_EXTERNAL_URL:-${externalUrlFallback}}}
|
|
306
348
|
depends_on:
|
|
307
349
|
db:
|
|
308
350
|
condition: service_healthy
|
|
@@ -341,7 +383,7 @@ ${serverPorts} volumes:
|
|
|
341
383
|
SUPATYPE_POSTGREST_URL: http://postgrest:3000
|
|
342
384
|
SUPATYPE_GRAPHQL_URL: http://postgrest:3000
|
|
343
385
|
SUPATYPE_STORAGE_URL: http://storage:5000
|
|
344
|
-
SUPATYPE_URL: \${API_EXTERNAL_URL
|
|
386
|
+
SUPATYPE_URL: \${API_EXTERNAL_URL:-${externalUrlFallback}}
|
|
345
387
|
SUPATYPE_ANON_KEY: \${ANON_KEY:-}
|
|
346
388
|
SUPATYPE_SERVICE_ROLE_KEY: \${SERVICE_ROLE_KEY:-}
|
|
347
389
|
SUPATYPE_SQL_DATABASE_URL: "postgresql://\${POSTGRES_USER:-supatype_admin}:\${POSTGRES_PASSWORD:-postgres}@db:5432/\${POSTGRES_DB:-supatype}"
|
|
@@ -351,11 +393,11 @@ ${serverPorts} volumes:
|
|
|
351
393
|
${appEnv}
|
|
352
394
|
GOTRUE_API_HOST: 0.0.0.0
|
|
353
395
|
GOTRUE_API_PORT: 9999
|
|
354
|
-
API_EXTERNAL_URL: \${API_EXTERNAL_URL
|
|
355
|
-
GOTRUE_API_EXTERNAL_URL: \${API_EXTERNAL_URL
|
|
396
|
+
API_EXTERNAL_URL: \${API_EXTERNAL_URL:-${externalUrlFallback}}
|
|
397
|
+
GOTRUE_API_EXTERNAL_URL: \${API_EXTERNAL_URL:-${externalUrlFallback}}
|
|
356
398
|
GOTRUE_DB_DRIVER: postgres
|
|
357
399
|
GOTRUE_DB_DATABASE_URL: "postgres://\${POSTGRES_USER:-supatype_admin}:\${POSTGRES_PASSWORD:-postgres}@db:5432/\${POSTGRES_DB:-supatype}?search_path=auth"
|
|
358
|
-
GOTRUE_SITE_URL: \${SITE_URL
|
|
400
|
+
GOTRUE_SITE_URL: \${SITE_URL:-${siteUrlFallback}}
|
|
359
401
|
GOTRUE_JWT_SECRET: \${JWT_SECRET:-super-secret-jwt-token-change-in-production}
|
|
360
402
|
GOTRUE_JWT_EXP: 3600
|
|
361
403
|
GOTRUE_JWT_AUD: authenticated
|
|
@@ -395,8 +437,7 @@ ${minioPorts} volumes:
|
|
|
395
437
|
depends_on:
|
|
396
438
|
db:
|
|
397
439
|
condition: service_healthy
|
|
398
|
-
${studioBlock}
|
|
399
|
-
kong:
|
|
440
|
+
${studioBlock}${valkeyBlock}${tlsHintComment} kong:
|
|
400
441
|
image: kong:3.6
|
|
401
442
|
environment:
|
|
402
443
|
KONG_DATABASE: "off"
|
|
@@ -405,17 +446,14 @@ ${studioBlock}
|
|
|
405
446
|
KONG_ADMIN_ACCESS_LOG: /dev/stdout
|
|
406
447
|
KONG_PROXY_ERROR_LOG: /dev/stderr
|
|
407
448
|
KONG_ADMIN_ERROR_LOG: /dev/stderr
|
|
408
|
-
volumes:
|
|
449
|
+
${kongTlsEnv} volumes:
|
|
409
450
|
- ${kongMount}:/etc/kong/kong.yml:ro
|
|
410
451
|
ports:
|
|
411
|
-
|
|
452
|
+
${kongPorts}
|
|
412
453
|
depends_on:
|
|
413
|
-
${kongDependsOn}
|
|
454
|
+
${kongDependsOn}${kongTlsDependsOn}
|
|
414
455
|
|
|
415
|
-
|
|
416
|
-
db-data:
|
|
417
|
-
minio-data:
|
|
418
|
-
`;
|
|
456
|
+
${volumesBlock}`;
|
|
419
457
|
}
|
|
420
458
|
function ensureComposeManifest(cwd) {
|
|
421
459
|
const manifestPath = join(cwd, ".supatype", "manifest.json");
|
|
@@ -441,12 +479,18 @@ export function writeSelfHostCompose(cwd, config, options) {
|
|
|
441
479
|
ensureComposeManifest(cwd);
|
|
442
480
|
writeFileSync(paths.composePath, renderSelfHostCompose(config, cwd, options), "utf8");
|
|
443
481
|
const studioHostDev = options?.devLocal === true && hasStudioOverride(config);
|
|
482
|
+
const tlsEnabled = selfHostTlsEnabled(config, options?.devLocal === true);
|
|
483
|
+
const domain = config.server.domain?.trim();
|
|
484
|
+
const acmeEmail = config.server.tls?.email?.trim();
|
|
444
485
|
writeFileSync(paths.kongPath, buildKongDeclarative({
|
|
445
486
|
unifiedGateway: true,
|
|
446
487
|
...(studioHostDev && {
|
|
447
488
|
studioServiceUrl: COMPOSE_STUDIO_HOST_URL,
|
|
448
489
|
studioStripPath: false,
|
|
449
490
|
}),
|
|
491
|
+
...(tlsEnabled && domain && acmeEmail
|
|
492
|
+
? { acme: { email: acmeEmail, domain, redisHost: "valkey" } }
|
|
493
|
+
: {}),
|
|
450
494
|
}), "utf8");
|
|
451
495
|
return paths;
|
|
452
496
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"self-host-compose.js","sourceRoot":"","sources":["../src/self-host-compose.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"self-host-compose.js","sourceRoot":"","sources":["../src/self-host-compose.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@supatype/cli",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.14",
|
|
4
4
|
"description": "Supatype CLI — schema push, introspect, generate",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
}
|
|
20
20
|
},
|
|
21
21
|
"dependencies": {
|
|
22
|
+
"@clack/prompts": "^1.6.0",
|
|
22
23
|
"commander": "^12.1.0",
|
|
23
24
|
"pg": "^8.13.0",
|
|
24
25
|
"ts-morph": "^28.0.0",
|
package/src/app-config.ts
CHANGED
|
@@ -55,6 +55,86 @@ function updateAppConfigAst(configPath: string, input: UpdateAppConfigInput): st
|
|
|
55
55
|
return sourceFile.getFullText()
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
+
export interface UpdateServerConfigInput {
|
|
59
|
+
domain: string
|
|
60
|
+
tlsEmail: string
|
|
61
|
+
provider?: "kong" | "none"
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Set `server.mode = "standalone"` plus `domain` and `tls` in supatype.config.ts,
|
|
66
|
+
* enabling self-host HTTPS. Preserves other `server` keys (port, etc).
|
|
67
|
+
*/
|
|
68
|
+
export function updateServerConfigInProject(cwd: string, input: UpdateServerConfigInput): string {
|
|
69
|
+
const configPath = resolve(cwd, "supatype.config.ts")
|
|
70
|
+
if (!existsSync(configPath)) {
|
|
71
|
+
throw new Error("supatype.config.ts not found. Run: supatype init")
|
|
72
|
+
}
|
|
73
|
+
const next = updateServerConfigAst(configPath, input)
|
|
74
|
+
writeFileSync(configPath, next, "utf8")
|
|
75
|
+
return configPath
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function updateServerConfigAst(configPath: string, input: UpdateServerConfigInput): string {
|
|
79
|
+
const project = new Project({
|
|
80
|
+
useInMemoryFileSystem: false,
|
|
81
|
+
skipAddingFilesFromTsConfig: true,
|
|
82
|
+
manipulationSettings: {
|
|
83
|
+
quoteKind: QuoteKind.Double,
|
|
84
|
+
},
|
|
85
|
+
})
|
|
86
|
+
const srcText = readFileSync(configPath, "utf8")
|
|
87
|
+
const sourceFile = project.createSourceFile(configPath, srcText, { overwrite: true })
|
|
88
|
+
const rootObject = getRootConfigObject(sourceFile)
|
|
89
|
+
|
|
90
|
+
const serverProperty = rootObject.getProperty("server")
|
|
91
|
+
|
|
92
|
+
if (serverProperty === undefined) {
|
|
93
|
+
rootObject.addPropertyAssignment({
|
|
94
|
+
name: "server",
|
|
95
|
+
initializer: renderServerInitializer(input),
|
|
96
|
+
})
|
|
97
|
+
} else if (Node.isPropertyAssignment(serverProperty)) {
|
|
98
|
+
const init = serverProperty.getInitializer()
|
|
99
|
+
if (init && Node.isObjectLiteralExpression(init)) {
|
|
100
|
+
patchServerObject(init, input)
|
|
101
|
+
} else {
|
|
102
|
+
serverProperty.setInitializer(renderServerInitializer(input))
|
|
103
|
+
}
|
|
104
|
+
} else {
|
|
105
|
+
serverProperty.remove()
|
|
106
|
+
rootObject.addPropertyAssignment({
|
|
107
|
+
name: "server",
|
|
108
|
+
initializer: renderServerInitializer(input),
|
|
109
|
+
})
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
return sourceFile.getFullText()
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function renderServerInitializer(input: UpdateServerConfigInput): string {
|
|
116
|
+
const provider = input.provider ?? "kong"
|
|
117
|
+
return `{
|
|
118
|
+
mode: "standalone",
|
|
119
|
+
domain: "${input.domain}",
|
|
120
|
+
tls: { email: "${input.tlsEmail}", provider: "${provider}" },
|
|
121
|
+
}`
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
function patchServerObject(serverObj: ObjectLiteralExpression, input: UpdateServerConfigInput): void {
|
|
125
|
+
upsertStringProperty(serverObj, "mode", "standalone")
|
|
126
|
+
upsertStringProperty(serverObj, "domain", input.domain)
|
|
127
|
+
const provider = input.provider ?? "kong"
|
|
128
|
+
const tlsInitializer = `{ email: "${input.tlsEmail}", provider: "${provider}" }`
|
|
129
|
+
const existing = serverObj.getProperty("tls")
|
|
130
|
+
if (existing && Node.isPropertyAssignment(existing)) {
|
|
131
|
+
existing.setInitializer(tlsInitializer)
|
|
132
|
+
} else {
|
|
133
|
+
if (existing) existing.remove()
|
|
134
|
+
serverObj.addPropertyAssignment({ name: "tls", initializer: tlsInitializer })
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
58
138
|
function getRootConfigObject(sourceFile: SourceFile): ObjectLiteralExpression {
|
|
59
139
|
const exportAssignment = sourceFile.getFirstDescendantByKind(SyntaxKind.ExportAssignment)
|
|
60
140
|
if (!exportAssignment) {
|
package/src/binary-cache.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
|
|
|
16
19
|
import { createHash, createPublicKey, verify as cryptoVerify } from "node:crypto"
|
|
@@ -23,6 +26,7 @@ import {
|
|
|
23
26
|
openSync,
|
|
24
27
|
readFileSync,
|
|
25
28
|
readSync,
|
|
29
|
+
rmdirSync,
|
|
26
30
|
statSync,
|
|
27
31
|
unlinkSync,
|
|
28
32
|
writeFileSync,
|
|
@@ -135,17 +139,6 @@ export function postgresArchiveTag(version: string): string {
|
|
|
135
139
|
return version.split(".")[0]!
|
|
136
140
|
}
|
|
137
141
|
|
|
138
|
-
/**
|
|
139
|
-
* Supatype release signing public key (minisign format).
|
|
140
|
-
* Generated with: minisign -G
|
|
141
|
-
* Rotate by: generating a new pair, updating this constant, and updating
|
|
142
|
-
* the MINISIGN_PRIVATE_KEY GitHub Actions secret.
|
|
143
|
-
*
|
|
144
|
-
* ⚠ PLACEHOLDER — replace with actual public key before first release.
|
|
145
|
-
* When empty, minisign verification is skipped with a warning (SHA256 only).
|
|
146
|
-
*/
|
|
147
|
-
const SUPATYPE_RELEASE_PUBLIC_KEY = ""
|
|
148
|
-
|
|
149
142
|
// CDN path templates per component.
|
|
150
143
|
const CDN_PATHS: Record<Component, (version: string, platform: PlatformId) => string> = {
|
|
151
144
|
engine: (v, p) => `/engine/v${v}/supatype-engine-${p.os}-${p.arch}${p.os === "windows" ? ".exe" : ""}`,
|
|
@@ -340,14 +333,14 @@ export async function download(
|
|
|
340
333
|
|
|
341
334
|
console.log(`[supatype] Downloading ${component} v${version} (${platform.os}/${platform.arch})...`)
|
|
342
335
|
|
|
343
|
-
// ── Fetch checksums + optional minisig ────────────────────────────────────
|
|
344
|
-
const expectedChecksum = await withRetry(() =>
|
|
345
|
-
fetchChecksums(checksumsUrl, minisigUrl, name),
|
|
346
|
-
)
|
|
347
|
-
|
|
348
|
-
// ── Stream-download binary with progress ─────────────────────────────────
|
|
349
336
|
const tmpPath = destPath + ".tmp"
|
|
350
337
|
try {
|
|
338
|
+
// ── Fetch checksums + optional minisig (retried on transient failures) ───
|
|
339
|
+
const expectedChecksum = await withRetry(() =>
|
|
340
|
+
fetchChecksums(checksumsUrl, minisigUrl, name),
|
|
341
|
+
)
|
|
342
|
+
|
|
343
|
+
// ── Stream-download binary with progress (retried on transient failures) ─
|
|
351
344
|
await withRetry(() => streamToFileWithProgress(binaryUrl, tmpPath))
|
|
352
345
|
|
|
353
346
|
// ── Verify SHA256 ────────────────────────────────────────────────────────
|
|
@@ -359,9 +352,17 @@ export async function download(
|
|
|
359
352
|
if (process.platform !== "win32" && EXECUTABLE_COMPONENTS.has(component)) {
|
|
360
353
|
await chmod(destPath, 0o755)
|
|
361
354
|
}
|
|
355
|
+
} catch (err) {
|
|
356
|
+
// Never leave a partial binary or an empty version directory behind: a stale
|
|
357
|
+
// empty dir makes the next resolve look fine while silently lacking a binary.
|
|
358
|
+
try { if (existsSync(destPath)) unlinkSync(destPath) } catch { /* ignore */ }
|
|
359
|
+
try { rmdirSync(dir) } catch { /* dir not empty or already removed */ }
|
|
360
|
+
throw new Error(
|
|
361
|
+
`Failed to download ${component} v${version} from ${CDN_BASE}: ${(err as Error).message}`,
|
|
362
|
+
)
|
|
362
363
|
} finally {
|
|
363
364
|
if (existsSync(tmpPath)) {
|
|
364
|
-
try {
|
|
365
|
+
try { unlinkSync(tmpPath) } catch { /* ignore */ }
|
|
365
366
|
}
|
|
366
367
|
}
|
|
367
368
|
|
|
@@ -384,24 +385,36 @@ async function fetchChecksums(
|
|
|
384
385
|
const checksumsText = await csResp.text()
|
|
385
386
|
|
|
386
387
|
const pubKey = releasePublicKey()
|
|
387
|
-
if (pubKey) {
|
|
388
|
-
//
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
388
|
+
if (!pubKey) {
|
|
389
|
+
// Fail closed: a missing public key means we cannot verify authenticity, only
|
|
390
|
+
// integrity (SHA256). Published builds always embed the key, so this only
|
|
391
|
+
// happens in source/contributor builds — never silently downgrade.
|
|
392
|
+
if (process.env["SUPATYPE_ALLOW_UNVERIFIED_DOWNLOADS"] === "1") {
|
|
393
|
+
console.warn(
|
|
394
|
+
"[supatype] \u26a0 SUPATYPE_ALLOW_UNVERIFIED_DOWNLOADS=1 — no minisign public " +
|
|
395
|
+
"key configured; verifying SHA256 only (authenticity NOT checked).",
|
|
394
396
|
)
|
|
397
|
+
return extractChecksum(checksumsText, binaryFilename)
|
|
395
398
|
}
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
"skipping signature verification (SHA256 only).",
|
|
399
|
+
throw new Error(
|
|
400
|
+
"No minisign public key configured — cannot verify release authenticity.\n" +
|
|
401
|
+
"Published @supatype/cli builds embed the key automatically; if you are building " +
|
|
402
|
+
"from source, set SUPATYPE_RELEASE_PUBLIC_KEY to the release public key, or set " +
|
|
403
|
+
"SUPATYPE_ALLOW_UNVERIFIED_DOWNLOADS=1 to download with SHA256-only verification (unsafe).",
|
|
402
404
|
)
|
|
403
405
|
}
|
|
404
406
|
|
|
407
|
+
// Minisign signature is mandatory when a public key is configured.
|
|
408
|
+
const sigResp = await fetch(minisigUrl)
|
|
409
|
+
if (!sigResp.ok) {
|
|
410
|
+
throw new Error(
|
|
411
|
+
`Failed to fetch checksum signature from ${minisigUrl}: HTTP ${sigResp.status}\n` +
|
|
412
|
+
"Cannot verify release integrity. Aborting download.",
|
|
413
|
+
)
|
|
414
|
+
}
|
|
415
|
+
const sigText = await sigResp.text()
|
|
416
|
+
verifyMinisign(Buffer.from(checksumsText, "utf8"), sigText, pubKey)
|
|
417
|
+
|
|
405
418
|
return extractChecksum(checksumsText, binaryFilename)
|
|
406
419
|
}
|
|
407
420
|
|
|
@@ -425,10 +438,10 @@ async function fetchChecksums(
|
|
|
425
438
|
const ED25519_SPKI_PREFIX = Buffer.from("302a300506032b6570032100", "hex")
|
|
426
439
|
|
|
427
440
|
/**
|
|
428
|
-
* Verify a minisign signature
|
|
429
|
-
* Throws if
|
|
441
|
+
* Verify a minisign signature. Supports both Ed25519 legacy mode ("Ed", over the
|
|
442
|
+
* raw file) and prehashed mode ("ED", over BLAKE2b-512(file)). Throws if invalid.
|
|
430
443
|
*/
|
|
431
|
-
function verifyMinisign(fileBytes: Buffer, sigFileContent: string, pubKeyStr: string): void {
|
|
444
|
+
export function verifyMinisign(fileBytes: Buffer, sigFileContent: string, pubKeyStr: string): void {
|
|
432
445
|
// Parse public key: [2 algo][8 keyId][32 ed25519 key]
|
|
433
446
|
const pkLines = pubKeyStr.trim().split("\n")
|
|
434
447
|
const pkBytes = Buffer.from(pkLines[pkLines.length - 1]!.trim(), "base64")
|
|
@@ -450,14 +463,17 @@ function verifyMinisign(fileBytes: Buffer, sigFileContent: string, pubKeyStr: st
|
|
|
450
463
|
const sigKeyId = sigBytes.subarray(2, 10)
|
|
451
464
|
const signature = sigBytes.subarray(10, 74)
|
|
452
465
|
|
|
453
|
-
//
|
|
454
|
-
//
|
|
455
|
-
|
|
466
|
+
// Both Ed25519 modes are supported:
|
|
467
|
+
// "Ed" (0x45, 0x64) — legacy: signature is over the raw file bytes.
|
|
468
|
+
// "ED" (0x45, 0x44) — prehashed: signature is over BLAKE2b-512(file).
|
|
469
|
+
// Modern minisign (and our release pipeline) default to prehashed mode.
|
|
470
|
+
if (algo[0] !== 0x45 || (algo[1] !== 0x64 && algo[1] !== 0x44)) {
|
|
456
471
|
throw new Error(
|
|
457
|
-
"Unsupported minisign algorithm —
|
|
472
|
+
"Unsupported minisign algorithm — expected Ed25519 ('Ed' legacy or 'ED' prehashed).\n" +
|
|
458
473
|
`Got: 0x${algo[0]?.toString(16)}${algo[1]?.toString(16)}`,
|
|
459
474
|
)
|
|
460
475
|
}
|
|
476
|
+
const prehashed = algo[1] === 0x44
|
|
461
477
|
|
|
462
478
|
if (!sigKeyId.equals(pkKeyId)) {
|
|
463
479
|
throw new Error(
|
|
@@ -469,7 +485,13 @@ function verifyMinisign(fileBytes: Buffer, sigFileContent: string, pubKeyStr: st
|
|
|
469
485
|
const spkiDer = Buffer.concat([ED25519_SPKI_PREFIX, pkEd25519])
|
|
470
486
|
const keyObject = createPublicKey({ key: spkiDer, format: "der", type: "spki" })
|
|
471
487
|
|
|
472
|
-
|
|
488
|
+
// Pure Ed25519 (PureEdDSA) verifies over the message directly; for prehashed
|
|
489
|
+
// minisign the "message" is the BLAKE2b-512 digest of the file.
|
|
490
|
+
const signedData = prehashed
|
|
491
|
+
? createHash("blake2b512").update(fileBytes).digest()
|
|
492
|
+
: fileBytes
|
|
493
|
+
|
|
494
|
+
const valid = cryptoVerify(null, signedData, keyObject, signature)
|
|
473
495
|
if (!valid) {
|
|
474
496
|
throw new Error(
|
|
475
497
|
"Minisign signature verification FAILED — the checksum file may have been tampered with.\n" +
|
package/src/cli.ts
CHANGED
|
@@ -15,6 +15,7 @@ import { registerMigrate } from "./commands/migrate.js"
|
|
|
15
15
|
import { registerSeed } from "./commands/seed.js"
|
|
16
16
|
import { registerKeys } from "./commands/keys.js"
|
|
17
17
|
import { registerApp } from "./commands/app.js"
|
|
18
|
+
import { registerAdd } from "./commands/add.js"
|
|
18
19
|
import { registerSelfHost } from "./commands/self-host.js"
|
|
19
20
|
import { registerCloud } from "./commands/cloud.js"
|
|
20
21
|
import { registerEngine } from "./commands/engine.js"
|
|
@@ -52,6 +53,7 @@ export function run(): void {
|
|
|
52
53
|
registerSeed(program)
|
|
53
54
|
registerKeys(program)
|
|
54
55
|
registerApp(program)
|
|
56
|
+
registerAdd(program)
|
|
55
57
|
registerSelfHost(program)
|
|
56
58
|
registerCloud(program)
|
|
57
59
|
registerEngine(program)
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import type { Command } from "commander"
|
|
2
|
+
import * as p from "@clack/prompts"
|
|
3
|
+
import { loadConfig } from "../config.js"
|
|
4
|
+
import { selfHostTlsEnabled } from "../project-config.js"
|
|
5
|
+
import { updateServerConfigInProject } from "../app-config.js"
|
|
6
|
+
import { ensureNotCancelled, printLogo } from "../prompts.js"
|
|
7
|
+
|
|
8
|
+
export function registerAdd(program: Command): void {
|
|
9
|
+
const addCmd = program
|
|
10
|
+
.command("add")
|
|
11
|
+
.description("Add capabilities to an existing project")
|
|
12
|
+
|
|
13
|
+
addCmd
|
|
14
|
+
.command("domain [domain]")
|
|
15
|
+
.description("Add a custom domain with automatic HTTPS (self-host)")
|
|
16
|
+
.option("--email <email>", "Email for Let's Encrypt TLS certificates")
|
|
17
|
+
.action(async (domainArg: string | undefined, opts: { email?: string }) => {
|
|
18
|
+
await addDomain(domainArg, opts.email)
|
|
19
|
+
})
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
async function promptDomain(initial?: string): Promise<string> {
|
|
23
|
+
const trimmed = initial?.trim()
|
|
24
|
+
if (trimmed) return trimmed
|
|
25
|
+
return ensureNotCancelled(
|
|
26
|
+
await p.text({
|
|
27
|
+
message: "Please provide domain:",
|
|
28
|
+
placeholder: "demo.supatype.com",
|
|
29
|
+
validate: (v) => ((v ?? "").trim().length === 0 ? "Domain is required" : undefined),
|
|
30
|
+
}),
|
|
31
|
+
).trim()
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
async function promptEmail(initial?: string): Promise<string> {
|
|
35
|
+
const trimmed = initial?.trim()
|
|
36
|
+
if (trimmed) return trimmed
|
|
37
|
+
return ensureNotCancelled(
|
|
38
|
+
await p.text({
|
|
39
|
+
message: "Please provide email for TLS",
|
|
40
|
+
placeholder: "hello@supatype.com",
|
|
41
|
+
validate: (v) => ((v ?? "").trim().length === 0 ? "Email is required" : undefined),
|
|
42
|
+
}),
|
|
43
|
+
).trim()
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
async function addDomain(domainArg?: string, emailArg?: string): Promise<void> {
|
|
47
|
+
const cwd = process.cwd()
|
|
48
|
+
const interactive = !domainArg?.trim() || !emailArg?.trim()
|
|
49
|
+
|
|
50
|
+
if (interactive) {
|
|
51
|
+
printLogo()
|
|
52
|
+
p.intro("Add a custom domain")
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const domain = await promptDomain(domainArg)
|
|
56
|
+
const email = await promptEmail(emailArg)
|
|
57
|
+
|
|
58
|
+
try {
|
|
59
|
+
const configPath = updateServerConfigInProject(cwd, { domain, tlsEmail: email })
|
|
60
|
+
if (interactive) {
|
|
61
|
+
p.outro(`Updated ${configPath}`)
|
|
62
|
+
} else {
|
|
63
|
+
console.log(` updated ${configPath}`)
|
|
64
|
+
}
|
|
65
|
+
printDomainNextSteps(cwd, domain)
|
|
66
|
+
} catch (err) {
|
|
67
|
+
console.error((err as Error).message)
|
|
68
|
+
process.exit(1)
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function printDomainNextSteps(cwd: string, domain: string): void {
|
|
73
|
+
let tlsActive = true
|
|
74
|
+
try {
|
|
75
|
+
tlsActive = selfHostTlsEnabled(loadConfig(cwd))
|
|
76
|
+
} catch {
|
|
77
|
+
// config re-load is best-effort for the warning below
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
console.log(`\nDomain set to ${domain} with automatic HTTPS.`)
|
|
81
|
+
if (!tlsActive) {
|
|
82
|
+
console.log(
|
|
83
|
+
"\nNote: a supatype.local.config.ts override (server.mode=dev) is suppressing HTTPS locally.\n" +
|
|
84
|
+
"That file is gitignored, so HTTPS still activates on your production server.",
|
|
85
|
+
)
|
|
86
|
+
}
|
|
87
|
+
console.log("\nGo live:")
|
|
88
|
+
console.log(` 1. Point DNS: an A record for ${domain} -> your server's public IP`)
|
|
89
|
+
console.log(" 2. Open ports 80 and 443 on the server firewall")
|
|
90
|
+
console.log(" 3. supatype self-host compose up -d # Kong provisions HTTPS automatically")
|
|
91
|
+
console.log(`\nYour Supatype platform goes live at https://${domain}`)
|
|
92
|
+
console.log(" Your app, REST, Auth, Storage, Realtime, Functions, and Studio — all behind one HTTPS domain.")
|
|
93
|
+
console.log(" Certificates persist in the valkey-data volume.\n")
|
|
94
|
+
}
|
package/src/commands/app.ts
CHANGED
|
@@ -14,7 +14,7 @@ export function registerApp(program: Command): void {
|
|
|
14
14
|
.description("Configure app routing: --static for a built site, or proxy to a dev server")
|
|
15
15
|
.option("--static", "Serve a static directory at / (default: ./public, or [dir] argument)")
|
|
16
16
|
.option("--port <port>", "Port your app listens on (proxy mode)", "3000")
|
|
17
|
-
.option("--upstream <url>", "
|
|
17
|
+
.option("--upstream <url>", "URL of your running dev server (proxy mode; defaults to localhost:<port>)")
|
|
18
18
|
.option("--dockerfile <path>", "(deprecated) ignored — use supatype.config.ts")
|
|
19
19
|
.action(
|
|
20
20
|
(
|
|
@@ -77,7 +77,7 @@ function addProxyApp(cwd: string, port: string, upstream?: string): void {
|
|
|
77
77
|
try {
|
|
78
78
|
const configPath = updateAppConfigInProject(cwd, { mode: "proxy", upstream: upstreamUrl })
|
|
79
79
|
console.log(` updated ${configPath}`)
|
|
80
|
-
console.log(`\
|
|
80
|
+
console.log(`\nForwarding requests to your dev server at ${upstreamUrl}. The app will be available at ${localKongBaseUrl()}/\n`)
|
|
81
81
|
console.log("Run: supatype self-host compose render")
|
|
82
82
|
} catch (err) {
|
|
83
83
|
console.error((err as Error).message)
|