@rhyster/wow-casc-dbc 2.6.19 → 2.7.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.
Files changed (56) hide show
  1. package/dist/adb.d.ts +17 -0
  2. package/dist/adb.d.ts.map +1 -0
  3. package/dist/blte.d.ts +25 -0
  4. package/dist/blte.d.ts.map +1 -0
  5. package/dist/client.d.ts +84 -0
  6. package/dist/client.d.ts.map +1 -0
  7. package/dist/dbd.d.ts +26 -0
  8. package/dist/dbd.d.ts.map +1 -0
  9. package/dist/fetcher.d.ts +21 -0
  10. package/dist/fetcher.d.ts.map +1 -0
  11. package/dist/index.cjs +1 -0
  12. package/dist/index.cjs.map +1 -0
  13. package/dist/index.d.ts +9 -261
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.mjs +1 -0
  16. package/dist/index.mjs.map +1 -0
  17. package/dist/jenkins96.d.ts +3 -0
  18. package/dist/jenkins96.d.ts.map +1 -0
  19. package/dist/parsers/archiveIndex.d.ts +9 -0
  20. package/dist/parsers/archiveIndex.d.ts.map +1 -0
  21. package/dist/parsers/config.d.ts +40 -0
  22. package/dist/parsers/config.d.ts.map +1 -0
  23. package/dist/parsers/encodingFile.d.ts +11 -0
  24. package/dist/parsers/encodingFile.d.ts.map +1 -0
  25. package/dist/parsers/productConfig.d.ts +21 -0
  26. package/dist/parsers/productConfig.d.ts.map +1 -0
  27. package/dist/parsers/rootFile.d.ts +45 -0
  28. package/dist/parsers/rootFile.d.ts.map +1 -0
  29. package/dist/salsa20.d.ts +14 -0
  30. package/dist/salsa20.d.ts.map +1 -0
  31. package/dist/store.d.ts +9 -0
  32. package/dist/store.d.ts.map +1 -0
  33. package/dist/test/salsa20.test.d.ts +2 -0
  34. package/dist/test/salsa20.test.d.ts.map +1 -0
  35. package/dist/utils.d.ts +3 -0
  36. package/dist/utils.d.ts.map +1 -0
  37. package/dist/wdc.d.ts +104 -0
  38. package/dist/wdc.d.ts.map +1 -0
  39. package/package.json +5 -4
  40. package/src/adb.ts +70 -0
  41. package/src/blte.ts +220 -0
  42. package/src/client.ts +411 -0
  43. package/src/dbd.ts +427 -0
  44. package/src/fetcher.ts +223 -0
  45. package/src/index.ts +44 -0
  46. package/src/jenkins96.ts +75 -0
  47. package/src/parsers/archiveIndex.ts +119 -0
  48. package/src/parsers/config.ts +75 -0
  49. package/src/parsers/encodingFile.ts +159 -0
  50. package/src/parsers/productConfig.ts +57 -0
  51. package/src/parsers/rootFile.ts +172 -0
  52. package/src/salsa20.ts +143 -0
  53. package/src/store.ts +37 -0
  54. package/src/test/salsa20.test.ts +522 -0
  55. package/src/utils.ts +77 -0
  56. package/src/wdc.ts +788 -0
