@kaleidorg/wallet-protocols 1.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/dist/adapters/ArkadeAdapter.d.ts +48 -0
  2. package/dist/adapters/ArkadeAdapter.d.ts.map +1 -0
  3. package/dist/adapters/ArkadeAdapter.js +314 -0
  4. package/dist/adapters/ArkadeAdapter.js.map +1 -0
  5. package/dist/adapters/IProtocolAdapter.d.ts +71 -0
  6. package/dist/adapters/IProtocolAdapter.d.ts.map +1 -0
  7. package/dist/adapters/IProtocolAdapter.js +29 -0
  8. package/dist/adapters/IProtocolAdapter.js.map +1 -0
  9. package/dist/adapters/RgbAdapter.d.ts +70 -0
  10. package/dist/adapters/RgbAdapter.d.ts.map +1 -0
  11. package/dist/adapters/RgbAdapter.js +818 -0
  12. package/dist/adapters/RgbAdapter.js.map +1 -0
  13. package/dist/adapters/SparkAdapter.d.ts +47 -0
  14. package/dist/adapters/SparkAdapter.d.ts.map +1 -0
  15. package/dist/adapters/SparkAdapter.js +390 -0
  16. package/dist/adapters/SparkAdapter.js.map +1 -0
  17. package/dist/adapters/wdk/ArkadeWdkAdapter.d.ts +78 -0
  18. package/dist/adapters/wdk/ArkadeWdkAdapter.d.ts.map +1 -0
  19. package/dist/adapters/wdk/ArkadeWdkAdapter.js +226 -0
  20. package/dist/adapters/wdk/ArkadeWdkAdapter.js.map +1 -0
  21. package/dist/adapters/wdk/LiquidWdkAdapter.d.ts +88 -0
  22. package/dist/adapters/wdk/LiquidWdkAdapter.d.ts.map +1 -0
  23. package/dist/adapters/wdk/LiquidWdkAdapter.js +272 -0
  24. package/dist/adapters/wdk/LiquidWdkAdapter.js.map +1 -0
  25. package/dist/adapters/wdk/RlnWdkAdapter.d.ts +85 -0
  26. package/dist/adapters/wdk/RlnWdkAdapter.d.ts.map +1 -0
  27. package/dist/adapters/wdk/RlnWdkAdapter.js +308 -0
  28. package/dist/adapters/wdk/RlnWdkAdapter.js.map +1 -0
  29. package/dist/adapters/wdk/SparkWdkAdapter.d.ts +79 -0
  30. package/dist/adapters/wdk/SparkWdkAdapter.d.ts.map +1 -0
  31. package/dist/adapters/wdk/SparkWdkAdapter.js +317 -0
  32. package/dist/adapters/wdk/SparkWdkAdapter.js.map +1 -0
  33. package/dist/adapters/wdk/moduleLoader.d.ts +22 -0
  34. package/dist/adapters/wdk/moduleLoader.d.ts.map +1 -0
  35. package/dist/adapters/wdk/moduleLoader.js +31 -0
  36. package/dist/adapters/wdk/moduleLoader.js.map +1 -0
  37. package/dist/capabilities/index.d.ts +46 -0
  38. package/dist/capabilities/index.d.ts.map +1 -0
  39. package/dist/capabilities/index.js +102 -0
  40. package/dist/capabilities/index.js.map +1 -0
  41. package/dist/disclosure/index.d.ts +51 -0
  42. package/dist/disclosure/index.d.ts.map +1 -0
  43. package/dist/disclosure/index.js +64 -0
  44. package/dist/disclosure/index.js.map +1 -0
  45. package/dist/index.d.ts +34 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +43 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/lib/arkade-client-manager.d.ts +47 -0
  50. package/dist/lib/arkade-client-manager.d.ts.map +1 -0
  51. package/dist/lib/arkade-client-manager.js +121 -0
  52. package/dist/lib/arkade-client-manager.js.map +1 -0
  53. package/dist/lib/bolt11.d.ts +18 -0
  54. package/dist/lib/bolt11.d.ts.map +1 -0
  55. package/dist/lib/bolt11.js +31 -0
  56. package/dist/lib/bolt11.js.map +1 -0
  57. package/dist/lib/flashnet-client-manager.d.ts +29 -0
  58. package/dist/lib/flashnet-client-manager.d.ts.map +1 -0
  59. package/dist/lib/flashnet-client-manager.js +116 -0
  60. package/dist/lib/flashnet-client-manager.js.map +1 -0
  61. package/dist/lib/kaleido-client-manager.d.ts +26 -0
  62. package/dist/lib/kaleido-client-manager.d.ts.map +1 -0
  63. package/dist/lib/kaleido-client-manager.js +55 -0
  64. package/dist/lib/kaleido-client-manager.js.map +1 -0
  65. package/dist/lib/spark-client-manager.d.ts +41 -0
  66. package/dist/lib/spark-client-manager.d.ts.map +1 -0
  67. package/dist/lib/spark-client-manager.js +101 -0
  68. package/dist/lib/spark-client-manager.js.map +1 -0
  69. package/dist/manager/ProtocolManager.d.ts +57 -0
  70. package/dist/manager/ProtocolManager.d.ts.map +1 -0
  71. package/dist/manager/ProtocolManager.js +228 -0
  72. package/dist/manager/ProtocolManager.js.map +1 -0
  73. package/dist/ports/index.d.ts +29 -0
  74. package/dist/ports/index.d.ts.map +1 -0
  75. package/dist/ports/index.js +9 -0
  76. package/dist/ports/index.js.map +1 -0
  77. package/dist/receive/unifiedReceive.d.ts +54 -0
  78. package/dist/receive/unifiedReceive.d.ts.map +1 -0
  79. package/dist/receive/unifiedReceive.js +102 -0
  80. package/dist/receive/unifiedReceive.js.map +1 -0
  81. package/dist/registry/createWdkRegistry.d.ts +20 -0
  82. package/dist/registry/createWdkRegistry.d.ts.map +1 -0
  83. package/dist/registry/createWdkRegistry.js +32 -0
  84. package/dist/registry/createWdkRegistry.js.map +1 -0
  85. package/dist/router/destination.d.ts +28 -0
  86. package/dist/router/destination.d.ts.map +1 -0
  87. package/dist/router/destination.js +72 -0
  88. package/dist/router/destination.js.map +1 -0
  89. package/dist/router/index.d.ts +55 -0
  90. package/dist/router/index.d.ts.map +1 -0
  91. package/dist/router/index.js +67 -0
  92. package/dist/router/index.js.map +1 -0
  93. package/dist/swap/KaleidoswapSwap.d.ts +44 -0
  94. package/dist/swap/KaleidoswapSwap.d.ts.map +1 -0
  95. package/dist/swap/KaleidoswapSwap.js +123 -0
  96. package/dist/swap/KaleidoswapSwap.js.map +1 -0
  97. package/dist/types/arkade.d.ts +40 -0
  98. package/dist/types/arkade.d.ts.map +1 -0
  99. package/dist/types/arkade.js +6 -0
  100. package/dist/types/arkade.js.map +1 -0
  101. package/dist/types/base.d.ts +197 -0
  102. package/dist/types/base.d.ts.map +1 -0
  103. package/dist/types/base.js +27 -0
  104. package/dist/types/base.js.map +1 -0
  105. package/dist/types/cross-l2.d.ts +158 -0
  106. package/dist/types/cross-l2.d.ts.map +1 -0
  107. package/dist/types/cross-l2.js +16 -0
  108. package/dist/types/cross-l2.js.map +1 -0
  109. package/dist/types/flashnet.d.ts +31 -0
  110. package/dist/types/flashnet.d.ts.map +1 -0
  111. package/dist/types/flashnet.js +23 -0
  112. package/dist/types/flashnet.js.map +1 -0
  113. package/dist/types/rgb.d.ts +91 -0
  114. package/dist/types/rgb.d.ts.map +1 -0
  115. package/dist/types/rgb.js +6 -0
  116. package/dist/types/rgb.js.map +1 -0
  117. package/dist/types/spark.d.ts +59 -0
  118. package/dist/types/spark.d.ts.map +1 -0
  119. package/dist/types/spark.js +6 -0
  120. package/dist/types/spark.js.map +1 -0
  121. package/dist/utils.d.ts +10 -0
  122. package/dist/utils.d.ts.map +1 -0
  123. package/dist/utils.js +23 -0
  124. package/dist/utils.js.map +1 -0
  125. package/package.json +35 -0
