@toon-protocol/connector 3.3.0 → 3.3.2

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 (473) hide show
  1. package/dist/btp/btp-claim-types.d.ts +52 -0
  2. package/dist/btp/btp-claim-types.d.ts.map +1 -0
  3. package/dist/btp/btp-claim-types.js +209 -0
  4. package/dist/btp/btp-claim-types.js.map +1 -0
  5. package/dist/btp/btp-client-manager.d.ts +30 -0
  6. package/dist/btp/btp-client-manager.d.ts.map +1 -0
  7. package/dist/btp/btp-client-manager.js +153 -0
  8. package/dist/btp/btp-client-manager.js.map +1 -0
  9. package/dist/btp/btp-client.d.ts +58 -0
  10. package/dist/btp/btp-client.d.ts.map +1 -0
  11. package/dist/btp/btp-client.js +485 -0
  12. package/dist/btp/btp-client.js.map +1 -0
  13. package/dist/btp/btp-message-parser.d.ts +4 -0
  14. package/dist/btp/btp-message-parser.d.ts.map +1 -0
  15. package/dist/btp/btp-message-parser.js +211 -0
  16. package/dist/btp/btp-message-parser.js.map +1 -0
  17. package/dist/btp/btp-server.d.ts +33 -0
  18. package/dist/btp/btp-server.d.ts.map +1 -0
  19. package/dist/btp/btp-server.js +485 -0
  20. package/dist/btp/btp-server.js.map +1 -0
  21. package/dist/btp/btp-types.d.ts +43 -0
  22. package/dist/btp/btp-types.d.ts.map +1 -0
  23. package/dist/btp/btp-types.js +44 -0
  24. package/dist/btp/btp-types.js.map +1 -0
  25. package/dist/btp/inbound-claim-validator.d.ts +20 -0
  26. package/dist/btp/inbound-claim-validator.d.ts.map +1 -0
  27. package/dist/btp/inbound-claim-validator.js +150 -0
  28. package/dist/btp/inbound-claim-validator.js.map +1 -0
  29. package/dist/cli/index.d.ts +3 -0
  30. package/dist/cli/index.d.ts.map +1 -0
  31. package/dist/cli/index.js +175 -0
  32. package/dist/cli/index.js.map +1 -0
  33. package/dist/cli/onboarding-wizard.d.ts +7 -0
  34. package/dist/cli/onboarding-wizard.d.ts.map +1 -0
  35. package/dist/cli/onboarding-wizard.js +257 -0
  36. package/dist/cli/onboarding-wizard.js.map +1 -0
  37. package/dist/cli/types.d.ts +38 -0
  38. package/dist/cli/types.d.ts.map +1 -0
  39. package/dist/cli/types.js +3 -0
  40. package/dist/cli/types.js.map +1 -0
  41. package/dist/config/config-loader.d.ts +24 -0
  42. package/dist/config/config-loader.d.ts.map +1 -0
  43. package/dist/config/config-loader.js +436 -0
  44. package/dist/config/config-loader.js.map +1 -0
  45. package/dist/config/environment-validator.d.ts +4 -0
  46. package/dist/config/environment-validator.d.ts.map +1 -0
  47. package/dist/config/environment-validator.js +239 -0
  48. package/dist/config/environment-validator.js.map +1 -0
  49. package/dist/config/index.d.ts +3 -0
  50. package/dist/config/index.d.ts.map +1 -0
  51. package/dist/config/index.js +7 -0
  52. package/dist/config/index.js.map +1 -0
  53. package/dist/config/key-manager-config.d.ts +7 -0
  54. package/dist/config/key-manager-config.d.ts.map +1 -0
  55. package/dist/config/key-manager-config.js +209 -0
  56. package/dist/config/key-manager-config.js.map +1 -0
  57. package/dist/config/topology-validator.d.ts +14 -0
  58. package/dist/config/topology-validator.d.ts.map +1 -0
  59. package/dist/config/topology-validator.js +142 -0
  60. package/dist/config/topology-validator.js.map +1 -0
  61. package/dist/config/types.d.ts +226 -0
  62. package/dist/config/types.d.ts.map +1 -0
  63. package/dist/config/types.js +52 -0
  64. package/dist/config/types.js.map +1 -0
  65. package/dist/core/connector-node.d.ts +91 -0
  66. package/dist/core/connector-node.d.ts.map +1 -0
  67. package/dist/core/connector-node.js +1322 -0
  68. package/dist/core/connector-node.js.map +1 -0
  69. package/dist/core/local-delivery-client.d.ts +16 -0
  70. package/dist/core/local-delivery-client.d.ts.map +1 -0
  71. package/dist/core/local-delivery-client.js +160 -0
  72. package/dist/core/local-delivery-client.js.map +1 -0
  73. package/dist/core/packet-handler.d.ts +57 -0
  74. package/dist/core/packet-handler.d.ts.map +1 -0
  75. package/dist/core/packet-handler.js +655 -0
  76. package/dist/core/packet-handler.js.map +1 -0
  77. package/dist/core/payment-handler.d.ts +25 -0
  78. package/dist/core/payment-handler.d.ts.map +1 -0
  79. package/dist/core/payment-handler.js +104 -0
  80. package/dist/core/payment-handler.js.map +1 -0
  81. package/dist/discovery/index.d.ts +3 -0
  82. package/dist/discovery/index.d.ts.map +1 -0
  83. package/dist/discovery/index.js +6 -0
  84. package/dist/discovery/index.js.map +1 -0
  85. package/dist/discovery/peer-discovery-service.d.ts +29 -0
  86. package/dist/discovery/peer-discovery-service.d.ts.map +1 -0
  87. package/dist/discovery/peer-discovery-service.js +230 -0
  88. package/dist/discovery/peer-discovery-service.js.map +1 -0
  89. package/dist/discovery/types.d.ts +38 -0
  90. package/dist/discovery/types.d.ts.map +1 -0
  91. package/dist/discovery/types.js +3 -0
  92. package/dist/discovery/types.js.map +1 -0
  93. package/dist/encoding/oer-parser.d.ts +39 -0
  94. package/dist/encoding/oer-parser.d.ts.map +1 -0
  95. package/dist/encoding/oer-parser.js +154 -0
  96. package/dist/encoding/oer-parser.js.map +1 -0
  97. package/dist/facilitator/index.d.ts +2 -0
  98. package/dist/facilitator/index.d.ts.map +1 -0
  99. package/dist/facilitator/index.js +7 -0
  100. package/dist/facilitator/index.js.map +1 -0
  101. package/dist/facilitator/spsp-client.d.ts +18 -0
  102. package/dist/facilitator/spsp-client.d.ts.map +1 -0
  103. package/dist/facilitator/spsp-client.js +95 -0
  104. package/dist/facilitator/spsp-client.js.map +1 -0
  105. package/dist/http/admin-api-inventory.d.ts +29 -0
  106. package/dist/http/admin-api-inventory.d.ts.map +1 -0
  107. package/dist/http/admin-api-inventory.js +480 -0
  108. package/dist/http/admin-api-inventory.js.map +1 -0
  109. package/dist/http/admin-api.d.ts +182 -0
  110. package/dist/http/admin-api.d.ts.map +1 -0
  111. package/dist/http/admin-api.js +1324 -0
  112. package/dist/http/admin-api.js.map +1 -0
  113. package/dist/http/admin-server.d.ts +49 -0
  114. package/dist/http/admin-server.d.ts.map +1 -0
  115. package/dist/http/admin-server.js +160 -0
  116. package/dist/http/admin-server.js.map +1 -0
  117. package/dist/http/health-server.d.ts +22 -0
  118. package/dist/http/health-server.d.ts.map +1 -0
  119. package/dist/http/health-server.js +192 -0
  120. package/dist/http/health-server.js.map +1 -0
  121. package/dist/http/ilp-send-handler.d.ts +15 -0
  122. package/dist/http/ilp-send-handler.d.ts.map +1 -0
  123. package/dist/http/ilp-send-handler.js +167 -0
  124. package/dist/http/ilp-send-handler.js.map +1 -0
  125. package/dist/http/types.d.ts +43 -0
  126. package/dist/http/types.d.ts.map +1 -0
  127. package/dist/http/types.js +3 -0
  128. package/dist/http/types.js.map +1 -0
  129. package/dist/index.d.ts +2 -0
  130. package/dist/index.d.ts.map +1 -0
  131. package/dist/index.js +5 -0
  132. package/dist/index.js.map +1 -0
  133. package/dist/lib.d.ts +22 -0
  134. package/dist/lib.d.ts.map +1 -0
  135. package/dist/lib.js +39 -0
  136. package/dist/lib.js.map +1 -0
  137. package/dist/main.d.ts +4 -0
  138. package/dist/main.d.ts.map +1 -0
  139. package/dist/main.js +79 -0
  140. package/dist/main.js.map +1 -0
  141. package/dist/observability/metrics-registry.d.ts +39 -0
  142. package/dist/observability/metrics-registry.d.ts.map +1 -0
  143. package/dist/observability/metrics-registry.js +151 -0
  144. package/dist/observability/metrics-registry.js.map +1 -0
  145. package/dist/routing/packet-processor.d.ts +36 -0
  146. package/dist/routing/packet-processor.d.ts.map +1 -0
  147. package/dist/routing/packet-processor.js +112 -0
  148. package/dist/routing/packet-processor.js.map +1 -0
  149. package/dist/routing/packet-worker.d.ts +10 -0
  150. package/dist/routing/packet-worker.d.ts.map +1 -0
  151. package/dist/routing/packet-worker.js +34 -0
  152. package/dist/routing/packet-worker.js.map +1 -0
  153. package/dist/routing/routing-table.d.ts +15 -0
  154. package/dist/routing/routing-table.d.ts.map +1 -0
  155. package/dist/routing/routing-table.js +63 -0
  156. package/dist/routing/routing-table.js.map +1 -0
  157. package/dist/routing/worker-pool.d.ts +43 -0
  158. package/dist/routing/worker-pool.d.ts.map +1 -0
  159. package/dist/routing/worker-pool.js +228 -0
  160. package/dist/routing/worker-pool.js.map +1 -0
  161. package/dist/security/alert-notifier.d.ts +34 -0
  162. package/dist/security/alert-notifier.d.ts.map +1 -0
  163. package/dist/security/alert-notifier.js +136 -0
  164. package/dist/security/alert-notifier.js.map +1 -0
  165. package/dist/security/audit-logger.d.ts +34 -0
  166. package/dist/security/audit-logger.d.ts.map +1 -0
  167. package/dist/security/audit-logger.js +132 -0
  168. package/dist/security/audit-logger.js.map +1 -0
  169. package/dist/security/backends/environment-backend.d.ts +15 -0
  170. package/dist/security/backends/environment-backend.d.ts.map +1 -0
  171. package/dist/security/backends/environment-backend.js +56 -0
  172. package/dist/security/backends/environment-backend.js.map +1 -0
  173. package/dist/security/fraud-detector.d.ts +79 -0
  174. package/dist/security/fraud-detector.d.ts.map +1 -0
  175. package/dist/security/fraud-detector.js +147 -0
  176. package/dist/security/fraud-detector.js.map +1 -0
  177. package/dist/security/key-manager-signer.d.ts +15 -0
  178. package/dist/security/key-manager-signer.d.ts.map +1 -0
  179. package/dist/security/key-manager-signer.js +91 -0
  180. package/dist/security/key-manager-signer.js.map +1 -0
  181. package/dist/security/key-manager.d.ts +69 -0
  182. package/dist/security/key-manager.d.ts.map +1 -0
  183. package/dist/security/key-manager.js +79 -0
  184. package/dist/security/key-manager.js.map +1 -0
  185. package/dist/security/key-rotation-manager.d.ts +27 -0
  186. package/dist/security/key-rotation-manager.d.ts.map +1 -0
  187. package/dist/security/key-rotation-manager.js +142 -0
  188. package/dist/security/key-rotation-manager.js.map +1 -0
  189. package/dist/security/rate-limit-config.d.ts +7 -0
  190. package/dist/security/rate-limit-config.d.ts.map +1 -0
  191. package/dist/security/rate-limit-config.js +57 -0
  192. package/dist/security/rate-limit-config.js.map +1 -0
  193. package/dist/security/rate-limiter.d.ts +46 -0
  194. package/dist/security/rate-limiter.d.ts.map +1 -0
  195. package/dist/security/rate-limiter.js +170 -0
  196. package/dist/security/rate-limiter.js.map +1 -0
  197. package/dist/security/reputation-tracker.d.ts +30 -0
  198. package/dist/security/reputation-tracker.d.ts.map +1 -0
  199. package/dist/security/reputation-tracker.js +111 -0
  200. package/dist/security/reputation-tracker.js.map +1 -0
  201. package/dist/security/rules/balance-manipulation-rule.d.ts +23 -0
  202. package/dist/security/rules/balance-manipulation-rule.d.ts.map +1 -0
  203. package/dist/security/rules/balance-manipulation-rule.js +70 -0
  204. package/dist/security/rules/balance-manipulation-rule.js.map +1 -0
  205. package/dist/security/rules/double-spend-detection-rule.d.ts +23 -0
  206. package/dist/security/rules/double-spend-detection-rule.d.ts.map +1 -0
  207. package/dist/security/rules/double-spend-detection-rule.js +61 -0
  208. package/dist/security/rules/double-spend-detection-rule.js.map +1 -0
  209. package/dist/security/rules/rapid-channel-closure-rule.d.ts +16 -0
  210. package/dist/security/rules/rapid-channel-closure-rule.d.ts.map +1 -0
  211. package/dist/security/rules/rapid-channel-closure-rule.js +57 -0
  212. package/dist/security/rules/rapid-channel-closure-rule.js.map +1 -0
  213. package/dist/security/rules/sudden-traffic-spike-rule.d.ts +18 -0
  214. package/dist/security/rules/sudden-traffic-spike-rule.d.ts.map +1 -0
  215. package/dist/security/rules/sudden-traffic-spike-rule.js +92 -0
  216. package/dist/security/rules/sudden-traffic-spike-rule.js.map +1 -0
  217. package/dist/security/rules/unusual-settlement-amount-rule.d.ts +12 -0
  218. package/dist/security/rules/unusual-settlement-amount-rule.d.ts.map +1 -0
  219. package/dist/security/rules/unusual-settlement-amount-rule.js +33 -0
  220. package/dist/security/rules/unusual-settlement-amount-rule.js.map +1 -0
  221. package/dist/security/token-bucket.d.ts +16 -0
  222. package/dist/security/token-bucket.d.ts.map +1 -0
  223. package/dist/security/token-bucket.js +49 -0
  224. package/dist/security/token-bucket.js.map +1 -0
  225. package/dist/security/violation-counter.d.ts +11 -0
  226. package/dist/security/violation-counter.d.ts.map +1 -0
  227. package/dist/security/violation-counter.js +61 -0
  228. package/dist/security/violation-counter.js.map +1 -0
  229. package/dist/settlement/account-id-generator.d.ts +4 -0
  230. package/dist/settlement/account-id-generator.d.ts.map +1 -0
  231. package/dist/settlement/account-id-generator.js +38 -0
  232. package/dist/settlement/account-id-generator.js.map +1 -0
  233. package/dist/settlement/account-manager.d.ts +51 -0
  234. package/dist/settlement/account-manager.d.ts.map +1 -0
  235. package/dist/settlement/account-manager.js +459 -0
  236. package/dist/settlement/account-manager.js.map +1 -0
  237. package/dist/settlement/account-metadata.d.ts +11 -0
  238. package/dist/settlement/account-metadata.d.ts.map +1 -0
  239. package/dist/settlement/account-metadata.js +40 -0
  240. package/dist/settlement/account-metadata.js.map +1 -0
  241. package/dist/settlement/channel-manager.d.ts +67 -0
  242. package/dist/settlement/channel-manager.d.ts.map +1 -0
  243. package/dist/settlement/channel-manager.js +226 -0
  244. package/dist/settlement/channel-manager.js.map +1 -0
  245. package/dist/settlement/claim-receiver-db-schema.d.ts +4 -0
  246. package/dist/settlement/claim-receiver-db-schema.d.ts.map +1 -0
  247. package/dist/settlement/claim-receiver-db-schema.js +25 -0
  248. package/dist/settlement/claim-receiver-db-schema.js.map +1 -0
  249. package/dist/settlement/claim-receiver.d.ts +67 -0
  250. package/dist/settlement/claim-receiver.d.ts.map +1 -0
  251. package/dist/settlement/claim-receiver.js +707 -0
  252. package/dist/settlement/claim-receiver.js.map +1 -0
  253. package/dist/settlement/claim-redemption-service.d.ts +39 -0
  254. package/dist/settlement/claim-redemption-service.d.ts.map +1 -0
  255. package/dist/settlement/claim-redemption-service.js +189 -0
  256. package/dist/settlement/claim-redemption-service.js.map +1 -0
  257. package/dist/settlement/claim-sender-db-schema.d.ts +3 -0
  258. package/dist/settlement/claim-sender-db-schema.d.ts.map +1 -0
  259. package/dist/settlement/claim-sender-db-schema.js +18 -0
  260. package/dist/settlement/claim-sender-db-schema.js.map +1 -0
  261. package/dist/settlement/claim-sender.d.ts +24 -0
  262. package/dist/settlement/claim-sender.d.ts.map +1 -0
  263. package/dist/settlement/claim-sender.js +146 -0
  264. package/dist/settlement/claim-sender.js.map +1 -0
  265. package/dist/settlement/eip712-helper.d.ts +13 -0
  266. package/dist/settlement/eip712-helper.d.ts.map +1 -0
  267. package/dist/settlement/eip712-helper.js +24 -0
  268. package/dist/settlement/eip712-helper.js.map +1 -0
  269. package/dist/settlement/in-memory-ledger-client.d.ts +40 -0
  270. package/dist/settlement/in-memory-ledger-client.d.ts.map +1 -0
  271. package/dist/settlement/in-memory-ledger-client.js +177 -0
  272. package/dist/settlement/in-memory-ledger-client.js.map +1 -0
  273. package/dist/settlement/ledger-client.d.ts +22 -0
  274. package/dist/settlement/ledger-client.d.ts.map +1 -0
  275. package/dist/settlement/ledger-client.js +3 -0
  276. package/dist/settlement/ledger-client.js.map +1 -0
  277. package/dist/settlement/metrics-collector.d.ts +29 -0
  278. package/dist/settlement/metrics-collector.d.ts.map +1 -0
  279. package/dist/settlement/metrics-collector.js +81 -0
  280. package/dist/settlement/metrics-collector.js.map +1 -0
  281. package/dist/settlement/mina-payment-channel-sdk.d.ts +73 -0
  282. package/dist/settlement/mina-payment-channel-sdk.d.ts.map +1 -0
  283. package/dist/settlement/mina-payment-channel-sdk.js +538 -0
  284. package/dist/settlement/mina-payment-channel-sdk.js.map +1 -0
  285. package/dist/settlement/payment-channel-sdk.d.ts +59 -0
  286. package/dist/settlement/payment-channel-sdk.d.ts.map +1 -0
  287. package/dist/settlement/payment-channel-sdk.js +677 -0
  288. package/dist/settlement/payment-channel-sdk.js.map +1 -0
  289. package/dist/settlement/per-packet-claim-service.d.ts +39 -0
  290. package/dist/settlement/per-packet-claim-service.d.ts.map +1 -0
  291. package/dist/settlement/per-packet-claim-service.js +342 -0
  292. package/dist/settlement/per-packet-claim-service.js.map +1 -0
  293. package/dist/settlement/privacy/index.d.ts +3 -0
  294. package/dist/settlement/privacy/index.d.ts.map +1 -0
  295. package/dist/settlement/privacy/index.js +11 -0
  296. package/dist/settlement/privacy/index.js.map +1 -0
  297. package/dist/settlement/privacy/nip59-claim-wrapper.d.ts +60 -0
  298. package/dist/settlement/privacy/nip59-claim-wrapper.d.ts.map +1 -0
  299. package/dist/settlement/privacy/nip59-claim-wrapper.js +361 -0
  300. package/dist/settlement/privacy/nip59-claim-wrapper.js.map +1 -0
  301. package/dist/settlement/provider/chain-provider-registry.d.ts +20 -0
  302. package/dist/settlement/provider/chain-provider-registry.d.ts.map +1 -0
  303. package/dist/settlement/provider/chain-provider-registry.js +53 -0
  304. package/dist/settlement/provider/chain-provider-registry.js.map +1 -0
  305. package/dist/settlement/provider/evm-payment-channel-provider.d.ts +31 -0
  306. package/dist/settlement/provider/evm-payment-channel-provider.d.ts.map +1 -0
  307. package/dist/settlement/provider/evm-payment-channel-provider.js +207 -0
  308. package/dist/settlement/provider/evm-payment-channel-provider.js.map +1 -0
  309. package/dist/settlement/provider/index.d.ts +6 -0
  310. package/dist/settlement/provider/index.d.ts.map +1 -0
  311. package/dist/settlement/provider/index.js +16 -0
  312. package/dist/settlement/provider/index.js.map +1 -0
  313. package/dist/settlement/provider/mina-payment-channel-provider.d.ts +43 -0
  314. package/dist/settlement/provider/mina-payment-channel-provider.d.ts.map +1 -0
  315. package/dist/settlement/provider/mina-payment-channel-provider.js +330 -0
  316. package/dist/settlement/provider/mina-payment-channel-provider.js.map +1 -0
  317. package/dist/settlement/provider/payment-channel-provider.d.ts +88 -0
  318. package/dist/settlement/provider/payment-channel-provider.d.ts.map +1 -0
  319. package/dist/settlement/provider/payment-channel-provider.js +3 -0
  320. package/dist/settlement/provider/payment-channel-provider.js.map +1 -0
  321. package/dist/settlement/provider/solana-payment-channel-provider.d.ts +38 -0
  322. package/dist/settlement/provider/solana-payment-channel-provider.d.ts.map +1 -0
  323. package/dist/settlement/provider/solana-payment-channel-provider.js +262 -0
  324. package/dist/settlement/provider/solana-payment-channel-provider.js.map +1 -0
  325. package/dist/settlement/sent-claims-queries.d.ts +23 -0
  326. package/dist/settlement/sent-claims-queries.d.ts.map +1 -0
  327. package/dist/settlement/sent-claims-queries.js +134 -0
  328. package/dist/settlement/sent-claims-queries.js.map +1 -0
  329. package/dist/settlement/settlement-api.d.ts +37 -0
  330. package/dist/settlement/settlement-api.d.ts.map +1 -0
  331. package/dist/settlement/settlement-api.js +172 -0
  332. package/dist/settlement/settlement-api.js.map +1 -0
  333. package/dist/settlement/settlement-coordinator.d.ts +47 -0
  334. package/dist/settlement/settlement-coordinator.d.ts.map +1 -0
  335. package/dist/settlement/settlement-coordinator.js +166 -0
  336. package/dist/settlement/settlement-coordinator.js.map +1 -0
  337. package/dist/settlement/settlement-executor.d.ts +51 -0
  338. package/dist/settlement/settlement-executor.d.ts.map +1 -0
  339. package/dist/settlement/settlement-executor.js +265 -0
  340. package/dist/settlement/settlement-executor.js.map +1 -0
  341. package/dist/settlement/settlement-monitor.d.ts +30 -0
  342. package/dist/settlement/settlement-monitor.d.ts.map +1 -0
  343. package/dist/settlement/settlement-monitor.js +141 -0
  344. package/dist/settlement/settlement-monitor.js.map +1 -0
  345. package/dist/settlement/solana-payment-channel-sdk.d.ts +79 -0
  346. package/dist/settlement/solana-payment-channel-sdk.d.ts.map +1 -0
  347. package/dist/settlement/solana-payment-channel-sdk.js +636 -0
  348. package/dist/settlement/solana-payment-channel-sdk.js.map +1 -0
  349. package/dist/settlement/tigerbeetle-batch-writer.d.ts +58 -0
  350. package/dist/settlement/tigerbeetle-batch-writer.d.ts.map +1 -0
  351. package/dist/settlement/tigerbeetle-batch-writer.js +162 -0
  352. package/dist/settlement/tigerbeetle-batch-writer.js.map +1 -0
  353. package/dist/settlement/tigerbeetle-client.d.ts +40 -0
  354. package/dist/settlement/tigerbeetle-client.d.ts.map +1 -0
  355. package/dist/settlement/tigerbeetle-client.js +279 -0
  356. package/dist/settlement/tigerbeetle-client.js.map +1 -0
  357. package/dist/settlement/tigerbeetle-errors.d.ts +23 -0
  358. package/dist/settlement/tigerbeetle-errors.d.ts.map +1 -0
  359. package/dist/settlement/tigerbeetle-errors.js +58 -0
  360. package/dist/settlement/tigerbeetle-errors.js.map +1 -0
  361. package/dist/settlement/types.d.ts +64 -0
  362. package/dist/settlement/types.d.ts.map +1 -0
  363. package/dist/settlement/types.js +42 -0
  364. package/dist/settlement/types.js.map +1 -0
  365. package/dist/settlement/unified-settlement-executor.d.ts +34 -0
  366. package/dist/settlement/unified-settlement-executor.d.ts.map +1 -0
  367. package/dist/settlement/unified-settlement-executor.js +145 -0
  368. package/dist/settlement/unified-settlement-executor.js.map +1 -0
  369. package/dist/test-utils/index.d.ts +3 -0
  370. package/dist/test-utils/index.d.ts.map +1 -0
  371. package/dist/test-utils/index.js +15 -0
  372. package/dist/test-utils/index.js.map +1 -0
  373. package/dist/test-utils/isolated-test-env.d.ts +31 -0
  374. package/dist/test-utils/isolated-test-env.d.ts.map +1 -0
  375. package/dist/test-utils/isolated-test-env.js +127 -0
  376. package/dist/test-utils/isolated-test-env.js.map +1 -0
  377. package/dist/test-utils/mock-factories-patch.d.ts +2 -0
  378. package/dist/test-utils/mock-factories-patch.d.ts.map +1 -0
  379. package/dist/test-utils/mock-factories-patch.js +3 -0
  380. package/dist/test-utils/mock-factories-patch.js.map +1 -0
  381. package/dist/test-utils/mock-factories.d.ts +22 -0
  382. package/dist/test-utils/mock-factories.d.ts.map +1 -0
  383. package/dist/test-utils/mock-factories.js +56 -0
  384. package/dist/test-utils/mock-factories.js.map +1 -0
  385. package/dist/transport/direct-transport-provider.d.ts +12 -0
  386. package/dist/transport/direct-transport-provider.d.ts.map +1 -0
  387. package/dist/transport/direct-transport-provider.js +27 -0
  388. package/dist/transport/direct-transport-provider.js.map +1 -0
  389. package/dist/transport/index.d.ts +7 -0
  390. package/dist/transport/index.d.ts.map +1 -0
  391. package/dist/transport/index.js +16 -0
  392. package/dist/transport/index.js.map +1 -0
  393. package/dist/transport/managed-anon-client.d.ts +47 -0
  394. package/dist/transport/managed-anon-client.d.ts.map +1 -0
  395. package/dist/transport/managed-anon-client.js +265 -0
  396. package/dist/transport/managed-anon-client.js.map +1 -0
  397. package/dist/transport/probe-tcp-port.d.ts +3 -0
  398. package/dist/transport/probe-tcp-port.d.ts.map +1 -0
  399. package/dist/transport/probe-tcp-port.js +59 -0
  400. package/dist/transport/probe-tcp-port.js.map +1 -0
  401. package/dist/transport/socks-transport-provider.d.ts +29 -0
  402. package/dist/transport/socks-transport-provider.d.ts.map +1 -0
  403. package/dist/transport/socks-transport-provider.js +136 -0
  404. package/dist/transport/socks-transport-provider.js.map +1 -0
  405. package/dist/transport/socks-url.d.ts +6 -0
  406. package/dist/transport/socks-url.d.ts.map +1 -0
  407. package/dist/transport/socks-url.js +29 -0
  408. package/dist/transport/socks-url.js.map +1 -0
  409. package/dist/transport/transport-provider.d.ts +9 -0
  410. package/dist/transport/transport-provider.d.ts.map +1 -0
  411. package/dist/transport/transport-provider.js +3 -0
  412. package/dist/transport/transport-provider.js.map +1 -0
  413. package/dist/utils/connection-pool.d.ts +42 -0
  414. package/dist/utils/connection-pool.d.ts.map +1 -0
  415. package/dist/utils/connection-pool.js +209 -0
  416. package/dist/utils/connection-pool.js.map +1 -0
  417. package/dist/utils/evm-rpc-connection-pool.d.ts +8 -0
  418. package/dist/utils/evm-rpc-connection-pool.d.ts.map +1 -0
  419. package/dist/utils/evm-rpc-connection-pool.js +40 -0
  420. package/dist/utils/evm-rpc-connection-pool.js.map +1 -0
  421. package/dist/utils/logger.d.ts +6 -0
  422. package/dist/utils/logger.d.ts.map +1 -0
  423. package/dist/utils/logger.js +58 -0
  424. package/dist/utils/logger.js.map +1 -0
  425. package/dist/utils/optional-require.d.ts +2 -0
  426. package/dist/utils/optional-require.d.ts.map +1 -0
  427. package/dist/utils/optional-require.js +54 -0
  428. package/dist/utils/optional-require.js.map +1 -0
  429. package/dist/utils/redact.d.ts +3 -0
  430. package/dist/utils/redact.d.ts.map +1 -0
  431. package/dist/utils/redact.js +21 -0
  432. package/dist/utils/redact.js.map +1 -0
  433. package/dist/wallet/audit-logger.d.ts +22 -0
  434. package/dist/wallet/audit-logger.d.ts.map +1 -0
  435. package/dist/wallet/audit-logger.js +120 -0
  436. package/dist/wallet/audit-logger.js.map +1 -0
  437. package/dist/wallet/fraud-detector-interface.d.ts +14 -0
  438. package/dist/wallet/fraud-detector-interface.d.ts.map +1 -0
  439. package/dist/wallet/fraud-detector-interface.js +3 -0
  440. package/dist/wallet/fraud-detector-interface.js.map +1 -0
  441. package/dist/wallet/key-manager.d.ts +6 -0
  442. package/dist/wallet/key-manager.d.ts.map +1 -0
  443. package/dist/wallet/key-manager.js +3 -0
  444. package/dist/wallet/key-manager.js.map +1 -0
  445. package/dist/wallet/rate-limiter.d.ts +26 -0
  446. package/dist/wallet/rate-limiter.d.ts.map +1 -0
  447. package/dist/wallet/rate-limiter.js +114 -0
  448. package/dist/wallet/rate-limiter.js.map +1 -0
  449. package/dist/wallet/suspicious-activity-detector.d.ts +25 -0
  450. package/dist/wallet/suspicious-activity-detector.d.ts.map +1 -0
  451. package/dist/wallet/suspicious-activity-detector.js +97 -0
  452. package/dist/wallet/suspicious-activity-detector.js.map +1 -0
  453. package/dist/wallet/treasury-wallet.d.ts +20 -0
  454. package/dist/wallet/treasury-wallet.d.ts.map +1 -0
  455. package/dist/wallet/treasury-wallet.js +151 -0
  456. package/dist/wallet/treasury-wallet.js.map +1 -0
  457. package/dist/wallet/wallet-authentication.d.ts +31 -0
  458. package/dist/wallet/wallet-authentication.d.ts.map +1 -0
  459. package/dist/wallet/wallet-authentication.js +102 -0
  460. package/dist/wallet/wallet-authentication.js.map +1 -0
  461. package/dist/wallet/wallet-db-schema.d.ts +11 -0
  462. package/dist/wallet/wallet-db-schema.d.ts.map +1 -0
  463. package/dist/wallet/wallet-db-schema.js +79 -0
  464. package/dist/wallet/wallet-db-schema.js.map +1 -0
  465. package/dist/wallet/wallet-security.d.ts +58 -0
  466. package/dist/wallet/wallet-security.d.ts.map +1 -0
  467. package/dist/wallet/wallet-security.js +148 -0
  468. package/dist/wallet/wallet-security.js.map +1 -0
  469. package/dist/wallet/wallet-seed-manager.d.ts +65 -0
  470. package/dist/wallet/wallet-seed-manager.d.ts.map +1 -0
  471. package/dist/wallet/wallet-seed-manager.js +418 -0
  472. package/dist/wallet/wallet-seed-manager.js.map +1 -0
  473. package/package.json +2 -2
