@beclab/olaresid 0.1.12 → 0.2.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.
Files changed (182) hide show
  1. package/CLI-TREE.md +107 -0
  2. package/CLI.md +122 -1329
  3. package/README.md +30 -12
  4. package/SDK-TREE.md +151 -0
  5. package/TAG.md +95 -41
  6. package/config.json +6 -4
  7. package/dist/abi/TerminusDIDQueryABI.d.ts +397 -0
  8. package/dist/abi/TerminusDIDQueryABI.d.ts.map +1 -0
  9. package/dist/abi/TerminusDIDQueryABI.js +519 -0
  10. package/dist/abi/TerminusDIDQueryABI.js.map +1 -0
  11. package/dist/business/index.d.ts +1 -1
  12. package/dist/business/index.d.ts.map +1 -1
  13. package/dist/business/index.js +11 -24
  14. package/dist/business/index.js.map +1 -1
  15. package/dist/business/tag-context.d.ts +1 -0
  16. package/dist/business/tag-context.d.ts.map +1 -1
  17. package/dist/business/tag-context.js +13 -7
  18. package/dist/business/tag-context.js.map +1 -1
  19. package/dist/cli.js +238 -107
  20. package/dist/cli.js.map +1 -1
  21. package/dist/config/index.d.ts +16 -4
  22. package/dist/config/index.d.ts.map +1 -1
  23. package/dist/config/index.js +28 -14
  24. package/dist/config/index.js.map +1 -1
  25. package/dist/domain/core.d.ts +65 -0
  26. package/dist/domain/core.d.ts.map +1 -0
  27. package/dist/domain/core.js +317 -0
  28. package/dist/domain/core.js.map +1 -0
  29. package/dist/domain/index.d.ts +104 -57
  30. package/dist/domain/index.d.ts.map +1 -1
  31. package/dist/domain/index.js +188 -428
  32. package/dist/domain/index.js.map +1 -1
  33. package/dist/domain/types.d.ts +56 -0
  34. package/dist/domain/types.d.ts.map +1 -0
  35. package/dist/domain/types.js +3 -0
  36. package/dist/domain/types.js.map +1 -0
  37. package/dist/index.d.ts +81 -24
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +153 -143
  40. package/dist/index.js.map +1 -1
  41. package/dist/utils/crypto-utils.d.ts +124 -0
  42. package/dist/utils/crypto-utils.d.ts.map +1 -1
  43. package/dist/utils/crypto-utils.js +156 -8
  44. package/dist/utils/crypto-utils.js.map +1 -1
  45. package/dist/utils/error-parser.d.ts.map +1 -1
  46. package/dist/utils/error-parser.js +2 -1
  47. package/dist/utils/error-parser.js.map +1 -1
  48. package/dist/utils/event-parser.d.ts +161 -0
  49. package/dist/utils/event-parser.d.ts.map +1 -0
  50. package/dist/utils/event-parser.js +140 -0
  51. package/dist/utils/event-parser.js.map +1 -0
  52. package/dist/utils/tag-type-builder.d.ts +43 -0
  53. package/dist/utils/tag-type-builder.d.ts.map +1 -1
  54. package/dist/utils/tag-type-builder.js +122 -0
  55. package/dist/utils/tag-type-builder.js.map +1 -1
  56. package/dist/utils/tag-type-parser.d.ts +70 -0
  57. package/dist/utils/tag-type-parser.d.ts.map +1 -0
  58. package/dist/utils/tag-type-parser.js +190 -0
  59. package/dist/utils/tag-type-parser.js.map +1 -0
  60. package/examples/create-with-rpc-demo.ts +142 -0
  61. package/examples/fetch-all-flat-demo.ts +159 -0
  62. package/examples/fetch-by-indices-demo.ts +235 -0
  63. package/examples/fetch-domain-demo.ts +137 -0
  64. package/examples/fetch-domains-demo.ts +221 -0
  65. package/examples/frontend-demo/index.html +2 -2
  66. package/examples/frontend-demo/package-lock.json +4 -1
  67. package/examples/index.ts +3 -5
  68. package/jest.config.js +25 -0
  69. package/package.json +6 -2
  70. package/src/abi/TerminusDIDQueryABI.ts +516 -0
  71. package/src/business/index.ts +10 -33
  72. package/src/business/tag-context.ts +35 -7
  73. package/src/cli.ts +344 -121
  74. package/src/config/index.ts +34 -19
  75. package/src/domain/core.ts +382 -0
  76. package/src/domain/index.ts +271 -641
  77. package/src/domain/types.ts +59 -0
  78. package/src/index.ts +222 -207
  79. package/src/utils/crypto-utils.ts +239 -2
  80. package/src/utils/error-parser.ts +2 -1
  81. package/src/utils/event-parser.ts +353 -0
  82. package/src/utils/tag-type-builder.ts +138 -0
  83. package/src/utils/tag-type-parser.ts +246 -0
  84. package/tests/unit/crypto-utils.test.ts +338 -0
  85. package/tests/unit/ed25519-jwk.test.ts +201 -0
  86. package/tests/unit/event-parser.test.ts +690 -0
  87. package/tests/unit/generate-mnemonic.test.ts +268 -0
  88. package/tests/unit/olares-id-format.test.ts +321 -0
  89. package/tests/unit/tag-type-parser.test.ts +802 -0
  90. package/tests/unit/tag-types.test.ts +821 -0
  91. package/tsconfig.json +3 -2
  92. package/dist/abi/ABITypeABI.d.ts +0 -88
  93. package/dist/abi/ABITypeABI.d.ts.map +0 -1
  94. package/dist/abi/ABITypeABI.js +0 -382
  95. package/dist/abi/ABITypeABI.js.map +0 -1
  96. package/dist/abi/RegistryABI.d.ts +0 -77
  97. package/dist/abi/RegistryABI.d.ts.map +0 -1
  98. package/dist/abi/RegistryABI.js +0 -462
  99. package/dist/abi/RegistryABI.js.map +0 -1
  100. package/dist/tag/address.d.ts +0 -11
  101. package/dist/tag/address.d.ts.map +0 -1
  102. package/dist/tag/address.js +0 -44
  103. package/dist/tag/address.js.map +0 -1
  104. package/dist/tag/array.d.ts +0 -14
  105. package/dist/tag/array.d.ts.map +0 -1
  106. package/dist/tag/array.js +0 -72
  107. package/dist/tag/array.js.map +0 -1
  108. package/dist/tag/bool.d.ts +0 -11
  109. package/dist/tag/bool.d.ts.map +0 -1
  110. package/dist/tag/bool.js +0 -43
  111. package/dist/tag/bool.js.map +0 -1
  112. package/dist/tag/bytes.d.ts +0 -11
  113. package/dist/tag/bytes.d.ts.map +0 -1
  114. package/dist/tag/bytes.js +0 -37
  115. package/dist/tag/bytes.js.map +0 -1
  116. package/dist/tag/flarray.d.ts +0 -15
  117. package/dist/tag/flarray.d.ts.map +0 -1
  118. package/dist/tag/flarray.js +0 -81
  119. package/dist/tag/flarray.js.map +0 -1
  120. package/dist/tag/flbytes.d.ts +0 -11
  121. package/dist/tag/flbytes.d.ts.map +0 -1
  122. package/dist/tag/flbytes.js +0 -47
  123. package/dist/tag/flbytes.js.map +0 -1
  124. package/dist/tag/index.d.ts +0 -32
  125. package/dist/tag/index.d.ts.map +0 -1
  126. package/dist/tag/index.js +0 -121
  127. package/dist/tag/index.js.map +0 -1
  128. package/dist/tag/int.d.ts +0 -12
  129. package/dist/tag/int.d.ts.map +0 -1
  130. package/dist/tag/int.js +0 -49
  131. package/dist/tag/int.js.map +0 -1
  132. package/dist/tag/string.d.ts +0 -11
  133. package/dist/tag/string.d.ts.map +0 -1
  134. package/dist/tag/string.js +0 -37
  135. package/dist/tag/string.js.map +0 -1
  136. package/dist/tag/tag.d.ts +0 -67
  137. package/dist/tag/tag.d.ts.map +0 -1
  138. package/dist/tag/tag.js +0 -157
  139. package/dist/tag/tag.js.map +0 -1
  140. package/dist/tag/tuple.d.ts +0 -17
  141. package/dist/tag/tuple.d.ts.map +0 -1
  142. package/dist/tag/tuple.js +0 -162
  143. package/dist/tag/tuple.js.map +0 -1
  144. package/dist/tag/uint.d.ts +0 -12
  145. package/dist/tag/uint.d.ts.map +0 -1
  146. package/dist/tag/uint.js +0 -49
  147. package/dist/tag/uint.js.map +0 -1
  148. package/dist/test/did.d.ts +0 -2
  149. package/dist/test/did.d.ts.map +0 -1
  150. package/dist/test/did.js +0 -177
  151. package/dist/test/did.js.map +0 -1
  152. package/dist/utils/tag-abi-codec.d.ts +0 -69
  153. package/dist/utils/tag-abi-codec.d.ts.map +0 -1
  154. package/dist/utils/tag-abi-codec.js +0 -144
  155. package/dist/utils/tag-abi-codec.js.map +0 -1
  156. package/examples/crypto-utilities.ts +0 -140
  157. package/examples/ed25519-jwk.ts +0 -73
  158. package/examples/generate-mnemonic.ts +0 -149
  159. package/examples/legacy.ts +0 -33
  160. package/examples/olares-id-format.ts +0 -197
  161. package/examples/tag-builder.ts +0 -235
  162. package/examples/tag-nested-tuple.ts +0 -190
  163. package/examples/tag-simple.ts +0 -149
  164. package/examples/tag-tagger.ts +0 -217
  165. package/examples/test-nested-tuple-conversion.ts +0 -143
  166. package/examples/test-type-bytes-parser.ts +0 -70
  167. package/src/abi/ABITypeABI.ts +0 -379
  168. package/src/abi/RegistryABI.ts +0 -459
  169. package/src/tag/address.ts +0 -48
  170. package/src/tag/array.ts +0 -80
  171. package/src/tag/bool.ts +0 -43
  172. package/src/tag/bytes.ts +0 -38
  173. package/src/tag/flarray.ts +0 -99
  174. package/src/tag/flbytes.ts +0 -48
  175. package/src/tag/index.ts +0 -170
  176. package/src/tag/int.ts +0 -51
  177. package/src/tag/string.ts +0 -38
  178. package/src/tag/tag.ts +0 -229
  179. package/src/tag/tuple.ts +0 -193
  180. package/src/tag/uint.ts +0 -51
  181. package/src/test/did.ts +0 -346
  182. package/src/utils/tag-abi-codec.ts +0 -158
