@beclab/olaresid 0.1.13 → 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 (181) hide show
  1. package/CLI-TREE.md +107 -0
  2. package/CLI.md +122 -1340
  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.map +1 -1
  12. package/dist/business/index.js +9 -23
  13. package/dist/business/index.js.map +1 -1
  14. package/dist/business/tag-context.d.ts +1 -0
  15. package/dist/business/tag-context.d.ts.map +1 -1
  16. package/dist/business/tag-context.js +13 -7
  17. package/dist/business/tag-context.js.map +1 -1
  18. package/dist/cli.js +177 -76
  19. package/dist/cli.js.map +1 -1
  20. package/dist/config/index.d.ts +16 -4
  21. package/dist/config/index.d.ts.map +1 -1
  22. package/dist/config/index.js +28 -14
  23. package/dist/config/index.js.map +1 -1
  24. package/dist/domain/core.d.ts +65 -0
  25. package/dist/domain/core.d.ts.map +1 -0
  26. package/dist/domain/core.js +317 -0
  27. package/dist/domain/core.js.map +1 -0
  28. package/dist/domain/index.d.ts +104 -57
  29. package/dist/domain/index.d.ts.map +1 -1
  30. package/dist/domain/index.js +188 -428
  31. package/dist/domain/index.js.map +1 -1
  32. package/dist/domain/types.d.ts +56 -0
  33. package/dist/domain/types.d.ts.map +1 -0
  34. package/dist/domain/types.js +3 -0
  35. package/dist/domain/types.js.map +1 -0
  36. package/dist/index.d.ts +80 -23
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +152 -143
  39. package/dist/index.js.map +1 -1
  40. package/dist/utils/crypto-utils.d.ts +110 -0
  41. package/dist/utils/crypto-utils.d.ts.map +1 -1
  42. package/dist/utils/crypto-utils.js +127 -8
  43. package/dist/utils/crypto-utils.js.map +1 -1
  44. package/dist/utils/error-parser.d.ts.map +1 -1
  45. package/dist/utils/error-parser.js +2 -1
  46. package/dist/utils/error-parser.js.map +1 -1
  47. package/dist/utils/event-parser.d.ts +161 -0
  48. package/dist/utils/event-parser.d.ts.map +1 -0
  49. package/dist/utils/event-parser.js +140 -0
  50. package/dist/utils/event-parser.js.map +1 -0
  51. package/dist/utils/tag-type-builder.d.ts +43 -0
  52. package/dist/utils/tag-type-builder.d.ts.map +1 -1
  53. package/dist/utils/tag-type-builder.js +122 -0
  54. package/dist/utils/tag-type-builder.js.map +1 -1
  55. package/dist/utils/tag-type-parser.d.ts +70 -0
  56. package/dist/utils/tag-type-parser.d.ts.map +1 -0
  57. package/dist/utils/tag-type-parser.js +190 -0
  58. package/dist/utils/tag-type-parser.js.map +1 -0
  59. package/examples/create-with-rpc-demo.ts +142 -0
  60. package/examples/fetch-all-flat-demo.ts +159 -0
  61. package/examples/fetch-by-indices-demo.ts +235 -0
  62. package/examples/fetch-domain-demo.ts +137 -0
  63. package/examples/fetch-domains-demo.ts +221 -0
  64. package/examples/frontend-demo/index.html +2 -2
  65. package/examples/frontend-demo/package-lock.json +4 -1
  66. package/examples/index.ts +3 -5
  67. package/jest.config.js +25 -0
  68. package/package.json +6 -2
  69. package/src/abi/TerminusDIDQueryABI.ts +516 -0
  70. package/src/business/index.ts +9 -33
  71. package/src/business/tag-context.ts +35 -7
  72. package/src/cli.ts +253 -90
  73. package/src/config/index.ts +34 -19
  74. package/src/domain/core.ts +382 -0
  75. package/src/domain/index.ts +271 -641
  76. package/src/domain/types.ts +59 -0
  77. package/src/index.ts +221 -207
  78. package/src/utils/crypto-utils.ts +205 -2
  79. package/src/utils/error-parser.ts +2 -1
  80. package/src/utils/event-parser.ts +353 -0
  81. package/src/utils/tag-type-builder.ts +138 -0
  82. package/src/utils/tag-type-parser.ts +246 -0
  83. package/tests/unit/crypto-utils.test.ts +338 -0
  84. package/tests/unit/ed25519-jwk.test.ts +201 -0
  85. package/tests/unit/event-parser.test.ts +690 -0
  86. package/tests/unit/generate-mnemonic.test.ts +268 -0
  87. package/tests/unit/olares-id-format.test.ts +321 -0
  88. package/tests/unit/tag-type-parser.test.ts +802 -0
  89. package/tests/unit/tag-types.test.ts +821 -0
  90. package/tsconfig.json +3 -2
  91. package/dist/abi/ABITypeABI.d.ts +0 -88
  92. package/dist/abi/ABITypeABI.d.ts.map +0 -1
  93. package/dist/abi/ABITypeABI.js +0 -382
  94. package/dist/abi/ABITypeABI.js.map +0 -1
  95. package/dist/abi/RegistryABI.d.ts +0 -77
  96. package/dist/abi/RegistryABI.d.ts.map +0 -1
  97. package/dist/abi/RegistryABI.js +0 -462
  98. package/dist/abi/RegistryABI.js.map +0 -1
  99. package/dist/tag/address.d.ts +0 -11
  100. package/dist/tag/address.d.ts.map +0 -1
  101. package/dist/tag/address.js +0 -44
  102. package/dist/tag/address.js.map +0 -1
  103. package/dist/tag/array.d.ts +0 -14
  104. package/dist/tag/array.d.ts.map +0 -1
  105. package/dist/tag/array.js +0 -72
  106. package/dist/tag/array.js.map +0 -1
  107. package/dist/tag/bool.d.ts +0 -11
  108. package/dist/tag/bool.d.ts.map +0 -1
  109. package/dist/tag/bool.js +0 -43
  110. package/dist/tag/bool.js.map +0 -1
  111. package/dist/tag/bytes.d.ts +0 -11
  112. package/dist/tag/bytes.d.ts.map +0 -1
  113. package/dist/tag/bytes.js +0 -37
  114. package/dist/tag/bytes.js.map +0 -1
  115. package/dist/tag/flarray.d.ts +0 -15
  116. package/dist/tag/flarray.d.ts.map +0 -1
  117. package/dist/tag/flarray.js +0 -81
  118. package/dist/tag/flarray.js.map +0 -1
  119. package/dist/tag/flbytes.d.ts +0 -11
  120. package/dist/tag/flbytes.d.ts.map +0 -1
  121. package/dist/tag/flbytes.js +0 -47
  122. package/dist/tag/flbytes.js.map +0 -1
  123. package/dist/tag/index.d.ts +0 -32
  124. package/dist/tag/index.d.ts.map +0 -1
  125. package/dist/tag/index.js +0 -121
  126. package/dist/tag/index.js.map +0 -1
  127. package/dist/tag/int.d.ts +0 -12
  128. package/dist/tag/int.d.ts.map +0 -1
  129. package/dist/tag/int.js +0 -49
  130. package/dist/tag/int.js.map +0 -1
  131. package/dist/tag/string.d.ts +0 -11
  132. package/dist/tag/string.d.ts.map +0 -1
  133. package/dist/tag/string.js +0 -37
  134. package/dist/tag/string.js.map +0 -1
  135. package/dist/tag/tag.d.ts +0 -67
  136. package/dist/tag/tag.d.ts.map +0 -1
  137. package/dist/tag/tag.js +0 -157
  138. package/dist/tag/tag.js.map +0 -1
  139. package/dist/tag/tuple.d.ts +0 -17
  140. package/dist/tag/tuple.d.ts.map +0 -1
  141. package/dist/tag/tuple.js +0 -162
  142. package/dist/tag/tuple.js.map +0 -1
  143. package/dist/tag/uint.d.ts +0 -12
  144. package/dist/tag/uint.d.ts.map +0 -1
  145. package/dist/tag/uint.js +0 -49
  146. package/dist/tag/uint.js.map +0 -1
  147. package/dist/test/did.d.ts +0 -2
  148. package/dist/test/did.d.ts.map +0 -1
  149. package/dist/test/did.js +0 -177
  150. package/dist/test/did.js.map +0 -1
  151. package/dist/utils/tag-abi-codec.d.ts +0 -69
  152. package/dist/utils/tag-abi-codec.d.ts.map +0 -1
  153. package/dist/utils/tag-abi-codec.js +0 -144
  154. package/dist/utils/tag-abi-codec.js.map +0 -1
  155. package/examples/crypto-utilities.ts +0 -140
  156. package/examples/ed25519-jwk.ts +0 -73
  157. package/examples/generate-mnemonic.ts +0 -149
  158. package/examples/legacy.ts +0 -33
  159. package/examples/olares-id-format.ts +0 -197
  160. package/examples/tag-builder.ts +0 -235
  161. package/examples/tag-nested-tuple.ts +0 -190
  162. package/examples/tag-simple.ts +0 -149
  163. package/examples/tag-tagger.ts +0 -217
  164. package/examples/test-nested-tuple-conversion.ts +0 -143
  165. package/examples/test-type-bytes-parser.ts +0 -70
  166. package/src/abi/ABITypeABI.ts +0 -379
  167. package/src/abi/RegistryABI.ts +0 -459
  168. package/src/tag/address.ts +0 -48
  169. package/src/tag/array.ts +0 -80
  170. package/src/tag/bool.ts +0 -43
  171. package/src/tag/bytes.ts +0 -38
  172. package/src/tag/flarray.ts +0 -99
  173. package/src/tag/flbytes.ts +0 -48
  174. package/src/tag/index.ts +0 -170
  175. package/src/tag/int.ts +0 -51
  176. package/src/tag/string.ts +0 -38
  177. package/src/tag/tag.ts +0 -229
  178. package/src/tag/tuple.ts +0 -193
  179. package/src/tag/uint.ts +0 -51
  180. package/src/test/did.ts +0 -346
  181. 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;
