@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,311 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config loader: smol-toml parsing, nested section detection, env override, Zod validation.
|
|
3
|
+
*
|
|
4
|
+
* Pipeline: read config.toml -> parse with smol-toml -> detectNestedSections ->
|
|
5
|
+
* applyEnvOverrides -> DaemonConfigSchema.parse (Zod defaults + validation).
|
|
6
|
+
*
|
|
7
|
+
* @see docs/24-monorepo-data-directory.md section 3.5
|
|
8
|
+
*/
|
|
9
|
+
import { readFileSync } from 'node:fs';
|
|
10
|
+
import { join } from 'node:path';
|
|
11
|
+
import { parse } from 'smol-toml';
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
import { EvmNetworkTypeEnum } from '@waiaas/core';
|
|
14
|
+
// ---------------------------------------------------------------------------
|
|
15
|
+
// Zod Schema: 10 sections, flat keys, with defaults
|
|
16
|
+
// ---------------------------------------------------------------------------
|
|
17
|
+
export const DaemonConfigSchema = z.object({
|
|
18
|
+
daemon: z
|
|
19
|
+
.object({
|
|
20
|
+
port: z.number().int().min(1024).max(65535).default(3100),
|
|
21
|
+
hostname: z
|
|
22
|
+
.union([z.literal('127.0.0.1'), z.literal('0.0.0.0')])
|
|
23
|
+
.default('127.0.0.1'),
|
|
24
|
+
log_level: z.enum(['trace', 'debug', 'info', 'warn', 'error']).default('info'),
|
|
25
|
+
log_file: z.string().default('logs/daemon.log'),
|
|
26
|
+
log_max_size: z.string().default('50MB'),
|
|
27
|
+
log_max_files: z.number().int().min(1).max(100).default(5),
|
|
28
|
+
pid_file: z.string().default('daemon.pid'),
|
|
29
|
+
shutdown_timeout: z.number().int().min(5).max(300).default(30),
|
|
30
|
+
dev_mode: z.boolean().default(false),
|
|
31
|
+
admin_ui: z.boolean().default(true),
|
|
32
|
+
admin_timeout: z.number().int().min(60).max(7200).default(900),
|
|
33
|
+
update_check: z.boolean().default(true),
|
|
34
|
+
update_check_interval: z.number().int().min(3600).max(604800).default(86400),
|
|
35
|
+
})
|
|
36
|
+
.default({}),
|
|
37
|
+
keystore: z
|
|
38
|
+
.object({
|
|
39
|
+
argon2_memory: z.number().int().min(32768).max(1048576).default(65536),
|
|
40
|
+
argon2_time: z.number().int().min(1).max(20).default(3),
|
|
41
|
+
argon2_parallelism: z.number().int().min(1).max(16).default(4),
|
|
42
|
+
backup_on_rotate: z.boolean().default(true),
|
|
43
|
+
})
|
|
44
|
+
.default({}),
|
|
45
|
+
database: z
|
|
46
|
+
.object({
|
|
47
|
+
path: z.string().default('data/waiaas.db'),
|
|
48
|
+
wal_checkpoint_interval: z.number().int().min(60).max(3600).default(300),
|
|
49
|
+
busy_timeout: z.number().int().min(1000).max(30000).default(5000),
|
|
50
|
+
cache_size: z.number().int().min(2000).max(512000).default(64000),
|
|
51
|
+
mmap_size: z.number().int().min(0).max(1073741824).default(268435456),
|
|
52
|
+
})
|
|
53
|
+
.default({}),
|
|
54
|
+
rpc: z
|
|
55
|
+
.object({
|
|
56
|
+
// Solana (unchanged)
|
|
57
|
+
solana_mainnet: z.string().default('https://api.mainnet-beta.solana.com'),
|
|
58
|
+
solana_devnet: z.string().default('https://api.devnet.solana.com'),
|
|
59
|
+
solana_testnet: z.string().default('https://api.testnet.solana.com'),
|
|
60
|
+
solana_ws_mainnet: z.string().default('wss://api.mainnet-beta.solana.com'),
|
|
61
|
+
solana_ws_devnet: z.string().default('wss://api.devnet.solana.com'),
|
|
62
|
+
// EVM Tier 1 (replaces ethereum_mainnet/ethereum_sepolia)
|
|
63
|
+
evm_ethereum_mainnet: z.string().default('https://eth.drpc.org'),
|
|
64
|
+
evm_ethereum_sepolia: z.string().default('https://sepolia.drpc.org'),
|
|
65
|
+
evm_polygon_mainnet: z.string().default('https://polygon.drpc.org'),
|
|
66
|
+
evm_polygon_amoy: z.string().default('https://polygon-amoy.drpc.org'),
|
|
67
|
+
evm_arbitrum_mainnet: z.string().default('https://arbitrum.drpc.org'),
|
|
68
|
+
evm_arbitrum_sepolia: z.string().default('https://arbitrum-sepolia.drpc.org'),
|
|
69
|
+
evm_optimism_mainnet: z.string().default('https://optimism.drpc.org'),
|
|
70
|
+
evm_optimism_sepolia: z.string().default('https://optimism-sepolia.drpc.org'),
|
|
71
|
+
evm_base_mainnet: z.string().default('https://base.drpc.org'),
|
|
72
|
+
evm_base_sepolia: z.string().default('https://base-sepolia.drpc.org'),
|
|
73
|
+
// EVM default network for agent creation when network not specified
|
|
74
|
+
evm_default_network: EvmNetworkTypeEnum.default('ethereum-sepolia'),
|
|
75
|
+
})
|
|
76
|
+
.default({}),
|
|
77
|
+
notifications: z
|
|
78
|
+
.object({
|
|
79
|
+
enabled: z.boolean().default(false),
|
|
80
|
+
min_channels: z.number().int().min(1).max(10).default(2),
|
|
81
|
+
health_check_interval: z.number().int().min(60).max(3600).default(300),
|
|
82
|
+
log_retention_days: z.number().int().min(7).max(365).default(30),
|
|
83
|
+
dedup_ttl: z.number().int().min(60).max(3600).default(300),
|
|
84
|
+
telegram_bot_token: z.string().default(''),
|
|
85
|
+
telegram_chat_id: z.string().default(''),
|
|
86
|
+
discord_webhook_url: z.string().default(''),
|
|
87
|
+
ntfy_server: z.string().default('https://ntfy.sh'),
|
|
88
|
+
ntfy_topic: z.string().default(''),
|
|
89
|
+
slack_webhook_url: z.string().default(''),
|
|
90
|
+
locale: z.enum(['en', 'ko']).default('en'),
|
|
91
|
+
rate_limit_rpm: z.number().int().min(1).max(60).default(20),
|
|
92
|
+
})
|
|
93
|
+
.default({}),
|
|
94
|
+
security: z
|
|
95
|
+
.object({
|
|
96
|
+
session_ttl: z.number().int().min(300).max(604800).default(86400),
|
|
97
|
+
jwt_secret: z.string().default(''),
|
|
98
|
+
max_sessions_per_wallet: z.number().int().min(1).max(50).default(5),
|
|
99
|
+
max_pending_tx: z.number().int().min(1).max(100).default(10),
|
|
100
|
+
nonce_storage: z.enum(['memory', 'sqlite']).default('memory'),
|
|
101
|
+
nonce_cache_max: z.number().int().min(100).max(10000).default(1000),
|
|
102
|
+
nonce_cache_ttl: z.number().int().min(60).max(600).default(300),
|
|
103
|
+
rate_limit_global_ip_rpm: z.number().int().min(100).max(10000).default(1000),
|
|
104
|
+
rate_limit_session_rpm: z.number().int().min(10).max(5000).default(300),
|
|
105
|
+
rate_limit_tx_rpm: z.number().int().min(1).max(100).default(10),
|
|
106
|
+
cors_origins: z
|
|
107
|
+
.array(z.string())
|
|
108
|
+
.default(['http://localhost:3100', 'http://127.0.0.1:3100']),
|
|
109
|
+
// AutoStop engine thresholds (AUTO-05 runtime-overridable via Admin Settings)
|
|
110
|
+
autostop_consecutive_failures_threshold: z.number().int().min(1).max(50).default(5),
|
|
111
|
+
autostop_unusual_activity_threshold: z.number().int().min(5).max(200).default(20),
|
|
112
|
+
autostop_unusual_activity_window_sec: z.number().int().min(60).max(3600).default(300),
|
|
113
|
+
autostop_idle_timeout_sec: z.number().int().min(300).max(86400).default(3600),
|
|
114
|
+
autostop_idle_check_interval_sec: z.number().int().min(10).max(600).default(60),
|
|
115
|
+
autostop_enabled: z.boolean().default(true),
|
|
116
|
+
// Balance monitoring thresholds (BMON-05 runtime-overridable via Admin Settings)
|
|
117
|
+
monitoring_check_interval_sec: z.number().int().min(60).max(3600).default(300),
|
|
118
|
+
monitoring_low_balance_threshold_sol: z.number().min(0.001).max(100).default(0.01),
|
|
119
|
+
monitoring_low_balance_threshold_eth: z.number().min(0.0001).max(10).default(0.005),
|
|
120
|
+
monitoring_cooldown_hours: z.number().int().min(1).max(168).default(24),
|
|
121
|
+
monitoring_enabled: z.boolean().default(true),
|
|
122
|
+
policy_defaults_delay_seconds: z.number().int().min(60).max(3600).default(300),
|
|
123
|
+
policy_defaults_approval_timeout: z.number().int().min(300).max(86400).default(3600),
|
|
124
|
+
kill_switch_recovery_cooldown: z.number().int().min(600).max(86400).default(1800),
|
|
125
|
+
kill_switch_max_recovery_attempts: z.number().int().min(1).max(10).default(3),
|
|
126
|
+
})
|
|
127
|
+
.default({}),
|
|
128
|
+
walletconnect: z
|
|
129
|
+
.object({
|
|
130
|
+
project_id: z.string().default(''),
|
|
131
|
+
relay_url: z.string().default('wss://relay.walletconnect.com'),
|
|
132
|
+
})
|
|
133
|
+
.default({}),
|
|
134
|
+
x402: z
|
|
135
|
+
.object({
|
|
136
|
+
enabled: z.boolean().default(true),
|
|
137
|
+
request_timeout: z.number().int().min(5).max(120).default(30),
|
|
138
|
+
})
|
|
139
|
+
.default({}),
|
|
140
|
+
display: z
|
|
141
|
+
.object({
|
|
142
|
+
currency: z.string().default('USD'),
|
|
143
|
+
})
|
|
144
|
+
.default({}),
|
|
145
|
+
telegram: z
|
|
146
|
+
.object({
|
|
147
|
+
enabled: z.boolean().default(false),
|
|
148
|
+
bot_token: z.string().default(''),
|
|
149
|
+
locale: z.enum(['en', 'ko']).default('en'),
|
|
150
|
+
})
|
|
151
|
+
.default({}),
|
|
152
|
+
});
|
|
153
|
+
// ---------------------------------------------------------------------------
|
|
154
|
+
// Known TOML sections
|
|
155
|
+
// ---------------------------------------------------------------------------
|
|
156
|
+
const KNOWN_SECTIONS = [
|
|
157
|
+
'daemon',
|
|
158
|
+
'keystore',
|
|
159
|
+
'database',
|
|
160
|
+
'rpc',
|
|
161
|
+
'notifications',
|
|
162
|
+
'security',
|
|
163
|
+
'walletconnect',
|
|
164
|
+
'x402',
|
|
165
|
+
'display',
|
|
166
|
+
'telegram',
|
|
167
|
+
];
|
|
168
|
+
// ---------------------------------------------------------------------------
|
|
169
|
+
// detectNestedSections: reject nested TOML sections
|
|
170
|
+
// ---------------------------------------------------------------------------
|
|
171
|
+
/**
|
|
172
|
+
* Walk top-level keys. If any value is a non-array object whose own values
|
|
173
|
+
* are also non-array objects, that indicates nested TOML sections which
|
|
174
|
+
* violate the flat-key config policy.
|
|
175
|
+
*
|
|
176
|
+
* Also rejects unknown top-level sections not in KNOWN_SECTIONS.
|
|
177
|
+
*/
|
|
178
|
+
export function detectNestedSections(parsed) {
|
|
179
|
+
for (const key of Object.keys(parsed)) {
|
|
180
|
+
// Check unknown section
|
|
181
|
+
if (!KNOWN_SECTIONS.includes(key)) {
|
|
182
|
+
throw new Error(`Unknown config section '[${key}]'. Allowed sections: ${KNOWN_SECTIONS.join(', ')}`);
|
|
183
|
+
}
|
|
184
|
+
const value = parsed[key];
|
|
185
|
+
if (value !== null && typeof value === 'object' && !Array.isArray(value)) {
|
|
186
|
+
// Check if any sub-value is itself a nested object (not array)
|
|
187
|
+
for (const [subKey, subValue] of Object.entries(value)) {
|
|
188
|
+
if (subValue !== null && typeof subValue === 'object' && !Array.isArray(subValue)) {
|
|
189
|
+
throw new Error(`Nested TOML section '[${key}.${subKey}]' detected. ` +
|
|
190
|
+
`WAIaaS config requires flattened keys. ` +
|
|
191
|
+
`Use '${key}_${subKey}_<field>' instead of nested sections.`);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// ---------------------------------------------------------------------------
|
|
198
|
+
// parseEnvValue: coerce string env values to correct types
|
|
199
|
+
// ---------------------------------------------------------------------------
|
|
200
|
+
/**
|
|
201
|
+
* Parse an environment variable string into the appropriate JS type.
|
|
202
|
+
* - 'true'/'false' -> boolean
|
|
203
|
+
* - Numeric strings -> number
|
|
204
|
+
* - JSON array strings -> parsed array
|
|
205
|
+
* - Otherwise -> string
|
|
206
|
+
*/
|
|
207
|
+
export function parseEnvValue(value) {
|
|
208
|
+
// Boolean
|
|
209
|
+
if (value === 'true')
|
|
210
|
+
return true;
|
|
211
|
+
if (value === 'false')
|
|
212
|
+
return false;
|
|
213
|
+
// JSON array
|
|
214
|
+
if (value.startsWith('[') && value.endsWith(']')) {
|
|
215
|
+
try {
|
|
216
|
+
const parsed = JSON.parse(value);
|
|
217
|
+
if (Array.isArray(parsed))
|
|
218
|
+
return parsed;
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
// Fall through to string
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
// Number
|
|
225
|
+
if (/^-?\d+(\.\d+)?$/.test(value)) {
|
|
226
|
+
const num = Number(value);
|
|
227
|
+
if (Number.isFinite(num))
|
|
228
|
+
return num;
|
|
229
|
+
}
|
|
230
|
+
return value;
|
|
231
|
+
}
|
|
232
|
+
// ---------------------------------------------------------------------------
|
|
233
|
+
// applyEnvOverrides: WAIAAS_{SECTION}_{KEY} -> config override
|
|
234
|
+
// ---------------------------------------------------------------------------
|
|
235
|
+
/** Env keys to skip (not mapped to config sections). */
|
|
236
|
+
const SKIP_ENV_KEYS = new Set([
|
|
237
|
+
'WAIAAS_DATA_DIR',
|
|
238
|
+
'WAIAAS_MASTER_PASSWORD',
|
|
239
|
+
'WAIAAS_MASTER_PASSWORD_FILE',
|
|
240
|
+
]);
|
|
241
|
+
/**
|
|
242
|
+
* Apply environment variable overrides. Pattern: WAIAAS_{SECTION}_{KEY}.
|
|
243
|
+
* The first segment after WAIAAS_ is the section; the rest joined with '_' is the field.
|
|
244
|
+
*
|
|
245
|
+
* Special case: WAIAAS_DAEMON_HOSTNAME maps to daemon.hostname.
|
|
246
|
+
*/
|
|
247
|
+
export function applyEnvOverrides(config) {
|
|
248
|
+
for (const [envKey, envValue] of Object.entries(process.env)) {
|
|
249
|
+
if (!envKey.startsWith('WAIAAS_') || envValue === undefined)
|
|
250
|
+
continue;
|
|
251
|
+
if (SKIP_ENV_KEYS.has(envKey))
|
|
252
|
+
continue;
|
|
253
|
+
// Strip prefix, lowercase
|
|
254
|
+
const stripped = envKey.slice('WAIAAS_'.length).toLowerCase();
|
|
255
|
+
const parts = stripped.split('_');
|
|
256
|
+
// First part = section, rest = field name
|
|
257
|
+
const section = parts[0];
|
|
258
|
+
if (!section)
|
|
259
|
+
continue;
|
|
260
|
+
// Check if section is known
|
|
261
|
+
if (!KNOWN_SECTIONS.includes(section))
|
|
262
|
+
continue;
|
|
263
|
+
const field = parts.slice(1).join('_');
|
|
264
|
+
if (!field)
|
|
265
|
+
continue;
|
|
266
|
+
// Ensure section object exists
|
|
267
|
+
if (config[section] === undefined ||
|
|
268
|
+
config[section] === null ||
|
|
269
|
+
typeof config[section] !== 'object') {
|
|
270
|
+
config[section] = {};
|
|
271
|
+
}
|
|
272
|
+
config[section][field] = parseEnvValue(envValue);
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
// ---------------------------------------------------------------------------
|
|
276
|
+
// loadConfig: main pipeline
|
|
277
|
+
// ---------------------------------------------------------------------------
|
|
278
|
+
/**
|
|
279
|
+
* Load daemon config from dataDir/config.toml with env override and Zod validation.
|
|
280
|
+
*
|
|
281
|
+
* Pipeline:
|
|
282
|
+
* 1. Read config.toml (ENOENT -> empty object, all defaults)
|
|
283
|
+
* 2. Parse with smol-toml
|
|
284
|
+
* 3. Detect nested sections (reject)
|
|
285
|
+
* 4. Apply env overrides (WAIAAS_{SECTION}_{KEY})
|
|
286
|
+
* 5. Validate with DaemonConfigSchema.parse() (applies defaults)
|
|
287
|
+
* 6. Return typed config
|
|
288
|
+
*/
|
|
289
|
+
export function loadConfig(dataDir) {
|
|
290
|
+
let raw = {};
|
|
291
|
+
const configPath = join(dataDir, 'config.toml');
|
|
292
|
+
try {
|
|
293
|
+
const content = readFileSync(configPath, 'utf-8');
|
|
294
|
+
if (content.trim().length > 0) {
|
|
295
|
+
raw = parse(content);
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
catch (err) {
|
|
299
|
+
if (err.code !== 'ENOENT') {
|
|
300
|
+
throw err;
|
|
301
|
+
}
|
|
302
|
+
// ENOENT: no config file, use all defaults
|
|
303
|
+
}
|
|
304
|
+
// Validate structure
|
|
305
|
+
detectNestedSections(raw);
|
|
306
|
+
// Apply env overrides
|
|
307
|
+
applyEnvOverrides(raw);
|
|
308
|
+
// Validate and apply defaults via Zod
|
|
309
|
+
return DaemonConfigSchema.parse(raw);
|
|
310
|
+
}
|
|
311
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/infrastructure/config/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility to generate SQLite CHECK constraint SQL from SSoT enum arrays.
|
|
3
|
+
*
|
|
4
|
+
* Produces plain SQL strings (not Drizzle sql.raw()) for test comparison
|
|
5
|
+
* against sqlite_master CREATE TABLE output.
|
|
6
|
+
*
|
|
7
|
+
* @see docs/49-enum-config-consistency-verification.md
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Generate SQLite CHECK constraint SQL from SSoT enum array.
|
|
11
|
+
* Returns plain SQL string for test comparison against sqlite_master.
|
|
12
|
+
*
|
|
13
|
+
* @param column - Column name to constrain.
|
|
14
|
+
* @param values - SSoT enum values (as const array).
|
|
15
|
+
* @returns CHECK constraint SQL, e.g. `CHECK (status IN ('ACTIVE', 'SUSPENDED'))`.
|
|
16
|
+
* @throws Error if any value contains a single quote (SQL injection prevention).
|
|
17
|
+
*/
|
|
18
|
+
export declare function generateCheckConstraint(column: string, values: readonly string[]): string;
|
|
19
|
+
//# sourceMappingURL=checks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checks.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/database/checks.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAQzF"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility to generate SQLite CHECK constraint SQL from SSoT enum arrays.
|
|
3
|
+
*
|
|
4
|
+
* Produces plain SQL strings (not Drizzle sql.raw()) for test comparison
|
|
5
|
+
* against sqlite_master CREATE TABLE output.
|
|
6
|
+
*
|
|
7
|
+
* @see docs/49-enum-config-consistency-verification.md
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Generate SQLite CHECK constraint SQL from SSoT enum array.
|
|
11
|
+
* Returns plain SQL string for test comparison against sqlite_master.
|
|
12
|
+
*
|
|
13
|
+
* @param column - Column name to constrain.
|
|
14
|
+
* @param values - SSoT enum values (as const array).
|
|
15
|
+
* @returns CHECK constraint SQL, e.g. `CHECK (status IN ('ACTIVE', 'SUSPENDED'))`.
|
|
16
|
+
* @throws Error if any value contains a single quote (SQL injection prevention).
|
|
17
|
+
*/
|
|
18
|
+
export function generateCheckConstraint(column, values) {
|
|
19
|
+
for (const v of values) {
|
|
20
|
+
if (v.includes("'")) {
|
|
21
|
+
throw new Error(`Enum value contains single quote: '${v}'`);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
const quoted = values.map(v => `'${v}'`).join(', ');
|
|
25
|
+
return `CHECK (${column} IN (${quoted}))`;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=checks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checks.js","sourceRoot":"","sources":["../../../src/infrastructure/database/checks.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;GAQG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAc,EAAE,MAAyB;IAC/E,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,GAAG,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,OAAO,UAAU,MAAM,QAAQ,MAAM,IAAI,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema compatibility checker for daemon startup.
|
|
3
|
+
*
|
|
4
|
+
* Checks whether the running code version is compatible with the DB schema version.
|
|
5
|
+
* Three outcomes:
|
|
6
|
+
* - ok: code == db schema version (or fresh DB)
|
|
7
|
+
* - migrate: code > db schema version (auto-migration will be applied by pushSchema)
|
|
8
|
+
* - reject: code < db schema version (user must upgrade) OR db < MIN_COMPATIBLE (step-by-step upgrade)
|
|
9
|
+
*
|
|
10
|
+
* @see docs/65-migration-strategy.md
|
|
11
|
+
*/
|
|
12
|
+
import type { Database } from 'better-sqlite3';
|
|
13
|
+
/**
|
|
14
|
+
* Minimum DB schema version this code version can work with.
|
|
15
|
+
* If the DB schema is below this, a step-by-step upgrade path is required.
|
|
16
|
+
* Set to 1 (initial schema) -- all migrations from v1 to current are available.
|
|
17
|
+
* Future breaking migrations may bump this value.
|
|
18
|
+
*/
|
|
19
|
+
export declare const MIN_COMPATIBLE_SCHEMA_VERSION = 1;
|
|
20
|
+
export type CompatibilityResult = {
|
|
21
|
+
action: 'ok';
|
|
22
|
+
} | {
|
|
23
|
+
action: 'migrate';
|
|
24
|
+
} | {
|
|
25
|
+
action: 'reject';
|
|
26
|
+
reason: 'code_too_old' | 'schema_too_old';
|
|
27
|
+
message: string;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Check compatibility between code's expected schema and DB's actual schema version.
|
|
31
|
+
*
|
|
32
|
+
* @param sqlite - Raw better-sqlite3 database instance
|
|
33
|
+
* @returns CompatibilityResult indicating whether to proceed, migrate, or reject
|
|
34
|
+
*/
|
|
35
|
+
export declare function checkSchemaCompatibility(sqlite: Database): CompatibilityResult;
|
|
36
|
+
//# sourceMappingURL=compatibility.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compatibility.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/database/compatibility.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG/C;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,IAAI,CAAC;AAE/C,MAAM,MAAM,mBAAmB,GAC3B;IAAE,MAAM,EAAE,IAAI,CAAA;CAAE,GAChB;IAAE,MAAM,EAAE,SAAS,CAAA;CAAE,GACrB;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,cAAc,GAAG,gBAAgB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAErF;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,QAAQ,GAAG,mBAAmB,CAsD9E"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema compatibility checker for daemon startup.
|
|
3
|
+
*
|
|
4
|
+
* Checks whether the running code version is compatible with the DB schema version.
|
|
5
|
+
* Three outcomes:
|
|
6
|
+
* - ok: code == db schema version (or fresh DB)
|
|
7
|
+
* - migrate: code > db schema version (auto-migration will be applied by pushSchema)
|
|
8
|
+
* - reject: code < db schema version (user must upgrade) OR db < MIN_COMPATIBLE (step-by-step upgrade)
|
|
9
|
+
*
|
|
10
|
+
* @see docs/65-migration-strategy.md
|
|
11
|
+
*/
|
|
12
|
+
import { LATEST_SCHEMA_VERSION } from './migrate.js';
|
|
13
|
+
/**
|
|
14
|
+
* Minimum DB schema version this code version can work with.
|
|
15
|
+
* If the DB schema is below this, a step-by-step upgrade path is required.
|
|
16
|
+
* Set to 1 (initial schema) -- all migrations from v1 to current are available.
|
|
17
|
+
* Future breaking migrations may bump this value.
|
|
18
|
+
*/
|
|
19
|
+
export const MIN_COMPATIBLE_SCHEMA_VERSION = 1;
|
|
20
|
+
/**
|
|
21
|
+
* Check compatibility between code's expected schema and DB's actual schema version.
|
|
22
|
+
*
|
|
23
|
+
* @param sqlite - Raw better-sqlite3 database instance
|
|
24
|
+
* @returns CompatibilityResult indicating whether to proceed, migrate, or reject
|
|
25
|
+
*/
|
|
26
|
+
export function checkSchemaCompatibility(sqlite) {
|
|
27
|
+
// Check if schema_version table exists
|
|
28
|
+
const tableExists = sqlite
|
|
29
|
+
.prepare("SELECT name FROM sqlite_master WHERE type='table' AND name='schema_version'")
|
|
30
|
+
.get();
|
|
31
|
+
if (!tableExists) {
|
|
32
|
+
// Fresh DB, no schema yet -> pushSchema will handle everything
|
|
33
|
+
return { action: 'ok' };
|
|
34
|
+
}
|
|
35
|
+
// Get current max version and row count
|
|
36
|
+
const row = sqlite
|
|
37
|
+
.prepare('SELECT MAX(version) AS max_version FROM schema_version')
|
|
38
|
+
.get();
|
|
39
|
+
const dbVersion = row?.max_version ?? null;
|
|
40
|
+
if (dbVersion === null) {
|
|
41
|
+
// Empty schema_version table -> fresh DB
|
|
42
|
+
return { action: 'ok' };
|
|
43
|
+
}
|
|
44
|
+
if (dbVersion < MIN_COMPATIBLE_SCHEMA_VERSION) {
|
|
45
|
+
return {
|
|
46
|
+
action: 'reject',
|
|
47
|
+
reason: 'schema_too_old',
|
|
48
|
+
message: [
|
|
49
|
+
`DB schema version ${dbVersion} is below minimum compatible version ${MIN_COMPATIBLE_SCHEMA_VERSION}.`,
|
|
50
|
+
`This database was created with a much older version of WAIaaS.`,
|
|
51
|
+
`Step-by-step upgrade required:`,
|
|
52
|
+
` 1. Install the intermediate version: npm install -g @waiaas/cli@<intermediate-version>`,
|
|
53
|
+
` 2. Run: waiaas start (to migrate DB to intermediate schema)`,
|
|
54
|
+
` 3. Then upgrade to latest: waiaas upgrade`,
|
|
55
|
+
].join('\n'),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
if (dbVersion > LATEST_SCHEMA_VERSION) {
|
|
59
|
+
return {
|
|
60
|
+
action: 'reject',
|
|
61
|
+
reason: 'code_too_old',
|
|
62
|
+
message: [
|
|
63
|
+
`DB schema version ${dbVersion} is newer than code expects (${LATEST_SCHEMA_VERSION}).`,
|
|
64
|
+
`This database was created or migrated by a newer version of WAIaaS.`,
|
|
65
|
+
`Run: waiaas upgrade`,
|
|
66
|
+
].join('\n'),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
if (dbVersion < LATEST_SCHEMA_VERSION) {
|
|
70
|
+
return { action: 'migrate' };
|
|
71
|
+
}
|
|
72
|
+
// dbVersion === LATEST_SCHEMA_VERSION
|
|
73
|
+
return { action: 'ok' };
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=compatibility.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compatibility.js","sourceRoot":"","sources":["../../../src/infrastructure/database/compatibility.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,CAAC;AAO/C;;;;;GAKG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAgB;IACvD,uCAAuC;IACvC,MAAM,WAAW,GAAG,MAAM;SACvB,OAAO,CAAC,6EAA6E,CAAC;SACtF,GAAG,EAAE,CAAC;IACT,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,+DAA+D;QAC/D,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,wCAAwC;IACxC,MAAM,GAAG,GAAG,MAAM;SACf,OAAO,CAAC,wDAAwD,CAAC;SACjE,GAAG,EAAgD,CAAC;IACvD,MAAM,SAAS,GAAG,GAAG,EAAE,WAAW,IAAI,IAAI,CAAC;IAE3C,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;QACvB,yCAAyC;QACzC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC1B,CAAC;IAED,IAAI,SAAS,GAAG,6BAA6B,EAAE,CAAC;QAC9C,OAAO;YACL,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,gBAAgB;YACxB,OAAO,EAAE;gBACP,qBAAqB,SAAS,wCAAwC,6BAA6B,GAAG;gBACtG,gEAAgE;gBAChE,gCAAgC;gBAChC,0FAA0F;gBAC1F,+DAA+D;gBAC/D,6CAA6C;aAC9C,CAAC,IAAI,CAAC,IAAI,CAAC;SACb,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,GAAG,qBAAqB,EAAE,CAAC;QACtC,OAAO;YACL,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,cAAc;YACtB,OAAO,EAAE;gBACP,qBAAqB,SAAS,gCAAgC,qBAAqB,IAAI;gBACvF,qEAAqE;gBACrE,qBAAqB;aACtB,CAAC,IAAI,CAAC,IAAI,CAAC;SACb,CAAC;IACJ,CAAC;IAED,IAAI,SAAS,GAAG,qBAAqB,EAAE,CAAC;QACtC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;IAC/B,CAAC;IAED,sCAAsC;IACtC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite database connection with 7 required PRAGMAs.
|
|
3
|
+
*
|
|
4
|
+
* PRAGMAs are applied in order on every new connection per doc 25 section 1.2:
|
|
5
|
+
* 1. journal_mode = WAL
|
|
6
|
+
* 2. synchronous = NORMAL
|
|
7
|
+
* 3. foreign_keys = ON
|
|
8
|
+
* 4. busy_timeout = 5000
|
|
9
|
+
* 5. cache_size = -64000
|
|
10
|
+
* 6. mmap_size = 268435456
|
|
11
|
+
* 7. temp_store = MEMORY
|
|
12
|
+
*
|
|
13
|
+
* @see docs/25-sqlite-schema.md
|
|
14
|
+
*/
|
|
15
|
+
import type { Database as DatabaseType } from 'better-sqlite3';
|
|
16
|
+
import type { BetterSQLite3Database } from 'drizzle-orm/better-sqlite3';
|
|
17
|
+
import * as schema from './schema.js';
|
|
18
|
+
export interface DatabaseConnection {
|
|
19
|
+
sqlite: DatabaseType;
|
|
20
|
+
db: BetterSQLite3Database<typeof schema>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Create a new SQLite database connection with all required PRAGMAs applied.
|
|
24
|
+
*
|
|
25
|
+
* @param dbPath - Path to the SQLite database file, or ':memory:' for in-memory.
|
|
26
|
+
* @returns Object containing the raw better-sqlite3 instance and the Drizzle ORM instance.
|
|
27
|
+
*/
|
|
28
|
+
export declare function createDatabase(dbPath: string): DatabaseConnection;
|
|
29
|
+
/**
|
|
30
|
+
* Gracefully close the database connection.
|
|
31
|
+
* Runs WAL checkpoint(TRUNCATE) to merge WAL into main database file before closing.
|
|
32
|
+
*
|
|
33
|
+
* @param sqlite - The raw better-sqlite3 database instance.
|
|
34
|
+
*/
|
|
35
|
+
export declare function closeDatabase(sqlite: DatabaseType): void;
|
|
36
|
+
//# sourceMappingURL=connection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/database/connection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE/D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAEtC,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,YAAY,CAAC;IACrB,EAAE,EAAE,qBAAqB,CAAC,OAAO,MAAM,CAAC,CAAC;CAC1C;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,kBAAkB,CAcjE;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAGxD"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SQLite database connection with 7 required PRAGMAs.
|
|
3
|
+
*
|
|
4
|
+
* PRAGMAs are applied in order on every new connection per doc 25 section 1.2:
|
|
5
|
+
* 1. journal_mode = WAL
|
|
6
|
+
* 2. synchronous = NORMAL
|
|
7
|
+
* 3. foreign_keys = ON
|
|
8
|
+
* 4. busy_timeout = 5000
|
|
9
|
+
* 5. cache_size = -64000
|
|
10
|
+
* 6. mmap_size = 268435456
|
|
11
|
+
* 7. temp_store = MEMORY
|
|
12
|
+
*
|
|
13
|
+
* @see docs/25-sqlite-schema.md
|
|
14
|
+
*/
|
|
15
|
+
import Database from 'better-sqlite3';
|
|
16
|
+
import { drizzle } from 'drizzle-orm/better-sqlite3';
|
|
17
|
+
import * as schema from './schema.js';
|
|
18
|
+
/**
|
|
19
|
+
* Create a new SQLite database connection with all required PRAGMAs applied.
|
|
20
|
+
*
|
|
21
|
+
* @param dbPath - Path to the SQLite database file, or ':memory:' for in-memory.
|
|
22
|
+
* @returns Object containing the raw better-sqlite3 instance and the Drizzle ORM instance.
|
|
23
|
+
*/
|
|
24
|
+
export function createDatabase(dbPath) {
|
|
25
|
+
const sqlite = new Database(dbPath);
|
|
26
|
+
// Apply 7 PRAGMAs in order (doc 25 section 1.2)
|
|
27
|
+
sqlite.pragma('journal_mode = WAL');
|
|
28
|
+
sqlite.pragma('synchronous = NORMAL');
|
|
29
|
+
sqlite.pragma('foreign_keys = ON');
|
|
30
|
+
sqlite.pragma('busy_timeout = 5000');
|
|
31
|
+
sqlite.pragma('cache_size = -64000');
|
|
32
|
+
sqlite.pragma('mmap_size = 268435456');
|
|
33
|
+
sqlite.pragma('temp_store = MEMORY');
|
|
34
|
+
const db = drizzle(sqlite, { schema });
|
|
35
|
+
return { sqlite, db };
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Gracefully close the database connection.
|
|
39
|
+
* Runs WAL checkpoint(TRUNCATE) to merge WAL into main database file before closing.
|
|
40
|
+
*
|
|
41
|
+
* @param sqlite - The raw better-sqlite3 database instance.
|
|
42
|
+
*/
|
|
43
|
+
export function closeDatabase(sqlite) {
|
|
44
|
+
sqlite.pragma('wal_checkpoint(TRUNCATE)');
|
|
45
|
+
sqlite.close();
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=connection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../src/infrastructure/database/connection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAEtC,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAErD,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AAOtC;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,MAAM,MAAM,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC;IAEpC,gDAAgD;IAChD,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;IACpC,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,CAAC;IACtC,MAAM,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACnC,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACrC,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACrC,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;IACvC,MAAM,CAAC,MAAM,CAAC,qBAAqB,CAAC,CAAC;IAErC,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACvC,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AACxB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,MAAoB;IAChD,MAAM,CAAC,MAAM,CAAC,0BAA0B,CAAC,CAAC;IAC1C,MAAM,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UUID v7 ID generation for database records.
|
|
3
|
+
*
|
|
4
|
+
* Uses the `uuidv7` package per TD-09 decision: npm package for correctness
|
|
5
|
+
* over manual implementation. UUID v7 embeds ms-precision timestamp for
|
|
6
|
+
* time-ordered sorting by string comparison.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Generate a new UUID v7 string with ms-precision time ordering.
|
|
10
|
+
*
|
|
11
|
+
* IDs generated later will sort lexicographically after earlier IDs,
|
|
12
|
+
* making `ORDER BY id` equivalent to chronological ordering.
|
|
13
|
+
*
|
|
14
|
+
* @returns A new UUID v7 string (e.g., "01927f6e-3c4a-7f1b-8d2e-5f9a0b1c2d3e").
|
|
15
|
+
*/
|
|
16
|
+
export declare function generateId(): string;
|
|
17
|
+
//# sourceMappingURL=id.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/database/id.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;;;;;;GAOG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAEnC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UUID v7 ID generation for database records.
|
|
3
|
+
*
|
|
4
|
+
* Uses the `uuidv7` package per TD-09 decision: npm package for correctness
|
|
5
|
+
* over manual implementation. UUID v7 embeds ms-precision timestamp for
|
|
6
|
+
* time-ordered sorting by string comparison.
|
|
7
|
+
*/
|
|
8
|
+
import { uuidv7 } from 'uuidv7';
|
|
9
|
+
/**
|
|
10
|
+
* Generate a new UUID v7 string with ms-precision time ordering.
|
|
11
|
+
*
|
|
12
|
+
* IDs generated later will sort lexicographically after earlier IDs,
|
|
13
|
+
* making `ORDER BY id` equivalent to chronological ordering.
|
|
14
|
+
*
|
|
15
|
+
* @returns A new UUID v7 string (e.g., "01927f6e-3c4a-7f1b-8d2e-5f9a0b1c2d3e").
|
|
16
|
+
*/
|
|
17
|
+
export function generateId() {
|
|
18
|
+
return uuidv7();
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=id.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"id.js","sourceRoot":"","sources":["../../../src/infrastructure/database/id.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC;;;;;;;GAOG;AACH,MAAM,UAAU,UAAU;IACxB,OAAO,MAAM,EAAE,CAAC;AAClB,CAAC"}
|