@@ -0,0 +1,516 @@
1
+ export default [
2
+ {
3
+ type: 'constructor',
4
+ inputs: [
5
+ {
6
+ name: '_terminusDID',
7
+ type: 'address',
8
+ internalType: 'address'
9
+ }
10
+ ],
11
+ stateMutability: 'nonpayable'
12
+ },
13
+ {
14
+ type: 'function',
15
+ name: 'getAllDomains',
16
+ inputs: [
17
+ {
18
+ name: 'offset',
19
+ type: 'uint256',
20
+ internalType: 'uint256'
21
+ },
22
+ {
23
+ name: 'limit',
24
+ type: 'uint256',
25
+ internalType: 'uint256'
26
+ }
27
+ ],
28
+ outputs: [
29
+ {
30
+ name: 'domains',
31
+ type: 'tuple[]',
32
+ internalType: 'struct TerminusDIDQuery.DomainData[]',
33
+ components: [
34
+ {
35
+ name: 'tokenId',
36
+ type: 'uint256',
37
+ internalType: 'uint256'
38
+ },
39
+ {
40
+ name: 'domain',
41
+ type: 'string',
42
+ internalType: 'string'
43
+ },
44
+ {
45
+ name: 'did',
46
+ type: 'string',
47
+ internalType: 'string'
48
+ },
49
+ {
50
+ name: 'notes',
51
+ type: 'string',
52
+ internalType: 'string'
53
+ },
54
+ {
55
+ name: 'allowSubdomain',
56
+ type: 'bool',
57
+ internalType: 'bool'
58
+ },
59
+ {
60
+ name: 'owner',
61
+ type: 'address',
62
+ internalType: 'address'
63
+ },
64
+ {
65
+ name: 'tags',
66
+ type: 'tuple[]',
67
+ internalType: 'struct TerminusDIDQuery.TagData[]',
68
+ components: [
69
+ {
70
+ name: 'from',
71
+ type: 'string',
72
+ internalType: 'string'
73
+ },
74
+ {
75
+ name: 'name',
76
+ type: 'string',
77
+ internalType: 'string'
78
+ },
79
+ {
80
+ name: 'abiType',
81
+ type: 'bytes',
82
+ internalType: 'bytes'
83
+ },
84
+ {
85
+ name: 'value',
86
+ type: 'bytes',
87
+ internalType: 'bytes'
88
+ },
89
+ {
90
+ name: 'fieldNamesHash',
91
+ type: 'bytes32[]',
92
+ internalType: 'bytes32[]'
93
+ }
94
+ ]
95
+ }
96
+ ]
97
+ }
98
+ ],
99
+ stateMutability: 'view'
100
+ },
101
+ {
102
+ type: 'function',
103
+ name: 'getDomain',
104
+ inputs: [
105
+ {
106
+ name: 'tokenId',
107
+ type: 'uint256',
108
+ internalType: 'uint256'
109
+ }
110
+ ],
111
+ outputs: [
112
+ {
113
+ name: 'data',
114
+ type: 'tuple',
115
+ internalType: 'struct TerminusDIDQuery.DomainData',
116
+ components: [
117
+ {
118
+ name: 'tokenId',
119
+ type: 'uint256',
120
+ internalType: 'uint256'
121
+ },
122
+ {
123
+ name: 'domain',
124
+ type: 'string',
125
+ internalType: 'string'
126
+ },
127
+ {
128
+ name: 'did',
129
+ type: 'string',
130
+ internalType: 'string'
131
+ },
132
+ {
133
+ name: 'notes',
134
+ type: 'string',
135
+ internalType: 'string'
136
+ },
137
+ {
138
+ name: 'allowSubdomain',
139
+ type: 'bool',
140
+ internalType: 'bool'
141
+ },
142
+ {
143
+ name: 'owner',
144
+ type: 'address',
145
+ internalType: 'address'
146
+ },
147
+ {
148
+ name: 'tags',
149
+ type: 'tuple[]',
150
+ internalType: 'struct TerminusDIDQuery.TagData[]',
151
+ components: [
152
+ {
153
+ name: 'from',
154
+ type: 'string',
155
+ internalType: 'string'
156
+ },
157
+ {
158
+ name: 'name',
159
+ type: 'string',
160
+ internalType: 'string'
161
+ },
162
+ {
163
+ name: 'abiType',
164
+ type: 'bytes',
165
+ internalType: 'bytes'
166
+ },
167
+ {
168
+ name: 'value',
169
+ type: 'bytes',
170
+ internalType: 'bytes'
171
+ },
172
+ {
173
+ name: 'fieldNamesHash',
174
+ type: 'bytes32[]',
175
+ internalType: 'bytes32[]'
176
+ }
177
+ ]
178
+ }
179
+ ]
180
+ }
181
+ ],
182
+ stateMutability: 'view'
183
+ },
184
+ {
185
+ type: 'function',
186
+ name: 'getDomainByName',
187
+ inputs: [
188
+ {
189
+ name: 'name',
190
+ type: 'string',
191
+ internalType: 'string'
192
+ }
193
+ ],
194
+ outputs: [
195
+ {
196
+ name: 'data',
197
+ type: 'tuple',
198
+ internalType: 'struct TerminusDIDQuery.DomainData',
199
+ components: [
200
+ {
201
+ name: 'tokenId',
202
+ type: 'uint256',
203
+ internalType: 'uint256'
204
+ },
205
+ {
206
+ name: 'domain',
207
+ type: 'string',
208
+ internalType: 'string'
209
+ },
210
+ {
211
+ name: 'did',
212
+ type: 'string',
213
+ internalType: 'string'
214
+ },
215
+ {
216
+ name: 'notes',
217
+ type: 'string',
218
+ internalType: 'string'
219
+ },
220
+ {
221
+ name: 'allowSubdomain',
222
+ type: 'bool',
223
+ internalType: 'bool'
224
+ },
225
+ {
226
+ name: 'owner',
227
+ type: 'address',
228
+ internalType: 'address'
229
+ },
230
+ {
231
+ name: 'tags',
232
+ type: 'tuple[]',
233
+ internalType: 'struct TerminusDIDQuery.TagData[]',
234
+ components: [
235
+ {
236
+ name: 'from',
237
+ type: 'string',
238
+ internalType: 'string'
239
+ },
240
+ {
241
+ name: 'name',
242
+ type: 'string',
243
+ internalType: 'string'
244
+ },
245
+ {
246
+ name: 'abiType',
247
+ type: 'bytes',
248
+ internalType: 'bytes'
249
+ },
250
+ {
251
+ name: 'value',
252
+ type: 'bytes',
253
+ internalType: 'bytes'
254
+ },
255
+ {
256
+ name: 'fieldNamesHash',
257
+ type: 'bytes32[]',
258
+ internalType: 'bytes32[]'
259
+ }
260
+ ]
261
+ }
262
+ ]
263
+ }
264
+ ],
265
+ stateMutability: 'view'
266
+ },
267
+ {
268
+ type: 'function',
269
+ name: 'getDomains',
270
+ inputs: [
271
+ {
272
+ name: 'tokenIds',
273
+ type: 'uint256[]',
274
+ internalType: 'uint256[]'
275
+ }
276
+ ],
277
+ outputs: [
278
+ {
279
+ name: 'domains',
280
+ type: 'tuple[]',
281
+ internalType: 'struct TerminusDIDQuery.DomainData[]',
282
+ components: [
283
+ {
284
+ name: 'tokenId',
285
+ type: 'uint256',
286
+ internalType: 'uint256'
287
+ },
288
+ {
289
+ name: 'domain',
290
+ type: 'string',
291
+ internalType: 'string'
292
+ },
293
+ {
294
+ name: 'did',
295
+ type: 'string',
296
+ internalType: 'string'
297
+ },
298
+ {
299
+ name: 'notes',
300
+ type: 'string',
301
+ internalType: 'string'
302
+ },
303
+ {
304
+ name: 'allowSubdomain',
305
+ type: 'bool',
306
+ internalType: 'bool'
307
+ },
308
+ {
309
+ name: 'owner',
310
+ type: 'address',
311
+ internalType: 'address'
312
+ },
313
+ {
314
+ name: 'tags',
315
+ type: 'tuple[]',
316
+ internalType: 'struct TerminusDIDQuery.TagData[]',
317
+ components: [
318
+ {
319
+ name: 'from',
320
+ type: 'string',
321
+ internalType: 'string'
322
+ },
323
+ {
324
+ name: 'name',
325
+ type: 'string',
326
+ internalType: 'string'
327
+ },
328
+ {
329
+ name: 'abiType',
330
+ type: 'bytes',
331
+ internalType: 'bytes'
332
+ },
333
+ {
334
+ name: 'value',
335
+ type: 'bytes',
336
+ internalType: 'bytes'
337
+ },
338
+ {
339
+ name: 'fieldNamesHash',
340
+ type: 'bytes32[]',
341
+ internalType: 'bytes32[]'
342
+ }
343
+ ]
344
+ }
345
+ ]
346
+ }
347
+ ],
348
+ stateMutability: 'view'
349
+ },
350
+ {
351
+ type: 'function',
352
+ name: 'getDomainsByIndices',
353
+ inputs: [
354
+ {
355
+ name: 'indices',
356
+ type: 'uint256[]',
357
+ internalType: 'uint256[]'
358
+ }
359
+ ],
360
+ outputs: [
361
+ {
362
+ name: 'domains',
363
+ type: 'tuple[]',
364
+ internalType: 'struct TerminusDIDQuery.DomainData[]',
365
+ components: [
366
+ {
367
+ name: 'tokenId',
368
+ type: 'uint256',
369
+ internalType: 'uint256'
370
+ },
371
+ {
372
+ name: 'domain',
373
+ type: 'string',
374
+ internalType: 'string'
375
+ },
376
+ {
377
+ name: 'did',
378
+ type: 'string',
379
+ internalType: 'string'
380
+ },
381
+ {
382
+ name: 'notes',
383
+ type: 'string',
384
+ internalType: 'string'
385
+ },
386
+ {
387
+ name: 'allowSubdomain',
388
+ type: 'bool',
389
+ internalType: 'bool'
390
+ },
391
+ {
392
+ name: 'owner',
393
+ type: 'address',
394
+ internalType: 'address'
395
+ },
396
+ {
397
+ name: 'tags',
398
+ type: 'tuple[]',
399
+ internalType: 'struct TerminusDIDQuery.TagData[]',
400
+ components: [
401
+ {
402
+ name: 'from',
403
+ type: 'string',
404
+ internalType: 'string'
405
+ },
406
+ {
407
+ name: 'name',
408
+ type: 'string',
409
+ internalType: 'string'
410
+ },
411
+ {
412
+ name: 'abiType',
413
+ type: 'bytes',
414
+ internalType: 'bytes'
415
+ },
416
+ {
417
+ name: 'value',
418
+ type: 'bytes',
419
+ internalType: 'bytes'
420
+ },
421
+ {
422
+ name: 'fieldNamesHash',
423
+ type: 'bytes32[]',
424
+ internalType: 'bytes32[]'
425
+ }
426
+ ]
427
+ }
428
+ ]
429
+ }
430
+ ],
431
+ stateMutability: 'view'
432
+ },
433
+ {
434
+ type: 'function',
435
+ name: 'terminusDID',
436
+ inputs: [],
437
+ outputs: [
438
+ {
439
+ name: '',
440
+ type: 'address',
441
+ internalType: 'contract ITerminusDID'
442
+ }
443
+ ],
444
+ stateMutability: 'view'
445
+ },
446
+ {
447
+ type: 'function',
448
+ name: 'tokenByIndex',
449
+ inputs: [
450
+ {
451
+ name: 'index',
452
+ type: 'uint256',
453
+ internalType: 'uint256'
454
+ }
455
+ ],
456
+ outputs: [
457
+ {
458
+ name: '',
459
+ type: 'uint256',
460
+ internalType: 'uint256'
461
+ }
462
+ ],
463
+ stateMutability: 'view'
464
+ },
465
+ {
466
+ type: 'function',
467
+ name: 'totalSupply',
468
+ inputs: [],
469
+ outputs: [
470
+ {
471
+ name: '',
472
+ type: 'uint256',
473
+ internalType: 'uint256'
474
+ }
475
+ ],
476
+ stateMutability: 'view'
477
+ },
478
+ {
479
+ type: 'error',
480
+ name: 'DomainNotExists',
481
+ inputs: [
482
+ {
483
+ name: 'tokenId',
484
+ type: 'uint256',
485
+ internalType: 'uint256'
486
+ }
487
+ ]
488
+ },
489
+ {
490
+ type: 'error',
491
+ name: 'InvalidBatchSize',
492
+ inputs: [
493
+ {
494
+ name: 'size',
495
+ type: 'uint256',
496
+ internalType: 'uint256'
497
+ }
498
+ ]
499
+ },
500
+ {
501
+ type: 'error',
502
+ name: 'InvalidPagination',
503
+ inputs: [
504
+ {
505
+ name: 'offset',
506
+ type: 'uint256',
507
+ internalType: 'uint256'
508
+ },
509
+ {
510
+ name: 'limit',
511
+ type: 'uint256',
512
+ internalType: 'uint256'
513
+ }
514
+ ]
515
+ }
516
+ ] as const;
@@ -44,6 +44,7 @@ export {
44
44
  createRsaKeyPair,
45
45
  generateMnemonic,
46
46
  getEthereumAddressFromMnemonic,
47
+ getEthereumAddressFromPrivateKey,
47
48
  getEVMPrivateKeyFromMnemonic,
48
49
  getDIDFromMnemonic,
49
50
  generateDIDKeyData,
@@ -110,7 +111,9 @@ export class DomainContext {
110
111
  const [metadata, latestDID] = await Promise.all([
111
112
  didContract.getMetadata(tokenId),
112
113
  // Use catch to handle cases where latestDID is not set
113
- resolverContract.getLatestDID(this.domainName).catch(() => '')
114
+ resolverContract.getLatestDID(this.domainName).catch(() => {
115
+ return null;
116
+ })
114
117
  ]);
115
118
 
116
119
  // Use latestDID if it has a value, otherwise fallback to metadata.did
@@ -791,16 +794,8 @@ export class DomainContext {
791
794
  );
792
795
  addresses.push(...tagger2Addresses);
793
796
  } catch (error: any) {
794
- const errorInfo = parseContractError(error);
795
-
796
- // Only skip if it's a contract error (tag doesn't exist, etc.)
797
- // Re-throw network errors
798
- if (errorInfo.isNetworkError) {
799
- throw new Error(
800
- `Network error fetching from RootTagger2: ${errorInfo.message}`
801
- );
802
- }
803
- // Contract errors are silently handled (tag doesn't exist is normal)
797
+ const parsedError = parseContractError(error);
798
+ throw new Error(parsedError.message);
804
799
  }
805
800
 
806
801
  // Get addresses from RootResolver (legacy method for backward compatibility)
@@ -817,16 +812,8 @@ export class DomainContext {
817
812
  );
818
813
  addresses.push(...legacyAddresses);
819
814
  } catch (error: any) {
820
- const errorInfo = parseContractError(error);
821
-
822
- // Only skip if it's a contract error
823
- // Re-throw network errors
824
- if (errorInfo.isNetworkError) {
825
- throw new Error(
826
- `Network error fetching from RootResolver (legacy): ${errorInfo.message}`
827
- );
828
- }
829
- // Contract errors are silently handled
815
+ const parsedError = parseContractError(error);
816
+ throw new Error(parsedError.message);
830
817
  }
