@ikonai/sdk 1.0.48 → 1.0.50
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/assets/{protocol-worker-9F3vWnC8.js → protocol-worker-Df0FycOk.js} +505 -456
- package/channel/channel-manager.d.ts +3 -0
- package/index.d.ts +2 -2
- package/index.js +2267 -2085
- package/media/ikon-image-capture.d.ts +22 -0
- package/media/index.d.ts +2 -2
- package/package.json +1 -1
- package/transport/web-socket-transport.d.ts +1 -0
- package/transport/web-transport-transport.d.ts +2 -0
- package/utils/debug-mode.d.ts +2 -1
|
@@ -1,122 +1,122 @@
|
|
|
1
|
-
function
|
|
1
|
+
function Q(t) {
|
|
2
2
|
if (t.length < 8)
|
|
3
3
|
throw new Error("Protocol message too short");
|
|
4
4
|
return (t[4] | t[5] << 8 | t[6] << 16 | t[7] << 24) >>> 0;
|
|
5
5
|
}
|
|
6
|
-
function
|
|
7
|
-
return
|
|
6
|
+
function F(t) {
|
|
7
|
+
return Q(t) & 4294901760;
|
|
8
8
|
}
|
|
9
9
|
function H(t) {
|
|
10
|
-
const e = It(t),
|
|
10
|
+
const e = It(t), s = new DataView(e.buffer, e.byteOffset, e.byteLength);
|
|
11
11
|
if (e.length < 27)
|
|
12
12
|
throw new Error("Protocol payload too short");
|
|
13
|
-
const r =
|
|
14
|
-
if (27 +
|
|
13
|
+
const r = s.getUint32(0, !0), n = s.getUint32(4, !0), i = s.getUint32(8, !0), a = s.getUint32(12, !0), o = s.getUint32(16, !0), l = s.getUint32(20, !0), I = s.getUint8(24), E = s.getUint8(25), h = s.getUint8(26);
|
|
14
|
+
if (27 + l * 4 > e.length)
|
|
15
15
|
throw new Error("Protocol header exceeds payload length");
|
|
16
16
|
const c = [];
|
|
17
|
-
let
|
|
18
|
-
for (let
|
|
19
|
-
c.push(
|
|
17
|
+
let w = 27;
|
|
18
|
+
for (let g = 0; g < l; g++)
|
|
19
|
+
c.push(s.getUint32(w, !0)), w += 4;
|
|
20
20
|
return {
|
|
21
21
|
length: r,
|
|
22
|
-
opcode:
|
|
22
|
+
opcode: n,
|
|
23
23
|
senderId: i,
|
|
24
|
-
trackId:
|
|
25
|
-
sequenceId:
|
|
24
|
+
trackId: a,
|
|
25
|
+
sequenceId: o,
|
|
26
26
|
targetIds: c,
|
|
27
|
-
payloadVersion:
|
|
28
|
-
payloadType:
|
|
29
|
-
flags:
|
|
27
|
+
payloadVersion: I,
|
|
28
|
+
payloadType: E,
|
|
29
|
+
flags: h
|
|
30
30
|
};
|
|
31
31
|
}
|
|
32
|
-
function
|
|
33
|
-
const
|
|
34
|
-
c.setUint32(0,
|
|
35
|
-
let
|
|
36
|
-
for (let
|
|
37
|
-
c.setUint32(
|
|
38
|
-
return
|
|
32
|
+
function lt(t, e, s, r, n) {
|
|
33
|
+
const l = [], E = 27 + l.length * 4, h = E + e.length, T = new Uint8Array(h), c = new DataView(T.buffer);
|
|
34
|
+
c.setUint32(0, h, !0), c.setUint32(4, t >>> 0, !0), c.setUint32(8, r >>> 0, !0), c.setUint32(12, 0, !0), c.setUint32(16, 0, !0), c.setUint32(20, l.length >>> 0, !0), c.setUint8(24, s & 255), c.setUint8(25, 8), c.setUint8(26, 0);
|
|
35
|
+
let w = 27;
|
|
36
|
+
for (let g = 0; g < l.length; g++)
|
|
37
|
+
c.setUint32(w, l[g] >>> 0, !0), w += 4;
|
|
38
|
+
return T.set(e, E), T;
|
|
39
39
|
}
|
|
40
|
-
var
|
|
41
|
-
const
|
|
40
|
+
var D = /* @__PURE__ */ ((t) => (t[t.Null = 1] = "Null", t[t.Bool = 2] = "Bool", t[t.Int32 = 3] = "Int32", t[t.Int64 = 4] = "Int64", t[t.UInt32 = 5] = "UInt32", t[t.UInt64 = 6] = "UInt64", t[t.Float32 = 7] = "Float32", t[t.Float64 = 8] = "Float64", t[t.Array = 9] = "Array", t[t.Dict = 10] = "Dict", t[t.Object = 11] = "Object", t[t.String = 12] = "String", t[t.Binary = 13] = "Binary", t[t.Guid = 14] = "Guid", t))(D || {});
|
|
41
|
+
const Et = 161, ht = 162, W = new TextEncoder();
|
|
42
42
|
new TextDecoder("utf-8", { fatal: !0 });
|
|
43
43
|
class G {
|
|
44
44
|
constructor(e = 1) {
|
|
45
|
-
this.version = e, this.buffer.writeByte(
|
|
45
|
+
this.version = e, this.buffer.writeByte(Et), this.buffer.writeVarUInt(e >>> 0);
|
|
46
46
|
}
|
|
47
|
-
buffer = new
|
|
47
|
+
buffer = new O();
|
|
48
48
|
closed = !1;
|
|
49
49
|
cached;
|
|
50
|
-
writeInt32Field(e,
|
|
51
|
-
this.writeFixedField(e, 3, () => this.buffer.writeInt32(
|
|
50
|
+
writeInt32Field(e, s) {
|
|
51
|
+
this.writeFixedField(e, 3, () => this.buffer.writeInt32(s | 0));
|
|
52
52
|
}
|
|
53
|
-
writeUInt32Field(e,
|
|
54
|
-
this.writeFixedField(e, 5, () => this.buffer.writeUInt32(
|
|
53
|
+
writeUInt32Field(e, s) {
|
|
54
|
+
this.writeFixedField(e, 5, () => this.buffer.writeUInt32(s >>> 0));
|
|
55
55
|
}
|
|
56
|
-
writeInt64Field(e,
|
|
57
|
-
this.writeFixedField(e, 4, () => this.buffer.writeBigInt64(
|
|
56
|
+
writeInt64Field(e, s) {
|
|
57
|
+
this.writeFixedField(e, 4, () => this.buffer.writeBigInt64(s));
|
|
58
58
|
}
|
|
59
|
-
writeUInt64Field(e,
|
|
60
|
-
this.writeFixedField(e, 6, () => this.buffer.writeBigUInt64(
|
|
59
|
+
writeUInt64Field(e, s) {
|
|
60
|
+
this.writeFixedField(e, 6, () => this.buffer.writeBigUInt64(s));
|
|
61
61
|
}
|
|
62
|
-
writeFloat32Field(e,
|
|
63
|
-
this.writeFixedField(e, 7, () => this.buffer.writeFloat32(
|
|
62
|
+
writeFloat32Field(e, s) {
|
|
63
|
+
this.writeFixedField(e, 7, () => this.buffer.writeFloat32(s));
|
|
64
64
|
}
|
|
65
|
-
writeFloat64Field(e,
|
|
66
|
-
this.writeFixedField(e, 8, () => this.buffer.writeFloat64(
|
|
65
|
+
writeFloat64Field(e, s) {
|
|
66
|
+
this.writeFixedField(e, 8, () => this.buffer.writeFloat64(s));
|
|
67
67
|
}
|
|
68
|
-
writeBoolField(e,
|
|
69
|
-
this.writeFixedField(e, 2, () => this.buffer.writeByte(
|
|
68
|
+
writeBoolField(e, s) {
|
|
69
|
+
this.writeFixedField(e, 2, () => this.buffer.writeByte(s ? 1 : 0));
|
|
70
70
|
}
|
|
71
|
-
writeGuidField(e,
|
|
72
|
-
const r =
|
|
71
|
+
writeGuidField(e, s) {
|
|
72
|
+
const r = s instanceof _ ? s.asBytes() : s;
|
|
73
73
|
if (r.length !== 16)
|
|
74
74
|
throw new Error("Guid payload must be 16 bytes");
|
|
75
75
|
this.writeFixedField(e, 14, () => this.buffer.writeBytes(r));
|
|
76
76
|
}
|
|
77
|
-
writeStringField(e,
|
|
78
|
-
const r = W.encode(
|
|
77
|
+
writeStringField(e, s) {
|
|
78
|
+
const r = W.encode(s ?? "");
|
|
79
79
|
this.writeVariableField(e, 12, r);
|
|
80
80
|
}
|
|
81
|
-
writeBinaryField(e,
|
|
82
|
-
this.writeVariableField(e, 13,
|
|
81
|
+
writeBinaryField(e, s) {
|
|
82
|
+
this.writeVariableField(e, 13, s);
|
|
83
83
|
}
|
|
84
|
-
writeObjectField(e,
|
|
85
|
-
const
|
|
86
|
-
r(
|
|
87
|
-
const i =
|
|
84
|
+
writeObjectField(e, s, r) {
|
|
85
|
+
const n = new G(s);
|
|
86
|
+
r(n);
|
|
87
|
+
const i = n.finish();
|
|
88
88
|
this.writeVariableField(e, 11, i);
|
|
89
89
|
}
|
|
90
|
-
writeArrayField(e,
|
|
91
|
-
const
|
|
92
|
-
r(
|
|
93
|
-
const i =
|
|
90
|
+
writeArrayField(e, s, r) {
|
|
91
|
+
const n = new Y(s);
|
|
92
|
+
r(n);
|
|
93
|
+
const i = n.finish();
|
|
94
94
|
this.writeVariableField(e, 9, i);
|
|
95
95
|
}
|
|
96
|
-
writeDictionaryField(e,
|
|
97
|
-
const i = new z(
|
|
98
|
-
|
|
99
|
-
const
|
|
100
|
-
this.writeVariableField(e, 10,
|
|
96
|
+
writeDictionaryField(e, s, r, n) {
|
|
97
|
+
const i = new z(s, r);
|
|
98
|
+
n(i);
|
|
99
|
+
const a = i.finish();
|
|
100
|
+
this.writeVariableField(e, 10, a);
|
|
101
101
|
}
|
|
102
102
|
finish() {
|
|
103
103
|
return this.closed || (this.buffer.writeByte(ht), this.closed = !0, this.cached = this.buffer.toUint8Array()), this.cached;
|
|
104
104
|
}
|
|
105
|
-
writeFixedField(e,
|
|
106
|
-
this.writeFieldHeader(e,
|
|
105
|
+
writeFixedField(e, s, r) {
|
|
106
|
+
this.writeFieldHeader(e, s, 0), r();
|
|
107
107
|
}
|
|
108
|
-
writeVariableField(e,
|
|
109
|
-
this.writeFieldHeader(e,
|
|
108
|
+
writeVariableField(e, s, r) {
|
|
109
|
+
this.writeFieldHeader(e, s, r.length), this.buffer.writeBytes(r);
|
|
110
110
|
}
|
|
111
|
-
writeFieldHeader(e,
|
|
112
|
-
this.buffer.writeUInt32(e >>> 0), this.buffer.writeByte(K(
|
|
111
|
+
writeFieldHeader(e, s, r) {
|
|
112
|
+
this.buffer.writeUInt32(e >>> 0), this.buffer.writeByte(K(s)), Tt(s) && this.buffer.writeVarUInt(r >>> 0);
|
|
113
113
|
}
|
|
114
114
|
}
|
|
115
115
|
class Y {
|
|
116
116
|
constructor(e) {
|
|
117
117
|
this.elementType = e;
|
|
118
118
|
}
|
|
119
|
-
payload = new
|
|
119
|
+
payload = new O();
|
|
120
120
|
count = 0;
|
|
121
121
|
writeInt32(e) {
|
|
122
122
|
this.ensureElementType(
|
|
@@ -165,18 +165,18 @@ class Y {
|
|
|
165
165
|
14
|
|
166
166
|
/* Guid */
|
|
167
167
|
), this.count++;
|
|
168
|
-
const
|
|
169
|
-
if (
|
|
168
|
+
const s = e instanceof _ ? e.asBytes() : e;
|
|
169
|
+
if (s.length !== 16)
|
|
170
170
|
throw new Error("Guid payload must be 16 bytes");
|
|
171
|
-
this.payload.writeBytes(
|
|
171
|
+
this.payload.writeBytes(s);
|
|
172
172
|
}
|
|
173
173
|
writeString(e) {
|
|
174
174
|
this.ensureElementType(
|
|
175
175
|
12
|
|
176
176
|
/* String */
|
|
177
177
|
), this.count++;
|
|
178
|
-
const
|
|
179
|
-
this.payload.writeVarUInt(
|
|
178
|
+
const s = W.encode(e ?? "");
|
|
179
|
+
this.payload.writeVarUInt(s.length), this.payload.writeBytes(s);
|
|
180
180
|
}
|
|
181
181
|
writeBinary(e) {
|
|
182
182
|
this.ensureElementType(
|
|
@@ -184,50 +184,50 @@ class Y {
|
|
|
184
184
|
/* Binary */
|
|
185
185
|
), this.count++, this.payload.writeVarUInt(e.length), this.payload.writeBytes(e);
|
|
186
186
|
}
|
|
187
|
-
writeObject(e,
|
|
187
|
+
writeObject(e, s) {
|
|
188
188
|
this.ensureElementType(
|
|
189
189
|
11
|
|
190
190
|
/* Object */
|
|
191
191
|
), this.count++;
|
|
192
192
|
const r = new G(e);
|
|
193
|
-
|
|
194
|
-
const
|
|
195
|
-
this.payload.writeVarUInt(
|
|
193
|
+
s(r);
|
|
194
|
+
const n = r.finish();
|
|
195
|
+
this.payload.writeVarUInt(n.length), this.payload.writeBytes(n);
|
|
196
196
|
}
|
|
197
|
-
writeArray(e,
|
|
197
|
+
writeArray(e, s) {
|
|
198
198
|
this.ensureElementType(
|
|
199
199
|
9
|
|
200
200
|
/* Array */
|
|
201
201
|
), this.count++;
|
|
202
202
|
const r = new Y(e);
|
|
203
|
-
|
|
204
|
-
const
|
|
205
|
-
this.payload.writeBytes(
|
|
203
|
+
s(r);
|
|
204
|
+
const n = r.finish();
|
|
205
|
+
this.payload.writeBytes(n);
|
|
206
206
|
}
|
|
207
|
-
writeDictionary(e,
|
|
207
|
+
writeDictionary(e, s, r) {
|
|
208
208
|
this.ensureElementType(
|
|
209
209
|
10
|
|
210
210
|
/* Dict */
|
|
211
211
|
), this.count++;
|
|
212
|
-
const
|
|
213
|
-
r(
|
|
214
|
-
const i =
|
|
212
|
+
const n = new z(e, s);
|
|
213
|
+
r(n);
|
|
214
|
+
const i = n.finish();
|
|
215
215
|
this.payload.writeBytes(i);
|
|
216
216
|
}
|
|
217
217
|
finish() {
|
|
218
|
-
const e = new
|
|
218
|
+
const e = new O();
|
|
219
219
|
return e.writeByte(K(this.elementType)), e.writeVarUInt(this.count), e.writeBytes(this.payload.toUint8Array()), e.toUint8Array();
|
|
220
220
|
}
|
|
221
221
|
ensureElementType(e) {
|
|
222
222
|
if (this.elementType !== e)
|
|
223
|
-
throw new Error(`Array element type is ${
|
|
223
|
+
throw new Error(`Array element type is ${D[this.elementType]}, expected ${D[e]}`);
|
|
224
224
|
}
|
|
225
225
|
}
|
|
226
226
|
class z {
|
|
227
|
-
constructor(e,
|
|
228
|
-
this.keyType = e, this.valueType =
|
|
227
|
+
constructor(e, s) {
|
|
228
|
+
this.keyType = e, this.valueType = s, ct(e);
|
|
229
229
|
}
|
|
230
|
-
payload = new
|
|
230
|
+
payload = new O();
|
|
231
231
|
count = 0;
|
|
232
232
|
entryOpen = !1;
|
|
233
233
|
beginEntry() {
|
|
@@ -240,13 +240,13 @@ class z {
|
|
|
240
240
|
finish() {
|
|
241
241
|
if (this.entryOpen)
|
|
242
242
|
throw new Error("Dictionary entry not completed");
|
|
243
|
-
const e = new
|
|
243
|
+
const e = new O();
|
|
244
244
|
return e.writeByte(K(this.keyType)), e.writeByte(K(this.valueType)), e.writeVarUInt(this.count), e.writeBytes(this.payload.toUint8Array()), e.toUint8Array();
|
|
245
245
|
}
|
|
246
246
|
}
|
|
247
247
|
class _t {
|
|
248
|
-
constructor(e,
|
|
249
|
-
this.keyType = e, this.valueType =
|
|
248
|
+
constructor(e, s, r, n) {
|
|
249
|
+
this.keyType = e, this.valueType = s, this.payload = r, this.onComplete = n;
|
|
250
250
|
}
|
|
251
251
|
keyWritten = !1;
|
|
252
252
|
valueWritten = !1;
|
|
@@ -298,18 +298,18 @@ class _t {
|
|
|
298
298
|
14
|
|
299
299
|
/* Guid */
|
|
300
300
|
);
|
|
301
|
-
const
|
|
302
|
-
if (
|
|
301
|
+
const s = e instanceof _ ? e.asBytes() : e;
|
|
302
|
+
if (s.length !== 16)
|
|
303
303
|
throw new Error("Guid payload must be 16 bytes");
|
|
304
|
-
this.payload.writeBytes(
|
|
304
|
+
this.payload.writeBytes(s), this.keyWritten = !0;
|
|
305
305
|
}
|
|
306
306
|
writeKeyString(e) {
|
|
307
307
|
this.ensureKeyType(
|
|
308
308
|
12
|
|
309
309
|
/* String */
|
|
310
310
|
);
|
|
311
|
-
const
|
|
312
|
-
this.payload.writeVarUInt(
|
|
311
|
+
const s = W.encode(e ?? "");
|
|
312
|
+
this.payload.writeVarUInt(s.length), this.payload.writeBytes(s), this.keyWritten = !0;
|
|
313
313
|
}
|
|
314
314
|
writeKeyBinary(e) {
|
|
315
315
|
this.ensureKeyType(
|
|
@@ -364,10 +364,10 @@ class _t {
|
|
|
364
364
|
14
|
|
365
365
|
/* Guid */
|
|
366
366
|
);
|
|
367
|
-
const
|
|
368
|
-
if (
|
|
367
|
+
const s = e instanceof _ ? e.asBytes() : e;
|
|
368
|
+
if (s.length !== 16)
|
|
369
369
|
throw new Error("Guid payload must be 16 bytes");
|
|
370
|
-
this.payload.writeBytes(
|
|
370
|
+
this.payload.writeBytes(s), this.valueWritten = !0;
|
|
371
371
|
}
|
|
372
372
|
writeNullValue() {
|
|
373
373
|
this.ensureValueType(
|
|
@@ -386,37 +386,37 @@ class _t {
|
|
|
386
386
|
12
|
|
387
387
|
/* String */
|
|
388
388
|
);
|
|
389
|
-
const
|
|
390
|
-
this.payload.writeVarUInt(
|
|
389
|
+
const s = W.encode(e ?? "");
|
|
390
|
+
this.payload.writeVarUInt(s.length), this.payload.writeBytes(s), this.valueWritten = !0;
|
|
391
391
|
}
|
|
392
|
-
writeValueObject(e,
|
|
392
|
+
writeValueObject(e, s) {
|
|
393
393
|
this.ensureValueType(
|
|
394
394
|
11
|
|
395
395
|
/* Object */
|
|
396
396
|
);
|
|
397
397
|
const r = new G(e);
|
|
398
|
-
|
|
399
|
-
const
|
|
400
|
-
this.payload.writeVarUInt(
|
|
398
|
+
s(r);
|
|
399
|
+
const n = r.finish();
|
|
400
|
+
this.payload.writeVarUInt(n.length), this.payload.writeBytes(n), this.valueWritten = !0;
|
|
401
401
|
}
|
|
402
|
-
writeValueArray(e,
|
|
402
|
+
writeValueArray(e, s) {
|
|
403
403
|
this.ensureValueType(
|
|
404
404
|
9
|
|
405
405
|
/* Array */
|
|
406
406
|
);
|
|
407
407
|
const r = new Y(e);
|
|
408
|
-
|
|
409
|
-
const
|
|
410
|
-
this.payload.writeBytes(
|
|
408
|
+
s(r);
|
|
409
|
+
const n = r.finish();
|
|
410
|
+
this.payload.writeBytes(n), this.valueWritten = !0;
|
|
411
411
|
}
|
|
412
|
-
writeValueDictionary(e,
|
|
412
|
+
writeValueDictionary(e, s, r) {
|
|
413
413
|
this.ensureValueType(
|
|
414
414
|
10
|
|
415
415
|
/* Dict */
|
|
416
416
|
);
|
|
417
|
-
const
|
|
418
|
-
r(
|
|
419
|
-
const i =
|
|
417
|
+
const n = new z(e, s);
|
|
418
|
+
r(n);
|
|
419
|
+
const i = n.finish();
|
|
420
420
|
this.payload.writeBytes(i), this.valueWritten = !0;
|
|
421
421
|
}
|
|
422
422
|
complete() {
|
|
@@ -428,52 +428,52 @@ class _t {
|
|
|
428
428
|
}
|
|
429
429
|
ensureKeyType(e) {
|
|
430
430
|
if (this.keyType !== e)
|
|
431
|
-
throw new Error(`Dictionary key type is ${
|
|
431
|
+
throw new Error(`Dictionary key type is ${D[this.keyType]}, expected ${D[e]}`);
|
|
432
432
|
}
|
|
433
433
|
ensureValueType(e) {
|
|
434
434
|
if (this.valueType !== e)
|
|
435
|
-
throw new Error(`Dictionary value type is ${
|
|
435
|
+
throw new Error(`Dictionary value type is ${D[this.valueType]}, expected ${D[e]}`);
|
|
436
436
|
}
|
|
437
437
|
}
|
|
438
|
-
class
|
|
438
|
+
class _ {
|
|
439
439
|
constructor(e) {
|
|
440
440
|
this.bytes = e;
|
|
441
441
|
}
|
|
442
442
|
static fromString(e) {
|
|
443
443
|
if (!e)
|
|
444
444
|
throw new Error("Guid string is empty");
|
|
445
|
-
const
|
|
446
|
-
if (
|
|
445
|
+
const s = e.replace(/-/g, "");
|
|
446
|
+
if (s.length !== 32)
|
|
447
447
|
throw new Error("Guid string must be 32 hex characters");
|
|
448
|
-
const r = new Uint8Array(16),
|
|
449
|
-
|
|
450
|
-
for (let
|
|
451
|
-
r[8 +
|
|
452
|
-
return new
|
|
448
|
+
const r = new Uint8Array(16), n = _.parseHexSlice(s, 0, 8), i = _.parseHexSlice(s, 8, 4), a = _.parseHexSlice(s, 12, 4);
|
|
449
|
+
_.writeUInt32LE(r, 0, n), _.writeUInt16LE(r, 4, i), _.writeUInt16LE(r, 6, a);
|
|
450
|
+
for (let o = 0; o < 8; o++)
|
|
451
|
+
r[8 + o] = _.parseHexSlice(s, 16 + o * 2, 2);
|
|
452
|
+
return new _(r);
|
|
453
453
|
}
|
|
454
454
|
static fromBytes(e) {
|
|
455
455
|
if (e.length !== 16)
|
|
456
456
|
throw new Error("Guid byte array must be 16 bytes");
|
|
457
|
-
return new
|
|
457
|
+
return new _(Uint8Array.from(e));
|
|
458
458
|
}
|
|
459
459
|
static createZero() {
|
|
460
|
-
return new
|
|
460
|
+
return new _(new Uint8Array(16));
|
|
461
461
|
}
|
|
462
462
|
static createRandom() {
|
|
463
|
-
const e = new Uint8Array(16),
|
|
464
|
-
if (
|
|
465
|
-
|
|
463
|
+
const e = new Uint8Array(16), s = globalThis.crypto;
|
|
464
|
+
if (s?.getRandomValues)
|
|
465
|
+
s.getRandomValues(e);
|
|
466
466
|
else
|
|
467
467
|
for (let r = 0; r < e.length; r++)
|
|
468
468
|
e[r] = Math.floor(Math.random() * 256);
|
|
469
|
-
return e[6] = e[6] & 15 | 64, e[8] = e[8] & 63 | 128, new
|
|
469
|
+
return e[6] = e[6] & 15 | 64, e[8] = e[8] & 63 | 128, new _(e);
|
|
470
470
|
}
|
|
471
471
|
toString() {
|
|
472
472
|
const e = this.bytes;
|
|
473
473
|
return [
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
474
|
+
_.toHex(_.readUInt32LE(e, 0), 8),
|
|
475
|
+
_.toHex(_.readUInt16LE(e, 4), 4),
|
|
476
|
+
_.toHex(_.readUInt16LE(e, 6), 4),
|
|
477
477
|
J(e.subarray(8, 10)),
|
|
478
478
|
J(e.subarray(10, 16))
|
|
479
479
|
].join("-");
|
|
@@ -481,47 +481,47 @@ class h {
|
|
|
481
481
|
asBytes() {
|
|
482
482
|
return this.bytes.slice();
|
|
483
483
|
}
|
|
484
|
-
static parseHexSlice(e,
|
|
485
|
-
const
|
|
484
|
+
static parseHexSlice(e, s, r) {
|
|
485
|
+
const n = e.substr(s, r), i = Number.parseInt(n, 16);
|
|
486
486
|
if (Number.isNaN(i))
|
|
487
487
|
throw new Error("Guid string contains invalid characters");
|
|
488
488
|
return i >>> 0;
|
|
489
489
|
}
|
|
490
|
-
static writeUInt32LE(e,
|
|
491
|
-
const
|
|
492
|
-
e[
|
|
490
|
+
static writeUInt32LE(e, s, r) {
|
|
491
|
+
const n = r >>> 0;
|
|
492
|
+
e[s] = n & 255, e[s + 1] = n >>> 8 & 255, e[s + 2] = n >>> 16 & 255, e[s + 3] = n >>> 24 & 255;
|
|
493
493
|
}
|
|
494
|
-
static writeUInt16LE(e,
|
|
495
|
-
const
|
|
496
|
-
e[
|
|
494
|
+
static writeUInt16LE(e, s, r) {
|
|
495
|
+
const n = r & 65535;
|
|
496
|
+
e[s] = n & 255, e[s + 1] = n >>> 8 & 255;
|
|
497
497
|
}
|
|
498
|
-
static readUInt32LE(e,
|
|
499
|
-
return (e[
|
|
498
|
+
static readUInt32LE(e, s) {
|
|
499
|
+
return (e[s] | e[s + 1] << 8 | e[s + 2] << 16 | e[s + 3] << 24) >>> 0;
|
|
500
500
|
}
|
|
501
|
-
static readUInt16LE(e,
|
|
502
|
-
return (e[
|
|
501
|
+
static readUInt16LE(e, s) {
|
|
502
|
+
return (e[s] | e[s + 1] << 8) & 65535;
|
|
503
503
|
}
|
|
504
|
-
static toHex(e,
|
|
505
|
-
return (e >>> 0).toString(16).padStart(
|
|
504
|
+
static toHex(e, s) {
|
|
505
|
+
return (e >>> 0).toString(16).padStart(s, "0");
|
|
506
506
|
}
|
|
507
507
|
}
|
|
508
|
-
class
|
|
508
|
+
class O {
|
|
509
509
|
static INITIAL_CAPACITY = 256;
|
|
510
510
|
buffer;
|
|
511
511
|
dataView;
|
|
512
512
|
length = 0;
|
|
513
513
|
constructor() {
|
|
514
|
-
this.buffer = new Uint8Array(
|
|
514
|
+
this.buffer = new Uint8Array(O.INITIAL_CAPACITY), this.dataView = new DataView(this.buffer.buffer);
|
|
515
515
|
}
|
|
516
516
|
ensureCapacity(e) {
|
|
517
|
-
const
|
|
518
|
-
if (
|
|
517
|
+
const s = this.length + e;
|
|
518
|
+
if (s <= this.buffer.length)
|
|
519
519
|
return;
|
|
520
520
|
let r = this.buffer.length;
|
|
521
|
-
for (; r <
|
|
521
|
+
for (; r < s; )
|
|
522
522
|
r *= 2;
|
|
523
|
-
const
|
|
524
|
-
|
|
523
|
+
const n = new Uint8Array(r);
|
|
524
|
+
n.set(this.buffer.subarray(0, this.length)), this.buffer = n, this.dataView = new DataView(this.buffer.buffer);
|
|
525
525
|
}
|
|
526
526
|
writeByte(e) {
|
|
527
527
|
this.ensureCapacity(1), this.buffer[this.length++] = e & 255;
|
|
@@ -548,10 +548,10 @@ class D {
|
|
|
548
548
|
this.ensureCapacity(8), this.dataView.setBigUint64(this.length, e, !0), this.length += 8;
|
|
549
549
|
}
|
|
550
550
|
writeVarUInt(e) {
|
|
551
|
-
let
|
|
552
|
-
for (;
|
|
553
|
-
this.ensureCapacity(1), this.buffer[this.length++] =
|
|
554
|
-
this.ensureCapacity(1), this.buffer[this.length++] =
|
|
551
|
+
let s = e >>> 0;
|
|
552
|
+
for (; s >= 128; )
|
|
553
|
+
this.ensureCapacity(1), this.buffer[this.length++] = s & 127 | 128, s >>>= 7;
|
|
554
|
+
this.ensureCapacity(1), this.buffer[this.length++] = s & 127;
|
|
555
555
|
}
|
|
556
556
|
toUint8Array() {
|
|
557
557
|
return this.buffer.slice(0, this.length);
|
|
@@ -577,24 +577,24 @@ function It(t) {
|
|
|
577
577
|
}
|
|
578
578
|
var N = /* @__PURE__ */ ((t) => (t[t.None = 0] = "None", t[t.WebSocket = 1] = "WebSocket", t[t.WebSocketProxy = 2] = "WebSocketProxy", t[t.WebTransport = 4] = "WebTransport", t[t.WebTransportProxy = 8] = "WebTransportProxy", t[t.Tcp = 16] = "Tcp", t[t.TcpProxy = 32] = "TcpProxy", t[t.Https = 64] = "Https", t[t.WebRTC = 128] = "WebRTC", t[t.TcpTls = 256] = "TcpTls", t[t.Udp = 512] = "Udp", t[t.UdpDtls = 1024] = "UdpDtls", t))(N || {}), V = /* @__PURE__ */ ((t) => (t[t.NONE = 0] = "NONE", t[t.CONSTANT_GROUP_BITS = 15] = "CONSTANT_GROUP_BITS", t[t.CONSTANT_GROUP_OFFSET = 16] = "CONSTANT_GROUP_OFFSET", t[t.GROUP_CORE = 65536] = "GROUP_CORE", t[t.CORE_AUTH_RESPONSE = 65537] = "CORE_AUTH_RESPONSE", t[t.CORE_AUTH_TICKET = 65538] = "CORE_AUTH_TICKET", t[t.CORE_GLOBAL_STATE = 65539] = "CORE_GLOBAL_STATE", t[t.CORE_ON_SERVER_STATUS_PING = 65540] = "CORE_ON_SERVER_STATUS_PING", t[t.CORE_ON_USER_JOINED = 65541] = "CORE_ON_USER_JOINED", t[t.CORE_ON_USER_LEFT = 65542] = "CORE_ON_USER_LEFT", t[t.CORE_ON_CLIENT_JOINED = 65543] = "CORE_ON_CLIENT_JOINED", t[t.CORE_ON_CLIENT_LEFT = 65544] = "CORE_ON_CLIENT_LEFT", t[t.CORE_ON_SERVER_STARTED = 65545] = "CORE_ON_SERVER_STARTED", t[t.CORE_ON_SERVER_STOPPED = 65546] = "CORE_ON_SERVER_STOPPED", t[t.CORE_ON_SERVER_STOPPING = 65547] = "CORE_ON_SERVER_STOPPING", t[t.CORE_ON_CLIENT_READY = 65548] = "CORE_ON_CLIENT_READY", t[t.CORE_CLIENT_READY = 65549] = "CORE_CLIENT_READY", t[t.CORE_SERVER_INIT = 65550] = "CORE_SERVER_INIT", t[t.CORE_ON_PLUGIN_RELOADED = 65551] = "CORE_ON_PLUGIN_RELOADED", t[t.CORE_SERVER_START = 65552] = "CORE_SERVER_START", t[t.CORE_SERVER_STOP = 65553] = "CORE_SERVER_STOP", t[t.CORE_ON_HOSTED_SERVER_EXIT = 65554] = "CORE_ON_HOSTED_SERVER_EXIT", t[t.CORE_DYNAMIC_CONFIG = 65555] = "CORE_DYNAMIC_CONFIG", t[t.CORE_PROXY_RPC_AUTH_TICKET = 65556] = "CORE_PROXY_RPC_AUTH_TICKET", t[t.CORE_SERVER_INIT2 = 65557] = "CORE_SERVER_INIT2", t[t.CORE_UPDATE_CLIENT_CONTEXT = 65558] = "CORE_UPDATE_CLIENT_CONTEXT", t[t.CORE_BACKGROUND_WORK_ACTIVE = 65559] = "CORE_BACKGROUND_WORK_ACTIVE", t[t.CORE_WEBRTC_OFFER = 65566] = "CORE_WEBRTC_OFFER", t[t.CORE_WEBRTC_ANSWER = 65567] = "CORE_WEBRTC_ANSWER", t[t.CORE_WEBRTC_ICE_CANDIDATE = 65568] = "CORE_WEBRTC_ICE_CANDIDATE", t[t.CORE_WEBRTC_READY = 65569] = "CORE_WEBRTC_READY", t[t.CORE_WEBRTC_AUDIO_SEGMENT = 65570] = "CORE_WEBRTC_AUDIO_SEGMENT", t[t.CORE_WEBRTC_TRACK_MAP = 65571] = "CORE_WEBRTC_TRACK_MAP", t[t.CORE_WEBRTC_VIDEO_CAPTURE = 65572] = "CORE_WEBRTC_VIDEO_CAPTURE", t[t.CORE_RELAY_AGENT_AUTH = 65576] = "CORE_RELAY_AGENT_AUTH", t[t.CORE_RELAY_AGENT_AUTH_RESULT = 65577] = "CORE_RELAY_AGENT_AUTH_RESULT", t[t.CORE_RELAY_HEARTBEAT = 65578] = "CORE_RELAY_HEARTBEAT", t[t.CORE_RELAY_TCP_CONNECTION_OPENED = 65579] = "CORE_RELAY_TCP_CONNECTION_OPENED", t[t.CORE_RELAY_TCP_CONNECTION_CLOSED = 65580] = "CORE_RELAY_TCP_CONNECTION_CLOSED", t[t.CORE_RELAY_TCP_DATA = 65581] = "CORE_RELAY_TCP_DATA", t[t.CORE_RELAY_UDP_DATA = 65582] = "CORE_RELAY_UDP_DATA", t[t.CORE_RELAY_ADD_TUNNEL = 65583] = "CORE_RELAY_ADD_TUNNEL", t[t.CORE_RELAY_TUNNEL_ADDED = 65584] = "CORE_RELAY_TUNNEL_ADDED", t[t.CORE_RELAY_REMOVE_TUNNEL = 65585] = "CORE_RELAY_REMOVE_TUNNEL", t[t.GROUP_KEEPALIVE = 131072] = "GROUP_KEEPALIVE", t[t.KEEPALIVE_REQUEST = 131073] = "KEEPALIVE_REQUEST", t[t.KEEPALIVE_RESPONSE = 131074] = "KEEPALIVE_RESPONSE", t[t.GROUP_EVENTS = 262144] = "GROUP_EVENTS", t[t.EVENTS_PROFILE_UPDATE = 262145] = "EVENTS_PROFILE_UPDATE", t[t.EVENTS_CHANNEL_COMPLETE = 262146] = "EVENTS_CHANNEL_COMPLETE", t[t.EVENTS_SPEECH_PLAYBACK_COMPLETE = 262147] = "EVENTS_SPEECH_PLAYBACK_COMPLETE", t[t.GROUP_ANALYTICS = 524288] = "GROUP_ANALYTICS", t[t.ANALYTICS_LOGS = 524289] = "ANALYTICS_LOGS", t[t.ANALYTICS_EVENTS = 524290] = "ANALYTICS_EVENTS", t[t.ANALYTICS_USAGES = 524291] = "ANALYTICS_USAGES", t[t.ANALYTICS_USAGE = 524292] = "ANALYTICS_USAGE", t[t.ANALYTICS_SPECIAL_LOG = 524293] = "ANALYTICS_SPECIAL_LOG", t[t.ANALYTICS_PROCESSING_UPDATE = 524294] = "ANALYTICS_PROCESSING_UPDATE", t[t.ANALYTICS_REACTIVE_PROCESSING_UPDATE = 524295] = "ANALYTICS_REACTIVE_PROCESSING_UPDATE", t[t.ANALYTICS_IKON_PROXY_SERVER_STATS = 524296] = "ANALYTICS_IKON_PROXY_SERVER_STATS", t[t.ANALYTICS_IKON_RELAY_SERVER_STATS = 524297] = "ANALYTICS_IKON_RELAY_SERVER_STATS", t[t.ANALYTICS_IKON_TURN_SERVER_STATS = 524298] = "ANALYTICS_IKON_TURN_SERVER_STATS", t[t.GROUP_ACTIONS = 1048576] = "GROUP_ACTIONS", t[t.ACTION_CALL = 1048577] = "ACTION_CALL", t[t.ACTION_ACTIVE = 1048578] = "ACTION_ACTIVE", t[t.ACTION_TEXT_OUTPUT = 1048579] = "ACTION_TEXT_OUTPUT", t[t.ACTION_TEXT_OUTPUT_DELTA = 1048580] = "ACTION_TEXT_OUTPUT_DELTA", t[t.ACTION_TEXT_OUTPUT_DELTA_FULL = 1048581] = "ACTION_TEXT_OUTPUT_DELTA_FULL", t[t.ACTION_SET_STATE = 1048582] = "ACTION_SET_STATE", t[t.ACTION_TAP = 1048583] = "ACTION_TAP", t[t.ACTION_PAN = 1048584] = "ACTION_PAN", t[t.ACTION_ZOOM = 1048585] = "ACTION_ZOOM", t[t.ACTION_FILE_UPLOAD_BEGIN = 1048586] = "ACTION_FILE_UPLOAD_BEGIN", t[t.ACTION_FILE_UPLOAD_DATA = 1048587] = "ACTION_FILE_UPLOAD_DATA", t[t.ACTION_FILE_UPLOAD_ACK = 1048588] = "ACTION_FILE_UPLOAD_ACK", t[t.ACTION_FILE_UPLOAD_END = 1048589] = "ACTION_FILE_UPLOAD_END", t[t.ACTION_FILE_UPLOAD_RESULT = 1048590] = "ACTION_FILE_UPLOAD_RESULT", t[t.ACTION_OPEN_CHANNEL = 1048591] = "ACTION_OPEN_CHANNEL", t[t.ACTION_OPEN_EXTERNAL_URL = 1048592] = "ACTION_OPEN_EXTERNAL_URL", t[t.ACTION_UI_OPEN_VIEW = 1048593] = "ACTION_UI_OPEN_VIEW", t[t.ACTION_UI_CLOSE_VIEW = 1048594] = "ACTION_UI_CLOSE_VIEW", t[t.ACTION_UI_BLOCKING_BEGIN = 1048595] = "ACTION_UI_BLOCKING_BEGIN", t[t.ACTION_UI_BLOCKING_END = 1048596] = "ACTION_UI_BLOCKING_END", t[t.ACTION_UI_UPDATE_TEXT_DELTA = 1048597] = "ACTION_UI_UPDATE_TEXT_DELTA", t[t.ACTION_UI_DELETE_CONTAINER = 1048598] = "ACTION_UI_DELETE_CONTAINER", t[t.ACTION_UPDATE_GFX_SHADER = 1048599] = "ACTION_UPDATE_GFX_SHADER", t[t.ACTION_FUNCTION_REGISTER = 1048600] = "ACTION_FUNCTION_REGISTER", t[t.ACTION_FUNCTION_CALL = 1048601] = "ACTION_FUNCTION_CALL", t[t.ACTION_FUNCTION_RESULT = 1048602] = "ACTION_FUNCTION_RESULT", t[t.ACTION_GENERATE_ANSWER = 1048603] = "ACTION_GENERATE_ANSWER", t[t.ACTION_REGENERATE_ANSWER = 1048604] = "ACTION_REGENERATE_ANSWER", t[t.ACTION_CLEAR_CHAT_MESSAGE_HISTORY = 1048605] = "ACTION_CLEAR_CHAT_MESSAGE_HISTORY", t[t.ACTION_CLEAR_STATE = 1048606] = "ACTION_CLEAR_STATE", t[t.ACTION_RELOAD_CHANNELS = 1048607] = "ACTION_RELOAD_CHANNELS", t[t.ACTION_RELOAD_PROFILE = 1048608] = "ACTION_RELOAD_PROFILE", t[t.ACTION_CLASSIFICATION_RESULT = 1048609] = "ACTION_CLASSIFICATION_RESULT", t[t.ACTION_AUDIO_STOP = 1048610] = "ACTION_AUDIO_STOP", t[t.ACTION_CALL_TEXT = 1048611] = "ACTION_CALL_TEXT", t[t.ACTION_RELOAD_APPLICATION = 1048612] = "ACTION_RELOAD_APPLICATION", t[t.ACTION_CANCEL_GENERATION = 1048613] = "ACTION_CANCEL_GENERATION", t[t.ACTION_UI_SET_CONTAINER_STABLE = 1048614] = "ACTION_UI_SET_CONTAINER_STABLE", t[t.ACTION_SPEECH_RECOGNIZED = 1048615] = "ACTION_SPEECH_RECOGNIZED", t[t.ACTION_CALL_RESULT = 1048616] = "ACTION_CALL_RESULT", t[t.ACTION_RELOAD_PROVIDER = 1048617] = "ACTION_RELOAD_PROVIDER", t[t.ACTION_DOWNLOAD = 1048618] = "ACTION_DOWNLOAD", t[t.ACTION_SCROLL_TO_CONTAINER = 1048619] = "ACTION_SCROLL_TO_CONTAINER", t[t.ACTION_UI_CLEAR_STREAM = 1048620] = "ACTION_UI_CLEAR_STREAM", t[t.ACTION_PLAY_SOUND = 1048621] = "ACTION_PLAY_SOUND", t[t.ACTION_ENTER_FULLSCREEN = 1048622] = "ACTION_ENTER_FULLSCREEN", t[t.ACTION_STOP_SOUND = 1048623] = "ACTION_STOP_SOUND", t[t.ACTION_START_RECORDING = 1048624] = "ACTION_START_RECORDING", t[t.ACTION_STOP_RECORDING = 1048625] = "ACTION_STOP_RECORDING", t[t.ACTION_FUNCTION_ENUMERATION_ITEM = 1048627] = "ACTION_FUNCTION_ENUMERATION_ITEM", t[t.ACTION_FUNCTION_ENUMERATION_END = 1048628] = "ACTION_FUNCTION_ENUMERATION_END", t[t.ACTION_FUNCTION_CANCEL = 1048629] = "ACTION_FUNCTION_CANCEL", t[t.ACTION_FUNCTION_DISPOSE = 1048630] = "ACTION_FUNCTION_DISPOSE", t[t.ACTION_FUNCTION_ERROR = 1048631] = "ACTION_FUNCTION_ERROR", t[t.ACTION_FUNCTION_ACK = 1048632] = "ACTION_FUNCTION_ACK", t[t.ACTION_FUNCTION_AWAITING_APPROVAL = 1048633] = "ACTION_FUNCTION_AWAITING_APPROVAL", t[t.ACTION_FUNCTION_APPROVAL_REQUIRED = 1048634] = "ACTION_FUNCTION_APPROVAL_REQUIRED", t[t.ACTION_FUNCTION_APPROVAL_RESPONSE = 1048635] = "ACTION_FUNCTION_APPROVAL_RESPONSE", t[t.UI_UPDATE_ACK = 1048636] = "UI_UPDATE_ACK", t[t.ACTION_CALL2 = 1048637] = "ACTION_CALL2", t[t.ACTION_FUNCTION_REGISTER_BATCH = 1048638] = "ACTION_FUNCTION_REGISTER_BATCH", t[t.ACTION_TRIGGER_GIT_PULL = 1048639] = "ACTION_TRIGGER_GIT_PULL", t[t.ACTION_FILE_UPLOAD_CALLBACK = 1048640] = "ACTION_FILE_UPLOAD_CALLBACK", t[t.ACTION_CUSTOM_USER_MESSAGE = 1048641] = "ACTION_CUSTOM_USER_MESSAGE", t[t.ACTION_URL_CHANGED = 1048642] = "ACTION_URL_CHANGED", t[t.ACTION_FILE_UPLOAD_PRE_START2 = 1048643] = "ACTION_FILE_UPLOAD_PRE_START2", t[t.ACTION_FILE_UPLOAD_PRE_START_RESPONSE2 = 1048644] = "ACTION_FILE_UPLOAD_PRE_START_RESPONSE2", t[t.ACTION_FILE_UPLOAD_START2 = 1048645] = "ACTION_FILE_UPLOAD_START2", t[t.ACTION_FILE_UPLOAD_START_RESPONSE2 = 1048646] = "ACTION_FILE_UPLOAD_START_RESPONSE2", t[t.ACTION_FILE_UPLOAD_DATA2 = 1048647] = "ACTION_FILE_UPLOAD_DATA2", t[t.ACTION_FILE_UPLOAD_ACK2 = 1048648] = "ACTION_FILE_UPLOAD_ACK2", t[t.ACTION_FILE_UPLOAD_END2 = 1048649] = "ACTION_FILE_UPLOAD_END2", t[t.ACTION_FILE_UPLOAD_COMPLETE2 = 1048650] = "ACTION_FILE_UPLOAD_COMPLETE2", t[t.ACTION_FUNCTION_ENUMERATION_ITEM_BATCH = 1048651] = "ACTION_FUNCTION_ENUMERATION_ITEM_BATCH", t[t.ACTION_CALL_ACK = 1048652] = "ACTION_CALL_ACK", t[t.GROUP_UI = 2097152] = "GROUP_UI", t[t.UI_STREAM_BEGIN = 2097153] = "UI_STREAM_BEGIN", t[t.UI_STREAM_END = 2097154] = "UI_STREAM_END", t[t.UI_CONTAINER_BEGIN = 2097155] = "UI_CONTAINER_BEGIN", t[t.UI_CONTAINER_END = 2097156] = "UI_CONTAINER_END", t[t.UI_SECTION_BEGIN = 2097157] = "UI_SECTION_BEGIN", t[t.UI_SECTION_END = 2097158] = "UI_SECTION_END", t[t.UI_LIST_BEGIN = 2097159] = "UI_LIST_BEGIN", t[t.UI_LIST_ITEM = 2097160] = "UI_LIST_ITEM", t[t.UI_LIST_END = 2097161] = "UI_LIST_END", t[t.UI_TEXT = 2097162] = "UI_TEXT", t[t.UI_HEADER = 2097163] = "UI_HEADER", t[t.UI_SEPARATOR = 2097164] = "UI_SEPARATOR", t[t.UI_BUTTON = 2097165] = "UI_BUTTON", t[t.UI_ICON_BUTTON = 2097166] = "UI_ICON_BUTTON", t[t.UI_IMAGE = 2097167] = "UI_IMAGE", t[t.UI_FILE = 2097168] = "UI_FILE", t[t.UI_BADGE = 2097169] = "UI_BADGE", t[t.UI_CONTENT_LINK = 2097170] = "UI_CONTENT_LINK", t[t.UI_MAP = 2097171] = "UI_MAP", t[t.UI_VEGA_CHART = 2097172] = "UI_VEGA_CHART", t[t.UI_ICON = 2097173] = "UI_ICON", t[t.UI_FILE_UPLOAD_SECTION_BEGIN = 2097174] = "UI_FILE_UPLOAD_SECTION_BEGIN", t[t.UI_FILE_UPLOAD_SECTION_END = 2097175] = "UI_FILE_UPLOAD_SECTION_END", t[t.UI_MATERIAL_SYMBOL = 2097176] = "UI_MATERIAL_SYMBOL", t[t.UI_BUTTON_BEGIN = 2097177] = "UI_BUTTON_BEGIN", t[t.UI_BUTTON_END = 2097178] = "UI_BUTTON_END", t[t.UI_CONTAINER_DELETE = 2097179] = "UI_CONTAINER_DELETE", t[t.UI_INPUT_TEXT = 2097180] = "UI_INPUT_TEXT", t[t.UI_PROGRESS_BAR = 2097181] = "UI_PROGRESS_BAR", t[t.UI_UPDATE_BEGIN = 2097182] = "UI_UPDATE_BEGIN", t[t.UI_UPDATE_END = 2097183] = "UI_UPDATE_END", t[t.UI_AUTOCOMPLETE = 2097184] = "UI_AUTOCOMPLETE", t[t.UI_CHECKBOX = 2097185] = "UI_CHECKBOX", t[t.UI_QS = 2097186] = "UI_QS", t[t.UI_ELEMENT = 2097187] = "UI_ELEMENT", t[t.UI_STYLES = 2097188] = "UI_STYLES", t[t.UI_SVG = 2097189] = "UI_SVG", t[t.UI_UPDATE = 2097190] = "UI_UPDATE", t[t.UI_INIT = 2097191] = "UI_INIT", t[t.UI_STYLES_BATCH = 2097192] = "UI_STYLES_BATCH", t[t.UI_STYLES_DELETE = 2097193] = "UI_STYLES_DELETE", t[t.GROUP_COMMON = 4128768] = "GROUP_COMMON", t[t.GROUP_AUDIO = 4194304] = "GROUP_AUDIO", t[t.AUDIO_STREAM_BEGIN = 4194305] = "AUDIO_STREAM_BEGIN", t[t.AUDIO_STREAM_END = 4194306] = "AUDIO_STREAM_END", t[t.AUDIO_FRAME = 4194307] = "AUDIO_FRAME", t[t.AUDIO_FRAME_VOLUME = 4194308] = "AUDIO_FRAME_VOLUME", t[t.AUDIO_FRAME2 = 4194309] = "AUDIO_FRAME2", t[t.AUDIO_SHAPE_FRAME = 4194310] = "AUDIO_SHAPE_FRAME", t[t.GROUP_VIDEO = 8388608] = "GROUP_VIDEO", t[t.VIDEO_STREAM_BEGIN = 8388609] = "VIDEO_STREAM_BEGIN", t[t.VIDEO_STREAM_END = 8388610] = "VIDEO_STREAM_END", t[t.VIDEO_FRAME = 8388611] = "VIDEO_FRAME", t[t.VIDEO_REQUEST_IDR_FRAME = 8388612] = "VIDEO_REQUEST_IDR_FRAME", t[t.VIDEO_INVALIDATE_FRAME = 8388613] = "VIDEO_INVALIDATE_FRAME", t[t.GROUP_TRACKING = 16777216] = "GROUP_TRACKING", t[t.TRACKING_STREAM_BEGIN = 16777217] = "TRACKING_STREAM_BEGIN", t[t.TRACKING_STREAM_END = 16777218] = "TRACKING_STREAM_END", t[t.TRACKING_FRAME = 16777219] = "TRACKING_FRAME", t[t.GROUP_SCENE = 33554432] = "GROUP_SCENE", t[t.SCENE_MESH = 33554433] = "SCENE_MESH", t[t.SCENE_ARRAY = 33554434] = "SCENE_ARRAY", t[t.GROUP_ALL = 67043328] = "GROUP_ALL", t[t.GROUP_APP_LOCAL = 1073741824] = "GROUP_APP_LOCAL", t[t.CONSTANT_GROUP_MASK = 2147418112] = "CONSTANT_GROUP_MASK", t))(V || {});
|
|
579
579
|
const et = 1, At = 131074;
|
|
580
|
-
function
|
|
580
|
+
function st(t) {
|
|
581
581
|
return {};
|
|
582
582
|
}
|
|
583
583
|
function ut(t) {
|
|
584
584
|
return new G(et).finish();
|
|
585
585
|
}
|
|
586
|
-
function rt(t, e,
|
|
586
|
+
function rt(t, e, s) {
|
|
587
587
|
const r = ut();
|
|
588
|
-
return
|
|
588
|
+
return lt(At, r, et, e);
|
|
589
589
|
}
|
|
590
|
-
class
|
|
591
|
-
constructor(e,
|
|
592
|
-
super(e), this.cause =
|
|
590
|
+
class nt extends Error {
|
|
591
|
+
constructor(e, s) {
|
|
592
|
+
super(e), this.cause = s, this.name = "ConnectionError";
|
|
593
593
|
}
|
|
594
594
|
}
|
|
595
|
-
class y extends
|
|
596
|
-
constructor(e,
|
|
597
|
-
super(e,
|
|
595
|
+
class y extends nt {
|
|
596
|
+
constructor(e, s) {
|
|
597
|
+
super(e, s), this.name = "TransportError";
|
|
598
598
|
}
|
|
599
599
|
}
|
|
600
600
|
class q extends y {
|
|
@@ -602,27 +602,27 @@ class q extends y {
|
|
|
602
602
|
super(`No keepalive received within ${e}ms`), this.name = "KeepaliveTimeoutError";
|
|
603
603
|
}
|
|
604
604
|
}
|
|
605
|
-
class Z extends
|
|
605
|
+
class Z extends nt {
|
|
606
606
|
constructor(e) {
|
|
607
607
|
super(`Maximum reconnection attempts (${e}) exceeded`), this.name = "MaxRetriesExceededError";
|
|
608
608
|
}
|
|
609
609
|
}
|
|
610
|
-
function
|
|
611
|
-
return new Promise((
|
|
612
|
-
const
|
|
610
|
+
function ft(t, e) {
|
|
611
|
+
return new Promise((s, r) => {
|
|
612
|
+
const n = () => {
|
|
613
613
|
clearTimeout(i), r(new DOMException("Aborted", "AbortError"));
|
|
614
614
|
}, i = setTimeout(() => {
|
|
615
|
-
e?.removeEventListener("abort",
|
|
615
|
+
e?.removeEventListener("abort", n), s();
|
|
616
616
|
}, t);
|
|
617
617
|
if (e?.aborted) {
|
|
618
618
|
clearTimeout(i), r(new DOMException("Aborted", "AbortError"));
|
|
619
619
|
return;
|
|
620
620
|
}
|
|
621
|
-
e?.addEventListener("abort",
|
|
621
|
+
e?.addEventListener("abort", n, { once: !0 });
|
|
622
622
|
});
|
|
623
623
|
}
|
|
624
|
-
let
|
|
625
|
-
const
|
|
624
|
+
let Ct = 1;
|
|
625
|
+
const Nt = /* @__PURE__ */ new Map(), Rt = {
|
|
626
626
|
0: "DEBUG",
|
|
627
627
|
1: "INFO",
|
|
628
628
|
2: "WARN",
|
|
@@ -632,54 +632,54 @@ const ft = /* @__PURE__ */ new Map(), Rt = {
|
|
|
632
632
|
function Ut(t, e) {
|
|
633
633
|
return `[${t}] ${e}`;
|
|
634
634
|
}
|
|
635
|
-
function k(t, e,
|
|
636
|
-
const
|
|
637
|
-
timestamp:
|
|
635
|
+
function k(t, e, s, r) {
|
|
636
|
+
const n = (/* @__PURE__ */ new Date()).toISOString(), i = Rt[t], a = {
|
|
637
|
+
timestamp: n,
|
|
638
638
|
level: t,
|
|
639
639
|
levelName: i,
|
|
640
640
|
component: e,
|
|
641
|
-
message:
|
|
641
|
+
message: s,
|
|
642
642
|
args: r
|
|
643
643
|
};
|
|
644
|
-
for (const [
|
|
645
|
-
const
|
|
646
|
-
if (t >=
|
|
644
|
+
for (const [o, l] of Nt) {
|
|
645
|
+
const I = l?.minLevel ?? 2;
|
|
646
|
+
if (t >= I)
|
|
647
647
|
try {
|
|
648
|
-
a
|
|
648
|
+
o(a);
|
|
649
649
|
} catch {
|
|
650
650
|
}
|
|
651
651
|
}
|
|
652
|
-
if (
|
|
653
|
-
const
|
|
652
|
+
if (Ct <= t) {
|
|
653
|
+
const o = Ut(e, s);
|
|
654
654
|
switch (t) {
|
|
655
655
|
case 0:
|
|
656
|
-
console.debug(
|
|
656
|
+
console.debug(o, ...r);
|
|
657
657
|
break;
|
|
658
658
|
case 1:
|
|
659
|
-
console.info(
|
|
659
|
+
console.info(o, ...r);
|
|
660
660
|
break;
|
|
661
661
|
case 2:
|
|
662
|
-
console.warn(
|
|
662
|
+
console.warn(o, ...r);
|
|
663
663
|
break;
|
|
664
664
|
case 3:
|
|
665
|
-
console.error(
|
|
665
|
+
console.error(o, ...r);
|
|
666
666
|
break;
|
|
667
667
|
}
|
|
668
668
|
}
|
|
669
669
|
}
|
|
670
670
|
function p(t) {
|
|
671
671
|
return {
|
|
672
|
-
debug(e, ...
|
|
673
|
-
k(0, t, e,
|
|
672
|
+
debug(e, ...s) {
|
|
673
|
+
k(0, t, e, s);
|
|
674
674
|
},
|
|
675
|
-
info(e, ...
|
|
676
|
-
k(1, t, e,
|
|
675
|
+
info(e, ...s) {
|
|
676
|
+
k(1, t, e, s);
|
|
677
677
|
},
|
|
678
|
-
warn(e, ...
|
|
679
|
-
k(2, t, e,
|
|
678
|
+
warn(e, ...s) {
|
|
679
|
+
k(2, t, e, s);
|
|
680
680
|
},
|
|
681
|
-
error(e, ...
|
|
682
|
-
k(3, t, e,
|
|
681
|
+
error(e, ...s) {
|
|
682
|
+
k(3, t, e, s);
|
|
683
683
|
}
|
|
684
684
|
};
|
|
685
685
|
}
|
|
@@ -687,72 +687,82 @@ const yt = "ikon-retry";
|
|
|
687
687
|
function St(t, e) {
|
|
688
688
|
if (typeof window > "u")
|
|
689
689
|
return null;
|
|
690
|
-
const
|
|
690
|
+
const s = new URLSearchParams(window.location.search), r = s.get(t);
|
|
691
691
|
if (r !== null)
|
|
692
692
|
return r;
|
|
693
|
-
const
|
|
694
|
-
return
|
|
693
|
+
const n = s.get(t.replace(/-/g, "_"));
|
|
694
|
+
return n !== null ? n : null;
|
|
695
695
|
}
|
|
696
696
|
function wt(t, e) {
|
|
697
|
-
const
|
|
698
|
-
return
|
|
697
|
+
const s = St(t);
|
|
698
|
+
return s === "true" ? !0 : s === "false" ? !1 : null;
|
|
699
699
|
}
|
|
700
|
-
function
|
|
700
|
+
function gt() {
|
|
701
701
|
return wt(yt) !== !1;
|
|
702
702
|
}
|
|
703
|
-
const
|
|
703
|
+
const M = p("WebSocketTransport"), Lt = 1e4;
|
|
704
704
|
class Pt {
|
|
705
705
|
ws = null;
|
|
706
706
|
keepaliveTimeout = null;
|
|
707
707
|
isClosed = !1;
|
|
708
708
|
// Pre-allocated keepalive response message to avoid allocation per keepalive
|
|
709
709
|
keepaliveResponseMessage = null;
|
|
710
|
+
// Released on the first server-originated message; gates connect() resolution.
|
|
711
|
+
// null once connect() has settled (success or failure) — see connect()/handleProtocolMessage.
|
|
712
|
+
firstMessageResolver = null;
|
|
710
713
|
keepaliveTimeoutMs;
|
|
711
714
|
connectionTimeoutMs;
|
|
712
715
|
callbacks;
|
|
713
716
|
sessionId;
|
|
714
717
|
constructor(e) {
|
|
715
|
-
this.callbacks = e.callbacks, this.sessionId = e.sessionId, this.keepaliveTimeoutMs = e.keepaliveTimeoutMs, this.connectionTimeoutMs = e.connectionTimeoutMs ??
|
|
718
|
+
this.callbacks = e.callbacks, this.sessionId = e.sessionId, this.keepaliveTimeoutMs = e.keepaliveTimeoutMs, this.connectionTimeoutMs = e.connectionTimeoutMs ?? Lt;
|
|
716
719
|
}
|
|
717
720
|
get isConnected() {
|
|
718
721
|
return this.ws?.readyState === WebSocket.OPEN;
|
|
719
722
|
}
|
|
720
|
-
async connect(e,
|
|
723
|
+
async connect(e, s) {
|
|
721
724
|
this.isClosed = !1;
|
|
722
725
|
const r = Date.now();
|
|
723
|
-
return new Promise((
|
|
726
|
+
return new Promise((n, i) => {
|
|
724
727
|
try {
|
|
725
728
|
this.ws = new WebSocket(e), this.ws.binaryType = "arraybuffer";
|
|
726
|
-
} catch (
|
|
727
|
-
i(new y(`Failed to create WebSocket: ${
|
|
729
|
+
} catch (T) {
|
|
730
|
+
i(new y(`Failed to create WebSocket: ${T}`, T instanceof Error ? T : void 0));
|
|
728
731
|
return;
|
|
729
732
|
}
|
|
730
|
-
let
|
|
731
|
-
const
|
|
732
|
-
clearTimeout(
|
|
733
|
-
},
|
|
734
|
-
|
|
733
|
+
let a = !1, o = !1;
|
|
734
|
+
const l = () => {
|
|
735
|
+
clearTimeout(h), this.ws && (this.ws.onopen = null, this.ws.onerror = null, this.ws.onclose = null, this.ws.onmessage = null);
|
|
736
|
+
}, I = () => {
|
|
737
|
+
o || (o = !0, clearTimeout(h), this.firstMessageResolver = null, M.debug(`WebSocket connected in ${Date.now() - r}ms`), n());
|
|
738
|
+
}, E = (T) => {
|
|
739
|
+
o || (o = !0, this.firstMessageResolver = null, l(), i(T));
|
|
740
|
+
};
|
|
741
|
+
this.firstMessageResolver = I;
|
|
742
|
+
const h = setTimeout(() => {
|
|
743
|
+
this.ws?.close(), M.warn(`WebSocket connection timeout after ${this.connectionTimeoutMs}ms`), E(new y("WebSocket connection timeout"));
|
|
735
744
|
}, this.connectionTimeoutMs);
|
|
736
745
|
this.ws.onopen = () => {
|
|
737
|
-
|
|
746
|
+
a = !0, this.ws.send(s), this.resetKeepaliveTimeout();
|
|
738
747
|
}, this.ws.onerror = () => {
|
|
739
|
-
|
|
740
|
-
}, this.ws.onclose = (
|
|
741
|
-
if (this.clearKeepaliveTimeout(), !o
|
|
742
|
-
|
|
748
|
+
M.debug(`WebSocket connection failed after ${Date.now() - r}ms`), E(new y("WebSocket connection failed"));
|
|
749
|
+
}, this.ws.onclose = (T) => {
|
|
750
|
+
if (this.clearKeepaliveTimeout(), !o) {
|
|
751
|
+
const g = a ? "WebSocket closed before first server message" : "WebSocket connection closed before opening";
|
|
752
|
+
E(new y(g));
|
|
743
753
|
return;
|
|
744
754
|
}
|
|
745
755
|
if (this.isClosed)
|
|
746
756
|
return;
|
|
747
|
-
const
|
|
748
|
-
this.callbacks.onClose(
|
|
749
|
-
}, this.ws.onmessage = (
|
|
750
|
-
this.handleProtocolMessage(new Uint8Array(
|
|
757
|
+
const c = T.wasClean && (T.code === 1e3 || T.code === 1001), w = T.reason || `code=${T.code}`;
|
|
758
|
+
this.callbacks.onClose(w, c);
|
|
759
|
+
}, this.ws.onmessage = (T) => {
|
|
760
|
+
this.handleProtocolMessage(new Uint8Array(T.data));
|
|
751
761
|
};
|
|
752
762
|
});
|
|
753
763
|
}
|
|
754
764
|
send(e) {
|
|
755
|
-
this.ws?.readyState === WebSocket.OPEN ? this.ws.send(e) :
|
|
765
|
+
this.ws?.readyState === WebSocket.OPEN ? this.ws.send(e) : M.warn("Cannot send: WebSocket not connected");
|
|
756
766
|
}
|
|
757
767
|
close() {
|
|
758
768
|
this.isClosed = !0, this.clearKeepaliveTimeout(), this.ws && (this.ws.close(1e3, "Client closing"), this.ws = null);
|
|
@@ -761,29 +771,30 @@ class Pt {
|
|
|
761
771
|
* Get or create a cached keepalive response message.
|
|
762
772
|
*/
|
|
763
773
|
getKeepaliveResponse() {
|
|
764
|
-
return this.keepaliveResponseMessage || (this.keepaliveResponseMessage = rt(
|
|
774
|
+
return this.keepaliveResponseMessage || (this.keepaliveResponseMessage = rt(st(), this.sessionId)), this.keepaliveResponseMessage;
|
|
765
775
|
}
|
|
766
776
|
handleProtocolMessage(e) {
|
|
767
777
|
try {
|
|
768
|
-
|
|
778
|
+
const r = H(e).opcode;
|
|
779
|
+
if (this.firstMessageResolver && this.firstMessageResolver(), r === V.KEEPALIVE_REQUEST) {
|
|
769
780
|
this.send(this.getKeepaliveResponse()), this.resetKeepaliveTimeout();
|
|
770
781
|
return;
|
|
771
782
|
}
|
|
772
783
|
this.resetKeepaliveTimeout(), this.callbacks.onProtocolMessage(e);
|
|
773
|
-
} catch (
|
|
774
|
-
|
|
784
|
+
} catch (s) {
|
|
785
|
+
M.error("Failed to process protocol message:", s), this.callbacks.onError(s instanceof Error ? s : new Error(String(s)));
|
|
775
786
|
}
|
|
776
787
|
}
|
|
777
788
|
resetKeepaliveTimeout() {
|
|
778
789
|
this.clearKeepaliveTimeout(), this.keepaliveTimeout = setTimeout(() => {
|
|
779
|
-
|
|
790
|
+
M.error(`No keepalive received in ${this.keepaliveTimeoutMs}ms, closing connection`), this.callbacks.onError(new q(this.keepaliveTimeoutMs)), this.close();
|
|
780
791
|
}, this.keepaliveTimeoutMs);
|
|
781
792
|
}
|
|
782
793
|
clearKeepaliveTimeout() {
|
|
783
794
|
this.keepaliveTimeout && (clearTimeout(this.keepaliveTimeout), this.keepaliveTimeout = null);
|
|
784
795
|
}
|
|
785
796
|
}
|
|
786
|
-
const
|
|
797
|
+
const S = p("WebTransportTransport"), mt = 1e4, tt = 4, Dt = 65536;
|
|
787
798
|
function it() {
|
|
788
799
|
return typeof WebTransport < "u";
|
|
789
800
|
}
|
|
@@ -804,6 +815,10 @@ class Ot {
|
|
|
804
815
|
receiveDataViewBuffer = null;
|
|
805
816
|
// Pre-allocated keepalive response message
|
|
806
817
|
keepaliveResponseMessage = null;
|
|
818
|
+
// Released on the first server-originated message; gates connect() resolution.
|
|
819
|
+
// Both are nulled once connect() has settled — see connect()/handleProtocolMessage/handleClose.
|
|
820
|
+
firstMessageResolver = null;
|
|
821
|
+
firstMessageRejecter = null;
|
|
807
822
|
keepaliveTimeoutMs;
|
|
808
823
|
connectionTimeoutMs;
|
|
809
824
|
callbacks;
|
|
@@ -814,43 +829,61 @@ class Ot {
|
|
|
814
829
|
get isConnected() {
|
|
815
830
|
return this.transport !== null && this.writer !== null;
|
|
816
831
|
}
|
|
817
|
-
async connect(e,
|
|
832
|
+
async connect(e, s) {
|
|
818
833
|
if (!it())
|
|
819
834
|
throw new y("WebTransport is not supported in this browser");
|
|
820
835
|
this.isClosed = !1;
|
|
821
|
-
const r = Date.now()
|
|
836
|
+
const r = Date.now(), n = new Promise((i, a) => {
|
|
837
|
+
this.firstMessageResolver = i, this.firstMessageRejecter = a;
|
|
838
|
+
});
|
|
822
839
|
try {
|
|
823
840
|
this.transport = new WebTransport(e);
|
|
824
|
-
let
|
|
825
|
-
const
|
|
826
|
-
|
|
827
|
-
() =>
|
|
841
|
+
let i;
|
|
842
|
+
const a = new Promise((E, h) => {
|
|
843
|
+
i = setTimeout(
|
|
844
|
+
() => h(new y("WebTransport connection timeout")),
|
|
828
845
|
this.connectionTimeoutMs
|
|
829
846
|
);
|
|
830
847
|
});
|
|
831
848
|
try {
|
|
832
|
-
await Promise.race([this.transport.ready,
|
|
833
|
-
} catch (
|
|
834
|
-
throw
|
|
849
|
+
await Promise.race([this.transport.ready, a]);
|
|
850
|
+
} catch (E) {
|
|
851
|
+
throw E instanceof y && S.warn(`WebTransport connection timeout after ${this.connectionTimeoutMs}ms`), E;
|
|
852
|
+
} finally {
|
|
853
|
+
clearTimeout(i);
|
|
835
854
|
}
|
|
836
|
-
|
|
855
|
+
this.transport.closed.then(() => {
|
|
837
856
|
this.handleClose("Connection closed", !0);
|
|
838
|
-
}).catch((
|
|
839
|
-
|
|
840
|
-
}), this.stream = await this.transport.createBidirectionalStream(), this.reader = this.stream.readable.getReader(), this.writer = this.stream.writable.getWriter(), await this.writer.write(
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
const
|
|
844
|
-
|
|
857
|
+
}).catch((E) => {
|
|
858
|
+
S.error("WebTransport connection closed with error:", E), this.handleClose(E.message || "Connection error", !1);
|
|
859
|
+
}), this.stream = await this.transport.createBidirectionalStream(), this.reader = this.stream.readable.getReader(), this.writer = this.stream.writable.getWriter(), await this.writer.write(s), this.resetKeepaliveTimeout(), this.startReadLoop();
|
|
860
|
+
const o = Math.max(this.connectionTimeoutMs - (Date.now() - r), 1);
|
|
861
|
+
let l;
|
|
862
|
+
const I = new Promise((E, h) => {
|
|
863
|
+
l = setTimeout(
|
|
864
|
+
() => h(new y("WebTransport closed before first server message")),
|
|
865
|
+
o
|
|
866
|
+
);
|
|
867
|
+
});
|
|
868
|
+
try {
|
|
869
|
+
await Promise.race([n, I]);
|
|
870
|
+
} finally {
|
|
871
|
+
clearTimeout(l);
|
|
872
|
+
}
|
|
873
|
+
this.firstMessageResolver = null, this.firstMessageRejecter = null, S.info(`WebTransport connected in ${Date.now() - r}ms`);
|
|
874
|
+
} catch (i) {
|
|
875
|
+
this.firstMessageResolver = null, this.firstMessageRejecter = null, this.cleanup();
|
|
876
|
+
const a = Date.now() - r;
|
|
877
|
+
throw S.warn(`WebTransport connection failed after ${a}ms: ${i}`), new y(`Failed to connect WebTransport: ${i}`, i instanceof Error ? i : void 0);
|
|
845
878
|
}
|
|
846
879
|
}
|
|
847
880
|
send(e) {
|
|
848
881
|
if (!this.writer) {
|
|
849
|
-
|
|
882
|
+
S.warn("Cannot send: WebTransport not connected");
|
|
850
883
|
return;
|
|
851
884
|
}
|
|
852
|
-
this.writer.write(e).catch((
|
|
853
|
-
|
|
885
|
+
this.writer.write(e).catch((s) => {
|
|
886
|
+
S.error("Failed to send protocol message:", s), this.callbacks.onError(s instanceof Error ? s : new Error(String(s)));
|
|
854
887
|
});
|
|
855
888
|
}
|
|
856
889
|
close() {
|
|
@@ -864,14 +897,14 @@ class Ot {
|
|
|
864
897
|
this.readLoopActive = !0;
|
|
865
898
|
try {
|
|
866
899
|
for (; this.readLoopActive && this.reader; ) {
|
|
867
|
-
const { value: e, done:
|
|
868
|
-
if (
|
|
900
|
+
const { value: e, done: s } = await this.reader.read();
|
|
901
|
+
if (s)
|
|
869
902
|
break;
|
|
870
903
|
e && (this.appendToBuffer(e), this.processBufferedMessages());
|
|
871
904
|
}
|
|
872
905
|
this.readLoopActive && this.handleClose("Stream ended", !1);
|
|
873
906
|
} catch (e) {
|
|
874
|
-
this.readLoopActive && (
|
|
907
|
+
this.readLoopActive && (S.error("Read loop error:", e), this.callbacks.onError(e instanceof Error ? e : new Error(String(e))));
|
|
875
908
|
}
|
|
876
909
|
}
|
|
877
910
|
}
|
|
@@ -880,10 +913,10 @@ class Ot {
|
|
|
880
913
|
* Compacts when offset exceeds half capacity and data is sparse.
|
|
881
914
|
*/
|
|
882
915
|
appendToBuffer(e) {
|
|
883
|
-
const
|
|
916
|
+
const s = this.receiveBufferLength + e.length, r = this.receiveBufferOffset + this.receiveBufferLength;
|
|
884
917
|
if (r + e.length > this.receiveBuffer.length)
|
|
885
|
-
if (
|
|
886
|
-
const
|
|
918
|
+
if (s > this.receiveBuffer.length) {
|
|
919
|
+
const n = Math.max(s, this.receiveBuffer.length * 2), i = new Uint8Array(n);
|
|
887
920
|
i.set(this.receiveBuffer.subarray(this.receiveBufferOffset, r)), this.receiveBuffer = i, this.receiveBufferOffset = 0, this.receiveDataViewBuffer = null;
|
|
888
921
|
} else
|
|
889
922
|
this.receiveBuffer.copyWithin(0, this.receiveBufferOffset, r), this.receiveBufferOffset = 0;
|
|
@@ -900,7 +933,7 @@ class Ot {
|
|
|
900
933
|
* Get or create a cached keepalive response message.
|
|
901
934
|
*/
|
|
902
935
|
getKeepaliveResponse() {
|
|
903
|
-
return this.keepaliveResponseMessage || (this.keepaliveResponseMessage = rt(
|
|
936
|
+
return this.keepaliveResponseMessage || (this.keepaliveResponseMessage = rt(st(), this.sessionId)), this.keepaliveResponseMessage;
|
|
904
937
|
}
|
|
905
938
|
/**
|
|
906
939
|
* Process complete messages from the receive buffer.
|
|
@@ -910,15 +943,15 @@ class Ot {
|
|
|
910
943
|
processBufferedMessages() {
|
|
911
944
|
const e = this.getReceiveDataView();
|
|
912
945
|
for (; this.receiveBufferLength >= tt; ) {
|
|
913
|
-
const
|
|
914
|
-
if (
|
|
915
|
-
|
|
946
|
+
const s = e.getUint32(this.receiveBufferOffset, !0);
|
|
947
|
+
if (s < tt) {
|
|
948
|
+
S.error(`Invalid message length: ${s}`), this.callbacks.onError(new Error(`Invalid protocol message length: ${s}`)), this.receiveBufferOffset = 0, this.receiveBufferLength = 0;
|
|
916
949
|
return;
|
|
917
950
|
}
|
|
918
|
-
if (this.receiveBufferLength <
|
|
951
|
+
if (this.receiveBufferLength < s)
|
|
919
952
|
return;
|
|
920
|
-
const r = this.receiveBuffer.subarray(this.receiveBufferOffset, this.receiveBufferOffset +
|
|
921
|
-
this.receiveBufferOffset +=
|
|
953
|
+
const r = this.receiveBuffer.subarray(this.receiveBufferOffset, this.receiveBufferOffset + s);
|
|
954
|
+
this.receiveBufferOffset += s, this.receiveBufferLength -= s, this.handleProtocolMessage(r);
|
|
922
955
|
}
|
|
923
956
|
this.receiveBufferLength === 0 && (this.receiveBufferOffset = 0);
|
|
924
957
|
}
|
|
@@ -927,27 +960,34 @@ class Ot {
|
|
|
927
960
|
*/
|
|
928
961
|
handleProtocolMessage(e) {
|
|
929
962
|
try {
|
|
930
|
-
|
|
963
|
+
const r = H(e).opcode;
|
|
964
|
+
if (this.firstMessageResolver && this.firstMessageResolver(), r === V.KEEPALIVE_REQUEST) {
|
|
931
965
|
this.send(this.getKeepaliveResponse()), this.resetKeepaliveTimeout();
|
|
932
966
|
return;
|
|
933
967
|
}
|
|
934
968
|
this.resetKeepaliveTimeout(), this.callbacks.onProtocolMessage(e);
|
|
935
|
-
} catch (
|
|
936
|
-
|
|
969
|
+
} catch (s) {
|
|
970
|
+
S.error("Failed to process protocol message:", s), this.callbacks.onError(s instanceof Error ? s : new Error(String(s)));
|
|
937
971
|
}
|
|
938
972
|
}
|
|
939
973
|
/**
|
|
940
974
|
* Handle connection close.
|
|
941
975
|
*/
|
|
942
|
-
handleClose(e,
|
|
943
|
-
|
|
976
|
+
handleClose(e, s) {
|
|
977
|
+
if (!this.isClosed) {
|
|
978
|
+
if (this.isClosed = !0, this.clearKeepaliveTimeout(), this.readLoopActive = !1, this.cleanup(), this.firstMessageRejecter) {
|
|
979
|
+
this.firstMessageRejecter(new y(`WebTransport closed before first server message: ${e}`)), this.firstMessageResolver = null, this.firstMessageRejecter = null;
|
|
980
|
+
return;
|
|
981
|
+
}
|
|
982
|
+
this.callbacks.onClose(e, s);
|
|
983
|
+
}
|
|
944
984
|
}
|
|
945
985
|
/**
|
|
946
986
|
* Reset the keepalive timeout.
|
|
947
987
|
*/
|
|
948
988
|
resetKeepaliveTimeout() {
|
|
949
989
|
this.clearKeepaliveTimeout(), this.keepaliveTimeout = setTimeout(() => {
|
|
950
|
-
|
|
990
|
+
S.error(`No keepalive received in ${this.keepaliveTimeoutMs}ms, closing connection`), this.callbacks.onError(new q(this.keepaliveTimeoutMs)), this.close();
|
|
951
991
|
}, this.keepaliveTimeoutMs);
|
|
952
992
|
}
|
|
953
993
|
/**
|
|
@@ -970,7 +1010,7 @@ class Ot {
|
|
|
970
1010
|
}
|
|
971
1011
|
}
|
|
972
1012
|
const x = p("Channel");
|
|
973
|
-
class
|
|
1013
|
+
class Mt {
|
|
974
1014
|
state = "disconnected";
|
|
975
1015
|
transport = null;
|
|
976
1016
|
config;
|
|
@@ -1051,26 +1091,26 @@ class bt {
|
|
|
1051
1091
|
* Connect the transport to the entrypoint.
|
|
1052
1092
|
*/
|
|
1053
1093
|
async connectTransport() {
|
|
1054
|
-
const e = this.entrypoint,
|
|
1094
|
+
const e = this.entrypoint, s = {
|
|
1055
1095
|
sessionId: this.config.sessionId,
|
|
1056
1096
|
keepaliveTimeoutMs: this.config.keepaliveTimeoutMs,
|
|
1057
1097
|
connectionTimeoutMs: this.config.connectionTimeoutMs,
|
|
1058
1098
|
callbacks: {
|
|
1059
1099
|
onProtocolMessage: (r) => this.handleProtocolMessage(r),
|
|
1060
|
-
onClose: (r,
|
|
1100
|
+
onClose: (r, n) => this.handleClose(r, n),
|
|
1061
1101
|
onError: (r) => this.handleError(r)
|
|
1062
1102
|
}
|
|
1063
1103
|
};
|
|
1064
1104
|
switch (e.Type) {
|
|
1065
1105
|
case N.WebSocket:
|
|
1066
1106
|
case N.WebSocketProxy:
|
|
1067
|
-
this.transport = new Pt(
|
|
1107
|
+
this.transport = new Pt(s);
|
|
1068
1108
|
break;
|
|
1069
1109
|
case N.WebTransport:
|
|
1070
1110
|
case N.WebTransportProxy:
|
|
1071
1111
|
if (!it())
|
|
1072
1112
|
throw new Error("WebTransport is not supported in this browser");
|
|
1073
|
-
this.transport = new Ot(
|
|
1113
|
+
this.transport = new Ot(s);
|
|
1074
1114
|
break;
|
|
1075
1115
|
default:
|
|
1076
1116
|
throw new Error(`Unsupported entrypoint type: ${N[e.Type]}`);
|
|
@@ -1082,21 +1122,21 @@ class bt {
|
|
|
1082
1122
|
*/
|
|
1083
1123
|
handleProtocolMessage(e) {
|
|
1084
1124
|
try {
|
|
1085
|
-
const
|
|
1086
|
-
if (
|
|
1125
|
+
const s = e;
|
|
1126
|
+
if (Q(s) === V.CORE_ON_SERVER_STOPPING) {
|
|
1087
1127
|
x.debug("Received server stopping message"), this.setState("stopped"), this.transport?.close();
|
|
1088
1128
|
return;
|
|
1089
1129
|
}
|
|
1090
|
-
this.config.onProtocolMessage?.(
|
|
1091
|
-
} catch (
|
|
1092
|
-
x.error("Failed to handle protocol message:",
|
|
1130
|
+
this.config.onProtocolMessage?.(s);
|
|
1131
|
+
} catch (s) {
|
|
1132
|
+
x.error("Failed to handle protocol message:", s), this.config.onError?.(s instanceof Error ? s : new Error(String(s)));
|
|
1093
1133
|
}
|
|
1094
1134
|
}
|
|
1095
1135
|
/**
|
|
1096
1136
|
* Handle transport close.
|
|
1097
1137
|
*/
|
|
1098
|
-
handleClose(e,
|
|
1099
|
-
this.transport = null, this.config.onClose?.(e,
|
|
1138
|
+
handleClose(e, s) {
|
|
1139
|
+
this.transport = null, this.config.onClose?.(e, s);
|
|
1100
1140
|
}
|
|
1101
1141
|
/**
|
|
1102
1142
|
* Handle transport error.
|
|
@@ -1111,8 +1151,8 @@ class bt {
|
|
|
1111
1151
|
this.state !== e && (this.state = e, this.config.onStateChange?.(e));
|
|
1112
1152
|
}
|
|
1113
1153
|
}
|
|
1114
|
-
const
|
|
1115
|
-
class
|
|
1154
|
+
const A = p("ChannelManager"), bt = 5e3;
|
|
1155
|
+
class vt {
|
|
1116
1156
|
channels = /* @__PURE__ */ new Map();
|
|
1117
1157
|
// keyed by opcode group
|
|
1118
1158
|
activeType = null;
|
|
@@ -1122,6 +1162,7 @@ class Mt {
|
|
|
1122
1162
|
entrypoints = [];
|
|
1123
1163
|
abortController = null;
|
|
1124
1164
|
connectionTimeoutMs;
|
|
1165
|
+
stabilityTimer = null;
|
|
1125
1166
|
config;
|
|
1126
1167
|
constructor(e) {
|
|
1127
1168
|
this.config = e;
|
|
@@ -1141,10 +1182,10 @@ class Mt {
|
|
|
1141
1182
|
/**
|
|
1142
1183
|
* Connect to the server using the provided entrypoints.
|
|
1143
1184
|
*/
|
|
1144
|
-
async connect(e,
|
|
1185
|
+
async connect(e, s) {
|
|
1145
1186
|
if (this.state !== "idle" && this.state !== "offline")
|
|
1146
1187
|
throw new Error(`Cannot connect: already in state ${this.state}`);
|
|
1147
|
-
if (this.entrypoints = e, this.shouldReconnect = !0, this.reconnectAttempts = 0, this.abortController = new AbortController(),
|
|
1188
|
+
if (this.entrypoints = e, this.shouldReconnect = !0, this.reconnectAttempts = 0, this.abortController = new AbortController(), s?.retry) {
|
|
1148
1189
|
this.attemptReconnect();
|
|
1149
1190
|
return;
|
|
1150
1191
|
}
|
|
@@ -1161,20 +1202,20 @@ class Mt {
|
|
|
1161
1202
|
* The opcode group is extracted from the message automatically.
|
|
1162
1203
|
*/
|
|
1163
1204
|
sendProtocolMessage(e) {
|
|
1164
|
-
const
|
|
1165
|
-
for (const [r,
|
|
1166
|
-
if (r &
|
|
1167
|
-
|
|
1205
|
+
const s = F(e);
|
|
1206
|
+
for (const [r, n] of this.channels)
|
|
1207
|
+
if (r & s) {
|
|
1208
|
+
n.send(e);
|
|
1168
1209
|
return;
|
|
1169
1210
|
}
|
|
1170
|
-
this.state === "connected" &&
|
|
1211
|
+
this.state === "connected" && A.warn("No channel found for message");
|
|
1171
1212
|
}
|
|
1172
1213
|
/**
|
|
1173
1214
|
* Send a protocol message to all channels (for broadcast messages).
|
|
1174
1215
|
*/
|
|
1175
1216
|
sendToAll(e) {
|
|
1176
|
-
for (const
|
|
1177
|
-
|
|
1217
|
+
for (const s of this.channels.values())
|
|
1218
|
+
s.send(e);
|
|
1178
1219
|
}
|
|
1179
1220
|
/**
|
|
1180
1221
|
* Check health of all channels.
|
|
@@ -1195,9 +1236,9 @@ class Mt {
|
|
|
1195
1236
|
*/
|
|
1196
1237
|
triggerReconnect(e) {
|
|
1197
1238
|
if (this.state === "connected") {
|
|
1198
|
-
|
|
1199
|
-
for (const
|
|
1200
|
-
|
|
1239
|
+
A.debug(`Forcing reconnect: ${e}`);
|
|
1240
|
+
for (const s of this.channels.values())
|
|
1241
|
+
s.triggerReconnect(e);
|
|
1201
1242
|
}
|
|
1202
1243
|
}
|
|
1203
1244
|
/**
|
|
@@ -1206,43 +1247,43 @@ class Mt {
|
|
|
1206
1247
|
*/
|
|
1207
1248
|
async connectInternal(e = !1) {
|
|
1208
1249
|
this.setState("connecting");
|
|
1209
|
-
let
|
|
1250
|
+
let s = this.entrypoints;
|
|
1210
1251
|
if (this.config.webRtcEnabled) {
|
|
1211
|
-
|
|
1252
|
+
A.debug(`WebRTC enabled, filtering entrypoints (total: ${this.entrypoints.length})`);
|
|
1212
1253
|
for (const i of this.entrypoints)
|
|
1213
|
-
|
|
1214
|
-
|
|
1254
|
+
A.debug(` Entrypoint: type=${i.Type} fromServer=0x${i.OpcodeGroupsFromServer.toString(16)} toServer=0x${i.OpcodeGroupsToServer.toString(16)} uri=${i.Uri}`);
|
|
1255
|
+
s = this.entrypoints.filter((i) => i.Type === N.WebRTC ? (A.debug(` Filtered out WebRTC entrypoint (type=${i.Type})`), !1) : !0), A.debug(`After filtering: ${s.length} entrypoints remain for WS/WT channels`);
|
|
1215
1256
|
}
|
|
1216
|
-
const r = this.groupByType(
|
|
1257
|
+
const r = this.groupByType(s);
|
|
1217
1258
|
if (r.size === 0)
|
|
1218
1259
|
throw this.setState("offline"), new Error("No entrypoints available");
|
|
1219
|
-
let
|
|
1260
|
+
let n;
|
|
1220
1261
|
if (this.config.orderedEndpointTypes && this.config.orderedEndpointTypes.length > 0) {
|
|
1221
1262
|
const i = new Set(r.keys());
|
|
1222
|
-
|
|
1223
|
-
} else this.config.endpointSelector ?
|
|
1224
|
-
this.connectionTimeoutMs =
|
|
1225
|
-
for (const i of
|
|
1263
|
+
n = this.config.orderedEndpointTypes.filter((a) => i.has(a));
|
|
1264
|
+
} else this.config.endpointSelector ? n = this.config.endpointSelector.getOrderedTypes(r) : n = Array.from(r.keys());
|
|
1265
|
+
this.connectionTimeoutMs = n.length > 1 ? 5e3 : 1e4, A.debug(`Endpoint types to try: [${n.map((i) => N[i]).join(", ")}], transport timeout: ${this.connectionTimeoutMs}ms`);
|
|
1266
|
+
for (const i of n) {
|
|
1226
1267
|
if (!this.shouldReconnect)
|
|
1227
1268
|
return;
|
|
1228
|
-
const
|
|
1229
|
-
|
|
1269
|
+
const a = r.get(i), o = Date.now();
|
|
1270
|
+
A.debug(`Trying ${N[i]} (${a.length} channel(s))`);
|
|
1230
1271
|
try {
|
|
1231
|
-
await this.connectAllChannels(
|
|
1272
|
+
await this.connectAllChannels(a), this.config.endpointSelector?.rememberWorkingType(i), this.config.onRememberWorkingType?.(i), this.activeType = i, A.debug(`Connected via ${N[i]} in ${Date.now() - o}ms`), this.setState("connected"), this.startStabilityTimer();
|
|
1232
1273
|
return;
|
|
1233
|
-
} catch (
|
|
1234
|
-
|
|
1235
|
-
const
|
|
1236
|
-
if (this.disconnectAll(),
|
|
1274
|
+
} catch (l) {
|
|
1275
|
+
A.warn(`Failed to connect using ${N[i]} after ${Date.now() - o}ms: ${l instanceof Error ? l.message : l}`);
|
|
1276
|
+
const I = this.channels.size > 0;
|
|
1277
|
+
if (this.disconnectAll(), I && this.config.onRefreshEntrypoints)
|
|
1237
1278
|
try {
|
|
1238
|
-
|
|
1239
|
-
const
|
|
1240
|
-
this.entrypoints =
|
|
1241
|
-
const
|
|
1242
|
-
for (const [c,
|
|
1243
|
-
r.set(c,
|
|
1244
|
-
} catch (
|
|
1245
|
-
|
|
1279
|
+
A.info("Partial connection detected, refreshing entrypoints");
|
|
1280
|
+
const E = await this.config.onRefreshEntrypoints();
|
|
1281
|
+
this.entrypoints = E.entrypoints, this.config.sessionId = E.sessionId;
|
|
1282
|
+
const h = this.config.webRtcEnabled ? E.entrypoints.filter((c) => c.Type !== N.WebRTC) : E.entrypoints, T = this.groupByType(h);
|
|
1283
|
+
for (const [c, w] of T)
|
|
1284
|
+
r.set(c, w);
|
|
1285
|
+
} catch (E) {
|
|
1286
|
+
A.warn(`Failed to refresh entrypoints: ${E}`);
|
|
1246
1287
|
}
|
|
1247
1288
|
}
|
|
1248
1289
|
}
|
|
@@ -1254,20 +1295,20 @@ class Mt {
|
|
|
1254
1295
|
async connectAllChannels(e) {
|
|
1255
1296
|
if (e.length === 0)
|
|
1256
1297
|
throw new Error("No entrypoints to connect");
|
|
1257
|
-
const r = (await Promise.allSettled(e.map((
|
|
1298
|
+
const r = (await Promise.allSettled(e.map((n) => this.connectChannel(n)))).filter((n) => n.status === "rejected");
|
|
1258
1299
|
if (r.length > 0) {
|
|
1259
|
-
const
|
|
1260
|
-
const
|
|
1261
|
-
return
|
|
1300
|
+
const n = r.map((i) => {
|
|
1301
|
+
const a = i.reason;
|
|
1302
|
+
return a instanceof Error ? a.message : String(a);
|
|
1262
1303
|
});
|
|
1263
|
-
throw new Error(
|
|
1304
|
+
throw new Error(n.join(", "));
|
|
1264
1305
|
}
|
|
1265
1306
|
}
|
|
1266
1307
|
/**
|
|
1267
1308
|
* Connect a single channel.
|
|
1268
1309
|
*/
|
|
1269
1310
|
async connectChannel(e) {
|
|
1270
|
-
const
|
|
1311
|
+
const s = new Mt({
|
|
1271
1312
|
entrypoint: e,
|
|
1272
1313
|
sessionId: this.config.sessionId,
|
|
1273
1314
|
keepaliveTimeoutMs: this.config.keepaliveTimeoutMs,
|
|
@@ -1278,31 +1319,31 @@ class Mt {
|
|
|
1278
1319
|
onStateChange: (r) => {
|
|
1279
1320
|
this.handleChannelStateChange(e.OpcodeGroupsFromServer, r);
|
|
1280
1321
|
},
|
|
1281
|
-
onClose: (r,
|
|
1282
|
-
this.handleChannelClose(e.OpcodeGroupsFromServer, r,
|
|
1322
|
+
onClose: (r, n) => {
|
|
1323
|
+
this.handleChannelClose(e.OpcodeGroupsFromServer, r, n);
|
|
1283
1324
|
},
|
|
1284
1325
|
onError: (r) => {
|
|
1285
1326
|
this.config.onError?.(r);
|
|
1286
1327
|
}
|
|
1287
1328
|
});
|
|
1288
|
-
await
|
|
1329
|
+
await s.connect(), this.channels.set(e.OpcodeGroupsFromServer, s);
|
|
1289
1330
|
}
|
|
1290
1331
|
/**
|
|
1291
1332
|
* Group entrypoints by type.
|
|
1292
1333
|
*/
|
|
1293
1334
|
groupByType(e) {
|
|
1294
|
-
const
|
|
1335
|
+
const s = /* @__PURE__ */ new Map();
|
|
1295
1336
|
for (const r of e) {
|
|
1296
|
-
const
|
|
1297
|
-
|
|
1337
|
+
const n = s.get(r.Type) ?? [];
|
|
1338
|
+
n.push(r), s.set(r.Type, n);
|
|
1298
1339
|
}
|
|
1299
|
-
return
|
|
1340
|
+
return s;
|
|
1300
1341
|
}
|
|
1301
1342
|
/**
|
|
1302
1343
|
* Handle channel state change.
|
|
1303
1344
|
*/
|
|
1304
|
-
handleChannelStateChange(e,
|
|
1305
|
-
|
|
1345
|
+
handleChannelStateChange(e, s) {
|
|
1346
|
+
s === "stopped" && (this.shouldReconnect = !1, this.disconnectAll(), this.setState("stopped"));
|
|
1306
1347
|
}
|
|
1307
1348
|
/**
|
|
1308
1349
|
* Handle channel close.
|
|
@@ -1312,8 +1353,8 @@ class Mt {
|
|
|
1312
1353
|
* close — including a clean WebSocket code 1000 — just means this transport
|
|
1313
1354
|
* dropped, and we reconnect.
|
|
1314
1355
|
*/
|
|
1315
|
-
handleChannelClose(e,
|
|
1316
|
-
this.state === "idle" || this.state === "stopped" || this.state === "offline" || this.channels.has(e) && this.state === "connected" && (
|
|
1356
|
+
handleChannelClose(e, s, r) {
|
|
1357
|
+
this.state === "idle" || this.state === "stopped" || this.state === "offline" || this.channels.has(e) && this.state === "connected" && (A.warn("Channel closed unexpectedly, attempting reconnect"), this.disconnectAll(), this.attemptReconnect());
|
|
1317
1358
|
}
|
|
1318
1359
|
/**
|
|
1319
1360
|
* Attempt to reconnect with fixed-interval retry.
|
|
@@ -1321,15 +1362,15 @@ class Mt {
|
|
|
1321
1362
|
*/
|
|
1322
1363
|
async attemptReconnect() {
|
|
1323
1364
|
if (this.shouldReconnect) {
|
|
1324
|
-
if (!
|
|
1325
|
-
|
|
1365
|
+
if (!gt()) {
|
|
1366
|
+
A.warn("Retry disabled via ikon-retry=false, skipping reconnect"), this.setState("offline"), this.config.onError?.(new Z(0));
|
|
1326
1367
|
return;
|
|
1327
1368
|
}
|
|
1328
1369
|
if (this.reconnectAttempts >= this.config.maxReconnectAttempts) {
|
|
1329
|
-
|
|
1370
|
+
A.warn(`Max reconnect attempts (${this.config.maxReconnectAttempts}) reached`), this.setState("offline"), this.config.onError?.(new Z(this.config.maxReconnectAttempts));
|
|
1330
1371
|
return;
|
|
1331
1372
|
}
|
|
1332
|
-
if (this.setState("reconnecting"), this.reconnectAttempts++, this.reconnectAttempts > 1 ? (
|
|
1373
|
+
if (this.setState("reconnecting"), this.reconnectAttempts++, this.reconnectAttempts > 1 ? (A.info(`Reconnecting in ${this.config.reconnectBackoffMs}ms (attempt ${this.reconnectAttempts}/${this.config.maxReconnectAttempts})`), await ft(this.config.reconnectBackoffMs, this.abortController?.signal)) : A.info(`Reconnecting immediately (attempt ${this.reconnectAttempts}/${this.config.maxReconnectAttempts})`), !!this.shouldReconnect)
|
|
1333
1374
|
try {
|
|
1334
1375
|
await this.connectInternal(!0);
|
|
1335
1376
|
} catch {
|
|
@@ -1349,80 +1390,88 @@ class Mt {
|
|
|
1349
1390
|
* Update and notify state change.
|
|
1350
1391
|
*/
|
|
1351
1392
|
setState(e) {
|
|
1352
|
-
this.state !== e && (this.state = e, this.config.onStateChange?.(e));
|
|
1393
|
+
this.state !== e && (this.state === "connected" && e !== "connected" && this.clearStabilityTimer(), this.state = e, this.config.onStateChange?.(e));
|
|
1394
|
+
}
|
|
1395
|
+
startStabilityTimer() {
|
|
1396
|
+
this.clearStabilityTimer(), this.stabilityTimer = setTimeout(() => {
|
|
1397
|
+
this.stabilityTimer = null, this.state === "connected" && (this.reconnectAttempts = 0);
|
|
1398
|
+
}, bt);
|
|
1399
|
+
}
|
|
1400
|
+
clearStabilityTimer() {
|
|
1401
|
+
this.stabilityTimer && (clearTimeout(this.stabilityTimer), this.stabilityTimer = null);
|
|
1353
1402
|
}
|
|
1354
1403
|
}
|
|
1355
|
-
const at = p("ProtocolWorker"),
|
|
1404
|
+
const at = p("ProtocolWorker"), P = (t, e) => {
|
|
1356
1405
|
self.postMessage(t, e ?? []);
|
|
1357
1406
|
};
|
|
1358
|
-
let
|
|
1359
|
-
const
|
|
1360
|
-
function
|
|
1407
|
+
let u = null, v = null, d = null, X, C = null;
|
|
1408
|
+
const m = [], R = [], B = /* @__PURE__ */ new Map(), U = [], f = [], L = /* @__PURE__ */ new Map(), $ = [];
|
|
1409
|
+
function j() {
|
|
1361
1410
|
try {
|
|
1362
|
-
|
|
1411
|
+
u?.disconnect();
|
|
1363
1412
|
} catch (t) {
|
|
1364
1413
|
at.warn(`Failed to disconnect channel manager: ${t}`);
|
|
1365
1414
|
}
|
|
1366
|
-
|
|
1367
|
-
for (let t = 0; t <
|
|
1415
|
+
u = null;
|
|
1416
|
+
for (let t = 0; t < R.length; t++)
|
|
1368
1417
|
try {
|
|
1369
|
-
|
|
1418
|
+
R[t].port.close();
|
|
1370
1419
|
} catch {
|
|
1371
1420
|
}
|
|
1372
|
-
|
|
1373
|
-
for (let t = 0; t <
|
|
1421
|
+
m.length = 0, R.length = 0, B.clear();
|
|
1422
|
+
for (let t = 0; t < f.length; t++)
|
|
1374
1423
|
try {
|
|
1375
|
-
|
|
1424
|
+
f[t].port.close();
|
|
1376
1425
|
} catch {
|
|
1377
1426
|
}
|
|
1378
|
-
|
|
1427
|
+
U.length = 0, f.length = 0, L.clear();
|
|
1379
1428
|
}
|
|
1380
|
-
function
|
|
1429
|
+
function b(t) {
|
|
1381
1430
|
const e = t instanceof Error ? t : new Error(String(t));
|
|
1382
|
-
|
|
1431
|
+
P({ type: "error", error: { name: e.name, message: e.message, stack: e.stack } });
|
|
1383
1432
|
}
|
|
1384
|
-
function
|
|
1433
|
+
function dt() {
|
|
1385
1434
|
let t = 0;
|
|
1386
|
-
for (let e = 0; e <
|
|
1387
|
-
t |=
|
|
1435
|
+
for (let e = 0; e < R.length; e++)
|
|
1436
|
+
t |= R[e].opcodeGroupsMask;
|
|
1388
1437
|
return t;
|
|
1389
1438
|
}
|
|
1390
|
-
function
|
|
1439
|
+
function Bt(t) {
|
|
1391
1440
|
if (X === void 0)
|
|
1392
1441
|
return !0;
|
|
1393
|
-
const e =
|
|
1442
|
+
const e = F(t);
|
|
1394
1443
|
if ((e & X) !== 0)
|
|
1395
1444
|
return !0;
|
|
1396
|
-
const
|
|
1397
|
-
return (e &
|
|
1445
|
+
const s = dt();
|
|
1446
|
+
return (e & s) !== 0;
|
|
1398
1447
|
}
|
|
1399
1448
|
function ot(t) {
|
|
1400
1449
|
$.length = 0;
|
|
1401
|
-
for (let e = 0; e <
|
|
1402
|
-
const
|
|
1403
|
-
(
|
|
1450
|
+
for (let e = 0; e < R.length; e++) {
|
|
1451
|
+
const s = R[e];
|
|
1452
|
+
(s.opcodeGroupsMask & t) !== 0 && $.push(s.port);
|
|
1404
1453
|
}
|
|
1405
1454
|
return $;
|
|
1406
1455
|
}
|
|
1407
1456
|
function Ft(t, e) {
|
|
1408
|
-
return (
|
|
1457
|
+
return (F(t) & e) !== 0;
|
|
1409
1458
|
}
|
|
1410
|
-
function
|
|
1411
|
-
if (!
|
|
1459
|
+
function Gt(t, e) {
|
|
1460
|
+
if (!u || !e || typeof e != "object")
|
|
1412
1461
|
return;
|
|
1413
|
-
const
|
|
1414
|
-
if (!(
|
|
1462
|
+
const s = e;
|
|
1463
|
+
if (!(s.type !== "send" || !(s.message instanceof ArrayBuffer)))
|
|
1415
1464
|
try {
|
|
1416
|
-
const r = new Uint8Array(
|
|
1465
|
+
const r = new Uint8Array(s.message);
|
|
1417
1466
|
if (!Ft(r, t))
|
|
1418
1467
|
return;
|
|
1419
|
-
|
|
1468
|
+
u.sendProtocolMessage(r), C && C.postMessage({ direction: "sent", message: Array.from(r) });
|
|
1420
1469
|
} catch (r) {
|
|
1421
|
-
|
|
1470
|
+
b(r);
|
|
1422
1471
|
}
|
|
1423
1472
|
}
|
|
1424
|
-
async function
|
|
1425
|
-
|
|
1473
|
+
async function Vt(t) {
|
|
1474
|
+
j(), u = new vt({
|
|
1426
1475
|
sessionId: t.sessionId,
|
|
1427
1476
|
keepaliveTimeoutMs: t.keepaliveTimeoutMs,
|
|
1428
1477
|
reconnectBackoffMs: t.reconnectBackoffMs,
|
|
@@ -1430,79 +1479,79 @@ async function Gt(t) {
|
|
|
1430
1479
|
orderedEndpointTypes: t.orderedEndpointTypes,
|
|
1431
1480
|
webRtcEnabled: t.webRtcEnabled,
|
|
1432
1481
|
onStateChange: (e) => {
|
|
1433
|
-
|
|
1482
|
+
P({ type: "state", state: e, activeType: u?.activeEndpointType ?? void 0 });
|
|
1434
1483
|
},
|
|
1435
1484
|
onRememberWorkingType: () => {
|
|
1436
|
-
|
|
1485
|
+
P({ type: "state", state: u?.managerState ?? "idle", activeType: u?.activeEndpointType ?? void 0 });
|
|
1437
1486
|
},
|
|
1438
1487
|
onError: (e) => {
|
|
1439
|
-
|
|
1488
|
+
b(e);
|
|
1440
1489
|
},
|
|
1441
|
-
onRefreshEntrypoints: () => new Promise((e,
|
|
1442
|
-
|
|
1490
|
+
onRefreshEntrypoints: () => new Promise((e, s) => {
|
|
1491
|
+
v = e, d = s, P({ type: "refreshEntrypoints" });
|
|
1443
1492
|
}),
|
|
1444
1493
|
onProtocolMessage: (e) => {
|
|
1445
|
-
C && (C.postMessage({ direction: "received", message: Array.from(e) }),
|
|
1446
|
-
const
|
|
1447
|
-
if (!(!r &&
|
|
1494
|
+
C && (C.postMessage({ direction: "received", message: Array.from(e) }), Q(e) === V.ANALYTICS_LOGS && C.postMessage({ type: "serverLogs", message: Array.from(e) }));
|
|
1495
|
+
const s = F(e), r = Bt(e), n = ot(s);
|
|
1496
|
+
if (!(!r && n.length === 0))
|
|
1448
1497
|
try {
|
|
1449
|
-
const i = H(e),
|
|
1450
|
-
if (
|
|
1451
|
-
const
|
|
1452
|
-
|
|
1498
|
+
const i = H(e), a = e.buffer instanceof ArrayBuffer && e.byteOffset === 0 && e.byteLength === e.buffer.byteLength, o = n.length > 0;
|
|
1499
|
+
if (o && !r && n.length === 1 && a) {
|
|
1500
|
+
const l = e.buffer;
|
|
1501
|
+
n[0].postMessage({ type: "protocol", message: l, headers: i }, [l]);
|
|
1453
1502
|
return;
|
|
1454
1503
|
}
|
|
1455
|
-
if (!
|
|
1456
|
-
const
|
|
1457
|
-
|
|
1504
|
+
if (!o && r && a) {
|
|
1505
|
+
const l = e.buffer;
|
|
1506
|
+
P({ type: "protocol", message: l, headers: i }, [l]);
|
|
1458
1507
|
return;
|
|
1459
1508
|
}
|
|
1460
|
-
if (
|
|
1461
|
-
const
|
|
1462
|
-
for (let
|
|
1463
|
-
|
|
1464
|
-
const
|
|
1465
|
-
|
|
1466
|
-
for (let
|
|
1467
|
-
|
|
1468
|
-
|
|
1509
|
+
if (o && a) {
|
|
1510
|
+
const l = [];
|
|
1511
|
+
for (let h = 1; h < n.length; h++)
|
|
1512
|
+
l.push(e.slice().buffer);
|
|
1513
|
+
const I = r ? e.slice().buffer : null, E = e.buffer;
|
|
1514
|
+
n[0].postMessage({ type: "protocol", message: E, headers: i }, [E]);
|
|
1515
|
+
for (let h = 1; h < n.length; h++)
|
|
1516
|
+
n[h].postMessage({ type: "protocol", message: l[h - 1], headers: i }, [l[h - 1]]);
|
|
1517
|
+
I && P({ type: "protocol", message: I, headers: i }, [I]);
|
|
1469
1518
|
return;
|
|
1470
1519
|
}
|
|
1471
|
-
if (
|
|
1472
|
-
for (const
|
|
1473
|
-
const
|
|
1474
|
-
|
|
1520
|
+
if (o)
|
|
1521
|
+
for (const l of n) {
|
|
1522
|
+
const I = e.slice().buffer;
|
|
1523
|
+
l.postMessage({ type: "protocol", message: I, headers: i }, [I]);
|
|
1475
1524
|
}
|
|
1476
1525
|
if (r) {
|
|
1477
|
-
const
|
|
1478
|
-
|
|
1526
|
+
const l = e.slice().buffer;
|
|
1527
|
+
P({ type: "protocol", message: l, headers: i }, [l]);
|
|
1479
1528
|
}
|
|
1480
1529
|
} catch (i) {
|
|
1481
|
-
|
|
1530
|
+
b(i);
|
|
1482
1531
|
}
|
|
1483
1532
|
}
|
|
1484
|
-
}), await
|
|
1533
|
+
}), await u.connect(t.entrypoints, { retry: t.retry });
|
|
1485
1534
|
}
|
|
1486
1535
|
self.addEventListener("message", (t) => {
|
|
1487
1536
|
const e = t.data;
|
|
1488
1537
|
if (e.type === "connect") {
|
|
1489
|
-
|
|
1490
|
-
at.error(`Failed to connect: ${
|
|
1538
|
+
Vt(e).catch((s) => {
|
|
1539
|
+
at.error(`Failed to connect: ${s}`), b(s), j();
|
|
1491
1540
|
});
|
|
1492
1541
|
return;
|
|
1493
1542
|
}
|
|
1494
1543
|
if (e.type === "disconnect") {
|
|
1495
|
-
|
|
1544
|
+
j(), P({ type: "state", state: "idle" });
|
|
1496
1545
|
return;
|
|
1497
1546
|
}
|
|
1498
1547
|
if (e.type === "send") {
|
|
1499
|
-
if (!
|
|
1548
|
+
if (!u)
|
|
1500
1549
|
return;
|
|
1501
1550
|
try {
|
|
1502
|
-
const
|
|
1503
|
-
|
|
1504
|
-
} catch (
|
|
1505
|
-
|
|
1551
|
+
const s = new Uint8Array(e.message);
|
|
1552
|
+
u.sendProtocolMessage(s), C && C.postMessage({ direction: "sent", message: Array.from(s) });
|
|
1553
|
+
} catch (s) {
|
|
1554
|
+
b(s);
|
|
1506
1555
|
}
|
|
1507
1556
|
return;
|
|
1508
1557
|
}
|
|
@@ -1515,33 +1564,33 @@ self.addEventListener("message", (t) => {
|
|
|
1515
1564
|
return;
|
|
1516
1565
|
}
|
|
1517
1566
|
if (e.type === "checkHealth") {
|
|
1518
|
-
|
|
1567
|
+
u?.checkHealth();
|
|
1519
1568
|
return;
|
|
1520
1569
|
}
|
|
1521
1570
|
if (e.type === "triggerReconnect") {
|
|
1522
|
-
|
|
1571
|
+
u?.triggerReconnect(e.reason);
|
|
1523
1572
|
return;
|
|
1524
1573
|
}
|
|
1525
1574
|
if (e.type === "refreshedEntrypoints") {
|
|
1526
|
-
|
|
1575
|
+
v && (v({ entrypoints: e.entrypoints, sessionId: e.sessionId }), v = null, d = null);
|
|
1527
1576
|
return;
|
|
1528
1577
|
}
|
|
1529
1578
|
if (e.type === "refreshEntrypointsFailed") {
|
|
1530
|
-
d && (d(new Error("Failed to refresh entrypoints")),
|
|
1579
|
+
d && (d(new Error("Failed to refresh entrypoints")), v = null, d = null);
|
|
1531
1580
|
return;
|
|
1532
1581
|
}
|
|
1533
1582
|
if (e.type === "forwardToPorts") {
|
|
1534
1583
|
try {
|
|
1535
|
-
const
|
|
1536
|
-
if (
|
|
1537
|
-
const i = H(
|
|
1538
|
-
for (const
|
|
1539
|
-
const
|
|
1540
|
-
|
|
1584
|
+
const s = new Uint8Array(e.message), r = F(s), n = ot(r);
|
|
1585
|
+
if (n.length > 0) {
|
|
1586
|
+
const i = H(s);
|
|
1587
|
+
for (const a of n) {
|
|
1588
|
+
const o = s.slice().buffer;
|
|
1589
|
+
a.postMessage({ type: "protocol", message: o, headers: i }, [o]);
|
|
1541
1590
|
}
|
|
1542
1591
|
}
|
|
1543
|
-
} catch (
|
|
1544
|
-
|
|
1592
|
+
} catch (s) {
|
|
1593
|
+
b(s);
|
|
1545
1594
|
}
|
|
1546
1595
|
return;
|
|
1547
1596
|
}
|
|
@@ -1550,67 +1599,67 @@ self.addEventListener("message", (t) => {
|
|
|
1550
1599
|
e.port.start?.();
|
|
1551
1600
|
} catch {
|
|
1552
1601
|
}
|
|
1553
|
-
const
|
|
1554
|
-
|
|
1602
|
+
const s = m.length;
|
|
1603
|
+
m.push(e.portId), R.push({ port: e.port, opcodeGroupsMask: e.opcodeGroupsMask }), B.set(e.portId, s);
|
|
1555
1604
|
return;
|
|
1556
1605
|
}
|
|
1557
1606
|
if (e.type === "detachPort") {
|
|
1558
|
-
const
|
|
1559
|
-
if (
|
|
1560
|
-
const r =
|
|
1607
|
+
const s = B.get(e.portId);
|
|
1608
|
+
if (s !== void 0) {
|
|
1609
|
+
const r = R[s];
|
|
1561
1610
|
try {
|
|
1562
1611
|
r.port.close();
|
|
1563
1612
|
} catch {
|
|
1564
1613
|
}
|
|
1565
|
-
const
|
|
1566
|
-
if (
|
|
1567
|
-
const i =
|
|
1568
|
-
|
|
1614
|
+
const n = m.length - 1;
|
|
1615
|
+
if (s !== n) {
|
|
1616
|
+
const i = m[n];
|
|
1617
|
+
m[s] = i, R[s] = R[n], B.set(i, s);
|
|
1569
1618
|
}
|
|
1570
|
-
|
|
1619
|
+
m.length--, R.length--, B.delete(e.portId);
|
|
1571
1620
|
}
|
|
1572
1621
|
return;
|
|
1573
1622
|
}
|
|
1574
1623
|
if (e.type === "attachSendPort") {
|
|
1575
|
-
const
|
|
1576
|
-
if (
|
|
1577
|
-
const i =
|
|
1624
|
+
const s = L.get(e.portId);
|
|
1625
|
+
if (s !== void 0) {
|
|
1626
|
+
const i = f[s];
|
|
1578
1627
|
try {
|
|
1579
1628
|
i.port.close();
|
|
1580
1629
|
} catch {
|
|
1581
1630
|
}
|
|
1582
|
-
const
|
|
1583
|
-
if (
|
|
1584
|
-
const
|
|
1585
|
-
|
|
1631
|
+
const a = U.length - 1;
|
|
1632
|
+
if (s !== a) {
|
|
1633
|
+
const o = U[a];
|
|
1634
|
+
U[s] = o, f[s] = f[a], L.set(o, s);
|
|
1586
1635
|
}
|
|
1587
|
-
|
|
1636
|
+
U.length--, f.length--, L.delete(e.portId);
|
|
1588
1637
|
}
|
|
1589
|
-
const r = { port: e.port, opcodeGroupsMask: e.opcodeGroupsMask },
|
|
1590
|
-
|
|
1638
|
+
const r = { port: e.port, opcodeGroupsMask: e.opcodeGroupsMask }, n = U.length;
|
|
1639
|
+
U.push(e.portId), f.push(r), L.set(e.portId, n);
|
|
1591
1640
|
try {
|
|
1592
1641
|
r.port.start?.();
|
|
1593
1642
|
} catch {
|
|
1594
1643
|
}
|
|
1595
1644
|
r.port.addEventListener("message", (i) => {
|
|
1596
|
-
|
|
1645
|
+
Gt(r.opcodeGroupsMask, i.data);
|
|
1597
1646
|
});
|
|
1598
1647
|
return;
|
|
1599
1648
|
}
|
|
1600
1649
|
if (e.type === "detachSendPort") {
|
|
1601
|
-
const
|
|
1602
|
-
if (
|
|
1603
|
-
const r =
|
|
1650
|
+
const s = L.get(e.portId);
|
|
1651
|
+
if (s !== void 0) {
|
|
1652
|
+
const r = f[s];
|
|
1604
1653
|
try {
|
|
1605
1654
|
r.port.close();
|
|
1606
1655
|
} catch {
|
|
1607
1656
|
}
|
|
1608
|
-
const
|
|
1609
|
-
if (
|
|
1610
|
-
const i =
|
|
1611
|
-
|
|
1657
|
+
const n = U.length - 1;
|
|
1658
|
+
if (s !== n) {
|
|
1659
|
+
const i = U[n];
|
|
1660
|
+
U[s] = i, f[s] = f[n], L.set(i, s);
|
|
1612
1661
|
}
|
|
1613
|
-
|
|
1662
|
+
U.length--, f.length--, L.delete(e.portId);
|
|
1614
1663
|
}
|
|
1615
1664
|
return;
|
|
1616
1665
|
}
|