@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
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # `@cogcoin/client`
2
2
 
3
- `@cogcoin/client@1.1.7` 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
 
@@ -20,7 +20,7 @@ import { DEFAULT_MANAGED_BITCOIND_FOLLOW_POLL_INTERVAL_MS, MANAGED_BITCOIND_SERV
20
20
  const execFileAsync = promisify(execFile);
21
21
  const LOCAL_HOST = "127.0.0.1";
22
22
  const SUPPORTED_BITCOIND_VERSION = "30.2.0";
23
- const DEFAULT_STARTUP_TIMEOUT_MS = 30_000;
23
+ const DEFAULT_STARTUP_TIMEOUT_MS = 60_000;
24
24
  const DEFAULT_SHUTDOWN_TIMEOUT_MS = 15_000;
25
25
  const DEFAULT_DBCACHE_MIB = 450;
26
26
  const claimedUninitializedRuntimeKeys = new Set();
@@ -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;