@midnames/sdk 1.0.3 → 1.0.4

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 (312) hide show
  1. package/dist/provider.js +1 -1
  2. package/node_modules/@midnames/ns/package.json +14 -14
  3. package/package.json +13 -11
  4. package/node_modules/@midnames/ns/.env +0 -10
  5. package/node_modules/@midnames/ns/.env.example +0 -11
  6. package/node_modules/@midnames/ns/.turbo/turbo-build.log +0 -2
  7. package/node_modules/@midnames/ns/.turbo/turbo-test.log +0 -13
  8. package/node_modules/@midnames/ns/midnight-level-db/000005.ldb +0 -0
  9. package/node_modules/@midnames/ns/midnight-level-db/000008.ldb +0 -0
  10. package/node_modules/@midnames/ns/midnight-level-db/000011.ldb +0 -0
  11. package/node_modules/@midnames/ns/midnight-level-db/000014.ldb +0 -0
  12. package/node_modules/@midnames/ns/midnight-level-db/000019.ldb +0 -0
  13. package/node_modules/@midnames/ns/midnight-level-db/000024.ldb +0 -0
  14. package/node_modules/@midnames/ns/midnight-level-db/000031.ldb +0 -0
  15. package/node_modules/@midnames/ns/midnight-level-db/000034.ldb +0 -0
  16. package/node_modules/@midnames/ns/midnight-level-db/000037.ldb +0 -0
  17. package/node_modules/@midnames/ns/midnight-level-db/000040.ldb +0 -0
  18. package/node_modules/@midnames/ns/midnight-level-db/000045.ldb +0 -0
  19. package/node_modules/@midnames/ns/midnight-level-db/000050.ldb +0 -0
  20. package/node_modules/@midnames/ns/midnight-level-db/000059.ldb +0 -0
  21. package/node_modules/@midnames/ns/midnight-level-db/000064.ldb +0 -0
  22. package/node_modules/@midnames/ns/midnight-level-db/000069.ldb +0 -0
  23. package/node_modules/@midnames/ns/midnight-level-db/000074.ldb +0 -0
  24. package/node_modules/@midnames/ns/midnight-level-db/000083.ldb +0 -0
  25. package/node_modules/@midnames/ns/midnight-level-db/000088.ldb +0 -0
  26. package/node_modules/@midnames/ns/midnight-level-db/000093.ldb +0 -0
  27. package/node_modules/@midnames/ns/midnight-level-db/000098.ldb +0 -0
  28. package/node_modules/@midnames/ns/midnight-level-db/000107.ldb +0 -0
  29. package/node_modules/@midnames/ns/midnight-level-db/000112.ldb +0 -0
  30. package/node_modules/@midnames/ns/midnight-level-db/000121.ldb +0 -0
  31. package/node_modules/@midnames/ns/midnight-level-db/000126.ldb +0 -0
  32. package/node_modules/@midnames/ns/midnight-level-db/000135.ldb +0 -0
  33. package/node_modules/@midnames/ns/midnight-level-db/000140.ldb +0 -0
  34. package/node_modules/@midnames/ns/midnight-level-db/000149.ldb +0 -0
  35. package/node_modules/@midnames/ns/midnight-level-db/000154.ldb +0 -0
  36. package/node_modules/@midnames/ns/midnight-level-db/000163.ldb +0 -0
  37. package/node_modules/@midnames/ns/midnight-level-db/000168.ldb +0 -0
  38. package/node_modules/@midnames/ns/midnight-level-db/000177.ldb +0 -0
  39. package/node_modules/@midnames/ns/midnight-level-db/000182.ldb +0 -0
  40. package/node_modules/@midnames/ns/midnight-level-db/000187.ldb +0 -0
  41. package/node_modules/@midnames/ns/midnight-level-db/000192.ldb +0 -0
  42. package/node_modules/@midnames/ns/midnight-level-db/000201.ldb +0 -0
  43. package/node_modules/@midnames/ns/midnight-level-db/000206.ldb +0 -0
  44. package/node_modules/@midnames/ns/midnight-level-db/000215.ldb +0 -0
  45. package/node_modules/@midnames/ns/midnight-level-db/000220.ldb +0 -0
  46. package/node_modules/@midnames/ns/midnight-level-db/000229.ldb +0 -0
  47. package/node_modules/@midnames/ns/midnight-level-db/000234.ldb +0 -0
  48. package/node_modules/@midnames/ns/midnight-level-db/000243.ldb +0 -0
  49. package/node_modules/@midnames/ns/midnight-level-db/000248.ldb +0 -0
  50. package/node_modules/@midnames/ns/midnight-level-db/000257.ldb +0 -0
  51. package/node_modules/@midnames/ns/midnight-level-db/000262.ldb +0 -0
  52. package/node_modules/@midnames/ns/midnight-level-db/000271.ldb +0 -0
  53. package/node_modules/@midnames/ns/midnight-level-db/000276.ldb +0 -0
  54. package/node_modules/@midnames/ns/midnight-level-db/000281.ldb +0 -0
  55. package/node_modules/@midnames/ns/midnight-level-db/000286.ldb +0 -0
  56. package/node_modules/@midnames/ns/midnight-level-db/000295.ldb +0 -0
  57. package/node_modules/@midnames/ns/midnight-level-db/000300.ldb +0 -0
  58. package/node_modules/@midnames/ns/midnight-level-db/000305.ldb +0 -0
  59. package/node_modules/@midnames/ns/midnight-level-db/000310.ldb +0 -0
  60. package/node_modules/@midnames/ns/midnight-level-db/000313.log +0 -0
  61. package/node_modules/@midnames/ns/midnight-level-db/000319.ldb +0 -0
  62. package/node_modules/@midnames/ns/midnight-level-db/000324.ldb +0 -0
  63. package/node_modules/@midnames/ns/midnight-level-db/000329.ldb +0 -0
  64. package/node_modules/@midnames/ns/midnight-level-db/000334.ldb +0 -0
  65. package/node_modules/@midnames/ns/midnight-level-db/000343.ldb +0 -0
  66. package/node_modules/@midnames/ns/midnight-level-db/000348.ldb +0 -0
  67. package/node_modules/@midnames/ns/midnight-level-db/000357.ldb +0 -0
  68. package/node_modules/@midnames/ns/midnight-level-db/000362.ldb +0 -0
  69. package/node_modules/@midnames/ns/midnight-level-db/000371.ldb +0 -0
  70. package/node_modules/@midnames/ns/midnight-level-db/000376.ldb +0 -0
  71. package/node_modules/@midnames/ns/midnight-level-db/000385.ldb +0 -0
  72. package/node_modules/@midnames/ns/midnight-level-db/000390.ldb +0 -0
  73. package/node_modules/@midnames/ns/midnight-level-db/000393.log +0 -0
  74. package/node_modules/@midnames/ns/midnight-level-db/CURRENT +0 -1
  75. package/node_modules/@midnames/ns/midnight-level-db/LOCK +0 -0
  76. package/node_modules/@midnames/ns/midnight-level-db/LOG +0 -3
  77. package/node_modules/@midnames/ns/midnight-level-db/LOG.old +0 -6
  78. package/node_modules/@midnames/ns/midnight-level-db/MANIFEST-000312 +0 -0
  79. package/node_modules/@midnames/ns/midnight-level-db/MANIFEST-000392 +0 -0
  80. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/README.md +0 -32
  81. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/built-ins.d.ts +0 -133
  82. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/built-ins.js +0 -216
  83. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/built-ins.js.map +0 -1
  84. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/casts.d.ts +0 -15
  85. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/casts.js +0 -65
  86. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/casts.js.map +0 -1
  87. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/circuit-context.d.ts +0 -66
  88. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/circuit-context.js +0 -150
  89. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/circuit-context.js.map +0 -1
  90. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/compact-types.d.ts +0 -209
  91. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/compact-types.js +0 -374
  92. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/compact-types.js.map +0 -1
  93. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/constants.d.ts +0 -13
  94. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/constants.js +0 -29
  95. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/constants.js.map +0 -1
  96. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/constructor-context.d.ts +0 -39
  97. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/constructor-context.js +0 -26
  98. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/constructor-context.js.map +0 -1
  99. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/contract-dependencies.d.ts +0 -175
  100. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/contract-dependencies.js +0 -288
  101. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/contract-dependencies.js.map +0 -1
  102. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/error.d.ts +0 -16
  103. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/error.js +0 -43
  104. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/error.js.map +0 -1
  105. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/index.d.ts +0 -15
  106. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/index.js +0 -30
  107. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/index.js.map +0 -1
  108. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/proof-data.d.ts +0 -27
  109. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/proof-data.js +0 -16
  110. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/proof-data.js.map +0 -1
  111. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/utils.d.ts +0 -19
  112. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/utils.js +0 -41
  113. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/utils.js.map +0 -1
  114. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/version.d.ts +0 -2
  115. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/version.js +0 -18
  116. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/version.js.map +0 -1
  117. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/witness.d.ts +0 -24
  118. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/witness.js +0 -26
  119. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/witness.js.map +0 -1
  120. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/zswap.d.ts +0 -172
  121. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/zswap.js +0 -141
  122. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/dist/zswap.js.map +0 -1
  123. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/compact-runtime/package.json +0 -57
  124. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/ledger-v8.d.ts +0 -3079
  125. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/midnight_ledger_wasm.js +0 -5
  126. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/midnight_ledger_wasm_bg.js +0 -10056
  127. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/midnight_ledger_wasm_bg.wasm +0 -0
  128. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/midnight_ledger_wasm_fs.js +0 -69
  129. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/package-lock.json +0 -12
  130. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/package.json +0 -34
  131. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline0.js +0 -1
  132. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline1.js +0 -1
  133. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline10.js +0 -1
  134. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline11.js +0 -1
  135. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline12.js +0 -1
  136. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline13.js +0 -1
  137. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline14.js +0 -1
  138. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline15.js +0 -1
  139. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline16.js +0 -1
  140. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline17.js +0 -1
  141. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline18.js +0 -1
  142. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline19.js +0 -1
  143. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline2.js +0 -1
  144. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline20.js +0 -1
  145. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline21.js +0 -1
  146. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline22.js +0 -1
  147. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline23.js +0 -1
  148. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline3.js +0 -1
  149. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline4.js +0 -1
  150. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline5.js +0 -1
  151. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline6.js +0 -1
  152. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline7.js +0 -1
  153. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline8.js +0 -1
  154. package/node_modules/@midnames/ns/node_modules/@midnight-ntwrk/ledger-v8/snippets/midnight-ledger-wasm-a0cc58108d931982/inline9.js +0 -1
  155. package/node_modules/@midnames/ns/reports/report.xml +0 -33
  156. package/node_modules/@midnames/ns/src/index.ts +0 -13
  157. package/node_modules/@midnames/ns/src/leaf.compact +0 -290
  158. package/node_modules/@midnames/ns/src/managed/leaf/compiler/contract-info.json +0 -534
  159. package/node_modules/@midnames/ns/src/managed/leaf/contract/index.d.ts +0 -197
  160. package/node_modules/@midnames/ns/src/managed/leaf/contract/index.js +0 -3094
  161. package/node_modules/@midnames/ns/src/managed/leaf/contract/index.js.map +0 -8
  162. package/node_modules/@midnames/ns/src/managed/leaf/keys/add_multiple_fields.prover +0 -0
  163. package/node_modules/@midnames/ns/src/managed/leaf/keys/add_multiple_fields.verifier +0 -0
  164. package/node_modules/@midnames/ns/src/managed/leaf/keys/buy_domain_for.prover +0 -0
  165. package/node_modules/@midnames/ns/src/managed/leaf/keys/buy_domain_for.verifier +0 -0
  166. package/node_modules/@midnames/ns/src/managed/leaf/keys/change_owner.prover +0 -0
  167. package/node_modules/@midnames/ns/src/managed/leaf/keys/change_owner.verifier +0 -0
  168. package/node_modules/@midnames/ns/src/managed/leaf/keys/clear_all_fields.prover +0 -0
  169. package/node_modules/@midnames/ns/src/managed/leaf/keys/clear_all_fields.verifier +0 -0
  170. package/node_modules/@midnames/ns/src/managed/leaf/keys/clear_field.prover +0 -0
  171. package/node_modules/@midnames/ns/src/managed/leaf/keys/clear_field.verifier +0 -0
  172. package/node_modules/@midnames/ns/src/managed/leaf/keys/insert_field.prover +0 -0
  173. package/node_modules/@midnames/ns/src/managed/leaf/keys/insert_field.verifier +0 -0
  174. package/node_modules/@midnames/ns/src/managed/leaf/keys/register_domain_for.prover +0 -0
  175. package/node_modules/@midnames/ns/src/managed/leaf/keys/register_domain_for.verifier +0 -0
  176. package/node_modules/@midnames/ns/src/managed/leaf/keys/set_resolver.prover +0 -0
  177. package/node_modules/@midnames/ns/src/managed/leaf/keys/set_resolver.verifier +0 -0
  178. package/node_modules/@midnames/ns/src/managed/leaf/keys/transfer_domain.prover +0 -0
  179. package/node_modules/@midnames/ns/src/managed/leaf/keys/transfer_domain.verifier +0 -0
  180. package/node_modules/@midnames/ns/src/managed/leaf/keys/update_color.prover +0 -0
  181. package/node_modules/@midnames/ns/src/managed/leaf/keys/update_color.verifier +0 -0
  182. package/node_modules/@midnames/ns/src/managed/leaf/keys/update_costs.prover +0 -0
  183. package/node_modules/@midnames/ns/src/managed/leaf/keys/update_costs.verifier +0 -0
  184. package/node_modules/@midnames/ns/src/managed/leaf/keys/update_domain_target.prover +0 -0
  185. package/node_modules/@midnames/ns/src/managed/leaf/keys/update_domain_target.verifier +0 -0
  186. package/node_modules/@midnames/ns/src/managed/leaf/keys/update_target_and_fields.prover +0 -0
  187. package/node_modules/@midnames/ns/src/managed/leaf/keys/update_target_and_fields.verifier +0 -0
  188. package/node_modules/@midnames/ns/src/managed/leaf/zkir/add_multiple_fields.bzkir +0 -0
  189. package/node_modules/@midnames/ns/src/managed/leaf/zkir/add_multiple_fields.zkir +0 -424
  190. package/node_modules/@midnames/ns/src/managed/leaf/zkir/buy_domain_for.bzkir +0 -0
  191. package/node_modules/@midnames/ns/src/managed/leaf/zkir/buy_domain_for.zkir +0 -1456
  192. package/node_modules/@midnames/ns/src/managed/leaf/zkir/change_owner.bzkir +0 -0
  193. package/node_modules/@midnames/ns/src/managed/leaf/zkir/change_owner.zkir +0 -57
  194. package/node_modules/@midnames/ns/src/managed/leaf/zkir/clear_all_fields.bzkir +0 -0
  195. package/node_modules/@midnames/ns/src/managed/leaf/zkir/clear_all_fields.zkir +0 -53
  196. package/node_modules/@midnames/ns/src/managed/leaf/zkir/clear_field.bzkir +0 -0
  197. package/node_modules/@midnames/ns/src/managed/leaf/zkir/clear_field.zkir +0 -58
  198. package/node_modules/@midnames/ns/src/managed/leaf/zkir/insert_field.bzkir +0 -0
  199. package/node_modules/@midnames/ns/src/managed/leaf/zkir/insert_field.zkir +0 -65
  200. package/node_modules/@midnames/ns/src/managed/leaf/zkir/register_domain_for.bzkir +0 -0
  201. package/node_modules/@midnames/ns/src/managed/leaf/zkir/register_domain_for.zkir +0 -401
  202. package/node_modules/@midnames/ns/src/managed/leaf/zkir/set_resolver.bzkir +0 -0
  203. package/node_modules/@midnames/ns/src/managed/leaf/zkir/set_resolver.zkir +0 -109
  204. package/node_modules/@midnames/ns/src/managed/leaf/zkir/transfer_domain.bzkir +0 -0
  205. package/node_modules/@midnames/ns/src/managed/leaf/zkir/transfer_domain.zkir +0 -212
  206. package/node_modules/@midnames/ns/src/managed/leaf/zkir/update_color.bzkir +0 -0
  207. package/node_modules/@midnames/ns/src/managed/leaf/zkir/update_color.zkir +0 -58
  208. package/node_modules/@midnames/ns/src/managed/leaf/zkir/update_costs.bzkir +0 -0
  209. package/node_modules/@midnames/ns/src/managed/leaf/zkir/update_costs.zkir +0 -88
  210. package/node_modules/@midnames/ns/src/managed/leaf/zkir/update_domain_target.bzkir +0 -0
  211. package/node_modules/@midnames/ns/src/managed/leaf/zkir/update_domain_target.zkir +0 -66
  212. package/node_modules/@midnames/ns/src/managed/leaf/zkir/update_target_and_fields.bzkir +0 -0
  213. package/node_modules/@midnames/ns/src/managed/leaf/zkir/update_target_and_fields.zkir +0 -450
  214. package/node_modules/@midnames/ns/src/test/batch-config.ts +0 -13
  215. package/node_modules/@midnames/ns/src/test/batch-deploy.ts +0 -914
  216. package/node_modules/@midnames/ns/src/test/contract.ts +0 -1228
  217. package/node_modules/@midnames/ns/src/test/derive_seed.ts +0 -102
  218. package/node_modules/@midnames/ns/src/test/example-deploy.config.ts +0 -76
  219. package/node_modules/@midnames/ns/src/test/midnight-level-db/000005.ldb +0 -0
  220. package/node_modules/@midnames/ns/src/test/midnight-level-db/000011.ldb +0 -0
  221. package/node_modules/@midnames/ns/src/test/midnight-level-db/000014.ldb +0 -0
  222. package/node_modules/@midnames/ns/src/test/midnight-level-db/000025.ldb +0 -0
  223. package/node_modules/@midnames/ns/src/test/midnight-level-db/000039.ldb +0 -0
  224. package/node_modules/@midnames/ns/src/test/midnight-level-db/000049.ldb +0 -0
  225. package/node_modules/@midnames/ns/src/test/midnight-level-db/000064.ldb +0 -0
  226. package/node_modules/@midnames/ns/src/test/midnight-level-db/000078.ldb +0 -0
  227. package/node_modules/@midnames/ns/src/test/midnight-level-db/000092.ldb +0 -0
  228. package/node_modules/@midnames/ns/src/test/midnight-level-db/000106.ldb +0 -0
  229. package/node_modules/@midnames/ns/src/test/midnight-level-db/000121.ldb +0 -0
  230. package/node_modules/@midnames/ns/src/test/midnight-level-db/000135.ldb +0 -0
  231. package/node_modules/@midnames/ns/src/test/midnight-level-db/000146.ldb +0 -0
  232. package/node_modules/@midnames/ns/src/test/midnight-level-db/000160.ldb +0 -0
  233. package/node_modules/@midnames/ns/src/test/midnight-level-db/000174.ldb +0 -0
  234. package/node_modules/@midnames/ns/src/test/midnight-level-db/000188.ldb +0 -0
  235. package/node_modules/@midnames/ns/src/test/midnight-level-db/000203.ldb +0 -0
  236. package/node_modules/@midnames/ns/src/test/midnight-level-db/000217.ldb +0 -0
  237. package/node_modules/@midnames/ns/src/test/midnight-level-db/000232.ldb +0 -0
  238. package/node_modules/@midnames/ns/src/test/midnight-level-db/000242.ldb +0 -0
  239. package/node_modules/@midnames/ns/src/test/midnight-level-db/000256.ldb +0 -0
  240. package/node_modules/@midnames/ns/src/test/midnight-level-db/000263.ldb +0 -0
  241. package/node_modules/@midnames/ns/src/test/midnight-level-db/000267.ldb +0 -0
  242. package/node_modules/@midnames/ns/src/test/midnight-level-db/000276.ldb +0 -0
  243. package/node_modules/@midnames/ns/src/test/midnight-level-db/000281.ldb +0 -0
  244. package/node_modules/@midnames/ns/src/test/midnight-level-db/000286.ldb +0 -0
  245. package/node_modules/@midnames/ns/src/test/midnight-level-db/000291.ldb +0 -0
  246. package/node_modules/@midnames/ns/src/test/midnight-level-db/000300.ldb +0 -0
  247. package/node_modules/@midnames/ns/src/test/midnight-level-db/000305.ldb +0 -0
  248. package/node_modules/@midnames/ns/src/test/midnight-level-db/000314.ldb +0 -0
  249. package/node_modules/@midnames/ns/src/test/midnight-level-db/000319.ldb +0 -0
  250. package/node_modules/@midnames/ns/src/test/midnight-level-db/000328.ldb +0 -0
  251. package/node_modules/@midnames/ns/src/test/midnight-level-db/000333.ldb +0 -0
  252. package/node_modules/@midnames/ns/src/test/midnight-level-db/000342.ldb +0 -0
  253. package/node_modules/@midnames/ns/src/test/midnight-level-db/000347.ldb +0 -0
  254. package/node_modules/@midnames/ns/src/test/midnight-level-db/000356.ldb +0 -0
  255. package/node_modules/@midnames/ns/src/test/midnight-level-db/000361.ldb +0 -0
  256. package/node_modules/@midnames/ns/src/test/midnight-level-db/000370.ldb +0 -0
  257. package/node_modules/@midnames/ns/src/test/midnight-level-db/000375.ldb +0 -0
  258. package/node_modules/@midnames/ns/src/test/midnight-level-db/000380.ldb +0 -0
  259. package/node_modules/@midnames/ns/src/test/midnight-level-db/000385.ldb +0 -0
  260. package/node_modules/@midnames/ns/src/test/midnight-level-db/000392.ldb +0 -0
  261. package/node_modules/@midnames/ns/src/test/midnight-level-db/000397.ldb +0 -0
  262. package/node_modules/@midnames/ns/src/test/midnight-level-db/000400.ldb +0 -0
  263. package/node_modules/@midnames/ns/src/test/midnight-level-db/000403.ldb +0 -0
  264. package/node_modules/@midnames/ns/src/test/midnight-level-db/000408.ldb +0 -0
  265. package/node_modules/@midnames/ns/src/test/midnight-level-db/000413.ldb +0 -0
  266. package/node_modules/@midnames/ns/src/test/midnight-level-db/000422.ldb +0 -0
  267. package/node_modules/@midnames/ns/src/test/midnight-level-db/000427.ldb +0 -0
  268. package/node_modules/@midnames/ns/src/test/midnight-level-db/000432.ldb +0 -0
  269. package/node_modules/@midnames/ns/src/test/midnight-level-db/000437.ldb +0 -0
  270. package/node_modules/@midnames/ns/src/test/midnight-level-db/000446.ldb +0 -0
  271. package/node_modules/@midnames/ns/src/test/midnight-level-db/000451.ldb +0 -0
  272. package/node_modules/@midnames/ns/src/test/midnight-level-db/000456.ldb +0 -0
  273. package/node_modules/@midnames/ns/src/test/midnight-level-db/000461.ldb +0 -0
  274. package/node_modules/@midnames/ns/src/test/midnight-level-db/000470.ldb +0 -0
  275. package/node_modules/@midnames/ns/src/test/midnight-level-db/000475.ldb +0 -0
  276. package/node_modules/@midnames/ns/src/test/midnight-level-db/000480.ldb +0 -0
  277. package/node_modules/@midnames/ns/src/test/midnight-level-db/000485.ldb +0 -0
  278. package/node_modules/@midnames/ns/src/test/midnight-level-db/000494.ldb +0 -0
  279. package/node_modules/@midnames/ns/src/test/midnight-level-db/000499.ldb +0 -0
  280. package/node_modules/@midnames/ns/src/test/midnight-level-db/000504.ldb +0 -0
  281. package/node_modules/@midnames/ns/src/test/midnight-level-db/000509.ldb +0 -0
  282. package/node_modules/@midnames/ns/src/test/midnight-level-db/000518.ldb +0 -0
  283. package/node_modules/@midnames/ns/src/test/midnight-level-db/000523.ldb +0 -0
  284. package/node_modules/@midnames/ns/src/test/midnight-level-db/000528.ldb +0 -0
  285. package/node_modules/@midnames/ns/src/test/midnight-level-db/000533.ldb +0 -0
  286. package/node_modules/@midnames/ns/src/test/midnight-level-db/000542.ldb +0 -0
  287. package/node_modules/@midnames/ns/src/test/midnight-level-db/000547.ldb +0 -0
  288. package/node_modules/@midnames/ns/src/test/midnight-level-db/000552.ldb +0 -0
  289. package/node_modules/@midnames/ns/src/test/midnight-level-db/000557.ldb +0 -0
  290. package/node_modules/@midnames/ns/src/test/midnight-level-db/000566.ldb +0 -0
  291. package/node_modules/@midnames/ns/src/test/midnight-level-db/000571.ldb +0 -0
  292. package/node_modules/@midnames/ns/src/test/midnight-level-db/000576.ldb +0 -0
  293. package/node_modules/@midnames/ns/src/test/midnight-level-db/000581.ldb +0 -0
  294. package/node_modules/@midnames/ns/src/test/midnight-level-db/000590.ldb +0 -0
  295. package/node_modules/@midnames/ns/src/test/midnight-level-db/000595.ldb +0 -0
  296. package/node_modules/@midnames/ns/src/test/midnight-level-db/000600.ldb +0 -0
  297. package/node_modules/@midnames/ns/src/test/midnight-level-db/000605.ldb +0 -0
  298. package/node_modules/@midnames/ns/src/test/midnight-level-db/000608.log +0 -0
  299. package/node_modules/@midnames/ns/src/test/midnight-level-db/CURRENT +0 -1
  300. package/node_modules/@midnames/ns/src/test/midnight-level-db/LOCK +0 -0
  301. package/node_modules/@midnames/ns/src/test/midnight-level-db/LOG +0 -3
  302. package/node_modules/@midnames/ns/src/test/midnight-level-db/LOG.old +0 -6
  303. package/node_modules/@midnames/ns/src/test/midnight-level-db/MANIFEST-000607 +0 -0
  304. package/node_modules/@midnames/ns/src/test/ns-simulator.ts +0 -115
  305. package/node_modules/@midnames/ns/src/test/ns.test.ts +0 -132
  306. package/node_modules/@midnames/ns/src/test/profile-fields.ts +0 -148
  307. package/node_modules/@midnames/ns/src/test/wallet.ts +0 -289
  308. package/node_modules/@midnames/ns/src/utils.ts +0 -16
  309. package/node_modules/@midnames/ns/src/witnesses.ts +0 -6
  310. package/node_modules/@midnames/ns/tsconfig.build.json +0 -5
  311. package/node_modules/@midnames/ns/tsconfig.json +0 -12
  312. package/node_modules/@midnames/ns/vitest.config.ts +0 -30
