@waiaas/daemon 2.11.0-rc.7 → 2.11.0
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/README.md +5 -5
- package/dist/api/middleware/address-validation.d.ts +6 -33
- package/dist/api/middleware/address-validation.d.ts.map +1 -1
- package/dist/api/middleware/address-validation.js +5 -129
- package/dist/api/middleware/address-validation.js.map +1 -1
- package/dist/api/middleware/host-guard.d.ts +1 -1
- package/dist/api/middleware/host-guard.js +2 -2
- package/dist/api/middleware/host-guard.js.map +1 -1
- package/dist/api/middleware/index.d.ts +1 -0
- package/dist/api/middleware/index.d.ts.map +1 -1
- package/dist/api/middleware/index.js +1 -0
- package/dist/api/middleware/index.js.map +1 -1
- package/dist/api/middleware/master-auth.d.ts +2 -5
- package/dist/api/middleware/master-auth.d.ts.map +1 -1
- package/dist/api/middleware/master-auth.js.map +1 -1
- package/dist/api/middleware/rate-limiter.d.ts +51 -0
- package/dist/api/middleware/rate-limiter.d.ts.map +1 -0
- package/dist/api/middleware/rate-limiter.js +146 -0
- package/dist/api/middleware/rate-limiter.js.map +1 -0
- package/dist/api/middleware/resolve-asset.d.ts +26 -0
- package/dist/api/middleware/resolve-asset.d.ts.map +1 -0
- package/dist/api/middleware/resolve-asset.js +81 -0
- package/dist/api/middleware/resolve-asset.js.map +1 -0
- package/dist/api/middleware/siwe-verify.d.ts +6 -26
- package/dist/api/middleware/siwe-verify.d.ts.map +1 -1
- package/dist/api/middleware/siwe-verify.js +5 -50
- package/dist/api/middleware/siwe-verify.js.map +1 -1
- package/dist/api/routes/actions.d.ts +1 -0
- package/dist/api/routes/actions.d.ts.map +1 -1
- package/dist/api/routes/actions.js +52 -4
- package/dist/api/routes/actions.js.map +1 -1
- package/dist/api/routes/admin-actions.d.ts +1 -0
- package/dist/api/routes/admin-actions.d.ts.map +1 -1
- package/dist/api/routes/admin-actions.js +3 -3
- package/dist/api/routes/admin-actions.js.map +1 -1
- package/dist/api/routes/admin-auth.d.ts.map +1 -1
- package/dist/api/routes/admin-auth.js +12 -7
- package/dist/api/routes/admin-auth.js.map +1 -1
- package/dist/api/routes/admin-credentials.js +2 -2
- package/dist/api/routes/admin-credentials.js.map +1 -1
- package/dist/api/routes/admin-monitoring.d.ts +10 -0
- package/dist/api/routes/admin-monitoring.d.ts.map +1 -1
- package/dist/api/routes/admin-monitoring.js +59 -14
- package/dist/api/routes/admin-monitoring.js.map +1 -1
- package/dist/api/routes/admin-notifications.d.ts.map +1 -1
- package/dist/api/routes/admin-notifications.js +2 -15
- package/dist/api/routes/admin-notifications.js.map +1 -1
- package/dist/api/routes/admin-settings.d.ts.map +1 -1
- package/dist/api/routes/admin-settings.js +90 -1
- package/dist/api/routes/admin-settings.js.map +1 -1
- package/dist/api/routes/admin-wallets.d.ts +16 -1
- package/dist/api/routes/admin-wallets.d.ts.map +1 -1
- package/dist/api/routes/admin-wallets.js +64 -75
- package/dist/api/routes/admin-wallets.js.map +1 -1
- package/dist/api/routes/admin.d.ts +1 -0
- package/dist/api/routes/admin.d.ts.map +1 -1
- package/dist/api/routes/admin.js.map +1 -1
- package/dist/api/routes/connect-info.d.ts.map +1 -1
- package/dist/api/routes/connect-info.js +2 -1
- package/dist/api/routes/connect-info.js.map +1 -1
- package/dist/api/routes/credentials.js +2 -2
- package/dist/api/routes/credentials.js.map +1 -1
- package/dist/api/routes/defi-positions.d.ts.map +1 -1
- package/dist/api/routes/defi-positions.js +10 -0
- package/dist/api/routes/defi-positions.js.map +1 -1
- package/dist/api/routes/incoming.d.ts.map +1 -1
- package/dist/api/routes/incoming.js +2 -1
- package/dist/api/routes/incoming.js.map +1 -1
- package/dist/api/routes/nfts.js +24 -4
- package/dist/api/routes/nfts.js.map +1 -1
- package/dist/api/routes/openapi-schemas.d.ts +611 -118
- package/dist/api/routes/openapi-schemas.d.ts.map +1 -1
- package/dist/api/routes/openapi-schemas.js +53 -5
- package/dist/api/routes/openapi-schemas.js.map +1 -1
- package/dist/api/routes/policies.d.ts +2 -0
- package/dist/api/routes/policies.d.ts.map +1 -1
- package/dist/api/routes/policies.js +55 -6
- package/dist/api/routes/policies.js.map +1 -1
- package/dist/api/routes/rpc-proxy.js.map +1 -1
- package/dist/api/routes/sessions.d.ts.map +1 -1
- package/dist/api/routes/sessions.js +47 -28
- package/dist/api/routes/sessions.js.map +1 -1
- package/dist/api/routes/staking.d.ts.map +1 -1
- package/dist/api/routes/staking.js +19 -76
- package/dist/api/routes/staking.js.map +1 -1
- package/dist/api/routes/tokens.d.ts.map +1 -1
- package/dist/api/routes/tokens.js +8 -1
- package/dist/api/routes/tokens.js.map +1 -1
- package/dist/api/routes/transactions.d.ts +3 -0
- package/dist/api/routes/transactions.d.ts.map +1 -1
- package/dist/api/routes/transactions.js +66 -12
- package/dist/api/routes/transactions.js.map +1 -1
- package/dist/api/routes/userop.d.ts.map +1 -1
- package/dist/api/routes/userop.js +0 -2
- package/dist/api/routes/userop.js.map +1 -1
- package/dist/api/routes/wallet-apps.d.ts.map +1 -1
- package/dist/api/routes/wallet-apps.js +20 -13
- package/dist/api/routes/wallet-apps.js.map +1 -1
- package/dist/api/routes/wallet.d.ts.map +1 -1
- package/dist/api/routes/wallet.js +12 -4
- package/dist/api/routes/wallet.js.map +1 -1
- package/dist/api/routes/wallets.d.ts.map +1 -1
- package/dist/api/routes/wallets.js +3 -0
- package/dist/api/routes/wallets.js.map +1 -1
- package/dist/api/routes/wc.d.ts.map +1 -1
- package/dist/api/routes/wc.js +13 -8
- package/dist/api/routes/wc.js.map +1 -1
- package/dist/api/routes/x402.d.ts.map +1 -1
- package/dist/api/routes/x402.js +1 -2
- package/dist/api/routes/x402.js.map +1 -1
- package/dist/api/server.d.ts +8 -4
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +47 -5
- package/dist/api/server.js.map +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +1 -1
- package/dist/constants.js.map +1 -1
- package/dist/infrastructure/action/action-provider-registry.d.ts.map +1 -1
- package/dist/infrastructure/action/action-provider-registry.js +2 -3
- package/dist/infrastructure/action/action-provider-registry.js.map +1 -1
- package/dist/infrastructure/action/builtin-metadata.d.ts +22 -0
- package/dist/infrastructure/action/builtin-metadata.d.ts.map +1 -0
- package/dist/infrastructure/action/builtin-metadata.js +29 -0
- package/dist/infrastructure/action/builtin-metadata.js.map +1 -0
- package/dist/infrastructure/adapter-pool.d.ts +2 -1
- package/dist/infrastructure/adapter-pool.d.ts.map +1 -1
- package/dist/infrastructure/adapter-pool.js.map +1 -1
- package/dist/infrastructure/auth/address-validation.d.ts +38 -0
- package/dist/infrastructure/auth/address-validation.d.ts.map +1 -0
- package/dist/infrastructure/auth/address-validation.js +134 -0
- package/dist/infrastructure/auth/address-validation.js.map +1 -0
- package/dist/infrastructure/auth/siwe-verify.d.ts +34 -0
- package/dist/infrastructure/auth/siwe-verify.d.ts.map +1 -0
- package/dist/infrastructure/auth/siwe-verify.js +58 -0
- package/dist/infrastructure/auth/siwe-verify.js.map +1 -0
- package/dist/infrastructure/auth/types.d.ts +12 -0
- package/dist/infrastructure/auth/types.d.ts.map +1 -0
- package/dist/infrastructure/auth/types.js +8 -0
- package/dist/infrastructure/auth/types.js.map +1 -0
- package/dist/infrastructure/config/loader.d.ts +1 -10
- package/dist/infrastructure/config/loader.d.ts.map +1 -1
- package/dist/infrastructure/config/loader.js +0 -2
- package/dist/infrastructure/config/loader.js.map +1 -1
- package/dist/infrastructure/database/migrate.d.ts +6 -18
- package/dist/infrastructure/database/migrate.d.ts.map +1 -1
- package/dist/infrastructure/database/migrate.js +25 -2856
- package/dist/infrastructure/database/migrate.js.map +1 -1
- package/dist/infrastructure/database/migrations/v11-v20.d.ts +17 -0
- package/dist/infrastructure/database/migrations/v11-v20.d.ts.map +1 -0
- package/dist/infrastructure/database/migrations/v11-v20.js +295 -0
- package/dist/infrastructure/database/migrations/v11-v20.js.map +1 -0
- package/dist/infrastructure/database/migrations/v2-v10.d.ts +16 -0
- package/dist/infrastructure/database/migrations/v2-v10.d.ts.map +1 -0
- package/dist/infrastructure/database/migrations/v2-v10.js +539 -0
- package/dist/infrastructure/database/migrations/v2-v10.js.map +1 -0
- package/dist/infrastructure/database/migrations/v21-v30.d.ts +17 -0
- package/dist/infrastructure/database/migrations/v21-v30.d.ts.map +1 -0
- package/dist/infrastructure/database/migrations/v21-v30.js +507 -0
- package/dist/infrastructure/database/migrations/v21-v30.js.map +1 -0
- package/dist/infrastructure/database/migrations/v31-v40.d.ts +17 -0
- package/dist/infrastructure/database/migrations/v31-v40.d.ts.map +1 -0
- package/dist/infrastructure/database/migrations/v31-v40.js +203 -0
- package/dist/infrastructure/database/migrations/v31-v40.js.map +1 -0
- package/dist/infrastructure/database/migrations/v41-v50.d.ts +17 -0
- package/dist/infrastructure/database/migrations/v41-v50.d.ts.map +1 -0
- package/dist/infrastructure/database/migrations/v41-v50.js +188 -0
- package/dist/infrastructure/database/migrations/v41-v50.js.map +1 -0
- package/dist/infrastructure/database/migrations/v51-v59.d.ts +17 -0
- package/dist/infrastructure/database/migrations/v51-v59.d.ts.map +1 -0
- package/dist/infrastructure/database/migrations/v51-v59.js +420 -0
- package/dist/infrastructure/database/migrations/v51-v59.js.map +1 -0
- package/dist/infrastructure/database/schema-ddl.d.ts +24 -0
- package/dist/infrastructure/database/schema-ddl.d.ts.map +1 -0
- package/dist/infrastructure/database/schema-ddl.js +596 -0
- package/dist/infrastructure/database/schema-ddl.js.map +1 -0
- package/dist/infrastructure/database/schema.d.ts +38 -0
- package/dist/infrastructure/database/schema.d.ts.map +1 -1
- package/dist/infrastructure/database/schema.js +2 -0
- package/dist/infrastructure/database/schema.js.map +1 -1
- package/dist/infrastructure/jwt/jwt-secret-manager.d.ts.map +1 -1
- package/dist/infrastructure/jwt/jwt-secret-manager.js +16 -3
- package/dist/infrastructure/jwt/jwt-secret-manager.js.map +1 -1
- package/dist/infrastructure/nft/alchemy-nft-indexer.d.ts.map +1 -1
- package/dist/infrastructure/nft/alchemy-nft-indexer.js +0 -1
- package/dist/infrastructure/nft/alchemy-nft-indexer.js.map +1 -1
- package/dist/infrastructure/nft/helius-nft-indexer.d.ts.map +1 -1
- package/dist/infrastructure/nft/helius-nft-indexer.js +1 -2
- package/dist/infrastructure/nft/helius-nft-indexer.js.map +1 -1
- package/dist/infrastructure/nft/nft-indexer-client.d.ts.map +1 -1
- package/dist/infrastructure/nft/nft-indexer-client.js +0 -2
- package/dist/infrastructure/nft/nft-indexer-client.js.map +1 -1
- package/dist/infrastructure/security/ssrf-guard.d.ts +33 -0
- package/dist/infrastructure/security/ssrf-guard.d.ts.map +1 -0
- package/dist/infrastructure/security/ssrf-guard.js +244 -0
- package/dist/infrastructure/security/ssrf-guard.js.map +1 -0
- package/dist/infrastructure/settings/hot-reload.d.ts +1 -1
- package/dist/infrastructure/settings/hot-reload.d.ts.map +1 -1
- package/dist/infrastructure/settings/hot-reload.js +0 -2
- package/dist/infrastructure/settings/hot-reload.js.map +1 -1
- package/dist/infrastructure/settings/index.d.ts +2 -2
- package/dist/infrastructure/settings/index.d.ts.map +1 -1
- package/dist/infrastructure/settings/index.js +1 -1
- package/dist/infrastructure/settings/index.js.map +1 -1
- package/dist/infrastructure/settings/setting-keys.d.ts +14 -0
- package/dist/infrastructure/settings/setting-keys.d.ts.map +1 -1
- package/dist/infrastructure/settings/setting-keys.js +296 -214
- package/dist/infrastructure/settings/setting-keys.js.map +1 -1
- package/dist/infrastructure/settings/settings-service.d.ts +6 -1
- package/dist/infrastructure/settings/settings-service.d.ts.map +1 -1
- package/dist/infrastructure/settings/settings-service.js +15 -5
- package/dist/infrastructure/settings/settings-service.js.map +1 -1
- package/dist/infrastructure/telegram/telegram-bot-service.d.ts.map +1 -1
- package/dist/infrastructure/telegram/telegram-bot-service.js +3 -2
- package/dist/infrastructure/telegram/telegram-bot-service.js.map +1 -1
- package/dist/infrastructure/token-registry/builtin-tokens.d.ts.map +1 -1
- package/dist/infrastructure/token-registry/builtin-tokens.js +4 -7
- package/dist/infrastructure/token-registry/builtin-tokens.js.map +1 -1
- package/dist/lifecycle/daemon-pipeline.d.ts +49 -0
- package/dist/lifecycle/daemon-pipeline.d.ts.map +1 -0
- package/dist/lifecycle/daemon-pipeline.js +281 -0
- package/dist/lifecycle/daemon-pipeline.js.map +1 -0
- package/dist/lifecycle/daemon-shutdown.d.ts +14 -0
- package/dist/lifecycle/daemon-shutdown.d.ts.map +1 -0
- package/dist/lifecycle/daemon-shutdown.js +176 -0
- package/dist/lifecycle/daemon-shutdown.js.map +1 -0
- package/dist/lifecycle/daemon-startup.d.ts +15 -0
- package/dist/lifecycle/daemon-startup.d.ts.map +1 -0
- package/dist/lifecycle/daemon-startup.js +1527 -0
- package/dist/lifecycle/daemon-startup.js.map +1 -0
- package/dist/lifecycle/daemon.d.ts +171 -114
- package/dist/lifecycle/daemon.d.ts.map +1 -1
- package/dist/lifecycle/daemon.js +22 -1904
- package/dist/lifecycle/daemon.js.map +1 -1
- package/dist/notifications/channels/discord.d.ts.map +1 -1
- package/dist/notifications/channels/discord.js +1 -0
- package/dist/notifications/channels/discord.js.map +1 -1
- package/dist/notifications/channels/slack.d.ts.map +1 -1
- package/dist/notifications/channels/slack.js +1 -0
- package/dist/notifications/channels/slack.js.map +1 -1
- package/dist/notifications/index.d.ts +0 -1
- package/dist/notifications/index.d.ts.map +1 -1
- package/dist/notifications/index.js +0 -1
- package/dist/notifications/index.js.map +1 -1
- package/dist/notifications/notification-service.d.ts.map +1 -1
- package/dist/notifications/notification-service.js +8 -6
- package/dist/notifications/notification-service.js.map +1 -1
- package/dist/pipeline/database-policy-engine.d.ts +18 -438
- package/dist/pipeline/database-policy-engine.d.ts.map +1 -1
- package/dist/pipeline/database-policy-engine.js +154 -1321
- package/dist/pipeline/database-policy-engine.js.map +1 -1
- package/dist/pipeline/dry-run.d.ts +5 -2
- package/dist/pipeline/dry-run.d.ts.map +1 -1
- package/dist/pipeline/dry-run.js +102 -8
- package/dist/pipeline/dry-run.js.map +1 -1
- package/dist/pipeline/evaluators/allowed-tokens.d.ts +28 -0
- package/dist/pipeline/evaluators/allowed-tokens.d.ts.map +1 -0
- package/dist/pipeline/evaluators/allowed-tokens.js +129 -0
- package/dist/pipeline/evaluators/allowed-tokens.js.map +1 -0
- package/dist/pipeline/evaluators/approved-spenders.d.ts +26 -0
- package/dist/pipeline/evaluators/approved-spenders.d.ts.map +1 -0
- package/dist/pipeline/evaluators/approved-spenders.js +115 -0
- package/dist/pipeline/evaluators/approved-spenders.js.map +1 -0
- package/dist/pipeline/evaluators/contract-whitelist.d.ts +28 -0
- package/dist/pipeline/evaluators/contract-whitelist.d.ts.map +1 -0
- package/dist/pipeline/evaluators/contract-whitelist.js +168 -0
- package/dist/pipeline/evaluators/contract-whitelist.js.map +1 -0
- package/dist/pipeline/evaluators/helpers.d.ts +9 -0
- package/dist/pipeline/evaluators/helpers.d.ts.map +1 -0
- package/dist/pipeline/evaluators/helpers.js +13 -0
- package/dist/pipeline/evaluators/helpers.js.map +1 -0
- package/dist/pipeline/evaluators/lending-asset-whitelist.d.ts +18 -0
- package/dist/pipeline/evaluators/lending-asset-whitelist.d.ts.map +1 -0
- package/dist/pipeline/evaluators/lending-asset-whitelist.js +44 -0
- package/dist/pipeline/evaluators/lending-asset-whitelist.js.map +1 -0
- package/dist/pipeline/evaluators/lending-ltv-limit.d.ts +24 -0
- package/dist/pipeline/evaluators/lending-ltv-limit.d.ts.map +1 -0
- package/dist/pipeline/evaluators/lending-ltv-limit.js +130 -0
- package/dist/pipeline/evaluators/lending-ltv-limit.js.map +1 -0
- package/dist/pipeline/evaluators/spending-limit.d.ts +46 -0
- package/dist/pipeline/evaluators/spending-limit.d.ts.map +1 -0
- package/dist/pipeline/evaluators/spending-limit.js +241 -0
- package/dist/pipeline/evaluators/spending-limit.js.map +1 -0
- package/dist/pipeline/evaluators/types.d.ts +71 -0
- package/dist/pipeline/evaluators/types.d.ts.map +1 -0
- package/dist/pipeline/evaluators/types.js +7 -0
- package/dist/pipeline/evaluators/types.js.map +1 -0
- package/dist/pipeline/external-action-pipeline.js.map +1 -1
- package/dist/pipeline/gas-condition-tracker.d.ts +1 -1
- package/dist/pipeline/gas-condition-tracker.js +1 -1
- package/dist/pipeline/pipeline-helpers.d.ts +146 -0
- package/dist/pipeline/pipeline-helpers.d.ts.map +1 -0
- package/dist/pipeline/pipeline-helpers.js +260 -0
- package/dist/pipeline/pipeline-helpers.js.map +1 -0
- package/dist/pipeline/pipeline.d.ts +1 -0
- package/dist/pipeline/pipeline.d.ts.map +1 -1
- package/dist/pipeline/pipeline.js +3 -2
- package/dist/pipeline/pipeline.js.map +1 -1
- package/dist/pipeline/resolve-effective-amount-usd.d.ts.map +1 -1
- package/dist/pipeline/resolve-effective-amount-usd.js +4 -10
- package/dist/pipeline/resolve-effective-amount-usd.js.map +1 -1
- package/dist/pipeline/sign-message.js +1 -1
- package/dist/pipeline/sign-message.js.map +1 -1
- package/dist/pipeline/sleep.d.ts +1 -5
- package/dist/pipeline/sleep.d.ts.map +1 -1
- package/dist/pipeline/sleep.js +2 -7
- package/dist/pipeline/sleep.js.map +1 -1
- package/dist/pipeline/stage1-validate.d.ts +8 -0
- package/dist/pipeline/stage1-validate.d.ts.map +1 -0
- package/dist/pipeline/stage1-validate.js +69 -0
- package/dist/pipeline/stage1-validate.js.map +1 -0
- package/dist/pipeline/stage2-auth.d.ts +12 -0
- package/dist/pipeline/stage2-auth.d.ts.map +1 -0
- package/dist/pipeline/stage2-auth.js +18 -0
- package/dist/pipeline/stage2-auth.js.map +1 -0
- package/dist/pipeline/stage3-policy.d.ts +26 -0
- package/dist/pipeline/stage3-policy.d.ts.map +1 -0
- package/dist/pipeline/stage3-policy.js +384 -0
- package/dist/pipeline/stage3-policy.js.map +1 -0
- package/dist/pipeline/stage4-wait.d.ts +8 -0
- package/dist/pipeline/stage4-wait.d.ts.map +1 -0
- package/dist/pipeline/stage4-wait.js +87 -0
- package/dist/pipeline/stage4-wait.js.map +1 -0
- package/dist/pipeline/stage5-execute.d.ts +120 -0
- package/dist/pipeline/stage5-execute.d.ts.map +1 -0
- package/dist/pipeline/stage5-execute.js +1070 -0
- package/dist/pipeline/stage5-execute.js.map +1 -0
- package/dist/pipeline/stage6-confirm.d.ts +11 -0
- package/dist/pipeline/stage6-confirm.d.ts.map +1 -0
- package/dist/pipeline/stage6-confirm.js +110 -0
- package/dist/pipeline/stage6-confirm.js.map +1 -0
- package/dist/pipeline/stages.d.ts +11 -245
- package/dist/pipeline/stages.d.ts.map +1 -1
- package/dist/pipeline/stages.js +11 -1896
- package/dist/pipeline/stages.js.map +1 -1
- package/dist/rpc-proxy/sync-pipeline.js +2 -2
- package/dist/rpc-proxy/sync-pipeline.js.map +1 -1
- package/dist/services/autostop/autostop-service.d.ts +4 -1
- package/dist/services/autostop/autostop-service.d.ts.map +1 -1
- package/dist/services/autostop/autostop-service.js +27 -7
- package/dist/services/autostop/autostop-service.js.map +1 -1
- package/dist/services/defi/position-tracker.d.ts +5 -0
- package/dist/services/defi/position-tracker.d.ts.map +1 -1
- package/dist/services/defi/position-tracker.js +41 -6
- package/dist/services/defi/position-tracker.js.map +1 -1
- package/dist/services/defi/position-write-queue.d.ts.map +1 -1
- package/dist/services/defi/position-write-queue.js +3 -2
- package/dist/services/defi/position-write-queue.js.map +1 -1
- package/dist/services/incoming/__tests__/integration-wiring.test.js +58 -0
- package/dist/services/incoming/__tests__/integration-wiring.test.js.map +1 -1
- package/dist/services/incoming/incoming-tx-monitor-service.d.ts.map +1 -1
- package/dist/services/incoming/incoming-tx-monitor-service.js +11 -14
- package/dist/services/incoming/incoming-tx-monitor-service.js.map +1 -1
- package/dist/services/incoming/incoming-tx-workers.d.ts +2 -2
- package/dist/services/incoming/incoming-tx-workers.d.ts.map +1 -1
- package/dist/services/incoming/incoming-tx-workers.js +1 -1
- package/dist/services/incoming/incoming-tx-workers.js.map +1 -1
- package/dist/services/incoming/safety-rules.d.ts.map +1 -1
- package/dist/services/incoming/safety-rules.js +3 -2
- package/dist/services/incoming/safety-rules.js.map +1 -1
- package/dist/services/incoming/subscription-multiplexer.d.ts +2 -6
- package/dist/services/incoming/subscription-multiplexer.d.ts.map +1 -1
- package/dist/services/incoming/subscription-multiplexer.js +1 -3
- package/dist/services/incoming/subscription-multiplexer.js.map +1 -1
- package/dist/services/monitoring/balance-monitor-service.d.ts.map +1 -1
- package/dist/services/monitoring/balance-monitor-service.js +2 -2
- package/dist/services/monitoring/balance-monitor-service.js.map +1 -1
- package/dist/services/signing-sdk/approval-channel-router.d.ts +7 -7
- package/dist/services/signing-sdk/approval-channel-router.d.ts.map +1 -1
- package/dist/services/signing-sdk/approval-channel-router.js +13 -13
- package/dist/services/signing-sdk/approval-channel-router.js.map +1 -1
- package/dist/services/signing-sdk/channels/index.d.ts +2 -2
- package/dist/services/signing-sdk/channels/index.d.ts.map +1 -1
- package/dist/services/signing-sdk/channels/index.js +1 -1
- package/dist/services/signing-sdk/channels/index.js.map +1 -1
- package/dist/services/signing-sdk/channels/push-relay-signing-channel.d.ts +59 -0
- package/dist/services/signing-sdk/channels/push-relay-signing-channel.d.ts.map +1 -0
- package/dist/services/signing-sdk/channels/push-relay-signing-channel.js +190 -0
- package/dist/services/signing-sdk/channels/push-relay-signing-channel.js.map +1 -0
- package/dist/services/signing-sdk/channels/telegram-signing-channel.d.ts +1 -1
- package/dist/services/signing-sdk/channels/telegram-signing-channel.js +1 -1
- package/dist/services/signing-sdk/channels/wallet-notification-channel.d.ts +6 -7
- package/dist/services/signing-sdk/channels/wallet-notification-channel.d.ts.map +1 -1
- package/dist/services/signing-sdk/channels/wallet-notification-channel.js +38 -55
- package/dist/services/signing-sdk/channels/wallet-notification-channel.js.map +1 -1
- package/dist/services/signing-sdk/index.d.ts +3 -3
- package/dist/services/signing-sdk/index.d.ts.map +1 -1
- package/dist/services/signing-sdk/index.js +2 -2
- package/dist/services/signing-sdk/index.js.map +1 -1
- package/dist/services/signing-sdk/preset-auto-setup.js +2 -2
- package/dist/services/signing-sdk/preset-auto-setup.js.map +1 -1
- package/dist/services/signing-sdk/sign-request-builder.d.ts +2 -2
- package/dist/services/signing-sdk/sign-request-builder.d.ts.map +1 -1
- package/dist/services/signing-sdk/sign-request-builder.js +17 -25
- package/dist/services/signing-sdk/sign-request-builder.js.map +1 -1
- package/dist/services/signing-sdk/wallet-app-service.d.ts +4 -0
- package/dist/services/signing-sdk/wallet-app-service.d.ts.map +1 -1
- package/dist/services/signing-sdk/wallet-app-service.js +12 -5
- package/dist/services/signing-sdk/wallet-app-service.js.map +1 -1
- package/dist/services/staking/aggregate-staking-balance.d.ts +24 -0
- package/dist/services/staking/aggregate-staking-balance.d.ts.map +1 -0
- package/dist/services/staking/aggregate-staking-balance.js +82 -0
- package/dist/services/staking/aggregate-staking-balance.js.map +1 -0
- package/dist/services/wc-session-service.d.ts.map +1 -1
- package/dist/services/wc-session-service.js +2 -1
- package/dist/services/wc-session-service.js.map +1 -1
- package/dist/services/wc-signing-bridge.js +2 -2
- package/dist/services/wc-signing-bridge.js.map +1 -1
- package/dist/services/x402/payment-signer.d.ts.map +1 -1
- package/dist/services/x402/payment-signer.js +2 -5
- package/dist/services/x402/payment-signer.js.map +1 -1
- package/dist/services/x402/ssrf-guard.d.ts +4 -23
- package/dist/services/x402/ssrf-guard.d.ts.map +1 -1
- package/dist/services/x402/ssrf-guard.js +3 -232
- package/dist/services/x402/ssrf-guard.js.map +1 -1
- package/dist/signing/capabilities/eip712-signer.d.ts.map +1 -1
- package/dist/signing/capabilities/eip712-signer.js +2 -0
- package/dist/signing/capabilities/eip712-signer.js.map +1 -1
- package/package.json +5 -5
- package/public/admin/assets/index-CpFF2lCo.js +3 -0
- package/public/admin/index.html +1 -1
- package/dist/notifications/channels/ntfy.d.ts +0 -13
- package/dist/notifications/channels/ntfy.d.ts.map +0 -1
- package/dist/notifications/channels/ntfy.js +0 -74
- package/dist/notifications/channels/ntfy.js.map +0 -1
- package/dist/services/signing-sdk/channels/ntfy-signing-channel.d.ts +0 -66
- package/dist/services/signing-sdk/channels/ntfy-signing-channel.d.ts.map +0 -1
- package/dist/services/signing-sdk/channels/ntfy-signing-channel.js +0 -270
- package/dist/services/signing-sdk/channels/ntfy-signing-channel.js.map +0 -1
- package/public/admin/assets/index-CQ3i4P2U.js +0 -3
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @see internal/design/73-signing-protocol-v1.md
|
|
5
5
|
*/
|
|
6
|
-
export {
|
|
7
|
-
export type {
|
|
6
|
+
export { PushRelaySigningChannel } from './push-relay-signing-channel.js';
|
|
7
|
+
export type { PushRelaySigningChannelOpts, SendRequestParams, SendRequestResult, } from './push-relay-signing-channel.js';
|
|
8
8
|
export { TelegramSigningChannel } from './telegram-signing-channel.js';
|
|
9
9
|
export type { TelegramSigningChannelOpts } from './telegram-signing-channel.js';
|
|
10
10
|
export { WalletNotificationChannel } from './wallet-notification-channel.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/services/signing-sdk/channels/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/services/signing-sdk/channels/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAC1E,YAAY,EACV,2BAA2B,EAC3B,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,iCAAiC,CAAC;AAEzC,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,YAAY,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAEhF,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAC7E,YAAY,EAAE,6BAA6B,EAAE,MAAM,kCAAkC,CAAC"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @see internal/design/73-signing-protocol-v1.md
|
|
5
5
|
*/
|
|
6
|
-
export {
|
|
6
|
+
export { PushRelaySigningChannel } from './push-relay-signing-channel.js';
|
|
7
7
|
export { TelegramSigningChannel } from './telegram-signing-channel.js';
|
|
8
8
|
export { WalletNotificationChannel } from './wallet-notification-channel.js';
|
|
9
9
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/services/signing-sdk/channels/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/services/signing-sdk/channels/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAO1E,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAGvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PushRelaySigningChannel -- sends SignRequests via Push Relay HTTP POST
|
|
3
|
+
* and receives responses via long-polling.
|
|
4
|
+
*
|
|
5
|
+
* When a PENDING_APPROVAL transaction triggers a SignRequest:
|
|
6
|
+
* 1. POSTs the request to Push Relay /v1/push with API key auth
|
|
7
|
+
* 2. Starts long-polling GET /v1/sign-response/:requestId for the response
|
|
8
|
+
* 3. Parses incoming SignResponse (base64url encoded)
|
|
9
|
+
* 4. Delegates to SignResponseHandler for approval/rejection processing
|
|
10
|
+
*
|
|
11
|
+
* Error handling (ERR-01, ERR-02):
|
|
12
|
+
* - POST failure: logs error, does NOT throw (transaction stays PENDING_APPROVAL)
|
|
13
|
+
* - Long-polling error: retries with exponential backoff (max 3 error retries)
|
|
14
|
+
* - Long-polling 204: continues polling (not counted as error)
|
|
15
|
+
*
|
|
16
|
+
* @see internal/design/73-signing-protocol-v1.md
|
|
17
|
+
* @see internal/design/74-wallet-sdk-daemon-components.md
|
|
18
|
+
*/
|
|
19
|
+
import type { SignRequestBuilder, BuildRequestParams } from '../sign-request-builder.js';
|
|
20
|
+
import type { SignResponseHandler } from '../sign-response-handler.js';
|
|
21
|
+
import type { SettingsService } from '../../../infrastructure/settings/settings-service.js';
|
|
22
|
+
export interface PushRelaySigningChannelOpts {
|
|
23
|
+
signRequestBuilder: SignRequestBuilder;
|
|
24
|
+
signResponseHandler: SignResponseHandler;
|
|
25
|
+
settingsService: SettingsService;
|
|
26
|
+
}
|
|
27
|
+
export interface SendRequestParams extends BuildRequestParams {
|
|
28
|
+
walletId: string;
|
|
29
|
+
}
|
|
30
|
+
export interface SendRequestResult {
|
|
31
|
+
requestId: string;
|
|
32
|
+
requestTopic: string;
|
|
33
|
+
responseTopic: string;
|
|
34
|
+
}
|
|
35
|
+
export declare class PushRelaySigningChannel {
|
|
36
|
+
private readonly signRequestBuilder;
|
|
37
|
+
private readonly signResponseHandler;
|
|
38
|
+
private readonly settings;
|
|
39
|
+
/** Active long-polling subscriptions: requestId -> AbortController */
|
|
40
|
+
private readonly activeSubscriptions;
|
|
41
|
+
constructor(opts: PushRelaySigningChannelOpts);
|
|
42
|
+
/**
|
|
43
|
+
* Send a SignRequest via Push Relay HTTP POST and start long-polling for response.
|
|
44
|
+
*
|
|
45
|
+
* @param params - Transaction metadata + walletId
|
|
46
|
+
* @returns requestId, requestTopic, responseTopic (empty for push relay)
|
|
47
|
+
*/
|
|
48
|
+
sendRequest(params: SendRequestParams): Promise<SendRequestResult>;
|
|
49
|
+
/**
|
|
50
|
+
* Cancel a specific long-polling subscription by requestId.
|
|
51
|
+
*/
|
|
52
|
+
cancelSubscription(requestId: string): void;
|
|
53
|
+
/**
|
|
54
|
+
* Shutdown all active long-polling subscriptions (daemon shutdown).
|
|
55
|
+
*/
|
|
56
|
+
shutdown(): void;
|
|
57
|
+
private pollForResponse;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=push-relay-signing-channel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push-relay-signing-channel.d.ts","sourceRoot":"","sources":["../../../../src/services/signing-sdk/channels/push-relay-signing-channel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAMH,OAAO,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACzF,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sDAAsD,CAAC;AAe5F,MAAM,WAAW,2BAA2B;IAC1C,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,eAAe,EAAE,eAAe,CAAC;CAClC;AAED,MAAM,WAAW,iBAAkB,SAAQ,kBAAkB;IAC3D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAMD,qBAAa,uBAAuB;IAClC,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IACxD,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAsB;IAC1D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAE3C,sEAAsE;IACtE,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAsC;gBAE9D,IAAI,EAAE,2BAA2B;IAU7C;;;;;OAKG;IACG,WAAW,CAAC,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAoExE;;OAEG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAQ3C;;OAEG;IACH,QAAQ,IAAI,IAAI;YAWF,eAAe;CAuE9B"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PushRelaySigningChannel -- sends SignRequests via Push Relay HTTP POST
|
|
3
|
+
* and receives responses via long-polling.
|
|
4
|
+
*
|
|
5
|
+
* When a PENDING_APPROVAL transaction triggers a SignRequest:
|
|
6
|
+
* 1. POSTs the request to Push Relay /v1/push with API key auth
|
|
7
|
+
* 2. Starts long-polling GET /v1/sign-response/:requestId for the response
|
|
8
|
+
* 3. Parses incoming SignResponse (base64url encoded)
|
|
9
|
+
* 4. Delegates to SignResponseHandler for approval/rejection processing
|
|
10
|
+
*
|
|
11
|
+
* Error handling (ERR-01, ERR-02):
|
|
12
|
+
* - POST failure: logs error, does NOT throw (transaction stays PENDING_APPROVAL)
|
|
13
|
+
* - Long-polling error: retries with exponential backoff (max 3 error retries)
|
|
14
|
+
* - Long-polling 204: continues polling (not counted as error)
|
|
15
|
+
*
|
|
16
|
+
* @see internal/design/73-signing-protocol-v1.md
|
|
17
|
+
* @see internal/design/74-wallet-sdk-daemon-components.md
|
|
18
|
+
*/
|
|
19
|
+
import { SignResponseSchema, } from '@waiaas/core';
|
|
20
|
+
import { SIGNING_CHANNEL_FETCH_TIMEOUT_MS } from '../../../constants.js';
|
|
21
|
+
// ---------------------------------------------------------------------------
|
|
22
|
+
// Constants
|
|
23
|
+
// ---------------------------------------------------------------------------
|
|
24
|
+
const LONG_POLL_TIMEOUT_S = 30;
|
|
25
|
+
const MAX_ERROR_RETRIES = 3;
|
|
26
|
+
const BASE_BACKOFF_MS = 1000;
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
// PushRelaySigningChannel
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
export class PushRelaySigningChannel {
|
|
31
|
+
signRequestBuilder;
|
|
32
|
+
signResponseHandler;
|
|
33
|
+
settings;
|
|
34
|
+
/** Active long-polling subscriptions: requestId -> AbortController */
|
|
35
|
+
activeSubscriptions = new Map();
|
|
36
|
+
constructor(opts) {
|
|
37
|
+
this.signRequestBuilder = opts.signRequestBuilder;
|
|
38
|
+
this.signResponseHandler = opts.signResponseHandler;
|
|
39
|
+
this.settings = opts.settingsService;
|
|
40
|
+
}
|
|
41
|
+
// -------------------------------------------------------------------------
|
|
42
|
+
// sendRequest -- POST to Push Relay + start long-polling
|
|
43
|
+
// -------------------------------------------------------------------------
|
|
44
|
+
/**
|
|
45
|
+
* Send a SignRequest via Push Relay HTTP POST and start long-polling for response.
|
|
46
|
+
*
|
|
47
|
+
* @param params - Transaction metadata + walletId
|
|
48
|
+
* @returns requestId, requestTopic, responseTopic (empty for push relay)
|
|
49
|
+
*/
|
|
50
|
+
async sendRequest(params) {
|
|
51
|
+
// 1. Build SignRequest via SignRequestBuilder
|
|
52
|
+
const { request, universalLinkUrl, requestTopic } = this.signRequestBuilder.buildRequest(params);
|
|
53
|
+
// 2. Register request with SignResponseHandler for later matching
|
|
54
|
+
this.signResponseHandler.registerRequest(request);
|
|
55
|
+
// 3. Extract pushRelayUrl from responseChannel
|
|
56
|
+
const pushRelayUrl = request.responseChannel.type === 'push_relay'
|
|
57
|
+
? request.responseChannel.pushRelayUrl
|
|
58
|
+
: '';
|
|
59
|
+
// 4. POST to Push Relay /v1/push (non-throwing per ERR-01)
|
|
60
|
+
if (pushRelayUrl) {
|
|
61
|
+
try {
|
|
62
|
+
const apiKey = this.settings.get('signing_sdk.push_relay_api_key');
|
|
63
|
+
const encoded = Buffer.from(JSON.stringify(request), 'utf-8').toString('base64url');
|
|
64
|
+
const controller = new AbortController();
|
|
65
|
+
const timeoutId = setTimeout(() => controller.abort(), SIGNING_CHANNEL_FETCH_TIMEOUT_MS);
|
|
66
|
+
try {
|
|
67
|
+
const res = await fetch(`${pushRelayUrl}/v1/push`, {
|
|
68
|
+
method: 'POST',
|
|
69
|
+
headers: {
|
|
70
|
+
'Content-Type': 'application/json',
|
|
71
|
+
'X-Api-Key': apiKey,
|
|
72
|
+
},
|
|
73
|
+
body: JSON.stringify({
|
|
74
|
+
subscriptionToken: requestTopic,
|
|
75
|
+
category: 'sign_request',
|
|
76
|
+
payload: {
|
|
77
|
+
request: encoded,
|
|
78
|
+
universalLinkUrl,
|
|
79
|
+
},
|
|
80
|
+
}),
|
|
81
|
+
signal: controller.signal,
|
|
82
|
+
});
|
|
83
|
+
if (!res.ok) {
|
|
84
|
+
throw new Error(`Push Relay POST failed: HTTP ${res.status}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
clearTimeout(timeoutId);
|
|
89
|
+
}
|
|
90
|
+
// 5. Start long-polling in background (non-blocking)
|
|
91
|
+
void this.pollForResponse(pushRelayUrl, request.requestId, request.expiresAt);
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
// ERR-01: Log error but do NOT throw -- transaction stays PENDING_APPROVAL
|
|
95
|
+
console.error('[PushRelaySigningChannel] Failed to send request:', err);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
console.error('[PushRelaySigningChannel] Failed to send request:', new Error('Missing pushRelayUrl'));
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
requestId: request.requestId,
|
|
103
|
+
requestTopic,
|
|
104
|
+
responseTopic: '',
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
// -------------------------------------------------------------------------
|
|
108
|
+
// Subscription management
|
|
109
|
+
// -------------------------------------------------------------------------
|
|
110
|
+
/**
|
|
111
|
+
* Cancel a specific long-polling subscription by requestId.
|
|
112
|
+
*/
|
|
113
|
+
cancelSubscription(requestId) {
|
|
114
|
+
const controller = this.activeSubscriptions.get(requestId);
|
|
115
|
+
if (controller) {
|
|
116
|
+
controller.abort();
|
|
117
|
+
this.activeSubscriptions.delete(requestId);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Shutdown all active long-polling subscriptions (daemon shutdown).
|
|
122
|
+
*/
|
|
123
|
+
shutdown() {
|
|
124
|
+
for (const [requestId, controller] of this.activeSubscriptions) {
|
|
125
|
+
controller.abort();
|
|
126
|
+
this.activeSubscriptions.delete(requestId);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
// -------------------------------------------------------------------------
|
|
130
|
+
// Private: long-polling for sign response
|
|
131
|
+
// -------------------------------------------------------------------------
|
|
132
|
+
async pollForResponse(pushRelayUrl, requestId, expiresAt) {
|
|
133
|
+
const abortController = new AbortController();
|
|
134
|
+
this.activeSubscriptions.set(requestId, abortController);
|
|
135
|
+
// Set expiration timer
|
|
136
|
+
const expiresAtMs = new Date(expiresAt).getTime();
|
|
137
|
+
const timeoutMs = Math.max(0, expiresAtMs - Date.now());
|
|
138
|
+
const timer = setTimeout(() => {
|
|
139
|
+
this.cancelSubscription(requestId);
|
|
140
|
+
}, timeoutMs);
|
|
141
|
+
// Unref timer so it doesn't prevent process exit
|
|
142
|
+
if (typeof timer === 'object' && 'unref' in timer) {
|
|
143
|
+
timer.unref();
|
|
144
|
+
}
|
|
145
|
+
let errorRetries = 0;
|
|
146
|
+
try {
|
|
147
|
+
while (!abortController.signal.aborted && errorRetries < MAX_ERROR_RETRIES) {
|
|
148
|
+
try {
|
|
149
|
+
const res = await fetch(`${pushRelayUrl}/v1/sign-response/${requestId}?timeout=${LONG_POLL_TIMEOUT_S}`, { signal: abortController.signal });
|
|
150
|
+
if (abortController.signal.aborted)
|
|
151
|
+
break;
|
|
152
|
+
if (res.status === 200) {
|
|
153
|
+
// Response found -- parse and handle
|
|
154
|
+
const body = (await res.json());
|
|
155
|
+
const json = Buffer.from(body.response, 'base64url').toString('utf-8');
|
|
156
|
+
const parsed = JSON.parse(json);
|
|
157
|
+
const signResponse = SignResponseSchema.parse(parsed);
|
|
158
|
+
await this.signResponseHandler.handle(signResponse);
|
|
159
|
+
// Clean up
|
|
160
|
+
this.activeSubscriptions.delete(requestId);
|
|
161
|
+
clearTimeout(timer);
|
|
162
|
+
return;
|
|
163
|
+
}
|
|
164
|
+
if (res.status === 204) {
|
|
165
|
+
// No response yet -- continue polling (NOT counted as error retry)
|
|
166
|
+
continue;
|
|
167
|
+
}
|
|
168
|
+
// Non-2xx error -- count as error retry
|
|
169
|
+
throw new Error(`Long-poll failed: HTTP ${res.status}`);
|
|
170
|
+
}
|
|
171
|
+
catch (_err) {
|
|
172
|
+
if (abortController.signal.aborted)
|
|
173
|
+
break;
|
|
174
|
+
errorRetries++;
|
|
175
|
+
if (errorRetries < MAX_ERROR_RETRIES) {
|
|
176
|
+
// Exponential backoff: 1s, 2s, 4s
|
|
177
|
+
const delay = BASE_BACKOFF_MS * Math.pow(2, errorRetries - 1);
|
|
178
|
+
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
finally {
|
|
184
|
+
// Clean up after max retries or abort
|
|
185
|
+
this.activeSubscriptions.delete(requestId);
|
|
186
|
+
clearTimeout(timer);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=push-relay-signing-channel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"push-relay-signing-channel.js","sourceRoot":"","sources":["../../../../src/services/signing-sdk/channels/push-relay-signing-channel.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* 3. Sends a Telegram message to the admin chat with an inline "Open in Wallet"
|
|
8
8
|
* button containing the universal link URL
|
|
9
9
|
*
|
|
10
|
-
* Unlike
|
|
10
|
+
* Unlike PushRelaySigningChannel, TelegramSigningChannel does NOT subscribe to a response
|
|
11
11
|
* topic. The response arrives via the /sign_response Telegram bot command, which
|
|
12
12
|
* delegates to SignResponseHandler. This is a one-way push channel.
|
|
13
13
|
*
|
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
* 3. Sends a Telegram message to the admin chat with an inline "Open in Wallet"
|
|
8
8
|
* button containing the universal link URL
|
|
9
9
|
*
|
|
10
|
-
* Unlike
|
|
10
|
+
* Unlike PushRelaySigningChannel, TelegramSigningChannel does NOT subscribe to a response
|
|
11
11
|
* topic. The response arrives via the /sign_response Telegram bot command, which
|
|
12
12
|
* delegates to SignResponseHandler. This is a one-way push channel.
|
|
13
13
|
*
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* WalletNotificationChannel -- pushes all notification events to alert-enabled
|
|
3
|
-
* wallet apps via
|
|
3
|
+
* wallet apps via Push Relay HTTP POST side channel.
|
|
4
4
|
*
|
|
5
5
|
* Notifications are published to each app with alerts_enabled=1 in the
|
|
6
|
-
* wallet_apps table. Apps with alerts_enabled=0
|
|
7
|
-
*
|
|
6
|
+
* wallet_apps table. Apps with alerts_enabled=0 or without push_relay_url
|
|
7
|
+
* are skipped. When no eligible apps exist, publishing is skipped entirely.
|
|
8
8
|
*
|
|
9
9
|
* Independent from existing NotificationService channels[]. Runs in parallel,
|
|
10
10
|
* isolated by try/catch to never affect existing channel delivery.
|
|
@@ -23,21 +23,20 @@ export declare class WalletNotificationChannel {
|
|
|
23
23
|
private readonly settings;
|
|
24
24
|
constructor(deps: WalletNotificationChannelDeps);
|
|
25
25
|
/**
|
|
26
|
-
* Send notification to alert-enabled wallet app side channels.
|
|
26
|
+
* Send notification to alert-enabled wallet app side channels via Push Relay.
|
|
27
27
|
* - Checks signing_sdk.enabled + signing_sdk.notifications_enabled
|
|
28
28
|
* - Checks notify_categories / notify_events filter
|
|
29
29
|
* - Resolves alert-enabled apps from wallet_apps table
|
|
30
|
-
* - Publishes NotificationMessage as
|
|
30
|
+
* - Publishes NotificationMessage as JSON to Push Relay POST /v1/push for each app
|
|
31
31
|
*
|
|
32
32
|
* NEVER throws -- all errors are caught and logged.
|
|
33
33
|
*/
|
|
34
34
|
notify(eventType: NotificationEventType, walletId: string, title: string, body: string, details?: Record<string, unknown>): Promise<void>;
|
|
35
35
|
/**
|
|
36
36
|
* Query wallet_apps table for apps with alerts_enabled=1.
|
|
37
|
-
* Returns app names
|
|
37
|
+
* Returns app names and push_relay_url for Push Relay routing.
|
|
38
38
|
*/
|
|
39
39
|
private resolveAlertApps;
|
|
40
40
|
private publishNotification;
|
|
41
|
-
private getNtfyServer;
|
|
42
41
|
}
|
|
43
42
|
//# sourceMappingURL=wallet-notification-channel.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet-notification-channel.d.ts","sourceRoot":"","sources":["../../../../src/services/signing-sdk/channels/wallet-notification-channel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAK1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sDAAsD,CAAC;AAC5F,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"wallet-notification-channel.d.ts","sourceRoot":"","sources":["../../../../src/services/signing-sdk/channels/wallet-notification-channel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAK1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sDAAsD,CAAC;AAC5F,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAG3C,MAAM,WAAW,6BAA6B;IAC5C,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAC1B,eAAe,EAAE,eAAe,CAAC;CAClC;AAED,qBAAa,yBAAyB;IACpC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;gBAE/B,IAAI,EAAE,6BAA6B;IAK/C;;;;;;;;OAQG;IACG,MAAM,CACV,SAAS,EAAE,qBAAqB,EAChC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,OAAO,CAAC,IAAI,CAAC;IA6DhB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;YAOV,mBAAmB;CA0BlC"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* WalletNotificationChannel -- pushes all notification events to alert-enabled
|
|
3
|
-
* wallet apps via
|
|
3
|
+
* wallet apps via Push Relay HTTP POST side channel.
|
|
4
4
|
*
|
|
5
5
|
* Notifications are published to each app with alerts_enabled=1 in the
|
|
6
|
-
* wallet_apps table. Apps with alerts_enabled=0
|
|
7
|
-
*
|
|
6
|
+
* wallet_apps table. Apps with alerts_enabled=0 or without push_relay_url
|
|
7
|
+
* are skipped. When no eligible apps exist, publishing is skipped entirely.
|
|
8
8
|
*
|
|
9
9
|
* Independent from existing NotificationService channels[]. Runs in parallel,
|
|
10
10
|
* isolated by try/catch to never affect existing channel delivery.
|
|
@@ -13,7 +13,6 @@
|
|
|
13
13
|
*/
|
|
14
14
|
import { EVENT_CATEGORY_MAP, } from '@waiaas/core';
|
|
15
15
|
import { SIGNING_CHANNEL_FETCH_TIMEOUT_MS } from '../../../constants.js';
|
|
16
|
-
const DEFAULT_NTFY_SERVER = 'https://ntfy.sh';
|
|
17
16
|
export class WalletNotificationChannel {
|
|
18
17
|
sqlite;
|
|
19
18
|
settings;
|
|
@@ -22,11 +21,11 @@ export class WalletNotificationChannel {
|
|
|
22
21
|
this.settings = deps.settingsService;
|
|
23
22
|
}
|
|
24
23
|
/**
|
|
25
|
-
* Send notification to alert-enabled wallet app side channels.
|
|
24
|
+
* Send notification to alert-enabled wallet app side channels via Push Relay.
|
|
26
25
|
* - Checks signing_sdk.enabled + signing_sdk.notifications_enabled
|
|
27
26
|
* - Checks notify_categories / notify_events filter
|
|
28
27
|
* - Resolves alert-enabled apps from wallet_apps table
|
|
29
|
-
* - Publishes NotificationMessage as
|
|
28
|
+
* - Publishes NotificationMessage as JSON to Push Relay POST /v1/push for each app
|
|
30
29
|
*
|
|
31
30
|
* NEVER throws -- all errors are caught and logged.
|
|
32
31
|
*/
|
|
@@ -38,7 +37,7 @@ export class WalletNotificationChannel {
|
|
|
38
37
|
// Gate 2: signing_sdk.notifications_enabled
|
|
39
38
|
if (this.settings.get('signing_sdk.notifications_enabled') !== 'true')
|
|
40
39
|
return;
|
|
41
|
-
// Gate 3: event filter (per-event
|
|
40
|
+
// Gate 3: event filter (per-event -> fallback to legacy category)
|
|
42
41
|
const category = EVENT_CATEGORY_MAP[eventType];
|
|
43
42
|
if (!category)
|
|
44
43
|
return;
|
|
@@ -67,76 +66,60 @@ export class WalletNotificationChannel {
|
|
|
67
66
|
}
|
|
68
67
|
}
|
|
69
68
|
// Resolve alert-enabled apps (NOTI-01/02/03)
|
|
70
|
-
const
|
|
71
|
-
if (
|
|
69
|
+
const apps = this.resolveAlertApps();
|
|
70
|
+
if (apps.length === 0)
|
|
72
71
|
return; // NOTI-03: skip when no alert-enabled apps
|
|
73
|
-
//
|
|
74
|
-
const
|
|
75
|
-
//
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
details,
|
|
90
|
-
timestamp: Math.floor(Date.now() / 1000),
|
|
91
|
-
}, priority);
|
|
92
|
-
}));
|
|
72
|
+
// Get API key for Push Relay
|
|
73
|
+
const apiKey = this.settings.get('signing_sdk.push_relay_api_key');
|
|
74
|
+
// Send to all alert-enabled apps with push_relay_url in parallel
|
|
75
|
+
await Promise.allSettled(apps
|
|
76
|
+
.filter((app) => app.pushRelayUrl) // Skip apps without push_relay_url
|
|
77
|
+
.map((app) => this.publishNotification(app.pushRelayUrl, apiKey, app.name, {
|
|
78
|
+
version: '1',
|
|
79
|
+
eventType,
|
|
80
|
+
walletId,
|
|
81
|
+
walletName: app.name,
|
|
82
|
+
category,
|
|
83
|
+
title,
|
|
84
|
+
body,
|
|
85
|
+
details,
|
|
86
|
+
timestamp: Math.floor(Date.now() / 1000),
|
|
87
|
+
})));
|
|
93
88
|
}
|
|
94
89
|
catch (err) {
|
|
95
|
-
// DAEMON-06: never throw
|
|
90
|
+
// DAEMON-06: never throw -- but log for diagnostics
|
|
96
91
|
console.error('[WalletNotificationChannel] notify error:', err);
|
|
97
92
|
}
|
|
98
93
|
}
|
|
99
94
|
/**
|
|
100
95
|
* Query wallet_apps table for apps with alerts_enabled=1.
|
|
101
|
-
* Returns app names
|
|
96
|
+
* Returns app names and push_relay_url for Push Relay routing.
|
|
102
97
|
*/
|
|
103
98
|
resolveAlertApps() {
|
|
104
|
-
const rows = this.sqlite.prepare('SELECT name, wallet_type,
|
|
105
|
-
return rows.map((r) => ({ name: r.name, walletType: r.wallet_type || r.name,
|
|
99
|
+
const rows = this.sqlite.prepare('SELECT name, wallet_type, push_relay_url FROM wallet_apps WHERE alerts_enabled = 1').all();
|
|
100
|
+
return rows.map((r) => ({ name: r.name, walletType: r.wallet_type || r.name, pushRelayUrl: r.push_relay_url }));
|
|
106
101
|
}
|
|
107
|
-
async publishNotification(
|
|
108
|
-
const json = JSON.stringify(message);
|
|
109
|
-
const encoded = Buffer.from(json, 'utf-8').toString('base64url');
|
|
110
|
-
const url = `${ntfyServer}/${topic}`;
|
|
102
|
+
async publishNotification(pushRelayUrl, apiKey, subscriptionToken, message) {
|
|
111
103
|
const controller = new AbortController();
|
|
112
104
|
const timeoutId = setTimeout(() => controller.abort(), SIGNING_CHANNEL_FETCH_TIMEOUT_MS);
|
|
113
105
|
try {
|
|
114
|
-
|
|
115
|
-
const safeTitle = /^[\x20-\x7E]*$/.test(message.title)
|
|
116
|
-
? message.title
|
|
117
|
-
: `=?UTF-8?B?${Buffer.from(message.title, 'utf-8').toString('base64')}?=`;
|
|
118
|
-
await fetch(url, {
|
|
106
|
+
await fetch(`${pushRelayUrl}/v1/push`, {
|
|
119
107
|
method: 'POST',
|
|
120
|
-
body: encoded,
|
|
121
|
-
signal: controller.signal,
|
|
122
108
|
headers: {
|
|
123
|
-
'
|
|
124
|
-
'
|
|
125
|
-
'Tags': `waiaas,${message.category}`,
|
|
109
|
+
'Content-Type': 'application/json',
|
|
110
|
+
'X-Api-Key': apiKey,
|
|
126
111
|
},
|
|
112
|
+
body: JSON.stringify({
|
|
113
|
+
subscriptionToken,
|
|
114
|
+
category: 'notification',
|
|
115
|
+
payload: message,
|
|
116
|
+
}),
|
|
117
|
+
signal: controller.signal,
|
|
127
118
|
});
|
|
128
119
|
}
|
|
129
120
|
finally {
|
|
130
121
|
clearTimeout(timeoutId);
|
|
131
122
|
}
|
|
132
123
|
}
|
|
133
|
-
getNtfyServer() {
|
|
134
|
-
try {
|
|
135
|
-
return this.settings.get('notifications.ntfy_server') || DEFAULT_NTFY_SERVER;
|
|
136
|
-
}
|
|
137
|
-
catch {
|
|
138
|
-
return DEFAULT_NTFY_SERVER;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
124
|
}
|
|
142
125
|
//# sourceMappingURL=wallet-notification-channel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet-notification-channel.js","sourceRoot":"","sources":["../../../../src/services/signing-sdk/channels/wallet-notification-channel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,EACL,kBAAkB,GAEnB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,gCAAgC,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"wallet-notification-channel.js","sourceRoot":"","sources":["../../../../src/services/signing-sdk/channels/wallet-notification-channel.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* - SignRequestBuilder: builds SignRequest from PENDING_APPROVAL transactions
|
|
6
6
|
* - SignResponseHandler: processes wallet app SignResponse (approve/reject)
|
|
7
7
|
* - WalletLinkRegistry: manages registered wallet configurations
|
|
8
|
-
* -
|
|
8
|
+
* - PushRelaySigningChannel: Push Relay HTTP-based signing channel
|
|
9
9
|
* - TelegramSigningChannel: Telegram-based one-way push signing channel
|
|
10
10
|
* - ApprovalChannelRouter: routes to correct channel based on wallet's owner_approval_method
|
|
11
11
|
* - ISigningChannel: channel interface for future channel implementations
|
|
@@ -18,8 +18,8 @@ export type { BuildRequestParams, BuildRequestResult } from './sign-request-buil
|
|
|
18
18
|
export { SignResponseHandler } from './sign-response-handler.js';
|
|
19
19
|
export type { SignResponseHandlerDeps, HandleResult } from './sign-response-handler.js';
|
|
20
20
|
export { WalletLinkRegistry } from './wallet-link-registry.js';
|
|
21
|
-
export {
|
|
22
|
-
export type {
|
|
21
|
+
export { PushRelaySigningChannel } from './channels/index.js';
|
|
22
|
+
export type { PushRelaySigningChannelOpts, SendRequestParams, SendRequestResult } from './channels/index.js';
|
|
23
23
|
export { TelegramSigningChannel } from './channels/index.js';
|
|
24
24
|
export type { TelegramSigningChannelOpts } from './channels/index.js';
|
|
25
25
|
export { WalletNotificationChannel } from './channels/index.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/signing-sdk/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAExF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,YAAY,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAExF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAG/D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/signing-sdk/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAExF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,YAAY,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAExF,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAG/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,YAAY,EAAE,2BAA2B,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7G,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,YAAY,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAGtE,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,YAAY,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AAGzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC;AACrE,YAAY,EAAE,yBAAyB,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAM3F,OAAO,KAAK,EAAE,iBAAiB,IAAI,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEnF,MAAM,WAAW,eAAe;IAC9B,WAAW,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxE,QAAQ,IAAI,IAAI,CAAC;CAClB"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* - SignRequestBuilder: builds SignRequest from PENDING_APPROVAL transactions
|
|
6
6
|
* - SignResponseHandler: processes wallet app SignResponse (approve/reject)
|
|
7
7
|
* - WalletLinkRegistry: manages registered wallet configurations
|
|
8
|
-
* -
|
|
8
|
+
* - PushRelaySigningChannel: Push Relay HTTP-based signing channel
|
|
9
9
|
* - TelegramSigningChannel: Telegram-based one-way push signing channel
|
|
10
10
|
* - ApprovalChannelRouter: routes to correct channel based on wallet's owner_approval_method
|
|
11
11
|
* - ISigningChannel: channel interface for future channel implementations
|
|
@@ -18,7 +18,7 @@ export { SignRequestBuilder } from './sign-request-builder.js';
|
|
|
18
18
|
export { SignResponseHandler } from './sign-response-handler.js';
|
|
19
19
|
export { WalletLinkRegistry } from './wallet-link-registry.js';
|
|
20
20
|
// Channels
|
|
21
|
-
export {
|
|
21
|
+
export { PushRelaySigningChannel } from './channels/index.js';
|
|
22
22
|
export { TelegramSigningChannel } from './channels/index.js';
|
|
23
23
|
// Wallet notification side channel
|
|
24
24
|
export { WalletNotificationChannel } from './channels/index.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/signing-sdk/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,gBAAgB;AAChB,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAG/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,WAAW;AACX,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/signing-sdk/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,gBAAgB;AAChB,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAG/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,WAAW;AACX,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAG9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAG7D,mCAAmC;AACnC,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAGhE,UAAU;AACV,OAAO,EAAE,qBAAqB,EAAE,MAAM,8BAA8B,CAAC"}
|
|
@@ -94,8 +94,8 @@ export class PresetAutoSetupService {
|
|
|
94
94
|
}
|
|
95
95
|
// Step 4: Set preferred_channel based on approval method
|
|
96
96
|
switch (preset.approvalMethod) {
|
|
97
|
-
case '
|
|
98
|
-
this.settingsService.set('signing_sdk.preferred_channel', '
|
|
97
|
+
case 'sdk_push':
|
|
98
|
+
this.settingsService.set('signing_sdk.preferred_channel', 'push_relay');
|
|
99
99
|
applied.push(STEP_PREFERRED_CHANNEL);
|
|
100
100
|
break;
|
|
101
101
|
case 'sdk_telegram':
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preset-auto-setup.js","sourceRoot":"","sources":["../../../src/services/signing-sdk/preset-auto-setup.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAK3C,8EAA8E;AAC9E,kCAAkC;AAClC,8EAA8E;AAE9E,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;AAC/C,MAAM,sBAAsB,GAAG,mBAAmB,CAAC;AACnD,MAAM,qBAAqB,GAAG,sBAAsB,CAAC;AACrD,MAAM,sBAAsB,GAAG,uBAAuB,CAAC;AACvD,MAAM,0BAA0B,GAAG,uBAAuB,CAAC;AAE3D,8EAA8E;AAC9E,iCAAiC;AACjC,8EAA8E;AAE9E,MAAM,aAAa,GAAG;IACpB,qBAAqB;IACrB,8BAA8B;IAC9B,+BAA+B;CACvB,CAAC;AAEX,8EAA8E;AAC9E,yBAAyB;AACzB,8EAA8E;AAE9E,MAAM,OAAO,sBAAsB;IAEd;IACA;IACA;IAHnB,YACmB,eAAgC,EAChC,kBAAsC,EACtC,gBAAmC;QAFnC,oBAAe,GAAf,eAAe,CAAiB;QAChC,uBAAkB,GAAlB,kBAAkB,CAAoB;QACtC,qBAAgB,GAAhB,gBAAgB,CAAmB;IACnD,CAAC;IAEJ;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,MAAoB;QACxB,yCAAyC;QACzC,MAAM,QAAQ,GAA2B,EAAE,CAAC;QAC5C,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;YAChC,QAAQ,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,IAAI,CAAC;YACH,6BAA6B;YAC7B,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACvE,IAAI,cAAc,KAAK,MAAM,EAAE,CAAC;gBAC9B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;gBACxD,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YACjC,CAAC;YAED,8EAA8E;YAC9E,IAAI,CAAC;gBACH,IAAI,CAAC,kBAAkB,CAAC,cAAc,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;gBAChE,OAAO,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;YACvC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,wFAAwF;gBACxF,IACE,GAAG,YAAY,WAAW;oBAC1B,GAAG,CAAC,IAAI,KAAK,gCAAgC,EAC7C,CAAC;oBACD,2BAA2B;gBAC7B,CAAC;qBAAM,CAAC;oBACN,MAAM,GAAG,CAAC;gBACZ,CAAC;YACH,CAAC;YAED,+BAA+B;YAC/B,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;YAClF,IAAI,gBAAgB,KAAK,MAAM,CAAC,eAAe,EAAE,CAAC;gBAChD,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,8BAA8B,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;gBACjF,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YACtC,CAAC;YAED,yDAAyD;YACzD,QAAQ,MAAM,CAAC,cAAc,EAAE,CAAC;gBAC9B,KAAK,UAAU;oBACb,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,+BAA+B,EAAE,
|
|
1
|
+
{"version":3,"file":"preset-auto-setup.js","sourceRoot":"","sources":["../../../src/services/signing-sdk/preset-auto-setup.ts"],"names":[],"mappings":"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"}
|