@neoware_inc/neozipkit 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +134 -0
- package/dist/browser/ZipkitBrowser.d.ts +27 -0
- package/dist/browser/ZipkitBrowser.d.ts.map +1 -0
- package/dist/browser/ZipkitBrowser.js +303 -0
- package/dist/browser/ZipkitBrowser.js.map +1 -0
- package/dist/browser/index.d.ts +9 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.esm.d.ts +12 -0
- package/dist/browser/index.esm.d.ts.map +1 -0
- package/dist/browser/index.esm.js +46 -0
- package/dist/browser/index.esm.js.map +1 -0
- package/dist/browser/index.js +38 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser-esm/index.d.ts +9 -0
- package/dist/browser-esm/index.js +50211 -0
- package/dist/browser-esm/index.js.map +7 -0
- package/dist/browser-umd/index.d.ts +9 -0
- package/dist/browser-umd/index.js +50221 -0
- package/dist/browser-umd/index.js.map +7 -0
- package/dist/browser-umd/index.min.js +39 -0
- package/dist/browser.d.ts +9 -0
- package/dist/browser.js +38 -0
- package/dist/core/ZipCompress.d.ts +99 -0
- package/dist/core/ZipCompress.d.ts.map +1 -0
- package/dist/core/ZipCompress.js +287 -0
- package/dist/core/ZipCompress.js.map +1 -0
- package/dist/core/ZipCopy.d.ts +175 -0
- package/dist/core/ZipCopy.d.ts.map +1 -0
- package/dist/core/ZipCopy.js +310 -0
- package/dist/core/ZipCopy.js.map +1 -0
- package/dist/core/ZipDecompress.d.ts +57 -0
- package/dist/core/ZipDecompress.d.ts.map +1 -0
- package/dist/core/ZipDecompress.js +155 -0
- package/dist/core/ZipDecompress.js.map +1 -0
- package/dist/core/ZipEntry.d.ts +138 -0
- package/dist/core/ZipEntry.d.ts.map +1 -0
- package/dist/core/ZipEntry.js +829 -0
- package/dist/core/ZipEntry.js.map +1 -0
- package/dist/core/Zipkit.d.ts +315 -0
- package/dist/core/Zipkit.d.ts.map +1 -0
- package/dist/core/Zipkit.js +647 -0
- package/dist/core/Zipkit.js.map +1 -0
- package/dist/core/ZstdManager.d.ts +56 -0
- package/dist/core/ZstdManager.d.ts.map +1 -0
- package/dist/core/ZstdManager.js +144 -0
- package/dist/core/ZstdManager.js.map +1 -0
- package/dist/core/components/HashCalculator.d.ts +138 -0
- package/dist/core/components/HashCalculator.d.ts.map +1 -0
- package/dist/core/components/HashCalculator.js +360 -0
- package/dist/core/components/HashCalculator.js.map +1 -0
- package/dist/core/components/Logger.d.ts +73 -0
- package/dist/core/components/Logger.d.ts.map +1 -0
- package/dist/core/components/Logger.js +156 -0
- package/dist/core/components/Logger.js.map +1 -0
- package/dist/core/components/ProgressTracker.d.ts +43 -0
- package/dist/core/components/ProgressTracker.d.ts.map +1 -0
- package/dist/core/components/ProgressTracker.js +112 -0
- package/dist/core/components/ProgressTracker.js.map +1 -0
- package/dist/core/components/Support.d.ts +64 -0
- package/dist/core/components/Support.d.ts.map +1 -0
- package/dist/core/components/Support.js +71 -0
- package/dist/core/components/Support.js.map +1 -0
- package/dist/core/components/Util.d.ts +26 -0
- package/dist/core/components/Util.d.ts.map +1 -0
- package/dist/core/components/Util.js +95 -0
- package/dist/core/components/Util.js.map +1 -0
- package/dist/core/constants/Errors.d.ts +52 -0
- package/dist/core/constants/Errors.d.ts.map +1 -0
- package/dist/core/constants/Errors.js +67 -0
- package/dist/core/constants/Errors.js.map +1 -0
- package/dist/core/constants/Headers.d.ts +170 -0
- package/dist/core/constants/Headers.d.ts.map +1 -0
- package/dist/core/constants/Headers.js +194 -0
- package/dist/core/constants/Headers.js.map +1 -0
- package/dist/core/encryption/Manager.d.ts +58 -0
- package/dist/core/encryption/Manager.d.ts.map +1 -0
- package/dist/core/encryption/Manager.js +121 -0
- package/dist/core/encryption/Manager.js.map +1 -0
- package/dist/core/encryption/ZipCrypto.d.ts +172 -0
- package/dist/core/encryption/ZipCrypto.d.ts.map +1 -0
- package/dist/core/encryption/ZipCrypto.js +554 -0
- package/dist/core/encryption/ZipCrypto.js.map +1 -0
- package/dist/core/encryption/index.d.ts +9 -0
- package/dist/core/encryption/index.d.ts.map +1 -0
- package/dist/core/encryption/index.js +17 -0
- package/dist/core/encryption/index.js.map +1 -0
- package/dist/core/encryption/types.d.ts +29 -0
- package/dist/core/encryption/types.d.ts.map +1 -0
- package/dist/core/encryption/types.js +12 -0
- package/dist/core/encryption/types.js.map +1 -0
- package/dist/core/index.d.ts +27 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +59 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/version.d.ts +5 -0
- package/dist/core/version.d.ts.map +1 -0
- package/dist/core/version.js +31 -0
- package/dist/core/version.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/node/ZipCompressNode.d.ts +123 -0
- package/dist/node/ZipCompressNode.d.ts.map +1 -0
- package/dist/node/ZipCompressNode.js +565 -0
- package/dist/node/ZipCompressNode.js.map +1 -0
- package/dist/node/ZipCopyNode.d.ts +165 -0
- package/dist/node/ZipCopyNode.d.ts.map +1 -0
- package/dist/node/ZipCopyNode.js +347 -0
- package/dist/node/ZipCopyNode.js.map +1 -0
- package/dist/node/ZipDecompressNode.d.ts +197 -0
- package/dist/node/ZipDecompressNode.d.ts.map +1 -0
- package/dist/node/ZipDecompressNode.js +678 -0
- package/dist/node/ZipDecompressNode.js.map +1 -0
- package/dist/node/ZipkitNode.d.ts +466 -0
- package/dist/node/ZipkitNode.d.ts.map +1 -0
- package/dist/node/ZipkitNode.js +1426 -0
- package/dist/node/ZipkitNode.js.map +1 -0
- package/dist/node/index.d.ts +25 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/index.js +54 -0
- package/dist/node/index.js.map +1 -0
- package/dist/types/index.d.ts +45 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +11 -0
- package/dist/types/index.js.map +1 -0
- package/examples/README.md +261 -0
- package/examples/append-data.json +44 -0
- package/examples/copy-zip-append.ts +139 -0
- package/examples/copy-zip.ts +152 -0
- package/examples/create-zip.ts +172 -0
- package/examples/extract-zip.ts +118 -0
- package/examples/list-zip.ts +161 -0
- package/examples/test-files/data.json +116 -0
- package/examples/test-files/document.md +80 -0
- package/examples/test-files/document.txt +6 -0
- package/examples/test-files/file1.txt +48 -0
- package/examples/test-files/file2.txt +80 -0
- package/examples/tsconfig.json +44 -0
- package/package.json +167 -0
- package/src/browser/ZipkitBrowser.ts +305 -0
- package/src/browser/index.esm.ts +32 -0
- package/src/browser/index.ts +19 -0
- package/src/core/ZipCompress.ts +370 -0
- package/src/core/ZipCopy.ts +434 -0
- package/src/core/ZipDecompress.ts +191 -0
- package/src/core/ZipEntry.ts +917 -0
- package/src/core/Zipkit.ts +794 -0
- package/src/core/ZstdManager.ts +165 -0
- package/src/core/components/HashCalculator.ts +384 -0
- package/src/core/components/Logger.ts +180 -0
- package/src/core/components/ProgressTracker.ts +134 -0
- package/src/core/components/Support.ts +77 -0
- package/src/core/components/Util.ts +91 -0
- package/src/core/constants/Errors.ts +78 -0
- package/src/core/constants/Headers.ts +205 -0
- package/src/core/encryption/Manager.ts +137 -0
- package/src/core/encryption/ZipCrypto.ts +650 -0
- package/src/core/encryption/index.ts +15 -0
- package/src/core/encryption/types.ts +33 -0
- package/src/core/index.ts +42 -0
- package/src/core/version.ts +33 -0
- package/src/index.ts +19 -0
- package/src/node/ZipCompressNode.ts +618 -0
- package/src/node/ZipCopyNode.ts +437 -0
- package/src/node/ZipDecompressNode.ts +793 -0
- package/src/node/ZipkitNode.ts +1706 -0
- package/src/node/index.ts +40 -0
- package/src/types/index.ts +68 -0
- package/src/types/modules.d.ts +22 -0
- package/src/types/opentimestamps.d.ts +1 -0
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// ======================================
|
|
3
|
+
// HashCalculator.ts - Unified Hash Component
|
|
4
|
+
// Combines StreamHashCalculator, HashAccumulator, and MerkleTree functionality
|
|
5
|
+
// ======================================
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.HashCalculator = void 0;
|
|
41
|
+
const crypto = __importStar(require("crypto"));
|
|
42
|
+
const ZipCrypto_1 = require("../encryption/ZipCrypto");
|
|
43
|
+
/**
|
|
44
|
+
* Unified hash calculator supporting:
|
|
45
|
+
* - Incremental CRC-32 and SHA-256 calculation from raw data chunks
|
|
46
|
+
* - Accumulation of pre-computed SHA-256 hashes with XOR and Merkle tree operations
|
|
47
|
+
* - Merkle tree construction, proof generation, and verification
|
|
48
|
+
*
|
|
49
|
+
* Usage examples:
|
|
50
|
+
*
|
|
51
|
+
* Incremental hash calculation:
|
|
52
|
+
* ```typescript
|
|
53
|
+
* const calculator = new HashCalculator({ useSHA256: true });
|
|
54
|
+
* calculator.update(dataChunk);
|
|
55
|
+
* const crc32 = calculator.finalizeCRC32();
|
|
56
|
+
* const sha256 = calculator.finalizeSHA256();
|
|
57
|
+
* ```
|
|
58
|
+
*
|
|
59
|
+
* Hash accumulation:
|
|
60
|
+
* ```typescript
|
|
61
|
+
* const calculator = new HashCalculator({ enableAccumulation: true });
|
|
62
|
+
* calculator.addHash(sha256Hash1);
|
|
63
|
+
* calculator.addHash(sha256Hash2);
|
|
64
|
+
* const xor = calculator.xorHash();
|
|
65
|
+
* const merkle = calculator.merkleRoot();
|
|
66
|
+
* ```
|
|
67
|
+
*/
|
|
68
|
+
class HashCalculator {
|
|
69
|
+
/**
|
|
70
|
+
* Creates a new HashCalculator instance
|
|
71
|
+
* @param options - Configuration options:
|
|
72
|
+
* - useSHA256: Enable SHA-256 calculation for incremental mode (default: false)
|
|
73
|
+
* - enableAccumulation: Enable hash accumulation mode (default: false)
|
|
74
|
+
*/
|
|
75
|
+
constructor(options) {
|
|
76
|
+
// Incremental hash calculation state (from StreamHashCalculator)
|
|
77
|
+
this.crc32State = ~0;
|
|
78
|
+
this.sha256Hash = null;
|
|
79
|
+
this.useSHA256 = false;
|
|
80
|
+
// Hash accumulation state (from HashAccumulator)
|
|
81
|
+
this.hashes = [];
|
|
82
|
+
this.xorResult = Buffer.alloc(32, 0);
|
|
83
|
+
this.enableAccumulation = false;
|
|
84
|
+
// Merkle tree state (from MerkleTree)
|
|
85
|
+
this.merkleLeaves = [];
|
|
86
|
+
this.merkleLayers = [];
|
|
87
|
+
this.merkleOptions = {
|
|
88
|
+
hashLeaves: false,
|
|
89
|
+
sortLeaves: true,
|
|
90
|
+
sortPairs: true,
|
|
91
|
+
duplicateOdd: true
|
|
92
|
+
};
|
|
93
|
+
this.useSHA256 = options?.useSHA256 || false;
|
|
94
|
+
this.enableAccumulation = options?.enableAccumulation || false;
|
|
95
|
+
if (this.useSHA256) {
|
|
96
|
+
this.sha256Hash = crypto.createHash('sha256');
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// ============================================================================
|
|
100
|
+
// Incremental Hash Calculation Methods (from StreamHashCalculator)
|
|
101
|
+
// ============================================================================
|
|
102
|
+
/**
|
|
103
|
+
* Update hash state with a new chunk of data
|
|
104
|
+
* Updates both CRC-32 and SHA-256 (if enabled) incrementally
|
|
105
|
+
* @param chunk - Data chunk to process
|
|
106
|
+
*/
|
|
107
|
+
update(chunk) {
|
|
108
|
+
// Update CRC-32 incrementally using existing crc32update function
|
|
109
|
+
for (let i = 0; i < chunk.length; i++) {
|
|
110
|
+
this.crc32State = (0, ZipCrypto_1.crc32update)(this.crc32State, chunk[i]);
|
|
111
|
+
}
|
|
112
|
+
// Update SHA-256 incrementally
|
|
113
|
+
if (this.sha256Hash) {
|
|
114
|
+
this.sha256Hash.update(chunk);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Get final CRC-32 value
|
|
119
|
+
* @returns Final CRC-32 value as unsigned 32-bit integer
|
|
120
|
+
*/
|
|
121
|
+
finalizeCRC32() {
|
|
122
|
+
return ~this.crc32State >>> 0; // Finalize with ~0 like the existing crc32 function
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Get final SHA-256 hash as hex string
|
|
126
|
+
* @returns SHA-256 hash as hex string, or null if SHA-256 not enabled
|
|
127
|
+
*/
|
|
128
|
+
finalizeSHA256() {
|
|
129
|
+
if (this.sha256Hash) {
|
|
130
|
+
return this.sha256Hash.digest('hex');
|
|
131
|
+
}
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Reset the incremental hash calculation state
|
|
136
|
+
*/
|
|
137
|
+
reset() {
|
|
138
|
+
this.crc32State = ~0;
|
|
139
|
+
if (this.sha256Hash) {
|
|
140
|
+
this.sha256Hash = crypto.createHash('sha256');
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
// ============================================================================
|
|
144
|
+
// Hash Accumulation Methods (from HashAccumulator)
|
|
145
|
+
// ============================================================================
|
|
146
|
+
/**
|
|
147
|
+
* Adds a pre-computed SHA-256 hash to both the XOR accumulation and hash array
|
|
148
|
+
* @param hash - Hash value as hex string or Buffer (must be 32 bytes for SHA-256)
|
|
149
|
+
*/
|
|
150
|
+
addHash(hash) {
|
|
151
|
+
if (!this.enableAccumulation) {
|
|
152
|
+
throw new Error('Hash accumulation not enabled. Set enableAccumulation: true in constructor.');
|
|
153
|
+
}
|
|
154
|
+
// Convert hash to Buffer if it's a string
|
|
155
|
+
const hashBuffer = typeof hash === 'string'
|
|
156
|
+
? Buffer.from(hash, 'hex')
|
|
157
|
+
: hash;
|
|
158
|
+
// Add to array for Merkle tree
|
|
159
|
+
this.hashes.push(hashBuffer);
|
|
160
|
+
this.merkleLeaves.push(hashBuffer);
|
|
161
|
+
// XOR accumulation
|
|
162
|
+
for (let i = 0; i < 32; i++) {
|
|
163
|
+
this.xorResult[i] ^= hashBuffer[i];
|
|
164
|
+
}
|
|
165
|
+
// Rebuild Merkle tree when hash is added
|
|
166
|
+
this.rebuildMerkleTree();
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Gets the accumulated XOR of all added hashes
|
|
170
|
+
* @returns Hex string of XOR result
|
|
171
|
+
*/
|
|
172
|
+
xorHash() {
|
|
173
|
+
if (!this.enableAccumulation) {
|
|
174
|
+
throw new Error('Hash accumulation not enabled. Set enableAccumulation: true in constructor.');
|
|
175
|
+
}
|
|
176
|
+
return this.xorResult.toString('hex');
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Creates a Merkle tree from accumulated hashes and returns the root
|
|
180
|
+
* @returns Hex string of Merkle root, or null if no hashes added
|
|
181
|
+
*/
|
|
182
|
+
merkleRoot() {
|
|
183
|
+
if (!this.enableAccumulation) {
|
|
184
|
+
throw new Error('Hash accumulation not enabled. Set enableAccumulation: true in constructor.');
|
|
185
|
+
}
|
|
186
|
+
if (this.merkleLeaves.length === 0) {
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
// If Merkle tree not built yet, build it
|
|
190
|
+
if (this.merkleLayers.length === 0) {
|
|
191
|
+
this.rebuildMerkleTree();
|
|
192
|
+
}
|
|
193
|
+
const root = this.merkleLayers[this.merkleLayers.length - 1];
|
|
194
|
+
if (root && root.length > 0) {
|
|
195
|
+
return root[0].toString('hex');
|
|
196
|
+
}
|
|
197
|
+
return null;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Gets the number of hashes accumulated
|
|
201
|
+
* @returns Number of accumulated hashes
|
|
202
|
+
*/
|
|
203
|
+
leafCount() {
|
|
204
|
+
if (!this.enableAccumulation) {
|
|
205
|
+
throw new Error('Hash accumulation not enabled. Set enableAccumulation: true in constructor.');
|
|
206
|
+
}
|
|
207
|
+
return this.hashes.length;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Clears the accumulated hashes and resets XOR buffer
|
|
211
|
+
*/
|
|
212
|
+
clear() {
|
|
213
|
+
if (!this.enableAccumulation) {
|
|
214
|
+
throw new Error('Hash accumulation not enabled. Set enableAccumulation: true in constructor.');
|
|
215
|
+
}
|
|
216
|
+
this.hashes = [];
|
|
217
|
+
this.merkleLeaves = [];
|
|
218
|
+
this.merkleLayers = [];
|
|
219
|
+
this.xorResult = Buffer.alloc(32, 0);
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Combines multiple hash results into a single Merkle root
|
|
223
|
+
* Static method for combining results from multiple HashCalculator instances
|
|
224
|
+
* @param results - Array of objects containing merkleRoot properties
|
|
225
|
+
* @returns Combined Merkle root as hex string, or null if no valid roots
|
|
226
|
+
*/
|
|
227
|
+
static combineResults(results) {
|
|
228
|
+
const calculator = new HashCalculator({ enableAccumulation: true });
|
|
229
|
+
// Combine all hashes
|
|
230
|
+
for (const result of results) {
|
|
231
|
+
if (result.merkleRoot) {
|
|
232
|
+
calculator.addHash(result.merkleRoot);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return calculator.merkleRoot();
|
|
236
|
+
}
|
|
237
|
+
// ============================================================================
|
|
238
|
+
// Merkle Tree Methods (from MerkleTree)
|
|
239
|
+
// ============================================================================
|
|
240
|
+
/**
|
|
241
|
+
* Computes SHA-256 hash of input data
|
|
242
|
+
* @param data - Data to hash
|
|
243
|
+
* @returns Buffer containing hash
|
|
244
|
+
*/
|
|
245
|
+
hash(data) {
|
|
246
|
+
return crypto.createHash('sha256').update(data).digest();
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Combines two child hashes to create parent hash
|
|
250
|
+
* @param left - Left child hash
|
|
251
|
+
* @param right - Right child hash
|
|
252
|
+
* @returns Combined hash of children
|
|
253
|
+
*/
|
|
254
|
+
combinedHash(left, right) {
|
|
255
|
+
if (this.merkleOptions.sortPairs && Buffer.compare(left, right) > 0) {
|
|
256
|
+
[left, right] = [right, left];
|
|
257
|
+
}
|
|
258
|
+
return this.hash(Buffer.concat([left, right]));
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Builds the Merkle tree by creating successive layers of hashes
|
|
262
|
+
* @param nodes - Array of nodes in current layer
|
|
263
|
+
*/
|
|
264
|
+
createHashes(nodes) {
|
|
265
|
+
while (nodes.length > 1) {
|
|
266
|
+
const layerIndex = this.merkleLayers.length;
|
|
267
|
+
this.merkleLayers.push([]);
|
|
268
|
+
// Process pairs of nodes
|
|
269
|
+
for (let i = 0; i < nodes.length - 1; i += 2) {
|
|
270
|
+
const left = nodes[i];
|
|
271
|
+
const right = nodes[i + 1];
|
|
272
|
+
const hash = this.combinedHash(left, right);
|
|
273
|
+
this.merkleLayers[layerIndex].push(hash);
|
|
274
|
+
}
|
|
275
|
+
// Handle odd number of nodes
|
|
276
|
+
if (nodes.length % 2 === 1) {
|
|
277
|
+
const last = nodes[nodes.length - 1];
|
|
278
|
+
if (this.merkleOptions.duplicateOdd) {
|
|
279
|
+
// Duplicate the last node if odd
|
|
280
|
+
const hash = this.combinedHash(last, last);
|
|
281
|
+
this.merkleLayers[layerIndex].push(hash);
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
// Push last node up to next layer
|
|
285
|
+
this.merkleLayers[layerIndex].push(last);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
nodes = this.merkleLayers[layerIndex];
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
/**
|
|
292
|
+
* Rebuilds the Merkle tree from current leaves
|
|
293
|
+
*/
|
|
294
|
+
rebuildMerkleTree() {
|
|
295
|
+
if (this.merkleLeaves.length === 0) {
|
|
296
|
+
this.merkleLayers = [];
|
|
297
|
+
return;
|
|
298
|
+
}
|
|
299
|
+
// Process leaves according to options
|
|
300
|
+
const processedLeaves = this.merkleLeaves.map(leaf => {
|
|
301
|
+
if (this.merkleOptions.hashLeaves) {
|
|
302
|
+
return this.hash(leaf);
|
|
303
|
+
}
|
|
304
|
+
return Buffer.isBuffer(leaf) ? leaf : Buffer.from(leaf);
|
|
305
|
+
});
|
|
306
|
+
if (this.merkleOptions.sortLeaves) {
|
|
307
|
+
processedLeaves.sort(Buffer.compare);
|
|
308
|
+
}
|
|
309
|
+
this.merkleLayers = [processedLeaves];
|
|
310
|
+
this.createHashes(processedLeaves);
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Generates a proof of inclusion for a leaf node
|
|
314
|
+
* @param leaf - The leaf node to generate proof for
|
|
315
|
+
* @returns Array of sibling hashes needed to reconstruct root
|
|
316
|
+
* @throws Error if leaf not found in tree or accumulation not enabled
|
|
317
|
+
*/
|
|
318
|
+
getProof(leaf) {
|
|
319
|
+
if (!this.enableAccumulation) {
|
|
320
|
+
throw new Error('Hash accumulation not enabled. Set enableAccumulation: true in constructor.');
|
|
321
|
+
}
|
|
322
|
+
if (this.merkleLayers.length === 0) {
|
|
323
|
+
this.rebuildMerkleTree();
|
|
324
|
+
}
|
|
325
|
+
let index = this.merkleLeaves.findIndex(item => item.equals(leaf));
|
|
326
|
+
if (index === -1) {
|
|
327
|
+
throw new Error('Leaf not found in tree');
|
|
328
|
+
}
|
|
329
|
+
return this.merkleLayers.reduce((proof, layer) => {
|
|
330
|
+
if (layer.length === 1)
|
|
331
|
+
return proof;
|
|
332
|
+
const pairIndex = index % 2 === 0 ? index + 1 : index - 1;
|
|
333
|
+
if (pairIndex < layer.length) {
|
|
334
|
+
proof.push(layer[pairIndex]);
|
|
335
|
+
}
|
|
336
|
+
index = Math.floor(index / 2);
|
|
337
|
+
return proof;
|
|
338
|
+
}, []);
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Verifies a proof of inclusion for a leaf node
|
|
342
|
+
* @param proof - Array of sibling hashes from getProof()
|
|
343
|
+
* @param targetHash - Hash of the leaf node being verified
|
|
344
|
+
* @param root - Expected root hash
|
|
345
|
+
* @returns boolean indicating if proof is valid
|
|
346
|
+
*/
|
|
347
|
+
verify(proof, targetHash, root) {
|
|
348
|
+
let computedHash = targetHash;
|
|
349
|
+
for (const proofElement of proof) {
|
|
350
|
+
computedHash = Buffer.compare(computedHash, proofElement) <= 0
|
|
351
|
+
? this.combinedHash(computedHash, proofElement)
|
|
352
|
+
: this.combinedHash(proofElement, computedHash);
|
|
353
|
+
}
|
|
354
|
+
return computedHash.equals(root);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
exports.HashCalculator = HashCalculator;
|
|
358
|
+
// Default export
|
|
359
|
+
exports.default = HashCalculator;
|
|
360
|
+
//# sourceMappingURL=HashCalculator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HashCalculator.js","sourceRoot":"","sources":["../../../src/core/components/HashCalculator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global Logger Utility for NeoZipKit
|
|
3
|
+
* Provides centralized console control with configurable log levels
|
|
4
|
+
*/
|
|
5
|
+
export type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'silent';
|
|
6
|
+
export interface LoggerConfig {
|
|
7
|
+
enabled: boolean;
|
|
8
|
+
level: LogLevel;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Global Logger class for controlling console output throughout NeoZipKit
|
|
12
|
+
*/
|
|
13
|
+
export declare class Logger {
|
|
14
|
+
private static config;
|
|
15
|
+
private static originalConsole;
|
|
16
|
+
/**
|
|
17
|
+
* Configure the logger
|
|
18
|
+
*/
|
|
19
|
+
static configure(config: Partial<LoggerConfig>): void;
|
|
20
|
+
/**
|
|
21
|
+
* Get current logger configuration
|
|
22
|
+
*/
|
|
23
|
+
static getConfig(): LoggerConfig;
|
|
24
|
+
/**
|
|
25
|
+
* Enable logging
|
|
26
|
+
*/
|
|
27
|
+
static enable(): void;
|
|
28
|
+
/**
|
|
29
|
+
* Disable all logging
|
|
30
|
+
*/
|
|
31
|
+
static disable(): void;
|
|
32
|
+
/**
|
|
33
|
+
* Set log level
|
|
34
|
+
*/
|
|
35
|
+
static setLevel(level: LogLevel): void;
|
|
36
|
+
/**
|
|
37
|
+
* Check if a log level should be output
|
|
38
|
+
*/
|
|
39
|
+
private static shouldLog;
|
|
40
|
+
/**
|
|
41
|
+
* Log a message
|
|
42
|
+
*/
|
|
43
|
+
static log(...args: any[]): void;
|
|
44
|
+
/**
|
|
45
|
+
* Log an error message
|
|
46
|
+
*/
|
|
47
|
+
static error(...args: any[]): void;
|
|
48
|
+
/**
|
|
49
|
+
* Log a warning message
|
|
50
|
+
*/
|
|
51
|
+
static warn(...args: any[]): void;
|
|
52
|
+
/**
|
|
53
|
+
* Log a debug message
|
|
54
|
+
*/
|
|
55
|
+
static debug(...args: any[]): void;
|
|
56
|
+
/**
|
|
57
|
+
* Log an info message
|
|
58
|
+
*/
|
|
59
|
+
static info(...args: any[]): void;
|
|
60
|
+
/**
|
|
61
|
+
* Override console methods globally (use with caution)
|
|
62
|
+
*/
|
|
63
|
+
static overrideConsole(): void;
|
|
64
|
+
/**
|
|
65
|
+
* Restore original console methods
|
|
66
|
+
*/
|
|
67
|
+
static restoreConsole(): void;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Environment-based configuration
|
|
71
|
+
*/
|
|
72
|
+
export declare function configureLoggerFromEnvironment(): void;
|
|
73
|
+
//# sourceMappingURL=Logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Logger.d.ts","sourceRoot":"","sources":["../../../src/core/components/Logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEtE,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,QAAQ,CAAC;CACjB;AAED;;GAEG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAC,MAAM,CAGnB;IAEF,OAAO,CAAC,MAAM,CAAC,eAAe,CAM5B;IAEF;;OAEG;IACH,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,GAAG,IAAI;IAIrD;;OAEG;IACH,MAAM,CAAC,SAAS,IAAI,YAAY;IAIhC;;OAEG;IACH,MAAM,CAAC,MAAM,IAAI,IAAI;IAIrB;;OAEG;IACH,MAAM,CAAC,OAAO,IAAI,IAAI;IAItB;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,IAAI;IAKtC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,SAAS;IAUxB;;OAEG;IACH,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAMhC;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAMlC;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAMjC;;OAEG;IACH,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAOlC;;OAEG;IACH,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,IAAI;IAOjC;;OAEG;IACH,MAAM,CAAC,eAAe,IAAI,IAAI;IAQ9B;;OAEG;IACH,MAAM,CAAC,cAAc,IAAI,IAAI;CAQ9B;AAED;;GAEG;AACH,wBAAgB,8BAA8B,IAAI,IAAI,CAuBrD"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Global Logger Utility for NeoZipKit
|
|
4
|
+
* Provides centralized console control with configurable log levels
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.Logger = void 0;
|
|
8
|
+
exports.configureLoggerFromEnvironment = configureLoggerFromEnvironment;
|
|
9
|
+
/**
|
|
10
|
+
* Global Logger class for controlling console output throughout NeoZipKit
|
|
11
|
+
*/
|
|
12
|
+
class Logger {
|
|
13
|
+
/**
|
|
14
|
+
* Configure the logger
|
|
15
|
+
*/
|
|
16
|
+
static configure(config) {
|
|
17
|
+
this.config = { ...this.config, ...config };
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Get current logger configuration
|
|
21
|
+
*/
|
|
22
|
+
static getConfig() {
|
|
23
|
+
return { ...this.config };
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Enable logging
|
|
27
|
+
*/
|
|
28
|
+
static enable() {
|
|
29
|
+
this.config.enabled = true;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Disable all logging
|
|
33
|
+
*/
|
|
34
|
+
static disable() {
|
|
35
|
+
this.config.enabled = false;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Set log level
|
|
39
|
+
*/
|
|
40
|
+
static setLevel(level) {
|
|
41
|
+
this.config.level = level;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Check if a log level should be output
|
|
45
|
+
*/
|
|
46
|
+
static shouldLog(level) {
|
|
47
|
+
if (!this.config.enabled)
|
|
48
|
+
return false;
|
|
49
|
+
const levels = ['debug', 'info', 'warn', 'error', 'silent'];
|
|
50
|
+
const currentLevelIndex = levels.indexOf(this.config.level);
|
|
51
|
+
const requestedLevelIndex = levels.indexOf(level);
|
|
52
|
+
return requestedLevelIndex >= currentLevelIndex;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Log a message
|
|
56
|
+
*/
|
|
57
|
+
static log(...args) {
|
|
58
|
+
if (this.shouldLog('info')) {
|
|
59
|
+
this.originalConsole.log(...args);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Log an error message
|
|
64
|
+
*/
|
|
65
|
+
static error(...args) {
|
|
66
|
+
if (this.shouldLog('error')) {
|
|
67
|
+
this.originalConsole.error(...args);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Log a warning message
|
|
72
|
+
*/
|
|
73
|
+
static warn(...args) {
|
|
74
|
+
if (this.shouldLog('warn')) {
|
|
75
|
+
this.originalConsole.warn(...args);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Log a debug message
|
|
80
|
+
*/
|
|
81
|
+
static debug(...args) {
|
|
82
|
+
if (this.shouldLog('debug')) {
|
|
83
|
+
// Use console.log for debug messages to ensure they're visible
|
|
84
|
+
this.originalConsole.log(...args);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Log an info message
|
|
89
|
+
*/
|
|
90
|
+
static info(...args) {
|
|
91
|
+
if (this.shouldLog('info')) {
|
|
92
|
+
this.originalConsole.info(...args);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Override console methods globally (use with caution)
|
|
97
|
+
*/
|
|
98
|
+
static overrideConsole() {
|
|
99
|
+
console.log = (...args) => this.log(...args);
|
|
100
|
+
console.error = (...args) => this.error(...args);
|
|
101
|
+
console.warn = (...args) => this.warn(...args);
|
|
102
|
+
console.debug = (...args) => this.debug(...args);
|
|
103
|
+
console.info = (...args) => this.info(...args);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Restore original console methods
|
|
107
|
+
*/
|
|
108
|
+
static restoreConsole() {
|
|
109
|
+
console.log = this.originalConsole.log;
|
|
110
|
+
console.error = this.originalConsole.error;
|
|
111
|
+
console.warn = this.originalConsole.warn;
|
|
112
|
+
console.debug = this.originalConsole.debug;
|
|
113
|
+
console.info = this.originalConsole.info;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
exports.Logger = Logger;
|
|
117
|
+
Logger.config = {
|
|
118
|
+
enabled: true,
|
|
119
|
+
level: 'info'
|
|
120
|
+
};
|
|
121
|
+
Logger.originalConsole = {
|
|
122
|
+
log: console.log,
|
|
123
|
+
error: console.error,
|
|
124
|
+
warn: console.warn,
|
|
125
|
+
debug: console.debug,
|
|
126
|
+
info: console.info
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* Environment-based configuration
|
|
130
|
+
*/
|
|
131
|
+
function configureLoggerFromEnvironment() {
|
|
132
|
+
const env = typeof process !== 'undefined' ? process.env : {};
|
|
133
|
+
// Check for NEOZIP_DEBUG environment variable
|
|
134
|
+
if (env.NEOZIP_DEBUG === 'false') {
|
|
135
|
+
Logger.disable();
|
|
136
|
+
}
|
|
137
|
+
else if (env.NEOZIP_DEBUG === 'true') {
|
|
138
|
+
Logger.enable();
|
|
139
|
+
Logger.setLevel('debug');
|
|
140
|
+
}
|
|
141
|
+
// Check for NEOZIP_LOG_LEVEL
|
|
142
|
+
if (env.NEOZIP_LOG_LEVEL) {
|
|
143
|
+
const level = env.NEOZIP_LOG_LEVEL;
|
|
144
|
+
if (['debug', 'info', 'warn', 'error', 'silent'].includes(level)) {
|
|
145
|
+
Logger.setLevel(level);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
// Check for NODE_ENV
|
|
149
|
+
if (env.NODE_ENV === 'production') {
|
|
150
|
+
Logger.setLevel('error');
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// Auto-configure from environment on import
|
|
154
|
+
// Only run in Node.js environment
|
|
155
|
+
configureLoggerFromEnvironment();
|
|
156
|
+
//# sourceMappingURL=Logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Logger.js","sourceRoot":"","sources":["../../../src/core/components/Logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Progress tracker for streaming operations
|
|
3
|
+
* Provides real-time progress updates and ETA calculations
|
|
4
|
+
*/
|
|
5
|
+
export declare class ProgressTracker {
|
|
6
|
+
private startTime;
|
|
7
|
+
private lastUpdateTime;
|
|
8
|
+
private totalBytes;
|
|
9
|
+
private processedBytes;
|
|
10
|
+
private fileName;
|
|
11
|
+
private lastReportedPercent;
|
|
12
|
+
constructor(fileName: string, totalBytes: number);
|
|
13
|
+
/**
|
|
14
|
+
* Update progress with bytes processed
|
|
15
|
+
* @param bytesProcessed - Number of bytes processed in this update
|
|
16
|
+
*/
|
|
17
|
+
update(bytesProcessed: number): void;
|
|
18
|
+
/**
|
|
19
|
+
* Set total bytes (useful when file size changes)
|
|
20
|
+
*/
|
|
21
|
+
setTotalBytes(totalBytes: number): void;
|
|
22
|
+
/**
|
|
23
|
+
* Report progress if enough time has passed or significant progress made
|
|
24
|
+
*/
|
|
25
|
+
private reportProgress;
|
|
26
|
+
/**
|
|
27
|
+
* Print progress information
|
|
28
|
+
*/
|
|
29
|
+
private printProgress;
|
|
30
|
+
/**
|
|
31
|
+
* Complete progress tracking
|
|
32
|
+
*/
|
|
33
|
+
complete(): void;
|
|
34
|
+
/**
|
|
35
|
+
* Get current progress percentage
|
|
36
|
+
*/
|
|
37
|
+
getProgressPercent(): number;
|
|
38
|
+
/**
|
|
39
|
+
* Get processing rate in bytes per second
|
|
40
|
+
*/
|
|
41
|
+
getProcessingRate(): number;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=ProgressTracker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProgressTracker.d.ts","sourceRoot":"","sources":["../../../src/core/components/ProgressTracker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,mBAAmB,CAAc;gBAE7B,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAQhD;;;OAGG;IACH,MAAM,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI;IAKpC;;OAEG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAIvC;;OAEG;IACH,OAAO,CAAC,cAAc;IAkBtB;;OAEG;IACH,OAAO,CAAC,aAAa;IAiCrB;;OAEG;IACH,QAAQ,IAAI,IAAI;IAuBhB;;OAEG;IACH,kBAAkB,IAAI,MAAM;IAI5B;;OAEG;IACH,iBAAiB,IAAI,MAAM;CAI5B"}
|