@gvnrdao/dh-lit-actions 0.0.61 → 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,125 @@
1
+ "use strict";
2
+ /**
3
+ * Protocol Parameters Module
4
+ *
5
+ * Fetches protocol parameters directly from smart contracts.
6
+ * This ensures LIT actions always use current values set by protocol governance.
7
+ *
8
+ * Parameters fetched:
9
+ * - Liquidation threshold (from LoanOperationsManager)
10
+ * - Term-specific fees (from TermManager)
11
+ */
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.ProtocolParametersModule = void 0;
14
+ exports.createProtocolParametersModule = createProtocolParametersModule;
15
+ /**
16
+ * Protocol Parameters Module
17
+ *
18
+ * Fetches governance-controlled parameters from smart contracts
19
+ */
20
+ class ProtocolParametersModule {
21
+ constructor(config) {
22
+ this.termManagerAddress = config.termManagerAddress;
23
+ this.loanOpsManagerAddress = config.loanOpsManagerAddress;
24
+ this.chain = config.chain;
25
+ this.chainId = config.chainId;
26
+ this.rpcUrl = config.rpcUrl;
27
+ }
28
+ /**
29
+ * Get liquidation threshold from LoanOperationsManager
30
+ *
31
+ * @returns Liquidation threshold in basis points
32
+ */
33
+ async getLiquidationThreshold() {
34
+ try {
35
+ // Get RPC URL - either from config (for local testing) or from Lit runtime
36
+ let rpcUrl;
37
+ if (this.rpcUrl) {
38
+ rpcUrl = this.rpcUrl;
39
+ }
40
+ else {
41
+ // @ts-ignore - Lit.Actions available in LIT runtime
42
+ rpcUrl = await Lit.Actions.getRpcUrl({ chain: this.chain });
43
+ }
44
+ // @ts-ignore - ethers available in LIT runtime
45
+ // StaticJsonRpcProvider with explicit network bypasses auto-detection (required for ngrok URLs)
46
+ const provider = new ethers.providers.StaticJsonRpcProvider(rpcUrl, { name: 'any', chainId: 1337 });
47
+ const abi = [
48
+ {
49
+ inputs: [],
50
+ name: "liquidationThreshold",
51
+ outputs: [{ internalType: "uint256", name: "", type: "uint256" }],
52
+ stateMutability: "view",
53
+ type: "function",
54
+ },
55
+ ];
56
+ // @ts-ignore - ethers available in LIT runtime
57
+ const contract = new ethers.Contract(this.loanOpsManagerAddress, abi, provider);
58
+ const result = await contract.liquidationThreshold();
59
+ return Number(result.toString());
60
+ }
61
+ catch (error) {
62
+ console.error("[ProtocolParameters] Error fetching liquidation threshold:", error.message);
63
+ throw new Error(`Failed to fetch liquidation threshold: ${error.message}`);
64
+ }
65
+ }
66
+ /**
67
+ * Get term-specific fees from TermManager
68
+ *
69
+ * @param termMonths Loan term in months
70
+ * @returns Term fees (origination and extension) in basis points
71
+ */
72
+ async getTermFees(termMonths) {
73
+ try {
74
+ // Get RPC URL - either from config (for local testing) or from Lit runtime
75
+ let rpcUrl;
76
+ if (this.rpcUrl) {
77
+ rpcUrl = this.rpcUrl;
78
+ }
79
+ else {
80
+ // @ts-ignore - Lit.Actions available in LIT runtime
81
+ rpcUrl = await Lit.Actions.getRpcUrl({ chain: this.chain });
82
+ }
83
+ // @ts-ignore - ethers available in LIT runtime
84
+ // StaticJsonRpcProvider with explicit network bypasses auto-detection (required for ngrok URLs)
85
+ const provider = new ethers.providers.StaticJsonRpcProvider(rpcUrl, { name: 'any', chainId: 1337 });
86
+ const abi = [
87
+ {
88
+ inputs: [
89
+ { internalType: "uint256", name: "_termMonths", type: "uint256" },
90
+ ],
91
+ name: "getTermFees",
92
+ outputs: [
93
+ { internalType: "uint88", name: "originationFee", type: "uint88" },
94
+ { internalType: "uint88", name: "extensionFee", type: "uint88" },
95
+ ],
96
+ stateMutability: "view",
97
+ type: "function",
98
+ },
99
+ ];
100
+ // @ts-ignore - ethers available in LIT runtime
101
+ const contract = new ethers.Contract(this.termManagerAddress, abi, provider);
102
+ const result = await contract.getTermFees(termMonths);
103
+ return {
104
+ originationFeeBps: Number(result.originationFee?.toString?.() ??
105
+ result[0]?.toString?.() ??
106
+ result[0]),
107
+ extensionFeeBps: Number(result.extensionFee?.toString?.() ??
108
+ result[1]?.toString?.() ??
109
+ result[1]),
110
+ };
111
+ }
112
+ catch (error) {
113
+ console.error("[ProtocolParameters] Error fetching term fees:", error.message);
114
+ throw new Error(`Failed to fetch term fees: ${error.message}`);
115
+ }
116
+ }
117
+ }
118
+ exports.ProtocolParametersModule = ProtocolParametersModule;
119
+ /**
120
+ * Factory function to create protocol parameters module
121
+ */
122
+ function createProtocolParametersModule(config) {
123
+ return new ProtocolParametersModule(config);
124
+ }
125
+ //# sourceMappingURL=protocol-parameters.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol-parameters.module.js","sourceRoot":"","sources":["../../../src/modules/protocol-parameters.module.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Quantum Time Window Utilities for LIT Actions
3
+ *
4
+ * PRIMARY WORKFLOW FOR LIT ACTIONS:
5
+ *
6
+ * ```typescript
7
+ * // 1. Wait for safe quantum moment (waits if in dead zone)
8
+ * await waitForSafeQuantumMoment();
9
+ *
10
+ * // 2. Validate signature timestamp (throws if invalid)
11
+ * validateQuantumTimestamp(timestampOnSignature);
12
+ * ```
13
+ *
14
+ * The macro validateQuantumTimestamp() combines waiting + validation:
15
+ * - Ensures LIT Action only validates when NOT in dead zone
16
+ * - Ensures signature is from current quantum (prevents replay attacks)
17
+ * - Throws error if validation fails
18
+ *
19
+ * Dead Zone Protection (16 seconds: 8+8):
20
+ * - Protects against clock desynchronization
21
+ * - Protects against Ethereum miner timestamp manipulation (±15s)
22
+ * - Ensures deterministic validation across all validators
23
+ *
24
+ * See QUANTUM_TIME_WINDOW.md for full documentation.
25
+ */
26
+ /**
27
+ * Calculate quantum window start for given timestamp
28
+ *
29
+ * @param timestamp - Unix timestamp in seconds
30
+ * @returns Quantum window start timestamp
31
+ */
32
+ export declare function getQuantumStart(timestamp: number): number;
33
+ /**
34
+ * Calculate quantum window end for given timestamp
35
+ *
36
+ * @param timestamp - Unix timestamp in seconds
37
+ * @returns Quantum window end timestamp
38
+ */
39
+ export declare function getQuantumEnd(timestamp: number): number;
40
+ /**
41
+ * Get current quantum timestamp (start of current quantum)
42
+ *
43
+ * Use this for signing operations.
44
+ *
45
+ * @returns Current quantum start timestamp
46
+ */
47
+ export declare function getCurrentQuantumTimestamp(): number;
48
+ /**
49
+ * Check if currently in dead zone (last 8s before boundary + first 8s after boundary)
50
+ *
51
+ * Dead zone = seconds 92-99 OR 0-7 of each quantum
52
+ *
53
+ * @param now - Current Unix timestamp (defaults to Date.now()/1000)
54
+ * @returns True if in dead zone
55
+ */
56
+ export declare function isInDeadZone(now?: number): boolean;
57
+ /**
58
+ * Get seconds remaining in current quantum
59
+ *
60
+ * @param now - Current Unix timestamp (defaults to Date.now()/1000)
61
+ * @returns Seconds until quantum expires
62
+ */
63
+ export declare function getSecondsRemainingInQuantum(now?: number): number;
64
+ /**
65
+ * Wait for safe quantum moment (LIT Actions use)
66
+ *
67
+ * LIT Actions must wait during dead zone to ensure deterministic validation.
68
+ * Waits until second 8 of next quantum (first safe second).
69
+ *
70
+ * Decision logic:
71
+ * - If in dead zone: Wait until second 8 of next quantum
72
+ * - Otherwise: Proceed immediately
73
+ *
74
+ * @returns Promise that resolves when safe to operate
75
+ */
76
+ export declare function waitForSafeQuantumMoment(): Promise<void>;
77
+ /**
78
+ * Validate timestamp is from current quantum (throws on invalid)
79
+ *
80
+ * This is the PRIMARY macro for LIT Actions validation.
81
+ *
82
+ * Usage:
83
+ * 1. Wait for safe moment: await waitForSafeQuantumMoment()
84
+ * 2. Validate signature: validateQuantumTimestamp(signatureTimestamp)
85
+ *
86
+ * @param timestampOnSignature - Timestamp from signed message
87
+ * @param now - Current Unix timestamp (defaults to Date.now()/1000)
88
+ * @throws Error if timestamp is not from current quantum
89
+ */
90
+ export declare function validateQuantumTimestamp(timestampOnSignature: number, now?: number): void;
91
+ /**
92
+ * Check if timestamp is valid (boolean version - does not throw)
93
+ *
94
+ * Rules:
95
+ * 1. Must be current quantum (not previous, not future)
96
+ *
97
+ * NOTE: Dead zone doesn't invalidate timestamps - only affects WHEN we validate.
98
+ * LIT Actions should WAIT during dead zone, but can validate any timestamp from current quantum.
99
+ *
100
+ * @param signatureTimestamp - Timestamp from signed message
101
+ * @param now - Current Unix timestamp (defaults to Date.now()/1000)
102
+ * @returns True if valid
103
+ */
104
+ export declare function isTimestampValid(signatureTimestamp: number, now?: number): boolean;
105
+ /**
106
+ * Get next quantum timestamp
107
+ *
108
+ * @param now - Current Unix timestamp (defaults to Date.now()/1000)
109
+ * @returns Next quantum timestamp
110
+ */
111
+ export declare function getNextQuantumTimestamp(now?: number): number;
112
+ /**
113
+ * Get quantum info for debugging
114
+ *
115
+ * @param now - Current Unix timestamp (defaults to Date.now()/1000)
116
+ * @returns Quantum information object
117
+ */
118
+ export declare function getQuantumInfo(now?: number): {
119
+ currentTime: number;
120
+ currentQuantum: number;
121
+ timeInQuantum: number;
122
+ secondsRemaining: number;
123
+ isInDeadZone: boolean;
124
+ nextQuantum: number;
125
+ };
126
+ /**
127
+ * Get safe quantum info (async - waits if needed)
128
+ *
129
+ * This is useful for debugging but not typically needed in LIT Actions.
130
+ * LIT Actions should use waitForSafeQuantumMoment() + validateQuantumTimestamp().
131
+ *
132
+ * @returns Promise resolving to quantum information for safe operation
133
+ */
134
+ export declare function getSafeQuantumInfo(): Promise<{
135
+ currentTime: number;
136
+ currentQuantum: number;
137
+ timeInQuantum: number;
138
+ secondsRemaining: number;
139
+ isInDeadZone: boolean;
140
+ nextQuantum: number;
141
+ }>;
142
+ /**
143
+ * Format quantum info for debugging
144
+ *
145
+ * @param now - Current Unix timestamp (defaults to Date.now()/1000)
146
+ * @returns Human-readable quantum info
147
+ */
148
+ export declare function formatQuantumInfo(now?: number): string;
149
+ //# sourceMappingURL=quantum-time.module.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quantum-time.module.d.ts","sourceRoot":"","sources":["../../../src/modules/quantum-time.module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAOH;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAIzD;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,IAAI,MAAM,CAGnD;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,OAAO,CAKlD;AAED;;;;;GAKG;AACH,wBAAgB,4BAA4B,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAIjE;AACD;;;;;;;;;;;GAWG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC,CA4B9D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,wBAAwB,CACtC,oBAAoB,EAAE,MAAM,EAC5B,GAAG,CAAC,EAAE,MAAM,GACX,IAAI,CAWN;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAC9B,kBAAkB,EAAE,MAAM,EAC1B,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAgBT;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAI5D;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG;IAC5C,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB,CAcA;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC;IAClD,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC,CAMD;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAgBtD"}
@@ -0,0 +1,240 @@
1
+ "use strict";
2
+ /**
3
+ * Quantum Time Window Utilities for LIT Actions
4
+ *
5
+ * PRIMARY WORKFLOW FOR LIT ACTIONS:
6
+ *
7
+ * ```typescript
8
+ * // 1. Wait for safe quantum moment (waits if in dead zone)
9
+ * await waitForSafeQuantumMoment();
10
+ *
11
+ * // 2. Validate signature timestamp (throws if invalid)
12
+ * validateQuantumTimestamp(timestampOnSignature);
13
+ * ```
14
+ *
15
+ * The macro validateQuantumTimestamp() combines waiting + validation:
16
+ * - Ensures LIT Action only validates when NOT in dead zone
17
+ * - Ensures signature is from current quantum (prevents replay attacks)
18
+ * - Throws error if validation fails
19
+ *
20
+ * Dead Zone Protection (16 seconds: 8+8):
21
+ * - Protects against clock desynchronization
22
+ * - Protects against Ethereum miner timestamp manipulation (±15s)
23
+ * - Ensures deterministic validation across all validators
24
+ *
25
+ * See QUANTUM_TIME_WINDOW.md for full documentation.
26
+ */
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.getQuantumStart = getQuantumStart;
29
+ exports.getQuantumEnd = getQuantumEnd;
30
+ exports.getCurrentQuantumTimestamp = getCurrentQuantumTimestamp;
31
+ exports.isInDeadZone = isInDeadZone;
32
+ exports.getSecondsRemainingInQuantum = getSecondsRemainingInQuantum;
33
+ exports.waitForSafeQuantumMoment = waitForSafeQuantumMoment;
34
+ exports.validateQuantumTimestamp = validateQuantumTimestamp;
35
+ exports.isTimestampValid = isTimestampValid;
36
+ exports.getNextQuantumTimestamp = getNextQuantumTimestamp;
37
+ exports.getQuantumInfo = getQuantumInfo;
38
+ exports.getSafeQuantumInfo = getSafeQuantumInfo;
39
+ exports.formatQuantumInfo = formatQuantumInfo;
40
+ const constants_1 = require("../constants");
41
+ /**
42
+ * Calculate quantum window start for given timestamp
43
+ *
44
+ * @param timestamp - Unix timestamp in seconds
45
+ * @returns Quantum window start timestamp
46
+ */
47
+ function getQuantumStart(timestamp) {
48
+ return (Math.floor(timestamp / constants_1.QUANTUM_WINDOW_SECONDS) * constants_1.QUANTUM_WINDOW_SECONDS);
49
+ }
50
+ /**
51
+ * Calculate quantum window end for given timestamp
52
+ *
53
+ * @param timestamp - Unix timestamp in seconds
54
+ * @returns Quantum window end timestamp
55
+ */
56
+ function getQuantumEnd(timestamp) {
57
+ return getQuantumStart(timestamp) + constants_1.QUANTUM_WINDOW_SECONDS;
58
+ }
59
+ /**
60
+ * Get current quantum timestamp (start of current quantum)
61
+ *
62
+ * Use this for signing operations.
63
+ *
64
+ * @returns Current quantum start timestamp
65
+ */
66
+ function getCurrentQuantumTimestamp() {
67
+ const now = Math.floor(Date.now() / 1000);
68
+ return getQuantumStart(now);
69
+ }
70
+ /**
71
+ * Check if currently in dead zone (last 8s before boundary + first 8s after boundary)
72
+ *
73
+ * Dead zone = seconds 92-99 OR 0-7 of each quantum
74
+ *
75
+ * @param now - Current Unix timestamp (defaults to Date.now()/1000)
76
+ * @returns True if in dead zone
77
+ */
78
+ function isInDeadZone(now) {
79
+ const currentTime = now ?? Math.floor(Date.now() / 1000);
80
+ const timeInQuantum = currentTime % constants_1.QUANTUM_WINDOW_SECONDS;
81
+ // Last 8 seconds OR first 8 seconds
82
+ return timeInQuantum >= 92 || timeInQuantum < 8;
83
+ }
84
+ /**
85
+ * Get seconds remaining in current quantum
86
+ *
87
+ * @param now - Current Unix timestamp (defaults to Date.now()/1000)
88
+ * @returns Seconds until quantum expires
89
+ */
90
+ function getSecondsRemainingInQuantum(now) {
91
+ const currentTime = now ?? Math.floor(Date.now() / 1000);
92
+ const timeInQuantum = currentTime % constants_1.QUANTUM_WINDOW_SECONDS;
93
+ return constants_1.QUANTUM_WINDOW_SECONDS - timeInQuantum;
94
+ }
95
+ /**
96
+ * Wait for safe quantum moment (LIT Actions use)
97
+ *
98
+ * LIT Actions must wait during dead zone to ensure deterministic validation.
99
+ * Waits until second 8 of next quantum (first safe second).
100
+ *
101
+ * Decision logic:
102
+ * - If in dead zone: Wait until second 8 of next quantum
103
+ * - Otherwise: Proceed immediately
104
+ *
105
+ * @returns Promise that resolves when safe to operate
106
+ */
107
+ async function waitForSafeQuantumMoment() {
108
+ const now = Math.floor(Date.now() / 1000);
109
+ const timeInQuantum = now % constants_1.QUANTUM_WINDOW_SECONDS;
110
+ if (!isInDeadZone(now)) {
111
+ return; // Safe to proceed immediately
112
+ }
113
+ // Calculate wait time to reach second 8 of next quantum
114
+ let waitSeconds;
115
+ if (timeInQuantum >= 92) {
116
+ // In dead zone before boundary (seconds 92-99)
117
+ // Wait to second 8 of next quantum
118
+ waitSeconds = 100 - timeInQuantum + 8;
119
+ }
120
+ else {
121
+ // In dead zone after boundary (seconds 0-7)
122
+ // Wait until second 8
123
+ waitSeconds = 8 - timeInQuantum;
124
+ }
125
+ console.log(`[Quantum] Waiting ${waitSeconds}s for safe moment (current time in quantum: ${timeInQuantum}s)`);
126
+ await new Promise((resolve) => setTimeout(resolve, waitSeconds * 1000));
127
+ console.log(`[Quantum] Safe quantum ready: ${getCurrentQuantumTimestamp()}`);
128
+ }
129
+ /**
130
+ * Validate timestamp is from current quantum (throws on invalid)
131
+ *
132
+ * This is the PRIMARY macro for LIT Actions validation.
133
+ *
134
+ * Usage:
135
+ * 1. Wait for safe moment: await waitForSafeQuantumMoment()
136
+ * 2. Validate signature: validateQuantumTimestamp(signatureTimestamp)
137
+ *
138
+ * @param timestampOnSignature - Timestamp from signed message
139
+ * @param now - Current Unix timestamp (defaults to Date.now()/1000)
140
+ * @throws Error if timestamp is not from current quantum
141
+ */
142
+ function validateQuantumTimestamp(timestampOnSignature, now) {
143
+ const currentTime = now ?? Math.floor(Date.now() / 1000);
144
+ const currentQuantum = getQuantumStart(currentTime);
145
+ const signatureQuantum = getQuantumStart(timestampOnSignature);
146
+ // Must be current quantum
147
+ if (signatureQuantum !== currentQuantum) {
148
+ throw new Error(`[Quantum] Invalid timestamp: signature from quantum ${signatureQuantum}, current quantum is ${currentQuantum}`);
149
+ }
150
+ }
151
+ /**
152
+ * Check if timestamp is valid (boolean version - does not throw)
153
+ *
154
+ * Rules:
155
+ * 1. Must be current quantum (not previous, not future)
156
+ *
157
+ * NOTE: Dead zone doesn't invalidate timestamps - only affects WHEN we validate.
158
+ * LIT Actions should WAIT during dead zone, but can validate any timestamp from current quantum.
159
+ *
160
+ * @param signatureTimestamp - Timestamp from signed message
161
+ * @param now - Current Unix timestamp (defaults to Date.now()/1000)
162
+ * @returns True if valid
163
+ */
164
+ function isTimestampValid(signatureTimestamp, now) {
165
+ const currentTime = now ?? Math.floor(Date.now() / 1000);
166
+ const currentQuantum = getQuantumStart(currentTime);
167
+ const signatureQuantum = getQuantumStart(signatureTimestamp);
168
+ // Must be current quantum
169
+ if (signatureQuantum !== currentQuantum) {
170
+ console.error(`[Quantum] Signature not from current quantum:`, `\n Current: ${currentQuantum}`, `\n Signature: ${signatureQuantum}`);
171
+ return false;
172
+ }
173
+ return true;
174
+ }
175
+ /**
176
+ * Get next quantum timestamp
177
+ *
178
+ * @param now - Current Unix timestamp (defaults to Date.now()/1000)
179
+ * @returns Next quantum timestamp
180
+ */
181
+ function getNextQuantumTimestamp(now) {
182
+ const currentTime = now ?? Math.floor(Date.now() / 1000);
183
+ const currentQuantum = getQuantumStart(currentTime);
184
+ return currentQuantum + constants_1.QUANTUM_WINDOW_SECONDS;
185
+ }
186
+ /**
187
+ * Get quantum info for debugging
188
+ *
189
+ * @param now - Current Unix timestamp (defaults to Date.now()/1000)
190
+ * @returns Quantum information object
191
+ */
192
+ function getQuantumInfo(now) {
193
+ const currentTime = now ?? Math.floor(Date.now() / 1000);
194
+ const currentQuantum = getQuantumStart(currentTime);
195
+ const timeInQuantum = currentTime % constants_1.QUANTUM_WINDOW_SECONDS;
196
+ const secondsRemaining = constants_1.QUANTUM_WINDOW_SECONDS - timeInQuantum;
197
+ return {
198
+ currentTime,
199
+ currentQuantum,
200
+ timeInQuantum,
201
+ secondsRemaining,
202
+ isInDeadZone: isInDeadZone(currentTime),
203
+ nextQuantum: getNextQuantumTimestamp(currentTime),
204
+ };
205
+ }
206
+ /**
207
+ * Get safe quantum info (async - waits if needed)
208
+ *
209
+ * This is useful for debugging but not typically needed in LIT Actions.
210
+ * LIT Actions should use waitForSafeQuantumMoment() + validateQuantumTimestamp().
211
+ *
212
+ * @returns Promise resolving to quantum information for safe operation
213
+ */
214
+ async function getSafeQuantumInfo() {
215
+ // Wait for safe moment if needed
216
+ await waitForSafeQuantumMoment();
217
+ // Now get info (guaranteed to be outside dead zone)
218
+ return getQuantumInfo();
219
+ }
220
+ /**
221
+ * Format quantum info for debugging
222
+ *
223
+ * @param now - Current Unix timestamp (defaults to Date.now()/1000)
224
+ * @returns Human-readable quantum info
225
+ */
226
+ function formatQuantumInfo(now) {
227
+ const info = getQuantumInfo(now);
228
+ const startDate = new Date(info.currentQuantum * 1000).toISOString();
229
+ const endDate = new Date((info.currentQuantum + constants_1.QUANTUM_WINDOW_SECONDS) * 1000).toISOString();
230
+ return [
231
+ `Quantum Window:`,
232
+ ` Start: ${startDate} (${info.currentQuantum})`,
233
+ ` End: ${endDate} (${info.currentQuantum + constants_1.QUANTUM_WINDOW_SECONDS})`,
234
+ ` Duration: ${constants_1.QUANTUM_WINDOW_SECONDS}s`,
235
+ ` Time in quantum: ${info.timeInQuantum}s`,
236
+ ` Remaining: ${info.secondsRemaining}s`,
237
+ ` In Dead Zone: ${info.isInDeadZone}`,
238
+ ].join("\n");
239
+ }
240
+ //# sourceMappingURL=quantum-time.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quantum-time.module.js","sourceRoot":"","sources":["../../../src/modules/quantum-time.module.ts"],"names":[],"mappings":"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"}