aweshare 0.7.0 → 0.7.2
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/README.ai.md +1 -0
- package/README.md +28 -2
- package/apps/agent/dist/config.d.ts +1 -1
- package/apps/agent/dist/config.js +11 -0
- package/apps/agent/dist/config.js.map +1 -1
- package/apps/agent/dist/connection.js +3 -29
- package/apps/agent/dist/connection.js.map +1 -1
- package/apps/agent/dist/hub.d.ts +6 -0
- package/apps/agent/dist/hub.js.map +1 -1
- package/apps/agent/dist/table.d.ts +11 -1
- package/apps/agent/dist/table.js +13 -1
- package/apps/agent/dist/table.js.map +1 -1
- package/apps/consumer/dist/table.d.ts +12 -2
- package/apps/consumer/dist/table.js +13 -2
- package/apps/consumer/dist/table.js.map +1 -1
- package/apps/hub/dist/config.d.ts +1 -1
- package/apps/hub/dist/config.js +11 -0
- package/apps/hub/dist/config.js.map +1 -1
- package/apps/hub/dist/consumer.d.ts +4 -0
- package/apps/hub/dist/consumer.js +13 -1
- package/apps/hub/dist/consumer.js.map +1 -1
- package/apps/hub/dist/db.d.ts +4 -1
- package/apps/hub/dist/db.js +35 -7
- package/apps/hub/dist/db.js.map +1 -1
- package/apps/hub/dist/invites.js +9 -11
- package/apps/hub/dist/invites.js.map +1 -1
- package/apps/hub/dist/local.d.ts +8 -39
- package/apps/hub/dist/local.js +18 -191
- package/apps/hub/dist/local.js.map +1 -1
- package/apps/hub/dist/offerings.d.ts +7 -0
- package/apps/hub/dist/offerings.js +17 -0
- package/apps/hub/dist/offerings.js.map +1 -0
- package/apps/hub/dist/relay.d.ts +114 -0
- package/apps/hub/dist/relay.js +186 -0
- package/apps/hub/dist/relay.js.map +1 -0
- package/apps/hub/dist/table.d.ts +11 -1
- package/apps/hub/dist/table.js +13 -1
- package/apps/hub/dist/table.js.map +1 -1
- package/apps/hub/dist/tunnel.d.ts +9 -82
- package/apps/hub/dist/tunnel.js +43 -197
- package/apps/hub/dist/tunnel.js.map +1 -1
- package/package.json +1 -1
- package/packages/producer-core/dist/catalog.d.ts +23 -1
- package/packages/producer-core/dist/catalog.js +49 -15
- package/packages/producer-core/dist/catalog.js.map +1 -1
- package/packages/producer-core/dist/probe.d.ts +11 -0
- package/packages/producer-core/dist/probe.js +39 -0
- package/packages/producer-core/dist/probe.js.map +1 -1
- package/packages/protocol/dist/errors.d.ts +1 -0
- package/packages/protocol/dist/errors.js +1 -0
- package/packages/protocol/dist/errors.js.map +1 -1
- package/packages/protocol/dist/index.d.ts +1 -0
- package/packages/protocol/dist/index.js +1 -0
- package/packages/protocol/dist/index.js.map +1 -1
- package/packages/protocol/dist/messages.d.ts +5 -0
- package/packages/protocol/dist/messages.js.map +1 -1
- package/packages/protocol/dist/schedule.d.ts +83 -0
- package/packages/protocol/dist/schedule.js +421 -0
- package/packages/protocol/dist/schedule.js.map +1 -0
- package/packages/protocol/dist/time.js +5 -4
- package/packages/protocol/dist/time.js.map +1 -1
package/apps/hub/dist/local.js
CHANGED
|
@@ -1,67 +1,36 @@
|
|
|
1
|
-
import { randomUUID } from 'node:crypto';
|
|
2
|
-
import { EventEmitter } from 'node:events';
|
|
3
1
|
import { existsSync, readFileSync, unwatchFile, watchFile } from 'node:fs';
|
|
4
|
-
import {
|
|
2
|
+
import { HealthGate, parseCatalog, probeDegradedBackends, UpstreamJob, } from '../../../packages/producer-core/dist/index.js';
|
|
5
3
|
import { parse as parseToml } from 'smol-toml';
|
|
6
4
|
import { ensureLocalProducer, LOCAL_PRODUCER_ID, LOCAL_PRODUCER_NAME, upsertOfferings, } from './db.js';
|
|
7
5
|
import { HttpError } from './http.js';
|
|
8
|
-
import {
|
|
6
|
+
import { warnUnreachableConcurrency } from './offerings.js';
|
|
7
|
+
import { BaseRelay } from './relay.js';
|
|
9
8
|
const PROBE_INTERVAL_MS = 30_000;
|
|
10
9
|
const MAX_LOCAL_OFFERINGS = 256; // same cap the tunnel enforces per register
|
|
11
10
|
/**
|
|
12
|
-
* One in-process dispatched consumer request:
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* gate the job's read loop — a held sink.chunk promise is backpressure.
|
|
11
|
+
* One in-process dispatched consumer request: an UpstreamJob's response frames
|
|
12
|
+
* feed the shared BaseRelay pump. pauseInput/resumeInput gate the job's read
|
|
13
|
+
* loop — a held sink.chunk promise is backpressure.
|
|
16
14
|
*/
|
|
17
|
-
export class LocalRelay extends
|
|
15
|
+
export class LocalRelay extends BaseRelay {
|
|
18
16
|
backend;
|
|
19
17
|
health;
|
|
20
18
|
init;
|
|
21
|
-
config;
|
|
22
19
|
log;
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
bytesOut = 0;
|
|
20
|
+
peer = 'upstream';
|
|
21
|
+
headTimeoutCode = 'BACKEND_TIMEOUT';
|
|
26
22
|
job = null;
|
|
27
|
-
result = {
|
|
28
|
-
status: null,
|
|
29
|
-
errorCode: null,
|
|
30
|
-
canceled: false,
|
|
31
|
-
durationMs: 0,
|
|
32
|
-
bytesOut: 0,
|
|
33
|
-
};
|
|
34
|
-
finished = false;
|
|
35
|
-
headArrived = false;
|
|
36
|
-
streamingStarted = false;
|
|
37
|
-
bufferedChunks = [];
|
|
38
|
-
pendingEnd = false;
|
|
39
|
-
headTimer = null;
|
|
40
|
-
idleTimer = null;
|
|
41
23
|
paused = false;
|
|
42
24
|
resumeWaiters = [];
|
|
43
|
-
headPromise;
|
|
44
|
-
resolveHead;
|
|
45
|
-
rejectHead;
|
|
46
|
-
finishedPromise;
|
|
47
|
-
settleFinished;
|
|
48
25
|
constructor(backend, health, init, config, log) {
|
|
49
|
-
super();
|
|
26
|
+
super(config.headTimeoutMs, config.idleTimeoutMs);
|
|
50
27
|
this.backend = backend;
|
|
51
28
|
this.health = health;
|
|
52
29
|
this.init = init;
|
|
53
|
-
this.config = config;
|
|
54
30
|
this.log = log;
|
|
55
|
-
this.headPromise = new Promise((resolve, reject) => {
|
|
56
|
-
this.resolveHead = resolve;
|
|
57
|
-
this.rejectHead = reject;
|
|
58
|
-
});
|
|
59
|
-
this.finishedPromise = new Promise((resolve) => {
|
|
60
|
-
this.settleFinished = resolve;
|
|
61
|
-
});
|
|
62
31
|
}
|
|
63
32
|
dispatch() {
|
|
64
|
-
this.
|
|
33
|
+
this.armHeadTimer();
|
|
65
34
|
// fire-and-forget: every settle path flows back through the sink
|
|
66
35
|
this.job = new UpstreamJob({
|
|
67
36
|
backend: this.backend,
|
|
@@ -88,28 +57,6 @@ export class LocalRelay extends EventEmitter {
|
|
|
88
57
|
void this.job.execute();
|
|
89
58
|
return Promise.resolve();
|
|
90
59
|
}
|
|
91
|
-
waitHead() {
|
|
92
|
-
return this.headPromise;
|
|
93
|
-
}
|
|
94
|
-
startStreaming() {
|
|
95
|
-
this.streamingStarted = true;
|
|
96
|
-
for (const chunk of this.bufferedChunks)
|
|
97
|
-
this.emit('chunk', chunk);
|
|
98
|
-
this.bufferedChunks = [];
|
|
99
|
-
if (this.pendingEnd) {
|
|
100
|
-
this.pendingEnd = false;
|
|
101
|
-
this.emit('end');
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
waitFinished() {
|
|
105
|
-
return this.finishedPromise;
|
|
106
|
-
}
|
|
107
|
-
cancel() {
|
|
108
|
-
if (this.finished)
|
|
109
|
-
return;
|
|
110
|
-
this.job?.abort();
|
|
111
|
-
this.finalize({ errorCode: 'REQUEST_CANCELED', canceled: true });
|
|
112
|
-
}
|
|
113
60
|
pauseInput() {
|
|
114
61
|
this.paused = true;
|
|
115
62
|
}
|
|
@@ -120,101 +67,14 @@ export class LocalRelay extends EventEmitter {
|
|
|
120
67
|
for (const w of waiters)
|
|
121
68
|
w();
|
|
122
69
|
}
|
|
70
|
+
abortUpstream() {
|
|
71
|
+
this.job?.abort();
|
|
72
|
+
}
|
|
123
73
|
async waitWhilePaused() {
|
|
124
74
|
while (this.paused && !this.finished) {
|
|
125
75
|
await new Promise((resolve) => this.resumeWaiters.push(resolve));
|
|
126
76
|
}
|
|
127
77
|
}
|
|
128
|
-
handleHead(status, headers) {
|
|
129
|
-
if (this.finished || this.headArrived)
|
|
130
|
-
return;
|
|
131
|
-
this.headArrived = true;
|
|
132
|
-
this.clearTimers();
|
|
133
|
-
this.result.status = status;
|
|
134
|
-
this.armIdleTimer();
|
|
135
|
-
this.resolveHead({ status, headers });
|
|
136
|
-
this.emit('head', status, headers);
|
|
137
|
-
}
|
|
138
|
-
handleChunk(payload) {
|
|
139
|
-
if (this.finished || !this.headArrived)
|
|
140
|
-
return;
|
|
141
|
-
this.bytesOut += payload.byteLength;
|
|
142
|
-
this.result.bytesOut = this.bytesOut;
|
|
143
|
-
this.armIdleTimer();
|
|
144
|
-
if (this.streamingStarted)
|
|
145
|
-
this.emit('chunk', payload);
|
|
146
|
-
else
|
|
147
|
-
this.bufferedChunks.push(payload);
|
|
148
|
-
}
|
|
149
|
-
handleEnd() {
|
|
150
|
-
if (this.finished)
|
|
151
|
-
return;
|
|
152
|
-
this.clearTimers();
|
|
153
|
-
if (!this.headArrived) {
|
|
154
|
-
// impossible from fetch (head resolves before the body iterates) — kept
|
|
155
|
-
// as a guard mirroring TunnelRequest
|
|
156
|
-
this.fail('TUNNEL_CLOSED', 'upstream ended request without a response head', 502);
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
this.finalize({});
|
|
160
|
-
if (this.streamingStarted)
|
|
161
|
-
this.emit('end');
|
|
162
|
-
else
|
|
163
|
-
this.pendingEnd = true;
|
|
164
|
-
}
|
|
165
|
-
handleError(code, message) {
|
|
166
|
-
if (this.finished)
|
|
167
|
-
return;
|
|
168
|
-
this.fail(code, message, statusForCode(code));
|
|
169
|
-
}
|
|
170
|
-
fail(code, message, status) {
|
|
171
|
-
this.clearTimers();
|
|
172
|
-
this.job?.abort();
|
|
173
|
-
if (!this.headArrived) {
|
|
174
|
-
this.rejectHead({ code, message, status });
|
|
175
|
-
}
|
|
176
|
-
else {
|
|
177
|
-
this.emit('error', { code, message, status });
|
|
178
|
-
}
|
|
179
|
-
this.finalize({ errorCode: code });
|
|
180
|
-
}
|
|
181
|
-
finalize(overrides) {
|
|
182
|
-
if (this.finished)
|
|
183
|
-
return;
|
|
184
|
-
this.finished = true;
|
|
185
|
-
this.clearTimers();
|
|
186
|
-
this.result.durationMs = Date.now() - this.startedAt;
|
|
187
|
-
if (overrides.errorCode !== undefined)
|
|
188
|
-
this.result.errorCode = overrides.errorCode;
|
|
189
|
-
if (overrides.canceled)
|
|
190
|
-
this.result.canceled = true;
|
|
191
|
-
// unblock a paused read loop so the job can wind down
|
|
192
|
-
this.resumeInput();
|
|
193
|
-
if (!this.headArrived) {
|
|
194
|
-
const code = this.result.errorCode ?? 'REQUEST_CANCELED';
|
|
195
|
-
this.rejectHead({
|
|
196
|
-
code,
|
|
197
|
-
message: `request ended before response head (${code})`,
|
|
198
|
-
status: statusForCode(code),
|
|
199
|
-
});
|
|
200
|
-
}
|
|
201
|
-
this.settleFinished(this.result);
|
|
202
|
-
}
|
|
203
|
-
armIdleTimer() {
|
|
204
|
-
if (this.idleTimer)
|
|
205
|
-
clearTimeout(this.idleTimer);
|
|
206
|
-
this.idleTimer = setTimeout(() => {
|
|
207
|
-
this.fail('STREAM_IDLE_TIMEOUT', 'response stream idle', statusForCode('STREAM_IDLE_TIMEOUT'));
|
|
208
|
-
}, this.config.idleTimeoutMs);
|
|
209
|
-
}
|
|
210
|
-
clearTimers() {
|
|
211
|
-
if (this.headTimer)
|
|
212
|
-
clearTimeout(this.headTimer);
|
|
213
|
-
if (this.idleTimer)
|
|
214
|
-
clearTimeout(this.idleTimer);
|
|
215
|
-
this.headTimer = null;
|
|
216
|
-
this.idleTimer = null;
|
|
217
|
-
}
|
|
218
78
|
}
|
|
219
79
|
/**
|
|
220
80
|
* The hub's built-in producer: backends and offerings live in the hub's own
|
|
@@ -385,6 +245,7 @@ export class LocalProducer {
|
|
|
385
245
|
maxConcurrencyPerUser: o.maxConcurrencyPerUser,
|
|
386
246
|
...(o.maxConcurrentUsers !== undefined && { maxConcurrentUsers: o.maxConcurrentUsers }),
|
|
387
247
|
...(o.dailyTokens !== undefined && { dailyTokens: o.dailyTokens }),
|
|
248
|
+
...(o.schedule !== undefined && { schedule: o.schedule }),
|
|
388
249
|
});
|
|
389
250
|
}
|
|
390
251
|
if (rows.length > MAX_LOCAL_OFFERINGS) {
|
|
@@ -396,17 +257,9 @@ export class LocalProducer {
|
|
|
396
257
|
// register first, swap second: a request admitted between the two sees the
|
|
397
258
|
// row and the backend together or neither
|
|
398
259
|
upsertOfferings(this.deps.db, LOCAL_PRODUCER_ID, catalog.offerings);
|
|
399
|
-
// same unreachable-promise warning the tunnel
|
|
260
|
+
// same unreachable-promise warning the tunnel register logs — the hub's
|
|
400
261
|
// own catalog can over-promise just the same
|
|
401
|
-
|
|
402
|
-
if (o.maxConcurrencyPerUser > this.deps.config.consumerMaxConcurrent) {
|
|
403
|
-
this.deps.log.warn({
|
|
404
|
-
alias: o.alias,
|
|
405
|
-
perUser: o.maxConcurrencyPerUser,
|
|
406
|
-
consumerMaxConcurrent: this.deps.config.consumerMaxConcurrent,
|
|
407
|
-
}, 'maxConcurrencyPerUser exceeds the hub consumer default maxConcurrent — consumers on defaults cannot reach it');
|
|
408
|
-
}
|
|
409
|
-
}
|
|
262
|
+
warnUnreachableConcurrency(this.deps.log, catalog.offerings, this.deps.config.consumerMaxConcurrent, 'hub');
|
|
410
263
|
this.backends = new Map(catalog.backends.map((b) => [b.id, b]));
|
|
411
264
|
this.probeModels = new Map(catalog.offerings.map((o) => [o.backendId, o.upstreamModel]));
|
|
412
265
|
// rides the hot reload like every other catalog field
|
|
@@ -440,33 +293,7 @@ export class LocalProducer {
|
|
|
440
293
|
* PROBE_INTERVAL_MS. `force` skips the backoff, like awewarm's manual
|
|
441
294
|
* activation bypassing the schedule. */
|
|
442
295
|
async probeDegraded(force = false) {
|
|
443
|
-
|
|
444
|
-
if (!this.health.isDegraded(backend.id))
|
|
445
|
-
continue;
|
|
446
|
-
if (!force && Date.now() < this.health.probeNotBeforeMs(backend.id))
|
|
447
|
-
continue;
|
|
448
|
-
const model = this.probeModels.get(backend.id);
|
|
449
|
-
if (!model)
|
|
450
|
-
continue; // no offering left on this backend — nothing real to probe with
|
|
451
|
-
try {
|
|
452
|
-
const { url, headers } = probeTarget(backend);
|
|
453
|
-
const resp = await fetchUpstream(backend, url, {
|
|
454
|
-
method: 'POST',
|
|
455
|
-
headers,
|
|
456
|
-
body: JSON.stringify(probeBody(model, backend.protocol, backend.login !== undefined)),
|
|
457
|
-
signal: AbortSignal.timeout(10_000),
|
|
458
|
-
});
|
|
459
|
-
const reason = classifyStatus(resp.status);
|
|
460
|
-
logHealthTransition(this.deps.log, backend.id, this.health.record(backend.id, reason === null, reason ?? undefined), reason === null
|
|
461
|
-
? `probe ok (model '${model}')`
|
|
462
|
-
: `probe ${resp.status} (${reason}) — next attempt backs off`);
|
|
463
|
-
await resp.arrayBuffer().catch(() => undefined);
|
|
464
|
-
}
|
|
465
|
-
catch (err) {
|
|
466
|
-
this.health.record(backend.id, false, 'NETWORK');
|
|
467
|
-
this.deps.log.warn(`probe for backend ${backend.id} failed: ${err instanceof Error ? err.message : err}`);
|
|
468
|
-
}
|
|
469
|
-
}
|
|
296
|
+
await probeDegradedBackends(this.backends.values(), this.health, this.deps.log, (b) => this.probeModels.get(b.id), { force });
|
|
470
297
|
}
|
|
471
298
|
}
|
|
472
299
|
//# sourceMappingURL=local.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local.js","sourceRoot":"","sources":["../src/local.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"local.js","sourceRoot":"","sources":["../src/local.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Offering } from 'aweshare-protocol';
|
|
2
|
+
import type { Logger } from 'pino';
|
|
3
|
+
/** A per-user cap above the consumer-side default maxConcurrent is a promise
|
|
4
|
+
* default consumers can never reach (their own limit binds first) — say so
|
|
5
|
+
* instead of silently capping it. Shared by the tunnel register path and the
|
|
6
|
+
* hub-local catalog apply, so the copy cannot drift. */
|
|
7
|
+
export declare function warnUnreachableConcurrency(log: Logger, offerings: ReadonlyArray<Pick<Offering, 'alias' | 'maxConcurrencyPerUser'>>, consumerMaxConcurrent: number, producer: string): void;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** A per-user cap above the consumer-side default maxConcurrent is a promise
|
|
2
|
+
* default consumers can never reach (their own limit binds first) — say so
|
|
3
|
+
* instead of silently capping it. Shared by the tunnel register path and the
|
|
4
|
+
* hub-local catalog apply, so the copy cannot drift. */
|
|
5
|
+
export function warnUnreachableConcurrency(log, offerings, consumerMaxConcurrent, producer) {
|
|
6
|
+
for (const o of offerings) {
|
|
7
|
+
if (o.maxConcurrencyPerUser > consumerMaxConcurrent) {
|
|
8
|
+
log.warn({
|
|
9
|
+
producer,
|
|
10
|
+
alias: o.alias,
|
|
11
|
+
perUser: o.maxConcurrencyPerUser,
|
|
12
|
+
consumerMaxConcurrent,
|
|
13
|
+
}, 'maxConcurrencyPerUser exceeds the hub consumer default maxConcurrent — consumers on defaults cannot reach it');
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=offerings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"offerings.js","sourceRoot":"","sources":["../src/offerings.ts"],"names":[],"mappings":"AAGA;;;wDAGwD;AACxD,MAAM,UAAU,0BAA0B,CACxC,GAAW,EACX,SAA2E,EAC3E,qBAA6B,EAC7B,QAAgB;IAEhB,KAAK,MAAM,CAAC,IAAI,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,CAAC,qBAAqB,GAAG,qBAAqB,EAAE,CAAC;YACpD,GAAG,CAAC,IAAI,CACN;gBACE,QAAQ;gBACR,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,OAAO,EAAE,CAAC,CAAC,qBAAqB;gBAChC,qBAAqB;aACtB,EACD,8GAA8G,CAC/G,CAAA;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { EventEmitter } from 'node:events';
|
|
2
|
+
import type { Protocol } from 'aweshare-protocol';
|
|
3
|
+
export interface DispatchInit {
|
|
4
|
+
protocol: Protocol;
|
|
5
|
+
backendId: string;
|
|
6
|
+
method: string;
|
|
7
|
+
path: string;
|
|
8
|
+
query: Record<string, string> | null;
|
|
9
|
+
headers: Record<string, string>;
|
|
10
|
+
body: Uint8Array;
|
|
11
|
+
}
|
|
12
|
+
export interface RelayResult {
|
|
13
|
+
status: number | null;
|
|
14
|
+
errorCode: string | null;
|
|
15
|
+
canceled: boolean;
|
|
16
|
+
durationMs: number;
|
|
17
|
+
bytesOut: number;
|
|
18
|
+
}
|
|
19
|
+
export interface RelayFailure {
|
|
20
|
+
code: string;
|
|
21
|
+
message: string;
|
|
22
|
+
status: number;
|
|
23
|
+
}
|
|
24
|
+
/** Map a relay failure code to the HTTP status consumers see; 499 is
|
|
25
|
+
* nginx-style "client canceled". */
|
|
26
|
+
export declare function statusForCode(code: string): number;
|
|
27
|
+
/**
|
|
28
|
+
* One dispatched consumer request, whichever way it leaves the hub: through a
|
|
29
|
+
* producer tunnel (TunnelRequest) or straight upstream in-process
|
|
30
|
+
* (local.ts LocalRelay). handleInference consumes only this surface — the
|
|
31
|
+
* timers, buffering and settle semantics are the same for both.
|
|
32
|
+
*/
|
|
33
|
+
export interface Relay extends EventEmitter {
|
|
34
|
+
readonly requestId: string;
|
|
35
|
+
dispatch(): Promise<void>;
|
|
36
|
+
waitHead(): Promise<{
|
|
37
|
+
status: number;
|
|
38
|
+
headers: Record<string, string>;
|
|
39
|
+
}>;
|
|
40
|
+
/** Flush chunks buffered between head and consumer attach; after this, chunks emit live. */
|
|
41
|
+
startStreaming(): void;
|
|
42
|
+
waitFinished(): Promise<RelayResult>;
|
|
43
|
+
/** Consumer went away; abort upstream. */
|
|
44
|
+
cancel(): void;
|
|
45
|
+
/** Stop reading upstream while a downstream HTTP response is saturated. */
|
|
46
|
+
pauseInput(): void;
|
|
47
|
+
resumeInput(): void;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* The relay pump shared by TunnelRequest (producer tunnel) and LocalRelay
|
|
51
|
+
* (in-process upstream job): head/chunk/end plumbing, head and idle timers,
|
|
52
|
+
* chunk buffering until the consumer attaches, and the settle guarantees.
|
|
53
|
+
* Subclasses wire the transport — dispatch() starts it, handleHead/handleChunk/
|
|
54
|
+
* handleEnd/handleError feed it, abortUpstream() kills the upstream side, and
|
|
55
|
+
* pauseInput()/resumeInput() gate the transport's flow (the base's finalize
|
|
56
|
+
* calls resumeInput so a paused transport always winds down).
|
|
57
|
+
*/
|
|
58
|
+
export declare abstract class BaseRelay extends EventEmitter implements Relay {
|
|
59
|
+
private readonly headTimeoutMs;
|
|
60
|
+
private readonly idleTimeoutMs;
|
|
61
|
+
readonly requestId: string;
|
|
62
|
+
readonly startedAt: number;
|
|
63
|
+
bytesOut: number;
|
|
64
|
+
/** The transport this relay talks to; names the peer in failure wording. */
|
|
65
|
+
protected abstract readonly peer: string;
|
|
66
|
+
/** Failure code for the "no head in time" timeout; 504 either way. */
|
|
67
|
+
protected abstract readonly headTimeoutCode: string;
|
|
68
|
+
private headPromise;
|
|
69
|
+
private resolveHead;
|
|
70
|
+
private rejectHead;
|
|
71
|
+
private finishedPromise;
|
|
72
|
+
private settleFinished;
|
|
73
|
+
private result;
|
|
74
|
+
protected finished: boolean;
|
|
75
|
+
private headArrived;
|
|
76
|
+
private streamingStarted;
|
|
77
|
+
private bufferedChunks;
|
|
78
|
+
private pendingEnd;
|
|
79
|
+
private headTimer;
|
|
80
|
+
private idleTimer;
|
|
81
|
+
constructor(headTimeoutMs: number, idleTimeoutMs: number);
|
|
82
|
+
/** Send request.start/body/request.end to the transport, then arm the head timeout. */
|
|
83
|
+
abstract dispatch(): Promise<void>;
|
|
84
|
+
/** Stop reading upstream while a downstream HTTP response is saturated. */
|
|
85
|
+
abstract pauseInput(): void;
|
|
86
|
+
/** Resume reading upstream after every saturated response has drained. */
|
|
87
|
+
abstract resumeInput(): void;
|
|
88
|
+
/** Kill the upstream side of this request (cancel frame or job abort). */
|
|
89
|
+
protected abstract abortUpstream(): void;
|
|
90
|
+
/** Transport bookkeeping when the request settles; no-op by default. */
|
|
91
|
+
protected onSettled(): void;
|
|
92
|
+
waitHead(): Promise<{
|
|
93
|
+
status: number;
|
|
94
|
+
headers: Record<string, string>;
|
|
95
|
+
}>;
|
|
96
|
+
/** Flush chunks buffered between head and consumer attach; after this, chunks emit live. */
|
|
97
|
+
startStreaming(): void;
|
|
98
|
+
waitFinished(): Promise<RelayResult>;
|
|
99
|
+
/** Consumer went away; abort upstream. */
|
|
100
|
+
cancel(): void;
|
|
101
|
+
handleHead(status: number, headers: Record<string, string>): void;
|
|
102
|
+
handleChunk(payload: Uint8Array): void;
|
|
103
|
+
handleEnd(): void;
|
|
104
|
+
handleError(code: string, message: string): void;
|
|
105
|
+
/** Timeout while waiting for a response head; always 504 either way. */
|
|
106
|
+
protected armHeadTimer(): void;
|
|
107
|
+
protected fail(code: string, message: string, status: number): void;
|
|
108
|
+
protected finalize(overrides: {
|
|
109
|
+
errorCode?: string;
|
|
110
|
+
canceled?: boolean;
|
|
111
|
+
}): void;
|
|
112
|
+
private armIdleTimer;
|
|
113
|
+
private clearTimers;
|
|
114
|
+
}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { EventEmitter } from 'node:events';
|
|
3
|
+
/** Map a relay failure code to the HTTP status consumers see; 499 is
|
|
4
|
+
* nginx-style "client canceled". */
|
|
5
|
+
export function statusForCode(code) {
|
|
6
|
+
switch (code) {
|
|
7
|
+
case 'TICKET_EXPIRED':
|
|
8
|
+
case 'STREAM_IDLE_TIMEOUT':
|
|
9
|
+
case 'BACKEND_TIMEOUT':
|
|
10
|
+
return 504;
|
|
11
|
+
case 'REQUEST_CANCELED':
|
|
12
|
+
return 499;
|
|
13
|
+
default:
|
|
14
|
+
return 502;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* The relay pump shared by TunnelRequest (producer tunnel) and LocalRelay
|
|
19
|
+
* (in-process upstream job): head/chunk/end plumbing, head and idle timers,
|
|
20
|
+
* chunk buffering until the consumer attaches, and the settle guarantees.
|
|
21
|
+
* Subclasses wire the transport — dispatch() starts it, handleHead/handleChunk/
|
|
22
|
+
* handleEnd/handleError feed it, abortUpstream() kills the upstream side, and
|
|
23
|
+
* pauseInput()/resumeInput() gate the transport's flow (the base's finalize
|
|
24
|
+
* calls resumeInput so a paused transport always winds down).
|
|
25
|
+
*/
|
|
26
|
+
export class BaseRelay extends EventEmitter {
|
|
27
|
+
headTimeoutMs;
|
|
28
|
+
idleTimeoutMs;
|
|
29
|
+
requestId = randomUUID().replaceAll('-', '');
|
|
30
|
+
startedAt = Date.now();
|
|
31
|
+
bytesOut = 0;
|
|
32
|
+
headPromise;
|
|
33
|
+
resolveHead;
|
|
34
|
+
rejectHead;
|
|
35
|
+
finishedPromise;
|
|
36
|
+
settleFinished;
|
|
37
|
+
result = {
|
|
38
|
+
status: null,
|
|
39
|
+
errorCode: null,
|
|
40
|
+
canceled: false,
|
|
41
|
+
durationMs: 0,
|
|
42
|
+
bytesOut: 0,
|
|
43
|
+
};
|
|
44
|
+
finished = false;
|
|
45
|
+
headArrived = false;
|
|
46
|
+
streamingStarted = false;
|
|
47
|
+
bufferedChunks = [];
|
|
48
|
+
pendingEnd = false;
|
|
49
|
+
headTimer = null;
|
|
50
|
+
idleTimer = null;
|
|
51
|
+
constructor(headTimeoutMs, idleTimeoutMs) {
|
|
52
|
+
super();
|
|
53
|
+
this.headTimeoutMs = headTimeoutMs;
|
|
54
|
+
this.idleTimeoutMs = idleTimeoutMs;
|
|
55
|
+
this.headPromise = new Promise((resolve, reject) => {
|
|
56
|
+
this.resolveHead = resolve;
|
|
57
|
+
this.rejectHead = reject;
|
|
58
|
+
});
|
|
59
|
+
this.finishedPromise = new Promise((resolve) => {
|
|
60
|
+
this.settleFinished = resolve;
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
/** Transport bookkeeping when the request settles; no-op by default. */
|
|
64
|
+
onSettled() { }
|
|
65
|
+
waitHead() {
|
|
66
|
+
return this.headPromise;
|
|
67
|
+
}
|
|
68
|
+
/** Flush chunks buffered between head and consumer attach; after this, chunks emit live. */
|
|
69
|
+
startStreaming() {
|
|
70
|
+
this.streamingStarted = true;
|
|
71
|
+
for (const chunk of this.bufferedChunks)
|
|
72
|
+
this.emit('chunk', chunk);
|
|
73
|
+
this.bufferedChunks = [];
|
|
74
|
+
if (this.pendingEnd) {
|
|
75
|
+
this.pendingEnd = false;
|
|
76
|
+
this.emit('end');
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
waitFinished() {
|
|
80
|
+
return this.finishedPromise;
|
|
81
|
+
}
|
|
82
|
+
/** Consumer went away; abort upstream. */
|
|
83
|
+
cancel() {
|
|
84
|
+
if (this.finished)
|
|
85
|
+
return;
|
|
86
|
+
this.abortUpstream();
|
|
87
|
+
this.finalize({ errorCode: 'REQUEST_CANCELED', canceled: true });
|
|
88
|
+
}
|
|
89
|
+
handleHead(status, headers) {
|
|
90
|
+
if (this.finished || this.headArrived)
|
|
91
|
+
return;
|
|
92
|
+
this.headArrived = true;
|
|
93
|
+
this.clearTimers();
|
|
94
|
+
this.result.status = status;
|
|
95
|
+
this.armIdleTimer();
|
|
96
|
+
this.resolveHead({ status, headers });
|
|
97
|
+
this.emit('head', status, headers);
|
|
98
|
+
}
|
|
99
|
+
handleChunk(payload) {
|
|
100
|
+
if (this.finished || !this.headArrived)
|
|
101
|
+
return;
|
|
102
|
+
this.bytesOut += payload.byteLength;
|
|
103
|
+
this.result.bytesOut = this.bytesOut;
|
|
104
|
+
this.armIdleTimer();
|
|
105
|
+
if (this.streamingStarted)
|
|
106
|
+
this.emit('chunk', payload);
|
|
107
|
+
else
|
|
108
|
+
this.bufferedChunks.push(payload);
|
|
109
|
+
}
|
|
110
|
+
handleEnd() {
|
|
111
|
+
if (this.finished)
|
|
112
|
+
return;
|
|
113
|
+
this.clearTimers();
|
|
114
|
+
if (!this.headArrived) {
|
|
115
|
+
// protocol violation: end without head
|
|
116
|
+
this.fail('TUNNEL_CLOSED', `${this.peer} ended request without a response head`, 502);
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
this.finalize({});
|
|
120
|
+
// transport may deliver head+end in one tick, before the consumer attached;
|
|
121
|
+
// hold the end until streaming
|
|
122
|
+
if (this.streamingStarted)
|
|
123
|
+
this.emit('end');
|
|
124
|
+
else
|
|
125
|
+
this.pendingEnd = true;
|
|
126
|
+
}
|
|
127
|
+
handleError(code, message) {
|
|
128
|
+
if (this.finished)
|
|
129
|
+
return;
|
|
130
|
+
this.fail(code, message, statusForCode(code));
|
|
131
|
+
}
|
|
132
|
+
/** Timeout while waiting for a response head; always 504 either way. */
|
|
133
|
+
armHeadTimer() {
|
|
134
|
+
this.headTimer = setTimeout(() => this.fail(this.headTimeoutCode, `no response head from ${this.peer}`, statusForCode(this.headTimeoutCode)), this.headTimeoutMs);
|
|
135
|
+
}
|
|
136
|
+
fail(code, message, status) {
|
|
137
|
+
this.clearTimers();
|
|
138
|
+
this.abortUpstream();
|
|
139
|
+
if (!this.headArrived) {
|
|
140
|
+
this.rejectHead({ code, message, status });
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
this.emit('error', { code, message, status });
|
|
144
|
+
}
|
|
145
|
+
this.finalize({ errorCode: code });
|
|
146
|
+
}
|
|
147
|
+
finalize(overrides) {
|
|
148
|
+
if (this.finished)
|
|
149
|
+
return;
|
|
150
|
+
this.finished = true;
|
|
151
|
+
this.resumeInput();
|
|
152
|
+
this.clearTimers();
|
|
153
|
+
this.result.durationMs = Date.now() - this.startedAt;
|
|
154
|
+
if (overrides.errorCode !== undefined)
|
|
155
|
+
this.result.errorCode = overrides.errorCode;
|
|
156
|
+
if (overrides.canceled)
|
|
157
|
+
this.result.canceled = true;
|
|
158
|
+
// settle the head promise too: the consumer handler may still be awaiting it
|
|
159
|
+
if (!this.headArrived) {
|
|
160
|
+
const code = this.result.errorCode ?? 'REQUEST_CANCELED';
|
|
161
|
+
this.rejectHead({
|
|
162
|
+
code,
|
|
163
|
+
message: `request ended before response head (${code})`,
|
|
164
|
+
status: statusForCode(code),
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
this.onSettled();
|
|
168
|
+
this.settleFinished(this.result);
|
|
169
|
+
}
|
|
170
|
+
armIdleTimer() {
|
|
171
|
+
if (this.idleTimer)
|
|
172
|
+
clearTimeout(this.idleTimer);
|
|
173
|
+
this.idleTimer = setTimeout(() => {
|
|
174
|
+
this.fail('STREAM_IDLE_TIMEOUT', 'response stream idle', statusForCode('STREAM_IDLE_TIMEOUT'));
|
|
175
|
+
}, this.idleTimeoutMs);
|
|
176
|
+
}
|
|
177
|
+
clearTimers() {
|
|
178
|
+
if (this.headTimer)
|
|
179
|
+
clearTimeout(this.headTimer);
|
|
180
|
+
if (this.idleTimer)
|
|
181
|
+
clearTimeout(this.idleTimer);
|
|
182
|
+
this.headTimer = null;
|
|
183
|
+
this.idleTimer = null;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=relay.js.map
|