@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,31 @@
1
+ /**
2
+ * Minimal, dependency-free BOLT11 helper.
3
+ * ---------------------------------------
4
+ * Extracts the amount + network from a Lightning invoice's human-readable prefix
5
+ * (HRP) without a full bech32 decode. Enough for adapters that only need to show
6
+ * "how much" before paying (Spark, Arkade), and to avoid pulling a decoder dep.
7
+ * Full field decode (payment_hash, description) is left to node-side decoders (RLN).
8
+ */
9
+ const MULTIPLIER = { m: 1e-3, u: 1e-6, n: 1e-9, p: 1e-12 };
10
+ /** Parse a BOLT11 invoice's HRP for amount + network. Returns network 'unknown' if not BOLT11. */
11
+ export function decodeBolt11(invoice) {
12
+ const s = (invoice ?? '').trim().toLowerCase();
13
+ // HRP = ln <currency> [<amount><multiplier>] then the bech32 '1' separator.
14
+ // Requiring the trailing '1' makes the optional amount backtrack correctly, so the
15
+ // separator itself is never mistaken for an amount (e.g. amountless `lnbc1...`).
16
+ const m = s.match(/^ln(bcrt|tbs|bc|tb)(?:(\d+)([munp]?))?1/);
17
+ if (!m)
18
+ return { network: 'unknown' };
19
+ const network = m[1];
20
+ const digits = m[2];
21
+ const mult = m[3];
22
+ if (!digits)
23
+ return { network }; // amountless / open invoice
24
+ const base = Number(digits);
25
+ const btc = mult ? base * MULTIPLIER[mult] : base;
26
+ return { amountSat: Math.round(btc * 1e8), network };
27
+ }
28
+ export function isBolt11(s) {
29
+ return /^ln(bcrt|tbs|bc|tb)[0-9]/i.test((s ?? '').trim());
30
+ }
31
+ //# sourceMappingURL=bolt11.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bolt11.js","sourceRoot":"","sources":["../../src/lib/bolt11.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,UAAU,GAA2B,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAA;AASlF,kGAAkG;AAClG,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAC9C,4EAA4E;IAC5E,mFAAmF;IACnF,iFAAiF;IACjF,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAA;IAC5D,IAAI,CAAC,CAAC;QAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAA;IACrC,MAAM,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IACpB,MAAM,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IACnB,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IACjB,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,OAAO,EAAE,CAAA,CAAC,4BAA4B;IAC5D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;IAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACjD,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,OAAO,EAAE,CAAA;AACtD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,CAAS;IAChC,OAAO,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;AAC3D,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Flashnet Client Manager
3
+ * Manages the lifecycle of a FlashnetClient from @flashnet/sdk.
4
+ * Requires an initialized SparkWallet to function.
5
+ * Ported from rate-extension/src/lib/flashnet-client-manager.ts
6
+ */
7
+ import { type FlashnetNetwork } from '../types/flashnet.js';
8
+ declare class FlashnetClientManager {
9
+ private client;
10
+ private initPromise;
11
+ private poolId;
12
+ private network;
13
+ /**
14
+ * Initialize with a SparkWallet instance.
15
+ * @param wallet - SparkWallet from @buildonspark/spark-sdk
16
+ * @param sparkNetwork - The Spark network ('mainnet' | 'regtest')
17
+ */
18
+ initialize(wallet: any, sparkNetwork?: string): Promise<void>;
19
+ private doInitialize;
20
+ getClient(): any;
21
+ getPoolId(): string | null;
22
+ getNetwork(): FlashnetNetwork | null;
23
+ getUsdbTokenAddress(): string;
24
+ isInitialized(): boolean;
25
+ disconnect(): Promise<void>;
26
+ }
27
+ export declare const flashnetClientManager: FlashnetClientManager;
28
+ export {};
29
+ //# sourceMappingURL=flashnet-client-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flashnet-client-manager.d.ts","sourceRoot":"","sources":["../../src/lib/flashnet-client-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAIL,KAAK,eAAe,EACrB,MAAM,mBAAmB,CAAA;AAkB1B,cAAM,qBAAqB;IACzB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,WAAW,CAA6B;IAChD,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,OAAO,CAA+B;IAE9C;;;;OAIG;IACH,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;YAQ/C,YAAY;IAuC1B,SAAS,IAAI,GAAG;IAOhB,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B,UAAU,IAAI,eAAe,GAAG,IAAI;IAIpC,mBAAmB,IAAI,MAAM;IAO7B,aAAa,IAAI,OAAO;IAIlB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CAalC;AAED,eAAO,MAAM,qBAAqB,uBAA8B,CAAA"}
@@ -0,0 +1,116 @@
1
+ /**
2
+ * Flashnet Client Manager
3
+ * Manages the lifecycle of a FlashnetClient from @flashnet/sdk.
4
+ * Requires an initialized SparkWallet to function.
5
+ * Ported from rate-extension/src/lib/flashnet-client-manager.ts
6
+ */
7
+ import { BTC_ASSET_PUBKEY, getFlashnetNetworkForSpark, getFlashnetUsdbTokenAddress, } from '../types/flashnet.js';
8
+ /**
9
+ * Normalize the SDK pools response to always return an array.
10
+ * The SDK may return `Pool[]` or `{ pools: Pool[] }`.
11
+ */
12
+ function normalizePoolsResponse(response) {
13
+ if (Array.isArray(response))
14
+ return response;
15
+ if (response &&
16
+ typeof response === 'object' &&
17
+ Array.isArray(response.pools)) {
18
+ return response.pools;
19
+ }
20
+ return [];
21
+ }
22
+ class FlashnetClientManager {
23
+ constructor() {
24
+ this.client = null;
25
+ this.initPromise = null;
26
+ this.poolId = null;
27
+ this.network = null;
28
+ }
29
+ /**
30
+ * Initialize with a SparkWallet instance.
31
+ * @param wallet - SparkWallet from @buildonspark/spark-sdk
32
+ * @param sparkNetwork - The Spark network ('mainnet' | 'regtest')
33
+ */
34
+ initialize(wallet, sparkNetwork) {
35
+ if (this.initPromise)
36
+ return this.initPromise;
37
+ this.initPromise = this.doInitialize(wallet, sparkNetwork).finally(() => {
38
+ this.initPromise = null;
39
+ });
40
+ return this.initPromise;
41
+ }
42
+ async doInitialize(wallet, sparkNetwork) {
43
+ if (this.client) {
44
+ await this.disconnect();
45
+ }
46
+ const network = getFlashnetNetworkForSpark(sparkNetwork);
47
+ if (!network) {
48
+ throw new Error('Flashnet is only available when Spark is on mainnet or regtest.');
49
+ }
50
+ try {
51
+ const { FlashnetClient } = await import('@flashnet/sdk');
52
+ this.client = new FlashnetClient(wallet);
53
+ await this.client.initialize();
54
+ this.network = network;
55
+ // Auto-discover the largest BTC/USDB pool
56
+ try {
57
+ const poolsResponse = await this.client.listPools({
58
+ assetAAddress: BTC_ASSET_PUBKEY,
59
+ assetBAddress: getFlashnetUsdbTokenAddress(network),
60
+ sort: 'TVL_DESC',
61
+ });
62
+ const pools = normalizePoolsResponse(poolsResponse);
63
+ if (pools && pools.length > 0) {
64
+ this.poolId = pools[0].lpPublicKey;
65
+ }
66
+ }
67
+ catch (error) {
68
+ console.warn('[FlashnetClientManager] Pool discovery failed:', error);
69
+ }
70
+ }
71
+ catch (error) {
72
+ this.client = null;
73
+ this.poolId = null;
74
+ this.network = null;
75
+ const message = error instanceof Error ? error.message : String(error);
76
+ throw new Error(`Failed to initialize FlashnetClient: ${message}`);
77
+ }
78
+ }
79
+ getClient() {
80
+ if (!this.client) {
81
+ throw new Error('FlashnetClient not initialized. Call initialize() first.');
82
+ }
83
+ return this.client;
84
+ }
85
+ getPoolId() {
86
+ return this.poolId;
87
+ }
88
+ getNetwork() {
89
+ return this.network;
90
+ }
91
+ getUsdbTokenAddress() {
92
+ if (!this.network) {
93
+ throw new Error('Flashnet network unavailable. Initialize the client first.');
94
+ }
95
+ return getFlashnetUsdbTokenAddress(this.network);
96
+ }
97
+ isInitialized() {
98
+ return this.client !== null;
99
+ }
100
+ async disconnect() {
101
+ if (this.client) {
102
+ try {
103
+ await this.client.cleanup();
104
+ }
105
+ catch (error) {
106
+ console.warn('[FlashnetClientManager] Disconnect error:', error);
107
+ }
108
+ }
109
+ this.client = null;
110
+ this.poolId = null;
111
+ this.network = null;
112
+ this.initPromise = null;
113
+ }
114
+ }
115
+ export const flashnetClientManager = new FlashnetClientManager();
116
+ //# sourceMappingURL=flashnet-client-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"flashnet-client-manager.js","sourceRoot":"","sources":["../../src/lib/flashnet-client-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * KaleidoClient Manager
3
+ * Singleton manager for KaleidoClient lifecycle.
4
+ * Ported from rate-extension/src/lib/kaleido-client-manager.ts
5
+ */
6
+ import { KaleidoClient } from 'kaleido-sdk';
7
+ export interface KaleidoClientConfig {
8
+ baseUrl: string;
9
+ nodeUrl?: string;
10
+ apiKey?: string;
11
+ timeout?: number;
12
+ }
13
+ declare class KaleidoClientManager {
14
+ private client;
15
+ private config;
16
+ initialize(config: KaleidoClientConfig): void;
17
+ getClient(): KaleidoClient;
18
+ isInitialized(): boolean;
19
+ hasNode(): boolean;
20
+ getConfig(): KaleidoClientConfig | null;
21
+ reset(): void;
22
+ updateConfig(config: Partial<KaleidoClientConfig>): void;
23
+ }
24
+ export declare const kaleidoClientManager: KaleidoClientManager;
25
+ export {};
26
+ //# sourceMappingURL=kaleido-client-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kaleido-client-manager.d.ts","sourceRoot":"","sources":["../../src/lib/kaleido-client-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE3C,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,cAAM,oBAAoB;IACxB,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,MAAM,CAAmC;IAEjD,UAAU,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI;IAgB7C,SAAS,IAAI,aAAa;IAO1B,aAAa,IAAI,OAAO;IAIxB,OAAO,IAAI,OAAO;IAIlB,SAAS,IAAI,mBAAmB,GAAG,IAAI;IAIvC,KAAK,IAAI,IAAI;IAMb,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,IAAI;CAOzD;AAED,eAAO,MAAM,oBAAoB,sBAA6B,CAAA"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * KaleidoClient Manager
3
+ * Singleton manager for KaleidoClient lifecycle.
4
+ * Ported from rate-extension/src/lib/kaleido-client-manager.ts
5
+ */
6
+ import { KaleidoClient } from 'kaleido-sdk';
7
+ class KaleidoClientManager {
8
+ constructor() {
9
+ this.client = null;
10
+ this.config = null;
11
+ }
12
+ initialize(config) {
13
+ this.config = config;
14
+ this.client = KaleidoClient.create({
15
+ baseUrl: config.baseUrl,
16
+ nodeUrl: config.nodeUrl,
17
+ apiKey: config.apiKey,
18
+ timeout: config.timeout,
19
+ });
20
+ console.log('[KaleidoClientManager] Initialized with config:', {
21
+ baseUrl: config.baseUrl,
22
+ hasNodeUrl: !!config.nodeUrl,
23
+ hasApiKey: !!config.apiKey,
24
+ });
25
+ }
26
+ getClient() {
27
+ if (!this.client) {
28
+ throw new Error('KaleidoClient not initialized. Call initialize() first.');
29
+ }
30
+ return this.client;
31
+ }
32
+ isInitialized() {
33
+ return this.client !== null;
34
+ }
35
+ hasNode() {
36
+ return !!this.config?.nodeUrl;
37
+ }
38
+ getConfig() {
39
+ return this.config;
40
+ }
41
+ reset() {
42
+ this.client = null;
43
+ this.config = null;
44
+ console.log('[KaleidoClientManager] Reset complete');
45
+ }
46
+ updateConfig(config) {
47
+ if (!this.config) {
48
+ throw new Error('Cannot update config: client not initialized');
49
+ }
50
+ const newConfig = { ...this.config, ...config };
51
+ this.initialize(newConfig);
52
+ }
53
+ }
54
+ export const kaleidoClientManager = new KaleidoClientManager();
55
+ //# sourceMappingURL=kaleido-client-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kaleido-client-manager.js","sourceRoot":"","sources":["../../src/lib/kaleido-client-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAS3C,MAAM,oBAAoB;IAA1B;QACU,WAAM,GAAyB,IAAI,CAAA;QACnC,WAAM,GAA+B,IAAI,CAAA;IAkDnD,CAAC;IAhDC,UAAU,CAAC,MAA2B;QACpC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC;YACjC,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,CAAC,CAAA;QAEF,OAAO,CAAC,GAAG,CAAC,iDAAiD,EAAE;YAC7D,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO;YAC5B,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM;SAC3B,CAAC,CAAA;IACJ,CAAC;IAED,SAAS;QACP,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAA;QAC5E,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAED,aAAa;QACX,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,CAAA;IAC7B,CAAC;IAED,OAAO;QACL,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAA;IAC/B,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QAClB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QAClB,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAA;IACtD,CAAC;IAED,YAAY,CAAC,MAAoC;QAC/C,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAA;QACjE,CAAC;QACD,MAAM,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,EAAE,CAAA;QAC/C,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;IAC5B,CAAC;CACF;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,oBAAoB,EAAE,CAAA"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Spark Client Manager
3
+ * Manages the lifecycle of a SparkWallet from @buildonspark/spark-sdk.
4
+ * Uses injected SDK factory to avoid dynamic import() issues in Metro.
5
+ */
6
+ import type { SparkConfig } from '../types/spark.js';
7
+ type SparkWallet = any;
8
+ /**
9
+ * SDK factory injected by consumers.
10
+ * Consumers must call `setSdkFactory()` before `initialize()`.
11
+ */
12
+ export interface SparkSdkFactory {
13
+ initializeWallet: (config: {
14
+ mnemonicOrSeed: string;
15
+ options: {
16
+ network: string;
17
+ };
18
+ }) => Promise<{
19
+ wallet: any;
20
+ }>;
21
+ }
22
+ declare class SparkClientManager {
23
+ private wallet;
24
+ private config;
25
+ private _initPromise;
26
+ private sdkFactory;
27
+ /**
28
+ * Set the SDK factory before calling initialize().
29
+ * This avoids dynamic import() which breaks in Metro bundler.
30
+ */
31
+ setSdkFactory(factory: SparkSdkFactory): void;
32
+ initialize(config: SparkConfig): Promise<void>;
33
+ private _doInitialize;
34
+ disconnect(): Promise<void>;
35
+ isInitialized(): boolean;
36
+ getWallet(): SparkWallet;
37
+ getConfig(): SparkConfig | null;
38
+ }
39
+ export declare const sparkClientManager: SparkClientManager;
40
+ export {};
41
+ //# sourceMappingURL=spark-client-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spark-client-manager.d.ts","sourceRoot":"","sources":["../../src/lib/spark-client-manager.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAEjD,KAAK,WAAW,GAAG,GAAG,CAAA;AAEtB;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,gBAAgB,EAAE,CAAC,MAAM,EAAE;QAAE,cAAc,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,KAAK,OAAO,CAAC;QAAE,MAAM,EAAE,GAAG,CAAA;KAAE,CAAC,CAAA;CACjH;AAED,cAAM,kBAAkB;IACtB,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,UAAU,CAA+B;IAEjD;;;OAGG;IACH,aAAa,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAI7C,UAAU,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;YAShC,aAAa;IAiDrB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAajC,aAAa,IAAI,OAAO;IAIxB,SAAS,IAAI,WAAW;IAOxB,SAAS,IAAI,WAAW,GAAG,IAAI;CAGhC;AAED,eAAO,MAAM,kBAAkB,oBAA2B,CAAA"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Spark Client Manager
3
+ * Manages the lifecycle of a SparkWallet from @buildonspark/spark-sdk.
4
+ * Uses injected SDK factory to avoid dynamic import() issues in Metro.
5
+ */
6
+ class SparkClientManager {
7
+ constructor() {
8
+ this.wallet = null;
9
+ this.config = null;
10
+ this._initPromise = null;
11
+ this.sdkFactory = null;
12
+ }
13
+ /**
14
+ * Set the SDK factory before calling initialize().
15
+ * This avoids dynamic import() which breaks in Metro bundler.
16
+ */
17
+ setSdkFactory(factory) {
18
+ this.sdkFactory = factory;
19
+ }
20
+ initialize(config) {
21
+ if (this._initPromise)
22
+ return this._initPromise;
23
+ this._initPromise = this._doInitialize(config).finally(() => {
24
+ this._initPromise = null;
25
+ });
26
+ return this._initPromise;
27
+ }
28
+ async _doInitialize(config) {
29
+ if (this.wallet) {
30
+ console.warn('[SparkClientManager] Wallet already initialized, re-initializing...');
31
+ await this.disconnect();
32
+ }
33
+ const networkMap = {
34
+ mainnet: 'MAINNET',
35
+ testnet: 'TESTNET',
36
+ regtest: 'REGTEST',
37
+ signet: 'SIGNET',
38
+ };
39
+ const network = networkMap[config.network ?? 'mainnet'] ?? 'MAINNET';
40
+ try {
41
+ let result;
42
+ if (this.sdkFactory) {
43
+ result = await this.sdkFactory.initializeWallet({
44
+ mnemonicOrSeed: config.mnemonic,
45
+ options: { network },
46
+ });
47
+ }
48
+ else {
49
+ // Fallback: dynamic import (works in Node/extension, may fail in Metro)
50
+ const { SparkWallet } = await import('@buildonspark/spark-sdk');
51
+ result = await SparkWallet.initialize({
52
+ mnemonicOrSeed: config.mnemonic,
53
+ options: { network: network },
54
+ });
55
+ }
56
+ this.wallet = result.wallet;
57
+ this.config = config;
58
+ console.log('[SparkClientManager] SparkWallet initialized, network:', network);
59
+ try {
60
+ await this.wallet.setPrivacyEnabled(true);
61
+ console.log('[SparkClientManager] Privacy mode enabled');
62
+ }
63
+ catch (error) {
64
+ const msg = error instanceof Error ? error.message : String(error);
65
+ console.warn('[SparkClientManager] Failed to enable privacy mode:', msg);
66
+ }
67
+ }
68
+ catch (error) {
69
+ this.wallet = null;
70
+ const msg = error instanceof Error ? error.message : String(error);
71
+ throw new Error(`Failed to initialize SparkWallet: ${msg}`);
72
+ }
73
+ }
74
+ async disconnect() {
75
+ if (this.wallet) {
76
+ try {
77
+ await this.wallet.cleanupConnections();
78
+ }
79
+ catch (error) {
80
+ const msg = error instanceof Error ? error.message : String(error);
81
+ console.warn('[SparkClientManager] Error during cleanup:', msg);
82
+ }
83
+ this.wallet = null;
84
+ }
85
+ this.config = null;
86
+ }
87
+ isInitialized() {
88
+ return this.wallet !== null;
89
+ }
90
+ getWallet() {
91
+ if (!this.wallet) {
92
+ throw new Error('[SparkClientManager] Wallet not initialized');
93
+ }
94
+ return this.wallet;
95
+ }
96
+ getConfig() {
97
+ return this.config;
98
+ }
99
+ }
100
+ export const sparkClientManager = new SparkClientManager();
101
+ //# sourceMappingURL=spark-client-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spark-client-manager.js","sourceRoot":"","sources":["../../src/lib/spark-client-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ /**
2
+ * Protocol Manager
3
+ * Central manager for all protocol operations
4
+ * Ported from rate-extension/src/protocols/manager/ProtocolManager.ts
5
+ */
6
+ import { ProtocolType, UnifiedAsset, UnifiedTransaction, InvoiceRequest, Invoice, DecodedInvoice, KeysendRequest, PaymentRequest, PaymentResult, PaymentStatus, Address, ConnectionInfo, TransactionFilter, QuoteRequest, Quote, SwapResult } from '../types/base.js';
7
+ import { IProtocolAdapter, ProtocolConfig } from '../adapters/IProtocolAdapter.js';
8
+ import type { ProtocolCapability } from '../capabilities/operations.js';
9
+ import { type Logger } from '../ports/index.js';
10
+ export interface ProtocolManagerConfig {
11
+ defaultProtocol?: ProtocolType;
12
+ autoConnect?: boolean;
13
+ enabledProtocols?: ProtocolType[];
14
+ /** Logger override; defaults to the injected platform logger (or console). */
15
+ logger?: Logger;
16
+ /**
17
+ * Generic message-verification fallback used by `verifyMessage` when the
18
+ * active adapter does not implement `verifyMessage` itself. Hosts inject a
19
+ * recoverable-ECDSA verifier (returns the signer's hex pubkey). When absent,
20
+ * `verifyMessage` throws NOT_SUPPORTED for adapters without native support.
21
+ */
22
+ verifyMessageFallback?: (message: string, signature: string) => Promise<string>;
23
+ }
24
+ export declare class ProtocolManager {
25
+ private registry;
26
+ private activeProtocol;
27
+ private log;
28
+ private verifyMessageFallback?;
29
+ constructor(_config?: ProtocolManagerConfig);
30
+ registerAdapter(adapter: IProtocolAdapter): void;
31
+ getSupportedProtocols(): ProtocolType[];
32
+ isProtocolSupported(protocol: ProtocolType): boolean;
33
+ /**
34
+ * Static capability manifest for a registered protocol (empty if not
35
+ * registered). Capabilities are static, so this works while unconfigured.
36
+ */
37
+ getCapabilities(protocol: ProtocolType): readonly ProtocolCapability[];
38
+ /** Capability manifest for every registered protocol. */
39
+ getAllCapabilities(): Partial<Record<ProtocolType, readonly ProtocolCapability[]>>;
40
+ /** Whether a protocol declares support for a given operation. */
41
+ protocolSupports(protocol: ProtocolType, capability: ProtocolCapability): boolean;
42
+ setActiveProtocol(protocol: ProtocolType): Promise<void>;
43
+ getActiveProtocol(): ProtocolType | null;
44
+ getActiveAdapter(): IProtocolAdapter;
45
+ getAdapter(protocol: ProtocolType): IProtocolAdapter;
46
+ /**
47
+ * Try to get an adapter, returning undefined if not registered.
48
+ */
49
+ getAdapterIfAvailable(protocol: ProtocolType): IProtocolAdapter | undefined;
50
+ connect(protocol: ProtocolType, config: ProtocolConfig): Promise<void>;
51
+ disconnect(protocol: ProtocolType): Promise<void>;
52
+ disconnectAll(): Promise<void>;
53
+ getAllConnectionInfo(): Promise<Map<ProtocolType, ConnectionInfo>>;
54
+ listAssets(): Promise<UnifiedAsset[]>;
55
+ getAsset(assetId: string): Promise<UnifiedAsset>;
56
+ getAssetBalance(assetId: string): Promise<import("..").AssetBalance>;
57
+ /**
58
+ * Invalidate every connected adapter's balance cache so the next read is
59
+ * fresh. Tolerates per-adapter failures — one slow protocol can't block the
60
+ * others.
61
+ */
62
+ refreshBalances(): Promise<void>;
63
+ listTransactions(filter?: TransactionFilter): Promise<UnifiedTransaction[]>;
64
+ getTransaction(txId: string, assetId?: string): Promise<UnifiedTransaction>;
65
+ createInvoice(request: InvoiceRequest): Promise<Invoice>;
66
+ decodeInvoice(invoice: string): Promise<DecodedInvoice>;
67
+ sendPayment(request: PaymentRequest): Promise<PaymentResult>;
68
+ payKeysend(request: KeysendRequest): Promise<PaymentResult>;
69
+ getPaymentStatus(paymentHash: string): Promise<PaymentStatus>;
70
+ /**
71
+ * Sign a message with the active adapter's wallet identity key (LND-style
72
+ * zbase32 recoverable ECDSA). Throws if the adapter doesn't implement it —
73
+ * callers fall back to their own mnemonic-derived signer.
74
+ */
75
+ signMessage(message: string): Promise<string>;
76
+ /**
77
+ * Verify an LND-style zbase32 signature, returning the signer's hex pubkey.
78
+ * Routes to the active adapter, else the injected generic fallback, else
79
+ * throws NOT_SUPPORTED.
80
+ */
81
+ verifyMessage(message: string, signature: string): Promise<string>;
82
+ getReceiveAddress(assetId?: string): Promise<Address>;
83
+ getSwapQuote(request: QuoteRequest): Promise<Quote>;
84
+ executeSwap(quote: Quote): Promise<SwapResult>;
85
+ /**
86
+ * Assets across all connected protocols. Runs per-adapter calls in parallel
87
+ * with an 8s timeout each — a single slow/degraded backend can't freeze the
88
+ * whole list for every consumer of asset data.
89
+ */
90
+ listAllAssets(): Promise<UnifiedAsset[]>;
91
+ /**
92
+ * Transactions across all connected protocols. Parallel + per-protocol
93
+ * timeout, for the same reason as `listAllAssets`.
94
+ */
95
+ listAllTransactions(filter?: TransactionFilter): Promise<UnifiedTransaction[]>;
96
+ /** Race a per-protocol call against an 8s timeout. */
97
+ private withTimeout;
98
+ findAsset(assetId: string): Promise<UnifiedAsset | null>;
99
+ getPortfolioSummary(): Promise<{
100
+ totalAssets: number;
101
+ totalValue: number;
102
+ protocolBreakdown: Map<ProtocolType, {
103
+ assets: number;
104
+ value: number;
105
+ }>;
106
+ }>;
107
+ }
108
+ //# sourceMappingURL=ProtocolManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProtocolManager.d.ts","sourceRoot":"","sources":["../../src/manager/ProtocolManager.ts"],"names":[],"mappings":"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"}