@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.
- package/dist/api.d.ts +27 -0
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +464 -21
- package/dist/api.js.map +1 -1
- package/dist/backups.d.ts +93 -0
- package/dist/backups.d.ts.map +1 -0
- package/dist/backups.js +30 -0
- package/dist/backups.js.map +1 -0
- package/dist/cf-observability.d.ts.map +1 -1
- package/dist/cf-observability.js +67 -52
- package/dist/cf-observability.js.map +1 -1
- package/dist/deploy.d.ts +23 -1
- package/dist/deploy.d.ts.map +1 -1
- package/dist/deploy.js.map +1 -1
- package/dist/directory-backup.d.ts +57 -0
- package/dist/directory-backup.d.ts.map +1 -0
- package/dist/directory-backup.js +68 -0
- package/dist/directory-backup.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/mask.d.ts +15 -0
- package/dist/mask.d.ts.map +1 -1
- package/dist/mask.js +25 -1
- package/dist/mask.js.map +1 -1
- package/dist/observability.d.ts +7 -2
- package/dist/observability.d.ts.map +1 -1
- package/dist/r2-backups.d.ts +24 -0
- package/dist/r2-backups.d.ts.map +1 -0
- package/dist/r2-backups.js +175 -0
- package/dist/r2-backups.js.map +1 -0
- package/dist/wfp.d.ts.map +1 -1
- package/dist/wfp.js +107 -0
- package/dist/wfp.js.map +1 -1
- package/package.json +6 -6
package/dist/observability.d.ts
CHANGED
|
@@ -55,13 +55,18 @@ export interface ObservabilityReader {
|
|
|
55
55
|
hours: number;
|
|
56
56
|
}): Promise<ServiceMetricsRow[]>;
|
|
57
57
|
/**
|
|
58
|
-
* Recent log events, optionally narrowed to
|
|
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
|
-
|
|
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
|
|
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,
|
|
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.
|
|
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.
|
|
27
|
-
"@substrat-run/kernel": "^0.
|
|
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": "^
|
|
32
|
+
"@types/better-sqlite3": "^9.6.0",
|
|
33
33
|
"better-auth": "^1.6.23",
|
|
34
|
-
"better-sqlite3": "^
|
|
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.
|
|
39
|
+
"@substrat-run/adapter-sqlite": "^0.50.0"
|
|
40
40
|
},
|
|
41
41
|
"publishConfig": {
|
|
42
42
|
"access": "public"
|