@bgord/bun 1.21.11 → 1.22.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/alert-channel-composite.adapter.d.ts.map +1 -1
- package/dist/alert-channel-composite.adapter.js +1 -0
- package/dist/alert-channel-composite.adapter.js.map +1 -1
- package/dist/api-version.middleware.d.ts +1 -0
- package/dist/api-version.middleware.d.ts.map +1 -1
- package/dist/api-version.middleware.js +3 -1
- package/dist/api-version.middleware.js.map +1 -1
- package/dist/cache-codec-identity.strategy.d.ts +7 -0
- package/dist/cache-codec-identity.strategy.d.ts.map +1 -0
- package/dist/cache-codec-identity.strategy.js +9 -0
- package/dist/cache-codec-identity.strategy.js.map +1 -0
- package/dist/cache-codec-sitemap-entries.strategy.d.ts +11 -0
- package/dist/cache-codec-sitemap-entries.strategy.d.ts.map +1 -0
- package/dist/cache-codec-sitemap-entries.strategy.js +13 -0
- package/dist/cache-codec-sitemap-entries.strategy.js.map +1 -0
- package/dist/cache-codec.strategy.d.ts +6 -0
- package/dist/cache-codec.strategy.d.ts.map +1 -0
- package/dist/cache-codec.strategy.js +2 -0
- package/dist/cache-codec.strategy.js.map +1 -0
- package/dist/cache-repository-node-cache.adapter.d.ts +3 -2
- package/dist/cache-repository-node-cache.adapter.d.ts.map +1 -1
- package/dist/cache-repository-node-cache.adapter.js +6 -4
- package/dist/cache-repository-node-cache.adapter.js.map +1 -1
- package/dist/cache-repository-noop.adapter.d.ts +3 -2
- package/dist/cache-repository-noop.adapter.d.ts.map +1 -1
- package/dist/cache-repository-noop.adapter.js.map +1 -1
- package/dist/cache-repository-redis.adapter.d.ts +3 -2
- package/dist/cache-repository-redis.adapter.d.ts.map +1 -1
- package/dist/cache-repository-redis.adapter.js +8 -5
- package/dist/cache-repository-redis.adapter.js.map +1 -1
- package/dist/cache-repository.port.d.ts +3 -2
- package/dist/cache-repository.port.d.ts.map +1 -1
- package/dist/cache-resolver-noop.strategy.d.ts +8 -0
- package/dist/cache-resolver-noop.strategy.d.ts.map +1 -0
- package/dist/cache-resolver-noop.strategy.js +7 -0
- package/dist/cache-resolver-noop.strategy.js.map +1 -0
- package/dist/cache-resolver-read-through.strategy.d.ts +15 -0
- package/dist/cache-resolver-read-through.strategy.d.ts.map +1 -0
- package/dist/cache-resolver-read-through.strategy.js +21 -0
- package/dist/cache-resolver-read-through.strategy.js.map +1 -0
- package/dist/cache-resolver.strategy.d.ts +2 -9
- package/dist/cache-resolver.strategy.d.ts.map +1 -1
- package/dist/cache-resolver.strategy.js +1 -5
- package/dist/cache-resolver.strategy.js.map +1 -1
- package/dist/cache-value.vo.d.ts +6 -0
- package/dist/cache-value.vo.d.ts.map +1 -0
- package/dist/cache-value.vo.js +2 -0
- package/dist/cache-value.vo.js.map +1 -0
- package/dist/correlation-id.vo.d.ts.map +1 -1
- package/dist/correlation-id.vo.js +1 -0
- package/dist/correlation-id.vo.js.map +1 -1
- package/dist/cron-scheduler-with-logger.adapter.d.ts +3 -0
- package/dist/cron-scheduler-with-logger.adapter.d.ts.map +1 -1
- package/dist/cron-scheduler-with-logger.adapter.js +29 -7
- package/dist/cron-scheduler-with-logger.adapter.js.map +1 -1
- package/dist/cron-task-handler-with-logger.strategy.js +1 -1
- package/dist/cron-task-handler-with-logger.strategy.js.map +1 -1
- package/dist/crypto-key-provider-with-memo.adapter.d.ts +12 -0
- package/dist/crypto-key-provider-with-memo.adapter.d.ts.map +1 -0
- package/dist/crypto-key-provider-with-memo.adapter.js +17 -0
- package/dist/crypto-key-provider-with-memo.adapter.js.map +1 -0
- package/dist/environment-loader-process-safe.adapter.d.ts +3 -1
- package/dist/environment-loader-process-safe.adapter.d.ts.map +1 -1
- package/dist/environment-loader-process-safe.adapter.js +4 -2
- package/dist/environment-loader-process-safe.adapter.js.map +1 -1
- package/dist/event-store-with-logger.adapter.d.ts +3 -0
- package/dist/event-store-with-logger.adapter.d.ts.map +1 -1
- package/dist/event-store-with-logger.adapter.js +88 -27
- package/dist/event-store-with-logger.adapter.js.map +1 -1
- package/dist/event-stream.vo.d.ts.map +1 -1
- package/dist/event-stream.vo.js +3 -1
- package/dist/event-stream.vo.js.map +1 -1
- package/dist/file-draft-tar-gz.service.d.ts +8 -0
- package/dist/file-draft-tar-gz.service.d.ts.map +1 -0
- package/dist/file-draft-tar-gz.service.js +19 -0
- package/dist/file-draft-tar-gz.service.js.map +1 -0
- package/dist/file-reader-json-with-cache.adapter.d.ts +1 -0
- package/dist/file-reader-json-with-cache.adapter.d.ts.map +1 -1
- package/dist/file-reader-json-with-cache.adapter.js +3 -1
- package/dist/file-reader-json-with-cache.adapter.js.map +1 -1
- package/dist/file-reader-text-with-cache.adapter.d.ts +1 -0
- package/dist/file-reader-text-with-cache.adapter.d.ts.map +1 -1
- package/dist/file-reader-text-with-cache.adapter.js +3 -1
- package/dist/file-reader-text-with-cache.adapter.js.map +1 -1
- package/dist/healthcheck-hono.handler.js +2 -2
- package/dist/healthcheck-hono.handler.js.map +1 -1
- package/dist/healthcheck.handler.d.ts +1 -0
- package/dist/healthcheck.handler.d.ts.map +1 -1
- package/dist/healthcheck.handler.js +1 -0
- package/dist/healthcheck.handler.js.map +1 -1
- package/dist/http-logger-hono.middleware.d.ts.map +1 -1
- package/dist/http-logger-hono.middleware.js +0 -3
- package/dist/http-logger-hono.middleware.js.map +1 -1
- package/dist/http-logger.middleware.d.ts +0 -1
- package/dist/http-logger.middleware.d.ts.map +1 -1
- package/dist/http-logger.middleware.js +0 -1
- package/dist/http-logger.middleware.js.map +1 -1
- package/dist/idempotency-store-cache.adapter.d.ts +13 -0
- package/dist/idempotency-store-cache.adapter.d.ts.map +1 -0
- package/dist/idempotency-store-cache.adapter.js +14 -0
- package/dist/idempotency-store-cache.adapter.js.map +1 -0
- package/dist/idempotency-store-noop.adapter.d.ts +6 -0
- package/dist/idempotency-store-noop.adapter.d.ts.map +1 -0
- package/dist/idempotency-store-noop.adapter.js +6 -0
- package/dist/idempotency-store-noop.adapter.js.map +1 -0
- package/dist/idempotency-store-with-logger.adapter.d.ts +17 -0
- package/dist/idempotency-store-with-logger.adapter.d.ts.map +1 -0
- package/dist/idempotency-store-with-logger.adapter.js +48 -0
- package/dist/idempotency-store-with-logger.adapter.js.map +1 -0
- package/dist/idempotency-store.port.d.ts +5 -0
- package/dist/idempotency-store.port.d.ts.map +1 -0
- package/dist/idempotency-store.port.js +2 -0
- package/dist/idempotency-store.port.js.map +1 -0
- package/dist/image-generator-web-view.adapter.js +8 -72
- package/dist/image-generator-web-view.adapter.js.map +1 -1
- package/dist/index.d.ts +19 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -6
- package/dist/index.js.map +1 -1
- package/dist/job-queue-with-logger.adapter.d.ts +2 -0
- package/dist/job-queue-with-logger.adapter.d.ts.map +1 -1
- package/dist/job-queue-with-logger.adapter.js +133 -36
- package/dist/job-queue-with-logger.adapter.js.map +1 -1
- package/dist/logger.port.d.ts +0 -1
- package/dist/logger.port.d.ts.map +1 -1
- package/dist/mailer-content-html.vo.js +1 -1
- package/dist/mailer-content-html.vo.js.map +1 -1
- package/dist/message-bus-with-logger.adapter.d.ts +2 -0
- package/dist/message-bus-with-logger.adapter.d.ts.map +1 -1
- package/dist/message-bus-with-logger.adapter.js +28 -8
- package/dist/message-bus-with-logger.adapter.js.map +1 -1
- package/dist/modules/preferences/invariants/user-language-has-changed.d.ts +0 -1
- package/dist/modules/preferences/invariants/user-language-has-changed.d.ts.map +1 -1
- package/dist/modules/preferences/invariants/user-language-has-changed.js +0 -4
- package/dist/modules/preferences/invariants/user-language-has-changed.js.map +1 -1
- package/dist/modules/system/invariants/feature-flag-enabled.d.ts +0 -1
- package/dist/modules/system/invariants/feature-flag-enabled.d.ts.map +1 -1
- package/dist/modules/system/invariants/feature-flag-enabled.js +0 -4
- package/dist/modules/system/invariants/feature-flag-enabled.js.map +1 -1
- package/dist/prerequisite-verifier-sqlite.adapter.js +1 -1
- package/dist/prerequisite-verifier-sqlite.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-with-cache.adapter.d.ts +2 -0
- package/dist/prerequisite-verifier-with-cache.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-with-cache.adapter.js +8 -5
- package/dist/prerequisite-verifier-with-cache.adapter.js.map +1 -1
- package/dist/rate-limiter.service.d.ts +22 -0
- package/dist/rate-limiter.service.d.ts.map +1 -0
- package/dist/rate-limiter.service.js +31 -0
- package/dist/rate-limiter.service.js.map +1 -0
- package/dist/reactive-config-with-cache.adapter.d.ts +3 -1
- package/dist/reactive-config-with-cache.adapter.d.ts.map +1 -1
- package/dist/reactive-config-with-cache.adapter.js +3 -1
- package/dist/reactive-config-with-cache.adapter.js.map +1 -1
- package/dist/request-context-hono.adapter.d.ts.map +1 -1
- package/dist/request-context-hono.adapter.js +4 -1
- package/dist/request-context-hono.adapter.js.map +1 -1
- package/dist/secure-key-generator-crypto.adapter.js +1 -1
- package/dist/secure-key-generator-crypto.adapter.js.map +1 -1
- package/dist/security-rule-violation-threshold.strategy.d.ts.map +1 -1
- package/dist/security-rule-violation-threshold.strategy.js +5 -3
- package/dist/security-rule-violation-threshold.strategy.js.map +1 -1
- package/dist/shield-rate-limit-hono.strategy.d.ts +2 -2
- package/dist/shield-rate-limit-hono.strategy.d.ts.map +1 -1
- package/dist/shield-rate-limit.strategy.d.ts +2 -2
- package/dist/shield-rate-limit.strategy.d.ts.map +1 -1
- package/dist/shield-rate-limit.strategy.js +8 -2
- package/dist/shield-rate-limit.strategy.js.map +1 -1
- package/dist/shield-webhook-hono.strategy.d.ts +2 -2
- package/dist/shield-webhook-hono.strategy.d.ts.map +1 -1
- package/dist/shield-webhook-hono.strategy.js +7 -3
- package/dist/shield-webhook-hono.strategy.js.map +1 -1
- package/dist/shield-webhook.strategy.d.ts +23 -3
- package/dist/shield-webhook.strategy.d.ts.map +1 -1
- package/dist/shield-webhook.strategy.js +18 -4
- package/dist/shield-webhook.strategy.js.map +1 -1
- package/dist/sitemap-entries-provider-with-cache.adapter.d.ts +2 -0
- package/dist/sitemap-entries-provider-with-cache.adapter.d.ts.map +1 -1
- package/dist/sitemap-entries-provider-with-cache.adapter.js +8 -5
- package/dist/sitemap-entries-provider-with-cache.adapter.js.map +1 -1
- package/dist/sitemap-entry.vo.d.ts +11 -10
- package/dist/sitemap-entry.vo.d.ts.map +1 -1
- package/dist/sitemap-entry.vo.js +19 -0
- package/dist/sitemap-entry.vo.js.map +1 -1
- package/dist/smtp-port.vo.d.ts.map +1 -1
- package/dist/smtp-port.vo.js +1 -0
- package/dist/smtp-port.vo.js.map +1 -1
- package/dist/sse-registry-with-logger.adapter.d.ts +2 -0
- package/dist/sse-registry-with-logger.adapter.d.ts.map +1 -1
- package/dist/sse-registry-with-logger.adapter.js +80 -22
- package/dist/sse-registry-with-logger.adapter.js.map +1 -1
- package/dist/translations-provider-with-cache.adapter.d.ts +21 -0
- package/dist/translations-provider-with-cache.adapter.d.ts.map +1 -0
- package/dist/translations-provider-with-cache.adapter.js +22 -0
- package/dist/translations-provider-with-cache.adapter.js.map +1 -0
- package/dist/uuid.vo.js +1 -0
- package/dist/uuid.vo.js.map +1 -1
- package/dist/webhook-id-extractor-header.strategy.d.ts +9 -0
- package/dist/webhook-id-extractor-header.strategy.d.ts.map +1 -0
- package/dist/webhook-id-extractor-header.strategy.js +13 -0
- package/dist/webhook-id-extractor-header.strategy.js.map +1 -0
- package/dist/webhook-id-extractor-json-field.strategy.d.ts +9 -0
- package/dist/webhook-id-extractor-json-field.strategy.d.ts.map +1 -0
- package/dist/webhook-id-extractor-json-field.strategy.js +14 -0
- package/dist/webhook-id-extractor-json-field.strategy.js.map +1 -0
- package/dist/webhook-id-extractor.strategy.d.ts +6 -0
- package/dist/webhook-id-extractor.strategy.d.ts.map +1 -0
- package/dist/webhook-id-extractor.strategy.js +2 -0
- package/dist/webhook-id-extractor.strategy.js.map +1 -0
- package/dist/webhook-id.vo.d.ts +9 -0
- package/dist/webhook-id.vo.d.ts.map +1 -0
- package/dist/webhook-id.vo.js +10 -0
- package/dist/webhook-id.vo.js.map +1 -0
- package/dist/{webhook-signature-extractor-header-exact.strategy.d.ts → webhook-signature-extractor-header.strategy.d.ts} +2 -2
- package/dist/webhook-signature-extractor-header.strategy.d.ts.map +1 -0
- package/dist/{webhook-signature-extractor-header-exact.strategy.js → webhook-signature-extractor-header.strategy.js} +2 -2
- package/dist/webhook-signature-extractor-header.strategy.js.map +1 -0
- package/package.json +12 -18
- package/readme.md +19 -6
- package/src/alert-channel-composite.adapter.ts +1 -0
- package/src/api-version.middleware.ts +6 -2
- package/src/cache-codec-identity.strategy.ts +12 -0
- package/src/cache-codec-sitemap-entries.strategy.ts +17 -0
- package/src/cache-codec.strategy.ts +6 -0
- package/src/cache-repository-node-cache.adapter.ts +9 -5
- package/src/cache-repository-noop.adapter.ts +3 -2
- package/src/cache-repository-redis.adapter.ts +10 -7
- package/src/cache-repository.port.ts +3 -2
- package/src/cache-resolver-noop.strategy.ts +11 -0
- package/src/cache-resolver-read-through.strategy.ts +27 -0
- package/src/cache-resolver.strategy.ts +2 -11
- package/src/cache-value.vo.ts +9 -0
- package/src/correlation-id.vo.ts +1 -0
- package/src/cron-scheduler-with-logger.adapter.ts +35 -9
- package/src/cron-task-handler-with-logger.strategy.ts +1 -1
- package/src/crypto-key-provider-with-memo.adapter.ts +21 -0
- package/src/environment-loader-process-safe.adapter.ts +12 -4
- package/src/event-store-with-logger.adapter.ts +97 -27
- package/src/event-stream.vo.ts +1 -0
- package/src/file-draft-tar-gz.service.ts +23 -0
- package/src/file-reader-json-with-cache.adapter.ts +7 -2
- package/src/file-reader-text-with-cache.adapter.ts +8 -1
- package/src/healthcheck-hono.handler.ts +2 -2
- package/src/healthcheck.handler.ts +2 -0
- package/src/http-logger-hono.middleware.ts +0 -3
- package/src/http-logger.middleware.ts +0 -2
- package/src/idempotency-store-cache.adapter.ts +19 -0
- package/src/idempotency-store-noop.adapter.ts +8 -0
- package/src/idempotency-store-with-logger.adapter.ts +59 -0
- package/src/idempotency-store.port.ts +5 -0
- package/src/index.ts +19 -6
- package/src/job-queue-with-logger.adapter.ts +156 -43
- package/src/logger.port.ts +0 -1
- package/src/message-bus-with-logger.adapter.ts +37 -10
- package/src/modules/preferences/invariants/user-language-has-changed.ts +1 -6
- package/src/modules/system/invariants/feature-flag-enabled.ts +1 -6
- package/src/prerequisite-verifier-sqlite.adapter.ts +1 -1
- package/src/prerequisite-verifier-with-cache.adapter.ts +13 -7
- package/src/rate-limiter.service.ts +45 -0
- package/src/reactive-config-with-cache.adapter.ts +8 -2
- package/src/request-context-hono.adapter.ts +5 -1
- package/src/security-rule-violation-threshold.strategy.ts +5 -6
- package/src/shield-rate-limit-hono.strategy.ts +2 -2
- package/src/shield-rate-limit.strategy.ts +14 -7
- package/src/shield-webhook-hono.strategy.ts +11 -3
- package/src/shield-webhook.strategy.ts +41 -6
- package/src/sitemap-entries-provider-with-cache.adapter.ts +13 -7
- package/src/sitemap-entry.vo.ts +23 -11
- package/src/smtp-port.vo.ts +1 -0
- package/src/sse-registry-with-logger.adapter.ts +94 -25
- package/src/translations-provider-with-cache.adapter.ts +38 -0
- package/src/uuid.vo.ts +1 -1
- package/src/webhook-id-extractor-header.strategy.ts +14 -0
- package/src/webhook-id-extractor-json-field.strategy.ts +16 -0
- package/src/webhook-id-extractor.strategy.ts +6 -0
- package/src/webhook-id.vo.ts +17 -0
- package/src/{webhook-signature-extractor-header-exact.strategy.ts → webhook-signature-extractor-header.strategy.ts} +1 -1
- package/dist/cache-resolver-simple.strategy.d.ts +0 -18
- package/dist/cache-resolver-simple.strategy.d.ts.map +0 -1
- package/dist/cache-resolver-simple.strategy.js +0 -23
- package/dist/cache-resolver-simple.strategy.js.map +0 -1
- package/dist/cache-response-hono.middleware.d.ts +0 -9
- package/dist/cache-response-hono.middleware.d.ts.map +0 -1
- package/dist/cache-response-hono.middleware.js +0 -34
- package/dist/cache-response-hono.middleware.js.map +0 -1
- package/dist/cache-response.middleware.d.ts +0 -28
- package/dist/cache-response.middleware.d.ts.map +0 -1
- package/dist/cache-response.middleware.js +0 -20
- package/dist/cache-response.middleware.js.map +0 -1
- package/dist/crypto-key-provider-with-cache.adapter.d.ts +0 -19
- package/dist/crypto-key-provider-with-cache.adapter.d.ts.map +0 -1
- package/dist/crypto-key-provider-with-cache.adapter.js +0 -19
- package/dist/crypto-key-provider-with-cache.adapter.js.map +0 -1
- package/dist/file-draft-zip.service.d.ts +0 -14
- package/dist/file-draft-zip.service.d.ts.map +0 -1
- package/dist/file-draft-zip.service.js +0 -41
- package/dist/file-draft-zip.service.js.map +0 -1
- package/dist/webhook-signature-extractor-header-exact.strategy.d.ts.map +0 -1
- package/dist/webhook-signature-extractor-header-exact.strategy.js.map +0 -1
- package/src/cache-resolver-simple.strategy.ts +0 -33
- package/src/cache-response-hono.middleware.ts +0 -53
- package/src/cache-response.middleware.ts +0 -47
- package/src/crypto-key-provider-with-cache.adapter.ts +0 -30
- package/src/file-draft-zip.service.ts +0 -56
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-signature-extractor-header-exact.strategy.d.ts","sourceRoot":"","sources":["../src/webhook-signature-extractor-header-exact.strategy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAoB,KAAK,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACrF,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,wCAAwC,CAAC;AAEhG,qBAAa,4CAA6C,YAAW,iCAAiC;IACxF,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAnC,YAA6B,MAAM,EAAE,MAAM,EAAI;IAE/C,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,oBAAoB,GAAG,IAAI,CAI9D;CACF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"webhook-signature-extractor-header-exact.strategy.js","sourceRoot":"","sources":["../src/webhook-signature-extractor-header-exact.strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAE7B,OAAO,EAAE,gBAAgB,EAA6B,MAAM,wBAAwB,CAAC;AAGrF,MAAM,OAAO,4CAA4C;IAC1B,MAAM;IAAnC,YAA6B,MAAc;sBAAd,MAAM;IAAW,CAAC;IAE/C,OAAO,CAAC,OAAyB;QAC/B,MAAM,SAAS,GAAG,CAAC,CAAC,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAErF,OAAO,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IACrD,CAAC;CACF"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import type { CacheRepositoryPort } from "./cache-repository.port";
|
|
2
|
-
import { type CacheResolverStrategy, CacheSourceEnum } from "./cache-resolver.strategy";
|
|
3
|
-
import type { Hash } from "./hash.vo";
|
|
4
|
-
|
|
5
|
-
type Dependencies = { CacheRepository: CacheRepositoryPort };
|
|
6
|
-
|
|
7
|
-
export class CacheResolverSimpleStrategy implements CacheResolverStrategy {
|
|
8
|
-
constructor(private readonly deps: Dependencies) {}
|
|
9
|
-
|
|
10
|
-
async resolve<T>(subject: Hash, producer: () => Promise<T>): Promise<T> {
|
|
11
|
-
const result = await this.resolveWithContext(subject, producer);
|
|
12
|
-
|
|
13
|
-
return result.value;
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
async resolveWithContext<T>(
|
|
17
|
-
subject: Hash,
|
|
18
|
-
producer: () => Promise<T>,
|
|
19
|
-
): Promise<{ value: T; source: CacheSourceEnum }> {
|
|
20
|
-
const cached = await this.deps.CacheRepository.get<T>(subject);
|
|
21
|
-
|
|
22
|
-
if (cached !== null) return { value: cached, source: CacheSourceEnum.hit };
|
|
23
|
-
|
|
24
|
-
const value = await producer();
|
|
25
|
-
await this.deps.CacheRepository.set(subject, value);
|
|
26
|
-
|
|
27
|
-
return { value, source: CacheSourceEnum.miss };
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
async flush(): Promise<void> {
|
|
31
|
-
await this.deps.CacheRepository.flush();
|
|
32
|
-
}
|
|
33
|
-
}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import { createMiddleware } from "hono/factory";
|
|
2
|
-
import type { ContentfulStatusCode } from "hono/utils/http-status";
|
|
3
|
-
import {
|
|
4
|
-
CacheResponseMiddleware,
|
|
5
|
-
type CacheResponseMiddlewareConfig,
|
|
6
|
-
type CacheResponseMiddlewareDependencies,
|
|
7
|
-
} from "./cache-response.middleware";
|
|
8
|
-
import type { MiddlewareHonoPort } from "./middleware-hono.port";
|
|
9
|
-
import { RequestContextHonoAdapter } from "./request-context-hono.adapter";
|
|
10
|
-
|
|
11
|
-
export class CacheResponseHonoMiddleware implements MiddlewareHonoPort {
|
|
12
|
-
private readonly middleware: CacheResponseMiddleware;
|
|
13
|
-
|
|
14
|
-
constructor(config: CacheResponseMiddlewareConfig, deps: CacheResponseMiddlewareDependencies) {
|
|
15
|
-
this.middleware = new CacheResponseMiddleware(config, deps);
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
handle() {
|
|
19
|
-
return createMiddleware(async (c, next) => {
|
|
20
|
-
const context = new RequestContextHonoAdapter(c);
|
|
21
|
-
|
|
22
|
-
const result = await this.middleware.evaluate(context, async () => {
|
|
23
|
-
await next();
|
|
24
|
-
|
|
25
|
-
const response = c.res.clone();
|
|
26
|
-
|
|
27
|
-
return {
|
|
28
|
-
body: await response.text(),
|
|
29
|
-
headers: response.headers.toJSON(),
|
|
30
|
-
status: response.status as ContentfulStatusCode,
|
|
31
|
-
};
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
if (!result) return next();
|
|
35
|
-
|
|
36
|
-
c.header(CacheResponseMiddleware.CACHE_HIT_HEADER, result.source);
|
|
37
|
-
|
|
38
|
-
return c.newResponse(
|
|
39
|
-
result.response.body,
|
|
40
|
-
result.response.status as ContentfulStatusCode,
|
|
41
|
-
result.response.headers,
|
|
42
|
-
);
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
clear() {
|
|
47
|
-
return createMiddleware(async (_c, next) => {
|
|
48
|
-
await this.middleware.clear();
|
|
49
|
-
|
|
50
|
-
return next();
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import type { CacheResolverStrategy, CacheSourceEnum } from "./cache-resolver.strategy";
|
|
2
|
-
import type { RequestContext } from "./request-context.port";
|
|
3
|
-
import type { SubjectRequestResolver } from "./subject-request-resolver.vo";
|
|
4
|
-
|
|
5
|
-
export type CacheResponseMiddlewareDependencies = { CacheResolver: CacheResolverStrategy };
|
|
6
|
-
|
|
7
|
-
export type CacheResponseMiddlewareConfig = { enabled: boolean; resolver: SubjectRequestResolver };
|
|
8
|
-
|
|
9
|
-
export type CachedResponse<T = string> = {
|
|
10
|
-
body: T;
|
|
11
|
-
headers: Record<string, string>;
|
|
12
|
-
status: number;
|
|
13
|
-
};
|
|
14
|
-
|
|
15
|
-
export type CacheResponseResult<T = string> = {
|
|
16
|
-
response: CachedResponse<T>;
|
|
17
|
-
source: CacheSourceEnum;
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
export class CacheResponseMiddleware {
|
|
21
|
-
static readonly CACHE_HIT_HEADER = "Cache-Hit";
|
|
22
|
-
|
|
23
|
-
constructor(
|
|
24
|
-
private readonly config: CacheResponseMiddlewareConfig,
|
|
25
|
-
private readonly deps: CacheResponseMiddlewareDependencies,
|
|
26
|
-
) {}
|
|
27
|
-
|
|
28
|
-
async evaluate<T = string>(
|
|
29
|
-
context: RequestContext,
|
|
30
|
-
generateResponse: () => Promise<CachedResponse<T>>,
|
|
31
|
-
): Promise<CacheResponseResult<T> | null> {
|
|
32
|
-
if (!this.config.enabled) return null;
|
|
33
|
-
|
|
34
|
-
const subject = await this.config.resolver.resolve(context);
|
|
35
|
-
|
|
36
|
-
const result = await this.deps.CacheResolver.resolveWithContext<CachedResponse<T>>(
|
|
37
|
-
subject.hex,
|
|
38
|
-
generateResponse,
|
|
39
|
-
);
|
|
40
|
-
|
|
41
|
-
return { response: result.value, source: result.source };
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
async clear(): Promise<void> {
|
|
45
|
-
await this.deps.CacheResolver.flush();
|
|
46
|
-
}
|
|
47
|
-
}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import type { CacheResolverStrategy } from "./cache-resolver.strategy";
|
|
2
|
-
import type { CryptoKeyProviderPort } from "./crypto-key-provider.port";
|
|
3
|
-
import type { HashContentStrategy } from "./hash-content.strategy";
|
|
4
|
-
import { SubjectApplicationResolver } from "./subject-application-resolver.vo";
|
|
5
|
-
import { SubjectSegmentFixedStrategy } from "./subject-segment-fixed.strategy";
|
|
6
|
-
|
|
7
|
-
type Dependencies = { CacheResolver: CacheResolverStrategy; HashContent: HashContentStrategy };
|
|
8
|
-
|
|
9
|
-
type Config = { id: string; inner: CryptoKeyProviderPort };
|
|
10
|
-
|
|
11
|
-
export class CryptoKeyProviderWithCacheAdapter implements CryptoKeyProviderPort {
|
|
12
|
-
constructor(
|
|
13
|
-
private readonly config: Config,
|
|
14
|
-
private readonly deps: Dependencies,
|
|
15
|
-
) {}
|
|
16
|
-
|
|
17
|
-
async get(): Promise<CryptoKey> {
|
|
18
|
-
const resolver = new SubjectApplicationResolver(
|
|
19
|
-
[
|
|
20
|
-
new SubjectSegmentFixedStrategy("crypto_key_provider"),
|
|
21
|
-
new SubjectSegmentFixedStrategy(this.config.id),
|
|
22
|
-
],
|
|
23
|
-
this.deps,
|
|
24
|
-
);
|
|
25
|
-
|
|
26
|
-
const subject = await resolver.resolve();
|
|
27
|
-
|
|
28
|
-
return this.deps.CacheResolver.resolve<CryptoKey>(subject.hex, () => this.config.inner.get());
|
|
29
|
-
}
|
|
30
|
-
}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
// cspell:ignore Yazl
|
|
2
|
-
import { Readable } from "node:stream";
|
|
3
|
-
import * as tools from "@bgord/tools";
|
|
4
|
-
import * as v from "valibot";
|
|
5
|
-
import { DynamicImport } from "./dynamic-import.service";
|
|
6
|
-
import { FileDraft } from "./file-draft.service";
|
|
7
|
-
|
|
8
|
-
export const FileDraftZipError = {
|
|
9
|
-
MissingDependency: "file.draft.zip.error.missing.dependency",
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
type YazlLibrary = typeof import("yazl");
|
|
13
|
-
|
|
14
|
-
export class FileDraftZip extends FileDraft {
|
|
15
|
-
private static readonly importer = DynamicImport.for<YazlLibrary>(
|
|
16
|
-
"yazl",
|
|
17
|
-
FileDraftZipError.MissingDependency,
|
|
18
|
-
);
|
|
19
|
-
|
|
20
|
-
private constructor(
|
|
21
|
-
basename: tools.BasenameType,
|
|
22
|
-
private readonly parts: ReadonlyArray<FileDraft>,
|
|
23
|
-
private readonly yazl: YazlLibrary,
|
|
24
|
-
) {
|
|
25
|
-
super(basename, v.parse(tools.Extension, "zip"), tools.Mimes.zip.mime);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
static async build(basename: tools.BasenameType, parts: ReadonlyArray<FileDraft>): Promise<FileDraftZip> {
|
|
29
|
-
const library = await FileDraftZip.importer.resolve();
|
|
30
|
-
return new FileDraftZip(basename, parts, library);
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
async create(): Promise<BodyInit> {
|
|
34
|
-
const zip = new this.yazl.ZipFile();
|
|
35
|
-
const chunks: Array<Buffer> = [];
|
|
36
|
-
|
|
37
|
-
zip.outputStream.on("data", (buffer: Buffer) => chunks.push(buffer));
|
|
38
|
-
|
|
39
|
-
const output = new Promise<BodyInit>((resolve, reject) => {
|
|
40
|
-
zip.outputStream.on("end", () => resolve(Uint8Array.from(Buffer.concat(chunks))));
|
|
41
|
-
// Stryker disable all
|
|
42
|
-
zip.outputStream.on("error", reject);
|
|
43
|
-
// Stryker restore all
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
for (const part of this.parts) {
|
|
47
|
-
const bytes = await new Response(await part.create()).bytes();
|
|
48
|
-
|
|
49
|
-
zip.addReadStream(Readable.from([bytes]), part.filename.get());
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
zip.end();
|
|
53
|
-
|
|
54
|
-
return output;
|
|
55
|
-
}
|
|
56
|
-
}
|