Skip to content
File

Blob: src/workerd/api/tests/connect-handler-test-proxy.js

javascript39 lines
1// Copyright (c) 2026 Cloudflare, Inc.
2// Licensed under the Apache 2.0 license found in the LICENSE file or at:
3// https://opensource.org/licenses/Apache-2.0
4import { connect } from 'cloudflare:sockets';
5import { WorkerEntrypoint } from 'cloudflare:workers';
6 
7export class ConnectProxy extends WorkerEntrypoint {
8 async connect(socket) {
9 // proxy for ConnectEndpoint instance on port 8083.
10 let upstream = connect('localhost:8083');
11 await Promise.all([
12 socket.readable.pipeTo(upstream.writable),
13 upstream.readable.pipeTo(socket.writable),
14 ]);
15 }
16}
17 
18export class ConnectEndpoint extends WorkerEntrypoint {
19 async connect(socket) {
20 const enc = new TextEncoder();
21 let writer = socket.writable.getWriter();
22 await writer.write(enc.encode('hello-from-endpoint'));
23 await writer.close();
24 }
25}
26 
27// Reached via a service binding from connect-handler-test.js. Awaits socket.opened and echoes back
28// the observed localAddress, which on the service-binding path is the verbatim authority string
29// the caller passed to fetcher.connect(...). The client test asserts strict equality.
30export class LocalAddressEndpoint extends WorkerEntrypoint {
31 async connect(socket) {
32 const { localAddress } = await socket.opened;
33 const enc = new TextEncoder();
34 const writer = socket.writable.getWriter();
35 await writer.write(enc.encode(`OK:${localAddress}`));
36 await writer.close();
37 }
38}