@@ -0,0 +1,317 @@
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';
26
+ import { getCapabilities } from '../../capabilities';
27
+ import { loadWdkModule } from './moduleLoader';
28
+ import { decodeBolt11, isBolt11 } from '../../lib/bolt11';
29
+ /** Map a spark-sdk Transfer proto status → domain TransactionStatus. */
30
+ function mapSparkStatus(s) {
31
+ const v = String(s ?? '').toUpperCase();
32
+ if (v.includes('COMPLET'))
33
+ return 'confirmed';
34
+ if (v.includes('FAIL') || v.includes('EXPIRED') || v.includes('RETURN'))
35
+ return 'failed';
36
+ return 'pending';
37
+ }
38
+ const SPARK_NETWORK_MAP = {
39
+ mainnet: 'MAINNET',
40
+ testnet: 'TESTNET',
41
+ regtest: 'REGTEST',
42
+ signet: 'SIGNET', // Spark supports SIGNET natively
43
+ };
44
+ export class SparkWdkAdapter {
45
+ constructor() {
46
+ this.protocolName = 'SPARK';
47
+ this.supportedLayers = getCapabilities('SPARK').layers;
48
+ this.version = '0.1.0-wdk';
49
+ this.manager = null;
50
+ this.account = null;
51
+ this.connected = false;
52
+ this.network = 'mainnet';
53
+ }
54
+ // --- Connection ---------------------------------------------------------
55
+ async connect(config) {
56
+ const cfg = config;
57
+ if (!cfg.mnemonic) {
58
+ throw new ProtocolError('SparkWdkAdapter requires a mnemonic', 'SPARK', 'CONFIG');
59
+ }
60
+ this.network = cfg.network ?? 'mainnet';
61
+ // Injectable loader (RN injects a static require; Node/Vite use the import fallback).
62
+ // @ts-ignore — declared as a workspace/optional dep; resolved at runtime.
63
+ const mod = await loadWdkModule('@tetherto/wdk-wallet-spark', () => import('@tetherto/wdk-wallet-spark'));
64
+ const WalletManagerSpark = mod.default ?? mod;
65
+ this.manager = new WalletManagerSpark(cfg.mnemonic, {
66
+ network: SPARK_NETWORK_MAP[this.network] ?? 'MAINNET',
67
+ });
68
+ this.account = await this.manager.getAccount(cfg.accountIndex ?? 0);
69
+ this.connected = true;
70
+ }
71
+ async disconnect() {
72
+ try {
73
+ await this.account?.dispose?.();
74
+ await this.account?.cleanupConnections?.();
75
+ }
76
+ finally {
77
+ this.account = null;
78
+ this.manager = null;
79
+ this.connected = false;
80
+ }
81
+ }
82
+ isConnected() {
83
+ return this.connected;
84
+ }
85
+ async getConnectionInfo() {
86
+ return { protocol: 'SPARK', connected: this.connected, network: this.network };
87
+ }
88
+ // --- Address / receive --------------------------------------------------
89
+ async getReceiveAddress() {
90
+ this.assertConnected();
91
+ const address = await this.account.getAddress();
92
+ return { address, format: 'SPARK_ADDRESS' };
93
+ }
94
+ // --- Balance ------------------------------------------------------------
95
+ async getBtcBalance() {
96
+ this.assertConnected();
97
+ // WDK: getBalance(): Promise<bigint> — sats, settled balance.
98
+ const bal = await this.account.getBalance();
99
+ const total = Number(bal);
100
+ return { confirmed: total, unconfirmed: 0, total };
101
+ }
102
+ async refreshBalances() {
103
+ this.assertConnected();
104
+ await this.account.syncWalletBalance?.();
105
+ }
106
+ async listAssets() {
107
+ this.assertConnected();
108
+ const { total } = await this.getBtcBalance();
109
+ const btc = {
110
+ id: 'BTC',
111
+ name: 'Bitcoin',
112
+ ticker: 'BTC',
113
+ precision: 8,
114
+ protocol: 'SPARK',
115
+ layer: 'BTC_SPARK',
116
+ balance: {
117
+ total,
118
+ available: total,
119
+ pending: 0,
120
+ totalDisplay: String(total),
121
+ availableDisplay: String(total),
122
+ },
123
+ capabilities: {
124
+ canSend: true,
125
+ canReceive: true,
126
+ canSwap: false,
127
+ supportsLightning: true,
128
+ supportsOnchain: true,
129
+ },
130
+ };
131
+ // TODO(Phase 2): enumerate Spark tokens from account.getBalance() token map.
132
+ return [btc];
133
+ }
134
+ async getAssetBalance(assetId) {
135
+ const assets = await this.listAssets();
136
+ const found = assets.find((a) => a.id === assetId);
137
+ if (!found)
138
+ throw new ProtocolError(`Unknown asset ${assetId}`, 'SPARK', 'NO_ASSET');
139
+ return found.balance;
140
+ }
141
+ async getAsset(assetId) {
142
+ const assets = await this.listAssets();
143
+ const found = assets.find((a) => a.id === assetId);
144
+ if (!found)
145
+ throw new ProtocolError(`Unknown asset ${assetId}`, 'SPARK', 'NO_ASSET');
146
+ return found;
147
+ }
148
+ // --- Invoices / receive amounts ----------------------------------------
149
+ async createInvoice(request) {
150
+ this.assertConnected();
151
+ const expiresAt = Date.now() + (request.expirySeconds ?? 3600) * 1000;
152
+ // 1) Lightning receive (BOLT11) — when the caller targets the LN layer.
153
+ if (request.layer === 'BTC_LN') {
154
+ // WDK createLightningInvoice({ amountSats, memo, expirySeconds }): LightningReceiveRequest
155
+ const r = await this.account.createLightningInvoice({
156
+ amountSats: request.amount ?? 0,
157
+ memo: request.description,
158
+ expirySeconds: request.expirySeconds,
159
+ });
160
+ const encoded = r?.invoice?.encodedInvoice ?? r?.encodedInvoice ?? r?.invoice ?? '';
161
+ return {
162
+ invoice: encoded,
163
+ paymentHash: r?.invoice?.paymentHash ?? r?.id ?? '',
164
+ amount: request.amount,
165
+ expiresAt,
166
+ description: request.description,
167
+ };
168
+ }
169
+ // 2) Spark token invoice — returns a SparkAddressFormat string.
170
+ if (request.asset && request.asset !== 'BTC') {
171
+ const invoice = await this.account.createSparkTokensInvoice({
172
+ tokenIdentifier: request.asset,
173
+ amount: request.assetAmount != null ? BigInt(request.assetAmount) : undefined,
174
+ memo: request.description,
175
+ });
176
+ return { invoice, paymentHash: '', amount: request.assetAmount, expiresAt, description: request.description };
177
+ }
178
+ // 3) Default: native Spark sats invoice — returns a SparkAddressFormat string.
179
+ const invoice = await this.account.createSparkSatsInvoice({
180
+ amount: request.amount,
181
+ memo: request.description,
182
+ });
183
+ return { invoice, paymentHash: '', amount: request.amount, expiresAt, description: request.description };
184
+ }
185
+ // --- Send ---------------------------------------------------------------
186
+ async sendPayment(request) {
187
+ this.assertConnected();
188
+ const dest = request.invoice.trim();
189
+ const isBolt11 = /^ln(bc|tb|bcrt)/i.test(dest);
190
+ const timestamp = Date.now();
191
+ // 1) Lightning send — WDK requires a maxFeeSats cap.
192
+ if (isBolt11) {
193
+ const r = await this.account.payLightningInvoice({
194
+ invoice: dest,
195
+ maxFeeSats: request.maxFeeSats ?? this.defaultMaxFeeSats(request.amount),
196
+ });
197
+ return {
198
+ paymentHash: r?.paymentHash ?? r?.id ?? '',
199
+ preimage: r?.preimage,
200
+ amount: Number(r?.amountSats ?? request.amount ?? 0),
201
+ fee: Number(r?.feeSats ?? 0),
202
+ status: 'confirmed',
203
+ timestamp,
204
+ };
205
+ }
206
+ // 2) Plain Spark address + explicit amount → direct transfer (zero-fee).
207
+ if (request.amount != null) {
208
+ const r = await this.account.sendTransaction({ to: dest, value: request.amount });
209
+ return {
210
+ paymentHash: r?.id ?? r?.transferId ?? '',
211
+ amount: request.amount,
212
+ fee: 0, // Spark transfers are zero-fee (capability flag)
213
+ status: 'confirmed',
214
+ timestamp,
215
+ };
216
+ }
217
+ // 3) Encoded Spark invoice (amount embedded) → fulfill. Takes an ARRAY.
218
+ const res = await this.account.paySparkInvoice([{ invoice: dest }]);
219
+ const ok = res?.satsTransactionSuccess?.[0];
220
+ return {
221
+ paymentHash: ok?.transferResponse?.id ?? '',
222
+ amount: Number(request.amount ?? 0),
223
+ fee: 0,
224
+ status: ok ? 'confirmed' : 'failed',
225
+ timestamp,
226
+ };
227
+ }
228
+ /** Conservative default LN fee cap: 0.5% of amount, min 5 sats. */
229
+ defaultMaxFeeSats(amount) {
230
+ if (!amount || amount <= 0)
231
+ return 10;
232
+ return Math.max(5, Math.ceil(amount * 0.005));
233
+ }
234
+ // --- Transactions -------------------------------------------------------
235
+ async decodeInvoice(invoice) {
236
+ const dest = invoice.trim();
237
+ if (isBolt11(dest)) {
238
+ const { amountSat } = decodeBolt11(dest);
239
+ return { paymentHash: '', amount: amountSat, expiresAt: 0, destination: dest };
240
+ }
241
+ // Spark invoice/address — no on-device decode; surface the raw value.
242
+ return { paymentHash: '', expiresAt: 0, destination: dest };
243
+ }
244
+ async getPaymentStatus(paymentHash) {
245
+ this.assertConnected();
246
+ const t = await this.account.getTransactionReceipt(paymentHash).catch(() => null);
247
+ return { paymentHash, status: mapSparkStatus(t?.status), amount: t ? Number(t.totalValue ?? 0) : undefined };
248
+ }
249
+ async listTransactions(filter) {
250
+ this.assertConnected();
251
+ const transfers = await this.account.getTransfers({ limit: filter?.limit ?? 50, skip: filter?.offset ?? 0 });
252
+ return (transfers ?? []).map((t) => this.toUnifiedTx(t));
253
+ }
254
+ async getTransaction(txId) {
255
+ this.assertConnected();
256
+ const t = await this.account.getTransactionReceipt(txId);
257
+ if (!t)
258
+ throw new ProtocolError(`Unknown tx ${txId}`, 'SPARK', 'NO_TX');
259
+ return this.toUnifiedTx(t);
260
+ }
261
+ async getNodeInfo() {
262
+ return { protocol: 'SPARK', network: this.network };
263
+ }
264
+ async listChannels() {
265
+ return []; // Spark has no LN channels
266
+ }
267
+ /**
268
+ * Escape hatch: the underlying spark-sdk SparkWallet, for integrations that need the
269
+ * raw client (e.g. the flashnet Spark-DEX, which piggybacks on a SparkWallet). Returns
270
+ * the same instance this adapter uses (no duplicate wallet). Null if not connected.
271
+ */
272
+ getUnderlyingSparkWallet() {
273
+ return this.account?._wallet ?? null;
274
+ }
275
+ async listPayments() {
276
+ // Outgoing transfers only.
277
+ const txs = await this.listTransactions();
278
+ return txs.filter((t) => t.type === 'send');
279
+ }
280
+ async listTransfers() {
281
+ this.assertConnected();
282
+ return this.account.getTransfers({ limit: 100 });
283
+ }
284
+ supportsSwaps() {
285
+ return getCapabilities('SPARK').supportsSwaps;
286
+ }
287
+ /** Map a spark-sdk Transfer (proto) → domain UnifiedTransaction (fields read defensively). */
288
+ toUnifiedTx(t) {
289
+ const dir = String(t?.transferDirection ?? t?.direction ?? '').toUpperCase();
290
+ const isReceive = dir.includes('INCOMING') || dir.includes('RECEIV');
291
+ const tsRaw = t?.createdTime ?? t?.updatedTime ?? t?.createdAt;
292
+ const timestamp = typeof tsRaw === 'number'
293
+ ? tsRaw
294
+ : tsRaw?.seconds
295
+ ? Number(tsRaw.seconds) * 1000
296
+ : tsRaw
297
+ ? new Date(tsRaw).getTime()
298
+ : 0;
299
+ return {
300
+ id: t?.id ?? t?.sparkId ?? '',
301
+ type: isReceive ? 'receive' : 'send',
302
+ status: mapSparkStatus(t?.status),
303
+ timestamp,
304
+ amount: Number(t?.totalValue ?? t?.value ?? 0),
305
+ amountDisplay: '',
306
+ asset: undefined,
307
+ protocolData: t,
308
+ };
309
+ }
310
+ // --- helpers ------------------------------------------------------------
311
+ assertConnected() {
312
+ if (!this.connected || !this.account) {
313
+ throw new ProtocolError('SparkWdkAdapter not connected', 'SPARK', 'NOT_CONNECTED');
314
+ }
315
+ }
316
+ }
317
+ //# 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,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';
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"}
@@ -0,0 +1,102 @@
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
+ /**
13
+ * Single source of truth for what each protocol can do.
14
+ * Keyed by ProtocolType. 'BTC' is the abstract on-chain-only base.
15
+ */
16
+ export const PROTOCOL_CAPABILITIES = {
17
+ BTC: {
18
+ protocol: 'BTC',
19
+ layers: ['BTC_L1'],
20
+ supportsOnchain: true,
21
+ supportsLightning: false,
22
+ supportsAssets: false,
23
+ supportsSwaps: false,
24
+ zeroFee: false,
25
+ staticReceiveAddress: false,
26
+ boarding: false,
27
+ invoiceExpiry: false,
28
+ needsChannelLiquidity: false,
29
+ wdkModule: null,
30
+ maturity: 'stable',
31
+ },
32
+ SPARK: {
33
+ protocol: 'SPARK',
34
+ layers: ['BTC_SPARK', 'SPARK_SPARK', 'BTC_LN'],
35
+ supportsOnchain: true, // via static/single-use deposit addresses
36
+ supportsLightning: true,
37
+ supportsAssets: true, // Spark tokens
38
+ supportsSwaps: false, // swaps handled by the cross-protocol router / Flashnet
39
+ zeroFee: true,
40
+ staticReceiveAddress: true,
41
+ boarding: false,
42
+ invoiceExpiry: true,
43
+ needsChannelLiquidity: false, // Spark has no LN channels to manage
44
+ wdkModule: '@tetherto/wdk-wallet-spark',
45
+ maturity: 'beta',
46
+ },
47
+ ARKADE: {
48
+ protocol: 'ARKADE',
49
+ layers: ['BTC_ARKADE', 'ARKADE_ARKADE', 'BTC_LN'],
50
+ supportsOnchain: true, // boarding
51
+ supportsLightning: true, // via boltz-swap
52
+ supportsAssets: true,
53
+ supportsSwaps: false,
54
+ zeroFee: false,
55
+ staticReceiveAddress: true,
56
+ boarding: true,
57
+ invoiceExpiry: true,
58
+ needsChannelLiquidity: false,
59
+ wdkModule: '@arkade-os/wdk',
60
+ maturity: 'beta',
61
+ },
62
+ RGB: {
63
+ protocol: 'RGB',
64
+ layers: ['BTC_L1', 'BTC_LN', 'RGB_L1', 'RGB_LN'],
65
+ supportsOnchain: true,
66
+ supportsLightning: true,
67
+ supportsAssets: true, // RGB assets (USDT, XAUT)
68
+ supportsSwaps: true, // RGB-LN atomic swaps via the maker
69
+ zeroFee: false,
70
+ staticReceiveAddress: false,
71
+ boarding: false,
72
+ invoiceExpiry: true,
73
+ needsChannelLiquidity: true, // RGB-LN needs channels / LSPS1
74
+ wdkModule: '@kaleidorg/wdk-wallet-rln',
75
+ maturity: 'beta',
76
+ },
77
+ LIQUID: {
78
+ protocol: 'LIQUID',
79
+ layers: ['BTC_LIQUID', 'LIQUID_ASSET'],
80
+ supportsOnchain: true, // Liquid is its own L1
81
+ supportsLightning: false, // (Boltz could add this later → flag, not new method)
82
+ supportsAssets: true, // USDt on Liquid = lite-mode "USD"
83
+ supportsSwaps: false,
84
+ zeroFee: false,
85
+ staticReceiveAddress: false,
86
+ boarding: false,
87
+ invoiceExpiry: false,
88
+ needsChannelLiquidity: false,
89
+ wdkModule: '@kaleidorg/wdk-wallet-liquid',
90
+ maturity: 'beta',
91
+ },
92
+ };
93
+ export function getCapabilities(protocol) {
94
+ return PROTOCOL_CAPABILITIES[protocol];
95
+ }
96
+ /** Protocols that can settle a given layer — used by the cross-protocol router. */
97
+ export function protocolsForLayer(layer) {
98
+ return Object.values(PROTOCOL_CAPABILITIES)
99
+ .filter((c) => c.layers.includes(layer))
100
+ .map((c) => c.protocol);
101
+ }
102
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/capabilities/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Disclosure Level (Lite / Advanced)
3
+ * ----------------------------------
4
+ * Lite and Advanced are NOT a code fork — they are one setting that controls how
5
+ * much the UI reveals and how much the auto-router decides vs. the user. The engine
6
+ * is identical underneath. This module is the single source of truth for what each
7
+ * level exposes, so neither the apps nor the adapters branch on "mode" ad-hoc.
8
+ *
9
+ * Default is chosen at wallet creation but is REVERSIBLE in settings.
10
+ */
11
+ import { ProtocolType, UnifiedAsset } from '../types/base';
12
+ export type DisclosureLevel = 'lite' | 'advanced';
13
+ export interface DisclosurePolicy {
14
+ level: DisclosureLevel;
15
+ /** Show the network/layer behind balances and the network selector. */
16
+ showNetworks: boolean;
17
+ /** Let the user pick the send route (vs. auto-router picks `.best`). */
18
+ showRouteSelector: boolean;
19
+ /** Expose Lightning channel / LSPS1 management. */
20
+ showChannelManagement: boolean;
21
+ /** Expose experimental/advanced features (raw UTXOs, node config, etc.). */
22
+ showExperimental: boolean;
23
+ /** Show raw protocol/asset ids vs. friendly tickers only. */
24
+ showRawIds: boolean;
25
+ }
26
+ export declare function policyFor(level: DisclosureLevel): DisclosurePolicy;
27
+ /**
28
+ * Lite-mode "USD" = USDt on Liquid (locked product decision).
29
+ * Used to relabel/aggregate the user-facing "USD" balance.
30
+ */
31
+ export declare const LITE_USD: {
32
+ readonly protocol: ProtocolType;
33
+ readonly assetId: "ce091c998b83c78bb71a632313ba3760f1763d9cfcffae02258ffa9865a37bd2";
34
+ readonly displayTicker: "USD";
35
+ };
36
+ /** Buckets a unified asset into the three lite-mode user-facing buckets. */
37
+ export type LiteBucket = 'BTC' | 'USD' | 'OTHER';
38
+ export declare function liteBucketOf(asset: UnifiedAsset): LiteBucket;
39
+ /**
40
+ * Aggregate per-protocol assets into the lite-mode view: a single BTC number,
41
+ * a single USD number, and any other assets — hiding which network each lives on.
42
+ * NOTE: callers should surface spendability constraints just-in-time (a unified BTC
43
+ * total can hide that a given route needs a swap); this only aggregates display balances.
44
+ */
45
+ export interface LiteBalances {
46
+ btc: number;
47
+ usd: number;
48
+ other: UnifiedAsset[];
49
+ }
50
+ export declare function aggregateForLite(assets: UnifiedAsset[]): LiteBalances;
51
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/disclosure/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAG1D,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,UAAU,CAAA;AAEjD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,eAAe,CAAA;IACtB,uEAAuE;IACvE,YAAY,EAAE,OAAO,CAAA;IACrB,wEAAwE;IACxE,iBAAiB,EAAE,OAAO,CAAA;IAC1B,mDAAmD;IACnD,qBAAqB,EAAE,OAAO,CAAA;IAC9B,4EAA4E;IAC5E,gBAAgB,EAAE,OAAO,CAAA;IACzB,6DAA6D;IAC7D,UAAU,EAAE,OAAO,CAAA;CACpB;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,CAmBlE;AAED;;;GAGG;AACH,eAAO,MAAM,QAAQ;uBACG,YAAY;;;CAG1B,CAAA;AAEV,4EAA4E;AAC5E,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,KAAK,GAAG,OAAO,CAAA;AAEhD,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,UAAU,CAK5D;AAED;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,YAAY,EAAE,CAAA;CACtB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,YAAY,CAWrE"}