@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,21 +1,47 @@
|
|
|
1
|
+
import type { ClockPort } from "./clock.port";
|
|
2
|
+
import { CorrelationStorage } from "./correlation-storage.service";
|
|
1
3
|
import type { CronSchedulerPort } from "./cron-scheduler.port";
|
|
2
4
|
import type { CronTask } from "./cron-task.vo";
|
|
3
5
|
import type { LoggerPort } from "./logger.port";
|
|
6
|
+
import { Stopwatch } from "./stopwatch.service";
|
|
4
7
|
|
|
5
|
-
type Dependencies = { inner: CronSchedulerPort; Logger: LoggerPort };
|
|
8
|
+
type Dependencies = { inner: CronSchedulerPort; Logger: LoggerPort; Clock: ClockPort };
|
|
6
9
|
|
|
7
10
|
export class CronSchedulerWithLoggerAdapter implements CronSchedulerPort {
|
|
11
|
+
private readonly base = { component: "infra", operation: "cron_scheduler" };
|
|
12
|
+
|
|
8
13
|
constructor(private readonly deps: Dependencies) {}
|
|
9
14
|
|
|
10
15
|
schedule(task: CronTask): void {
|
|
11
|
-
this.deps
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
const duration = new Stopwatch(this.deps);
|
|
17
|
+
|
|
18
|
+
try {
|
|
19
|
+
this.deps.Logger.info({
|
|
20
|
+
message: "Cron scheduler schedule attempt",
|
|
21
|
+
correlationId: CorrelationStorage.get(),
|
|
22
|
+
metadata: { label: task.label, cron: task.cron },
|
|
23
|
+
...this.base,
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
this.deps.inner.schedule(task);
|
|
27
|
+
|
|
28
|
+
this.deps.Logger.info({
|
|
29
|
+
message: "Cron scheduler schedule success",
|
|
30
|
+
correlationId: CorrelationStorage.get(),
|
|
31
|
+
metadata: { label: task.label, cron: task.cron, duration: duration.stop() },
|
|
32
|
+
...this.base,
|
|
33
|
+
});
|
|
34
|
+
} catch (error) {
|
|
35
|
+
this.deps.Logger.error({
|
|
36
|
+
message: "Cron scheduler schedule error",
|
|
37
|
+
correlationId: CorrelationStorage.get(),
|
|
38
|
+
error,
|
|
39
|
+
metadata: { label: task.label, cron: task.cron, duration: duration.stop() },
|
|
40
|
+
...this.base,
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
throw error;
|
|
44
|
+
}
|
|
19
45
|
}
|
|
20
46
|
|
|
21
47
|
async verify(): Promise<boolean> {
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { CryptoKeyProviderPort } from "./crypto-key-provider.port";
|
|
2
|
+
|
|
3
|
+
type Config = { inner: CryptoKeyProviderPort };
|
|
4
|
+
|
|
5
|
+
export class CryptoKeyProviderWithMemoAdapter implements CryptoKeyProviderPort {
|
|
6
|
+
private memoized: Promise<CryptoKey> | null = null;
|
|
7
|
+
|
|
8
|
+
constructor(private readonly config: Config) {}
|
|
9
|
+
|
|
10
|
+
async get(): Promise<CryptoKey> {
|
|
11
|
+
if (this.memoized === null) {
|
|
12
|
+
this.memoized = this.config.inner.get().catch((error) => {
|
|
13
|
+
this.memoized = null;
|
|
14
|
+
|
|
15
|
+
throw error;
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
return this.memoized;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { CacheCodecIdentityStrategy } from "./cache-codec-identity.strategy";
|
|
1
2
|
import type { CacheResolverStrategy } from "./cache-resolver.strategy";
|
|
3
|
+
import type { CacheValueType } from "./cache-value.vo";
|
|
2
4
|
import type {
|
|
3
5
|
EnvironmentLoaderConfig,
|
|
4
6
|
EnvironmentLoaderPort,
|
|
@@ -11,7 +13,11 @@ import { SubjectSegmentFixedStrategy } from "./subject-segment-fixed.strategy";
|
|
|
11
13
|
|
|
12
14
|
type Dependencies = { CacheResolver: CacheResolverStrategy; HashContent: HashContentStrategy };
|
|
13
15
|
|
|
14
|
-
export class EnvironmentLoaderProcessSafeAdapter<T extends object
|
|
16
|
+
export class EnvironmentLoaderProcessSafeAdapter<T extends object & CacheValueType>
|
|
17
|
+
implements EnvironmentLoaderPort<T>
|
|
18
|
+
{
|
|
19
|
+
private readonly codec = new CacheCodecIdentityStrategy<T>();
|
|
20
|
+
|
|
15
21
|
constructor(
|
|
16
22
|
private env: NodeJS.ProcessEnv,
|
|
17
23
|
private readonly config: EnvironmentLoaderConfig<T>,
|
|
@@ -22,8 +28,10 @@ export class EnvironmentLoaderProcessSafeAdapter<T extends object> implements En
|
|
|
22
28
|
const resolver = new SubjectApplicationResolver([new SubjectSegmentFixedStrategy("env")], this.deps);
|
|
23
29
|
const subject = await resolver.resolve();
|
|
24
30
|
|
|
25
|
-
const parsed = await this.deps.CacheResolver.resolve(
|
|
26
|
-
|
|
31
|
+
const parsed = await this.deps.CacheResolver.resolve<T>(
|
|
32
|
+
subject.hex,
|
|
33
|
+
async () => StandardSchemaValidator.validate(this.config.EnvironmentSchema, this.env),
|
|
34
|
+
this.codec,
|
|
27
35
|
);
|
|
28
36
|
|
|
29
37
|
for (const key of Object.keys(parsed)) {
|
|
@@ -31,6 +39,6 @@ export class EnvironmentLoaderProcessSafeAdapter<T extends object> implements En
|
|
|
31
39
|
delete process.env[key];
|
|
32
40
|
}
|
|
33
41
|
|
|
34
|
-
return Object.freeze({
|
|
42
|
+
return Object.freeze(Object.assign({}, parsed, { type: this.config.type }));
|
|
35
43
|
}
|
|
36
44
|
}
|
|
@@ -1,16 +1,21 @@
|
|
|
1
|
+
import type { ClockPort } from "./clock.port";
|
|
1
2
|
import { CorrelationStorage } from "./correlation-storage.service";
|
|
2
3
|
import type { GenericEvent } from "./event.types";
|
|
3
4
|
import type { EventFinderConfig, EventStorePort } from "./event-store.port";
|
|
4
5
|
import type { EventStreamType } from "./event-stream.vo";
|
|
5
6
|
import type { EventValidatorRegistryPort } from "./event-validator-registry.port";
|
|
6
7
|
import type { LoggerPort } from "./logger.port";
|
|
8
|
+
import { Stopwatch } from "./stopwatch.service";
|
|
7
9
|
|
|
8
10
|
type Dependencies<Event extends GenericEvent> = {
|
|
9
11
|
inner: EventStorePort<Event>;
|
|
10
12
|
Logger: LoggerPort;
|
|
13
|
+
Clock: ClockPort;
|
|
11
14
|
};
|
|
12
15
|
|
|
13
16
|
export class EventStoreWithLoggerAdapter<Event extends GenericEvent> implements EventStorePort<Event> {
|
|
17
|
+
private readonly base = { component: "infra", operation: "event_store" };
|
|
18
|
+
|
|
14
19
|
constructor(private readonly deps: Dependencies<Event>) {}
|
|
15
20
|
|
|
16
21
|
async find<FoundEvent extends Event>(
|
|
@@ -18,49 +23,114 @@ export class EventStoreWithLoggerAdapter<Event extends GenericEvent> implements
|
|
|
18
23
|
stream: EventStreamType,
|
|
19
24
|
config?: EventFinderConfig,
|
|
20
25
|
): Promise<ReadonlyArray<FoundEvent>> {
|
|
21
|
-
const
|
|
26
|
+
const duration = new Stopwatch(this.deps);
|
|
27
|
+
|
|
28
|
+
try {
|
|
29
|
+
this.deps.Logger.info({
|
|
30
|
+
message: "Event store find attempt",
|
|
31
|
+
correlationId: CorrelationStorage.get(),
|
|
32
|
+
metadata: { stream, names: registry.names, config },
|
|
33
|
+
...this.base,
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
const result = await this.deps.inner.find(registry, stream, config);
|
|
22
37
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
});
|
|
38
|
+
this.deps.Logger.info({
|
|
39
|
+
message: "Event store find success",
|
|
40
|
+
correlationId: CorrelationStorage.get(),
|
|
41
|
+
metadata: { stream, names: registry.names, config, count: result.length, duration: duration.stop() },
|
|
42
|
+
...this.base,
|
|
43
|
+
});
|
|
30
44
|
|
|
31
|
-
|
|
45
|
+
return result;
|
|
46
|
+
} catch (error) {
|
|
47
|
+
this.deps.Logger.error({
|
|
48
|
+
message: "Event store find error",
|
|
49
|
+
correlationId: CorrelationStorage.get(),
|
|
50
|
+
error,
|
|
51
|
+
metadata: { stream, names: registry.names, config, duration: duration.stop() },
|
|
52
|
+
...this.base,
|
|
53
|
+
});
|
|
54
|
+
|
|
55
|
+
throw error;
|
|
56
|
+
}
|
|
32
57
|
}
|
|
33
58
|
|
|
34
59
|
async findLast<FoundEvent extends Event>(
|
|
35
60
|
registry: EventValidatorRegistryPort<FoundEvent>,
|
|
36
61
|
stream: EventStreamType,
|
|
37
62
|
): Promise<FoundEvent | null> {
|
|
38
|
-
const
|
|
63
|
+
const duration = new Stopwatch(this.deps);
|
|
64
|
+
|
|
65
|
+
try {
|
|
66
|
+
this.deps.Logger.info({
|
|
67
|
+
message: "Event store find last attempt",
|
|
68
|
+
correlationId: CorrelationStorage.get(),
|
|
69
|
+
metadata: { stream, names: registry.names },
|
|
70
|
+
...this.base,
|
|
71
|
+
});
|
|
39
72
|
|
|
40
|
-
|
|
41
|
-
message: "Event store find last",
|
|
42
|
-
component: "infra",
|
|
43
|
-
operation: "event_store_find_last",
|
|
44
|
-
correlationId: CorrelationStorage.get(),
|
|
45
|
-
metadata: { stream, names: registry.names, found: !!result },
|
|
46
|
-
});
|
|
73
|
+
const result = await this.deps.inner.findLast(registry, stream);
|
|
47
74
|
|
|
48
|
-
|
|
75
|
+
this.deps.Logger.info({
|
|
76
|
+
message: "Event store find last success",
|
|
77
|
+
correlationId: CorrelationStorage.get(),
|
|
78
|
+
metadata: { stream, names: registry.names, found: !!result, duration: duration.stop() },
|
|
79
|
+
...this.base,
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
return result;
|
|
83
|
+
} catch (error) {
|
|
84
|
+
this.deps.Logger.error({
|
|
85
|
+
message: "Event store find last error",
|
|
86
|
+
correlationId: CorrelationStorage.get(),
|
|
87
|
+
error,
|
|
88
|
+
metadata: { stream, names: registry.names, duration: duration.stop() },
|
|
89
|
+
...this.base,
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
throw error;
|
|
93
|
+
}
|
|
49
94
|
}
|
|
50
95
|
|
|
51
96
|
async save<SavedEvent extends Event>(
|
|
52
97
|
events: ReadonlyArray<SavedEvent>,
|
|
53
98
|
): Promise<ReadonlyArray<SavedEvent>> {
|
|
54
|
-
const
|
|
99
|
+
const duration = new Stopwatch(this.deps);
|
|
100
|
+
const metadata = {
|
|
101
|
+
stream: events[0]?.stream,
|
|
102
|
+
names: events.map((event) => event.name),
|
|
103
|
+
count: events.length,
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
try {
|
|
107
|
+
this.deps.Logger.info({
|
|
108
|
+
message: "Event store save attempt",
|
|
109
|
+
correlationId: CorrelationStorage.get(),
|
|
110
|
+
metadata,
|
|
111
|
+
...this.base,
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
const result = await this.deps.inner.save(events);
|
|
115
|
+
|
|
116
|
+
this.deps.Logger.info({
|
|
117
|
+
message: "Event store save success",
|
|
118
|
+
correlationId: CorrelationStorage.get(),
|
|
119
|
+
metadata: { ...metadata, duration: duration.stop() },
|
|
120
|
+
...this.base,
|
|
121
|
+
});
|
|
55
122
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
123
|
+
return result;
|
|
124
|
+
} catch (error) {
|
|
125
|
+
this.deps.Logger.error({
|
|
126
|
+
message: "Event store save error",
|
|
127
|
+
correlationId: CorrelationStorage.get(),
|
|
128
|
+
error,
|
|
129
|
+
metadata: { ...metadata, duration: duration.stop() },
|
|
130
|
+
...this.base,
|
|
131
|
+
});
|
|
63
132
|
|
|
64
|
-
|
|
133
|
+
throw error;
|
|
134
|
+
}
|
|
65
135
|
}
|
|
66
136
|
}
|
package/src/event-stream.vo.ts
CHANGED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// [BUN DEPENDENCY]
|
|
2
|
+
import * as tools from "@bgord/tools";
|
|
3
|
+
import * as v from "valibot";
|
|
4
|
+
import { FileDraft } from "./file-draft.service";
|
|
5
|
+
|
|
6
|
+
export class FileDraftTarGz extends FileDraft {
|
|
7
|
+
constructor(
|
|
8
|
+
basename: tools.BasenameType,
|
|
9
|
+
private readonly parts: ReadonlyArray<FileDraft>,
|
|
10
|
+
) {
|
|
11
|
+
super(basename, v.parse(tools.Extension, tools.Mimes.tar.extensions[0]), tools.Mimes.tar.mime);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
async create(): Promise<BodyInit> {
|
|
15
|
+
const parts: Record<string, Uint8Array> = {};
|
|
16
|
+
|
|
17
|
+
for (const part of this.parts) {
|
|
18
|
+
parts[part.filename.get()] = await new Response(await part.create()).bytes();
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return new Bun.Archive(parts, { compress: "gzip" }).blob();
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type * as tools from "@bgord/tools";
|
|
2
|
+
import { CacheCodecIdentityStrategy } from "./cache-codec-identity.strategy";
|
|
2
3
|
import type { CacheResolverStrategy } from "./cache-resolver.strategy";
|
|
3
4
|
import type { FileReaderJsonOutputType, FileReaderJsonPort } from "./file-reader-json.port";
|
|
4
5
|
import type { HashContentStrategy } from "./hash-content.strategy";
|
|
@@ -9,6 +10,8 @@ type Dependencies = { CacheResolver: CacheResolverStrategy; HashContent: HashCon
|
|
|
9
10
|
type Config = { id: string; inner: FileReaderJsonPort };
|
|
10
11
|
|
|
11
12
|
export class FileReaderJsonWithCacheAdapter implements FileReaderJsonPort {
|
|
13
|
+
private readonly codec = new CacheCodecIdentityStrategy<FileReaderJsonOutputType>();
|
|
14
|
+
|
|
12
15
|
constructor(
|
|
13
16
|
private readonly config: Config,
|
|
14
17
|
private readonly deps: Dependencies,
|
|
@@ -28,8 +31,10 @@ export class FileReaderJsonWithCacheAdapter implements FileReaderJsonPort {
|
|
|
28
31
|
|
|
29
32
|
const subject = await resolver.resolve();
|
|
30
33
|
|
|
31
|
-
return this.deps.CacheResolver.resolve<FileReaderJsonOutputType>(
|
|
32
|
-
|
|
34
|
+
return this.deps.CacheResolver.resolve<FileReaderJsonOutputType>(
|
|
35
|
+
subject.hex,
|
|
36
|
+
async () => this.config.inner.read(path),
|
|
37
|
+
this.codec,
|
|
33
38
|
);
|
|
34
39
|
}
|
|
35
40
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type * as tools from "@bgord/tools";
|
|
2
|
+
import { CacheCodecIdentityStrategy } from "./cache-codec-identity.strategy";
|
|
2
3
|
import type { CacheResolverStrategy } from "./cache-resolver.strategy";
|
|
3
4
|
import type { FileReaderTextPort } from "./file-reader-text.port";
|
|
4
5
|
import type { HashContentStrategy } from "./hash-content.strategy";
|
|
@@ -9,6 +10,8 @@ type Dependencies = { CacheResolver: CacheResolverStrategy; HashContent: HashCon
|
|
|
9
10
|
type Config = { id: string; inner: FileReaderTextPort };
|
|
10
11
|
|
|
11
12
|
export class FileReaderTextWithCacheAdapter implements FileReaderTextPort {
|
|
13
|
+
private readonly codec = new CacheCodecIdentityStrategy<string>();
|
|
14
|
+
|
|
12
15
|
constructor(
|
|
13
16
|
private readonly config: Config,
|
|
14
17
|
private readonly deps: Dependencies,
|
|
@@ -26,6 +29,10 @@ export class FileReaderTextWithCacheAdapter implements FileReaderTextPort {
|
|
|
26
29
|
|
|
27
30
|
const subject = await resolver.resolve();
|
|
28
31
|
|
|
29
|
-
return this.deps.CacheResolver.resolve<string>(
|
|
32
|
+
return this.deps.CacheResolver.resolve<string>(
|
|
33
|
+
subject.hex,
|
|
34
|
+
async () => this.config.inner.read(path),
|
|
35
|
+
this.codec,
|
|
36
|
+
);
|
|
30
37
|
}
|
|
31
38
|
}
|
|
@@ -17,9 +17,9 @@ export class HealthcheckHonoHandler implements HandlerHonoPort {
|
|
|
17
17
|
|
|
18
18
|
handle() {
|
|
19
19
|
return factory.createHandlers(async () => {
|
|
20
|
-
const healthcheck = await this.handler.check();
|
|
20
|
+
const { headers, ...healthcheck } = await this.handler.check();
|
|
21
21
|
|
|
22
|
-
return Response.json(healthcheck, { status: healthcheck.code });
|
|
22
|
+
return Response.json(healthcheck, { status: healthcheck.code, headers });
|
|
23
23
|
});
|
|
24
24
|
}
|
|
25
25
|
}
|
|
@@ -87,6 +87,7 @@ export type HealthcheckResult = {
|
|
|
87
87
|
queue?: JobQueueStatsSnapshot;
|
|
88
88
|
ms: tools.Duration["ms"];
|
|
89
89
|
timestamp: tools.TimestampValueType;
|
|
90
|
+
headers: Record<string, string>;
|
|
90
91
|
};
|
|
91
92
|
|
|
92
93
|
export class HealthcheckHandler {
|
|
@@ -175,6 +176,7 @@ export class HealthcheckHandler {
|
|
|
175
176
|
queue: await this.deps.JobQueueStatsProvider?.getStats(),
|
|
176
177
|
ms: stopwatch.stop().ms,
|
|
177
178
|
timestamp: this.deps.Clock.now().ms,
|
|
179
|
+
headers: { "Cache-Control": "no-store" },
|
|
178
180
|
};
|
|
179
181
|
}
|
|
180
182
|
}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import type { MiddlewareHandler } from "hono";
|
|
2
|
-
import { CacheSourceEnum } from "./cache-resolver.strategy";
|
|
3
|
-
import { CacheResponseMiddleware } from "./cache-response.middleware";
|
|
4
2
|
import {
|
|
5
3
|
type HttpLoggerConfig,
|
|
6
4
|
HttpLoggerMiddleware,
|
|
@@ -36,7 +34,6 @@ export class HttpLoggerHonoMiddleware implements MiddlewareHonoPort {
|
|
|
36
34
|
this.middleware.after(context, correlationId, {
|
|
37
35
|
stopwatch,
|
|
38
36
|
status: response.status,
|
|
39
|
-
cacheHit: response.headers.get(CacheResponseMiddleware.CACHE_HIT_HEADER) === CacheSourceEnum.hit,
|
|
40
37
|
responseBody,
|
|
41
38
|
});
|
|
42
39
|
};
|
|
@@ -34,7 +34,6 @@ export type HttpLoggerBeforeResult = { stopwatch: Stopwatch };
|
|
|
34
34
|
export type HttpLoggerAfterInput = {
|
|
35
35
|
stopwatch: Stopwatch;
|
|
36
36
|
status: number;
|
|
37
|
-
cacheHit: boolean;
|
|
38
37
|
responseBody: any;
|
|
39
38
|
};
|
|
40
39
|
|
|
@@ -98,7 +97,6 @@ export class HttpLoggerMiddleware {
|
|
|
98
97
|
status: input.status,
|
|
99
98
|
ms: duration.ms,
|
|
100
99
|
client,
|
|
101
|
-
cacheHit: input.cacheHit,
|
|
102
100
|
metadata: { response: input.responseBody },
|
|
103
101
|
});
|
|
104
102
|
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { CacheRepositoryPort } from "./cache-repository.port";
|
|
2
|
+
import type { Hash } from "./hash.vo";
|
|
3
|
+
import type { IdempotencyStorePort } from "./idempotency-store.port";
|
|
4
|
+
|
|
5
|
+
type Dependencies = { CacheRepository: CacheRepositoryPort };
|
|
6
|
+
|
|
7
|
+
export class IdempotencyStoreCacheAdapter implements IdempotencyStorePort {
|
|
8
|
+
constructor(private readonly deps: Dependencies) {}
|
|
9
|
+
|
|
10
|
+
async claim(subject: Hash): Promise<boolean> {
|
|
11
|
+
const processed = await this.deps.CacheRepository.get(subject);
|
|
12
|
+
|
|
13
|
+
if (processed !== null) return false;
|
|
14
|
+
|
|
15
|
+
await this.deps.CacheRepository.set(subject, true);
|
|
16
|
+
|
|
17
|
+
return true;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { ClockPort } from "./clock.port";
|
|
2
|
+
import { CorrelationStorage } from "./correlation-storage.service";
|
|
3
|
+
import type { Hash } from "./hash.vo";
|
|
4
|
+
import type { IdempotencyStorePort } from "./idempotency-store.port";
|
|
5
|
+
import type { LoggerPort } from "./logger.port";
|
|
6
|
+
import { Stopwatch } from "./stopwatch.service";
|
|
7
|
+
|
|
8
|
+
type Dependencies = { inner: IdempotencyStorePort; Logger: LoggerPort; Clock: ClockPort };
|
|
9
|
+
|
|
10
|
+
export class IdempotencyStoreWithLoggerAdapter implements IdempotencyStorePort {
|
|
11
|
+
private readonly base = { component: "infra", operation: "idempotency_store" };
|
|
12
|
+
|
|
13
|
+
constructor(private readonly deps: Dependencies) {}
|
|
14
|
+
|
|
15
|
+
async claim(subject: Hash): Promise<boolean> {
|
|
16
|
+
const duration = new Stopwatch(this.deps);
|
|
17
|
+
|
|
18
|
+
try {
|
|
19
|
+
this.deps.Logger.info({
|
|
20
|
+
message: "Idempotency store claim attempt",
|
|
21
|
+
correlationId: CorrelationStorage.get(),
|
|
22
|
+
metadata: { subject: subject.get() },
|
|
23
|
+
...this.base,
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
const claimed = await this.deps.inner.claim(subject);
|
|
27
|
+
|
|
28
|
+
if (!claimed) {
|
|
29
|
+
this.deps.Logger.warn({
|
|
30
|
+
message: "Idempotency store claim duplicate",
|
|
31
|
+
correlationId: CorrelationStorage.get(),
|
|
32
|
+
metadata: { subject: subject.get(), duration: duration.stop() },
|
|
33
|
+
...this.base,
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
this.deps.Logger.info({
|
|
40
|
+
message: "Idempotency store claim success",
|
|
41
|
+
correlationId: CorrelationStorage.get(),
|
|
42
|
+
metadata: { subject: subject.get(), duration: duration.stop() },
|
|
43
|
+
...this.base,
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
return true;
|
|
47
|
+
} catch (error) {
|
|
48
|
+
this.deps.Logger.error({
|
|
49
|
+
message: "Idempotency store claim error",
|
|
50
|
+
correlationId: CorrelationStorage.get(),
|
|
51
|
+
error,
|
|
52
|
+
metadata: { subject: subject.get(), duration: duration.stop() },
|
|
53
|
+
...this.base,
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
throw error;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -44,15 +44,18 @@ export * from "./better-auth-logger.service";
|
|
|
44
44
|
export * from "./binary.vo";
|
|
45
45
|
export * from "./bots.vo";
|
|
46
46
|
export * from "./build-info.vo";
|
|
47
|
+
export * from "./cache-codec.strategy";
|
|
48
|
+
export * from "./cache-codec-identity.strategy";
|
|
49
|
+
export * from "./cache-codec-sitemap-entries.strategy";
|
|
47
50
|
export * from "./cache-file.service";
|
|
48
51
|
export * from "./cache-repository.port";
|
|
49
52
|
export * from "./cache-repository-node-cache.adapter";
|
|
50
53
|
export * from "./cache-repository-noop.adapter";
|
|
51
54
|
export * from "./cache-repository-redis.adapter";
|
|
52
55
|
export * from "./cache-resolver.strategy";
|
|
53
|
-
export * from "./cache-resolver-
|
|
54
|
-
export * from "./cache-
|
|
55
|
-
export * from "./cache-
|
|
56
|
+
export * from "./cache-resolver-noop.strategy";
|
|
57
|
+
export * from "./cache-resolver-read-through.strategy";
|
|
58
|
+
export * from "./cache-value.vo";
|
|
56
59
|
export * from "./certificate-inspector.port";
|
|
57
60
|
export * from "./certificate-inspector-noop.adapter";
|
|
58
61
|
export * from "./certificate-inspector-tls.adapter";
|
|
@@ -85,7 +88,7 @@ export * from "./crypto-key-provider.port";
|
|
|
85
88
|
export * from "./crypto-key-provider-file.adapter";
|
|
86
89
|
export * from "./crypto-key-provider-memory.adapter";
|
|
87
90
|
export * from "./crypto-key-provider-noop.adapter";
|
|
88
|
-
export * from "./crypto-key-provider-with-
|
|
91
|
+
export * from "./crypto-key-provider-with-memo.adapter";
|
|
89
92
|
export * from "./csv-stringifier.adapter";
|
|
90
93
|
export * from "./csv-stringifier.port";
|
|
91
94
|
export * from "./csv-stringifier-noop.adapter";
|
|
@@ -147,7 +150,7 @@ export * from "./file-copier.adapter";
|
|
|
147
150
|
export * from "./file-copier.port";
|
|
148
151
|
export * from "./file-copier-noop.adapter";
|
|
149
152
|
export * from "./file-draft.service";
|
|
150
|
-
export * from "./file-draft-
|
|
153
|
+
export * from "./file-draft-tar-gz.service";
|
|
151
154
|
export * from "./file-inspection.adapter";
|
|
152
155
|
export * from "./file-inspection.port";
|
|
153
156
|
export * from "./file-inspection-noop.adapter";
|
|
@@ -206,6 +209,10 @@ export * from "./http-logger-hono.middleware";
|
|
|
206
209
|
export * from "./id-provider.port";
|
|
207
210
|
export * from "./id-provider-crypto.adapter";
|
|
208
211
|
export * from "./id-provider-deterministic.adapter";
|
|
212
|
+
export * from "./idempotency-store.port";
|
|
213
|
+
export * from "./idempotency-store-cache.adapter";
|
|
214
|
+
export * from "./idempotency-store-noop.adapter";
|
|
215
|
+
export * from "./idempotency-store-with-logger.adapter";
|
|
209
216
|
export * from "./image.types";
|
|
210
217
|
export * from "./image-blur.adapter";
|
|
211
218
|
export * from "./image-blur.port";
|
|
@@ -376,6 +383,7 @@ export * from "./randomness.strategy";
|
|
|
376
383
|
export * from "./randomness-crypto.strategy";
|
|
377
384
|
export * from "./randomness-math.strategy";
|
|
378
385
|
export * from "./randomness-noop.strategy";
|
|
386
|
+
export * from "./rate-limiter.service";
|
|
379
387
|
export * from "./reactive-config.port";
|
|
380
388
|
export * from "./reactive-config-file-json.adapter";
|
|
381
389
|
export * from "./reactive-config-noop.adapter";
|
|
@@ -547,6 +555,7 @@ export * from "./translations-hono.handler";
|
|
|
547
555
|
export * from "./translations-provider.port";
|
|
548
556
|
export * from "./translations-provider-json.adapter";
|
|
549
557
|
export * from "./translations-provider-noop.adapter";
|
|
558
|
+
export * from "./translations-provider-with-cache.adapter";
|
|
550
559
|
export * from "./translator.service";
|
|
551
560
|
export * from "./uptime.service";
|
|
552
561
|
export * from "./uuid.vo";
|
|
@@ -560,13 +569,17 @@ export * from "./weak-etag-extractor-hono.middleware";
|
|
|
560
569
|
export * from "./weak-etag-extractor-param.strategy";
|
|
561
570
|
export * from "./webhook-body-builder.strategy";
|
|
562
571
|
export * from "./webhook-body-builder-text.strategy";
|
|
572
|
+
export * from "./webhook-id.vo";
|
|
573
|
+
export * from "./webhook-id-extractor.strategy";
|
|
574
|
+
export * from "./webhook-id-extractor-header.strategy";
|
|
575
|
+
export * from "./webhook-id-extractor-json-field.strategy";
|
|
563
576
|
export * from "./webhook-secret.vo";
|
|
564
577
|
export * from "./webhook-signature.vo";
|
|
565
578
|
export * from "./webhook-signature-creator.strategy";
|
|
566
579
|
export * from "./webhook-signature-creator-noop.strategy";
|
|
567
580
|
export * from "./webhook-signature-creator-sha256.strategy";
|
|
568
581
|
export * from "./webhook-signature-extractor.strategy";
|
|
569
|
-
export * from "./webhook-signature-extractor-header
|
|
582
|
+
export * from "./webhook-signature-extractor-header.strategy";
|
|
570
583
|
export * from "./webhook-verifier.strategy";
|
|
571
584
|
export * from "./webhook-verifier-noop.strategy";
|
|
572
585
|
export * from "./webhook-verifier-sha256.strategy";
|