@kaleidorg/wallet-engine 1.0.0-beta.4 → 1.0.0-beta.42

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 (242) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +29 -10
  3. package/dist/adapters/ArkadeAdapter.d.ts +78 -14
  4. package/dist/adapters/ArkadeAdapter.d.ts.map +1 -1
  5. package/dist/adapters/ArkadeAdapter.js +653 -161
  6. package/dist/adapters/ArkadeAdapter.js.map +1 -1
  7. package/dist/adapters/IProtocolAdapter.d.ts +195 -18
  8. package/dist/adapters/IProtocolAdapter.d.ts.map +1 -1
  9. package/dist/adapters/IProtocolAdapter.js +6 -2
  10. package/dist/adapters/IProtocolAdapter.js.map +1 -1
  11. package/dist/adapters/RgbAdapter.d.ts +70 -27
  12. package/dist/adapters/RgbAdapter.d.ts.map +1 -1
  13. package/dist/adapters/RgbAdapter.js +464 -370
  14. package/dist/adapters/RgbAdapter.js.map +1 -1
  15. package/dist/adapters/SparkAdapter.d.ts +93 -15
  16. package/dist/adapters/SparkAdapter.d.ts.map +1 -1
  17. package/dist/adapters/SparkAdapter.js +833 -168
  18. package/dist/adapters/SparkAdapter.js.map +1 -1
  19. package/dist/adapters/arkade.d.ts +15 -0
  20. package/dist/adapters/arkade.d.ts.map +1 -0
  21. package/dist/adapters/arkade.js +15 -0
  22. package/dist/adapters/arkade.js.map +1 -0
  23. package/dist/adapters/flashnet.d.ts +15 -0
  24. package/dist/adapters/flashnet.d.ts.map +1 -0
  25. package/dist/adapters/flashnet.js +17 -0
  26. package/dist/adapters/flashnet.js.map +1 -0
  27. package/dist/adapters/native.d.ts +17 -0
  28. package/dist/adapters/native.d.ts.map +1 -0
  29. package/dist/adapters/native.js +17 -0
  30. package/dist/adapters/native.js.map +1 -0
  31. package/dist/adapters/rgb.d.ts +11 -0
  32. package/dist/adapters/rgb.d.ts.map +1 -0
  33. package/dist/adapters/rgb.js +11 -0
  34. package/dist/adapters/rgb.js.map +1 -0
  35. package/dist/adapters/spark.d.ts +12 -0
  36. package/dist/adapters/spark.d.ts.map +1 -0
  37. package/dist/adapters/spark.js +14 -0
  38. package/dist/adapters/spark.js.map +1 -0
  39. package/dist/adapters/wdk/ArkadeWdkAdapter.d.ts +53 -19
  40. package/dist/adapters/wdk/ArkadeWdkAdapter.d.ts.map +1 -1
  41. package/dist/adapters/wdk/ArkadeWdkAdapter.js +366 -90
  42. package/dist/adapters/wdk/ArkadeWdkAdapter.js.map +1 -1
  43. package/dist/adapters/wdk/BaseWdkAdapter.d.ts +40 -0
  44. package/dist/adapters/wdk/BaseWdkAdapter.d.ts.map +1 -0
  45. package/dist/adapters/wdk/BaseWdkAdapter.js +71 -0
  46. package/dist/adapters/wdk/BaseWdkAdapter.js.map +1 -0
  47. package/dist/adapters/wdk/LiquidWdkAdapter.d.ts +6 -13
  48. package/dist/adapters/wdk/LiquidWdkAdapter.d.ts.map +1 -1
  49. package/dist/adapters/wdk/LiquidWdkAdapter.js +14 -32
  50. package/dist/adapters/wdk/LiquidWdkAdapter.js.map +1 -1
  51. package/dist/adapters/wdk/RgbCore.d.ts +64 -0
  52. package/dist/adapters/wdk/RgbCore.d.ts.map +1 -0
  53. package/dist/adapters/wdk/RgbCore.js +111 -0
  54. package/dist/adapters/wdk/RgbCore.js.map +1 -0
  55. package/dist/adapters/wdk/RgbLibWasmAdapter.d.ts +277 -0
  56. package/dist/adapters/wdk/RgbLibWasmAdapter.d.ts.map +1 -0
  57. package/dist/adapters/wdk/RgbLibWasmAdapter.js +731 -0
  58. package/dist/adapters/wdk/RgbLibWasmAdapter.js.map +1 -0
  59. package/dist/adapters/wdk/RgbLibWdkAdapter.d.ts +104 -0
  60. package/dist/adapters/wdk/RgbLibWdkAdapter.d.ts.map +1 -0
  61. package/dist/adapters/wdk/RgbLibWdkAdapter.js +249 -0
  62. package/dist/adapters/wdk/RgbLibWdkAdapter.js.map +1 -0
  63. package/dist/adapters/wdk/RlnWdkAdapter.d.ts +27 -14
  64. package/dist/adapters/wdk/RlnWdkAdapter.d.ts.map +1 -1
  65. package/dist/adapters/wdk/RlnWdkAdapter.js +124 -89
  66. package/dist/adapters/wdk/RlnWdkAdapter.js.map +1 -1
  67. package/dist/adapters/wdk/SparkWdkAdapter.d.ts +74 -41
  68. package/dist/adapters/wdk/SparkWdkAdapter.d.ts.map +1 -1
  69. package/dist/adapters/wdk/SparkWdkAdapter.js +706 -249
  70. package/dist/adapters/wdk/SparkWdkAdapter.js.map +1 -1
  71. package/dist/adapters/wdk/index.d.ts +17 -0
  72. package/dist/adapters/wdk/index.d.ts.map +1 -0
  73. package/dist/adapters/wdk/index.js +17 -0
  74. package/dist/adapters/wdk/index.js.map +1 -0
  75. package/dist/adapters/wdk/wasm-rgb.d.ts +15 -0
  76. package/dist/adapters/wdk/wasm-rgb.d.ts.map +1 -0
  77. package/dist/adapters/wdk/wasm-rgb.js +15 -0
  78. package/dist/adapters/wdk/wasm-rgb.js.map +1 -0
  79. package/dist/capabilities/index.d.ts +1 -1
  80. package/dist/capabilities/index.d.ts.map +1 -1
  81. package/dist/capabilities/index.js +17 -2
  82. package/dist/capabilities/index.js.map +1 -1
  83. package/dist/capabilities/operations.d.ts +22 -0
  84. package/dist/capabilities/operations.d.ts.map +1 -0
  85. package/dist/capabilities/operations.js +62 -0
  86. package/dist/capabilities/operations.js.map +1 -0
  87. package/dist/constants.d.ts +8 -0
  88. package/dist/constants.d.ts.map +1 -0
  89. package/dist/constants.js +8 -0
  90. package/dist/constants.js.map +1 -0
  91. package/dist/disclosure/index.d.ts +1 -1
  92. package/dist/disclosure/index.js +1 -1
  93. package/dist/disclosure/index.js.map +1 -1
  94. package/dist/format.d.ts +11 -0
  95. package/dist/format.d.ts.map +1 -0
  96. package/dist/format.js +10 -0
  97. package/dist/format.js.map +1 -0
  98. package/dist/index.d.ts +21 -31
  99. package/dist/index.d.ts.map +1 -1
  100. package/dist/index.js +32 -32
  101. package/dist/index.js.map +1 -1
  102. package/dist/lib/arkade-client-manager.d.ts +64 -24
  103. package/dist/lib/arkade-client-manager.d.ts.map +1 -1
  104. package/dist/lib/arkade-client-manager.js +240 -65
  105. package/dist/lib/arkade-client-manager.js.map +1 -1
  106. package/dist/lib/arkade-converters.d.ts +39 -0
  107. package/dist/lib/arkade-converters.d.ts.map +1 -0
  108. package/dist/lib/arkade-converters.js +148 -0
  109. package/dist/lib/arkade-converters.js.map +1 -0
  110. package/dist/lib/arkade-helpers.d.ts +110 -0
  111. package/dist/lib/arkade-helpers.d.ts.map +1 -0
  112. package/dist/lib/arkade-helpers.js +227 -0
  113. package/dist/lib/arkade-helpers.js.map +1 -0
  114. package/dist/lib/arkade-swaps-client-manager.d.ts +55 -0
  115. package/dist/lib/arkade-swaps-client-manager.d.ts.map +1 -0
  116. package/dist/lib/arkade-swaps-client-manager.js +127 -0
  117. package/dist/lib/arkade-swaps-client-manager.js.map +1 -0
  118. package/dist/lib/arkade-vtxo-lifecycle.d.ts +116 -0
  119. package/dist/lib/arkade-vtxo-lifecycle.d.ts.map +1 -0
  120. package/dist/lib/arkade-vtxo-lifecycle.js +184 -0
  121. package/dist/lib/arkade-vtxo-lifecycle.js.map +1 -0
  122. package/dist/lib/flashnet-client-manager.d.ts +26 -9
  123. package/dist/lib/flashnet-client-manager.d.ts.map +1 -1
  124. package/dist/lib/flashnet-client-manager.js +97 -13
  125. package/dist/lib/flashnet-client-manager.js.map +1 -1
  126. package/dist/lib/kaleido-client-manager.d.ts +38 -3
  127. package/dist/lib/kaleido-client-manager.d.ts.map +1 -1
  128. package/dist/lib/kaleido-client-manager.js +79 -10
  129. package/dist/lib/kaleido-client-manager.js.map +1 -1
  130. package/dist/lib/ln-message-sign.d.ts +20 -0
  131. package/dist/lib/ln-message-sign.d.ts.map +1 -0
  132. package/dist/lib/ln-message-sign.js +90 -0
  133. package/dist/lib/ln-message-sign.js.map +1 -0
  134. package/dist/lib/log.d.ts +15 -0
  135. package/dist/lib/log.d.ts.map +1 -0
  136. package/dist/lib/log.js +16 -0
  137. package/dist/lib/log.js.map +1 -0
  138. package/dist/lib/orchestra-client.d.ts +149 -0
  139. package/dist/lib/orchestra-client.d.ts.map +1 -0
  140. package/dist/lib/orchestra-client.js +178 -0
  141. package/dist/lib/orchestra-client.js.map +1 -0
  142. package/dist/lib/psbt-signer.d.ts +60 -0
  143. package/dist/lib/psbt-signer.d.ts.map +1 -0
  144. package/dist/lib/psbt-signer.js +161 -0
  145. package/dist/lib/psbt-signer.js.map +1 -0
  146. package/dist/lib/rgb-converters.d.ts +62 -0
  147. package/dist/lib/rgb-converters.d.ts.map +1 -0
  148. package/dist/lib/rgb-converters.js +179 -0
  149. package/dist/lib/rgb-converters.js.map +1 -0
  150. package/dist/lib/rgb-fee-policy.d.ts +41 -0
  151. package/dist/lib/rgb-fee-policy.d.ts.map +1 -0
  152. package/dist/lib/rgb-fee-policy.js +52 -0
  153. package/dist/lib/rgb-fee-policy.js.map +1 -0
  154. package/dist/lib/rgb-helpers.d.ts +54 -0
  155. package/dist/lib/rgb-helpers.d.ts.map +1 -0
  156. package/dist/lib/rgb-helpers.js +89 -0
  157. package/dist/lib/rgb-helpers.js.map +1 -0
  158. package/dist/lib/spark-activity.d.ts +5 -0
  159. package/dist/lib/spark-activity.d.ts.map +1 -0
  160. package/dist/lib/spark-activity.js +11 -0
  161. package/dist/lib/spark-activity.js.map +1 -0
  162. package/dist/lib/spark-balance-cache.d.ts +58 -0
  163. package/dist/lib/spark-balance-cache.d.ts.map +1 -0
  164. package/dist/lib/spark-balance-cache.js +86 -0
  165. package/dist/lib/spark-balance-cache.js.map +1 -0
  166. package/dist/lib/spark-client-manager.d.ts +64 -10
  167. package/dist/lib/spark-client-manager.d.ts.map +1 -1
  168. package/dist/lib/spark-client-manager.js +191 -35
  169. package/dist/lib/spark-client-manager.js.map +1 -1
  170. package/dist/lib/spark-converters.d.ts +64 -0
  171. package/dist/lib/spark-converters.d.ts.map +1 -0
  172. package/dist/lib/spark-converters.js +242 -0
  173. package/dist/lib/spark-converters.js.map +1 -0
  174. package/dist/lib/spark-helpers.d.ts +72 -0
  175. package/dist/lib/spark-helpers.d.ts.map +1 -0
  176. package/dist/lib/spark-helpers.js +151 -0
  177. package/dist/lib/spark-helpers.js.map +1 -0
  178. package/dist/lib/spark-sent-token-records.d.ts +43 -0
  179. package/dist/lib/spark-sent-token-records.d.ts.map +1 -0
  180. package/dist/lib/spark-sent-token-records.js +105 -0
  181. package/dist/lib/spark-sent-token-records.js.map +1 -0
  182. package/dist/lib/wallet-seed.d.ts +31 -0
  183. package/dist/lib/wallet-seed.d.ts.map +1 -0
  184. package/dist/lib/wallet-seed.js +58 -0
  185. package/dist/lib/wallet-seed.js.map +1 -0
  186. package/dist/lib/zbase32.d.ts +3 -0
  187. package/dist/lib/zbase32.d.ts.map +1 -0
  188. package/dist/lib/zbase32.js +64 -0
  189. package/dist/lib/zbase32.js.map +1 -0
  190. package/dist/manager/ProtocolManager.d.ts +54 -3
  191. package/dist/manager/ProtocolManager.d.ts.map +1 -1
  192. package/dist/manager/ProtocolManager.js +118 -41
  193. package/dist/manager/ProtocolManager.js.map +1 -1
  194. package/dist/ports/index.d.ts +20 -0
  195. package/dist/ports/index.d.ts.map +1 -1
  196. package/dist/ports/index.js +23 -1
  197. package/dist/ports/index.js.map +1 -1
  198. package/dist/receive/unifiedReceive.d.ts +12 -0
  199. package/dist/receive/unifiedReceive.d.ts.map +1 -1
  200. package/dist/receive/unifiedReceive.js +35 -4
  201. package/dist/receive/unifiedReceive.js.map +1 -1
  202. package/dist/registry/createWdkRegistry.d.ts +10 -2
  203. package/dist/registry/createWdkRegistry.d.ts.map +1 -1
  204. package/dist/registry/createWdkRegistry.js +14 -7
  205. package/dist/registry/createWdkRegistry.js.map +1 -1
  206. package/dist/router/destination.d.ts +2 -2
  207. package/dist/router/destination.d.ts.map +1 -1
  208. package/dist/router/destination.js +34 -11
  209. package/dist/router/destination.js.map +1 -1
  210. package/dist/router/index.d.ts +39 -3
  211. package/dist/router/index.d.ts.map +1 -1
  212. package/dist/router/index.js +113 -4
  213. package/dist/router/index.js.map +1 -1
  214. package/dist/router/preference.d.ts +53 -0
  215. package/dist/router/preference.d.ts.map +1 -0
  216. package/dist/router/preference.js +81 -0
  217. package/dist/router/preference.js.map +1 -0
  218. package/dist/swap/KaleidoswapSwap.d.ts +1 -1
  219. package/dist/swap/KaleidoswapSwap.d.ts.map +1 -1
  220. package/dist/swap/KaleidoswapSwap.js +37 -20
  221. package/dist/swap/KaleidoswapSwap.js.map +1 -1
  222. package/dist/swap/index.d.ts +8 -0
  223. package/dist/swap/index.d.ts.map +1 -0
  224. package/dist/swap/index.js +8 -0
  225. package/dist/swap/index.js.map +1 -0
  226. package/dist/types/arkade.d.ts +1 -1
  227. package/dist/types/base.d.ts +35 -25
  228. package/dist/types/base.d.ts.map +1 -1
  229. package/dist/types/base.js +28 -2
  230. package/dist/types/base.js.map +1 -1
  231. package/dist/types/cross-l2.d.ts +1 -1
  232. package/dist/types/flashnet.d.ts +20 -0
  233. package/dist/types/flashnet.d.ts.map +1 -1
  234. package/dist/types/flashnet.js +34 -6
  235. package/dist/types/flashnet.js.map +1 -1
  236. package/dist/types/rgb.d.ts +18 -4
  237. package/dist/types/rgb.d.ts.map +1 -1
  238. package/dist/types/spark.d.ts +1 -1
  239. package/dist/utils.d.ts +1 -1
  240. package/dist/utils.js +2 -2
  241. package/dist/utils.js.map +1 -1
  242. package/package.json +68 -14
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Flashnet Orchestra REST API Client
3
+ *
4
+ * Cross-chain swap orchestration: stablecoins (USDC/USDT) and native assets
5
+ * (ETH/SOL/TRX) on EVM/Solana/Tron ↔ BTC/USDB on Spark.
6
+ *
7
+ * API docs: https://docs.flashnet.xyz/products/orchestration/overview
8
+ * Base URL: https://orchestration.flashnet.xyz
9
+ *
10
+ * Ported from rate-extension/src/protocols/spark/orchestra-client.ts. The API
11
+ * key is NOT read from a build-time env var here — the engine is platform-
12
+ * agnostic, so the consumer injects it once at startup via `setOrchestraApiKey()`
13
+ * (the extension supplies its inlined `VITE_FLASHNET_ORCHESTRA_KEY`).
14
+ */
15
+ /**
16
+ * Register the Orchestra API key. Call once at startup. Warns if given an
17
+ * empty value so a misconfigured build is obvious instead of surfacing as a
18
+ * runtime 401 that looks like a network failure.
19
+ */
20
+ export declare function setOrchestraApiKey(key: string | null | undefined): void;
21
+ /**
22
+ * Stable marker embedded in the auth-error message. Only `Error.message`
23
+ * survives the background-SW → UI message boundary (see background-protocol.ts:
24
+ * `sendResponse({ error: error?.message })`), so the UI matches on this token
25
+ * rather than `instanceof OrchestraAuthError`.
26
+ */
27
+ export declare const ORCHESTRA_AUTH_ERROR_CODE = "ORCHESTRA_AUTH_FAILED";
28
+ /**
29
+ * Thrown when an authed Orchestra call fails due to a missing/invalid API key
30
+ * (HTTP 401/403). Callers can detect this to show a "Bridge unavailable /
31
+ * not configured" message instead of a generic "Quote failed".
32
+ */
33
+ export declare class OrchestraAuthError extends Error {
34
+ readonly status: number;
35
+ constructor(status: number);
36
+ }
37
+ export interface OrchestraRouteAsset {
38
+ chain: string;
39
+ asset: string;
40
+ contractAddress?: string;
41
+ decimals: number;
42
+ chainId?: number;
43
+ }
44
+ export interface OrchestraRoute {
45
+ sourceChain: string;
46
+ sourceAsset: string;
47
+ destinationChain: string;
48
+ destinationAsset: string;
49
+ source?: OrchestraRouteAsset;
50
+ destination?: OrchestraRouteAsset;
51
+ }
52
+ export interface OrchestraEstimate {
53
+ estimatedOut: string;
54
+ feeAmount: string;
55
+ feeBps: number;
56
+ totalFeeAmount: string;
57
+ feeAsset: string;
58
+ route: OrchestraRoute;
59
+ }
60
+ export interface OrchestraQuote {
61
+ quoteId: string;
62
+ depositAddress: string;
63
+ amountIn: string;
64
+ estimatedOut: string;
65
+ feeAmount: string;
66
+ feeBps: number;
67
+ totalFeeAmount: string;
68
+ feeAsset: string;
69
+ route: OrchestraRoute;
70
+ expiresAt: string;
71
+ }
72
+ export type OrchestraOrderStatus = 'processing' | 'confirming' | 'bridging' | 'swapping' | 'awaiting_approval' | 'refunding' | 'delivering' | 'completed' | 'failed' | 'refunded';
73
+ export interface OrchestraOrderStage {
74
+ stage: string;
75
+ timestamp: string;
76
+ }
77
+ export interface OrchestraOrder {
78
+ id: string;
79
+ quoteId: string;
80
+ status: OrchestraOrderStatus;
81
+ amountIn?: string;
82
+ amountOut?: string;
83
+ depositAddress?: string;
84
+ recipientAddress?: string;
85
+ route?: OrchestraRoute;
86
+ stages?: OrchestraOrderStage[];
87
+ createdAt?: string;
88
+ updatedAt?: string;
89
+ }
90
+ export interface OrchestraOrderLookup {
91
+ quote: OrchestraQuote | null;
92
+ order: OrchestraOrder | null;
93
+ stages?: OrchestraOrderStage[];
94
+ }
95
+ export interface CreateQuoteParams {
96
+ sourceChain: string;
97
+ sourceAsset: string;
98
+ destinationChain: string;
99
+ destinationAsset: string;
100
+ amount: string;
101
+ recipientAddress: string;
102
+ slippageBps?: number;
103
+ }
104
+ export interface SubmitOrderParams {
105
+ quoteId: string;
106
+ txHash?: string;
107
+ sourceAddress?: string;
108
+ sparkTxHash?: string;
109
+ sourceSparkAddress?: string;
110
+ bitcoinTxid?: string;
111
+ bitcoinVout?: number;
112
+ }
113
+ export interface EstimateParams {
114
+ sourceChain: string;
115
+ sourceAsset: string;
116
+ destinationChain: string;
117
+ destinationAsset: string;
118
+ amount: string;
119
+ }
120
+ /** List all available cross-chain routes. No auth required. */
121
+ export declare function getRoutes(): Promise<OrchestraRoute[]>;
122
+ /** Get a lightweight price estimate. No auth required. */
123
+ export declare function getEstimate(params: EstimateParams): Promise<OrchestraEstimate>;
124
+ /** Create a durable quote with deposit address. Auth required. TTL ~30 min. */
125
+ export declare function createQuote(params: CreateQuoteParams): Promise<OrchestraQuote>;
126
+ /** Look up a quote and its associated order (if any). Auth required. */
127
+ export declare function getOrder(quoteId: string): Promise<OrchestraOrderLookup>;
128
+ /** Submit deposit proof to create an order from a quote. Auth required. */
129
+ export declare function submitOrder(params: SubmitOrderParams): Promise<{
130
+ orderId: string;
131
+ status: string;
132
+ }>;
133
+ /**
134
+ * Check order status by ID, quoteId, or txHash.
135
+ *
136
+ * The Flashnet orchestration `/v1/orchestration/status` endpoint historically
137
+ * returned a flat `OrchestraOrder`, but the live API now wraps the response
138
+ * as `{ order: OrchestraOrder, stages?: OrchestraOrderStage[] }` (same shape
139
+ * as `/order`). Both forms have been observed in the wild — we unwrap defensively
140
+ * so the bridge tracking poller sees a real `status` field either way.
141
+ * Without this, `status` is `undefined`, the poller silently keeps showing
142
+ * the stale local status (e.g. "swapping") even after the order completes.
143
+ */
144
+ export declare function getStatus(query: {
145
+ id?: string;
146
+ quoteId?: string;
147
+ txHash?: string;
148
+ }): Promise<OrchestraOrder>;
149
+ //# sourceMappingURL=orchestra-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestra-client.d.ts","sourceRoot":"","sources":["../../src/lib/orchestra-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Flashnet Orchestra REST API Client
3
+ *
4
+ * Cross-chain swap orchestration: stablecoins (USDC/USDT) and native assets
5
+ * (ETH/SOL/TRX) on EVM/Solana/Tron ↔ BTC/USDB on Spark.
6
+ *
7
+ * API docs: https://docs.flashnet.xyz/products/orchestration/overview
8
+ * Base URL: https://orchestration.flashnet.xyz
9
+ *
10
+ * Ported from rate-extension/src/protocols/spark/orchestra-client.ts. The API
11
+ * key is NOT read from a build-time env var here — the engine is platform-
12
+ * agnostic, so the consumer injects it once at startup via `setOrchestraApiKey()`
13
+ * (the extension supplies its inlined `VITE_FLASHNET_ORCHESTRA_KEY`).
14
+ */
15
+ import { log } from './log.js';
16
+ const BASE_URL = 'https://orchestration.flashnet.xyz';
17
+ /**
18
+ * Orchestra API key, injected by the consumer. PUBLIC-by-design in the
19
+ * extension (shipped in the bundle) — the seam simply keeps the build-time
20
+ * env-var read out of the engine. Empty until `setOrchestraApiKey()` runs;
21
+ * every authed endpoint (createQuote/getOrder/submitOrder/getStatus) 401s
22
+ * without it.
23
+ */
24
+ let apiKey = '';
25
+ /**
26
+ * Register the Orchestra API key. Call once at startup. Warns if given an
27
+ * empty value so a misconfigured build is obvious instead of surfacing as a
28
+ * runtime 401 that looks like a network failure.
29
+ */
30
+ export function setOrchestraApiKey(key) {
31
+ apiKey = key ?? '';
32
+ if (!apiKey) {
33
+ log.warn('[Orchestra] API key is empty — Bridge quote/submit calls will fail with HTTP 401. ' +
34
+ 'Pass a key to setOrchestraApiKey() at startup.');
35
+ }
36
+ }
37
+ /**
38
+ * Stable marker embedded in the auth-error message. Only `Error.message`
39
+ * survives the background-SW → UI message boundary (see background-protocol.ts:
40
+ * `sendResponse({ error: error?.message })`), so the UI matches on this token
41
+ * rather than `instanceof OrchestraAuthError`.
42
+ */
43
+ export const ORCHESTRA_AUTH_ERROR_CODE = 'ORCHESTRA_AUTH_FAILED';
44
+ /**
45
+ * Thrown when an authed Orchestra call fails due to a missing/invalid API key
46
+ * (HTTP 401/403). Callers can detect this to show a "Bridge unavailable /
47
+ * not configured" message instead of a generic "Quote failed".
48
+ */
49
+ export class OrchestraAuthError extends Error {
50
+ constructor(status) {
51
+ super(`${ORCHESTRA_AUTH_ERROR_CODE}: Bridge is not configured or unavailable. ` +
52
+ 'The cross-chain service rejected the request (authentication failed).');
53
+ this.name = 'OrchestraAuthError';
54
+ this.status = status;
55
+ }
56
+ }
57
+ // ---------------------------------------------------------------------------
58
+ // Client
59
+ // ---------------------------------------------------------------------------
60
+ function authHeaders() {
61
+ if (!apiKey)
62
+ return {};
63
+ return { Authorization: `Bearer ${apiKey}` };
64
+ }
65
+ function idempotencyHeader(prefix) {
66
+ return { 'X-Idempotency-Key': `${prefix}:${crypto.randomUUID()}` };
67
+ }
68
+ async function request(method, path, opts) {
69
+ const url = new URL(path, BASE_URL);
70
+ if (opts?.params) {
71
+ for (const [k, v] of Object.entries(opts.params)) {
72
+ if (v !== undefined)
73
+ url.searchParams.set(k, v);
74
+ }
75
+ }
76
+ const headers = { 'Content-Type': 'application/json' };
77
+ if (opts?.auth)
78
+ Object.assign(headers, authHeaders());
79
+ if (opts?.idempotency)
80
+ Object.assign(headers, idempotencyHeader(opts.idempotency));
81
+ const res = await fetch(url.toString(), {
82
+ method,
83
+ headers,
84
+ body: opts?.body ? JSON.stringify(opts.body) : undefined,
85
+ });
86
+ if (!res.ok) {
87
+ const text = await res.text().catch(() => '');
88
+ // An auth failure on an authed call almost always means the API key was
89
+ // not injected (or is invalid). Throw a specific error so the UI can
90
+ // distinguish "Bridge not configured" from a transient quote error.
91
+ if (opts?.auth && (res.status === 401 || res.status === 403)) {
92
+ throw new OrchestraAuthError(res.status);
93
+ }
94
+ throw new Error(`Orchestra API ${method} ${path} failed (${res.status}): ${text}`);
95
+ }
96
+ return res.json();
97
+ }
98
+ // ---------------------------------------------------------------------------
99
+ // Public API
100
+ // ---------------------------------------------------------------------------
101
+ /** List all available cross-chain routes. No auth required. */
102
+ export async function getRoutes() {
103
+ const res = await request('GET', '/v1/orchestration/routes');
104
+ // API wraps in { routes: [...] }
105
+ return Array.isArray(res) ? res : res.routes;
106
+ }
107
+ /** Get a lightweight price estimate. No auth required. */
108
+ export async function getEstimate(params) {
109
+ return request('GET', '/v1/orchestration/estimate', {
110
+ params: {
111
+ sourceChain: params.sourceChain,
112
+ sourceAsset: params.sourceAsset,
113
+ destinationChain: params.destinationChain,
114
+ destinationAsset: params.destinationAsset,
115
+ amount: params.amount,
116
+ },
117
+ });
118
+ }
119
+ /** Create a durable quote with deposit address. Auth required. TTL ~30 min. */
120
+ export async function createQuote(params) {
121
+ return request('POST', '/v1/orchestration/quote', {
122
+ body: {
123
+ sourceChain: params.sourceChain,
124
+ sourceAsset: params.sourceAsset,
125
+ destinationChain: params.destinationChain,
126
+ destinationAsset: params.destinationAsset,
127
+ amount: params.amount,
128
+ recipientAddress: params.recipientAddress,
129
+ slippageBps: params.slippageBps ?? 100,
130
+ },
131
+ auth: true,
132
+ idempotency: 'quote:create',
133
+ });
134
+ }
135
+ /** Look up a quote and its associated order (if any). Auth required. */
136
+ export async function getOrder(quoteId) {
137
+ return request('GET', '/v1/orchestration/order', {
138
+ params: { quoteId },
139
+ auth: true,
140
+ });
141
+ }
142
+ /** Submit deposit proof to create an order from a quote. Auth required. */
143
+ export async function submitOrder(params) {
144
+ return request('POST', '/v1/orchestration/submit', {
145
+ body: params,
146
+ auth: true,
147
+ idempotency: 'submit',
148
+ });
149
+ }
150
+ /**
151
+ * Check order status by ID, quoteId, or txHash.
152
+ *
153
+ * The Flashnet orchestration `/v1/orchestration/status` endpoint historically
154
+ * returned a flat `OrchestraOrder`, but the live API now wraps the response
155
+ * as `{ order: OrchestraOrder, stages?: OrchestraOrderStage[] }` (same shape
156
+ * as `/order`). Both forms have been observed in the wild — we unwrap defensively
157
+ * so the bridge tracking poller sees a real `status` field either way.
158
+ * Without this, `status` is `undefined`, the poller silently keeps showing
159
+ * the stale local status (e.g. "swapping") even after the order completes.
160
+ */
161
+ export async function getStatus(query) {
162
+ const params = {};
163
+ if (query.id)
164
+ params.id = query.id;
165
+ else if (query.quoteId)
166
+ params.quoteId = query.quoteId;
167
+ else if (query.txHash)
168
+ params.txHash = query.txHash;
169
+ const raw = await request('GET', '/v1/orchestration/status', { params, auth: true });
170
+ // Wrapped shape: pull the order, attach stages so callers can use them
171
+ // for finer-grained progress UI without a second request.
172
+ if (raw && typeof raw === 'object' && 'order' in raw && raw.order) {
173
+ const wrapped = raw;
174
+ return wrapped.stages ? { ...wrapped.order, stages: wrapped.stages } : wrapped.order;
175
+ }
176
+ return raw;
177
+ }
178
+ //# sourceMappingURL=orchestra-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orchestra-client.js","sourceRoot":"","sources":["../../src/lib/orchestra-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * PSBT signing helper.
3
+ *
4
+ * Parses an incoming PSBT, derives the set of private keys that correspond
5
+ * to BIP32 derivation paths embedded in the PSBT's input entries, attempts
6
+ * to sign every signable input, and returns the result.
7
+ *
8
+ * Design invariants:
9
+ * - Never fabricates a signature: if no input can be signed (no BIP32 paths
10
+ * present, no matching key), returns { unchanged: true }.
11
+ * - Does NOT scan derivation paths — only signs inputs whose PSBT already
12
+ * carries explicit BIP32 derivation metadata. Scanning would be O(accounts
13
+ * × gap) and too slow for the background service worker.
14
+ * - Throws on malformed / non-PSBT input so the caller can surface an error
15
+ * to the dApp rather than silently returning garbage.
16
+ */
17
+ export interface PsbtSignResult {
18
+ /** Signed PSBT hex (or the original hex if unchanged). */
19
+ psbt: string;
20
+ /** True when no input could be signed (no owned inputs). */
21
+ unchanged: boolean;
22
+ /** Number of inputs that were signed. */
23
+ signedCount: number;
24
+ }
25
+ /**
26
+ * Parse and attempt to sign a PSBT using keys derived from the provided
27
+ * BIP39 mnemonic.
28
+ *
29
+ * @param psbtHex Hex-encoded PSBT bytes (without 0x prefix).
30
+ * @param mnemonic BIP39 mnemonic for key derivation.
31
+ */
32
+ export declare function signPsbt(psbtHex: string, mnemonic: string): PsbtSignResult;
33
+ /**
34
+ * Finalize a fully-signed PSBT and extract the raw network transaction.
35
+ *
36
+ * Used by `webbtc.finalizePsbt`: a dApp hands back a PSBT that already carries
37
+ * all required signatures and asks the wallet to assemble the final scriptSig /
38
+ * witness and return the broadcastable transaction hex.
39
+ *
40
+ * Throws when the PSBT is malformed or not fully signed (btc-signer's
41
+ * `finalize()` rejects an input that still lacks a signature) so the dApp gets
42
+ * a clean error rather than a half-finalized transaction.
43
+ */
44
+ export declare function finalizePsbt(psbtHex: string): {
45
+ txHex: string;
46
+ txid: string;
47
+ };
48
+ /**
49
+ * Decode a PSBT and return lightweight metadata for display in the
50
+ * confirmation popup — input count, output count, and estimated value
51
+ * transferred (sum of non-change outputs where possible).
52
+ *
53
+ * Never throws — returns safe defaults on malformed input.
54
+ */
55
+ export declare function decodePsbtMeta(psbtHex: string): {
56
+ inputCount: number;
57
+ outputCount: number;
58
+ isValid: boolean;
59
+ };
60
+ //# sourceMappingURL=psbt-signer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"psbt-signer.d.ts","sourceRoot":"","sources":["../../src/lib/psbt-signer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AA0BH,MAAM,WAAW,cAAc;IAC7B,0DAA0D;IAC1D,IAAI,EAAE,MAAM,CAAA;IACZ,4DAA4D;IAC5D,SAAS,EAAE,OAAO,CAAA;IAClB,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,cAAc,CAyE1E;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAuB7E;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG;IAC/C,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE,OAAO,CAAA;CACjB,CAaA"}
@@ -0,0 +1,161 @@
1
+ /**
2
+ * PSBT signing helper.
3
+ *
4
+ * Parses an incoming PSBT, derives the set of private keys that correspond
5
+ * to BIP32 derivation paths embedded in the PSBT's input entries, attempts
6
+ * to sign every signable input, and returns the result.
7
+ *
8
+ * Design invariants:
9
+ * - Never fabricates a signature: if no input can be signed (no BIP32 paths
10
+ * present, no matching key), returns { unchanged: true }.
11
+ * - Does NOT scan derivation paths — only signs inputs whose PSBT already
12
+ * carries explicit BIP32 derivation metadata. Scanning would be O(accounts
13
+ * × gap) and too slow for the background service worker.
14
+ * - Throws on malformed / non-PSBT input so the caller can surface an error
15
+ * to the dApp rather than silently returning garbage.
16
+ */
17
+ import { Transaction } from '@scure/btc-signer';
18
+ import { HDKey } from '@scure/bip32';
19
+ import { mnemonicToSeedSync } from '@scure/bip39';
20
+ import { hexToBytes, bytesToHex } from '@noble/hashes/utils.js';
21
+ // PSBT magic bytes: 0x70736274ff ("psbt" + separator 0xff)
22
+ const PSBT_MAGIC = new Uint8Array([0x70, 0x73, 0x62, 0x74, 0xff]);
23
+ function assertPsbtMagic(bytes) {
24
+ for (let i = 0; i < PSBT_MAGIC.length; i++) {
25
+ if (bytes[i] !== PSBT_MAGIC[i]) {
26
+ throw new Error('Input is not a valid PSBT (magic bytes mismatch)');
27
+ }
28
+ }
29
+ }
30
+ /**
31
+ * Convert a raw BIP32 path array (as stored in PSBT key-value pairs) to the
32
+ * canonical string form. Each element ≥ 0x80000000 is a hardened step.
33
+ */
34
+ function pathToString(pathArr) {
35
+ return 'm/' + pathArr.map((n) => (n >= 0x80000000 ? `${n - 0x80000000}'` : String(n))).join('/');
36
+ }
37
+ /**
38
+ * Parse and attempt to sign a PSBT using keys derived from the provided
39
+ * BIP39 mnemonic.
40
+ *
41
+ * @param psbtHex Hex-encoded PSBT bytes (without 0x prefix).
42
+ * @param mnemonic BIP39 mnemonic for key derivation.
43
+ */
44
+ export function signPsbt(psbtHex, mnemonic) {
45
+ const bytes = hexToBytes(psbtHex);
46
+ assertPsbtMagic(bytes);
47
+ let tx;
48
+ try {
49
+ tx = Transaction.fromPSBT(bytes);
50
+ }
51
+ catch (err) {
52
+ const msg = err instanceof Error ? err.message : String(err);
53
+ throw new Error(`Failed to parse PSBT: ${msg}`);
54
+ }
55
+ const seed = mnemonicToSeedSync(mnemonic);
56
+ const root = HDKey.fromMasterSeed(seed);
57
+ let signedCount = 0;
58
+ for (let idx = 0; idx < tx.inputsLength; idx++) {
59
+ const input = tx.getInput(idx);
60
+ // Skip finalized inputs. An empty Uint8Array is truthy, so check length.
61
+ const hasFinalSig = Array.isArray(input.finalScriptSig)
62
+ ? input.finalScriptSig.length > 0
63
+ : (input.finalScriptSig?.length ?? 0) > 0;
64
+ const hasFinalWitness = Array.isArray(input.finalScriptWitness) && input.finalScriptWitness.length > 0;
65
+ if (hasFinalSig || hasFinalWitness)
66
+ continue;
67
+ // Collect derivation paths from this input. An input may have multiple
68
+ // BIP32_DERIVATION entries (one per required signer in multisig scripts).
69
+ const derivations = input.bip32Derivation ?? [];
70
+ const taprootDerivations = input.tapBip32Derivation ?? [];
71
+ const allPaths = [
72
+ ...derivations.map(([, { path }]) => pathToString(path)),
73
+ ...taprootDerivations.map(([, { der: { path }, },]) => pathToString(path)),
74
+ ];
75
+ if (allPaths.length === 0)
76
+ continue;
77
+ for (const path of allPaths) {
78
+ let child;
79
+ try {
80
+ child = root.derive(path);
81
+ }
82
+ catch {
83
+ continue;
84
+ }
85
+ if (!child.privateKey)
86
+ continue;
87
+ try {
88
+ tx.signIdx(child.privateKey, idx);
89
+ signedCount++;
90
+ break; // one signature per input is enough
91
+ }
92
+ catch {
93
+ // Key didn't match this input — try the next derivation path.
94
+ }
95
+ }
96
+ }
97
+ const unchanged = signedCount === 0;
98
+ const resultBytes = tx.toPSBT();
99
+ return {
100
+ psbt: bytesToHex(resultBytes),
101
+ unchanged,
102
+ signedCount,
103
+ };
104
+ }
105
+ /**
106
+ * Finalize a fully-signed PSBT and extract the raw network transaction.
107
+ *
108
+ * Used by `webbtc.finalizePsbt`: a dApp hands back a PSBT that already carries
109
+ * all required signatures and asks the wallet to assemble the final scriptSig /
110
+ * witness and return the broadcastable transaction hex.
111
+ *
112
+ * Throws when the PSBT is malformed or not fully signed (btc-signer's
113
+ * `finalize()` rejects an input that still lacks a signature) so the dApp gets
114
+ * a clean error rather than a half-finalized transaction.
115
+ */
116
+ export function finalizePsbt(psbtHex) {
117
+ const bytes = hexToBytes(psbtHex);
118
+ assertPsbtMagic(bytes);
119
+ let tx;
120
+ try {
121
+ tx = Transaction.fromPSBT(bytes);
122
+ }
123
+ catch (err) {
124
+ const msg = err instanceof Error ? err.message : String(err);
125
+ throw new Error(`Failed to parse PSBT: ${msg}`);
126
+ }
127
+ try {
128
+ tx.finalize();
129
+ }
130
+ catch (err) {
131
+ const msg = err instanceof Error ? err.message : String(err);
132
+ throw new Error(`PSBT is not fully signed / could not be finalized: ${msg}`);
133
+ }
134
+ // `extract()` returns the raw network transaction bytes once every input is
135
+ // finalized. `tx.id` is the (witness-excluded) txid in display byte order.
136
+ const rawTx = tx.extract();
137
+ return { txHex: bytesToHex(rawTx), txid: tx.id };
138
+ }
139
+ /**
140
+ * Decode a PSBT and return lightweight metadata for display in the
141
+ * confirmation popup — input count, output count, and estimated value
142
+ * transferred (sum of non-change outputs where possible).
143
+ *
144
+ * Never throws — returns safe defaults on malformed input.
145
+ */
146
+ export function decodePsbtMeta(psbtHex) {
147
+ try {
148
+ const bytes = hexToBytes(psbtHex);
149
+ assertPsbtMagic(bytes);
150
+ const tx = Transaction.fromPSBT(bytes);
151
+ return {
152
+ inputCount: tx.inputsLength,
153
+ outputCount: tx.outputsLength,
154
+ isValid: true,
155
+ };
156
+ }
157
+ catch {
158
+ return { inputCount: 0, outputCount: 0, isValid: false };
159
+ }
160
+ }
161
+ //# sourceMappingURL=psbt-signer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"psbt-signer.js","sourceRoot":"","sources":["../../src/lib/psbt-signer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * SDK ↔ unified-shape converters for the RGB adapter.
3
+ *
4
+ * Extracted from src/protocols/rgb/adapter.ts so the conversion logic lives
5
+ * in one place and the adapter is closer to "what RPCs do I call". Every
6
+ * function here is side-effect free, has no `this` dependencies, and only
7
+ * imports types — no SDK client, no module state.
8
+ *
9
+ * Covered by tests/unit/rgb-converters.test.ts.
10
+ */
11
+ import type { AssetBalanceResponse, BtcBalanceResponse } from "kaleido-sdk/rln";
12
+ import type { UnifiedAsset, UnifiedTransaction } from "../types/base.js";
13
+ /**
14
+ * `wallet.getBtcBalance()` returns BTC split into "vanilla" (regular) and
15
+ * "colored" (RGB-allocated) sub-balances. The wallet UI only surfaces the
16
+ * vanilla portion as the BTC asset's balance — colored sats are accounted
17
+ * for under each RGB asset's own balance. Locks the policy: don't show
18
+ * colored sats as spendable BTC.
19
+ */
20
+ export declare function convertBtcBalance(btcBalance: BtcBalanceResponse): UnifiedAsset["balance"];
21
+ /**
22
+ * `wallet.getAssetBalance(assetId)` returns the per-asset SDK balance.
23
+ * Exposes the off-chain inbound/outbound capacities — both shown in the
24
+ * channel-aware balance breakdown — and treats `offchain_outbound` as
25
+ * `locked` for legacy callers that don't know about the off-chain split.
26
+ */
27
+ export declare function convertSdkBalance(balance: AssetBalanceResponse, precision?: number): UnifiedAsset["balance"];
28
+ /**
29
+ * `client.rln.listAssets()` returns balance as a plain `Record<string, number>`
30
+ * — same field names as the SDK shape but flatter and `undefined`-safe.
31
+ * Same projection as `convertSdkBalance` but no required-field assumptions.
32
+ */
33
+ export declare function convertNodeBalance(balance: Record<string, number> | undefined, precision?: number): UnifiedAsset["balance"];
34
+ /**
35
+ * Build a `UnifiedAsset` from the raw `client.rln.listAssets()` payload.
36
+ * Precision defaults to 8 (BTC convention) when the node omits it —
37
+ * legacy assets pre-RGB20 sometimes don't carry an explicit precision.
38
+ */
39
+ export declare function convertNodeAssetToUnified(asset: Record<string, unknown>): UnifiedAsset;
40
+ /**
41
+ * On-chain RGB transfer from `client.rln.listTransfers()`. `asset` is left
42
+ * as an empty placeholder; the caller (Activity view) joins on `asset_id`
43
+ * to populate it via the asset inventory.
44
+ */
45
+ export declare function convertTransferToTransaction(transfer: Record<string, unknown>): UnifiedTransaction;
46
+ /**
47
+ * Maker/taker swap entry from `client.rln.listSwaps()`. The same swap
48
+ * appears once per side — `side` distinguishes them in the rendered id
49
+ * so a maker and taker view of the same swap don't collide.
50
+ *
51
+ * Timestamp resolution: prefer `completed_at`, then `initiated_at`, then
52
+ * `requested_at` (all in seconds — converted to ms here).
53
+ */
54
+ export declare function convertSwapToTransaction(swap: Record<string, unknown>, side: "maker" | "taker"): UnifiedTransaction;
55
+ /**
56
+ * Lightning payment entry from `client.rln.listPayments()`. Inbound vs
57
+ * outbound is determined by the `inbound` flag (we render as receive vs
58
+ * send). Amount resolution prefers `asset_amount` (for RGB-asset payments)
59
+ * then falls back to converting the BTC msat figure to sats.
60
+ */
61
+ export declare function convertPaymentToTransaction(payment: Record<string, unknown>): UnifiedTransaction;
62
+ //# sourceMappingURL=rgb-converters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rgb-converters.d.ts","sourceRoot":"","sources":["../../src/lib/rgb-converters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAChF,OAAO,KAAK,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAetE;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,kBAAkB,GAAG,YAAY,CAAC,SAAS,CAAC,CASzF;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,oBAAoB,EAC7B,SAAS,GAAE,MAAU,GACpB,YAAY,CAAC,SAAS,CAAC,CAWzB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAC3C,SAAS,GAAE,MAAU,GACpB,YAAY,CAAC,SAAS,CAAC,CAezB;AAID;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CAkBtF;AAOD;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,kBAAkB,CAepB;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,IAAI,EAAE,OAAO,GAAG,OAAO,GACtB,kBAAkB,CAoBpB;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,kBAAkB,CAqBhG"}