@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.
Files changed (147) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +247 -0
  3. package/dist/adapters/ArkadeAdapter.d.ts +49 -0
  4. package/dist/adapters/ArkadeAdapter.d.ts.map +1 -0
  5. package/dist/adapters/ArkadeAdapter.js +316 -0
  6. package/dist/adapters/ArkadeAdapter.js.map +1 -0
  7. package/dist/adapters/IProtocolAdapter.d.ts +217 -0
  8. package/dist/adapters/IProtocolAdapter.d.ts.map +1 -0
  9. package/dist/adapters/IProtocolAdapter.js +33 -0
  10. package/dist/adapters/IProtocolAdapter.js.map +1 -0
  11. package/dist/adapters/RgbAdapter.d.ts +71 -0
  12. package/dist/adapters/RgbAdapter.d.ts.map +1 -0
  13. package/dist/adapters/RgbAdapter.js +820 -0
  14. package/dist/adapters/RgbAdapter.js.map +1 -0
  15. package/dist/adapters/SparkAdapter.d.ts +48 -0
  16. package/dist/adapters/SparkAdapter.d.ts.map +1 -0
  17. package/dist/adapters/SparkAdapter.js +395 -0
  18. package/dist/adapters/SparkAdapter.js.map +1 -0
  19. package/dist/adapters/native.d.ts +16 -0
  20. package/dist/adapters/native.d.ts.map +1 -0
  21. package/dist/adapters/native.js +16 -0
  22. package/dist/adapters/native.js.map +1 -0
  23. package/dist/adapters/wdk/ArkadeWdkAdapter.d.ts +85 -0
  24. package/dist/adapters/wdk/ArkadeWdkAdapter.d.ts.map +1 -0
  25. package/dist/adapters/wdk/ArkadeWdkAdapter.js +313 -0
  26. package/dist/adapters/wdk/ArkadeWdkAdapter.js.map +1 -0
  27. package/dist/adapters/wdk/LiquidWdkAdapter.d.ts +88 -0
  28. package/dist/adapters/wdk/LiquidWdkAdapter.d.ts.map +1 -0
  29. package/dist/adapters/wdk/LiquidWdkAdapter.js +276 -0
  30. package/dist/adapters/wdk/LiquidWdkAdapter.js.map +1 -0
  31. package/dist/adapters/wdk/RlnWdkAdapter.d.ts +86 -0
  32. package/dist/adapters/wdk/RlnWdkAdapter.d.ts.map +1 -0
  33. package/dist/adapters/wdk/RlnWdkAdapter.js +310 -0
  34. package/dist/adapters/wdk/RlnWdkAdapter.js.map +1 -0
  35. package/dist/adapters/wdk/SparkWdkAdapter.d.ts +81 -0
  36. package/dist/adapters/wdk/SparkWdkAdapter.d.ts.map +1 -0
  37. package/dist/adapters/wdk/SparkWdkAdapter.js +417 -0
  38. package/dist/adapters/wdk/SparkWdkAdapter.js.map +1 -0
  39. package/dist/adapters/wdk/index.d.ts +15 -0
  40. package/dist/adapters/wdk/index.d.ts.map +1 -0
  41. package/dist/adapters/wdk/index.js +15 -0
  42. package/dist/adapters/wdk/index.js.map +1 -0
  43. package/dist/adapters/wdk/moduleLoader.d.ts +22 -0
  44. package/dist/adapters/wdk/moduleLoader.d.ts.map +1 -0
  45. package/dist/adapters/wdk/moduleLoader.js +31 -0
  46. package/dist/adapters/wdk/moduleLoader.js.map +1 -0
  47. package/dist/capabilities/index.d.ts +46 -0
  48. package/dist/capabilities/index.d.ts.map +1 -0
  49. package/dist/capabilities/index.js +102 -0
  50. package/dist/capabilities/index.js.map +1 -0
  51. package/dist/capabilities/operations.d.ts +22 -0
  52. package/dist/capabilities/operations.d.ts.map +1 -0
  53. package/dist/capabilities/operations.js +55 -0
  54. package/dist/capabilities/operations.js.map +1 -0
  55. package/dist/constants.d.ts +8 -0
  56. package/dist/constants.d.ts.map +1 -0
  57. package/dist/constants.js +8 -0
  58. package/dist/constants.js.map +1 -0
  59. package/dist/disclosure/index.d.ts +51 -0
  60. package/dist/disclosure/index.d.ts.map +1 -0
  61. package/dist/disclosure/index.js +64 -0
  62. package/dist/disclosure/index.js.map +1 -0
  63. package/dist/index.d.ts +22 -0
  64. package/dist/index.d.ts.map +1 -0
  65. package/dist/index.js +34 -0
  66. package/dist/index.js.map +1 -0
  67. package/dist/lib/arkade-client-manager.d.ts +47 -0
  68. package/dist/lib/arkade-client-manager.d.ts.map +1 -0
  69. package/dist/lib/arkade-client-manager.js +121 -0
  70. package/dist/lib/arkade-client-manager.js.map +1 -0
  71. package/dist/lib/bolt11.d.ts +18 -0
  72. package/dist/lib/bolt11.d.ts.map +1 -0
  73. package/dist/lib/bolt11.js +31 -0
  74. package/dist/lib/bolt11.js.map +1 -0
  75. package/dist/lib/flashnet-client-manager.d.ts +29 -0
  76. package/dist/lib/flashnet-client-manager.d.ts.map +1 -0
  77. package/dist/lib/flashnet-client-manager.js +116 -0
  78. package/dist/lib/flashnet-client-manager.js.map +1 -0
  79. package/dist/lib/kaleido-client-manager.d.ts +26 -0
  80. package/dist/lib/kaleido-client-manager.d.ts.map +1 -0
  81. package/dist/lib/kaleido-client-manager.js +55 -0
  82. package/dist/lib/kaleido-client-manager.js.map +1 -0
  83. package/dist/lib/spark-client-manager.d.ts +41 -0
  84. package/dist/lib/spark-client-manager.d.ts.map +1 -0
  85. package/dist/lib/spark-client-manager.js +101 -0
  86. package/dist/lib/spark-client-manager.js.map +1 -0
  87. package/dist/manager/ProtocolManager.d.ts +108 -0
  88. package/dist/manager/ProtocolManager.d.ts.map +1 -0
  89. package/dist/manager/ProtocolManager.js +305 -0
  90. package/dist/manager/ProtocolManager.js.map +1 -0
  91. package/dist/ports/index.d.ts +49 -0
  92. package/dist/ports/index.d.ts.map +1 -0
  93. package/dist/ports/index.js +31 -0
  94. package/dist/ports/index.js.map +1 -0
  95. package/dist/receive/unifiedReceive.d.ts +54 -0
  96. package/dist/receive/unifiedReceive.d.ts.map +1 -0
  97. package/dist/receive/unifiedReceive.js +102 -0
  98. package/dist/receive/unifiedReceive.js.map +1 -0
  99. package/dist/registry/createWdkRegistry.d.ts +20 -0
  100. package/dist/registry/createWdkRegistry.d.ts.map +1 -0
  101. package/dist/registry/createWdkRegistry.js +32 -0
  102. package/dist/registry/createWdkRegistry.js.map +1 -0
  103. package/dist/router/destination.d.ts +28 -0
  104. package/dist/router/destination.d.ts.map +1 -0
  105. package/dist/router/destination.js +72 -0
  106. package/dist/router/destination.js.map +1 -0
  107. package/dist/router/index.d.ts +55 -0
  108. package/dist/router/index.d.ts.map +1 -0
  109. package/dist/router/index.js +67 -0
  110. package/dist/router/index.js.map +1 -0
  111. package/dist/swap/KaleidoswapSwap.d.ts +44 -0
  112. package/dist/swap/KaleidoswapSwap.d.ts.map +1 -0
  113. package/dist/swap/KaleidoswapSwap.js +123 -0
  114. package/dist/swap/KaleidoswapSwap.js.map +1 -0
  115. package/dist/swap/index.d.ts +8 -0
  116. package/dist/swap/index.d.ts.map +1 -0
  117. package/dist/swap/index.js +8 -0
  118. package/dist/swap/index.js.map +1 -0
  119. package/dist/types/arkade.d.ts +40 -0
  120. package/dist/types/arkade.d.ts.map +1 -0
  121. package/dist/types/arkade.js +6 -0
  122. package/dist/types/arkade.js.map +1 -0
  123. package/dist/types/base.d.ts +228 -0
  124. package/dist/types/base.d.ts.map +1 -0
  125. package/dist/types/base.js +53 -0
  126. package/dist/types/base.js.map +1 -0
  127. package/dist/types/cross-l2.d.ts +108 -0
  128. package/dist/types/cross-l2.d.ts.map +1 -0
  129. package/dist/types/cross-l2.js +16 -0
  130. package/dist/types/cross-l2.js.map +1 -0
  131. package/dist/types/flashnet.d.ts +31 -0
  132. package/dist/types/flashnet.d.ts.map +1 -0
  133. package/dist/types/flashnet.js +23 -0
  134. package/dist/types/flashnet.js.map +1 -0
  135. package/dist/types/rgb.d.ts +105 -0
  136. package/dist/types/rgb.d.ts.map +1 -0
  137. package/dist/types/rgb.js +6 -0
  138. package/dist/types/rgb.js.map +1 -0
  139. package/dist/types/spark.d.ts +59 -0
  140. package/dist/types/spark.d.ts.map +1 -0
  141. package/dist/types/spark.js +6 -0
  142. package/dist/types/spark.js.map +1 -0
  143. package/dist/utils.d.ts +10 -0
  144. package/dist/utils.d.ts.map +1 -0
  145. package/dist/utils.js +23 -0
  146. package/dist/utils.js.map +1 -0
  147. package/package.json +71 -0
