@cogcoin/client 1.1.8 → 1.1.10

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 (295) hide show
  1. package/README.md +1 -1
  2. package/dist/bitcoind/managed-bitcoind-service-config.d.ts +13 -0
  3. package/dist/bitcoind/managed-bitcoind-service-config.js +165 -0
  4. package/dist/bitcoind/managed-bitcoind-service-lifecycle.d.ts +28 -0
  5. package/dist/bitcoind/managed-bitcoind-service-lifecycle.js +290 -0
  6. package/dist/bitcoind/managed-bitcoind-service-process.d.ts +8 -0
  7. package/dist/bitcoind/managed-bitcoind-service-process.js +48 -0
  8. package/dist/bitcoind/managed-bitcoind-service-replica.d.ts +8 -0
  9. package/dist/bitcoind/managed-bitcoind-service-replica.js +142 -0
  10. package/dist/bitcoind/managed-bitcoind-service-status.d.ts +42 -0
  11. package/dist/bitcoind/managed-bitcoind-service-status.js +178 -0
  12. package/dist/bitcoind/managed-bitcoind-service-types.d.ts +36 -0
  13. package/dist/bitcoind/managed-bitcoind-service-types.js +1 -0
  14. package/dist/bitcoind/service.d.ts +7 -63
  15. package/dist/bitcoind/service.js +7 -797
  16. package/dist/cli/commands/mining-read.js +1 -1
  17. package/dist/cli/commands/wallet-mutation/anchor.d.ts +2 -0
  18. package/dist/cli/commands/wallet-mutation/anchor.js +33 -0
  19. package/dist/cli/commands/wallet-mutation/bitcoin-transfer.d.ts +2 -0
  20. package/dist/cli/commands/wallet-mutation/bitcoin-transfer.js +32 -0
  21. package/dist/cli/commands/wallet-mutation/cog.d.ts +2 -0
  22. package/dist/cli/commands/wallet-mutation/cog.js +131 -0
  23. package/dist/cli/commands/wallet-mutation/context.d.ts +3 -0
  24. package/dist/cli/commands/wallet-mutation/context.js +18 -0
  25. package/dist/cli/commands/wallet-mutation/domain-admin.d.ts +2 -0
  26. package/dist/cli/commands/wallet-mutation/domain-admin.js +173 -0
  27. package/dist/cli/commands/wallet-mutation/domain-market.d.ts +2 -0
  28. package/dist/cli/commands/wallet-mutation/domain-market.js +107 -0
  29. package/dist/cli/commands/wallet-mutation/field.d.ts +2 -0
  30. package/dist/cli/commands/wallet-mutation/field.js +125 -0
  31. package/dist/cli/commands/wallet-mutation/register.d.ts +2 -0
  32. package/dist/cli/commands/wallet-mutation/register.js +38 -0
  33. package/dist/cli/commands/wallet-mutation/registry.d.ts +3 -0
  34. package/dist/cli/commands/wallet-mutation/registry.js +39 -0
  35. package/dist/cli/commands/wallet-mutation/reputation.d.ts +2 -0
  36. package/dist/cli/commands/wallet-mutation/reputation.js +57 -0
  37. package/dist/cli/commands/wallet-mutation/types.d.ts +32 -0
  38. package/dist/cli/commands/wallet-mutation/types.js +1 -0
  39. package/dist/cli/commands/wallet-mutation.js +13 -765
  40. package/dist/cli/commands/wallet-read.js +4 -4
  41. package/dist/cli/mutation-success.d.ts +0 -2
  42. package/dist/cli/output/classify.d.ts +7 -0
  43. package/dist/cli/output/classify.js +94 -0
  44. package/dist/cli/output/render.d.ts +2 -0
  45. package/dist/cli/output/render.js +13 -0
  46. package/dist/cli/output/rules/cli-surface.d.ts +2 -0
  47. package/dist/cli/output/rules/cli-surface.js +110 -0
  48. package/dist/cli/output/rules/generic.d.ts +2 -0
  49. package/dist/cli/output/rules/generic.js +13 -0
  50. package/dist/cli/output/rules/index.d.ts +2 -0
  51. package/dist/cli/output/rules/index.js +24 -0
  52. package/dist/cli/output/rules/mining-update.d.ts +2 -0
  53. package/dist/cli/output/rules/mining-update.js +68 -0
  54. package/dist/cli/output/rules/services.d.ts +2 -0
  55. package/dist/cli/output/rules/services.js +110 -0
  56. package/dist/cli/output/rules/wallet-admin.d.ts +2 -0
  57. package/dist/cli/output/rules/wallet-admin.js +224 -0
  58. package/dist/cli/output/rules/wallet-mutations.d.ts +2 -0
  59. package/dist/cli/output/rules/wallet-mutations.js +274 -0
  60. package/dist/cli/output/types.d.ts +16 -0
  61. package/dist/cli/output/types.js +1 -0
  62. package/dist/cli/output.d.ts +2 -168
  63. package/dist/cli/output.js +6 -989
  64. package/dist/cli/pagination.d.ts +15 -0
  65. package/dist/cli/pagination.js +16 -0
  66. package/dist/cli/recommendations.d.ts +4 -0
  67. package/dist/cli/recommendations.js +108 -0
  68. package/dist/cli/wallet-format/availability.d.ts +5 -0
  69. package/dist/cli/wallet-format/availability.js +96 -0
  70. package/dist/cli/wallet-format/balance.d.ts +2 -0
  71. package/dist/cli/wallet-format/balance.js +162 -0
  72. package/dist/cli/wallet-format/domains.d.ts +8 -0
  73. package/dist/cli/wallet-format/domains.js +84 -0
  74. package/dist/cli/wallet-format/fields.d.ts +6 -0
  75. package/dist/cli/wallet-format/fields.js +61 -0
  76. package/dist/cli/wallet-format/identity.d.ts +5 -0
  77. package/dist/cli/wallet-format/identity.js +19 -0
  78. package/dist/cli/wallet-format/locks.d.ts +7 -0
  79. package/dist/cli/wallet-format/locks.js +52 -0
  80. package/dist/cli/wallet-format/overview.d.ts +2 -0
  81. package/dist/cli/wallet-format/overview.js +122 -0
  82. package/dist/cli/wallet-format/pending.d.ts +13 -0
  83. package/dist/cli/wallet-format/pending.js +101 -0
  84. package/dist/cli/wallet-format/shared.d.ts +7 -0
  85. package/dist/cli/wallet-format/shared.js +31 -0
  86. package/dist/cli/wallet-format/status.d.ts +3 -0
  87. package/dist/cli/wallet-format/status.js +27 -0
  88. package/dist/cli/wallet-format.d.ts +8 -30
  89. package/dist/cli/wallet-format.js +8 -830
  90. package/dist/cli/wallet-read-helpers.d.ts +6 -0
  91. package/dist/cli/wallet-read-helpers.js +17 -0
  92. package/dist/wallet/mining/candidate.d.ts +1 -1
  93. package/dist/wallet/mining/candidate.js +3 -3
  94. package/dist/wallet/mining/constants.d.ts +2 -2
  95. package/dist/wallet/mining/constants.js +2 -2
  96. package/dist/wallet/mining/engine-types.d.ts +1 -0
  97. package/dist/wallet/mining/engine-types.js +9 -1
  98. package/dist/wallet/mining/publish.js +3 -6
  99. package/dist/wallet/mining/runner.js +30 -18
  100. package/dist/wallet/mining/sentence-protocol.d.ts +2 -2
  101. package/dist/wallet/mining/sentences.js +8 -8
  102. package/dist/wallet/mining/visualizer.js +7 -6
  103. package/dist/wallet/read/context.d.ts +4 -10
  104. package/dist/wallet/read/context.js +4 -227
  105. package/dist/wallet/read/local-state.d.ts +28 -0
  106. package/dist/wallet/read/local-state.js +233 -0
  107. package/dist/wallet/read/managed-bitcoind.d.ts +30 -0
  108. package/dist/wallet/read/managed-bitcoind.js +138 -0
  109. package/dist/wallet/read/managed-indexer.d.ts +23 -0
  110. package/dist/wallet/read/managed-indexer.js +87 -0
  111. package/dist/wallet/read/managed-services.d.ts +6 -21
  112. package/dist/wallet/read/managed-services.js +23 -196
  113. package/dist/wallet/tx/anchor/confirm.d.ts +15 -0
  114. package/dist/wallet/tx/anchor/confirm.js +60 -0
  115. package/dist/wallet/tx/anchor/draft.d.ts +39 -0
  116. package/dist/wallet/tx/anchor/draft.js +167 -0
  117. package/dist/wallet/tx/anchor/index.d.ts +5 -0
  118. package/dist/wallet/tx/anchor/index.js +148 -0
  119. package/dist/wallet/tx/anchor/intent.d.ts +61 -0
  120. package/dist/wallet/tx/anchor/intent.js +101 -0
  121. package/dist/wallet/tx/anchor/plan.d.ts +3 -0
  122. package/dist/wallet/tx/anchor/plan.js +18 -0
  123. package/dist/wallet/tx/anchor/result.d.ts +25 -0
  124. package/dist/wallet/tx/anchor/result.js +20 -0
  125. package/dist/wallet/tx/anchor.d.ts +1 -39
  126. package/dist/wallet/tx/anchor.js +1 -494
  127. package/dist/wallet/tx/bitcoin-transfer/confirm.d.ts +7 -0
  128. package/dist/wallet/tx/bitcoin-transfer/confirm.js +11 -0
  129. package/dist/wallet/tx/bitcoin-transfer/index.d.ts +5 -0
  130. package/dist/wallet/tx/bitcoin-transfer/index.js +112 -0
  131. package/dist/wallet/tx/bitcoin-transfer/intent.d.ts +52 -0
  132. package/dist/wallet/tx/bitcoin-transfer/intent.js +74 -0
  133. package/dist/wallet/tx/bitcoin-transfer/plan.d.ts +5 -0
  134. package/dist/wallet/tx/bitcoin-transfer/plan.js +21 -0
  135. package/dist/wallet/tx/bitcoin-transfer/result.d.ts +19 -0
  136. package/dist/wallet/tx/bitcoin-transfer/result.js +16 -0
  137. package/dist/wallet/tx/bitcoin-transfer.d.ts +1 -35
  138. package/dist/wallet/tx/bitcoin-transfer.js +1 -200
  139. package/dist/wallet/tx/cog/confirm.d.ts +13 -0
  140. package/dist/wallet/tx/cog/confirm.js +59 -0
  141. package/dist/wallet/tx/cog/draft.d.ts +20 -0
  142. package/dist/wallet/tx/cog/draft.js +114 -0
  143. package/dist/wallet/tx/cog/index.d.ts +6 -0
  144. package/dist/wallet/tx/cog/index.js +117 -0
  145. package/dist/wallet/tx/cog/intent.d.ts +30 -0
  146. package/dist/wallet/tx/cog/intent.js +169 -0
  147. package/dist/wallet/tx/cog/plan.d.ts +19 -0
  148. package/dist/wallet/tx/cog/plan.js +65 -0
  149. package/dist/wallet/tx/cog/result.d.ts +27 -0
  150. package/dist/wallet/tx/cog/result.js +28 -0
  151. package/dist/wallet/tx/cog/types.d.ts +186 -0
  152. package/dist/wallet/tx/cog/types.js +2 -0
  153. package/dist/wallet/tx/cog/variants/claim.d.ts +3 -0
  154. package/dist/wallet/tx/cog/variants/claim.js +92 -0
  155. package/dist/wallet/tx/cog/variants/lock.d.ts +2 -0
  156. package/dist/wallet/tx/cog/variants/lock.js +102 -0
  157. package/dist/wallet/tx/cog/variants/send.d.ts +2 -0
  158. package/dist/wallet/tx/cog/variants/send.js +77 -0
  159. package/dist/wallet/tx/cog.d.ts +1 -96
  160. package/dist/wallet/tx/cog.js +1 -824
  161. package/dist/wallet/tx/common.d.ts +14 -199
  162. package/dist/wallet/tx/common.js +10 -493
  163. package/dist/wallet/tx/domain-admin/confirm.d.ts +17 -0
  164. package/dist/wallet/tx/domain-admin/confirm.js +58 -0
  165. package/dist/wallet/tx/domain-admin/draft.d.ts +20 -0
  166. package/dist/wallet/tx/domain-admin/draft.js +161 -0
  167. package/dist/wallet/tx/domain-admin/index.d.ts +9 -0
  168. package/dist/wallet/tx/domain-admin/index.js +150 -0
  169. package/dist/wallet/tx/domain-admin/intent.d.ts +12 -0
  170. package/dist/wallet/tx/domain-admin/intent.js +61 -0
  171. package/dist/wallet/tx/domain-admin/plan.d.ts +19 -0
  172. package/dist/wallet/tx/domain-admin/plan.js +64 -0
  173. package/dist/wallet/tx/domain-admin/result.d.ts +19 -0
  174. package/dist/wallet/tx/domain-admin/result.js +33 -0
  175. package/dist/wallet/tx/domain-admin/types.d.ts +162 -0
  176. package/dist/wallet/tx/domain-admin/types.js +1 -0
  177. package/dist/wallet/tx/domain-admin/variants/canonical.d.ts +2 -0
  178. package/dist/wallet/tx/domain-admin/variants/canonical.js +22 -0
  179. package/dist/wallet/tx/domain-admin/variants/delegate.d.ts +3 -0
  180. package/dist/wallet/tx/domain-admin/variants/delegate.js +60 -0
  181. package/dist/wallet/tx/domain-admin/variants/endpoint.d.ts +3 -0
  182. package/dist/wallet/tx/domain-admin/variants/endpoint.js +102 -0
  183. package/dist/wallet/tx/domain-admin/variants/miner.d.ts +3 -0
  184. package/dist/wallet/tx/domain-admin/variants/miner.js +59 -0
  185. package/dist/wallet/tx/domain-admin.d.ts +1 -107
  186. package/dist/wallet/tx/domain-admin.js +1 -729
  187. package/dist/wallet/tx/domain-market/confirm.d.ts +6 -0
  188. package/dist/wallet/tx/domain-market/confirm.js +52 -0
  189. package/dist/wallet/tx/domain-market/draft.d.ts +43 -0
  190. package/dist/wallet/tx/domain-market/draft.js +286 -0
  191. package/dist/wallet/tx/domain-market/index.d.ts +6 -0
  192. package/dist/wallet/tx/domain-market/index.js +145 -0
  193. package/dist/wallet/tx/domain-market/intent.d.ts +15 -0
  194. package/dist/wallet/tx/domain-market/intent.js +131 -0
  195. package/dist/wallet/tx/domain-market/plan.d.ts +31 -0
  196. package/dist/wallet/tx/domain-market/plan.js +98 -0
  197. package/dist/wallet/tx/domain-market/result.d.ts +45 -0
  198. package/dist/wallet/tx/domain-market/result.js +88 -0
  199. package/dist/wallet/tx/domain-market/types.d.ts +221 -0
  200. package/dist/wallet/tx/domain-market/types.js +1 -0
  201. package/dist/wallet/tx/domain-market/variants/buy.d.ts +2 -0
  202. package/dist/wallet/tx/domain-market/variants/buy.js +103 -0
  203. package/dist/wallet/tx/domain-market/variants/sell.d.ts +2 -0
  204. package/dist/wallet/tx/domain-market/variants/sell.js +91 -0
  205. package/dist/wallet/tx/domain-market/variants/transfer.d.ts +2 -0
  206. package/dist/wallet/tx/domain-market/variants/transfer.js +105 -0
  207. package/dist/wallet/tx/domain-market.d.ts +1 -116
  208. package/dist/wallet/tx/domain-market.js +1 -1078
  209. package/dist/wallet/tx/draft-build.d.ts +60 -0
  210. package/dist/wallet/tx/draft-build.js +127 -0
  211. package/dist/wallet/tx/executor.d.ts +6 -40
  212. package/dist/wallet/tx/executor.js +6 -100
  213. package/dist/wallet/tx/fee.d.ts +30 -0
  214. package/dist/wallet/tx/fee.js +98 -0
  215. package/dist/wallet/tx/field/confirm.d.ts +11 -0
  216. package/dist/wallet/tx/field/confirm.js +19 -0
  217. package/dist/wallet/tx/field/draft.d.ts +23 -0
  218. package/dist/wallet/tx/field/draft.js +202 -0
  219. package/dist/wallet/tx/field/index.d.ts +5 -0
  220. package/dist/wallet/tx/field/index.js +140 -0
  221. package/dist/wallet/tx/field/intent.d.ts +5 -0
  222. package/dist/wallet/tx/field/intent.js +50 -0
  223. package/dist/wallet/tx/field/plan.d.ts +20 -0
  224. package/dist/wallet/tx/field/plan.js +65 -0
  225. package/dist/wallet/tx/field/result.d.ts +29 -0
  226. package/dist/wallet/tx/field/result.js +103 -0
  227. package/dist/wallet/tx/field/types.d.ts +163 -0
  228. package/dist/wallet/tx/field/types.js +1 -0
  229. package/dist/wallet/tx/field/variants/clear.d.ts +2 -0
  230. package/dist/wallet/tx/field/variants/clear.js +60 -0
  231. package/dist/wallet/tx/field/variants/create.d.ts +2 -0
  232. package/dist/wallet/tx/field/variants/create.js +67 -0
  233. package/dist/wallet/tx/field/variants/set.d.ts +2 -0
  234. package/dist/wallet/tx/field/variants/set.js +195 -0
  235. package/dist/wallet/tx/field.d.ts +1 -95
  236. package/dist/wallet/tx/field.js +1 -920
  237. package/dist/wallet/tx/mining-preemption.d.ts +6 -0
  238. package/dist/wallet/tx/mining-preemption.js +7 -0
  239. package/dist/wallet/tx/primitives.d.ts +13 -0
  240. package/dist/wallet/tx/primitives.js +42 -0
  241. package/dist/wallet/tx/psbt-assert.d.ts +14 -0
  242. package/dist/wallet/tx/psbt-assert.js +39 -0
  243. package/dist/wallet/tx/publish.d.ts +37 -0
  244. package/dist/wallet/tx/publish.js +88 -0
  245. package/dist/wallet/tx/readiness.d.ts +7 -0
  246. package/dist/wallet/tx/readiness.js +61 -0
  247. package/dist/wallet/tx/reconcile.d.ts +24 -0
  248. package/dist/wallet/tx/reconcile.js +72 -0
  249. package/dist/wallet/tx/register/confirm.d.ts +6 -0
  250. package/dist/wallet/tx/register/confirm.js +66 -0
  251. package/dist/wallet/tx/register/draft.d.ts +42 -0
  252. package/dist/wallet/tx/register/draft.js +181 -0
  253. package/dist/wallet/tx/register/index.d.ts +6 -0
  254. package/dist/wallet/tx/register/index.js +158 -0
  255. package/dist/wallet/tx/register/intent.d.ts +74 -0
  256. package/dist/wallet/tx/register/intent.js +119 -0
  257. package/dist/wallet/tx/register/plan.d.ts +43 -0
  258. package/dist/wallet/tx/register/plan.js +168 -0
  259. package/dist/wallet/tx/register/result.d.ts +78 -0
  260. package/dist/wallet/tx/register/result.js +41 -0
  261. package/dist/wallet/tx/register.d.ts +1 -70
  262. package/dist/wallet/tx/register.js +1 -681
  263. package/dist/wallet/tx/reputation/confirm.d.ts +11 -0
  264. package/dist/wallet/tx/reputation/confirm.js +51 -0
  265. package/dist/wallet/tx/reputation/draft.d.ts +20 -0
  266. package/dist/wallet/tx/reputation/draft.js +130 -0
  267. package/dist/wallet/tx/reputation/index.d.ts +4 -0
  268. package/dist/wallet/tx/reputation/index.js +162 -0
  269. package/dist/wallet/tx/reputation/intent.d.ts +36 -0
  270. package/dist/wallet/tx/reputation/intent.js +157 -0
  271. package/dist/wallet/tx/reputation/plan.d.ts +19 -0
  272. package/dist/wallet/tx/reputation/plan.js +64 -0
  273. package/dist/wallet/tx/reputation/result.d.ts +21 -0
  274. package/dist/wallet/tx/reputation/result.js +31 -0
  275. package/dist/wallet/tx/reputation/types.d.ts +130 -0
  276. package/dist/wallet/tx/reputation/types.js +1 -0
  277. package/dist/wallet/tx/reputation.d.ts +1 -74
  278. package/dist/wallet/tx/reputation.js +1 -556
  279. package/dist/wallet/tx/signing.d.ts +18 -0
  280. package/dist/wallet/tx/signing.js +31 -0
  281. package/dist/wallet/tx/state-persist.d.ts +27 -0
  282. package/dist/wallet/tx/state-persist.js +54 -0
  283. package/dist/wallet/tx/types.d.ts +44 -0
  284. package/dist/wallet/tx/types.js +1 -0
  285. package/package.json +1 -1
  286. package/dist/cli/mining-json.d.ts +0 -20
  287. package/dist/cli/mining-json.js +0 -46
  288. package/dist/cli/mutation-json.d.ts +0 -325
  289. package/dist/cli/mutation-json.js +0 -269
  290. package/dist/cli/mutation-resolved-json.d.ts +0 -117
  291. package/dist/cli/mutation-resolved-json.js +0 -123
  292. package/dist/cli/preview-json.d.ts +0 -319
  293. package/dist/cli/preview-json.js +0 -254
  294. package/dist/cli/read-json.d.ts +0 -190
  295. package/dist/cli/read-json.js +0 -627
