@cogcoin/client 1.1.7 → 1.1.9

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 (284) hide show
  1. package/README.md +1 -1
  2. package/dist/bitcoind/service.js +1 -1
  3. package/dist/cli/commands/mining-read.js +1 -1
  4. package/dist/cli/commands/wallet-mutation/anchor.d.ts +2 -0
  5. package/dist/cli/commands/wallet-mutation/anchor.js +33 -0
  6. package/dist/cli/commands/wallet-mutation/bitcoin-transfer.d.ts +2 -0
  7. package/dist/cli/commands/wallet-mutation/bitcoin-transfer.js +32 -0
  8. package/dist/cli/commands/wallet-mutation/cog.d.ts +2 -0
  9. package/dist/cli/commands/wallet-mutation/cog.js +131 -0
  10. package/dist/cli/commands/wallet-mutation/context.d.ts +3 -0
  11. package/dist/cli/commands/wallet-mutation/context.js +18 -0
  12. package/dist/cli/commands/wallet-mutation/domain-admin.d.ts +2 -0
  13. package/dist/cli/commands/wallet-mutation/domain-admin.js +173 -0
  14. package/dist/cli/commands/wallet-mutation/domain-market.d.ts +2 -0
  15. package/dist/cli/commands/wallet-mutation/domain-market.js +107 -0
  16. package/dist/cli/commands/wallet-mutation/field.d.ts +2 -0
  17. package/dist/cli/commands/wallet-mutation/field.js +125 -0
  18. package/dist/cli/commands/wallet-mutation/register.d.ts +2 -0
  19. package/dist/cli/commands/wallet-mutation/register.js +38 -0
  20. package/dist/cli/commands/wallet-mutation/registry.d.ts +3 -0
  21. package/dist/cli/commands/wallet-mutation/registry.js +39 -0
  22. package/dist/cli/commands/wallet-mutation/reputation.d.ts +2 -0
  23. package/dist/cli/commands/wallet-mutation/reputation.js +57 -0
  24. package/dist/cli/commands/wallet-mutation/types.d.ts +32 -0
  25. package/dist/cli/commands/wallet-mutation/types.js +1 -0
  26. package/dist/cli/commands/wallet-mutation.js +13 -765
  27. package/dist/cli/commands/wallet-read.js +4 -4
  28. package/dist/cli/mutation-success.d.ts +0 -2
  29. package/dist/cli/output/classify.d.ts +7 -0
  30. package/dist/cli/output/classify.js +94 -0
  31. package/dist/cli/output/render.d.ts +2 -0
  32. package/dist/cli/output/render.js +13 -0
  33. package/dist/cli/output/rules/cli-surface.d.ts +2 -0
  34. package/dist/cli/output/rules/cli-surface.js +110 -0
  35. package/dist/cli/output/rules/generic.d.ts +2 -0
  36. package/dist/cli/output/rules/generic.js +13 -0
  37. package/dist/cli/output/rules/index.d.ts +2 -0
  38. package/dist/cli/output/rules/index.js +24 -0
  39. package/dist/cli/output/rules/mining-update.d.ts +2 -0
  40. package/dist/cli/output/rules/mining-update.js +68 -0
  41. package/dist/cli/output/rules/services.d.ts +2 -0
  42. package/dist/cli/output/rules/services.js +110 -0
  43. package/dist/cli/output/rules/wallet-admin.d.ts +2 -0
  44. package/dist/cli/output/rules/wallet-admin.js +224 -0
  45. package/dist/cli/output/rules/wallet-mutations.d.ts +2 -0
  46. package/dist/cli/output/rules/wallet-mutations.js +274 -0
  47. package/dist/cli/output/types.d.ts +16 -0
  48. package/dist/cli/output/types.js +1 -0
  49. package/dist/cli/output.d.ts +2 -168
  50. package/dist/cli/output.js +6 -989
  51. package/dist/cli/pagination.d.ts +15 -0
  52. package/dist/cli/pagination.js +16 -0
  53. package/dist/cli/recommendations.d.ts +4 -0
  54. package/dist/cli/recommendations.js +108 -0
  55. package/dist/cli/wallet-format/availability.d.ts +5 -0
  56. package/dist/cli/wallet-format/availability.js +96 -0
  57. package/dist/cli/wallet-format/balance.d.ts +2 -0
  58. package/dist/cli/wallet-format/balance.js +162 -0
  59. package/dist/cli/wallet-format/domains.d.ts +8 -0
  60. package/dist/cli/wallet-format/domains.js +84 -0
  61. package/dist/cli/wallet-format/fields.d.ts +6 -0
  62. package/dist/cli/wallet-format/fields.js +61 -0
  63. package/dist/cli/wallet-format/identity.d.ts +5 -0
  64. package/dist/cli/wallet-format/identity.js +19 -0
  65. package/dist/cli/wallet-format/locks.d.ts +7 -0
  66. package/dist/cli/wallet-format/locks.js +52 -0
  67. package/dist/cli/wallet-format/overview.d.ts +2 -0
  68. package/dist/cli/wallet-format/overview.js +122 -0
  69. package/dist/cli/wallet-format/pending.d.ts +13 -0
  70. package/dist/cli/wallet-format/pending.js +101 -0
  71. package/dist/cli/wallet-format/shared.d.ts +7 -0
  72. package/dist/cli/wallet-format/shared.js +31 -0
  73. package/dist/cli/wallet-format/status.d.ts +3 -0
  74. package/dist/cli/wallet-format/status.js +27 -0
  75. package/dist/cli/wallet-format.d.ts +8 -30
  76. package/dist/cli/wallet-format.js +8 -830
  77. package/dist/cli/wallet-read-helpers.d.ts +6 -0
  78. package/dist/cli/wallet-read-helpers.js +17 -0
  79. package/dist/wallet/mining/candidate.d.ts +1 -1
  80. package/dist/wallet/mining/candidate.js +3 -3
  81. package/dist/wallet/mining/constants.d.ts +2 -2
  82. package/dist/wallet/mining/constants.js +2 -2
  83. package/dist/wallet/mining/engine-state.js +10 -0
  84. package/dist/wallet/mining/sentence-protocol.d.ts +2 -2
  85. package/dist/wallet/mining/sentences.js +8 -8
  86. package/dist/wallet/mining/visualizer-sync.js +79 -15
  87. package/dist/wallet/read/context.js +1 -1
  88. package/dist/wallet/reset/artifacts.d.ts +16 -0
  89. package/dist/wallet/reset/artifacts.js +141 -0
  90. package/dist/wallet/reset/execution.d.ts +38 -0
  91. package/dist/wallet/reset/execution.js +458 -0
  92. package/dist/wallet/reset/preflight.d.ts +7 -0
  93. package/dist/wallet/reset/preflight.js +116 -0
  94. package/dist/wallet/reset/preview.d.ts +2 -0
  95. package/dist/wallet/reset/preview.js +50 -0
  96. package/dist/wallet/reset/process-cleanup.d.ts +12 -0
  97. package/dist/wallet/reset/process-cleanup.js +179 -0
  98. package/dist/wallet/reset/types.d.ts +189 -0
  99. package/dist/wallet/reset/types.js +1 -0
  100. package/dist/wallet/reset.d.ts +4 -119
  101. package/dist/wallet/reset.js +4 -882
  102. package/dist/wallet/tx/anchor/confirm.d.ts +15 -0
  103. package/dist/wallet/tx/anchor/confirm.js +60 -0
  104. package/dist/wallet/tx/anchor/draft.d.ts +39 -0
  105. package/dist/wallet/tx/anchor/draft.js +167 -0
  106. package/dist/wallet/tx/anchor/index.d.ts +5 -0
  107. package/dist/wallet/tx/anchor/index.js +148 -0
  108. package/dist/wallet/tx/anchor/intent.d.ts +61 -0
  109. package/dist/wallet/tx/anchor/intent.js +101 -0
  110. package/dist/wallet/tx/anchor/plan.d.ts +3 -0
  111. package/dist/wallet/tx/anchor/plan.js +18 -0
  112. package/dist/wallet/tx/anchor/result.d.ts +25 -0
  113. package/dist/wallet/tx/anchor/result.js +20 -0
  114. package/dist/wallet/tx/anchor.d.ts +1 -39
  115. package/dist/wallet/tx/anchor.js +1 -494
  116. package/dist/wallet/tx/bitcoin-transfer/confirm.d.ts +7 -0
  117. package/dist/wallet/tx/bitcoin-transfer/confirm.js +11 -0
  118. package/dist/wallet/tx/bitcoin-transfer/index.d.ts +5 -0
  119. package/dist/wallet/tx/bitcoin-transfer/index.js +112 -0
  120. package/dist/wallet/tx/bitcoin-transfer/intent.d.ts +52 -0
  121. package/dist/wallet/tx/bitcoin-transfer/intent.js +74 -0
  122. package/dist/wallet/tx/bitcoin-transfer/plan.d.ts +5 -0
  123. package/dist/wallet/tx/bitcoin-transfer/plan.js +21 -0
  124. package/dist/wallet/tx/bitcoin-transfer/result.d.ts +19 -0
  125. package/dist/wallet/tx/bitcoin-transfer/result.js +16 -0
  126. package/dist/wallet/tx/bitcoin-transfer.d.ts +1 -35
  127. package/dist/wallet/tx/bitcoin-transfer.js +1 -200
  128. package/dist/wallet/tx/cog/confirm.d.ts +13 -0
  129. package/dist/wallet/tx/cog/confirm.js +59 -0
  130. package/dist/wallet/tx/cog/draft.d.ts +20 -0
  131. package/dist/wallet/tx/cog/draft.js +114 -0
  132. package/dist/wallet/tx/cog/index.d.ts +6 -0
  133. package/dist/wallet/tx/cog/index.js +117 -0
  134. package/dist/wallet/tx/cog/intent.d.ts +30 -0
  135. package/dist/wallet/tx/cog/intent.js +169 -0
  136. package/dist/wallet/tx/cog/plan.d.ts +19 -0
  137. package/dist/wallet/tx/cog/plan.js +65 -0
  138. package/dist/wallet/tx/cog/result.d.ts +27 -0
  139. package/dist/wallet/tx/cog/result.js +28 -0
  140. package/dist/wallet/tx/cog/types.d.ts +186 -0
  141. package/dist/wallet/tx/cog/types.js +2 -0
  142. package/dist/wallet/tx/cog/variants/claim.d.ts +3 -0
  143. package/dist/wallet/tx/cog/variants/claim.js +92 -0
  144. package/dist/wallet/tx/cog/variants/lock.d.ts +2 -0
  145. package/dist/wallet/tx/cog/variants/lock.js +102 -0
  146. package/dist/wallet/tx/cog/variants/send.d.ts +2 -0
  147. package/dist/wallet/tx/cog/variants/send.js +77 -0
  148. package/dist/wallet/tx/cog.d.ts +1 -96
  149. package/dist/wallet/tx/cog.js +1 -824
  150. package/dist/wallet/tx/common.d.ts +14 -199
  151. package/dist/wallet/tx/common.js +10 -493
  152. package/dist/wallet/tx/domain-admin/confirm.d.ts +17 -0
  153. package/dist/wallet/tx/domain-admin/confirm.js +58 -0
  154. package/dist/wallet/tx/domain-admin/draft.d.ts +20 -0
  155. package/dist/wallet/tx/domain-admin/draft.js +161 -0
  156. package/dist/wallet/tx/domain-admin/index.d.ts +9 -0
  157. package/dist/wallet/tx/domain-admin/index.js +150 -0
  158. package/dist/wallet/tx/domain-admin/intent.d.ts +12 -0
  159. package/dist/wallet/tx/domain-admin/intent.js +61 -0
  160. package/dist/wallet/tx/domain-admin/plan.d.ts +19 -0
  161. package/dist/wallet/tx/domain-admin/plan.js +64 -0
  162. package/dist/wallet/tx/domain-admin/result.d.ts +19 -0
  163. package/dist/wallet/tx/domain-admin/result.js +33 -0
  164. package/dist/wallet/tx/domain-admin/types.d.ts +162 -0
  165. package/dist/wallet/tx/domain-admin/types.js +1 -0
  166. package/dist/wallet/tx/domain-admin/variants/canonical.d.ts +2 -0
  167. package/dist/wallet/tx/domain-admin/variants/canonical.js +22 -0
  168. package/dist/wallet/tx/domain-admin/variants/delegate.d.ts +3 -0
  169. package/dist/wallet/tx/domain-admin/variants/delegate.js +60 -0
  170. package/dist/wallet/tx/domain-admin/variants/endpoint.d.ts +3 -0
  171. package/dist/wallet/tx/domain-admin/variants/endpoint.js +102 -0
  172. package/dist/wallet/tx/domain-admin/variants/miner.d.ts +3 -0
  173. package/dist/wallet/tx/domain-admin/variants/miner.js +59 -0
  174. package/dist/wallet/tx/domain-admin.d.ts +1 -107
  175. package/dist/wallet/tx/domain-admin.js +1 -729
  176. package/dist/wallet/tx/domain-market/confirm.d.ts +6 -0
  177. package/dist/wallet/tx/domain-market/confirm.js +52 -0
  178. package/dist/wallet/tx/domain-market/draft.d.ts +43 -0
  179. package/dist/wallet/tx/domain-market/draft.js +286 -0
  180. package/dist/wallet/tx/domain-market/index.d.ts +6 -0
  181. package/dist/wallet/tx/domain-market/index.js +145 -0
  182. package/dist/wallet/tx/domain-market/intent.d.ts +15 -0
  183. package/dist/wallet/tx/domain-market/intent.js +131 -0
  184. package/dist/wallet/tx/domain-market/plan.d.ts +31 -0
  185. package/dist/wallet/tx/domain-market/plan.js +98 -0
  186. package/dist/wallet/tx/domain-market/result.d.ts +45 -0
  187. package/dist/wallet/tx/domain-market/result.js +88 -0
  188. package/dist/wallet/tx/domain-market/types.d.ts +221 -0
  189. package/dist/wallet/tx/domain-market/types.js +1 -0
  190. package/dist/wallet/tx/domain-market/variants/buy.d.ts +2 -0
  191. package/dist/wallet/tx/domain-market/variants/buy.js +103 -0
  192. package/dist/wallet/tx/domain-market/variants/sell.d.ts +2 -0
  193. package/dist/wallet/tx/domain-market/variants/sell.js +91 -0
  194. package/dist/wallet/tx/domain-market/variants/transfer.d.ts +2 -0
  195. package/dist/wallet/tx/domain-market/variants/transfer.js +105 -0
  196. package/dist/wallet/tx/domain-market.d.ts +1 -116
  197. package/dist/wallet/tx/domain-market.js +1 -1078
  198. package/dist/wallet/tx/draft-build.d.ts +60 -0
  199. package/dist/wallet/tx/draft-build.js +127 -0
  200. package/dist/wallet/tx/executor.d.ts +6 -40
  201. package/dist/wallet/tx/executor.js +6 -100
  202. package/dist/wallet/tx/fee.d.ts +30 -0
  203. package/dist/wallet/tx/fee.js +98 -0
  204. package/dist/wallet/tx/field/confirm.d.ts +11 -0
  205. package/dist/wallet/tx/field/confirm.js +19 -0
  206. package/dist/wallet/tx/field/draft.d.ts +23 -0
  207. package/dist/wallet/tx/field/draft.js +202 -0
  208. package/dist/wallet/tx/field/index.d.ts +5 -0
  209. package/dist/wallet/tx/field/index.js +140 -0
  210. package/dist/wallet/tx/field/intent.d.ts +5 -0
  211. package/dist/wallet/tx/field/intent.js +50 -0
  212. package/dist/wallet/tx/field/plan.d.ts +20 -0
  213. package/dist/wallet/tx/field/plan.js +65 -0
  214. package/dist/wallet/tx/field/result.d.ts +29 -0
  215. package/dist/wallet/tx/field/result.js +103 -0
  216. package/dist/wallet/tx/field/types.d.ts +163 -0
  217. package/dist/wallet/tx/field/types.js +1 -0
  218. package/dist/wallet/tx/field/variants/clear.d.ts +2 -0
  219. package/dist/wallet/tx/field/variants/clear.js +60 -0
  220. package/dist/wallet/tx/field/variants/create.d.ts +2 -0
  221. package/dist/wallet/tx/field/variants/create.js +67 -0
  222. package/dist/wallet/tx/field/variants/set.d.ts +2 -0
  223. package/dist/wallet/tx/field/variants/set.js +195 -0
  224. package/dist/wallet/tx/field.d.ts +1 -95
  225. package/dist/wallet/tx/field.js +1 -920
  226. package/dist/wallet/tx/mining-preemption.d.ts +6 -0
  227. package/dist/wallet/tx/mining-preemption.js +7 -0
  228. package/dist/wallet/tx/primitives.d.ts +13 -0
  229. package/dist/wallet/tx/primitives.js +42 -0
  230. package/dist/wallet/tx/psbt-assert.d.ts +14 -0
  231. package/dist/wallet/tx/psbt-assert.js +39 -0
  232. package/dist/wallet/tx/publish.d.ts +37 -0
  233. package/dist/wallet/tx/publish.js +88 -0
  234. package/dist/wallet/tx/readiness.d.ts +7 -0
  235. package/dist/wallet/tx/readiness.js +61 -0
  236. package/dist/wallet/tx/reconcile.d.ts +24 -0
  237. package/dist/wallet/tx/reconcile.js +72 -0
  238. package/dist/wallet/tx/register/confirm.d.ts +6 -0
  239. package/dist/wallet/tx/register/confirm.js +66 -0
  240. package/dist/wallet/tx/register/draft.d.ts +42 -0
  241. package/dist/wallet/tx/register/draft.js +181 -0
  242. package/dist/wallet/tx/register/index.d.ts +6 -0
  243. package/dist/wallet/tx/register/index.js +158 -0
  244. package/dist/wallet/tx/register/intent.d.ts +74 -0
  245. package/dist/wallet/tx/register/intent.js +119 -0
  246. package/dist/wallet/tx/register/plan.d.ts +43 -0
  247. package/dist/wallet/tx/register/plan.js +168 -0
  248. package/dist/wallet/tx/register/result.d.ts +78 -0
  249. package/dist/wallet/tx/register/result.js +41 -0
  250. package/dist/wallet/tx/register.d.ts +1 -70
  251. package/dist/wallet/tx/register.js +1 -681
  252. package/dist/wallet/tx/reputation/confirm.d.ts +11 -0
  253. package/dist/wallet/tx/reputation/confirm.js +51 -0
  254. package/dist/wallet/tx/reputation/draft.d.ts +20 -0
  255. package/dist/wallet/tx/reputation/draft.js +130 -0
  256. package/dist/wallet/tx/reputation/index.d.ts +4 -0
  257. package/dist/wallet/tx/reputation/index.js +162 -0
  258. package/dist/wallet/tx/reputation/intent.d.ts +36 -0
  259. package/dist/wallet/tx/reputation/intent.js +157 -0
  260. package/dist/wallet/tx/reputation/plan.d.ts +19 -0
  261. package/dist/wallet/tx/reputation/plan.js +64 -0
  262. package/dist/wallet/tx/reputation/result.d.ts +21 -0
  263. package/dist/wallet/tx/reputation/result.js +31 -0
  264. package/dist/wallet/tx/reputation/types.d.ts +130 -0
  265. package/dist/wallet/tx/reputation/types.js +1 -0
  266. package/dist/wallet/tx/reputation.d.ts +1 -74
  267. package/dist/wallet/tx/reputation.js +1 -556
  268. package/dist/wallet/tx/signing.d.ts +18 -0
  269. package/dist/wallet/tx/signing.js +31 -0
  270. package/dist/wallet/tx/state-persist.d.ts +27 -0
  271. package/dist/wallet/tx/state-persist.js +54 -0
  272. package/dist/wallet/tx/types.d.ts +44 -0
  273. package/dist/wallet/tx/types.js +1 -0
  274. package/package.json +1 -1
  275. package/dist/cli/mining-json.d.ts +0 -20
  276. package/dist/cli/mining-json.js +0 -46
  277. package/dist/cli/mutation-json.d.ts +0 -325
  278. package/dist/cli/mutation-json.js +0 -269
  279. package/dist/cli/mutation-resolved-json.d.ts +0 -117
  280. package/dist/cli/mutation-resolved-json.js +0 -123
  281. package/dist/cli/preview-json.d.ts +0 -319
  282. package/dist/cli/preview-json.js +0 -254
  283. package/dist/cli/read-json.d.ts +0 -190
  284. package/dist/cli/read-json.js +0 -627
