@honeybbq/teamspeak-client 0.3.1 → 0.3.2

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.
Files changed (59) hide show
  1. package/dist/address-BR-5unVo.cjs.map +1 -1
  2. package/dist/address-BfmovVpp.js.map +1 -1
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/client.d.ts +16 -1
  5. package/dist/client.d.ts.map +1 -1
  6. package/dist/command/index.cjs +1 -1
  7. package/dist/command/index.mjs +1 -1
  8. package/dist/command/parser.d.ts.map +1 -1
  9. package/dist/{crypt-init2-D70ha4LB.js → crypt-init2-BcGT--df.js} +2 -2
  10. package/dist/{crypt-init2-D70ha4LB.js.map → crypt-init2-BcGT--df.js.map} +1 -1
  11. package/dist/{crypt-init2-DparLekm.cjs → crypt-init2-Bkee1YxV.cjs} +2 -2
  12. package/dist/{crypt-init2-DparLekm.cjs.map → crypt-init2-Bkee1YxV.cjs.map} +1 -1
  13. package/dist/crypto/identity.d.ts +13 -1
  14. package/dist/crypto/identity.d.ts.map +1 -1
  15. package/dist/crypto/index.cjs +1 -1
  16. package/dist/crypto/index.d.ts +2 -1
  17. package/dist/crypto/index.d.ts.map +1 -1
  18. package/dist/crypto/index.mjs +3 -3
  19. package/dist/{crypto-CDlweUL3.cjs → crypto-BfDd9DP6.cjs} +2 -2
  20. package/dist/{crypto-CDlweUL3.cjs.map → crypto-BfDd9DP6.cjs.map} +1 -1
  21. package/dist/{crypto-Bg02m4ZE.js → crypto-DLV3oH5F.js} +12 -12
  22. package/dist/{crypto-Bg02m4ZE.js.map → crypto-DLV3oH5F.js.map} +1 -1
  23. package/dist/{handler-DI_abe9c.js → handler-BpdZFsKo.js} +104 -102
  24. package/dist/handler-BpdZFsKo.js.map +1 -0
  25. package/dist/handler-aywHvv7I.cjs +2 -0
  26. package/dist/handler-aywHvv7I.cjs.map +1 -0
  27. package/dist/handshake/index.cjs +1 -1
  28. package/dist/handshake/index.mjs +1 -1
  29. package/dist/handshake.d.ts +9 -0
  30. package/dist/handshake.d.ts.map +1 -1
  31. package/dist/index.cjs +2 -2
  32. package/dist/index.cjs.map +1 -1
  33. package/dist/index.mjs +294 -290
  34. package/dist/index.mjs.map +1 -1
  35. package/dist/{parser-DZMv3Jm-.js → parser-BX8NEiBe.js} +4 -4
  36. package/dist/parser-BX8NEiBe.js.map +1 -0
  37. package/dist/parser-BfwYH2fT.cjs +2 -0
  38. package/dist/parser-BfwYH2fT.cjs.map +1 -0
  39. package/dist/{primitives-xIr6Tjk4.js → primitives-CdX74Rgu.js} +194 -190
  40. package/dist/primitives-CdX74Rgu.js.map +1 -0
  41. package/dist/primitives-DkwW7wcP.cjs +2 -0
  42. package/dist/primitives-DkwW7wcP.cjs.map +1 -0
  43. package/dist/transfer.d.ts.map +1 -1
  44. package/dist/transport/handler.d.ts +9 -1
  45. package/dist/transport/handler.d.ts.map +1 -1
  46. package/dist/transport/index.cjs +1 -1
  47. package/dist/transport/index.mjs +1 -1
  48. package/dist/types.d.ts +11 -0
  49. package/dist/types.d.ts.map +1 -1
  50. package/package.json +5 -2
  51. package/dist/handler-DI_abe9c.js.map +0 -1
  52. package/dist/handler-DuwoO5RC.cjs +0 -2
  53. package/dist/handler-DuwoO5RC.cjs.map +0 -1
  54. package/dist/parser-CL33R9tr.cjs +0 -2
  55. package/dist/parser-CL33R9tr.cjs.map +0 -1
  56. package/dist/parser-DZMv3Jm-.js.map +0 -1
  57. package/dist/primitives-cNNAeFCo.cjs +0 -2
  58. package/dist/primitives-cNNAeFCo.cjs.map +0 -1
  59. package/dist/primitives-xIr6Tjk4.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"transfer.d.ts","sourceRoot":"","sources":["../src/transfer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAG1E,KAAK,cAAc,GACf,cAAc,GACd,gBAAgB,GAChB,OAAO,YAAY,EAAE,sBAAsB,CAAC;AAEhD,qBAAa,mBAAmB;;IAI9B,QAAQ,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAQ5D;IAED,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE9B;IAED,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,IAAI,CAGjD;IAED,KAAK,IAAI,IAAI,CAGZ;CACF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,OAAO,UAAU,EAAE,MAAM,CAAC,CAmBpC;AAED,sDAAsD;AACtD,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,QAAQ,GACb,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wDAAwD;AACxD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,gBAAgB,EACtB,IAAI,EAAE,QAAQ,GACb,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,OAAO,GACjB,MAAM,CAWR;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,MAAM,CASR;AAED,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,CAAC"}
