@toon-protocol/connector 1.7.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.
- package/LICENSE +21 -0
- package/README.md +421 -0
- package/dist/btp/btp-claim-types.d.ts +30 -0
- package/dist/btp/btp-claim-types.d.ts.map +1 -0
- package/dist/btp/btp-claim-types.js +103 -0
- package/dist/btp/btp-claim-types.js.map +1 -0
- package/dist/btp/btp-client-manager.d.ts +27 -0
- package/dist/btp/btp-client-manager.d.ts.map +1 -0
- package/dist/btp/btp-client-manager.js +138 -0
- package/dist/btp/btp-client-manager.js.map +1 -0
- package/dist/btp/btp-client.d.ts +55 -0
- package/dist/btp/btp-client.d.ts.map +1 -0
- package/dist/btp/btp-client.js +474 -0
- package/dist/btp/btp-client.js.map +1 -0
- package/dist/btp/btp-message-parser.d.ts +4 -0
- package/dist/btp/btp-message-parser.d.ts.map +1 -0
- package/dist/btp/btp-message-parser.js +211 -0
- package/dist/btp/btp-message-parser.js.map +1 -0
- package/dist/btp/btp-server.d.ts +30 -0
- package/dist/btp/btp-server.d.ts.map +1 -0
- package/dist/btp/btp-server.js +458 -0
- package/dist/btp/btp-server.js.map +1 -0
- package/dist/btp/btp-types.d.ts +43 -0
- package/dist/btp/btp-types.d.ts.map +1 -0
- package/dist/btp/btp-types.js +44 -0
- package/dist/btp/btp-types.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +175 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/onboarding-wizard.d.ts +7 -0
- package/dist/cli/onboarding-wizard.d.ts.map +1 -0
- package/dist/cli/onboarding-wizard.js +257 -0
- package/dist/cli/onboarding-wizard.js.map +1 -0
- package/dist/cli/types.d.ts +38 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +3 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/config/aptos-env-validator.d.ts +8 -0
- package/dist/config/aptos-env-validator.d.ts.map +1 -0
- package/dist/config/aptos-env-validator.js +25 -0
- package/dist/config/aptos-env-validator.js.map +1 -0
- package/dist/config/config-loader.d.ts +20 -0
- package/dist/config/config-loader.d.ts.map +1 -0
- package/dist/config/config-loader.js +269 -0
- package/dist/config/config-loader.js.map +1 -0
- package/dist/config/environment-validator.d.ts +4 -0
- package/dist/config/environment-validator.d.ts.map +1 -0
- package/dist/config/environment-validator.js +239 -0
- package/dist/config/environment-validator.js.map +1 -0
- package/dist/config/index.d.ts +2 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +7 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/key-manager-config.d.ts +7 -0
- package/dist/config/key-manager-config.d.ts.map +1 -0
- package/dist/config/key-manager-config.js +209 -0
- package/dist/config/key-manager-config.js.map +1 -0
- package/dist/config/topology-validator.d.ts +14 -0
- package/dist/config/topology-validator.d.ts.map +1 -0
- package/dist/config/topology-validator.js +142 -0
- package/dist/config/topology-validator.js.map +1 -0
- package/dist/config/types.d.ts +210 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +10 -0
- package/dist/config/types.js.map +1 -0
- package/dist/core/connector-node.d.ts +79 -0
- package/dist/core/connector-node.d.ts.map +1 -0
- package/dist/core/connector-node.js +1036 -0
- package/dist/core/connector-node.js.map +1 -0
- package/dist/core/local-delivery-client.d.ts +16 -0
- package/dist/core/local-delivery-client.d.ts.map +1 -0
- package/dist/core/local-delivery-client.js +176 -0
- package/dist/core/local-delivery-client.js.map +1 -0
- package/dist/core/packet-handler.d.ts +45 -0
- package/dist/core/packet-handler.d.ts.map +1 -0
- package/dist/core/packet-handler.js +606 -0
- package/dist/core/packet-handler.js.map +1 -0
- package/dist/core/payment-handler.d.ts +27 -0
- package/dist/core/payment-handler.d.ts.map +1 -0
- package/dist/core/payment-handler.js +115 -0
- package/dist/core/payment-handler.js.map +1 -0
- package/dist/discovery/index.d.ts +3 -0
- package/dist/discovery/index.d.ts.map +1 -0
- package/dist/discovery/index.js +6 -0
- package/dist/discovery/index.js.map +1 -0
- package/dist/discovery/peer-discovery-service.d.ts +29 -0
- package/dist/discovery/peer-discovery-service.d.ts.map +1 -0
- package/dist/discovery/peer-discovery-service.js +230 -0
- package/dist/discovery/peer-discovery-service.js.map +1 -0
- package/dist/discovery/types.d.ts +38 -0
- package/dist/discovery/types.d.ts.map +1 -0
- package/dist/discovery/types.js +3 -0
- package/dist/discovery/types.js.map +1 -0
- package/dist/encoding/oer-parser.d.ts +39 -0
- package/dist/encoding/oer-parser.d.ts.map +1 -0
- package/dist/encoding/oer-parser.js +154 -0
- package/dist/encoding/oer-parser.js.map +1 -0
- package/dist/explorer-ui/assets/EventDetailPanel-CnSaMk3V.js +6 -0
- package/dist/explorer-ui/assets/FilterBar-BEmAzBku.js +26 -0
- package/dist/explorer-ui/assets/chevron-right-BUT9VhYe.js +11 -0
- package/dist/explorer-ui/assets/index-BZ2INVgy.js +360 -0
- package/dist/explorer-ui/assets/index-Cemh6svI.css +1 -0
- package/dist/explorer-ui/index.html +14 -0
- package/dist/explorer-ui/vite.svg +1 -0
- package/dist/facilitator/index.d.ts +2 -0
- package/dist/facilitator/index.d.ts.map +1 -0
- package/dist/facilitator/index.js +7 -0
- package/dist/facilitator/index.js.map +1 -0
- package/dist/facilitator/spsp-client.d.ts +18 -0
- package/dist/facilitator/spsp-client.d.ts.map +1 -0
- package/dist/facilitator/spsp-client.js +95 -0
- package/dist/facilitator/spsp-client.js.map +1 -0
- package/dist/http/admin-api.d.ts +123 -0
- package/dist/http/admin-api.d.ts.map +1 -0
- package/dist/http/admin-api.js +1057 -0
- package/dist/http/admin-api.js.map +1 -0
- package/dist/http/admin-server.d.ts +41 -0
- package/dist/http/admin-server.d.ts.map +1 -0
- package/dist/http/admin-server.js +156 -0
- package/dist/http/admin-server.js.map +1 -0
- package/dist/http/health-server.d.ts +22 -0
- package/dist/http/health-server.d.ts.map +1 -0
- package/dist/http/health-server.js +192 -0
- package/dist/http/health-server.js.map +1 -0
- package/dist/http/ilp-send-handler.d.ts +19 -0
- package/dist/http/ilp-send-handler.d.ts.map +1 -0
- package/dist/http/ilp-send-handler.js +162 -0
- package/dist/http/ilp-send-handler.js.map +1 -0
- package/dist/http/types.d.ts +39 -0
- package/dist/http/types.d.ts.map +1 -0
- package/dist/http/types.js +3 -0
- package/dist/http/types.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/lib.d.ts +22 -0
- package/dist/lib.d.ts.map +1 -0
- package/dist/lib.js +41 -0
- package/dist/lib.js.map +1 -0
- package/dist/main.d.ts +4 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +79 -0
- package/dist/main.js.map +1 -0
- package/dist/routing/packet-processor.d.ts +36 -0
- package/dist/routing/packet-processor.d.ts.map +1 -0
- package/dist/routing/packet-processor.js +112 -0
- package/dist/routing/packet-processor.js.map +1 -0
- package/dist/routing/packet-worker.d.ts +10 -0
- package/dist/routing/packet-worker.d.ts.map +1 -0
- package/dist/routing/packet-worker.js +34 -0
- package/dist/routing/packet-worker.js.map +1 -0
- package/dist/routing/routing-table.d.ts +15 -0
- package/dist/routing/routing-table.d.ts.map +1 -0
- package/dist/routing/routing-table.js +63 -0
- package/dist/routing/routing-table.js.map +1 -0
- package/dist/routing/worker-pool.d.ts +43 -0
- package/dist/routing/worker-pool.d.ts.map +1 -0
- package/dist/routing/worker-pool.js +228 -0
- package/dist/routing/worker-pool.js.map +1 -0
- package/dist/security/alert-notifier.d.ts +34 -0
- package/dist/security/alert-notifier.d.ts.map +1 -0
- package/dist/security/alert-notifier.js +136 -0
- package/dist/security/alert-notifier.js.map +1 -0
- package/dist/security/audit-logger.d.ts +34 -0
- package/dist/security/audit-logger.d.ts.map +1 -0
- package/dist/security/audit-logger.js +132 -0
- package/dist/security/audit-logger.js.map +1 -0
- package/dist/security/backends/aws-kms-backend.d.ts +18 -0
- package/dist/security/backends/aws-kms-backend.d.ts.map +1 -0
- package/dist/security/backends/aws-kms-backend.js +130 -0
- package/dist/security/backends/aws-kms-backend.js.map +1 -0
- package/dist/security/backends/azure-kv-backend.d.ts +17 -0
- package/dist/security/backends/azure-kv-backend.d.ts.map +1 -0
- package/dist/security/backends/azure-kv-backend.js +121 -0
- package/dist/security/backends/azure-kv-backend.js.map +1 -0
- package/dist/security/backends/environment-backend.d.ts +15 -0
- package/dist/security/backends/environment-backend.d.ts.map +1 -0
- package/dist/security/backends/environment-backend.js +56 -0
- package/dist/security/backends/environment-backend.js.map +1 -0
- package/dist/security/backends/gcp-kms-backend.d.ts +17 -0
- package/dist/security/backends/gcp-kms-backend.d.ts.map +1 -0
- package/dist/security/backends/gcp-kms-backend.js +110 -0
- package/dist/security/backends/gcp-kms-backend.js.map +1 -0
- package/dist/security/backends/hsm-backend.d.ts +18 -0
- package/dist/security/backends/hsm-backend.d.ts.map +1 -0
- package/dist/security/backends/hsm-backend.js +187 -0
- package/dist/security/backends/hsm-backend.js.map +1 -0
- package/dist/security/fraud-detector.d.ts +79 -0
- package/dist/security/fraud-detector.d.ts.map +1 -0
- package/dist/security/fraud-detector.js +147 -0
- package/dist/security/fraud-detector.js.map +1 -0
- package/dist/security/key-manager-signer.d.ts +15 -0
- package/dist/security/key-manager-signer.d.ts.map +1 -0
- package/dist/security/key-manager-signer.js +91 -0
- package/dist/security/key-manager-signer.js.map +1 -0
- package/dist/security/key-manager.d.ts +69 -0
- package/dist/security/key-manager.d.ts.map +1 -0
- package/dist/security/key-manager.js +79 -0
- package/dist/security/key-manager.js.map +1 -0
- package/dist/security/key-rotation-manager.d.ts +27 -0
- package/dist/security/key-rotation-manager.d.ts.map +1 -0
- package/dist/security/key-rotation-manager.js +142 -0
- package/dist/security/key-rotation-manager.js.map +1 -0
- package/dist/security/rate-limit-config.d.ts +7 -0
- package/dist/security/rate-limit-config.d.ts.map +1 -0
- package/dist/security/rate-limit-config.js +57 -0
- package/dist/security/rate-limit-config.js.map +1 -0
- package/dist/security/rate-limiter.d.ts +46 -0
- package/dist/security/rate-limiter.d.ts.map +1 -0
- package/dist/security/rate-limiter.js +170 -0
- package/dist/security/rate-limiter.js.map +1 -0
- package/dist/security/reputation-tracker.d.ts +30 -0
- package/dist/security/reputation-tracker.d.ts.map +1 -0
- package/dist/security/reputation-tracker.js +111 -0
- package/dist/security/reputation-tracker.js.map +1 -0
- package/dist/security/rules/balance-manipulation-rule.d.ts +23 -0
- package/dist/security/rules/balance-manipulation-rule.d.ts.map +1 -0
- package/dist/security/rules/balance-manipulation-rule.js +70 -0
- package/dist/security/rules/balance-manipulation-rule.js.map +1 -0
- package/dist/security/rules/double-spend-detection-rule.d.ts +23 -0
- package/dist/security/rules/double-spend-detection-rule.d.ts.map +1 -0
- package/dist/security/rules/double-spend-detection-rule.js +61 -0
- package/dist/security/rules/double-spend-detection-rule.js.map +1 -0
- package/dist/security/rules/rapid-channel-closure-rule.d.ts +16 -0
- package/dist/security/rules/rapid-channel-closure-rule.d.ts.map +1 -0
- package/dist/security/rules/rapid-channel-closure-rule.js +57 -0
- package/dist/security/rules/rapid-channel-closure-rule.js.map +1 -0
- package/dist/security/rules/sudden-traffic-spike-rule.d.ts +18 -0
- package/dist/security/rules/sudden-traffic-spike-rule.d.ts.map +1 -0
- package/dist/security/rules/sudden-traffic-spike-rule.js +92 -0
- package/dist/security/rules/sudden-traffic-spike-rule.js.map +1 -0
- package/dist/security/rules/unusual-settlement-amount-rule.d.ts +12 -0
- package/dist/security/rules/unusual-settlement-amount-rule.d.ts.map +1 -0
- package/dist/security/rules/unusual-settlement-amount-rule.js +33 -0
- package/dist/security/rules/unusual-settlement-amount-rule.js.map +1 -0
- package/dist/security/token-bucket.d.ts +16 -0
- package/dist/security/token-bucket.d.ts.map +1 -0
- package/dist/security/token-bucket.js +49 -0
- package/dist/security/token-bucket.js.map +1 -0
- package/dist/security/violation-counter.d.ts +11 -0
- package/dist/security/violation-counter.d.ts.map +1 -0
- package/dist/security/violation-counter.js +61 -0
- package/dist/security/violation-counter.js.map +1 -0
- package/dist/settlement/account-id-generator.d.ts +4 -0
- package/dist/settlement/account-id-generator.d.ts.map +1 -0
- package/dist/settlement/account-id-generator.js +38 -0
- package/dist/settlement/account-id-generator.js.map +1 -0
- package/dist/settlement/account-manager.d.ts +47 -0
- package/dist/settlement/account-manager.d.ts.map +1 -0
- package/dist/settlement/account-manager.js +447 -0
- package/dist/settlement/account-manager.js.map +1 -0
- package/dist/settlement/account-metadata.d.ts +11 -0
- package/dist/settlement/account-metadata.d.ts.map +1 -0
- package/dist/settlement/account-metadata.js +40 -0
- package/dist/settlement/account-metadata.js.map +1 -0
- package/dist/settlement/aptos-channel-sdk.d.ts +66 -0
- package/dist/settlement/aptos-channel-sdk.d.ts.map +1 -0
- package/dist/settlement/aptos-channel-sdk.js +274 -0
- package/dist/settlement/aptos-channel-sdk.js.map +1 -0
- package/dist/settlement/aptos-claim-signer.d.ts +57 -0
- package/dist/settlement/aptos-claim-signer.d.ts.map +1 -0
- package/dist/settlement/aptos-claim-signer.js +200 -0
- package/dist/settlement/aptos-claim-signer.js.map +1 -0
- package/dist/settlement/aptos-client.d.ts +99 -0
- package/dist/settlement/aptos-client.d.ts.map +1 -0
- package/dist/settlement/aptos-client.js +474 -0
- package/dist/settlement/aptos-client.js.map +1 -0
- package/dist/settlement/channel-manager.d.ts +66 -0
- package/dist/settlement/channel-manager.d.ts.map +1 -0
- package/dist/settlement/channel-manager.js +214 -0
- package/dist/settlement/channel-manager.js.map +1 -0
- package/dist/settlement/claim-receiver-db-schema.d.ts +4 -0
- package/dist/settlement/claim-receiver-db-schema.d.ts.map +1 -0
- package/dist/settlement/claim-receiver-db-schema.js +25 -0
- package/dist/settlement/claim-receiver-db-schema.js.map +1 -0
- package/dist/settlement/claim-receiver.d.ts +31 -0
- package/dist/settlement/claim-receiver.d.ts.map +1 -0
- package/dist/settlement/claim-receiver.js +228 -0
- package/dist/settlement/claim-receiver.js.map +1 -0
- package/dist/settlement/claim-redemption-service.d.ts +39 -0
- package/dist/settlement/claim-redemption-service.d.ts.map +1 -0
- package/dist/settlement/claim-redemption-service.js +189 -0
- package/dist/settlement/claim-redemption-service.js.map +1 -0
- package/dist/settlement/claim-sender-db-schema.d.ts +3 -0
- package/dist/settlement/claim-sender-db-schema.d.ts.map +1 -0
- package/dist/settlement/claim-sender-db-schema.js +18 -0
- package/dist/settlement/claim-sender-db-schema.js.map +1 -0
- package/dist/settlement/claim-sender.d.ts +22 -0
- package/dist/settlement/claim-sender.d.ts.map +1 -0
- package/dist/settlement/claim-sender.js +108 -0
- package/dist/settlement/claim-sender.js.map +1 -0
- package/dist/settlement/eip712-helper.d.ts +13 -0
- package/dist/settlement/eip712-helper.d.ts.map +1 -0
- package/dist/settlement/eip712-helper.js +24 -0
- package/dist/settlement/eip712-helper.js.map +1 -0
- package/dist/settlement/in-memory-ledger-client.d.ts +40 -0
- package/dist/settlement/in-memory-ledger-client.d.ts.map +1 -0
- package/dist/settlement/in-memory-ledger-client.js +177 -0
- package/dist/settlement/in-memory-ledger-client.js.map +1 -0
- package/dist/settlement/ledger-client.d.ts +22 -0
- package/dist/settlement/ledger-client.d.ts.map +1 -0
- package/dist/settlement/ledger-client.js +3 -0
- package/dist/settlement/ledger-client.js.map +1 -0
- package/dist/settlement/metrics-collector.d.ts +29 -0
- package/dist/settlement/metrics-collector.d.ts.map +1 -0
- package/dist/settlement/metrics-collector.js +81 -0
- package/dist/settlement/metrics-collector.js.map +1 -0
- package/dist/settlement/payment-channel-sdk.d.ts +59 -0
- package/dist/settlement/payment-channel-sdk.d.ts.map +1 -0
- package/dist/settlement/payment-channel-sdk.js +677 -0
- package/dist/settlement/payment-channel-sdk.js.map +1 -0
- package/dist/settlement/per-packet-claim-service.d.ts +33 -0
- package/dist/settlement/per-packet-claim-service.d.ts.map +1 -0
- package/dist/settlement/per-packet-claim-service.js +177 -0
- package/dist/settlement/per-packet-claim-service.js.map +1 -0
- package/dist/settlement/settlement-api.d.ts +37 -0
- package/dist/settlement/settlement-api.d.ts.map +1 -0
- package/dist/settlement/settlement-api.js +172 -0
- package/dist/settlement/settlement-api.js.map +1 -0
- package/dist/settlement/settlement-coordinator.d.ts +47 -0
- package/dist/settlement/settlement-coordinator.d.ts.map +1 -0
- package/dist/settlement/settlement-coordinator.js +166 -0
- package/dist/settlement/settlement-coordinator.js.map +1 -0
- package/dist/settlement/settlement-executor.d.ts +44 -0
- package/dist/settlement/settlement-executor.d.ts.map +1 -0
- package/dist/settlement/settlement-executor.js +247 -0
- package/dist/settlement/settlement-executor.js.map +1 -0
- package/dist/settlement/settlement-monitor.d.ts +29 -0
- package/dist/settlement/settlement-monitor.d.ts.map +1 -0
- package/dist/settlement/settlement-monitor.js +172 -0
- package/dist/settlement/settlement-monitor.js.map +1 -0
- package/dist/settlement/tigerbeetle-batch-writer.d.ts +58 -0
- package/dist/settlement/tigerbeetle-batch-writer.d.ts.map +1 -0
- package/dist/settlement/tigerbeetle-batch-writer.js +162 -0
- package/dist/settlement/tigerbeetle-batch-writer.js.map +1 -0
- package/dist/settlement/tigerbeetle-client.d.ts +40 -0
- package/dist/settlement/tigerbeetle-client.d.ts.map +1 -0
- package/dist/settlement/tigerbeetle-client.js +279 -0
- package/dist/settlement/tigerbeetle-client.js.map +1 -0
- package/dist/settlement/tigerbeetle-errors.d.ts +23 -0
- package/dist/settlement/tigerbeetle-errors.d.ts.map +1 -0
- package/dist/settlement/tigerbeetle-errors.js +58 -0
- package/dist/settlement/tigerbeetle-errors.js.map +1 -0
- package/dist/settlement/types.d.ts +64 -0
- package/dist/settlement/types.d.ts.map +1 -0
- package/dist/settlement/types.js +42 -0
- package/dist/settlement/types.js.map +1 -0
- package/dist/settlement/unified-settlement-executor.d.ts +34 -0
- package/dist/settlement/unified-settlement-executor.d.ts.map +1 -0
- package/dist/settlement/unified-settlement-executor.js +145 -0
- package/dist/settlement/unified-settlement-executor.js.map +1 -0
- package/dist/settlement/xrp-channel-lifecycle.d.ts +41 -0
- package/dist/settlement/xrp-channel-lifecycle.d.ts.map +1 -0
- package/dist/settlement/xrp-channel-lifecycle.js +142 -0
- package/dist/settlement/xrp-channel-lifecycle.js.map +1 -0
- package/dist/settlement/xrp-channel-manager.d.ts +59 -0
- package/dist/settlement/xrp-channel-manager.d.ts.map +1 -0
- package/dist/settlement/xrp-channel-manager.js +160 -0
- package/dist/settlement/xrp-channel-manager.js.map +1 -0
- package/dist/settlement/xrp-channel-sdk.d.ts +30 -0
- package/dist/settlement/xrp-channel-sdk.d.ts.map +1 -0
- package/dist/settlement/xrp-channel-sdk.js +164 -0
- package/dist/settlement/xrp-channel-sdk.js.map +1 -0
- package/dist/settlement/xrp-claim-signer.d.ts +22 -0
- package/dist/settlement/xrp-claim-signer.d.ts.map +1 -0
- package/dist/settlement/xrp-claim-signer.js +122 -0
- package/dist/settlement/xrp-claim-signer.js.map +1 -0
- package/dist/settlement/xrpl-client.d.ts +104 -0
- package/dist/settlement/xrpl-client.d.ts.map +1 -0
- package/dist/settlement/xrpl-client.js +304 -0
- package/dist/settlement/xrpl-client.js.map +1 -0
- package/dist/test/testnet-config.d.ts +58 -0
- package/dist/test/testnet-config.d.ts.map +1 -0
- package/dist/test/testnet-config.js +89 -0
- package/dist/test/testnet-config.js.map +1 -0
- package/dist/test-utils/index.d.ts +3 -0
- package/dist/test-utils/index.d.ts.map +1 -0
- package/dist/test-utils/index.js +15 -0
- package/dist/test-utils/index.js.map +1 -0
- package/dist/test-utils/isolated-test-env.d.ts +31 -0
- package/dist/test-utils/isolated-test-env.d.ts.map +1 -0
- package/dist/test-utils/isolated-test-env.js +127 -0
- package/dist/test-utils/isolated-test-env.js.map +1 -0
- package/dist/test-utils/mock-factories-patch.d.ts +2 -0
- package/dist/test-utils/mock-factories-patch.d.ts.map +1 -0
- package/dist/test-utils/mock-factories-patch.js +3 -0
- package/dist/test-utils/mock-factories-patch.js.map +1 -0
- package/dist/test-utils/mock-factories.d.ts +22 -0
- package/dist/test-utils/mock-factories.d.ts.map +1 -0
- package/dist/test-utils/mock-factories.js +56 -0
- package/dist/test-utils/mock-factories.js.map +1 -0
- package/dist/utils/connection-pool.d.ts +42 -0
- package/dist/utils/connection-pool.d.ts.map +1 -0
- package/dist/utils/connection-pool.js +209 -0
- package/dist/utils/connection-pool.js.map +1 -0
- package/dist/utils/evm-rpc-connection-pool.d.ts +8 -0
- package/dist/utils/evm-rpc-connection-pool.d.ts.map +1 -0
- package/dist/utils/evm-rpc-connection-pool.js +40 -0
- package/dist/utils/evm-rpc-connection-pool.js.map +1 -0
- package/dist/utils/logger.d.ts +6 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +58 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/optional-require.d.ts +2 -0
- package/dist/utils/optional-require.d.ts.map +1 -0
- package/dist/utils/optional-require.js +54 -0
- package/dist/utils/optional-require.js.map +1 -0
- package/dist/utils/xrp-wss-connection-pool.d.ts +8 -0
- package/dist/utils/xrp-wss-connection-pool.d.ts.map +1 -0
- package/dist/utils/xrp-wss-connection-pool.js +42 -0
- package/dist/utils/xrp-wss-connection-pool.js.map +1 -0
- package/dist/wallet/audit-logger.d.ts +22 -0
- package/dist/wallet/audit-logger.d.ts.map +1 -0
- package/dist/wallet/audit-logger.js +120 -0
- package/dist/wallet/audit-logger.js.map +1 -0
- package/dist/wallet/fraud-detector-interface.d.ts +14 -0
- package/dist/wallet/fraud-detector-interface.d.ts.map +1 -0
- package/dist/wallet/fraud-detector-interface.js +3 -0
- package/dist/wallet/fraud-detector-interface.js.map +1 -0
- package/dist/wallet/key-manager.d.ts +6 -0
- package/dist/wallet/key-manager.d.ts.map +1 -0
- package/dist/wallet/key-manager.js +3 -0
- package/dist/wallet/key-manager.js.map +1 -0
- package/dist/wallet/placeholder-fraud-detector.d.ts +10 -0
- package/dist/wallet/placeholder-fraud-detector.d.ts.map +1 -0
- package/dist/wallet/placeholder-fraud-detector.js +10 -0
- package/dist/wallet/placeholder-fraud-detector.js.map +1 -0
- package/dist/wallet/rate-limiter.d.ts +26 -0
- package/dist/wallet/rate-limiter.d.ts.map +1 -0
- package/dist/wallet/rate-limiter.js +114 -0
- package/dist/wallet/rate-limiter.js.map +1 -0
- package/dist/wallet/suspicious-activity-detector.d.ts +25 -0
- package/dist/wallet/suspicious-activity-detector.d.ts.map +1 -0
- package/dist/wallet/suspicious-activity-detector.js +97 -0
- package/dist/wallet/suspicious-activity-detector.js.map +1 -0
- package/dist/wallet/treasury-wallet.d.ts +20 -0
- package/dist/wallet/treasury-wallet.d.ts.map +1 -0
- package/dist/wallet/treasury-wallet.js +151 -0
- package/dist/wallet/treasury-wallet.js.map +1 -0
- package/dist/wallet/wallet-authentication.d.ts +31 -0
- package/dist/wallet/wallet-authentication.d.ts.map +1 -0
- package/dist/wallet/wallet-authentication.js +102 -0
- package/dist/wallet/wallet-authentication.js.map +1 -0
- package/dist/wallet/wallet-db-schema.d.ts +11 -0
- package/dist/wallet/wallet-db-schema.d.ts.map +1 -0
- package/dist/wallet/wallet-db-schema.js +79 -0
- package/dist/wallet/wallet-db-schema.js.map +1 -0
- package/dist/wallet/wallet-security.d.ts +58 -0
- package/dist/wallet/wallet-security.d.ts.map +1 -0
- package/dist/wallet/wallet-security.js +148 -0
- package/dist/wallet/wallet-security.js.map +1 -0
- package/dist/wallet/wallet-seed-manager.d.ts +65 -0
- package/dist/wallet/wallet-seed-manager.d.ts.map +1 -0
- package/dist/wallet/wallet-seed-manager.js +418 -0
- package/dist/wallet/wallet-seed-manager.js.map +1 -0
- package/package.json +134 -0
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UnifiedSettlementExecutor = exports.SettlementDisabledError = void 0;
|
|
4
|
+
class SettlementDisabledError extends Error {
|
|
5
|
+
constructor(message) {
|
|
6
|
+
super(message);
|
|
7
|
+
this.name = 'SettlementDisabledError';
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
exports.SettlementDisabledError = SettlementDisabledError;
|
|
11
|
+
class UnifiedSettlementExecutor {
|
|
12
|
+
config;
|
|
13
|
+
evmChannelSDK;
|
|
14
|
+
settlementMonitor;
|
|
15
|
+
accountManager;
|
|
16
|
+
logger;
|
|
17
|
+
boundHandleSettlement;
|
|
18
|
+
_claimSender;
|
|
19
|
+
_btpClientManager;
|
|
20
|
+
_perPacketClaimService = null;
|
|
21
|
+
constructor(config, evmChannelSDK, claimSender, btpClientManager, settlementMonitor, accountManager, logger) {
|
|
22
|
+
this.config = config;
|
|
23
|
+
this.evmChannelSDK = evmChannelSDK;
|
|
24
|
+
this.settlementMonitor = settlementMonitor;
|
|
25
|
+
this.accountManager = accountManager;
|
|
26
|
+
this.logger = logger;
|
|
27
|
+
this._claimSender = claimSender;
|
|
28
|
+
this._btpClientManager = btpClientManager;
|
|
29
|
+
this.boundHandleSettlement = this.handleSettlement.bind(this);
|
|
30
|
+
}
|
|
31
|
+
start() {
|
|
32
|
+
this.logger.info('Starting UnifiedSettlementExecutor...');
|
|
33
|
+
this.settlementMonitor.on('SETTLEMENT_REQUIRED', this.boundHandleSettlement);
|
|
34
|
+
this.logger.info('UnifiedSettlementExecutor started');
|
|
35
|
+
}
|
|
36
|
+
addPeerConfig(peerConfig) {
|
|
37
|
+
this.config.peers.set(peerConfig.peerId, peerConfig);
|
|
38
|
+
this.logger.info({ peerId: peerConfig.peerId, preference: peerConfig.settlementPreference }, 'Added peer settlement config');
|
|
39
|
+
}
|
|
40
|
+
removePeerConfig(peerId) {
|
|
41
|
+
const existed = this.config.peers.delete(peerId);
|
|
42
|
+
if (existed) {
|
|
43
|
+
this.logger.info({ peerId }, 'Removed peer settlement config');
|
|
44
|
+
}
|
|
45
|
+
return existed;
|
|
46
|
+
}
|
|
47
|
+
getPeerConfig(peerId) {
|
|
48
|
+
return this.config.peers.get(peerId);
|
|
49
|
+
}
|
|
50
|
+
getAllPeerConfigs() {
|
|
51
|
+
return this.config.peers;
|
|
52
|
+
}
|
|
53
|
+
stop() {
|
|
54
|
+
this.logger.info('Stopping UnifiedSettlementExecutor...');
|
|
55
|
+
this.settlementMonitor.off('SETTLEMENT_REQUIRED', this.boundHandleSettlement);
|
|
56
|
+
this.logger.info('UnifiedSettlementExecutor stopped');
|
|
57
|
+
}
|
|
58
|
+
setPerPacketClaimService(service) {
|
|
59
|
+
this._perPacketClaimService = service;
|
|
60
|
+
this.logger.info('PerPacketClaimService set for on-chain settlement');
|
|
61
|
+
}
|
|
62
|
+
getBTPClientForPeer(peerId) {
|
|
63
|
+
const client = this._btpClientManager.getClientForPeer(peerId);
|
|
64
|
+
if (!client) {
|
|
65
|
+
const error = `No BTP connection to peer ${peerId}`;
|
|
66
|
+
this.logger.error({ peerId }, error);
|
|
67
|
+
throw new Error(error);
|
|
68
|
+
}
|
|
69
|
+
if (!this._btpClientManager.isConnected(peerId)) {
|
|
70
|
+
const error = `BTP connection to peer ${peerId} is not active`;
|
|
71
|
+
this.logger.error({ peerId }, error);
|
|
72
|
+
throw new Error(error);
|
|
73
|
+
}
|
|
74
|
+
return client;
|
|
75
|
+
}
|
|
76
|
+
async handleSettlement(event) {
|
|
77
|
+
if (!this.config.enabled) {
|
|
78
|
+
throw new SettlementDisabledError('Settlement is disabled');
|
|
79
|
+
}
|
|
80
|
+
const { peerId, balance, tokenId } = event;
|
|
81
|
+
this.logger.info({ peerId, balance, tokenId }, 'Handling settlement request...');
|
|
82
|
+
const peerConfig = this.config.peers.get(peerId);
|
|
83
|
+
if (!peerConfig) {
|
|
84
|
+
this.logger.error({ peerId }, 'Peer configuration not found');
|
|
85
|
+
throw new Error(`Peer configuration not found for peerId: ${peerId}`);
|
|
86
|
+
}
|
|
87
|
+
try {
|
|
88
|
+
const preference = peerConfig.settlementPreference === 'both' ? 'any' : peerConfig.settlementPreference;
|
|
89
|
+
const canUseEVM = preference === 'evm' || preference === 'any';
|
|
90
|
+
if (!canUseEVM) {
|
|
91
|
+
throw new Error(`No compatible settlement method for peer ${peerId} with token ${tokenId} (preference: ${preference})`);
|
|
92
|
+
}
|
|
93
|
+
await this.settleViaEVM(peerId, balance, tokenId, peerConfig);
|
|
94
|
+
await this.accountManager.recordSettlement(peerId, tokenId, BigInt(balance));
|
|
95
|
+
this.logger.info({ peerId, balance, tokenId }, 'Settlement completed successfully');
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
this.logger.error({ error, peerId, balance, tokenId }, 'Settlement failed');
|
|
99
|
+
throw error;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
async settleViaEVM(peerId, amount, tokenAddress, config) {
|
|
103
|
+
this.logger.info({ peerId, amount, tokenAddress }, 'Settling via EVM payment channel...');
|
|
104
|
+
if (!config.evmAddress) {
|
|
105
|
+
throw new Error(`Peer ${peerId} missing evmAddress for EVM settlement`);
|
|
106
|
+
}
|
|
107
|
+
const settlementTimeout = 86400;
|
|
108
|
+
const depositAmount = BigInt(amount);
|
|
109
|
+
this.logger.info({
|
|
110
|
+
peerId,
|
|
111
|
+
peerAddress: config.evmAddress,
|
|
112
|
+
depositAmount: depositAmount.toString(),
|
|
113
|
+
settlementTimeout,
|
|
114
|
+
}, 'Opening new EVM payment channel for settlement...');
|
|
115
|
+
const { channelId } = await this.evmChannelSDK.openChannel(config.evmAddress, tokenAddress, settlementTimeout, depositAmount);
|
|
116
|
+
const nonce = 1;
|
|
117
|
+
const signature = await this.evmChannelSDK.signBalanceProof(channelId, nonce, depositAmount, 0n, '0x0000000000000000000000000000000000000000000000000000000000000000');
|
|
118
|
+
const signerAddress = await this.evmChannelSDK.getSignerAddress();
|
|
119
|
+
try {
|
|
120
|
+
const btpClient = this.getBTPClientForPeer(peerId);
|
|
121
|
+
const chainId = await this.evmChannelSDK.getChainId();
|
|
122
|
+
const tokenNetworkAddress = await this.evmChannelSDK.getTokenNetworkAddress(tokenAddress);
|
|
123
|
+
const result = await this._claimSender.sendEVMClaim(peerId, btpClient, channelId, nonce, depositAmount.toString(), '0', '0x0000000000000000000000000000000000000000000000000000000000000000', signature, signerAddress, chainId, tokenNetworkAddress, tokenAddress);
|
|
124
|
+
if (!result.success) {
|
|
125
|
+
throw new Error(`Failed to send EVM claim to peer: ${result.error}`);
|
|
126
|
+
}
|
|
127
|
+
this.logger.info({
|
|
128
|
+
peerId,
|
|
129
|
+
channelId,
|
|
130
|
+
amount,
|
|
131
|
+
messageId: result.messageId,
|
|
132
|
+
}, 'EVM claim sent to peer successfully');
|
|
133
|
+
}
|
|
134
|
+
catch (error) {
|
|
135
|
+
this.logger.error({ error, peerId, channelId, amount }, 'Failed to send EVM claim');
|
|
136
|
+
throw error;
|
|
137
|
+
}
|
|
138
|
+
if (this._perPacketClaimService) {
|
|
139
|
+
this._perPacketClaimService.resetChannel(channelId);
|
|
140
|
+
}
|
|
141
|
+
this.logger.info({ peerId, channelId, amount }, 'EVM settlement completed');
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
exports.UnifiedSettlementExecutor = UnifiedSettlementExecutor;
|
|
145
|
+
//# sourceMappingURL=unified-settlement-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unified-settlement-executor.js","sourceRoot":"","sources":["../../src/settlement/unified-settlement-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { Logger } from 'pino';
|
|
2
|
+
import type { XRPChannelSDK } from './xrp-channel-sdk';
|
|
3
|
+
export interface XRPChannelLifecycleConfig {
|
|
4
|
+
enabled: boolean;
|
|
5
|
+
initialChannelAmount: string;
|
|
6
|
+
defaultSettleDelay: number;
|
|
7
|
+
idleChannelThreshold: number;
|
|
8
|
+
minBalanceThreshold: number;
|
|
9
|
+
cancelAfter?: number;
|
|
10
|
+
peerId?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface XRPChannelTrackingState {
|
|
13
|
+
channelId: string;
|
|
14
|
+
peerId: string;
|
|
15
|
+
destination: string;
|
|
16
|
+
amount: string;
|
|
17
|
+
balance: string;
|
|
18
|
+
settleDelay: number;
|
|
19
|
+
status: 'open' | 'closing' | 'closed';
|
|
20
|
+
lastActivityAt: number;
|
|
21
|
+
cancelAfter?: number;
|
|
22
|
+
}
|
|
23
|
+
export declare class XRPChannelLifecycleManager {
|
|
24
|
+
private config;
|
|
25
|
+
private xrpChannelSDK;
|
|
26
|
+
private logger;
|
|
27
|
+
private channels;
|
|
28
|
+
private idleCheckTimer;
|
|
29
|
+
constructor(config: XRPChannelLifecycleConfig, xrpChannelSDK: XRPChannelSDK, logger: Logger);
|
|
30
|
+
start(): Promise<void>;
|
|
31
|
+
stop(): void;
|
|
32
|
+
getOrCreateChannel(peerId: string, destination: string): Promise<string>;
|
|
33
|
+
updateChannelActivity(peerId: string, claimAmount: string): void;
|
|
34
|
+
needsFunding(peerId: string): boolean;
|
|
35
|
+
fundChannel(peerId: string, additionalAmount: string): Promise<void>;
|
|
36
|
+
closeChannel(peerId: string, reason: 'idle' | 'expiration' | 'manual'): Promise<void>;
|
|
37
|
+
getChannelForPeer(peerId: string): XRPChannelTrackingState | null;
|
|
38
|
+
private detectIdleChannels;
|
|
39
|
+
private detectExpiringChannels;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=xrp-channel-lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xrp-channel-lifecycle.d.ts","sourceRoot":"","sources":["../../src/settlement/xrp-channel-lifecycle.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAUvD,MAAM,WAAW,yBAAyB;IAExC,OAAO,EAAE,OAAO,CAAC;IAGjB,oBAAoB,EAAE,MAAM,CAAC;IAG7B,kBAAkB,EAAE,MAAM,CAAC;IAG3B,oBAAoB,EAAE,MAAM,CAAC;IAG7B,mBAAmB,EAAE,MAAM,CAAC;IAG5B,WAAW,CAAC,EAAE,MAAM,CAAC;IAGrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAQD,MAAM,WAAW,uBAAuB;IAEtC,SAAS,EAAE,MAAM,CAAC;IAGlB,MAAM,EAAE,MAAM,CAAC;IAGf,WAAW,EAAE,MAAM,CAAC;IAGpB,MAAM,EAAE,MAAM,CAAC;IAGf,OAAO,EAAE,MAAM,CAAC;IAGhB,WAAW,EAAE,MAAM,CAAC;IAGpB,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;IAGtC,cAAc,EAAE,MAAM,CAAC;IAGvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAWD,qBAAa,0BAA0B;IAYnC,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,aAAa;IACrB,OAAO,CAAC,MAAM;IAbhB,OAAO,CAAC,QAAQ,CAAuC;IACvD,OAAO,CAAC,cAAc,CAA+B;gBAU3C,MAAM,EAAE,yBAAyB,EACjC,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,MAAM;IAUlB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB5B,IAAI,IAAI,IAAI;IAmBN,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAqD9E,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI;IAyBhE,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAsB/B,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwCpE,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAkC3F,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,uBAAuB,GAAG,IAAI;YAUnD,kBAAkB;YA4BlB,sBAAsB;CAsBrC"}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.XRPChannelLifecycleManager = void 0;
|
|
4
|
+
class XRPChannelLifecycleManager {
|
|
5
|
+
config;
|
|
6
|
+
xrpChannelSDK;
|
|
7
|
+
logger;
|
|
8
|
+
channels;
|
|
9
|
+
idleCheckTimer = null;
|
|
10
|
+
constructor(config, xrpChannelSDK, logger) {
|
|
11
|
+
this.config = config;
|
|
12
|
+
this.xrpChannelSDK = xrpChannelSDK;
|
|
13
|
+
this.logger = logger;
|
|
14
|
+
this.channels = new Map();
|
|
15
|
+
}
|
|
16
|
+
async start() {
|
|
17
|
+
if (!this.config.enabled) {
|
|
18
|
+
this.logger.info('XRP channel lifecycle manager disabled');
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
this.idleCheckTimer = setInterval(async () => {
|
|
22
|
+
await this.detectIdleChannels();
|
|
23
|
+
await this.detectExpiringChannels();
|
|
24
|
+
}, 3600000);
|
|
25
|
+
this.logger.info('XRP channel lifecycle manager started');
|
|
26
|
+
}
|
|
27
|
+
stop() {
|
|
28
|
+
if (this.idleCheckTimer) {
|
|
29
|
+
clearInterval(this.idleCheckTimer);
|
|
30
|
+
this.idleCheckTimer = null;
|
|
31
|
+
}
|
|
32
|
+
this.logger.info('XRP channel lifecycle manager stopped');
|
|
33
|
+
}
|
|
34
|
+
async getOrCreateChannel(peerId, destination) {
|
|
35
|
+
const existingChannel = this.channels.get(peerId);
|
|
36
|
+
if (existingChannel && existingChannel.status === 'open') {
|
|
37
|
+
this.logger.debug({ peerId, channelId: existingChannel.channelId }, 'Using existing XRP channel');
|
|
38
|
+
return existingChannel.channelId;
|
|
39
|
+
}
|
|
40
|
+
this.logger.info({ peerId, destination, amount: this.config.initialChannelAmount }, 'Creating new XRP channel');
|
|
41
|
+
const channelId = await this.xrpChannelSDK.openChannel(destination, this.config.initialChannelAmount, this.config.defaultSettleDelay, peerId);
|
|
42
|
+
this.channels.set(peerId, {
|
|
43
|
+
channelId,
|
|
44
|
+
peerId,
|
|
45
|
+
destination,
|
|
46
|
+
amount: this.config.initialChannelAmount,
|
|
47
|
+
balance: '0',
|
|
48
|
+
settleDelay: this.config.defaultSettleDelay,
|
|
49
|
+
status: 'open',
|
|
50
|
+
lastActivityAt: Date.now(),
|
|
51
|
+
cancelAfter: this.config.cancelAfter
|
|
52
|
+
? Math.floor(Date.now() / 1000) + this.config.cancelAfter
|
|
53
|
+
: undefined,
|
|
54
|
+
});
|
|
55
|
+
this.logger.info({ peerId, channelId }, 'XRP channel created and tracked');
|
|
56
|
+
return channelId;
|
|
57
|
+
}
|
|
58
|
+
updateChannelActivity(peerId, claimAmount) {
|
|
59
|
+
const channel = this.channels.get(peerId);
|
|
60
|
+
if (!channel) {
|
|
61
|
+
this.logger.warn({ peerId }, 'Cannot update activity: channel not found');
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
channel.balance = claimAmount;
|
|
65
|
+
channel.lastActivityAt = Date.now();
|
|
66
|
+
this.logger.debug({ peerId, channelId: channel.channelId, claimAmount }, 'XRP channel activity updated');
|
|
67
|
+
}
|
|
68
|
+
needsFunding(peerId) {
|
|
69
|
+
const channel = this.channels.get(peerId);
|
|
70
|
+
if (!channel || channel.status !== 'open') {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
const amount = BigInt(channel.amount);
|
|
74
|
+
const balance = BigInt(channel.balance);
|
|
75
|
+
const remainingBalance = amount - balance;
|
|
76
|
+
const threshold = (amount * BigInt(Math.floor(this.config.minBalanceThreshold * 100))) / 100n;
|
|
77
|
+
return remainingBalance < threshold;
|
|
78
|
+
}
|
|
79
|
+
async fundChannel(peerId, additionalAmount) {
|
|
80
|
+
const channel = this.channels.get(peerId);
|
|
81
|
+
if (!channel) {
|
|
82
|
+
throw new Error(`Cannot fund channel: peer ${peerId} not found`);
|
|
83
|
+
}
|
|
84
|
+
if (channel.status !== 'open') {
|
|
85
|
+
throw new Error(`Cannot fund channel: channel ${channel.channelId} status is ${channel.status}`);
|
|
86
|
+
}
|
|
87
|
+
this.logger.info({ peerId, channelId: channel.channelId, additionalAmount }, 'Funding XRP channel');
|
|
88
|
+
await this.xrpChannelSDK.fundChannel(channel.channelId, additionalAmount);
|
|
89
|
+
const currentAmount = BigInt(channel.amount);
|
|
90
|
+
const newAmount = currentAmount + BigInt(additionalAmount);
|
|
91
|
+
channel.amount = newAmount.toString();
|
|
92
|
+
this.logger.info({ peerId, channelId: channel.channelId, newAmount: channel.amount }, 'XRP channel funded');
|
|
93
|
+
}
|
|
94
|
+
async closeChannel(peerId, reason) {
|
|
95
|
+
const channel = this.channels.get(peerId);
|
|
96
|
+
if (!channel) {
|
|
97
|
+
this.logger.warn({ peerId }, 'Cannot close channel: not found');
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (channel.status !== 'open') {
|
|
101
|
+
this.logger.warn({ peerId, status: channel.status }, 'Cannot close channel: not open');
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
this.logger.info({ peerId, channelId: channel.channelId, reason }, 'Closing XRP channel');
|
|
105
|
+
await this.xrpChannelSDK.closeChannel(channel.channelId, peerId);
|
|
106
|
+
channel.status = 'closing';
|
|
107
|
+
this.logger.info({ peerId, channelId: channel.channelId }, 'XRP channel closed (settling after delay)');
|
|
108
|
+
}
|
|
109
|
+
getChannelForPeer(peerId) {
|
|
110
|
+
return this.channels.get(peerId) ?? null;
|
|
111
|
+
}
|
|
112
|
+
async detectIdleChannels() {
|
|
113
|
+
const now = Date.now();
|
|
114
|
+
const idleThreshold = this.config.idleChannelThreshold * 1000;
|
|
115
|
+
for (const [peerId, channel] of this.channels.entries()) {
|
|
116
|
+
if (channel.status !== 'open') {
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
const idleTime = now - channel.lastActivityAt;
|
|
120
|
+
if (idleTime > idleThreshold) {
|
|
121
|
+
this.logger.info({ peerId, channelId: channel.channelId, idleTimeHours: idleTime / 3600000 }, 'Detected idle XRP channel, closing');
|
|
122
|
+
await this.closeChannel(peerId, 'idle');
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
async detectExpiringChannels() {
|
|
127
|
+
const now = Math.floor(Date.now() / 1000);
|
|
128
|
+
const expirationBuffer = 3600;
|
|
129
|
+
for (const [peerId, channel] of this.channels.entries()) {
|
|
130
|
+
if (channel.status !== 'open' || !channel.cancelAfter) {
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
const timeUntilExpiration = channel.cancelAfter - now;
|
|
134
|
+
if (timeUntilExpiration <= expirationBuffer) {
|
|
135
|
+
this.logger.info({ peerId, channelId: channel.channelId, expiresIn: timeUntilExpiration }, 'XRP channel expiring soon, closing');
|
|
136
|
+
await this.closeChannel(peerId, 'expiration');
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
exports.XRPChannelLifecycleManager = XRPChannelLifecycleManager;
|
|
142
|
+
//# sourceMappingURL=xrp-channel-lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xrp-channel-lifecycle.js","sourceRoot":"","sources":["../../src/settlement/xrp-channel-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { XRPLClient, XRPLClientConfig } from './xrpl-client';
|
|
2
|
+
import type { Database } from 'better-sqlite3';
|
|
3
|
+
import type { Logger } from 'pino';
|
|
4
|
+
import type { XRPWSSConnectionPool } from '../utils/xrp-wss-connection-pool';
|
|
5
|
+
export interface XRPChannelState {
|
|
6
|
+
channelId: string;
|
|
7
|
+
account: string;
|
|
8
|
+
destination: string;
|
|
9
|
+
amount: string;
|
|
10
|
+
balance: string;
|
|
11
|
+
settleDelay: number;
|
|
12
|
+
publicKey: string;
|
|
13
|
+
cancelAfter?: number;
|
|
14
|
+
expiration?: number;
|
|
15
|
+
status: 'open' | 'closing' | 'closed';
|
|
16
|
+
}
|
|
17
|
+
export interface IPaymentChannelManager {
|
|
18
|
+
createChannel(destination: string, amount: string, settleDelay: number): Promise<string>;
|
|
19
|
+
fundChannel(channelId: string, additionalAmount: string): Promise<void>;
|
|
20
|
+
getChannelState(channelId: string): Promise<XRPChannelState>;
|
|
21
|
+
getChannelsForPeer(peerAddress: string): Promise<string[]>;
|
|
22
|
+
submitClaim(channelId: string, amount: string, signature: string, publicKey: string): Promise<{
|
|
23
|
+
hash: string;
|
|
24
|
+
ledgerIndex: number;
|
|
25
|
+
result: Record<string, unknown>;
|
|
26
|
+
}>;
|
|
27
|
+
closeChannel(channelId: string): Promise<{
|
|
28
|
+
hash: string;
|
|
29
|
+
ledgerIndex: number;
|
|
30
|
+
result: Record<string, unknown>;
|
|
31
|
+
}>;
|
|
32
|
+
}
|
|
33
|
+
export declare class PaymentChannelManager implements IPaymentChannelManager {
|
|
34
|
+
private readonly xrplClient;
|
|
35
|
+
private readonly claimSigner;
|
|
36
|
+
private readonly db;
|
|
37
|
+
private readonly logger;
|
|
38
|
+
constructor(xrplClient: XRPLClient, db: Database, logger: Logger);
|
|
39
|
+
static fromConnectionPool(pool: XRPWSSConnectionPool, config: Omit<XRPLClientConfig, 'wssUrl'> & {
|
|
40
|
+
wssUrl?: string;
|
|
41
|
+
}, db: Database, logger: Logger): PaymentChannelManager;
|
|
42
|
+
createChannel(destination: string, amount: string, settleDelay: number): Promise<string>;
|
|
43
|
+
fundChannel(channelId: string, additionalAmount: string): Promise<void>;
|
|
44
|
+
getChannelState(channelId: string): Promise<XRPChannelState>;
|
|
45
|
+
getChannelsForPeer(peerAddress: string): Promise<string[]>;
|
|
46
|
+
submitClaim(channelId: string, amount: string, signature: string, publicKey: string): Promise<{
|
|
47
|
+
hash: string;
|
|
48
|
+
ledgerIndex: number;
|
|
49
|
+
result: Record<string, unknown>;
|
|
50
|
+
}>;
|
|
51
|
+
closeChannel(channelId: string): Promise<{
|
|
52
|
+
hash: string;
|
|
53
|
+
ledgerIndex: number;
|
|
54
|
+
result: Record<string, unknown>;
|
|
55
|
+
}>;
|
|
56
|
+
private updateChannelBalance;
|
|
57
|
+
private determineChannelStatus;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=xrp-channel-manager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xrp-channel-manager.d.ts","sourceRoot":"","sources":["../../src/settlement/xrp-channel-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PaymentChannelManager = void 0;
|
|
4
|
+
const xrpl_client_1 = require("./xrpl-client");
|
|
5
|
+
const xrp_claim_signer_1 = require("./xrp-claim-signer");
|
|
6
|
+
const key_manager_1 = require("../security/key-manager");
|
|
7
|
+
class PaymentChannelManager {
|
|
8
|
+
xrplClient;
|
|
9
|
+
claimSigner;
|
|
10
|
+
db;
|
|
11
|
+
logger;
|
|
12
|
+
constructor(xrplClient, db, logger) {
|
|
13
|
+
this.xrplClient = xrplClient;
|
|
14
|
+
this.db = db;
|
|
15
|
+
this.logger = logger;
|
|
16
|
+
const keyManager = new key_manager_1.KeyManager({
|
|
17
|
+
backend: 'env',
|
|
18
|
+
nodeId: 'xrp-channel-manager',
|
|
19
|
+
}, logger);
|
|
20
|
+
this.claimSigner = new xrp_claim_signer_1.ClaimSigner(db, logger, keyManager, 'xrp');
|
|
21
|
+
this.claimSigner.getPublicKey().then((publicKey) => {
|
|
22
|
+
this.logger.info({ publicKey }, 'ClaimSigner initialized for payment channel claims');
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
static fromConnectionPool(pool, config, db, logger) {
|
|
26
|
+
const poolClient = pool.getClient();
|
|
27
|
+
if (!poolClient) {
|
|
28
|
+
throw new Error('No healthy XRP WebSocket connection available in pool');
|
|
29
|
+
}
|
|
30
|
+
const wssUrl = config.wssUrl || 'wss://xrplcluster.com';
|
|
31
|
+
const xrplConfig = {
|
|
32
|
+
...config,
|
|
33
|
+
wssUrl,
|
|
34
|
+
};
|
|
35
|
+
const xrplClient = new xrpl_client_1.XRPLClient(xrplConfig, logger);
|
|
36
|
+
logger.info({ wssUrl }, 'Creating PaymentChannelManager from connection pool');
|
|
37
|
+
return new PaymentChannelManager(xrplClient, db, logger);
|
|
38
|
+
}
|
|
39
|
+
async createChannel(destination, amount, settleDelay) {
|
|
40
|
+
this.logger.info({ destination, amount, settleDelay }, 'Creating XRP payment channel...');
|
|
41
|
+
if (!destination.startsWith('r')) {
|
|
42
|
+
throw new Error('Invalid destination address format (must be r-address)');
|
|
43
|
+
}
|
|
44
|
+
if (BigInt(amount) <= BigInt(0)) {
|
|
45
|
+
throw new Error('Amount must be positive');
|
|
46
|
+
}
|
|
47
|
+
if (settleDelay < 3600) {
|
|
48
|
+
this.logger.warn({ settleDelay }, 'SettleDelay below 1 hour (3600s) not recommended for production');
|
|
49
|
+
}
|
|
50
|
+
const publicKey = await this.claimSigner.getPublicKey();
|
|
51
|
+
const tx = {
|
|
52
|
+
TransactionType: 'PaymentChannelCreate',
|
|
53
|
+
Account: this.xrplClient['wallet'].address,
|
|
54
|
+
Destination: destination,
|
|
55
|
+
Amount: amount,
|
|
56
|
+
SettleDelay: settleDelay,
|
|
57
|
+
PublicKey: publicKey,
|
|
58
|
+
};
|
|
59
|
+
const result = await this.xrplClient.submitAndWait(tx);
|
|
60
|
+
const channelId = result.hash;
|
|
61
|
+
this.logger.info({ channelId, destination, amount }, 'XRP payment channel created');
|
|
62
|
+
const channelState = await this.getChannelState(channelId);
|
|
63
|
+
this.db
|
|
64
|
+
.prepare(`
|
|
65
|
+
INSERT INTO xrp_channels (
|
|
66
|
+
channel_id, account, destination, amount, balance,
|
|
67
|
+
settle_delay, public_key, status, created_at
|
|
68
|
+
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
|
|
69
|
+
`)
|
|
70
|
+
.run(channelId, channelState.account, channelState.destination, channelState.amount, channelState.balance, channelState.settleDelay, channelState.publicKey, channelState.status, Date.now());
|
|
71
|
+
this.logger.info({ channelId }, 'Channel metadata stored in database');
|
|
72
|
+
return channelId;
|
|
73
|
+
}
|
|
74
|
+
async fundChannel(channelId, additionalAmount) {
|
|
75
|
+
this.logger.info({ channelId, additionalAmount }, 'Funding XRP payment channel...');
|
|
76
|
+
const currentState = await this.getChannelState(channelId);
|
|
77
|
+
if (currentState.status !== 'open') {
|
|
78
|
+
throw new Error(`Cannot fund channel in status: ${currentState.status} (must be open)`);
|
|
79
|
+
}
|
|
80
|
+
const tx = {
|
|
81
|
+
TransactionType: 'PaymentChannelFund',
|
|
82
|
+
Account: this.xrplClient['wallet'].address,
|
|
83
|
+
Channel: channelId,
|
|
84
|
+
Amount: additionalAmount,
|
|
85
|
+
};
|
|
86
|
+
await this.xrplClient.submitAndWait(tx);
|
|
87
|
+
const newAmount = (BigInt(currentState.amount) + BigInt(additionalAmount)).toString();
|
|
88
|
+
this.db
|
|
89
|
+
.prepare('UPDATE xrp_channels SET amount = ? WHERE channel_id = ?')
|
|
90
|
+
.run(newAmount, channelId);
|
|
91
|
+
this.logger.info({ channelId, newAmount }, 'XRP payment channel funded successfully');
|
|
92
|
+
}
|
|
93
|
+
async getChannelState(channelId) {
|
|
94
|
+
try {
|
|
95
|
+
const ledgerEntry = await this.xrplClient.getLedgerEntry(channelId);
|
|
96
|
+
const entry = ledgerEntry;
|
|
97
|
+
const channelState = {
|
|
98
|
+
channelId: channelId,
|
|
99
|
+
account: entry.Account,
|
|
100
|
+
destination: entry.Destination,
|
|
101
|
+
amount: entry.Amount,
|
|
102
|
+
balance: entry.Balance || '0',
|
|
103
|
+
settleDelay: entry.SettleDelay,
|
|
104
|
+
publicKey: entry.PublicKey,
|
|
105
|
+
cancelAfter: entry.CancelAfter,
|
|
106
|
+
expiration: entry.Expiration,
|
|
107
|
+
status: this.determineChannelStatus(entry),
|
|
108
|
+
};
|
|
109
|
+
return channelState;
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
this.logger.error({ error, channelId }, 'Failed to get channel state');
|
|
113
|
+
throw error;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
async getChannelsForPeer(peerAddress) {
|
|
117
|
+
const rows = this.db
|
|
118
|
+
.prepare('SELECT channel_id FROM xrp_channels WHERE destination = ?')
|
|
119
|
+
.all(peerAddress);
|
|
120
|
+
return rows.map((row) => row.channel_id);
|
|
121
|
+
}
|
|
122
|
+
async submitClaim(channelId, amount, signature, publicKey) {
|
|
123
|
+
this.logger.info({ channelId, amount }, 'Submitting claim via PaymentChannelManager...');
|
|
124
|
+
const result = await this.xrplClient.submitClaim(channelId, amount, signature, publicKey);
|
|
125
|
+
await this.updateChannelBalance(channelId, amount);
|
|
126
|
+
this.logger.info({ channelId, amount }, 'Claim submitted and database updated');
|
|
127
|
+
return result;
|
|
128
|
+
}
|
|
129
|
+
async closeChannel(channelId) {
|
|
130
|
+
this.logger.info({ channelId }, 'Closing channel via PaymentChannelManager...');
|
|
131
|
+
const result = await this.xrplClient.closeChannel(channelId);
|
|
132
|
+
this.db
|
|
133
|
+
.prepare('UPDATE xrp_channels SET status = ?, updated_at = ? WHERE channel_id = ?')
|
|
134
|
+
.run('closing', Date.now(), channelId);
|
|
135
|
+
this.logger.info({ channelId }, 'Channel closure initiated and database updated');
|
|
136
|
+
return result;
|
|
137
|
+
}
|
|
138
|
+
async updateChannelBalance(channelId, claimedAmount) {
|
|
139
|
+
this.db
|
|
140
|
+
.prepare('UPDATE xrp_channels SET balance = ?, updated_at = ? WHERE channel_id = ?')
|
|
141
|
+
.run(claimedAmount, Date.now(), channelId);
|
|
142
|
+
this.logger.info({ channelId, balance: claimedAmount }, 'Channel balance updated in database');
|
|
143
|
+
}
|
|
144
|
+
determineChannelStatus(ledgerEntry) {
|
|
145
|
+
if (ledgerEntry.Expiration) {
|
|
146
|
+
const now = Math.floor(Date.now() / 1000);
|
|
147
|
+
const rippleEpoch = 946684800;
|
|
148
|
+
const expirationUnix = ledgerEntry.Expiration + rippleEpoch;
|
|
149
|
+
if (now < expirationUnix + ledgerEntry.SettleDelay) {
|
|
150
|
+
return 'closing';
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
return 'closed';
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return 'open';
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
exports.PaymentChannelManager = PaymentChannelManager;
|
|
160
|
+
//# sourceMappingURL=xrp-channel-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xrp-channel-manager.js","sourceRoot":"","sources":["../../src/settlement/xrp-channel-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Logger } from 'pino';
|
|
2
|
+
import type { XRPLClient } from './xrpl-client';
|
|
3
|
+
import type { ClaimSigner } from './xrp-claim-signer';
|
|
4
|
+
import type { PaymentChannelManager, XRPChannelState } from './xrp-channel-manager';
|
|
5
|
+
import type { XRPClaim } from './types';
|
|
6
|
+
import type { TelemetryEmitter } from '../telemetry/telemetry-emitter';
|
|
7
|
+
export declare class XRPChannelSDK {
|
|
8
|
+
private readonly xrplClient;
|
|
9
|
+
private readonly channelManager;
|
|
10
|
+
private readonly claimSigner;
|
|
11
|
+
private readonly logger;
|
|
12
|
+
private readonly telemetryEmitter?;
|
|
13
|
+
private channelStateCache;
|
|
14
|
+
private refreshIntervalId?;
|
|
15
|
+
constructor(xrplClient: XRPLClient, channelManager: PaymentChannelManager, claimSigner: ClaimSigner, logger: Logger, telemetryEmitter?: TelemetryEmitter | undefined);
|
|
16
|
+
openChannel(destination: string, amount: string, settleDelay: number, peerId?: string): Promise<string>;
|
|
17
|
+
fundChannel(channelId: string, additionalAmount: string): Promise<void>;
|
|
18
|
+
signClaim(channelId: string, amount: string): Promise<XRPClaim>;
|
|
19
|
+
verifyClaim(claim: XRPClaim): Promise<boolean>;
|
|
20
|
+
submitClaim(claim: XRPClaim, peerId?: string): Promise<void>;
|
|
21
|
+
closeChannel(channelId: string, peerId?: string): Promise<void>;
|
|
22
|
+
getChannelState(channelId: string): Promise<XRPChannelState>;
|
|
23
|
+
getMyChannels(): Promise<string[]>;
|
|
24
|
+
startAutoRefresh(): void;
|
|
25
|
+
stopAutoRefresh(): void;
|
|
26
|
+
private refreshChannelState;
|
|
27
|
+
private refreshAllChannels;
|
|
28
|
+
private parseChannelState;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=xrp-channel-sdk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"xrp-channel-sdk.d.ts","sourceRoot":"","sources":["../../src/settlement/xrp-channel-sdk.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AACnC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACpF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AA0BvE,qBAAa,aAAa;IActB,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC;IAjBpC,OAAO,CAAC,iBAAiB,CAA+B;IACxD,OAAO,CAAC,iBAAiB,CAAC,CAAiB;gBAYxB,UAAU,EAAE,UAAU,EACtB,cAAc,EAAE,qBAAqB,EACrC,WAAW,EAAE,WAAW,EACxB,MAAM,EAAE,MAAM,EACd,gBAAgB,CAAC,EAAE,gBAAgB,YAAA;IAyBhD,WAAW,CACf,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,MAAM,CAAC;IAoCZ,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkCvE,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC;IA+B/D,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IAsB9C,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAwD5D,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqC/D,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAoC5D,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAyBxC,gBAAgB,IAAI,IAAI;IA2BxB,eAAe,IAAI,IAAI;YAeT,mBAAmB;YAcnB,kBAAkB;IAehC,OAAO,CAAC,iBAAiB;CAc1B"}
|