Skip to content

Commit f88b461

Browse files
authored
improv(parser): export API Gateway v2 request schemas (#3271)
1 parent 246f132 commit f88b461

File tree

5 files changed

+58
-5
lines changed

5 files changed

+58
-5
lines changed

packages/parser/src/schemas/apigwv2.ts

+7-5
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ import {
3838
*
3939
* @see {@link https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-access-control.html}
4040
*/
41-
const APIGatewayV2RequestAuthorizer = z.object({
41+
const APIGatewayRequestAuthorizerV2Schema = z.object({
4242
jwt: z
4343
.object({
4444
claims: z.record(z.string(), z.any()),
@@ -91,10 +91,10 @@ const APIGatewayV2RequestAuthorizer = z.object({
9191
* }
9292
* ```
9393
*/
94-
const APIGatewayV2RequestContext = z.object({
94+
const APIGatewayRequestContextV2Schema = z.object({
9595
accountId: z.string(),
9696
apiId: z.string(),
97-
authorizer: APIGatewayV2RequestAuthorizer.optional(),
97+
authorizer: APIGatewayRequestAuthorizerV2Schema.optional(),
9898
authentication: z
9999
.object({
100100
clientCert: APIGatewayCert.optional(),
@@ -171,7 +171,7 @@ const APIGatewayProxyEventV2Schema = z.object({
171171
cookies: APIGatewayStringArray.optional(),
172172
headers: APIGatewayRecord,
173173
queryStringParameters: APIGatewayRecord.optional(),
174-
requestContext: APIGatewayV2RequestContext,
174+
requestContext: APIGatewayRequestContextV2Schema,
175175
body: z.string().optional(),
176176
pathParameters: APIGatewayRecord.nullish(),
177177
isBase64Encoded: z.boolean(),
@@ -237,12 +237,14 @@ const APIGatewayRequestAuthorizerEventV2Schema = z.object({
237237
cookies: APIGatewayStringArray.optional(),
238238
headers: APIGatewayRecord.optional(),
239239
queryStringParameters: APIGatewayRecord.optional(),
240-
requestContext: APIGatewayV2RequestContext,
240+
requestContext: APIGatewayRequestContextV2Schema,
241241
pathParameters: APIGatewayRecord.nullish(),
242242
stageVariables: APIGatewayRecord.nullish(),
243243
});
244244

245245
export {
246246
APIGatewayProxyEventV2Schema,
247247
APIGatewayRequestAuthorizerEventV2Schema,
248+
APIGatewayRequestAuthorizerV2Schema,
249+
APIGatewayRequestContextV2Schema,
248250
};

packages/parser/src/schemas/index.ts

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ export {
77
export {
88
APIGatewayProxyEventV2Schema,
99
APIGatewayRequestAuthorizerEventV2Schema,
10+
APIGatewayRequestAuthorizerV2Schema,
11+
APIGatewayRequestContextV2Schema,
1012
} from './apigwv2.js';
1113
export {
1214
CloudFormationCustomResourceCreateSchema,

packages/parser/src/types/index.ts

+2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ export type {
1111
APIGatewayProxyEvent,
1212
ALBMultiValueHeadersEvent,
1313
APIGatewayProxyEventV2,
14+
APIGatewayRequestContextV2,
15+
APIGatewayRequestAuthorizerV2,
1416
S3Event,
1517
S3EventNotificationEventBridge,
1618
S3SqsEventNotification,

packages/parser/src/types/schema.ts

+12
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ import type { z } from 'zod';
22
import type {
33
APIGatewayProxyEventSchema,
44
APIGatewayProxyEventV2Schema,
5+
APIGatewayRequestAuthorizerV2Schema,
6+
APIGatewayRequestContextV2Schema,
57
AlbMultiValueHeadersSchema,
68
AlbSchema,
79
CloudFormationCustomResourceCreateSchema,
@@ -43,6 +45,14 @@ type APIGatewayProxyEvent = z.infer<typeof APIGatewayProxyEventSchema>;
4345

4446
type APIGatewayProxyEventV2 = z.infer<typeof APIGatewayProxyEventV2Schema>;
4547

48+
type APIGatewayRequestAuthorizerV2 = z.infer<
49+
typeof APIGatewayRequestAuthorizerV2Schema
50+
>;
51+
52+
type APIGatewayRequestContextV2 = z.infer<
53+
typeof APIGatewayRequestContextV2Schema
54+
>;
55+
4656
type CloudFormationCustomResourceCreateEvent = z.infer<
4757
typeof CloudFormationCustomResourceCreateSchema
4858
>;
@@ -114,6 +124,8 @@ export type {
114124
ALBMultiValueHeadersEvent,
115125
APIGatewayProxyEvent,
116126
APIGatewayProxyEventV2,
127+
APIGatewayRequestAuthorizerV2,
128+
APIGatewayRequestContextV2,
117129
CloudFormationCustomResourceCreateEvent,
118130
CloudFormationCustomResourceDeleteEvent,
119131
CloudFormationCustomResourceUpdateEvent,

packages/parser/tests/unit/schema/apigwv2.test.ts

+35
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@
66
import {
77
APIGatewayProxyEventV2Schema,
88
APIGatewayRequestAuthorizerEventV2Schema,
9+
APIGatewayRequestAuthorizerV2Schema,
10+
APIGatewayRequestContextV2Schema,
911
} from '../../../src/schemas/index.js';
12+
import type { APIGatewayProxyEventV2 } from '../../../src/types/schema.js';
1013
import { getTestEvent } from './utils.js';
1114

1215
describe('API Gateway HTTP (v2) Schemas', () => {
@@ -100,4 +103,36 @@ describe('API Gateway HTTP (v2) Schemas', () => {
100103
expect(parsedEvent).toEqual(event);
101104
});
102105
});
106+
107+
describe('APIGatewayRequestContextV2Schema', () => {
108+
it('parses the request context', () => {
109+
// Prepare
110+
const payload = getTestEvent<APIGatewayProxyEventV2>({
111+
eventsPath,
112+
filename: 'iam-auth',
113+
}).requestContext;
114+
115+
// Act
116+
const parsedPayload = APIGatewayRequestContextV2Schema.parse(payload);
117+
118+
// Assess
119+
expect(parsedPayload).toEqual(payload);
120+
});
121+
});
122+
123+
describe('APIGatewayRequestAuthorizerV2Schema', () => {
124+
it('parses the authorizer', () => {
125+
// Prepare
126+
const payload = getTestEvent<APIGatewayProxyEventV2>({
127+
eventsPath,
128+
filename: 'iam-auth',
129+
}).requestContext.authorizer;
130+
131+
// Act
132+
const parsedPayload = APIGatewayRequestAuthorizerV2Schema.parse(payload);
133+
134+
// Assess
135+
expect(parsedPayload).toEqual(payload);
136+
});
137+
});
103138
});

0 commit comments

Comments
 (0)