@beclab/olaresid 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/CLI.md +1300 -0
  2. package/README.md +37 -31
  3. package/TAG.md +589 -0
  4. package/dist/abi/RootResolver2ABI.d.ts +54 -0
  5. package/dist/abi/RootResolver2ABI.d.ts.map +1 -0
  6. package/dist/abi/RootResolver2ABI.js +240 -0
  7. package/dist/abi/RootResolver2ABI.js.map +1 -0
  8. package/dist/business/index.d.ts +302 -0
  9. package/dist/business/index.d.ts.map +1 -0
  10. package/dist/business/index.js +1209 -0
  11. package/dist/business/index.js.map +1 -0
  12. package/dist/business/tag-context.d.ts +219 -0
  13. package/dist/business/tag-context.d.ts.map +1 -0
  14. package/dist/business/tag-context.js +537 -0
  15. package/dist/business/tag-context.js.map +1 -0
  16. package/dist/cli.js +2085 -39
  17. package/dist/cli.js.map +1 -1
  18. package/dist/debug.d.ts.map +1 -1
  19. package/dist/debug.js +14 -2
  20. package/dist/debug.js.map +1 -1
  21. package/dist/index.d.ts +50 -2
  22. package/dist/index.d.ts.map +1 -1
  23. package/dist/index.js +229 -9
  24. package/dist/index.js.map +1 -1
  25. package/dist/utils/crypto-utils.d.ts +130 -0
  26. package/dist/utils/crypto-utils.d.ts.map +1 -0
  27. package/dist/utils/crypto-utils.js +402 -0
  28. package/dist/utils/crypto-utils.js.map +1 -0
  29. package/dist/utils/error-parser.d.ts +35 -0
  30. package/dist/utils/error-parser.d.ts.map +1 -0
  31. package/dist/utils/error-parser.js +202 -0
  32. package/dist/utils/error-parser.js.map +1 -0
  33. package/dist/utils/tag-abi-codec.d.ts +69 -0
  34. package/dist/utils/tag-abi-codec.d.ts.map +1 -0
  35. package/dist/utils/tag-abi-codec.js +144 -0
  36. package/dist/utils/tag-abi-codec.js.map +1 -0
  37. package/dist/utils/tag-type-builder.d.ts +158 -0
  38. package/dist/utils/tag-type-builder.d.ts.map +1 -0
  39. package/dist/utils/tag-type-builder.js +410 -0
  40. package/dist/utils/tag-type-builder.js.map +1 -0
  41. package/examples/crypto-utilities.ts +140 -0
  42. package/examples/domain-context.ts +80 -0
  43. package/examples/generate-mnemonic.ts +149 -0
  44. package/examples/index.ts +1 -1
  45. package/examples/ip.ts +171 -0
  46. package/examples/legacy.ts +10 -10
  47. package/examples/list-wallets.ts +81 -0
  48. package/examples/quasar-demo/.eslintrc.js +23 -0
  49. package/examples/quasar-demo/.quasar/app.js +43 -0
  50. package/examples/quasar-demo/.quasar/client-entry.js +38 -0
  51. package/examples/quasar-demo/.quasar/client-prefetch.js +130 -0
  52. package/examples/quasar-demo/.quasar/quasar-user-options.js +16 -0
  53. package/examples/quasar-demo/README.md +49 -0
  54. package/examples/quasar-demo/index.html +11 -0
  55. package/examples/quasar-demo/package-lock.json +6407 -0
  56. package/examples/quasar-demo/package.json +36 -0
  57. package/examples/quasar-demo/quasar.config.js +73 -0
  58. package/examples/quasar-demo/src/App.vue +13 -0
  59. package/examples/quasar-demo/src/css/app.scss +1 -0
  60. package/examples/quasar-demo/src/layouts/MainLayout.vue +21 -0
  61. package/examples/quasar-demo/src/pages/IndexPage.vue +905 -0
  62. package/examples/quasar-demo/src/router/index.ts +25 -0
  63. package/examples/quasar-demo/src/router/routes.ts +11 -0
  64. package/examples/quasar-demo/tsconfig.json +28 -0
  65. package/examples/register-subdomain.ts +152 -0
  66. package/examples/rsa-keypair.ts +148 -0
  67. package/examples/tag-builder.ts +235 -0
  68. package/examples/tag-management.ts +534 -0
  69. package/examples/tag-nested-tuple.ts +190 -0
  70. package/examples/tag-simple.ts +149 -0
  71. package/examples/tag-tagger.ts +217 -0
  72. package/examples/test-nested-tuple-conversion.ts +143 -0
  73. package/examples/test-type-bytes-parser.ts +70 -0
  74. package/examples/transfer-domain.ts +197 -0
  75. package/examples/wallet-management.ts +196 -0
  76. package/package.json +24 -15
  77. package/src/abi/RootResolver2ABI.ts +237 -0
  78. package/src/business/index.ts +1490 -0
  79. package/src/business/tag-context.ts +713 -0
  80. package/src/cli.ts +2755 -39
  81. package/src/debug.ts +17 -2
  82. package/src/index.ts +300 -14
  83. package/src/utils/crypto-utils.ts +459 -0
  84. package/src/utils/error-parser.ts +225 -0
  85. package/src/utils/tag-abi-codec.ts +158 -0
  86. package/src/utils/tag-type-builder.ts +469 -0
  87. package/tsconfig.json +1 -1
