@bgord/bun 1.16.4 → 1.17.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-cookie.strategy.d.ts +10 -0
- package/dist/ab-assignment-cookie.strategy.d.ts.map +1 -0
- package/dist/ab-assignment-cookie.strategy.js +11 -0
- package/dist/ab-assignment-cookie.strategy.js.map +1 -0
- package/dist/ab-assignment-header.strategy.d.ts +10 -0
- package/dist/ab-assignment-header.strategy.d.ts.map +1 -0
- package/dist/ab-assignment-header.strategy.js +11 -0
- package/dist/ab-assignment-header.strategy.js.map +1 -0
- package/dist/alert-channel-composite.adapter.js +2 -2
- package/dist/alert-channel-composite.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 +10 -2
- package/dist/alert-channel-with-logger.adapter.js.map +1 -1
- package/dist/alert-channel.builder.d.ts +4 -4
- package/dist/alert-channel.builder.d.ts.map +1 -1
- package/dist/alert-channel.builder.js +3 -6
- package/dist/alert-channel.builder.js.map +1 -1
- package/dist/antivirus-noop.adapter.d.ts +1 -2
- package/dist/antivirus-noop.adapter.d.ts.map +1 -1
- package/dist/antivirus-noop.adapter.js +1 -1
- package/dist/antivirus-noop.adapter.js.map +1 -1
- package/dist/antivirus-with-logger.adapter.d.ts +3 -5
- package/dist/antivirus-with-logger.adapter.d.ts.map +1 -1
- package/dist/antivirus-with-logger.adapter.js +8 -4
- package/dist/antivirus-with-logger.adapter.js.map +1 -1
- package/dist/antivirus-with-semaphore.adapter.d.ts +3 -5
- package/dist/antivirus-with-semaphore.adapter.d.ts.map +1 -1
- package/dist/antivirus-with-semaphore.adapter.js +2 -2
- package/dist/antivirus-with-semaphore.adapter.js.map +1 -1
- package/dist/antivirus-with-timeout.adapter.d.ts +17 -0
- package/dist/antivirus-with-timeout.adapter.d.ts.map +1 -0
- package/dist/antivirus-with-timeout.adapter.js +12 -0
- package/dist/antivirus-with-timeout.adapter.js.map +1 -0
- package/dist/antivirus.builder.d.ts +14 -0
- package/dist/antivirus.builder.d.ts.map +1 -0
- package/dist/antivirus.builder.js +25 -0
- package/dist/antivirus.builder.js.map +1 -0
- package/dist/antivirus.port.d.ts +1 -2
- package/dist/antivirus.port.d.ts.map +1 -1
- package/dist/antivirus.port.js.map +1 -1
- package/dist/api-version-hono.middleware.js +1 -1
- package/dist/api-version-hono.middleware.js.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 -2
- package/dist/api-version.middleware.js.map +1 -1
- package/dist/auth-session-reader-noop.adapter.d.ts +3 -15
- 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/cache-file.service.js +2 -2
- package/dist/cache-file.service.js.map +1 -1
- package/dist/cache-repository-noop.adapter.d.ts +4 -3
- package/dist/cache-repository-noop.adapter.d.ts.map +1 -1
- package/dist/cache-repository-noop.adapter.js +3 -3
- package/dist/cache-repository-noop.adapter.js.map +1 -1
- package/dist/cache-repository-redis.adapter.d.ts.map +1 -1
- package/dist/cache-repository-redis.adapter.js +6 -3
- package/dist/cache-repository-redis.adapter.js.map +1 -1
- package/dist/certificate-inspector-tls.adapter.d.ts.map +1 -1
- package/dist/certificate-inspector-tls.adapter.js +2 -5
- package/dist/certificate-inspector-tls.adapter.js.map +1 -1
- package/dist/checksum.service.d.ts.map +1 -1
- package/dist/checksum.service.js +1 -2
- package/dist/checksum.service.js.map +1 -1
- package/dist/client-ip.vo.d.ts +1 -1
- package/dist/client-ip.vo.d.ts.map +1 -1
- package/dist/client-ip.vo.js +1 -1
- package/dist/client-ip.vo.js.map +1 -1
- package/dist/client-user-agent.vo.js +2 -2
- package/dist/client.vo.js +1 -1
- package/dist/client.vo.js.map +1 -1
- package/dist/clock-system.adapter.js +1 -1
- package/dist/clock-system.adapter.js.map +1 -1
- package/dist/commit-sha-value.vo.js +1 -1
- package/dist/commit-sha-value.vo.js.map +1 -1
- package/dist/commit-sha.vo.d.ts +3 -2
- package/dist/commit-sha.vo.d.ts.map +1 -1
- package/dist/commit-sha.vo.js +10 -7
- package/dist/commit-sha.vo.js.map +1 -1
- package/dist/correlation.middleware.d.ts +2 -2
- package/dist/correlation.middleware.d.ts.map +1 -1
- package/dist/correlation.middleware.js +2 -2
- package/dist/correlation.middleware.js.map +1 -1
- package/dist/cron-scheduler-with-logger.adapter.d.ts +15 -0
- package/dist/cron-scheduler-with-logger.adapter.d.ts.map +1 -0
- package/dist/cron-scheduler-with-logger.adapter.js +19 -0
- package/dist/cron-scheduler-with-logger.adapter.js.map +1 -0
- package/dist/cron-task-handler-with-logger.strategy.d.ts.map +1 -1
- package/dist/cron-task-handler-with-logger.strategy.js +3 -2
- package/dist/cron-task-handler-with-logger.strategy.js.map +1 -1
- package/dist/directory-ensurer-noop.adapter.d.ts +2 -3
- package/dist/directory-ensurer-noop.adapter.d.ts.map +1 -1
- package/dist/directory-ensurer-noop.adapter.js +1 -1
- package/dist/directory-ensurer-noop.adapter.js.map +1 -1
- package/dist/directory-ensurer.adapter.d.ts +2 -3
- package/dist/directory-ensurer.adapter.d.ts.map +1 -1
- package/dist/directory-ensurer.adapter.js +2 -2
- package/dist/directory-ensurer.adapter.js.map +1 -1
- package/dist/directory-ensurer.port.d.ts +2 -1
- package/dist/directory-ensurer.port.d.ts.map +1 -1
- package/dist/disk-space-checker-noop.adapter.d.ts +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/disk-space-checker-shell.adapter.d.ts +1 -1
- package/dist/disk-space-checker-shell.adapter.d.ts.map +1 -1
- package/dist/disk-space-checker-shell.adapter.js.map +1 -1
- package/dist/disk-space-checker.port.d.ts +1 -1
- package/dist/disk-space-checker.port.d.ts.map +1 -1
- package/dist/event-store.adapter.d.ts +2 -2
- package/dist/event-store.adapter.d.ts.map +1 -1
- package/dist/event-stream.vo.js +1 -1
- package/dist/event-stream.vo.js.map +1 -1
- package/dist/file-uploader-hono.middleware.d.ts +4 -6
- package/dist/file-uploader-hono.middleware.d.ts.map +1 -1
- package/dist/file-uploader-hono.middleware.js +7 -13
- package/dist/file-uploader-hono.middleware.js.map +1 -1
- package/dist/handler-bare.strategy.d.ts +8 -0
- package/dist/handler-bare.strategy.d.ts.map +1 -0
- package/dist/handler-bare.strategy.js +9 -0
- package/dist/handler-bare.strategy.js.map +1 -0
- package/dist/handler-noop.strategy.d.ts +8 -0
- package/dist/handler-noop.strategy.d.ts.map +1 -0
- package/dist/handler-noop.strategy.js +9 -0
- package/dist/handler-noop.strategy.js.map +1 -0
- package/dist/handler-with-logger.strategy.d.ts +16 -0
- package/dist/handler-with-logger.strategy.d.ts.map +1 -0
- package/dist/handler-with-logger.strategy.js +30 -0
- package/dist/handler-with-logger.strategy.js.map +1 -0
- package/dist/handler.strategy.d.ts +10 -0
- package/dist/handler.strategy.d.ts.map +1 -0
- package/dist/handler.strategy.js +2 -0
- package/dist/handler.strategy.js.map +1 -0
- package/dist/healthcheck-hono.handler.d.ts +10 -13
- package/dist/healthcheck-hono.handler.d.ts.map +1 -1
- package/dist/healthcheck-hono.handler.js +1 -1
- package/dist/healthcheck-hono.handler.js.map +1 -1
- package/dist/healthcheck.handler.d.ts +5 -3
- package/dist/healthcheck.handler.d.ts.map +1 -1
- package/dist/healthcheck.handler.js +2 -1
- package/dist/healthcheck.handler.js.map +1 -1
- package/dist/i18n.service.js +1 -1
- package/dist/i18n.service.js.map +1 -1
- package/dist/in-flight-requests-hono.middleware.js +1 -1
- package/dist/in-flight-requests-hono.middleware.js.map +1 -1
- package/dist/in-flight-requests.middleware.d.ts +1 -1
- package/dist/in-flight-requests.middleware.d.ts.map +1 -1
- package/dist/in-flight-requests.middleware.js +1 -1
- package/dist/in-flight-requests.middleware.js.map +1 -1
- package/dist/index.d.ts +50 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +50 -7
- package/dist/index.js.map +1 -1
- package/dist/job-claimer-noop.adapter.d.ts +9 -0
- package/dist/job-claimer-noop.adapter.d.ts.map +1 -0
- package/dist/job-claimer-noop.adapter.js +10 -0
- package/dist/job-claimer-noop.adapter.js.map +1 -0
- package/dist/job-claimer-sqlite.adapter.d.ts +16 -0
- package/dist/job-claimer-sqlite.adapter.d.ts.map +1 -0
- package/dist/job-claimer-sqlite.adapter.js +23 -0
- package/dist/job-claimer-sqlite.adapter.js.map +1 -0
- package/dist/job-claimer.port.d.ts +6 -0
- package/dist/job-claimer.port.d.ts.map +1 -0
- package/dist/job-claimer.port.js +2 -0
- package/dist/job-claimer.port.js.map +1 -0
- package/dist/job-completer-collecting.adapter.d.ts +7 -0
- package/dist/job-completer-collecting.adapter.d.ts.map +1 -0
- package/dist/job-completer-collecting.adapter.js +7 -0
- package/dist/job-completer-collecting.adapter.js.map +1 -0
- package/dist/job-completer-noop.adapter.d.ts +6 -0
- package/dist/job-completer-noop.adapter.d.ts.map +1 -0
- package/dist/job-completer-noop.adapter.js +4 -0
- package/dist/job-completer-noop.adapter.js.map +1 -0
- package/dist/job-completer-sqlite.adapter.d.ts +13 -0
- package/dist/job-completer-sqlite.adapter.d.ts.map +1 -0
- package/dist/job-completer-sqlite.adapter.js +10 -0
- package/dist/job-completer-sqlite.adapter.js.map +1 -0
- package/dist/job-completer.port.d.ts +5 -0
- package/dist/job-completer.port.d.ts.map +1 -0
- package/dist/job-completer.port.js +2 -0
- package/dist/job-completer.port.js.map +1 -0
- package/dist/job-enqueuer-collecting.adapter.d.ts +11 -0
- package/dist/job-enqueuer-collecting.adapter.d.ts.map +1 -0
- package/dist/job-enqueuer-collecting.adapter.js +8 -0
- package/dist/job-enqueuer-collecting.adapter.js.map +1 -0
- package/dist/job-enqueuer-noop.adapter.d.ts +7 -0
- package/dist/job-enqueuer-noop.adapter.d.ts.map +1 -0
- package/dist/job-enqueuer-noop.adapter.js +6 -0
- package/dist/job-enqueuer-noop.adapter.js.map +1 -0
- package/dist/job-enqueuer-sqlite.adapter.d.ts +16 -0
- package/dist/job-enqueuer-sqlite.adapter.d.ts.map +1 -0
- package/dist/job-enqueuer-sqlite.adapter.js +13 -0
- package/dist/job-enqueuer-sqlite.adapter.js.map +1 -0
- package/dist/job-enqueuer.port.d.ts +6 -0
- package/dist/job-enqueuer.port.d.ts.map +1 -0
- package/dist/job-enqueuer.port.js +2 -0
- package/dist/job-enqueuer.port.js.map +1 -0
- package/dist/job-envelope.d.ts +16 -0
- package/dist/job-envelope.d.ts.map +1 -0
- package/dist/job-envelope.js +20 -0
- package/dist/job-envelope.js.map +1 -0
- package/dist/job-failer-collecting.adapter.d.ts +7 -0
- package/dist/job-failer-collecting.adapter.d.ts.map +1 -0
- package/dist/job-failer-collecting.adapter.js +7 -0
- package/dist/job-failer-collecting.adapter.js.map +1 -0
- package/dist/job-failer-noop.adapter.d.ts +6 -0
- package/dist/job-failer-noop.adapter.d.ts.map +1 -0
- package/dist/job-failer-noop.adapter.js +4 -0
- package/dist/job-failer-noop.adapter.js.map +1 -0
- package/dist/job-failer-sqlite.adapter.d.ts +13 -0
- package/dist/job-failer-sqlite.adapter.d.ts.map +1 -0
- package/dist/job-failer-sqlite.adapter.js +10 -0
- package/dist/job-failer-sqlite.adapter.js.map +1 -0
- package/dist/job-failer.port.d.ts +5 -0
- package/dist/job-failer.port.d.ts.map +1 -0
- package/dist/job-failer.port.js +2 -0
- package/dist/job-failer.port.js.map +1 -0
- package/dist/job-queue-noop.adapter.d.ts +21 -0
- package/dist/job-queue-noop.adapter.d.ts.map +1 -0
- package/dist/job-queue-noop.adapter.js +22 -0
- package/dist/job-queue-noop.adapter.js.map +1 -0
- package/dist/job-queue-sqlite-store.service.d.ts +10 -0
- package/dist/job-queue-sqlite-store.service.d.ts.map +1 -0
- package/dist/job-queue-sqlite-store.service.js +23 -0
- package/dist/job-queue-sqlite-store.service.js.map +1 -0
- package/dist/job-queue-stats-provider-noop.adapter.d.ts +5 -0
- package/dist/job-queue-stats-provider-noop.adapter.d.ts.map +1 -0
- package/dist/job-queue-stats-provider-noop.adapter.js +8 -0
- package/dist/job-queue-stats-provider-noop.adapter.js.map +1 -0
- package/dist/job-queue-stats-provider-sqlite.adapter.d.ts +12 -0
- package/dist/job-queue-stats-provider-sqlite.adapter.d.ts.map +1 -0
- package/dist/job-queue-stats-provider-sqlite.adapter.js +24 -0
- package/dist/job-queue-stats-provider-sqlite.adapter.js.map +1 -0
- package/dist/job-queue-stats-provider.port.d.ts +12 -0
- package/dist/job-queue-stats-provider.port.d.ts.map +1 -0
- package/dist/job-queue-stats-provider.port.js +2 -0
- package/dist/job-queue-stats-provider.port.js.map +1 -0
- package/dist/job-queue-with-logger.adapter.d.ts +24 -0
- package/dist/job-queue-with-logger.adapter.d.ts.map +1 -0
- package/dist/job-queue-with-logger.adapter.js +61 -0
- package/dist/job-queue-with-logger.adapter.js.map +1 -0
- package/dist/job-queue.adapter.d.ts +33 -0
- package/dist/job-queue.adapter.d.ts.map +1 -0
- package/dist/job-queue.adapter.js +35 -0
- package/dist/job-queue.adapter.js.map +1 -0
- package/dist/job-queue.port.d.ts +14 -0
- package/dist/job-queue.port.d.ts.map +1 -0
- package/dist/job-queue.port.js +2 -0
- package/dist/job-queue.port.js.map +1 -0
- package/dist/job-registry.adapter.d.ts +24 -0
- package/dist/job-registry.adapter.d.ts.map +1 -0
- package/dist/job-registry.adapter.js +43 -0
- package/dist/job-registry.adapter.js.map +1 -0
- package/dist/job-registry.port.d.ts +14 -0
- package/dist/job-registry.port.d.ts.map +1 -0
- package/dist/job-registry.port.js +2 -0
- package/dist/job-registry.port.js.map +1 -0
- package/dist/job-requeuer-collecting.adapter.d.ts +14 -0
- package/dist/job-requeuer-collecting.adapter.d.ts.map +1 -0
- package/dist/job-requeuer-collecting.adapter.js +7 -0
- package/dist/job-requeuer-collecting.adapter.js.map +1 -0
- package/dist/job-requeuer-noop.adapter.d.ts +7 -0
- package/dist/job-requeuer-noop.adapter.d.ts.map +1 -0
- package/dist/job-requeuer-noop.adapter.js +4 -0
- package/dist/job-requeuer-noop.adapter.js.map +1 -0
- package/dist/job-requeuer-sqlite.adapter.d.ts +16 -0
- package/dist/job-requeuer-sqlite.adapter.d.ts.map +1 -0
- package/dist/job-requeuer-sqlite.adapter.js +10 -0
- package/dist/job-requeuer-sqlite.adapter.js.map +1 -0
- package/dist/job-requeuer.port.d.ts +6 -0
- package/dist/job-requeuer.port.d.ts.map +1 -0
- package/dist/job-requeuer.port.js +2 -0
- package/dist/job-requeuer.port.js.map +1 -0
- package/dist/job-retry-policy-backoff.strategy.d.ts +10 -0
- package/dist/job-retry-policy-backoff.strategy.d.ts.map +1 -0
- package/dist/job-retry-policy-backoff.strategy.js +11 -0
- package/dist/job-retry-policy-backoff.strategy.js.map +1 -0
- package/dist/job-retry-policy-composite.strategy.d.ts +13 -0
- package/dist/job-retry-policy-composite.strategy.d.ts.map +1 -0
- package/dist/job-retry-policy-composite.strategy.js +26 -0
- package/dist/job-retry-policy-composite.strategy.js.map +1 -0
- package/dist/job-retry-policy-error-filter.strategy.d.ts +13 -0
- package/dist/job-retry-policy-error-filter.strategy.d.ts.map +1 -0
- package/dist/job-retry-policy-error-filter.strategy.js +13 -0
- package/dist/job-retry-policy-error-filter.strategy.js.map +1 -0
- package/dist/job-retry-policy-limit.strategy.d.ts +9 -0
- package/dist/job-retry-policy-limit.strategy.d.ts.map +1 -0
- package/dist/job-retry-policy-limit.strategy.js +13 -0
- package/dist/job-retry-policy-limit.strategy.js.map +1 -0
- package/dist/job-retry-policy-noop.strategy.d.ts +7 -0
- package/dist/job-retry-policy-noop.strategy.d.ts.map +1 -0
- package/dist/job-retry-policy-noop.strategy.js +6 -0
- package/dist/job-retry-policy-noop.strategy.js.map +1 -0
- package/dist/job-retry-policy.strategy.d.ts +6 -0
- package/dist/job-retry-policy.strategy.d.ts.map +1 -0
- package/dist/job-retry-policy.strategy.js +2 -0
- package/dist/job-retry-policy.strategy.js.map +1 -0
- package/dist/job-worker.service.d.ts +15 -0
- package/dist/job-worker.service.d.ts.map +1 -0
- package/dist/job-worker.service.js +28 -0
- package/dist/job-worker.service.js.map +1 -0
- package/dist/job.types.d.ts +14 -0
- package/dist/job.types.d.ts.map +1 -0
- package/dist/job.types.js +2 -0
- package/dist/job.types.js.map +1 -0
- package/dist/logger-collecting.adapter.d.ts +1 -1
- package/dist/logger-collecting.adapter.d.ts.map +1 -1
- package/dist/logger-collecting.adapter.js.map +1 -1
- package/dist/logger-noop.adapter.d.ts +2 -2
- package/dist/logger-noop.adapter.d.ts.map +1 -1
- package/dist/logger-noop.adapter.js +1 -1
- package/dist/logger-noop.adapter.js.map +1 -1
- package/dist/mailer-resend.adapter.d.ts +1 -2
- package/dist/mailer-resend.adapter.d.ts.map +1 -1
- package/dist/mailer-resend.adapter.js.map +1 -1
- package/dist/mailer-smtp.adapter.d.ts +1 -2
- package/dist/mailer-smtp.adapter.d.ts.map +1 -1
- package/dist/mailer-smtp.adapter.js.map +1 -1
- package/dist/mailer-template.vo.d.ts +1 -0
- package/dist/mailer-template.vo.d.ts.map +1 -1
- package/dist/mailer-template.vo.js +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 +15 -2
- package/dist/mailer-with-logger.adapter.js.map +1 -1
- package/dist/mailer.builder.d.ts +4 -4
- package/dist/mailer.builder.d.ts.map +1 -1
- package/dist/mailer.builder.js +3 -6
- package/dist/mailer.builder.js.map +1 -1
- package/dist/memory-consumption.service.d.ts.map +1 -1
- package/dist/memory-consumption.service.js +3 -5
- package/dist/memory-consumption.service.js.map +1 -1
- package/dist/modules/system/cron-tasks/index.d.ts +3 -0
- package/dist/modules/system/cron-tasks/index.d.ts.map +1 -0
- package/dist/modules/system/cron-tasks/index.js +3 -0
- package/dist/modules/system/cron-tasks/index.js.map +1 -0
- package/dist/modules/system/{services/passage-of-time-hourly.service.d.ts → cron-tasks/passage-of-time-hourly.d.ts} +2 -2
- package/dist/modules/system/cron-tasks/passage-of-time-hourly.d.ts.map +1 -0
- package/dist/modules/system/{services/passage-of-time-hourly.service.js → cron-tasks/passage-of-time-hourly.js} +2 -2
- package/dist/modules/system/cron-tasks/passage-of-time-hourly.js.map +1 -0
- package/dist/modules/system/{services/passage-of-time-minute.service.d.ts → cron-tasks/passage-of-time-minute.d.ts} +2 -2
- package/dist/modules/system/cron-tasks/passage-of-time-minute.d.ts.map +1 -0
- package/dist/modules/system/{services/passage-of-time-minute.service.js → cron-tasks/passage-of-time-minute.js} +2 -2
- package/dist/modules/system/cron-tasks/passage-of-time-minute.js.map +1 -0
- package/dist/modules/system/events/SECURITY_VIOLATION_DETECTED_EVENT.d.ts +1 -1
- package/dist/modules/system/index.d.ts +1 -1
- package/dist/modules/system/index.d.ts.map +1 -1
- package/dist/modules/system/index.js +1 -1
- package/dist/modules/system/index.js.map +1 -1
- package/dist/payload-serializer-collecting.adapter.d.ts +8 -0
- package/dist/payload-serializer-collecting.adapter.d.ts.map +1 -0
- package/dist/{event-serializer-collecting.adapter.js → payload-serializer-collecting.adapter.js} +2 -2
- package/dist/payload-serializer-collecting.adapter.js.map +1 -0
- package/dist/payload-serializer-json.adapter.d.ts +6 -0
- package/dist/payload-serializer-json.adapter.d.ts.map +1 -0
- package/dist/{event-serializer-json.adapter.js → payload-serializer-json.adapter.js} +2 -2
- package/dist/payload-serializer-json.adapter.js.map +1 -0
- package/dist/payload-serializer.port.d.ts +5 -0
- package/dist/payload-serializer.port.d.ts.map +1 -0
- package/dist/payload-serializer.port.js +2 -0
- package/dist/payload-serializer.port.js.map +1 -0
- package/dist/pdf-generator-with-logger.adapter.d.ts.map +1 -1
- package/dist/pdf-generator-with-logger.adapter.js +9 -1
- package/dist/pdf-generator-with-logger.adapter.js.map +1 -1
- package/dist/pdf-generator.port.d.ts +2 -2
- package/dist/pdf-generator.port.d.ts.map +1 -1
- package/dist/pdf-generator.port.js +1 -2
- package/dist/pdf-generator.port.js.map +1 -1
- package/dist/prerequisite-runner-startup.service.d.ts +2 -2
- package/dist/prerequisite-runner-startup.service.d.ts.map +1 -1
- package/dist/prerequisite-verifier-directory.adapter.d.ts +1 -1
- package/dist/prerequisite-verifier-directory.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-space.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-space.adapter.js +2 -1
- package/dist/prerequisite-verifier-space.adapter.js.map +1 -1
- package/dist/randomness-crypto.strategy.js +1 -1
- package/dist/randomness-crypto.strategy.js.map +1 -1
- package/dist/remote-file-storage-disk.adapter.d.ts.map +1 -1
- package/dist/remote-file-storage-disk.adapter.js +7 -1
- package/dist/remote-file-storage-disk.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 +22 -5
- package/dist/remote-file-storage-with-logger.adapter.js.map +1 -1
- package/dist/request-context-hono.adapter.js +2 -2
- package/dist/request-context-hono.adapter.js.map +1 -1
- package/dist/request-context.port.d.ts +1 -1
- package/dist/request-context.port.d.ts.map +1 -1
- package/dist/retry-backoff-noop.strategy.d.ts +1 -1
- package/dist/retry-backoff-noop.strategy.d.ts.map +1 -1
- package/dist/retry-backoff-noop.strategy.js +1 -1
- package/dist/retry-backoff-noop.strategy.js.map +1 -1
- package/dist/sealer-noop.adapter.js +1 -1
- package/dist/sealer-noop.adapter.js.map +1 -1
- package/dist/secure-key-generator-noop.adapter.d.ts +2 -1
- package/dist/secure-key-generator-noop.adapter.d.ts.map +1 -1
- package/dist/secure-key-generator-noop.adapter.js +1 -1
- package/dist/secure-key-generator-noop.adapter.js.map +1 -1
- package/dist/shield-api-key-hono.strategy.d.ts +0 -2
- package/dist/shield-api-key-hono.strategy.d.ts.map +1 -1
- package/dist/shield-api-key-hono.strategy.js +1 -2
- package/dist/shield-api-key-hono.strategy.js.map +1 -1
- package/dist/shield-auth-hono.strategy.d.ts +0 -2
- package/dist/shield-auth-hono.strategy.d.ts.map +1 -1
- package/dist/shield-auth-hono.strategy.js +2 -3
- package/dist/shield-auth-hono.strategy.js.map +1 -1
- package/dist/shield-auth.strategy.js +2 -2
- package/dist/shield-auth.strategy.js.map +1 -1
- package/dist/shield-basic-auth-hono.strategy.d.ts +0 -2
- package/dist/shield-basic-auth-hono.strategy.d.ts.map +1 -1
- package/dist/shield-basic-auth-hono.strategy.js +1 -4
- package/dist/shield-basic-auth-hono.strategy.js.map +1 -1
- package/dist/shield-body-limit-hono.strategy.d.ts +0 -2
- package/dist/shield-body-limit-hono.strategy.d.ts.map +1 -1
- package/dist/shield-body-limit-hono.strategy.js +1 -2
- package/dist/shield-body-limit-hono.strategy.js.map +1 -1
- package/dist/shield-csrf-hono.strategy.d.ts +0 -2
- package/dist/shield-csrf-hono.strategy.d.ts.map +1 -1
- package/dist/shield-csrf-hono.strategy.js +1 -2
- package/dist/shield-csrf-hono.strategy.js.map +1 -1
- package/dist/shield-hcaptcha-hono-local.strategy.d.ts +0 -2
- package/dist/shield-hcaptcha-hono-local.strategy.d.ts.map +1 -1
- package/dist/shield-hcaptcha-hono-local.strategy.js +1 -4
- package/dist/shield-hcaptcha-hono-local.strategy.js.map +1 -1
- package/dist/shield-hcaptcha-hono.strategy.d.ts +0 -2
- package/dist/shield-hcaptcha-hono.strategy.d.ts.map +1 -1
- package/dist/shield-hcaptcha-hono.strategy.js +1 -2
- package/dist/shield-hcaptcha-hono.strategy.js.map +1 -1
- package/dist/shield-ip-blacklist-hono.strategy.d.ts +0 -2
- package/dist/shield-ip-blacklist-hono.strategy.d.ts.map +1 -1
- package/dist/shield-ip-blacklist-hono.strategy.js +1 -4
- package/dist/shield-ip-blacklist-hono.strategy.js.map +1 -1
- package/dist/shield-ip-blacklist.strategy.d.ts +1 -1
- package/dist/shield-ip-blacklist.strategy.d.ts.map +1 -1
- package/dist/shield-ip-whitelist-hono.strategy.d.ts +0 -2
- package/dist/shield-ip-whitelist-hono.strategy.d.ts.map +1 -1
- package/dist/shield-ip-whitelist-hono.strategy.js +1 -4
- package/dist/shield-ip-whitelist-hono.strategy.js.map +1 -1
- package/dist/shield-ip-whitelist.strategy.d.ts +1 -1
- package/dist/shield-ip-whitelist.strategy.d.ts.map +1 -1
- package/dist/shield-rate-limit-hono.strategy.d.ts +0 -2
- package/dist/shield-rate-limit-hono.strategy.d.ts.map +1 -1
- package/dist/shield-rate-limit-hono.strategy.js +4 -5
- package/dist/shield-rate-limit-hono.strategy.js.map +1 -1
- package/dist/shield-rate-limit.strategy.d.ts +7 -1
- package/dist/shield-rate-limit.strategy.d.ts.map +1 -1
- package/dist/shield-rate-limit.strategy.js +4 -1
- package/dist/shield-rate-limit.strategy.js.map +1 -1
- package/dist/shield-recaptcha-hono.strategy.d.ts +0 -2
- package/dist/shield-recaptcha-hono.strategy.d.ts.map +1 -1
- package/dist/shield-recaptcha-hono.strategy.js +1 -4
- package/dist/shield-recaptcha-hono.strategy.js.map +1 -1
- package/dist/shield-recaptcha.strategy.d.ts +2 -0
- package/dist/shield-recaptcha.strategy.d.ts.map +1 -1
- package/dist/shield-recaptcha.strategy.js +3 -1
- package/dist/shield-recaptcha.strategy.js.map +1 -1
- package/dist/shield-timeout-hono.strategy.d.ts +0 -2
- package/dist/shield-timeout-hono.strategy.d.ts.map +1 -1
- package/dist/shield-timeout-hono.strategy.js +1 -2
- package/dist/shield-timeout-hono.strategy.js.map +1 -1
- package/dist/sleeper-noop.adapter.d.ts +2 -1
- package/dist/sleeper-noop.adapter.d.ts.map +1 -1
- package/dist/sleeper-noop.adapter.js +1 -1
- package/dist/sleeper-noop.adapter.js.map +1 -1
- package/dist/sms-with-logger.adapter.d.ts.map +1 -1
- package/dist/sms-with-logger.adapter.js +15 -2
- package/dist/sms-with-logger.adapter.js.map +1 -1
- package/dist/sms.builder.d.ts +4 -4
- package/dist/sms.builder.d.ts.map +1 -1
- package/dist/sms.builder.js +3 -6
- package/dist/sms.builder.js.map +1 -1
- package/dist/temporary-file-absolute.adapter.d.ts.map +1 -1
- package/dist/temporary-file-absolute.adapter.js +7 -1
- package/dist/temporary-file-absolute.adapter.js.map +1 -1
- package/dist/temporary-file-noop.adapter.d.ts +1 -1
- package/dist/temporary-file-noop.adapter.d.ts.map +1 -1
- package/dist/temporary-file-noop.adapter.js +1 -1
- package/dist/temporary-file-noop.adapter.js.map +1 -1
- package/dist/timekeeper-google.adapter.js +1 -1
- package/dist/timekeeper-google.adapter.js.map +1 -1
- package/dist/timeout-cancellable-runner-noop.adapter.d.ts +2 -1
- package/dist/timeout-cancellable-runner-noop.adapter.d.ts.map +1 -1
- package/dist/timeout-cancellable-runner-noop.adapter.js +1 -1
- package/dist/timeout-cancellable-runner-noop.adapter.js.map +1 -1
- package/dist/translations.handler.d.ts +1 -0
- package/dist/translations.handler.d.ts.map +1 -1
- package/dist/translations.handler.js +4 -6
- package/dist/translations.handler.js.map +1 -1
- package/dist/uptime.service.d.ts +2 -2
- package/dist/uptime.service.d.ts.map +1 -1
- package/dist/uptime.service.js +2 -2
- package/dist/uptime.service.js.map +1 -1
- package/dist/weak-etag-extractor-hono.middleware.d.ts +1 -1
- package/dist/weak-etag-extractor-hono.middleware.d.ts.map +1 -1
- package/dist/woodchopper-sampling-correlation-id.strategy.d.ts +1 -1
- package/dist/woodchopper-sampling-correlation-id.strategy.d.ts.map +1 -1
- package/dist/woodchopper-sampling-correlation-id.strategy.js +1 -1
- package/dist/woodchopper-sampling-correlation-id.strategy.js.map +1 -1
- package/dist/woodchopper-sink-collecting.strategy.d.ts +1 -1
- package/dist/woodchopper-sink-collecting.strategy.d.ts.map +1 -1
- package/dist/woodchopper-sink-noop.strategy.d.ts +1 -1
- package/dist/woodchopper-sink-noop.strategy.d.ts.map +1 -1
- package/dist/woodchopper.js +1 -1
- package/dist/woodchopper.js.map +1 -1
- package/package.json +15 -15
- package/readme.md +53 -10
- package/src/ab-assignment-cookie.strategy.ts +14 -0
- package/src/ab-assignment-header.strategy.ts +14 -0
- package/src/alert-channel-composite.adapter.ts +2 -2
- package/src/alert-channel-with-logger.adapter.ts +10 -2
- package/src/alert-channel.builder.ts +4 -7
- package/src/antivirus-noop.adapter.ts +1 -2
- package/src/antivirus-with-logger.adapter.ts +14 -7
- package/src/antivirus-with-semaphore.adapter.ts +4 -5
- package/src/antivirus-with-timeout.adapter.ts +20 -0
- package/src/antivirus.builder.ts +41 -0
- package/src/antivirus.port.ts +1 -3
- package/src/api-version-hono.middleware.ts +1 -1
- package/src/api-version.middleware.ts +7 -4
- package/src/auth-session-reader-noop.adapter.ts +2 -4
- package/src/cache-file.service.ts +2 -2
- package/src/cache-repository-noop.adapter.ts +4 -6
- package/src/cache-repository-redis.adapter.ts +6 -3
- package/src/certificate-inspector-tls.adapter.ts +2 -5
- package/src/checksum.service.ts +1 -2
- package/src/client-ip.vo.ts +1 -1
- package/src/client-user-agent.vo.ts +2 -2
- package/src/client.vo.ts +1 -1
- package/src/clock-system.adapter.ts +1 -1
- package/src/commit-sha-value.vo.ts +1 -1
- package/src/commit-sha.vo.ts +10 -6
- package/src/correlation.middleware.ts +3 -3
- package/src/cron-scheduler-with-logger.adapter.ts +24 -0
- package/src/cron-task-handler-with-logger.strategy.ts +4 -2
- package/src/directory-ensurer-noop.adapter.ts +2 -3
- package/src/directory-ensurer.adapter.ts +3 -4
- package/src/directory-ensurer.port.ts +3 -1
- package/src/disk-space-checker-noop.adapter.ts +1 -1
- package/src/disk-space-checker-shell.adapter.ts +1 -1
- package/src/disk-space-checker.port.ts +1 -1
- package/src/event-store.adapter.ts +2 -2
- package/src/event-stream.vo.ts +1 -1
- package/src/file-uploader-hono.middleware.ts +6 -15
- package/src/handler-bare.strategy.ts +11 -0
- package/src/handler-noop.strategy.ts +11 -0
- package/src/handler-with-logger.strategy.ts +35 -0
- package/src/handler.strategy.ts +9 -0
- package/src/healthcheck-hono.handler.ts +6 -12
- package/src/healthcheck.handler.ts +7 -3
- package/src/i18n.service.ts +1 -1
- package/src/in-flight-requests-hono.middleware.ts +1 -1
- package/src/in-flight-requests.middleware.ts +1 -1
- package/src/index.ts +50 -7
- package/src/job-claimer-noop.adapter.ts +14 -0
- package/src/job-claimer-sqlite.adapter.ts +37 -0
- package/src/job-claimer.port.ts +9 -0
- package/src/job-completer-collecting.adapter.ts +10 -0
- package/src/job-completer-noop.adapter.ts +6 -0
- package/src/job-completer-sqlite.adapter.ts +13 -0
- package/src/job-completer.port.ts +5 -0
- package/src/job-enqueuer-collecting.adapter.ts +13 -0
- package/src/job-enqueuer-noop.adapter.ts +9 -0
- package/src/job-enqueuer-sqlite.adapter.ts +33 -0
- package/src/job-enqueuer.port.ts +6 -0
- package/src/job-envelope.ts +31 -0
- package/src/job-failer-collecting.adapter.ts +10 -0
- package/src/job-failer-noop.adapter.ts +6 -0
- package/src/job-failer-sqlite.adapter.ts +13 -0
- package/src/job-failer.port.ts +5 -0
- package/src/job-queue-noop.adapter.ts +37 -0
- package/src/job-queue-sqlite-store.service.ts +29 -0
- package/src/job-queue-stats-provider-noop.adapter.ts +10 -0
- package/src/job-queue-stats-provider-sqlite.adapter.ts +33 -0
- package/src/job-queue-stats-provider.port.ts +13 -0
- package/src/job-queue-with-logger.adapter.ts +84 -0
- package/src/job-queue.adapter.ts +66 -0
- package/src/job-queue.port.ts +20 -0
- package/src/job-registry.adapter.ts +61 -0
- package/src/job-registry.port.ts +18 -0
- package/src/job-requeuer-collecting.adapter.ts +17 -0
- package/src/job-requeuer-noop.adapter.ts +11 -0
- package/src/job-requeuer-sqlite.adapter.ts +22 -0
- package/src/job-requeuer.port.ts +6 -0
- package/src/job-retry-policy-backoff.strategy.ts +12 -0
- package/src/job-retry-policy-composite.strategy.ts +29 -0
- package/src/job-retry-policy-error-filter.strategy.ts +14 -0
- package/src/job-retry-policy-limit.strategy.ts +12 -0
- package/src/job-retry-policy-noop.strategy.ts +9 -0
- package/src/job-retry-policy.strategy.ts +6 -0
- package/src/job-worker.service.ts +37 -0
- package/src/job.types.ts +13 -0
- package/src/logger-collecting.adapter.ts +0 -1
- package/src/logger-noop.adapter.ts +6 -2
- package/src/mailer-resend.adapter.ts +1 -1
- package/src/mailer-smtp.adapter.ts +1 -1
- package/src/mailer-template.vo.ts +1 -1
- package/src/mailer-with-logger.adapter.ts +15 -2
- package/src/mailer.builder.ts +4 -7
- package/src/memory-consumption.service.ts +4 -5
- package/src/modules/system/cron-tasks/index.ts +2 -0
- package/src/modules/system/{services/passage-of-time-hourly.service.ts → cron-tasks/passage-of-time-hourly.ts} +1 -1
- package/src/modules/system/{services/passage-of-time-minute.service.ts → cron-tasks/passage-of-time-minute.ts} +1 -1
- package/src/modules/system/index.ts +1 -1
- package/src/payload-serializer-collecting.adapter.ts +19 -0
- package/src/payload-serializer-json.adapter.ts +11 -0
- package/src/payload-serializer.port.ts +4 -0
- package/src/pdf-generator-with-logger.adapter.ts +9 -1
- package/src/pdf-generator.port.ts +2 -2
- package/src/prerequisite-runner-startup.service.ts +2 -2
- package/src/prerequisite-verifier-directory.adapter.ts +1 -1
- package/src/prerequisite-verifier-space.adapter.ts +2 -1
- package/src/randomness-crypto.strategy.ts +1 -1
- package/src/remote-file-storage-disk.adapter.ts +7 -1
- package/src/remote-file-storage-with-logger.adapter.ts +22 -5
- package/src/request-context-hono.adapter.ts +2 -2
- package/src/request-context.port.ts +1 -1
- package/src/retry-backoff-noop.strategy.ts +1 -1
- package/src/sealer-noop.adapter.ts +1 -1
- package/src/secure-key-generator-noop.adapter.ts +2 -1
- package/src/shield-api-key-hono.strategy.ts +1 -3
- package/src/shield-auth-hono.strategy.ts +2 -4
- package/src/shield-auth.strategy.ts +2 -2
- package/src/shield-basic-auth-hono.strategy.ts +1 -5
- package/src/shield-body-limit-hono.strategy.ts +1 -3
- package/src/shield-csrf-hono.strategy.ts +1 -3
- package/src/shield-hcaptcha-hono-local.strategy.ts +1 -5
- package/src/shield-hcaptcha-hono.strategy.ts +1 -3
- package/src/shield-ip-blacklist-hono.strategy.ts +1 -5
- package/src/shield-ip-blacklist.strategy.ts +1 -1
- package/src/shield-ip-whitelist-hono.strategy.ts +1 -5
- package/src/shield-ip-whitelist.strategy.ts +1 -1
- package/src/shield-rate-limit-hono.strategy.ts +6 -6
- package/src/shield-rate-limit.strategy.ts +7 -2
- package/src/shield-recaptcha-hono.strategy.ts +2 -5
- package/src/shield-recaptcha.strategy.ts +6 -3
- package/src/shield-timeout-hono.strategy.ts +4 -3
- package/src/sleeper-noop.adapter.ts +2 -1
- package/src/sms-with-logger.adapter.ts +15 -2
- package/src/sms.builder.ts +4 -7
- package/src/temporary-file-absolute.adapter.ts +7 -1
- package/src/temporary-file-noop.adapter.ts +1 -1
- package/src/timekeeper-google.adapter.ts +1 -1
- package/src/timeout-cancellable-runner-noop.adapter.ts +2 -1
- package/src/translations.handler.ts +7 -7
- package/src/uptime.service.ts +3 -6
- package/src/weak-etag-extractor-hono.middleware.ts +1 -1
- package/src/woodchopper-sampling-correlation-id.strategy.ts +1 -1
- package/src/woodchopper-sink-collecting.strategy.ts +1 -1
- package/src/woodchopper-sink-noop.strategy.ts +1 -1
- package/src/woodchopper.ts +1 -1
- package/dist/event-serializer-collecting.adapter.d.ts +0 -9
- package/dist/event-serializer-collecting.adapter.d.ts.map +0 -1
- package/dist/event-serializer-collecting.adapter.js.map +0 -1
- package/dist/event-serializer-json.adapter.d.ts +0 -7
- package/dist/event-serializer-json.adapter.d.ts.map +0 -1
- package/dist/event-serializer-json.adapter.js.map +0 -1
- package/dist/event-serializer.port.d.ts +0 -6
- package/dist/event-serializer.port.d.ts.map +0 -1
- package/dist/event-serializer.port.js +0 -2
- package/dist/event-serializer.port.js.map +0 -1
- package/dist/message-handler-bare.strategy.d.ts +0 -8
- package/dist/message-handler-bare.strategy.d.ts.map +0 -1
- package/dist/message-handler-bare.strategy.js +0 -8
- package/dist/message-handler-bare.strategy.js.map +0 -1
- package/dist/message-handler-noop.strategy.d.ts +0 -8
- package/dist/message-handler-noop.strategy.d.ts.map +0 -1
- package/dist/message-handler-noop.strategy.js +0 -8
- package/dist/message-handler-noop.strategy.js.map +0 -1
- package/dist/message-handler-with-logger.strategy.d.ts +0 -17
- package/dist/message-handler-with-logger.strategy.d.ts.map +0 -1
- package/dist/message-handler-with-logger.strategy.js +0 -27
- package/dist/message-handler-with-logger.strategy.js.map +0 -1
- package/dist/message-handler.strategy.d.ts +0 -7
- package/dist/message-handler.strategy.d.ts.map +0 -1
- package/dist/message-handler.strategy.js +0 -2
- package/dist/message-handler.strategy.js.map +0 -1
- package/dist/modules/system/services/index.d.ts +0 -3
- package/dist/modules/system/services/index.d.ts.map +0 -1
- package/dist/modules/system/services/index.js +0 -3
- package/dist/modules/system/services/index.js.map +0 -1
- package/dist/modules/system/services/passage-of-time-hourly.service.d.ts.map +0 -1
- package/dist/modules/system/services/passage-of-time-hourly.service.js.map +0 -1
- package/dist/modules/system/services/passage-of-time-minute.service.d.ts.map +0 -1
- package/dist/modules/system/services/passage-of-time-minute.service.js.map +0 -1
- package/src/event-serializer-collecting.adapter.ts +0 -20
- package/src/event-serializer-json.adapter.ts +0 -12
- package/src/event-serializer.port.ts +0 -6
- package/src/message-handler-bare.strategy.ts +0 -11
- package/src/message-handler-noop.strategy.ts +0 -11
- package/src/message-handler-with-logger.strategy.ts +0 -32
- package/src/message-handler.strategy.ts +0 -8
- package/src/modules/system/services/index.ts +0 -2
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type * as tools from "@bgord/tools";
|
|
2
|
+
import type { GenericJob } from "./job.types";
|
|
3
|
+
import type { JobClaimerPort } from "./job-claimer.port";
|
|
4
|
+
import type { JobCompleterPort } from "./job-completer.port";
|
|
5
|
+
import type { JobEnqueuerPort } from "./job-enqueuer.port";
|
|
6
|
+
import type { JobFailerPort } from "./job-failer.port";
|
|
7
|
+
import type { JobQueuePort } from "./job-queue.port";
|
|
8
|
+
import type { JobHandler, JobRegistryPort } from "./job-registry.port";
|
|
9
|
+
import type { JobRequeuerPort } from "./job-requeuer.port";
|
|
10
|
+
import type { JobRetryPolicyStrategy } from "./job-retry-policy.strategy";
|
|
11
|
+
import type { PayloadSerializerPort } from "./payload-serializer.port";
|
|
12
|
+
|
|
13
|
+
type Config<Job extends GenericJob> = {
|
|
14
|
+
registry: JobRegistryPort<Job>;
|
|
15
|
+
enqueuer: JobEnqueuerPort;
|
|
16
|
+
claimer: JobClaimerPort;
|
|
17
|
+
completer: JobCompleterPort;
|
|
18
|
+
failer: JobFailerPort;
|
|
19
|
+
requeuer: JobRequeuerPort;
|
|
20
|
+
serializer: PayloadSerializerPort;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export class JobQueueAdapter<Job extends GenericJob> implements JobQueuePort<Job> {
|
|
24
|
+
constructor(private readonly config: Config<Job>) {}
|
|
25
|
+
|
|
26
|
+
async enqueue<EnqueuedJob extends Job>(job: EnqueuedJob): Promise<EnqueuedJob> {
|
|
27
|
+
const serialized = await this.config.enqueuer.enqueue({
|
|
28
|
+
...job,
|
|
29
|
+
payload: this.config.serializer.serialize(job.payload),
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
return { ...serialized, payload: this.config.serializer.deserialize(serialized.payload) } as EnqueuedJob;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
async claim(limit: tools.IntegerPositiveType): Promise<ReadonlyArray<Job>> {
|
|
36
|
+
const jobs = await this.config.claimer.claim(this.config.registry.names, limit);
|
|
37
|
+
|
|
38
|
+
return jobs
|
|
39
|
+
.map((job) => ({ ...job, payload: this.config.serializer.deserialize(job.payload) }))
|
|
40
|
+
.map((job) => this.config.registry.validate(job));
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async complete(id: GenericJob["id"]): Promise<void> {
|
|
44
|
+
return this.config.completer.complete(id);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
async fail(id: GenericJob["id"]): Promise<void> {
|
|
48
|
+
return this.config.failer.fail(id);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
async requeue(
|
|
52
|
+
id: GenericJob["id"],
|
|
53
|
+
revision: GenericJob["revision"],
|
|
54
|
+
delay: tools.Duration,
|
|
55
|
+
): Promise<void> {
|
|
56
|
+
return this.config.requeuer.requeue(id, revision, delay);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
getRetryPolicy(name: GenericJob["name"]): JobRetryPolicyStrategy {
|
|
60
|
+
return this.config.registry.getRetryPolicy(name);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
getHandler(name: GenericJob["name"]): JobHandler<Job> {
|
|
64
|
+
return this.config.registry.getHandler(name);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type * as tools from "@bgord/tools";
|
|
2
|
+
import type { GenericJob } from "./job.types";
|
|
3
|
+
import type { JobHandler } from "./job-registry.port";
|
|
4
|
+
import type { JobRetryPolicyStrategy } from "./job-retry-policy.strategy";
|
|
5
|
+
|
|
6
|
+
export interface JobQueuePort<Job extends GenericJob> {
|
|
7
|
+
enqueue<EnqueuedJob extends Job>(job: EnqueuedJob): Promise<EnqueuedJob>;
|
|
8
|
+
|
|
9
|
+
claim(limit: tools.IntegerPositiveType): Promise<ReadonlyArray<Job>>;
|
|
10
|
+
|
|
11
|
+
complete(id: GenericJob["id"]): Promise<void>;
|
|
12
|
+
|
|
13
|
+
fail(id: GenericJob["id"]): Promise<void>;
|
|
14
|
+
|
|
15
|
+
requeue(id: GenericJob["id"], revision: GenericJob["revision"], delay: tools.Duration): Promise<void>;
|
|
16
|
+
|
|
17
|
+
getRetryPolicy(name: GenericJob["name"]): JobRetryPolicyStrategy;
|
|
18
|
+
|
|
19
|
+
getHandler(name: GenericJob["name"]): JobHandler<Job>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { StandardSchemaV1 } from "@standard-schema/spec";
|
|
2
|
+
import type { GenericJob } from "./job.types";
|
|
3
|
+
import { type JobHandler, JobRegistryError, type JobRegistryPort } from "./job-registry.port";
|
|
4
|
+
import type { JobRetryPolicyStrategy } from "./job-retry-policy.strategy";
|
|
5
|
+
|
|
6
|
+
export type JobRegistryEntry<Specific extends GenericJob> = {
|
|
7
|
+
schema: StandardSchemaV1<unknown, Specific>;
|
|
8
|
+
retry: JobRetryPolicyStrategy;
|
|
9
|
+
handler: (job: Specific) => Promise<void>;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
export type GenericJobRegistry<Job extends GenericJob> = {
|
|
13
|
+
[Name in Job["name"]]: JobRegistryEntry<Extract<Job, { name: Name }>>;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const JobRegistryAdapterError = {
|
|
17
|
+
MissingName: "job.registry.adapter.error.missing.name",
|
|
18
|
+
UnknownJob: "job.registry.adapter.error.unknown.job",
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export class JobRegistryAdapter<Job extends GenericJob> implements JobRegistryPort<Job> {
|
|
22
|
+
private readonly map: Map<GenericJob["name"], JobRegistryEntry<any>>;
|
|
23
|
+
readonly names: ReadonlyArray<GenericJob["name"]>;
|
|
24
|
+
|
|
25
|
+
constructor(registry: GenericJobRegistry<Job>) {
|
|
26
|
+
this.map = new Map(Object.entries(registry));
|
|
27
|
+
this.names = Object.keys(registry);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
accepts(name: GenericJob["name"]): boolean {
|
|
31
|
+
return this.map.has(name);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
validate(raw: unknown): Job {
|
|
35
|
+
const name = (raw as { name?: GenericJob["name"] }).name;
|
|
36
|
+
if (!name) throw new Error(JobRegistryAdapterError.MissingName);
|
|
37
|
+
|
|
38
|
+
const entry = this.map.get(name);
|
|
39
|
+
if (!entry) throw new Error(JobRegistryAdapterError.UnknownJob);
|
|
40
|
+
|
|
41
|
+
const result = entry.schema["~standard"].validate(raw);
|
|
42
|
+
|
|
43
|
+
if (result instanceof Promise) throw new Error(JobRegistryError.NoAsyncSchema);
|
|
44
|
+
if (result.issues) throw new Error(result.issues[0]?.message);
|
|
45
|
+
return result.value;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
getRetryPolicy(name: GenericJob["name"]): JobRetryPolicyStrategy {
|
|
49
|
+
const entry = this.map.get(name);
|
|
50
|
+
if (!entry) throw new Error(JobRegistryAdapterError.UnknownJob);
|
|
51
|
+
|
|
52
|
+
return entry.retry;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
getHandler(name: GenericJob["name"]): JobHandler<Job> {
|
|
56
|
+
const entry = this.map.get(name);
|
|
57
|
+
if (!entry) throw new Error(JobRegistryAdapterError.UnknownJob);
|
|
58
|
+
|
|
59
|
+
return entry.handler as JobHandler<Job>;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { GenericJob } from "./job.types";
|
|
2
|
+
import type { JobRetryPolicyStrategy } from "./job-retry-policy.strategy";
|
|
3
|
+
|
|
4
|
+
export const JobRegistryError = { NoAsyncSchema: "job.registry.no.async.schema" };
|
|
5
|
+
|
|
6
|
+
export type JobHandler<Job extends GenericJob> = (job: Job) => Promise<void>;
|
|
7
|
+
|
|
8
|
+
export interface JobRegistryPort<Job extends GenericJob> {
|
|
9
|
+
readonly names: ReadonlyArray<GenericJob["name"]>;
|
|
10
|
+
|
|
11
|
+
accepts(name: GenericJob["name"]): boolean;
|
|
12
|
+
|
|
13
|
+
validate(raw: unknown): Job;
|
|
14
|
+
|
|
15
|
+
getRetryPolicy(name: GenericJob["name"]): JobRetryPolicyStrategy;
|
|
16
|
+
|
|
17
|
+
getHandler(name: GenericJob["name"]): JobHandler<Job>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type * as tools from "@bgord/tools";
|
|
2
|
+
import type { GenericJob } from "./job.types";
|
|
3
|
+
import type { JobRequeuerPort } from "./job-requeuer.port";
|
|
4
|
+
|
|
5
|
+
type RequeueEntry = { id: GenericJob["id"]; revision: GenericJob["revision"]; delay: tools.Duration };
|
|
6
|
+
|
|
7
|
+
export class JobRequeuerCollectingAdapter implements JobRequeuerPort {
|
|
8
|
+
readonly requeued: Array<RequeueEntry> = [];
|
|
9
|
+
|
|
10
|
+
async requeue(
|
|
11
|
+
id: GenericJob["id"],
|
|
12
|
+
revision: GenericJob["revision"],
|
|
13
|
+
delay: tools.Duration,
|
|
14
|
+
): Promise<void> {
|
|
15
|
+
this.requeued.push({ id, revision, delay });
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type * as tools from "@bgord/tools";
|
|
2
|
+
import type { GenericJob } from "./job.types";
|
|
3
|
+
import type { JobRequeuerPort } from "./job-requeuer.port";
|
|
4
|
+
|
|
5
|
+
export class JobRequeuerNoopAdapter implements JobRequeuerPort {
|
|
6
|
+
async requeue(
|
|
7
|
+
_id: GenericJob["id"],
|
|
8
|
+
_revision: GenericJob["revision"],
|
|
9
|
+
_delay: tools.Duration,
|
|
10
|
+
): Promise<void> {}
|
|
11
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { Database } from "bun:sqlite";
|
|
2
|
+
import type * as tools from "@bgord/tools";
|
|
3
|
+
import type { ClockPort } from "./clock.port";
|
|
4
|
+
import type { GenericJob } from "./job.types";
|
|
5
|
+
import type { JobRequeuerPort } from "./job-requeuer.port";
|
|
6
|
+
|
|
7
|
+
type Dependencies = { db: Database; Clock: ClockPort };
|
|
8
|
+
|
|
9
|
+
export class JobRequeuerSqliteAdapter implements JobRequeuerPort {
|
|
10
|
+
constructor(private readonly deps: Dependencies) {}
|
|
11
|
+
|
|
12
|
+
async requeue(
|
|
13
|
+
id: GenericJob["id"],
|
|
14
|
+
revision: GenericJob["revision"],
|
|
15
|
+
delay: tools.Duration,
|
|
16
|
+
): Promise<void> {
|
|
17
|
+
this.deps.db.run<[GenericJob["revision"], tools.TimestampValueType, GenericJob["id"]]>(
|
|
18
|
+
"UPDATE jobs SET status = 'pending', revision = ?, claimableAt = ? WHERE id = ?",
|
|
19
|
+
[revision, this.deps.Clock.now().add(delay).ms, id],
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as tools from "@bgord/tools";
|
|
2
|
+
import type { GenericJob } from "./job.types";
|
|
3
|
+
import type { JobRetryPolicyStrategy } from "./job-retry-policy.strategy";
|
|
4
|
+
import type { RetryBackoffStrategy } from "./retry-backoff.strategy";
|
|
5
|
+
|
|
6
|
+
export class JobRetryPolicyBackoffStrategy implements JobRetryPolicyStrategy {
|
|
7
|
+
constructor(private readonly backoff: RetryBackoffStrategy) {}
|
|
8
|
+
|
|
9
|
+
evaluate(job: GenericJob, _error: tools.NormalizedError): false | tools.Duration {
|
|
10
|
+
return this.backoff.next(tools.Int.positive(job.revision + 1));
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import * as tools from "@bgord/tools";
|
|
2
|
+
import type { GenericJob } from "./job.types";
|
|
3
|
+
import type { JobRetryPolicyStrategy } from "./job-retry-policy.strategy";
|
|
4
|
+
|
|
5
|
+
export const JobRetryPolicyCompositeStrategyError = {
|
|
6
|
+
MissingPolicies: "job.retry.policy.composite.strategy.error.missing.policies",
|
|
7
|
+
MaxPolicies: "job.retry.policy.composite.strategy.error.max.policies",
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export class JobRetryPolicyCompositeStrategy implements JobRetryPolicyStrategy {
|
|
11
|
+
constructor(private readonly policies: ReadonlyArray<JobRetryPolicyStrategy>) {
|
|
12
|
+
if (policies.length === 0) throw new Error(JobRetryPolicyCompositeStrategyError.MissingPolicies);
|
|
13
|
+
if (policies.length > 5) throw new Error(JobRetryPolicyCompositeStrategyError.MaxPolicies);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
evaluate(job: GenericJob, error: tools.NormalizedError): false | tools.Duration {
|
|
17
|
+
let delay: tools.Duration = tools.Duration.ZERO;
|
|
18
|
+
|
|
19
|
+
for (const policy of this.policies) {
|
|
20
|
+
const result = policy.evaluate(job, error);
|
|
21
|
+
|
|
22
|
+
if (!result) return false;
|
|
23
|
+
|
|
24
|
+
delay = result;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
return delay;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import * as tools from "@bgord/tools";
|
|
2
|
+
import type { GenericJob } from "./job.types";
|
|
3
|
+
import type { JobRetryPolicyStrategy } from "./job-retry-policy.strategy";
|
|
4
|
+
|
|
5
|
+
type Config = { retry: (error: tools.NormalizedError) => boolean };
|
|
6
|
+
|
|
7
|
+
export class JobRetryPolicyErrorFilterStrategy implements JobRetryPolicyStrategy {
|
|
8
|
+
constructor(private readonly config: Config) {}
|
|
9
|
+
|
|
10
|
+
evaluate(_job: GenericJob, error: tools.NormalizedError): false | tools.Duration {
|
|
11
|
+
if (!this.config.retry(error)) return false;
|
|
12
|
+
return tools.Duration.ZERO;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as tools from "@bgord/tools";
|
|
2
|
+
import type { GenericJob } from "./job.types";
|
|
3
|
+
import type { JobRetryPolicyStrategy } from "./job-retry-policy.strategy";
|
|
4
|
+
|
|
5
|
+
export class JobRetryPolicyLimitStrategy implements JobRetryPolicyStrategy {
|
|
6
|
+
constructor(private readonly retries: tools.IntegerNonNegativeType) {}
|
|
7
|
+
|
|
8
|
+
evaluate(job: GenericJob, _error: tools.NormalizedError): false | tools.Duration {
|
|
9
|
+
if (job.revision >= this.retries) return false;
|
|
10
|
+
return tools.Duration.ZERO;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type * as tools from "@bgord/tools";
|
|
2
|
+
import type { GenericJob } from "./job.types";
|
|
3
|
+
import type { JobRetryPolicyStrategy } from "./job-retry-policy.strategy";
|
|
4
|
+
|
|
5
|
+
export class JobRetryPolicyNoopStrategy implements JobRetryPolicyStrategy {
|
|
6
|
+
evaluate(_job: GenericJob, _error: tools.NormalizedError): false | tools.Duration {
|
|
7
|
+
return false;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import * as tools from "@bgord/tools";
|
|
2
|
+
import { CorrelationStorage } from "./correlation-storage.service";
|
|
3
|
+
import type { CronTask } from "./cron-task.vo";
|
|
4
|
+
import type { GenericJob } from "./job.types";
|
|
5
|
+
import type { JobQueuePort } from "./job-queue.port";
|
|
6
|
+
|
|
7
|
+
type Config = { label: CronTask["label"]; cron: CronTask["cron"]; limit: tools.IntegerPositiveType };
|
|
8
|
+
|
|
9
|
+
type Dependencies<Job extends GenericJob> = { queue: JobQueuePort<Job> };
|
|
10
|
+
|
|
11
|
+
export function JobWorker<Job extends GenericJob>(config: Config, deps: Dependencies<Job>): CronTask {
|
|
12
|
+
return {
|
|
13
|
+
label: config.label,
|
|
14
|
+
cron: config.cron,
|
|
15
|
+
handler: async () => {
|
|
16
|
+
const jobs = await deps.queue.claim(config.limit);
|
|
17
|
+
|
|
18
|
+
for (const job of jobs) {
|
|
19
|
+
await CorrelationStorage.run(job.correlationId, async () => {
|
|
20
|
+
try {
|
|
21
|
+
const handler = deps.queue.getHandler(job.name);
|
|
22
|
+
|
|
23
|
+
await handler(job);
|
|
24
|
+
await deps.queue.complete(job.id);
|
|
25
|
+
} catch (error) {
|
|
26
|
+
const policy = deps.queue.getRetryPolicy(job.name);
|
|
27
|
+
|
|
28
|
+
const retry = policy.evaluate(job, tools.ErrorNormalizer.normalize(error));
|
|
29
|
+
|
|
30
|
+
if (!retry) return deps.queue.fail(job.id);
|
|
31
|
+
await deps.queue.requeue(job.id, job.revision + 1, retry);
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
}
|
package/src/job.types.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type * as tools from "@bgord/tools";
|
|
2
|
+
import type { UUIDType } from "./uuid.vo";
|
|
3
|
+
|
|
4
|
+
export type GenericJob = {
|
|
5
|
+
id: UUIDType;
|
|
6
|
+
correlationId: UUIDType;
|
|
7
|
+
createdAt: number;
|
|
8
|
+
name: string;
|
|
9
|
+
revision: tools.RevisionValueType;
|
|
10
|
+
payload: Record<string, unknown>;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export type GenericJobSerialized = Omit<GenericJob, "payload"> & { payload: string };
|
|
@@ -13,7 +13,6 @@ export class LoggerCollectingAdapter implements LoggerPort {
|
|
|
13
13
|
| Omit<LogWarnType, AdapterInjectedFields>
|
|
14
14
|
| Omit<LogCoreType, AdapterInjectedFields>
|
|
15
15
|
| Omit<LogHttpType, AdapterInjectedFields>
|
|
16
|
-
| Omit<LogCoreType, AdapterInjectedFields>
|
|
17
16
|
> = [];
|
|
18
17
|
|
|
19
18
|
warn: LoggerPort["warn"] = (log): void => {
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import type { LoggerPort } from "./logger.port";
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
LoggerState,
|
|
4
|
+
type LoggerStatsProviderPort,
|
|
5
|
+
type LoggerStatsSnapshot,
|
|
6
|
+
} from "./logger-stats-provider.port";
|
|
3
7
|
|
|
4
|
-
export class LoggerNoopAdapter implements LoggerPort {
|
|
8
|
+
export class LoggerNoopAdapter implements LoggerPort, LoggerStatsProviderPort {
|
|
5
9
|
error: LoggerPort["error"] = (_log): void => {};
|
|
6
10
|
warn: LoggerPort["warn"] = (_log): void => {};
|
|
7
11
|
info: LoggerPort["info"] = (_log): void => {};
|
|
@@ -16,7 +16,7 @@ export class MailerResendAdapter implements MailerPort {
|
|
|
16
16
|
MailerResendAdapterError.MissingDependency,
|
|
17
17
|
);
|
|
18
18
|
|
|
19
|
-
private constructor(readonly transport: Resend) {}
|
|
19
|
+
private constructor(private readonly transport: Resend) {}
|
|
20
20
|
|
|
21
21
|
static async build(config: Config): Promise<MailerResendAdapter> {
|
|
22
22
|
const library = await MailerResendAdapter.importer.resolve();
|
|
@@ -26,7 +26,7 @@ export class MailerSmtpAdapter implements MailerPort {
|
|
|
26
26
|
MailerSmtpAdapterError.MissingDependency,
|
|
27
27
|
);
|
|
28
28
|
|
|
29
|
-
private constructor(readonly transport: Nodemailer.Transporter) {}
|
|
29
|
+
private constructor(private readonly transport: Nodemailer.Transporter) {}
|
|
30
30
|
|
|
31
31
|
static async build(config: Config): Promise<MailerSmtpAdapter> {
|
|
32
32
|
const library = await MailerSmtpAdapter.importer.resolve();
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ClockPort } from "./clock.port";
|
|
2
|
+
import { CorrelationStorage } from "./correlation-storage.service";
|
|
2
3
|
import type { LoggerPort } from "./logger.port";
|
|
3
4
|
import type { MailerPort } from "./mailer.port";
|
|
4
5
|
import type { MailerTemplate } from "./mailer-template.vo";
|
|
@@ -15,17 +16,29 @@ export class MailerWithLoggerAdapter implements MailerPort {
|
|
|
15
16
|
const duration = new Stopwatch(this.deps);
|
|
16
17
|
|
|
17
18
|
try {
|
|
18
|
-
this.deps.Logger.info({
|
|
19
|
+
this.deps.Logger.info({
|
|
20
|
+
message: "Mailer attempt",
|
|
21
|
+
correlationId: CorrelationStorage.get(),
|
|
22
|
+
metadata: template.toJSON(),
|
|
23
|
+
...this.base,
|
|
24
|
+
});
|
|
19
25
|
|
|
20
26
|
await this.deps.inner.send(template);
|
|
21
27
|
|
|
22
28
|
this.deps.Logger.info({
|
|
23
29
|
message: "Mailer success",
|
|
30
|
+
correlationId: CorrelationStorage.get(),
|
|
24
31
|
metadata: { template: template.toJSON(), duration: duration.stop() },
|
|
25
32
|
...this.base,
|
|
26
33
|
});
|
|
27
34
|
} catch (error) {
|
|
28
|
-
this.deps.Logger.error({
|
|
35
|
+
this.deps.Logger.error({
|
|
36
|
+
message: "Mailer error",
|
|
37
|
+
correlationId: CorrelationStorage.get(),
|
|
38
|
+
error,
|
|
39
|
+
metadata: duration.stop(),
|
|
40
|
+
...this.base,
|
|
41
|
+
});
|
|
29
42
|
|
|
30
43
|
throw error;
|
|
31
44
|
}
|
package/src/mailer.builder.ts
CHANGED
|
@@ -15,28 +15,25 @@ import {
|
|
|
15
15
|
} from "./mailer-with-timeout.adapter";
|
|
16
16
|
|
|
17
17
|
export class MailerBuilder {
|
|
18
|
-
constructor(private inner: MailerPort) {}
|
|
18
|
+
constructor(private readonly inner: MailerPort) {}
|
|
19
19
|
|
|
20
20
|
static of(mailer: MailerPort): MailerBuilder {
|
|
21
21
|
return new MailerBuilder(mailer);
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
withLogger(deps: Omit<MailerWithLoggerAdapterDependencies, "inner">) {
|
|
25
|
-
|
|
26
|
-
return this;
|
|
25
|
+
return MailerBuilder.of(new MailerWithLoggerAdapter({ ...deps, inner: this.inner }));
|
|
27
26
|
}
|
|
28
27
|
|
|
29
28
|
withRetry(config: MailerWithRetryAdapterConfig, deps: Omit<MailerWithRetryAdapterDependencies, "inner">) {
|
|
30
|
-
|
|
31
|
-
return this;
|
|
29
|
+
return MailerBuilder.of(new MailerWithRetryAdapter(config, { ...deps, inner: this.inner }));
|
|
32
30
|
}
|
|
33
31
|
|
|
34
32
|
withTimeout(
|
|
35
33
|
config: MailerWithTimeoutAdapterConfig,
|
|
36
34
|
deps: Omit<MailerWithTimeoutAdapterDependencies, "inner">,
|
|
37
35
|
) {
|
|
38
|
-
|
|
39
|
-
return this;
|
|
36
|
+
return MailerBuilder.of(new MailerWithTimeoutAdapter(config, { ...deps, inner: this.inner }));
|
|
40
37
|
}
|
|
41
38
|
|
|
42
39
|
build() {
|
|
@@ -12,12 +12,11 @@ export class MemoryConsumption {
|
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
static snapshot(): MemoryConsumptionSnapshotType {
|
|
15
|
+
const { rss, heapUsed, heapTotal } = process.memoryUsage();
|
|
16
|
+
|
|
15
17
|
return {
|
|
16
|
-
total: tools.Size.fromBytes(
|
|
17
|
-
heap: {
|
|
18
|
-
used: tools.Size.fromBytes(process.memoryUsage().heapUsed),
|
|
19
|
-
total: tools.Size.fromBytes(process.memoryUsage().heapTotal),
|
|
20
|
-
},
|
|
18
|
+
total: tools.Size.fromBytes(rss),
|
|
19
|
+
heap: { used: tools.Size.fromBytes(heapUsed), total: tools.Size.fromBytes(heapTotal) },
|
|
21
20
|
};
|
|
22
21
|
}
|
|
23
22
|
}
|
|
@@ -12,7 +12,7 @@ type Dependencies = {
|
|
|
12
12
|
IdProvider: IdProviderPort;
|
|
13
13
|
};
|
|
14
14
|
|
|
15
|
-
export const
|
|
15
|
+
export const PassageOfTimeHourlyCronTask = (deps: Dependencies): CronTask => ({
|
|
16
16
|
label: "PassageOfTimeHourly",
|
|
17
17
|
cron: CronExpressionSchedules.EVERY_HOUR,
|
|
18
18
|
handler: async () => {
|
|
@@ -12,7 +12,7 @@ type Dependencies = {
|
|
|
12
12
|
IdProvider: IdProviderPort;
|
|
13
13
|
};
|
|
14
14
|
|
|
15
|
-
export const
|
|
15
|
+
export const PassageOfTimeMinuteCronTask = (deps: Dependencies): CronTask => ({
|
|
16
16
|
label: "PassageOfTimeMinute",
|
|
17
17
|
cron: CronExpressionSchedules.EVERY_MINUTE,
|
|
18
18
|
handler: async () => {
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { PayloadSerializerPort } from "./payload-serializer.port";
|
|
2
|
+
|
|
3
|
+
export class PayloadSerializerCollectingAdapter implements PayloadSerializerPort {
|
|
4
|
+
readonly serialized: Array<Record<string, unknown>> = [];
|
|
5
|
+
|
|
6
|
+
readonly deserialized: Array<string> = [];
|
|
7
|
+
|
|
8
|
+
serialize(payload: Record<string, unknown>): string {
|
|
9
|
+
this.serialized.push(payload);
|
|
10
|
+
|
|
11
|
+
return JSON.stringify(payload);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
deserialize(raw: string): Record<string, unknown> {
|
|
15
|
+
this.deserialized.push(raw);
|
|
16
|
+
|
|
17
|
+
return JSON.parse(raw);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { PayloadSerializerPort } from "./payload-serializer.port";
|
|
2
|
+
|
|
3
|
+
export class PayloadSerializerJsonAdapter implements PayloadSerializerPort {
|
|
4
|
+
serialize(payload: Record<string, unknown>): string {
|
|
5
|
+
return JSON.stringify(payload);
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
deserialize(raw: string): Record<string, unknown> {
|
|
9
|
+
return JSON.parse(raw);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as tools from "@bgord/tools";
|
|
2
2
|
import type { ClockPort } from "./clock.port";
|
|
3
|
+
import { CorrelationStorage } from "./correlation-storage.service";
|
|
3
4
|
import type { LoggerPort } from "./logger.port";
|
|
4
5
|
import type { PdfGeneratorPort, PdfGeneratorTemplateType } from "./pdf-generator.port";
|
|
5
6
|
import { Stopwatch } from "./stopwatch.service";
|
|
@@ -15,13 +16,19 @@ export class PdfGeneratorWithLoggerAdapter implements PdfGeneratorPort {
|
|
|
15
16
|
const duration = new Stopwatch(this.deps);
|
|
16
17
|
|
|
17
18
|
try {
|
|
18
|
-
this.deps.Logger.info({
|
|
19
|
+
this.deps.Logger.info({
|
|
20
|
+
message: "PDF generator attempt",
|
|
21
|
+
correlationId: CorrelationStorage.get(),
|
|
22
|
+
metadata: { template, data },
|
|
23
|
+
...this.base,
|
|
24
|
+
});
|
|
19
25
|
|
|
20
26
|
const pdf = await this.deps.inner.request(template, data);
|
|
21
27
|
const size = tools.Size.fromBytes(pdf.byteLength);
|
|
22
28
|
|
|
23
29
|
this.deps.Logger.info({
|
|
24
30
|
message: "PDF generator success",
|
|
31
|
+
correlationId: CorrelationStorage.get(),
|
|
25
32
|
metadata: { size, duration: duration.stop() },
|
|
26
33
|
...this.base,
|
|
27
34
|
});
|
|
@@ -30,6 +37,7 @@ export class PdfGeneratorWithLoggerAdapter implements PdfGeneratorPort {
|
|
|
30
37
|
} catch (error) {
|
|
31
38
|
this.deps.Logger.error({
|
|
32
39
|
message: "PDF generator error",
|
|
40
|
+
correlationId: CorrelationStorage.get(),
|
|
33
41
|
error,
|
|
34
42
|
metadata: duration.stop(),
|
|
35
43
|
...this.base,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export type PdfGeneratorTemplateType = string;
|
|
2
2
|
|
|
3
|
-
export
|
|
4
|
-
|
|
3
|
+
export interface PdfGeneratorPort {
|
|
4
|
+
request(template: PdfGeneratorTemplateType, data: Record<string, unknown>): Promise<ArrayBuffer>;
|
|
5
5
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ClockPort } from "
|
|
2
|
-
import type { LoggerPort } from "
|
|
1
|
+
import type { ClockPort } from "./clock.port";
|
|
2
|
+
import type { LoggerPort } from "./logger.port";
|
|
3
3
|
import type { Prerequisite } from "./prerequisite.vo";
|
|
4
4
|
import { PrerequisiteVerificationOutcome } from "./prerequisite-verifier.port";
|
|
5
5
|
|