run402 2.16.1 → 2.18.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 +6 -0
- package/lib/admin.mjs +198 -0
- package/lib/deploy-v2.mjs +81 -3
- package/lib/projects.mjs +9 -18
- package/lib/status.mjs +5 -0
- package/package.json +1 -1
- package/sdk/dist/namespaces/admin.d.ts +63 -0
- package/sdk/dist/namespaces/admin.d.ts.map +1 -1
- package/sdk/dist/namespaces/admin.js +55 -0
- package/sdk/dist/namespaces/admin.js.map +1 -1
- package/sdk/dist/namespaces/deploy.js +3 -0
- package/sdk/dist/namespaces/deploy.js.map +1 -1
- package/sdk/dist/namespaces/deploy.types.d.ts +11 -0
- package/sdk/dist/namespaces/deploy.types.d.ts.map +1 -1
- package/sdk/dist/namespaces/deploy.types.js.map +1 -1
- package/sdk/dist/namespaces/projects.d.ts +7 -14
- package/sdk/dist/namespaces/projects.d.ts.map +1 -1
- package/sdk/dist/namespaces/projects.js +6 -19
- package/sdk/dist/namespaces/projects.js.map +1 -1
- package/sdk/dist/namespaces/projects.types.d.ts +43 -7
- package/sdk/dist/namespaces/projects.types.d.ts.map +1 -1
- package/sdk/dist/namespaces/tier.d.ts +12 -0
- package/sdk/dist/namespaces/tier.d.ts.map +1 -1
- package/sdk/dist/namespaces/tier.js.map +1 -1
- package/sdk/dist/node/deploy-manifest.d.ts.map +1 -1
- package/sdk/dist/node/deploy-manifest.js +15 -2
- package/sdk/dist/node/deploy-manifest.js.map +1 -1
- package/sdk/dist/scoped.d.ts +1 -2
- package/sdk/dist/scoped.d.ts.map +1 -1
- package/sdk/dist/scoped.js +0 -3
- package/sdk/dist/scoped.js.map +1 -1
package/cli.mjs
CHANGED
|
@@ -25,6 +25,7 @@ Commands:
|
|
|
25
25
|
allowance Manage your agent allowance (create, fund, balance, status)
|
|
26
26
|
tier Manage tier subscription (status, set)
|
|
27
27
|
projects Manage projects (provision, list, query, inspect, delete)
|
|
28
|
+
admin Platform-admin operations (lease-perpetual, archive, reactivate)
|
|
28
29
|
deploy Unified deploy operations (requires active tier)
|
|
29
30
|
ci Link GitHub Actions OIDC deploy bindings
|
|
30
31
|
jobs Submit and inspect fixed platform-managed jobs
|
|
@@ -125,6 +126,11 @@ switch (cmd) {
|
|
|
125
126
|
await run(sub, rest);
|
|
126
127
|
break;
|
|
127
128
|
}
|
|
129
|
+
case "admin": {
|
|
130
|
+
const { run } = await import("./lib/admin.mjs");
|
|
131
|
+
await run(sub, rest);
|
|
132
|
+
break;
|
|
133
|
+
}
|
|
128
134
|
case "deploy": {
|
|
129
135
|
const { run } = await import("./lib/deploy.mjs");
|
|
130
136
|
await run([sub, ...rest].filter(Boolean));
|
package/lib/admin.mjs
ADDED
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { getSdk } from "./sdk.mjs";
|
|
2
|
+
import { reportSdkError, fail } from "./sdk-errors.mjs";
|
|
3
|
+
import { assertKnownFlags, hasHelp, normalizeArgv } from "./argparse.mjs";
|
|
4
|
+
|
|
5
|
+
const HELP = `run402 admin — Platform-admin operations (v1.57+)
|
|
6
|
+
|
|
7
|
+
Usage:
|
|
8
|
+
run402 admin <subcommand> [args...]
|
|
9
|
+
|
|
10
|
+
Subcommands:
|
|
11
|
+
lease-perpetual <billing_account_id> (--enable | --disable)
|
|
12
|
+
Toggle the account-level escape hatch.
|
|
13
|
+
When enabled, the account never advances
|
|
14
|
+
past 'active' regardless of lease expiry.
|
|
15
|
+
If the account is currently in a grace
|
|
16
|
+
state, enabling reactivates it inline
|
|
17
|
+
(\`reactivated: true\` in the response).
|
|
18
|
+
Replaces the v1.56 per-project pin.
|
|
19
|
+
|
|
20
|
+
archive <project_id> [--reason "..."] Moderate-archive a single project. Sets
|
|
21
|
+
projects.archived_at = NOW(). Independent
|
|
22
|
+
of account lifecycle; the rest of the
|
|
23
|
+
account's projects keep serving.
|
|
24
|
+
|
|
25
|
+
reactivate <project_id> Un-archive a project (flips archived_at
|
|
26
|
+
back to NULL). In v1.57 this no longer
|
|
27
|
+
touches account-level lifecycle — to
|
|
28
|
+
reactivate a grace-state account, use
|
|
29
|
+
\`tier set <tier>\` or enable
|
|
30
|
+
lease-perpetual above.
|
|
31
|
+
|
|
32
|
+
Notes:
|
|
33
|
+
- All admin subcommands require platform-admin auth — the configured allowance
|
|
34
|
+
wallet must be a platform admin, or an admin OAuth session cookie must be
|
|
35
|
+
available. Regular project owners cannot run these.
|
|
36
|
+
- Output is JSON.
|
|
37
|
+
|
|
38
|
+
Examples:
|
|
39
|
+
run402 admin lease-perpetual ba_abc123 --enable
|
|
40
|
+
run402 admin lease-perpetual ba_abc123 --disable
|
|
41
|
+
run402 admin archive prj_abuse --reason "ToS violation"
|
|
42
|
+
run402 admin reactivate prj_abuse
|
|
43
|
+
`;
|
|
44
|
+
|
|
45
|
+
const SUB_HELP = {
|
|
46
|
+
"lease-perpetual": `run402 admin lease-perpetual — Toggle the account-level escape hatch
|
|
47
|
+
|
|
48
|
+
Usage:
|
|
49
|
+
run402 admin lease-perpetual <billing_account_id> (--enable | --disable)
|
|
50
|
+
|
|
51
|
+
Options:
|
|
52
|
+
--enable Set lease_perpetual = true (pins every project on the account)
|
|
53
|
+
--disable Set lease_perpetual = false (resumes normal lifecycle advancement)
|
|
54
|
+
|
|
55
|
+
Notes:
|
|
56
|
+
- Replaces the v1.56 per-project \`projects pin\` command (gateway endpoint
|
|
57
|
+
/projects/v1/admin/:id/pin was removed in v1.57).
|
|
58
|
+
- When --enable lands on a grace-state account (past_due / frozen / dormant),
|
|
59
|
+
the gateway reactivates inline and reports \`reactivated: true\`.
|
|
60
|
+
|
|
61
|
+
Examples:
|
|
62
|
+
run402 admin lease-perpetual ba_abc123 --enable
|
|
63
|
+
run402 admin lease-perpetual ba_abc123 --disable
|
|
64
|
+
`,
|
|
65
|
+
archive: `run402 admin archive — Moderate-archive a single project
|
|
66
|
+
|
|
67
|
+
Usage:
|
|
68
|
+
run402 admin archive <project_id> [--reason "..."]
|
|
69
|
+
|
|
70
|
+
Options:
|
|
71
|
+
--reason <text> Free-text moderation reason recorded in the audit log.
|
|
72
|
+
|
|
73
|
+
Notes:
|
|
74
|
+
- Sets projects.archived_at = NOW(). Independent of account-level lifecycle —
|
|
75
|
+
only this project goes dark; siblings on the same billing account keep
|
|
76
|
+
serving.
|
|
77
|
+
- No-op when the project is already archived (returns \`note: "already
|
|
78
|
+
archived"\` without changing archived_at).
|
|
79
|
+
|
|
80
|
+
Examples:
|
|
81
|
+
run402 admin archive prj_abuse --reason "ToS violation"
|
|
82
|
+
run402 admin archive prj_abuse
|
|
83
|
+
`,
|
|
84
|
+
reactivate: `run402 admin reactivate — Un-archive a project
|
|
85
|
+
|
|
86
|
+
Usage:
|
|
87
|
+
run402 admin reactivate <project_id>
|
|
88
|
+
|
|
89
|
+
Notes:
|
|
90
|
+
- Flips projects.archived_at back to NULL. In v1.57 this was narrowed:
|
|
91
|
+
account-level lifecycle reactivation is NOT triggered. Use
|
|
92
|
+
\`run402 tier set <tier>\` (the tier flow runs the lifecycle advance) or
|
|
93
|
+
\`run402 admin lease-perpetual <ba_id> --enable\` for that.
|
|
94
|
+
- No-op when the project is not archived (returns \`note: "not archived"\`).
|
|
95
|
+
|
|
96
|
+
Examples:
|
|
97
|
+
run402 admin reactivate prj_abuse
|
|
98
|
+
`,
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
const FLAGS_BY_SUB = {
|
|
102
|
+
"lease-perpetual": { known: ["--enable", "--disable"], values: [] },
|
|
103
|
+
archive: { known: ["--reason"], values: ["--reason"] },
|
|
104
|
+
reactivate: { known: [], values: [] },
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
function validateFlags(sub, args) {
|
|
108
|
+
const spec = FLAGS_BY_SUB[sub] ?? { known: [], values: [] };
|
|
109
|
+
assertKnownFlags(args, [...spec.known, "--help", "-h"], spec.values);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
async function leasePerpetual(args) {
|
|
113
|
+
const accountId = args.find((a) => typeof a === "string" && !a.startsWith("--"));
|
|
114
|
+
const enable = args.includes("--enable");
|
|
115
|
+
const disable = args.includes("--disable");
|
|
116
|
+
if (!accountId) {
|
|
117
|
+
fail({
|
|
118
|
+
code: "BAD_USAGE",
|
|
119
|
+
message: "Missing <billing_account_id>.",
|
|
120
|
+
hint: "run402 admin lease-perpetual <billing_account_id> --enable | --disable",
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
if (enable === disable) {
|
|
124
|
+
fail({
|
|
125
|
+
code: "BAD_USAGE",
|
|
126
|
+
message: "Pass exactly one of --enable / --disable.",
|
|
127
|
+
hint: "run402 admin lease-perpetual <billing_account_id> --enable | --disable",
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
try {
|
|
131
|
+
const data = await getSdk().admin.setLeasePerpetual(accountId, enable);
|
|
132
|
+
console.log(JSON.stringify(data, null, 2));
|
|
133
|
+
} catch (err) {
|
|
134
|
+
reportSdkError(err);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
async function archive(args) {
|
|
139
|
+
const projectId = args.find((a) => typeof a === "string" && !a.startsWith("--"));
|
|
140
|
+
if (!projectId) {
|
|
141
|
+
fail({
|
|
142
|
+
code: "BAD_USAGE",
|
|
143
|
+
message: "Missing <project_id>.",
|
|
144
|
+
hint: "run402 admin archive <project_id> [--reason \"...\"]",
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
let reason;
|
|
148
|
+
for (let i = 0; i < args.length; i++) {
|
|
149
|
+
if (args[i] === "--reason" && args[i + 1] !== undefined) {
|
|
150
|
+
reason = args[++i];
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
try {
|
|
154
|
+
const data = await getSdk().admin.archiveProject(projectId, reason !== undefined ? { reason } : {});
|
|
155
|
+
console.log(JSON.stringify(data, null, 2));
|
|
156
|
+
} catch (err) {
|
|
157
|
+
reportSdkError(err);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
async function reactivate(args) {
|
|
162
|
+
const projectId = args.find((a) => typeof a === "string" && !a.startsWith("--"));
|
|
163
|
+
if (!projectId) {
|
|
164
|
+
fail({
|
|
165
|
+
code: "BAD_USAGE",
|
|
166
|
+
message: "Missing <project_id>.",
|
|
167
|
+
hint: "run402 admin reactivate <project_id>",
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
try {
|
|
171
|
+
const data = await getSdk().admin.reactivateProject(projectId);
|
|
172
|
+
console.log(JSON.stringify(data, null, 2));
|
|
173
|
+
} catch (err) {
|
|
174
|
+
reportSdkError(err);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
export async function run(sub, args) {
|
|
179
|
+
if (!sub || sub === "--help" || sub === "-h") {
|
|
180
|
+
console.log(HELP);
|
|
181
|
+
process.exit(0);
|
|
182
|
+
}
|
|
183
|
+
args = normalizeArgv(args);
|
|
184
|
+
if (Array.isArray(args) && hasHelp(args)) {
|
|
185
|
+
console.log(SUB_HELP[sub] || HELP);
|
|
186
|
+
process.exit(0);
|
|
187
|
+
}
|
|
188
|
+
validateFlags(sub, args);
|
|
189
|
+
switch (sub) {
|
|
190
|
+
case "lease-perpetual": await leasePerpetual(args); break;
|
|
191
|
+
case "archive": await archive(args); break;
|
|
192
|
+
case "reactivate": await reactivate(args); break;
|
|
193
|
+
default:
|
|
194
|
+
console.error(`Unknown subcommand: ${sub}\n`);
|
|
195
|
+
console.log(HELP);
|
|
196
|
+
process.exit(1);
|
|
197
|
+
}
|
|
198
|
+
}
|
package/lib/deploy-v2.mjs
CHANGED
|
@@ -40,6 +40,7 @@ const APPLY_HELP = `run402 deploy apply — Unified deploy primitive (v1.34+)
|
|
|
40
40
|
Usage:
|
|
41
41
|
run402 deploy apply --manifest <path> [--project <id>] [--quiet|--final-only] [--allow-warning <code>] [--allow-warnings]
|
|
42
42
|
run402 deploy apply --spec '<json>' [--project <id>] [--quiet|--final-only] [--allow-warning <code>] [--allow-warnings]
|
|
43
|
+
run402 deploy apply --dir <build-output> [--manifest <path>] [--project <id>]
|
|
43
44
|
cat spec.json | run402 deploy apply [--project <id>]
|
|
44
45
|
|
|
45
46
|
Manifest format mirrors the MCP \`deploy\` tool's ReleaseSpec:
|
|
@@ -79,6 +80,12 @@ Complete static site + function + route manifest:
|
|
|
79
80
|
Options:
|
|
80
81
|
--manifest <path> Read the spec from this JSON file
|
|
81
82
|
--spec '<json>' Inline JSON spec (single-quote in shell)
|
|
83
|
+
--dir <path> Read \`dist/run402/adapter.json\` from this directory and
|
|
84
|
+
merge the Astro release slice (site + functions + routes)
|
|
85
|
+
into the spec. Combine with --manifest to declare
|
|
86
|
+
database/secrets/subdomains/i18n in the manifest while
|
|
87
|
+
the slice carries the build output. Requires
|
|
88
|
+
@run402/astro installed in the project.
|
|
82
89
|
--project <id> Override project_id from the manifest
|
|
83
90
|
--quiet Suppress per-event JSON-line stderr (final result still on stdout)
|
|
84
91
|
--final-only Alias for --quiet; final success/error envelope is still preserved
|
|
@@ -296,8 +303,8 @@ function makeStderrEventWriter(quiet) {
|
|
|
296
303
|
}
|
|
297
304
|
|
|
298
305
|
function parseApplyArgs(args) {
|
|
299
|
-
const opts = { manifest: null, spec: null, project: null, quiet: false, allowWarnings: false, allowWarningCodes: [] };
|
|
300
|
-
const allowedFlags = ["--manifest", "--spec", "--project", "--quiet", "--final-only", "--allow-warning", "--allow-warnings", "--help", "-h"];
|
|
306
|
+
const opts = { manifest: null, spec: null, dir: null, project: null, quiet: false, allowWarnings: false, allowWarningCodes: [] };
|
|
307
|
+
const allowedFlags = ["--manifest", "--spec", "--dir", "--project", "--quiet", "--final-only", "--allow-warning", "--allow-warnings", "--help", "-h"];
|
|
301
308
|
|
|
302
309
|
for (let i = 0; i < args.length; i++) {
|
|
303
310
|
const arg = args[i];
|
|
@@ -305,7 +312,7 @@ function parseApplyArgs(args) {
|
|
|
305
312
|
console.log(APPLY_HELP);
|
|
306
313
|
process.exit(0);
|
|
307
314
|
}
|
|
308
|
-
if (arg === "--manifest" || arg === "--spec" || arg === "--project" || arg === "--allow-warning") {
|
|
315
|
+
if (arg === "--manifest" || arg === "--spec" || arg === "--dir" || arg === "--project" || arg === "--allow-warning") {
|
|
309
316
|
const value = args[i + 1];
|
|
310
317
|
if (value === undefined || (typeof value === "string" && value.startsWith("--"))) {
|
|
311
318
|
fail({
|
|
@@ -332,6 +339,15 @@ function parseApplyArgs(args) {
|
|
|
332
339
|
});
|
|
333
340
|
}
|
|
334
341
|
opts.spec = value;
|
|
342
|
+
} else if (arg === "--dir") {
|
|
343
|
+
if (opts.dir !== null) {
|
|
344
|
+
fail({
|
|
345
|
+
code: "BAD_USAGE",
|
|
346
|
+
message: "--dir may only be provided once",
|
|
347
|
+
details: { flag: "--dir" },
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
opts.dir = value;
|
|
335
351
|
} else if (arg === "--project") {
|
|
336
352
|
opts.project = value;
|
|
337
353
|
} else {
|
|
@@ -362,9 +378,63 @@ function parseApplyArgs(args) {
|
|
|
362
378
|
function applySourceField(opts) {
|
|
363
379
|
if (opts.manifest !== null) return "manifest";
|
|
364
380
|
if (opts.spec !== null) return "spec";
|
|
381
|
+
if (opts.dir !== null && !hasStdinSource()) return "dir";
|
|
365
382
|
return "stdin";
|
|
366
383
|
}
|
|
367
384
|
|
|
385
|
+
async function mergeAstroReleaseSlice(spec, dirArg) {
|
|
386
|
+
let buildAstroReleaseSlice;
|
|
387
|
+
try {
|
|
388
|
+
({ buildAstroReleaseSlice } = await import("@run402/astro/release-slice"));
|
|
389
|
+
} catch (err) {
|
|
390
|
+
fail({
|
|
391
|
+
code: "BAD_USAGE",
|
|
392
|
+
message:
|
|
393
|
+
"--dir requires @run402/astro to be installed in this project. Add it as a dependency (e.g., `npm install -D @run402/astro`).",
|
|
394
|
+
details: { flag: "--dir", import_error: err?.message ?? String(err) },
|
|
395
|
+
});
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
const distDirAbs = isAbsolute(dirArg) ? dirArg : resolve(process.cwd(), dirArg);
|
|
399
|
+
|
|
400
|
+
let slice;
|
|
401
|
+
try {
|
|
402
|
+
slice = await buildAstroReleaseSlice(distDirAbs);
|
|
403
|
+
} catch (err) {
|
|
404
|
+
if (err && typeof err === "object" && typeof err.code === "string" &&
|
|
405
|
+
err.code.startsWith("R402_ASTRO_ADAPTER_MANIFEST_")) {
|
|
406
|
+
fail({
|
|
407
|
+
code: err.code,
|
|
408
|
+
message: err.message,
|
|
409
|
+
hint: err.suggestedFix,
|
|
410
|
+
docs: err.docs,
|
|
411
|
+
details: {
|
|
412
|
+
flag: "--dir",
|
|
413
|
+
dir: distDirAbs,
|
|
414
|
+
file: err.file,
|
|
415
|
+
...(err.observedVersion ? { observed_version: err.observedVersion } : {}),
|
|
416
|
+
},
|
|
417
|
+
});
|
|
418
|
+
}
|
|
419
|
+
throw err;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
// Slice owns site/functions/routes. The caller's manifest can declare
|
|
423
|
+
// cross-cutting slices (database, secrets, i18n, subdomains) that the
|
|
424
|
+
// slice doesn't touch. On collision in `functions.replace`, the slice
|
|
425
|
+
// wins for its own function name; the caller's other functions are
|
|
426
|
+
// preserved. `site` and `routes` are whole-resource replacements — slice
|
|
427
|
+
// wins entirely on those.
|
|
428
|
+
spec.site = slice.site;
|
|
429
|
+
spec.routes = slice.routes;
|
|
430
|
+
const sliceFns = slice.functions?.replace ?? {};
|
|
431
|
+
const existingFns =
|
|
432
|
+
spec.functions && typeof spec.functions === "object" && spec.functions.replace
|
|
433
|
+
? spec.functions.replace
|
|
434
|
+
: {};
|
|
435
|
+
spec.functions = { replace: { ...existingFns, ...sliceFns } };
|
|
436
|
+
}
|
|
437
|
+
|
|
368
438
|
function validateApplySources(opts) {
|
|
369
439
|
const sources = [];
|
|
370
440
|
if (opts.manifest !== null) sources.push("--manifest");
|
|
@@ -398,6 +468,10 @@ async function applyCmd(args) {
|
|
|
398
468
|
details: { flag: "--manifest", path: opts.manifest },
|
|
399
469
|
});
|
|
400
470
|
}
|
|
471
|
+
} else if (opts.dir !== null && !hasStdinSource()) {
|
|
472
|
+
// --dir without any other source: start from an empty spec and let the
|
|
473
|
+
// Astro release-slice fill in site/functions/routes below.
|
|
474
|
+
raw = "{}";
|
|
401
475
|
} else {
|
|
402
476
|
raw = await readStdin();
|
|
403
477
|
}
|
|
@@ -417,6 +491,10 @@ async function applyCmd(args) {
|
|
|
417
491
|
...(manifestPath ? { path: manifestPath } : {}),
|
|
418
492
|
});
|
|
419
493
|
|
|
494
|
+
if (opts.dir !== null) {
|
|
495
|
+
await mergeAstroReleaseSlice(spec, opts.dir);
|
|
496
|
+
}
|
|
497
|
+
|
|
420
498
|
// GH-232: Reject empty specs client-side. Without this guard,
|
|
421
499
|
// `run402 deploy apply --spec '{}'` (and `--manifest <empty>`) would silently
|
|
422
500
|
// send an empty ReleaseSpec to /apply/v1/plans with no signal that nothing
|
package/lib/projects.mjs
CHANGED
|
@@ -27,7 +27,6 @@ Subcommands:
|
|
|
27
27
|
validate-expose [id] --file <path> Validate a manifest file without mutating the project
|
|
28
28
|
get-expose [id] Get the current authorization manifest
|
|
29
29
|
delete [id] --confirm Immediately and irreversibly delete a project (cascade purge) and remove from local state. Requires --confirm.
|
|
30
|
-
pin [id] Pin a project (admin only; uses admin allowance wallet)
|
|
31
30
|
promote-user [id] <email> Promote a user to project_admin role
|
|
32
31
|
demote-user [id] <email> Demote a user from project_admin role
|
|
33
32
|
|
|
@@ -506,22 +505,6 @@ async function use(projectId) {
|
|
|
506
505
|
}
|
|
507
506
|
}
|
|
508
507
|
|
|
509
|
-
async function pin(projectId) {
|
|
510
|
-
if (!projectId) {
|
|
511
|
-
fail({
|
|
512
|
-
code: "BAD_USAGE",
|
|
513
|
-
message: "Missing <project_id>.",
|
|
514
|
-
hint: "run402 projects pin <project_id>",
|
|
515
|
-
});
|
|
516
|
-
}
|
|
517
|
-
try {
|
|
518
|
-
const data = await getSdk().projects.pin(projectId);
|
|
519
|
-
console.log(JSON.stringify(data, null, 2));
|
|
520
|
-
} catch (err) {
|
|
521
|
-
reportSdkError(err);
|
|
522
|
-
}
|
|
523
|
-
}
|
|
524
|
-
|
|
525
508
|
async function promoteUser(projectId, email) {
|
|
526
509
|
if (!email) {
|
|
527
510
|
fail({
|
|
@@ -593,6 +576,15 @@ export async function run(sub, args) {
|
|
|
593
576
|
console.log(HELP);
|
|
594
577
|
process.exit(0);
|
|
595
578
|
}
|
|
579
|
+
// v1.57: `projects pin` was removed. Surface a specific hint pointing at the
|
|
580
|
+
// replacement before falling through to the unknown-subcommand handler.
|
|
581
|
+
if (sub === "pin") {
|
|
582
|
+
fail({
|
|
583
|
+
code: "REMOVED_COMMAND",
|
|
584
|
+
message: "`run402 projects pin` was removed in v1.57.",
|
|
585
|
+
hint: "Per-project pin is superseded by the account-level escape hatch. Use `run402 admin lease-perpetual <billing_account_id> --enable` (platform-admin only).",
|
|
586
|
+
});
|
|
587
|
+
}
|
|
596
588
|
args = normalizeArgv(args);
|
|
597
589
|
if (Array.isArray(args) && hasHelp(args)) {
|
|
598
590
|
console.log(SUB_HELP[sub] || HELP);
|
|
@@ -615,7 +607,6 @@ export async function run(sub, args) {
|
|
|
615
607
|
case "validate-expose": await validateExpose(args); break;
|
|
616
608
|
case "get-expose": { const { projectId } = resolvePositionalProject(args, { rejectBareFirst: true }); await getExpose(projectId); break; }
|
|
617
609
|
case "delete": { const { projectId, rest } = resolvePositionalProject(args, { rejectBareFirst: true }); await deleteProject(projectId, rest); break; }
|
|
618
|
-
case "pin": { const { projectId } = resolvePositionalProject(args, { rejectBareFirst: true }); await pin(projectId); break; }
|
|
619
610
|
case "promote-user": { const { projectId, rest } = resolvePositionalProject(args); await promoteUser(projectId, rest[0]); break; }
|
|
620
611
|
case "demote-user": { const { projectId, rest } = resolvePositionalProject(args); await demoteUser(projectId, rest[0]); break; }
|
|
621
612
|
default:
|
package/lib/status.mjs
CHANGED
|
@@ -113,6 +113,11 @@ export async function run(args = []) {
|
|
|
113
113
|
tier: tier && tier.tier
|
|
114
114
|
? { name: tier.tier, status: tier.status, expires: tier.lease_expires_at }
|
|
115
115
|
: null,
|
|
116
|
+
// v1.57: lifecycle state and the per-account escape hatch moved to the
|
|
117
|
+
// billing account. Surface them at the top level so agents don't have to
|
|
118
|
+
// dig into the projects array to read them.
|
|
119
|
+
account_lifecycle_state: tier?.account_lifecycle_state ?? null,
|
|
120
|
+
lease_perpetual: tier?.lease_perpetual ?? null,
|
|
116
121
|
// GH-32: `balance` used to mean the billing-account balance, which
|
|
117
122
|
// confused people who expected their on-chain wallet balance. Split into
|
|
118
123
|
// two unambiguous fields:
|
package/package.json
CHANGED
|
@@ -138,6 +138,40 @@ export interface RotateWebhookSecretResult {
|
|
|
138
138
|
grace_window_hours: number;
|
|
139
139
|
note: string;
|
|
140
140
|
}
|
|
141
|
+
export interface SetLeasePerpetualResult {
|
|
142
|
+
status: "ok";
|
|
143
|
+
billing_account_id: string;
|
|
144
|
+
lease_perpetual: boolean;
|
|
145
|
+
/**
|
|
146
|
+
* `true` when the toggle was `lease_perpetual: true` AND the account was in
|
|
147
|
+
* a grace state (past_due / frozen / dormant) and got pulled back to
|
|
148
|
+
* `active` inline. `false` otherwise (account was already active, or the
|
|
149
|
+
* toggle disabled perpetual).
|
|
150
|
+
*/
|
|
151
|
+
reactivated: boolean;
|
|
152
|
+
}
|
|
153
|
+
export interface ArchiveProjectOptions {
|
|
154
|
+
/** Free-text moderation reason recorded in the audit log. */
|
|
155
|
+
reason?: string;
|
|
156
|
+
}
|
|
157
|
+
export interface ArchiveProjectResult {
|
|
158
|
+
status: "ok";
|
|
159
|
+
project_id: string;
|
|
160
|
+
/** ISO timestamp of the archive action. Absent when the project was already archived. */
|
|
161
|
+
archived_at?: string;
|
|
162
|
+
/** Echoes the moderator-supplied reason when the project was newly archived. */
|
|
163
|
+
reason?: string;
|
|
164
|
+
/** Set when the project was already archived; archived_at is then omitted. */
|
|
165
|
+
note?: "already archived";
|
|
166
|
+
}
|
|
167
|
+
export interface ReactivateProjectResult {
|
|
168
|
+
status: "ok";
|
|
169
|
+
project_id: string;
|
|
170
|
+
/** `true` when the call un-archived a previously archived project. */
|
|
171
|
+
reactivated?: true;
|
|
172
|
+
/** Set when the project was not archived to begin with — the call is a no-op. */
|
|
173
|
+
note?: "not archived";
|
|
174
|
+
}
|
|
141
175
|
export interface OperatorStatusResult {
|
|
142
176
|
operator_contact: {
|
|
143
177
|
email_status: "none" | "pending" | "verified" | "bouncing";
|
|
@@ -212,5 +246,34 @@ export declare class Admin {
|
|
|
212
246
|
* suitable admin headers.
|
|
213
247
|
*/
|
|
214
248
|
getProjectFinance(projectId: string, opts?: AdminProjectFinanceOptions): Promise<AdminProjectFinanceResult>;
|
|
249
|
+
/**
|
|
250
|
+
* Toggle a billing account's `lease_perpetual` flag — the operator escape
|
|
251
|
+
* hatch that pins every project on the account (replaces the v1.56
|
|
252
|
+
* per-project `pin` removed in v1.57). When enabling on an account in a
|
|
253
|
+
* grace state, the gateway reactivates inline and reports it via
|
|
254
|
+
* `reactivated: true`.
|
|
255
|
+
*
|
|
256
|
+
* Platform-admin only. Calls
|
|
257
|
+
* `POST /billing-accounts/v1/admin/:id/lease-perpetual`.
|
|
258
|
+
*/
|
|
259
|
+
setLeasePerpetual(billingAccountId: string, perpetual: boolean): Promise<SetLeasePerpetualResult>;
|
|
260
|
+
/**
|
|
261
|
+
* Operator moderation action — archive a single project (ToS / abuse).
|
|
262
|
+
* Sets `projects.archived_at` to NOW(). Independent of account-level
|
|
263
|
+
* lifecycle; the rest of the account's projects continue serving.
|
|
264
|
+
*
|
|
265
|
+
* Platform-admin only. Calls `POST /projects/v1/admin/:id/archive`.
|
|
266
|
+
*/
|
|
267
|
+
archiveProject(projectId: string, opts?: ArchiveProjectOptions): Promise<ArchiveProjectResult>;
|
|
268
|
+
/**
|
|
269
|
+
* Operator "un-archive" — flips `projects.archived_at` back to NULL. In
|
|
270
|
+
* v1.57 this route was narrowed: it no longer touches account-level
|
|
271
|
+
* lifecycle. To reactivate a grace-state account, either subscribe a new
|
|
272
|
+
* tier (the tier flow runs `advanceLifecycleForAccount` inline) or set
|
|
273
|
+
* `lease_perpetual: true` via {@link setLeasePerpetual}.
|
|
274
|
+
*
|
|
275
|
+
* Platform-admin only. Calls `POST /projects/v1/admin/:id/reactivate`.
|
|
276
|
+
*/
|
|
277
|
+
reactivateProject(projectId: string): Promise<ReactivateProjectResult>;
|
|
215
278
|
}
|
|
216
279
|
//# sourceMappingURL=admin.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../src/namespaces/admin.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../src/namespaces/admin.ts"],"names":[],"mappings":"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"}
|
|
@@ -134,5 +134,60 @@ export class Admin {
|
|
|
134
134
|
context: "fetching project finance",
|
|
135
135
|
});
|
|
136
136
|
}
|
|
137
|
+
// -------------------------------------------------------------------------
|
|
138
|
+
// Operator-only project + billing-account actions (v1.57).
|
|
139
|
+
// -------------------------------------------------------------------------
|
|
140
|
+
/**
|
|
141
|
+
* Toggle a billing account's `lease_perpetual` flag — the operator escape
|
|
142
|
+
* hatch that pins every project on the account (replaces the v1.56
|
|
143
|
+
* per-project `pin` removed in v1.57). When enabling on an account in a
|
|
144
|
+
* grace state, the gateway reactivates inline and reports it via
|
|
145
|
+
* `reactivated: true`.
|
|
146
|
+
*
|
|
147
|
+
* Platform-admin only. Calls
|
|
148
|
+
* `POST /billing-accounts/v1/admin/:id/lease-perpetual`.
|
|
149
|
+
*/
|
|
150
|
+
async setLeasePerpetual(billingAccountId, perpetual) {
|
|
151
|
+
return this.client.request(`/billing-accounts/v1/admin/${encodeURIComponent(billingAccountId)}/lease-perpetual`, {
|
|
152
|
+
method: "POST",
|
|
153
|
+
headers: { "X-Admin-Mode": "1" },
|
|
154
|
+
body: { lease_perpetual: perpetual },
|
|
155
|
+
context: "setting billing account lease_perpetual",
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Operator moderation action — archive a single project (ToS / abuse).
|
|
160
|
+
* Sets `projects.archived_at` to NOW(). Independent of account-level
|
|
161
|
+
* lifecycle; the rest of the account's projects continue serving.
|
|
162
|
+
*
|
|
163
|
+
* Platform-admin only. Calls `POST /projects/v1/admin/:id/archive`.
|
|
164
|
+
*/
|
|
165
|
+
async archiveProject(projectId, opts = {}) {
|
|
166
|
+
const body = {};
|
|
167
|
+
if (opts.reason !== undefined)
|
|
168
|
+
body.reason = opts.reason;
|
|
169
|
+
return this.client.request(`/projects/v1/admin/${encodeURIComponent(projectId)}/archive`, {
|
|
170
|
+
method: "POST",
|
|
171
|
+
headers: { "X-Admin-Mode": "1" },
|
|
172
|
+
body,
|
|
173
|
+
context: "archiving project",
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Operator "un-archive" — flips `projects.archived_at` back to NULL. In
|
|
178
|
+
* v1.57 this route was narrowed: it no longer touches account-level
|
|
179
|
+
* lifecycle. To reactivate a grace-state account, either subscribe a new
|
|
180
|
+
* tier (the tier flow runs `advanceLifecycleForAccount` inline) or set
|
|
181
|
+
* `lease_perpetual: true` via {@link setLeasePerpetual}.
|
|
182
|
+
*
|
|
183
|
+
* Platform-admin only. Calls `POST /projects/v1/admin/:id/reactivate`.
|
|
184
|
+
*/
|
|
185
|
+
async reactivateProject(projectId) {
|
|
186
|
+
return this.client.request(`/projects/v1/admin/${encodeURIComponent(projectId)}/reactivate`, {
|
|
187
|
+
method: "POST",
|
|
188
|
+
headers: { "X-Admin-Mode": "1" },
|
|
189
|
+
context: "reactivating project",
|
|
190
|
+
});
|
|
191
|
+
}
|
|
137
192
|
}
|
|
138
193
|
//# sourceMappingURL=admin.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/namespaces/admin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAsE1C,MAAM,eAAe,GAAG,IAAI,GAAG,CAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"admin.js","sourceRoot":"","sources":["../../src/namespaces/admin.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAsE1C,MAAM,eAAe,GAAG,IAAI,GAAG,CAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;AA6JjF,MAAM,OAAO,KAAK;IACa;IAA7B,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE/C,wEAAwE;IACxE,KAAK,CAAC,WAAW,CAAC,OAAe;QAC/B,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAoB,aAAa,EAAE;YAC3D,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,EAAE,OAAO,EAAE;YACjB,OAAO,EAAE,iBAAiB;SAC3B,CAAC,CAAC;IACL,CAAC;IAED,4EAA4E;IAC5E,KAAK,CAAC,eAAe,CAAC,OAAqB;QACzC,MAAM,IAAI,GAA2B,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5D,IAAI,OAAO,CAAC,KAAK;YAAE,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC9C,IAAI,OAAO,CAAC,OAAO;YAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAEpD,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAqB,mBAAmB,EAAE;YAClE,MAAM,EAAE,MAAM;YACd,IAAI;YACJ,OAAO,EAAE,uBAAuB;SACjC,CAAC,CAAC;IACL,CAAC;IAED,+EAA+E;IAC/E,KAAK,CAAC,qBAAqB;QACzB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAqB,0BAA0B,EAAE;YACzE,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,+BAA+B;SACzC,CAAC,CAAC;IACL,CAAC;IAED,0DAA0D;IAC1D,KAAK,CAAC,uBAAuB;QAC3B,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAqB,gCAAgC,EAAE;YAC/E,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,2CAA2C;SACrD,CAAC,CAAC;IACL,CAAC;IAED,sEAAsE;IACtE,KAAK,CAAC,8BAA8B;QAClC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAqB,kCAAkC,EAAE;YACjF,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,sCAAsC;SAChD,CAAC,CAAC;IACL,CAAC;IAED,8EAA8E;IAC9E,qEAAqE;IACrE,8EAA8E;IAE9E,qEAAqE;IACrE,KAAK,CAAC,iBAAiB,CAAC,OAAiC,EAAE;QACzD,MAAM,CAAC,GAAa,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,IAAI;YAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/D,IAAI,IAAI,CAAC,KAAK;YAAE,CAAC,CAAC,IAAI,CAAC,SAAS,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClE,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI;YAAE,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACtD,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI;YAAE,CAAC,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACzD,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC;YACtB,CAAC,CAAC,2BAA2B,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;YAC1C,CAAC,CAAC,yBAAyB,CAAC;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAA0B,GAAG,EAAE;YACvD,MAAM,EAAE,KAAK;YACb,OAAO,EAAE,uBAAuB;SACjC,CAAC,CAAC;IACL,CAAC;IAED,sDAAsD;IACtD,KAAK,CAAC,eAAe,CAAC,EAAU;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CACxB,2BAA2B,kBAAkB,CAAC,EAAE,CAAC,EAAE,EACnD,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,uBAAuB,EAAE,CACpD,CAAC;IACJ,CAAC;IAED,0DAA0D;IAC1D,KAAK,CAAC,0BAA0B;QAC9B,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CACxB,qCAAqC,EACrC,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,mCAAmC,EAAE,CAChE,CAAC;IACJ,CAAC;IAED,0EAA0E;IAC1E,KAAK,CAAC,0BAA0B,CAC9B,KAAmC;QAEnC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CACxB,qCAAqC,EACrC;YACE,MAAM,EAAE,OAAO;YACf,IAAI,EAAE,KAA2C;YACjD,OAAO,EAAE,mCAAmC;SAC7C,CACF,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,gBAAgB;QACpB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CACxB,8BAA8B,EAC9B,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,8BAA8B,EAAE,CAC5D,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,mBAAmB;QACvB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CACxB,iCAAiC,EACjC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iCAAiC,EAAE,CAC/D,CAAC;IACJ,CAAC;IAED,qEAAqE;IACrE,KAAK,CAAC,iBAAiB;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CACxB,2BAA2B,EAC3B,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,0BAA0B,EAAE,CACvD,CAAC;IACJ,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,iBAAiB,CACrB,SAAiB,EACjB,OAAmC,EAAE;QAErC,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,KAAK,CAAC;QACpC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,UAAU,CAClB,2BAA2B,MAAM,CAAC,MAAM,CAAC,uCAAuC,EAChF,0BAA0B,CAC3B,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAA2B,EAAE,cAAc,EAAE,GAAG,EAAE,CAAC;QAChE,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAE9C,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CACxB,8BAA8B,kBAAkB,CAAC,SAAS,CAAC,WAAW,kBAAkB,CAAC,MAAM,CAAC,EAAE,EAClG;YACE,OAAO;YACP,OAAO,EAAE,0BAA0B;SACpC,CACF,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,2DAA2D;IAC3D,4EAA4E;IAE5E;;;;;;;;;OASG;IACH,KAAK,CAAC,iBAAiB,CACrB,gBAAwB,EACxB,SAAkB;QAElB,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CACxB,8BAA8B,kBAAkB,CAAC,gBAAgB,CAAC,kBAAkB,EACpF;YACE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE;YAChC,IAAI,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE;YACpC,OAAO,EAAE,yCAAyC;SACnD,CACF,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,cAAc,CAClB,SAAiB,EACjB,OAA8B,EAAE;QAEhC,MAAM,IAAI,GAA2B,EAAE,CAAC;QACxC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;YAAE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QACzD,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CACxB,sBAAsB,kBAAkB,CAAC,SAAS,CAAC,UAAU,EAC7D;YACE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE;YAChC,IAAI;YACJ,OAAO,EAAE,mBAAmB;SAC7B,CACF,CAAC;IACJ,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,iBAAiB,CAAC,SAAiB;QACvC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CACxB,sBAAsB,kBAAkB,CAAC,SAAS,CAAC,aAAa,EAChE;YACE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,GAAG,EAAE;YAChC,OAAO,EAAE,sBAAsB;SAChC,CACF,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1484,6 +1484,7 @@ const FUNCTION_SPEC_FIELDS = new Set([
|
|
|
1484
1484
|
"schedule",
|
|
1485
1485
|
"requireAuth",
|
|
1486
1486
|
"requireRole",
|
|
1487
|
+
"class",
|
|
1487
1488
|
]);
|
|
1488
1489
|
const FUNCTION_CONFIG_FIELDS = new Set(["timeoutSeconds", "memoryMb"]);
|
|
1489
1490
|
const SITE_SPEC_FIELDS = new Set(["replace", "patch", "public_paths"]);
|
|
@@ -2382,6 +2383,8 @@ async function normalizeFunction(fn, remember) {
|
|
|
2382
2383
|
out.requireAuth = fn.requireAuth;
|
|
2383
2384
|
if (fn.requireRole !== undefined)
|
|
2384
2385
|
out.requireRole = fn.requireRole;
|
|
2386
|
+
if (fn.class !== undefined)
|
|
2387
|
+
out.class = fn.class;
|
|
2385
2388
|
if (fn.source !== undefined) {
|
|
2386
2389
|
const resolved = await resolveContent(fn.source, "function source");
|
|
2387
2390
|
out.source = remember(resolved);
|