@kaleidorg/wallet-engine 1.0.0-beta.4 → 1.0.0-beta.41
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 +728 -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 +111 -87
- 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
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Flashnet Client Manager
|
|
3
|
-
*
|
|
3
|
+
* Singleton managing the lifecycle of a FlashnetClient from `@flashnet/sdk`.
|
|
4
4
|
* Requires an initialized SparkWallet to function.
|
|
5
|
-
*
|
|
5
|
+
*
|
|
6
|
+
* Ported from rate-extension/src/protocols/spark/flashnet-client-manager.ts.
|
|
7
|
+
* The SDK is a value import (optional dependency) — consumers install
|
|
8
|
+
* `@flashnet/sdk` to use this manager, matching the Spark client-manager convention.
|
|
6
9
|
*/
|
|
7
|
-
import {
|
|
10
|
+
import { FlashnetClient } from '@flashnet/sdk';
|
|
11
|
+
import { BTC_ASSET_PUBKEY, USDB_DECIMALS, getFlashnetNetworkForSpark, getFlashnetUsdbTokenAddress, isUsdbTokenAddress, } from '../types/flashnet.js';
|
|
12
|
+
import { log } from './log.js';
|
|
13
|
+
import { saveSentTokenRecord } from './spark-sent-token-records.js';
|
|
8
14
|
/**
|
|
9
15
|
* Normalize the SDK pools response to always return an array.
|
|
10
16
|
* The SDK may return `Pool[]` or `{ pools: Pool[] }`.
|
|
@@ -26,11 +32,6 @@ class FlashnetClientManager {
|
|
|
26
32
|
this.poolId = null;
|
|
27
33
|
this.network = null;
|
|
28
34
|
}
|
|
29
|
-
/**
|
|
30
|
-
* Initialize with a SparkWallet instance.
|
|
31
|
-
* @param wallet - SparkWallet from @buildonspark/spark-sdk
|
|
32
|
-
* @param sparkNetwork - The Spark network ('mainnet' | 'regtest')
|
|
33
|
-
*/
|
|
34
35
|
initialize(wallet, sparkNetwork) {
|
|
35
36
|
if (this.initPromise)
|
|
36
37
|
return this.initPromise;
|
|
@@ -48,11 +49,12 @@ class FlashnetClientManager {
|
|
|
48
49
|
throw new Error('Flashnet is only available when Spark is on mainnet or regtest.');
|
|
49
50
|
}
|
|
50
51
|
try {
|
|
51
|
-
|
|
52
|
+
// The SDK accepts SparkWallet | IssuerSparkWallet but doesn't export a
|
|
53
|
+
// shared base — the cast keeps the call site honest while letting the
|
|
54
|
+
// rest of the file enjoy real types from the SDK.
|
|
52
55
|
this.client = new FlashnetClient(wallet);
|
|
53
56
|
await this.client.initialize();
|
|
54
57
|
this.network = network;
|
|
55
|
-
// Auto-discover the largest BTC/USDB pool
|
|
56
58
|
try {
|
|
57
59
|
const poolsResponse = await this.client.listPools({
|
|
58
60
|
assetAAddress: BTC_ASSET_PUBKEY,
|
|
@@ -61,12 +63,22 @@ class FlashnetClientManager {
|
|
|
61
63
|
});
|
|
62
64
|
const pools = normalizePoolsResponse(poolsResponse);
|
|
63
65
|
if (pools && pools.length > 0) {
|
|
64
|
-
|
|
66
|
+
// listPools returns LpPublicKey identifiers; we store the first
|
|
67
|
+
// (highest-TVL) BTC↔USDB pool as the default for swap UX.
|
|
68
|
+
const first = pools[0];
|
|
69
|
+
if (first?.lpPublicKey)
|
|
70
|
+
this.poolId = first.lpPublicKey;
|
|
65
71
|
}
|
|
66
72
|
}
|
|
67
73
|
catch (error) {
|
|
68
|
-
|
|
74
|
+
log.warn('[FlashnetClientManager] Pool discovery failed:', error);
|
|
69
75
|
}
|
|
76
|
+
// Backfill outgoing-swap history into the sent-token outbox so past
|
|
77
|
+
// token swaps (e.g. USDB → BTC) appear as sends in transaction history.
|
|
78
|
+
// Flashnet's AMM swap endpoint is the authoritative, retroactive source
|
|
79
|
+
// of direction — the Spark SDK exposes none for token transactions.
|
|
80
|
+
// Best-effort and async: never blocks or fails wallet init.
|
|
81
|
+
void this.backfillSwapHistory(wallet);
|
|
70
82
|
}
|
|
71
83
|
catch (error) {
|
|
72
84
|
this.client = null;
|
|
@@ -76,12 +88,84 @@ class FlashnetClientManager {
|
|
|
76
88
|
throw new Error(`Failed to initialize FlashnetClient: ${message}`);
|
|
77
89
|
}
|
|
78
90
|
}
|
|
91
|
+
/**
|
|
92
|
+
* Fetch the wallet's AMM swap history and persist the outgoing (token-in)
|
|
93
|
+
* legs to the sent-token outbox.
|
|
94
|
+
*
|
|
95
|
+
* A swap moves a token to the pool via an internal SDK transfer that the
|
|
96
|
+
* Spark token-transaction query cannot classify as a send. Flashnet's
|
|
97
|
+
* `GET /v1/swaps/user/{pubkey}` returns every past swap with explicit
|
|
98
|
+
* direction (assetIn / amountIn / inboundTransferId), so this both fixes
|
|
99
|
+
* future swaps and recovers ones made before any recording existed.
|
|
100
|
+
*
|
|
101
|
+
* Idempotent — records are keyed by transfer hash, so re-running on each
|
|
102
|
+
* connect simply refreshes them.
|
|
103
|
+
*/
|
|
104
|
+
async backfillSwapHistory(wallet) {
|
|
105
|
+
const client = this.client;
|
|
106
|
+
if (!client)
|
|
107
|
+
return;
|
|
108
|
+
// `toHumanReadableTokenIdentifier` is private on FlashnetClient; the swap
|
|
109
|
+
// endpoint may return hex token ids, so normalize to the bech32 form the
|
|
110
|
+
// rest of the wallet uses when possible.
|
|
111
|
+
const toHumanReadable = (raw) => {
|
|
112
|
+
try {
|
|
113
|
+
const fn = client
|
|
114
|
+
.toHumanReadableTokenIdentifier;
|
|
115
|
+
return fn ? fn.call(client, raw) : raw;
|
|
116
|
+
}
|
|
117
|
+
catch {
|
|
118
|
+
return raw;
|
|
119
|
+
}
|
|
120
|
+
};
|
|
121
|
+
try {
|
|
122
|
+
const senderSparkAddress = (await wallet.getSparkAddress());
|
|
123
|
+
const { swaps } = await client.getUserSwaps(undefined, {
|
|
124
|
+
sort: 'timestampDesc',
|
|
125
|
+
limit: 200,
|
|
126
|
+
});
|
|
127
|
+
let recorded = 0;
|
|
128
|
+
for (const swap of swaps ?? []) {
|
|
129
|
+
// Only the token-in leg is an outflow that needs the outbox. The
|
|
130
|
+
// token-out leg of a swap is a receive, already returned by the
|
|
131
|
+
// Spark token-transaction query.
|
|
132
|
+
const assetIn = swap?.assetInAddress;
|
|
133
|
+
const inboundTransferId = swap?.inboundTransferId;
|
|
134
|
+
if (!assetIn || assetIn === BTC_ASSET_PUBKEY || !inboundTransferId)
|
|
135
|
+
continue;
|
|
136
|
+
const assetId = toHumanReadable(assetIn);
|
|
137
|
+
const isUsdb = isUsdbTokenAddress(assetId);
|
|
138
|
+
const parsedTs = Date.parse(swap?.timestamp ?? '');
|
|
139
|
+
await saveSentTokenRecord({
|
|
140
|
+
hash: inboundTransferId,
|
|
141
|
+
senderSparkAddress,
|
|
142
|
+
amount: Number(swap?.amountIn ?? 0) || 0,
|
|
143
|
+
assetId,
|
|
144
|
+
ticker: isUsdb ? 'USDB' : 'TOKEN',
|
|
145
|
+
name: isUsdb ? 'USDB' : assetId,
|
|
146
|
+
decimals: isUsdb ? USDB_DECIMALS : 0,
|
|
147
|
+
timestamp: Number.isFinite(parsedTs) ? parsedTs : Date.now(),
|
|
148
|
+
});
|
|
149
|
+
recorded += 1;
|
|
150
|
+
}
|
|
151
|
+
if (recorded > 0) {
|
|
152
|
+
log.info(`[FlashnetClientManager] Backfilled ${recorded} outgoing swap(s) into token history`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
log.warn('[FlashnetClientManager] Swap history backfill failed:', error);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
79
159
|
getClient() {
|
|
80
160
|
if (!this.client) {
|
|
81
161
|
throw new Error('FlashnetClient not initialized. Call initialize() first.');
|
|
82
162
|
}
|
|
83
163
|
return this.client;
|
|
84
164
|
}
|
|
165
|
+
/** Convenience pass-through so callers don't need to await client.getBalance() through a cast. */
|
|
166
|
+
async getBalance() {
|
|
167
|
+
return this.getClient().getBalance();
|
|
168
|
+
}
|
|
85
169
|
getPoolId() {
|
|
86
170
|
return this.poolId;
|
|
87
171
|
}
|
|
@@ -103,7 +187,7 @@ class FlashnetClientManager {
|
|
|
103
187
|
await this.client.cleanup();
|
|
104
188
|
}
|
|
105
189
|
catch (error) {
|
|
106
|
-
|
|
190
|
+
log.warn('[FlashnetClientManager] Disconnect error:', error);
|
|
107
191
|
}
|
|
108
192
|
}
|
|
109
193
|
this.client = null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"flashnet-client-manager.js","sourceRoot":"","sources":["../../src/lib/flashnet-client-manager.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"flashnet-client-manager.js","sourceRoot":"","sources":["../../src/lib/flashnet-client-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +1,59 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* KaleidoClient Manager
|
|
3
|
-
* Singleton manager for KaleidoClient lifecycle.
|
|
4
|
-
*
|
|
3
|
+
* Singleton manager for KaleidoClient lifecycle (RGB Lightning node + Kaleidoswap maker).
|
|
4
|
+
*
|
|
5
|
+
* Transport is either "http" (kaleido-sdk's HTTP RlnClient) or "nwc" (an
|
|
6
|
+
* RLN-shaped client over Nostr Wallet Connect). The NWC implementation carries
|
|
7
|
+
* a nostr/relay dependency, so it is NOT bundled here — the consumer injects a
|
|
8
|
+
* factory via `setNwcRlnClientFactory()` (the extension supplies its NwcRlnClient;
|
|
9
|
+
* React Native / node hosts that don't use NWC never register one).
|
|
5
10
|
*/
|
|
6
|
-
import { KaleidoClient } from
|
|
11
|
+
import { KaleidoClient } from "kaleido-sdk";
|
|
12
|
+
import type { RgbTransport } from "../types/rgb.js";
|
|
7
13
|
export interface KaleidoClientConfig {
|
|
8
14
|
baseUrl: string;
|
|
9
15
|
nodeUrl?: string;
|
|
10
16
|
apiKey?: string;
|
|
11
17
|
timeout?: number;
|
|
18
|
+
/** Node transport. Defaults to "http". */
|
|
19
|
+
transport?: RgbTransport;
|
|
20
|
+
/** `nostr+walletconnect://` connection string — required when transport === "nwc". */
|
|
21
|
+
nwcUri?: string;
|
|
12
22
|
}
|
|
23
|
+
/** RLN-shaped client the NWC transport must provide (mirrors kaleido-sdk's RlnClient). */
|
|
24
|
+
export interface NwcRlnClientLike {
|
|
25
|
+
close(): void;
|
|
26
|
+
[method: string]: unknown;
|
|
27
|
+
}
|
|
28
|
+
/** Consumer-injected factory that builds an NWC-backed RLN client from a connection string. */
|
|
29
|
+
export type NwcRlnClientFactory = (nwcUri: string) => NwcRlnClientLike;
|
|
30
|
+
/**
|
|
31
|
+
* Register the NWC-backed RLN client factory. The extension calls this once at
|
|
32
|
+
* startup with `(uri) => new NwcRlnClient(uri)`. Without it, transport "nwc" throws.
|
|
33
|
+
*/
|
|
34
|
+
export declare function setNwcRlnClientFactory(factory: NwcRlnClientFactory): void;
|
|
13
35
|
declare class KaleidoClientManager {
|
|
14
36
|
private client;
|
|
15
37
|
private config;
|
|
38
|
+
/** Held only in NWC mode so reset() can tear down the relay pool. */
|
|
39
|
+
private nwcRln;
|
|
40
|
+
/** Initialize the KaleidoClient with configuration. */
|
|
16
41
|
initialize(config: KaleidoClientConfig): void;
|
|
42
|
+
/** @throws if not initialized */
|
|
17
43
|
getClient(): KaleidoClient;
|
|
18
44
|
isInitialized(): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Check if a node is reachable — either an HTTP node URL or an NWC link.
|
|
47
|
+
* Gates almost every RLN operation in the adapter.
|
|
48
|
+
*/
|
|
19
49
|
hasNode(): boolean;
|
|
20
50
|
getConfig(): KaleidoClientConfig | null;
|
|
51
|
+
/**
|
|
52
|
+
* Reset the client (disconnect and clear). Tears down the NWC relay pool
|
|
53
|
+
* when running the NWC transport so we don't leak sockets on reconnect.
|
|
54
|
+
*/
|
|
21
55
|
reset(): void;
|
|
56
|
+
/** Update configuration (re-initializes the client). */
|
|
22
57
|
updateConfig(config: Partial<KaleidoClientConfig>): void;
|
|
23
58
|
}
|
|
24
59
|
export declare const kaleidoClientManager: KaleidoClientManager;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kaleido-client-manager.d.ts","sourceRoot":"","sources":["../../src/lib/kaleido-client-manager.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"kaleido-client-manager.d.ts","sourceRoot":"","sources":["../../src/lib/kaleido-client-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAI5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,sFAAsF;IACtF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,0FAA0F;AAC1F,MAAM,WAAW,gBAAgB;IAC/B,KAAK,IAAI,IAAI,CAAC;IACd,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;CAC3B;AAED,+FAA+F;AAC/F,MAAM,MAAM,mBAAmB,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,gBAAgB,CAAC;AAIvE;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAEzE;AAyBD,cAAM,oBAAoB;IACxB,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,MAAM,CAAoC;IAClD,qEAAqE;IACrE,OAAO,CAAC,MAAM,CAAiC;IAE/C,uDAAuD;IACvD,UAAU,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI;IAuD7C,iCAAiC;IACjC,SAAS,IAAI,aAAa;IAO1B,aAAa,IAAI,OAAO;IAIxB;;;OAGG;IACH,OAAO,IAAI,OAAO;IAIlB,SAAS,IAAI,mBAAmB,GAAG,IAAI;IAIvC;;;OAGG;IACH,KAAK,IAAI,IAAI;IAQb,wDAAwD;IACxD,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,IAAI;CAMzD;AAED,eAAO,MAAM,oBAAoB,sBAA6B,CAAC"}
|
|
@@ -1,54 +1,123 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* KaleidoClient Manager
|
|
3
|
-
* Singleton manager for KaleidoClient lifecycle.
|
|
4
|
-
*
|
|
3
|
+
* Singleton manager for KaleidoClient lifecycle (RGB Lightning node + Kaleidoswap maker).
|
|
4
|
+
*
|
|
5
|
+
* Transport is either "http" (kaleido-sdk's HTTP RlnClient) or "nwc" (an
|
|
6
|
+
* RLN-shaped client over Nostr Wallet Connect). The NWC implementation carries
|
|
7
|
+
* a nostr/relay dependency, so it is NOT bundled here — the consumer injects a
|
|
8
|
+
* factory via `setNwcRlnClientFactory()` (the extension supplies its NwcRlnClient;
|
|
9
|
+
* React Native / node hosts that don't use NWC never register one).
|
|
5
10
|
*/
|
|
6
|
-
import { KaleidoClient } from
|
|
11
|
+
import { KaleidoClient } from "kaleido-sdk";
|
|
12
|
+
import { log } from "./log.js";
|
|
13
|
+
import { ProtocolError } from "../types/base.js";
|
|
14
|
+
let nwcRlnClientFactory = null;
|
|
15
|
+
/**
|
|
16
|
+
* Register the NWC-backed RLN client factory. The extension calls this once at
|
|
17
|
+
* startup with `(uri) => new NwcRlnClient(uri)`. Without it, transport "nwc" throws.
|
|
18
|
+
*/
|
|
19
|
+
export function setNwcRlnClientFactory(factory) {
|
|
20
|
+
nwcRlnClientFactory = factory;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* A MakerClient stand-in used in NWC mode when no maker URL is configured.
|
|
24
|
+
* Every access rejects with MAKER_NOT_CONFIGURED so swap flows fail loudly
|
|
25
|
+
* instead of silently hitting the wrong endpoint.
|
|
26
|
+
*/
|
|
27
|
+
function createMakerStub() {
|
|
28
|
+
return new Proxy({}, {
|
|
29
|
+
get() {
|
|
30
|
+
return () => Promise.reject(new ProtocolError("Maker API not configured. Set a maker URL to enable swaps.", "RGB_LN", "MAKER_NOT_CONFIGURED"));
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
}
|
|
7
34
|
class KaleidoClientManager {
|
|
8
35
|
constructor() {
|
|
9
36
|
this.client = null;
|
|
10
37
|
this.config = null;
|
|
38
|
+
/** Held only in NWC mode so reset() can tear down the relay pool. */
|
|
39
|
+
this.nwcRln = null;
|
|
11
40
|
}
|
|
41
|
+
/** Initialize the KaleidoClient with configuration. */
|
|
12
42
|
initialize(config) {
|
|
43
|
+
// Tear down any prior NWC relay pool before replacing the client.
|
|
44
|
+
this.nwcRln?.close();
|
|
45
|
+
this.nwcRln = null;
|
|
13
46
|
this.config = config;
|
|
47
|
+
if (config.transport === "nwc") {
|
|
48
|
+
if (!config.nwcUri) {
|
|
49
|
+
throw new ProtocolError("NWC connection string is required for transport 'nwc'", "RGB_LN", "NODE_NOT_CONFIGURED");
|
|
50
|
+
}
|
|
51
|
+
if (!nwcRlnClientFactory) {
|
|
52
|
+
throw new ProtocolError("NWC transport is not available: no NwcRlnClient factory registered. Call setNwcRlnClientFactory() at startup.", "RGB_LN", "NODE_NOT_CONFIGURED");
|
|
53
|
+
}
|
|
54
|
+
// Compose a KaleidoClient-shaped object: NWC-backed `.rln`, plus an
|
|
55
|
+
// optional HTTP `.maker` (a separate, transport-independent concern).
|
|
56
|
+
const rln = nwcRlnClientFactory(config.nwcUri);
|
|
57
|
+
this.nwcRln = rln;
|
|
58
|
+
const hasMaker = !!config.baseUrl;
|
|
59
|
+
const maker = hasMaker
|
|
60
|
+
? KaleidoClient.create({ baseUrl: config.baseUrl, timeout: config.timeout }).maker
|
|
61
|
+
: createMakerStub();
|
|
62
|
+
this.client = {
|
|
63
|
+
rln,
|
|
64
|
+
maker,
|
|
65
|
+
hasNode: () => true,
|
|
66
|
+
hasMaker: () => hasMaker,
|
|
67
|
+
close: async () => rln.close(),
|
|
68
|
+
};
|
|
69
|
+
log.info("[KaleidoClientManager] Initialized NWC transport:", { hasMakerUrl: hasMaker });
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
14
72
|
this.client = KaleidoClient.create({
|
|
15
73
|
baseUrl: config.baseUrl,
|
|
16
74
|
nodeUrl: config.nodeUrl,
|
|
17
75
|
apiKey: config.apiKey,
|
|
18
76
|
timeout: config.timeout,
|
|
19
77
|
});
|
|
20
|
-
|
|
78
|
+
log.info("[KaleidoClientManager] Initialized with config:", {
|
|
21
79
|
baseUrl: config.baseUrl,
|
|
22
80
|
hasNodeUrl: !!config.nodeUrl,
|
|
23
81
|
hasApiKey: !!config.apiKey,
|
|
24
82
|
});
|
|
25
83
|
}
|
|
84
|
+
/** @throws if not initialized */
|
|
26
85
|
getClient() {
|
|
27
86
|
if (!this.client) {
|
|
28
|
-
throw new Error(
|
|
87
|
+
throw new Error("KaleidoClient not initialized. Call initialize() first.");
|
|
29
88
|
}
|
|
30
89
|
return this.client;
|
|
31
90
|
}
|
|
32
91
|
isInitialized() {
|
|
33
92
|
return this.client !== null;
|
|
34
93
|
}
|
|
94
|
+
/**
|
|
95
|
+
* Check if a node is reachable — either an HTTP node URL or an NWC link.
|
|
96
|
+
* Gates almost every RLN operation in the adapter.
|
|
97
|
+
*/
|
|
35
98
|
hasNode() {
|
|
36
|
-
return !!this.config?.nodeUrl;
|
|
99
|
+
return !!this.config?.nodeUrl || this.config?.transport === "nwc";
|
|
37
100
|
}
|
|
38
101
|
getConfig() {
|
|
39
102
|
return this.config;
|
|
40
103
|
}
|
|
104
|
+
/**
|
|
105
|
+
* Reset the client (disconnect and clear). Tears down the NWC relay pool
|
|
106
|
+
* when running the NWC transport so we don't leak sockets on reconnect.
|
|
107
|
+
*/
|
|
41
108
|
reset() {
|
|
109
|
+
this.nwcRln?.close();
|
|
110
|
+
this.nwcRln = null;
|
|
42
111
|
this.client = null;
|
|
43
112
|
this.config = null;
|
|
44
|
-
|
|
113
|
+
log.info("[KaleidoClientManager] Reset complete");
|
|
45
114
|
}
|
|
115
|
+
/** Update configuration (re-initializes the client). */
|
|
46
116
|
updateConfig(config) {
|
|
47
117
|
if (!this.config) {
|
|
48
|
-
throw new Error(
|
|
118
|
+
throw new Error("Cannot update config: client not initialized");
|
|
49
119
|
}
|
|
50
|
-
|
|
51
|
-
this.initialize(newConfig);
|
|
120
|
+
this.initialize({ ...this.config, ...config });
|
|
52
121
|
}
|
|
53
122
|
}
|
|
54
123
|
export const kaleidoClientManager = new KaleidoClientManager();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kaleido-client-manager.js","sourceRoot":"","sources":["../../src/lib/kaleido-client-manager.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"kaleido-client-manager.js","sourceRoot":"","sources":["../../src/lib/kaleido-client-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Reject phishing-style messages that match the canonical LNURL-auth
|
|
3
|
+
* disclaimer. Signing one would expose the LNURL-auth identity.
|
|
4
|
+
*/
|
|
5
|
+
export declare function assertSafeToSign(message: string): void;
|
|
6
|
+
/**
|
|
7
|
+
* Sign a message with the LND `signmessage` algorithm and return the
|
|
8
|
+
* zbase32-encoded recoverable signature.
|
|
9
|
+
*/
|
|
10
|
+
export declare function signLnMessage(message: string, privateKey: Uint8Array): string;
|
|
11
|
+
/**
|
|
12
|
+
* Verify a zbase32-encoded LND signature against the supplied message.
|
|
13
|
+
* Returns the recovered compressed pubkey (hex) on success, or throws.
|
|
14
|
+
*/
|
|
15
|
+
export declare function verifyLnMessage(message: string, zbase32Signature: string): string;
|
|
16
|
+
/**
|
|
17
|
+
* Verify a zbase32 signature is from a specific pubkey. Throws on mismatch.
|
|
18
|
+
*/
|
|
19
|
+
export declare function verifyLnMessageFrom(message: string, zbase32Signature: string, expectedPubkeyHex: string): void;
|
|
20
|
+
//# sourceMappingURL=ln-message-sign.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ln-message-sign.d.ts","sourceRoot":"","sources":["../../src/lib/ln-message-sign.ts"],"names":[],"mappings":"AA8BA;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAItD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM,CAmB7E;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,MAAM,CAkBjF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,EAAE,MAAM,GACxB,IAAI,CAKN"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { secp256k1 } from "@noble/curves/secp256k1.js";
|
|
2
|
+
import { sha256 } from "@noble/hashes/sha2.js";
|
|
3
|
+
import { bytesToHex } from "@noble/hashes/utils.js";
|
|
4
|
+
import { zbase32Encode, zbase32Decode } from "./zbase32.js";
|
|
5
|
+
// LND-style signMessage / verifyMessage.
|
|
6
|
+
//
|
|
7
|
+
// prefix = "Lightning Signed Message:"
|
|
8
|
+
// hash = sha256(sha256(prefix + message))
|
|
9
|
+
// sig = recoverable ECDSA over secp256k1, 65 bytes (recid+31 || r || s)
|
|
10
|
+
// text = zbase32(sig)
|
|
11
|
+
//
|
|
12
|
+
// This is the format Alby's LND/lndhub/LNbits connectors return and is
|
|
13
|
+
// what LNURL-auth-style verifyMessage callers expect. The non-recoverable
|
|
14
|
+
// hex/DER form some other wallets emit cannot be verified without knowing
|
|
15
|
+
// the signing pubkey out-of-band.
|
|
16
|
+
const LN_MSG_PREFIX = new TextEncoder().encode("Lightning Signed Message:");
|
|
17
|
+
const LNURL_AUTH_CANONICAL_PHRASE = "DO NOT EVER SIGN THIS TEXT WITH YOUR PRIVATE KEYS! IT IS ONLY USED FOR DERIVATION OF LNURL-AUTH HASHING-KEY, DISCLOSING ITS SIGNATURE WILL COMPROMISE YOUR LNURL-AUTH IDENTITY AND MAY LEAD TO LOSS OF FUNDS!";
|
|
18
|
+
function lnMessageHash(message) {
|
|
19
|
+
const msgBytes = new TextEncoder().encode(message);
|
|
20
|
+
const concat = new Uint8Array(LN_MSG_PREFIX.length + msgBytes.length);
|
|
21
|
+
concat.set(LN_MSG_PREFIX, 0);
|
|
22
|
+
concat.set(msgBytes, LN_MSG_PREFIX.length);
|
|
23
|
+
return sha256(sha256(concat));
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Reject phishing-style messages that match the canonical LNURL-auth
|
|
27
|
+
* disclaimer. Signing one would expose the LNURL-auth identity.
|
|
28
|
+
*/
|
|
29
|
+
export function assertSafeToSign(message) {
|
|
30
|
+
if (message.trim() === LNURL_AUTH_CANONICAL_PHRASE.trim()) {
|
|
31
|
+
throw new Error("Refusing to sign LNURL-auth canonical phrase");
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Sign a message with the LND `signmessage` algorithm and return the
|
|
36
|
+
* zbase32-encoded recoverable signature.
|
|
37
|
+
*/
|
|
38
|
+
export function signLnMessage(message, privateKey) {
|
|
39
|
+
assertSafeToSign(message);
|
|
40
|
+
const hash = lnMessageHash(message);
|
|
41
|
+
// `format: "recovered"` returns 65 bytes laid out as [recid, r(32), s(32)].
|
|
42
|
+
// `prehash: false` because we already hashed.
|
|
43
|
+
const recovered = secp256k1.sign(hash, privateKey, {
|
|
44
|
+
format: "recovered",
|
|
45
|
+
prehash: false,
|
|
46
|
+
lowS: true,
|
|
47
|
+
});
|
|
48
|
+
if (recovered.length !== 65) {
|
|
49
|
+
throw new Error("Unexpected recoverable signature length");
|
|
50
|
+
}
|
|
51
|
+
// LND wire format adds 31 to the recovery id to land in the printable byte
|
|
52
|
+
// range; downstream Bitcoin Core's signmessage uses 27 — we match LND.
|
|
53
|
+
const out = new Uint8Array(65);
|
|
54
|
+
out[0] = recovered[0] + 31;
|
|
55
|
+
out.set(recovered.subarray(1), 1);
|
|
56
|
+
return zbase32Encode(out);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Verify a zbase32-encoded LND signature against the supplied message.
|
|
60
|
+
* Returns the recovered compressed pubkey (hex) on success, or throws.
|
|
61
|
+
*/
|
|
62
|
+
export function verifyLnMessage(message, zbase32Signature) {
|
|
63
|
+
const bytes = zbase32Decode(zbase32Signature, 65);
|
|
64
|
+
if (bytes.length !== 65) {
|
|
65
|
+
throw new Error("Invalid signature length");
|
|
66
|
+
}
|
|
67
|
+
const recovery = bytes[0] - 31;
|
|
68
|
+
if (recovery < 0 || recovery > 3) {
|
|
69
|
+
throw new Error("Invalid recovery id");
|
|
70
|
+
}
|
|
71
|
+
// Reassemble `recovered` shape expected by @noble: [recid, r, s].
|
|
72
|
+
const recoveredBytes = new Uint8Array(65);
|
|
73
|
+
recoveredBytes[0] = recovery;
|
|
74
|
+
recoveredBytes.set(bytes.subarray(1), 1);
|
|
75
|
+
const hash = lnMessageHash(message);
|
|
76
|
+
const pubkeyBytes = secp256k1.recoverPublicKey(recoveredBytes, hash, {
|
|
77
|
+
prehash: false,
|
|
78
|
+
});
|
|
79
|
+
return bytesToHex(pubkeyBytes);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Verify a zbase32 signature is from a specific pubkey. Throws on mismatch.
|
|
83
|
+
*/
|
|
84
|
+
export function verifyLnMessageFrom(message, zbase32Signature, expectedPubkeyHex) {
|
|
85
|
+
const recovered = verifyLnMessage(message, zbase32Signature);
|
|
86
|
+
if (recovered.toLowerCase() !== expectedPubkeyHex.toLowerCase()) {
|
|
87
|
+
throw new Error("Signature does not match expected pubkey");
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=ln-message-sign.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ln-message-sign.js","sourceRoot":"","sources":["../../src/lib/ln-message-sign.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thin logger proxy over the platform `ports` seam.
|
|
3
|
+
*
|
|
4
|
+
* Ported Arkade modules use `log.info(...)` / `log.warn(...)` call sites. This
|
|
5
|
+
* proxy resolves the active platform logger lazily on each call so that a
|
|
6
|
+
* consumer's `setPlatform()` (extension / React Native) is honoured even when
|
|
7
|
+
* it runs after these modules are imported. Falls back to `consoleLogger`.
|
|
8
|
+
*/
|
|
9
|
+
export declare const log: {
|
|
10
|
+
debug: (...args: unknown[]) => void;
|
|
11
|
+
info: (...args: unknown[]) => void;
|
|
12
|
+
warn: (...args: unknown[]) => void;
|
|
13
|
+
error: (...args: unknown[]) => void;
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=log.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.d.ts","sourceRoot":"","sources":["../../src/lib/log.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,eAAO,MAAM,GAAG;qBACG,OAAO,EAAE,KAAG,IAAI;oBACjB,OAAO,EAAE,KAAG,IAAI;oBAChB,OAAO,EAAE,KAAG,IAAI;qBACf,OAAO,EAAE,KAAG,IAAI;CAClC,CAAC"}
|
package/dist/lib/log.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thin logger proxy over the platform `ports` seam.
|
|
3
|
+
*
|
|
4
|
+
* Ported Arkade modules use `log.info(...)` / `log.warn(...)` call sites. This
|
|
5
|
+
* proxy resolves the active platform logger lazily on each call so that a
|
|
6
|
+
* consumer's `setPlatform()` (extension / React Native) is honoured even when
|
|
7
|
+
* it runs after these modules are imported. Falls back to `consoleLogger`.
|
|
8
|
+
*/
|
|
9
|
+
import { getLogger } from "../ports/index.js";
|
|
10
|
+
export const log = {
|
|
11
|
+
debug: (...args) => getLogger().debug(...args),
|
|
12
|
+
info: (...args) => getLogger().info(...args),
|
|
13
|
+
warn: (...args) => getLogger().warn(...args),
|
|
14
|
+
error: (...args) => getLogger().error(...args),
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=log.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/lib/log.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAErC,MAAM,CAAC,MAAM,GAAG,GAAG;IACjB,KAAK,EAAE,CAAC,GAAG,IAAe,EAAQ,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;IAC/D,IAAI,EAAE,CAAC,GAAG,IAAe,EAAQ,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7D,IAAI,EAAE,CAAC,GAAG,IAAe,EAAQ,EAAE,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7D,KAAK,EAAE,CAAC,GAAG,IAAe,EAAQ,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;CAChE,CAAC"}
|