run402 4.8.0 → 4.10.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/cli.mjs +20 -8
- package/lib/admin.mjs +18 -25
- package/lib/agent.mjs +2 -2
- package/lib/ai.mjs +2 -2
- package/lib/allowance.mjs +2 -2
- package/lib/apps.mjs +69 -51
- package/lib/archives.mjs +2 -7
- package/lib/argparse.mjs +131 -3
- package/lib/asset-wire.mjs +59 -0
- package/lib/assets.mjs +14 -12
- package/lib/auth.mjs +2 -2
- package/lib/billing.mjs +17 -13
- package/lib/branches.mjs +22 -23
- package/lib/cache.mjs +2 -6
- package/lib/cdn.mjs +2 -2
- package/lib/ci.mjs +4 -1
- package/lib/cloud.mjs +27 -28
- package/lib/command-manifest.mjs +352 -0
- package/lib/contracts.mjs +49 -11
- package/lib/core.mjs +3 -13
- package/lib/credentials.mjs +3 -13
- package/lib/deploy-v2.mjs +21 -8
- package/lib/deploy.mjs +2 -5
- package/lib/doctor.mjs +32 -4
- package/lib/domains.mjs +2 -2
- package/lib/email.mjs +2 -2
- package/lib/functions.mjs +100 -55
- package/lib/grants.mjs +42 -22
- package/lib/image.mjs +2 -2
- package/lib/jobs.mjs +18 -11
- package/lib/message.mjs +2 -2
- package/lib/notifications.mjs +6 -12
- package/lib/operator.mjs +2 -7
- package/lib/org.mjs +88 -49
- package/lib/projects.mjs +68 -39
- package/lib/secrets.mjs +99 -41
- package/lib/service.mjs +3 -2
- package/lib/sites.mjs +2 -2
- package/lib/snapshots.mjs +22 -24
- package/lib/subdomains.mjs +2 -2
- package/lib/tier.mjs +2 -2
- package/lib/transfer.mjs +2 -1
- package/lib/up.mjs +12 -6
- package/lib/wallets.mjs +6 -9
- package/lib/webhook-secret.mjs +3 -8
- package/lib/webhooks.mjs +2 -2
- package/package.json +1 -1
- package/sdk/dist/actions.d.ts +20 -1
- package/sdk/dist/actions.d.ts.map +1 -1
- package/sdk/dist/actions.js.map +1 -1
- package/sdk/dist/namespaces/projects.d.ts +2 -1
- package/sdk/dist/namespaces/projects.d.ts.map +1 -1
- package/sdk/dist/namespaces/projects.js +8 -12
- package/sdk/dist/namespaces/projects.js.map +1 -1
- package/sdk/dist/node/actions-node.d.ts.map +1 -1
- package/sdk/dist/node/actions-node.js +114 -8
- package/sdk/dist/node/actions-node.js.map +1 -1
- package/sdk/dist/node/deploy-manifest.d.ts +36 -0
- package/sdk/dist/node/deploy-manifest.d.ts.map +1 -1
- package/sdk/dist/node/deploy-manifest.js +112 -3
- package/sdk/dist/node/deploy-manifest.js.map +1 -1
- package/sdk/dist/node/index.d.ts +1 -1
- package/sdk/dist/node/index.d.ts.map +1 -1
- package/sdk/dist/node/index.js.map +1 -1
package/lib/secrets.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { readFileSync } from "fs";
|
|
2
2
|
import { getSdk } from "./sdk.mjs";
|
|
3
3
|
import { reportSdkError, fail } from "./sdk-errors.mjs";
|
|
4
|
-
import { assertKnownFlags, flagValue, normalizeArgv, positionalArgs, validateRegularFile } from "./argparse.mjs";
|
|
4
|
+
import { assertKnownFlags, flagValue, normalizeArgv, positionalArgs, resolveProjectSelector, validateRegularFile, failUnknownSubcommand } from "./argparse.mjs";
|
|
5
5
|
import { editRequestAction } from "./next-actions.mjs";
|
|
6
6
|
|
|
7
7
|
const HELP = `run402 secrets — Manage project secrets
|
|
@@ -10,18 +10,25 @@ Usage:
|
|
|
10
10
|
run402 secrets <subcommand> [args...]
|
|
11
11
|
|
|
12
12
|
Subcommands:
|
|
13
|
-
set <
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
set <key> (--value <v> | --file <path> | --stdin) [--project <id>]
|
|
14
|
+
Set a secret on a project
|
|
15
|
+
list [--project <id>] List all secrets for a project
|
|
16
|
+
delete <key> [--project <id>] Delete a secret from a project
|
|
17
|
+
|
|
18
|
+
Legacy (still supported):
|
|
19
|
+
run402 secrets set <prj_id> <key> <value>
|
|
20
|
+
run402 secrets list <prj_id>
|
|
21
|
+
run402 secrets delete <prj_id> <key>
|
|
16
22
|
|
|
17
23
|
Examples:
|
|
18
|
-
printf %s "$STRIPE_KEY" | run402 secrets set
|
|
19
|
-
run402 secrets set
|
|
20
|
-
run402 secrets set
|
|
21
|
-
run402 secrets list prj_abc123
|
|
22
|
-
run402 secrets delete prj_abc123
|
|
24
|
+
printf %s "$STRIPE_KEY" | run402 secrets set STRIPE_KEY --stdin --project prj_abc123
|
|
25
|
+
run402 secrets set STRIPE_KEY --file ./.secrets/stripe-key --project prj_abc123
|
|
26
|
+
run402 secrets set TLS_CERT --file cert.pem
|
|
27
|
+
run402 secrets list --project prj_abc123
|
|
28
|
+
run402 secrets delete STRIPE_KEY --project prj_abc123
|
|
23
29
|
|
|
24
30
|
Notes:
|
|
31
|
+
- --project defaults to the active project ('run402 projects use')
|
|
25
32
|
- Secrets are injected as process.env in serverless functions
|
|
26
33
|
- Values are write-only — list returns keys and timestamps only
|
|
27
34
|
- Deploy manifests should declare existing keys with secrets.require; never put values in deploy specs
|
|
@@ -31,68 +38,86 @@ const SUB_HELP = {
|
|
|
31
38
|
set: `run402 secrets set — Set a secret on a project
|
|
32
39
|
|
|
33
40
|
Usage:
|
|
34
|
-
run402 secrets set <
|
|
35
|
-
run402 secrets set <
|
|
36
|
-
run402 secrets set <
|
|
41
|
+
run402 secrets set <key> --value <v> [--project <id>]
|
|
42
|
+
run402 secrets set <key> --file <path> [--project <id>]
|
|
43
|
+
run402 secrets set <key> --stdin [--project <id>]
|
|
44
|
+
|
|
45
|
+
Legacy (still supported):
|
|
46
|
+
run402 secrets set <prj_id> <key> <value>
|
|
47
|
+
run402 secrets set <key> <value>
|
|
37
48
|
|
|
38
49
|
Arguments:
|
|
39
|
-
<id> Project ID (from 'run402 projects list')
|
|
40
50
|
<key> Secret key name (exposed as process.env.<key>)
|
|
41
|
-
<value> Inline secret value (omit if using --file or --stdin)
|
|
42
51
|
|
|
43
52
|
Options:
|
|
53
|
+
--project <id> Project ID (defaults to the active project)
|
|
54
|
+
--value <v> Inline secret value (alternative to the legacy positional)
|
|
44
55
|
--file <path> Read the secret value from a file instead of inline
|
|
45
56
|
Use --file - or --file /dev/stdin to read from stdin
|
|
46
57
|
--stdin Read the secret value from stdin until EOF
|
|
47
58
|
|
|
48
59
|
Notes:
|
|
60
|
+
- Provide exactly one value source: --value, --file, --stdin, or the legacy inline positional
|
|
49
61
|
- Secrets are injected as process.env in serverless functions
|
|
50
62
|
- Values are write-only; 'list' cannot verify values by hash
|
|
51
63
|
- Prefer --stdin or --file for real secrets so values do not land in shell history
|
|
52
64
|
|
|
53
65
|
Examples:
|
|
54
|
-
printf %s "$STRIPE_KEY" | run402 secrets set
|
|
55
|
-
cat ./.secrets/stripe-key | run402 secrets set
|
|
56
|
-
run402 secrets set
|
|
57
|
-
run402 secrets set
|
|
66
|
+
printf %s "$STRIPE_KEY" | run402 secrets set STRIPE_KEY --stdin --project prj_abc123
|
|
67
|
+
cat ./.secrets/stripe-key | run402 secrets set STRIPE_KEY --file - --project prj_abc123
|
|
68
|
+
run402 secrets set STRIPE_KEY --file ./.secrets/stripe-key
|
|
69
|
+
run402 secrets set TLS_CERT --file cert.pem --project prj_abc123
|
|
58
70
|
`,
|
|
59
71
|
list: `run402 secrets list — List all secrets for a project
|
|
60
72
|
|
|
61
73
|
Usage:
|
|
62
|
-
run402 secrets list <id>
|
|
74
|
+
run402 secrets list [--project <id>]
|
|
63
75
|
|
|
64
|
-
|
|
65
|
-
|
|
76
|
+
Legacy (still supported):
|
|
77
|
+
run402 secrets list <prj_id>
|
|
78
|
+
|
|
79
|
+
Options:
|
|
80
|
+
--project <id> Project ID (defaults to the active project)
|
|
66
81
|
|
|
67
82
|
Notes:
|
|
68
83
|
- Returns secret keys and timestamps only; raw values and value-derived hashes are never returned
|
|
69
84
|
|
|
70
85
|
Examples:
|
|
71
|
-
run402 secrets list prj_abc123
|
|
86
|
+
run402 secrets list --project prj_abc123
|
|
72
87
|
`,
|
|
73
88
|
delete: `run402 secrets delete — Delete a secret from a project
|
|
74
89
|
|
|
75
90
|
Usage:
|
|
76
|
-
run402 secrets delete <
|
|
91
|
+
run402 secrets delete <key> [--project <id>]
|
|
92
|
+
|
|
93
|
+
Legacy (still supported):
|
|
94
|
+
run402 secrets delete <prj_id> <key>
|
|
77
95
|
|
|
78
96
|
Arguments:
|
|
79
|
-
<id> Project ID (from 'run402 projects list')
|
|
80
97
|
<key> Secret key name to remove
|
|
81
98
|
|
|
99
|
+
Options:
|
|
100
|
+
--project <id> Project ID (defaults to the active project)
|
|
101
|
+
|
|
82
102
|
Examples:
|
|
83
|
-
run402 secrets delete prj_abc123
|
|
103
|
+
run402 secrets delete STRIPE_KEY --project prj_abc123
|
|
84
104
|
`,
|
|
85
105
|
};
|
|
86
106
|
|
|
107
|
+
const SET_VALUE_FLAGS = ["--file", "--value", "--project"];
|
|
108
|
+
|
|
87
109
|
export function readSecretValueForSet(parsedArgs, values, readers = {}) {
|
|
88
110
|
const readStdin = readers.readStdin ?? (() => readFileSync(0, "utf-8"));
|
|
89
111
|
const readFile = readers.readFile ?? ((path) => readFileSync(path, "utf-8"));
|
|
90
112
|
const validateFile = readers.validateFile ?? validateRegularFile;
|
|
91
113
|
const file = flagValue(parsedArgs, "--file");
|
|
114
|
+
const valueFlagPresent = parsedArgs.includes("--value");
|
|
115
|
+
const valueFlag = valueFlagPresent ? flagValue(parsedArgs, "--value") : null;
|
|
92
116
|
const stdinRequested = parsedArgs.includes("--stdin");
|
|
93
117
|
const stdinFile = isStdinAlias(file);
|
|
94
118
|
const sources = [];
|
|
95
119
|
if (values.length === 1) sources.push("inline");
|
|
120
|
+
if (valueFlagPresent) sources.push("--value");
|
|
96
121
|
if (file) sources.push(stdinFile ? "--file stdin" : "--file");
|
|
97
122
|
if (stdinRequested) sources.push("--stdin");
|
|
98
123
|
|
|
@@ -101,22 +126,31 @@ export function readSecretValueForSet(parsedArgs, values, readers = {}) {
|
|
|
101
126
|
code: "BAD_USAGE",
|
|
102
127
|
message: "Provide exactly one secret value source.",
|
|
103
128
|
details: { sources },
|
|
104
|
-
hint: "Use one of:
|
|
129
|
+
hint: "Use one of: --value <v>, --file <path>, --stdin, or an inline value.",
|
|
105
130
|
});
|
|
106
131
|
}
|
|
107
132
|
if (file && !stdinFile) validateFile(file, "--file");
|
|
108
133
|
|
|
109
134
|
if (stdinRequested || stdinFile) return readStdin();
|
|
135
|
+
if (valueFlagPresent) return valueFlag;
|
|
110
136
|
if (file) return readFile(file);
|
|
111
137
|
if (values.length === 1) return values[0];
|
|
112
138
|
return undefined;
|
|
113
139
|
}
|
|
114
140
|
|
|
115
|
-
async function set(projectId,
|
|
141
|
+
async function set(projectId, args = []) {
|
|
116
142
|
const parsedArgs = normalizeArgv(args);
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
const
|
|
143
|
+
assertKnownFlags(parsedArgs, [...SET_VALUE_FLAGS, "--stdin", "--help", "-h"], SET_VALUE_FLAGS);
|
|
144
|
+
const positionals = positionalArgs(parsedArgs, SET_VALUE_FLAGS);
|
|
145
|
+
const key = positionals[0];
|
|
146
|
+
if (!key) {
|
|
147
|
+
fail({
|
|
148
|
+
code: "BAD_USAGE",
|
|
149
|
+
message: "Missing <key>.",
|
|
150
|
+
hint: "run402 secrets set <key> --value <v> [--project <id>]",
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
const values = positionals.slice(1);
|
|
120
154
|
if (values.length > 1) {
|
|
121
155
|
fail({ code: "BAD_USAGE", message: `Unexpected argument for secrets set: ${values[1]}` });
|
|
122
156
|
}
|
|
@@ -172,8 +206,8 @@ function failMissingStdin() {
|
|
|
172
206
|
|
|
173
207
|
async function list(projectId, args = []) {
|
|
174
208
|
const parsedArgs = normalizeArgv(args);
|
|
175
|
-
assertKnownFlags(parsedArgs, ["--help", "-h"]);
|
|
176
|
-
const extra = positionalArgs(parsedArgs);
|
|
209
|
+
assertKnownFlags(parsedArgs, ["--project", "--help", "-h"], ["--project"]);
|
|
210
|
+
const extra = positionalArgs(parsedArgs, ["--project"]);
|
|
177
211
|
if (extra.length > 0) {
|
|
178
212
|
fail({ code: "BAD_USAGE", message: `Unexpected argument for secrets list: ${extra[0]}` });
|
|
179
213
|
}
|
|
@@ -192,12 +226,20 @@ async function list(projectId, args = []) {
|
|
|
192
226
|
}
|
|
193
227
|
}
|
|
194
228
|
|
|
195
|
-
async function deleteSecret(projectId,
|
|
229
|
+
async function deleteSecret(projectId, args = []) {
|
|
196
230
|
const parsedArgs = normalizeArgv(args);
|
|
197
|
-
assertKnownFlags(parsedArgs, ["--help", "-h"]);
|
|
198
|
-
const
|
|
199
|
-
|
|
200
|
-
|
|
231
|
+
assertKnownFlags(parsedArgs, ["--project", "--help", "-h"], ["--project"]);
|
|
232
|
+
const positionals = positionalArgs(parsedArgs, ["--project"]);
|
|
233
|
+
const key = positionals[0];
|
|
234
|
+
if (!key) {
|
|
235
|
+
fail({
|
|
236
|
+
code: "BAD_USAGE",
|
|
237
|
+
message: "Missing <key>.",
|
|
238
|
+
hint: "run402 secrets delete <key> [--project <id>]",
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
if (positionals.length > 1) {
|
|
242
|
+
fail({ code: "BAD_USAGE", message: `Unexpected argument for secrets delete: ${positionals[1]}` });
|
|
201
243
|
}
|
|
202
244
|
try {
|
|
203
245
|
await getSdk().secrets.delete(projectId, key);
|
|
@@ -213,11 +255,27 @@ export async function run(sub, args) {
|
|
|
213
255
|
console.log(SUB_HELP[sub] || HELP);
|
|
214
256
|
process.exit(0);
|
|
215
257
|
}
|
|
258
|
+
if (!["set", "list", "delete"].includes(sub)) {
|
|
259
|
+
failUnknownSubcommand("secrets", sub);
|
|
260
|
+
}
|
|
261
|
+
const parsed = normalizeArgv(Array.isArray(args) ? args : []);
|
|
216
262
|
switch (sub) {
|
|
217
|
-
case "set":
|
|
218
|
-
|
|
219
|
-
|
|
263
|
+
case "set": {
|
|
264
|
+
const { projectId, rest } = resolveProjectSelector(parsed, { valueFlags: SET_VALUE_FLAGS });
|
|
265
|
+
await set(projectId, rest);
|
|
266
|
+
break;
|
|
267
|
+
}
|
|
268
|
+
case "list": {
|
|
269
|
+
const { projectId, rest } = resolveProjectSelector(parsed, { valueFlags: ["--project"] });
|
|
270
|
+
await list(projectId, rest);
|
|
271
|
+
break;
|
|
272
|
+
}
|
|
273
|
+
case "delete": {
|
|
274
|
+
const { projectId, rest } = resolveProjectSelector(parsed, { valueFlags: ["--project"] });
|
|
275
|
+
await deleteSecret(projectId, rest);
|
|
276
|
+
break;
|
|
277
|
+
}
|
|
220
278
|
default:
|
|
221
|
-
|
|
279
|
+
failUnknownSubcommand("secrets", sub);
|
|
222
280
|
}
|
|
223
281
|
}
|
package/lib/service.mjs
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { getSdk } from "./sdk.mjs";
|
|
2
|
-
import {
|
|
2
|
+
import { failUnknownSubcommand } from "./argparse.mjs";
|
|
3
|
+
import { reportSdkError } from "./sdk-errors.mjs";
|
|
3
4
|
|
|
4
5
|
const HELP = `run402 service — Run402 service health and availability
|
|
5
6
|
|
|
@@ -70,6 +71,6 @@ export async function run(sub, args) {
|
|
|
70
71
|
case "status": await status(); break;
|
|
71
72
|
case "health": await health(); break;
|
|
72
73
|
default:
|
|
73
|
-
|
|
74
|
+
failUnknownSubcommand("service", sub);
|
|
74
75
|
}
|
|
75
76
|
}
|
package/lib/sites.mjs
CHANGED
|
@@ -6,7 +6,7 @@ import { allowanceAuthHeaders, resolveProjectId, updateProject } from "./config.
|
|
|
6
6
|
import { resolveFilePathsInManifest } from "./manifest.mjs";
|
|
7
7
|
import { getSdk } from "./sdk.mjs";
|
|
8
8
|
import { reportSdkError, fail } from "./sdk-errors.mjs";
|
|
9
|
-
import { assertKnownFlags, flagValue, normalizeArgv, positionalArgs } from "./argparse.mjs";
|
|
9
|
+
import { assertKnownFlags, flagValue, normalizeArgv, positionalArgs, failUnknownSubcommand } from "./argparse.mjs";
|
|
10
10
|
|
|
11
11
|
const SMALL_DIR_THRESHOLD = 5;
|
|
12
12
|
|
|
@@ -364,6 +364,6 @@ export async function run(sub, args) {
|
|
|
364
364
|
case "deploy": await deploy(args); break;
|
|
365
365
|
case "deploy-dir": await deployDir(args); break;
|
|
366
366
|
default:
|
|
367
|
-
|
|
367
|
+
failUnknownSubcommand("sites", sub);
|
|
368
368
|
}
|
|
369
369
|
}
|
package/lib/snapshots.mjs
CHANGED
|
@@ -8,24 +8,29 @@ import {
|
|
|
8
8
|
normalizeArgv,
|
|
9
9
|
parseIntegerFlag,
|
|
10
10
|
positionalArgs,
|
|
11
|
+
resolveProjectSelector,
|
|
12
|
+
failUnknownSubcommand,
|
|
11
13
|
} from "./argparse.mjs";
|
|
12
|
-
import { resolveProjectId } from "./config.mjs";
|
|
13
14
|
|
|
14
15
|
const HELP = `run402 snapshots — Project database restore points
|
|
15
16
|
|
|
16
17
|
Usage:
|
|
17
|
-
run402 snapshots create [project
|
|
18
|
-
run402 snapshots list [project
|
|
19
|
-
run402 snapshots get
|
|
20
|
-
run402 snapshots restore
|
|
21
|
-
run402 snapshots delete
|
|
18
|
+
run402 snapshots create [--project <id>] [--json]
|
|
19
|
+
run402 snapshots list [--project <id>] [--kind <kind>] [--limit <n>] [--after <cursor>] [--json]
|
|
20
|
+
run402 snapshots get <snapshot-id> [--project <id>] [--json]
|
|
21
|
+
run402 snapshots restore <snapshot-id> [--project <id>] [--include-auth] [--confirm <token>] [--json]
|
|
22
|
+
run402 snapshots delete <snapshot-id> [--project <id>] [--json]
|
|
23
|
+
|
|
24
|
+
Legacy (still supported): a leading prj_... positional selects the project,
|
|
25
|
+
e.g. run402 snapshots restore prj_abc123 <snapshot-id>. --project defaults to
|
|
26
|
+
the active project.
|
|
22
27
|
|
|
23
28
|
Restore is a two-step handshake. First call without --confirm to get a
|
|
24
29
|
restore_plan.confirm.token, then re-run with --confirm after reviewing the
|
|
25
30
|
data-loss statement.
|
|
26
31
|
`;
|
|
27
32
|
|
|
28
|
-
const FLAG_VALUES = ["--kind", "--limit", "--after", "--confirm"];
|
|
33
|
+
const FLAG_VALUES = ["--project", "--kind", "--limit", "--after", "--confirm"];
|
|
29
34
|
const FLAGS = new Set([...FLAG_VALUES, "--include-auth", "--json", "--help", "-h"]);
|
|
30
35
|
const SNAPSHOT_KINDS = ["manual", "pre_migration", "pre_restore", "scheduled"];
|
|
31
36
|
|
|
@@ -44,17 +49,12 @@ export async function run(sub, args = []) {
|
|
|
44
49
|
case "restore": return restore(rest);
|
|
45
50
|
case "delete": return deleteSnapshot(rest);
|
|
46
51
|
default:
|
|
47
|
-
|
|
48
|
-
code: "UNKNOWN_SUBCOMMAND",
|
|
49
|
-
message: `Unknown snapshots subcommand: ${sub}`,
|
|
50
|
-
hint: "Run `run402 snapshots --help` for usage.",
|
|
51
|
-
details: { command: "snapshots", subcommand: sub },
|
|
52
|
-
});
|
|
52
|
+
failUnknownSubcommand("snapshots", sub);
|
|
53
53
|
}
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
async function create(args) {
|
|
57
|
-
const projectId =
|
|
57
|
+
const { projectId } = resolveProjectSelector(args, { valueFlags: FLAG_VALUES });
|
|
58
58
|
try {
|
|
59
59
|
const snapshot = await getSdk().snapshots.create(projectId);
|
|
60
60
|
console.log(JSON.stringify({ ok: snapshot.status === "ready", snapshot }, null, 2));
|
|
@@ -64,7 +64,7 @@ async function create(args) {
|
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
async function list(args) {
|
|
67
|
-
const projectId =
|
|
67
|
+
const { projectId } = resolveProjectSelector(args, { valueFlags: FLAG_VALUES });
|
|
68
68
|
const kind = flagValue(args, "--kind") ?? undefined;
|
|
69
69
|
if (kind !== undefined) assertAllowedValue(kind, SNAPSHOT_KINDS, "--kind");
|
|
70
70
|
const limitFlag = flagValue(args, "--limit");
|
|
@@ -124,14 +124,12 @@ async function deleteSnapshot(args) {
|
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
-
function resolveOptionalProject(value) {
|
|
128
|
-
if (value && String(value).startsWith("prj_")) return value;
|
|
129
|
-
return resolveProjectId(null);
|
|
130
|
-
}
|
|
131
|
-
|
|
132
127
|
function resolveProjectAndSnapshot(args, usage) {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
128
|
+
// Canonical: `<snapshot-id> [--project <id>]`; legacy `<prj_id> <snapshot-id>`
|
|
129
|
+
// still works (requireRestPositional keeps a lone snapshot id that happens to
|
|
130
|
+
// start with prj_ from being eaten as the project selector).
|
|
131
|
+
const { projectId, rest } = resolveProjectSelector(args, { valueFlags: FLAG_VALUES, requireRestPositional: true });
|
|
132
|
+
const pos = positionalArgs(rest, FLAG_VALUES);
|
|
133
|
+
if (pos.length !== 1) fail({ code: "BAD_USAGE", message: `Usage: ${usage}` });
|
|
134
|
+
return { projectId, snapshotId: pos[0] };
|
|
137
135
|
}
|
package/lib/subdomains.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { resolveProject, resolveProjectId } from "./config.mjs";
|
|
2
2
|
import { getSdk } from "./sdk.mjs";
|
|
3
3
|
import { reportSdkError, fail } from "./sdk-errors.mjs";
|
|
4
|
-
import { assertKnownFlags, flagValue, normalizeArgv, positionalArgs } from "./argparse.mjs";
|
|
4
|
+
import { assertKnownFlags, flagValue, normalizeArgv, positionalArgs, failUnknownSubcommand } from "./argparse.mjs";
|
|
5
5
|
import { cliCommandAction } from "./next-actions.mjs";
|
|
6
6
|
|
|
7
7
|
const HELP = `run402 subdomains — Manage custom subdomains
|
|
@@ -197,6 +197,6 @@ export async function run(sub, args) {
|
|
|
197
197
|
case "delete": await deleteSubdomain(args); break;
|
|
198
198
|
case "list": await list(args); break;
|
|
199
199
|
default:
|
|
200
|
-
|
|
200
|
+
failUnknownSubcommand("subdomains", sub);
|
|
201
201
|
}
|
|
202
202
|
}
|
package/lib/tier.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getSdk } from "./sdk.mjs";
|
|
2
2
|
import { reportSdkError, fail } from "./sdk-errors.mjs";
|
|
3
|
-
import { assertKnownFlags, normalizeArgv, positionalArgs, flagValue } from "./argparse.mjs";
|
|
3
|
+
import { assertKnownFlags, normalizeArgv, positionalArgs, flagValue, failUnknownSubcommand } from "./argparse.mjs";
|
|
4
4
|
import { setTierAction } from "./next-actions.mjs";
|
|
5
5
|
|
|
6
6
|
const HELP = `run402 tier — Manage your Run402 tier subscription
|
|
@@ -160,6 +160,6 @@ export async function run(sub, args) {
|
|
|
160
160
|
case "status": await status(args); break;
|
|
161
161
|
case "set": await set(args); break;
|
|
162
162
|
default:
|
|
163
|
-
|
|
163
|
+
failUnknownSubcommand("tier", sub);
|
|
164
164
|
}
|
|
165
165
|
}
|
package/lib/transfer.mjs
CHANGED
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
normalizeArgv,
|
|
9
9
|
parseIntegerFlag,
|
|
10
10
|
positionalArgs,
|
|
11
|
+
failUnknownSubcommand,
|
|
11
12
|
} from "./argparse.mjs";
|
|
12
13
|
|
|
13
14
|
const HELP = `run402 transfer — Project transfer, one noun for wallet, email, and owned-org recipients
|
|
@@ -391,6 +392,6 @@ export async function run(sub, args) {
|
|
|
391
392
|
await cancel(args);
|
|
392
393
|
return;
|
|
393
394
|
default:
|
|
394
|
-
|
|
395
|
+
failUnknownSubcommand("transfer", sub);
|
|
395
396
|
}
|
|
396
397
|
}
|
package/lib/up.mjs
CHANGED
|
@@ -72,7 +72,10 @@ Examples:
|
|
|
72
72
|
run402 up --manifest run402.deploy.ts --require-plan pln_...
|
|
73
73
|
`;
|
|
74
74
|
|
|
75
|
-
const VERIFY_HELP = `run402 up verify — Rerun
|
|
75
|
+
const VERIFY_HELP = `run402 up verify — Rerun manifest HTTP verification (verify.http[])
|
|
76
|
+
|
|
77
|
+
Works for both app manifests (run402.json) and deploy manifests
|
|
78
|
+
(run402.deploy.json / app.json) that declare a top-level verify block.
|
|
76
79
|
|
|
77
80
|
Usage:
|
|
78
81
|
run402 up verify [repo-or-path] [--project <id>] [--manifest <path>] [--dir <path>] [--name <name>] [--human|--json-stream]
|
|
@@ -81,8 +84,9 @@ Options:
|
|
|
81
84
|
repo-or-path Local app directory or public Git repository URL. Defaults
|
|
82
85
|
to the current directory.
|
|
83
86
|
--project <id> Existing project id. Defaults to .run402/project.json,
|
|
84
|
-
|
|
85
|
-
--manifest <path>
|
|
87
|
+
manifest project id, then active project.
|
|
88
|
+
--manifest <path> Manifest path. Defaults to run402.json, then
|
|
89
|
+
run402.deploy.json, then app.json.
|
|
86
90
|
--dir <path> Workspace directory to inspect (default: current dir).
|
|
87
91
|
--name <name> Instance name used only to materialize templated public origins.
|
|
88
92
|
--propagation-budget-s <n>
|
|
@@ -393,9 +397,11 @@ async function runVerify(args = []) {
|
|
|
393
397
|
}
|
|
394
398
|
|
|
395
399
|
export function shouldExitNonZeroForUpResult(result) {
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
400
|
+
if (result?.action !== "up" || result?.mode !== "apply") return false;
|
|
401
|
+
if (result?.result?.app_result?.status === "deployed_unverified") return true;
|
|
402
|
+
// Deploy-manifest verify.http[]: a hard verify failure (not propagation)
|
|
403
|
+
// mirrors the app path's deployed_unverified exit semantics.
|
|
404
|
+
return result?.result?.verify?.status === "failed";
|
|
399
405
|
}
|
|
400
406
|
|
|
401
407
|
function parseExecutionMode(args) {
|
package/lib/wallets.mjs
CHANGED
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
16
|
import { writeFileSync, readFileSync, existsSync, rmSync } from "node:fs";
|
|
17
|
+
import { failUnknownSubcommand } from "./argparse.mjs";
|
|
17
18
|
import { join } from "node:path";
|
|
18
19
|
import { fail } from "./sdk-errors.mjs";
|
|
19
20
|
import { isValidProfileName, getActiveProfile } from "../core-dist/config.js";
|
|
@@ -42,7 +43,7 @@ Usage:
|
|
|
42
43
|
run402 wallets current Show the resolved active wallet + how it was selected
|
|
43
44
|
run402 wallets new <name> Create a new named wallet (key stays local)
|
|
44
45
|
run402 wallets use <name> Set the global default wallet
|
|
45
|
-
run402 wallets rename <old> <new> Rename a wallet (
|
|
46
|
+
run402 wallets rename <old> --to <new> Rename a wallet (legacy: rename <old> <new>)
|
|
46
47
|
run402 wallets bind [<name>] Write ./.run402.json binding this directory to a wallet
|
|
47
48
|
run402 wallets unbind Remove ./.run402.json
|
|
48
49
|
run402 wallets import <name> --key <path|-> Adopt an existing private key as a named wallet
|
|
@@ -174,9 +175,10 @@ function cmdUse(args) {
|
|
|
174
175
|
}
|
|
175
176
|
|
|
176
177
|
async function cmdRename(args) {
|
|
177
|
-
const
|
|
178
|
+
const toFlag = flagVal(args, "--to");
|
|
179
|
+
const positionals = args.filter((a, i) => a && !a.startsWith("-") && args[i - 1] !== "--to");
|
|
178
180
|
const oldName = requireName(positionals[0], "old wallet name");
|
|
179
|
-
const newName = requireName(positionals[1], "new wallet name");
|
|
181
|
+
const newName = requireName(toFlag ?? positionals[1], "new wallet name");
|
|
180
182
|
if (newName === DEFAULT) {
|
|
181
183
|
fail({ code: "BAD_WALLET_NAME", message: "Cannot rename a wallet to the reserved name 'default'.", details: { name: newName } });
|
|
182
184
|
}
|
|
@@ -339,11 +341,6 @@ export async function run(sub, args = []) {
|
|
|
339
341
|
case "import": return cmdImport(rest);
|
|
340
342
|
case "rm": return cmdRm(rest);
|
|
341
343
|
default:
|
|
342
|
-
|
|
343
|
-
code: "UNKNOWN_SUBCOMMAND",
|
|
344
|
-
message: `Unknown wallets subcommand: ${sub}`,
|
|
345
|
-
hint: "Run `run402 wallets --help` for usage.",
|
|
346
|
-
details: { command: "wallets", subcommand: sub },
|
|
347
|
-
});
|
|
344
|
+
failUnknownSubcommand("wallets", sub);
|
|
348
345
|
}
|
|
349
346
|
}
|
package/lib/webhook-secret.mjs
CHANGED
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
|
|
9
9
|
import { allowanceAuthHeaders } from "./config.mjs";
|
|
10
10
|
import { getSdk } from "./sdk.mjs";
|
|
11
|
-
import { reportSdkError
|
|
12
|
-
import { assertKnownFlags, normalizeArgv } from "./argparse.mjs";
|
|
11
|
+
import { reportSdkError } from "./sdk-errors.mjs";
|
|
12
|
+
import { assertKnownFlags, normalizeArgv, failUnknownSubcommand } from "./argparse.mjs";
|
|
13
13
|
|
|
14
14
|
const HELP = `run402 webhook-secret — Manage the operator webhook signing secret
|
|
15
15
|
|
|
@@ -34,12 +34,7 @@ export async function run(sub, args = []) {
|
|
|
34
34
|
process.exit(0);
|
|
35
35
|
}
|
|
36
36
|
if (sub !== "rotate") {
|
|
37
|
-
|
|
38
|
-
code: "UNKNOWN_SUBCOMMAND",
|
|
39
|
-
message: `Unknown webhook-secret subcommand: ${sub}`,
|
|
40
|
-
hint: "Run `run402 webhook-secret --help` for usage.",
|
|
41
|
-
details: { command: "webhook-secret", subcommand: sub },
|
|
42
|
-
});
|
|
37
|
+
failUnknownSubcommand("webhook-secret", sub);
|
|
43
38
|
}
|
|
44
39
|
const parsedArgs = normalizeArgv(args);
|
|
45
40
|
assertKnownFlags(parsedArgs, ["--help", "-h"]);
|
package/lib/webhooks.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { resolveProjectId } from "./config.mjs";
|
|
2
2
|
import { getSdk } from "./sdk.mjs";
|
|
3
3
|
import { reportSdkError, fail } from "./sdk-errors.mjs";
|
|
4
|
-
import { assertKnownFlags, flagValue, normalizeArgv, positionalArgs, validateWebhookUrl } from "./argparse.mjs";
|
|
4
|
+
import { assertKnownFlags, flagValue, normalizeArgv, positionalArgs, validateWebhookUrl, failUnknownSubcommand } from "./argparse.mjs";
|
|
5
5
|
|
|
6
6
|
const HELP = `run402 email webhooks — Manage mailbox webhooks
|
|
7
7
|
|
|
@@ -262,6 +262,6 @@ export async function run(sub, args) {
|
|
|
262
262
|
case "deliveries": await deliveries(args); break;
|
|
263
263
|
case "redrive": await redrive(args); break;
|
|
264
264
|
default:
|
|
265
|
-
|
|
265
|
+
failUnknownSubcommand("email webhooks", sub, { label: "webhooks" });
|
|
266
266
|
}
|
|
267
267
|
}
|
package/package.json
CHANGED
package/sdk/dist/actions.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { DeployResult, PlanResponse, ReleaseSpec } from "./namespaces/deploy.types.js";
|
|
2
|
-
import type { Run402AppInstallGraph, Run402AppUpResultEnvelope } from "./app-up.js";
|
|
2
|
+
import type { Run402AppInstallGraph, Run402AppInstallNodeStatus, Run402AppUpResultEnvelope, Run402AppUpVerifyResult } from "./app-up.js";
|
|
3
3
|
import type { ProvisionResult } from "./namespaces/projects.types.js";
|
|
4
4
|
import type { TierName, TierSetResult } from "./namespaces/tier.js";
|
|
5
5
|
import type { Run402ExecutionMode } from "./config.js";
|
|
@@ -133,6 +133,18 @@ export interface Run402ActionResult<T = unknown> {
|
|
|
133
133
|
steps: Run402ActionStep[];
|
|
134
134
|
result?: T;
|
|
135
135
|
}
|
|
136
|
+
/** One post-apply HTTP verification result entry (deploy-manifest `verify.http[]`).
|
|
137
|
+
* Same shape as `Run402AppUpResultEnvelope["verification"]["http"][number]`. */
|
|
138
|
+
export interface Run402UpVerificationHttpEntry {
|
|
139
|
+
id: string;
|
|
140
|
+
status: Run402AppInstallNodeStatus;
|
|
141
|
+
path?: string;
|
|
142
|
+
url?: string;
|
|
143
|
+
expected_status: number;
|
|
144
|
+
actual_status?: number | null;
|
|
145
|
+
propagation_wait_ms?: number;
|
|
146
|
+
diagnostic?: Record<string, unknown>;
|
|
147
|
+
}
|
|
136
148
|
export interface Run402UpResult {
|
|
137
149
|
project_id: string;
|
|
138
150
|
manifest_path: string;
|
|
@@ -142,6 +154,13 @@ export interface Run402UpResult {
|
|
|
142
154
|
spec?: ReleaseSpec;
|
|
143
155
|
plan?: PlanResponse;
|
|
144
156
|
deploy?: DeployResult;
|
|
157
|
+
/** Deploy-manifest `verify.http[]` per-check results (app manifests report
|
|
158
|
+
* the same shape under `app_result.verification.http[]`). */
|
|
159
|
+
verification?: {
|
|
160
|
+
http: Run402UpVerificationHttpEntry[];
|
|
161
|
+
};
|
|
162
|
+
/** Deploy-manifest verify rollup (app manifests: `app_result.verify`). */
|
|
163
|
+
verify?: Run402AppUpVerifyResult;
|
|
145
164
|
}
|
|
146
165
|
export type Run402ProjectsProvisionActionResult = Run402ActionResult<ProvisionResult>;
|
|
147
166
|
export type Run402TierSetActionResult = Run402ActionResult<TierSetResult>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC5F,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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"}
|
package/sdk/dist/actions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"AAWA;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,iBAAiB,EAAE,oBAAoB;IACvC,OAAO,EAAE,UAAU;IACnB,EAAE,EAAE,IAAI;CACA,CAAC"}
|
|
@@ -103,7 +103,8 @@ export declare class Projects {
|
|
|
103
103
|
* constraints, and RLS policies.
|
|
104
104
|
*/
|
|
105
105
|
getSchema(id: string): Promise<SchemaReport>;
|
|
106
|
-
/** Run SQL against the project's database using the service key.
|
|
106
|
+
/** Run SQL against the project's database using the service key. Returns
|
|
107
|
+
* the gateway envelope verbatim: `{ status, schema, rows, row_count, fields }`. */
|
|
107
108
|
sql(id: string, sql: string, params?: unknown[]): Promise<unknown>;
|
|
108
109
|
/** Query or mutate a project table through PostgREST. */
|
|
109
110
|
rest<T = unknown>(id: string, table: string, queryOrOptions?: string | ProjectRestOptions): Promise<T>;
|