@gvnrdao/dh-lit-actions 0.0.60 → 0.0.63

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 (233) hide show
  1. package/package.json +3 -3
  2. package/pkg-dist/pkg-src/constants/chunks/contract-deployments.d.ts.map +1 -0
  3. package/pkg-dist/pkg-src/constants/chunks/contract-deployments.js.map +1 -0
  4. package/pkg-dist/pkg-src/constants/chunks/lit-actions-registry.d.ts.map +1 -0
  5. package/pkg-dist/pkg-src/constants/chunks/lit-actions-registry.js.map +1 -0
  6. package/pkg-dist/pkg-src/constants/chunks/package-registry.d.ts.map +1 -0
  7. package/pkg-dist/pkg-src/constants/chunks/package-registry.js.map +1 -0
  8. package/pkg-dist/pkg-src/constants/index.d.ts.map +1 -0
  9. package/pkg-dist/pkg-src/constants/index.js.map +1 -0
  10. package/pkg-dist/pkg-src/executors/chunks/vault-snapshot-executor.d.ts +40 -0
  11. package/pkg-dist/pkg-src/executors/chunks/vault-snapshot-executor.d.ts.map +1 -0
  12. package/pkg-dist/pkg-src/executors/chunks/vault-snapshot-executor.js +102 -0
  13. package/pkg-dist/pkg-src/executors/chunks/vault-snapshot-executor.js.map +1 -0
  14. package/pkg-dist/pkg-src/executors/index.d.ts +43 -0
  15. package/pkg-dist/pkg-src/executors/index.d.ts.map +1 -0
  16. package/pkg-dist/pkg-src/executors/index.js +48 -0
  17. package/pkg-dist/pkg-src/executors/index.js.map +1 -0
  18. package/pkg-dist/pkg-src/index.d.ts.map +1 -0
  19. package/pkg-dist/pkg-src/index.js.map +1 -0
  20. package/pkg-dist/pkg-src/interfaces/chunks/diamond-hands-lit-actions.i.d.ts.map +1 -0
  21. package/pkg-dist/pkg-src/interfaces/chunks/diamond-hands-lit-actions.i.js.map +1 -0
  22. package/pkg-dist/pkg-src/interfaces/chunks/lit-action-config.i.d.ts.map +1 -0
  23. package/pkg-dist/pkg-src/interfaces/chunks/lit-action-config.i.js.map +1 -0
  24. package/pkg-dist/pkg-src/interfaces/chunks/lit-action-name.i.d.ts.map +1 -0
  25. package/pkg-dist/pkg-src/interfaces/chunks/lit-action-name.i.js.map +1 -0
  26. package/pkg-dist/pkg-src/interfaces/chunks/lit-action-registry.i.d.ts.map +1 -0
  27. package/pkg-dist/pkg-src/interfaces/chunks/lit-action-registry.i.js.map +1 -0
  28. package/pkg-dist/pkg-src/interfaces/chunks/pkp-info.i.d.ts.map +1 -0
  29. package/pkg-dist/pkg-src/interfaces/chunks/pkp-info.i.js.map +1 -0
  30. package/pkg-dist/pkg-src/interfaces/deployments.d.ts.map +1 -0
  31. package/pkg-dist/pkg-src/interfaces/deployments.js.map +1 -0
  32. package/pkg-dist/pkg-src/interfaces/index.d.ts.map +1 -0
  33. package/pkg-dist/pkg-src/interfaces/index.js.map +1 -0
  34. package/pkg-dist/pkg-src/utils/chunks/cid-utils.d.ts.map +1 -0
  35. package/pkg-dist/pkg-src/utils/chunks/cid-utils.js.map +1 -0
  36. package/pkg-dist/pkg-src/utils/chunks/connection-helpers.d.ts.map +1 -0
  37. package/pkg-dist/pkg-src/utils/chunks/connection-helpers.js.map +1 -0
  38. package/pkg-dist/pkg-src/utils/chunks/debug-logger.d.ts.map +1 -0
  39. package/pkg-dist/pkg-src/utils/chunks/debug-logger.js.map +1 -0
  40. package/pkg-dist/pkg-src/utils/chunks/error-classification.d.ts.map +1 -0
  41. package/pkg-dist/pkg-src/utils/chunks/error-classification.js.map +1 -0
  42. package/pkg-dist/pkg-src/utils/chunks/lit-action-helpers.d.ts.map +1 -0
  43. package/pkg-dist/pkg-src/utils/chunks/lit-action-helpers.js.map +1 -0
  44. package/pkg-dist/pkg-src/utils/chunks/pkp-setup.d.ts.map +1 -0
  45. package/pkg-dist/pkg-src/utils/chunks/pkp-setup.js.map +1 -0
  46. package/pkg-dist/pkg-src/utils/chunks/session-signature-cache.d.ts.map +1 -0
  47. package/pkg-dist/pkg-src/utils/chunks/session-signature-cache.js.map +1 -0
  48. package/pkg-dist/pkg-src/utils/index.d.ts.map +1 -0
  49. package/pkg-dist/pkg-src/utils/index.js.map +1 -0
  50. package/pkg-dist/src/constants/chunks/bitcoin-network-config.d.ts +130 -0
  51. package/pkg-dist/src/constants/chunks/bitcoin-network-config.d.ts.map +1 -0
  52. package/pkg-dist/src/constants/chunks/bitcoin-network-config.js +244 -0
  53. package/pkg-dist/src/constants/chunks/bitcoin-network-config.js.map +1 -0
  54. package/pkg-dist/src/constants/chunks/bitcoin.d.ts +42 -0
  55. package/pkg-dist/src/constants/chunks/bitcoin.d.ts.map +1 -0
  56. package/pkg-dist/src/constants/chunks/bitcoin.js +45 -0
  57. package/pkg-dist/src/constants/chunks/bitcoin.js.map +1 -0
  58. package/pkg-dist/src/constants/chunks/decimals.d.ts +44 -0
  59. package/pkg-dist/src/constants/chunks/decimals.d.ts.map +1 -0
  60. package/pkg-dist/src/constants/chunks/decimals.js +47 -0
  61. package/pkg-dist/src/constants/chunks/decimals.js.map +1 -0
  62. package/pkg-dist/src/constants/chunks/liquidation.d.ts +51 -0
  63. package/pkg-dist/src/constants/chunks/liquidation.d.ts.map +1 -0
  64. package/pkg-dist/src/constants/chunks/liquidation.js +54 -0
  65. package/pkg-dist/src/constants/chunks/liquidation.js.map +1 -0
  66. package/pkg-dist/src/constants/chunks/loan-status.d.ts +57 -0
  67. package/pkg-dist/src/constants/chunks/loan-status.d.ts.map +1 -0
  68. package/pkg-dist/src/constants/chunks/loan-status.js +95 -0
  69. package/pkg-dist/src/constants/chunks/loan-status.js.map +1 -0
  70. package/pkg-dist/src/constants/chunks/price-oracle.d.ts +46 -0
  71. package/pkg-dist/src/constants/chunks/price-oracle.d.ts.map +1 -0
  72. package/pkg-dist/src/constants/chunks/price-oracle.js +49 -0
  73. package/pkg-dist/src/constants/chunks/price-oracle.js.map +1 -0
  74. package/pkg-dist/src/constants/chunks/quantum-time.d.ts +63 -0
  75. package/pkg-dist/src/constants/chunks/quantum-time.d.ts.map +1 -0
  76. package/pkg-dist/src/constants/chunks/quantum-time.js +66 -0
  77. package/pkg-dist/src/constants/chunks/quantum-time.js.map +1 -0
  78. package/pkg-dist/src/constants/index.d.ts +16 -0
  79. package/pkg-dist/src/constants/index.d.ts.map +1 -0
  80. package/pkg-dist/src/constants/index.js +57 -0
  81. package/pkg-dist/src/constants/index.js.map +1 -0
  82. package/pkg-dist/src/interfaces/chunks/authorization.i.d.ts +19 -0
  83. package/pkg-dist/src/interfaces/chunks/authorization.i.d.ts.map +1 -0
  84. package/pkg-dist/src/interfaces/chunks/authorization.i.js +3 -0
  85. package/pkg-dist/src/interfaces/chunks/authorization.i.js.map +1 -0
  86. package/pkg-dist/src/interfaces/chunks/bitcoin-data-provider.i.d.ts +60 -0
  87. package/pkg-dist/src/interfaces/chunks/bitcoin-data-provider.i.d.ts.map +1 -0
  88. package/pkg-dist/src/interfaces/chunks/bitcoin-data-provider.i.js +3 -0
  89. package/pkg-dist/src/interfaces/chunks/bitcoin-data-provider.i.js.map +1 -0
  90. package/pkg-dist/src/interfaces/chunks/circuit-breaker.i.d.ts +18 -0
  91. package/pkg-dist/src/interfaces/chunks/circuit-breaker.i.d.ts.map +1 -0
  92. package/pkg-dist/src/interfaces/chunks/circuit-breaker.i.js +8 -0
  93. package/pkg-dist/src/interfaces/chunks/circuit-breaker.i.js.map +1 -0
  94. package/pkg-dist/src/interfaces/chunks/mint-authorization.i.d.ts +24 -0
  95. package/pkg-dist/src/interfaces/chunks/mint-authorization.i.d.ts.map +1 -0
  96. package/pkg-dist/src/interfaces/chunks/mint-authorization.i.js +5 -0
  97. package/pkg-dist/src/interfaces/chunks/mint-authorization.i.js.map +1 -0
  98. package/pkg-dist/src/interfaces/chunks/owner-authorization.d.ts +60 -0
  99. package/pkg-dist/src/interfaces/chunks/owner-authorization.d.ts.map +1 -0
  100. package/pkg-dist/src/interfaces/chunks/owner-authorization.js +8 -0
  101. package/pkg-dist/src/interfaces/chunks/owner-authorization.js.map +1 -0
  102. package/pkg-dist/src/interfaces/chunks/price-oracle.i.d.ts +26 -0
  103. package/pkg-dist/src/interfaces/chunks/price-oracle.i.d.ts.map +1 -0
  104. package/pkg-dist/src/interfaces/chunks/price-oracle.i.js +3 -0
  105. package/pkg-dist/src/interfaces/chunks/price-oracle.i.js.map +1 -0
  106. package/pkg-dist/src/interfaces/chunks/vault-balance-module.i.d.ts +23 -0
  107. package/pkg-dist/src/interfaces/chunks/vault-balance-module.i.d.ts.map +1 -0
  108. package/pkg-dist/src/interfaces/chunks/vault-balance-module.i.js +3 -0
  109. package/pkg-dist/src/interfaces/chunks/vault-balance-module.i.js.map +1 -0
  110. package/pkg-dist/src/interfaces/chunks/vault-balance.i.d.ts +63 -0
  111. package/pkg-dist/src/interfaces/chunks/vault-balance.i.d.ts.map +1 -0
  112. package/pkg-dist/src/interfaces/chunks/vault-balance.i.js +3 -0
  113. package/pkg-dist/src/interfaces/chunks/vault-balance.i.js.map +1 -0
  114. package/pkg-dist/src/interfaces/chunks/vault-snapshot.i.d.ts +51 -0
  115. package/pkg-dist/src/interfaces/chunks/vault-snapshot.i.d.ts.map +1 -0
  116. package/pkg-dist/src/interfaces/chunks/vault-snapshot.i.js +3 -0
  117. package/pkg-dist/src/interfaces/chunks/vault-snapshot.i.js.map +1 -0
  118. package/pkg-dist/src/interfaces/index.d.ts +15 -0
  119. package/pkg-dist/src/interfaces/index.d.ts.map +1 -0
  120. package/pkg-dist/src/interfaces/index.js +30 -0
  121. package/pkg-dist/src/interfaces/index.js.map +1 -0
  122. package/pkg-dist/src/modules/authorization.module.d.ts +160 -0
  123. package/pkg-dist/src/modules/authorization.module.d.ts.map +1 -0
  124. package/pkg-dist/src/modules/authorization.module.js +317 -0
  125. package/pkg-dist/src/modules/authorization.module.js.map +1 -0
  126. package/pkg-dist/src/modules/bitcoin-data-provider.module.d.ts +91 -0
  127. package/pkg-dist/src/modules/bitcoin-data-provider.module.d.ts.map +1 -0
  128. package/pkg-dist/src/modules/bitcoin-data-provider.module.js +261 -0
  129. package/pkg-dist/src/modules/bitcoin-data-provider.module.js.map +1 -0
  130. package/pkg-dist/src/modules/business-rules-math.module.d.ts +155 -0
  131. package/pkg-dist/src/modules/business-rules-math.module.d.ts.map +1 -0
  132. package/pkg-dist/src/modules/business-rules-math.module.js +309 -0
  133. package/pkg-dist/src/modules/business-rules-math.module.js.map +1 -0
  134. package/pkg-dist/src/modules/price-oracle.module.d.ts +29 -0
  135. package/pkg-dist/src/modules/price-oracle.module.d.ts.map +1 -0
  136. package/pkg-dist/src/modules/price-oracle.module.js +223 -0
  137. package/pkg-dist/src/modules/price-oracle.module.js.map +1 -0
  138. package/pkg-dist/src/modules/protocol-parameters.module.d.ts +58 -0
  139. package/pkg-dist/src/modules/protocol-parameters.module.d.ts.map +1 -0
  140. package/pkg-dist/src/modules/protocol-parameters.module.js +125 -0
  141. package/pkg-dist/src/modules/protocol-parameters.module.js.map +1 -0
  142. package/pkg-dist/src/modules/quantum-time.module.d.ts +149 -0
  143. package/pkg-dist/src/modules/quantum-time.module.d.ts.map +1 -0
  144. package/pkg-dist/src/modules/quantum-time.module.js +240 -0
  145. package/pkg-dist/src/modules/quantum-time.module.js.map +1 -0
  146. package/pkg-dist/src/modules/vault-balance.module.d.ts +172 -0
  147. package/pkg-dist/src/modules/vault-balance.module.d.ts.map +1 -0
  148. package/pkg-dist/src/modules/vault-balance.module.js +318 -0
  149. package/pkg-dist/src/modules/vault-balance.module.js.map +1 -0
  150. package/pkg-dist/src/modules/vault-snapshot.d.ts +168 -0
  151. package/pkg-dist/src/modules/vault-snapshot.d.ts.map +1 -0
  152. package/pkg-dist/src/modules/vault-snapshot.js +370 -0
  153. package/pkg-dist/src/modules/vault-snapshot.js.map +1 -0
  154. package/pkg-dist/constants/chunks/contract-deployments.d.ts.map +0 -1
  155. package/pkg-dist/constants/chunks/contract-deployments.js.map +0 -1
  156. package/pkg-dist/constants/chunks/lit-actions-registry.d.ts.map +0 -1
  157. package/pkg-dist/constants/chunks/lit-actions-registry.js.map +0 -1
  158. package/pkg-dist/constants/chunks/package-registry.d.ts.map +0 -1
  159. package/pkg-dist/constants/chunks/package-registry.js.map +0 -1
  160. package/pkg-dist/constants/index.d.ts.map +0 -1
  161. package/pkg-dist/constants/index.js.map +0 -1
  162. package/pkg-dist/index.d.ts.map +0 -1
  163. package/pkg-dist/index.js.map +0 -1
  164. package/pkg-dist/interfaces/chunks/diamond-hands-lit-actions.i.d.ts.map +0 -1
  165. package/pkg-dist/interfaces/chunks/diamond-hands-lit-actions.i.js.map +0 -1
  166. package/pkg-dist/interfaces/chunks/lit-action-config.i.d.ts.map +0 -1
  167. package/pkg-dist/interfaces/chunks/lit-action-config.i.js.map +0 -1
  168. package/pkg-dist/interfaces/chunks/lit-action-name.i.d.ts.map +0 -1
  169. package/pkg-dist/interfaces/chunks/lit-action-name.i.js.map +0 -1
  170. package/pkg-dist/interfaces/chunks/lit-action-registry.i.d.ts.map +0 -1
  171. package/pkg-dist/interfaces/chunks/lit-action-registry.i.js.map +0 -1
  172. package/pkg-dist/interfaces/chunks/pkp-info.i.d.ts.map +0 -1
  173. package/pkg-dist/interfaces/chunks/pkp-info.i.js.map +0 -1
  174. package/pkg-dist/interfaces/deployments.d.ts.map +0 -1
  175. package/pkg-dist/interfaces/deployments.js.map +0 -1
  176. package/pkg-dist/interfaces/index.d.ts.map +0 -1
  177. package/pkg-dist/interfaces/index.js.map +0 -1
  178. package/pkg-dist/utils/chunks/cid-utils.d.ts.map +0 -1
  179. package/pkg-dist/utils/chunks/cid-utils.js.map +0 -1
  180. package/pkg-dist/utils/chunks/connection-helpers.d.ts.map +0 -1
  181. package/pkg-dist/utils/chunks/connection-helpers.js.map +0 -1
  182. package/pkg-dist/utils/chunks/debug-logger.d.ts.map +0 -1
  183. package/pkg-dist/utils/chunks/debug-logger.js.map +0 -1
  184. package/pkg-dist/utils/chunks/error-classification.d.ts.map +0 -1
  185. package/pkg-dist/utils/chunks/error-classification.js.map +0 -1
  186. package/pkg-dist/utils/chunks/lit-action-helpers.d.ts.map +0 -1
  187. package/pkg-dist/utils/chunks/lit-action-helpers.js.map +0 -1
  188. package/pkg-dist/utils/chunks/pkp-setup.d.ts.map +0 -1
  189. package/pkg-dist/utils/chunks/pkp-setup.js.map +0 -1
  190. package/pkg-dist/utils/chunks/session-signature-cache.d.ts.map +0 -1
  191. package/pkg-dist/utils/chunks/session-signature-cache.js.map +0 -1
  192. package/pkg-dist/utils/index.d.ts.map +0 -1
  193. package/pkg-dist/utils/index.js.map +0 -1
  194. /package/pkg-dist/{constants → pkg-src/constants}/chunks/contract-deployments.d.ts +0 -0
  195. /package/pkg-dist/{constants → pkg-src/constants}/chunks/contract-deployments.js +0 -0
  196. /package/pkg-dist/{constants → pkg-src/constants}/chunks/lit-actions-registry.d.ts +0 -0
  197. /package/pkg-dist/{constants → pkg-src/constants}/chunks/lit-actions-registry.js +0 -0
  198. /package/pkg-dist/{constants → pkg-src/constants}/chunks/package-registry.d.ts +0 -0
  199. /package/pkg-dist/{constants → pkg-src/constants}/chunks/package-registry.js +0 -0
  200. /package/pkg-dist/{constants → pkg-src/constants}/index.d.ts +0 -0
  201. /package/pkg-dist/{constants → pkg-src/constants}/index.js +0 -0
  202. /package/pkg-dist/{index.d.ts → pkg-src/index.d.ts} +0 -0
  203. /package/pkg-dist/{index.js → pkg-src/index.js} +0 -0
  204. /package/pkg-dist/{interfaces → pkg-src/interfaces}/chunks/diamond-hands-lit-actions.i.d.ts +0 -0
  205. /package/pkg-dist/{interfaces → pkg-src/interfaces}/chunks/diamond-hands-lit-actions.i.js +0 -0
  206. /package/pkg-dist/{interfaces → pkg-src/interfaces}/chunks/lit-action-config.i.d.ts +0 -0
  207. /package/pkg-dist/{interfaces → pkg-src/interfaces}/chunks/lit-action-config.i.js +0 -0
  208. /package/pkg-dist/{interfaces → pkg-src/interfaces}/chunks/lit-action-name.i.d.ts +0 -0
  209. /package/pkg-dist/{interfaces → pkg-src/interfaces}/chunks/lit-action-name.i.js +0 -0
  210. /package/pkg-dist/{interfaces → pkg-src/interfaces}/chunks/lit-action-registry.i.d.ts +0 -0
  211. /package/pkg-dist/{interfaces → pkg-src/interfaces}/chunks/lit-action-registry.i.js +0 -0
  212. /package/pkg-dist/{interfaces → pkg-src/interfaces}/chunks/pkp-info.i.d.ts +0 -0
  213. /package/pkg-dist/{interfaces → pkg-src/interfaces}/chunks/pkp-info.i.js +0 -0
  214. /package/pkg-dist/{interfaces → pkg-src/interfaces}/deployments.d.ts +0 -0
  215. /package/pkg-dist/{interfaces → pkg-src/interfaces}/deployments.js +0 -0
  216. /package/pkg-dist/{interfaces → pkg-src/interfaces}/index.d.ts +0 -0
  217. /package/pkg-dist/{interfaces → pkg-src/interfaces}/index.js +0 -0
  218. /package/pkg-dist/{utils → pkg-src/utils}/chunks/cid-utils.d.ts +0 -0
  219. /package/pkg-dist/{utils → pkg-src/utils}/chunks/cid-utils.js +0 -0
  220. /package/pkg-dist/{utils → pkg-src/utils}/chunks/connection-helpers.d.ts +0 -0
  221. /package/pkg-dist/{utils → pkg-src/utils}/chunks/connection-helpers.js +0 -0
  222. /package/pkg-dist/{utils → pkg-src/utils}/chunks/debug-logger.d.ts +0 -0
  223. /package/pkg-dist/{utils → pkg-src/utils}/chunks/debug-logger.js +0 -0
  224. /package/pkg-dist/{utils → pkg-src/utils}/chunks/error-classification.d.ts +0 -0
  225. /package/pkg-dist/{utils → pkg-src/utils}/chunks/error-classification.js +0 -0
  226. /package/pkg-dist/{utils → pkg-src/utils}/chunks/lit-action-helpers.d.ts +0 -0
  227. /package/pkg-dist/{utils → pkg-src/utils}/chunks/lit-action-helpers.js +0 -0
  228. /package/pkg-dist/{utils → pkg-src/utils}/chunks/pkp-setup.d.ts +0 -0
  229. /package/pkg-dist/{utils → pkg-src/utils}/chunks/pkp-setup.js +0 -0
  230. /package/pkg-dist/{utils → pkg-src/utils}/chunks/session-signature-cache.d.ts +0 -0
  231. /package/pkg-dist/{utils → pkg-src/utils}/chunks/session-signature-cache.js +0 -0
  232. /package/pkg-dist/{utils → pkg-src/utils}/index.d.ts +0 -0
  233. /package/pkg-dist/{utils → pkg-src/utils}/index.js +0 -0
