run402-mcp 1.69.0 → 1.69.2
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 +1 -1
- package/dist/tools/deploy-site-dir.d.ts.map +1 -1
- package/dist/tools/deploy-site-dir.js +5 -1
- package/dist/tools/deploy-site-dir.js.map +1 -1
- package/dist/tools/deploy-site.d.ts.map +1 -1
- package/dist/tools/deploy-site.js +5 -1
- package/dist/tools/deploy-site.js.map +1 -1
- package/package.json +1 -1
- package/sdk/README.md +8 -1
- package/sdk/dist/namespaces/deploy.d.ts.map +1 -1
- package/sdk/dist/namespaces/deploy.js +25 -20
- package/sdk/dist/namespaces/deploy.js.map +1 -1
- package/sdk/dist/namespaces/deploy.types.d.ts +31 -3
- package/sdk/dist/namespaces/deploy.types.d.ts.map +1 -1
- package/sdk/dist/namespaces/deploy.types.js +170 -1
- package/sdk/dist/namespaces/deploy.types.js.map +1 -1
- package/sdk/dist/node/sites-node.d.ts +8 -3
- package/sdk/dist/node/sites-node.d.ts.map +1 -1
- package/sdk/dist/node/sites-node.js +16 -2
- package/sdk/dist/node/sites-node.js.map +1 -1
- package/sdk/dist/type-contract.d.ts.map +1 -1
- package/sdk/dist/type-contract.js +18 -2
- package/sdk/dist/type-contract.js.map +1 -1
package/README.md
CHANGED
|
@@ -182,7 +182,7 @@ run402 deploy resolve --project prj_123 --url https://example.com/events?utm=x#h
|
|
|
182
182
|
run402 deploy resolve --project prj_123 --host example.com --path /events --method GET
|
|
183
183
|
```
|
|
184
184
|
|
|
185
|
-
`deploy_diagnose_url` and `r.deploy.resolve({ project, url, method: "GET" })` return `would_serve`, `diagnostic_status`, `match`, normalized request data, warnings, full resolution JSON, and next steps. When returned, `asset_path`, `reachability_authority`, and `direct` explain which release asset backs the public URL and whether reachability came from implicit file-path mode, explicit `site.public_paths`, or a route-only static alias.
|
|
185
|
+
`deploy_diagnose_url` and `r.deploy.resolve({ project, url, method: "GET" })` return `would_serve`, `diagnostic_status`, `match`, normalized request data, warnings, full resolution JSON, and next steps. When returned, `asset_path`, `reachability_authority`, and `direct` explain which release asset backs the public URL and whether reachability came from implicit file-path mode, explicit `site.public_paths`, or a route-only static alias. Stable-host diagnostics may also include `authorization_result`, `cas_object` (`sha256`, `exists`, `expected_size`, `actual_size`), hostname-specific `response_variant`, and route/static fields such as `allow`, `route_pattern`, `target_type`, `target_name`, and `target_file`. Known `match` literals are `host_missing`, `manifest_missing`, `active_release_missing`, `path_error`, `none`, `static_exact`, `static_index`, `spa_fallback`, `spa_fallback_missing`, `route_function`, `route_static_alias`, and `route_method_miss`; preserve unknown future strings. Known `authorization_result` values include `authorized`, `not_public`, `not_applicable`, `manifest_missing`, `target_missing`, `active_release_missing`, `path_error`, `missing_cas_object`, `unfinalized_or_deleting_cas_object`, `size_mismatch`, and `unauthorized_cas_object`. `result` is the diagnostic body status, not the HTTP status of the SDK call, so host misses can still be successful CLI/MCP/SDK calls with `would_serve: false`. Do not treat resolve/diagnose as a fetch, cache purge, or cache-policy oracle; route method misses should inspect `allow`, and CAS authorization/health failures should inspect or redeploy the affected static asset. Branch on structured JSON fields such as `cache_class` and preserve unknown cache classes.
|
|
186
186
|
|
|
187
187
|
Release observability exposes stable asset identity and public reachability. Inventories include `release_generation`, `static_manifest_sha256`, nullable `static_manifest_metadata` (`file_count`, `total_bytes`, `cache_classes`, `cache_class_sources`, `spa_fallback`), and `static_public_paths[]` when returned. `site.paths` lists release static assets; `static_public_paths[]` lists browser-visible public paths with `public_path`, `asset_path`, `reachability_authority`, `direct`, cache class, and content type. Plan and release diffs expose `static_assets` counters: unchanged/changed/added/removed, `newly_uploaded_cas_bytes`, `reused_cas_bytes`, `deployment_copy_bytes_eliminated`, `legacy_immutable_warnings`, `previous_immutable_failures`, and `cas_authorization_failures`.
|
|
188
188
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy-site-dir.d.ts","sourceRoot":"","sources":["../../src/tools/deploy-site-dir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"deploy-site-dir.d.ts","sourceRoot":"","sources":["../../src/tools/deploy-site-dir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAQxB,eAAO,MAAM,mBAAmB;;;;CAa/B,CAAC;AAiBF,wBAAsB,mBAAmB,CAAC,IAAI,EAAE;IAC9C,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CA+DjF"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
import { LocalError } from "../../sdk/dist/index.js";
|
|
2
3
|
import { getSdk } from "../sdk.js";
|
|
3
4
|
import { mapSdkError } from "../errors.js";
|
|
4
5
|
import { requireAllowanceAuth } from "../allowance-auth.js";
|
|
@@ -13,7 +14,7 @@ export const deploySiteDirSchema = {
|
|
|
13
14
|
target: z
|
|
14
15
|
.string()
|
|
15
16
|
.optional()
|
|
16
|
-
.describe("
|
|
17
|
+
.describe("Deprecated/unsupported: unified deploy v2 does not support deployment target labels. Passing this field returns an error."),
|
|
17
18
|
};
|
|
18
19
|
/**
|
|
19
20
|
* Render the buffered progress events as a fenced JSON code block. The agent
|
|
@@ -30,6 +31,9 @@ function renderEventsBlock(events) {
|
|
|
30
31
|
].join("\n");
|
|
31
32
|
}
|
|
32
33
|
export async function handleDeploySiteDir(args) {
|
|
34
|
+
if (args.target !== undefined) {
|
|
35
|
+
return mapSdkError(new LocalError("`target` is unsupported by unified deploy v2 and would otherwise be ignored.", "deploying site directory"), "deploying site directory");
|
|
36
|
+
}
|
|
33
37
|
const auth = requireAllowanceAuth("/deploy/v2/plans");
|
|
34
38
|
if ("error" in auth)
|
|
35
39
|
return auth.error;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy-site-dir.js","sourceRoot":"","sources":["../../src/tools/deploy-site-dir.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAG/C,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,CAAC,uCAAuC,CAAC;IACpD,GAAG,EAAE,CAAC;SACH,MAAM,EAAE;SACR,QAAQ,CACP,oQAAoQ,CACrQ;IACH,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"deploy-site-dir.js","sourceRoot":"","sources":["../../src/tools/deploy-site-dir.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy-site.d.ts","sourceRoot":"","sources":["../../src/tools/deploy-site.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"deploy-site.d.ts","sourceRoot":"","sources":["../../src/tools/deploy-site.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAOxB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;CAoB5B,CAAC;AAEF,wBAAsB,gBAAgB,CAAC,IAAI,EAAE;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjE,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAqDjF"}
|
|
@@ -2,6 +2,7 @@ import { mkdtempSync, writeFileSync, mkdirSync, rmSync } from "node:fs";
|
|
|
2
2
|
import { dirname, join } from "node:path";
|
|
3
3
|
import { tmpdir } from "node:os";
|
|
4
4
|
import { z } from "zod";
|
|
5
|
+
import { LocalError } from "../../sdk/dist/index.js";
|
|
5
6
|
import { getSdk } from "../sdk.js";
|
|
6
7
|
import { mapSdkError } from "../errors.js";
|
|
7
8
|
import { requireAllowanceAuth } from "../allowance-auth.js";
|
|
@@ -13,7 +14,7 @@ export const deploySiteSchema = {
|
|
|
13
14
|
target: z
|
|
14
15
|
.string()
|
|
15
16
|
.optional()
|
|
16
|
-
.describe("
|
|
17
|
+
.describe("Deprecated/unsupported: unified deploy v2 does not support deployment target labels. Passing this field returns an error."),
|
|
17
18
|
files: z
|
|
18
19
|
.array(z.object({
|
|
19
20
|
file: z.string().describe("File path (e.g. 'index.html', 'assets/logo.png')"),
|
|
@@ -26,6 +27,9 @@ export const deploySiteSchema = {
|
|
|
26
27
|
.describe("Array of files to deploy. Must include at least index.html."),
|
|
27
28
|
};
|
|
28
29
|
export async function handleDeploySite(args) {
|
|
30
|
+
if (args.target !== undefined) {
|
|
31
|
+
return mapSdkError(new LocalError("`target` is unsupported by unified deploy v2 and would otherwise be ignored.", "deploying site"), "deploying site");
|
|
32
|
+
}
|
|
29
33
|
const auth = requireAllowanceAuth("/deploy/v2/plans");
|
|
30
34
|
if ("error" in auth)
|
|
31
35
|
return auth.error;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deploy-site.js","sourceRoot":"","sources":["../../src/tools/deploy-site.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/C,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,QAAQ,CAAC,uCAAuC,CAAC;IACpD,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"deploy-site.js","sourceRoot":"","sources":["../../src/tools/deploy-site.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "run402-mcp",
|
|
3
|
-
"version": "1.69.
|
|
3
|
+
"version": "1.69.2",
|
|
4
4
|
"description": "MCP server for Run402 — AI-native Postgres databases with REST API, auth, storage, and row-level security. Pay with x402 USDC micropayments.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
package/sdk/README.md
CHANGED
|
@@ -251,7 +251,10 @@ const resumed = await r.deploy.resume("op_...");
|
|
|
251
251
|
buildDeployResolveSummary,
|
|
252
252
|
normalizeDeployResolveRequest,
|
|
253
253
|
run402,
|
|
254
|
+
type DeployResolveAuthorizationResult,
|
|
255
|
+
type DeployResolveCasObject,
|
|
254
256
|
type DeployResolveResponse,
|
|
257
|
+
type DeployResolveResponseVariant,
|
|
255
258
|
} from "@run402/sdk/node";
|
|
256
259
|
|
|
257
260
|
const r = run402();
|
|
@@ -262,10 +265,14 @@ const resumed = await r.deploy.resume("op_...");
|
|
|
262
265
|
});
|
|
263
266
|
const resolution: DeployResolveResponse = await r.deploy.resolve(request);
|
|
264
267
|
const summary = buildDeployResolveSummary(resolution, request);
|
|
268
|
+
const auth: DeployResolveAuthorizationResult | undefined = resolution.authorization_result ?? undefined;
|
|
269
|
+
const cas: DeployResolveCasObject | undefined = resolution.cas_object ?? undefined;
|
|
270
|
+
const variant: DeployResolveResponseVariant | undefined = resolution.response_variant ?? undefined;
|
|
271
|
+
void auth; void cas; void variant;
|
|
265
272
|
console.log(summary.would_serve, summary.match, request.ignored);
|
|
266
273
|
```
|
|
267
274
|
|
|
268
|
-
`r.deploy.resolve({ project, url, method })` and scoped `p.deploy.resolve({ url, method })` also accept lower-level `{ project, host, path?, method? }`. URL query strings/fragments are ignored for lookup and surfaced in `request.ignored`. When returned, `asset_path`, `reachability_authority`, and `direct` explain which release asset backs the public URL and whether reachability came from implicit file-path mode, explicit `site.public_paths`, or a route-only static alias. Current known `match` literals are `host_missing`, `manifest_missing`, `path_error`, `none`, `static_exact`, `static_index`, `spa_fallback`, and `
|
|
275
|
+
`r.deploy.resolve({ project, url, method })` and scoped `p.deploy.resolve({ url, method })` also accept lower-level `{ project, host, path?, method? }`. URL query strings/fragments are ignored for lookup and surfaced in `request.ignored`. When returned, `asset_path`, `reachability_authority`, and `direct` explain which release asset backs the public URL and whether reachability came from implicit file-path mode, explicit `site.public_paths`, or a route-only static alias. Stable-host diagnostics may also include `authorization_result`, `cas_object` (`sha256`, `exists`, `expected_size`, `actual_size`), hostname-specific `response_variant`, and route/static fields such as `allow`, `route_pattern`, `target_type`, `target_name`, and `target_file`. Current known `match` literals are `host_missing`, `manifest_missing`, `active_release_missing`, `path_error`, `none`, `static_exact`, `static_index`, `spa_fallback`, `spa_fallback_missing`, `route_function`, `route_static_alias`, and `route_method_miss`; preserve unknown future strings. Known `authorization_result` values include `authorized`, `not_public`, `not_applicable`, `manifest_missing`, `target_missing`, `active_release_missing`, `path_error`, `missing_cas_object`, `unfinalized_or_deleting_cas_object`, `size_mismatch`, and `unauthorized_cas_object`. `result` is diagnostic body status, not SDK HTTP transport status, so host misses can be successful calls with `would_serve: false`. Do not use resolve as a fetch, cache purge, or cache-policy oracle; branch on structured fields such as `cache_class`, `allow`, and `cas_object`, and preserve unknown cache classes.
|
|
269
276
|
|
|
270
277
|
Route warning recovery:
|
|
271
278
|
|
|
@@ -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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"}
|
|
@@ -504,19 +504,13 @@ async function uploadMissing(client, projectId, presence, byteReaders, emit) {
|
|
|
504
504
|
});
|
|
505
505
|
}
|
|
506
506
|
const bytes = await reader();
|
|
507
|
-
await uploadOneWithRetry(client.fetch, session, bytes);
|
|
507
|
+
const uploadedParts = await uploadOneWithRetry(client.fetch, session, bytes);
|
|
508
508
|
if (!ciCredentials) {
|
|
509
509
|
// Per-session completion — legacy non-CI promotion path via
|
|
510
510
|
// /storage/v1/uploads/:id/complete. CI sessions skip this route because
|
|
511
511
|
// the gateway contract only allows /content/v1/plans*; under CI the
|
|
512
512
|
// plan-level content commit performs the CAS promotion.
|
|
513
|
-
const completeBody =
|
|
514
|
-
if (session.mode === "multipart" && session.parts.length > 1) {
|
|
515
|
-
// Multipart completion needs per-part ETags. The SDK doesn't capture
|
|
516
|
-
// ETags during the PUT loop today (it would need a multi-PUT
|
|
517
|
-
// helper); for the common single-PUT case below this is empty.
|
|
518
|
-
// TODO: collect part ETags during uploadOne for true multipart.
|
|
519
|
-
}
|
|
513
|
+
const completeBody = uploadCompleteBody(session, uploadedParts);
|
|
520
514
|
await client.request(`/storage/v1/uploads/${encodeURIComponent(session.upload_id)}/complete`, {
|
|
521
515
|
method: "POST",
|
|
522
516
|
headers,
|
|
@@ -538,18 +532,11 @@ async function uploadMissing(client, projectId, presence, byteReaders, emit) {
|
|
|
538
532
|
// above; this call is the plan-level idempotency anchor.
|
|
539
533
|
await client.request(`/content/v1/plans/${encodeURIComponent(planRes.plan_id)}/commit`, { method: "POST", headers, body: {}, context: "committing content upload" });
|
|
540
534
|
}
|
|
541
|
-
// Wrap `uploadOne` with exponential backoff for retryable failures.
|
|
542
|
-
// `putToS3` raises Run402DeployError(retryable: true) for transient network
|
|
543
|
-
// drops and 5xx/403 responses; one network blip should not fail the entire
|
|
544
|
-
// deploy. Cap at 3 attempts (1 initial + 2 retries) with delays 1s, 2s.
|
|
545
|
-
// Non-retryable errors (4xx other than 403, internal SDK invariants) bubble
|
|
546
|
-
// up on the first attempt. See GH-140.
|
|
547
535
|
async function uploadOneWithRetry(fetchFn, session, bytes) {
|
|
548
536
|
const MAX_ATTEMPTS = 3;
|
|
549
537
|
for (let attempt = 1;; attempt++) {
|
|
550
538
|
try {
|
|
551
|
-
await uploadOne(fetchFn, session, bytes);
|
|
552
|
-
return;
|
|
539
|
+
return await uploadOne(fetchFn, session, bytes);
|
|
553
540
|
}
|
|
554
541
|
catch (err) {
|
|
555
542
|
const retryable = err instanceof Run402DeployError && err.retryable;
|
|
@@ -573,13 +560,30 @@ async function uploadOne(fetchFn, entry, bytes) {
|
|
|
573
560
|
const slice = bytes.subarray(part.byte_start, part.byte_end + 1);
|
|
574
561
|
const checksum = base64FromHex(entry.sha256);
|
|
575
562
|
await putToS3(fetchFn, part.url, slice, checksum, part.part_number);
|
|
576
|
-
return;
|
|
563
|
+
return [];
|
|
577
564
|
}
|
|
565
|
+
const uploadedParts = [];
|
|
578
566
|
for (const part of entry.parts) {
|
|
579
567
|
const slice = bytes.subarray(part.byte_start, part.byte_end + 1);
|
|
580
568
|
const checksum = await sha256Base64(slice);
|
|
581
|
-
await putToS3(fetchFn, part.url, slice, checksum, part.part_number);
|
|
569
|
+
const etag = await putToS3(fetchFn, part.url, slice, checksum, part.part_number);
|
|
570
|
+
if (!etag) {
|
|
571
|
+
throw new Run402DeployError(`S3 PUT succeeded for multipart part ${part.part_number} but did not return an ETag`, {
|
|
572
|
+
code: "CONTENT_UPLOAD_FAILED",
|
|
573
|
+
phase: "upload",
|
|
574
|
+
retryable: false,
|
|
575
|
+
context: "uploading deploy bytes",
|
|
576
|
+
});
|
|
577
|
+
}
|
|
578
|
+
uploadedParts.push({ part_number: part.part_number, etag });
|
|
579
|
+
}
|
|
580
|
+
return uploadedParts;
|
|
581
|
+
}
|
|
582
|
+
function uploadCompleteBody(session, uploadedParts) {
|
|
583
|
+
if (session.mode === "multipart") {
|
|
584
|
+
return { parts: uploadedParts };
|
|
582
585
|
}
|
|
586
|
+
return {};
|
|
583
587
|
}
|
|
584
588
|
async function putToS3(fetchFn, url, body, checksumBase64, partNumber) {
|
|
585
589
|
// The gateway issues SigV4 presigned URLs with `ChecksumSHA256` set on
|
|
@@ -634,6 +638,7 @@ async function putToS3(fetchFn, url, body, checksumBase64, partNumber) {
|
|
|
634
638
|
context: "uploading deploy bytes",
|
|
635
639
|
});
|
|
636
640
|
}
|
|
641
|
+
return res.headers.get("etag");
|
|
637
642
|
}
|
|
638
643
|
async function pollUntilReady(client, commit, diff, warnings, emit, projectId) {
|
|
639
644
|
if (commit.status === "failed") {
|
|
@@ -1828,12 +1833,12 @@ async function uploadInlineCas(client, projectId, bytes, contentType) {
|
|
|
1828
1833
|
});
|
|
1829
1834
|
if (planRes.missing.length > 0) {
|
|
1830
1835
|
const session = planRes.missing[0];
|
|
1831
|
-
await uploadOne(client.fetch, session, bytes);
|
|
1836
|
+
const uploadedParts = await uploadOne(client.fetch, session, bytes);
|
|
1832
1837
|
// Per-session promotion to CAS (see uploadMissing for the rationale).
|
|
1833
1838
|
await client.request(`/storage/v1/uploads/${encodeURIComponent(session.upload_id)}/complete`, {
|
|
1834
1839
|
method: "POST",
|
|
1835
1840
|
headers,
|
|
1836
|
-
body:
|
|
1841
|
+
body: uploadCompleteBody(session, uploadedParts),
|
|
1837
1842
|
context: "completing content upload session",
|
|
1838
1843
|
});
|
|
1839
1844
|
await client.request(`/content/v1/plans/${encodeURIComponent(planRes.plan_id)}/commit`, { method: "POST", headers, body: {}, context: "committing content upload" });
|