@cogcoin/client 1.1.8 → 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 (266) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/commands/mining-read.js +1 -1
  3. package/dist/cli/commands/wallet-mutation/anchor.d.ts +2 -0
  4. package/dist/cli/commands/wallet-mutation/anchor.js +33 -0
  5. package/dist/cli/commands/wallet-mutation/bitcoin-transfer.d.ts +2 -0
  6. package/dist/cli/commands/wallet-mutation/bitcoin-transfer.js +32 -0
  7. package/dist/cli/commands/wallet-mutation/cog.d.ts +2 -0
  8. package/dist/cli/commands/wallet-mutation/cog.js +131 -0
  9. package/dist/cli/commands/wallet-mutation/context.d.ts +3 -0
  10. package/dist/cli/commands/wallet-mutation/context.js +18 -0
  11. package/dist/cli/commands/wallet-mutation/domain-admin.d.ts +2 -0
  12. package/dist/cli/commands/wallet-mutation/domain-admin.js +173 -0
  13. package/dist/cli/commands/wallet-mutation/domain-market.d.ts +2 -0
  14. package/dist/cli/commands/wallet-mutation/domain-market.js +107 -0
  15. package/dist/cli/commands/wallet-mutation/field.d.ts +2 -0
  16. package/dist/cli/commands/wallet-mutation/field.js +125 -0
  17. package/dist/cli/commands/wallet-mutation/register.d.ts +2 -0
  18. package/dist/cli/commands/wallet-mutation/register.js +38 -0
  19. package/dist/cli/commands/wallet-mutation/registry.d.ts +3 -0
  20. package/dist/cli/commands/wallet-mutation/registry.js +39 -0
  21. package/dist/cli/commands/wallet-mutation/reputation.d.ts +2 -0
  22. package/dist/cli/commands/wallet-mutation/reputation.js +57 -0
  23. package/dist/cli/commands/wallet-mutation/types.d.ts +32 -0
  24. package/dist/cli/commands/wallet-mutation/types.js +1 -0
  25. package/dist/cli/commands/wallet-mutation.js +13 -765
  26. package/dist/cli/commands/wallet-read.js +4 -4
  27. package/dist/cli/mutation-success.d.ts +0 -2
  28. package/dist/cli/output/classify.d.ts +7 -0
  29. package/dist/cli/output/classify.js +94 -0
  30. package/dist/cli/output/render.d.ts +2 -0
  31. package/dist/cli/output/render.js +13 -0
  32. package/dist/cli/output/rules/cli-surface.d.ts +2 -0
  33. package/dist/cli/output/rules/cli-surface.js +110 -0
  34. package/dist/cli/output/rules/generic.d.ts +2 -0
  35. package/dist/cli/output/rules/generic.js +13 -0
  36. package/dist/cli/output/rules/index.d.ts +2 -0
  37. package/dist/cli/output/rules/index.js +24 -0
  38. package/dist/cli/output/rules/mining-update.d.ts +2 -0
  39. package/dist/cli/output/rules/mining-update.js +68 -0
  40. package/dist/cli/output/rules/services.d.ts +2 -0
  41. package/dist/cli/output/rules/services.js +110 -0
  42. package/dist/cli/output/rules/wallet-admin.d.ts +2 -0
  43. package/dist/cli/output/rules/wallet-admin.js +224 -0
  44. package/dist/cli/output/rules/wallet-mutations.d.ts +2 -0
  45. package/dist/cli/output/rules/wallet-mutations.js +274 -0
  46. package/dist/cli/output/types.d.ts +16 -0
  47. package/dist/cli/output/types.js +1 -0
  48. package/dist/cli/output.d.ts +2 -168
  49. package/dist/cli/output.js +6 -989
  50. package/dist/cli/pagination.d.ts +15 -0
  51. package/dist/cli/pagination.js +16 -0
  52. package/dist/cli/recommendations.d.ts +4 -0
  53. package/dist/cli/recommendations.js +108 -0
  54. package/dist/cli/wallet-format/availability.d.ts +5 -0
  55. package/dist/cli/wallet-format/availability.js +96 -0
  56. package/dist/cli/wallet-format/balance.d.ts +2 -0
  57. package/dist/cli/wallet-format/balance.js +162 -0
  58. package/dist/cli/wallet-format/domains.d.ts +8 -0
  59. package/dist/cli/wallet-format/domains.js +84 -0
  60. package/dist/cli/wallet-format/fields.d.ts +6 -0
  61. package/dist/cli/wallet-format/fields.js +61 -0
  62. package/dist/cli/wallet-format/identity.d.ts +5 -0
  63. package/dist/cli/wallet-format/identity.js +19 -0
  64. package/dist/cli/wallet-format/locks.d.ts +7 -0
  65. package/dist/cli/wallet-format/locks.js +52 -0
  66. package/dist/cli/wallet-format/overview.d.ts +2 -0
  67. package/dist/cli/wallet-format/overview.js +122 -0
  68. package/dist/cli/wallet-format/pending.d.ts +13 -0
  69. package/dist/cli/wallet-format/pending.js +101 -0
  70. package/dist/cli/wallet-format/shared.d.ts +7 -0
  71. package/dist/cli/wallet-format/shared.js +31 -0
  72. package/dist/cli/wallet-format/status.d.ts +3 -0
  73. package/dist/cli/wallet-format/status.js +27 -0
  74. package/dist/cli/wallet-format.d.ts +8 -30
  75. package/dist/cli/wallet-format.js +8 -830
  76. package/dist/cli/wallet-read-helpers.d.ts +6 -0
  77. package/dist/cli/wallet-read-helpers.js +17 -0
  78. package/dist/wallet/mining/candidate.d.ts +1 -1
  79. package/dist/wallet/mining/candidate.js +3 -3
  80. package/dist/wallet/mining/constants.d.ts +2 -2
  81. package/dist/wallet/mining/constants.js +2 -2
  82. package/dist/wallet/mining/sentence-protocol.d.ts +2 -2
  83. package/dist/wallet/mining/sentences.js +8 -8
  84. package/dist/wallet/tx/anchor/confirm.d.ts +15 -0
  85. package/dist/wallet/tx/anchor/confirm.js +60 -0
  86. package/dist/wallet/tx/anchor/draft.d.ts +39 -0
  87. package/dist/wallet/tx/anchor/draft.js +167 -0
  88. package/dist/wallet/tx/anchor/index.d.ts +5 -0
  89. package/dist/wallet/tx/anchor/index.js +148 -0
  90. package/dist/wallet/tx/anchor/intent.d.ts +61 -0
  91. package/dist/wallet/tx/anchor/intent.js +101 -0
  92. package/dist/wallet/tx/anchor/plan.d.ts +3 -0
  93. package/dist/wallet/tx/anchor/plan.js +18 -0
  94. package/dist/wallet/tx/anchor/result.d.ts +25 -0
  95. package/dist/wallet/tx/anchor/result.js +20 -0
  96. package/dist/wallet/tx/anchor.d.ts +1 -39
  97. package/dist/wallet/tx/anchor.js +1 -494
  98. package/dist/wallet/tx/bitcoin-transfer/confirm.d.ts +7 -0
  99. package/dist/wallet/tx/bitcoin-transfer/confirm.js +11 -0
  100. package/dist/wallet/tx/bitcoin-transfer/index.d.ts +5 -0
  101. package/dist/wallet/tx/bitcoin-transfer/index.js +112 -0
  102. package/dist/wallet/tx/bitcoin-transfer/intent.d.ts +52 -0
  103. package/dist/wallet/tx/bitcoin-transfer/intent.js +74 -0
  104. package/dist/wallet/tx/bitcoin-transfer/plan.d.ts +5 -0
  105. package/dist/wallet/tx/bitcoin-transfer/plan.js +21 -0
  106. package/dist/wallet/tx/bitcoin-transfer/result.d.ts +19 -0
  107. package/dist/wallet/tx/bitcoin-transfer/result.js +16 -0
  108. package/dist/wallet/tx/bitcoin-transfer.d.ts +1 -35
  109. package/dist/wallet/tx/bitcoin-transfer.js +1 -200
  110. package/dist/wallet/tx/cog/confirm.d.ts +13 -0
  111. package/dist/wallet/tx/cog/confirm.js +59 -0
  112. package/dist/wallet/tx/cog/draft.d.ts +20 -0
  113. package/dist/wallet/tx/cog/draft.js +114 -0
  114. package/dist/wallet/tx/cog/index.d.ts +6 -0
  115. package/dist/wallet/tx/cog/index.js +117 -0
  116. package/dist/wallet/tx/cog/intent.d.ts +30 -0
  117. package/dist/wallet/tx/cog/intent.js +169 -0
  118. package/dist/wallet/tx/cog/plan.d.ts +19 -0
  119. package/dist/wallet/tx/cog/plan.js +65 -0
  120. package/dist/wallet/tx/cog/result.d.ts +27 -0
  121. package/dist/wallet/tx/cog/result.js +28 -0
  122. package/dist/wallet/tx/cog/types.d.ts +186 -0
  123. package/dist/wallet/tx/cog/types.js +2 -0
  124. package/dist/wallet/tx/cog/variants/claim.d.ts +3 -0
  125. package/dist/wallet/tx/cog/variants/claim.js +92 -0
  126. package/dist/wallet/tx/cog/variants/lock.d.ts +2 -0
  127. package/dist/wallet/tx/cog/variants/lock.js +102 -0
  128. package/dist/wallet/tx/cog/variants/send.d.ts +2 -0
  129. package/dist/wallet/tx/cog/variants/send.js +77 -0
  130. package/dist/wallet/tx/cog.d.ts +1 -96
  131. package/dist/wallet/tx/cog.js +1 -824
  132. package/dist/wallet/tx/common.d.ts +14 -199
  133. package/dist/wallet/tx/common.js +10 -493
  134. package/dist/wallet/tx/domain-admin/confirm.d.ts +17 -0
  135. package/dist/wallet/tx/domain-admin/confirm.js +58 -0
  136. package/dist/wallet/tx/domain-admin/draft.d.ts +20 -0
  137. package/dist/wallet/tx/domain-admin/draft.js +161 -0
  138. package/dist/wallet/tx/domain-admin/index.d.ts +9 -0
  139. package/dist/wallet/tx/domain-admin/index.js +150 -0
  140. package/dist/wallet/tx/domain-admin/intent.d.ts +12 -0
  141. package/dist/wallet/tx/domain-admin/intent.js +61 -0
  142. package/dist/wallet/tx/domain-admin/plan.d.ts +19 -0
  143. package/dist/wallet/tx/domain-admin/plan.js +64 -0
  144. package/dist/wallet/tx/domain-admin/result.d.ts +19 -0
  145. package/dist/wallet/tx/domain-admin/result.js +33 -0
  146. package/dist/wallet/tx/domain-admin/types.d.ts +162 -0
  147. package/dist/wallet/tx/domain-admin/types.js +1 -0
  148. package/dist/wallet/tx/domain-admin/variants/canonical.d.ts +2 -0
  149. package/dist/wallet/tx/domain-admin/variants/canonical.js +22 -0
  150. package/dist/wallet/tx/domain-admin/variants/delegate.d.ts +3 -0
  151. package/dist/wallet/tx/domain-admin/variants/delegate.js +60 -0
  152. package/dist/wallet/tx/domain-admin/variants/endpoint.d.ts +3 -0
  153. package/dist/wallet/tx/domain-admin/variants/endpoint.js +102 -0
  154. package/dist/wallet/tx/domain-admin/variants/miner.d.ts +3 -0
  155. package/dist/wallet/tx/domain-admin/variants/miner.js +59 -0
  156. package/dist/wallet/tx/domain-admin.d.ts +1 -107
  157. package/dist/wallet/tx/domain-admin.js +1 -729
  158. package/dist/wallet/tx/domain-market/confirm.d.ts +6 -0
  159. package/dist/wallet/tx/domain-market/confirm.js +52 -0
  160. package/dist/wallet/tx/domain-market/draft.d.ts +43 -0
  161. package/dist/wallet/tx/domain-market/draft.js +286 -0
  162. package/dist/wallet/tx/domain-market/index.d.ts +6 -0
  163. package/dist/wallet/tx/domain-market/index.js +145 -0
  164. package/dist/wallet/tx/domain-market/intent.d.ts +15 -0
  165. package/dist/wallet/tx/domain-market/intent.js +131 -0
  166. package/dist/wallet/tx/domain-market/plan.d.ts +31 -0
  167. package/dist/wallet/tx/domain-market/plan.js +98 -0
  168. package/dist/wallet/tx/domain-market/result.d.ts +45 -0
  169. package/dist/wallet/tx/domain-market/result.js +88 -0
  170. package/dist/wallet/tx/domain-market/types.d.ts +221 -0
  171. package/dist/wallet/tx/domain-market/types.js +1 -0
  172. package/dist/wallet/tx/domain-market/variants/buy.d.ts +2 -0
  173. package/dist/wallet/tx/domain-market/variants/buy.js +103 -0
  174. package/dist/wallet/tx/domain-market/variants/sell.d.ts +2 -0
  175. package/dist/wallet/tx/domain-market/variants/sell.js +91 -0
  176. package/dist/wallet/tx/domain-market/variants/transfer.d.ts +2 -0
  177. package/dist/wallet/tx/domain-market/variants/transfer.js +105 -0
  178. package/dist/wallet/tx/domain-market.d.ts +1 -116
  179. package/dist/wallet/tx/domain-market.js +1 -1078
  180. package/dist/wallet/tx/draft-build.d.ts +60 -0
  181. package/dist/wallet/tx/draft-build.js +127 -0
  182. package/dist/wallet/tx/executor.d.ts +6 -40
  183. package/dist/wallet/tx/executor.js +6 -100
  184. package/dist/wallet/tx/fee.d.ts +30 -0
  185. package/dist/wallet/tx/fee.js +98 -0
  186. package/dist/wallet/tx/field/confirm.d.ts +11 -0
  187. package/dist/wallet/tx/field/confirm.js +19 -0
  188. package/dist/wallet/tx/field/draft.d.ts +23 -0
  189. package/dist/wallet/tx/field/draft.js +202 -0
  190. package/dist/wallet/tx/field/index.d.ts +5 -0
  191. package/dist/wallet/tx/field/index.js +140 -0
  192. package/dist/wallet/tx/field/intent.d.ts +5 -0
  193. package/dist/wallet/tx/field/intent.js +50 -0
  194. package/dist/wallet/tx/field/plan.d.ts +20 -0
  195. package/dist/wallet/tx/field/plan.js +65 -0
  196. package/dist/wallet/tx/field/result.d.ts +29 -0
  197. package/dist/wallet/tx/field/result.js +103 -0
  198. package/dist/wallet/tx/field/types.d.ts +163 -0
  199. package/dist/wallet/tx/field/types.js +1 -0
  200. package/dist/wallet/tx/field/variants/clear.d.ts +2 -0
  201. package/dist/wallet/tx/field/variants/clear.js +60 -0
  202. package/dist/wallet/tx/field/variants/create.d.ts +2 -0
  203. package/dist/wallet/tx/field/variants/create.js +67 -0
  204. package/dist/wallet/tx/field/variants/set.d.ts +2 -0
  205. package/dist/wallet/tx/field/variants/set.js +195 -0
  206. package/dist/wallet/tx/field.d.ts +1 -95
  207. package/dist/wallet/tx/field.js +1 -920
  208. package/dist/wallet/tx/mining-preemption.d.ts +6 -0
  209. package/dist/wallet/tx/mining-preemption.js +7 -0
  210. package/dist/wallet/tx/primitives.d.ts +13 -0
  211. package/dist/wallet/tx/primitives.js +42 -0
  212. package/dist/wallet/tx/psbt-assert.d.ts +14 -0
  213. package/dist/wallet/tx/psbt-assert.js +39 -0
  214. package/dist/wallet/tx/publish.d.ts +37 -0
  215. package/dist/wallet/tx/publish.js +88 -0
  216. package/dist/wallet/tx/readiness.d.ts +7 -0
  217. package/dist/wallet/tx/readiness.js +61 -0
  218. package/dist/wallet/tx/reconcile.d.ts +24 -0
  219. package/dist/wallet/tx/reconcile.js +72 -0
  220. package/dist/wallet/tx/register/confirm.d.ts +6 -0
  221. package/dist/wallet/tx/register/confirm.js +66 -0
  222. package/dist/wallet/tx/register/draft.d.ts +42 -0
  223. package/dist/wallet/tx/register/draft.js +181 -0
  224. package/dist/wallet/tx/register/index.d.ts +6 -0
  225. package/dist/wallet/tx/register/index.js +158 -0
  226. package/dist/wallet/tx/register/intent.d.ts +74 -0
  227. package/dist/wallet/tx/register/intent.js +119 -0
  228. package/dist/wallet/tx/register/plan.d.ts +43 -0
  229. package/dist/wallet/tx/register/plan.js +168 -0
  230. package/dist/wallet/tx/register/result.d.ts +78 -0
  231. package/dist/wallet/tx/register/result.js +41 -0
  232. package/dist/wallet/tx/register.d.ts +1 -70
  233. package/dist/wallet/tx/register.js +1 -681
  234. package/dist/wallet/tx/reputation/confirm.d.ts +11 -0
  235. package/dist/wallet/tx/reputation/confirm.js +51 -0
  236. package/dist/wallet/tx/reputation/draft.d.ts +20 -0
  237. package/dist/wallet/tx/reputation/draft.js +130 -0
  238. package/dist/wallet/tx/reputation/index.d.ts +4 -0
  239. package/dist/wallet/tx/reputation/index.js +162 -0
  240. package/dist/wallet/tx/reputation/intent.d.ts +36 -0
  241. package/dist/wallet/tx/reputation/intent.js +157 -0
  242. package/dist/wallet/tx/reputation/plan.d.ts +19 -0
  243. package/dist/wallet/tx/reputation/plan.js +64 -0
  244. package/dist/wallet/tx/reputation/result.d.ts +21 -0
  245. package/dist/wallet/tx/reputation/result.js +31 -0
  246. package/dist/wallet/tx/reputation/types.d.ts +130 -0
  247. package/dist/wallet/tx/reputation/types.js +1 -0
  248. package/dist/wallet/tx/reputation.d.ts +1 -74
  249. package/dist/wallet/tx/reputation.js +1 -556
  250. package/dist/wallet/tx/signing.d.ts +18 -0
  251. package/dist/wallet/tx/signing.js +31 -0
  252. package/dist/wallet/tx/state-persist.d.ts +27 -0
  253. package/dist/wallet/tx/state-persist.js +54 -0
  254. package/dist/wallet/tx/types.d.ts +44 -0
  255. package/dist/wallet/tx/types.js +1 -0
  256. package/package.json +1 -1
  257. package/dist/cli/mining-json.d.ts +0 -20
  258. package/dist/cli/mining-json.js +0 -46
  259. package/dist/cli/mutation-json.d.ts +0 -325
  260. package/dist/cli/mutation-json.js +0 -269
  261. package/dist/cli/mutation-resolved-json.d.ts +0 -117
  262. package/dist/cli/mutation-resolved-json.js +0 -123
  263. package/dist/cli/preview-json.d.ts +0 -319
  264. package/dist/cli/preview-json.js +0 -254
  265. package/dist/cli/read-json.d.ts +0 -190
  266. package/dist/cli/read-json.js +0 -627
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # `@cogcoin/client`
2
2
 
