@konker.dev/neverthrow-r-middleware 0.0.2
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/LICENSE +15 -0
- package/README.md +26 -0
- package/dist/handler.d.ts +3 -0
- package/dist/handler.d.ts.map +1 -0
- package/dist/handler.js +2 -0
- package/dist/handler.js.map +1 -0
- package/dist/http/HttpApiError.d.ts +16 -0
- package/dist/http/HttpApiError.d.ts.map +1 -0
- package/dist/http/HttpApiError.js +60 -0
- package/dist/http/HttpApiError.js.map +1 -0
- package/dist/http/HttpApiError.test.d.ts +2 -0
- package/dist/http/HttpApiError.test.d.ts.map +1 -0
- package/dist/http/HttpApiError.test.js +45 -0
- package/dist/http/HttpApiError.test.js.map +1 -0
- package/dist/http/Rec.d.ts +13 -0
- package/dist/http/Rec.d.ts.map +1 -0
- package/dist/http/Rec.js +2 -0
- package/dist/http/Rec.js.map +1 -0
- package/dist/http/RequestResponseHandler.d.ts +7 -0
- package/dist/http/RequestResponseHandler.d.ts.map +1 -0
- package/dist/http/RequestResponseHandler.js +2 -0
- package/dist/http/RequestResponseHandler.js.map +1 -0
- package/dist/http/RequestW.d.ts +14 -0
- package/dist/http/RequestW.d.ts.map +1 -0
- package/dist/http/RequestW.js +17 -0
- package/dist/http/RequestW.js.map +1 -0
- package/dist/http/RequestW.test.d.ts +2 -0
- package/dist/http/RequestW.test.d.ts.map +1 -0
- package/dist/http/RequestW.test.js +26 -0
- package/dist/http/RequestW.test.js.map +1 -0
- package/dist/http/ResponseW.d.ts +11 -0
- package/dist/http/ResponseW.d.ts.map +1 -0
- package/dist/http/ResponseW.js +14 -0
- package/dist/http/ResponseW.js.map +1 -0
- package/dist/http/ResponseW.test.d.ts +2 -0
- package/dist/http/ResponseW.test.d.ts.map +1 -0
- package/dist/http/ResponseW.test.js +23 -0
- package/dist/http/ResponseW.test.js.map +1 -0
- package/dist/http/contrib/apiGatewayProxyEventV2Adapter.d.ts +14 -0
- package/dist/http/contrib/apiGatewayProxyEventV2Adapter.d.ts.map +1 -0
- package/dist/http/contrib/apiGatewayProxyEventV2Adapter.js +26 -0
- package/dist/http/contrib/apiGatewayProxyEventV2Adapter.js.map +1 -0
- package/dist/http/contrib/apiGatewayProxyEventV2Adapter.test.d.ts +2 -0
- package/dist/http/contrib/apiGatewayProxyEventV2Adapter.test.d.ts.map +1 -0
- package/dist/http/contrib/apiGatewayProxyEventV2Adapter.test.js +76 -0
- package/dist/http/contrib/apiGatewayProxyEventV2Adapter.test.js.map +1 -0
- package/dist/http/contrib/base64BodyDecoder.d.ts +7 -0
- package/dist/http/contrib/base64BodyDecoder.d.ts.map +1 -0
- package/dist/http/contrib/base64BodyDecoder.js +15 -0
- package/dist/http/contrib/base64BodyDecoder.js.map +1 -0
- package/dist/http/contrib/base64BodyDecoder.test.d.ts +2 -0
- package/dist/http/contrib/base64BodyDecoder.test.d.ts.map +1 -0
- package/dist/http/contrib/base64BodyDecoder.test.js +47 -0
- package/dist/http/contrib/base64BodyDecoder.test.js.map +1 -0
- package/dist/http/contrib/basicAuthAuthenticator.d.ts +17 -0
- package/dist/http/contrib/basicAuthAuthenticator.d.ts.map +1 -0
- package/dist/http/contrib/basicAuthAuthenticator.js +30 -0
- package/dist/http/contrib/basicAuthAuthenticator.js.map +1 -0
- package/dist/http/contrib/basicAuthAuthenticator.test.d.ts +2 -0
- package/dist/http/contrib/basicAuthAuthenticator.test.d.ts.map +1 -0
- package/dist/http/contrib/basicAuthAuthenticator.test.js +64 -0
- package/dist/http/contrib/basicAuthAuthenticator.test.js.map +1 -0
- package/dist/http/contrib/basicAuthDecoder.d.ts +13 -0
- package/dist/http/contrib/basicAuthDecoder.d.ts.map +1 -0
- package/dist/http/contrib/basicAuthDecoder.js +23 -0
- package/dist/http/contrib/basicAuthDecoder.js.map +1 -0
- package/dist/http/contrib/basicAuthDecoder.test.d.ts +2 -0
- package/dist/http/contrib/basicAuthDecoder.test.d.ts.map +1 -0
- package/dist/http/contrib/basicAuthDecoder.test.js +31 -0
- package/dist/http/contrib/basicAuthDecoder.test.js.map +1 -0
- package/dist/http/contrib/bodyValidator.d.ts +11 -0
- package/dist/http/contrib/bodyValidator.d.ts.map +1 -0
- package/dist/http/contrib/bodyValidator.js +15 -0
- package/dist/http/contrib/bodyValidator.js.map +1 -0
- package/dist/http/contrib/bodyValidator.test.d.ts +2 -0
- package/dist/http/contrib/bodyValidator.test.d.ts.map +1 -0
- package/dist/http/contrib/bodyValidator.test.js +58 -0
- package/dist/http/contrib/bodyValidator.test.js.map +1 -0
- package/dist/http/contrib/envValidator.d.ts +10 -0
- package/dist/http/contrib/envValidator.d.ts.map +1 -0
- package/dist/http/contrib/envValidator.js +12 -0
- package/dist/http/contrib/envValidator.js.map +1 -0
- package/dist/http/contrib/envValidator.test.d.ts +2 -0
- package/dist/http/contrib/envValidator.test.d.ts.map +1 -0
- package/dist/http/contrib/envValidator.test.js +49 -0
- package/dist/http/contrib/envValidator.test.js.map +1 -0
- package/dist/http/contrib/headerSignatureAuthorizer/index.d.ts +13 -0
- package/dist/http/contrib/headerSignatureAuthorizer/index.d.ts.map +1 -0
- package/dist/http/contrib/headerSignatureAuthorizer/index.js +22 -0
- package/dist/http/contrib/headerSignatureAuthorizer/index.js.map +1 -0
- package/dist/http/contrib/headerSignatureAuthorizer/index.test.d.ts +2 -0
- package/dist/http/contrib/headerSignatureAuthorizer/index.test.d.ts.map +1 -0
- package/dist/http/contrib/headerSignatureAuthorizer/index.test.js +39 -0
- package/dist/http/contrib/headerSignatureAuthorizer/index.test.js.map +1 -0
- package/dist/http/contrib/headerSignatureAuthorizer/lib.d.ts +4 -0
- package/dist/http/contrib/headerSignatureAuthorizer/lib.d.ts.map +1 -0
- package/dist/http/contrib/headerSignatureAuthorizer/lib.js +13 -0
- package/dist/http/contrib/headerSignatureAuthorizer/lib.js.map +1 -0
- package/dist/http/contrib/headerSignatureAuthorizer/lib.test.d.ts +2 -0
- package/dist/http/contrib/headerSignatureAuthorizer/lib.test.d.ts.map +1 -0
- package/dist/http/contrib/headerSignatureAuthorizer/lib.test.js +9 -0
- package/dist/http/contrib/headerSignatureAuthorizer/lib.test.js.map +1 -0
- package/dist/http/contrib/headersNormalizer/index.d.ts +9 -0
- package/dist/http/contrib/headersNormalizer/index.d.ts.map +1 -0
- package/dist/http/contrib/headersNormalizer/index.js +8 -0
- package/dist/http/contrib/headersNormalizer/index.js.map +1 -0
- package/dist/http/contrib/headersNormalizer/index.test.d.ts +2 -0
- package/dist/http/contrib/headersNormalizer/index.test.d.ts.map +1 -0
- package/dist/http/contrib/headersNormalizer/index.test.js +38 -0
- package/dist/http/contrib/headersNormalizer/index.test.js.map +1 -0
- package/dist/http/contrib/headersNormalizer/lib.d.ts +11 -0
- package/dist/http/contrib/headersNormalizer/lib.d.ts.map +1 -0
- package/dist/http/contrib/headersNormalizer/lib.js +64 -0
- package/dist/http/contrib/headersNormalizer/lib.js.map +1 -0
- package/dist/http/contrib/headersNormalizer/lib.test.d.ts +2 -0
- package/dist/http/contrib/headersNormalizer/lib.test.d.ts.map +1 -0
- package/dist/http/contrib/headersNormalizer/lib.test.js +35 -0
- package/dist/http/contrib/headersNormalizer/lib.test.js.map +1 -0
- package/dist/http/contrib/headersNormalizer/types.d.ts +10 -0
- package/dist/http/contrib/headersNormalizer/types.d.ts.map +1 -0
- package/dist/http/contrib/headersNormalizer/types.js +2 -0
- package/dist/http/contrib/headersNormalizer/types.js.map +1 -0
- package/dist/http/contrib/headersValidator.d.ts +12 -0
- package/dist/http/contrib/headersValidator.d.ts.map +1 -0
- package/dist/http/contrib/headersValidator.js +15 -0
- package/dist/http/contrib/headersValidator.js.map +1 -0
- package/dist/http/contrib/headersValidator.test.d.ts +2 -0
- package/dist/http/contrib/headersValidator.test.d.ts.map +1 -0
- package/dist/http/contrib/headersValidator.test.js +46 -0
- package/dist/http/contrib/headersValidator.test.js.map +1 -0
- package/dist/http/contrib/helmetJsHeaders.d.ts +5 -0
- package/dist/http/contrib/helmetJsHeaders.d.ts.map +1 -0
- package/dist/http/contrib/helmetJsHeaders.js +25 -0
- package/dist/http/contrib/helmetJsHeaders.js.map +1 -0
- package/dist/http/contrib/helmetJsHeaders.test.d.ts +2 -0
- package/dist/http/contrib/helmetJsHeaders.test.d.ts.map +1 -0
- package/dist/http/contrib/helmetJsHeaders.test.js +18 -0
- package/dist/http/contrib/helmetJsHeaders.test.js.map +1 -0
- package/dist/http/contrib/honoAdapter.d.ts +16 -0
- package/dist/http/contrib/honoAdapter.d.ts.map +1 -0
- package/dist/http/contrib/honoAdapter.js +28 -0
- package/dist/http/contrib/honoAdapter.js.map +1 -0
- package/dist/http/contrib/honoAdapter.test.d.ts +2 -0
- package/dist/http/contrib/honoAdapter.test.d.ts.map +1 -0
- package/dist/http/contrib/honoAdapter.test.js +75 -0
- package/dist/http/contrib/honoAdapter.test.js.map +1 -0
- package/dist/http/contrib/identity.d.ts +4 -0
- package/dist/http/contrib/identity.d.ts.map +1 -0
- package/dist/http/contrib/identity.js +3 -0
- package/dist/http/contrib/identity.js.map +1 -0
- package/dist/http/contrib/identity.test.d.ts +2 -0
- package/dist/http/contrib/identity.test.d.ts.map +1 -0
- package/dist/http/contrib/identity.test.js +12 -0
- package/dist/http/contrib/identity.test.js.map +1 -0
- package/dist/http/contrib/index.d.ts +25 -0
- package/dist/http/contrib/index.d.ts.map +1 -0
- package/dist/http/contrib/index.js +25 -0
- package/dist/http/contrib/index.js.map +1 -0
- package/dist/http/contrib/jsonBodyParserRequest.d.ts +10 -0
- package/dist/http/contrib/jsonBodyParserRequest.d.ts.map +1 -0
- package/dist/http/contrib/jsonBodyParserRequest.js +22 -0
- package/dist/http/contrib/jsonBodyParserRequest.js.map +1 -0
- package/dist/http/contrib/jsonBodyParserRequest.test.d.ts +2 -0
- package/dist/http/contrib/jsonBodyParserRequest.test.d.ts.map +1 -0
- package/dist/http/contrib/jsonBodyParserRequest.test.js +37 -0
- package/dist/http/contrib/jsonBodyParserRequest.test.js.map +1 -0
- package/dist/http/contrib/jsonBodySerializerResponse.d.ts +9 -0
- package/dist/http/contrib/jsonBodySerializerResponse.d.ts.map +1 -0
- package/dist/http/contrib/jsonBodySerializerResponse.js +15 -0
- package/dist/http/contrib/jsonBodySerializerResponse.js.map +1 -0
- package/dist/http/contrib/jsonBodySerializerResponse.test.d.ts +2 -0
- package/dist/http/contrib/jsonBodySerializerResponse.test.d.ts.map +1 -0
- package/dist/http/contrib/jsonBodySerializerResponse.test.js +31 -0
- package/dist/http/contrib/jsonBodySerializerResponse.test.js.map +1 -0
- package/dist/http/contrib/jwtAuthenticator.d.ts +15 -0
- package/dist/http/contrib/jwtAuthenticator.d.ts.map +1 -0
- package/dist/http/contrib/jwtAuthenticator.js +28 -0
- package/dist/http/contrib/jwtAuthenticator.js.map +1 -0
- package/dist/http/contrib/jwtAuthenticator.test.d.ts +2 -0
- package/dist/http/contrib/jwtAuthenticator.test.d.ts.map +1 -0
- package/dist/http/contrib/jwtAuthenticator.test.js +88 -0
- package/dist/http/contrib/jwtAuthenticator.test.js.map +1 -0
- package/dist/http/contrib/jwtAuthenticatorRsa.d.ts +15 -0
- package/dist/http/contrib/jwtAuthenticatorRsa.d.ts.map +1 -0
- package/dist/http/contrib/jwtAuthenticatorRsa.js +28 -0
- package/dist/http/contrib/jwtAuthenticatorRsa.js.map +1 -0
- package/dist/http/contrib/jwtAuthenticatorRsa.test.d.ts +2 -0
- package/dist/http/contrib/jwtAuthenticatorRsa.test.d.ts.map +1 -0
- package/dist/http/contrib/jwtAuthenticatorRsa.test.js +88 -0
- package/dist/http/contrib/jwtAuthenticatorRsa.test.js.map +1 -0
- package/dist/http/contrib/jwtDecoder.d.ts +13 -0
- package/dist/http/contrib/jwtDecoder.d.ts.map +1 -0
- package/dist/http/contrib/jwtDecoder.js +23 -0
- package/dist/http/contrib/jwtDecoder.js.map +1 -0
- package/dist/http/contrib/jwtDecoder.test.d.ts +2 -0
- package/dist/http/contrib/jwtDecoder.test.d.ts.map +1 -0
- package/dist/http/contrib/jwtDecoder.test.js +76 -0
- package/dist/http/contrib/jwtDecoder.test.js.map +1 -0
- package/dist/http/contrib/pathParametersValidator.d.ts +12 -0
- package/dist/http/contrib/pathParametersValidator.d.ts.map +1 -0
- package/dist/http/contrib/pathParametersValidator.js +15 -0
- package/dist/http/contrib/pathParametersValidator.js.map +1 -0
- package/dist/http/contrib/pathParametersValidator.test.d.ts +2 -0
- package/dist/http/contrib/pathParametersValidator.test.d.ts.map +1 -0
- package/dist/http/contrib/pathParametersValidator.test.js +46 -0
- package/dist/http/contrib/pathParametersValidator.test.js.map +1 -0
- package/dist/http/contrib/pathTokenAuthorizer.d.ts +13 -0
- package/dist/http/contrib/pathTokenAuthorizer.d.ts.map +1 -0
- package/dist/http/contrib/pathTokenAuthorizer.js +19 -0
- package/dist/http/contrib/pathTokenAuthorizer.js.map +1 -0
- package/dist/http/contrib/pathTokenAuthorizer.test.d.ts +2 -0
- package/dist/http/contrib/pathTokenAuthorizer.test.d.ts.map +1 -0
- package/dist/http/contrib/pathTokenAuthorizer.test.js +29 -0
- package/dist/http/contrib/pathTokenAuthorizer.test.js.map +1 -0
- package/dist/http/contrib/queryStringValidator.d.ts +12 -0
- package/dist/http/contrib/queryStringValidator.d.ts.map +1 -0
- package/dist/http/contrib/queryStringValidator.js +15 -0
- package/dist/http/contrib/queryStringValidator.js.map +1 -0
- package/dist/http/contrib/queryStringValidator.test.d.ts +2 -0
- package/dist/http/contrib/queryStringValidator.test.d.ts.map +1 -0
- package/dist/http/contrib/queryStringValidator.test.js +46 -0
- package/dist/http/contrib/queryStringValidator.test.js.map +1 -0
- package/dist/http/contrib/requestResponseLogger.d.ts +5 -0
- package/dist/http/contrib/requestResponseLogger.d.ts.map +1 -0
- package/dist/http/contrib/requestResponseLogger.js +8 -0
- package/dist/http/contrib/requestResponseLogger.js.map +1 -0
- package/dist/http/contrib/requestResponseLogger.test.d.ts +2 -0
- package/dist/http/contrib/requestResponseLogger.test.d.ts.map +1 -0
- package/dist/http/contrib/requestResponseLogger.test.js +18 -0
- package/dist/http/contrib/requestResponseLogger.test.js.map +1 -0
- package/dist/http/contrib/responseProcessor.d.ts +8 -0
- package/dist/http/contrib/responseProcessor.d.ts.map +1 -0
- package/dist/http/contrib/responseProcessor.js +16 -0
- package/dist/http/contrib/responseProcessor.js.map +1 -0
- package/dist/http/contrib/responseProcessor.test.d.ts +2 -0
- package/dist/http/contrib/responseProcessor.test.d.ts.map +1 -0
- package/dist/http/contrib/responseProcessor.test.js +29 -0
- package/dist/http/contrib/responseProcessor.test.js.map +1 -0
- package/dist/http/contrib/standardRequestResponseAdapter.d.ts +16 -0
- package/dist/http/contrib/standardRequestResponseAdapter.d.ts.map +1 -0
- package/dist/http/contrib/standardRequestResponseAdapter.js +27 -0
- package/dist/http/contrib/standardRequestResponseAdapter.js.map +1 -0
- package/dist/http/contrib/standardRequestResponseAdapter.test.d.ts +2 -0
- package/dist/http/contrib/standardRequestResponseAdapter.test.d.ts.map +1 -0
- package/dist/http/contrib/standardRequestResponseAdapter.test.js +85 -0
- package/dist/http/contrib/standardRequestResponseAdapter.test.js.map +1 -0
- package/dist/http/contrib/trivial.d.ts +5 -0
- package/dist/http/contrib/trivial.d.ts.map +1 -0
- package/dist/http/contrib/trivial.js +9 -0
- package/dist/http/contrib/trivial.js.map +1 -0
- package/dist/http/contrib/trivial.test.d.ts +2 -0
- package/dist/http/contrib/trivial.test.d.ts.map +1 -0
- package/dist/http/contrib/trivial.test.js +14 -0
- package/dist/http/contrib/trivial.test.js.map +1 -0
- package/dist/http/index.d.ts +6 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +6 -0
- package/dist/http/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/Logger.d.ts +23 -0
- package/dist/lib/Logger.d.ts.map +1 -0
- package/dist/lib/Logger.js +30 -0
- package/dist/lib/Logger.js.map +1 -0
- package/dist/lib/Logger.test.d.ts +2 -0
- package/dist/lib/Logger.test.d.ts.map +1 -0
- package/dist/lib/Logger.test.js +54 -0
- package/dist/lib/Logger.test.js.map +1 -0
- package/dist/lib/MiddlewareError.d.ts +10 -0
- package/dist/lib/MiddlewareError.d.ts.map +1 -0
- package/dist/lib/MiddlewareError.js +20 -0
- package/dist/lib/MiddlewareError.js.map +1 -0
- package/dist/lib/MiddlewareError.test.d.ts +2 -0
- package/dist/lib/MiddlewareError.test.d.ts.map +1 -0
- package/dist/lib/MiddlewareError.test.js +55 -0
- package/dist/lib/MiddlewareError.test.js.map +1 -0
- package/dist/lib/index.d.ts +4 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +4 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/utils.d.ts +7 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +11 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/lib/utils.test.d.ts +2 -0
- package/dist/lib/utils.test.d.ts.map +1 -0
- package/dist/lib/utils.test.js +47 -0
- package/dist/lib/utils.test.js.map +1 -0
- package/dist/test/kitchen-sink.test.d.ts +2 -0
- package/dist/test/kitchen-sink.test.d.ts.map +1 -0
- package/dist/test/kitchen-sink.test.js +76 -0
- package/dist/test/kitchen-sink.test.js.map +1 -0
- package/dist/test/round-trip.test.d.ts +2 -0
- package/dist/test/round-trip.test.d.ts.map +1 -0
- package/dist/test/round-trip.test.js +75 -0
- package/dist/test/round-trip.test.js.map +1 -0
- package/dist/test/test-common.d.ts +17 -0
- package/dist/test/test-common.d.ts.map +1 -0
- package/dist/test/test-common.js +25 -0
- package/dist/test/test-common.js.map +1 -0
- package/package.json +265 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../../src/http/contrib/headerSignatureAuthorizer/index.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { type ResultR } from '@konker.dev/neverthrow-r';
|
|
2
|
+
import { type HttpApiError } from '../../HttpApiError.js';
|
|
3
|
+
export declare function validateHeaderSignature(signature: string | undefined, requestRawBody: unknown, secret: string): ResultR<unknown, boolean, HttpApiError>;
|
|
4
|
+
//# sourceMappingURL=lib.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../../../../src/http/contrib/headerSignatureAuthorizer/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAIpE,OAAO,EAAE,KAAK,YAAY,EAAkB,MAAM,uBAAuB,CAAC;AAE1E,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,GAAG,SAAS,EAC7B,cAAc,EAAE,OAAO,EACvB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,CAAC,CAazC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { fromResult } from '@konker.dev/neverthrow-r';
|
|
2
|
+
import { sha256HmacHex } from '@konker.dev/neverthrow-r-utils/hash';
|
|
3
|
+
import { ok } from 'neverthrow';
|
|
4
|
+
import { toHttpApiError } from '../../HttpApiError.js';
|
|
5
|
+
export function validateHeaderSignature(signature, requestRawBody, secret) {
|
|
6
|
+
if (!signature) {
|
|
7
|
+
return fromResult(ok(false));
|
|
8
|
+
}
|
|
9
|
+
return fromResult(sha256HmacHex(String(requestRawBody), secret)(undefined)
|
|
10
|
+
.map((calculatedHmac) => calculatedHmac === signature)
|
|
11
|
+
.mapErr(toHttpApiError));
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=lib.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../../../../src/http/contrib/headerSignatureAuthorizer/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAgB,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAC;AACpE,OAAO,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAEhC,OAAO,EAAqB,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE1E,MAAM,UAAU,uBAAuB,CACrC,SAA6B,EAC7B,cAAuB,EACvB,MAAc;IAEd,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,UAAU,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/B,CAAC;IAED,OAAO,UAAU,CACf,aAAa,CACX,MAAM,CAAC,cAAc,CAAC,EACtB,MAAM,CACP,CAAC,SAAS,CAAC;SACT,GAAG,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,cAAc,KAAK,SAAS,CAAC;SACrD,MAAM,CAAC,cAAc,CAAC,CAC1B,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lib.test.d.ts","sourceRoot":"","sources":["../../../../src/http/contrib/headerSignatureAuthorizer/lib.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { validateHeaderSignature } from './lib.js';
|
|
3
|
+
describe('headerSignatureAuthorizer/lib', () => {
|
|
4
|
+
it('returns false when the signature is missing', () => {
|
|
5
|
+
const result = validateHeaderSignature(undefined, 'body', 'secret')(undefined);
|
|
6
|
+
expect(result.isOk() && result.value).toBe(false);
|
|
7
|
+
});
|
|
8
|
+
});
|
|
9
|
+
//# sourceMappingURL=lib.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lib.test.js","sourceRoot":"","sources":["../../../../src/http/contrib/headerSignatureAuthorizer/lib.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,uBAAuB,EAAE,MAAM,UAAU,CAAC;AAEnD,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,MAAM,GAAG,uBAAuB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC;QAE/E,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { WithLogger } from '../../../lib/Logger.js';
|
|
2
|
+
import type { Override, Rec, RequestResponseHandler } from '../../RequestResponseHandler.js';
|
|
3
|
+
import type { WithNormalizedInputHeaders, WithNormalizedOutputHeaders } from './types.js';
|
|
4
|
+
export declare const TAG = "headersNormalizer";
|
|
5
|
+
export declare const middleware: ({ normalizeRequestHeaders, normalizeResponseHeaders }?: {
|
|
6
|
+
normalizeRequestHeaders?: boolean | undefined;
|
|
7
|
+
normalizeResponseHeaders?: boolean | undefined;
|
|
8
|
+
}) => <I extends Rec, O extends Rec, E, R>(wrapped: RequestResponseHandler<Override<I, WithNormalizedInputHeaders>, R, O, E>) => RequestResponseHandler<I, R & WithLogger, Override<O, WithNormalizedOutputHeaders>, E>;
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/http/contrib/headersNormalizer/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,OAAO,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAG7F,OAAO,KAAK,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAE1F,eAAO,MAAM,GAAG,sBAAsB,CAAC;AAEvC,eAAO,MAAM,UAAU,GACpB;;;CAAwE,MACxE,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,EACjC,SAAS,sBAAsB,CAAC,QAAQ,CAAC,CAAC,EAAE,0BAA0B,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAChF,sBAAsB,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,QAAQ,CAAC,CAAC,EAAE,2BAA2B,CAAC,EAAE,CAAC,CASrF,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { andThenAsync, mapAsync } from '@konker.dev/neverthrow-r/async';
|
|
2
|
+
import { okAsyncR } from '@konker.dev/neverthrow-r/constructors';
|
|
3
|
+
import { pipe } from '@konker.dev/neverthrow-r/pipe';
|
|
4
|
+
import { tapLogger } from '../../../lib/Logger.js';
|
|
5
|
+
import { transformInput, transformOutput } from './lib.js';
|
|
6
|
+
export const TAG = 'headersNormalizer';
|
|
7
|
+
export const middleware = ({ normalizeRequestHeaders = true, normalizeResponseHeaders = true } = {}) => (wrapped) => (i) => pipe(okAsyncR(i), tapLogger('debug', `[${TAG}] IN`), mapAsync(transformInput(normalizeRequestHeaders)), andThenAsync(wrapped), mapAsync(transformOutput(normalizeResponseHeaders)), tapLogger('debug', `[${TAG}] OUT`));
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/http/contrib/headersNormalizer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,uCAAuC,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAGrD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAGnD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAG3D,MAAM,CAAC,MAAM,GAAG,GAAG,mBAAmB,CAAC;AAEvC,MAAM,CAAC,MAAM,UAAU,GACrB,CAAC,EAAE,uBAAuB,GAAG,IAAI,EAAE,wBAAwB,GAAG,IAAI,EAAE,GAAG,EAAE,EAAE,EAAE,CAC7E,CACE,OAAiF,EACO,EAAE,CAC5F,CAAC,CAAc,EAAE,EAAE,CACjB,IAAI,CACF,QAAQ,CAAC,CAAC,CAAC,EACX,SAAS,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,CAAC,EACjC,QAAQ,CAAC,cAAc,CAAC,uBAAuB,CAAC,CAAC,EACjD,YAAY,CAAC,OAAO,CAAC,EACrB,QAAQ,CAAC,eAAe,CAAC,wBAAwB,CAAC,CAAC,EACnD,SAAS,CAAC,OAAO,EAAE,IAAI,GAAG,OAAO,CAAC,CACnC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../../../src/http/contrib/headersNormalizer/index.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { okAsyncR } from '@konker.dev/neverthrow-r/constructors';
|
|
2
|
+
import { describe, expect, it } from 'vitest';
|
|
3
|
+
import { recordingLogger, sampleRequestW } from '../../../test/test-common.js';
|
|
4
|
+
import { makeRequestW } from '../../RequestW.js';
|
|
5
|
+
import { EMPTY_RESPONSE_W } from '../../ResponseW.js';
|
|
6
|
+
import { middleware as headersNormalizer } from './index.js';
|
|
7
|
+
describe('headersNormalizer', () => {
|
|
8
|
+
it('normalizes request and response header casing by default', async () => {
|
|
9
|
+
const { logger } = recordingLogger();
|
|
10
|
+
const wrapped = headersNormalizer()((req) => okAsyncR({
|
|
11
|
+
...EMPTY_RESPONSE_W,
|
|
12
|
+
headers: req.headers,
|
|
13
|
+
}));
|
|
14
|
+
const input = makeRequestW(sampleRequestW, { headers: { FOO: 'bar' } });
|
|
15
|
+
const result = await wrapped(input)({ logger });
|
|
16
|
+
expect(result.isOk() && result.value.headers).toEqual({ Foo: 'bar' });
|
|
17
|
+
});
|
|
18
|
+
it('can skip request header normalization', async () => {
|
|
19
|
+
const { logger } = recordingLogger();
|
|
20
|
+
const wrapped = headersNormalizer({ normalizeRequestHeaders: false })((req) => okAsyncR({
|
|
21
|
+
...EMPTY_RESPONSE_W,
|
|
22
|
+
body: req.headers,
|
|
23
|
+
}));
|
|
24
|
+
const input = makeRequestW(sampleRequestW, { headers: { FOO: 'bar' } });
|
|
25
|
+
const result = await wrapped(input)({ logger });
|
|
26
|
+
expect(result.isOk() && result.value.body).toEqual({ FOO: 'bar' });
|
|
27
|
+
});
|
|
28
|
+
it('can skip response header normalization', async () => {
|
|
29
|
+
const { logger } = recordingLogger();
|
|
30
|
+
const wrapped = headersNormalizer({ normalizeResponseHeaders: false })(() => okAsyncR({
|
|
31
|
+
...EMPTY_RESPONSE_W,
|
|
32
|
+
headers: { foo: 'bar' },
|
|
33
|
+
}));
|
|
34
|
+
const result = await wrapped(sampleRequestW)({ logger });
|
|
35
|
+
expect(result.isOk() && result.value.headers).toEqual({ foo: 'bar' });
|
|
36
|
+
});
|
|
37
|
+
});
|
|
38
|
+
//# sourceMappingURL=index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../../src/http/contrib/headersNormalizer/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uCAAuC,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAkB,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,UAAU,IAAI,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE7D,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC,CAAC,GAAG,EAAE,EAAE,CAC1C,QAAQ,CAAY;YAClB,GAAG,gBAAgB;YACnB,OAAO,EAAE,GAAG,CAAC,OAAO;SACrB,CAAC,CACH,CAAC;QACF,MAAM,KAAK,GAAG,YAAY,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAEhD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,uBAAuB,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAC5E,QAAQ,CAAY;YAClB,GAAG,gBAAgB;YACnB,IAAI,EAAE,GAAG,CAAC,OAAO;SACL,CAAC,CAChB,CAAC;QACF,MAAM,KAAK,GAAG,YAAY,CAAC,cAAc,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAEhD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,iBAAiB,CAAC,EAAE,wBAAwB,EAAE,KAAK,EAAE,CAAC,CAAC,GAAG,EAAE,CAC1E,QAAQ,CAAY;YAClB,GAAG,gBAAgB;YACnB,OAAO,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE;SACxB,CAAC,CACH,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAEzD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Override, Rec } from '../../Rec.js';
|
|
2
|
+
import { type RequestW } from '../../RequestW.js';
|
|
3
|
+
import { type ResponseW } from '../../ResponseW.js';
|
|
4
|
+
import type { WithNormalizedInputHeaders, WithNormalizedOutputHeaders } from './types.js';
|
|
5
|
+
export declare function fromExceptionList(s: string): string | undefined;
|
|
6
|
+
export declare function lowerCaseNormalizer(s: string): string;
|
|
7
|
+
export declare function canonicalNormalizer(s: string): string;
|
|
8
|
+
export declare function normalizeKeys(rec: Record<string, string | number | boolean | undefined> | undefined, normalizer: (s: string) => string): Record<string, string>;
|
|
9
|
+
export declare const transformInput: <I extends Rec>(normalizeRequestHeaders: boolean) => (i: RequestW<I>) => RequestW<Override<I, WithNormalizedInputHeaders>>;
|
|
10
|
+
export declare const transformOutput: <O extends Rec>(normalizeResponseHeaders: boolean) => (o: ResponseW<O>) => ResponseW<Override<O, WithNormalizedOutputHeaders>>;
|
|
11
|
+
//# sourceMappingURL=lib.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../../../../src/http/contrib/headersNormalizer/lib.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,KAAK,EAAE,0BAA0B,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAkC1F,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG/D;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CASrD;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GAAG,SAAS,EACtE,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,GAChC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAUxB;AAED,eAAO,MAAM,cAAc,GACxB,CAAC,SAAS,GAAG,EAAE,yBAAyB,OAAO,MAC/C,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,0BAA0B,CAAC,CAI9D,CAAC;AAEP,eAAO,MAAM,eAAe,GACzB,CAAC,SAAS,GAAG,EAAE,0BAA0B,OAAO,MAChD,GAAG,SAAS,CAAC,CAAC,CAAC,KAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,2BAA2B,CAAC,CAGjE,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { makeRequestW } from '../../RequestW.js';
|
|
2
|
+
import { makeResponseW } from '../../ResponseW.js';
|
|
3
|
+
const EXCEPTIONS_LIST = [
|
|
4
|
+
'ALPN',
|
|
5
|
+
'C-PEP',
|
|
6
|
+
'C-PEP-Info',
|
|
7
|
+
'CalDAV-Timezones',
|
|
8
|
+
'Content-ID',
|
|
9
|
+
'Content-MD5',
|
|
10
|
+
'DASL',
|
|
11
|
+
'DAV',
|
|
12
|
+
'DNT',
|
|
13
|
+
'ETag',
|
|
14
|
+
'GetProfile',
|
|
15
|
+
'HTTP2-Settings',
|
|
16
|
+
'Last-Event-ID',
|
|
17
|
+
'MIME-Version',
|
|
18
|
+
'Optional-WWW-Authenticate',
|
|
19
|
+
'Sec-WebSocket-Accept',
|
|
20
|
+
'Sec-WebSocket-Extensions',
|
|
21
|
+
'Sec-WebSocket-Key',
|
|
22
|
+
'Sec-WebSocket-Protocol',
|
|
23
|
+
'Sec-WebSocket-Version',
|
|
24
|
+
'SLUG',
|
|
25
|
+
'TCN',
|
|
26
|
+
'TE',
|
|
27
|
+
'TTL',
|
|
28
|
+
'WWW-Authenticate',
|
|
29
|
+
'X-ATT-DeviceId',
|
|
30
|
+
'X-DNSPrefetch-Control',
|
|
31
|
+
'X-UIDH',
|
|
32
|
+
'X-XSS-Protection',
|
|
33
|
+
];
|
|
34
|
+
export function fromExceptionList(s) {
|
|
35
|
+
const lower = s.toLowerCase();
|
|
36
|
+
return EXCEPTIONS_LIST.find((item) => item.toLowerCase() === lower);
|
|
37
|
+
}
|
|
38
|
+
export function lowerCaseNormalizer(s) {
|
|
39
|
+
return s.toLowerCase();
|
|
40
|
+
}
|
|
41
|
+
export function canonicalNormalizer(s) {
|
|
42
|
+
const exception = fromExceptionList(s);
|
|
43
|
+
return (exception ??
|
|
44
|
+
s
|
|
45
|
+
.split('-')
|
|
46
|
+
.map((part) => part.charAt(0).toUpperCase() + part.substring(1).toLowerCase())
|
|
47
|
+
.join('-'));
|
|
48
|
+
}
|
|
49
|
+
export function normalizeKeys(rec, normalizer) {
|
|
50
|
+
return rec
|
|
51
|
+
? Object.keys(rec).reduce((acc, key) => ({
|
|
52
|
+
...acc,
|
|
53
|
+
[normalizer(key)]: String(rec[key] ?? ''),
|
|
54
|
+
}), {})
|
|
55
|
+
: {};
|
|
56
|
+
}
|
|
57
|
+
export const transformInput = (normalizeRequestHeaders) => (i) => makeRequestW(i, {
|
|
58
|
+
headers: normalizeRequestHeaders ? normalizeKeys(i.headers, lowerCaseNormalizer) : { ...i.headers },
|
|
59
|
+
headersNormalizerRequestRaw: i.headers,
|
|
60
|
+
});
|
|
61
|
+
export const transformOutput = (normalizeResponseHeaders) => (o) => makeResponseW(o, {
|
|
62
|
+
headers: normalizeResponseHeaders ? normalizeKeys(o.headers, canonicalNormalizer) : { ...o.headers },
|
|
63
|
+
});
|
|
64
|
+
//# sourceMappingURL=lib.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../../../../src/http/contrib/headersNormalizer/lib.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAiB,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,aAAa,EAAkB,MAAM,oBAAoB,CAAC;AAGnE,MAAM,eAAe,GAAG;IACtB,MAAM;IACN,OAAO;IACP,YAAY;IACZ,kBAAkB;IAClB,YAAY;IACZ,aAAa;IACb,MAAM;IACN,KAAK;IACL,KAAK;IACL,MAAM;IACN,YAAY;IACZ,gBAAgB;IAChB,eAAe;IACf,cAAc;IACd,2BAA2B;IAC3B,sBAAsB;IACtB,0BAA0B;IAC1B,mBAAmB;IACnB,wBAAwB;IACxB,uBAAuB;IACvB,MAAM;IACN,KAAK;IACL,IAAI;IACJ,KAAK;IACL,kBAAkB;IAClB,gBAAgB;IAChB,uBAAuB;IACvB,QAAQ;IACR,kBAAkB;CACV,CAAC;AAEX,MAAM,UAAU,iBAAiB,CAAC,CAAS;IACzC,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9B,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,CAAS;IAC3C,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,CAAS;IAC3C,MAAM,SAAS,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;IACvC,OAAO,CACL,SAAS;QACT,CAAC;aACE,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;aAC7E,IAAI,CAAC,GAAG,CAAC,CACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,GAAsE,EACtE,UAAiC;IAEjC,OAAO,GAAG;QACR,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CACrB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;YACb,GAAG,GAAG;YACN,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;SAC1C,CAAC,EACF,EAAE,CACH;QACH,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,MAAM,CAAC,MAAM,cAAc,GACzB,CAAgB,uBAAgC,EAAE,EAAE,CACpD,CAAC,CAAc,EAAqD,EAAE,CACpE,YAAY,CAAC,CAAC,EAAE;IACd,OAAO,EAAE,uBAAuB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE;IACnG,2BAA2B,EAAE,CAAC,CAAC,OAAO;CACvC,CAAC,CAAC;AAEP,MAAM,CAAC,MAAM,eAAe,GAC1B,CAAgB,wBAAiC,EAAE,EAAE,CACrD,CAAC,CAAe,EAAuD,EAAE,CACvE,aAAa,CAAC,CAAC,EAAE;IACf,OAAO,EAAE,wBAAwB,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,OAAO,EAAE;CACrG,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lib.test.d.ts","sourceRoot":"","sources":["../../../../src/http/contrib/headersNormalizer/lib.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { describe, expect, it } from 'vitest';
|
|
2
|
+
import { EMPTY_REQUEST_W } from '../../RequestW.js';
|
|
3
|
+
import { EMPTY_RESPONSE_W } from '../../ResponseW.js';
|
|
4
|
+
import { canonicalNormalizer, fromExceptionList, normalizeKeys, transformInput, transformOutput } from './lib.js';
|
|
5
|
+
describe('headersNormalizer/lib', () => {
|
|
6
|
+
it('uses the exception list for canonical names', () => {
|
|
7
|
+
expect(fromExceptionList('x-xss-protection')).toBe('X-XSS-Protection');
|
|
8
|
+
expect(canonicalNormalizer('x-xss-protection')).toBe('X-XSS-Protection');
|
|
9
|
+
});
|
|
10
|
+
it('returns an empty record when normalizing undefined', () => {
|
|
11
|
+
expect(normalizeKeys(undefined, (s) => s)).toEqual({});
|
|
12
|
+
});
|
|
13
|
+
it('stringifies non-string values while normalizing keys', () => {
|
|
14
|
+
expect(normalizeKeys({ foo: 1, bar: true }, (s) => s.toUpperCase())).toEqual({ FOO: '1', BAR: 'true' });
|
|
15
|
+
});
|
|
16
|
+
it('stringifies undefined values as empty strings', () => {
|
|
17
|
+
expect(normalizeKeys({ foo: undefined }, (s) => s)).toEqual({ foo: '' });
|
|
18
|
+
});
|
|
19
|
+
it('preserves raw request headers when request normalization is disabled', () => {
|
|
20
|
+
const result = transformInput(false)({
|
|
21
|
+
...EMPTY_REQUEST_W,
|
|
22
|
+
headers: { FOO: 'bar' },
|
|
23
|
+
});
|
|
24
|
+
expect(result.headers).toEqual({ FOO: 'bar' });
|
|
25
|
+
expect(result.headersNormalizerRequestRaw).toEqual({ FOO: 'bar' });
|
|
26
|
+
});
|
|
27
|
+
it('preserves response header keys when response normalization is disabled', () => {
|
|
28
|
+
const result = transformOutput(false)({
|
|
29
|
+
...EMPTY_RESPONSE_W,
|
|
30
|
+
headers: { foo: 'bar' },
|
|
31
|
+
});
|
|
32
|
+
expect(result.headers).toEqual({ foo: 'bar' });
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
//# sourceMappingURL=lib.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lib.test.js","sourceRoot":"","sources":["../../../../src/http/contrib/headersNormalizer/lib.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAElH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;IACrC,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACvE,MAAM,CAAC,mBAAmB,CAAC,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1G,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sEAAsE,EAAE,GAAG,EAAE;QAC9E,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;YACnC,GAAG,eAAe;YAClB,OAAO,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE;SACxB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/C,MAAM,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;YACpC,GAAG,gBAAgB;YACnB,OAAO,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE;SACxB,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { RequestW } from '../../RequestW.js';
|
|
2
|
+
import type { ResponseW } from '../../ResponseW.js';
|
|
3
|
+
export type WithNormalizedInputHeaders = {
|
|
4
|
+
readonly headers: RequestW['headers'];
|
|
5
|
+
readonly headersNormalizerRequestRaw: Record<string, string>;
|
|
6
|
+
};
|
|
7
|
+
export type WithNormalizedOutputHeaders = {
|
|
8
|
+
readonly headers: ResponseW['headers'];
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/http/contrib/headersNormalizer/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,MAAM,0BAA0B,GAAG;IACvC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IACtC,QAAQ,CAAC,2BAA2B,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9D,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACxC,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CACxC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/http/contrib/headersNormalizer/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { StandardSchemaV1 } from '@standard-schema/spec';
|
|
2
|
+
import type { WithLogger } from '../../lib/Logger.js';
|
|
3
|
+
import type { MiddlewareError } from '../../lib/MiddlewareError.js';
|
|
4
|
+
import type { Override, Rec, RequestResponseHandler } from '../RequestResponseHandler.js';
|
|
5
|
+
import { type RequestW } from '../RequestW.js';
|
|
6
|
+
export declare const TAG = "headersValidator";
|
|
7
|
+
export type WithValidatedHeaders<V> = {
|
|
8
|
+
readonly headers: V;
|
|
9
|
+
readonly headersValidatorRaw: RequestW['headers'] | undefined;
|
|
10
|
+
};
|
|
11
|
+
export declare const middleware: <V>(schema: StandardSchemaV1<unknown, V>) => <I extends Rec, O extends Rec, E, R>(wrapped: RequestResponseHandler<Override<I, WithValidatedHeaders<V>>, R, O, E>) => RequestResponseHandler<I, R & WithLogger, O, E | MiddlewareError>;
|
|
12
|
+
//# sourceMappingURL=headersValidator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headersValidator.d.ts","sourceRoot":"","sources":["../../../src/http/contrib/headersValidator.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE,OAAO,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAC1F,OAAO,EAAgB,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAG7D,eAAO,MAAM,GAAG,qBAAqB,CAAC;AAEtC,MAAM,MAAM,oBAAoB,CAAC,CAAC,IAAI;IACpC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,mBAAmB,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;CAC/D,CAAC;AAKF,eAAO,MAAM,UAAU,GACpB,CAAC,EAAE,QAAQ,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,MACvC,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,EACjC,SAAS,sBAAsB,CAAC,QAAQ,CAAC,CAAC,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC7E,sBAAsB,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,CAAC,GAAG,eAAe,CAgBhE,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { andThenAsync, mapAsync, mapErrAsync } from '@konker.dev/neverthrow-r/async';
|
|
2
|
+
import { okAsyncR } from '@konker.dev/neverthrow-r/constructors';
|
|
3
|
+
import { pipe } from '@konker.dev/neverthrow-r/pipe';
|
|
4
|
+
import { andThenParseAsyncR } from '@konker.dev/neverthrow-r-schema/async';
|
|
5
|
+
import { tapLogger } from '../../lib/Logger.js';
|
|
6
|
+
import { middlewareError } from '../../lib/MiddlewareError.js';
|
|
7
|
+
import { makeRequestW } from '../RequestW.js';
|
|
8
|
+
import { makeResponseW } from '../ResponseW.js';
|
|
9
|
+
export const TAG = 'headersValidator';
|
|
10
|
+
const toMiddlewareError = (error) => middlewareError(error.message, error.cause === undefined ? error.issues : [error.cause, ...error.issues]);
|
|
11
|
+
export const middleware = (schema) => (wrapped) => (i) => pipe(okAsyncR(i.headers), tapLogger('debug', `[${TAG}] IN`), andThenParseAsyncR(schema, { message: 'Headers validation failed' }), mapErrAsync(toMiddlewareError), mapAsync((validatedHeaders) => makeRequestW(i, {
|
|
12
|
+
headers: validatedHeaders,
|
|
13
|
+
headersValidatorRaw: i.headers,
|
|
14
|
+
})), andThenAsync(wrapped), mapAsync((res) => makeResponseW(res)), tapLogger('debug', `[${TAG}] OUT`));
|
|
15
|
+
//# sourceMappingURL=headersValidator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headersValidator.js","sourceRoot":"","sources":["../../../src/http/contrib/headersValidator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AACrF,OAAO,EAAE,QAAQ,EAAE,MAAM,uCAAuC,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAK3E,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAE/D,OAAO,EAAE,YAAY,EAAiB,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,MAAM,CAAC,MAAM,GAAG,GAAG,kBAAkB,CAAC;AAOtC,MAAM,iBAAiB,GAAG,CAAC,KAA4B,EAAmB,EAAE,CAC1E,eAAe,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;AAE5G,MAAM,CAAC,MAAM,UAAU,GACrB,CAAI,MAAoC,EAAE,EAAE,CAC5C,CACE,OAA8E,EACX,EAAE,CACvE,CAAC,CAAc,EAAE,EAAE,CACjB,IAAI,CACF,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,EACnB,SAAS,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,CAAC,EACjC,kBAAkB,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,2BAA2B,EAAE,CAAC,EACpE,WAAW,CAAC,iBAAiB,CAAC,EAC9B,QAAQ,CAAC,CAAC,gBAAgB,EAAE,EAAE,CAC5B,YAAY,CAAC,CAAC,EAAE;IACd,OAAO,EAAE,gBAAgB;IACzB,mBAAmB,EAAE,CAAC,CAAC,OAAO;CAC/B,CAAC,CACH,EACD,YAAY,CAAC,OAAO,CAAC,EACrB,QAAQ,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,EACrC,SAAS,CAAC,OAAO,EAAE,IAAI,GAAG,OAAO,CAAC,CACnC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headersValidator.test.d.ts","sourceRoot":"","sources":["../../../src/http/contrib/headersValidator.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { okAsyncR } from '@konker.dev/neverthrow-r/constructors';
|
|
2
|
+
import { describe, expect, it } from 'vitest';
|
|
3
|
+
import { z } from 'zod';
|
|
4
|
+
import { recordingLogger, sampleRequestW } from '../../test/test-common.js';
|
|
5
|
+
import { makeRequestW } from '../RequestW.js';
|
|
6
|
+
import { EMPTY_RESPONSE_W } from '../ResponseW.js';
|
|
7
|
+
import { middleware as headersValidator } from './headersValidator.js';
|
|
8
|
+
describe('headersValidator', () => {
|
|
9
|
+
const schema = z.object({
|
|
10
|
+
foo: z.literal('foo_value'),
|
|
11
|
+
num: z.coerce.number(),
|
|
12
|
+
});
|
|
13
|
+
it('validates and replaces headers', async () => {
|
|
14
|
+
const { logger } = recordingLogger();
|
|
15
|
+
const wrapped = headersValidator(schema)((req) => okAsyncR({
|
|
16
|
+
...EMPTY_RESPONSE_W,
|
|
17
|
+
body: req.headers,
|
|
18
|
+
}));
|
|
19
|
+
const input = makeRequestW(sampleRequestW, { headers: { foo: 'foo_value', num: '123' } });
|
|
20
|
+
const result = await wrapped(input)({ logger });
|
|
21
|
+
expect(result.isOk() && result.value.body).toEqual({ foo: 'foo_value', num: 123 });
|
|
22
|
+
});
|
|
23
|
+
it('returns a MiddlewareError when headers fail validation', async () => {
|
|
24
|
+
const { logger } = recordingLogger();
|
|
25
|
+
const wrapped = headersValidator(schema)(() => okAsyncR(EMPTY_RESPONSE_W));
|
|
26
|
+
const input = makeRequestW(sampleRequestW, { headers: { foo: 'bad', num: '123' } });
|
|
27
|
+
const result = await wrapped(input)({ logger });
|
|
28
|
+
expect(result.isErr() && result.error.message).toBe('Headers validation failed');
|
|
29
|
+
});
|
|
30
|
+
it('keeps a thrown validator cause in internal details', async () => {
|
|
31
|
+
const schema = {
|
|
32
|
+
'~standard': {
|
|
33
|
+
version: 1,
|
|
34
|
+
vendor: 'fixture',
|
|
35
|
+
validate: () => {
|
|
36
|
+
throw new Error('validator exploded');
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
const { logger } = recordingLogger();
|
|
41
|
+
const wrapped = headersValidator(schema)(() => okAsyncR(EMPTY_RESPONSE_W));
|
|
42
|
+
const result = await wrapped(makeRequestW(sampleRequestW, { headers: { foo: 'bar' } }))({ logger });
|
|
43
|
+
expect(result.isErr() && result.error.internal?.length).toBeGreaterThan(0);
|
|
44
|
+
});
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=headersValidator.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"headersValidator.test.js","sourceRoot":"","sources":["../../../src/http/contrib/headersValidator.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { WithLogger } from '../../lib/Logger.js';
|
|
2
|
+
import type { Rec, RequestResponseHandler } from '../RequestResponseHandler.js';
|
|
3
|
+
export declare const TAG = "helmetJsHeaders";
|
|
4
|
+
export declare const middleware: () => <I extends Rec, O extends Rec, E, R>(wrapped: RequestResponseHandler<I, R, O, E>) => RequestResponseHandler<I, R & WithLogger, O, E>;
|
|
5
|
+
//# sourceMappingURL=helmetJsHeaders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helmetJsHeaders.d.ts","sourceRoot":"","sources":["../../../src/http/contrib/helmetJsHeaders.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,KAAK,EAAE,GAAG,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AAGhF,eAAO,MAAM,GAAG,oBAAoB,CAAC;AAErC,eAAO,MAAM,UAAU,SAEpB,CAAC,SAAS,GAAG,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,EAAE,CAAC,EACjC,SAAS,sBAAsB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAC1C,sBAAsB,CAAC,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE,CAAC,CA2B9C,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { andThenAsync, mapAsync } from '@konker.dev/neverthrow-r/async';
|
|
2
|
+
import { okAsyncR } from '@konker.dev/neverthrow-r/constructors';
|
|
3
|
+
import { pipe } from '@konker.dev/neverthrow-r/pipe';
|
|
4
|
+
import { tapLogger } from '../../lib/Logger.js';
|
|
5
|
+
export const TAG = 'helmetJsHeaders';
|
|
6
|
+
export const middleware = () => (wrapped) => (i) => pipe(okAsyncR(i), tapLogger('debug', `[${TAG}] IN`), andThenAsync(wrapped), mapAsync((x) => ({
|
|
7
|
+
...x,
|
|
8
|
+
headers: {
|
|
9
|
+
'Content-Security-Policy': "default-src 'self';base-uri 'self';font-src 'self' https: data:;form-action 'self';frame-ancestors 'self';img-src 'self' data:;object-src 'none';script-src 'self';script-src-attr 'none';style-src 'self' https: 'unsafe-inline';upgrade-insecure-requests",
|
|
10
|
+
'Cross-Origin-Embedder-Policy': 'require-corp',
|
|
11
|
+
'Cross-Origin-Opener-Policy': 'same-origin',
|
|
12
|
+
'Cross-Origin-Resource-Policy': 'same-origin',
|
|
13
|
+
'Origin-Agent-Cluster': '?1',
|
|
14
|
+
'Referrer-Policy': 'no-referrer',
|
|
15
|
+
'Strict-Transport-Security': 'max-age=15552000; includeSubDomains',
|
|
16
|
+
'X-Content-Type-Options': 'nosniff',
|
|
17
|
+
'X-DNS-Prefetch-Control': 'off',
|
|
18
|
+
'X-Download-Options': 'noopen',
|
|
19
|
+
'X-Frame-Options': 'SAMEORIGIN',
|
|
20
|
+
'X-Permitted-Cross-Domain-Policies': 'none',
|
|
21
|
+
'X-XSS-Protection': '0',
|
|
22
|
+
...x.headers,
|
|
23
|
+
},
|
|
24
|
+
})), tapLogger('debug', `[${TAG}] OUT`));
|
|
25
|
+
//# sourceMappingURL=helmetJsHeaders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helmetJsHeaders.js","sourceRoot":"","sources":["../../../src/http/contrib/helmetJsHeaders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,uCAAuC,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAGrD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAIhD,MAAM,CAAC,MAAM,GAAG,GAAG,iBAAiB,CAAC;AAErC,MAAM,CAAC,MAAM,UAAU,GACrB,GAAG,EAAE,CACL,CACE,OAA2C,EACM,EAAE,CACrD,CAAC,CAAc,EAAE,EAAE,CACjB,IAAI,CACF,QAAQ,CAAC,CAAC,CAAC,EACX,SAAS,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,CAAC,EACjC,YAAY,CAAC,OAAO,CAAC,EACrB,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACf,GAAG,CAAC;IACJ,OAAO,EAAE;QACP,yBAAyB,EACvB,6PAA6P;QAC/P,8BAA8B,EAAE,cAAc;QAC9C,4BAA4B,EAAE,aAAa;QAC3C,8BAA8B,EAAE,aAAa;QAC7C,sBAAsB,EAAE,IAAI;QAC5B,iBAAiB,EAAE,aAAa;QAChC,2BAA2B,EAAE,qCAAqC;QAClE,wBAAwB,EAAE,SAAS;QACnC,wBAAwB,EAAE,KAAK;QAC/B,oBAAoB,EAAE,QAAQ;QAC9B,iBAAiB,EAAE,YAAY;QAC/B,mCAAmC,EAAE,MAAM;QAC3C,kBAAkB,EAAE,GAAG;QACvB,GAAG,CAAC,CAAC,OAAO;KACb;CACF,CAAC,CAAC,EACH,SAAS,CAAC,OAAO,EAAE,IAAI,GAAG,OAAO,CAAC,CACnC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helmetJsHeaders.test.d.ts","sourceRoot":"","sources":["../../../src/http/contrib/helmetJsHeaders.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { okAsyncR } from '@konker.dev/neverthrow-r/constructors';
|
|
2
|
+
import { describe, expect, it } from 'vitest';
|
|
3
|
+
import { recordingLogger, sampleRequestW } from '../../test/test-common.js';
|
|
4
|
+
import { EMPTY_RESPONSE_W } from '../ResponseW.js';
|
|
5
|
+
import { middleware as helmetJsHeaders } from './helmetJsHeaders.js';
|
|
6
|
+
describe('helmetJsHeaders', () => {
|
|
7
|
+
it('adds the default security headers', async () => {
|
|
8
|
+
const { logger } = recordingLogger();
|
|
9
|
+
const wrapped = helmetJsHeaders()(() => okAsyncR(EMPTY_RESPONSE_W));
|
|
10
|
+
const result = await wrapped(sampleRequestW)({ logger });
|
|
11
|
+
expect(result.isOk() && result.value.headers).toMatchObject({
|
|
12
|
+
'Cross-Origin-Embedder-Policy': 'require-corp',
|
|
13
|
+
'Cross-Origin-Opener-Policy': 'same-origin',
|
|
14
|
+
'X-Content-Type-Options': 'nosniff',
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=helmetJsHeaders.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helmetJsHeaders.test.js","sourceRoot":"","sources":["../../../src/http/contrib/helmetJsHeaders.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,uCAAuC,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAkB,MAAM,iBAAiB,CAAC;AACnE,OAAO,EAAE,UAAU,IAAI,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAErE,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAY,gBAAgB,CAAC,CAAC,CAAC;QAC/E,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QAEzD,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC;YAC1D,8BAA8B,EAAE,cAAc;YAC9C,4BAA4B,EAAE,aAAa;YAC3C,wBAAwB,EAAE,SAAS;SACpC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { HonoRequest } from 'hono';
|
|
2
|
+
import { ResultAsync } from 'neverthrow';
|
|
3
|
+
import type { Handler } from '../../handler.js';
|
|
4
|
+
import type { WithLogger } from '../../lib/Logger.js';
|
|
5
|
+
import type { MiddlewareError } from '../../lib/MiddlewareError.js';
|
|
6
|
+
import type { StrBodyRec } from '../RequestResponseHandler.js';
|
|
7
|
+
import type { RequestW } from '../RequestW.js';
|
|
8
|
+
import type { ResponseW } from '../ResponseW.js';
|
|
9
|
+
export declare const TAG = "honoAdapter";
|
|
10
|
+
export type WithHonoRequestRaw = {
|
|
11
|
+
readonly honoRequestRaw: HonoRequest;
|
|
12
|
+
};
|
|
13
|
+
export declare function adaptFromHonoRequest(request: HonoRequest): ResultAsync<RequestW<WithHonoRequestRaw & StrBodyRec>, MiddlewareError>;
|
|
14
|
+
export declare function adaptToHonoResponse<O extends StrBodyRec>(responseW: ResponseW<O>): ResultAsync<Response, MiddlewareError>;
|
|
15
|
+
export declare const middleware: (_params?: never) => <O extends StrBodyRec, E, R>(wrapped: Handler<RequestW<WithHonoRequestRaw & StrBodyRec>, R, ResponseW<O>, E>) => Handler<HonoRequest, R & WithLogger, Response, E | MiddlewareError>;
|
|
16
|
+
//# sourceMappingURL=honoAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"honoAdapter.d.ts","sourceRoot":"","sources":["../../../src/http/contrib/honoAdapter.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,MAAM,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD,eAAO,MAAM,GAAG,gBAAgB,CAAC;AAEjC,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC;CACtC,CAAC;AAEF,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,WAAW,GACnB,WAAW,CAAC,QAAQ,CAAC,kBAAkB,GAAG,UAAU,CAAC,EAAE,eAAe,CAAC,CAazE;AAED,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,UAAU,EACtD,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,GACtB,WAAW,CAAC,QAAQ,EAAE,eAAe,CAAC,CASxC;AAED,eAAO,MAAM,UAAU,GACpB,UAAU,KAAK,MACf,CAAC,SAAS,UAAU,EAAE,CAAC,EAAE,CAAC,EACzB,SAAS,OAAO,CAAC,QAAQ,CAAC,kBAAkB,GAAG,UAAU,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAC9E,OAAO,CAAC,WAAW,EAAE,CAAC,GAAG,UAAU,EAAE,QAAQ,EAAE,CAAC,GAAG,eAAe,CASlE,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Buffer } from 'node:buffer';
|
|
2
|
+
import { andThenAsync } from '@konker.dev/neverthrow-r/async';
|
|
3
|
+
import { okAsyncR } from '@konker.dev/neverthrow-r/constructors';
|
|
4
|
+
import { pipe } from '@konker.dev/neverthrow-r/pipe';
|
|
5
|
+
import { ResultAsync } from 'neverthrow';
|
|
6
|
+
import { tapLogger } from '../../lib/Logger.js';
|
|
7
|
+
import { toMiddlewareError } from '../../lib/MiddlewareError.js';
|
|
8
|
+
import { sanitizeRecord } from '../../lib/utils.js';
|
|
9
|
+
export const TAG = 'honoAdapter';
|
|
10
|
+
export function adaptFromHonoRequest(request) {
|
|
11
|
+
return ResultAsync.fromPromise((async () => ({
|
|
12
|
+
url: request.url,
|
|
13
|
+
method: request.method,
|
|
14
|
+
body: await request.text(),
|
|
15
|
+
headers: sanitizeRecord(request.header()),
|
|
16
|
+
queryStringParameters: sanitizeRecord(request.query()),
|
|
17
|
+
pathParameters: sanitizeRecord(request.param()),
|
|
18
|
+
honoRequestRaw: request,
|
|
19
|
+
}))(), toMiddlewareError);
|
|
20
|
+
}
|
|
21
|
+
export function adaptToHonoResponse(responseW) {
|
|
22
|
+
return ResultAsync.fromPromise((async () => new Response(Buffer.from(responseW.body ?? ''), {
|
|
23
|
+
status: responseW.statusCode,
|
|
24
|
+
headers: new Headers(responseW.headers),
|
|
25
|
+
}))(), toMiddlewareError);
|
|
26
|
+
}
|
|
27
|
+
export const middleware = (_params) => (wrapped) => (i) => pipe(okAsyncR(i), tapLogger('debug', `[${TAG}] IN`), andThenAsync(() => (_r) => adaptFromHonoRequest(i)), andThenAsync(wrapped), andThenAsync((res) => (_r) => adaptToHonoResponse(res)), tapLogger('debug', `[${TAG}] OUT`));
|
|
28
|
+
//# sourceMappingURL=honoAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"honoAdapter.js","sourceRoot":"","sources":["../../../src/http/contrib/honoAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,uCAAuC,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAC;AAErD,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAIzC,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAKpD,MAAM,CAAC,MAAM,GAAG,GAAG,aAAa,CAAC;AAMjC,MAAM,UAAU,oBAAoB,CAClC,OAAoB;IAEpB,OAAO,WAAW,CAAC,WAAW,CAC5B,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACZ,GAAG,EAAE,OAAO,CAAC,GAAG;QAChB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,EAAE;QAC1B,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACzC,qBAAqB,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACtD,cAAc,EAAE,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC/C,cAAc,EAAE,OAAO;KACxB,CAAC,CAAC,EAAE,EACL,iBAAiB,CAClB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,SAAuB;IAEvB,OAAO,WAAW,CAAC,WAAW,CAC5B,CAAC,KAAK,IAAI,EAAE,CACV,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,EAAE,CAAC,EAAE;QAC9C,MAAM,EAAE,SAAS,CAAC,UAAU;QAC5B,OAAO,EAAE,IAAI,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC;KACxC,CAAC,CAAC,EAAE,EACP,iBAAiB,CAClB,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,UAAU,GACrB,CAAC,OAAe,EAAE,EAAE,CACpB,CACE,OAA+E,EACV,EAAE,CACzE,CAAC,CAAc,EAAE,EAAE,CACjB,IAAI,CACF,QAAQ,CAAC,CAAC,CAAC,EACX,SAAS,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,CAAC,EACjC,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,EAAW,EAAE,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,EAC5D,YAAY,CAAC,OAAO,CAAC,EACrB,YAAY,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAW,EAAE,EAAE,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,EAChE,SAAS,CAAC,OAAO,EAAE,IAAI,GAAG,OAAO,CAAC,CACnC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"honoAdapter.test.d.ts","sourceRoot":"","sources":["../../../src/http/contrib/honoAdapter.test.ts"],"names":[],"mappings":""}
|