@kangentic/protocol 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/events/event.d.ts +3 -2
- package/dist/events/payloads.d.ts +37 -1
- package/dist/index.cjs +819 -32
- package/dist/index.d.ts +3 -3
- package/dist/index.mjs +806 -32
- package/dist/version.d.ts +1 -1
- package/dist/wire/framing.d.ts +4 -0
- package/dist/wire/payloads.d.ts +28 -3
- package/package.json +3 -2
package/dist/index.cjs
CHANGED
|
@@ -23,12 +23,14 @@ __export(index_exports, {
|
|
|
23
23
|
BOARD_TOOL_READ_NAMES: () => BOARD_TOOL_READ_NAMES,
|
|
24
24
|
BOARD_TOOL_WRITE_NAMES: () => BOARD_TOOL_WRITE_NAMES,
|
|
25
25
|
CAPABILITY_VERBS: () => CAPABILITY_VERBS,
|
|
26
|
+
COMPRESSION_THRESHOLD: () => COMPRESSION_THRESHOLD,
|
|
26
27
|
CipherState: () => CipherState,
|
|
27
28
|
ED25519_KEY_LENGTH: () => ED25519_KEY_LENGTH,
|
|
28
29
|
FrameTag: () => FrameTag,
|
|
29
30
|
HandshakeState: () => HandshakeState,
|
|
30
31
|
IKPSK0_PATTERN: () => IKPSK0_PATTERN,
|
|
31
32
|
KK_PATTERN: () => KK_PATTERN,
|
|
33
|
+
MAX_DECODED_LENGTH: () => MAX_DECODED_LENGTH,
|
|
32
34
|
MAX_FRAME_LENGTH: () => MAX_FRAME_LENGTH,
|
|
33
35
|
PAIRING_URI_SCHEME: () => PAIRING_URI_SCHEME,
|
|
34
36
|
PROTOCOL_VERSION: () => PROTOCOL_VERSION,
|
|
@@ -77,6 +79,8 @@ __export(index_exports, {
|
|
|
77
79
|
parseSessionEventWire: () => parseSessionEventWire,
|
|
78
80
|
parseSessionUsageWire: () => parseSessionUsageWire,
|
|
79
81
|
parseTranscriptEntriesWire: () => parseTranscriptEntriesWire,
|
|
82
|
+
parseTranscriptEventPayload: () => parseTranscriptEventPayload,
|
|
83
|
+
parseTranscriptWindowResponsePayload: () => parseTranscriptWindowResponsePayload,
|
|
80
84
|
randomBytes: () => randomBytes4,
|
|
81
85
|
rosterDeviceCapabilitySet: () => rosterDeviceCapabilitySet,
|
|
82
86
|
signRosterEntry: () => signRosterEntry,
|
|
@@ -88,7 +92,7 @@ __export(index_exports, {
|
|
|
88
92
|
module.exports = __toCommonJS(index_exports);
|
|
89
93
|
|
|
90
94
|
// src/version.ts
|
|
91
|
-
var PROTOCOL_VERSION = "
|
|
95
|
+
var PROTOCOL_VERSION = "2";
|
|
92
96
|
function encodeProtocolVersion(version = PROTOCOL_VERSION) {
|
|
93
97
|
return new TextEncoder().encode(`kangentic-bridge-v${version}`);
|
|
94
98
|
}
|
|
@@ -718,12 +722,12 @@ function asciiToBytes(ascii) {
|
|
|
718
722
|
});
|
|
719
723
|
}
|
|
720
724
|
var isPosBig = (n) => typeof n === "bigint" && _0n <= n;
|
|
721
|
-
function inRange(n, min,
|
|
722
|
-
return isPosBig(n) && isPosBig(min) && isPosBig(
|
|
725
|
+
function inRange(n, min, max2) {
|
|
726
|
+
return isPosBig(n) && isPosBig(min) && isPosBig(max2) && min <= n && n < max2;
|
|
723
727
|
}
|
|
724
|
-
function aInRange(title, n, min,
|
|
725
|
-
if (!inRange(n, min,
|
|
726
|
-
throw new RangeError("expected valid " + title + ": " + min + " <= n < " +
|
|
728
|
+
function aInRange(title, n, min, max2) {
|
|
729
|
+
if (!inRange(n, min, max2))
|
|
730
|
+
throw new RangeError("expected valid " + title + ": " + min + " <= n < " + max2 + ", got " + n);
|
|
727
731
|
}
|
|
728
732
|
function bitLen(n) {
|
|
729
733
|
if (n < _0n)
|
|
@@ -1000,10 +1004,10 @@ function nLength(n, nBitLength) {
|
|
|
1000
1004
|
throw new Error("invalid n length: expected positive n, got " + n);
|
|
1001
1005
|
if (nBitLength !== void 0 && nBitLength < 1)
|
|
1002
1006
|
throw new Error("invalid n length: expected positive bit length, got " + nBitLength);
|
|
1003
|
-
const
|
|
1004
|
-
if (nBitLength !== void 0 && nBitLength <
|
|
1005
|
-
throw new Error(`invalid n length: expected bit length (${
|
|
1006
|
-
const _nBitLength = nBitLength !== void 0 ? nBitLength :
|
|
1007
|
+
const bits2 = bitLen(n);
|
|
1008
|
+
if (nBitLength !== void 0 && nBitLength < bits2)
|
|
1009
|
+
throw new Error(`invalid n length: expected bit length (${bits2}) >= n.length (${nBitLength})`);
|
|
1010
|
+
const _nBitLength = nBitLength !== void 0 ? nBitLength : bits2;
|
|
1007
1011
|
const nByteLength = Math.ceil(_nBitLength / 8);
|
|
1008
1012
|
return { nBitLength: _nBitLength, nByteLength };
|
|
1009
1013
|
}
|
|
@@ -1158,9 +1162,9 @@ function normalizeZ(c, points) {
|
|
|
1158
1162
|
const invertedZs = FpInvertBatch(c.Fp, points.map((p) => p.Z));
|
|
1159
1163
|
return points.map((p, i) => c.fromAffine(p.toAffine(invertedZs[i])));
|
|
1160
1164
|
}
|
|
1161
|
-
function validateW(W,
|
|
1162
|
-
if (!Number.isSafeInteger(W) || W <= 0 || W >
|
|
1163
|
-
throw new Error("invalid window size, expected [1.." +
|
|
1165
|
+
function validateW(W, bits2) {
|
|
1166
|
+
if (!Number.isSafeInteger(W) || W <= 0 || W > bits2)
|
|
1167
|
+
throw new Error("invalid window size, expected [1.." + bits2 + "], got W=" + W);
|
|
1164
1168
|
}
|
|
1165
1169
|
function calcWOpts(W, scalarBits) {
|
|
1166
1170
|
validateW(W, scalarBits);
|
|
@@ -1173,16 +1177,16 @@ function calcWOpts(W, scalarBits) {
|
|
|
1173
1177
|
}
|
|
1174
1178
|
function calcOffsets(n, window, wOpts) {
|
|
1175
1179
|
const { windowSize, mask, maxNumber, shiftBy } = wOpts;
|
|
1176
|
-
let
|
|
1180
|
+
let wbits2 = Number(n & mask);
|
|
1177
1181
|
let nextN = n >> shiftBy;
|
|
1178
|
-
if (
|
|
1179
|
-
|
|
1182
|
+
if (wbits2 > windowSize) {
|
|
1183
|
+
wbits2 -= maxNumber;
|
|
1180
1184
|
nextN += _1n3;
|
|
1181
1185
|
}
|
|
1182
1186
|
const offsetStart = window * windowSize;
|
|
1183
|
-
const offset = offsetStart + Math.abs(
|
|
1184
|
-
const isZero =
|
|
1185
|
-
const isNeg =
|
|
1187
|
+
const offset = offsetStart + Math.abs(wbits2) - 1;
|
|
1188
|
+
const isZero = wbits2 === 0;
|
|
1189
|
+
const isNeg = wbits2 < 0;
|
|
1186
1190
|
const isNegF = window % 2 !== 0;
|
|
1187
1191
|
const offsetF = offsetStart;
|
|
1188
1192
|
return { nextN, offset, isZero, isNeg, isNegF, offsetF };
|
|
@@ -1202,11 +1206,11 @@ var wNAF = class {
|
|
|
1202
1206
|
Fn;
|
|
1203
1207
|
bits;
|
|
1204
1208
|
// Parametrized with a given Point class (not individual point)
|
|
1205
|
-
constructor(Point,
|
|
1209
|
+
constructor(Point, bits2) {
|
|
1206
1210
|
this.BASE = Point.BASE;
|
|
1207
1211
|
this.ZERO = Point.ZERO;
|
|
1208
1212
|
this.Fn = Point.Fn;
|
|
1209
|
-
this.bits =
|
|
1213
|
+
this.bits = bits2;
|
|
1210
1214
|
}
|
|
1211
1215
|
// non-const time multiplication ladder
|
|
1212
1216
|
_unsafeLadder(elm, n, p = this.ZERO) {
|
|
@@ -1350,8 +1354,8 @@ function createCurveFields(type, CURVE, curveOpts = {}, FpFnLE) {
|
|
|
1350
1354
|
}
|
|
1351
1355
|
const Fp2 = createField(CURVE.p, curveOpts.Fp, FpFnLE);
|
|
1352
1356
|
const Fn2 = createField(CURVE.n, curveOpts.Fn, FpFnLE);
|
|
1353
|
-
const
|
|
1354
|
-
const params = ["Gx", "Gy", "a",
|
|
1357
|
+
const _b2 = type === "weierstrass" ? "b" : "d";
|
|
1358
|
+
const params = ["Gx", "Gy", "a", _b2];
|
|
1355
1359
|
for (const p of params) {
|
|
1356
1360
|
if (!Fp2.isValid(CURVE[p]))
|
|
1357
1361
|
throw new Error(`CURVE.${p} must be valid field element of CURVE.Fp`);
|
|
@@ -1452,8 +1456,8 @@ function edwards(params, extraOpts = {}) {
|
|
|
1452
1456
|
const lastByte = bytes[len - 1];
|
|
1453
1457
|
normed[len - 1] = lastByte & ~128;
|
|
1454
1458
|
const y = bytesToNumberLE(normed);
|
|
1455
|
-
const
|
|
1456
|
-
aInRange("point.y", y, _0n4,
|
|
1459
|
+
const max2 = zip215 ? MASK : Fp2.ORDER;
|
|
1460
|
+
aInRange("point.y", y, _0n4, max2);
|
|
1457
1461
|
const y2 = modP(y * y);
|
|
1458
1462
|
const u = modP(y2 - _1n4);
|
|
1459
1463
|
const v = modP(d * y2 - a);
|
|
@@ -4267,6 +4271,700 @@ function deriveSessionSlotId(desktopStaticPublicKey, phoneStaticPublicKey) {
|
|
|
4267
4271
|
return bytesToHex(deriveLabeledKey(material, SESSION_SLOT_LABEL, SESSION_SLOT_LENGTH));
|
|
4268
4272
|
}
|
|
4269
4273
|
|
|
4274
|
+
// ../../node_modules/fflate/esm/index.mjs
|
|
4275
|
+
var import_module = require("module");
|
|
4276
|
+
var require2 = (0, import_module.createRequire)("/");
|
|
4277
|
+
var _a;
|
|
4278
|
+
var Worker;
|
|
4279
|
+
var isMarkedAsUntransferable;
|
|
4280
|
+
try {
|
|
4281
|
+
_a = require2("worker_threads"), Worker = _a.Worker, isMarkedAsUntransferable = _a.isMarkedAsUntransferable;
|
|
4282
|
+
} catch (e) {
|
|
4283
|
+
}
|
|
4284
|
+
var u8 = Uint8Array;
|
|
4285
|
+
var u16 = Uint16Array;
|
|
4286
|
+
var i32 = Int32Array;
|
|
4287
|
+
var fleb = new u8([
|
|
4288
|
+
0,
|
|
4289
|
+
0,
|
|
4290
|
+
0,
|
|
4291
|
+
0,
|
|
4292
|
+
0,
|
|
4293
|
+
0,
|
|
4294
|
+
0,
|
|
4295
|
+
0,
|
|
4296
|
+
1,
|
|
4297
|
+
1,
|
|
4298
|
+
1,
|
|
4299
|
+
1,
|
|
4300
|
+
2,
|
|
4301
|
+
2,
|
|
4302
|
+
2,
|
|
4303
|
+
2,
|
|
4304
|
+
3,
|
|
4305
|
+
3,
|
|
4306
|
+
3,
|
|
4307
|
+
3,
|
|
4308
|
+
4,
|
|
4309
|
+
4,
|
|
4310
|
+
4,
|
|
4311
|
+
4,
|
|
4312
|
+
5,
|
|
4313
|
+
5,
|
|
4314
|
+
5,
|
|
4315
|
+
5,
|
|
4316
|
+
0,
|
|
4317
|
+
/* unused */
|
|
4318
|
+
0,
|
|
4319
|
+
0,
|
|
4320
|
+
/* impossible */
|
|
4321
|
+
0
|
|
4322
|
+
]);
|
|
4323
|
+
var fdeb = new u8([
|
|
4324
|
+
0,
|
|
4325
|
+
0,
|
|
4326
|
+
0,
|
|
4327
|
+
0,
|
|
4328
|
+
1,
|
|
4329
|
+
1,
|
|
4330
|
+
2,
|
|
4331
|
+
2,
|
|
4332
|
+
3,
|
|
4333
|
+
3,
|
|
4334
|
+
4,
|
|
4335
|
+
4,
|
|
4336
|
+
5,
|
|
4337
|
+
5,
|
|
4338
|
+
6,
|
|
4339
|
+
6,
|
|
4340
|
+
7,
|
|
4341
|
+
7,
|
|
4342
|
+
8,
|
|
4343
|
+
8,
|
|
4344
|
+
9,
|
|
4345
|
+
9,
|
|
4346
|
+
10,
|
|
4347
|
+
10,
|
|
4348
|
+
11,
|
|
4349
|
+
11,
|
|
4350
|
+
12,
|
|
4351
|
+
12,
|
|
4352
|
+
13,
|
|
4353
|
+
13,
|
|
4354
|
+
/* unused */
|
|
4355
|
+
0,
|
|
4356
|
+
0
|
|
4357
|
+
]);
|
|
4358
|
+
var clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);
|
|
4359
|
+
var freb = function(eb, start) {
|
|
4360
|
+
var b = new u16(31);
|
|
4361
|
+
for (var i = 0; i < 31; ++i) {
|
|
4362
|
+
b[i] = start += 1 << eb[i - 1];
|
|
4363
|
+
}
|
|
4364
|
+
var r = new i32(b[30]);
|
|
4365
|
+
for (var i = 1; i < 30; ++i) {
|
|
4366
|
+
for (var j = b[i]; j < b[i + 1]; ++j) {
|
|
4367
|
+
r[j] = j - b[i] << 5 | i;
|
|
4368
|
+
}
|
|
4369
|
+
}
|
|
4370
|
+
return { b, r };
|
|
4371
|
+
};
|
|
4372
|
+
var _a = freb(fleb, 2);
|
|
4373
|
+
var fl = _a.b;
|
|
4374
|
+
var revfl = _a.r;
|
|
4375
|
+
fl[28] = 258, revfl[258] = 28;
|
|
4376
|
+
var _b = freb(fdeb, 0);
|
|
4377
|
+
var fd = _b.b;
|
|
4378
|
+
var revfd = _b.r;
|
|
4379
|
+
var rev = new u16(32768);
|
|
4380
|
+
for (i = 0; i < 32768; ++i) {
|
|
4381
|
+
x = (i & 43690) >> 1 | (i & 21845) << 1;
|
|
4382
|
+
x = (x & 52428) >> 2 | (x & 13107) << 2;
|
|
4383
|
+
x = (x & 61680) >> 4 | (x & 3855) << 4;
|
|
4384
|
+
rev[i] = ((x & 65280) >> 8 | (x & 255) << 8) >> 1;
|
|
4385
|
+
}
|
|
4386
|
+
var x;
|
|
4387
|
+
var i;
|
|
4388
|
+
var hMap = (function(cd, mb, r) {
|
|
4389
|
+
var s = cd.length;
|
|
4390
|
+
var i = 0;
|
|
4391
|
+
var l = new u16(mb);
|
|
4392
|
+
for (; i < s; ++i) {
|
|
4393
|
+
if (cd[i])
|
|
4394
|
+
++l[cd[i] - 1];
|
|
4395
|
+
}
|
|
4396
|
+
var le = new u16(mb);
|
|
4397
|
+
for (i = 1; i < mb; ++i) {
|
|
4398
|
+
le[i] = le[i - 1] + l[i - 1] << 1;
|
|
4399
|
+
}
|
|
4400
|
+
var co;
|
|
4401
|
+
if (r) {
|
|
4402
|
+
co = new u16(1 << mb);
|
|
4403
|
+
var rvb = 15 - mb;
|
|
4404
|
+
for (i = 0; i < s; ++i) {
|
|
4405
|
+
if (cd[i]) {
|
|
4406
|
+
var sv = i << 4 | cd[i];
|
|
4407
|
+
var r_1 = mb - cd[i];
|
|
4408
|
+
var v = le[cd[i] - 1]++ << r_1;
|
|
4409
|
+
for (var m = v | (1 << r_1) - 1; v <= m; ++v) {
|
|
4410
|
+
co[rev[v] >> rvb] = sv;
|
|
4411
|
+
}
|
|
4412
|
+
}
|
|
4413
|
+
}
|
|
4414
|
+
} else {
|
|
4415
|
+
co = new u16(s);
|
|
4416
|
+
for (i = 0; i < s; ++i) {
|
|
4417
|
+
if (cd[i]) {
|
|
4418
|
+
co[i] = rev[le[cd[i] - 1]++] >> 15 - cd[i];
|
|
4419
|
+
}
|
|
4420
|
+
}
|
|
4421
|
+
}
|
|
4422
|
+
return co;
|
|
4423
|
+
});
|
|
4424
|
+
var flt = new u8(288);
|
|
4425
|
+
for (i = 0; i < 144; ++i)
|
|
4426
|
+
flt[i] = 8;
|
|
4427
|
+
var i;
|
|
4428
|
+
for (i = 144; i < 256; ++i)
|
|
4429
|
+
flt[i] = 9;
|
|
4430
|
+
var i;
|
|
4431
|
+
for (i = 256; i < 280; ++i)
|
|
4432
|
+
flt[i] = 7;
|
|
4433
|
+
var i;
|
|
4434
|
+
for (i = 280; i < 288; ++i)
|
|
4435
|
+
flt[i] = 8;
|
|
4436
|
+
var i;
|
|
4437
|
+
var fdt = new u8(32);
|
|
4438
|
+
for (i = 0; i < 32; ++i)
|
|
4439
|
+
fdt[i] = 5;
|
|
4440
|
+
var i;
|
|
4441
|
+
var flm = /* @__PURE__ */ hMap(flt, 9, 0);
|
|
4442
|
+
var flrm = /* @__PURE__ */ hMap(flt, 9, 1);
|
|
4443
|
+
var fdm = /* @__PURE__ */ hMap(fdt, 5, 0);
|
|
4444
|
+
var fdrm = /* @__PURE__ */ hMap(fdt, 5, 1);
|
|
4445
|
+
var max = function(a) {
|
|
4446
|
+
var m = a[0];
|
|
4447
|
+
for (var i = 1; i < a.length; ++i) {
|
|
4448
|
+
if (a[i] > m)
|
|
4449
|
+
m = a[i];
|
|
4450
|
+
}
|
|
4451
|
+
return m;
|
|
4452
|
+
};
|
|
4453
|
+
var bits = function(d, p, m) {
|
|
4454
|
+
var o = p / 8 | 0;
|
|
4455
|
+
return (d[o] | d[o + 1] << 8) >> (p & 7) & m;
|
|
4456
|
+
};
|
|
4457
|
+
var bits16 = function(d, p) {
|
|
4458
|
+
var o = p / 8 | 0;
|
|
4459
|
+
return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7);
|
|
4460
|
+
};
|
|
4461
|
+
var shft = function(p) {
|
|
4462
|
+
return (p + 7) / 8 | 0;
|
|
4463
|
+
};
|
|
4464
|
+
var slc = function(v, s, e) {
|
|
4465
|
+
if (s == null || s < 0)
|
|
4466
|
+
s = 0;
|
|
4467
|
+
if (e == null || e > v.length)
|
|
4468
|
+
e = v.length;
|
|
4469
|
+
return new u8(v.subarray(s, e));
|
|
4470
|
+
};
|
|
4471
|
+
var ec = [
|
|
4472
|
+
"unexpected EOF",
|
|
4473
|
+
"invalid block type",
|
|
4474
|
+
"invalid length/literal",
|
|
4475
|
+
"invalid distance",
|
|
4476
|
+
"stream finished",
|
|
4477
|
+
"no stream handler",
|
|
4478
|
+
,
|
|
4479
|
+
// determined by compression function
|
|
4480
|
+
"no callback",
|
|
4481
|
+
"invalid UTF-8 data",
|
|
4482
|
+
"extra field too long",
|
|
4483
|
+
"date not in range 1980-2099",
|
|
4484
|
+
"filename too long",
|
|
4485
|
+
"stream finishing",
|
|
4486
|
+
"invalid zip data"
|
|
4487
|
+
// determined by unknown compression method
|
|
4488
|
+
];
|
|
4489
|
+
var err = function(ind, msg, nt) {
|
|
4490
|
+
var e = new Error(msg || ec[ind]);
|
|
4491
|
+
e.code = ind;
|
|
4492
|
+
if (Error.captureStackTrace)
|
|
4493
|
+
Error.captureStackTrace(e, err);
|
|
4494
|
+
if (!nt)
|
|
4495
|
+
throw e;
|
|
4496
|
+
return e;
|
|
4497
|
+
};
|
|
4498
|
+
var inflt = function(dat, st, buf, dict) {
|
|
4499
|
+
var sl = dat.length, dl = dict ? dict.length : 0;
|
|
4500
|
+
if (!sl || st.f && !st.l)
|
|
4501
|
+
return buf || new u8(0);
|
|
4502
|
+
var noBuf = !buf;
|
|
4503
|
+
var resize = noBuf || st.i != 2;
|
|
4504
|
+
var noSt = st.i;
|
|
4505
|
+
if (noBuf)
|
|
4506
|
+
buf = new u8(sl * 3);
|
|
4507
|
+
var cbuf = function(l2) {
|
|
4508
|
+
var bl = buf.length;
|
|
4509
|
+
if (l2 > bl) {
|
|
4510
|
+
var nbuf = new u8(Math.max(bl * 2, l2));
|
|
4511
|
+
nbuf.set(buf);
|
|
4512
|
+
buf = nbuf;
|
|
4513
|
+
}
|
|
4514
|
+
};
|
|
4515
|
+
var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;
|
|
4516
|
+
var tbts = sl * 8;
|
|
4517
|
+
do {
|
|
4518
|
+
if (!lm) {
|
|
4519
|
+
final = bits(dat, pos, 1);
|
|
4520
|
+
var type = bits(dat, pos + 1, 3);
|
|
4521
|
+
pos += 3;
|
|
4522
|
+
if (!type) {
|
|
4523
|
+
var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l;
|
|
4524
|
+
if (t > sl) {
|
|
4525
|
+
if (noSt)
|
|
4526
|
+
err(0);
|
|
4527
|
+
break;
|
|
4528
|
+
}
|
|
4529
|
+
if (resize)
|
|
4530
|
+
cbuf(bt + l);
|
|
4531
|
+
buf.set(dat.subarray(s, t), bt);
|
|
4532
|
+
st.b = bt += l, st.p = pos = t * 8, st.f = final;
|
|
4533
|
+
continue;
|
|
4534
|
+
} else if (type == 1)
|
|
4535
|
+
lm = flrm, dm = fdrm, lbt = 9, dbt = 5;
|
|
4536
|
+
else if (type == 2) {
|
|
4537
|
+
var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;
|
|
4538
|
+
var tl = hLit + bits(dat, pos + 5, 31) + 1;
|
|
4539
|
+
pos += 14;
|
|
4540
|
+
var ldt = new u8(tl);
|
|
4541
|
+
var clt = new u8(19);
|
|
4542
|
+
for (var i = 0; i < hcLen; ++i) {
|
|
4543
|
+
clt[clim[i]] = bits(dat, pos + i * 3, 7);
|
|
4544
|
+
}
|
|
4545
|
+
pos += hcLen * 3;
|
|
4546
|
+
var clb = max(clt), clbmsk = (1 << clb) - 1;
|
|
4547
|
+
var clm = hMap(clt, clb, 1);
|
|
4548
|
+
for (var i = 0; i < tl; ) {
|
|
4549
|
+
var r = clm[bits(dat, pos, clbmsk)];
|
|
4550
|
+
pos += r & 15;
|
|
4551
|
+
var s = r >> 4;
|
|
4552
|
+
if (s < 16) {
|
|
4553
|
+
ldt[i++] = s;
|
|
4554
|
+
} else {
|
|
4555
|
+
var c = 0, n = 0;
|
|
4556
|
+
if (s == 16)
|
|
4557
|
+
n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];
|
|
4558
|
+
else if (s == 17)
|
|
4559
|
+
n = 3 + bits(dat, pos, 7), pos += 3;
|
|
4560
|
+
else if (s == 18)
|
|
4561
|
+
n = 11 + bits(dat, pos, 127), pos += 7;
|
|
4562
|
+
while (n--)
|
|
4563
|
+
ldt[i++] = c;
|
|
4564
|
+
}
|
|
4565
|
+
}
|
|
4566
|
+
var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);
|
|
4567
|
+
lbt = max(lt);
|
|
4568
|
+
dbt = max(dt);
|
|
4569
|
+
lm = hMap(lt, lbt, 1);
|
|
4570
|
+
dm = hMap(dt, dbt, 1);
|
|
4571
|
+
} else
|
|
4572
|
+
err(1);
|
|
4573
|
+
if (pos > tbts) {
|
|
4574
|
+
if (noSt)
|
|
4575
|
+
err(0);
|
|
4576
|
+
break;
|
|
4577
|
+
}
|
|
4578
|
+
}
|
|
4579
|
+
if (resize)
|
|
4580
|
+
cbuf(bt + 131072);
|
|
4581
|
+
var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;
|
|
4582
|
+
var lpos = pos;
|
|
4583
|
+
for (; ; lpos = pos) {
|
|
4584
|
+
var c = lm[bits16(dat, pos) & lms], sym = c >> 4;
|
|
4585
|
+
pos += c & 15;
|
|
4586
|
+
if (pos > tbts) {
|
|
4587
|
+
if (noSt)
|
|
4588
|
+
err(0);
|
|
4589
|
+
break;
|
|
4590
|
+
}
|
|
4591
|
+
if (!c)
|
|
4592
|
+
err(2);
|
|
4593
|
+
if (sym < 256)
|
|
4594
|
+
buf[bt++] = sym;
|
|
4595
|
+
else if (sym == 256) {
|
|
4596
|
+
lpos = pos, lm = null;
|
|
4597
|
+
break;
|
|
4598
|
+
} else {
|
|
4599
|
+
var add2 = sym - 254;
|
|
4600
|
+
if (sym > 264) {
|
|
4601
|
+
var i = sym - 257, b = fleb[i];
|
|
4602
|
+
add2 = bits(dat, pos, (1 << b) - 1) + fl[i];
|
|
4603
|
+
pos += b;
|
|
4604
|
+
}
|
|
4605
|
+
var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;
|
|
4606
|
+
if (!d)
|
|
4607
|
+
err(3);
|
|
4608
|
+
pos += d & 15;
|
|
4609
|
+
var dt = fd[dsym];
|
|
4610
|
+
if (dsym > 3) {
|
|
4611
|
+
var b = fdeb[dsym];
|
|
4612
|
+
dt += bits16(dat, pos) & (1 << b) - 1, pos += b;
|
|
4613
|
+
}
|
|
4614
|
+
if (pos > tbts) {
|
|
4615
|
+
if (noSt)
|
|
4616
|
+
err(0);
|
|
4617
|
+
break;
|
|
4618
|
+
}
|
|
4619
|
+
if (resize)
|
|
4620
|
+
cbuf(bt + 131072);
|
|
4621
|
+
var end = bt + add2;
|
|
4622
|
+
if (bt < dt) {
|
|
4623
|
+
var shift = dl - dt, dend = Math.min(dt, end);
|
|
4624
|
+
if (shift + bt < 0)
|
|
4625
|
+
err(3);
|
|
4626
|
+
for (; bt < dend; ++bt)
|
|
4627
|
+
buf[bt] = dict[shift + bt];
|
|
4628
|
+
}
|
|
4629
|
+
for (; bt < end; ++bt)
|
|
4630
|
+
buf[bt] = buf[bt - dt];
|
|
4631
|
+
}
|
|
4632
|
+
}
|
|
4633
|
+
st.l = lm, st.p = lpos, st.b = bt, st.f = final;
|
|
4634
|
+
if (lm)
|
|
4635
|
+
final = 1, st.m = lbt, st.d = dm, st.n = dbt;
|
|
4636
|
+
} while (!final);
|
|
4637
|
+
return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);
|
|
4638
|
+
};
|
|
4639
|
+
var wbits = function(d, p, v) {
|
|
4640
|
+
v <<= p & 7;
|
|
4641
|
+
var o = p / 8 | 0;
|
|
4642
|
+
d[o] |= v;
|
|
4643
|
+
d[o + 1] |= v >> 8;
|
|
4644
|
+
};
|
|
4645
|
+
var wbits16 = function(d, p, v) {
|
|
4646
|
+
v <<= p & 7;
|
|
4647
|
+
var o = p / 8 | 0;
|
|
4648
|
+
d[o] |= v;
|
|
4649
|
+
d[o + 1] |= v >> 8;
|
|
4650
|
+
d[o + 2] |= v >> 16;
|
|
4651
|
+
};
|
|
4652
|
+
var hTree = function(d, mb) {
|
|
4653
|
+
var t = [];
|
|
4654
|
+
for (var i = 0; i < d.length; ++i) {
|
|
4655
|
+
if (d[i])
|
|
4656
|
+
t.push({ s: i, f: d[i] });
|
|
4657
|
+
}
|
|
4658
|
+
var s = t.length;
|
|
4659
|
+
var t2 = t.slice();
|
|
4660
|
+
if (!s)
|
|
4661
|
+
return { t: et, l: 0 };
|
|
4662
|
+
if (s == 1) {
|
|
4663
|
+
var v = new u8(t[0].s + 1);
|
|
4664
|
+
v[t[0].s] = 1;
|
|
4665
|
+
return { t: v, l: 1 };
|
|
4666
|
+
}
|
|
4667
|
+
t.sort(function(a, b) {
|
|
4668
|
+
return a.f - b.f;
|
|
4669
|
+
});
|
|
4670
|
+
t.push({ s: -1, f: 25001 });
|
|
4671
|
+
var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;
|
|
4672
|
+
t[0] = { s: -1, f: l.f + r.f, l, r };
|
|
4673
|
+
while (i1 != s - 1) {
|
|
4674
|
+
l = t[t[i0].f < t[i2].f ? i0++ : i2++];
|
|
4675
|
+
r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];
|
|
4676
|
+
t[i1++] = { s: -1, f: l.f + r.f, l, r };
|
|
4677
|
+
}
|
|
4678
|
+
var maxSym = t2[0].s;
|
|
4679
|
+
for (var i = 1; i < s; ++i) {
|
|
4680
|
+
if (t2[i].s > maxSym)
|
|
4681
|
+
maxSym = t2[i].s;
|
|
4682
|
+
}
|
|
4683
|
+
var tr = new u16(maxSym + 1);
|
|
4684
|
+
var mbt = ln(t[i1 - 1], tr, 0);
|
|
4685
|
+
if (mbt > mb) {
|
|
4686
|
+
var i = 0, dt = 0;
|
|
4687
|
+
var lft = mbt - mb, cst = 1 << lft;
|
|
4688
|
+
t2.sort(function(a, b) {
|
|
4689
|
+
return tr[b.s] - tr[a.s] || a.f - b.f;
|
|
4690
|
+
});
|
|
4691
|
+
for (; i < s; ++i) {
|
|
4692
|
+
var i2_1 = t2[i].s;
|
|
4693
|
+
if (tr[i2_1] > mb) {
|
|
4694
|
+
dt += cst - (1 << mbt - tr[i2_1]);
|
|
4695
|
+
tr[i2_1] = mb;
|
|
4696
|
+
} else
|
|
4697
|
+
break;
|
|
4698
|
+
}
|
|
4699
|
+
dt >>= lft;
|
|
4700
|
+
while (dt > 0) {
|
|
4701
|
+
var i2_2 = t2[i].s;
|
|
4702
|
+
if (tr[i2_2] < mb)
|
|
4703
|
+
dt -= 1 << mb - tr[i2_2]++ - 1;
|
|
4704
|
+
else
|
|
4705
|
+
++i;
|
|
4706
|
+
}
|
|
4707
|
+
for (; i >= 0 && dt; --i) {
|
|
4708
|
+
var i2_3 = t2[i].s;
|
|
4709
|
+
if (tr[i2_3] == mb) {
|
|
4710
|
+
--tr[i2_3];
|
|
4711
|
+
++dt;
|
|
4712
|
+
}
|
|
4713
|
+
}
|
|
4714
|
+
mbt = mb;
|
|
4715
|
+
}
|
|
4716
|
+
return { t: new u8(tr), l: mbt };
|
|
4717
|
+
};
|
|
4718
|
+
var ln = function(n, l, d) {
|
|
4719
|
+
return n.s == -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d;
|
|
4720
|
+
};
|
|
4721
|
+
var lc = function(c) {
|
|
4722
|
+
var s = c.length;
|
|
4723
|
+
while (s && !c[--s])
|
|
4724
|
+
;
|
|
4725
|
+
var cl = new u16(++s);
|
|
4726
|
+
var cli = 0, cln = c[0], cls = 1;
|
|
4727
|
+
var w = function(v) {
|
|
4728
|
+
cl[cli++] = v;
|
|
4729
|
+
};
|
|
4730
|
+
for (var i = 1; i <= s; ++i) {
|
|
4731
|
+
if (c[i] == cln && i != s)
|
|
4732
|
+
++cls;
|
|
4733
|
+
else {
|
|
4734
|
+
if (!cln && cls > 2) {
|
|
4735
|
+
for (; cls > 138; cls -= 138)
|
|
4736
|
+
w(32754);
|
|
4737
|
+
if (cls > 2) {
|
|
4738
|
+
w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305);
|
|
4739
|
+
cls = 0;
|
|
4740
|
+
}
|
|
4741
|
+
} else if (cls > 3) {
|
|
4742
|
+
w(cln), --cls;
|
|
4743
|
+
for (; cls > 6; cls -= 6)
|
|
4744
|
+
w(8304);
|
|
4745
|
+
if (cls > 2)
|
|
4746
|
+
w(cls - 3 << 5 | 8208), cls = 0;
|
|
4747
|
+
}
|
|
4748
|
+
while (cls--)
|
|
4749
|
+
w(cln);
|
|
4750
|
+
cls = 1;
|
|
4751
|
+
cln = c[i];
|
|
4752
|
+
}
|
|
4753
|
+
}
|
|
4754
|
+
return { c: cl.subarray(0, cli), n: s };
|
|
4755
|
+
};
|
|
4756
|
+
var clen = function(cf, cl) {
|
|
4757
|
+
var l = 0;
|
|
4758
|
+
for (var i = 0; i < cl.length; ++i)
|
|
4759
|
+
l += cf[i] * cl[i];
|
|
4760
|
+
return l;
|
|
4761
|
+
};
|
|
4762
|
+
var wfblk = function(out, pos, dat) {
|
|
4763
|
+
var s = dat.length;
|
|
4764
|
+
var o = shft(pos + 2);
|
|
4765
|
+
out[o] = s & 255;
|
|
4766
|
+
out[o + 1] = s >> 8;
|
|
4767
|
+
out[o + 2] = out[o] ^ 255;
|
|
4768
|
+
out[o + 3] = out[o + 1] ^ 255;
|
|
4769
|
+
for (var i = 0; i < s; ++i)
|
|
4770
|
+
out[o + i + 4] = dat[i];
|
|
4771
|
+
return (o + 4 + s) * 8;
|
|
4772
|
+
};
|
|
4773
|
+
var wblk = function(dat, out, final, syms, lf, df, eb, li, bs, bl, p) {
|
|
4774
|
+
wbits(out, p++, final);
|
|
4775
|
+
++lf[256];
|
|
4776
|
+
var _a2 = hTree(lf, 15), dlt = _a2.t, mlb = _a2.l;
|
|
4777
|
+
var _b2 = hTree(df, 15), ddt = _b2.t, mdb = _b2.l;
|
|
4778
|
+
var _c = lc(dlt), lclt = _c.c, nlc = _c.n;
|
|
4779
|
+
var _d = lc(ddt), lcdt = _d.c, ndc = _d.n;
|
|
4780
|
+
var lcfreq = new u16(19);
|
|
4781
|
+
for (var i = 0; i < lclt.length; ++i)
|
|
4782
|
+
++lcfreq[lclt[i] & 31];
|
|
4783
|
+
for (var i = 0; i < lcdt.length; ++i)
|
|
4784
|
+
++lcfreq[lcdt[i] & 31];
|
|
4785
|
+
var _e = hTree(lcfreq, 7), lct = _e.t, mlcb = _e.l;
|
|
4786
|
+
var nlcc = 19;
|
|
4787
|
+
for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)
|
|
4788
|
+
;
|
|
4789
|
+
var flen = bl + 5 << 3;
|
|
4790
|
+
var ftlen = clen(lf, flt) + clen(df, fdt) + eb;
|
|
4791
|
+
var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + 2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18];
|
|
4792
|
+
if (bs >= 0 && flen <= ftlen && flen <= dtlen)
|
|
4793
|
+
return wfblk(out, p, dat.subarray(bs, bs + bl));
|
|
4794
|
+
var lm, ll, dm, dl;
|
|
4795
|
+
wbits(out, p, 1 + (dtlen < ftlen)), p += 2;
|
|
4796
|
+
if (dtlen < ftlen) {
|
|
4797
|
+
lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;
|
|
4798
|
+
var llm = hMap(lct, mlcb, 0);
|
|
4799
|
+
wbits(out, p, nlc - 257);
|
|
4800
|
+
wbits(out, p + 5, ndc - 1);
|
|
4801
|
+
wbits(out, p + 10, nlcc - 4);
|
|
4802
|
+
p += 14;
|
|
4803
|
+
for (var i = 0; i < nlcc; ++i)
|
|
4804
|
+
wbits(out, p + 3 * i, lct[clim[i]]);
|
|
4805
|
+
p += 3 * nlcc;
|
|
4806
|
+
var lcts = [lclt, lcdt];
|
|
4807
|
+
for (var it = 0; it < 2; ++it) {
|
|
4808
|
+
var clct = lcts[it];
|
|
4809
|
+
for (var i = 0; i < clct.length; ++i) {
|
|
4810
|
+
var len = clct[i] & 31;
|
|
4811
|
+
wbits(out, p, llm[len]), p += lct[len];
|
|
4812
|
+
if (len > 15)
|
|
4813
|
+
wbits(out, p, clct[i] >> 5 & 127), p += clct[i] >> 12;
|
|
4814
|
+
}
|
|
4815
|
+
}
|
|
4816
|
+
} else {
|
|
4817
|
+
lm = flm, ll = flt, dm = fdm, dl = fdt;
|
|
4818
|
+
}
|
|
4819
|
+
for (var i = 0; i < li; ++i) {
|
|
4820
|
+
var sym = syms[i];
|
|
4821
|
+
if (sym > 255) {
|
|
4822
|
+
var len = sym >> 18 & 31;
|
|
4823
|
+
wbits16(out, p, lm[len + 257]), p += ll[len + 257];
|
|
4824
|
+
if (len > 7)
|
|
4825
|
+
wbits(out, p, sym >> 23 & 31), p += fleb[len];
|
|
4826
|
+
var dst = sym & 31;
|
|
4827
|
+
wbits16(out, p, dm[dst]), p += dl[dst];
|
|
4828
|
+
if (dst > 3)
|
|
4829
|
+
wbits16(out, p, sym >> 5 & 8191), p += fdeb[dst];
|
|
4830
|
+
} else {
|
|
4831
|
+
wbits16(out, p, lm[sym]), p += ll[sym];
|
|
4832
|
+
}
|
|
4833
|
+
}
|
|
4834
|
+
wbits16(out, p, lm[256]);
|
|
4835
|
+
return p + ll[256];
|
|
4836
|
+
};
|
|
4837
|
+
var deo = /* @__PURE__ */ new i32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);
|
|
4838
|
+
var et = /* @__PURE__ */ new u8(0);
|
|
4839
|
+
var dflt = function(dat, lvl, plvl, pre, post, st) {
|
|
4840
|
+
var s = st.z || dat.length;
|
|
4841
|
+
var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post);
|
|
4842
|
+
var w = o.subarray(pre, o.length - post);
|
|
4843
|
+
var lst = st.l;
|
|
4844
|
+
var pos = (st.r || 0) & 7;
|
|
4845
|
+
if (lvl) {
|
|
4846
|
+
if (pos)
|
|
4847
|
+
w[0] = st.r >> 3;
|
|
4848
|
+
var opt = deo[lvl - 1];
|
|
4849
|
+
var n = opt >> 13, c = opt & 8191;
|
|
4850
|
+
var msk_1 = (1 << plvl) - 1;
|
|
4851
|
+
var prev = st.p || new u16(32768), head = st.h || new u16(msk_1 + 1);
|
|
4852
|
+
var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;
|
|
4853
|
+
var hsh = function(i2) {
|
|
4854
|
+
return (dat[i2] ^ dat[i2 + 1] << bs1_1 ^ dat[i2 + 2] << bs2_1) & msk_1;
|
|
4855
|
+
};
|
|
4856
|
+
var syms = new i32(25e3);
|
|
4857
|
+
var lf = new u16(288), df = new u16(32);
|
|
4858
|
+
var lc_1 = 0, eb = 0, i = st.i || 0, li = 0, wi = st.w || 0, bs = 0;
|
|
4859
|
+
for (; i + 2 < s; ++i) {
|
|
4860
|
+
var hv = hsh(i);
|
|
4861
|
+
var imod = i & 32767, pimod = head[hv];
|
|
4862
|
+
prev[imod] = pimod;
|
|
4863
|
+
head[hv] = imod;
|
|
4864
|
+
if (wi <= i) {
|
|
4865
|
+
var rem = s - i;
|
|
4866
|
+
if ((lc_1 > 7e3 || li > 24576) && (rem > 423 || !lst)) {
|
|
4867
|
+
pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);
|
|
4868
|
+
li = lc_1 = eb = 0, bs = i;
|
|
4869
|
+
for (var j = 0; j < 286; ++j)
|
|
4870
|
+
lf[j] = 0;
|
|
4871
|
+
for (var j = 0; j < 30; ++j)
|
|
4872
|
+
df[j] = 0;
|
|
4873
|
+
}
|
|
4874
|
+
var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;
|
|
4875
|
+
if (rem > 2 && hv == hsh(i - dif)) {
|
|
4876
|
+
var maxn = Math.min(n, rem) - 1;
|
|
4877
|
+
var maxd = Math.min(32767, i);
|
|
4878
|
+
var ml = Math.min(258, rem);
|
|
4879
|
+
while (dif <= maxd && --ch_1 && imod != pimod) {
|
|
4880
|
+
if (dat[i + l] == dat[i + l - dif]) {
|
|
4881
|
+
var nl = 0;
|
|
4882
|
+
for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)
|
|
4883
|
+
;
|
|
4884
|
+
if (nl > l) {
|
|
4885
|
+
l = nl, d = dif;
|
|
4886
|
+
if (nl > maxn)
|
|
4887
|
+
break;
|
|
4888
|
+
var mmd = Math.min(dif, nl - 2);
|
|
4889
|
+
var md = 0;
|
|
4890
|
+
for (var j = 0; j < mmd; ++j) {
|
|
4891
|
+
var ti = i - dif + j & 32767;
|
|
4892
|
+
var pti = prev[ti];
|
|
4893
|
+
var cd = ti - pti & 32767;
|
|
4894
|
+
if (cd > md)
|
|
4895
|
+
md = cd, pimod = ti;
|
|
4896
|
+
}
|
|
4897
|
+
}
|
|
4898
|
+
}
|
|
4899
|
+
imod = pimod, pimod = prev[imod];
|
|
4900
|
+
dif += imod - pimod & 32767;
|
|
4901
|
+
}
|
|
4902
|
+
}
|
|
4903
|
+
if (d) {
|
|
4904
|
+
syms[li++] = 268435456 | revfl[l] << 18 | revfd[d];
|
|
4905
|
+
var lin = revfl[l] & 31, din = revfd[d] & 31;
|
|
4906
|
+
eb += fleb[lin] + fdeb[din];
|
|
4907
|
+
++lf[257 + lin];
|
|
4908
|
+
++df[din];
|
|
4909
|
+
wi = i + l;
|
|
4910
|
+
++lc_1;
|
|
4911
|
+
} else {
|
|
4912
|
+
syms[li++] = dat[i];
|
|
4913
|
+
++lf[dat[i]];
|
|
4914
|
+
}
|
|
4915
|
+
}
|
|
4916
|
+
}
|
|
4917
|
+
for (i = Math.max(i, wi); i < s; ++i) {
|
|
4918
|
+
syms[li++] = dat[i];
|
|
4919
|
+
++lf[dat[i]];
|
|
4920
|
+
}
|
|
4921
|
+
pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);
|
|
4922
|
+
if (!lst) {
|
|
4923
|
+
st.r = pos & 7 | w[pos / 8 | 0] << 3;
|
|
4924
|
+
pos -= 7;
|
|
4925
|
+
st.h = head, st.p = prev, st.i = i, st.w = wi;
|
|
4926
|
+
}
|
|
4927
|
+
} else {
|
|
4928
|
+
for (var i = st.w || 0; i < s + lst; i += 65535) {
|
|
4929
|
+
var e = i + 65535;
|
|
4930
|
+
if (e >= s) {
|
|
4931
|
+
w[pos / 8 | 0] = lst;
|
|
4932
|
+
e = s;
|
|
4933
|
+
}
|
|
4934
|
+
pos = wfblk(w, pos + 1, dat.subarray(i, e));
|
|
4935
|
+
}
|
|
4936
|
+
st.i = s;
|
|
4937
|
+
}
|
|
4938
|
+
return slc(o, 0, pre + shft(pos) + post);
|
|
4939
|
+
};
|
|
4940
|
+
var dopt = function(dat, opt, pre, post, st) {
|
|
4941
|
+
if (!st) {
|
|
4942
|
+
st = { l: 1 };
|
|
4943
|
+
if (opt.dictionary) {
|
|
4944
|
+
var dict = opt.dictionary.subarray(-32768);
|
|
4945
|
+
var newDat = new u8(dict.length + dat.length);
|
|
4946
|
+
newDat.set(dict);
|
|
4947
|
+
newDat.set(dat, dict.length);
|
|
4948
|
+
dat = newDat;
|
|
4949
|
+
st.w = dict.length;
|
|
4950
|
+
}
|
|
4951
|
+
}
|
|
4952
|
+
return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? st.l ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 20 : 12 + opt.mem, pre, post, st);
|
|
4953
|
+
};
|
|
4954
|
+
function deflateSync(data, opts) {
|
|
4955
|
+
return dopt(data, opts || {}, 0, 0);
|
|
4956
|
+
}
|
|
4957
|
+
function inflateSync(data, opts) {
|
|
4958
|
+
return inflt(data, { i: 2 }, opts && opts.out, opts && opts.dictionary);
|
|
4959
|
+
}
|
|
4960
|
+
var td = typeof TextDecoder != "undefined" && /* @__PURE__ */ new TextDecoder();
|
|
4961
|
+
var tds = 0;
|
|
4962
|
+
try {
|
|
4963
|
+
td.decode(et, { stream: true });
|
|
4964
|
+
tds = 1;
|
|
4965
|
+
} catch (e) {
|
|
4966
|
+
}
|
|
4967
|
+
|
|
4270
4968
|
// src/capabilities/verbs.ts
|
|
4271
4969
|
var CAPABILITY_VERBS = [
|
|
4272
4970
|
"read-stream",
|
|
@@ -4308,18 +5006,53 @@ function isRecord(value) {
|
|
|
4308
5006
|
|
|
4309
5007
|
// src/wire/framing.ts
|
|
4310
5008
|
var MAX_FRAME_LENGTH = 1024 * 1024;
|
|
5009
|
+
var MAX_DECODED_LENGTH = 4 * 1024 * 1024;
|
|
5010
|
+
var COMPRESSION_THRESHOLD = 4 * 1024;
|
|
5011
|
+
var FRAME_FORMAT_DEFLATE = 1;
|
|
5012
|
+
var JSON_OPEN_BRACE = 123;
|
|
5013
|
+
var DEFLATE_HEADER_LENGTH = 5;
|
|
4311
5014
|
function encodeMessage(message) {
|
|
4312
|
-
const
|
|
4313
|
-
if (
|
|
5015
|
+
const json = new TextEncoder().encode(JSON.stringify(message));
|
|
5016
|
+
if (json.length > MAX_DECODED_LENGTH) {
|
|
5017
|
+
throw new Error(`Encoded bridge message exceeds ${MAX_DECODED_LENGTH} bytes before compression`);
|
|
5018
|
+
}
|
|
5019
|
+
let frame = json;
|
|
5020
|
+
if (json.length > COMPRESSION_THRESHOLD) {
|
|
5021
|
+
const compressed = deflateSync(json);
|
|
5022
|
+
if (compressed.length + DEFLATE_HEADER_LENGTH < json.length) {
|
|
5023
|
+
frame = new Uint8Array(DEFLATE_HEADER_LENGTH + compressed.length);
|
|
5024
|
+
frame[0] = FRAME_FORMAT_DEFLATE;
|
|
5025
|
+
new DataView(frame.buffer).setUint32(1, json.length, true);
|
|
5026
|
+
frame.set(compressed, DEFLATE_HEADER_LENGTH);
|
|
5027
|
+
}
|
|
5028
|
+
}
|
|
5029
|
+
if (frame.length > MAX_FRAME_LENGTH) {
|
|
4314
5030
|
throw new Error(`Encoded bridge message exceeds ${MAX_FRAME_LENGTH} bytes`);
|
|
4315
5031
|
}
|
|
4316
|
-
return
|
|
5032
|
+
return frame;
|
|
4317
5033
|
}
|
|
4318
5034
|
function decodeMessage(bytes) {
|
|
4319
5035
|
if (bytes.length > MAX_FRAME_LENGTH) {
|
|
4320
5036
|
throw new Error(`Bridge message frame exceeds ${MAX_FRAME_LENGTH} bytes`);
|
|
4321
5037
|
}
|
|
4322
|
-
|
|
5038
|
+
if (bytes.length === 0) throw new Error("Bridge message frame is empty");
|
|
5039
|
+
let json;
|
|
5040
|
+
if (bytes[0] === JSON_OPEN_BRACE) {
|
|
5041
|
+
json = bytes;
|
|
5042
|
+
} else if (bytes[0] === FRAME_FORMAT_DEFLATE) {
|
|
5043
|
+
if (bytes.length < DEFLATE_HEADER_LENGTH + 1) throw new Error("Compressed bridge message frame is truncated");
|
|
5044
|
+
const declaredLength = new DataView(bytes.buffer, bytes.byteOffset).getUint32(1, true);
|
|
5045
|
+
if (declaredLength === 0 || declaredLength > MAX_DECODED_LENGTH) {
|
|
5046
|
+
throw new Error(`Compressed bridge message declares an invalid decoded length: ${declaredLength}`);
|
|
5047
|
+
}
|
|
5048
|
+
json = inflateSync(bytes.subarray(DEFLATE_HEADER_LENGTH), { out: new Uint8Array(declaredLength) });
|
|
5049
|
+
if (json.length !== declaredLength) {
|
|
5050
|
+
throw new Error("Compressed bridge message decoded length does not match its declaration");
|
|
5051
|
+
}
|
|
5052
|
+
} else {
|
|
5053
|
+
throw new Error(`Unknown bridge message frame format: 0x${bytes[0].toString(16)}`);
|
|
5054
|
+
}
|
|
5055
|
+
const parsed = JSON.parse(new TextDecoder().decode(json));
|
|
4323
5056
|
return validateBridgeMessage(parsed);
|
|
4324
5057
|
}
|
|
4325
5058
|
function validateEvent(event) {
|
|
@@ -4448,6 +5181,24 @@ function parseTranscriptEntriesWire(payload) {
|
|
|
4448
5181
|
return entry;
|
|
4449
5182
|
});
|
|
4450
5183
|
}
|
|
5184
|
+
function parseTranscriptEventPayload(payload) {
|
|
5185
|
+
if (!isRecord(payload)) throw new Error("transcript payload must be an object");
|
|
5186
|
+
const revision = requireNumber(payload, "revision", "transcript payload");
|
|
5187
|
+
const totalEntries = requireNumber(payload, "totalEntries", "transcript payload");
|
|
5188
|
+
if (!Number.isInteger(revision) || revision < 0) throw new Error('transcript payload has an invalid "revision"');
|
|
5189
|
+
if (!Number.isInteger(totalEntries) || totalEntries < 0) throw new Error('transcript payload has an invalid "totalEntries"');
|
|
5190
|
+
if (payload.mode === "reset") return { mode: "reset", revision, totalEntries };
|
|
5191
|
+
if (payload.mode !== "delta") throw new Error('transcript payload has an invalid "mode"');
|
|
5192
|
+
if (!Array.isArray(payload.upserts)) throw new Error('transcript delta is missing "upserts"');
|
|
5193
|
+
const upserts = payload.upserts.map((upsert, position) => {
|
|
5194
|
+
if (!isRecord(upsert) || typeof upsert.index !== "number" || !Number.isInteger(upsert.index) || upsert.index < 0) {
|
|
5195
|
+
throw new Error(`transcript delta upsert ${position} has an invalid "index"`);
|
|
5196
|
+
}
|
|
5197
|
+
if (!isTranscriptEntryWire(upsert.entry)) throw new Error(`transcript delta upsert ${position} has a malformed "entry"`);
|
|
5198
|
+
return { index: upsert.index, entry: upsert.entry };
|
|
5199
|
+
});
|
|
5200
|
+
return { mode: "delta", revision, totalEntries, upserts };
|
|
5201
|
+
}
|
|
4451
5202
|
function isActivityStateWire(value) {
|
|
4452
5203
|
return value === "thinking" || value === "idle" || value === "permission";
|
|
4453
5204
|
}
|
|
@@ -4626,13 +5377,45 @@ function parseReadStreamResponsePayload(payload) {
|
|
|
4626
5377
|
awaitedPromptId: payload.awaitedPromptId ?? null
|
|
4627
5378
|
};
|
|
4628
5379
|
}
|
|
5380
|
+
function parseTranscriptWindowResponsePayload(payload) {
|
|
5381
|
+
if (!isRecord(payload)) throw new Error("transcript-window response must be an object");
|
|
5382
|
+
const { revision, totalEntries, startIndex } = payload;
|
|
5383
|
+
if (typeof revision !== "number" || !Number.isInteger(revision) || revision < 0) {
|
|
5384
|
+
throw new Error('transcript-window response has an invalid "revision"');
|
|
5385
|
+
}
|
|
5386
|
+
if (typeof totalEntries !== "number" || !Number.isInteger(totalEntries) || totalEntries < 0) {
|
|
5387
|
+
throw new Error('transcript-window response has an invalid "totalEntries"');
|
|
5388
|
+
}
|
|
5389
|
+
if (typeof startIndex !== "number" || !Number.isInteger(startIndex) || startIndex < 0) {
|
|
5390
|
+
throw new Error('transcript-window response has an invalid "startIndex"');
|
|
5391
|
+
}
|
|
5392
|
+
return {
|
|
5393
|
+
revision,
|
|
5394
|
+
totalEntries,
|
|
5395
|
+
startIndex,
|
|
5396
|
+
entries: parseTranscriptEntriesWire(payload.entries)
|
|
5397
|
+
};
|
|
5398
|
+
}
|
|
4629
5399
|
function parseReadStreamRequestPayload(payload) {
|
|
4630
5400
|
if (!isRecord(payload)) throw new Error("read-stream payload must be an object");
|
|
4631
5401
|
if (typeof payload.sessionId !== "string") throw new Error('read-stream payload missing "sessionId"');
|
|
4632
|
-
if (payload.action !== "subscribe" && payload.action !== "unsubscribe") {
|
|
5402
|
+
if (payload.action !== "subscribe" && payload.action !== "unsubscribe" && payload.action !== "transcript-window") {
|
|
4633
5403
|
throw new Error('read-stream payload has an invalid "action"');
|
|
4634
5404
|
}
|
|
4635
|
-
|
|
5405
|
+
const request = { sessionId: payload.sessionId, action: payload.action };
|
|
5406
|
+
if (payload.beforeIndex !== void 0) {
|
|
5407
|
+
if (typeof payload.beforeIndex !== "number" || !Number.isInteger(payload.beforeIndex) || payload.beforeIndex < 0) {
|
|
5408
|
+
throw new Error('read-stream payload has an invalid "beforeIndex"');
|
|
5409
|
+
}
|
|
5410
|
+
request.beforeIndex = payload.beforeIndex;
|
|
5411
|
+
}
|
|
5412
|
+
if (payload.limit !== void 0) {
|
|
5413
|
+
if (typeof payload.limit !== "number" || !Number.isInteger(payload.limit) || payload.limit < 1) {
|
|
5414
|
+
throw new Error('read-stream payload has an invalid "limit"');
|
|
5415
|
+
}
|
|
5416
|
+
request.limit = payload.limit;
|
|
5417
|
+
}
|
|
5418
|
+
return request;
|
|
4636
5419
|
}
|
|
4637
5420
|
function parseReadBoardResponsePayload(payload) {
|
|
4638
5421
|
if (!isRecord(payload)) throw new Error("read-board response must be an object");
|
|
@@ -4981,7 +5764,7 @@ function isBridgeEvent(value) {
|
|
|
4981
5764
|
case "transcript": {
|
|
4982
5765
|
if (typeof value.sessionId !== "string" || typeof value.taskId !== "string") return false;
|
|
4983
5766
|
try {
|
|
4984
|
-
|
|
5767
|
+
parseTranscriptEventPayload(value.payload);
|
|
4985
5768
|
return true;
|
|
4986
5769
|
} catch {
|
|
4987
5770
|
return false;
|
|
@@ -5019,12 +5802,14 @@ function isBridgeEvent(value) {
|
|
|
5019
5802
|
BOARD_TOOL_READ_NAMES,
|
|
5020
5803
|
BOARD_TOOL_WRITE_NAMES,
|
|
5021
5804
|
CAPABILITY_VERBS,
|
|
5805
|
+
COMPRESSION_THRESHOLD,
|
|
5022
5806
|
CipherState,
|
|
5023
5807
|
ED25519_KEY_LENGTH,
|
|
5024
5808
|
FrameTag,
|
|
5025
5809
|
HandshakeState,
|
|
5026
5810
|
IKPSK0_PATTERN,
|
|
5027
5811
|
KK_PATTERN,
|
|
5812
|
+
MAX_DECODED_LENGTH,
|
|
5028
5813
|
MAX_FRAME_LENGTH,
|
|
5029
5814
|
PAIRING_URI_SCHEME,
|
|
5030
5815
|
PROTOCOL_VERSION,
|
|
@@ -5073,6 +5858,8 @@ function isBridgeEvent(value) {
|
|
|
5073
5858
|
parseSessionEventWire,
|
|
5074
5859
|
parseSessionUsageWire,
|
|
5075
5860
|
parseTranscriptEntriesWire,
|
|
5861
|
+
parseTranscriptEventPayload,
|
|
5862
|
+
parseTranscriptWindowResponsePayload,
|
|
5076
5863
|
randomBytes,
|
|
5077
5864
|
rosterDeviceCapabilitySet,
|
|
5078
5865
|
signRosterEntry,
|