@bgord/bun 1.19.12 → 1.19.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ab-hono-noop.middleware.d.ts +2 -3
- package/dist/ab-hono-noop.middleware.d.ts.map +1 -1
- package/dist/ab-hono-noop.middleware.js +4 -9
- package/dist/ab-hono-noop.middleware.js.map +1 -1
- package/dist/ab-variant-name.vo.d.ts +9 -0
- package/dist/ab-variant-name.vo.d.ts.map +1 -0
- package/dist/ab-variant-name.vo.js +10 -0
- package/dist/ab-variant-name.vo.js.map +1 -0
- package/dist/ab-variant.vo.d.ts +2 -1
- package/dist/ab-variant.vo.d.ts.map +1 -1
- package/dist/ab-variant.vo.js.map +1 -1
- package/dist/basic-auth-password.vo.d.ts +2 -1
- package/dist/basic-auth-password.vo.d.ts.map +1 -1
- package/dist/basic-auth-password.vo.js +2 -1
- package/dist/basic-auth-password.vo.js.map +1 -1
- package/dist/basic-auth-username.vo.d.ts +2 -1
- package/dist/basic-auth-username.vo.d.ts.map +1 -1
- package/dist/basic-auth-username.vo.js +2 -1
- package/dist/basic-auth-username.vo.js.map +1 -1
- package/dist/cache-repository-redis.adapter.d.ts +1 -2
- package/dist/cache-repository-redis.adapter.d.ts.map +1 -1
- package/dist/cache-repository-redis.adapter.js.map +1 -1
- package/dist/certificate-inspector-noop.adapter.d.ts +2 -1
- package/dist/certificate-inspector-noop.adapter.d.ts.map +1 -1
- package/dist/certificate-inspector-noop.adapter.js.map +1 -1
- package/dist/certificate-inspector-tls.adapter.d.ts +2 -1
- package/dist/certificate-inspector-tls.adapter.d.ts.map +1 -1
- package/dist/certificate-inspector-tls.adapter.js.map +1 -1
- package/dist/certificate-inspector.port.d.ts +2 -1
- package/dist/certificate-inspector.port.d.ts.map +1 -1
- package/dist/csv-stringifier.adapter.d.ts.map +1 -1
- package/dist/csv-stringifier.adapter.js +1 -0
- package/dist/csv-stringifier.adapter.js.map +1 -1
- package/dist/environment-loader-encrypted.adapter.d.ts +1 -1
- package/dist/environment-loader-encrypted.adapter.d.ts.map +1 -1
- package/dist/environment-loader-encrypted.adapter.js +5 -7
- package/dist/environment-loader-encrypted.adapter.js.map +1 -1
- package/dist/environment-loader-noop.adapter.d.ts +1 -1
- package/dist/environment-loader-noop.adapter.d.ts.map +1 -1
- package/dist/environment-loader-noop.adapter.js +5 -7
- package/dist/environment-loader-noop.adapter.js.map +1 -1
- package/dist/environment-loader-process-safe.adapter.d.ts +1 -1
- package/dist/environment-loader-process-safe.adapter.d.ts.map +1 -1
- package/dist/environment-loader-process-safe.adapter.js +2 -9
- package/dist/environment-loader-process-safe.adapter.js.map +1 -1
- package/dist/environment-loader-process.adapter.d.ts +1 -1
- package/dist/environment-loader-process.adapter.d.ts.map +1 -1
- package/dist/environment-loader-process.adapter.js +5 -7
- package/dist/environment-loader-process.adapter.js.map +1 -1
- package/dist/environment-loader.port.d.ts +0 -3
- package/dist/environment-loader.port.d.ts.map +1 -1
- package/dist/environment-loader.port.js +1 -1
- package/dist/environment-loader.port.js.map +1 -1
- package/dist/event-upcaster-chain.adapter.d.ts.map +1 -1
- package/dist/event-upcaster-chain.adapter.js +5 -0
- package/dist/event-upcaster-chain.adapter.js.map +1 -1
- package/dist/event-validator-registry.adapter.d.ts +1 -1
- package/dist/event-validator-registry.adapter.d.ts.map +1 -1
- package/dist/event-validator-registry.adapter.js +2 -7
- package/dist/event-validator-registry.adapter.js.map +1 -1
- package/dist/event-validator-registry.port.d.ts +0 -3
- package/dist/event-validator-registry.port.d.ts.map +1 -1
- package/dist/event-validator-registry.port.js +1 -1
- package/dist/event-validator-registry.port.js.map +1 -1
- package/dist/file-uploader-hono.middleware.d.ts.map +1 -1
- package/dist/file-uploader-hono.middleware.js +4 -13
- package/dist/file-uploader-hono.middleware.js.map +1 -1
- package/dist/file-uploader.middleware.d.ts.map +1 -1
- package/dist/file-uploader.middleware.js +1 -0
- package/dist/file-uploader.middleware.js.map +1 -1
- package/dist/graceful-shutdown.service.d.ts +8 -4
- package/dist/graceful-shutdown.service.d.ts.map +1 -1
- package/dist/graceful-shutdown.service.js +27 -26
- package/dist/graceful-shutdown.service.js.map +1 -1
- package/dist/hostname.vo.d.ts +8 -0
- package/dist/hostname.vo.d.ts.map +1 -0
- package/dist/hostname.vo.js +9 -0
- package/dist/hostname.vo.js.map +1 -0
- package/dist/http-logger.middleware.js +1 -1
- package/dist/http-logger.middleware.js.map +1 -1
- package/dist/image-blur.adapter.d.ts +2 -0
- package/dist/image-blur.adapter.d.ts.map +1 -1
- package/dist/image-blur.adapter.js +1 -1
- package/dist/image-blur.adapter.js.map +1 -1
- package/dist/image-compressor.adapter.d.ts +2 -0
- package/dist/image-compressor.adapter.d.ts.map +1 -1
- package/dist/image-compressor.adapter.js +1 -1
- package/dist/image-compressor.adapter.js.map +1 -1
- package/dist/image-exif-clear.adapter.d.ts +2 -0
- package/dist/image-exif-clear.adapter.d.ts.map +1 -1
- package/dist/image-exif-clear.adapter.js +1 -1
- package/dist/image-exif-clear.adapter.js.map +1 -1
- package/dist/image-formatter.adapter.d.ts +2 -0
- package/dist/image-formatter.adapter.d.ts.map +1 -1
- package/dist/image-formatter.adapter.js +1 -1
- package/dist/image-formatter.adapter.js.map +1 -1
- package/dist/image-generator-web-view.adapter.d.ts.map +1 -1
- package/dist/image-generator-web-view.adapter.js +1 -0
- package/dist/image-generator-web-view.adapter.js.map +1 -1
- package/dist/image-grayscale.adapter.d.ts +2 -0
- package/dist/image-grayscale.adapter.d.ts.map +1 -1
- package/dist/image-grayscale.adapter.js +1 -1
- package/dist/image-grayscale.adapter.js.map +1 -1
- package/dist/image-processor.adapter.d.ts +2 -0
- package/dist/image-processor.adapter.d.ts.map +1 -1
- package/dist/image-processor.adapter.js +1 -1
- package/dist/image-processor.adapter.js.map +1 -1
- package/dist/image-resizer.adapter.d.ts +2 -0
- package/dist/image-resizer.adapter.d.ts.map +1 -1
- package/dist/image-resizer.adapter.js +1 -1
- package/dist/image-resizer.adapter.js.map +1 -1
- package/dist/image.types.d.ts +1 -1
- package/dist/image.types.d.ts.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/job-registry.adapter.d.ts +1 -1
- package/dist/job-registry.adapter.d.ts.map +1 -1
- package/dist/job-registry.adapter.js +2 -7
- package/dist/job-registry.adapter.js.map +1 -1
- package/dist/job-registry.port.d.ts +0 -3
- package/dist/job-registry.port.d.ts.map +1 -1
- package/dist/job-registry.port.js +1 -1
- package/dist/job-registry.port.js.map +1 -1
- package/dist/prerequisite-verifier-binary.adapter.js +1 -1
- package/dist/prerequisite-verifier-binary.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-dns.adapter.d.ts +2 -1
- package/dist/prerequisite-verifier-dns.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-dns.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-ssl-certificate-expiry.adapter.d.ts +2 -1
- package/dist/prerequisite-verifier-ssl-certificate-expiry.adapter.d.ts.map +1 -1
- package/dist/prerequisite-verifier-ssl-certificate-expiry.adapter.js.map +1 -1
- package/dist/prerequisite-verifier-translations.adapter.js +5 -5
- package/dist/prerequisite-verifier-translations.adapter.js.map +1 -1
- package/dist/reactive-config-file-json.adapter.d.ts +1 -1
- package/dist/reactive-config-file-json.adapter.d.ts.map +1 -1
- package/dist/reactive-config-file-json.adapter.js +2 -7
- package/dist/reactive-config-file-json.adapter.js.map +1 -1
- package/dist/reactive-config-noop.adapter.d.ts +1 -1
- package/dist/reactive-config-noop.adapter.d.ts.map +1 -1
- package/dist/reactive-config-noop.adapter.js +2 -7
- package/dist/reactive-config-noop.adapter.js.map +1 -1
- package/dist/reactive-config-with-fallback.adapter.d.ts +1 -1
- package/dist/reactive-config-with-fallback.adapter.d.ts.map +1 -1
- package/dist/reactive-config-with-fallback.adapter.js +2 -7
- package/dist/reactive-config-with-fallback.adapter.js.map +1 -1
- package/dist/reactive-config.port.d.ts +0 -3
- package/dist/reactive-config.port.d.ts.map +1 -1
- package/dist/reactive-config.port.js +1 -1
- package/dist/reactive-config.port.js.map +1 -1
- package/dist/remote-file-storage-disk.adapter.d.ts +2 -0
- package/dist/remote-file-storage-disk.adapter.d.ts.map +1 -1
- package/dist/remote-file-storage-disk.adapter.js +1 -1
- package/dist/remote-file-storage-disk.adapter.js.map +1 -1
- package/dist/shield-api-key.strategy.d.ts.map +1 -1
- package/dist/shield-api-key.strategy.js +6 -1
- package/dist/shield-api-key.strategy.js.map +1 -1
- package/dist/shield-basic-auth.strategy.d.ts.map +1 -1
- package/dist/shield-basic-auth.strategy.js +3 -2
- package/dist/shield-basic-auth.strategy.js.map +1 -1
- package/dist/shield-recaptcha.strategy.js +1 -1
- package/dist/shield-recaptcha.strategy.js.map +1 -1
- package/dist/sitemap-entry.vo.d.ts +1 -0
- package/dist/sitemap-entry.vo.d.ts.map +1 -1
- package/dist/sitemap-entry.vo.js +9 -1
- package/dist/sitemap-entry.vo.js.map +1 -1
- package/dist/standard-schema-validator.service.d.ts +5 -0
- package/dist/standard-schema-validator.service.d.ts.map +1 -0
- package/dist/standard-schema-validator.service.js +14 -0
- package/dist/standard-schema-validator.service.js.map +1 -0
- package/dist/subject-application-resolver.vo.d.ts +0 -1
- package/dist/subject-application-resolver.vo.d.ts.map +1 -1
- package/dist/subject-application-resolver.vo.js +2 -3
- package/dist/subject-application-resolver.vo.js.map +1 -1
- package/dist/subject-request-resolver.vo.d.ts +0 -1
- package/dist/subject-request-resolver.vo.d.ts.map +1 -1
- package/dist/subject-request-resolver.vo.js +2 -3
- package/dist/subject-request-resolver.vo.js.map +1 -1
- package/dist/temporary-file-absolute.adapter.d.ts +2 -0
- package/dist/temporary-file-absolute.adapter.d.ts.map +1 -1
- package/dist/temporary-file-absolute.adapter.js +1 -1
- package/dist/temporary-file-absolute.adapter.js.map +1 -1
- package/dist/timing.middleware.d.ts.map +1 -1
- package/dist/timing.middleware.js +1 -2
- package/dist/timing.middleware.js.map +1 -1
- package/dist/woodchopper-sampling-every-nth.strategy.d.ts.map +1 -1
- package/dist/woodchopper-sampling-every-nth.strategy.js +1 -3
- package/dist/woodchopper-sampling-every-nth.strategy.js.map +1 -1
- package/package.json +7 -7
- package/readme.md +3 -0
- package/src/ab-hono-noop.middleware.ts +2 -13
- package/src/ab-variant-name.vo.ts +17 -0
- package/src/ab-variant.vo.ts +2 -1
- package/src/basic-auth-password.vo.ts +5 -0
- package/src/basic-auth-username.vo.ts +5 -0
- package/src/cache-repository-redis.adapter.ts +1 -2
- package/src/certificate-inspector-noop.adapter.ts +2 -1
- package/src/certificate-inspector-tls.adapter.ts +2 -1
- package/src/certificate-inspector.port.ts +2 -1
- package/src/csv-stringifier.adapter.ts +1 -0
- package/src/environment-loader-encrypted.adapter.ts +9 -9
- package/src/environment-loader-noop.adapter.ts +9 -9
- package/src/environment-loader-process-safe.adapter.ts +8 -11
- package/src/environment-loader-process.adapter.ts +9 -9
- package/src/environment-loader.port.ts +0 -2
- package/src/event-upcaster-chain.adapter.ts +5 -0
- package/src/event-validator-registry.adapter.ts +3 -9
- package/src/event-validator-registry.port.ts +0 -2
- package/src/file-uploader-hono.middleware.ts +3 -17
- package/src/file-uploader.middleware.ts +1 -0
- package/src/graceful-shutdown.service.ts +27 -28
- package/src/hostname.vo.ts +15 -0
- package/src/http-logger.middleware.ts +1 -1
- package/src/image-blur.adapter.ts +9 -2
- package/src/image-compressor.adapter.ts +9 -2
- package/src/image-exif-clear.adapter.ts +9 -2
- package/src/image-formatter.adapter.ts +5 -1
- package/src/image-generator-web-view.adapter.ts +1 -0
- package/src/image-grayscale.adapter.ts +9 -2
- package/src/image-processor.adapter.ts +5 -1
- package/src/image-resizer.adapter.ts +9 -2
- package/src/image.types.ts +1 -1
- package/src/index.ts +2 -0
- package/src/job-registry.adapter.ts +3 -6
- package/src/job-registry.port.ts +0 -2
- package/src/prerequisite-verifier-binary.adapter.ts +1 -1
- package/src/prerequisite-verifier-dns.adapter.ts +2 -1
- package/src/prerequisite-verifier-ssl-certificate-expiry.adapter.ts +2 -1
- package/src/prerequisite-verifier-translations.adapter.ts +4 -4
- package/src/reactive-config-file-json.adapter.ts +3 -9
- package/src/reactive-config-noop.adapter.ts +3 -9
- package/src/reactive-config-with-fallback.adapter.ts +3 -9
- package/src/reactive-config.port.ts +0 -2
- package/src/remote-file-storage-disk.adapter.ts +5 -1
- package/src/shield-api-key.strategy.ts +7 -1
- package/src/shield-basic-auth.strategy.ts +4 -2
- package/src/shield-recaptcha.strategy.ts +1 -1
- package/src/sitemap-entry.vo.ts +11 -4
- package/src/standard-schema-validator.service.ts +15 -0
- package/src/subject-application-resolver.vo.ts +2 -6
- package/src/subject-request-resolver.vo.ts +2 -6
- package/src/temporary-file-absolute.adapter.ts +6 -1
- package/src/timing.middleware.ts +1 -3
- package/src/woodchopper-sampling-every-nth.strategy.ts +1 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shield-api-key.strategy.d.ts","sourceRoot":"","sources":["../src/shield-api-key.strategy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shield-api-key.strategy.d.ts","sourceRoot":"","sources":["../src/shield-api-key.strategy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,MAAM,MAAM,kBAAkB,GAAG;IAAE,OAAO,EAAE,KAAK,CAAC,UAAU,CAAA;CAAE,CAAC;AAE/D,eAAO,MAAM,yBAAyB;IAAK,QAAQ;CAA6B,CAAC;AAEjF,qBAAa,oBAAoB;IAGnB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,MAAM,CAAC,QAAQ,CAAC,WAAW,aAAa;IAExC,YAA6B,MAAM,EAAE,kBAAkB,EAAI;IAE3D,QAAQ,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAO3C;CACF"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { timingSafeEqual } from "node:crypto";
|
|
1
2
|
export const ShieldApiKeyStrategyError = { Rejected: "shield.api.key.rejected" };
|
|
2
3
|
export class ShieldApiKeyStrategy {
|
|
3
4
|
config;
|
|
@@ -6,7 +7,11 @@ export class ShieldApiKeyStrategy {
|
|
|
6
7
|
this.config = config;
|
|
7
8
|
}
|
|
8
9
|
evaluate(context) {
|
|
9
|
-
|
|
10
|
+
const header = context.request.header(ShieldApiKeyStrategy.HEADER_NAME);
|
|
11
|
+
const config = this.config.API_KEY;
|
|
12
|
+
if (header?.length !== config.length)
|
|
13
|
+
return false;
|
|
14
|
+
return timingSafeEqual(Buffer.from(header), Buffer.from(config));
|
|
10
15
|
}
|
|
11
16
|
}
|
|
12
17
|
//# sourceMappingURL=shield-api-key.strategy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shield-api-key.strategy.js","sourceRoot":"","sources":["../src/shield-api-key.strategy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shield-api-key.strategy.js","sourceRoot":"","sources":["../src/shield-api-key.strategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAM9C,MAAM,CAAC,MAAM,yBAAyB,GAAG,EAAE,QAAQ,EAAE,yBAAyB,EAAE,CAAC;AAEjF,MAAM,OAAO,oBAAoB;IAGF,MAAM;IAFnC,MAAM,CAAU,WAAW,GAAG,SAAS,CAAC;IAExC,YAA6B,MAA0B;sBAA1B,MAAM;IAAuB,CAAC;IAE3D,QAAQ,CAAC,OAAyB;QAChC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,oBAAoB,CAAC,WAAW,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;QAEnC,IAAI,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAEnD,OAAO,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACnE,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shield-basic-auth.strategy.d.ts","sourceRoot":"","sources":["../src/shield-basic-auth.strategy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shield-basic-auth.strategy.d.ts","sourceRoot":"","sources":["../src/shield-basic-auth.strategy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE/D,MAAM,MAAM,qBAAqB,GAAG;IAAE,QAAQ,EAAE,qBAAqB,CAAC;IAAC,QAAQ,EAAE,qBAAqB,CAAA;CAAE,CAAC;AAEzG,eAAO,MAAM,4BAA4B;IAAK,QAAQ;CAAgC,CAAC;AAEvF,qBAAa,uBAAuB;IACtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAnC,YAA6B,MAAM,EAAE,qBAAqB,EAAI;IAE9D,QAAQ,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAgB3C;CACF"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { timingSafeEqual } from "node:crypto";
|
|
1
2
|
export const ShieldBasicAuthStrategyError = { Rejected: "shield.basic.auth.rejected" };
|
|
2
3
|
export class ShieldBasicAuthStrategy {
|
|
3
4
|
config;
|
|
@@ -11,9 +12,9 @@ export class ShieldBasicAuthStrategy {
|
|
|
11
12
|
const [username, password] = credentials.split(":");
|
|
12
13
|
if (username !== this.config.username)
|
|
13
14
|
return false;
|
|
14
|
-
if (password !== this.config.password)
|
|
15
|
+
if (password?.length !== this.config.password.length)
|
|
15
16
|
return false;
|
|
16
|
-
return
|
|
17
|
+
return timingSafeEqual(Buffer.from(password), Buffer.from(this.config.password));
|
|
17
18
|
}
|
|
18
19
|
catch {
|
|
19
20
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shield-basic-auth.strategy.js","sourceRoot":"","sources":["../src/shield-basic-auth.strategy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"shield-basic-auth.strategy.js","sourceRoot":"","sources":["../src/shield-basic-auth.strategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAO9C,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,QAAQ,EAAE,4BAA4B,EAAE,CAAC;AAEvF,MAAM,OAAO,uBAAuB;IACL,MAAM;IAAnC,YAA6B,MAA6B;sBAA7B,MAAM;IAA0B,CAAC;IAE9D,QAAQ,CAAC,OAAyB;QAChC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;QAEvD,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;YAE/D,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAEpD,IAAI,QAAQ,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ;gBAAE,OAAO,KAAK,CAAC;YAEpD,IAAI,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM;gBAAE,OAAO,KAAK,CAAC;YAEnE,OAAO,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;QACnF,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF"}
|
|
@@ -14,7 +14,7 @@ export class ShieldRecaptchaStrategy {
|
|
|
14
14
|
try {
|
|
15
15
|
const header = context.request.header("x-recaptcha-token");
|
|
16
16
|
const query = context.request.query()["recaptchaToken"];
|
|
17
|
-
const remoteip = context.request.header("x-forwarded-for") ?? "";
|
|
17
|
+
const remoteip = context.request.header("x-forwarded-for")?.split(",")[0] ?? "";
|
|
18
18
|
const token = header ?? query ?? formToken;
|
|
19
19
|
if (!token)
|
|
20
20
|
return false;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shield-recaptcha.strategy.js","sourceRoot":"","sources":["../src/shield-recaptcha.strategy.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAO7B,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,QAAQ,EAAE,2BAA2B,EAAE,CAAC;AAEtF,MAAM,OAAO,uBAAuB;IAQL,MAAM;IAP3B,MAAM,CAAU,GAAG,GAAG,CAAC,CAAC,KAAK,CACnC,KAAK,CAAC,eAAe,EACrB,iDAAiD,CAClD,CAAC;IAEM,MAAM,CAAU,iBAAiB,GAAG,GAAG,CAAC;IAEhD,YAA6B,MAA6B;sBAA7B,MAAM;IAA0B,CAAC;IAE9D,KAAK,CAAC,QAAQ,CAAC,OAA2C,EAAE,SAAwB;QAClF,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,uBAAuB,CAAC,iBAAiB,CAAC;QAErF,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;YAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,gBAAgB,CAAC,CAAC;YACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"shield-recaptcha.strategy.js","sourceRoot":"","sources":["../src/shield-recaptcha.strategy.ts"],"names":[],"mappings":"AAAA,yBAAyB;AACzB,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,CAAC,MAAM,SAAS,CAAC;AAO7B,MAAM,CAAC,MAAM,4BAA4B,GAAG,EAAE,QAAQ,EAAE,2BAA2B,EAAE,CAAC;AAEtF,MAAM,OAAO,uBAAuB;IAQL,MAAM;IAP3B,MAAM,CAAU,GAAG,GAAG,CAAC,CAAC,KAAK,CACnC,KAAK,CAAC,eAAe,EACrB,iDAAiD,CAClD,CAAC;IAEM,MAAM,CAAU,iBAAiB,GAAG,GAAG,CAAC;IAEhD,YAA6B,MAA6B;sBAA7B,MAAM;IAA0B,CAAC;IAE9D,KAAK,CAAC,QAAQ,CAAC,OAA2C,EAAE,SAAwB;QAClF,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,uBAAuB,CAAC,iBAAiB,CAAC;QAErF,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;YAC3D,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,gBAAgB,CAAC,CAAC;YACxD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAEhF,MAAM,KAAK,GAAG,MAAM,IAAI,KAAK,IAAI,SAAS,CAAC;YAE3C,IAAI,CAAC,KAAK;gBAAE,OAAO,KAAK,CAAC;YAEzB,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAEjG,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,uBAAuB,CAAC,GAAG,EAAE;gBACxD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,mCAAmC,EAAE;gBAChE,IAAI,EAAE,MAAM;aACb,CAAC,CAAC;YAEH,MAAM,MAAM,GAAoB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YAEtD,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,GAAG,SAAS;gBAAE,OAAO,KAAK,CAAC;YAC9D,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sitemap-entry.vo.d.ts","sourceRoot":"","sources":["../src/sitemap-entry.vo.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sitemap-entry.vo.d.ts","sourceRoot":"","sources":["../src/sitemap-entry.vo.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACrE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,GAAG,EAAE,cAAc,CAAC;IACpB,OAAO,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;IAC7B,UAAU,CAAC,EAAE,qBAAqB,CAAC;IACnC,QAAQ,CAAC,EAAE,mBAAmB,CAAC;CAChC,CAAC;AAEF,qBAAa,YAAY;IACX,OAAO,CAAC,QAAQ,CAAC,KAAK;IAAlC,YAA6B,KAAK,EAAE,gBAAgB,EAAI;IAExD,OAAO,CAAC,SAAS;IASjB,KAAK,IAAI,MAAM,CAQd;CACF"}
|
package/dist/sitemap-entry.vo.js
CHANGED
|
@@ -3,11 +3,19 @@ export class SitemapEntry {
|
|
|
3
3
|
constructor(entry) {
|
|
4
4
|
this.entry = entry;
|
|
5
5
|
}
|
|
6
|
+
escapeXml(str) {
|
|
7
|
+
return str
|
|
8
|
+
.replace(/&/g, "&")
|
|
9
|
+
.replace(/</g, "<")
|
|
10
|
+
.replace(/>/g, ">")
|
|
11
|
+
.replace(/"/g, """)
|
|
12
|
+
.replace(/'/g, "'");
|
|
13
|
+
}
|
|
6
14
|
toXml() {
|
|
15
|
+
const loc = `<loc>${this.escapeXml(this.entry.loc)}</loc>`;
|
|
7
16
|
const lastmod = this.entry.lastmod ? `<lastmod>${this.entry.lastmod}</lastmod>` : "";
|
|
8
17
|
const changefreq = this.entry.changefreq ? `<changefreq>${this.entry.changefreq}</changefreq>` : "";
|
|
9
18
|
const priority = this.entry.priority !== undefined ? `<priority>${this.entry.priority.toFixed(1)}</priority>` : "";
|
|
10
|
-
const loc = `<loc>${this.entry.loc}</loc>`;
|
|
11
19
|
return ["<url>", loc, lastmod, changefreq, priority, "</url>"].join("");
|
|
12
20
|
}
|
|
13
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sitemap-entry.vo.js","sourceRoot":"","sources":["../src/sitemap-entry.vo.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sitemap-entry.vo.js","sourceRoot":"","sources":["../src/sitemap-entry.vo.ts"],"names":[],"mappings":"AAaA,MAAM,OAAO,YAAY;IACM,KAAK;IAAlC,YAA6B,KAAuB;qBAAvB,KAAK;IAAqB,CAAC;IAEhD,SAAS,CAAC,GAAW;QAC3B,OAAO,GAAG;aACP,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;aACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;aACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;aACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;aACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC7B,CAAC;IAED,KAAK;QACH,MAAM,GAAG,GAAG,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;QAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QACrF,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,IAAI,CAAC,KAAK,CAAC,UAAU,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC;QACpG,MAAM,QAAQ,GACZ,IAAI,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;QAEpG,OAAO,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;CACF"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { StandardSchemaV1 } from "@standard-schema/spec";
|
|
2
|
+
export declare class StandardSchemaValidator {
|
|
3
|
+
static validate<Output>(schema: StandardSchemaV1<unknown, Output>, raw: unknown): Output;
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=standard-schema-validator.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standard-schema-validator.service.d.ts","sourceRoot":"","sources":["../src/standard-schema-validator.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAM9D,qBAAa,uBAAuB;IAClC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO,GAAG,MAAM,CAMvF;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const StandardSchemaValidatorError = {
|
|
2
|
+
NoAsyncSchema: "standard.schema.validate.error.no.async.schema",
|
|
3
|
+
};
|
|
4
|
+
export class StandardSchemaValidator {
|
|
5
|
+
static validate(schema, raw) {
|
|
6
|
+
const result = schema["~standard"].validate(raw);
|
|
7
|
+
if (result instanceof Promise)
|
|
8
|
+
throw new Error(StandardSchemaValidatorError.NoAsyncSchema);
|
|
9
|
+
if (result.issues)
|
|
10
|
+
throw new Error(result.issues[0]?.message);
|
|
11
|
+
return result.value;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=standard-schema-validator.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"standard-schema-validator.service.js","sourceRoot":"","sources":["../src/standard-schema-validator.service.ts"],"names":[],"mappings":"AAEA,MAAM,4BAA4B,GAAG;IACnC,aAAa,EAAE,gDAAgD;CAChE,CAAC;AAEF,MAAM,OAAO,uBAAuB;IAClC,MAAM,CAAC,QAAQ,CAAS,MAAyC,EAAE,GAAY;QAC7E,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAEjD,IAAI,MAAM,YAAY,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,aAAa,CAAC,CAAC;QAC3F,IAAI,MAAM,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC9D,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;CACF"}
|
|
@@ -12,7 +12,6 @@ export declare const SubjectApplicationResolverError: {
|
|
|
12
12
|
export declare class SubjectApplicationResolver {
|
|
13
13
|
private readonly segments;
|
|
14
14
|
private readonly deps;
|
|
15
|
-
private readonly SEPARATOR;
|
|
16
15
|
constructor(segments: ReadonlyArray<SubjectSegmentApplicationStrategy>, deps: Dependencies);
|
|
17
16
|
resolve(): Promise<{
|
|
18
17
|
hex: Hash;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subject-application-resolver.vo.d.ts","sourceRoot":"","sources":["../src/subject-application-resolver.vo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,wCAAwC,CAAC;AAChG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAE7E,KAAK,YAAY,GAAG;IAAE,WAAW,EAAE,mBAAmB,CAAA;CAAE,CAAC;AAEzD,eAAO,MAAM,+BAA+B;IAC1C,UAAU;IACV,eAAe;CAChB,CAAC;AAEF,qBAAa,0BAA0B;
|
|
1
|
+
{"version":3,"file":"subject-application-resolver.vo.d.ts","sourceRoot":"","sources":["../src/subject-application-resolver.vo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,wCAAwC,CAAC;AAChG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAE7E,KAAK,YAAY,GAAG;IAAE,WAAW,EAAE,mBAAmB,CAAA;CAAE,CAAC;AAEzD,eAAO,MAAM,+BAA+B;IAC1C,UAAU;IACV,eAAe;CAChB,CAAC;AAEF,qBAAa,0BAA0B;IAEnC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFvB,YACmB,QAAQ,EAAE,aAAa,CAAC,iCAAiC,CAAC,EAC1D,IAAI,EAAE,YAAY,EAIpC;IAEK,OAAO,IAAI,OAAO,CAAC;QAAE,GAAG,EAAE,IAAI,CAAC;QAAC,GAAG,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAA;KAAE,CAAC,CAO9E;CACF"}
|
|
@@ -5,7 +5,6 @@ export const SubjectApplicationResolverError = {
|
|
|
5
5
|
export class SubjectApplicationResolver {
|
|
6
6
|
segments;
|
|
7
7
|
deps;
|
|
8
|
-
SEPARATOR = "|";
|
|
9
8
|
constructor(segments, deps) {
|
|
10
9
|
this.segments = segments;
|
|
11
10
|
this.deps = deps;
|
|
@@ -15,8 +14,8 @@ export class SubjectApplicationResolver {
|
|
|
15
14
|
throw new Error(SubjectApplicationResolverError.TooManySegments);
|
|
16
15
|
}
|
|
17
16
|
async resolve() {
|
|
18
|
-
const segments = this.segments.map((segment) => segment.create()
|
|
19
|
-
const subject =
|
|
17
|
+
const segments = this.segments.map((segment) => segment.create());
|
|
18
|
+
const subject = JSON.stringify(segments);
|
|
20
19
|
const hex = await this.deps.HashContent.hash(subject);
|
|
21
20
|
return { hex, raw: segments };
|
|
22
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subject-application-resolver.vo.js","sourceRoot":"","sources":["../src/subject-application-resolver.vo.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,+BAA+B,GAAG;IAC7C,UAAU,EAAE,iCAAiC;IAC7C,eAAe,EAAE,uCAAuC;CACzD,CAAC;AAEF,MAAM,OAAO,0BAA0B;
|
|
1
|
+
{"version":3,"file":"subject-application-resolver.vo.js","sourceRoot":"","sources":["../src/subject-application-resolver.vo.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,+BAA+B,GAAG;IAC7C,UAAU,EAAE,iCAAiC;IAC7C,eAAe,EAAE,uCAAuC;CACzD,CAAC;AAEF,MAAM,OAAO,0BAA0B;IAElB,QAAQ;IACR,IAAI;IAFvB,YACmB,QAA0D,EAC1D,IAAkB;wBADlB,QAAQ;oBACR,IAAI;QAErB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,UAAU,CAAC,CAAC;QAC5F,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,eAAe,CAAC,CAAC;IAClG,CAAC;IAED,KAAK,CAAC,OAAO;QACX,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAClE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAEzC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEtD,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;IAChC,CAAC;CACF"}
|
|
@@ -12,7 +12,6 @@ export declare const SubjectRequestResolverError: {
|
|
|
12
12
|
export declare class SubjectRequestResolver {
|
|
13
13
|
private readonly segments;
|
|
14
14
|
private readonly deps;
|
|
15
|
-
private readonly SEPARATOR;
|
|
16
15
|
constructor(segments: ReadonlyArray<SubjectSegmentRequestStrategy>, deps: Dependencies);
|
|
17
16
|
resolve(context: RequestContext): Promise<{
|
|
18
17
|
hex: Hash;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subject-request-resolver.vo.d.ts","sourceRoot":"","sources":["../src/subject-request-resolver.vo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,6BAA6B,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAE5G,KAAK,YAAY,GAAG;IAAE,WAAW,EAAE,mBAAmB,CAAA;CAAE,CAAC;AAEzD,eAAO,MAAM,2BAA2B;IACtC,UAAU;IACV,eAAe;CAChB,CAAC;AAEF,qBAAa,sBAAsB;
|
|
1
|
+
{"version":3,"file":"subject-request-resolver.vo.d.ts","sourceRoot":"","sources":["../src/subject-request-resolver.vo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,6BAA6B,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAE5G,KAAK,YAAY,GAAG;IAAE,WAAW,EAAE,mBAAmB,CAAA;CAAE,CAAC;AAEzD,eAAO,MAAM,2BAA2B;IACtC,UAAU;IACV,eAAe;CAChB,CAAC;AAEF,qBAAa,sBAAsB;IAE/B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFvB,YACmB,QAAQ,EAAE,aAAa,CAAC,6BAA6B,CAAC,EACtD,IAAI,EAAE,YAAY,EAIpC;IAEK,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC;QAAE,GAAG,EAAE,IAAI,CAAC;QAAC,GAAG,EAAE,aAAa,CAAC,kBAAkB,CAAC,CAAA;KAAE,CAAC,CAOrG;CACF"}
|
|
@@ -5,7 +5,6 @@ export const SubjectRequestResolverError = {
|
|
|
5
5
|
export class SubjectRequestResolver {
|
|
6
6
|
segments;
|
|
7
7
|
deps;
|
|
8
|
-
SEPARATOR = "|";
|
|
9
8
|
constructor(segments, deps) {
|
|
10
9
|
this.segments = segments;
|
|
11
10
|
this.deps = deps;
|
|
@@ -15,8 +14,8 @@ export class SubjectRequestResolver {
|
|
|
15
14
|
throw new Error(SubjectRequestResolverError.TooManySegments);
|
|
16
15
|
}
|
|
17
16
|
async resolve(context) {
|
|
18
|
-
const segments = this.segments.map((segment) => segment.create(context)
|
|
19
|
-
const subject =
|
|
17
|
+
const segments = this.segments.map((segment) => segment.create(context));
|
|
18
|
+
const subject = JSON.stringify(segments);
|
|
20
19
|
const hex = await this.deps.HashContent.hash(subject);
|
|
21
20
|
return { hex, raw: segments };
|
|
22
21
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subject-request-resolver.vo.js","sourceRoot":"","sources":["../src/subject-request-resolver.vo.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,UAAU,EAAE,6BAA6B;IACzC,eAAe,EAAE,mCAAmC;CACrD,CAAC;AAEF,MAAM,OAAO,sBAAsB;
|
|
1
|
+
{"version":3,"file":"subject-request-resolver.vo.js","sourceRoot":"","sources":["../src/subject-request-resolver.vo.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,UAAU,EAAE,6BAA6B;IACzC,eAAe,EAAE,mCAAmC;CACrD,CAAC;AAEF,MAAM,OAAO,sBAAsB;IAEd,QAAQ;IACR,IAAI;IAFvB,YACmB,QAAsD,EACtD,IAAkB;wBADlB,QAAQ;oBACR,IAAI;QAErB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,UAAU,CAAC,CAAC;QACxF,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,EAAE;YAAE,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,eAAe,CAAC,CAAC;IAC9F,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAuB;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACzE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAEzC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEtD,OAAO,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;IAChC,CAAC;CACF"}
|
|
@@ -2,11 +2,13 @@ import * as tools from "@bgord/tools";
|
|
|
2
2
|
import type { FileCleanerPort } from "./file-cleaner.port";
|
|
3
3
|
import type { FileRenamerPort } from "./file-renamer.port";
|
|
4
4
|
import type { FileWriterPort } from "./file-writer.port";
|
|
5
|
+
import type { NonceProviderPort } from "./nonce-provider.port";
|
|
5
6
|
import type { TemporaryFilePort } from "./temporary-file.port";
|
|
6
7
|
type Dependencies = {
|
|
7
8
|
FileCleaner: FileCleanerPort;
|
|
8
9
|
FileRenamer: FileRenamerPort;
|
|
9
10
|
FileWriter: FileWriterPort;
|
|
11
|
+
NonceProvider: NonceProviderPort;
|
|
10
12
|
};
|
|
11
13
|
export declare class TemporaryFileAbsoluteAdapter implements TemporaryFilePort {
|
|
12
14
|
private readonly directory;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"temporary-file-absolute.adapter.d.ts","sourceRoot":"","sources":["../src/temporary-file-absolute.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,KAAK,YAAY,GAAG;IAClB,WAAW,EAAE,eAAe,CAAC;IAC7B,WAAW,EAAE,eAAe,CAAC;IAC7B,UAAU,EAAE,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"temporary-file-absolute.adapter.d.ts","sourceRoot":"","sources":["../src/temporary-file-absolute.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE/D,KAAK,YAAY,GAAG;IAClB,WAAW,EAAE,eAAe,CAAC;IAC7B,WAAW,EAAE,eAAe,CAAC;IAC7B,UAAU,EAAE,cAAc,CAAC;IAC3B,aAAa,EAAE,iBAAiB,CAAC;CAClC,CAAC;AAEF,qBAAa,4BAA6B,YAAW,iBAAiB;IAElE,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFvB,YACmB,SAAS,EAAE,KAAK,CAAC,yBAAyB,EAC1C,IAAI,EAAE,YAAY,EACjC;IAEE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAiBpF;IAEK,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAErD;IAED,IAAI,IAAI,IAAI,KAAK,CAAC,yBAAyB,CAE1C;CACF"}
|
|
@@ -7,7 +7,7 @@ export class TemporaryFileAbsoluteAdapter {
|
|
|
7
7
|
this.deps = deps;
|
|
8
8
|
}
|
|
9
9
|
async write(filename, content) {
|
|
10
|
-
const temporary = tools.FilePathAbsolute.fromPartsSafe(this.directory, filename.withSuffix(
|
|
10
|
+
const temporary = tools.FilePathAbsolute.fromPartsSafe(this.directory, filename.withSuffix(`-part-${this.deps.NonceProvider.generate()}`));
|
|
11
11
|
const final = tools.FilePathAbsolute.fromPartsSafe(this.directory, filename);
|
|
12
12
|
await this.deps.FileWriter.write(temporary.get(), content);
|
|
13
13
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"temporary-file-absolute.adapter.js","sourceRoot":"","sources":["../src/temporary-file-absolute.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"temporary-file-absolute.adapter.js","sourceRoot":"","sources":["../src/temporary-file-absolute.adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAC;AActC,MAAM,OAAO,4BAA4B;IAEpB,SAAS;IACT,IAAI;IAFvB,YACmB,SAA0C,EAC1C,IAAkB;yBADlB,SAAS;oBACT,IAAI;IACpB,CAAC;IAEJ,KAAK,CAAC,KAAK,CAAC,QAAwB,EAAE,OAAa;QACjD,MAAM,SAAS,GAAG,KAAK,CAAC,gBAAgB,CAAC,aAAa,CACpD,IAAI,CAAC,SAAS,EACd,QAAQ,CAAC,UAAU,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,EAAE,CAAC,CACnE,CAAC;QACF,MAAM,KAAK,GAAG,KAAK,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAE7E,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;QAE3D,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACvD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC9C,MAAM,KAAK,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,QAAwB;QACpC,MAAM,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IACrG,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timing.middleware.d.ts","sourceRoot":"","sources":["../src/timing.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG7D,KAAK,YAAY,GAAG;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,CAAC;AAEzC,qBAAa,gBAAgB;IAGf,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,MAAM,CAAC,QAAQ,CAAC,WAAW,mBAAmB;IAE9C,YAA6B,IAAI,EAAE,YAAY,EAAI;IAE7C,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"timing.middleware.d.ts","sourceRoot":"","sources":["../src/timing.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAG7D,KAAK,YAAY,GAAG;IAAE,KAAK,EAAE,SAAS,CAAA;CAAE,CAAC;AAEzC,qBAAa,gBAAgB;IAGf,OAAO,CAAC,QAAQ,CAAC,IAAI;IAFjC,MAAM,CAAC,QAAQ,CAAC,WAAW,mBAAmB;IAE9C,YAA6B,IAAI,EAAE,YAAY,EAAI;IAE7C,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQjG;CACF"}
|
|
@@ -6,8 +6,7 @@ export class TimingMiddleware {
|
|
|
6
6
|
this.deps = deps;
|
|
7
7
|
}
|
|
8
8
|
async measure(context, action) {
|
|
9
|
-
|
|
10
|
-
if (header === "text/event-stream")
|
|
9
|
+
if (context.request.header("accept")?.toLowerCase().startsWith("text/event-stream"))
|
|
11
10
|
return null;
|
|
12
11
|
const stopwatch = new Stopwatch(this.deps);
|
|
13
12
|
await action();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timing.middleware.js","sourceRoot":"","sources":["../src/timing.middleware.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAIhD,MAAM,OAAO,gBAAgB;IAGE,IAAI;IAFjC,MAAM,CAAU,WAAW,GAAG,eAAe,CAAC;IAE9C,YAA6B,IAAkB;oBAAlB,IAAI;IAAiB,CAAC;IAEnD,KAAK,CAAC,OAAO,CAAC,OAAuB,EAAE,MAAkC;QACvE,
|
|
1
|
+
{"version":3,"file":"timing.middleware.js","sourceRoot":"","sources":["../src/timing.middleware.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAIhD,MAAM,OAAO,gBAAgB;IAGE,IAAI;IAFjC,MAAM,CAAU,WAAW,GAAG,eAAe,CAAC;IAE9C,YAA6B,IAAkB;oBAAlB,IAAI;IAAiB,CAAC;IAEnD,KAAK,CAAC,OAAO,CAAC,OAAuB,EAAE,MAAkC;QACvE,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,mBAAmB,CAAC;YAAE,OAAO,IAAI,CAAC;QAEjG,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE3C,MAAM,MAAM,EAAE,CAAC;QAEf,OAAO,aAAa,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;IAC5C,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"woodchopper-sampling-every-nth.strategy.d.ts","sourceRoot":"","sources":["../src/woodchopper-sampling-every-nth.strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAEnF,KAAK,MAAM,GAAG;IAAE,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAA;CAAE,CAAC;AAE/C,qBAAa,2BAA4B,YAAW,2BAA2B;IACjE,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAnC,YAA6B,MAAM,EAAE,MAAM,EAAI;IAE/C,OAAO,CAAC,OAAO,CAAK;IAEpB,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"woodchopper-sampling-every-nth.strategy.d.ts","sourceRoot":"","sources":["../src/woodchopper-sampling-every-nth.strategy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,iCAAiC,CAAC;AAEnF,KAAK,MAAM,GAAG;IAAE,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAA;CAAE,CAAC;AAE/C,qBAAa,2BAA4B,YAAW,2BAA2B;IACjE,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAnC,YAA6B,MAAM,EAAE,MAAM,EAAI;IAE/C,OAAO,CAAC,OAAO,CAAK;IAEpB,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAMnC;CACF"}
|
|
@@ -8,9 +8,7 @@ export class WoodchopperSamplingEveryNth {
|
|
|
8
8
|
// Stryker disable all
|
|
9
9
|
this.counter++;
|
|
10
10
|
// Stryker restore all
|
|
11
|
-
|
|
12
|
-
return false;
|
|
13
|
-
return true;
|
|
11
|
+
return this.counter % this.config.n === 0;
|
|
14
12
|
}
|
|
15
13
|
}
|
|
16
14
|
//# sourceMappingURL=woodchopper-sampling-every-nth.strategy.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"woodchopper-sampling-every-nth.strategy.js","sourceRoot":"","sources":["../src/woodchopper-sampling-every-nth.strategy.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,2BAA2B;IACT,MAAM;IAAnC,YAA6B,MAAc;sBAAd,MAAM;IAAW,CAAC;IAEvC,OAAO,GAAG,CAAC,CAAC;IAEpB,MAAM,CAAC,MAAmB;QACxB,sBAAsB;QACtB,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,sBAAsB;QAEtB,
|
|
1
|
+
{"version":3,"file":"woodchopper-sampling-every-nth.strategy.js","sourceRoot":"","sources":["../src/woodchopper-sampling-every-nth.strategy.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,2BAA2B;IACT,MAAM;IAAnC,YAA6B,MAAc;sBAAd,MAAM;IAAW,CAAC;IAEvC,OAAO,GAAG,CAAC,CAAC;IAEpB,MAAM,CAAC,MAAmB;QACxB,sBAAsB;QACtB,IAAI,CAAC,OAAO,EAAE,CAAC;QACf,sBAAsB;QAEtB,OAAO,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC;CACF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bgord/bun",
|
|
3
|
-
"version": "1.19.
|
|
3
|
+
"version": "1.19.14",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Bartosz Gordon",
|
|
@@ -20,18 +20,18 @@
|
|
|
20
20
|
"build": "bash scripts/package-build.sh"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
|
-
"@biomejs/biome": "2.5.
|
|
23
|
+
"@biomejs/biome": "2.5.1",
|
|
24
24
|
"@standard-schema/spec": "1.1.0",
|
|
25
25
|
"@stryker-mutator/core": "9.6.1",
|
|
26
26
|
"@stryker-mutator/typescript-checker": "9.6.1",
|
|
27
27
|
"@types/bun": "1.3.14",
|
|
28
28
|
"@types/nodemailer": "8.0.1",
|
|
29
29
|
"@types/yazl": "3.3.1",
|
|
30
|
-
"better-auth": "1.6.
|
|
30
|
+
"better-auth": "1.6.22",
|
|
31
31
|
"croner": "10.0.1",
|
|
32
32
|
"cspell": "10.0.1",
|
|
33
33
|
"csv": "6.6.0",
|
|
34
|
-
"fallow": "2.
|
|
34
|
+
"fallow": "2.103.0",
|
|
35
35
|
"lefthook": "2.1.9",
|
|
36
36
|
"lockfile-lint": "5.0.0",
|
|
37
37
|
"nodemailer": "9.0.1",
|
|
@@ -41,13 +41,13 @@
|
|
|
41
41
|
"yazl": "3.3.1"
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@bgord/tools": "1.5.
|
|
44
|
+
"@bgord/tools": "1.5.19",
|
|
45
45
|
"emittery": "2.0.0",
|
|
46
|
-
"hono": "4.12.
|
|
46
|
+
"hono": "4.12.27",
|
|
47
47
|
"node-cache": "5.1.2"
|
|
48
48
|
},
|
|
49
49
|
"peerDependencies": {
|
|
50
|
-
"better-auth": "1.6.
|
|
50
|
+
"better-auth": "1.6.22",
|
|
51
51
|
"csv": "6.6.0",
|
|
52
52
|
"croner": "10.0.1",
|
|
53
53
|
"nodemailer": "9.0.1",
|
package/readme.md
CHANGED
|
@@ -33,6 +33,7 @@ src/
|
|
|
33
33
|
├── ab-assignment.strategy.ts
|
|
34
34
|
├── ab-hono-noop.middleware.ts
|
|
35
35
|
├── ab-hono.middleware.ts
|
|
36
|
+
├── ab-variant-name.vo.ts
|
|
36
37
|
├── ab-variant-selector.service.ts
|
|
37
38
|
├── ab-variant-weight.vo.ts
|
|
38
39
|
├── ab-variant.vo.ts
|
|
@@ -226,6 +227,7 @@ src/
|
|
|
226
227
|
├── hcaptcha.service.ts
|
|
227
228
|
├── healthcheck-hono.handler.ts
|
|
228
229
|
├── healthcheck.handler.ts
|
|
230
|
+
├── hostname.vo.ts
|
|
229
231
|
├── http-logger-hono.middleware.ts
|
|
230
232
|
├── http-logger.middleware.ts
|
|
231
233
|
├── id-provider-crypto.adapter.ts
|
|
@@ -577,6 +579,7 @@ src/
|
|
|
577
579
|
├── ssr-bun.service.ts
|
|
578
580
|
├── ssr-csp.ts
|
|
579
581
|
├── ssr.service.ts
|
|
582
|
+
├── standard-schema-validator.service.ts
|
|
580
583
|
├── static-files-hono.service.ts
|
|
581
584
|
├── stopwatch.service.ts
|
|
582
585
|
├── subject-application-resolver.vo.ts
|
|
@@ -1,24 +1,13 @@
|
|
|
1
1
|
import type { MiddlewareHandler } from "hono";
|
|
2
|
-
import { AbMiddleware } from "./ab.middleware";
|
|
3
|
-
import { AbAssignmentFixedStrategy } from "./ab-assignment-fixed.strategy";
|
|
4
2
|
import type { AbVariant } from "./ab-variant.vo";
|
|
5
|
-
import type { AbVariants } from "./ab-variants.vo";
|
|
6
3
|
import type { MiddlewareHonoPort } from "./middleware-hono.port";
|
|
7
|
-
import { RequestContextHonoAdapter } from "./request-context-hono.adapter";
|
|
8
4
|
|
|
9
5
|
export class AbHonoNoopMiddleware implements MiddlewareHonoPort {
|
|
10
|
-
private readonly
|
|
11
|
-
|
|
12
|
-
constructor(variants: AbVariants, variant: AbVariant) {
|
|
13
|
-
this.middleware = new AbMiddleware(variants, new AbAssignmentFixedStrategy(variant));
|
|
14
|
-
}
|
|
6
|
+
constructor(private readonly variant: AbVariant) {}
|
|
15
7
|
|
|
16
8
|
handle(): MiddlewareHandler {
|
|
17
9
|
return async (c, next) => {
|
|
18
|
-
|
|
19
|
-
const variant = await this.middleware.evaluate(context);
|
|
20
|
-
|
|
21
|
-
c.set("abVariant", variant);
|
|
10
|
+
c.set("abVariant", this.variant);
|
|
22
11
|
|
|
23
12
|
return next();
|
|
24
13
|
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as v from "valibot";
|
|
2
|
+
|
|
3
|
+
export const AbVariantNameError = {
|
|
4
|
+
Type: "ab.variant.name.type",
|
|
5
|
+
Empty: "ab.variant.name.empty",
|
|
6
|
+
TooLong: "ab.variant.name.too.long",
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export const AbVariantName = v.pipe(
|
|
10
|
+
v.string(AbVariantNameError.Type),
|
|
11
|
+
v.minLength(1, AbVariantNameError.Empty),
|
|
12
|
+
v.maxLength(128, AbVariantNameError.TooLong),
|
|
13
|
+
// Stryker disable next-line StringLiteral
|
|
14
|
+
v.brand("AbVariantName"),
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
export type AbVariantNameType = v.InferOutput<typeof AbVariantName>;
|
package/src/ab-variant.vo.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
import type { AbVariantNameType } from "./ab-variant-name.vo";
|
|
1
2
|
import type { AbVariantWeightType } from "./ab-variant-weight.vo";
|
|
2
3
|
|
|
3
|
-
type Config = { name:
|
|
4
|
+
type Config = { name: AbVariantNameType; weight: AbVariantWeightType };
|
|
4
5
|
|
|
5
6
|
export class AbVariant {
|
|
6
7
|
constructor(readonly config: Config) {}
|
|
@@ -4,12 +4,17 @@ export const BasicAuthPasswordError = {
|
|
|
4
4
|
Type: "basic.auth.password.type",
|
|
5
5
|
Empty: "basic.auth.password.empty",
|
|
6
6
|
TooLong: "basic.auth.password.too.long",
|
|
7
|
+
NonLatin: "basic.auth.password.non.latin",
|
|
7
8
|
};
|
|
8
9
|
|
|
9
10
|
export const BasicAuthPassword = v.pipe(
|
|
10
11
|
v.string(BasicAuthPasswordError.Type),
|
|
11
12
|
v.minLength(1, BasicAuthPasswordError.Empty),
|
|
12
13
|
v.maxLength(128, BasicAuthPasswordError.TooLong),
|
|
14
|
+
v.check(
|
|
15
|
+
(value) => [...value].every((character) => character.charCodeAt(0) < 256),
|
|
16
|
+
BasicAuthPasswordError.NonLatin,
|
|
17
|
+
),
|
|
13
18
|
// Stryker disable next-line StringLiteral
|
|
14
19
|
v.brand("BasicAuthPassword"),
|
|
15
20
|
);
|
|
@@ -4,12 +4,17 @@ export const BasicAuthUsernameError = {
|
|
|
4
4
|
Type: "basic.auth.username.type",
|
|
5
5
|
Empty: "basic.auth.username.empty",
|
|
6
6
|
TooLong: "basic.auth.username.too.long",
|
|
7
|
+
NonLatin: "basic.auth.username.non.latin",
|
|
7
8
|
};
|
|
8
9
|
|
|
9
10
|
export const BasicAuthUsername = v.pipe(
|
|
10
11
|
v.string(BasicAuthUsernameError.Type),
|
|
11
12
|
v.minLength(1, BasicAuthUsernameError.Empty),
|
|
12
13
|
v.maxLength(128, BasicAuthUsernameError.TooLong),
|
|
14
|
+
v.check(
|
|
15
|
+
(value) => [...value].every((character) => character.charCodeAt(0) < 256),
|
|
16
|
+
BasicAuthUsernameError.NonLatin,
|
|
17
|
+
),
|
|
13
18
|
// Stryker disable next-line StringLiteral
|
|
14
19
|
v.brand("BasicAuthUsername"),
|
|
15
20
|
);
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
// cSpell:ignore setex
|
|
2
|
-
import type { RedisClient } from "bun";
|
|
3
2
|
import type { CacheRepositoryPort, CacheRepositoryTtlType } from "./cache-repository.port";
|
|
4
3
|
import type { Hash } from "./hash.vo";
|
|
5
4
|
|
|
6
5
|
export class CacheRepositoryRedisAdapter implements CacheRepositoryPort {
|
|
7
6
|
constructor(
|
|
8
|
-
private readonly client: RedisClient,
|
|
7
|
+
private readonly client: Bun.RedisClient,
|
|
9
8
|
private readonly config: CacheRepositoryTtlType,
|
|
10
9
|
) {}
|
|
11
10
|
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type * as tools from "@bgord/tools";
|
|
2
2
|
import type { CertificateInspection, CertificateInspectorPort } from "./certificate-inspector.port";
|
|
3
|
+
import type { HostnameType } from "./hostname.vo";
|
|
3
4
|
|
|
4
5
|
export class CertificateInspectorNoopAdapter implements CertificateInspectorPort {
|
|
5
6
|
constructor(private readonly remaining: tools.Duration) {}
|
|
6
7
|
|
|
7
|
-
async inspect(_hostname:
|
|
8
|
+
async inspect(_hostname: HostnameType): Promise<CertificateInspection> {
|
|
8
9
|
return { success: true, remaining: this.remaining };
|
|
9
10
|
}
|
|
10
11
|
}
|
|
@@ -2,13 +2,14 @@ import tls from "node:tls";
|
|
|
2
2
|
import * as tools from "@bgord/tools";
|
|
3
3
|
import type { CertificateInspection, CertificateInspectorPort } from "./certificate-inspector.port";
|
|
4
4
|
import type { ClockPort } from "./clock.port";
|
|
5
|
+
import type { HostnameType } from "./hostname.vo";
|
|
5
6
|
|
|
6
7
|
type Dependencies = { Clock: ClockPort };
|
|
7
8
|
|
|
8
9
|
export class CertificateInspectorTLSAdapter implements CertificateInspectorPort {
|
|
9
10
|
constructor(private readonly deps: Dependencies) {}
|
|
10
11
|
|
|
11
|
-
async inspect(hostname:
|
|
12
|
+
async inspect(hostname: HostnameType): Promise<CertificateInspection> {
|
|
12
13
|
return new Promise((resolve) => {
|
|
13
14
|
// Stryker disable all
|
|
14
15
|
const cleanup = (socket: tls.TLSSocket) => socket.destroy();
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type * as tools from "@bgord/tools";
|
|
2
|
+
import type { HostnameType } from "./hostname.vo";
|
|
2
3
|
|
|
3
4
|
export type CertificateInspection = { success: true; remaining: tools.Duration } | { success: false };
|
|
4
5
|
|
|
5
6
|
export interface CertificateInspectorPort {
|
|
6
|
-
inspect(hostname:
|
|
7
|
+
inspect(hostname: HostnameType): Promise<CertificateInspection>;
|
|
7
8
|
}
|
|
@@ -24,6 +24,7 @@ export class CsvStringifierAdapter implements CsvStringifierPort {
|
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
async process(columns: ReadonlyArray<CsvColumnType>, data: Array<CsvRowType>): Promise<string> {
|
|
27
|
+
// TODO: Potential formula injection
|
|
27
28
|
return text(this.csv.stringify(data, { header: true, columns }));
|
|
28
29
|
}
|
|
29
30
|
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import util from "node:util";
|
|
2
2
|
import type * as tools from "@bgord/tools";
|
|
3
3
|
import type { EncryptionPort } from "./encryption.port";
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
type EnvironmentResultType,
|
|
4
|
+
import type {
|
|
5
|
+
EnvironmentLoaderConfig,
|
|
6
|
+
EnvironmentLoaderPort,
|
|
7
|
+
EnvironmentResultType,
|
|
9
8
|
} from "./environment-loader.port";
|
|
9
|
+
import { StandardSchemaValidator } from "./standard-schema-validator.service";
|
|
10
10
|
|
|
11
11
|
type Dependencies = { Encryption: EncryptionPort };
|
|
12
12
|
|
|
@@ -22,9 +22,9 @@ export class EnvironmentLoaderEncryptedAdapter<T extends object> implements Envi
|
|
|
22
22
|
const plaintext = new TextDecoder().decode(file);
|
|
23
23
|
const env = util.parseEnv(plaintext);
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
25
|
+
return Object.freeze({
|
|
26
|
+
...StandardSchemaValidator.validate(this.config.EnvironmentSchema, env),
|
|
27
|
+
type: this.config.type,
|
|
28
|
+
});
|
|
29
29
|
}
|
|
30
30
|
}
|