831
818
 
832
819
  // Remove duplicates and return
@@ -1121,18 +1108,8 @@ export class DomainContext {
1121
1108
  return new PublicKey(buffer).toBase58();
1122
1109
  });
1123
1110
  } catch (error: any) {
1124
- const errorInfo = parseContractError(error);
1125
-
1126
- // Only skip if it's a contract error (tag doesn't exist is normal)
1127
- // Re-throw network errors
1128
- if (errorInfo.isNetworkError) {
1129
- throw new Error(
1130
- `Network error fetching Solana wallets: ${errorInfo.message}`
1131
- );
1132
- }
1133
-
1134
- // For contract errors, return empty array (tag doesn't exist is normal)
1135
- return [];
1111
+ const parsedError = parseContractError(error);
1112
+ throw new Error(parsedError.message);
1136
1113
  }
1137
1114
  }
1138
1115
 
@@ -2,14 +2,16 @@ import { DIDConsole } from '../index';
2
2
  import { TransactionResult } from './index';
3
3
  import { parseContractError } from '../utils/error-parser';
4
4
  import { TagTypeBuilder } from '../utils/tag-type-builder';
5
- import { TagAbiCodec } from '../utils/tag-abi-codec';
6
5
  import { normalizeToDomain } from '../utils/olares-id';
