@kaleidorg/wallet-engine 1.0.0-beta.12
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 +247 -0
- package/dist/adapters/ArkadeAdapter.d.ts +49 -0
- package/dist/adapters/ArkadeAdapter.d.ts.map +1 -0
- package/dist/adapters/ArkadeAdapter.js +316 -0
- package/dist/adapters/ArkadeAdapter.js.map +1 -0
- package/dist/adapters/IProtocolAdapter.d.ts +217 -0
- package/dist/adapters/IProtocolAdapter.d.ts.map +1 -0
- package/dist/adapters/IProtocolAdapter.js +33 -0
- package/dist/adapters/IProtocolAdapter.js.map +1 -0
- package/dist/adapters/RgbAdapter.d.ts +71 -0
- package/dist/adapters/RgbAdapter.d.ts.map +1 -0
- package/dist/adapters/RgbAdapter.js +820 -0
- package/dist/adapters/RgbAdapter.js.map +1 -0
- package/dist/adapters/SparkAdapter.d.ts +48 -0
- package/dist/adapters/SparkAdapter.d.ts.map +1 -0
- package/dist/adapters/SparkAdapter.js +395 -0
- package/dist/adapters/SparkAdapter.js.map +1 -0
- package/dist/adapters/native.d.ts +16 -0
- package/dist/adapters/native.d.ts.map +1 -0
- package/dist/adapters/native.js +16 -0
- package/dist/adapters/native.js.map +1 -0
- package/dist/adapters/wdk/ArkadeWdkAdapter.d.ts +85 -0
- package/dist/adapters/wdk/ArkadeWdkAdapter.d.ts.map +1 -0
- package/dist/adapters/wdk/ArkadeWdkAdapter.js +313 -0
- package/dist/adapters/wdk/ArkadeWdkAdapter.js.map +1 -0
- package/dist/adapters/wdk/LiquidWdkAdapter.d.ts +88 -0
- package/dist/adapters/wdk/LiquidWdkAdapter.d.ts.map +1 -0
- package/dist/adapters/wdk/LiquidWdkAdapter.js +276 -0
- package/dist/adapters/wdk/LiquidWdkAdapter.js.map +1 -0
- package/dist/adapters/wdk/RlnWdkAdapter.d.ts +86 -0
- package/dist/adapters/wdk/RlnWdkAdapter.d.ts.map +1 -0
- package/dist/adapters/wdk/RlnWdkAdapter.js +310 -0
- package/dist/adapters/wdk/RlnWdkAdapter.js.map +1 -0
- package/dist/adapters/wdk/SparkWdkAdapter.d.ts +81 -0
- package/dist/adapters/wdk/SparkWdkAdapter.d.ts.map +1 -0
- package/dist/adapters/wdk/SparkWdkAdapter.js +417 -0
- package/dist/adapters/wdk/SparkWdkAdapter.js.map +1 -0
- package/dist/adapters/wdk/index.d.ts +15 -0
- package/dist/adapters/wdk/index.d.ts.map +1 -0
- package/dist/adapters/wdk/index.js +15 -0
- package/dist/adapters/wdk/index.js.map +1 -0
- package/dist/adapters/wdk/moduleLoader.d.ts +22 -0
- package/dist/adapters/wdk/moduleLoader.d.ts.map +1 -0
- package/dist/adapters/wdk/moduleLoader.js +31 -0
- package/dist/adapters/wdk/moduleLoader.js.map +1 -0
- package/dist/capabilities/index.d.ts +46 -0
- package/dist/capabilities/index.d.ts.map +1 -0
- package/dist/capabilities/index.js +102 -0
- package/dist/capabilities/index.js.map +1 -0
- package/dist/capabilities/operations.d.ts +22 -0
- package/dist/capabilities/operations.d.ts.map +1 -0
- package/dist/capabilities/operations.js +55 -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 +51 -0
- package/dist/disclosure/index.d.ts.map +1 -0
- package/dist/disclosure/index.js +64 -0
- package/dist/disclosure/index.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +34 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/arkade-client-manager.d.ts +47 -0
- package/dist/lib/arkade-client-manager.d.ts.map +1 -0
- package/dist/lib/arkade-client-manager.js +121 -0
- package/dist/lib/arkade-client-manager.js.map +1 -0
- package/dist/lib/bolt11.d.ts +18 -0
- package/dist/lib/bolt11.d.ts.map +1 -0
- package/dist/lib/bolt11.js +31 -0
- package/dist/lib/bolt11.js.map +1 -0
- package/dist/lib/flashnet-client-manager.d.ts +29 -0
- package/dist/lib/flashnet-client-manager.d.ts.map +1 -0
- package/dist/lib/flashnet-client-manager.js +116 -0
- package/dist/lib/flashnet-client-manager.js.map +1 -0
- package/dist/lib/kaleido-client-manager.d.ts +26 -0
- package/dist/lib/kaleido-client-manager.d.ts.map +1 -0
- package/dist/lib/kaleido-client-manager.js +55 -0
- package/dist/lib/kaleido-client-manager.js.map +1 -0
- package/dist/lib/spark-client-manager.d.ts +41 -0
- package/dist/lib/spark-client-manager.d.ts.map +1 -0
- package/dist/lib/spark-client-manager.js +101 -0
- package/dist/lib/spark-client-manager.js.map +1 -0
- package/dist/manager/ProtocolManager.d.ts +108 -0
- package/dist/manager/ProtocolManager.d.ts.map +1 -0
- package/dist/manager/ProtocolManager.js +305 -0
- package/dist/manager/ProtocolManager.js.map +1 -0
- package/dist/ports/index.d.ts +49 -0
- package/dist/ports/index.d.ts.map +1 -0
- package/dist/ports/index.js +31 -0
- package/dist/ports/index.js.map +1 -0
- package/dist/receive/unifiedReceive.d.ts +54 -0
- package/dist/receive/unifiedReceive.d.ts.map +1 -0
- package/dist/receive/unifiedReceive.js +102 -0
- package/dist/receive/unifiedReceive.js.map +1 -0
- package/dist/registry/createWdkRegistry.d.ts +20 -0
- package/dist/registry/createWdkRegistry.d.ts.map +1 -0
- package/dist/registry/createWdkRegistry.js +32 -0
- package/dist/registry/createWdkRegistry.js.map +1 -0
- package/dist/router/destination.d.ts +28 -0
- package/dist/router/destination.d.ts.map +1 -0
- package/dist/router/destination.js +72 -0
- package/dist/router/destination.js.map +1 -0
- package/dist/router/index.d.ts +55 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +67 -0
- package/dist/router/index.js.map +1 -0
- package/dist/swap/KaleidoswapSwap.d.ts +44 -0
- package/dist/swap/KaleidoswapSwap.d.ts.map +1 -0
- package/dist/swap/KaleidoswapSwap.js +123 -0
- package/dist/swap/KaleidoswapSwap.js.map +1 -0
- 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 +40 -0
- package/dist/types/arkade.d.ts.map +1 -0
- package/dist/types/arkade.js +6 -0
- package/dist/types/arkade.js.map +1 -0
- package/dist/types/base.d.ts +228 -0
- package/dist/types/base.d.ts.map +1 -0
- package/dist/types/base.js +53 -0
- package/dist/types/base.js.map +1 -0
- package/dist/types/cross-l2.d.ts +108 -0
- package/dist/types/cross-l2.d.ts.map +1 -0
- package/dist/types/cross-l2.js +16 -0
- package/dist/types/cross-l2.js.map +1 -0
- package/dist/types/flashnet.d.ts +31 -0
- package/dist/types/flashnet.d.ts.map +1 -0
- package/dist/types/flashnet.js +23 -0
- package/dist/types/flashnet.js.map +1 -0
- package/dist/types/rgb.d.ts +105 -0
- package/dist/types/rgb.d.ts.map +1 -0
- package/dist/types/rgb.js +6 -0
- package/dist/types/rgb.js.map +1 -0
- package/dist/types/spark.d.ts +59 -0
- package/dist/types/spark.d.ts.map +1 -0
- package/dist/types/spark.js +6 -0
- package/dist/types/spark.js.map +1 -0
- package/dist/utils.d.ts +10 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +23 -0
- package/dist/utils.js.map +1 -0
- package/package.json +71 -0
|
@@ -0,0 +1,417 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SparkWdkAdapter
|
|
3
|
+
* ---------------
|
|
4
|
+
* Thin adapter mapping the WDK Spark module (@tetherto/wdk-wallet-spark) onto the
|
|
5
|
+
* stable `IProtocolAdapter` contract. This is the reference implementation of the
|
|
6
|
+
* "wrap a WDK module behind the contract" pattern (see docs/WDK_INTEGRATION_PLAN.md).
|
|
7
|
+
*
|
|
8
|
+
* Discipline rules enforced here:
|
|
9
|
+
* - NO WDK/SDK types cross the contract boundary — everything returned is a domain
|
|
10
|
+
* type from ../types/base. The WDK objects are held as `any` internally.
|
|
11
|
+
* - Protocol quirks (zero-fee, static address) live in the capability manifest,
|
|
12
|
+
* not in this interface.
|
|
13
|
+
*
|
|
14
|
+
* WDK Spark account surface (captured via Spike A, 2026-06-03):
|
|
15
|
+
* manager: getAccount, getAccountByPath, getFeeRates
|
|
16
|
+
* account: getAddress, getBalance, sendTransaction, transfer,
|
|
17
|
+
* getStaticDepositAddress, getSingleUseDepositAddress, quoteWithdraw,
|
|
18
|
+
* withdraw, createLightningInvoice, payLightningInvoice,
|
|
19
|
+
* createSparkSatsInvoice, createSparkTokensInvoice, paySparkInvoice,
|
|
20
|
+
* syncWalletBalance, dispose, cleanupConnections
|
|
21
|
+
*
|
|
22
|
+
* Status: skeleton — core receive/balance/invoice/send wired to the real WDK calls;
|
|
23
|
+
* remaining contract methods stubbed with explicit ProtocolError until Phase 2.
|
|
24
|
+
*/
|
|
25
|
+
import { ProtocolError, } from '../../types/base.js';
|
|
26
|
+
import { getCapabilities } from '../../capabilities/index.js';
|
|
27
|
+
import { PROTOCOL_OPERATIONS } from '../../capabilities/operations.js';
|
|
28
|
+
import { loadWdkModule } from './moduleLoader.js';
|
|
29
|
+
import { decodeBolt11, isBolt11 } from '../../lib/bolt11.js';
|
|
30
|
+
/** Lower-case hex string for a Uint8Array / Buffer / hex string (for identity-key compare). */
|
|
31
|
+
function toHexLower(bytes) {
|
|
32
|
+
if (!bytes)
|
|
33
|
+
return '';
|
|
34
|
+
if (typeof bytes === 'string')
|
|
35
|
+
return bytes.toLowerCase();
|
|
36
|
+
try {
|
|
37
|
+
let out = '';
|
|
38
|
+
for (const b of bytes)
|
|
39
|
+
out += b.toString(16).padStart(2, '0');
|
|
40
|
+
return out.toLowerCase();
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return '';
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/** Map a spark-sdk Transfer proto status → domain TransactionStatus. */
|
|
47
|
+
function mapSparkStatus(s) {
|
|
48
|
+
const v = String(s ?? '').toUpperCase();
|
|
49
|
+
if (v.includes('COMPLET'))
|
|
50
|
+
return 'confirmed';
|
|
51
|
+
if (v.includes('FAIL') || v.includes('EXPIRED') || v.includes('RETURN'))
|
|
52
|
+
return 'failed';
|
|
53
|
+
return 'pending';
|
|
54
|
+
}
|
|
55
|
+
function isDirectSparkTransfer(t) {
|
|
56
|
+
const type = String(t?.type ?? t?.transferType ?? t?.sparkTransactionType ?? '').toUpperCase();
|
|
57
|
+
const hasUserRequest = t?.userRequest != null || t?.userRequestId != null;
|
|
58
|
+
const hasTransferShape = t?.receiverIdentityPublicKey != null || t?.senderIdentityPublicKey != null || t?.totalValue != null;
|
|
59
|
+
return type === 'TRANSFER' || type === '2' || (!hasUserRequest && hasTransferShape);
|
|
60
|
+
}
|
|
61
|
+
const SPARK_NETWORK_MAP = {
|
|
62
|
+
mainnet: 'MAINNET',
|
|
63
|
+
testnet: 'TESTNET',
|
|
64
|
+
regtest: 'REGTEST',
|
|
65
|
+
signet: 'SIGNET', // Spark supports SIGNET natively
|
|
66
|
+
};
|
|
67
|
+
export class SparkWdkAdapter {
|
|
68
|
+
constructor() {
|
|
69
|
+
this.protocolName = 'SPARK';
|
|
70
|
+
this.capabilities = PROTOCOL_OPERATIONS.SPARK;
|
|
71
|
+
this.supportedLayers = getCapabilities('SPARK').layers;
|
|
72
|
+
this.version = '0.1.0-wdk';
|
|
73
|
+
this.manager = null;
|
|
74
|
+
this.account = null;
|
|
75
|
+
this.connected = false;
|
|
76
|
+
this.network = 'mainnet';
|
|
77
|
+
// Cached account identity pubkey (hex) — used to derive transfer direction,
|
|
78
|
+
// since the spark-sdk Transfer proto exposes sender/receiver identity keys
|
|
79
|
+
// rather than an explicit direction flag.
|
|
80
|
+
this.identityPubKeyHex = null;
|
|
81
|
+
}
|
|
82
|
+
// --- Connection ---------------------------------------------------------
|
|
83
|
+
async connect(config) {
|
|
84
|
+
const cfg = config;
|
|
85
|
+
if (!cfg.mnemonic) {
|
|
86
|
+
throw new ProtocolError('SparkWdkAdapter requires a mnemonic', 'SPARK', 'CONFIG');
|
|
87
|
+
}
|
|
88
|
+
this.network = cfg.network ?? 'mainnet';
|
|
89
|
+
// Injectable loader (RN injects a static require; Node/Vite use the import fallback).
|
|
90
|
+
// @ts-ignore — declared as a workspace/optional dep; resolved at runtime.
|
|
91
|
+
const mod = await loadWdkModule('@tetherto/wdk-wallet-spark', () => import('@tetherto/wdk-wallet-spark'));
|
|
92
|
+
const WalletManagerSpark = mod.default ?? mod;
|
|
93
|
+
this.manager = new WalletManagerSpark(cfg.mnemonic, {
|
|
94
|
+
network: SPARK_NETWORK_MAP[this.network] ?? 'MAINNET',
|
|
95
|
+
});
|
|
96
|
+
this.account = await this.manager.getAccount(cfg.accountIndex ?? 0);
|
|
97
|
+
try {
|
|
98
|
+
this.identityPubKeyHex = toHexLower(await this.account.getIdentityKey?.()) || null;
|
|
99
|
+
}
|
|
100
|
+
catch {
|
|
101
|
+
this.identityPubKeyHex = null;
|
|
102
|
+
}
|
|
103
|
+
this.connected = true;
|
|
104
|
+
}
|
|
105
|
+
async disconnect() {
|
|
106
|
+
try {
|
|
107
|
+
await this.account?.dispose?.();
|
|
108
|
+
await this.account?.cleanupConnections?.();
|
|
109
|
+
}
|
|
110
|
+
finally {
|
|
111
|
+
this.account = null;
|
|
112
|
+
this.manager = null;
|
|
113
|
+
this.connected = false;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
isConnected() {
|
|
117
|
+
return this.connected;
|
|
118
|
+
}
|
|
119
|
+
async getConnectionInfo() {
|
|
120
|
+
return { protocol: 'SPARK', connected: this.connected, network: this.network };
|
|
121
|
+
}
|
|
122
|
+
// --- Address / receive --------------------------------------------------
|
|
123
|
+
async getReceiveAddress() {
|
|
124
|
+
this.assertConnected();
|
|
125
|
+
const address = await this.account.getAddress();
|
|
126
|
+
return { address, format: 'SPARK_ADDRESS' };
|
|
127
|
+
}
|
|
128
|
+
// --- Balance ------------------------------------------------------------
|
|
129
|
+
async getBtcBalance() {
|
|
130
|
+
this.assertConnected();
|
|
131
|
+
// WDK: getBalance(): Promise<bigint> — sats, settled balance.
|
|
132
|
+
const bal = await this.account.getBalance();
|
|
133
|
+
const total = Number(bal);
|
|
134
|
+
return { confirmed: total, unconfirmed: 0, total };
|
|
135
|
+
}
|
|
136
|
+
async refreshBalances() {
|
|
137
|
+
this.assertConnected();
|
|
138
|
+
await this.account.syncWalletBalance?.();
|
|
139
|
+
}
|
|
140
|
+
async listAssets() {
|
|
141
|
+
this.assertConnected();
|
|
142
|
+
const { total } = await this.getBtcBalance();
|
|
143
|
+
const btc = {
|
|
144
|
+
id: 'BTC',
|
|
145
|
+
name: 'Bitcoin',
|
|
146
|
+
ticker: 'BTC',
|
|
147
|
+
precision: 8,
|
|
148
|
+
protocol: 'SPARK',
|
|
149
|
+
layer: 'BTC_SPARK',
|
|
150
|
+
balance: {
|
|
151
|
+
total,
|
|
152
|
+
available: total,
|
|
153
|
+
pending: 0,
|
|
154
|
+
totalDisplay: String(total),
|
|
155
|
+
availableDisplay: String(total),
|
|
156
|
+
},
|
|
157
|
+
capabilities: {
|
|
158
|
+
canSend: true,
|
|
159
|
+
canReceive: true,
|
|
160
|
+
canSwap: false,
|
|
161
|
+
supportsLightning: true,
|
|
162
|
+
supportsOnchain: true,
|
|
163
|
+
},
|
|
164
|
+
};
|
|
165
|
+
const out = [btc];
|
|
166
|
+
// Spark tokens. The WDK account wraps a SparkWallet whose `getBalance()`
|
|
167
|
+
// returns `{ satsBalance, tokenBalances }`, where tokenBalances is a
|
|
168
|
+
// Map<bech32m identifier, { balance, tokenMetadata|tokenInfo }>. Token
|
|
169
|
+
// enumeration is best-effort: never let it break the BTC listing.
|
|
170
|
+
try {
|
|
171
|
+
const wallet = this.account?._wallet;
|
|
172
|
+
const full = wallet?.getBalance ? await wallet.getBalance() : null;
|
|
173
|
+
const tokenBalances = full?.tokenBalances;
|
|
174
|
+
if (tokenBalances && typeof tokenBalances.forEach === 'function') {
|
|
175
|
+
// TokenBalanceMap value = { ownedBalance, availableToSendBalance, tokenMetadata }
|
|
176
|
+
// (UserTokenMetadata: tokenName/tokenTicker/decimals). There is NO `balance`
|
|
177
|
+
// field — reading it returned 0. The Map key is the bech32m token identifier.
|
|
178
|
+
tokenBalances.forEach((entry, key) => {
|
|
179
|
+
const meta = entry?.tokenMetadata ?? entry?.tokenInfo ?? {};
|
|
180
|
+
const id = String(key);
|
|
181
|
+
if (!id)
|
|
182
|
+
return;
|
|
183
|
+
const owned = Number(entry?.ownedBalance ?? entry?.balance ?? 0);
|
|
184
|
+
const available = Number(entry?.availableToSendBalance ?? entry?.ownedBalance ?? 0);
|
|
185
|
+
const decimals = Number(meta.decimals ?? meta.tokenDecimals ?? 0);
|
|
186
|
+
const ticker = meta.tokenTicker ?? meta.tokenSymbol ?? meta.symbol ?? id.slice(0, 6);
|
|
187
|
+
out.push({
|
|
188
|
+
id,
|
|
189
|
+
name: meta.tokenName ?? meta.name ?? ticker,
|
|
190
|
+
ticker,
|
|
191
|
+
precision: decimals,
|
|
192
|
+
protocol: 'SPARK',
|
|
193
|
+
layer: 'SPARK_SPARK',
|
|
194
|
+
balance: {
|
|
195
|
+
total: owned,
|
|
196
|
+
available,
|
|
197
|
+
pending: 0,
|
|
198
|
+
totalDisplay: String(owned),
|
|
199
|
+
availableDisplay: String(available),
|
|
200
|
+
},
|
|
201
|
+
capabilities: {
|
|
202
|
+
canSend: true,
|
|
203
|
+
canReceive: true,
|
|
204
|
+
canSwap: true,
|
|
205
|
+
supportsLightning: false,
|
|
206
|
+
supportsOnchain: false,
|
|
207
|
+
},
|
|
208
|
+
});
|
|
209
|
+
});
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
// tokens are best-effort — keep BTC even if the token map is unavailable
|
|
214
|
+
}
|
|
215
|
+
return out;
|
|
216
|
+
}
|
|
217
|
+
async getAssetBalance(assetId) {
|
|
218
|
+
const assets = await this.listAssets();
|
|
219
|
+
const found = assets.find((a) => a.id === assetId);
|
|
220
|
+
if (!found)
|
|
221
|
+
throw new ProtocolError(`Unknown asset ${assetId}`, 'SPARK', 'NO_ASSET');
|
|
222
|
+
return found.balance;
|
|
223
|
+
}
|
|
224
|
+
async getAsset(assetId) {
|
|
225
|
+
const assets = await this.listAssets();
|
|
226
|
+
const found = assets.find((a) => a.id === assetId);
|
|
227
|
+
if (!found)
|
|
228
|
+
throw new ProtocolError(`Unknown asset ${assetId}`, 'SPARK', 'NO_ASSET');
|
|
229
|
+
return found;
|
|
230
|
+
}
|
|
231
|
+
// --- Invoices / receive amounts ----------------------------------------
|
|
232
|
+
async createInvoice(request) {
|
|
233
|
+
this.assertConnected();
|
|
234
|
+
const expiresAt = Date.now() + (request.expirySeconds ?? 3600) * 1000;
|
|
235
|
+
// 1) Lightning receive (BOLT11) — when the caller targets the LN layer.
|
|
236
|
+
if (request.layer === 'BTC_LN') {
|
|
237
|
+
// WDK createLightningInvoice({ amountSats, memo, expirySeconds }): LightningReceiveRequest
|
|
238
|
+
const r = await this.account.createLightningInvoice({
|
|
239
|
+
amountSats: request.amount ?? 0,
|
|
240
|
+
memo: request.description,
|
|
241
|
+
expirySeconds: request.expirySeconds,
|
|
242
|
+
});
|
|
243
|
+
const encoded = r?.invoice?.encodedInvoice ?? r?.encodedInvoice ?? r?.invoice ?? '';
|
|
244
|
+
return {
|
|
245
|
+
invoice: encoded,
|
|
246
|
+
paymentHash: r?.invoice?.paymentHash ?? r?.id ?? '',
|
|
247
|
+
amount: request.amount,
|
|
248
|
+
expiresAt,
|
|
249
|
+
description: request.description,
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
// 2) Spark token invoice — returns a SparkAddressFormat string.
|
|
253
|
+
if (request.asset && request.asset !== 'BTC') {
|
|
254
|
+
const invoice = await this.account.createSparkTokensInvoice({
|
|
255
|
+
tokenIdentifier: request.asset,
|
|
256
|
+
amount: request.assetAmount != null ? BigInt(request.assetAmount) : undefined,
|
|
257
|
+
memo: request.description,
|
|
258
|
+
});
|
|
259
|
+
return { invoice, paymentHash: '', amount: request.assetAmount, expiresAt, description: request.description };
|
|
260
|
+
}
|
|
261
|
+
// 3) Default: native Spark sats invoice — returns a SparkAddressFormat string.
|
|
262
|
+
const invoice = await this.account.createSparkSatsInvoice({
|
|
263
|
+
amount: request.amount,
|
|
264
|
+
memo: request.description,
|
|
265
|
+
});
|
|
266
|
+
return { invoice, paymentHash: '', amount: request.amount, expiresAt, description: request.description };
|
|
267
|
+
}
|
|
268
|
+
// --- Send ---------------------------------------------------------------
|
|
269
|
+
async sendPayment(request) {
|
|
270
|
+
this.assertConnected();
|
|
271
|
+
const dest = request.invoice.trim();
|
|
272
|
+
const isBolt11 = /^ln(bc|tb|bcrt)/i.test(dest);
|
|
273
|
+
const timestamp = Date.now();
|
|
274
|
+
// 1) Lightning send — WDK requires a maxFeeSats cap.
|
|
275
|
+
if (isBolt11) {
|
|
276
|
+
const r = await this.account.payLightningInvoice({
|
|
277
|
+
invoice: dest,
|
|
278
|
+
maxFeeSats: request.maxFeeSats ?? this.defaultMaxFeeSats(request.amount),
|
|
279
|
+
// Required by the underlying Spark SDK for 0-amount (amountless) invoices;
|
|
280
|
+
// for invoices that already carry an amount this must be omitted. The WDK
|
|
281
|
+
// module forwards these options verbatim to spark-sdk's payLightningInvoice.
|
|
282
|
+
...(request.amount && request.amount > 0 ? { amountSatsToSend: request.amount } : {}),
|
|
283
|
+
});
|
|
284
|
+
return {
|
|
285
|
+
paymentHash: r?.paymentHash ?? r?.id ?? '',
|
|
286
|
+
preimage: r?.preimage,
|
|
287
|
+
amount: Number(r?.amountSats ?? request.amount ?? 0),
|
|
288
|
+
fee: Number(r?.feeSats ?? 0),
|
|
289
|
+
status: 'confirmed',
|
|
290
|
+
timestamp,
|
|
291
|
+
};
|
|
292
|
+
}
|
|
293
|
+
// 2) Plain Spark address + explicit amount → direct transfer (zero-fee).
|
|
294
|
+
if (request.amount != null) {
|
|
295
|
+
const r = await this.account.sendTransaction({ to: dest, value: request.amount });
|
|
296
|
+
return {
|
|
297
|
+
paymentHash: r?.id ?? r?.transferId ?? '',
|
|
298
|
+
amount: request.amount,
|
|
299
|
+
fee: 0, // Spark transfers are zero-fee (capability flag)
|
|
300
|
+
status: 'confirmed',
|
|
301
|
+
timestamp,
|
|
302
|
+
};
|
|
303
|
+
}
|
|
304
|
+
// 3) Encoded Spark invoice (amount embedded) → fulfill. Takes an ARRAY.
|
|
305
|
+
const res = await this.account.paySparkInvoice([{ invoice: dest }]);
|
|
306
|
+
const ok = res?.satsTransactionSuccess?.[0];
|
|
307
|
+
return {
|
|
308
|
+
paymentHash: ok?.transferResponse?.id ?? '',
|
|
309
|
+
amount: Number(request.amount ?? 0),
|
|
310
|
+
fee: 0,
|
|
311
|
+
status: ok ? 'confirmed' : 'failed',
|
|
312
|
+
timestamp,
|
|
313
|
+
};
|
|
314
|
+
}
|
|
315
|
+
/** Conservative default LN fee cap: 0.5% of amount, min 5 sats. */
|
|
316
|
+
defaultMaxFeeSats(amount) {
|
|
317
|
+
if (!amount || amount <= 0)
|
|
318
|
+
return 10;
|
|
319
|
+
return Math.max(5, Math.ceil(amount * 0.005));
|
|
320
|
+
}
|
|
321
|
+
// --- Transactions -------------------------------------------------------
|
|
322
|
+
async decodeInvoice(invoice) {
|
|
323
|
+
const dest = invoice.trim();
|
|
324
|
+
if (isBolt11(dest)) {
|
|
325
|
+
const { amountSat } = decodeBolt11(dest);
|
|
326
|
+
return { paymentHash: '', amount: amountSat, expiresAt: 0, destination: dest };
|
|
327
|
+
}
|
|
328
|
+
// Spark invoice/address — no on-device decode; surface the raw value.
|
|
329
|
+
return { paymentHash: '', expiresAt: 0, destination: dest };
|
|
330
|
+
}
|
|
331
|
+
async getPaymentStatus(paymentHash) {
|
|
332
|
+
this.assertConnected();
|
|
333
|
+
const t = await this.account.getTransactionReceipt(paymentHash).catch(() => null);
|
|
334
|
+
return { paymentHash, status: mapSparkStatus(t?.status), amount: t ? Number(t.totalValue ?? 0) : undefined };
|
|
335
|
+
}
|
|
336
|
+
async listTransactions(filter) {
|
|
337
|
+
this.assertConnected();
|
|
338
|
+
const transfers = await this.account.getTransfers({ limit: filter?.limit ?? 50, skip: filter?.offset ?? 0 });
|
|
339
|
+
return (transfers ?? []).map((t) => this.toUnifiedTx(t));
|
|
340
|
+
}
|
|
341
|
+
async getTransaction(txId) {
|
|
342
|
+
this.assertConnected();
|
|
343
|
+
const t = await this.account.getTransactionReceipt(txId);
|
|
344
|
+
if (!t)
|
|
345
|
+
throw new ProtocolError(`Unknown tx ${txId}`, 'SPARK', 'NO_TX');
|
|
346
|
+
return this.toUnifiedTx(t);
|
|
347
|
+
}
|
|
348
|
+
async getNodeInfo() {
|
|
349
|
+
return { protocol: 'SPARK', network: this.network };
|
|
350
|
+
}
|
|
351
|
+
async listChannels() {
|
|
352
|
+
return []; // Spark has no LN channels
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Escape hatch: the underlying spark-sdk SparkWallet, for integrations that need the
|
|
356
|
+
* raw client (e.g. the flashnet Spark-DEX, which piggybacks on a SparkWallet). Returns
|
|
357
|
+
* the same instance this adapter uses (no duplicate wallet). Null if not connected.
|
|
358
|
+
*/
|
|
359
|
+
getUnderlyingSparkWallet() {
|
|
360
|
+
return this.account?._wallet ?? null;
|
|
361
|
+
}
|
|
362
|
+
async listPayments() {
|
|
363
|
+
// Outgoing transfers only.
|
|
364
|
+
const txs = await this.listTransactions();
|
|
365
|
+
return txs.filter((t) => t.type === 'send');
|
|
366
|
+
}
|
|
367
|
+
async listTransfers() {
|
|
368
|
+
this.assertConnected();
|
|
369
|
+
return this.account.getTransfers({ limit: 100 });
|
|
370
|
+
}
|
|
371
|
+
supportsSwaps() {
|
|
372
|
+
return getCapabilities('SPARK').supportsSwaps;
|
|
373
|
+
}
|
|
374
|
+
/** Map a spark-sdk Transfer (proto) → domain UnifiedTransaction (fields read defensively). */
|
|
375
|
+
toUnifiedTx(t) {
|
|
376
|
+
// The spark-sdk Transfer proto has no direction flag — direction is whether
|
|
377
|
+
// *we* are the receiver. Compare our cached identity pubkey against the
|
|
378
|
+
// transfer's receiver/sender identity keys. Fall back to the (legacy, usually
|
|
379
|
+
// absent) direction fields only when the identity key is unknown.
|
|
380
|
+
const me = this.identityPubKeyHex;
|
|
381
|
+
const receiverHex = toHexLower(t?.receiverIdentityPublicKey);
|
|
382
|
+
const senderHex = toHexLower(t?.senderIdentityPublicKey);
|
|
383
|
+
let isReceive;
|
|
384
|
+
if (me && (receiverHex || senderHex)) {
|
|
385
|
+
isReceive = receiverHex === me && senderHex !== me;
|
|
386
|
+
}
|
|
387
|
+
else {
|
|
388
|
+
const dir = String(t?.transferDirection ?? t?.direction ?? '').toUpperCase();
|
|
389
|
+
isReceive = dir.includes('INCOMING') || dir.includes('RECEIV');
|
|
390
|
+
}
|
|
391
|
+
const tsRaw = t?.createdTime ?? t?.updatedTime ?? t?.createdAt;
|
|
392
|
+
const timestamp = typeof tsRaw === 'number'
|
|
393
|
+
? tsRaw
|
|
394
|
+
: tsRaw?.seconds
|
|
395
|
+
? Number(tsRaw.seconds) * 1000
|
|
396
|
+
: tsRaw
|
|
397
|
+
? new Date(tsRaw).getTime()
|
|
398
|
+
: 0;
|
|
399
|
+
return {
|
|
400
|
+
id: t?.id ?? t?.sparkId ?? '',
|
|
401
|
+
type: isReceive ? 'receive' : 'send',
|
|
402
|
+
status: isDirectSparkTransfer(t) ? 'confirmed' : mapSparkStatus(t?.status),
|
|
403
|
+
timestamp,
|
|
404
|
+
amount: Number(t?.totalValue ?? t?.value ?? 0),
|
|
405
|
+
amountDisplay: '',
|
|
406
|
+
asset: undefined,
|
|
407
|
+
protocolData: t,
|
|
408
|
+
};
|
|
409
|
+
}
|
|
410
|
+
// --- helpers ------------------------------------------------------------
|
|
411
|
+
assertConnected() {
|
|
412
|
+
if (!this.connected || !this.account) {
|
|
413
|
+
throw new ProtocolError('SparkWdkAdapter not connected', 'SPARK', 'NOT_CONNECTED');
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
}
|
|
417
|
+
//# sourceMappingURL=SparkWdkAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SparkWdkAdapter.js","sourceRoot":"","sources":["../../../src/adapters/wdk/SparkWdkAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WDK-backed adapters + the WDK registry factory + module loader seam.
|
|
3
|
+
*
|
|
4
|
+
* Opt-in sub-path export: `@kaleidorg/wallet-engine/adapters/wdk`. WDK
|
|
5
|
+
* modules are lazy-loaded via `loadWdkModule`, but these adapters are still
|
|
6
|
+
* kept out of the main barrel so hosts that supply their own adapters never
|
|
7
|
+
* reference them.
|
|
8
|
+
*/
|
|
9
|
+
export { SparkWdkAdapter, type SparkAdapterConfig } from './SparkWdkAdapter.js';
|
|
10
|
+
export { LiquidWdkAdapter, type LiquidAdapterConfig, LIQUID_USDT_ASSET_ID } from './LiquidWdkAdapter.js';
|
|
11
|
+
export { RlnWdkAdapter, type RlnAdapterConfig } from './RlnWdkAdapter.js';
|
|
12
|
+
export { ArkadeWdkAdapter, type ArkadeAdapterConfig } from './ArkadeWdkAdapter.js';
|
|
13
|
+
export { createWdkRegistry, type WdkRegistryOptions } from '../../registry/createWdkRegistry.js';
|
|
14
|
+
export { registerWdkModule, hasWdkModule, type WdkModuleLoader } from './moduleLoader.js';
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/adapters/wdk/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,eAAe,EAAE,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAC5E,OAAO,EAAE,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACrG,OAAO,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AACtE,OAAO,EAAE,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAC/E,OAAO,EAAE,iBAAiB,EAAE,KAAK,kBAAkB,EAAE,MAAM,kCAAkC,CAAA;AAC7F,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WDK-backed adapters + the WDK registry factory + module loader seam.
|
|
3
|
+
*
|
|
4
|
+
* Opt-in sub-path export: `@kaleidorg/wallet-engine/adapters/wdk`. WDK
|
|
5
|
+
* modules are lazy-loaded via `loadWdkModule`, but these adapters are still
|
|
6
|
+
* kept out of the main barrel so hosts that supply their own adapters never
|
|
7
|
+
* reference them.
|
|
8
|
+
*/
|
|
9
|
+
export { SparkWdkAdapter } from './SparkWdkAdapter.js';
|
|
10
|
+
export { LiquidWdkAdapter, LIQUID_USDT_ASSET_ID } from './LiquidWdkAdapter.js';
|
|
11
|
+
export { RlnWdkAdapter } from './RlnWdkAdapter.js';
|
|
12
|
+
export { ArkadeWdkAdapter } from './ArkadeWdkAdapter.js';
|
|
13
|
+
export { createWdkRegistry } from '../../registry/createWdkRegistry.js';
|
|
14
|
+
export { registerWdkModule, hasWdkModule } from './moduleLoader.js';
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/adapters/wdk/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EAAE,eAAe,EAA2B,MAAM,mBAAmB,CAAA;AAC5E,OAAO,EAAE,gBAAgB,EAA4B,oBAAoB,EAAE,MAAM,oBAAoB,CAAA;AACrG,OAAO,EAAE,aAAa,EAAyB,MAAM,iBAAiB,CAAA;AACtE,OAAO,EAAE,gBAAgB,EAA4B,MAAM,oBAAoB,CAAA;AAC/E,OAAO,EAAE,iBAAiB,EAA2B,MAAM,kCAAkC,CAAA;AAC7F,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAwB,MAAM,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WDK Module Loader (platform-injectable)
|
|
3
|
+
* ---------------------------------------
|
|
4
|
+
* WDK modules are heavy native/WASM packages. How they're loaded differs per host:
|
|
5
|
+
* - Node / Vite (extension): dynamic `import()` works fine.
|
|
6
|
+
* - React Native / Metro: dynamic import of node_modules packages is unreliable;
|
|
7
|
+
* the app injects a STATIC `require()` instead (mirrors rate's existing
|
|
8
|
+
* `setSdkFactory` pattern for the native SDKs).
|
|
9
|
+
*
|
|
10
|
+
* Adapters call `loadWdkModule(pkgName, () => import(pkgName))`. If the host has
|
|
11
|
+
* registered a loader for that package, it's used; otherwise the inline dynamic
|
|
12
|
+
* import fallback runs. The fallback's import specifier is a string literal so
|
|
13
|
+
* bundlers can still analyze it.
|
|
14
|
+
*/
|
|
15
|
+
export type WdkModuleLoader = () => any | Promise<any>;
|
|
16
|
+
/** Host registers how to load a WDK package (e.g. `() => require('@tetherto/wdk-wallet-spark')`). */
|
|
17
|
+
export declare function registerWdkModule(pkgName: string, loader: WdkModuleLoader): void;
|
|
18
|
+
/** True if the host injected a loader for this package. */
|
|
19
|
+
export declare function hasWdkModule(pkgName: string): boolean;
|
|
20
|
+
/** Resolve a WDK module via the injected loader, falling back to the inline dynamic import. */
|
|
21
|
+
export declare function loadWdkModule(pkgName: string, fallback: () => Promise<any>): Promise<any>;
|
|
22
|
+
//# sourceMappingURL=moduleLoader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moduleLoader.d.ts","sourceRoot":"","sources":["../../../src/adapters/wdk/moduleLoader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA;AAItD,qGAAqG;AACrG,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,IAAI,CAEhF;AAED,2DAA2D;AAC3D,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAErD;AAED,+FAA+F;AAC/F,wBAAsB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAI/F"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WDK Module Loader (platform-injectable)
|
|
3
|
+
* ---------------------------------------
|
|
4
|
+
* WDK modules are heavy native/WASM packages. How they're loaded differs per host:
|
|
5
|
+
* - Node / Vite (extension): dynamic `import()` works fine.
|
|
6
|
+
* - React Native / Metro: dynamic import of node_modules packages is unreliable;
|
|
7
|
+
* the app injects a STATIC `require()` instead (mirrors rate's existing
|
|
8
|
+
* `setSdkFactory` pattern for the native SDKs).
|
|
9
|
+
*
|
|
10
|
+
* Adapters call `loadWdkModule(pkgName, () => import(pkgName))`. If the host has
|
|
11
|
+
* registered a loader for that package, it's used; otherwise the inline dynamic
|
|
12
|
+
* import fallback runs. The fallback's import specifier is a string literal so
|
|
13
|
+
* bundlers can still analyze it.
|
|
14
|
+
*/
|
|
15
|
+
const registry = new Map();
|
|
16
|
+
/** Host registers how to load a WDK package (e.g. `() => require('@tetherto/wdk-wallet-spark')`). */
|
|
17
|
+
export function registerWdkModule(pkgName, loader) {
|
|
18
|
+
registry.set(pkgName, loader);
|
|
19
|
+
}
|
|
20
|
+
/** True if the host injected a loader for this package. */
|
|
21
|
+
export function hasWdkModule(pkgName) {
|
|
22
|
+
return registry.has(pkgName);
|
|
23
|
+
}
|
|
24
|
+
/** Resolve a WDK module via the injected loader, falling back to the inline dynamic import. */
|
|
25
|
+
export async function loadWdkModule(pkgName, fallback) {
|
|
26
|
+
const loader = registry.get(pkgName);
|
|
27
|
+
if (loader)
|
|
28
|
+
return await loader();
|
|
29
|
+
return await fallback();
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=moduleLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"moduleLoader.js","sourceRoot":"","sources":["../../../src/adapters/wdk/moduleLoader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA2B,CAAA;AAEnD,qGAAqG;AACrG,MAAM,UAAU,iBAAiB,CAAC,OAAe,EAAE,MAAuB;IACxE,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;AAC/B,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,OAAO,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AAC9B,CAAC;AAED,+FAA+F;AAC/F,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAe,EAAE,QAA4B;IAC/E,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACpC,IAAI,MAAM;QAAE,OAAO,MAAM,MAAM,EAAE,CAAA;IACjC,OAAO,MAAM,QAAQ,EAAE,CAAA;AACzB,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Protocol Capability Manifest
|
|
3
|
+
* ----------------------------
|
|
4
|
+
* The backbone of the plugin architecture: protocol *differences* are expressed
|
|
5
|
+
* here as DATA, never as new methods on `IProtocolAdapter`. The cross-protocol
|
|
6
|
+
* router and the lite/advanced UI read this manifest to decide behaviour, so
|
|
7
|
+
* adding or changing one protocol never edits another protocol's code.
|
|
8
|
+
*
|
|
9
|
+
* Rule: when you're tempted to add a method to the contract for a single
|
|
10
|
+
* protocol, add a capability flag here instead.
|
|
11
|
+
*/
|
|
12
|
+
import { ProtocolType, Layer } from '../types/base.js';
|
|
13
|
+
export interface ProtocolCapabilities {
|
|
14
|
+
protocol: ProtocolType;
|
|
15
|
+
/** Layers this protocol can move value on. */
|
|
16
|
+
layers: Layer[];
|
|
17
|
+
supportsOnchain: boolean;
|
|
18
|
+
supportsLightning: boolean;
|
|
19
|
+
/** Can hold/transfer non-BTC assets (RGB assets, Liquid assets, Spark tokens). */
|
|
20
|
+
supportsAssets: boolean;
|
|
21
|
+
/** Native swap capability exposed by the protocol/module. */
|
|
22
|
+
supportsSwaps: boolean;
|
|
23
|
+
/** Spark: transfers are zero-fee. */
|
|
24
|
+
zeroFee: boolean;
|
|
25
|
+
/** Receive address is static/reusable for the wallet (Spark static, Arkade). */
|
|
26
|
+
staticReceiveAddress: boolean;
|
|
27
|
+
/** Arkade: on-chain "boarding" address to fund the off-chain account. */
|
|
28
|
+
boarding: boolean;
|
|
29
|
+
/** Invoices expire (LN / Spark / Liquid-Lightning) → needs a refresh story. */
|
|
30
|
+
invoiceExpiry: boolean;
|
|
31
|
+
/** Needs a Lightning channel / inbound liquidity before it can receive over LN. */
|
|
32
|
+
needsChannelLiquidity: boolean;
|
|
33
|
+
/** The backing WDK package, or null if still on a native SDK / not yet wired. */
|
|
34
|
+
wdkModule: string | null;
|
|
35
|
+
/** Maturity of the backing module — drives whether native fallback stays on. */
|
|
36
|
+
maturity: 'beta' | 'stable';
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Single source of truth for what each protocol can do.
|
|
40
|
+
* Keyed by ProtocolType. 'BTC' is the abstract on-chain-only base.
|
|
41
|
+
*/
|
|
42
|
+
export declare const PROTOCOL_CAPABILITIES: Record<ProtocolType, ProtocolCapabilities>;
|
|
43
|
+
export declare function getCapabilities(protocol: ProtocolType): ProtocolCapabilities;
|
|
44
|
+
/** Protocols that can settle a given layer — used by the cross-protocol router. */
|
|
45
|
+
export declare function protocolsForLayer(layer: Layer): ProtocolType[];
|
|
46
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/capabilities/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAEnD,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,YAAY,CAAA;IACtB,8CAA8C;IAC9C,MAAM,EAAE,KAAK,EAAE,CAAA;IAGf,eAAe,EAAE,OAAO,CAAA;IACxB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,kFAAkF;IAClF,cAAc,EAAE,OAAO,CAAA;IACvB,6DAA6D;IAC7D,aAAa,EAAE,OAAO,CAAA;IAGtB,qCAAqC;IACrC,OAAO,EAAE,OAAO,CAAA;IAChB,gFAAgF;IAChF,oBAAoB,EAAE,OAAO,CAAA;IAC7B,yEAAyE;IACzE,QAAQ,EAAE,OAAO,CAAA;IACjB,+EAA+E;IAC/E,aAAa,EAAE,OAAO,CAAA;IACtB,mFAAmF;IACnF,qBAAqB,EAAE,OAAO,CAAA;IAG9B,iFAAiF;IACjF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,gFAAgF;IAChF,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAAA;CAC5B;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,YAAY,EAAE,oBAAoB,CA4E5E,CAAA;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,YAAY,GAAG,oBAAoB,CAE5E;AAED,mFAAmF;AACnF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,YAAY,EAAE,CAI9D"}
|