diff --git a/.changeset/odd-guests-beam.md b/.changeset/odd-guests-beam.md new file mode 100644 index 000000000000..33b01d52e118 --- /dev/null +++ b/.changeset/odd-guests-beam.md @@ -0,0 +1,6 @@ +--- +"wrangler": patch +--- + +fix: fix broken local Durable Object proxies + diff --git a/fixtures/get-platform-proxy/tests/get-platform-proxy.env.test.ts b/fixtures/get-platform-proxy/tests/get-platform-proxy.env.test.ts index 20bf1d09317a..e553c2370181 100644 --- a/fixtures/get-platform-proxy/tests/get-platform-proxy.env.test.ts +++ b/fixtures/get-platform-proxy/tests/get-platform-proxy.env.test.ts @@ -207,7 +207,7 @@ describe("getPlatformProxy - bindings", () => { await dispose(); }); - it.skip("correctly obtains functioning DO bindings (provided by external local workers)", async () => { + it("correctly obtains functioning DO bindings (provided by external local workers)", async () => { const { env, dispose } = await getPlatformProxy({ configPath: wranglerTomlFilePath, }); diff --git a/packages/wrangler/src/dev/miniflare.ts b/packages/wrangler/src/dev/miniflare.ts index 41d287410263..964609598569 100644 --- a/packages/wrangler/src/dev/miniflare.ts +++ b/packages/wrangler/src/dev/miniflare.ts @@ -97,10 +97,10 @@ function createProxyPrototypeClass(handlerSuperKlass, getUnknownPrototypeKey) { return getUnknownPrototypeKey(key); } }); - + return Reflect.construct(handlerSuperKlass, [ctx, env], klass); } - + Reflect.setPrototypeOf(klass.prototype, handlerSuperKlass.prototype); Reflect.setPrototypeOf(klass, handlerSuperKlass); @@ -111,7 +111,7 @@ function createDurableObjectClass({ className, proxyUrl }) { const klass = createProxyPrototypeClass(DurableObject, (key) => { throw new Error(\`Cannot access \\\`\${className}#\${key}\\\` as Durable Object RPC is not yet supported between multiple \\\`wrangler dev\\\` sessions.\`); }); - + // Forward regular HTTP requests to the other "wrangler dev" session klass.prototype.fetch = function(request) { if (proxyUrl === undefined) { @@ -121,7 +121,7 @@ function createDurableObjectClass({ className, proxyUrl }) { proxyRequest.headers.set(HEADER_URL, request.url); proxyRequest.headers.set(HEADER_NAME, className); proxyRequest.headers.set(HEADER_ID, this.ctx.id.toString()); - proxyRequest.headers.set(HEADER_CF_BLOB, JSON.stringify(request.cf)); + proxyRequest.headers.set(HEADER_CF_BLOB, JSON.stringify(request.cf ?? {})); return fetch(proxyRequest); }; @@ -147,7 +147,7 @@ export default { const originalUrl = request.headers.get(HEADER_URL); const className = request.headers.get(HEADER_NAME); const idString = request.headers.get(HEADER_ID); - const cfBlobString = request.headers.get(HEADER_CF_BLOB); + const cf = JSON.parse(request.headers.get(HEADER_CF_BLOB)); if (originalUrl === null || className === null || idString === null) { return new Response("[wrangler] Received Durable Object proxy request with missing headers", { status: 400 }); } @@ -159,7 +159,7 @@ export default { const ns = env[className]; const id = ns.idFromString(idString); const stub = ns.get(id); - return stub.fetch(request, { cf: JSON.parse(cfBlobString ?? "{}") }); + return stub.fetch(request, { cf }); } } `;