@@ -0,0 +1,131 @@
1
+ import { createHash } from "node:crypto";
2
+ import { getBalance, getListing, lookupDomain, } from "@cogcoin/indexer/queries";
3
+ import { validateDomainName } from "../../cogop/index.js";
4
+ import { assertWalletMutationContextReady, createFundingMutationSender, } from "../common.js";
5
+ import { getCanonicalIdentitySelector, } from "../identity-selector.js";
6
+ import { normalizeBtcTarget } from "../targets.js";
7
+ export function normalizeDomainMarketDomainName(domainName) {
8
+ const normalized = domainName.trim().toLowerCase();
9
+ if (normalized.length === 0) {
10
+ throw new Error("wallet_domain_missing_domain");
11
+ }
12
+ validateDomainName(normalized);
13
+ return normalized;
14
+ }
15
+ export function parseCogAmountToCogtoshi(raw) {
16
+ const match = /^(-?)(\d+)(?:\.(\d{0,8}))?$/.exec(raw.trim());
17
+ if (match == null) {
18
+ throw new Error(`wallet_sell_invalid_amount_${raw}`);
19
+ }
20
+ const sign = match[1] === "-" ? -1n : 1n;
21
+ const whole = BigInt(match[2] ?? "0");
22
+ const fraction = BigInt((match[3] ?? "").padEnd(8, "0"));
23
+ return sign * ((whole * 100000000n) + fraction);
24
+ }
25
+ export function createDomainMarketIntentFingerprint(parts) {
26
+ return createHash("sha256")
27
+ .update(parts.join("\n"))
28
+ .digest("hex");
29
+ }
30
+ export function createResolvedDomainMarketSenderSummary(sender, selector) {
31
+ return {
32
+ selector,
33
+ localIndex: sender.localIndex,
34
+ scriptPubKeyHex: sender.scriptPubKeyHex,
35
+ address: sender.address,
36
+ };
37
+ }
38
+ export function createResolvedDomainMarketRecipientSummary(recipient) {
39
+ return {
40
+ scriptPubKeyHex: recipient.scriptPubKeyHex,
41
+ address: recipient.address,
42
+ opaque: recipient.opaque,
43
+ };
44
+ }
45
+ export function createTransferEconomicEffectSummary(clearsListing) {
46
+ return {
47
+ kind: "ownership-transfer",
48
+ clearsListing,
49
+ };
50
+ }
51
+ export function createSellEconomicEffectSummary(listedPriceCogtoshi) {
52
+ if (listedPriceCogtoshi === 0n) {
53
+ return {
54
+ kind: "listing-clear",
55
+ listedPriceCogtoshi: "0",
56
+ };
57
+ }
58
+ return {
59
+ kind: "listing-set",
60
+ listedPriceCogtoshi: listedPriceCogtoshi.toString(),
61
+ };
62
+ }
63
+ export function resolveOwnedDomainOperation(context, domainName, errorPrefix) {
64
+ assertWalletMutationContextReady(context, errorPrefix);
65
+ const chainDomain = lookupDomain(context.snapshot.state, domainName);
66
+ if (chainDomain === null) {
67
+ throw new Error(`${errorPrefix}_domain_not_found`);
68
+ }
69
+ if (chainDomain.anchored) {
70
+ throw new Error(`${errorPrefix}_domain_anchored`);
71
+ }
72
+ const ownerHex = Buffer.from(chainDomain.ownerScriptPubKey).toString("hex");
73
+ if (ownerHex !== context.localState.state.funding.scriptPubKeyHex || context.model.walletAddress == null) {
74
+ throw new Error(`${errorPrefix}_owner_not_locally_controlled`);
75
+ }
76
+ return {
77
+ readContext: context,
78
+ state: context.localState.state,
79
+ sender: createFundingMutationSender(context.localState.state),
80
+ senderSelector: context.model.walletAddress,
81
+ chainDomain,
82
+ };
83
+ }
84
+ export function resolveBuyOperation(context, domainName, fromIdentity = null) {
85
+ void fromIdentity;
86
+ assertWalletMutationContextReady(context, "wallet_buy");
87
+ const chainDomain = lookupDomain(context.snapshot.state, domainName);
88
+ if (chainDomain === null) {
89
+ throw new Error("wallet_buy_domain_not_found");
90
+ }
91
+ if (chainDomain.anchored) {
92
+ throw new Error("wallet_buy_domain_anchored");
93
+ }
94
+ const listing = getListing(context.snapshot.state, chainDomain.domainId);
95
+ if (listing === null) {
96
+ throw new Error("wallet_buy_domain_not_listed");
97
+ }
98
+ if (context.model.walletAddress === null) {
99
+ throw new Error("wallet_buy_funding_identity_unavailable");
100
+ }
101
+ const ownerHex = Buffer.from(chainDomain.ownerScriptPubKey).toString("hex");
102
+ if (ownerHex === context.localState.state.funding.scriptPubKeyHex) {
103
+ throw new Error("wallet_buy_already_owner");
104
+ }
105
+ if (getBalance(context.snapshot.state, context.localState.state.funding.scriptPubKeyHex) < listing.priceCogtoshi) {
106
+ throw new Error("wallet_buy_insufficient_cog_balance");
107
+ }
108
+ return {
109
+ readContext: context,
110
+ state: context.localState.state,
111
+ sender: createFundingMutationSender(context.localState.state),
112
+ senderSelector: context.model.walletAddress,
113
+ chainDomain,
114
+ listingPriceCogtoshi: listing.priceCogtoshi,
115
+ buyerSelector: context.model.walletAddress,
116
+ };
117
+ }
118
+ export function createResolvedBuyerSummary(selector, sender) {
119
+ return {
120
+ selector,
121
+ localIndex: sender.localIndex,
122
+ scriptPubKeyHex: sender.scriptPubKeyHex,
123
+ address: sender.address,
124
+ };
125
+ }
126
+ export function createResolvedSellerSummary(scriptPubKeyHex, address) {
127
+ return {
128
+ scriptPubKeyHex,
129
+ address,
130
+ };
131
+ }
@@ -0,0 +1,31 @@
1
+ import type { RpcListUnspentEntry } from "../../../bitcoind/types.js";
2
+ import type { WalletRuntimePaths } from "../../runtime.js";
3
+ import type { WalletSecretProvider } from "../../state/provider.js";
4
+ import type { WalletStateV1 } from "../../types.js";
5
+ import { type MutationSender } from "../common.js";
6
+ import type { BuiltDomainMarketTransaction, DomainMarketBuildState, DomainMarketPlan, DomainMarketRpcClient } from "./types.js";
7
+ import type { RpcDecodedPsbt } from "../../../bitcoind/types.js";
8
+ export declare function prepareDomainMarketBuildState(options: {
9
+ rpc: DomainMarketRpcClient;
10
+ walletName: string;
11
+ state: WalletStateV1;
12
+ provider: WalletSecretProvider;
13
+ nowUnixMs: number;
14
+ paths: WalletRuntimePaths;
15
+ preflightCoinControl: boolean;
16
+ }): Promise<DomainMarketBuildState>;
17
+ export declare function buildPlanForDomainOperation(options: {
18
+ state: WalletStateV1;
19
+ allUtxos: RpcListUnspentEntry[];
20
+ sender: MutationSender;
21
+ opReturnData: Uint8Array;
22
+ errorPrefix: string;
23
+ }): DomainMarketPlan;
24
+ export declare function validateFundedDomainMarketDraft(decoded: RpcDecodedPsbt, funded: BuiltDomainMarketTransaction["funded"], plan: DomainMarketPlan): void;
25
+ export declare function buildDomainMarketTransaction(options: {
26
+ rpc: DomainMarketRpcClient;
27
+ walletName: string;
28
+ state: WalletStateV1;
29
+ plan: DomainMarketPlan;
30
+ feeRateSatVb: number;
31
+ }): Promise<BuiltDomainMarketTransaction>;
@@ -0,0 +1,98 @@
1
+ import { reconcilePersistentPolicyLocks as reconcileWalletCoinControlLocks } from "../../coin-control.js";
2
+ import { buildWalletMutationTransactionWithReserveFallback, outpointKey, saveWalletStatePreservingUnlock, } from "../common.js";
3
+ function encodeOpReturnScript(payload) {
4
+ if (payload.length <= 75) {
5
+ return Buffer.concat([
6
+ Buffer.from([0x6a, payload.length]),
7
+ Buffer.from(payload),
8
+ ]).toString("hex");
9
+ }
10
+ return Buffer.concat([
11
+ Buffer.from([0x6a, 0x4c, payload.length]),
12
+ Buffer.from(payload),
13
+ ]).toString("hex");
14
+ }
15
+ export async function prepareDomainMarketBuildState(options) {
16
+ if (!options.preflightCoinControl) {
17
+ return {
18
+ state: options.state,
19
+ allUtxos: (await options.rpc.listUnspent(options.walletName, 1)).slice(),
20
+ };
21
+ }
22
+ const reconciled = await reconcileWalletCoinControlLocks({
23
+ rpc: options.rpc,
24
+ walletName: options.walletName,
25
+ state: options.state,
26
+ });
27
+ const nextState = reconciled.changed
28
+ ? {
29
+ ...reconciled.state,
30
+ stateRevision: reconciled.state.stateRevision + 1,
31
+ lastWrittenAtUnixMs: options.nowUnixMs,
32
+ }
33
+ : reconciled.state;
34
+ if (reconciled.changed) {
35
+ await saveWalletStatePreservingUnlock({
36
+ state: nextState,
37
+ provider: options.provider,
38
+ nowUnixMs: options.nowUnixMs,
39
+ paths: options.paths,
40
+ });
41
+ }
42
+ return {
43
+ state: nextState,
44
+ allUtxos: (await options.rpc.listUnspent(options.walletName, 1)).slice(),
45
+ };
46
+ }
47
+ export function buildPlanForDomainOperation(options) {
48
+ const fundingUtxos = options.allUtxos.filter((entry) => entry.scriptPubKey === options.state.funding.scriptPubKeyHex
49
+ && entry.confirmations >= 1
50
+ && entry.spendable !== false
51
+ && entry.safe !== false);
52
+ return {
53
+ sender: options.sender,
54
+ changeAddress: options.state.funding.address,
55
+ fixedInputs: [],
56
+ outputs: [{ data: Buffer.from(options.opReturnData).toString("hex") }],
57
+ changePosition: 1,
58
+ expectedOpReturnScriptHex: encodeOpReturnScript(options.opReturnData),
59
+ allowedFundingScriptPubKeyHex: options.state.funding.scriptPubKeyHex,
60
+ eligibleFundingOutpointKeys: new Set(fundingUtxos.map((entry) => outpointKey({ txid: entry.txid, vout: entry.vout }))),
61
+ errorPrefix: options.errorPrefix,
62
+ };
63
+ }
64
+ export function validateFundedDomainMarketDraft(decoded, funded, plan) {
65
+ const inputs = decoded.tx.vin;
66
+ const outputs = decoded.tx.vout;
67
+ if (inputs.length === 0) {
68
+ throw new Error(`${plan.errorPrefix}_missing_sender_input`);
69
+ }
70
+ if (outputs[0]?.scriptPubKey?.hex !== plan.expectedOpReturnScriptHex) {
71
+ throw new Error(`${plan.errorPrefix}_opreturn_mismatch`);
72
+ }
73
+ const expectedWithoutChange = 1;
74
+ if (funded.changepos === -1) {
75
+ if (outputs.length !== expectedWithoutChange) {
76
+ throw new Error(`${plan.errorPrefix}_unexpected_output_count`);
77
+ }
78
+ return;
79
+ }
80
+ if (funded.changepos !== plan.changePosition || outputs.length !== expectedWithoutChange + 1) {
81
+ throw new Error(`${plan.errorPrefix}_change_position_mismatch`);
82
+ }
83
+ if (outputs[funded.changepos]?.scriptPubKey?.hex !== plan.allowedFundingScriptPubKeyHex) {
84
+ throw new Error(`${plan.errorPrefix}_change_output_mismatch`);
85
+ }
86
+ }
87
+ export async function buildDomainMarketTransaction(options) {
88
+ return buildWalletMutationTransactionWithReserveFallback({
89
+ rpc: options.rpc,
90
+ walletName: options.walletName,
91
+ state: options.state,
92
+ plan: options.plan,
93
+ validateFundedDraft: validateFundedDomainMarketDraft,
94
+ finalizeErrorCode: `${options.plan.errorPrefix}_finalize_failed`,
95
+ mempoolRejectPrefix: `${options.plan.errorPrefix}_mempool_rejected`,
96
+ feeRate: options.feeRateSatVb,
97
+ });
98
+ }
@@ -0,0 +1,45 @@
1
+ import type { PendingMutationRecord } from "../../types.js";
2
+ import type { WalletMutationFeeSummary } from "../common.js";
3
+ import type { BuyDomainMutationOperation, DomainMarketMutationResult, SellDomainMutationOperation, TransferDomainMutationOperation } from "./types.js";
4
+ export declare function createTransferReuseResult(options: {
5
+ operation: TransferDomainMutationOperation;
6
+ mutation: PendingMutationRecord;
7
+ resolution: "confirmed" | "live";
8
+ fees: WalletMutationFeeSummary;
9
+ }): DomainMarketMutationResult;
10
+ export declare function createTransferResult(options: {
11
+ operation: TransferDomainMutationOperation;
12
+ mutation: PendingMutationRecord;
13
+ builtTxid: string | null;
14
+ status: "live" | "confirmed";
15
+ reusedExisting: boolean;
16
+ fees: WalletMutationFeeSummary;
17
+ }): DomainMarketMutationResult;
18
+ export declare function createSellReuseResult(options: {
19
+ operation: SellDomainMutationOperation;
20
+ mutation: PendingMutationRecord;
21
+ resolution: "confirmed" | "live";
22
+ fees: WalletMutationFeeSummary;
23
+ }): DomainMarketMutationResult;
24
+ export declare function createSellResult(options: {
25
+ operation: SellDomainMutationOperation;
26
+ mutation: PendingMutationRecord;
27
+ builtTxid: string | null;
28
+ status: "live" | "confirmed";
29
+ reusedExisting: boolean;
30
+ fees: WalletMutationFeeSummary;
31
+ }): DomainMarketMutationResult;
32
+ export declare function createBuyReuseResult(options: {
33
+ operation: BuyDomainMutationOperation;
34
+ mutation: PendingMutationRecord;
35
+ resolution: "confirmed" | "live";
36
+ fees: WalletMutationFeeSummary;
37
+ }): DomainMarketMutationResult;
38
+ export declare function createBuyResult(options: {
39
+ operation: BuyDomainMutationOperation;
40
+ mutation: PendingMutationRecord;
41
+ builtTxid: string | null;
42
+ status: "live" | "confirmed";
43
+ reusedExisting: boolean;
44
+ fees: WalletMutationFeeSummary;
45
+ }): DomainMarketMutationResult;
@@ -0,0 +1,88 @@
1
+ export function createTransferReuseResult(options) {
2
+ return {
3
+ kind: "transfer",
4
+ domainName: options.operation.normalizedDomainName,
5
+ txid: options.mutation.attemptedTxid ?? "unknown",
6
+ status: options.resolution,
7
+ reusedExisting: true,
8
+ recipientScriptPubKeyHex: options.operation.recipient.scriptPubKeyHex,
9
+ resolved: {
10
+ sender: options.operation.resolvedSender,
11
+ recipient: options.operation.resolvedRecipient,
12
+ economicEffect: options.operation.resolvedEconomicEffect,
13
+ },
14
+ fees: options.fees,
15
+ };
16
+ }
17
+ export function createTransferResult(options) {
18
+ return {
19
+ kind: "transfer",
20
+ domainName: options.operation.normalizedDomainName,
21
+ txid: options.mutation.attemptedTxid ?? options.builtTxid ?? "unknown",
22
+ status: options.status,
23
+ reusedExisting: options.reusedExisting,
24
+ recipientScriptPubKeyHex: options.operation.recipient.scriptPubKeyHex,
25
+ resolved: {
26
+ sender: options.operation.resolvedSender,
27
+ recipient: options.operation.resolvedRecipient,
28
+ economicEffect: options.operation.resolvedEconomicEffect,
29
+ },
30
+ fees: options.fees,
31
+ };
32
+ }
33
+ export function createSellReuseResult(options) {
34
+ return {
35
+ kind: "sell",
36
+ domainName: options.operation.normalizedDomainName,
37
+ txid: options.mutation.attemptedTxid ?? "unknown",
38
+ status: options.resolution,
39
+ reusedExisting: true,
40
+ listedPriceCogtoshi: options.operation.listedPriceCogtoshi,
41
+ resolved: {
42
+ sender: options.operation.resolvedSender,
43
+ economicEffect: options.operation.resolvedEconomicEffect,
44
+ },
45
+ fees: options.fees,
46
+ };
47
+ }
48
+ export function createSellResult(options) {
49
+ return {
50
+ kind: "sell",
51
+ domainName: options.operation.normalizedDomainName,
52
+ txid: options.mutation.attemptedTxid ?? options.builtTxid ?? "unknown",
53
+ status: options.status,
54
+ reusedExisting: options.reusedExisting,
55
+ listedPriceCogtoshi: options.operation.listedPriceCogtoshi,
56
+ resolved: {
57
+ sender: options.operation.resolvedSender,
58
+ economicEffect: options.operation.resolvedEconomicEffect,
59
+ },
60
+ fees: options.fees,
61
+ };
62
+ }
63
+ export function createBuyReuseResult(options) {
64
+ return {
65
+ kind: "buy",
66
+ domainName: options.operation.normalizedDomainName,
67
+ txid: options.mutation.attemptedTxid ?? "unknown",
68
+ status: options.resolution,
69
+ reusedExisting: true,
70
+ listedPriceCogtoshi: options.operation.listingPriceCogtoshi,
71
+ resolvedBuyer: options.operation.resolvedBuyer,
72
+ resolvedSeller: options.operation.resolvedSeller,
73
+ fees: options.fees,
74
+ };
75
+ }
76
+ export function createBuyResult(options) {
77
+ return {
78
+ kind: "buy",
79
+ domainName: options.operation.normalizedDomainName,
80
+ txid: options.mutation.attemptedTxid ?? options.builtTxid ?? "unknown",
81
+ status: options.status,
82
+ reusedExisting: options.reusedExisting,
83
+ listedPriceCogtoshi: options.operation.listingPriceCogtoshi,
84
+ resolvedBuyer: options.operation.resolvedBuyer,
85
+ resolvedSeller: options.operation.resolvedSeller,
86
+ fees: options.fees,
87
+ };
88
+ }
@@ -0,0 +1,221 @@
1
+ import type { lookupDomain } from "@cogcoin/indexer/queries";
2
+ import type { RpcListUnspentEntry, RpcTransaction } from "../../../bitcoind/types.js";
3
+ import type { WalletPrompter } from "../../lifecycle.js";
4
+ import type { WalletReadContext } from "../../read/index.js";
5
+ import type { WalletRuntimePaths } from "../../runtime.js";
6
+ import type { WalletSecretProvider } from "../../state/provider.js";
7
+ import type { PendingMutationRecord, WalletStateV1 } from "../../types.js";
8
+ import type { BuiltWalletMutationTransaction, FixedWalletInput, MutationSender, WalletMutationFeeSummary, WalletMutationRpcClient } from "../common.js";
9
+ export type DomainMarketKind = "transfer" | "sell" | "buy";
10
+ export interface DomainMarketRpcClient extends WalletMutationRpcClient {
11
+ getBlockchainInfo(): Promise<{
12
+ blocks: number;
13
+ }>;
14
+ sendRawTransaction(hex: string): Promise<string>;
15
+ getRawMempool(): Promise<string[]>;
16
+ getRawTransaction(txid: string, verbose?: boolean): Promise<RpcTransaction>;
17
+ }
18
+ export interface DomainMarketPlan {
19
+ sender: MutationSender;
20
+ changeAddress: string;
21
+ fixedInputs: FixedWalletInput[];
22
+ outputs: unknown[];
23
+ changePosition: number;
24
+ expectedOpReturnScriptHex: string;
25
+ allowedFundingScriptPubKeyHex: string;
26
+ eligibleFundingOutpointKeys: Set<string>;
27
+ errorPrefix: string;
28
+ }
29
+ export interface BuiltDomainMarketTransaction extends BuiltWalletMutationTransaction {
30
+ }
31
+ export interface DomainOperationContext {
32
+ readContext: WalletReadContext;
33
+ state: WalletStateV1;
34
+ sender: MutationSender;
35
+ senderSelector: string;
36
+ chainDomain: NonNullable<ReturnType<typeof lookupDomain>>;
37
+ }
38
+ export interface BuyOperationContext extends DomainOperationContext {
39
+ listingPriceCogtoshi: bigint;
40
+ buyerSelector: string;
41
+ }
42
+ export interface TransferDomainMutationOperation extends DomainOperationContext {
43
+ normalizedDomainName: string;
44
+ recipient: ReturnType<typeof import("../targets.js").normalizeBtcTarget>;
45
+ resolvedSender: DomainMarketResolvedSenderSummary;
46
+ resolvedRecipient: DomainMarketResolvedRecipientSummary;
47
+ resolvedEconomicEffect: DomainMarketResolvedEconomicEffect;
48
+ }
49
+ export interface SellDomainMutationOperation extends DomainOperationContext {
50
+ normalizedDomainName: string;
51
+ listedPriceCogtoshi: bigint;
52
+ resolvedSender: DomainMarketResolvedSenderSummary;
53
+ resolvedEconomicEffect: DomainMarketResolvedEconomicEffect;
54
+ }
55
+ export interface BuyDomainMutationOperation extends BuyOperationContext {
56
+ normalizedDomainName: string;
57
+ sellerScriptPubKeyHex: string;
58
+ resolvedBuyer: DomainMarketResolvedBuyerSummary;
59
+ resolvedSeller: DomainMarketResolvedSellerSummary;
60
+ }
61
+ export type DomainMarketOperation = TransferDomainMutationOperation | SellDomainMutationOperation | BuyDomainMutationOperation;
62
+ export interface DomainMarketResolvedSenderSummary {
63
+ selector: string;
64
+ localIndex: number;
65
+ scriptPubKeyHex: string;
66
+ address: string;
67
+ }
68
+ export interface DomainMarketResolvedRecipientSummary {
69
+ scriptPubKeyHex: string;
70
+ address: string | null;
71
+ opaque: boolean;
72
+ }
73
+ export interface DomainMarketResolvedBuyerSummary {
74
+ selector: string;
75
+ localIndex: number;
76
+ scriptPubKeyHex: string;
77
+ address: string;
78
+ }
79
+ export interface DomainMarketResolvedSellerSummary {
80
+ scriptPubKeyHex: string;
81
+ address: string | null;
82
+ }
83
+ export type DomainMarketResolvedEconomicEffect = {
84
+ kind: "ownership-transfer";
85
+ clearsListing: boolean;
86
+ } | {
87
+ kind: "listing-set";
88
+ listedPriceCogtoshi: string;
89
+ } | {
90
+ kind: "listing-clear";
91
+ listedPriceCogtoshi: "0";
92
+ };
93
+ export interface DomainMarketResolvedSummary {
94
+ sender: DomainMarketResolvedSenderSummary;
95
+ recipient?: DomainMarketResolvedRecipientSummary | null;
96
+ economicEffect: DomainMarketResolvedEconomicEffect;
97
+ }
98
+ export interface TransferDomainOptions {
99
+ domainName: string;
100
+ target: string;
101
+ feeRateSatVb?: number | null;
102
+ dataDir: string;
103
+ databasePath: string;
104
+ provider?: WalletSecretProvider;
105
+ prompter: WalletPrompter;
106
+ assumeYes?: boolean;
107
+ nowUnixMs?: number;
108
+ paths?: WalletRuntimePaths;
109
+ openReadContext?: typeof import("../../read/index.js").openWalletReadContext;
110
+ attachService?: typeof import("../../../bitcoind/service.js").attachOrStartManagedBitcoindService;
111
+ rpcFactory?: (config: Parameters<typeof import("../../../bitcoind/node.js").createRpcClient>[0]) => DomainMarketRpcClient;
112
+ }
113
+ export interface SellDomainOptions {
114
+ domainName: string;
115
+ listedPriceCogtoshi: bigint;
116
+ feeRateSatVb?: number | null;
117
+ dataDir: string;
118
+ databasePath: string;
119
+ provider?: WalletSecretProvider;
120
+ prompter: WalletPrompter;
121
+ assumeYes?: boolean;
122
+ nowUnixMs?: number;
123
+ paths?: WalletRuntimePaths;
124
+ openReadContext?: typeof import("../../read/index.js").openWalletReadContext;
125
+ attachService?: typeof import("../../../bitcoind/service.js").attachOrStartManagedBitcoindService;
126
+ rpcFactory?: (config: Parameters<typeof import("../../../bitcoind/node.js").createRpcClient>[0]) => DomainMarketRpcClient;
127
+ }
128
+ export interface BuyDomainOptions {
129
+ domainName: string;
130
+ fromIdentity?: string | null;
131
+ feeRateSatVb?: number | null;
132
+ dataDir: string;
133
+ databasePath: string;
134
+ provider?: WalletSecretProvider;
135
+ prompter: WalletPrompter;
136
+ assumeYes?: boolean;
137
+ nowUnixMs?: number;
138
+ paths?: WalletRuntimePaths;
139
+ openReadContext?: typeof import("../../read/index.js").openWalletReadContext;
140
+ attachService?: typeof import("../../../bitcoind/service.js").attachOrStartManagedBitcoindService;
141
+ rpcFactory?: (config: Parameters<typeof import("../../../bitcoind/node.js").createRpcClient>[0]) => DomainMarketRpcClient;
142
+ }
143
+ export interface DomainMarketMutationResult {
144
+ kind: DomainMarketKind;
145
+ domainName: string;
146
+ txid: string;
147
+ status: "live" | "confirmed";
148
+ reusedExisting: boolean;
149
+ listedPriceCogtoshi?: bigint;
150
+ recipientScriptPubKeyHex?: string | null;
151
+ resolved?: DomainMarketResolvedSummary | null;
152
+ resolvedBuyer?: DomainMarketResolvedBuyerSummary | null;
153
+ resolvedSeller?: DomainMarketResolvedSellerSummary | null;
154
+ fees: WalletMutationFeeSummary;
155
+ }
156
+ export interface DomainMarketDraftMutationOptions {
157
+ kind: DomainMarketKind;
158
+ domainName: string;
159
+ sender: MutationSender;
160
+ intentFingerprintHex: string;
161
+ nowUnixMs: number;
162
+ feeSelection: {
163
+ feeRateSatVb: number;
164
+ source: "custom-satvb" | "estimated-next-block-plus-one" | "fallback-default";
165
+ };
166
+ parentDomainName?: string | null;
167
+ recipientScriptPubKeyHex?: string | null;
168
+ priceCogtoshi?: bigint | null;
169
+ existing?: PendingMutationRecord | null;
170
+ }
171
+ export interface DomainMarketBuildState {
172
+ state: WalletStateV1;
173
+ allUtxos: RpcListUnspentEntry[];
174
+ }
175
+ export interface DomainMarketMutationVariant<TOperation extends DomainMarketOperation> {
176
+ controlLockPurpose: string;
177
+ preemptionReason: string;
178
+ errorPrefix: string;
179
+ repairRequiredErrorCode: string;
180
+ resolveOperation(readContext: WalletReadContext): TOperation;
181
+ createIntentFingerprint(operation: TOperation): string;
182
+ confirm(operation: TOperation): Promise<void>;
183
+ createDraftMutation(options: {
184
+ operation: TOperation;
185
+ existingMutation: PendingMutationRecord | null;
186
+ feeSelection: {
187
+ feeRateSatVb: number;
188
+ source: "custom-satvb" | "estimated-next-block-plus-one" | "fallback-default";
189
+ };
190
+ intentFingerprintHex: string;
191
+ nowUnixMs: number;
192
+ }): PendingMutationRecord;
193
+ createOpReturnData(operation: TOperation): Uint8Array;
194
+ beforePublish?(operation: TOperation): Promise<void>;
195
+ afterAccepted(options: {
196
+ operation: TOperation;
197
+ acceptedState: WalletStateV1;
198
+ broadcastingMutation: PendingMutationRecord;
199
+ built: BuiltDomainMarketTransaction;
200
+ nowUnixMs: number;
201
+ snapshot: WalletReadContext["snapshot"];
202
+ }): Promise<{
203
+ state: WalletStateV1;
204
+ mutation: PendingMutationRecord;
205
+ status: "live" | "confirmed";
206
+ }>;
207
+ createReuseResult(options: {
208
+ operation: TOperation;
209
+ mutation: PendingMutationRecord;
210
+ resolution: "confirmed" | "live";
211
+ fees: WalletMutationFeeSummary;
212
+ }): DomainMarketMutationResult;
213
+ createResult(options: {
214
+ operation: TOperation;
215
+ mutation: PendingMutationRecord;
216
+ builtTxid: string | null;
217
+ status: "live" | "confirmed";
218
+ reusedExisting: boolean;
219
+ fees: WalletMutationFeeSummary;
220
+ }): DomainMarketMutationResult;
221
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import type { BuyDomainMutationOperation, BuyDomainOptions, DomainMarketMutationVariant } from "../types.js";
2
+ export declare function createBuyDomainVariant(options: BuyDomainOptions): DomainMarketMutationVariant<BuyDomainMutationOperation>;