[miniflare] Simplify dev-registry proxy and fix asset routing#12600
Draft
[miniflare] Simplify dev-registry proxy and fix asset routing#12600
Conversation
|
b2f8d24 to
5fb825a
Compare
create-cloudflare
@cloudflare/kv-asset-handler
miniflare
@cloudflare/pages-shared
@cloudflare/unenv-preset
@cloudflare/vite-plugin
@cloudflare/vitest-pool-workers
@cloudflare/workers-editor-shared
@cloudflare/workers-utils
wrangler
commit: |
Replace HTTP-based dev registry proxy with native workerd debug port: - Use WorkerdDebugPort binding for direct Cap'n Proto RPC to remote workers - Service bindings and DOs now route through debug port instead of HTTP proxy - Support RPC method calls, fetch, and tail handlers through debug port - Add HTTP fallback for WebSocket upgrades (debug port RPC doesn't support them) - Remove old dev-registry.worker.ts HTTP proxy implementation - Simplify external-service.ts by removing HTTP proxy infrastructure All 17 dev-registry tests pass including WebSocket upgrades.
The vite dev <-> vite dev tail handler test was missing the waitForTimeout parameter on one of its waitFor calls, causing it to use the default (shorter) timeout which could flake in CI.
…port RPC Remove the HTTP fallback, eager body buffering, _client GC hack, and WebSocket special-casing from the dev-registry proxy workers. These workarounds existed because the workerd debug port would close connections prematurely when the initial subrequest completed. With the refcounted DebugPortConnectionState fix in workerd (cloudflare/workerd#6100), connections now survive as long as any response body or WebSocket is in use. Key changes: - Replace hasAssets/entryAddress with defaultEntrypointService and userWorkerService fields in WorkerDefinition/RegistryEntry - Route DOs and named entrypoints through userWorkerService (bypassing assets/vite proxy layer) instead of hardcoding core:user: prefix - Validate required registry fields in resolveTarget() to handle stale entries - Inline and delete getWorkerdServiceName() helper - Remove dead entryAddress field and fetchViaHttp code path - Remove DO WebSocket 501 error and DO body buffering workarounds
…uting Vite workers with assets were incorrectly routing through assets:rpc-proxy in the dev registry, but in vite dev mode assets are served by the vite proxy worker, not workerd's asset pipeline. This caused cross-service fetch to vite workers with assets to fail (timeout). Add unsafeOverrideDefaultEntrypoint to miniflare's core options schema so the vite plugin can explicitly specify which workerd service handles the default entrypoint. This replaces the brittle inference from unsafeDirectSockets[].serviceName.
…nd tests After the debug port RPC refactor, unsafeDirectSockets in the user worker config, vite plugin, and dev-registry tests no longer serve a functional purpose — nobody reads the socket URLs. The only remaining use is in wrangler's ProxyController for InspectorProxyWorker (not touched here).
… cross-worker dev registry
The Reflect.has check already handles keys that exist on the target. For keys not on the target, the runtime doesn't probe handler properties through the proxy get trap in a way that requires suppression — confirmed by tests passing without it.
…ndings instead Instead of mutating workerOpts with symbol-tagged designators before plugin processing (requiring every consumer to special-case them), we now let the plugin system process all bindings normally, then rewrite external service bindings and tails to point at the dev registry proxy afterward. This follows the same post-processing pattern already used for assets at line 1673. Removes kResolvedServiceDesignator, ResolvedServiceDesignator, the zod validator, and checks in getCustomServiceDesignator, maybeGetCustomServiceService, and normaliseServiceDesignator.
d3a87ad to
4c37d41
Compare
The proxy's get trap now returns values that are both callable (for env.SERVICE.method()) and thenable (for await env.SERVICE.property), matching workerd's JsRpcProperty behavior. Without the .then property, awaiting a proxy-intercepted property would resolve to the function itself rather than triggering remote resolution.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Depends on cloudflare/workerd#6100 (refcounted debug port connection state).
Simplifies the dev-registry proxy worker now that the workerd debug port fix keeps connections alive for deferred proxying (WebSocket passthrough, streamed response bodies).
fetchViaHttpHTTP fallback — WebSocket upgrades now work natively through the debug port RPC_clientreference hack that was preventing GC of the debug port connectionresponse.arrayBuffer()body buffering workaroundhasAssets: booleanwithdefaultEntrypointService: stringinWorkerDefinitionfor correct routing to the right workerd service:assets:rpc-proxy:${name}for miniflare/wrangler workers with assetscore:user:__vite_proxy_worker__for vite workerscore:user:${name}for plain workerswaitForTimeoutin vite↔vite tail handler test