package/src/salsa20.ts ADDED
@@ -0,0 +1,143 @@
1
+ /* eslint-disable no-bitwise */
2
+
3
+ import assert from 'node:assert';
4
+
5
+ export default class Salsa20 {
6
+ private readonly fixed: Uint32Array;
7
+
8
+ private readonly key: Uint32Array;
9
+
10
+ private readonly nonce: Uint32Array;
11
+
12
+ private counter = new Uint32Array([0, 0]);
13
+
14
+ private state = new Uint32Array(16);
15
+
16
+ private block = new Uint8Array(64);
17
+
18
+ private position = 0;
19
+
20
+ constructor(key: Uint8Array, nonce: Uint8Array) {
21
+ assert(key.length === 32 || key.length === 16, 'Salsa20 requires 128-bit or 256-bit key');
22
+ assert(nonce.length === 8, 'Salsa20 requires 64-bit nonce');
23
+
24
+ this.key = new Uint32Array(8);
25
+ const keyView = new DataView(key.buffer);
26
+ if (key.length === 32) {
27
+ for (let i = 0; i < 8; i += 1) {
28
+ this.key[i] = keyView.getUint32(i * 4, true);
29
+ }
30
+ this.fixed = new Uint32Array([
31
+ 0x61707865,
32
+ 0x3320646e,
33
+ 0x79622d32,
34
+ 0x6b206574,
35
+ ]);
36
+ } else {
37
+ for (let i = 0; i < 4; i += 1) {
38
+ const word = keyView.getUint32(i * 4, true);
39
+ this.key[i] = word;
40
+ this.key[i + 4] = word;
41
+ }
42
+ this.fixed = new Uint32Array([
43
+ 0x61707865,
44
+ 0x3120646e,
45
+ 0x79622d36,
46
+ 0x6b206574,
47
+ ]);
48
+ }
49
+
50
+ this.nonce = new Uint32Array(2);
51
+ const nonceView = new DataView(nonce.buffer);
52
+ for (let i = 0; i < 2; i += 1) {
53
+ this.nonce[i] = nonceView.getUint32(i * 4, true);
54
+ }
55
+
56
+ this.generateBlock();
57
+ }
58
+
59
+ // eslint-disable-next-line @typescript-eslint/naming-convention
60
+ private QR(a: number, b: number, c: number, d: number) {
61
+ let t: number;
62
+
63
+ t = (this.state[a] + this.state[d]) & 0xffffffff;
64
+ this.state[b] ^= (t << 7) | (t >>> 25);
65
+
66
+ t = (this.state[b] + this.state[a]) & 0xffffffff;
67
+ this.state[c] ^= (t << 9) | (t >>> 23);
68
+
69
+ t = (this.state[c] + this.state[b]) & 0xffffffff;
70
+ this.state[d] ^= (t << 13) | (t >>> 19);
71
+
72
+ t = (this.state[d] + this.state[c]) & 0xffffffff;
73
+ this.state[a] ^= (t << 18) | (t >>> 14);
74
+ }
75
+
76
+ private generateBlock() {
77
+ const init = new Uint32Array([
78
+ this.fixed[0],
79
+ this.key[0],
80
+ this.key[1],
81
+ this.key[2],
82
+
83
+ this.key[3],
84
+ this.fixed[1],
85
+ this.nonce[0],
86
+ this.nonce[1],
87
+
88
+ this.counter[0],
89
+ this.counter[1],
90
+ this.fixed[2],
91
+ this.key[4],
92
+
93
+ this.key[5],
94
+ this.key[6],
95
+ this.key[7],
96
+ this.fixed[3],
97
+ ]);
98
+ this.state = new Uint32Array(init);
99
+
100
+ for (let i = 0; i < 20; i += 2) {
101
+ // Odd round
102
+ this.QR(0, 4, 8, 12);
103
+ this.QR(5, 9, 13, 1);
104
+ this.QR(10, 14, 2, 6);
105
+ this.QR(15, 3, 7, 11);
106
+ // Even round
107
+ this.QR(0, 1, 2, 3);
108
+ this.QR(5, 6, 7, 4);
109
+ this.QR(10, 11, 8, 9);
110
+ this.QR(15, 12, 13, 14);
111
+ }
112
+
113
+ for (let i = 0; i < 16; i += 1) {
114
+ const word = (this.state[i] + init[i]) & 0xffffffff;
115
+ this.block[i * 4] = word & 0xff;
116
+ this.block[i * 4 + 1] = (word >>> 8) & 0xff;
117
+ this.block[i * 4 + 2] = (word >>> 16) & 0xff;
118
+ this.block[i * 4 + 3] = (word >>> 24) & 0xff;
119
+ }
120
+
121
+ this.counter[0] = (this.counter[0] + 1) & 0xffffffff;
122
+ if (this.counter[0] === 0) {
123
+ this.counter[1] = (this.counter[1] + 1) & 0xffffffff;
124
+ }
125
+ }
126
+
127
+ process(input: Uint8Array): Uint8Array {
128
+ const { length } = input;
129
+ const result = new Uint8Array(length);
130
+
131
+ for (let i = 0; i < length; i += 1) {
132
+ if (this.position === 64) {
133
+ this.generateBlock();
134
+ this.position = 0;
135
+ }
136
+
137
+ result[i] = input[i] ^ this.block[this.position];
138
+ this.position += 1;
139
+ }
140
+
141
+ return result;
142
+ }
143
+ }
package/src/store.ts ADDED
@@ -0,0 +1,37 @@
1
+ import fs from 'node:fs/promises';
2
+
3
+ export default class Store<K extends string | number | symbol, V> {
4
+ private data: Record<K, V | undefined>;
5
+
6
+ private dataFile: string;
7
+
8
+ private promise: Promise<void>;
9
+
10
+ constructor(dataFile: string) {
11
+ this.dataFile = dataFile;
12
+ this.data = {} as Record<K, V | undefined>;
13
+
14
+ this.promise = new Promise((resolve) => {
15
+ fs
16
+ .readFile(dataFile, 'utf-8')
17
+ .then((file) => {
18
+ this.data = JSON.parse(file) as Record<K, V | undefined>;
19
+ resolve();
20
+ })
21
+ .catch(() => {
22
+ resolve();
23
+ });
24
+ });
25
+ }
26
+
27
+ public async get(key: K): Promise<V | undefined> {
28
+ await this.promise;
29
+ return this.data[key];
30
+ }
31
+
32
+ public async set(key: K, value: V): Promise<void> {
33
+ await this.promise;
34
+ this.data[key] = value;
35
+ await fs.writeFile(this.dataFile, JSON.stringify(this.data), 'utf-8');
36
+ }
37
+ }