@substrat-run/control-plane-api 0.48.1 → 0.50.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.
@@ -55,13 +55,18 @@ export interface ObservabilityReader {
55
55
  hours: number;
56
56
  }): Promise<ServiceMetricsRow[]>;
57
57
  /**
58
- * Recent log events, optionally narrowed to one service and/or level.
58
+ * Recent log events, optionally narrowed to a set of services and/or a level.
59
+ * `services` is a set because a caller's unit of interest is rarely one deployed
60
+ * unit — the builder view's "all versions" is every service a vertical serves from,
61
+ * and asking for them together is what makes one merged stream possible. Absent or
62
+ * empty means "no service narrowing" (the fleet view); several means the backend
63
+ * returns their events merged newest-first, capped at `limit` overall.
59
64
  * `search` is a case-sensitive substring match on the event message — a contract
60
65
  * capability, so each backend maps it to its own query language (never a
61
66
  * provider-shaped filter passed through the seam).
62
67
  */
63
68
  recentLogs(input: {
64
- service?: string;
69
+ services?: string[];
65
70
  level?: string;
66
71
  search?: string;
67
72
  hours: number;
@@ -1 +1 @@
1
- {"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../src/observability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,mEAAmE;AACnE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,4CAA4C;IAC5C,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;0FACsF;IACtF,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,6FAA6F;IAC7F,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,0FAA0F;IAC1F,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,0FAA0F;IAC1F,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,uFAAuF;IACvF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B;oFACgF;IAChF,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,sFAAsF;IACtF,cAAc,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACvE;;;;;OAKG;IACH,UAAU,CAAC,KAAK,EAAE;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;CAC/B"}
1
+ {"version":3,"file":"observability.d.ts","sourceRoot":"","sources":["../src/observability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,mEAAmE;AACnE,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,4CAA4C;IAC5C,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB;0FACsF;IACtF,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,6FAA6F;IAC7F,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,0FAA0F;IAC1F,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,0FAA0F;IAC1F,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,uFAAuF;IACvF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B;oFACgF;IAChF,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,sFAAsF;IACtF,cAAc,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;IACvE;;;;;;;;;;OAUG;IACH,UAAU,CAAC,KAAK,EAAE;QAChB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;CAC/B"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * The Cloudflare R2 implementation of the `ScopeBackupStore` seam (#493) — the platform's
3
+ * own backup bucket, bound on the control-plane worker.
4
+ *
5
+ * Structurally typed against the binding (`R2BucketLike`) rather than importing a
6
+ * Cloudflare SDK, the same way `adapter-cloudflare/src/r2.ts` wraps a tenant blob store:
7
+ * this package stays SDK-free and the fake in tests is an object literal.
8
+ *
9
+ * One bucket, held by the PLATFORM, not by the tenant. A tenant-held bucket would be
10
+ * deleted by the very teardown these copies exist to survive.
11
+ */
12
+ import type { DirectoryBackupStore, ScopeBackupStore } from './backups.js';
13
+ export declare function createR2BackupStore(bucket: unknown): ScopeBackupStore;
14
+ /**
15
+ * The Cloudflare R2 implementation of `DirectoryBackupStore` (#40).
16
+ *
17
+ * Deliberately a separate factory over the SAME binding shape rather than a mode flag on
18
+ * `createR2BackupStore`: the two stores answer different questions and only this one can
19
+ * delete. A deployment may point them at one bucket or two — the prefixes keep them apart
20
+ * either way, and pointing THIS one at a bucket in another account is the upgrade path
21
+ * from "survives losing the directory" to "survives losing the account".
22
+ */
23
+ export declare function createR2DirectoryBackupStore(bucket: unknown): DirectoryBackupStore;
24
+ //# sourceMappingURL=r2-backups.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"r2-backups.d.ts","sourceRoot":"","sources":["../src/r2-backups.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAUH,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAsC3E,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,GAAG,gBAAgB,CAsErE;AAcD;;;;;;;;GAQG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,OAAO,GAAG,oBAAoB,CAgElF"}
@@ -0,0 +1,175 @@
1
+ /**
2
+ * The Cloudflare R2 implementation of the `ScopeBackupStore` seam (#493) — the platform's
3
+ * own backup bucket, bound on the control-plane worker.
4
+ *
5
+ * Structurally typed against the binding (`R2BucketLike`) rather than importing a
6
+ * Cloudflare SDK, the same way `adapter-cloudflare/src/r2.ts` wraps a tenant blob store:
7
+ * this package stays SDK-free and the fake in tests is an object literal.
8
+ *
9
+ * One bucket, held by the PLATFORM, not by the tenant. A tenant-held bucket would be
10
+ * deleted by the very teardown these copies exist to survive.
11
+ */
12
+ import { directoryDump, scopeDump, } from '@substrat-run/contracts';
13
+ /**
14
+ * Keys are `scopes/<tenantId>/<scopeId>/<capturedAt>.json`, so a scope's copies are one
15
+ * prefix list and a tenant's are one level up. The scheme is private to this module —
16
+ * callers address a backup by (tenant, scope, capturedAt) and never build a path.
17
+ */
18
+ function backupKey(tenantId, scopeId, capturedAt) {
19
+ return `scopes/${tenantId}/${scopeId}/${capturedAt}.json`;
20
+ }
21
+ function scopePrefix(tenantId, scopeId) {
22
+ return `scopes/${tenantId}/${scopeId}/`;
23
+ }
24
+ export function createR2BackupStore(bucket) {
25
+ const r2 = bucket;
26
+ return {
27
+ async put({ vertical, dump }) {
28
+ const body = JSON.stringify(dump);
29
+ // Byte length, not string length: the size is meant to be the stored object's,
30
+ // and a dump full of non-ASCII would otherwise under-report.
31
+ const size = new TextEncoder().encode(body).length;
32
+ const backup = {
33
+ tenantId: dump.tenantId,
34
+ scopeId: dump.scopeId,
35
+ vertical,
36
+ capturedAt: dump.capturedAt,
37
+ size,
38
+ tables: dump.tables.length,
39
+ };
40
+ await r2.put(backupKey(dump.tenantId, dump.scopeId, dump.capturedAt), body, {
41
+ httpMetadata: { contentType: 'application/json' },
42
+ // Mirrored into custom metadata so `list` can answer without fetching every
43
+ // dump — a scope's backups are megabytes, its listing is a table row.
44
+ customMetadata: {
45
+ tenantId: backup.tenantId,
46
+ scopeId: backup.scopeId,
47
+ capturedAt: backup.capturedAt,
48
+ tables: String(backup.tables),
49
+ ...(vertical ? { vertical } : {}),
50
+ },
51
+ });
52
+ return backup;
53
+ },
54
+ async list({ tenantId, scopeId }) {
55
+ const prefix = scopePrefix(tenantId, scopeId);
56
+ const out = [];
57
+ let cursor;
58
+ do {
59
+ const page = await r2.list({
60
+ prefix,
61
+ include: ['customMetadata'],
62
+ ...(cursor ? { cursor } : {}),
63
+ });
64
+ for (const o of page.objects) {
65
+ const meta = o.customMetadata ?? {};
66
+ // The key is the fallback address: an object written before the metadata
67
+ // existed (or by a manual upload) still lists rather than vanishing.
68
+ const capturedAt = meta.capturedAt ?? o.key.slice(prefix.length).replace(/\.json$/, '');
69
+ out.push({
70
+ tenantId,
71
+ scopeId,
72
+ vertical: meta.vertical ?? null,
73
+ capturedAt,
74
+ size: o.size,
75
+ tables: meta.tables ? Number(meta.tables) : 0,
76
+ });
77
+ }
78
+ cursor = page.truncated ? page.cursor : undefined;
79
+ } while (cursor);
80
+ // Newest first. ISO 8601 sorts lexicographically, which is why `capturedAt` is
81
+ // the key's last segment.
82
+ return out.sort((a, b) => (a.capturedAt < b.capturedAt ? 1 : -1));
83
+ },
84
+ async get({ tenantId, scopeId, capturedAt }) {
85
+ const obj = await r2.get(backupKey(tenantId, scopeId, capturedAt));
86
+ if (!obj)
87
+ return null;
88
+ // Parsed through the contract on the way out: a corrupted or hand-edited object
89
+ // fails HERE, loudly, rather than at the restore that trusted it.
90
+ return scopeDump.parse(JSON.parse(await obj.text()));
91
+ },
92
+ };
93
+ }
94
+ /**
95
+ * Keys are `directory/<capturedAt>.json` — one flat prefix, because there is exactly one
96
+ * directory per deployment and `capturedAt` is a copy's whole address. Sharing a bucket
97
+ * with the scope backups above is safe by construction: `scopes/` and `directory/` cannot
98
+ * collide, and neither prefix is ever built by a caller.
99
+ */
100
+ function directoryKey(capturedAt) {
101
+ return `directory/${capturedAt}.json`;
102
+ }
103
+ const DIRECTORY_PREFIX = 'directory/';
104
+ /**
105
+ * The Cloudflare R2 implementation of `DirectoryBackupStore` (#40).
106
+ *
107
+ * Deliberately a separate factory over the SAME binding shape rather than a mode flag on
108
+ * `createR2BackupStore`: the two stores answer different questions and only this one can
109
+ * delete. A deployment may point them at one bucket or two — the prefixes keep them apart
110
+ * either way, and pointing THIS one at a bucket in another account is the upgrade path
111
+ * from "survives losing the directory" to "survives losing the account".
112
+ */
113
+ export function createR2DirectoryBackupStore(bucket) {
114
+ const r2 = bucket;
115
+ return {
116
+ async put({ dump }) {
117
+ const body = JSON.stringify(dump);
118
+ // Byte length, not string length — the size is the stored object's.
119
+ const size = new TextEncoder().encode(body).length;
120
+ const backup = {
121
+ capturedAt: dump.capturedAt,
122
+ size,
123
+ tables: dump.tables.length,
124
+ };
125
+ await r2.put(directoryKey(dump.capturedAt), body, {
126
+ httpMetadata: { contentType: 'application/json' },
127
+ // Mirrored into custom metadata so `list` answers without fetching every dump —
128
+ // a directory copy is megabytes, its listing is a table row.
129
+ customMetadata: {
130
+ capturedAt: backup.capturedAt,
131
+ tables: String(backup.tables),
132
+ },
133
+ });
134
+ return backup;
135
+ },
136
+ async list() {
137
+ const out = [];
138
+ let cursor;
139
+ do {
140
+ const page = await r2.list({
141
+ prefix: DIRECTORY_PREFIX,
142
+ include: ['customMetadata'],
143
+ ...(cursor ? { cursor } : {}),
144
+ });
145
+ for (const o of page.objects) {
146
+ const meta = o.customMetadata ?? {};
147
+ // The key is the fallback address, as in the scope store: an object written
148
+ // before the metadata existed still lists rather than vanishing.
149
+ const capturedAt = meta.capturedAt ?? o.key.slice(DIRECTORY_PREFIX.length).replace(/\.json$/, '');
150
+ out.push({
151
+ capturedAt,
152
+ size: o.size,
153
+ tables: meta.tables ? Number(meta.tables) : 0,
154
+ });
155
+ }
156
+ cursor = page.truncated ? page.cursor : undefined;
157
+ } while (cursor);
158
+ // Newest first — ISO 8601 sorts lexicographically, which is why `capturedAt` is
159
+ // the key's last segment. The daily-cadence guard reads element 0.
160
+ return out.sort((a, b) => (a.capturedAt < b.capturedAt ? 1 : -1));
161
+ },
162
+ async get({ capturedAt }) {
163
+ const obj = await r2.get(directoryKey(capturedAt));
164
+ if (!obj)
165
+ return null;
166
+ // Parsed through the contract on the way out, so a corrupted object fails HERE
167
+ // rather than half-way through the restore that trusted it.
168
+ return directoryDump.parse(JSON.parse(await obj.text()));
169
+ },
170
+ async delete({ capturedAt }) {
171
+ await r2.delete(directoryKey(capturedAt));
172
+ },
173
+ };
174
+ }
175
+ //# sourceMappingURL=r2-backups.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"r2-backups.js","sourceRoot":"","sources":["../src/r2-backups.ts"],"names":[],"mappings":"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"}
package/dist/wfp.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"wfp.d.ts","sourceRoot":"","sources":["../src/wfp.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,sBAAsB,EAAkB,MAAM,aAAa,CAAC;AAE5F;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAO,GAAG,MAAM,CAErD;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,mFAAmF;IACnF,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CACpD;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,kBAAkB,GAAG,gBAAgB,CAsE5E;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;wEACwE;AACxE,MAAM,MAAM,iBAAiB,GACzB,CAAC;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,GAAG,aAAa,CAAC,GAChC,CAAC;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GAAG,aAAa,CAAC,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAClC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,iBAAiB,EAAE,KACxB,OAAO,CAAC,IAAI,CAAC,CAAC;AASnB;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,GAAG,WAAW,GAAG,UAAU,CAAC,GACrE,qBAAqB,CA+CvB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,GAAG,WAAW,GAAG,UAAU,CAAC,GACrE,sBAAsB,CA8DxB"}
1
+ {"version":3,"file":"wfp.d.ts","sourceRoot":"","sources":["../src/wfp.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAe,gBAAgB,EAAE,sBAAsB,EAAkB,MAAM,aAAa,CAAC;AAEzG;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAO,GAAG,MAAM,CAErD;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,mFAAmF;IACnF,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;;OAOG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;CACpD;AAyHD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,kBAAkB,GAAG,gBAAgB,CAqF5E;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,4DAA4D;IAC5D,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,0DAA0D;IAC1D,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;wEACwE;AACxE,MAAM,MAAM,iBAAiB,GACzB,CAAC;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,GAAG,aAAa,CAAC,GAChC,CAAC;IAAE,IAAI,EAAE,WAAW,CAAA;CAAE,GAAG,aAAa,CAAC,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAClC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,iBAAiB,EAAE,KACxB,OAAO,CAAC,IAAI,CAAC,CAAC;AASnB;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,GAAG,WAAW,GAAG,UAAU,CAAC,GACrE,qBAAqB,CA+CvB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,IAAI,CAAC,kBAAkB,EAAE,WAAW,GAAG,WAAW,GAAG,UAAU,CAAC,GACrE,sBAAsB,CA8DxB"}
package/dist/wfp.js CHANGED
@@ -10,6 +10,100 @@ import { DeployUploadError, nextMigrationTag } from './deploy.js';
10
10
  export function clip(body, max = 2000) {
11
11
  return body.length <= max ? body : `${body.slice(0, max)} … [truncated, ${body.length - max} chars omitted]`;
12
12
  }
13
+ /** Bytes → base64, web-standard only (chunked so a large file does not blow the
14
+ * `String.fromCharCode` argument limit). The asset upload endpoint takes base64 bodies. */
15
+ function toBase64(bytes) {
16
+ let binary = '';
17
+ const CHUNK = 0x8000;
18
+ for (let i = 0; i < bytes.length; i += CHUNK) {
19
+ binary += String.fromCharCode(...bytes.subarray(i, i + CHUNK));
20
+ }
21
+ return btoa(binary);
22
+ }
23
+ /** The Cloudflare `assets.config` block, from our substrate-vocabulary routing fields. */
24
+ function assetConfigOf(assets) {
25
+ return {
26
+ ...(assets.htmlHandling ? { html_handling: assets.htmlHandling } : {}),
27
+ ...(assets.notFoundHandling ? { not_found_handling: assets.notFoundHandling } : {}),
28
+ ...(assets.runWorkerFirst !== undefined ? { run_worker_first: assets.runWorkerFirst } : {}),
29
+ };
30
+ }
31
+ /**
32
+ * Run Cloudflare's three-step **assets upload session** for a dispatch-namespace script and
33
+ * return the completion JWT the script PUT declares (#340). Static assets are not a binding:
34
+ * they go up their own path, and the script upload only ever names the token this produces.
35
+ *
36
+ * 1. POST the manifest (`path → { hash, size }`) to the script's `assets-upload-session`.
37
+ * Cloudflare answers with a session JWT and the BUCKETS of hashes it does not already
38
+ * hold — content-addressed storage, deduped namespace-wide, so an unchanged SPA re-deploy
39
+ * usually comes back with nothing to upload at all.
40
+ * 2. POST each bucket's files, base64, one part per hash, each carrying the Content-Type the
41
+ * file will be SERVED with. The response to the last bucket carries the completion JWT.
42
+ * 3. (caller) name that JWT in the script metadata's `assets` block.
43
+ *
44
+ * Empty buckets ⇒ every file was already stored and the SESSION jwt is itself the completion
45
+ * token. That is the case a promote depends on: re-serving an archived version onto the
46
+ * stable script re-runs this with the retained manifest and no bytes. When the runtime has in
47
+ * fact dropped content we were not given, this refuses loudly — a script deployed with an
48
+ * incomplete asset set would serve a half-broken page and look like a successful deploy.
49
+ */
50
+ async function uploadAssets(opts, scriptName, files) {
51
+ const manifest = {};
52
+ const byHash = new Map();
53
+ for (const f of files) {
54
+ manifest[f.path] = { hash: f.hash, size: f.size };
55
+ byHash.set(f.hash, f);
56
+ }
57
+ const sessionUrl = `https://api.cloudflare.com/client/v4/accounts/${opts.accountId}` +
58
+ `/workers/dispatch/namespaces/${opts.namespace}/scripts/${encodeURIComponent(scriptName)}/assets-upload-session`;
59
+ const session = await fetch(sessionUrl, {
60
+ method: 'POST',
61
+ headers: { authorization: `Bearer ${opts.apiToken}`, 'content-type': 'application/json' },
62
+ body: JSON.stringify({ manifest }),
63
+ });
64
+ if (!session.ok) {
65
+ const body = await session.text().catch(() => '');
66
+ throw new DeployUploadError(session.status, `WfP asset session failed (${session.status}) for '${scriptName}': ${clip(body)}`);
67
+ }
68
+ const parsed = (await session.json().catch(() => ({})));
69
+ const sessionJwt = parsed.result?.jwt;
70
+ if (!sessionJwt) {
71
+ throw new DeployUploadError(502, `WfP asset session for '${scriptName}' returned no jwt`);
72
+ }
73
+ const buckets = (parsed.result?.buckets ?? []).filter((b) => b.length > 0);
74
+ if (buckets.length === 0)
75
+ return sessionJwt; // nothing missing — the session token completes it
76
+ let completion;
77
+ for (const bucket of buckets) {
78
+ const form = new FormData();
79
+ for (const hash of bucket) {
80
+ const file = byHash.get(hash);
81
+ if (!file?.content) {
82
+ // The runtime wants bytes this upload does not carry. Only a re-serve can be here
83
+ // (a push always carries every byte), so name the remedy rather than the mechanism.
84
+ throw new DeployUploadError(502, `the runtime no longer holds asset '${file?.path ?? hash}' for '${scriptName}' and this ` +
85
+ `re-deploy carries no bytes for it — push the version again to restore its static files`);
86
+ }
87
+ // The part's Content-Type is what the file is SERVED as later, so it must be the
88
+ // asset's own type, not the base64 envelope's.
89
+ form.set(hash, new Blob([toBase64(file.content)], { type: file.contentType }), hash);
90
+ }
91
+ const res = await fetch(`https://api.cloudflare.com/client/v4/accounts/${opts.accountId}/workers/assets/upload?base64=true`, { method: 'POST', headers: { authorization: `Bearer ${sessionJwt}` }, body: form });
92
+ if (!res.ok) {
93
+ const body = await res.text().catch(() => '');
94
+ throw new DeployUploadError(res.status, `WfP asset upload failed (${res.status}) for '${scriptName}': ${clip(body)}`);
95
+ }
96
+ const done = (await res.json().catch(() => ({})));
97
+ // Only the FINAL bucket's response carries the completion token; earlier ones answer
98
+ // with an empty result. Keep the last one seen rather than assuming which it was.
99
+ if (done.result?.jwt)
100
+ completion = done.result.jwt;
101
+ }
102
+ if (!completion) {
103
+ throw new DeployUploadError(502, `WfP asset upload for '${scriptName}' finished without a completion jwt`);
104
+ }
105
+ return completion;
106
+ }
13
107
  export function createWfpUploader(opts) {
14
108
  const injected = Object.entries(opts.injectSecrets ?? {})
15
109
  .filter(([, text]) => text)
@@ -32,6 +126,12 @@ export function createWfpUploader(opts) {
32
126
  : undefined
33
127
  : // Every Substrat scope DO is SQLite-backed (new_sqlite_classes, not new_classes).
34
128
  { new_tag: 'v1', new_sqlite_classes: bundle.doClasses };
129
+ // #340: static files go up FIRST, on their own path — the script PUT then names only
130
+ // the completion token. A bundle with no assets runs no session at all, so nothing
131
+ // about an assets-free vertical's upload changes.
132
+ const assetsJwt = bundle.assets && bundle.assets.files.length > 0
133
+ ? await uploadAssets(opts, deploymentRef, bundle.assets.files)
134
+ : undefined;
35
135
  const metadata = {
36
136
  main_module: bundle.entry,
37
137
  compatibility_date: bundle.compatibilityDate,
@@ -51,6 +151,13 @@ export function createWfpUploader(opts) {
51
151
  // pushed script's console output and exceptions are simply not recorded, and the
52
152
  // builder's only debugging tool is asking staff to redeploy with it on.
53
153
  observability: { enabled: true },
154
+ // The static files uploaded above, plus how the runtime routes paths against them
155
+ // (#340). Assets are versioned WITH the code: an upload carrying this block replaces
156
+ // the script's asset set atomically, and one without it (a version that ships no
157
+ // static files) leaves the script serving none — which is the honest outcome, since
158
+ // keeping the outgoing version's assets beside incoming code is exactly the skew
159
+ // native assets exist to prevent.
160
+ ...(assetsJwt ? { assets: { jwt: assetsJwt, config: assetConfigOf(bundle.assets) } } : {}),
54
161
  };
55
162
  const form = new FormData();
56
163
  form.set('metadata', new Blob([JSON.stringify(metadata)], { type: 'application/json' }), 'metadata.json');
package/dist/wfp.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"wfp.js","sourceRoot":"","sources":["../src/wfp.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"wfp.js","sourceRoot":"","sources":["../src/wfp.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@substrat-run/control-plane-api",
3
- "version": "0.48.1",
3
+ "version": "0.50.0",
4
4
  "description": "HTTP surface over HostAdmin — the audited control-plane transport (control-plane.md §4.5)",
5
5
  "license": "AGPL-3.0-only",
6
6
  "repository": {
@@ -23,20 +23,20 @@
23
23
  ],
24
24
  "dependencies": {
25
25
  "hono": "^4.6.0",
26
- "@substrat-run/contracts": "^0.48.1",
27
- "@substrat-run/kernel": "^0.48.1",
26
+ "@substrat-run/contracts": "^0.50.0",
27
+ "@substrat-run/kernel": "^0.50.0",
28
28
  "@substrat-run/psl": "^0.2.0"
29
29
  },
30
30
  "devDependencies": {
31
31
  "@hono/node-server": "^1.13.0",
32
- "@types/better-sqlite3": "^7.6.0",
32
+ "@types/better-sqlite3": "^9.6.0",
33
33
  "better-auth": "^1.6.23",
34
- "better-sqlite3": "^12.0.0",
34
+ "better-sqlite3": "^13.0.3",
35
35
  "hono": "^4.6.0",
36
36
  "tsx": "^4.19.0",
37
37
  "typescript": "^7.0.0",
38
38
  "vitest": "^3.0.0",
39
- "@substrat-run/adapter-sqlite": "^0.48.1"
39
+ "@substrat-run/adapter-sqlite": "^0.50.0"
40
40
  },
41
41
  "publishConfig": {
42
42
  "access": "public"