@totemsdk/core 1.2.5 → 1.2.7
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/MiniNumber.js +19 -21
- package/dist/Streamable.js +31 -54
- package/dist/adapters/index.js +9 -18
- package/dist/adapters/types.js +11 -19
- package/dist/binio.js +7 -20
- package/dist/bip39.js +14 -24
- package/dist/canonical.d.ts +3 -0
- package/dist/canonical.js +22 -0
- package/dist/cjs/MiniNumber.d.ts +47 -0
- package/dist/cjs/MiniNumber.js +302 -0
- package/dist/cjs/Streamable.d.ts +268 -0
- package/dist/cjs/Streamable.js +439 -0
- package/dist/cjs/adapters/index.d.ts +190 -0
- package/dist/cjs/adapters/index.js +118 -0
- package/dist/cjs/adapters/types.d.ts +150 -0
- package/dist/cjs/adapters/types.js +81 -0
- package/dist/cjs/binio.d.ts +9 -0
- package/dist/cjs/binio.js +25 -0
- package/dist/cjs/bip39.d.ts +91 -0
- package/dist/cjs/bip39.js +434 -0
- package/dist/cjs/canonical.d.ts +3 -0
- package/dist/cjs/canonical.js +27 -0
- package/dist/cjs/derive.d.ts +2 -0
- package/dist/cjs/derive.js +13 -0
- package/dist/cjs/index.d.ts +49 -0
- package/dist/cjs/index.js +231 -0
- package/dist/cjs/javaStreamables.d.ts +254 -0
- package/dist/cjs/javaStreamables.js +391 -0
- package/dist/cjs/lease/LeaseMonitor.d.ts +44 -0
- package/dist/cjs/lease/LeaseMonitor.js +115 -0
- package/dist/cjs/lease/LeaseStore.d.ts +58 -0
- package/dist/cjs/lease/LeaseStore.js +151 -0
- package/dist/cjs/lease/WatermarkStore.d.ts +61 -0
- package/dist/cjs/lease/WatermarkStore.js +209 -0
- package/dist/cjs/lease/index.d.ts +14 -0
- package/dist/cjs/lease/index.js +22 -0
- package/dist/cjs/lease-client.d.ts +31 -0
- package/dist/cjs/lease-client.js +44 -0
- package/dist/cjs/legacy.d.ts +23 -0
- package/dist/cjs/legacy.js +163 -0
- package/dist/cjs/minima32.d.ts +18 -0
- package/dist/cjs/minima32.js +121 -0
- package/dist/cjs/minimaWireSerializer.d.ts +60 -0
- package/dist/cjs/minimaWireSerializer.js +77 -0
- package/dist/cjs/mmr.d.ts +157 -0
- package/dist/cjs/mmr.js +352 -0
- package/dist/cjs/mx.d.ts +1 -0
- package/dist/cjs/mx.js +10 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/params.d.ts +29 -0
- package/dist/cjs/params.js +20 -0
- package/dist/cjs/script.d.ts +7 -0
- package/dist/cjs/script.js +27 -0
- package/dist/cjs/scripts/contract-helpers.d.ts +252 -0
- package/dist/cjs/scripts/contract-helpers.js +407 -0
- package/dist/cjs/scripts/dapp-types.d.ts +119 -0
- package/dist/cjs/scripts/dapp-types.js +77 -0
- package/dist/cjs/scripts/index.d.ts +4 -0
- package/dist/cjs/scripts/index.js +38 -0
- package/dist/cjs/scripts/types.d.ts +81 -0
- package/dist/cjs/scripts/types.js +159 -0
- package/dist/cjs/scripts/witness-serializer.d.ts +29 -0
- package/dist/cjs/scripts/witness-serializer.js +306 -0
- package/dist/cjs/transaction.d.ts +106 -0
- package/dist/cjs/transaction.js +293 -0
- package/dist/cjs/treekey.d.ts +399 -0
- package/dist/cjs/treekey.js +827 -0
- package/dist/cjs/tx/TransactionLifecycle.d.ts +55 -0
- package/dist/cjs/tx/TransactionLifecycle.js +205 -0
- package/dist/cjs/tx/TransactionReceiptStore.d.ts +36 -0
- package/dist/cjs/tx/TransactionReceiptStore.js +93 -0
- package/dist/cjs/tx/TransactionService.d.ts +50 -0
- package/dist/cjs/tx/TransactionService.js +186 -0
- package/dist/cjs/tx/index.d.ts +13 -0
- package/dist/cjs/tx/index.js +20 -0
- package/dist/cjs/tx/types.d.ts +115 -0
- package/dist/cjs/tx/types.js +6 -0
- package/dist/cjs/util.d.ts +1 -0
- package/dist/cjs/util.js +5 -0
- package/dist/cjs/utils.d.ts +8 -0
- package/dist/cjs/utils.js +42 -0
- package/dist/cjs/verify.d.ts +18 -0
- package/dist/cjs/verify.js +174 -0
- package/dist/cjs/version.d.ts +12 -0
- package/dist/cjs/version.js +15 -0
- package/dist/cjs/wasm-sync.d.ts +71 -0
- package/dist/cjs/wasm-sync.js +97 -0
- package/dist/cjs/wots.d.ts +232 -0
- package/dist/cjs/wots.js +589 -0
- package/dist/derive.js +7 -11
- package/dist/index.d.ts +8 -2
- package/dist/index.js +50 -143
- package/dist/javaStreamables.js +34 -55
- package/dist/lease/LeaseMonitor.js +10 -10
- package/dist/lease/LeaseStore.js +8 -9
- package/dist/lease/WatermarkStore.js +8 -9
- package/dist/lease/index.js +4 -13
- package/dist/lease-client.js +3 -8
- package/dist/legacy.js +13 -140
- package/dist/minima32.js +13 -22
- package/dist/minimaWireSerializer.js +14 -20
- package/dist/mmr.js +27 -41
- package/dist/mx.js +1 -10
- package/dist/params.js +5 -9
- package/dist/script.js +7 -12
- package/dist/scripts/contract-helpers.js +25 -36
- package/dist/scripts/dapp-types.js +6 -11
- package/dist/scripts/index.js +4 -38
- package/dist/scripts/types.js +12 -26
- package/dist/scripts/witness-serializer.js +30 -48
- package/dist/transaction.js +46 -55
- package/dist/treekey.js +96 -89
- package/dist/tx/TransactionLifecycle.js +15 -11
- package/dist/tx/TransactionReceiptStore.js +9 -9
- package/dist/tx/TransactionService.js +14 -14
- package/dist/tx/index.js +3 -11
- package/dist/tx/types.js +1 -2
- package/dist/util.js +1 -5
- package/dist/utils.js +5 -12
- package/dist/verify.js +25 -36
- package/dist/version.js +2 -5
- package/dist/wasm-sync.d.ts +2 -2
- package/dist/wasm-sync.js +58 -61
- package/dist/wots.js +64 -94
- package/package.json +84 -45
- package/dist/wasm-bridge.d.ts +0 -54
- package/dist/wasm-bridge.js +0 -303
package/dist/MiniNumber.js
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
// Matching Java's `org.minima.objects.base.MiniNumber` backed by `BigDecimal`
|
|
3
2
|
// with MathContext(64, RoundingMode.DOWN).
|
|
4
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
|
-
exports.MiniNumber = void 0;
|
|
6
3
|
const MAX_DIGITS = 64;
|
|
7
4
|
const MAX_DECIMAL_PLACES = MAX_DIGITS - 20;
|
|
8
5
|
const MAX_VALUE_BIG = (1n << 64n) - 1n; // 2^64 - 1
|
|
@@ -48,7 +45,25 @@ function roundToDigits(unscaled, scale, digits_target) {
|
|
|
48
45
|
}
|
|
49
46
|
return { unscaled: u, scale: s };
|
|
50
47
|
}
|
|
51
|
-
class MiniNumber {
|
|
48
|
+
export class MiniNumber {
|
|
49
|
+
unscaled;
|
|
50
|
+
scale;
|
|
51
|
+
static ZERO = new MiniNumber(0);
|
|
52
|
+
static ONE = new MiniNumber(1);
|
|
53
|
+
static TWO = new MiniNumber(2);
|
|
54
|
+
static THREE = new MiniNumber(3);
|
|
55
|
+
static FOUR = new MiniNumber(4);
|
|
56
|
+
static EIGHT = new MiniNumber(8);
|
|
57
|
+
static TWELVE = new MiniNumber(12);
|
|
58
|
+
static SIXTEEN = new MiniNumber(16);
|
|
59
|
+
static TWENTY = new MiniNumber(20);
|
|
60
|
+
static THIRTYTWO = new MiniNumber(32);
|
|
61
|
+
static FIFTY = new MiniNumber(50);
|
|
62
|
+
static SIXTYFOUR = new MiniNumber(64);
|
|
63
|
+
static TWOFIVESIX = new MiniNumber(256);
|
|
64
|
+
static FIVEONE12 = new MiniNumber(512);
|
|
65
|
+
static THOUSAND24 = new MiniNumber(1024);
|
|
66
|
+
static MINUSONE = new MiniNumber(-1);
|
|
52
67
|
constructor(value) {
|
|
53
68
|
if (value instanceof MiniNumber) {
|
|
54
69
|
this.unscaled = value.unscaled;
|
|
@@ -255,23 +270,6 @@ class MiniNumber {
|
|
|
255
270
|
return this.scale;
|
|
256
271
|
}
|
|
257
272
|
}
|
|
258
|
-
exports.MiniNumber = MiniNumber;
|
|
259
|
-
MiniNumber.ZERO = new MiniNumber(0);
|
|
260
|
-
MiniNumber.ONE = new MiniNumber(1);
|
|
261
|
-
MiniNumber.TWO = new MiniNumber(2);
|
|
262
|
-
MiniNumber.THREE = new MiniNumber(3);
|
|
263
|
-
MiniNumber.FOUR = new MiniNumber(4);
|
|
264
|
-
MiniNumber.EIGHT = new MiniNumber(8);
|
|
265
|
-
MiniNumber.TWELVE = new MiniNumber(12);
|
|
266
|
-
MiniNumber.SIXTEEN = new MiniNumber(16);
|
|
267
|
-
MiniNumber.TWENTY = new MiniNumber(20);
|
|
268
|
-
MiniNumber.THIRTYTWO = new MiniNumber(32);
|
|
269
|
-
MiniNumber.FIFTY = new MiniNumber(50);
|
|
270
|
-
MiniNumber.SIXTYFOUR = new MiniNumber(64);
|
|
271
|
-
MiniNumber.TWOFIVESIX = new MiniNumber(256);
|
|
272
|
-
MiniNumber.FIVEONE12 = new MiniNumber(512);
|
|
273
|
-
MiniNumber.THOUSAND24 = new MiniNumber(1024);
|
|
274
|
-
MiniNumber.MINUSONE = new MiniNumber(-1);
|
|
275
273
|
function parseDecimal(s) {
|
|
276
274
|
s = s.trim();
|
|
277
275
|
const ePos = s.toLowerCase().indexOf('e');
|
package/dist/Streamable.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* Streamable.ts - Canonical Java-Compatible Serialization Primitives
|
|
4
3
|
*
|
|
@@ -21,29 +20,7 @@
|
|
|
21
20
|
* Created: 2026-01-20
|
|
22
21
|
* Purpose: Single source of truth for all Minima type serialization
|
|
23
22
|
*/
|
|
24
|
-
|
|
25
|
-
exports.encodeMiniString = exports.encodeMiniData = exports.encodeMiniNumber = exports.STATETYPE_BOOL = exports.STATETYPE_STRING = exports.STATETYPE_NUMBER = exports.STATETYPE_HEX = void 0;
|
|
26
|
-
exports.hexToBytes = hexToBytes;
|
|
27
|
-
exports.bytesToHex = bytesToHex;
|
|
28
|
-
exports.concat = concat;
|
|
29
|
-
exports.writeMiniByte = writeMiniByte;
|
|
30
|
-
exports.writeMiniData = writeMiniData;
|
|
31
|
-
exports.writeMiniString = writeMiniString;
|
|
32
|
-
exports.bigIntToByteArray = bigIntToByteArray;
|
|
33
|
-
exports.writeMiniNumber = writeMiniNumber;
|
|
34
|
-
exports.writeHashToStream = writeHashToStream;
|
|
35
|
-
exports.writeMMREntryNumber = writeMMREntryNumber;
|
|
36
|
-
exports.normalizeHexString = normalizeHexString;
|
|
37
|
-
exports.writeStateVariable = writeStateVariable;
|
|
38
|
-
exports.writeMMRData = writeMMRData;
|
|
39
|
-
exports.writeMMRProofChunk = writeMMRProofChunk;
|
|
40
|
-
exports.writeMMRProof = writeMMRProof;
|
|
41
|
-
exports.writeSignatureProof = writeSignatureProof;
|
|
42
|
-
exports.writeSignature = writeSignature;
|
|
43
|
-
exports.writeWitness = writeWitness;
|
|
44
|
-
exports.writeHierarchicalWitness = writeHierarchicalWitness;
|
|
45
|
-
exports.writeHierarchicalWitnessToHex = writeHierarchicalWitnessToHex;
|
|
46
|
-
function hexToBytes(hex) {
|
|
23
|
+
export function hexToBytes(hex) {
|
|
47
24
|
const cleanHex = hex.startsWith('0x') ? hex.slice(2) : hex;
|
|
48
25
|
if (cleanHex.length === 0) {
|
|
49
26
|
return new Uint8Array(0);
|
|
@@ -57,10 +34,10 @@ function hexToBytes(hex) {
|
|
|
57
34
|
}
|
|
58
35
|
return bytes;
|
|
59
36
|
}
|
|
60
|
-
function bytesToHex(bytes) {
|
|
37
|
+
export function bytesToHex(bytes) {
|
|
61
38
|
return '0x' + Array.from(bytes).map(b => b.toString(16).padStart(2, '0')).join('');
|
|
62
39
|
}
|
|
63
|
-
function concat(...arrays) {
|
|
40
|
+
export function concat(...arrays) {
|
|
64
41
|
const totalLength = arrays.reduce((sum, arr) => sum + arr.length, 0);
|
|
65
42
|
const result = new Uint8Array(totalLength);
|
|
66
43
|
let offset = 0;
|
|
@@ -75,7 +52,7 @@ function concat(...arrays) {
|
|
|
75
52
|
*
|
|
76
53
|
* Format: single byte (0-255)
|
|
77
54
|
*/
|
|
78
|
-
function writeMiniByte(value) {
|
|
55
|
+
export function writeMiniByte(value) {
|
|
79
56
|
if (typeof value === 'boolean') {
|
|
80
57
|
return new Uint8Array([value ? 1 : 0]);
|
|
81
58
|
}
|
|
@@ -89,7 +66,7 @@ function writeMiniByte(value) {
|
|
|
89
66
|
*
|
|
90
67
|
* Format: 4-byte big-endian int length + raw bytes
|
|
91
68
|
*/
|
|
92
|
-
function writeMiniData(data) {
|
|
69
|
+
export function writeMiniData(data) {
|
|
93
70
|
const length = data.length;
|
|
94
71
|
const lengthBytes = new Uint8Array([
|
|
95
72
|
(length >> 24) & 0xff,
|
|
@@ -105,7 +82,7 @@ function writeMiniData(data) {
|
|
|
105
82
|
* Format: MiniData encoding of UTF-8 bytes
|
|
106
83
|
* = 4-byte int length + UTF-8 bytes
|
|
107
84
|
*/
|
|
108
|
-
function writeMiniString(str) {
|
|
85
|
+
export function writeMiniString(str) {
|
|
109
86
|
const utf8Bytes = new TextEncoder().encode(str);
|
|
110
87
|
return writeMiniData(utf8Bytes);
|
|
111
88
|
}
|
|
@@ -119,7 +96,7 @@ function writeMiniString(str) {
|
|
|
119
96
|
* @param value - The BigInt value (must be non-negative)
|
|
120
97
|
* @returns Uint8Array in two's complement format
|
|
121
98
|
*/
|
|
122
|
-
function bigIntToByteArray(value) {
|
|
99
|
+
export function bigIntToByteArray(value) {
|
|
123
100
|
if (value < 0n) {
|
|
124
101
|
throw new Error(`bigIntToByteArray does not support negative values: ${value}`);
|
|
125
102
|
}
|
|
@@ -152,7 +129,7 @@ function bigIntToByteArray(value) {
|
|
|
152
129
|
* @param value - The unscaled BigInt value
|
|
153
130
|
* @param scale - The scale (decimal places), default 0
|
|
154
131
|
*/
|
|
155
|
-
function writeMiniNumber(value, scale = 0) {
|
|
132
|
+
export function writeMiniNumber(value, scale = 0) {
|
|
156
133
|
if (typeof value !== 'bigint') {
|
|
157
134
|
throw new Error(`writeMiniNumber requires bigint, got ${typeof value}`);
|
|
158
135
|
}
|
|
@@ -176,7 +153,7 @@ function writeMiniNumber(value, scale = 0) {
|
|
|
176
153
|
* Format: 4-byte big-endian int length + hash bytes
|
|
177
154
|
* (Same as MiniData)
|
|
178
155
|
*/
|
|
179
|
-
function writeHashToStream(hash) {
|
|
156
|
+
export function writeHashToStream(hash) {
|
|
180
157
|
return writeMiniData(hash);
|
|
181
158
|
}
|
|
182
159
|
/**
|
|
@@ -194,7 +171,7 @@ function writeHashToStream(hash) {
|
|
|
194
171
|
* [00 01 00] - MiniNumber: scale=0, len=1, data=0x00
|
|
195
172
|
* [00 00 00 LL ...] - MiniData: 4-byte len + BigInteger bytes
|
|
196
173
|
*/
|
|
197
|
-
function writeMMREntryNumber(value, scale = 0) {
|
|
174
|
+
export function writeMMREntryNumber(value, scale = 0) {
|
|
198
175
|
if (value < 0n) {
|
|
199
176
|
throw new Error(`writeMMREntryNumber does not support negative values: ${value}`);
|
|
200
177
|
}
|
|
@@ -208,10 +185,10 @@ function writeMMREntryNumber(value, scale = 0) {
|
|
|
208
185
|
/**
|
|
209
186
|
* StateVariable type constants from Java StateVariable.java
|
|
210
187
|
*/
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
188
|
+
export const STATETYPE_HEX = 1;
|
|
189
|
+
export const STATETYPE_NUMBER = 2;
|
|
190
|
+
export const STATETYPE_STRING = 4;
|
|
191
|
+
export const STATETYPE_BOOL = 8;
|
|
215
192
|
/**
|
|
216
193
|
* Normalize hex/address string to 0x format.
|
|
217
194
|
* Handles both Mx (Minima Base32) and 0x formats.
|
|
@@ -220,7 +197,7 @@ exports.STATETYPE_BOOL = 8;
|
|
|
220
197
|
* Note: For Mx conversion, caller should use mxToHex from minima-base32
|
|
221
198
|
* This function handles 0x prefix normalization only.
|
|
222
199
|
*/
|
|
223
|
-
function normalizeHexString(value) {
|
|
200
|
+
export function normalizeHexString(value) {
|
|
224
201
|
if (!value) {
|
|
225
202
|
return '0x00';
|
|
226
203
|
}
|
|
@@ -242,7 +219,7 @@ function normalizeHexString(value) {
|
|
|
242
219
|
* @param sv - StateVariable with high-level value
|
|
243
220
|
* @param mxToHex - Optional function to convert Mx addresses to 0x hex
|
|
244
221
|
*/
|
|
245
|
-
function writeStateVariable(sv, mxToHex) {
|
|
222
|
+
export function writeStateVariable(sv, mxToHex) {
|
|
246
223
|
if (sv.port < 0 || sv.port > 255) {
|
|
247
224
|
throw new Error(`StateVariable port must be 0-255, got ${sv.port}`);
|
|
248
225
|
}
|
|
@@ -251,7 +228,7 @@ function writeStateVariable(sv, mxToHex) {
|
|
|
251
228
|
let dataBytes;
|
|
252
229
|
switch (sv.type) {
|
|
253
230
|
case 'bool':
|
|
254
|
-
typeByte = writeMiniByte(
|
|
231
|
+
typeByte = writeMiniByte(STATETYPE_BOOL);
|
|
255
232
|
if (typeof sv.value === 'boolean') {
|
|
256
233
|
dataBytes = writeMiniByte(sv.value);
|
|
257
234
|
}
|
|
@@ -263,7 +240,7 @@ function writeStateVariable(sv, mxToHex) {
|
|
|
263
240
|
}
|
|
264
241
|
break;
|
|
265
242
|
case 'number':
|
|
266
|
-
typeByte = writeMiniByte(
|
|
243
|
+
typeByte = writeMiniByte(STATETYPE_NUMBER);
|
|
267
244
|
if (typeof sv.value === 'bigint') {
|
|
268
245
|
dataBytes = writeMiniNumber(sv.value);
|
|
269
246
|
}
|
|
@@ -275,7 +252,7 @@ function writeStateVariable(sv, mxToHex) {
|
|
|
275
252
|
}
|
|
276
253
|
break;
|
|
277
254
|
case 'hex':
|
|
278
|
-
typeByte = writeMiniByte(
|
|
255
|
+
typeByte = writeMiniByte(STATETYPE_HEX);
|
|
279
256
|
if (typeof sv.value === 'string') {
|
|
280
257
|
let normalizedHex = sv.value;
|
|
281
258
|
if (sv.value.toLowerCase().startsWith('mx') && mxToHex) {
|
|
@@ -294,7 +271,7 @@ function writeStateVariable(sv, mxToHex) {
|
|
|
294
271
|
}
|
|
295
272
|
break;
|
|
296
273
|
case 'string':
|
|
297
|
-
typeByte = writeMiniByte(
|
|
274
|
+
typeByte = writeMiniByte(STATETYPE_STRING);
|
|
298
275
|
if (typeof sv.value === 'string') {
|
|
299
276
|
let bracketedValue = sv.value;
|
|
300
277
|
if (!sv.value.startsWith('[') || !sv.value.endsWith(']')) {
|
|
@@ -318,7 +295,7 @@ function writeStateVariable(sv, mxToHex) {
|
|
|
318
295
|
* mData.writeHashToStream(zOut); // 4-byte len + hash
|
|
319
296
|
* mValue.writeDataStream(zOut); // MiniNumber
|
|
320
297
|
*/
|
|
321
|
-
function writeMMRData(mmrData) {
|
|
298
|
+
export function writeMMRData(mmrData) {
|
|
322
299
|
const hashBytes = writeHashToStream(mmrData.data);
|
|
323
300
|
const valueBytes = writeMiniNumber(mmrData.value, 0);
|
|
324
301
|
return concat(hashBytes, valueBytes);
|
|
@@ -330,7 +307,7 @@ function writeMMRData(mmrData) {
|
|
|
330
307
|
* mLeft.writeDataStream(zOut); // MiniByte (1 byte)
|
|
331
308
|
* mMMRData.writeDataStream(zOut); // MMRData
|
|
332
309
|
*/
|
|
333
|
-
function writeMMRProofChunk(chunk) {
|
|
310
|
+
export function writeMMRProofChunk(chunk) {
|
|
334
311
|
const leftByte = writeMiniByte(chunk.isLeft);
|
|
335
312
|
const dataBytes = writeMMRData(chunk.mmrData);
|
|
336
313
|
return concat(leftByte, dataBytes);
|
|
@@ -343,7 +320,7 @@ function writeMMRProofChunk(chunk) {
|
|
|
343
320
|
* MiniNumber.WriteToStream(zOut, len); // Array length as MiniNumber
|
|
344
321
|
* for each chunk: chunk.writeDataStream(zOut);
|
|
345
322
|
*/
|
|
346
|
-
function writeMMRProof(proof) {
|
|
323
|
+
export function writeMMRProof(proof) {
|
|
347
324
|
const blockTimeBytes = writeMiniNumber(proof.blockTime, 0);
|
|
348
325
|
const lengthBytes = writeMiniNumber(BigInt(proof.chunks.length), 0);
|
|
349
326
|
const parts = [blockTimeBytes, lengthBytes];
|
|
@@ -360,7 +337,7 @@ function writeMMRProof(proof) {
|
|
|
360
337
|
* mSignature.writeDataStream(zOut); // MiniData
|
|
361
338
|
* mProof.writeDataStream(zOut); // MMRProof
|
|
362
339
|
*/
|
|
363
|
-
function writeSignatureProof(sigProof) {
|
|
340
|
+
export function writeSignatureProof(sigProof) {
|
|
364
341
|
const pubKeyBytes = writeMiniData(sigProof.leafPubkey);
|
|
365
342
|
const sigBytes = writeMiniData(sigProof.signature);
|
|
366
343
|
const proofBytes = writeMMRProof(sigProof.mmrProof);
|
|
@@ -373,7 +350,7 @@ function writeSignatureProof(sigProof) {
|
|
|
373
350
|
* MiniNumber.WriteToStream(zOut, mSignatures.size());
|
|
374
351
|
* for each sig: sig.writeDataStream(zOut);
|
|
375
352
|
*/
|
|
376
|
-
function writeSignature(sig) {
|
|
353
|
+
export function writeSignature(sig) {
|
|
377
354
|
const lengthBytes = writeMiniNumber(BigInt(sig.proofs.length), 0);
|
|
378
355
|
const parts = [lengthBytes];
|
|
379
356
|
for (const proof of sig.proofs) {
|
|
@@ -392,7 +369,7 @@ function writeSignature(sig) {
|
|
|
392
369
|
* MiniNumber.WriteToStream(zOut, mScriptProofs.size());
|
|
393
370
|
* for each sp: sp.writeDataStream(zOut);
|
|
394
371
|
*/
|
|
395
|
-
function writeWitness(witness) {
|
|
372
|
+
export function writeWitness(witness) {
|
|
396
373
|
const parts = [];
|
|
397
374
|
// Signatures
|
|
398
375
|
parts.push(writeMiniNumber(BigInt(witness.signatures.length), 0));
|
|
@@ -415,7 +392,7 @@ function writeWitness(witness) {
|
|
|
415
392
|
* Write a simplified hierarchical witness (signatures only)
|
|
416
393
|
* Used for WOTS transaction signing flow
|
|
417
394
|
*/
|
|
418
|
-
function writeHierarchicalWitness(bundle) {
|
|
395
|
+
export function writeHierarchicalWitness(bundle) {
|
|
419
396
|
const lengthBytes = writeMiniNumber(BigInt(bundle.signatures.length), 0);
|
|
420
397
|
const parts = [lengthBytes];
|
|
421
398
|
for (const sig of bundle.signatures) {
|
|
@@ -426,7 +403,7 @@ function writeHierarchicalWitness(bundle) {
|
|
|
426
403
|
/**
|
|
427
404
|
* Write hierarchical witness and return as hex string
|
|
428
405
|
*/
|
|
429
|
-
function writeHierarchicalWitnessToHex(bundle) {
|
|
406
|
+
export function writeHierarchicalWitnessToHex(bundle) {
|
|
430
407
|
return bytesToHex(writeHierarchicalWitness(bundle));
|
|
431
408
|
}
|
|
432
409
|
// ============================================================
|
|
@@ -434,6 +411,6 @@ function writeHierarchicalWitnessToHex(bundle) {
|
|
|
434
411
|
// ============================================================
|
|
435
412
|
// The extension's WitnessSerializer uses encode* naming, while SDK uses write* naming.
|
|
436
413
|
// These aliases provide compatibility with extension code.
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
414
|
+
export const encodeMiniNumber = writeMiniNumber;
|
|
415
|
+
export const encodeMiniData = writeMiniData;
|
|
416
|
+
export const encodeMiniString = writeMiniString;
|
package/dist/adapters/index.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* @module @totemsdk/core/adapters
|
|
4
3
|
* Platform-agnostic adapter interfaces for SDK portability
|
|
@@ -10,17 +9,13 @@
|
|
|
10
9
|
*
|
|
11
10
|
* Each platform provides its own implementation of these adapters.
|
|
12
11
|
*/
|
|
13
|
-
|
|
14
|
-
exports.NoopLifecycleAdapter = exports.DefaultTimerAdapter = exports.NoopMetrics = exports.ConsoleLogger = exports.NoopLogger = exports.WebSocketReadyState = void 0;
|
|
15
|
-
exports.createCancellationToken = createCancellationToken;
|
|
16
|
-
exports.createAdapterRegistry = createAdapterRegistry;
|
|
17
|
-
exports.WebSocketReadyState = {
|
|
12
|
+
export const WebSocketReadyState = {
|
|
18
13
|
CONNECTING: 0,
|
|
19
14
|
OPEN: 1,
|
|
20
15
|
CLOSING: 2,
|
|
21
16
|
CLOSED: 3,
|
|
22
17
|
};
|
|
23
|
-
function createCancellationToken() {
|
|
18
|
+
export function createCancellationToken() {
|
|
24
19
|
let cancelled = false;
|
|
25
20
|
const callbacks = new Set();
|
|
26
21
|
const token = {
|
|
@@ -45,7 +40,7 @@ function createCancellationToken() {
|
|
|
45
40
|
}
|
|
46
41
|
};
|
|
47
42
|
}
|
|
48
|
-
function createAdapterRegistry(adapters) {
|
|
43
|
+
export function createAdapterRegistry(adapters) {
|
|
49
44
|
const required = [
|
|
50
45
|
'storage', 'auth', 'websocket', 'http', 'config', 'logger', 'timer', 'crypto'
|
|
51
46
|
];
|
|
@@ -56,14 +51,14 @@ function createAdapterRegistry(adapters) {
|
|
|
56
51
|
}
|
|
57
52
|
return adapters;
|
|
58
53
|
}
|
|
59
|
-
class NoopLogger {
|
|
54
|
+
export class NoopLogger {
|
|
60
55
|
debug(_message, ..._args) { }
|
|
61
56
|
info(_message, ..._args) { }
|
|
62
57
|
warn(_message, ..._args) { }
|
|
63
58
|
error(_message, ..._args) { }
|
|
64
59
|
}
|
|
65
|
-
|
|
66
|
-
|
|
60
|
+
export class ConsoleLogger {
|
|
61
|
+
prefix;
|
|
67
62
|
constructor(prefix = '[SDK]') {
|
|
68
63
|
this.prefix = prefix;
|
|
69
64
|
}
|
|
@@ -80,15 +75,13 @@ class ConsoleLogger {
|
|
|
80
75
|
console.error(`${this.prefix} ${message}`, ...args);
|
|
81
76
|
}
|
|
82
77
|
}
|
|
83
|
-
|
|
84
|
-
class NoopMetrics {
|
|
78
|
+
export class NoopMetrics {
|
|
85
79
|
increment(_name, _value, _tags) { }
|
|
86
80
|
gauge(_name, _value, _tags) { }
|
|
87
81
|
timing(_name, _durationMs, _tags) { }
|
|
88
82
|
histogram(_name, _value, _tags) { }
|
|
89
83
|
}
|
|
90
|
-
|
|
91
|
-
class DefaultTimerAdapter {
|
|
84
|
+
export class DefaultTimerAdapter {
|
|
92
85
|
setTimeout(callback, ms) {
|
|
93
86
|
return setTimeout(callback, ms);
|
|
94
87
|
}
|
|
@@ -105,8 +98,7 @@ class DefaultTimerAdapter {
|
|
|
105
98
|
return Date.now();
|
|
106
99
|
}
|
|
107
100
|
}
|
|
108
|
-
|
|
109
|
-
class NoopLifecycleAdapter {
|
|
101
|
+
export class NoopLifecycleAdapter {
|
|
110
102
|
onSuspend(_callback) {
|
|
111
103
|
return () => { };
|
|
112
104
|
}
|
|
@@ -114,4 +106,3 @@ class NoopLifecycleAdapter {
|
|
|
114
106
|
return () => { };
|
|
115
107
|
}
|
|
116
108
|
}
|
|
117
|
-
exports.NoopLifecycleAdapter = NoopLifecycleAdapter;
|
package/dist/adapters/types.js
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* @module @totemsdk/core/adapters/types
|
|
4
3
|
* Shared type definitions for SDK modules
|
|
5
4
|
*/
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class SdkError extends Error {
|
|
5
|
+
export class SdkError extends Error {
|
|
6
|
+
code;
|
|
7
|
+
cause;
|
|
10
8
|
constructor(message, code, cause) {
|
|
11
9
|
super(message);
|
|
12
10
|
this.code = code;
|
|
@@ -14,51 +12,45 @@ class SdkError extends Error {
|
|
|
14
12
|
this.name = 'SdkError';
|
|
15
13
|
}
|
|
16
14
|
}
|
|
17
|
-
|
|
18
|
-
class StorageError extends SdkError {
|
|
15
|
+
export class StorageError extends SdkError {
|
|
19
16
|
constructor(message, cause) {
|
|
20
17
|
super(message, 'STORAGE_ERROR', cause);
|
|
21
18
|
this.name = 'StorageError';
|
|
22
19
|
}
|
|
23
20
|
}
|
|
24
|
-
|
|
25
|
-
class NetworkError extends SdkError {
|
|
21
|
+
export class NetworkError extends SdkError {
|
|
26
22
|
constructor(message, cause) {
|
|
27
23
|
super(message, 'NETWORK_ERROR', cause);
|
|
28
24
|
this.name = 'NetworkError';
|
|
29
25
|
}
|
|
30
26
|
}
|
|
31
|
-
|
|
32
|
-
class AuthenticationError extends SdkError {
|
|
27
|
+
export class AuthenticationError extends SdkError {
|
|
33
28
|
constructor(message, cause) {
|
|
34
29
|
super(message, 'AUTH_ERROR', cause);
|
|
35
30
|
this.name = 'AuthenticationError';
|
|
36
31
|
}
|
|
37
32
|
}
|
|
38
|
-
|
|
39
|
-
class LeaseError extends SdkError {
|
|
33
|
+
export class LeaseError extends SdkError {
|
|
40
34
|
constructor(message, cause) {
|
|
41
35
|
super(message, 'LEASE_ERROR', cause);
|
|
42
36
|
this.name = 'LeaseError';
|
|
43
37
|
}
|
|
44
38
|
}
|
|
45
|
-
|
|
46
|
-
class TransactionError extends SdkError {
|
|
39
|
+
export class TransactionError extends SdkError {
|
|
47
40
|
constructor(message, cause) {
|
|
48
41
|
super(message, 'TRANSACTION_ERROR', cause);
|
|
49
42
|
this.name = 'TransactionError';
|
|
50
43
|
}
|
|
51
44
|
}
|
|
52
|
-
|
|
53
|
-
|
|
45
|
+
export class QuotaExceededError extends SdkError {
|
|
46
|
+
quotaInfo;
|
|
54
47
|
constructor(message, quotaInfo, cause) {
|
|
55
48
|
super(message, 'QUOTA_EXCEEDED', cause);
|
|
56
49
|
this.quotaInfo = quotaInfo;
|
|
57
50
|
this.name = 'QuotaExceededError';
|
|
58
51
|
}
|
|
59
52
|
}
|
|
60
|
-
|
|
61
|
-
function createEventEmitter() {
|
|
53
|
+
export function createEventEmitter() {
|
|
62
54
|
const listeners = new Map();
|
|
63
55
|
return {
|
|
64
56
|
on(event, listener) {
|
package/dist/binio.js
CHANGED
|
@@ -1,21 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
};
|
|
7
|
-
var _BinWriter_buf;
|
|
8
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
-
exports.BinWriter = void 0;
|
|
10
|
-
class BinWriter {
|
|
11
|
-
constructor() {
|
|
12
|
-
_BinWriter_buf.set(this, []);
|
|
13
|
-
}
|
|
14
|
-
get bytes() { return new Uint8Array(__classPrivateFieldGet(this, _BinWriter_buf, "f")); }
|
|
15
|
-
writeU8(n) { __classPrivateFieldGet(this, _BinWriter_buf, "f").push(n & 0xff); }
|
|
16
|
-
writeU16(n) { __classPrivateFieldGet(this, _BinWriter_buf, "f").push((n >>> 8) & 0xff, n & 0xff); } // big-endian
|
|
1
|
+
export class BinWriter {
|
|
2
|
+
#buf = [];
|
|
3
|
+
get bytes() { return new Uint8Array(this.#buf); }
|
|
4
|
+
writeU8(n) { this.#buf.push(n & 0xff); }
|
|
5
|
+
writeU16(n) { this.#buf.push((n >>> 8) & 0xff, n & 0xff); } // big-endian
|
|
17
6
|
writeU32(n) {
|
|
18
|
-
|
|
7
|
+
this.#buf.push((n >>> 24) & 0xff, (n >>> 16) & 0xff, (n >>> 8) & 0xff, n & 0xff);
|
|
19
8
|
}
|
|
20
9
|
writeU64(bi) {
|
|
21
10
|
// big-endian 8 bytes
|
|
@@ -28,7 +17,5 @@ class BinWriter {
|
|
|
28
17
|
this.writeBytes(out);
|
|
29
18
|
}
|
|
30
19
|
writeBytes(b) { for (const x of b)
|
|
31
|
-
|
|
20
|
+
this.#buf.push(x); }
|
|
32
21
|
}
|
|
33
|
-
exports.BinWriter = BinWriter;
|
|
34
|
-
_BinWriter_buf = new WeakMap();
|
package/dist/bip39.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
/**
|
|
3
2
|
* Minima-Compatible BIP39 Seed Phrase Handling
|
|
4
3
|
*
|
|
@@ -12,21 +11,12 @@
|
|
|
12
11
|
* - cleanSeedPhrase(): Normalizes input with prefix matching
|
|
13
12
|
* - convertStringToSeed(): Hashes phrase bytes with SHA3-256
|
|
14
13
|
*/
|
|
15
|
-
|
|
16
|
-
exports.WORD_LIST = void 0;
|
|
17
|
-
exports.cleanSeedPhrase = cleanSeedPhrase;
|
|
18
|
-
exports.validatePhrase = validatePhrase;
|
|
19
|
-
exports.convertStringToSeed = convertStringToSeed;
|
|
20
|
-
exports.convertWordListToSeed = convertWordListToSeed;
|
|
21
|
-
exports.phraseToSeed = phraseToSeed;
|
|
22
|
-
exports.generateWordList = generateWordList;
|
|
23
|
-
exports.generateSeedPhrase = generateSeedPhrase;
|
|
24
|
-
const wasm_sync_js_1 = require("./wasm-sync.js");
|
|
14
|
+
import { sha3_256 } from './wasm-sync.js';
|
|
25
15
|
/**
|
|
26
16
|
* Official BIP39 English word list (2048 words)
|
|
27
17
|
* From https://github.com/bitcoin/bips/blob/master/bip-0039/english.txt
|
|
28
18
|
*/
|
|
29
|
-
|
|
19
|
+
export const WORD_LIST = [
|
|
30
20
|
"abandon", "ability", "able", "about", "above", "absent", "absorb", "abstract",
|
|
31
21
|
"absurd", "abuse", "access", "accident", "account", "accuse", "achieve", "acid",
|
|
32
22
|
"acoustic", "acquire", "across", "act", "action", "actor", "actress", "actual",
|
|
@@ -298,7 +288,7 @@ exports.WORD_LIST = [
|
|
|
298
288
|
* @returns Canonical uppercase phrase with full words from BIP39 list
|
|
299
289
|
* @throws Error if any word cannot be matched
|
|
300
290
|
*/
|
|
301
|
-
function cleanSeedPhrase(seedPhrase) {
|
|
291
|
+
export function cleanSeedPhrase(seedPhrase) {
|
|
302
292
|
const tokens = seedPhrase.trim().split(/\s+/);
|
|
303
293
|
const matchedWords = [];
|
|
304
294
|
for (const rawToken of tokens) {
|
|
@@ -308,7 +298,7 @@ function cleanSeedPhrase(seedPhrase) {
|
|
|
308
298
|
}
|
|
309
299
|
let found = false;
|
|
310
300
|
if (token.length < 4) {
|
|
311
|
-
for (const word of
|
|
301
|
+
for (const word of WORD_LIST) {
|
|
312
302
|
if (token === word) {
|
|
313
303
|
matchedWords.push(word);
|
|
314
304
|
found = true;
|
|
@@ -317,7 +307,7 @@ function cleanSeedPhrase(seedPhrase) {
|
|
|
317
307
|
}
|
|
318
308
|
}
|
|
319
309
|
else {
|
|
320
|
-
for (const word of
|
|
310
|
+
for (const word of WORD_LIST) {
|
|
321
311
|
if (word.startsWith(token)) {
|
|
322
312
|
matchedWords.push(word);
|
|
323
313
|
found = true;
|
|
@@ -338,7 +328,7 @@ function cleanSeedPhrase(seedPhrase) {
|
|
|
338
328
|
* @param phrase - Space-separated words (any case)
|
|
339
329
|
* @returns true if all words are valid BIP39 words
|
|
340
330
|
*/
|
|
341
|
-
function validatePhrase(phrase) {
|
|
331
|
+
export function validatePhrase(phrase) {
|
|
342
332
|
try {
|
|
343
333
|
cleanSeedPhrase(phrase);
|
|
344
334
|
return true;
|
|
@@ -361,10 +351,10 @@ function validatePhrase(phrase) {
|
|
|
361
351
|
* @param phrase - Canonical phrase (should be cleaned first with cleanSeedPhrase)
|
|
362
352
|
* @returns 32-byte SHA3-256 seed
|
|
363
353
|
*/
|
|
364
|
-
function convertStringToSeed(phrase) {
|
|
354
|
+
export function convertStringToSeed(phrase) {
|
|
365
355
|
const encoder = new TextEncoder();
|
|
366
356
|
const phraseBytes = encoder.encode(phrase);
|
|
367
|
-
return
|
|
357
|
+
return sha3_256(phraseBytes);
|
|
368
358
|
}
|
|
369
359
|
/**
|
|
370
360
|
* Convert word array to seed matching Minima's BIP39.convertWordListToSeed()
|
|
@@ -377,7 +367,7 @@ function convertStringToSeed(phrase) {
|
|
|
377
367
|
* @param words - Array of BIP39 words
|
|
378
368
|
* @returns 32-byte SHA3-256 seed
|
|
379
369
|
*/
|
|
380
|
-
function convertWordListToSeed(words) {
|
|
370
|
+
export function convertWordListToSeed(words) {
|
|
381
371
|
const phrase = words.join(' ').trim();
|
|
382
372
|
return convertStringToSeed(phrase);
|
|
383
373
|
}
|
|
@@ -391,7 +381,7 @@ function convertWordListToSeed(words) {
|
|
|
391
381
|
* @returns 32-byte seed for TreeKey
|
|
392
382
|
* @throws Error if phrase contains invalid words
|
|
393
383
|
*/
|
|
394
|
-
function phraseToSeed(rawPhrase) {
|
|
384
|
+
export function phraseToSeed(rawPhrase) {
|
|
395
385
|
const canonical = cleanSeedPhrase(rawPhrase);
|
|
396
386
|
return convertStringToSeed(canonical);
|
|
397
387
|
}
|
|
@@ -401,7 +391,7 @@ function phraseToSeed(rawPhrase) {
|
|
|
401
391
|
*
|
|
402
392
|
* @returns Array of 24 random BIP39 words (lowercase)
|
|
403
393
|
*/
|
|
404
|
-
function generateWordList() {
|
|
394
|
+
export function generateWordList() {
|
|
405
395
|
const randomValues = new Uint32Array(24);
|
|
406
396
|
if (typeof crypto !== 'undefined' && crypto.getRandomValues) {
|
|
407
397
|
crypto.getRandomValues(randomValues);
|
|
@@ -420,8 +410,8 @@ function generateWordList() {
|
|
|
420
410
|
}
|
|
421
411
|
const words = [];
|
|
422
412
|
for (let i = 0; i < 24; i++) {
|
|
423
|
-
const index = randomValues[i] %
|
|
424
|
-
words.push(
|
|
413
|
+
const index = randomValues[i] % WORD_LIST.length;
|
|
414
|
+
words.push(WORD_LIST[index]);
|
|
425
415
|
}
|
|
426
416
|
return words;
|
|
427
417
|
}
|
|
@@ -429,6 +419,6 @@ function generateWordList() {
|
|
|
429
419
|
* Generate a new random seed phrase as a string
|
|
430
420
|
* @returns 24-word phrase in UPPERCASE (canonical form)
|
|
431
421
|
*/
|
|
432
|
-
function generateSeedPhrase() {
|
|
422
|
+
export function generateSeedPhrase() {
|
|
433
423
|
return generateWordList().join(' ').toUpperCase();
|
|
434
424
|
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { sha3_256 } from './wasm-sync.js';
|
|
2
|
+
export function toHex(bytes) {
|
|
3
|
+
return Array.from(bytes)
|
|
4
|
+
.map((b) => b.toString(16).padStart(2, '0'))
|
|
5
|
+
.join('');
|
|
6
|
+
}
|
|
7
|
+
export function canonicalJson(value) {
|
|
8
|
+
if (value === null || typeof value !== 'object') {
|
|
9
|
+
return JSON.stringify(value);
|
|
10
|
+
}
|
|
11
|
+
if (Array.isArray(value)) {
|
|
12
|
+
return '[' + value.map(canonicalJson).join(',') + ']';
|
|
13
|
+
}
|
|
14
|
+
const obj = value;
|
|
15
|
+
const keys = Object.keys(obj).sort();
|
|
16
|
+
const pairs = keys.map((k) => `${JSON.stringify(k)}:${canonicalJson(obj[k])}`);
|
|
17
|
+
return '{' + pairs.join(',') + '}';
|
|
18
|
+
}
|
|
19
|
+
export function hashCanonical(domain, value) {
|
|
20
|
+
const input = domain + canonicalJson(value);
|
|
21
|
+
return toHex(sha3_256(new TextEncoder().encode(input)));
|
|
22
|
+
}
|