@@ -0,0 +1,636 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateKeyPairSigner = exports.SolanaPaymentChannelSDK = exports.SolanaChannelError = void 0;
4
+ exports.mapProgramError = mapProgramError;
5
+ exports.parseSolanaError = parseSolanaError;
6
+ exports.deserializeChannelState = deserializeChannelState;
7
+ exports.buildEd25519PrecompileInstruction = buildEd25519PrecompileInstruction;
8
+ const tslib_1 = require("tslib");
9
+ const crypto = tslib_1.__importStar(require("crypto"));
10
+ const kit_1 = require("@solana/kit");
11
+ Object.defineProperty(exports, "generateKeyPairSigner", { enumerable: true, get: function () { return kit_1.generateKeyPairSigner; } });
12
+ const CHANNEL_DISCRIMINATOR = new Uint8Array([0x70, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c]);
13
+ const DISCRIMINATORS = {
14
+ INITIALIZE_CHANNEL: new Uint8Array([0x01, 0, 0, 0, 0, 0, 0, 0]),
15
+ DEPOSIT: new Uint8Array([0x02, 0, 0, 0, 0, 0, 0, 0]),
16
+ CLOSE_CHANNEL: new Uint8Array([0x03, 0, 0, 0, 0, 0, 0, 0]),
17
+ SETTLE_CHANNEL: new Uint8Array([0x04, 0, 0, 0, 0, 0, 0, 0]),
18
+ FORCE_CLOSE_EXPIRED: new Uint8Array([0x05, 0, 0, 0, 0, 0, 0, 0]),
19
+ CLAIM_FROM_CHANNEL: new Uint8Array([0x06, 0, 0, 0, 0, 0, 0, 0]),
20
+ };
21
+ const ACCOUNT_SIZE = 178;
22
+ const SYSTEM_PROGRAM = '11111111111111111111111111111111';
23
+ const TOKEN_PROGRAM = 'TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA';
24
+ const RENT_SYSVAR = 'SysvarRent111111111111111111111111111111111';
25
+ const CLOCK_SYSVAR = 'SysvarC1ock11111111111111111111111111111111';
26
+ const INSTRUCTIONS_SYSVAR = 'Sysvar1nstructions1111111111111111111111111';
27
+ const ED25519_PROGRAM = 'Ed25519SigVerify111111111111111111111111111';
28
+ const ERROR_CODE_MAP = {
29
+ 0: 'ChannelAlreadyExists',
30
+ 1: 'ChannelNotOpened',
31
+ 2: 'ChannelNotClosed',
32
+ 3: 'ChannelChallengeNotExpired',
33
+ 4: 'InvalidParticipant',
34
+ 5: 'ZeroAmountDeposit',
35
+ 6: 'NonceNotMonotonic',
36
+ 7: 'TransferredAmountDecreased',
37
+ 8: 'InvalidSignature',
38
+ 9: 'UnauthorizedSigner',
39
+ 10: 'ArithmeticOverflow',
40
+ 11: 'InvalidPDA',
41
+ 12: 'InvalidVaultPDA',
42
+ };
43
+ class SolanaChannelError extends Error {
44
+ code;
45
+ errorName;
46
+ constructor(message, code, errorName) {
47
+ super(message);
48
+ this.code = code;
49
+ this.errorName = errorName;
50
+ this.name = 'SolanaChannelError';
51
+ Error.captureStackTrace(this, SolanaChannelError);
52
+ }
53
+ }
54
+ exports.SolanaChannelError = SolanaChannelError;
55
+ function toMutableBytes(readonly) {
56
+ return new Uint8Array(readonly);
57
+ }
58
+ const MAX_U64 = (1n << 64n) - 1n;
59
+ function writeUint64LE(buf, offset, value) {
60
+ if (value < 0n || value > MAX_U64) {
61
+ throw new RangeError(`Value ${value} is outside u64 range [0, 2^64-1]`);
62
+ }
63
+ for (let i = 0; i < 8; i++) {
64
+ buf[offset + i] = Number((value >> BigInt(i * 8)) & 0xffn);
65
+ }
66
+ }
67
+ function readUint64LE(buf, offset) {
68
+ let result = 0n;
69
+ for (let i = 0; i < 8; i++) {
70
+ result |= BigInt(buf[offset + i] ?? 0) << BigInt(i * 8);
71
+ }
72
+ return result;
73
+ }
74
+ function readInt64LE(buf, offset) {
75
+ const unsigned = readUint64LE(buf, offset);
76
+ if (unsigned >= 1n << 63n) {
77
+ return unsigned - (1n << 64n);
78
+ }
79
+ return unsigned;
80
+ }
81
+ function sortParticipants(a, b) {
82
+ const encoder = (0, kit_1.getAddressEncoder)();
83
+ const aBytes = toMutableBytes(encoder.encode(a));
84
+ const bBytes = toMutableBytes(encoder.encode(b));
85
+ for (let i = 0; i < 32; i++) {
86
+ const aByte = aBytes[i] ?? 0;
87
+ const bByte = bBytes[i] ?? 0;
88
+ if (aByte < bByte)
89
+ return [a, b];
90
+ if (aByte > bByte)
91
+ return [b, a];
92
+ }
93
+ return [a, b];
94
+ }
95
+ function mapStateU8(val) {
96
+ switch (val) {
97
+ case 0:
98
+ return 'opened';
99
+ case 1:
100
+ return 'closed';
101
+ case 2:
102
+ return 'settled';
103
+ default:
104
+ throw new Error(`Unknown channel state byte: ${val}`);
105
+ }
106
+ }
107
+ function mapProgramError(code) {
108
+ const errorName = ERROR_CODE_MAP[code] ?? `UnknownError(${code})`;
109
+ return new SolanaChannelError(`Solana payment channel program error: ${errorName} (code ${code})`, code, errorName);
110
+ }
111
+ function parseSolanaError(err) {
112
+ if (err instanceof Error) {
113
+ const message = err.message;
114
+ const hexMatch = /custom program error: 0x([0-9a-fA-F]+)/.exec(message);
115
+ if (hexMatch?.[1]) {
116
+ const code = parseInt(hexMatch[1], 16);
117
+ if (code >= 0 && code <= 12) {
118
+ throw mapProgramError(code);
119
+ }
120
+ }
121
+ const customMatch = /Custom:\s*(\d+)/.exec(message);
122
+ if (customMatch?.[1]) {
123
+ const code = parseInt(customMatch[1], 10);
124
+ if (code >= 0 && code <= 12) {
125
+ throw mapProgramError(code);
126
+ }
127
+ }
128
+ const instructionErrorMatch = /InstructionError.*Custom.*?(\d+)/.exec(message);
129
+ if (instructionErrorMatch?.[1]) {
130
+ const code = parseInt(instructionErrorMatch[1], 10);
131
+ if (code >= 0 && code <= 12) {
132
+ throw mapProgramError(code);
133
+ }
134
+ }
135
+ }
136
+ throw err;
137
+ }
138
+ function deserializeChannelState(data) {
139
+ if (data.length < ACCOUNT_SIZE) {
140
+ throw new Error(`Channel account data too short: expected ${ACCOUNT_SIZE} bytes, got ${data.length}`);
141
+ }
142
+ for (let i = 0; i < 8; i++) {
143
+ if (data[i] !== CHANNEL_DISCRIMINATOR[i]) {
144
+ throw new Error('Invalid channel account discriminator: expected "pchannel"');
145
+ }
146
+ }
147
+ const decoder = (0, kit_1.getAddressDecoder)();
148
+ return {
149
+ participantA: decoder.decode(data.slice(8, 40)),
150
+ participantB: decoder.decode(data.slice(40, 72)),
151
+ tokenMint: decoder.decode(data.slice(72, 104)),
152
+ depositA: readUint64LE(data, 104),
153
+ depositB: readUint64LE(data, 112),
154
+ transferredAmountA: readUint64LE(data, 120),
155
+ transferredAmountB: readUint64LE(data, 128),
156
+ nonceA: readUint64LE(data, 136),
157
+ nonceB: readUint64LE(data, 144),
158
+ challengeDuration: readUint64LE(data, 152),
159
+ state: mapStateU8(data[160] ?? 0),
160
+ closeTimestamp: readInt64LE(data, 161),
161
+ bump: data[169] ?? 0,
162
+ };
163
+ }
164
+ function buildEd25519PrecompileInstruction(signature, pubkey, message) {
165
+ if (signature.length !== 64) {
166
+ throw new Error(`Ed25519 signature must be 64 bytes, got ${signature.length}`);
167
+ }
168
+ if (pubkey.length !== 32) {
169
+ throw new Error(`Ed25519 public key must be 32 bytes, got ${pubkey.length}`);
170
+ }
171
+ if (message.length === 0) {
172
+ throw new Error('Ed25519 precompile message must not be empty');
173
+ }
174
+ const HEADER_SIZE = 16;
175
+ const totalSize = HEADER_SIZE + 64 + 32 + message.length;
176
+ const instructionData = new Uint8Array(totalSize);
177
+ instructionData[0] = 1;
178
+ instructionData[1] = 0;
179
+ const sigOffset = HEADER_SIZE;
180
+ const pkOffset = sigOffset + 64;
181
+ const msgOffset = pkOffset + 32;
182
+ instructionData[2] = sigOffset & 0xff;
183
+ instructionData[3] = (sigOffset >> 8) & 0xff;
184
+ instructionData[4] = 0xff;
185
+ instructionData[5] = 0xff;
186
+ instructionData[6] = pkOffset & 0xff;
187
+ instructionData[7] = (pkOffset >> 8) & 0xff;
188
+ instructionData[8] = 0xff;
189
+ instructionData[9] = 0xff;
190
+ instructionData[10] = msgOffset & 0xff;
191
+ instructionData[11] = (msgOffset >> 8) & 0xff;
192
+ instructionData[12] = message.length & 0xff;
193
+ instructionData[13] = (message.length >> 8) & 0xff;
194
+ instructionData[14] = 0xff;
195
+ instructionData[15] = 0xff;
196
+ instructionData.set(signature, sigOffset);
197
+ instructionData.set(pubkey, pkOffset);
198
+ instructionData.set(message, msgOffset);
199
+ return {
200
+ programAddress: ED25519_PROGRAM,
201
+ accounts: [],
202
+ data: instructionData,
203
+ };
204
+ }
205
+ class SolanaPaymentChannelSDK {
206
+ _rpc;
207
+ _rpcSubscriptions;
208
+ _programId;
209
+ _logger;
210
+ constructor(rpcUrl, programId, logger) {
211
+ this._programId = (0, kit_1.address)(programId);
212
+ this._logger = logger.child({ component: 'solana-payment-channel-sdk' });
213
+ this._rpc = (0, kit_1.createSolanaRpc)(rpcUrl);
214
+ this._rpcSubscriptions = (0, kit_1.createSolanaRpcSubscriptions)(rpcUrl.replace('http', 'ws'));
215
+ }
216
+ static deriveChannelPDA(participantA, participantB, tokenMint, programId) {
217
+ const addrA = (0, kit_1.address)(participantA);
218
+ const addrB = (0, kit_1.address)(participantB);
219
+ const mint = (0, kit_1.address)(tokenMint);
220
+ const program = (0, kit_1.address)(programId);
221
+ const [min, max] = sortParticipants(addrA, addrB);
222
+ const encoder = (0, kit_1.getAddressEncoder)();
223
+ const seeds = [
224
+ new TextEncoder().encode('channel'),
225
+ toMutableBytes(encoder.encode(min)),
226
+ toMutableBytes(encoder.encode(max)),
227
+ toMutableBytes(encoder.encode(mint)),
228
+ ];
229
+ const pdaResult = findProgramDerivedAddressSync(seeds, program);
230
+ return { pda: pdaResult[0], bump: pdaResult[1] };
231
+ }
232
+ static deriveVaultPDA(channelPDA, programId) {
233
+ const channel = (0, kit_1.address)(channelPDA);
234
+ const program = (0, kit_1.address)(programId);
235
+ const encoder = (0, kit_1.getAddressEncoder)();
236
+ const seeds = [
237
+ new TextEncoder().encode('vault'),
238
+ toMutableBytes(encoder.encode(channel)),
239
+ ];
240
+ const pdaResult = findProgramDerivedAddressSync(seeds, program);
241
+ return { pda: pdaResult[0], bump: pdaResult[1] };
242
+ }
243
+ static _buildBalanceProofMessage(channelPDA, nonce, transferredAmount) {
244
+ const message = new Uint8Array(48);
245
+ const encoder = (0, kit_1.getAddressEncoder)();
246
+ const pdaBytes = toMutableBytes(encoder.encode((0, kit_1.address)(channelPDA)));
247
+ message.set(pdaBytes, 0);
248
+ writeUint64LE(message, 32, nonce);
249
+ writeUint64LE(message, 40, transferredAmount);
250
+ return message;
251
+ }
252
+ static async signBalanceProof(channelPDA, nonce, transferredAmount, keypair) {
253
+ const message = SolanaPaymentChannelSDK._buildBalanceProofMessage(channelPDA, nonce, transferredAmount);
254
+ const signature = await (0, kit_1.signBytes)(keypair.privateKey, message);
255
+ return new Uint8Array(signature);
256
+ }
257
+ async openChannel(payer, participantA, participantB, tokenMint, challengeDuration) {
258
+ this._logger.info({
259
+ event: 'open_channel_start',
260
+ participantA,
261
+ participantB,
262
+ tokenMint,
263
+ challengeDuration: challengeDuration.toString(),
264
+ }, 'Opening Solana payment channel');
265
+ const { pda: channelPDA } = SolanaPaymentChannelSDK.deriveChannelPDA(participantA, participantB, tokenMint, this._programId);
266
+ const { pda: vaultPDA } = SolanaPaymentChannelSDK.deriveVaultPDA(channelPDA, this._programId);
267
+ const instructionData = new Uint8Array(16);
268
+ instructionData.set(DISCRIMINATORS.INITIALIZE_CHANNEL, 0);
269
+ writeUint64LE(instructionData, 8, challengeDuration);
270
+ const accounts = [
271
+ { address: payer.address, role: kit_1.AccountRole.WRITABLE_SIGNER },
272
+ { address: (0, kit_1.address)(participantA), role: kit_1.AccountRole.READONLY },
273
+ { address: (0, kit_1.address)(participantB), role: kit_1.AccountRole.READONLY },
274
+ { address: (0, kit_1.address)(tokenMint), role: kit_1.AccountRole.READONLY },
275
+ { address: (0, kit_1.address)(channelPDA), role: kit_1.AccountRole.WRITABLE },
276
+ { address: (0, kit_1.address)(vaultPDA), role: kit_1.AccountRole.WRITABLE },
277
+ { address: SYSTEM_PROGRAM, role: kit_1.AccountRole.READONLY },
278
+ { address: TOKEN_PROGRAM, role: kit_1.AccountRole.READONLY },
279
+ { address: RENT_SYSVAR, role: kit_1.AccountRole.READONLY },
280
+ ];
281
+ const instruction = {
282
+ programAddress: this._programId,
283
+ accounts,
284
+ data: instructionData,
285
+ };
286
+ try {
287
+ const txSignature = await this._sendTransaction(payer, [instruction]);
288
+ this._logger.info({
289
+ event: 'open_channel_success',
290
+ channelPDA,
291
+ txSignature,
292
+ }, 'Solana payment channel opened');
293
+ return { channelPDA, txSignature };
294
+ }
295
+ catch (err) {
296
+ this._logger.error({ event: 'open_channel_error', error: String(err) }, 'Failed to open Solana payment channel');
297
+ parseSolanaError(err);
298
+ }
299
+ }
300
+ async deposit(depositor, channelPDA, depositorTokenAccount, amount) {
301
+ this._logger.info({
302
+ event: 'deposit_start',
303
+ channelPDA,
304
+ amount: amount.toString(),
305
+ }, 'Depositing to Solana payment channel');
306
+ const { pda: vaultPDA } = SolanaPaymentChannelSDK.deriveVaultPDA(channelPDA, this._programId);
307
+ const instructionData = new Uint8Array(16);
308
+ instructionData.set(DISCRIMINATORS.DEPOSIT, 0);
309
+ writeUint64LE(instructionData, 8, amount);
310
+ const accounts = [
311
+ { address: depositor.address, role: kit_1.AccountRole.READONLY_SIGNER },
312
+ { address: (0, kit_1.address)(depositorTokenAccount), role: kit_1.AccountRole.WRITABLE },
313
+ { address: (0, kit_1.address)(vaultPDA), role: kit_1.AccountRole.WRITABLE },
314
+ { address: (0, kit_1.address)(channelPDA), role: kit_1.AccountRole.WRITABLE },
315
+ { address: TOKEN_PROGRAM, role: kit_1.AccountRole.READONLY },
316
+ ];
317
+ const instruction = {
318
+ programAddress: this._programId,
319
+ accounts,
320
+ data: instructionData,
321
+ };
322
+ try {
323
+ const txSignature = await this._sendTransaction(depositor, [instruction]);
324
+ this._logger.info({ event: 'deposit_success', channelPDA, txSignature }, 'Deposit to Solana payment channel succeeded');
325
+ return { txSignature };
326
+ }
327
+ catch (err) {
328
+ this._logger.error({ event: 'deposit_error', error: String(err) }, 'Failed to deposit to Solana payment channel');
329
+ parseSolanaError(err);
330
+ }
331
+ }
332
+ async claimFromChannel(claimer, channelPDA, nonce, transferredAmount, signature) {
333
+ this._logger.info({
334
+ event: 'claim_start',
335
+ channelPDA,
336
+ nonce: nonce.toString(),
337
+ transferredAmount: transferredAmount.toString(),
338
+ }, 'Claiming from Solana payment channel');
339
+ const encoder = (0, kit_1.getAddressEncoder)();
340
+ const claimerPubkey = toMutableBytes(encoder.encode(claimer.address));
341
+ const balanceProofMessage = SolanaPaymentChannelSDK._buildBalanceProofMessage(channelPDA, nonce, transferredAmount);
342
+ const ed25519Instruction = buildEd25519PrecompileInstruction(signature, claimerPubkey, balanceProofMessage);
343
+ const claimData = new Uint8Array(24);
344
+ claimData.set(DISCRIMINATORS.CLAIM_FROM_CHANNEL, 0);
345
+ writeUint64LE(claimData, 8, nonce);
346
+ writeUint64LE(claimData, 16, transferredAmount);
347
+ const claimAccounts = [
348
+ { address: claimer.address, role: kit_1.AccountRole.READONLY_SIGNER },
349
+ { address: (0, kit_1.address)(channelPDA), role: kit_1.AccountRole.WRITABLE },
350
+ { address: INSTRUCTIONS_SYSVAR, role: kit_1.AccountRole.READONLY },
351
+ ];
352
+ const claimInstruction = {
353
+ programAddress: this._programId,
354
+ accounts: claimAccounts,
355
+ data: claimData,
356
+ };
357
+ try {
358
+ const txSignature = await this._sendTransaction(claimer, [
359
+ ed25519Instruction,
360
+ claimInstruction,
361
+ ]);
362
+ this._logger.info({ event: 'claim_success', channelPDA, txSignature }, 'Claim from Solana payment channel succeeded');
363
+ return { txSignature };
364
+ }
365
+ catch (err) {
366
+ this._logger.error({ event: 'claim_error', error: String(err) }, 'Failed to claim from Solana payment channel');
367
+ parseSolanaError(err);
368
+ }
369
+ }
370
+ async closeChannel(closer, channelPDA) {
371
+ this._logger.info({ event: 'close_channel_start', channelPDA }, 'Closing Solana payment channel');
372
+ const accounts = [
373
+ { address: closer.address, role: kit_1.AccountRole.READONLY_SIGNER },
374
+ { address: (0, kit_1.address)(channelPDA), role: kit_1.AccountRole.WRITABLE },
375
+ { address: CLOCK_SYSVAR, role: kit_1.AccountRole.READONLY },
376
+ ];
377
+ const instruction = {
378
+ programAddress: this._programId,
379
+ accounts,
380
+ data: DISCRIMINATORS.CLOSE_CHANNEL,
381
+ };
382
+ try {
383
+ const txSignature = await this._sendTransaction(closer, [instruction]);
384
+ this._logger.info({ event: 'close_channel_success', channelPDA, txSignature }, 'Solana payment channel closed');
385
+ return { txSignature };
386
+ }
387
+ catch (err) {
388
+ this._logger.error({ event: 'close_channel_error', error: String(err) }, 'Failed to close Solana payment channel');
389
+ parseSolanaError(err);
390
+ }
391
+ }
392
+ async settleChannel(caller, channelPDA, participantAToken, participantBToken, rentRecipient) {
393
+ this._logger.info({ event: 'settle_channel_start', channelPDA }, 'Settling Solana payment channel');
394
+ const { pda: vaultPDA } = SolanaPaymentChannelSDK.deriveVaultPDA(channelPDA, this._programId);
395
+ const accounts = [
396
+ { address: caller.address, role: kit_1.AccountRole.READONLY_SIGNER },
397
+ { address: (0, kit_1.address)(channelPDA), role: kit_1.AccountRole.WRITABLE },
398
+ { address: (0, kit_1.address)(vaultPDA), role: kit_1.AccountRole.WRITABLE },
399
+ { address: (0, kit_1.address)(participantAToken), role: kit_1.AccountRole.WRITABLE },
400
+ { address: (0, kit_1.address)(participantBToken), role: kit_1.AccountRole.WRITABLE },
401
+ { address: (0, kit_1.address)(rentRecipient), role: kit_1.AccountRole.WRITABLE },
402
+ { address: TOKEN_PROGRAM, role: kit_1.AccountRole.READONLY },
403
+ { address: CLOCK_SYSVAR, role: kit_1.AccountRole.READONLY },
404
+ ];
405
+ const instruction = {
406
+ programAddress: this._programId,
407
+ accounts,
408
+ data: DISCRIMINATORS.SETTLE_CHANNEL,
409
+ };
410
+ try {
411
+ const txSignature = await this._sendTransaction(caller, [instruction]);
412
+ this._logger.info({ event: 'settle_channel_success', channelPDA, txSignature }, 'Solana payment channel settled');
413
+ return { txSignature };
414
+ }
415
+ catch (err) {
416
+ this._logger.error({ event: 'settle_channel_error', error: String(err) }, 'Failed to settle Solana payment channel');
417
+ parseSolanaError(err);
418
+ }
419
+ }
420
+ async forceCloseExpired(caller, channelPDA, participantAToken, participantBToken, rentRecipient) {
421
+ this._logger.info({ event: 'force_close_start', channelPDA }, 'Force closing expired Solana payment channel');
422
+ const { pda: vaultPDA } = SolanaPaymentChannelSDK.deriveVaultPDA(channelPDA, this._programId);
423
+ const accounts = [
424
+ { address: caller.address, role: kit_1.AccountRole.READONLY_SIGNER },
425
+ { address: (0, kit_1.address)(channelPDA), role: kit_1.AccountRole.WRITABLE },
426
+ { address: (0, kit_1.address)(vaultPDA), role: kit_1.AccountRole.WRITABLE },
427
+ { address: (0, kit_1.address)(participantAToken), role: kit_1.AccountRole.WRITABLE },
428
+ { address: (0, kit_1.address)(participantBToken), role: kit_1.AccountRole.WRITABLE },
429
+ { address: (0, kit_1.address)(rentRecipient), role: kit_1.AccountRole.WRITABLE },
430
+ { address: TOKEN_PROGRAM, role: kit_1.AccountRole.READONLY },
431
+ { address: CLOCK_SYSVAR, role: kit_1.AccountRole.READONLY },
432
+ ];
433
+ const instruction = {
434
+ programAddress: this._programId,
435
+ accounts,
436
+ data: DISCRIMINATORS.FORCE_CLOSE_EXPIRED,
437
+ };
438
+ try {
439
+ const txSignature = await this._sendTransaction(caller, [instruction]);
440
+ this._logger.info({ event: 'force_close_success', channelPDA, txSignature }, 'Force close expired Solana payment channel succeeded');
441
+ return { txSignature };
442
+ }
443
+ catch (err) {
444
+ this._logger.error({ event: 'force_close_error', error: String(err) }, 'Failed to force close expired Solana payment channel');
445
+ parseSolanaError(err);
446
+ }
447
+ }
448
+ async getMintMetadata(mintAddress) {
449
+ const fallback = { assetCode: mintAddress, assetScale: 0 };
450
+ try {
451
+ const accountInfo = await this._rpc
452
+ .getAccountInfo((0, kit_1.address)(mintAddress), { encoding: 'jsonParsed' })
453
+ .send();
454
+ if (!accountInfo.value) {
455
+ this._logger.warn({ event: 'spl_mint_not_found', mintAddress }, 'SPL mint account not found on-chain; using raw-address fallback');
456
+ return fallback;
457
+ }
458
+ const data = accountInfo.value.data;
459
+ if (data &&
460
+ typeof data === 'object' &&
461
+ 'parsed' in data &&
462
+ data.parsed &&
463
+ typeof data.parsed === 'object' &&
464
+ 'info' in data.parsed &&
465
+ data.parsed.info &&
466
+ typeof data.parsed.info === 'object' &&
467
+ 'decimals' in data.parsed.info &&
468
+ typeof data.parsed.info.decimals === 'number') {
469
+ const decimals = data.parsed.info.decimals;
470
+ return { assetCode: mintAddress, assetScale: decimals };
471
+ }
472
+ this._logger.warn({ event: 'spl_mint_unparseable', mintAddress }, 'SPL mint account parsed data missing decimals; using raw-address fallback');
473
+ return fallback;
474
+ }
475
+ catch (err) {
476
+ this._logger.warn({
477
+ event: 'spl_mint_rpc_failed',
478
+ mintAddress,
479
+ error: err instanceof Error ? err.message : String(err),
480
+ }, 'SPL mint RPC lookup failed; using raw-address fallback');
481
+ return fallback;
482
+ }
483
+ }
484
+ async getChannelState(channelPDA) {
485
+ this._logger.debug({ event: 'get_channel_state', channelPDA }, 'Fetching Solana channel state');
486
+ const accountInfo = await this._rpc
487
+ .getAccountInfo((0, kit_1.address)(channelPDA), { encoding: 'base64' })
488
+ .send();
489
+ if (!accountInfo.value) {
490
+ throw new Error(`Channel account not found: ${channelPDA}`);
491
+ }
492
+ const data = accountInfo.value.data;
493
+ let rawBytes;
494
+ if (Array.isArray(data)) {
495
+ const base64Str = data[0];
496
+ rawBytes = Uint8Array.from(Buffer.from(base64Str, 'base64'));
497
+ }
498
+ else if (data instanceof Uint8Array) {
499
+ rawBytes = data;
500
+ }
501
+ else {
502
+ throw new Error(`Unexpected account data format for ${channelPDA}`);
503
+ }
504
+ return deserializeChannelState(rawBytes);
505
+ }
506
+ subscribeToChannel(channelPDA, callback) {
507
+ const abortController = new AbortController();
508
+ this._logger.info({ event: 'subscribe_channel', channelPDA }, 'Subscribing to Solana channel account changes');
509
+ void this._runSubscriptionLoop(channelPDA, callback, abortController.signal);
510
+ return {
511
+ unsubscribe: () => {
512
+ this._logger.info({ event: 'unsubscribe_channel', channelPDA }, 'Unsubscribing from Solana channel account changes');
513
+ abortController.abort();
514
+ },
515
+ };
516
+ }
517
+ async _runSubscriptionLoop(channelPDA, callback, signal) {
518
+ try {
519
+ const notifications = await this._rpcSubscriptions
520
+ .accountNotifications((0, kit_1.address)(channelPDA), { commitment: 'confirmed' })
521
+ .subscribe({ abortSignal: signal });
522
+ for await (const notification of notifications) {
523
+ try {
524
+ const notificationValue = notification;
525
+ const data = notificationValue.value?.data;
526
+ let rawBytes;
527
+ if (Array.isArray(data)) {
528
+ const base64Str = data[0];
529
+ rawBytes = Uint8Array.from(Buffer.from(base64Str, 'base64'));
530
+ }
531
+ else if (data instanceof Uint8Array) {
532
+ rawBytes = data;
533
+ }
534
+ else {
535
+ this._logger.warn({ event: 'subscription_data_format_unknown', channelPDA }, 'Unknown account data format in subscription notification');
536
+ continue;
537
+ }
538
+ const state = deserializeChannelState(rawBytes);
539
+ callback(state);
540
+ }
541
+ catch (deserError) {
542
+ this._logger.warn({
543
+ event: 'subscription_deserialize_error',
544
+ channelPDA,
545
+ error: String(deserError),
546
+ }, 'Failed to deserialize channel state from subscription notification');
547
+ }
548
+ }
549
+ }
550
+ catch (err) {
551
+ if (signal.aborted) {
552
+ return;
553
+ }
554
+ this._logger.error({ event: 'subscription_error', channelPDA, error: String(err) }, 'Subscription loop failed');
555
+ }
556
+ }
557
+ async _sendTransaction(feePayer, instructions) {
558
+ const { value: latestBlockhash } = await this._rpc.getLatestBlockhash().send();
559
+ const txMessage = (0, kit_1.pipe)((0, kit_1.createTransactionMessage)({ version: 0 }), (m) => (0, kit_1.setTransactionMessageFeePayerSigner)(feePayer, m), (m) => (0, kit_1.setTransactionMessageLifetimeUsingBlockhash)(latestBlockhash, m), (m) => instructions.reduce((msg, ix) => (0, kit_1.appendTransactionMessageInstruction)(ix, msg), m));
560
+ const signatureBytes = await (0, kit_1.signAndSendTransactionMessageWithSigners)(txMessage);
561
+ const base58Decoder = (0, kit_1.getBase58Decoder)();
562
+ return base58Decoder.decode(signatureBytes);
563
+ }
564
+ }
565
+ exports.SolanaPaymentChannelSDK = SolanaPaymentChannelSDK;
566
+ function findProgramDerivedAddressSync(seeds, programId) {
567
+ const encoder = (0, kit_1.getAddressEncoder)();
568
+ const decoder = (0, kit_1.getAddressDecoder)();
569
+ const programIdBytes = toMutableBytes(encoder.encode(programId));
570
+ const PDA_MARKER = new TextEncoder().encode('ProgramDerivedAddress');
571
+ for (let bump = 255; bump >= 0; bump--) {
572
+ const bumpSeed = new Uint8Array([bump]);
573
+ const allSeeds = [...seeds, bumpSeed];
574
+ let totalLen = 0;
575
+ for (const s of allSeeds) {
576
+ totalLen += s.length;
577
+ }
578
+ totalLen += programIdBytes.length + PDA_MARKER.length;
579
+ const hashInput = new Uint8Array(totalLen);
580
+ let offset = 0;
581
+ for (const s of allSeeds) {
582
+ hashInput.set(s, offset);
583
+ offset += s.length;
584
+ }
585
+ hashInput.set(programIdBytes, offset);
586
+ offset += programIdBytes.length;
587
+ hashInput.set(PDA_MARKER, offset);
588
+ const hash = crypto.createHash('sha256').update(hashInput).digest();
589
+ const hashBytes = new Uint8Array(hash);
590
+ if (!isOnCurve(hashBytes)) {
591
+ const pdaAddress = decoder.decode(hashBytes);
592
+ return [pdaAddress, bump];
593
+ }
594
+ }
595
+ throw new Error('Could not find a viable PDA bump seed');
596
+ }
597
+ function isOnCurve(bytes) {
598
+ const P = (1n << 255n) - 19n;
599
+ const yBytes = new Uint8Array(32);
600
+ yBytes.set(bytes);
601
+ yBytes[31] = (yBytes[31] ?? 0) & 0x7f;
602
+ let y = 0n;
603
+ for (let i = 0; i < 32; i++) {
604
+ y |= BigInt(yBytes[i] ?? 0) << BigInt(i * 8);
605
+ }
606
+ if (y >= P) {
607
+ return false;
608
+ }
609
+ const D = modP(-121665n * modInverse(121666n, P), P);
610
+ const y2 = modP(y * y, P);
611
+ const u = modP(y2 - 1n, P);
612
+ const v = modP(D * y2 + 1n, P);
613
+ const vInv = modInverse(v, P);
614
+ const ratio = modP(u * vInv, P);
615
+ const euler = modPow(ratio, (P - 1n) / 2n, P);
616
+ return euler === 0n || euler === 1n;
617
+ }
618
+ function modP(a, p) {
619
+ return ((a % p) + p) % p;
620
+ }
621
+ function modInverse(a, p) {
622
+ return modPow(modP(a, p), p - 2n, p);
623
+ }
624
+ function modPow(base, exp, modulus) {
625
+ let result = 1n;
626
+ base = modP(base, modulus);
627
+ while (exp > 0n) {
628
+ if (exp & 1n) {
629
+ result = modP(result * base, modulus);
630
+ }
631
+ exp >>= 1n;
632
+ base = modP(base * base, modulus);
633
+ }
634
+ return result;
635
+ }
636
+ //# sourceMappingURL=solana-payment-channel-sdk.js.map