@@ -0,0 +1,261 @@
1
+ "use strict";
2
+ /**
3
+ * Bitcoin Data Provider Module
4
+ *
5
+ * Provides Bitcoin network data with support for future consensus mechanisms.
6
+ * Current implementation: Single provider with fallback support
7
+ * Future implementation: 2-of-3 provider consensus
8
+ *
9
+ * This module centralizes all Bitcoin data queries to maintain a consistent
10
+ * interface that won't break when upgrading to multi-provider consensus.
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.BitcoinDataProvider = void 0;
14
+ exports.createBitcoinDataProvider = createBitcoinDataProvider;
15
+ /**
16
+ * Bitcoin Data Provider
17
+ *
18
+ * Fetches UTXO data from Bitcoin network.
19
+ * Interface designed to remain stable when adding multi-provider consensus.
20
+ */
21
+ class BitcoinDataProvider {
22
+ constructor(config) {
23
+ this.config = config;
24
+ this.timeout = config.timeout || 10000; // Default 10 seconds
25
+ }
26
+ /**
27
+ * Fetch all UTXOs for a Bitcoin address
28
+ *
29
+ * @param address - Bitcoin address (legacy, segwit, or taproot)
30
+ * @returns Array of UTXOs
31
+ */
32
+ async getUTXOs(address) {
33
+ console.log(`[Bitcoin Data] Original address: "${address}"`);
34
+ // Strip network prefix if present (e.g., "REGTEST_address" -> "address")
35
+ const cleanAddress = this.stripNetworkPrefix(address);
36
+ console.log(`[Bitcoin Data] Cleaned address: "${cleanAddress}"`);
37
+ // If RPC helper is provided (for regtest/testing), use it directly
38
+ if (this.config.rpcHelper) {
39
+ return await this.fetchUTXOsFromRPC(cleanAddress);
40
+ }
41
+ // Try primary provider first
42
+ try {
43
+ return await this.fetchUTXOsFromProvider(this.config.providerUrl, cleanAddress);
44
+ }
45
+ catch (error) {
46
+ console.warn(`[Bitcoin Data] Primary provider failed: ${error.message}`);
47
+ // Try fallback providers if available
48
+ if (this.config.fallbackProviders &&
49
+ this.config.fallbackProviders.length > 0) {
50
+ const sortedFallbacks = [...this.config.fallbackProviders].sort((a, b) => a.priority - b.priority);
51
+ for (const fallback of sortedFallbacks) {
52
+ try {
53
+ console.log(`[Bitcoin Data] Trying fallback: ${fallback.name} (${fallback.url})`);
54
+ return await this.fetchUTXOsFromProvider(fallback.url, cleanAddress);
55
+ }
56
+ catch (fallbackError) {
57
+ console.warn(`[Bitcoin Data] Fallback ${fallback.name} failed: ${fallbackError.message}`);
58
+ continue;
59
+ }
60
+ }
61
+ }
62
+ throw new Error(`Failed to fetch UTXOs: ${error.message}`);
63
+ }
64
+ }
65
+ /**
66
+ * Strip network prefix from Bitcoin address
67
+ *
68
+ * Addresses may be stored with network prefix (e.g., "REGTEST_address")
69
+ * but APIs expect clean addresses without prefix.
70
+ *
71
+ * @param address - Address with optional prefix
72
+ * @returns Clean address without prefix
73
+ */
74
+ stripNetworkPrefix(address) {
75
+ const prefixPattern = /^(REGTEST_|TESTNET_|MAINNET_)/;
76
+ return address.replace(prefixPattern, "");
77
+ }
78
+ /**
79
+ * Fetch UTXOs using Bitcoin RPC (for regtest/testing)
80
+ */
81
+ async fetchUTXOsFromRPC(address) {
82
+ if (!this.config.rpcHelper) {
83
+ throw new Error("RPC helper not configured");
84
+ }
85
+ const wallet = this.config.rpcWallet || "";
86
+ const unspentOutputs = await this.config.rpcHelper.listUnspent(wallet, address);
87
+ const utxos = unspentOutputs.map((utxo) => ({
88
+ txid: utxo.txid,
89
+ vout: utxo.vout,
90
+ satoshis: BigInt(Math.round(utxo.amount * 100000000)), // BTC to satoshis as bigint
91
+ confirmations: utxo.confirmations,
92
+ }));
93
+ return utxos;
94
+ }
95
+ /**
96
+ * Parse Esplora/Blockstream/Mempool.space UTXO response
97
+ *
98
+ * Expected format: Array of {txid, vout, value, confirmations}
99
+ *
100
+ * @param data Raw response from provider API
101
+ * @returns Array of normalized UTXOs
102
+ */
103
+ parseBlockstreamUTXOs(data) {
104
+ if (!Array.isArray(data)) {
105
+ throw new Error("Invalid Blockstream response format: expected an array");
106
+ }
107
+ // Normalize UTXO format (different providers may have different field names)
108
+ const utxos = data.map((utxo) => ({
109
+ txid: utxo.txid,
110
+ vout: utxo.vout !== undefined ? utxo.vout : utxo.n,
111
+ satoshis: BigInt(utxo.value !== undefined ? utxo.value : utxo.satoshis),
112
+ confirmations: utxo.confirmations || 0,
113
+ }));
114
+ return utxos;
115
+ }
116
+ /**
117
+ * Internal method to fetch UTXOs from a specific provider
118
+ *
119
+ * Supports standard Esplora API format:
120
+ * - Standard format: {providerUrl}/address/{address}/utxos
121
+ * - providerUrl must include full base path (e.g., "http://localhost:3002/api/esplora")
122
+ */
123
+ async fetchUTXOsFromProvider(providerUrl, address) {
124
+ // Standard Esplora API format only
125
+ // providerUrl must include full base path (e.g., "http://localhost:3002/api/esplora")
126
+ const endpoint = `${providerUrl}/address/${address}/utxos`;
127
+ console.log(`Fetching UTXOs from ${endpoint}`);
128
+ const controller = new AbortController();
129
+ const timeoutId = setTimeout(() => controller.abort(), this.timeout);
130
+ try {
131
+ const response = await fetch(endpoint, {
132
+ signal: controller.signal,
133
+ headers: {
134
+ Accept: "application/json",
135
+ "Content-Type": "application/json",
136
+ "User-Agent": "Mozilla/5.0 (compatible; DiamondHandsValidator/1.0)",
137
+ "ngrok-skip-browser-warning": "true", // Skip ngrok browser warning page
138
+ },
139
+ });
140
+ clearTimeout(timeoutId);
141
+ if (!response.ok) {
142
+ throw new Error(`Bitcoin provider error: ${response.status} ${response.statusText}`);
143
+ }
144
+ const data = await response.json();
145
+ // Log the parsed data
146
+ console.log(`[Bitcoin Data] Raw API Response:`, JSON.stringify(data, null, 2));
147
+ // Parse standard Esplora/Blockstream format
148
+ return this.parseBlockstreamUTXOs(data);
149
+ }
150
+ catch (error) {
151
+ clearTimeout(timeoutId);
152
+ if (error.name === "AbortError") {
153
+ throw new Error(`Request timeout after ${this.timeout}ms`);
154
+ }
155
+ throw error;
156
+ }
157
+ }
158
+ /**
159
+ * Get complete UTXO set with balance summary
160
+ *
161
+ * This is the SINGLE method that vault-balance module should call.
162
+ * Returns everything needed to know about Bitcoin network state for an address.
163
+ *
164
+ * @param address - Bitcoin address
165
+ * @param minConfirmations - Minimum confirmations for "confirmed" status (REQUIRED - caller must specify)
166
+ * @returns Complete UTXO set with balance breakdown
167
+ */
168
+ async getUTXOSet(address, minConfirmations) {
169
+ const utxos = await this.getUTXOs(address);
170
+ const totalBalance = utxos.reduce((sum, utxo) => sum + utxo.satoshis, 0n);
171
+ const confirmedBalance = utxos
172
+ .filter((utxo) => utxo.confirmations >= minConfirmations)
173
+ .reduce((sum, utxo) => sum + utxo.satoshis, 0n);
174
+ const unconfirmedBalance = totalBalance - confirmedBalance;
175
+ return {
176
+ utxos,
177
+ totalBalance,
178
+ totalUTXOs: utxos.length,
179
+ confirmedBalance,
180
+ unconfirmedBalance,
181
+ };
182
+ }
183
+ /**
184
+ * Get transaction with confirmation count
185
+ *
186
+ * Checks if transaction exists on Bitcoin network and returns confirmation count.
187
+ * Used to validate authorized spends have been broadcasted.
188
+ *
189
+ * @param txid - Transaction ID to check
190
+ * @returns Transaction with confirmation count, or null if not found
191
+ */
192
+ async getTransaction(txid) {
193
+ // If RPC helper is provided (for regtest/testing), use it directly
194
+ if (this.config.rpcHelper) {
195
+ try {
196
+ const wallet = this.config.rpcWallet || "";
197
+ const tx = await this.config.rpcHelper.getTransaction(wallet, txid);
198
+ return {
199
+ txid: tx.txid,
200
+ confirmations: tx.confirmations || 0,
201
+ };
202
+ }
203
+ catch (error) {
204
+ // Transaction not found
205
+ if (error.message?.includes("Invalid or non-wallet transaction") ||
206
+ error.code === -5) {
207
+ return null;
208
+ }
209
+ throw error;
210
+ }
211
+ }
212
+ // Try provider API
213
+ const controller = new AbortController();
214
+ const timeoutId = setTimeout(() => controller.abort(), this.timeout);
215
+ try {
216
+ const response = await fetch(`${this.config.providerUrl}/api/tx/${txid}`, {
217
+ signal: controller.signal,
218
+ });
219
+ clearTimeout(timeoutId);
220
+ if (!response.ok) {
221
+ if (response.status === 404) {
222
+ return null; // Transaction not found
223
+ }
224
+ throw new Error(`Bitcoin provider error: ${response.status} ${response.statusText}`);
225
+ }
226
+ const data = await response.json();
227
+ // Blockstream API format
228
+ if (data.status) {
229
+ return {
230
+ txid: data.txid,
231
+ confirmations: data.status.confirmed
232
+ ? data.status.block_height
233
+ ? 1
234
+ : 0
235
+ : 0,
236
+ };
237
+ }
238
+ return null;
239
+ }
240
+ catch (error) {
241
+ clearTimeout(timeoutId);
242
+ if (error.name === "AbortError") {
243
+ throw new Error(`Request timeout after ${this.timeout}ms`);
244
+ }
245
+ // 404 means transaction not found
246
+ if (error.message?.includes("404")) {
247
+ return null;
248
+ }
249
+ throw error;
250
+ }
251
+ }
252
+ }
253
+ exports.BitcoinDataProvider = BitcoinDataProvider;
254
+ /**
255
+ * Factory function for creating Bitcoin Data Provider
256
+ * Useful for dependency injection and testing
257
+ */
258
+ function createBitcoinDataProvider(config) {
259
+ return new BitcoinDataProvider(config);
260
+ }
261
+ //# sourceMappingURL=bitcoin-data-provider.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bitcoin-data-provider.module.js","sourceRoot":"","sources":["../../../src/modules/bitcoin-data-provider.module.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Business Rules Math Module
3
+ *
4
+ * Pure calculation functions for Diamond Hands Protocol business logic.
5
+ * These functions contain no side effects - they only perform calculations.
6
+ *
7
+ * Used by vault-snapshot and other modules for consistent math across the system.
8
+ */
9
+ /**
10
+ * Calculate term start timestamp from expiry timestamp and term length
11
+ *
12
+ * Contract stores expiryAt but not termStartTimestamp.
13
+ * We derive it: termStart = expiry - (termLength * 30 days)
14
+ *
15
+ * Uses constants to avoid magic numbers and ensure accuracy.
16
+ *
17
+ * @param expiryTimestamp - Unix timestamp when term expires (0 if no term)
18
+ * @param termLengthMonths - Term length in months
19
+ * @returns Unix timestamp when term started (0 if no term)
20
+ */
21
+ export declare function calculateTermStartFromExpiry(expiryTimestamp: number, termLengthMonths: number): number;
22
+ /**
23
+ * Calculate term status from timestamps
24
+ *
25
+ * Determines:
26
+ * - How long into the term we are
27
+ * - Whether term is expired
28
+ * - Days until expiry or days into grace period
29
+ *
30
+ * @param termStartTimestamp - Unix timestamp when term started (0 if not started)
31
+ * @param selectedTermMonths - Term length in months
32
+ * @returns Complete term status metrics
33
+ */
34
+ export declare function calculateTermStatus(termStartTimestamp: number, selectedTermMonths: number): {
35
+ termDurationDays: number;
36
+ termLengthDays: number;
37
+ isExpired: boolean;
38
+ daysUntilExpiry: number;
39
+ daysIntoGracePeriod: number;
40
+ };
41
+ /**
42
+ * Calculate current liquidation threshold with grace period escalation
43
+ *
44
+ * Active loan: 130% (13000 bps)
45
+ * Expired:
46
+ * Day 0: 110% (11000 bps)
47
+ * Day 30: 200% (20000 bps)
48
+ * Quadratic escalation between
49
+ *
50
+ * Uses integer-only math for deterministic results across all platforms.
51
+ *
52
+ * @param isExpired - Whether loan is expired
53
+ * @param daysIntoGracePeriod - Days past expiry (0 if not expired)
54
+ * @returns Liquidation threshold in basis points
55
+ */
56
+ export declare function calculateLiquidationThreshold(isExpired: boolean, daysIntoGracePeriod: number): number;
57
+ /**
58
+ * Calculate collateral metrics from BTC balance and debt
59
+ *
60
+ * Converts BTC balance to USD value and calculates collateral ratio.
61
+ * Uses BigInt for all calculations to avoid JavaScript number precision issues.
62
+ *
63
+ * @param availableBTCSats - Available BTC balance in satoshis
64
+ * @param btcPriceUsd - BTC price with 8 decimals (e.g., 10000000000000 = $100,000)
65
+ * @param ucdDebt - UCD debt in wei (18 decimals)
66
+ * @returns Collateral value in USD and ratio in basis points
67
+ */
68
+ export declare function calculateCollateralMetrics(availableBTCSats: bigint, btcPriceUsd: bigint, ucdDebt: bigint): {
69
+ collateralValueUsd: bigint;
70
+ collateralRatioBps: number;
71
+ };
72
+ /**
73
+ * Check if adding additional debt would maintain required collateral ratio
74
+ *
75
+ * Used by minting authorization to validate new mints.
76
+ *
77
+ * @param collateralValueUsd - Current collateral value in USD (whole dollars)
78
+ * @param currentDebt - Current UCD debt in wei (18 decimals)
79
+ * @param additionalDebt - Additional UCD debt to add in wei (18 decimals)
80
+ * @param requiredRatioBps - Required collateral ratio in basis points (e.g., 13000 for 130%)
81
+ * @returns True if sufficient collateral exists after adding debt
82
+ */
83
+ export declare function hasSufficientCollateralForDebt(collateralValueUsd: bigint, currentDebt: bigint, additionalDebt: bigint, requiredRatioBps: number): boolean;
84
+ /**
85
+ * Calculate fee from amount using basis points
86
+ *
87
+ * Bulletproof fee calculation with validation.
88
+ * Multiply before divide to maintain precision.
89
+ *
90
+ * @param amount - Principal amount (in wei or sats)
91
+ * @param feeBps - Fee in basis points (e.g., 50 = 0.5%)
92
+ * @returns Fee amount in same units as input
93
+ *
94
+ * @example
95
+ * calculateFeeBps(1000000000000000000n, 50) // 0.5% of 1 ETH
96
+ * // Returns: 5000000000000000n (0.005 ETH)
97
+ */
98
+ export declare function calculateFeeBps(amount: bigint, feeBps: number): bigint;
99
+ /**
100
+ * Calculate USD value of BTC amount
101
+ *
102
+ * Converts satoshis to USD using price with 8 decimals.
103
+ * Result maintains 8 decimal precision.
104
+ *
105
+ * @param btcSats - Bitcoin amount in satoshis
106
+ * @param btcPriceUsd8Decimals - BTC price with 8 decimals (e.g., 9800000000000n = $98,000)
107
+ * @returns USD value with 8 decimals
108
+ *
109
+ * @example
110
+ * calculateBtcValueUsd(100000000n, 9800000000000n) // 1 BTC at $98,000
111
+ * // Returns: 9800000000000n ($98,000 with 8 decimals)
112
+ */
113
+ export declare function calculateBtcValueUsd(btcSats: bigint, btcPriceUsd8Decimals: bigint): bigint;
114
+ /**
115
+ * Calculate collateral ratio in basis points (with 8-decimal collateral and 18-decimal debt)
116
+ *
117
+ * Used for UCD mint validation where collateral is in USD (8 decimals)
118
+ * and debt is in UCD wei (18 decimals).
119
+ *
120
+ * @param collateralValueUsd8Decimals - Collateral value in USD with 8 decimals
121
+ * @param debtUsd18Decimals - Debt amount in USD with 18 decimals (UCD wei)
122
+ * @returns Collateral ratio in basis points (e.g., 20000 = 200%)
123
+ *
124
+ * @example
125
+ * calculateCollateralRatioBps(9800000000000n, 4000000000000000000000n)
126
+ * // $98,000 collateral / $4,000 debt = 24.5 = 2450% = 24500 bps
127
+ * // Returns: 24500
128
+ */
129
+ export declare function calculateCollateralRatioBps(collateralValueUsd8Decimals: bigint, debtUsd18Decimals: bigint): number;
130
+ /**
131
+ * Check if collateral ratio meets minimum requirement
132
+ *
133
+ * @param collateralValueUsd8Decimals - Collateral value in USD with 8 decimals
134
+ * @param debtUsd18Decimals - Debt amount in USD with 18 decimals
135
+ * @param minimumRatioBps - Minimum required ratio in basis points (e.g., 20000 = 200%)
136
+ * @returns True if collateral is sufficient
137
+ *
138
+ * @example
139
+ * isCollateralSufficient(20000000000000n, 10000000000000000000000n, 20000)
140
+ * // $200,000 collateral / $10,000 debt = 2000% >= 200%
141
+ * // Returns: true
142
+ */
143
+ export declare function isCollateralSufficient(collateralValueUsd8Decimals: bigint, debtUsd18Decimals: bigint, minimumRatioBps: number): boolean;
144
+ /**
145
+ * Convert basis points to percentage (for display)
146
+ *
147
+ * @param basisPoints - Value in basis points
148
+ * @returns Percentage as number (e.g., 20000 bps => 200)
149
+ *
150
+ * @example
151
+ * bpsToPercent(20000) // Returns: 200
152
+ * bpsToPercent(50) // Returns: 0.5
153
+ */
154
+ export declare function bpsToPercent(basisPoints: number): number;
155
+ //# sourceMappingURL=business-rules-math.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"business-rules-math.module.d.ts","sourceRoot":"","sources":["../../../src/modules/business-rules-math.module.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH;;;;;;;;;;;GAWG;AACH,wBAAgB,4BAA4B,CAC1C,eAAe,EAAE,MAAM,EACvB,gBAAgB,EAAE,MAAM,GACvB,MAAM,CAgBR;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CACjC,kBAAkB,EAAE,MAAM,EAC1B,kBAAkB,EAAE,MAAM,GACzB;IACD,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CA4BA;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,OAAO,EAClB,mBAAmB,EAAE,MAAM,GAC1B,MAAM,CAwBR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,0BAA0B,CACxC,gBAAgB,EAAE,MAAM,EACxB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd;IACD,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;CAC5B,CAyCA;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,8BAA8B,CAC5C,kBAAkB,EAAE,MAAM,EAC1B,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAgBT;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAatE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,EACf,oBAAoB,EAAE,MAAM,GAC3B,MAAM,CAcR;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,2BAA2B,CACzC,2BAA2B,EAAE,MAAM,EACnC,iBAAiB,EAAE,MAAM,GACxB,MAAM,CA4BR;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CACpC,2BAA2B,EAAE,MAAM,EACnC,iBAAiB,EAAE,MAAM,EACzB,eAAe,EAAE,MAAM,GACtB,OAAO,CAaT;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAExD"}