@toon-protocol/connector 2.6.1 → 3.3.1

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 (477) hide show
  1. package/package.json +2 -2
  2. package/dist/btp/btp-claim-types.d.ts +0 -52
  3. package/dist/btp/btp-claim-types.d.ts.map +0 -1
  4. package/dist/btp/btp-claim-types.js +0 -209
  5. package/dist/btp/btp-claim-types.js.map +0 -1
  6. package/dist/btp/btp-client-manager.d.ts +0 -30
  7. package/dist/btp/btp-client-manager.d.ts.map +0 -1
  8. package/dist/btp/btp-client-manager.js +0 -153
  9. package/dist/btp/btp-client-manager.js.map +0 -1
  10. package/dist/btp/btp-client.d.ts +0 -58
  11. package/dist/btp/btp-client.d.ts.map +0 -1
  12. package/dist/btp/btp-client.js +0 -485
  13. package/dist/btp/btp-client.js.map +0 -1
  14. package/dist/btp/btp-message-parser.d.ts +0 -4
  15. package/dist/btp/btp-message-parser.d.ts.map +0 -1
  16. package/dist/btp/btp-message-parser.js +0 -211
  17. package/dist/btp/btp-message-parser.js.map +0 -1
  18. package/dist/btp/btp-server.d.ts +0 -33
  19. package/dist/btp/btp-server.d.ts.map +0 -1
  20. package/dist/btp/btp-server.js +0 -485
  21. package/dist/btp/btp-server.js.map +0 -1
  22. package/dist/btp/btp-types.d.ts +0 -43
  23. package/dist/btp/btp-types.d.ts.map +0 -1
  24. package/dist/btp/btp-types.js +0 -44
  25. package/dist/btp/btp-types.js.map +0 -1
  26. package/dist/btp/inbound-claim-validator.d.ts +0 -20
  27. package/dist/btp/inbound-claim-validator.d.ts.map +0 -1
  28. package/dist/btp/inbound-claim-validator.js +0 -150
  29. package/dist/btp/inbound-claim-validator.js.map +0 -1
  30. package/dist/cli/index.d.ts +0 -3
  31. package/dist/cli/index.d.ts.map +0 -1
  32. package/dist/cli/index.js +0 -175
  33. package/dist/cli/index.js.map +0 -1
  34. package/dist/cli/onboarding-wizard.d.ts +0 -7
  35. package/dist/cli/onboarding-wizard.d.ts.map +0 -1
  36. package/dist/cli/onboarding-wizard.js +0 -257
  37. package/dist/cli/onboarding-wizard.js.map +0 -1
  38. package/dist/cli/types.d.ts +0 -38
  39. package/dist/cli/types.d.ts.map +0 -1
  40. package/dist/cli/types.js +0 -3
  41. package/dist/cli/types.js.map +0 -1
  42. package/dist/config/config-loader.d.ts +0 -24
  43. package/dist/config/config-loader.d.ts.map +0 -1
  44. package/dist/config/config-loader.js +0 -436
  45. package/dist/config/config-loader.js.map +0 -1
  46. package/dist/config/environment-validator.d.ts +0 -4
  47. package/dist/config/environment-validator.d.ts.map +0 -1
  48. package/dist/config/environment-validator.js +0 -239
  49. package/dist/config/environment-validator.js.map +0 -1
  50. package/dist/config/index.d.ts +0 -3
  51. package/dist/config/index.d.ts.map +0 -1
  52. package/dist/config/index.js +0 -7
  53. package/dist/config/index.js.map +0 -1
  54. package/dist/config/key-manager-config.d.ts +0 -7
  55. package/dist/config/key-manager-config.d.ts.map +0 -1
  56. package/dist/config/key-manager-config.js +0 -209
  57. package/dist/config/key-manager-config.js.map +0 -1
  58. package/dist/config/topology-validator.d.ts +0 -14
  59. package/dist/config/topology-validator.d.ts.map +0 -1
  60. package/dist/config/topology-validator.js +0 -142
  61. package/dist/config/topology-validator.js.map +0 -1
  62. package/dist/config/types.d.ts +0 -223
  63. package/dist/config/types.d.ts.map +0 -1
  64. package/dist/config/types.js +0 -52
  65. package/dist/config/types.js.map +0 -1
  66. package/dist/core/connector-node.d.ts +0 -91
  67. package/dist/core/connector-node.d.ts.map +0 -1
  68. package/dist/core/connector-node.js +0 -1322
  69. package/dist/core/connector-node.js.map +0 -1
  70. package/dist/core/local-delivery-client.d.ts +0 -16
  71. package/dist/core/local-delivery-client.d.ts.map +0 -1
  72. package/dist/core/local-delivery-client.js +0 -160
  73. package/dist/core/local-delivery-client.js.map +0 -1
  74. package/dist/core/packet-handler.d.ts +0 -57
  75. package/dist/core/packet-handler.d.ts.map +0 -1
  76. package/dist/core/packet-handler.js +0 -655
  77. package/dist/core/packet-handler.js.map +0 -1
  78. package/dist/core/payment-handler.d.ts +0 -25
  79. package/dist/core/payment-handler.d.ts.map +0 -1
  80. package/dist/core/payment-handler.js +0 -104
  81. package/dist/core/payment-handler.js.map +0 -1
  82. package/dist/discovery/index.d.ts +0 -3
  83. package/dist/discovery/index.d.ts.map +0 -1
  84. package/dist/discovery/index.js +0 -6
  85. package/dist/discovery/index.js.map +0 -1
  86. package/dist/discovery/peer-discovery-service.d.ts +0 -29
  87. package/dist/discovery/peer-discovery-service.d.ts.map +0 -1
  88. package/dist/discovery/peer-discovery-service.js +0 -230
  89. package/dist/discovery/peer-discovery-service.js.map +0 -1
  90. package/dist/discovery/types.d.ts +0 -38
  91. package/dist/discovery/types.d.ts.map +0 -1
  92. package/dist/discovery/types.js +0 -3
  93. package/dist/discovery/types.js.map +0 -1
  94. package/dist/encoding/oer-parser.d.ts +0 -39
  95. package/dist/encoding/oer-parser.d.ts.map +0 -1
  96. package/dist/encoding/oer-parser.js +0 -154
  97. package/dist/encoding/oer-parser.js.map +0 -1
  98. package/dist/facilitator/index.d.ts +0 -2
  99. package/dist/facilitator/index.d.ts.map +0 -1
  100. package/dist/facilitator/index.js +0 -7
  101. package/dist/facilitator/index.js.map +0 -1
  102. package/dist/facilitator/spsp-client.d.ts +0 -18
  103. package/dist/facilitator/spsp-client.d.ts.map +0 -1
  104. package/dist/facilitator/spsp-client.js +0 -95
  105. package/dist/facilitator/spsp-client.js.map +0 -1
  106. package/dist/http/admin-api-inventory.d.ts +0 -29
  107. package/dist/http/admin-api-inventory.d.ts.map +0 -1
  108. package/dist/http/admin-api-inventory.js +0 -480
  109. package/dist/http/admin-api-inventory.js.map +0 -1
  110. package/dist/http/admin-api.d.ts +0 -182
  111. package/dist/http/admin-api.d.ts.map +0 -1
  112. package/dist/http/admin-api.js +0 -1324
  113. package/dist/http/admin-api.js.map +0 -1
  114. package/dist/http/admin-server.d.ts +0 -49
  115. package/dist/http/admin-server.d.ts.map +0 -1
  116. package/dist/http/admin-server.js +0 -160
  117. package/dist/http/admin-server.js.map +0 -1
  118. package/dist/http/health-server.d.ts +0 -22
  119. package/dist/http/health-server.d.ts.map +0 -1
  120. package/dist/http/health-server.js +0 -192
  121. package/dist/http/health-server.js.map +0 -1
  122. package/dist/http/ilp-send-handler.d.ts +0 -15
  123. package/dist/http/ilp-send-handler.d.ts.map +0 -1
  124. package/dist/http/ilp-send-handler.js +0 -149
  125. package/dist/http/ilp-send-handler.js.map +0 -1
  126. package/dist/http/types.d.ts +0 -43
  127. package/dist/http/types.d.ts.map +0 -1
  128. package/dist/http/types.js +0 -3
  129. package/dist/http/types.js.map +0 -1
  130. package/dist/index.d.ts +0 -2
  131. package/dist/index.d.ts.map +0 -1
  132. package/dist/index.js +0 -5
  133. package/dist/index.js.map +0 -1
  134. package/dist/lib.d.ts +0 -22
  135. package/dist/lib.d.ts.map +0 -1
  136. package/dist/lib.js +0 -39
  137. package/dist/lib.js.map +0 -1
  138. package/dist/main.d.ts +0 -4
  139. package/dist/main.d.ts.map +0 -1
  140. package/dist/main.js +0 -79
  141. package/dist/main.js.map +0 -1
  142. package/dist/observability/metrics-registry.d.ts +0 -39
  143. package/dist/observability/metrics-registry.d.ts.map +0 -1
  144. package/dist/observability/metrics-registry.js +0 -151
  145. package/dist/observability/metrics-registry.js.map +0 -1
  146. package/dist/routing/packet-processor.d.ts +0 -36
  147. package/dist/routing/packet-processor.d.ts.map +0 -1
  148. package/dist/routing/packet-processor.js +0 -112
  149. package/dist/routing/packet-processor.js.map +0 -1
  150. package/dist/routing/packet-worker.d.ts +0 -10
  151. package/dist/routing/packet-worker.d.ts.map +0 -1
  152. package/dist/routing/packet-worker.js +0 -34
  153. package/dist/routing/packet-worker.js.map +0 -1
  154. package/dist/routing/routing-table.d.ts +0 -15
  155. package/dist/routing/routing-table.d.ts.map +0 -1
  156. package/dist/routing/routing-table.js +0 -63
  157. package/dist/routing/routing-table.js.map +0 -1
  158. package/dist/routing/worker-pool.d.ts +0 -43
  159. package/dist/routing/worker-pool.d.ts.map +0 -1
  160. package/dist/routing/worker-pool.js +0 -228
  161. package/dist/routing/worker-pool.js.map +0 -1
  162. package/dist/security/alert-notifier.d.ts +0 -34
  163. package/dist/security/alert-notifier.d.ts.map +0 -1
  164. package/dist/security/alert-notifier.js +0 -136
  165. package/dist/security/alert-notifier.js.map +0 -1
  166. package/dist/security/audit-logger.d.ts +0 -34
  167. package/dist/security/audit-logger.d.ts.map +0 -1
  168. package/dist/security/audit-logger.js +0 -132
  169. package/dist/security/audit-logger.js.map +0 -1
  170. package/dist/security/backends/environment-backend.d.ts +0 -15
  171. package/dist/security/backends/environment-backend.d.ts.map +0 -1
  172. package/dist/security/backends/environment-backend.js +0 -56
  173. package/dist/security/backends/environment-backend.js.map +0 -1
  174. package/dist/security/fraud-detector.d.ts +0 -79
  175. package/dist/security/fraud-detector.d.ts.map +0 -1
  176. package/dist/security/fraud-detector.js +0 -147
  177. package/dist/security/fraud-detector.js.map +0 -1
  178. package/dist/security/key-manager-signer.d.ts +0 -15
  179. package/dist/security/key-manager-signer.d.ts.map +0 -1
  180. package/dist/security/key-manager-signer.js +0 -91
  181. package/dist/security/key-manager-signer.js.map +0 -1
  182. package/dist/security/key-manager.d.ts +0 -69
  183. package/dist/security/key-manager.d.ts.map +0 -1
  184. package/dist/security/key-manager.js +0 -79
  185. package/dist/security/key-manager.js.map +0 -1
  186. package/dist/security/key-rotation-manager.d.ts +0 -27
  187. package/dist/security/key-rotation-manager.d.ts.map +0 -1
  188. package/dist/security/key-rotation-manager.js +0 -142
  189. package/dist/security/key-rotation-manager.js.map +0 -1
  190. package/dist/security/rate-limit-config.d.ts +0 -7
  191. package/dist/security/rate-limit-config.d.ts.map +0 -1
  192. package/dist/security/rate-limit-config.js +0 -57
  193. package/dist/security/rate-limit-config.js.map +0 -1
  194. package/dist/security/rate-limiter.d.ts +0 -46
  195. package/dist/security/rate-limiter.d.ts.map +0 -1
  196. package/dist/security/rate-limiter.js +0 -170
  197. package/dist/security/rate-limiter.js.map +0 -1
  198. package/dist/security/reputation-tracker.d.ts +0 -30
  199. package/dist/security/reputation-tracker.d.ts.map +0 -1
  200. package/dist/security/reputation-tracker.js +0 -111
  201. package/dist/security/reputation-tracker.js.map +0 -1
  202. package/dist/security/rules/balance-manipulation-rule.d.ts +0 -23
  203. package/dist/security/rules/balance-manipulation-rule.d.ts.map +0 -1
  204. package/dist/security/rules/balance-manipulation-rule.js +0 -70
  205. package/dist/security/rules/balance-manipulation-rule.js.map +0 -1
  206. package/dist/security/rules/double-spend-detection-rule.d.ts +0 -23
  207. package/dist/security/rules/double-spend-detection-rule.d.ts.map +0 -1
  208. package/dist/security/rules/double-spend-detection-rule.js +0 -61
  209. package/dist/security/rules/double-spend-detection-rule.js.map +0 -1
  210. package/dist/security/rules/rapid-channel-closure-rule.d.ts +0 -16
  211. package/dist/security/rules/rapid-channel-closure-rule.d.ts.map +0 -1
  212. package/dist/security/rules/rapid-channel-closure-rule.js +0 -57
  213. package/dist/security/rules/rapid-channel-closure-rule.js.map +0 -1
  214. package/dist/security/rules/sudden-traffic-spike-rule.d.ts +0 -18
  215. package/dist/security/rules/sudden-traffic-spike-rule.d.ts.map +0 -1
  216. package/dist/security/rules/sudden-traffic-spike-rule.js +0 -92
  217. package/dist/security/rules/sudden-traffic-spike-rule.js.map +0 -1
  218. package/dist/security/rules/unusual-settlement-amount-rule.d.ts +0 -12
  219. package/dist/security/rules/unusual-settlement-amount-rule.d.ts.map +0 -1
  220. package/dist/security/rules/unusual-settlement-amount-rule.js +0 -33
  221. package/dist/security/rules/unusual-settlement-amount-rule.js.map +0 -1
  222. package/dist/security/token-bucket.d.ts +0 -16
  223. package/dist/security/token-bucket.d.ts.map +0 -1
  224. package/dist/security/token-bucket.js +0 -49
  225. package/dist/security/token-bucket.js.map +0 -1
  226. package/dist/security/violation-counter.d.ts +0 -11
  227. package/dist/security/violation-counter.d.ts.map +0 -1
  228. package/dist/security/violation-counter.js +0 -61
  229. package/dist/security/violation-counter.js.map +0 -1
  230. package/dist/settlement/account-id-generator.d.ts +0 -4
  231. package/dist/settlement/account-id-generator.d.ts.map +0 -1
  232. package/dist/settlement/account-id-generator.js +0 -38
  233. package/dist/settlement/account-id-generator.js.map +0 -1
  234. package/dist/settlement/account-manager.d.ts +0 -51
  235. package/dist/settlement/account-manager.d.ts.map +0 -1
  236. package/dist/settlement/account-manager.js +0 -459
  237. package/dist/settlement/account-manager.js.map +0 -1
  238. package/dist/settlement/account-metadata.d.ts +0 -11
  239. package/dist/settlement/account-metadata.d.ts.map +0 -1
  240. package/dist/settlement/account-metadata.js +0 -40
  241. package/dist/settlement/account-metadata.js.map +0 -1
  242. package/dist/settlement/channel-manager.d.ts +0 -67
  243. package/dist/settlement/channel-manager.d.ts.map +0 -1
  244. package/dist/settlement/channel-manager.js +0 -226
  245. package/dist/settlement/channel-manager.js.map +0 -1
  246. package/dist/settlement/claim-receiver-db-schema.d.ts +0 -4
  247. package/dist/settlement/claim-receiver-db-schema.d.ts.map +0 -1
  248. package/dist/settlement/claim-receiver-db-schema.js +0 -25
  249. package/dist/settlement/claim-receiver-db-schema.js.map +0 -1
  250. package/dist/settlement/claim-receiver.d.ts +0 -67
  251. package/dist/settlement/claim-receiver.d.ts.map +0 -1
  252. package/dist/settlement/claim-receiver.js +0 -707
  253. package/dist/settlement/claim-receiver.js.map +0 -1
  254. package/dist/settlement/claim-redemption-service.d.ts +0 -39
  255. package/dist/settlement/claim-redemption-service.d.ts.map +0 -1
  256. package/dist/settlement/claim-redemption-service.js +0 -189
  257. package/dist/settlement/claim-redemption-service.js.map +0 -1
  258. package/dist/settlement/claim-sender-db-schema.d.ts +0 -3
  259. package/dist/settlement/claim-sender-db-schema.d.ts.map +0 -1
  260. package/dist/settlement/claim-sender-db-schema.js +0 -18
  261. package/dist/settlement/claim-sender-db-schema.js.map +0 -1
  262. package/dist/settlement/claim-sender.d.ts +0 -24
  263. package/dist/settlement/claim-sender.d.ts.map +0 -1
  264. package/dist/settlement/claim-sender.js +0 -146
  265. package/dist/settlement/claim-sender.js.map +0 -1
  266. package/dist/settlement/eip712-helper.d.ts +0 -13
  267. package/dist/settlement/eip712-helper.d.ts.map +0 -1
  268. package/dist/settlement/eip712-helper.js +0 -24
  269. package/dist/settlement/eip712-helper.js.map +0 -1
  270. package/dist/settlement/in-memory-ledger-client.d.ts +0 -40
  271. package/dist/settlement/in-memory-ledger-client.d.ts.map +0 -1
  272. package/dist/settlement/in-memory-ledger-client.js +0 -177
  273. package/dist/settlement/in-memory-ledger-client.js.map +0 -1
  274. package/dist/settlement/ledger-client.d.ts +0 -22
  275. package/dist/settlement/ledger-client.d.ts.map +0 -1
  276. package/dist/settlement/ledger-client.js +0 -3
  277. package/dist/settlement/ledger-client.js.map +0 -1
  278. package/dist/settlement/metrics-collector.d.ts +0 -29
  279. package/dist/settlement/metrics-collector.d.ts.map +0 -1
  280. package/dist/settlement/metrics-collector.js +0 -81
  281. package/dist/settlement/metrics-collector.js.map +0 -1
  282. package/dist/settlement/mina-payment-channel-sdk.d.ts +0 -73
  283. package/dist/settlement/mina-payment-channel-sdk.d.ts.map +0 -1
  284. package/dist/settlement/mina-payment-channel-sdk.js +0 -538
  285. package/dist/settlement/mina-payment-channel-sdk.js.map +0 -1
  286. package/dist/settlement/payment-channel-sdk.d.ts +0 -59
  287. package/dist/settlement/payment-channel-sdk.d.ts.map +0 -1
  288. package/dist/settlement/payment-channel-sdk.js +0 -677
  289. package/dist/settlement/payment-channel-sdk.js.map +0 -1
  290. package/dist/settlement/per-packet-claim-service.d.ts +0 -39
  291. package/dist/settlement/per-packet-claim-service.d.ts.map +0 -1
  292. package/dist/settlement/per-packet-claim-service.js +0 -342
  293. package/dist/settlement/per-packet-claim-service.js.map +0 -1
  294. package/dist/settlement/privacy/index.d.ts +0 -3
  295. package/dist/settlement/privacy/index.d.ts.map +0 -1
  296. package/dist/settlement/privacy/index.js +0 -11
  297. package/dist/settlement/privacy/index.js.map +0 -1
  298. package/dist/settlement/privacy/nip59-claim-wrapper.d.ts +0 -60
  299. package/dist/settlement/privacy/nip59-claim-wrapper.d.ts.map +0 -1
  300. package/dist/settlement/privacy/nip59-claim-wrapper.js +0 -361
  301. package/dist/settlement/privacy/nip59-claim-wrapper.js.map +0 -1
  302. package/dist/settlement/provider/chain-provider-registry.d.ts +0 -20
  303. package/dist/settlement/provider/chain-provider-registry.d.ts.map +0 -1
  304. package/dist/settlement/provider/chain-provider-registry.js +0 -53
  305. package/dist/settlement/provider/chain-provider-registry.js.map +0 -1
  306. package/dist/settlement/provider/evm-payment-channel-provider.d.ts +0 -31
  307. package/dist/settlement/provider/evm-payment-channel-provider.d.ts.map +0 -1
  308. package/dist/settlement/provider/evm-payment-channel-provider.js +0 -207
  309. package/dist/settlement/provider/evm-payment-channel-provider.js.map +0 -1
  310. package/dist/settlement/provider/index.d.ts +0 -6
  311. package/dist/settlement/provider/index.d.ts.map +0 -1
  312. package/dist/settlement/provider/index.js +0 -16
  313. package/dist/settlement/provider/index.js.map +0 -1
  314. package/dist/settlement/provider/mina-payment-channel-provider.d.ts +0 -43
  315. package/dist/settlement/provider/mina-payment-channel-provider.d.ts.map +0 -1
  316. package/dist/settlement/provider/mina-payment-channel-provider.js +0 -330
  317. package/dist/settlement/provider/mina-payment-channel-provider.js.map +0 -1
  318. package/dist/settlement/provider/payment-channel-provider.d.ts +0 -88
  319. package/dist/settlement/provider/payment-channel-provider.d.ts.map +0 -1
  320. package/dist/settlement/provider/payment-channel-provider.js +0 -3
  321. package/dist/settlement/provider/payment-channel-provider.js.map +0 -1
  322. package/dist/settlement/provider/solana-payment-channel-provider.d.ts +0 -38
  323. package/dist/settlement/provider/solana-payment-channel-provider.d.ts.map +0 -1
  324. package/dist/settlement/provider/solana-payment-channel-provider.js +0 -262
  325. package/dist/settlement/provider/solana-payment-channel-provider.js.map +0 -1
  326. package/dist/settlement/sent-claims-queries.d.ts +0 -23
  327. package/dist/settlement/sent-claims-queries.d.ts.map +0 -1
  328. package/dist/settlement/sent-claims-queries.js +0 -134
  329. package/dist/settlement/sent-claims-queries.js.map +0 -1
  330. package/dist/settlement/settlement-api.d.ts +0 -37
  331. package/dist/settlement/settlement-api.d.ts.map +0 -1
  332. package/dist/settlement/settlement-api.js +0 -172
  333. package/dist/settlement/settlement-api.js.map +0 -1
  334. package/dist/settlement/settlement-coordinator.d.ts +0 -47
  335. package/dist/settlement/settlement-coordinator.d.ts.map +0 -1
  336. package/dist/settlement/settlement-coordinator.js +0 -166
  337. package/dist/settlement/settlement-coordinator.js.map +0 -1
  338. package/dist/settlement/settlement-executor.d.ts +0 -51
  339. package/dist/settlement/settlement-executor.d.ts.map +0 -1
  340. package/dist/settlement/settlement-executor.js +0 -265
  341. package/dist/settlement/settlement-executor.js.map +0 -1
  342. package/dist/settlement/settlement-monitor.d.ts +0 -30
  343. package/dist/settlement/settlement-monitor.d.ts.map +0 -1
  344. package/dist/settlement/settlement-monitor.js +0 -141
  345. package/dist/settlement/settlement-monitor.js.map +0 -1
  346. package/dist/settlement/solana-payment-channel-sdk.d.ts +0 -79
  347. package/dist/settlement/solana-payment-channel-sdk.d.ts.map +0 -1
  348. package/dist/settlement/solana-payment-channel-sdk.js +0 -636
  349. package/dist/settlement/solana-payment-channel-sdk.js.map +0 -1
  350. package/dist/settlement/tigerbeetle-batch-writer.d.ts +0 -58
  351. package/dist/settlement/tigerbeetle-batch-writer.d.ts.map +0 -1
  352. package/dist/settlement/tigerbeetle-batch-writer.js +0 -162
  353. package/dist/settlement/tigerbeetle-batch-writer.js.map +0 -1
  354. package/dist/settlement/tigerbeetle-client.d.ts +0 -40
  355. package/dist/settlement/tigerbeetle-client.d.ts.map +0 -1
  356. package/dist/settlement/tigerbeetle-client.js +0 -279
  357. package/dist/settlement/tigerbeetle-client.js.map +0 -1
  358. package/dist/settlement/tigerbeetle-errors.d.ts +0 -23
  359. package/dist/settlement/tigerbeetle-errors.d.ts.map +0 -1
  360. package/dist/settlement/tigerbeetle-errors.js +0 -58
  361. package/dist/settlement/tigerbeetle-errors.js.map +0 -1
  362. package/dist/settlement/types.d.ts +0 -64
  363. package/dist/settlement/types.d.ts.map +0 -1
  364. package/dist/settlement/types.js +0 -42
  365. package/dist/settlement/types.js.map +0 -1
  366. package/dist/settlement/unified-settlement-executor.d.ts +0 -34
  367. package/dist/settlement/unified-settlement-executor.d.ts.map +0 -1
  368. package/dist/settlement/unified-settlement-executor.js +0 -145
  369. package/dist/settlement/unified-settlement-executor.js.map +0 -1
  370. package/dist/test-utils/index.d.ts +0 -3
  371. package/dist/test-utils/index.d.ts.map +0 -1
  372. package/dist/test-utils/index.js +0 -15
  373. package/dist/test-utils/index.js.map +0 -1
  374. package/dist/test-utils/isolated-test-env.d.ts +0 -31
  375. package/dist/test-utils/isolated-test-env.d.ts.map +0 -1
  376. package/dist/test-utils/isolated-test-env.js +0 -127
  377. package/dist/test-utils/isolated-test-env.js.map +0 -1
  378. package/dist/test-utils/mock-factories-patch.d.ts +0 -2
  379. package/dist/test-utils/mock-factories-patch.d.ts.map +0 -1
  380. package/dist/test-utils/mock-factories-patch.js +0 -3
  381. package/dist/test-utils/mock-factories-patch.js.map +0 -1
  382. package/dist/test-utils/mock-factories.d.ts +0 -22
  383. package/dist/test-utils/mock-factories.d.ts.map +0 -1
  384. package/dist/test-utils/mock-factories.js +0 -56
  385. package/dist/test-utils/mock-factories.js.map +0 -1
  386. package/dist/transport/direct-transport-provider.d.ts +0 -12
  387. package/dist/transport/direct-transport-provider.d.ts.map +0 -1
  388. package/dist/transport/direct-transport-provider.js +0 -27
  389. package/dist/transport/direct-transport-provider.js.map +0 -1
  390. package/dist/transport/index.d.ts +0 -7
  391. package/dist/transport/index.d.ts.map +0 -1
  392. package/dist/transport/index.js +0 -16
  393. package/dist/transport/index.js.map +0 -1
  394. package/dist/transport/managed-anon-client.d.ts +0 -47
  395. package/dist/transport/managed-anon-client.d.ts.map +0 -1
  396. package/dist/transport/managed-anon-client.js +0 -265
  397. package/dist/transport/managed-anon-client.js.map +0 -1
  398. package/dist/transport/probe-tcp-port.d.ts +0 -3
  399. package/dist/transport/probe-tcp-port.d.ts.map +0 -1
  400. package/dist/transport/probe-tcp-port.js +0 -59
  401. package/dist/transport/probe-tcp-port.js.map +0 -1
  402. package/dist/transport/socks-transport-provider.d.ts +0 -29
  403. package/dist/transport/socks-transport-provider.d.ts.map +0 -1
  404. package/dist/transport/socks-transport-provider.js +0 -136
  405. package/dist/transport/socks-transport-provider.js.map +0 -1
  406. package/dist/transport/socks-url.d.ts +0 -6
  407. package/dist/transport/socks-url.d.ts.map +0 -1
  408. package/dist/transport/socks-url.js +0 -29
  409. package/dist/transport/socks-url.js.map +0 -1
  410. package/dist/transport/transport-provider.d.ts +0 -9
  411. package/dist/transport/transport-provider.d.ts.map +0 -1
  412. package/dist/transport/transport-provider.js +0 -3
  413. package/dist/transport/transport-provider.js.map +0 -1
  414. package/dist/utils/connection-pool.d.ts +0 -42
  415. package/dist/utils/connection-pool.d.ts.map +0 -1
  416. package/dist/utils/connection-pool.js +0 -209
  417. package/dist/utils/connection-pool.js.map +0 -1
  418. package/dist/utils/evm-rpc-connection-pool.d.ts +0 -8
  419. package/dist/utils/evm-rpc-connection-pool.d.ts.map +0 -1
  420. package/dist/utils/evm-rpc-connection-pool.js +0 -40
  421. package/dist/utils/evm-rpc-connection-pool.js.map +0 -1
  422. package/dist/utils/logger.d.ts +0 -6
  423. package/dist/utils/logger.d.ts.map +0 -1
  424. package/dist/utils/logger.js +0 -58
  425. package/dist/utils/logger.js.map +0 -1
  426. package/dist/utils/optional-require.d.ts +0 -2
  427. package/dist/utils/optional-require.d.ts.map +0 -1
  428. package/dist/utils/optional-require.js +0 -54
  429. package/dist/utils/optional-require.js.map +0 -1
  430. package/dist/utils/redact.d.ts +0 -3
  431. package/dist/utils/redact.d.ts.map +0 -1
  432. package/dist/utils/redact.js +0 -21
  433. package/dist/utils/redact.js.map +0 -1
  434. package/dist/wallet/audit-logger.d.ts +0 -22
  435. package/dist/wallet/audit-logger.d.ts.map +0 -1
  436. package/dist/wallet/audit-logger.js +0 -120
  437. package/dist/wallet/audit-logger.js.map +0 -1
  438. package/dist/wallet/fraud-detector-interface.d.ts +0 -14
  439. package/dist/wallet/fraud-detector-interface.d.ts.map +0 -1
  440. package/dist/wallet/fraud-detector-interface.js +0 -3
  441. package/dist/wallet/fraud-detector-interface.js.map +0 -1
  442. package/dist/wallet/key-manager.d.ts +0 -6
  443. package/dist/wallet/key-manager.d.ts.map +0 -1
  444. package/dist/wallet/key-manager.js +0 -3
  445. package/dist/wallet/key-manager.js.map +0 -1
  446. package/dist/wallet/placeholder-fraud-detector.d.ts +0 -10
  447. package/dist/wallet/placeholder-fraud-detector.d.ts.map +0 -1
  448. package/dist/wallet/placeholder-fraud-detector.js +0 -10
  449. package/dist/wallet/placeholder-fraud-detector.js.map +0 -1
  450. package/dist/wallet/rate-limiter.d.ts +0 -26
  451. package/dist/wallet/rate-limiter.d.ts.map +0 -1
  452. package/dist/wallet/rate-limiter.js +0 -114
  453. package/dist/wallet/rate-limiter.js.map +0 -1
  454. package/dist/wallet/suspicious-activity-detector.d.ts +0 -25
  455. package/dist/wallet/suspicious-activity-detector.d.ts.map +0 -1
  456. package/dist/wallet/suspicious-activity-detector.js +0 -97
  457. package/dist/wallet/suspicious-activity-detector.js.map +0 -1
  458. package/dist/wallet/treasury-wallet.d.ts +0 -20
  459. package/dist/wallet/treasury-wallet.d.ts.map +0 -1
  460. package/dist/wallet/treasury-wallet.js +0 -151
  461. package/dist/wallet/treasury-wallet.js.map +0 -1
  462. package/dist/wallet/wallet-authentication.d.ts +0 -31
  463. package/dist/wallet/wallet-authentication.d.ts.map +0 -1
  464. package/dist/wallet/wallet-authentication.js +0 -102
  465. package/dist/wallet/wallet-authentication.js.map +0 -1
  466. package/dist/wallet/wallet-db-schema.d.ts +0 -11
  467. package/dist/wallet/wallet-db-schema.d.ts.map +0 -1
  468. package/dist/wallet/wallet-db-schema.js +0 -79
  469. package/dist/wallet/wallet-db-schema.js.map +0 -1
  470. package/dist/wallet/wallet-security.d.ts +0 -58
  471. package/dist/wallet/wallet-security.d.ts.map +0 -1
  472. package/dist/wallet/wallet-security.js +0 -148
  473. package/dist/wallet/wallet-security.js.map +0 -1
  474. package/dist/wallet/wallet-seed-manager.d.ts +0 -65
  475. package/dist/wallet/wallet-seed-manager.d.ts.map +0 -1
  476. package/dist/wallet/wallet-seed-manager.js +0 -418
  477. package/dist/wallet/wallet-seed-manager.js.map +0 -1