@@ -0,0 +1,410 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TupleTypeBuilder = exports.TagTypeBuilder = void 0;
4
+ /**
5
+ * Tag Type Builder
6
+ * Calculate ABI type bytes offline without contract calls
7
+ * Does NOT handle encoding/decoding - use TagAbiCodec for that
8
+ *
9
+ * Encoding Rules:
10
+ * - uint: 0x01 + size (size = bits/8)
11
+ * - int: 0x00 + size
12
+ * - bool: 0x02
13
+ * - string: 0x03
14
+ * - array: 0x04 + elementType
15
+ * - fixedArray: 0x05 + length (2 bytes) + elementType
16
+ * - tuple: 0x06 + fieldCount (2 bytes) + fieldTypes...
17
+ * - address: 0x07
18
+ * - fixedBytes: 0x08 + size
19
+ * - bytes: 0x09
20
+ */
21
+ class TagTypeBuilder {
22
+ constructor(typeBytes, abiTypeString = '') {
23
+ this.typeBytes = '';
24
+ this.abiTypeString = '';
25
+ this.typeBytes = typeBytes;
26
+ this.abiTypeString = abiTypeString;
27
+ }
28
+ /**
29
+ * Get ABI type bytes (without 0x prefix)
30
+ */
31
+ getTypeBytes() {
32
+ return this.typeBytes;
33
+ }
34
+ /**
35
+ * Get ABI type string (e.g., "string", "uint256", "tuple(string,uint8)")
36
+ */
37
+ getAbiTypeString() {
38
+ return this.abiTypeString;
39
+ }
40
+ /**
41
+ * Parse type bytes to ABI type string
42
+ * This is the reverse operation of building type bytes
43
+ * @param typeBytes Hex string of type bytes (with or without 0x prefix)
44
+ * @returns ABI type string
45
+ */
46
+ static parseTypeBytesToAbiString(typeBytes) {
47
+ // Remove 0x prefix if present
48
+ const bytes = typeBytes.startsWith('0x')
49
+ ? typeBytes.slice(2)
50
+ : typeBytes;
51
+ if (bytes.length === 0) {
52
+ throw new Error('Empty type bytes');
53
+ }
54
+ const typeFlag = parseInt(bytes.slice(0, 2), 16);
55
+ switch (typeFlag) {
56
+ case 0x00: {
57
+ // int
58
+ const size = parseInt(bytes.slice(2, 4), 16);
59
+ return `int${size * 8}`;
60
+ }
61
+ case 0x01: {
62
+ // uint
63
+ const size = parseInt(bytes.slice(2, 4), 16);
64
+ return `uint${size * 8}`;
65
+ }
66
+ case 0x02: {
67
+ // bool
68
+ return 'bool';
69
+ }
70
+ case 0x03: {
71
+ // string
72
+ return 'string';
73
+ }
74
+ case 0x04: {
75
+ // array
76
+ const elementTypeBytes = '0x' + bytes.slice(2);
77
+ const elementType = this.parseTypeBytesToAbiString(elementTypeBytes);
78
+ return `${elementType}[]`;
79
+ }
80
+ case 0x05: {
81
+ // fixedArray
82
+ const length = parseInt(bytes.slice(2, 6), 16);
83
+ const elementTypeBytes = '0x' + bytes.slice(6);
84
+ const elementType = this.parseTypeBytesToAbiString(elementTypeBytes);
85
+ return `${elementType}[${length}]`;
86
+ }
87
+ case 0x06: {
88
+ // tuple
89
+ const fieldCount = parseInt(bytes.slice(2, 6), 16);
90
+ let offset = 6;
91
+ const fieldTypes = [];
92
+ for (let i = 0; i < fieldCount; i++) {
93
+ // Parse each field's type recursively
94
+ const fieldTypeBytes = '0x' + bytes.slice(offset);
95
+ const fieldType = this.parseTypeBytesToAbiString(fieldTypeBytes);
96
+ fieldTypes.push(fieldType);
97
+ // Calculate the length of this field's type bytes
98
+ const fieldTypeBytesLength = this.getTypeBytesLength(fieldTypeBytes);
99
+ offset += fieldTypeBytesLength;
100
+ }
101
+ return `tuple(${fieldTypes.join(',')})`;
102
+ }
103
+ case 0x07: {
104
+ // address
105
+ return 'address';
106
+ }
107
+ case 0x08: {
108
+ // fixedBytes
109
+ const size = parseInt(bytes.slice(2, 4), 16);
110
+ return `bytes${size}`;
111
+ }
112
+ case 0x09: {
113
+ // bytes
114
+ return 'bytes';
115
+ }
116
+ default:
117
+ throw new Error(`Unknown type flag: 0x${typeFlag.toString(16)}`);
118
+ }
119
+ }
120
+ /**
121
+ * Calculate the byte length of a type bytes string (without 0x prefix)
122
+ * @private
123
+ */
124
+ static getTypeBytesLength(typeBytes) {
125
+ const bytes = typeBytes.startsWith('0x')
126
+ ? typeBytes.slice(2)
127
+ : typeBytes;
128
+ const typeFlag = parseInt(bytes.slice(0, 2), 16);
129
+ switch (typeFlag) {
130
+ case 0x00: // int
131
+ case 0x01: // uint
132
+ case 0x08: // fixedBytes
133
+ return 4; // 1 byte flag + 1 byte size
134
+ case 0x02: // bool
135
+ case 0x03: // string
136
+ case 0x07: // address
137
+ case 0x09: // bytes
138
+ return 2; // 1 byte flag only
139
+ case 0x04: {
140
+ // array
141
+ const elementTypeBytes = '0x' + bytes.slice(2);
142
+ return 2 + this.getTypeBytesLength(elementTypeBytes);
143
+ }
144
+ case 0x05: {
145
+ // fixedArray
146
+ const elementTypeBytes = '0x' + bytes.slice(6);
147
+ return 6 + this.getTypeBytesLength(elementTypeBytes); // flag + length (2 bytes) + element type
148
+ }
149
+ case 0x06: {
150
+ // tuple
151
+ const fieldCount = parseInt(bytes.slice(2, 6), 16);
152
+ let length = 6; // flag + field count (2 bytes)
153
+ let offset = 6;
154
+ for (let i = 0; i < fieldCount; i++) {
155
+ const fieldTypeBytes = '0x' + bytes.slice(offset);
156
+ const fieldLength = this.getTypeBytesLength(fieldTypeBytes);
157
+ length += fieldLength;
158
+ offset += fieldLength;
159
+ }
160
+ return length;
161
+ }
162
+ default:
163
+ throw new Error(`Unknown type flag: 0x${typeFlag.toString(16)}`);
164
+ }
165
+ }
166
+ /**
167
+ * Get field names (for Tuple types)
168
+ * Returns format: string[][], each element is a tuple's field name array
169
+ */
170
+ getFieldNames() {
171
+ // Default returns empty array, Tuple type will override this method
172
+ return [];
173
+ }
174
+ // ========================================
175
+ // Basic Types
176
+ // ========================================
177
+ /**
178
+ * uint type
179
+ * @param bits Bit count: 8, 16, 24, ..., 256 (must be divisible by 8)
180
+ * @example
181
+ * TagTypeBuilder.uint(8) → "0101"
182
+ * TagTypeBuilder.uint(256) → "0120"
183
+ */
184
+ static uint(bits = 256) {
185
+ if (bits < 8 || bits > 256 || bits % 8 !== 0) {
186
+ throw new Error('uint bits must be 8-256 and divisible by 8');
187
+ }
188
+ const size = bits / 8;
189
+ const sizeHex = size.toString(16).padStart(2, '0');
190
+ return new TagTypeBuilder(`01${sizeHex}`, `uint${bits}`);
191
+ }
192
+ /**
193
+ * int type
194
+ * @param bits Bit count: 8, 16, 24, ..., 256 (must be divisible by 8)
195
+ * @example
196
+ * TagTypeBuilder.int(8) → "0001"
197
+ * TagTypeBuilder.int(256) → "0020"
198
+ */
199
+ static int(bits = 256) {
200
+ if (bits < 8 || bits > 256 || bits % 8 !== 0) {
201
+ throw new Error('int bits must be 8-256 and divisible by 8');
202
+ }
203
+ const size = bits / 8;
204
+ const sizeHex = size.toString(16).padStart(2, '0');
205
+ return new TagTypeBuilder(`00${sizeHex}`, `int${bits}`);
206
+ }
207
+ /**
208
+ * bool type
209
+ * @example
210
+ * TagTypeBuilder.bool() → "02"
211
+ */
212
+ static bool() {
213
+ return new TagTypeBuilder('02', 'bool');
214
+ }
215
+ /**
216
+ * string type
217
+ * @example
218
+ * TagTypeBuilder.string() → "03"
219
+ */
220
+ static string() {
221
+ return new TagTypeBuilder('03', 'string');
222
+ }
223
+ /**
224
+ * address type
225
+ * @example
226
+ * TagTypeBuilder.address() → "07"
227
+ */
228
+ static address() {
229
+ return new TagTypeBuilder('07', 'address');
230
+ }
231
+ /**
232
+ * bytes type (dynamic length)
233
+ * @example
234
+ * TagTypeBuilder.bytes() → "09"
235
+ */
236
+ static bytes() {
237
+ return new TagTypeBuilder('09', 'bytes');
238
+ }
239
+ /**
240
+ * bytesN type (fixed length)
241
+ * @param size Byte count: 1-32
242
+ * @example
243
+ * TagTypeBuilder.fixedBytes(32) → "0820"
244
+ */
245
+ static fixedBytes(size) {
246
+ if (size < 1 || size > 32) {
247
+ throw new Error('Fixed bytes size must be between 1 and 32');
248
+ }
249
+ const sizeHex = size.toString(16).padStart(2, '0');
250
+ return new TagTypeBuilder(`08${sizeHex}`, `bytes${size}`);
251
+ }
252
+ // ========================================
253
+ // Array Types
254
+ // ========================================
255
+ /**
256
+ * Dynamic array
257
+ * @param elementType Element type
258
+ * @example
259
+ * TagTypeBuilder.array(TagTypeBuilder.address()) → "0407"
260
+ */
261
+ static array(elementType) {
262
+ const typeBytes = `04${elementType.getTypeBytes()}`;
263
+ const abiTypeString = `${elementType.getAbiTypeString()}[]`;
264
+ const fieldNames = elementType.getFieldNames();
265
+ // If element type has field names (e.g., tuple), propagate them
266
+ if (fieldNames.length > 0) {
267
+ return new TupleTypeBuilder(typeBytes, fieldNames, abiTypeString);
268
+ }
269
+ return new TagTypeBuilder(typeBytes, abiTypeString);
270
+ }
271
+ /**
272
+ * Fixed-length array
273
+ * @param elementType Element type
274
+ * @param length Array length (1-65535)
275
+ * @example
276
+ * TagTypeBuilder.fixedArray(TagTypeBuilder.address(), 5) → "05000507"
277
+ */
278
+ static fixedArray(elementType, length) {
279
+ if (length < 1 || length > 65535) {
280
+ throw new Error('Fixed array length must be between 1 and 65535');
281
+ }
282
+ const lengthHex = length.toString(16).padStart(4, '0');
283
+ const typeBytes = `05${lengthHex}${elementType.getTypeBytes()}`;
284
+ const abiTypeString = `${elementType.getAbiTypeString()}[${length}]`;
285
+ const fieldNames = elementType.getFieldNames();
286
+ // If element type has field names (e.g., tuple), propagate them
287
+ if (fieldNames.length > 0) {
288
+ return new TupleTypeBuilder(typeBytes, fieldNames, abiTypeString);
289
+ }
290
+ return new TagTypeBuilder(typeBytes, abiTypeString);
291
+ }
292
+ // ========================================
293
+ // Tuple (Struct)
294
+ // ========================================
295
+ /**
296
+ * tuple type
297
+ * @param fields Field definitions, format: { fieldName: fieldType }
298
+ * @example
299
+ * TagTypeBuilder.tuple({
300
+ * name: TagTypeBuilder.string(),
301
+ * age: TagTypeBuilder.uint8()
302
+ * }) → "060002" + "03" + "0101"
303
+ *
304
+ * Field names are collected in pre-order traversal (DFS pre-order) for nested tuples.
305
+ * Pre-order: Visit root first, then recursively visit children left-to-right.
306
+ *
307
+ * Example tree structure: A{B{D{E, F}}, C}
308
+ * fieldNames = [
309
+ * ["i", "j"], // A's fields (root)
310
+ * ["i"], // B's fields (A's 1st child)
311
+ * ["i", "j"], // D's fields (B's child)
312
+ * ["i", "j"], // E's fields (D's 1st child)
313
+ * ["i", "j"], // F's fields (D's 2nd child)
314
+ * ["i"] // C's fields (A's 2nd child)
315
+ * ]
316
+ */
317
+ static tuple(fields) {
318
+ const fieldNames = [];
319
+ const fieldTypes = [];
320
+ const fieldAbiTypes = [];
321
+ const allFieldNames = [];
322
+ // First, add current tuple's field names
323
+ for (const name of Object.keys(fields)) {
324
+ fieldNames.push(name);
325
+ }
326
+ allFieldNames.push(fieldNames);
327
+ // Then, recursively collect nested tuple field names in depth-first order
328
+ for (const [_name, type] of Object.entries(fields)) {
329
+ fieldTypes.push(type.getTypeBytes());
330
+ fieldAbiTypes.push(type.getAbiTypeString());
331
+ // Recursively collect nested tuple field names
332
+ const nested = type.getFieldNames();
333
+ if (nested.length > 0) {
334
+ allFieldNames.push(...nested);
335
+ }
336
+ }
337
+ const fieldCount = fieldTypes.length;
338
+ const fieldCountHex = fieldCount.toString(16).padStart(4, '0');
339
+ const typeBytes = `06${fieldCountHex}${fieldTypes.join('')}`;
340
+ const abiTypeString = `tuple(${fieldAbiTypes.join(',')})`;
341
+ return new TupleTypeBuilder(typeBytes, allFieldNames, abiTypeString, fields);
342
+ }
343
+ // ========================================
344
+ // Common Type Shortcuts
345
+ // ========================================
346
+ static uint8() {
347
+ return this.uint(8);
348
+ }
349
+ static uint16() {
350
+ return this.uint(16);
351
+ }
352
+ static uint32() {
353
+ return this.uint(32);
354
+ }
355
+ static uint64() {
356
+ return this.uint(64);
357
+ }
358
+ static uint128() {
359
+ return this.uint(128);
360
+ }
361
+ static uint256() {
362
+ return this.uint(256);
363
+ }
364
+ static int8() {
365
+ return this.int(8);
366
+ }
367
+ static int16() {
368
+ return this.int(16);
369
+ }
370
+ static int32() {
371
+ return this.int(32);
372
+ }
373
+ static int64() {
374
+ return this.int(64);
375
+ }
376
+ static int128() {
377
+ return this.int(128);
378
+ }
379
+ static int256() {
380
+ return this.int(256);
381
+ }
382
+ static bytes32() {
383
+ return this.fixedBytes(32);
384
+ }
385
+ static addressArray() {
386
+ return this.array(this.address());
387
+ }
388
+ static stringArray() {
389
+ return this.array(this.string());
390
+ }
391
+ static uint256Array() {
392
+ return this.array(this.uint256());
393
+ }
394
+ }
395
+ exports.TagTypeBuilder = TagTypeBuilder;
396
+ /**
397
+ * Tuple Type Builder (supports field names and object encoding)
398
+ */
399
+ class TupleTypeBuilder extends TagTypeBuilder {
400
+ constructor(typeBytes, fieldNames, abiTypeString = '', fieldTypes) {
401
+ super(typeBytes, abiTypeString);
402
+ this.fieldNames = fieldNames;
403
+ this.fieldTypes = fieldTypes;
404
+ }
405
+ getFieldNames() {
406
+ return this.fieldNames;
407
+ }
408
+ }
409
+ exports.TupleTypeBuilder = TupleTypeBuilder;
410
+ //# sourceMappingURL=tag-type-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tag-type-builder.js","sourceRoot":"","sources":["../../src/utils/tag-type-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,140 @@
1
+ /**
2
+ * Example: Crypto Utilities
3
+ *
4
+ * This example demonstrates all crypto utility functions:
5
+ * - Generate mnemonic phrases
6
+ * - Derive Ethereum addresses from mnemonics
7
+ * - Derive DIDs from mnemonics
8
+ * - Derive EVM private keys from mnemonics
9
+ * - Complete key derivation (all at once)
10
+ */
11
+
12
+ import {
13
+ generateMnemonic,
14
+ getEthereumAddressFromMnemonic,
15
+ getDIDFromMnemonic,
16
+ getEVMPrivateKeyFromMnemonic,
17
+ deriveDIDFromMnemonic,
18
+ generateDIDKeyData
19
+ } from '../src/utils/crypto-utils';
20
+
21
+ async function main() {
22
+ console.log('='.repeat(60));
23
+ console.log('Crypto Utilities Examples');
24
+ console.log('='.repeat(60));
25
+
26
+ // =========================================================================
27
+ // 1. Generate Mnemonic
28
+ // =========================================================================
29
+ console.log('\nšŸ“ Example 1: Generate Mnemonic Phrases');
30
+ console.log('-'.repeat(60));
31
+
32
+ const mnemonic12 = generateMnemonic(12);
33
+ console.log('12-word mnemonic:', mnemonic12);
34
+
35
+ const mnemonic24 = generateMnemonic(24);
36
+ console.log('24-word mnemonic:', mnemonic24);
37
+
38
+ // =========================================================================
39
+ // 2. Derive Ethereum Address
40
+ // =========================================================================
41
+ console.log('\nšŸ  Example 2: Get Ethereum Address from Mnemonic');
42
+ console.log('-'.repeat(60));
43
+
44
+ const testMnemonic =
45
+ 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about';
46
+ const address = await getEthereumAddressFromMnemonic(testMnemonic);
47
+ console.log('Mnemonic:', testMnemonic);
48
+ console.log('Address:', address);
49
+
50
+ // =========================================================================
51
+ // 3. Derive DID
52
+ // =========================================================================
53
+ console.log('\nšŸ†” Example 3: Get DID from Mnemonic');
54
+ console.log('-'.repeat(60));
55
+
56
+ const did = await getDIDFromMnemonic(testMnemonic);
57
+ console.log('Mnemonic:', testMnemonic);
58
+ console.log('DID:', did);
59
+
60
+ // =========================================================================
61
+ // 4. Derive EVM Private Key
62
+ // =========================================================================
63
+ console.log('\nšŸ”‘ Example 4: Get EVM Private Key from Mnemonic');
64
+ console.log('-'.repeat(60));
65
+
66
+ const privateKey = await getEVMPrivateKeyFromMnemonic(testMnemonic);
67
+ console.log('Mnemonic:', testMnemonic);
68
+ console.log('Private Key:', privateKey);
69
+ console.log('\nāš ļø Never share your private key!');
70
+
71
+ // =========================================================================
72
+ // 5. Derive Owner and DID Together
73
+ // =========================================================================
74
+ console.log('\nšŸ” Example 5: Derive Owner and DID from Mnemonic');
75
+ console.log('-'.repeat(60));
76
+
77
+ const { owner, did: derivedDid } = await deriveDIDFromMnemonic(
78
+ testMnemonic
79
+ );
80
+ console.log('Mnemonic:', testMnemonic);
81
+ console.log('Owner (Address):', owner);
82
+ console.log('DID:', derivedDid);
83
+
84
+ // =========================================================================
85
+ // 6. Generate Complete Key Data (All at Once)
86
+ // =========================================================================
87
+ console.log('\nšŸŽ² Example 6: Generate Complete Key Data');
88
+ console.log('-'.repeat(60));
89
+
90
+ const keyData12 = await generateDIDKeyData(12);
91
+ console.log('Generated 12-word key set:');
92
+ console.log(' Mnemonic:', keyData12.mnemonic);
93
+ console.log(' Owner:', keyData12.owner);
94
+ console.log(' DID:', keyData12.did);
95
+
96
+ const keyData24 = await generateDIDKeyData(24);
97
+ console.log('\nGenerated 24-word key set:');
98
+ console.log(' Mnemonic:', keyData24.mnemonic);
99
+ console.log(' Owner:', keyData24.owner);
100
+ console.log(' DID:', keyData24.did);
101
+
102
+ // =========================================================================
103
+ // 7. Verify Consistency
104
+ // =========================================================================
105
+ console.log('\nāœ… Example 7: Verify Consistency');
106
+ console.log('-'.repeat(60));
107
+
108
+ const verifyMnemonic = generateMnemonic(12);
109
+ console.log('Testing mnemonic:', verifyMnemonic);
110
+
111
+ const addr1 = await getEthereumAddressFromMnemonic(verifyMnemonic);
112
+ const { owner: addr2 } = await deriveDIDFromMnemonic(verifyMnemonic);
113
+ const { owner: addr3 } = await generateDIDKeyData(12); // Different mnemonic
114
+
115
+ console.log('\nAddresses derived from same mnemonic:');
116
+ console.log(' Method 1 (getEthereumAddressFromMnemonic):', addr1);
117
+ console.log(' Method 2 (deriveDIDFromMnemonic):', addr2);
118
+ console.log(' Consistent?', addr1 === addr2 ? 'āœ… Yes' : 'āŒ No');
119
+
120
+ console.log('\nAddresses from different mnemonics:');
121
+ console.log(' Address 1:', addr1);
122
+ console.log(' Address 2:', addr3);
123
+ console.log(' Different?', addr1 !== addr3 ? 'āœ… Yes' : 'āŒ No');
124
+
125
+ // =========================================================================
126
+ // Summary
127
+ // =========================================================================
128
+ console.log('\n' + '='.repeat(60));
129
+ console.log('Summary of Crypto Utilities:');
130
+ console.log('='.repeat(60));
131
+ console.log('1. generateMnemonic(words) - Generate new mnemonic');
132
+ console.log('2. getEthereumAddressFromMnemonic - Get Ethereum address');
133
+ console.log('3. getDIDFromMnemonic - Get DID');
134
+ console.log('4. getEVMPrivateKeyFromMnemonic - Get private key');
135
+ console.log('5. deriveDIDFromMnemonic - Get owner + DID');
136
+ console.log('6. generateDIDKeyData - Generate all at once');
137
+ console.log('='.repeat(60));
138
+ }
139
+
140
+ main().catch(console.error);
@@ -0,0 +1,80 @@
1
+ import OlaresID from '../src/index';
2
+
3
+ async function main() {
4
+ console.log('='.repeat(60));
5
+ console.log('Testing DomainContext Methods');
6
+ console.log('='.repeat(60));
7
+
8
+ const didConsole = OlaresID.createTestnet();
9
+
10
+ const testDomain = '1.com';
11
+ const domain = didConsole.domain(testDomain);
12
+
13
+ // Test 1: getMetaInfo
14
+ console.log('\nšŸ“‹ Test 1: getMetaInfo()');
15
+ console.log('-'.repeat(60));
16
+ try {
17
+ const metaInfo = await domain.getMetaInfo();
18
+ console.log('āœ… Success:');
19
+ console.log(' ID:', metaInfo.id);
20
+ console.log(' Name:', metaInfo.name);
21
+ console.log(' DID:', metaInfo.did);
22
+ console.log(' Note:', metaInfo.note);
23
+ console.log(' Allow Subdomain:', metaInfo.allowSubdomain);
24
+ } catch (error) {
25
+ console.error('āŒ Failed:', error);
26
+ }
27
+
28
+ // Test 2: getOwner
29
+ console.log('\nšŸ‘¤ Test 2: getOwner()');
30
+ console.log('-'.repeat(60));
31
+ try {
32
+ const owner = await domain.getOwner();
33
+ console.log('āœ… Owner:', owner);
34
+ } catch (error) {
35
+ console.error('āŒ Failed:', error);
36
+ }
37
+
38
+ // Test 3: isOwner (without signer, should throw)
39
+ console.log('\nšŸ”‘ Test 3: isOwner() - without signer');
40
+ console.log('-'.repeat(60));
41
+ try {
42
+ const isOwner = await domain.isOwner();
43
+ console.log('āœ… Is Owner:', isOwner);
44
+ } catch (error) {
45
+ console.log('āœ… Expected error:', error);
46
+ }
47
+
48
+ // Test 4: isOwner (with signer)
49
+ if (process.env.PRIVATE_KEY_OR_MNEMONIC) {
50
+ console.log('\nšŸ”‘ Test 4: isOwner() - with signer');
51
+ console.log('-'.repeat(60));
52
+ try {
53
+ await didConsole.setSigner(process.env.PRIVATE_KEY_OR_MNEMONIC);
54
+ const isOwner = await domain.isOwner();
55
+ console.log('āœ… Is Owner:', isOwner);
56
+ didConsole.clearSigner();
57
+ } catch (error) {
58
+ console.error('āŒ Failed:', error);
59
+ }
60
+ }
61
+
62
+ // Test 5: Test with non-existent domain
63
+ console.log('\nā“ Test 5: Non-existent domain');
64
+ console.log('-'.repeat(60));
65
+ const nonExistentDomain = didConsole.domain(
66
+ 'this-domain-does-not-exist.olares.com'
67
+ );
68
+ try {
69
+ await nonExistentDomain.getMetaInfo();
70
+ console.error('āŒ Should have thrown an error');
71
+ } catch (error) {
72
+ console.log('āœ… Expected error:', error);
73
+ }
74
+
75
+ console.log('\n' + '='.repeat(60));
76
+ console.log('āœ… All tests completed!');
77
+ console.log('='.repeat(60));
78
+ }
79
+
80
+ main().catch(console.error);