@rhyster/wow-casc-dbc 1.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/LICENSE +20 -0
- package/README.md +36 -0
- package/dist/index.cjs +1863 -0
- package/dist/index.d.cts +233 -0
- package/dist/index.d.mts +233 -0
- package/dist/index.d.ts +233 -0
- package/dist/index.mjs +1850 -0
- package/package.json +53 -0
package/dist/index.d.cts
ADDED
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
interface ArchiveIndex {
|
|
2
|
+
key: string;
|
|
3
|
+
size: number;
|
|
4
|
+
offset: number;
|
|
5
|
+
}
|
|
6
|
+
declare const parseArchiveIndex: (buffer: Buffer, cKey: string) => Map<string, ArchiveIndex>;
|
|
7
|
+
|
|
8
|
+
interface EncodingData {
|
|
9
|
+
eSpec: string[];
|
|
10
|
+
cKey2FileSize: Map<string, number>;
|
|
11
|
+
cKey2EKey: Map<string, string | string[]>;
|
|
12
|
+
eKey2ESpecIndex: Map<string, number>;
|
|
13
|
+
eKey2FileSize: Map<string, number>;
|
|
14
|
+
}
|
|
15
|
+
declare const parseEncodingFile: (inputBuffer: Buffer, eKey: string, cKey: string) => EncodingData;
|
|
16
|
+
|
|
17
|
+
interface FileInfo {
|
|
18
|
+
cKey: string;
|
|
19
|
+
contentFlags: number;
|
|
20
|
+
localeFlags: number;
|
|
21
|
+
}
|
|
22
|
+
interface RootData {
|
|
23
|
+
fileDataID2CKey: Map<number, FileInfo[]>;
|
|
24
|
+
nameHash2FileDataID: Map<string, number>;
|
|
25
|
+
}
|
|
26
|
+
declare const parseRootFile: (inputBuffer: Buffer, eKey: string, cKey: string) => RootData;
|
|
27
|
+
|
|
28
|
+
interface Version {
|
|
29
|
+
Region: string;
|
|
30
|
+
BuildConfig: string;
|
|
31
|
+
CDNConfig: string;
|
|
32
|
+
KeyRing: string;
|
|
33
|
+
BuildId: string;
|
|
34
|
+
VersionsName: string;
|
|
35
|
+
ProductConfig: string;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
interface MissingKeyBlock {
|
|
39
|
+
offset: number;
|
|
40
|
+
size: number;
|
|
41
|
+
blockIndex: number;
|
|
42
|
+
keyName: string;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
interface ClientPreloadData {
|
|
46
|
+
prefixes: string[];
|
|
47
|
+
archives: ReturnType<typeof parseArchiveIndex>;
|
|
48
|
+
encoding: ReturnType<typeof parseEncodingFile>;
|
|
49
|
+
rootFile: ReturnType<typeof parseRootFile>;
|
|
50
|
+
}
|
|
51
|
+
interface FileFetchResultFull {
|
|
52
|
+
type: 'full';
|
|
53
|
+
buffer: Buffer;
|
|
54
|
+
}
|
|
55
|
+
interface FileFetchResultPartial {
|
|
56
|
+
type: 'partial';
|
|
57
|
+
buffer: Buffer;
|
|
58
|
+
blocks: MissingKeyBlock[];
|
|
59
|
+
}
|
|
60
|
+
type FileFetchResult = FileFetchResultFull | FileFetchResultPartial;
|
|
61
|
+
declare enum LogLevel {
|
|
62
|
+
error = 0,
|
|
63
|
+
warn = 1,
|
|
64
|
+
info = 2,
|
|
65
|
+
debug = 3
|
|
66
|
+
}
|
|
67
|
+
declare class CASCClient {
|
|
68
|
+
readonly region: string;
|
|
69
|
+
readonly product: string;
|
|
70
|
+
readonly version: Version;
|
|
71
|
+
readonly name2FileDataID: Map<string, number>;
|
|
72
|
+
readonly keys: Map<string, Uint8Array>;
|
|
73
|
+
preload?: ClientPreloadData;
|
|
74
|
+
static getProductVersion(region: string, product: string): Promise<Version | undefined>;
|
|
75
|
+
static LocaleFlags: {
|
|
76
|
+
enUS: number;
|
|
77
|
+
koKR: number;
|
|
78
|
+
frFR: number;
|
|
79
|
+
deDE: number;
|
|
80
|
+
zhCN: number;
|
|
81
|
+
esES: number;
|
|
82
|
+
zhTW: number;
|
|
83
|
+
enGB: number;
|
|
84
|
+
esMX: number;
|
|
85
|
+
ruRU: number;
|
|
86
|
+
ptBR: number;
|
|
87
|
+
itIT: number;
|
|
88
|
+
ptPT: number;
|
|
89
|
+
};
|
|
90
|
+
static ContentFlags: {
|
|
91
|
+
Install: number;
|
|
92
|
+
LoadOnWindows: number;
|
|
93
|
+
LoadOnMacOS: number;
|
|
94
|
+
x86_32: number;
|
|
95
|
+
x86_64: number;
|
|
96
|
+
LowViolence: number;
|
|
97
|
+
DoNotLoad: number;
|
|
98
|
+
UpdatePlugin: number;
|
|
99
|
+
ARM64: number;
|
|
100
|
+
Encrypted: number;
|
|
101
|
+
NoNameHash: number;
|
|
102
|
+
UncommonResolution: number;
|
|
103
|
+
Bundle: number;
|
|
104
|
+
NoCompression: number;
|
|
105
|
+
};
|
|
106
|
+
static LogLevel: typeof LogLevel;
|
|
107
|
+
logLevel: LogLevel;
|
|
108
|
+
constructor(region: string, product: string, version: Version, logLevel?: LogLevel);
|
|
109
|
+
private log;
|
|
110
|
+
init(): Promise<void>;
|
|
111
|
+
loadRemoteListFile(): Promise<void>;
|
|
112
|
+
loadRemoteTACTKeys(): Promise<void>;
|
|
113
|
+
loadTACTKeys(): Promise<void>;
|
|
114
|
+
getFileDataIDByName(name: string): number | undefined;
|
|
115
|
+
getContentKeysByFileDataID(fileDataID: number): FileInfo[] | undefined;
|
|
116
|
+
getFileByContentKey(cKey: string, allowMissingKey?: false): Promise<FileFetchResultFull>;
|
|
117
|
+
getFileByContentKey(cKey: string, allowMissingKey: true): Promise<FileFetchResult>;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
interface FieldStructure {
|
|
121
|
+
size: number;
|
|
122
|
+
position: number;
|
|
123
|
+
}
|
|
124
|
+
interface FieldStorageInfoCompressionNone {
|
|
125
|
+
fieldOffsetBits: number;
|
|
126
|
+
fieldSizeBits: number;
|
|
127
|
+
additionalDataSize: number;
|
|
128
|
+
storageType: 'none';
|
|
129
|
+
}
|
|
130
|
+
interface FieldStorageInfoCompressionBitpacked {
|
|
131
|
+
fieldOffsetBits: number;
|
|
132
|
+
fieldSizeBits: number;
|
|
133
|
+
additionalDataSize: number;
|
|
134
|
+
storageType: 'bitpacked';
|
|
135
|
+
bitpackingOffsetBits: number;
|
|
136
|
+
bitpackingSizeBits: number;
|
|
137
|
+
flags: number;
|
|
138
|
+
}
|
|
139
|
+
interface FieldStorageInfoCompressionCommonData {
|
|
140
|
+
fieldOffsetBits: number;
|
|
141
|
+
fieldSizeBits: number;
|
|
142
|
+
additionalDataSize: number;
|
|
143
|
+
storageType: 'commonData';
|
|
144
|
+
defaultValue: number;
|
|
145
|
+
}
|
|
146
|
+
interface FieldStorageInfoCompressionBitpackedIndexed {
|
|
147
|
+
fieldOffsetBits: number;
|
|
148
|
+
fieldSizeBits: number;
|
|
149
|
+
additionalDataSize: number;
|
|
150
|
+
storageType: 'bitpackedIndexed';
|
|
151
|
+
bitpackingOffsetBits: number;
|
|
152
|
+
bitpackingSizeBits: number;
|
|
153
|
+
}
|
|
154
|
+
interface FieldStorageInfoCompressionBitpackedIndexedArray {
|
|
155
|
+
fieldOffsetBits: number;
|
|
156
|
+
fieldSizeBits: number;
|
|
157
|
+
additionalDataSize: number;
|
|
158
|
+
storageType: 'bitpackedIndexedArray';
|
|
159
|
+
bitpackingOffsetBits: number;
|
|
160
|
+
bitpackingSizeBits: number;
|
|
161
|
+
arrayCount: number;
|
|
162
|
+
}
|
|
163
|
+
interface FieldStorageInfoCompressionBitpackedSigned {
|
|
164
|
+
fieldOffsetBits: number;
|
|
165
|
+
fieldSizeBits: number;
|
|
166
|
+
additionalDataSize: number;
|
|
167
|
+
storageType: 'bitpackedSigned';
|
|
168
|
+
bitpackingOffsetBits: number;
|
|
169
|
+
bitpackingSizeBits: number;
|
|
170
|
+
flags: number;
|
|
171
|
+
}
|
|
172
|
+
type FieldStorageInfo = FieldStorageInfoCompressionNone | FieldStorageInfoCompressionBitpacked | FieldStorageInfoCompressionCommonData | FieldStorageInfoCompressionBitpackedIndexed | FieldStorageInfoCompressionBitpackedIndexedArray | FieldStorageInfoCompressionBitpackedSigned;
|
|
173
|
+
interface ParsedFieldNone {
|
|
174
|
+
type: 'none';
|
|
175
|
+
data: number | bigint;
|
|
176
|
+
string?: string;
|
|
177
|
+
}
|
|
178
|
+
interface ParsedFieldCommonData {
|
|
179
|
+
type: 'commonData';
|
|
180
|
+
data: number;
|
|
181
|
+
}
|
|
182
|
+
interface ParsedFieldBitpacked {
|
|
183
|
+
type: 'bitpacked';
|
|
184
|
+
data: number;
|
|
185
|
+
}
|
|
186
|
+
interface ParsedFieldBitpackedArray {
|
|
187
|
+
type: 'bitpackedArray';
|
|
188
|
+
data: number[];
|
|
189
|
+
}
|
|
190
|
+
type ParsedField = ParsedFieldNone | ParsedFieldCommonData | ParsedFieldBitpacked | ParsedFieldBitpackedArray;
|
|
191
|
+
interface SparseRow {
|
|
192
|
+
type: 'sparse';
|
|
193
|
+
data: Buffer;
|
|
194
|
+
}
|
|
195
|
+
declare class WDCReader {
|
|
196
|
+
readonly tableHash: number;
|
|
197
|
+
readonly layoutHash: number;
|
|
198
|
+
readonly locale: number;
|
|
199
|
+
readonly isNormal: boolean;
|
|
200
|
+
readonly hasRelationshipData: boolean;
|
|
201
|
+
readonly fields: FieldStructure[];
|
|
202
|
+
readonly fieldsInfo: FieldStorageInfo[];
|
|
203
|
+
readonly rows: Map<number, SparseRow | ParsedField[]>;
|
|
204
|
+
readonly relationships: Map<number, number>;
|
|
205
|
+
readonly copyTable: Map<number, number>;
|
|
206
|
+
constructor(buffer: Buffer, blocks?: MissingKeyBlock[]);
|
|
207
|
+
getAllIDs(): number[];
|
|
208
|
+
getRowData(id: number): ParsedField[] | SparseRow | undefined;
|
|
209
|
+
getRowRelationship(id: number): number | undefined;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
interface Column {
|
|
213
|
+
name: string;
|
|
214
|
+
type: string;
|
|
215
|
+
isID: boolean;
|
|
216
|
+
isInline: boolean;
|
|
217
|
+
isRelation: boolean;
|
|
218
|
+
isSigned: boolean;
|
|
219
|
+
size?: number;
|
|
220
|
+
arraySize?: number;
|
|
221
|
+
}
|
|
222
|
+
type ColumnData = number | bigint | string | undefined;
|
|
223
|
+
declare class DBDParser {
|
|
224
|
+
readonly wdc: WDCReader;
|
|
225
|
+
readonly definitions: Map<string, string>;
|
|
226
|
+
columns: Column[];
|
|
227
|
+
constructor(wdc: WDCReader);
|
|
228
|
+
init(): Promise<void>;
|
|
229
|
+
getAllIDs(): number[];
|
|
230
|
+
getRowData(id: number): Record<string, ColumnData | ColumnData[]> | undefined;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
export { CASCClient, DBDParser, WDCReader };
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
interface ArchiveIndex {
|
|
2
|
+
key: string;
|
|
3
|
+
size: number;
|
|
4
|
+
offset: number;
|
|
5
|
+
}
|
|
6
|
+
declare const parseArchiveIndex: (buffer: Buffer, cKey: string) => Map<string, ArchiveIndex>;
|
|
7
|
+
|
|
8
|
+
interface EncodingData {
|
|
9
|
+
eSpec: string[];
|
|
10
|
+
cKey2FileSize: Map<string, number>;
|
|
11
|
+
cKey2EKey: Map<string, string | string[]>;
|
|
12
|
+
eKey2ESpecIndex: Map<string, number>;
|
|
13
|
+
eKey2FileSize: Map<string, number>;
|
|
14
|
+
}
|
|
15
|
+
declare const parseEncodingFile: (inputBuffer: Buffer, eKey: string, cKey: string) => EncodingData;
|
|
16
|
+
|
|
17
|
+
interface FileInfo {
|
|
18
|
+
cKey: string;
|
|
19
|
+
contentFlags: number;
|
|
20
|
+
localeFlags: number;
|
|
21
|
+
}
|
|
22
|
+
interface RootData {
|
|
23
|
+
fileDataID2CKey: Map<number, FileInfo[]>;
|
|
24
|
+
nameHash2FileDataID: Map<string, number>;
|
|
25
|
+
}
|
|
26
|
+
declare const parseRootFile: (inputBuffer: Buffer, eKey: string, cKey: string) => RootData;
|
|
27
|
+
|
|
28
|
+
interface Version {
|
|
29
|
+
Region: string;
|
|
30
|
+
BuildConfig: string;
|
|
31
|
+
CDNConfig: string;
|
|
32
|
+
KeyRing: string;
|
|
33
|
+
BuildId: string;
|
|
34
|
+
VersionsName: string;
|
|
35
|
+
ProductConfig: string;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
interface MissingKeyBlock {
|
|
39
|
+
offset: number;
|
|
40
|
+
size: number;
|
|
41
|
+
blockIndex: number;
|
|
42
|
+
keyName: string;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
interface ClientPreloadData {
|
|
46
|
+
prefixes: string[];
|
|
47
|
+
archives: ReturnType<typeof parseArchiveIndex>;
|
|
48
|
+
encoding: ReturnType<typeof parseEncodingFile>;
|
|
49
|
+
rootFile: ReturnType<typeof parseRootFile>;
|
|
50
|
+
}
|
|
51
|
+
interface FileFetchResultFull {
|
|
52
|
+
type: 'full';
|
|
53
|
+
buffer: Buffer;
|
|
54
|
+
}
|
|
55
|
+
interface FileFetchResultPartial {
|
|
56
|
+
type: 'partial';
|
|
57
|
+
buffer: Buffer;
|
|
58
|
+
blocks: MissingKeyBlock[];
|
|
59
|
+
}
|
|
60
|
+
type FileFetchResult = FileFetchResultFull | FileFetchResultPartial;
|
|
61
|
+
declare enum LogLevel {
|
|
62
|
+
error = 0,
|
|
63
|
+
warn = 1,
|
|
64
|
+
info = 2,
|
|
65
|
+
debug = 3
|
|
66
|
+
}
|
|
67
|
+
declare class CASCClient {
|
|
68
|
+
readonly region: string;
|
|
69
|
+
readonly product: string;
|
|
70
|
+
readonly version: Version;
|
|
71
|
+
readonly name2FileDataID: Map<string, number>;
|
|
72
|
+
readonly keys: Map<string, Uint8Array>;
|
|
73
|
+
preload?: ClientPreloadData;
|
|
74
|
+
static getProductVersion(region: string, product: string): Promise<Version | undefined>;
|
|
75
|
+
static LocaleFlags: {
|
|
76
|
+
enUS: number;
|
|
77
|
+
koKR: number;
|
|
78
|
+
frFR: number;
|
|
79
|
+
deDE: number;
|
|
80
|
+
zhCN: number;
|
|
81
|
+
esES: number;
|
|
82
|
+
zhTW: number;
|
|
83
|
+
enGB: number;
|
|
84
|
+
esMX: number;
|
|
85
|
+
ruRU: number;
|
|
86
|
+
ptBR: number;
|
|
87
|
+
itIT: number;
|
|
88
|
+
ptPT: number;
|
|
89
|
+
};
|
|
90
|
+
static ContentFlags: {
|
|
91
|
+
Install: number;
|
|
92
|
+
LoadOnWindows: number;
|
|
93
|
+
LoadOnMacOS: number;
|
|
94
|
+
x86_32: number;
|
|
95
|
+
x86_64: number;
|
|
96
|
+
LowViolence: number;
|
|
97
|
+
DoNotLoad: number;
|
|
98
|
+
UpdatePlugin: number;
|
|
99
|
+
ARM64: number;
|
|
100
|
+
Encrypted: number;
|
|
101
|
+
NoNameHash: number;
|
|
102
|
+
UncommonResolution: number;
|
|
103
|
+
Bundle: number;
|
|
104
|
+
NoCompression: number;
|
|
105
|
+
};
|
|
106
|
+
static LogLevel: typeof LogLevel;
|
|
107
|
+
logLevel: LogLevel;
|
|
108
|
+
constructor(region: string, product: string, version: Version, logLevel?: LogLevel);
|
|
109
|
+
private log;
|
|
110
|
+
init(): Promise<void>;
|
|
111
|
+
loadRemoteListFile(): Promise<void>;
|
|
112
|
+
loadRemoteTACTKeys(): Promise<void>;
|
|
113
|
+
loadTACTKeys(): Promise<void>;
|
|
114
|
+
getFileDataIDByName(name: string): number | undefined;
|
|
115
|
+
getContentKeysByFileDataID(fileDataID: number): FileInfo[] | undefined;
|
|
116
|
+
getFileByContentKey(cKey: string, allowMissingKey?: false): Promise<FileFetchResultFull>;
|
|
117
|
+
getFileByContentKey(cKey: string, allowMissingKey: true): Promise<FileFetchResult>;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
interface FieldStructure {
|
|
121
|
+
size: number;
|
|
122
|
+
position: number;
|
|
123
|
+
}
|
|
124
|
+
interface FieldStorageInfoCompressionNone {
|
|
125
|
+
fieldOffsetBits: number;
|
|
126
|
+
fieldSizeBits: number;
|
|
127
|
+
additionalDataSize: number;
|
|
128
|
+
storageType: 'none';
|
|
129
|
+
}
|
|
130
|
+
interface FieldStorageInfoCompressionBitpacked {
|
|
131
|
+
fieldOffsetBits: number;
|
|
132
|
+
fieldSizeBits: number;
|
|
133
|
+
additionalDataSize: number;
|
|
134
|
+
storageType: 'bitpacked';
|
|
135
|
+
bitpackingOffsetBits: number;
|
|
136
|
+
bitpackingSizeBits: number;
|
|
137
|
+
flags: number;
|
|
138
|
+
}
|
|
139
|
+
interface FieldStorageInfoCompressionCommonData {
|
|
140
|
+
fieldOffsetBits: number;
|
|
141
|
+
fieldSizeBits: number;
|
|
142
|
+
additionalDataSize: number;
|
|
143
|
+
storageType: 'commonData';
|
|
144
|
+
defaultValue: number;
|
|
145
|
+
}
|
|
146
|
+
interface FieldStorageInfoCompressionBitpackedIndexed {
|
|
147
|
+
fieldOffsetBits: number;
|
|
148
|
+
fieldSizeBits: number;
|
|
149
|
+
additionalDataSize: number;
|
|
150
|
+
storageType: 'bitpackedIndexed';
|
|
151
|
+
bitpackingOffsetBits: number;
|
|
152
|
+
bitpackingSizeBits: number;
|
|
153
|
+
}
|
|
154
|
+
interface FieldStorageInfoCompressionBitpackedIndexedArray {
|
|
155
|
+
fieldOffsetBits: number;
|
|
156
|
+
fieldSizeBits: number;
|
|
157
|
+
additionalDataSize: number;
|
|
158
|
+
storageType: 'bitpackedIndexedArray';
|
|
159
|
+
bitpackingOffsetBits: number;
|
|
160
|
+
bitpackingSizeBits: number;
|
|
161
|
+
arrayCount: number;
|
|
162
|
+
}
|
|
163
|
+
interface FieldStorageInfoCompressionBitpackedSigned {
|
|
164
|
+
fieldOffsetBits: number;
|
|
165
|
+
fieldSizeBits: number;
|
|
166
|
+
additionalDataSize: number;
|
|
167
|
+
storageType: 'bitpackedSigned';
|
|
168
|
+
bitpackingOffsetBits: number;
|
|
169
|
+
bitpackingSizeBits: number;
|
|
170
|
+
flags: number;
|
|
171
|
+
}
|
|
172
|
+
type FieldStorageInfo = FieldStorageInfoCompressionNone | FieldStorageInfoCompressionBitpacked | FieldStorageInfoCompressionCommonData | FieldStorageInfoCompressionBitpackedIndexed | FieldStorageInfoCompressionBitpackedIndexedArray | FieldStorageInfoCompressionBitpackedSigned;
|
|
173
|
+
interface ParsedFieldNone {
|
|
174
|
+
type: 'none';
|
|
175
|
+
data: number | bigint;
|
|
176
|
+
string?: string;
|
|
177
|
+
}
|
|
178
|
+
interface ParsedFieldCommonData {
|
|
179
|
+
type: 'commonData';
|
|
180
|
+
data: number;
|
|
181
|
+
}
|
|
182
|
+
interface ParsedFieldBitpacked {
|
|
183
|
+
type: 'bitpacked';
|
|
184
|
+
data: number;
|
|
185
|
+
}
|
|
186
|
+
interface ParsedFieldBitpackedArray {
|
|
187
|
+
type: 'bitpackedArray';
|
|
188
|
+
data: number[];
|
|
189
|
+
}
|
|
190
|
+
type ParsedField = ParsedFieldNone | ParsedFieldCommonData | ParsedFieldBitpacked | ParsedFieldBitpackedArray;
|
|
191
|
+
interface SparseRow {
|
|
192
|
+
type: 'sparse';
|
|
193
|
+
data: Buffer;
|
|
194
|
+
}
|
|
195
|
+
declare class WDCReader {
|
|
196
|
+
readonly tableHash: number;
|
|
197
|
+
readonly layoutHash: number;
|
|
198
|
+
readonly locale: number;
|
|
199
|
+
readonly isNormal: boolean;
|
|
200
|
+
readonly hasRelationshipData: boolean;
|
|
201
|
+
readonly fields: FieldStructure[];
|
|
202
|
+
readonly fieldsInfo: FieldStorageInfo[];
|
|
203
|
+
readonly rows: Map<number, SparseRow | ParsedField[]>;
|
|
204
|
+
readonly relationships: Map<number, number>;
|
|
205
|
+
readonly copyTable: Map<number, number>;
|
|
206
|
+
constructor(buffer: Buffer, blocks?: MissingKeyBlock[]);
|
|
207
|
+
getAllIDs(): number[];
|
|
208
|
+
getRowData(id: number): ParsedField[] | SparseRow | undefined;
|
|
209
|
+
getRowRelationship(id: number): number | undefined;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
interface Column {
|
|
213
|
+
name: string;
|
|
214
|
+
type: string;
|
|
215
|
+
isID: boolean;
|
|
216
|
+
isInline: boolean;
|
|
217
|
+
isRelation: boolean;
|
|
218
|
+
isSigned: boolean;
|
|
219
|
+
size?: number;
|
|
220
|
+
arraySize?: number;
|
|
221
|
+
}
|
|
222
|
+
type ColumnData = number | bigint | string | undefined;
|
|
223
|
+
declare class DBDParser {
|
|
224
|
+
readonly wdc: WDCReader;
|
|
225
|
+
readonly definitions: Map<string, string>;
|
|
226
|
+
columns: Column[];
|
|
227
|
+
constructor(wdc: WDCReader);
|
|
228
|
+
init(): Promise<void>;
|
|
229
|
+
getAllIDs(): number[];
|
|
230
|
+
getRowData(id: number): Record<string, ColumnData | ColumnData[]> | undefined;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
export { CASCClient, DBDParser, WDCReader };
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
interface ArchiveIndex {
|
|
2
|
+
key: string;
|
|
3
|
+
size: number;
|
|
4
|
+
offset: number;
|
|
5
|
+
}
|
|
6
|
+
declare const parseArchiveIndex: (buffer: Buffer, cKey: string) => Map<string, ArchiveIndex>;
|
|
7
|
+
|
|
8
|
+
interface EncodingData {
|
|
9
|
+
eSpec: string[];
|
|
10
|
+
cKey2FileSize: Map<string, number>;
|
|
11
|
+
cKey2EKey: Map<string, string | string[]>;
|
|
12
|
+
eKey2ESpecIndex: Map<string, number>;
|
|
13
|
+
eKey2FileSize: Map<string, number>;
|
|
14
|
+
}
|
|
15
|
+
declare const parseEncodingFile: (inputBuffer: Buffer, eKey: string, cKey: string) => EncodingData;
|
|
16
|
+
|
|
17
|
+
interface FileInfo {
|
|
18
|
+
cKey: string;
|
|
19
|
+
contentFlags: number;
|
|
20
|
+
localeFlags: number;
|
|
21
|
+
}
|
|
22
|
+
interface RootData {
|
|
23
|
+
fileDataID2CKey: Map<number, FileInfo[]>;
|
|
24
|
+
nameHash2FileDataID: Map<string, number>;
|
|
25
|
+
}
|
|
26
|
+
declare const parseRootFile: (inputBuffer: Buffer, eKey: string, cKey: string) => RootData;
|
|
27
|
+
|
|
28
|
+
interface Version {
|
|
29
|
+
Region: string;
|
|
30
|
+
BuildConfig: string;
|
|
31
|
+
CDNConfig: string;
|
|
32
|
+
KeyRing: string;
|
|
33
|
+
BuildId: string;
|
|
34
|
+
VersionsName: string;
|
|
35
|
+
ProductConfig: string;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
interface MissingKeyBlock {
|
|
39
|
+
offset: number;
|
|
40
|
+
size: number;
|
|
41
|
+
blockIndex: number;
|
|
42
|
+
keyName: string;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
interface ClientPreloadData {
|
|
46
|
+
prefixes: string[];
|
|
47
|
+
archives: ReturnType<typeof parseArchiveIndex>;
|
|
48
|
+
encoding: ReturnType<typeof parseEncodingFile>;
|
|
49
|
+
rootFile: ReturnType<typeof parseRootFile>;
|
|
50
|
+
}
|
|
51
|
+
interface FileFetchResultFull {
|
|
52
|
+
type: 'full';
|
|
53
|
+
buffer: Buffer;
|
|
54
|
+
}
|
|
55
|
+
interface FileFetchResultPartial {
|
|
56
|
+
type: 'partial';
|
|
57
|
+
buffer: Buffer;
|
|
58
|
+
blocks: MissingKeyBlock[];
|
|
59
|
+
}
|
|
60
|
+
type FileFetchResult = FileFetchResultFull | FileFetchResultPartial;
|
|
61
|
+
declare enum LogLevel {
|
|
62
|
+
error = 0,
|
|
63
|
+
warn = 1,
|
|
64
|
+
info = 2,
|
|
65
|
+
debug = 3
|
|
66
|
+
}
|
|
67
|
+
declare class CASCClient {
|
|
68
|
+
readonly region: string;
|
|
69
|
+
readonly product: string;
|
|
70
|
+
readonly version: Version;
|
|
71
|
+
readonly name2FileDataID: Map<string, number>;
|
|
72
|
+
readonly keys: Map<string, Uint8Array>;
|
|
73
|
+
preload?: ClientPreloadData;
|
|
74
|
+
static getProductVersion(region: string, product: string): Promise<Version | undefined>;
|
|
75
|
+
static LocaleFlags: {
|
|
76
|
+
enUS: number;
|
|
77
|
+
koKR: number;
|
|
78
|
+
frFR: number;
|
|
79
|
+
deDE: number;
|
|
80
|
+
zhCN: number;
|
|
81
|
+
esES: number;
|
|
82
|
+
zhTW: number;
|
|
83
|
+
enGB: number;
|
|
84
|
+
esMX: number;
|
|
85
|
+
ruRU: number;
|
|
86
|
+
ptBR: number;
|
|
87
|
+
itIT: number;
|
|
88
|
+
ptPT: number;
|
|
89
|
+
};
|
|
90
|
+
static ContentFlags: {
|
|
91
|
+
Install: number;
|
|
92
|
+
LoadOnWindows: number;
|
|
93
|
+
LoadOnMacOS: number;
|
|
94
|
+
x86_32: number;
|
|
95
|
+
x86_64: number;
|
|
96
|
+
LowViolence: number;
|
|
97
|
+
DoNotLoad: number;
|
|
98
|
+
UpdatePlugin: number;
|
|
99
|
+
ARM64: number;
|
|
100
|
+
Encrypted: number;
|
|
101
|
+
NoNameHash: number;
|
|
102
|
+
UncommonResolution: number;
|
|
103
|
+
Bundle: number;
|
|
104
|
+
NoCompression: number;
|
|
105
|
+
};
|
|
106
|
+
static LogLevel: typeof LogLevel;
|
|
107
|
+
logLevel: LogLevel;
|
|
108
|
+
constructor(region: string, product: string, version: Version, logLevel?: LogLevel);
|
|
109
|
+
private log;
|
|
110
|
+
init(): Promise<void>;
|
|
111
|
+
loadRemoteListFile(): Promise<void>;
|
|
112
|
+
loadRemoteTACTKeys(): Promise<void>;
|
|
113
|
+
loadTACTKeys(): Promise<void>;
|
|
114
|
+
getFileDataIDByName(name: string): number | undefined;
|
|
115
|
+
getContentKeysByFileDataID(fileDataID: number): FileInfo[] | undefined;
|
|
116
|
+
getFileByContentKey(cKey: string, allowMissingKey?: false): Promise<FileFetchResultFull>;
|
|
117
|
+
getFileByContentKey(cKey: string, allowMissingKey: true): Promise<FileFetchResult>;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
interface FieldStructure {
|
|
121
|
+
size: number;
|
|
122
|
+
position: number;
|
|
123
|
+
}
|
|
124
|
+
interface FieldStorageInfoCompressionNone {
|
|
125
|
+
fieldOffsetBits: number;
|
|
126
|
+
fieldSizeBits: number;
|
|
127
|
+
additionalDataSize: number;
|
|
128
|
+
storageType: 'none';
|
|
129
|
+
}
|
|
130
|
+
interface FieldStorageInfoCompressionBitpacked {
|
|
131
|
+
fieldOffsetBits: number;
|
|
132
|
+
fieldSizeBits: number;
|
|
133
|
+
additionalDataSize: number;
|
|
134
|
+
storageType: 'bitpacked';
|
|
135
|
+
bitpackingOffsetBits: number;
|
|
136
|
+
bitpackingSizeBits: number;
|
|
137
|
+
flags: number;
|
|
138
|
+
}
|
|
139
|
+
interface FieldStorageInfoCompressionCommonData {
|
|
140
|
+
fieldOffsetBits: number;
|
|
141
|
+
fieldSizeBits: number;
|
|
142
|
+
additionalDataSize: number;
|
|
143
|
+
storageType: 'commonData';
|
|
144
|
+
defaultValue: number;
|
|
145
|
+
}
|
|
146
|
+
interface FieldStorageInfoCompressionBitpackedIndexed {
|
|
147
|
+
fieldOffsetBits: number;
|
|
148
|
+
fieldSizeBits: number;
|
|
149
|
+
additionalDataSize: number;
|
|
150
|
+
storageType: 'bitpackedIndexed';
|
|
151
|
+
bitpackingOffsetBits: number;
|
|
152
|
+
bitpackingSizeBits: number;
|
|
153
|
+
}
|
|
154
|
+
interface FieldStorageInfoCompressionBitpackedIndexedArray {
|
|
155
|
+
fieldOffsetBits: number;
|
|
156
|
+
fieldSizeBits: number;
|
|
157
|
+
additionalDataSize: number;
|
|
158
|
+
storageType: 'bitpackedIndexedArray';
|
|
159
|
+
bitpackingOffsetBits: number;
|
|
160
|
+
bitpackingSizeBits: number;
|
|
161
|
+
arrayCount: number;
|
|
162
|
+
}
|
|
163
|
+
interface FieldStorageInfoCompressionBitpackedSigned {
|
|
164
|
+
fieldOffsetBits: number;
|
|
165
|
+
fieldSizeBits: number;
|
|
166
|
+
additionalDataSize: number;
|
|
167
|
+
storageType: 'bitpackedSigned';
|
|
168
|
+
bitpackingOffsetBits: number;
|
|
169
|
+
bitpackingSizeBits: number;
|
|
170
|
+
flags: number;
|
|
171
|
+
}
|
|
172
|
+
type FieldStorageInfo = FieldStorageInfoCompressionNone | FieldStorageInfoCompressionBitpacked | FieldStorageInfoCompressionCommonData | FieldStorageInfoCompressionBitpackedIndexed | FieldStorageInfoCompressionBitpackedIndexedArray | FieldStorageInfoCompressionBitpackedSigned;
|
|
173
|
+
interface ParsedFieldNone {
|
|
174
|
+
type: 'none';
|
|
175
|
+
data: number | bigint;
|
|
176
|
+
string?: string;
|
|
177
|
+
}
|
|
178
|
+
interface ParsedFieldCommonData {
|
|
179
|
+
type: 'commonData';
|
|
180
|
+
data: number;
|
|
181
|
+
}
|
|
182
|
+
interface ParsedFieldBitpacked {
|
|
183
|
+
type: 'bitpacked';
|
|
184
|
+
data: number;
|
|
185
|
+
}
|
|
186
|
+
interface ParsedFieldBitpackedArray {
|
|
187
|
+
type: 'bitpackedArray';
|
|
188
|
+
data: number[];
|
|
189
|
+
}
|
|
190
|
+
type ParsedField = ParsedFieldNone | ParsedFieldCommonData | ParsedFieldBitpacked | ParsedFieldBitpackedArray;
|
|
191
|
+
interface SparseRow {
|
|
192
|
+
type: 'sparse';
|
|
193
|
+
data: Buffer;
|
|
194
|
+
}
|
|
195
|
+
declare class WDCReader {
|
|
196
|
+
readonly tableHash: number;
|
|
197
|
+
readonly layoutHash: number;
|
|
198
|
+
readonly locale: number;
|
|
199
|
+
readonly isNormal: boolean;
|
|
200
|
+
readonly hasRelationshipData: boolean;
|
|
201
|
+
readonly fields: FieldStructure[];
|
|
202
|
+
readonly fieldsInfo: FieldStorageInfo[];
|
|
203
|
+
readonly rows: Map<number, SparseRow | ParsedField[]>;
|
|
204
|
+
readonly relationships: Map<number, number>;
|
|
205
|
+
readonly copyTable: Map<number, number>;
|
|
206
|
+
constructor(buffer: Buffer, blocks?: MissingKeyBlock[]);
|
|
207
|
+
getAllIDs(): number[];
|
|
208
|
+
getRowData(id: number): ParsedField[] | SparseRow | undefined;
|
|
209
|
+
getRowRelationship(id: number): number | undefined;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
interface Column {
|
|
213
|
+
name: string;
|
|
214
|
+
type: string;
|
|
215
|
+
isID: boolean;
|
|
216
|
+
isInline: boolean;
|
|
217
|
+
isRelation: boolean;
|
|
218
|
+
isSigned: boolean;
|
|
219
|
+
size?: number;
|
|
220
|
+
arraySize?: number;
|
|
221
|
+
}
|
|
222
|
+
type ColumnData = number | bigint | string | undefined;
|
|
223
|
+
declare class DBDParser {
|
|
224
|
+
readonly wdc: WDCReader;
|
|
225
|
+
readonly definitions: Map<string, string>;
|
|
226
|
+
columns: Column[];
|
|
227
|
+
constructor(wdc: WDCReader);
|
|
228
|
+
init(): Promise<void>;
|
|
229
|
+
getAllIDs(): number[];
|
|
230
|
+
getRowData(id: number): Record<string, ColumnData | ColumnData[]> | undefined;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
export { CASCClient, DBDParser, WDCReader };
|