run402 1.69.8 → 1.70.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/lib/deploy-v2.mjs CHANGED
@@ -37,8 +37,8 @@ import { normalizeArgv } from "./argparse.mjs";
37
37
  const APPLY_HELP = `run402 deploy apply — Unified deploy primitive (v1.34+)
38
38
 
39
39
  Usage:
40
- run402 deploy apply --manifest <path> [--project <id>] [--quiet] [--allow-warnings]
41
- run402 deploy apply --spec '<json>' [--project <id>] [--quiet] [--allow-warnings]
40
+ run402 deploy apply --manifest <path> [--project <id>] [--quiet|--final-only] [--allow-warning <code>] [--allow-warnings]
41
+ run402 deploy apply --spec '<json>' [--project <id>] [--quiet|--final-only] [--allow-warning <code>] [--allow-warnings]
42
42
  cat spec.json | run402 deploy apply [--project <id>]
43
43
 
44
44
  Manifest format mirrors the MCP \`deploy\` tool's ReleaseSpec:
@@ -80,14 +80,17 @@ Options:
80
80
  --spec '<json>' Inline JSON spec (single-quote in shell)
81
81
  --project <id> Override project_id from the manifest
82
82
  --quiet Suppress per-event JSON-line stderr (final result still on stdout)
83
+ --final-only Alias for --quiet; final success/error envelope is still preserved
84
+ --allow-warning <code> Continue past this reviewed warning code (repeatable)
83
85
  --allow-warnings Continue past plan warnings that require confirmation
84
86
 
85
87
  Output:
86
88
  stdout: { "status": "ok", "release_id": "rel_...", "operation_id": "op_...", "urls": {...}, "warnings": [...] }
87
- stderr: one JSON event per line (suppressed with --quiet)
89
+ stderr: one JSON event per line (suppressed with --quiet or --final-only)
88
90
 
89
91
  Secrets:
90
92
  Secret values do not belong in deploy manifests. Set them first:
93
+ printf %s "$OPENAI_API_KEY" | run402 secrets set prj_... OPENAI_API_KEY --stdin
91
94
  run402 secrets set prj_... OPENAI_API_KEY --file ./.secrets/openai-key
92
95
  Then deploy a value-free declaration:
93
96
  { "project_id": "prj_...", "secrets": { "require": ["OPENAI_API_KEY"] } }
@@ -284,8 +287,8 @@ function makeStderrEventWriter(quiet) {
284
287
  }
285
288
 
286
289
  function parseApplyArgs(args) {
287
- const opts = { manifest: null, spec: null, project: null, quiet: false, allowWarnings: false };
288
- const allowedFlags = ["--manifest", "--spec", "--project", "--quiet", "--allow-warnings", "--help", "-h"];
290
+ const opts = { manifest: null, spec: null, project: null, quiet: false, allowWarnings: false, allowWarningCodes: [] };
291
+ const allowedFlags = ["--manifest", "--spec", "--project", "--quiet", "--final-only", "--allow-warning", "--allow-warnings", "--help", "-h"];
289
292
 
290
293
  for (let i = 0; i < args.length; i++) {
291
294
  const arg = args[i];
@@ -293,7 +296,7 @@ function parseApplyArgs(args) {
293
296
  console.log(APPLY_HELP);
294
297
  process.exit(0);
295
298
  }
296
- if (arg === "--manifest" || arg === "--spec" || arg === "--project") {
299
+ if (arg === "--manifest" || arg === "--spec" || arg === "--project" || arg === "--allow-warning") {
297
300
  const value = args[i + 1];
298
301
  if (value === undefined || (typeof value === "string" && value.startsWith("--"))) {
299
302
  fail({
@@ -320,13 +323,15 @@ function parseApplyArgs(args) {
320
323
  });
321
324
  }
322
325
  opts.spec = value;
323
- } else {
326
+ } else if (arg === "--project") {
324
327
  opts.project = value;
328
+ } else {
329
+ opts.allowWarningCodes.push(value);
325
330
  }
326
331
  i += 1;
327
332
  continue;
328
333
  }
329
- if (arg === "--quiet") { opts.quiet = true; continue; }
334
+ if (arg === "--quiet" || arg === "--final-only") { opts.quiet = true; continue; }
330
335
  if (arg === "--allow-warnings") { opts.allowWarnings = true; continue; }
331
336
  if (typeof arg === "string" && arg.startsWith("-")) {
332
337
  fail({
@@ -491,6 +496,7 @@ async function applyCmd(args) {
491
496
  onEvent: makeStderrEventWriter(opts.quiet),
492
497
  idempotencyKey,
493
498
  allowWarnings: opts.allowWarnings,
499
+ allowWarningCodes: opts.allowWarningCodes,
494
500
  });
495
501
  console.log(JSON.stringify({ status: "ok", ...result }, null, 2));
496
502
  } catch (err) {
@@ -596,12 +602,28 @@ function enhanceDeployWarningError(err) {
596
602
  const affected = warnings
597
603
  ? warnings.flatMap((w) => Array.isArray(w?.affected) ? w.affected : [])
598
604
  : [];
605
+ const unacknowledgedCodes = Array.isArray(existingBody.unacknowledged_warning_codes)
606
+ ? existingBody.unacknowledged_warning_codes
607
+ : warnings
608
+ ? Array.from(new Set(warnings
609
+ .filter((w) => w?.requires_confirmation || w?.code === "MISSING_REQUIRED_SECRET")
610
+ .map((w) => w?.code)
611
+ .filter(Boolean)))
612
+ : code
613
+ ? [code]
614
+ : [];
615
+ const allowWarningAction = unacknowledgedCodes.length === 1
616
+ ? `Retry with \`--allow-warning ${unacknowledgedCodes[0]}\` only after reviewing that warning.`
617
+ : unacknowledgedCodes.length > 1
618
+ ? `Retry with one \`--allow-warning <code>\` per reviewed warning code: ${unacknowledgedCodes.join(", ")}.`
619
+ : "Retry with `--allow-warning <code>` only after reviewing the warning.";
599
620
  const defaultNextActions = [
600
621
  ...(affected.length > 0
601
622
  ? [`Set or inspect affected secrets: ${Array.from(new Set(affected)).join(", ")}`]
602
623
  : []),
603
624
  "Retry `run402 deploy apply` after resolving warnings.",
604
- "Use `--allow-warnings` only when the warning was explicitly reviewed.",
625
+ allowWarningAction,
626
+ "Use `--allow-warnings` only when every warning was explicitly reviewed.",
605
627
  ];
