@bgord/bun 0.30.0 → 1.0.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/antivirus-clamav.adapter.d.ts.map +1 -1
- package/dist/antivirus-clamav.adapter.js +6 -6
- package/dist/antivirus-clamav.adapter.js.map +1 -1
- package/dist/antivirus.port.d.ts +3 -6
- package/dist/antivirus.port.d.ts.map +1 -1
- package/dist/antivirus.port.js +1 -12
- package/dist/antivirus.port.js.map +1 -1
- package/dist/api-version.middleware.d.ts +4 -2
- package/dist/api-version.middleware.d.ts.map +1 -1
- package/dist/api-version.middleware.js.map +1 -1
- package/dist/basic-auth-password.vo.d.ts +9 -0
- package/dist/basic-auth-password.vo.d.ts.map +1 -0
- package/dist/basic-auth-password.vo.js +12 -0
- package/dist/basic-auth-password.vo.js.map +1 -0
- package/dist/basic-auth-username.vo.d.ts +9 -0
- package/dist/basic-auth-username.vo.d.ts.map +1 -0
- package/dist/basic-auth-username.vo.js +12 -0
- package/dist/basic-auth-username.vo.js.map +1 -0
- package/dist/basic-auth.service.d.ts +5 -22
- package/dist/basic-auth.service.d.ts.map +1 -1
- package/dist/basic-auth.service.js +0 -15
- package/dist/basic-auth.service.js.map +1 -1
- package/dist/better-auth-logger.service.d.ts.map +1 -1
- package/dist/better-auth-logger.service.js +4 -2
- package/dist/better-auth-logger.service.js.map +1 -1
- package/dist/binary.vo.d.ts +10 -0
- package/dist/binary.vo.d.ts.map +1 -0
- package/dist/binary.vo.js +16 -0
- package/dist/binary.vo.js.map +1 -0
- package/dist/build-info-repository.service.d.ts +2 -1
- package/dist/build-info-repository.service.d.ts.map +1 -1
- package/dist/build-info-repository.service.js +2 -5
- package/dist/build-info-repository.service.js.map +1 -1
- package/dist/cache-file.service.d.ts.map +1 -1
- package/dist/cache-file.service.js +1 -1
- package/dist/cache-file.service.js.map +1 -1
- package/dist/cache-response.middleware.d.ts.map +1 -1
- package/dist/cache-response.middleware.js.map +1 -1
- package/dist/certificate-inspector-tls.adapter.d.ts +1 -0
- package/dist/certificate-inspector-tls.adapter.d.ts.map +1 -1
- package/dist/certificate-inspector-tls.adapter.js +5 -1
- package/dist/certificate-inspector-tls.adapter.js.map +1 -1
- package/dist/client-from-hono.adapter.d.ts +1 -1
- package/dist/client-from-hono.adapter.d.ts.map +1 -1
- package/dist/client-from-hono.adapter.js +1 -1
- package/dist/client-from-hono.adapter.js.map +1 -1
- package/dist/clock-system.adapter.d.ts.map +1 -1
- package/dist/clock-system.adapter.js +1 -2
- package/dist/clock-system.adapter.js.map +1 -1
- package/dist/clock.port.d.ts.map +1 -1
- package/dist/context.middleware.d.ts.map +1 -1
- package/dist/context.middleware.js.map +1 -1
- package/dist/correlation-id.vo.d.ts.map +1 -1
- package/dist/correlation-storage.service.d.ts +3 -0
- package/dist/correlation-storage.service.d.ts.map +1 -1
- package/dist/correlation-storage.service.js +2 -1
- package/dist/correlation-storage.service.js.map +1 -1
- package/dist/env-validator.service.d.ts +3 -1
- package/dist/env-validator.service.d.ts.map +1 -1
- package/dist/env-validator.service.js +2 -2
- package/dist/env-validator.service.js.map +1 -1
- package/dist/etag-extractor.middleware.js +2 -2
- package/dist/etag-extractor.middleware.js.map +1 -1
- package/dist/event-store-like.types.d.ts.map +1 -1
- package/dist/event-stream.vo.d.ts +4 -2
- package/dist/event-stream.vo.d.ts.map +1 -1
- package/dist/event-stream.vo.js +8 -4
- package/dist/event-stream.vo.js.map +1 -1
- package/dist/file-cleaner-bun-forgiving.adapter.d.ts +6 -0
- package/dist/file-cleaner-bun-forgiving.adapter.d.ts.map +1 -0
- package/dist/file-cleaner-bun-forgiving.adapter.js +9 -0
- package/dist/file-cleaner-bun-forgiving.adapter.js.map +1 -0
- package/dist/file-cleaner-bun.adapter.d.ts +6 -0
- package/dist/file-cleaner-bun.adapter.d.ts.map +1 -0
- package/dist/file-cleaner-bun.adapter.js +6 -0
- package/dist/file-cleaner-bun.adapter.js.map +1 -0
- package/dist/file-cleaner-noop.adapter.d.ts +6 -0
- package/dist/file-cleaner-noop.adapter.d.ts.map +1 -0
- package/dist/file-cleaner-noop.adapter.js +4 -0
- package/dist/file-cleaner-noop.adapter.js.map +1 -0
- package/dist/file-cleaner.port.d.ts +5 -0
- package/dist/file-cleaner.port.d.ts.map +1 -0
- package/dist/file-cleaner.port.js +2 -0
- package/dist/file-cleaner.port.js.map +1 -0
- package/dist/file-draft.service.js +2 -2
- package/dist/file-draft.service.js.map +1 -1
- package/dist/file-renamer-fs-forgiving.adapter.d.ts +6 -0
- package/dist/file-renamer-fs-forgiving.adapter.d.ts.map +1 -0
- package/dist/file-renamer-fs-forgiving.adapter.js +12 -0
- package/dist/file-renamer-fs-forgiving.adapter.js.map +1 -0
- package/dist/file-renamer-fs.adapter.d.ts +6 -0
- package/dist/file-renamer-fs.adapter.d.ts.map +1 -0
- package/dist/file-renamer-fs.adapter.js +9 -0
- package/dist/file-renamer-fs.adapter.js.map +1 -0
- package/dist/file-renamer-noop.adapter.d.ts +6 -0
- package/dist/file-renamer-noop.adapter.d.ts.map +1 -0
- package/dist/file-renamer-noop.adapter.js +4 -0
- package/dist/file-renamer-noop.adapter.js.map +1 -0
- package/dist/file-renamer.port.d.ts +5 -0
- package/dist/file-renamer.port.d.ts.map +1 -0
- package/dist/file-renamer.port.js +2 -0
- package/dist/file-renamer.port.js.map +1 -0
- package/dist/graceful-shutdown.service.d.ts.map +1 -1
- package/dist/graceful-shutdown.service.js +1 -3
- package/dist/graceful-shutdown.service.js.map +1 -1
- package/dist/hcaptcha-secret-key.vo.d.ts +8 -0
- package/dist/hcaptcha-secret-key.vo.d.ts.map +1 -0
- package/dist/hcaptcha-secret-key.vo.js +10 -0
- package/dist/hcaptcha-secret-key.vo.js.map +1 -0
- package/dist/hcaptcha-site-key.vo.d.ts +8 -0
- package/dist/hcaptcha-site-key.vo.d.ts.map +1 -0
- package/dist/hcaptcha-site-key.vo.js +10 -0
- package/dist/hcaptcha-site-key.vo.js.map +1 -0
- package/dist/healthcheck.service.d.ts +4 -0
- package/dist/healthcheck.service.d.ts.map +1 -1
- package/dist/healthcheck.service.js +3 -3
- package/dist/healthcheck.service.js.map +1 -1
- package/dist/http-logger.middleware.d.ts.map +1 -1
- package/dist/http-logger.middleware.js +9 -9
- package/dist/http-logger.middleware.js.map +1 -1
- package/dist/i18n.service.d.ts +10 -3
- package/dist/i18n.service.d.ts.map +1 -1
- package/dist/i18n.service.js +7 -11
- package/dist/i18n.service.js.map +1 -1
- package/dist/id-provider-deterministic.adapter.d.ts +3 -0
- package/dist/id-provider-deterministic.adapter.d.ts.map +1 -1
- package/dist/id-provider-deterministic.adapter.js +4 -1
- package/dist/id-provider-deterministic.adapter.js.map +1 -1
- package/dist/image-alpha-noop.adapter.d.ts +1 -1
- package/dist/image-alpha-sharp.adapter.d.ts +8 -1
- package/dist/image-alpha-sharp.adapter.d.ts.map +1 -1
- package/dist/image-alpha-sharp.adapter.js +6 -3
- package/dist/image-alpha-sharp.adapter.js.map +1 -1
- package/dist/image-blur-noop.adapter.d.ts +1 -1
- package/dist/image-blur-sharp.adapter.d.ts +8 -1
- package/dist/image-blur-sharp.adapter.d.ts.map +1 -1
- package/dist/image-blur-sharp.adapter.js +6 -3
- package/dist/image-blur-sharp.adapter.js.map +1 -1
- package/dist/image-compressor-noop.adapter.d.ts +1 -1
- package/dist/image-compressor-sharp.adapter.d.ts +8 -1
- package/dist/image-compressor-sharp.adapter.d.ts.map +1 -1
- package/dist/image-compressor-sharp.adapter.js +5 -2
- package/dist/image-compressor-sharp.adapter.js.map +1 -1
- package/dist/image-exif-clear-noop.adapter.d.ts +1 -1
- package/dist/image-exif-clear-sharp.adapter.d.ts +8 -1
- package/dist/image-exif-clear-sharp.adapter.d.ts.map +1 -1
- package/dist/image-exif-clear-sharp.adapter.js +5 -2
- package/dist/image-exif-clear-sharp.adapter.js.map +1 -1
- package/dist/image-formatter-sharp.adapter.d.ts +10 -1
- package/dist/image-formatter-sharp.adapter.d.ts.map +1 -1
- package/dist/image-formatter-sharp.adapter.js +8 -5
- package/dist/image-formatter-sharp.adapter.js.map +1 -1
- package/dist/image-info-noop.adapter.d.ts +2 -2
- package/dist/image-info-sharp.adapter.d.ts +2 -2
- package/dist/image-info-sharp.adapter.d.ts.map +1 -1
- package/dist/image-info-sharp.adapter.js +5 -9
- package/dist/image-info-sharp.adapter.js.map +1 -1
- package/dist/image-processor-sharp.adapter.d.ts +9 -0
- package/dist/image-processor-sharp.adapter.d.ts.map +1 -1
- package/dist/image-processor-sharp.adapter.js +8 -5
- package/dist/image-processor-sharp.adapter.js.map +1 -1
- package/dist/image-resizer-noop.adapter.d.ts +1 -1
- package/dist/image-resizer-sharp.adapter.d.ts +8 -1
- package/dist/image-resizer-sharp.adapter.d.ts.map +1 -1
- package/dist/image-resizer-sharp.adapter.js +5 -2
- package/dist/image-resizer-sharp.adapter.js.map +1 -1
- package/dist/index.d.ts +25 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -5
- package/dist/index.js.map +1 -1
- package/dist/json-file-reader-bun-forgiving.adapter.d.ts +6 -0
- package/dist/json-file-reader-bun-forgiving.adapter.d.ts.map +1 -0
- package/dist/json-file-reader-bun-forgiving.adapter.js +11 -0
- package/dist/json-file-reader-bun-forgiving.adapter.js.map +1 -0
- package/dist/json-file-reader-bun.adapter.d.ts +6 -0
- package/dist/json-file-reader-bun.adapter.d.ts.map +1 -0
- package/dist/json-file-reader-bun.adapter.js +6 -0
- package/dist/json-file-reader-bun.adapter.js.map +1 -0
- package/dist/json-file-reader-noop.adapter.d.ts +8 -0
- package/dist/json-file-reader-noop.adapter.d.ts.map +1 -0
- package/dist/json-file-reader-noop.adapter.js +10 -0
- package/dist/json-file-reader-noop.adapter.js.map +1 -0
- package/dist/json-file-reader.port.d.ts +5 -0
- package/dist/json-file-reader.port.d.ts.map +1 -0
- package/dist/json-file-reader.port.js +2 -0
- package/dist/json-file-reader.port.js.map +1 -0
- package/dist/logger-format-error.service.d.ts +1 -1
- package/dist/logger-format-error.service.d.ts.map +1 -1
- package/dist/logger-format-error.service.js +9 -9
- package/dist/logger-format-error.service.js.map +1 -1
- package/dist/logger.port.d.ts +0 -4
- package/dist/logger.port.d.ts.map +1 -1
- package/dist/mailer-smtp-with-logger.adapter.d.ts.map +1 -1
- package/dist/mailer-smtp-with-logger.adapter.js.map +1 -1
- package/dist/mailer-smtp.adapter.d.ts +2 -23
- package/dist/mailer-smtp.adapter.d.ts.map +1 -1
- package/dist/mailer-smtp.adapter.js +0 -10
- package/dist/mailer-smtp.adapter.js.map +1 -1
- package/dist/mailer.vo.d.ts +34 -0
- package/dist/mailer.vo.d.ts.map +1 -0
- package/dist/mailer.vo.js +21 -0
- package/dist/mailer.vo.js.map +1 -0
- package/dist/modules/history/event-handlers/onHistoryPopulatedEvent.d.ts.map +1 -1
- package/dist/modules/history/event-handlers/onHistoryPopulatedEvent.js.map +1 -1
- package/dist/modules/history/events/HISTORY_CLEARED_EVENT.d.ts +4 -4
- package/dist/modules/history/events/HISTORY_CLEARED_EVENT.d.ts.map +1 -1
- package/dist/modules/history/events/HISTORY_CLEARED_EVENT.js +2 -8
- package/dist/modules/history/events/HISTORY_CLEARED_EVENT.js.map +1 -1
- package/dist/modules/history/events/HISTORY_POPULATED_EVENT.d.ts +6 -6
- package/dist/modules/history/events/HISTORY_POPULATED_EVENT.d.ts.map +1 -1
- package/dist/modules/history/events/HISTORY_POPULATED_EVENT.js +2 -8
- package/dist/modules/history/events/HISTORY_POPULATED_EVENT.js.map +1 -1
- package/dist/modules/history/ports/history-writer.d.ts.map +1 -1
- package/dist/modules/history/value-objects/history-subject.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 +3 -3
- package/dist/modules/preferences/ports/user-language-resolver.d.ts.map +1 -1
- package/dist/modules/preferences/ports/user-language-resolver.js +2 -7
- package/dist/modules/preferences/ports/user-language-resolver.js.map +1 -1
- package/dist/modules/preferences/value-objects/supported-languages-set.d.ts +3 -3
- package/dist/modules/preferences/value-objects/supported-languages-set.d.ts.map +1 -1
- package/dist/modules/preferences/value-objects/supported-languages-set.js +2 -7
- package/dist/modules/preferences/value-objects/supported-languages-set.js.map +1 -1
- package/dist/pdf-generator-noop.adapter.d.ts +1 -1
- package/dist/pdf-generator-noop.adapter.d.ts.map +1 -1
- package/dist/pdf-generator-noop.adapter.js +1 -1
- package/dist/pdf-generator-noop.adapter.js.map +1 -1
- package/dist/port.vo.d.ts +4 -0
- package/dist/port.vo.d.ts.map +1 -1
- package/dist/port.vo.js +7 -1
- package/dist/port.vo.js.map +1 -1
- package/dist/prerequisites/binary.d.ts +2 -5
- package/dist/prerequisites/binary.d.ts.map +1 -1
- package/dist/prerequisites/binary.js +1 -8
- package/dist/prerequisites/binary.js.map +1 -1
- package/dist/prerequisites/dependency-vulnerabilities.js +3 -3
- package/dist/prerequisites/dependency-vulnerabilities.js.map +1 -1
- package/dist/prerequisites/directory.d.ts.map +1 -1
- package/dist/prerequisites/directory.js.map +1 -1
- package/dist/prerequisites/jobs.d.ts.map +1 -1
- package/dist/prerequisites/jobs.js +1 -2
- package/dist/prerequisites/jobs.js.map +1 -1
- package/dist/prerequisites/log-file.d.ts.map +1 -1
- package/dist/prerequisites/log-file.js.map +1 -1
- package/dist/prerequisites/mailer.d.ts.map +1 -1
- package/dist/prerequisites/mailer.js.map +1 -1
- package/dist/prerequisites/memory.js +1 -1
- package/dist/prerequisites/memory.js.map +1 -1
- package/dist/prerequisites/node.d.ts.map +1 -1
- package/dist/prerequisites/node.js.map +1 -1
- package/dist/prerequisites/port.d.ts.map +1 -1
- package/dist/prerequisites/port.js.map +1 -1
- package/dist/prerequisites/ram.d.ts.map +1 -1
- package/dist/prerequisites/ram.js +1 -1
- package/dist/prerequisites/ram.js.map +1 -1
- package/dist/prerequisites/running-user.d.ts.map +1 -1
- package/dist/prerequisites/running-user.js.map +1 -1
- package/dist/prerequisites/space.d.ts.map +1 -1
- package/dist/prerequisites/space.js +1 -1
- package/dist/prerequisites/space.js.map +1 -1
- package/dist/prerequisites/sqlite.d.ts.map +1 -1
- package/dist/prerequisites/sqlite.js +1 -1
- package/dist/prerequisites/sqlite.js.map +1 -1
- package/dist/prerequisites/ssl-certificate-expiry.d.ts +2 -2
- package/dist/prerequisites/ssl-certificate-expiry.d.ts.map +1 -1
- package/dist/prerequisites/ssl-certificate-expiry.js +4 -4
- package/dist/prerequisites/ssl-certificate-expiry.js.map +1 -1
- package/dist/prerequisites/timezone-utc.d.ts.map +1 -1
- package/dist/prerequisites/timezone-utc.js.map +1 -1
- package/dist/prerequisites/translations.d.ts +10 -3
- package/dist/prerequisites/translations.d.ts.map +1 -1
- package/dist/prerequisites/translations.js +15 -10
- package/dist/prerequisites/translations.js.map +1 -1
- package/dist/prerequisites.service.d.ts +3 -0
- package/dist/prerequisites.service.d.ts.map +1 -1
- package/dist/prerequisites.service.js +3 -3
- package/dist/prerequisites.service.js.map +1 -1
- package/dist/rate-limit-store-node-cache.adapter.d.ts +2 -2
- package/dist/rate-limit-store-node-cache.adapter.d.ts.map +1 -1
- package/dist/rate-limit-store-node-cache.adapter.js +1 -1
- package/dist/rate-limit-store-node-cache.adapter.js.map +1 -1
- package/dist/rate-limit-store.port.d.ts +1 -1
- package/dist/rate-limit-store.port.d.ts.map +1 -1
- package/dist/recaptcha-secret-key.vo.d.ts +8 -0
- package/dist/recaptcha-secret-key.vo.d.ts.map +1 -0
- package/dist/recaptcha-secret-key.vo.js +10 -0
- package/dist/recaptcha-secret-key.vo.js.map +1 -0
- package/dist/recaptcha-site-key.vo.d.ts +8 -0
- package/dist/recaptcha-site-key.vo.d.ts.map +1 -0
- package/dist/recaptcha-site-key.vo.js +10 -0
- package/dist/recaptcha-site-key.vo.js.map +1 -0
- package/dist/redactor-encrypt.adapter.js +2 -2
- package/dist/redactor-encrypt.adapter.js.map +1 -1
- package/dist/redactor-mask.adapter.d.ts.map +1 -1
- package/dist/redactor-mask.adapter.js +0 -3
- package/dist/redactor-mask.adapter.js.map +1 -1
- package/dist/remote-file-storage-disk.adapter.d.ts +9 -2
- package/dist/remote-file-storage-disk.adapter.d.ts.map +1 -1
- package/dist/remote-file-storage-disk.adapter.js +7 -9
- package/dist/remote-file-storage-disk.adapter.js.map +1 -1
- package/dist/safe-parse-body.service.d.ts.map +1 -1
- package/dist/safe-parse-body.service.js +1 -1
- package/dist/safe-parse-body.service.js.map +1 -1
- package/dist/setup.service.d.ts +3 -1
- package/dist/setup.service.d.ts.map +1 -1
- package/dist/setup.service.js +2 -2
- package/dist/setup.service.js.map +1 -1
- package/dist/shield-api-key.middleware.d.ts.map +1 -1
- package/dist/shield-api-key.middleware.js +1 -2
- package/dist/shield-api-key.middleware.js.map +1 -1
- package/dist/shield-auth.middleware.d.ts.map +1 -1
- package/dist/shield-auth.middleware.js +1 -3
- package/dist/shield-auth.middleware.js.map +1 -1
- package/dist/shield-captcha-hcaptcha-local.adapter.d.ts +2 -2
- package/dist/shield-captcha-hcaptcha-local.adapter.d.ts.map +1 -1
- package/dist/shield-captcha-hcaptcha-local.adapter.js +2 -2
- package/dist/shield-captcha-hcaptcha-local.adapter.js.map +1 -1
- package/dist/shield-captcha-hcaptcha.adapter.d.ts +2 -8
- package/dist/shield-captcha-hcaptcha.adapter.d.ts.map +1 -1
- package/dist/shield-captcha-hcaptcha.adapter.js +2 -6
- package/dist/shield-captcha-hcaptcha.adapter.js.map +1 -1
- package/dist/shield-captcha-noop.adapter.d.ts +1 -1
- package/dist/shield-captcha-noop.adapter.d.ts.map +1 -1
- package/dist/shield-captcha-noop.adapter.js +1 -1
- package/dist/shield-captcha-noop.adapter.js.map +1 -1
- package/dist/shield-captcha-recaptcha.adapter.d.ts +3 -7
- package/dist/shield-captcha-recaptcha.adapter.d.ts.map +1 -1
- package/dist/shield-captcha-recaptcha.adapter.js +12 -17
- package/dist/shield-captcha-recaptcha.adapter.js.map +1 -1
- package/dist/shield-rate-limit.middleware.d.ts +2 -2
- package/dist/shield-rate-limit.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/temporary-file-absolute.adapter.d.ts +11 -3
- package/dist/temporary-file-absolute.adapter.d.ts.map +1 -1
- package/dist/temporary-file-absolute.adapter.js +11 -14
- 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/temporary-file.port.d.ts +1 -1
- package/dist/temporary-file.port.d.ts.map +1 -1
- package/dist/time-zone-offset.middleware.d.ts.map +1 -1
- package/dist/time-zone-offset.middleware.js +2 -2
- package/dist/time-zone-offset.middleware.js.map +1 -1
- package/dist/translations.service.d.ts +8 -1
- package/dist/translations.service.d.ts.map +1 -1
- package/dist/translations.service.js +2 -2
- package/dist/translations.service.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/uptime.service.js +3 -3
- package/dist/uptime.service.js.map +1 -1
- package/dist/uuid.vo.d.ts +3 -0
- package/dist/uuid.vo.d.ts.map +1 -1
- package/dist/uuid.vo.js +2 -1
- package/dist/uuid.vo.js.map +1 -1
- package/dist/visitor-id-hash-hono.adapter.d.ts +1 -1
- package/dist/visitor-id-hash-hono.adapter.d.ts.map +1 -1
- package/dist/visitor-id-hash-hono.adapter.js +4 -4
- package/dist/visitor-id-hash-hono.adapter.js.map +1 -1
- package/dist/visitor-id-hash.adapter.d.ts +1 -1
- package/dist/visitor-id-hash.adapter.d.ts.map +1 -1
- package/dist/visitor-id-hash.adapter.js +3 -3
- package/dist/visitor-id-hash.adapter.js.map +1 -1
- package/dist/weak-etag-extractor.middleware.js +2 -2
- package/dist/weak-etag-extractor.middleware.js.map +1 -1
- package/package.json +7 -7
- package/readme.md +20 -5
- package/src/antivirus-clamav.adapter.ts +7 -12
- package/src/antivirus.port.ts +1 -13
- package/src/api-version.middleware.ts +4 -4
- package/src/basic-auth-password.vo.ts +15 -0
- package/src/basic-auth-username.vo.ts +15 -0
- package/src/basic-auth.service.ts +3 -22
- package/src/better-auth-logger.service.ts +4 -3
- package/src/binary.vo.ts +20 -0
- package/src/build-info-repository.service.ts +5 -7
- package/src/cache-file.service.ts +2 -1
- package/src/cache-response.middleware.ts +3 -0
- package/src/certificate-inspector-tls.adapter.ts +7 -1
- package/src/client-from-hono.adapter.ts +1 -1
- package/src/clock-system.adapter.ts +2 -2
- package/src/clock.port.ts +1 -0
- package/src/context.middleware.ts +1 -0
- package/src/correlation-id.vo.ts +1 -0
- package/src/correlation-storage.service.ts +4 -1
- package/src/env-validator.service.ts +2 -2
- package/src/etag-extractor.middleware.ts +2 -2
- package/src/event-store-like.types.ts +1 -0
- package/src/event-stream.vo.ts +9 -4
- package/src/file-cleaner-bun-forgiving.adapter.ts +10 -0
- package/src/file-cleaner-bun.adapter.ts +8 -0
- package/src/file-cleaner-noop.adapter.ts +6 -0
- package/src/file-cleaner.port.ts +5 -0
- package/src/file-draft.service.ts +2 -2
- package/src/file-renamer-fs-forgiving.adapter.ts +17 -0
- package/src/file-renamer-fs.adapter.ts +15 -0
- package/src/file-renamer-noop.adapter.ts +9 -0
- package/src/file-renamer.port.ts +8 -0
- package/src/graceful-shutdown.service.ts +1 -3
- package/src/hcaptcha-secret-key.vo.ts +13 -0
- package/src/hcaptcha-site-key.vo.ts +13 -0
- package/src/healthcheck.service.ts +6 -4
- package/src/http-logger.middleware.ts +9 -10
- package/src/i18n.service.ts +14 -11
- package/src/id-provider-deterministic.adapter.ts +5 -1
- package/src/image-alpha-sharp.adapter.ts +7 -4
- package/src/image-blur-sharp.adapter.ts +7 -4
- package/src/image-compressor-sharp.adapter.ts +6 -2
- package/src/image-exif-clear-sharp.adapter.ts +6 -2
- package/src/image-formatter-sharp.adapter.ts +10 -5
- package/src/image-info-sharp.adapter.ts +5 -11
- package/src/image-processor-sharp.adapter.ts +10 -5
- package/src/image-resizer-sharp.adapter.ts +6 -3
- package/src/index.ts +25 -5
- package/src/json-file-reader-bun-forgiving.adapter.ts +12 -0
- package/src/json-file-reader-bun.adapter.ts +8 -0
- package/src/json-file-reader-noop.adapter.ts +10 -0
- package/src/json-file-reader.port.ts +5 -0
- package/src/logger-format-error.service.ts +10 -9
- package/src/logger.port.ts +0 -4
- package/src/mailer-smtp-with-logger.adapter.ts +2 -0
- package/src/mailer-smtp.adapter.ts +2 -31
- package/src/mailer.vo.ts +38 -0
- package/src/modules/history/event-handlers/onHistoryPopulatedEvent.ts +1 -0
- package/src/modules/history/events/HISTORY_CLEARED_EVENT.ts +2 -8
- package/src/modules/history/events/HISTORY_POPULATED_EVENT.ts +2 -8
- package/src/modules/history/ports/history-writer.ts +1 -0
- package/src/modules/history/value-objects/history-subject.ts +1 -0
- package/src/modules/preferences/open-host-queries/user-language.ts +1 -0
- package/src/modules/preferences/ports/user-language-resolver.ts +2 -7
- package/src/modules/preferences/value-objects/supported-languages-set.ts +2 -8
- package/src/pdf-generator-noop.adapter.ts +1 -1
- package/src/port.vo.ts +9 -1
- package/src/prerequisites/binary.ts +4 -14
- package/src/prerequisites/dependency-vulnerabilities.ts +3 -3
- package/src/prerequisites/directory.ts +1 -0
- package/src/prerequisites/jobs.ts +2 -4
- package/src/prerequisites/log-file.ts +1 -0
- package/src/prerequisites/mailer.ts +1 -0
- package/src/prerequisites/memory.ts +1 -1
- package/src/prerequisites/node.ts +1 -0
- package/src/prerequisites/port.ts +1 -0
- package/src/prerequisites/ram.ts +2 -1
- package/src/prerequisites/running-user.ts +1 -0
- package/src/prerequisites/space.ts +2 -1
- package/src/prerequisites/sqlite.ts +1 -2
- package/src/prerequisites/ssl-certificate-expiry.ts +5 -5
- package/src/prerequisites/timezone-utc.ts +1 -0
- package/src/prerequisites/translations.ts +29 -17
- package/src/prerequisites.service.ts +4 -4
- package/src/rate-limit-store-node-cache.adapter.ts +2 -2
- package/src/rate-limit-store.port.ts +1 -1
- package/src/recaptcha-secret-key.vo.ts +13 -0
- package/src/recaptcha-site-key.vo.ts +13 -0
- package/src/redactor-encrypt.adapter.ts +2 -2
- package/src/redactor-mask.adapter.ts +0 -3
- package/src/remote-file-storage-disk.adapter.ts +13 -14
- package/src/safe-parse-body.service.ts +2 -1
- package/src/setup.service.ts +4 -2
- package/src/shield-api-key.middleware.ts +1 -3
- package/src/shield-auth.middleware.ts +5 -3
- package/src/shield-captcha-hcaptcha-local.adapter.ts +4 -3
- package/src/shield-captcha-hcaptcha.adapter.ts +5 -13
- package/src/shield-captcha-noop.adapter.ts +1 -1
- package/src/shield-captcha-recaptcha.adapter.ts +15 -25
- package/src/shield-rate-limit.middleware.ts +2 -2
- package/src/slower.middleware.ts +1 -0
- package/src/temporary-file-absolute.adapter.ts +16 -14
- package/src/temporary-file-noop.adapter.ts +1 -1
- package/src/temporary-file.port.ts +2 -1
- package/src/time-zone-offset.middleware.ts +2 -5
- package/src/translations.service.ts +7 -4
- package/src/uptime.service.ts +3 -3
- package/src/uuid.vo.ts +4 -1
- package/src/visitor-id-hash-hono.adapter.ts +5 -5
- package/src/visitor-id-hash.adapter.ts +3 -3
- package/src/weak-etag-extractor.middleware.ts +2 -2
- package/dist/encryption.service.d.ts +0 -25
- package/dist/encryption.service.d.ts.map +0 -1
- package/dist/encryption.service.js +0 -35
- package/dist/encryption.service.js.map +0 -1
- package/dist/gzip.service.d.ts +0 -13
- package/dist/gzip.service.d.ts.map +0 -1
- package/dist/gzip.service.js +0 -18
- package/dist/gzip.service.js.map +0 -1
- package/dist/open-graph.service.d.ts +0 -104
- package/dist/open-graph.service.d.ts.map +0 -1
- package/dist/open-graph.service.js +0 -159
- package/dist/open-graph.service.js.map +0 -1
- package/dist/sitemap.service.d.ts +0 -28
- package/dist/sitemap.service.d.ts.map +0 -1
- package/dist/sitemap.service.js +0 -57
- package/dist/sitemap.service.js.map +0 -1
- package/dist/url-wo-trailing-slash.vo.d.ts +0 -4
- package/dist/url-wo-trailing-slash.vo.d.ts.map +0 -1
- package/dist/url-wo-trailing-slash.vo.js +0 -8
- package/dist/url-wo-trailing-slash.vo.js.map +0 -1
- package/src/encryption.service.ts +0 -45
- package/src/gzip.service.ts +0 -23
- package/src/open-graph.service.ts +0 -242
- package/src/sitemap.service.ts +0 -91
- package/src/url-wo-trailing-slash.vo.ts +0 -9
package/src/index.ts
CHANGED
|
@@ -4,7 +4,10 @@ export * from "./antivirus-clamav.adapter";
|
|
|
4
4
|
export * from "./antivirus-noop.adapter";
|
|
5
5
|
export * from "./api-version.middleware";
|
|
6
6
|
export * from "./basic-auth.service";
|
|
7
|
+
export * from "./basic-auth-password.vo";
|
|
8
|
+
export * from "./basic-auth-username.vo";
|
|
7
9
|
export * from "./better-auth-logger.service";
|
|
10
|
+
export * from "./binary.vo";
|
|
8
11
|
export * from "./build-info-repository.service";
|
|
9
12
|
export * from "./cache-file.service";
|
|
10
13
|
export * from "./cache-resolver.service";
|
|
@@ -27,7 +30,6 @@ export * from "./csv-stringifier.adapter";
|
|
|
27
30
|
export * from "./csv-stringifier.port";
|
|
28
31
|
export * from "./decorators.service";
|
|
29
32
|
export * from "./dispatching-event-store";
|
|
30
|
-
export * from "./encryption.service";
|
|
31
33
|
export * from "./env-validator.service";
|
|
32
34
|
export * from "./etag-extractor.middleware";
|
|
33
35
|
export * from "./event.types";
|
|
@@ -38,14 +40,27 @@ export * from "./event-logger.service";
|
|
|
38
40
|
export * from "./event-store";
|
|
39
41
|
export * from "./event-store-like.types";
|
|
40
42
|
export * from "./event-stream.vo";
|
|
43
|
+
export * from "./file-cleaner.port";
|
|
44
|
+
export * from "./file-cleaner-bun.adapter";
|
|
45
|
+
export * from "./file-cleaner-bun-forgiving.adapter";
|
|
46
|
+
export * from "./file-cleaner-noop.adapter";
|
|
41
47
|
export * from "./file-draft.service";
|
|
42
48
|
export * from "./file-draft-zip.service";
|
|
43
49
|
export * from "./file-hash.port";
|
|
44
50
|
export * from "./file-hash-noop.adapter";
|
|
45
51
|
export * from "./file-hash-sha256-bun.adapter";
|
|
52
|
+
export * from "./file-renamer.port";
|
|
53
|
+
export * from "./file-renamer.port";
|
|
54
|
+
export * from "./file-renamer-fs.adapter";
|
|
55
|
+
export * from "./file-renamer-fs.adapter";
|
|
56
|
+
export * from "./file-renamer-fs-forgiving.adapter";
|
|
57
|
+
export * from "./file-renamer-fs-forgiving.adapter";
|
|
58
|
+
export * from "./file-renamer-noop.adapter";
|
|
59
|
+
export * from "./file-renamer-noop.adapter";
|
|
46
60
|
export * from "./file-uploader.middleware";
|
|
47
61
|
export * from "./graceful-shutdown.service";
|
|
48
|
-
export * from "./
|
|
62
|
+
export * from "./hcaptcha-secret-key.vo";
|
|
63
|
+
export * from "./hcaptcha-site-key.vo";
|
|
49
64
|
export * from "./healthcheck.service";
|
|
50
65
|
export * from "./http-logger.middleware";
|
|
51
66
|
export * from "./i18n.service";
|
|
@@ -79,6 +94,10 @@ export * from "./image-resizer-sharp.adapter";
|
|
|
79
94
|
export * from "./invariant.service";
|
|
80
95
|
export * from "./invariant-error-handler.service";
|
|
81
96
|
export * from "./jobs.service";
|
|
97
|
+
export * from "./json-file-reader.port";
|
|
98
|
+
export * from "./json-file-reader-bun.adapter";
|
|
99
|
+
export * from "./json-file-reader-bun-forgiving.adapter";
|
|
100
|
+
export * from "./json-file-reader-noop.adapter";
|
|
82
101
|
export * from "./logger.port";
|
|
83
102
|
export * from "./logger-format-error.service";
|
|
84
103
|
export * from "./logger-noop.adapter";
|
|
@@ -86,6 +105,8 @@ export * from "./logger-winston.adapter";
|
|
|
86
105
|
export * from "./logger-winston-local.adapter";
|
|
87
106
|
export * from "./logger-winston-production.adapter";
|
|
88
107
|
export * from "./mailer.port";
|
|
108
|
+
export * from "./mailer.vo";
|
|
109
|
+
export * from "./mailer.vo";
|
|
89
110
|
export * from "./mailer-noop.adapter";
|
|
90
111
|
export * from "./mailer-smtp.adapter";
|
|
91
112
|
export * from "./mailer-smtp-with-logger.adapter";
|
|
@@ -93,7 +114,6 @@ export * from "./memory-consumption.service";
|
|
|
93
114
|
export * as History from "./modules/history";
|
|
94
115
|
export * as Preferences from "./modules/preferences";
|
|
95
116
|
export * from "./node-env.vo";
|
|
96
|
-
export * from "./open-graph.service";
|
|
97
117
|
export * from "./pdf-generator.port";
|
|
98
118
|
export * from "./pdf-generator-noop.adapter";
|
|
99
119
|
export * from "./port.vo";
|
|
@@ -101,6 +121,8 @@ export * from "./prerequisites/index";
|
|
|
101
121
|
export * from "./prerequisites.service";
|
|
102
122
|
export * from "./rate-limit-store.port";
|
|
103
123
|
export * from "./rate-limit-store-node-cache.adapter";
|
|
124
|
+
export * from "./recaptcha-secret-key.vo";
|
|
125
|
+
export * from "./recaptcha-site-key.vo";
|
|
104
126
|
export * from "./redactor.port";
|
|
105
127
|
export * from "./redactor-compact-array.adapter";
|
|
106
128
|
export * from "./redactor-compact-object.adapter";
|
|
@@ -122,7 +144,6 @@ export * from "./shield-captcha-noop.adapter";
|
|
|
122
144
|
export * from "./shield-captcha-recaptcha.adapter";
|
|
123
145
|
export * from "./shield-rate-limit.middleware";
|
|
124
146
|
export * from "./simulated-error.middleware";
|
|
125
|
-
export * from "./sitemap.service";
|
|
126
147
|
export * from "./slower.middleware";
|
|
127
148
|
export * from "./temporary-file.port";
|
|
128
149
|
export * from "./temporary-file-absolute.adapter";
|
|
@@ -131,7 +152,6 @@ export * from "./time-zone-offset.middleware";
|
|
|
131
152
|
export * from "./to-event-map.types";
|
|
132
153
|
export * from "./translations.service";
|
|
133
154
|
export * from "./uptime.service";
|
|
134
|
-
export * from "./url-wo-trailing-slash.vo";
|
|
135
155
|
export * from "./uuid.vo";
|
|
136
156
|
export * from "./visitor-id.port";
|
|
137
157
|
export * from "./visitor-id-hash.adapter";
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type * as tools from "@bgord/tools";
|
|
2
|
+
import type { JsonFileReaderPort } from "./json-file-reader.port";
|
|
3
|
+
|
|
4
|
+
export class JsonFileReaderBunForgivingAdapter implements JsonFileReaderPort {
|
|
5
|
+
async read(path: tools.FilePathRelative | tools.FilePathAbsolute | string): Promise<Record<string, any>> {
|
|
6
|
+
try {
|
|
7
|
+
return Bun.file(typeof path === "string" ? path : path.get()).json();
|
|
8
|
+
} catch {
|
|
9
|
+
return {};
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type * as tools from "@bgord/tools";
|
|
2
|
+
import type { JsonFileReaderPort } from "./json-file-reader.port";
|
|
3
|
+
|
|
4
|
+
export class JsonFileReaderBunAdapter implements JsonFileReaderPort {
|
|
5
|
+
async read(path: tools.FilePathRelative | tools.FilePathAbsolute | string): Promise<Record<string, any>> {
|
|
6
|
+
return Bun.file(typeof path === "string" ? path : path.get()).json();
|
|
7
|
+
}
|
|
8
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type * as tools from "@bgord/tools";
|
|
2
|
+
import type { JsonFileReaderPort } from "./json-file-reader.port";
|
|
3
|
+
|
|
4
|
+
export class JsonFileReaderNoopAdapter implements JsonFileReaderPort {
|
|
5
|
+
constructor(private readonly json: Record<string, any>) {}
|
|
6
|
+
|
|
7
|
+
async read(_path: tools.FilePathRelative | tools.FilePathAbsolute | string): Promise<Record<string, any>> {
|
|
8
|
+
return this.json;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import type { ErrorInfo } from "./logger.port";
|
|
2
2
|
|
|
3
|
-
export function formatError(
|
|
4
|
-
if (
|
|
5
|
-
const code = (
|
|
6
|
-
const cause =
|
|
3
|
+
export function formatError(error: unknown): ErrorInfo {
|
|
4
|
+
if (error instanceof Error) {
|
|
5
|
+
const code = (error as any)?.code;
|
|
6
|
+
const cause = error?.cause;
|
|
7
|
+
|
|
7
8
|
return {
|
|
8
|
-
name:
|
|
9
|
-
message:
|
|
10
|
-
stack:
|
|
11
|
-
code: code
|
|
9
|
+
name: error.name ?? "Error",
|
|
10
|
+
message: error.message ?? "Unknown error",
|
|
11
|
+
stack: error.stack,
|
|
12
|
+
code: code ?? undefined,
|
|
12
13
|
cause:
|
|
13
14
|
cause instanceof Error
|
|
14
15
|
? { name: cause.name, message: cause.message }
|
|
@@ -19,6 +20,6 @@ export function formatError(err: unknown): ErrorInfo {
|
|
|
19
20
|
}
|
|
20
21
|
return {
|
|
21
22
|
name: "NonErrorThrown",
|
|
22
|
-
message: typeof
|
|
23
|
+
message: typeof error === "string" ? error : String(error),
|
|
23
24
|
};
|
|
24
25
|
}
|
package/src/logger.port.ts
CHANGED
|
@@ -24,16 +24,12 @@ export enum LogLevelEnum {
|
|
|
24
24
|
export const LogLevel = z.enum(LogLevelEnum);
|
|
25
25
|
|
|
26
26
|
export type LogCoreType = {
|
|
27
|
-
/** ISO-8601 UTC string with milliseconds, e.g. 2025-08-23T18:42:31.123Z */
|
|
28
27
|
timestamp: string;
|
|
29
28
|
level: LogLevelEnum;
|
|
30
29
|
app: LogAppType;
|
|
31
30
|
environment: NodeEnvironmentEnum;
|
|
32
|
-
/** Bounded context / subsystem, e.g., "http" | "emotions" | "publishing" | "infra" */
|
|
33
31
|
component: string;
|
|
34
|
-
/** Machine-friendly operation name, e.g., "weekly_review_generate" */
|
|
35
32
|
operation: string;
|
|
36
|
-
/** Short human-readable sentence */
|
|
37
33
|
message: string;
|
|
38
34
|
correlationId?: CorrelationIdType;
|
|
39
35
|
metadata?: Record<string, any>;
|
|
@@ -17,9 +17,11 @@ export class MailerSmtpWithLoggerAdapter implements MailerPort {
|
|
|
17
17
|
this.config.logger.info({ message: "Mailer attempt", metadata: message, ...this.base });
|
|
18
18
|
const result = await this.config.smtpMailer.send(message);
|
|
19
19
|
this.config.logger.info({ message: "Mailer success", metadata: { message, result }, ...this.base });
|
|
20
|
+
|
|
20
21
|
return result;
|
|
21
22
|
} catch (error) {
|
|
22
23
|
this.config.logger.error({ message: "Mailer error", error: formatError(error), ...this.base });
|
|
24
|
+
|
|
23
25
|
throw error;
|
|
24
26
|
}
|
|
25
27
|
}
|
|
@@ -1,19 +1,6 @@
|
|
|
1
1
|
import nodemailer, { type SendMailOptions } from "nodemailer";
|
|
2
|
-
import { z } from "zod/v4";
|
|
3
2
|
import type { MailerPort } from "./mailer.port";
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
export const SmtpHost = z.string().trim().min(1);
|
|
7
|
-
export type SmtpHostType = z.infer<typeof SmtpHost>;
|
|
8
|
-
|
|
9
|
-
export const SmtpPort = Port;
|
|
10
|
-
export type SmtpPortType = z.infer<typeof SmtpPort>;
|
|
11
|
-
|
|
12
|
-
export const SmtpUser = z.string().trim().min(1);
|
|
13
|
-
export type SmtpUserType = z.infer<typeof SmtpUser>;
|
|
14
|
-
|
|
15
|
-
export const SmtpPass = z.string().trim().min(1);
|
|
16
|
-
export type SmtpPassType = z.infer<typeof SmtpPass>;
|
|
3
|
+
import type { SmtpHostType, SmtpPassType, SmtpPortType, SmtpUserType } from "./mailer.vo";
|
|
17
4
|
|
|
18
5
|
type MailerConfigType = {
|
|
19
6
|
SMTP_HOST: SmtpHostType;
|
|
@@ -22,22 +9,6 @@ type MailerConfigType = {
|
|
|
22
9
|
SMTP_PASS: SmtpPassType;
|
|
23
10
|
};
|
|
24
11
|
|
|
25
|
-
type MailerSendOptionsType = SendMailOptions;
|
|
26
|
-
|
|
27
|
-
export const EmailSubject = z.string().min(1).max(128);
|
|
28
|
-
export type EmailSubjectType = z.infer<typeof EmailSubject>;
|
|
29
|
-
|
|
30
|
-
export const EmailContentHtml = z.string().min(1).max(10_000);
|
|
31
|
-
export type EmailContentHtmlType = z.infer<typeof EmailContentHtml>;
|
|
32
|
-
|
|
33
|
-
export const EmailFrom = z.email();
|
|
34
|
-
export type EmailFromType = z.infer<typeof EmailFrom>;
|
|
35
|
-
|
|
36
|
-
export const EmailTo = z.email();
|
|
37
|
-
export type EmailToType = z.infer<typeof EmailTo>;
|
|
38
|
-
|
|
39
|
-
export type EmailAttachmentType = { filename: string; path: string };
|
|
40
|
-
|
|
41
12
|
export class MailerSmtpAdapter implements MailerPort {
|
|
42
13
|
private readonly transport: nodemailer.Transporter;
|
|
43
14
|
|
|
@@ -49,7 +20,7 @@ export class MailerSmtpAdapter implements MailerPort {
|
|
|
49
20
|
});
|
|
50
21
|
}
|
|
51
22
|
|
|
52
|
-
async send(message:
|
|
23
|
+
async send(message: SendMailOptions): Promise<unknown> {
|
|
53
24
|
return this.transport.sendMail(message);
|
|
54
25
|
}
|
|
55
26
|
|
package/src/mailer.vo.ts
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { z } from "zod/v4";
|
|
2
|
+
import { Port } from "./port.vo";
|
|
3
|
+
|
|
4
|
+
export const SmtpHost = z.string().min(1);
|
|
5
|
+
export type SmtpHostType = z.infer<typeof SmtpHost>;
|
|
6
|
+
|
|
7
|
+
export const SmtpPort = Port;
|
|
8
|
+
export type SmtpPortType = z.infer<typeof SmtpPort>;
|
|
9
|
+
|
|
10
|
+
export const SmtpUser = z.string().min(1);
|
|
11
|
+
export type SmtpUserType = z.infer<typeof SmtpUser>;
|
|
12
|
+
|
|
13
|
+
export const SmtpPass = z.string().min(1);
|
|
14
|
+
export type SmtpPassType = z.infer<typeof SmtpPass>;
|
|
15
|
+
|
|
16
|
+
export const EmailSubjectError = { Invalid: "email.subject.invalid" } as const;
|
|
17
|
+
export const EmailSubject = z
|
|
18
|
+
.string(EmailSubjectError.Invalid)
|
|
19
|
+
.min(1, EmailSubjectError.Invalid)
|
|
20
|
+
.max(128, EmailSubjectError.Invalid);
|
|
21
|
+
export type EmailSubjectType = z.infer<typeof EmailSubject>;
|
|
22
|
+
|
|
23
|
+
export const EmailContentHtmlError = { Invalid: "email.content.html.invalid" } as const;
|
|
24
|
+
export const EmailContentHtml = z
|
|
25
|
+
.string(EmailContentHtmlError.Invalid)
|
|
26
|
+
.min(1, EmailContentHtmlError.Invalid)
|
|
27
|
+
.max(10_000, EmailContentHtmlError.Invalid);
|
|
28
|
+
export type EmailContentHtmlType = z.infer<typeof EmailContentHtml>;
|
|
29
|
+
|
|
30
|
+
export const EmailFromError = { Invalid: "email.from.invalid" } as const;
|
|
31
|
+
export const EmailFrom = z.email(EmailFromError.Invalid);
|
|
32
|
+
export type EmailFromType = z.infer<typeof EmailFrom>;
|
|
33
|
+
|
|
34
|
+
export const EmailToError = { Invalid: "email.to.invalid" } as const;
|
|
35
|
+
export const EmailTo = z.email(EmailToError.Invalid);
|
|
36
|
+
export type EmailToType = z.infer<typeof EmailTo>;
|
|
37
|
+
|
|
38
|
+
export type EmailAttachmentType = { filename: string; path: string };
|
|
@@ -5,5 +5,6 @@ import * as VO from "../value-objects";
|
|
|
5
5
|
export const onHistoryPopulatedEvent =
|
|
6
6
|
(projection: Ports.HistoryProjectionPort) => async (event: Events.HistoryPopulatedEventType) => {
|
|
7
7
|
const data = VO.HistoryParsed.parse(event.payload);
|
|
8
|
+
|
|
8
9
|
await projection.append(data, event.createdAt);
|
|
9
10
|
};
|
|
@@ -1,18 +1,12 @@
|
|
|
1
|
-
import * as tools from "@bgord/tools";
|
|
2
1
|
import { z } from "zod/v4";
|
|
3
|
-
import {
|
|
2
|
+
import { EventEnvelopeSchema } from "../../../event-envelope";
|
|
4
3
|
import * as VO from "../value-objects";
|
|
5
4
|
|
|
6
5
|
export const HISTORY_CLEARED_EVENT = "HISTORY_CLEARED_EVENT";
|
|
7
6
|
|
|
8
7
|
export const HistoryClearedEvent = z.object({
|
|
9
|
-
|
|
10
|
-
correlationId: UUID,
|
|
11
|
-
createdAt: tools.Timestamp,
|
|
12
|
-
stream: z.string().min(1),
|
|
8
|
+
...EventEnvelopeSchema,
|
|
13
9
|
name: z.literal(HISTORY_CLEARED_EVENT),
|
|
14
|
-
version: z.literal(1),
|
|
15
|
-
revision: tools.RevisionValue.optional(),
|
|
16
10
|
payload: z.object({ subject: VO.HistorySubject }),
|
|
17
11
|
});
|
|
18
12
|
|
|
@@ -1,18 +1,12 @@
|
|
|
1
|
-
import * as tools from "@bgord/tools";
|
|
2
1
|
import { z } from "zod/v4";
|
|
3
|
-
import {
|
|
2
|
+
import { EventEnvelopeSchema } from "../../../event-envelope";
|
|
4
3
|
import * as VO from "../value-objects";
|
|
5
4
|
|
|
6
5
|
export const HISTORY_POPULATED_EVENT = "HISTORY_POPULATED_EVENT";
|
|
7
6
|
|
|
8
7
|
export const HistoryPopulatedEvent = z.object({
|
|
9
|
-
|
|
10
|
-
correlationId: UUID,
|
|
11
|
-
createdAt: tools.Timestamp,
|
|
12
|
-
stream: z.string().min(1),
|
|
8
|
+
...EventEnvelopeSchema,
|
|
13
9
|
name: z.literal(HISTORY_POPULATED_EVENT),
|
|
14
|
-
version: z.literal(1),
|
|
15
|
-
revision: tools.RevisionValue.optional(),
|
|
16
10
|
payload: z.object({
|
|
17
11
|
id: VO.HistoryId,
|
|
18
12
|
operation: VO.HistoryOperation,
|
|
@@ -17,6 +17,7 @@ export class UserLanguageAdapter<L extends readonly tools.LanguageType[]> implem
|
|
|
17
17
|
async get(userId: UUIDType): Promise<L[number]> {
|
|
18
18
|
const stored = await this.query.get(userId);
|
|
19
19
|
const candidate = await this.resolver.resolve(stored);
|
|
20
|
+
|
|
20
21
|
return this.validator.ensure(candidate);
|
|
21
22
|
}
|
|
22
23
|
}
|
|
@@ -4,16 +4,11 @@ export interface UserLanguageResolverPort {
|
|
|
4
4
|
resolve(input: tools.LanguageType | null): tools.LanguageType | Promise<tools.LanguageType>;
|
|
5
5
|
}
|
|
6
6
|
|
|
7
|
-
export
|
|
8
|
-
constructor() {
|
|
9
|
-
super();
|
|
10
|
-
Object.setPrototypeOf(this, UserLanguagePreferenceMissingError.prototype);
|
|
11
|
-
}
|
|
12
|
-
}
|
|
7
|
+
export const UserLanguagePreferenceError = { Missing: "user.language.preference.missing" } as const;
|
|
13
8
|
|
|
14
9
|
export class UserLanguageResolverThrowIfMissing implements UserLanguageResolverPort {
|
|
15
10
|
resolve(stored: tools.LanguageType | null) {
|
|
16
|
-
if (stored == null) throw new
|
|
11
|
+
if (stored == null) throw new Error(UserLanguagePreferenceError.Missing);
|
|
17
12
|
return stored;
|
|
18
13
|
}
|
|
19
14
|
}
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
import type * as tools from "@bgord/tools";
|
|
2
2
|
|
|
3
|
-
export
|
|
4
|
-
constructor() {
|
|
5
|
-
super();
|
|
6
|
-
Object.setPrototypeOf(this, UnsupportedLanguageError.prototype);
|
|
7
|
-
}
|
|
8
|
-
}
|
|
3
|
+
export const SupportedLanguagesSetError = { Missing: "supported.languages.set.error.missing" } as const;
|
|
9
4
|
|
|
10
5
|
export class SupportedLanguagesSet<L extends readonly tools.LanguageType[]> {
|
|
11
6
|
private readonly index: Set<tools.LanguageType>;
|
|
@@ -16,8 +11,7 @@ export class SupportedLanguagesSet<L extends readonly tools.LanguageType[]> {
|
|
|
16
11
|
}
|
|
17
12
|
|
|
18
13
|
ensure(language: tools.LanguageType): L[number] {
|
|
19
|
-
if (!this.index.has(language)) throw new
|
|
20
|
-
|
|
14
|
+
if (!this.index.has(language)) throw new Error(SupportedLanguagesSetError.Missing);
|
|
21
15
|
return language as L[number];
|
|
22
16
|
}
|
|
23
17
|
}
|
|
@@ -4,7 +4,7 @@ import type { PdfGeneratorPort, PdfGeneratorTemplateType } from "./pdf-generator
|
|
|
4
4
|
export const PLACEHOLDER_PDF_BASE64 =
|
|
5
5
|
"JVBERi0xLjQKMSAwIG9iago8PC9UeXBlIC9DYXRhbG9nCi9QYWdlcyAyIDAgUgo+PgplbmRvYmoK MiAwIG9iago8PC9UeXBlIC9QYWdlcwovS2lkcyBbMyAwIFJdCi9Db3VudCAxCj4+CmVuZG9iagoz IDAgb2JqCjw8L1R5cGUgL1BhZ2UKL1BhcmVudCAyIDAgUgovTWVkaWFCb3ggWzAgMCA1OTUgODQy XQovQ29udGVudHMgNSAwIFIKL1Jlc291cmNlcyA8PC9Qcm9jU2V0IFsvUERGIC9UZXh0XQovRm9u dCA8PC9GMSA0IDAgUj4+Cj4+Cj4+CmVuZG9iago0IDAgb2JqCjw8L1R5cGUgL0ZvbnQKL1N1YnR5 cGUgL1R5cGUxCi9OYW1lIC9GMQovQmFzZUZvbnQgL0hlbHZldGljYQovRW5jb2RpbmcgL01hY1Jv bWFuRW5jb2RpbmcKPj4KZW5kb2JqCjUgMCBvYmoKPDwvTGVuZ3RoIDUzCj4+CnN0cmVhbQpCVAov RjEgMjAgVGYKMjIwIDQwMCBUZAooRHVtbXkgUERGKSBUagpFVAplbmRzdHJlYW0KZW5kb2JqCnhy ZWYKMCA2CjAwMDAwMDAwMDAgNjU1MzUgZgowMDAwMDAwMDA5IDAwMDAwIG4KMDAwMDAwMDA2MyAw MDAwMCBuCjAwMDAwMDAxMjQgMDAwMDAgbgowMDAwMDAwMjc3IDAwMDAwIG4KMDAwMDAwMDM5MiAw MDAwMCBuCnRyYWlsZXIKPDwvU2l6ZSA2Ci9Sb290IDEgMCBSCj4+CnN0YXJ0eHJlZgo0OTUKJSVF T0YK";
|
|
6
6
|
|
|
7
|
-
export class
|
|
7
|
+
export class PdfGeneratorNoopAdapter implements PdfGeneratorPort {
|
|
8
8
|
private readonly base = { component: "infra", operation: "pdf_generator" };
|
|
9
9
|
|
|
10
10
|
constructor(private readonly logger: LoggerPort) {}
|
package/src/port.vo.ts
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import { z } from "zod/v4";
|
|
2
2
|
|
|
3
|
-
export const
|
|
3
|
+
export const PortError = { Type: "port.type", Invalid: "port.invalid" } as const;
|
|
4
|
+
|
|
5
|
+
export const Port = z.coerce
|
|
6
|
+
.number(PortError.Type)
|
|
7
|
+
.int(PortError.Type)
|
|
8
|
+
.min(0, PortError.Invalid)
|
|
9
|
+
.max(99999, PortError.Invalid)
|
|
10
|
+
.brand("Port");
|
|
11
|
+
|
|
4
12
|
export type PortType = z.infer<typeof Port>;
|
|
@@ -1,23 +1,15 @@
|
|
|
1
1
|
import bun from "bun";
|
|
2
|
-
import {
|
|
2
|
+
import type { BinaryType } from "../binary.vo";
|
|
3
3
|
import * as prereqs from "../prerequisites.service";
|
|
4
4
|
|
|
5
|
-
const PrerequisiteBinaryValue = z
|
|
6
|
-
.string({ error: "binary_invalid" })
|
|
7
|
-
.min(1, { error: "binary_invalid" })
|
|
8
|
-
.max(64, { error: "binary_invalid" })
|
|
9
|
-
.refine((value) => !value.includes(" "), { error: "binary_invalid" });
|
|
10
|
-
|
|
11
|
-
type PrerequisiteBinaryValueType = z.infer<typeof PrerequisiteBinaryValue>;
|
|
12
|
-
|
|
13
5
|
export class PrerequisiteBinary implements prereqs.Prerequisite {
|
|
14
6
|
readonly kind = "binary";
|
|
15
7
|
readonly label: prereqs.PrerequisiteLabelType;
|
|
16
8
|
readonly enabled?: boolean = true;
|
|
17
9
|
|
|
18
|
-
private readonly binary:
|
|
10
|
+
private readonly binary: BinaryType;
|
|
19
11
|
|
|
20
|
-
constructor(config: prereqs.PrerequisiteConfigType & { binary:
|
|
12
|
+
constructor(config: prereqs.PrerequisiteConfigType & { binary: BinaryType }) {
|
|
21
13
|
this.label = config.label;
|
|
22
14
|
this.enabled = config.enabled === undefined ? true : config.enabled;
|
|
23
15
|
this.binary = config.binary;
|
|
@@ -27,9 +19,7 @@ export class PrerequisiteBinary implements prereqs.Prerequisite {
|
|
|
27
19
|
try {
|
|
28
20
|
if (!this.enabled) return prereqs.Verification.undetermined();
|
|
29
21
|
|
|
30
|
-
const
|
|
31
|
-
|
|
32
|
-
const result = await bun.$`which ${binary}`.quiet();
|
|
22
|
+
const result = await bun.$`which ${this.binary}`.quiet();
|
|
33
23
|
|
|
34
24
|
if (result.exitCode === 0) return prereqs.Verification.success();
|
|
35
25
|
return prereqs.Verification.failure({ message: `Exit code ${result.exitCode}` });
|
|
@@ -17,11 +17,11 @@ export class PrerequisiteDependencyVulnerabilities implements prereqs.Prerequisi
|
|
|
17
17
|
if (!this.enabled) return prereqs.Verification.undetermined();
|
|
18
18
|
|
|
19
19
|
try {
|
|
20
|
-
const
|
|
20
|
+
const command = await bun.$`bun audit --json`.quiet();
|
|
21
21
|
|
|
22
|
-
if (
|
|
22
|
+
if (command.exitCode !== 0) return prereqs.Verification.failure({ message: "Audit failure" });
|
|
23
23
|
|
|
24
|
-
const audit = JSON.parse(
|
|
24
|
+
const audit = JSON.parse(command.stdout.toString()) as BunAuditOutput;
|
|
25
25
|
|
|
26
26
|
const criticalVulnerabilitiesCount = Object.values(audit).filter((name) =>
|
|
27
27
|
name.some((vulnerability) => vulnerability.severity === "critical"),
|
|
@@ -11,15 +11,13 @@ export class PrerequisiteJobs implements prereqs.Prerequisite {
|
|
|
11
11
|
constructor(config: prereqs.PrerequisiteConfigType & { jobs: MultipleJobsType }) {
|
|
12
12
|
this.label = config.label;
|
|
13
13
|
this.enabled = config.enabled === undefined ? true : config.enabled;
|
|
14
|
+
|
|
14
15
|
this.jobs = config.jobs;
|
|
15
16
|
}
|
|
16
17
|
|
|
17
18
|
async verify(): Promise<prereqs.VerifyOutcome> {
|
|
18
19
|
if (!this.enabled) return prereqs.Verification.undetermined();
|
|
19
|
-
|
|
20
|
-
const areAllJobsRunning = Jobs.areAllRunning(this.jobs);
|
|
21
|
-
|
|
22
|
-
if (areAllJobsRunning) return prereqs.Verification.success();
|
|
20
|
+
if (Jobs.areAllRunning(this.jobs)) return prereqs.Verification.success();
|
|
23
21
|
return prereqs.Verification.failure();
|
|
24
22
|
}
|
|
25
23
|
}
|
|
@@ -11,6 +11,7 @@ export class PrerequisiteLogFile implements prereqs.Prerequisite {
|
|
|
11
11
|
constructor(config: prereqs.PrerequisiteConfigType & { logger: LoggerWinstonProductionAdapter }) {
|
|
12
12
|
this.label = config.label;
|
|
13
13
|
this.enabled = config.enabled === undefined ? true : config.enabled;
|
|
14
|
+
|
|
14
15
|
this.logger = config.logger;
|
|
15
16
|
}
|
|
16
17
|
|
|
@@ -11,6 +11,7 @@ export class PrerequisiteMailer implements prereqs.Prerequisite {
|
|
|
11
11
|
constructor(config: prereqs.PrerequisiteConfigType & { mailer: MailerPort }) {
|
|
12
12
|
this.label = config.label;
|
|
13
13
|
this.enabled = config.enabled === undefined ? true : config.enabled;
|
|
14
|
+
|
|
14
15
|
this.mailer = config.mailer;
|
|
15
16
|
}
|
|
16
17
|
|
|
@@ -23,7 +23,7 @@ export class PrerequisiteMemory implements prereqs.Prerequisite {
|
|
|
23
23
|
|
|
24
24
|
if (memoryConsumption.isGreaterThan(this.maximum)) {
|
|
25
25
|
return prereqs.Verification.failure({
|
|
26
|
-
message: `Memory consumption: ${memoryConsumption.format(tools.
|
|
26
|
+
message: `Memory consumption: ${memoryConsumption.format(tools.Size.unit.MB)}`,
|
|
27
27
|
});
|
|
28
28
|
}
|
|
29
29
|
return prereqs.Verification.success();
|
|
@@ -12,6 +12,7 @@ export class PrerequisiteNode implements prereqs.Prerequisite {
|
|
|
12
12
|
constructor(config: prereqs.PrerequisiteConfigType & { version: tools.PackageVersion; current: string }) {
|
|
13
13
|
this.label = config.label;
|
|
14
14
|
this.enabled = config.enabled === undefined ? true : config.enabled;
|
|
15
|
+
|
|
15
16
|
this.version = config.version;
|
|
16
17
|
this.current = config.current;
|
|
17
18
|
}
|
|
@@ -12,6 +12,7 @@ export class PrerequisitePort implements prereqs.Prerequisite {
|
|
|
12
12
|
constructor(config: prereqs.PrerequisiteConfigType & { port: PortType }) {
|
|
13
13
|
this.label = config.label;
|
|
14
14
|
this.enabled = config.enabled === undefined ? true : config.enabled;
|
|
15
|
+
|
|
15
16
|
this.port = config.port;
|
|
16
17
|
}
|
|
17
18
|
|
package/src/prerequisites/ram.ts
CHANGED
|
@@ -12,6 +12,7 @@ export class PrerequisiteRAM implements prereqs.Prerequisite {
|
|
|
12
12
|
constructor(config: prereqs.PrerequisiteConfigType & { minimum: tools.Size }) {
|
|
13
13
|
this.label = config.label;
|
|
14
14
|
this.enabled = config.enabled === undefined ? true : config.enabled;
|
|
15
|
+
|
|
15
16
|
this.minimum = config.minimum;
|
|
16
17
|
}
|
|
17
18
|
|
|
@@ -21,6 +22,6 @@ export class PrerequisiteRAM implements prereqs.Prerequisite {
|
|
|
21
22
|
const freeRAM = tools.Size.fromBytes(os.freemem());
|
|
22
23
|
|
|
23
24
|
if (freeRAM.isGreaterThan(this.minimum)) return prereqs.Verification.success();
|
|
24
|
-
return prereqs.Verification.failure({ message: `Free RAM: ${freeRAM.format(tools.
|
|
25
|
+
return prereqs.Verification.failure({ message: `Free RAM: ${freeRAM.format(tools.Size.unit.MB)}` });
|
|
25
26
|
}
|
|
26
27
|
}
|
|
@@ -11,6 +11,7 @@ export class PrerequisiteRunningUser implements prereqs.Prerequisite {
|
|
|
11
11
|
constructor(config: prereqs.PrerequisiteConfigType & { username: string }) {
|
|
12
12
|
this.label = config.label;
|
|
13
13
|
this.enabled = config.enabled === undefined ? true : config.enabled;
|
|
14
|
+
|
|
14
15
|
this.username = config.username;
|
|
15
16
|
}
|
|
16
17
|
|
|
@@ -12,6 +12,7 @@ export class PrerequisiteSpace implements prereqs.Prerequisite {
|
|
|
12
12
|
constructor(config: prereqs.PrerequisiteConfigType & { minimum: tools.Size }) {
|
|
13
13
|
this.label = config.label;
|
|
14
14
|
this.enabled = config.enabled === undefined ? true : config.enabled;
|
|
15
|
+
|
|
15
16
|
this.minimum = config.minimum;
|
|
16
17
|
}
|
|
17
18
|
|
|
@@ -25,7 +26,7 @@ export class PrerequisiteSpace implements prereqs.Prerequisite {
|
|
|
25
26
|
|
|
26
27
|
if (freeDiskSpace.isGreaterThan(this.minimum)) return prereqs.Verification.success();
|
|
27
28
|
return prereqs.Verification.failure({
|
|
28
|
-
message: `Free disk space: ${freeDiskSpace.format(tools.
|
|
29
|
+
message: `Free disk space: ${freeDiskSpace.format(tools.Size.unit.MB)}`,
|
|
29
30
|
});
|
|
30
31
|
} catch (error) {
|
|
31
32
|
return prereqs.Verification.failure(error as Error);
|
|
@@ -24,9 +24,8 @@ export class PrerequisiteSQLite implements prereqs.Prerequisite {
|
|
|
24
24
|
| undefined;
|
|
25
25
|
|
|
26
26
|
if (!integrity || (integrity.integrity_check ?? "").toLowerCase() !== "ok") {
|
|
27
|
-
return prereqs.Verification.failure({ message: "
|
|
27
|
+
return prereqs.Verification.failure({ message: "Integrity check failed" });
|
|
28
28
|
}
|
|
29
|
-
|
|
30
29
|
return prereqs.Verification.success();
|
|
31
30
|
} catch (error) {
|
|
32
31
|
return prereqs.Verification.failure(error as Error);
|