@@ -1,1322 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ConnectorNode = void 0;
4
- const tslib_1 = require("tslib");
5
- const fs_1 = require("fs");
6
- const nodePath = tslib_1.__importStar(require("path"));
7
- const routing_table_1 = require("../routing/routing-table");
8
- const btp_client_manager_1 = require("../btp/btp-client-manager");
9
- const btp_server_1 = require("../btp/btp-server");
10
- const packet_handler_1 = require("./packet-handler");
11
- const shared_1 = require("@toon-protocol/shared");
12
- const types_1 = require("../config/types");
13
- const transport_1 = require("../transport");
14
- const payment_handler_1 = require("./payment-handler");
15
- const types_2 = require("../settlement/types");
16
- const admin_api_1 = require("../http/admin-api");
17
- const config_loader_1 = require("../config/config-loader");
18
- const health_server_1 = require("../http/health-server");
19
- const admin_server_1 = require("../http/admin-server");
20
- const metrics_registry_1 = require("../observability/metrics-registry");
21
- const payment_channel_sdk_1 = require("../settlement/payment-channel-sdk");
22
- const channel_manager_1 = require("../settlement/channel-manager");
23
- const settlement_executor_1 = require("../settlement/settlement-executor");
24
- const account_manager_1 = require("../settlement/account-manager");
25
- const settlement_monitor_1 = require("../settlement/settlement-monitor");
26
- const claim_receiver_1 = require("../settlement/claim-receiver");
27
- const claim_receiver_db_schema_1 = require("../settlement/claim-receiver-db-schema");
28
- const key_manager_1 = require("../security/key-manager");
29
- const optional_require_1 = require("../utils/optional-require");
30
- const tigerbeetle_client_1 = require("../settlement/tigerbeetle-client");
31
- const in_memory_ledger_client_1 = require("../settlement/in-memory-ledger-client");
32
- const per_packet_claim_service_1 = require("../settlement/per-packet-claim-service");
33
- const chain_provider_registry_1 = require("../settlement/provider/chain-provider-registry");
34
- const evm_payment_channel_provider_1 = require("../settlement/provider/evm-payment-channel-provider");
35
- const claim_sender_db_schema_1 = require("../settlement/claim-sender-db-schema");
36
- const inbound_claim_validator_1 = require("../btp/inbound-claim-validator");
37
- const nip59_claim_wrapper_1 = require("../settlement/privacy/nip59-claim-wrapper");
38
- const utils_1 = require("@noble/hashes/utils");
39
- const dns_1 = require("dns");
40
- const package_json_1 = tslib_1.__importDefault(require("../../package.json"));
41
- class ConnectorNode {
42
- _config;
43
- _logger;
44
- _routingTable;
45
- _btpClientManager;
46
- _packetHandler;
47
- _btpServer;
48
- _healthServer;
49
- _adminServer = null;
50
- _paymentChannelSDK = null;
51
- _chainSDKs = new Map();
52
- _channelManager = null;
53
- _accountManager = null;
54
- _settlementMonitor = null;
55
- _settlementExecutor = null;
56
- _tigerBeetleClient = null;
57
- _inMemoryLedgerClient = null;
58
- _settlementPeers = new Map();
59
- _healthStatus = 'starting';
60
- _ilpMetrics;
61
- _startTime = new Date();
62
- _btpServerStarted = false;
63
- _defaultSettlementTokenId = 'M2M';
64
- _transportProvider = null;
65
- _transportProviderReady = false;
66
- _transportType = null;
67
- _lastTransportHealthy = true;
68
- _transportHealthInterval = null;
69
- _transportHealthIntervalMs;
70
- get defaultSettlementTokenId() {
71
- return this._defaultSettlementTokenId;
72
- }
73
- constructor(config, logger, opts) {
74
- this._transportHealthIntervalMs = opts?.transportHealthIntervalMs ?? 30000;
75
- let resolvedConfig;
76
- try {
77
- if (typeof config === 'string') {
78
- resolvedConfig = config_loader_1.ConfigLoader.loadConfig(config);
79
- }
80
- else {
81
- resolvedConfig = config_loader_1.ConfigLoader.validateConfig(config);
82
- }
83
- }
84
- catch (error) {
85
- if (error instanceof config_loader_1.ConfigurationError) {
86
- const logContext = typeof config === 'string'
87
- ? { event: 'config_load_failed', filePath: config, error: error.message }
88
- : { event: 'config_load_failed', source: 'object', error: error.message };
89
- logger.error(logContext, 'Failed to load configuration');
90
- throw error;
91
- }
92
- throw error;
93
- }
94
- this._config = resolvedConfig;
95
- this._logger = logger.child({ component: 'ConnectorNode', nodeId: resolvedConfig.nodeId });
96
- const loadedLogContext = typeof config === 'string'
97
- ? { event: 'config_loaded', filePath: config, nodeId: resolvedConfig.nodeId }
98
- : { event: 'config_loaded', source: 'object', nodeId: resolvedConfig.nodeId };
99
- this._logger.info(loadedLogContext, 'Configuration loaded successfully');
100
- const routingTableEntries = resolvedConfig.routes.map((route) => ({
101
- prefix: route.prefix,
102
- nextHop: route.nextHop,
103
- priority: route.priority,
104
- }));
105
- this._routingTable = new routing_table_1.RoutingTable(routingTableEntries, logger.child({ component: 'RoutingTable' }));
106
- this._btpClientManager = new btp_client_manager_1.BTPClientManager(resolvedConfig.nodeId, logger.child({ component: 'BTPClientManager' }));
107
- this._btpClientManager.setAgentFactory((peerUrl) => this._transportProvider?.createAgent(peerUrl));
108
- this._packetHandler = new packet_handler_1.PacketHandler(this._routingTable, this._btpClientManager, resolvedConfig.nodeId, logger.child({ component: 'PacketHandler' }));
109
- this._btpServer = new btp_server_1.BTPServer(logger.child({ component: 'BTPServer' }), this._packetHandler);
110
- this._packetHandler.setBTPServer(this._btpServer);
111
- const localDeliveryEnabled = resolvedConfig.localDelivery?.enabled || process.env.LOCAL_DELIVERY_ENABLED === 'true';
112
- if (localDeliveryEnabled) {
113
- const localDeliveryConfig = {
114
- enabled: true,
115
- handlerUrl: resolvedConfig.localDelivery?.handlerUrl || process.env.LOCAL_DELIVERY_URL || '',
116
- timeout: resolvedConfig.localDelivery?.timeout ||
117
- parseInt(process.env.LOCAL_DELIVERY_TIMEOUT || '30000', 10),
118
- authToken: resolvedConfig.localDelivery?.authToken || process.env.LOCAL_DELIVERY_AUTH_TOKEN,
119
- perHopNotification: resolvedConfig.localDelivery?.perHopNotification ??
120
- process.env.LOCAL_DELIVERY_PER_HOP_NOTIFICATION === 'true',
121
- };
122
- this._packetHandler.setLocalDelivery(localDeliveryConfig);
123
- }
124
- this._btpClientManager.setPacketHandler(this._packetHandler);
125
- this._ilpMetrics = new metrics_registry_1.IlpMetricsRegistry({ collectDefaults: false });
126
- for (const peer of resolvedConfig.peers) {
127
- this._ilpMetrics.registerPeer(peer.id);
128
- }
129
- this._packetHandler.setIlpMetrics(this._ilpMetrics);
130
- this._healthServer = new health_server_1.HealthServer(logger.child({ component: 'HealthServer' }), this, {
131
- metricsMiddleware: this._ilpMetrics.createMetricsMiddleware(),
132
- });
133
- this._logger.info({
134
- event: 'connector_initialized',
135
- nodeId: resolvedConfig.nodeId,
136
- peersCount: resolvedConfig.peers.length,
137
- routesCount: resolvedConfig.routes.length,
138
- }, 'Connector node initialized');
139
- }
140
- setLocalDeliveryHandler(handler) {
141
- this._logger.info({ event: 'local_delivery_handler_set', hasHandler: handler !== null }, handler
142
- ? 'Local delivery function handler registered'
143
- : 'Local delivery function handler cleared');
144
- this._packetHandler.setLocalDeliveryHandler(handler);
145
- }
146
- setPacketHandler(handler) {
147
- this._logger.info({ event: 'packet_handler_set', hasHandler: handler !== null }, handler ? 'Packet handler registered' : 'Packet handler cleared');
148
- if (handler) {
149
- const adapter = (0, payment_handler_1.createPaymentHandlerAdapter)(handler, this._logger);
150
- this._packetHandler.setLocalDeliveryHandler(adapter);
151
- }
152
- else {
153
- this._packetHandler.setLocalDeliveryHandler(null);
154
- }
155
- }
156
- getDeploymentMode() {
157
- if (this._config.deploymentMode) {
158
- return this._config.deploymentMode;
159
- }
160
- const hasLocalDelivery = this._config.localDelivery?.enabled === true;
161
- const hasAdminApi = this._config.adminApi?.enabled === true;
162
- if (hasLocalDelivery && hasAdminApi) {
163
- return 'standalone';
164
- }
165
- if (!hasLocalDelivery && !hasAdminApi) {
166
- return 'embedded';
167
- }
168
- return 'embedded';
169
- }
170
- isEmbedded() {
171
- return this.getDeploymentMode() === 'embedded';
172
- }
173
- isStandalone() {
174
- return this.getDeploymentMode() === 'standalone';
175
- }
176
- async sendPacket(params) {
177
- if (!this._btpServerStarted) {
178
- throw new config_loader_1.ConnectorNotStartedError();
179
- }
180
- const packet = {
181
- type: shared_1.PacketType.PREPARE,
182
- destination: params.destination,
183
- amount: params.amount,
184
- expiresAt: params.expiresAt,
185
- data: params.data ?? Buffer.alloc(0),
186
- };
187
- this._logger.info({
188
- event: 'send_packet',
189
- destination: params.destination,
190
- amount: params.amount.toString(),
191
- expiresAt: params.expiresAt.toISOString(),
192
- }, 'Sending packet via public API');
193
- try {
194
- return await this._packetHandler.handlePreparePacket(packet, this._config.nodeId);
195
- }
196
- catch (error) {
197
- this._logger.error({
198
- event: 'send_packet_error',
199
- destination: params.destination,
200
- error: error instanceof Error ? error.message : String(error),
201
- }, 'Unexpected error sending packet');
202
- return {
203
- type: shared_1.PacketType.REJECT,
204
- code: shared_1.ILPErrorCode.T00_INTERNAL_ERROR,
205
- triggeredBy: this._config.nodeId,
206
- message: 'Internal connector error',
207
- data: Buffer.alloc(0),
208
- };
209
- }
210
- }
211
- async start() {
212
- this._logger.info({
213
- event: 'connector_starting',
214
- nodeId: this._config.nodeId,
215
- peersCount: this._config.peers.length,
216
- routesCount: this._config.routes.length,
217
- }, 'Starting connector node');
218
- try {
219
- (0, types_1.validateChainProviders)(this._config, this._logger);
220
- const createdProvider = this._createTransportProvider(this._config.transport);
221
- this._transportProvider = createdProvider;
222
- this._transportType =
223
- this._config.transport === undefined ? 'direct' : this._config.transport.type;
224
- try {
225
- await createdProvider.start();
226
- }
227
- catch (err) {
228
- this._transportProvider = null;
229
- this._transportType = null;
230
- this._transportProviderReady = false;
231
- throw err;
232
- }
233
- this._transportProviderReady = true;
234
- this._lastTransportHealthy = true;
235
- this._transportHealthInterval = setInterval(() => {
236
- const provider = this._transportProvider;
237
- if (!provider || !this._transportProviderReady)
238
- return;
239
- provider
240
- .healthCheck()
241
- .then((healthy) => {
242
- if (this._transportProviderReady && this._transportProvider === provider) {
243
- this._lastTransportHealthy = healthy;
244
- }
245
- })
246
- .catch(() => {
247
- if (this._transportProviderReady && this._transportProvider === provider) {
248
- this._lastTransportHealthy = false;
249
- }
250
- });
251
- }, this._transportHealthIntervalMs);
252
- this._transportHealthInterval.unref?.();
253
- const evmProviderConfig = this._config.chainProviders?.find((p) => p.chainType === 'evm');
254
- const legacySettlementVars = [
255
- 'BASE_L2_RPC_URL',
256
- 'SETTLEMENT_ENABLED',
257
- 'TOKEN_NETWORK_REGISTRY',
258
- 'M2M_TOKEN_ADDRESS',
259
- 'TREASURY_EVM_PRIVATE_KEY',
260
- ];
261
- const detectedLegacyVars = legacySettlementVars.filter((v) => process.env[v]);
262
- if (detectedLegacyVars.length > 0) {
263
- this._logger.warn({ event: 'legacy_env_vars_detected', vars: detectedLegacyVars }, 'Detected legacy settlement env vars -- these are no longer used. Configure chainProviders with an EVM entry instead.');
264
- }
265
- const baseRpcUrl = evmProviderConfig?.rpcUrl;
266
- const registryAddress = evmProviderConfig?.registryAddress;
267
- const m2mTokenAddress = evmProviderConfig?.tokenAddress;
268
- const treasuryPrivateKey = evmProviderConfig?.keyId;
269
- if (evmProviderConfig &&
270
- baseRpcUrl &&
271
- registryAddress &&
272
- m2mTokenAddress &&
273
- treasuryPrivateKey) {
274
- try {
275
- const keyManager = new key_manager_1.KeyManager({
276
- backend: 'env',
277
- nodeId: this._config.nodeId,
278
- evmPrivateKey: treasuryPrivateKey,
279
- }, this._logger);
280
- const evmKeyId = 'evm';
281
- const { ethers } = await (0, optional_require_1.requireOptional)('ethers', 'EVM settlement');
282
- const provider = new ethers.JsonRpcProvider(baseRpcUrl);
283
- this._paymentChannelSDK = new payment_channel_sdk_1.PaymentChannelSDK(provider, keyManager, evmKeyId, registryAddress, this._logger);
284
- try {
285
- const resolvedSymbol = await this._paymentChannelSDK.getTokenSymbol(m2mTokenAddress);
286
- if (resolvedSymbol) {
287
- this._defaultSettlementTokenId = resolvedSymbol;
288
- this._logger.info({
289
- event: 'token_symbol_resolved',
290
- symbol: resolvedSymbol,
291
- tokenAddress: m2mTokenAddress,
292
- }, `Resolved on-chain token symbol: ${resolvedSymbol}`);
293
- }
294
- else {
295
- this._logger.warn({ event: 'token_symbol_empty', tokenAddress: m2mTokenAddress }, 'ERC-20 symbol() returned empty string, falling back to M2M');
296
- }
297
- }
298
- catch (symbolError) {
299
- this._logger.warn({
300
- event: 'token_symbol_resolution_failed',
301
- tokenAddress: m2mTokenAddress,
302
- error: symbolError instanceof Error ? symbolError.message : String(symbolError),
303
- }, 'Failed to resolve on-chain token symbol, falling back to M2M');
304
- }
305
- const primaryChainId = this._config.blockchain?.base?.chainId ?? this._config.blockchain?.arbitrum?.chainId;
306
- if (primaryChainId) {
307
- this._chainSDKs.set(primaryChainId, this._paymentChannelSDK);
308
- }
309
- const enabledChains = [];
310
- if (this._config.blockchain?.base?.enabled && this._config.blockchain.base) {
311
- enabledChains.push({ name: 'Base', config: this._config.blockchain.base });
312
- }
313
- if (this._config.blockchain?.arbitrum?.enabled && this._config.blockchain.arbitrum) {
314
- enabledChains.push({ name: 'Arbitrum', config: this._config.blockchain.arbitrum });
315
- }
316
- for (const chain of enabledChains) {
317
- if (this._chainSDKs.has(chain.config.chainId)) {
318
- continue;
319
- }
320
- const chainRpcUrl = chain.config.rpcUrl;
321
- const chainRegistryAddress = chain.config.registryAddress ?? registryAddress;
322
- const chainPrivateKey = chain.config.privateKey ?? treasuryPrivateKey;
323
- const chainKeyManager = chainPrivateKey !== treasuryPrivateKey
324
- ? new key_manager_1.KeyManager({ backend: 'env', nodeId: this._config.nodeId, evmPrivateKey: chainPrivateKey }, this._logger)
325
- : keyManager;
326
- const chainProvider = new ethers.JsonRpcProvider(chainRpcUrl);
327
- const chainSDK = new payment_channel_sdk_1.PaymentChannelSDK(chainProvider, chainKeyManager, evmKeyId, chainRegistryAddress, this._logger);
328
- this._chainSDKs.set(chain.config.chainId, chainSDK);
329
- this._logger.info({
330
- event: 'chain_sdk_initialized',
331
- chain: chain.name,
332
- chainId: chain.config.chainId,
333
- rpcUrl: chainRpcUrl,
334
- }, `PaymentChannelSDK initialized for ${chain.name} (chainId: ${chain.config.chainId})`);
335
- }
336
- const peerIdToAddressMap = new Map();
337
- for (const peer of this._config.peers) {
338
- if (peer.evmAddress) {
339
- peerIdToAddressMap.set(peer.id, peer.evmAddress);
340
- this._logger.debug({ peerId: peer.id, address: peer.evmAddress }, 'Loaded peer EVM address from config');
341
- }
342
- }
343
- for (let i = 1; i <= 10; i++) {
344
- const peerAddress = process.env[`PEER${i}_EVM_ADDRESS`];
345
- const peerId = `peer${i}`;
346
- if (peerAddress && !peerIdToAddressMap.has(peerId)) {
347
- peerIdToAddressMap.set(peerId, peerAddress);
348
- this._logger.debug({ peerId, address: peerAddress }, 'Loaded peer EVM address from env var (fallback)');
349
- }
350
- }
351
- const tokenAddressMap = new Map();
352
- tokenAddressMap.set(this._defaultSettlementTokenId, m2mTokenAddress);
353
- tokenAddressMap.set(m2mTokenAddress, m2mTokenAddress);
354
- const defaultSettlementTimeout = evmProviderConfig.settlementOptions?.settlementTimeoutSecs ?? 86400;
355
- const initialDepositMultiplier = evmProviderConfig.settlementOptions?.initialDepositMultiplier ?? 1;
356
- let accountManager;
357
- const tigerBeetleClusterId = process.env.TIGERBEETLE_CLUSTER_ID;
358
- const tigerBeetleReplicas = process.env.TIGERBEETLE_REPLICAS;
359
- if (tigerBeetleClusterId && tigerBeetleReplicas) {
360
- try {
361
- const rawAddresses = tigerBeetleReplicas.split(',').map((s) => s.trim());
362
- const resolvedAddresses = await Promise.all(rawAddresses.map(async (addr) => {
363
- const parts = addr.split(':');
364
- const hostOrIp = parts[0] || addr;
365
- const port = parts[1] || '3000';
366
- if (/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(hostOrIp)) {
367
- return addr;
368
- }
369
- try {
370
- const result = await dns_1.promises.lookup(hostOrIp);
371
- this._logger.debug({ hostname: hostOrIp, ip: result.address }, 'Resolved TigerBeetle hostname to IP');
372
- return `${result.address}:${port}`;
373
- }
374
- catch (dnsError) {
375
- this._logger.warn({ hostname: hostOrIp, error: dnsError }, 'Failed to resolve TigerBeetle hostname, using as-is');
376
- return addr;
377
- }
378
- }));
379
- const tbOperationTimeout = parseInt(process.env.TIGERBEETLE_OPERATION_TIMEOUT ?? '15000', 10);
380
- const tigerBeetleClient = new tigerbeetle_client_1.TigerBeetleClient({
381
- clusterId: parseInt(tigerBeetleClusterId, 10),
382
- replicaAddresses: resolvedAddresses,
383
- connectionTimeout: 5000,
384
- operationTimeout: tbOperationTimeout,
385
- }, this._logger);
386
- await tigerBeetleClient.initialize();
387
- this._tigerBeetleClient = tigerBeetleClient;
388
- accountManager = new account_manager_1.AccountManager({ nodeId: this._config.nodeId }, tigerBeetleClient, this._logger);
389
- this._accountManager = accountManager;
390
- this._logger.info({
391
- event: 'tigerbeetle_account_manager_initialized',
392
- clusterId: tigerBeetleClusterId,
393
- replicas: tigerBeetleReplicas,
394
- }, `Accounting backend: TigerBeetle (cluster: ${tigerBeetleClusterId}, replicas: ${tigerBeetleReplicas})`);
395
- }
396
- catch (error) {
397
- const errorMessage = error instanceof Error ? error.message : String(error);
398
- this._logger.warn({
399
- event: 'tigerbeetle_init_failed',
400
- error: errorMessage,
401
- clusterId: tigerBeetleClusterId,
402
- replicas: tigerBeetleReplicas,
403
- }, 'TigerBeetle initialization failed, using in-memory ledger');
404
- accountManager = await this._createInMemoryAccountManager();
405
- this._accountManager = accountManager;
406
- }
407
- }
408
- else {
409
- this._logger.info({ event: 'tigerbeetle_not_configured' }, 'TigerBeetle not configured (TIGERBEETLE_CLUSTER_ID or TIGERBEETLE_REPLICAS not set), using in-memory ledger');
410
- accountManager = await this._createInMemoryAccountManager();
411
- this._accountManager = accountManager;
412
- }
413
- const peerIds = Array.from(peerIdToAddressMap.keys());
414
- const settlementThreshold = BigInt(evmProviderConfig.settlementOptions?.threshold ?? '1000000');
415
- this._logger.info({
416
- event: 'settlement_monitor_config',
417
- peerIds,
418
- threshold: settlementThreshold.toString(),
419
- }, 'Initializing event-driven settlement monitor with peer list');
420
- const settlementMonitor = new settlement_monitor_1.SettlementMonitor({
421
- thresholds: {
422
- defaultThreshold: settlementThreshold,
423
- },
424
- peers: peerIds,
425
- tokenIds: [this._defaultSettlementTokenId],
426
- }, this._logger);
427
- this._settlementMonitor = settlementMonitor;
428
- const chainProviderChainId = this._config.chainProviders?.find((cp) => cp.chainType === 'evm')?.chainId;
429
- const primaryChainIdStr = primaryChainId
430
- ? `evm:${primaryChainId}`
431
- : (chainProviderChainId ?? 'evm:unknown');
432
- const chainRegistry = new chain_provider_registry_1.ChainProviderRegistry();
433
- const evmProvider = new evm_payment_channel_provider_1.EVMPaymentChannelProvider(this._paymentChannelSDK, primaryChainIdStr, m2mTokenAddress, this._logger);
434
- chainRegistry.register(evmProvider);
435
- const peerIdToChainMap = new Map();
436
- for (const peer of this._config.peers) {
437
- if (peer.chain) {
438
- peerIdToChainMap.set(peer.id, peer.chain);
439
- }
440
- else if (peerIdToAddressMap.has(peer.id)) {
441
- peerIdToChainMap.set(peer.id, primaryChainIdStr);
442
- }
443
- }
444
- for (const peerId of peerIdToAddressMap.keys()) {
445
- if (!peerIdToChainMap.has(peerId)) {
446
- peerIdToChainMap.set(peerId, primaryChainIdStr);
447
- }
448
- }
449
- const nip59Enabled = this._config.nip59?.enabled ?? false;
450
- const nip59Wrapper = new nip59_claim_wrapper_1.NIP59ClaimWrapper({
451
- nip59Enabled,
452
- logger: this._logger,
453
- });
454
- const nodeSecp256k1PrivKey = treasuryPrivateKey
455
- ? (0, utils_1.hexToBytes)(treasuryPrivateKey.replace(/^0x/, ''))
456
- : undefined;
457
- const peerIdToNip59PubKey = new Map();
458
- for (const peer of this._config.peers) {
459
- if (peer.nip59PublicKey) {
460
- peerIdToNip59PubKey.set(peer.id, (0, utils_1.hexToBytes)(peer.nip59PublicKey));
461
- }
462
- }
463
- if (nip59Enabled) {
464
- this._logger.info({ event: 'nip59_enabled', peerCount: peerIdToNip59PubKey.size }, 'NIP-59 transport privacy enabled for claim wrapping');
465
- }
466
- this._settlementExecutor = new settlement_executor_1.SettlementExecutor({
467
- nodeId: this._config.nodeId,
468
- defaultSettlementTimeout,
469
- initialDepositMultiplier,
470
- minDepositThreshold: 0.5,
471
- maxRetries: 3,
472
- retryDelayMs: 5000,
473
- tokenAddressMap,
474
- peerIdToAddressMap,
475
- peerIdToChainMap,
476
- }, accountManager, chainRegistry, settlementMonitor, this._logger);
477
- this._settlementExecutor.start();
478
- this._logger.info({ event: 'settlement_executor_started' }, 'Automatic settlement execution enabled');
479
- settlementMonitor.start();
480
- this._logger.info({
481
- event: 'settlement_monitor_started',
482
- threshold: settlementThreshold.toString(),
483
- peerCount: peerIds.length,
484
- }, 'Event-driven settlement monitoring started');
485
- this._channelManager = new channel_manager_1.ChannelManager({
486
- nodeId: this._config.nodeId,
487
- defaultSettlementTimeout,
488
- initialDepositMultiplier,
489
- idleChannelThreshold: 86400,
490
- minDepositThreshold: 0.5,
491
- idleCheckInterval: 3600,
492
- tokenAddressMap,
493
- peerIdToAddressMap,
494
- registryAddress,
495
- rpcUrl: baseRpcUrl,
496
- privateKey: treasuryPrivateKey,
497
- }, this._paymentChannelSDK, this._settlementExecutor, this._logger);
498
- this._settlementExecutor.setChannelManager(this._channelManager);
499
- this._logger.info({
500
- event: 'payment_channel_sdk_initialized',
501
- registryAddress,
502
- tokenAddress: m2mTokenAddress,
503
- peerCount: peerIdToAddressMap.size,
504
- }, 'Payment channel infrastructure initialized');
505
- if (this._channelManager && this._paymentChannelSDK) {
506
- try {
507
- const BetterSqlite3Module = await (0, optional_require_1.requireOptional)('better-sqlite3', 'per-packet claims persistence');
508
- const BetterSqlite3 = BetterSqlite3Module.default;
509
- const claimDbPath = `./data/claims-${this._config.nodeId}.db`;
510
- const claimDb = new BetterSqlite3(claimDbPath);
511
- claimDb.exec(claim_sender_db_schema_1.SENT_CLAIMS_TABLE_SCHEMA);
512
- for (const indexSql of claim_sender_db_schema_1.SENT_CLAIMS_INDEXES) {
513
- claimDb.exec(indexSql);
514
- }
515
- const perPacketClaimService = new per_packet_claim_service_1.PerPacketClaimService(chainRegistry, this._channelManager, claimDb, this._logger, this._config.nodeId, peerIdToChainMap, nip59Wrapper, nodeSecp256k1PrivKey, peerIdToNip59PubKey);
516
- this._packetHandler.setPerPacketClaimService(perPacketClaimService);
517
- this._settlementExecutor?.setPerPacketClaimService(perPacketClaimService);
518
- this._logger.info({ event: 'per_packet_claims_enabled' }, 'Per-packet claim service wired to PacketHandler and SettlementExecutor');
519
- }
520
- catch (error) {
521
- const errorMessage = error instanceof Error ? error.message : String(error);
522
- this._logger.error({ event: 'per_packet_claims_init_failed', error: errorMessage }, 'Failed to initialize per-packet claim service');
523
- throw error;
524
- }
525
- }
526
- const inboundClaimValidator = new inbound_claim_validator_1.InboundClaimValidator(this._paymentChannelSDK, this._config.nodeId, this._logger, this._channelManager ?? undefined, nip59Wrapper, nodeSecp256k1PrivKey);
527
- this._btpServer.setInboundClaimValidator((protocolData, ilpPacket, peerId) => inboundClaimValidator.validate(protocolData, ilpPacket, peerId));
528
- this._logger.info({ event: 'inbound_claim_validator_enabled' }, 'Inbound claim validator wired to BTP server');
529
- if (this._paymentChannelSDK) {
530
- try {
531
- const BetterSqlite3Module = await (0, optional_require_1.requireOptional)('better-sqlite3', 'claim receiver persistence');
532
- const BetterSqlite3 = BetterSqlite3Module.default;
533
- const receivedClaimDbPath = `./data/received-claims-${this._config.nodeId}.db`;
534
- const receivedClaimDb = new BetterSqlite3(receivedClaimDbPath);
535
- (0, claim_receiver_db_schema_1.initializeClaimReceiverSchema)(receivedClaimDb);
536
- const claimReceiver = new claim_receiver_1.ClaimReceiver(receivedClaimDb, chainRegistry, this._logger, this._channelManager ?? undefined, peerIdToAddressMap, nip59Wrapper, nodeSecp256k1PrivKey);
537
- claimReceiver.registerWithBTPServer(this._btpServer);
538
- if (this._settlementMonitor) {
539
- this._settlementMonitor.setClaimReceiver(claimReceiver);
540
- this._settlementMonitor.stop();
541
- this._settlementMonitor.start();
542
- }
543
- this._settlementExecutor?.setClaimReceiver(claimReceiver);
544
- this._logger.info({ event: 'claim_receiver_enabled' }, 'ClaimReceiver wired to BTP server and SettlementMonitor');
545
- }
546
- catch (error) {
547
- const errorMessage = error instanceof Error ? error.message : String(error);
548
- this._logger.error({ event: 'claim_receiver_init_failed', error: errorMessage }, 'Failed to initialize ClaimReceiver');
549
- }
550
- }
551
- if (accountManager) {
552
- const settlementConfig = {
553
- connectorFeePercentage: this._config.settlement?.connectorFeePercentage ?? 0.1,
554
- enableSettlement: true,
555
- tigerBeetleClusterId: tigerBeetleClusterId ? parseInt(tigerBeetleClusterId, 10) : 0,
556
- tigerBeetleReplicas: tigerBeetleReplicas
557
- ? tigerBeetleReplicas.split(',').map((s) => s.trim())
558
- : [],
559
- };
560
- this._packetHandler.setSettlement(accountManager, settlementConfig, this._defaultSettlementTokenId);
561
- }
562
- }
563
- catch (error) {
564
- const errorMessage = error instanceof Error ? error.message : String(error);
565
- this._logger.error({ event: 'payment_channel_init_failed', error: errorMessage }, 'Failed to initialize payment channel infrastructure (connector continues without channels)');
566
- }
567
- }
568
- else {
569
- this._logger.info({ event: 'payment_channels_disabled' }, 'Payment channel infrastructure disabled (missing configuration)');
570
- }
571
- await this._btpServer.start(this._config.btpServerPort);
572
- this._btpServerStarted = true;
573
- this._logger.info({
574
- event: 'btp_server_started',
575
- port: this._config.btpServerPort,
576
- }, 'BTP server started');
577
- const healthCheckPort = this._config.healthCheckPort || 8080;
578
- await this._healthServer.start(healthCheckPort);
579
- this._logger.info({
580
- event: 'health_server_started',
581
- port: healthCheckPort,
582
- }, 'Health server started');
583
- const adminApiEnabled = this._config.adminApi?.enabled || process.env.ADMIN_API_ENABLED === 'true';
584
- if (adminApiEnabled) {
585
- const adminConfig = {
586
- enabled: true,
587
- port: this._config.adminApi?.port ?? parseInt(process.env.ADMIN_API_PORT || '8081', 10),
588
- host: this._config.adminApi?.host ?? process.env.ADMIN_API_HOST ?? '0.0.0.0',
589
- apiKey: this._config.adminApi?.apiKey ?? process.env.ADMIN_API_KEY,
590
- };
591
- this._adminServer = new admin_server_1.AdminServer({
592
- routingTable: this._routingTable,
593
- btpClientManager: this._btpClientManager,
594
- nodeId: this._config.nodeId,
595
- config: adminConfig,
596
- logger: this._logger,
597
- settlementPeers: this._settlementPeers,
598
- channelManager: this._channelManager ?? undefined,
599
- paymentChannelSDK: this._paymentChannelSDK ?? undefined,
600
- accountManager: this._accountManager ?? undefined,
601
- settlementMonitor: this._settlementMonitor ?? undefined,
602
- defaultSettlementTokenId: this._defaultSettlementTokenId,
603
- packetSender: (params) => this.sendPacket(params),
604
- isReady: () => this._btpServerStarted,
605
- metricsRegistry: this._ilpMetrics,
606
- });
607
- await this._adminServer.start();
608
- this._logger.info({
609
- event: 'admin_server_started',
610
- port: adminConfig.port,
611
- host: adminConfig.host,
612
- apiKeyConfigured: !!adminConfig.apiKey,
613
- }, 'Admin API server started');
614
- }
615
- else {
616
- this._logger.debug({ event: 'admin_api_disabled' }, 'Admin API disabled (set ADMIN_API_ENABLED=true or adminApi.enabled=true to enable)');
617
- }
618
- const peerConnections = [];
619
- for (const peerConfig of this._config.peers) {
620
- const peer = {
621
- id: peerConfig.id,
622
- url: peerConfig.url,
623
- authToken: peerConfig.authToken,
624
- connected: false,
625
- lastSeen: new Date(),
626
- };
627
- peerConnections.push(this._btpClientManager.addPeer(peer));
628
- }
629
- const peerResults = await Promise.allSettled(peerConnections);
630
- const failedPeers = peerResults.filter((r) => r.status === 'rejected');
631
- if (failedPeers.length > 0) {
632
- this._logger.warn({
633
- event: 'peer_connection_failures',
634
- failedCount: failedPeers.length,
635
- totalPeers: this._config.peers.length,
636
- }, 'Some peer connections failed during startup (will retry in background)');
637
- }
638
- const connectedPeers = this._btpClientManager.getPeerStatus();
639
- const connectedCount = Array.from(connectedPeers.values()).filter(Boolean).length;
640
- if (this._channelManager && this._paymentChannelSDK) {
641
- this._logger.info({ event: 'creating_payment_channels', connectedCount }, 'Creating payment channels for connected peers');
642
- const channelCreationPromises = [];
643
- for (const [peerId, connected] of connectedPeers.entries()) {
644
- if (!connected) {
645
- continue;
646
- }
647
- const channelPromise = (async () => {
648
- try {
649
- const tokenId = this._defaultSettlementTokenId;
650
- const peerConfig = this._config.peers.find((p) => p.id === peerId);
651
- const peerChain = peerConfig?.chain;
652
- const channelId = await this._channelManager.ensureChannelExists(peerId, tokenId, peerChain ? { chain: peerChain } : undefined);
653
- this._logger.info({ event: 'payment_channel_ready', peerId, channelId, chain: peerChain }, 'Payment channel ready for peer');
654
- }
655
- catch (error) {
656
- const errorMessage = error instanceof Error ? error.message : String(error);
657
- this._logger.warn({ event: 'payment_channel_creation_failed', peerId, error: errorMessage }, 'Failed to create payment channel for peer (will retry on-demand)');
658
- }
659
- })();
660
- channelCreationPromises.push(channelPromise);
661
- }
662
- await Promise.allSettled(channelCreationPromises);
663
- this._logger.info({ event: 'payment_channels_initialized' }, 'Payment channel creation completed');
664
- }
665
- this._updateHealthStatus();
666
- this._logger.info({
667
- event: 'connector_ready',
668
- nodeId: this._config.nodeId,
669
- connectedPeers: connectedCount,
670
- totalPeers: this._config.peers.length,
671
- healthStatus: this._healthStatus,
672
- }, 'Connector node ready');
673
- }
674
- catch (error) {
675
- const errorMessage = error instanceof Error ? error.message : String(error);
676
- this._logger.error({
677
- event: 'connector_start_failed',
678
- nodeId: this._config.nodeId,
679
- error: errorMessage,
680
- }, 'Failed to start connector node');
681
- if (this._transportHealthInterval) {
682
- clearInterval(this._transportHealthInterval);
683
- this._transportHealthInterval = null;
684
- }
685
- if (this._transportProvider) {
686
- this._transportProviderReady = false;
687
- try {
688
- await this._transportProvider.stop();
689
- }
690
- catch (stopErr) {
691
- const stopMsg = stopErr instanceof Error ? stopErr.message : String(stopErr);
692
- this._logger.warn({ event: 'transport_rollback_stop_failed', error: stopMsg }, 'Transport provider stop() failed during start() rollback; continuing');
693
- }
694
- finally {
695
- this._transportProvider = null;
696
- this._transportType = null;
697
- }
698
- }
699
- this._healthStatus = 'unhealthy';
700
- throw error;
701
- }
702
- }
703
- async stop() {
704
- if (!this._btpServerStarted && !this._adminServer) {
705
- this._logger.debug({ event: 'connector_already_stopped' }, 'Connector already stopped, ignoring');
706
- return;
707
- }
708
- this._logger.info({
709
- event: 'connector_stopping',
710
- nodeId: this._config.nodeId,
711
- }, 'Stopping connector node');
712
- try {
713
- if (this._settlementMonitor) {
714
- await this._settlementMonitor.stop();
715
- this._logger.info({ event: 'settlement_monitor_stopped' }, 'Settlement monitor stopped');
716
- this._settlementMonitor = null;
717
- }
718
- if (this._settlementExecutor) {
719
- await this._settlementExecutor.stop();
720
- this._logger.info({ event: 'settlement_executor_stopped' }, 'Settlement executor stopped');
721
- this._settlementExecutor = null;
722
- }
723
- if (this._channelManager) {
724
- this._channelManager.stop();
725
- this._logger.info({ event: 'channel_manager_stopped' }, 'Channel manager stopped');
726
- this._channelManager = null;
727
- }
728
- for (const [chainId, sdk] of this._chainSDKs.entries()) {
729
- sdk.removeAllListeners();
730
- this._logger.debug({ event: 'chain_sdk_stopped', chainId }, `Chain SDK stopped (chainId: ${chainId})`);
731
- }
732
- this._chainSDKs.clear();
733
- if (this._paymentChannelSDK) {
734
- this._logger.info({ event: 'payment_channel_sdk_stopped' }, 'Payment channel SDK stopped');
735
- this._paymentChannelSDK = null;
736
- }
737
- if (this._tigerBeetleClient) {
738
- await this._tigerBeetleClient.close();
739
- this._logger.info({ event: 'tigerbeetle_client_closed' }, 'TigerBeetle client closed');
740
- this._tigerBeetleClient = null;
741
- }
742
- if (this._inMemoryLedgerClient) {
743
- await this._inMemoryLedgerClient.close();
744
- this._logger.info({ event: 'in_memory_ledger_closed' }, 'In-memory ledger client closed');
745
- this._inMemoryLedgerClient = null;
746
- }
747
- this._accountManager = null;
748
- const peerIds = this._btpClientManager.getPeerIds();
749
- for (const peerId of peerIds) {
750
- await this._btpClientManager.removePeer(peerId);
751
- }
752
- if (this._adminServer) {
753
- await this._adminServer.stop();
754
- this._logger.info({ event: 'admin_server_stopped' }, 'Admin API server stopped');
755
- this._adminServer = null;
756
- }
757
- await this._healthServer.stop();
758
- await this._btpServer.stop();
759
- if (this._transportHealthInterval) {
760
- clearInterval(this._transportHealthInterval);
761
- this._transportHealthInterval = null;
762
- }
763
- if (this._transportProvider) {
764
- this._transportProviderReady = false;
765
- try {
766
- await this._transportProvider.stop();
767
- }
768
- finally {
769
- this._transportProvider = null;
770
- this._transportType = null;
771
- }
772
- }
773
- this._logger.info({
774
- event: 'connector_stopped',
775
- nodeId: this._config.nodeId,
776
- }, 'Connector node stopped');
777
- this._healthStatus = 'starting';
778
- this._btpServerStarted = false;
779
- }
780
- catch (error) {
781
- const errorMessage = error instanceof Error ? error.message : String(error);
782
- this._logger.error({
783
- event: 'connector_stop_failed',
784
- nodeId: this._config.nodeId,
785
- error: errorMessage,
786
- }, 'Failed to stop connector node gracefully');
787
- throw error;
788
- }
789
- }
790
- getHealthStatus() {
791
- const peerStatus = this._btpClientManager.getPeerStatus();
792
- const peersConnected = Array.from(peerStatus.values()).filter(Boolean).length;
793
- const totalPeers = this._config.peers.length;
794
- const uptime = Math.floor((Date.now() - this._startTime.getTime()) / 1000);
795
- const healthStatus = {
796
- status: this._healthStatus,
797
- uptime,
798
- peersConnected,
799
- totalPeers,
800
- timestamp: new Date().toISOString(),
801
- nodeId: this._config.nodeId,
802
- version: package_json_1.default.version,
803
- };
804
- if (this._transportProviderReady && this._transportProvider && this._transportType) {
805
- healthStatus.transport = {
806
- type: this._transportType,
807
- healthy: this._transportType === 'direct' ? true : this._lastTransportHealthy,
808
- };
809
- }
810
- return healthStatus;
811
- }
812
- get routingTable() {
813
- return this._routingTable;
814
- }
815
- get btpClientManager() {
816
- return this._btpClientManager;
817
- }
818
- get transportProvider() {
819
- return this._transportProviderReady ? this._transportProvider : null;
820
- }
821
- _createTransportProvider(cfg) {
822
- if (cfg === undefined || cfg.type === 'direct') {
823
- const externalUrl = `ws://localhost:${this._config.btpServerPort}`;
824
- this._logger.debug({ event: 'direct_transport_external_url_synthesized', externalUrl }, 'DirectTransportProvider externalUrl synthesized from btpServerPort (local placeholder)');
825
- return new transport_1.DirectTransportProvider(externalUrl);
826
- }
827
- if (cfg.type === 'socks5') {
828
- let managedClient;
829
- let externalUrl = cfg.externalUrl;
830
- if (cfg.managed === true) {
831
- let cachedFactory;
832
- let prewarmError;
833
- const prewarmPromise = (0, transport_1.createDefaultAnonFactory)().then((f) => {
834
- cachedFactory = f;
835
- }, (err) => {
836
- prewarmError = err;
837
- });
838
- const anonFactory = (opts) => {
839
- if (cachedFactory) {
840
- return cachedFactory(opts);
841
- }
842
- if (prewarmError) {
843
- if (prewarmError.code === 'MODULE_NOT_FOUND') {
844
- throw prewarmError;
845
- }
846
- throw new Error(`Failed to load optional dependency "@anyone-protocol/anyone-client": ` +
847
- `${prewarmError.message ?? String(prewarmError)}`, { cause: prewarmError });
848
- }
849
- try {
850
- const pkg = '@anyone-protocol/anyone-client';
851
- const mod = require(pkg);
852
- const AnonCtor = mod?.Anon ?? mod?.default?.Anon ?? mod?.default;
853
- if (typeof AnonCtor !== 'function') {
854
- throw new Error('@anyone-protocol/anyone-client did not export an `Anon` constructor');
855
- }
856
- cachedFactory = (o) => new AnonCtor(o);
857
- return cachedFactory(opts);
858
- }
859
- catch (err) {
860
- const cause = err;
861
- if (cause?.code === 'MODULE_NOT_FOUND') {
862
- throw cause;
863
- }
864
- if (cause?.code === 'ERR_REQUIRE_ESM') {
865
- throw new Error(`@anyone-protocol/anyone-client is an ESM-only package; ` +
866
- `the async lazy-import pre-warm had not completed when the factory ` +
867
- `was invoked. This is a timing bug — please file an issue.`, { cause });
868
- }
869
- throw new Error(`Failed to load optional dependency "@anyone-protocol/anyone-client": ` +
870
- `${cause?.message ?? String(err)}`, { cause });
871
- }
872
- };
873
- void prewarmPromise;
874
- managedClient = new transport_1.ManagedAnonClient({
875
- socksProxy: cfg.socksProxy,
876
- hiddenServiceDir: cfg.managedOptions?.hiddenServiceDir,
877
- hiddenServicePort: cfg.managedOptions?.hiddenServicePort,
878
- binaryPath: cfg.managedOptions?.binaryPath,
879
- startupTimeoutMs: cfg.managedOptions?.startupTimeoutMs,
880
- stopTimeoutMs: cfg.managedOptions?.stopTimeoutMs,
881
- logger: this._logger,
882
- anonFactory,
883
- });
884
- if (externalUrl === 'auto') {
885
- externalUrl = 'wss://pending.invalid/btp';
886
- }
887
- }
888
- else if (externalUrl === 'auto') {
889
- throw new Error('_createTransportProvider: transport.externalUrl "auto" requires managed: true');
890
- }
891
- let resolveExternalUrlOnStart;
892
- if (cfg.externalUrl === 'auto') {
893
- const hsDir = cfg.managedOptions?.hiddenServiceDir;
894
- if (!hsDir) {
895
- throw new Error('_createTransportProvider: transport.externalUrl "auto" requires managedOptions.hiddenServiceDir');
896
- }
897
- const hostnameReadDeadlineMs = cfg.managedOptions?.startupTimeoutMs ?? 30_000;
898
- const HIDDEN_SERVICE_HOSTNAME_RE = /^[a-z2-7]{16}(?:[a-z2-7]{40})?\.(?:anon|onion)$/;
899
- resolveExternalUrlOnStart = async () => {
900
- const hostnameFile = nodePath.join(hsDir, 'hostname');
901
- const deadline = Date.now() + hostnameReadDeadlineMs;
902
- let lastErr;
903
- while (Date.now() < deadline) {
904
- try {
905
- const raw = await fs_1.promises.readFile(hostnameFile, 'utf8');
906
- const firstLine = raw.split(/\r?\n/, 1)[0]?.trim() ?? '';
907
- const hostname = firstLine;
908
- if (!hostname) {
909
- lastErr = new Error('hostname file is empty');
910
- }
911
- else if (!HIDDEN_SERVICE_HOSTNAME_RE.test(hostname)) {
912
- lastErr = new Error(`hostname file contents did not match the expected hidden service format ` +
913
- `(length=${hostname.length}); ignoring and retrying`);
914
- }
915
- else {
916
- return `wss://${hostname}/btp`;
917
- }
918
- }
919
- catch (err) {
920
- lastErr = err;
921
- }
922
- await new Promise((r) => setTimeout(r, 250));
923
- }
924
- const reason = lastErr instanceof Error ? lastErr.message : String(lastErr ?? 'unknown');
925
- throw new Error(`hidden service hostname file "${hostnameFile}" did not become readable ` +
926
- `within ${hostnameReadDeadlineMs}ms (last error: ${reason})`);
927
- };
928
- }
929
- return new transport_1.SocksTransportProvider({
930
- socksProxy: cfg.socksProxy,
931
- externalUrl,
932
- logger: this._logger,
933
- managedClient,
934
- resolveExternalUrlOnStart,
935
- });
936
- }
937
- const _exhaustive = cfg;
938
- throw new Error(`Unsupported transport type: ${JSON.stringify(_exhaustive)} ` +
939
- '(Story 35.4 _createTransportProvider exhaustiveness guard)');
940
- }
941
- get paymentChannelSDK() {
942
- return this._paymentChannelSDK;
943
- }
944
- get channelManager() {
945
- return this._channelManager;
946
- }
947
- get accountManager() {
948
- return this._accountManager;
949
- }
950
- getPaymentChannelSDKForChain(chainId) {
951
- return this._chainSDKs.get(chainId) ?? null;
952
- }
953
- async _createInMemoryAccountManager() {
954
- const evmProvider = this._config.chainProviders?.find((p) => p.chainType === 'evm');
955
- const snapshotPath = evmProvider?.settlementOptions?.ledgerSnapshotPath ?? './data/ledger-snapshot.json';
956
- const persistIntervalMs = evmProvider?.settlementOptions?.ledgerPersistIntervalMs ?? 30000;
957
- let inMemoryClient;
958
- try {
959
- inMemoryClient = new in_memory_ledger_client_1.InMemoryLedgerClient({
960
- snapshotPath,
961
- persistIntervalMs,
962
- }, this._logger);
963
- await inMemoryClient.initialize();
964
- this._logger.info({
965
- event: 'in_memory_ledger_initialized',
966
- snapshotPath,
967
- persistIntervalMs,
968
- }, `Accounting backend: in-memory ledger (snapshot: ${snapshotPath})`);
969
- }
970
- catch (error) {
971
- const errorMessage = error instanceof Error ? error.message : String(error);
972
- this._logger.warn({
973
- event: 'in_memory_ledger_snapshot_restore_failed',
974
- error: errorMessage,
975
- snapshotPath,
976
- }, 'Failed to restore from snapshot, starting with fresh in-memory ledger');
977
- try {
978
- inMemoryClient = new in_memory_ledger_client_1.InMemoryLedgerClient({
979
- snapshotPath: `${snapshotPath}.fresh-${Date.now()}`,
980
- persistIntervalMs,
981
- }, this._logger);
982
- await inMemoryClient.initialize();
983
- this._logger.info({
984
- event: 'in_memory_ledger_fresh_start',
985
- snapshotPath,
986
- }, 'In-memory ledger started with empty state');
987
- }
988
- catch (freshInitError) {
989
- const freshErrorMessage = freshInitError instanceof Error ? freshInitError.message : String(freshInitError);
990
- this._logger.error({
991
- event: 'in_memory_ledger_fresh_init_failed',
992
- error: freshErrorMessage,
993
- }, 'Critical: Fresh in-memory ledger initialization failed');
994
- throw freshInitError;
995
- }
996
- }
997
- this._inMemoryLedgerClient = inMemoryClient;
998
- const accountManager = new account_manager_1.AccountManager({ nodeId: this._config.nodeId }, inMemoryClient, this._logger);
999
- return accountManager;
1000
- }
1001
- _updateHealthStatus() {
1002
- if (!this._btpServerStarted) {
1003
- if (this._healthStatus !== 'starting') {
1004
- this._logger.info({
1005
- event: 'health_status_changed',
1006
- oldStatus: this._healthStatus,
1007
- newStatus: 'starting',
1008
- reason: 'BTP server not started',
1009
- }, 'Health status changed');
1010
- this._healthStatus = 'starting';
1011
- }
1012
- return;
1013
- }
1014
- const totalPeers = this._config.peers.length;
1015
- if (totalPeers === 0) {
1016
- if (this._healthStatus !== 'healthy') {
1017
- this._logger.info({
1018
- event: 'health_status_changed',
1019
- oldStatus: this._healthStatus,
1020
- newStatus: 'healthy',
1021
- reason: 'No peers configured (standalone mode)',
1022
- }, 'Health status changed');
1023
- this._healthStatus = 'healthy';
1024
- }
1025
- return;
1026
- }
1027
- const peerStatus = this._btpClientManager.getPeerStatus();
1028
- const connectedCount = Array.from(peerStatus.values()).filter(Boolean).length;
1029
- const connectionPercentage = (connectedCount / totalPeers) * 100;
1030
- let newStatus;
1031
- let reason;
1032
- if (connectionPercentage < 50) {
1033
- newStatus = 'unhealthy';
1034
- reason = `Only ${connectedCount}/${totalPeers} peers connected (<50%)`;
1035
- }
1036
- else {
1037
- newStatus = 'healthy';
1038
- reason = `${connectedCount}/${totalPeers} peers connected (≥50%)`;
1039
- }
1040
- if (this._healthStatus !== newStatus) {
1041
- this._logger.info({ event: 'health_status_changed', oldStatus: this._healthStatus, newStatus, reason }, 'Health status changed');
1042
- this._healthStatus = newStatus;
1043
- }
1044
- }
1045
- async registerPeer(config) {
1046
- if (!this._btpServerStarted) {
1047
- throw new config_loader_1.ConnectorNotStartedError('Connector is not started. Call start() before registerPeer().');
1048
- }
1049
- if (!config.id || typeof config.id !== 'string') {
1050
- throw new Error('Missing or invalid peer id');
1051
- }
1052
- if (!config.url || typeof config.url !== 'string') {
1053
- throw new Error('Missing or invalid peer url');
1054
- }
1055
- if (config.authToken === undefined ||
1056
- config.authToken === null ||
1057
- typeof config.authToken !== 'string') {
1058
- throw new Error('authToken must be a string (can be empty for no auth)');
1059
- }
1060
- const PLAIN_WS_PREFIX = 'ws' + '://';
1061
- const SECURE_WS_PREFIX = 'wss' + '://';
1062
- if (!config.url.startsWith(PLAIN_WS_PREFIX) && !config.url.startsWith(SECURE_WS_PREFIX)) {
1063
- throw new Error(`URL must start with ${PLAIN_WS_PREFIX} or ${SECURE_WS_PREFIX}`);
1064
- }
1065
- if (config.routes) {
1066
- for (const route of config.routes) {
1067
- if (!route.prefix || typeof route.prefix !== 'string') {
1068
- throw new Error('Invalid route: missing prefix');
1069
- }
1070
- if (!(0, shared_1.isValidILPAddress)(route.prefix)) {
1071
- throw new Error(`Invalid ILP address prefix: ${route.prefix}`);
1072
- }
1073
- }
1074
- }
1075
- if (config.settlement) {
1076
- const settlementError = (0, admin_api_1.validateSettlementConfig)(config.settlement);
1077
- if (settlementError) {
1078
- throw new Error(settlementError);
1079
- }
1080
- }
1081
- const existingPeers = this._btpClientManager.getPeerIds();
1082
- const isUpdate = existingPeers.includes(config.id);
1083
- if (!isUpdate) {
1084
- const peer = {
1085
- id: config.id,
1086
- url: config.url,
1087
- authToken: config.authToken,
1088
- connected: false,
1089
- lastSeen: new Date(),
1090
- };
1091
- await this._btpClientManager.addPeer(peer);
1092
- this._ilpMetrics.registerPeer(config.id);
1093
- this._logger.info({ event: 'peer_registered', peerId: config.id, url: config.url }, `Registered peer: ${config.id}`);
1094
- }
1095
- else {
1096
- this._logger.info({ event: 'peer_reregistered', peerId: config.id }, `Re-registering peer: ${config.id}`);
1097
- }
1098
- if (config.routes) {
1099
- for (const route of config.routes) {
1100
- this._routingTable.addRoute(route.prefix, config.id, route.priority ?? 0);
1101
- this._logger.info({ event: 'route_added', prefix: route.prefix, nextHop: config.id }, `Added route: ${route.prefix} -> ${config.id}`);
1102
- }
1103
- }
1104
- if (config.settlement) {
1105
- this._applySettlementConfig(config.id, config.settlement, config.routes, isUpdate);
1106
- }
1107
- const routes = this._routingTable.getAllRoutes();
1108
- const peerRoutes = routes.filter((r) => r.nextHop === config.id);
1109
- const connected = this._btpClientManager.isConnected(config.id);
1110
- const peerInfo = {
1111
- id: config.id,
1112
- connected,
1113
- ilpAddresses: peerRoutes.map((r) => r.prefix),
1114
- routeCount: peerRoutes.length,
1115
- };
1116
- const peerConfig = this._settlementPeers.get(config.id);
1117
- if (peerConfig) {
1118
- peerInfo.settlement = {
1119
- preference: peerConfig.settlementPreference,
1120
- evmAddress: peerConfig.evmAddress,
1121
- tokenAddress: peerConfig.tokenAddress,
1122
- chainId: peerConfig.chainId,
1123
- };
1124
- }
1125
- return peerInfo;
1126
- }
1127
- async removePeer(peerId, removeRoutes = true) {
1128
- if (!this._btpServerStarted) {
1129
- throw new config_loader_1.ConnectorNotStartedError('Connector is not started. Call start() before removePeer().');
1130
- }
1131
- const existingPeers = this._btpClientManager.getPeerIds();
1132
- if (!existingPeers.includes(peerId)) {
1133
- throw new Error(`Peer not found: ${peerId}`);
1134
- }
1135
- await this._btpClientManager.removePeer(peerId);
1136
- this._ilpMetrics.unregisterPeer(peerId);
1137
- this._logger.info({ event: 'peer_removed', peerId }, `Removed peer: ${peerId}`);
1138
- if (this._settlementPeers.delete(peerId)) {
1139
- this._logger.info({ event: 'settlement_config_removed', peerId }, `Removed settlement config for peer: ${peerId}`);
1140
- }
1141
- const removedRoutes = [];
1142
- if (removeRoutes) {
1143
- const routes = this._routingTable.getAllRoutes();
1144
- for (const route of routes) {
1145
- if (route.nextHop === peerId) {
1146
- this._routingTable.removeRoute(route.prefix);
1147
- removedRoutes.push(route.prefix);
1148
- this._logger.info({ event: 'route_removed', prefix: route.prefix }, `Removed route: ${route.prefix}`);
1149
- }
1150
- }
1151
- }
1152
- return { peerId, removedRoutes };
1153
- }
1154
- listPeers() {
1155
- const peerIds = this._btpClientManager.getPeerIds();
1156
- const peerStatus = this._btpClientManager.getPeerStatus();
1157
- const routes = this._routingTable.getAllRoutes();
1158
- return peerIds.map((peerId) => {
1159
- const peerRoutes = routes.filter((r) => r.nextHop === peerId);
1160
- const peerInfo = {
1161
- id: peerId,
1162
- connected: peerStatus.get(peerId) ?? false,
1163
- ilpAddresses: peerRoutes.map((r) => r.prefix),
1164
- routeCount: peerRoutes.length,
1165
- };
1166
- const peerConfig = this._settlementPeers.get(peerId);
1167
- if (peerConfig) {
1168
- peerInfo.settlement = {
1169
- preference: peerConfig.settlementPreference,
1170
- evmAddress: peerConfig.evmAddress,
1171
- tokenAddress: peerConfig.tokenAddress,
1172
- chainId: peerConfig.chainId,
1173
- };
1174
- }
1175
- return peerInfo;
1176
- });
1177
- }
1178
- async getBalance(peerId, tokenId = this._defaultSettlementTokenId) {
1179
- if (!this._accountManager) {
1180
- throw new Error('Account management not enabled');
1181
- }
1182
- const balance = await this._accountManager.getAccountBalance(peerId, tokenId);
1183
- return {
1184
- peerId,
1185
- balances: [
1186
- {
1187
- tokenId,
1188
- debitBalance: balance.debitBalance.toString(),
1189
- creditBalance: balance.creditBalance.toString(),
1190
- netBalance: balance.netBalance.toString(),
1191
- },
1192
- ],
1193
- };
1194
- }
1195
- listRoutes() {
1196
- const routes = this._routingTable.getAllRoutes();
1197
- return routes.map((r) => ({
1198
- prefix: r.prefix,
1199
- nextHop: r.nextHop,
1200
- priority: r.priority ?? 0,
1201
- }));
1202
- }
1203
- addRoute(route) {
1204
- if (!(0, shared_1.isValidILPAddress)(route.prefix)) {
1205
- throw new Error(`Invalid ILP address prefix: ${route.prefix}`);
1206
- }
1207
- if (!route.nextHop || typeof route.nextHop !== 'string') {
1208
- throw new Error('Missing or invalid nextHop');
1209
- }
1210
- const existingPeers = this._btpClientManager.getPeerIds();
1211
- if (!existingPeers.includes(route.nextHop)) {
1212
- this._logger.warn({ event: 'route_nextHop_unknown', prefix: route.prefix, nextHop: route.nextHop }, `Adding route with unknown nextHop peer: ${route.nextHop}`);
1213
- }
1214
- this._routingTable.addRoute(route.prefix, route.nextHop, route.priority ?? 0);
1215
- this._logger.info({ event: 'route_added', prefix: route.prefix, nextHop: route.nextHop }, `Added route: ${route.prefix} -> ${route.nextHop}`);
1216
- }
1217
- removeRoute(prefix) {
1218
- const routes = this._routingTable.getAllRoutes();
1219
- const exists = routes.some((r) => r.prefix === prefix);
1220
- if (!exists) {
1221
- throw new Error(`Route not found: ${prefix}`);
1222
- }
1223
- this._routingTable.removeRoute(prefix);
1224
- this._logger.info({ event: 'route_removed', prefix }, `Removed route: ${prefix}`);
1225
- }
1226
- async openChannel(params) {
1227
- if (!this._btpServerStarted) {
1228
- throw new config_loader_1.ConnectorNotStartedError('Connector is not started. Call start() before openChannel().');
1229
- }
1230
- if (!this._channelManager) {
1231
- throw new Error('No EVM chain provider configured -- openChannel requires a chainProviders entry with chainType: "evm"');
1232
- }
1233
- const existingPeers = this._btpClientManager.getPeerIds();
1234
- if (!existingPeers.includes(params.peerId)) {
1235
- throw new Error(`Peer '${params.peerId}' must be registered before opening channels`);
1236
- }
1237
- const tokenId = params.token ?? 'AGENT';
1238
- const peerAddress = params.peerAddress || this._settlementPeers.get(params.peerId)?.evmAddress;
1239
- if (!peerAddress) {
1240
- throw new Error('Peer EVM address must be provided in params or peer registration');
1241
- }
1242
- const existing = this._channelManager.getChannelForPeer(params.peerId, tokenId);
1243
- if (existing && existing.status !== 'closed') {
1244
- throw new Error(`Channel already exists for peer ${params.peerId} with token ${tokenId} on chain ${params.chain}`);
1245
- }
1246
- const channelId = await this._channelManager.ensureChannelExists(params.peerId, tokenId, {
1247
- initialDeposit: BigInt(params.initialDeposit ?? '0'),
1248
- settlementTimeout: params.settlementTimeout,
1249
- chain: params.chain,
1250
- peerAddress,
1251
- });
1252
- const metadata = this._channelManager.getChannelById(channelId);
1253
- const status = metadata ? (0, types_2.normalizeChannelStatus)(metadata.status, this._logger) : 'opening';
1254
- this._logger.info({ event: 'channel_opened', peerId: params.peerId, chain: params.chain, channelId }, 'Channel opened via direct API');
1255
- return { channelId, status };
1256
- }
1257
- async getChannelState(channelId) {
1258
- if (!this._btpServerStarted) {
1259
- throw new config_loader_1.ConnectorNotStartedError('Connector is not started. Call start() before getChannelState().');
1260
- }
1261
- if (!this._channelManager) {
1262
- throw new Error('No EVM chain provider configured -- openChannel requires a chainProviders entry with chainType: "evm"');
1263
- }
1264
- const metadata = this._channelManager.getChannelById(channelId);
1265
- if (!metadata) {
1266
- throw new Error(`Channel not found: ${channelId}`);
1267
- }
1268
- return {
1269
- channelId: metadata.channelId,
1270
- status: (0, types_2.normalizeChannelStatus)(metadata.status, this._logger),
1271
- chain: metadata.chain,
1272
- };
1273
- }
1274
- _applySettlementConfig(peerId, s, routes, isUpdate) {
1275
- const ilpAddress = routes && routes.length > 0 ? routes[0].prefix : '';
1276
- const settlementTokens = [];
1277
- if (s.tokenAddress) {
1278
- settlementTokens.push(s.tokenAddress);
1279
- }
1280
- else {
1281
- if (s.evmAddress)
1282
- settlementTokens.push('EVM');
1283
- }
1284
- const newConfig = {
1285
- peerId,
1286
- address: ilpAddress,
1287
- settlementPreference: s.preference,
1288
- settlementTokens,
1289
- evmAddress: s.evmAddress,
1290
- tokenAddress: s.tokenAddress,
1291
- tokenNetworkAddress: s.tokenNetworkAddress,
1292
- chainId: s.chainId,
1293
- channelId: s.channelId,
1294
- initialDeposit: s.initialDeposit,
1295
- };
1296
- if (isUpdate) {
1297
- const existingConfig = this._settlementPeers.get(peerId);
1298
- if (existingConfig) {
1299
- const mergedConfig = { ...existingConfig };
1300
- for (const [key, value] of Object.entries(newConfig)) {
1301
- if (value !== undefined) {
1302
- mergedConfig[key] = value;
1303
- }
1304
- }
1305
- this._settlementPeers.set(peerId, mergedConfig);
1306
- }
1307
- else {
1308
- this._settlementPeers.set(peerId, newConfig);
1309
- }
1310
- this._logger.info({ event: 'settlement_config_merged', peerId, preference: s.preference }, `Merged settlement config for peer: ${peerId}`);
1311
- }
1312
- else {
1313
- this._settlementPeers.set(peerId, newConfig);
1314
- this._logger.info({ event: 'settlement_config_added', peerId, preference: s.preference }, `Added settlement config for peer: ${peerId}`);
1315
- }
1316
- }
1317
- getRoutingTable() {
1318
- return this._routingTable.getAllRoutes();
1319
- }
1320
- }
1321
- exports.ConnectorNode = ConnectorNode;
1322
- //# sourceMappingURL=connector-node.js.map