@aotter/mantle-cloudflare 0.1.0-alpha.16 → 0.1.0-alpha.17

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.
Files changed (65) hide show
  1. package/README.md +39 -1
  2. package/dist/auth/createAuth.d.ts +12 -11
  3. package/dist/auth/createAuth.d.ts.map +1 -1
  4. package/dist/auth/createAuth.js +158 -16
  5. package/dist/auth/createAuth.js.map +1 -1
  6. package/dist/bindings/KvSiteConfigRepository.d.ts +44 -0
  7. package/dist/bindings/KvSiteConfigRepository.d.ts.map +1 -0
  8. package/dist/bindings/KvSiteConfigRepository.js +286 -0
  9. package/dist/bindings/KvSiteConfigRepository.js.map +1 -0
  10. package/dist/bindings/R2MediaStorage.d.ts +2 -3
  11. package/dist/bindings/R2MediaStorage.d.ts.map +1 -1
  12. package/dist/bindings/R2MediaStorage.js +59 -42
  13. package/dist/bindings/R2MediaStorage.js.map +1 -1
  14. package/dist/bindings/conventionalBindings.d.ts +2 -0
  15. package/dist/bindings/conventionalBindings.d.ts.map +1 -1
  16. package/dist/bindings/conventionalBindings.js +3 -0
  17. package/dist/bindings/conventionalBindings.js.map +1 -1
  18. package/dist/bindings/index.d.ts +1 -0
  19. package/dist/bindings/index.d.ts.map +1 -1
  20. package/dist/bindings/index.js +1 -0
  21. package/dist/bindings/index.js.map +1 -1
  22. package/dist/mount/bootRuntimeOnce.d.ts +3 -0
  23. package/dist/mount/bootRuntimeOnce.d.ts.map +1 -1
  24. package/dist/mount/bootRuntimeOnce.js +41 -27
  25. package/dist/mount/bootRuntimeOnce.js.map +1 -1
  26. package/dist/mount/cmsConfig.d.ts +5 -0
  27. package/dist/mount/cmsConfig.d.ts.map +1 -1
  28. package/dist/mount/mountMcp.d.ts.map +1 -1
  29. package/dist/mount/mountMcp.js +76 -60
  30. package/dist/mount/mountMcp.js.map +1 -1
  31. package/dist/mount/mountPublicRoutes.d.ts.map +1 -1
  32. package/dist/mount/mountPublicRoutes.js +67 -58
  33. package/dist/mount/mountPublicRoutes.js.map +1 -1
  34. package/dist/mount/mountRuntimeEndpoints.d.ts.map +1 -1
  35. package/dist/mount/mountRuntimeEndpoints.js +3 -1
  36. package/dist/mount/mountRuntimeEndpoints.js.map +1 -1
  37. package/dist/oauth/index.d.ts +1 -1
  38. package/dist/oauth/index.d.ts.map +1 -1
  39. package/dist/oauth/index.js +1 -1
  40. package/dist/oauth/index.js.map +1 -1
  41. package/dist/requestDiagnostics.d.ts +53 -0
  42. package/dist/requestDiagnostics.d.ts.map +1 -0
  43. package/dist/requestDiagnostics.js +32 -0
  44. package/dist/requestDiagnostics.js.map +1 -0
  45. package/dist/testing.d.ts +19 -0
  46. package/dist/testing.d.ts.map +1 -0
  47. package/dist/testing.js +263 -0
  48. package/dist/testing.js.map +1 -0
  49. package/dist/worker/createMantleWorker.d.ts +3 -0
  50. package/dist/worker/createMantleWorker.d.ts.map +1 -1
  51. package/dist/worker/createMantleWorker.js +46 -13
  52. package/dist/worker/createMantleWorker.js.map +1 -1
  53. package/package.json +18 -11
  54. package/dist/auth/rejectCrossOriginMutation.d.ts +0 -2
  55. package/dist/auth/rejectCrossOriginMutation.d.ts.map +0 -1
  56. package/dist/auth/rejectCrossOriginMutation.js +0 -15
  57. package/dist/auth/rejectCrossOriginMutation.js.map +0 -1
  58. package/dist/oauth/consentHtml.d.ts +0 -15
  59. package/dist/oauth/consentHtml.d.ts.map +0 -1
  60. package/dist/oauth/consentHtml.js +0 -91
  61. package/dist/oauth/consentHtml.js.map +0 -1
  62. package/dist/oauth/mountOAuth.d.ts +0 -9
  63. package/dist/oauth/mountOAuth.d.ts.map +0 -1
  64. package/dist/oauth/mountOAuth.js +0 -37
  65. package/dist/oauth/mountOAuth.js.map +0 -1
