@blit-sh/core 0.19.0 → 0.21.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/dist/BlitConnection.d.ts +16 -2
- package/dist/BlitConnection.d.ts.map +1 -1
- package/dist/BlitConnection.js +183 -8
- package/dist/BlitConnection.js.map +1 -1
- package/dist/BlitSurfaceCanvas.d.ts +122 -0
- package/dist/BlitSurfaceCanvas.d.ts.map +1 -0
- package/dist/BlitSurfaceCanvas.js +582 -0
- package/dist/BlitSurfaceCanvas.js.map +1 -0
- package/dist/BlitTerminalSurface.d.ts +12 -0
- package/dist/BlitTerminalSurface.d.ts.map +1 -1
- package/dist/BlitTerminalSurface.js +51 -1
- package/dist/BlitTerminalSurface.js.map +1 -1
- package/dist/BlitWorkspace.d.ts +2 -0
- package/dist/BlitWorkspace.d.ts.map +1 -1
- package/dist/BlitWorkspace.js +27 -0
- package/dist/BlitWorkspace.js.map +1 -1
- package/dist/SurfaceStore.d.ts +69 -0
- package/dist/SurfaceStore.d.ts.map +1 -0
- package/dist/SurfaceStore.js +494 -0
- package/dist/SurfaceStore.js.map +1 -0
- package/dist/TerminalStore.d.ts.map +1 -1
- package/dist/TerminalStore.js +4 -1
- package/dist/TerminalStore.js.map +1 -1
- package/dist/bsp/index.d.ts +1 -1
- package/dist/bsp/index.d.ts.map +1 -1
- package/dist/bsp/index.js +1 -1
- package/dist/bsp/index.js.map +1 -1
- package/dist/bsp/layout.d.ts +9 -1
- package/dist/bsp/layout.d.ts.map +1 -1
- package/dist/bsp/layout.js +36 -4
- package/dist/bsp/layout.js.map +1 -1
- package/dist/gl-renderer.d.ts +6 -0
- package/dist/gl-renderer.d.ts.map +1 -1
- package/dist/gl-renderer.js +132 -0
- package/dist/gl-renderer.js.map +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/keyboard.d.ts +6 -0
- package/dist/keyboard.d.ts.map +1 -1
- package/dist/keyboard.js +25 -0
- package/dist/keyboard.js.map +1 -1
- package/dist/protocol.d.ts +19 -0
- package/dist/protocol.d.ts.map +1 -1
- package/dist/protocol.js +124 -1
- package/dist/protocol.js.map +1 -1
- package/dist/transports/webrtc-share.d.ts.map +1 -1
- package/dist/transports/webrtc-share.js +209 -62
- package/dist/transports/webrtc-share.js.map +1 -1
- package/dist/transports/webtransport.d.ts.map +1 -1
- package/dist/transports/webtransport.js +3 -1
- package/dist/transports/webtransport.js.map +1 -1
- package/dist/types.d.ts +41 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +29 -0
- package/dist/types.js.map +1 -1
- package/package.json +1 -1
package/dist/protocol.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { C2S_ACK, C2S_CLIENT_METRICS, C2S_DISPLAY_RATE, C2S_INPUT, C2S_KILL, C2S_MOUSE, C2S_RESTART, C2S_RESIZE, C2S_SCROLL, C2S_FOCUS, C2S_CLOSE, C2S_SUBSCRIBE, C2S_UNSUBSCRIBE, C2S_SEARCH, C2S_COPY_RANGE, C2S_CREATE2, CREATE2_HAS_SRC_PTY, CREATE2_HAS_COMMAND, } from "./types";
|
|
1
|
+
import { C2S_ACK, C2S_CLIENT_METRICS, C2S_CLIPBOARD, C2S_DISPLAY_RATE, C2S_INPUT, C2S_KILL, C2S_MOUSE, C2S_RESTART, C2S_RESIZE, C2S_SCROLL, C2S_FOCUS, C2S_CLOSE, C2S_SUBSCRIBE, C2S_UNSUBSCRIBE, C2S_SEARCH, C2S_COPY_RANGE, C2S_CREATE2, C2S_SURFACE_INPUT, C2S_SURFACE_POINTER, C2S_SURFACE_POINTER_AXIS, C2S_SURFACE_RESIZE, C2S_SURFACE_FOCUS, C2S_SURFACE_SUBSCRIBE, C2S_SURFACE_UNSUBSCRIBE, C2S_SURFACE_ACK, C2S_SURFACE_CLOSE, CREATE2_HAS_SRC_PTY, CREATE2_HAS_COMMAND, } from "./types";
|
|
2
2
|
const textEncoder = new TextEncoder();
|
|
3
3
|
const UNSET_VIEW_SIZE = 0;
|
|
4
4
|
export function buildAckMessage() {
|
|
@@ -192,4 +192,127 @@ export function buildCopyRangeMessage(nonce, ptyId, startTail, startCol, endTail
|
|
|
192
192
|
msg[17] = 0;
|
|
193
193
|
return msg;
|
|
194
194
|
}
|
|
195
|
+
export function buildSurfaceInputMessage(sessionId, surfaceId, keycode, pressed) {
|
|
196
|
+
const msg = new Uint8Array(10);
|
|
197
|
+
msg[0] = C2S_SURFACE_INPUT;
|
|
198
|
+
msg[1] = sessionId & 0xff;
|
|
199
|
+
msg[2] = (sessionId >> 8) & 0xff;
|
|
200
|
+
msg[3] = surfaceId & 0xff;
|
|
201
|
+
msg[4] = (surfaceId >> 8) & 0xff;
|
|
202
|
+
const v = new DataView(msg.buffer);
|
|
203
|
+
v.setUint32(5, keycode, true);
|
|
204
|
+
msg[9] = pressed ? 1 : 0;
|
|
205
|
+
return msg;
|
|
206
|
+
}
|
|
207
|
+
export const SURFACE_POINTER_DOWN = 0;
|
|
208
|
+
export const SURFACE_POINTER_UP = 1;
|
|
209
|
+
export const SURFACE_POINTER_MOVE = 2;
|
|
210
|
+
export function buildSurfacePointerMessage(sessionId, surfaceId, type, button, x, y) {
|
|
211
|
+
const msg = new Uint8Array(11);
|
|
212
|
+
msg[0] = C2S_SURFACE_POINTER;
|
|
213
|
+
msg[1] = sessionId & 0xff;
|
|
214
|
+
msg[2] = (sessionId >> 8) & 0xff;
|
|
215
|
+
msg[3] = surfaceId & 0xff;
|
|
216
|
+
msg[4] = (surfaceId >> 8) & 0xff;
|
|
217
|
+
msg[5] = type;
|
|
218
|
+
msg[6] = button;
|
|
219
|
+
msg[7] = x & 0xff;
|
|
220
|
+
msg[8] = (x >> 8) & 0xff;
|
|
221
|
+
msg[9] = y & 0xff;
|
|
222
|
+
msg[10] = (y >> 8) & 0xff;
|
|
223
|
+
return msg;
|
|
224
|
+
}
|
|
225
|
+
export function buildSurfaceAxisMessage(sessionId, surfaceId, axis, valueX100) {
|
|
226
|
+
const msg = new Uint8Array(10);
|
|
227
|
+
msg[0] = C2S_SURFACE_POINTER_AXIS;
|
|
228
|
+
msg[1] = sessionId & 0xff;
|
|
229
|
+
msg[2] = (sessionId >> 8) & 0xff;
|
|
230
|
+
msg[3] = surfaceId & 0xff;
|
|
231
|
+
msg[4] = (surfaceId >> 8) & 0xff;
|
|
232
|
+
msg[5] = axis;
|
|
233
|
+
const v = new DataView(msg.buffer);
|
|
234
|
+
v.setInt32(6, valueX100, true);
|
|
235
|
+
return msg;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* @param scale120 DPR in 1/120th units (Wayland convention):
|
|
239
|
+
* 120 = 1×, 180 = 1.5×, 240 = 2×.
|
|
240
|
+
* 0 means unspecified (server defaults to 1×).
|
|
241
|
+
* @param codecSupport Bitmask of CODEC_SUPPORT_* flags. 0 = accept anything.
|
|
242
|
+
*/
|
|
243
|
+
export function buildSurfaceResizeMessage(sessionId, surfaceId, width, height, scale120 = 0, codecSupport = 0) {
|
|
244
|
+
const msg = new Uint8Array(12);
|
|
245
|
+
msg[0] = C2S_SURFACE_RESIZE;
|
|
246
|
+
msg[1] = sessionId & 0xff;
|
|
247
|
+
msg[2] = (sessionId >> 8) & 0xff;
|
|
248
|
+
msg[3] = surfaceId & 0xff;
|
|
249
|
+
msg[4] = (surfaceId >> 8) & 0xff;
|
|
250
|
+
msg[5] = width & 0xff;
|
|
251
|
+
msg[6] = (width >> 8) & 0xff;
|
|
252
|
+
msg[7] = height & 0xff;
|
|
253
|
+
msg[8] = (height >> 8) & 0xff;
|
|
254
|
+
msg[9] = scale120 & 0xff;
|
|
255
|
+
msg[10] = (scale120 >> 8) & 0xff;
|
|
256
|
+
msg[11] = codecSupport & 0xff;
|
|
257
|
+
return msg;
|
|
258
|
+
}
|
|
259
|
+
export function buildSurfaceFocusMessage(sessionId, surfaceId) {
|
|
260
|
+
const msg = new Uint8Array(5);
|
|
261
|
+
msg[0] = C2S_SURFACE_FOCUS;
|
|
262
|
+
msg[1] = sessionId & 0xff;
|
|
263
|
+
msg[2] = (sessionId >> 8) & 0xff;
|
|
264
|
+
msg[3] = surfaceId & 0xff;
|
|
265
|
+
msg[4] = (surfaceId >> 8) & 0xff;
|
|
266
|
+
return msg;
|
|
267
|
+
}
|
|
268
|
+
export function buildSurfaceCloseMessage(sessionId, surfaceId) {
|
|
269
|
+
const msg = new Uint8Array(5);
|
|
270
|
+
msg[0] = C2S_SURFACE_CLOSE;
|
|
271
|
+
msg[1] = sessionId & 0xff;
|
|
272
|
+
msg[2] = (sessionId >> 8) & 0xff;
|
|
273
|
+
msg[3] = surfaceId & 0xff;
|
|
274
|
+
msg[4] = (surfaceId >> 8) & 0xff;
|
|
275
|
+
return msg;
|
|
276
|
+
}
|
|
277
|
+
export function buildSurfaceSubscribeMessage(sessionId, surfaceId) {
|
|
278
|
+
const msg = new Uint8Array(5);
|
|
279
|
+
msg[0] = C2S_SURFACE_SUBSCRIBE;
|
|
280
|
+
msg[1] = sessionId & 0xff;
|
|
281
|
+
msg[2] = (sessionId >> 8) & 0xff;
|
|
282
|
+
msg[3] = surfaceId & 0xff;
|
|
283
|
+
msg[4] = (surfaceId >> 8) & 0xff;
|
|
284
|
+
return msg;
|
|
285
|
+
}
|
|
286
|
+
export function buildSurfaceUnsubscribeMessage(sessionId, surfaceId) {
|
|
287
|
+
const msg = new Uint8Array(5);
|
|
288
|
+
msg[0] = C2S_SURFACE_UNSUBSCRIBE;
|
|
289
|
+
msg[1] = sessionId & 0xff;
|
|
290
|
+
msg[2] = (sessionId >> 8) & 0xff;
|
|
291
|
+
msg[3] = surfaceId & 0xff;
|
|
292
|
+
msg[4] = (surfaceId >> 8) & 0xff;
|
|
293
|
+
return msg;
|
|
294
|
+
}
|
|
295
|
+
export function buildSurfaceAckMessage(surfaceId) {
|
|
296
|
+
const msg = new Uint8Array(3);
|
|
297
|
+
msg[0] = C2S_SURFACE_ACK;
|
|
298
|
+
msg[1] = surfaceId & 0xff;
|
|
299
|
+
msg[2] = (surfaceId >> 8) & 0xff;
|
|
300
|
+
return msg;
|
|
301
|
+
}
|
|
302
|
+
export function buildClipboardMessage(sessionId, surfaceId, mimeType, data) {
|
|
303
|
+
const mimeBytes = textEncoder.encode(mimeType);
|
|
304
|
+
const msg = new Uint8Array(11 + mimeBytes.length + data.length);
|
|
305
|
+
msg[0] = C2S_CLIPBOARD;
|
|
306
|
+
msg[1] = sessionId & 0xff;
|
|
307
|
+
msg[2] = (sessionId >> 8) & 0xff;
|
|
308
|
+
msg[3] = surfaceId & 0xff;
|
|
309
|
+
msg[4] = (surfaceId >> 8) & 0xff;
|
|
310
|
+
msg[5] = mimeBytes.length & 0xff;
|
|
311
|
+
msg[6] = (mimeBytes.length >> 8) & 0xff;
|
|
312
|
+
msg.set(mimeBytes, 7);
|
|
313
|
+
const v = new DataView(msg.buffer);
|
|
314
|
+
v.setUint32(7 + mimeBytes.length, data.length, true);
|
|
315
|
+
msg.set(data, 11 + mimeBytes.length);
|
|
316
|
+
return msg;
|
|
317
|
+
}
|
|
195
318
|
//# sourceMappingURL=protocol.js.map
|
package/dist/protocol.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../src/protocol.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,SAAS,EACT,QAAQ,EACR,SAAS,EACT,WAAW,EACX,UAAU,EACV,UAAU,EACV,SAAS,EACT,SAAS,EACT,aAAa,EACb,eAAe,EACf,UAAU,EACV,cAAc,EACd,WAAW,EACX,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,EACxB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,mBAAmB,GACpB,MAAM,SAAS,CAAC;AAEjB,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;AAQtC,MAAM,eAAe,GAAG,CAAC,CAAC;AAE1B,MAAM,UAAU,eAAe;IAC7B,OAAO,IAAI,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,aAAqB,EACrB,cAAsB,EACtB,UAAkB;IAElB,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC;IAC5B,GAAG,CAAC,CAAC,CAAC,GAAG,aAAa,GAAG,IAAI,CAAC;IAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,aAAa,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACrC,GAAG,CAAC,CAAC,CAAC,GAAG,cAAc,GAAG,IAAI,CAAC;IAC/B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACtC,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,IAAI,CAAC;IAC3B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAClC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,GAAW;IACjD,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC;IAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;IACpB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC3B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAa,EAAE,IAAgB;IAC/D,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5C,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IACnB,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;IACtB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC7B,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;IACjB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,KAAa,EACb,IAAY,EACZ,IAAY;IAEZ,OAAO,uBAAuB,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,OAAmC;IAEnC,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnD,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;IACpB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;QACjC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;QAC5C,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QACpC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;QAC3C,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;QACpC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;QAC3C,MAAM,IAAI,CAAC,CAAC;IACd,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAa;IACnD,OAAO,uBAAuB,CAAC;QAC7B,EAAE,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,eAAe,EAAE;KACxD,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,MAA6B;IAE7B,OAAO,uBAAuB,CAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QACrB,KAAK;QACL,IAAI,EAAE,eAAe;QACrB,IAAI,EAAE,eAAe;KACtB,CAAC,CAAC,CACJ,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAa,EAAE,MAAc;IAC9D,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;IACpB,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;IACtB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC7B,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC;IACvB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IAC/B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IAC/B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IACnB,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;IACtB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC7B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,KAAa;IAC7C,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IACnB,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;IACtB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC7B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAa;IACjD,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC;IACvB,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;IACtB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC7B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAAa;IACnD,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC;IACzB,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;IACtB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC7B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,SAAiB,EACjB,KAAa;IAEb,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAClD,GAAG,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;IACpB,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACjC,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACvB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,KAAa,EACb,IAAY,EACZ,IAAY,EACZ,OAA+D;IAE/D,MAAM,QAAQ,GAAG,OAAO,EAAE,GAAG;QAC3B,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;QACjC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IACtB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,MAAM,MAAM,GAAG,OAAO,EAAE,QAAQ,IAAI,IAAI,CAAC;IACzC,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC/C,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;IAClC,IAAI,MAAM;QAAE,QAAQ,IAAI,mBAAmB,CAAC;IAC5C,IAAI,MAAM;QAAE,QAAQ,IAAI,mBAAmB,CAAC;IAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC1E,MAAM,GAAG,GAAG,IAAI,UAAU,CACxB,EAAE,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAC1D,CAAC;IACF,GAAG,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;IACrB,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;IACtB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC7B,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;IACrB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC5B,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;IACrB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC5B,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;IAClB,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;IAChC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACvC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpB,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAC1B,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC;IAC5B,CAAC;IACD,IAAI,MAAM,EAAE,CAAC;QACX,GAAG,CAAC,MAAM,CAAC,GAAG,OAAQ,CAAC,QAAS,GAAG,IAAI,CAAC;QACxC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,OAAQ,CAAC,QAAS,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;QACnD,MAAM,IAAI,CAAC,CAAC;IACd,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM;QAAE,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC/C,OAAO,GAAG,CAAC;AACb,CAAC;AAED,uCAAuC;AACvC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC;AAC5B,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC;AAC1B,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAC;AAE5B,MAAM,UAAU,iBAAiB,CAC/B,KAAa,EACb,IAAY,EACZ,MAAc,EACd,GAAW,EACX,GAAW;IAEX,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;IACnB,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;IACtB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC7B,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACd,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;IAChB,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;IACpB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC3B,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC;IACpB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC3B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;IACrB,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;IACtB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC7B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,MAAc;IAC5D,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;IAClB,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;IACtB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC7B,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC/B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,KAAa,EACb,KAAa,EACb,SAAiB,EACjB,QAAgB,EAChB,OAAe,EACf,MAAc;IAEd,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IAC/B,MAAM,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACnC,GAAG,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC;IACxB,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;IAC9B,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IACZ,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,SAAiB,EACjB,SAAiB,EACjB,OAAe,EACf,OAAgB;IAEhB,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IAC/B,GAAG,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC;IAC3B,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACjC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACjC,MAAM,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACzB,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AACtC,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AACpC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,CAAC;AAEtC,MAAM,UAAU,0BAA0B,CACxC,SAAiB,EACjB,SAAiB,EACjB,IAAY,EACZ,MAAc,EACd,CAAS,EACT,CAAS;IAET,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IAC/B,GAAG,CAAC,CAAC,CAAC,GAAG,mBAAmB,CAAC;IAC7B,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACjC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACjC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACd,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;IAChB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IAClB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACzB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IAClB,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC1B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,SAAiB,EACjB,SAAiB,EACjB,IAAY,EACZ,SAAiB;IAEjB,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IAC/B,GAAG,CAAC,CAAC,CAAC,GAAG,wBAAwB,CAAC;IAClC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACjC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACjC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACd,MAAM,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;IAC/B,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,yBAAyB,CACvC,SAAiB,EACjB,SAAiB,EACjB,KAAa,EACb,MAAc,EACd,WAAmB,CAAC,EACpB,eAAuB,CAAC;IAExB,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAC;IAC/B,GAAG,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC;IAC5B,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACjC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACjC,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;IACtB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC7B,GAAG,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAAC;IACvB,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC;IACzB,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACjC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,GAAG,IAAI,CAAC;IAC9B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,SAAiB,EACjB,SAAiB;IAEjB,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC;IAC3B,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACjC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACjC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,SAAiB,EACjB,SAAiB;IAEjB,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC;IAC3B,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACjC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACjC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,SAAiB,EACjB,SAAiB;IAEjB,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC;IAC/B,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACjC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACjC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,8BAA8B,CAC5C,SAAiB,EACjB,SAAiB;IAEjB,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,uBAAuB,CAAC;IACjC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACjC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACjC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,SAAiB;IACtD,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9B,GAAG,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC;IACzB,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACjC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,SAAiB,EACjB,SAAiB,EACjB,QAAgB,EAChB,IAAgB;IAEhB,MAAM,SAAS,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,IAAI,UAAU,CAAC,EAAE,GAAG,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAChE,GAAG,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC;IACvB,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACjC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,GAAG,IAAI,CAAC;IAC1B,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACjC,GAAG,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC;IACjC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;IACxC,GAAG,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IACtB,MAAM,CAAC,GAAG,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACrD,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,GAAG,CAAC;AACb,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"webrtc-share.d.ts","sourceRoot":"","sources":["../../src/transports/webrtc-share.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAoB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"webrtc-share.d.ts","sourceRoot":"","sources":["../../src/transports/webrtc-share.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAoB,MAAM,UAAU,CAAC;AA+O3E,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,SAAS,GAChB,aAAa,CA2Wf"}
|
|
@@ -8,21 +8,75 @@
|
|
|
8
8
|
*/
|
|
9
9
|
import nacl from "tweetnacl";
|
|
10
10
|
import { createWebRtcDataChannelTransport } from "./webrtc";
|
|
11
|
-
const PBKDF2_SALT = new TextEncoder().encode("https://blit.sh");
|
|
12
11
|
const PBKDF2_ROUNDS = 100000;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const
|
|
16
|
-
const
|
|
12
|
+
async function pbkdf2Derive(input, salt) {
|
|
13
|
+
// Copy into plain ArrayBuffers to satisfy SubtleCrypto's BufferSource type.
|
|
14
|
+
const inputAb = input.buffer.slice(input.byteOffset, input.byteOffset + input.byteLength);
|
|
15
|
+
const saltAb = salt.buffer.slice(salt.byteOffset, salt.byteOffset + salt.byteLength);
|
|
16
|
+
const key = await crypto.subtle.importKey("raw", inputAb, "PBKDF2", false, [
|
|
17
17
|
"deriveBits",
|
|
18
18
|
]);
|
|
19
19
|
const bits = await crypto.subtle.deriveBits({
|
|
20
20
|
name: "PBKDF2",
|
|
21
|
-
salt:
|
|
21
|
+
salt: saltAb,
|
|
22
22
|
iterations: PBKDF2_ROUNDS,
|
|
23
23
|
hash: "SHA-256",
|
|
24
24
|
}, key, 256);
|
|
25
|
-
return
|
|
25
|
+
return new Uint8Array(bits);
|
|
26
|
+
}
|
|
27
|
+
/** Derive all keys needed for a RW consumer from a passphrase. */
|
|
28
|
+
async function deriveKeys(passphrase) {
|
|
29
|
+
const enc = new TextEncoder();
|
|
30
|
+
const passphraseBytes = enc.encode(passphrase);
|
|
31
|
+
// Level 1: Ed25519 seed from passphrase (channel ID / signing key).
|
|
32
|
+
const ed25519Seed = await pbkdf2Derive(passphraseBytes, enc.encode("https://blit.sh"));
|
|
33
|
+
const signing = nacl.sign.keyPair.fromSeed(ed25519Seed);
|
|
34
|
+
// Level 1: RW consumer X25519 secret key from passphrase.
|
|
35
|
+
const ourX25519Secret = await pbkdf2Derive(passphraseBytes, enc.encode("blit-consumer-rw-x25519"));
|
|
36
|
+
// Level 2: producer X25519 secret key from Ed25519 seed bytes,
|
|
37
|
+
// then derive its public key.
|
|
38
|
+
const producerX25519Secret = await pbkdf2Derive(ed25519Seed, enc.encode("blit-producer-x25519"));
|
|
39
|
+
const producerX25519Public = nacl.scalarMult.base(producerX25519Secret);
|
|
40
|
+
return { signing, ourX25519Secret, producerX25519Public, readOnly: false };
|
|
41
|
+
}
|
|
42
|
+
/** Base64url decode (no padding). */
|
|
43
|
+
function base64urlDecode(str) {
|
|
44
|
+
const padded = str.replace(/-/g, "+").replace(/_/g, "/");
|
|
45
|
+
const binary = atob(padded);
|
|
46
|
+
const bytes = new Uint8Array(binary.length);
|
|
47
|
+
for (let i = 0; i < binary.length; i++)
|
|
48
|
+
bytes[i] = binary.charCodeAt(i);
|
|
49
|
+
return bytes;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Derive all keys needed for a RO consumer from a read-only token.
|
|
53
|
+
*
|
|
54
|
+
* The RO token is the base64url-encoded Ed25519 signing key (seed).
|
|
55
|
+
* Mirrors Rust's `ConsumerKeys::derive_ro`.
|
|
56
|
+
*/
|
|
57
|
+
async function deriveKeysFromRoToken(token) {
|
|
58
|
+
const ed25519Seed = base64urlDecode(token);
|
|
59
|
+
if (ed25519Seed.length !== 32) {
|
|
60
|
+
throw new Error(`Invalid RO token: expected 32 bytes, got ${ed25519Seed.length}`);
|
|
61
|
+
}
|
|
62
|
+
const signing = nacl.sign.keyPair.fromSeed(ed25519Seed);
|
|
63
|
+
// Level 2 (from Ed25519 seed): RO consumer X25519 sk.
|
|
64
|
+
const ourX25519Secret = await pbkdf2Derive(ed25519Seed, new TextEncoder().encode("blit-consumer-ro-x25519"));
|
|
65
|
+
// Level 2 (from Ed25519 seed): producer X25519 sk → derive its public key.
|
|
66
|
+
const producerX25519Secret = await pbkdf2Derive(ed25519Seed, new TextEncoder().encode("blit-producer-x25519"));
|
|
67
|
+
const producerX25519Public = nacl.scalarMult.base(producerX25519Secret);
|
|
68
|
+
return { signing, ourX25519Secret, producerX25519Public, readOnly: true };
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Detect and parse a read-only token (ends with `.ro`) from the passphrase
|
|
72
|
+
* field, then derive the appropriate keys.
|
|
73
|
+
*/
|
|
74
|
+
async function deriveConsumerKeys(passphrase) {
|
|
75
|
+
if (passphrase.endsWith(".ro")) {
|
|
76
|
+
const token = passphrase.slice(0, -3);
|
|
77
|
+
return deriveKeysFromRoToken(token);
|
|
78
|
+
}
|
|
79
|
+
return deriveKeys(passphrase);
|
|
26
80
|
}
|
|
27
81
|
function hexEncode(bytes) {
|
|
28
82
|
return Array.from(bytes, (b) => b.toString(16).padStart(2, "0")).join("");
|
|
@@ -31,9 +85,45 @@ function signPayload(secretKey, payload) {
|
|
|
31
85
|
const signed = nacl.sign(payload, secretKey); // 64-byte sig + payload
|
|
32
86
|
return btoa(String.fromCharCode(...signed));
|
|
33
87
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
88
|
+
/**
|
|
89
|
+
* Encrypt `data` in a NaCl box and build a signed hub message.
|
|
90
|
+
* Inner payload: `{"box":"<base64(nonce||ciphertext)>"}`.
|
|
91
|
+
*/
|
|
92
|
+
function buildSealedMessage(keys, signingSecretKey, target, data) {
|
|
93
|
+
const plaintext = new TextEncoder().encode(JSON.stringify(data));
|
|
94
|
+
const nonce = nacl.randomBytes(nacl.box.nonceLength);
|
|
95
|
+
const ciphertext = nacl.box(plaintext, nonce, keys.producerX25519Public, keys.ourX25519Secret);
|
|
96
|
+
const sealed = new Uint8Array(nonce.length + ciphertext.length);
|
|
97
|
+
sealed.set(nonce);
|
|
98
|
+
sealed.set(ciphertext, nonce.length);
|
|
99
|
+
const sealedB64 = btoa(String.fromCharCode(...sealed));
|
|
100
|
+
const inner = JSON.stringify({ box: sealedB64 });
|
|
101
|
+
const innerBytes = new TextEncoder().encode(inner);
|
|
102
|
+
const signed = signPayload(signingSecretKey, innerBytes);
|
|
103
|
+
return JSON.stringify({ signed, target });
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Try to open a NaCl box sealed payload from the producer.
|
|
107
|
+
* Returns the decrypted JSON value, or `null` on failure.
|
|
108
|
+
*/
|
|
109
|
+
function openSealedData(data, keys) {
|
|
110
|
+
const sealedB64 = data["box"];
|
|
111
|
+
if (typeof sealedB64 !== "string")
|
|
112
|
+
return null;
|
|
113
|
+
const sealed = Uint8Array.from(atob(sealedB64), (c) => c.charCodeAt(0));
|
|
114
|
+
if (sealed.length < nacl.box.nonceLength)
|
|
115
|
+
return null;
|
|
116
|
+
const nonce = sealed.slice(0, nacl.box.nonceLength);
|
|
117
|
+
const ciphertext = sealed.slice(nacl.box.nonceLength);
|
|
118
|
+
const plaintext = nacl.box.open(ciphertext, nonce, keys.producerX25519Public, keys.ourX25519Secret);
|
|
119
|
+
if (!plaintext)
|
|
120
|
+
return null;
|
|
121
|
+
try {
|
|
122
|
+
return JSON.parse(new TextDecoder().decode(plaintext));
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
return null;
|
|
126
|
+
}
|
|
37
127
|
}
|
|
38
128
|
/**
|
|
39
129
|
* Fetch ICE server config from the hub's /ice endpoint.
|
|
@@ -62,6 +152,10 @@ async function fetchIceServers(hubWsUrl) {
|
|
|
62
152
|
*
|
|
63
153
|
* The transport handles all signaling internally: hub WebSocket connection,
|
|
64
154
|
* Ed25519-signed message exchange, SDP offer/answer, and ICE candidate relay.
|
|
155
|
+
*
|
|
156
|
+
* Supports reconnection: calling `connect()` when the transport is in a
|
|
157
|
+
* `"disconnected"` or `"error"` state tears down old resources and re-runs
|
|
158
|
+
* the full signaling + WebRTC handshake.
|
|
65
159
|
*/
|
|
66
160
|
const noopDebug = { log() { }, warn() { }, error() { } };
|
|
67
161
|
export function createShareTransport(hubWsUrl, passphrase, debug) {
|
|
@@ -73,6 +167,8 @@ export function createShareTransport(hubWsUrl, passphrase, debug) {
|
|
|
73
167
|
let pc = null;
|
|
74
168
|
let disposed = false;
|
|
75
169
|
let started = false;
|
|
170
|
+
let connectGeneration = 0;
|
|
171
|
+
let cachedKeys = null;
|
|
76
172
|
const earlyMessages = [];
|
|
77
173
|
const messageListeners = new Set();
|
|
78
174
|
const statusListeners = new Set();
|
|
@@ -93,22 +189,53 @@ export function createShareTransport(hubWsUrl, passphrase, debug) {
|
|
|
93
189
|
l(data);
|
|
94
190
|
}
|
|
95
191
|
}
|
|
96
|
-
|
|
97
|
-
|
|
192
|
+
/** Tear down the current signaling WS, peer connection, and inner transport. */
|
|
193
|
+
function teardown() {
|
|
194
|
+
if (inner) {
|
|
195
|
+
inner.close();
|
|
196
|
+
inner = null;
|
|
197
|
+
}
|
|
198
|
+
if (pc) {
|
|
199
|
+
try {
|
|
200
|
+
pc.close();
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
// Ignore.
|
|
204
|
+
}
|
|
205
|
+
pc = null;
|
|
206
|
+
}
|
|
207
|
+
if (ws) {
|
|
208
|
+
try {
|
|
209
|
+
ws.close();
|
|
210
|
+
}
|
|
211
|
+
catch {
|
|
212
|
+
// Ignore.
|
|
213
|
+
}
|
|
214
|
+
ws = null;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
/** Run the full signaling + WebRTC setup. */
|
|
218
|
+
async function doConnect(generation) {
|
|
98
219
|
try {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
220
|
+
if (!cachedKeys) {
|
|
221
|
+
dbg.log(passphrase.endsWith(".ro")
|
|
222
|
+
? "deriving keys from RO token"
|
|
223
|
+
: "deriving keys from passphrase");
|
|
224
|
+
cachedKeys = await deriveConsumerKeys(passphrase);
|
|
225
|
+
}
|
|
226
|
+
const keys = cachedKeys;
|
|
227
|
+
// Connect to the producer's channel (the passphrase-derived Ed25519
|
|
228
|
+
// public key) and sign with the matching secret key. The hub verifies
|
|
229
|
+
// signatures against the channel ID as the Ed25519 public key, so the
|
|
230
|
+
// signing key must correspond to the channel we connect to.
|
|
231
|
+
// Multiple consumers can coexist in the same channel; the hub gives each
|
|
232
|
+
// a unique sessionId (UUID).
|
|
233
|
+
const pubHex = hexEncode(keys.signing.publicKey);
|
|
234
|
+
dbg.log("channel id (passphrase-derived pubkey): %s", pubHex);
|
|
108
235
|
const iceServers = await fetchIceServers(hubWsUrl);
|
|
109
236
|
dbg.log("ICE servers: %o", iceServers);
|
|
110
|
-
if (disposed) {
|
|
111
|
-
dbg.warn("
|
|
237
|
+
if (disposed || generation !== connectGeneration) {
|
|
238
|
+
dbg.warn("stale connect attempt, aborting");
|
|
112
239
|
return;
|
|
113
240
|
}
|
|
114
241
|
const wsUrl = `${hubWsUrl.replace(/\/$/, "")}/channel/${pubHex}/consumer`;
|
|
@@ -126,12 +253,12 @@ export function createShareTransport(hubWsUrl, passphrase, debug) {
|
|
|
126
253
|
if (disposed)
|
|
127
254
|
reject(new Error("disposed"));
|
|
128
255
|
});
|
|
129
|
-
if (disposed) {
|
|
130
|
-
dbg.warn("
|
|
131
|
-
ws
|
|
256
|
+
if (disposed || generation !== connectGeneration) {
|
|
257
|
+
dbg.warn("stale after WS open, aborting");
|
|
258
|
+
ws?.close();
|
|
132
259
|
return;
|
|
133
260
|
}
|
|
134
|
-
// Wait for registered + peer_joined
|
|
261
|
+
// Wait for registered + peer_joined (producer role only).
|
|
135
262
|
dbg.log("waiting for registered + peer_joined");
|
|
136
263
|
const producerSessionId = await new Promise((resolve, reject) => {
|
|
137
264
|
let registered = false;
|
|
@@ -143,7 +270,12 @@ export function createShareTransport(hubWsUrl, passphrase, debug) {
|
|
|
143
270
|
dbg.log("registered with hub");
|
|
144
271
|
}
|
|
145
272
|
else if (m.type === "peer_joined" && registered) {
|
|
146
|
-
|
|
273
|
+
// Only connect to the producer (role === "producer"), not other consumers.
|
|
274
|
+
if (m.role && m.role !== "producer") {
|
|
275
|
+
dbg.log("ignoring non-producer peer: %s (role=%s)", m.sessionId, m.role);
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
dbg.log("producer joined: %s", m.sessionId);
|
|
147
279
|
resolve(m.sessionId);
|
|
148
280
|
}
|
|
149
281
|
else if (m.type === "error") {
|
|
@@ -156,9 +288,9 @@ export function createShareTransport(hubWsUrl, passphrase, debug) {
|
|
|
156
288
|
reject(new Error("signaling closed before peer joined"));
|
|
157
289
|
};
|
|
158
290
|
});
|
|
159
|
-
if (disposed) {
|
|
160
|
-
dbg.warn("
|
|
161
|
-
ws
|
|
291
|
+
if (disposed || generation !== connectGeneration) {
|
|
292
|
+
dbg.warn("stale after peer joined, aborting");
|
|
293
|
+
ws?.close();
|
|
162
294
|
return;
|
|
163
295
|
}
|
|
164
296
|
// Create RTCPeerConnection and data channel transport
|
|
@@ -168,12 +300,12 @@ export function createShareTransport(hubWsUrl, passphrase, debug) {
|
|
|
168
300
|
pc.oniceconnectionstatechange = () => dbg.log("pc.iceConnectionState = %s", pc.iceConnectionState);
|
|
169
301
|
pc.onicegatheringstatechange = () => dbg.log("pc.iceGatheringState = %s", pc.iceGatheringState);
|
|
170
302
|
pc.onsignalingstatechange = () => dbg.log("pc.signalingState = %s", pc.signalingState);
|
|
171
|
-
const
|
|
172
|
-
inner =
|
|
303
|
+
const dcTransport = createWebRtcDataChannelTransport(pc);
|
|
304
|
+
inner = dcTransport;
|
|
173
305
|
// Forward inner transport events
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
if (disposed)
|
|
306
|
+
dcTransport.addEventListener("message", (data) => dispatch(data));
|
|
307
|
+
dcTransport.addEventListener("statuschange", (s) => {
|
|
308
|
+
if (disposed || generation !== connectGeneration)
|
|
177
309
|
return;
|
|
178
310
|
setStatus(s);
|
|
179
311
|
});
|
|
@@ -182,30 +314,34 @@ export function createShareTransport(hubWsUrl, passphrase, debug) {
|
|
|
182
314
|
const offer = await pc.createOffer();
|
|
183
315
|
await pc.setLocalDescription(offer);
|
|
184
316
|
dbg.log("SDP offer set as local description, type=%s", offer.type);
|
|
185
|
-
// Send the offer
|
|
317
|
+
// Send the offer encrypted to the producer.
|
|
186
318
|
const sdpData = { sdp: { type: offer.type, sdp: offer.sdp } };
|
|
187
|
-
ws.send(
|
|
188
|
-
dbg.log("sent SDP offer to producer %s", producerSessionId);
|
|
319
|
+
ws.send(buildSealedMessage(keys, keys.signing.secretKey, producerSessionId, sdpData));
|
|
320
|
+
dbg.log("sent encrypted SDP offer to producer %s", producerSessionId);
|
|
189
321
|
// Buffer ICE candidates that arrive before we have the remote description
|
|
190
322
|
const pendingCandidates = [];
|
|
191
323
|
let remoteDescSet = false;
|
|
192
|
-
// Send our ICE candidates to the producer
|
|
324
|
+
// Send our ICE candidates to the producer, encrypted.
|
|
193
325
|
pc.onicecandidate = (e) => {
|
|
194
|
-
if (!e.candidate || disposed)
|
|
326
|
+
if (!e.candidate || disposed || generation !== connectGeneration)
|
|
195
327
|
return;
|
|
196
328
|
dbg.log("local ICE candidate: %s", e.candidate.candidate);
|
|
197
329
|
const candidateData = { candidate: e.candidate.toJSON() };
|
|
198
|
-
ws.send(
|
|
330
|
+
ws.send(buildSealedMessage(keys, keys.signing.secretKey, producerSessionId, candidateData));
|
|
199
331
|
};
|
|
200
|
-
// Receive answer + remote ICE candidates
|
|
332
|
+
// Receive answer + remote ICE candidates.
|
|
333
|
+
// The producer sends replies encrypted with the consumer's X25519 public
|
|
334
|
+
// key; try to decrypt, fall back to plaintext for legacy producers.
|
|
201
335
|
ws.onmessage = (e) => {
|
|
202
336
|
const m = JSON.parse(e.data);
|
|
203
337
|
dbg.log("signaling ← %s %o", m.type, m.data ? Object.keys(m.data) : "no data");
|
|
204
338
|
if (m.type !== "signal" || !m.data)
|
|
205
339
|
return;
|
|
206
|
-
if
|
|
340
|
+
// Decrypt the payload if it's a crypto_box sealed message.
|
|
341
|
+
const data = openSealedData(m.data, keys) ?? m.data;
|
|
342
|
+
if (data.sdp) {
|
|
207
343
|
dbg.log("received remote SDP answer");
|
|
208
|
-
const sdp =
|
|
344
|
+
const sdp = data.sdp;
|
|
209
345
|
pc
|
|
210
346
|
.setRemoteDescription(new RTCSessionDescription({
|
|
211
347
|
type: sdp.type ?? "answer",
|
|
@@ -221,14 +357,14 @@ export function createShareTransport(hubWsUrl, passphrase, debug) {
|
|
|
221
357
|
})
|
|
222
358
|
.catch((err) => {
|
|
223
359
|
dbg.error("setRemoteDescription failed: %o", err);
|
|
224
|
-
if (disposed)
|
|
360
|
+
if (disposed || generation !== connectGeneration)
|
|
225
361
|
return;
|
|
226
362
|
_lastError = err instanceof Error ? err.message : String(err);
|
|
227
363
|
setStatus("error");
|
|
228
364
|
});
|
|
229
365
|
}
|
|
230
|
-
else if (
|
|
231
|
-
const candidate =
|
|
366
|
+
else if (data.candidate) {
|
|
367
|
+
const candidate = data.candidate;
|
|
232
368
|
if (remoteDescSet) {
|
|
233
369
|
dbg.log("remote ICE candidate (applied): %s", candidate.candidate);
|
|
234
370
|
pc.addIceCandidate(new RTCIceCandidate(candidate)).catch(() => { });
|
|
@@ -244,7 +380,7 @@ export function createShareTransport(hubWsUrl, passphrase, debug) {
|
|
|
244
380
|
};
|
|
245
381
|
if (started) {
|
|
246
382
|
dbg.log("calling inner transport.connect()");
|
|
247
|
-
|
|
383
|
+
dcTransport.connect();
|
|
248
384
|
}
|
|
249
385
|
else {
|
|
250
386
|
dbg.log("inner transport created but start() not yet called");
|
|
@@ -252,23 +388,36 @@ export function createShareTransport(hubWsUrl, passphrase, debug) {
|
|
|
252
388
|
}
|
|
253
389
|
catch (err) {
|
|
254
390
|
dbg.error("share transport error: %o", err);
|
|
255
|
-
if (disposed)
|
|
391
|
+
if (disposed || generation !== connectGeneration)
|
|
256
392
|
return;
|
|
257
393
|
_lastError = err instanceof Error ? err.message : String(err);
|
|
258
|
-
setStatus("
|
|
394
|
+
setStatus("disconnected");
|
|
259
395
|
}
|
|
260
|
-
}
|
|
396
|
+
}
|
|
261
397
|
const transport = {
|
|
262
398
|
connect() {
|
|
263
|
-
if (
|
|
399
|
+
if (disposed)
|
|
264
400
|
return;
|
|
265
|
-
started
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
401
|
+
// First call: mark as started, kick off the initial connection, and
|
|
402
|
+
// flush any early messages that arrived before connect() was called.
|
|
403
|
+
if (!started) {
|
|
404
|
+
started = true;
|
|
405
|
+
doConnect(connectGeneration);
|
|
406
|
+
for (const msg of earlyMessages) {
|
|
407
|
+
for (const l of messageListeners)
|
|
408
|
+
l(msg);
|
|
409
|
+
}
|
|
410
|
+
earlyMessages.length = 0;
|
|
411
|
+
return;
|
|
412
|
+
}
|
|
413
|
+
// Subsequent calls: reconnect if currently disconnected or errored.
|
|
414
|
+
if (_status === "disconnected" || _status === "error") {
|
|
415
|
+
dbg.log("reconnect requested (status=%s), tearing down and retrying", _status);
|
|
416
|
+
teardown();
|
|
417
|
+
connectGeneration++;
|
|
418
|
+
setStatus("connecting");
|
|
419
|
+
doConnect(connectGeneration);
|
|
269
420
|
}
|
|
270
|
-
earlyMessages.length = 0;
|
|
271
|
-
inner?.connect();
|
|
272
421
|
},
|
|
273
422
|
get status() {
|
|
274
423
|
return _status;
|
|
@@ -300,9 +449,7 @@ export function createShareTransport(hubWsUrl, passphrase, debug) {
|
|
|
300
449
|
},
|
|
301
450
|
close() {
|
|
302
451
|
disposed = true;
|
|
303
|
-
|
|
304
|
-
pc?.close();
|
|
305
|
-
inner?.close();
|
|
452
|
+
teardown();
|
|
306
453
|
setStatus("closed");
|
|
307
454
|
},
|
|
308
455
|
};
|