@konker.dev/middleware-fp 0.0.5 → 0.0.6

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.
@@ -0,0 +1,10 @@
1
+ import * as P from '@konker.dev/effect-ts-prelude';
2
+ import type { APIGatewayProxyEventV2 } from 'aws-lambda';
3
+ import type { Handler } from '../../index';
4
+ import { HttpApiError } from '../../lib/HttpApiError';
5
+ export type HeaderSignatureAuthorizerDeps = {
6
+ readonly secret: string;
7
+ readonly signatureHeaderName: string;
8
+ };
9
+ export declare const HeaderSignatureAuthorizerDeps: P.Context.Tag<HeaderSignatureAuthorizerDeps, HeaderSignatureAuthorizerDeps>;
10
+ export declare const middleware: () => <I extends APIGatewayProxyEventV2, O, E, R>(wrapped: Handler<I, O, E, R>) => Handler<I, O, E | HttpApiError, R | HeaderSignatureAuthorizerDeps>;
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.middleware = exports.HeaderSignatureAuthorizerDeps = void 0;
27
+ const P = __importStar(require("@konker.dev/effect-ts-prelude"));
28
+ const HttpApiError_1 = require("../../lib/HttpApiError");
29
+ const lib_1 = require("./lib");
30
+ const TAG = 'headerSignatureAuthorizer';
31
+ exports.HeaderSignatureAuthorizerDeps = P.Context.GenericTag('HeaderSignatureAuthorizerDeps');
32
+ // --------------------------------------------------------------------------
33
+ const middleware = () => (wrapped) => (i) => {
34
+ return P.pipe(exports.HeaderSignatureAuthorizerDeps, P.Effect.tap(P.Effect.logDebug(`[${TAG}] IN`)), P.Effect.flatMap(({ secret, signatureHeaderName }) => P.Effect.if((0, lib_1.validateHeaderSignature)(i.headers[signatureHeaderName], i.body, secret), {
35
+ onTrue: () => P.Effect.succeed(i),
36
+ onFalse: () => P.Effect.fail((0, HttpApiError_1.HttpApiError)('UnauthorizedError', 'Invalid signature', 401)),
37
+ })), P.Effect.tapError((_) => P.Effect.logError(`UnauthorizedError: Invalid signature: ${i.body}`)), P.Effect.flatMap(wrapped), P.Effect.tap(P.Effect.logDebug(`[${TAG}] OUT`)));
38
+ };
39
+ exports.middleware = middleware;
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/contrib/headerSignatureAuthorizer/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iEAAmD;AAKnD,yDAAsD;AACtD,+BAAgD;AAEhD,MAAM,GAAG,GAAG,2BAA2B,CAAC;AAO3B,QAAA,6BAA6B,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,CAC/D,+BAA+B,CAChC,CAAC;AAEF,6EAA6E;AACtE,MAAM,UAAU,GACrB,GAAG,EAAE,CACL,CACE,OAA4B,EACwC,EAAE,CACxE,CAAC,CAAI,EAAE,EAAE;IACP,OAAO,CAAC,CAAC,IAAI,CACX,qCAA6B,EAC7B,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,EAC9C,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,mBAAmB,EAAE,EAAE,EAAE,CACnD,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,IAAA,6BAAuB,EAAC,CAAC,CAAC,OAAO,CAAC,mBAAmB,CAAE,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE;QACpF,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACjC,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAA,2BAAY,EAAC,mBAAmB,EAAE,mBAAmB,EAAE,GAAG,CAAC,CAAC;KAC1F,CAAC,CACH,EACD,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,yCAAyC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAC9F,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EACzB,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,OAAO,CAAC,CAAC,CAChD,CAAC;AACJ,CAAC,CAAC;AAnBS,QAAA,UAAU,cAmBnB"}
@@ -0,0 +1,8 @@
1
+ import * as P from '@konker.dev/effect-ts-prelude';
2
+ import * as unit from './index';
3
+ export declare const CORRECT_TEST_HMAC_VALUE = "test-hmac-value";
4
+ export declare const INCORRECT_TEST_HMAC_VALUE = "wrong-hmac-value";
5
+ export declare const TEST_SIGNATURE_HEADER_NAME = "x-test-signature";
6
+ export declare const TEST_SECRET = "test-secret";
7
+ export declare const HEADER_SIGNATURE_AUTHORIZER_TEST_DEPS: unit.HeaderSignatureAuthorizerDeps;
8
+ export declare const mockHeaderSignatureAuthorizerDeps: <A, E, R>(self: P.Effect.Effect<A, E, R>) => P.Effect.Effect<A, E, Exclude<R, unit.HeaderSignatureAuthorizerDeps>>;
@@ -0,0 +1,87 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.mockHeaderSignatureAuthorizerDeps = exports.HEADER_SIGNATURE_AUTHORIZER_TEST_DEPS = exports.TEST_SECRET = exports.TEST_SIGNATURE_HEADER_NAME = exports.INCORRECT_TEST_HMAC_VALUE = exports.CORRECT_TEST_HMAC_VALUE = void 0;
27
+ const P = __importStar(require("@konker.dev/effect-ts-prelude"));
28
+ const utils = __importStar(require("@konker.dev/tiny-utils-fp"));
29
+ const test_common_1 = require("../../test/test-common");
30
+ const unit = __importStar(require("./index"));
31
+ const index_1 = require("./index");
32
+ exports.CORRECT_TEST_HMAC_VALUE = 'test-hmac-value';
33
+ exports.INCORRECT_TEST_HMAC_VALUE = 'wrong-hmac-value';
34
+ exports.TEST_SIGNATURE_HEADER_NAME = 'x-test-signature';
35
+ exports.TEST_SECRET = 'test-secret';
36
+ exports.HEADER_SIGNATURE_AUTHORIZER_TEST_DEPS = unit.HeaderSignatureAuthorizerDeps.of({
37
+ secret: exports.TEST_SECRET,
38
+ signatureHeaderName: exports.TEST_SIGNATURE_HEADER_NAME,
39
+ });
40
+ exports.mockHeaderSignatureAuthorizerDeps = P.Effect.provideService(index_1.HeaderSignatureAuthorizerDeps, exports.HEADER_SIGNATURE_AUTHORIZER_TEST_DEPS);
41
+ const TEST_IN_1 = {
42
+ isBase64Encoded: false,
43
+ requestContext: {},
44
+ body: 'TEST_BODY',
45
+ headers: {
46
+ [exports.TEST_SIGNATURE_HEADER_NAME]: exports.CORRECT_TEST_HMAC_VALUE,
47
+ },
48
+ };
49
+ const TEST_IN_2 = {
50
+ isBase64Encoded: false,
51
+ requestContext: {},
52
+ body: 'TEST_BODY',
53
+ headers: {
54
+ [exports.TEST_SIGNATURE_HEADER_NAME]: exports.INCORRECT_TEST_HMAC_VALUE,
55
+ },
56
+ };
57
+ describe('middleware/header-signature-authorizer', () => {
58
+ let errorSpy;
59
+ beforeEach(() => {
60
+ jest.spyOn(utils, 'sha256HmacHex').mockReturnValue(P.Effect.succeed(exports.CORRECT_TEST_HMAC_VALUE));
61
+ jest.spyOn(P.Effect, 'logDebug').mockReturnValue(P.Effect.succeed(undefined));
62
+ errorSpy = jest.spyOn(P.Effect, 'logError').mockReturnValue(P.Effect.succeed(undefined));
63
+ });
64
+ afterEach(() => {
65
+ jest.restoreAllMocks();
66
+ });
67
+ test('it should work as expected in an success case', async () => {
68
+ const egHandler = P.pipe(test_common_1.http200CoreIn, unit.middleware());
69
+ const result = await P.pipe(egHandler(TEST_IN_1), exports.mockHeaderSignatureAuthorizerDeps, P.Effect.runPromise);
70
+ expect(result).toStrictEqual({
71
+ statusCode: 200,
72
+ headers: {
73
+ QUX: 'qux_value',
74
+ },
75
+ body: JSON.stringify({ result: 'OK' }),
76
+ isBase64Encoded: false,
77
+ });
78
+ expect(errorSpy).toHaveBeenCalledTimes(0);
79
+ });
80
+ test('it should work as expected in an error case', async () => {
81
+ const egHandler = P.pipe(test_common_1.http200CoreIn, unit.middleware());
82
+ const result = P.pipe(egHandler(TEST_IN_2), exports.mockHeaderSignatureAuthorizerDeps, P.Effect.runPromise);
83
+ await expect(() => result).rejects.toThrow('Invalid signature');
84
+ expect(errorSpy).toHaveBeenCalledTimes(1);
85
+ });
86
+ });
87
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../src/contrib/headerSignatureAuthorizer/index.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import * as P from '@konker.dev/effect-ts-prelude';
2
+ import type { HttpApiError } from '../../lib/HttpApiError';
3
+ export declare function validateHeaderSignature(signature: string, requestRawBody: unknown, secret: string): P.Effect.Effect<boolean, HttpApiError>;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.validateHeaderSignature = validateHeaderSignature;
27
+ const P = __importStar(require("@konker.dev/effect-ts-prelude"));
28
+ const tiny_utils_fp_1 = require("@konker.dev/tiny-utils-fp");
29
+ const HttpApiError_1 = require("../../lib/HttpApiError");
30
+ function validateHeaderSignature(signature, requestRawBody, secret) {
31
+ return P.pipe((0, tiny_utils_fp_1.sha256HmacHex)(String(requestRawBody), secret), P.Effect.flatMap((calculatedHmac) => P.Effect.succeed(calculatedHmac === signature)), P.Effect.mapError(HttpApiError_1.toHttpApiError));
32
+ }
33
+ //# sourceMappingURL=lib.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib.js","sourceRoot":"","sources":["../../../src/contrib/headerSignatureAuthorizer/lib.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAOA,0DAUC;AAjBD,iEAAmD;AAEnD,6DAA0D;AAG1D,yDAAwD;AAExD,SAAgB,uBAAuB,CACrC,SAAiB,EACjB,cAAuB,EACvB,MAAc;IAEd,OAAO,CAAC,CAAC,IAAI,CACX,IAAA,6BAAa,EAAC,MAAM,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,EAC7C,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS,CAAC,CAAC,EACpF,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,6BAAc,CAAC,CAClC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const CORRECT_TEST_HMAC_VALUE = "test-hmac-value";
2
+ export declare const INCORRECT_TEST_HMAC_VALUE = "wrong-hmac-value";
3
+ export declare const TEST_BODY = "test-body";
4
+ export declare const TEST_SECRET = "test-secret";
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.TEST_SECRET = exports.TEST_BODY = exports.INCORRECT_TEST_HMAC_VALUE = exports.CORRECT_TEST_HMAC_VALUE = void 0;
27
+ const P = __importStar(require("@konker.dev/effect-ts-prelude"));
28
+ const utils = __importStar(require("@konker.dev/tiny-utils-fp"));
29
+ const unit = __importStar(require("./lib"));
30
+ exports.CORRECT_TEST_HMAC_VALUE = 'test-hmac-value';
31
+ exports.INCORRECT_TEST_HMAC_VALUE = 'wrong-hmac-value';
32
+ exports.TEST_BODY = 'test-body';
33
+ exports.TEST_SECRET = 'test-secret';
34
+ describe('middleware/header-signature-authorizer/lib', () => {
35
+ beforeEach(() => {
36
+ jest.spyOn(utils, 'sha256HmacHex').mockReturnValue(P.Effect.succeed(exports.CORRECT_TEST_HMAC_VALUE));
37
+ jest.spyOn(P.Effect, 'logDebug').mockReturnValue(P.Effect.succeed(undefined));
38
+ });
39
+ afterEach(() => {
40
+ jest.restoreAllMocks();
41
+ });
42
+ test('it should work as expected in an success case', async () => {
43
+ const result = await P.pipe(unit.validateHeaderSignature(exports.CORRECT_TEST_HMAC_VALUE, exports.TEST_BODY, exports.TEST_SECRET), P.Effect.runPromise);
44
+ expect(result).toStrictEqual(true);
45
+ });
46
+ test('it should work as expected in an error case', async () => {
47
+ const result = await P.pipe(unit.validateHeaderSignature(exports.INCORRECT_TEST_HMAC_VALUE, exports.TEST_BODY, exports.TEST_SECRET), P.Effect.runPromise);
48
+ expect(result).toStrictEqual(false);
49
+ });
50
+ });
51
+ //# sourceMappingURL=lib.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib.test.js","sourceRoot":"","sources":["../../../src/contrib/headerSignatureAuthorizer/lib.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iEAAmD;AAEnD,iEAAmD;AAEnD,4CAA8B;AAEjB,QAAA,uBAAuB,GAAG,iBAAiB,CAAC;AAC5C,QAAA,yBAAyB,GAAG,kBAAkB,CAAC;AAC/C,QAAA,SAAS,GAAG,WAAW,CAAC;AACxB,QAAA,WAAW,GAAG,aAAa,CAAC;AAEzC,QAAQ,CAAC,4CAA4C,EAAE,GAAG,EAAE;IAC1D,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,+BAAuB,CAAC,CAAC,CAAC;QAC9F,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAChF,CAAC,CAAC,CAAC;IACH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,eAAe,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC/D,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,IAAI,CACzB,IAAI,CAAC,uBAAuB,CAAC,+BAAuB,EAAE,iBAAS,EAAE,mBAAW,CAAC,EAC7E,CAAC,CAAC,MAAM,CAAC,UAAU,CACpB,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,IAAI,CACzB,IAAI,CAAC,uBAAuB,CAAC,iCAAyB,EAAE,iBAAS,EAAE,mBAAW,CAAC,EAC/E,CAAC,CAAC,MAAM,CAAC,UAAU,CACpB,CAAC;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -6,6 +6,7 @@ export * as cacheInMemory from './cacheInMemory';
6
6
  export * as cacheMomento from './cacheMomento';
