@betterportal/tunnels 1.0.33 → 1.0.35
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/SPEC.md +6 -3
- package/lib/.bsb/clients/service-tunnels-client.d.ts +28 -9
- package/lib/.bsb/clients/service-tunnels-client.d.ts.map +1 -1
- package/lib/.bsb/clients/service-tunnels-client.js +25 -10
- package/lib/.bsb/clients/service-tunnels-client.js.map +1 -1
- package/lib/.bsb/clients/service-tunnels-proxy.d.ts +68 -1
- package/lib/.bsb/clients/service-tunnels-proxy.d.ts.map +1 -1
- package/lib/.bsb/clients/service-tunnels-proxy.js +51 -1
- package/lib/.bsb/clients/service-tunnels-proxy.js.map +1 -1
- package/lib/cli.js +56 -41
- package/lib/cli.js.map +1 -1
- package/lib/plugins/service-tunnels-client/index.d.ts +23 -7
- package/lib/plugins/service-tunnels-client/index.d.ts.map +1 -1
- package/lib/plugins/service-tunnels-client/index.js +85 -61
- package/lib/plugins/service-tunnels-client/index.js.map +1 -1
- package/lib/plugins/service-tunnels-client/registry.d.ts +13 -7
- package/lib/plugins/service-tunnels-client/registry.d.ts.map +1 -1
- package/lib/plugins/service-tunnels-client/registry.js.map +1 -1
- package/lib/plugins/service-tunnels-proxy/http.d.ts +1 -0
- package/lib/plugins/service-tunnels-proxy/http.d.ts.map +1 -1
- package/lib/plugins/service-tunnels-proxy/http.js +4 -0
- package/lib/plugins/service-tunnels-proxy/http.js.map +1 -1
- package/lib/plugins/service-tunnels-proxy/index.d.ts +62 -0
- package/lib/plugins/service-tunnels-proxy/index.d.ts.map +1 -1
- package/lib/plugins/service-tunnels-proxy/index.js +177 -30
- package/lib/plugins/service-tunnels-proxy/index.js.map +1 -1
- package/lib/schemas/service-tunnels-admin.json +1 -1
- package/lib/schemas/service-tunnels-admin.plugin.json +1 -1
- package/lib/schemas/service-tunnels-client.json +47 -17
- package/lib/schemas/service-tunnels-client.plugin.json +2 -2
- package/lib/schemas/service-tunnels-proxy.json +122 -2
- package/lib/schemas/service-tunnels-proxy.plugin.json +2 -2
- package/package.json +1 -1
package/SPEC.md
CHANGED
|
@@ -80,11 +80,11 @@ Client side:
|
|
|
80
80
|
- One websocket per active tunnel for MVP.
|
|
81
81
|
- A CLI process may open multiple tunnel websockets from one `.bettertunnel` config.
|
|
82
82
|
- Requests are multiplexed over the tunnel websocket using request IDs.
|
|
83
|
-
- Each proxied request carries method, path, query, headers, body
|
|
83
|
+
- Each proxied request carries method, path, query, headers, a bounded body, and a response stream.
|
|
84
84
|
- Client sends heartbeat every 30 seconds.
|
|
85
85
|
- Two missed heartbeats force disconnect and session cleanup.
|
|
86
|
-
- Request bodies stream immediately.
|
|
87
|
-
-
|
|
86
|
+
- Request bodies are buffered up to the configured request-body limit; response headers and body chunks stream immediately.
|
|
87
|
+
- The total request timeout applies while waiting for response headers; SSE drops that total cap after headers and remains subject to the idle timeout.
|
|
88
88
|
- If the client disconnects mid-request, return `502`.
|
|
89
89
|
- Idle data timeout: 30 seconds for anonymous tunnels, 60 seconds for authenticated tunnels.
|
|
90
90
|
- Total request timeout: 60 seconds for anonymous tunnels, 5 minutes for authenticated tunnels.
|
|
@@ -99,6 +99,7 @@ tunnel.close
|
|
|
99
99
|
request.start
|
|
100
100
|
request.body
|
|
101
101
|
request.end
|
|
102
|
+
request.cancel
|
|
102
103
|
response.start
|
|
103
104
|
response.body
|
|
104
105
|
response.end
|
|
@@ -508,6 +509,8 @@ CLI self-hosting behavior:
|
|
|
508
509
|
- `btunnel host .` can serve a static directory and expose it publicly without a separate local server. It picks a free local port automatically; `--port <port>` overrides, and startup fails fast if that port is unavailable (no tunnel is started).
|
|
509
510
|
- `btunnel host --dev --port <port> <command...>` can run a local dev server and expose its selected port. `--port` is required because the dev command, not the CLI, owns the listener.
|
|
510
511
|
- `btunnel up` reads `.bettertunnel.json`; each tunnel entry can optionally orchestrate its own service:
|
|
512
|
+
- `btunnel up <prefix>` starts only the single entry whose configured `prefix` matches.
|
|
513
|
+
- `btunnel up --proc` opens each entry in its own terminal window and requires at least two entries.
|
|
511
514
|
- `name`: label used for log prefixes and errors.
|
|
512
515
|
- `run`: shell command the CLI starts and owns (`port` required; killed as a tree on exit/ctrl-c; if it exits, all services stop and `up` exits non-zero).
|
|
513
516
|
- `cwd`: working directory for `run` (only valid with `run`).
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Auto-generated BSB virtual client for service-tunnels-client
|
|
3
3
|
* DO NOT EDIT - Regenerated on every build
|
|
4
|
-
* @version 1.0.
|
|
4
|
+
* @version 1.0.35
|
|
5
5
|
*/
|
|
6
6
|
import { ServiceClient, BSBService } from "@bsb/base";
|
|
7
7
|
import type { Observable, BSBServiceClientDefinition, EventInputType, EventOutputType } from "@bsb/base";
|
|
@@ -23,7 +23,13 @@ declare const _proxyMetricsSchema: import("anyvali").ObjectSchema<{
|
|
|
23
23
|
originMs: import("anyvali").OptionalSchema<import("@bsb/base").BSBType>;
|
|
24
24
|
internalServerMs: import("anyvali").OptionalSchema<import("@bsb/base").BSBType>;
|
|
25
25
|
}>;
|
|
26
|
+
declare const _proxyCancelSchema: import("anyvali").ObjectSchema<{
|
|
27
|
+
hostname: import("anyvali").StringSchema;
|
|
28
|
+
requestId: import("anyvali").StringSchema;
|
|
29
|
+
}>;
|
|
26
30
|
declare const _proxyRequestSchema: import("anyvali").ObjectSchema<{
|
|
31
|
+
publicServerId: import("anyvali").StringSchema;
|
|
32
|
+
publicRequestId: import("anyvali").StringSchema;
|
|
27
33
|
hostname: import("anyvali").StringSchema;
|
|
28
34
|
method: import("anyvali").StringSchema;
|
|
29
35
|
path: import("anyvali").StringSchema;
|
|
@@ -36,11 +42,9 @@ declare const _proxyRequestOutputSchema: import("anyvali").ObjectSchema<{
|
|
|
36
42
|
ownerServerId: import("anyvali").StringSchema;
|
|
37
43
|
status: import("@bsb/base").BSBType;
|
|
38
44
|
headers: import("anyvali").RecordSchema<import("anyvali").StringSchema>;
|
|
39
|
-
body: import("anyvali").StringSchema
|
|
45
|
+
body: import("anyvali").OptionalSchema<import("anyvali").StringSchema>;
|
|
40
46
|
webStartedAt: import("@bsb/base").BSBType;
|
|
41
47
|
clientApiRoundtripMs: import("@bsb/base").BSBType;
|
|
42
|
-
cliOverheadMs: import("anyvali").OptionalSchema<import("@bsb/base").BSBType>;
|
|
43
|
-
originMs: import("anyvali").OptionalSchema<import("@bsb/base").BSBType>;
|
|
44
48
|
}>;
|
|
45
49
|
declare const _EventSchemas: {
|
|
46
50
|
readonly onEvents: {
|
|
@@ -70,10 +74,20 @@ declare const _EventSchemas: {
|
|
|
70
74
|
description?: string;
|
|
71
75
|
readonly __brand: "fire-and-forget";
|
|
72
76
|
};
|
|
77
|
+
readonly 'proxy.cancel': {
|
|
78
|
+
input: import("anyvali").ObjectSchema<{
|
|
79
|
+
hostname: import("anyvali").StringSchema;
|
|
80
|
+
requestId: import("anyvali").StringSchema;
|
|
81
|
+
}>;
|
|
82
|
+
description?: string;
|
|
83
|
+
readonly __brand: "fire-and-forget";
|
|
84
|
+
};
|
|
73
85
|
};
|
|
74
86
|
readonly onReturnableEvents: {
|
|
75
87
|
readonly 'proxy.request': {
|
|
76
88
|
input: import("anyvali").ObjectSchema<{
|
|
89
|
+
publicServerId: import("anyvali").StringSchema;
|
|
90
|
+
publicRequestId: import("anyvali").StringSchema;
|
|
77
91
|
hostname: import("anyvali").StringSchema;
|
|
78
92
|
method: import("anyvali").StringSchema;
|
|
79
93
|
path: import("anyvali").StringSchema;
|
|
@@ -86,11 +100,9 @@ declare const _EventSchemas: {
|
|
|
86
100
|
ownerServerId: import("anyvali").StringSchema;
|
|
87
101
|
status: import("@bsb/base").BSBType;
|
|
88
102
|
headers: import("anyvali").RecordSchema<import("anyvali").StringSchema>;
|
|
89
|
-
body: import("anyvali").StringSchema
|
|
103
|
+
body: import("anyvali").OptionalSchema<import("anyvali").StringSchema>;
|
|
90
104
|
webStartedAt: import("@bsb/base").BSBType;
|
|
91
105
|
clientApiRoundtripMs: import("@bsb/base").BSBType;
|
|
92
|
-
cliOverheadMs: import("anyvali").OptionalSchema<import("@bsb/base").BSBType>;
|
|
93
|
-
originMs: import("anyvali").OptionalSchema<import("@bsb/base").BSBType>;
|
|
94
106
|
}>;
|
|
95
107
|
description?: string;
|
|
96
108
|
defaultTimeout?: number;
|
|
@@ -104,6 +116,9 @@ export type WsToOriginInput = EventInputType<{
|
|
|
104
116
|
export type ProxyMetricsInput = EventInputType<{
|
|
105
117
|
input: typeof _proxyMetricsSchema;
|
|
106
118
|
}>;
|
|
119
|
+
export type ProxyCancelInput = EventInputType<{
|
|
120
|
+
input: typeof _proxyCancelSchema;
|
|
121
|
+
}>;
|
|
107
122
|
export type ProxyRequestInput = EventInputType<{
|
|
108
123
|
input: typeof _proxyRequestSchema;
|
|
109
124
|
}>;
|
|
@@ -124,9 +139,13 @@ export default class TunnelsClientClient extends ServiceClient<any, typeof _Even
|
|
|
124
139
|
proxyMetrics(obs: Observable, input: ProxyMetricsInput): Promise<void>;
|
|
125
140
|
/** Send final proxy request timings to the connected tunnel client for a specific server */
|
|
126
141
|
proxyMetricsSpecific(serverId: string, obs: Observable, input: ProxyMetricsInput): Promise<void>;
|
|
127
|
-
/**
|
|
142
|
+
/** Cancel an active HTTP request */
|
|
143
|
+
proxyCancel(obs: Observable, input: ProxyCancelInput): Promise<void>;
|
|
144
|
+
/** Cancel an active HTTP request for a specific server */
|
|
145
|
+
proxyCancelSpecific(serverId: string, obs: Observable, input: ProxyCancelInput): Promise<void>;
|
|
146
|
+
/** Proxy an HTTP request through a connected tunnel client (default timeout: 310s) */
|
|
128
147
|
proxyRequest(obs: Observable, input: ProxyRequestInput, timeout?: number): Promise<ProxyRequestOutput>;
|
|
129
|
-
/** Proxy an HTTP request through a connected tunnel client for a specific server (default timeout:
|
|
148
|
+
/** Proxy an HTTP request through a connected tunnel client for a specific server (default timeout: 310s) */
|
|
130
149
|
proxyRequestSpecific(serverId: string, obs: Observable, input: ProxyRequestInput, timeout?: number): Promise<ProxyRequestOutput>;
|
|
131
150
|
}
|
|
132
151
|
export { TunnelsClientClient };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-tunnels-client.d.ts","sourceRoot":"","sources":["../../../src/.bsb/clients/service-tunnels-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAsH,MAAM,WAAW,CAAC;AAC1K,OAAO,KAAK,EAAE,UAAU,EAAE,0BAA0B,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEzG,QAAA,MAAM,iBAAiB;;;;;;;;EAQnB,CAAC;AACL,QAAA,MAAM,mBAAmB;;;;;;;;EAQrB,CAAC;AACL,QAAA,MAAM,mBAAmB
|
|
1
|
+
{"version":3,"file":"service-tunnels-client.d.ts","sourceRoot":"","sources":["../../../src/.bsb/clients/service-tunnels-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAsH,MAAM,WAAW,CAAC;AAC1K,OAAO,KAAK,EAAE,UAAU,EAAE,0BAA0B,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEzG,QAAA,MAAM,iBAAiB;;;;;;;;EAQnB,CAAC;AACL,QAAA,MAAM,mBAAmB;;;;;;;;EAQrB,CAAC;AACL,QAAA,MAAM,kBAAkB;;;EAGpB,CAAC;AACL,QAAA,MAAM,mBAAmB;;;;;;;;;EASrB,CAAC;AACL,QAAA,MAAM,yBAAyB;;;;;;;;EAQ3B,CAAC;AAEL,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CASjB,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,cAAc,CAAC;IAAE,KAAK,EAAE,OAAO,iBAAiB,CAAA;CAAE,CAAC,CAAC;AAClF,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC;IAAE,KAAK,EAAE,OAAO,mBAAmB,CAAA;CAAE,CAAC,CAAC;AACtF,MAAM,MAAM,gBAAgB,GAAG,cAAc,CAAC;IAAE,KAAK,EAAE,OAAO,kBAAkB,CAAA;CAAE,CAAC,CAAC;AACpF,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC;IAAE,KAAK,EAAE,OAAO,mBAAmB,CAAA;CAAE,CAAC,CAAC;AACtF,MAAM,MAAM,kBAAkB,GAAG,eAAe,CAAC;IAAE,MAAM,EAAE,OAAO,yBAAyB,CAAA;CAAE,CAAC,CAAC;AAM/F,cAAM,UAAU;IACd,MAAM,CAAC,aAAa,6BAAkB;CACvC;AAED,MAAM,CAAC,OAAO,OAAO,mBAAoB,SAAQ,aAAa,CAAC,GAAG,EAAE,OAAO,aAAa,EAAE,OAAO,UAAU,CAAC;gBAC9F,OAAO,EAAE,UAAU;IAI/B,OAAO,CAAC,oBAAoB;IAQ5B,oEAAoE;IAC9D,UAAU,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxE,0FAA0F;IACpF,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlG,sEAAsE;IAChE,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5E,4FAA4F;IACtF,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtG,oCAAoC;IAC9B,WAAW,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAK1E,0DAA0D;IACpD,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpG,sFAAsF;IAChF,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,OAAO,GAAE,MAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAKjH,4GAA4G;IACtG,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,EAAE,OAAO,GAAE,MAAY,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAI5I;AACD,OAAO,EAAE,mBAAmB,EAAE,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Auto-generated BSB virtual client for service-tunnels-client
|
|
3
3
|
* DO NOT EDIT - Regenerated on every build
|
|
4
|
-
* @version 1.0.
|
|
4
|
+
* @version 1.0.35
|
|
5
5
|
*/
|
|
6
6
|
import { ServiceClient, bsb, optional, createReturnableEvent, createFireAndForgetEvent, createEventSchemas } from "@bsb/base";
|
|
7
7
|
const _wsToOriginSchema = bsb.object({
|
|
@@ -22,7 +22,13 @@ const _proxyMetricsSchema = bsb.object({
|
|
|
22
22
|
"originMs": optional(bsb.number()),
|
|
23
23
|
"internalServerMs": optional(bsb.number())
|
|
24
24
|
});
|
|
25
|
+
const _proxyCancelSchema = bsb.object({
|
|
26
|
+
"hostname": bsb.string(),
|
|
27
|
+
"requestId": bsb.string()
|
|
28
|
+
});
|
|
25
29
|
const _proxyRequestSchema = bsb.object({
|
|
30
|
+
"publicServerId": bsb.string(),
|
|
31
|
+
"publicRequestId": bsb.string(),
|
|
26
32
|
"hostname": bsb.string(),
|
|
27
33
|
"method": bsb.string(),
|
|
28
34
|
"path": bsb.string(),
|
|
@@ -35,19 +41,18 @@ const _proxyRequestOutputSchema = bsb.object({
|
|
|
35
41
|
"ownerServerId": bsb.string(),
|
|
36
42
|
"status": bsb.number(),
|
|
37
43
|
"headers": bsb.record(bsb.string(), bsb.string()),
|
|
38
|
-
"body": bsb.string(),
|
|
44
|
+
"body": optional(bsb.string()),
|
|
39
45
|
"webStartedAt": bsb.number(),
|
|
40
|
-
"clientApiRoundtripMs": bsb.number()
|
|
41
|
-
"cliOverheadMs": optional(bsb.number()),
|
|
42
|
-
"originMs": optional(bsb.number())
|
|
46
|
+
"clientApiRoundtripMs": bsb.number()
|
|
43
47
|
});
|
|
44
48
|
const _EventSchemas = createEventSchemas({
|
|
45
49
|
onEvents: {
|
|
46
50
|
'ws.toOrigin': createFireAndForgetEvent(_wsToOriginSchema, "Relay a public websocket frame to the connected tunnel client"),
|
|
47
51
|
'proxy.metrics': createFireAndForgetEvent(_proxyMetricsSchema, "Send final proxy request timings to the connected tunnel client"),
|
|
52
|
+
'proxy.cancel': createFireAndForgetEvent(_proxyCancelSchema, "Cancel an active HTTP request"),
|
|
48
53
|
},
|
|
49
54
|
onReturnableEvents: {
|
|
50
|
-
'proxy.request': createReturnableEvent(_proxyRequestSchema, _proxyRequestOutputSchema, "Proxy an HTTP request through a connected tunnel client",
|
|
55
|
+
'proxy.request': createReturnableEvent(_proxyRequestSchema, _proxyRequestOutputSchema, "Proxy an HTTP request through a connected tunnel client", 310),
|
|
51
56
|
},
|
|
52
57
|
});
|
|
53
58
|
const _PLUGIN_CLIENT = {
|
|
@@ -87,13 +92,23 @@ export default class TunnelsClientClient extends ServiceClient {
|
|
|
87
92
|
const events = this._requireClientEvents("emitEventSpecific", "proxy.metrics");
|
|
88
93
|
await events.emitEventSpecific("proxy.metrics", serverId, obs, input);
|
|
89
94
|
}
|
|
90
|
-
/**
|
|
91
|
-
async
|
|
95
|
+
/** Cancel an active HTTP request */
|
|
96
|
+
async proxyCancel(obs, input) {
|
|
97
|
+
const events = this._requireClientEvents("emitEvent", "proxy.cancel");
|
|
98
|
+
await events.emitEvent("proxy.cancel", obs, input);
|
|
99
|
+
}
|
|
100
|
+
/** Cancel an active HTTP request for a specific server */
|
|
101
|
+
async proxyCancelSpecific(serverId, obs, input) {
|
|
102
|
+
const events = this._requireClientEvents("emitEventSpecific", "proxy.cancel");
|
|
103
|
+
await events.emitEventSpecific("proxy.cancel", serverId, obs, input);
|
|
104
|
+
}
|
|
105
|
+
/** Proxy an HTTP request through a connected tunnel client (default timeout: 310s) */
|
|
106
|
+
async proxyRequest(obs, input, timeout = 310) {
|
|
92
107
|
const events = this._requireClientEvents("emitEventAndReturn", "proxy.request");
|
|
93
108
|
return events.emitEventAndReturn("proxy.request", obs, input, timeout);
|
|
94
109
|
}
|
|
95
|
-
/** Proxy an HTTP request through a connected tunnel client for a specific server (default timeout:
|
|
96
|
-
async proxyRequestSpecific(serverId, obs, input, timeout =
|
|
110
|
+
/** Proxy an HTTP request through a connected tunnel client for a specific server (default timeout: 310s) */
|
|
111
|
+
async proxyRequestSpecific(serverId, obs, input, timeout = 310) {
|
|
97
112
|
const events = this._requireClientEvents("emitEventAndReturnSpecific", "proxy.request");
|
|
98
113
|
return events.emitEventAndReturnSpecific("proxy.request", serverId, obs, input, timeout);
|
|
99
114
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-tunnels-client.js","sourceRoot":"","sources":["../../../src/.bsb/clients/service-tunnels-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,aAAa,EAAc,GAAG,EAAE,QAAQ,EAAY,qBAAqB,EAAE,wBAAwB,EAAwB,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAG1K,MAAM,iBAAiB,GAAG,GAAG,CAAC,MAAM,CAAC;IACjC,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE;IAC9B,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE;IAC9B,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE;IACxB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE;IACpB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE;IACzB,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;IAC/B,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;CAC/B,CAAC,CAAC;AACL,MAAM,mBAAmB,GAAG,GAAG,CAAC,MAAM,CAAC;IACnC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE;IACxB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE;IACzB,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE;IACvB,sBAAsB,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;IAC9C,eAAe,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;IACvC,UAAU,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;IAClC,kBAAkB,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;CAC3C,CAAC,CAAC;AACL,MAAM,mBAAmB,GAAG,GAAG,CAAC,MAAM,CAAC;IACnC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE;IACxB,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE;IACtB,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE;IACpB,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;IACjD,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;IAC9B,cAAc,EAAE,GAAG,CAAC,MAAM,EAAE;CAC7B,CAAC,CAAC;AACL,MAAM,yBAAyB,GAAG,GAAG,CAAC,MAAM,CAAC;IACzC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE;IACzB,eAAe,EAAE,GAAG,CAAC,MAAM,EAAE;IAC7B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE;IACtB,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;IACjD,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"service-tunnels-client.js","sourceRoot":"","sources":["../../../src/.bsb/clients/service-tunnels-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Auto-generated BSB virtual client for service-tunnels-proxy
|
|
3
3
|
* DO NOT EDIT - Regenerated on every build
|
|
4
|
-
* @version 1.0.
|
|
4
|
+
* @version 1.0.35
|
|
5
5
|
*/
|
|
6
6
|
import { ServiceClient, BSBService } from "@bsb/base";
|
|
7
7
|
import type { Observable, BSBServiceClientDefinition, EventInputType } from "@bsb/base";
|
|
@@ -11,6 +11,23 @@ declare const _wsFromOriginSchema: import("anyvali").ObjectSchema<{
|
|
|
11
11
|
event: import("anyvali").OptionalSchema<import("anyvali").StringSchema>;
|
|
12
12
|
body: import("anyvali").OptionalSchema<import("anyvali").StringSchema>;
|
|
13
13
|
}>;
|
|
14
|
+
declare const _proxyResponseBodySchema: import("anyvali").ObjectSchema<{
|
|
15
|
+
publicRequestId: import("anyvali").StringSchema;
|
|
16
|
+
body: import("anyvali").StringSchema;
|
|
17
|
+
}>;
|
|
18
|
+
declare const _proxyResponseEndSchema: import("anyvali").ObjectSchema<{
|
|
19
|
+
publicRequestId: import("anyvali").StringSchema;
|
|
20
|
+
requestId: import("anyvali").StringSchema;
|
|
21
|
+
ownerServerId: import("anyvali").StringSchema;
|
|
22
|
+
status: import("@bsb/base").BSBType;
|
|
23
|
+
clientApiRoundtripMs: import("@bsb/base").BSBType;
|
|
24
|
+
cliOverheadMs: import("anyvali").OptionalSchema<import("@bsb/base").BSBType>;
|
|
25
|
+
originMs: import("anyvali").OptionalSchema<import("@bsb/base").BSBType>;
|
|
26
|
+
}>;
|
|
27
|
+
declare const _proxyResponseErrorSchema: import("anyvali").ObjectSchema<{
|
|
28
|
+
publicRequestId: import("anyvali").StringSchema;
|
|
29
|
+
message: import("anyvali").StringSchema;
|
|
30
|
+
}>;
|
|
14
31
|
declare const _EventSchemas: {
|
|
15
32
|
readonly onEvents: {
|
|
16
33
|
readonly 'ws.fromOrigin': {
|
|
@@ -23,11 +40,49 @@ declare const _EventSchemas: {
|
|
|
23
40
|
description?: string;
|
|
24
41
|
readonly __brand: "fire-and-forget";
|
|
25
42
|
};
|
|
43
|
+
readonly 'proxy.response.body': {
|
|
44
|
+
input: import("anyvali").ObjectSchema<{
|
|
45
|
+
publicRequestId: import("anyvali").StringSchema;
|
|
46
|
+
body: import("anyvali").StringSchema;
|
|
47
|
+
}>;
|
|
48
|
+
description?: string;
|
|
49
|
+
readonly __brand: "fire-and-forget";
|
|
50
|
+
};
|
|
51
|
+
readonly 'proxy.response.end': {
|
|
52
|
+
input: import("anyvali").ObjectSchema<{
|
|
53
|
+
publicRequestId: import("anyvali").StringSchema;
|
|
54
|
+
requestId: import("anyvali").StringSchema;
|
|
55
|
+
ownerServerId: import("anyvali").StringSchema;
|
|
56
|
+
status: import("@bsb/base").BSBType;
|
|
57
|
+
clientApiRoundtripMs: import("@bsb/base").BSBType;
|
|
58
|
+
cliOverheadMs: import("anyvali").OptionalSchema<import("@bsb/base").BSBType>;
|
|
59
|
+
originMs: import("anyvali").OptionalSchema<import("@bsb/base").BSBType>;
|
|
60
|
+
}>;
|
|
61
|
+
description?: string;
|
|
62
|
+
readonly __brand: "fire-and-forget";
|
|
63
|
+
};
|
|
64
|
+
readonly 'proxy.response.error': {
|
|
65
|
+
input: import("anyvali").ObjectSchema<{
|
|
66
|
+
publicRequestId: import("anyvali").StringSchema;
|
|
67
|
+
message: import("anyvali").StringSchema;
|
|
68
|
+
}>;
|
|
69
|
+
description?: string;
|
|
70
|
+
readonly __brand: "fire-and-forget";
|
|
71
|
+
};
|
|
26
72
|
};
|
|
27
73
|
};
|
|
28
74
|
export type WsFromOriginInput = EventInputType<{
|
|
29
75
|
input: typeof _wsFromOriginSchema;
|
|
30
76
|
}>;
|
|
77
|
+
export type ProxyResponseBodyInput = EventInputType<{
|
|
78
|
+
input: typeof _proxyResponseBodySchema;
|
|
79
|
+
}>;
|
|
80
|
+
export type ProxyResponseEndInput = EventInputType<{
|
|
81
|
+
input: typeof _proxyResponseEndSchema;
|
|
82
|
+
}>;
|
|
83
|
+
export type ProxyResponseErrorInput = EventInputType<{
|
|
84
|
+
input: typeof _proxyResponseErrorSchema;
|
|
85
|
+
}>;
|
|
31
86
|
declare class _PluginRef {
|
|
32
87
|
static PLUGIN_CLIENT: BSBServiceClientDefinition;
|
|
33
88
|
}
|
|
@@ -38,6 +93,18 @@ export default class TunnelsProxyClient extends ServiceClient<any, typeof _Event
|
|
|
38
93
|
wsFromOrigin(obs: Observable, input: WsFromOriginInput): Promise<void>;
|
|
39
94
|
/** Relay an origin websocket frame to the public websocket for a specific server */
|
|
40
95
|
wsFromOriginSpecific(serverId: string, obs: Observable, input: WsFromOriginInput): Promise<void>;
|
|
96
|
+
/** Stream an HTTP response chunk to the public client */
|
|
97
|
+
proxyResponseBody(obs: Observable, input: ProxyResponseBodyInput): Promise<void>;
|
|
98
|
+
/** Stream an HTTP response chunk to the public client for a specific server */
|
|
99
|
+
proxyResponseBodySpecific(serverId: string, obs: Observable, input: ProxyResponseBodyInput): Promise<void>;
|
|
100
|
+
/** Complete a streamed HTTP response */
|
|
101
|
+
proxyResponseEnd(obs: Observable, input: ProxyResponseEndInput): Promise<void>;
|
|
102
|
+
/** Complete a streamed HTTP response for a specific server */
|
|
103
|
+
proxyResponseEndSpecific(serverId: string, obs: Observable, input: ProxyResponseEndInput): Promise<void>;
|
|
104
|
+
/** Fail a streamed HTTP response */
|
|
105
|
+
proxyResponseError(obs: Observable, input: ProxyResponseErrorInput): Promise<void>;
|
|
106
|
+
/** Fail a streamed HTTP response for a specific server */
|
|
107
|
+
proxyResponseErrorSpecific(serverId: string, obs: Observable, input: ProxyResponseErrorInput): Promise<void>;
|
|
41
108
|
}
|
|
42
109
|
export { TunnelsProxyClient };
|
|
43
110
|
//# sourceMappingURL=service-tunnels-proxy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-tunnels-proxy.d.ts","sourceRoot":"","sources":["../../../src/.bsb/clients/service-tunnels-proxy.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAsH,MAAM,WAAW,CAAC;AAC1K,OAAO,KAAK,EAAE,UAAU,EAAE,0BAA0B,EAAE,cAAc,EAAmB,MAAM,WAAW,CAAC;AAEzG,QAAA,MAAM,mBAAmB;;;;;EAKrB,CAAC;AAEL,QAAA,MAAM,aAAa
|
|
1
|
+
{"version":3,"file":"service-tunnels-proxy.d.ts","sourceRoot":"","sources":["../../../src/.bsb/clients/service-tunnels-proxy.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,aAAa,EAAE,UAAU,EAAsH,MAAM,WAAW,CAAC;AAC1K,OAAO,KAAK,EAAE,UAAU,EAAE,0BAA0B,EAAE,cAAc,EAAmB,MAAM,WAAW,CAAC;AAEzG,QAAA,MAAM,mBAAmB;;;;;EAKrB,CAAC;AACL,QAAA,MAAM,wBAAwB;;;EAG1B,CAAC;AACL,QAAA,MAAM,uBAAuB;;;;;;;;EAQzB,CAAC;AACL,QAAA,MAAM,yBAAyB;;;EAG3B,CAAC;AAEL,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAOjB,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC;IAAE,KAAK,EAAE,OAAO,mBAAmB,CAAA;CAAE,CAAC,CAAC;AACtF,MAAM,MAAM,sBAAsB,GAAG,cAAc,CAAC;IAAE,KAAK,EAAE,OAAO,wBAAwB,CAAA;CAAE,CAAC,CAAC;AAChG,MAAM,MAAM,qBAAqB,GAAG,cAAc,CAAC;IAAE,KAAK,EAAE,OAAO,uBAAuB,CAAA;CAAE,CAAC,CAAC;AAC9F,MAAM,MAAM,uBAAuB,GAAG,cAAc,CAAC;IAAE,KAAK,EAAE,OAAO,yBAAyB,CAAA;CAAE,CAAC,CAAC;AAMlG,cAAM,UAAU;IACd,MAAM,CAAC,aAAa,6BAAkB;CACvC;AAED,MAAM,CAAC,OAAO,OAAO,kBAAmB,SAAQ,aAAa,CAAC,GAAG,EAAE,OAAO,aAAa,EAAE,OAAO,UAAU,CAAC;gBAC7F,OAAO,EAAE,UAAU;IAI/B,OAAO,CAAC,oBAAoB;IAQ5B,8DAA8D;IACxD,YAAY,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAK5E,oFAAoF;IAC9E,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtG,yDAAyD;IACnD,iBAAiB,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtF,+EAA+E;IACzE,yBAAyB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKhH,wCAAwC;IAClC,gBAAgB,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKpF,8DAA8D;IACxD,wBAAwB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9G,oCAAoC;IAC9B,kBAAkB,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxF,0DAA0D;IACpD,0BAA0B,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;CAInH;AACD,OAAO,EAAE,kBAAkB,EAAE,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Auto-generated BSB virtual client for service-tunnels-proxy
|
|
3
3
|
* DO NOT EDIT - Regenerated on every build
|
|
4
|
-
* @version 1.0.
|
|
4
|
+
* @version 1.0.35
|
|
5
5
|
*/
|
|
6
6
|
import { ServiceClient, bsb, optional, createFireAndForgetEvent, createEventSchemas } from "@bsb/base";
|
|
7
7
|
const _wsFromOriginSchema = bsb.object({
|
|
@@ -10,9 +10,29 @@ const _wsFromOriginSchema = bsb.object({
|
|
|
10
10
|
"event": optional(bsb.string()),
|
|
11
11
|
"body": optional(bsb.string())
|
|
12
12
|
});
|
|
13
|
+
const _proxyResponseBodySchema = bsb.object({
|
|
14
|
+
"publicRequestId": bsb.string(),
|
|
15
|
+
"body": bsb.string()
|
|
16
|
+
});
|
|
17
|
+
const _proxyResponseEndSchema = bsb.object({
|
|
18
|
+
"publicRequestId": bsb.string(),
|
|
19
|
+
"requestId": bsb.string(),
|
|
20
|
+
"ownerServerId": bsb.string(),
|
|
21
|
+
"status": bsb.number(),
|
|
22
|
+
"clientApiRoundtripMs": bsb.number(),
|
|
23
|
+
"cliOverheadMs": optional(bsb.number()),
|
|
24
|
+
"originMs": optional(bsb.number())
|
|
25
|
+
});
|
|
26
|
+
const _proxyResponseErrorSchema = bsb.object({
|
|
27
|
+
"publicRequestId": bsb.string(),
|
|
28
|
+
"message": bsb.string()
|
|
29
|
+
});
|
|
13
30
|
const _EventSchemas = createEventSchemas({
|
|
14
31
|
onEvents: {
|
|
15
32
|
'ws.fromOrigin': createFireAndForgetEvent(_wsFromOriginSchema, "Relay an origin websocket frame to the public websocket"),
|
|
33
|
+
'proxy.response.body': createFireAndForgetEvent(_proxyResponseBodySchema, "Stream an HTTP response chunk to the public client"),
|
|
34
|
+
'proxy.response.end': createFireAndForgetEvent(_proxyResponseEndSchema, "Complete a streamed HTTP response"),
|
|
35
|
+
'proxy.response.error': createFireAndForgetEvent(_proxyResponseErrorSchema, "Fail a streamed HTTP response"),
|
|
16
36
|
},
|
|
17
37
|
});
|
|
18
38
|
const _PLUGIN_CLIENT = {
|
|
@@ -42,6 +62,36 @@ export default class TunnelsProxyClient extends ServiceClient {
|
|
|
42
62
|
const events = this._requireClientEvents("emitEventSpecific", "ws.fromOrigin");
|
|
43
63
|
await events.emitEventSpecific("ws.fromOrigin", serverId, obs, input);
|
|
44
64
|
}
|
|
65
|
+
/** Stream an HTTP response chunk to the public client */
|
|
66
|
+
async proxyResponseBody(obs, input) {
|
|
67
|
+
const events = this._requireClientEvents("emitEvent", "proxy.response.body");
|
|
68
|
+
await events.emitEvent("proxy.response.body", obs, input);
|
|
69
|
+
}
|
|
70
|
+
/** Stream an HTTP response chunk to the public client for a specific server */
|
|
71
|
+
async proxyResponseBodySpecific(serverId, obs, input) {
|
|
72
|
+
const events = this._requireClientEvents("emitEventSpecific", "proxy.response.body");
|
|
73
|
+
await events.emitEventSpecific("proxy.response.body", serverId, obs, input);
|
|
74
|
+
}
|
|
75
|
+
/** Complete a streamed HTTP response */
|
|
76
|
+
async proxyResponseEnd(obs, input) {
|
|
77
|
+
const events = this._requireClientEvents("emitEvent", "proxy.response.end");
|
|
78
|
+
await events.emitEvent("proxy.response.end", obs, input);
|
|
79
|
+
}
|
|
80
|
+
/** Complete a streamed HTTP response for a specific server */
|
|
81
|
+
async proxyResponseEndSpecific(serverId, obs, input) {
|
|
82
|
+
const events = this._requireClientEvents("emitEventSpecific", "proxy.response.end");
|
|
83
|
+
await events.emitEventSpecific("proxy.response.end", serverId, obs, input);
|
|
84
|
+
}
|
|
85
|
+
/** Fail a streamed HTTP response */
|
|
86
|
+
async proxyResponseError(obs, input) {
|
|
87
|
+
const events = this._requireClientEvents("emitEvent", "proxy.response.error");
|
|
88
|
+
await events.emitEvent("proxy.response.error", obs, input);
|
|
89
|
+
}
|
|
90
|
+
/** Fail a streamed HTTP response for a specific server */
|
|
91
|
+
async proxyResponseErrorSpecific(serverId, obs, input) {
|
|
92
|
+
const events = this._requireClientEvents("emitEventSpecific", "proxy.response.error");
|
|
93
|
+
await events.emitEventSpecific("proxy.response.error", serverId, obs, input);
|
|
94
|
+
}
|
|
45
95
|
}
|
|
46
96
|
export { TunnelsProxyClient };
|
|
47
97
|
//# sourceMappingURL=service-tunnels-proxy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-tunnels-proxy.js","sourceRoot":"","sources":["../../../src/.bsb/clients/service-tunnels-proxy.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,aAAa,EAAc,GAAG,EAAE,QAAQ,EAAmC,wBAAwB,EAAwB,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAG1K,MAAM,mBAAmB,GAAG,GAAG,CAAC,MAAM,CAAC;IACnC,gBAAgB,EAAE,GAAG,CAAC,MAAM,EAAE;IAC9B,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE;IACzB,OAAO,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;IAC/B,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;CAC/B,CAAC,CAAC;AAEL,MAAM,aAAa,GAAG,kBAAkB,CAAC;IACvC,QAAQ,EAAE;QACR,eAAe,EAAE,wBAAwB,CAAC,mBAAmB,EAAE,yDAAyD,CAAC;
|
|
1
|
+
{"version":3,"file":"service-tunnels-proxy.js","sourceRoot":"","sources":["../../../src/.bsb/clients/service-tunnels-proxy.ts"],"names":[],"mappings":"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"}
|
package/lib/cli.js
CHANGED
|
@@ -101,6 +101,7 @@ async function startTunnel(config) {
|
|
|
101
101
|
const ws = new WebSocket(url);
|
|
102
102
|
const originSockets = new Map();
|
|
103
103
|
const requests = new Map();
|
|
104
|
+
const originRequests = new Map();
|
|
104
105
|
let alive = true;
|
|
105
106
|
let reconnect = true;
|
|
106
107
|
const heartbeat = setInterval(() => {
|
|
@@ -128,6 +129,9 @@ async function startTunnel(config) {
|
|
|
128
129
|
for (const origin of originSockets.values())
|
|
129
130
|
origin.close();
|
|
130
131
|
originSockets.clear();
|
|
132
|
+
for (const request of originRequests.values())
|
|
133
|
+
request.abort();
|
|
134
|
+
originRequests.clear();
|
|
131
135
|
console.warn(`Tunnel server connection lost for ${config.host}:${config.port} (server-side, your local service is fine): code=${code} reason=${reason.toString() || "none"}`);
|
|
132
136
|
if (!reconnect || code === 1002 || code === 1008)
|
|
133
137
|
return;
|
|
@@ -208,79 +212,90 @@ async function startTunnel(config) {
|
|
|
208
212
|
origin.close();
|
|
209
213
|
return;
|
|
210
214
|
}
|
|
215
|
+
if (frame.type === "request.cancel" && frame.requestId) {
|
|
216
|
+
originRequests.get(frame.requestId)?.abort();
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
211
219
|
if (frame.type !== "request.start" || !frame.requestId)
|
|
212
220
|
return;
|
|
213
221
|
const request = JSON.parse(raw.toString());
|
|
222
|
+
const controller = new AbortController();
|
|
223
|
+
originRequests.set(request.requestId, controller);
|
|
214
224
|
try {
|
|
215
225
|
const cliStartedAt = Date.now();
|
|
216
226
|
const headers = { ...request.headers };
|
|
217
227
|
if (config.host_header)
|
|
218
228
|
headers.host = config.host_header;
|
|
219
|
-
const response = await localRequest(config.host, config.port, request.method, request.path, headers, request.body)
|
|
220
|
-
const cliOverheadMs = Math.max(0, Date.now() - cliStartedAt - response.originMs);
|
|
221
|
-
ws.send(JSON.stringify({
|
|
229
|
+
const response = await localRequest(config.host, config.port, request.method, request.path, headers, request.body, controller.signal, async (status, responseHeaders) => sendFrame(ws, {
|
|
222
230
|
type: "response.start",
|
|
223
231
|
requestId: request.requestId,
|
|
224
|
-
status
|
|
225
|
-
headers:
|
|
226
|
-
}))
|
|
227
|
-
ws.send(JSON.stringify({
|
|
232
|
+
status,
|
|
233
|
+
headers: responseHeaders
|
|
234
|
+
}), async (body) => sendFrame(ws, {
|
|
228
235
|
type: "response.body",
|
|
229
236
|
requestId: request.requestId,
|
|
230
|
-
body
|
|
231
|
-
}));
|
|
232
|
-
ws.send(JSON.stringify({
|
|
233
|
-
type: "response.end",
|
|
234
|
-
requestId: request.requestId,
|
|
235
|
-
cliOverheadMs,
|
|
236
|
-
originMs: response.originMs
|
|
237
|
+
body
|
|
237
238
|
}));
|
|
239
|
+
const cliOverheadMs = Math.max(0, Date.now() - cliStartedAt - response.originMs);
|
|
238
240
|
requests.set(request.requestId, {
|
|
239
241
|
method: request.method,
|
|
240
242
|
path: request.path,
|
|
241
243
|
status: response.status,
|
|
242
244
|
originMs: response.originMs
|
|
243
245
|
});
|
|
246
|
+
await sendFrame(ws, {
|
|
247
|
+
type: "response.end",
|
|
248
|
+
requestId: request.requestId,
|
|
249
|
+
cliOverheadMs,
|
|
250
|
+
originMs: response.originMs
|
|
251
|
+
});
|
|
244
252
|
}
|
|
245
253
|
catch (error) {
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
254
|
+
if (!controller.signal.aborted) {
|
|
255
|
+
await sendFrame(ws, {
|
|
256
|
+
type: "error",
|
|
257
|
+
requestId: request.requestId,
|
|
258
|
+
message: error instanceof Error ? error.message : String(error)
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
finally {
|
|
263
|
+
originRequests.delete(request.requestId);
|
|
251
264
|
}
|
|
252
265
|
});
|
|
253
266
|
};
|
|
254
267
|
connect();
|
|
255
268
|
await new Promise(() => undefined);
|
|
256
269
|
}
|
|
257
|
-
function localRequest(host, port, method, path, headers, body) {
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
const req = httpRequest({ host, port, method, path, headers },
|
|
261
|
-
const chunks = [];
|
|
262
|
-
res.on("data", (chunk) => chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk)));
|
|
263
|
-
res.on("end", () => {
|
|
264
|
-
const responseHeaders = {};
|
|
265
|
-
for (const [key, value] of Object.entries(res.headers)) {
|
|
266
|
-
if (Array.isArray(value))
|
|
267
|
-
responseHeaders[key] = value.join(", ");
|
|
268
|
-
else if (value !== undefined)
|
|
269
|
-
responseHeaders[key] = value;
|
|
270
|
-
}
|
|
271
|
-
resolve({
|
|
272
|
-
status: res.statusCode ?? 502,
|
|
273
|
-
headers: responseHeaders,
|
|
274
|
-
body: Buffer.concat(chunks).toString("base64"),
|
|
275
|
-
originMs: Date.now() - startedAt
|
|
276
|
-
});
|
|
277
|
-
});
|
|
278
|
-
});
|
|
270
|
+
async function localRequest(host, port, method, path, headers, body, signal, onStart, onBody) {
|
|
271
|
+
const startedAt = Date.now();
|
|
272
|
+
const response = await new Promise((resolve, reject) => {
|
|
273
|
+
const req = httpRequest({ host, port, method, path, headers, signal }, resolve);
|
|
279
274
|
req.on("error", reject);
|
|
280
275
|
if (body)
|
|
281
276
|
req.write(Buffer.from(body, "base64"));
|
|
282
277
|
req.end();
|
|
283
278
|
});
|
|
279
|
+
const responseHeaders = {};
|
|
280
|
+
for (const [key, value] of Object.entries(response.headers)) {
|
|
281
|
+
if (Array.isArray(value))
|
|
282
|
+
responseHeaders[key] = value.join(", ");
|
|
283
|
+
else if (value !== undefined)
|
|
284
|
+
responseHeaders[key] = value;
|
|
285
|
+
}
|
|
286
|
+
const status = response.statusCode ?? 502;
|
|
287
|
+
await onStart(status, responseHeaders);
|
|
288
|
+
for await (const value of response) {
|
|
289
|
+
const chunk = Buffer.isBuffer(value) ? value : Buffer.from(value);
|
|
290
|
+
if (chunk.byteLength)
|
|
291
|
+
await onBody(chunk.toString("base64"));
|
|
292
|
+
}
|
|
293
|
+
return { status, originMs: Date.now() - startedAt };
|
|
294
|
+
}
|
|
295
|
+
function sendFrame(ws, value) {
|
|
296
|
+
return new Promise((resolve, reject) => {
|
|
297
|
+
ws.send(JSON.stringify(value), (error) => error ? reject(error) : resolve());
|
|
298
|
+
});
|
|
284
299
|
}
|
|
285
300
|
function entryLabel(t, i) {
|
|
286
301
|
if (t.name)
|