@@ -0,0 +1,52 @@
1
+ import { listWalletLocks } from "../../wallet/read/index.js";
2
+ import { appendWalletAvailability } from "./availability.js";
3
+ import { formatCogAmount, formatServiceHealth } from "./shared.js";
4
+ export function formatLocksReport(context, options = {}) {
5
+ const lines = ["COG Locks"];
6
+ if (context.model === null) {
7
+ appendWalletAvailability(lines, context);
8
+ return lines.join("\n");
9
+ }
10
+ const locks = listWalletLocks(context);
11
+ if (locks === null) {
12
+ lines.push(`Lock state is unavailable while the indexer is ${formatServiceHealth(context.indexer.health)}.`);
13
+ return lines.join("\n");
14
+ }
15
+ let filteredLocks = locks;
16
+ if (options.claimableOnly) {
17
+ filteredLocks = filteredLocks.filter((lock) => lock.claimableNow);
18
+ }
19
+ else if (options.reclaimableOnly) {
20
+ filteredLocks = filteredLocks.filter((lock) => lock.reclaimableNow);
21
+ }
22
+ const totalMatching = filteredLocks.length;
23
+ if (!options.all && options.limit !== null && options.limit !== undefined) {
24
+ filteredLocks = filteredLocks.slice(0, options.limit);
25
+ }
26
+ if (filteredLocks.length === 0) {
27
+ lines.push("No locally related active locks.");
28
+ return lines.join("\n");
29
+ }
30
+ for (const lock of filteredLocks) {
31
+ const role = lock.lockerLocalIndex !== null ? `locker ${lock.lockerLocalIndex}` : "recipient";
32
+ const action = lock.claimableNow
33
+ ? "claimable-now"
34
+ : lock.reclaimableNow
35
+ ? "reclaimable-now"
36
+ : "not-actionable-now";
37
+ lines.push(`lock:${lock.lockId} ${formatCogAmount(lock.amountCogtoshi)} timeout ${lock.timeoutHeight} domain ${lock.recipientDomainName ?? lock.recipientDomainId} ${role} ${action}`);
38
+ }
39
+ for (const mutation of (context.localState.state?.pendingMutations ?? [])
40
+ .filter((entry) => (entry.kind === "lock" || entry.kind === "claim")
41
+ && entry.status !== "confirmed"
42
+ && entry.status !== "canceled")) {
43
+ const label = mutation.kind === "claim" && mutation.preimageHex === "0000000000000000000000000000000000000000000000000000000000000000"
44
+ ? "reclaim"
45
+ : mutation.kind;
46
+ lines.push(`Pending: ${label} ${mutation.status}${mutation.lockId === null || mutation.lockId === undefined ? "" : ` lock:${mutation.lockId}`}${mutation.recipientDomainName === null || mutation.recipientDomainName === undefined ? "" : ` domain ${mutation.recipientDomainName}`}`);
47
+ }
48
+ if (!options.all && options.limit !== null && options.limit !== undefined && totalMatching > options.limit) {
49
+ lines.push(`Showing first ${filteredLocks.length} of ${totalMatching}. Use --limit <n> or --all for more.`);
50
+ }
51
+ return lines.join("\n");
52
+ }
@@ -0,0 +1,2 @@
1
+ import type { WalletReadContext } from "../../wallet/read/index.js";
2
+ export declare function formatWalletOverviewReport(context: WalletReadContext, version: string): string;
@@ -0,0 +1,122 @@
1
+ import { formatMiningSummaryLine } from "../mining-format.js";
2
+ import { getOverviewNextStep, resolveWalletRootLabel } from "./availability.js";
3
+ import { formatIndexerTruthSource, formatMaybe, formatServiceHealth, } from "./shared.js";
4
+ import { formatPendingMutationSummaryLabel, isReputationMutation, } from "./pending.js";
5
+ import { formatCogAmount } from "./shared.js";
6
+ import { formatFieldFormat } from "../../wallet/read/index.js";
7
+ function overviewEntry(text, ok) {
8
+ return { text, ok };
9
+ }
10
+ function formatOverviewSection(header, entries) {
11
+ return [header, ...entries.map((entry) => `${entry.ok ? "✓" : "✗"} ${entry.text}`)].join("\n");
12
+ }
13
+ function isMiningOverviewOk(mining) {
14
+ return mining.runtime.bitcoindHealth === "ready"
15
+ && mining.runtime.nodeHealth === "synced"
16
+ && mining.runtime.indexerHealth === "synced"
17
+ && mining.runtime.miningState !== "repair-required"
18
+ && mining.runtime.miningState !== "paused-stale"
19
+ && !(mining.runtime.miningState === "paused" && mining.runtime.livePublishInMempool === true);
20
+ }
21
+ function buildOverviewPathsSection(context) {
22
+ return [
23
+ overviewEntry(`DB path: ${context.databasePath}`, true),
24
+ overviewEntry(`Bitcoin datadir: ${context.dataDir}`, true),
25
+ ];
26
+ }
27
+ function buildOverviewWalletSection(context) {
28
+ const lines = [
29
+ overviewEntry(`State: ${context.localState.availability}`, context.localState.availability === "ready"),
30
+ overviewEntry(`Root: ${resolveWalletRootLabel(context)}`, resolveWalletRootLabel(context) !== "none"),
31
+ ];
32
+ if (context.localState.message !== null) {
33
+ lines.push(overviewEntry(`Note: ${context.localState.message}`, false));
34
+ }
35
+ const nodeStatus = context.nodeStatus;
36
+ const replica = nodeStatus?.walletReplica ?? null;
37
+ if (replica !== null) {
38
+ lines.push(overviewEntry(`Managed Core wallet: ${replica.proofStatus ?? "not-proven"}`, replica.proofStatus === "ready"));
39
+ }
40
+ if (nodeStatus?.walletReplicaMessage) {
41
+ lines.push(overviewEntry(`Managed Core note: ${nodeStatus.walletReplicaMessage}`, replica?.proofStatus === "ready"));
42
+ }
43
+ return lines;
44
+ }
45
+ function buildOverviewServicesSection(context) {
46
+ const bitcoindOk = context.bitcoind.health === "ready";
47
+ const nodeOk = context.nodeHealth === "synced";
48
+ const indexerOk = context.indexer.health === "synced";
49
+ const lines = [
50
+ overviewEntry(`Managed bitcoind: ${formatServiceHealth(context.bitcoind.health)}`, bitcoindOk),
51
+ ];
52
+ if (context.bitcoind.message !== null) {
53
+ lines.push(overviewEntry(`Managed bitcoind note: ${context.bitcoind.message}`, bitcoindOk));
54
+ }
55
+ lines.push(overviewEntry(`Bitcoin service: ${formatServiceHealth(context.nodeHealth)}`, nodeOk));
56
+ if (context.nodeStatus !== null) {
57
+ lines.push(overviewEntry(`Bitcoin best height: ${formatMaybe(context.nodeStatus.nodeBestHeight)}`, nodeOk));
58
+ lines.push(overviewEntry(`Bitcoin headers: ${formatMaybe(context.nodeStatus.nodeHeaderHeight)}`, nodeOk));
59
+ }
60
+ if (context.nodeMessage !== null) {
61
+ lines.push(overviewEntry(`Bitcoin note: ${context.nodeMessage}`, nodeOk));
62
+ }
63
+ lines.push(overviewEntry(`Indexer service: ${formatServiceHealth(context.indexer.health)}`, indexerOk));
64
+ lines.push(overviewEntry(`Indexer truth source: ${formatIndexerTruthSource(context.indexer.source)}`, indexerOk));
65
+ if (context.indexer.daemonInstanceId !== null && context.indexer.daemonInstanceId !== undefined) {
66
+ lines.push(overviewEntry(`Indexer daemon instance: ${context.indexer.daemonInstanceId}`, indexerOk));
67
+ }
68
+ if (context.indexer.snapshotSeq !== null && context.indexer.snapshotSeq !== undefined) {
69
+ lines.push(overviewEntry(`Indexer snapshot sequence: ${context.indexer.snapshotSeq}`, indexerOk));
70
+ }
71
+ if (context.indexer.status?.reorgDepth !== null && context.indexer.status?.reorgDepth !== undefined) {
72
+ lines.push(overviewEntry(`Indexer reorg depth: ${context.indexer.status.reorgDepth}`, indexerOk));
73
+ }
74
+ lines.push(overviewEntry(`Indexer tip height: ${context.indexer.snapshotTip === null ? "unavailable" : context.indexer.snapshotTip.height}`, indexerOk));
75
+ if (context.indexer.message !== null) {
76
+ lines.push(overviewEntry(`Indexer note: ${context.indexer.message}`, indexerOk));
77
+ }
78
+ if (context.mining !== undefined) {
79
+ const miningOk = isMiningOverviewOk(context.mining);
80
+ lines.push(overviewEntry(`Mining: ${formatMiningSummaryLine(context.mining)}`, miningOk));
81
+ if (context.mining.runtime.note !== null) {
82
+ lines.push(overviewEntry(`Mining note: ${context.mining.runtime.note}`, miningOk));
83
+ }
84
+ }
85
+ return lines;
86
+ }
87
+ function buildOverviewLocalInventorySection(context) {
88
+ if (context.model === null) {
89
+ return [overviewEntry("Status: Wallet-derived sections unavailable", false)];
90
+ }
91
+ return [
92
+ overviewEntry("Local wallet address: 1", true),
93
+ overviewEntry(`Locally related domains: ${context.model.domains.length}`, true),
94
+ ];
95
+ }
96
+ function buildOverviewPendingWorkSection(context) {
97
+ const pendingMutations = (context.localState.state?.pendingMutations ?? [])
98
+ .filter((mutation) => mutation.status !== "confirmed" && mutation.status !== "canceled");
99
+ if (pendingMutations.length === 0) {
100
+ return [overviewEntry("Status: none", true)];
101
+ }
102
+ const lines = [];
103
+ for (const mutation of pendingMutations) {
104
+ lines.push(overviewEntry(`Mutation: ${formatPendingMutationSummaryLabel(mutation)} ${mutation.status} sender spk:${mutation.senderScriptPubKeyHex}${mutation.priceCogtoshi === undefined || mutation.priceCogtoshi === null ? "" : ` price ${formatCogAmount(mutation.priceCogtoshi)}`}${mutation.amountCogtoshi === undefined || mutation.amountCogtoshi === null ? "" : ` amount ${formatCogAmount(mutation.amountCogtoshi)}`}${isReputationMutation(mutation) ? "" : mutation.recipientDomainName === undefined || mutation.recipientDomainName === null ? "" : ` domain ${mutation.recipientDomainName}`}${mutation.lockId === undefined || mutation.lockId === null ? "" : ` lock ${mutation.lockId}`}${mutation.recipientScriptPubKeyHex === undefined || mutation.recipientScriptPubKeyHex === null ? "" : ` recipient spk:${mutation.recipientScriptPubKeyHex}`}${mutation.kind === "endpoint" ? (mutation.endpointValueHex === "" ? " endpoint clear" : ` endpoint-bytes ${(mutation.endpointValueHex?.length ?? 0) / 2}`) : ""}${mutation.kind === "field-create" || mutation.kind === "field-set" ? ` format ${formatFieldFormat(mutation.fieldFormat ?? 0)}` : ""}${mutation.kind === "field-clear" ? " clear" : ""}${mutation.reviewPayloadHex === undefined || mutation.reviewPayloadHex === null ? "" : " review"}`, false));
105
+ }
106
+ return lines;
107
+ }
108
+ export function formatWalletOverviewReport(context, version) {
109
+ const parts = [
110
+ `\n⛭ Cogcoin Status v${version} ⛭`,
111
+ formatOverviewSection("Paths", buildOverviewPathsSection(context)),
112
+ formatOverviewSection("Wallet", buildOverviewWalletSection(context)),
113
+ formatOverviewSection("Services", buildOverviewServicesSection(context)),
114
+ formatOverviewSection("Local Inventory", buildOverviewLocalInventorySection(context)),
115
+ formatOverviewSection("Pending Work", buildOverviewPendingWorkSection(context)),
116
+ ];
117
+ const nextStep = getOverviewNextStep(context);
118
+ if (nextStep !== null) {
119
+ parts.push(`Next step: ${nextStep}`);
120
+ }
121
+ return parts.join("\n\n");
122
+ }
@@ -0,0 +1,13 @@
1
+ import type { WalletReadContext } from "../../wallet/read/index.js";
2
+ import type { PendingMutationRecord } from "../../wallet/types.js";
3
+ export declare function isReputationMutation(mutation: PendingMutationRecord): mutation is PendingMutationRecord & {
4
+ kind: "rep-give" | "rep-revoke";
5
+ recipientDomainName: string;
6
+ };
7
+ export declare function formatPendingMutationKind(mutation: PendingMutationRecord): string;
8
+ export declare function formatPendingMutationSummaryLabel(mutation: PendingMutationRecord): string;
9
+ export declare function formatPendingMutationDomainLabel(mutation: PendingMutationRecord): string;
10
+ export declare function appendPendingMutationSummary(lines: string[], context: WalletReadContext): void;
11
+ export declare function listPendingDomainMutations(context: WalletReadContext, domainName: string): PendingMutationRecord[];
12
+ export declare function listPendingDomainShowMutations(context: WalletReadContext, domainName: string): PendingMutationRecord[];
13
+ export declare function listPendingFieldMutations(context: WalletReadContext, domainName: string, fieldName?: string): PendingMutationRecord[];
@@ -0,0 +1,101 @@
1
+ import { formatFieldFormat } from "../../wallet/read/index.js";
2
+ import { formatCogAmount } from "./shared.js";
3
+ export function isReputationMutation(mutation) {
4
+ return (mutation.kind === "rep-give" || mutation.kind === "rep-revoke")
5
+ && mutation.recipientDomainName !== undefined
6
+ && mutation.recipientDomainName !== null;
7
+ }
8
+ export function formatPendingMutationKind(mutation) {
9
+ if (mutation.kind === "sell" && mutation.priceCogtoshi === 0n) {
10
+ return "unsell";
11
+ }
12
+ if (mutation.kind === "claim" && mutation.preimageHex === "0000000000000000000000000000000000000000000000000000000000000000") {
13
+ return "reclaim";
14
+ }
15
+ if (mutation.kind === "endpoint" && mutation.endpointValueHex === "") {
16
+ return "endpoint-clear";
17
+ }
18
+ if (mutation.kind === "delegate" && mutation.recipientScriptPubKeyHex === null) {
19
+ return "delegate-clear";
20
+ }
21
+ if (mutation.kind === "miner" && mutation.recipientScriptPubKeyHex === null) {
22
+ return "miner-clear";
23
+ }
24
+ return mutation.kind;
25
+ }
26
+ export function formatPendingMutationSummaryLabel(mutation) {
27
+ if (isReputationMutation(mutation)) {
28
+ return `${formatPendingMutationKind(mutation)} ${mutation.domainName}->${mutation.recipientDomainName}`;
29
+ }
30
+ return `${formatPendingMutationKind(mutation)}${mutation.domainName === "" ? "" : ` ${mutation.domainName}`}${mutation.fieldName == null ? "" : `.${mutation.fieldName}`}`;
31
+ }
32
+ export function formatPendingMutationDomainLabel(mutation) {
33
+ if (isReputationMutation(mutation)) {
34
+ return `${formatPendingMutationKind(mutation)} ${mutation.domainName}->${mutation.recipientDomainName}`;
35
+ }
36
+ const kind = mutation.kind === "endpoint" && mutation.endpointValueHex === ""
37
+ ? "endpoint-clear"
38
+ : mutation.kind === "delegate" && mutation.recipientScriptPubKeyHex === null
39
+ ? "delegate-clear"
40
+ : mutation.kind === "miner" && mutation.recipientScriptPubKeyHex === null
41
+ ? "miner-clear"
42
+ : formatPendingMutationKind(mutation);
43
+ return kind;
44
+ }
45
+ export function appendPendingMutationSummary(lines, context) {
46
+ const pendingMutations = (context.localState.state?.pendingMutations ?? [])
47
+ .filter((mutation) => mutation.status !== "confirmed" && mutation.status !== "canceled");
48
+ if (pendingMutations.length === 0) {
49
+ lines.push("Pending mutations: none");
50
+ return;
51
+ }
52
+ for (const mutation of pendingMutations) {
53
+ lines.push(`Pending mutation: ${formatPendingMutationSummaryLabel(mutation)} ${mutation.status} sender spk:${mutation.senderScriptPubKeyHex}${mutation.priceCogtoshi === undefined || mutation.priceCogtoshi === null ? "" : ` price ${formatCogAmount(mutation.priceCogtoshi)}`}${mutation.amountCogtoshi === undefined || mutation.amountCogtoshi === null ? "" : ` amount ${formatCogAmount(mutation.amountCogtoshi)}`}${isReputationMutation(mutation) ? "" : mutation.recipientDomainName === undefined || mutation.recipientDomainName === null ? "" : ` domain ${mutation.recipientDomainName}`}${mutation.lockId === undefined || mutation.lockId === null ? "" : ` lock ${mutation.lockId}`}${mutation.recipientScriptPubKeyHex === undefined || mutation.recipientScriptPubKeyHex === null ? "" : ` recipient spk:${mutation.recipientScriptPubKeyHex}`}${mutation.kind === "endpoint" ? (mutation.endpointValueHex === "" ? " endpoint clear" : ` endpoint-bytes ${(mutation.endpointValueHex?.length ?? 0) / 2}`) : ""}${mutation.kind === "field-create" || mutation.kind === "field-set" ? ` format ${formatFieldFormat(mutation.fieldFormat ?? 0)}` : ""}${mutation.kind === "field-clear" ? " clear" : ""}${mutation.reviewPayloadHex === undefined || mutation.reviewPayloadHex === null ? "" : " review"}`);
54
+ }
55
+ }
56
+ export function listPendingDomainMutations(context, domainName) {
57
+ return (context.localState.state?.pendingMutations ?? [])
58
+ .filter((mutation) => (mutation.kind === "register"
59
+ || mutation.kind === "transfer"
60
+ || mutation.kind === "sell"
61
+ || mutation.kind === "buy"
62
+ || mutation.kind === "anchor"
63
+ || mutation.kind === "endpoint"
64
+ || mutation.kind === "delegate"
65
+ || mutation.kind === "miner"
66
+ || mutation.kind === "canonical"
67
+ || mutation.kind === "field-create"
68
+ || mutation.kind === "field-set"
69
+ || mutation.kind === "field-clear")
70
+ && mutation.domainName === domainName
71
+ && mutation.status !== "confirmed"
72
+ && mutation.status !== "canceled");
73
+ }
74
+ export function listPendingDomainShowMutations(context, domainName) {
75
+ return (context.localState.state?.pendingMutations ?? [])
76
+ .filter((mutation) => (mutation.kind === "register"
77
+ || mutation.kind === "transfer"
78
+ || mutation.kind === "sell"
79
+ || mutation.kind === "buy"
80
+ || mutation.kind === "anchor"
81
+ || mutation.kind === "endpoint"
82
+ || mutation.kind === "delegate"
83
+ || mutation.kind === "miner"
84
+ || mutation.kind === "canonical"
85
+ || mutation.kind === "field-create"
86
+ || mutation.kind === "field-set"
87
+ || mutation.kind === "field-clear"
88
+ || mutation.kind === "rep-give"
89
+ || mutation.kind === "rep-revoke")
90
+ && (mutation.domainName === domainName || mutation.recipientDomainName === domainName)
91
+ && mutation.status !== "confirmed"
92
+ && mutation.status !== "canceled");
93
+ }
94
+ export function listPendingFieldMutations(context, domainName, fieldName) {
95
+ return (context.localState.state?.pendingMutations ?? [])
96
+ .filter((mutation) => (mutation.kind === "field-create" || mutation.kind === "field-set" || mutation.kind === "field-clear")
97
+ && mutation.domainName === domainName
98
+ && (fieldName === undefined || mutation.fieldName === fieldName)
99
+ && mutation.status !== "confirmed"
100
+ && mutation.status !== "canceled");
101
+ }
@@ -0,0 +1,7 @@
1
+ import type { WalletReadContext } from "../../wallet/read/index.js";
2
+ export declare function formatUnitAmount(value: bigint, unit: string): string;
3
+ export declare function formatCogAmount(value: bigint): string;
4
+ export declare function formatBitcoinAmount(value: bigint | null): string;
5
+ export declare function formatServiceHealth(health: string): string;
6
+ export declare function formatMaybe(value: string | number | null): string;
7
+ export declare function formatIndexerTruthSource(source: WalletReadContext["indexer"]["source"]): string;
@@ -0,0 +1,31 @@
1
+ export function formatUnitAmount(value, unit) {
2
+ const sign = value < 0n ? "-" : "";
3
+ const absolute = value < 0n ? -value : value;
4
+ const whole = absolute / 100000000n;
5
+ const fraction = absolute % 100000000n;
6
+ return `${sign}${whole.toString()}.${fraction.toString().padStart(8, "0")} ${unit}`;
7
+ }
8
+ export function formatCogAmount(value) {
9
+ return formatUnitAmount(value, "COG");
10
+ }
11
+ export function formatBitcoinAmount(value) {
12
+ return value === null ? "unavailable BTC" : formatUnitAmount(value, "BTC");
13
+ }
14
+ export function formatServiceHealth(health) {
15
+ return health.replaceAll("-", " ");
16
+ }
17
+ export function formatMaybe(value) {
18
+ return value === null ? "unavailable" : String(value);
19
+ }
20
+ export function formatIndexerTruthSource(source) {
21
+ switch (source) {
22
+ case "lease":
23
+ return "coherent snapshot lease";
24
+ case "probe":
25
+ return "live daemon probe";
26
+ case "status-file":
27
+ return "advisory status file";
28
+ default:
29
+ return "none";
30
+ }
31
+ }
@@ -0,0 +1,3 @@
1
+ import type { WalletReadContext } from "../../wallet/read/index.js";
2
+ export declare function formatDetailedWalletStatusReport(context: WalletReadContext): string;
3
+ export declare function formatFundingAddressReport(context: WalletReadContext): string;
@@ -0,0 +1,27 @@
1
+ import { appendServiceSummary, appendWalletAvailability } from "./availability.js";
2
+ import { appendPendingMutationSummary } from "./pending.js";
3
+ export function formatDetailedWalletStatusReport(context) {
4
+ const lines = ["Cogcoin Wallet Status"];
5
+ appendWalletAvailability(lines, context);
6
+ appendServiceSummary(lines, context);
7
+ if (context.model === null) {
8
+ lines.push("Wallet details are unavailable until the encrypted wallet state can be read.");
9
+ return lines.join("\n");
10
+ }
11
+ lines.push(`Wallet address: ${context.model.walletAddress ?? "unavailable"}`);
12
+ lines.push(`Wallet script: spk:${context.model.walletScriptPubKeyHex ?? "unavailable"}`);
13
+ lines.push("Local wallet addresses: 1");
14
+ lines.push(`Locally related domains: ${context.model.domains.length}`);
15
+ appendPendingMutationSummary(lines, context);
16
+ return lines.join("\n");
17
+ }
18
+ export function formatFundingAddressReport(context) {
19
+ const lines = ["BTC Wallet Address"];
20
+ if (context.model === null) {
21
+ appendWalletAvailability(lines, context);
22
+ return lines.join("\n");
23
+ }
24
+ lines.push(`Address: ${context.model.walletAddress ?? "unavailable"}`);
25
+ lines.push(`ScriptPubKey: spk:${context.model.walletScriptPubKeyHex}`);
26
+ return lines.join("\n");
27
+ }
@@ -1,30 +1,8 @@
1
- import type { WalletDomainView, WalletReadContext } from "../wallet/read/index.js";
2
- export declare function getRepairRecommendation(context: WalletReadContext): string | null;
3
- export declare function getClientUnlockRecommendation(context: WalletReadContext): string | null;
4
- export declare function getMutationRecommendation(context: WalletReadContext): string | null;
5
- export declare function formatWalletOverviewReport(context: WalletReadContext, version: string): string;
6
- export declare function formatDetailedWalletStatusReport(context: WalletReadContext): string;
7
- export declare function formatFundingAddressReport(context: WalletReadContext): string;
8
- export declare function formatIdentityListReport(context: WalletReadContext, options?: {
9
- limit?: number | null;
10
- all?: boolean;
11
- }): string;
12
- export declare function formatBalanceReport(context: WalletReadContext): string;
13
- export declare function formatLocksReport(context: WalletReadContext, options?: {
14
- claimableOnly?: boolean;
15
- reclaimableOnly?: boolean;
16
- limit?: number | null;
17
- all?: boolean;
18
- }): string;
19
- export declare function formatDomainsReport(context: WalletReadContext, options?: {
20
- limit?: number | null;
21
- all?: boolean;
22
- domains?: WalletDomainView[] | null;
23
- activeFilters?: string[];
24
- }): string;
25
- export declare function formatDomainReport(context: WalletReadContext, domainName: string): string;
26
- export declare function formatFieldsReport(context: WalletReadContext, domainName: string, options?: {
27
- limit?: number | null;
28
- all?: boolean;
29
- }): string;
30
- export declare function formatFieldReport(context: WalletReadContext, domainName: string, fieldName: string): string;
1
+ export { getClientUnlockRecommendation, getMutationRecommendation, getRepairRecommendation, } from "./recommendations.js";
2
+ export { formatWalletOverviewReport } from "./wallet-format/overview.js";
3
+ export { formatDetailedWalletStatusReport, formatFundingAddressReport, } from "./wallet-format/status.js";
4
+ export { formatBalanceReport } from "./wallet-format/balance.js";
5
+ export { formatIdentityListReport } from "./wallet-format/identity.js";
6
+ export { formatLocksReport } from "./wallet-format/locks.js";
7
+ export { formatDomainsReport, formatDomainReport, } from "./wallet-format/domains.js";
8
+ export { formatFieldsReport, formatFieldReport, } from "./wallet-format/fields.js";