@@ -1,1228 +0,0 @@
1
- import { type Wallet } from "@midnight-ntwrk/wallet-api";
2
- import {
3
- createCoinInfo,
4
- encodeContractAddress,
5
- nativeToken,
6
- } from "@midnight-ntwrk/ledger";
7
- import * as whd from "@midnight-ntwrk/wallet-sdk-hd";
8
- import {
9
- getZswapNetworkId,
10
- NetworkId,
11
- setNetworkId,
12
- } from "@midnight-ntwrk/midnight-js-network-id";
13
- import { type Resource } from "@midnight-ntwrk/wallet";
14
- import {
15
- findDeployedContract,
16
- deployContract,
17
- type ContractProviders,
18
- } from "@midnight-ntwrk/midnight-js-contracts";
19
- import {
20
- MidnightBech32m,
21
- ShieldedCoinPublicKey,
22
- } from "@midnight-ntwrk/wallet-sdk-address-format";
23
-
24
- import { CompiledContract } from "@midnight-ntwrk/compact-js";
25
- import { Leaf } from "../../dist";
26
- import { witnesses } from "../../dist/witnesses";
27
-
28
- // Import MidnamesSDK
29
- import {
30
- resolveDomain,
31
- getDomainProfile,
32
- getDomainInfo,
33
- getDomainFields,
34
- getDomainSettings,
35
- // Import operations
36
- insertField as sdkInsertField,
37
- clearField as sdkClearField,
38
- clearAllFields as sdkClearAllFields,
39
- addMultipleFields as sdkAddMultipleFields,
40
- updateDomainTarget as sdkUpdateDomainTarget,
41
- updateDomainCost as sdkUpdateDomainCost,
42
- updateDomainColor as sdkUpdateDomainColor,
43
- registerDomainFor as sdkRegisterDomainFor,
44
- buyDomainFor as sdkBuyDomainFor,
45
- type Result,
46
- } from "../../../midnames-sdk";
47
- import { indexerPublicDataProvider } from "@midnight-ntwrk/midnight-js-indexer-public-data-provider";
48
-
49
- import { type Logger } from "pino";
50
- import pinoPretty from "pino-pretty";
51
- import pino from "pino";
52
- import * as bip39 from "@scure/bip39";
53
- import { wordlist as english } from "@scure/bip39/wordlists/english";
54
-
55
- // Import configurations and helper functions from full.ts
56
- import {
57
- type Config,
58
- TestnetConfig,
59
- StandaloneConfig,
60
- buildWalletAndWaitForFunds,
61
- configureProviders,
62
- } from "./full";
63
-
64
- // JSON output mode detection
65
- const isJSONMode = process.env.OUTPUT_MODE === 'json';
66
-
67
- // Logger setup - suppress output in JSON mode
68
- const logger: Logger = isJSONMode
69
- ? pino({ level: 'silent' }) // Silent in JSON mode
70
- : pino(
71
- {
72
- level:
73
- process.env.DEBUG_LEVEL !== undefined &&
74
- process.env.DEBUG_LEVEL !== null &&
75
- process.env.DEBUG_LEVEL !== ""
76
- ? process.env.DEBUG_LEVEL
77
- : "info",
78
- depthLimit: 20,
79
- },
80
- pinoPretty({
81
- colorize: true,
82
- sync: true,
83
- customColors: {
84
- debug: "green",
85
- },
86
- })
87
- );
88
-
89
- // Leaf contract instance - need zkConfigPath for CompiledContract
90
- const contractZkConfigPath = new URL("../../dist/managed/leaf", import.meta.url).pathname;
91
- const leafContractInstance = CompiledContract.make("leaf-contract", Leaf.Contract).pipe(
92
- CompiledContract.withWitnesses(witnesses),
93
- CompiledContract.withCompiledFileAssets(contractZkConfigPath),
94
- );
95
-
96
- // Helper function to convert BIP39 mnemonic to seed using HD derivation
97
- async function mnemonicToSeed(mnemonic: string): Promise<string> {
98
- if (!bip39.validateMnemonic(mnemonic, english)) {
99
- throw new Error("Invalid BIP39 mnemonic");
100
- }
101
-
102
- // Convert mnemonic to BIP39 seed (512 bits)
103
- const bip39Seed = await bip39.mnemonicToSeed(mnemonic, ""); // Empty passphrase
104
-
105
- // Use HD derivation with Midnight's path: m/44'/2400'/0'/3/0 (Zswap role)
106
- const hdWalletResult = whd.HDWallet.fromSeed(bip39Seed);
107
-
108
- if (hdWalletResult.type !== 'seedOk') {
109
- throw new Error(`Failed to create HD wallet: ${hdWalletResult.error}`);
110
- }
111
-
112
- // Derive key for Zswap role (role 3, index 0)
113
- const derivationResult = hdWalletResult.hdWallet
114
- .selectAccount(0)
115
- .selectRole(whd.Roles.Zswap) // Role 3
116
- .deriveKeyAt(0);
117
-
118
- if (derivationResult.type !== 'keyDerived') {
119
- throw new Error("Failed to derive key");
120
- }
121
-
122
- // Convert to hex string (32 bytes)
123
- return Buffer.from(derivationResult.key).toString('hex');
124
- }
125
-
126
- // Helper function to get seed from environment or parameter
127
- async function getSeedFromEnv(): Promise<string> {
128
- const seedEnv = process.env.SEED;
129
- if (!seedEnv) {
130
- throw new Error("SEED environment variable is required");
131
- }
132
-
133
- // Check if it's a hex seed (64 chars) or BIP39 mnemonic
134
- if (/^[0-9a-fA-F]{64}$/.test(seedEnv)) {
135
- // It's already a hex seed
136
- return seedEnv;
137
- } else {
138
- // Assume it's a BIP39 mnemonic
139
- return await mnemonicToSeed(seedEnv);
140
- }
141
- }
142
-
143
- // Helper function to determine if a command is read-only (doesn't need wallet)
144
- function isReadOnlyCommand(command: string): boolean {
145
- const readOnlyCommands = ['query', 'resolve', 'info', 'fields', 'settings'];
146
- return readOnlyCommands.includes(command);
147
- }
148
-
149
- // Helper function to parse domain string and validate format
150
- function parseDomainName(domain: string): { domainName: string; parentDomain: string; isValid: boolean } {
151
- const parts = domain.split('.');
152
- if (parts.length < 2 || parts[parts.length - 1] !== 'night') {
153
- return { domainName: '', parentDomain: '', isValid: false };
154
- }
155
-
156
- if (parts.length === 2) {
157
- // Top-level domain like "domain.night"
158
- return {
159
- domainName: parts[0],
160
- parentDomain: 'night',
161
- isValid: true
162
- };
163
- } else {
164
- // Subdomain like "sub.domain.night"
165
- return {
166
- domainName: parts[0],
167
- parentDomain: parts.slice(1).join('.'),
168
- isValid: true
169
- };
170
- }
171
- }
172
-
173
- // Helper function to get domain's resolver contract address using SDK
174
- async function getDomainResolverAddress(
175
- publicDataProvider: any,
176
- fullDomain: string
177
- ): Promise<string | null> {
178
- try {
179
- // Use the SDK's domain profile to get the contract address
180
- const result = await getDomainProfile(fullDomain, { provider: publicDataProvider });
181
- if (!result.success) {
182
- return null;
183
- }
184
- return result.data.info?.resolver || null;
185
- } catch {
186
- return null;
187
- }
188
- }
189
-
190
- // Helper function to create a valid CoinInfo for payment
191
- function createPaymentCoin(value: bigint = 1n) {
192
- const coinInfo = createCoinInfo(nativeToken(), value);
193
- return {
194
- nonce: new Uint8Array(Buffer.from(coinInfo.nonce, 'hex')),
195
- color: encodeContractAddress(nativeToken()),
196
- value: coinInfo.value,
197
- };
198
- }
199
-
200
- // Helper function to parse address
201
- function parseAddress(address: string): { bytes: Uint8Array } {
202
- const bech32Parsed = MidnightBech32m.parse(address);
203
- const coinPublicKey = ShieldedCoinPublicKey.codec.decode(
204
- getZswapNetworkId(),
205
- bech32Parsed
206
- );
207
- return { bytes: new Uint8Array(coinPublicKey.data) };
208
- }
209
-
210
- // Helper function to parse contract addresses properly
211
- function parseContractAddress(address: string): { bytes: Uint8Array } {
212
- let hexString: string;
213
-
214
- if (address.startsWith("0200")) {
215
- // SDK format: remove "0200" prefix
216
- hexString = address.slice(4);
217
- } else if (address.startsWith("0x")) {
218
- // Hex format: remove "0x" prefix
219
- hexString = address.slice(2);
220
- } else {
221
- // Assume raw hex
222
- hexString = address;
223
- }
224
-
225
- const bytes = new Uint8Array(Buffer.from(hexString, "hex"));
226
- // Ensure exactly 32 bytes
227
- return { bytes: bytes.length === 32 ? bytes : bytes.subarray(-32) };
228
- }
229
-
230
- // Helper function to parse target (wallet or contract address)
231
- function parseTarget(target: string): { tag: "Left"; value: { bytes: Uint8Array } } | { tag: "Right"; value: string } {
232
- if (target.startsWith("0x") || target.startsWith("02")) {
233
- // Contract address
234
- return {
235
- tag: "Right",
236
- value: target
237
- };
238
- } else {
239
- // Wallet address
240
- return {
241
- tag: "Left",
242
- value: parseAddress(target)
243
- };
244
- }
245
- }
246
-
247
- // Helper to handle SDK Results
248
- function handleResult<T>(result: Result<T>, context: string): T {
249
- if (!result.success) {
250
- throw new Error(`${context}: ${result.error.message}`);
251
- }
252
- return result.data;
253
- }
254
-
255
- // JSON output helpers
256
- interface JSONResponse {
257
- success: boolean;
258
- command: string;
259
- domain?: string;
260
- data?: any;
261
- error?: string;
262
- metadata: {
263
- network?: string;
264
- timestamp: string;
265
- };
266
- }
267
-
268
- function createJSONResponse(
269
- success: boolean,
270
- command: string,
271
- domain?: string,
272
- data?: any,
273
- error?: string,
274
- network?: string
275
- ): JSONResponse {
276
- return {
277
- success,
278
- command,
279
- domain,
280
- data: data || null,
281
- error: error || null,
282
- metadata: {
283
- network,
284
- timestamp: new Date().toISOString()
285
- }
286
- };
287
- }
288
-
289
- function outputJSON(response: JSONResponse) {
290
- console.log(JSON.stringify(response, null, 2));
291
- }
292
-
293
- function logOrCollect(message: string, data?: any) {
294
- if (!isJSONMode) {
295
- if (data) {
296
- logger.info(message, data);
297
- } else {
298
- logger.info(message);
299
- }
300
- }
301
- // In JSON mode, we collect data and output at the end
302
- }
303
-
304
- // Helper to join a domain's contract
305
- async function joinDomainContract(
306
- providers: ContractProviders<typeof leafContractInstance>,
307
- domainContractAddress: string
308
- ) {
309
- return await findDeployedContract(providers, {
310
- contractAddress: domainContractAddress,
311
- contract: leafContractInstance,
312
- privateStateId: "namespacePrivateState",
313
- initialPrivateState: { phantom: false },
314
- });
315
- }
316
-
317
- // =========================================
318
- // QUERY COMMANDS
319
- // =========================================
320
-
321
- async function queryDomain(
322
- publicDataProvider: any,
323
- fullDomain: string,
324
- networkType?: string
325
- ) {
326
- logOrCollect(`Querying domain: ${fullDomain}`);
327
-
328
- const result = await getDomainProfile(fullDomain, { provider: publicDataProvider });
329
- const profile = handleResult(result, "Get domain profile");
330
-
331
- if (isJSONMode) {
332
- // Format data for JSON output
333
- const jsonData = {
334
- domain: profile.fullDomain,
335
- resolvedTarget: profile.resolvedTarget || null,
336
- info: profile.info || null,
337
- settings: profile.settings ? {
338
- coinColor: `0x${Buffer.from(profile.settings.coinColor).toString('hex')}`,
339
- costs: {
340
- short: profile.settings.costs.short.toString(),
341
- medium: profile.settings.costs.medium.toString(),
342
- long: profile.settings.costs.long.toString(),
343
- }
344
- } : null,
345
- fields: profile.fields.length > 0 ? Object.fromEntries(profile.fields) : {}
346
- };
347
-
348
- return createJSONResponse(true, "query", fullDomain, jsonData, undefined, networkType);
349
- } else {
350
- // Original logger output
351
- logger.info(`=== Domain Profile: ${profile.fullDomain} ===`);
352
- logger.info(`Resolved Target: ${profile.resolvedTarget || 'N/A'}`);
353
-
354
- if (profile.info) {
355
- logger.info(`Owner: ${profile.info.owner}`);
356
- logger.info(`Resolver: ${profile.info.resolver}`);
357
- if (profile.info.contractAddress) {
358
- logger.info(`Contract Address: ${profile.info.contractAddress}`);
359
- }
360
- }
361
-
362
- if (profile.settings) {
363
- logger.info(`Coin Color: 0x${Buffer.from(profile.settings.coinColor).toString('hex')}`);
364
- logger.info(`Domain Costs: short=${profile.settings.costs.short}, medium=${profile.settings.costs.medium}, long=${profile.settings.costs.long}`);
365
- }
366
-
367
- logger.info(`\n=== Domain Fields ===`);
368
- if (profile.fields.length > 0) {
369
- for (const [key, value] of profile.fields) {
370
- logger.info(`${key}: ${value}`);
371
- }
372
- } else {
373
- logger.info("No fields set");
374
- }
375
-
376
- return profile;
377
- }
378
- }
379
-
380
- async function resolveDomainCommand(
381
- publicDataProvider: any,
382
- fullDomain: string,
383
- networkType?: string
384
- ) {
385
- logOrCollect(`Resolving domain: ${fullDomain}`);
386
-
387
- const result = await resolveDomain(fullDomain, { provider: publicDataProvider });
388
- const target = handleResult(result, "Resolve domain");
389
-
390
- if (isJSONMode) {
391
- const jsonData = {
392
- domain: fullDomain,
393
- target: target
394
- };
395
- return createJSONResponse(true, "resolve", fullDomain, jsonData, undefined, networkType);
396
- } else {
397
- logger.info(`${fullDomain} → ${target}`);
398
- return target;
399
- }
400
- }
401
-
402
- async function getDomainInfo(
403
- publicDataProvider: any,
404
- fullDomain: string,
405
- networkType?: string
406
- ) {
407
- logOrCollect(`Getting domain info: ${fullDomain}`);
408
-
409
- const result = await getDomainInfo(fullDomain, { provider: publicDataProvider });
410
- const info = handleResult(result, "Get domain info");
411
-
412
- if (isJSONMode) {
413
- return createJSONResponse(true, "info", fullDomain, info, undefined, networkType);
414
- } else {
415
- logger.info(`Domain: ${fullDomain}`);
416
- logger.info(`Owner: ${info.owner}`);
417
- logger.info(`Resolver: ${info.resolver}`);
418
- if (info.contractAddress) {
419
- logger.info(`Contract Address: ${info.contractAddress}`);
420
- }
421
- return info;
422
- }
423
- }
424
-
425
- async function getDomainFieldsCommand(
426
- publicDataProvider: any,
427
- fullDomain: string,
428
- networkType?: string
429
- ) {
430
- logOrCollect(`Getting domain fields: ${fullDomain}`);
431
-
432
- const result = await getDomainFields(fullDomain, { provider: publicDataProvider });
433
- const fields = handleResult(result, "Get domain fields");
434
-
435
- if (isJSONMode) {
436
- const jsonData = {
437
- domain: fullDomain,
438
- fields: fields.length > 0 ? Object.fromEntries(fields) : {}
439
- };
440
- return createJSONResponse(true, "fields", fullDomain, jsonData, undefined, networkType);
441
- } else {
442
- logger.info(`=== Fields for ${fullDomain} ===`);
443
- if (fields.length > 0) {
444
- for (const [key, value] of fields) {
445
- logger.info(`${key}: ${value}`);
446
- }
447
- } else {
448
- logger.info("No fields set");
449
- }
450
- return fields;
451
- }
452
- }
453
-
454
- async function getDomainSettingsCommand(
455
- publicDataProvider: any,
456
- fullDomain: string,
457
- networkType?: string
458
- ) {
459
- logOrCollect(`Getting domain settings: ${fullDomain}`);
460
-
461
- const result = await getDomainSettings(fullDomain, { provider: publicDataProvider });
462
- const settings = handleResult(result, "Get domain settings");
463
-
464
- if (isJSONMode) {
465
- const jsonData = {
466
- domain: fullDomain,
467
- coinColor: `0x${Buffer.from(settings.coinColor).toString('hex')}`,
468
- costs: {
469
- short: settings.costs.short.toString(),
470
- medium: settings.costs.medium.toString(),
471
- long: settings.costs.long.toString(),
472
- }
473
- };
474
- return createJSONResponse(true, "settings", fullDomain, jsonData, undefined, networkType);
475
- } else {
476
- logger.info(`=== Settings for ${fullDomain} ===`);
477
- logger.info(`Coin Color: 0x${Buffer.from(settings.coinColor).toString('hex')}`);
478
- logger.info(`Domain Costs: short=${settings.costs.short}, medium=${settings.costs.medium}, long=${settings.costs.long}`);
479
- return settings;
480
- }
481
- }
482
-
483
- // =========================================
484
- // FIELD COMMANDS
485
- // =========================================
486
-
487
- async function insertField(
488
- providers: ContractProviders<typeof leafContractInstance>,
489
- fullDomain: string,
490
- key: string,
491
- value: string
492
- ) {
493
- logger.info(`Setting field ${key} = ${value} for domain: ${fullDomain}`);
494
-
495
- const result = await sdkInsertField(fullDomain, key, value, providers);
496
- if (!result.success) {
497
- throw new Error(result.error.message);
498
- }
499
-
500
- logger.info(`Field updated. Tx: ${result.data.transactionId}`);
501
- return { public: { txId: result.data.transactionId } };
502
- }
503
-
504
- async function clearField(
505
- providers: ContractProviders<typeof leafContractInstance>,
506
- fullDomain: string,
507
- key: string,
508
- networkType?: string
509
- ) {
510
- logOrCollect(`Clearing field ${key} for domain: ${fullDomain}`);
511
-
512
- const result = await sdkClearField(fullDomain, key, providers);
513
- if (!result.success) {
514
- throw new Error(result.error.message);
515
- }
516
-
517
- if (isJSONMode) {
518
- const jsonData = {
519
- domain: fullDomain,
520
- clearedField: key,
521
- transactionId: result.data.transactionId
522
- };
523
- return createJSONResponse(true, "clear-field", fullDomain, jsonData, undefined, networkType);
524
- } else {
525
- logger.info(`Field cleared. Tx: ${result.data.transactionId}`);
526
- return { public: { txId: result.data.transactionId } };
527
- }
528
- }
529
-
530
- async function clearAllFields(
531
- providers: ContractProviders<typeof leafContractInstance>,
532
- fullDomain: string,
533
- networkType?: string
534
- ) {
535
- logOrCollect(`Clearing all fields for domain: ${fullDomain}`);
536
-
537
- const result = await sdkClearAllFields(fullDomain, providers);
538
- if (!result.success) {
539
- throw new Error(result.error.message);
540
- }
541
-
542
- if (isJSONMode) {
543
- const jsonData = {
544
- domain: fullDomain,
545
- operation: "clear_all_fields",
546
- transactionId: result.data.transactionId
547
- };
548
- return createJSONResponse(true, "clear-all-fields", fullDomain, jsonData, undefined, networkType);
549
- } else {
550
- logger.info(`All fields cleared. Tx: ${result.data.transactionId}`);
551
- return { public: { txId: result.data.transactionId } };
552
- }
553
- }
554
-
555
- async function addFields(
556
- providers: ContractProviders<typeof leafContractInstance>,
557
- fullDomain: string,
558
- fields: Array<[string, string]>,
559
- networkType?: string
560
- ) {
561
- logOrCollect(`Adding ${fields.length} fields to domain: ${fullDomain}`);
562
-
563
- if (fields.length > 10) {
564
- throw new Error("Maximum of 10 fields can be added at once");
565
- }
566
-
567
- const result = await sdkAddMultipleFields(fullDomain, fields, providers);
568
- if (!result.success) {
569
- throw new Error(result.error.message);
570
- }
571
-
572
- if (isJSONMode) {
573
- const jsonData = {
574
- domain: fullDomain,
575
- fieldsAdded: Object.fromEntries(fields),
576
- transactionId: result.data.transactionId
577
- };
578
- return createJSONResponse(true, "add-fields", fullDomain, jsonData, undefined, networkType);
579
- } else {
580
- logger.info(`Fields added. Tx: ${result.data.transactionId}`);
581
- return { public: { txId: result.data.transactionId } };
582
- }
583
- }
584
-
585
- // =========================================
586
- // DOMAIN OPERATIONS
587
- // =========================================
588
-
589
- async function updateTarget(
590
- providers: ContractProviders<typeof leafContractInstance>,
591
- fullDomain: string,
592
- target: string,
593
- networkType?: string
594
- ) {
595
- logOrCollect(`Updating target for domain ${fullDomain} to: ${target}`);
596
-
597
- const result = await sdkUpdateDomainTarget(fullDomain, target, providers);
598
- if (!result.success) {
599
- throw new Error(result.error.message);
600
- }
601
-
602
- const targetValue = parseTarget(target);
603
-
604
- if (isJSONMode) {
605
- const jsonData = {
606
- domain: fullDomain,
607
- newTarget: target,
608
- targetType: targetValue.tag === "Left" ? "wallet" : "contract",
609
- transactionId: result.data.transactionId
610
- };
611
- return createJSONResponse(true, "update-target", fullDomain, jsonData, undefined, networkType);
612
- } else {
613
- logger.info(`Target updated. Tx: ${result.data.transactionId}`);
614
- return { public: { txId: result.data.transactionId } };
615
- }
616
- }
617
-
618
- async function updateCost(
619
- providers: ContractProviders<typeof leafContractInstance>,
620
- fullDomain: string,
621
- cost: string,
622
- networkType?: string
623
- ) {
624
- logOrCollect(`Updating cost for domain ${fullDomain} to: ${cost}`);
625
-
626
- const result = await sdkUpdateDomainCost(fullDomain, BigInt(cost), providers);
627
- if (!result.success) {
628
- throw new Error(result.error.message);
629
- }
630
-
631
- if (isJSONMode) {
632
- const jsonData = {
633
- domain: fullDomain,
634
- newCost: cost,
635
- transactionId: result.data.transactionId
636
- };
637
- return createJSONResponse(true, "update-cost", fullDomain, jsonData, undefined, networkType);
638
- } else {
639
- logger.info(`Cost updated. Tx: ${result.data.transactionId}`);
640
- return { public: { txId: result.data.transactionId } };
641
- }
642
- }
643
-
644
- async function updateColor(
645
- providers: ContractProviders<typeof leafContractInstance>,
646
- fullDomain: string,
647
- color: string,
648
- networkType?: string
649
- ) {
650
- logOrCollect(`Updating color for domain ${fullDomain} to: ${color}`);
651
-
652
- const colorBytes = new Uint8Array(Buffer.from(color.replace("0x", ""), "hex"));
653
- const result = await sdkUpdateDomainColor(fullDomain, colorBytes, providers);
654
- if (!result.success) {
655
- throw new Error(result.error.message);
656
- }
657
-
658
- if (isJSONMode) {
659
- const jsonData = {
660
- domain: fullDomain,
661
- newColor: color.startsWith("0x") ? color : `0x${color}`,
662
- transactionId: result.data.transactionId
663
- };
664
- return createJSONResponse(true, "update-color", fullDomain, jsonData, undefined, networkType);
665
- } else {
666
- logger.info(`Color updated. Tx: ${result.data.transactionId}`);
667
- return { public: { txId: result.data.transactionId } };
668
- }
669
- }
670
-
671
- // =========================================
672
- // SUBDOMAIN OPERATIONS
673
- // =========================================
674
-
675
- async function registerSubdomain(
676
- providers: ContractProviders<typeof leafContractInstance>,
677
- parentDomain: string,
678
- subdomainName: string,
679
- owner?: string,
680
- networkType?: string
681
- ) {
682
- logOrCollect(`Registering subdomain ${subdomainName} under ${parentDomain}`);
683
-
684
- const parentContractAddress = await getDomainResolverAddress(providers.publicDataProvider, parentDomain);
685
- if (!parentContractAddress) {
686
- throw new Error("Could not find parent domain resolver contract");
687
- }
688
-
689
- // Get parent domain settings for the new contract
690
- const parentSettingsResult = await getDomainSettings(parentDomain, { provider: providers.publicDataProvider });
691
- const parentSettings = handleResult(parentSettingsResult, "Get parent domain settings");
692
-
693
- // Deploy new leaf contract for the subdomain
694
- const targetAddress = owner ? parseAddress(owner) : parseAddress(providers.walletProvider.coinPublicKey);
695
-
696
- const targetEither = {
697
- is_left: true,
698
- left: targetAddress,
699
- right: { bytes: new Uint8Array(32) },
700
- };
701
-
702
- const deployedContract = await deployContract(providers, {
703
- compiledContract: leafContractInstance,
704
- privateStateId: "namespacePrivateState",
705
- initialPrivateState: { phantom: false },
706
- args: [
707
- // Parent domain
708
- { is_some: true, value: parentDomain },
709
- // Parent resolver address
710
- parseContractAddress(parentContractAddress),
711
- // Domain target
712
- targetEither,
713
- // Domain name
714
- { is_some: true, value: subdomainName },
715
- // Coin color (from parent)
716
- parentSettings.coinColor,
717
- // Per-tier costs (from parent)
718
- parentSettings.costs.short,
719
- parentSettings.costs.medium,
720
- parentSettings.costs.long,
721
- // Initial fields (empty)
722
- Array(10).fill({ is_some: false, value: ["", ""] }),
723
- ],
724
- });
725
-
726
- const newContractAddress = deployedContract.deployTxData.public.contractAddress;
727
-
728
- // Register the subdomain in the parent contract
729
- const ownerAddress = owner || providers.walletProvider.coinPublicKey;
730
- const registerResult = await sdkRegisterDomainFor(
731
- parentDomain,
732
- ownerAddress,
733
- subdomainName,
734
- newContractAddress,
735
- providers
736
- );
737
-
738
- if (!registerResult.success) {
739
- throw new Error(registerResult.error.message);
740
- }
741
-
742
- const returnData = {
743
- deployTx: deployedContract.deployTxData.public.txId,
744
- registerTx: registerResult.data.transactionId,
745
- contractAddress: newContractAddress
746
- };
747
-
748
- if (isJSONMode) {
749
- const jsonData = {
750
- parentDomain: parentDomain,
751
- subdomainName: subdomainName,
752
- fullDomain: `${subdomainName}.${parentDomain}`,
753
- owner: owner || providers.walletProvider.coinPublicKey,
754
- parentContractAddress: parentContractAddress,
755
- newContractAddress: newContractAddress,
756
- deployTransactionId: deployedContract.deployTxData.public.txId,
757
- registerTransactionId: registerResult.data.transactionId
758
- };
759
- return createJSONResponse(true, "register", `${subdomainName}.${parentDomain}`, jsonData, undefined, networkType);
760
- } else {
761
- logger.info(`Subdomain registered. Deploy Tx: ${deployedContract.deployTxData.public.txId}, Register Tx: ${registerResult.data.transactionId}`);
762
- logger.info(`New contract address: ${newContractAddress}`);
763
- return returnData;
764
- }
765
- }
766
-
767
- async function buySubdomain(
768
- providers: ContractProviders<typeof leafContractInstance>,
769
- parentDomain: string,
770
- subdomainName: string,
771
- owner?: string,
772
- paymentAmount?: string,
773
- networkType?: string
774
- ) {
775
- logOrCollect(`Buying subdomain ${subdomainName} under ${parentDomain}`);
776
-
777
- const parentContractAddress = await getDomainResolverAddress(providers.publicDataProvider, parentDomain);
778
- if (!parentContractAddress) {
779
- throw new Error("Could not find parent domain resolver contract");
780
- }
781
-
782
- // Get parent domain settings
783
- const parentSettingsResult = await getDomainSettings(parentDomain, { provider: providers.publicDataProvider });
784
- const parentSettings = handleResult(parentSettingsResult, "Get parent domain settings");
785
-
786
- // Deploy new leaf contract for the subdomain
787
- const targetAddress = owner ? parseAddress(owner) : parseAddress(providers.walletProvider.coinPublicKey);
788
-
789
- const targetEither = {
790
- is_left: true,
791
- left: targetAddress,
792
- right: { bytes: new Uint8Array(32) },
793
- };
794
-
795
- const deployedContract = await deployContract(providers, {
796
- compiledContract: leafContractInstance,
797
- privateStateId: "namespacePrivateState",
798
- initialPrivateState: { phantom: false },
799
- args: [
800
- // Parent domain
801
- { is_some: true, value: parentDomain },
802
- // Parent resolver address
803
- parseContractAddress(parentContractAddress),
804
- // Domain target
805
- targetEither,
806
- // Domain name
807
- { is_some: true, value: subdomainName },
808
- // Coin color (from parent)
809
- parentSettings.coinColor,
810
- // Per-tier costs (from parent)
811
- parentSettings.costs.short,
812
- parentSettings.costs.medium,
813
- parentSettings.costs.long,
814
- // Initial fields (empty)
815
- Array(10).fill({ is_some: false, value: ["", ""] }),
816
- ],
817
- });
818
-
819
- const newContractAddress = deployedContract.deployTxData.public.contractAddress;
820
-
821
- // Buy the subdomain in the parent contract
822
- const ownerAddress = owner || providers.walletProvider.coinPublicKey;
823
- const payment = paymentAmount ? BigInt(paymentAmount) : parentSettings.costs.short;
824
-
825
- const buyResult = await sdkBuyDomainFor(
826
- parentDomain,
827
- ownerAddress,
828
- subdomainName,
829
- newContractAddress,
830
- payment,
831
- providers
832
- );
833
-
834
- if (!buyResult.success) {
835
- throw new Error(buyResult.error.message);
836
- }
837
-
838
- const returnData = {
839
- deployTx: deployedContract.deployTxData.public.txId,
840
- buyTx: buyResult.data.transactionId,
841
- contractAddress: newContractAddress
842
- };
843
-
844
- if (isJSONMode) {
845
- const jsonData = {
846
- parentDomain: parentDomain,
847
- subdomainName: subdomainName,
848
- fullDomain: `${subdomainName}.${parentDomain}`,
849
- owner: owner || providers.walletProvider.coinPublicKey,
850
- parentContractAddress: parentContractAddress,
851
- newContractAddress: newContractAddress,
852
- paymentAmount: payment.toString(),
853
- deployTransactionId: deployedContract.deployTxData.public.txId,
854
- buyTransactionId: buyResult.data.transactionId
855
- };
856
- return createJSONResponse(true, "buy", `${subdomainName}.${parentDomain}`, jsonData, undefined, networkType);
857
- } else {
858
- logger.info(`Subdomain purchased. Deploy Tx: ${deployedContract.deployTxData.public.txId}, Buy Tx: ${buyResult.data.transactionId}`);
859
- logger.info(`New contract address: ${newContractAddress}`);
860
- return returnData;
861
- }
862
- }
863
-
864
- // Usage function
865
- function showUsage() {
866
- console.log(`
867
- Midnight Name Service - Domain-Centric CLI Tool
868
-
869
- Usage:
870
- bun run contract.ts <network> <domain> <command> [args...]
871
-
872
- Networks:
873
- standalone Use local standalone network
874
- testnet Use remote testnet
875
-
876
- Query Commands:
877
- query Query domain profile (all info)
878
- resolve Resolve domain to target address
879
- info Get domain ownership info
880
- fields List all domain fields
881
- settings Get domain cost and color settings
882
-
883
- Field Management:
884
- insert-field <key> <value> Add/update a field
885
- clear-field <key> Remove a field
886
- clear-all-fields Clear all fields
887
- add-fields <key1:value1,key2:value2> Add multiple fields (max 10)
888
-
889
- Domain Operations:
890
- update-target <address> Update what the domain points to
891
- update-cost <amount> Update subdomain cost
892
- update-color <hex> Update accepted token type
893
-
894
- Subdomain Operations:
895
- register <subdomain> [owner] Register new subdomain (free for owner)
896
- buy <subdomain> [owner] [payment] Buy new subdomain (requires payment)
897
-
898
- Special Cases:
899
- # Buy domain with implicit subdomain name
900
- buy Buy domain using domain name as subdomain
901
- register Register domain using domain name as subdomain
902
-
903
- Environment Variables:
904
- SEED BIP39 mnemonic or 64-character hex seed (required)
905
-
906
- Examples:
907
- export SEED="word1 word2 ... word12"
908
-
909
- # Query operations
910
- bun run contract.ts testnet some.domain.night query
911
- bun run contract.ts testnet some.domain.night resolve
912
- bun run contract.ts testnet some.domain.night fields
913
-
914
- # Field management
915
- bun run contract.ts testnet some.domain.night insert-field avatar https://picsum.photos/400/550
916
- bun run contract.ts testnet some.domain.night clear-all-fields
917
- bun run contract.ts testnet some.domain.night add-fields "name:John,bio:Web3 Developer"
918
-
919
- # Domain operations
920
- bun run contract.ts testnet some.domain.night update-target mn_...
921
- bun run contract.ts testnet some.domain.night update-cost 1000
922
-
923
- # Subdomain operations
924
- bun run contract.ts testnet domain.night register sub
925
- bun run contract.ts testnet domain.night buy newsub
926
-
927
- # Auto-create domain
928
- bun run contract.ts testnet another.domain.night buy
929
- bun run contract.ts testnet another.domain.night register
930
- `);
931
- }
932
-
933
- // Main function
934
- async function main() {
935
- const args = process.argv.slice(2);
936
-
937
- try {
938
- if (args.length < 3) {
939
- if (isJSONMode) {
940
- outputJSON(createJSONResponse(false, "unknown", undefined, undefined, "Insufficient arguments. Expected: <network> <domain> <command> [args...]"));
941
- process.exit(1);
942
- }
943
- showUsage();
944
- process.exit(1);
945
- }
946
-
947
- const networkType = args[0];
948
- const fullDomain = args[1];
949
- const command = args[2];
950
- const commandArgs = args.slice(3);
951
-
952
- if (!["testnet", "standalone"].includes(networkType)) {
953
- if (isJSONMode) {
954
- outputJSON(createJSONResponse(false, command, fullDomain, undefined, "Invalid network type. Use 'testnet' or 'standalone'", networkType));
955
- process.exit(1);
956
- }
957
- logger.error("Invalid network type. Use 'testnet' or 'standalone'");
958
- showUsage();
959
- process.exit(1);
960
- }
961
-
962
- const parsed = parseDomainName(fullDomain);
963
- if (!parsed.isValid) {
964
- if (isJSONMode) {
965
- outputJSON(createJSONResponse(false, command, fullDomain, undefined, `Invalid domain format: ${fullDomain}. Expected format like "domain.night" or "sub.domain.night"`, networkType));
966
- process.exit(1);
967
- }
968
- logger.error(`Invalid domain format: ${fullDomain}. Expected format like "domain.night" or "sub.domain.night"`);
969
- process.exit(1);
970
- }
971
-
972
- logOrCollect(`Starting ${command} on ${networkType} network for domain: ${fullDomain}`);
973
-
974
- // Set network ID
975
- if (networkType === "testnet") {
976
- setNetworkId(NetworkId.TestNet);
977
- } else {
978
- // For standalone, we'll set it in the config
979
- // setNetworkId will be called by the config
980
- }
981
-
982
- // Check if this is a read-only command
983
- if (isReadOnlyCommand(command)) {
984
- logger.info("Read-only command detected - skipping wallet initialization");
985
-
986
- // Create just a PublicDataProvider for read operations
987
- let publicDataProvider: any;
988
- if (networkType === "testnet") {
989
- publicDataProvider = indexerPublicDataProvider(
990
- "https://indexer.testnet-02.midnight.network/api/v1/graphql",
991
- "wss://indexer.testnet-02.midnight.network/api/v1/graphql/ws"
992
- );
993
- } else {
994
- // For standalone, we need to detect the ports first
995
- const config = new StandaloneConfig();
996
- await config.detectRunningContainerPorts();
997
- publicDataProvider = indexerPublicDataProvider(
998
- config.indexer,
999
- config.indexerWS
1000
- );
1001
- }
1002
-
1003
- // Execute read-only command
1004
- let result: any;
1005
- switch (command) {
1006
- case "query":
1007
- result = await queryDomain(publicDataProvider, fullDomain, networkType);
1008
- break;
1009
-
1010
- case "resolve":
1011
- result = await resolveDomainCommand(publicDataProvider, fullDomain, networkType);
1012
- break;
1013
-
1014
- case "info":
1015
- result = await getDomainInfo(publicDataProvider, fullDomain, networkType);
1016
- break;
1017
-
1018
- case "fields":
1019
- result = await getDomainFieldsCommand(publicDataProvider, fullDomain, networkType);
1020
- break;
1021
-
1022
- case "settings":
1023
- result = await getDomainSettingsCommand(publicDataProvider, fullDomain, networkType);
1024
- break;
1025
-
1026
- default:
1027
- if (isJSONMode) {
1028
- outputJSON(createJSONResponse(false, command, fullDomain, undefined, `Unknown read command: ${command}`, networkType));
1029
- process.exit(1);
1030
- }
1031
- logger.error(`Unknown read command: ${command}`);
1032
- showUsage();
1033
- process.exit(1);
1034
- }
1035
-
1036
- // Output result for JSON mode
1037
- if (isJSONMode && result) {
1038
- outputJSON(result);
1039
- } else if (!isJSONMode) {
1040
- logger.info(`Read command ${command} completed successfully`);
1041
- }
1042
- return;
1043
- }
1044
-
1045
- // For write commands, proceed with full wallet initialization
1046
- logOrCollect("Write command detected - initializing wallet");
1047
-
1048
- // Configure network
1049
- let config: Config;
1050
- if (networkType === "testnet") {
1051
- config = new TestnetConfig();
1052
- } else {
1053
- config = new StandaloneConfig();
1054
- await (config as StandaloneConfig).detectRunningContainerPorts();
1055
- }
1056
-
1057
- let wallet: (Wallet & Resource) | null = null;
1058
-
1059
- try {
1060
- // Get seed from environment
1061
- const seed = await getSeedFromEnv();
1062
- logOrCollect("Using seed from SEED environment variable");
1063
-
1064
- // Build wallet
1065
- wallet = await buildWalletAndWaitForFunds(config, seed);
1066
-
1067
- // Configure providers
1068
- const providers = await configureProviders(wallet, config);
1069
-
1070
- // Execute write command
1071
- let writeResult: any;
1072
- switch (command) {
1073
- // Field management
1074
- case "insert-field":
1075
- if (commandArgs.length < 2) {
1076
- if (isJSONMode) {
1077
- outputJSON(createJSONResponse(false, command, fullDomain, undefined, "insert-field requires <key> <value>", networkType));
1078
- process.exit(1);
1079
- }
1080
- logger.error("insert-field requires <key> <value>");
1081
- process.exit(1);
1082
- }
1083
- await insertField(providers, fullDomain, commandArgs[0], commandArgs[1]);
1084
- break;
1085
-
1086
- case "clear-field":
1087
- if (commandArgs.length < 1) {
1088
- if (isJSONMode) {
1089
- outputJSON(createJSONResponse(false, command, fullDomain, undefined, "clear-field requires <key>", networkType));
1090
- process.exit(1);
1091
- }
1092
- logger.error("clear-field requires <key>");
1093
- process.exit(1);
1094
- }
1095
- writeResult = await clearField(providers, fullDomain, commandArgs[0], networkType);
1096
- break;
1097
-
1098
- case "clear-all-fields":
1099
- writeResult = await clearAllFields(providers, fullDomain, networkType);
1100
- break;
1101
-
1102
- case "add-fields":
1103
- if (commandArgs.length < 1) {
1104
- if (isJSONMode) {
1105
- outputJSON(createJSONResponse(false, command, fullDomain, undefined, "add-fields requires <key1:value1,key2:value2,...>", networkType));
1106
- process.exit(1);
1107
- }
1108
- logger.error("add-fields requires <key1:value1,key2:value2,...>");
1109
- process.exit(1);
1110
- }
1111
- {
1112
- const fieldPairs = commandArgs[0].split(',').map(pair => {
1113
- const [key, value] = pair.split(':');
1114
- return [key.trim(), value.trim()] as [string, string];
1115
- });
1116
- writeResult = await addFields(providers, fullDomain, fieldPairs, networkType);
1117
- }
1118
- break;
1119
-
1120
- // Domain operations
1121
- case "update-target":
1122
- if (commandArgs.length < 1) {
1123
- if (isJSONMode) {
1124
- outputJSON(createJSONResponse(false, command, fullDomain, undefined, "update-target requires <address>", networkType));
1125
- process.exit(1);
1126
- }
1127
- logger.error("update-target requires <address>");
1128
- process.exit(1);
1129
- }
1130
- writeResult = await updateTarget(providers, fullDomain, commandArgs[0], networkType);
1131
- break;
1132
-
1133
- case "update-cost":
1134
- if (commandArgs.length < 1) {
1135
- if (isJSONMode) {
1136
- outputJSON(createJSONResponse(false, command, fullDomain, undefined, "update-cost requires <amount>", networkType));
1137
- process.exit(1);
1138
- }
1139
- logger.error("update-cost requires <amount>");
1140
- process.exit(1);
1141
- }
1142
- writeResult = await updateCost(providers, fullDomain, commandArgs[0], networkType);
1143
- break;
1144
-
1145
- case "update-color":
1146
- if (commandArgs.length < 1) {
1147
- if (isJSONMode) {
1148
- outputJSON(createJSONResponse(false, command, fullDomain, undefined, "update-color requires <hex>", networkType));
1149
- process.exit(1);
1150
- }
1151
- logger.error("update-color requires <hex>");
1152
- process.exit(1);
1153
- }
1154
- writeResult = await updateColor(providers, fullDomain, commandArgs[0], networkType);
1155
- break;
1156
-
1157
- // Subdomain operations
1158
- case "register":
1159
- if (commandArgs.length === 0) {
1160
- // Auto-register: use domain name as subdomain
1161
- writeResult = await registerSubdomain(providers, parsed.parentDomain, parsed.domainName, commandArgs[1], networkType);
1162
- } else {
1163
- // Register specified subdomain
1164
- writeResult = await registerSubdomain(providers, fullDomain, commandArgs[0], commandArgs[1], networkType);
1165
- }
1166
- break;
1167
-
1168
- case "buy":
1169
- if (commandArgs.length === 0) {
1170
- // Auto-buy: use domain name as subdomain
1171
- writeResult = await buySubdomain(providers, parsed.parentDomain, parsed.domainName, commandArgs[1], commandArgs[2], networkType);
1172
- } else {
1173
- // Buy specified subdomain
1174
- writeResult = await buySubdomain(providers, fullDomain, commandArgs[0], commandArgs[1], commandArgs[2], networkType);
1175
- }
1176
- break;
1177
-
1178
- default:
1179
- if (isJSONMode) {
1180
- outputJSON(createJSONResponse(false, command, fullDomain, undefined, `Unknown command: ${command}`, networkType));
1181
- process.exit(1);
1182
- }
1183
- logger.error(`Unknown command: ${command}`);
1184
- showUsage();
1185
- process.exit(1);
1186
- }
1187
-
1188
- // Output result for JSON mode
1189
- if (isJSONMode && writeResult) {
1190
- outputJSON(writeResult);
1191
- } else if (!isJSONMode) {
1192
- logger.info(`Command ${command} completed successfully`);
1193
- }
1194
-
1195
- } catch (error) {
1196
- if (isJSONMode) {
1197
- outputJSON(createJSONResponse(false, command, fullDomain, undefined, error instanceof Error ? error.message : String(error), networkType));
1198
- process.exit(1);
1199
- }
1200
- logger.error(`Command failed: ${error instanceof Error ? error.message : String(error)}`, error);
1201
- throw error;
1202
- } finally {
1203
- if (wallet) {
1204
- await wallet.close();
1205
- logOrCollect("Wallet closed");
1206
- }
1207
- }
1208
-
1209
- } catch (error) {
1210
- if (isJSONMode) {
1211
- outputJSON(createJSONResponse(false, "main", undefined, undefined, error instanceof Error ? error.message : String(error)));
1212
- process.exit(1);
1213
- }
1214
- logger.error(`Main execution failed: ${error instanceof Error ? error.message : String(error)}`, error);
1215
- process.exit(1);
1216
- }
1217
- }
1218
-
1219
- if (import.meta.main) {
1220
- main().catch((error) => {
1221
- if (isJSONMode) {
1222
- outputJSON(createJSONResponse(false, "main", undefined, undefined, error instanceof Error ? error.message : String(error)));
1223
- } else {
1224
- console.error(error);
1225
- }
1226
- process.exit(1);
1227
- });
1228
- }