run402 2.1.0 → 2.3.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/README.md +11 -0
- package/cli.mjs +7 -0
- package/lib/jobs.mjs +308 -0
- package/package.json +1 -1
- package/sdk/dist/index.d.ts +3 -0
- package/sdk/dist/index.d.ts.map +1 -1
- package/sdk/dist/index.js +3 -0
- package/sdk/dist/index.js.map +1 -1
- package/sdk/dist/namespaces/assets.d.ts.map +1 -1
- package/sdk/dist/namespaces/assets.js +129 -2
- package/sdk/dist/namespaces/assets.js.map +1 -1
- package/sdk/dist/namespaces/assets.types.d.ts +116 -0
- package/sdk/dist/namespaces/assets.types.d.ts.map +1 -1
- package/sdk/dist/namespaces/deploy.d.ts +5 -0
- package/sdk/dist/namespaces/deploy.d.ts.map +1 -1
- package/sdk/dist/namespaces/deploy.js +127 -32
- package/sdk/dist/namespaces/deploy.js.map +1 -1
- package/sdk/dist/namespaces/deploy.types.d.ts +44 -0
- package/sdk/dist/namespaces/deploy.types.d.ts.map +1 -1
- package/sdk/dist/namespaces/jobs.d.ts +74 -0
- package/sdk/dist/namespaces/jobs.d.ts.map +1 -0
- package/sdk/dist/namespaces/jobs.js +82 -0
- package/sdk/dist/namespaces/jobs.js.map +1 -0
- package/sdk/dist/scoped.d.ts +11 -0
- package/sdk/dist/scoped.d.ts.map +1 -1
- package/sdk/dist/scoped.js +22 -0
- package/sdk/dist/scoped.js.map +1 -1
package/README.md
CHANGED
|
@@ -143,6 +143,17 @@ run402 deploy apply --manifest run402.deploy.json # manifest uses secrets.requ
|
|
|
143
143
|
|
|
144
144
|
Secret values are write-only. `list` returns keys and timestamps only; deploy manifests should declare dependencies with `secrets.require` and never contain values.
|
|
145
145
|
|
|
146
|
+
### Jobs
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
run402 jobs submit --file job.json --project prj_...
|
|
150
|
+
run402 jobs get job_abc123 --project prj_...
|
|
151
|
+
run402 jobs logs job_abc123 --project prj_... --tail 100
|
|
152
|
+
run402 jobs cancel job_abc123 --project prj_...
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
Jobs are fixed platform-managed runners, not arbitrary Docker execution. Submit the gateway-shaped JSON request (`job_type`, `input["input.json"]`, `max_cost_usd_micros`) and the CLI handles the required idempotency header through the SDK.
|
|
156
|
+
|
|
146
157
|
### Email
|
|
147
158
|
|
|
148
159
|
```bash
|
package/cli.mjs
CHANGED
|
@@ -27,6 +27,7 @@ Commands:
|
|
|
27
27
|
projects Manage projects (provision, list, query, inspect, delete)
|
|
28
28
|
deploy Unified deploy operations (requires active tier)
|
|
29
29
|
ci Link GitHub Actions OIDC deploy bindings
|
|
30
|
+
jobs Submit and inspect fixed platform-managed jobs
|
|
30
31
|
functions Manage serverless functions (deploy, invoke, logs, list, delete)
|
|
31
32
|
secrets Manage project secrets (set, list, delete)
|
|
32
33
|
assets Direct-to-S3 asset storage (put, get, ls, rm, sign, diagnose) — up to 5 TiB
|
|
@@ -52,6 +53,7 @@ Examples:
|
|
|
52
53
|
run402 allowance create
|
|
53
54
|
run402 allowance fund
|
|
54
55
|
run402 deploy apply --manifest app.json
|
|
56
|
+
run402 jobs submit --file job.json
|
|
55
57
|
run402 projects list
|
|
56
58
|
run402 projects sql <project_id> "SELECT * FROM users LIMIT 5"
|
|
57
59
|
run402 functions deploy <project_id> my-fn --file handler.ts
|
|
@@ -129,6 +131,11 @@ switch (cmd) {
|
|
|
129
131
|
await run(sub, rest);
|
|
130
132
|
break;
|
|
131
133
|
}
|
|
134
|
+
case "jobs": {
|
|
135
|
+
const { run } = await import("./lib/jobs.mjs");
|
|
136
|
+
await run(sub, rest);
|
|
137
|
+
break;
|
|
138
|
+
}
|
|
132
139
|
case "functions": {
|
|
133
140
|
const { run } = await import("./lib/functions.mjs");
|
|
134
141
|
await run(sub, rest);
|
package/lib/jobs.mjs
ADDED
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
|
|
3
|
+
import { getSdk } from "./sdk.mjs";
|
|
4
|
+
import { resolveProjectId } from "./config.mjs";
|
|
5
|
+
import { reportSdkError, fail } from "./sdk-errors.mjs";
|
|
6
|
+
import {
|
|
7
|
+
assertKnownFlags,
|
|
8
|
+
flagValue,
|
|
9
|
+
normalizeArgv,
|
|
10
|
+
parseIntegerFlag,
|
|
11
|
+
requirePositionalCount,
|
|
12
|
+
validateRegularFile,
|
|
13
|
+
} from "./argparse.mjs";
|
|
14
|
+
|
|
15
|
+
const HELP = `run402 jobs — Submit and inspect fixed platform-managed jobs
|
|
16
|
+
|
|
17
|
+
Usage:
|
|
18
|
+
run402 jobs <subcommand> [args...] [options]
|
|
19
|
+
|
|
20
|
+
Subcommands:
|
|
21
|
+
submit --file <path>|--stdin Submit a managed job request
|
|
22
|
+
get <job_id> Get a job run
|
|
23
|
+
logs <job_id> Read job logs
|
|
24
|
+
cancel <job_id> Cancel a queued or running job
|
|
25
|
+
|
|
26
|
+
Examples:
|
|
27
|
+
run402 jobs submit --file job.json
|
|
28
|
+
cat job.json | run402 jobs submit --stdin --project prj_abc123
|
|
29
|
+
run402 jobs get job_abc123
|
|
30
|
+
run402 jobs logs job_abc123 --tail 100
|
|
31
|
+
run402 jobs cancel job_abc123
|
|
32
|
+
|
|
33
|
+
Notes:
|
|
34
|
+
- --project defaults to the active project from 'run402 projects use'
|
|
35
|
+
- Submit requests must match the gateway jobs API shape
|
|
36
|
+
`;
|
|
37
|
+
|
|
38
|
+
const SUB_HELP = {
|
|
39
|
+
submit: `run402 jobs submit — Submit a managed job request
|
|
40
|
+
|
|
41
|
+
Usage:
|
|
42
|
+
run402 jobs submit --file <path> [--project <id>]
|
|
43
|
+
run402 jobs submit --stdin [--project <id>]
|
|
44
|
+
|
|
45
|
+
Options:
|
|
46
|
+
--file <path> Read the JSON submit request from a file
|
|
47
|
+
--stdin Read the JSON submit request from stdin
|
|
48
|
+
--project <id> Project ID (defaults to the active project)
|
|
49
|
+
|
|
50
|
+
Example request:
|
|
51
|
+
{
|
|
52
|
+
"job_type": "kysigned.fflonk_prove.v0_17_0",
|
|
53
|
+
"input": { "input.json": {} },
|
|
54
|
+
"max_cost_usd_micros": 50000
|
|
55
|
+
}
|
|
56
|
+
`,
|
|
57
|
+
get: `run402 jobs get — Get a managed job run
|
|
58
|
+
|
|
59
|
+
Usage:
|
|
60
|
+
run402 jobs get <job_id> [--project <id>]
|
|
61
|
+
|
|
62
|
+
Options:
|
|
63
|
+
--project <id> Project ID (defaults to the active project)
|
|
64
|
+
`,
|
|
65
|
+
logs: `run402 jobs logs — Read managed job logs
|
|
66
|
+
|
|
67
|
+
Usage:
|
|
68
|
+
run402 jobs logs <job_id> [--project <id>] [--tail <n>] [--since <epoch_ms>]
|
|
69
|
+
|
|
70
|
+
Options:
|
|
71
|
+
--project <id> Project ID (defaults to the active project)
|
|
72
|
+
--tail <n> Maximum entries to return (gateway max: 1000)
|
|
73
|
+
--since <ms> Only include logs at or after this epoch millisecond timestamp
|
|
74
|
+
`,
|
|
75
|
+
cancel: `run402 jobs cancel — Cancel a managed job run
|
|
76
|
+
|
|
77
|
+
Usage:
|
|
78
|
+
run402 jobs cancel <job_id> [--project <id>]
|
|
79
|
+
|
|
80
|
+
Options:
|
|
81
|
+
--project <id> Project ID (defaults to the active project)
|
|
82
|
+
`,
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
const PROJECT_FLAGS = ["--project"];
|
|
86
|
+
|
|
87
|
+
function parseJsonRequest(raw, source) {
|
|
88
|
+
let parsed;
|
|
89
|
+
try {
|
|
90
|
+
parsed = JSON.parse(raw);
|
|
91
|
+
} catch (err) {
|
|
92
|
+
fail({
|
|
93
|
+
code: "BAD_JSON",
|
|
94
|
+
message: `${source} is not valid JSON`,
|
|
95
|
+
details: {
|
|
96
|
+
source,
|
|
97
|
+
parse_error: err instanceof Error ? err.message : String(err),
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
102
|
+
fail({
|
|
103
|
+
code: "BAD_JSON",
|
|
104
|
+
message: `${source} must contain a JSON object`,
|
|
105
|
+
details: { source },
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
return parsed;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
async function readStdinText() {
|
|
112
|
+
if (process.stdin?.isTTY) {
|
|
113
|
+
fail({
|
|
114
|
+
code: "BAD_USAGE",
|
|
115
|
+
message: "Missing JSON request on stdin.",
|
|
116
|
+
hint: "Pipe a job request JSON object, or use --file <path>.",
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
const chunks = [];
|
|
120
|
+
for await (const chunk of process.stdin) {
|
|
121
|
+
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(String(chunk)));
|
|
122
|
+
}
|
|
123
|
+
if (chunks.length === 0) {
|
|
124
|
+
fail({
|
|
125
|
+
code: "BAD_USAGE",
|
|
126
|
+
message: "Missing JSON request on stdin.",
|
|
127
|
+
hint: "Pipe a job request JSON object, or use --file <path>.",
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
return Buffer.concat(chunks).toString("utf-8");
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
async function readSubmitRequest(args) {
|
|
134
|
+
const file = flagValue(args, "--file");
|
|
135
|
+
const stdin = args.includes("--stdin");
|
|
136
|
+
if (file && stdin) {
|
|
137
|
+
fail({
|
|
138
|
+
code: "BAD_USAGE",
|
|
139
|
+
message: "Provide exactly one request source.",
|
|
140
|
+
hint: "Use either --file <path> or --stdin.",
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
if (!file && !stdin) {
|
|
144
|
+
fail({
|
|
145
|
+
code: "BAD_USAGE",
|
|
146
|
+
message: "Missing job request source.",
|
|
147
|
+
hint: "Use --file <path> or --stdin.",
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
if (file) {
|
|
151
|
+
validateRegularFile(file, "--file");
|
|
152
|
+
return parseJsonRequest(readFileSync(file, "utf-8"), file);
|
|
153
|
+
}
|
|
154
|
+
return parseJsonRequest(await readStdinText(), "stdin");
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
async function submit(args = []) {
|
|
158
|
+
const parsed = normalizeArgv(args);
|
|
159
|
+
const valueFlags = ["--file", "--project"];
|
|
160
|
+
assertKnownFlags(parsed, ["--file", "--stdin", "--project", "--help", "-h"], valueFlags);
|
|
161
|
+
requirePositionalCount(parsed, valueFlags, {
|
|
162
|
+
max: 0,
|
|
163
|
+
command: "run402 jobs submit",
|
|
164
|
+
});
|
|
165
|
+
const projectId = resolveProjectId(flagValue(parsed, "--project"));
|
|
166
|
+
const request = await readSubmitRequest(parsed);
|
|
167
|
+
|
|
168
|
+
try {
|
|
169
|
+
const result = await getSdk().jobs.submit(projectId, request);
|
|
170
|
+
console.log(JSON.stringify(result, null, 2));
|
|
171
|
+
} catch (err) {
|
|
172
|
+
reportSdkError(err);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
async function get(jobId, args = []) {
|
|
177
|
+
const parsed = normalizeArgv(args);
|
|
178
|
+
assertKnownFlags(parsed, ["--project", "--help", "-h"], PROJECT_FLAGS);
|
|
179
|
+
if (!jobId) {
|
|
180
|
+
fail({
|
|
181
|
+
code: "BAD_USAGE",
|
|
182
|
+
message: "Missing job_id.",
|
|
183
|
+
hint: "Use `run402 jobs get <job_id>`.",
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
requirePositionalCount(parsed, PROJECT_FLAGS, {
|
|
187
|
+
max: 0,
|
|
188
|
+
command: "run402 jobs get <job_id>",
|
|
189
|
+
});
|
|
190
|
+
const projectId = resolveProjectId(flagValue(parsed, "--project"));
|
|
191
|
+
|
|
192
|
+
try {
|
|
193
|
+
const result = await getSdk().jobs.get(projectId, jobId);
|
|
194
|
+
console.log(JSON.stringify(result, null, 2));
|
|
195
|
+
} catch (err) {
|
|
196
|
+
reportSdkError(err);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
async function logs(jobId, args = []) {
|
|
201
|
+
const parsed = normalizeArgv(args);
|
|
202
|
+
const valueFlags = ["--project", "--tail", "--since"];
|
|
203
|
+
assertKnownFlags(parsed, ["--project", "--tail", "--since", "--help", "-h"], valueFlags);
|
|
204
|
+
if (!jobId) {
|
|
205
|
+
fail({
|
|
206
|
+
code: "BAD_USAGE",
|
|
207
|
+
message: "Missing job_id.",
|
|
208
|
+
hint: "Use `run402 jobs logs <job_id>`.",
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
requirePositionalCount(parsed, valueFlags, {
|
|
212
|
+
max: 0,
|
|
213
|
+
command: "run402 jobs logs <job_id>",
|
|
214
|
+
});
|
|
215
|
+
const projectId = resolveProjectId(flagValue(parsed, "--project"));
|
|
216
|
+
const opts = {};
|
|
217
|
+
const tail = flagValue(parsed, "--tail");
|
|
218
|
+
const since = flagValue(parsed, "--since");
|
|
219
|
+
if (tail !== null) opts.tail = parseIntegerFlag("--tail", tail, { min: 1, max: 1000 });
|
|
220
|
+
if (since !== null) opts.since = parseIntegerFlag("--since", since, { min: 0 });
|
|
221
|
+
|
|
222
|
+
try {
|
|
223
|
+
const result = await getSdk().jobs.logs(projectId, jobId, opts);
|
|
224
|
+
console.log(JSON.stringify(result, null, 2));
|
|
225
|
+
} catch (err) {
|
|
226
|
+
reportSdkError(err);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
async function cancel(jobId, args = []) {
|
|
231
|
+
const parsed = normalizeArgv(args);
|
|
232
|
+
assertKnownFlags(parsed, ["--project", "--help", "-h"], PROJECT_FLAGS);
|
|
233
|
+
if (!jobId) {
|
|
234
|
+
fail({
|
|
235
|
+
code: "BAD_USAGE",
|
|
236
|
+
message: "Missing job_id.",
|
|
237
|
+
hint: "Use `run402 jobs cancel <job_id>`.",
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
requirePositionalCount(parsed, PROJECT_FLAGS, {
|
|
241
|
+
max: 0,
|
|
242
|
+
command: "run402 jobs cancel <job_id>",
|
|
243
|
+
});
|
|
244
|
+
const projectId = resolveProjectId(flagValue(parsed, "--project"));
|
|
245
|
+
|
|
246
|
+
try {
|
|
247
|
+
const result = await getSdk().jobs.cancel(projectId, jobId);
|
|
248
|
+
console.log(JSON.stringify(result, null, 2));
|
|
249
|
+
} catch (err) {
|
|
250
|
+
reportSdkError(err);
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
function splitJobIdArg(args = [], valueFlags = []) {
|
|
255
|
+
const flagsWithValues = new Set(valueFlags);
|
|
256
|
+
for (let i = 0; i < args.length; i += 1) {
|
|
257
|
+
const arg = args[i];
|
|
258
|
+
if (flagsWithValues.has(arg)) {
|
|
259
|
+
i += 1;
|
|
260
|
+
continue;
|
|
261
|
+
}
|
|
262
|
+
if (typeof arg === "string" && arg.startsWith("-")) continue;
|
|
263
|
+
return {
|
|
264
|
+
jobId: arg,
|
|
265
|
+
rest: [...args.slice(0, i), ...args.slice(i + 1)],
|
|
266
|
+
};
|
|
267
|
+
}
|
|
268
|
+
return { jobId: undefined, rest: args };
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
export async function run(sub, args = []) {
|
|
272
|
+
if (!sub || sub === "--help" || sub === "-h") {
|
|
273
|
+
console.log(HELP);
|
|
274
|
+
process.exit(0);
|
|
275
|
+
}
|
|
276
|
+
if (Array.isArray(args) && (args.includes("--help") || args.includes("-h"))) {
|
|
277
|
+
console.log(SUB_HELP[sub] || HELP);
|
|
278
|
+
process.exit(0);
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
switch (sub) {
|
|
282
|
+
case "submit":
|
|
283
|
+
await submit(args);
|
|
284
|
+
break;
|
|
285
|
+
case "get": {
|
|
286
|
+
const parsed = normalizeArgv(args);
|
|
287
|
+
const { jobId, rest } = splitJobIdArg(parsed, PROJECT_FLAGS);
|
|
288
|
+
await get(jobId, rest);
|
|
289
|
+
break;
|
|
290
|
+
}
|
|
291
|
+
case "logs": {
|
|
292
|
+
const parsed = normalizeArgv(args);
|
|
293
|
+
const { jobId, rest } = splitJobIdArg(parsed, ["--project", "--tail", "--since"]);
|
|
294
|
+
await logs(jobId, rest);
|
|
295
|
+
break;
|
|
296
|
+
}
|
|
297
|
+
case "cancel": {
|
|
298
|
+
const parsed = normalizeArgv(args);
|
|
299
|
+
const { jobId, rest } = splitJobIdArg(parsed, PROJECT_FLAGS);
|
|
300
|
+
await cancel(jobId, rest);
|
|
301
|
+
break;
|
|
302
|
+
}
|
|
303
|
+
default:
|
|
304
|
+
console.error(`Unknown subcommand: ${sub}\n`);
|
|
305
|
+
console.log(HELP);
|
|
306
|
+
process.exit(1);
|
|
307
|
+
}
|
|
308
|
+
}
|
package/package.json
CHANGED
package/sdk/dist/index.d.ts
CHANGED
|
@@ -26,6 +26,7 @@ import { Contracts } from "./namespaces/contracts.js";
|
|
|
26
26
|
import { Admin } from "./namespaces/admin.js";
|
|
27
27
|
import { Deploy } from "./namespaces/deploy.js";
|
|
28
28
|
import { Ci } from "./namespaces/ci.js";
|
|
29
|
+
import { Jobs } from "./namespaces/jobs.js";
|
|
29
30
|
import type { ContentSource, FileSet } from "./namespaces/deploy.types.js";
|
|
30
31
|
import { ScopedRun402 } from "./scoped.js";
|
|
31
32
|
export interface Run402Options {
|
|
@@ -70,6 +71,7 @@ export declare class Run402 {
|
|
|
70
71
|
*/
|
|
71
72
|
readonly _applyEngine: Deploy;
|
|
72
73
|
readonly ci: Ci;
|
|
74
|
+
readonly jobs: Jobs;
|
|
73
75
|
constructor(opts: Run402Options);
|
|
74
76
|
/**
|
|
75
77
|
* Return a project-scoped sub-client where every project-id-bearing namespace
|
|
@@ -151,6 +153,7 @@ export type { ByteReader } from "./namespaces/deploy.js";
|
|
|
151
153
|
export type * from "./namespaces/domains.js";
|
|
152
154
|
export type * from "./namespaces/email.js";
|
|
153
155
|
export type * from "./namespaces/functions.types.js";
|
|
156
|
+
export type * from "./namespaces/jobs.js";
|
|
154
157
|
export type * from "./namespaces/projects.types.js";
|
|
155
158
|
export type * from "./namespaces/secrets.js";
|
|
156
159
|
export type * from "./namespaces/sender-domain.js";
|
package/sdk/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AACxC,OAAO,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,MAAM,WAAW,aAAa;IAC5B,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,WAAW,EAAE,mBAAmB,CAAC;IACjC;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAED,qBAAa,MAAM;;IACjB,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;IAChB,QAAQ,CAAC,KAAK,EAAG,EAAE,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,YAAY,EAAE,YAAY,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/sdk/dist/index.js
CHANGED
|
@@ -26,6 +26,7 @@ import { Contracts } from "./namespaces/contracts.js";
|
|
|
26
26
|
import { Admin } from "./namespaces/admin.js";
|
|
27
27
|
import { Deploy } from "./namespaces/deploy.js";
|
|
28
28
|
import { Ci } from "./namespaces/ci.js";
|
|
29
|
+
import { Jobs } from "./namespaces/jobs.js";
|
|
29
30
|
import { ScopedRun402 } from "./scoped.js";
|
|
30
31
|
import { LocalError } from "./errors.js";
|
|
31
32
|
export class Run402 {
|
|
@@ -57,6 +58,7 @@ export class Run402 {
|
|
|
57
58
|
*/
|
|
58
59
|
_applyEngine;
|
|
59
60
|
ci;
|
|
61
|
+
jobs;
|
|
60
62
|
#client;
|
|
61
63
|
constructor(opts) {
|
|
62
64
|
if (!opts || typeof opts !== "object") {
|
|
@@ -103,6 +105,7 @@ export class Run402 {
|
|
|
103
105
|
this.admin = new Admin(client);
|
|
104
106
|
this._applyEngine = new Deploy(client);
|
|
105
107
|
this.ci = new Ci(client);
|
|
108
|
+
this.jobs = new Jobs(client);
|
|
106
109
|
}
|
|
107
110
|
/**
|
|
108
111
|
* Return a project-scoped sub-client where every project-id-bearing namespace
|
package/sdk/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAkC,MAAM,aAAa,CAAC;AAE1E,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAC7D,OAAO,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAClD,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,EAAE,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../src/namespaces/assets.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C,OAAO,KAAK,EAGV,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,cAAc,EACd,aAAa,EACb,aAAa,EACb,eAAe,EACf,cAAc,EACd,yBAAyB,EACzB,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"assets.d.ts","sourceRoot":"","sources":["../../src/namespaces/assets.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG3C,OAAO,KAAK,EAGV,oBAAoB,EACpB,aAAa,EACb,YAAY,EACZ,cAAc,EACd,aAAa,EACb,aAAa,EACb,eAAe,EACf,cAAc,EACd,yBAAyB,EACzB,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAoY3B,qBAAa,MAAM;IACL,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,MAAM;IAE3C;;;;;;;;;;OAUG;IACG,GAAG,CACP,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,aAAa,EACrB,IAAI,GAAE,cAAmB,GACxB,OAAO,CAAC,aAAa,CAAC;IAiHzB;;;;;;;OAOG;IACG,iBAAiB,CACrB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC,oBAAoB,CAAC;IAShC;;OAEG;IACG,gBAAgB,CACpB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,sBAAsB,CAAC;IAQlC;;OAEG;IACG,qBAAqB,CACzB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EACjB,KAAK,GAAE,yBAA8B,EACrC,MAAM,GAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAO,GACpC,OAAO,CAAC,wBAAwB,CAAC;IAQpC;;;;;;;;;;;;;;;;;;;OAmBG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAchF;;;;;;;;;;;;;;;;;OAiBG;IACG,SAAS,CACb,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,mBAAmB,CAAC;IA6C/B;;;;;;;OAOG;IACG,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IAuB5D,oDAAoD;IAC9C,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,CAAC;IAwB5E,+DAA+D;IACzD,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAcvD,6FAA6F;IACvF,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,GAAE,eAAoB,GAAG,OAAO,CAAC,cAAc,CAAC;CAwBhG"}
|
|
@@ -140,6 +140,26 @@ function buildAssetRef(resp, contentType) {
|
|
|
140
140
|
}
|
|
141
141
|
return { url: cdnUrl, sri };
|
|
142
142
|
}
|
|
143
|
+
// v1.49+ image-variant convenience computation. The gateway signals
|
|
144
|
+
// "this is an image" by populating `variant_spec_version` (always) or
|
|
145
|
+
// `width_px` (always for image MIMEs, even sub-320). For non-images both
|
|
146
|
+
// are absent. We thread this signal into `thumbUrl` / `displayUrl` so
|
|
147
|
+
// TypeScript narrows correctly: non-image refs return `undefined` from
|
|
148
|
+
// both getters and a picker can't accidentally `<img src={pdfRef.thumbUrl}>`.
|
|
149
|
+
const isImage = resp.variant_spec_version !== undefined || resp.width_px !== undefined;
|
|
150
|
+
// Source dimensions are display-oriented (gateway runs EXIF auto-rotate).
|
|
151
|
+
const widthPx = resp.width_px;
|
|
152
|
+
const heightPx = resp.height_px;
|
|
153
|
+
const variants = resp.variants;
|
|
154
|
+
// For non-HEIC images, gateway sets display_url === cdn_url. For HEIC it
|
|
155
|
+
// points to the JPEG transcode. For sub-320 images that have no `variants`,
|
|
156
|
+
// display_url is still populated.
|
|
157
|
+
const displayUrl = isImage
|
|
158
|
+
? resp.display_url ?? resp.cdn_url ?? undefined
|
|
159
|
+
: undefined;
|
|
160
|
+
const thumbUrl = isImage
|
|
161
|
+
? variants?.thumb?.cdn_url ?? displayUrl
|
|
162
|
+
: undefined;
|
|
143
163
|
return {
|
|
144
164
|
key: resp.key,
|
|
145
165
|
size_bytes: resp.size_bytes,
|
|
@@ -158,6 +178,22 @@ function buildAssetRef(resp, contentType) {
|
|
|
158
178
|
contentDigest,
|
|
159
179
|
cacheKind,
|
|
160
180
|
cdn,
|
|
181
|
+
// v1.49+ image-variant fields. Only set when present on the wire — we
|
|
182
|
+
// intentionally omit (vs. setting to `undefined` explicitly) so the
|
|
183
|
+
// shape is byte-identical to pre-v1.49 for non-images.
|
|
184
|
+
...(resp.width_px !== undefined ? { width_px: resp.width_px } : {}),
|
|
185
|
+
...(resp.height_px !== undefined ? { height_px: resp.height_px } : {}),
|
|
186
|
+
...(resp.blurhash !== undefined ? { blurhash: resp.blurhash } : {}),
|
|
187
|
+
...(resp.variant_spec_version !== undefined
|
|
188
|
+
? { variant_spec_version: resp.variant_spec_version }
|
|
189
|
+
: {}),
|
|
190
|
+
...(resp.display_url !== undefined ? { display_url: resp.display_url } : {}),
|
|
191
|
+
...(resp.display_immutable_url !== undefined
|
|
192
|
+
? { display_immutable_url: resp.display_immutable_url }
|
|
193
|
+
: {}),
|
|
194
|
+
...(variants !== undefined ? { variants } : {}),
|
|
195
|
+
...(thumbUrl !== undefined ? { thumbUrl } : {}),
|
|
196
|
+
...(displayUrl !== undefined ? { displayUrl } : {}),
|
|
161
197
|
scriptTag(opts) {
|
|
162
198
|
// Default `defer: true` — modern best practice. Defer prevents
|
|
163
199
|
// render-blocking when placed in <head> and is a no-op when placed
|
|
@@ -205,9 +241,82 @@ function buildAssetRef(resp, contentType) {
|
|
|
205
241
|
// so it's still stable across re-deploys. Agents who need
|
|
206
242
|
// byte-level integrity for images should verify Content-Digest
|
|
207
243
|
// server-side.
|
|
208
|
-
|
|
244
|
+
//
|
|
245
|
+
// v1.49+ HEIC handling: when the source is HEIC/HEIF, `cdn_url`
|
|
246
|
+
// serves the original (unrenderable) HEIC bytes and `display_url`
|
|
247
|
+
// serves a generated JPEG transcode. We default `<img src>` to
|
|
248
|
+
// `display_url ?? cdn_url` so HEIC uploads render without the
|
|
249
|
+
// caller knowing about it. For non-HEIC images `display_url ===
|
|
250
|
+
// cdn_url`, so this is a no-op there.
|
|
251
|
+
const { url: immutableCdnUrl } = requireImmutable("imgTag");
|
|
252
|
+
const src = displayUrl ?? immutableCdnUrl;
|
|
209
253
|
const a = alt ?? "";
|
|
210
|
-
|
|
254
|
+
const attrs = [`src="${escapeHtmlAttr(src)}"`, `alt="${escapeHtmlAttr(a)}"`];
|
|
255
|
+
// v1.49+ width/height emission. When both dimensions are known
|
|
256
|
+
// the browser reserves layout space and avoids Cumulative Layout
|
|
257
|
+
// Shift. Skip silently when either is missing (non-image, sub-320
|
|
258
|
+
// pre-v1.49 source, etc.) — `imgTag` never errors on absence.
|
|
259
|
+
if (widthPx !== undefined && heightPx !== undefined) {
|
|
260
|
+
attrs.push(`width="${widthPx}"`);
|
|
261
|
+
attrs.push(`height="${heightPx}"`);
|
|
262
|
+
}
|
|
263
|
+
attrs.push(`loading="lazy"`, `decoding="async"`);
|
|
264
|
+
return `<img ${attrs.join(" ")}>`;
|
|
265
|
+
},
|
|
266
|
+
imgTagWithSrcSet(opts) {
|
|
267
|
+
// Hard guard #1: opts.sizes must be a non-empty string. Without
|
|
268
|
+
// it, browsers conservatively download the largest candidate in
|
|
269
|
+
// srcset (defeating the variant set). Default-to-100vw would be
|
|
270
|
+
// wrong for any grid layout, so we throw and force the caller to
|
|
271
|
+
// think about sizes once instead of shipping a silent footgun.
|
|
272
|
+
if (!opts ||
|
|
273
|
+
typeof opts.sizes !== "string" ||
|
|
274
|
+
opts.sizes.trim() === "") {
|
|
275
|
+
throw new LocalError(`imgTagWithSrcSet requires opts.sizes (e.g. '(max-width: 800px) 100vw, 1920px') — browsers over-fetch the largest srcset candidate without it.`, "rendering responsive image");
|
|
276
|
+
}
|
|
277
|
+
// Hard guard #2: variants must include all three WebP sizes.
|
|
278
|
+
// Non-image refs, sub-320 images, and pre-v1.49 uploads land here
|
|
279
|
+
// with `variants` undefined or missing one of the three. Silent
|
|
280
|
+
// fallback would render a busted layout (no srcset, no responsive
|
|
281
|
+
// benefit) with no diagnostic, so we throw and tell the caller to
|
|
282
|
+
// use `imgTag()` instead.
|
|
283
|
+
const thumb = variants?.thumb;
|
|
284
|
+
const medium = variants?.medium;
|
|
285
|
+
const large = variants?.large;
|
|
286
|
+
if (!thumb || !medium || !large) {
|
|
287
|
+
throw new LocalError(`imgTagWithSrcSet called on an AssetRef without variants. Variants are generated only for image MIMEs ≥320×320 against a v1.49+ gateway. Use imgTag() instead for non-image refs, sub-320 images, or older gateway responses.`, "rendering responsive image");
|
|
288
|
+
}
|
|
289
|
+
// The <img> fallback must use display_url for HEIC sources
|
|
290
|
+
// (browsers can't render HEIC bytes). For non-HEIC images
|
|
291
|
+
// display_url === cdn_url. cdnUrl from the AssetRef widening is
|
|
292
|
+
// the immutable form; here we prefer display_url which the
|
|
293
|
+
// gateway already pinned to the right variant.
|
|
294
|
+
const fallbackSrc = displayUrl ?? cdnUrl ?? "";
|
|
295
|
+
const altAttr = `alt="${escapeHtmlAttr(opts.alt ?? "")}"`;
|
|
296
|
+
const loadingAttr = `loading="${opts.loading === "eager" ? "eager" : "lazy"}"`;
|
|
297
|
+
const srcset = [
|
|
298
|
+
`${thumb.cdn_url} ${thumb.width_px}w`,
|
|
299
|
+
`${medium.cdn_url} ${medium.width_px}w`,
|
|
300
|
+
`${large.cdn_url} ${large.width_px}w`,
|
|
301
|
+
].join(", ");
|
|
302
|
+
const sizes = opts.sizes;
|
|
303
|
+
const imgAttrs = [
|
|
304
|
+
`src="${escapeHtmlAttr(fallbackSrc)}"`,
|
|
305
|
+
altAttr,
|
|
306
|
+
];
|
|
307
|
+
// AVIF deferred from v1: <picture> picks sources by type
|
|
308
|
+
// precedence, not best size. A single 1920w AVIF would be picked
|
|
309
|
+
// for thumbnails by AVIF-capable browsers, defeating the variant
|
|
310
|
+
// set. AVIF, if it returns, will land at all three sizes or via
|
|
311
|
+
// a dedicated imgTagHero() helper.
|
|
312
|
+
if (widthPx !== undefined && heightPx !== undefined) {
|
|
313
|
+
imgAttrs.push(`width="${widthPx}"`);
|
|
314
|
+
imgAttrs.push(`height="${heightPx}"`);
|
|
315
|
+
}
|
|
316
|
+
imgAttrs.push(loadingAttr, `decoding="async"`);
|
|
317
|
+
const sourceLine = `<source type="image/webp" srcset="${escapeHtmlAttr(srcset)}" sizes="${escapeHtmlAttr(sizes)}">`;
|
|
318
|
+
const imgLine = `<img ${imgAttrs.join(" ")}>`;
|
|
319
|
+
return `<picture>${sourceLine}${imgLine}</picture>`;
|
|
211
320
|
},
|
|
212
321
|
};
|
|
213
322
|
}
|
|
@@ -292,6 +401,11 @@ export class Assets {
|
|
|
292
401
|
// Widen AssetManifestEntry → BlobPutResult (AssetRef shape with
|
|
293
402
|
// scriptTag/linkTag/imgTag emitters). The integrity fields and CDN
|
|
294
403
|
// envelope are derived from the same SHA the gateway resolved.
|
|
404
|
+
// v1.49+: image-variant fields (width_px/height_px/blurhash/variants/
|
|
405
|
+
// display_url/display_immutable_url/variant_spec_version) are
|
|
406
|
+
// threaded through `AssetManifestEntry` by
|
|
407
|
+
// `buildAssetManifestFromPlanEntries` in deploy.ts. They're optional
|
|
408
|
+
// and absent for non-image MIMEs.
|
|
295
409
|
const sha = entry.sha256;
|
|
296
410
|
const completion = {
|
|
297
411
|
key: entry.key,
|
|
@@ -304,6 +418,19 @@ export class Assets {
|
|
|
304
418
|
cdn_url: entry.cdn_url,
|
|
305
419
|
cdn_immutable_url: entry.cdn_immutable_url,
|
|
306
420
|
immutable_suffix: null,
|
|
421
|
+
// v1.49+ image-variant pass-through. Only set when present so the
|
|
422
|
+
// shape stays bytewise-identical to pre-v1.49 for non-images.
|
|
423
|
+
...(entry.width_px !== undefined ? { width_px: entry.width_px } : {}),
|
|
424
|
+
...(entry.height_px !== undefined ? { height_px: entry.height_px } : {}),
|
|
425
|
+
...(entry.blurhash !== undefined ? { blurhash: entry.blurhash } : {}),
|
|
426
|
+
...(entry.variant_spec_version !== undefined
|
|
427
|
+
? { variant_spec_version: entry.variant_spec_version }
|
|
428
|
+
: {}),
|
|
429
|
+
...(entry.display_url !== undefined ? { display_url: entry.display_url } : {}),
|
|
430
|
+
...(entry.display_immutable_url !== undefined
|
|
431
|
+
? { display_immutable_url: entry.display_immutable_url }
|
|
432
|
+
: {}),
|
|
433
|
+
...(entry.variants !== undefined ? { variants: entry.variants } : {}),
|
|
307
434
|
};
|
|
308
435
|
return buildAssetRef(completion, contentType);
|
|
309
436
|
}
|