@geekmidas/auth 0.1.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/{cacheTokenStorage-Ca05vf3T.mjs → cacheTokenStorage-16NE8Cd9.mjs} +3 -3
  3. package/dist/cacheTokenStorage-16NE8Cd9.mjs.map +1 -0
  4. package/dist/{cacheTokenStorage-BzBRJfd-.d.mts → cacheTokenStorage-B7sOoysu.d.cts} +8 -6
  5. package/dist/cacheTokenStorage-B7sOoysu.d.cts.map +1 -0
  6. package/dist/{cacheTokenStorage-CvptztkW.cjs → cacheTokenStorage-CEpMniTi.cjs} +3 -3
  7. package/dist/cacheTokenStorage-CEpMniTi.cjs.map +1 -0
  8. package/dist/{cacheTokenStorage-yNUpDD8W.d.cts → cacheTokenStorage-_tq4Kmhc.d.mts} +8 -6
  9. package/dist/cacheTokenStorage-_tq4Kmhc.d.mts.map +1 -0
  10. package/dist/cacheTokenStorage.cjs +1 -1
  11. package/dist/cacheTokenStorage.d.cts +1 -1
  12. package/dist/cacheTokenStorage.d.mts +1 -1
  13. package/dist/cacheTokenStorage.mjs +1 -1
  14. package/dist/{client-DaiUm0UZ.cjs → client-BPl_mMvb.cjs} +14 -8
  15. package/dist/client-BPl_mMvb.cjs.map +1 -0
  16. package/dist/{client-DjNZS6vZ.mjs → client-eidYNJSH.mjs} +14 -8
  17. package/dist/client-eidYNJSH.mjs.map +1 -0
  18. package/dist/client.cjs +2 -2
  19. package/dist/client.d.cts +1 -1
  20. package/dist/client.d.mts +1 -1
  21. package/dist/client.mjs +2 -2
  22. package/dist/hono/jwt.cjs +1 -1
  23. package/dist/hono/jwt.cjs.map +1 -1
  24. package/dist/hono/jwt.d.cts +2 -1
  25. package/dist/hono/jwt.d.cts.map +1 -0
  26. package/dist/hono/jwt.d.mts +2 -1
  27. package/dist/hono/jwt.d.mts.map +1 -0
  28. package/dist/hono/jwt.mjs +1 -1
  29. package/dist/hono/jwt.mjs.map +1 -1
  30. package/dist/hono/oidc.cjs +1 -1
  31. package/dist/hono/oidc.cjs.map +1 -1
  32. package/dist/hono/oidc.d.cts +3 -2
  33. package/dist/hono/oidc.d.cts.map +1 -0
  34. package/dist/hono/oidc.d.mts +3 -2
  35. package/dist/hono/oidc.d.mts.map +1 -0
  36. package/dist/hono/oidc.mjs +1 -1
  37. package/dist/hono/oidc.mjs.map +1 -1
  38. package/dist/index.cjs +3 -3
  39. package/dist/index.d.cts +2 -2
  40. package/dist/index.d.mts +2 -2
  41. package/dist/index.mjs +3 -3
  42. package/dist/{jwt-DF9kFbmh.d.cts → jwt-3eIuY2dg.d.cts} +2 -1
  43. package/dist/jwt-3eIuY2dg.d.cts.map +1 -0
  44. package/dist/jwt-Bo_eACEi.cjs.map +1 -1
  45. package/dist/{jwt-DH8CJ2xC.d.mts → jwt-BqLlRkw-.d.mts} +2 -1
  46. package/dist/jwt-BqLlRkw-.d.mts.map +1 -0
  47. package/dist/jwt-D88cPJyT.mjs.map +1 -1
  48. package/dist/jwt.d.cts +1 -1
  49. package/dist/jwt.d.mts +1 -1
  50. package/dist/lambda/jwt.cjs +2 -2
  51. package/dist/lambda/jwt.cjs.map +1 -1
  52. package/dist/lambda/jwt.d.cts +2 -1
  53. package/dist/lambda/jwt.d.cts.map +1 -0
  54. package/dist/lambda/jwt.d.mts +2 -1
  55. package/dist/lambda/jwt.d.mts.map +1 -0
  56. package/dist/lambda/jwt.mjs +2 -2
  57. package/dist/lambda/jwt.mjs.map +1 -1
  58. package/dist/lambda/oidc.cjs +2 -2
  59. package/dist/lambda/oidc.cjs.map +1 -1
  60. package/dist/lambda/oidc.d.cts +3 -2
  61. package/dist/lambda/oidc.d.cts.map +1 -0
  62. package/dist/lambda/oidc.d.mts +3 -2
  63. package/dist/lambda/oidc.d.mts.map +1 -0
  64. package/dist/lambda/oidc.mjs +2 -2
  65. package/dist/lambda/oidc.mjs.map +1 -1
  66. package/dist/oidc-C0KyYaAK.cjs.map +1 -1
  67. package/dist/{oidc-CKOGLxjV.d.mts → oidc-ChA17wLB.d.cts} +3 -2
  68. package/dist/oidc-ChA17wLB.d.cts.map +1 -0
  69. package/dist/{oidc-DDLIB5gb.d.cts → oidc-DTRgBBl6.d.mts} +3 -2
  70. package/dist/oidc-DTRgBBl6.d.mts.map +1 -0
  71. package/dist/oidc-KA30gMlx.mjs.map +1 -1
  72. package/dist/oidc.d.cts +2 -2
  73. package/dist/oidc.d.mts +2 -2
  74. package/dist/server.cjs +2 -2
  75. package/dist/server.d.cts +2 -2
  76. package/dist/server.d.mts +2 -2
  77. package/dist/server.mjs +2 -2
  78. package/dist/{tokenManager--Q93eNYr.d.mts → tokenManager-CL3yE06D.d.cts} +2 -1
  79. package/dist/tokenManager-CL3yE06D.d.cts.map +1 -0
  80. package/dist/{tokenManager-BVXxfHRa.mjs → tokenManager-Ci2Tgxp8.mjs} +5 -3
  81. package/dist/tokenManager-Ci2Tgxp8.mjs.map +1 -0
  82. package/dist/{tokenManager-EPmwgai2.cjs → tokenManager-CvEMgxOp.cjs} +5 -3
  83. package/dist/tokenManager-CvEMgxOp.cjs.map +1 -0
  84. package/dist/{tokenManager-H6-lWEah.d.cts → tokenManager-RrwjL0y-.d.mts} +2 -1
  85. package/dist/tokenManager-RrwjL0y-.d.mts.map +1 -0
  86. package/dist/tokenManager.cjs +1 -1
  87. package/dist/tokenManager.d.cts +1 -1
  88. package/dist/tokenManager.d.mts +1 -1
  89. package/dist/tokenManager.mjs +1 -1
  90. package/package.json +3 -3
  91. package/src/__tests__/cacheTokenStorage.spec.ts +148 -148
  92. package/src/__tests__/client.spec.ts +339 -339
  93. package/src/__tests__/hono-jwt.spec.ts +219 -219
  94. package/src/__tests__/hono-oidc.spec.ts +560 -560
  95. package/src/__tests__/jwt.spec.ts +150 -127
  96. package/src/__tests__/lambda-jwt.spec.ts +205 -205
  97. package/src/__tests__/lambda-oidc.spec.ts +580 -579
  98. package/src/__tests__/oidc.spec.ts +365 -365
  99. package/src/__tests__/tokenManager.spec.ts +254 -254
  100. package/src/cacheTokenStorage.ts +32 -32
  101. package/src/client.ts +199 -190
  102. package/src/hono/jwt.ts +111 -111
  103. package/src/hono/oidc.ts +131 -131
  104. package/src/index.ts +2 -2
  105. package/src/jwt.ts +57 -57
  106. package/src/lambda/jwt.ts +170 -170
  107. package/src/lambda/oidc.ts +165 -165
  108. package/src/oidc.ts +121 -121
  109. package/src/server.ts +6 -7
  110. package/src/tokenManager.ts +89 -87
  111. package/tsconfig.json +10 -0
  112. package/dist/cacheTokenStorage-Ca05vf3T.mjs.map +0 -1
  113. package/dist/cacheTokenStorage-CvptztkW.cjs.map +0 -1
  114. package/dist/client-DaiUm0UZ.cjs.map +0 -1
  115. package/dist/client-DjNZS6vZ.mjs.map +0 -1
  116. package/dist/tokenManager-BVXxfHRa.mjs.map +0 -1
  117. package/dist/tokenManager-EPmwgai2.cjs.map +0 -1