7
7
  export * as dynamodbDocClientInit from './dynamodbDocClientInit';
8
8
  export * as envValidator from './envValidator';
9
+ export * as headerSignatureAuthorizer from './headerSignatureAuthorizer';
9
10
  export * as headersNormalizer from './headersNormalizer';
10
11
  export * as headersValidator from './headersValidator';
11
12
  export * as helmetJsHeaders from './helmetJsHeaders';
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.trivial = exports.requestResponseLogger = exports.queryStringValidator = exports.pathTokenAuthorizer = exports.pathParametersValidator = exports.momentoClientInit = exports.jsonBodyParser = exports.identity = exports.helmetJsHeaders = exports.headersValidator = exports.headersNormalizer = exports.envValidator = exports.dynamodbDocClientInit = exports.cacheMomento = exports.cacheInMemory = exports.bodyValidator = exports.base64BodyDecoder = exports.awsAuthorizerProcessor = exports.awsApiGatewayProcessor = void 0;
26
+ exports.trivial = exports.requestResponseLogger = exports.queryStringValidator = exports.pathTokenAuthorizer = exports.pathParametersValidator = exports.momentoClientInit = exports.jsonBodyParser = exports.identity = exports.helmetJsHeaders = exports.headersValidator = exports.headersNormalizer = exports.headerSignatureAuthorizer = exports.envValidator = exports.dynamodbDocClientInit = exports.cacheMomento = exports.cacheInMemory = exports.bodyValidator = exports.base64BodyDecoder = exports.awsAuthorizerProcessor = exports.awsApiGatewayProcessor = void 0;
27
27
  exports.awsApiGatewayProcessor = __importStar(require("./awsApiGatewayProcessor"));
