@bgord/bun 1.21.12 → 1.22.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/dist/ab-assignment-composite.strategy.d.ts.map +1 -1
- package/dist/ab-assignment-composite.strategy.js.map +1 -1
- package/dist/ab-assignment-cookie.strategy.d.ts.map +1 -1
- package/dist/ab-assignment-cookie.strategy.js.map +1 -1
- package/dist/ab-assignment-fixed.strategy.d.ts.map +1 -1
- package/dist/ab-assignment-fixed.strategy.js.map +1 -1
- package/dist/ab-assignment-hash.strategy.d.ts.map +1 -1
- package/dist/ab-assignment-hash.strategy.js.map +1 -1
- package/dist/ab-assignment-header.strategy.d.ts.map +1 -1
- package/dist/ab-assignment-header.strategy.js.map +1 -1
- package/dist/ab-assignment-query.strategy.d.ts.map +1 -1
- package/dist/ab-assignment-query.strategy.js.map +1 -1
- package/dist/ab-hono-noop.middleware.d.ts.map +1 -1
- package/dist/ab-hono-noop.middleware.js.map +1 -1
- package/dist/ab-hono.middleware.d.ts.map +1 -1
- package/dist/ab-variant-name.vo.d.ts.map +1 -1
- package/dist/ab-variant-selector.service.d.ts.map +1 -1
- package/dist/ab-variant-selector.service.js.map +1 -1
- package/dist/ab-variant-weight.vo.d.ts.map +1 -1
- package/dist/ab-variant.vo.d.ts.map +1 -1
- package/dist/ab-variant.vo.js.map +1 -1
- package/dist/ab-variants.vo.d.ts.map +1 -1
- package/dist/ab-variants.vo.js.map +1 -1
- package/dist/ab.middleware.d.ts.map +1 -1
- package/dist/ab.middleware.js.map +1 -1
- package/dist/alert-channel-collecting.adapter.d.ts.map +1 -1
- package/dist/alert-channel-composite.adapter.d.ts.map +1 -1
- package/dist/alert-channel-composite.adapter.js.map +1 -1
- package/dist/alert-channel-mailer.adapter.d.ts.map +1 -1
- package/dist/alert-channel-mailer.adapter.js.map +1 -1
- package/dist/alert-channel-noop.adapter.d.ts.map +1 -1
- package/dist/alert-channel-sms.adapter.d.ts.map +1 -1
- package/dist/alert-channel-sms.adapter.js.map +1 -1
- package/dist/alert-channel-with-logger.adapter.d.ts.map +1 -1
- package/dist/alert-channel-with-logger.adapter.js.map +1 -1
- package/dist/alert-channel-with-retry.adapter.d.ts.map +1 -1
- package/dist/alert-channel-with-retry.adapter.js.map +1 -1
- package/dist/alert-channel-with-timeout.adapter.d.ts.map +1 -1
- package/dist/alert-channel-with-timeout.adapter.js.map +1 -1
- package/dist/alert-channel.builder.d.ts.map +1 -1
- package/dist/alert-channel.builder.js.map +1 -1
- package/dist/alert-message.vo.d.ts +2 -2
- package/dist/alert-message.vo.d.ts.map +1 -1
- package/dist/alert-message.vo.js.map +1 -1
- package/dist/antivirus-clamav.adapter.d.ts.map +1 -1
- package/dist/antivirus-noop.adapter.d.ts.map +1 -1
- package/dist/antivirus-with-logger.adapter.d.ts.map +1 -1
- package/dist/antivirus-with-logger.adapter.js.map +1 -1
- package/dist/antivirus-with-semaphore.adapter.d.ts.map +1 -1
- package/dist/antivirus-with-semaphore.adapter.js.map +1 -1
- package/dist/antivirus-with-timeout.adapter.d.ts.map +1 -1
- package/dist/antivirus-with-timeout.adapter.js.map +1 -1
- package/dist/antivirus.builder.d.ts.map +1 -1
- package/dist/antivirus.builder.js.map +1 -1
- package/dist/antivirus.port.d.ts.map +1 -1
- package/dist/api-version-hono.middleware.d.ts.map +1 -1
- package/dist/api-version.middleware.d.ts +1 -0
- package/dist/api-version.middleware.d.ts.map +1 -1
- package/dist/api-version.middleware.js +3 -1
- package/dist/api-version.middleware.js.map +1 -1
- package/dist/auth-session-reader-better-auth.adapter.d.ts +6 -6
- package/dist/auth-session-reader-better-auth.adapter.d.ts.map +1 -1
- package/dist/auth-session-reader-better-auth.adapter.js.map +1 -1
- package/dist/auth-session-reader-noop.adapter.d.ts.map +1 -1
- package/dist/auth-session-reader-noop.adapter.js.map +1 -1
- package/dist/basic-auth-password.vo.d.ts.map +1 -1
- package/dist/basic-auth-username.vo.d.ts.map +1 -1
- package/dist/basic-auth.service.d.ts.map +1 -1
- package/dist/better-auth-logger.service.d.ts.map +1 -1
- package/dist/better-auth-logger.service.js.map +1 -1
- package/dist/binary.vo.d.ts.map +1 -1
- package/dist/cache-codec-identity.strategy.d.ts +7 -0
- package/dist/cache-codec-identity.strategy.d.ts.map +1 -0
- package/dist/cache-codec-identity.strategy.js +9 -0
- package/dist/cache-codec-identity.strategy.js.map +1 -0
- package/dist/cache-codec-sitemap-entries.strategy.d.ts +11 -0
- package/dist/cache-codec-sitemap-entries.strategy.d.ts.map +1 -0
- package/dist/cache-codec-sitemap-entries.strategy.js +13 -0
- package/dist/cache-codec-sitemap-entries.strategy.js.map +1 -0
- package/dist/cache-codec.strategy.d.ts +6 -0
- package/dist/cache-codec.strategy.d.ts.map +1 -0
- package/dist/cache-codec.strategy.js +2 -0
- package/dist/cache-codec.strategy.js.map +1 -0
- package/dist/cache-file.service.js.map +1 -1
- package/dist/cache-repository-node-cache.adapter.d.ts +3 -2
- package/dist/cache-repository-node-cache.adapter.d.ts.map +1 -1
- package/dist/cache-repository-node-cache.adapter.js +5 -3
- package/dist/cache-repository-node-cache.adapter.js.map +1 -1
- package/dist/cache-repository-noop.adapter.d.ts +3 -2
- package/dist/cache-repository-noop.adapter.d.ts.map +1 -1
- package/dist/cache-repository-noop.adapter.js.map +1 -1
- package/dist/cache-repository-redis.adapter.d.ts +3 -2
- package/dist/cache-repository-redis.adapter.d.ts.map +1 -1
- package/dist/cache-repository-redis.adapter.js +8 -5
- package/dist/cache-repository-redis.adapter.js.map +1 -1
- package/dist/cache-repository.port.d.ts +3 -2
- package/dist/cache-repository.port.d.ts.map +1 -1
- package/dist/cache-resolver-noop.strategy.d.ts +8 -0
- package/dist/cache-resolver-noop.strategy.d.ts.map +1 -0
- package/dist/cache-resolver-noop.strategy.js +7 -0
- package/dist/cache-resolver-noop.strategy.js.map +1 -0
- package/dist/cache-resolver-read-through.strategy.d.ts +15 -0
- package/dist/cache-resolver-read-through.strategy.d.ts.map +1 -0
- package/dist/cache-resolver-read-through.strategy.js +21 -0
- package/dist/cache-resolver-read-through.strategy.js.map +1 -0
- package/dist/cache-resolver.strategy.d.ts +2 -9
- package/dist/cache-resolver.strategy.d.ts.map +1 -1
- package/dist/cache-resolver.strategy.js +1 -5
- package/dist/cache-resolver.strategy.js.map +1 -1
- package/dist/cache-value.vo.d.ts +6 -0
- package/dist/cache-value.vo.d.ts.map +1 -0
- package/dist/cache-value.vo.js +2 -0
- package/dist/cache-value.vo.js.map +1 -0
- package/dist/certificate-inspector-noop.adapter.d.ts.map +1 -1
- package/dist/certificate-inspector-noop.adapter.js.map +1 -1
- package/dist/certificate-inspector-tls.adapter.d.ts.map +1 -1
- package/dist/certificate-inspector-tls.adapter.js.map +1 -1
- package/dist/checksum.service.d.ts.map +1 -1
- package/dist/client-ip.vo.d.ts.map +1 -1
- package/dist/client-user-agent.vo.d.ts.map +1 -1
- package/dist/client.vo.d.ts.map +1 -1
- package/dist/client.vo.js.map +1 -1
- package/dist/clock-fixed.adapter.d.ts.map +1 -1
- package/dist/clock-fixed.adapter.js.map +1 -1
- package/dist/clock-offset.adapter.d.ts.map +1 -1
- package/dist/clock-offset.adapter.js.map +1 -1
- package/dist/clock-system.adapter.d.ts.map +1 -1
- package/dist/command-envelope.d.ts.map +1 -1
- package/dist/commit-sha-value.vo.d.ts.map +1 -1
- package/dist/commit-sha.vo.d.ts.map +1 -1
- package/dist/commit-sha.vo.js.map +1 -1
- package/dist/correlation-hono.middleware.d.ts.map +1 -1
- package/dist/correlation-storage.service.d.ts.map +1 -1
- package/dist/correlation-storage.service.js.map +1 -1
- package/dist/correlation.middleware.d.ts.map +1 -1
- package/dist/correlation.middleware.js.map +1 -1
- package/dist/cron-expression.vo.d.ts.map +1 -1
- package/dist/cron-scheduler-noop.adapter.d.ts.map +1 -1
- package/dist/cron-scheduler-with-logger.adapter.d.ts +3 -0
- package/dist/cron-scheduler-with-logger.adapter.d.ts.map +1 -1
- package/dist/cron-scheduler-with-logger.adapter.js +29 -7
- package/dist/cron-scheduler-with-logger.adapter.js.map +1 -1
- package/dist/cron-scheduler.adapter.d.ts.map +1 -1
- package/dist/cron-task-handler-bare.strategy.d.ts.map +1 -1
- package/dist/cron-task-handler-bare.strategy.js.map +1 -1
- package/dist/cron-task-handler-noop.strategy.d.ts.map +1 -1
- package/dist/cron-task-handler-with-logger.strategy.d.ts.map +1 -1
- package/dist/cron-task-handler-with-logger.strategy.js +1 -1
- package/dist/cron-task-handler-with-logger.strategy.js.map +1 -1
- package/dist/crypto-aes-gcm.service.d.ts.map +1 -1
- package/dist/crypto-aes-gcm.service.js.map +1 -1
- package/dist/crypto-key-provider-file.adapter.d.ts.map +1 -1
- package/dist/crypto-key-provider-file.adapter.js.map +1 -1
- package/dist/crypto-key-provider-memory.adapter.d.ts.map +1 -1
- package/dist/crypto-key-provider-memory.adapter.js.map +1 -1
- package/dist/crypto-key-provider-noop.adapter.d.ts.map +1 -1
- package/dist/crypto-key-provider-with-memo.adapter.d.ts +12 -0
- package/dist/crypto-key-provider-with-memo.adapter.d.ts.map +1 -0
- package/dist/crypto-key-provider-with-memo.adapter.js +17 -0
- package/dist/crypto-key-provider-with-memo.adapter.js.map +1 -0
- package/dist/csv-stringifier-noop.adapter.d.ts.map +1 -1
- package/dist/csv-stringifier.adapter.d.ts.map +1 -1
- package/dist/csv-stringifier.adapter.js.map +1 -1
- package/dist/directory-ensurer-noop.adapter.d.ts.map +1 -1
- package/dist/directory-ensurer.adapter.d.ts.map +1 -1
- package/dist/disk-space-checker-fs.adapter.d.ts.map +1 -1
- package/dist/disk-space-checker-noop.adapter.d.ts.map +1 -1
- package/dist/disk-space-checker-noop.adapter.js.map +1 -1
- package/dist/dynamic-import.service.d.ts.map +1 -1
- package/dist/dynamic-import.service.js.map +1 -1
- package/dist/encryption-aes-gcm.adapter.d.ts.map +1 -1
- package/dist/encryption-aes-gcm.adapter.js.map +1 -1
- package/dist/encryption-iv.vo.d.ts.map +1 -1
- package/dist/encryption-iv.vo.js.map +1 -1
- package/dist/encryption-key-value.vo.d.ts.map +1 -1
- package/dist/encryption-key.vo.d.ts.map +1 -1
- package/dist/encryption-key.vo.js.map +1 -1
- package/dist/encryption-noop.adapter.d.ts.map +1 -1
- package/dist/encryption-noop.adapter.js.map +1 -1
- package/dist/endpoint-hono.adapter.d.ts.map +1 -1
- package/dist/environment-loader-encrypted.adapter.d.ts.map +1 -1
- package/dist/environment-loader-encrypted.adapter.js.map +1 -1
- package/dist/environment-loader-noop.adapter.d.ts.map +1 -1
- package/dist/environment-loader-noop.adapter.js.map +1 -1
- package/dist/environment-loader-process-safe.adapter.d.ts +3 -1
- package/dist/environment-loader-process-safe.adapter.d.ts.map +1 -1
- package/dist/environment-loader-process-safe.adapter.js +4 -2
- package/dist/environment-loader-process-safe.adapter.js.map +1 -1
- package/dist/environment-loader-process.adapter.d.ts.map +1 -1
- package/dist/environment-loader-process.adapter.js.map +1 -1
- package/dist/etag-extractor-fixed.strategy.d.ts.map +1 -1
- package/dist/etag-extractor-fixed.strategy.js.map +1 -1
- package/dist/etag-extractor-header.strategy.d.ts.map +1 -1
- package/dist/etag-extractor-hono.middleware.d.ts.map +1 -1
- package/dist/etag-extractor-param.strategy.d.ts.map +1 -1
- package/dist/etag-extractor-param.strategy.js.map +1 -1
- package/dist/etag-extractor.middleware.d.ts.map +1 -1
- package/dist/etag-extractor.middleware.js.map +1 -1
- package/dist/event-envelope.d.ts.map +1 -1
- package/dist/event-finder-last-noop.adapter.d.ts.map +1 -1
- package/dist/event-finder-last-noop.adapter.js.map +1 -1
- package/dist/event-finder-noop.adapter.d.ts.map +1 -1
- package/dist/event-finder-noop.adapter.js.map +1 -1
- package/dist/event-inserter-noop.adapter.d.ts.map +1 -1
- package/dist/event-loop-lag.service.d.ts.map +1 -1
- package/dist/event-loop-lag.service.js.map +1 -1
- package/dist/event-loop-utilization.service.d.ts.map +1 -1
- package/dist/event-loop-utilization.service.js.map +1 -1
- package/dist/event-revision-assigner.adapter.d.ts.map +1 -1
- package/dist/event-revision-assigner.adapter.js.map +1 -1
- package/dist/event-store-collecting.adapter.d.ts.map +1 -1
- package/dist/event-store-dispatching.adapter.d.ts.map +1 -1
- package/dist/event-store-dispatching.adapter.js.map +1 -1
- package/dist/event-store-noop.adapter.d.ts.map +1 -1
- package/dist/event-store-with-logger.adapter.d.ts +3 -0
- package/dist/event-store-with-logger.adapter.d.ts.map +1 -1
- package/dist/event-store-with-logger.adapter.js +88 -27
- package/dist/event-store-with-logger.adapter.js.map +1 -1
- package/dist/event-store.adapter.d.ts.map +1 -1
- package/dist/event-store.adapter.js.map +1 -1
- package/dist/event-stream.vo.d.ts.map +1 -1
- package/dist/event-upcaster-chain.adapter.d.ts.map +1 -1
- package/dist/event-upcaster-noop.adapter.d.ts.map +1 -1
- package/dist/event-upcaster-step.vo.d.ts.map +1 -1
- package/dist/event-upcaster-step.vo.js.map +1 -1
- package/dist/event-validator-registry.adapter.d.ts.map +1 -1
- package/dist/file-cleaner-forgiving.adapter.d.ts.map +1 -1
- package/dist/file-cleaner-noop.adapter.d.ts.map +1 -1
- package/dist/file-cleaner.adapter.d.ts.map +1 -1
- package/dist/file-copier-noop.adapter.d.ts.map +1 -1
- package/dist/file-copier.adapter.d.ts.map +1 -1
- package/dist/file-draft-tar-gz.service.d.ts +8 -0
- package/dist/file-draft-tar-gz.service.d.ts.map +1 -0
- package/dist/file-draft-tar-gz.service.js +19 -0
- package/dist/file-draft-tar-gz.service.js.map +1 -0
- package/dist/file-draft.service.d.ts.map +1 -1
- package/dist/file-draft.service.js.map +1 -1
- package/dist/file-inspection-noop.adapter.d.ts.map +1 -1
- package/dist/file-inspection-noop.adapter.js.map +1 -1
- package/dist/file-inspection.adapter.d.ts.map +1 -1
- package/dist/file-reader-json-forgiving.adapter.d.ts.map +1 -1
- package/dist/file-reader-json-noop.adapter.d.ts.map +1 -1
- package/dist/file-reader-json-noop.adapter.js.map +1 -1
- package/dist/file-reader-json-with-cache.adapter.d.ts +1 -0
- package/dist/file-reader-json-with-cache.adapter.d.ts.map +1 -1
- package/dist/file-reader-json-with-cache.adapter.js +3 -1
- package/dist/file-reader-json-with-cache.adapter.js.map +1 -1
- package/dist/file-reader-json.adapter.d.ts.map +1 -1
- package/dist/file-reader-raw-forgiving.adapter.d.ts.map +1 -1
- package/dist/file-reader-raw-forgiving.adapter.js.map +1 -1
- package/dist/file-reader-raw-noop.adapter.d.ts.map +1 -1
- package/dist/file-reader-raw-noop.adapter.js.map +1 -1
- package/dist/file-reader-raw.adapter.d.ts.map +1 -1
- package/dist/file-reader-text-forgiving.adapter.d.ts.map +1 -1
- package/dist/file-reader-text-forgiving.adapter.js.map +1 -1
- package/dist/file-reader-text-noop.adapter.d.ts.map +1 -1
- package/dist/file-reader-text-noop.adapter.js.map +1 -1
- package/dist/file-reader-text-with-cache.adapter.d.ts +1 -0
- package/dist/file-reader-text-with-cache.adapter.d.ts.map +1 -1
- package/dist/file-reader-text-with-cache.adapter.js +3 -1
- package/dist/file-reader-text-with-cache.adapter.js.map +1 -1
- package/dist/file-reader-text.adapter.d.ts.map +1 -1
- package/dist/file-renamer-node-forgiving.adapter.d.ts.map +1 -1
- package/dist/file-renamer-node.adapter.d.ts.map +1 -1
- package/dist/file-renamer-noop.adapter.d.ts.map +1 -1
- package/dist/file-uploader-hono.middleware.d.ts.map +1 -1
- package/dist/file-uploader.middleware.d.ts.map +1 -1
- package/dist/file-uploader.middleware.js.map +1 -1
- package/dist/file-writer-forgiving.adapter.d.ts.map +1 -1
- package/dist/file-writer-noop.adapter.d.ts.map +1 -1
- package/dist/file-writer.adapter.d.ts.map +1 -1
- package/dist/graceful-shutdown.service.d.ts.map +1 -1
- package/dist/graceful-shutdown.service.js.map +1 -1
- package/dist/gzip-noop.adapter.d.ts.map +1 -1
- package/dist/gzip.adapter.d.ts.map +1 -1
- package/dist/gzip.adapter.js.map +1 -1
- package/dist/handler-bare.strategy.d.ts.map +1 -1
- package/dist/handler-noop.strategy.d.ts.map +1 -1
- package/dist/handler-with-logger-safe.strategy.d.ts.map +1 -1
- package/dist/handler-with-logger-safe.strategy.js.map +1 -1
- package/dist/handler-with-logger.strategy.d.ts.map +1 -1
- package/dist/handler-with-logger.strategy.js.map +1 -1
- package/dist/hash-bucket.vo.d.ts.map +1 -1
- package/dist/hash-bucket.vo.js.map +1 -1
- package/dist/hash-content-noop.strategy.d.ts.map +1 -1
- package/dist/hash-content-sha256.strategy.d.ts.map +1 -1
- package/dist/hash-file-noop.adapter.d.ts.map +1 -1
- package/dist/hash-file-sha256.adapter.d.ts.map +1 -1
- package/dist/hash-file-sha256.adapter.js.map +1 -1
- package/dist/hash-value.vo.d.ts.map +1 -1
- package/dist/hash.vo.d.ts.map +1 -1
- package/dist/hash.vo.js.map +1 -1
- package/dist/hcaptcha-secret-key.vo.d.ts.map +1 -1
- package/dist/hcaptcha-site-key.vo.d.ts.map +1 -1
- package/dist/hcaptcha.service.d.ts.map +1 -1
- package/dist/healthcheck-hono.handler.d.ts +1 -1
- package/dist/healthcheck-hono.handler.d.ts.map +1 -1
- package/dist/healthcheck-hono.handler.js +2 -2
- package/dist/healthcheck-hono.handler.js.map +1 -1
- package/dist/healthcheck.handler.d.ts +1 -0
- package/dist/healthcheck.handler.d.ts.map +1 -1
- package/dist/healthcheck.handler.js +1 -0
- package/dist/healthcheck.handler.js.map +1 -1
- package/dist/hostname.vo.d.ts.map +1 -1
- package/dist/http-logger-hono.middleware.d.ts.map +1 -1
- package/dist/http-logger-hono.middleware.js +0 -3
- package/dist/http-logger-hono.middleware.js.map +1 -1
- package/dist/http-logger.middleware.d.ts +0 -1
- package/dist/http-logger.middleware.d.ts.map +1 -1
- package/dist/http-logger.middleware.js +0 -1
- package/dist/http-logger.middleware.js.map +1 -1
- package/dist/id-provider-crypto.adapter.d.ts.map +1 -1
- package/dist/id-provider-deterministic.adapter.d.ts.map +1 -1
- package/dist/id-provider-deterministic.adapter.js.map +1 -1
- package/dist/idempotency-store-cache.adapter.d.ts +13 -0
- package/dist/idempotency-store-cache.adapter.d.ts.map +1 -0
- package/dist/idempotency-store-cache.adapter.js +14 -0
- package/dist/idempotency-store-cache.adapter.js.map +1 -0
- package/dist/idempotency-store-noop.adapter.d.ts +6 -0
- package/dist/idempotency-store-noop.adapter.d.ts.map +1 -0
- package/dist/idempotency-store-noop.adapter.js +6 -0
- package/dist/idempotency-store-noop.adapter.js.map +1 -0
- package/dist/idempotency-store-with-logger.adapter.d.ts +17 -0
- package/dist/idempotency-store-with-logger.adapter.d.ts.map +1 -0
- package/dist/idempotency-store-with-logger.adapter.js +48 -0
- package/dist/idempotency-store-with-logger.adapter.js.map +1 -0
- package/dist/idempotency-store.port.d.ts +5 -0
- package/dist/idempotency-store.port.d.ts.map +1 -0
- package/dist/idempotency-store.port.js +2 -0
- package/dist/idempotency-store.port.js.map +1 -0
- package/dist/image-blur-noop.adapter.d.ts.map +1 -1
- package/dist/image-blur-with-semaphore.adapter.d.ts.map +1 -1
- package/dist/image-blur-with-semaphore.adapter.js.map +1 -1
- package/dist/image-blur.adapter.d.ts.map +1 -1
- package/dist/image-blur.adapter.js.map +1 -1
- package/dist/image-compressor-noop.adapter.d.ts.map +1 -1
- package/dist/image-compressor-with-semaphore.adapter.d.ts.map +1 -1
- package/dist/image-compressor-with-semaphore.adapter.js.map +1 -1
- package/dist/image-compressor.adapter.d.ts.map +1 -1
- package/dist/image-compressor.adapter.js.map +1 -1
- package/dist/image-exif-clear-noop.adapter.d.ts.map +1 -1
- package/dist/image-exif-clear-with-semaphore.adapter.d.ts.map +1 -1
- package/dist/image-exif-clear-with-semaphore.adapter.js.map +1 -1
- package/dist/image-exif-clear.adapter.d.ts.map +1 -1
- package/dist/image-exif-clear.adapter.js.map +1 -1
- package/dist/image-formatter-noop.adapter.d.ts.map +1 -1
- package/dist/image-formatter-with-semaphore.adapter.d.ts.map +1 -1
- package/dist/image-formatter-with-semaphore.adapter.js.map +1 -1
- package/dist/image-formatter.adapter.d.ts.map +1 -1
- package/dist/image-formatter.adapter.js.map +1 -1
- package/dist/image-generator-noop.adapter.d.ts.map +1 -1
- package/dist/image-generator-noop.adapter.js.map +1 -1
- package/dist/image-generator-web-view.adapter.d.ts.map +1 -1
- package/dist/image-generator-web-view.adapter.js +8 -72
- package/dist/image-generator-web-view.adapter.js.map +1 -1
- package/dist/image-grayscale-noop.adapter.d.ts.map +1 -1
- package/dist/image-grayscale-with-semaphore.adapter.d.ts.map +1 -1
- package/dist/image-grayscale-with-semaphore.adapter.js.map +1 -1
- package/dist/image-grayscale.adapter.d.ts.map +1 -1
- package/dist/image-grayscale.adapter.js.map +1 -1
- package/dist/image-info-noop.adapter.d.ts.map +1 -1
- package/dist/image-info-noop.adapter.js.map +1 -1
- package/dist/image-info-with-semaphore.adapter.d.ts.map +1 -1
- package/dist/image-info-with-semaphore.adapter.js.map +1 -1
- package/dist/image-info.adapter.d.ts.map +1 -1
- package/dist/image-info.adapter.js.map +1 -1
- package/dist/image-processor-noop.adapter.d.ts.map +1 -1
- package/dist/image-processor-with-semaphore.adapter.d.ts.map +1 -1
- package/dist/image-processor-with-semaphore.adapter.js.map +1 -1
- package/dist/image-processor.adapter.d.ts.map +1 -1
- package/dist/image-processor.adapter.js.map +1 -1
- package/dist/image-resizer-noop.adapter.d.ts.map +1 -1
- package/dist/image-resizer-with-semaphore.adapter.d.ts.map +1 -1
- package/dist/image-resizer-with-semaphore.adapter.js.map +1 -1
- package/dist/image-resizer.adapter.d.ts.map +1 -1
- package/dist/image-resizer.adapter.js.map +1 -1
- package/dist/in-flight-requests-hono.middleware.d.ts.map +1 -1
- package/dist/in-flight-requests-tracker.service.d.ts.map +1 -1
- package/dist/in-flight-requests-tracker.service.js.map +1 -1
- package/dist/in-flight-requests.middleware.d.ts.map +1 -1
- package/dist/index.d.ts +19 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -6
- package/dist/index.js.map +1 -1
- package/dist/instrumentation.service.d.ts.map +1 -1
- package/dist/instrumentation.service.js.map +1 -1
- package/dist/invariant-error-handler.service.d.ts.map +1 -1
- package/dist/invariant.service.d.ts.map +1 -1
- package/dist/job-claimer-noop.adapter.d.ts.map +1 -1
- package/dist/job-claimer-noop.adapter.js.map +1 -1
- package/dist/job-claimer-sqlite.adapter.d.ts.map +1 -1
- package/dist/job-claimer-sqlite.adapter.js.map +1 -1
- package/dist/job-completer-collecting.adapter.d.ts.map +1 -1
- package/dist/job-completer-noop.adapter.d.ts.map +1 -1
- package/dist/job-completer-sqlite.adapter.d.ts.map +1 -1
- package/dist/job-completer-sqlite.adapter.js.map +1 -1
- package/dist/job-enqueuer-collecting.adapter.d.ts.map +1 -1
- package/dist/job-enqueuer-noop.adapter.d.ts.map +1 -1
- package/dist/job-enqueuer-sqlite.adapter.d.ts.map +1 -1
- package/dist/job-enqueuer-sqlite.adapter.js.map +1 -1
- package/dist/job-envelope.d.ts.map +1 -1
- package/dist/job-failer-collecting.adapter.d.ts.map +1 -1
- package/dist/job-failer-noop.adapter.d.ts.map +1 -1
- package/dist/job-failer-sqlite.adapter.d.ts.map +1 -1
- package/dist/job-failer-sqlite.adapter.js.map +1 -1
- package/dist/job-pruner-collecting.adapter.d.ts.map +1 -1
- package/dist/job-pruner-noop.adapter.d.ts.map +1 -1
- package/dist/job-pruner-sqlite.adapter.d.ts.map +1 -1
- package/dist/job-pruner-sqlite.adapter.js.map +1 -1
- package/dist/job-queue-noop.adapter.d.ts.map +1 -1
- package/dist/job-queue-noop.adapter.js.map +1 -1
- package/dist/job-queue-sqlite-store.service.d.ts.map +1 -1
- package/dist/job-queue-stats-provider-noop.adapter.d.ts.map +1 -1
- package/dist/job-queue-stats-provider-sqlite.adapter.d.ts.map +1 -1
- package/dist/job-queue-stats-provider-sqlite.adapter.js.map +1 -1
- package/dist/job-queue-with-logger.adapter.d.ts +2 -0
- package/dist/job-queue-with-logger.adapter.d.ts.map +1 -1
- package/dist/job-queue-with-logger.adapter.js +133 -36
- package/dist/job-queue-with-logger.adapter.js.map +1 -1
- package/dist/job-queue.adapter.d.ts.map +1 -1
- package/dist/job-queue.adapter.js.map +1 -1
- package/dist/job-registry.adapter.d.ts.map +1 -1
- package/dist/job-requeuer-collecting.adapter.d.ts.map +1 -1
- package/dist/job-requeuer-noop.adapter.d.ts.map +1 -1
- package/dist/job-requeuer-sqlite.adapter.d.ts.map +1 -1
- package/dist/job-requeuer-sqlite.adapter.js.map +1 -1
- package/dist/job-retry-policy-backoff.strategy.d.ts.map +1 -1
- package/dist/job-retry-policy-backoff.strategy.js.map +1 -1
- package/dist/job-retry-policy-composite.strategy.d.ts.map +1 -1
- package/dist/job-retry-policy-composite.strategy.js.map +1 -1
- package/dist/job-retry-policy-error-filter.strategy.d.ts.map +1 -1
- package/dist/job-retry-policy-error-filter.strategy.js.map +1 -1
- package/dist/job-retry-policy-limit.strategy.d.ts.map +1 -1
- package/dist/job-retry-policy-limit.strategy.js.map +1 -1
- package/dist/job-retry-policy-noop.strategy.d.ts.map +1 -1
- package/dist/language-detector-cookie.strategy.d.ts.map +1 -1
- package/dist/language-detector-cookie.strategy.js.map +1 -1
- package/dist/language-detector-header.strategy.d.ts.map +1 -1
- package/dist/language-detector-hono.middleware.d.ts.map +1 -1
- package/dist/language-detector-query.strategy.d.ts.map +1 -1
- package/dist/language-detector-query.strategy.js.map +1 -1
- package/dist/language-detector.middleware.d.ts.map +1 -1
- package/dist/language-detector.middleware.js.map +1 -1
- package/dist/languages.vo.d.ts.map +1 -1
- package/dist/languages.vo.js.map +1 -1
- package/dist/liveness-hono.handler.d.ts +1 -1
- package/dist/liveness-hono.handler.d.ts.map +1 -1
- package/dist/liveness.handler.d.ts.map +1 -1
- package/dist/logger-collecting.adapter.d.ts.map +1 -1
- package/dist/logger-noop.adapter.d.ts.map +1 -1
- package/dist/logger-stats-provider-noop.adapter.d.ts.map +1 -1
- package/dist/logger.port.d.ts +0 -1
- package/dist/logger.port.d.ts.map +1 -1
- package/dist/mailer-collecting.adapter.d.ts.map +1 -1
- package/dist/mailer-content-html.vo.d.ts.map +1 -1
- package/dist/mailer-file.adapter.d.ts.map +1 -1
- package/dist/mailer-file.adapter.js.map +1 -1
- package/dist/mailer-noop.adapter.d.ts.map +1 -1
- package/dist/mailer-smtp.adapter.d.ts.map +1 -1
- package/dist/mailer-smtp.adapter.js.map +1 -1
- package/dist/mailer-subject.vo.d.ts.map +1 -1
- package/dist/mailer-template.vo.d.ts.map +1 -1
- package/dist/mailer-template.vo.js.map +1 -1
- package/dist/mailer-with-logger.adapter.d.ts.map +1 -1
- package/dist/mailer-with-logger.adapter.js.map +1 -1
- package/dist/mailer-with-retry.adapter.d.ts.map +1 -1
- package/dist/mailer-with-retry.adapter.js.map +1 -1
- package/dist/mailer-with-timeout.adapter.d.ts.map +1 -1
- package/dist/mailer-with-timeout.adapter.js.map +1 -1
- package/dist/mailer.builder.d.ts.map +1 -1
- package/dist/mailer.builder.js.map +1 -1
- package/dist/markdown-generator-noop.adapter.d.ts.map +1 -1
- package/dist/markdown-generator-noop.adapter.js.map +1 -1
- package/dist/markdown-generator.adapter.d.ts.map +1 -1
- package/dist/memory-consumption.service.d.ts.map +1 -1
- package/dist/message-bus-collecting.adapter.d.ts.map +1 -1
- package/dist/message-bus-emittery.adapter.d.ts.map +1 -1
- package/dist/message-bus-noop.adapter.d.ts.map +1 -1
- package/dist/message-bus-with-logger.adapter.d.ts +2 -0
- package/dist/message-bus-with-logger.adapter.d.ts.map +1 -1
- package/dist/message-bus-with-logger.adapter.js +28 -8
- package/dist/message-bus-with-logger.adapter.js.map +1 -1
- package/dist/middleware-hono-noop.adapter.d.ts.map +1 -1
- package/dist/modules/history/event-handlers/onHistoryClearedEvent.d.ts.map +1 -1
- package/dist/modules/history/event-handlers/onHistoryPopulatedEvent.d.ts.map +1 -1
- package/dist/modules/history/events/HISTORY_CLEARED_EVENT.d.ts +4 -4
- package/dist/modules/history/events/HISTORY_POPULATED_EVENT.d.ts +7 -7
- package/dist/modules/history/value-objects/history-operation.d.ts.map +1 -1
- package/dist/modules/history/value-objects/history-payload.d.ts.map +1 -1
- package/dist/modules/history/value-objects/history-subject.d.ts.map +1 -1
- package/dist/modules/preferences/command-handlers/handleSetUserLanguageCommand.d.ts.map +1 -1
- package/dist/modules/preferences/commands/SET_USER_LANGUAGE_COMMAND.d.ts +3 -3
- package/dist/modules/preferences/events/USER_LANGUAGE_SET_EVENT.d.ts +5 -5
- package/dist/modules/preferences/invariants/user-language-has-changed.d.ts.map +1 -1
- package/dist/modules/preferences/open-host-queries/user-language.d.ts.map +1 -1
- package/dist/modules/preferences/open-host-queries/user-language.js.map +1 -1
- package/dist/modules/preferences/ports/user-language-resolver.d.ts.map +1 -1
- package/dist/modules/preferences/ports/user-language-resolver.js.map +1 -1
- package/dist/modules/system/cron-tasks/passage-of-time-hourly.d.ts.map +1 -1
- package/dist/modules/system/cron-tasks/passage-of-time-minute.d.ts.map +1 -1
- package/dist/modules/system/events/HOUR_HAS_PASSED_EVENT.d.ts +4 -4
- package/dist/modules/system/events/MINUTE_HAS_PASSED_EVENT.d.ts +4 -4
- package/dist/modules/system/events/SECURITY_VIOLATION_DETECTED_EVENT.d.ts +7 -7
- package/dist/modules/system/invariants/feature-flag-enabled.d.ts.map +1 -1
- package/dist/modules/system/job-handlers/send-email-job.handler.d.ts.map +1 -1
- package/dist/modules/system/jobs/SEND_EMAIL_JOB.d.ts +4 -4
- package/dist/nonce-provider-crypto.adapter.d.ts.map +1 -1
- package/dist/nonce-provider-deterministic.adapter.d.ts.map +1 -1
- package/dist/nonce-provider-noop.adapter.d.ts.map +1 -1
- package/dist/nonce-value.vo.d.ts.map +1 -1
- package/dist/payload-serializer-collecting.adapter.d.ts.map +1 -1
- package/dist/payload-serializer-json.adapter.d.ts.map +1 -1
- package/dist/pdf-generator-noop.adapter.d.ts.map +1 -1
- package/dist/pdf-generator-with-logger.adapter.d.ts.map +1 -1
- package/dist/pdf-generator-with-logger.adapter.js.map +1 -1
- package/dist/port.vo.d.ts.map +1 -1
- package/dist/prerequisite-runner-startup.service.d.ts.map +1 -1
- package/dist/prerequisite-runner-startup.service.js.map +1 -1
- package/dist/prerequisite-verifier-binary.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-binary.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-bun.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-bun.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-clock-drift.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-clock-drift.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-cron-scheduler.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-cron-scheduler.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-directory.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-directory.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-dns.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-dns.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-external-api.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-external-api.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-file.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-file.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-mailer.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-mailer.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-memory.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-memory.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-node.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-node.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-os.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-os.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-outside-connectivity.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-outside-connectivity.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-port.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-port.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-ram.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-ram.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-running-user.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-running-user.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-self.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-sms.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-sms.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-space.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-space.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-sqlite.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-sqlite.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-ssl-certificate-expiry.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-ssl-certificate-expiry.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-timezone-utc.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-timezone-utc.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-translations.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-translations.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-with-cache.adapter.d.ts +2 -0
- package/dist/prerequisite-verifier-with-cache.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-with-cache.adapter.js +8 -5
- package/dist/prerequisite-verifier-with-cache.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-with-fail-safe.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-with-fail-safe.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-with-logger.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-with-logger.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-with-retry.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-with-retry.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-with-timeout.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-with-timeout.adapter.js.map +1 -1
- package/dist/prerequisite-verifier.decorator.d.ts +21 -15
- package/dist/prerequisite-verifier.decorator.d.ts.map +1 -1
- package/dist/prerequisite-verifier.port.d.ts.map +1 -1
- package/dist/prerequisite-verifier.port.js.map +1 -1
- package/dist/prerequisite.vo.d.ts.map +1 -1
- package/dist/prerequisite.vo.js.map +1 -1
- package/dist/randomness-crypto.strategy.d.ts.map +1 -1
- package/dist/randomness-math.strategy.d.ts.map +1 -1
- package/dist/randomness-noop.strategy.d.ts.map +1 -1
- package/dist/randomness-noop.strategy.js.map +1 -1
- package/dist/rate-limiter.service.d.ts +22 -0
- package/dist/rate-limiter.service.d.ts.map +1 -0
- package/dist/rate-limiter.service.js +31 -0
- package/dist/rate-limiter.service.js.map +1 -0
- package/dist/reactive-config-file-json.adapter.d.ts.map +1 -1
- package/dist/reactive-config-file-json.adapter.js.map +1 -1
- package/dist/reactive-config-noop.adapter.d.ts.map +1 -1
- package/dist/reactive-config-with-cache.adapter.d.ts +3 -1
- package/dist/reactive-config-with-cache.adapter.d.ts.map +1 -1
- package/dist/reactive-config-with-cache.adapter.js +3 -1
- package/dist/reactive-config-with-cache.adapter.js.map +1 -1
- package/dist/reactive-config-with-fallback.adapter.d.ts.map +1 -1
- package/dist/reactive-config-with-fallback.adapter.js.map +1 -1
- package/dist/reactive-config-with-logger.adapter.d.ts.map +1 -1
- package/dist/reactive-config-with-logger.adapter.js.map +1 -1
- package/dist/readiness-hono.handler.d.ts +1 -1
- package/dist/readiness-hono.handler.d.ts.map +1 -1
- package/dist/readiness.handler.d.ts.map +1 -1
- package/dist/readiness.handler.js.map +1 -1
- package/dist/recaptcha-secret-key.vo.d.ts.map +1 -1
- package/dist/recaptcha-site-key.vo.d.ts.map +1 -1
- package/dist/redactor-composite.strategy.d.ts.map +1 -1
- package/dist/redactor-composite.strategy.js.map +1 -1
- package/dist/redactor-error-cause-depth-limit.strategy.d.ts.map +1 -1
- package/dist/redactor-error-cause-depth-limit.strategy.js.map +1 -1
- package/dist/redactor-error-stack-hide.strategy.d.ts.map +1 -1
- package/dist/redactor-mask.strategy.d.ts.map +1 -1
- package/dist/redactor-mask.strategy.js.map +1 -1
- package/dist/redactor-metadata-compact-array.strategy.d.ts.map +1 -1
- package/dist/redactor-metadata-compact-array.strategy.js.map +1 -1
- package/dist/redactor-metadata-compact-object.strategy.d.ts.map +1 -1
- package/dist/redactor-metadata-compact-object.strategy.js.map +1 -1
- package/dist/redactor-noop.strategy.d.ts.map +1 -1
- package/dist/redactor-url-query.strategy.d.ts.map +1 -1
- package/dist/remote-file-storage-disk.adapter.d.ts.map +1 -1
- package/dist/remote-file-storage-disk.adapter.js.map +1 -1
- package/dist/remote-file-storage-noop.adapter.d.ts.map +1 -1
- package/dist/remote-file-storage-noop.adapter.js.map +1 -1
- package/dist/remote-file-storage-with-logger.adapter.d.ts.map +1 -1
- package/dist/remote-file-storage-with-logger.adapter.js.map +1 -1
- package/dist/request-context-hono.adapter.d.ts.map +1 -1
- package/dist/request-context-hono.adapter.js +4 -1
- package/dist/request-context-hono.adapter.js.map +1 -1
- package/dist/retry-backoff-exponential.strategy.d.ts.map +1 -1
- package/dist/retry-backoff-exponential.strategy.js.map +1 -1
- package/dist/retry-backoff-jitter.strategy.d.ts.map +1 -1
- package/dist/retry-backoff-jitter.strategy.js.map +1 -1
- package/dist/retry-backoff-linear.strategy.d.ts.map +1 -1
- package/dist/retry-backoff-linear.strategy.js.map +1 -1
- package/dist/retry-backoff-noop.strategy.d.ts.map +1 -1
- package/dist/retry.service.d.ts.map +1 -1
- package/dist/retry.service.js.map +1 -1
- package/dist/sealer-aes-gcm.adapter.d.ts.map +1 -1
- package/dist/sealer-aes-gcm.adapter.js.map +1 -1
- package/dist/sealer-noop.adapter.d.ts.map +1 -1
- package/dist/secure-key-generator-crypto.adapter.d.ts.map +1 -1
- package/dist/secure-key-generator-crypto.adapter.js.map +1 -1
- package/dist/secure-key-generator-noop.adapter.d.ts.map +1 -1
- package/dist/secure-key-generator-noop.adapter.js.map +1 -1
- package/dist/security-context.vo.d.ts.map +1 -1
- package/dist/security-context.vo.js.map +1 -1
- package/dist/security-countermeasure-ban.strategy.d.ts.map +1 -1
- package/dist/security-countermeasure-ban.strategy.js.map +1 -1
- package/dist/security-countermeasure-mirage.strategy.d.ts.map +1 -1
- package/dist/security-countermeasure-mirage.strategy.js.map +1 -1
- package/dist/security-countermeasure-name.vo.d.ts.map +1 -1
- package/dist/security-countermeasure-noop.strategy.d.ts.map +1 -1
- package/dist/security-countermeasure-report.strategy.d.ts.map +1 -1
- package/dist/security-countermeasure-report.strategy.js.map +1 -1
- package/dist/security-countermeasure-tarpit.strategy.d.ts.map +1 -1
- package/dist/security-countermeasure-tarpit.strategy.js.map +1 -1
- package/dist/security-policy.vo.d.ts.map +1 -1
- package/dist/security-policy.vo.js.map +1 -1
- package/dist/security-rule-and.strategy.d.ts.map +1 -1
- package/dist/security-rule-and.strategy.js.map +1 -1
- package/dist/security-rule-bait-routes.strategy.d.ts.map +1 -1
- package/dist/security-rule-bait-routes.strategy.js.map +1 -1
- package/dist/security-rule-fail.strategy.d.ts.map +1 -1
- package/dist/security-rule-honey-pot-field.strategy.d.ts.map +1 -1
- package/dist/security-rule-honey-pot-field.strategy.js.map +1 -1
- package/dist/security-rule-name.vo.d.ts.map +1 -1
- package/dist/security-rule-or.strategy.d.ts.map +1 -1
- package/dist/security-rule-or.strategy.js.map +1 -1
- package/dist/security-rule-pass.strategy.d.ts.map +1 -1
- package/dist/security-rule-user-agent.strategy.d.ts.map +1 -1
- package/dist/security-rule-user-agent.strategy.js.map +1 -1
- package/dist/security-rule-violation-threshold.strategy.d.ts.map +1 -1
- package/dist/security-rule-violation-threshold.strategy.js +5 -3
- package/dist/security-rule-violation-threshold.strategy.js.map +1 -1
- package/dist/semaphore.service.d.ts.map +1 -1
- package/dist/setup-hono.service.d.ts.map +1 -1
- package/dist/shield-api-key-hono.strategy.d.ts.map +1 -1
- package/dist/shield-api-key.strategy.d.ts.map +1 -1
- package/dist/shield-api-key.strategy.js.map +1 -1
- package/dist/shield-auth-hono.strategy.d.ts.map +1 -1
- package/dist/shield-auth.strategy.d.ts.map +1 -1
- package/dist/shield-auth.strategy.js.map +1 -1
- package/dist/shield-basic-auth-hono.strategy.d.ts.map +1 -1
- package/dist/shield-basic-auth-hono.strategy.js.map +1 -1
- package/dist/shield-basic-auth.strategy.d.ts.map +1 -1
- package/dist/shield-basic-auth.strategy.js.map +1 -1
- package/dist/shield-body-limit-hono.strategy.d.ts.map +1 -1
- package/dist/shield-body-limit.strategy.d.ts.map +1 -1
- package/dist/shield-body-limit.strategy.js.map +1 -1
- package/dist/shield-csrf-hono.strategy.d.ts.map +1 -1
- package/dist/shield-csrf.strategy.d.ts.map +1 -1
- package/dist/shield-csrf.strategy.js.map +1 -1
- package/dist/shield-feature-flag-hono.strategy.d.ts.map +1 -1
- package/dist/shield-feature-flag.strategy.d.ts.map +1 -1
- package/dist/shield-feature-flag.strategy.js.map +1 -1
- package/dist/shield-hcaptcha-hono-local.strategy.d.ts.map +1 -1
- package/dist/shield-hcaptcha-hono-local.strategy.js.map +1 -1
- package/dist/shield-hcaptcha-hono.strategy.d.ts.map +1 -1
- package/dist/shield-hcaptcha.strategy.d.ts.map +1 -1
- package/dist/shield-hcaptcha.strategy.js.map +1 -1
- package/dist/shield-ip-blacklist-hono.strategy.d.ts.map +1 -1
- package/dist/shield-ip-blacklist.strategy.d.ts.map +1 -1
- package/dist/shield-ip-blacklist.strategy.js.map +1 -1
- package/dist/shield-ip-whitelist-hono.strategy.d.ts.map +1 -1
- package/dist/shield-ip-whitelist.strategy.d.ts.map +1 -1
- package/dist/shield-ip-whitelist.strategy.js.map +1 -1
- package/dist/shield-maintenance-hono.strategy.d.ts.map +1 -1
- package/dist/shield-maintenance.strategy.d.ts.map +1 -1
- package/dist/shield-maintenance.strategy.js.map +1 -1
- package/dist/shield-rate-limit-hono.strategy.d.ts +2 -2
- package/dist/shield-rate-limit-hono.strategy.d.ts.map +1 -1
- package/dist/shield-rate-limit.strategy.d.ts +2 -2
- package/dist/shield-rate-limit.strategy.d.ts.map +1 -1
- package/dist/shield-rate-limit.strategy.js +8 -2
- package/dist/shield-rate-limit.strategy.js.map +1 -1
- package/dist/shield-recaptcha-hono.strategy.d.ts.map +1 -1
- package/dist/shield-recaptcha.strategy.d.ts.map +1 -1
- package/dist/shield-recaptcha.strategy.js.map +1 -1
- package/dist/shield-security-hono.strategy.d.ts.map +1 -1
- package/dist/shield-security-hono.strategy.js.map +1 -1
- package/dist/shield-security.strategy.d.ts.map +1 -1
- package/dist/shield-security.strategy.js.map +1 -1
- package/dist/shield-timeout-hono.strategy.d.ts.map +1 -1
- package/dist/shield-timeout.strategy.d.ts.map +1 -1
- package/dist/shield-timeout.strategy.js.map +1 -1
- package/dist/shield-webhook-hono.strategy.d.ts +2 -2
- package/dist/shield-webhook-hono.strategy.d.ts.map +1 -1
- package/dist/shield-webhook-hono.strategy.js +7 -3
- package/dist/shield-webhook-hono.strategy.js.map +1 -1
- package/dist/shield-webhook.strategy.d.ts +23 -3
- package/dist/shield-webhook.strategy.d.ts.map +1 -1
- package/dist/shield-webhook.strategy.js +18 -4
- package/dist/shield-webhook.strategy.js.map +1 -1
- package/dist/simulated-error-hono.middleware.d.ts.map +1 -1
- package/dist/simulated-error.middleware.d.ts.map +1 -1
- package/dist/sitemap-entries-provider-dynamic.adapter.d.ts.map +1 -1
- package/dist/sitemap-entries-provider-dynamic.adapter.js.map +1 -1
- package/dist/sitemap-entries-provider-static.adapter.d.ts.map +1 -1
- package/dist/sitemap-entries-provider-static.adapter.js.map +1 -1
- package/dist/sitemap-entries-provider-with-cache.adapter.d.ts +2 -0
- package/dist/sitemap-entries-provider-with-cache.adapter.d.ts.map +1 -1
- package/dist/sitemap-entries-provider-with-cache.adapter.js +8 -5
- package/dist/sitemap-entries-provider-with-cache.adapter.js.map +1 -1
- package/dist/sitemap-entry.vo.d.ts +11 -10
- package/dist/sitemap-entry.vo.d.ts.map +1 -1
- package/dist/sitemap-entry.vo.js +19 -0
- package/dist/sitemap-entry.vo.js.map +1 -1
- package/dist/sitemap-hono.handler.d.ts +1 -1
- package/dist/sitemap-hono.handler.d.ts.map +1 -1
- package/dist/sitemap-priority.vo.d.ts.map +1 -1
- package/dist/sitemap-url.vo.d.ts +1 -1
- package/dist/sitemap-url.vo.d.ts.map +1 -1
- package/dist/sitemap.handler.d.ts.map +1 -1
- package/dist/sitemap.handler.js.map +1 -1
- package/dist/sitemap.service.d.ts.map +1 -1
- package/dist/sitemap.service.js.map +1 -1
- package/dist/sleeper-noop.adapter.d.ts.map +1 -1
- package/dist/sleeper-system.adapter.d.ts.map +1 -1
- package/dist/slower-hono.middleware.d.ts.map +1 -1
- package/dist/slower.middleware.d.ts.map +1 -1
- package/dist/slower.middleware.js.map +1 -1
- package/dist/sms-collecting.adapter.d.ts.map +1 -1
- package/dist/sms-noop.adapter.d.ts.map +1 -1
- package/dist/sms-with-logger.adapter.d.ts.map +1 -1
- package/dist/sms-with-logger.adapter.js.map +1 -1
- package/dist/sms-with-retry.adapter.d.ts.map +1 -1
- package/dist/sms-with-retry.adapter.js.map +1 -1
- package/dist/sms-with-timeout.adapter.d.ts.map +1 -1
- package/dist/sms-with-timeout.adapter.js.map +1 -1
- package/dist/sms.builder.d.ts.map +1 -1
- package/dist/sms.builder.js.map +1 -1
- package/dist/smtp-host.vo.d.ts.map +1 -1
- package/dist/smtp-pass.vo.d.ts.map +1 -1
- package/dist/smtp-user.vo.d.ts.map +1 -1
- package/dist/sse-hono.handler.d.ts +1 -1
- package/dist/sse-hono.handler.d.ts.map +1 -1
- package/dist/sse-hono.handler.js.map +1 -1
- package/dist/sse-registry-collecting.adapter.d.ts.map +1 -1
- package/dist/sse-registry-noop.adapter.d.ts.map +1 -1
- package/dist/sse-registry-with-limit.adapter.d.ts.map +1 -1
- package/dist/sse-registry-with-limit.adapter.js.map +1 -1
- package/dist/sse-registry-with-logger.adapter.d.ts +2 -0
- package/dist/sse-registry-with-logger.adapter.d.ts.map +1 -1
- package/dist/sse-registry-with-logger.adapter.js +80 -22
- package/dist/sse-registry-with-logger.adapter.js.map +1 -1
- package/dist/sse-registry.adapter.d.ts.map +1 -1
- package/dist/ssr-bun.service.d.ts.map +1 -1
- package/dist/ssr-csp.d.ts.map +1 -1
- package/dist/ssr.service.d.ts.map +1 -1
- package/dist/ssr.service.js.map +1 -1
- package/dist/standard-schema-validator.service.d.ts.map +1 -1
- package/dist/static-config.adapter.d.ts.map +1 -1
- package/dist/static-config.adapter.js.map +1 -1
- package/dist/static-files-hono.service.d.ts.map +1 -1
- package/dist/stopwatch.service.d.ts.map +1 -1
- package/dist/stopwatch.service.js.map +1 -1
- package/dist/subject-application-resolver.vo.d.ts.map +1 -1
- package/dist/subject-application-resolver.vo.js.map +1 -1
- package/dist/subject-request-resolver.vo.d.ts.map +1 -1
- package/dist/subject-request-resolver.vo.js.map +1 -1
- package/dist/subject-segment-build.strategy.d.ts.map +1 -1
- package/dist/subject-segment-build.strategy.js.map +1 -1
- package/dist/subject-segment-cookie.strategy.d.ts.map +1 -1
- package/dist/subject-segment-cookie.strategy.js.map +1 -1
- package/dist/subject-segment-env.strategy.d.ts.map +1 -1
- package/dist/subject-segment-env.strategy.js.map +1 -1
- package/dist/subject-segment-fixed.strategy.d.ts.map +1 -1
- package/dist/subject-segment-fixed.strategy.js.map +1 -1
- package/dist/subject-segment-header.strategy.d.ts.map +1 -1
- package/dist/subject-segment-header.strategy.js.map +1 -1
- package/dist/subject-segment-ip.strategy.d.ts.map +1 -1
- package/dist/subject-segment-method.strategy.d.ts.map +1 -1
- package/dist/subject-segment-param.strategy.d.ts.map +1 -1
- package/dist/subject-segment-param.strategy.js.map +1 -1
- package/dist/subject-segment-path.strategy.d.ts.map +1 -1
- package/dist/subject-segment-query.strategy.d.ts.map +1 -1
- package/dist/subject-segment-user.strategy.d.ts.map +1 -1
- package/dist/temporary-file-absolute.adapter.d.ts.map +1 -1
- package/dist/temporary-file-absolute.adapter.js.map +1 -1
- package/dist/temporary-file-noop.adapter.d.ts.map +1 -1
- package/dist/temporary-file-noop.adapter.js.map +1 -1
- package/dist/time-zone-offset-hono.middleware.d.ts.map +1 -1
- package/dist/time-zone-offset.middleware.d.ts.map +1 -1
- package/dist/time-zone-offset.middleware.js.map +1 -1
- package/dist/timekeeper-google.adapter.d.ts.map +1 -1
- package/dist/timekeeper-google.adapter.js.map +1 -1
- package/dist/timekeeper-noop.adapter.d.ts.map +1 -1
- package/dist/timekeeper-noop.adapter.js.map +1 -1
- package/dist/timeout-cancellable-runner-bare.adapter.d.ts.map +1 -1
- package/dist/timeout-cancellable-runner-noop.adapter.d.ts.map +1 -1
- package/dist/timeout-cancellable-runner.port.d.ts.map +1 -1
- package/dist/timeout-runner-bare.adapter.d.ts.map +1 -1
- package/dist/timeout-runner-monitor.adapter.d.ts.map +1 -1
- package/dist/timeout-runner-monitor.adapter.js.map +1 -1
- package/dist/timeout-runner-noop.adapter.d.ts.map +1 -1
- package/dist/timeout-runner.port.d.ts.map +1 -1
- package/dist/timing-hono.middleware.d.ts.map +1 -1
- package/dist/timing.middleware.d.ts.map +1 -1
- package/dist/timing.middleware.js.map +1 -1
- package/dist/trailing-slash-hono.middleware.d.ts.map +1 -1
- package/dist/trailing-slash.middleware.d.ts.map +1 -1
- package/dist/trailing-slash.middleware.js.map +1 -1
- package/dist/translations-hono.handler.d.ts.map +1 -1
- package/dist/translations-provider-json.adapter.d.ts.map +1 -1
- package/dist/translations-provider-json.adapter.js.map +1 -1
- package/dist/translations-provider-noop.adapter.d.ts.map +1 -1
- package/dist/translations-provider-noop.adapter.js.map +1 -1
- package/dist/translations-provider-with-cache.adapter.d.ts +21 -0
- package/dist/translations-provider-with-cache.adapter.d.ts.map +1 -0
- package/dist/translations-provider-with-cache.adapter.js +22 -0
- package/dist/translations-provider-with-cache.adapter.js.map +1 -0
- package/dist/translations-provider.port.d.ts.map +1 -1
- package/dist/translations.handler.d.ts.map +1 -1
- package/dist/translations.handler.js.map +1 -1
- package/dist/translator.service.d.ts.map +1 -1
- package/dist/uptime.service.d.ts.map +1 -1
- package/dist/uptime.service.js.map +1 -1
- package/dist/uuid.vo.d.ts.map +1 -1
- package/dist/visitor-id-client.strategy.d.ts.map +1 -1
- package/dist/visitor-id-client.strategy.js.map +1 -1
- package/dist/weak-etag-extractor-fixed.strategy.d.ts.map +1 -1
- package/dist/weak-etag-extractor-fixed.strategy.js.map +1 -1
- package/dist/weak-etag-extractor-header.strategy.d.ts.map +1 -1
- package/dist/weak-etag-extractor-header.strategy.js.map +1 -1
- package/dist/weak-etag-extractor-hono.middleware.d.ts.map +1 -1
- package/dist/weak-etag-extractor-param.strategy.d.ts.map +1 -1
- package/dist/weak-etag-extractor-param.strategy.js.map +1 -1
- package/dist/weak-etag-extractor.middleware.d.ts.map +1 -1
- package/dist/weak-etag-extractor.middleware.js.map +1 -1
- package/dist/webhook-body-builder-text.strategy.d.ts.map +1 -1
- package/dist/webhook-id-extractor-header.strategy.d.ts +9 -0
- package/dist/webhook-id-extractor-header.strategy.d.ts.map +1 -0
- package/dist/webhook-id-extractor-header.strategy.js +13 -0
- package/dist/webhook-id-extractor-header.strategy.js.map +1 -0
- package/dist/webhook-id-extractor-json-field.strategy.d.ts +9 -0
- package/dist/webhook-id-extractor-json-field.strategy.d.ts.map +1 -0
- package/dist/webhook-id-extractor-json-field.strategy.js +14 -0
- package/dist/webhook-id-extractor-json-field.strategy.js.map +1 -0
- package/dist/webhook-id-extractor.strategy.d.ts +6 -0
- package/dist/webhook-id-extractor.strategy.d.ts.map +1 -0
- package/dist/webhook-id-extractor.strategy.js +2 -0
- package/dist/webhook-id-extractor.strategy.js.map +1 -0
- package/dist/webhook-id.vo.d.ts +9 -0
- package/dist/webhook-id.vo.d.ts.map +1 -0
- package/dist/webhook-id.vo.js +10 -0
- package/dist/webhook-id.vo.js.map +1 -0
- package/dist/webhook-secret.vo.d.ts.map +1 -1
- package/dist/webhook-signature-creator-noop.strategy.d.ts.map +1 -1
- package/dist/webhook-signature-creator-noop.strategy.js.map +1 -1
- package/dist/webhook-signature-creator-sha256.strategy.d.ts.map +1 -1
- package/dist/webhook-signature-creator-sha256.strategy.js.map +1 -1
- package/dist/{webhook-signature-extractor-header-exact.strategy.d.ts → webhook-signature-extractor-header.strategy.d.ts} +2 -2
- package/dist/webhook-signature-extractor-header.strategy.d.ts.map +1 -0
- package/dist/{webhook-signature-extractor-header-exact.strategy.js → webhook-signature-extractor-header.strategy.js} +2 -2
- package/dist/webhook-signature-extractor-header.strategy.js.map +1 -0
- package/dist/webhook-signature.vo.d.ts.map +1 -1
- package/dist/webhook-verifier-noop.strategy.d.ts.map +1 -1
- package/dist/webhook-verifier-sha256.strategy.d.ts.map +1 -1
- package/dist/webhook-verifier-sha256.strategy.js.map +1 -1
- package/dist/woodchopper-diagnostics-collecting.strategy.d.ts.map +1 -1
- package/dist/woodchopper-diagnostics-console-error.strategy.d.ts.map +1 -1
- package/dist/woodchopper-diagnostics-console-error.strategy.js.map +1 -1
- package/dist/woodchopper-diagnostics-noop.strategy.d.ts.map +1 -1
- package/dist/woodchopper-dispatcher-noop.strategy.d.ts.map +1 -1
- package/dist/woodchopper-dispatcher-sampling.strategy.d.ts.map +1 -1
- package/dist/woodchopper-dispatcher-sampling.strategy.js.map +1 -1
- package/dist/woodchopper-dispatcher-sync.strategy.d.ts.map +1 -1
- package/dist/woodchopper-dispatcher-sync.strategy.js.map +1 -1
- package/dist/woodchopper-formatter-human.strategy.d.ts.map +1 -1
- package/dist/woodchopper-formatter-json-raw.strategy.d.ts.map +1 -1
- package/dist/woodchopper-formatter-json.strategy.d.ts.map +1 -1
- package/dist/woodchopper-sampling-composite.strategy.d.ts.map +1 -1
- package/dist/woodchopper-sampling-composite.strategy.js.map +1 -1
- package/dist/woodchopper-sampling-correlation-id.strategy.d.ts.map +1 -1
- package/dist/woodchopper-sampling-correlation-id.strategy.js.map +1 -1
- package/dist/woodchopper-sampling-every-nth.strategy.d.ts.map +1 -1
- package/dist/woodchopper-sampling-every-nth.strategy.js.map +1 -1
- package/dist/woodchopper-sampling-pass-component.strategy.d.ts.map +1 -1
- package/dist/woodchopper-sampling-pass-component.strategy.js.map +1 -1
- package/dist/woodchopper-sampling-pass-level.strategy.d.ts.map +1 -1
- package/dist/woodchopper-sampling-pass-level.strategy.js.map +1 -1
- package/dist/woodchopper-sink-buffered-stderr.strategy.d.ts.map +1 -1
- package/dist/woodchopper-sink-buffered-stdout.strategy.d.ts.map +1 -1
- package/dist/woodchopper-sink-buffered.strategy.d.ts.map +1 -1
- package/dist/woodchopper-sink-buffered.strategy.js.map +1 -1
- package/dist/woodchopper-sink-collecting.strategy.d.ts.map +1 -1
- package/dist/woodchopper-sink-noop.strategy.d.ts.map +1 -1
- package/dist/woodchopper-sink-stderr.strategy.d.ts.map +1 -1
- package/dist/woodchopper-sink-stderr.strategy.js.map +1 -1
- package/dist/woodchopper-sink-stdout.strategy.d.ts.map +1 -1
- package/dist/woodchopper-sink-stdout.strategy.js.map +1 -1
- package/dist/woodchopper-stats.service.d.ts.map +1 -1
- package/dist/woodchopper.d.ts.map +1 -1
- package/dist/woodchopper.js.map +1 -1
- package/package.json +12 -18
- package/readme.md +19 -6
- package/src/api-version.middleware.ts +6 -2
- package/src/cache-codec-identity.strategy.ts +12 -0
- package/src/cache-codec-sitemap-entries.strategy.ts +17 -0
- package/src/cache-codec.strategy.ts +6 -0
- package/src/cache-repository-node-cache.adapter.ts +9 -5
- package/src/cache-repository-noop.adapter.ts +3 -2
- package/src/cache-repository-redis.adapter.ts +10 -7
- package/src/cache-repository.port.ts +3 -2
- package/src/cache-resolver-noop.strategy.ts +11 -0
- package/src/cache-resolver-read-through.strategy.ts +27 -0
- package/src/cache-resolver.strategy.ts +2 -11
- package/src/cache-value.vo.ts +9 -0
- package/src/cron-scheduler-with-logger.adapter.ts +35 -9
- package/src/cron-task-handler-with-logger.strategy.ts +1 -1
- package/src/crypto-key-provider-with-memo.adapter.ts +21 -0
- package/src/environment-loader-process-safe.adapter.ts +12 -4
- package/src/event-store-with-logger.adapter.ts +97 -27
- package/src/file-draft-tar-gz.service.ts +23 -0
- package/src/file-reader-json-with-cache.adapter.ts +7 -2
- package/src/file-reader-text-with-cache.adapter.ts +8 -1
- package/src/healthcheck-hono.handler.ts +2 -2
- package/src/healthcheck.handler.ts +2 -0
- package/src/http-logger-hono.middleware.ts +0 -3
- package/src/http-logger.middleware.ts +0 -2
- package/src/idempotency-store-cache.adapter.ts +19 -0
- package/src/idempotency-store-noop.adapter.ts +8 -0
- package/src/idempotency-store-with-logger.adapter.ts +59 -0
- package/src/idempotency-store.port.ts +5 -0
- package/src/index.ts +19 -6
- package/src/job-queue-with-logger.adapter.ts +156 -43
- package/src/logger.port.ts +0 -1
- package/src/message-bus-with-logger.adapter.ts +37 -10
- package/src/prerequisite-verifier-with-cache.adapter.ts +13 -7
- package/src/rate-limiter.service.ts +45 -0
- package/src/reactive-config-with-cache.adapter.ts +8 -2
- package/src/request-context-hono.adapter.ts +5 -1
- package/src/security-rule-violation-threshold.strategy.ts +5 -6
- package/src/shield-rate-limit-hono.strategy.ts +2 -2
- package/src/shield-rate-limit.strategy.ts +14 -7
- package/src/shield-webhook-hono.strategy.ts +11 -3
- package/src/shield-webhook.strategy.ts +41 -6
- package/src/sitemap-entries-provider-with-cache.adapter.ts +13 -7
- package/src/sitemap-entry.vo.ts +23 -11
- package/src/sse-registry-with-logger.adapter.ts +94 -25
- package/src/translations-provider-with-cache.adapter.ts +38 -0
- package/src/webhook-id-extractor-header.strategy.ts +14 -0
- package/src/webhook-id-extractor-json-field.strategy.ts +16 -0
- package/src/webhook-id-extractor.strategy.ts +6 -0
- package/src/webhook-id.vo.ts +17 -0
- package/src/{webhook-signature-extractor-header-exact.strategy.ts → webhook-signature-extractor-header.strategy.ts} +1 -1
- package/dist/cache-resolver-simple.strategy.d.ts +0 -18
- package/dist/cache-resolver-simple.strategy.d.ts.map +0 -1
- package/dist/cache-resolver-simple.strategy.js +0 -23
- package/dist/cache-resolver-simple.strategy.js.map +0 -1
- package/dist/cache-response-hono.middleware.d.ts +0 -9
- package/dist/cache-response-hono.middleware.d.ts.map +0 -1
- package/dist/cache-response-hono.middleware.js +0 -34
- package/dist/cache-response-hono.middleware.js.map +0 -1
- package/dist/cache-response.middleware.d.ts +0 -28
- package/dist/cache-response.middleware.d.ts.map +0 -1
- package/dist/cache-response.middleware.js +0 -20
- package/dist/cache-response.middleware.js.map +0 -1
- package/dist/crypto-key-provider-with-cache.adapter.d.ts +0 -19
- package/dist/crypto-key-provider-with-cache.adapter.d.ts.map +0 -1
- package/dist/crypto-key-provider-with-cache.adapter.js +0 -19
- package/dist/crypto-key-provider-with-cache.adapter.js.map +0 -1
- package/dist/file-draft-zip.service.d.ts +0 -14
- package/dist/file-draft-zip.service.d.ts.map +0 -1
- package/dist/file-draft-zip.service.js +0 -41
- package/dist/file-draft-zip.service.js.map +0 -1
- package/dist/webhook-signature-extractor-header-exact.strategy.d.ts.map +0 -1
- package/dist/webhook-signature-extractor-header-exact.strategy.js.map +0 -1
- package/src/cache-resolver-simple.strategy.ts +0 -33
- package/src/cache-response-hono.middleware.ts +0 -53
- package/src/cache-response.middleware.ts +0 -47
- package/src/crypto-key-provider-with-cache.adapter.ts +0 -30
- package/src/file-draft-zip.service.ts +0 -56
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
import type * as tools from "@bgord/tools";
|
|
2
|
+
import type { ClockPort } from "./clock.port";
|
|
2
3
|
import { CorrelationStorage } from "./correlation-storage.service";
|
|
3
4
|
import type { GenericJob } from "./job.types";
|
|
4
5
|
import type { JobQueuePort } from "./job-queue.port";
|
|
5
6
|
import type { JobHandler } from "./job-registry.port";
|
|
6
7
|
import type { JobRetryPolicyStrategy } from "./job-retry-policy.strategy";
|
|
7
8
|
import type { LoggerPort } from "./logger.port";
|
|
9
|
+
import { Stopwatch } from "./stopwatch.service";
|
|
8
10
|
|
|
9
|
-
type Dependencies<Job extends GenericJob> = {
|
|
11
|
+
type Dependencies<Job extends GenericJob> = {
|
|
12
|
+
inner: JobQueuePort<Job>;
|
|
13
|
+
Logger: LoggerPort;
|
|
14
|
+
Clock: ClockPort;
|
|
15
|
+
};
|
|
10
16
|
|
|
11
17
|
export class JobQueueWithLoggerAdapter<Job extends GenericJob> implements JobQueuePort<Job> {
|
|
12
18
|
private readonly base = { component: "infra", operation: "job_queue" };
|
|
@@ -14,49 +20,135 @@ export class JobQueueWithLoggerAdapter<Job extends GenericJob> implements JobQue
|
|
|
14
20
|
constructor(private readonly deps: Dependencies<Job>) {}
|
|
15
21
|
|
|
16
22
|
async enqueue<EnqueuedJob extends Job>(job: EnqueuedJob, delay?: tools.Duration): Promise<EnqueuedJob> {
|
|
17
|
-
this.deps
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
const duration = new Stopwatch(this.deps);
|
|
24
|
+
|
|
25
|
+
try {
|
|
26
|
+
this.deps.Logger.info({
|
|
27
|
+
message: "Job queue enqueue attempt",
|
|
28
|
+
correlationId: CorrelationStorage.get(),
|
|
29
|
+
metadata: { job, delay },
|
|
30
|
+
...this.base,
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
const result = await this.deps.inner.enqueue(job, delay);
|
|
34
|
+
|
|
35
|
+
this.deps.Logger.info({
|
|
36
|
+
message: "Job queue enqueue success",
|
|
37
|
+
correlationId: CorrelationStorage.get(),
|
|
38
|
+
metadata: { job, delay, duration: duration.stop() },
|
|
39
|
+
...this.base,
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
return result;
|
|
43
|
+
} catch (error) {
|
|
44
|
+
this.deps.Logger.error({
|
|
45
|
+
message: "Job queue enqueue error",
|
|
46
|
+
correlationId: CorrelationStorage.get(),
|
|
47
|
+
error,
|
|
48
|
+
metadata: { job, delay, duration: duration.stop() },
|
|
49
|
+
...this.base,
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
25
54
|
}
|
|
26
55
|
|
|
27
56
|
async claim(limit: tools.IntegerPositiveType): Promise<ReadonlyArray<Job>> {
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
57
|
+
const duration = new Stopwatch(this.deps);
|
|
58
|
+
|
|
59
|
+
try {
|
|
60
|
+
this.deps.Logger.info({
|
|
61
|
+
message: "Job queue claim attempt",
|
|
62
|
+
correlationId: CorrelationStorage.get(),
|
|
63
|
+
metadata: { limit },
|
|
64
|
+
...this.base,
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
const jobs = await this.deps.inner.claim(limit);
|
|
68
|
+
|
|
69
|
+
this.deps.Logger.info({
|
|
70
|
+
message: "Job queue claim success",
|
|
71
|
+
correlationId: CorrelationStorage.get(),
|
|
72
|
+
metadata: { limit, count: jobs.length, jobs, duration: duration.stop() },
|
|
73
|
+
...this.base,
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
return jobs;
|
|
77
|
+
} catch (error) {
|
|
78
|
+
this.deps.Logger.error({
|
|
79
|
+
message: "Job queue claim error",
|
|
80
|
+
correlationId: CorrelationStorage.get(),
|
|
81
|
+
error,
|
|
82
|
+
metadata: { limit, duration: duration.stop() },
|
|
83
|
+
...this.base,
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
throw error;
|
|
87
|
+
}
|
|
38
88
|
}
|
|
39
89
|
|
|
40
90
|
async complete(id: GenericJob["id"]): Promise<void> {
|
|
41
|
-
this.deps
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
91
|
+
const duration = new Stopwatch(this.deps);
|
|
92
|
+
|
|
93
|
+
try {
|
|
94
|
+
this.deps.Logger.info({
|
|
95
|
+
message: "Job queue complete attempt",
|
|
96
|
+
correlationId: CorrelationStorage.get(),
|
|
97
|
+
metadata: { id },
|
|
98
|
+
...this.base,
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
await this.deps.inner.complete(id);
|
|
102
|
+
|
|
103
|
+
this.deps.Logger.info({
|
|
104
|
+
message: "Job queue complete success",
|
|
105
|
+
correlationId: CorrelationStorage.get(),
|
|
106
|
+
metadata: { id, duration: duration.stop() },
|
|
107
|
+
...this.base,
|
|
108
|
+
});
|
|
109
|
+
} catch (error) {
|
|
110
|
+
this.deps.Logger.error({
|
|
111
|
+
message: "Job queue complete error",
|
|
112
|
+
correlationId: CorrelationStorage.get(),
|
|
113
|
+
error,
|
|
114
|
+
metadata: { id, duration: duration.stop() },
|
|
115
|
+
...this.base,
|
|
116
|
+
});
|
|
117
|
+
|
|
118
|
+
throw error;
|
|
119
|
+
}
|
|
49
120
|
}
|
|
50
121
|
|
|
51
122
|
async fail(id: GenericJob["id"]): Promise<void> {
|
|
52
|
-
this.deps
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
123
|
+
const duration = new Stopwatch(this.deps);
|
|
124
|
+
|
|
125
|
+
try {
|
|
126
|
+
this.deps.Logger.warn({
|
|
127
|
+
message: "Job queue fail attempt",
|
|
128
|
+
correlationId: CorrelationStorage.get(),
|
|
129
|
+
metadata: { id },
|
|
130
|
+
...this.base,
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
await this.deps.inner.fail(id);
|
|
134
|
+
|
|
135
|
+
this.deps.Logger.warn({
|
|
136
|
+
message: "Job queue fail success",
|
|
137
|
+
correlationId: CorrelationStorage.get(),
|
|
138
|
+
metadata: { id, duration: duration.stop() },
|
|
139
|
+
...this.base,
|
|
140
|
+
});
|
|
141
|
+
} catch (error) {
|
|
142
|
+
this.deps.Logger.error({
|
|
143
|
+
message: "Job queue fail error",
|
|
144
|
+
correlationId: CorrelationStorage.get(),
|
|
145
|
+
error,
|
|
146
|
+
metadata: { id, duration: duration.stop() },
|
|
147
|
+
...this.base,
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
throw error;
|
|
151
|
+
}
|
|
60
152
|
}
|
|
61
153
|
|
|
62
154
|
async requeue(
|
|
@@ -64,14 +156,35 @@ export class JobQueueWithLoggerAdapter<Job extends GenericJob> implements JobQue
|
|
|
64
156
|
revision: GenericJob["revision"],
|
|
65
157
|
delay: tools.Duration,
|
|
66
158
|
): Promise<void> {
|
|
67
|
-
this.deps
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
159
|
+
const duration = new Stopwatch(this.deps);
|
|
160
|
+
|
|
161
|
+
try {
|
|
162
|
+
this.deps.Logger.warn({
|
|
163
|
+
message: "Job queue requeue attempt",
|
|
164
|
+
correlationId: CorrelationStorage.get(),
|
|
165
|
+
metadata: { id, revision, delay },
|
|
166
|
+
...this.base,
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
await this.deps.inner.requeue(id, revision, delay);
|
|
170
|
+
|
|
171
|
+
this.deps.Logger.warn({
|
|
172
|
+
message: "Job queue requeue success",
|
|
173
|
+
correlationId: CorrelationStorage.get(),
|
|
174
|
+
metadata: { id, revision, delay, duration: duration.stop() },
|
|
175
|
+
...this.base,
|
|
176
|
+
});
|
|
177
|
+
} catch (error) {
|
|
178
|
+
this.deps.Logger.error({
|
|
179
|
+
message: "Job queue requeue error",
|
|
180
|
+
correlationId: CorrelationStorage.get(),
|
|
181
|
+
error,
|
|
182
|
+
metadata: { id, revision, delay, duration: duration.stop() },
|
|
183
|
+
...this.base,
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
throw error;
|
|
187
|
+
}
|
|
75
188
|
}
|
|
76
189
|
|
|
77
190
|
getRetryPolicy(name: GenericJob["name"]): JobRetryPolicyStrategy {
|
package/src/logger.port.ts
CHANGED
|
@@ -1,24 +1,51 @@
|
|
|
1
|
+
import type { ClockPort } from "./clock.port";
|
|
1
2
|
import { CorrelationStorage } from "./correlation-storage.service";
|
|
2
3
|
import type { LoggerPort } from "./logger.port";
|
|
3
4
|
import type { Message, ToMessageMap } from "./message.types";
|
|
4
5
|
import type { MessageBusPort } from "./message-bus.port";
|
|
6
|
+
import { Stopwatch } from "./stopwatch.service";
|
|
5
7
|
|
|
6
|
-
type Dependencies<Messages extends Message> = {
|
|
8
|
+
type Dependencies<Messages extends Message> = {
|
|
9
|
+
inner: MessageBusPort<Messages>;
|
|
10
|
+
Logger: LoggerPort;
|
|
11
|
+
Clock: ClockPort;
|
|
12
|
+
};
|
|
7
13
|
|
|
8
14
|
export class MessageBusWithLoggerAdapter<Messages extends Message> implements MessageBusPort<Messages> {
|
|
9
|
-
private readonly base = { component: "infra", operation: "
|
|
15
|
+
private readonly base = { component: "infra", operation: "message_bus" };
|
|
10
16
|
|
|
11
17
|
constructor(private readonly deps: Dependencies<Messages>) {}
|
|
12
18
|
|
|
13
19
|
async emit<M extends Messages>(message: M): Promise<void> {
|
|
14
|
-
this.deps
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
const duration = new Stopwatch(this.deps);
|
|
21
|
+
|
|
22
|
+
try {
|
|
23
|
+
this.deps.Logger.info({
|
|
24
|
+
message: "Message bus emit attempt",
|
|
25
|
+
correlationId: CorrelationStorage.get(),
|
|
26
|
+
metadata: { message },
|
|
27
|
+
...this.base,
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
await this.deps.inner.emit(message);
|
|
31
|
+
|
|
32
|
+
this.deps.Logger.info({
|
|
33
|
+
message: "Message bus emit success",
|
|
34
|
+
correlationId: CorrelationStorage.get(),
|
|
35
|
+
metadata: { message, duration: duration.stop() },
|
|
36
|
+
...this.base,
|
|
37
|
+
});
|
|
38
|
+
} catch (error) {
|
|
39
|
+
this.deps.Logger.error({
|
|
40
|
+
message: "Message bus emit error",
|
|
41
|
+
correlationId: CorrelationStorage.get(),
|
|
42
|
+
error,
|
|
43
|
+
metadata: { message, duration: duration.stop() },
|
|
44
|
+
...this.base,
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
throw error;
|
|
48
|
+
}
|
|
22
49
|
}
|
|
23
50
|
|
|
24
51
|
on<MessageName extends keyof ToMessageMap<Messages>>(
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CacheCodecIdentityStrategy } from "./cache-codec-identity.strategy";
|
|
1
2
|
import type { CacheResolverStrategy } from "./cache-resolver.strategy";
|
|
2
3
|
import type { HashContentStrategy } from "./hash-content.strategy";
|
|
3
4
|
import type { PrerequisiteVerificationResult, PrerequisiteVerifierPort } from "./prerequisite-verifier.port";
|
|
@@ -8,13 +9,14 @@ type Dependencies = { CacheResolver: CacheResolverStrategy; HashContent: HashCon
|
|
|
8
9
|
type Config = { id: string; inner: PrerequisiteVerifierPort };
|
|
9
10
|
|
|
10
11
|
export class PrerequisiteVerifierWithCacheAdapter implements PrerequisiteVerifierPort {
|
|
12
|
+
private readonly codec = new CacheCodecIdentityStrategy<PrerequisiteVerificationResult>();
|
|
13
|
+
private readonly resolver: SubjectApplicationResolver;
|
|
14
|
+
|
|
11
15
|
constructor(
|
|
12
16
|
private readonly config: Config,
|
|
13
17
|
private readonly deps: Dependencies,
|
|
14
|
-
) {
|
|
15
|
-
|
|
16
|
-
async verify(): Promise<PrerequisiteVerificationResult> {
|
|
17
|
-
const resolver = new SubjectApplicationResolver(
|
|
18
|
+
) {
|
|
19
|
+
this.resolver = new SubjectApplicationResolver(
|
|
18
20
|
[
|
|
19
21
|
new SubjectSegmentFixedStrategy("prerequisite_verifier"),
|
|
20
22
|
new SubjectSegmentFixedStrategy(this.kind),
|
|
@@ -22,11 +24,15 @@ export class PrerequisiteVerifierWithCacheAdapter implements PrerequisiteVerifie
|
|
|
22
24
|
],
|
|
23
25
|
this.deps,
|
|
24
26
|
);
|
|
27
|
+
}
|
|
25
28
|
|
|
26
|
-
|
|
29
|
+
async verify(): Promise<PrerequisiteVerificationResult> {
|
|
30
|
+
const subject = await this.resolver.resolve();
|
|
27
31
|
|
|
28
|
-
return this.deps.CacheResolver.resolve<PrerequisiteVerificationResult>(
|
|
29
|
-
|
|
32
|
+
return this.deps.CacheResolver.resolve<PrerequisiteVerificationResult>(
|
|
33
|
+
subject.hex,
|
|
34
|
+
async () => this.config.inner.verify(),
|
|
35
|
+
this.codec,
|
|
30
36
|
);
|
|
31
37
|
}
|
|
32
38
|
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import * as tools from "@bgord/tools";
|
|
2
|
+
|
|
3
|
+
type RateLimiterResultSuccessType = { allowed: true };
|
|
4
|
+
type RateLimiterResultErrorType = { allowed: false; remaining: tools.Duration };
|
|
5
|
+
type RateLimiterResultType = RateLimiterResultSuccessType | RateLimiterResultErrorType;
|
|
6
|
+
|
|
7
|
+
export type RateLimiterStateType = { lastInvocation: tools.TimestampValueType | null };
|
|
8
|
+
|
|
9
|
+
export class RateLimiter {
|
|
10
|
+
private lastInvocation: tools.Timestamp | null = null;
|
|
11
|
+
|
|
12
|
+
constructor(private readonly duration: tools.Duration) {}
|
|
13
|
+
|
|
14
|
+
static fromState(duration: tools.Duration, state: RateLimiterStateType): RateLimiter {
|
|
15
|
+
const limiter = new RateLimiter(duration);
|
|
16
|
+
|
|
17
|
+
if (state.lastInvocation !== null) {
|
|
18
|
+
limiter.lastInvocation = tools.Timestamp.fromNumber(state.lastInvocation);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return limiter;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
verify(now: tools.Timestamp): RateLimiterResultType {
|
|
25
|
+
if (this.lastInvocation === null) {
|
|
26
|
+
this.lastInvocation = now;
|
|
27
|
+
|
|
28
|
+
return { allowed: true };
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
const nextAllowedTimestamp = this.lastInvocation.add(this.duration);
|
|
32
|
+
|
|
33
|
+
if (nextAllowedTimestamp.isBeforeOrEqual(now)) {
|
|
34
|
+
this.lastInvocation = now;
|
|
35
|
+
|
|
36
|
+
return { allowed: true };
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return { allowed: false, remaining: nextAllowedTimestamp.difference(now) };
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
toJSON(): RateLimiterStateType {
|
|
43
|
+
return { lastInvocation: this.lastInvocation === null ? null : this.lastInvocation.toJSON() };
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
|
+
import { CacheCodecIdentityStrategy } from "./cache-codec-identity.strategy";
|
|
1
2
|
import type { CacheResolverStrategy } from "./cache-resolver.strategy";
|
|
3
|
+
import type { CacheValueType } from "./cache-value.vo";
|
|
2
4
|
import type { HashContentStrategy } from "./hash-content.strategy";
|
|
3
5
|
import type { ReactiveConfigPort } from "./reactive-config.port";
|
|
4
6
|
|
|
5
7
|
type Dependencies = { CacheResolver: CacheResolverStrategy; HashContent: HashContentStrategy };
|
|
6
8
|
|
|
7
|
-
export class ReactiveConfigWithCacheAdapter<T extends object
|
|
9
|
+
export class ReactiveConfigWithCacheAdapter<T extends object & CacheValueType>
|
|
10
|
+
implements ReactiveConfigPort<T>
|
|
11
|
+
{
|
|
12
|
+
private readonly codec = new CacheCodecIdentityStrategy<T>();
|
|
13
|
+
|
|
8
14
|
constructor(
|
|
9
15
|
private readonly inner: ReactiveConfigPort<T>,
|
|
10
16
|
private readonly subject: string,
|
|
@@ -14,6 +20,6 @@ export class ReactiveConfigWithCacheAdapter<T extends object> implements Reactiv
|
|
|
14
20
|
async get(): Promise<Readonly<T>> {
|
|
15
21
|
const key = await this.deps.HashContent.hash(this.subject);
|
|
16
22
|
|
|
17
|
-
return Object.freeze(await this.deps.CacheResolver.resolve(key, () => this.inner.get()));
|
|
23
|
+
return Object.freeze(await this.deps.CacheResolver.resolve<T>(key, () => this.inner.get(), this.codec));
|
|
18
24
|
}
|
|
19
25
|
}
|
|
@@ -27,7 +27,11 @@ export class RequestContextHonoAdapter implements RequestContext {
|
|
|
27
27
|
cookie: (name) => getCookie(context)[name],
|
|
28
28
|
json: async () => {
|
|
29
29
|
try {
|
|
30
|
-
|
|
30
|
+
const body = await context.req.raw.clone().json();
|
|
31
|
+
|
|
32
|
+
if (body === null || typeof body !== "object") return {};
|
|
33
|
+
|
|
34
|
+
return body;
|
|
31
35
|
} catch {
|
|
32
36
|
return {};
|
|
33
37
|
}
|
|
@@ -32,14 +32,13 @@ export class SecurityRuleViolationThresholdStrategy implements SecurityRuleStrat
|
|
|
32
32
|
if (!violated) return false;
|
|
33
33
|
|
|
34
34
|
try {
|
|
35
|
-
const
|
|
35
|
+
const cached = await this.deps.CacheRepository.get(subject.hex);
|
|
36
|
+
const count = typeof cached === "number" ? cached : 0;
|
|
37
|
+
const next = tools.Int.nonNegative(count + 1);
|
|
36
38
|
|
|
37
|
-
await this.deps.CacheRepository.set
|
|
38
|
-
subject.hex,
|
|
39
|
-
tools.Int.nonNegative(count + 1),
|
|
40
|
-
);
|
|
39
|
+
await this.deps.CacheRepository.set(subject.hex, next);
|
|
41
40
|
|
|
42
|
-
if (
|
|
41
|
+
if (next >= this.config.threshold) return true;
|
|
43
42
|
return false;
|
|
44
43
|
} catch {
|
|
45
44
|
return false;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { MiddlewareHandler } from "hono";
|
|
2
2
|
import { HTTPException } from "hono/http-exception";
|
|
3
|
-
import type {
|
|
3
|
+
import type { CacheRepositoryPort } from "./cache-repository.port";
|
|
4
4
|
import type { ClockPort } from "./clock.port";
|
|
5
5
|
import type { MiddlewareHonoPort } from "./middleware-hono.port";
|
|
6
6
|
import { RequestContextHonoAdapter } from "./request-context-hono.adapter";
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
ShieldRateLimitStrategyError,
|
|
11
11
|
} from "./shield-rate-limit.strategy";
|
|
12
12
|
|
|
13
|
-
type Dependencies = { Clock: ClockPort;
|
|
13
|
+
type Dependencies = { Clock: ClockPort; CacheRepository: CacheRepositoryPort };
|
|
14
14
|
|
|
15
15
|
export class ShieldRateLimitHonoStrategy implements MiddlewareHonoPort {
|
|
16
16
|
private readonly strategy: ShieldRateLimitStrategy;
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import * as tools from "@bgord/tools";
|
|
2
|
-
import type {
|
|
2
|
+
import type { CacheRepositoryPort } from "./cache-repository.port";
|
|
3
3
|
import type { ClockPort } from "./clock.port";
|
|
4
|
+
import { RateLimiter, type RateLimiterStateType } from "./rate-limiter.service";
|
|
4
5
|
import type { RequestContext } from "./request-context.port";
|
|
5
6
|
import type { SubjectRequestResolver } from "./subject-request-resolver.vo";
|
|
6
7
|
|
|
7
8
|
export type ShieldRateLimitConfig = { resolver: SubjectRequestResolver; interval: tools.Duration };
|
|
8
9
|
type ShieldRateLimitResult = { allowed: true } | { allowed: false; retryAfter: tools.Duration };
|
|
9
10
|
|
|
10
|
-
type Dependencies = { Clock: ClockPort;
|
|
11
|
+
type Dependencies = { Clock: ClockPort; CacheRepository: CacheRepositoryPort };
|
|
11
12
|
|
|
12
13
|
export const ShieldRateLimitStrategyError = { Rejected: "shield.rate.limit.rejected" };
|
|
13
14
|
|
|
@@ -22,14 +23,20 @@ export class ShieldRateLimitStrategy {
|
|
|
22
23
|
async evaluate(context: RequestContext): Promise<ShieldRateLimitResult> {
|
|
23
24
|
const subject = await this.config.resolver.resolve(context);
|
|
24
25
|
|
|
25
|
-
const
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
const state = await this.deps.CacheRepository.get(subject.hex);
|
|
27
|
+
|
|
28
|
+
const limiter =
|
|
29
|
+
state === null
|
|
30
|
+
? new RateLimiter(this.config.interval)
|
|
31
|
+
: RateLimiter.fromState(this.config.interval, state as RateLimiterStateType);
|
|
29
32
|
|
|
30
33
|
const decision = limiter.verify(this.deps.Clock.now());
|
|
31
34
|
|
|
32
|
-
if (decision.allowed)
|
|
35
|
+
if (decision.allowed) {
|
|
36
|
+
await this.deps.CacheRepository.set(subject.hex, limiter.toJSON());
|
|
37
|
+
|
|
38
|
+
return { allowed: true };
|
|
39
|
+
}
|
|
33
40
|
|
|
34
41
|
return {
|
|
35
42
|
allowed: false,
|
|
@@ -5,21 +5,29 @@ import { RequestContextHonoAdapter } from "./request-context-hono.adapter";
|
|
|
5
5
|
import {
|
|
6
6
|
ShieldWebhookStrategy,
|
|
7
7
|
type ShieldWebhookStrategyConfig,
|
|
8
|
+
type ShieldWebhookStrategyDependencies,
|
|
8
9
|
ShieldWebhookStrategyError,
|
|
9
10
|
} from "./shield-webhook.strategy";
|
|
10
11
|
|
|
11
12
|
export class ShieldWebhookHonoStrategy implements MiddlewareHonoPort {
|
|
12
13
|
private readonly strategy: ShieldWebhookStrategy;
|
|
13
14
|
|
|
14
|
-
constructor(config: ShieldWebhookStrategyConfig) {
|
|
15
|
-
this.strategy = new ShieldWebhookStrategy(config);
|
|
15
|
+
constructor(config: ShieldWebhookStrategyConfig, deps: ShieldWebhookStrategyDependencies) {
|
|
16
|
+
this.strategy = new ShieldWebhookStrategy(config, deps);
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
handle(): MiddlewareHandler {
|
|
19
20
|
return async (c, next) => {
|
|
20
21
|
const context = new RequestContextHonoAdapter(c);
|
|
21
22
|
|
|
22
|
-
|
|
23
|
+
const result = await this.strategy.evaluate(context);
|
|
24
|
+
|
|
25
|
+
if (result.accepted) return next();
|
|
26
|
+
|
|
27
|
+
if (result.reason === "duplicate") {
|
|
28
|
+
return c.json({ message: ShieldWebhookStrategyError.Duplicate }, 200);
|
|
29
|
+
}
|
|
30
|
+
|
|
23
31
|
throw new HTTPException(401, { message: ShieldWebhookStrategyError.Rejected });
|
|
24
32
|
};
|
|
25
33
|
}
|
|
@@ -1,26 +1,61 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { HashContentStrategy } from "./hash-content.strategy";
|
|
2
|
+
import type { IdempotencyStorePort } from "./idempotency-store.port";
|
|
3
|
+
import type { HasRequestHeader, HasRequestJson, HasRequestText } from "./request-context.port";
|
|
2
4
|
import type { WebhookBodyBuilderStrategy } from "./webhook-body-builder.strategy";
|
|
5
|
+
import type { WebhookIdExtractorStrategy } from "./webhook-id-extractor.strategy";
|
|
3
6
|
import type { WebhookSignatureExtractorStrategy } from "./webhook-signature-extractor.strategy";
|
|
4
7
|
import type { WebhookVerifierStrategy } from "./webhook-verifier.strategy";
|
|
5
8
|
|
|
6
|
-
export const ShieldWebhookStrategyError = {
|
|
9
|
+
export const ShieldWebhookStrategyError = {
|
|
10
|
+
Rejected: "shield.webhook.rejected",
|
|
11
|
+
Duplicate: "shield.webhook.duplicate",
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export type ShieldWebhookStrategyResult =
|
|
15
|
+
| { accepted: true }
|
|
16
|
+
| { accepted: false; reason: "rejected" }
|
|
17
|
+
| { accepted: false; reason: "duplicate" };
|
|
7
18
|
|
|
8
19
|
export type ShieldWebhookStrategyConfig = {
|
|
20
|
+
namespace: string;
|
|
9
21
|
WebhookBodyBuilder: WebhookBodyBuilderStrategy;
|
|
22
|
+
WebhookIdExtractor: WebhookIdExtractorStrategy;
|
|
10
23
|
WebhookSignatureExtractor: WebhookSignatureExtractorStrategy;
|
|
11
24
|
WebhookVerifier: WebhookVerifierStrategy;
|
|
12
25
|
};
|
|
13
26
|
|
|
27
|
+
export type ShieldWebhookStrategyDependencies = {
|
|
28
|
+
HashContent: HashContentStrategy;
|
|
29
|
+
IdempotencyStore: IdempotencyStorePort;
|
|
30
|
+
};
|
|
31
|
+
|
|
14
32
|
export class ShieldWebhookStrategy {
|
|
15
|
-
constructor(
|
|
33
|
+
constructor(
|
|
34
|
+
private readonly config: ShieldWebhookStrategyConfig,
|
|
35
|
+
private readonly deps: ShieldWebhookStrategyDependencies,
|
|
36
|
+
) {}
|
|
16
37
|
|
|
17
|
-
async evaluate(
|
|
38
|
+
async evaluate(
|
|
39
|
+
context: HasRequestHeader & HasRequestJson & HasRequestText,
|
|
40
|
+
): Promise<ShieldWebhookStrategyResult> {
|
|
18
41
|
const signature = this.config.WebhookSignatureExtractor.extract(context);
|
|
19
42
|
|
|
20
|
-
if (!signature) return false;
|
|
43
|
+
if (!signature) return { accepted: false, reason: "rejected" };
|
|
21
44
|
|
|
22
45
|
const body = await this.config.WebhookBodyBuilder.build(context);
|
|
23
46
|
|
|
24
|
-
|
|
47
|
+
if (!this.config.WebhookVerifier.verify(body, signature)) return { accepted: false, reason: "rejected" };
|
|
48
|
+
|
|
49
|
+
const id = await this.config.WebhookIdExtractor.extract(context);
|
|
50
|
+
|
|
51
|
+
if (!id) return { accepted: false, reason: "rejected" };
|
|
52
|
+
|
|
53
|
+
const subject = await this.deps.HashContent.hash(JSON.stringify([[this.config.namespace, id]]));
|
|
54
|
+
|
|
55
|
+
const claimed = await this.deps.IdempotencyStore.claim(subject);
|
|
56
|
+
|
|
57
|
+
if (!claimed) return { accepted: false, reason: "duplicate" };
|
|
58
|
+
|
|
59
|
+
return { accepted: true };
|
|
25
60
|
}
|
|
26
61
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { CacheCodecSitemapEntriesStrategy } from "./cache-codec-sitemap-entries.strategy";
|
|
1
2
|
import type { CacheResolverStrategy } from "./cache-resolver.strategy";
|
|
2
3
|
import type { HashContentStrategy } from "./hash-content.strategy";
|
|
3
4
|
import type { SitemapEntriesProvider } from "./sitemap-entries-provider.port";
|
|
@@ -9,24 +10,29 @@ type Config = { id: string; inner: SitemapEntriesProvider };
|
|
|
9
10
|
type Dependencies = { CacheResolver: CacheResolverStrategy; HashContent: HashContentStrategy };
|
|
10
11
|
|
|
11
12
|
export class SitemapEntriesProviderWithCacheAdapter implements SitemapEntriesProvider {
|
|
13
|
+
private readonly codec = new CacheCodecSitemapEntriesStrategy();
|
|
14
|
+
private readonly resolver: SubjectApplicationResolver;
|
|
15
|
+
|
|
12
16
|
constructor(
|
|
13
17
|
private readonly config: Config,
|
|
14
18
|
private readonly deps: Dependencies,
|
|
15
|
-
) {
|
|
16
|
-
|
|
17
|
-
async produce(): Promise<ReadonlyArray<SitemapEntry>> {
|
|
18
|
-
const resolver = new SubjectApplicationResolver(
|
|
19
|
+
) {
|
|
20
|
+
this.resolver = new SubjectApplicationResolver(
|
|
19
21
|
[
|
|
20
22
|
new SubjectSegmentFixedStrategy("sitemap_entries_provider"),
|
|
21
23
|
new SubjectSegmentFixedStrategy(this.config.id),
|
|
22
24
|
],
|
|
23
25
|
this.deps,
|
|
24
26
|
);
|
|
27
|
+
}
|
|
25
28
|
|
|
26
|
-
|
|
29
|
+
async produce(): Promise<ReadonlyArray<SitemapEntry>> {
|
|
30
|
+
const subject = await this.resolver.resolve();
|
|
27
31
|
|
|
28
|
-
return this.deps.CacheResolver.resolve<ReadonlyArray<SitemapEntry>>(
|
|
29
|
-
|
|
32
|
+
return this.deps.CacheResolver.resolve<ReadonlyArray<SitemapEntry>>(
|
|
33
|
+
subject.hex,
|
|
34
|
+
async () => this.config.inner.produce(),
|
|
35
|
+
this.codec,
|
|
30
36
|
);
|
|
31
37
|
}
|
|
32
38
|
}
|