@konker.dev/middleware-fp 0.0.16 → 0.0.19

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.
Files changed (59) hide show
  1. package/dist/contrib/basicAuthAuthenticator.d.ts +11 -0
  2. package/dist/contrib/basicAuthAuthenticator.js +43 -0
  3. package/dist/contrib/basicAuthAuthenticator.js.map +1 -0
  4. package/dist/contrib/basicAuthAuthenticator.test.d.ts +4 -0
  5. package/dist/contrib/basicAuthAuthenticator.test.js +86 -0
  6. package/dist/contrib/basicAuthAuthenticator.test.js.map +1 -0
  7. package/dist/contrib/basicAuthDecoder.d.ts +6 -0
  8. package/dist/contrib/basicAuthDecoder.js +39 -0
  9. package/dist/contrib/basicAuthDecoder.js.map +1 -0
  10. package/dist/contrib/basicAuthDecoder.test.d.ts +1 -0
  11. package/dist/contrib/basicAuthDecoder.test.js +68 -0
  12. package/dist/contrib/basicAuthDecoder.test.js.map +1 -0
  13. package/dist/contrib/headerSignatureAuthorizer/index.test.js +1 -2
  14. package/dist/contrib/headerSignatureAuthorizer/index.test.js.map +1 -1
  15. package/dist/contrib/headersNormalizer/types.d.ts +3 -0
  16. package/dist/contrib/index.d.ts +5 -0
  17. package/dist/contrib/index.js +6 -1
  18. package/dist/contrib/index.js.map +1 -1
  19. package/dist/contrib/jwtAuthenticator.d.ts +9 -0
  20. package/dist/contrib/jwtAuthenticator.js +44 -0
  21. package/dist/contrib/jwtAuthenticator.js.map +1 -0
  22. package/dist/contrib/jwtAuthenticator.test.d.ts +4 -0
  23. package/dist/contrib/jwtAuthenticator.test.js +83 -0
  24. package/dist/contrib/jwtAuthenticator.test.js.map +1 -0
  25. package/dist/contrib/jwtAuthenticatorRsa.d.ts +9 -0
  26. package/dist/contrib/jwtAuthenticatorRsa.js +44 -0
  27. package/dist/contrib/jwtAuthenticatorRsa.js.map +1 -0
  28. package/dist/contrib/jwtAuthenticatorRsa.test.d.ts +4 -0
  29. package/dist/contrib/jwtAuthenticatorRsa.test.js +84 -0
  30. package/dist/contrib/jwtAuthenticatorRsa.test.js.map +1 -0
  31. package/dist/contrib/jwtDecoder.d.ts +6 -0
  32. package/dist/contrib/jwtDecoder.js +40 -0
  33. package/dist/contrib/jwtDecoder.js.map +1 -0
  34. package/dist/contrib/jwtDecoder.test.d.ts +1 -0
  35. package/dist/contrib/jwtDecoder.test.js +77 -0
  36. package/dist/contrib/jwtDecoder.test.js.map +1 -0
  37. package/dist/contrib/{pathTokenAuthorizer/index.d.ts → pathTokenAuthorizer.d.ts} +2 -2
  38. package/dist/contrib/{pathTokenAuthorizer/index.js → pathTokenAuthorizer.js} +2 -2
  39. package/dist/contrib/pathTokenAuthorizer.js.map +1 -0
  40. package/dist/contrib/{pathTokenAuthorizer/index.test.d.ts → pathTokenAuthorizer.test.d.ts} +1 -1
  41. package/dist/contrib/{pathTokenAuthorizer/index.test.js → pathTokenAuthorizer.test.js} +4 -5
  42. package/dist/contrib/pathTokenAuthorizer.test.js.map +1 -0
  43. package/dist/test/unit/auth-1.test.js +2 -2
  44. package/dist/test/unit/auth-1.test.js.map +1 -1
  45. package/dist/test/unit/auth-2.test.js +2 -2
  46. package/dist/test/unit/auth-2.test.js.map +1 -1
  47. package/dist/test/unit/basic-1.test.js +3 -3
  48. package/dist/test/unit/basic-1.test.js.map +1 -1
  49. package/dist/test/unit/basic-2.test.d.ts +1 -0
  50. package/dist/test/unit/basic-2.test.js +102 -0
  51. package/dist/test/unit/basic-2.test.js.map +1 -0
  52. package/dist/test/unit/basic-3.test.d.ts +1 -0
  53. package/dist/test/unit/basic-3.test.js +98 -0
  54. package/dist/test/unit/basic-3.test.js.map +1 -0
  55. package/dist/test/unit/kitchen-sink.test.js +18 -8
  56. package/dist/test/unit/kitchen-sink.test.js.map +1 -1
  57. package/package.json +2 -2
  58. package/dist/contrib/pathTokenAuthorizer/index.js.map +0 -1
  59. package/dist/contrib/pathTokenAuthorizer/index.test.js.map +0 -1
