@run402/sdk 2.3.1 → 2.4.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/dist/errors.d.ts +13 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +25 -2
- package/dist/errors.js.map +1 -1
- package/dist/namespaces/assets-validation.d.ts +33 -0
- package/dist/namespaces/assets-validation.d.ts.map +1 -0
- package/dist/namespaces/assets-validation.js +133 -0
- package/dist/namespaces/assets-validation.js.map +1 -0
- package/dist/namespaces/assets.d.ts +3 -1
- package/dist/namespaces/assets.d.ts.map +1 -1
- package/dist/namespaces/assets.js +52 -1
- package/dist/namespaces/assets.js.map +1 -1
- package/dist/namespaces/assets.types.d.ts +113 -1
- package/dist/namespaces/assets.types.d.ts.map +1 -1
- package/dist/namespaces/assets.types.js +18 -1
- package/dist/namespaces/assets.types.js.map +1 -1
- package/dist/namespaces/deploy.d.ts.map +1 -1
- package/dist/namespaces/deploy.js +52 -14
- package/dist/namespaces/deploy.js.map +1 -1
- package/dist/namespaces/deploy.types.d.ts +28 -0
- package/dist/namespaces/deploy.types.d.ts.map +1 -1
- package/dist/namespaces/deploy.types.js.map +1 -1
- package/dist/node/assets-node.d.ts +12 -0
- package/dist/node/assets-node.d.ts.map +1 -1
- package/dist/node/assets-node.js +47 -2
- package/dist/node/assets-node.js.map +1 -1
- package/package.json +1 -1
|
@@ -6,6 +6,27 @@
|
|
|
6
6
|
* `DELETE /storage/v1/blob/:key`, `POST /storage/v1/blob/:key/sign`.
|
|
7
7
|
*/
|
|
8
8
|
export type BlobVisibility = "public" | "private";
|
|
9
|
+
/**
|
|
10
|
+
* v1.50: caller-provided asset metadata. Flat, scalar-or-string-array leaves
|
|
11
|
+
* only; total serialized size ≤ 4 KB. Nested objects / unknown leaf shapes are
|
|
12
|
+
* rejected client-side with `INVALID_ASSET_METADATA` before any HTTP call.
|
|
13
|
+
*/
|
|
14
|
+
export type AssetMetadataValue = string | number | boolean | string[];
|
|
15
|
+
export type AssetMetadata = Record<string, AssetMetadataValue>;
|
|
16
|
+
/**
|
|
17
|
+
* v1.50: EXIF retention policy applied to image uploads. `"keep"` preserves
|
|
18
|
+
* caller-supplied EXIF (default; same as historical behavior); `"strip"`
|
|
19
|
+
* directs the gateway to discard EXIF from the stored bytes and the
|
|
20
|
+
* `image_exif` field returned by `assets.ls` / `assets.put`.
|
|
21
|
+
*/
|
|
22
|
+
export type ExifPolicy = "keep" | "strip";
|
|
23
|
+
/**
|
|
24
|
+
* v1.50: extracted intrinsic image format. `null` for non-image uploads. The
|
|
25
|
+
* gateway populates this only when the source MIME (or sniffed signature)
|
|
26
|
+
* matches a known image codec. Unknown formats fail the upload with HTTP 422
|
|
27
|
+
* `IMAGE_DECODE_FAILED` (no partial row is written).
|
|
28
|
+
*/
|
|
29
|
+
export type AssetImageFormat = "jpeg" | "png" | "webp" | "avif" | "heic" | "tiff" | "svg" | "bmp";
|
|
9
30
|
/**
|
|
10
31
|
* Source for an upload.
|
|
11
32
|
*
|
|
@@ -44,6 +65,20 @@ export interface BlobPutOptions {
|
|
|
44
65
|
* and the tag emitters throw with an "immutable: true required" hint.
|
|
45
66
|
*/
|
|
46
67
|
immutable?: boolean;
|
|
68
|
+
/**
|
|
69
|
+
* v1.50: caller-provided metadata stored alongside the asset row. Flat
|
|
70
|
+
* object with `string | number | boolean | string[]` leaves; ≤4 KB
|
|
71
|
+
* serialized. Nested objects, undefined-leaf values, or non-allowed leaf
|
|
72
|
+
* types are rejected client-side with `INVALID_ASSET_METADATA` before any
|
|
73
|
+
* HTTP call. The same `code` is returned by the gateway if a server-side
|
|
74
|
+
* check rejects a structurally valid value (HTTP 400).
|
|
75
|
+
*/
|
|
76
|
+
metadata?: AssetMetadata;
|
|
77
|
+
/**
|
|
78
|
+
* v1.50: EXIF retention policy. Default `"keep"`. Invalid values are
|
|
79
|
+
* rejected client-side with `INVALID_EXIF_POLICY` before any HTTP call.
|
|
80
|
+
*/
|
|
81
|
+
exifPolicy?: ExifPolicy;
|
|
47
82
|
}
|
|
48
83
|
/** One presigned upload part returned by the Run402 blob upload session API. */
|
|
49
84
|
export interface BlobUploadPart {
|
|
@@ -352,6 +387,24 @@ export interface AssetRef {
|
|
|
352
387
|
/** Default `"lazy"`. Pass `"eager"` for above-the-fold heroes. */
|
|
353
388
|
loading?: "lazy" | "eager";
|
|
354
389
|
}): string;
|
|
390
|
+
/** Caller-supplied flat metadata (≤4 KB serialized; leaves are
|
|
391
|
+
* `string | number | boolean | string[]`). `null` when no metadata was
|
|
392
|
+
* set on the upload. */
|
|
393
|
+
metadata: AssetMetadata | null;
|
|
394
|
+
/** Decoded image format (`jpeg`/`png`/`webp`/`avif`/`heic`/`tiff`/`svg`/
|
|
395
|
+
* `bmp`). `null` for non-image uploads. */
|
|
396
|
+
image_format: string | null;
|
|
397
|
+
/** Server-extracted intrinsic image info. Known keys: `has_alpha`,
|
|
398
|
+
* `color_space`, `animated`, `frame_count`, `bit_depth`, `orientation`.
|
|
399
|
+
* Future gateway versions may emit additional keys — treat as opaque. */
|
|
400
|
+
image_info: Record<string, unknown> | null;
|
|
401
|
+
/** Server-extracted EXIF block. `null` for non-image uploads, for images
|
|
402
|
+
* whose EXIF was stripped (`image_exif_policy: "strip"`), and for image
|
|
403
|
+
* formats that do not carry EXIF (e.g. SVG, BMP). */
|
|
404
|
+
image_exif: Record<string, unknown> | null;
|
|
405
|
+
/** Echo of the EXIF policy actually applied to the stored bytes. `null`
|
|
406
|
+
* for non-image uploads. */
|
|
407
|
+
image_exif_policy: ExifPolicy | null;
|
|
355
408
|
}
|
|
356
409
|
/**
|
|
357
410
|
* Return type of `client.blobs.put`. v1.45 widens this to AssetRef; the
|
|
@@ -422,13 +475,55 @@ export interface BlobWaitFreshResult {
|
|
|
422
475
|
elapsedMs: number;
|
|
423
476
|
vantage: "gateway-us-east-1";
|
|
424
477
|
}
|
|
478
|
+
/**
|
|
479
|
+
* v1.50: sort key for {@link BlobLsOptions.sort}. Cursor semantics differ
|
|
480
|
+
* per sort — the gateway returns a sort-pinned cursor that cannot be reused
|
|
481
|
+
* with a different `sort` value (HTTP 400 `INVALID_CURSOR_FOR_SORT`).
|
|
482
|
+
*/
|
|
483
|
+
export type AssetSortKey = "key:asc" | "createdAt:asc" | "createdAt:desc";
|
|
484
|
+
/**
|
|
485
|
+
* v1.50: media-picker filter keys for {@link BlobLsOptions.filter}. All
|
|
486
|
+
* snake_case to match the wire-level query parameters. Unknown keys are
|
|
487
|
+
* rejected client-side with `INVALID_FILTER_KEY` before any HTTP call.
|
|
488
|
+
*/
|
|
489
|
+
export interface AssetFilter {
|
|
490
|
+
/** Match `uploaded_by` exactly. */
|
|
491
|
+
uploaded_by?: string;
|
|
492
|
+
/** Match a metadata `tags` array element (case-sensitive). */
|
|
493
|
+
tag?: string;
|
|
494
|
+
/** Match the decoded image format exactly (e.g. `"webp"`). */
|
|
495
|
+
format?: string;
|
|
496
|
+
/** Restrict to image uploads (`image_format` non-null) when true; to
|
|
497
|
+
* non-image uploads when false. Omit to include both. */
|
|
498
|
+
is_image?: boolean;
|
|
499
|
+
/** Width range filter, inclusive. */
|
|
500
|
+
min_width?: number;
|
|
501
|
+
max_width?: number;
|
|
502
|
+
/** Height range filter, inclusive. */
|
|
503
|
+
min_height?: number;
|
|
504
|
+
max_height?: number;
|
|
505
|
+
}
|
|
506
|
+
/** v1.50: documented filter keys. Used by the client-side validator to
|
|
507
|
+
* reject unknown keys before any HTTP call. */
|
|
508
|
+
export declare const ASSET_FILTER_KEYS: ReadonlySet<string>;
|
|
509
|
+
/** v1.50: documented sort keys. */
|
|
510
|
+
export declare const ASSET_SORT_KEYS: ReadonlyArray<AssetSortKey>;
|
|
425
511
|
export interface BlobLsOptions {
|
|
426
512
|
/** Filter: only return blobs whose key starts with this prefix. */
|
|
427
513
|
prefix?: string;
|
|
428
514
|
/** Max results. Server default 100, max 1000. */
|
|
429
515
|
limit?: number;
|
|
430
|
-
/** Pagination cursor from a previous response's `next_cursor`.
|
|
516
|
+
/** Pagination cursor from a previous response's `next_cursor`. Cursor
|
|
517
|
+
* is sort-pinned (v1.50): reusing a `createdAt:*` cursor with `key:asc`
|
|
518
|
+
* (or vice versa) returns HTTP 400 `INVALID_CURSOR_FOR_SORT`. */
|
|
431
519
|
cursor?: string;
|
|
520
|
+
/** v1.50: sort key. Default `"key:asc"` (legacy bare-key cursor). The
|
|
521
|
+
* `createdAt:*` variants use a base64url JSON cursor `{s, ts, key}`.
|
|
522
|
+
* Invalid values are rejected client-side with `INVALID_SORT`. */
|
|
523
|
+
sort?: AssetSortKey;
|
|
524
|
+
/** v1.50: media-picker filter. Unknown keys are rejected client-side
|
|
525
|
+
* with `INVALID_FILTER_KEY` before any HTTP call. */
|
|
526
|
+
filter?: AssetFilter;
|
|
432
527
|
}
|
|
433
528
|
export interface BlobSummary {
|
|
434
529
|
key: string;
|
|
@@ -436,6 +531,23 @@ export interface BlobSummary {
|
|
|
436
531
|
content_type: string | null;
|
|
437
532
|
visibility: BlobVisibility;
|
|
438
533
|
created_at: string;
|
|
534
|
+
/** Caller-supplied flat metadata. `null` when no metadata was set. */
|
|
535
|
+
metadata?: AssetMetadata | null;
|
|
536
|
+
/** Decoded image format. `null` for non-image rows. */
|
|
537
|
+
image_format?: string | null;
|
|
538
|
+
/** Server-extracted intrinsic image info. `null` for non-image rows. */
|
|
539
|
+
image_info?: Record<string, unknown> | null;
|
|
540
|
+
/** Server-extracted EXIF block. `null` for non-image rows, stripped EXIF,
|
|
541
|
+
* and image formats that do not carry EXIF. */
|
|
542
|
+
image_exif?: Record<string, unknown> | null;
|
|
543
|
+
/** Echo of the EXIF policy actually applied. `null` for non-image rows. */
|
|
544
|
+
image_exif_policy?: ExifPolicy | null;
|
|
545
|
+
/** v1.49+: display-oriented pixel width when known. */
|
|
546
|
+
width_px?: number;
|
|
547
|
+
/** v1.49+: display-oriented pixel height when known. */
|
|
548
|
+
height_px?: number;
|
|
549
|
+
/** v1.49+: LQIP blurhash when known. */
|
|
550
|
+
blurhash?: string;
|
|
439
551
|
}
|
|
440
552
|
export interface BlobLsResult {
|
|
441
553
|
blobs: BlobSummary[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets.types.d.ts","sourceRoot":"","sources":["../../src/namespaces/assets.types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,SAAS,CAAC;AAElD;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,UAAU,GACV;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,KAAK,CAAA;CAAE,GAClC;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,OAAO,CAAC,EAAE,KAAK,CAAA;CAAE,CAAC;AAE3C,MAAM,WAAW,cAAc;IAC7B,oEAAoE;IACpE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"assets.types.d.ts","sourceRoot":"","sources":["../../src/namespaces/assets.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,5 +5,22 @@
|
|
|
5
5
|
* multipart S3 uploads, `GET /storage/v1/blob/:key`, `GET /storage/v1/blobs`,
|
|
6
6
|
* `DELETE /storage/v1/blob/:key`, `POST /storage/v1/blob/:key/sign`.
|
|
7
7
|
*/
|
|
8
|
-
|
|
8
|
+
/** v1.50: documented filter keys. Used by the client-side validator to
|
|
9
|
+
* reject unknown keys before any HTTP call. */
|
|
10
|
+
export const ASSET_FILTER_KEYS = new Set([
|
|
11
|
+
"uploaded_by",
|
|
12
|
+
"tag",
|
|
13
|
+
"format",
|
|
14
|
+
"is_image",
|
|
15
|
+
"min_width",
|
|
16
|
+
"max_width",
|
|
17
|
+
"min_height",
|
|
18
|
+
"max_height",
|
|
19
|
+
]);
|
|
20
|
+
/** v1.50: documented sort keys. */
|
|
21
|
+
export const ASSET_SORT_KEYS = [
|
|
22
|
+
"key:asc",
|
|
23
|
+
"createdAt:asc",
|
|
24
|
+
"createdAt:desc",
|
|
25
|
+
];
|
|
9
26
|
//# sourceMappingURL=assets.types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assets.types.js","sourceRoot":"","sources":["../../src/namespaces/assets.types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
1
|
+
{"version":3,"file":"assets.types.js","sourceRoot":"","sources":["../../src/namespaces/assets.types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA0iBH;gDACgD;AAChD,MAAM,CAAC,MAAM,iBAAiB,GAAwB,IAAI,GAAG,CAAC;IAC5D,aAAa;IACb,KAAK;IACL,QAAQ;IACR,UAAU;IACV,WAAW;IACX,WAAW;IACX,YAAY;IACZ,YAAY;CACb,CAAC,CAAC;AAEH,mCAAmC;AACnC,MAAM,CAAC,MAAM,eAAe,GAAgC;IAC1D,SAAS;IACT,eAAe;IACf,gBAAgB;CACjB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/namespaces/deploy.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAiB3C,OAAO,KAAK,EACV,YAAY,EACZ,sBAAsB,EAQtB,WAAW,EACX,oBAAoB,EAEpB,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,YAAY,EACZ,oBAAoB,EACpB,qBAAqB,EAYrB,iBAAiB,EAGjB,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,2BAA2B,EAC3B,uBAAuB,EACvB,WAAW,EACX,oBAAoB,EACpB,YAAY,EAEb,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"deploy.d.ts","sourceRoot":"","sources":["../../src/namespaces/deploy.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,6 +22,7 @@ import { isCiSessionCredentials } from "../ci-credentials.js";
|
|
|
22
22
|
import { assertCiDeployableSpec } from "./ci.js";
|
|
23
23
|
import { ROUTE_HTTP_METHODS, normalizeDeployResolveRequest, } from "./deploy.types.js";
|
|
24
24
|
import { ApiError, LocalError, NetworkError, PaymentRequired, Run402DeployError, Unauthorized, } from "../errors.js";
|
|
25
|
+
import { assertAssetMetadata, assertExifPolicy, } from "./assets-validation.js";
|
|
25
26
|
// ─── Constants ───────────────────────────────────────────────────────────────
|
|
26
27
|
const PLAN_BODY_LIMIT_BYTES = 5 * 1024 * 1024;
|
|
27
28
|
const COMMIT_POLL_INITIAL_MS = 1_000;
|
|
@@ -2338,6 +2339,19 @@ function buildAssetManifestFromPlanEntries(entries) {
|
|
|
2338
2339
|
}
|
|
2339
2340
|
if (ref.variants !== undefined)
|
|
2340
2341
|
e.variants = ref.variants;
|
|
2342
|
+
// v1.50 pass-through: metadata + EXIF policy + image intrinsics.
|
|
2343
|
+
// Pre-v1.50 plan responses omit them; the manifest entry stays
|
|
2344
|
+
// bytewise-identical to before for older gateways.
|
|
2345
|
+
if (ref.metadata !== undefined)
|
|
2346
|
+
e.metadata = ref.metadata;
|
|
2347
|
+
if (ref.image_format !== undefined)
|
|
2348
|
+
e.image_format = ref.image_format;
|
|
2349
|
+
if (ref.image_info !== undefined)
|
|
2350
|
+
e.image_info = ref.image_info;
|
|
2351
|
+
if (ref.image_exif !== undefined)
|
|
2352
|
+
e.image_exif = ref.image_exif;
|
|
2353
|
+
if (ref.image_exif_policy !== undefined)
|
|
2354
|
+
e.image_exif_policy = ref.image_exif_policy;
|
|
2341
2355
|
list.push(e);
|
|
2342
2356
|
byKey[entry.key] = e;
|
|
2343
2357
|
manifest[entry.key] = e;
|
|
@@ -2415,33 +2429,57 @@ async function normalizeAssetSlice(slice, remember) {
|
|
|
2415
2429
|
});
|
|
2416
2430
|
}
|
|
2417
2431
|
seenKeys.add(entry.key);
|
|
2418
|
-
|
|
2419
|
-
|
|
2420
|
-
|
|
2432
|
+
// v1.50: validate caller-supplied metadata / EXIF policy on BOTH
|
|
2433
|
+
// shapes BEFORE any HTTP traffic. Throws LocalError with the
|
|
2434
|
+
// canonical gateway code (INVALID_ASSET_METADATA / INVALID_EXIF_
|
|
2435
|
+
// POLICY) so consumers see the same `e.code` whether the rejection
|
|
2436
|
+
// was local or remote.
|
|
2437
|
+
const inputShape = isAssetPutEntryInput(entry) ? entry : null;
|
|
2438
|
+
const wireShape = inputShape ? null : entry;
|
|
2439
|
+
const callerMetadata = inputShape?.metadata ?? wireShape?.metadata;
|
|
2440
|
+
const callerExifPolicy = inputShape?.exifPolicy ?? wireShape?.exif_policy;
|
|
2441
|
+
if (callerMetadata !== undefined) {
|
|
2442
|
+
assertAssetMetadata(callerMetadata, "validating asset metadata");
|
|
2443
|
+
}
|
|
2444
|
+
if (callerExifPolicy !== undefined) {
|
|
2445
|
+
assertExifPolicy(callerExifPolicy, "validating asset EXIF policy");
|
|
2446
|
+
}
|
|
2447
|
+
if (inputShape) {
|
|
2448
|
+
const label = `assets.put[${idx}] (${inputShape.key})`;
|
|
2449
|
+
const resolved = await resolveContent(inputShape.source, label);
|
|
2421
2450
|
if (!resolved.ref.contentType) {
|
|
2422
|
-
resolved.ref.contentType =
|
|
2451
|
+
resolved.ref.contentType = inputShape.content_type ?? guessContentType(inputShape.key);
|
|
2423
2452
|
}
|
|
2424
2453
|
const ref = remember(resolved);
|
|
2425
2454
|
put.push({
|
|
2426
|
-
key:
|
|
2455
|
+
key: inputShape.key,
|
|
2427
2456
|
sha256: ref.sha256,
|
|
2428
2457
|
size_bytes: ref.size,
|
|
2429
|
-
content_type:
|
|
2430
|
-
visibility:
|
|
2431
|
-
immutable:
|
|
2458
|
+
content_type: inputShape.content_type ?? ref.contentType ?? "application/octet-stream",
|
|
2459
|
+
visibility: inputShape.visibility ?? "public",
|
|
2460
|
+
immutable: inputShape.immutable ?? true,
|
|
2461
|
+
// v1.50: thread metadata + exif_policy onto the wire-shape. The
|
|
2462
|
+
// SDK input field is camelCase (`exifPolicy`); the wire field is
|
|
2463
|
+
// snake_case (`exif_policy`).
|
|
2464
|
+
...(inputShape.metadata !== undefined ? { metadata: inputShape.metadata } : {}),
|
|
2465
|
+
...(inputShape.exifPolicy !== undefined ? { exif_policy: inputShape.exifPolicy } : {}),
|
|
2432
2466
|
});
|
|
2433
2467
|
}
|
|
2434
2468
|
else {
|
|
2435
2469
|
// Wire-shaped entry — pass through verbatim. The caller is
|
|
2436
2470
|
// responsible for ensuring the bytes are already in CAS (or will
|
|
2437
2471
|
// be uploaded out-of-band).
|
|
2472
|
+
const w = wireShape;
|
|
2438
2473
|
put.push({
|
|
2439
|
-
key:
|
|
2440
|
-
sha256:
|
|
2441
|
-
size_bytes:
|
|
2442
|
-
content_type:
|
|
2443
|
-
visibility:
|
|
2444
|
-
immutable:
|
|
2474
|
+
key: w.key,
|
|
2475
|
+
sha256: w.sha256,
|
|
2476
|
+
size_bytes: w.size_bytes,
|
|
2477
|
+
content_type: w.content_type ?? "application/octet-stream",
|
|
2478
|
+
visibility: w.visibility ?? "public",
|
|
2479
|
+
immutable: w.immutable ?? true,
|
|
2480
|
+
// v1.50 wire-shape passthrough (no camelCase conversion needed).
|
|
2481
|
+
...(w.metadata !== undefined ? { metadata: w.metadata } : {}),
|
|
2482
|
+
...(w.exif_policy !== undefined ? { exif_policy: w.exif_policy } : {}),
|
|
2445
2483
|
});
|
|
2446
2484
|
}
|
|
2447
2485
|
}
|