@waiaas/daemon 2.11.0-rc.8 → 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/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/credentials.js +2 -2
- package/dist/api/routes/credentials.js.map +1 -1
- package/dist/api/routes/defi-positions.js.map +1 -1
- package/dist/api/routes/nfts.js.map +1 -1
- package/dist/api/routes/openapi-schemas.d.ts +412 -12
- package/dist/api/routes/openapi-schemas.d.ts.map +1 -1
- package/dist/api/routes/openapi-schemas.js +38 -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 +4 -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.map +1 -1
- package/dist/api/routes/transactions.d.ts +1 -0
- package/dist/api/routes/transactions.d.ts.map +1 -1
- package/dist/api/routes/transactions.js +8 -2
- 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.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 +46 -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
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* evaluators/approved-spenders.ts - APPROVED_SPENDERS, APPROVE_AMOUNT_LIMIT,
|
|
3
|
+
* APPROVE_TIER_OVERRIDE evaluation.
|
|
4
|
+
*
|
|
5
|
+
* Extracted from DatabasePolicyEngine private methods.
|
|
6
|
+
*/
|
|
7
|
+
import type { PolicyEvaluation, PolicyRow, TransactionParam, ParseRulesContext, SettingsContext } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Evaluate APPROVED_SPENDERS policy.
|
|
10
|
+
*
|
|
11
|
+
* Returns PolicyEvaluation if denied, null if allowed (or not applicable).
|
|
12
|
+
*/
|
|
13
|
+
export declare function evaluateApprovedSpenders(ctx: ParseRulesContext & SettingsContext, resolved: PolicyRow[], transaction: TransactionParam): PolicyEvaluation | null;
|
|
14
|
+
/**
|
|
15
|
+
* Evaluate APPROVE_AMOUNT_LIMIT policy.
|
|
16
|
+
*
|
|
17
|
+
* Returns PolicyEvaluation if denied, null if allowed (or not applicable).
|
|
18
|
+
*/
|
|
19
|
+
export declare function evaluateApproveAmountLimit(ctx: ParseRulesContext, resolved: PolicyRow[], transaction: TransactionParam): PolicyEvaluation | null;
|
|
20
|
+
/**
|
|
21
|
+
* Evaluate APPROVE_TIER_OVERRIDE policy.
|
|
22
|
+
*
|
|
23
|
+
* Returns PolicyEvaluation if override policy exists, null otherwise.
|
|
24
|
+
*/
|
|
25
|
+
export declare function evaluateApproveTierOverride(ctx: ParseRulesContext, resolved: PolicyRow[], transaction: TransactionParam): PolicyEvaluation | null;
|
|
26
|
+
//# sourceMappingURL=approved-spenders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approved-spenders.d.ts","sourceRoot":"","sources":["../../../src/pipeline/evaluators/approved-spenders.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAE,gBAAgB,EAAc,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAKhI;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,iBAAiB,GAAG,eAAe,EACxC,QAAQ,EAAE,SAAS,EAAE,EACrB,WAAW,EAAE,gBAAgB,GAC5B,gBAAgB,GAAG,IAAI,CA4CzB;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,SAAS,EAAE,EACrB,WAAW,EAAE,gBAAgB,GAC5B,gBAAgB,GAAG,IAAI,CA6CzB;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,SAAS,EAAE,EACrB,WAAW,EAAE,gBAAgB,GAC5B,gBAAgB,GAAG,IAAI,CAczB"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* evaluators/approved-spenders.ts - APPROVED_SPENDERS, APPROVE_AMOUNT_LIMIT,
|
|
3
|
+
* APPROVE_TIER_OVERRIDE evaluation.
|
|
4
|
+
*
|
|
5
|
+
* Extracted from DatabasePolicyEngine private methods.
|
|
6
|
+
*/
|
|
7
|
+
import { ApprovedSpendersRulesSchema, ApproveAmountLimitRulesSchema, ApproveTierOverrideRulesSchema, } from '@waiaas/core';
|
|
8
|
+
/** Threshold for detecting "unlimited" approve amounts. */
|
|
9
|
+
const UNLIMITED_THRESHOLD = (2n ** 256n - 1n) / 2n;
|
|
10
|
+
/**
|
|
11
|
+
* Evaluate APPROVED_SPENDERS policy.
|
|
12
|
+
*
|
|
13
|
+
* Returns PolicyEvaluation if denied, null if allowed (or not applicable).
|
|
14
|
+
*/
|
|
15
|
+
export function evaluateApprovedSpenders(ctx, resolved, transaction) {
|
|
16
|
+
// Only evaluate for APPROVE transactions
|
|
17
|
+
if (transaction.type !== 'APPROVE')
|
|
18
|
+
return null;
|
|
19
|
+
const approvedSpendersPolicy = resolved.find((p) => p.type === 'APPROVED_SPENDERS');
|
|
20
|
+
// No APPROVED_SPENDERS policy -> check toggle, then deny (default deny)
|
|
21
|
+
if (!approvedSpendersPolicy) {
|
|
22
|
+
if (ctx.settingsService?.get('policy.default_deny_spenders') === 'false') {
|
|
23
|
+
return null; // default-allow mode: skip approved spenders check
|
|
24
|
+
}
|
|
25
|
+
return {
|
|
26
|
+
allowed: false,
|
|
27
|
+
tier: 'INSTANT',
|
|
28
|
+
reason: 'Token approvals disabled: no APPROVED_SPENDERS policy configured',
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
// Parse rules.spenders array
|
|
32
|
+
const rules = ctx.parseRules(approvedSpendersPolicy.rules, ApprovedSpendersRulesSchema, 'APPROVED_SPENDERS');
|
|
33
|
+
const spenderAddress = transaction.spenderAddress;
|
|
34
|
+
if (!spenderAddress) {
|
|
35
|
+
return {
|
|
36
|
+
allowed: false,
|
|
37
|
+
tier: 'INSTANT',
|
|
38
|
+
reason: 'Approve missing spender address',
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
// Check if spender is in approved list (case-insensitive for EVM addresses)
|
|
42
|
+
const isApproved = rules.spenders.some((s) => s.address.toLowerCase() === spenderAddress.toLowerCase());
|
|
43
|
+
if (!isApproved) {
|
|
44
|
+
return {
|
|
45
|
+
allowed: false,
|
|
46
|
+
tier: 'INSTANT',
|
|
47
|
+
reason: `Spender not in approved list: ${spenderAddress}`,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
return null; // Spender is approved, continue evaluation
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Evaluate APPROVE_AMOUNT_LIMIT policy.
|
|
54
|
+
*
|
|
55
|
+
* Returns PolicyEvaluation if denied, null if allowed (or not applicable).
|
|
56
|
+
*/
|
|
57
|
+
export function evaluateApproveAmountLimit(ctx, resolved, transaction) {
|
|
58
|
+
// Only evaluate for APPROVE transactions
|
|
59
|
+
if (transaction.type !== 'APPROVE')
|
|
60
|
+
return null;
|
|
61
|
+
const approveAmount = transaction.approveAmount;
|
|
62
|
+
if (!approveAmount)
|
|
63
|
+
return null; // No amount to check
|
|
64
|
+
const amount = BigInt(approveAmount);
|
|
65
|
+
const approveAmountPolicy = resolved.find((p) => p.type === 'APPROVE_AMOUNT_LIMIT');
|
|
66
|
+
if (!approveAmountPolicy) {
|
|
67
|
+
// No policy: default block unlimited
|
|
68
|
+
if (amount >= UNLIMITED_THRESHOLD) {
|
|
69
|
+
return {
|
|
70
|
+
allowed: false,
|
|
71
|
+
tier: 'INSTANT',
|
|
72
|
+
reason: 'Unlimited token approval is blocked',
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
// Parse rules
|
|
78
|
+
const rules = ctx.parseRules(approveAmountPolicy.rules, ApproveAmountLimitRulesSchema, 'APPROVE_AMOUNT_LIMIT');
|
|
79
|
+
// Check unlimited block
|
|
80
|
+
if (rules.blockUnlimited && amount >= UNLIMITED_THRESHOLD) {
|
|
81
|
+
return {
|
|
82
|
+
allowed: false,
|
|
83
|
+
tier: 'INSTANT',
|
|
84
|
+
reason: 'Unlimited token approval is blocked',
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
// Check maxAmount cap
|
|
88
|
+
if (rules.maxAmount && amount > BigInt(rules.maxAmount)) {
|
|
89
|
+
return {
|
|
90
|
+
allowed: false,
|
|
91
|
+
tier: 'INSTANT',
|
|
92
|
+
reason: 'Approve amount exceeds limit',
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
return null; // Amount within limits, continue evaluation
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Evaluate APPROVE_TIER_OVERRIDE policy.
|
|
99
|
+
*
|
|
100
|
+
* Returns PolicyEvaluation if override policy exists, null otherwise.
|
|
101
|
+
*/
|
|
102
|
+
export function evaluateApproveTierOverride(ctx, resolved, transaction) {
|
|
103
|
+
// Only evaluate for APPROVE transactions
|
|
104
|
+
if (transaction.type !== 'APPROVE')
|
|
105
|
+
return null;
|
|
106
|
+
const approveTierPolicy = resolved.find((p) => p.type === 'APPROVE_TIER_OVERRIDE');
|
|
107
|
+
if (!approveTierPolicy) {
|
|
108
|
+
// Phase 236: No override -> fall through to SPENDING_LIMIT for token_limits evaluation
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
// Parse rules
|
|
112
|
+
const rules = ctx.parseRules(approveTierPolicy.rules, ApproveTierOverrideRulesSchema, 'APPROVE_TIER_OVERRIDE');
|
|
113
|
+
return { allowed: true, tier: rules.tier };
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=approved-spenders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approved-spenders.js","sourceRoot":"","sources":["../../../src/pipeline/evaluators/approved-spenders.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* evaluators/contract-whitelist.ts - CONTRACT_WHITELIST, METHOD_WHITELIST,
|
|
3
|
+
* VENUE_WHITELIST, PERP_ALLOWED_MARKETS evaluation.
|
|
4
|
+
*
|
|
5
|
+
* Extracted from DatabasePolicyEngine private methods.
|
|
6
|
+
*/
|
|
7
|
+
import type { PolicyEvaluation, PolicyRow, TransactionParam, ParseRulesContext, SettingsContext } from './types.js';
|
|
8
|
+
/**
|
|
9
|
+
* Evaluate CONTRACT_WHITELIST policy.
|
|
10
|
+
*
|
|
11
|
+
* Returns PolicyEvaluation if denied, null if allowed (or not applicable).
|
|
12
|
+
*/
|
|
13
|
+
export declare function evaluateContractWhitelist(ctx: ParseRulesContext & SettingsContext, resolved: PolicyRow[], transaction: TransactionParam): PolicyEvaluation | null;
|
|
14
|
+
/**
|
|
15
|
+
* Evaluate METHOD_WHITELIST policy.
|
|
16
|
+
*
|
|
17
|
+
* Returns PolicyEvaluation if denied, null if allowed (or not applicable).
|
|
18
|
+
*/
|
|
19
|
+
export declare function evaluateMethodWhitelist(ctx: ParseRulesContext, resolved: PolicyRow[], transaction: TransactionParam): PolicyEvaluation | null;
|
|
20
|
+
/**
|
|
21
|
+
* Evaluate VENUE_WHITELIST policy (default-deny when enabled).
|
|
22
|
+
*/
|
|
23
|
+
export declare function evaluateVenueWhitelist(ctx: ParseRulesContext & SettingsContext, resolved: PolicyRow[], transaction: TransactionParam): PolicyEvaluation | null;
|
|
24
|
+
/**
|
|
25
|
+
* Evaluate PERP_ALLOWED_MARKETS policy.
|
|
26
|
+
*/
|
|
27
|
+
export declare function evaluatePerpAllowedMarkets(ctx: ParseRulesContext, resolved: PolicyRow[], transaction: TransactionParam): PolicyEvaluation | null;
|
|
28
|
+
//# sourceMappingURL=contract-whitelist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract-whitelist.d.ts","sourceRoot":"","sources":["../../../src/pipeline/evaluators/contract-whitelist.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEpH;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,GAAG,EAAE,iBAAiB,GAAG,eAAe,EACxC,QAAQ,EAAE,SAAS,EAAE,EACrB,WAAW,EAAE,gBAAgB,GAC5B,gBAAgB,GAAG,IAAI,CAiDzB;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,SAAS,EAAE,EACrB,WAAW,EAAE,gBAAgB,GAC5B,gBAAgB,GAAG,IAAI,CA4CzB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,iBAAiB,GAAG,eAAe,EACxC,QAAQ,EAAE,SAAS,EAAE,EACrB,WAAW,EAAE,gBAAgB,GAC5B,gBAAgB,GAAG,IAAI,CAqCzB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,SAAS,EAAE,EACrB,WAAW,EAAE,gBAAgB,GAC5B,gBAAgB,GAAG,IAAI,CAkCzB"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* evaluators/contract-whitelist.ts - CONTRACT_WHITELIST, METHOD_WHITELIST,
|
|
3
|
+
* VENUE_WHITELIST, PERP_ALLOWED_MARKETS evaluation.
|
|
4
|
+
*
|
|
5
|
+
* Extracted from DatabasePolicyEngine private methods.
|
|
6
|
+
*/
|
|
7
|
+
import { ContractWhitelistRulesSchema, MethodWhitelistRulesSchema, VenueWhitelistRulesSchema, PerpAllowedMarketsRulesSchema, } from '@waiaas/core';
|
|
8
|
+
/**
|
|
9
|
+
* Evaluate CONTRACT_WHITELIST policy.
|
|
10
|
+
*
|
|
11
|
+
* Returns PolicyEvaluation if denied, null if allowed (or not applicable).
|
|
12
|
+
*/
|
|
13
|
+
export function evaluateContractWhitelist(ctx, resolved, transaction) {
|
|
14
|
+
// Evaluate for CONTRACT_CALL and NFT_TRANSFER transactions (v31.0)
|
|
15
|
+
if (transaction.type !== 'CONTRACT_CALL' && transaction.type !== 'NFT_TRANSFER')
|
|
16
|
+
return null;
|
|
17
|
+
// Provider-trust: skip CONTRACT_WHITELIST for trusted action providers
|
|
18
|
+
if (transaction.actionProvider && ctx.settingsService) {
|
|
19
|
+
const enabledKey = `actions.${transaction.actionProvider}_enabled`;
|
|
20
|
+
try {
|
|
21
|
+
const enabled = ctx.settingsService.get(enabledKey);
|
|
22
|
+
if (enabled === 'true') {
|
|
23
|
+
return null; // Skip CONTRACT_WHITELIST -- provider is trusted
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// Unknown setting key means provider is not registered -- fall through to normal check
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
const contractWhitelistPolicy = resolved.find((p) => p.type === 'CONTRACT_WHITELIST');
|
|
31
|
+
// No CONTRACT_WHITELIST policy -> check toggle, then deny (default deny)
|
|
32
|
+
if (!contractWhitelistPolicy) {
|
|
33
|
+
if (ctx.settingsService?.get('policy.default_deny_contracts') === 'false') {
|
|
34
|
+
return null; // default-allow mode: skip contract whitelist check
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
allowed: false,
|
|
38
|
+
tier: 'INSTANT',
|
|
39
|
+
reason: 'Contract calls disabled: no CONTRACT_WHITELIST policy configured',
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
// Parse rules.contracts array
|
|
43
|
+
const rules = ctx.parseRules(contractWhitelistPolicy.rules, ContractWhitelistRulesSchema, 'CONTRACT_WHITELIST');
|
|
44
|
+
const contractAddress = transaction.contractAddress ?? transaction.toAddress;
|
|
45
|
+
// Check if contract is in whitelist (case-insensitive comparison for EVM addresses)
|
|
46
|
+
const isWhitelisted = rules.contracts.some((c) => c.address.toLowerCase() === contractAddress.toLowerCase());
|
|
47
|
+
if (!isWhitelisted) {
|
|
48
|
+
return {
|
|
49
|
+
allowed: false,
|
|
50
|
+
tier: 'INSTANT',
|
|
51
|
+
reason: `Contract not whitelisted: ${contractAddress}`,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
return null; // Contract is whitelisted, continue evaluation
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Evaluate METHOD_WHITELIST policy.
|
|
58
|
+
*
|
|
59
|
+
* Returns PolicyEvaluation if denied, null if allowed (or not applicable).
|
|
60
|
+
*/
|
|
61
|
+
export function evaluateMethodWhitelist(ctx, resolved, transaction) {
|
|
62
|
+
// Only evaluate for CONTRACT_CALL transactions
|
|
63
|
+
if (transaction.type !== 'CONTRACT_CALL')
|
|
64
|
+
return null;
|
|
65
|
+
const methodWhitelistPolicy = resolved.find((p) => p.type === 'METHOD_WHITELIST');
|
|
66
|
+
// No METHOD_WHITELIST policy -> no method restriction (optional policy)
|
|
67
|
+
if (!methodWhitelistPolicy)
|
|
68
|
+
return null;
|
|
69
|
+
// Parse rules.methods array
|
|
70
|
+
const rules = ctx.parseRules(methodWhitelistPolicy.rules, MethodWhitelistRulesSchema, 'METHOD_WHITELIST');
|
|
71
|
+
const contractAddress = transaction.contractAddress ?? transaction.toAddress;
|
|
72
|
+
const selector = transaction.selector;
|
|
73
|
+
// Find matching entry for this contract (case-insensitive)
|
|
74
|
+
const entry = rules.methods.find((m) => m.contractAddress.toLowerCase() === contractAddress.toLowerCase());
|
|
75
|
+
// No entry for this contract -> no method restriction for this specific contract
|
|
76
|
+
if (!entry)
|
|
77
|
+
return null;
|
|
78
|
+
// Check if selector is in the allowed list (case-insensitive)
|
|
79
|
+
if (!selector) {
|
|
80
|
+
return {
|
|
81
|
+
allowed: false,
|
|
82
|
+
tier: 'INSTANT',
|
|
83
|
+
reason: `Method not whitelisted: missing selector on contract ${contractAddress}`,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
const isAllowed = entry.selectors.some((s) => s.toLowerCase() === selector.toLowerCase());
|
|
87
|
+
if (!isAllowed) {
|
|
88
|
+
return {
|
|
89
|
+
allowed: false,
|
|
90
|
+
tier: 'INSTANT',
|
|
91
|
+
reason: `Method not whitelisted: ${selector} on contract ${contractAddress}`,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
return null; // Method is whitelisted, continue evaluation
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Evaluate VENUE_WHITELIST policy (default-deny when enabled).
|
|
98
|
+
*/
|
|
99
|
+
export function evaluateVenueWhitelist(ctx, resolved, transaction) {
|
|
100
|
+
// No venue (contractCall) -> skip
|
|
101
|
+
if (!transaction.venue)
|
|
102
|
+
return null;
|
|
103
|
+
// Check if venue whitelist is enabled via Admin Settings
|
|
104
|
+
let enabled = false;
|
|
105
|
+
try {
|
|
106
|
+
enabled = ctx.settingsService?.get('venue_whitelist_enabled') === 'true';
|
|
107
|
+
}
|
|
108
|
+
catch {
|
|
109
|
+
// Setting key not registered -- disabled by default
|
|
110
|
+
}
|
|
111
|
+
if (!enabled)
|
|
112
|
+
return null;
|
|
113
|
+
const policy = resolved.find((p) => p.type === 'VENUE_WHITELIST');
|
|
114
|
+
const venueNorm = transaction.venue.toLowerCase();
|
|
115
|
+
if (!policy) {
|
|
116
|
+
// Default-deny: venue present but no whitelist policy
|
|
117
|
+
return {
|
|
118
|
+
allowed: false,
|
|
119
|
+
tier: 'INSTANT',
|
|
120
|
+
reason: `VENUE_NOT_ALLOWED: venue '${transaction.venue}' is not whitelisted (no VENUE_WHITELIST policy)`,
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
const rules = ctx.parseRules(policy.rules, VenueWhitelistRulesSchema, 'VENUE_WHITELIST');
|
|
124
|
+
const isAllowed = rules.venues.some((v) => v.id.toLowerCase() === venueNorm);
|
|
125
|
+
if (!isAllowed) {
|
|
126
|
+
return {
|
|
127
|
+
allowed: false,
|
|
128
|
+
tier: 'INSTANT',
|
|
129
|
+
reason: `VENUE_NOT_ALLOWED: venue '${transaction.venue}' is not in the whitelist`,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
return null; // Venue allowed
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Evaluate PERP_ALLOWED_MARKETS policy.
|
|
136
|
+
*/
|
|
137
|
+
export function evaluatePerpAllowedMarkets(ctx, resolved, transaction) {
|
|
138
|
+
const PERP_ACTIONS = new Set([
|
|
139
|
+
'open_position', 'close_position', 'modify_position',
|
|
140
|
+
'add_margin', 'withdraw_margin',
|
|
141
|
+
]);
|
|
142
|
+
// Suffix matching for prefixed actions (drift_open_position -> open_position)
|
|
143
|
+
const actionSuffix = transaction.actionName
|
|
144
|
+
? [...PERP_ACTIONS].find((a) => transaction.actionName.endsWith(a))
|
|
145
|
+
: undefined;
|
|
146
|
+
if (!actionSuffix)
|
|
147
|
+
return null; // Not a perp action
|
|
148
|
+
const marketPolicy = resolved.find((p) => p.type === 'PERP_ALLOWED_MARKETS');
|
|
149
|
+
if (!marketPolicy) {
|
|
150
|
+
return {
|
|
151
|
+
allowed: false,
|
|
152
|
+
tier: 'INSTANT',
|
|
153
|
+
reason: 'No PERP_ALLOWED_MARKETS policy configured. Perp markets require explicit whitelist.',
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
const rules = ctx.parseRules(marketPolicy.rules, PerpAllowedMarketsRulesSchema, 'PERP_ALLOWED_MARKETS');
|
|
157
|
+
const targetMarket = transaction.contractAddress ?? transaction.toAddress;
|
|
158
|
+
const isAllowed = rules.markets.some((m) => m.market.toLowerCase() === targetMarket.toLowerCase());
|
|
159
|
+
if (!isAllowed) {
|
|
160
|
+
return {
|
|
161
|
+
allowed: false,
|
|
162
|
+
tier: 'INSTANT',
|
|
163
|
+
reason: `Market ${targetMarket} not in perp allowed markets whitelist`,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
return null;
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=contract-whitelist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contract-whitelist.js","sourceRoot":"","sources":["../../../src/pipeline/evaluators/contract-whitelist.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* evaluators/helpers.ts - Shared helper functions for policy evaluators.
|
|
3
|
+
*/
|
|
4
|
+
import type { PolicyTier } from '@waiaas/core';
|
|
5
|
+
/**
|
|
6
|
+
* Return the more conservative (higher) tier of two.
|
|
7
|
+
*/
|
|
8
|
+
export declare function maxTier(a: PolicyTier, b: PolicyTier): PolicyTier;
|
|
9
|
+
//# sourceMappingURL=helpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/pipeline/evaluators/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI/C;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,UAAU,CAIhE"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* evaluators/helpers.ts - Shared helper functions for policy evaluators.
|
|
3
|
+
*/
|
|
4
|
+
const TIER_ORDER = ['INSTANT', 'NOTIFY', 'DELAY', 'APPROVAL'];
|
|
5
|
+
/**
|
|
6
|
+
* Return the more conservative (higher) tier of two.
|
|
7
|
+
*/
|
|
8
|
+
export function maxTier(a, b) {
|
|
9
|
+
const aIdx = TIER_ORDER.indexOf(a);
|
|
10
|
+
const bIdx = TIER_ORDER.indexOf(b);
|
|
11
|
+
return TIER_ORDER[Math.max(aIdx, bIdx)];
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../src/pipeline/evaluators/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,MAAM,UAAU,GAAiB,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAE5E;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,CAAa,EAAE,CAAa;IAClD,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IACnC,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAE,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* evaluators/lending-asset-whitelist.ts - LENDING_ASSET_WHITELIST evaluation.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from DatabasePolicyEngine private methods.
|
|
5
|
+
*/
|
|
6
|
+
import type { PolicyEvaluation, PolicyRow, TransactionParam, ParseRulesContext } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Evaluate LENDING_ASSET_WHITELIST policy.
|
|
9
|
+
*
|
|
10
|
+
* Logic:
|
|
11
|
+
* - Only applies to lending actions (supply/borrow/repay/withdraw)
|
|
12
|
+
* - If no LENDING_ASSET_WHITELIST policy exists: deny (default-deny per CLAUDE.md)
|
|
13
|
+
* - If policy exists: check if target contract address is in rules.assets[].address
|
|
14
|
+
*
|
|
15
|
+
* Returns PolicyEvaluation if denied, null if allowed (or not applicable).
|
|
16
|
+
*/
|
|
17
|
+
export declare function evaluateLendingAssetWhitelist(ctx: ParseRulesContext, resolved: PolicyRow[], transaction: TransactionParam): PolicyEvaluation | null;
|
|
18
|
+
//# sourceMappingURL=lending-asset-whitelist.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lending-asset-whitelist.d.ts","sourceRoot":"","sources":["../../../src/pipeline/evaluators/lending-asset-whitelist.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEnG;;;;;;;;;GASG;AACH,wBAAgB,6BAA6B,CAC3C,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,SAAS,EAAE,EACrB,WAAW,EAAE,gBAAgB,GAC5B,gBAAgB,GAAG,IAAI,CA+BzB"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* evaluators/lending-asset-whitelist.ts - LENDING_ASSET_WHITELIST evaluation.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from DatabasePolicyEngine private methods.
|
|
5
|
+
*/
|
|
6
|
+
import { LendingAssetWhitelistRulesSchema } from '@waiaas/core';
|
|
7
|
+
/**
|
|
8
|
+
* Evaluate LENDING_ASSET_WHITELIST policy.
|
|
9
|
+
*
|
|
10
|
+
* Logic:
|
|
11
|
+
* - Only applies to lending actions (supply/borrow/repay/withdraw)
|
|
12
|
+
* - If no LENDING_ASSET_WHITELIST policy exists: deny (default-deny per CLAUDE.md)
|
|
13
|
+
* - If policy exists: check if target contract address is in rules.assets[].address
|
|
14
|
+
*
|
|
15
|
+
* Returns PolicyEvaluation if denied, null if allowed (or not applicable).
|
|
16
|
+
*/
|
|
17
|
+
export function evaluateLendingAssetWhitelist(ctx, resolved, transaction) {
|
|
18
|
+
// Only applies to lending actions
|
|
19
|
+
const LENDING_ACTIONS = new Set(['supply', 'borrow', 'repay', 'withdraw']);
|
|
20
|
+
if (!transaction.actionName || !LENDING_ACTIONS.has(transaction.actionName)) {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
const assetPolicy = resolved.find((p) => p.type === 'LENDING_ASSET_WHITELIST');
|
|
24
|
+
if (!assetPolicy) {
|
|
25
|
+
// Default-deny (CLAUDE.md compliance): no whitelist -> deny lending
|
|
26
|
+
return {
|
|
27
|
+
allowed: false,
|
|
28
|
+
tier: 'INSTANT',
|
|
29
|
+
reason: 'No LENDING_ASSET_WHITELIST policy configured. Lending assets require explicit whitelist.',
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
const rules = ctx.parseRules(assetPolicy.rules, LendingAssetWhitelistRulesSchema, 'LENDING_ASSET_WHITELIST');
|
|
33
|
+
const targetAddress = transaction.contractAddress ?? transaction.toAddress;
|
|
34
|
+
const isWhitelisted = rules.assets.some((a) => a.address.toLowerCase() === targetAddress.toLowerCase());
|
|
35
|
+
if (!isWhitelisted) {
|
|
36
|
+
return {
|
|
37
|
+
allowed: false,
|
|
38
|
+
tier: 'INSTANT',
|
|
39
|
+
reason: `Asset ${targetAddress} not in lending asset whitelist`,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
return null; // pass through
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=lending-asset-whitelist.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lending-asset-whitelist.js","sourceRoot":"","sources":["../../../src/pipeline/evaluators/lending-asset-whitelist.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gCAAgC,EAAE,MAAM,cAAc,CAAC;AAGhE;;;;;;;;;GASG;AACH,MAAM,UAAU,6BAA6B,CAC3C,GAAsB,EACtB,QAAqB,EACrB,WAA6B;IAE7B,kCAAkC;IAClC,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;IAC3E,IAAI,CAAC,WAAW,CAAC,UAAU,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5E,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,yBAAyB,CAAC,CAAC;IAC/E,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,oEAAoE;QACpE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,0FAA0F;SACnG,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,EAAE,gCAAgC,EAAE,yBAAyB,CAAC,CAAC;IAC7G,MAAM,aAAa,GAAG,WAAW,CAAC,eAAe,IAAI,WAAW,CAAC,SAAS,CAAC;IAC3E,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CACrC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,aAAa,CAAC,WAAW,EAAE,CAC/D,CAAC;IAEF,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,OAAO;YACL,OAAO,EAAE,KAAK;YACd,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,SAAS,aAAa,iCAAiC;SAChE,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC,CAAC,eAAe;AAC9B,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* evaluators/lending-ltv-limit.ts - LENDING_LTV_LIMIT, PERP_MAX_LEVERAGE,
|
|
3
|
+
* PERP_MAX_POSITION_USD evaluation.
|
|
4
|
+
*
|
|
5
|
+
* Extracted from DatabasePolicyEngine private methods.
|
|
6
|
+
*/
|
|
7
|
+
import type { PolicyEvaluation, PolicyRow, TransactionParam, ParseRulesContext } from './types.js';
|
|
8
|
+
import type { Database as SQLiteDatabase } from 'better-sqlite3';
|
|
9
|
+
/**
|
|
10
|
+
* Evaluate LENDING_LTV_LIMIT policy for borrow actions.
|
|
11
|
+
*
|
|
12
|
+
* @param usdAmount - USD value of the new borrow (from pipeline IPriceOracle, LEND-09)
|
|
13
|
+
* Returns PolicyEvaluation if denied/escalated, null if allowed (or not applicable).
|
|
14
|
+
*/
|
|
15
|
+
export declare function evaluateLendingLtvLimit(ctx: ParseRulesContext, resolved: PolicyRow[], transaction: TransactionParam, walletId: string, sqlite: SQLiteDatabase | null, usdAmount?: number): PolicyEvaluation | null;
|
|
16
|
+
/**
|
|
17
|
+
* Evaluate PERP_MAX_LEVERAGE policy.
|
|
18
|
+
*/
|
|
19
|
+
export declare function evaluatePerpMaxLeverage(ctx: ParseRulesContext, resolved: PolicyRow[], transaction: TransactionParam): PolicyEvaluation | null;
|
|
20
|
+
/**
|
|
21
|
+
* Evaluate PERP_MAX_POSITION_USD policy.
|
|
22
|
+
*/
|
|
23
|
+
export declare function evaluatePerpMaxPositionUsd(ctx: ParseRulesContext, resolved: PolicyRow[], transaction: TransactionParam): PolicyEvaluation | null;
|
|
24
|
+
//# sourceMappingURL=lending-ltv-limit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lending-ltv-limit.d.ts","sourceRoot":"","sources":["../../../src/pipeline/evaluators/lending-ltv-limit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,OAAO,KAAK,EAAc,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/G,OAAO,KAAK,EAAE,QAAQ,IAAI,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEjE;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,SAAS,EAAE,EACrB,WAAW,EAAE,gBAAgB,EAC7B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,cAAc,GAAG,IAAI,EAC7B,SAAS,CAAC,EAAE,MAAM,GACjB,gBAAgB,GAAG,IAAI,CAoDzB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,SAAS,EAAE,EACrB,WAAW,EAAE,gBAAgB,GAC5B,gBAAgB,GAAG,IAAI,CA+BzB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,iBAAiB,EACtB,QAAQ,EAAE,SAAS,EAAE,EACrB,WAAW,EAAE,gBAAgB,GAC5B,gBAAgB,GAAG,IAAI,CA+BzB"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* evaluators/lending-ltv-limit.ts - LENDING_LTV_LIMIT, PERP_MAX_LEVERAGE,
|
|
3
|
+
* PERP_MAX_POSITION_USD evaluation.
|
|
4
|
+
*
|
|
5
|
+
* Extracted from DatabasePolicyEngine private methods.
|
|
6
|
+
*/
|
|
7
|
+
import { LendingLtvLimitRulesSchema, PerpMaxLeverageRulesSchema, PerpMaxPositionUsdRulesSchema, } from '@waiaas/core';
|
|
8
|
+
/**
|
|
9
|
+
* Evaluate LENDING_LTV_LIMIT policy for borrow actions.
|
|
10
|
+
*
|
|
11
|
+
* @param usdAmount - USD value of the new borrow (from pipeline IPriceOracle, LEND-09)
|
|
12
|
+
* Returns PolicyEvaluation if denied/escalated, null if allowed (or not applicable).
|
|
13
|
+
*/
|
|
14
|
+
export function evaluateLendingLtvLimit(ctx, resolved, transaction, walletId, sqlite, usdAmount) {
|
|
15
|
+
// Only applies to borrow actions (matches 'borrow', 'aave_borrow', 'kamino_borrow', etc.)
|
|
16
|
+
if (!transaction.actionName?.endsWith('borrow'))
|
|
17
|
+
return null;
|
|
18
|
+
const ltvPolicy = resolved.find((p) => p.type === 'LENDING_LTV_LIMIT');
|
|
19
|
+
if (!ltvPolicy)
|
|
20
|
+
return null; // No LTV policy -> pass through
|
|
21
|
+
const rules = ctx.parseRules(ltvPolicy.rules, LendingLtvLimitRulesSchema, 'LENDING_LTV_LIMIT');
|
|
22
|
+
// Read cached position data from defi_positions
|
|
23
|
+
if (!sqlite)
|
|
24
|
+
return null;
|
|
25
|
+
const positions = sqlite.prepare("SELECT amount_usd, metadata, status FROM defi_positions WHERE wallet_id = ? AND category = 'LENDING' AND status = 'ACTIVE'").all(walletId);
|
|
26
|
+
// Aggregate collateral and debt from positions
|
|
27
|
+
let totalCollateralUsd = 0;
|
|
28
|
+
let totalDebtUsd = 0;
|
|
29
|
+
for (const pos of positions) {
|
|
30
|
+
if (!pos.metadata)
|
|
31
|
+
continue;
|
|
32
|
+
try {
|
|
33
|
+
const meta = JSON.parse(pos.metadata);
|
|
34
|
+
const posType = meta.positionType;
|
|
35
|
+
const usd = pos.amount_usd ?? 0;
|
|
36
|
+
if (posType === 'SUPPLY')
|
|
37
|
+
totalCollateralUsd += usd;
|
|
38
|
+
else if (posType === 'BORROW')
|
|
39
|
+
totalDebtUsd += usd;
|
|
40
|
+
}
|
|
41
|
+
catch { /* ignore parse errors */ }
|
|
42
|
+
}
|
|
43
|
+
// Calculate projected LTV including new borrow amount (LEND-09)
|
|
44
|
+
const newBorrowUsd = usdAmount ?? 0;
|
|
45
|
+
const projectedLtv = totalCollateralUsd > 0
|
|
46
|
+
? (totalDebtUsd + newBorrowUsd) / totalCollateralUsd
|
|
47
|
+
: (totalDebtUsd > 0 || newBorrowUsd > 0 ? Infinity : 0);
|
|
48
|
+
if (projectedLtv > rules.maxLtv) {
|
|
49
|
+
return {
|
|
50
|
+
allowed: false,
|
|
51
|
+
tier: 'INSTANT',
|
|
52
|
+
reason: `Borrow would exceed max LTV (projected: ${(projectedLtv * 100).toFixed(1)}%, limit: ${(rules.maxLtv * 100).toFixed(1)}%)`,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
if (projectedLtv > rules.warningLtv) {
|
|
56
|
+
return {
|
|
57
|
+
allowed: true,
|
|
58
|
+
tier: 'DELAY',
|
|
59
|
+
reason: `LTV approaching limit (projected: ${(projectedLtv * 100).toFixed(1)}%)`,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
return null; // pass through
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Evaluate PERP_MAX_LEVERAGE policy.
|
|
66
|
+
*/
|
|
67
|
+
export function evaluatePerpMaxLeverage(ctx, resolved, transaction) {
|
|
68
|
+
if (!transaction.actionName)
|
|
69
|
+
return null;
|
|
70
|
+
const isLeverageAction = transaction.actionName.endsWith('open_position') ||
|
|
71
|
+
transaction.actionName.endsWith('modify_position');
|
|
72
|
+
if (!isLeverageAction)
|
|
73
|
+
return null;
|
|
74
|
+
const leveragePolicy = resolved.find((p) => p.type === 'PERP_MAX_LEVERAGE');
|
|
75
|
+
if (!leveragePolicy)
|
|
76
|
+
return null; // No leverage policy -> pass through
|
|
77
|
+
const rules = ctx.parseRules(leveragePolicy.rules, PerpMaxLeverageRulesSchema, 'PERP_MAX_LEVERAGE');
|
|
78
|
+
const leverage = transaction.perpLeverage;
|
|
79
|
+
if (typeof leverage !== 'number')
|
|
80
|
+
return null; // No leverage info -> pass through
|
|
81
|
+
if (leverage > rules.maxLeverage) {
|
|
82
|
+
return {
|
|
83
|
+
allowed: false,
|
|
84
|
+
tier: 'INSTANT',
|
|
85
|
+
reason: `Leverage ${leverage}x exceeds max allowed (${rules.maxLeverage}x)`,
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
if (rules.warningLeverage && leverage > rules.warningLeverage) {
|
|
89
|
+
return {
|
|
90
|
+
allowed: true,
|
|
91
|
+
tier: 'DELAY',
|
|
92
|
+
reason: `Leverage ${leverage}x approaching limit (warning: ${rules.warningLeverage}x, max: ${rules.maxLeverage}x)`,
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Evaluate PERP_MAX_POSITION_USD policy.
|
|
99
|
+
*/
|
|
100
|
+
export function evaluatePerpMaxPositionUsd(ctx, resolved, transaction) {
|
|
101
|
+
if (!transaction.actionName)
|
|
102
|
+
return null;
|
|
103
|
+
const isSizeAction = transaction.actionName.endsWith('open_position') ||
|
|
104
|
+
transaction.actionName.endsWith('modify_position');
|
|
105
|
+
if (!isSizeAction)
|
|
106
|
+
return null;
|
|
107
|
+
const sizePolicy = resolved.find((p) => p.type === 'PERP_MAX_POSITION_USD');
|
|
108
|
+
if (!sizePolicy)
|
|
109
|
+
return null; // No size policy -> pass through
|
|
110
|
+
const rules = ctx.parseRules(sizePolicy.rules, PerpMaxPositionUsdRulesSchema, 'PERP_MAX_POSITION_USD');
|
|
111
|
+
const sizeUsd = transaction.perpSizeUsd;
|
|
112
|
+
if (typeof sizeUsd !== 'number')
|
|
113
|
+
return null; // No size info -> pass through
|
|
114
|
+
if (sizeUsd > rules.maxPositionUsd) {
|
|
115
|
+
return {
|
|
116
|
+
allowed: false,
|
|
117
|
+
tier: 'INSTANT',
|
|
118
|
+
reason: `Position size $${sizeUsd.toLocaleString()} exceeds max allowed ($${rules.maxPositionUsd.toLocaleString()})`,
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
if (rules.warningPositionUsd && sizeUsd > rules.warningPositionUsd) {
|
|
122
|
+
return {
|
|
123
|
+
allowed: true,
|
|
124
|
+
tier: 'DELAY',
|
|
125
|
+
reason: `Position size $${sizeUsd.toLocaleString()} approaching limit (warning: $${rules.warningPositionUsd.toLocaleString()}, max: $${rules.maxPositionUsd.toLocaleString()})`,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=lending-ltv-limit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lending-ltv-limit.js","sourceRoot":"","sources":["../../../src/pipeline/evaluators/lending-ltv-limit.ts"],"names":[],"mappings":"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"}
|