28
28
  exports.awsAuthorizerProcessor = __importStar(require("./awsAuthorizerProcessor"));
29
29
  exports.base64BodyDecoder = __importStar(require("./base64BodyDecoder"));
@@ -32,6 +32,7 @@ exports.cacheInMemory = __importStar(require("./cacheInMemory"));
32
32
  exports.cacheMomento = __importStar(require("./cacheMomento"));
33
33
  exports.dynamodbDocClientInit = __importStar(require("./dynamodbDocClientInit"));
34
34
  exports.envValidator = __importStar(require("./envValidator"));
35
+ exports.headerSignatureAuthorizer = __importStar(require("./headerSignatureAuthorizer"));
35
36
  exports.headersNormalizer = __importStar(require("./headersNormalizer"));
36
37
  exports.headersValidator = __importStar(require("./headersValidator"));
37
38
  exports.helmetJsHeaders = __importStar(require("./helmetJsHeaders"));
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contrib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mFAAmE;AACnE,mFAAmE;AACnE,yEAAyD;AACzD,iEAAiD;AACjD,iEAAiD;AACjD,+DAA+C;AAC/C,iFAAiE;AACjE,+DAA+C;AAC/C,yEAAyD;AACzD,uEAAuD;AACvD,qEAAqD;AACrD,uDAAuC;AACvC,mEAAmD;AACnD,yEAAyD;AACzD,qFAAqE;AACrE,6EAA6D;AAC7D,+EAA+D;AAC/D,iFAAiE;AACjE,qDAAqC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contrib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mFAAmE;AACnE,mFAAmE;AACnE,yEAAyD;AACzD,iEAAiD;AACjD,iEAAiD;AACjD,+DAA+C;AAC/C,iFAAiE;AACjE,+DAA+C;AAC/C,yFAAyE;AACzE,yEAAyD;AACzD,uEAAuD;AACvD,qEAAqD;AACrD,uDAAuC;AACvC,mEAAmD;AACnD,yEAAyD;AACzD,qFAAqE;AACrE,6EAA6D;AAC7D,+EAA+D;AAC/D,iFAAiE;AACjE,qDAAqC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@konker.dev/middleware-fp",
3
- "version": "0.0.5",
3
+ "version": "0.0.6",
4
4
  "author": "Konrad Markus <mail@konker.dev>",
5
5
  "description": "Type safe middleware system based on Effect-ts",
6
6
  "license": "ISC",
@@ -20,8 +20,8 @@
20
20
  "effect-ts"
21
21
  ],
22
22
  "peerDependencies": {
23
- "@gomomento/sdk": "^1.95.0",
24
23
  "@aws-sdk/client-dynamodb": "^3.635.0",
24
+ "@gomomento/sdk": "^1.95.0",
25
25
  "@konker.dev/aws-client-effect-dynamodb": "^0.0.3",
26
26
  "@konker.dev/momento-cache-client-effect": "^0.0.7",
27
27
  "@konker.dev/tiny-auth-utils-fp": "^0.0.2",
@@ -32,6 +32,7 @@
32
32
  "@konker.dev/effect-ts-prelude": "^0.0.16",
33
33
  "@konker.dev/tiny-cache-fp": "^0.0.5",
34
34
  "@konker.dev/tiny-error-fp": "^0.0.7",
35
+ "@konker.dev/tiny-utils-fp": "^0.0.1",
35
36
  "effect": "^3.5.6",
36
37
  "lesslog": "^0.2.7"
37
38
  },