3
- `@cogcoin/client@1.1.8` is the reference Cogcoin client package for applications that want a local wallet, durable SQLite-backed state, and a managed Bitcoin Core integration around `@cogcoin/indexer`. It publishes the reusable client APIs, the SQLite adapter, the managed `bitcoind` integration, and the first-party `cogcoin` CLI in one package.
3
+ `@cogcoin/client@1.1.9` is the reference Cogcoin client package for applications that want a local wallet, durable SQLite-backed state, and a managed Bitcoin Core integration around `@cogcoin/indexer`. It publishes the reusable client APIs, the SQLite adapter, the managed `bitcoind` integration, and the first-party `cogcoin` CLI in one package.
4
4
 
5
5
  Use Node 22 or newer.
6
6
 
@@ -2,7 +2,7 @@ import { dirname } from "node:path";
2
2
  import { stat } from "node:fs/promises";
3
3
  import { formatMineStatusReport, formatMiningEventRecord, formatMiningPromptListReport, } from "../mining-format.js";
4
4
  import { writeLine } from "../io.js";
5
- import { normalizeListPage, } from "../output.js";
5
+ import { normalizeListPage, } from "../pagination.js";
6
6
  import { formatNextStepLines } from "../workflow-hints.js";
7
7
  import { withInteractiveWalletSecretProvider } from "../../wallet/state/provider.js";
