@bgord/bun 0.7.0 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -3
- package/dist/api-key-shield.middleware.d.ts +14 -0
- package/dist/api-key-shield.middleware.d.ts.map +1 -0
- package/dist/api-key-shield.middleware.js +19 -0
- package/dist/api-key-shield.middleware.js.map +1 -0
- package/dist/api-version.middleware.d.ts +6 -0
- package/dist/api-version.middleware.d.ts.map +1 -0
- package/dist/api-version.middleware.js +12 -0
- package/dist/api-version.middleware.js.map +1 -0
- package/dist/auth-shield.middleware.d.ts +31 -0
- package/dist/auth-shield.middleware.d.ts.map +1 -0
- package/dist/auth-shield.middleware.js +83 -0
- package/dist/auth-shield.middleware.js.map +1 -0
- package/dist/basic-auth.d.ts +8 -0
- package/dist/basic-auth.d.ts.map +1 -1
- package/dist/basic-auth.js +9 -0
- package/dist/basic-auth.js.map +1 -1
- package/dist/basic-auth.service.d.ts +14 -0
- package/dist/basic-auth.service.d.ts.map +1 -0
- package/dist/basic-auth.service.js +13 -0
- package/dist/basic-auth.service.js.map +1 -0
- package/dist/build-info-repository.service.d.ts +10 -0
- package/dist/build-info-repository.service.d.ts.map +1 -0
- package/dist/build-info-repository.service.js +18 -0
- package/dist/build-info-repository.service.js.map +1 -0
- package/dist/cache-resolver.service.d.ts +46 -0
- package/dist/cache-resolver.service.d.ts.map +1 -0
- package/dist/cache-resolver.service.js +44 -0
- package/dist/cache-resolver.service.js.map +1 -0
- package/dist/cache-response.middleware.d.ts +9 -0
- package/dist/cache-response.middleware.d.ts.map +1 -0
- package/dist/cache-response.middleware.js +25 -0
- package/dist/cache-response.middleware.js.map +1 -0
- package/dist/cache-static-files.middleware.d.ts +9 -0
- package/dist/cache-static-files.middleware.d.ts.map +1 -0
- package/dist/cache-static-files.middleware.js +25 -0
- package/dist/cache-static-files.middleware.js.map +1 -0
- package/dist/context.middleware.d.ts +14 -0
- package/dist/context.middleware.d.ts.map +1 -0
- package/dist/context.middleware.js +11 -0
- package/dist/context.middleware.js.map +1 -0
- package/dist/correlation-id.d.ts.map +1 -1
- package/dist/correlation-id.vo.d.ts +4 -0
- package/dist/correlation-id.vo.d.ts.map +1 -0
- package/dist/correlation-id.vo.js +3 -0
- package/dist/correlation-id.vo.js.map +1 -0
- package/dist/decorators.d.ts +4 -0
- package/dist/decorators.d.ts.map +1 -0
- package/dist/decorators.js +62 -0
- package/dist/decorators.js.map +1 -0
- package/dist/decorators.service.d.ts +12 -0
- package/dist/decorators.service.d.ts.map +1 -0
- package/dist/decorators.service.js +62 -0
- package/dist/decorators.service.js.map +1 -0
- package/dist/download-file.service.d.ts +13 -0
- package/dist/download-file.service.d.ts.map +1 -0
- package/dist/download-file.service.js +11 -0
- package/dist/download-file.service.js.map +1 -0
- package/dist/encryption.d.ts +8 -3
- package/dist/encryption.d.ts.map +1 -0
- package/dist/encryption.js +37 -0
- package/dist/encryption.js.map +1 -0
- package/dist/encryption.service.d.ts +25 -0
- package/dist/encryption.service.d.ts.map +1 -0
- package/dist/encryption.service.js +37 -0
- package/dist/encryption.service.js.map +1 -0
- package/dist/env-validator.service.d.ts +21 -0
- package/dist/env-validator.service.d.ts.map +1 -0
- package/dist/env-validator.service.js +28 -0
- package/dist/env-validator.service.js.map +1 -0
- package/dist/etag-extractor.middleware.d.ts +11 -0
- package/dist/etag-extractor.middleware.d.ts.map +1 -0
- package/dist/etag-extractor.middleware.js +18 -0
- package/dist/etag-extractor.middleware.js.map +1 -0
- package/dist/event-handler.d.ts +8 -0
- package/dist/event-handler.d.ts.map +1 -0
- package/dist/event-handler.js +21 -0
- package/dist/event-handler.js.map +1 -0
- package/dist/event-handler.service.d.ts +8 -0
- package/dist/event-handler.service.d.ts.map +1 -0
- package/dist/event-handler.service.js +21 -0
- package/dist/event-handler.service.js.map +1 -0
- package/dist/event-logger.d.ts +8 -0
- package/dist/event-logger.d.ts.map +1 -0
- package/dist/event-logger.js +19 -0
- package/dist/event-logger.js.map +1 -0
- package/dist/event-logger.service.d.ts +8 -0
- package/dist/event-logger.service.d.ts.map +1 -0
- package/dist/event-logger.service.js +19 -0
- package/dist/event-logger.service.js.map +1 -0
- package/dist/event.d.ts +7 -46
- package/dist/event.d.ts.map +1 -0
- package/dist/event.js +23 -0
- package/dist/event.js.map +1 -0
- package/dist/event.vo.d.ts +20 -0
- package/dist/event.vo.d.ts.map +1 -0
- package/dist/event.vo.js +23 -0
- package/dist/event.vo.js.map +1 -0
- package/dist/file-location.d.ts +10 -9
- package/dist/file-location.d.ts.map +1 -0
- package/dist/file-location.js +46 -0
- package/dist/file-location.js.map +1 -0
- package/dist/file-location.service.d.ts +32 -0
- package/dist/file-location.service.d.ts.map +1 -0
- package/dist/file-location.service.js +46 -0
- package/dist/file-location.service.js.map +1 -0
- package/dist/file-uploader.middleware.d.ts +13 -0
- package/dist/file-uploader.middleware.d.ts.map +1 -0
- package/dist/file-uploader.middleware.js +35 -0
- package/dist/file-uploader.middleware.js.map +1 -0
- package/dist/graceful-shutdown.service.d.ts +7 -0
- package/dist/graceful-shutdown.service.d.ts.map +1 -0
- package/dist/graceful-shutdown.service.js +32 -0
- package/dist/graceful-shutdown.service.js.map +1 -0
- package/dist/gzip.d.ts +1 -0
- package/dist/gzip.d.ts.map +1 -0
- package/dist/gzip.js +18 -0
- package/dist/gzip.js.map +1 -0
- package/dist/gzip.service.d.ts +13 -0
- package/dist/gzip.service.d.ts.map +1 -0
- package/dist/gzip.service.js +18 -0
- package/dist/gzip.service.js.map +1 -0
- package/dist/hcaptcha-shield.d.ts +12 -13
- package/dist/hcaptcha-shield.d.ts.map +1 -0
- package/dist/hcaptcha-shield.js +34 -0
- package/dist/hcaptcha-shield.js.map +1 -0
- package/dist/hcaptcha-shield.middleware.d.ts +23 -0
- package/dist/hcaptcha-shield.middleware.d.ts.map +1 -0
- package/dist/hcaptcha-shield.middleware.js +34 -0
- package/dist/hcaptcha-shield.middleware.js.map +1 -0
- package/dist/healthcheck.d.ts +5 -5
- package/dist/healthcheck.d.ts.map +1 -1
- package/dist/healthcheck.js +5 -5
- package/dist/healthcheck.js.map +1 -1
- package/dist/healthcheck.service.d.ts +22 -0
- package/dist/healthcheck.service.d.ts.map +1 -0
- package/dist/healthcheck.service.js +35 -0
- package/dist/healthcheck.service.js.map +1 -0
- package/dist/http-logger.middleware.d.ts +7 -0
- package/dist/http-logger.middleware.d.ts.map +1 -0
- package/dist/http-logger.middleware.js +89 -0
- package/dist/http-logger.middleware.js.map +1 -0
- package/dist/i18n.d.ts.map +1 -1
- package/dist/i18n.js.map +1 -1
- package/dist/i18n.service.d.ts +22 -0
- package/dist/i18n.service.d.ts.map +1 -0
- package/dist/i18n.service.js +35 -0
- package/dist/i18n.service.js.map +1 -0
- package/dist/image-compressor.d.ts +9 -4
- package/dist/image-compressor.d.ts.map +1 -0
- package/dist/image-compressor.js +13 -0
- package/dist/image-compressor.js.map +1 -0
- package/dist/image-compressor.service.d.ts +15 -0
- package/dist/image-compressor.service.d.ts.map +1 -0
- package/dist/image-compressor.service.js +13 -0
- package/dist/image-compressor.service.js.map +1 -0
- package/dist/image-exif.d.ts +10 -9
- package/dist/image-exif.d.ts.map +1 -0
- package/dist/image-exif.js +21 -0
- package/dist/image-exif.js.map +1 -0
- package/dist/image-exif.service.d.ts +19 -0
- package/dist/image-exif.service.d.ts.map +1 -0
- package/dist/image-exif.service.js +21 -0
- package/dist/image-exif.service.js.map +1 -0
- package/dist/index.d.ts +51 -34
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +51 -34
- package/dist/index.js.map +1 -1
- package/dist/jobs.d.ts.map +1 -1
- package/dist/jobs.js.map +1 -1
- package/dist/jobs.service.d.ts +33 -0
- package/dist/jobs.service.d.ts.map +1 -0
- package/dist/jobs.service.js +72 -0
- package/dist/jobs.service.js.map +1 -0
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js.map +1 -1
- package/dist/logger.service.d.ts +69 -0
- package/dist/logger.service.d.ts.map +1 -0
- package/dist/logger.service.js +87 -0
- package/dist/logger.service.js.map +1 -0
- package/dist/mailer.d.ts.map +1 -1
- package/dist/mailer.js.map +1 -1
- package/dist/mailer.service.d.ts +38 -0
- package/dist/mailer.service.d.ts.map +1 -0
- package/dist/mailer.service.js +33 -0
- package/dist/mailer.service.js.map +1 -0
- package/dist/memory-consumption.service.d.ts +5 -0
- package/dist/memory-consumption.service.d.ts.map +1 -0
- package/dist/memory-consumption.service.js +8 -0
- package/dist/memory-consumption.service.js.map +1 -0
- package/dist/new-uuid.service.d.ts +4 -0
- package/dist/new-uuid.service.d.ts.map +1 -0
- package/dist/new-uuid.service.js +6 -0
- package/dist/new-uuid.service.js.map +1 -0
- package/dist/node-env.vo.d.ts.map +1 -1
- package/dist/node-env.vo.js.map +1 -1
- package/dist/open-graph.d.ts +31 -12
- package/dist/open-graph.d.ts.map +1 -0
- package/dist/open-graph.js +172 -0
- package/dist/open-graph.js.map +1 -0
- package/dist/open-graph.service.d.ts +110 -0
- package/dist/open-graph.service.d.ts.map +1 -0
- package/dist/open-graph.service.js +172 -0
- package/dist/open-graph.service.js.map +1 -0
- package/dist/passwords.d.ts.map +1 -1
- package/dist/passwords.js.map +1 -1
- package/dist/passwords.vo.d.ts +21 -0
- package/dist/passwords.vo.d.ts.map +1 -0
- package/dist/passwords.vo.js +42 -0
- package/dist/passwords.vo.js.map +1 -0
- package/dist/path.d.ts.map +1 -1
- package/dist/path.vo.d.ts +4 -0
- package/dist/path.vo.d.ts.map +1 -0
- package/dist/path.vo.js +3 -0
- package/dist/path.vo.js.map +1 -0
- package/dist/policy.service.d.ts +12 -0
- package/dist/policy.service.d.ts.map +1 -0
- package/dist/policy.service.js +14 -0
- package/dist/policy.service.js.map +1 -0
- package/dist/port.d.ts.map +1 -1
- package/dist/port.vo.d.ts +4 -0
- package/dist/port.vo.d.ts.map +1 -0
- package/dist/port.vo.js +3 -0
- package/dist/port.vo.js.map +1 -0
- package/dist/prerequisites/binary.d.ts +5 -5
- package/dist/prerequisites/binary.d.ts.map +1 -1
- package/dist/prerequisites/binary.js +4 -4
- package/dist/prerequisites/binary.js.map +1 -1
- package/dist/prerequisites/bun.d.ts +5 -5
- package/dist/prerequisites/bun.d.ts.map +1 -1
- package/dist/prerequisites/bun.js +5 -3
- package/dist/prerequisites/bun.js.map +1 -1
- package/dist/prerequisites/dependency-vulnerabilities.d.ts +13 -0
- package/dist/prerequisites/dependency-vulnerabilities.d.ts.map +1 -0
- package/dist/prerequisites/dependency-vulnerabilities.js +30 -0
- package/dist/prerequisites/dependency-vulnerabilities.js.map +1 -0
- package/dist/prerequisites/external-api.d.ts +14 -0
- package/dist/prerequisites/external-api.d.ts.map +1 -0
- package/dist/prerequisites/external-api.js +21 -0
- package/dist/prerequisites/external-api.js.map +1 -0
- package/dist/prerequisites/index.d.ts +2 -0
- package/dist/prerequisites/index.d.ts.map +1 -1
- package/dist/prerequisites/index.js +2 -0
- package/dist/prerequisites/index.js.map +1 -1
- package/dist/prerequisites/jobs.d.ts +6 -6
- package/dist/prerequisites/jobs.d.ts.map +1 -1
- package/dist/prerequisites/jobs.js +5 -5
- package/dist/prerequisites/jobs.js.map +1 -1
- package/dist/prerequisites/log-file.d.ts +6 -6
- package/dist/prerequisites/log-file.d.ts.map +1 -1
- package/dist/prerequisites/log-file.js +4 -4
- package/dist/prerequisites/log-file.js.map +1 -1
- package/dist/prerequisites/mailer.d.ts +6 -6
- package/dist/prerequisites/mailer.d.ts.map +1 -1
- package/dist/prerequisites/mailer.js +4 -4
- package/dist/prerequisites/mailer.js.map +1 -1
- package/dist/prerequisites/memory.d.ts +5 -5
- package/dist/prerequisites/memory.d.ts.map +1 -1
- package/dist/prerequisites/memory.js +5 -5
- package/dist/prerequisites/memory.js.map +1 -1
- package/dist/prerequisites/node.d.ts +5 -5
- package/dist/prerequisites/node.d.ts.map +1 -1
- package/dist/prerequisites/node.js +4 -4
- package/dist/prerequisites/node.js.map +1 -1
- package/dist/prerequisites/outside-connectivity.d.ts +5 -5
- package/dist/prerequisites/outside-connectivity.d.ts.map +1 -1
- package/dist/prerequisites/outside-connectivity.js +4 -4
- package/dist/prerequisites/outside-connectivity.js.map +1 -1
- package/dist/prerequisites/path.d.ts +5 -5
- package/dist/prerequisites/path.d.ts.map +1 -1
- package/dist/prerequisites/path.js +4 -4
- package/dist/prerequisites/path.js.map +1 -1
- package/dist/prerequisites/port.d.ts +6 -6
- package/dist/prerequisites/port.d.ts.map +1 -1
- package/dist/prerequisites/port.js +6 -6
- package/dist/prerequisites/port.js.map +1 -1
- package/dist/prerequisites/ram.d.ts +5 -5
- package/dist/prerequisites/ram.d.ts.map +1 -1
- package/dist/prerequisites/ram.js +4 -4
- package/dist/prerequisites/ram.js.map +1 -1
- package/dist/prerequisites/self.d.ts +5 -5
- package/dist/prerequisites/self.d.ts.map +1 -1
- package/dist/prerequisites/self.js +4 -4
- package/dist/prerequisites/self.js.map +1 -1
- package/dist/prerequisites/space.d.ts +5 -5
- package/dist/prerequisites/space.d.ts.map +1 -1
- package/dist/prerequisites/space.js +4 -4
- package/dist/prerequisites/space.js.map +1 -1
- package/dist/prerequisites/ssl-certificate-expiry.d.ts +5 -5
- package/dist/prerequisites/ssl-certificate-expiry.d.ts.map +1 -1
- package/dist/prerequisites/ssl-certificate-expiry.js +5 -5
- package/dist/prerequisites/ssl-certificate-expiry.js.map +1 -1
- package/dist/prerequisites/timezone-utc.d.ts +5 -5
- package/dist/prerequisites/timezone-utc.d.ts.map +1 -1
- package/dist/prerequisites/timezone-utc.js +4 -4
- package/dist/prerequisites/timezone-utc.js.map +1 -1
- package/dist/prerequisites/translations.d.ts +8 -8
- package/dist/prerequisites/translations.d.ts.map +1 -1
- package/dist/prerequisites/translations.js +8 -8
- package/dist/prerequisites/translations.js.map +1 -1
- package/dist/prerequisites.d.ts +2 -0
- package/dist/prerequisites.d.ts.map +1 -1
- package/dist/prerequisites.js +2 -0
- package/dist/prerequisites.js.map +1 -1
- package/dist/prerequisites.service.d.ts +49 -0
- package/dist/prerequisites.service.d.ts.map +1 -0
- package/dist/prerequisites.service.js +86 -0
- package/dist/prerequisites.service.js.map +1 -0
- package/dist/rate-limit-shield.middleware.d.ts +10 -0
- package/dist/rate-limit-shield.middleware.d.ts.map +1 -0
- package/dist/rate-limit-shield.middleware.js +21 -0
- package/dist/rate-limit-shield.middleware.js.map +1 -0
- package/dist/recaptcha-shield.d.ts +13 -5
- package/dist/recaptcha-shield.d.ts.map +1 -0
- package/dist/recaptcha-shield.js +50 -0
- package/dist/recaptcha-shield.js.map +1 -0
- package/dist/recaptcha-shield.middleware.d.ts +20 -0
- package/dist/recaptcha-shield.middleware.d.ts.map +1 -0
- package/dist/recaptcha-shield.middleware.js +50 -0
- package/dist/recaptcha-shield.middleware.js.map +1 -0
- package/dist/session-id.vo.d.ts +7 -0
- package/dist/session-id.vo.d.ts.map +1 -0
- package/dist/session-id.vo.js +10 -0
- package/dist/session-id.vo.js.map +1 -0
- package/dist/setup.js +1 -1
- package/dist/setup.js.map +1 -1
- package/dist/setup.service.d.ts +9 -0
- package/dist/setup.service.d.ts.map +1 -0
- package/dist/setup.service.js +39 -0
- package/dist/setup.service.js.map +1 -0
- package/dist/simulated-error.d.ts +2 -2
- package/dist/simulated-error.d.ts.map +1 -0
- package/dist/simulated-error.js +7 -0
- package/dist/simulated-error.js.map +1 -0
- package/dist/simulated-error.middleware.d.ts +4 -0
- package/dist/simulated-error.middleware.d.ts.map +1 -0
- package/dist/simulated-error.middleware.js +7 -0
- package/dist/simulated-error.middleware.js.map +1 -0
- package/dist/sitemap.d.ts +19 -27
- package/dist/sitemap.d.ts.map +1 -0
- package/dist/sitemap.js +57 -0
- package/dist/sitemap.js.map +1 -0
- package/dist/sitemap.service.d.ts +29 -0
- package/dist/sitemap.service.d.ts.map +1 -0
- package/dist/sitemap.service.js +57 -0
- package/dist/sitemap.service.js.map +1 -0
- package/dist/slower.d.ts +3 -6
- package/dist/slower.d.ts.map +1 -0
- package/dist/slower.js +8 -0
- package/dist/slower.js.map +1 -0
- package/dist/slower.middleware.d.ts +5 -0
- package/dist/slower.middleware.d.ts.map +1 -0
- package/dist/slower.middleware.js +8 -0
- package/dist/slower.middleware.js.map +1 -0
- package/dist/time-zone-offset.middleware.d.ts +15 -0
- package/dist/time-zone-offset.middleware.d.ts.map +1 -0
- package/dist/time-zone-offset.middleware.js +22 -0
- package/dist/time-zone-offset.middleware.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/uptime.service.d.ts +9 -0
- package/dist/uptime.service.d.ts.map +1 -0
- package/dist/uptime.service.js +10 -0
- package/dist/uptime.service.js.map +1 -0
- package/dist/url-wo-trailing-slash.d.ts +4 -0
- package/dist/url-wo-trailing-slash.d.ts.map +1 -0
- package/dist/url-wo-trailing-slash.js +9 -0
- package/dist/url-wo-trailing-slash.js.map +1 -0
- package/dist/url-wo-trailing-slash.vo.d.ts +4 -0
- package/dist/url-wo-trailing-slash.vo.d.ts.map +1 -0
- package/dist/url-wo-trailing-slash.vo.js +9 -0
- package/dist/url-wo-trailing-slash.vo.js.map +1 -0
- package/dist/username.vo.d.ts +11 -0
- package/dist/username.vo.d.ts.map +1 -0
- package/dist/username.vo.js +13 -0
- package/dist/username.vo.js.map +1 -0
- package/dist/uuid.d.ts.map +1 -1
- package/dist/uuid.vo.d.ts +4 -0
- package/dist/uuid.vo.d.ts.map +1 -0
- package/dist/uuid.vo.js +4 -0
- package/dist/uuid.vo.js.map +1 -0
- package/dist/weak-etag-extractor.middleware.d.ts +7 -0
- package/dist/weak-etag-extractor.middleware.d.ts.map +1 -0
- package/dist/weak-etag-extractor.middleware.js +18 -0
- package/dist/weak-etag-extractor.middleware.js.map +1 -0
- package/package.json +5 -2
- package/src/{api-version.ts → api-version.middleware.ts} +1 -1
- package/src/{auth-shield.ts → auth-shield.middleware.ts} +3 -3
- package/src/basic-auth.service.ts +26 -0
- package/src/{cache-response.ts → cache-response.middleware.ts} +1 -1
- package/src/{context.ts → context.middleware.ts} +2 -2
- package/src/{correlation-id.ts → correlation-id.vo.ts} +2 -1
- package/src/decorators.service.ts +78 -0
- package/src/encryption.service.ts +60 -0
- package/src/event-handler.service.ts +20 -0
- package/src/event-logger.service.ts +24 -0
- package/src/event.vo.ts +29 -0
- package/src/file-location.service.ts +70 -0
- package/src/gzip.service.ts +23 -0
- package/src/hcaptcha-shield.middleware.ts +57 -0
- package/src/{healthcheck.ts → healthcheck.service.ts} +12 -17
- package/src/{http-logger.ts → http-logger.middleware.ts} +4 -4
- package/src/{i18n.ts → i18n.service.ts} +6 -2
- package/src/image-compressor.service.ts +26 -0
- package/src/image-exif.service.ts +38 -0
- package/src/index.ts +51 -34
- package/src/{jobs.ts → jobs.service.ts} +4 -3
- package/src/{logger.ts → logger.service.ts} +8 -2
- package/src/{mailer.ts → mailer.service.ts} +11 -2
- package/src/node-env.vo.ts +1 -0
- package/src/open-graph.service.ts +259 -0
- package/src/{passwords.ts → passwords.vo.ts} +1 -0
- package/src/{path.ts → path.vo.ts} +1 -0
- package/src/policy.service.ts +25 -0
- package/src/{port.ts → port.vo.ts} +1 -0
- package/src/prerequisites/binary.ts +6 -10
- package/src/prerequisites/bun.ts +7 -10
- package/src/prerequisites/dependency-vulnerabilities.ts +54 -0
- package/src/prerequisites/external-api.ts +27 -0
- package/src/prerequisites/index.ts +2 -0
- package/src/prerequisites/jobs.ts +7 -13
- package/src/prerequisites/log-file.ts +7 -12
- package/src/prerequisites/mailer.ts +7 -12
- package/src/prerequisites/memory.ts +7 -12
- package/src/prerequisites/node.ts +6 -11
- package/src/prerequisites/outside-connectivity.ts +6 -11
- package/src/prerequisites/path.ts +6 -11
- package/src/prerequisites/port.ts +9 -15
- package/src/prerequisites/ram.ts +6 -11
- package/src/prerequisites/self.ts +6 -11
- package/src/prerequisites/space.ts +6 -11
- package/src/prerequisites/ssl-certificate-expiry.ts +7 -12
- package/src/prerequisites/timezone-utc.ts +6 -11
- package/src/prerequisites/translations.ts +14 -19
- package/src/{prerequisites.ts → prerequisites.service.ts} +3 -0
- package/src/{rate-limit-shield.ts → rate-limit-shield.middleware.ts} +8 -2
- package/src/recaptcha-shield.middleware.ts +76 -0
- package/src/{setup.ts → setup.service.ts} +9 -9
- package/src/simulated-error.middleware.ts +8 -0
- package/src/sitemap.service.ts +98 -0
- package/src/slower.middleware.ts +10 -0
- package/src/url-wo-trailing-slash.vo.ts +11 -0
- package/src/{uuid.ts → uuid.vo.ts} +2 -1
- package/src/{weak-etag-extractor.ts → weak-etag-extractor.middleware.ts} +1 -1
- package/src/basic-auth.ts +0 -7
- /package/src/{api-key-shield.ts → api-key-shield.middleware.ts} +0 -0
- /package/src/{build-info-repository.ts → build-info-repository.service.ts} +0 -0
- /package/src/{cache-resolver.ts → cache-resolver.service.ts} +0 -0
- /package/src/{cache-static-files.ts → cache-static-files.middleware.ts} +0 -0
- /package/src/{download-file.ts → download-file.service.ts} +0 -0
- /package/src/{env-validator.ts → env-validator.service.ts} +0 -0
- /package/src/{etag-extractor.ts → etag-extractor.middleware.ts} +0 -0
- /package/src/{file-uploader.ts → file-uploader.middleware.ts} +0 -0
- /package/src/{graceful-shutdown.ts → graceful-shutdown.service.ts} +0 -0
- /package/src/{memory-consumption.ts → memory-consumption.service.ts} +0 -0
- /package/src/{new-uuid.ts → new-uuid.service.ts} +0 -0
- /package/src/{session-id.ts → session-id.vo.ts} +0 -0
- /package/src/{time-zone-offset.ts → time-zone-offset.middleware.ts} +0 -0
- /package/src/{uptime.ts → uptime.service.ts} +0 -0
- /package/src/{username.ts → username.vo.ts} +0 -0
|
@@ -1,24 +1,19 @@
|
|
|
1
1
|
import * as tools from "@bgord/tools";
|
|
2
2
|
import { createFactory } from "hono/factory";
|
|
3
3
|
|
|
4
|
-
import { BuildInfoRepository } from "./build-info-repository";
|
|
5
|
-
import { MemoryConsumption } from "./memory-consumption";
|
|
6
|
-
import
|
|
7
|
-
|
|
8
|
-
BasePrerequisiteConfig,
|
|
9
|
-
PrerequisiteLabelType,
|
|
10
|
-
PrerequisiteStatusEnum,
|
|
11
|
-
} from "./prerequisites";
|
|
12
|
-
import { Uptime, UptimeResultType } from "./uptime";
|
|
4
|
+
import { BuildInfoRepository } from "./build-info-repository.service";
|
|
5
|
+
import { MemoryConsumption } from "./memory-consumption.service";
|
|
6
|
+
import * as prereqs from "./prerequisites.service";
|
|
7
|
+
import { Uptime, UptimeResultType } from "./uptime.service";
|
|
13
8
|
|
|
14
9
|
const handler = createFactory();
|
|
15
10
|
|
|
16
11
|
type HealthcheckResultType = {
|
|
17
|
-
ok: PrerequisiteStatusEnum;
|
|
12
|
+
ok: prereqs.PrerequisiteStatusEnum;
|
|
18
13
|
version: tools.BuildVersionType;
|
|
19
14
|
details: {
|
|
20
|
-
label: PrerequisiteLabelType;
|
|
21
|
-
status: PrerequisiteStatusEnum;
|
|
15
|
+
label: prereqs.PrerequisiteLabelType;
|
|
16
|
+
status: prereqs.PrerequisiteStatusEnum;
|
|
22
17
|
}[];
|
|
23
18
|
uptime: UptimeResultType;
|
|
24
19
|
memory: {
|
|
@@ -28,7 +23,7 @@ type HealthcheckResultType = {
|
|
|
28
23
|
} & tools.StopwatchResultType;
|
|
29
24
|
|
|
30
25
|
export class Healthcheck {
|
|
31
|
-
static build = (prerequisites: AbstractPrerequisite<BasePrerequisiteConfig>[]) =>
|
|
26
|
+
static build = (prerequisites: prereqs.AbstractPrerequisite<prereqs.BasePrerequisiteConfig>[]) =>
|
|
32
27
|
handler.createHandlers(async (c) => {
|
|
33
28
|
const stopwatch = new tools.Stopwatch();
|
|
34
29
|
|
|
@@ -41,11 +36,11 @@ export class Healthcheck {
|
|
|
41
36
|
details.push({ label: prerequisite.label, status });
|
|
42
37
|
}
|
|
43
38
|
|
|
44
|
-
const ok = details.every((result) => result.status !== PrerequisiteStatusEnum.failure)
|
|
45
|
-
? PrerequisiteStatusEnum.success
|
|
46
|
-
: PrerequisiteStatusEnum.failure;
|
|
39
|
+
const ok = details.every((result) => result.status !== prereqs.PrerequisiteStatusEnum.failure)
|
|
40
|
+
? prereqs.PrerequisiteStatusEnum.success
|
|
41
|
+
: prereqs.PrerequisiteStatusEnum.failure;
|
|
47
42
|
|
|
48
|
-
const code = ok === PrerequisiteStatusEnum.success ? 200 : 424;
|
|
43
|
+
const code = ok === prereqs.PrerequisiteStatusEnum.success ? 200 : 424;
|
|
49
44
|
|
|
50
45
|
const result: HealthcheckResultType = {
|
|
51
46
|
ok,
|
|
@@ -2,10 +2,10 @@ import { getConnInfo } from "hono/bun";
|
|
|
2
2
|
import { createMiddleware } from "hono/factory";
|
|
3
3
|
import _ from "lodash";
|
|
4
4
|
|
|
5
|
-
import { CacheHitEnum } from "./cache-resolver";
|
|
6
|
-
import { CacheResponse } from "./cache-response";
|
|
7
|
-
import { CorrelationIdType } from "./correlation-id";
|
|
8
|
-
import { Logger } from "./logger";
|
|
5
|
+
import { CacheHitEnum } from "./cache-resolver.service";
|
|
6
|
+
import { CacheResponse } from "./cache-response.middleware";
|
|
7
|
+
import type { CorrelationIdType } from "./correlation-id.vo";
|
|
8
|
+
import { Logger } from "./logger.service";
|
|
9
9
|
|
|
10
10
|
export class HttpLogger {
|
|
11
11
|
private static simplify(response: unknown) {
|
|
@@ -1,20 +1,24 @@
|
|
|
1
1
|
import path from "node:path";
|
|
2
2
|
import * as tools from "@bgord/tools";
|
|
3
3
|
|
|
4
|
-
import { Path, PathType } from "./path";
|
|
4
|
+
import { Path, PathType } from "./path.vo";
|
|
5
5
|
|
|
6
6
|
export type TranslationsKeyType = string;
|
|
7
|
+
|
|
7
8
|
export type TranslationsValueType = string;
|
|
9
|
+
|
|
8
10
|
export type TranslationsType = Record<TranslationsKeyType, TranslationsValueType>;
|
|
9
11
|
|
|
10
12
|
export type TranslationPlaceholderType = string;
|
|
13
|
+
|
|
11
14
|
export type TranslationPlaceholderValueType = string | number;
|
|
15
|
+
|
|
12
16
|
export type TranslationVariableType = Record<TranslationPlaceholderType, TranslationPlaceholderValueType>;
|
|
13
17
|
|
|
14
18
|
export type I18nConfigType = {
|
|
19
|
+
supportedLanguages: Record<string, tools.LanguageType>;
|
|
15
20
|
translationsPath?: PathType;
|
|
16
21
|
defaultLanguage?: tools.LanguageType;
|
|
17
|
-
supportedLanguages: Record<string, tools.LanguageType>;
|
|
18
22
|
};
|
|
19
23
|
|
|
20
24
|
export class I18n {
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import sharp from "sharp";
|
|
2
|
+
import { z } from "zod/v4";
|
|
3
|
+
|
|
4
|
+
import type { PathType } from "../src/path.vo";
|
|
5
|
+
|
|
6
|
+
export const ImageCompressionQuality = z.number().int().min(1).max(100).default(85);
|
|
7
|
+
|
|
8
|
+
type ImageCompressionQualityType = z.infer<typeof ImageCompressionQuality>;
|
|
9
|
+
|
|
10
|
+
export type ImageCompressorConfigType = {
|
|
11
|
+
input: PathType;
|
|
12
|
+
output: PathType;
|
|
13
|
+
quality?: ImageCompressionQualityType;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export class ImageCompressor {
|
|
17
|
+
static async compress(config: ImageCompressorConfigType): Promise<sharp.OutputInfo> {
|
|
18
|
+
const quality = config.quality ?? 85;
|
|
19
|
+
|
|
20
|
+
const image = sharp(config.input);
|
|
21
|
+
const metadata = await image.metadata();
|
|
22
|
+
const format = metadata.format as keyof sharp.FormatEnum;
|
|
23
|
+
|
|
24
|
+
return image.toFormat(format, { quality }).toFile(config.output);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import * as tools from "@bgord/tools";
|
|
3
|
+
import mime from "mime-types";
|
|
4
|
+
import sharp from "sharp";
|
|
5
|
+
|
|
6
|
+
import type { PathType } from "./path.vo";
|
|
7
|
+
|
|
8
|
+
export type ImageExifOutputType = {
|
|
9
|
+
width: tools.WidthType;
|
|
10
|
+
height: tools.HeightType;
|
|
11
|
+
name: path.ParsedPath["base"];
|
|
12
|
+
mimeType: tools.MimeRawType;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export type ImageExifClearConfigType = {
|
|
16
|
+
input: PathType;
|
|
17
|
+
output: PathType;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export class ImageEXIF {
|
|
21
|
+
static async read(input: PathType): Promise<ImageExifOutputType> {
|
|
22
|
+
const image = sharp(input);
|
|
23
|
+
const metadata = await image.metadata();
|
|
24
|
+
|
|
25
|
+
const name = path.parse(input).base;
|
|
26
|
+
|
|
27
|
+
return {
|
|
28
|
+
width: tools.Width.parse(metadata.width),
|
|
29
|
+
height: tools.Height.parse(metadata.height),
|
|
30
|
+
name,
|
|
31
|
+
mimeType: String(mime.contentType(String(metadata.format))),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
static async clear(config: ImageExifClearConfigType): Promise<sharp.OutputInfo> {
|
|
36
|
+
return sharp(config.input).rotate().toFile(config.output);
|
|
37
|
+
}
|
|
38
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -1,38 +1,55 @@
|
|
|
1
|
-
export * from "./api-key-shield";
|
|
2
|
-
export * from "./api-version";
|
|
3
|
-
export * from "./auth-shield";
|
|
4
|
-
export * from "./basic-auth";
|
|
5
|
-
export * from "./build-info-repository";
|
|
6
|
-
export * from "./cache-resolver";
|
|
7
|
-
export * from "./cache-response";
|
|
8
|
-
export * from "./cache-static-files";
|
|
9
|
-
export * from "./context";
|
|
10
|
-
export * from "./correlation-id";
|
|
11
|
-
export * from "./
|
|
12
|
-
export * from "./
|
|
13
|
-
export * from "./
|
|
14
|
-
export * from "./
|
|
15
|
-
export * from "./
|
|
16
|
-
export * from "./
|
|
17
|
-
export * from "./
|
|
18
|
-
export * from "./
|
|
19
|
-
export * from "./
|
|
20
|
-
export * from "./
|
|
21
|
-
export * from "./
|
|
22
|
-
export * from "./
|
|
23
|
-
export * from "./
|
|
1
|
+
export * from "./api-key-shield.middleware";
|
|
2
|
+
export * from "./api-version.middleware";
|
|
3
|
+
export * from "./auth-shield.middleware";
|
|
4
|
+
export * from "./basic-auth.service";
|
|
5
|
+
export * from "./build-info-repository.service";
|
|
6
|
+
export * from "./cache-resolver.service";
|
|
7
|
+
export * from "./cache-response.middleware";
|
|
8
|
+
export * from "./cache-static-files.middleware";
|
|
9
|
+
export * from "./context.middleware";
|
|
10
|
+
export * from "./correlation-id.vo";
|
|
11
|
+
export * from "./decorators.service";
|
|
12
|
+
export * from "./download-file.service";
|
|
13
|
+
export * from "./encryption.service";
|
|
14
|
+
export * from "./env-validator.service";
|
|
15
|
+
export * from "./etag-extractor.middleware";
|
|
16
|
+
export * from "./event-handler.service";
|
|
17
|
+
export * from "./event-logger.service";
|
|
18
|
+
export * from "./event.vo";
|
|
19
|
+
export * from "./file-location.service";
|
|
20
|
+
export * from "./file-uploader.middleware";
|
|
21
|
+
export * from "./graceful-shutdown.service";
|
|
22
|
+
export * from "./gzip.service";
|
|
23
|
+
export * from "./hcaptcha-shield.middleware";
|
|
24
|
+
export * from "./healthcheck.service";
|
|
25
|
+
export * from "./http-logger.middleware";
|
|
26
|
+
export * from "./i18n.service";
|
|
27
|
+
export * from "./image-compressor.service";
|
|
28
|
+
export * from "./image-exif.service";
|
|
29
|
+
export * from "./jobs.service";
|
|
30
|
+
export * from "./logger.service";
|
|
31
|
+
export * from "./mailer.service";
|
|
32
|
+
export * from "./memory-consumption.service";
|
|
33
|
+
export * from "./new-uuid.service";
|
|
24
34
|
export * from "./node-env.vo";
|
|
25
|
-
export * from "./
|
|
26
|
-
export * from "./
|
|
27
|
-
export * from "./
|
|
35
|
+
export * from "./open-graph.service";
|
|
36
|
+
export * from "./passwords.vo";
|
|
37
|
+
export * from "./path.vo";
|
|
38
|
+
export * from "./policy.service";
|
|
39
|
+
export * from "./port.vo";
|
|
28
40
|
export * from "./prerequisites";
|
|
29
41
|
export * from "./prerequisites/index";
|
|
30
|
-
export * from "./rate-limit-shield";
|
|
31
|
-
export * from "./
|
|
32
|
-
export * from "./
|
|
33
|
-
export * from "./
|
|
34
|
-
export * from "./
|
|
35
|
-
export * from "./
|
|
36
|
-
export * from "./
|
|
37
|
-
export * from "./
|
|
42
|
+
export * from "./rate-limit-shield.middleware";
|
|
43
|
+
export * from "./recaptcha-shield.middleware";
|
|
44
|
+
export * from "./session-id.vo";
|
|
45
|
+
export * from "./setup.service";
|
|
46
|
+
export * from "./simulated-error.middleware";
|
|
47
|
+
export * from "./sitemap.service";
|
|
48
|
+
export * from "./slower.middleware";
|
|
49
|
+
export * from "./time-zone-offset.middleware";
|
|
50
|
+
export * from "./uptime.service";
|
|
51
|
+
export * from "./url-wo-trailing-slash.vo";
|
|
52
|
+
export * from "./username.vo";
|
|
53
|
+
export * from "./uuid.vo";
|
|
54
|
+
export * from "./weak-etag-extractor.middleware";
|
|
38
55
|
export { default as sharp } from "sharp";
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import * as tools from "@bgord/tools";
|
|
2
2
|
import { Cron } from "croner";
|
|
3
3
|
|
|
4
|
-
import { CorrelationId } from "./correlation-id";
|
|
5
|
-
import { Logger } from "./logger";
|
|
6
|
-
import { NewUUID } from "./new-uuid";
|
|
4
|
+
import { CorrelationId } from "./correlation-id.vo";
|
|
5
|
+
import { Logger } from "./logger.service";
|
|
6
|
+
import { NewUUID } from "./new-uuid.service";
|
|
7
7
|
|
|
8
8
|
export type JobNameType = string;
|
|
9
|
+
|
|
9
10
|
export type MultipleJobsType = Record<JobNameType, Cron>;
|
|
10
11
|
|
|
11
12
|
export enum UTC_DAY_OF_THE_WEEK {
|
|
@@ -2,9 +2,9 @@ import * as tools from "@bgord/tools";
|
|
|
2
2
|
import * as winston from "winston";
|
|
3
3
|
import { z } from "zod/v4";
|
|
4
4
|
|
|
5
|
-
import { CorrelationIdType } from "./correlation-id";
|
|
5
|
+
import { CorrelationIdType } from "./correlation-id.vo";
|
|
6
6
|
import { NodeEnvironmentEnum } from "./node-env.vo";
|
|
7
|
-
import { PathType } from "./path";
|
|
7
|
+
import { PathType } from "./path.vo";
|
|
8
8
|
|
|
9
9
|
export enum LogLevelEnum {
|
|
10
10
|
/** @public */
|
|
@@ -18,11 +18,17 @@ export enum LogLevelEnum {
|
|
|
18
18
|
export const LogLevel = z.enum(LogLevelEnum);
|
|
19
19
|
|
|
20
20
|
type LogTimestampType = number;
|
|
21
|
+
|
|
21
22
|
type LogAppType = string;
|
|
23
|
+
|
|
22
24
|
type LogEnvironmentType = NodeEnvironmentEnum;
|
|
25
|
+
|
|
23
26
|
type LogMessageType = string;
|
|
27
|
+
|
|
24
28
|
type LogOperationType = string;
|
|
29
|
+
|
|
25
30
|
type LogMetadataType = Record<string, any>;
|
|
31
|
+
|
|
26
32
|
type LogCorrelationIdType = CorrelationIdType;
|
|
27
33
|
|
|
28
34
|
const levels: Record<LogLevelEnum, number> = {
|
|
@@ -1,19 +1,23 @@
|
|
|
1
1
|
import nodemailer, { SendMailOptions } from "nodemailer";
|
|
2
2
|
import { z } from "zod/v4";
|
|
3
3
|
|
|
4
|
-
import { Path } from "./path";
|
|
5
|
-
import { Port } from "./port";
|
|
4
|
+
import { Path } from "./path.vo";
|
|
5
|
+
import { Port } from "./port.vo";
|
|
6
6
|
|
|
7
7
|
export const SmtpHost = z.string().trim().min(1);
|
|
8
|
+
|
|
8
9
|
export type SmtpHostType = z.infer<typeof SmtpHost>;
|
|
9
10
|
|
|
10
11
|
export const SmtpPort = Port;
|
|
12
|
+
|
|
11
13
|
export type SmtpPortType = z.infer<typeof SmtpPort>;
|
|
12
14
|
|
|
13
15
|
export const SmtpUser = z.string().trim().min(1);
|
|
16
|
+
|
|
14
17
|
export type SmtpUserType = z.infer<typeof SmtpUser>;
|
|
15
18
|
|
|
16
19
|
export const SmtpPass = z.string().trim().min(1);
|
|
20
|
+
|
|
17
21
|
export type SmtpPassType = z.infer<typeof SmtpPass>;
|
|
18
22
|
|
|
19
23
|
type MailerConfigType = {
|
|
@@ -26,18 +30,23 @@ type MailerConfigType = {
|
|
|
26
30
|
type MailerSendOptionsType = SendMailOptions;
|
|
27
31
|
|
|
28
32
|
export const EmailSubject = z.string().min(1).max(128);
|
|
33
|
+
|
|
29
34
|
export type EmailSubjectType = z.infer<typeof EmailSubject>;
|
|
30
35
|
|
|
31
36
|
export const EmailContentHtml = z.string().min(1).max(10_000);
|
|
37
|
+
|
|
32
38
|
export type EmailContentHtmlType = z.infer<typeof EmailContentHtml>;
|
|
33
39
|
|
|
34
40
|
export const EmailFrom = z.email();
|
|
41
|
+
|
|
35
42
|
export type EmailFromType = z.infer<typeof EmailFrom>;
|
|
36
43
|
|
|
37
44
|
export const EmailTo = z.email();
|
|
45
|
+
|
|
38
46
|
export type EmailToType = z.infer<typeof EmailTo>;
|
|
39
47
|
|
|
40
48
|
export const EmailAttachment = z.object({ filename: Path, path: Path });
|
|
49
|
+
|
|
41
50
|
export type EmailAttachmentType = z.infer<typeof EmailAttachment>;
|
|
42
51
|
|
|
43
52
|
export class Mailer {
|
package/src/node-env.vo.ts
CHANGED
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
import { z } from "zod/v4";
|
|
2
|
+
|
|
3
|
+
import { ImageEXIF } from "./image-exif.service";
|
|
4
|
+
import { Path, PathType } from "./path.vo";
|
|
5
|
+
import { UrlWithoutTrailingSlashType } from "./url-wo-trailing-slash.vo";
|
|
6
|
+
|
|
7
|
+
export const OpenGraphTitleValue = z.string().min(1);
|
|
8
|
+
|
|
9
|
+
export type OpenGraphTitleValueType = z.infer<typeof OpenGraphTitleValue>;
|
|
10
|
+
|
|
11
|
+
export const OpenGraphDescriptionValue = z.string().min(1);
|
|
12
|
+
|
|
13
|
+
export type OpenGraphDescriptionValueType = z.infer<typeof OpenGraphDescriptionValue>;
|
|
14
|
+
|
|
15
|
+
export const OpenGraphUrlValue = z.string().min(1);
|
|
16
|
+
|
|
17
|
+
export type OpenGraphUrlValueType = z.infer<typeof OpenGraphUrlValue>;
|
|
18
|
+
|
|
19
|
+
export const OpenGraphTypeValue = z.union([z.literal("website"), z.literal("article")]);
|
|
20
|
+
|
|
21
|
+
export type OpenGraphTypeValueType = z.infer<typeof OpenGraphTypeValue>;
|
|
22
|
+
|
|
23
|
+
export const OpenGraphImageUrlValue = z.url();
|
|
24
|
+
|
|
25
|
+
export type OpenGraphImageUrlValueType = z.infer<typeof OpenGraphImageUrlValue>;
|
|
26
|
+
|
|
27
|
+
export const OpenGraphImageTypeValue = z.string().min(1);
|
|
28
|
+
|
|
29
|
+
export type OpenGraphImageTypeValueType = z.infer<typeof OpenGraphImageTypeValue>;
|
|
30
|
+
|
|
31
|
+
export const OpenGraphImageWidthValue = z
|
|
32
|
+
.number()
|
|
33
|
+
.int()
|
|
34
|
+
.positive()
|
|
35
|
+
.refine((value) => value === 1200, {
|
|
36
|
+
message: "open.graph.image.width.invalid",
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
export type OpenGraphImageWidthValueType = z.infer<typeof OpenGraphImageWidthValue>;
|
|
40
|
+
|
|
41
|
+
export const OpenGraphImageHeightValue = z
|
|
42
|
+
.number()
|
|
43
|
+
.int()
|
|
44
|
+
.positive()
|
|
45
|
+
.refine((value) => value === 630, {
|
|
46
|
+
message: "open.graph.image.height.invalid",
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
export type OpenGraphImageHeightValueType = z.infer<typeof OpenGraphImageHeightValue>;
|
|
50
|
+
|
|
51
|
+
class OpenGraphTitle {
|
|
52
|
+
private readonly value: OpenGraphTitleValueType;
|
|
53
|
+
|
|
54
|
+
constructor(value: OpenGraphTitleValueType) {
|
|
55
|
+
this.value = OpenGraphTitleValue.parse(value);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
toMetatag(): string {
|
|
59
|
+
return `<meta property="og:title" content="${this.value}" />`;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
toMeta(): string {
|
|
63
|
+
return `${this.toMetatag()}\n\t`;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
class OpenGraphDescription {
|
|
68
|
+
private readonly value: OpenGraphDescriptionValueType;
|
|
69
|
+
|
|
70
|
+
constructor(value: OpenGraphDescriptionValueType) {
|
|
71
|
+
this.value = OpenGraphDescriptionValue.parse(value);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
toMetatag(): string {
|
|
75
|
+
return `<meta property="og:description" content="${this.value}" />`;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
toMeta(): string {
|
|
79
|
+
return `${this.toMetatag()}\n\t`;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
class OpenGraphUrl {
|
|
84
|
+
private readonly value: OpenGraphUrlValueType;
|
|
85
|
+
|
|
86
|
+
constructor(value: OpenGraphUrlValueType) {
|
|
87
|
+
this.value = OpenGraphUrlValue.parse(value);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
toMetatag(): string {
|
|
91
|
+
return `<meta property="og:url" content="${this.value}" />`;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
toMeta(): string {
|
|
95
|
+
return `${this.toMetatag()}\n\t`;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
class OpenGraphType {
|
|
100
|
+
private readonly value: OpenGraphTypeValueType;
|
|
101
|
+
|
|
102
|
+
constructor(value: OpenGraphTypeValueType) {
|
|
103
|
+
this.value = OpenGraphTypeValue.parse(value);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
toMetatag(): string {
|
|
107
|
+
return `<meta property="og:type" content="${this.value}" />`;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
toMeta(): string {
|
|
111
|
+
return `${this.toMetatag()}\n\t`;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
class OpenGraphImageUrl {
|
|
116
|
+
private readonly value: OpenGraphImageUrlValueType;
|
|
117
|
+
|
|
118
|
+
constructor(path: PathType) {
|
|
119
|
+
this.value = OpenGraphImageUrlValue.parse(path);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
toMetatag(): string {
|
|
123
|
+
return `<meta property="og:image" content="${this.value}" />`;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
toMeta(): string {
|
|
127
|
+
return `${this.toMetatag()}\n\t`;
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
class OpenGraphImageType {
|
|
132
|
+
private readonly value: OpenGraphImageTypeValueType;
|
|
133
|
+
|
|
134
|
+
constructor(value: OpenGraphImageTypeValueType) {
|
|
135
|
+
this.value = OpenGraphImageTypeValue.parse(value);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
toMetatag(): string {
|
|
139
|
+
return `<meta property="og:image:type" content="${this.value}" />`;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
toMeta(): string {
|
|
143
|
+
return `${this.toMetatag()}\n\t`;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
class OpenGraphImageWidth {
|
|
148
|
+
private readonly value: OpenGraphImageWidthValueType;
|
|
149
|
+
|
|
150
|
+
constructor(value: OpenGraphImageWidthValueType) {
|
|
151
|
+
this.value = OpenGraphImageWidthValue.parse(value);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
toMetatag(): string {
|
|
155
|
+
return `<meta property="og:image:width" content="${this.value}" />`;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
toMeta(): string {
|
|
159
|
+
return `${this.toMetatag()}\n\t`;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
class OpenGraphImageHeight {
|
|
164
|
+
private readonly value: OpenGraphImageHeightValueType;
|
|
165
|
+
|
|
166
|
+
constructor(value: OpenGraphImageHeightValueType) {
|
|
167
|
+
this.value = OpenGraphImageHeightValue.parse(value);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
toMetatag(): string {
|
|
171
|
+
return `<meta property="og:image:height" content="${this.value}" />`;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
toMeta(): string {
|
|
175
|
+
return `${this.toMetatag()}\n\t`;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
export type OpenGraphImageConfigType = {
|
|
180
|
+
url: OpenGraphImageUrl;
|
|
181
|
+
width: OpenGraphImageWidth;
|
|
182
|
+
height: OpenGraphImageHeight;
|
|
183
|
+
type: OpenGraphImageType;
|
|
184
|
+
};
|
|
185
|
+
|
|
186
|
+
export class OpenGraphImage {
|
|
187
|
+
private readonly value: OpenGraphImageConfigType;
|
|
188
|
+
|
|
189
|
+
constructor(value: OpenGraphImageConfigType) {
|
|
190
|
+
this.value = value;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
toString() {
|
|
194
|
+
let output = "";
|
|
195
|
+
|
|
196
|
+
output += this.value.url.toMeta();
|
|
197
|
+
output += this.value.width.toMeta();
|
|
198
|
+
output += this.value.height.toMeta();
|
|
199
|
+
output += this.value.type.toMeta();
|
|
200
|
+
|
|
201
|
+
return output;
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
class OpenGraphImageGenerator {
|
|
206
|
+
static async generate(config: {
|
|
207
|
+
path: PathType;
|
|
208
|
+
BASE_URL: UrlWithoutTrailingSlashType;
|
|
209
|
+
}) {
|
|
210
|
+
const exif = await ImageEXIF.read(config.path);
|
|
211
|
+
|
|
212
|
+
return new OpenGraphImage({
|
|
213
|
+
url: new OpenGraph.image.url(Path.parse(`${config.BASE_URL}/${exif.name}`)),
|
|
214
|
+
type: new OpenGraph.image.type(exif.mimeType),
|
|
215
|
+
width: new OpenGraph.image.width(exif.width),
|
|
216
|
+
height: new OpenGraph.image.height(exif.height),
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
type OpenGraphConfigType = {
|
|
222
|
+
title: OpenGraphTitle;
|
|
223
|
+
description: OpenGraphDescription;
|
|
224
|
+
url: OpenGraphUrl;
|
|
225
|
+
type: OpenGraphType;
|
|
226
|
+
image?: OpenGraphImage;
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
class OpenGraphGenerator {
|
|
230
|
+
static toString(config: OpenGraphConfigType) {
|
|
231
|
+
let output = "";
|
|
232
|
+
|
|
233
|
+
output += config.title.toMeta();
|
|
234
|
+
output += config.description.toMeta();
|
|
235
|
+
output += config.url.toMeta();
|
|
236
|
+
output += config.type.toMeta();
|
|
237
|
+
|
|
238
|
+
if (config.image) {
|
|
239
|
+
output += config.image.toString();
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
return output;
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
export const OpenGraph = {
|
|
247
|
+
generator: OpenGraphGenerator,
|
|
248
|
+
title: OpenGraphTitle,
|
|
249
|
+
description: OpenGraphDescription,
|
|
250
|
+
url: OpenGraphUrl,
|
|
251
|
+
type: OpenGraphType,
|
|
252
|
+
image: {
|
|
253
|
+
generator: OpenGraphImageGenerator,
|
|
254
|
+
url: OpenGraphImageUrl,
|
|
255
|
+
width: OpenGraphImageWidth,
|
|
256
|
+
height: OpenGraphImageHeight,
|
|
257
|
+
type: OpenGraphImageType,
|
|
258
|
+
},
|
|
259
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Constructor } from "@bgord/tools";
|
|
2
|
+
|
|
3
|
+
type BasePolicyConfig = Record<string, unknown>;
|
|
4
|
+
|
|
5
|
+
export abstract class Policy<T extends BasePolicyConfig> {
|
|
6
|
+
abstract fails(config: T): Promise<boolean> | boolean;
|
|
7
|
+
|
|
8
|
+
abstract error: Constructor<Error>;
|
|
9
|
+
|
|
10
|
+
abstract message: string;
|
|
11
|
+
|
|
12
|
+
throw() {
|
|
13
|
+
throw new this.error();
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
async perform(config: T) {
|
|
17
|
+
if (await this.fails(config)) {
|
|
18
|
+
this.throw();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
async passes(config: T) {
|
|
23
|
+
return !(await this.fails(config));
|
|
24
|
+
}
|
|
25
|
+
}
|