@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,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,22 @@
1
+ /**
2
+ * Operation-level capability manifest.
3
+ * --------------------------------------
4
+ * Distinct from the differences-as-data `PROTOCOL_CAPABILITIES` record in
5
+ * `./index.ts` (which the router and lite/advanced UI read). This manifest is
6
+ * the list of concrete *operations* each protocol natively supports, exposed on
7
+ * every adapter via `IProtocolAdapter.capabilities` so the UI can gate actions
8
+ * before an adapter connects — without per-call-site network checks.
9
+ *
10
+ * Naming: `ProtocolCapability` / `PROTOCOL_OPERATIONS` here vs
11
+ * `ProtocolCapabilities` / `PROTOCOL_CAPABILITIES` in `./index.ts`. The two are
12
+ * deliberately different shapes; see the wallet-engine integration spec (A5).
13
+ *
14
+ * Provider-routed features (swaps) live outside this manifest — a swap venue
15
+ * may run over multiple protocols without each adapter implementing it.
16
+ */
17
+ import type { ProtocolType } from '../types/base.js';
18
+ export type ProtocolCapability = 'onchain-send' | 'onchain-receive' | 'lightning-send' | 'lightning-receive' | 'asset-send' | 'asset-receive' | 'rgb-invoice' | 'spark-transfer' | 'arkade-onboard' | 'arkade-offboard';
19
+ export declare const PROTOCOL_OPERATIONS: Record<ProtocolType, readonly ProtocolCapability[]>;
20
+ export declare function getProtocolOperations(protocol: ProtocolType): readonly ProtocolCapability[];
21
+ export declare function protocolSupportsOperation(protocol: ProtocolType, capability: ProtocolCapability): boolean;
22
+ //# sourceMappingURL=operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/capabilities/operations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAEjD,MAAM,MAAM,kBAAkB,GAC1B,cAAc,GACd,iBAAiB,GACjB,gBAAgB,GAChB,mBAAmB,GACnB,YAAY,GACZ,eAAe,GACf,aAAa,GACb,gBAAgB,GAChB,gBAAgB,GAChB,iBAAiB,CAAA;AAErB,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,YAAY,EAAE,SAAS,kBAAkB,EAAE,CA+BnF,CAAA;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,YAAY,GAAG,SAAS,kBAAkB,EAAE,CAE3F;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,YAAY,EACtB,UAAU,EAAE,kBAAkB,GAC7B,OAAO,CAET"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Operation-level capability manifest.
3
+ * --------------------------------------
4
+ * Distinct from the differences-as-data `PROTOCOL_CAPABILITIES` record in
5
+ * `./index.ts` (which the router and lite/advanced UI read). This manifest is
6
+ * the list of concrete *operations* each protocol natively supports, exposed on
7
+ * every adapter via `IProtocolAdapter.capabilities` so the UI can gate actions
8
+ * before an adapter connects — without per-call-site network checks.
9
+ *
10
+ * Naming: `ProtocolCapability` / `PROTOCOL_OPERATIONS` here vs
11
+ * `ProtocolCapabilities` / `PROTOCOL_CAPABILITIES` in `./index.ts`. The two are
12
+ * deliberately different shapes; see the wallet-engine integration spec (A5).
13
+ *
14
+ * Provider-routed features (swaps) live outside this manifest — a swap venue
15
+ * may run over multiple protocols without each adapter implementing it.
16
+ */
17
+ export const PROTOCOL_OPERATIONS = {
18
+ RGB: [
19
+ 'onchain-send',
20
+ 'onchain-receive',
21
+ 'lightning-send',
22
+ 'lightning-receive',
23
+ 'asset-send',
24
+ 'asset-receive',
25
+ 'rgb-invoice',
26
+ ],
27
+ SPARK: [
28
+ 'onchain-send',
29
+ 'onchain-receive',
30
+ 'lightning-send',
31
+ 'lightning-receive',
32
+ 'asset-send',
33
+ 'asset-receive',
34
+ 'spark-transfer',
35
+ ],
36
+ ARKADE: [
37
+ 'onchain-send',
38
+ 'onchain-receive',
39
+ 'lightning-send',
40
+ 'lightning-receive',
41
+ 'asset-send',
42
+ 'asset-receive',
43
+ 'arkade-onboard',
44
+ 'arkade-offboard',
45
+ ],
46
+ LIQUID: ['onchain-send', 'onchain-receive', 'asset-send', 'asset-receive'],
47
+ BTC: ['onchain-send', 'onchain-receive'],
48
+ };
49
+ export function getProtocolOperations(protocol) {
50
+ return PROTOCOL_OPERATIONS[protocol] ?? [];
51
+ }
52
+ export function protocolSupportsOperation(protocol, capability) {
53
+ return getProtocolOperations(protocol).includes(capability);
54
+ }
55
+ //# sourceMappingURL=operations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.js","sourceRoot":"","sources":["../../src/capabilities/operations.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAgBH,MAAM,CAAC,MAAM,mBAAmB,GAAwD;IACtF,GAAG,EAAE;QACH,cAAc;QACd,iBAAiB;QACjB,gBAAgB;QAChB,mBAAmB;QACnB,YAAY;QACZ,eAAe;QACf,aAAa;KACd;IACD,KAAK,EAAE;QACL,cAAc;QACd,iBAAiB;QACjB,gBAAgB;QAChB,mBAAmB;QACnB,YAAY;QACZ,eAAe;QACf,gBAAgB;KACjB;IACD,MAAM,EAAE;QACN,cAAc;QACd,iBAAiB;QACjB,gBAAgB;QAChB,mBAAmB;QACnB,YAAY;QACZ,eAAe;QACf,gBAAgB;QAChB,iBAAiB;KAClB;IACD,MAAM,EAAE,CAAC,cAAc,EAAE,iBAAiB,EAAE,YAAY,EAAE,eAAe,CAAC;IAC1E,GAAG,EAAE,CAAC,cAAc,EAAE,iBAAiB,CAAC;CACzC,CAAA;AAED,MAAM,UAAU,qBAAqB,CAAC,QAAsB;IAC1D,OAAO,mBAAmB,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;AAC5C,CAAC;AAED,MAAM,UAAU,yBAAyB,CACvC,QAAsB,EACtB,UAA8B;IAE9B,OAAO,qBAAqB,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAA;AAC7D,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Neutral, dependency-free constants shared across core (router, disclosure)
3
+ * and adapters. Kept here so core modules never import from an adapter module
4
+ * (which would pull adapter/SDK weight into the adapter-free main barrel).
5
+ */
6
+ /** Well-known Liquid mainnet Tether USD (USDt) asset id — the lite-mode "USD". */
7
+ export declare const LIQUID_USDT_ASSET_ID = "ce091c998b83c78bb71a632313ba3760f1763d9cfcffae02258ffa9865a37bd2";
8
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,kFAAkF;AAClF,eAAO,MAAM,oBAAoB,qEACmC,CAAA"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Neutral, dependency-free constants shared across core (router, disclosure)
3
+ * and adapters. Kept here so core modules never import from an adapter module
4
+ * (which would pull adapter/SDK weight into the adapter-free main barrel).
5
+ */
6
+ /** Well-known Liquid mainnet Tether USD (USDt) asset id — the lite-mode "USD". */
7
+ export const LIQUID_USDT_ASSET_ID = 'ce091c998b83c78bb71a632313ba3760f1763d9cfcffae02258ffa9865a37bd2';
8
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,kFAAkF;AAClF,MAAM,CAAC,MAAM,oBAAoB,GAC/B,kEAAkE,CAAA"}
@@ -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.js';
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"}
@@ -0,0 +1,64 @@
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 { LIQUID_USDT_ASSET_ID } from '../constants.js';
12
+ export function policyFor(level) {
13
+ if (level === 'advanced') {
14
+ return {
15
+ level,
16
+ showNetworks: true,
17
+ showRouteSelector: true,
18
+ showChannelManagement: true,
19
+ showExperimental: true,
20
+ showRawIds: true,
21
+ };
22
+ }
23
+ return {
24
+ level: 'lite',
25
+ showNetworks: false,
26
+ showRouteSelector: false,
27
+ showChannelManagement: false,
28
+ showExperimental: false,
29
+ showRawIds: false,
30
+ };
31
+ }
32
+ /**
33
+ * Lite-mode "USD" = USDt on Liquid (locked product decision).
34
+ * Used to relabel/aggregate the user-facing "USD" balance.
35
+ */
36
+ export const LITE_USD = {
37
+ protocol: 'LIQUID',
38
+ assetId: LIQUID_USDT_ASSET_ID,
39
+ displayTicker: 'USD',
40
+ };
41
+ export function liteBucketOf(asset) {
42
+ // All BTC representations (on-chain, LN, Spark, Arkade, L-BTC) collapse to one "BTC".
43
+ if (asset.ticker === 'BTC' || asset.ticker === 'L-BTC' || asset.id === 'BTC')
44
+ return 'BTC';
45
+ if (asset.id === LITE_USD.assetId || asset.ticker === 'USDt' || asset.ticker === 'USD')
46
+ return 'USD';
47
+ return 'OTHER';
48
+ }
49
+ export function aggregateForLite(assets) {
50
+ let btc = 0;
51
+ let usd = 0;
52
+ const other = [];
53
+ for (const a of assets) {
54
+ const bucket = liteBucketOf(a);
55
+ if (bucket === 'BTC')
56
+ btc += a.balance.total;
57
+ else if (bucket === 'USD')
58
+ usd += a.balance.total;
59
+ else
60
+ other.push(a);
61
+ }
62
+ return { btc, usd, other };
63
+ }
64
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/disclosure/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAkBnD,MAAM,UAAU,SAAS,CAAC,KAAsB;IAC9C,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;QACzB,OAAO;YACL,KAAK;YACL,YAAY,EAAE,IAAI;YAClB,iBAAiB,EAAE,IAAI;YACvB,qBAAqB,EAAE,IAAI;YAC3B,gBAAgB,EAAE,IAAI;YACtB,UAAU,EAAE,IAAI;SACjB,CAAA;IACH,CAAC;IACD,OAAO;QACL,KAAK,EAAE,MAAM;QACb,YAAY,EAAE,KAAK;QACnB,iBAAiB,EAAE,KAAK;QACxB,qBAAqB,EAAE,KAAK;QAC5B,gBAAgB,EAAE,KAAK;QACvB,UAAU,EAAE,KAAK;KAClB,CAAA;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,QAAQ,EAAE,QAAwB;IAClC,OAAO,EAAE,oBAAoB;IAC7B,aAAa,EAAE,KAAK;CACZ,CAAA;AAKV,MAAM,UAAU,YAAY,CAAC,KAAmB;IAC9C,sFAAsF;IACtF,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,IAAI,KAAK,CAAC,EAAE,KAAK,KAAK;QAAE,OAAO,KAAK,CAAA;IAC1F,IAAI,KAAK,CAAC,EAAE,KAAK,QAAQ,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,KAAK,MAAM,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK;QAAE,OAAO,KAAK,CAAA;IACpG,OAAO,OAAO,CAAA;AAChB,CAAC;AAcD,MAAM,UAAU,gBAAgB,CAAC,MAAsB;IACrD,IAAI,GAAG,GAAG,CAAC,CAAA;IACX,IAAI,GAAG,GAAG,CAAC,CAAA;IACX,MAAM,KAAK,GAAmB,EAAE,CAAA;IAChC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;QAC9B,IAAI,MAAM,KAAK,KAAK;YAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAA;aACvC,IAAI,MAAM,KAAK,KAAK;YAAE,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAA;;YAC5C,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACpB,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAA;AAC5B,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @kaleidorg/wallet-engine
3
+ * Shared wallet protocol adapters for Spark, Arkade, RGB, and Flashnet.
4
+ */
5
+ export * from './types/base.js';
6
+ export * from './types/cross-l2.js';
7
+ export type { SparkConfig, SparkTransfer, SparkLightningInvoice, SparkLightningSend, SparkNodeInfo } from './types/spark.js';
8
+ export type { ArkadeConfig, ArkadeVtxo, ArkadeBalance, ArkadeTransaction } from './types/arkade.js';
9
+ export type { RgbConfig, RgbAssetMetadata, RgbChannel, RgbInvoice, RgbTransfer, KaleidoswapQuote, RgbNodeInfo, TradingPair } from './types/rgb.js';
10
+ export * from './types/flashnet.js';
11
+ export { type IProtocolAdapter, type BaseProtocolConfig, type ProtocolConfig, type IProtocolAdapterFactory, ProtocolAdapterRegistry } from './adapters/IProtocolAdapter.js';
12
+ export { PROTOCOL_CAPABILITIES, getCapabilities, protocolsForLayer, type ProtocolCapabilities } from './capabilities/index.js';
13
+ export { PROTOCOL_OPERATIONS, getProtocolOperations, protocolSupportsOperation, type ProtocolCapability } from './capabilities/operations.js';
14
+ export type { IStorageProvider, IRuntimeProvider, PlatformContext } from './ports/index.js';
15
+ export { LIQUID_USDT_ASSET_ID } from './constants.js';
16
+ export { CrossProtocolRouter, type SendRoute, type SendResolution, type ReceiveRoute, } from './router/index.js';
17
+ export { classifyDestination, type ClassifiedDestination, type DestinationKind, } from './router/destination.js';
18
+ export { buildUnifiedReceiveURI, parseUnifiedReceiveURI, type UnifiedReceiveParams, } from './receive/unifiedReceive.js';
19
+ export { policyFor, liteBucketOf, aggregateForLite, LITE_USD, type DisclosureLevel, type DisclosurePolicy, type LiteBucket, type LiteBalances, } from './disclosure/index.js';
20
+ export { ProtocolManager, type ProtocolManagerConfig } from './manager/ProtocolManager.js';
21
+ export { networkTypeToProtocol, protocolToNetworkType } from './utils.js';
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAChC,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AACzH,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAChG,YAAY,EAAE,SAAS,EAAE,gBAAgB,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC/I,cAAc,kBAAkB,CAAA;AAGhC,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,kBAAkB,EAAE,KAAK,cAAc,EAAE,KAAK,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAA;AAGxK,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,iBAAiB,EAAE,KAAK,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAGrH,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,yBAAyB,EAAE,KAAK,kBAAkB,EAAE,MAAM,2BAA2B,CAAA;AAG1I,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAGlF,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAUlD,OAAO,EACL,mBAAmB,EACnB,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,YAAY,GAClB,MAAM,UAAU,CAAA;AACjB,OAAO,EACL,mBAAmB,EACnB,KAAK,qBAAqB,EAC1B,KAAK,eAAe,GACrB,MAAM,sBAAsB,CAAA;AAG7B,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,KAAK,oBAAoB,GAC1B,MAAM,0BAA0B,CAAA;AAGjC,OAAO,EACL,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,QAAQ,EACR,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,YAAY,GAClB,MAAM,cAAc,CAAA;AAGrB,OAAO,EAAE,eAAe,EAAE,KAAK,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AAGvF,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,34 @@
1
+ /**
2
+ * @kaleidorg/wallet-engine
3
+ * Shared wallet protocol adapters for Spark, Arkade, RGB, and Flashnet.
4
+ */
5
+ // Types
6
+ export * from './types/base.js';
7
+ export * from './types/cross-l2.js';
8
+ export * from './types/flashnet.js';
9
+ // Adapter interface
10
+ export { ProtocolAdapterRegistry } from './adapters/IProtocolAdapter.js';
11
+ // Capability manifest (differences-as-data backbone)
12
+ export { PROTOCOL_CAPABILITIES, getCapabilities, protocolsForLayer } from './capabilities/index.js';
13
+ // Operation-level capability manifest (per-adapter `capabilities` field)
14
+ export { PROTOCOL_OPERATIONS, getProtocolOperations, protocolSupportsOperation } from './capabilities/operations.js';
15
+ // Shared constants
16
+ export { LIQUID_USDT_ASSET_ID } from './constants.js';
17
+ // NOTE: adapters are deliberately NOT exported from this barrel — they pull
18
+ // heavy SDKs / WDK weight an extension host does not want. Import them from the
19
+ // opt-in sub-paths instead:
20
+ // @kaleidorg/wallet-engine/adapters/native (SDK-backed + client managers)
21
+ // @kaleidorg/wallet-engine/adapters/wdk (WDK-backed + createWdkRegistry)
22
+ // @kaleidorg/wallet-engine/swap (Kaleidoswap RFQ wrapper)
23
+ // Cross-protocol router (chooses BETWEEN protocols)
24
+ export { CrossProtocolRouter, } from './router/index.js';
25
+ export { classifyDestination, } from './router/destination.js';
26
+ // Unified receive QR (single BIP21 with embedded LN/Ark/Spark/Liquid/RGB)
27
+ export { buildUnifiedReceiveURI, parseUnifiedReceiveURI, } from './receive/unifiedReceive.js';
28
+ // Lite/Advanced disclosure model
29
+ export { policyFor, liteBucketOf, aggregateForLite, LITE_USD, } from './disclosure/index.js';
30
+ // Manager
31
+ export { ProtocolManager } from './manager/ProtocolManager.js';
32
+ // Utilities
33
+ export { networkTypeToProtocol, protocolToNetworkType } from './utils.js';
34
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,QAAQ;AACR,cAAc,cAAc,CAAA;AAC5B,cAAc,kBAAkB,CAAA;AAIhC,cAAc,kBAAkB,CAAA;AAEhC,oBAAoB;AACpB,OAAO,EAAqG,uBAAuB,EAAE,MAAM,6BAA6B,CAAA;AAExK,qDAAqD;AACrD,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,iBAAiB,EAA6B,MAAM,gBAAgB,CAAA;AAErH,yEAAyE;AACzE,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,yBAAyB,EAA2B,MAAM,2BAA2B,CAAA;AAK1I,mBAAmB;AACnB,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAElD,4EAA4E;AAC5E,gFAAgF;AAChF,4BAA4B;AAC5B,6EAA6E;AAC7E,+EAA+E;AAC/E,wEAAwE;AAExE,oDAAoD;AACpD,OAAO,EACL,mBAAmB,GAIpB,MAAM,UAAU,CAAA;AACjB,OAAO,EACL,mBAAmB,GAGpB,MAAM,sBAAsB,CAAA;AAE7B,0EAA0E;AAC1E,OAAO,EACL,sBAAsB,EACtB,sBAAsB,GAEvB,MAAM,0BAA0B,CAAA;AAEjC,iCAAiC;AACjC,OAAO,EACL,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,QAAQ,GAKT,MAAM,cAAc,CAAA;AAErB,UAAU;AACV,OAAO,EAAE,eAAe,EAA8B,MAAM,2BAA2B,CAAA;AAEvF,YAAY;AACZ,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Arkade Client Manager
3
+ * Manages the lifecycle of an Arkade wallet (@arkade-os/sdk).
4
+ * Platform-agnostic: storage/providers are injected by consumers.
5
+ * BIP86 key derivation via @scure/bip39 + @scure/bip32.
6
+ */
7
+ import type { ArkadeConfig } from '../types/arkade.js';
8
+ type ArkadeWallet = any;
9
+ /**
10
+ * Platform-specific providers injected by consumers.
11
+ */
12
+ export interface ArkadePlatformProviders {
13
+ createArkProvider?: () => any;
14
+ createIndexerProvider?: () => any;
15
+ createWalletRepository?: () => any;
16
+ createContractRepository?: () => any;
17
+ }
18
+ /**
19
+ * SDK factory injected by consumers.
20
+ * Consumers must call `setArkadeSdkFactory()` before `initialize()`.
21
+ */
22
+ export interface ArkadeSdkFactory {
23
+ createWallet: (config: any) => Promise<any>;
24
+ createIdentity: (privateKeyHex: string) => any;
25
+ }
26
+ declare class ArkadeClientManager {
27
+ private wallet;
28
+ private config;
29
+ private _initPromise;
30
+ private platformProviders;
31
+ private sdkFactory;
32
+ setPlatformProviders(providers: ArkadePlatformProviders): void;
33
+ /**
34
+ * Set the SDK factory before calling initialize().
35
+ * This avoids dynamic import() which breaks in some bundlers.
36
+ */
37
+ setSdkFactory(factory: ArkadeSdkFactory): void;
38
+ initialize(config: ArkadeConfig): Promise<void>;
39
+ private _doInitialize;
40
+ disconnect(): Promise<void>;
41
+ isInitialized(): boolean;
42
+ getWallet(): ArkadeWallet;
43
+ getConfig(): ArkadeConfig | null;
44
+ }
45
+ export declare const arkadeClientManager: ArkadeClientManager;
46
+ export {};
47
+ //# sourceMappingURL=arkade-client-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arkade-client-manager.d.ts","sourceRoot":"","sources":["../../src/lib/arkade-client-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAInD,KAAK,YAAY,GAAG,GAAG,CAAA;AAEvB;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,iBAAiB,CAAC,EAAE,MAAM,GAAG,CAAA;IAC7B,qBAAqB,CAAC,EAAE,MAAM,GAAG,CAAA;IACjC,sBAAsB,CAAC,EAAE,MAAM,GAAG,CAAA;IAClC,wBAAwB,CAAC,EAAE,MAAM,GAAG,CAAA;CACrC;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,CAAC,MAAM,EAAE,GAAG,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAC3C,cAAc,EAAE,CAAC,aAAa,EAAE,MAAM,KAAK,GAAG,CAAA;CAC/C;AAgBD,cAAM,mBAAmB;IACvB,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,YAAY,CAA6B;IACjD,OAAO,CAAC,iBAAiB,CAA8B;IACvD,OAAO,CAAC,UAAU,CAAgC;IAElD,oBAAoB,CAAC,SAAS,EAAE,uBAAuB,GAAG,IAAI;IAI9D;;;OAGG;IACH,aAAa,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAI9C,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;YASjC,aAAa;IAkErB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAKjC,aAAa,IAAI,OAAO;IAIxB,SAAS,IAAI,YAAY;IAOzB,SAAS,IAAI,YAAY,GAAG,IAAI;CAGjC;AAED,eAAO,MAAM,mBAAmB,qBAA4B,CAAA"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Arkade Client Manager
3
+ * Manages the lifecycle of an Arkade wallet (@arkade-os/sdk).
4
+ * Platform-agnostic: storage/providers are injected by consumers.
5
+ * BIP86 key derivation via @scure/bip39 + @scure/bip32.
6
+ */
7
+ import { mnemonicToSeedSync } from '@scure/bip39';
8
+ import { HDKey } from '@scure/bip32';
9
+ function derivePrivateKeyFromMnemonic(mnemonic, isMainnet) {
10
+ const seed = mnemonicToSeedSync(mnemonic);
11
+ const root = HDKey.fromMasterSeed(seed);
12
+ const coinType = isMainnet ? 0 : 1;
13
+ const child = root.derive(`m/86'/${coinType}'/0'/0/0`);
14
+ if (!child.privateKey) {
15
+ throw new Error('Failed to derive private key from mnemonic');
16
+ }
17
+ return Array.from(child.privateKey).map(b => b.toString(16).padStart(2, '0')).join('');
18
+ }
19
+ class ArkadeClientManager {
20
+ constructor() {
21
+ this.wallet = null;
22
+ this.config = null;
23
+ this._initPromise = null;
24
+ this.platformProviders = {};
25
+ this.sdkFactory = null;
26
+ }
27
+ setPlatformProviders(providers) {
28
+ this.platformProviders = providers;
29
+ }
30
+ /**
31
+ * Set the SDK factory before calling initialize().
32
+ * This avoids dynamic import() which breaks in some bundlers.
33
+ */
34
+ setSdkFactory(factory) {
35
+ this.sdkFactory = factory;
36
+ }
37
+ initialize(config) {
38
+ if (this._initPromise)
39
+ return this._initPromise;
40
+ this._initPromise = this._doInitialize(config).finally(() => {
41
+ this._initPromise = null;
42
+ });
43
+ return this._initPromise;
44
+ }
45
+ async _doInitialize(config) {
46
+ if (this.wallet) {
47
+ console.warn('[ArkadeClientManager] Wallet already initialized, re-initializing...');
48
+ await this.disconnect();
49
+ }
50
+ try {
51
+ const isMainnet = config.network === 'mainnet';
52
+ const privateKeyHex = derivePrivateKeyFromMnemonic(config.mnemonic, isMainnet);
53
+ const arkServerUrl = config.arkServerUrl;
54
+ const walletConfig = {
55
+ arkServerUrl,
56
+ };
57
+ // Only pass esploraUrl if explicitly configured (SDK defaults to mempool.space)
58
+ if (config.esploraUrl) {
59
+ walletConfig.esploraUrl = config.esploraUrl;
60
+ }
61
+ // Storage repositories (IndexedDB for extension, AsyncStorage for RN)
62
+ const storage = {};
63
+ if (this.platformProviders.createWalletRepository) {
64
+ storage.walletRepository = this.platformProviders.createWalletRepository();
65
+ }
66
+ if (this.platformProviders.createContractRepository) {
67
+ storage.contractRepository = this.platformProviders.createContractRepository();
68
+ }
69
+ if (Object.keys(storage).length > 0) {
70
+ walletConfig.storage = storage;
71
+ }
72
+ // Settlement config (VTXO lifecycle)
73
+ walletConfig.settlementConfig = {
74
+ vtxoThreshold: config.vtxoThresholdSeconds ?? 259200, // 3 days default
75
+ boardingUtxoSweep: true,
76
+ pollIntervalMs: 60000,
77
+ };
78
+ // Platform-specific providers
79
+ if (this.platformProviders.createArkProvider) {
80
+ walletConfig.arkProvider = this.platformProviders.createArkProvider();
81
+ }
82
+ if (this.platformProviders.createIndexerProvider) {
83
+ walletConfig.indexerProvider = this.platformProviders.createIndexerProvider();
84
+ }
85
+ if (this.sdkFactory) {
86
+ walletConfig.identity = this.sdkFactory.createIdentity(privateKeyHex);
87
+ this.wallet = await this.sdkFactory.createWallet(walletConfig);
88
+ }
89
+ else {
90
+ const { Wallet, SingleKey } = await import('@arkade-os/sdk');
91
+ walletConfig.identity = SingleKey.fromHex(privateKeyHex);
92
+ this.wallet = await Wallet.create(walletConfig);
93
+ }
94
+ this.config = config;
95
+ console.log('[ArkadeClientManager] Arkade wallet initialized, network:', config.network || 'signet');
96
+ }
97
+ catch (error) {
98
+ this.wallet = null;
99
+ const msg = error instanceof Error ? error.message : String(error);
100
+ throw new Error(`Failed to initialize Arkade wallet: ${msg}`);
101
+ }
102
+ }
103
+ async disconnect() {
104
+ this.wallet = null;
105
+ this.config = null;
106
+ }
107
+ isInitialized() {
108
+ return this.wallet !== null;
109
+ }
110
+ getWallet() {
111
+ if (!this.wallet) {
112
+ throw new Error('[ArkadeClientManager] Wallet not initialized');
113
+ }
114
+ return this.wallet;
115
+ }
116
+ getConfig() {
117
+ return this.config;
118
+ }
119
+ }
120
+ export const arkadeClientManager = new ArkadeClientManager();
121
+ //# sourceMappingURL=arkade-client-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arkade-client-manager.js","sourceRoot":"","sources":["../../src/lib/arkade-client-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
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
+ export interface Bolt11Summary {
10
+ /** Amount in satoshis, if the invoice encodes one (open invoices omit it). */
11
+ amountSat?: number;
12
+ /** Network token from the HRP: bc | tb | tbs | bcrt. */
13
+ network: string;
14
+ }
15
+ /** Parse a BOLT11 invoice's HRP for amount + network. Returns network 'unknown' if not BOLT11. */
16
+ export declare function decodeBolt11(invoice: string): Bolt11Summary;
17
+ export declare function isBolt11(s: string): boolean;
18
+ //# sourceMappingURL=bolt11.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bolt11.d.ts","sourceRoot":"","sources":["../../src/lib/bolt11.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,MAAM,WAAW,aAAa;IAC5B,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wDAAwD;IACxD,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,kGAAkG;AAClG,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa,CAc3D;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAE3C"}