@@ -0,0 +1,11 @@
1
+ import * as P from '@konker.dev/effect-ts-prelude';
2
+ import type { ValidBasicAuthCredentialSet } from '@konker.dev/tiny-auth-utils-fp/dist/basic-auth';
3
+ import type { APIGatewayProxyEventV2 } from 'aws-lambda';
4
+ import type { Handler } from '../index';
5
+ import { HttpApiError } from '../lib/HttpApiError';
6
+ import type { WithNormalizedInputHeaders, WithUserId } from './headersNormalizer/types';
7
+ export type BasicAuthAuthenticatorDeps = {
8
+ readonly validBasicAuthCredentialSet: ValidBasicAuthCredentialSet;
9
+ };
10
+ export declare const BasicAuthAuthenticatorDeps: P.Context.Tag<BasicAuthAuthenticatorDeps, BasicAuthAuthenticatorDeps>;
11
+ export declare const middleware: () => <I extends APIGatewayProxyEventV2, O, E, R>(wrapped: Handler<I & WithUserId, O, E, R>) => Handler<I & WithNormalizedInputHeaders, O, E | HttpApiError, R | BasicAuthAuthenticatorDeps>;
@@ -0,0 +1,43 @@
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.BasicAuthAuthenticatorDeps = void 0;
27
+ const P = __importStar(require("@konker.dev/effect-ts-prelude"));
28
+ const basic_auth_1 = require("@konker.dev/tiny-auth-utils-fp/dist/basic-auth");
29
+ const helpers_1 = require("@konker.dev/tiny-auth-utils-fp/dist/helpers");
30
+ const HttpApiError_1 = require("../lib/HttpApiError");
31
+ const TAG = 'basicAuthAuthenticator';
32
+ exports.BasicAuthAuthenticatorDeps = P.Context.GenericTag('BasicAuthAuthenticatorDeps');
33
+ // --------------------------------------------------------------------------
34
+ const middleware = () => (wrapped) => (i) => {
35
+ return P.pipe(P.Effect.Do, P.Effect.tap(P.Effect.logDebug(`[${TAG}] IN`)), P.Effect.bind('deps', () => exports.BasicAuthAuthenticatorDeps), P.Effect.bind('authToken', () => (0, helpers_1.extractBasicAuthHeaderValue)(i.headers['authorization'])), P.Effect.bind('decoded', ({ authToken }) => (0, basic_auth_1.basicAuthDecodeHeaderValue)(authToken)), P.Effect.bind('verification', ({ decoded, deps }) => P.pipe(decoded, (0, basic_auth_1.basicAuthVerifyCredentials)(deps.validBasicAuthCredentialSet))), P.Effect.flatMap(({ verification }) => verification.verified
36
+ ? P.Effect.succeed({
37
+ ...i,
38
+ userId: verification.userId,
39
+ })
40
+ : P.Effect.fail(void 0)), P.Effect.mapError((e) => (0, HttpApiError_1.HttpApiError)('UnauthorizedError', `Invalid basic auth credentials: ${e?.message}`, 401, TAG, e)), P.Effect.tapError(P.Effect.logError), P.Effect.flatMap(wrapped), P.Effect.tap(P.Effect.logDebug(`[${TAG}] OUT`)));
41
+ };
42
+ exports.middleware = middleware;
43
+ //# sourceMappingURL=basicAuthAuthenticator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"basicAuthAuthenticator.js","sourceRoot":"","sources":["../../src/contrib/basicAuthAuthenticator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iEAAmD;AAGnD,+EAAwH;AACxH,yEAA0F;AAI1F,sDAAmD;AAGnD,MAAM,GAAG,GAAG,wBAAwB,CAAC;AAMxB,QAAA,0BAA0B,GACrC,CAAC,CAAC,OAAO,CAAC,UAAU,CAA6B,4BAA4B,CAAC,CAAC;AAEjF,6EAA6E;AACtE,MAAM,UAAU,GACrB,GAAG,EAAE,CACL,CACE,OAAyC,EACqD,EAAE,CAClG,CAAC,CAAiC,EAAE,EAAE;IACpC,OAAO,CAAC,CAAC,IAAI,CACX,CAAC,CAAC,MAAM,CAAC,EAAE,EACX,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,EAC9C,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,kCAA0B,CAAC,EACvD,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,IAAA,qCAA2B,EAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EACzF,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,IAAA,uCAA0B,EAAC,SAAS,CAAC,CAAC,EAClF,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAClD,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,IAAA,uCAA0B,EAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC,CAC9E,EACD,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CACpC,YAAY,CAAC,QAAQ;QACnB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YACf,GAAG,CAAC;YACJ,MAAM,EAAE,YAAY,CAAC,MAAM;SAC5B,CAAC;QACJ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAC1B,EACD,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CACtB,IAAA,2BAAY,EAAC,mBAAmB,EAAE,mCAAmC,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAChG,EACD,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EACpC,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;AA9BS,QAAA,UAAU,cA8BnB"}
@@ -0,0 +1,4 @@
1
+ import * as P from '@konker.dev/effect-ts-prelude';
2
+ import * as unit from './basicAuthAuthenticator';
3
+ export declare const BASIC_AUTH_AUTHENTICATOR_TEST_DEPS: unit.BasicAuthAuthenticatorDeps;
4
+ export declare const mockBasicAuthAuthenticatorDeps: <A, E, R>(self: P.Effect.Effect<A, E, R>) => P.Effect.Effect<A, E, Exclude<R, unit.BasicAuthAuthenticatorDeps>>;
@@ -0,0 +1,86 @@
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.mockBasicAuthAuthenticatorDeps = exports.BASIC_AUTH_AUTHENTICATOR_TEST_DEPS = void 0;
27
+ const P = __importStar(require("@konker.dev/effect-ts-prelude"));
28
+ const test_common_1 = require("../test/test-common");
29
+ const unit = __importStar(require("./basicAuthAuthenticator"));
30
+ exports.BASIC_AUTH_AUTHENTICATOR_TEST_DEPS = unit.BasicAuthAuthenticatorDeps.of({
31
+ validBasicAuthCredentialSet: [
32
+ {
33
+ username: 'user0',
34
+ passwords: ['secret-0', 'secret-1'],
35
+ },
36
+ ],
37
+ });
38
+ exports.mockBasicAuthAuthenticatorDeps = P.Effect.provideService(unit.BasicAuthAuthenticatorDeps, exports.BASIC_AUTH_AUTHENTICATOR_TEST_DEPS);
39
+ // user0:secret-0
40
+ const VALID_BASIC_AUTH_VALUE = 'Basic dXNlcjA6c2VjcmV0LTA=';
41
+ // user0:bad-secret
42
+ const INVALID_BASIC_AUTH_VALUE = 'Basic dXNlcjA6YmFkLXNlY3JldA==';
43
+ const TEST_IN_1 = {
44
+ headers: {
45
+ authorization: VALID_BASIC_AUTH_VALUE,
46
+ },
47
+ isBase64Encoded: false,
48
+ body: {},
49
+ };
50
+ const TEST_IN_2 = {
51
+ headers: {
52
+ authorization: INVALID_BASIC_AUTH_VALUE,
53
+ },
54
+ isBase64Encoded: false,
55
+ body: {},
56
+ };
57
+ describe('middleware/basic-auth-authenticator', () => {
58
+ let errorSpy;
59
+ beforeEach(() => {
60
+ jest.spyOn(P.Effect, 'logDebug').mockReturnValue(P.Effect.succeed(undefined));
61
+ errorSpy = jest.spyOn(P.Effect, 'logError').mockReturnValue(P.Effect.succeed(undefined));
62
+ });
63
+ afterEach(() => {
64
+ jest.restoreAllMocks();
65
+ });
66
+ test('it should work as expected in an success case', async () => {
67
+ const egHandler = P.pipe(test_common_1.echoCoreIn, unit.middleware());
68
+ const result = await P.pipe(egHandler(TEST_IN_1), exports.mockBasicAuthAuthenticatorDeps, P.Effect.runPromise);
69
+ expect(result).toStrictEqual({
70
+ headers: {
71
+ authorization: VALID_BASIC_AUTH_VALUE,
72
+ },
73
+ body: {},
74
+ isBase64Encoded: false,
75
+ userId: 'user0',
76
+ });
77
+ expect(errorSpy).toHaveBeenCalledTimes(0);
78
+ });
79
+ test('it should work as expected in an error case', async () => {
80
+ const egHandler = P.pipe(test_common_1.echoCoreIn, unit.middleware());
81
+ const result = P.pipe(egHandler(TEST_IN_2), exports.mockBasicAuthAuthenticatorDeps, P.Effect.runPromise);
82
+ await expect(() => result).rejects.toThrow('Invalid basic auth credentials');
83
+ expect(errorSpy).toHaveBeenCalledTimes(1);
84
+ });
85
+ });
86
+ //# sourceMappingURL=basicAuthAuthenticator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"basicAuthAuthenticator.test.js","sourceRoot":"","sources":["../../src/contrib/basicAuthAuthenticator.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iEAAmD;AAInD,qDAAiD;AACjD,+DAAiD;AAGpC,QAAA,kCAAkC,GAAoC,IAAI,CAAC,0BAA0B,CAAC,EAAE,CAAC;IACpH,2BAA2B,EAAE;QAC3B;YACE,QAAQ,EAAE,OAAO;YACjB,SAAS,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;SACpC;KACF;CACF,CAAC,CAAC;AAEU,QAAA,8BAA8B,GAAG,CAAC,CAAC,MAAM,CAAC,cAAc,CACnE,IAAI,CAAC,0BAA0B,EAC/B,0CAAkC,CACnC,CAAC;AAEF,iBAAiB;AACjB,MAAM,sBAAsB,GAAG,4BAA4B,CAAC;AAE5D,mBAAmB;AACnB,MAAM,wBAAwB,GAAG,gCAAgC,CAAC;AAElE,MAAM,SAAS,GAAG;IAChB,OAAO,EAAE;QACP,aAAa,EAAE,sBAAsB;KACtC;IACD,eAAe,EAAE,KAAK;IACtB,IAAI,EAAE,EAAE;CACyD,CAAC;AAEpE,MAAM,SAAS,GAAG;IAChB,OAAO,EAAE;QACP,aAAa,EAAE,wBAAwB;KACxC;IACD,eAAe,EAAE,KAAK;IACtB,IAAI,EAAE,EAAE;CACyD,CAAC;AAEpE,QAAQ,CAAC,qCAAqC,EAAE,GAAG,EAAE;IACnD,IAAI,QAA0B,CAAC;IAE/B,UAAU,CAAC,GAAG,EAAE;QACd,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9E,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAC3F,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,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,wBAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,sCAA8B,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAEvG,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC;YAC3B,OAAO,EAAE;gBACP,aAAa,EAAE,sBAAsB;aACtC;YACD,IAAI,EAAE,EAAE;YACR,eAAe,EAAE,KAAK;YACtB,MAAM,EAAE,OAAO;SAChB,CAAC,CAAC;QACH,MAAM,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,wBAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,sCAA8B,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAEjG,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;QAC7E,MAAM,CAAC,QAAQ,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { APIGatewayProxyEventV2 } from 'aws-lambda';
2
+ import type { Handler } from '../index';
3
+ import type { MiddlewareError } from '../lib/MiddlewareError';
4
+ import type { WithNormalizedInputHeaders, WithUserId } from './headersNormalizer/types';
5
+ export type { WithUserId } from './headersNormalizer/types';
6
+ export declare const middleware: () => <I extends APIGatewayProxyEventV2, O, E, R>(wrapped: Handler<I & WithUserId, O, E, R>) => Handler<I & WithNormalizedInputHeaders, O, E | MiddlewareError, R>;
@@ -0,0 +1,39 @@
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 = void 0;
27
+ const P = __importStar(require("@konker.dev/effect-ts-prelude"));
28
+ const basic_auth_1 = require("@konker.dev/tiny-auth-utils-fp/dist/basic-auth");
29
+ const helpers_1 = require("@konker.dev/tiny-auth-utils-fp/dist/helpers");
30
+ const MiddlewareError_1 = require("../lib/MiddlewareError");
31
+ const TAG = 'basicAuthDecoder';
32
+ const middleware = () => (wrapped) => (i) => {
33
+ return P.pipe(P.Effect.Do, P.Effect.tap(P.Effect.logDebug(`[${TAG}] IN`)), P.Effect.bind('authToken', () => (0, helpers_1.extractBasicAuthHeaderValue)(i.headers['authorization'])), P.Effect.bind('decoded', ({ authToken }) => (0, basic_auth_1.basicAuthDecodeHeaderValue)(authToken)), P.Effect.map(({ decoded }) => ({
34
+ ...i,
35
+ userId: decoded.username,
36
+ })), P.Effect.mapError(MiddlewareError_1.toMiddlewareError), P.Effect.flatMap(wrapped), P.Effect.tap(P.Effect.logDebug(`[${TAG}] OUT`)));
37
+ };
38
+ exports.middleware = middleware;
39
+ //# sourceMappingURL=basicAuthDecoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"basicAuthDecoder.js","sourceRoot":"","sources":["../../src/contrib/basicAuthDecoder.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iEAAmD;AAEnD,+EAA4F;AAC5F,yEAA0F;AAK1F,4DAA2D;AAG3D,MAAM,GAAG,GAAG,kBAAkB,CAAC;AAKxB,MAAM,UAAU,GACrB,GAAG,EAAE,CACL,CACE,OAAyC,EAC2B,EAAE,CACxE,CAAC,CAAiC,EAAE,EAAE;IACpC,OAAO,CAAC,CAAC,IAAI,CACX,CAAC,CAAC,MAAM,CAAC,EAAE,EACX,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,EAC9C,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,IAAA,qCAA2B,EAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EACzF,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,IAAA,uCAA0B,EAAC,SAAS,CAAC,CAAC,EAClF,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QAC7B,GAAG,CAAC;QACJ,MAAM,EAAE,OAAO,CAAC,QAAQ;KACzB,CAAC,CAAC,EACH,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,mCAAiB,CAAC,EACpC,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 @@
1
+ export {};
@@ -0,0 +1,68 @@
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
+ const P = __importStar(require("@konker.dev/effect-ts-prelude"));
27
+ const test_common_1 = require("../test/test-common");
28
+ const unit = __importStar(require("./basicAuthDecoder"));
29
+ // user0:secret-0
30
+ const VALID_BASIC_AUTH_VALUE = 'Basic dXNlcjA6c2VjcmV0LTA=';
31
+ const TEST_IN_1 = {
32
+ headers: {
33
+ authorization: VALID_BASIC_AUTH_VALUE,
34
+ },
35
+ isBase64Encoded: false,
36
+ body: {},
37
+ };
38
+ const TEST_IN_2 = {
39
+ headers: {},
40
+ isBase64Encoded: false,
41
+ body: {},
42
+ };
43
+ describe('middleware/basic-auth-decoder', () => {
44
+ beforeEach(() => {
45
+ jest.spyOn(P.Effect, 'logDebug').mockReturnValue(P.Effect.succeed(undefined));
46
+ });
47
+ afterEach(() => {
48
+ jest.restoreAllMocks();
49
+ });
50
+ test('it should work as expected in an success case', async () => {
51
+ const egHandler = P.pipe(test_common_1.echoCoreIn, unit.middleware());
52
+ const result = await P.pipe(egHandler(TEST_IN_1), P.Effect.runPromise);
53
+ expect(result).toStrictEqual({
54
+ headers: {
55
+ authorization: VALID_BASIC_AUTH_VALUE,
56
+ },
57
+ body: {},
58
+ isBase64Encoded: false,
59
+ userId: 'user0',
60
+ });
61
+ });
62
+ test('it should work as expected in an error case', async () => {
63
+ const egHandler = P.pipe(test_common_1.echoCoreIn, unit.middleware());
64
+ const result = P.pipe(egHandler(TEST_IN_2), P.Effect.runPromise);
65
+ await expect(() => result).rejects.toThrow('No token found');
66
+ });
67
+ });
68
+ //# sourceMappingURL=basicAuthDecoder.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"basicAuthDecoder.test.js","sourceRoot":"","sources":["../../src/contrib/basicAuthDecoder.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iEAAmD;AAInD,qDAAiD;AACjD,yDAA2C;AAG3C,iBAAiB;AACjB,MAAM,sBAAsB,GAAG,4BAA4B,CAAC;AAE5D,MAAM,SAAS,GAAG;IAChB,OAAO,EAAE;QACP,aAAa,EAAE,sBAAsB;KACtC;IACD,eAAe,EAAE,KAAK;IACtB,IAAI,EAAE,EAAE;CACyD,CAAC;AAEpE,MAAM,SAAS,GAAG;IAChB,OAAO,EAAE,EAAE;IACX,eAAe,EAAE,KAAK;IACtB,IAAI,EAAE,EAAE;CACyD,CAAC;AAEpE,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,UAAU,CAAC,GAAG,EAAE;QACd,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,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,wBAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAEvE,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC;YAC3B,OAAO,EAAE;gBACP,aAAa,EAAE,sBAAsB;aACtC;YACD,IAAI,EAAE,EAAE;YACR,eAAe,EAAE,KAAK;YACtB,MAAM,EAAE,OAAO;SAChB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,SAAS,GAAG,CAAC,CAAC,IAAI,CAAC,wBAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAEjE,MAAM,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -28,7 +28,6 @@ const P = __importStar(require("@konker.dev/effect-ts-prelude"));
28
28
  const utils = __importStar(require("@konker.dev/tiny-utils-fp"));
