@vex-chat/crypto 1.1.1 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,17 +1,18 @@
1
- import { decode as decodeBase64, encode as encodeBase64, } from "@stablelib/base64";
2
- import { decode as encodeUTF8, encode as decodeUTF8 } from "@stablelib/utf8";
3
- import * as bip39 from "bip39";
4
- import { hmac } from "@noble/hashes/hmac.js";
5
- import { sha256, sha512 } from "@noble/hashes/sha2.js";
6
1
  import { hkdf } from "@noble/hashes/hkdf.js";
2
+ import { hmac } from "@noble/hashes/hmac.js";
7
3
  import { pbkdf2 as noblePbkdf2 } from "@noble/hashes/pbkdf2.js";
4
+ import { sha256, sha512 } from "@noble/hashes/sha2.js";
5
+ import { decode as decodeBase64, encode as encodeBase64, } from "@stablelib/base64";
6
+ import { encode as decodeUTF8, decode as encodeUTF8 } from "@stablelib/utf8";
7
+ import * as bip39 from "bip39";
8
8
  import ed2curve from "ed2curve";
9
9
  import { Packr } from "msgpackr";
10
10
  import nacl from "tweetnacl";
11
+ import { z } from "zod/v4";
11
12
  // msgpackr with useRecords:false emits standard msgpack (no nonstandard record extension).
12
13
  // moreTypes:false keeps the extension set to only what other decoders understand.
13
14
  // pack() returns Node Buffer (tight view) so consumers like axios send the correct bytes.
14
- const packer = new Packr({ useRecords: false, moreTypes: false });
15
+ const packer = new Packr({ moreTypes: false, useRecords: false });
15
16
  const msgpackEncode = packer.pack.bind(packer);
16
17
  const msgpackDecode = packer.unpack.bind(packer);
17
18
  /**
@@ -23,13 +24,15 @@ export const XKeyConvert = ed2curve;
23
24
  * Provides several methods that are useful in working with bytes and
24
25
  * vex messages.
25
26
  */