@@ -111,7 +111,9 @@ export class DomainContext {
111
111
  const [metadata, latestDID] = await Promise.all([
112
112
  didContract.getMetadata(tokenId),
113
113
  // Use catch to handle cases where latestDID is not set
114
- resolverContract.getLatestDID(this.domainName).catch(() => '')
114
+ resolverContract.getLatestDID(this.domainName).catch(() => {
115
+ return null;
116
+ })
115
117
  ]);
116
118
 
117
119
  // Use latestDID if it has a value, otherwise fallback to metadata.did
@@ -792,16 +794,8 @@ export class DomainContext {
792
794
  );
793
795
  addresses.push(...tagger2Addresses);
794
796
  } catch (error: any) {
795
- const errorInfo = parseContractError(error);
796
-
797
- // Only skip if it's a contract error (tag doesn't exist, etc.)
798
- // Re-throw network errors
799
- if (errorInfo.isNetworkError) {
800
- throw new Error(
801
- `Network error fetching from RootTagger2: ${errorInfo.message}`
802
- );
803
- }
804
- // Contract errors are silently handled (tag doesn't exist is normal)
797
+ const parsedError = parseContractError(error);
798
+ throw new Error(parsedError.message);
805
799
  }
806
800
 
807
801
  // Get addresses from RootResolver (legacy method for backward compatibility)