8
8
  async function readRotationIndices(paths) {
@@ -0,0 +1,2 @@
1
+ import type { WalletMutationCommandSpec } from "./types.js";
2
+ export declare const anchorMutationCommandSpec: WalletMutationCommandSpec;
@@ -0,0 +1,33 @@
1
+ import { workflowMutationNextSteps, } from "../../mutation-success.js";
2
+ import { getAnchorNextSteps } from "../../workflow-hints.js";
3
+ export const anchorMutationCommandSpec = {
4
+ id: "anchor",
5
+ async run(command) {
6
+ const result = await command.context.anchorDomain({
7
+ domainName: command.parsed.args[0],
8
+ foundingMessageText: command.parsed.anchorMessage,
9
+ promptForFoundingMessageWhenMissing: command.parsed.anchorMessage === null,
10
+ feeRateSatVb: command.parsed.satvb,
11
+ dataDir: command.dataDir,
12
+ databasePath: command.dbPath,
13
+ provider: command.provider,
14
+ prompter: command.prompter,
15
+ paths: command.runtimePaths,
16
+ });
17
+ return {
18
+ reusedExisting: result.reusedExisting,
19
+ reusedMessage: "The existing pending anchor was reconciled instead of creating a duplicate.",
20
+ fees: result.fees,
21
+ explorerTxid: result.txid,
22
+ nextSteps: workflowMutationNextSteps(getAnchorNextSteps(result.domainName)),
23
+ text: {
24
+ heading: "Anchor submitted.",
25
+ fields: [
26
+ { label: "Domain", value: result.domainName },
27
+ { label: "Status", value: result.status },
28
+ { label: "Txid", value: result.txid },
29
+ ],
30
+ },
31
+ };
32
+ },
33
+ };
@@ -0,0 +1,2 @@
1
+ import type { WalletMutationCommandSpec } from "./types.js";
2
+ export declare const bitcoinTransferCommandSpec: WalletMutationCommandSpec;
@@ -0,0 +1,32 @@
1
+ import { workflowMutationNextSteps, } from "../../mutation-success.js";
2
+ export const bitcoinTransferCommandSpec = {
3
+ id: "bitcoin-transfer",
4
+ async run(command) {
5
+ const result = await command.context.transferBitcoin({
6
+ amountSatsText: command.parsed.args[0],
7
+ target: command.parsed.transferTarget,
8
+ dataDir: command.dataDir,
9
+ databasePath: command.dbPath,
10
+ provider: command.provider,
11
+ prompter: command.prompter,
12
+ assumeYes: command.parsed.assumeYes,
13
+ paths: command.runtimePaths,
14
+ });
15
+ return {
16
+ reusedExisting: false,
17
+ reusedMessage: "",
18
+ explorerTxid: result.txid,
19
+ nextSteps: workflowMutationNextSteps([]),
20
+ text: {
21
+ heading: "Bitcoin transfer submitted.",
22
+ fields: [
23
+ { label: "Sender", value: result.senderAddress },
24
+ { label: "Recipient", value: result.recipientAddress },
25
+ { label: "Amount", value: `${result.amountSats.toString()} sats` },
26
+ { label: "Fee", value: `${result.feeSats.toString()} sats` },
27
+ { label: "Txid", value: result.txid },
28
+ ],
29
+ },
30
+ };
31
+ },
32
+ };
@@ -0,0 +1,2 @@
1
+ import type { WalletMutationCommandSpec } from "./types.js";
2
+ export declare const cogMutationCommandSpec: WalletMutationCommandSpec;
@@ -0,0 +1,131 @@
1
+ import { parseCogAmountToCogtoshi } from "../../../wallet/tx/index.js";
2
+ import { formatCogClaimPath, formatCogSenderSummary, } from "../../mutation-text-format.js";
3
+ import { commandMutationNextSteps } from "../../mutation-success.js";
4
+ export const cogMutationCommandSpec = {
5
+ id: "cog",
6
+ async run(command) {
7
+ if (command.parsed.command === "send") {
8
+ const result = await command.context.sendCog({
9
+ amountCogtoshi: parseCogAmountToCogtoshi(command.parsed.args[0]),
10
+ target: command.parsed.transferTarget,
11
+ feeRateSatVb: command.parsed.satvb,
12
+ dataDir: command.dataDir,
13
+ databasePath: command.dbPath,
14
+ provider: command.provider,
15
+ prompter: command.prompter,
16
+ assumeYes: command.parsed.assumeYes,
17
+ paths: command.runtimePaths,
18
+ });
19
+ return {
20
+ reusedExisting: result.reusedExisting,
21
+ reusedMessage: "The existing pending COG transfer was reconciled instead of creating a duplicate.",
22
+ fees: result.fees,
23
+ explorerTxid: result.txid,
24
+ nextSteps: commandMutationNextSteps("cogcoin balance"),
25
+ text: {
26
+ heading: "COG transfer submitted.",
27
+ fields: [
28
+ { label: "Sender", value: formatCogSenderSummary(result) },
29
+ { label: "Amount", value: `${result.amountCogtoshi?.toString() ?? "unknown"} cogtoshi` },
30
+ { label: "Recipient", value: result.recipientScriptPubKeyHex === null || result.recipientScriptPubKeyHex === undefined ? "unknown" : `spk:${result.recipientScriptPubKeyHex}` },
31
+ { label: "Status", value: result.status },
32
+ { label: "Txid", value: result.txid },
33
+ ],
34
+ },
35
+ };
36
+ }
37
+ if (command.parsed.command === "cog-lock") {
38
+ const result = await command.context.lockCogToDomain({
39
+ amountCogtoshi: parseCogAmountToCogtoshi(command.parsed.args[0]),
40
+ recipientDomainName: command.parsed.lockRecipientDomain,
41
+ timeoutBlocksOrDuration: command.parsed.unlockFor,
42
+ timeoutHeight: command.parsed.untilHeight === null ? null : Number.parseInt(command.parsed.untilHeight, 10),
43
+ conditionHex: command.parsed.conditionHex,
44
+ feeRateSatVb: command.parsed.satvb,
45
+ dataDir: command.dataDir,
46
+ databasePath: command.dbPath,
47
+ provider: command.provider,
48
+ prompter: command.prompter,
49
+ assumeYes: command.parsed.assumeYes,
50
+ paths: command.runtimePaths,
51
+ });
52
+ return {
53
+ reusedExisting: result.reusedExisting,
54
+ reusedMessage: "The existing pending lock was reconciled instead of creating a duplicate.",
55
+ fees: result.fees,
56
+ explorerTxid: result.txid,
57
+ nextSteps: commandMutationNextSteps("cogcoin locks"),
58
+ text: {
59
+ heading: "COG lock submitted.",
60
+ fields: [
61
+ { label: "Sender", value: formatCogSenderSummary(result) },
62
+ { label: "Amount", value: `${result.amountCogtoshi?.toString() ?? "unknown"} cogtoshi` },
63
+ { label: "Recipient domain", value: result.recipientDomainName ?? "unknown" },
64
+ { label: "Status", value: result.status },
65
+ { label: "Txid", value: result.txid },
66
+ ],
67
+ },
68
+ };
69
+ }
70
+ if (command.parsed.command === "claim") {
71
+ const result = await command.context.claimCogLock({
72
+ lockId: Number.parseInt(command.parsed.args[0], 10),
73
+ preimageHex: command.parsed.preimageHex,
74
+ feeRateSatVb: command.parsed.satvb,
75
+ dataDir: command.dataDir,
76
+ databasePath: command.dbPath,
77
+ provider: command.provider,
78
+ prompter: command.prompter,
79
+ paths: command.runtimePaths,
80
+ });
81
+ return {
82
+ reusedExisting: result.reusedExisting,
83
+ reusedMessage: "The existing pending claim was reconciled instead of creating a duplicate.",
84
+ fees: result.fees,
85
+ explorerTxid: result.txid,
86
+ nextSteps: commandMutationNextSteps("cogcoin locks --claimable"),
87
+ text: {
88
+ heading: "Lock claim submitted.",
89
+ fields: [
90
+ { label: "Lock", value: String(result.lockId ?? "unknown") },
91
+ { label: "Path", value: formatCogClaimPath(result) },
92
+ { label: "Sender", value: formatCogSenderSummary(result) },
93
+ { label: "Amount", value: `${result.amountCogtoshi?.toString() ?? "unknown"} cogtoshi` },
94
+ { label: "Status", value: result.status },
95
+ { label: "Txid", value: result.txid },
96
+ ],
97
+ },
98
+ };
99
+ }
100
+ if (command.parsed.command === "reclaim") {
101
+ const result = await command.context.reclaimCogLock({
102
+ lockId: Number.parseInt(command.parsed.args[0], 10),
103
+ feeRateSatVb: command.parsed.satvb,
104
+ dataDir: command.dataDir,
105
+ databasePath: command.dbPath,
106
+ provider: command.provider,
107
+ prompter: command.prompter,
108
+ paths: command.runtimePaths,
109
+ });
110
+ return {
111
+ reusedExisting: result.reusedExisting,
112
+ reusedMessage: "The existing pending reclaim was reconciled instead of creating a duplicate.",
113
+ fees: result.fees,
114
+ explorerTxid: result.txid,
115
+ nextSteps: commandMutationNextSteps("cogcoin locks --reclaimable"),
116
+ text: {
117
+ heading: "Lock reclaim submitted.",
118
+ fields: [
119
+ { label: "Lock", value: String(result.lockId ?? "unknown") },
120
+ { label: "Path", value: formatCogClaimPath(result) },
121
+ { label: "Sender", value: formatCogSenderSummary(result) },
122
+ { label: "Amount", value: `${result.amountCogtoshi?.toString() ?? "unknown"} cogtoshi` },
123
+ { label: "Status", value: result.status },
124
+ { label: "Txid", value: result.txid },
125
+ ],
126
+ },
127
+ };
128
+ }
129
+ throw new Error(`wallet mutation command not implemented: ${command.parsed.command}`);
130
+ },
131
+ };
@@ -0,0 +1,3 @@
1
+ import type { ParsedCliArgs, RequiredCliRunnerContext } from "../../types.js";
2
+ import type { ResolvedWalletMutationCommandContext } from "./types.js";
3
+ export declare function resolveWalletMutationCommandContext(parsed: ParsedCliArgs, context: RequiredCliRunnerContext, runtimePaths?: import("../../../wallet/runtime.js").WalletRuntimePaths): ResolvedWalletMutationCommandContext;
@@ -0,0 +1,18 @@
1
+ import { withInteractiveWalletSecretProvider } from "../../../wallet/state/provider.js";
2
+ export function resolveWalletMutationCommandContext(parsed, context, runtimePaths = context.resolveWalletRuntimePaths()) {
3
+ const dataDir = parsed.dataDir ?? context.resolveDefaultBitcoindDataDir();
4
+ const dbPath = parsed.dbPath ?? context.resolveDefaultClientDatabasePath();
5
+ const prompter = context.createPrompter();
6
+ const interactive = prompter.isInteractive;
7
+ const provider = withInteractiveWalletSecretProvider(context.walletSecretProvider, prompter);
8
+ return {
9
+ parsed,
10
+ context,
11
+ runtimePaths,
12
+ dataDir,
13
+ dbPath,
14
+ prompter,
15
+ provider,
16
+ interactive,
17
+ };
18
+ }
@@ -0,0 +1,2 @@
1
+ import type { WalletMutationCommandSpec } from "./types.js";
2
+ export declare const domainAdminMutationCommandSpec: WalletMutationCommandSpec;
@@ -0,0 +1,173 @@
1
+ import { formatDomainAdminEffect, formatDomainAdminPayloadSummary, formatDomainAdminSenderSummary, formatDomainAdminTargetSummary, } from "../../mutation-text-format.js";
2
+ import { commandMutationNextSteps } from "../../mutation-success.js";
3
+ export const domainAdminMutationCommandSpec = {
4
+ id: "domain-admin",
5
+ async run(command) {
6
+ if (command.parsed.command === "domain-endpoint-set" || command.parsed.command === "domain-endpoint-clear") {
7
+ const result = command.parsed.command === "domain-endpoint-set"
8
+ ? await command.context.setDomainEndpoint({
9
+ domainName: command.parsed.args[0],
10
+ source: command.parsed.endpointText !== null
11
+ ? { kind: "text", value: command.parsed.endpointText }
12
+ : command.parsed.endpointJson !== null
13
+ ? { kind: "json", value: command.parsed.endpointJson }
14
+ : { kind: "bytes", value: command.parsed.endpointBytes },
15
+ feeRateSatVb: command.parsed.satvb,
16
+ dataDir: command.dataDir,
17
+ databasePath: command.dbPath,
18
+ provider: command.provider,
19
+ prompter: command.prompter,
20
+ assumeYes: command.parsed.assumeYes,
21
+ paths: command.runtimePaths,
22
+ })
23
+ : await command.context.clearDomainEndpoint({
24
+ domainName: command.parsed.args[0],
25
+ feeRateSatVb: command.parsed.satvb,
26
+ dataDir: command.dataDir,
27
+ databasePath: command.dbPath,
28
+ provider: command.provider,
29
+ prompter: command.prompter,
30
+ assumeYes: command.parsed.assumeYes,
31
+ paths: command.runtimePaths,
32
+ });
33
+ return {
34
+ reusedExisting: result.reusedExisting,
35
+ reusedMessage: "The existing pending endpoint mutation was reconciled instead of creating a duplicate.",
36
+ fees: result.fees,
37
+ explorerTxid: result.txid,
38
+ nextSteps: commandMutationNextSteps(`cogcoin show ${result.domainName}`),
39
+ text: {
40
+ heading: command.parsed.command === "domain-endpoint-set"
41
+ ? "Endpoint update submitted."
42
+ : "Endpoint clear submitted.",
43
+ fields: [
44
+ { label: "Domain", value: result.domainName },
45
+ { label: "Sender", value: formatDomainAdminSenderSummary(result) },
46
+ { label: "Payload", value: formatDomainAdminPayloadSummary(result) },
47
+ { label: "Effect", value: formatDomainAdminEffect(result) },
48
+ { label: "Status", value: result.status },
49
+ { label: "Txid", value: result.txid },
50
+ ],
51
+ },
52
+ };
53
+ }
54
+ if (command.parsed.command === "domain-delegate-set" || command.parsed.command === "domain-delegate-clear") {
55
+ const result = command.parsed.command === "domain-delegate-set"
56
+ ? await command.context.setDomainDelegate({
57
+ domainName: command.parsed.args[0],
58
+ target: command.parsed.args[1],
59
+ feeRateSatVb: command.parsed.satvb,
60
+ dataDir: command.dataDir,
61
+ databasePath: command.dbPath,
62
+ provider: command.provider,
63
+ prompter: command.prompter,
64
+ assumeYes: command.parsed.assumeYes,
65
+ paths: command.runtimePaths,
66
+ })
67
+ : await command.context.clearDomainDelegate({
68
+ domainName: command.parsed.args[0],
69
+ feeRateSatVb: command.parsed.satvb,
70
+ dataDir: command.dataDir,
71
+ databasePath: command.dbPath,
72
+ provider: command.provider,
73
+ prompter: command.prompter,
74
+ assumeYes: command.parsed.assumeYes,
75
+ paths: command.runtimePaths,
76
+ });
77
+ return {
78
+ reusedExisting: result.reusedExisting,
79
+ reusedMessage: "The existing pending delegate mutation was reconciled instead of creating a duplicate.",
80
+ fees: result.fees,
81
+ explorerTxid: result.txid,
82
+ nextSteps: commandMutationNextSteps(`cogcoin show ${result.domainName}`),
83
+ text: {
84
+ heading: command.parsed.command === "domain-delegate-set"
85
+ ? "Delegate update submitted."
86
+ : "Delegate clear submitted.",
87
+ fields: [
88
+ { label: "Domain", value: result.domainName },
89
+ { label: "Sender", value: formatDomainAdminSenderSummary(result) },
90
+ { label: "Target", value: formatDomainAdminTargetSummary(result) },
91
+ { label: "Effect", value: formatDomainAdminEffect(result) },
92
+ { label: "Status", value: result.status },
93
+ { label: "Txid", value: result.txid },
94
+ ],
95
+ },
96
+ };
97
+ }
98
+ if (command.parsed.command === "domain-miner-set" || command.parsed.command === "domain-miner-clear") {
99
+ const result = command.parsed.command === "domain-miner-set"
100
+ ? await command.context.setDomainMiner({
101
+ domainName: command.parsed.args[0],
102
+ target: command.parsed.args[1],
103
+ feeRateSatVb: command.parsed.satvb,
104
+ dataDir: command.dataDir,
105
+ databasePath: command.dbPath,
106
+ provider: command.provider,
107
+ prompter: command.prompter,
108
+ assumeYes: command.parsed.assumeYes,
109
+ paths: command.runtimePaths,
110
+ })
111
+ : await command.context.clearDomainMiner({
112
+ domainName: command.parsed.args[0],
113
+ feeRateSatVb: command.parsed.satvb,
114
+ dataDir: command.dataDir,
115
+ databasePath: command.dbPath,
116
+ provider: command.provider,
117
+ prompter: command.prompter,
118
+ assumeYes: command.parsed.assumeYes,
119
+ paths: command.runtimePaths,
120
+ });
121
+ return {
122
+ reusedExisting: result.reusedExisting,
123
+ reusedMessage: "The existing pending miner mutation was reconciled instead of creating a duplicate.",
124
+ fees: result.fees,
125
+ explorerTxid: result.txid,
126
+ nextSteps: commandMutationNextSteps(`cogcoin show ${result.domainName}`),
127
+ text: {
128
+ heading: command.parsed.command === "domain-miner-set"
129
+ ? "Miner update submitted."
130
+ : "Miner clear submitted.",
131
+ fields: [
132
+ { label: "Domain", value: result.domainName },
133
+ { label: "Sender", value: formatDomainAdminSenderSummary(result) },
134
+ { label: "Target", value: formatDomainAdminTargetSummary(result) },
135
+ { label: "Effect", value: formatDomainAdminEffect(result) },
136
+ { label: "Status", value: result.status },
137
+ { label: "Txid", value: result.txid },
138
+ ],
139
+ },
140
+ };
141
+ }
142
+ if (command.parsed.command === "domain-canonical") {
143
+ const result = await command.context.setDomainCanonical({
144
+ domainName: command.parsed.args[0],
145
+ feeRateSatVb: command.parsed.satvb,
146
+ dataDir: command.dataDir,
147
+ databasePath: command.dbPath,
148
+ provider: command.provider,
149
+ prompter: command.prompter,
150
+ assumeYes: command.parsed.assumeYes,
151
+ paths: command.runtimePaths,
152
+ });
153
+ return {
154
+ reusedExisting: result.reusedExisting,
155
+ reusedMessage: "The existing pending canonical mutation was reconciled instead of creating a duplicate.",
156
+ fees: result.fees,
157
+ explorerTxid: result.txid,
158
+ nextSteps: commandMutationNextSteps(`cogcoin show ${result.domainName}`),
159
+ text: {
160
+ heading: "Canonical update submitted.",
161
+ fields: [
162
+ { label: "Domain", value: result.domainName },
163
+ { label: "Sender", value: formatDomainAdminSenderSummary(result) },
164
+ { label: "Effect", value: formatDomainAdminEffect(result) },
165
+ { label: "Status", value: result.status },
166
+ { label: "Txid", value: result.txid },
167
+ ],
168
+ },
169
+ };
170
+ }
171
+ throw new Error(`wallet mutation command not implemented: ${command.parsed.command}`);
172
+ },
173
+ };
@@ -0,0 +1,2 @@
1
+ import type { WalletMutationCommandSpec } from "./types.js";
2
+ export declare const domainMarketMutationCommandSpec: WalletMutationCommandSpec;
@@ -0,0 +1,107 @@
1
+ import { parseCogAmountToCogtoshi } from "../../../wallet/tx/index.js";
2
+ import { formatBuyBuyerSummary, formatBuySellerSummary, formatBuySettlementSummary, formatDomainMarketEconomicEffect, formatDomainMarketRecipientSummary, formatDomainMarketSenderSummary, } from "../../mutation-text-format.js";
3
+ import { commandMutationNextSteps, } from "../../mutation-success.js";
4
+ export const domainMarketMutationCommandSpec = {
5
+ id: "domain-market",
6
+ async run(command) {
7
+ if (command.parsed.command === "transfer") {
8
+ const result = await command.context.transferDomain({
9
+ domainName: command.parsed.args[0],
10
+ target: command.parsed.transferTarget,
11
+ feeRateSatVb: command.parsed.satvb,
12
+ dataDir: command.dataDir,
13
+ databasePath: command.dbPath,
14
+ provider: command.provider,
15
+ prompter: command.prompter,
16
+ assumeYes: command.parsed.assumeYes,
17
+ paths: command.runtimePaths,
18
+ });
19
+ return {
20
+ reusedExisting: result.reusedExisting,
21
+ reusedMessage: "The existing pending transfer was reconciled instead of creating a duplicate.",
22
+ fees: result.fees,
23
+ explorerTxid: result.txid,
24
+ nextSteps: commandMutationNextSteps(`cogcoin show ${result.domainName}`),
25
+ text: {
26
+ heading: "Transfer submitted.",
27
+ fields: [
28
+ { label: "Domain", value: result.domainName },
29
+ { label: "Sender", value: formatDomainMarketSenderSummary(result) },
30
+ { label: "Recipient", value: formatDomainMarketRecipientSummary(result) },
31
+ { label: "Economic effect", value: formatDomainMarketEconomicEffect(result) },
32
+ { label: "Status", value: result.status },
33
+ { label: "Txid", value: result.txid },
34
+ ],
35
+ },
36
+ };
37
+ }
38
+ if (command.parsed.command === "sell" || command.parsed.command === "unsell") {
39
+ const listedPriceCogtoshi = command.parsed.command === "unsell"
40
+ ? 0n
41
+ : parseCogAmountToCogtoshi(command.parsed.args[1]);
42
+ const result = await command.context.sellDomain({
43
+ domainName: command.parsed.args[0],
44
+ listedPriceCogtoshi,
45
+ feeRateSatVb: command.parsed.satvb,
46
+ dataDir: command.dataDir,
47
+ databasePath: command.dbPath,
48
+ provider: command.provider,
49
+ prompter: command.prompter,
50
+ assumeYes: command.parsed.assumeYes,
51
+ paths: command.runtimePaths,
52
+ });
53
+ return {
54
+ reusedExisting: result.reusedExisting,
55
+ reusedMessage: "The existing pending listing mutation was reconciled instead of creating a duplicate.",
56
+ fees: result.fees,
57
+ explorerTxid: result.txid,
58
+ nextSteps: commandMutationNextSteps(`cogcoin show ${result.domainName}`),
59
+ text: {
60
+ heading: result.listedPriceCogtoshi === 0n
61
+ ? "Listing cancellation submitted."
62
+ : "Listing submitted.",
63
+ fields: [
64
+ { label: "Domain", value: result.domainName },
65
+ { label: "Sender", value: formatDomainMarketSenderSummary(result) },
66
+ { label: "Price", value: `${result.listedPriceCogtoshi?.toString() ?? "0"} cogtoshi` },
67
+ { label: "Economic effect", value: formatDomainMarketEconomicEffect(result) },
68
+ { label: "Status", value: result.status },
69
+ { label: "Txid", value: result.txid },
70
+ ],
71
+ },
72
+ };
73
+ }
74
+ if (command.parsed.command === "buy") {
75
+ const result = await command.context.buyDomain({
76
+ domainName: command.parsed.args[0],
77
+ feeRateSatVb: command.parsed.satvb,
78
+ dataDir: command.dataDir,
79
+ databasePath: command.dbPath,
80
+ provider: command.provider,
81
+ prompter: command.prompter,
82
+ assumeYes: command.parsed.assumeYes,
83
+ paths: command.runtimePaths,
84
+ });
85
+ return {
86
+ reusedExisting: result.reusedExisting,
87
+ reusedMessage: "The existing pending purchase was reconciled instead of creating a duplicate.",
88
+ fees: result.fees,
89
+ explorerTxid: result.txid,
90
+ nextSteps: commandMutationNextSteps(`cogcoin show ${result.domainName}`),
91
+ text: {
92
+ heading: "Purchase submitted.",
93
+ fields: [
94
+ { label: "Domain", value: result.domainName },
95
+ { label: "Buyer", value: formatBuyBuyerSummary(result) },
96
+ { label: "Seller", value: formatBuySellerSummary(result) },
97
+ { label: "Price", value: `${result.listedPriceCogtoshi?.toString() ?? "unknown"} cogtoshi` },
98
+ { label: "Settlement", value: formatBuySettlementSummary() },
99
+ { label: "Status", value: result.status },
100
+ { label: "Txid", value: result.txid },
101
+ ],
102
+ },
103
+ };
104
+ }
105
+ throw new Error(`wallet mutation command not implemented: ${command.parsed.command}`);
106
+ },
107
+ };
@@ -0,0 +1,2 @@
1
+ import type { WalletMutationCommandSpec } from "./types.js";
2
+ export declare const fieldMutationCommandSpec: WalletMutationCommandSpec;