27
+ // eslint-disable-next-line @typescript-eslint/no-extraneous-class -- intentional static utility namespace (public API surface)
26
28
  export class XUtils {
27
- static encodeUTF8 = encodeUTF8;
29
+ static decodeBase64 = decodeBase64;
28
30
  static decodeUTF8 = decodeUTF8;
29
31
  static encodeBase64 = encodeBase64;
30
- static decodeBase64 = decodeBase64;
32
+ static encodeUTF8 = encodeUTF8;
31
33
  /**
32
34
  * Checks if two buffer-like objects are equal.
35
+ * When lengths match, comparison is constant-time in the inputs (no early exit on first differing byte).
33
36
  *
34
37
  * @param buf1
35
38
  * @param buf2
@@ -42,99 +45,86 @@ export class XUtils {
42
45
  if (a.byteLength !== b.byteLength) {
43
46
  return false;
44
47
  }
48
+ let diff = 0;
45
49
  for (let i = 0; i !== a.byteLength; i++) {
46
- if (a[i] !== b[i]) {
50
+ const x = a[i];
51
+ const y = b[i];
52
+ if (x === undefined || y === undefined) {
47
53
  return false;
48
54
  }
55
+ diff |= x ^ y;
49
56
  }
50
- return true;
57
+ return diff === 0;
51
58
  }
52
59
  /**
53
- * Returns a six bit Uint8Array representation of an integer.
54
- * The integer must be positive, and it must be able to be stored
55
- * in six bytes.
60
+ * Decodes a hex string into a Uint8Array.
56
61
  *
57
- * @param n The number to convert.
58
- * @returns The Uint8Array representation of n.
62
+ * @returns The Uint8Array.
59
63
  */
60
- static numberToUint8Arr(n) {
61
- if (n < 0 || n > 281474976710655) {
62
- throw new Error("Expected integer 0 < n < 281474976710655, received " + n);
63
- }
64
- let str = n.toString(16);
65
- while (str.length < 12) {
66
- str = "0" + str;
64
+ static decodeHex(hexString) {
65
+ if (hexString.length === 0) {
66
+ return new Uint8Array();
67
67
  }
68
- return XUtils.decodeHex(str);
68
+ const matches = hexString.match(/.{1,2}/g) ?? [];
69
+ return new Uint8Array(matches.map((byte) => parseInt(byte, 16)));
69
70
  }
70
71
  /**
71
- * Converts a Uint8Array representation of an integer back into a number.
72
+ * Decrypts a secret key from the binary format produced by encryptKeyData().
73
+ * No I/O — the caller handles reading the data.
72
74
  *
73
- * @param arr The array to convert.
74
- * @returns the number representation of arr.
75
+ * @param keyData The encrypted key data as a Uint8Array.
76
+ * @param password The password used to encrypt.
77
+ * @returns The hex-encoded secret key.
75
78
  */
76
- static uint8ArrToNumber(arr) {
77
- let n = 0;
78
- for (let i = 0; i < arr.length; i++) {
79
- n = n * 256 + arr[i];
79
+ static decryptKeyData = (keyData, password) => {
80
+ const ITERATIONS = XUtils.uint8ArrToNumber(keyData.slice(0, 6));
81
+ const PKBDF_SALT = keyData.slice(6, 30);
82
+ const ENCRYPTION_NONCE = keyData.slice(30, 54);
83
+ const ENCRYPTED_KEY = keyData.slice(54);
84
+ const DERIVED_KEY = noblePbkdf2(sha512, password, PKBDF_SALT, {
85
+ c: ITERATIONS,
86
+ dkLen: 32,
87
+ });
88
+ const DECRYPTED_SIGNKEY = nacl.secretbox.open(ENCRYPTED_KEY, ENCRYPTION_NONCE, DERIVED_KEY);
89
+ if (DECRYPTED_SIGNKEY === null) {
90
+ throw new Error("Decryption failed. Wrong password?");
80
91
  }
81
- return n;
82
- }
92
+ return XUtils.encodeHex(DECRYPTED_SIGNKEY);
93
+ };
83
94
  /**
84
- * Takes a vex message and unpacks it into its header and a javascript object
85
- * respresentation of its body.
95
+ * Returns the empty header (32 0's)
86
96
  *
87
- * @param arr The array to convert.
88
- * @returns [32 byte header, message body]
97
+ * @returns The empty header.
89
98
  */
90
- static unpackMessage(msg) {
91
- const msgp = Uint8Array.from(msg);
92
- const msgh = msgp.slice(0, xConstants.HEADER_SIZE);
93
- const msgb = msgpackDecode(msgp.slice(xConstants.HEADER_SIZE));
94
- return [msgh, msgb];
99
+ static emptyHeader() {
100
+ return new Uint8Array(xConstants.HEADER_SIZE);
95
101
  }
96
102
  /**
97
- * Packs a javascript object and a 32 byte header into a vex message.
103
+ * Encodes a Uint8Array to a hex string.
98
104
  *
99
- * @param arr The array to convert.
100
- * @returns the packed message.
105
+ * @returns The hex string.
101
106
  */
102
- static packMessage(msg, header) {
103
- const msgb = msgpackEncode(msg);
104
- const msgh = header || XUtils.emptyHeader();
105
- return xConcat(msgh, msgb);
107
+ static encodeHex(bytes) {
108
+ return bytes.reduce((str, byte) => str + byte.toString(16).padStart(2, "0"), "");
106
109
  }
107
110
  /**
108
- * Returns the empty header (32 0's)
111
+ * Encrypts a secret key into a portable binary format.
112
+ * The result can be written to disk, sent over the network, etc.
113
+ * No I/O — the caller handles persistence.
109
114
  *
110
- * @returns The empty header.
115
+ * Format: [iterations(6)|salt(24)|nonce(24)|ciphertext(N)]
116
+ *
117
+ * @param password The password to derive the encryption key from.
118
+ * @param keyToSave The hex-encoded secret key to encrypt.
119
+ * @param iterationOverride Optional PBKDF2 iteration count (random if omitted).
120
+ * @returns The encrypted key data as a Uint8Array.
111
121
  */
112
- static emptyHeader() {
113
- return new Uint8Array(xConstants.HEADER_SIZE);
114
- }
115
- /**
116
- * Encrypts a secret key with a password and saves it as a file.
117
- *
118
- * @param path The path to save the keyfile.
119
- /**
120
- * Encrypts a secret key into a portable binary format.
121
- * The result can be written to disk, sent over the network, etc.
122
- * No I/O — the caller handles persistence.
123
- *
124
- * Format: [iterations(6)|salt(24)|nonce(24)|ciphertext(N)]
125
- *
126
- * @param password The password to derive the encryption key from.
127
- * @param keyToSave The hex-encoded secret key to encrypt.
128
- * @param iterationOverride Optional PBKDF2 iteration count (random if omitted).
129
- * @returns The encrypted key data as a Uint8Array.
130
- */
131
122
  static encryptKeyData = (password, keyToSave, iterationOverride) => {
132
123
  const UNENCRYPTED_SIGNKEY = XUtils.decodeHex(keyToSave);
133
124
  const OFFSET = 1000;
134
125
  const rand = nacl.randomBytes(2);
135
- const N1 = rand[0];
136
- const N2 = rand[1];
137
- const iterations = iterationOverride
126
+ const [N1 = 0, N2 = 0] = rand;
127
+ const iterations = iterationOverride !== undefined && iterationOverride !== 0
138
128
  ? iterationOverride
139
129
  : N1 * N2 + OFFSET;
140
130
  const ITERATIONS = XUtils.numberToUint8Arr(iterations);
@@ -160,57 +150,71 @@ export class XUtils {
160
150
  return result;
161
151
  };
162
152
  /**
163
- * Decrypts a secret key from the binary format produced by encryptKeyData().
164
- * No I/O the caller handles reading the data.
153
+ * Returns a six bit Uint8Array representation of an integer.
154
+ * The integer must be positive, and it must be able to be stored
155
+ * in six bytes.
165
156
  *
166
- * @param keyData The encrypted key data as a Uint8Array.
167
- * @param password The password used to encrypt.
168
- * @returns The hex-encoded secret key.
157
+ * @param n The number to convert.
158
+ * @returns The Uint8Array representation of n.
169
159
  */
170
- static decryptKeyData = (keyData, password) => {
171
- const ITERATIONS = XUtils.uint8ArrToNumber(keyData.slice(0, 6));
172
- const PKBDF_SALT = keyData.slice(6, 30);
173
- const ENCRYPTION_NONCE = keyData.slice(30, 54);
174
- const ENCRYPTED_KEY = keyData.slice(54);
175
- const DERIVED_KEY = noblePbkdf2(sha512, password, PKBDF_SALT, {
176
- c: ITERATIONS,
177
- dkLen: 32,
178
- });
179
- const DECRYPTED_SIGNKEY = nacl.secretbox.open(ENCRYPTED_KEY, ENCRYPTION_NONCE, DERIVED_KEY);
180
- if (!DECRYPTED_SIGNKEY) {
181
- throw new Error("Decryption failed. Wrong password?");
160
+ static numberToUint8Arr(n) {
161
+ if (n < 0 || n > 281474976710655) {
162
+ throw new Error("Expected integer 0 < n < 281474976710655, received " +
163
+ String(n));
182
164
  }
183
- return XUtils.encodeHex(DECRYPTED_SIGNKEY);
184
- };
165
+ let str = n.toString(16);
166
+ while (str.length < 12) {
167
+ str = "0" + str;
168
+ }
169
+ return XUtils.decodeHex(str);
170
+ }
185
171
  /**
186
- * Decodes a hex string into a Uint8Array.
172
+ * Packs a javascript object and a 32 byte header into a vex message.
187
173
  *
188
- * @returns The Uint8Array.
174
+ * @param msg Message body (msgpack-serialized).
175
+ * @param header Optional 32-byte header; defaults to an empty header.
176
+ * @returns the packed message.
189
177
  */
190
- static decodeHex(hexString) {
191
- if (hexString.length === 0) {
192
- return new Uint8Array();
178
+ static packMessage(msg, header) {
179
+ const msgb = msgpackEncode(msg);
180
+ const msgh = header ?? XUtils.emptyHeader();
181
+ return xConcat(msgh, msgb);
182
+ }
183
+ /**
184
+ * Converts a Uint8Array representation of an integer back into a number.
185
+ *
186
+ * @param arr The array to convert.
187
+ * @returns the number representation of arr.
188
+ */
189
+ static uint8ArrToNumber(arr) {
190
+ let n = 0;
191
+ for (const byte of arr) {
192
+ n = n * 256 + byte;
193
193
  }
194
- return new Uint8Array(hexString.match(/.{1,2}/g).map((byte) => parseInt(byte, 16)));
194
+ return n;
195
195
  }
196
196
  /**
197
- * Encodes a Uint8Array to a hex string.
197
+ * Takes a vex message and unpacks it into its header and a javascript object
198
+ * representation of its body.
198
199
  *
199
- * @returns The hex string.
200
+ * @param msg Full wire message (32-byte header + msgpack body).
201
+ * @returns [32 byte header, message body]
200
202
  */
201
- static encodeHex(bytes) {
202
- return bytes.reduce((str, byte) => str + byte.toString(16).padStart(2, "0"), "");
203
+ static unpackMessage(msg) {
204
+ const msgp = Uint8Array.from(msg);
205
+ const msgh = msgp.slice(0, xConstants.HEADER_SIZE);
206
+ // Validate base fields exist, keep all extra fields for the caller to narrow
207
+ const raw = msgpackDecode(msgp.slice(xConstants.HEADER_SIZE));
208
+ const msgb = z
209
+ .object({
210
+ transmissionID: z.string(),
211
+ type: z.string(),
212
+ })
213
+ .loose()
214
+ .parse(raw);
215
+ return [msgh, msgb];
203
216
  }
204
217
  }
205
- /**
206
- * Gets a word list representation of a byte sequence.
207
- *
208
- * @param entropy The bytes to derive the wordlist from.
209
- * @param wordList Optional, override the wordlist. See bip39 docs for details.
210
- */
211
- export function xMnemonic(entropy, wordList) {
212
- return bip39.entropyToMnemonic(XUtils.encodeHex(entropy), wordList);
213
- }
214
218
  /**
215
219
  * Returns a 32 byte HMAC of a javscript object.
216
220
  *
@@ -221,60 +225,33 @@ export function xHMAC(msg, SK) {
221
225
  const packedMsg = msgpackEncode(msg);
222
226
  return hmac(sha256, SK, packedMsg);
223
227
  }
228
+ /**
229
+ * Gets a word list representation of a byte sequence.
230
+ *
231
+ * @param entropy The bytes to derive the wordlist from.
232
+ * @param wordList Optional, override the wordlist. See bip39 docs for details.
233
+ */
234
+ export function xMnemonic(entropy, wordList) {
235
+ return bip39.entropyToMnemonic(XUtils.encodeHex(entropy), wordList);
236
+ }
224
237
  /**
225
238
  * Constants for vex.
226
239
  */
227
240
  export const xConstants = {
228
241
  CURVE: "X25519",
229
242
  HASH: "SHA-512",
230
- KEY_LENGTH: 32,
243
+ HEADER_SIZE: 32,
231
244
  INFO: "xchat",
245
+ KEY_LENGTH: 32,
232
246
  MIN_OTK_SUPPLY: 100,
233
- HEADER_SIZE: 32,
234
247
  };
235
- /**
236
- * Returns a 24 byte random nonce of cryptographic quality.
237
- */
238
- export function xMakeNonce() {
239
- return nacl.randomBytes(24);
248
+ /** Generate a fresh X25519 box key pair. */
249
+ export function xBoxKeyPair() {
250
+ return nacl.box.keyPair();
240
251
  }
241
- /**
242
- * Derives a 32 byte secret key from some initial key material.
243
- *
244
- * @param IKM the initial key material.
245
- * @returns The generated key.
246
- */
247
- // export function xKDF(IKM: Uint8Array): Uint8Array {
248
- // return Uint8Array.from(
249
- // hkdf(Buffer.from(IKM), xConstants.KEY_LENGTH, {
250
- // salt: Buffer.from(xMakeSalt(xConstants.CURVE)),
251
- // info: xConstants.INFO,
252
- // hash: xConstants.HASH,
253
- // })
254
- // );
255
- // }
256
- export function xKDF(IKM) {
257
- return hkdf(sha512, IKM, xMakeSalt(xConstants.CURVE), new TextEncoder().encode(xConstants.INFO), xConstants.KEY_LENGTH);
258
- }
259
- /**
260
- * Hashes some data.
261
- *
262
- * @param data the data to hash.
263
- * @returns The hash of the data.
264
- */
265
- export function xHash(data) {
266
- return XUtils.encodeHex(sha512(data));
267
- }
268
- /**
269
- * Derives a shared Secret Key from a known private key and
270
- * a peer's known public key.
271
- *
272
- * @param myPrivateKey Your own private key
273
- * @param theirPublicKey Their public key
274
- * @returns The derived shared secret, SK.
275
- */
276
- export function xDH(myPrivateKey, theirPublicKey) {
277
- return nacl.box.before(theirPublicKey, myPrivateKey);
252
+ /** Restore an X25519 box key pair from a 32-byte secret key. */
253
+ export function xBoxKeyPairFromSecret(secretKey) {
254
+ return nacl.box.keyPair.fromSecretKey(secretKey);
278
255
  }
279
256
  /**
280
257
  * Concatanates multiple Uint8Arrays.
@@ -283,7 +260,7 @@ export function xDH(myPrivateKey, theirPublicKey) {
283
260
  */
284
261
  export function xConcat(...arrays) {
285
262
  const totalLength = arrays.reduce((acc, value) => acc + value.length, 0);
286
- if (!arrays.length) {
263
+ if (arrays.length === 0) {
287
264
  return new Uint8Array();
288
265
  }
289
266
  const result = new Uint8Array(totalLength);
@@ -296,6 +273,18 @@ export function xConcat(...arrays) {
296
273
  }
297
274
  return result;
298
275
  }
276
+ /**
277
+ * Derives a shared Secret Key from a known private key and
278
+ * a peer's known public key.
279
+ *
280
+ * @param myPrivateKey Your own private key
281
+ * @param theirPublicKey Their public key
282
+ * @returns The derived shared secret, SK.
283
+ */
284
+ export function xDH(myPrivateKey, theirPublicKey) {
285
+ return nacl.box.before(theirPublicKey, myPrivateKey);
286
+ }
287
+ // ── Key pair type ───────────────────────────────────────────────────────────
299
288
  /**
300
289
  * Encode an X25519 or X448 public key PK into a byte sequence.
301
290
  * The encoding consists of 0 or 1 to represent the type of curve, followed by l
@@ -305,17 +294,17 @@ export function xConcat(...arrays) {
305
294
  export function xEncode(curveType, publicKey) {
306
295
  if (publicKey.length !== 32) {
307
296
  throw new Error("Invalid key length, received key of length " +
308
- publicKey.length +
297
+ String(publicKey.length) +
309
298
  " and expected length 32.");
310
299
  }
311
300
  const bytes = [];
312
301
  switch (curveType) {
313
- case "X25519":
314
- bytes.push(0);
315
- break;
316
302
  case "X448":
317
303
  bytes.push(1);
318
304
  break;
305
+ case "X25519":
306
+ bytes.push(0);
307
+ break;
319
308
  }
320
309
  const key = BigInt("0x" + XUtils.encodeHex(publicKey));
321
310
  if (isEven(key)) {
@@ -329,25 +318,58 @@ export function xEncode(curveType, publicKey) {
329
318
  }
330
319
  return Uint8Array.from(bytes);
331
320
  }
321
+ // ── Key generation ─────────────────────────────────────────────────────────
332
322
  /**
333
- * @ignore
323
+ * Hashes some data.
324
+ *
325
+ * @param data the data to hash.
326
+ * @returns The hash of the data.
334
327
  */
335
- function keyLength(curve) {
336
- return curve === "X25519" ? 32 : 57;
328
+ export function xHash(data) {
329
+ return XUtils.encodeHex(sha512(data));
330
+ }
331
+ export function xKDF(IKM) {
332
+ return hkdf(sha512, IKM, xMakeSalt(xConstants.CURVE), new TextEncoder().encode(xConstants.INFO), xConstants.KEY_LENGTH);
337
333
  }
338
334
  /**
339
- * @ignore
335
+ * Returns a 24 byte random nonce of cryptographic quality.
340
336
  */
341
- function xMakeSalt(curve) {
342
- const saltLength = keyLength(curve);
343
- const salt = new Uint8Array(saltLength);
344
- for (let i = 0; i < saltLength; i++) {
345
- salt.set([0xff]);
346
- }
347
- return salt;
337
+ export function xMakeNonce() {
338
+ return nacl.randomBytes(24);
339
+ }
340
+ /** Cryptographically secure random bytes. */
341
+ export function xRandomBytes(length) {
342
+ return nacl.randomBytes(length);
343
+ }
344
+ // ── Signing ────────────────────────────────────────────────────────────────
345
+ /** Encrypt with a shared secret key. */
346
+ export function xSecretbox(plaintext, nonce, key) {
347
+ return nacl.secretbox(plaintext, nonce, key);
348
+ }
349
+ /** Decrypt with a shared secret key. Returns null if authentication fails. */
350
+ export function xSecretboxOpen(ciphertext, nonce, key) {
351
+ return nacl.secretbox.open(ciphertext, nonce, key);
352
+ }
353
+ // ── Symmetric encryption (XSalsa20-Poly1305) ──────────────────────────────
354
+ /** Sign a message with an Ed25519 secret key. Returns signed message (64-byte signature prefix + message). */
355
+ export function xSign(message, secretKey) {
356
+ return nacl.sign(message, secretKey);
357
+ }
358
+ /** Generate a fresh Ed25519 signing key pair. */
359
+ export function xSignKeyPair() {
360
+ return nacl.sign.keyPair();
361
+ }
362
+ // ── Random ─────────────────────────────────────────────────────────────────
363
+ /** Restore an Ed25519 signing key pair from a 64-byte secret key. */
364
+ export function xSignKeyPairFromSecret(secretKey) {
365
+ return nacl.sign.keyPair.fromSecretKey(secretKey);
366
+ }
367
+ /** Verify and open a signed message. Returns the original message, or null if verification fails. */
368
+ export function xSignOpen(signedMessage, publicKey) {
369
+ return nacl.sign.open(signedMessage, publicKey);
348
370
  }
349
371
  /**
350
- * @ignore
372
+ * @internal
351
373
  */
352
374
  function isEven(value) {
353
375
  if (value % BigInt(2) === BigInt(0)) {
@@ -357,4 +379,18 @@ function isEven(value) {
357
379
  return false;
358
380
  }
359
381
  }
382
+ /**
383
+ * @internal
384
+ */
385
+ function keyLength(curve) {
386
+ return curve === "X25519" ? 32 : 57;
387
+ }
388
+ /**
389
+ * @internal
390
+ */
391
+ function xMakeSalt(curve) {
392
+ const salt = new Uint8Array(keyLength(curve));
393
+ salt.fill(0xff);
394
+ return salt;
395
+ }
360
396
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,MAAM,IAAI,YAAY,EACtB,MAAM,IAAI,YAAY,GACzB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAG7E,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAC7C,OAAO,EAAE,MAAM,IAAI,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,2FAA2F;AAC3F,kFAAkF;AAClF,0FAA0F;AAC1F,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;AAClE,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/C,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAEjD;;;GAGG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC;AAEpC;;;GAGG;AACH,MAAM,OAAO,MAAM;IACR,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;IAE/B,MAAM,CAAC,UAAU,GAAG,UAAU,CAAC;IAE/B,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;IAEnC,MAAM,CAAC,YAAY,GAAG,YAAY,CAAC;IAE1C;;;;;;;OAOG;IACI,MAAM,CAAC,UAAU,CACpB,IAA8B,EAC9B,IAA8B;QAE9B,MAAM,CAAC,GAAG,IAAI,YAAY,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QACnE,MAAM,CAAC,GAAG,IAAI,YAAY,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;QACnE,IAAI,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC;YAChC,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAChB,OAAO,KAAK,CAAC;YACjB,CAAC;QACL,CAAC;QACD,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;;;;OAOG;IACI,MAAM,CAAC,gBAAgB,CAAC,CAAS;QACpC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,eAAe,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CACX,qDAAqD,GAAG,CAAC,CAC5D,CAAC;QACN,CAAC;QAED,IAAI,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACzB,OAAO,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;YACrB,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QACpB,CAAC;QACD,OAAO,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,gBAAgB,CAAC,GAAe;QAC1C,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAE,CAAC;QAC1B,CAAC;QACD,OAAO,CAAC,CAAC;IACb,CAAC;IAED;;;;;;OAMG;IACI,MAAM,CAAC,aAAa,CACvB,GAAwB;QAExB,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,WAAW,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG,aAAa,CACtB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,CACzB,CAAC;QAEd,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxB,CAAC;IAED;;;;;OAKG;IACI,MAAM,CAAC,WAAW,CAAC,GAAQ,EAAE,MAAmB;QACnD,MAAM,IAAI,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;QAChC,MAAM,IAAI,GAAG,MAAM,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QAC5C,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,WAAW;QACrB,OAAO,IAAI,UAAU,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAClD,CAAC;IAED;;;;;;;;;;;;;;;KAeC;IACM,MAAM,CAAC,cAAc,GAAG,CAC3B,QAAgB,EAChB,SAAiB,EACjB,iBAA0B,EAChB,EAAE;QACZ,MAAM,mBAAmB,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,IAAI,CAAC;QACpB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACjC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACpB,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAE,CAAC;QACpB,MAAM,UAAU,GAAG,iBAAiB;YAChC,CAAC,CAAC,iBAAiB;YACnB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,MAAM,CAAC;QACvB,MAAM,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACvD,MAAM,UAAU,GAAG,UAAU,EAAE,CAAC;QAChC,MAAM,cAAc,GAAG,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE;YAC7D,CAAC,EAAE,UAAU;YACb,KAAK,EAAE,EAAE;SACZ,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;QAC3B,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CACpC,mBAAmB,EACnB,KAAK,EACL,cAAc,CACjB,CAAC;QAEF,MAAM,MAAM,GAAG,IAAI,UAAU,CACzB,UAAU,CAAC,MAAM;YACb,UAAU,CAAC,MAAM;YACjB,KAAK,CAAC,MAAM;YACZ,iBAAiB,CAAC,MAAM,CAC/B,CAAC;QACF,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC/B,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAC/B,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;QACvB,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QACtC,OAAO,MAAM,CAAC;IAClB,CAAC,CAAC;IAEF;;;;;;;OAOG;IACI,MAAM,CAAC,cAAc,GAAG,CAC3B,OAAmB,EACnB,QAAgB,EACV,EAAE;QACR,MAAM,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAChE,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACxC,MAAM,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/C,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxC,MAAM,WAAW,GAAG,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE;YAC1D,CAAC,EAAE,UAAU;YACb,KAAK,EAAE,EAAE;SACZ,CAAC,CAAC;QACH,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CACzC,aAAa,EACb,gBAAgB,EAChB,WAAW,CACd,CAAC;QAEF,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QAC1D,CAAC;QACD,OAAO,MAAM,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAC/C,CAAC,CAAC;IAEF;;;;OAIG;IACI,MAAM,CAAC,SAAS,CAAC,SAAiB;QACrC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,IAAI,UAAU,EAAE,CAAC;QAC5B,CAAC;QAED,OAAO,IAAI,UAAU,CACjB,SAAS,CAAC,KAAK,CAAC,SAAS,CAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAChE,CAAC;IACN,CAAC;IAED;;;;OAIG;IACI,MAAM,CAAC,SAAS,CAAC,KAAiB;QACrC,OAAO,KAAK,CAAC,MAAM,CACf,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EACvD,EAAE,CACL,CAAC;IACN,CAAC;;AAGL;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CACrB,OAAmB,EACnB,QAA+B;IAE/B,OAAO,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,CAAC;AACxE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,KAAK,CAAC,GAAQ,EAAE,EAAc;IAC1C,MAAM,SAAS,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;IACrC,OAAO,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,SAAS,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,UAAU,GAAe;IAClC,KAAK,EAAE,QAAQ;IACf,IAAI,EAAE,SAAS;IACf,UAAU,EAAE,EAAE;IACd,IAAI,EAAE,OAAO;IACb,cAAc,EAAE,GAAG;IACnB,WAAW,EAAE,EAAE;CAClB,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,UAAU;IACtB,OAAO,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;AAChC,CAAC;AAED;;;;;GAKG;AACH,sDAAsD;AACtD,8BAA8B;AAC9B,0DAA0D;AAC1D,8DAA8D;AAC9D,qCAAqC;AACrC,qCAAqC;AACrC,aAAa;AACb,SAAS;AACT,IAAI;AAEJ,MAAM,UAAU,IAAI,CAAC,GAAe;IAChC,OAAO,IAAI,CACP,MAAM,EACN,GAAG,EACH,SAAS,CAAC,UAAU,CAAC,KAAK,CAAC,EAC3B,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EACzC,UAAU,CAAC,UAAU,CACxB,CAAC;AACN,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,KAAK,CAAC,IAAgB;IAClC,OAAO,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,GAAG,CACf,YAAwB,EACxB,cAA0B;IAE1B,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;AACzD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,GAAG,MAAoB;IAC3C,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAEzE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACjB,OAAO,IAAI,UAAU,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;IAE3C,uCAAuC;IACvC,oDAAoD;IACpD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC;IAC3B,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CACnB,SAA4B,EAC5B,SAAqB;IAErB,IAAI,SAAS,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CACX,6CAA6C;YACzC,SAAS,CAAC,MAAM;YAChB,0BAA0B,CACjC,CAAC;IACN,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,QAAQ,SAAS,EAAE,CAAC;QAChB,KAAK,QAAQ;YACT,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACd,MAAM;QACV,KAAK,MAAM;YACP,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACd,MAAM;IACd,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;IAEvD,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;SAAM,CAAC;QACJ,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC3B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAED,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,KAAwB;IACvC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,KAAwB;IACvC,MAAM,UAAU,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;IAEpC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,UAAU,CAAC,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACrB,CAAC;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,SAAS,MAAM,CAAC,KAAa;IACzB,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QAClC,OAAO,IAAI,CAAC;IAChB,CAAC;SAAM,CAAC;QACJ,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}