@airterm/protocol 0.2.0 → 0.3.0
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 +23 -11
- package/dist/direct-negotiation.d.ts +40 -0
- package/dist/direct-negotiation.d.ts.map +1 -0
- package/dist/direct-negotiation.js +169 -0
- package/dist/direct-negotiation.js.map +1 -0
- package/dist/framing.d.ts +4 -1
- package/dist/framing.d.ts.map +1 -1
- package/dist/framing.js +3 -0
- package/dist/framing.js.map +1 -1
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/messages.d.ts +1 -1
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js +11 -6
- package/dist/messages.js.map +1 -1
- package/dist/outbound-queue.d.ts +16 -0
- package/dist/outbound-queue.d.ts.map +1 -0
- package/dist/outbound-queue.js +139 -0
- package/dist/outbound-queue.js.map +1 -0
- package/dist/p2p.d.ts +37 -0
- package/dist/p2p.d.ts.map +1 -0
- package/dist/p2p.js +91 -0
- package/dist/p2p.js.map +1 -0
- package/dist/peer-transport.d.ts +31 -0
- package/dist/peer-transport.d.ts.map +1 -0
- package/dist/peer-transport.js +155 -0
- package/dist/peer-transport.js.map +1 -0
- package/dist/transport-handoff.d.ts +25 -0
- package/dist/transport-handoff.d.ts.map +1 -0
- package/dist/transport-handoff.js +207 -0
- package/dist/transport-handoff.js.map +1 -0
- package/dist/transport.d.ts +38 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/transport.js +85 -0
- package/dist/transport.js.map +1 -0
- package/dist/webrtc-transport.d.ts +14 -0
- package/dist/webrtc-transport.d.ts.map +1 -0
- package/dist/webrtc-transport.js +106 -0
- package/dist/webrtc-transport.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -24,14 +24,26 @@ import { deriveCapabilityKeys, NoiseTransport } from '@airterm/protocol';
|
|
|
24
24
|
Requires Node.js 22.12 or newer for Node-based consumers. Browser consumers need
|
|
25
25
|
Web Crypto and WebAssembly support.
|
|
26
26
|
|
|
27
|
-
##
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
27
|
+
## Direct transport extension
|
|
28
|
+
|
|
29
|
+
Protocol v1 framing is unchanged. `SessionDescription` advertises `p2p-v1`;
|
|
30
|
+
peers must explicitly accept it before using inner types 21 (`P2PControl`),
|
|
31
|
+
22 (`OutputAck`), and 23 (`RecoveryComplete`). Older peers remain on relay.
|
|
32
|
+
Acceptance can enable byte-offset recovery without attempting WebRTC.
|
|
33
|
+
|
|
34
|
+
`EncryptedConnection` owns each path's Noise state and bounded outbound queue.
|
|
35
|
+
Relay and direct paths have independent handshakes. Direct handshake binding
|
|
36
|
+
includes the session ID, relay pairing ID, and random negotiation ID. Signaling
|
|
37
|
+
and handoff coordination travel inside relay encryption. The gateway requires
|
|
38
|
+
no SDP/ICE parsing or protocol changes. Exactly one path carries application
|
|
39
|
+
data; acknowledgement and lifecycle coordination may still use relay.
|
|
40
|
+
|
|
41
|
+
SDP is limited to 32 KiB, candidates to 2 KiB each and 64 per peer, and signaling
|
|
42
|
+
to 256 KiB per peer. Direct frames are encrypted once, then fragmented into
|
|
43
|
+
messages no larger than 16 KiB. Receivers assemble one bounded frame at a time.
|
|
44
|
+
Negotiation has a ten-second deadline, transfer draining thirty seconds, and
|
|
45
|
+
handoff two seconds. Ambiguous handoffs require a fresh relay pairing.
|
|
46
|
+
|
|
47
|
+
Output acknowledgements refer to contiguous PTY byte offsets consumed by the
|
|
48
|
+
terminal renderer, not merely received by the socket. Never acknowledge across
|
|
49
|
+
a gap, reuse a cipher after failure, or replay uncertain terminal input.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { EncryptedConnection, type BinaryTransport } from './transport.js';
|
|
2
|
+
import type { InnerFrame } from './framing.js';
|
|
3
|
+
export interface RtcAdapter extends BinaryTransport {
|
|
4
|
+
offer(sdp: string): Promise<void>;
|
|
5
|
+
answer?(sdp: string): Promise<void>;
|
|
6
|
+
candidate(candidate: string, mid: string): Promise<void>;
|
|
7
|
+
start?(): Promise<void>;
|
|
8
|
+
}
|
|
9
|
+
export interface RtcAdapterEvents {
|
|
10
|
+
onOpen: () => void;
|
|
11
|
+
onData: (bytes: Uint8Array) => void;
|
|
12
|
+
onDescription: (sdp: string) => void;
|
|
13
|
+
onCandidate: (candidate: string, mid: string) => void;
|
|
14
|
+
onFailure: (error: Error) => void;
|
|
15
|
+
}
|
|
16
|
+
export type RtcAdapterFactory = (stun: string[], events: RtcAdapterEvents) => RtcAdapter;
|
|
17
|
+
export declare class DirectNegotiation {
|
|
18
|
+
#private;
|
|
19
|
+
readonly id: string;
|
|
20
|
+
private readonly initiator;
|
|
21
|
+
private readonly identity;
|
|
22
|
+
private readonly factory;
|
|
23
|
+
private readonly events;
|
|
24
|
+
constructor(id: string, initiator: boolean, identity: {
|
|
25
|
+
sessionId: string;
|
|
26
|
+
psk: Uint8Array;
|
|
27
|
+
pairing: string;
|
|
28
|
+
}, factory: RtcAdapterFactory, events: {
|
|
29
|
+
signal: (frame: InnerFrame) => Promise<void>;
|
|
30
|
+
ready: (connection: EncryptedConnection) => void;
|
|
31
|
+
frame: (frame: InnerFrame) => void;
|
|
32
|
+
pressure: (paused: boolean) => void;
|
|
33
|
+
failed: (error: Error) => void;
|
|
34
|
+
});
|
|
35
|
+
start(stun: string[], timeoutMs?: number): void;
|
|
36
|
+
receive(payload: Uint8Array): void;
|
|
37
|
+
close(): void;
|
|
38
|
+
fail(error: Error): void;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=direct-negotiation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"direct-negotiation.d.ts","sourceRoot":"","sources":["../src/direct-negotiation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAQ3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,MAAM,WAAW,UAAW,SAAQ,eAAe;IAC/C,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,MAAM,CAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACpC,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B;AACD,MAAM,WAAW,gBAAgB;IAC7B,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,MAAM,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;IACpC,aAAa,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,WAAW,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACtD,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CACrC;AACD,MAAM,MAAM,iBAAiB,GAAG,CAC5B,IAAI,EAAE,MAAM,EAAE,EACd,MAAM,EAAE,gBAAgB,KACvB,UAAU,CAAC;AAEhB,qBAAa,iBAAiB;;IAatB,QAAQ,CAAC,EAAE,EAAE,MAAM;IACnB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAKzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBARd,EAAE,EAAE,MAAM,EACF,SAAS,EAAE,OAAO,EAClB,QAAQ,EAAE;QACvB,SAAS,EAAE,MAAM,CAAC;QAClB,GAAG,EAAE,UAAU,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;KACnB,EACgB,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE;QACrB,MAAM,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;QAC7C,KAAK,EAAE,CAAC,UAAU,EAAE,mBAAmB,KAAK,IAAI,CAAC;QACjD,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;QACnC,QAAQ,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;QACpC,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;KAClC;IAEE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,SAAQ,GAAG,IAAI;IA0E9C,OAAO,CAAC,OAAO,EAAE,UAAU,GAAG,IAAI;IAgDlC,KAAK,IAAI,IAAI;IAUb,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;CAmBlC"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { EncryptedConnection } from './transport.js';
|
|
2
|
+
import { WebRTCTransport } from './webrtc-transport.js';
|
|
3
|
+
import { directConnectionId, p2pFrame, SignalingBudget, } from './p2p.js';
|
|
4
|
+
export class DirectNegotiation {
|
|
5
|
+
id;
|
|
6
|
+
initiator;
|
|
7
|
+
identity;
|
|
8
|
+
factory;
|
|
9
|
+
events;
|
|
10
|
+
#adapter;
|
|
11
|
+
#transport;
|
|
12
|
+
#connection;
|
|
13
|
+
#timer;
|
|
14
|
+
#closed = false;
|
|
15
|
+
#remoteDescription = false;
|
|
16
|
+
#descriptionPending = false;
|
|
17
|
+
#localDescription = false;
|
|
18
|
+
#candidates = [];
|
|
19
|
+
#incoming = new SignalingBudget();
|
|
20
|
+
#outgoing = new SignalingBudget();
|
|
21
|
+
constructor(id, initiator, identity, factory, events) {
|
|
22
|
+
this.id = id;
|
|
23
|
+
this.initiator = initiator;
|
|
24
|
+
this.identity = identity;
|
|
25
|
+
this.factory = factory;
|
|
26
|
+
this.events = events;
|
|
27
|
+
}
|
|
28
|
+
start(stun, timeoutMs = 10000) {
|
|
29
|
+
if (this.#adapter || this.#closed)
|
|
30
|
+
return;
|
|
31
|
+
this.#timer = setTimeout(() => this.fail(new Error('Direct negotiation timed out.')), timeoutMs);
|
|
32
|
+
try {
|
|
33
|
+
this.#adapter = this.factory(stun, {
|
|
34
|
+
onOpen: () => {
|
|
35
|
+
if (this.#closed || !this.#adapter)
|
|
36
|
+
return;
|
|
37
|
+
this.#transport = new WebRTCTransport(this.#adapter, (bytes) => this.#connection?.receive(bytes), (error) => this.fail(error));
|
|
38
|
+
this.#connection = new EncryptedConnection(this.#transport, {
|
|
39
|
+
initiator: this.initiator,
|
|
40
|
+
psk: this.identity.psk,
|
|
41
|
+
sessionId: this.identity.sessionId,
|
|
42
|
+
connectionId: directConnectionId(this.identity.pairing, this.id),
|
|
43
|
+
}, {
|
|
44
|
+
onSecure: () => {
|
|
45
|
+
clearTimeout(this.#timer);
|
|
46
|
+
this.#timer = undefined;
|
|
47
|
+
this.events.ready(this.#connection);
|
|
48
|
+
},
|
|
49
|
+
onFrame: (frame) => this.events.frame(frame),
|
|
50
|
+
onBackpressure: (paused) => this.events.pressure(paused),
|
|
51
|
+
onFailure: (error) => this.fail(error),
|
|
52
|
+
});
|
|
53
|
+
this.#connection.start();
|
|
54
|
+
},
|
|
55
|
+
onData: (bytes) => this.#transport?.receive(bytes),
|
|
56
|
+
onDescription: (sdp) => {
|
|
57
|
+
if (this.#localDescription) {
|
|
58
|
+
this.fail(new Error('Unexpected renegotiation.'));
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
this.#localDescription = true;
|
|
62
|
+
this.#signal({
|
|
63
|
+
type: this.initiator ? 'offer' : 'answer',
|
|
64
|
+
id: this.id,
|
|
65
|
+
sdp,
|
|
66
|
+
});
|
|
67
|
+
},
|
|
68
|
+
onCandidate: (candidate, mid) => {
|
|
69
|
+
const normalized = candidate.replace(/^a=/, '').trim();
|
|
70
|
+
if (normalized)
|
|
71
|
+
this.#signal({
|
|
72
|
+
type: 'candidate',
|
|
73
|
+
id: this.id,
|
|
74
|
+
candidate: normalized,
|
|
75
|
+
mid,
|
|
76
|
+
});
|
|
77
|
+
},
|
|
78
|
+
onFailure: (error) => this.fail(error),
|
|
79
|
+
});
|
|
80
|
+
void this.#adapter.start?.().catch((error) => this.fail(error));
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
this.fail(error instanceof Error
|
|
84
|
+
? error
|
|
85
|
+
: new Error('Direct negotiation failed.'));
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
receive(payload) {
|
|
89
|
+
if (this.#closed)
|
|
90
|
+
return;
|
|
91
|
+
try {
|
|
92
|
+
const message = this.#incoming.consume(payload);
|
|
93
|
+
if (message.id !== this.id)
|
|
94
|
+
throw new Error('Stale direct negotiation.');
|
|
95
|
+
if (message.type === 'offer' || message.type === 'answer') {
|
|
96
|
+
if (this.#remoteDescription ||
|
|
97
|
+
this.#descriptionPending ||
|
|
98
|
+
(message.type === 'offer') === this.initiator ||
|
|
99
|
+
!this.#adapter)
|
|
100
|
+
throw new Error('Unexpected SDP.');
|
|
101
|
+
this.#descriptionPending = true;
|
|
102
|
+
const applied = message.type === 'offer'
|
|
103
|
+
? this.#adapter.offer(message.sdp)
|
|
104
|
+
: this.#adapter.answer?.(message.sdp);
|
|
105
|
+
if (!applied)
|
|
106
|
+
throw new Error('Unsupported SDP role.');
|
|
107
|
+
void applied
|
|
108
|
+
.then(async () => {
|
|
109
|
+
if (this.#closed)
|
|
110
|
+
return;
|
|
111
|
+
this.#remoteDescription = true;
|
|
112
|
+
for (const candidate of this.#candidates.splice(0)) {
|
|
113
|
+
if (this.#closed)
|
|
114
|
+
return;
|
|
115
|
+
await this.#adapter?.candidate(candidate.candidate, candidate.mid);
|
|
116
|
+
}
|
|
117
|
+
})
|
|
118
|
+
.catch((error) => this.fail(error));
|
|
119
|
+
}
|
|
120
|
+
else if (message.type === 'candidate') {
|
|
121
|
+
if (!this.#remoteDescription)
|
|
122
|
+
this.#candidates.push(message);
|
|
123
|
+
else
|
|
124
|
+
void this.#adapter
|
|
125
|
+
?.candidate(message.candidate, message.mid)
|
|
126
|
+
.catch((error) => this.fail(error));
|
|
127
|
+
}
|
|
128
|
+
else
|
|
129
|
+
throw new Error('Unexpected signaling message.');
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
this.fail(error instanceof Error
|
|
133
|
+
? error
|
|
134
|
+
: new Error('Invalid direct signaling.'));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
close() {
|
|
138
|
+
if (this.#closed)
|
|
139
|
+
return;
|
|
140
|
+
this.#closed = true;
|
|
141
|
+
clearTimeout(this.#timer);
|
|
142
|
+
this.#timer = undefined;
|
|
143
|
+
this.#connection?.close();
|
|
144
|
+
this.#transport?.close();
|
|
145
|
+
this.#adapter?.close();
|
|
146
|
+
this.#candidates = [];
|
|
147
|
+
}
|
|
148
|
+
fail(error) {
|
|
149
|
+
if (this.#closed)
|
|
150
|
+
return;
|
|
151
|
+
this.close();
|
|
152
|
+
this.events.failed(error);
|
|
153
|
+
}
|
|
154
|
+
#signal(message) {
|
|
155
|
+
if (this.#closed)
|
|
156
|
+
return;
|
|
157
|
+
try {
|
|
158
|
+
const frame = p2pFrame(message);
|
|
159
|
+
this.#outgoing.consume(frame.payload);
|
|
160
|
+
void this.events.signal(frame).catch((error) => this.fail(error));
|
|
161
|
+
}
|
|
162
|
+
catch (error) {
|
|
163
|
+
this.fail(error instanceof Error
|
|
164
|
+
? error
|
|
165
|
+
: new Error('Invalid local signaling.'));
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=direct-negotiation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"direct-negotiation.js","sourceRoot":"","sources":["../src/direct-negotiation.ts"],"names":[],"mappings":"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"}
|
package/dist/framing.d.ts
CHANGED
|
@@ -24,7 +24,10 @@ export declare enum InnerFrameType {
|
|
|
24
24
|
TransferAck = 17,
|
|
25
25
|
TransferComplete = 18,
|
|
26
26
|
TransferResult = 19,
|
|
27
|
-
TransferCancel = 20
|
|
27
|
+
TransferCancel = 20,
|
|
28
|
+
P2PControl = 21,
|
|
29
|
+
OutputAck = 22,
|
|
30
|
+
RecoveryComplete = 23
|
|
28
31
|
}
|
|
29
32
|
export interface OuterFrame {
|
|
30
33
|
version: number;
|
package/dist/framing.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"framing.d.ts","sourceRoot":"","sources":["../src/framing.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,QAAS,CAAC;AAC3C,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,oBAAY,cAAc;IACtB,cAAc,IAAI;IAClB,kBAAkB,IAAI;CACzB;AAED,oBAAY,cAAc;IACtB,kBAAkB,IAAI;IACtB,YAAY,IAAI;IAChB,SAAS,IAAI;IACb,UAAU,IAAI;IACd,QAAQ,IAAI;IACZ,SAAS,IAAI;IACb,SAAS,IAAI;IACb,QAAQ,IAAI;IACZ,OAAO,IAAI;IACX,aAAa,KAAK;IAClB,WAAW,KAAK;IAChB,aAAa,KAAK;IAClB,eAAe,KAAK;IACpB,aAAa,KAAK;IAClB,cAAc,KAAK;IACnB,aAAa,KAAK;IAClB,WAAW,KAAK;IAChB,gBAAgB,KAAK;IACrB,cAAc,KAAK;IACnB,cAAc,KAAK;
|
|
1
|
+
{"version":3,"file":"framing.d.ts","sourceRoot":"","sources":["../src/framing.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,oBAAoB,QAAS,CAAC;AAC3C,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,oBAAY,cAAc;IACtB,cAAc,IAAI;IAClB,kBAAkB,IAAI;CACzB;AAED,oBAAY,cAAc;IACtB,kBAAkB,IAAI;IACtB,YAAY,IAAI;IAChB,SAAS,IAAI;IACb,UAAU,IAAI;IACd,QAAQ,IAAI;IACZ,SAAS,IAAI;IACb,SAAS,IAAI;IACb,QAAQ,IAAI;IACZ,OAAO,IAAI;IACX,aAAa,KAAK;IAClB,WAAW,KAAK;IAChB,aAAa,KAAK;IAClB,eAAe,KAAK;IACpB,aAAa,KAAK;IAClB,cAAc,KAAK;IACnB,aAAa,KAAK;IAClB,WAAW,KAAK;IAChB,gBAAgB,KAAK;IACrB,cAAc,KAAK;IACnB,cAAc,KAAK;IACnB,UAAU,KAAK;IACf,SAAS,KAAK;IACd,gBAAgB,KAAK;CACxB;AAED,MAAM,WAAW,UAAU;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,UAAU,CAAC;CACvB;AAED,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,UAAU,CAAC;CACvB;AAED,wBAAgB,mBAAmB,CAC/B,IAAI,EAAE,cAAc,EACpB,OAAO,GAAE,MAAyB,GACnC,UAAU,CAKZ;AAED,wBAAgB,gBAAgB,CAC5B,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,UAAU,EACnB,OAAO,GAAE,MAAyB,GACnC,UAAU,CAYZ;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAuB9D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAoB9D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU,CAgB9D"}
|
package/dist/framing.js
CHANGED
|
@@ -28,6 +28,9 @@ export var InnerFrameType;
|
|
|
28
28
|
InnerFrameType[InnerFrameType["TransferComplete"] = 18] = "TransferComplete";
|
|
29
29
|
InnerFrameType[InnerFrameType["TransferResult"] = 19] = "TransferResult";
|
|
30
30
|
InnerFrameType[InnerFrameType["TransferCancel"] = 20] = "TransferCancel";
|
|
31
|
+
InnerFrameType[InnerFrameType["P2PControl"] = 21] = "P2PControl";
|
|
32
|
+
InnerFrameType[InnerFrameType["OutputAck"] = 22] = "OutputAck";
|
|
33
|
+
InnerFrameType[InnerFrameType["RecoveryComplete"] = 23] = "RecoveryComplete";
|
|
31
34
|
})(InnerFrameType || (InnerFrameType = {}));
|
|
32
35
|
export function outerAssociatedData(kind, version = PROTOCOL_VERSION) {
|
|
33
36
|
assertUint8(version, 'Protocol version');
|
package/dist/framing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"framing.js","sourceRoot":"","sources":["../src/framing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,CAAC,MAAM,oBAAoB,GAAG,MAAM,CAAC;AAC3C,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAErC,MAAM,CAAN,IAAY,cAGX;AAHD,WAAY,cAAc;IACtB,uEAAkB,CAAA;IAClB,+EAAsB,CAAA;AAC1B,CAAC,EAHW,cAAc,KAAd,cAAc,QAGzB;AAED,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"framing.js","sourceRoot":"","sources":["../src/framing.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -9,4 +9,11 @@ export { decodeTransferCancel, decodeTransferChunk, decodeTransferControl, decod
|
|
|
9
9
|
export type { TransferCancelMessage, TransferChunkPayload, TransferControlMessage, TransferDirection, TransferOfferMessage, TransferPurpose, TransferRequestMessage, TransferResultMessage, } from './transfers.js';
|
|
10
10
|
export { createCapabilityUrl, decodeBase64Url, deriveCapabilityKeys, encodeBase64Url, generateCapabilityMaterial, normalizeServerUrl, parseCapabilityUrl, ROOT_SECRET_LENGTH, SESSION_ID_LENGTH, } from './capability.js';
|
|
11
11
|
export type { CapabilityKeys, CapabilityMaterial, ParsedCapability, } from './capability.js';
|
|
12
|
+
export * from './transport.js';
|
|
13
|
+
export * from './outbound-queue.js';
|
|
14
|
+
export * from './p2p.js';
|
|
15
|
+
export * from './webrtc-transport.js';
|
|
16
|
+
export * from './direct-negotiation.js';
|
|
17
|
+
export * from './transport-handoff.js';
|
|
18
|
+
export * from './peer-transport.js';
|
|
12
19
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,EAAG,CAAU,CAAC;AAC3C,OAAO,EACH,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,mBAAmB,GACtB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EACH,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,GACjB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EACH,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,wBAAwB,GAC3B,MAAM,eAAe,CAAC;AACvB,YAAY,EACR,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,cAAc,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EACH,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,wBAAwB,EACxB,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,GACtB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACR,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,sBAAsB,EACtB,qBAAqB,GACxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACH,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,0BAA0B,EAC1B,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,GACpB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACR,cAAc,EACd,kBAAkB,EAClB,gBAAgB,GACnB,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,EAAG,CAAU,CAAC;AAC3C,OAAO,EACH,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,mBAAmB,GACtB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC3D,OAAO,EACH,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,GACjB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EACH,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,wBAAwB,GAC3B,MAAM,eAAe,CAAC;AACvB,YAAY,EACR,oBAAoB,EACpB,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,WAAW,EACX,mBAAmB,EACnB,uBAAuB,EACvB,kBAAkB,EAClB,cAAc,GACjB,MAAM,eAAe,CAAC;AACvB,OAAO,EACH,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,wBAAwB,EACxB,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,GACtB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACR,qBAAqB,EACrB,oBAAoB,EACpB,sBAAsB,EACtB,iBAAiB,EACjB,oBAAoB,EACpB,eAAe,EACf,sBAAsB,EACtB,qBAAqB,GACxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACH,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,0BAA0B,EAC1B,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,GACpB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACR,cAAc,EACd,kBAAkB,EAClB,gBAAgB,GACnB,MAAM,iBAAiB,CAAC;AAEzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -4,4 +4,11 @@ export { createNoisePrologue, MAX_TRANSPORT_FRAMES, NOISE_PROTOCOL_NAME, NoiseTr
|
|
|
4
4
|
export { decodeProtocolError, decodePtyExit, decodePtyResize, decodeReplayStart, decodeSessionDescription, encodeProtocolError, encodePtyExit, encodePtyResize, encodeReplayStart, encodeSessionDescription, } from './messages.js';
|
|
5
5
|
export { decodeTransferCancel, decodeTransferChunk, decodeTransferControl, decodeTransferOffer, decodeTransferRequest, decodeTransferResult, encodeTransferCancel, encodeTransferChunk, encodeTransferControl, encodeTransferOffer, encodeTransferRequest, encodeTransferResult, generateTransferId, hasTransferTimedOut, TRANSFER_CHUNK_BYTES, TRANSFER_IDLE_TIMEOUT_MS, TRANSFER_ID_BYTES, TRANSFER_WINDOW_BYTES, TransferReceiverState, TransferSenderState, } from './transfers.js';
|
|
6
6
|
export { createCapabilityUrl, decodeBase64Url, deriveCapabilityKeys, encodeBase64Url, generateCapabilityMaterial, normalizeServerUrl, parseCapabilityUrl, ROOT_SECRET_LENGTH, SESSION_ID_LENGTH, } from './capability.js';
|
|
7
|
+
export * from './transport.js';
|
|
8
|
+
export * from './outbound-queue.js';
|
|
9
|
+
export * from './p2p.js';
|
|
10
|
+
export * from './webrtc-transport.js';
|
|
11
|
+
export * from './direct-negotiation.js';
|
|
12
|
+
export * from './transport-handoff.js';
|
|
13
|
+
export * from './peer-transport.js';
|
|
7
14
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAU,CAAC;AAC3C,OAAO,EACH,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,mBAAmB,GACtB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACH,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,GACjB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACH,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,wBAAwB,GAC3B,MAAM,eAAe,CAAC;AAYvB,OAAO,EACH,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,wBAAwB,EACxB,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,GACtB,MAAM,gBAAgB,CAAC;AAWxB,OAAO,EACH,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,0BAA0B,EAC1B,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,GACpB,MAAM,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAU,CAAC;AAC3C,OAAO,EACH,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,oBAAoB,EACpB,cAAc,EACd,mBAAmB,GACtB,MAAM,cAAc,CAAC;AAEtB,OAAO,EACH,mBAAmB,EACnB,oBAAoB,EACpB,mBAAmB,EACnB,cAAc,GACjB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACH,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,EACnB,aAAa,EACb,eAAe,EACf,iBAAiB,EACjB,wBAAwB,GAC3B,MAAM,eAAe,CAAC;AAYvB,OAAO,EACH,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,wBAAwB,EACxB,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,GACtB,MAAM,gBAAgB,CAAC;AAWxB,OAAO,EACH,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,eAAe,EACf,0BAA0B,EAC1B,kBAAkB,EAClB,kBAAkB,EAClB,kBAAkB,EAClB,iBAAiB,GACpB,MAAM,iBAAiB,CAAC;AAOzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,qBAAqB,CAAC;AACpC,cAAc,UAAU,CAAC;AACzB,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,qBAAqB,CAAC"}
|
package/dist/messages.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export type SessionMode = 'shell' | 'command';
|
|
2
|
-
export type SessionFeature = 'stream-transfer-v1' | 'terminal-font-v1' | 'image-paste-v1';
|
|
2
|
+
export type SessionFeature = 'stream-transfer-v1' | 'terminal-font-v1' | 'image-paste-v1' | 'p2p-v1';
|
|
3
3
|
export type TerminalFontFormat = 'ttf' | 'otf' | 'woff' | 'woff2';
|
|
4
4
|
export interface TerminalFontDescription {
|
|
5
5
|
assetId: string;
|
package/dist/messages.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;AAC9C,MAAM,MAAM,cAAc,GACpB,oBAAoB,GACpB,kBAAkB,GAClB,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;AAC9C,MAAM,MAAM,cAAc,GACpB,oBAAoB,GACpB,kBAAkB,GAClB,gBAAgB,GAChB,QAAQ,CAAC;AAEf,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,CAAC;AAElE,MAAM,WAAW,uBAAuB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,mBAAmB,EAAE,CAAC;IACjC,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;IAC5B,IAAI,CAAC,EAAE,uBAAuB,CAAC;CAClC;AAED,MAAM,WAAW,cAAc;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,oBAAoB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,wBAAwB,CACpC,WAAW,EAAE,kBAAkB,GAChC,UAAU,CAuBZ;AAED,wBAAgB,wBAAwB,CACpC,OAAO,EAAE,UAAU,GACpB,kBAAkB,CAwBpB;AA4DD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAWzE;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,UAAU,GAAG;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CAChB,CAkBA;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,UAAU,CAKjE;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,cAAc,CAiBjE;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,UAAU,CAMzE;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,UAAU,GAAG,kBAAkB,CAgBzE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,oBAAoB,GAAG,UAAU,CAE3E;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,UAAU,GAAG,oBAAoB,CAQ7E"}
|
package/dist/messages.js
CHANGED
|
@@ -30,9 +30,7 @@ export function decodeSessionDescription(payload) {
|
|
|
30
30
|
throw new Error('Invalid session description payload.');
|
|
31
31
|
}
|
|
32
32
|
const features = decodeSessionFeatures(value.features);
|
|
33
|
-
const font = value.font === undefined
|
|
34
|
-
? undefined
|
|
35
|
-
: decodeTerminalFont(value.font);
|
|
33
|
+
const font = value.font === undefined ? undefined : decodeTerminalFont(value.font);
|
|
36
34
|
return {
|
|
37
35
|
mode: value.mode,
|
|
38
36
|
maxTabs: value.max_tabs,
|
|
@@ -45,13 +43,15 @@ function decodeSessionFeatures(value) {
|
|
|
45
43
|
if (value === undefined) {
|
|
46
44
|
return [];
|
|
47
45
|
}
|
|
48
|
-
if (!Array.isArray(value) ||
|
|
46
|
+
if (!Array.isArray(value) ||
|
|
47
|
+
value.some((feature) => typeof feature !== 'string')) {
|
|
49
48
|
throw new Error('Invalid session features payload.');
|
|
50
49
|
}
|
|
51
50
|
const supported = new Set([
|
|
52
51
|
'stream-transfer-v1',
|
|
53
52
|
'terminal-font-v1',
|
|
54
53
|
'image-paste-v1',
|
|
54
|
+
'p2p-v1',
|
|
55
55
|
]);
|
|
56
56
|
return value.filter((feature) => supported.has(feature));
|
|
57
57
|
}
|
|
@@ -76,7 +76,10 @@ function decodeTerminalFont(value) {
|
|
|
76
76
|
};
|
|
77
77
|
}
|
|
78
78
|
function isTerminalFontFormat(value) {
|
|
79
|
-
return value === 'ttf' ||
|
|
79
|
+
return (value === 'ttf' ||
|
|
80
|
+
value === 'otf' ||
|
|
81
|
+
value === 'woff' ||
|
|
82
|
+
value === 'woff2');
|
|
80
83
|
}
|
|
81
84
|
export function encodePtyResize(columns, rows) {
|
|
82
85
|
if (!isPositiveInteger(columns) || !isPositiveInteger(rows)) {
|
|
@@ -116,7 +119,9 @@ export function decodePtyExit(payload) {
|
|
|
116
119
|
}
|
|
117
120
|
return {
|
|
118
121
|
exitCode: value.exit_code,
|
|
119
|
-
...(value.signal === undefined
|
|
122
|
+
...(value.signal === undefined
|
|
123
|
+
? {}
|
|
124
|
+
: { signal: value.signal }),
|
|
120
125
|
};
|
|
121
126
|
}
|
|
122
127
|
export function encodeReplayStart(message) {
|
package/dist/messages.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../src/messages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type InnerFrame } from './framing.js';
|
|
2
|
+
export declare const OUTPUT_HIGH_WATER_BYTES: number;
|
|
3
|
+
export declare const OUTPUT_LOW_WATER_BYTES: number;
|
|
4
|
+
export declare const OUTPUT_MAX_PENDING_BYTES: number;
|
|
5
|
+
export declare class OutboundQueue {
|
|
6
|
+
#private;
|
|
7
|
+
private readonly bufferedAmount;
|
|
8
|
+
private readonly write;
|
|
9
|
+
private readonly onBackpressure;
|
|
10
|
+
private readonly onFailure;
|
|
11
|
+
constructor(bufferedAmount: () => number, write: (frame: InnerFrame, done: (error?: Error | null) => void) => void, onBackpressure: (paused: boolean) => void, onFailure: (error: Error) => void);
|
|
12
|
+
get pendingBytes(): number;
|
|
13
|
+
send(frame: InnerFrame): Promise<void>;
|
|
14
|
+
close(error?: Error): void;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=outbound-queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"outbound-queue.d.ts","sourceRoot":"","sources":["../src/outbound-queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,UAAU,EAAE,MAAM,cAAc,CAAC;AAEnE,eAAO,MAAM,uBAAuB,QAAc,CAAC;AACnD,eAAO,MAAM,sBAAsB,QAAa,CAAC;AACjD,eAAO,MAAM,wBAAwB,QAAgB,CAAC;AAUtD,qBAAa,aAAa;;IAYlB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK;IAItB,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS;gBANT,cAAc,EAAE,MAAM,MAAM,EAC5B,KAAK,EAAE,CACpB,KAAK,EAAE,UAAU,EACjB,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,KACnC,IAAI,EACQ,cAAc,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,EACzC,SAAS,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI;IAGtD,IAAW,YAAY,IAAI,MAAM,CAIhC;IAEM,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAwBtC,KAAK,CAAC,KAAK,QAA0C,GAAG,IAAI;CAqFtE"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { INNER_HEADER_BYTES } from './framing.js';
|
|
2
|
+
export const OUTPUT_HIGH_WATER_BYTES = 256 * 1_024;
|
|
3
|
+
export const OUTPUT_LOW_WATER_BYTES = 64 * 1_024;
|
|
4
|
+
export const OUTPUT_MAX_PENDING_BYTES = 1_024 * 1_024;
|
|
5
|
+
const FRAME_OVERHEAD_BYTES = INNER_HEADER_BYTES + 18;
|
|
6
|
+
export class OutboundQueue {
|
|
7
|
+
bufferedAmount;
|
|
8
|
+
write;
|
|
9
|
+
onBackpressure;
|
|
10
|
+
onFailure;
|
|
11
|
+
#queue = [];
|
|
12
|
+
#bytes = 0;
|
|
13
|
+
#inFlight;
|
|
14
|
+
#timer;
|
|
15
|
+
#closed = false;
|
|
16
|
+
#paused = false;
|
|
17
|
+
#pumping = false;
|
|
18
|
+
#progressAt = Date.now();
|
|
19
|
+
#lastBuffered = 0;
|
|
20
|
+
constructor(bufferedAmount, write, onBackpressure, onFailure) {
|
|
21
|
+
this.bufferedAmount = bufferedAmount;
|
|
22
|
+
this.write = write;
|
|
23
|
+
this.onBackpressure = onBackpressure;
|
|
24
|
+
this.onFailure = onFailure;
|
|
25
|
+
}
|
|
26
|
+
get pendingBytes() {
|
|
27
|
+
return (this.#bytes + (this.#inFlight?.bytes ?? 0) + this.bufferedAmount());
|
|
28
|
+
}
|
|
29
|
+
send(frame) {
|
|
30
|
+
if (this.#closed)
|
|
31
|
+
return Promise.reject(new Error('Gateway output queue is closed.'));
|
|
32
|
+
if (this.pendingBytes === 0)
|
|
33
|
+
this.#progressAt = Date.now();
|
|
34
|
+
const bytes = frame.payload.byteLength + FRAME_OVERHEAD_BYTES;
|
|
35
|
+
if (this.pendingBytes + bytes > OUTPUT_MAX_PENDING_BYTES) {
|
|
36
|
+
const error = new Error('Gateway output exceeded its 1 MiB limit.');
|
|
37
|
+
this.#fail(error);
|
|
38
|
+
return Promise.reject(error);
|
|
39
|
+
}
|
|
40
|
+
const pending = new Promise((resolve, reject) => {
|
|
41
|
+
this.#queue.push({
|
|
42
|
+
frame: { ...frame, payload: Uint8Array.from(frame.payload) },
|
|
43
|
+
bytes,
|
|
44
|
+
resolve,
|
|
45
|
+
reject,
|
|
46
|
+
});
|
|
47
|
+
this.#bytes += bytes;
|
|
48
|
+
});
|
|
49
|
+
this.#updatePressure();
|
|
50
|
+
this.#pump();
|
|
51
|
+
return pending;
|
|
52
|
+
}
|
|
53
|
+
close(error = new Error('Gateway transport changed.')) {
|
|
54
|
+
if (this.#closed)
|
|
55
|
+
return;
|
|
56
|
+
this.#closed = true;
|
|
57
|
+
clearTimeout(this.#timer);
|
|
58
|
+
this.#timer = undefined;
|
|
59
|
+
for (const item of this.#queue.splice(0))
|
|
60
|
+
item.reject(error);
|
|
61
|
+
this.#inFlight?.reject(error);
|
|
62
|
+
this.#inFlight = undefined;
|
|
63
|
+
this.#bytes = 0;
|
|
64
|
+
if (this.#paused)
|
|
65
|
+
this.onBackpressure(false);
|
|
66
|
+
this.#paused = false;
|
|
67
|
+
}
|
|
68
|
+
#pump() {
|
|
69
|
+
if (this.#closed || this.#pumping)
|
|
70
|
+
return;
|
|
71
|
+
this.#pumping = true;
|
|
72
|
+
try {
|
|
73
|
+
while (!this.#closed &&
|
|
74
|
+
this.#inFlight === undefined &&
|
|
75
|
+
this.bufferedAmount() < OUTPUT_HIGH_WATER_BYTES) {
|
|
76
|
+
const item = this.#queue.shift();
|
|
77
|
+
if (item === undefined)
|
|
78
|
+
break;
|
|
79
|
+
this.#bytes -= item.bytes;
|
|
80
|
+
this.#inFlight = item;
|
|
81
|
+
this.write(item.frame, (error) => {
|
|
82
|
+
if (this.#closed || this.#inFlight !== item)
|
|
83
|
+
return;
|
|
84
|
+
if (error != null) {
|
|
85
|
+
this.#fail(error);
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
this.#inFlight = undefined;
|
|
89
|
+
this.#progressAt = Date.now();
|
|
90
|
+
item.resolve();
|
|
91
|
+
this.#updatePressure();
|
|
92
|
+
this.#pump();
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
this.#fail(error instanceof Error ? error : new Error(String(error)));
|
|
98
|
+
}
|
|
99
|
+
finally {
|
|
100
|
+
this.#pumping = false;
|
|
101
|
+
}
|
|
102
|
+
this.#updatePressure();
|
|
103
|
+
if (!this.#closed &&
|
|
104
|
+
this.pendingBytes > 0 &&
|
|
105
|
+
this.#timer === undefined) {
|
|
106
|
+
this.#timer = setTimeout(() => {
|
|
107
|
+
this.#timer = undefined;
|
|
108
|
+
const buffered = this.bufferedAmount();
|
|
109
|
+
if (buffered < this.#lastBuffered)
|
|
110
|
+
this.#progressAt = Date.now();
|
|
111
|
+
this.#lastBuffered = buffered;
|
|
112
|
+
if (Date.now() - this.#progressAt >= 30_000) {
|
|
113
|
+
this.#fail(new Error('Gateway output stalled for 30 seconds.'));
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
this.#pump();
|
|
117
|
+
}
|
|
118
|
+
}, 10);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
#updatePressure() {
|
|
122
|
+
if (this.#closed)
|
|
123
|
+
return;
|
|
124
|
+
const paused = this.#paused
|
|
125
|
+
? this.pendingBytes >= OUTPUT_LOW_WATER_BYTES
|
|
126
|
+
: this.pendingBytes >= OUTPUT_HIGH_WATER_BYTES;
|
|
127
|
+
if (paused !== this.#paused) {
|
|
128
|
+
this.#paused = paused;
|
|
129
|
+
this.onBackpressure(paused);
|
|
130
|
+
}
|
|
131
|
+
if (this.pendingBytes === 0)
|
|
132
|
+
this.#progressAt = Date.now();
|
|
133
|
+
}
|
|
134
|
+
#fail(error) {
|
|
135
|
+
this.close(error);
|
|
136
|
+
this.onFailure(error);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=outbound-queue.js.map
|