@@ -0,0 +1,305 @@
1
+ /**
2
+ * Protocol Manager
3
+ * Central manager for all protocol operations
4
+ * Ported from rate-extension/src/protocols/manager/ProtocolManager.ts
5
+ */
6
+ import { ProtocolError, } from '../types/base.js';
7
+ import { ProtocolAdapterRegistry, } from '../adapters/IProtocolAdapter.js';
8
+ import { getLogger } from '../ports/index.js';
9
+ /** Per-protocol timeout for cross-protocol fan-out reads (assets/transactions). */
10
+ const PER_PROTOCOL_TIMEOUT_MS = 8000;
11
+ export class ProtocolManager {
12
+ constructor(_config = {}) {
13
+ this.activeProtocol = null;
14
+ this.registry = new ProtocolAdapterRegistry();
15
+ this.activeProtocol = _config.defaultProtocol || null;
16
+ this.log = _config.logger ?? getLogger();
17
+ this.verifyMessageFallback = _config.verifyMessageFallback;
18
+ }
19
+ // ========================================================================
20
+ // Registry Management
21
+ // ========================================================================
22
+ registerAdapter(adapter) {
23
+ this.registry.register(adapter);
24
+ this.log.info(`[ProtocolManager] Registered ${adapter.protocolName} adapter`);
25
+ }
26
+ getSupportedProtocols() {
27
+ return this.registry.getSupportedProtocols();
28
+ }
29
+ isProtocolSupported(protocol) {
30
+ return this.registry.has(protocol);
31
+ }
32
+ // ========================================================================
33
+ // Capability Manifest
34
+ // ========================================================================
35
+ /**
36
+ * Static capability manifest for a registered protocol (empty if not
37
+ * registered). Capabilities are static, so this works while unconfigured.
38
+ */
39
+ getCapabilities(protocol) {
40
+ return this.registry.get(protocol)?.capabilities ?? [];
41
+ }
42
+ /** Capability manifest for every registered protocol. */
43
+ getAllCapabilities() {
44
+ const result = {};
45
+ for (const adapter of this.registry.getAll()) {
46
+ result[adapter.protocolName] = adapter.capabilities;
47
+ }
48
+ return result;
49
+ }
50
+ /** Whether a protocol declares support for a given operation. */
51
+ protocolSupports(protocol, capability) {
52
+ return this.getCapabilities(protocol).includes(capability);
53
+ }
54
+ // ========================================================================
55
+ // Protocol Selection
56
+ // ========================================================================
57
+ async setActiveProtocol(protocol) {
58
+ if (!this.isProtocolSupported(protocol)) {
59
+ throw new ProtocolError(`Protocol not supported: ${protocol}`, protocol);
60
+ }
61
+ const adapter = this.registry.get(protocol);
62
+ if (!adapter.isConnected()) {
63
+ throw new ProtocolError(`Protocol not connected: ${protocol}`, protocol, 'NOT_CONNECTED');
64
+ }
65
+ this.activeProtocol = protocol;
66
+ this.log.info(`[ProtocolManager] Active protocol set to ${protocol}`);
67
+ }
68
+ getActiveProtocol() {
69
+ return this.activeProtocol;
70
+ }
71
+ getActiveAdapter() {
72
+ if (!this.activeProtocol) {
73
+ throw new Error('No active protocol set');
74
+ }
75
+ const adapter = this.registry.get(this.activeProtocol);
76
+ if (!adapter) {
77
+ throw new Error(`Adapter not found for protocol: ${this.activeProtocol}`);
78
+ }
79
+ return adapter;
80
+ }
81
+ getAdapter(protocol) {
82
+ const adapter = this.registry.get(protocol);
83
+ if (!adapter) {
84
+ throw new Error(`Adapter not found for protocol: ${protocol}`);
85
+ }
86
+ return adapter;
87
+ }
88
+ /**
89
+ * Try to get an adapter, returning undefined if not registered.
90
+ */
91
+ getAdapterIfAvailable(protocol) {
92
+ return this.registry.get(protocol);
93
+ }
94
+ // ========================================================================
95
+ // Connection Management
96
+ // ========================================================================
97
+ async connect(protocol, config) {
98
+ const adapter = this.registry.get(protocol);
99
+ if (!adapter) {
100
+ throw new ProtocolError(`Protocol not found: ${protocol}`, protocol, 'NOT_FOUND');
101
+ }
102
+ await adapter.connect(config);
103
+ this.log.info(`[ProtocolManager] Connected to ${protocol}`);
104
+ // Auto-set as active if no active protocol
105
+ if (!this.activeProtocol) {
106
+ this.activeProtocol = protocol;
107
+ }
108
+ }
109
+ async disconnect(protocol) {
110
+ const adapter = this.registry.get(protocol);
111
+ if (adapter) {
112
+ await adapter.disconnect();
113
+ this.log.info(`[ProtocolManager] Disconnected from ${protocol}`);
114
+ if (this.activeProtocol === protocol) {
115
+ this.activeProtocol = null;
116
+ }
117
+ }
118
+ }
119
+ async disconnectAll() {
120
+ for (const adapter of this.registry.getAll()) {
121
+ try {
122
+ await adapter.disconnect();
123
+ }
124
+ catch (error) {
125
+ this.log.error(`[ProtocolManager] Error disconnecting ${adapter.protocolName}:`, error);
126
+ }
127
+ }
128
+ this.activeProtocol = null;
129
+ }
130
+ async getAllConnectionInfo() {
131
+ const info = new Map();
132
+ for (const adapter of this.registry.getAll()) {
133
+ if (adapter.isConnected()) {
134
+ const connectionInfo = await adapter.getConnectionInfo();
135
+ info.set(adapter.protocolName, connectionInfo);
136
+ }
137
+ }
138
+ return info;
139
+ }
140
+ // ========================================================================
141
+ // Unified Operations (Route to Active Protocol)
142
+ // ========================================================================
143
+ async listAssets() {
144
+ return this.getActiveAdapter().listAssets();
145
+ }
146
+ async getAsset(assetId) {
147
+ return this.getActiveAdapter().getAsset(assetId);
148
+ }
149
+ async getAssetBalance(assetId) {
150
+ return this.getActiveAdapter().getAssetBalance(assetId);
151
+ }
152
+ /**
153
+ * Invalidate every connected adapter's balance cache so the next read is
154
+ * fresh. Tolerates per-adapter failures — one slow protocol can't block the
155
+ * others.
156
+ */
157
+ async refreshBalances() {
158
+ const adapters = this.registry.getAll().filter((a) => a.isConnected());
159
+ await Promise.allSettled(adapters.map((a) => a.refreshBalances()));
160
+ }
161
+ async listTransactions(filter) {
162
+ return this.getActiveAdapter().listTransactions(filter);
163
+ }
164
+ async getTransaction(txId, assetId) {
165
+ return this.getActiveAdapter().getTransaction(txId, assetId);
166
+ }
167
+ async createInvoice(request) {
168
+ return this.getActiveAdapter().createInvoice(request);
169
+ }
170
+ async decodeInvoice(invoice) {
171
+ return this.getActiveAdapter().decodeInvoice(invoice);
172
+ }
173
+ async sendPayment(request) {
174
+ return this.getActiveAdapter().sendPayment(request);
175
+ }
176
+ async payKeysend(request) {
177
+ const adapter = this.getActiveAdapter();
178
+ if (!adapter.payKeysend) {
179
+ throw new ProtocolError('Keysend not supported by active protocol', adapter.protocolName, 'NOT_SUPPORTED');
180
+ }
181
+ return adapter.payKeysend(request);
182
+ }
183
+ async getPaymentStatus(paymentHash) {
184
+ return this.getActiveAdapter().getPaymentStatus(paymentHash);
185
+ }
186
+ /**
187
+ * Sign a message with the active adapter's wallet identity key (LND-style
188
+ * zbase32 recoverable ECDSA). Throws if the adapter doesn't implement it —
189
+ * callers fall back to their own mnemonic-derived signer.
190
+ */
191
+ async signMessage(message) {
192
+ const adapter = this.getActiveAdapter();
193
+ if (typeof adapter.signMessage !== 'function') {
194
+ throw new ProtocolError('signMessage not supported by active protocol', adapter.protocolName, 'NOT_SUPPORTED');
195
+ }
196
+ return adapter.signMessage(message);
197
+ }
198
+ /**
199
+ * Verify an LND-style zbase32 signature, returning the signer's hex pubkey.
200
+ * Routes to the active adapter, else the injected generic fallback, else
201
+ * throws NOT_SUPPORTED.
202
+ */
203
+ async verifyMessage(message, signature) {
204
+ const adapter = this.getActiveAdapter();
205
+ if (typeof adapter.verifyMessage === 'function') {
206
+ return adapter.verifyMessage(message, signature);
207
+ }
208
+ if (this.verifyMessageFallback) {
209
+ return this.verifyMessageFallback(message, signature);
210
+ }
211
+ throw new ProtocolError('verifyMessage not supported by active protocol', adapter.protocolName, 'NOT_SUPPORTED');
212
+ }
213
+ async getReceiveAddress(assetId) {
214
+ return this.getActiveAdapter().getReceiveAddress(assetId);
215
+ }
216
+ async getSwapQuote(request) {
217
+ const adapter = this.getActiveAdapter();
218
+ if (!adapter.supportsSwaps() || !adapter.getSwapQuote) {
219
+ throw new ProtocolError('Swaps not supported by active protocol', adapter.protocolName, 'NOT_SUPPORTED');
220
+ }
221
+ return adapter.getSwapQuote(request);
222
+ }
223
+ async executeSwap(quote) {
224
+ const adapter = this.getActiveAdapter();
225
+ if (!adapter.supportsSwaps() || !adapter.executeSwap) {
226
+ throw new ProtocolError('Swaps not supported by active protocol', adapter.protocolName, 'NOT_SUPPORTED');
227
+ }
228
+ return adapter.executeSwap(quote);
229
+ }
230
+ // ========================================================================
231
+ // Cross-Protocol Operations
232
+ // ========================================================================
233
+ /**
234
+ * Assets across all connected protocols. Runs per-adapter calls in parallel
235
+ * with an 8s timeout each — a single slow/degraded backend can't freeze the
236
+ * whole list for every consumer of asset data.
237
+ */
238
+ async listAllAssets() {
239
+ const adapters = this.registry.getAll().filter((a) => a.isConnected());
240
+ const results = await Promise.allSettled(adapters.map((adapter) => this.withTimeout(adapter.listAssets(), adapter.protocolName, 'listAssets')));
241
+ const allAssets = [];
242
+ results.forEach((result, index) => {
243
+ if (result.status === 'fulfilled')
244
+ allAssets.push(...result.value);
245
+ else
246
+ this.log.error(`[ProtocolManager] Error listing assets for ${adapters[index].protocolName}:`, result.reason);
247
+ });
248
+ return allAssets;
249
+ }
250
+ /**
251
+ * Transactions across all connected protocols. Parallel + per-protocol
252
+ * timeout, for the same reason as `listAllAssets`.
253
+ */
254
+ async listAllTransactions(filter) {
255
+ const adapters = this.registry.getAll().filter((a) => a.isConnected());
256
+ const results = await Promise.allSettled(adapters.map((adapter) => this.withTimeout(adapter.listTransactions(filter), adapter.protocolName, 'listTransactions')));
257
+ const allTransactions = [];
258
+ results.forEach((result, index) => {
259
+ if (result.status === 'fulfilled')
260
+ allTransactions.push(...result.value);
261
+ else
262
+ this.log.error(`[ProtocolManager] Error listing transactions for ${adapters[index].protocolName}:`, result.reason);
263
+ });
264
+ return allTransactions.sort((a, b) => b.timestamp - a.timestamp);
265
+ }
266
+ /** Race a per-protocol call against an 8s timeout. */
267
+ withTimeout(p, protocol, op) {
268
+ return Promise.race([
269
+ p,
270
+ new Promise((_, reject) => setTimeout(() => reject(new Error(`${op}(${protocol}) timed out after ${PER_PROTOCOL_TIMEOUT_MS}ms`)), PER_PROTOCOL_TIMEOUT_MS)),
271
+ ]);
272
+ }
273
+ async findAsset(assetId) {
274
+ for (const adapter of this.registry.getAll()) {
275
+ if (adapter.isConnected()) {
276
+ try {
277
+ const asset = await adapter.getAsset(assetId);
278
+ if (asset)
279
+ return asset;
280
+ }
281
+ catch (_error) {
282
+ // Asset not found in this protocol, continue
283
+ }
284
+ }
285
+ }
286
+ return null;
287
+ }
288
+ async getPortfolioSummary() {
289
+ const allAssets = await this.listAllAssets();
290
+ const breakdown = new Map();
291
+ for (const asset of allAssets) {
292
+ if (!breakdown.has(asset.protocol)) {
293
+ breakdown.set(asset.protocol, { assets: 0, value: 0 });
294
+ }
295
+ const entry = breakdown.get(asset.protocol);
296
+ entry.assets++;
297
+ }
298
+ return {
299
+ totalAssets: allAssets.length,
300
+ totalValue: 0,
301
+ protocolBreakdown: breakdown,
302
+ };
303
+ }
304
+ }
305
+ //# sourceMappingURL=ProtocolManager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProtocolManager.js","sourceRoot":"","sources":["../../src/manager/ProtocolManager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Platform Ports
3
+ * --------------
4
+ * The engine must never touch platform APIs directly. Each host (React Native,
5
+ * browser extension, Node) implements these ports and injects them at startup,
6
+ * so the same engine + adapters run everywhere unchanged.
7
+ */
8
+ /** Persistent key/value storage. RN → SecureStore/MMKV; extension → chrome.storage. */
9
+ export interface IStorageProvider {
10
+ get(key: string): Promise<string | null>;
11
+ set(key: string, value: string): Promise<void>;
12
+ remove(key: string): Promise<void>;
13
+ keys(): Promise<string[]>;
14
+ }
15
+ /** Host capabilities the engine needs but that vary per platform. */
16
+ export interface IRuntimeProvider {
17
+ /** Host identifier — drives diagnostics and WDK export-condition selection. */
18
+ readonly host: 'react-native' | 'extension' | 'node' | 'web';
19
+ /** Secure random bytes from the platform CSPRNG. */
20
+ randomBytes(length: number): Uint8Array;
21
+ /** Epoch millis — injectable so tests/replay can be deterministic. */
22
+ now(): number;
23
+ }
24
+ /** Leveled logger. Hosts inject their own (extension → redacting ring buffer). */
25
+ export interface Logger {
26
+ debug(...args: unknown[]): void;
27
+ info(...args: unknown[]): void;
28
+ warn(...args: unknown[]): void;
29
+ error(...args: unknown[]): void;
30
+ }
31
+ /** Bundle of ports handed to the engine at initialization. */
32
+ export interface PlatformContext {
33
+ storage: IStorageProvider;
34
+ runtime: IRuntimeProvider;
35
+ /** Optional host logger; engine falls back to a console-backed logger. */
36
+ logger?: Logger;
37
+ }
38
+ /**
39
+ * Console-backed logger used when a host injects none. Kept as the single place
40
+ * the engine touches `console`, so the rest of core stays host-agnostic.
41
+ */
42
+ export declare const consoleLogger: Logger;
43
+ /** Inject the host's platform ports once at startup. */
44
+ export declare function setPlatform(ctx: PlatformContext): void;
45
+ /** The injected platform context, or null if the host never called setPlatform. */
46
+ export declare function getPlatform(): PlatformContext | null;
47
+ /** The active logger: injected host logger if present, else the console logger. */
48
+ export declare function getLogger(): Logger;
49
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ports/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,uFAAuF;AACvF,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IACxC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9C,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAClC,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;CAC1B;AAED,qEAAqE;AACrE,MAAM,WAAW,gBAAgB;IAC/B,+EAA+E;IAC/E,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,WAAW,GAAG,MAAM,GAAG,KAAK,CAAA;IAC5D,oDAAoD;IACpD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAAA;IACvC,sEAAsE;IACtE,GAAG,IAAI,MAAM,CAAA;CACd;AAED,kFAAkF;AAClF,MAAM,WAAW,MAAM;IACrB,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAC/B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAC9B,IAAI,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;IAC9B,KAAK,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAA;CAChC;AAED,8DAA8D;AAC9D,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,gBAAgB,CAAA;IACzB,OAAO,EAAE,gBAAgB,CAAA;IACzB,0EAA0E;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,MAK3B,CAAA;AAID,wDAAwD;AACxD,wBAAgB,WAAW,CAAC,GAAG,EAAE,eAAe,GAAG,IAAI,CAEtD;AAED,mFAAmF;AACnF,wBAAgB,WAAW,IAAI,eAAe,GAAG,IAAI,CAEpD;AAED,mFAAmF;AACnF,wBAAgB,SAAS,IAAI,MAAM,CAElC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Platform Ports
3
+ * --------------
4
+ * The engine must never touch platform APIs directly. Each host (React Native,
5
+ * browser extension, Node) implements these ports and injects them at startup,
6
+ * so the same engine + adapters run everywhere unchanged.
7
+ */
8
+ /**
9
+ * Console-backed logger used when a host injects none. Kept as the single place
10
+ * the engine touches `console`, so the rest of core stays host-agnostic.
11
+ */
12
+ export const consoleLogger = {
13
+ debug: (...a) => console.debug(...a),
14
+ info: (...a) => console.info(...a),
15
+ warn: (...a) => console.warn(...a),
16
+ error: (...a) => console.error(...a),
17
+ };
18
+ let platform = null;
19
+ /** Inject the host's platform ports once at startup. */
20
+ export function setPlatform(ctx) {
21
+ platform = ctx;
22
+ }
23
+ /** The injected platform context, or null if the host never called setPlatform. */
24
+ export function getPlatform() {
25
+ return platform;
26
+ }
27
+ /** The active logger: injected host logger if present, else the console logger. */
28
+ export function getLogger() {
29
+ return platform?.logger ?? consoleLogger;
30
+ }
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ports/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAoCH;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAW;IACnC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClC,KAAK,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;CACrC,CAAA;AAED,IAAI,QAAQ,GAA2B,IAAI,CAAA;AAE3C,wDAAwD;AACxD,MAAM,UAAU,WAAW,CAAC,GAAoB;IAC9C,QAAQ,GAAG,GAAG,CAAA;AAChB,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,WAAW;IACzB,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,SAAS;IACvB,OAAO,QAAQ,EAAE,MAAM,IAAI,aAAa,CAAA;AAC1C,CAAC"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * Unified Receive URI (BIP321)
3
+ * ----------------------------
4
+ * Builds ONE QR payload that any wallet can pay, while Kaleido-aware wallets get the
5
+ * richer multi-protocol options. The base is a **BIP321** `bitcoin:` URI — the
6
+ * generalized successor to BIP21: an optional on-chain address in the path plus
7
+ * payment methods as query params (`lightning=` BOLT11, `lno=` BOLT12), and unknown
8
+ * params are ignored by other wallets. It stays backward-compatible with BIP21
9
+ * (the `bitcoin:` scheme + `amount`/`label`/`lightning` are understood by BIP21 wallets).
10
+ *
11
+ * Per BIP321 the address MAY be omitted (`bitcoin:?lightning=...&spark=...`), so a
12
+ * lite wallet with no on-chain address can still publish one QR. Ark / Spark / Liquid
13
+ * / RGB ride as extra (non-standard) params that only Kaleido wallets read.
14
+ *
15
+ * This is the "single QR with embedded LN, Ark, Spark addresses" the lite-mode
16
+ * receive flow needs. Pure + dependency-free.
17
+ */
18
+ export interface UnifiedReceiveParams {
19
+ /** On-chain BTC address. OPTIONAL under BIP321 — omit for a LN/asset-only QR. */
20
+ btcAddress?: string;
21
+ /** BOLT11 invoice for Lightning (BIP321 `lightning=`). */
22
+ lightningInvoice?: string;
23
+ /** BOLT12 offer for Lightning (BIP321 `lno=`). */
24
+ lightningOffer?: string;
25
+ /** Spark address/invoice (Kaleido-only param). */
26
+ sparkAddress?: string;
27
+ /** Arkade address (Kaleido-only param). */
28
+ arkadeAddress?: string;
29
+ /** Liquid address (Kaleido-only param). */
30
+ liquidAddress?: string;
31
+ /** RGB invoice (Kaleido-only param). */
32
+ rgbInvoice?: string;
33
+ /** Amount in BTC (BIP21/BIP321 `amount`). */
34
+ amountBtc?: number;
35
+ /** Human label/message. */
36
+ label?: string;
37
+ /** RGB/Liquid asset id, when receiving a specific asset. */
38
+ assetId?: string;
39
+ /** Asset amount in display units. */
40
+ assetAmount?: number;
41
+ }
42
+ /**
43
+ * Build a single BIP321 `bitcoin:` URI carrying every available receive method.
44
+ * The address is optional; at least one of (address | lightning | lno | spark | ark |
45
+ * liquid | rgb) must be present.
46
+ *
47
+ * Examples:
48
+ * bitcoin:bc1q...?amount=0.001&lightning=lnbc...&spark=spark1...&ark=ark1...
49
+ * bitcoin:?lightning=lnbc...&liquid=lq1... (BIP321: address omitted)
50
+ */
51
+ export declare function buildUnifiedReceiveURI(p: UnifiedReceiveParams): string;
52
+ /** Parse a BIP321 unified URI back into its parts (Kaleido wallets use this on scan). */
53
+ export declare function parseUnifiedReceiveURI(uri: string): UnifiedReceiveParams | null;
54
+ //# sourceMappingURL=unifiedReceive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unifiedReceive.d.ts","sourceRoot":"","sources":["../../src/receive/unifiedReceive.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,WAAW,oBAAoB;IACnC,iFAAiF;IACjF,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,0DAA0D;IAC1D,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,kDAAkD;IAClD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,kDAAkD;IAClD,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,4DAA4D;IAC5D,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,qCAAqC;IACrC,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAcD;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,oBAAoB,GAAG,MAAM,CA4BtE;AAED,yFAAyF;AACzF,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,GAAG,IAAI,CAqB/E"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Unified Receive URI (BIP321)
3
+ * ----------------------------
4
+ * Builds ONE QR payload that any wallet can pay, while Kaleido-aware wallets get the
5
+ * richer multi-protocol options. The base is a **BIP321** `bitcoin:` URI — the
6
+ * generalized successor to BIP21: an optional on-chain address in the path plus
7
+ * payment methods as query params (`lightning=` BOLT11, `lno=` BOLT12), and unknown
8
+ * params are ignored by other wallets. It stays backward-compatible with BIP21
9
+ * (the `bitcoin:` scheme + `amount`/`label`/`lightning` are understood by BIP21 wallets).
10
+ *
11
+ * Per BIP321 the address MAY be omitted (`bitcoin:?lightning=...&spark=...`), so a
12
+ * lite wallet with no on-chain address can still publish one QR. Ark / Spark / Liquid
13
+ * / RGB ride as extra (non-standard) params that only Kaleido wallets read.
14
+ *
15
+ * This is the "single QR with embedded LN, Ark, Spark addresses" the lite-mode
16
+ * receive flow needs. Pure + dependency-free.
17
+ */
18
+ /** BIP321 query keys (case-insensitive). `lightning`/`lno` are standard; the rest are Kaleido-namespaced. */
19
+ const K = {
20
+ lightning: 'lightning',
21
+ lno: 'lno',
22
+ spark: 'spark',
23
+ ark: 'ark',
24
+ liquid: 'liquid',
25
+ rgb: 'rgb',
26
+ assetId: 'assetid',
27
+ assetAmount: 'assetamount',
28
+ };
29
+ /**
30
+ * Build a single BIP321 `bitcoin:` URI carrying every available receive method.
31
+ * The address is optional; at least one of (address | lightning | lno | spark | ark |
32
+ * liquid | rgb) must be present.
33
+ *
34
+ * Examples:
35
+ * bitcoin:bc1q...?amount=0.001&lightning=lnbc...&spark=spark1...&ark=ark1...
36
+ * bitcoin:?lightning=lnbc...&liquid=lq1... (BIP321: address omitted)
37
+ */
38
+ export function buildUnifiedReceiveURI(p) {
39
+ const hasMethod = !!p.btcAddress ||
40
+ !!p.lightningInvoice ||
41
+ !!p.lightningOffer ||
42
+ !!p.sparkAddress ||
43
+ !!p.arkadeAddress ||
44
+ !!p.liquidAddress ||
45
+ !!p.rgbInvoice;
46
+ if (!hasMethod) {
47
+ throw new Error('buildUnifiedReceiveURI requires at least one receive method (address or a payment param)');
48
+ }
49
+ const params = new URLSearchParams();
50
+ if (p.amountBtc != null)
51
+ params.set('amount', formatBtc(p.amountBtc));
52
+ if (p.label)
53
+ params.set('label', p.label);
54
+ if (p.lightningInvoice)
55
+ params.set(K.lightning, p.lightningInvoice);
56
+ if (p.lightningOffer)
57
+ params.set(K.lno, p.lightningOffer);
58
+ if (p.sparkAddress)
59
+ params.set(K.spark, p.sparkAddress);
60
+ if (p.arkadeAddress)
61
+ params.set(K.ark, p.arkadeAddress);
62
+ if (p.liquidAddress)
63
+ params.set(K.liquid, p.liquidAddress);
64
+ if (p.rgbInvoice)
65
+ params.set(K.rgb, p.rgbInvoice);
66
+ if (p.assetId)
67
+ params.set(K.assetId, p.assetId);
68
+ if (p.assetAmount != null)
69
+ params.set(K.assetAmount, String(p.assetAmount));
70
+ const qs = params.toString();
71
+ // BIP321: `bitcoin:` + optional address + optional `?params`.
72
+ return `bitcoin:${p.btcAddress ?? ''}${qs ? `?${qs}` : ''}`;
73
+ }
74
+ /** Parse a BIP321 unified URI back into its parts (Kaleido wallets use this on scan). */
75
+ export function parseUnifiedReceiveURI(uri) {
76
+ // Address is optional under BIP321 → allow an empty path.
77
+ const m = (uri ?? '').trim().match(/^bitcoin:([^?]*)(?:\?(.*))?$/i);
78
+ if (!m)
79
+ return null;
80
+ const btcAddress = m[1] || undefined;
81
+ const params = new URLSearchParams(m[2] ?? '');
82
+ const amount = params.get('amount');
83
+ const assetAmount = params.get(K.assetAmount);
84
+ return {
85
+ btcAddress,
86
+ amountBtc: amount != null ? Number(amount) : undefined,
87
+ label: params.get('label') ?? undefined,
88
+ lightningInvoice: params.get(K.lightning) ?? undefined,
89
+ lightningOffer: params.get(K.lno) ?? undefined,
90
+ sparkAddress: params.get(K.spark) ?? undefined,
91
+ arkadeAddress: params.get(K.ark) ?? undefined,
92
+ liquidAddress: params.get(K.liquid) ?? undefined,
93
+ rgbInvoice: params.get(K.rgb) ?? undefined,
94
+ assetId: params.get(K.assetId) ?? undefined,
95
+ assetAmount: assetAmount != null ? Number(assetAmount) : undefined,
96
+ };
97
+ }
98
+ /** BIP21/BIP321 amounts are in BTC with up to 8 decimals, no trailing zeros / exponent. */
99
+ function formatBtc(amountBtc) {
100
+ return amountBtc.toFixed(8).replace(/\.?0+$/, '');
101
+ }
102
+ //# sourceMappingURL=unifiedReceive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unifiedReceive.js","sourceRoot":"","sources":["../../src/receive/unifiedReceive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * WDK Registry Factory
3
+ * --------------------
4
+ * Convenience: build a `ProtocolAdapterRegistry` populated with the WDK-backed
5
+ * adapters. Opt-in — apps may instead register adapters selectively to keep bundles
6
+ * lean. Importing this pulls only the thin adapter wrappers; the heavy WDK modules
7
+ * are loaded lazily inside each adapter's `connect()` (dynamic import), so this does
8
+ * NOT eagerly bundle the WDK modules.
9
+ *
10
+ * Adapters are constructed but NOT connected — call `connect(config)` per protocol
11
+ * (each adapter's config carries its mnemonic + protocol-specific endpoints).
12
+ */
13
+ import { ProtocolAdapterRegistry } from '../adapters/IProtocolAdapter.js';
14
+ import { ProtocolType } from '../types/base.js';
15
+ export interface WdkRegistryOptions {
16
+ /** Which protocols to register (default: all four). */
17
+ enabled?: ProtocolType[];
18
+ }
19
+ export declare function createWdkRegistry(opts?: WdkRegistryOptions): ProtocolAdapterRegistry;
20
+ //# sourceMappingURL=createWdkRegistry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createWdkRegistry.d.ts","sourceRoot":"","sources":["../../src/registry/createWdkRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AAKtE,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,MAAM,WAAW,kBAAkB;IACjC,uDAAuD;IACvD,OAAO,CAAC,EAAE,YAAY,EAAE,CAAA;CACzB;AAID,wBAAgB,iBAAiB,CAAC,IAAI,GAAE,kBAAuB,GAAG,uBAAuB,CAQxF"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * WDK Registry Factory
3
+ * --------------------
4
+ * Convenience: build a `ProtocolAdapterRegistry` populated with the WDK-backed
5
+ * adapters. Opt-in — apps may instead register adapters selectively to keep bundles
6
+ * lean. Importing this pulls only the thin adapter wrappers; the heavy WDK modules
7
+ * are loaded lazily inside each adapter's `connect()` (dynamic import), so this does
8
+ * NOT eagerly bundle the WDK modules.
9
+ *
10
+ * Adapters are constructed but NOT connected — call `connect(config)` per protocol
11
+ * (each adapter's config carries its mnemonic + protocol-specific endpoints).
12
+ */
13
+ import { ProtocolAdapterRegistry } from '../adapters/IProtocolAdapter.js';
14
+ import { SparkWdkAdapter } from '../adapters/wdk/SparkWdkAdapter.js';
15
+ import { LiquidWdkAdapter } from '../adapters/wdk/LiquidWdkAdapter.js';
16
+ import { RlnWdkAdapter } from '../adapters/wdk/RlnWdkAdapter.js';
17
+ import { ArkadeWdkAdapter } from '../adapters/wdk/ArkadeWdkAdapter.js';
18
+ const ALL = ['SPARK', 'LIQUID', 'RGB', 'ARKADE'];
19
+ export function createWdkRegistry(opts = {}) {
20
+ const enabled = opts.enabled ?? ALL;
21
+ const registry = new ProtocolAdapterRegistry();
22
+ if (enabled.includes('SPARK'))
23
+ registry.register(new SparkWdkAdapter());
24
+ if (enabled.includes('LIQUID'))
25
+ registry.register(new LiquidWdkAdapter());
26
+ if (enabled.includes('RGB'))
27
+ registry.register(new RlnWdkAdapter());
28
+ if (enabled.includes('ARKADE'))
29
+ registry.register(new ArkadeWdkAdapter());
30
+ return registry;
31
+ }
32
+ //# sourceMappingURL=createWdkRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createWdkRegistry.js","sourceRoot":"","sources":["../../src/registry/createWdkRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAA;AAQnE,MAAM,GAAG,GAAmB,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAA;AAEhE,MAAM,UAAU,iBAAiB,CAAC,OAA2B,EAAE;IAC7D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,GAAG,CAAA;IACnC,MAAM,QAAQ,GAAG,IAAI,uBAAuB,EAAE,CAAA;IAC9C,IAAI,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,eAAe,EAAE,CAAC,CAAA;IACvE,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAA;IACzE,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,aAAa,EAAE,CAAC,CAAA;IACnE,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAAE,QAAQ,CAAC,QAAQ,CAAC,IAAI,gBAAgB,EAAE,CAAC,CAAA;IACzE,OAAO,QAAQ,CAAA;AACjB,CAAC"}