@@ -1,7 +1,7 @@
1
1
  import type {
2
- APIGatewayRequestAuthorizerEvent,
3
- APIGatewayTokenAuthorizerEvent,
4
- Context as LambdaContext,
2
+ APIGatewayRequestAuthorizerEvent,
3
+ APIGatewayTokenAuthorizerEvent,
4
+ Context as LambdaContext,
5
5
  } from 'aws-lambda';
6
6
  import * as jose from 'jose';
7
7
  import { describe, expect, it } from 'vitest';
@@ -9,270 +9,270 @@ import { JwtAuthorizer } from '../lambda/jwt';
9
9
 
10
10
  const TEST_SECRET = 'super-secret-key-for-testing-only-32chars';
11
11
  const TEST_METHOD_ARN =
12
- 'arn:aws:execute-api:us-east-1:123456789:api-id/stage/GET/resource';
12
+ 'arn:aws:execute-api:us-east-1:123456789:api-id/stage/GET/resource';
13
13
 
14
14
  async function createTestToken(
15
- claims: Record<string, unknown> = {},
16
- secret = TEST_SECRET,
15
+ claims: Record<string, unknown> = {},
16
+ secret = TEST_SECRET,
17
17
  ) {
18
- const secretKey = new TextEncoder().encode(secret);
19
- return await new jose.SignJWT({ sub: 'user-123', ...claims })
20
- .setProtectedHeader({ alg: 'HS256' })
21
- .setIssuedAt()
22
- .setExpirationTime('1h')
23
- .sign(secretKey);
18
+ const secretKey = new TextEncoder().encode(secret);
19
+ return await new jose.SignJWT({ sub: 'user-123', ...claims })
20
+ .setProtectedHeader({ alg: 'HS256' })
21
+ .setIssuedAt()
22
+ .setExpirationTime('1h')
23
+ .sign(secretKey);
24
24
  }
