@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,239 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ActionProviderRegistry -- manages IActionProvider registration, lookup, and execution.
|
|
3
|
+
*
|
|
4
|
+
* Responsibilities:
|
|
5
|
+
* 1. Register/unregister IActionProvider implementations with Zod validation
|
|
6
|
+
* 2. Look up providers and actions by name (providerName/actionName key format)
|
|
7
|
+
* 3. Execute resolve() with input validation + return value re-validation
|
|
8
|
+
* 4. Load ESM plugins from ~/.waiaas/actions/ directory
|
|
9
|
+
*
|
|
10
|
+
* Design source: doc 62 (action-provider-architecture).
|
|
11
|
+
*/
|
|
12
|
+
import { readdir } from 'node:fs/promises';
|
|
13
|
+
import { join } from 'node:path';
|
|
14
|
+
import { pathToFileURL } from 'node:url';
|
|
15
|
+
import { readFile } from 'node:fs/promises';
|
|
16
|
+
import { WAIaaSError, ContractCallRequestSchema, ActionProviderMetadataSchema, ActionDefinitionSchema, } from '@waiaas/core';
|
|
17
|
+
/**
|
|
18
|
+
* ActionProviderRegistry manages provider registration, action lookup,
|
|
19
|
+
* and resolve() execution with schema validation.
|
|
20
|
+
*/
|
|
21
|
+
export class ActionProviderRegistry {
|
|
22
|
+
providers = new Map();
|
|
23
|
+
actions = new Map();
|
|
24
|
+
/**
|
|
25
|
+
* Register an IActionProvider implementation.
|
|
26
|
+
* Validates metadata and action definitions with Zod schemas.
|
|
27
|
+
* Checks inputSchema duck typing (parse/safeParse functions).
|
|
28
|
+
* @throws WAIaaSError('ACTION_NAME_CONFLICT') if provider name is already registered.
|
|
29
|
+
*/
|
|
30
|
+
register(provider) {
|
|
31
|
+
// Validate metadata via Zod SSoT
|
|
32
|
+
const metadata = ActionProviderMetadataSchema.parse(provider.metadata);
|
|
33
|
+
// Check name conflict
|
|
34
|
+
if (this.providers.has(metadata.name)) {
|
|
35
|
+
throw new WAIaaSError('ACTION_NAME_CONFLICT', {
|
|
36
|
+
message: `Action provider '${metadata.name}' is already registered`,
|
|
37
|
+
details: { providerName: metadata.name },
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
// Validate each action definition
|
|
41
|
+
for (const action of provider.actions) {
|
|
42
|
+
ActionDefinitionSchema.parse(action);
|
|
43
|
+
// Duck-typing validation for inputSchema (cross-zod-version compatibility)
|
|
44
|
+
if (typeof action.inputSchema?.parse !== 'function' ||
|
|
45
|
+
typeof action.inputSchema?.safeParse !== 'function') {
|
|
46
|
+
throw new WAIaaSError('ACTION_VALIDATION_FAILED', {
|
|
47
|
+
message: `Action '${action.name}' inputSchema must have parse() and safeParse() methods`,
|
|
48
|
+
details: { providerName: metadata.name, actionName: action.name },
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
// Register action with providerName/actionName key
|
|
52
|
+
const actionKey = `${metadata.name}/${action.name}`;
|
|
53
|
+
this.actions.set(actionKey, { provider, action });
|
|
54
|
+
}
|
|
55
|
+
this.providers.set(metadata.name, provider);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Unregister a provider and all its actions.
|
|
59
|
+
* @returns true if the provider was found and removed, false otherwise.
|
|
60
|
+
*/
|
|
61
|
+
unregister(providerName) {
|
|
62
|
+
const provider = this.providers.get(providerName);
|
|
63
|
+
if (!provider)
|
|
64
|
+
return false;
|
|
65
|
+
// Remove all actions belonging to this provider
|
|
66
|
+
for (const action of provider.actions) {
|
|
67
|
+
this.actions.delete(`${providerName}/${action.name}`);
|
|
68
|
+
}
|
|
69
|
+
this.providers.delete(providerName);
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Get a registered provider by name.
|
|
74
|
+
*/
|
|
75
|
+
getProvider(name) {
|
|
76
|
+
return this.providers.get(name);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Get an action entry by key (providerName/actionName).
|
|
80
|
+
*/
|
|
81
|
+
getAction(key) {
|
|
82
|
+
return this.actions.get(key);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* List metadata for all registered providers.
|
|
86
|
+
*/
|
|
87
|
+
listProviders() {
|
|
88
|
+
return Array.from(this.providers.values()).map((p) => p.metadata);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* List actions, optionally filtered by provider name.
|
|
92
|
+
*/
|
|
93
|
+
listActions(providerName) {
|
|
94
|
+
const result = [];
|
|
95
|
+
for (const [key, entry] of this.actions) {
|
|
96
|
+
const pName = key.split('/')[0] ?? key;
|
|
97
|
+
if (providerName && pName !== providerName)
|
|
98
|
+
continue;
|
|
99
|
+
result.push({ providerName: pName, action: entry.action });
|
|
100
|
+
}
|
|
101
|
+
return result;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get actions from providers with mcpExpose=true.
|
|
105
|
+
*/
|
|
106
|
+
getMcpExposedActions() {
|
|
107
|
+
const result = [];
|
|
108
|
+
for (const entry of this.actions.values()) {
|
|
109
|
+
if (entry.provider.metadata.mcpExpose) {
|
|
110
|
+
result.push(entry);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return result;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Execute an action's resolve() with full validation pipeline:
|
|
117
|
+
* 1. Lookup action by key
|
|
118
|
+
* 2. Validate input params via action.inputSchema.parse()
|
|
119
|
+
* 3. Call provider.resolve()
|
|
120
|
+
* 4. Re-validate result via ContractCallRequestSchema.parse()
|
|
121
|
+
*
|
|
122
|
+
* @throws WAIaaSError('ACTION_NOT_FOUND') if action key not found
|
|
123
|
+
* @throws WAIaaSError('ACTION_VALIDATION_FAILED') if input validation fails
|
|
124
|
+
* @throws WAIaaSError('ACTION_RETURN_INVALID') if resolve() return value is invalid
|
|
125
|
+
*/
|
|
126
|
+
async executeResolve(actionKey, params, context) {
|
|
127
|
+
// 1. Lookup action
|
|
128
|
+
const entry = this.actions.get(actionKey);
|
|
129
|
+
if (!entry) {
|
|
130
|
+
throw new WAIaaSError('ACTION_NOT_FOUND', {
|
|
131
|
+
message: `Action '${actionKey}' not found`,
|
|
132
|
+
details: { actionKey },
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
// 2. Validate input params
|
|
136
|
+
try {
|
|
137
|
+
entry.action.inputSchema.parse(params);
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
throw new WAIaaSError('ACTION_VALIDATION_FAILED', {
|
|
141
|
+
message: `Input validation failed for action '${actionKey}'`,
|
|
142
|
+
details: { actionKey, validationErrors: err.message },
|
|
143
|
+
cause: err,
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
// 3. Call provider.resolve()
|
|
147
|
+
const result = await entry.provider.resolve(entry.action.name, params, context);
|
|
148
|
+
// 4. Re-validate return value (prevent policy bypass)
|
|
149
|
+
try {
|
|
150
|
+
return ContractCallRequestSchema.parse(result);
|
|
151
|
+
}
|
|
152
|
+
catch (err) {
|
|
153
|
+
throw new WAIaaSError('ACTION_RETURN_INVALID', {
|
|
154
|
+
message: `Resolve return value schema validation failed for action '${actionKey}'`,
|
|
155
|
+
details: { actionKey },
|
|
156
|
+
cause: err,
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Load ESM plugins from a directory. Each subdirectory is a plugin.
|
|
162
|
+
* Individual plugin failures are logged and skipped (fail-open).
|
|
163
|
+
*
|
|
164
|
+
* @returns Object with loaded/failed plugin names.
|
|
165
|
+
*/
|
|
166
|
+
async loadPlugins(actionsDir) {
|
|
167
|
+
const loaded = [];
|
|
168
|
+
const failed = [];
|
|
169
|
+
let entries;
|
|
170
|
+
try {
|
|
171
|
+
entries = await readdir(actionsDir, { withFileTypes: true });
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
// Directory doesn't exist or not readable -- not an error
|
|
175
|
+
return { loaded, failed };
|
|
176
|
+
}
|
|
177
|
+
for (const entry of entries) {
|
|
178
|
+
if (!entry.isDirectory())
|
|
179
|
+
continue;
|
|
180
|
+
try {
|
|
181
|
+
await this.loadSinglePlugin(join(actionsDir, entry.name), entry.name);
|
|
182
|
+
loaded.push(entry.name);
|
|
183
|
+
}
|
|
184
|
+
catch (error) {
|
|
185
|
+
console.warn(`Plugin load failed (skipped): ${entry.name}`, error instanceof Error ? error.message : error);
|
|
186
|
+
failed.push(entry.name);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return { loaded, failed };
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Load a single ESM plugin from a directory.
|
|
193
|
+
*/
|
|
194
|
+
async loadSinglePlugin(pluginDir, pluginName) {
|
|
195
|
+
// 1. Read package.json
|
|
196
|
+
const pkgPath = join(pluginDir, 'package.json');
|
|
197
|
+
let pkg;
|
|
198
|
+
try {
|
|
199
|
+
const raw = await readFile(pkgPath, 'utf-8');
|
|
200
|
+
pkg = JSON.parse(raw);
|
|
201
|
+
}
|
|
202
|
+
catch {
|
|
203
|
+
throw new Error(`Plugin '${pluginName}': package.json not found or invalid`);
|
|
204
|
+
}
|
|
205
|
+
// Verify ESM module
|
|
206
|
+
if (pkg.type !== 'module') {
|
|
207
|
+
throw new Error(`Plugin '${pluginName}': package.json must have "type": "module"`);
|
|
208
|
+
}
|
|
209
|
+
// 2. Determine entry point
|
|
210
|
+
const mainFile = pkg.main || 'index.js';
|
|
211
|
+
const mainPath = join(pluginDir, mainFile);
|
|
212
|
+
// 3. ESM dynamic import via file:// URL
|
|
213
|
+
const moduleUrl = pathToFileURL(mainPath).href;
|
|
214
|
+
const module = await import(moduleUrl);
|
|
215
|
+
// 4. Extract default export
|
|
216
|
+
let provider;
|
|
217
|
+
const defaultExport = module.default;
|
|
218
|
+
if (!defaultExport) {
|
|
219
|
+
throw new Error(`Plugin '${pluginName}': no default export found`);
|
|
220
|
+
}
|
|
221
|
+
// Handle class (constructor), factory function, or plain object
|
|
222
|
+
if (typeof defaultExport === 'function') {
|
|
223
|
+
try {
|
|
224
|
+
// Try as constructor (class)
|
|
225
|
+
provider = new defaultExport();
|
|
226
|
+
}
|
|
227
|
+
catch {
|
|
228
|
+
// Fall back to factory function
|
|
229
|
+
provider = defaultExport();
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
provider = defaultExport;
|
|
234
|
+
}
|
|
235
|
+
// 5. Register (validates metadata/actions via Zod)
|
|
236
|
+
this.register(provider);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
//# sourceMappingURL=action-provider-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"action-provider-registry.js","sourceRoot":"","sources":["../../../src/infrastructure/action/action-provider-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ApiKeyStore -- encrypted storage for Action Provider API keys.
|
|
3
|
+
*
|
|
4
|
+
* Uses the same HKDF + AES-256-GCM pattern as settings-crypto.ts to
|
|
5
|
+
* encrypt API keys before DB storage and decrypt on retrieval.
|
|
6
|
+
*
|
|
7
|
+
* Each provider has a single API key row (provider_name = PK).
|
|
8
|
+
* set() performs upsert (insert or update).
|
|
9
|
+
*
|
|
10
|
+
* @see settings-crypto.ts for encryption internals
|
|
11
|
+
*/
|
|
12
|
+
import type { BetterSQLite3Database } from 'drizzle-orm/better-sqlite3';
|
|
13
|
+
import type * as schema from '../database/schema.js';
|
|
14
|
+
export interface ApiKeyListEntry {
|
|
15
|
+
providerName: string;
|
|
16
|
+
hasKey: boolean;
|
|
17
|
+
maskedKey: string | null;
|
|
18
|
+
updatedAt: Date;
|
|
19
|
+
}
|
|
20
|
+
export declare class ApiKeyStore {
|
|
21
|
+
private readonly db;
|
|
22
|
+
private readonly masterPassword;
|
|
23
|
+
constructor(db: BetterSQLite3Database<typeof schema>, masterPassword: string);
|
|
24
|
+
/**
|
|
25
|
+
* Store or update an API key for a provider. The key is encrypted with
|
|
26
|
+
* AES-256-GCM before storage. createdAt is set only on insert;
|
|
27
|
+
* updatedAt is always refreshed.
|
|
28
|
+
*/
|
|
29
|
+
set(providerName: string, apiKey: string): void;
|
|
30
|
+
/**
|
|
31
|
+
* Retrieve and decrypt an API key for a provider.
|
|
32
|
+
* Returns null if no key is stored for this provider.
|
|
33
|
+
*/
|
|
34
|
+
get(providerName: string): string | null;
|
|
35
|
+
/**
|
|
36
|
+
* Retrieve a masked version of the API key for display purposes.
|
|
37
|
+
*
|
|
38
|
+
* Masking rules:
|
|
39
|
+
* - length > 6: first 4 chars + '...' + last 2 chars
|
|
40
|
+
* - length 4-6: first 2 chars + '...'
|
|
41
|
+
* - length < 4: '****'
|
|
42
|
+
*
|
|
43
|
+
* Returns null if no key is stored for this provider.
|
|
44
|
+
*/
|
|
45
|
+
getMasked(providerName: string): string | null;
|
|
46
|
+
/**
|
|
47
|
+
* Check whether a key exists for a provider (without decrypting).
|
|
48
|
+
*/
|
|
49
|
+
has(providerName: string): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Delete an API key for a provider.
|
|
52
|
+
* Returns true if a row was deleted, false if no row existed.
|
|
53
|
+
*/
|
|
54
|
+
delete(providerName: string): boolean;
|
|
55
|
+
/**
|
|
56
|
+
* List all stored API keys with masked values.
|
|
57
|
+
*/
|
|
58
|
+
listAll(): ApiKeyListEntry[];
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=api-key-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-key-store.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/action/api-key-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,KAAK,MAAM,MAAM,uBAAuB,CAAC;AAQrD,MAAM,WAAW,eAAe;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,SAAS,EAAE,IAAI,CAAC;CACjB;AAMD,qBAAa,WAAW;IAEpB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,cAAc;gBADd,EAAE,EAAE,qBAAqB,CAAC,OAAO,MAAM,CAAC,EACxC,cAAc,EAAE,MAAM;IAGzC;;;;OAIG;IACH,GAAG,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAsB/C;;;OAGG;IACH,GAAG,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAWxC;;;;;;;;;OASG;IACH,SAAS,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAM9C;;OAEG;IACH,GAAG,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAUlC;;;OAGG;IACH,MAAM,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IASrC;;OAEG;IACH,OAAO,IAAI,eAAe,EAAE;CAa7B"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ApiKeyStore -- encrypted storage for Action Provider API keys.
|
|
3
|
+
*
|
|
4
|
+
* Uses the same HKDF + AES-256-GCM pattern as settings-crypto.ts to
|
|
5
|
+
* encrypt API keys before DB storage and decrypt on retrieval.
|
|
6
|
+
*
|
|
7
|
+
* Each provider has a single API key row (provider_name = PK).
|
|
8
|
+
* set() performs upsert (insert or update).
|
|
9
|
+
*
|
|
10
|
+
* @see settings-crypto.ts for encryption internals
|
|
11
|
+
*/
|
|
12
|
+
import { eq } from 'drizzle-orm';
|
|
13
|
+
import { apiKeys } from '../database/schema.js';
|
|
14
|
+
import { encryptSettingValue, decryptSettingValue } from '../settings/settings-crypto.js';
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
// ApiKeyStore
|
|
17
|
+
// ---------------------------------------------------------------------------
|
|
18
|
+
export class ApiKeyStore {
|
|
19
|
+
db;
|
|
20
|
+
masterPassword;
|
|
21
|
+
constructor(db, masterPassword) {
|
|
22
|
+
this.db = db;
|
|
23
|
+
this.masterPassword = masterPassword;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Store or update an API key for a provider. The key is encrypted with
|
|
27
|
+
* AES-256-GCM before storage. createdAt is set only on insert;
|
|
28
|
+
* updatedAt is always refreshed.
|
|
29
|
+
*/
|
|
30
|
+
set(providerName, apiKey) {
|
|
31
|
+
const encrypted = encryptSettingValue(apiKey, this.masterPassword);
|
|
32
|
+
const now = new Date(Math.floor(Date.now() / 1000) * 1000);
|
|
33
|
+
this.db
|
|
34
|
+
.insert(apiKeys)
|
|
35
|
+
.values({
|
|
36
|
+
providerName,
|
|
37
|
+
encryptedKey: encrypted,
|
|
38
|
+
createdAt: now,
|
|
39
|
+
updatedAt: now,
|
|
40
|
+
})
|
|
41
|
+
.onConflictDoUpdate({
|
|
42
|
+
target: apiKeys.providerName,
|
|
43
|
+
set: {
|
|
44
|
+
encryptedKey: encrypted,
|
|
45
|
+
updatedAt: now,
|
|
46
|
+
},
|
|
47
|
+
})
|
|
48
|
+
.run();
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Retrieve and decrypt an API key for a provider.
|
|
52
|
+
* Returns null if no key is stored for this provider.
|
|
53
|
+
*/
|
|
54
|
+
get(providerName) {
|
|
55
|
+
const row = this.db
|
|
56
|
+
.select()
|
|
57
|
+
.from(apiKeys)
|
|
58
|
+
.where(eq(apiKeys.providerName, providerName))
|
|
59
|
+
.get();
|
|
60
|
+
if (!row)
|
|
61
|
+
return null;
|
|
62
|
+
return decryptSettingValue(row.encryptedKey, this.masterPassword);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Retrieve a masked version of the API key for display purposes.
|
|
66
|
+
*
|
|
67
|
+
* Masking rules:
|
|
68
|
+
* - length > 6: first 4 chars + '...' + last 2 chars
|
|
69
|
+
* - length 4-6: first 2 chars + '...'
|
|
70
|
+
* - length < 4: '****'
|
|
71
|
+
*
|
|
72
|
+
* Returns null if no key is stored for this provider.
|
|
73
|
+
*/
|
|
74
|
+
getMasked(providerName) {
|
|
75
|
+
const key = this.get(providerName);
|
|
76
|
+
if (key === null)
|
|
77
|
+
return null;
|
|
78
|
+
return maskKey(key);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Check whether a key exists for a provider (without decrypting).
|
|
82
|
+
*/
|
|
83
|
+
has(providerName) {
|
|
84
|
+
const row = this.db
|
|
85
|
+
.select({ providerName: apiKeys.providerName })
|
|
86
|
+
.from(apiKeys)
|
|
87
|
+
.where(eq(apiKeys.providerName, providerName))
|
|
88
|
+
.get();
|
|
89
|
+
return row !== undefined;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Delete an API key for a provider.
|
|
93
|
+
* Returns true if a row was deleted, false if no row existed.
|
|
94
|
+
*/
|
|
95
|
+
delete(providerName) {
|
|
96
|
+
const result = this.db
|
|
97
|
+
.delete(apiKeys)
|
|
98
|
+
.where(eq(apiKeys.providerName, providerName))
|
|
99
|
+
.run();
|
|
100
|
+
return result.changes > 0;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* List all stored API keys with masked values.
|
|
104
|
+
*/
|
|
105
|
+
listAll() {
|
|
106
|
+
const rows = this.db.select().from(apiKeys).all();
|
|
107
|
+
return rows.map((row) => {
|
|
108
|
+
const decrypted = decryptSettingValue(row.encryptedKey, this.masterPassword);
|
|
109
|
+
return {
|
|
110
|
+
providerName: row.providerName,
|
|
111
|
+
hasKey: true,
|
|
112
|
+
maskedKey: maskKey(decrypted),
|
|
113
|
+
updatedAt: row.updatedAt,
|
|
114
|
+
};
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// ---------------------------------------------------------------------------
|
|
119
|
+
// Internal helpers
|
|
120
|
+
// ---------------------------------------------------------------------------
|
|
121
|
+
function maskKey(key) {
|
|
122
|
+
if (key.length > 6) {
|
|
123
|
+
return key.slice(0, 4) + '...' + key.slice(-2);
|
|
124
|
+
}
|
|
125
|
+
if (key.length >= 4) {
|
|
126
|
+
return key.slice(0, 2) + '...';
|
|
127
|
+
}
|
|
128
|
+
return '****';
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=api-key-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-key-store.js","sourceRoot":"","sources":["../../../src/infrastructure/action/api-key-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Action infrastructure module barrel export.
|
|
3
|
+
*
|
|
4
|
+
* Re-exports the ActionProviderRegistry for provider registration,
|
|
5
|
+
* action lookup, and ESM plugin loading.
|
|
6
|
+
*/
|
|
7
|
+
export { ActionProviderRegistry } from './action-provider-registry.js';
|
|
8
|
+
export { ApiKeyStore } from './api-key-store.js';
|
|
9
|
+
export type { ApiKeyListEntry } from './api-key-store.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/action/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,YAAY,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Action infrastructure module barrel export.
|
|
3
|
+
*
|
|
4
|
+
* Re-exports the ActionProviderRegistry for provider registration,
|
|
5
|
+
* action lookup, and ESM plugin loading.
|
|
6
|
+
*/
|
|
7
|
+
export { ActionProviderRegistry } from './action-provider-registry.js';
|
|
8
|
+
export { ApiKeyStore } from './api-key-store.js';
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/infrastructure/action/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AdapterPool -- lazy-initialized, cached IChainAdapter instances keyed by chain:network.
|
|
3
|
+
*
|
|
4
|
+
* The daemon supports both Solana and EVM agents simultaneously. Instead of a single
|
|
5
|
+
* hardcoded SolanaAdapter, AdapterPool resolves the correct adapter type based on
|
|
6
|
+
* agent chain/network, reuses instances for the same network, and cleanly disconnects
|
|
7
|
+
* all on shutdown.
|
|
8
|
+
*
|
|
9
|
+
* @see Phase 84-01
|
|
10
|
+
*/
|
|
11
|
+
import type { IChainAdapter, ChainType, NetworkType } from '@waiaas/core';
|
|
12
|
+
/**
|
|
13
|
+
* Resolve RPC URL from config rpc section for a given chain:network.
|
|
14
|
+
* Maps:
|
|
15
|
+
* solana + 'devnet' -> rpc.solana_devnet
|
|
16
|
+
* ethereum + 'ethereum-sepolia' -> rpc.evm_ethereum_sepolia
|
|
17
|
+
*/
|
|
18
|
+
export declare function resolveRpcUrl(rpcConfig: Record<string, string>, chain: string, network: string): string;
|
|
19
|
+
export declare class AdapterPool {
|
|
20
|
+
private readonly _pool;
|
|
21
|
+
/**
|
|
22
|
+
* Build cache key from chain:network.
|
|
23
|
+
*/
|
|
24
|
+
private cacheKey;
|
|
25
|
+
/**
|
|
26
|
+
* Resolve (lazy-create + cache) an adapter for the given chain:network.
|
|
27
|
+
* - Solana: SolanaAdapter(network) -> connect(rpcUrl)
|
|
28
|
+
* - Ethereum: EvmAdapter(network, viemChain, nativeSymbol, nativeName) -> connect(rpcUrl)
|
|
29
|
+
* Same chain:network returns the cached instance.
|
|
30
|
+
*/
|
|
31
|
+
resolve(chain: ChainType, network: NetworkType, rpcUrl: string): Promise<IChainAdapter>;
|
|
32
|
+
/**
|
|
33
|
+
* Disconnect all cached adapters and clear the pool.
|
|
34
|
+
* Individual disconnect errors are caught and logged (fail-soft).
|
|
35
|
+
*/
|
|
36
|
+
disconnectAll(): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Evict a cached adapter for a given chain:network.
|
|
39
|
+
* Disconnects the existing adapter and removes it from pool.
|
|
40
|
+
* Next resolve() call will create a fresh adapter with the new RPC URL.
|
|
41
|
+
*/
|
|
42
|
+
evict(chain: ChainType, network: NetworkType): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Evict all cached adapters. Used when multiple RPC URLs change at once.
|
|
45
|
+
*/
|
|
46
|
+
evictAll(): Promise<void>;
|
|
47
|
+
/** Number of cached adapters. */
|
|
48
|
+
get size(): number;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=adapter-pool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-pool.d.ts","sourceRoot":"","sources":["../../src/infrastructure/adapter-pool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,EAAkB,MAAM,cAAc,CAAC;AAE1F;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EACjC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GACd,MAAM,CASR;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoC;IAE1D;;OAEG;IACH,OAAO,CAAC,QAAQ;IAIhB;;;;;OAKG;IACG,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IA0B7F;;;OAGG;IACG,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAapC;;;;OAIG;IACG,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAalE;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B,iCAAiC;IACjC,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AdapterPool -- lazy-initialized, cached IChainAdapter instances keyed by chain:network.
|
|
3
|
+
*
|
|
4
|
+
* The daemon supports both Solana and EVM agents simultaneously. Instead of a single
|
|
5
|
+
* hardcoded SolanaAdapter, AdapterPool resolves the correct adapter type based on
|
|
6
|
+
* agent chain/network, reuses instances for the same network, and cleanly disconnects
|
|
7
|
+
* all on shutdown.
|
|
8
|
+
*
|
|
9
|
+
* @see Phase 84-01
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Resolve RPC URL from config rpc section for a given chain:network.
|
|
13
|
+
* Maps:
|
|
14
|
+
* solana + 'devnet' -> rpc.solana_devnet
|
|
15
|
+
* ethereum + 'ethereum-sepolia' -> rpc.evm_ethereum_sepolia
|
|
16
|
+
*/
|
|
17
|
+
export function resolveRpcUrl(rpcConfig, chain, network) {
|
|
18
|
+
if (chain === 'solana') {
|
|
19
|
+
const key = `solana_${network}`;
|
|
20
|
+
return rpcConfig[key] || '';
|
|
21
|
+
}
|
|
22
|
+
else if (chain === 'ethereum') {
|
|
23
|
+
const key = `evm_${network.replace(/-/g, '_')}`;
|
|
24
|
+
return rpcConfig[key] || '';
|
|
25
|
+
}
|
|
26
|
+
return '';
|
|
27
|
+
}
|
|
28
|
+
export class AdapterPool {
|
|
29
|
+
_pool = new Map();
|
|
30
|
+
/**
|
|
31
|
+
* Build cache key from chain:network.
|
|
32
|
+
*/
|
|
33
|
+
cacheKey(chain, network) {
|
|
34
|
+
return `${chain}:${network}`;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Resolve (lazy-create + cache) an adapter for the given chain:network.
|
|
38
|
+
* - Solana: SolanaAdapter(network) -> connect(rpcUrl)
|
|
39
|
+
* - Ethereum: EvmAdapter(network, viemChain, nativeSymbol, nativeName) -> connect(rpcUrl)
|
|
40
|
+
* Same chain:network returns the cached instance.
|
|
41
|
+
*/
|
|
42
|
+
async resolve(chain, network, rpcUrl) {
|
|
43
|
+
const key = this.cacheKey(chain, network);
|
|
44
|
+
const existing = this._pool.get(key);
|
|
45
|
+
if (existing)
|
|
46
|
+
return existing;
|
|
47
|
+
let adapter;
|
|
48
|
+
if (chain === 'solana') {
|
|
49
|
+
const { SolanaAdapter } = await import('@waiaas/adapter-solana');
|
|
50
|
+
adapter = new SolanaAdapter(network);
|
|
51
|
+
}
|
|
52
|
+
else if (chain === 'ethereum') {
|
|
53
|
+
const { EvmAdapter, EVM_CHAIN_MAP } = await import('@waiaas/adapter-evm');
|
|
54
|
+
const entry = EVM_CHAIN_MAP[network];
|
|
55
|
+
if (!entry) {
|
|
56
|
+
throw new Error(`No EVM chain config for network '${network}'`);
|
|
57
|
+
}
|
|
58
|
+
adapter = new EvmAdapter(network, entry.viemChain, entry.nativeSymbol, entry.nativeName);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
throw new Error(`Unsupported chain: ${chain}`);
|
|
62
|
+
}
|
|
63
|
+
await adapter.connect(rpcUrl);
|
|
64
|
+
this._pool.set(key, adapter);
|
|
65
|
+
return adapter;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Disconnect all cached adapters and clear the pool.
|
|
69
|
+
* Individual disconnect errors are caught and logged (fail-soft).
|
|
70
|
+
*/
|
|
71
|
+
async disconnectAll() {
|
|
72
|
+
const promises = [];
|
|
73
|
+
for (const adapter of this._pool.values()) {
|
|
74
|
+
promises.push(adapter.disconnect().catch((err) => {
|
|
75
|
+
console.warn('AdapterPool disconnect warning:', err);
|
|
76
|
+
}));
|
|
77
|
+
}
|
|
78
|
+
await Promise.all(promises);
|
|
79
|
+
this._pool.clear();
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Evict a cached adapter for a given chain:network.
|
|
83
|
+
* Disconnects the existing adapter and removes it from pool.
|
|
84
|
+
* Next resolve() call will create a fresh adapter with the new RPC URL.
|
|
85
|
+
*/
|
|
86
|
+
async evict(chain, network) {
|
|
87
|
+
const key = this.cacheKey(chain, network);
|
|
88
|
+
const existing = this._pool.get(key);
|
|
89
|
+
if (existing) {
|
|
90
|
+
try {
|
|
91
|
+
await existing.disconnect();
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
console.warn(`AdapterPool evict disconnect warning (${key}):`, err);
|
|
95
|
+
}
|
|
96
|
+
this._pool.delete(key);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Evict all cached adapters. Used when multiple RPC URLs change at once.
|
|
101
|
+
*/
|
|
102
|
+
async evictAll() {
|
|
103
|
+
await this.disconnectAll(); // Existing method already disconnects + clears
|
|
104
|
+
}
|
|
105
|
+
/** Number of cached adapters. */
|
|
106
|
+
get size() {
|
|
107
|
+
return this._pool.size;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=adapter-pool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-pool.js","sourceRoot":"","sources":["../../src/infrastructure/adapter-pool.ts"],"names":[],"mappings":"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"}
|