covara 0.0.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +839 -0
- package/dist/auth/adapter.d.ts +47 -0
- package/dist/auth/adapter.d.ts.map +1 -0
- package/dist/auth/adapter.js +144 -0
- package/dist/auth/adapter.js.map +1 -0
- package/dist/auth/adapters/authjs.d.ts +31 -0
- package/dist/auth/adapters/authjs.d.ts.map +1 -0
- package/dist/auth/adapters/authjs.js +143 -0
- package/dist/auth/adapters/authjs.js.map +1 -0
- package/dist/auth/adapters/jwt.d.ts +70 -0
- package/dist/auth/adapters/jwt.d.ts.map +1 -0
- package/dist/auth/adapters/jwt.js +368 -0
- package/dist/auth/adapters/jwt.js.map +1 -0
- package/dist/auth/adapters/oidc.d.ts +120 -0
- package/dist/auth/adapters/oidc.d.ts.map +1 -0
- package/dist/auth/adapters/oidc.js +280 -0
- package/dist/auth/adapters/oidc.js.map +1 -0
- package/dist/auth/adapters/passport.d.ts +44 -0
- package/dist/auth/adapters/passport.d.ts.map +1 -0
- package/dist/auth/adapters/passport.js +206 -0
- package/dist/auth/adapters/passport.js.map +1 -0
- package/dist/auth/api-keys.d.ts +68 -0
- package/dist/auth/api-keys.d.ts.map +1 -0
- package/dist/auth/api-keys.js +117 -0
- package/dist/auth/api-keys.js.map +1 -0
- package/dist/auth/config.d.ts +36 -0
- package/dist/auth/config.d.ts.map +1 -0
- package/dist/auth/config.js +50 -0
- package/dist/auth/config.js.map +1 -0
- package/dist/auth/csrf.d.ts +18 -0
- package/dist/auth/csrf.d.ts.map +1 -0
- package/dist/auth/csrf.js +59 -0
- package/dist/auth/csrf.js.map +1 -0
- package/dist/auth/index.d.ts +25 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +22 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/login-throttle.d.ts +21 -0
- package/dist/auth/login-throttle.d.ts.map +1 -0
- package/dist/auth/login-throttle.js +50 -0
- package/dist/auth/login-throttle.js.map +1 -0
- package/dist/auth/magic-link.d.ts +13 -0
- package/dist/auth/magic-link.d.ts.map +1 -0
- package/dist/auth/magic-link.js +14 -0
- package/dist/auth/magic-link.js.map +1 -0
- package/dist/auth/middleware.d.ts +20 -0
- package/dist/auth/middleware.d.ts.map +1 -0
- package/dist/auth/middleware.js +116 -0
- package/dist/auth/middleware.js.map +1 -0
- package/dist/auth/password-policy.d.ts +18 -0
- package/dist/auth/password-policy.d.ts.map +1 -0
- package/dist/auth/password-policy.js +72 -0
- package/dist/auth/password-policy.js.map +1 -0
- package/dist/auth/password-reset.d.ts +13 -0
- package/dist/auth/password-reset.d.ts.map +1 -0
- package/dist/auth/password-reset.js +17 -0
- package/dist/auth/password-reset.js.map +1 -0
- package/dist/auth/password.d.ts +11 -0
- package/dist/auth/password.d.ts.map +1 -0
- package/dist/auth/password.js +98 -0
- package/dist/auth/password.js.map +1 -0
- package/dist/auth/routes.d.ts +111 -0
- package/dist/auth/routes.d.ts.map +1 -0
- package/dist/auth/routes.js +417 -0
- package/dist/auth/routes.js.map +1 -0
- package/dist/auth/rsql.d.ts +33 -0
- package/dist/auth/rsql.d.ts.map +1 -0
- package/dist/auth/rsql.js +102 -0
- package/dist/auth/rsql.js.map +1 -0
- package/dist/auth/scope.d.ts +26 -0
- package/dist/auth/scope.d.ts.map +1 -0
- package/dist/auth/scope.js +166 -0
- package/dist/auth/scope.js.map +1 -0
- package/dist/auth/stores/drizzle.d.ts +39 -0
- package/dist/auth/stores/drizzle.d.ts.map +1 -0
- package/dist/auth/stores/drizzle.js +183 -0
- package/dist/auth/stores/drizzle.js.map +1 -0
- package/dist/auth/stores/index.d.ts +6 -0
- package/dist/auth/stores/index.d.ts.map +1 -0
- package/dist/auth/stores/index.js +4 -0
- package/dist/auth/stores/index.js.map +1 -0
- package/dist/auth/stores/redis.d.ts +25 -0
- package/dist/auth/stores/redis.d.ts.map +1 -0
- package/dist/auth/stores/redis.js +147 -0
- package/dist/auth/stores/redis.js.map +1 -0
- package/dist/auth/totp.d.ts +32 -0
- package/dist/auth/totp.d.ts.map +1 -0
- package/dist/auth/totp.js +126 -0
- package/dist/auth/totp.js.map +1 -0
- package/dist/auth/types.d.ts +82 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +53 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/auth/verification.d.ts +32 -0
- package/dist/auth/verification.d.ts.map +1 -0
- package/dist/auth/verification.js +0 -0
- package/dist/auth/verification.js.map +1 -0
- package/dist/billing/credits.d.ts +29 -0
- package/dist/billing/credits.d.ts.map +1 -0
- package/dist/billing/credits.js +66 -0
- package/dist/billing/credits.js.map +1 -0
- package/dist/billing/index.d.ts +53 -0
- package/dist/billing/index.d.ts.map +1 -0
- package/dist/billing/index.js +139 -0
- package/dist/billing/index.js.map +1 -0
- package/dist/billing/lemonsqueezy.d.ts +29 -0
- package/dist/billing/lemonsqueezy.d.ts.map +1 -0
- package/dist/billing/lemonsqueezy.js +276 -0
- package/dist/billing/lemonsqueezy.js.map +1 -0
- package/dist/billing/paddle.d.ts +30 -0
- package/dist/billing/paddle.d.ts.map +1 -0
- package/dist/billing/paddle.js +247 -0
- package/dist/billing/paddle.js.map +1 -0
- package/dist/billing/polar.d.ts +31 -0
- package/dist/billing/polar.d.ts.map +1 -0
- package/dist/billing/polar.js +284 -0
- package/dist/billing/polar.js.map +1 -0
- package/dist/billing/router.d.ts +9 -0
- package/dist/billing/router.d.ts.map +1 -0
- package/dist/billing/router.js +75 -0
- package/dist/billing/router.js.map +1 -0
- package/dist/billing/stripe.d.ts +31 -0
- package/dist/billing/stripe.d.ts.map +1 -0
- package/dist/billing/stripe.js +319 -0
- package/dist/billing/stripe.js.map +1 -0
- package/dist/billing/types.d.ts +97 -0
- package/dist/billing/types.d.ts.map +1 -0
- package/dist/billing/types.js +9 -0
- package/dist/billing/types.js.map +1 -0
- package/dist/cli/create.d.ts +10 -0
- package/dist/cli/create.d.ts.map +1 -0
- package/dist/cli/create.js +79 -0
- package/dist/cli/create.js.map +1 -0
- package/dist/cli/generate.d.ts +16 -0
- package/dist/cli/generate.d.ts.map +1 -0
- package/dist/cli/generate.js +105 -0
- package/dist/cli/generate.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +185 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/options.d.ts +11 -0
- package/dist/cli/options.d.ts.map +1 -0
- package/dist/cli/options.js +14 -0
- package/dist/cli/options.js.map +1 -0
- package/dist/cli/templates/configs.d.ts +12 -0
- package/dist/cli/templates/configs.d.ts.map +1 -0
- package/dist/cli/templates/configs.js +174 -0
- package/dist/cli/templates/configs.js.map +1 -0
- package/dist/cli/templates/deploy.d.ts +6 -0
- package/dist/cli/templates/deploy.d.ts.map +1 -0
- package/dist/cli/templates/deploy.js +147 -0
- package/dist/cli/templates/deploy.js.map +1 -0
- package/dist/cli/templates/index.d.ts +8 -0
- package/dist/cli/templates/index.d.ts.map +1 -0
- package/dist/cli/templates/index.js +35 -0
- package/dist/cli/templates/index.js.map +1 -0
- package/dist/cli/templates/package-json.d.ts +3 -0
- package/dist/cli/templates/package-json.d.ts.map +1 -0
- package/dist/cli/templates/package-json.js +76 -0
- package/dist/cli/templates/package-json.js.map +1 -0
- package/dist/cli/templates/readme.d.ts +3 -0
- package/dist/cli/templates/readme.d.ts.map +1 -0
- package/dist/cli/templates/readme.js +109 -0
- package/dist/cli/templates/readme.js.map +1 -0
- package/dist/cli/templates/source.d.ts +11 -0
- package/dist/cli/templates/source.d.ts.map +1 -0
- package/dist/cli/templates/source.js +158 -0
- package/dist/cli/templates/source.js.map +1 -0
- package/dist/client/auth/auth-transport.d.ts +24 -0
- package/dist/client/auth/auth-transport.d.ts.map +1 -0
- package/dist/client/auth/auth-transport.js +78 -0
- package/dist/client/auth/auth-transport.js.map +1 -0
- package/dist/client/auth/index.d.ts +52 -0
- package/dist/client/auth/index.d.ts.map +1 -0
- package/dist/client/auth/index.js +350 -0
- package/dist/client/auth/index.js.map +1 -0
- package/dist/client/auth/oidc-client.d.ts +17 -0
- package/dist/client/auth/oidc-client.d.ts.map +1 -0
- package/dist/client/auth/oidc-client.js +159 -0
- package/dist/client/auth/oidc-client.js.map +1 -0
- package/dist/client/auth/token-manager.d.ts +51 -0
- package/dist/client/auth/token-manager.d.ts.map +1 -0
- package/dist/client/auth/token-manager.js +222 -0
- package/dist/client/auth/token-manager.js.map +1 -0
- package/dist/client/auth/types.d.ts +82 -0
- package/dist/client/auth/types.d.ts.map +1 -0
- package/dist/client/auth/types.js +2 -0
- package/dist/client/auth/types.js.map +1 -0
- package/dist/client/billing.d.ts +54 -0
- package/dist/client/billing.d.ts.map +1 -0
- package/dist/client/billing.js +58 -0
- package/dist/client/billing.js.map +1 -0
- package/dist/client/dates.d.ts +40 -0
- package/dist/client/dates.d.ts.map +1 -0
- package/dist/client/dates.js +56 -0
- package/dist/client/dates.js.map +1 -0
- package/dist/client/env.d.ts +24 -0
- package/dist/client/env.d.ts.map +1 -0
- package/dist/client/env.js +105 -0
- package/dist/client/env.js.map +1 -0
- package/dist/client/file-upload.d.ts +53 -0
- package/dist/client/file-upload.d.ts.map +1 -0
- package/dist/client/file-upload.js +162 -0
- package/dist/client/file-upload.js.map +1 -0
- package/dist/client/globals.d.ts +6 -0
- package/dist/client/globals.d.ts.map +1 -0
- package/dist/client/globals.js +23 -0
- package/dist/client/globals.js.map +1 -0
- package/dist/client/index.d.ts +60 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +266 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/indexeddb-storage.d.ts +22 -0
- package/dist/client/indexeddb-storage.d.ts.map +1 -0
- package/dist/client/indexeddb-storage.js +79 -0
- package/dist/client/indexeddb-storage.js.map +1 -0
- package/dist/client/jwt.d.ts +62 -0
- package/dist/client/jwt.d.ts.map +1 -0
- package/dist/client/jwt.js +164 -0
- package/dist/client/jwt.js.map +1 -0
- package/dist/client/live-store.d.ts +49 -0
- package/dist/client/live-store.d.ts.map +1 -0
- package/dist/client/live-store.js +638 -0
- package/dist/client/live-store.js.map +1 -0
- package/dist/client/mutation.d.ts +73 -0
- package/dist/client/mutation.d.ts.map +1 -0
- package/dist/client/mutation.js +72 -0
- package/dist/client/mutation.js.map +1 -0
- package/dist/client/offline.d.ts +110 -0
- package/dist/client/offline.d.ts.map +1 -0
- package/dist/client/offline.js +551 -0
- package/dist/client/offline.js.map +1 -0
- package/dist/client/query-builder.d.ts +130 -0
- package/dist/client/query-builder.d.ts.map +1 -0
- package/dist/client/query-builder.js +300 -0
- package/dist/client/query-builder.js.map +1 -0
- package/dist/client/query-cache.d.ts +64 -0
- package/dist/client/query-cache.d.ts.map +1 -0
- package/dist/client/query-cache.js +112 -0
- package/dist/client/query-cache.js.map +1 -0
- package/dist/client/query-types.d.ts +61 -0
- package/dist/client/query-types.d.ts.map +1 -0
- package/dist/client/query-types.js +2 -0
- package/dist/client/query-types.js.map +1 -0
- package/dist/client/react-billing.d.ts +24 -0
- package/dist/client/react-billing.d.ts.map +1 -0
- package/dist/client/react-billing.js +101 -0
- package/dist/client/react-billing.js.map +1 -0
- package/dist/client/react-files.d.ts +46 -0
- package/dist/client/react-files.d.ts.map +1 -0
- package/dist/client/react-files.js +174 -0
- package/dist/client/react-files.js.map +1 -0
- package/dist/client/react-jwt.d.ts +17 -0
- package/dist/client/react-jwt.d.ts.map +1 -0
- package/dist/client/react-jwt.js +73 -0
- package/dist/client/react-jwt.js.map +1 -0
- package/dist/client/react.d.ts +210 -0
- package/dist/client/react.d.ts.map +1 -0
- package/dist/client/react.js +599 -0
- package/dist/client/react.js.map +1 -0
- package/dist/client/repository.d.ts +49 -0
- package/dist/client/repository.d.ts.map +1 -0
- package/dist/client/repository.js +269 -0
- package/dist/client/repository.js.map +1 -0
- package/dist/client/resource-query-builder.d.ts +35 -0
- package/dist/client/resource-query-builder.d.ts.map +1 -0
- package/dist/client/resource-query-builder.js +177 -0
- package/dist/client/resource-query-builder.js.map +1 -0
- package/dist/client/subscription-manager.d.ts +37 -0
- package/dist/client/subscription-manager.d.ts.map +1 -0
- package/dist/client/subscription-manager.js +164 -0
- package/dist/client/subscription-manager.js.map +1 -0
- package/dist/client/tab-sync.d.ts +35 -0
- package/dist/client/tab-sync.d.ts.map +1 -0
- package/dist/client/tab-sync.js +129 -0
- package/dist/client/tab-sync.js.map +1 -0
- package/dist/client/transport.d.ts +50 -0
- package/dist/client/transport.d.ts.map +1 -0
- package/dist/client/transport.js +205 -0
- package/dist/client/transport.js.map +1 -0
- package/dist/client/typegen.d.ts +20 -0
- package/dist/client/typegen.d.ts.map +1 -0
- package/dist/client/typegen.js +578 -0
- package/dist/client/typegen.js.map +1 -0
- package/dist/client/types.d.ts +472 -0
- package/dist/client/types.d.ts.map +1 -0
- package/dist/client/types.js +2 -0
- package/dist/client/types.js.map +1 -0
- package/dist/db/index.d.ts +9 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +5 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/internal-schema.d.ts +3831 -0
- package/dist/db/internal-schema.d.ts.map +1 -0
- package/dist/db/internal-schema.js +130 -0
- package/dist/db/internal-schema.js.map +1 -0
- package/dist/db/migrate.d.ts +15 -0
- package/dist/db/migrate.d.ts.map +1 -0
- package/dist/db/migrate.js +127 -0
- package/dist/db/migrate.js.map +1 -0
- package/dist/db/pooling.d.ts +9 -0
- package/dist/db/pooling.d.ts.map +1 -0
- package/dist/db/pooling.js +42 -0
- package/dist/db/pooling.js.map +1 -0
- package/dist/db/seed.d.ts +24 -0
- package/dist/db/seed.d.ts.map +1 -0
- package/dist/db/seed.js +34 -0
- package/dist/db/seed.js.map +1 -0
- package/dist/email/builder.d.ts +38 -0
- package/dist/email/builder.d.ts.map +1 -0
- package/dist/email/builder.js +153 -0
- package/dist/email/builder.js.map +1 -0
- package/dist/email/cloudflare.d.ts +24 -0
- package/dist/email/cloudflare.d.ts.map +1 -0
- package/dist/email/cloudflare.js +146 -0
- package/dist/email/cloudflare.js.map +1 -0
- package/dist/email/index.d.ts +12 -0
- package/dist/email/index.d.ts.map +1 -0
- package/dist/email/index.js +27 -0
- package/dist/email/index.js.map +1 -0
- package/dist/email/resend.d.ts +15 -0
- package/dist/email/resend.d.ts.map +1 -0
- package/dist/email/resend.js +114 -0
- package/dist/email/resend.js.map +1 -0
- package/dist/email/types.d.ts +36 -0
- package/dist/email/types.d.ts.map +1 -0
- package/dist/email/types.js +12 -0
- package/dist/email/types.js.map +1 -0
- package/dist/env/index.d.ts +52 -0
- package/dist/env/index.d.ts.map +1 -0
- package/dist/env/index.js +153 -0
- package/dist/env/index.js.map +1 -0
- package/dist/health/checks.d.ts +40 -0
- package/dist/health/checks.d.ts.map +1 -0
- package/dist/health/checks.js +166 -0
- package/dist/health/checks.js.map +1 -0
- package/dist/health/index.d.ts +26 -0
- package/dist/health/index.d.ts.map +1 -0
- package/dist/health/index.js +104 -0
- package/dist/health/index.js.map +1 -0
- package/dist/index.d.ts +78 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +72 -0
- package/dist/index.js.map +1 -0
- package/dist/kv/durable-object.d.ts +192 -0
- package/dist/kv/durable-object.d.ts.map +1 -0
- package/dist/kv/durable-object.js +1059 -0
- package/dist/kv/durable-object.js.map +1 -0
- package/dist/kv/index.d.ts +56 -0
- package/dist/kv/index.d.ts.map +1 -0
- package/dist/kv/index.js +96 -0
- package/dist/kv/index.js.map +1 -0
- package/dist/kv/memory.d.ts +78 -0
- package/dist/kv/memory.d.ts.map +1 -0
- package/dist/kv/memory.js +599 -0
- package/dist/kv/memory.js.map +1 -0
- package/dist/kv/redis.d.ts +148 -0
- package/dist/kv/redis.d.ts.map +1 -0
- package/dist/kv/redis.js +405 -0
- package/dist/kv/redis.js.map +1 -0
- package/dist/kv/types.d.ts +132 -0
- package/dist/kv/types.d.ts.map +1 -0
- package/dist/kv/types.js +24 -0
- package/dist/kv/types.js.map +1 -0
- package/dist/middleware/error.d.ts +4 -0
- package/dist/middleware/error.d.ts.map +1 -0
- package/dist/middleware/error.js +63 -0
- package/dist/middleware/error.js.map +1 -0
- package/dist/middleware/idempotency.d.ts +21 -0
- package/dist/middleware/idempotency.d.ts.map +1 -0
- package/dist/middleware/idempotency.js +144 -0
- package/dist/middleware/idempotency.js.map +1 -0
- package/dist/middleware/logging.d.ts +3 -0
- package/dist/middleware/logging.d.ts.map +1 -0
- package/dist/middleware/logging.js +6 -0
- package/dist/middleware/logging.js.map +1 -0
- package/dist/middleware/observability.d.ts +104 -0
- package/dist/middleware/observability.d.ts.map +1 -0
- package/dist/middleware/observability.js +231 -0
- package/dist/middleware/observability.js.map +1 -0
- package/dist/middleware/rateLimit.d.ts +83 -0
- package/dist/middleware/rateLimit.d.ts.map +1 -0
- package/dist/middleware/rateLimit.js +255 -0
- package/dist/middleware/rateLimit.js.map +1 -0
- package/dist/middleware/securityHeaders.d.ts +18 -0
- package/dist/middleware/securityHeaders.d.ts.map +1 -0
- package/dist/middleware/securityHeaders.js +58 -0
- package/dist/middleware/securityHeaders.js.map +1 -0
- package/dist/middleware/versioning.d.ts +62 -0
- package/dist/middleware/versioning.d.ts.map +1 -0
- package/dist/middleware/versioning.js +178 -0
- package/dist/middleware/versioning.js.map +1 -0
- package/dist/oidc/backends/email-password.d.ts +3 -0
- package/dist/oidc/backends/email-password.d.ts.map +1 -0
- package/dist/oidc/backends/email-password.js +37 -0
- package/dist/oidc/backends/email-password.js.map +1 -0
- package/dist/oidc/backends/federated.d.ts +13 -0
- package/dist/oidc/backends/federated.d.ts.map +1 -0
- package/dist/oidc/backends/federated.js +225 -0
- package/dist/oidc/backends/federated.js.map +1 -0
- package/dist/oidc/backends/index.d.ts +3 -0
- package/dist/oidc/backends/index.d.ts.map +1 -0
- package/dist/oidc/backends/index.js +3 -0
- package/dist/oidc/backends/index.js.map +1 -0
- package/dist/oidc/body.d.ts +3 -0
- package/dist/oidc/body.d.ts.map +1 -0
- package/dist/oidc/body.js +23 -0
- package/dist/oidc/body.js.map +1 -0
- package/dist/oidc/discovery.d.ts +3 -0
- package/dist/oidc/discovery.d.ts.map +1 -0
- package/dist/oidc/discovery.js +66 -0
- package/dist/oidc/discovery.js.map +1 -0
- package/dist/oidc/endpoints/authorize.d.ts +12 -0
- package/dist/oidc/endpoints/authorize.d.ts.map +1 -0
- package/dist/oidc/endpoints/authorize.js +148 -0
- package/dist/oidc/endpoints/authorize.js.map +1 -0
- package/dist/oidc/endpoints/client-auth.d.ts +9 -0
- package/dist/oidc/endpoints/client-auth.d.ts.map +1 -0
- package/dist/oidc/endpoints/client-auth.js +52 -0
- package/dist/oidc/endpoints/client-auth.js.map +1 -0
- package/dist/oidc/endpoints/index.d.ts +9 -0
- package/dist/oidc/endpoints/index.d.ts.map +1 -0
- package/dist/oidc/endpoints/index.js +9 -0
- package/dist/oidc/endpoints/index.js.map +1 -0
- package/dist/oidc/endpoints/introspection.d.ts +9 -0
- package/dist/oidc/endpoints/introspection.d.ts.map +1 -0
- package/dist/oidc/endpoints/introspection.js +57 -0
- package/dist/oidc/endpoints/introspection.js.map +1 -0
- package/dist/oidc/endpoints/jwks.d.ts +4 -0
- package/dist/oidc/endpoints/jwks.d.ts.map +1 -0
- package/dist/oidc/endpoints/jwks.js +11 -0
- package/dist/oidc/endpoints/jwks.js.map +1 -0
- package/dist/oidc/endpoints/logout.d.ts +12 -0
- package/dist/oidc/endpoints/logout.d.ts.map +1 -0
- package/dist/oidc/endpoints/logout.js +92 -0
- package/dist/oidc/endpoints/logout.js.map +1 -0
- package/dist/oidc/endpoints/register.d.ts +9 -0
- package/dist/oidc/endpoints/register.d.ts.map +1 -0
- package/dist/oidc/endpoints/register.js +104 -0
- package/dist/oidc/endpoints/register.js.map +1 -0
- package/dist/oidc/endpoints/revocation.d.ts +9 -0
- package/dist/oidc/endpoints/revocation.d.ts.map +1 -0
- package/dist/oidc/endpoints/revocation.js +31 -0
- package/dist/oidc/endpoints/revocation.js.map +1 -0
- package/dist/oidc/endpoints/token.d.ts +11 -0
- package/dist/oidc/endpoints/token.d.ts.map +1 -0
- package/dist/oidc/endpoints/token.js +167 -0
- package/dist/oidc/endpoints/token.js.map +1 -0
- package/dist/oidc/endpoints/userinfo.d.ts +10 -0
- package/dist/oidc/endpoints/userinfo.d.ts.map +1 -0
- package/dist/oidc/endpoints/userinfo.js +58 -0
- package/dist/oidc/endpoints/userinfo.js.map +1 -0
- package/dist/oidc/index.d.ts +79 -0
- package/dist/oidc/index.d.ts.map +1 -0
- package/dist/oidc/index.js +44 -0
- package/dist/oidc/index.js.map +1 -0
- package/dist/oidc/keys/index.d.ts +2 -0
- package/dist/oidc/keys/index.d.ts.map +1 -0
- package/dist/oidc/keys/index.js +2 -0
- package/dist/oidc/keys/index.js.map +1 -0
- package/dist/oidc/keys/jwk.d.ts +3 -0
- package/dist/oidc/keys/jwk.d.ts.map +1 -0
- package/dist/oidc/keys/jwk.js +171 -0
- package/dist/oidc/keys/jwk.js.map +1 -0
- package/dist/oidc/provider.d.ts +10 -0
- package/dist/oidc/provider.d.ts.map +1 -0
- package/dist/oidc/provider.js +152 -0
- package/dist/oidc/provider.js.map +1 -0
- package/dist/oidc/rate-limit.d.ts +9 -0
- package/dist/oidc/rate-limit.d.ts.map +1 -0
- package/dist/oidc/rate-limit.js +61 -0
- package/dist/oidc/rate-limit.js.map +1 -0
- package/dist/oidc/stores/index.d.ts +124 -0
- package/dist/oidc/stores/index.d.ts.map +1 -0
- package/dist/oidc/stores/index.js +337 -0
- package/dist/oidc/stores/index.js.map +1 -0
- package/dist/oidc/tokens/index.d.ts +4 -0
- package/dist/oidc/tokens/index.d.ts.map +1 -0
- package/dist/oidc/tokens/index.js +158 -0
- package/dist/oidc/tokens/index.js.map +1 -0
- package/dist/oidc/types.d.ts +442 -0
- package/dist/oidc/types.d.ts.map +1 -0
- package/dist/oidc/types.js +2 -0
- package/dist/oidc/types.js.map +1 -0
- package/dist/oidc/ui/consent.d.ts +12 -0
- package/dist/oidc/ui/consent.d.ts.map +1 -0
- package/dist/oidc/ui/consent.js +180 -0
- package/dist/oidc/ui/consent.js.map +1 -0
- package/dist/oidc/ui/index.d.ts +3 -0
- package/dist/oidc/ui/index.d.ts.map +1 -0
- package/dist/oidc/ui/index.js +3 -0
- package/dist/oidc/ui/index.js.map +1 -0
- package/dist/oidc/ui/login.d.ts +12 -0
- package/dist/oidc/ui/login.d.ts.map +1 -0
- package/dist/oidc/ui/login.js +159 -0
- package/dist/oidc/ui/login.js.map +1 -0
- package/dist/oidc/util.d.ts +5 -0
- package/dist/oidc/util.d.ts.map +1 -0
- package/dist/oidc/util.js +67 -0
- package/dist/oidc/util.js.map +1 -0
- package/dist/openapi/generator.d.ts +131 -0
- package/dist/openapi/generator.d.ts.map +1 -0
- package/dist/openapi/generator.js +609 -0
- package/dist/openapi/generator.js.map +1 -0
- package/dist/openapi/index.d.ts +5 -0
- package/dist/openapi/index.d.ts.map +1 -0
- package/dist/openapi/index.js +3 -0
- package/dist/openapi/index.js.map +1 -0
- package/dist/openapi/schema.d.ts +51 -0
- package/dist/openapi/schema.d.ts.map +1 -0
- package/dist/openapi/schema.js +296 -0
- package/dist/openapi/schema.js.map +1 -0
- package/dist/resource/batch.d.ts +40 -0
- package/dist/resource/batch.d.ts.map +1 -0
- package/dist/resource/batch.js +144 -0
- package/dist/resource/batch.js.map +1 -0
- package/dist/resource/capabilities.d.ts +29 -0
- package/dist/resource/capabilities.d.ts.map +1 -0
- package/dist/resource/capabilities.js +224 -0
- package/dist/resource/capabilities.js.map +1 -0
- package/dist/resource/changelog.d.ts +41 -0
- package/dist/resource/changelog.d.ts.map +1 -0
- package/dist/resource/changelog.js +275 -0
- package/dist/resource/changelog.js.map +1 -0
- package/dist/resource/error.d.ts +110 -0
- package/dist/resource/error.d.ts.map +1 -0
- package/dist/resource/error.js +276 -0
- package/dist/resource/error.js.map +1 -0
- package/dist/resource/etag.d.ts +30 -0
- package/dist/resource/etag.d.ts.map +1 -0
- package/dist/resource/etag.js +148 -0
- package/dist/resource/etag.js.map +1 -0
- package/dist/resource/filter.d.ts +36 -0
- package/dist/resource/filter.d.ts.map +1 -0
- package/dist/resource/filter.js +1136 -0
- package/dist/resource/filter.js.map +1 -0
- package/dist/resource/hook.d.ts +13 -0
- package/dist/resource/hook.d.ts.map +1 -0
- package/dist/resource/hook.js +976 -0
- package/dist/resource/hook.js.map +1 -0
- package/dist/resource/mutate.d.ts +49 -0
- package/dist/resource/mutate.d.ts.map +1 -0
- package/dist/resource/mutate.js +247 -0
- package/dist/resource/mutate.js.map +1 -0
- package/dist/resource/operator-equivalence.d.ts +54 -0
- package/dist/resource/operator-equivalence.d.ts.map +1 -0
- package/dist/resource/operator-equivalence.js +342 -0
- package/dist/resource/operator-equivalence.js.map +1 -0
- package/dist/resource/pagination.d.ts +63 -0
- package/dist/resource/pagination.d.ts.map +1 -0
- package/dist/resource/pagination.js +266 -0
- package/dist/resource/pagination.js.map +1 -0
- package/dist/resource/procedures.d.ts +28 -0
- package/dist/resource/procedures.d.ts.map +1 -0
- package/dist/resource/procedures.js +197 -0
- package/dist/resource/procedures.js.map +1 -0
- package/dist/resource/query.d.ts +37 -0
- package/dist/resource/query.d.ts.map +1 -0
- package/dist/resource/query.js +246 -0
- package/dist/resource/query.js.map +1 -0
- package/dist/resource/relations.d.ts +70 -0
- package/dist/resource/relations.d.ts.map +1 -0
- package/dist/resource/relations.js +395 -0
- package/dist/resource/relations.js.map +1 -0
- package/dist/resource/search-outbox.d.ts +38 -0
- package/dist/resource/search-outbox.d.ts.map +1 -0
- package/dist/resource/search-outbox.js +121 -0
- package/dist/resource/search-outbox.js.map +1 -0
- package/dist/resource/search.d.ts +14 -0
- package/dist/resource/search.d.ts.map +1 -0
- package/dist/resource/search.js +267 -0
- package/dist/resource/search.js.map +1 -0
- package/dist/resource/secure-query.d.ts +55 -0
- package/dist/resource/secure-query.d.ts.map +1 -0
- package/dist/resource/secure-query.js +175 -0
- package/dist/resource/secure-query.js.map +1 -0
- package/dist/resource/subscription.d.ts +46 -0
- package/dist/resource/subscription.d.ts.map +1 -0
- package/dist/resource/subscription.js +684 -0
- package/dist/resource/subscription.js.map +1 -0
- package/dist/resource/track-mutations.d.ts +58 -0
- package/dist/resource/track-mutations.d.ts.map +1 -0
- package/dist/resource/track-mutations.js +721 -0
- package/dist/resource/track-mutations.js.map +1 -0
- package/dist/resource/types.d.ts +298 -0
- package/dist/resource/types.d.ts.map +1 -0
- package/dist/resource/types.js +2 -0
- package/dist/resource/types.js.map +1 -0
- package/dist/search/index.d.ts +11 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +22 -0
- package/dist/search/index.js.map +1 -0
- package/dist/search/memory.d.ts +6 -0
- package/dist/search/memory.d.ts.map +1 -0
- package/dist/search/memory.js +70 -0
- package/dist/search/memory.js.map +1 -0
- package/dist/search/opensearch.d.ts +47 -0
- package/dist/search/opensearch.d.ts.map +1 -0
- package/dist/search/opensearch.js +126 -0
- package/dist/search/opensearch.js.map +1 -0
- package/dist/search/postgres-fts.d.ts +16 -0
- package/dist/search/postgres-fts.d.ts.map +1 -0
- package/dist/search/postgres-fts.js +171 -0
- package/dist/search/postgres-fts.js.map +1 -0
- package/dist/search/sqlite-fts.d.ts +14 -0
- package/dist/search/sqlite-fts.d.ts.map +1 -0
- package/dist/search/sqlite-fts.js +185 -0
- package/dist/search/sqlite-fts.js.map +1 -0
- package/dist/search/types.d.ts +49 -0
- package/dist/search/types.d.ts.map +1 -0
- package/dist/search/types.js +2 -0
- package/dist/search/types.js.map +1 -0
- package/dist/server/app.d.ts +33 -0
- package/dist/server/app.d.ts.map +1 -0
- package/dist/server/app.js +82 -0
- package/dist/server/app.js.map +1 -0
- package/dist/server/context.d.ts +16 -0
- package/dist/server/context.d.ts.map +1 -0
- package/dist/server/context.js +12 -0
- package/dist/server/context.js.map +1 -0
- package/dist/server/env.d.ts +4 -0
- package/dist/server/env.d.ts.map +1 -0
- package/dist/server/env.js +7 -0
- package/dist/server/env.js.map +1 -0
- package/dist/server/lifecycle.d.ts +6 -0
- package/dist/server/lifecycle.d.ts.map +1 -0
- package/dist/server/lifecycle.js +28 -0
- package/dist/server/lifecycle.js.map +1 -0
- package/dist/server/logger.d.ts +28 -0
- package/dist/server/logger.d.ts.map +1 -0
- package/dist/server/logger.js +58 -0
- package/dist/server/logger.js.map +1 -0
- package/dist/server/node.d.ts +18 -0
- package/dist/server/node.d.ts.map +1 -0
- package/dist/server/node.js +47 -0
- package/dist/server/node.js.map +1 -0
- package/dist/server/request.d.ts +4 -0
- package/dist/server/request.d.ts.map +1 -0
- package/dist/server/request.js +29 -0
- package/dist/server/request.js.map +1 -0
- package/dist/server/sse.d.ts +26 -0
- package/dist/server/sse.d.ts.map +1 -0
- package/dist/server/sse.js +115 -0
- package/dist/server/sse.js.map +1 -0
- package/dist/storage/index.d.ts +15 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +41 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/local.d.ts +25 -0
- package/dist/storage/local.d.ts.map +1 -0
- package/dist/storage/local.js +172 -0
- package/dist/storage/local.js.map +1 -0
- package/dist/storage/memory.d.ts +20 -0
- package/dist/storage/memory.d.ts.map +1 -0
- package/dist/storage/memory.js +82 -0
- package/dist/storage/memory.js.map +1 -0
- package/dist/storage/r2.d.ts +62 -0
- package/dist/storage/r2.d.ts.map +1 -0
- package/dist/storage/r2.js +124 -0
- package/dist/storage/r2.js.map +1 -0
- package/dist/storage/resource.d.ts +50 -0
- package/dist/storage/resource.d.ts.map +1 -0
- package/dist/storage/resource.js +346 -0
- package/dist/storage/resource.js.map +1 -0
- package/dist/storage/s3.d.ts +29 -0
- package/dist/storage/s3.d.ts.map +1 -0
- package/dist/storage/s3.js +202 -0
- package/dist/storage/s3.js.map +1 -0
- package/dist/storage/types.d.ts +75 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +17 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/storage/validation.d.ts +11 -0
- package/dist/storage/validation.d.ts.map +1 -0
- package/dist/storage/validation.js +38 -0
- package/dist/storage/validation.js.map +1 -0
- package/dist/tasks/cloudflare-queues.d.ts +63 -0
- package/dist/tasks/cloudflare-queues.d.ts.map +1 -0
- package/dist/tasks/cloudflare-queues.js +172 -0
- package/dist/tasks/cloudflare-queues.js.map +1 -0
- package/dist/tasks/concurrency.d.ts +8 -0
- package/dist/tasks/concurrency.d.ts.map +1 -0
- package/dist/tasks/concurrency.js +27 -0
- package/dist/tasks/concurrency.js.map +1 -0
- package/dist/tasks/define.d.ts +25 -0
- package/dist/tasks/define.d.ts.map +1 -0
- package/dist/tasks/define.js +17 -0
- package/dist/tasks/define.js.map +1 -0
- package/dist/tasks/dlq.d.ts +29 -0
- package/dist/tasks/dlq.d.ts.map +1 -0
- package/dist/tasks/dlq.js +185 -0
- package/dist/tasks/dlq.js.map +1 -0
- package/dist/tasks/idempotency.d.ts +13 -0
- package/dist/tasks/idempotency.d.ts.map +1 -0
- package/dist/tasks/idempotency.js +21 -0
- package/dist/tasks/idempotency.js.map +1 -0
- package/dist/tasks/index.d.ts +27 -0
- package/dist/tasks/index.d.ts.map +1 -0
- package/dist/tasks/index.js +15 -0
- package/dist/tasks/index.js.map +1 -0
- package/dist/tasks/integration.d.ts +18 -0
- package/dist/tasks/integration.d.ts.map +1 -0
- package/dist/tasks/integration.js +86 -0
- package/dist/tasks/integration.js.map +1 -0
- package/dist/tasks/lock.d.ts +9 -0
- package/dist/tasks/lock.d.ts.map +1 -0
- package/dist/tasks/lock.js +31 -0
- package/dist/tasks/lock.js.map +1 -0
- package/dist/tasks/queue.d.ts +11 -0
- package/dist/tasks/queue.d.ts.map +1 -0
- package/dist/tasks/queue.js +75 -0
- package/dist/tasks/queue.js.map +1 -0
- package/dist/tasks/recurring.d.ts +16 -0
- package/dist/tasks/recurring.d.ts.map +1 -0
- package/dist/tasks/recurring.js +173 -0
- package/dist/tasks/recurring.js.map +1 -0
- package/dist/tasks/retry.d.ts +4 -0
- package/dist/tasks/retry.d.ts.map +1 -0
- package/dist/tasks/retry.js +29 -0
- package/dist/tasks/retry.js.map +1 -0
- package/dist/tasks/scheduler.d.ts +22 -0
- package/dist/tasks/scheduler.d.ts.map +1 -0
- package/dist/tasks/scheduler.js +125 -0
- package/dist/tasks/scheduler.js.map +1 -0
- package/dist/tasks/storage.d.ts +17 -0
- package/dist/tasks/storage.d.ts.map +1 -0
- package/dist/tasks/storage.js +231 -0
- package/dist/tasks/storage.js.map +1 -0
- package/dist/tasks/types.d.ts +144 -0
- package/dist/tasks/types.d.ts.map +1 -0
- package/dist/tasks/types.js +2 -0
- package/dist/tasks/types.js.map +1 -0
- package/dist/tasks/worker.d.ts +21 -0
- package/dist/tasks/worker.d.ts.map +1 -0
- package/dist/tasks/worker.js +267 -0
- package/dist/tasks/worker.js.map +1 -0
- package/dist/ui/admin-auth.d.ts +65 -0
- package/dist/ui/admin-auth.d.ts.map +1 -0
- package/dist/ui/admin-auth.js +248 -0
- package/dist/ui/admin-auth.js.map +1 -0
- package/dist/ui/data-explorer.d.ts +11 -0
- package/dist/ui/data-explorer.d.ts.map +1 -0
- package/dist/ui/data-explorer.js +414 -0
- package/dist/ui/data-explorer.js.map +1 -0
- package/dist/ui/html/components/index.d.ts +75 -0
- package/dist/ui/html/components/index.d.ts.map +1 -0
- package/dist/ui/html/components/index.js +154 -0
- package/dist/ui/html/components/index.js.map +1 -0
- package/dist/ui/html/index.d.ts +6 -0
- package/dist/ui/html/index.d.ts.map +1 -0
- package/dist/ui/html/index.js +6 -0
- package/dist/ui/html/index.js.map +1 -0
- package/dist/ui/html/layout.d.ts +19 -0
- package/dist/ui/html/layout.d.ts.map +1 -0
- package/dist/ui/html/layout.js +162 -0
- package/dist/ui/html/layout.js.map +1 -0
- package/dist/ui/html/pages/admin-audit.d.ts +21 -0
- package/dist/ui/html/pages/admin-audit.d.ts.map +1 -0
- package/dist/ui/html/pages/admin-audit.js +130 -0
- package/dist/ui/html/pages/admin-audit.js.map +1 -0
- package/dist/ui/html/pages/api-explorer.d.ts +40 -0
- package/dist/ui/html/pages/api-explorer.d.ts.map +1 -0
- package/dist/ui/html/pages/api-explorer.js +153 -0
- package/dist/ui/html/pages/api-explorer.js.map +1 -0
- package/dist/ui/html/pages/changelog.d.ts +27 -0
- package/dist/ui/html/pages/changelog.d.ts.map +1 -0
- package/dist/ui/html/pages/changelog.js +129 -0
- package/dist/ui/html/pages/changelog.js.map +1 -0
- package/dist/ui/html/pages/dashboard.d.ts +20 -0
- package/dist/ui/html/pages/dashboard.d.ts.map +1 -0
- package/dist/ui/html/pages/dashboard.js +49 -0
- package/dist/ui/html/pages/dashboard.js.map +1 -0
- package/dist/ui/html/pages/data-explorer.d.ts +48 -0
- package/dist/ui/html/pages/data-explorer.d.ts.map +1 -0
- package/dist/ui/html/pages/data-explorer.js +251 -0
- package/dist/ui/html/pages/data-explorer.js.map +1 -0
- package/dist/ui/html/pages/errors.d.ts +13 -0
- package/dist/ui/html/pages/errors.d.ts.map +1 -0
- package/dist/ui/html/pages/errors.js +38 -0
- package/dist/ui/html/pages/errors.js.map +1 -0
- package/dist/ui/html/pages/filter-tester.d.ts +21 -0
- package/dist/ui/html/pages/filter-tester.d.ts.map +1 -0
- package/dist/ui/html/pages/filter-tester.js +161 -0
- package/dist/ui/html/pages/filter-tester.js.map +1 -0
- package/dist/ui/html/pages/index.d.ts +15 -0
- package/dist/ui/html/pages/index.d.ts.map +1 -0
- package/dist/ui/html/pages/index.js +15 -0
- package/dist/ui/html/pages/index.js.map +1 -0
- package/dist/ui/html/pages/kv-inspector.d.ts +20 -0
- package/dist/ui/html/pages/kv-inspector.d.ts.map +1 -0
- package/dist/ui/html/pages/kv-inspector.js +130 -0
- package/dist/ui/html/pages/kv-inspector.js.map +1 -0
- package/dist/ui/html/pages/requests.d.ts +23 -0
- package/dist/ui/html/pages/requests.d.ts.map +1 -0
- package/dist/ui/html/pages/requests.js +127 -0
- package/dist/ui/html/pages/requests.js.map +1 -0
- package/dist/ui/html/pages/resources.d.ts +27 -0
- package/dist/ui/html/pages/resources.d.ts.map +1 -0
- package/dist/ui/html/pages/resources.js +85 -0
- package/dist/ui/html/pages/resources.js.map +1 -0
- package/dist/ui/html/pages/sessions.d.ts +24 -0
- package/dist/ui/html/pages/sessions.d.ts.map +1 -0
- package/dist/ui/html/pages/sessions.js +157 -0
- package/dist/ui/html/pages/sessions.js.map +1 -0
- package/dist/ui/html/pages/subscriptions.d.ts +32 -0
- package/dist/ui/html/pages/subscriptions.d.ts.map +1 -0
- package/dist/ui/html/pages/subscriptions.js +138 -0
- package/dist/ui/html/pages/subscriptions.js.map +1 -0
- package/dist/ui/html/pages/tasks.d.ts +42 -0
- package/dist/ui/html/pages/tasks.d.ts.map +1 -0
- package/dist/ui/html/pages/tasks.js +225 -0
- package/dist/ui/html/pages/tasks.js.map +1 -0
- package/dist/ui/html/pages/users.d.ts +29 -0
- package/dist/ui/html/pages/users.d.ts.map +1 -0
- package/dist/ui/html/pages/users.js +192 -0
- package/dist/ui/html/pages/users.js.map +1 -0
- package/dist/ui/html/styles.d.ts +2 -0
- package/dist/ui/html/styles.d.ts.map +1 -0
- package/dist/ui/html/styles.js +675 -0
- package/dist/ui/html/styles.js.map +1 -0
- package/dist/ui/html/utils.d.ts +14 -0
- package/dist/ui/html/utils.d.ts.map +1 -0
- package/dist/ui/html/utils.js +76 -0
- package/dist/ui/html/utils.js.map +1 -0
- package/dist/ui/index.d.ts +13 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +7 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/kv-inspector.d.ts +11 -0
- package/dist/ui/kv-inspector.d.ts.map +1 -0
- package/dist/ui/kv-inspector.js +332 -0
- package/dist/ui/kv-inspector.js.map +1 -0
- package/dist/ui/middleware.d.ts +76 -0
- package/dist/ui/middleware.d.ts.map +1 -0
- package/dist/ui/middleware.js +1175 -0
- package/dist/ui/middleware.js.map +1 -0
- package/dist/ui/schema-registry.d.ts +82 -0
- package/dist/ui/schema-registry.d.ts.map +1 -0
- package/dist/ui/schema-registry.js +165 -0
- package/dist/ui/schema-registry.js.map +1 -0
- package/dist/ui/task-monitor.d.ts +12 -0
- package/dist/ui/task-monitor.d.ts.map +1 -0
- package/dist/ui/task-monitor.js +264 -0
- package/dist/ui/task-monitor.js.map +1 -0
- package/package.json +201 -7
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { getLogger } from "../server/logger.js";
|
|
3
|
+
const toStructured = (level, msg) => {
|
|
4
|
+
const log = getLogger();
|
|
5
|
+
if (typeof msg === "string") {
|
|
6
|
+
log[level](msg);
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
const { message, level: _level, ...fields } = msg;
|
|
10
|
+
log[level](typeof message === "string" ? message : "log", fields);
|
|
11
|
+
};
|
|
12
|
+
const defaultLogger = {
|
|
13
|
+
info: (msg) => toStructured("info", msg),
|
|
14
|
+
warn: (msg) => toStructured("warn", msg),
|
|
15
|
+
error: (msg) => toStructured("error", msg),
|
|
16
|
+
};
|
|
17
|
+
const DEFAULT_CONFIG = {
|
|
18
|
+
enableRequestId: true,
|
|
19
|
+
enableTiming: true,
|
|
20
|
+
enableSlowQueryLog: true,
|
|
21
|
+
slowQueryThresholdMs: 1000,
|
|
22
|
+
requestIdHeader: "x-request-id",
|
|
23
|
+
traceIdHeader: "traceparent",
|
|
24
|
+
metrics: {},
|
|
25
|
+
onMetrics: undefined,
|
|
26
|
+
onSpan: undefined,
|
|
27
|
+
logger: defaultLogger,
|
|
28
|
+
};
|
|
29
|
+
const parseTraceId = (header) => {
|
|
30
|
+
if (!header)
|
|
31
|
+
return undefined;
|
|
32
|
+
const parts = header.split("-");
|
|
33
|
+
if (parts.length >= 3 && parts[1] && parts[1].length === 32) {
|
|
34
|
+
return parts[1];
|
|
35
|
+
}
|
|
36
|
+
return header;
|
|
37
|
+
};
|
|
38
|
+
export const observabilityMiddleware = (config = {}) => {
|
|
39
|
+
const mergedConfig = { ...DEFAULT_CONFIG, ...config };
|
|
40
|
+
const { enableRequestId, enableTiming, enableSlowQueryLog, slowQueryThresholdMs, requestIdHeader, traceIdHeader, metrics, onMetrics, onSpan, logger, } = mergedConfig;
|
|
41
|
+
return async (c, next) => {
|
|
42
|
+
let requestId;
|
|
43
|
+
if (enableRequestId) {
|
|
44
|
+
requestId = c.req.header(requestIdHeader) || randomUUID();
|
|
45
|
+
c.set("requestId", requestId);
|
|
46
|
+
c.header("X-Request-Id", requestId);
|
|
47
|
+
}
|
|
48
|
+
const traceId = parseTraceId(c.req.header(traceIdHeader)) ?? c.get("requestId");
|
|
49
|
+
if (traceId) {
|
|
50
|
+
c.set("traceId", traceId);
|
|
51
|
+
}
|
|
52
|
+
if (onSpan && traceId) {
|
|
53
|
+
onSpan({
|
|
54
|
+
requestId: c.get("requestId") ?? traceId,
|
|
55
|
+
traceId,
|
|
56
|
+
method: c.req.method,
|
|
57
|
+
path: c.req.path,
|
|
58
|
+
resource: c.get("resource"),
|
|
59
|
+
operation: c.get("operation"),
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
let startTime;
|
|
63
|
+
if (enableTiming) {
|
|
64
|
+
startTime = performance.now();
|
|
65
|
+
c.set("requestStartTime", startTime);
|
|
66
|
+
}
|
|
67
|
+
await next();
|
|
68
|
+
if (!enableTiming || startTime === undefined)
|
|
69
|
+
return;
|
|
70
|
+
const duration = performance.now() - startTime;
|
|
71
|
+
const requestMetrics = {
|
|
72
|
+
requestId: c.get("requestId") ?? "unknown",
|
|
73
|
+
traceId: c.get("traceId"),
|
|
74
|
+
method: c.req.method,
|
|
75
|
+
path: c.req.path,
|
|
76
|
+
resource: c.get("resource"),
|
|
77
|
+
operation: c.get("operation"),
|
|
78
|
+
status: c.res.status,
|
|
79
|
+
duration,
|
|
80
|
+
timestamp: Date.now(),
|
|
81
|
+
};
|
|
82
|
+
if (enableSlowQueryLog && duration > slowQueryThresholdMs) {
|
|
83
|
+
logger.warn({
|
|
84
|
+
level: "warn",
|
|
85
|
+
message: "Slow request",
|
|
86
|
+
durationMs: duration,
|
|
87
|
+
...requestMetrics,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
if (c.req.method !== "GET" || c.res.status >= 400) {
|
|
91
|
+
logger.info({
|
|
92
|
+
level: "info",
|
|
93
|
+
message: "Request completed",
|
|
94
|
+
durationMs: duration,
|
|
95
|
+
...requestMetrics,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
metrics.onRequest?.(requestMetrics);
|
|
99
|
+
onMetrics?.(requestMetrics);
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
export const requestIdMiddleware = (headerName = "x-request-id") => {
|
|
103
|
+
return async (c, next) => {
|
|
104
|
+
const requestId = c.req.header(headerName) || randomUUID();
|
|
105
|
+
c.set("requestId", requestId);
|
|
106
|
+
c.header("X-Request-Id", requestId);
|
|
107
|
+
return next();
|
|
108
|
+
};
|
|
109
|
+
};
|
|
110
|
+
export const timingMiddleware = (config) => {
|
|
111
|
+
const slowQueryThresholdMs = config?.slowQueryThresholdMs ?? 1000;
|
|
112
|
+
return async (c, next) => {
|
|
113
|
+
const startTime = performance.now();
|
|
114
|
+
c.set("requestStartTime", startTime);
|
|
115
|
+
await next();
|
|
116
|
+
const duration = performance.now() - startTime;
|
|
117
|
+
c.res.headers.set("X-Response-Time", `${duration.toFixed(2)}ms`);
|
|
118
|
+
if (duration > slowQueryThresholdMs) {
|
|
119
|
+
getLogger().warn("Slow request", {
|
|
120
|
+
method: c.req.method,
|
|
121
|
+
path: c.req.path,
|
|
122
|
+
durationMs: duration,
|
|
123
|
+
status: c.res.status,
|
|
124
|
+
requestId: c.get("requestId"),
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
};
|
|
129
|
+
export const resourceContextMiddleware = (resource, operation) => {
|
|
130
|
+
return async (c, next) => {
|
|
131
|
+
c.set("resource", resource);
|
|
132
|
+
if (operation) {
|
|
133
|
+
c.set("operation", operation);
|
|
134
|
+
}
|
|
135
|
+
return next();
|
|
136
|
+
};
|
|
137
|
+
};
|
|
138
|
+
export const getRequestId = (c) => {
|
|
139
|
+
return c.get("requestId");
|
|
140
|
+
};
|
|
141
|
+
export const getRequestDuration = (c) => {
|
|
142
|
+
const startTime = c.get("requestStartTime");
|
|
143
|
+
if (startTime === undefined)
|
|
144
|
+
return 0;
|
|
145
|
+
return performance.now() - startTime;
|
|
146
|
+
};
|
|
147
|
+
export const createMetricsCollector = (config = {}) => {
|
|
148
|
+
const requestMetrics = [];
|
|
149
|
+
const subscriptionMetrics = [];
|
|
150
|
+
const errorMetrics = [];
|
|
151
|
+
let maxEntries = config.maxMetrics ?? 1000;
|
|
152
|
+
const pruneOldEntries = (arr) => {
|
|
153
|
+
if (arr.length > maxEntries) {
|
|
154
|
+
arr.splice(0, arr.length - maxEntries);
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
return {
|
|
158
|
+
setMaxEntries: (max) => {
|
|
159
|
+
maxEntries = max;
|
|
160
|
+
},
|
|
161
|
+
record: (metrics) => {
|
|
162
|
+
requestMetrics.push(metrics);
|
|
163
|
+
pruneOldEntries(requestMetrics);
|
|
164
|
+
},
|
|
165
|
+
onRequest: (metrics) => {
|
|
166
|
+
requestMetrics.push(metrics);
|
|
167
|
+
pruneOldEntries(requestMetrics);
|
|
168
|
+
},
|
|
169
|
+
onSubscription: (metrics) => {
|
|
170
|
+
subscriptionMetrics.push(metrics);
|
|
171
|
+
pruneOldEntries(subscriptionMetrics);
|
|
172
|
+
},
|
|
173
|
+
onError: (metrics) => {
|
|
174
|
+
errorMetrics.push(metrics);
|
|
175
|
+
pruneOldEntries(errorMetrics);
|
|
176
|
+
},
|
|
177
|
+
getRecent: (count) => {
|
|
178
|
+
return requestMetrics.slice(-count);
|
|
179
|
+
},
|
|
180
|
+
getRequestMetrics: (filter) => {
|
|
181
|
+
if (!filter)
|
|
182
|
+
return [...requestMetrics];
|
|
183
|
+
return requestMetrics.filter((m) => {
|
|
184
|
+
for (const [key, value] of Object.entries(filter)) {
|
|
185
|
+
if (m[key] !== value)
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
return true;
|
|
189
|
+
});
|
|
190
|
+
},
|
|
191
|
+
getByPath: (path) => {
|
|
192
|
+
return requestMetrics.filter((m) => m.path === path);
|
|
193
|
+
},
|
|
194
|
+
getSlow: (thresholdMs) => {
|
|
195
|
+
return requestMetrics.filter((m) => m.duration > thresholdMs);
|
|
196
|
+
},
|
|
197
|
+
getSubscriptionMetrics: () => {
|
|
198
|
+
return [...subscriptionMetrics];
|
|
199
|
+
},
|
|
200
|
+
getErrorMetrics: () => {
|
|
201
|
+
return [...errorMetrics];
|
|
202
|
+
},
|
|
203
|
+
getStats: () => {
|
|
204
|
+
const total = requestMetrics.length;
|
|
205
|
+
const avgDuration = total > 0
|
|
206
|
+
? requestMetrics.reduce((sum, m) => sum + m.duration, 0) / total
|
|
207
|
+
: 0;
|
|
208
|
+
const errorCount = requestMetrics.filter((m) => m.status >= 400).length;
|
|
209
|
+
const errorRate = total > 0 ? errorCount / total : 0;
|
|
210
|
+
const now = Date.now();
|
|
211
|
+
const oneMinuteAgo = now - 60000;
|
|
212
|
+
const fiveMinutesAgo = now - 300000;
|
|
213
|
+
const recentRequests = requestMetrics.filter((m) => m.timestamp > oneMinuteAgo);
|
|
214
|
+
const last5MinRequests = requestMetrics.filter((m) => m.timestamp > fiveMinutesAgo);
|
|
215
|
+
return {
|
|
216
|
+
total,
|
|
217
|
+
avgDuration,
|
|
218
|
+
errorRate,
|
|
219
|
+
requestsPerMinute: recentRequests.length,
|
|
220
|
+
requestsLast5Minutes: last5MinRequests.length,
|
|
221
|
+
activeSubscriptions: subscriptionMetrics.filter((m) => m.event === "connected").length,
|
|
222
|
+
};
|
|
223
|
+
},
|
|
224
|
+
clear: () => {
|
|
225
|
+
requestMetrics.length = 0;
|
|
226
|
+
subscriptionMetrics.length = 0;
|
|
227
|
+
errorMetrics.length = 0;
|
|
228
|
+
},
|
|
229
|
+
};
|
|
230
|
+
};
|
|
231
|
+
//# sourceMappingURL=observability.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"observability.js","sourceRoot":"","sources":["../../src/middleware/observability.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import type { Context, MiddlewareHandler } from "hono";
|
|
2
|
+
export interface RateLimitConfig {
|
|
3
|
+
windowMs: number;
|
|
4
|
+
maxRequests: number;
|
|
5
|
+
keyGenerator?: (c: Context) => string;
|
|
6
|
+
skip?: (c: Context) => boolean;
|
|
7
|
+
message?: string;
|
|
8
|
+
headers?: boolean;
|
|
9
|
+
store?: RateLimitStore;
|
|
10
|
+
}
|
|
11
|
+
export interface RateLimitInfo {
|
|
12
|
+
count: number;
|
|
13
|
+
resetAt: number;
|
|
14
|
+
}
|
|
15
|
+
export interface RateLimitStore {
|
|
16
|
+
increment(key: string, windowMs: number): Promise<RateLimitInfo>;
|
|
17
|
+
decrement(key: string): Promise<void>;
|
|
18
|
+
reset(key: string): Promise<void>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* In-memory rate limit store for single-process deployments
|
|
22
|
+
*/
|
|
23
|
+
export declare class InMemoryRateLimitStore implements RateLimitStore {
|
|
24
|
+
private store;
|
|
25
|
+
private cleanupInterval;
|
|
26
|
+
constructor();
|
|
27
|
+
increment(key: string, windowMs: number): Promise<RateLimitInfo>;
|
|
28
|
+
decrement(key: string): Promise<void>;
|
|
29
|
+
reset(key: string): Promise<void>;
|
|
30
|
+
private cleanup;
|
|
31
|
+
destroy(): void;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* KV-backed rate limit store for multi-process deployments
|
|
35
|
+
* Uses the global KV adapter (Redis or memory)
|
|
36
|
+
*/
|
|
37
|
+
export declare class KVRateLimitStore implements RateLimitStore {
|
|
38
|
+
increment(key: string, windowMs: number): Promise<RateLimitInfo>;
|
|
39
|
+
decrement(key: string): Promise<void>;
|
|
40
|
+
reset(key: string): Promise<void>;
|
|
41
|
+
}
|
|
42
|
+
export declare const createRateLimiter: (config: RateLimitConfig) => MiddlewareHandler;
|
|
43
|
+
/**
|
|
44
|
+
* Sliding window rate limiter using sorted sets in KV
|
|
45
|
+
* More accurate than fixed window but more expensive
|
|
46
|
+
*/
|
|
47
|
+
export declare const createSlidingWindowRateLimiter: (config: RateLimitConfig) => MiddlewareHandler;
|
|
48
|
+
export declare const createResourceRateLimiter: (resourceName: string, config: RateLimitConfig) => MiddlewareHandler;
|
|
49
|
+
export interface OperationRateLimits {
|
|
50
|
+
read?: RateLimitConfig;
|
|
51
|
+
create?: RateLimitConfig;
|
|
52
|
+
update?: RateLimitConfig;
|
|
53
|
+
delete?: RateLimitConfig;
|
|
54
|
+
subscribe?: RateLimitConfig;
|
|
55
|
+
}
|
|
56
|
+
export declare const createOperationRateLimiter: (resourceName: string, limits: OperationRateLimits) => (operation: keyof OperationRateLimits) => MiddlewareHandler;
|
|
57
|
+
export declare const rateLimitPresets: {
|
|
58
|
+
standard: {
|
|
59
|
+
windowMs: number;
|
|
60
|
+
maxRequests: number;
|
|
61
|
+
};
|
|
62
|
+
strict: {
|
|
63
|
+
windowMs: number;
|
|
64
|
+
maxRequests: number;
|
|
65
|
+
};
|
|
66
|
+
lenient: {
|
|
67
|
+
windowMs: number;
|
|
68
|
+
maxRequests: number;
|
|
69
|
+
};
|
|
70
|
+
auth: {
|
|
71
|
+
windowMs: number;
|
|
72
|
+
maxRequests: number;
|
|
73
|
+
};
|
|
74
|
+
subscription: {
|
|
75
|
+
windowMs: number;
|
|
76
|
+
maxRequests: number;
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
/**
|
|
80
|
+
* Reset the default store (useful for testing)
|
|
81
|
+
*/
|
|
82
|
+
export declare const resetDefaultStore: () => void;
|
|
83
|
+
//# sourceMappingURL=rateLimit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rateLimit.d.ts","sourceRoot":"","sources":["../../src/middleware/rateLimit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAQvD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,MAAM,CAAC;IACtC,IAAI,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,cAAc,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACjE,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,qBAAa,sBAAuB,YAAW,cAAc;IAC3D,OAAO,CAAC,KAAK,CAAyD;IACtE,OAAO,CAAC,eAAe,CAA+C;;IAShE,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAchE,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOrC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIvC,OAAO,CAAC,OAAO;IASf,OAAO,IAAI,IAAI;CAOhB;AAED;;;GAGG;AACH,qBAAa,gBAAiB,YAAW,cAAc;IAC/C,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC;IAkChE,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAarC,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAMxC;AAwBD,eAAO,MAAM,iBAAiB,GAAI,QAAQ,eAAe,KAAG,iBAsC3D,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,8BAA8B,GAAI,QAAQ,eAAe,KAAG,iBAwFxE,CAAC;AAEF,eAAO,MAAM,yBAAyB,GACpC,cAAc,MAAM,EACpB,QAAQ,eAAe,KACtB,iBAQF,CAAC;AAEF,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAED,eAAO,MAAM,0BAA0B,GACrC,cAAc,MAAM,EACpB,QAAQ,mBAAmB,MAYnB,WAAW,MAAM,mBAAmB,KAAG,iBAGhD,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;CAM5B,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB,QAAO,IAKpC,CAAC"}
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import { RateLimitError } from "../resource/error.js";
|
|
2
|
+
import { getClientIP } from "../server/request.js";
|
|
3
|
+
import { getGlobalKV, hasGlobalKV } from "../kv/index.js";
|
|
4
|
+
const RATE_LIMIT_PREFIX = "covara:ratelimit:";
|
|
5
|
+
const SLIDING_WINDOW_PREFIX = "covara:ratelimit:sliding:";
|
|
6
|
+
/**
|
|
7
|
+
* In-memory rate limit store for single-process deployments
|
|
8
|
+
*/
|
|
9
|
+
export class InMemoryRateLimitStore {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.store = new Map();
|
|
12
|
+
this.cleanupInterval = null;
|
|
13
|
+
this.cleanupInterval = setInterval(() => this.cleanup(), 60000);
|
|
14
|
+
if (typeof this.cleanupInterval === "object" && "unref" in this.cleanupInterval) {
|
|
15
|
+
this.cleanupInterval.unref();
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
async increment(key, windowMs) {
|
|
19
|
+
const now = Date.now();
|
|
20
|
+
const entry = this.store.get(key);
|
|
21
|
+
if (!entry || entry.resetAt <= now) {
|
|
22
|
+
const info = { count: 1, resetAt: now + windowMs };
|
|
23
|
+
this.store.set(key, info);
|
|
24
|
+
return info;
|
|
25
|
+
}
|
|
26
|
+
entry.count++;
|
|
27
|
+
return entry;
|
|
28
|
+
}
|
|
29
|
+
async decrement(key) {
|
|
30
|
+
const entry = this.store.get(key);
|
|
31
|
+
if (entry && entry.count > 0) {
|
|
32
|
+
entry.count--;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
async reset(key) {
|
|
36
|
+
this.store.delete(key);
|
|
37
|
+
}
|
|
38
|
+
cleanup() {
|
|
39
|
+
const now = Date.now();
|
|
40
|
+
for (const [key, entry] of this.store) {
|
|
41
|
+
if (entry.resetAt <= now) {
|
|
42
|
+
this.store.delete(key);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
destroy() {
|
|
47
|
+
if (this.cleanupInterval) {
|
|
48
|
+
clearInterval(this.cleanupInterval);
|
|
49
|
+
this.cleanupInterval = null;
|
|
50
|
+
}
|
|
51
|
+
this.store.clear();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* KV-backed rate limit store for multi-process deployments
|
|
56
|
+
* Uses the global KV adapter (Redis or memory)
|
|
57
|
+
*/
|
|
58
|
+
export class KVRateLimitStore {
|
|
59
|
+
async increment(key, windowMs) {
|
|
60
|
+
const kv = hasGlobalKV() ? getGlobalKV() : null;
|
|
61
|
+
if (!kv) {
|
|
62
|
+
return { count: 1, resetAt: Date.now() + windowMs };
|
|
63
|
+
}
|
|
64
|
+
const kvKey = `${RATE_LIMIT_PREFIX}${key}`;
|
|
65
|
+
const now = Date.now();
|
|
66
|
+
const data = await kv.hgetall(kvKey);
|
|
67
|
+
let count;
|
|
68
|
+
let resetAt;
|
|
69
|
+
if (!data.resetAt || parseInt(data.resetAt, 10) <= now) {
|
|
70
|
+
count = 1;
|
|
71
|
+
resetAt = now + windowMs;
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
count = (parseInt(data.count, 10) || 0) + 1;
|
|
75
|
+
resetAt = parseInt(data.resetAt, 10);
|
|
76
|
+
}
|
|
77
|
+
await kv.hmset(kvKey, {
|
|
78
|
+
count: String(count),
|
|
79
|
+
resetAt: String(resetAt),
|
|
80
|
+
});
|
|
81
|
+
const ttl = Math.ceil((resetAt - now) / 1000) + 1;
|
|
82
|
+
await kv.expire(kvKey, ttl);
|
|
83
|
+
return { count, resetAt };
|
|
84
|
+
}
|
|
85
|
+
async decrement(key) {
|
|
86
|
+
const kv = hasGlobalKV() ? getGlobalKV() : null;
|
|
87
|
+
if (!kv)
|
|
88
|
+
return;
|
|
89
|
+
const kvKey = `${RATE_LIMIT_PREFIX}${key}`;
|
|
90
|
+
const data = await kv.hgetall(kvKey);
|
|
91
|
+
if (data.count) {
|
|
92
|
+
const newCount = Math.max(0, parseInt(data.count, 10) - 1);
|
|
93
|
+
await kv.hset(kvKey, "count", String(newCount));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
async reset(key) {
|
|
97
|
+
const kv = hasGlobalKV() ? getGlobalKV() : null;
|
|
98
|
+
if (!kv)
|
|
99
|
+
return;
|
|
100
|
+
await kv.del(`${RATE_LIMIT_PREFIX}${key}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
const defaultKeyGenerator = (c) => {
|
|
104
|
+
const userId = c.get("user")?.id;
|
|
105
|
+
if (userId) {
|
|
106
|
+
return `user:${userId}`;
|
|
107
|
+
}
|
|
108
|
+
return `ip:${getClientIP(c)}`;
|
|
109
|
+
};
|
|
110
|
+
let defaultStore = null;
|
|
111
|
+
const getDefaultStore = () => {
|
|
112
|
+
if (!defaultStore) {
|
|
113
|
+
if (hasGlobalKV()) {
|
|
114
|
+
defaultStore = new KVRateLimitStore();
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
defaultStore = new InMemoryRateLimitStore();
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return defaultStore;
|
|
121
|
+
};
|
|
122
|
+
export const createRateLimiter = (config) => {
|
|
123
|
+
const { windowMs, maxRequests, keyGenerator = defaultKeyGenerator, skip, message = "Too many requests, please try again later", headers = true, store, } = config;
|
|
124
|
+
return async (c, next) => {
|
|
125
|
+
if (skip?.(c)) {
|
|
126
|
+
return next();
|
|
127
|
+
}
|
|
128
|
+
const key = keyGenerator(c);
|
|
129
|
+
const actualStore = store ?? getDefaultStore();
|
|
130
|
+
const info = await actualStore.increment(key, windowMs);
|
|
131
|
+
if (headers) {
|
|
132
|
+
c.header("X-RateLimit-Limit", String(maxRequests));
|
|
133
|
+
c.header("X-RateLimit-Remaining", String(Math.max(0, maxRequests - info.count)));
|
|
134
|
+
c.header("X-RateLimit-Reset", String(Math.ceil(info.resetAt / 1000)));
|
|
135
|
+
}
|
|
136
|
+
if (info.count > maxRequests) {
|
|
137
|
+
const retryAfter = Math.ceil((info.resetAt - Date.now()) / 1000);
|
|
138
|
+
if (headers) {
|
|
139
|
+
c.header("Retry-After", String(retryAfter));
|
|
140
|
+
}
|
|
141
|
+
throw new RateLimitError(retryAfter, message);
|
|
142
|
+
}
|
|
143
|
+
return next();
|
|
144
|
+
};
|
|
145
|
+
};
|
|
146
|
+
/**
|
|
147
|
+
* Sliding window rate limiter using sorted sets in KV
|
|
148
|
+
* More accurate than fixed window but more expensive
|
|
149
|
+
*/
|
|
150
|
+
export const createSlidingWindowRateLimiter = (config) => {
|
|
151
|
+
const { windowMs, maxRequests, keyGenerator = defaultKeyGenerator, skip, headers = true, } = config;
|
|
152
|
+
const localRequests = new Map();
|
|
153
|
+
const cleanupLocal = (key, now) => {
|
|
154
|
+
const timestamps = localRequests.get(key) ?? [];
|
|
155
|
+
const cutoff = now - windowMs;
|
|
156
|
+
const valid = timestamps.filter((t) => t > cutoff);
|
|
157
|
+
if (valid.length === 0) {
|
|
158
|
+
localRequests.delete(key);
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
localRequests.set(key, valid);
|
|
162
|
+
}
|
|
163
|
+
return valid;
|
|
164
|
+
};
|
|
165
|
+
return async (c, next) => {
|
|
166
|
+
if (skip?.(c)) {
|
|
167
|
+
return next();
|
|
168
|
+
}
|
|
169
|
+
const key = keyGenerator(c);
|
|
170
|
+
const now = Date.now();
|
|
171
|
+
const cutoff = now - windowMs;
|
|
172
|
+
const kv = hasGlobalKV() ? getGlobalKV() : null;
|
|
173
|
+
let requestCount;
|
|
174
|
+
let oldestTimestamp = null;
|
|
175
|
+
if (kv) {
|
|
176
|
+
const kvKey = `${SLIDING_WINDOW_PREFIX}${key}`;
|
|
177
|
+
const oldEntries = await kv.zrangebyscore(kvKey, "-inf", cutoff);
|
|
178
|
+
if (oldEntries.length > 0) {
|
|
179
|
+
await kv.zrem(kvKey, ...oldEntries);
|
|
180
|
+
}
|
|
181
|
+
await kv.zadd(kvKey, now, `${now}:${Math.random()}`);
|
|
182
|
+
await kv.expire(kvKey, Math.ceil(windowMs / 1000) + 1);
|
|
183
|
+
requestCount = await kv.zcard(kvKey);
|
|
184
|
+
if (requestCount >= maxRequests) {
|
|
185
|
+
const oldest = await kv.zrange(kvKey, 0, 0);
|
|
186
|
+
if (oldest.length > 0) {
|
|
187
|
+
oldestTimestamp = parseInt(oldest[0].split(":")[0], 10);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
else {
|
|
192
|
+
const timestamps = cleanupLocal(key, now);
|
|
193
|
+
requestCount = timestamps.length;
|
|
194
|
+
if (requestCount >= maxRequests) {
|
|
195
|
+
oldestTimestamp = timestamps[0] ?? null;
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
timestamps.push(now);
|
|
199
|
+
localRequests.set(key, timestamps);
|
|
200
|
+
requestCount = timestamps.length;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
if (headers) {
|
|
204
|
+
c.header("X-RateLimit-Limit", String(maxRequests));
|
|
205
|
+
c.header("X-RateLimit-Remaining", String(Math.max(0, maxRequests - requestCount)));
|
|
206
|
+
}
|
|
207
|
+
if (requestCount > maxRequests && oldestTimestamp) {
|
|
208
|
+
const retryAfter = Math.ceil((oldestTimestamp + windowMs - now) / 1000);
|
|
209
|
+
if (headers) {
|
|
210
|
+
c.header("Retry-After", String(retryAfter));
|
|
211
|
+
c.header("X-RateLimit-Reset", String(Math.ceil((oldestTimestamp + windowMs) / 1000)));
|
|
212
|
+
}
|
|
213
|
+
throw new RateLimitError(retryAfter);
|
|
214
|
+
}
|
|
215
|
+
return next();
|
|
216
|
+
};
|
|
217
|
+
};
|
|
218
|
+
export const createResourceRateLimiter = (resourceName, config) => {
|
|
219
|
+
return createRateLimiter({
|
|
220
|
+
...config,
|
|
221
|
+
keyGenerator: (c) => {
|
|
222
|
+
const baseKey = config.keyGenerator?.(c) ?? defaultKeyGenerator(c);
|
|
223
|
+
return `${resourceName}:${baseKey}`;
|
|
224
|
+
},
|
|
225
|
+
});
|
|
226
|
+
};
|
|
227
|
+
export const createOperationRateLimiter = (resourceName, limits) => {
|
|
228
|
+
const limiters = {};
|
|
229
|
+
for (const [op, config] of Object.entries(limits)) {
|
|
230
|
+
if (config) {
|
|
231
|
+
limiters[op] = createResourceRateLimiter(`${resourceName}:${op}`, config);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
const passthrough = async (_c, next) => next();
|
|
235
|
+
return (operation) => {
|
|
236
|
+
return limiters[operation] ?? passthrough;
|
|
237
|
+
};
|
|
238
|
+
};
|
|
239
|
+
export const rateLimitPresets = {
|
|
240
|
+
standard: { windowMs: 60 * 1000, maxRequests: 100 },
|
|
241
|
+
strict: { windowMs: 60 * 1000, maxRequests: 20 },
|
|
242
|
+
lenient: { windowMs: 60 * 1000, maxRequests: 1000 },
|
|
243
|
+
auth: { windowMs: 60 * 1000, maxRequests: 5 },
|
|
244
|
+
subscription: { windowMs: 60 * 1000, maxRequests: 10 },
|
|
245
|
+
};
|
|
246
|
+
/**
|
|
247
|
+
* Reset the default store (useful for testing)
|
|
248
|
+
*/
|
|
249
|
+
export const resetDefaultStore = () => {
|
|
250
|
+
if (defaultStore instanceof InMemoryRateLimitStore) {
|
|
251
|
+
defaultStore.destroy();
|
|
252
|
+
}
|
|
253
|
+
defaultStore = null;
|
|
254
|
+
};
|
|
255
|
+
//# sourceMappingURL=rateLimit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rateLimit.js","sourceRoot":"","sources":["../../src/middleware/rateLimit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { MiddlewareHandler } from "hono";
|
|
2
|
+
export type FrameOption = "DENY" | "SAMEORIGIN";
|
|
3
|
+
export interface HSTSOptions {
|
|
4
|
+
maxAge?: number;
|
|
5
|
+
includeSubDomains?: boolean;
|
|
6
|
+
preload?: boolean;
|
|
7
|
+
}
|
|
8
|
+
export interface SecurityHeadersOptions {
|
|
9
|
+
contentSecurityPolicy?: string | false;
|
|
10
|
+
contentTypeOptions?: boolean;
|
|
11
|
+
frameOptions?: FrameOption | false;
|
|
12
|
+
referrerPolicy?: string | false;
|
|
13
|
+
dnsPrefetchControl?: string | false;
|
|
14
|
+
crossOriginOpenerPolicy?: string | false;
|
|
15
|
+
hsts?: HSTSOptions | false;
|
|
16
|
+
}
|
|
17
|
+
export declare const createSecurityHeaders: (options?: SecurityHeadersOptions) => MiddlewareHandler;
|
|
18
|
+
//# sourceMappingURL=securityHeaders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"securityHeaders.d.ts","sourceRoot":"","sources":["../../src/middleware/securityHeaders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAG9C,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,YAAY,CAAC;AAEhD,MAAM,WAAW,WAAW;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,sBAAsB;IACrC,qBAAqB,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACvC,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,YAAY,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;IACnC,cAAc,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAChC,kBAAkB,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACpC,uBAAuB,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACzC,IAAI,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;CAC5B;AAyBD,eAAO,MAAM,qBAAqB,GAChC,UAAS,sBAA2B,KACnC,iBA4CF,CAAC"}
|