25
25
 
26
26
  function createTokenEvent(
27
- token: string,
28
- methodArn = TEST_METHOD_ARN,
27
+ token: string,
28
+ methodArn = TEST_METHOD_ARN,
29
29
  ): APIGatewayTokenAuthorizerEvent {
30
- return {
31
- type: 'TOKEN',
32
- authorizationToken: `Bearer ${token}`,
33
- methodArn,
34
- };
30
+ return {
31
+ type: 'TOKEN',
32
+ authorizationToken: `Bearer ${token}`,
33
+ methodArn,
34
+ };
35
35
  }
36
36
 
37
37
  function createRequestEvent(
38
- headers: Record<string, string> = {},
39
- methodArn = TEST_METHOD_ARN,
38
+ headers: Record<string, string> = {},
39
+ methodArn = TEST_METHOD_ARN,
40
40
  ): APIGatewayRequestAuthorizerEvent {
41
- return {
42
- type: 'REQUEST',
43
- methodArn,
44
- headers,
45
- multiValueHeaders: {},
46
- pathParameters: null,
47
- queryStringParameters: null,
48
- multiValueQueryStringParameters: null,
49
- stageVariables: null,
50
- requestContext: {} as any,
51
- resource: '',
52
- path: '',
53
- httpMethod: 'GET',
54
- };
41
+ return {
42
+ type: 'REQUEST',
43
+ methodArn,
44
+ headers,
45
+ multiValueHeaders: {},
46
+ pathParameters: null,
47
+ queryStringParameters: null,
48
+ multiValueQueryStringParameters: null,
49
+ stageVariables: null,
50
+ requestContext: {} as any,
51
+ resource: '',
52
+ path: '',
53
+ httpMethod: 'GET',
54
+ };
55
55
  }
