@kaleidorg/wallet-engine 1.0.0-beta.4 → 1.0.0-beta.42
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/LICENSE +21 -0
- package/README.md +29 -10
- package/dist/adapters/ArkadeAdapter.d.ts +78 -14
- package/dist/adapters/ArkadeAdapter.d.ts.map +1 -1
- package/dist/adapters/ArkadeAdapter.js +653 -161
- package/dist/adapters/ArkadeAdapter.js.map +1 -1
- package/dist/adapters/IProtocolAdapter.d.ts +195 -18
- package/dist/adapters/IProtocolAdapter.d.ts.map +1 -1
- package/dist/adapters/IProtocolAdapter.js +6 -2
- package/dist/adapters/IProtocolAdapter.js.map +1 -1
- package/dist/adapters/RgbAdapter.d.ts +70 -27
- package/dist/adapters/RgbAdapter.d.ts.map +1 -1
- package/dist/adapters/RgbAdapter.js +464 -370
- package/dist/adapters/RgbAdapter.js.map +1 -1
- package/dist/adapters/SparkAdapter.d.ts +93 -15
- package/dist/adapters/SparkAdapter.d.ts.map +1 -1
- package/dist/adapters/SparkAdapter.js +833 -168
- package/dist/adapters/SparkAdapter.js.map +1 -1
- package/dist/adapters/arkade.d.ts +15 -0
- package/dist/adapters/arkade.d.ts.map +1 -0
- package/dist/adapters/arkade.js +15 -0
- package/dist/adapters/arkade.js.map +1 -0
- package/dist/adapters/flashnet.d.ts +15 -0
- package/dist/adapters/flashnet.d.ts.map +1 -0
- package/dist/adapters/flashnet.js +17 -0
- package/dist/adapters/flashnet.js.map +1 -0
- package/dist/adapters/native.d.ts +17 -0
- package/dist/adapters/native.d.ts.map +1 -0
- package/dist/adapters/native.js +17 -0
- package/dist/adapters/native.js.map +1 -0
- package/dist/adapters/rgb.d.ts +11 -0
- package/dist/adapters/rgb.d.ts.map +1 -0
- package/dist/adapters/rgb.js +11 -0
- package/dist/adapters/rgb.js.map +1 -0
- package/dist/adapters/spark.d.ts +12 -0
- package/dist/adapters/spark.d.ts.map +1 -0
- package/dist/adapters/spark.js +14 -0
- package/dist/adapters/spark.js.map +1 -0
- package/dist/adapters/wdk/ArkadeWdkAdapter.d.ts +53 -19
- package/dist/adapters/wdk/ArkadeWdkAdapter.d.ts.map +1 -1
- package/dist/adapters/wdk/ArkadeWdkAdapter.js +366 -90
- package/dist/adapters/wdk/ArkadeWdkAdapter.js.map +1 -1
- package/dist/adapters/wdk/BaseWdkAdapter.d.ts +40 -0
- package/dist/adapters/wdk/BaseWdkAdapter.d.ts.map +1 -0
- package/dist/adapters/wdk/BaseWdkAdapter.js +71 -0
- package/dist/adapters/wdk/BaseWdkAdapter.js.map +1 -0
- package/dist/adapters/wdk/LiquidWdkAdapter.d.ts +6 -13
- package/dist/adapters/wdk/LiquidWdkAdapter.d.ts.map +1 -1
- package/dist/adapters/wdk/LiquidWdkAdapter.js +14 -32
- package/dist/adapters/wdk/LiquidWdkAdapter.js.map +1 -1
- package/dist/adapters/wdk/RgbCore.d.ts +64 -0
- package/dist/adapters/wdk/RgbCore.d.ts.map +1 -0
- package/dist/adapters/wdk/RgbCore.js +111 -0
- package/dist/adapters/wdk/RgbCore.js.map +1 -0
- package/dist/adapters/wdk/RgbLibWasmAdapter.d.ts +277 -0
- package/dist/adapters/wdk/RgbLibWasmAdapter.d.ts.map +1 -0
- package/dist/adapters/wdk/RgbLibWasmAdapter.js +731 -0
- package/dist/adapters/wdk/RgbLibWasmAdapter.js.map +1 -0
- package/dist/adapters/wdk/RgbLibWdkAdapter.d.ts +104 -0
- package/dist/adapters/wdk/RgbLibWdkAdapter.d.ts.map +1 -0
- package/dist/adapters/wdk/RgbLibWdkAdapter.js +249 -0
- package/dist/adapters/wdk/RgbLibWdkAdapter.js.map +1 -0
- package/dist/adapters/wdk/RlnWdkAdapter.d.ts +27 -14
- package/dist/adapters/wdk/RlnWdkAdapter.d.ts.map +1 -1
- package/dist/adapters/wdk/RlnWdkAdapter.js +124 -89
- package/dist/adapters/wdk/RlnWdkAdapter.js.map +1 -1
- package/dist/adapters/wdk/SparkWdkAdapter.d.ts +74 -41
- package/dist/adapters/wdk/SparkWdkAdapter.d.ts.map +1 -1
- package/dist/adapters/wdk/SparkWdkAdapter.js +706 -249
- package/dist/adapters/wdk/SparkWdkAdapter.js.map +1 -1
- package/dist/adapters/wdk/index.d.ts +17 -0
- package/dist/adapters/wdk/index.d.ts.map +1 -0
- package/dist/adapters/wdk/index.js +17 -0
- package/dist/adapters/wdk/index.js.map +1 -0
- package/dist/adapters/wdk/wasm-rgb.d.ts +15 -0
- package/dist/adapters/wdk/wasm-rgb.d.ts.map +1 -0
- package/dist/adapters/wdk/wasm-rgb.js +15 -0
- package/dist/adapters/wdk/wasm-rgb.js.map +1 -0
- package/dist/capabilities/index.d.ts +1 -1
- package/dist/capabilities/index.d.ts.map +1 -1
- package/dist/capabilities/index.js +17 -2
- package/dist/capabilities/index.js.map +1 -1
- package/dist/capabilities/operations.d.ts +22 -0
- package/dist/capabilities/operations.d.ts.map +1 -0
- package/dist/capabilities/operations.js +62 -0
- package/dist/capabilities/operations.js.map +1 -0
- package/dist/constants.d.ts +8 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +8 -0
- package/dist/constants.js.map +1 -0
- package/dist/disclosure/index.d.ts +1 -1
- package/dist/disclosure/index.js +1 -1
- package/dist/disclosure/index.js.map +1 -1
- package/dist/format.d.ts +11 -0
- package/dist/format.d.ts.map +1 -0
- package/dist/format.js +10 -0
- package/dist/format.js.map +1 -0
- package/dist/index.d.ts +21 -31
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +32 -32
- package/dist/index.js.map +1 -1
- package/dist/lib/arkade-client-manager.d.ts +64 -24
- package/dist/lib/arkade-client-manager.d.ts.map +1 -1
- package/dist/lib/arkade-client-manager.js +240 -65
- package/dist/lib/arkade-client-manager.js.map +1 -1
- package/dist/lib/arkade-converters.d.ts +39 -0
- package/dist/lib/arkade-converters.d.ts.map +1 -0
- package/dist/lib/arkade-converters.js +148 -0
- package/dist/lib/arkade-converters.js.map +1 -0
- package/dist/lib/arkade-helpers.d.ts +110 -0
- package/dist/lib/arkade-helpers.d.ts.map +1 -0
- package/dist/lib/arkade-helpers.js +227 -0
- package/dist/lib/arkade-helpers.js.map +1 -0
- package/dist/lib/arkade-swaps-client-manager.d.ts +55 -0
- package/dist/lib/arkade-swaps-client-manager.d.ts.map +1 -0
- package/dist/lib/arkade-swaps-client-manager.js +127 -0
- package/dist/lib/arkade-swaps-client-manager.js.map +1 -0
- package/dist/lib/arkade-vtxo-lifecycle.d.ts +116 -0
- package/dist/lib/arkade-vtxo-lifecycle.d.ts.map +1 -0
- package/dist/lib/arkade-vtxo-lifecycle.js +184 -0
- package/dist/lib/arkade-vtxo-lifecycle.js.map +1 -0
- package/dist/lib/flashnet-client-manager.d.ts +26 -9
- package/dist/lib/flashnet-client-manager.d.ts.map +1 -1
- package/dist/lib/flashnet-client-manager.js +97 -13
- package/dist/lib/flashnet-client-manager.js.map +1 -1
- package/dist/lib/kaleido-client-manager.d.ts +38 -3
- package/dist/lib/kaleido-client-manager.d.ts.map +1 -1
- package/dist/lib/kaleido-client-manager.js +79 -10
- package/dist/lib/kaleido-client-manager.js.map +1 -1
- package/dist/lib/ln-message-sign.d.ts +20 -0
- package/dist/lib/ln-message-sign.d.ts.map +1 -0
- package/dist/lib/ln-message-sign.js +90 -0
- package/dist/lib/ln-message-sign.js.map +1 -0
- package/dist/lib/log.d.ts +15 -0
- package/dist/lib/log.d.ts.map +1 -0
- package/dist/lib/log.js +16 -0
- package/dist/lib/log.js.map +1 -0
- package/dist/lib/orchestra-client.d.ts +149 -0
- package/dist/lib/orchestra-client.d.ts.map +1 -0
- package/dist/lib/orchestra-client.js +178 -0
- package/dist/lib/orchestra-client.js.map +1 -0
- package/dist/lib/psbt-signer.d.ts +60 -0
- package/dist/lib/psbt-signer.d.ts.map +1 -0
- package/dist/lib/psbt-signer.js +161 -0
- package/dist/lib/psbt-signer.js.map +1 -0
- package/dist/lib/rgb-converters.d.ts +62 -0
- package/dist/lib/rgb-converters.d.ts.map +1 -0
- package/dist/lib/rgb-converters.js +179 -0
- package/dist/lib/rgb-converters.js.map +1 -0
- package/dist/lib/rgb-fee-policy.d.ts +41 -0
- package/dist/lib/rgb-fee-policy.d.ts.map +1 -0
- package/dist/lib/rgb-fee-policy.js +52 -0
- package/dist/lib/rgb-fee-policy.js.map +1 -0
- package/dist/lib/rgb-helpers.d.ts +54 -0
- package/dist/lib/rgb-helpers.d.ts.map +1 -0
- package/dist/lib/rgb-helpers.js +89 -0
- package/dist/lib/rgb-helpers.js.map +1 -0
- package/dist/lib/spark-activity.d.ts +5 -0
- package/dist/lib/spark-activity.d.ts.map +1 -0
- package/dist/lib/spark-activity.js +11 -0
- package/dist/lib/spark-activity.js.map +1 -0
- package/dist/lib/spark-balance-cache.d.ts +58 -0
- package/dist/lib/spark-balance-cache.d.ts.map +1 -0
- package/dist/lib/spark-balance-cache.js +86 -0
- package/dist/lib/spark-balance-cache.js.map +1 -0
- package/dist/lib/spark-client-manager.d.ts +64 -10
- package/dist/lib/spark-client-manager.d.ts.map +1 -1
- package/dist/lib/spark-client-manager.js +191 -35
- package/dist/lib/spark-client-manager.js.map +1 -1
- package/dist/lib/spark-converters.d.ts +64 -0
- package/dist/lib/spark-converters.d.ts.map +1 -0
- package/dist/lib/spark-converters.js +242 -0
- package/dist/lib/spark-converters.js.map +1 -0
- package/dist/lib/spark-helpers.d.ts +72 -0
- package/dist/lib/spark-helpers.d.ts.map +1 -0
- package/dist/lib/spark-helpers.js +151 -0
- package/dist/lib/spark-helpers.js.map +1 -0
- package/dist/lib/spark-sent-token-records.d.ts +43 -0
- package/dist/lib/spark-sent-token-records.d.ts.map +1 -0
- package/dist/lib/spark-sent-token-records.js +105 -0
- package/dist/lib/spark-sent-token-records.js.map +1 -0
- package/dist/lib/wallet-seed.d.ts +31 -0
- package/dist/lib/wallet-seed.d.ts.map +1 -0
- package/dist/lib/wallet-seed.js +58 -0
- package/dist/lib/wallet-seed.js.map +1 -0
- package/dist/lib/zbase32.d.ts +3 -0
- package/dist/lib/zbase32.d.ts.map +1 -0
- package/dist/lib/zbase32.js +64 -0
- package/dist/lib/zbase32.js.map +1 -0
- package/dist/manager/ProtocolManager.d.ts +54 -3
- package/dist/manager/ProtocolManager.d.ts.map +1 -1
- package/dist/manager/ProtocolManager.js +118 -41
- package/dist/manager/ProtocolManager.js.map +1 -1
- package/dist/ports/index.d.ts +20 -0
- package/dist/ports/index.d.ts.map +1 -1
- package/dist/ports/index.js +23 -1
- package/dist/ports/index.js.map +1 -1
- package/dist/receive/unifiedReceive.d.ts +12 -0
- package/dist/receive/unifiedReceive.d.ts.map +1 -1
- package/dist/receive/unifiedReceive.js +35 -4
- package/dist/receive/unifiedReceive.js.map +1 -1
- package/dist/registry/createWdkRegistry.d.ts +10 -2
- package/dist/registry/createWdkRegistry.d.ts.map +1 -1
- package/dist/registry/createWdkRegistry.js +14 -7
- package/dist/registry/createWdkRegistry.js.map +1 -1
- package/dist/router/destination.d.ts +2 -2
- package/dist/router/destination.d.ts.map +1 -1
- package/dist/router/destination.js +34 -11
- package/dist/router/destination.js.map +1 -1
- package/dist/router/index.d.ts +39 -3
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +113 -4
- package/dist/router/index.js.map +1 -1
- package/dist/router/preference.d.ts +53 -0
- package/dist/router/preference.d.ts.map +1 -0
- package/dist/router/preference.js +81 -0
- package/dist/router/preference.js.map +1 -0
- package/dist/swap/KaleidoswapSwap.d.ts +1 -1
- package/dist/swap/KaleidoswapSwap.d.ts.map +1 -1
- package/dist/swap/KaleidoswapSwap.js +37 -20
- package/dist/swap/KaleidoswapSwap.js.map +1 -1
- package/dist/swap/index.d.ts +8 -0
- package/dist/swap/index.d.ts.map +1 -0
- package/dist/swap/index.js +8 -0
- package/dist/swap/index.js.map +1 -0
- package/dist/types/arkade.d.ts +1 -1
- package/dist/types/base.d.ts +35 -25
- package/dist/types/base.d.ts.map +1 -1
- package/dist/types/base.js +28 -2
- package/dist/types/base.js.map +1 -1
- package/dist/types/cross-l2.d.ts +1 -1
- package/dist/types/flashnet.d.ts +20 -0
- package/dist/types/flashnet.d.ts.map +1 -1
- package/dist/types/flashnet.js +34 -6
- package/dist/types/flashnet.js.map +1 -1
- package/dist/types/rgb.d.ts +18 -4
- package/dist/types/rgb.d.ts.map +1 -1
- package/dist/types/spark.d.ts +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.js +2 -2
- package/dist/utils.js.map +1 -1
- package/package.json +68 -14
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK ↔ unified-shape converter for the Arkade adapter.
|
|
3
|
+
*
|
|
4
|
+
* The single converter here covers Arkade transaction history:
|
|
5
|
+
* - `convertArkTxToUnifiedAll` — expand one ArkTransaction into one
|
|
6
|
+
* UnifiedTransaction per asset moved (or a single BTC entry for
|
|
7
|
+
* pure-BTC transfers).
|
|
8
|
+
*
|
|
9
|
+
* `getAssetDetails` is injected as a callback so this module stays pure —
|
|
10
|
+
* the adapter wraps its `getCachedAssetDetails(wallet, …)` to pre-bind the
|
|
11
|
+
* wallet + cache. That keeps the unit tests free of the @arkade-os/sdk
|
|
12
|
+
* Wallet shape.
|
|
13
|
+
*/
|
|
14
|
+
import { formatSats, formatUnits, getAssetMetadata, getAssetName, getAssetPrecision, getAssetTicker, toNumber, toStringValue, } from "./arkade-helpers.js";
|
|
15
|
+
/**
|
|
16
|
+
* Expand an ArkTransaction into one UnifiedTransaction per asset moved.
|
|
17
|
+
* Asset-bearing transfers carry only dust BTC for the carrier output, so we
|
|
18
|
+
* emit one entry per `tx.assets[]` entry; pure-BTC transfers emit a single
|
|
19
|
+
* BTC entry. `type` is the SDK's TxType enum: "SENT" or "RECEIVED".
|
|
20
|
+
*
|
|
21
|
+
* SDK semantics (transactionHistory.js): asset amounts on RECEIVED txs come
|
|
22
|
+
* from `collectAssets` (positive sums). Asset amounts on SENT txs come from
|
|
23
|
+
* `subtractAssets(spent, change)` — i.e. `change - spent`, which is negative.
|
|
24
|
+
* We surface absolute amounts and rely on `direction` for the sign.
|
|
25
|
+
*
|
|
26
|
+
* On any error the converter swallows and returns `[]` — `listTransactions`
|
|
27
|
+
* uses Promise.all over a flat-map, so a single malformed history entry
|
|
28
|
+
* must not poison the whole batch.
|
|
29
|
+
*/
|
|
30
|
+
export async function convertArkTxToUnifiedAll(tx, resolveDetails) {
|
|
31
|
+
try {
|
|
32
|
+
const isSend = tx.type === "SENT";
|
|
33
|
+
const amountSats = tx.amount ?? 0;
|
|
34
|
+
const timestamp = tx.createdAt || Date.now();
|
|
35
|
+
const baseTxId = tx.key?.arkTxid || tx.key?.commitmentTxid || tx.key?.boardingTxid || `ark-${timestamp}`;
|
|
36
|
+
// Arkade's reference wallet treats all SENT history rows as settled while
|
|
37
|
+
// preserving unsettled RECEIVED rows as preconfirmed/pending.
|
|
38
|
+
const status = isSend || tx.settled ? "confirmed" : "pending";
|
|
39
|
+
const direction = isSend ? "send" : "receive";
|
|
40
|
+
const assetEntries = Array.isArray(tx.assets)
|
|
41
|
+
? tx.assets
|
|
42
|
+
.map((a) => ({
|
|
43
|
+
assetId: toStringValue(a?.assetId),
|
|
44
|
+
amount: Math.abs(toNumber(a?.amount)),
|
|
45
|
+
}))
|
|
46
|
+
.filter((a) => a.assetId && a.amount > 0)
|
|
47
|
+
: [];
|
|
48
|
+
if (assetEntries.length > 0) {
|
|
49
|
+
// AssetId format: hex(txid_bytes, 32) + hex(uint16LE(groupIndex), 2)
|
|
50
|
+
// For group 0 the last 4 chars are "0000", so an issuance has assetId === arkTxid + "0000".
|
|
51
|
+
const arkTxid = toStringValue(tx.key?.arkTxid ?? "").toLowerCase();
|
|
52
|
+
return await Promise.all(assetEntries.map(async ({ assetId, amount }) => {
|
|
53
|
+
const details = await resolveDetails(assetId);
|
|
54
|
+
const metadata = getAssetMetadata(details);
|
|
55
|
+
const precision = getAssetPrecision(metadata);
|
|
56
|
+
const ticker = getAssetTicker(assetId, metadata);
|
|
57
|
+
const name = getAssetName(assetId, ticker, metadata);
|
|
58
|
+
const icon = typeof metadata?.icon === "string" ? metadata.icon : undefined;
|
|
59
|
+
const isIssuance = isSend && arkTxid.length === 64 && assetId.toLowerCase() === arkTxid + "0000";
|
|
60
|
+
const asset = {
|
|
61
|
+
id: assetId,
|
|
62
|
+
name,
|
|
63
|
+
ticker,
|
|
64
|
+
precision,
|
|
65
|
+
protocol: "ARKADE",
|
|
66
|
+
layer: "ARKADE_ARKADE",
|
|
67
|
+
balance: {
|
|
68
|
+
total: amount,
|
|
69
|
+
available: amount,
|
|
70
|
+
pending: 0,
|
|
71
|
+
totalDisplay: formatUnits(amount, precision),
|
|
72
|
+
availableDisplay: formatUnits(amount, precision),
|
|
73
|
+
},
|
|
74
|
+
icon,
|
|
75
|
+
capabilities: {
|
|
76
|
+
canSend: true,
|
|
77
|
+
canReceive: true,
|
|
78
|
+
canSwap: false,
|
|
79
|
+
supportsLightning: false,
|
|
80
|
+
supportsOnchain: false,
|
|
81
|
+
},
|
|
82
|
+
};
|
|
83
|
+
return {
|
|
84
|
+
id: `${baseTxId}-${assetId}`,
|
|
85
|
+
type: direction,
|
|
86
|
+
status,
|
|
87
|
+
timestamp,
|
|
88
|
+
amount,
|
|
89
|
+
amountDisplay: formatUnits(amount, precision),
|
|
90
|
+
fee: 0,
|
|
91
|
+
feeDisplay: "0.00000000",
|
|
92
|
+
asset,
|
|
93
|
+
protocolData: {
|
|
94
|
+
type: tx.type,
|
|
95
|
+
settled: tx.settled,
|
|
96
|
+
key: tx.key,
|
|
97
|
+
btcAmountSats: amountSats,
|
|
98
|
+
isIssuance,
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
}));
|
|
102
|
+
}
|
|
103
|
+
const btcAsset = {
|
|
104
|
+
id: "BTC",
|
|
105
|
+
name: "Bitcoin (Ark)",
|
|
106
|
+
ticker: "BTC",
|
|
107
|
+
precision: 8,
|
|
108
|
+
protocol: "ARKADE",
|
|
109
|
+
layer: "ARKADE_ARKADE",
|
|
110
|
+
balance: {
|
|
111
|
+
total: amountSats,
|
|
112
|
+
available: amountSats,
|
|
113
|
+
pending: 0,
|
|
114
|
+
totalDisplay: formatSats(amountSats),
|
|
115
|
+
availableDisplay: formatSats(amountSats),
|
|
116
|
+
},
|
|
117
|
+
capabilities: {
|
|
118
|
+
canSend: true,
|
|
119
|
+
canReceive: true,
|
|
120
|
+
canSwap: false,
|
|
121
|
+
supportsLightning: false,
|
|
122
|
+
supportsOnchain: true,
|
|
123
|
+
},
|
|
124
|
+
};
|
|
125
|
+
return [
|
|
126
|
+
{
|
|
127
|
+
id: baseTxId,
|
|
128
|
+
type: direction,
|
|
129
|
+
status,
|
|
130
|
+
timestamp,
|
|
131
|
+
amount: amountSats,
|
|
132
|
+
amountDisplay: formatSats(amountSats),
|
|
133
|
+
fee: 0,
|
|
134
|
+
feeDisplay: "0.00000000",
|
|
135
|
+
asset: btcAsset,
|
|
136
|
+
protocolData: {
|
|
137
|
+
type: tx.type,
|
|
138
|
+
settled: tx.settled,
|
|
139
|
+
key: tx.key,
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
];
|
|
143
|
+
}
|
|
144
|
+
catch {
|
|
145
|
+
return [];
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=arkade-converters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arkade-converters.js","sourceRoot":"","sources":["../../src/lib/arkade-converters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure helpers for the Arkade adapter.
|
|
3
|
+
*
|
|
4
|
+
* Every function here is side-effect free, has no `this` dependencies, and is
|
|
5
|
+
* covered by test/arkade-helpers.test.ts. Keep helpers pure (no class state,
|
|
6
|
+
* no SDK calls). Anything that needs the @arkade-os/sdk client or the adapter's
|
|
7
|
+
* config belongs in ArkadeAdapter.ts.
|
|
8
|
+
*/
|
|
9
|
+
/** Coerce a value to a finite number. Returns 0 for anything unparseable. */
|
|
10
|
+
export declare function toNumber(value: unknown): number;
|
|
11
|
+
/**
|
|
12
|
+
* Coerce a value to a strictly-positive bigint. Returns 0n for
|
|
13
|
+
* non-positive / unparseable input. Used where the SDK demands a
|
|
14
|
+
* bigint quantity (e.g. asset send amounts) and we don't want to
|
|
15
|
+
* silently send zero on a malformed numeric input.
|
|
16
|
+
*/
|
|
17
|
+
export declare function toPositiveIntegerBigInt(value: unknown): bigint;
|
|
18
|
+
/** Coerce to a string, or empty string for any non-string. */
|
|
19
|
+
export declare function toStringValue(value: unknown): string;
|
|
20
|
+
/** Pull the metadata sub-object out of an asset-details response. */
|
|
21
|
+
export declare function getAssetMetadata(details: Record<string, unknown> | null): Record<string, unknown> | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* Asset display precision (number of decimal places). Reads `metadata.decimals`,
|
|
24
|
+
* accepting both numeric and stringy values. Falls back to 0 (integer asset)
|
|
25
|
+
* when absent / negative / non-finite — Arkade assets without an explicit
|
|
26
|
+
* decimals field are integer-quantity tokens by convention.
|
|
27
|
+
*/
|
|
28
|
+
export declare function getAssetPrecision(metadata: Record<string, unknown> | undefined): number;
|
|
29
|
+
/**
|
|
30
|
+
* Asset ticker for display. Uses `metadata.ticker` when present (uppercased,
|
|
31
|
+
* trimmed); falls back to the first 6 chars of the asset id, uppercased —
|
|
32
|
+
* this is the "best effort label" path for newly-issued or partially-
|
|
33
|
+
* documented assets.
|
|
34
|
+
*/
|
|
35
|
+
export declare function getAssetTicker(assetId: string, metadata: Record<string, unknown> | undefined): string;
|
|
36
|
+
/**
|
|
37
|
+
* Asset display name. Uses `metadata.name` when present, otherwise builds a
|
|
38
|
+
* synthetic `"Arkade Asset <TICKER>"` label so the UI never has to render
|
|
39
|
+
* an empty string.
|
|
40
|
+
*/
|
|
41
|
+
export declare function getAssetName(assetId: string, ticker: string, metadata: Record<string, unknown> | undefined): string;
|
|
42
|
+
/**
|
|
43
|
+
* Render a satoshi integer as BTC with exactly 8 decimals. Used for the
|
|
44
|
+
* Arkade BTC display strings (asset balances + tx amounts). Always emits
|
|
45
|
+
* 8 decimal digits — callers that want a tighter rendering must post-process.
|
|
46
|
+
*/
|
|
47
|
+
export declare function formatSats(sats: number): string;
|
|
48
|
+
/**
|
|
49
|
+
* Render a raw integer amount in the asset's display precision. Mirrors
|
|
50
|
+
* `formatSats` semantics for arbitrary precision; integer-precision assets
|
|
51
|
+
* (precision <= 0) render without a decimal point.
|
|
52
|
+
*/
|
|
53
|
+
export declare function formatUnits(amount: number, precision: number): string;
|
|
54
|
+
/**
|
|
55
|
+
* Sort VTXOs by batchExpiry ascending (expiry-first coin selection).
|
|
56
|
+
* VTXOs expiring soonest are consumed first, maximizing the lifetime
|
|
57
|
+
* of remaining VTXOs and reducing the need for auto-renewal rounds.
|
|
58
|
+
*
|
|
59
|
+
* Stable secondary sort on `value` (descending) so when two VTXOs share
|
|
60
|
+
* the same batch expiry we prefer the larger one — fewer inputs in the
|
|
61
|
+
* resulting transaction means a smaller fee.
|
|
62
|
+
*/
|
|
63
|
+
export declare function sortVtxosByExpiry<T extends {
|
|
64
|
+
virtualStatus?: {
|
|
65
|
+
batchExpiry?: number;
|
|
66
|
+
};
|
|
67
|
+
value?: number | bigint;
|
|
68
|
+
}>(vtxos: T[]): T[];
|
|
69
|
+
/**
|
|
70
|
+
* Pure expiry-first selector. Picks the minimum set of VTXOs (sorted by
|
|
71
|
+
* expiry, value-desc tiebreaker) whose summed value covers `targetSats`.
|
|
72
|
+
* Returns `null` when the available VTXOs can't cover the target — the
|
|
73
|
+
* caller should let the SDK error so the user gets a real "insufficient
|
|
74
|
+
* funds" message rather than a half-formed selection.
|
|
75
|
+
*/
|
|
76
|
+
export declare function selectVtxosByExpiry<T extends {
|
|
77
|
+
virtualStatus?: {
|
|
78
|
+
batchExpiry?: number;
|
|
79
|
+
};
|
|
80
|
+
value?: number | bigint;
|
|
81
|
+
}>(vtxos: T[], targetSats: number): T[] | null;
|
|
82
|
+
export interface NormalizedVtxo {
|
|
83
|
+
txid: string;
|
|
84
|
+
vout: number;
|
|
85
|
+
value: number;
|
|
86
|
+
state: string;
|
|
87
|
+
batchTxid?: string;
|
|
88
|
+
batchExpiry?: number;
|
|
89
|
+
createdAt?: number;
|
|
90
|
+
assets?: Array<{
|
|
91
|
+
assetId: string;
|
|
92
|
+
amount: number;
|
|
93
|
+
}>;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Coerce the SDK's loose `getVtxos()` response shape into the strict
|
|
97
|
+
* `NormalizedVtxo[]` the adapter consumes elsewhere.
|
|
98
|
+
*
|
|
99
|
+
* - Accepts both a bare array and `{ vtxos: [...] }` wrapper (the SDK
|
|
100
|
+
* has shipped both shapes across versions).
|
|
101
|
+
* - Pulls fields from the outer entry and, when missing, falls back to
|
|
102
|
+
* `entry.outpoint.{txid,vout}` — older shapes nested those.
|
|
103
|
+
* - Resolves `state` from `virtualStatus.state`, then `isSwept` /
|
|
104
|
+
* `isPreconfirmed` / `isSpent` flags, defaulting to "settled".
|
|
105
|
+
* - Drops zero-value entries, spent entries, and entries with no txid —
|
|
106
|
+
* callers can rely on the returned array containing only spendable-
|
|
107
|
+
* looking VTXOs.
|
|
108
|
+
*/
|
|
109
|
+
export declare function normalizeVtxos(raw: unknown): NormalizedVtxo[];
|
|
110
|
+
//# sourceMappingURL=arkade-helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arkade-helpers.d.ts","sourceRoot":"","sources":["../../src/lib/arkade-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH,6EAA6E;AAC7E,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAQ/C;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAY9D;AAED,8DAA8D;AAC9D,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEpD;AAOD,qEAAqE;AACrE,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GACtC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAKrC;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAAG,MAAM,CAYvF;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC5C,MAAM,CAMR;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GAC5C,MAAM,CAMR;AAID;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAGrE;AAID;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,CAAC,SAAS;IAAE,aAAa,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,EAC/E,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CASjB;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,CAAC,SAAS;IAAE,aAAa,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,EAC/E,KAAK,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,CAAC,EAAE,GAAG,IAAI,CAW5C;AAID,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,cAAc,EAAE,CAmD7D"}
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure helpers for the Arkade adapter.
|
|
3
|
+
*
|
|
4
|
+
* Every function here is side-effect free, has no `this` dependencies, and is
|
|
5
|
+
* covered by test/arkade-helpers.test.ts. Keep helpers pure (no class state,
|
|
6
|
+
* no SDK calls). Anything that needs the @arkade-os/sdk client or the adapter's
|
|
7
|
+
* config belongs in ArkadeAdapter.ts.
|
|
8
|
+
*/
|
|
9
|
+
// ── Type coercion ──────────────────────────────────────────────────────────
|
|
10
|
+
// The Arkade SDK is loose about numeric types in some response shapes
|
|
11
|
+
// (bigint, number, numeric string). These helpers normalize without
|
|
12
|
+
// throwing — the alternative is sprinkling defensive `if (typeof …)` checks
|
|
13
|
+
// across the adapter.
|
|
14
|
+
/** Coerce a value to a finite number. Returns 0 for anything unparseable. */
|
|
15
|
+
export function toNumber(value) {
|
|
16
|
+
if (typeof value === "number" && Number.isFinite(value))
|
|
17
|
+
return value;
|
|
18
|
+
if (typeof value === "bigint")
|
|
19
|
+
return Number(value);
|
|
20
|
+
if (typeof value === "string" && value.trim() !== "") {
|
|
21
|
+
const parsed = Number(value);
|
|
22
|
+
return Number.isFinite(parsed) ? parsed : 0;
|
|
23
|
+
}
|
|
24
|
+
return 0;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Coerce a value to a strictly-positive bigint. Returns 0n for
|
|
28
|
+
* non-positive / unparseable input. Used where the SDK demands a
|
|
29
|
+
* bigint quantity (e.g. asset send amounts) and we don't want to
|
|
30
|
+
* silently send zero on a malformed numeric input.
|
|
31
|
+
*/
|
|
32
|
+
export function toPositiveIntegerBigInt(value) {
|
|
33
|
+
if (typeof value === "bigint")
|
|
34
|
+
return value > 0n ? value : 0n;
|
|
35
|
+
if (typeof value === "number") {
|
|
36
|
+
if (!Number.isSafeInteger(value) || value <= 0)
|
|
37
|
+
return 0n;
|
|
38
|
+
return BigInt(value);
|
|
39
|
+
}
|
|
40
|
+
if (typeof value === "string") {
|
|
41
|
+
const trimmed = value.trim();
|
|
42
|
+
if (!/^[1-9]\d*$/.test(trimmed))
|
|
43
|
+
return 0n;
|
|
44
|
+
return BigInt(trimmed);
|
|
45
|
+
}
|
|
46
|
+
return 0n;
|
|
47
|
+
}
|
|
48
|
+
/** Coerce to a string, or empty string for any non-string. */
|
|
49
|
+
export function toStringValue(value) {
|
|
50
|
+
return typeof value === "string" ? value : "";
|
|
51
|
+
}
|
|
52
|
+
// ── Arkade asset metadata accessors ───────────────────────────────────────
|
|
53
|
+
// `details` shape comes from `wallet.assetManager.getAssetDetails(assetId)`.
|
|
54
|
+
// We defensively unwrap so the adapter doesn't have to spread type checks
|
|
55
|
+
// across every consumer.
|
|
56
|
+
/** Pull the metadata sub-object out of an asset-details response. */
|
|
57
|
+
export function getAssetMetadata(details) {
|
|
58
|
+
const metadata = details?.metadata;
|
|
59
|
+
return metadata && typeof metadata === "object"
|
|
60
|
+
? metadata
|
|
61
|
+
: undefined;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Asset display precision (number of decimal places). Reads `metadata.decimals`,
|
|
65
|
+
* accepting both numeric and stringy values. Falls back to 0 (integer asset)
|
|
66
|
+
* when absent / negative / non-finite — Arkade assets without an explicit
|
|
67
|
+
* decimals field are integer-quantity tokens by convention.
|
|
68
|
+
*/
|
|
69
|
+
export function getAssetPrecision(metadata) {
|
|
70
|
+
const decimals = metadata?.decimals;
|
|
71
|
+
if (typeof decimals === "number" && Number.isFinite(decimals) && decimals >= 0) {
|
|
72
|
+
return decimals;
|
|
73
|
+
}
|
|
74
|
+
if (typeof decimals === "string" && decimals.trim() !== "") {
|
|
75
|
+
const parsed = Number(decimals);
|
|
76
|
+
if (Number.isFinite(parsed) && parsed >= 0) {
|
|
77
|
+
return parsed;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return 0;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Asset ticker for display. Uses `metadata.ticker` when present (uppercased,
|
|
84
|
+
* trimmed); falls back to the first 6 chars of the asset id, uppercased —
|
|
85
|
+
* this is the "best effort label" path for newly-issued or partially-
|
|
86
|
+
* documented assets.
|
|
87
|
+
*/
|
|
88
|
+
export function getAssetTicker(assetId, metadata) {
|
|
89
|
+
const ticker = metadata?.ticker;
|
|
90
|
+
if (typeof ticker === "string" && ticker.trim() !== "") {
|
|
91
|
+
return ticker.trim().toUpperCase();
|
|
92
|
+
}
|
|
93
|
+
return assetId.slice(0, 6).toUpperCase();
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Asset display name. Uses `metadata.name` when present, otherwise builds a
|
|
97
|
+
* synthetic `"Arkade Asset <TICKER>"` label so the UI never has to render
|
|
98
|
+
* an empty string.
|
|
99
|
+
*/
|
|
100
|
+
export function getAssetName(assetId, ticker, metadata) {
|
|
101
|
+
const name = metadata?.name;
|
|
102
|
+
if (typeof name === "string" && name.trim() !== "") {
|
|
103
|
+
return name.trim();
|
|
104
|
+
}
|
|
105
|
+
return `Arkade Asset ${ticker || assetId.slice(0, 6)}`;
|
|
106
|
+
}
|
|
107
|
+
// ── Display formatting ────────────────────────────────────────────────────
|
|
108
|
+
/**
|
|
109
|
+
* Render a satoshi integer as BTC with exactly 8 decimals. Used for the
|
|
110
|
+
* Arkade BTC display strings (asset balances + tx amounts). Always emits
|
|
111
|
+
* 8 decimal digits — callers that want a tighter rendering must post-process.
|
|
112
|
+
*/
|
|
113
|
+
export function formatSats(sats) {
|
|
114
|
+
return (sats / 1e8).toFixed(8);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Render a raw integer amount in the asset's display precision. Mirrors
|
|
118
|
+
* `formatSats` semantics for arbitrary precision; integer-precision assets
|
|
119
|
+
* (precision <= 0) render without a decimal point.
|
|
120
|
+
*/
|
|
121
|
+
export function formatUnits(amount, precision) {
|
|
122
|
+
if (precision <= 0)
|
|
123
|
+
return String(amount);
|
|
124
|
+
return (amount / Math.pow(10, precision)).toFixed(precision);
|
|
125
|
+
}
|
|
126
|
+
// ── VTXO selection (expiry-first) ──────────────────────────────────────────
|
|
127
|
+
/**
|
|
128
|
+
* Sort VTXOs by batchExpiry ascending (expiry-first coin selection).
|
|
129
|
+
* VTXOs expiring soonest are consumed first, maximizing the lifetime
|
|
130
|
+
* of remaining VTXOs and reducing the need for auto-renewal rounds.
|
|
131
|
+
*
|
|
132
|
+
* Stable secondary sort on `value` (descending) so when two VTXOs share
|
|
133
|
+
* the same batch expiry we prefer the larger one — fewer inputs in the
|
|
134
|
+
* resulting transaction means a smaller fee.
|
|
135
|
+
*/
|
|
136
|
+
export function sortVtxosByExpiry(vtxos) {
|
|
137
|
+
return [...vtxos].sort((a, b) => {
|
|
138
|
+
const expiryA = a.virtualStatus?.batchExpiry ?? Infinity;
|
|
139
|
+
const expiryB = b.virtualStatus?.batchExpiry ?? Infinity;
|
|
140
|
+
if (expiryA !== expiryB)
|
|
141
|
+
return expiryA - expiryB;
|
|
142
|
+
const valueA = Number(a.value ?? 0);
|
|
143
|
+
const valueB = Number(b.value ?? 0);
|
|
144
|
+
return valueB - valueA;
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Pure expiry-first selector. Picks the minimum set of VTXOs (sorted by
|
|
149
|
+
* expiry, value-desc tiebreaker) whose summed value covers `targetSats`.
|
|
150
|
+
* Returns `null` when the available VTXOs can't cover the target — the
|
|
151
|
+
* caller should let the SDK error so the user gets a real "insufficient
|
|
152
|
+
* funds" message rather than a half-formed selection.
|
|
153
|
+
*/
|
|
154
|
+
export function selectVtxosByExpiry(vtxos, targetSats) {
|
|
155
|
+
if (targetSats <= 0)
|
|
156
|
+
return [];
|
|
157
|
+
const sorted = sortVtxosByExpiry(vtxos);
|
|
158
|
+
const selected = [];
|
|
159
|
+
let total = 0;
|
|
160
|
+
for (const vtxo of sorted) {
|
|
161
|
+
selected.push(vtxo);
|
|
162
|
+
total += Number(vtxo.value ?? 0);
|
|
163
|
+
if (total >= targetSats)
|
|
164
|
+
return selected;
|
|
165
|
+
}
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Coerce the SDK's loose `getVtxos()` response shape into the strict
|
|
170
|
+
* `NormalizedVtxo[]` the adapter consumes elsewhere.
|
|
171
|
+
*
|
|
172
|
+
* - Accepts both a bare array and `{ vtxos: [...] }` wrapper (the SDK
|
|
173
|
+
* has shipped both shapes across versions).
|
|
174
|
+
* - Pulls fields from the outer entry and, when missing, falls back to
|
|
175
|
+
* `entry.outpoint.{txid,vout}` — older shapes nested those.
|
|
176
|
+
* - Resolves `state` from `virtualStatus.state`, then `isSwept` /
|
|
177
|
+
* `isPreconfirmed` / `isSpent` flags, defaulting to "settled".
|
|
178
|
+
* - Drops zero-value entries, spent entries, and entries with no txid —
|
|
179
|
+
* callers can rely on the returned array containing only spendable-
|
|
180
|
+
* looking VTXOs.
|
|
181
|
+
*/
|
|
182
|
+
export function normalizeVtxos(raw) {
|
|
183
|
+
const entries = Array.isArray(raw)
|
|
184
|
+
? raw
|
|
185
|
+
: Array.isArray(raw?.vtxos)
|
|
186
|
+
? raw.vtxos
|
|
187
|
+
: [];
|
|
188
|
+
return entries
|
|
189
|
+
.filter((entry) => !!entry && typeof entry === "object")
|
|
190
|
+
.map((entry) => {
|
|
191
|
+
const outpoint = entry.outpoint ?? {};
|
|
192
|
+
const virtualStatus = entry.virtualStatus ?? {};
|
|
193
|
+
const txid = toStringValue(entry.txid) || toStringValue(outpoint.txid);
|
|
194
|
+
const vout = toNumber(entry.vout ?? outpoint.vout);
|
|
195
|
+
const value = toNumber(entry.value ?? entry.amount);
|
|
196
|
+
const state = toStringValue(virtualStatus.state) ||
|
|
197
|
+
(entry.isSwept ? "swept" : "") ||
|
|
198
|
+
(entry.isPreconfirmed ? "preconfirmed" : "") ||
|
|
199
|
+
(entry.isSpent ? "spent" : "") ||
|
|
200
|
+
"settled";
|
|
201
|
+
const batchTxid = toStringValue(virtualStatus.batchTxID) || toStringValue(virtualStatus.batchTxId);
|
|
202
|
+
const batchExpiry = toNumber(virtualStatus.batchExpiry);
|
|
203
|
+
const createdAtRaw = entry.createdAt;
|
|
204
|
+
const createdAt = createdAtRaw instanceof Date ? createdAtRaw.getTime() : toNumber(createdAtRaw);
|
|
205
|
+
const assets = Array.isArray(entry.assets)
|
|
206
|
+
? entry.assets
|
|
207
|
+
.filter((asset) => !!asset && typeof asset === "object")
|
|
208
|
+
.map((asset) => ({
|
|
209
|
+
assetId: toStringValue(asset.assetId),
|
|
210
|
+
amount: toNumber(asset.amount),
|
|
211
|
+
}))
|
|
212
|
+
.filter((asset) => asset.assetId !== "" && asset.amount > 0)
|
|
213
|
+
: [];
|
|
214
|
+
return {
|
|
215
|
+
txid,
|
|
216
|
+
vout,
|
|
217
|
+
value,
|
|
218
|
+
state,
|
|
219
|
+
batchTxid: batchTxid || undefined,
|
|
220
|
+
batchExpiry: batchExpiry > 0 ? batchExpiry : undefined,
|
|
221
|
+
createdAt: createdAt > 0 ? createdAt : undefined,
|
|
222
|
+
assets: assets.length > 0 ? assets : undefined,
|
|
223
|
+
};
|
|
224
|
+
})
|
|
225
|
+
.filter((entry) => entry.txid !== "" && entry.value > 0 && entry.state !== "spent");
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=arkade-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arkade-helpers.js","sourceRoot":"","sources":["../../src/lib/arkade-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Arkade Swaps Client Manager
|
|
3
|
+
*
|
|
4
|
+
* Singleton that owns an `ArkadeSwaps` instance from `@arkade-os/boltz-swap`.
|
|
5
|
+
* Provides Boltz-based swaps between Arkade VTXOs and Lightning / on-chain BTC.
|
|
6
|
+
*
|
|
7
|
+
* Initialization is non-blocking: callers should attempt to use the client
|
|
8
|
+
* via `getClient()` and gracefully fall back when `isInitialized()` is false
|
|
9
|
+
* (e.g. on cold-start before the post-unlock init has finished).
|
|
10
|
+
*
|
|
11
|
+
* Lifecycle:
|
|
12
|
+
* - Arkade adapter connect → `initialize(wallet)`
|
|
13
|
+
* - Arkade adapter disconnect → `dispose()`
|
|
14
|
+
*
|
|
15
|
+
* The default repository is IndexedDB-backed so pending submarine / reverse /
|
|
16
|
+
* chain swaps survive a service-worker restart and are auto-claimed/refunded by
|
|
17
|
+
* the embedded `SwapManager`. Non-browser hosts (React Native) must inject a
|
|
18
|
+
* platform-appropriate `swapRepository` via `initialize(wallet, { swapRepository })`.
|
|
19
|
+
*/
|
|
20
|
+
import { ArkadeSwaps } from "@arkade-os/boltz-swap";
|
|
21
|
+
import type { IWallet } from "@arkade-os/sdk";
|
|
22
|
+
type SwapsClient = InstanceType<typeof ArkadeSwaps>;
|
|
23
|
+
export interface ArkadeSwapsInitOptions {
|
|
24
|
+
dbName?: string;
|
|
25
|
+
/** Platform-supplied swap repository (required off-browser, e.g. React Native). */
|
|
26
|
+
swapRepository?: unknown;
|
|
27
|
+
}
|
|
28
|
+
declare class ArkadeSwapsClientManager {
|
|
29
|
+
private client;
|
|
30
|
+
/** Serializes concurrent initialize() calls. */
|
|
31
|
+
private _initPromise;
|
|
32
|
+
/** Generation of the in-flight _initPromise. */
|
|
33
|
+
private _initGeneration;
|
|
34
|
+
/** Bumped by dispose() to invalidate any in-flight init. */
|
|
35
|
+
private _generation;
|
|
36
|
+
/**
|
|
37
|
+
* Initialize the swaps client with a connected Arkade wallet.
|
|
38
|
+
* Concurrent calls that belong to the same generation share the in-flight
|
|
39
|
+
* promise. A dispose() between calls bumps the generation so the old
|
|
40
|
+
* in-flight is treated as stale and a fresh init is started.
|
|
41
|
+
*/
|
|
42
|
+
initialize(wallet: IWallet, opts?: ArkadeSwapsInitOptions): Promise<void>;
|
|
43
|
+
private _doInitialize;
|
|
44
|
+
isInitialized(): boolean;
|
|
45
|
+
/** @throws if not initialized */
|
|
46
|
+
getClient(): SwapsClient;
|
|
47
|
+
/**
|
|
48
|
+
* Stop the embedded SwapManager and release resources. Safe to call when
|
|
49
|
+
* the client was never initialized.
|
|
50
|
+
*/
|
|
51
|
+
dispose(): Promise<void>;
|
|
52
|
+
}
|
|
53
|
+
export declare const arkadeSwapsClientManager: ArkadeSwapsClientManager;
|
|
54
|
+
export {};
|
|
55
|
+
//# sourceMappingURL=arkade-swaps-client-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arkade-swaps-client-manager.d.ts","sourceRoot":"","sources":["../../src/lib/arkade-swaps-client-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EAAE,WAAW,EAA2B,MAAM,uBAAuB,CAAC;AAC7E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAG9C,KAAK,WAAW,GAAG,YAAY,CAAC,OAAO,WAAW,CAAC,CAAC;AAKpD,MAAM,WAAW,sBAAsB;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,cAAM,wBAAwB;IAC5B,OAAO,CAAC,MAAM,CAA4B;IAC1C,gDAAgD;IAChD,OAAO,CAAC,YAAY,CAA8B;IAClD,gDAAgD;IAChD,OAAO,CAAC,eAAe,CAAK;IAC5B,4DAA4D;IAC5D,OAAO,CAAC,WAAW,CAAK;IAExB;;;;;OAKG;IACH,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC;YAmB3D,aAAa;IA4C3B,aAAa,IAAI,OAAO;IAIxB,iCAAiC;IACjC,SAAS,IAAI,WAAW;IAOxB;;;OAGG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAa/B;AAED,eAAO,MAAM,wBAAwB,0BAAiC,CAAC"}
|