@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.
- package/README.md +1 -1
- package/dist/bitcoind/service.js +1 -1
- package/dist/cli/commands/mining-read.js +1 -1
- package/dist/cli/commands/wallet-mutation/anchor.d.ts +2 -0
- package/dist/cli/commands/wallet-mutation/anchor.js +33 -0
- package/dist/cli/commands/wallet-mutation/bitcoin-transfer.d.ts +2 -0
- package/dist/cli/commands/wallet-mutation/bitcoin-transfer.js +32 -0
- package/dist/cli/commands/wallet-mutation/cog.d.ts +2 -0
- package/dist/cli/commands/wallet-mutation/cog.js +131 -0
- package/dist/cli/commands/wallet-mutation/context.d.ts +3 -0
- package/dist/cli/commands/wallet-mutation/context.js +18 -0
- package/dist/cli/commands/wallet-mutation/domain-admin.d.ts +2 -0
- package/dist/cli/commands/wallet-mutation/domain-admin.js +173 -0
- package/dist/cli/commands/wallet-mutation/domain-market.d.ts +2 -0
- package/dist/cli/commands/wallet-mutation/domain-market.js +107 -0
- package/dist/cli/commands/wallet-mutation/field.d.ts +2 -0
- package/dist/cli/commands/wallet-mutation/field.js +125 -0
- package/dist/cli/commands/wallet-mutation/register.d.ts +2 -0
- package/dist/cli/commands/wallet-mutation/register.js +38 -0
- package/dist/cli/commands/wallet-mutation/registry.d.ts +3 -0
- package/dist/cli/commands/wallet-mutation/registry.js +39 -0
- package/dist/cli/commands/wallet-mutation/reputation.d.ts +2 -0
- package/dist/cli/commands/wallet-mutation/reputation.js +57 -0
- package/dist/cli/commands/wallet-mutation/types.d.ts +32 -0
- package/dist/cli/commands/wallet-mutation/types.js +1 -0
- package/dist/cli/commands/wallet-mutation.js +13 -765
- package/dist/cli/commands/wallet-read.js +4 -4
- package/dist/cli/mutation-success.d.ts +0 -2
- package/dist/cli/output/classify.d.ts +7 -0
- package/dist/cli/output/classify.js +94 -0
- package/dist/cli/output/render.d.ts +2 -0
- package/dist/cli/output/render.js +13 -0
- package/dist/cli/output/rules/cli-surface.d.ts +2 -0
- package/dist/cli/output/rules/cli-surface.js +110 -0
- package/dist/cli/output/rules/generic.d.ts +2 -0
- package/dist/cli/output/rules/generic.js +13 -0
- package/dist/cli/output/rules/index.d.ts +2 -0
- package/dist/cli/output/rules/index.js +24 -0
- package/dist/cli/output/rules/mining-update.d.ts +2 -0
- package/dist/cli/output/rules/mining-update.js +68 -0
- package/dist/cli/output/rules/services.d.ts +2 -0
- package/dist/cli/output/rules/services.js +110 -0
- package/dist/cli/output/rules/wallet-admin.d.ts +2 -0
- package/dist/cli/output/rules/wallet-admin.js +224 -0
- package/dist/cli/output/rules/wallet-mutations.d.ts +2 -0
- package/dist/cli/output/rules/wallet-mutations.js +274 -0
- package/dist/cli/output/types.d.ts +16 -0
- package/dist/cli/output/types.js +1 -0
- package/dist/cli/output.d.ts +2 -168
- package/dist/cli/output.js +6 -989
- package/dist/cli/pagination.d.ts +15 -0
- package/dist/cli/pagination.js +16 -0
- package/dist/cli/recommendations.d.ts +4 -0
- package/dist/cli/recommendations.js +108 -0
- package/dist/cli/wallet-format/availability.d.ts +5 -0
- package/dist/cli/wallet-format/availability.js +96 -0
- package/dist/cli/wallet-format/balance.d.ts +2 -0
- package/dist/cli/wallet-format/balance.js +162 -0
- package/dist/cli/wallet-format/domains.d.ts +8 -0
- package/dist/cli/wallet-format/domains.js +84 -0
- package/dist/cli/wallet-format/fields.d.ts +6 -0
- package/dist/cli/wallet-format/fields.js +61 -0
- package/dist/cli/wallet-format/identity.d.ts +5 -0
- package/dist/cli/wallet-format/identity.js +19 -0
- package/dist/cli/wallet-format/locks.d.ts +7 -0
- package/dist/cli/wallet-format/locks.js +52 -0
- package/dist/cli/wallet-format/overview.d.ts +2 -0
- package/dist/cli/wallet-format/overview.js +122 -0
- package/dist/cli/wallet-format/pending.d.ts +13 -0
- package/dist/cli/wallet-format/pending.js +101 -0
- package/dist/cli/wallet-format/shared.d.ts +7 -0
- package/dist/cli/wallet-format/shared.js +31 -0
- package/dist/cli/wallet-format/status.d.ts +3 -0
- package/dist/cli/wallet-format/status.js +27 -0
- package/dist/cli/wallet-format.d.ts +8 -30
- package/dist/cli/wallet-format.js +8 -830
- package/dist/cli/wallet-read-helpers.d.ts +6 -0
- package/dist/cli/wallet-read-helpers.js +17 -0
- package/dist/wallet/mining/candidate.d.ts +1 -1
- package/dist/wallet/mining/candidate.js +3 -3
- package/dist/wallet/mining/constants.d.ts +2 -2
- package/dist/wallet/mining/constants.js +2 -2
- package/dist/wallet/mining/engine-state.js +10 -0
- package/dist/wallet/mining/sentence-protocol.d.ts +2 -2
- package/dist/wallet/mining/sentences.js +8 -8
- package/dist/wallet/mining/visualizer-sync.js +79 -15
- package/dist/wallet/read/context.js +1 -1
- package/dist/wallet/reset/artifacts.d.ts +16 -0
- package/dist/wallet/reset/artifacts.js +141 -0
- package/dist/wallet/reset/execution.d.ts +38 -0
- package/dist/wallet/reset/execution.js +458 -0
- package/dist/wallet/reset/preflight.d.ts +7 -0
- package/dist/wallet/reset/preflight.js +116 -0
- package/dist/wallet/reset/preview.d.ts +2 -0
- package/dist/wallet/reset/preview.js +50 -0
- package/dist/wallet/reset/process-cleanup.d.ts +12 -0
- package/dist/wallet/reset/process-cleanup.js +179 -0
- package/dist/wallet/reset/types.d.ts +189 -0
- package/dist/wallet/reset/types.js +1 -0
- package/dist/wallet/reset.d.ts +4 -119
- package/dist/wallet/reset.js +4 -882
- package/dist/wallet/tx/anchor/confirm.d.ts +15 -0
- package/dist/wallet/tx/anchor/confirm.js +60 -0
- package/dist/wallet/tx/anchor/draft.d.ts +39 -0
- package/dist/wallet/tx/anchor/draft.js +167 -0
- package/dist/wallet/tx/anchor/index.d.ts +5 -0
- package/dist/wallet/tx/anchor/index.js +148 -0
- package/dist/wallet/tx/anchor/intent.d.ts +61 -0
- package/dist/wallet/tx/anchor/intent.js +101 -0
- package/dist/wallet/tx/anchor/plan.d.ts +3 -0
- package/dist/wallet/tx/anchor/plan.js +18 -0
- package/dist/wallet/tx/anchor/result.d.ts +25 -0
- package/dist/wallet/tx/anchor/result.js +20 -0
- package/dist/wallet/tx/anchor.d.ts +1 -39
- package/dist/wallet/tx/anchor.js +1 -494
- package/dist/wallet/tx/bitcoin-transfer/confirm.d.ts +7 -0
- package/dist/wallet/tx/bitcoin-transfer/confirm.js +11 -0
- package/dist/wallet/tx/bitcoin-transfer/index.d.ts +5 -0
- package/dist/wallet/tx/bitcoin-transfer/index.js +112 -0
- package/dist/wallet/tx/bitcoin-transfer/intent.d.ts +52 -0
- package/dist/wallet/tx/bitcoin-transfer/intent.js +74 -0
- package/dist/wallet/tx/bitcoin-transfer/plan.d.ts +5 -0
- package/dist/wallet/tx/bitcoin-transfer/plan.js +21 -0
- package/dist/wallet/tx/bitcoin-transfer/result.d.ts +19 -0
- package/dist/wallet/tx/bitcoin-transfer/result.js +16 -0
- package/dist/wallet/tx/bitcoin-transfer.d.ts +1 -35
- package/dist/wallet/tx/bitcoin-transfer.js +1 -200
- package/dist/wallet/tx/cog/confirm.d.ts +13 -0
- package/dist/wallet/tx/cog/confirm.js +59 -0
- package/dist/wallet/tx/cog/draft.d.ts +20 -0
- package/dist/wallet/tx/cog/draft.js +114 -0
- package/dist/wallet/tx/cog/index.d.ts +6 -0
- package/dist/wallet/tx/cog/index.js +117 -0
- package/dist/wallet/tx/cog/intent.d.ts +30 -0
- package/dist/wallet/tx/cog/intent.js +169 -0
- package/dist/wallet/tx/cog/plan.d.ts +19 -0
- package/dist/wallet/tx/cog/plan.js +65 -0
- package/dist/wallet/tx/cog/result.d.ts +27 -0
- package/dist/wallet/tx/cog/result.js +28 -0
- package/dist/wallet/tx/cog/types.d.ts +186 -0
- package/dist/wallet/tx/cog/types.js +2 -0
- package/dist/wallet/tx/cog/variants/claim.d.ts +3 -0
- package/dist/wallet/tx/cog/variants/claim.js +92 -0
- package/dist/wallet/tx/cog/variants/lock.d.ts +2 -0
- package/dist/wallet/tx/cog/variants/lock.js +102 -0
- package/dist/wallet/tx/cog/variants/send.d.ts +2 -0
- package/dist/wallet/tx/cog/variants/send.js +77 -0
- package/dist/wallet/tx/cog.d.ts +1 -96
- package/dist/wallet/tx/cog.js +1 -824
- package/dist/wallet/tx/common.d.ts +14 -199
- package/dist/wallet/tx/common.js +10 -493
- package/dist/wallet/tx/domain-admin/confirm.d.ts +17 -0
- package/dist/wallet/tx/domain-admin/confirm.js +58 -0
- package/dist/wallet/tx/domain-admin/draft.d.ts +20 -0
- package/dist/wallet/tx/domain-admin/draft.js +161 -0
- package/dist/wallet/tx/domain-admin/index.d.ts +9 -0
- package/dist/wallet/tx/domain-admin/index.js +150 -0
- package/dist/wallet/tx/domain-admin/intent.d.ts +12 -0
- package/dist/wallet/tx/domain-admin/intent.js +61 -0
- package/dist/wallet/tx/domain-admin/plan.d.ts +19 -0
- package/dist/wallet/tx/domain-admin/plan.js +64 -0
- package/dist/wallet/tx/domain-admin/result.d.ts +19 -0
- package/dist/wallet/tx/domain-admin/result.js +33 -0
- package/dist/wallet/tx/domain-admin/types.d.ts +162 -0
- package/dist/wallet/tx/domain-admin/types.js +1 -0
- package/dist/wallet/tx/domain-admin/variants/canonical.d.ts +2 -0
- package/dist/wallet/tx/domain-admin/variants/canonical.js +22 -0
- package/dist/wallet/tx/domain-admin/variants/delegate.d.ts +3 -0
- package/dist/wallet/tx/domain-admin/variants/delegate.js +60 -0
- package/dist/wallet/tx/domain-admin/variants/endpoint.d.ts +3 -0
- package/dist/wallet/tx/domain-admin/variants/endpoint.js +102 -0
- package/dist/wallet/tx/domain-admin/variants/miner.d.ts +3 -0
- package/dist/wallet/tx/domain-admin/variants/miner.js +59 -0
- package/dist/wallet/tx/domain-admin.d.ts +1 -107
- package/dist/wallet/tx/domain-admin.js +1 -729
- package/dist/wallet/tx/domain-market/confirm.d.ts +6 -0
- package/dist/wallet/tx/domain-market/confirm.js +52 -0
- package/dist/wallet/tx/domain-market/draft.d.ts +43 -0
- package/dist/wallet/tx/domain-market/draft.js +286 -0
- package/dist/wallet/tx/domain-market/index.d.ts +6 -0
- package/dist/wallet/tx/domain-market/index.js +145 -0
- package/dist/wallet/tx/domain-market/intent.d.ts +15 -0
- package/dist/wallet/tx/domain-market/intent.js +131 -0
- package/dist/wallet/tx/domain-market/plan.d.ts +31 -0
- package/dist/wallet/tx/domain-market/plan.js +98 -0
- package/dist/wallet/tx/domain-market/result.d.ts +45 -0
- package/dist/wallet/tx/domain-market/result.js +88 -0
- package/dist/wallet/tx/domain-market/types.d.ts +221 -0
- package/dist/wallet/tx/domain-market/types.js +1 -0
- package/dist/wallet/tx/domain-market/variants/buy.d.ts +2 -0
- package/dist/wallet/tx/domain-market/variants/buy.js +103 -0
- package/dist/wallet/tx/domain-market/variants/sell.d.ts +2 -0
- package/dist/wallet/tx/domain-market/variants/sell.js +91 -0
- package/dist/wallet/tx/domain-market/variants/transfer.d.ts +2 -0
- package/dist/wallet/tx/domain-market/variants/transfer.js +105 -0
- package/dist/wallet/tx/domain-market.d.ts +1 -116
- package/dist/wallet/tx/domain-market.js +1 -1078
- package/dist/wallet/tx/draft-build.d.ts +60 -0
- package/dist/wallet/tx/draft-build.js +127 -0
- package/dist/wallet/tx/executor.d.ts +6 -40
- package/dist/wallet/tx/executor.js +6 -100
- package/dist/wallet/tx/fee.d.ts +30 -0
- package/dist/wallet/tx/fee.js +98 -0
- package/dist/wallet/tx/field/confirm.d.ts +11 -0
- package/dist/wallet/tx/field/confirm.js +19 -0
- package/dist/wallet/tx/field/draft.d.ts +23 -0
- package/dist/wallet/tx/field/draft.js +202 -0
- package/dist/wallet/tx/field/index.d.ts +5 -0
- package/dist/wallet/tx/field/index.js +140 -0
- package/dist/wallet/tx/field/intent.d.ts +5 -0
- package/dist/wallet/tx/field/intent.js +50 -0
- package/dist/wallet/tx/field/plan.d.ts +20 -0
- package/dist/wallet/tx/field/plan.js +65 -0
- package/dist/wallet/tx/field/result.d.ts +29 -0
- package/dist/wallet/tx/field/result.js +103 -0
- package/dist/wallet/tx/field/types.d.ts +163 -0
- package/dist/wallet/tx/field/types.js +1 -0
- package/dist/wallet/tx/field/variants/clear.d.ts +2 -0
- package/dist/wallet/tx/field/variants/clear.js +60 -0
- package/dist/wallet/tx/field/variants/create.d.ts +2 -0
- package/dist/wallet/tx/field/variants/create.js +67 -0
- package/dist/wallet/tx/field/variants/set.d.ts +2 -0
- package/dist/wallet/tx/field/variants/set.js +195 -0
- package/dist/wallet/tx/field.d.ts +1 -95
- package/dist/wallet/tx/field.js +1 -920
- package/dist/wallet/tx/mining-preemption.d.ts +6 -0
- package/dist/wallet/tx/mining-preemption.js +7 -0
- package/dist/wallet/tx/primitives.d.ts +13 -0
- package/dist/wallet/tx/primitives.js +42 -0
- package/dist/wallet/tx/psbt-assert.d.ts +14 -0
- package/dist/wallet/tx/psbt-assert.js +39 -0
- package/dist/wallet/tx/publish.d.ts +37 -0
- package/dist/wallet/tx/publish.js +88 -0
- package/dist/wallet/tx/readiness.d.ts +7 -0
- package/dist/wallet/tx/readiness.js +61 -0
- package/dist/wallet/tx/reconcile.d.ts +24 -0
- package/dist/wallet/tx/reconcile.js +72 -0
- package/dist/wallet/tx/register/confirm.d.ts +6 -0
- package/dist/wallet/tx/register/confirm.js +66 -0
- package/dist/wallet/tx/register/draft.d.ts +42 -0
- package/dist/wallet/tx/register/draft.js +181 -0
- package/dist/wallet/tx/register/index.d.ts +6 -0
- package/dist/wallet/tx/register/index.js +158 -0
- package/dist/wallet/tx/register/intent.d.ts +74 -0
- package/dist/wallet/tx/register/intent.js +119 -0
- package/dist/wallet/tx/register/plan.d.ts +43 -0
- package/dist/wallet/tx/register/plan.js +168 -0
- package/dist/wallet/tx/register/result.d.ts +78 -0
- package/dist/wallet/tx/register/result.js +41 -0
- package/dist/wallet/tx/register.d.ts +1 -70
- package/dist/wallet/tx/register.js +1 -681
- package/dist/wallet/tx/reputation/confirm.d.ts +11 -0
- package/dist/wallet/tx/reputation/confirm.js +51 -0
- package/dist/wallet/tx/reputation/draft.d.ts +20 -0
- package/dist/wallet/tx/reputation/draft.js +130 -0
- package/dist/wallet/tx/reputation/index.d.ts +4 -0
- package/dist/wallet/tx/reputation/index.js +162 -0
- package/dist/wallet/tx/reputation/intent.d.ts +36 -0
- package/dist/wallet/tx/reputation/intent.js +157 -0
- package/dist/wallet/tx/reputation/plan.d.ts +19 -0
- package/dist/wallet/tx/reputation/plan.js +64 -0
- package/dist/wallet/tx/reputation/result.d.ts +21 -0
- package/dist/wallet/tx/reputation/result.js +31 -0
- package/dist/wallet/tx/reputation/types.d.ts +130 -0
- package/dist/wallet/tx/reputation/types.js +1 -0
- package/dist/wallet/tx/reputation.d.ts +1 -74
- package/dist/wallet/tx/reputation.js +1 -556
- package/dist/wallet/tx/signing.d.ts +18 -0
- package/dist/wallet/tx/signing.js +31 -0
- package/dist/wallet/tx/state-persist.d.ts +27 -0
- package/dist/wallet/tx/state-persist.js +54 -0
- package/dist/wallet/tx/types.d.ts +44 -0
- package/dist/wallet/tx/types.js +1 -0
- package/package.json +1 -1
- package/dist/cli/mining-json.d.ts +0 -20
- package/dist/cli/mining-json.js +0 -46
- package/dist/cli/mutation-json.d.ts +0 -325
- package/dist/cli/mutation-json.js +0 -269
- package/dist/cli/mutation-resolved-json.d.ts +0 -117
- package/dist/cli/mutation-resolved-json.js +0 -123
- package/dist/cli/preview-json.d.ts +0 -319
- package/dist/cli/preview-json.js +0 -254
- package/dist/cli/read-json.d.ts +0 -190
- 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,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,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
|
-
|
|
2
|
-
export
|
|
3
|
-
export
|
|
4
|
-
export
|
|
5
|
-
export
|
|
6
|
-
export
|
|
7
|
-
export
|
|
8
|
-
export
|
|
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";
|