run402 4.9.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 +14 -2
- package/lib/admin.mjs +2 -2
- package/lib/agent.mjs +2 -2
- package/lib/ai.mjs +2 -2
- package/lib/allowance.mjs +2 -2
- package/lib/apps.mjs +2 -2
- package/lib/archives.mjs +2 -7
- package/lib/argparse.mjs +63 -2
- package/lib/asset-wire.mjs +59 -0
- package/lib/assets.mjs +8 -4
- package/lib/auth.mjs +2 -2
- package/lib/billing.mjs +2 -2
- package/lib/branches.mjs +2 -6
- package/lib/cache.mjs +2 -6
- package/lib/cdn.mjs +2 -2
- package/lib/ci.mjs +2 -1
- package/lib/cloud.mjs +3 -11
- package/lib/contracts.mjs +2 -1
- package/lib/core.mjs +3 -13
- package/lib/credentials.mjs +3 -13
- 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 +2 -2
- package/lib/grants.mjs +3 -2
- package/lib/image.mjs +2 -2
- package/lib/jobs.mjs +3 -2
- package/lib/message.mjs +2 -2
- package/lib/notifications.mjs +6 -12
- package/lib/operator.mjs +2 -7
- package/lib/org.mjs +2 -1
- package/lib/projects.mjs +2 -2
- package/lib/secrets.mjs +3 -3
- package/lib/service.mjs +3 -2
- package/lib/sites.mjs +2 -2
- package/lib/snapshots.mjs +2 -6
- 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 +2 -6
- 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/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/domains.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, parseIntegerFlag } from "./argparse.mjs";
|
|
4
|
+
import { assertKnownFlags, flagValue, normalizeArgv, positionalArgs, parseIntegerFlag, failUnknownSubcommand } from "./argparse.mjs";
|
|
5
5
|
|
|
6
6
|
const HELP = `run402 domains — Manage ProjectDomain lifecycle
|
|
7
7
|
|
|
@@ -398,6 +398,6 @@ export async function run(sub, args) {
|
|
|
398
398
|
case "add": removed("run402 domains add", "run402 domains connect <domain> --project <id> --web"); break;
|
|
399
399
|
case "delete": removed("run402 domains delete", "run402 domains disconnect <domain> --project <id> --confirm"); break;
|
|
400
400
|
default:
|
|
401
|
-
|
|
401
|
+
failUnknownSubcommand("domains", sub);
|
|
402
402
|
}
|
|
403
403
|
}
|
package/lib/email.mjs
CHANGED
|
@@ -3,7 +3,7 @@ import { basename } from "node:path";
|
|
|
3
3
|
import { resolveProjectId } from "./config.mjs";
|
|
4
4
|
import { getSdk } from "./sdk.mjs";
|
|
5
5
|
import { reportSdkError, fail, parseFlagJson } from "./sdk-errors.mjs";
|
|
6
|
-
import { assertKnownFlags, flagValue, normalizeArgv, parseIntegerFlag, positionalArgs } from "./argparse.mjs";
|
|
6
|
+
import { assertKnownFlags, flagValue, normalizeArgv, parseIntegerFlag, positionalArgs, failUnknownSubcommand } from "./argparse.mjs";
|
|
7
7
|
|
|
8
8
|
// Extension → content-type for `--attach <path>` without an explicit `:type`.
|
|
9
9
|
const ATTACH_EXT_CONTENT_TYPES = {
|
|
@@ -791,6 +791,6 @@ export async function run(sub, args) {
|
|
|
791
791
|
break;
|
|
792
792
|
}
|
|
793
793
|
default:
|
|
794
|
-
|
|
794
|
+
failUnknownSubcommand("email", sub);
|
|
795
795
|
}
|
|
796
796
|
}
|
package/lib/functions.mjs
CHANGED
|
@@ -2,7 +2,7 @@ import { readFileSync } from "fs";
|
|
|
2
2
|
import { findProject, API } from "./config.mjs";
|
|
3
3
|
import { getSdk } from "./sdk.mjs";
|
|
4
4
|
import { reportSdkError, fail } from "./sdk-errors.mjs";
|
|
5
|
-
import { assertKnownFlags, hasHelp, normalizeArgv, parseIntegerFlag, resolveProjectSelector, validateRegularFile } from "./argparse.mjs";
|
|
5
|
+
import { assertKnownFlags, hasHelp, normalizeArgv, parseIntegerFlag, resolveProjectSelector, validateRegularFile, failUnknownSubcommand } from "./argparse.mjs";
|
|
6
6
|
import { cliCommandAction } from "./next-actions.mjs";
|
|
7
7
|
|
|
8
8
|
const FUNCTION_LOG_REQUEST_ID_RE = /^(?:req|fnrun|fnatt)_[A-Za-z0-9_-]{4,128}$/;
|
|
@@ -892,7 +892,7 @@ export async function run(sub, args) {
|
|
|
892
892
|
case "list": { const { projectId, rest } = select(); await list(projectId, rest); break; }
|
|
893
893
|
case "delete": { const { projectId, rest } = select(); await deleteFunction(projectId, rest[0], rest.slice(1)); break; }
|
|
894
894
|
default:
|
|
895
|
-
|
|
895
|
+
failUnknownSubcommand("functions", sub);
|
|
896
896
|
}
|
|
897
897
|
}
|
|
898
898
|
|
package/lib/grants.mjs
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { getSdk } from "./sdk.mjs";
|
|
2
|
-
import { reportSdkError, parseFlagJson
|
|
2
|
+
import { reportSdkError, parseFlagJson } from "./sdk-errors.mjs";
|
|
3
3
|
import {
|
|
4
4
|
normalizeArgv,
|
|
5
5
|
assertKnownFlags,
|
|
6
6
|
flagValue,
|
|
7
7
|
requirePositionalCount,
|
|
8
8
|
resolveProjectSelector,
|
|
9
|
+
failUnknownSubcommand,
|
|
9
10
|
} from "./argparse.mjs";
|
|
10
11
|
|
|
11
12
|
const HELP = `run402 grants — per-project capability grants (agent/CI principals)
|
|
@@ -129,6 +130,6 @@ export async function run(sub, args) {
|
|
|
129
130
|
case "create": await create(args); break;
|
|
130
131
|
case "revoke": await revoke(args); break;
|
|
131
132
|
default:
|
|
132
|
-
|
|
133
|
+
failUnknownSubcommand("grants", sub);
|
|
133
134
|
}
|
|
134
135
|
}
|
package/lib/image.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { writeFileSync } from "fs";
|
|
2
2
|
import { getSdk } from "./sdk.mjs";
|
|
3
3
|
import { reportSdkError, fail } from "./sdk-errors.mjs";
|
|
4
|
-
import { assertAllowedValue, assertKnownFlags, flagValue, normalizeArgv, positionalArgs } from "./argparse.mjs";
|
|
4
|
+
import { assertAllowedValue, assertKnownFlags, flagValue, normalizeArgv, positionalArgs, failUnknownSubcommand } from "./argparse.mjs";
|
|
5
5
|
|
|
6
6
|
const HELP = `run402 image — Generate AI images via x402 micropayments
|
|
7
7
|
|
|
@@ -67,7 +67,7 @@ export async function run(sub, args) {
|
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
if (sub !== "generate") {
|
|
70
|
-
|
|
70
|
+
failUnknownSubcommand("image", sub);
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
const parsedArgs = normalizeArgv(args);
|
package/lib/jobs.mjs
CHANGED
|
@@ -14,6 +14,7 @@ import {
|
|
|
14
14
|
positionalArgs,
|
|
15
15
|
requirePositionalCount,
|
|
16
16
|
validateRegularFile,
|
|
17
|
+
failUnknownSubcommand,
|
|
17
18
|
} from "./argparse.mjs";
|
|
18
19
|
|
|
19
20
|
const HELP = `run402 jobs — Submit and inspect platform-managed jobs
|
|
@@ -427,7 +428,7 @@ async function artifacts(args = []) {
|
|
|
427
428
|
await artifactsGet(args.slice(1));
|
|
428
429
|
return;
|
|
429
430
|
}
|
|
430
|
-
|
|
431
|
+
failUnknownSubcommand("jobs artifacts", action);
|
|
431
432
|
}
|
|
432
433
|
|
|
433
434
|
function splitJobIdArg(args = [], valueFlags = []) {
|
|
@@ -490,6 +491,6 @@ export async function run(sub, args = []) {
|
|
|
490
491
|
await purge(args);
|
|
491
492
|
break;
|
|
492
493
|
default:
|
|
493
|
-
|
|
494
|
+
failUnknownSubcommand("jobs", sub);
|
|
494
495
|
}
|
|
495
496
|
}
|
package/lib/message.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { allowanceAuthHeaders } from "./config.mjs";
|
|
2
2
|
import { getSdk } from "./sdk.mjs";
|
|
3
3
|
import { reportSdkError, fail } from "./sdk-errors.mjs";
|
|
4
|
-
import { assertKnownFlags, normalizeArgv } from "./argparse.mjs";
|
|
4
|
+
import { assertKnownFlags, normalizeArgv, failUnknownSubcommand } from "./argparse.mjs";
|
|
5
5
|
|
|
6
6
|
const HELP = `run402 message — Send messages to Run402 developers
|
|
7
7
|
|
|
@@ -84,7 +84,7 @@ export async function run(sub, args) {
|
|
|
84
84
|
process.exit(0);
|
|
85
85
|
}
|
|
86
86
|
if (sub !== "send") {
|
|
87
|
-
|
|
87
|
+
failUnknownSubcommand("message", sub);
|
|
88
88
|
}
|
|
89
89
|
const parsedArgs = normalizeArgv(args);
|
|
90
90
|
assertKnownFlags(parsedArgs, ["--help", "-h"]);
|
package/lib/notifications.mjs
CHANGED
|
@@ -40,6 +40,7 @@ import {
|
|
|
40
40
|
normalizeArgv,
|
|
41
41
|
positionalArgs,
|
|
42
42
|
requirePositionalCount,
|
|
43
|
+
failUnknownSubcommand,
|
|
43
44
|
} from "./argparse.mjs";
|
|
44
45
|
|
|
45
46
|
const HELP = `run402 notifications — Operator health notifications + Telegram channel/rules
|
|
@@ -435,9 +436,8 @@ async function runChannels(args) {
|
|
|
435
436
|
await channelsRevoke(rest);
|
|
436
437
|
return;
|
|
437
438
|
}
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
message: `Unknown 'notifications channels' action: ${channelsAction}. Try connect | list | revoke.`,
|
|
439
|
+
failUnknownSubcommand("notifications channels", channelsAction, {
|
|
440
|
+
hint: "Run `run402 notifications channels --help` for usage.",
|
|
441
441
|
});
|
|
442
442
|
}
|
|
443
443
|
|
|
@@ -539,9 +539,8 @@ async function runRules(args) {
|
|
|
539
539
|
await rulesRm(rest);
|
|
540
540
|
return;
|
|
541
541
|
}
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
message: `Unknown 'notifications rules' action: ${rulesAction}. Try add | list | rm.`,
|
|
542
|
+
failUnknownSubcommand("notifications rules", rulesAction, {
|
|
543
|
+
hint: "Run `run402 notifications rules --help` for usage.",
|
|
545
544
|
});
|
|
546
545
|
}
|
|
547
546
|
|
|
@@ -586,12 +585,7 @@ export async function run(sub, args) {
|
|
|
586
585
|
await test(args);
|
|
587
586
|
return;
|
|
588
587
|
default:
|
|
589
|
-
|
|
590
|
-
code: "UNKNOWN_SUBCOMMAND",
|
|
591
|
-
message: `Unknown notifications subcommand: ${sub}`,
|
|
592
|
-
hint: "Run `run402 notifications --help` for usage.",
|
|
593
|
-
details: { command: "notifications", subcommand: sub },
|
|
594
|
-
});
|
|
588
|
+
failUnknownSubcommand("notifications", sub);
|
|
595
589
|
}
|
|
596
590
|
}
|
|
597
591
|
|
package/lib/operator.mjs
CHANGED
|
@@ -24,7 +24,7 @@ import { randomBytes, createHash } from "node:crypto";
|
|
|
24
24
|
import { fail, reportSdkError } from "./sdk-errors.mjs";
|
|
25
25
|
import { getSdk } from "./sdk.mjs";
|
|
26
26
|
import { claimWalletOrg, isStepUpRequired, isOperatorApprovalRequired } from "#sdk/node";
|
|
27
|
-
import { normalizeArgv, hasHelp, assertKnownFlags, flagValue } from "./argparse.mjs";
|
|
27
|
+
import { normalizeArgv, hasHelp, assertKnownFlags, flagValue, failUnknownSubcommand } from "./argparse.mjs";
|
|
28
28
|
import {
|
|
29
29
|
saveOperatorSession,
|
|
30
30
|
clearOperatorSession,
|
|
@@ -766,11 +766,6 @@ export async function run(sub, args = []) {
|
|
|
766
766
|
await status(args);
|
|
767
767
|
break;
|
|
768
768
|
default:
|
|
769
|
-
|
|
770
|
-
code: "UNKNOWN_SUBCOMMAND",
|
|
771
|
-
message: `Unknown operator subcommand: ${sub}`,
|
|
772
|
-
hint: "Run `run402 operator --help` for usage.",
|
|
773
|
-
details: { command: "operator", subcommand: sub },
|
|
774
|
-
});
|
|
769
|
+
failUnknownSubcommand("operator", sub, { extraSubcommands: ["status"] });
|
|
775
770
|
}
|
|
776
771
|
}
|
package/lib/org.mjs
CHANGED
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
flagValue,
|
|
7
7
|
parseIntegerFlag,
|
|
8
8
|
requirePositionalCount,
|
|
9
|
+
failUnknownSubcommand,
|
|
9
10
|
} from "./argparse.mjs";
|
|
10
11
|
|
|
11
12
|
const ROLE_LIST = "owner | admin | developer | billing | viewer";
|
|
@@ -472,6 +473,6 @@ export async function run(sub, args) {
|
|
|
472
473
|
case "whoami": await whoami(args); break;
|
|
473
474
|
case "audit": await audit(args); break;
|
|
474
475
|
default:
|
|
475
|
-
|
|
476
|
+
failUnknownSubcommand("org", sub);
|
|
476
477
|
}
|
|
477
478
|
}
|
package/lib/projects.mjs
CHANGED
|
@@ -5,7 +5,7 @@ import { loadLiveControlPlaneSession } from "../core-dist/control-plane-session.
|
|
|
5
5
|
import { withAutoApprove } from "./operator.mjs";
|
|
6
6
|
import { getSdk } from "./sdk.mjs";
|
|
7
7
|
import { reportSdkError, fail, parseFlagJson } from "./sdk-errors.mjs";
|
|
8
|
-
import { assertKnownFlags, failBadProjectId, flagValue, hasHelp, normalizeArgv, positionalArgs, resolveProjectSelector, validateRegularFile } from "./argparse.mjs";
|
|
8
|
+
import { assertKnownFlags, failBadProjectId, flagValue, hasHelp, normalizeArgv, positionalArgs, resolveProjectSelector, validateRegularFile, failUnknownSubcommand } from "./argparse.mjs";
|
|
9
9
|
|
|
10
10
|
const HELP = `run402 projects — Manage your deployed Run402 projects
|
|
11
11
|
|
|
@@ -939,6 +939,6 @@ export async function run(sub, args) {
|
|
|
939
939
|
case "promote-user": { const { projectId, rest } = resolveProjectSelector(args); await promoteUser(projectId, rest[0]); break; }
|
|
940
940
|
case "demote-user": { const { projectId, rest } = resolveProjectSelector(args); await demoteUser(projectId, rest[0]); break; }
|
|
941
941
|
default:
|
|
942
|
-
|
|
942
|
+
failUnknownSubcommand("projects", sub);
|
|
943
943
|
}
|
|
944
944
|
}
|
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, resolveProjectSelector, 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
|
|
@@ -256,7 +256,7 @@ export async function run(sub, args) {
|
|
|
256
256
|
process.exit(0);
|
|
257
257
|
}
|
|
258
258
|
if (!["set", "list", "delete"].includes(sub)) {
|
|
259
|
-
|
|
259
|
+
failUnknownSubcommand("secrets", sub);
|
|
260
260
|
}
|
|
261
261
|
const parsed = normalizeArgv(Array.isArray(args) ? args : []);
|
|
262
262
|
switch (sub) {
|
|
@@ -276,6 +276,6 @@ export async function run(sub, args) {
|
|
|
276
276
|
break;
|
|
277
277
|
}
|
|
278
278
|
default:
|
|
279
|
-
|
|
279
|
+
failUnknownSubcommand("secrets", sub);
|
|
280
280
|
}
|
|
281
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
|
@@ -9,6 +9,7 @@ import {
|
|
|
9
9
|
parseIntegerFlag,
|
|
10
10
|
positionalArgs,
|
|
11
11
|
resolveProjectSelector,
|
|
12
|
+
failUnknownSubcommand,
|
|
12
13
|
} from "./argparse.mjs";
|
|
13
14
|
|
|
14
15
|
const HELP = `run402 snapshots — Project database restore points
|
|
@@ -48,12 +49,7 @@ export async function run(sub, args = []) {
|
|
|
48
49
|
case "restore": return restore(rest);
|
|
49
50
|
case "delete": return deleteSnapshot(rest);
|
|
50
51
|
default:
|
|
51
|
-
|
|
52
|
-
code: "UNKNOWN_SUBCOMMAND",
|
|
53
|
-
message: `Unknown snapshots subcommand: ${sub}`,
|
|
54
|
-
hint: "Run `run402 snapshots --help` for usage.",
|
|
55
|
-
details: { command: "snapshots", subcommand: sub },
|
|
56
|
-
});
|
|
52
|
+
failUnknownSubcommand("snapshots", sub);
|
|
57
53
|
}
|
|
58
54
|
}
|
|
59
55
|
|
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";
|
|
@@ -340,11 +341,6 @@ export async function run(sub, args = []) {
|
|
|
340
341
|
case "import": return cmdImport(rest);
|
|
341
342
|
case "rm": return cmdRm(rest);
|
|
342
343
|
default:
|
|
343
|
-
|
|
344
|
-
code: "UNKNOWN_SUBCOMMAND",
|
|
345
|
-
message: `Unknown wallets subcommand: ${sub}`,
|
|
346
|
-
hint: "Run `run402 wallets --help` for usage.",
|
|
347
|
-
details: { command: "wallets", subcommand: sub },
|
|
348
|
-
});
|
|
344
|
+
failUnknownSubcommand("wallets", sub);
|
|
349
345
|
}
|
|
350
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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions-node.d.ts","sourceRoot":"","sources":["../../src/node/actions-node.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAIV,kBAAkB,EAClB,sBAAsB,EACtB,aAAa,EAGb,kCAAkC,EAClC,wBAAwB,EACxB,mBAAmB,EACnB,cAAc,
|
|
1
|
+
{"version":3,"file":"actions-node.d.ts","sourceRoot":"","sources":["../../src/node/actions-node.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAIV,kBAAkB,EAClB,sBAAsB,EACtB,aAAa,EAGb,kCAAkC,EAClC,wBAAwB,EACxB,mBAAmB,EACnB,cAAc,EAEf,MAAM,eAAe,CAAC;AAmBvB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAS1C,OAAO,KAAK,EAAkB,eAAe,EAAE,MAAM,iCAAiC,CAAC;AACvF,OAAO,KAAK,EAAY,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGrE,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AAEhE,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAmKD;;;GAGG;AACH,qBAAa,WAAY,YAAW,aAAa;;IAE7C,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,IAAI;gBADJ,GAAG,EAAE,MAAM,EACX,IAAI,GAAE,kBAAuB;IAG1C,GAAG,CACP,KAAK,EAAE,kCAAkC,EACzC,IAAI,CAAC,EAAE,sBAAsB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACzC,GAAG,CACP,KAAK,EAAE,wBAAwB,EAC/B,IAAI,CAAC,EAAE,sBAAsB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC;IACvC,GAAG,CACP,KAAK,EAAE,mBAAmB,EAC1B,IAAI,CAAC,EAAE,sBAAsB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;IAmCxC,EAAE,CACN,KAAK,GAAE,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAM,EAC7C,IAAI,CAAC,EAAE,sBAAsB,GAC5B,OAAO,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;CAs1D/C"}
|