@waiaas/daemon 2.0.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/error-hints.d.ts +15 -0
- package/dist/api/error-hints.d.ts.map +1 -0
- package/dist/api/error-hints.js +71 -0
- package/dist/api/error-hints.js.map +1 -0
- package/dist/api/index.d.ts +11 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +14 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/middleware/address-validation.d.ts +38 -0
- package/dist/api/middleware/address-validation.d.ts.map +1 -0
- package/dist/api/middleware/address-validation.js +134 -0
- package/dist/api/middleware/address-validation.js.map +1 -0
- package/dist/api/middleware/csp.d.ts +17 -0
- package/dist/api/middleware/csp.d.ts.map +1 -0
- package/dist/api/middleware/csp.js +31 -0
- package/dist/api/middleware/csp.js.map +1 -0
- package/dist/api/middleware/error-handler.d.ts +16 -0
- package/dist/api/middleware/error-handler.d.ts.map +1 -0
- package/dist/api/middleware/error-handler.js +46 -0
- package/dist/api/middleware/error-handler.js.map +1 -0
- package/dist/api/middleware/host-guard.d.ts +11 -0
- package/dist/api/middleware/host-guard.d.ts.map +1 -0
- package/dist/api/middleware/host-guard.js +25 -0
- package/dist/api/middleware/host-guard.js.map +1 -0
- package/dist/api/middleware/index.d.ts +13 -0
- package/dist/api/middleware/index.d.ts.map +1 -0
- package/dist/api/middleware/index.js +13 -0
- package/dist/api/middleware/index.js.map +1 -0
- package/dist/api/middleware/kill-switch-guard.d.ts +19 -0
- package/dist/api/middleware/kill-switch-guard.d.ts.map +1 -0
- package/dist/api/middleware/kill-switch-guard.js +49 -0
- package/dist/api/middleware/kill-switch-guard.js.map +1 -0
- package/dist/api/middleware/master-auth.d.ts +15 -0
- package/dist/api/middleware/master-auth.d.ts.map +1 -0
- package/dist/api/middleware/master-auth.js +35 -0
- package/dist/api/middleware/master-auth.js.map +1 -0
- package/dist/api/middleware/owner-auth.d.ts +30 -0
- package/dist/api/middleware/owner-auth.d.ts.map +1 -0
- package/dist/api/middleware/owner-auth.js +133 -0
- package/dist/api/middleware/owner-auth.js.map +1 -0
- package/dist/api/middleware/request-id.d.ts +10 -0
- package/dist/api/middleware/request-id.d.ts.map +1 -0
- package/dist/api/middleware/request-id.js +18 -0
- package/dist/api/middleware/request-id.js.map +1 -0
- package/dist/api/middleware/request-logger.d.ts +9 -0
- package/dist/api/middleware/request-logger.d.ts.map +1 -0
- package/dist/api/middleware/request-logger.js +18 -0
- package/dist/api/middleware/request-logger.js.map +1 -0
- package/dist/api/middleware/session-auth.d.ts +21 -0
- package/dist/api/middleware/session-auth.d.ts.map +1 -0
- package/dist/api/middleware/session-auth.js +51 -0
- package/dist/api/middleware/session-auth.js.map +1 -0
- package/dist/api/middleware/siwe-verify.d.ts +31 -0
- package/dist/api/middleware/siwe-verify.d.ts.map +1 -0
- package/dist/api/middleware/siwe-verify.js +55 -0
- package/dist/api/middleware/siwe-verify.js.map +1 -0
- package/dist/api/routes/actions.d.ts +56 -0
- package/dist/api/routes/actions.d.ts.map +1 -0
- package/dist/api/routes/actions.js +291 -0
- package/dist/api/routes/actions.js.map +1 -0
- package/dist/api/routes/admin.d.ts +99 -0
- package/dist/api/routes/admin.d.ts.map +1 -0
- package/dist/api/routes/admin.js +1304 -0
- package/dist/api/routes/admin.js.map +1 -0
- package/dist/api/routes/display-currency-helper.d.ts +26 -0
- package/dist/api/routes/display-currency-helper.d.ts.map +1 -0
- package/dist/api/routes/display-currency-helper.js +47 -0
- package/dist/api/routes/display-currency-helper.js.map +1 -0
- package/dist/api/routes/health.d.ts +14 -0
- package/dist/api/routes/health.d.ts.map +1 -0
- package/dist/api/routes/health.js +47 -0
- package/dist/api/routes/health.js.map +1 -0
- package/dist/api/routes/index.d.ts +15 -0
- package/dist/api/routes/index.d.ts.map +1 -0
- package/dist/api/routes/index.js +15 -0
- package/dist/api/routes/index.js.map +1 -0
- package/dist/api/routes/mcp.d.ts +30 -0
- package/dist/api/routes/mcp.d.ts.map +1 -0
- package/dist/api/routes/mcp.js +156 -0
- package/dist/api/routes/mcp.js.map +1 -0
- package/dist/api/routes/nonce.d.ts +20 -0
- package/dist/api/routes/nonce.d.ts.map +1 -0
- package/dist/api/routes/nonce.js +48 -0
- package/dist/api/routes/nonce.js.map +1 -0
- package/dist/api/routes/openapi-schemas.d.ts +2281 -0
- package/dist/api/routes/openapi-schemas.d.ts.map +1 -0
- package/dist/api/routes/openapi-schemas.js +770 -0
- package/dist/api/routes/openapi-schemas.js.map +1 -0
- package/dist/api/routes/policies.d.ts +29 -0
- package/dist/api/routes/policies.d.ts.map +1 -0
- package/dist/api/routes/policies.js +332 -0
- package/dist/api/routes/policies.js.map +1 -0
- package/dist/api/routes/sessions.d.ts +35 -0
- package/dist/api/routes/sessions.d.ts.map +1 -0
- package/dist/api/routes/sessions.js +347 -0
- package/dist/api/routes/sessions.js.map +1 -0
- package/dist/api/routes/skills.d.ts +9 -0
- package/dist/api/routes/skills.d.ts.map +1 -0
- package/dist/api/routes/skills.js +59 -0
- package/dist/api/routes/skills.js.map +1 -0
- package/dist/api/routes/tokens.d.ts +25 -0
- package/dist/api/routes/tokens.d.ts.map +1 -0
- package/dist/api/routes/tokens.js +161 -0
- package/dist/api/routes/tokens.js.map +1 -0
- package/dist/api/routes/transactions.d.ts +68 -0
- package/dist/api/routes/transactions.d.ts.map +1 -0
- package/dist/api/routes/transactions.js +576 -0
- package/dist/api/routes/transactions.js.map +1 -0
- package/dist/api/routes/utils.d.ts +9 -0
- package/dist/api/routes/utils.d.ts.map +1 -0
- package/dist/api/routes/utils.js +52 -0
- package/dist/api/routes/utils.js.map +1 -0
- package/dist/api/routes/wallet.d.ts +36 -0
- package/dist/api/routes/wallet.d.ts.map +1 -0
- package/dist/api/routes/wallet.js +358 -0
- package/dist/api/routes/wallet.js.map +1 -0
- package/dist/api/routes/wallets.d.ts +43 -0
- package/dist/api/routes/wallets.d.ts.map +1 -0
- package/dist/api/routes/wallets.js +630 -0
- package/dist/api/routes/wallets.js.map +1 -0
- package/dist/api/routes/wc.d.ts +46 -0
- package/dist/api/routes/wc.d.ts.map +1 -0
- package/dist/api/routes/wc.js +354 -0
- package/dist/api/routes/wc.js.map +1 -0
- package/dist/api/routes/x402.d.ts +61 -0
- package/dist/api/routes/x402.d.ts.map +1 -0
- package/dist/api/routes/x402.js +493 -0
- package/dist/api/routes/x402.js.map +1 -0
- package/dist/api/server.d.ts +81 -0
- package/dist/api/server.d.ts.map +1 -0
- package/dist/api/server.js +406 -0
- package/dist/api/server.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/infrastructure/action/action-provider-registry.d.ts +77 -0
- package/dist/infrastructure/action/action-provider-registry.d.ts.map +1 -0
- package/dist/infrastructure/action/action-provider-registry.js +239 -0
- package/dist/infrastructure/action/action-provider-registry.js.map +1 -0
- package/dist/infrastructure/action/api-key-store.d.ts +60 -0
- package/dist/infrastructure/action/api-key-store.d.ts.map +1 -0
- package/dist/infrastructure/action/api-key-store.js +130 -0
- package/dist/infrastructure/action/api-key-store.js.map +1 -0
- package/dist/infrastructure/action/index.d.ts +10 -0
- package/dist/infrastructure/action/index.d.ts.map +1 -0
- package/dist/infrastructure/action/index.js +9 -0
- package/dist/infrastructure/action/index.js.map +1 -0
- package/dist/infrastructure/adapter-pool.d.ts +50 -0
- package/dist/infrastructure/adapter-pool.d.ts.map +1 -0
- package/dist/infrastructure/adapter-pool.js +110 -0
- package/dist/infrastructure/adapter-pool.js.map +1 -0
- package/dist/infrastructure/backup/backup-service.d.ts +53 -0
- package/dist/infrastructure/backup/backup-service.d.ts.map +1 -0
- package/dist/infrastructure/backup/backup-service.js +158 -0
- package/dist/infrastructure/backup/backup-service.js.map +1 -0
- package/dist/infrastructure/backup/index.d.ts +2 -0
- package/dist/infrastructure/backup/index.d.ts.map +1 -0
- package/dist/infrastructure/backup/index.js +2 -0
- package/dist/infrastructure/backup/index.js.map +1 -0
- package/dist/infrastructure/config/index.d.ts +8 -0
- package/dist/infrastructure/config/index.d.ts.map +1 -0
- package/dist/infrastructure/config/index.js +7 -0
- package/dist/infrastructure/config/index.js.map +1 -0
- package/dist/infrastructure/config/loader.d.ts +555 -0
- package/dist/infrastructure/config/loader.d.ts.map +1 -0
- package/dist/infrastructure/config/loader.js +311 -0
- package/dist/infrastructure/config/loader.js.map +1 -0
- package/dist/infrastructure/database/checks.d.ts +19 -0
- package/dist/infrastructure/database/checks.d.ts.map +1 -0
- package/dist/infrastructure/database/checks.js +27 -0
- package/dist/infrastructure/database/checks.js.map +1 -0
- package/dist/infrastructure/database/compatibility.d.ts +36 -0
- package/dist/infrastructure/database/compatibility.d.ts.map +1 -0
- package/dist/infrastructure/database/compatibility.js +75 -0
- package/dist/infrastructure/database/compatibility.js.map +1 -0
- package/dist/infrastructure/database/connection.d.ts +36 -0
- package/dist/infrastructure/database/connection.d.ts.map +1 -0
- package/dist/infrastructure/database/connection.js +47 -0
- package/dist/infrastructure/database/connection.js.map +1 -0
- package/dist/infrastructure/database/id.d.ts +17 -0
- package/dist/infrastructure/database/id.d.ts.map +1 -0
- package/dist/infrastructure/database/id.js +20 -0
- package/dist/infrastructure/database/id.js.map +1 -0
- package/dist/infrastructure/database/index.d.ts +15 -0
- package/dist/infrastructure/database/index.d.ts.map +1 -0
- package/dist/infrastructure/database/index.js +12 -0
- package/dist/infrastructure/database/index.js.map +1 -0
- package/dist/infrastructure/database/migrate.d.ts +76 -0
- package/dist/infrastructure/database/migrate.d.ts.map +1 -0
- package/dist/infrastructure/database/migrate.js +1214 -0
- package/dist/infrastructure/database/migrate.js.map +1 -0
- package/dist/infrastructure/database/schema.d.ts +2352 -0
- package/dist/infrastructure/database/schema.d.ts.map +1 -0
- package/dist/infrastructure/database/schema.js +288 -0
- package/dist/infrastructure/database/schema.js.map +1 -0
- package/dist/infrastructure/jwt/index.d.ts +2 -0
- package/dist/infrastructure/jwt/index.d.ts.map +1 -0
- package/dist/infrastructure/jwt/index.js +2 -0
- package/dist/infrastructure/jwt/index.js.map +1 -0
- package/dist/infrastructure/jwt/jwt-secret-manager.d.ts +58 -0
- package/dist/infrastructure/jwt/jwt-secret-manager.d.ts.map +1 -0
- package/dist/infrastructure/jwt/jwt-secret-manager.js +222 -0
- package/dist/infrastructure/jwt/jwt-secret-manager.js.map +1 -0
- package/dist/infrastructure/keystore/crypto.d.ts +62 -0
- package/dist/infrastructure/keystore/crypto.d.ts.map +1 -0
- package/dist/infrastructure/keystore/crypto.js +89 -0
- package/dist/infrastructure/keystore/crypto.js.map +1 -0
- package/dist/infrastructure/keystore/index.d.ts +4 -0
- package/dist/infrastructure/keystore/index.d.ts.map +1 -0
- package/dist/infrastructure/keystore/index.js +5 -0
- package/dist/infrastructure/keystore/index.js.map +1 -0
- package/dist/infrastructure/keystore/keystore.d.ts +115 -0
- package/dist/infrastructure/keystore/keystore.d.ts.map +1 -0
- package/dist/infrastructure/keystore/keystore.js +327 -0
- package/dist/infrastructure/keystore/keystore.js.map +1 -0
- package/dist/infrastructure/keystore/memory.d.ts +45 -0
- package/dist/infrastructure/keystore/memory.d.ts.map +1 -0
- package/dist/infrastructure/keystore/memory.js +105 -0
- package/dist/infrastructure/keystore/memory.js.map +1 -0
- package/dist/infrastructure/oracle/coingecko-forex.d.ts +35 -0
- package/dist/infrastructure/oracle/coingecko-forex.d.ts.map +1 -0
- package/dist/infrastructure/oracle/coingecko-forex.js +69 -0
- package/dist/infrastructure/oracle/coingecko-forex.js.map +1 -0
- package/dist/infrastructure/oracle/coingecko-oracle.d.ts +73 -0
- package/dist/infrastructure/oracle/coingecko-oracle.d.ts.map +1 -0
- package/dist/infrastructure/oracle/coingecko-oracle.js +199 -0
- package/dist/infrastructure/oracle/coingecko-oracle.js.map +1 -0
- package/dist/infrastructure/oracle/coingecko-platform-ids.d.ts +32 -0
- package/dist/infrastructure/oracle/coingecko-platform-ids.d.ts.map +1 -0
- package/dist/infrastructure/oracle/coingecko-platform-ids.js +30 -0
- package/dist/infrastructure/oracle/coingecko-platform-ids.js.map +1 -0
- package/dist/infrastructure/oracle/forex-currencies.d.ts +36 -0
- package/dist/infrastructure/oracle/forex-currencies.d.ts.map +1 -0
- package/dist/infrastructure/oracle/forex-currencies.js +71 -0
- package/dist/infrastructure/oracle/forex-currencies.js.map +1 -0
- package/dist/infrastructure/oracle/forex-rate-service.d.ts +51 -0
- package/dist/infrastructure/oracle/forex-rate-service.d.ts.map +1 -0
- package/dist/infrastructure/oracle/forex-rate-service.js +149 -0
- package/dist/infrastructure/oracle/forex-rate-service.js.map +1 -0
- package/dist/infrastructure/oracle/index.d.ts +18 -0
- package/dist/infrastructure/oracle/index.d.ts.map +1 -0
- package/dist/infrastructure/oracle/index.js +19 -0
- package/dist/infrastructure/oracle/index.js.map +1 -0
- package/dist/infrastructure/oracle/oracle-chain.d.ts +101 -0
- package/dist/infrastructure/oracle/oracle-chain.d.ts.map +1 -0
- package/dist/infrastructure/oracle/oracle-chain.js +163 -0
- package/dist/infrastructure/oracle/oracle-chain.js.map +1 -0
- package/dist/infrastructure/oracle/oracle-errors.d.ts +42 -0
- package/dist/infrastructure/oracle/oracle-errors.d.ts.map +1 -0
- package/dist/infrastructure/oracle/oracle-errors.js +53 -0
- package/dist/infrastructure/oracle/oracle-errors.js.map +1 -0
- package/dist/infrastructure/oracle/price-age.d.ts +38 -0
- package/dist/infrastructure/oracle/price-age.d.ts.map +1 -0
- package/dist/infrastructure/oracle/price-age.js +44 -0
- package/dist/infrastructure/oracle/price-age.js.map +1 -0
- package/dist/infrastructure/oracle/price-cache.d.ts +99 -0
- package/dist/infrastructure/oracle/price-cache.d.ts.map +1 -0
- package/dist/infrastructure/oracle/price-cache.js +173 -0
- package/dist/infrastructure/oracle/price-cache.js.map +1 -0
- package/dist/infrastructure/oracle/pyth-feed-ids.d.ts +31 -0
- package/dist/infrastructure/oracle/pyth-feed-ids.d.ts.map +1 -0
- package/dist/infrastructure/oracle/pyth-feed-ids.js +44 -0
- package/dist/infrastructure/oracle/pyth-feed-ids.js.map +1 -0
- package/dist/infrastructure/oracle/pyth-oracle.d.ts +69 -0
- package/dist/infrastructure/oracle/pyth-oracle.d.ts.map +1 -0
- package/dist/infrastructure/oracle/pyth-oracle.js +149 -0
- package/dist/infrastructure/oracle/pyth-oracle.js.map +1 -0
- package/dist/infrastructure/settings/hot-reload.d.ts +71 -0
- package/dist/infrastructure/settings/hot-reload.d.ts.map +1 -0
- package/dist/infrastructure/settings/hot-reload.js +315 -0
- package/dist/infrastructure/settings/hot-reload.js.map +1 -0
- package/dist/infrastructure/settings/index.d.ts +13 -0
- package/dist/infrastructure/settings/index.d.ts.map +1 -0
- package/dist/infrastructure/settings/index.js +10 -0
- package/dist/infrastructure/settings/index.js.map +1 -0
- package/dist/infrastructure/settings/setting-keys.d.ts +28 -0
- package/dist/infrastructure/settings/setting-keys.d.ts.map +1 -0
- package/dist/infrastructure/settings/setting-keys.js +105 -0
- package/dist/infrastructure/settings/setting-keys.js.map +1 -0
- package/dist/infrastructure/settings/settings-crypto.d.ts +39 -0
- package/dist/infrastructure/settings/settings-crypto.d.ts.map +1 -0
- package/dist/infrastructure/settings/settings-crypto.js +73 -0
- package/dist/infrastructure/settings/settings-crypto.js.map +1 -0
- package/dist/infrastructure/settings/settings-service.d.ts +82 -0
- package/dist/infrastructure/settings/settings-service.d.ts.map +1 -0
- package/dist/infrastructure/settings/settings-service.js +267 -0
- package/dist/infrastructure/settings/settings-service.js.map +1 -0
- package/dist/infrastructure/telegram/index.d.ts +6 -0
- package/dist/infrastructure/telegram/index.d.ts.map +1 -0
- package/dist/infrastructure/telegram/index.js +5 -0
- package/dist/infrastructure/telegram/index.js.map +1 -0
- package/dist/infrastructure/telegram/telegram-api.d.ts +35 -0
- package/dist/infrastructure/telegram/telegram-api.d.ts.map +1 -0
- package/dist/infrastructure/telegram/telegram-api.js +82 -0
- package/dist/infrastructure/telegram/telegram-api.js.map +1 -0
- package/dist/infrastructure/telegram/telegram-auth.d.ts +57 -0
- package/dist/infrastructure/telegram/telegram-auth.d.ts.map +1 -0
- package/dist/infrastructure/telegram/telegram-auth.js +88 -0
- package/dist/infrastructure/telegram/telegram-auth.js.map +1 -0
- package/dist/infrastructure/telegram/telegram-bot-service.d.ts +95 -0
- package/dist/infrastructure/telegram/telegram-bot-service.d.ts.map +1 -0
- package/dist/infrastructure/telegram/telegram-bot-service.js +564 -0
- package/dist/infrastructure/telegram/telegram-bot-service.js.map +1 -0
- package/dist/infrastructure/telegram/telegram-keyboard.d.ts +27 -0
- package/dist/infrastructure/telegram/telegram-keyboard.d.ts.map +1 -0
- package/dist/infrastructure/telegram/telegram-keyboard.js +52 -0
- package/dist/infrastructure/telegram/telegram-keyboard.js.map +1 -0
- package/dist/infrastructure/telegram/telegram-types.d.ts +43 -0
- package/dist/infrastructure/telegram/telegram-types.d.ts.map +1 -0
- package/dist/infrastructure/telegram/telegram-types.js +8 -0
- package/dist/infrastructure/telegram/telegram-types.js.map +1 -0
- package/dist/infrastructure/token-registry/builtin-tokens.d.ts +39 -0
- package/dist/infrastructure/token-registry/builtin-tokens.d.ts.map +1 -0
- package/dist/infrastructure/token-registry/builtin-tokens.js +135 -0
- package/dist/infrastructure/token-registry/builtin-tokens.js.map +1 -0
- package/dist/infrastructure/token-registry/index.d.ts +8 -0
- package/dist/infrastructure/token-registry/index.d.ts.map +1 -0
- package/dist/infrastructure/token-registry/index.js +8 -0
- package/dist/infrastructure/token-registry/index.js.map +1 -0
- package/dist/infrastructure/token-registry/token-registry-service.d.ts +49 -0
- package/dist/infrastructure/token-registry/token-registry-service.d.ts.map +1 -0
- package/dist/infrastructure/token-registry/token-registry-service.js +93 -0
- package/dist/infrastructure/token-registry/token-registry-service.js.map +1 -0
- package/dist/infrastructure/version/index.d.ts +5 -0
- package/dist/infrastructure/version/index.d.ts.map +1 -0
- package/dist/infrastructure/version/index.js +5 -0
- package/dist/infrastructure/version/index.js.map +1 -0
- package/dist/infrastructure/version/version-check-service.d.ts +35 -0
- package/dist/infrastructure/version/version-check-service.d.ts.map +1 -0
- package/dist/infrastructure/version/version-check-service.js +92 -0
- package/dist/infrastructure/version/version-check-service.js.map +1 -0
- package/dist/lifecycle/daemon.d.ts +103 -0
- package/dist/lifecycle/daemon.d.ts.map +1 -0
- package/dist/lifecycle/daemon.js +934 -0
- package/dist/lifecycle/daemon.js.map +1 -0
- package/dist/lifecycle/index.d.ts +9 -0
- package/dist/lifecycle/index.d.ts.map +1 -0
- package/dist/lifecycle/index.js +9 -0
- package/dist/lifecycle/index.js.map +1 -0
- package/dist/lifecycle/signal-handler.d.ts +18 -0
- package/dist/lifecycle/signal-handler.d.ts.map +1 -0
- package/dist/lifecycle/signal-handler.js +37 -0
- package/dist/lifecycle/signal-handler.js.map +1 -0
- package/dist/lifecycle/workers.d.ts +46 -0
- package/dist/lifecycle/workers.d.ts.map +1 -0
- package/dist/lifecycle/workers.js +101 -0
- package/dist/lifecycle/workers.js.map +1 -0
- package/dist/notifications/channels/discord.d.ts +10 -0
- package/dist/notifications/channels/discord.d.ts.map +1 -0
- package/dist/notifications/channels/discord.js +54 -0
- package/dist/notifications/channels/discord.js.map +1 -0
- package/dist/notifications/channels/ntfy.d.ts +13 -0
- package/dist/notifications/channels/ntfy.d.ts.map +1 -0
- package/dist/notifications/channels/ntfy.js +58 -0
- package/dist/notifications/channels/ntfy.js.map +1 -0
- package/dist/notifications/channels/slack.d.ts +10 -0
- package/dist/notifications/channels/slack.d.ts.map +1 -0
- package/dist/notifications/channels/slack.js +55 -0
- package/dist/notifications/channels/slack.js.map +1 -0
- package/dist/notifications/channels/telegram.d.ts +10 -0
- package/dist/notifications/channels/telegram.d.ts.map +1 -0
- package/dist/notifications/channels/telegram.js +40 -0
- package/dist/notifications/channels/telegram.js.map +1 -0
- package/dist/notifications/index.d.ts +9 -0
- package/dist/notifications/index.d.ts.map +1 -0
- package/dist/notifications/index.js +7 -0
- package/dist/notifications/index.js.map +1 -0
- package/dist/notifications/notification-service.d.ts +75 -0
- package/dist/notifications/notification-service.d.ts.map +1 -0
- package/dist/notifications/notification-service.js +213 -0
- package/dist/notifications/notification-service.js.map +1 -0
- package/dist/notifications/templates/message-templates.d.ts +12 -0
- package/dist/notifications/templates/message-templates.d.ts.map +1 -0
- package/dist/notifications/templates/message-templates.js +22 -0
- package/dist/notifications/templates/message-templates.js.map +1 -0
- package/dist/pipeline/database-policy-engine.d.ts +286 -0
- package/dist/pipeline/database-policy-engine.d.ts.map +1 -0
- package/dist/pipeline/database-policy-engine.js +992 -0
- package/dist/pipeline/database-policy-engine.js.map +1 -0
- package/dist/pipeline/default-policy-engine.d.ts +26 -0
- package/dist/pipeline/default-policy-engine.d.ts.map +1 -0
- package/dist/pipeline/default-policy-engine.js +25 -0
- package/dist/pipeline/default-policy-engine.js.map +1 -0
- package/dist/pipeline/index.d.ts +9 -0
- package/dist/pipeline/index.d.ts.map +1 -0
- package/dist/pipeline/index.js +9 -0
- package/dist/pipeline/index.js.map +1 -0
- package/dist/pipeline/network-resolver.d.ts +22 -0
- package/dist/pipeline/network-resolver.d.ts.map +1 -0
- package/dist/pipeline/network-resolver.js +32 -0
- package/dist/pipeline/network-resolver.js.map +1 -0
- package/dist/pipeline/pipeline.d.ts +72 -0
- package/dist/pipeline/pipeline.d.ts.map +1 -0
- package/dist/pipeline/pipeline.js +87 -0
- package/dist/pipeline/pipeline.js.map +1 -0
- package/dist/pipeline/resolve-effective-amount-usd.d.ts +41 -0
- package/dist/pipeline/resolve-effective-amount-usd.d.ts.map +1 -0
- package/dist/pipeline/resolve-effective-amount-usd.js +208 -0
- package/dist/pipeline/resolve-effective-amount-usd.js.map +1 -0
- package/dist/pipeline/sign-only.d.ts +99 -0
- package/dist/pipeline/sign-only.d.ts.map +1 -0
- package/dist/pipeline/sign-only.js +267 -0
- package/dist/pipeline/sign-only.js.map +1 -0
- package/dist/pipeline/sleep.d.ts +6 -0
- package/dist/pipeline/sleep.d.ts.map +1 -0
- package/dist/pipeline/sleep.js +8 -0
- package/dist/pipeline/sleep.js.map +1 -0
- package/dist/pipeline/stages.d.ts +82 -0
- package/dist/pipeline/stages.d.ts.map +1 -0
- package/dist/pipeline/stages.js +784 -0
- package/dist/pipeline/stages.js.map +1 -0
- package/dist/services/autostop-rules.d.ts +79 -0
- package/dist/services/autostop-rules.d.ts.map +1 -0
- package/dist/services/autostop-rules.js +174 -0
- package/dist/services/autostop-rules.js.map +1 -0
- package/dist/services/autostop-service.d.ts +82 -0
- package/dist/services/autostop-service.d.ts.map +1 -0
- package/dist/services/autostop-service.js +223 -0
- package/dist/services/autostop-service.js.map +1 -0
- package/dist/services/kill-switch-service.d.ts +118 -0
- package/dist/services/kill-switch-service.d.ts.map +1 -0
- package/dist/services/kill-switch-service.js +291 -0
- package/dist/services/kill-switch-service.js.map +1 -0
- package/dist/services/monitoring/balance-monitor-service.d.ts +65 -0
- package/dist/services/monitoring/balance-monitor-service.d.ts.map +1 -0
- package/dist/services/monitoring/balance-monitor-service.js +207 -0
- package/dist/services/monitoring/balance-monitor-service.js.map +1 -0
- package/dist/services/wc-session-service.d.ts +123 -0
- package/dist/services/wc-session-service.d.ts.map +1 -0
- package/dist/services/wc-session-service.js +363 -0
- package/dist/services/wc-session-service.js.map +1 -0
- package/dist/services/wc-signing-bridge.d.ts +60 -0
- package/dist/services/wc-signing-bridge.d.ts.map +1 -0
- package/dist/services/wc-signing-bridge.js +334 -0
- package/dist/services/wc-signing-bridge.js.map +1 -0
- package/dist/services/wc-storage.d.ts +32 -0
- package/dist/services/wc-storage.d.ts.map +1 -0
- package/dist/services/wc-storage.js +64 -0
- package/dist/services/wc-storage.js.map +1 -0
- package/dist/services/x402/payment-signer.d.ts +88 -0
- package/dist/services/x402/payment-signer.d.ts.map +1 -0
- package/dist/services/x402/payment-signer.js +311 -0
- package/dist/services/x402/payment-signer.js.map +1 -0
- package/dist/services/x402/ssrf-guard.d.ts +27 -0
- package/dist/services/x402/ssrf-guard.d.ts.map +1 -0
- package/dist/services/x402/ssrf-guard.js +236 -0
- package/dist/services/x402/ssrf-guard.js.map +1 -0
- package/dist/services/x402/x402-domain-policy.d.ts +50 -0
- package/dist/services/x402/x402-domain-policy.d.ts.map +1 -0
- package/dist/services/x402/x402-domain-policy.js +78 -0
- package/dist/services/x402/x402-domain-policy.js.map +1 -0
- package/dist/services/x402/x402-handler.d.ts +71 -0
- package/dist/services/x402/x402-handler.d.ts.map +1 -0
- package/dist/services/x402/x402-handler.js +195 -0
- package/dist/services/x402/x402-handler.js.map +1 -0
- package/dist/services/x402/x402-usd-resolver.d.ts +26 -0
- package/dist/services/x402/x402-usd-resolver.d.ts.map +1 -0
- package/dist/services/x402/x402-usd-resolver.js +79 -0
- package/dist/services/x402/x402-usd-resolver.js.map +1 -0
- package/dist/workflow/approval-workflow.d.ts +103 -0
- package/dist/workflow/approval-workflow.d.ts.map +1 -0
- package/dist/workflow/approval-workflow.js +202 -0
- package/dist/workflow/approval-workflow.js.map +1 -0
- package/dist/workflow/delay-queue.d.ts +78 -0
- package/dist/workflow/delay-queue.d.ts.map +1 -0
- package/dist/workflow/delay-queue.js +174 -0
- package/dist/workflow/delay-queue.js.map +1 -0
- package/dist/workflow/index.d.ts +11 -0
- package/dist/workflow/index.d.ts.map +1 -0
- package/dist/workflow/index.js +9 -0
- package/dist/workflow/index.js.map +1 -0
- package/dist/workflow/owner-state.d.ts +97 -0
- package/dist/workflow/owner-state.d.ts.map +1 -0
- package/dist/workflow/owner-state.js +168 -0
- package/dist/workflow/owner-state.js.map +1 -0
- package/package.json +71 -0
- package/public/admin/assets/index-BPoUSH8W.css +1 -0
- package/public/admin/assets/index-CDi1qoXB.js +1 -0
- package/public/admin/index.html +13 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KillSwitchService: 3-state machine (ACTIVE / SUSPENDED / LOCKED)
|
|
3
|
+
* with CAS (Compare-And-Swap) ACID pattern for atomic state transitions
|
|
4
|
+
* and 6-step cascade execution.
|
|
5
|
+
*
|
|
6
|
+
* State machine:
|
|
7
|
+
* ACTIVE <---> SUSPENDED ---> LOCKED
|
|
8
|
+
* LOCKED ----> ACTIVE
|
|
9
|
+
*
|
|
10
|
+
* Valid transitions:
|
|
11
|
+
* ACTIVE -> SUSPENDED (activate / suspend)
|
|
12
|
+
* SUSPENDED -> LOCKED (escalate)
|
|
13
|
+
* SUSPENDED -> ACTIVE (recover from suspended)
|
|
14
|
+
* LOCKED -> ACTIVE (recover from locked)
|
|
15
|
+
*
|
|
16
|
+
* Invalid transitions (rejected with 409):
|
|
17
|
+
* ACTIVE -> LOCKED (must escalate through SUSPENDED)
|
|
18
|
+
* LOCKED -> SUSPENDED (must recover to ACTIVE first)
|
|
19
|
+
*
|
|
20
|
+
* 6-step cascade (on activation):
|
|
21
|
+
* 1. Revoke all active sessions
|
|
22
|
+
* 2. Cancel in-flight transactions (PENDING/QUEUED/EXECUTING -> CANCELLED)
|
|
23
|
+
* 3. Suspend all ACTIVE wallets
|
|
24
|
+
* 4. API 503 (handled by kill-switch-guard middleware)
|
|
25
|
+
* 5. Send notification (KILL_SWITCH_ACTIVATED)
|
|
26
|
+
* 6. Insert audit log entry (severity: critical)
|
|
27
|
+
*
|
|
28
|
+
* CAS ACID pattern:
|
|
29
|
+
* 1. BEGIN IMMEDIATE (acquire exclusive lock)
|
|
30
|
+
* 2. UPDATE ... WHERE value = expectedState (CAS check)
|
|
31
|
+
* 3. If changes === 0 -> ROLLBACK (CAS failure)
|
|
32
|
+
* 4. UPSERT metadata (activated_at, activated_by)
|
|
33
|
+
* 5. COMMIT
|
|
34
|
+
*
|
|
35
|
+
* @see docs/36-killswitch-evm-freeze.md
|
|
36
|
+
*/
|
|
37
|
+
import type { Database } from 'better-sqlite3';
|
|
38
|
+
import type { NotificationService } from '../notifications/notification-service.js';
|
|
39
|
+
import type { EventBus } from '@waiaas/core';
|
|
40
|
+
export interface KillSwitchStateInfo {
|
|
41
|
+
state: string;
|
|
42
|
+
activatedAt: number | null;
|
|
43
|
+
activatedBy: string | null;
|
|
44
|
+
}
|
|
45
|
+
export interface CascadeResult {
|
|
46
|
+
success: boolean;
|
|
47
|
+
error?: string;
|
|
48
|
+
}
|
|
49
|
+
export declare class KillSwitchService {
|
|
50
|
+
private sqlite;
|
|
51
|
+
private notificationService?;
|
|
52
|
+
private eventBus?;
|
|
53
|
+
constructor(opts: {
|
|
54
|
+
sqlite: Database;
|
|
55
|
+
notificationService?: NotificationService;
|
|
56
|
+
eventBus?: EventBus;
|
|
57
|
+
});
|
|
58
|
+
/** Get current kill switch state from key_value_store. */
|
|
59
|
+
getState(): KillSwitchStateInfo;
|
|
60
|
+
/**
|
|
61
|
+
* ACTIVE -> SUSPENDED transition (kill switch activation).
|
|
62
|
+
* Returns true on success, false on CAS failure (state was not ACTIVE).
|
|
63
|
+
*/
|
|
64
|
+
activate(activatedBy: string): boolean;
|
|
65
|
+
/**
|
|
66
|
+
* SUSPENDED -> LOCKED transition (severity escalation).
|
|
67
|
+
* Returns true on success, false on CAS failure (state was not SUSPENDED).
|
|
68
|
+
*/
|
|
69
|
+
escalate(escalatedBy: string): boolean;
|
|
70
|
+
/**
|
|
71
|
+
* SUSPENDED -> ACTIVE transition (recovery from suspended).
|
|
72
|
+
* Returns true on success, false on CAS failure (state was not SUSPENDED).
|
|
73
|
+
*/
|
|
74
|
+
recoverFromSuspended(): boolean;
|
|
75
|
+
/**
|
|
76
|
+
* LOCKED -> ACTIVE transition (recovery from locked).
|
|
77
|
+
* Returns true on success, false on CAS failure (state was not LOCKED).
|
|
78
|
+
*/
|
|
79
|
+
recoverFromLocked(): boolean;
|
|
80
|
+
/**
|
|
81
|
+
* Ensure kill_switch_state key exists in key_value_store.
|
|
82
|
+
* Sets to ACTIVE if not present. Safe to call on every startup.
|
|
83
|
+
*/
|
|
84
|
+
ensureInitialized(): void;
|
|
85
|
+
/**
|
|
86
|
+
* Activate kill switch with 6-step cascade.
|
|
87
|
+
* CAS activate() + executeCascade() on success.
|
|
88
|
+
*/
|
|
89
|
+
activateWithCascade(activatedBy: string): CascadeResult;
|
|
90
|
+
/**
|
|
91
|
+
* Escalate kill switch with notification + audit log.
|
|
92
|
+
* CAS escalate() + notification/audit on success.
|
|
93
|
+
*/
|
|
94
|
+
escalateWithCascade(escalatedBy: string): CascadeResult;
|
|
95
|
+
/**
|
|
96
|
+
* Execute the 6-step cascade after kill switch activation.
|
|
97
|
+
*
|
|
98
|
+
* Steps:
|
|
99
|
+
* 1. Revoke all active sessions (SET revoked_at)
|
|
100
|
+
* 2. Cancel in-flight transactions (PENDING/QUEUED/EXECUTING -> CANCELLED)
|
|
101
|
+
* 3. Suspend all ACTIVE wallets
|
|
102
|
+
* 4. API 503 -- handled by middleware (no action needed here)
|
|
103
|
+
* 5. Send notification (KILL_SWITCH_ACTIVATED)
|
|
104
|
+
* 6. Insert audit log entry
|
|
105
|
+
*/
|
|
106
|
+
executeCascade(activatedBy: string): Promise<void>;
|
|
107
|
+
/**
|
|
108
|
+
* CAS transition with metadata set (for activate/escalate).
|
|
109
|
+
* Sets activated_at and activated_by on success.
|
|
110
|
+
*/
|
|
111
|
+
private casTransition;
|
|
112
|
+
/**
|
|
113
|
+
* CAS transition with metadata clear (for recovery).
|
|
114
|
+
* Clears activated_at and activated_by on success.
|
|
115
|
+
*/
|
|
116
|
+
private casTransitionWithClear;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=kill-switch-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kill-switch-service.d.ts","sourceRoot":"","sources":["../../src/services/kill-switch-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AACpF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAM7C,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,mBAAmB,CAAC,CAAsB;IAClD,OAAO,CAAC,QAAQ,CAAC,CAAW;gBAEhB,IAAI,EAAE;QAChB,MAAM,EAAE,QAAQ,CAAC;QACjB,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;QAC1C,QAAQ,CAAC,EAAE,QAAQ,CAAC;KACrB;IAMD,0DAA0D;IAC1D,QAAQ,IAAI,mBAAmB;IAoB/B;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAItC;;;OAGG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO;IAItC;;;OAGG;IACH,oBAAoB,IAAI,OAAO;IAI/B;;;OAGG;IACH,iBAAiB,IAAI,OAAO;IAI5B;;;OAGG;IACH,iBAAiB,IAAI,IAAI;IAazB;;;OAGG;IACH,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa;IAgBvD;;;OAGG;IACH,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa;IA8CvD;;;;;;;;;;OAUG;IACG,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA4ExD;;;OAGG;IACH,OAAO,CAAC,aAAa;IA+CrB;;;OAGG;IACH,OAAO,CAAC,sBAAsB;CAoC/B"}
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KillSwitchService: 3-state machine (ACTIVE / SUSPENDED / LOCKED)
|
|
3
|
+
* with CAS (Compare-And-Swap) ACID pattern for atomic state transitions
|
|
4
|
+
* and 6-step cascade execution.
|
|
5
|
+
*
|
|
6
|
+
* State machine:
|
|
7
|
+
* ACTIVE <---> SUSPENDED ---> LOCKED
|
|
8
|
+
* LOCKED ----> ACTIVE
|
|
9
|
+
*
|
|
10
|
+
* Valid transitions:
|
|
11
|
+
* ACTIVE -> SUSPENDED (activate / suspend)
|
|
12
|
+
* SUSPENDED -> LOCKED (escalate)
|
|
13
|
+
* SUSPENDED -> ACTIVE (recover from suspended)
|
|
14
|
+
* LOCKED -> ACTIVE (recover from locked)
|
|
15
|
+
*
|
|
16
|
+
* Invalid transitions (rejected with 409):
|
|
17
|
+
* ACTIVE -> LOCKED (must escalate through SUSPENDED)
|
|
18
|
+
* LOCKED -> SUSPENDED (must recover to ACTIVE first)
|
|
19
|
+
*
|
|
20
|
+
* 6-step cascade (on activation):
|
|
21
|
+
* 1. Revoke all active sessions
|
|
22
|
+
* 2. Cancel in-flight transactions (PENDING/QUEUED/EXECUTING -> CANCELLED)
|
|
23
|
+
* 3. Suspend all ACTIVE wallets
|
|
24
|
+
* 4. API 503 (handled by kill-switch-guard middleware)
|
|
25
|
+
* 5. Send notification (KILL_SWITCH_ACTIVATED)
|
|
26
|
+
* 6. Insert audit log entry (severity: critical)
|
|
27
|
+
*
|
|
28
|
+
* CAS ACID pattern:
|
|
29
|
+
* 1. BEGIN IMMEDIATE (acquire exclusive lock)
|
|
30
|
+
* 2. UPDATE ... WHERE value = expectedState (CAS check)
|
|
31
|
+
* 3. If changes === 0 -> ROLLBACK (CAS failure)
|
|
32
|
+
* 4. UPSERT metadata (activated_at, activated_by)
|
|
33
|
+
* 5. COMMIT
|
|
34
|
+
*
|
|
35
|
+
* @see docs/36-killswitch-evm-freeze.md
|
|
36
|
+
*/
|
|
37
|
+
const KV_KEY_STATE = 'kill_switch_state';
|
|
38
|
+
const KV_KEY_ACTIVATED_AT = 'kill_switch_activated_at';
|
|
39
|
+
const KV_KEY_ACTIVATED_BY = 'kill_switch_activated_by';
|
|
40
|
+
export class KillSwitchService {
|
|
41
|
+
sqlite;
|
|
42
|
+
notificationService;
|
|
43
|
+
eventBus;
|
|
44
|
+
constructor(opts) {
|
|
45
|
+
this.sqlite = opts.sqlite;
|
|
46
|
+
this.notificationService = opts.notificationService;
|
|
47
|
+
this.eventBus = opts.eventBus;
|
|
48
|
+
}
|
|
49
|
+
/** Get current kill switch state from key_value_store. */
|
|
50
|
+
getState() {
|
|
51
|
+
const stateRow = this.sqlite
|
|
52
|
+
.prepare('SELECT value FROM key_value_store WHERE key = ?')
|
|
53
|
+
.get(KV_KEY_STATE);
|
|
54
|
+
const atRow = this.sqlite
|
|
55
|
+
.prepare('SELECT value FROM key_value_store WHERE key = ?')
|
|
56
|
+
.get(KV_KEY_ACTIVATED_AT);
|
|
57
|
+
const byRow = this.sqlite
|
|
58
|
+
.prepare('SELECT value FROM key_value_store WHERE key = ?')
|
|
59
|
+
.get(KV_KEY_ACTIVATED_BY);
|
|
60
|
+
return {
|
|
61
|
+
state: stateRow?.value ?? 'ACTIVE',
|
|
62
|
+
activatedAt: atRow?.value ? parseInt(atRow.value, 10) : null,
|
|
63
|
+
activatedBy: byRow?.value ?? null,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* ACTIVE -> SUSPENDED transition (kill switch activation).
|
|
68
|
+
* Returns true on success, false on CAS failure (state was not ACTIVE).
|
|
69
|
+
*/
|
|
70
|
+
activate(activatedBy) {
|
|
71
|
+
return this.casTransition('ACTIVE', 'SUSPENDED', activatedBy);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* SUSPENDED -> LOCKED transition (severity escalation).
|
|
75
|
+
* Returns true on success, false on CAS failure (state was not SUSPENDED).
|
|
76
|
+
*/
|
|
77
|
+
escalate(escalatedBy) {
|
|
78
|
+
return this.casTransition('SUSPENDED', 'LOCKED', escalatedBy);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* SUSPENDED -> ACTIVE transition (recovery from suspended).
|
|
82
|
+
* Returns true on success, false on CAS failure (state was not SUSPENDED).
|
|
83
|
+
*/
|
|
84
|
+
recoverFromSuspended() {
|
|
85
|
+
return this.casTransitionWithClear('SUSPENDED', 'ACTIVE');
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* LOCKED -> ACTIVE transition (recovery from locked).
|
|
89
|
+
* Returns true on success, false on CAS failure (state was not LOCKED).
|
|
90
|
+
*/
|
|
91
|
+
recoverFromLocked() {
|
|
92
|
+
return this.casTransitionWithClear('LOCKED', 'ACTIVE');
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Ensure kill_switch_state key exists in key_value_store.
|
|
96
|
+
* Sets to ACTIVE if not present. Safe to call on every startup.
|
|
97
|
+
*/
|
|
98
|
+
ensureInitialized() {
|
|
99
|
+
const now = Math.floor(Date.now() / 1000);
|
|
100
|
+
this.sqlite
|
|
101
|
+
.prepare('INSERT OR IGNORE INTO key_value_store (key, value, updated_at) VALUES (?, ?, ?)')
|
|
102
|
+
.run(KV_KEY_STATE, 'ACTIVE', now);
|
|
103
|
+
}
|
|
104
|
+
// -----------------------------------------------------------------------
|
|
105
|
+
// Cascade methods
|
|
106
|
+
// -----------------------------------------------------------------------
|
|
107
|
+
/**
|
|
108
|
+
* Activate kill switch with 6-step cascade.
|
|
109
|
+
* CAS activate() + executeCascade() on success.
|
|
110
|
+
*/
|
|
111
|
+
activateWithCascade(activatedBy) {
|
|
112
|
+
const success = this.activate(activatedBy);
|
|
113
|
+
if (!success) {
|
|
114
|
+
const current = this.getState();
|
|
115
|
+
return {
|
|
116
|
+
success: false,
|
|
117
|
+
error: `Kill switch is already ${current.state}`,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
// Execute cascade (fire-and-forget for async parts like notifications)
|
|
121
|
+
void this.executeCascade(activatedBy);
|
|
122
|
+
return { success: true };
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Escalate kill switch with notification + audit log.
|
|
126
|
+
* CAS escalate() + notification/audit on success.
|
|
127
|
+
*/
|
|
128
|
+
escalateWithCascade(escalatedBy) {
|
|
129
|
+
const success = this.escalate(escalatedBy);
|
|
130
|
+
if (!success) {
|
|
131
|
+
const current = this.getState();
|
|
132
|
+
return {
|
|
133
|
+
success: false,
|
|
134
|
+
error: `Cannot escalate from ${current.state} (must be SUSPENDED)`,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
// Step: Send escalation notification
|
|
138
|
+
void this.notificationService?.notify('KILL_SWITCH_ESCALATED', 'system', { escalatedBy });
|
|
139
|
+
// Step: Audit log
|
|
140
|
+
const now = Math.floor(Date.now() / 1000);
|
|
141
|
+
try {
|
|
142
|
+
this.sqlite
|
|
143
|
+
.prepare('INSERT INTO audit_log (timestamp, event_type, actor, details, severity) VALUES (?, ?, ?, ?, ?)')
|
|
144
|
+
.run(now, 'KILL_SWITCH_ESCALATED', escalatedBy, JSON.stringify({ action: 'kill_switch_escalated', escalatedBy }), 'critical');
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
// Best-effort audit logging
|
|
148
|
+
}
|
|
149
|
+
// EventBus emit
|
|
150
|
+
this.eventBus?.emit('kill-switch:state-changed', {
|
|
151
|
+
state: 'LOCKED',
|
|
152
|
+
previousState: 'SUSPENDED',
|
|
153
|
+
activatedBy: escalatedBy,
|
|
154
|
+
timestamp: now,
|
|
155
|
+
});
|
|
156
|
+
return { success: true };
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Execute the 6-step cascade after kill switch activation.
|
|
160
|
+
*
|
|
161
|
+
* Steps:
|
|
162
|
+
* 1. Revoke all active sessions (SET revoked_at)
|
|
163
|
+
* 2. Cancel in-flight transactions (PENDING/QUEUED/EXECUTING -> CANCELLED)
|
|
164
|
+
* 3. Suspend all ACTIVE wallets
|
|
165
|
+
* 4. API 503 -- handled by middleware (no action needed here)
|
|
166
|
+
* 5. Send notification (KILL_SWITCH_ACTIVATED)
|
|
167
|
+
* 6. Insert audit log entry
|
|
168
|
+
*/
|
|
169
|
+
async executeCascade(activatedBy) {
|
|
170
|
+
const now = Math.floor(Date.now() / 1000);
|
|
171
|
+
// Step 1: Revoke all active sessions
|
|
172
|
+
try {
|
|
173
|
+
this.sqlite
|
|
174
|
+
.prepare('UPDATE sessions SET revoked_at = ? WHERE revoked_at IS NULL')
|
|
175
|
+
.run(now);
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
// Best-effort: continue cascade even if step fails
|
|
179
|
+
}
|
|
180
|
+
// Step 2: Cancel in-flight transactions
|
|
181
|
+
try {
|
|
182
|
+
this.sqlite
|
|
183
|
+
.prepare("UPDATE transactions SET status = 'CANCELLED', error = 'Kill switch activated' WHERE status IN ('PENDING', 'QUEUED', 'EXECUTING')")
|
|
184
|
+
.run();
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
// Best-effort
|
|
188
|
+
}
|
|
189
|
+
// Step 3: Suspend all ACTIVE wallets
|
|
190
|
+
try {
|
|
191
|
+
this.sqlite
|
|
192
|
+
.prepare("UPDATE wallets SET status = 'SUSPENDED', suspended_at = ?, suspension_reason = 'Kill switch activated' WHERE status = 'ACTIVE'")
|
|
193
|
+
.run(now);
|
|
194
|
+
}
|
|
195
|
+
catch {
|
|
196
|
+
// Best-effort
|
|
197
|
+
}
|
|
198
|
+
// Step 4: API 503 is handled by killSwitchGuard middleware
|
|
199
|
+
// (KillSwitchService state is SUSPENDED/LOCKED -> middleware blocks)
|
|
200
|
+
// Step 5: Send notification
|
|
201
|
+
void this.notificationService?.notify('KILL_SWITCH_ACTIVATED', 'system', { activatedBy });
|
|
202
|
+
// Step 6: Audit log
|
|
203
|
+
try {
|
|
204
|
+
this.sqlite
|
|
205
|
+
.prepare('INSERT INTO audit_log (timestamp, event_type, actor, details, severity) VALUES (?, ?, ?, ?, ?)')
|
|
206
|
+
.run(now, 'KILL_SWITCH_ACTIVATED', activatedBy, JSON.stringify({ action: 'kill_switch_activated', activatedBy }), 'critical');
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
// Best-effort audit logging
|
|
210
|
+
}
|
|
211
|
+
// EventBus emit
|
|
212
|
+
this.eventBus?.emit('kill-switch:state-changed', {
|
|
213
|
+
state: 'SUSPENDED',
|
|
214
|
+
previousState: 'ACTIVE',
|
|
215
|
+
activatedBy,
|
|
216
|
+
timestamp: now,
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
// -----------------------------------------------------------------------
|
|
220
|
+
// CAS transition internals
|
|
221
|
+
// -----------------------------------------------------------------------
|
|
222
|
+
/**
|
|
223
|
+
* CAS transition with metadata set (for activate/escalate).
|
|
224
|
+
* Sets activated_at and activated_by on success.
|
|
225
|
+
*/
|
|
226
|
+
casTransition(expectedState, newState, actorName) {
|
|
227
|
+
const now = Math.floor(Date.now() / 1000);
|
|
228
|
+
try {
|
|
229
|
+
this.sqlite.exec('BEGIN IMMEDIATE');
|
|
230
|
+
const result = this.sqlite
|
|
231
|
+
.prepare('UPDATE key_value_store SET value = ?, updated_at = ? WHERE key = ? AND value = ?')
|
|
232
|
+
.run(newState, now, KV_KEY_STATE, expectedState);
|
|
233
|
+
if (result.changes === 0) {
|
|
234
|
+
this.sqlite.exec('ROLLBACK');
|
|
235
|
+
return false;
|
|
236
|
+
}
|
|
237
|
+
// UPSERT activated_at
|
|
238
|
+
this.sqlite
|
|
239
|
+
.prepare('INSERT INTO key_value_store (key, value, updated_at) VALUES (?, ?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value, updated_at = excluded.updated_at')
|
|
240
|
+
.run(KV_KEY_ACTIVATED_AT, String(now), now);
|
|
241
|
+
// UPSERT activated_by
|
|
242
|
+
this.sqlite
|
|
243
|
+
.prepare('INSERT INTO key_value_store (key, value, updated_at) VALUES (?, ?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value, updated_at = excluded.updated_at')
|
|
244
|
+
.run(KV_KEY_ACTIVATED_BY, actorName, now);
|
|
245
|
+
this.sqlite.exec('COMMIT');
|
|
246
|
+
return true;
|
|
247
|
+
}
|
|
248
|
+
catch (err) {
|
|
249
|
+
try {
|
|
250
|
+
this.sqlite.exec('ROLLBACK');
|
|
251
|
+
}
|
|
252
|
+
catch {
|
|
253
|
+
/* best effort */
|
|
254
|
+
}
|
|
255
|
+
throw err;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* CAS transition with metadata clear (for recovery).
|
|
260
|
+
* Clears activated_at and activated_by on success.
|
|
261
|
+
*/
|
|
262
|
+
casTransitionWithClear(expectedState, newState) {
|
|
263
|
+
const now = Math.floor(Date.now() / 1000);
|
|
264
|
+
try {
|
|
265
|
+
this.sqlite.exec('BEGIN IMMEDIATE');
|
|
266
|
+
const result = this.sqlite
|
|
267
|
+
.prepare('UPDATE key_value_store SET value = ?, updated_at = ? WHERE key = ? AND value = ?')
|
|
268
|
+
.run(newState, now, KV_KEY_STATE, expectedState);
|
|
269
|
+
if (result.changes === 0) {
|
|
270
|
+
this.sqlite.exec('ROLLBACK');
|
|
271
|
+
return false;
|
|
272
|
+
}
|
|
273
|
+
// Clear activated_at and activated_by
|
|
274
|
+
this.sqlite
|
|
275
|
+
.prepare('DELETE FROM key_value_store WHERE key IN (?, ?)')
|
|
276
|
+
.run(KV_KEY_ACTIVATED_AT, KV_KEY_ACTIVATED_BY);
|
|
277
|
+
this.sqlite.exec('COMMIT');
|
|
278
|
+
return true;
|
|
279
|
+
}
|
|
280
|
+
catch (err) {
|
|
281
|
+
try {
|
|
282
|
+
this.sqlite.exec('ROLLBACK');
|
|
283
|
+
}
|
|
284
|
+
catch {
|
|
285
|
+
/* best effort */
|
|
286
|
+
}
|
|
287
|
+
throw err;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=kill-switch-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kill-switch-service.js","sourceRoot":"","sources":["../../src/services/kill-switch-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BalanceMonitorService: periodic native-token balance check for all active wallets.
|
|
3
|
+
*
|
|
4
|
+
* Checks all ACTIVE wallets at a configurable interval (default 5 minutes).
|
|
5
|
+
* When a wallet's native balance drops below the chain-specific threshold,
|
|
6
|
+
* a LOW_BALANCE notification is sent via NotificationService.
|
|
7
|
+
*
|
|
8
|
+
* Features:
|
|
9
|
+
* - Chain-specific thresholds (SOL 0.01, ETH 0.005)
|
|
10
|
+
* - 24-hour cooldown to prevent duplicate alerts (BMON-03)
|
|
11
|
+
* - Recovery detection: re-alert if balance recovers then drops again (BMON-04)
|
|
12
|
+
* - Per-wallet error isolation: one wallet failure does not block others
|
|
13
|
+
* - Runtime configuration updates (updateConfig)
|
|
14
|
+
*
|
|
15
|
+
* @see BMON-01, BMON-02, BMON-03, BMON-04, BMON-05, BMON-06 requirements
|
|
16
|
+
*/
|
|
17
|
+
import type { Database } from 'better-sqlite3';
|
|
18
|
+
import type { AdapterPool } from '../../infrastructure/adapter-pool.js';
|
|
19
|
+
import type { NotificationService } from '../../notifications/notification-service.js';
|
|
20
|
+
export interface BalanceMonitorConfig {
|
|
21
|
+
checkIntervalSec: number;
|
|
22
|
+
lowBalanceThresholdSol: number;
|
|
23
|
+
lowBalanceThresholdEth: number;
|
|
24
|
+
cooldownHours: number;
|
|
25
|
+
enabled: boolean;
|
|
26
|
+
}
|
|
27
|
+
export declare const DEFAULT_BALANCE_MONITOR_CONFIG: BalanceMonitorConfig;
|
|
28
|
+
export declare class BalanceMonitorService {
|
|
29
|
+
private sqlite;
|
|
30
|
+
private adapterPool;
|
|
31
|
+
private rpcConfig;
|
|
32
|
+
private notificationService?;
|
|
33
|
+
private config;
|
|
34
|
+
private lastNotified;
|
|
35
|
+
private checkTimer;
|
|
36
|
+
constructor(opts: {
|
|
37
|
+
sqlite: Database;
|
|
38
|
+
adapterPool: AdapterPool;
|
|
39
|
+
config: {
|
|
40
|
+
rpc: Record<string, string>;
|
|
41
|
+
};
|
|
42
|
+
notificationService?: NotificationService;
|
|
43
|
+
monitorConfig?: Partial<BalanceMonitorConfig>;
|
|
44
|
+
});
|
|
45
|
+
/** Start periodic balance checking. */
|
|
46
|
+
start(): void;
|
|
47
|
+
/** Stop periodic balance checking. */
|
|
48
|
+
stop(): void;
|
|
49
|
+
/** Check balances of all ACTIVE wallets. */
|
|
50
|
+
checkAllWallets(): Promise<void>;
|
|
51
|
+
private checkWallet;
|
|
52
|
+
private getThreshold;
|
|
53
|
+
private shouldNotify;
|
|
54
|
+
private notifyLowBalance;
|
|
55
|
+
private markRecovered;
|
|
56
|
+
/** Update configuration at runtime (e.g., from Admin Settings). */
|
|
57
|
+
updateConfig(config: Partial<BalanceMonitorConfig>): void;
|
|
58
|
+
/** Get current monitoring status for debugging. */
|
|
59
|
+
getStatus(): {
|
|
60
|
+
enabled: boolean;
|
|
61
|
+
config: BalanceMonitorConfig;
|
|
62
|
+
trackedWallets: number;
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=balance-monitor-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"balance-monitor-service.d.ts","sourceRoot":"","sources":["../../../src/services/monitoring/balance-monitor-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAExE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,6CAA6C,CAAC;AAMvF,MAAM,WAAW,oBAAoB;IACnC,gBAAgB,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,eAAO,MAAM,8BAA8B,EAAE,oBAM5C,CAAC;AAuBF,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,SAAS,CAAyB;IAC1C,OAAO,CAAC,mBAAmB,CAAC,CAAsB;IAClD,OAAO,CAAC,MAAM,CAAuB;IAGrC,OAAO,CAAC,YAAY,CAAkC;IAGtD,OAAO,CAAC,UAAU,CAA+C;gBAErD,IAAI,EAAE;QAChB,MAAM,EAAE,QAAQ,CAAC;QACjB,WAAW,EAAE,WAAW,CAAC;QACzB,MAAM,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;SAAE,CAAC;QACxC,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;QAC1C,aAAa,CAAC,EAAE,OAAO,CAAC,oBAAoB,CAAC,CAAC;KAC/C;IAYD,uCAAuC;IACvC,KAAK,IAAI,IAAI;IAQb,sCAAsC;IACtC,IAAI,IAAI,IAAI;IAWZ,4CAA4C;IACtC,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;YAoBxB,WAAW;IAsCzB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,YAAY;IAgBpB,OAAO,CAAC,gBAAgB;IAuBxB,OAAO,CAAC,aAAa;IAarB,mEAAmE;IACnE,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI;IA6BzD,mDAAmD;IACnD,SAAS,IAAI;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,EAAE,oBAAoB,CAAC;QAC7B,cAAc,EAAE,MAAM,CAAC;KACxB;CAOF"}
|