6
+ import { AbiCoder } from 'ethers';
7
7
 
8
8
  /**
9
9
  * Tag Operation Context
10
10
  * Provides complete Tag management functionality
11
11
  */
12
12
  export class TagContext {
13
+ private abiCoder = new AbiCoder();
14
+
13
15
  constructor(private console: DIDConsole, private fromDomain: string) {
14
16
  // Support Olares ID format (user@domain.com)
15
17
  this.fromDomain = normalizeToDomain(fromDomain);
@@ -237,9 +239,16 @@ export class TagContext {
237
239
  tagTypeInfo.abiType
238
240
  );
239
241
 
240
- // Encode the ENTIRE value using TagAbiCodec
242
+ // Encode the ENTIRE value using ethers AbiCoder
241
243
  // Objects are automatically converted to arrays based on ABI type structure
242
- const encodedValue = TagAbiCodec.encode(abiType, value);
244
+ const convertedValue = TagTypeBuilder.convertObjectToArray(
245
+ abiType,
246
+ value
247
+ );
248
+ const encodedValue = this.abiCoder.encode(
249
+ [abiType],
250
+ [convertedValue]
251
+ );
243
252
 
244
253
  // Check if tag already exists
245
254
  const hasTag = await contract.hasTag(
@@ -316,7 +325,8 @@ export class TagContext {
316
325
  const abiType = TagTypeBuilder.parseTypeBytesToAbiString(
317
326
  tagTypeInfo.abiType
318
327
  );
319
- return TagAbiCodec.decode(abiType, encodedValue);
328
+ const decoded = this.abiCoder.decode([abiType], encodedValue);
329
+ return decoded[0];
320
330
  } catch (error: any) {
321
331
  const errorInfo = parseContractError(error);
322
332
  if (
@@ -474,7 +484,14 @@ export class TagContext {
474
484
  elemPath
475
485
  );
476
486
  // Encode the SINGLE ELEMENT (not the whole array)
477
- const encodedValue = TagAbiCodec.encode(elementAbiType, value);
487
+ const convertedValue = TagTypeBuilder.convertObjectToArray(
488
+ elementAbiType,
489
+ value
490
+ );
491
+ const encodedValue = this.abiCoder.encode(
492
+ [elementAbiType],
493
+ [convertedValue]
494
+ );
478
495
 
479
496
  const tx = await contract.pushTagElem(
480
497
  this.fromDomain,
@@ -582,7 +599,14 @@ export class TagContext {
582
599
  elemPath
583
600
  );
584
601
  // Encode the element value
585
- const encodedValue = TagAbiCodec.encode(elementAbiType, value);
602
+ const convertedValue = TagTypeBuilder.convertObjectToArray(
603
+ elementAbiType,
604
+ value
605
+ );
606
+ const encodedValue = this.abiCoder.encode(
607
+ [elementAbiType],
608
+ [convertedValue]
609
+ );
586
610
 
587
611
  const tx = await contract.updateTagElem(
588
612
  this.fromDomain,
@@ -681,7 +705,11 @@ export class TagContext {
681
705
  elemPath
682
706
  );
683
707
  // Decode the element
684
- return TagAbiCodec.decode(elementAbiType, encodedValue);
708
+ const decoded = this.abiCoder.decode(
709
+ [elementAbiType],
710
+ encodedValue
711
+ );
712
+ return decoded[0];
685
713
  } catch (error: any) {
686
714
  const errorInfo = parseContractError(error);
687
715
  if (errorInfo.errorName === 'TagInvalidOp') {