@@ -0,0 +1,44 @@
1
+ import { type MediaPurposePolicy, type SiteConfig, type SiteDefaults } from "@aotter/mantle-spec";
2
+ import type { SiteConfigRepository, UpdateEditableSiteConfigArgs } from "@aotter/mantle-runtime";
3
+ export type McpCatalogSiteConfig = Pick<SiteConfig, "origin" | "brand" | "description" | "icons" | "media">;
4
+ export interface McpCatalogKvBinding {
5
+ readonly namespace: KVNamespace;
6
+ /** Stable deployment-owned scope. Never derive this from a request. */
7
+ readonly scope: string;
8
+ }
9
+ export interface McpCatalogSiteConfigReader {
10
+ /** Resolve caller-independent catalog data after the transport auth gate. */
11
+ loadCatalogSite(runtime: object): Promise<McpCatalogSiteConfig>;
12
+ }
13
+ /**
14
+ * Cloudflare-owned write-through decorator for MCP catalog configuration.
15
+ * The delegate remains canonical: ordinary repository reads always hit D1,
16
+ * while only the caller-independent MCP projection is stored in KV.
17
+ */
18
+ export declare class KvSiteConfigRepository implements SiteConfigRepository, McpCatalogSiteConfigReader {
19
+ private readonly canonical;
20
+ private readonly binding;
21
+ readonly key: string;
22
+ private readonly inFlight;
23
+ private generation;
24
+ private lastKnownSnapshot;
25
+ private operationTail;
26
+ private putFailureCount;
27
+ private putBackoffUntil;
28
+ private readonly diagnosticCounts;
29
+ constructor(canonical: SiteConfigRepository, binding: McpCatalogKvBinding);
30
+ load(): Promise<SiteConfig>;
31
+ readLocales(): Promise<readonly string[]>;
32
+ readMediaPurposes(): Promise<readonly MediaPurposePolicy[]>;
33
+ seed(defaults: SiteDefaults | undefined): Promise<void>;
34
+ updateEditable(values: UpdateEditableSiteConfigArgs): Promise<void>;
35
+ loadCatalogSite(runtime: object): Promise<McpCatalogSiteConfig>;
36
+ private readCatalogSite;
37
+ private repairCatalogSite;
38
+ private publishAfterCommittedWrite;
39
+ private loadCanonicalSnapshot;
40
+ private putSnapshot;
41
+ private exclusive;
42
+ private diagnostic;
43
+ }
44
+ //# sourceMappingURL=KvSiteConfigRepository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KvSiteConfigRepository.d.ts","sourceRoot":"","sources":["../../src/bindings/KvSiteConfigRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,UAAU,EACf,KAAK,YAAY,EAElB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EACV,oBAAoB,EACpB,4BAA4B,EAC7B,MAAM,wBAAwB,CAAC;AAWhC,MAAM,MAAM,oBAAoB,GAAG,IAAI,CACrC,UAAU,EACV,QAAQ,GAAG,OAAO,GAAG,aAAa,GAAG,OAAO,GAAG,OAAO,CACvD,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE,WAAW,CAAC;IAChC,uEAAuE;IACvE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,0BAA0B;IACzC,6EAA6E;IAC7E,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACjE;AA2CD;;;;GAIG;AACH,qBAAa,sBACX,YAAW,oBAAoB,EAAE,0BAA0B;IAWzD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAX1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA8C;IACvE,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,iBAAiB,CAAgC;IACzD,OAAO,CAAC,aAAa,CAAoC;IACzD,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6B;gBAG3C,SAAS,EAAE,oBAAoB,EAC/B,OAAO,EAAE,mBAAmB;IAU/C,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC;IAI3B,WAAW,IAAI,OAAO,CAAC,SAAS,MAAM,EAAE,CAAC;IAIzC,iBAAiB,IAAI,OAAO,CAAC,SAAS,kBAAkB,EAAE,CAAC;IAIrD,IAAI,CAAC,QAAQ,EAAE,YAAY,GAAG,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAWvD,cAAc,CAAC,MAAM,EAAE,4BAA4B,GAAG,OAAO,CAAC,IAAI,CAAC;IAYzE,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;YAuBjD,eAAe;IAqB7B,OAAO,CAAC,iBAAiB;YAWX,0BAA0B;YAa1B,qBAAqB;YAerB,WAAW;IAiCzB,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,UAAU;CAgBnB"}
@@ -0,0 +1,286 @@
1
+ import { assertSiteDefaultsCanonical, } from "@aotter/mantle-spec";
2
+ import { z } from "zod";
3
+ import { requestDiagnosticContext } from "../requestDiagnostics.js";
4
+ const SNAPSHOT_VERSION = 1;
5
+ const MAX_SNAPSHOT_AGE_MS = 3_600_000;
6
+ const MAX_FUTURE_SKEW_MS = 60_000;
7
+ const MAX_ENVELOPE_BYTES = 64 * 1024;
8
+ const MAX_PUT_BACKOFF_MS = 60_000;
9
+ const SCOPE_PATTERN = /^[A-Za-z0-9_-]{1,64}$/u;
10
+ const snapshotSchema = z.strictObject({
11
+ version: z.literal(SNAPSHOT_VERSION),
12
+ scope: z.string(),
13
+ observedAt: z.number().int().nonnegative(),
14
+ repairAfter: z.number().int().nonnegative(),
15
+ contentHash: z.string().regex(/^[a-f0-9]{64}$/u),
16
+ site: z.strictObject({
17
+ origin: z.string(),
18
+ brand: z.string(),
19
+ description: z.string(),
20
+ icons: z.array(z.strictObject({
21
+ src: z.string(),
22
+ mimeType: z.enum(["image/png", "image/jpeg", "image/svg+xml", "image/webp"]).optional(),
23
+ sizes: z.array(z.string()).optional(),
24
+ theme: z.enum(["light", "dark"]).optional(),
25
+ })),
26
+ media: z.strictObject({
27
+ purposes: z.array(z.strictObject({
28
+ name: z.string(),
29
+ required: z.array(z.string()),
30
+ maxBytes: z.record(z.string(), z.number().positive()),
31
+ })),
32
+ }),
33
+ }),
34
+ });
35
+ /**
36
+ * Cloudflare-owned write-through decorator for MCP catalog configuration.
37
+ * The delegate remains canonical: ordinary repository reads always hit D1,
38
+ * while only the caller-independent MCP projection is stored in KV.
39
+ */
40
+ export class KvSiteConfigRepository {
41
+ canonical;
42
+ binding;
43
+ key;
44
+ inFlight = new WeakMap();
45
+ generation = 0;
46
+ lastKnownSnapshot;
47
+ operationTail = Promise.resolve();
48
+ putFailureCount = 0;
49
+ putBackoffUntil = 0;
50
+ diagnosticCounts = new Map();
51
+ constructor(canonical, binding) {
52
+ this.canonical = canonical;
53
+ this.binding = binding;
54
+ if (!SCOPE_PATTERN.test(binding.scope)) {
55
+ throw new Error("Mantle MCP catalog KV scope must contain 1-64 ASCII letters, digits, '_' or '-'.");
56
+ }
57
+ this.key = `mantle:site-config:v1:${binding.scope}:mcp`;
58
+ }
59
+ load() {
60
+ return this.canonical.load();
61
+ }
62
+ readLocales() {
63
+ return this.canonical.readLocales();
64
+ }
65
+ readMediaPurposes() {
66
+ return this.canonical.readMediaPurposes();
67
+ }
68
+ async seed(defaults) {
69
+ // Invalidate pre-mutation reads now, and reads started during the write
70
+ // again after commit. Neither may repopulate the local snapshot later.
71
+ this.generation += 1;
72
+ await this.exclusive(async () => {
73
+ await this.canonical.seed(defaults);
74
+ this.generation += 1;
75
+ await this.publishAfterCommittedWrite("seed");
76
+ });
77
+ }
78
+ async updateEditable(values) {
79
+ if (!this.canonical.updateEditable) {
80
+ throw new Error("SiteConfigRepository.updateEditable is unavailable");
81
+ }
82
+ this.generation += 1;
83
+ await this.exclusive(async () => {
84
+ await this.canonical.updateEditable(values);
85
+ this.generation += 1;
86
+ await this.publishAfterCommittedWrite("update");
87
+ });
88
+ }
89
+ loadCatalogSite(runtime) {
90
+ const generation = this.generation;
91
+ let flight = this.inFlight.get(runtime);
92
+ const record = requestDiagnosticContext.getStore();
93
+ const sharedWait = flight?.generation === generation;
94
+ const started = record && sharedWait ? performance.now() : null;
95
+ if (!sharedWait) {
96
+ const observation = { source: "not-reached" };
97
+ const pending = this.readCatalogSite(generation, observation).finally(() => {
98
+ if (this.inFlight.get(runtime)?.promise === pending)
99
+ this.inFlight.delete(runtime);
100
+ });
101
+ flight = { generation, observation, promise: pending };
102
+ this.inFlight.set(runtime, flight);
103
+ }
104
+ const selected = flight;
105
+ if (!record)
106
+ return selected.promise;
107
+ return selected.promise.finally(() => {
108
+ record.catalog.source = selected.observation.source;
109
+ record.catalog.sharedWait ||= sharedWait;
110
+ if (started !== null)
111
+ record.catalog.waitMs = (record.catalog.waitMs ?? 0) + performance.now() - started;
112
+ });
113
+ }
114
+ async readCatalogSite(generation, observation) {
115
+ let raw = null;
116
+ let kvFailed = false;
117
+ try {
118
+ raw = await this.binding.namespace.get(this.key, "text");
119
+ }
120
+ catch (error) {
121
+ kvFailed = true;
122
+ this.diagnostic("get-failed", error);
123
+ }
124
+ if (raw !== null) {
125
+ const snapshot = await parseSnapshot(raw, this.binding.scope, Date.now());
126
+ if (snapshot && generation === this.generation) {
127
+ this.lastKnownSnapshot = snapshot;
128
+ observation.source = "kv-hit";
129
+ return snapshot.site;
130
+ }
131
+ }
132
+ observation.source = kvFailed ? "d1-kv-error" : raw === null ? "d1-miss" : "d1-repair";
133
+ return this.repairCatalogSite();
134
+ }
135
+ repairCatalogSite() {
136
+ // Serialize miss fill with local setting mutations. Every publication
137
+ // reloads canonical state inside the same critical section, so an older
138
+ // local miss cannot overwrite a newer local write-through publication.
139
+ return this.exclusive(async () => {
140
+ const snapshot = await this.loadCanonicalSnapshot();
141
+ await this.putSnapshot(snapshot, true);
142
+ return snapshot.site;
143
+ });
144
+ }
145
+ async publishAfterCommittedWrite(reason) {
146
+ const record = requestDiagnosticContext.getStore();
147
+ if (reason === "seed" && record)
148
+ record.catalog.bootPublications++;
149
+ try {
150
+ const snapshot = await this.loadCanonicalSnapshot();
151
+ await this.putSnapshot(snapshot);
152
+ }
153
+ catch (error) {
154
+ // D1 already committed. Derived-cache repair must never turn a saved
155
+ // setting into a misleading failure or suppress the public-cache purge.
156
+ this.diagnostic(`${reason}-publication-failed`, error);
157
+ }
158
+ }
159
+ async loadCanonicalSnapshot() {
160
+ // Anchor freshness before the canonical read. A delayed load cannot gain
161
+ // a fresh lifetime merely because serialization or KV put completed later.
162
+ const observedAt = Date.now();
163
+ const site = normalizeCatalogSite(await this.canonical.load());
164
+ return {
165
+ version: SNAPSHOT_VERSION,
166
+ scope: this.binding.scope,
167
+ observedAt,
168
+ repairAfter: observedAt + MAX_SNAPSHOT_AGE_MS,
169
+ contentHash: await contentHash(site),
170
+ site,
171
+ };
172
+ }
173
+ async putSnapshot(snapshot, force = false) {
174
+ const now = Date.now();
175
+ // KV requires at least 60 seconds of remaining lifetime. Do not extend
176
+ // an old observation just to satisfy the platform's expiration minimum.
177
+ if (snapshot.repairAfter < now + 60_000 || now < this.putBackoffUntil)
178
+ return;
179
+ if (!force
180
+ && this.lastKnownSnapshot?.contentHash === snapshot.contentHash
181
+ && isSnapshotFresh(this.lastKnownSnapshot, now))
182
+ return;
183
+ const value = JSON.stringify(snapshot);
184
+ const bytes = utf8Bytes(value);
185
+ if (bytes > MAX_ENVELOPE_BYTES) {
186
+ this.diagnostic("oversized", { bytes, limit: MAX_ENVELOPE_BYTES });
187
+ return;
188
+ }
189
+ try {
190
+ await this.binding.namespace.put(this.key, value, {
191
+ expiration: Math.ceil(snapshot.repairAfter / 1000),
192
+ });
193
+ this.lastKnownSnapshot = snapshot;
194
+ this.putFailureCount = 0;
195
+ this.putBackoffUntil = 0;
196
+ }
197
+ catch (error) {
198
+ this.putFailureCount += 1;
199
+ this.putBackoffUntil = now + Math.min(MAX_PUT_BACKOFF_MS, 1_000 * (2 ** Math.min(this.putFailureCount - 1, 6)));
200
+ this.diagnostic("put-failed", error);
201
+ }
202
+ }
203
+ exclusive(operation) {
204
+ const result = this.operationTail.then(operation, operation);
205
+ this.operationTail = result.then(() => undefined, () => undefined);
206
+ return result;
207
+ }
208
+ diagnostic(kind, detail) {
209
+ const count = (this.diagnosticCounts.get(kind) ?? 0) + 1;
210
+ this.diagnosticCounts.set(kind, count);
211
+ // Bound repeated outage logs to the first occurrence and powers of two.
212
+ if (count !== 1 && (count & (count - 1)) !== 0)
213
+ return;
214
+ const safeDetail = isRecord(detail) && typeof detail["bytes"] === "number"
215
+ ? { bytes: detail["bytes"], limit: detail["limit"] }
216
+ : detail instanceof Error
217
+ ? { name: detail.name }
218
+ : undefined;
219
+ console.warn("[mantle] MCP catalog KV diagnostic", {
220
+ kind,
221
+ count,
222
+ ...(safeDetail ? { detail: safeDetail } : {}),
223
+ });
224
+ }
225
+ }
226
+ function normalizeCatalogSite(site) {
227
+ return {
228
+ origin: site.origin,
229
+ brand: site.brand,
230
+ description: site.description,
231
+ icons: site.icons.map(normalizeIcon),
232
+ media: {
233
+ purposes: site.media.purposes.map((purpose) => ({
234
+ name: purpose.name,
235
+ required: [...purpose.required],
236
+ maxBytes: Object.fromEntries(Object.entries(purpose.maxBytes).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0)),
237
+ })),
238
+ },
239
+ };
240
+ }
241
+ function normalizeIcon(icon) {
242
+ return {
243
+ src: icon.src,
244
+ ...(icon.mimeType ? { mimeType: icon.mimeType } : {}),
245
+ ...(icon.sizes ? { sizes: [...icon.sizes] } : {}),
246
+ ...(icon.theme ? { theme: icon.theme } : {}),
247
+ };
248
+ }
249
+ async function parseSnapshot(raw, scope, now) {
250
+ if (utf8Bytes(raw) > MAX_ENVELOPE_BYTES)
251
+ return null;
252
+ let snapshot;
253
+ try {
254
+ const parsed = snapshotSchema.safeParse(JSON.parse(raw));
255
+ if (!parsed.success)
256
+ return null;
257
+ snapshot = parsed.data;
258
+ assertSiteDefaultsCanonical(snapshot.site);
259
+ }
260
+ catch {
261
+ return null;
262
+ }
263
+ if (snapshot.scope !== scope || !isSnapshotFresh(snapshot, now))
264
+ return null;
265
+ const site = normalizeCatalogSite(snapshot.site);
266
+ if (await contentHash(site) !== snapshot.contentHash)
267
+ return null;
268
+ return { ...snapshot, site };
269
+ }
270
+ function isSnapshotFresh(value, now) {
271
+ return value.observedAt <= now + MAX_FUTURE_SKEW_MS
272
+ && value.repairAfter > value.observedAt
273
+ && value.repairAfter - value.observedAt <= MAX_SNAPSHOT_AGE_MS
274
+ && value.repairAfter > now;
275
+ }
276
+ async function contentHash(site) {
277
+ const digest = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(JSON.stringify(site)));
278
+ return [...new Uint8Array(digest)].map((byte) => byte.toString(16).padStart(2, "0")).join("");
279
+ }
280
+ function utf8Bytes(value) {
281
+ return new TextEncoder().encode(value).byteLength;
282
+ }
283
+ function isRecord(value) {
284
+ return typeof value === "object" && value !== null && !Array.isArray(value);
285
+ }
286
+ //# sourceMappingURL=KvSiteConfigRepository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KvSiteConfigRepository.js","sourceRoot":"","sources":["../../src/bindings/KvSiteConfigRepository.ts"],"names":[],"mappings":"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"}
@@ -28,15 +28,14 @@ import { type CommitUploadArgs, type CreateUploadArgs, type CreateUploadResult,
28
28
  * # Multi-variant (#272)
29
29
  *
30
30
  * `createUpload` produces one presigned PUT URL per declared variant;
31
- * `commitUpload` HEAD-verifies every one. Storage keys are scoped
31
+ * `commitUpload` verifies and streams every object through a metadata rewrite. Storage keys are scoped
32
32
  * under a shared `<uploadGroupId>/` prefix so operators can eyeball
33
33
  * the variant set in R2 dashboards, and the orphan sweeper (#254)
34
34
  * can identify partially-committed groups by listing the prefix.
35
35
  *
36
36
  * Optimization runs agent-side in the MCP client's runtime. The
37
37
  * Worker never decodes / re-encodes bytes — it only verifies content-
38
- * type + size on the metadata returned by R2's HEAD-equivalent path
39
- * (`bucket.get` + `httpMetadata`).
38
+ * type + size from `bucket.get` before streaming the metadata-rewrite PUT.
40
39
  *
41
40
  * # Future: private bucket adapter
42
41
  *
@@ -1 +1 @@
1
- {"version":3,"file":"R2MediaStorage.d.ts","sourceRoot":"","sources":["../../src/bindings/R2MediaStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAGL,KAAK,gBAAgB,EAErB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EAEvB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,YAAY,EAGlB,MAAM,wBAAwB,CAAC;AAEhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AACH,qBAAa,cAAe,YAAW,YAAY;IAE/C,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB;;mDAE+C;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU;IAK3B;;;;;;sEAMkE;IAClE,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAjBL,MAAM,EAAE,QAAQ,EAChB,EAAE,EAAE,SAAS;IAC9B;;mDAE+C;IAC9B,UAAU,EAAE,MAAM;IACnC;;6CAEyC;IACzC,UAAU,EAAE,MAAM;IAClB;;;;;;sEAMkE;IACjD,KAAK,GAAE,WAAiC;IAgB3D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAE9B,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAwCjE,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IAoDzD,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAIrD,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;YAK3C,sBAAsB;IAiDpC;;;;;;;;2CAQuC;IACvC,OAAO,CAAC,sBAAsB;CAY/B"}
1
+ {"version":3,"file":"R2MediaStorage.d.ts","sourceRoot":"","sources":["../../src/bindings/R2MediaStorage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAGL,KAAK,gBAAgB,EAErB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EAEvB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,YAAY,EAGlB,MAAM,wBAAwB,CAAC;AAEhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,qBAAa,cAAe,YAAW,YAAY;IAE/C,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB;;mDAE+C;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU;IAK3B;;;;;;sEAMkE;IAClE,OAAO,CAAC,QAAQ,CAAC,KAAK;gBAjBL,MAAM,EAAE,QAAQ,EAChB,EAAE,EAAE,SAAS;IAC9B;;mDAE+C;IAC9B,UAAU,EAAE,MAAM;IACnC;;6CAEyC;IACzC,UAAU,EAAE,MAAM;IAClB;;;;;;sEAMkE;IACjD,KAAK,GAAE,WAAiC;IAgB3D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IAE9B,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAwCjE,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,UAAU,CAAC;IA2DzD,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC;IAIrD,YAAY,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;YAK3C,sBAAsB;IAyDpC;;;;;;;;2CAQuC;IACvC,OAAO,CAAC,sBAAsB;CAY/B"}
@@ -28,15 +28,14 @@ import { RandomUuidGenerator, extensionForMime, } from "@aotter/mantle-runtime";
28
28
  * # Multi-variant (#272)
29
29
  *
30
30
  * `createUpload` produces one presigned PUT URL per declared variant;
31
- * `commitUpload` HEAD-verifies every one. Storage keys are scoped
31
+ * `commitUpload` verifies and streams every object through a metadata rewrite. Storage keys are scoped
32
32
  * under a shared `<uploadGroupId>/` prefix so operators can eyeball
33
33
  * the variant set in R2 dashboards, and the orphan sweeper (#254)
34
34
  * can identify partially-committed groups by listing the prefix.
35
35
  *
36
36
  * Optimization runs agent-side in the MCP client's runtime. The
37
37
  * Worker never decodes / re-encodes bytes — it only verifies content-
38
- * type + size on the metadata returned by R2's HEAD-equivalent path
39
- * (`bucket.get` + `httpMetadata`).
38
+ * type + size from `bucket.get` before streaming the metadata-rewrite PUT.
40
39
  *
41
40
  * # Future: private bucket adapter
42
41
  *
@@ -123,16 +122,12 @@ export class R2MediaStorage {
123
122
  };
124
123
  }
125
124
  async commitUpload(args) {
126
- const variants = [];
127
- for (const spec of args.variants) {
128
- variants.push(await this.verifyAndCommitVariant(args, spec));
129
- }
130
125
  // Enforce the asset-shape invariant the renderer depends on. The
131
126
  // use case already validated this at create time; this is a
132
127
  // belt-and-suspenders check at the adapter-side commit path.
133
128
  // Exactly one primary, no duplicated (mime, role) pair (the latter
134
129
  // would have already collided on storage key in createUpload).
135
- const primaries = variants.filter((v) => v.role === "primary");
130
+ const primaries = args.variants.filter((v) => v.role === "primary");
136
131
  if (primaries.length !== 1) {
137
132
  throw new DiagnosticError(makeDiagnostic({
138
133
  code: "MEDIA_VARIANTS_INCOMPLETE",
@@ -140,11 +135,11 @@ export class R2MediaStorage {
140
135
  severity: "error",
141
136
  path: "adapter/R2MediaStorage/commitUpload",
142
137
  expected: "exactly one variant with role='primary'",
143
- value: variants.map((v) => v.role).join(","),
138
+ value: args.variants.map((v) => v.role).join(","),
144
139
  }));
145
140
  }
146
141
  const seenKey = new Set();
147
- for (const v of variants) {
142
+ for (const v of args.variants) {
148
143
  const key = `${v.mimeType}/${v.role}`;
149
144
  if (seenKey.has(key)) {
150
145
  throw new DiagnosticError(makeDiagnostic({
@@ -158,6 +153,18 @@ export class R2MediaStorage {
158
153
  }
159
154
  seenKey.add(key);
160
155
  }
156
+ const variants = [];
157
+ // At most three GET streams and three corresponding PUTs per invocation.
158
+ // Settle the whole batch before returning an error or starting another.
159
+ for (let offset = 0; offset < args.variants.length; offset += 3) {
160
+ const results = await Promise.allSettled(args.variants.slice(offset, offset + 3)
161
+ .map((spec) => this.verifyAndCommitVariant(args, spec)));
162
+ for (const result of results) {
163
+ if (result.status === "rejected")
164
+ throw result.reason;
165
+ variants.push(result.value);
166
+ }
167
+ }
161
168
  return {
162
169
  id: args.uploadGroupId,
163
170
  variants,
@@ -181,41 +188,51 @@ export class R2MediaStorage {
181
188
  const existing = await this.bucket.get(spec.storageKey);
182
189
  if (!existing)
183
190
  throw mediaDiagnostic("MEDIA_OBJECT_NOT_FOUND", { value: args.uploadGroupId });
184
- const actualMime = existing.httpMetadata?.contentType ?? "application/octet-stream";
185
- if (actualMime !== spec.mimeType) {
186
- throw mediaDiagnostic("MEDIA_MIME_REJECTED", {
187
- value: actualMime,
188
- expected: spec.mimeType,
191
+ try {
192
+ const actualMime = existing.httpMetadata?.contentType ?? "application/octet-stream";
193
+ if (actualMime !== spec.mimeType) {
194
+ throw mediaDiagnostic("MEDIA_MIME_REJECTED", {
195
+ value: actualMime,
196
+ expected: spec.mimeType,
197
+ });
198
+ }
199
+ if (existing.size > spec.maxBytes) {
200
+ throw mediaDiagnostic("MEDIA_VARIANT_SIZE_EXCEEDED", {
201
+ value: { mimeType: spec.mimeType, byteSize: existing.size },
202
+ expected: `${spec.mimeType} byteSize <= ${spec.maxBytes}`,
203
+ });
204
+ }
205
+ const customMetadata = {
206
+ ...existing.customMetadata,
207
+ committedAt: String(args.now),
208
+ role: spec.role,
209
+ uploadGroupId: args.uploadGroupId,
210
+ filename: args.filename,
211
+ };
212
+ if (args.alt)
213
+ customMetadata["alt"] = args.alt;
214
+ if (args.caption)
215
+ customMetadata["caption"] = args.caption;
216
+ const committed = await this.bucket.put(spec.storageKey, existing.body, {
217
+ httpMetadata: { contentType: actualMime },
218
+ customMetadata,
189
219
  });
220
+ if (!committed)
221
+ throw new Error("R2 metadata commit did not store the object.");
222
+ return {
223
+ mimeType: actualMime,
224
+ publicUrl: `${this.publicBase}/${spec.storageKey}`,
225
+ storageKey: spec.storageKey,
226
+ byteSize: existing.size,
227
+ role: spec.role,
228
+ };
190
229
  }
191
- if (existing.size > spec.maxBytes) {
192
- throw mediaDiagnostic("MEDIA_VARIANT_SIZE_EXCEEDED", {
193
- value: { mimeType: spec.mimeType, byteSize: existing.size },
194
- expected: `${spec.mimeType} byteSize <= ${spec.maxBytes}`,
195
- });
230
+ catch (error) {
231
+ // Validation may reject before PUT takes ownership of the GET stream.
232
+ // A failed PUT may already have consumed/errored it; preserve the cause.
233
+ await existing.body.cancel().catch(() => { });
234
+ throw error;
196
235
  }
197
- const customMetadata = {
198
- ...existing.customMetadata,
199
- committedAt: String(args.now),
200
- role: spec.role,
201
- uploadGroupId: args.uploadGroupId,
202
- filename: args.filename,
203
- };
204
- if (args.alt)
205
- customMetadata["alt"] = args.alt;
206
- if (args.caption)
207
- customMetadata["caption"] = args.caption;
208
- await this.bucket.put(spec.storageKey, existing.body, {
209
- httpMetadata: { contentType: actualMime },
210
- customMetadata,
211
- });
212
- return {
213
- mimeType: actualMime,
214
- publicUrl: `${this.publicBase}/${spec.storageKey}`,
215
- storageKey: spec.storageKey,
216
- byteSize: existing.size,
217
- role: spec.role,
218
- };
219
236
  }
220
237
  /** Object keys are server-generated. Layout:
221
238
  *
@@ -1 +1 @@
1
- {"version":3,"file":"R2MediaStorage.js","sourceRoot":"","sources":["../../src/bindings/R2MediaStorage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"R2MediaStorage.js","sourceRoot":"","sources":["../../src/bindings/R2MediaStorage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EACL,mBAAmB,EACnB,gBAAgB,GAajB,MAAM,wBAAwB,CAAC;AAEhC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,MAAM,OAAO,cAAc;IAEN;IACA;IAIA;IAYA;IAlBnB,YACmB,MAAgB,EAChB,EAAa;IAC9B;;mDAE+C;IAC9B,UAAkB;IACnC;;6CAEyC;IACzC,UAAkB;IAClB;;;;;;sEAMkE;IACjD,QAAqB,mBAAmB;QAjBxC,WAAM,GAAN,MAAM,CAAU;QAChB,OAAE,GAAF,EAAE,CAAW;QAIb,eAAU,GAAV,UAAU,CAAQ;QAYlB,UAAK,GAAL,KAAK,CAAmC;QAEzD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,eAAe,CACvB,cAAc,CAAC;gBACb,IAAI,EAAE,sBAAsB;gBAC5B,KAAK,EAAE,SAAS;gBAChB,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,wBAAwB;gBAC9B,QAAQ,EAAE,4CAA4C;aACvD,CAAC,CACH,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACnD,CAAC;IAEgB,UAAU,CAAS;IAEpC,KAAK,CAAC,YAAY,CAAC,IAAsB;QACvC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAChF,MAAM,YAAY,GAAuB,EAAE,CAAC;QAC5C,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACpC,MAAM,UAAU,GAAG,IAAI,CAAC,sBAAsB,CAC5C,IAAI,CAAC,aAAa,EAClB,IAAI,CAAC,OAAO,EACZ,OAAO,CACR,CAAC;YACF,+DAA+D;YAC/D,6DAA6D;YAC7D,8DAA8D;YAC9D,kEAAkE;YAClE,yDAAyD;YACzD,2DAA2D;YAC3D,yDAAyD;YACzD,gCAAgC;YAChC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC;YAC/E,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;YAC7D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE;gBACnD,MAAM,EAAE,KAAK;gBACb,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;aACxC,CAAC,CAAC;YACH,YAAY,CAAC,IAAI,CAAC;gBAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,MAAM,EAAE,KAAK;gBACb,SAAS,EAAE,MAAM,CAAC,GAAG;gBACrB,UAAU;gBACV,SAAS,EAAE,GAAG,IAAI,CAAC,UAAU,IAAI,UAAU,EAAE;gBAC7C,eAAe,EAAE,EAAE,cAAc,EAAE,OAAO,CAAC,QAAQ,EAAE;aACtD,CAAC,CAAC;QACL,CAAC;QACD,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,YAAY;YACZ,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAsB;QACvC,iEAAiE;QACjE,4DAA4D;QAC5D,6DAA6D;QAC7D,mEAAmE;QACnE,+DAA+D;QAC/D,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QACpE,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,eAAe,CACvB,cAAc,CAAC;gBACb,IAAI,EAAE,2BAA2B;gBACjC,KAAK,EAAE,SAAS;gBAChB,QAAQ,EAAE,OAAO;gBACjB,IAAI,EAAE,qCAAqC;gBAC3C,QAAQ,EAAE,yCAAyC;gBACnD,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;aAClD,CAAC,CACH,CAAC;QACJ,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,MAAM,GAAG,GAAG,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACtC,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,IAAI,eAAe,CACvB,cAAc,CAAC;oBACb,IAAI,EAAE,2BAA2B;oBACjC,KAAK,EAAE,SAAS;oBAChB,QAAQ,EAAE,OAAO;oBACjB,IAAI,EAAE,qCAAqC;oBAC3C,QAAQ,EAAE,qCAAqC;oBAC/C,KAAK,EAAE,GAAG;iBACX,CAAC,CACH,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;QAED,MAAM,QAAQ,GAAmB,EAAE,CAAC;QACpC,yEAAyE;QACzE,wEAAwE;QACxE,KAAK,IAAI,MAAM,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC;YAChE,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC;iBAC7E,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3D,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;gBAC7B,IAAI,MAAM,CAAC,MAAM,KAAK,UAAU;oBAAE,MAAM,MAAM,CAAC,MAAM,CAAC;gBACtD,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC;QACH,CAAC;QAED,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,aAAa;YACtB,QAAQ;YACR,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,SAAS,EAAE,IAAI,CAAC,GAAG;YACnB,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE;SACtC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAsB;QACvC,OAAO,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;IACjD,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,IAAsB;QACvC,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;IAGO,KAAK,CAAC,sBAAsB,CAClC,IAAsB,EACtB,IAA6B;QAE7B,iEAAiE;QACjE,+DAA+D;QAC/D,0DAA0D;QAC1D,wCAAwC;QACxC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACxD,IAAI,CAAC,QAAQ;YAAE,MAAM,eAAe,CAAC,wBAAwB,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;QAE9F,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,QAAQ,CAAC,YAAY,EAAE,WAAW,IAAI,0BAA0B,CAAC;YACpF,IAAI,UAAU,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACjC,MAAM,eAAe,CAAC,qBAAqB,EAAE;oBAC3C,KAAK,EAAE,UAAU;oBACjB,QAAQ,EAAE,IAAI,CAAC,QAAQ;iBACxB,CAAC,CAAC;YACL,CAAC;YACD,IAAI,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClC,MAAM,eAAe,CAAC,6BAA6B,EAAE;oBACnD,KAAK,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,EAAE;oBAC3D,QAAQ,EAAE,GAAG,IAAI,CAAC,QAAQ,gBAAgB,IAAI,CAAC,QAAQ,EAAE;iBAC1D,CAAC,CAAC;YACL,CAAC;YAED,MAAM,cAAc,GAA2B;gBAC7C,GAAG,QAAQ,CAAC,cAAc;gBAC1B,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;gBAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,aAAa,EAAE,IAAI,CAAC,aAAa;gBACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ;aACxB,CAAC;YACF,IAAI,IAAI,CAAC,GAAG;gBAAE,cAAc,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC;YAC/C,IAAI,IAAI,CAAC,OAAO;gBAAE,cAAc,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC;YAE3D,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,EAAE;gBACtE,YAAY,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE;gBACzC,cAAc;aACf,CAAC,CAAC;YACH,IAAI,CAAC,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;YAEhF,OAAO;gBACL,QAAQ,EAAE,UAAU;gBACpB,SAAS,EAAE,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,EAAE;gBAClD,UAAU,EAAE,IAAI,CAAC,UAAU;gBAC3B,QAAQ,EAAE,QAAQ,CAAC,IAAI;gBACvB,IAAI,EAAE,IAAI,CAAC,IAAI;aAChB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,sEAAsE;YACtE,yEAAyE;YACzE,MAAM,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAC7C,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;;;;2CAQuC;IAC/B,sBAAsB,CAC5B,aAAqB,EACrB,OAAe,EACf,OAAgC;QAEhC,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC;YACzD,CAAC,CAAC,aAAa;YACf,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAC/C,OAAO,GAAG,aAAa,GAAG,YAAY,IAAI,OAAO,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;IAClE,CAAC;CACF;AAED,SAAS,eAAe,CACtB,IAGiC,EACjC,MAA6C;IAE7C,OAAO,IAAI,eAAe,CACxB,cAAc,CAAC;QACb,IAAI;QACJ,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE,OAAO;QACjB,IAAI,EAAE,qCAAqC;QAC3C,GAAG,MAAM;KACV,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -2,6 +2,8 @@ import type { MantleCloudflareConfig } from "../mount/cmsConfig.js";
2
2
  export interface ConventionalBindingsEnv {
3
3
  readonly DB?: D1Database;
4
4
  readonly ASSETS?: Fetcher;
5
+ /** Optional app/environment-owned KV namespace for MCP catalog settings. */
6
+ readonly MANTLE_KV?: KVNamespace;
5
7
  }
6
8
  export type MantleWorkerBindings = MantleCloudflareConfig["bindings"];
7
9
  /** Bind the conventional Cloudflare names to Mantle's existing runtime adapters. */
@@ -1 +1 @@
1
- {"version":3,"file":"conventionalBindings.d.ts","sourceRoot":"","sources":["../../src/bindings/conventionalBindings.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAQpE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,MAAM,oBAAoB,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;AAEtE,oFAAoF;AACpF,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,uBAAuB,GAC3B,oBAAoB,CAMtB"}
1
+ {"version":3,"file":"conventionalBindings.d.ts","sourceRoot":"","sources":["../../src/bindings/conventionalBindings.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAQpE,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,CAAC,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,4EAA4E;IAC5E,QAAQ,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC;CAClC;AAED,MAAM,MAAM,oBAAoB,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAC;AAEtE,oFAAoF;AACpF,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,uBAAuB,GAC3B,oBAAoB,CAStB"}
@@ -10,6 +10,9 @@ export function createConventionalBindings(env) {
10
10
  return {
11
11
  db: new D1DatabaseDriver(env.DB),
12
12
  adminAssets: env.ASSETS ? new AssetsAssetServer(env.ASSETS) : NO_ASSETS,
13
+ ...(env.MANTLE_KV
14
+ ? { mcpCatalogKv: { namespace: env.MANTLE_KV, scope: "default" } }
15
+ : {}),
13
16
  };
14
17
  }
15
18
  //# sourceMappingURL=conventionalBindings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"conventionalBindings.js","sourceRoot":"","sources":["../../src/bindings/conventionalBindings.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,yEAAyE;AACzE,kEAAkE;AAClE,MAAM,SAAS,GAAqB,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;AAShE,oFAAoF;AACpF,MAAM,UAAU,0BAA0B,CACxC,GAA4B;IAE5B,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAC7E,OAAO;QACL,EAAE,EAAE,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;KACxE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"conventionalBindings.js","sourceRoot":"","sources":["../../src/bindings/conventionalBindings.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,yEAAyE;AACzE,kEAAkE;AAClE,MAAM,SAAS,GAAqB,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;AAWhE,oFAAoF;AACpF,MAAM,UAAU,0BAA0B,CACxC,GAA4B;IAE5B,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAC7E,OAAO;QACL,EAAE,EAAE,IAAI,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QACvE,GAAG,CAAC,GAAG,CAAC,SAAS;YACf,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,SAAS,EAAE,GAAG,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE;YAClE,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;AACJ,CAAC"}
@@ -2,5 +2,6 @@ export { D1DatabaseDriver, type D1QueryMetric, type D1QueryObserver, } from "./D
2
2
  export { AssetsAssetServer } from "./AssetsAssetServer.js";
3
3
  export { createConventionalBindings, type ConventionalBindingsEnv, type MantleWorkerBindings, } from "./conventionalBindings.js";
4
4
  export { R2MediaStorage } from "./R2MediaStorage.js";
5
+ export { KvSiteConfigRepository, type McpCatalogKvBinding, type McpCatalogSiteConfig, type McpCatalogSiteConfigReader, } from "./KvSiteConfigRepository.js";
5
6
  export { WorkersQueueHookDispatcher, createQueueHandler, } from "./WorkersQueueHookDispatcher.js";
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bindings/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,eAAe,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,0BAA0B,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,GAC1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EACL,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/bindings/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,eAAe,GACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,0BAA0B,EAC1B,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,GAC1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EACL,sBAAsB,EACtB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,0BAA0B,GAChC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,iCAAiC,CAAC"}
@@ -2,5 +2,6 @@ export { D1DatabaseDriver, } from "./D1DatabaseDriver.js";
2
2
  export { AssetsAssetServer } from "./AssetsAssetServer.js";
3
3
  export { createConventionalBindings, } from "./conventionalBindings.js";
4
4
  export { R2MediaStorage } from "./R2MediaStorage.js";
5
+ export { KvSiteConfigRepository, } from "./KvSiteConfigRepository.js";
5
6
  export { WorkersQueueHookDispatcher, createQueueHandler, } from "./WorkersQueueHookDispatcher.js";
6
7
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bindings/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,GAGjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,0BAA0B,GAG3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EACL,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,iCAAiC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bindings/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,gBAAgB,GAGjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,0BAA0B,GAG3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EACL,sBAAsB,GAIvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,0BAA0B,EAC1B,kBAAkB,GACnB,MAAM,iCAAiC,CAAC"}