1
+ {"version":3,"file":"transfer.d.ts","sourceRoot":"","sources":["../src/transfer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAI1E,KAAK,cAAc,GACf,cAAc,GACd,gBAAgB,GAChB,OAAO,YAAY,EAAE,sBAAsB,CAAC;AAEhD,qBAAa,mBAAmB;;IAI9B,QAAQ,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,CAAC,CAQ5D;IAED,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAE9B;IAED,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,IAAI,CAGjD;IAED,KAAK,IAAI,IAAI,CAGZ;CACF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,OAAO,UAAU,EAAE,MAAM,CAAC,CAmBpC;AAED,sDAAsD;AACtD,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,QAAQ,GACb,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wDAAwD;AACxD,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,gBAAgB,EACtB,IAAI,EAAE,QAAQ,GACb,OAAO,CAAC,IAAI,CAAC,CAQf;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,OAAO,GACjB,MAAM,CAWR;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACZ,MAAM,CASR;AAED,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,CAAC"}
@@ -2,11 +2,19 @@ import { type Socket as UdpSocket } from "node:dgram";
2
2
  import type { Crypt } from "../crypto/crypt.js";
3
3
  import type { Logger } from "../types.js";
4
4
  import { type Packet, PacketType } from "./packet.js";
5
+ /**
6
+ * Creates the UDP socket the client talks through.
7
+ *
8
+ * Receives the resolved address family (4 or 6) and returns a socket of that
9
+ * family. Supplying one lets an application route through a proxy or tunnel,
10
+ * or drive the client from something other than a real socket.
11
+ */
12
+ export type SocketFactory = (family: 4 | 6) => UdpSocket;
5
13
  export declare class PacketHandler {
6
14
  #private;
7
15
  onPacket: ((p: Packet) => void) | null;
8
16
  onClosed: ((err: Error | null) => void) | null;
9
- constructor(crypt: Crypt, logger?: Logger);
17
+ constructor(crypt: Crypt, logger?: Logger, socketFactory?: SocketFactory);
10
18
  setClientID(id: number): void;
11
19
  connect(addr: string): Promise<void>;
12
20
  start(conn: UdpSocket): void;
@@ -1 +1 @@
1
- {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/transport/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,IAAI,SAAS,EAAE,MAAM,YAAY,CAAC;AAGpE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EACL,KAAK,MAAM,EACX,UAAU,EAMX,MAAM,aAAa,CAAC;AAyBrB,qBAAa,aAAa;;IACxB,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAQ;IAC9C,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC,GAAG,IAAI,CAAQ;IAyBtD,YAAY,KAAK,EAAE,KAAK,EAAE,MAAM,GAAE,MAAmB,EAGpD;IAED,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAE5B;IAED,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBnC;IAED,KAAK,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAgC3B;IAED,oBAAoB,IAAI,IAAI,CAE3B;IAED,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAOnE;IAED,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CA6BrD;IAED,8EAA8E;IAC9E,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAwClF;IAED,KAAK,IAAI,IAAI,CAMZ;CAwcF"}
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../src/transport/handler.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,MAAM,IAAI,SAAS,EAAE,MAAM,YAAY,CAAC;AAGpE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EACL,KAAK,MAAM,EACX,UAAU,EAMX,MAAM,aAAa,CAAC;AAyBrB;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;AAEzD,qBAAa,aAAa;;IACxB,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAQ;IAC9C,QAAQ,EAAE,CAAC,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC,GAAG,IAAI,CAAQ;IA0BtD,YAAY,KAAK,EAAE,KAAK,EAAE,MAAM,GAAE,MAAmB,EAAE,aAAa,CAAC,EAAE,aAAa,EAInF;IAED,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAE5B;IAEK,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BzC;IAED,KAAK,CAAC,IAAI,EAAE,SAAS,GAAG,IAAI,CAgC3B;IAED,oBAAoB,IAAI,IAAI,CAE3B;IAED,UAAU,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAOnE;IAED,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CA6BrD;IAED,8EAA8E;IAC9E,iBAAiB,CAAC,IAAI,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAwClF;IAED,KAAK,IAAI,IAAI,CAMZ;CAwcF"}
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../handler-DuwoO5RC.cjs");exports.GenerationWindow=e.r,exports.PacketFlags=e.i,exports.PacketHandler=e.t,exports.PacketType=e.a,exports.Qlz=e.n,exports.buildC2SHeader=e.o,exports.isUnencrypted=e.s,exports.packetFlags=e.c,exports.packetType=e.l,exports.parseC2SHeader=e.u,exports.parseS2CHeader=e.d;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("../handler-aywHvv7I.cjs");exports.GenerationWindow=e.r,exports.PacketFlags=e.i,exports.PacketHandler=e.t,exports.PacketType=e.a,exports.Qlz=e.n,exports.buildC2SHeader=e.o,exports.isUnencrypted=e.s,exports.packetFlags=e.c,exports.packetType=e.l,exports.parseC2SHeader=e.u,exports.parseS2CHeader=e.d;
@@ -1,2 +1,2 @@
1
- import { a as e, c as t, d as n, i as r, l as i, n as a, o, r as s, s as c, t as l, u } from "../handler-DI_abe9c.js";
1
+ import { a as e, c as t, d as n, i as r, l as i, n as a, o, r as s, s as c, t as l, u } from "../handler-BpdZFsKo.js";
2
2
  export { s as GenerationWindow, r as PacketFlags, l as PacketHandler, e as PacketType, a as Qlz, o as buildC2SHeader, c as isUnencrypted, t as packetFlags, i as packetType, u as parseC2SHeader, n as parseS2CHeader };
package/dist/types.d.ts CHANGED
@@ -82,6 +82,8 @@ export interface EventMap {
82
82
  disconnected: Error | undefined;
83
83
  kicked: string;
84
84
  }
85
+ /** Creates a UDP socket of the given address family. */
86
+ export type SocketFactory = (family: 4 | 6) => import("node:dgram").Socket;
85
87
  export declare const enum ClientStatus {
86
88
  Disconnected = 0,
87
89
  Connecting = 1,
@@ -109,6 +111,15 @@ export interface AddrResolver {
109
111
  }
110
112
  export interface ClientOptions {
111
113
  logger?: Logger;
114
+ /**
115
+ * Creates the UDP socket the client talks through, given the address family
116
+ * the server's address resolved to.
117
+ *
118
+ * Supplying one lets an application route traffic through a proxy or tunnel,
119
+ * or drive the client from something other than a real socket. It is the only
120
+ * seam into the transport: without it the SDK always creates its own.
121
+ */
122
+ socketFactory?: SocketFactory;
112
123
  resolver?: AddrResolver;
113
124
  commandMiddleware?: CommandMiddleware[];
114
125
  eventMiddleware?: EventMiddleware[];
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@honeybbq/teamspeak-client",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "description": "TeamSpeak 3 client SDK for Node.js — a clean-room TypeScript port of the Go reference implementation",
5
5
  "keywords": [
6
6
  "client",
@@ -65,7 +65,10 @@
65
65
  "check": "pnpm typecheck && pnpm lint && pnpm fmt:check",
66
66
  "prepublishOnly": "pnpm run build",
67
67
  "example": "tsx examples/connect.ts",
68
- "test:integration": "TEAMSPEAK_ADDR=chenkr.cn vitest run src/integration.test.ts --reporter=verbose"
68
+ "test:integration": "vitest run src/integration.test.ts --reporter=verbose",
69
+ "test:integration:ts3": "TEAMSPEAK_ADDR=127.0.0.1:9987 TEAMSPEAK_DEFAULT_CHANNEL=Alpha TEAMSPEAK_PASSWORD_CHANNEL=Secret TEAMSPEAK_PASSWORD_CHANNEL_PASSWORD=hunter2 pnpm test:integration",
70
+ "test:integration:ts6": "TEAMSPEAK_ADDR=127.0.0.1:9988 TEAMSPEAK_DEFAULT_CHANNEL=Alpha TEAMSPEAK_PASSWORD_CHANNEL=Secret TEAMSPEAK_PASSWORD_CHANNEL_PASSWORD=hunter2 pnpm test:integration",
71
+ "test:integration:both": "pnpm test:integration:ts3 && pnpm test:integration:ts6"
69
72
  },
70
73
  "dependencies": {
71
74
  "@noble/curves": "^2.0.1"
@@ -1 +0,0 @@
1
- {"version":3,"file":"handler-DI_abe9c.js","names":["noopLogger","splitHostPort","PacketType","\"Voice\"","\"VoiceWhisper\"","\"Command\"","\"CommandLow\"","\"Ping\"","\"Pong\"","\"Ack\"","\"AckLow\"","\"Init1\"","PacketFlags","\"Fragmented\"","\"NewProtocol\"","\"Compressed\"","\"Unencrypted\"","packetType","p","packetFlags","isUnencrypted","buildC2SHeader","header","view","parseS2CHeader","raw","parseC2SHeader","GenerationWindow","#mod","mod","#receiveWindow","windowSize","#generation","amount","newBaseOffset","#mappedBaseOffset","genStep","moveDist","mappedValue","maxOffset","#isNextGen","TABLE_SIZE","Qlz","parseQlzHeader","data","dest","decompressedSize","flags","headerLen","#hashtable","state","#ensureControl","#processReference","#processLiteral","st","b1","b2","hash","matchlen","offset","i","end","#updateHashtable","threshold","v","RECEIVE_PACKET_WINDOW_SIZE","PING_INTERVAL_MS","PACKET_TIMEOUT_MS","MAX_RETRY_INTERVAL_MS","TAG_SIZE","VOICE_HEADER_SIZE","WHISPER_HEADER_SIZE","RESEND_BASE_INTERVAL_MS","RESEND_LOOP_INTERVAL_MS","PacketHandler","#crypt","crypt","#logger","logger","#clientID","id","addr","socket","createSocket","isIP","host","onError","reject","error","port","resolve","#conn","conn","#closed","#lastMessageReceived","#handleRawPacket","msg","err","#triggerClose","#packetCounter","init1Data","processInit1","#sendPacketRaw","pingTimer","#stopPing","resendTimer","#checkResends","#stopResend","#initPacketCheck","dummy","pType","#sendSplitPacket","pID","pGen","#generationCounter","payloadLen","voicePayload","codec","final","#write","targetClientIds","whisperPayload","index","pos","first","blockSize","last","pFlags","applyProtocolFlags","#nextPacketIdentity","unencrypted","ciphertext","tag","rp","#trackResend","normalized","parsed","#resolveGeneration","decrypted","#decryptPacketData","#sendPong","#handleCommandWindowAndAck","#handlePacketQueue","#updatePostReceiveState","#recvWindowCommand","#recvWindowCommandLow","#sendWindowCommand","#sendWindowCommandLow","dummyUsed","gen","guessGen","win","ackType","#sendAck","ackData","packetID","pongData","isCommand","queue","#commandQueue","#commandLowQueue","#fastForwardMissingPackets","current","#_nextCommandID","#_nextCommandLowID","packet","result","#tryReassemble","reassembled","newNext","#tryDecompress","nextID","hasOldNewerPacket","startPacket","fragments","totalSize","currID","startSeen","complete","frag","fragmented","combined","ackID","key","#ackManager","now","#doResend","pkg"],"sources":["../src/transport/packet.ts","../src/transport/generation-window.ts","../src/transport/quicklz.ts","../src/transport/handler.ts"],"sourcesContent":["export const enum PacketType {\n Voice = 0,\n VoiceWhisper = 1,\n Command = 2,\n CommandLow = 3,\n Ping = 4,\n Pong = 5,\n Ack = 6,\n AckLow = 7,\n Init1 = 8,\n}\n\nexport const enum PacketFlags {\n Fragmented = 0x10,\n NewProtocol = 0x20,\n Compressed = 0x40,\n Unencrypted = 0x80,\n}\n\nexport interface Packet {\n /** Type byte combined with flags (low nibble = type, high nibble = flags). */\n typeFlagged: number;\n id: number;\n clientID: number;\n generationID: number;\n data: Uint8Array;\n receivedAt: number; // Date.now()\n}\n\nexport function packetType(p: Packet): PacketType {\n return (p.typeFlagged & 0x0f) as PacketType;\n}\n\nexport function packetFlags(p: Packet): number {\n return p.typeFlagged & 0xf0;\n}\n\nexport function isUnencrypted(p: Packet): boolean {\n return (packetFlags(p) & PacketFlags.Unencrypted) !== 0;\n}\n\n/** Build the 5-byte client-to-server header: [packetID(2), clientID(2), typeFlagged(1)]. */\nexport function buildC2SHeader(p: Packet): Uint8Array {\n const header = new Uint8Array(5);\n const view = new DataView(header.buffer);\n view.setUint16(0, p.id, false);\n view.setUint16(2, p.clientID, false);\n header[4] = p.typeFlagged;\n return header;\n}\n\n/** Parse a 3-byte server-to-client header. */\nexport function parseS2CHeader(raw: Uint8Array): Pick<Packet, \"id\" | \"typeFlagged\"> {\n const view = new DataView(raw.buffer, raw.byteOffset, raw.byteLength);\n return {\n id: view.getUint16(0, false),\n typeFlagged: raw[2]!,\n };\n}\n\n/** Parse a 5-byte client-to-server header. */\nexport function parseC2SHeader(raw: Uint8Array): Pick<Packet, \"id\" | \"clientID\" | \"typeFlagged\"> {\n const view = new DataView(raw.buffer, raw.byteOffset, raw.byteLength);\n return {\n id: view.getUint16(0, false),\n clientID: view.getUint16(2, false),\n typeFlagged: raw[4]!,\n };\n}\n","export class GenerationWindow {\n #mappedBaseOffset = 0;\n #generation = 0;\n readonly #mod: number;\n readonly #receiveWindow: number;\n\n constructor(mod: number, windowSize: number) {\n this.#mod = mod;\n this.#receiveWindow = windowSize;\n }\n\n get generation(): number {\n return this.#generation;\n }\n\n advance(amount: number): void {\n if (amount <= 0) return;\n const newBaseOffset = this.#mappedBaseOffset + amount;\n const genStep = Math.floor(newBaseOffset / this.#mod);\n if (genStep > 0) {\n this.#generation = Math.min(this.#generation + genStep, 0xffff_ffff);\n }\n this.#mappedBaseOffset = newBaseOffset % this.#mod;\n }\n\n advanceToExcluded(mappedValue: number): void {\n let moveDist = mappedValue - this.#mappedBaseOffset;\n if (moveDist < 0) moveDist += this.#mod;\n this.advance(moveDist + 1);\n }\n\n syncTo(mappedValue: number): void {\n let moveDist = mappedValue - this.#mappedBaseOffset;\n if (moveDist < 0) moveDist += this.#mod;\n this.advance(moveDist);\n }\n\n isInWindow(mappedValue: number): boolean {\n const maxOffset = this.#mappedBaseOffset + this.#receiveWindow;\n if (maxOffset < this.#mod) {\n return mappedValue >= this.#mappedBaseOffset && mappedValue < maxOffset;\n }\n return mappedValue >= this.#mappedBaseOffset || mappedValue < maxOffset - this.#mod;\n }\n\n mappedToIndex(mappedValue: number): number {\n if (this.#isNextGen(mappedValue)) {\n return mappedValue + this.#mod - this.#mappedBaseOffset;\n }\n return mappedValue - this.#mappedBaseOffset;\n }\n\n isOldPacket(mappedValue: number): boolean {\n return this.mappedToIndex(mappedValue) < 0;\n }\n\n isFuturePacket(mappedValue: number): boolean {\n return this.mappedToIndex(mappedValue) >= this.#receiveWindow;\n }\n\n #isNextGen(mappedValue: number): boolean {\n return (\n this.#mappedBaseOffset > this.#mod - this.#receiveWindow &&\n mappedValue < this.#mappedBaseOffset + this.#receiveWindow - this.#mod\n );\n }\n\n getGeneration(mappedValue: number): number {\n if (this.#isNextGen(mappedValue)) return this.#generation + 1;\n return this.#generation;\n }\n\n reset(): void {\n this.#mappedBaseOffset = 0;\n this.#generation = 0;\n }\n}\n","const TABLE_SIZE = 4096;\n\ninterface QlzState {\n control: number;\n sourcePos: number;\n destPos: number;\n nextHashed: number;\n}\n\nexport class Qlz {\n #hashtable = new Int32Array(TABLE_SIZE);\n\n decompress(data: Uint8Array): Uint8Array {\n const { headerLen, decompressedSize, flags } = parseQlzHeader(data);\n\n const dest = new Uint8Array(decompressedSize);\n\n if ((flags & 0x01) === 0) {\n dest.set(data.slice(headerLen, headerLen + decompressedSize));\n return dest;\n }\n\n this.#hashtable.fill(0);\n\n const state: QlzState = {\n control: 1,\n sourcePos: headerLen,\n destPos: 0,\n nextHashed: 0,\n };\n\n while (this.#ensureControl(data, state)) {\n if ((state.control & 1) !== 0) {\n if (!this.#processReference(data, dest, state)) break;\n } else {\n if (this.#processLiteral(data, dest, decompressedSize, state)) break;\n }\n }\n\n return dest;\n }\n\n #ensureControl(data: Uint8Array, st: QlzState): boolean {\n if (st.control !== 1) return true;\n if (st.sourcePos + 4 > data.length) return false;\n st.control =\n (data[st.sourcePos]! |\n (data[st.sourcePos + 1]! << 8) |\n (data[st.sourcePos + 2]! << 16) |\n (data[st.sourcePos + 3]! << 24)) >>>\n 0;\n st.sourcePos += 4;\n return true;\n }\n\n #processReference(data: Uint8Array, dest: Uint8Array, st: QlzState): boolean {\n st.control = (st.control >>> 1) >>> 0;\n if (st.sourcePos + 2 > data.length) return false;\n\n const b1 = data[st.sourcePos]!;\n const b2 = data[st.sourcePos + 1]!;\n st.sourcePos += 2;\n\n const hash = (b1 >> 4) | (b2 << 4);\n let matchlen = b1 & 0x0f;\n if (matchlen !== 0) {\n matchlen += 2;\n } else {\n if (st.sourcePos >= data.length) return false;\n matchlen = data[st.sourcePos]!;\n st.sourcePos++;\n }\n\n const offset = this.#hashtable[hash]!;\n for (let i = 0; i < matchlen; i++) {\n if (st.destPos < dest.length && offset + i < st.destPos) {\n dest[st.destPos] = dest[offset + i]!;\n st.destPos++;\n }\n }\n\n const end = st.destPos + 1 - matchlen;\n this.#updateHashtable(dest, st, end);\n st.nextHashed = st.destPos;\n\n return true;\n }\n\n #processLiteral(\n data: Uint8Array,\n dest: Uint8Array,\n decompressedSize: number,\n st: QlzState,\n ): boolean {\n const threshold = Math.max(decompressedSize, 10) - 10;\n if (st.destPos >= threshold) {\n while (st.destPos < decompressedSize) {\n if (st.control === 1) {\n st.sourcePos += 4;\n if (st.sourcePos > data.length) break;\n st.control =\n (data[st.sourcePos - 4]! |\n (data[st.sourcePos - 3]! << 8) |\n (data[st.sourcePos - 2]! << 16) |\n (data[st.sourcePos - 1]! << 24)) >>>\n 0;\n }\n if (st.sourcePos >= data.length) break;\n dest[st.destPos++] = data[st.sourcePos++]!;\n st.control = (st.control >>> 1) >>> 0;\n }\n return true;\n }\n\n if (st.sourcePos >= data.length || st.destPos >= dest.length) return true;\n\n dest[st.destPos++] = data[st.sourcePos++]!;\n st.control = (st.control >>> 1) >>> 0;\n\n const end = Math.max(st.destPos - 2, 0);\n this.#updateHashtable(dest, st, end);\n if (st.nextHashed < end) st.nextHashed = end;\n\n return false;\n }\n\n #updateHashtable(dest: Uint8Array, st: QlzState, end: number): void {\n while (st.nextHashed < end) {\n if (st.nextHashed + 3 > dest.length) break;\n const v =\n (dest[st.nextHashed]! |\n (dest[st.nextHashed + 1]! << 8) |\n (dest[st.nextHashed + 2]! << 16)) >>>\n 0;\n const hash = ((v >> 12) ^ v) & 0xfff;\n this.#hashtable[hash] = st.nextHashed;\n st.nextHashed++;\n }\n }\n}\n\nfunction parseQlzHeader(data: Uint8Array): {\n headerLen: number;\n decompressedSize: number;\n flags: number;\n} {\n if (data.length < 3) throw new Error(\"QuickLZ: data too short\");\n\n const flags = data[0]!;\n const level = (flags >> 2) & 0x03;\n if (level !== 1) throw new Error(\"QuickLZ: only level 1 is supported\");\n\n const headerLen = (flags & 0x02) !== 0 ? 9 : 3;\n if (data.length < headerLen) throw new Error(\"QuickLZ: data too short for header\");\n\n let decompressedSize: number;\n if ((flags & 0x02) !== 0) {\n decompressedSize = (data[5]! | (data[6]! << 8) | (data[7]! << 16) | (data[8]! << 24)) >>> 0;\n } else {\n decompressedSize = data[2]!;\n }\n\n return { headerLen, decompressedSize, flags };\n}\n","import { createSocket, type Socket as UdpSocket } from \"node:dgram\";\nimport { isIP } from \"node:net\";\nimport { splitHostPort } from \"../address.js\";\nimport type { Crypt } from \"../crypto/crypt.js\";\nimport type { Logger } from \"../types.js\";\nimport { noopLogger } from \"../types.js\";\nimport {\n type Packet,\n PacketType,\n PacketFlags,\n packetType,\n packetFlags,\n buildC2SHeader,\n parseS2CHeader,\n} from \"./packet.js\";\nimport { GenerationWindow } from \"./generation-window.js\";\nimport { Qlz } from \"./quicklz.js\";\nimport { processInit1 } from \"../handshake/crypt-handshake.js\";\n\nconst MAX_OUT_PACKET_SIZE = 500;\nconst RECEIVE_PACKET_WINDOW_SIZE = 1024;\nconst PING_INTERVAL_MS = 5_000;\nconst PACKET_TIMEOUT_MS = 60_000;\nconst MAX_RETRY_INTERVAL_MS = 1_000;\nconst HEADER_SIZE = 5;\nconst TAG_SIZE = 8;\nconst VOICE_HEADER_SIZE = 3;\nconst WHISPER_HEADER_SIZE = 5;\nconst RESEND_BASE_INTERVAL_MS = 500;\nconst RESEND_LOOP_INTERVAL_MS = 100;\n\ninterface ResendPacket {\n packet: Packet;\n firstSend: number;\n lastSend: number;\n retryCount: number;\n nextInterval: number;\n}\n\nexport class PacketHandler {\n onPacket: ((p: Packet) => void) | null = null;\n onClosed: ((err: Error | null) => void) | null = null;\n\n readonly #crypt: Crypt;\n readonly #logger: Logger;\n\n #conn: UdpSocket | null = null;\n #clientID = 0;\n #closed = false;\n #stopPing: (() => void) | null = null;\n #stopResend: (() => void) | null = null;\n #lastMessageReceived = Date.now();\n\n #packetCounter = new Uint16Array(9);\n #generationCounter = new Uint32Array(9);\n\n #recvWindowCommand = new GenerationWindow(1 << 16, RECEIVE_PACKET_WINDOW_SIZE);\n #recvWindowCommandLow = new GenerationWindow(1 << 16, RECEIVE_PACKET_WINDOW_SIZE);\n #sendWindowCommand = new GenerationWindow(1 << 16, RECEIVE_PACKET_WINDOW_SIZE);\n #sendWindowCommandLow = new GenerationWindow(1 << 16, RECEIVE_PACKET_WINDOW_SIZE);\n\n #commandQueue = new Map<number, Packet>();\n #commandLowQueue = new Map<number, Packet>();\n #ackManager = new Map<number, ResendPacket>();\n #initPacketCheck: ResendPacket | null = null;\n\n constructor(crypt: Crypt, logger: Logger = noopLogger) {\n this.#crypt = crypt;\n this.#logger = logger;\n }\n\n setClientID(id: number): void {\n this.#clientID = id;\n }\n\n connect(addr: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const { host, port } = splitHostPort(addr);\n\n const socket = createSocket(isIP(host) === 6 ? \"udp6\" : \"udp4\");\n const onError = (error: Error) => {\n socket.close();\n reject(error);\n };\n socket.once(\"error\", onError);\n socket.connect(parseInt(port, 10), host, () => {\n socket.off(\"error\", onError);\n this.start(socket);\n resolve();\n });\n });\n }\n\n start(conn: UdpSocket): void {\n this.#conn = conn;\n this.#closed = false;\n this.#lastMessageReceived = Date.now();\n\n conn.on(\"message\", (msg) => {\n this.#lastMessageReceived = Date.now();\n this.#handleRawPacket(new Uint8Array(msg.buffer, msg.byteOffset, msg.byteLength));\n });\n conn.on(\"error\", (err) => {\n this.#logger.error(\"udp error\", err);\n this.#triggerClose(err);\n });\n conn.on(\"close\", () => this.#triggerClose(null));\n\n this.#packetCounter[PacketType.Command] = 1;\n this.#packetCounter[PacketType.Init1] = 101;\n\n const init1Data = processInit1(this.#crypt, null);\n if (init1Data) this.#sendPacketRaw(PacketType.Init1, init1Data, 0);\n\n // Ping loop\n const pingTimer = setInterval(() => {\n if (this.#crypt.cryptoInitComplete) {\n this.sendPacket(PacketType.Ping, new Uint8Array(0), PacketFlags.Unencrypted);\n }\n }, PING_INTERVAL_MS);\n this.#stopPing = () => clearInterval(pingTimer);\n\n // Resend loop\n const resendTimer = setInterval(() => this.#checkResends(), RESEND_LOOP_INTERVAL_MS);\n this.#stopResend = () => clearInterval(resendTimer);\n }\n\n receivedFinalInitAck(): void {\n this.#initPacketCheck = null;\n }\n\n sendPacket(pType: PacketType, data: Uint8Array, flags: number): void {\n const dummy = !this.#crypt.cryptoInitComplete;\n if (data.length > 487 && pType !== PacketType.Voice && pType !== PacketType.VoiceWhisper) {\n this.#sendSplitPacket(pType, data, flags, dummy);\n return;\n }\n this.#sendPacketRaw(pType, data, flags, dummy);\n }\n\n sendVoicePacket(data: Uint8Array, codec: number): void {\n const pID = this.#packetCounter[PacketType.Voice]!;\n const pGen = this.#generationCounter[PacketType.Voice]!;\n this.#packetCounter[PacketType.Voice] = (pID + 1) & 0xffff;\n if (this.#packetCounter[PacketType.Voice] === 0) {\n this.#generationCounter[PacketType.Voice]!++;\n }\n\n const payloadLen = VOICE_HEADER_SIZE + data.length;\n const voicePayload = new Uint8Array(payloadLen);\n new DataView(voicePayload.buffer).setUint16(0, pID, false);\n voicePayload[2] = codec;\n voicePayload.set(data, VOICE_HEADER_SIZE);\n\n const p: Packet = {\n typeFlagged: PacketType.Voice | PacketFlags.Unencrypted,\n id: pID,\n clientID: this.#clientID,\n generationID: pGen,\n data: voicePayload,\n receivedAt: 0,\n };\n\n const header = buildC2SHeader(p);\n const final = new Uint8Array(TAG_SIZE + HEADER_SIZE + payloadLen);\n final.set(this.#crypt.fakeSignature, 0);\n final.set(header, TAG_SIZE);\n final.set(voicePayload, TAG_SIZE + HEADER_SIZE);\n this.#write(final);\n }\n\n /** Send an unencrypted TeamSpeak voice whisper packet to up to 32 clients. */\n sendWhisperPacket(data: Uint8Array, targetClientIds: number[], codec: number): void {\n if (targetClientIds.length === 0) throw new Error(\"whisper requires at least one target\");\n if (targetClientIds.length > 32) throw new Error(\"too many whisper targets\");\n if (targetClientIds.some((id) => !Number.isInteger(id) || id < 0 || id > 0xffff)) {\n throw new RangeError(\"invalid whisper target\");\n }\n\n const pID = this.#packetCounter[PacketType.VoiceWhisper]!;\n const pGen = this.#generationCounter[PacketType.VoiceWhisper]!;\n this.#packetCounter[PacketType.VoiceWhisper] = (pID + 1) & 0xffff;\n if (this.#packetCounter[PacketType.VoiceWhisper] === 0) {\n this.#generationCounter[PacketType.VoiceWhisper] = (pGen + 1) >>> 0;\n }\n\n const payloadLen = WHISPER_HEADER_SIZE + targetClientIds.length * 2 + data.length;\n const whisperPayload = new Uint8Array(payloadLen);\n const view = new DataView(whisperPayload.buffer);\n view.setUint16(0, pID, false);\n whisperPayload[2] = codec;\n whisperPayload[3] = 0;\n whisperPayload[4] = targetClientIds.length;\n for (let index = 0; index < targetClientIds.length; index++) {\n view.setUint16(WHISPER_HEADER_SIZE + index * 2, targetClientIds[index]!, false);\n }\n whisperPayload.set(data, WHISPER_HEADER_SIZE + targetClientIds.length * 2);\n\n const packet: Packet = {\n typeFlagged: PacketType.VoiceWhisper | PacketFlags.Unencrypted,\n id: pID,\n clientID: this.#clientID,\n generationID: pGen,\n data: whisperPayload,\n receivedAt: 0,\n };\n const header = buildC2SHeader(packet);\n const final = new Uint8Array(TAG_SIZE + HEADER_SIZE + payloadLen);\n final.set(this.#crypt.fakeSignature, 0);\n final.set(header, TAG_SIZE);\n final.set(whisperPayload, TAG_SIZE + HEADER_SIZE);\n this.#write(final);\n }\n\n close(): void {\n if (this.#closed) return;\n this.#closed = true;\n this.#stopPing?.();\n this.#stopResend?.();\n this.#conn?.close();\n }\n\n // ---- Private ---------------------------------------------------------------\n\n #sendSplitPacket(pType: PacketType, data: Uint8Array, flags: number, dummy: boolean): void {\n const maxSize = MAX_OUT_PACKET_SIZE - HEADER_SIZE - TAG_SIZE; // 487\n let pos = 0;\n let first = true;\n\n while (pos < data.length) {\n const blockSize = Math.min(data.length - pos, maxSize);\n const last = pos + blockSize === data.length;\n\n let pFlags = flags;\n if (first !== last) pFlags |= PacketFlags.Fragmented;\n\n this.#sendPacketRaw(pType, data.slice(pos, pos + blockSize), pFlags, dummy);\n pos += blockSize;\n first = false;\n }\n }\n\n #sendPacketRaw(\n pType: PacketType,\n data: Uint8Array,\n flags: number,\n dummy = !this.#crypt.cryptoInitComplete,\n ): void {\n flags = applyProtocolFlags(pType, flags);\n const [pID, pGen] = this.#nextPacketIdentity(pType);\n const p: Packet = {\n typeFlagged: pType | flags,\n id: pID,\n clientID: this.#clientID,\n generationID: pGen,\n data,\n receivedAt: 0,\n };\n\n const unencrypted = (flags & PacketFlags.Unencrypted) !== 0;\n const header = buildC2SHeader(p);\n const [ciphertext, tag] = this.#crypt.encrypt(\n pType,\n pID,\n pGen,\n header,\n data,\n dummy,\n unencrypted,\n );\n\n const final = new Uint8Array(TAG_SIZE + HEADER_SIZE + ciphertext.length);\n final.set(tag.slice(0, TAG_SIZE), 0);\n final.set(header, TAG_SIZE);\n final.set(ciphertext, TAG_SIZE + HEADER_SIZE);\n this.#write(final);\n\n const rp: ResendPacket = {\n packet: p,\n firstSend: Date.now(),\n lastSend: Date.now(),\n retryCount: 0,\n nextInterval: RESEND_BASE_INTERVAL_MS,\n };\n this.#trackResend(pType, p, rp);\n }\n\n #write(data: Uint8Array): void {\n if (!this.#conn) return;\n try {\n this.#conn.send(Buffer.from(data), (err) => {\n if (err) this.#logger.warn(\"udp send error\", err);\n });\n } catch (error: unknown) {\n const normalized = error instanceof Error ? error : new Error(String(error));\n // dgram can throw synchronously for an invalid family/address pair. A\n // malformed remote target must close this session, never escape from an\n // async socket callback and terminate the gateway process.\n this.#logger.error(\"udp send failed\", normalized);\n this.#triggerClose(normalized);\n }\n }\n\n #handleRawPacket(raw: Uint8Array): void {\n if (raw.length < 11) return;\n\n const tag = raw.slice(0, TAG_SIZE);\n const header = raw.slice(TAG_SIZE, TAG_SIZE + 3);\n const ciphertext = raw.slice(TAG_SIZE + 3);\n\n const parsed = parseS2CHeader(header);\n const p: Packet = {\n ...parsed,\n clientID: 0,\n generationID: this.#resolveGeneration(parsed.id, parsed.typeFlagged & 0x0f),\n data: new Uint8Array(0),\n receivedAt: Date.now(),\n };\n\n const decrypted = this.#decryptPacketData(p, header, ciphertext, tag);\n if (decrypted === null) return;\n p.data = decrypted.plaintext;\n\n const pType = packetType(p);\n\n if (pType === PacketType.Ping) {\n this.#sendPong(p.id, decrypted.dummyUsed);\n return;\n }\n\n if (!this.#handleCommandWindowAndAck(p, decrypted.dummyUsed)) return;\n\n this.#handlePacketQueue(p);\n this.#updatePostReceiveState(p);\n }\n\n #resolveGeneration(id: number, pType: number): number {\n switch (pType as PacketType) {\n case PacketType.Command:\n return this.#recvWindowCommand.getGeneration(id);\n case PacketType.CommandLow:\n return this.#recvWindowCommandLow.getGeneration(id);\n case PacketType.Ack:\n return this.#sendWindowCommand.getGeneration(id);\n case PacketType.AckLow:\n return this.#sendWindowCommandLow.getGeneration(id);\n default:\n return 0;\n }\n }\n\n #decryptPacketData(\n p: Packet,\n header: Uint8Array,\n ciphertext: Uint8Array,\n tag: Uint8Array,\n ): { plaintext: Uint8Array; dummyUsed: boolean } | null {\n const unencrypted = (packetFlags(p) & PacketFlags.Unencrypted) !== 0;\n const dummy = !this.#crypt.cryptoInitComplete;\n let dummyUsed = dummy;\n const pType = packetType(p);\n const gen = p.generationID;\n\n try {\n const plaintext = this.#crypt.decrypt(\n pType,\n p.id,\n gen,\n header,\n ciphertext,\n tag,\n dummy,\n unencrypted,\n );\n return { plaintext, dummyUsed };\n } catch {\n // Try adjacent generations\n for (const offset of [-1, 1]) {\n const guessGen = gen + offset;\n if (guessGen < 0) continue;\n try {\n const plaintext = this.#crypt.decrypt(\n pType,\n p.id,\n guessGen,\n header,\n ciphertext,\n tag,\n false,\n false,\n );\n return { plaintext, dummyUsed: false };\n } catch {\n // continue\n }\n }\n\n // Try dummy fallback for command/ack types\n if (\n pType === PacketType.Command ||\n pType === PacketType.CommandLow ||\n pType === PacketType.Ack\n ) {\n try {\n const plaintext = this.#crypt.decrypt(\n pType,\n p.id,\n gen,\n header,\n ciphertext,\n tag,\n true,\n unencrypted,\n );\n return { plaintext, dummyUsed: true };\n } catch {\n // fall through\n }\n }\n\n return null;\n }\n }\n\n #handleCommandWindowAndAck(p: Packet, dummyUsed: boolean): boolean {\n const pType = packetType(p);\n if (pType !== PacketType.Command && pType !== PacketType.CommandLow) return true;\n\n const win = pType === PacketType.Command ? this.#recvWindowCommand : this.#recvWindowCommandLow;\n const ackType = pType === PacketType.Command ? PacketType.Ack : PacketType.AckLow;\n\n if (!win.isInWindow(p.id)) {\n if (win.isOldPacket(p.id)) {\n this.#sendAck(p.id, ackType, dummyUsed);\n }\n return false;\n }\n this.#sendAck(p.id, ackType, dummyUsed);\n return true;\n }\n\n #sendAck(packetID: number, ackType: PacketType, dummyUsed: boolean): void {\n const ackData = new Uint8Array(2);\n new DataView(ackData.buffer).setUint16(0, packetID, false);\n this.#sendPacketRaw(ackType, ackData, 0, dummyUsed);\n }\n\n #sendPong(pID: number, dummyUsed: boolean): void {\n const pongData = new Uint8Array(2);\n new DataView(pongData.buffer).setUint16(0, pID, false);\n this.#sendPacketRaw(PacketType.Pong, pongData, PacketFlags.Unencrypted, dummyUsed);\n }\n\n #handlePacketQueue(p: Packet): void {\n const pType = packetType(p);\n if (pType !== PacketType.Command && pType !== PacketType.CommandLow) {\n this.onPacket?.(p);\n return;\n }\n\n const isCommand = pType === PacketType.Command;\n const queue = isCommand ? this.#commandQueue : this.#commandLowQueue;\n const win = isCommand ? this.#recvWindowCommand : this.#recvWindowCommandLow;\n\n queue.set(p.id, p);\n\n if (isCommand) {\n this.#fastForwardMissingPackets(queue, win, true);\n } else {\n this.#fastForwardMissingPackets(queue, win, false);\n }\n\n while (true) {\n const current = isCommand ? this.#_nextCommandID : this.#_nextCommandLowID;\n const packet = queue.get(current);\n if (packet === undefined) break;\n\n const result = this.#tryReassemble(packet, queue, current, win);\n if (!result) break;\n\n const [reassembled, newNext] = result;\n if (isCommand) this.#_nextCommandID = newNext;\n else this.#_nextCommandLowID = newNext;\n\n this.#tryDecompress(reassembled);\n this.onPacket?.(reassembled);\n }\n }\n\n #_nextCommandID = 0;\n #_nextCommandLowID = 0;\n\n #fastForwardMissingPackets(\n queue: Map<number, Packet>,\n win: GenerationWindow,\n isCommand: boolean,\n ): void {\n let nextID = isCommand ? this.#_nextCommandID : this.#_nextCommandLowID;\n while (!queue.has(nextID) && hasOldNewerPacket(queue, nextID)) {\n nextID = (nextID + 1) & 0xffff;\n win.advance(1);\n }\n if (isCommand) this.#_nextCommandID = nextID;\n else this.#_nextCommandLowID = nextID;\n }\n\n #tryReassemble(\n startPacket: Packet,\n queue: Map<number, Packet>,\n nextID: number,\n win: GenerationWindow,\n ): [reassembled: Packet, newNextID: number] | null {\n if ((packetFlags(startPacket) & PacketFlags.Fragmented) === 0) {\n queue.delete(nextID);\n win.advance(1);\n return [startPacket, (nextID + 1) & 0xffff];\n }\n\n const fragments: Packet[] = [];\n let totalSize = 0;\n let currID = nextID;\n let startSeen = false;\n let complete = false;\n\n while (true) {\n const frag = queue.get(currID);\n if (!frag) return null;\n fragments.push(frag);\n totalSize += frag.data.length;\n\n const fragmented = (packetFlags(frag) & PacketFlags.Fragmented) !== 0;\n if (!startSeen) {\n startSeen = true;\n if (!fragmented) {\n complete = true;\n break;\n }\n } else if (fragmented) {\n complete = true;\n break;\n }\n currID = (currID + 1) & 0xffff;\n }\n\n if (!complete) return null;\n\n const combined = new Uint8Array(totalSize);\n let pos = 0;\n for (const frag of fragments) {\n combined.set(frag.data, pos);\n pos += frag.data.length;\n queue.delete(nextID);\n win.advance(1);\n nextID = (nextID + 1) & 0xffff;\n }\n\n startPacket.data = combined;\n startPacket.typeFlagged &= ~PacketFlags.Fragmented;\n return [startPacket, nextID];\n }\n\n #tryDecompress(packet: Packet): void {\n if ((packetFlags(packet) & PacketFlags.Compressed) === 0) return;\n try {\n const qlz = new Qlz();\n packet.data = qlz.decompress(packet.data);\n packet.typeFlagged &= ~PacketFlags.Compressed;\n } catch (err) {\n this.#logger.debug(\"decompression failed\", { id: packet.id, err });\n }\n }\n\n #updatePostReceiveState(p: Packet): void {\n const pType = packetType(p);\n\n if (pType === PacketType.Init1) {\n this.#initPacketCheck = null;\n return;\n }\n\n if ((pType === PacketType.Ack || pType === PacketType.AckLow) && p.data.length >= 2) {\n const ackID = new DataView(p.data.buffer, p.data.byteOffset).getUint16(0, false);\n const targetType = pType === PacketType.Ack ? PacketType.Command : PacketType.CommandLow;\n const key = (targetType << 16) | ackID;\n this.#ackManager.delete(key);\n }\n }\n\n #nextPacketIdentity(pType: PacketType): [id: number, gen: number] {\n const pID = this.#packetCounter[pType]!;\n const pGen = this.#generationCounter[pType]!;\n\n if (pType === PacketType.Init1) return [pID, pGen];\n\n this.#packetCounter[pType] = (pID + 1) & 0xffff;\n if (this.#packetCounter[pType] === 0) {\n this.#generationCounter[pType] = (pGen + 1) >>> 0;\n }\n\n if (pType === PacketType.Command) {\n this.#sendWindowCommand.advanceToExcluded(pID);\n } else if (pType === PacketType.CommandLow) {\n this.#sendWindowCommandLow.advanceToExcluded(pID);\n }\n\n return [pID, pGen];\n }\n\n #trackResend(pType: PacketType, p: Packet, rp: ResendPacket): void {\n if (pType === PacketType.Init1) {\n this.#initPacketCheck = rp;\n return;\n }\n if (pType === PacketType.Command || pType === PacketType.CommandLow) {\n const key = (pType << 16) | p.id;\n this.#ackManager.set(key, rp);\n }\n }\n\n #checkResends(): void {\n const now = Date.now();\n\n if (now - this.#lastMessageReceived > PACKET_TIMEOUT_MS) {\n this.#logger.warn(\"idle timeout\");\n this.#triggerClose(new Error(\"idle timeout\"));\n return;\n }\n\n if (this.#initPacketCheck) {\n this.#doResend(this.#initPacketCheck, now);\n }\n\n for (const [key, rp] of this.#ackManager) {\n if (now - rp.firstSend > PACKET_TIMEOUT_MS) {\n this.#ackManager.delete(key);\n this.#triggerClose(new Error(\"packet ack timeout\"));\n return;\n }\n this.#doResend(rp, now);\n }\n }\n\n #doResend(rp: ResendPacket, now: number): void {\n if (now - rp.lastSend < rp.nextInterval) return;\n\n rp.lastSend = now;\n rp.retryCount++;\n rp.nextInterval = Math.min(rp.nextInterval * 2, MAX_RETRY_INTERVAL_MS);\n\n const dummy = !this.#crypt.cryptoInitComplete;\n const unencrypted = (packetFlags(rp.packet) & PacketFlags.Unencrypted) !== 0;\n const header = buildC2SHeader(rp.packet);\n const pType = packetType(rp.packet);\n\n const [ciphertext, tag] = this.#crypt.encrypt(\n pType,\n rp.packet.id,\n rp.packet.generationID,\n header,\n rp.packet.data,\n dummy,\n unencrypted,\n );\n\n const final = new Uint8Array(TAG_SIZE + HEADER_SIZE + ciphertext.length);\n final.set(tag.slice(0, TAG_SIZE), 0);\n final.set(header, TAG_SIZE);\n final.set(ciphertext, TAG_SIZE + HEADER_SIZE);\n this.#write(final);\n }\n\n #triggerClose(err: Error | null): void {\n if (this.#closed) return;\n this.close();\n this.onClosed?.(err);\n }\n}\n\n// ---- Helpers ----------------------------------------------------------------\n\nfunction applyProtocolFlags(pType: PacketType, flags: number): number {\n if (pType === PacketType.Command || pType === PacketType.CommandLow) {\n return flags | PacketFlags.NewProtocol;\n }\n return flags;\n}\n\nfunction hasOldNewerPacket(queue: Map<number, Packet>, nextID: number): boolean {\n const now = Date.now();\n for (const [id, pkg] of queue) {\n const diff = (id - nextID + 0x10000) & 0xffff;\n if (diff < 0x8000 && now - pkg.receivedAt > 5_000) {\n return true;\n }\n }\n return false;\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- const e=require("./address-BR-5unVo.cjs"),t=require("./crypt-handshake-CQkQreLx.cjs");let n=require("node:net"),r=require("node:dgram");var i=function(e){return e[e.Voice=0]=`Voice`,e[e.VoiceWhisper=1]=`VoiceWhisper`,e[e.Command=2]=`Command`,e[e.CommandLow=3]=`CommandLow`,e[e.Ping=4]=`Ping`,e[e.Pong=5]=`Pong`,e[e.Ack=6]=`Ack`,e[e.AckLow=7]=`AckLow`,e[e.Init1=8]=`Init1`,e}({}),a=function(e){return e[e.Fragmented=16]=`Fragmented`,e[e.NewProtocol=32]=`NewProtocol`,e[e.Compressed=64]=`Compressed`,e[e.Unencrypted=128]=`Unencrypted`,e}({});function o(e){return e.typeFlagged&15}function s(e){return e.typeFlagged&240}function c(e){return!!(s(e)&128)}function l(e){let t=new Uint8Array(5),n=new DataView(t.buffer);return n.setUint16(0,e.id,!1),n.setUint16(2,e.clientID,!1),t[4]=e.typeFlagged,t}function u(e){return{id:new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(0,!1),typeFlagged:e[2]}}function d(e){let t=new DataView(e.buffer,e.byteOffset,e.byteLength);return{id:t.getUint16(0,!1),clientID:t.getUint16(2,!1),typeFlagged:e[4]}}var f=class{#e=0;#t=0;#n;#r;constructor(e,t){this.#n=e,this.#r=t}get generation(){return this.#t}advance(e){if(e<=0)return;let t=this.#e+e,n=Math.floor(t/this.#n);n>0&&(this.#t=Math.min(this.#t+n,4294967295)),this.#e=t%this.#n}advanceToExcluded(e){let t=e-this.#e;t<0&&(t+=this.#n),this.advance(t+1)}syncTo(e){let t=e-this.#e;t<0&&(t+=this.#n),this.advance(t)}isInWindow(e){let t=this.#e+this.#r;return t<this.#n?e>=this.#e&&e<t:e>=this.#e||e<t-this.#n}mappedToIndex(e){return this.#i(e)?e+this.#n-this.#e:e-this.#e}isOldPacket(e){return this.mappedToIndex(e)<0}isFuturePacket(e){return this.mappedToIndex(e)>=this.#r}#i(e){return this.#e>this.#n-this.#r&&e<this.#e+this.#r-this.#n}getGeneration(e){return this.#i(e)?this.#t+1:this.#t}reset(){this.#e=0,this.#t=0}},p=4096,m=class{#e=new Int32Array(p);decompress(e){let{headerLen:t,decompressedSize:n,flags:r}=h(e),i=new Uint8Array(n);if(!(r&1))return i.set(e.slice(t,t+n)),i;this.#e.fill(0);let a={control:1,sourcePos:t,destPos:0,nextHashed:0};for(;this.#t(e,a);)if(a.control&1){if(!this.#n(e,i,a))break}else if(this.#r(e,i,n,a))break;return i}#t(e,t){return t.control===1?t.sourcePos+4>e.length?!1:(t.control=(e[t.sourcePos]|e[t.sourcePos+1]<<8|e[t.sourcePos+2]<<16|e[t.sourcePos+3]<<24)>>>0,t.sourcePos+=4,!0):!0}#n(e,t,n){if(n.control=n.control>>>1>>>0,n.sourcePos+2>e.length)return!1;let r=e[n.sourcePos],i=e[n.sourcePos+1];n.sourcePos+=2;let a=r>>4|i<<4,o=r&15;if(o!==0)o+=2;else{if(n.sourcePos>=e.length)return!1;o=e[n.sourcePos],n.sourcePos++}let s=this.#e[a];for(let e=0;e<o;e++)n.destPos<t.length&&s+e<n.destPos&&(t[n.destPos]=t[s+e],n.destPos++);let c=n.destPos+1-o;return this.#i(t,n,c),n.nextHashed=n.destPos,!0}#r(e,t,n,r){let i=Math.max(n,10)-10;if(r.destPos>=i){for(;r.destPos<n;){if(r.control===1){if(r.sourcePos+=4,r.sourcePos>e.length)break;r.control=(e[r.sourcePos-4]|e[r.sourcePos-3]<<8|e[r.sourcePos-2]<<16|e[r.sourcePos-1]<<24)>>>0}if(r.sourcePos>=e.length)break;t[r.destPos++]=e[r.sourcePos++],r.control=r.control>>>1>>>0}return!0}if(r.sourcePos>=e.length||r.destPos>=t.length)return!0;t[r.destPos++]=e[r.sourcePos++],r.control=r.control>>>1>>>0;let a=Math.max(r.destPos-2,0);return this.#i(t,r,a),r.nextHashed<a&&(r.nextHashed=a),!1}#i(e,t,n){for(;t.nextHashed<n&&!(t.nextHashed+3>e.length);){let n=(e[t.nextHashed]|e[t.nextHashed+1]<<8|e[t.nextHashed+2]<<16)>>>0,r=(n>>12^n)&4095;this.#e[r]=t.nextHashed,t.nextHashed++}}};function h(e){if(e.length<3)throw Error(`QuickLZ: data too short`);let t=e[0];if((t>>2&3)!=1)throw Error(`QuickLZ: only level 1 is supported`);let n=t&2?9:3;if(e.length<n)throw Error(`QuickLZ: data too short for header`);let r;return r=t&2?(e[5]|e[6]<<8|e[7]<<16|e[8]<<24)>>>0:e[2],{headerLen:n,decompressedSize:r,flags:t}}var g=1024,_=5e3,v=6e4,y=1e3,b=8,x=3,S=5,C=500,w=100,T=class{onPacket=null;onClosed=null;#e;#t;#n=null;#r=0;#i=!1;#a=null;#o=null;#s=Date.now();#c=new Uint16Array(9);#l=new Uint32Array(9);#u=new f(65536,g);#d=new f(65536,g);#f=new f(65536,g);#p=new f(65536,g);#m=new Map;#h=new Map;#g=new Map;#_=null;constructor(t,n=e.o){this.#e=t,this.#t=n}setClientID(e){this.#r=e}connect(t){return new Promise((i,a)=>{let{host:o,port:s}=e.r(t),c=(0,r.createSocket)((0,n.isIP)(o)===6?`udp6`:`udp4`),l=e=>{c.close(),a(e)};c.once(`error`,l),c.connect(parseInt(s,10),o,()=>{c.off(`error`,l),this.start(c),i()})})}start(e){this.#n=e,this.#i=!1,this.#s=Date.now(),e.on(`message`,e=>{this.#s=Date.now(),this.#x(new Uint8Array(e.buffer,e.byteOffset,e.byteLength))}),e.on(`error`,e=>{this.#t.error(`udp error`,e),this.#R(e)}),e.on(`close`,()=>this.#R(null)),this.#c[i.Command]=1,this.#c[i.Init1]=101;let n=t.n(this.#e,null);n&&this.#y(i.Init1,n,0);let r=setInterval(()=>{this.#e.cryptoInitComplete&&this.sendPacket(i.Ping,new Uint8Array,a.Unencrypted)},_);this.#a=()=>clearInterval(r);let o=setInterval(()=>this.#I(),w);this.#o=()=>clearInterval(o)}receivedFinalInitAck(){this.#_=null}sendPacket(e,t,n){let r=!this.#e.cryptoInitComplete;if(t.length>487&&e!==i.Voice&&e!==i.VoiceWhisper){this.#v(e,t,n,r);return}this.#y(e,t,n,r)}sendVoicePacket(e,t){let n=this.#c[i.Voice],r=this.#l[i.Voice];this.#c[i.Voice]=n+1&65535,this.#c[i.Voice]===0&&this.#l[i.Voice]++;let o=x+e.length,s=new Uint8Array(o);new DataView(s.buffer).setUint16(0,n,!1),s[2]=t,s.set(e,x);let c=l({typeFlagged:i.Voice|a.Unencrypted,id:n,clientID:this.#r,generationID:r,data:s,receivedAt:0}),u=new Uint8Array(13+o);u.set(this.#e.fakeSignature,0),u.set(c,b),u.set(s,13),this.#b(u)}sendWhisperPacket(e,t,n){if(t.length===0)throw Error(`whisper requires at least one target`);if(t.length>32)throw Error(`too many whisper targets`);if(t.some(e=>!Number.isInteger(e)||e<0||e>65535))throw RangeError(`invalid whisper target`);let r=this.#c[i.VoiceWhisper],o=this.#l[i.VoiceWhisper];this.#c[i.VoiceWhisper]=r+1&65535,this.#c[i.VoiceWhisper]===0&&(this.#l[i.VoiceWhisper]=o+1>>>0);let s=S+t.length*2+e.length,c=new Uint8Array(s),u=new DataView(c.buffer);u.setUint16(0,r,!1),c[2]=n,c[3]=0,c[4]=t.length;for(let e=0;e<t.length;e++)u.setUint16(S+e*2,t[e],!1);c.set(e,S+t.length*2);let d=l({typeFlagged:i.VoiceWhisper|a.Unencrypted,id:r,clientID:this.#r,generationID:o,data:c,receivedAt:0}),f=new Uint8Array(13+s);f.set(this.#e.fakeSignature,0),f.set(d,b),f.set(c,13),this.#b(f)}close(){this.#i||(this.#i=!0,this.#a?.(),this.#o?.(),this.#n?.close())}#v(e,t,n,r){let i=0,o=!0;for(;i<t.length;){let s=Math.min(t.length-i,487),c=i+s===t.length,l=n;o!==c&&(l|=a.Fragmented),this.#y(e,t.slice(i,i+s),l,r),i+=s,o=!1}}#y(e,t,n,r=!this.#e.cryptoInitComplete){n=E(e,n);let[i,o]=this.#P(e),s={typeFlagged:e|n,id:i,clientID:this.#r,generationID:o,data:t,receivedAt:0},c=(n&a.Unencrypted)!==0,u=l(s),[d,f]=this.#e.encrypt(e,i,o,u,t,r,c),p=new Uint8Array(13+d.length);p.set(f.slice(0,b),0),p.set(u,b),p.set(d,13),this.#b(p);let m={packet:s,firstSend:Date.now(),lastSend:Date.now(),retryCount:0,nextInterval:C};this.#F(e,s,m)}#b(e){if(this.#n)try{this.#n.send(Buffer.from(e),e=>{e&&this.#t.warn(`udp send error`,e)})}catch(e){let t=e instanceof Error?e:Error(String(e));this.#t.error(`udp send failed`,t),this.#R(t)}}#x(e){if(e.length<11)return;let t=e.slice(0,b),n=e.slice(b,11),r=e.slice(11),a=u(n),s={...a,clientID:0,generationID:this.#S(a.id,a.typeFlagged&15),data:new Uint8Array,receivedAt:Date.now()},c=this.#C(s,n,r,t);if(c!==null){if(s.data=c.plaintext,o(s)===i.Ping){this.#E(s.id,c.dummyUsed);return}this.#w(s,c.dummyUsed)&&(this.#D(s),this.#N(s))}}#S(e,t){switch(t){case i.Command:return this.#u.getGeneration(e);case i.CommandLow:return this.#d.getGeneration(e);case i.Ack:return this.#f.getGeneration(e);case i.AckLow:return this.#p.getGeneration(e);default:return 0}}#C(e,t,n,r){let c=(s(e)&a.Unencrypted)!==0,l=!this.#e.cryptoInitComplete,u=l,d=o(e),f=e.generationID;try{return{plaintext:this.#e.decrypt(d,e.id,f,t,n,r,l,c),dummyUsed:u}}catch{for(let i of[-1,1]){let a=f+i;if(!(a<0))try{return{plaintext:this.#e.decrypt(d,e.id,a,t,n,r,!1,!1),dummyUsed:!1}}catch{}}if(d===i.Command||d===i.CommandLow||d===i.Ack)try{return{plaintext:this.#e.decrypt(d,e.id,f,t,n,r,!0,c),dummyUsed:!0}}catch{}return null}}#w(e,t){let n=o(e);if(n!==i.Command&&n!==i.CommandLow)return!0;let r=n===i.Command?this.#u:this.#d,a=n===i.Command?i.Ack:i.AckLow;return r.isInWindow(e.id)?(this.#T(e.id,a,t),!0):(r.isOldPacket(e.id)&&this.#T(e.id,a,t),!1)}#T(e,t,n){let r=new Uint8Array(2);new DataView(r.buffer).setUint16(0,e,!1),this.#y(t,r,0,n)}#E(e,t){let n=new Uint8Array(2);new DataView(n.buffer).setUint16(0,e,!1),this.#y(i.Pong,n,a.Unencrypted,t)}#D(e){let t=o(e);if(t!==i.Command&&t!==i.CommandLow){this.onPacket?.(e);return}let n=t===i.Command,r=n?this.#m:this.#h,a=n?this.#u:this.#d;for(r.set(e.id,e),n?this.#A(r,a,!0):this.#A(r,a,!1);;){let e=n?this.#O:this.#k,t=r.get(e);if(t===void 0)break;let i=this.#j(t,r,e,a);if(!i)break;let[o,s]=i;n?this.#O=s:this.#k=s,this.#M(o),this.onPacket?.(o)}}#O=0;#k=0;#A(e,t,n){let r=n?this.#O:this.#k;for(;!e.has(r)&&D(e,r);)r=r+1&65535,t.advance(1);n?this.#O=r:this.#k=r}#j(e,t,n,r){if((s(e)&a.Fragmented)===0)return t.delete(n),r.advance(1),[e,n+1&65535];let i=[],o=0,c=n,l=!1,u=!1;for(;;){let e=t.get(c);if(!e)return null;i.push(e),o+=e.data.length;let n=(s(e)&a.Fragmented)!==0;if(!l){if(l=!0,!n){u=!0;break}}else if(n){u=!0;break}c=c+1&65535}if(!u)return null;let d=new Uint8Array(o),f=0;for(let e of i)d.set(e.data,f),f+=e.data.length,t.delete(n),r.advance(1),n=n+1&65535;return e.data=d,e.typeFlagged&=~a.Fragmented,[e,n]}#M(e){if((s(e)&a.Compressed)!==0)try{e.data=new m().decompress(e.data),e.typeFlagged&=~a.Compressed}catch(t){this.#t.debug(`decompression failed`,{id:e.id,err:t})}}#N(e){let t=o(e);if(t===i.Init1){this.#_=null;return}if((t===i.Ack||t===i.AckLow)&&e.data.length>=2){let n=new DataView(e.data.buffer,e.data.byteOffset).getUint16(0,!1),r=(t===i.Ack?i.Command:i.CommandLow)<<16|n;this.#g.delete(r)}}#P(e){let t=this.#c[e],n=this.#l[e];return e===i.Init1?[t,n]:(this.#c[e]=t+1&65535,this.#c[e]===0&&(this.#l[e]=n+1>>>0),e===i.Command?this.#f.advanceToExcluded(t):e===i.CommandLow&&this.#p.advanceToExcluded(t),[t,n])}#F(e,t,n){if(e===i.Init1){this.#_=n;return}if(e===i.Command||e===i.CommandLow){let r=e<<16|t.id;this.#g.set(r,n)}}#I(){let e=Date.now();if(e-this.#s>v){this.#t.warn(`idle timeout`),this.#R(Error(`idle timeout`));return}this.#_&&this.#L(this.#_,e);for(let[t,n]of this.#g){if(e-n.firstSend>v){this.#g.delete(t),this.#R(Error(`packet ack timeout`));return}this.#L(n,e)}}#L(e,t){if(t-e.lastSend<e.nextInterval)return;e.lastSend=t,e.retryCount++,e.nextInterval=Math.min(e.nextInterval*2,y);let n=!this.#e.cryptoInitComplete,r=(s(e.packet)&a.Unencrypted)!==0,i=l(e.packet),c=o(e.packet),[u,d]=this.#e.encrypt(c,e.packet.id,e.packet.generationID,i,e.packet.data,n,r),f=new Uint8Array(13+u.length);f.set(d.slice(0,b),0),f.set(i,b),f.set(u,13),this.#b(f)}#R(e){this.#i||(this.close(),this.onClosed?.(e))}};function E(e,t){return e===i.Command||e===i.CommandLow?t|a.NewProtocol:t}function D(e,t){let n=Date.now();for(let[r,i]of e)if((r-t+65536&65535)<32768&&n-i.receivedAt>5e3)return!0;return!1}Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return d}});
2
- //# sourceMappingURL=handler-DuwoO5RC.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"handler-DuwoO5RC.cjs","names":["noopLogger","splitHostPort","createSocket","isIP","processInit1","require_address","require_crypt_handshake","node_net","node_dgram","PacketType","\"Voice\"","\"VoiceWhisper\"","\"Command\"","\"CommandLow\"","\"Ping\"","\"Pong\"","\"Ack\"","\"AckLow\"","\"Init1\"","PacketFlags","\"Fragmented\"","\"NewProtocol\"","\"Compressed\"","\"Unencrypted\"","packetType","p","packetFlags","isUnencrypted","buildC2SHeader","header","view","parseS2CHeader","raw","parseC2SHeader","GenerationWindow","#mod","mod","#receiveWindow","windowSize","#generation","amount","newBaseOffset","#mappedBaseOffset","genStep","moveDist","mappedValue","maxOffset","#isNextGen","TABLE_SIZE","Qlz","parseQlzHeader","data","dest","decompressedSize","flags","headerLen","#hashtable","state","#ensureControl","#processReference","#processLiteral","st","b1","b2","hash","matchlen","offset","i","end","#updateHashtable","threshold","v","RECEIVE_PACKET_WINDOW_SIZE","PING_INTERVAL_MS","PACKET_TIMEOUT_MS","MAX_RETRY_INTERVAL_MS","TAG_SIZE","VOICE_HEADER_SIZE","WHISPER_HEADER_SIZE","RESEND_BASE_INTERVAL_MS","RESEND_LOOP_INTERVAL_MS","PacketHandler","#crypt","crypt","#logger","logger","#clientID","id","addr","socket","host","onError","reject","error","port","resolve","#conn","conn","#closed","#lastMessageReceived","#handleRawPacket","msg","err","#triggerClose","#packetCounter","init1Data","#sendPacketRaw","pingTimer","#stopPing","resendTimer","#checkResends","#stopResend","#initPacketCheck","dummy","pType","#sendSplitPacket","pID","pGen","#generationCounter","payloadLen","voicePayload","codec","final","#write","targetClientIds","whisperPayload","index","pos","first","blockSize","last","pFlags","applyProtocolFlags","#nextPacketIdentity","unencrypted","ciphertext","tag","rp","#trackResend","normalized","parsed","#resolveGeneration","decrypted","#decryptPacketData","#sendPong","#handleCommandWindowAndAck","#handlePacketQueue","#updatePostReceiveState","#recvWindowCommand","#recvWindowCommandLow","#sendWindowCommand","#sendWindowCommandLow","dummyUsed","gen","guessGen","win","ackType","#sendAck","ackData","packetID","pongData","isCommand","queue","#commandQueue","#commandLowQueue","#fastForwardMissingPackets","current","#_nextCommandID","#_nextCommandLowID","packet","result","#tryReassemble","reassembled","newNext","#tryDecompress","nextID","hasOldNewerPacket","startPacket","fragments","totalSize","currID","startSeen","complete","frag","fragmented","combined","ackID","key","#ackManager","now","#doResend","pkg"],"sources":["../src/transport/packet.ts","../src/transport/generation-window.ts","../src/transport/quicklz.ts","../src/transport/handler.ts"],"sourcesContent":["export const enum PacketType {\n Voice = 0,\n VoiceWhisper = 1,\n Command = 2,\n CommandLow = 3,\n Ping = 4,\n Pong = 5,\n Ack = 6,\n AckLow = 7,\n Init1 = 8,\n}\n\nexport const enum PacketFlags {\n Fragmented = 0x10,\n NewProtocol = 0x20,\n Compressed = 0x40,\n Unencrypted = 0x80,\n}\n\nexport interface Packet {\n /** Type byte combined with flags (low nibble = type, high nibble = flags). */\n typeFlagged: number;\n id: number;\n clientID: number;\n generationID: number;\n data: Uint8Array;\n receivedAt: number; // Date.now()\n}\n\nexport function packetType(p: Packet): PacketType {\n return (p.typeFlagged & 0x0f) as PacketType;\n}\n\nexport function packetFlags(p: Packet): number {\n return p.typeFlagged & 0xf0;\n}\n\nexport function isUnencrypted(p: Packet): boolean {\n return (packetFlags(p) & PacketFlags.Unencrypted) !== 0;\n}\n\n/** Build the 5-byte client-to-server header: [packetID(2), clientID(2), typeFlagged(1)]. */\nexport function buildC2SHeader(p: Packet): Uint8Array {\n const header = new Uint8Array(5);\n const view = new DataView(header.buffer);\n view.setUint16(0, p.id, false);\n view.setUint16(2, p.clientID, false);\n header[4] = p.typeFlagged;\n return header;\n}\n\n/** Parse a 3-byte server-to-client header. */\nexport function parseS2CHeader(raw: Uint8Array): Pick<Packet, \"id\" | \"typeFlagged\"> {\n const view = new DataView(raw.buffer, raw.byteOffset, raw.byteLength);\n return {\n id: view.getUint16(0, false),\n typeFlagged: raw[2]!,\n };\n}\n\n/** Parse a 5-byte client-to-server header. */\nexport function parseC2SHeader(raw: Uint8Array): Pick<Packet, \"id\" | \"clientID\" | \"typeFlagged\"> {\n const view = new DataView(raw.buffer, raw.byteOffset, raw.byteLength);\n return {\n id: view.getUint16(0, false),\n clientID: view.getUint16(2, false),\n typeFlagged: raw[4]!,\n };\n}\n","export class GenerationWindow {\n #mappedBaseOffset = 0;\n #generation = 0;\n readonly #mod: number;\n readonly #receiveWindow: number;\n\n constructor(mod: number, windowSize: number) {\n this.#mod = mod;\n this.#receiveWindow = windowSize;\n }\n\n get generation(): number {\n return this.#generation;\n }\n\n advance(amount: number): void {\n if (amount <= 0) return;\n const newBaseOffset = this.#mappedBaseOffset + amount;\n const genStep = Math.floor(newBaseOffset / this.#mod);\n if (genStep > 0) {\n this.#generation = Math.min(this.#generation + genStep, 0xffff_ffff);\n }\n this.#mappedBaseOffset = newBaseOffset % this.#mod;\n }\n\n advanceToExcluded(mappedValue: number): void {\n let moveDist = mappedValue - this.#mappedBaseOffset;\n if (moveDist < 0) moveDist += this.#mod;\n this.advance(moveDist + 1);\n }\n\n syncTo(mappedValue: number): void {\n let moveDist = mappedValue - this.#mappedBaseOffset;\n if (moveDist < 0) moveDist += this.#mod;\n this.advance(moveDist);\n }\n\n isInWindow(mappedValue: number): boolean {\n const maxOffset = this.#mappedBaseOffset + this.#receiveWindow;\n if (maxOffset < this.#mod) {\n return mappedValue >= this.#mappedBaseOffset && mappedValue < maxOffset;\n }\n return mappedValue >= this.#mappedBaseOffset || mappedValue < maxOffset - this.#mod;\n }\n\n mappedToIndex(mappedValue: number): number {\n if (this.#isNextGen(mappedValue)) {\n return mappedValue + this.#mod - this.#mappedBaseOffset;\n }\n return mappedValue - this.#mappedBaseOffset;\n }\n\n isOldPacket(mappedValue: number): boolean {\n return this.mappedToIndex(mappedValue) < 0;\n }\n\n isFuturePacket(mappedValue: number): boolean {\n return this.mappedToIndex(mappedValue) >= this.#receiveWindow;\n }\n\n #isNextGen(mappedValue: number): boolean {\n return (\n this.#mappedBaseOffset > this.#mod - this.#receiveWindow &&\n mappedValue < this.#mappedBaseOffset + this.#receiveWindow - this.#mod\n );\n }\n\n getGeneration(mappedValue: number): number {\n if (this.#isNextGen(mappedValue)) return this.#generation + 1;\n return this.#generation;\n }\n\n reset(): void {\n this.#mappedBaseOffset = 0;\n this.#generation = 0;\n }\n}\n","const TABLE_SIZE = 4096;\n\ninterface QlzState {\n control: number;\n sourcePos: number;\n destPos: number;\n nextHashed: number;\n}\n\nexport class Qlz {\n #hashtable = new Int32Array(TABLE_SIZE);\n\n decompress(data: Uint8Array): Uint8Array {\n const { headerLen, decompressedSize, flags } = parseQlzHeader(data);\n\n const dest = new Uint8Array(decompressedSize);\n\n if ((flags & 0x01) === 0) {\n dest.set(data.slice(headerLen, headerLen + decompressedSize));\n return dest;\n }\n\n this.#hashtable.fill(0);\n\n const state: QlzState = {\n control: 1,\n sourcePos: headerLen,\n destPos: 0,\n nextHashed: 0,\n };\n\n while (this.#ensureControl(data, state)) {\n if ((state.control & 1) !== 0) {\n if (!this.#processReference(data, dest, state)) break;\n } else {\n if (this.#processLiteral(data, dest, decompressedSize, state)) break;\n }\n }\n\n return dest;\n }\n\n #ensureControl(data: Uint8Array, st: QlzState): boolean {\n if (st.control !== 1) return true;\n if (st.sourcePos + 4 > data.length) return false;\n st.control =\n (data[st.sourcePos]! |\n (data[st.sourcePos + 1]! << 8) |\n (data[st.sourcePos + 2]! << 16) |\n (data[st.sourcePos + 3]! << 24)) >>>\n 0;\n st.sourcePos += 4;\n return true;\n }\n\n #processReference(data: Uint8Array, dest: Uint8Array, st: QlzState): boolean {\n st.control = (st.control >>> 1) >>> 0;\n if (st.sourcePos + 2 > data.length) return false;\n\n const b1 = data[st.sourcePos]!;\n const b2 = data[st.sourcePos + 1]!;\n st.sourcePos += 2;\n\n const hash = (b1 >> 4) | (b2 << 4);\n let matchlen = b1 & 0x0f;\n if (matchlen !== 0) {\n matchlen += 2;\n } else {\n if (st.sourcePos >= data.length) return false;\n matchlen = data[st.sourcePos]!;\n st.sourcePos++;\n }\n\n const offset = this.#hashtable[hash]!;\n for (let i = 0; i < matchlen; i++) {\n if (st.destPos < dest.length && offset + i < st.destPos) {\n dest[st.destPos] = dest[offset + i]!;\n st.destPos++;\n }\n }\n\n const end = st.destPos + 1 - matchlen;\n this.#updateHashtable(dest, st, end);\n st.nextHashed = st.destPos;\n\n return true;\n }\n\n #processLiteral(\n data: Uint8Array,\n dest: Uint8Array,\n decompressedSize: number,\n st: QlzState,\n ): boolean {\n const threshold = Math.max(decompressedSize, 10) - 10;\n if (st.destPos >= threshold) {\n while (st.destPos < decompressedSize) {\n if (st.control === 1) {\n st.sourcePos += 4;\n if (st.sourcePos > data.length) break;\n st.control =\n (data[st.sourcePos - 4]! |\n (data[st.sourcePos - 3]! << 8) |\n (data[st.sourcePos - 2]! << 16) |\n (data[st.sourcePos - 1]! << 24)) >>>\n 0;\n }\n if (st.sourcePos >= data.length) break;\n dest[st.destPos++] = data[st.sourcePos++]!;\n st.control = (st.control >>> 1) >>> 0;\n }\n return true;\n }\n\n if (st.sourcePos >= data.length || st.destPos >= dest.length) return true;\n\n dest[st.destPos++] = data[st.sourcePos++]!;\n st.control = (st.control >>> 1) >>> 0;\n\n const end = Math.max(st.destPos - 2, 0);\n this.#updateHashtable(dest, st, end);\n if (st.nextHashed < end) st.nextHashed = end;\n\n return false;\n }\n\n #updateHashtable(dest: Uint8Array, st: QlzState, end: number): void {\n while (st.nextHashed < end) {\n if (st.nextHashed + 3 > dest.length) break;\n const v =\n (dest[st.nextHashed]! |\n (dest[st.nextHashed + 1]! << 8) |\n (dest[st.nextHashed + 2]! << 16)) >>>\n 0;\n const hash = ((v >> 12) ^ v) & 0xfff;\n this.#hashtable[hash] = st.nextHashed;\n st.nextHashed++;\n }\n }\n}\n\nfunction parseQlzHeader(data: Uint8Array): {\n headerLen: number;\n decompressedSize: number;\n flags: number;\n} {\n if (data.length < 3) throw new Error(\"QuickLZ: data too short\");\n\n const flags = data[0]!;\n const level = (flags >> 2) & 0x03;\n if (level !== 1) throw new Error(\"QuickLZ: only level 1 is supported\");\n\n const headerLen = (flags & 0x02) !== 0 ? 9 : 3;\n if (data.length < headerLen) throw new Error(\"QuickLZ: data too short for header\");\n\n let decompressedSize: number;\n if ((flags & 0x02) !== 0) {\n decompressedSize = (data[5]! | (data[6]! << 8) | (data[7]! << 16) | (data[8]! << 24)) >>> 0;\n } else {\n decompressedSize = data[2]!;\n }\n\n return { headerLen, decompressedSize, flags };\n}\n","import { createSocket, type Socket as UdpSocket } from \"node:dgram\";\nimport { isIP } from \"node:net\";\nimport { splitHostPort } from \"../address.js\";\nimport type { Crypt } from \"../crypto/crypt.js\";\nimport type { Logger } from \"../types.js\";\nimport { noopLogger } from \"../types.js\";\nimport {\n type Packet,\n PacketType,\n PacketFlags,\n packetType,\n packetFlags,\n buildC2SHeader,\n parseS2CHeader,\n} from \"./packet.js\";\nimport { GenerationWindow } from \"./generation-window.js\";\nimport { Qlz } from \"./quicklz.js\";\nimport { processInit1 } from \"../handshake/crypt-handshake.js\";\n\nconst MAX_OUT_PACKET_SIZE = 500;\nconst RECEIVE_PACKET_WINDOW_SIZE = 1024;\nconst PING_INTERVAL_MS = 5_000;\nconst PACKET_TIMEOUT_MS = 60_000;\nconst MAX_RETRY_INTERVAL_MS = 1_000;\nconst HEADER_SIZE = 5;\nconst TAG_SIZE = 8;\nconst VOICE_HEADER_SIZE = 3;\nconst WHISPER_HEADER_SIZE = 5;\nconst RESEND_BASE_INTERVAL_MS = 500;\nconst RESEND_LOOP_INTERVAL_MS = 100;\n\ninterface ResendPacket {\n packet: Packet;\n firstSend: number;\n lastSend: number;\n retryCount: number;\n nextInterval: number;\n}\n\nexport class PacketHandler {\n onPacket: ((p: Packet) => void) | null = null;\n onClosed: ((err: Error | null) => void) | null = null;\n\n readonly #crypt: Crypt;\n readonly #logger: Logger;\n\n #conn: UdpSocket | null = null;\n #clientID = 0;\n #closed = false;\n #stopPing: (() => void) | null = null;\n #stopResend: (() => void) | null = null;\n #lastMessageReceived = Date.now();\n\n #packetCounter = new Uint16Array(9);\n #generationCounter = new Uint32Array(9);\n\n #recvWindowCommand = new GenerationWindow(1 << 16, RECEIVE_PACKET_WINDOW_SIZE);\n #recvWindowCommandLow = new GenerationWindow(1 << 16, RECEIVE_PACKET_WINDOW_SIZE);\n #sendWindowCommand = new GenerationWindow(1 << 16, RECEIVE_PACKET_WINDOW_SIZE);\n #sendWindowCommandLow = new GenerationWindow(1 << 16, RECEIVE_PACKET_WINDOW_SIZE);\n\n #commandQueue = new Map<number, Packet>();\n #commandLowQueue = new Map<number, Packet>();\n #ackManager = new Map<number, ResendPacket>();\n #initPacketCheck: ResendPacket | null = null;\n\n constructor(crypt: Crypt, logger: Logger = noopLogger) {\n this.#crypt = crypt;\n this.#logger = logger;\n }\n\n setClientID(id: number): void {\n this.#clientID = id;\n }\n\n connect(addr: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const { host, port } = splitHostPort(addr);\n\n const socket = createSocket(isIP(host) === 6 ? \"udp6\" : \"udp4\");\n const onError = (error: Error) => {\n socket.close();\n reject(error);\n };\n socket.once(\"error\", onError);\n socket.connect(parseInt(port, 10), host, () => {\n socket.off(\"error\", onError);\n this.start(socket);\n resolve();\n });\n });\n }\n\n start(conn: UdpSocket): void {\n this.#conn = conn;\n this.#closed = false;\n this.#lastMessageReceived = Date.now();\n\n conn.on(\"message\", (msg) => {\n this.#lastMessageReceived = Date.now();\n this.#handleRawPacket(new Uint8Array(msg.buffer, msg.byteOffset, msg.byteLength));\n });\n conn.on(\"error\", (err) => {\n this.#logger.error(\"udp error\", err);\n this.#triggerClose(err);\n });\n conn.on(\"close\", () => this.#triggerClose(null));\n\n this.#packetCounter[PacketType.Command] = 1;\n this.#packetCounter[PacketType.Init1] = 101;\n\n const init1Data = processInit1(this.#crypt, null);\n if (init1Data) this.#sendPacketRaw(PacketType.Init1, init1Data, 0);\n\n // Ping loop\n const pingTimer = setInterval(() => {\n if (this.#crypt.cryptoInitComplete) {\n this.sendPacket(PacketType.Ping, new Uint8Array(0), PacketFlags.Unencrypted);\n }\n }, PING_INTERVAL_MS);\n this.#stopPing = () => clearInterval(pingTimer);\n\n // Resend loop\n const resendTimer = setInterval(() => this.#checkResends(), RESEND_LOOP_INTERVAL_MS);\n this.#stopResend = () => clearInterval(resendTimer);\n }\n\n receivedFinalInitAck(): void {\n this.#initPacketCheck = null;\n }\n\n sendPacket(pType: PacketType, data: Uint8Array, flags: number): void {\n const dummy = !this.#crypt.cryptoInitComplete;\n if (data.length > 487 && pType !== PacketType.Voice && pType !== PacketType.VoiceWhisper) {\n this.#sendSplitPacket(pType, data, flags, dummy);\n return;\n }\n this.#sendPacketRaw(pType, data, flags, dummy);\n }\n\n sendVoicePacket(data: Uint8Array, codec: number): void {\n const pID = this.#packetCounter[PacketType.Voice]!;\n const pGen = this.#generationCounter[PacketType.Voice]!;\n this.#packetCounter[PacketType.Voice] = (pID + 1) & 0xffff;\n if (this.#packetCounter[PacketType.Voice] === 0) {\n this.#generationCounter[PacketType.Voice]!++;\n }\n\n const payloadLen = VOICE_HEADER_SIZE + data.length;\n const voicePayload = new Uint8Array(payloadLen);\n new DataView(voicePayload.buffer).setUint16(0, pID, false);\n voicePayload[2] = codec;\n voicePayload.set(data, VOICE_HEADER_SIZE);\n\n const p: Packet = {\n typeFlagged: PacketType.Voice | PacketFlags.Unencrypted,\n id: pID,\n clientID: this.#clientID,\n generationID: pGen,\n data: voicePayload,\n receivedAt: 0,\n };\n\n const header = buildC2SHeader(p);\n const final = new Uint8Array(TAG_SIZE + HEADER_SIZE + payloadLen);\n final.set(this.#crypt.fakeSignature, 0);\n final.set(header, TAG_SIZE);\n final.set(voicePayload, TAG_SIZE + HEADER_SIZE);\n this.#write(final);\n }\n\n /** Send an unencrypted TeamSpeak voice whisper packet to up to 32 clients. */\n sendWhisperPacket(data: Uint8Array, targetClientIds: number[], codec: number): void {\n if (targetClientIds.length === 0) throw new Error(\"whisper requires at least one target\");\n if (targetClientIds.length > 32) throw new Error(\"too many whisper targets\");\n if (targetClientIds.some((id) => !Number.isInteger(id) || id < 0 || id > 0xffff)) {\n throw new RangeError(\"invalid whisper target\");\n }\n\n const pID = this.#packetCounter[PacketType.VoiceWhisper]!;\n const pGen = this.#generationCounter[PacketType.VoiceWhisper]!;\n this.#packetCounter[PacketType.VoiceWhisper] = (pID + 1) & 0xffff;\n if (this.#packetCounter[PacketType.VoiceWhisper] === 0) {\n this.#generationCounter[PacketType.VoiceWhisper] = (pGen + 1) >>> 0;\n }\n\n const payloadLen = WHISPER_HEADER_SIZE + targetClientIds.length * 2 + data.length;\n const whisperPayload = new Uint8Array(payloadLen);\n const view = new DataView(whisperPayload.buffer);\n view.setUint16(0, pID, false);\n whisperPayload[2] = codec;\n whisperPayload[3] = 0;\n whisperPayload[4] = targetClientIds.length;\n for (let index = 0; index < targetClientIds.length; index++) {\n view.setUint16(WHISPER_HEADER_SIZE + index * 2, targetClientIds[index]!, false);\n }\n whisperPayload.set(data, WHISPER_HEADER_SIZE + targetClientIds.length * 2);\n\n const packet: Packet = {\n typeFlagged: PacketType.VoiceWhisper | PacketFlags.Unencrypted,\n id: pID,\n clientID: this.#clientID,\n generationID: pGen,\n data: whisperPayload,\n receivedAt: 0,\n };\n const header = buildC2SHeader(packet);\n const final = new Uint8Array(TAG_SIZE + HEADER_SIZE + payloadLen);\n final.set(this.#crypt.fakeSignature, 0);\n final.set(header, TAG_SIZE);\n final.set(whisperPayload, TAG_SIZE + HEADER_SIZE);\n this.#write(final);\n }\n\n close(): void {\n if (this.#closed) return;\n this.#closed = true;\n this.#stopPing?.();\n this.#stopResend?.();\n this.#conn?.close();\n }\n\n // ---- Private ---------------------------------------------------------------\n\n #sendSplitPacket(pType: PacketType, data: Uint8Array, flags: number, dummy: boolean): void {\n const maxSize = MAX_OUT_PACKET_SIZE - HEADER_SIZE - TAG_SIZE; // 487\n let pos = 0;\n let first = true;\n\n while (pos < data.length) {\n const blockSize = Math.min(data.length - pos, maxSize);\n const last = pos + blockSize === data.length;\n\n let pFlags = flags;\n if (first !== last) pFlags |= PacketFlags.Fragmented;\n\n this.#sendPacketRaw(pType, data.slice(pos, pos + blockSize), pFlags, dummy);\n pos += blockSize;\n first = false;\n }\n }\n\n #sendPacketRaw(\n pType: PacketType,\n data: Uint8Array,\n flags: number,\n dummy = !this.#crypt.cryptoInitComplete,\n ): void {\n flags = applyProtocolFlags(pType, flags);\n const [pID, pGen] = this.#nextPacketIdentity(pType);\n const p: Packet = {\n typeFlagged: pType | flags,\n id: pID,\n clientID: this.#clientID,\n generationID: pGen,\n data,\n receivedAt: 0,\n };\n\n const unencrypted = (flags & PacketFlags.Unencrypted) !== 0;\n const header = buildC2SHeader(p);\n const [ciphertext, tag] = this.#crypt.encrypt(\n pType,\n pID,\n pGen,\n header,\n data,\n dummy,\n unencrypted,\n );\n\n const final = new Uint8Array(TAG_SIZE + HEADER_SIZE + ciphertext.length);\n final.set(tag.slice(0, TAG_SIZE), 0);\n final.set(header, TAG_SIZE);\n final.set(ciphertext, TAG_SIZE + HEADER_SIZE);\n this.#write(final);\n\n const rp: ResendPacket = {\n packet: p,\n firstSend: Date.now(),\n lastSend: Date.now(),\n retryCount: 0,\n nextInterval: RESEND_BASE_INTERVAL_MS,\n };\n this.#trackResend(pType, p, rp);\n }\n\n #write(data: Uint8Array): void {\n if (!this.#conn) return;\n try {\n this.#conn.send(Buffer.from(data), (err) => {\n if (err) this.#logger.warn(\"udp send error\", err);\n });\n } catch (error: unknown) {\n const normalized = error instanceof Error ? error : new Error(String(error));\n // dgram can throw synchronously for an invalid family/address pair. A\n // malformed remote target must close this session, never escape from an\n // async socket callback and terminate the gateway process.\n this.#logger.error(\"udp send failed\", normalized);\n this.#triggerClose(normalized);\n }\n }\n\n #handleRawPacket(raw: Uint8Array): void {\n if (raw.length < 11) return;\n\n const tag = raw.slice(0, TAG_SIZE);\n const header = raw.slice(TAG_SIZE, TAG_SIZE + 3);\n const ciphertext = raw.slice(TAG_SIZE + 3);\n\n const parsed = parseS2CHeader(header);\n const p: Packet = {\n ...parsed,\n clientID: 0,\n generationID: this.#resolveGeneration(parsed.id, parsed.typeFlagged & 0x0f),\n data: new Uint8Array(0),\n receivedAt: Date.now(),\n };\n\n const decrypted = this.#decryptPacketData(p, header, ciphertext, tag);\n if (decrypted === null) return;\n p.data = decrypted.plaintext;\n\n const pType = packetType(p);\n\n if (pType === PacketType.Ping) {\n this.#sendPong(p.id, decrypted.dummyUsed);\n return;\n }\n\n if (!this.#handleCommandWindowAndAck(p, decrypted.dummyUsed)) return;\n\n this.#handlePacketQueue(p);\n this.#updatePostReceiveState(p);\n }\n\n #resolveGeneration(id: number, pType: number): number {\n switch (pType as PacketType) {\n case PacketType.Command:\n return this.#recvWindowCommand.getGeneration(id);\n case PacketType.CommandLow:\n return this.#recvWindowCommandLow.getGeneration(id);\n case PacketType.Ack:\n return this.#sendWindowCommand.getGeneration(id);\n case PacketType.AckLow:\n return this.#sendWindowCommandLow.getGeneration(id);\n default:\n return 0;\n }\n }\n\n #decryptPacketData(\n p: Packet,\n header: Uint8Array,\n ciphertext: Uint8Array,\n tag: Uint8Array,\n ): { plaintext: Uint8Array; dummyUsed: boolean } | null {\n const unencrypted = (packetFlags(p) & PacketFlags.Unencrypted) !== 0;\n const dummy = !this.#crypt.cryptoInitComplete;\n let dummyUsed = dummy;\n const pType = packetType(p);\n const gen = p.generationID;\n\n try {\n const plaintext = this.#crypt.decrypt(\n pType,\n p.id,\n gen,\n header,\n ciphertext,\n tag,\n dummy,\n unencrypted,\n );\n return { plaintext, dummyUsed };\n } catch {\n // Try adjacent generations\n for (const offset of [-1, 1]) {\n const guessGen = gen + offset;\n if (guessGen < 0) continue;\n try {\n const plaintext = this.#crypt.decrypt(\n pType,\n p.id,\n guessGen,\n header,\n ciphertext,\n tag,\n false,\n false,\n );\n return { plaintext, dummyUsed: false };\n } catch {\n // continue\n }\n }\n\n // Try dummy fallback for command/ack types\n if (\n pType === PacketType.Command ||\n pType === PacketType.CommandLow ||\n pType === PacketType.Ack\n ) {\n try {\n const plaintext = this.#crypt.decrypt(\n pType,\n p.id,\n gen,\n header,\n ciphertext,\n tag,\n true,\n unencrypted,\n );\n return { plaintext, dummyUsed: true };\n } catch {\n // fall through\n }\n }\n\n return null;\n }\n }\n\n #handleCommandWindowAndAck(p: Packet, dummyUsed: boolean): boolean {\n const pType = packetType(p);\n if (pType !== PacketType.Command && pType !== PacketType.CommandLow) return true;\n\n const win = pType === PacketType.Command ? this.#recvWindowCommand : this.#recvWindowCommandLow;\n const ackType = pType === PacketType.Command ? PacketType.Ack : PacketType.AckLow;\n\n if (!win.isInWindow(p.id)) {\n if (win.isOldPacket(p.id)) {\n this.#sendAck(p.id, ackType, dummyUsed);\n }\n return false;\n }\n this.#sendAck(p.id, ackType, dummyUsed);\n return true;\n }\n\n #sendAck(packetID: number, ackType: PacketType, dummyUsed: boolean): void {\n const ackData = new Uint8Array(2);\n new DataView(ackData.buffer).setUint16(0, packetID, false);\n this.#sendPacketRaw(ackType, ackData, 0, dummyUsed);\n }\n\n #sendPong(pID: number, dummyUsed: boolean): void {\n const pongData = new Uint8Array(2);\n new DataView(pongData.buffer).setUint16(0, pID, false);\n this.#sendPacketRaw(PacketType.Pong, pongData, PacketFlags.Unencrypted, dummyUsed);\n }\n\n #handlePacketQueue(p: Packet): void {\n const pType = packetType(p);\n if (pType !== PacketType.Command && pType !== PacketType.CommandLow) {\n this.onPacket?.(p);\n return;\n }\n\n const isCommand = pType === PacketType.Command;\n const queue = isCommand ? this.#commandQueue : this.#commandLowQueue;\n const win = isCommand ? this.#recvWindowCommand : this.#recvWindowCommandLow;\n\n queue.set(p.id, p);\n\n if (isCommand) {\n this.#fastForwardMissingPackets(queue, win, true);\n } else {\n this.#fastForwardMissingPackets(queue, win, false);\n }\n\n while (true) {\n const current = isCommand ? this.#_nextCommandID : this.#_nextCommandLowID;\n const packet = queue.get(current);\n if (packet === undefined) break;\n\n const result = this.#tryReassemble(packet, queue, current, win);\n if (!result) break;\n\n const [reassembled, newNext] = result;\n if (isCommand) this.#_nextCommandID = newNext;\n else this.#_nextCommandLowID = newNext;\n\n this.#tryDecompress(reassembled);\n this.onPacket?.(reassembled);\n }\n }\n\n #_nextCommandID = 0;\n #_nextCommandLowID = 0;\n\n #fastForwardMissingPackets(\n queue: Map<number, Packet>,\n win: GenerationWindow,\n isCommand: boolean,\n ): void {\n let nextID = isCommand ? this.#_nextCommandID : this.#_nextCommandLowID;\n while (!queue.has(nextID) && hasOldNewerPacket(queue, nextID)) {\n nextID = (nextID + 1) & 0xffff;\n win.advance(1);\n }\n if (isCommand) this.#_nextCommandID = nextID;\n else this.#_nextCommandLowID = nextID;\n }\n\n #tryReassemble(\n startPacket: Packet,\n queue: Map<number, Packet>,\n nextID: number,\n win: GenerationWindow,\n ): [reassembled: Packet, newNextID: number] | null {\n if ((packetFlags(startPacket) & PacketFlags.Fragmented) === 0) {\n queue.delete(nextID);\n win.advance(1);\n return [startPacket, (nextID + 1) & 0xffff];\n }\n\n const fragments: Packet[] = [];\n let totalSize = 0;\n let currID = nextID;\n let startSeen = false;\n let complete = false;\n\n while (true) {\n const frag = queue.get(currID);\n if (!frag) return null;\n fragments.push(frag);\n totalSize += frag.data.length;\n\n const fragmented = (packetFlags(frag) & PacketFlags.Fragmented) !== 0;\n if (!startSeen) {\n startSeen = true;\n if (!fragmented) {\n complete = true;\n break;\n }\n } else if (fragmented) {\n complete = true;\n break;\n }\n currID = (currID + 1) & 0xffff;\n }\n\n if (!complete) return null;\n\n const combined = new Uint8Array(totalSize);\n let pos = 0;\n for (const frag of fragments) {\n combined.set(frag.data, pos);\n pos += frag.data.length;\n queue.delete(nextID);\n win.advance(1);\n nextID = (nextID + 1) & 0xffff;\n }\n\n startPacket.data = combined;\n startPacket.typeFlagged &= ~PacketFlags.Fragmented;\n return [startPacket, nextID];\n }\n\n #tryDecompress(packet: Packet): void {\n if ((packetFlags(packet) & PacketFlags.Compressed) === 0) return;\n try {\n const qlz = new Qlz();\n packet.data = qlz.decompress(packet.data);\n packet.typeFlagged &= ~PacketFlags.Compressed;\n } catch (err) {\n this.#logger.debug(\"decompression failed\", { id: packet.id, err });\n }\n }\n\n #updatePostReceiveState(p: Packet): void {\n const pType = packetType(p);\n\n if (pType === PacketType.Init1) {\n this.#initPacketCheck = null;\n return;\n }\n\n if ((pType === PacketType.Ack || pType === PacketType.AckLow) && p.data.length >= 2) {\n const ackID = new DataView(p.data.buffer, p.data.byteOffset).getUint16(0, false);\n const targetType = pType === PacketType.Ack ? PacketType.Command : PacketType.CommandLow;\n const key = (targetType << 16) | ackID;\n this.#ackManager.delete(key);\n }\n }\n\n #nextPacketIdentity(pType: PacketType): [id: number, gen: number] {\n const pID = this.#packetCounter[pType]!;\n const pGen = this.#generationCounter[pType]!;\n\n if (pType === PacketType.Init1) return [pID, pGen];\n\n this.#packetCounter[pType] = (pID + 1) & 0xffff;\n if (this.#packetCounter[pType] === 0) {\n this.#generationCounter[pType] = (pGen + 1) >>> 0;\n }\n\n if (pType === PacketType.Command) {\n this.#sendWindowCommand.advanceToExcluded(pID);\n } else if (pType === PacketType.CommandLow) {\n this.#sendWindowCommandLow.advanceToExcluded(pID);\n }\n\n return [pID, pGen];\n }\n\n #trackResend(pType: PacketType, p: Packet, rp: ResendPacket): void {\n if (pType === PacketType.Init1) {\n this.#initPacketCheck = rp;\n return;\n }\n if (pType === PacketType.Command || pType === PacketType.CommandLow) {\n const key = (pType << 16) | p.id;\n this.#ackManager.set(key, rp);\n }\n }\n\n #checkResends(): void {\n const now = Date.now();\n\n if (now - this.#lastMessageReceived > PACKET_TIMEOUT_MS) {\n this.#logger.warn(\"idle timeout\");\n this.#triggerClose(new Error(\"idle timeout\"));\n return;\n }\n\n if (this.#initPacketCheck) {\n this.#doResend(this.#initPacketCheck, now);\n }\n\n for (const [key, rp] of this.#ackManager) {\n if (now - rp.firstSend > PACKET_TIMEOUT_MS) {\n this.#ackManager.delete(key);\n this.#triggerClose(new Error(\"packet ack timeout\"));\n return;\n }\n this.#doResend(rp, now);\n }\n }\n\n #doResend(rp: ResendPacket, now: number): void {\n if (now - rp.lastSend < rp.nextInterval) return;\n\n rp.lastSend = now;\n rp.retryCount++;\n rp.nextInterval = Math.min(rp.nextInterval * 2, MAX_RETRY_INTERVAL_MS);\n\n const dummy = !this.#crypt.cryptoInitComplete;\n const unencrypted = (packetFlags(rp.packet) & PacketFlags.Unencrypted) !== 0;\n const header = buildC2SHeader(rp.packet);\n const pType = packetType(rp.packet);\n\n const [ciphertext, tag] = this.#crypt.encrypt(\n pType,\n rp.packet.id,\n rp.packet.generationID,\n header,\n rp.packet.data,\n dummy,\n unencrypted,\n );\n\n const final = new Uint8Array(TAG_SIZE + HEADER_SIZE + ciphertext.length);\n final.set(tag.slice(0, TAG_SIZE), 0);\n final.set(header, TAG_SIZE);\n final.set(ciphertext, TAG_SIZE + HEADER_SIZE);\n this.#write(final);\n }\n\n #triggerClose(err: Error | null): void {\n if (this.#closed) return;\n this.close();\n this.onClosed?.(err);\n }\n}\n\n// ---- Helpers ----------------------------------------------------------------\n\nfunction applyProtocolFlags(pType: PacketType, flags: number): number {\n if (pType === PacketType.Command || pType === PacketType.CommandLow) {\n return flags | PacketFlags.NewProtocol;\n }\n return flags;\n}\n\nfunction hasOldNewerPacket(queue: Map<number, Packet>, nextID: number): boolean {\n const now = Date.now();\n for (const [id, pkg] of queue) {\n const diff = (id - nextID + 0x10000) & 0xffff;\n if (diff < 0x8000 && now - pkg.receivedAt > 5_000) {\n return true;\n }\n }\n return false;\n}\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- const e=require("./command-DAK4pUBP.cjs");function t(t){if(t===``)return null;let n=0;for(let e=0;e<t.length;e++){let r=t.charCodeAt(e);if(r>=32&&r<=126){n=e;break}}n>0&&(t=t.slice(n));let r=t.split(` `);if(r.length===0)return null;let i=r[0]??``;if(i===``)return null;let a={};for(let t=1;t<r.length;t++){let n=r[t];if(n===void 0||n===``)continue;let i=n.indexOf(`=`);i>=0?a[e.i(n.slice(0,i))]=e.i(n.slice(i+1)):a[e.i(n)]=``}return{name:i,params:a}}Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return t}});
2
- //# sourceMappingURL=parser-CL33R9tr.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parser-CL33R9tr.cjs","names":["unescape","require_command","parseCommand","s","startIndex","i","code","parts","name","params","p","eqIdx"],"sources":["../src/command/parser.ts"],"sourcesContent":["import { unescape } from \"./command.js\";\nimport type { Command } from \"./command.js\";\n\nexport function parseCommand(s: string): Command | null {\n if (s === \"\") return null;\n\n // Skip leading non-printable bytes (< 0x20 or > 0x7E)\n let startIndex = 0;\n for (let i = 0; i < s.length; i++) {\n const code = s.charCodeAt(i);\n if (code >= 32 && code <= 126) {\n startIndex = i;\n break;\n }\n }\n if (startIndex > 0) {\n s = s.slice(startIndex);\n }\n\n const parts = s.split(\" \");\n if (parts.length === 0) return null;\n\n const name = parts[0] ?? \"\";\n if (name === \"\") return null;\n\n const params: Record<string, string> = {};\n\n for (let i = 1; i < parts.length; i++) {\n const p = parts[i];\n if (p === undefined || p === \"\") continue;\n const eqIdx = p.indexOf(\"=\");\n if (eqIdx >= 0) {\n params[unescape(p.slice(0, eqIdx))] = unescape(p.slice(eqIdx + 1));\n } else {\n params[unescape(p)] = \"\";\n }\n }\n\n return { name, params };\n}\n"],"mappings":"0CAGA,SAAgBE,EAAa,EAA2B,CACtD,GAAIC,IAAM,GAAI,OAAO,KAGrB,IAAIC,EAAa,EACjB,IAAK,IAAIC,EAAI,EAAGA,EAAIF,EAAE,OAAQ,IAAK,CACjC,IAAMG,EAAOH,EAAE,WAAWE,CAAC,EAC3B,GAAIC,GAAQ,IAAMA,GAAQ,IAAK,CAC7B,EAAaD,EACb,KACF,CACF,CACID,EAAa,IACf,EAAID,EAAE,MAAMC,CAAU,GAGxB,IAAMG,EAAQJ,EAAE,MAAM,GAAG,EACzB,GAAII,EAAM,SAAW,EAAG,OAAO,KAE/B,IAAMC,EAAOD,EAAM,IAAM,GACzB,GAAIC,IAAS,GAAI,OAAO,KAExB,IAAMC,EAAiC,CAAC,EAExC,IAAK,IAAIJ,EAAI,EAAGA,EAAIE,EAAM,OAAQ,IAAK,CACrC,IAAMG,EAAIH,EAAMF,GAChB,GAAIK,IAAM,IAAA,IAAaA,IAAM,GAAI,SACjC,IAAMC,EAAQD,EAAE,QAAQ,GAAG,EACvBC,GAAS,EACX,EAAOX,EAAAA,EAASU,EAAE,MAAM,EAAGC,CAAK,CAAC,GAAKX,EAAAA,EAASU,EAAE,MAAMC,EAAQ,CAAC,CAAC,EAEjE,EAAOX,EAAAA,EAASU,CAAC,GAAK,EAE1B,CAEA,MAAO,CAAE,OAAM,QAAO,CACxB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"parser-DZMv3Jm-.js","names":["unescape","parseCommand","s","startIndex","i","code","parts","name","params","p","eqIdx"],"sources":["../src/command/parser.ts"],"sourcesContent":["import { unescape } from \"./command.js\";\nimport type { Command } from \"./command.js\";\n\nexport function parseCommand(s: string): Command | null {\n if (s === \"\") return null;\n\n // Skip leading non-printable bytes (< 0x20 or > 0x7E)\n let startIndex = 0;\n for (let i = 0; i < s.length; i++) {\n const code = s.charCodeAt(i);\n if (code >= 32 && code <= 126) {\n startIndex = i;\n break;\n }\n }\n if (startIndex > 0) {\n s = s.slice(startIndex);\n }\n\n const parts = s.split(\" \");\n if (parts.length === 0) return null;\n\n const name = parts[0] ?? \"\";\n if (name === \"\") return null;\n\n const params: Record<string, string> = {};\n\n for (let i = 1; i < parts.length; i++) {\n const p = parts[i];\n if (p === undefined || p === \"\") continue;\n const eqIdx = p.indexOf(\"=\");\n if (eqIdx >= 0) {\n params[unescape(p.slice(0, eqIdx))] = unescape(p.slice(eqIdx + 1));\n } else {\n params[unescape(p)] = \"\";\n }\n }\n\n return { name, params };\n}\n"],"mappings":";;AAGA,SAAgBC,EAAa,GAA2B;CACtD,IAAIC,MAAM,IAAI,OAAO;CAGrB,IAAIC,IAAa;CACjB,KAAK,IAAIC,IAAI,GAAGA,IAAIF,EAAE,QAAQ,KAAK;EACjC,IAAMG,IAAOH,EAAE,WAAWE,CAAC;EAC3B,IAAIC,KAAQ,MAAMA,KAAQ,KAAK;GAC7B,IAAaD;GACb;EACF;CACF;CACA,AAAID,IAAa,MACf,IAAID,EAAE,MAAMC,CAAU;CAGxB,IAAMG,IAAQJ,EAAE,MAAM,GAAG;CACzB,IAAII,EAAM,WAAW,GAAG,OAAO;CAE/B,IAAMC,IAAOD,EAAM,MAAM;CACzB,IAAIC,MAAS,IAAI,OAAO;CAExB,IAAMC,IAAiC,CAAC;CAExC,KAAK,IAAIJ,IAAI,GAAGA,IAAIE,EAAM,QAAQ,KAAK;EACrC,IAAMG,IAAIH,EAAMF;EAChB,IAAIK,MAAM,KAAA,KAAaA,MAAM,IAAI;EACjC,IAAMC,IAAQD,EAAE,QAAQ,GAAG;EAC3B,AAAIC,KAAS,IACX,EAAOV,EAASS,EAAE,MAAM,GAAGC,CAAK,CAAC,KAAKV,EAASS,EAAE,MAAMC,IAAQ,CAAC,CAAC,IAEjE,EAAOV,EAASS,CAAC,KAAK;CAE1B;CAEA,OAAO;EAAE;EAAM;CAAO;AACxB"}
@@ -1,2 +0,0 @@
1
- let e=require("node:crypto");var t=class extends Error{constructor(e,t){super(e,t),this.name=`TeamspeakError`}},n=class extends t{id;serverMessage;constructor(e,t){super(`TeamSpeak server error: ${t} (id=${e})`),this.name=`ServerError`,this.id=e,this.serverMessage=t}},r=class extends t{command;constructor(e){super(`command timeout: ${e}`),this.name=`CommandTimeoutError`,this.command=e}},i=class extends t{constructor(){super(`already connecting or connected`),this.name=`AlreadyConnectedError`}},a=class extends t{constructor(){super(`EAX tag mismatch`),this.name=`EAXTagMismatchError`}},o=class extends t{constructor(){super(`fake signature mismatch`),this.name=`FakeSignatureMismatchError`}},s=class extends t{constructor(e,t){super(e,t),this.name=`FileTransferError`}},c=class extends t{constructor(){super(`timeout waiting for file transfer notification`),this.name=`FileTransferTimeoutError`}},l=class extends t{constructor(e,t){super(e,t),this.name=`CryptoInitError`}},u=class extends t{constructor(e=`invalid identity format`){super(e),this.name=`InvalidIdentityError`}},d=32,f=65,p=4,m=class{privateKey;offset;constructor(e,t){this.privateKey=e,this.offset=t}publicKeyBase64(){let e=this.privateKey.export({format:`jwk`});return e.x===void 0||e.y===void 0||typeof e.x!=`string`||typeof e.y!=`string`?``:y(ee(e.x,d),ee(e.y,d))}toString(){let e=this.privateKey.export({format:`jwk`});if(!e.d)return`:${this.offset}`;let t=ee(e.d,d);return`${Buffer.from(t).toString(`base64`)}:${this.offset}`}securityLevel(){let t=(0,e.createHash)(`sha1`);return t.update(this.publicKeyBase64()),t.update(this.offset.toString(10)),te(t.digest())}async upgradeToLevel(t,n){let r=this.publicKeyBase64();for(;;){if(n?.aborted)throw n.reason;let i=(0,e.createHash)(`sha1`);if(i.update(r),i.update(this.offset.toString(10)),te(i.digest())>=t)return;this.offset++,this.offset%10000n==0n&&await new Promise(e=>setImmediate(e))}}};function h(t){let n=t.lastIndexOf(`:`);if(n<0)throw new u;let r=t.slice(0,n),i=t.slice(n+1),a=Buffer.from(r,`base64`),o=BigInt(i);if(a.length>d)throw new u(`private key scalar too large`);let s=Buffer.alloc(d);a.copy(s,d-a.length);let c=(0,e.createECDH)(`prime256v1`);c.setPrivateKey(s);let l=c.getPublicKey(null,`uncompressed`),f=Buffer.from(l.slice(1,33)).toString(`base64url`),p=Buffer.from(l.slice(33,65)).toString(`base64url`),h={kty:`EC`,crv:`P-256`,d:s.toString(`base64url`),x:f,y:p};return new m((0,e.createPrivateKey)({key:h,format:`jwk`}),o)}function g(t){let{privateKey:n}=(0,e.generateKeyPairSync)(`ec`,{namedCurve:`prime256v1`}),r=new m(n,0n),i=r.publicKeyBase64();for(;;){let n=(0,e.createHash)(`sha1`);if(n.update(i),n.update(r.offset.toString(10)),te(n.digest())>=t)return r;r.offset++}}function _(t){let n=(0,e.createHash)(`sha1`).update(t).digest();return Buffer.from(n).toString(`base64`)}function v(t){return(0,e.createHash)(`sha512`).update(t).digest()}function y(e,t){let n=T(3,Buffer.from([7,0])),r=T(2,D(32)),i=T(2,D(e)),a=T(2,D(t));return T(48,Buffer.concat([n,r,i,a])).toString(`base64`)}function b(t){let n=x(t),r={kty:`EC`,crv:`P-256`,x:Buffer.from(n.slice(1,33)).toString(`base64url`),y:Buffer.from(n.slice(33,65)).toString(`base64url`)};return(0,e.createPublicKey)({key:r,format:`jwk`})}function x(e){try{return S(e)}catch{}return C(e)}function S(e){let t=O(e,48).value,n=0,r=O(t,3,n);n+=r.consumed;let i=O(t,2,n);n+=i.consumed;let a=O(t,2,n);n+=a.consumed;let o=O(t,2,n);return w(k(a.value,d),k(o.value,d))}function C(e){let t=O(e,48).value,n=0,r=O(t,2,n);n+=r.consumed;let i=O(t,2,n);return w(k(r.value,d),k(i.value,d))}function w(e,t){if(e.length>d||t.length>d)throw Error(`invalid public key point encoding`);let n=new Uint8Array(f);return n[0]=p,n.set(e,33-e.length),n.set(t,65-t.length),n}function T(e,t){let n=E(t.length);return Buffer.concat([Buffer.from([e]),n,t])}function E(e){return e<128?Buffer.from([e]):e<256?Buffer.from([129,e]):Buffer.from([130,e>>8&255,e&255])}function D(e){if(typeof e==`number`){let t=[],n=e;do t.unshift(n&255),n>>=8;while(n>0);return t[0]&128&&t.unshift(0),Buffer.from(t)}let t=0;for(;t<e.length-1&&e[t]===0;)t++;let n=e.slice(t);return n[0]&128?Buffer.concat([Buffer.from([0]),n]):Buffer.from(n)}function O(e,t,n=0){if(e[n]!==t)throw Error(`expected DER tag 0x${t.toString(16)}, got 0x${(e[n]??0).toString(16)}`);let r=n+1,i,a=e[r++];if(a<128)i=a;else if(a===129)i=e[r++];else if(a===130)i=(e[r]<<8|e[r+1])>>>0,r+=2;else throw Error(`unsupported DER length encoding`);return{value:e.slice(r,r+i),consumed:r-n+i}}function k(e,t){let n=0;for(;n<e.length-1&&e[n]===0;)n++;let r=e.slice(n);if(r.length>t)throw Error(`integer too large`);if(r.length===t)return r;let i=new Uint8Array(t);return i.set(r,t-r.length),i}function ee(e,t){let n=Buffer.from(e,`base64url`);if(n.length===t)return n;let r=Buffer.alloc(t);return n.copy(r,t-n.length),r}function te(e){let t=0;for(let n of e)if(n===0)t+=8;else for(let e=0;e<8;e++)if(!(n&1<<e))t++;else return t;return t}var ne=BigInt(2**32-1),re=BigInt(32);function ie(e,t=!1){return t?{h:Number(e&ne),l:Number(e>>re&ne)}:{h:Number(e>>re&ne)|0,l:Number(e&ne)|0}}function ae(e,t=!1){let n=e.length,r=new Uint32Array(n),i=new Uint32Array(n);for(let a=0;a<n;a++){let{h:n,l:o}=ie(e[a],t);[r[a],i[a]]=[n,o]}return[r,i]}var oe=e=>e/2**32|0,se=e=>e>>>0;function ce(e,t,n,r){let i=oe(n),a=se(n);e.setUint32(t,r?a:i,r),e.setUint32(t+4,r?i:a,r)}var le=(e,t,n)=>e>>>n,ue=(e,t,n)=>e<<32-n|t>>>n,A=(e,t,n)=>e>>>n|t<<32-n,j=(e,t,n)=>e<<32-n|t>>>n,de=(e,t,n)=>e<<64-n|t>>>n-32,fe=(e,t,n)=>e>>>n-32|t<<64-n;function M(e,t,n,r){let i=(t>>>0)+(r>>>0);return{h:e+n+(i/2**32|0)|0,l:i|0}}var pe=(e,t,n)=>(e>>>0)+(t>>>0)+(n>>>0),me=(e,t,n,r)=>t+n+r+(e/2**32|0)|0,he=(e,t,n,r)=>(e>>>0)+(t>>>0)+(n>>>0)+(r>>>0),ge=(e,t,n,r,i)=>t+n+r+i+(e/2**32|0)|0,_e=(e,t,n,r,i)=>(e>>>0)+(t>>>0)+(n>>>0)+(r>>>0)+(i>>>0),ve=(e,t,n,r,i,a)=>t+n+r+i+a+(e/2**32|0)|0;function ye(e){return e instanceof Uint8Array||ArrayBuffer.isView(e)&&e.constructor.name===`Uint8Array`&&`BYTES_PER_ELEMENT`in e&&e.BYTES_PER_ELEMENT===1}var be=e=>e?`"${e}" `:``;function N(e,t=``){if(typeof e!=`number`)throw TypeError(be(t)+`expected number, got `+typeof e);if(!Number.isSafeInteger(e)||e<0)throw RangeError(be(t)+`expected integer >= 0, got `+e);return e}function P(e,t,n=``){if(ye(e)&&(t===void 0||e.length===t))return e;t!==void 0&&N(t,`length`);let r=ye(e),i=t===void 0?``:` of length ${t}`,a=r?`length=${e.length}`:`type=${typeof e}`,o=be(n)+`expected Uint8Array`+i+`, got `+a;throw r?RangeError(o):TypeError(o)}var xe=(e,t)=>{if(typeof e!=`object`||!e||Array.isArray(e))throw TypeError((t===`object`?``:`"${t}" `)+`expected object, got type=`+typeof e)},Se=(e,t)=>{xe(e,t);let n=Object.getPrototypeOf(e);if(n!==Object.prototype&&n!==null)throw TypeError(`"${t}" expected plain object`);if(Object.hasOwn(e,`__proto__`))throw TypeError(`"${t}.__proto__" is not allowed`)};function Ce(e,t=!0){if(e.destroyed)throw Error(`hash was destroyed`);if(t&&e.finished)throw Error(`digest() was already called`)}function we(e,t){P(e,void 0,`output`);let n=t.outputLen;if(!(e.length>=n))throw RangeError(`"output" expected length >= `+n)}function Te(...e){for(let t=0;t<e.length;t++)e[t].fill(0)}function Ee(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}var De=typeof Uint8Array.from([]).toHex==`function`&&typeof Uint8Array.fromHex==`function`,Oe=Array.from({length:256},(e,t)=>t.toString(16).padStart(2,`0`));function ke(e){if(P(e),De)return e.toHex();let t=``;for(let n=0;n<e.length;n++)t+=Oe[e[n]];return t}function Ae(e){return e>=48&&e<=57?e-48:e>=65&&e<=70?e-55:e>=97&&e<=102?e-87:void 0}function je(e){if(typeof e!=`string`)throw TypeError(`hex string expected, got `+typeof e);if(De)try{return Uint8Array.fromHex(e)}catch(e){throw e instanceof SyntaxError?RangeError(e.message):e}let t=e.length,n=t/2;if(t%2)throw RangeError(`hex string expected, got unpadded hex of length `+t);let r=new Uint8Array(n);for(let t=0,i=0;t<n;t++,i+=2){let n=Ae(e.charCodeAt(i)),a=Ae(e.charCodeAt(i+1));if(n===void 0||a===void 0){let t=e[i]+e[i+1];throw RangeError(`hex string expected, got non-hex character "`+t+`" at index `+i)}r[t]=n*16+a}return r}function Me(...e){let t=0;for(let n=0;n<e.length;n++){let r=e[n];P(r),t+=r.length}let n=new Uint8Array(t);for(let t=0,r=0;t<e.length;t++){let i=e[t];n.set(i,r),r+=i.length}return n}function Ne(e,t,n=`opts`){return Se(e,`defaults`),t!==void 0&&Se(t,n),Object.assign(Object.create(null),e,t)}function Pe(e,t={}){if(typeof e!=`function`)throw TypeError(`"hashCons" expected function, got type=`+typeof e);t=Ne({},t,`info`);let n=(t,n)=>e(n).update(t).digest(),r=e(void 0);return n.outputLen=r.outputLen,n.blockLen=r.blockLen,n.canXOF=r.canXOF,n.create=t=>e(t),Object.assign(n,t),Object.freeze(n)}function Fe(e=32){N(e,`bytesLength`);let t=typeof globalThis==`object`?globalThis.crypto:null;if(typeof t?.getRandomValues!=`function`)throw Error(`crypto.getRandomValues must be defined`);if(e>65536)throw RangeError(`"bytesLength" expected <= 65536, got ${e}`);return t.getRandomValues(new Uint8Array(e))}var Ie=e=>({oid:Uint8Array.from([6,9,96,134,72,1,101,3,4,2,e])}),Le=class{blockLen;outputLen;canXOF=!1;padOffset;isLE;buffer;view;finished=!1;length=0;pos=0;destroyed=!1;constructor(e,t,n,r){this.blockLen=e,this.outputLen=t,this.padOffset=n,this.isLE=r,this.buffer=new Uint8Array(e),this.view=Ee(this.buffer)}update(e){Ce(this),P(e);let{view:t,buffer:n,blockLen:r}=this,i=e.length,a=!1;for(let o=0;o<i;){let s=Math.min(r-this.pos,i-o);if(s===r){let t=Ee(e);for(;r<=i-o;o+=r)this.process(t,o);a=!0;continue}n.set(o===0&&s===i?e:e.subarray(o,o+s),this.pos),this.pos+=s,o+=s,this.pos===r&&(this.process(t,0),this.pos=0,a=!0)}return this.length+=e.length,a&&this.roundClean(),this}digestInto(e){Ce(this),we(e,this),this.finished=!0;let{buffer:t,view:n,blockLen:r,isLE:i}=this,{pos:a}=this;t[a++]=128,t.fill(0,a),this.padOffset>r-a&&(this.process(n,0),t.fill(0)),ce(n,r-8,this.length*8,i),this.process(n,0),this.roundClean();let o=e===t?n:Ee(e),s=this.outputLen,c=s/4,l=this.get();if(s%4||c>l.length)throw Error(`invalid outputLen`);for(let e=0;e<c;e++)o.setUint32(4*e,l[e],i)}digest(){let{buffer:e,outputLen:t}=this;this.digestInto(e);let n=e.slice(0,t);return this.destroy(),n}_cloneIntoMeta(e){let{buffer:t,length:n,finished:r,destroyed:i,pos:a}=this;return e.destroyed=i,e.finished=r,e.length=n,e.pos=a,a&&e.buffer.set(t),e}clone(){return this._cloneInto()}},Re=Uint32Array.from([1779033703,4089235720,3144134277,2227873595,1013904242,4271175723,2773480762,1595750129,1359893119,2917565137,2600822924,725511199,528734635,4215389547,1541459225,327033209]),ze=ae(`0x428a2f98d728ae22.0x7137449123ef65cd.0xb5c0fbcfec4d3b2f.0xe9b5dba58189dbbc.0x3956c25bf348b538.0x59f111f1b605d019.0x923f82a4af194f9b.0xab1c5ed5da6d8118.0xd807aa98a3030242.0x12835b0145706fbe.0x243185be4ee4b28c.0x550c7dc3d5ffb4e2.0x72be5d74f27b896f.0x80deb1fe3b1696b1.0x9bdc06a725c71235.0xc19bf174cf692694.0xe49b69c19ef14ad2.0xefbe4786384f25e3.0x0fc19dc68b8cd5b5.0x240ca1cc77ac9c65.0x2de92c6f592b0275.0x4a7484aa6ea6e483.0x5cb0a9dcbd41fbd4.0x76f988da831153b5.0x983e5152ee66dfab.0xa831c66d2db43210.0xb00327c898fb213f.0xbf597fc7beef0ee4.0xc6e00bf33da88fc2.0xd5a79147930aa725.0x06ca6351e003826f.0x142929670a0e6e70.0x27b70a8546d22ffc.0x2e1b21385c26c926.0x4d2c6dfc5ac42aed.0x53380d139d95b3df.0x650a73548baf63de.0x766a0abb3c77b2a8.0x81c2c92e47edaee6.0x92722c851482353b.0xa2bfe8a14cf10364.0xa81a664bbc423001.0xc24b8b70d0f89791.0xc76c51a30654be30.0xd192e819d6ef5218.0xd69906245565a910.0xf40e35855771202a.0x106aa07032bbd1b8.0x19a4c116b8d2d0c8.0x1e376c085141ab53.0x2748774cdf8eeb99.0x34b0bcb5e19b48a8.0x391c0cb3c5c95a63.0x4ed8aa4ae3418acb.0x5b9cca4f7763e373.0x682e6ff3d6b2b8a3.0x748f82ee5defb2fc.0x78a5636f43172f60.0x84c87814a1f0ab72.0x8cc702081a6439ec.0x90befffa23631e28.0xa4506cebde82bde9.0xbef9a3f7b2c67915.0xc67178f2e372532b.0xca273eceea26619c.0xd186b8c721c0c207.0xeada7dd6cde0eb1e.0xf57d4f7fee6ed178.0x06f067aa72176fba.0x0a637dc5a2c898a6.0x113f9804bef90dae.0x1b710b35131c471b.0x28db77f523047d84.0x32caab7b40c72493.0x3c9ebe0a15c9bebc.0x431d67c49c100d4c.0x4cc5d4becb3e42b6.0x597f299cfc657e2a.0x5fcb6fab3ad6faec.0x6c44198c4a475817`.split(`.`).map(e=>BigInt(e))),Be=ze[0],Ve=ze[1],F=new Uint32Array(80),I=new Uint32Array(80),He=class extends Le{Ah=0;Al=0;Bh=0;Bl=0;Ch=0;Cl=0;Dh=0;Dl=0;Eh=0;El=0;Fh=0;Fl=0;Gh=0;Gl=0;Hh=0;Hl=0;constructor(e,t){super(128,e,16,!1),this.Ah=t[0]|0,this.Al=t[1]|0,this.Bh=t[2]|0,this.Bl=t[3]|0,this.Ch=t[4]|0,this.Cl=t[5]|0,this.Dh=t[6]|0,this.Dl=t[7]|0,this.Eh=t[8]|0,this.El=t[9]|0,this.Fh=t[10]|0,this.Fl=t[11]|0,this.Gh=t[12]|0,this.Gl=t[13]|0,this.Hh=t[14]|0,this.Hl=t[15]|0}get(){let{Ah:e,Al:t,Bh:n,Bl:r,Ch:i,Cl:a,Dh:o,Dl:s,Eh:c,El:l,Fh:u,Fl:d,Gh:f,Gl:p,Hh:m,Hl:h}=this;return[e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h]}set(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m,h){this.Ah=e|0,this.Al=t|0,this.Bh=n|0,this.Bl=r|0,this.Ch=i|0,this.Cl=a|0,this.Dh=o|0,this.Dl=s|0,this.Eh=c|0,this.El=l|0,this.Fh=u|0,this.Fl=d|0,this.Gh=f|0,this.Gl=p|0,this.Hh=m|0,this.Hl=h|0}_cloneInto(e){return(e||=new this.constructor).set(...this.get()),this._cloneIntoMeta(e)}process(e,t){for(let n=0;n<16;n++,t+=4)F[n]=e.getUint32(t),I[n]=e.getUint32(t+=4);for(let e=16;e<80;e++){let t=F[e-15]|0,n=I[e-15]|0,r=A(t,n,1)^A(t,n,8)^le(t,n,7),i=j(t,n,1)^j(t,n,8)^ue(t,n,7),a=F[e-2]|0,o=I[e-2]|0,s=A(a,o,19)^de(a,o,61)^le(a,o,6),c=he(i,j(a,o,19)^fe(a,o,61)^ue(a,o,6),I[e-7],I[e-16]),l=ge(c,r,s,F[e-7],F[e-16]);F[e]=l|0,I[e]=c|0}let{Ah:n,Al:r,Bh:i,Bl:a,Ch:o,Cl:s,Dh:c,Dl:l,Eh:u,El:d,Fh:f,Fl:p,Gh:m,Gl:h,Hh:g,Hl:_}=this;for(let e=0;e<80;e++){let t=A(u,d,14)^A(u,d,18)^de(u,d,41),v=j(u,d,14)^j(u,d,18)^fe(u,d,41),y=u&f^~u&m,b=d&p^~d&h,x=_e(_,v,b,Ve[e],I[e]),S=ve(x,g,t,y,Be[e],F[e]),C=x|0,w=A(n,r,28)^de(n,r,34)^de(n,r,39),T=j(n,r,28)^fe(n,r,34)^fe(n,r,39),E=n&i^n&o^i&o,D=r&a^r&s^a&s;g=m|0,_=h|0,m=f|0,h=p|0,f=u|0,p=d|0,{h:u,l:d}=M(c|0,l|0,S|0,C|0),c=o|0,l=s|0,o=i|0,s=a|0,i=n|0,a=r|0;let O=pe(C,T,D);n=me(O,S,w,E),r=O|0}({h:n,l:r}=M(this.Ah|0,this.Al|0,n|0,r|0)),{h:i,l:a}=M(this.Bh|0,this.Bl|0,i|0,a|0),{h:o,l:s}=M(this.Ch|0,this.Cl|0,o|0,s|0),{h:c,l}=M(this.Dh|0,this.Dl|0,c|0,l|0),{h:u,l:d}=M(this.Eh|0,this.El|0,u|0,d|0),{h:f,l:p}=M(this.Fh|0,this.Fl|0,f|0,p|0),{h:m,l:h}=M(this.Gh|0,this.Gl|0,m|0,h|0),{h:g,l:_}=M(this.Hh|0,this.Hl|0,g|0,_|0),this.set(n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_)}roundClean(){Te(F,I)}destroy(){this.destroyed=!0,Te(this.buffer),this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0)}},Ue=class extends He{constructor(){super(64,Re)}},We=Pe(()=>new Ue,Ie(3));function Ge(e,t,n=()=>{}){if(!Array.isArray(e))throw TypeError(`"${t}" expected array, got type=${typeof e}`);for(let r=0;r<e.length;r++)n(e[r],`${t}[${r}]`);return e}var L=(e,t,n)=>P(e,t,n),Ke=N;function R(e,t=`object`){if(typeof e!=`object`||!e||Array.isArray(e))throw TypeError(t===`object`?`expected valid options object`:`"${t}" expected object, got type=${typeof e}`);return e}function z(e,t){if(typeof e!=`function`)throw TypeError(`"${t}" is invalid: expected function, got ${typeof e}`);return e}var qe=ke,Je=(...e)=>Me(...e),Ye=e=>je(e),Xe=ye,Ze=e=>Fe(e),B=BigInt(0),Qe=BigInt(1),$e=e=>e?`"${e}" `:``;function V(e,t=``){if(typeof e!=`boolean`)throw TypeError($e(t)+`expected boolean, got type=`+typeof e);return e}function et(e){if(typeof e==`bigint`){if(!U(e))throw RangeError(`positive bigint expected, got `+e)}else Ke(e);return e}function tt(e,t=``){if(typeof e!=`number`){let n=t&&`"${t}" `;throw TypeError(n+`expected number, got type=`+typeof e)}if(!Number.isSafeInteger(e)){let n=t&&`"${t}" `;throw RangeError(n+`expected safe integer, got `+e)}}function nt(e){if(typeof e!=`string`)throw TypeError(`hex string expected, got `+typeof e);return e===``?B:BigInt(`0x`+e)}function rt(e){return nt(ke(e))}function H(e){return nt(ke(ot(P(e)).reverse()))}function it(e,t){if(N(t),t===0)throw Error(`zero output length is invalid`);e=et(e);let n=t*2,r=e.toString(16);if(r.length>n)throw RangeError(`number is too large`);return je(r.padStart(n,`0`))}function at(e,t){return it(e,t).reverse()}function ot(e){return Uint8Array.from(L(e))}function U(e){return typeof e==`bigint`&&B<=e}function st(e,t,n){return U(e)&&U(t)&&U(n)&&t<=e&&e<n}function ct(e,t,n,r){if(!st(t,n,r))throw RangeError(`expected valid `+e+`: `+n+` <= n < `+r+`, got `+t)}function lt(e){if(e<B)throw Error(`expected non-negative bigint, got `+e);return e===B?0:e.toString(2).length}var ut=e=>(tt(e,`n`),(Qe<<BigInt(e))-Qe);function W(e,t={},n={},r=`object`){R(e,r),R(t,`fields`),R(n,`optFields`);function i(t,n,i){let a=r===`object`?`param "${String(t)}"`:`"${r}.${String(t)}"`,o=e[t];if(!Object.hasOwn(e,t)&&(i?o!==void 0:n!==`function`))throw TypeError(`${a} is invalid: expected own property`);if(i&&o===void 0)return;let s=typeof o;if(s!==n||o===null)throw TypeError(`${a} is invalid: expected ${n}, got ${s}`)}let a=(e,t)=>Object.entries(e).forEach(([e,n])=>i(e,n,t));a(t,!1),a(n,!0)}var G=BigInt(0),K=BigInt(1),q=BigInt(2),dt=BigInt(3),ft=BigInt(4),pt=BigInt(5),mt=BigInt(7),ht=BigInt(8),gt=BigInt(9),_t=BigInt(15),vt=BigInt(16),yt=BigInt(`0x10000000000000000`);function J(e,t){if(t<=G)throw Error(`mod: expected positive modulus, got `+t);let n=e%t;return n>=G?n:t+n}function bt(e,t,n){if(n<=K)throw Error(`pow: expected modulus > 1, got `+n);if(typeof t!=`bigint`)throw TypeError(`invalid exponent: expected bigint, got `+typeof t);if(t<G)throw Error(`invalid exponent, negatives unsupported`);if(t===G)return K;if(t===K)return e;let r=e%n;if(r<G&&(r+=n),t<yt){let e=K;for(;t>G;)t&K&&(e=e*r%n),r=r*r%n,t>>=K;return e}let i=[];for(;t>G;)i.push(Number(t&_t)),t>>=ft;let a=Array(16);a[0]=K,a[1]=r;for(let e=2;e<16;e++)a[e]=a[e-1]*r%n;let o=a[i[i.length-1]];for(let e=i.length-2;e>=0;e--){o=o*o%n,o=o*o%n,o=o*o%n,o=o*o%n;let t=i[e];t!==0&&(o=o*a[t]%n)}return o}function Y(e,t,n){if(n<=K)throw Error(`pow2: expected modulus > 1, got `+n);if(t<G)throw Error(`pow2: expected non-negative exponent, got `+t);let r=e;for(;t-->G;)r*=r,r%=n;return r}function xt(e,t){if(e===G)throw Error(`invert: expected non-zero number`);if(t<=K)throw Error(`invert: expected modulus > 1, got `+t);let n=J(e,t),r=t,i=G,a=K;for(;n!==G;){let e=r/n,t=r-n*e,o=i-a*e;r=n,n=t,i=a,a=o}if(r!==K)throw Error(`invert: does not exist`);return J(i,t)}function St(e,t,n){let r=e;if(!r.eql(r.sqr(t),n))throw Error(`Cannot find square root`)}function Ct(e,t){if((e&K)===G)throw Error(t+`: expected odd modulus, got `+e)}function wt(e,t){let n=e,r=(n.ORDER+K)/ft,i=n.pow(t,r);return St(n,i,t),i}function Tt(e,t){let n=e,r=(n.ORDER-pt)/ht,i=n.mul(t,q),a=n.pow(i,r),o=n.mul(t,a),s=n.mul(n.mul(o,q),a),c=n.mul(o,n.sub(s,n.ONE));return St(n,c,t),c}function Et(e){let t=It(e),n=Dt(e),r=n(t,t.neg(t.ONE)),i=n(t,r),a=n(t,t.neg(r)),o=(e+mt)/vt;return((e,t)=>{let n=e,s=n.pow(t,o),c=n.mul(s,r),l=n.mul(s,i),u=n.mul(s,a),d=n.eql(n.sqr(c),t),f=n.eql(n.sqr(l),t);s=n.cmov(s,c,d),c=n.cmov(u,l,f);let p=n.eql(n.sqr(c),t),m=n.cmov(s,c,p);return St(n,m,t),m})}function Dt(e){if(e<dt)throw Error(`sqrt is not defined for small field`);Ct(e,`tonelliShanks`);let t=e-K,n=0;for(;t%q===G;)t/=q,n++;let r=q,i=It(e);for(;Mt(i,r)===1;)if(r++>1e3)throw Error(`Cannot find square root: probably non-prime P`);if(n===1)return wt;let a=i.pow(r,t),o=(t+K)/q;return function(e,r){let i=e;if(i.is0(r))return r;if(Mt(i,r)!==1)throw Error(`Cannot find square root`);let s=n,c=i.mul(i.ONE,a),l=i.pow(r,t),u=i.pow(r,o);for(;!i.eql(l,i.ONE);){if(i.is0(l))throw Error(`Cannot find square root: probably non-prime P`);let e=1,t=i.sqr(l);for(;!i.eql(t,i.ONE);)if(e++,t=i.sqr(t),e===s)throw Error(`Cannot find square root`);let n=K<<BigInt(s-e-1),r=i.pow(c,n);s=e,c=i.sqr(r),l=i.mul(l,c),u=i.mul(u,r)}return u}}function Ot(e){return Ct(e,`Fp.sqrt`),e%ft===dt?wt:e%ht===pt?Tt:e%vt===gt?Et(e):Dt(e)}var kt=(e,t)=>(J(e,t)&K)===K,At=[`create`,`isValid`,`is0`,`neg`,`inv`,`sqrt`,`sqr`,`eql`,`add`,`sub`,`mul`,`pow`,`div`,`addN`,`subN`,`mulN`,`sqrN`];function X(e){if(R(e,`field`),typeof e.ORDER!=`bigint`)throw TypeError(`param "ORDER" is invalid: expected bigint, got `+typeof e.ORDER);tt(e.BYTES,`BYTES`),tt(e.BITS,`BITS`);for(let t of At)z(e[t],`field.`+t);if(e.BYTES<1||e.BITS<1)throw Error(`invalid field: expected BYTES/BITS > 0`);if(e.ORDER<=K)throw Error(`invalid field: expected ORDER > 1, got `+e.ORDER);return e}function jt(e,t,n=!1){X(e),Ge(t,`nums`),V(n,`passZero`);let r=e,i=Array(t.length).fill(n?r.ZERO:void 0),a=t.reduce((e,t,n)=>r.is0(t)?e:(i[n]=e,r.mul(e,t)),r.ONE),o=r.inv(a);return t.reduceRight((e,t,n)=>r.is0(t)?e:(i[n]=r.mul(e,i[n]),r.mul(e,t)),o),i}function Mt(e,t){X(e);let n=e;Ct(n.ORDER,`FpLegendre`);let r=(n.ORDER-K)/q,i=n.pow(t,r),a=n.eql(i,n.ONE),o=n.eql(i,n.ZERO),s=n.eql(i,n.neg(n.ONE));if(!a&&!o&&!s)throw Error(`invalid Legendre symbol result`);return a?1:o?0:-1}function Nt(e,t){if(t!==void 0&&Ke(t),e<=G)throw Error(`invalid n length: expected positive n, got `+e);if(t!==void 0&&t<1)throw Error(`invalid n length: expected positive bit length, got `+t);let n=lt(e);if(t!==void 0&&t<n)throw Error(`invalid n length: expected nBitLength (${t}) >= bitLen(n) (${n})`);let r=t===void 0?n:t;return{nBitLength:r,nByteLength:Math.ceil(r/8)}}var Pt=new WeakMap,Ft=class{ORDER;BITS;BYTES;isLE;ZERO=G;ONE=K;_lengths;_mod;constructor(e,t={}){if(e<=K)throw Error(`invalid field: expected ORDER > 1, got `+e);let n;this.isLE=!1,typeof t==`object`&&t&&(typeof t.BITS==`number`&&(n=t.BITS),typeof t.sqrt==`function`&&Object.defineProperty(this,"sqrt",{value:t.sqrt,enumerable:!0}),typeof t.isLE==`boolean`&&(this.isLE=t.isLE),t.allowedLengths&&(this._lengths=Object.freeze(t.allowedLengths.slice())),typeof t.modFromBytes==`boolean`&&(this._mod=t.modFromBytes));let{nBitLength:r,nByteLength:i}=Nt(e,n);if(i>2048)throw Error(`invalid field: expected ORDER of <= 2048 bytes`);this.ORDER=e,this.BITS=r,this.BYTES=i,Object.freeze(this)}create(e){return J(e,this.ORDER)}isValid(e){if(typeof e!=`bigint`)throw TypeError(`invalid field element: expected bigint, got `+typeof e);return G<=e&&e<this.ORDER}is0(e){return e===G}isValidNot0(e){return!this.is0(e)&&this.isValid(e)}isOdd(e){return(e&K)===K}neg(e){return J(-e,this.ORDER)}eql(e,t){return e===t}sqr(e){return J(e*e,this.ORDER)}add(e,t){return J(e+t,this.ORDER)}sub(e,t){return J(e-t,this.ORDER)}mul(e,t){return J(e*t,this.ORDER)}pow(e,t){return bt(e,t,this.ORDER)}div(e,t){return J(e*xt(t,this.ORDER),this.ORDER)}sqrN(e){return e*e}addN(e,t){return e+t}subN(e,t){return e-t}mulN(e,t){return e*t}inv(e){return xt(e,this.ORDER)}sqrt(e){let t=Pt.get(this);return t||Pt.set(this,t=Ot(this.ORDER)),t(this,e)}toBytes(e){return this.isLE?at(e,this.BYTES):it(e,this.BYTES)}fromBytes(e,t=!1){L(e);let{_lengths:n,BYTES:r,isLE:i,ORDER:a,_mod:o}=this;if(n){if(e.length<1||!n.includes(e.length)||e.length>r)throw Error(`Field.fromBytes: expected `+n+` bytes, got `+e.length);let t=new Uint8Array(r);t.set(e,i?0:t.length-e.length),e=t}if(e.length!==r)throw Error(`Field.fromBytes: expected `+r+` bytes, got `+e.length);let s=i?H(e):rt(e);if(o&&(s=J(s,a)),!t&&!this.isValid(s))throw Error(`invalid field element: outside of range 0..ORDER`);return s}invertBatch(e){return jt(this,e,!0)}cmov(e,t,n){return V(n,`condition`),n?t:e}};function It(e,t={}){return Object.freeze(Ft.prototype),new Ft(e,t)}var Lt=BigInt(0),Z=BigInt(1),Rt=BigInt(4),zt=16,Bt=128,Vt=5,Ht=2**31;function Ut(e){let t=e;if(typeof t!=`function`)throw TypeError(`"Point" expected constructor, got type=`+typeof e);z(t.fromAffine,`Point.fromAffine`),z(t.fromBytes,`Point.fromBytes`),z(t.fromHex,`Point.fromHex`),R(t.BASE,`Point.BASE`),R(t.ZERO,`Point.ZERO`),X(t.Fp),X(t.Fn)}function Wt(e,t){Ut(e),Jt(t,e);let n=jt(e.Fp,t.map(e=>e.Z));return t.map((t,r)=>e.fromAffine(t.toAffine(n[r])))}function Gt(e,t,n=1){if(!Number.isSafeInteger(e)||e<n||e>t)throw Error(`invalid window size, expected [`+n+`..`+t+`], got W=`+e)}function Kt(e,t){let n=e*(4*t+128);if(n>Ht)throw Error(`invalid window size: table would need ~`+Math.ceil(n/2**20)+` MiB, max `+Ht/2**20+` MiB`)}function qt(e,t){if(e!==void 0){z(e,`randomBytes`);try{let n=e(t);if(!Xe(n)||n.length!==t)return}catch{return}return e}}function Jt(e,t){Ge(e,`points`),e.forEach((e,n)=>{if(!(e instanceof t))throw Error(`invalid point at index `+n)})}function Yt(e,t,n){if(!Array.isArray(e))throw Error(`array of scalars expected`);e.forEach((e,r)=>{if(!(n===void 0?t.isValid(e):U(e)&&e<n))throw Error(`invalid scalar at index `+r)})}var Xt=new WeakMap;function Zt(e){return Xt.get(e)||1}function Qt(e,t){let n=e.double(),r=[e];for(let e=1;e<t;e++)r.push(r[e-1].add(n));return r}function $t(e,t){let n=2**t,r=n/2,i=BigInt(n-1),a=[];for(;e>Lt;){let t=0;e&Z&&(t=Number(e&i),t>=r&&(t-=n),e-=BigInt(t)),a.push(t),e>>=Z}return a}function en(e,t,n){let r=2**t,i=r/2,a=BigInt(r-1),o=BigInt(t),s=[];for(let t=0;t<n;t++){let t=Number(e&a);e>>=o,t>i&&(t-=r,e+=Z),s.push(t)}if(e!==Lt)throw Error(`invalid wnaf`);return s}function tn(e,t,n){let r=0;for(let e of n)r=Math.max(r,e.length);let i=e;for(let e=r-1;e>=0;e--){e!==r-1&&(i=i.double());for(let r=0;r<n.length;r++){let a=n[r][e];if(a){let e=t[r][Math.abs(a)-1>>1];i=i.add(a<0?e.negate():e)}}}return i}var nn=class{Point;BASE;ZERO;randomBytes;wnafPrecomputes=new WeakMap;baseCanBeBlinded;bits;constructor(e,t){Ut(e),this.randomBytes=qt(t,zt),this.Point=e,this.BASE=e.BASE,this.ZERO=e.ZERO,this.bits=e.Fn.BITS}buildWnafTable(e,t,n){let r=Math.ceil(n/t)+1,i=2**(t-1),a=[],o=e;for(let e=0;e<r;e++){let e=o;for(let t=0;t<i;t++)a.push(e),e=e.add(o);o=a[a.length-1].double()}return{W:t,bits:n,windows:r,comp:a}}wnafCachedCT(e,t){let{W:n,windows:r,comp:i}=e,a=2**(n-1),o=en(t,n,r),s=this.ZERO,c=this.BASE;for(let e=0;e<r;e++){let t=o[e],n=e*a,r=Math.abs(t)-1,l=i[n];for(let e=1;e<a;e++)l=e===r?i[n+e]:l;let u=l.negate();t===0?c=c.add(i[n]):s=s.add(t<0?u:l)}return{p:s,f:c}}getWnafPrecomputes(e,t,n,r){let i=this.wnafPrecomputes.get(t),a=i?.find(t=>t.W===e&&t.bits===n);return a||(a=this.buildWnafTable(t,e,n),typeof r==`function`&&(a={...a,comp:r(a.comp)}),i||(i=[],this.wnafPrecomputes.set(t,i)),i.push(a)),a}assertPoint(e){if(!(e instanceof this.Point))throw TypeError(`"point" expected Point instance, got type=`+typeof e)}validateMulInput(e,t){if(this.assertPoint(e),!st(t,Z,this.Point.Fn.ORDER))throw Error(`invalid scalar`)}runCT(e,t,n,r){let i=Zt(e);return i===1?this.fixedWindowCT(e,t,n):this.wnafCachedCT(this.getWnafPrecomputes(i,e,n,r),t)}mulCT(e,t,n){return this.validateMulInput(e,t),this.runCT(e,t,this.bits,n)}mulCTBlinded(e,t,n){if(this.validateMulInput(e,t),this.randomBytes===void 0)throw Error(`randomBytes is required for scalar blinding`);let r=this.Point.Fn.BITS+Bt,i=this.randomBytes(zt);if(!Xe(i)||i.length!==zt)throw Error(`randomBytes returned invalid byte array`);i[0]=i[0]&63|128;let a=t+rt(i)*this.Point.Fn.ORDER;return this.runCT(e,a,r,n)}fixedWindowCT(e,t,n){let r=Vt,i=ut(r),a=Array(32);a[0]=this.ZERO;for(let t=1;t<32;t++)a[t]=a[t-1].add(e);let o=Math.ceil(n/r),s=this.ZERO;for(let e=o-1;e>=0;e--){if(e!==o-1)for(let e=0;e<r;e++)s=s.double();let n=Number(t>>BigInt(e*r)&i),c=a[0];for(let e=1;e<32;e++)c=e===n?a[e]:c;s=s.add(c)}return{p:s,f:s}}shouldBlind(e,t){return this.randomBytes===void 0?!1:t===Z||e===this.BASE&&(this.baseCanBeBlinded===void 0&&(this.baseCanBeBlinded=this.mulUnsafe(this.BASE,this.Point.Fn.ORDER).is0()),this.baseCanBeBlinded)}mulSecret(e,t,n,r){return this.shouldBlind(e,n)?this.mulCTBlinded(e,t,r):this.mulCT(e,t,r)}mulUnsafe(e,t,n){if(this.assertPoint(e),!U(t))throw Error(`invalid scalar`);let r=Zt(e);if(r===1||t>=this.Point.Fn.ORDER)return rn(this.Point,[e],[t],!0);let i=this.getWnafPrecomputes(r,e,this.bits,n);return this.wnafCachedCT(i,t).p}setWindowSize(e,t){this.assertPoint(e),Gt(t,this.bits),Kt((Math.ceil((this.bits+Bt)/t)+1)*2**(t-1),this.Point.Fp.BYTES),Xt.set(e,t),this.wnafPrecomputes.delete(e)}hasWindowSize(e){return Zt(e)!==1}};function rn(e,t,n,r=!1){if(Ut(e),Jt(t,e),V(r,`allowOversized`),Yt(n,e.Fn,r?e.Fn.ORDER**Rt:void 0),t.length!==n.length)throw Error(`arrays of points and scalars must have equal length`);let i=t.map(e=>Qt(e,4)),a=n.map(e=>$t(e,4));return tn(e.ZERO,i,a)}function an(e,t,n){if(t){if(t.ORDER!==e)throw Error(`Field.ORDER must match order: Fp == p, Fn == n`);return X(t),t}return It(e,{isLE:n})}function on(e,t,n={},r){if(e!==`weierstrass`&&e!==`edwards`)throw Error(`expected curve type "weierstrass" or "edwards"`);if(r===void 0&&(r=e===`edwards`),!t||typeof t!=`object`)throw Error(`expected valid ${e} CURVE object`);W(n);for(let e of[`p`,`n`,`h`]){let n=t[e];if(!(U(n)&&n!==Lt))throw Error(`CURVE.${e} must be positive bigint`)}let i=an(t.p,n.Fp,r),a=an(t.n,n.Fn,r),o=[`Gx`,`Gy`,`a`,e===`weierstrass`?`b`:`d`];for(let e of o)if(!i.isValid(t[e]))throw Error(`CURVE.${e} must be valid field element of CURVE.Fp`);return t=Object.freeze(Object.assign({},t)),{CURVE:t,Fp:i,Fn:a}}function sn(e,t){return function(n){let r=e(n);return{secretKey:r,publicKey:t(r)}}}var cn=BigInt(0),ln=BigInt(1),un=BigInt(2),dn=BigInt(4),fn=BigInt(8);function pn(e,t,n,r){let i=e.sqr(n),a=e.sqr(r),o=e.add(e.mul(t.a,i),a),s=e.add(e.ONE,e.mul(t.d,e.mul(i,a)));return e.eql(o,s)}function mn(e,t={}){W(t,{},{},`extraOpts`);let n=t,r=on(`edwards`,e,n,n.FpFnLE),{Fp:i,Fn:a}=r,o=r.CURVE,{h:s}=o;if(Mt(i,o.a)!==1)throw Error(`edwards: CURVE.a must be a square in Fp for complete addition formulas`);if(Mt(i,o.d)!==-1)throw Error(`edwards: CURVE.d must be a non-square in Fp for complete addition formulas`);W(n,{},{uvRatio:`function`,randomBytes:`function`});let c=n.randomBytes===void 0?Ze:n.randomBytes,l=un<<BigInt(i.BYTES*8)-ln;function u(e){if(!i.isOdd)throw Error(`Field does not have .isOdd()`);return i.isOdd(e)}let d=n.uvRatio===void 0?(e,t)=>{try{return{isValid:!0,value:i.sqrt(i.div(e,t))}}catch{return{isValid:!1,value:cn}}}:n.uvRatio;if(!pn(i,o,o.Gx,o.Gy))throw Error(`bad curve params: generator point`);let f=i.eql(o.a,i.neg(i.ONE))?e=>i.neg(e):i.eql(o.a,i.ONE)?e=>e:e=>i.mul(o.a,e);function p(e,t,n=!1){let r=n?ln:cn;return ct(`coordinate `+e,t,r,l),t}function m(e){if(!(e instanceof h))throw Error(`EdwardsPoint expected`)}class h{static BASE=new h(o.Gx,o.Gy,i.ONE,i.mul(o.Gx,o.Gy));static ZERO=new h(i.ZERO,i.ONE,i.ONE,i.ZERO);static Fp=i;static Fn=a;X;Y;Z;T;constructor(e,t,n,r){this.X=p(`x`,e),this.Y=p(`y`,t),this.Z=p(`z`,n,!0),this.T=p(`t`,r),Object.freeze(this)}static CURVE(){return o}static fromAffine(e){if(e instanceof h)throw Error(`extended point not allowed`);let{x:t,y:n}=e||{};return p(`x`,t),p(`y`,n),new h(t,n,i.ONE,i.mul(t,n))}static fromBytes(e,t=!1){let n=i.BYTES,{a:r,d:a}=o;e=ot(L(e,n,`point`)),V(t,`zip215`);let s=ot(e),c=e[n-1];s[n-1]=c&-129;let f=H(s);ct(`point.y`,f,cn,t?l:i.ORDER);let p=i.sqr(f),m=i.sub(p,i.ONE),g=i.sub(i.mulN(a,p),r),{isValid:_,value:v}=d(m,g);if(!_)throw Error(`bad point: invalid y coordinate`);let y=u(v),b=!!(c&128);if(!t&&i.is0(v)&&b)throw Error(`bad point: x=0 and x_0=1`);return b!==y&&(v=i.neg(v)),h.fromAffine({x:v,y:f})}static fromHex(e,t=!1){return h.fromBytes(Ye(e),t)}get x(){return this.toAffine().x}get y(){return this.toAffine().y}precompute(e=6,t=!0){return _.setWindowSize(this,e),t||this.multiply(un),this}assertValidity(){let e=this,{a:t,d:n}=o;if(e.is0())throw Error(`bad point: ZERO`);let{X:r,Y:a,Z:s,T:c}=e,l=i.sqr(r),u=i.sqr(a),d=i.sqr(s),f=i.sqr(d),p=i.mul(l,t),m=i.mul(i.add(p,u),d),h=i.add(f,i.mul(n,i.mul(l,u)));if(!i.eql(m,h))throw Error(`bad point: equation left != right (1)`);let g=i.mul(r,a),_=i.mul(s,c);if(!i.eql(g,_))throw Error(`bad point: equation left != right (2)`)}equals(e){m(e);let{X:t,Y:n,Z:r}=this,{X:a,Y:o,Z:s}=e,c=i.mul(t,s),l=i.mul(a,r),u=i.mul(n,s),d=i.mul(o,r);return i.eql(c,l)&&i.eql(u,d)}is0(){return this.equals(h.ZERO)}negate(){return new h(i.neg(this.X),this.Y,this.Z,i.neg(this.T))}double(){let{X:e,Y:t,Z:n}=this,r=i.sqr(e),a=i.sqr(t),o=i.mul(i.sqr(n),un),s=f(r),c=i.addN(e,t),l=i.sub(i.subN(i.sqr(c),r),a),u=i.addN(s,a),d=i.subN(u,o),p=i.subN(s,a),m=i.mul(l,d),g=i.mul(u,p),_=i.mul(l,p),v=i.mul(d,u);return new h(m,g,v,_)}add(e){m(e);let{d:t}=o,{X:n,Y:r,Z:a,T:s}=this,{X:c,Y:l,Z:u,T:d}=e,p=i.mul(n,c),g=i.mul(r,l),_=i.mul(i.mulN(s,t),d),v=i.mul(a,u),y=i.sub(i.subN(i.mulN(i.addN(n,r),i.addN(c,l)),p),g),b=i.subN(v,_),x=i.addN(v,_),S=i.sub(g,f(p)),C=i.mul(y,b),w=i.mul(x,S),T=i.mul(y,S),E=i.mul(b,x);return new h(C,w,E,T)}subtract(e){return m(e),this.add(e.negate())}multiply(e){if(!a.isValidNot0(e))throw RangeError(`invalid scalar: expected 1 <= sc < curve.n`);let{p:t,f:n}=_.mulSecret(this,e,s,g);return g([t,n])[0]}multiplyUnsafe(e){if(!a.isValid(e))throw RangeError(`invalid scalar: expected 0 <= sc < curve.n`);return e===cn?h.ZERO:this.is0()||e===ln?this:_.mulUnsafe(this,e,g)}isSmallOrder(){return this.clearCofactor().is0()}isTorsionFree(){return _.mulUnsafe(this,o.n).is0()}toAffine(e){let t=this,n=e;if(n!=null&&typeof n!=`bigint`)throw TypeError(`"invertedZ" expected bigint, got type=`+typeof n);let{X:r,Y:a,Z:o}=t,s=t.is0();n??=s?i.create(fn):i.inv(o);let c=i.mul(r,n),l=i.mul(a,n),u=i.mul(o,n);if(s)return{x:i.ZERO,y:i.ONE};if(!i.eql(u,i.ONE))throw Error(`invZ was invalid`);return{x:c,y:l}}clearCofactor(){return s===ln?this:s===un?this.double():s===dn?this.double().double():s===fn?this.double().double().double():this.multiplyUnsafe(s)}toBytes(){let{x:e,y:t}=this.toAffine(),n=i.toBytes(t);return n[n.length-1]|=u(e)?128:0,n}toHex(){return qe(this.toBytes())}toString(){return`<Point ${this.is0()?`ZERO`:this.toHex()}>`}}let g=e=>Wt(h,e),_=new nn(h,c);return _.bits>=6&&h.BASE.precompute(6),Object.freeze(h.prototype),Object.freeze(h),h}function hn(e,t,n={}){if(Ut(e),typeof t!=`function`)throw Error(`"hash" function param is required`);let r=t,i=n;W(i,{},{adjustScalarBytes:`function`,randomBytes:`function`,domain:`function`,prehash:`function`,zip215:`boolean`,mapToCurve:`function`,toMontgomery:`function`,toMontgomerySecret:`function`});let{prehash:a}=i,{BASE:o,Fp:s,Fn:c}=e,l=r.outputLen,u=2*s.BYTES;if(l!==void 0&&(tt(l,`hash.outputLen`),l!==u))throw Error(`hash.outputLen must be ${u}, got ${l}`);let d=i.randomBytes===void 0?Ze:i.randomBytes,f=i.toMontgomery,p=i.toMontgomerySecret,m=i.adjustScalarBytes===void 0?e=>e:i.adjustScalarBytes,h=i.domain===void 0?(e,t,n)=>{if(V(n,`phflag`),t.length||n)throw Error(`Contexts/pre-hash are not supported`);return e}:i.domain;function g(e){return c.create(H(e))}function _(e){let t=T.secretKey;L(e,T.secretKey,`secretKey`);let n=L(r(e),2*t,`hashedSecretKey`),i=m(n.slice(0,t));return{head:i,prefix:n.slice(t,2*t),scalar:g(i)}}function v(e){let{head:t,prefix:n,scalar:r}=_(e),i=o.multiply(r);return{head:t,prefix:n,scalar:r,point:i,pointBytes:i.toBytes()}}function y(e){return v(e).pointBytes}function b(e=Uint8Array.of(),...t){let n=Je(...t);return g(r(h(n,L(e,void 0,`context`),!!a)))}function x(e,t,n={}){W(n,{},{},`options`),e=ot(L(e,void 0,`message`)),a&&(e=a(e));let{prefix:r,scalar:i,pointBytes:s}=v(t),l=b(n.context,r,e),u=o.multiply(l).toBytes(),d=b(n.context,u,s,e),f=c.create(l+d*i);if(!c.isValid(f))throw Error(`sign failed: invalid s`);return L(Je(u,c.toBytes(f)),T.signature,`result`)}let S={zip215:i.zip215};function C(t,n,r,i=S){W(i);let{context:s}=i,c=i.zip215===void 0?!!S.zip215:i.zip215,l=T.signature;t=L(t,l,`signature`),n=L(n,void 0,`message`),r=L(r,T.publicKey,`publicKey`),c!==void 0&&V(c,`zip215`),a&&(n=a(n));let u=l/2,d=t.subarray(0,u),f=H(t.subarray(u,l)),p,m,h;try{p=e.fromBytes(r,c),m=e.fromBytes(d,c),h=o.multiplyUnsafe(f)}catch{return!1}if(!c&&p.isSmallOrder())return!1;let g=b(s,d,r,n);return m.add(p.multiplyUnsafe(g)).subtract(h).clearCofactor().is0()}let w=s.BYTES,T={secretKey:w,publicKey:w,signature:2*w,seed:w};function E(e){return e=e===void 0?d(T.seed):e,L(e,T.seed,`seed`)}function D(e){return Xe(e)&&e.length===T.secretKey}function O(t,n){try{return!!e.fromBytes(t,n===void 0?S.zip215:n)}catch{return!1}}let k={getExtendedPublicKey:v,randomSecretKey:E,isValidSecretKey:D,isValidPublicKey:O,toMontgomery(t){if(f===void 0)throw Error(`Montgomery conversion is not supported for this curve`);return f(e.fromBytes(t))},toMontgomerySecret(e){if(p===void 0)throw Error(`Montgomery conversion is not supported for this curve`);return p(e)}};return Object.freeze(T),Object.freeze(k),Object.freeze({keygen:sn(E,y),getPublicKey:y,sign:x,verify:C,utils:k,Point:e,lengths:T})}var gn=BigInt(1),_n=BigInt(2),vn=BigInt(5),yn=BigInt(8),bn=BigInt(`0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed`),xn={p:bn,n:BigInt(`0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed`),h:yn,a:BigInt(`0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec`),d:BigInt(`0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3`),Gx:BigInt(`0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a`),Gy:BigInt(`0x6666666666666666666666666666666666666666666666666666666666666658`)};function Sn(e){let t=BigInt(10),n=BigInt(20),r=BigInt(40),i=BigInt(80),a=bn,o=e*e%a*e%a,s=Y(Y(o,_n,a)*o%a,gn,a)*e%a,c=Y(s,vn,a)*s%a,l=Y(c,t,a)*c%a,u=Y(l,n,a)*l%a,d=Y(u,r,a)*u%a;return{pow_p_5_8:Y(Y(Y(Y(d,i,a)*d%a,i,a)*d%a,t,a)*c%a,_n,a)*e%a,b2:o}}function Cn(e){return e[0]&=248,e[31]&=127,e[31]|=64,e}var wn=BigInt(`19681161376707505956807079304988542015446066515923890162744021073123829784752`);function Tn(e,t){let n=bn,r=J(t*t*t,n),i=Sn(e*J(r*r*t,n)).pow_p_5_8,a=J(e*r*i,n),o=J(t*a*a,n),s=a,c=J(a*wn,n),l=o===e,u=o===J(-e,n),d=o===J(-e*wn,n);return l&&(a=s),(u||d)&&(a=c),kt(a,n)&&(a=J(-a,n)),{isValid:l||u,value:a}}var En=mn(xn,{uvRatio:Tn}),Dn=En.Fp;function On(e){let{y:t}=e;return Dn.toBytes(Dn.div(gn+t,gn-t))}function kn(e){let t=En.Fp.BYTES;return P(e,t),Cn(We(e.subarray(0,t))).subarray(0,t)}function An(e){return hn(En,We,Object.assign({adjustScalarBytes:Cn,toMontgomery:On,toMontgomerySecret:kn,zip215:!0},e))}var Q=An({}),$=32,jn=248,Mn=127,Nn=64,Pn=128,Fn=127;function In(e){e.length<$||(e[0]=(e[0]??0)&jn,e[31]=(e[31]??0)&Mn|Nn)}function Ln(){let t=new Uint8Array((0,e.randomBytes)($));In(t);let n=Hn(t)%Q.Point.CURVE().n;return[Q.Point.BASE.multiply(n).toBytes(),Uint8Array.from(t)]}function Rn(t,n){let r=(0,e.createSign)(`SHA256`);return r.update(n),r.sign(t)}function zn(t,n,r){try{let i=(0,e.createVerify)(`SHA256`);return i.update(n),i.verify(t,Buffer.from(r))}catch{return!1}}function Bn(t,n){if(t.length!==$||n.length!==$)throw Error(`invalid key length`);let r=Uint8Array.from(n);r[31]=(r[31]??0)&Fn;let i=Hn(r),a=Vn(Q.Point.fromBytes(t).negate(),i).toBytes();return a[31]=(a[31]??0)^Pn,(0,e.createHash)(`sha512`).update(a).digest()}function Vn(e,t){let n=Q.Point.CURVE().n;if(t<n)return t===0n?Q.Point.ZERO:e.multiply(t);let r=t%n,i=t/n,a=r===0n?Q.Point.ZERO:e.multiply(r),o=e.multiply(n-1n).add(e).multiply(i);return a.add(o)}function Hn(e){let t=0n;for(let n=e.length-1;n>=0;n--)t=t<<8n|BigInt(e[n]);return t}Object.defineProperty(exports,"C",{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,"S",{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,"_",{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,"a",{enumerable:!0,get:function(){return Vn}}),Object.defineProperty(exports,"b",{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,"c",{enumerable:!0,get:function(){return Q}}),Object.defineProperty(exports,"d",{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,"f",{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,"g",{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,"h",{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return Bn}}),Object.defineProperty(exports,"l",{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,"m",{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return In}}),Object.defineProperty(exports,"o",{enumerable:!0,get:function(){return Rn}}),Object.defineProperty(exports,"p",{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return Ln}}),Object.defineProperty(exports,"s",{enumerable:!0,get:function(){return zn}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return Hn}}),Object.defineProperty(exports,"u",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"v",{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,"w",{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,"x",{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,"y",{enumerable:!0,get:function(){return o}});
2
- //# sourceMappingURL=primitives-cNNAeFCo.cjs.map