aweshare 0.6.9 → 0.7.1
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.md +8 -1
- package/apps/agent/dist/cli.js +3 -4
- package/apps/agent/dist/cli.js.map +1 -1
- 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 +18 -6
- package/apps/agent/dist/table.js.map +1 -1
- package/apps/consumer/dist/cli.js +62 -7
- package/apps/consumer/dist/cli.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/consumer/dist/watch.d.ts +18 -0
- package/apps/consumer/dist/watch.js +69 -0
- package/apps/consumer/dist/watch.js.map +1 -0
- package/apps/hub/dist/cli.js +3 -4
- package/apps/hub/dist/cli.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 +16 -4
- 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/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 +18 -6
- 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/format.d.ts +6 -0
- package/packages/protocol/dist/format.js +9 -0
- package/packages/protocol/dist/format.js.map +1 -0
- package/packages/protocol/dist/index.d.ts +2 -0
- package/packages/protocol/dist/index.js +2 -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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"relay.js","sourceRoot":"","sources":["../src/relay.ts"],"names":[],"mappings":"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"}
|
package/apps/hub/dist/table.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { fmtTime, type ModelComparison } from 'aweshare-protocol';
|
|
1
|
+
import { fmtTime, type ModelComparison, type ShareSchedule } from 'aweshare-protocol';
|
|
2
2
|
export { fmtTime };
|
|
3
3
|
/** Left-aligned columns with two-space gutters; null-ish cells render as '-'. */
|
|
4
4
|
export declare function formatTable(headers: string[], rows: string[][]): string;
|
|
@@ -73,6 +73,11 @@ export interface StatusOffering {
|
|
|
73
73
|
activeUsers?: number;
|
|
74
74
|
dailyTokens?: number;
|
|
75
75
|
usedDailyTokens?: number;
|
|
76
|
+
/** Share-time schedule as registered (null = shared around the clock);
|
|
77
|
+
* undefined on hubs that predate it. */
|
|
78
|
+
schedule?: ShareSchedule | null;
|
|
79
|
+
/** Whether the schedule admits right now; undefined on old hubs. */
|
|
80
|
+
shareState?: 'open' | 'closed' | null;
|
|
76
81
|
}
|
|
77
82
|
/** Which hub-hosted aliases a bare `hub produce refresh --all` would touch:
|
|
78
83
|
* unique hub/ aliases with a daily cap. Producer-registered rows (ns/...)
|
|
@@ -91,6 +96,11 @@ export declare function lastSeenCell(hubCheckAt: string | null | undefined, now?
|
|
|
91
96
|
* apps/agent/src/table.ts with the shared headers: the observed id, '✗'-marked
|
|
92
97
|
* when it disagrees with the declaration, '-' when nothing was observed. */
|
|
93
98
|
export declare function observedCell(observedModel: string | null | undefined, modelVerified: boolean | null | undefined, modelMatch?: ModelComparison | null): string;
|
|
99
|
+
/** The SCHEDULE cell — kept verbatim in apps/consumer/src/table.ts and
|
|
100
|
+
* apps/agent/src/table.ts: the offering's share-time schedule as configured
|
|
101
|
+
* ('-' when it has none), with ' (closed)' appended while the window is shut
|
|
102
|
+
* so a listed-online alias never looks callable when it is not. */
|
|
103
|
+
export declare function scheduleCell(schedule: ShareSchedule | null | undefined, shareState: 'open' | 'closed' | null | undefined, viewerTz?: string): string;
|
|
94
104
|
export interface HubStatusInput {
|
|
95
105
|
maxProducers: number;
|
|
96
106
|
consumerRps: number;
|
package/apps/hub/dist/table.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Aligned-column tables for the hub CLI's list output; `--json` keeps the raw API shape.
|
|
2
|
-
import { compareModels, fmtTime, protocolLabel } from '../../../packages/protocol/dist/index.js';
|
|
2
|
+
import { compareModels, displayTimezone, fmtTime, fmtTokens, formatShareSchedule, protocolLabel, } from '../../../packages/protocol/dist/index.js';
|
|
3
3
|
import { LOCAL_PRODUCER_ID } from './db.js';
|
|
4
4
|
// shared across the CLIs (display zone: AWESHARE_TIMEZONE, default Asia/Shanghai)
|
|
5
5
|
export { fmtTime };
|
|
@@ -124,6 +124,16 @@ export function observedCell(observedModel, modelVerified, modelMatch) {
|
|
|
124
124
|
return `${observedModel} ✗`;
|
|
125
125
|
return modelMatch === 'insufficient' ? `${observedModel} ?` : observedModel;
|
|
126
126
|
}
|
|
127
|
+
/** The SCHEDULE cell — kept verbatim in apps/consumer/src/table.ts and
|
|
128
|
+
* apps/agent/src/table.ts: the offering's share-time schedule as configured
|
|
129
|
+
* ('-' when it has none), with ' (closed)' appended while the window is shut
|
|
130
|
+
* so a listed-online alias never looks callable when it is not. */
|
|
131
|
+
export function scheduleCell(schedule, shareState, viewerTz = displayTimezone()) {
|
|
132
|
+
if (schedule === undefined || schedule === null)
|
|
133
|
+
return '-';
|
|
134
|
+
const text = formatShareSchedule(schedule, viewerTz);
|
|
135
|
+
return shareState === 'closed' ? `${text} (closed)` : text;
|
|
136
|
+
}
|
|
127
137
|
const STATUS_RANK = {
|
|
128
138
|
online: 0,
|
|
129
139
|
unstable: 1,
|
|
@@ -147,6 +157,7 @@ const OFFERING_HEADERS = [
|
|
|
147
157
|
'PER USER',
|
|
148
158
|
'DAILY TOKENS',
|
|
149
159
|
'REMAINING',
|
|
160
|
+
'SCHEDULE',
|
|
150
161
|
];
|
|
151
162
|
/** An alias may speak several protocols (one row each); its status is the
|
|
152
163
|
* worst of them — an operator's eye cares about what stopped working. */
|
|
@@ -181,12 +192,13 @@ export function renderOfferings(offerings) {
|
|
|
181
192
|
join((o) => (o.maxConcurrentUsers === undefined ? '-' : String(o.maxConcurrentUsers))),
|
|
182
193
|
join((o) => o.activeUsers === undefined ? '-' : `${o.activeUsers}/${o.maxConcurrentUsers ?? '-'}`),
|
|
183
194
|
join((o) => o.maxConcurrencyPerUser === undefined ? '-' : String(o.maxConcurrencyPerUser)),
|
|
184
|
-
join((o) => o.dailyTokens === undefined ? '-' : o.dailyTokens === 0 ? '∞' :
|
|
195
|
+
join((o) => o.dailyTokens === undefined ? '-' : o.dailyTokens === 0 ? '∞' : fmtTokens(o.dailyTokens)),
|
|
185
196
|
join((o) => o.dailyTokens === undefined
|
|
186
197
|
? '-'
|
|
187
198
|
: o.dailyTokens === 0
|
|
188
199
|
? '∞'
|
|
189
|
-
:
|
|
200
|
+
: fmtTokens(Math.max(0, o.dailyTokens - (o.usedDailyTokens ?? 0)))),
|
|
201
|
+
join((o) => scheduleCell(o.schedule, o.shareState)),
|
|
190
202
|
],
|
|
191
203
|
};
|
|
192
204
|
});
|
|
@@ -295,7 +307,7 @@ export function renderUsage(rows, consumerName) {
|
|
|
295
307
|
`${r.duration_ms}ms`,
|
|
296
308
|
r.prompt_tokens === null && r.completion_tokens === null
|
|
297
309
|
? '-'
|
|
298
|
-
: `${r.prompt_tokens ?? 0}+${r.completion_tokens ?? 0}`,
|
|
310
|
+
: `${fmtTokens(r.prompt_tokens ?? 0)}+${fmtTokens(r.completion_tokens ?? 0)}`,
|
|
299
311
|
]));
|
|
300
312
|
}
|
|
301
313
|
/**
|
|
@@ -328,8 +340,8 @@ export function renderUsageSummary(rows, group, showProducer = true) {
|
|
|
328
340
|
String(r.requests),
|
|
329
341
|
String(r.errors),
|
|
330
342
|
`${(((r.requests - r.errors) / r.requests) * 100).toFixed(1)}%`,
|
|
331
|
-
|
|
332
|
-
|
|
343
|
+
fmtTokens(r.prompt_tokens),
|
|
344
|
+
fmtTokens(r.completion_tokens),
|
|
333
345
|
String(r.unknown_tokens),
|
|
334
346
|
`${r.avg_duration_ms}ms`,
|
|
335
347
|
fmtTime(r.last_at),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"table.js","sourceRoot":"","sources":["../src/table.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"table.js","sourceRoot":"","sources":["../src/table.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { EventEmitter } from 'node:events';
|
|
2
1
|
import type { Server } from 'node:http';
|
|
3
|
-
import { type BackendStatus
|
|
2
|
+
import { type BackendStatus } from 'aweshare-protocol';
|
|
4
3
|
import type Database from 'better-sqlite3';
|
|
5
4
|
import type { Logger } from 'pino';
|
|
6
5
|
import { WebSocket } from 'ws';
|
|
7
6
|
import type { AuthContext } from './auth.js';
|
|
8
7
|
import type { HubConfig } from './config.js';
|
|
9
8
|
import { type OfferingRow } from './db.js';
|
|
9
|
+
import { BaseRelay, type DispatchInit } from './relay.js';
|
|
10
10
|
export declare const HEARTBEAT_TIMEOUT_MS = 45000;
|
|
11
11
|
export interface Session {
|
|
12
12
|
producerId: number;
|
|
@@ -19,99 +19,26 @@ export interface Session {
|
|
|
19
19
|
requests: Map<string, TunnelRequest>;
|
|
20
20
|
pausedRequests: Set<string>;
|
|
21
21
|
}
|
|
22
|
-
export interface DispatchInit {
|
|
23
|
-
protocol: Protocol;
|
|
24
|
-
backendId: string;
|
|
25
|
-
method: string;
|
|
26
|
-
path: string;
|
|
27
|
-
query: Record<string, string> | null;
|
|
28
|
-
headers: Record<string, string>;
|
|
29
|
-
body: Uint8Array;
|
|
30
|
-
}
|
|
31
|
-
export interface RelayResult {
|
|
32
|
-
status: number | null;
|
|
33
|
-
errorCode: string | null;
|
|
34
|
-
canceled: boolean;
|
|
35
|
-
durationMs: number;
|
|
36
|
-
bytesOut: number;
|
|
37
|
-
}
|
|
38
|
-
export interface RelayFailure {
|
|
39
|
-
code: string;
|
|
40
|
-
message: string;
|
|
41
|
-
status: number;
|
|
42
|
-
}
|
|
43
|
-
export declare function statusForCode(code: string): number;
|
|
44
|
-
/**
|
|
45
|
-
* One dispatched consumer request, whichever way it leaves the hub: through a
|
|
46
|
-
* producer tunnel (TunnelRequest) or straight upstream in-process
|
|
47
|
-
* (local.ts LocalRelay). handleInference consumes only this surface — the
|
|
48
|
-
* timers, buffering and settle semantics are the same for both.
|
|
49
|
-
*/
|
|
50
|
-
export interface Relay extends EventEmitter {
|
|
51
|
-
readonly requestId: string;
|
|
52
|
-
dispatch(): Promise<void>;
|
|
53
|
-
waitHead(): Promise<{
|
|
54
|
-
status: number;
|
|
55
|
-
headers: Record<string, string>;
|
|
56
|
-
}>;
|
|
57
|
-
/** Flush chunks buffered between head and consumer attach; after this, chunks emit live. */
|
|
58
|
-
startStreaming(): void;
|
|
59
|
-
waitFinished(): Promise<RelayResult>;
|
|
60
|
-
/** Consumer went away; abort upstream. */
|
|
61
|
-
cancel(): void;
|
|
62
|
-
/** Stop reading upstream while a downstream HTTP response is saturated. */
|
|
63
|
-
pauseInput(): void;
|
|
64
|
-
resumeInput(): void;
|
|
65
|
-
}
|
|
66
22
|
/**
|
|
67
23
|
* One dispatched consumer request: ticket + dispatch + response pump.
|
|
68
24
|
* Emits: 'head' {status, headers}, 'chunk' (Uint8Array), 'end', 'error' (RelayFailure).
|
|
69
25
|
* waitFinished() always resolves — never rejects — with the final RelayResult.
|
|
70
26
|
*/
|
|
71
|
-
export declare class TunnelRequest extends
|
|
27
|
+
export declare class TunnelRequest extends BaseRelay {
|
|
72
28
|
private readonly session;
|
|
73
29
|
private readonly init;
|
|
74
|
-
|
|
75
|
-
readonly
|
|
76
|
-
readonly startedAt: number;
|
|
77
|
-
bytesOut: number;
|
|
78
|
-
private headPromise;
|
|
79
|
-
private resolveHead;
|
|
80
|
-
private rejectHead;
|
|
81
|
-
private finishedPromise;
|
|
82
|
-
private settleFinished;
|
|
83
|
-
private result;
|
|
84
|
-
private finished;
|
|
85
|
-
private headArrived;
|
|
86
|
-
private streamingStarted;
|
|
87
|
-
private bufferedChunks;
|
|
88
|
-
private pendingEnd;
|
|
89
|
-
private headTimer;
|
|
90
|
-
private idleTimer;
|
|
30
|
+
protected readonly peer = "producer";
|
|
31
|
+
protected readonly headTimeoutCode = "TICKET_EXPIRED";
|
|
91
32
|
constructor(session: Session, init: DispatchInit, config: HubConfig);
|
|
33
|
+
protected onSettled(): void;
|
|
34
|
+
protected abortUpstream(): void;
|
|
92
35
|
dispatch(): Promise<void>;
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
headers: Record<string, string>;
|
|
96
|
-
}>;
|
|
97
|
-
/** Flush chunks buffered between head and consumer attach; after this, chunks emit live. */
|
|
98
|
-
startStreaming(): void;
|
|
99
|
-
waitFinished(): Promise<RelayResult>;
|
|
100
|
-
/** Consumer went away; tell the agent to abort upstream. */
|
|
101
|
-
cancel(): void;
|
|
36
|
+
/** The producer tunnel died under this request; fail it like any other error. */
|
|
37
|
+
handleSessionClosed(): void;
|
|
102
38
|
/** Stop reading this producer socket while a downstream HTTP response is saturated. */
|
|
103
39
|
pauseInput(): void;
|
|
104
40
|
/** Resume the shared producer socket after every saturated response has drained. */
|
|
105
41
|
resumeInput(): void;
|
|
106
|
-
handleHead(status: number, headers: Record<string, string>): void;
|
|
107
|
-
handleChunk(payload: Uint8Array): void;
|
|
108
|
-
handleEnd(): void;
|
|
109
|
-
handleError(code: string, message: string): void;
|
|
110
|
-
handleSessionClosed(): void;
|
|
111
|
-
private fail;
|
|
112
|
-
private finalize;
|
|
113
|
-
private armIdleTimer;
|
|
114
|
-
private clearTimers;
|
|
115
42
|
private send;
|
|
116
43
|
private sendBestEffort;
|
|
117
44
|
}
|
package/apps/hub/dist/tunnel.js
CHANGED
|
@@ -1,70 +1,36 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { BACKPRESSURE_LIMIT_BYTES, chunkBody, decodeChunkFrame, isValidAlias, PROTOCOLS, parseControlMessage, WIRE_VERSION, } from '../../../packages/protocol/dist/index.js';
|
|
1
|
+
import { parseOfferingCaps } from '../../../packages/producer-core/dist/index.js';
|
|
2
|
+
import { BACKPRESSURE_LIMIT_BYTES, chunkBody, decodeChunkFrame, isValidAlias, PROTOCOLS, parseControlMessage, validateShareSchedule, WIRE_VERSION, } from '../../../packages/protocol/dist/index.js';
|
|
4
3
|
import { WebSocket, WebSocketServer } from 'ws';
|
|
5
4
|
import { findProducerByHash, touchLastSeen, upsertOfferings } from './db.js';
|
|
5
|
+
import { warnUnreachableConcurrency } from './offerings.js';
|
|
6
|
+
import { BaseRelay } from './relay.js';
|
|
6
7
|
import { hashToken } from './tokens.js';
|
|
7
8
|
export const HEARTBEAT_TIMEOUT_MS = 45_000;
|
|
8
9
|
const SWEEP_INTERVAL_MS = 10_000;
|
|
9
10
|
const MAX_OFFERINGS = 256;
|
|
10
|
-
export function statusForCode(code) {
|
|
11
|
-
switch (code) {
|
|
12
|
-
case 'TICKET_EXPIRED':
|
|
13
|
-
case 'STREAM_IDLE_TIMEOUT':
|
|
14
|
-
case 'BACKEND_TIMEOUT':
|
|
15
|
-
return 504;
|
|
16
|
-
case 'REQUEST_CANCELED':
|
|
17
|
-
return 499;
|
|
18
|
-
default:
|
|
19
|
-
return 502;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
11
|
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
23
12
|
/**
|
|
24
13
|
* One dispatched consumer request: ticket + dispatch + response pump.
|
|
25
14
|
* Emits: 'head' {status, headers}, 'chunk' (Uint8Array), 'end', 'error' (RelayFailure).
|
|
26
15
|
* waitFinished() always resolves — never rejects — with the final RelayResult.
|
|
27
16
|
*/
|
|
28
|
-
export class TunnelRequest extends
|
|
17
|
+
export class TunnelRequest extends BaseRelay {
|
|
29
18
|
session;
|
|
30
19
|
init;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
startedAt = Date.now();
|
|
34
|
-
bytesOut = 0;
|
|
35
|
-
headPromise;
|
|
36
|
-
resolveHead;
|
|
37
|
-
rejectHead;
|
|
38
|
-
finishedPromise;
|
|
39
|
-
settleFinished;
|
|
40
|
-
result = {
|
|
41
|
-
status: null,
|
|
42
|
-
errorCode: null,
|
|
43
|
-
canceled: false,
|
|
44
|
-
durationMs: 0,
|
|
45
|
-
bytesOut: 0,
|
|
46
|
-
};
|
|
47
|
-
finished = false;
|
|
48
|
-
headArrived = false;
|
|
49
|
-
streamingStarted = false;
|
|
50
|
-
bufferedChunks = [];
|
|
51
|
-
pendingEnd = false;
|
|
52
|
-
headTimer = null;
|
|
53
|
-
idleTimer = null;
|
|
20
|
+
peer = 'producer';
|
|
21
|
+
headTimeoutCode = 'TICKET_EXPIRED';
|
|
54
22
|
constructor(session, init, config) {
|
|
55
|
-
super();
|
|
23
|
+
super(config.headTimeoutMs, config.idleTimeoutMs);
|
|
56
24
|
this.session = session;
|
|
57
25
|
this.init = init;
|
|
58
|
-
this.config = config;
|
|
59
|
-
this.headPromise = new Promise((resolve, reject) => {
|
|
60
|
-
this.resolveHead = resolve;
|
|
61
|
-
this.rejectHead = reject;
|
|
62
|
-
});
|
|
63
|
-
this.finishedPromise = new Promise((resolve) => {
|
|
64
|
-
this.settleFinished = resolve;
|
|
65
|
-
});
|
|
66
26
|
this.session.requests.set(this.requestId, this);
|
|
67
27
|
}
|
|
28
|
+
onSettled() {
|
|
29
|
+
this.session.requests.delete(this.requestId);
|
|
30
|
+
}
|
|
31
|
+
abortUpstream() {
|
|
32
|
+
this.sendBestEffort(JSON.stringify({ type: 'request.cancel', requestId: this.requestId }));
|
|
33
|
+
}
|
|
68
34
|
async dispatch() {
|
|
69
35
|
const start = {
|
|
70
36
|
type: 'request.start',
|
|
@@ -81,31 +47,13 @@ export class TunnelRequest extends EventEmitter {
|
|
|
81
47
|
await this.send(frame);
|
|
82
48
|
}
|
|
83
49
|
await this.send(JSON.stringify({ type: 'request.end', requestId: this.requestId }));
|
|
84
|
-
this.
|
|
85
|
-
}
|
|
86
|
-
waitHead() {
|
|
87
|
-
return this.headPromise;
|
|
88
|
-
}
|
|
89
|
-
/** Flush chunks buffered between head and consumer attach; after this, chunks emit live. */
|
|
90
|
-
startStreaming() {
|
|
91
|
-
this.streamingStarted = true;
|
|
92
|
-
for (const chunk of this.bufferedChunks)
|
|
93
|
-
this.emit('chunk', chunk);
|
|
94
|
-
this.bufferedChunks = [];
|
|
95
|
-
if (this.pendingEnd) {
|
|
96
|
-
this.pendingEnd = false;
|
|
97
|
-
this.emit('end');
|
|
98
|
-
}
|
|
50
|
+
this.armHeadTimer();
|
|
99
51
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
}
|
|
103
|
-
/** Consumer went away; tell the agent to abort upstream. */
|
|
104
|
-
cancel() {
|
|
52
|
+
/** The producer tunnel died under this request; fail it like any other error. */
|
|
53
|
+
handleSessionClosed() {
|
|
105
54
|
if (this.finished)
|
|
106
55
|
return;
|
|
107
|
-
this.
|
|
108
|
-
this.finalize({ errorCode: 'REQUEST_CANCELED', canceled: true });
|
|
56
|
+
this.fail('TUNNEL_CLOSED', 'producer tunnel closed mid-request', 502);
|
|
109
57
|
}
|
|
110
58
|
/** Stop reading this producer socket while a downstream HTTP response is saturated. */
|
|
111
59
|
pauseInput() {
|
|
@@ -125,102 +73,6 @@ export class TunnelRequest extends EventEmitter {
|
|
|
125
73
|
this.session.ws.resume();
|
|
126
74
|
}
|
|
127
75
|
}
|
|
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
|
-
// protocol violation: end without head
|
|
155
|
-
this.fail('TUNNEL_CLOSED', 'producer ended request without a response head', 502);
|
|
156
|
-
return;
|
|
157
|
-
}
|
|
158
|
-
this.finalize({});
|
|
159
|
-
// ws may deliver head+end in one tick, before the consumer attached; hold until streaming
|
|
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
|
-
handleSessionClosed() {
|
|
171
|
-
if (this.finished)
|
|
172
|
-
return;
|
|
173
|
-
this.fail('TUNNEL_CLOSED', 'producer tunnel closed mid-request', 502);
|
|
174
|
-
}
|
|
175
|
-
fail(code, message, status) {
|
|
176
|
-
this.clearTimers();
|
|
177
|
-
this.sendBestEffort(JSON.stringify({ type: 'request.cancel', requestId: this.requestId }));
|
|
178
|
-
if (!this.headArrived) {
|
|
179
|
-
this.rejectHead({ code, message, status });
|
|
180
|
-
}
|
|
181
|
-
else {
|
|
182
|
-
this.emit('error', { code, message, status });
|
|
183
|
-
}
|
|
184
|
-
this.finalize({ errorCode: code });
|
|
185
|
-
}
|
|
186
|
-
finalize(overrides) {
|
|
187
|
-
if (this.finished)
|
|
188
|
-
return;
|
|
189
|
-
this.finished = true;
|
|
190
|
-
this.resumeInput();
|
|
191
|
-
this.clearTimers();
|
|
192
|
-
this.result.durationMs = Date.now() - this.startedAt;
|
|
193
|
-
if (overrides.errorCode !== undefined)
|
|
194
|
-
this.result.errorCode = overrides.errorCode;
|
|
195
|
-
if (overrides.canceled)
|
|
196
|
-
this.result.canceled = true;
|
|
197
|
-
// settle the head promise too: the consumer handler may still be awaiting it
|
|
198
|
-
if (!this.headArrived) {
|
|
199
|
-
const code = this.result.errorCode ?? 'REQUEST_CANCELED';
|
|
200
|
-
this.rejectHead({
|
|
201
|
-
code,
|
|
202
|
-
message: `request ended before response head (${code})`,
|
|
203
|
-
status: statusForCode(code),
|
|
204
|
-
});
|
|
205
|
-
}
|
|
206
|
-
this.session.requests.delete(this.requestId);
|
|
207
|
-
this.settleFinished(this.result);
|
|
208
|
-
}
|
|
209
|
-
armIdleTimer() {
|
|
210
|
-
if (this.idleTimer)
|
|
211
|
-
clearTimeout(this.idleTimer);
|
|
212
|
-
this.idleTimer = setTimeout(() => {
|
|
213
|
-
this.fail('STREAM_IDLE_TIMEOUT', 'response stream idle', statusForCode('STREAM_IDLE_TIMEOUT'));
|
|
214
|
-
}, this.config.idleTimeoutMs);
|
|
215
|
-
}
|
|
216
|
-
clearTimers() {
|
|
217
|
-
if (this.headTimer)
|
|
218
|
-
clearTimeout(this.headTimer);
|
|
219
|
-
if (this.idleTimer)
|
|
220
|
-
clearTimeout(this.idleTimer);
|
|
221
|
-
this.headTimer = null;
|
|
222
|
-
this.idleTimer = null;
|
|
223
|
-
}
|
|
224
76
|
async send(data) {
|
|
225
77
|
while (this.session.ws.bufferedAmount > BACKPRESSURE_LIMIT_BYTES) {
|
|
226
78
|
await sleep(20);
|
|
@@ -386,19 +238,7 @@ export class Tunnel {
|
|
|
386
238
|
}
|
|
387
239
|
if (accepted.length > 0 || raw.length === 0) {
|
|
388
240
|
upsertOfferings(this.db, session.producerId, accepted);
|
|
389
|
-
|
|
390
|
-
// a promise default consumers can never reach (their own limit
|
|
391
|
-
// binds first) — say so instead of silently capping it
|
|
392
|
-
for (const o of accepted) {
|
|
393
|
-
if (o.maxConcurrencyPerUser > this.config.consumerMaxConcurrent) {
|
|
394
|
-
this.log.warn({
|
|
395
|
-
producer: session.name,
|
|
396
|
-
alias: o.alias,
|
|
397
|
-
perUser: o.maxConcurrencyPerUser,
|
|
398
|
-
consumerMaxConcurrent: this.config.consumerMaxConcurrent,
|
|
399
|
-
}, 'maxConcurrencyPerUser exceeds the hub consumer default maxConcurrent — consumers on defaults cannot reach it');
|
|
400
|
-
}
|
|
401
|
-
}
|
|
241
|
+
warnUnreachableConcurrency(this.log, accepted, this.config.consumerMaxConcurrent, session.name);
|
|
402
242
|
}
|
|
403
243
|
}
|
|
404
244
|
wire({ type: 'registered', accepted: accepted.map((o) => o.alias), rejected });
|
|
@@ -465,23 +305,26 @@ export class Tunnel {
|
|
|
465
305
|
if (o.upstreamModel.length === 0) {
|
|
466
306
|
return { alias, reason: 'upstreamModel must be a real backend model id' };
|
|
467
307
|
}
|
|
468
|
-
const
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
if (
|
|
475
|
-
|
|
476
|
-
if (!Number.isInteger(users) || users < 1 || users > 64) {
|
|
477
|
-
return { alias, reason: 'maxConcurrentUsers must be an integer 1..64' };
|
|
478
|
-
}
|
|
308
|
+
const caps = parseOfferingCaps({
|
|
309
|
+
maxConcurrencyPerUser: o.maxConcurrencyPerUser,
|
|
310
|
+
maxConcurrentUsers: o.maxConcurrentUsers,
|
|
311
|
+
dailyTokens: o.dailyTokens,
|
|
312
|
+
});
|
|
313
|
+
const [reason] = caps.problems;
|
|
314
|
+
if (reason !== undefined) {
|
|
315
|
+
return { alias, reason };
|
|
479
316
|
}
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
317
|
+
// the schedule rides the same registration; the hub re-validates the
|
|
318
|
+
// resolved shape so a hand-rolled register cannot smuggle in garbage the
|
|
319
|
+
// admission gate would later trip on
|
|
320
|
+
let schedule;
|
|
321
|
+
if (o.schedule !== undefined) {
|
|
322
|
+
const sched = validateShareSchedule(o.schedule);
|
|
323
|
+
const [schedReason] = sched.problems;
|
|
324
|
+
if (schedReason !== undefined) {
|
|
325
|
+
return { alias, reason: `schedule: ${schedReason}` };
|
|
484
326
|
}
|
|
327
|
+
schedule = sched.schedule ?? undefined;
|
|
485
328
|
}
|
|
486
329
|
return {
|
|
487
330
|
offering: {
|
|
@@ -489,9 +332,12 @@ export class Tunnel {
|
|
|
489
332
|
protocol: o.protocol,
|
|
490
333
|
upstreamModel: o.upstreamModel,
|
|
491
334
|
backendId: o.backendId,
|
|
492
|
-
maxConcurrencyPerUser,
|
|
493
|
-
...(
|
|
494
|
-
|
|
335
|
+
maxConcurrencyPerUser: caps.maxConcurrencyPerUser,
|
|
336
|
+
...(caps.maxConcurrentUsers !== undefined && {
|
|
337
|
+
maxConcurrentUsers: caps.maxConcurrentUsers,
|
|
338
|
+
}),
|
|
339
|
+
...(caps.dailyTokens !== undefined && { dailyTokens: caps.dailyTokens }),
|
|
340
|
+
...(schedule !== undefined && { schedule }),
|
|
495
341
|
},
|
|
496
342
|
alias,
|
|
497
343
|
};
|