29
29
  const test_common_1 = require("../../test/test-common");
30
30
  const unit = __importStar(require("./index"));
31
- const index_1 = require("./index");
32
31
  exports.CORRECT_TEST_HMAC_VALUE = 'test-hmac-value';
33
32
  exports.INCORRECT_TEST_HMAC_VALUE = 'wrong-hmac-value';
34
33
  exports.TEST_SIGNATURE_HEADER_NAME = 'x-test-signature';
@@ -37,7 +36,7 @@ exports.HEADER_SIGNATURE_AUTHORIZER_TEST_DEPS = unit.HeaderSignatureAuthorizerDe
37
36
  secret: exports.TEST_SECRET,
38
37
  signatureHeaderName: exports.TEST_SIGNATURE_HEADER_NAME,
39
38
  });
40
- exports.mockHeaderSignatureAuthorizerDeps = P.Effect.provideService(index_1.HeaderSignatureAuthorizerDeps, exports.HEADER_SIGNATURE_AUTHORIZER_TEST_DEPS);
39
+ exports.mockHeaderSignatureAuthorizerDeps = P.Effect.provideService(unit.HeaderSignatureAuthorizerDeps, exports.HEADER_SIGNATURE_AUTHORIZER_TEST_DEPS);
41
40
  const TEST_IN_1 = {
42
41
  isBase64Encoded: false,
43
42
  requestContext: {},
@@ -1 +1 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../src/contrib/headerSignatureAuthorizer/index.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../src/contrib/headerSignatureAuthorizer/index.test.ts"],"names":[],"mappings":"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"}
@@ -12,3 +12,6 @@ export type WithNormalizedInputHeaders = {
12
12
  export type WithNormalizedOutputHeaders = {
13
13
  headers?: ResponseHeaders;
14
14
  };
15
+ export type WithUserId = {
16
+ readonly userId: string | undefined;
17
+ };
@@ -2,6 +2,8 @@ export * as awsApiGatewayProcessor from './awsApiGatewayProcessor';
2
2
  export * as awsIamAuthorizerProcessor from './awsIamAuthorizerProcessor';
3
3
  export * as awsSimpleAuthorizerProcessor from './awsSimpleAuthorizerProcessor';
4
4
  export * as base64BodyDecoder from './base64BodyDecoder';
5
+ export * as basicAuthAuthenticator from './basicAuthAuthenticator';
6
+ export * as basicAuthDecoder from './basicAuthDecoder';
5
7
  export * as bodyValidator from './bodyValidator';
6
8
  export * as cacheInMemory from './cacheInMemory';
7
9
  export * as cacheMomento from './cacheMomento';
@@ -13,6 +15,9 @@ export * as headersValidator from './headersValidator';
13
15
  export * as helmetJsHeaders from './helmetJsHeaders';
14
16
  export * as identity from './identity';
15
17
  export * as jsonBodyParser from './jsonBodyParser';
18
+ export * as jwtAuthenticator from './jwtAuthenticator';
19
+ export * as jwtAuthenticatorRsa from './jwtAuthenticatorRsa';
20
+ export * as jwtDecoder from './jwtDecoder';
16
21
  export * as momentoClientInit from './momentoClientInit';
17
22
  export * as pathParametersValidator from './pathParametersValidator';
18
23
  export * as pathTokenAuthorizer from './pathTokenAuthorizer';
@@ -23,11 +23,13 @@ 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.headerSignatureAuthorizer = exports.envValidator = exports.dynamodbDocClientInit = exports.cacheMomento = exports.cacheInMemory = exports.bodyValidator = exports.base64BodyDecoder = exports.awsSimpleAuthorizerProcessor = exports.awsIamAuthorizerProcessor = exports.awsApiGatewayProcessor = void 0;
26
+ exports.trivial = exports.requestResponseLogger = exports.queryStringValidator = exports.pathTokenAuthorizer = exports.pathParametersValidator = exports.momentoClientInit = exports.jwtDecoder = exports.jwtAuthenticatorRsa = exports.jwtAuthenticator = exports.jsonBodyParser = exports.identity = exports.helmetJsHeaders = exports.headersValidator = exports.headersNormalizer = exports.headerSignatureAuthorizer = exports.envValidator = exports.dynamodbDocClientInit = exports.cacheMomento = exports.cacheInMemory = exports.bodyValidator = exports.basicAuthDecoder = exports.basicAuthAuthenticator = exports.base64BodyDecoder = exports.awsSimpleAuthorizerProcessor = exports.awsIamAuthorizerProcessor = exports.awsApiGatewayProcessor = void 0;
27
27
  exports.awsApiGatewayProcessor = __importStar(require("./awsApiGatewayProcessor"));
28
28
  exports.awsIamAuthorizerProcessor = __importStar(require("./awsIamAuthorizerProcessor"));
29
29
  exports.awsSimpleAuthorizerProcessor = __importStar(require("./awsSimpleAuthorizerProcessor"));
30
30
  exports.base64BodyDecoder = __importStar(require("./base64BodyDecoder"));
31
+ exports.basicAuthAuthenticator = __importStar(require("./basicAuthAuthenticator"));
32
+ exports.basicAuthDecoder = __importStar(require("./basicAuthDecoder"));
31
33
  exports.bodyValidator = __importStar(require("./bodyValidator"));
32
34
  exports.cacheInMemory = __importStar(require("./cacheInMemory"));
33
35
  exports.cacheMomento = __importStar(require("./cacheMomento"));
@@ -39,6 +41,9 @@ exports.headersValidator = __importStar(require("./headersValidator"));
39
41
  exports.helmetJsHeaders = __importStar(require("./helmetJsHeaders"));
40
42
  exports.identity = __importStar(require("./identity"));
41
43
  exports.jsonBodyParser = __importStar(require("./jsonBodyParser"));
44
+ exports.jwtAuthenticator = __importStar(require("./jwtAuthenticator"));
45
+ exports.jwtAuthenticatorRsa = __importStar(require("./jwtAuthenticatorRsa"));
46
+ exports.jwtDecoder = __importStar(require("./jwtDecoder"));
42
47
  exports.momentoClientInit = __importStar(require("./momentoClientInit"));
43
48
  exports.pathParametersValidator = __importStar(require("./pathParametersValidator"));
44
49
  exports.pathTokenAuthorizer = __importStar(require("./pathTokenAuthorizer"));
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contrib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mFAAmE;AACnE,yFAAyE;AACzE,+FAA+E;AAC/E,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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/contrib/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,mFAAmE;AACnE,yFAAyE;AACzE,+FAA+E;AAC/E,yEAAyD;AACzD,mFAAmE;AACnE,uEAAuD;AACvD,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,uEAAuD;AACvD,6EAA6D;AAC7D,2DAA2C;AAC3C,yEAAyD;AACzD,qFAAqE;AACrE,6EAA6D;AAC7D,+EAA+D;AAC/D,iFAAiE;AACjE,qDAAqC"}
@@ -0,0 +1,9 @@
1
+ import * as P from '@konker.dev/effect-ts-prelude';
2
+ import type { JwtVerificationConfig } from '@konker.dev/tiny-auth-utils-fp/dist/jwt';
3
+ import type { APIGatewayProxyEventV2 } from 'aws-lambda';
4
+ import type { Handler } from '../index';
5
+ import { HttpApiError } from '../lib/HttpApiError';
6
+ import type { WithNormalizedInputHeaders, WithUserId } from './headersNormalizer/types';
7
+ export declare const JwtAuthenticatorDeps: P.Context.Tag<JwtVerificationConfig, JwtVerificationConfig>;
8
+ export type { WithUserId } from './headersNormalizer/types';
9
+ export declare const middleware: () => <I extends APIGatewayProxyEventV2, O, E, R>(wrapped: Handler<I & WithUserId, O, E, R>) => Handler<I & WithNormalizedInputHeaders, O, E | HttpApiError, R | JwtVerificationConfig>;
@@ -0,0 +1,44 @@
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.JwtAuthenticatorDeps = void 0;
27
+ const P = __importStar(require("@konker.dev/effect-ts-prelude"));
28
+ const helpers_1 = require("@konker.dev/tiny-auth-utils-fp/dist/helpers");
29
+ const jwt_1 = require("@konker.dev/tiny-auth-utils-fp/dist/jwt");
30
+ const HttpApiError_1 = require("../lib/HttpApiError");
31
+ const TAG = 'jwtAuthenticator';
32
+ // --------------------------------------------------------------------------
33
+ exports.JwtAuthenticatorDeps = P.Context.GenericTag('JwtAuthenticatorDeps');
34
+ // --------------------------------------------------------------------------
35
+ const middleware = () => (wrapped) => (i) => {
36
+ return P.pipe(P.Effect.Do, P.Effect.tap(P.Effect.logDebug(`[${TAG}] IN`)), P.Effect.bind('deps', () => exports.JwtAuthenticatorDeps), P.Effect.bind('authToken', () => (0, helpers_1.extractBearerToken)(i.headers['authorization'])), P.Effect.bind('verification', ({ authToken, deps }) => (0, jwt_1.jwtVerifyToken)(authToken, deps)), P.Effect.flatMap(({ verification }) => verification.verified
37
+ ? P.Effect.succeed({
38
+ ...i,
39
+ userId: verification.sub,
40
+ })
41
+ : P.Effect.fail(void 0)), P.Effect.mapError((e) => (0, HttpApiError_1.HttpApiError)('UnauthorizedError', `Invalid JWT credentials: ${e?.message}`, 401, TAG, e)), P.Effect.tapError(P.Effect.logError), P.Effect.flatMap(wrapped), P.Effect.tap(P.Effect.logDebug(`[${TAG}] OUT`)));
42
+ };
43
+ exports.middleware = middleware;
44
+ //# sourceMappingURL=jwtAuthenticator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwtAuthenticator.js","sourceRoot":"","sources":["../../src/contrib/jwtAuthenticator.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iEAAmD;AAEnD,yEAAiF;AAEjF,iEAAyE;AAIzE,sDAAmD;AAGnD,MAAM,GAAG,GAAG,kBAAkB,CAAC;AAE/B,6EAA6E;AAChE,QAAA,oBAAoB,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,CAAwB,sBAAsB,CAAC,CAAC;AAIxG,6EAA6E;AACtE,MAAM,UAAU,GACrB,GAAG,EAAE,CACL,CACE,OAAyC,EACgD,EAAE,CAC7F,CAAC,CAAiC,EAAE,EAAE;IACpC,OAAO,CAAC,CAAC,IAAI,CACX,CAAC,CAAC,MAAM,CAAC,EAAE,EACX,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,EAC9C,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,4BAAoB,CAAC,EACjD,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,IAAA,4BAAkB,EAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAChF,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAA,oBAAc,EAAC,SAAS,EAAE,IAAI,CAAC,CAAC,EACvF,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CACpC,YAAY,CAAC,QAAQ;QACnB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YACf,GAAG,CAAC;YACJ,MAAM,EAAE,YAAY,CAAC,GAAG;SACzB,CAAC;QACJ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAC1B,EACD,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CACtB,IAAA,2BAAY,EAAC,mBAAmB,EAAE,4BAA4B,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CACzF,EACD,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EACpC,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;AA3BS,QAAA,UAAU,cA2BnB"}
@@ -0,0 +1,4 @@
1
+ import * as P from '@konker.dev/effect-ts-prelude';
2
+ import type { JwtVerificationConfig } from '@konker.dev/tiny-auth-utils-fp/dist/jwt';
3
+ export declare const JWT_AUTHENTICATOR_TEST_DEPS: JwtVerificationConfig;
4
+ export declare const mockJwtAuthenticatorDeps: <A, E, R>(self: P.Effect.Effect<A, E, R>) => P.Effect.Effect<A, E, Exclude<R, JwtVerificationConfig>>;
@@ -0,0 +1,83 @@
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.mockJwtAuthenticatorDeps = exports.JWT_AUTHENTICATOR_TEST_DEPS = void 0;
27
+ const P = __importStar(require("@konker.dev/effect-ts-prelude"));
28
+ const jwt_1 = require("@konker.dev/tiny-auth-utils-fp/dist/test/fixtures/jwt");
29
+ const test_jwt_tokens_1 = require("@konker.dev/tiny-auth-utils-fp/dist/test/fixtures/test-jwt-tokens");
30
+ const test_common_1 = require("../test/test-common");
31
+ const unit = __importStar(require("./jwtAuthenticator"));
32
+ exports.JWT_AUTHENTICATOR_TEST_DEPS = unit.JwtAuthenticatorDeps.of({
33
+ signingSecret: jwt_1.TEST_JWT_SIGNING_SECRET,
34
+ issuer: jwt_1.TEST_JWT_ISS,
35
+ });
36
+ exports.mockJwtAuthenticatorDeps = P.Effect.provideService(unit.JwtAuthenticatorDeps, exports.JWT_AUTHENTICATOR_TEST_DEPS);
37
+ const VALID_JWT_RSA_VALUE = `Bearer ${test_jwt_tokens_1.TEST_TOKEN}`;
38
+ const INVALID_JWT_RSA_VALUE = 'Bearer Banana';
39
+ const TEST_IN_1 = {
40
+ headers: {
41
+ authorization: VALID_JWT_RSA_VALUE,
42
+ },
43
+ isBase64Encoded: false,
44
+ body: {},
45
+ };
46
+ const TEST_IN_2 = {
47
+ headers: {
48
+ authorization: INVALID_JWT_RSA_VALUE,
49
+ },
50
+ isBase64Encoded: false,
51
+ body: {},
52
+ };
53
+ describe('middleware/jwt-authenticator', () => {
54
+ let errorSpy;
55
+ beforeEach(() => {
56
+ jest.spyOn(Date, 'now').mockReturnValue(jwt_1.TEST_JWT_NOW_MS);
57
+ jest.spyOn(P.Effect, 'logDebug').mockReturnValue(P.Effect.succeed(undefined));
58
+ errorSpy = jest.spyOn(P.Effect, 'logError').mockReturnValue(P.Effect.succeed(undefined));
59
+ });
60
+ afterEach(() => {
61
+ jest.restoreAllMocks();
62
+ });
63
+ test('it should work as expected in an success case', async () => {
64
+ const egHandler = P.pipe(test_common_1.echoCoreIn, unit.middleware());
65
+ const result = await P.pipe(egHandler(TEST_IN_1), exports.mockJwtAuthenticatorDeps, P.Effect.runPromise);
66
+ expect(result).toStrictEqual({
67
+ headers: {
68
+ authorization: VALID_JWT_RSA_VALUE,
69
+ },
70
+ body: {},
71
+ isBase64Encoded: false,
72
+ userId: 'test-sub',
73
+ });
74
+ expect(errorSpy).toHaveBeenCalledTimes(0);
75
+ });
76
+ test('it should work as expected in an error case', async () => {
77
+ const egHandler = P.pipe(test_common_1.echoCoreIn, unit.middleware());
78
+ const result = P.pipe(egHandler(TEST_IN_2), exports.mockJwtAuthenticatorDeps, P.Effect.runPromise);
79
+ await expect(() => result).rejects.toThrow('Invalid JWT credentials');
80
+ expect(errorSpy).toHaveBeenCalledTimes(1);
81
+ });
82
+ });
83
+ //# sourceMappingURL=jwtAuthenticator.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwtAuthenticator.test.js","sourceRoot":"","sources":["../../src/contrib/jwtAuthenticator.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import * as P from '@konker.dev/effect-ts-prelude';
2
+ import type { JwtVerificationConfigRsa } from '@konker.dev/tiny-auth-utils-fp/dist/jwt/rsa';
3
+ import type { APIGatewayProxyEventV2 } from 'aws-lambda';
4
+ import type { Handler } from '../index';
5
+ import { HttpApiError } from '../lib/HttpApiError';
6
+ import type { WithNormalizedInputHeaders, WithUserId } from './headersNormalizer/types';
7
+ export declare const JwtAuthenticatorRsaDeps: P.Context.Tag<JwtVerificationConfigRsa, JwtVerificationConfigRsa>;
8
+ export type { WithUserId } from './headersNormalizer/types';
9
+ export declare const middleware: () => <I extends APIGatewayProxyEventV2, O, E, R>(wrapped: Handler<I & WithUserId, O, E, R>) => Handler<I & WithNormalizedInputHeaders, O, E | HttpApiError, R | JwtVerificationConfigRsa>;
@@ -0,0 +1,44 @@
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.JwtAuthenticatorRsaDeps = void 0;
27
+ const P = __importStar(require("@konker.dev/effect-ts-prelude"));
28
+ const helpers_1 = require("@konker.dev/tiny-auth-utils-fp/dist/helpers");
29
+ const rsa_1 = require("@konker.dev/tiny-auth-utils-fp/dist/jwt/rsa");
30
+ const HttpApiError_1 = require("../lib/HttpApiError");
31
+ const TAG = 'jwtAuthenticatorRsa';
32
+ // --------------------------------------------------------------------------
33
+ exports.JwtAuthenticatorRsaDeps = P.Context.GenericTag('JwtAuthenticatorRsaDeps');
34
+ // --------------------------------------------------------------------------
35
+ const middleware = () => (wrapped) => (i) => {
36
+ return P.pipe(P.Effect.Do, P.Effect.tap(P.Effect.logDebug(`[${TAG}] IN`)), P.Effect.bind('deps', () => exports.JwtAuthenticatorRsaDeps), P.Effect.bind('authToken', () => (0, helpers_1.extractBearerToken)(i.headers['authorization'])), P.Effect.bind('verification', ({ authToken, deps }) => (0, rsa_1.jwtVerifyTokenRsa)(authToken, deps)), P.Effect.flatMap(({ verification }) => verification.verified
37
+ ? P.Effect.succeed({
38
+ ...i,
39
+ userId: verification.sub,
40
+ })
41
+ : P.Effect.fail(void 0)), P.Effect.mapError((e) => (0, HttpApiError_1.HttpApiError)('UnauthorizedError', `Invalid JWT RSA credentials: ${e?.message}`, 401, TAG, e)), P.Effect.tapError((_) => P.Effect.logError(`UnauthorizedError: Invalid JWT RSA credentials: ${i.headers}`)), P.Effect.flatMap(wrapped), P.Effect.tap(P.Effect.logDebug(`[${TAG}] OUT`)));
42
+ };
43
+ exports.middleware = middleware;
44
+ //# sourceMappingURL=jwtAuthenticatorRsa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jwtAuthenticatorRsa.js","sourceRoot":"","sources":["../../src/contrib/jwtAuthenticatorRsa.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,iEAAmD;AAEnD,yEAAiF;AAEjF,qEAAgF;AAIhF,sDAAmD;AAGnD,MAAM,GAAG,GAAG,qBAAqB,CAAC;AAElC,6EAA6E;AAChE,QAAA,uBAAuB,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,CAA2B,yBAAyB,CAAC,CAAC;AAIjH,6EAA6E;AACtE,MAAM,UAAU,GACrB,GAAG,EAAE,CACL,CACE,OAAyC,EACmD,EAAE,CAChG,CAAC,CAAiC,EAAE,EAAE;IACpC,OAAO,CAAC,CAAC,IAAI,CACX,CAAC,CAAC,MAAM,CAAC,EAAE,EACX,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,EAC9C,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,+BAAuB,CAAC,EACpD,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,IAAA,4BAAkB,EAAC,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,EAChF,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAA,uBAAiB,EAAC,SAAS,EAAE,IAAI,CAAC,CAAC,EAC1F,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,CACpC,YAAY,CAAC,QAAQ;QACnB,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YACf,GAAG,CAAC;YACJ,MAAM,EAAE,YAAY,CAAC,GAAG;SACzB,CAAC;QACJ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAC1B,EACD,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CACtB,IAAA,2BAAY,EAAC,mBAAmB,EAAE,gCAAgC,CAAC,EAAE,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,CAC7F,EACD,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,mDAAmD,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,EAC3G,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;AA3BS,QAAA,UAAU,cA2BnB"}
@@ -0,0 +1,4 @@
1
+ import * as P from '@konker.dev/effect-ts-prelude';
2
+ import type { JwtVerificationConfigRsa } from '@konker.dev/tiny-auth-utils-fp/dist/jwt/rsa';
3
+ export declare const JWT_AUTHENTICATOR_RSA_TEST_DEPS: JwtVerificationConfigRsa;
4
+ export declare const mockJwtAuthenticatorRsaDeps: <A, E, R>(self: P.Effect.Effect<A, E, R>) => P.Effect.Effect<A, E, Exclude<R, JwtVerificationConfigRsa>>;