@@ -818,16 +812,8 @@ export class DomainContext {
818
812
  );
819
813
  addresses.push(...legacyAddresses);
820
814
  } catch (error: any) {
821
- const errorInfo = parseContractError(error);
822
-
823
- // Only skip if it's a contract error
824
- // Re-throw network errors
825
- if (errorInfo.isNetworkError) {
826
- throw new Error(
827
- `Network error fetching from RootResolver (legacy): ${errorInfo.message}`
828
- );
829
- }
830
- // Contract errors are silently handled
815
+ const parsedError = parseContractError(error);
816
+ throw new Error(parsedError.message);
831
817
  }
832
818
 
833
819
  // Remove duplicates and return
@@ -1122,18 +1108,8 @@ export class DomainContext {
1122
1108
  return new PublicKey(buffer).toBase58();
1123
1109
  });
1124
1110
  } catch (error: any) {
1125
- const errorInfo = parseContractError(error);
1126
-
1127
- // Only skip if it's a contract error (tag doesn't exist is normal)
1128
- // Re-throw network errors
1129
- if (errorInfo.isNetworkError) {
1130
- throw new Error(
1131
- `Network error fetching Solana wallets: ${errorInfo.message}`
1132
- );
1133
- }
1134
-
1135
- // For contract errors, return empty array (tag doesn't exist is normal)
1136
- return [];
1111
+ const parsedError = parseContractError(error);
1112
+ throw new Error(parsedError.message);
1137
1113
  }
1138
1114
  }
1139
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') {