606
628
  enhanced.body = {
607
629
  ...existingBody,
@@ -610,8 +632,8 @@ function enhanceDeployWarningError(err) {
610
632
  hint: existingBody.hint ||
611
633
  routeGuidance?.hint ||
612
634
  (code === "MISSING_REQUIRED_SECRET"
613
- ? "Set the missing secret values with `run402 secrets set`, then retry deploy apply. Use --allow-warnings only after explicit review."
614
- : "Review the plan warnings, then retry with --allow-warnings if you intentionally accept them."),
635
+ ? "Set the missing secret values with `run402 secrets set <project> <KEY> --stdin` or `--file <path>`, then retry deploy apply."
636
+ : "Review the plan warnings, then retry with --allow-warning <code> for reviewed warnings if you intentionally accept them."),
615
637
  next_actions: Array.isArray(existingBody.next_actions) && existingBody.next_actions.length > 0
616
638
  ? existingBody.next_actions
617
639
  : (routeGuidance?.next_actions ?? defaultNextActions),
@@ -665,7 +687,8 @@ const ROUTE_WARNING_GUIDANCE = {
665
687
  next_actions: [
666
688
  "Add the mutation methods the routed function supports, such as POST.",
667
689
  "Omit methods to allow every supported method when the route is an API surface.",
668
- "Use --allow-warnings only if the wildcard prefix is intentionally read-only.",
690
+ "Set acknowledge_readonly: true on an intentionally read-only GET/HEAD wildcard function route.",
691
+ "Use --allow-warning WILDCARD_ROUTE_EXCLUDES_MUTATION_METHODS only as a reviewed CLI escape hatch.",
669
692
  ],
670
693
  },
671
694
  ROUTE_TABLE_NEAR_LIMIT: {
package/lib/secrets.mjs CHANGED
@@ -14,8 +14,8 @@ Subcommands:
14
14
  delete <id> <key> Delete a secret from a project
15
15
 
16
16
  Examples:
17
- run402 secrets set prj_abc123 STRIPE_KEY --file ./.secrets/stripe-key
18
17
  printf %s "$STRIPE_KEY" | run402 secrets set prj_abc123 STRIPE_KEY --stdin
18
+ run402 secrets set prj_abc123 STRIPE_KEY --file ./.secrets/stripe-key
19
19
  run402 secrets set prj_abc123 TLS_CERT --file cert.pem
20
20
  run402 secrets list prj_abc123
21
21
  run402 secrets delete prj_abc123 STRIPE_KEY
@@ -30,27 +30,29 @@ const SUB_HELP = {
30
30
  set: `run402 secrets set — Set a secret on a project
31
31
 
32
32
  Usage:
33
- run402 secrets set <id> <key> <value> [--file <path>]
33
+ run402 secrets set <id> <key> <value>
34
34
  run402 secrets set <id> <key> --file <path>
35
35
  run402 secrets set <id> <key> --stdin
36
36
 
37
37
  Arguments:
38
38
  <id> Project ID (from 'run402 projects list')
39
39
  <key> Secret key name (exposed as process.env.<key>)
40
- <value> Inline secret value (omit if using --file)
40
+ <value> Inline secret value (omit if using --file or --stdin)
41
41
 
42
42
  Options:
43
- --file <path> Read the secret value from a file instead of inline. Use - or /dev/stdin to read stdin.
43
+ --file <path> Read the secret value from a file instead of inline
44
+ Use --file - or --file /dev/stdin to read from stdin
44
45
  --stdin Read the secret value from stdin until EOF
45
46
 
46
47
  Notes:
47
48
  - Secrets are injected as process.env in serverless functions
48
49
  - Values are write-only; 'list' cannot verify values by hash
49
- - Prefer --file or --stdin for real secrets so values do not land in shell history
50
+ - Prefer --stdin or --file for real secrets so values do not land in shell history
50
51
 
51
52
  Examples:
52
- run402 secrets set prj_abc123 STRIPE_KEY --file ./.secrets/stripe-key
53
53
  printf %s "$STRIPE_KEY" | run402 secrets set prj_abc123 STRIPE_KEY --stdin
54
+ cat ./.secrets/stripe-key | run402 secrets set prj_abc123 STRIPE_KEY --file -
55
+ run402 secrets set prj_abc123 STRIPE_KEY --file ./.secrets/stripe-key
54
56
  run402 secrets set prj_abc123 TLS_CERT --file cert.pem
55
57
  `,
56
58
  list: `run402 secrets list — List all secrets for a project
@@ -87,15 +89,19 @@ export function readSecretValueForSet(parsedArgs, values, readers = {}) {
87
89
  const validateFile = readers.validateFile ?? validateRegularFile;
88
90
  const file = flagValue(parsedArgs, "--file");
89
91
  const stdinRequested = parsedArgs.includes("--stdin");
90
- const stdinFile = file === "-" || file === "/dev/stdin";
91
- const valueSources = [
92
- values.length === 1 ? "inline value" : null,
93
- file ? "--file" : null,
94
- stdinRequested ? "--stdin" : null,
95
- ].filter(Boolean);
96
-
97
- if (valueSources.length > 1) {
98
- fail({ code: "BAD_USAGE", message: `Provide exactly one secret value source, got: ${valueSources.join(", ")}.` });
92
+ const stdinFile = isStdinAlias(file);
93
+ const sources = [];
94
+ if (values.length === 1) sources.push("inline");
95
+ if (file) sources.push(stdinFile ? "--file stdin" : "--file");
96
+ if (stdinRequested) sources.push("--stdin");
97
+
98
+ if (sources.length > 1) {
99
+ fail({
100
+ code: "BAD_USAGE",
101
+ message: "Provide exactly one secret value source.",
102
+ details: { sources },
103
+ hint: "Use one of: inline value, --file <path>, or --stdin.",
104
+ });
99
105
  }
100
106
  if (file && !stdinFile) validateFile(file, "--file");
101
107
 
@@ -113,12 +119,12 @@ async function set(projectId, key, args = []) {
113
119
  if (values.length > 1) {
114
120
  fail({ code: "BAD_USAGE", message: `Unexpected argument for secrets set: ${values[1]}` });
115
121
  }
116
- const val = readSecretValueForSet(parsedArgs, values);
122
+ const val = await readSecretValueForSet(parsedArgs, values, { readStdin: readStdinSecret });
117
123
  if (val === undefined) {
118
124
  fail({
119
125
  code: "BAD_USAGE",
120
126
  message: "Missing secret value.",
121
- hint: "Provide inline, use --file <path>, or pipe with --stdin.",
127
+ hint: "Pipe a value to --stdin, use --file <path>, or provide an inline value only when shell history exposure is acceptable.",
122
128
  });
123
129
  }
124
130
  try {
@@ -129,6 +135,40 @@ async function set(projectId, key, args = []) {
129
135
  }
130
136
  }
131
137
 
138
+ function isStdinAlias(file) {
139
+ return file === "-" || file === "/dev/stdin";
140
+ }
141
+
142
+ async function readStdinSecret() {
143
+ if (process.stdin?.isTTY) {
144
+ failMissingStdin();
145
+ }
146
+ const chunks = [];
147
+ for await (const chunk of process.stdin) {
148
+ chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));
149
+ }
150
+ if (chunks.length === 0) {
151
+ failMissingStdin();
152
+ }
153
+ const value = Buffer.concat(chunks).toString("utf-8");
154
+ if (value.length === 0) {
155
+ failMissingStdin();
156
+ }
157
+ return value;
158
+ }
159
+
160
+ function failMissingStdin() {
161
+ fail({
162
+ code: "BAD_USAGE",
163
+ message: "Missing secret value on stdin.",
164
+ hint: "Pipe a value, use --file <path>, or provide an inline value only when shell history exposure is acceptable.",
165
+ next_actions: [
166
+ "printf %s \"$VALUE\" | run402 secrets set <project> <KEY> --stdin",
167
+ "run402 secrets set <project> <KEY> --file <path>",
168
+ ],
169
+ });
170
+ }
171
+
132
172
  async function list(projectId, args = []) {
133
173
  const parsedArgs = normalizeArgv(args);
134
174
  assertKnownFlags(parsedArgs, ["--help", "-h"]);
package/lib/tier.mjs CHANGED
@@ -8,7 +8,7 @@ Usage:
8
8
  run402 tier <subcommand> [args...]
9
9
 
10
10
  Subcommands:
11
- status Show current tier (tier name, status, expiry)
11
+ status Show current tier, expiry, usage, and function caps when returned
12
12
  set <tier> Subscribe, renew, or upgrade (pays via x402)
13
13
 
14
14
  Tiers: prototype ($0.10/7d, free with testnet faucet), hobby ($5/30d), team ($20/30d)
@@ -32,7 +32,10 @@ Usage:
32
32
  run402 tier status
33
33
 
34
34
  Notes:
35
- - Returns the current tier name, status, and expiry
35
+ - Returns the current tier name, status, expiry, and usage
36
+ - Newer gateways include function authoring caps such as max timeout,
37
+ max memory, max scheduled functions, minimum cron interval, and current
38
+ scheduled-function usage
36
39
  - Use 'run402 tier set <tier>' to subscribe, renew, or upgrade
37
40
 
38
41
  Examples:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "run402",
3
- "version": "1.69.8",
3
+ "version": "1.70.0",
4
4
  "description": "CLI for Run402 — provision Postgres databases, deploy static sites, generate images, and manage wallets via x402 and MPP micropayments.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/namespaces/deploy.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/namespaces/deploy.ts"],"names":[],"mappings":"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"}