56
56
 
57
57
  const mockLambdaContext = {} as LambdaContext;
58
58
 
59
59
  describe('JwtAuthorizer', () => {
60
- describe('tokenHandler()', () => {
61
- it('should allow valid token', async () => {
62
- const authorizer = new JwtAuthorizer({
63
- config: { secret: TEST_SECRET },
64
- });
65
- const handler = authorizer.tokenHandler();
60
+ describe('tokenHandler()', () => {
61
+ it('should allow valid token', async () => {
62
+ const authorizer = new JwtAuthorizer({
63
+ config: { secret: TEST_SECRET },
64
+ });
65
+ const handler = authorizer.tokenHandler();
66
66
 
67
- const token = await createTestToken();
68
- const event = createTokenEvent(token);
67
+ const token = await createTestToken();
68
+ const event = createTokenEvent(token);
69
69
 
70
- const result = await handler(event, mockLambdaContext);
70
+ const result = await handler(event, mockLambdaContext);
71
71
 
72
- expect(result.policyDocument.Statement[0].Effect).toBe('Allow');
73
- expect(result.principalId).toBe('user-123');
74
- });
75
-
76
- it('should deny invalid token', async () => {
77
- const authorizer = new JwtAuthorizer({
78
- config: { secret: TEST_SECRET },
79
- });
80
- const handler = authorizer.tokenHandler();
72
+ expect(result.policyDocument.Statement[0].Effect).toBe('Allow');
73
+ expect(result.principalId).toBe('user-123');
74
+ });
75
+
76
+ it('should deny invalid token', async () => {
77
+ const authorizer = new JwtAuthorizer({
78
+ config: { secret: TEST_SECRET },
79
+ });
80
+ const handler = authorizer.tokenHandler();
81
81
 
82
- const event = createTokenEvent('invalid-token');
82
+ const event = createTokenEvent('invalid-token');
83
83
 
84
- const result = await handler(event, mockLambdaContext);
84
+ const result = await handler(event, mockLambdaContext);
85
85
 
86
- expect(result.policyDocument.Statement[0].Effect).toBe('Deny');
87
- expect(result.principalId).toBe('unauthorized');
88
- });
86
+ expect(result.policyDocument.Statement[0].Effect).toBe('Deny');
87
+ expect(result.principalId).toBe('unauthorized');
88
+ });
89
89
 
90
- it('should use wildcard resource by default', async () => {
91
- const authorizer = new JwtAuthorizer({
92
- config: { secret: TEST_SECRET },
93
- });
94
- const handler = authorizer.tokenHandler();
95
-
96
- const token = await createTestToken();
97
- const event = createTokenEvent(token);
98
-
99
- const result = await handler(event, mockLambdaContext);
100
-
101
- expect(result.policyDocument.Statement[0].Resource).toBe(
102
- 'arn:aws:execute-api:us-east-1:123456789:api-id/stage/*',
103
- );
104
- });
90
+ it('should use wildcard resource by default', async () => {
91
+ const authorizer = new JwtAuthorizer({
92
+ config: { secret: TEST_SECRET },
93
+ });
94
+ const handler = authorizer.tokenHandler();
95
+
96
+ const token = await createTestToken();
97
+ const event = createTokenEvent(token);
98
+
99
+ const result = await handler(event, mockLambdaContext);
100
+
101
+ expect(result.policyDocument.Statement[0].Resource).toBe(
102
+ 'arn:aws:execute-api:us-east-1:123456789:api-id/stage/*',
103
+ );
104
+ });
105
105
 
106
- it('should use exact resource when wildcardResource is false', async () => {
107
- const authorizer = new JwtAuthorizer({
108
- config: { secret: TEST_SECRET },
109
- wildcardResource: false,
110
- });
111
- const handler = authorizer.tokenHandler();
112
-
113
- const token = await createTestToken();
114
- const event = createTokenEvent(token);
115
-
116
- const result = await handler(event, mockLambdaContext);
106
+ it('should use exact resource when wildcardResource is false', async () => {
107
+ const authorizer = new JwtAuthorizer({
108
+ config: { secret: TEST_SECRET },
109
+ wildcardResource: false,
110
+ });
111
+ const handler = authorizer.tokenHandler();
112
+
113
+ const token = await createTestToken();
114
+ const event = createTokenEvent(token);
115
+
116
+ const result = await handler(event, mockLambdaContext);
117
117
 
118
- expect(result.policyDocument.Statement[0].Resource).toBe(TEST_METHOD_ARN);
119
- });
118
+ expect(result.policyDocument.Statement[0].Resource).toBe(TEST_METHOD_ARN);
119
+ });
120
120
 
121
- it('should use custom getPrincipalId', async () => {
122
- const authorizer = new JwtAuthorizer({
123
- config: { secret: TEST_SECRET },
124
- getPrincipalId: (claims) => `custom-${claims.sub}`,
125
- });
126
- const handler = authorizer.tokenHandler();
127
-
128
- const token = await createTestToken();
129
- const event = createTokenEvent(token);
121
+ it('should use custom getPrincipalId', async () => {
122
+ const authorizer = new JwtAuthorizer({
123
+ config: { secret: TEST_SECRET },
124
+ getPrincipalId: (claims) => `custom-${claims.sub}`,
125
+ });
126
+ const handler = authorizer.tokenHandler();
127
+
128
+ const token = await createTestToken();
129
+ const event = createTokenEvent(token);
130
130
 
131
- const result = await handler(event, mockLambdaContext);
131
+ const result = await handler(event, mockLambdaContext);
132
132
 
133
- expect(result.principalId).toBe('custom-user-123');
134
- });
133
+ expect(result.principalId).toBe('custom-user-123');
134
+ });
135
135
 
136
- it('should include context from getContext', async () => {
137
- const authorizer = new JwtAuthorizer({
138
- config: { secret: TEST_SECRET },
139
- getContext: (claims) => ({
140
- userId: claims.sub!,
141
- role: 'admin',
142
- }),
143
- });
144
- const handler = authorizer.tokenHandler();
136
+ it('should include context from getContext', async () => {
137
+ const authorizer = new JwtAuthorizer({
138
+ config: { secret: TEST_SECRET },
139
+ getContext: (claims) => ({
140
+ userId: claims.sub!,
141
+ role: 'admin',
142
+ }),
143
+ });
144
+ const handler = authorizer.tokenHandler();
145
145
 
146
- const token = await createTestToken();
147
- const event = createTokenEvent(token);
146
+ const token = await createTestToken();
147
+ const event = createTokenEvent(token);
148
148
 
149
- const result = await handler(event, mockLambdaContext);
149
+ const result = await handler(event, mockLambdaContext);
150
150
 
151
- expect(result.context).toEqual({
152
- userId: 'user-123',
153
- role: 'admin',
154
- });
155
- });
151
+ expect(result.context).toEqual({
152
+ userId: 'user-123',
153
+ role: 'admin',
154
+ });
155
+ });
156
156
 
157
- it('should deny when custom authorize returns false', async () => {
158
- const authorizer = new JwtAuthorizer({
159
- config: { secret: TEST_SECRET },
160
- authorize: (claims) => claims.sub === 'admin',
161
- });
162
- const handler = authorizer.tokenHandler();
157
+ it('should deny when custom authorize returns false', async () => {
158
+ const authorizer = new JwtAuthorizer({
159
+ config: { secret: TEST_SECRET },
160
+ authorize: (claims) => claims.sub === 'admin',
161
+ });
162
+ const handler = authorizer.tokenHandler();
163
163
 
164
- const token = await createTestToken();
165
- const event = createTokenEvent(token);
164
+ const token = await createTestToken();
165
+ const event = createTokenEvent(token);
166
166
 
167
- const result = await handler(event, mockLambdaContext);
167
+ const result = await handler(event, mockLambdaContext);
168
168
 
169
- expect(result.policyDocument.Statement[0].Effect).toBe('Deny');
170
- });
169
+ expect(result.policyDocument.Statement[0].Effect).toBe('Deny');
170
+ });
171
171
 
172
- it('should allow when custom authorize returns true', async () => {
173
- const authorizer = new JwtAuthorizer({
174
- config: { secret: TEST_SECRET },
175
- authorize: (claims) => claims.sub === 'user-123',
176
- });
177
- const handler = authorizer.tokenHandler();
172
+ it('should allow when custom authorize returns true', async () => {
173
+ const authorizer = new JwtAuthorizer({
174
+ config: { secret: TEST_SECRET },
175
+ authorize: (claims) => claims.sub === 'user-123',
176
+ });
177
+ const handler = authorizer.tokenHandler();
178
178
 
179
- const token = await createTestToken();
180
- const event = createTokenEvent(token);
179
+ const token = await createTestToken();
180
+ const event = createTokenEvent(token);
181
181
 
182
- const result = await handler(event, mockLambdaContext);
182
+ const result = await handler(event, mockLambdaContext);
183
183
 
184
- expect(result.policyDocument.Statement[0].Effect).toBe('Allow');
185
- });
184
+ expect(result.policyDocument.Statement[0].Effect).toBe('Allow');
185
+ });
186
186
 
187
- it('should handle token without Bearer prefix', async () => {
188
- const authorizer = new JwtAuthorizer({
189
- config: { secret: TEST_SECRET },
190
- });
191
- const handler = authorizer.tokenHandler();
187
+ it('should handle token without Bearer prefix', async () => {
188
+ const authorizer = new JwtAuthorizer({
189
+ config: { secret: TEST_SECRET },
190
+ });
191
+ const handler = authorizer.tokenHandler();
192
192
 
193
- const token = await createTestToken();
194
- const event: APIGatewayTokenAuthorizerEvent = {
195
- type: 'TOKEN',
196
- authorizationToken: token, // No Bearer prefix
197
- methodArn: TEST_METHOD_ARN,
198
- };
193
+ const token = await createTestToken();
194
+ const event: APIGatewayTokenAuthorizerEvent = {
195
+ type: 'TOKEN',
196
+ authorizationToken: token, // No Bearer prefix
197
+ methodArn: TEST_METHOD_ARN,
198
+ };
199
199
 
200
- const result = await handler(event, mockLambdaContext);
200
+ const result = await handler(event, mockLambdaContext);
201
201
 
202
- expect(result.policyDocument.Statement[0].Effect).toBe('Allow');
203
- });
204
- });
202
+ expect(result.policyDocument.Statement[0].Effect).toBe('Allow');
203
+ });
204
+ });
205
205
 
206
- describe('requestHandler()', () => {
207
- it('should allow valid token from Authorization header', async () => {
208
- const authorizer = new JwtAuthorizer({
209
- config: { secret: TEST_SECRET },
210
- });
211
- const handler = authorizer.requestHandler();
206
+ describe('requestHandler()', () => {
207
+ it('should allow valid token from Authorization header', async () => {
208
+ const authorizer = new JwtAuthorizer({
209
+ config: { secret: TEST_SECRET },
210
+ });
211
+ const handler = authorizer.requestHandler();
212
212
 
213
- const token = await createTestToken();
214
- const event = createRequestEvent({ Authorization: `Bearer ${token}` });
213
+ const token = await createTestToken();
214
+ const event = createRequestEvent({ Authorization: `Bearer ${token}` });
215
215
 
216
- const result = await handler(event, mockLambdaContext);
216
+ const result = await handler(event, mockLambdaContext);
217
217
 
218
- expect(result.policyDocument.Statement[0].Effect).toBe('Allow');
219
- });
218
+ expect(result.policyDocument.Statement[0].Effect).toBe('Allow');
219
+ });
220
220
 
221
- it('should deny when no token provided', async () => {
222
- const authorizer = new JwtAuthorizer({
223
- config: { secret: TEST_SECRET },
224
- });
225
- const handler = authorizer.requestHandler();
221
+ it('should deny when no token provided', async () => {
222
+ const authorizer = new JwtAuthorizer({
223
+ config: { secret: TEST_SECRET },
224
+ });
225
+ const handler = authorizer.requestHandler();
226
226
 
227
- const event = createRequestEvent({});
227
+ const event = createRequestEvent({});
228
228
 
229
- const result = await handler(event, mockLambdaContext);
229
+ const result = await handler(event, mockLambdaContext);
230
230
 
231
- expect(result.policyDocument.Statement[0].Effect).toBe('Deny');
232
- });
231
+ expect(result.policyDocument.Statement[0].Effect).toBe('Deny');
232
+ });
233
233
 
234
- it('should extract token from custom header', async () => {
235
- const authorizer = new JwtAuthorizer({
236
- config: { secret: TEST_SECRET },
237
- extraction: { headerName: 'x-api-token', tokenPrefix: '' },
238
- });
239
- const handler = authorizer.requestHandler();
234
+ it('should extract token from custom header', async () => {
235
+ const authorizer = new JwtAuthorizer({
236
+ config: { secret: TEST_SECRET },
237
+ extraction: { headerName: 'x-api-token', tokenPrefix: '' },
238
+ });
239
+ const handler = authorizer.requestHandler();
240
240
 
241
- const token = await createTestToken();
242
- const event = createRequestEvent({ 'x-api-token': token });
241
+ const token = await createTestToken();
242
+ const event = createRequestEvent({ 'x-api-token': token });
243
243
 
244
- const result = await handler(event, mockLambdaContext);
244
+ const result = await handler(event, mockLambdaContext);
245
245
 
246
- expect(result.policyDocument.Statement[0].Effect).toBe('Allow');
247
- });
246
+ expect(result.policyDocument.Statement[0].Effect).toBe('Allow');
247
+ });
248
248
 
249
- it('should extract token from cookie', async () => {
250
- const authorizer = new JwtAuthorizer({
251
- config: { secret: TEST_SECRET },
252
- extraction: { cookieName: 'session' },
253
- });
254
- const handler = authorizer.requestHandler();
249
+ it('should extract token from cookie', async () => {
250
+ const authorizer = new JwtAuthorizer({
251
+ config: { secret: TEST_SECRET },
252
+ extraction: { cookieName: 'session' },
253
+ });
254
+ const handler = authorizer.requestHandler();
255
255
 
256
- const token = await createTestToken();
257
- const event = createRequestEvent({ cookie: `session=${token}` });
256
+ const token = await createTestToken();
257
+ const event = createRequestEvent({ cookie: `session=${token}` });
258
258
 
259
- const result = await handler(event, mockLambdaContext);
259
+ const result = await handler(event, mockLambdaContext);
260
260
 
261
- expect(result.policyDocument.Statement[0].Effect).toBe('Allow');
262
- });
261
+ expect(result.policyDocument.Statement[0].Effect).toBe('Allow');
262
+ });
263
263
 
264
- it('should handle case-insensitive headers', async () => {
265
- const authorizer = new JwtAuthorizer({
266
- config: { secret: TEST_SECRET },
267
- });
268
- const handler = authorizer.requestHandler();
264
+ it('should handle case-insensitive headers', async () => {
265
+ const authorizer = new JwtAuthorizer({
266
+ config: { secret: TEST_SECRET },
267
+ });
268
+ const handler = authorizer.requestHandler();
269
269
 
270
- const token = await createTestToken();
271
- const event = createRequestEvent({ authorization: `Bearer ${token}` });
270
+ const token = await createTestToken();
271
+ const event = createRequestEvent({ authorization: `Bearer ${token}` });
272
272
 
273
- const result = await handler(event, mockLambdaContext);
273
+ const result = await handler(event, mockLambdaContext);
274
274
 
275
- expect(result.policyDocument.Statement[0].Effect).toBe('Allow');
276
- });
277
- });
275
+ expect(result.policyDocument.Statement[0].Effect).toBe('Allow');
276
+ });
277
+ });
278
278
  });