From f023576fed78fa7d6eea45eb0e223232ccded155 Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Mon, 20 Jan 2025 16:54:12 +0100 Subject: [PATCH 1/2] fix(parser): EventBridge envelope uses correct path --- packages/parser/src/envelopes/event-bridge.ts | 47 +++-- .../apiGatewayAuthorizerRequestEvent.json | 72 ------- .../apiGatewayAuthorizerTokenEvent.json | 5 - .../events/apiGatewayAuthorizerV2Event.json | 52 ----- .../tests/events/apiGatewayProxyEvent.json | 71 ------- .../apiGatewayProxyEventAnotherPath.json | 70 ------- ...apiGatewayProxyEventPathTrailingSlash.json | 70 ------- .../apiGatewayProxyEventPrincipalId.json | 13 -- .../events/apiGatewayProxyEventTestUI.json | 71 ------- .../apiGatewayProxyEvent_noVersionAuth.json | 65 ------- .../events/apiGatewayProxyOtherEvent.json | 71 ------- .../tests/events/apiGatewayProxyV2Event.json | 63 ------ ...iGatewayProxyV2EventPathTrailingSlash.json | 63 ------ .../events/apiGatewayProxyV2Event_GET.json | 62 ------ .../events/apiGatewayProxyV2IamEvent.json | 57 ------ ...piGatewayProxyV2LambdaAuthorizerEvent.json | 47 ----- .../apiGatewayProxyV2OtherGetEvent.json | 62 ------ ...ayProxyV2SchemaMiddlewareInvalidEvent.json | 63 ------ ...ewayProxyV2SchemaMiddlewareValidEvent.json | 63 ------ ...piGatewaySchemaMiddlewareInvalidEvent.json | 71 ------- .../apiGatewaySchemaMiddlewareValidEvent.json | 71 ------- .../tests/events/appSyncAuthorizerEvent.json | 13 -- .../events/appSyncAuthorizerResponse.json | 9 - .../tests/events/appSyncDirectResolver.json | 68 ------- .../tests/events/appSyncResolverEvent.json | 69 ------- .../base.json} | 0 .../tests/unit/envelopes/eventbridge.test.ts | 180 ++++++++---------- .../tests/unit/envelopes/lambda.test.ts | 7 +- .../tests/unit/parser.decorator.test.ts | 17 +- .../parser/tests/unit/parser.middy.test.ts | 12 +- .../tests/unit/schema/eventbridge.test.ts | 31 ++- .../parser/tests/unit/schema/lambda.test.ts | 2 +- packages/parser/tests/unit/schema/utils.ts | 28 --- 33 files changed, 163 insertions(+), 1502 deletions(-) delete mode 100644 packages/parser/tests/events/apiGatewayAuthorizerRequestEvent.json delete mode 100644 packages/parser/tests/events/apiGatewayAuthorizerTokenEvent.json delete mode 100644 packages/parser/tests/events/apiGatewayAuthorizerV2Event.json delete mode 100644 packages/parser/tests/events/apiGatewayProxyEvent.json delete mode 100644 packages/parser/tests/events/apiGatewayProxyEventAnotherPath.json delete mode 100644 packages/parser/tests/events/apiGatewayProxyEventPathTrailingSlash.json delete mode 100644 packages/parser/tests/events/apiGatewayProxyEventPrincipalId.json delete mode 100644 packages/parser/tests/events/apiGatewayProxyEventTestUI.json delete mode 100644 packages/parser/tests/events/apiGatewayProxyEvent_noVersionAuth.json delete mode 100644 packages/parser/tests/events/apiGatewayProxyOtherEvent.json delete mode 100644 packages/parser/tests/events/apiGatewayProxyV2Event.json delete mode 100644 packages/parser/tests/events/apiGatewayProxyV2EventPathTrailingSlash.json delete mode 100644 packages/parser/tests/events/apiGatewayProxyV2Event_GET.json delete mode 100644 packages/parser/tests/events/apiGatewayProxyV2IamEvent.json delete mode 100644 packages/parser/tests/events/apiGatewayProxyV2LambdaAuthorizerEvent.json delete mode 100644 packages/parser/tests/events/apiGatewayProxyV2OtherGetEvent.json delete mode 100644 packages/parser/tests/events/apiGatewayProxyV2SchemaMiddlewareInvalidEvent.json delete mode 100644 packages/parser/tests/events/apiGatewayProxyV2SchemaMiddlewareValidEvent.json delete mode 100644 packages/parser/tests/events/apiGatewaySchemaMiddlewareInvalidEvent.json delete mode 100644 packages/parser/tests/events/apiGatewaySchemaMiddlewareValidEvent.json delete mode 100644 packages/parser/tests/events/appSyncAuthorizerEvent.json delete mode 100644 packages/parser/tests/events/appSyncAuthorizerResponse.json delete mode 100644 packages/parser/tests/events/appSyncDirectResolver.json delete mode 100644 packages/parser/tests/events/appSyncResolverEvent.json rename packages/parser/tests/events/{eventBridgeEvent.json => eventbridge/base.json} (100%) diff --git a/packages/parser/src/envelopes/event-bridge.ts b/packages/parser/src/envelopes/event-bridge.ts index 20eae70827..adc47d75b3 100644 --- a/packages/parser/src/envelopes/event-bridge.ts +++ b/packages/parser/src/envelopes/event-bridge.ts @@ -1,8 +1,8 @@ -import type { ZodSchema, z } from 'zod'; +import type { ZodError, ZodSchema, z } from 'zod'; import { ParseError } from '../errors.js'; import { EventBridgeSchema } from '../schemas/index.js'; import type { ParsedResult } from '../types/index.js'; -import { Envelope, envelopeDiscriminator } from './envelope.js'; +import { envelopeDiscriminator } from './envelope.js'; /** * Envelope for EventBridge schema that extracts and parses data from the `detail` key. @@ -14,34 +14,41 @@ export const EventBridgeEnvelope = { */ [envelopeDiscriminator]: 'object' as const, parse(data: unknown, schema: T): z.infer { - return Envelope.parse(EventBridgeSchema.parse(data).detail, schema); + const extendedSchema = EventBridgeSchema.extend({ + detail: schema, + }); + try { + const parsed = extendedSchema.parse(data); + return parsed.detail; + } catch (error) { + throw new ParseError('Failed to parse EventBridge envelope', { + cause: error as ZodError, + }); + } }, - safeParse(data: unknown, schema: T): ParsedResult> { - const parsedEnvelope = EventBridgeSchema.safeParse(data); + safeParse( + data: unknown, + schema: T + ): ParsedResult> { + const extendedSchema = EventBridgeSchema.extend({ + detail: schema, + }); - if (!parsedEnvelope.success) { + const parsedResult = extendedSchema.safeParse(data); + if (!parsedResult.success) { return { success: false, error: new ParseError('Failed to parse EventBridge envelope', { - cause: parsedEnvelope.error, - }), - originalEvent: data, - }; - } - - const parsedDetail = Envelope.safeParse(parsedEnvelope.data.detail, schema); - - if (!parsedDetail.success) { - return { - success: false, - error: new ParseError('Failed to parse EventBridge envelope detail', { - cause: parsedDetail.error, + cause: parsedResult.error, }), originalEvent: data, }; } - return parsedDetail; + return { + success: true, + data: parsedResult.data.detail, + }; }, }; diff --git a/packages/parser/tests/events/apiGatewayAuthorizerRequestEvent.json b/packages/parser/tests/events/apiGatewayAuthorizerRequestEvent.json deleted file mode 100644 index 3177f389b4..0000000000 --- a/packages/parser/tests/events/apiGatewayAuthorizerRequestEvent.json +++ /dev/null @@ -1,72 +0,0 @@ -{ - "version": "1.0", - "type": "REQUEST", - "methodArn": "arn:aws:execute-api:us-east-1:123456789012:abcdef123/test/GET/request", - "identitySource": "user1,123", - "authorizationToken": "user1,123", - "resource": "/request", - "path": "/request", - "httpMethod": "GET", - "headers": { - "X-AMZ-Date": "20170718T062915Z", - "Accept": "*/*", - "HeaderAuth1": "headerValue1", - "CloudFront-Viewer-Country": "US", - "CloudFront-Forwarded-Proto": "https", - "CloudFront-Is-Tablet-Viewer": "false", - "CloudFront-Is-Mobile-Viewer": "false", - "User-Agent": "..." - }, - "queryStringParameters": { - "QueryString1": "queryValue1" - }, - "multiValueQueryStringParameters": { - "QueryString1": ["queryValue1"] - }, - "pathParameters": {}, - "stageVariables": { - "StageVar1": "stageValue1" - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "abcdef123", - "domainName": "3npb9j1tlk.execute-api.us-west-1.amazonaws.com", - "domainPrefix": "3npb9j1tlk", - "extendedRequestId": "EXqgWgXxSK4EJug=", - "httpMethod": "GET", - "identity": { - "accessKey": null, - "accountId": null, - "caller": null, - "cognitoAuthenticationProvider": null, - "cognitoAuthenticationType": null, - "cognitoIdentityId": null, - "cognitoIdentityPoolId": null, - "principalOrgId": null, - "apiKey": "...", - "sourceIp": "192.168.0.1", - "user": null, - "userAgent": "PostmanRuntime/7.28.3", - "userArn": null, - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "path": "/request", - "protocol": "HTTP/1.1", - "requestId": "EXqgWgXxSK4EJug=", - "requestTime": "20/Aug/2021:14:36:50 +0000", - "requestTimeEpoch": 1629470210043, - "resourceId": "ANY /request", - "resourcePath": "/request", - "stage": "test" - }, - "body": null -} diff --git a/packages/parser/tests/events/apiGatewayAuthorizerTokenEvent.json b/packages/parser/tests/events/apiGatewayAuthorizerTokenEvent.json deleted file mode 100644 index f30f360f6d..0000000000 --- a/packages/parser/tests/events/apiGatewayAuthorizerTokenEvent.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "type": "TOKEN", - "authorizationToken": "allow", - "methodArn": "arn:aws:execute-api:us-west-2:123456789012:ymy8tbxw7b/*/GET/" -} diff --git a/packages/parser/tests/events/apiGatewayAuthorizerV2Event.json b/packages/parser/tests/events/apiGatewayAuthorizerV2Event.json deleted file mode 100644 index f0528080c9..0000000000 --- a/packages/parser/tests/events/apiGatewayAuthorizerV2Event.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "version": "2.0", - "type": "REQUEST", - "routeArn": "arn:aws:execute-api:us-east-1:123456789012:abcdef123/test/GET/request", - "identitySource": ["user1", "123"], - "routeKey": "GET /merchants", - "rawPath": "/merchants", - "rawQueryString": "parameter1=value1¶meter1=value2¶meter2=value", - "cookies": ["cookie1", "cookie2"], - "headers": { - "x-amzn-trace-id": "Root=1-611cc4a7-0746ebee281cfd967db97b64", - "Header1": "value1", - "Header2": "value2", - "Authorization": "value" - }, - "queryStringParameters": { - "parameter1": "value1,value2", - "parameter2": "value" - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "api-id", - "authentication": { - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "http": { - "method": "POST", - "path": "/merchants", - "protocol": "HTTP/1.1", - "sourceIp": "IP", - "userAgent": "agent" - }, - "requestId": "id", - "routeKey": "GET /merchants", - "stage": "$default", - "time": "12/Mar/2020:19:03:58 +0000", - "timeEpoch": 1583348638390 - }, - "pathParameters": { "parameter1": "value1" }, - "stageVariables": { "stageVariable1": "value1", "stageVariable2": "value2" } -} diff --git a/packages/parser/tests/events/apiGatewayProxyEvent.json b/packages/parser/tests/events/apiGatewayProxyEvent.json deleted file mode 100644 index 5a40bf2f42..0000000000 --- a/packages/parser/tests/events/apiGatewayProxyEvent.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "version": "1.0", - "resource": "/my/path", - "path": "/my/path", - "httpMethod": "GET", - "headers": { - "Header1": "value1", - "Header2": "value2", - "Origin": "https://aws.amazon.com" - }, - "multiValueHeaders": { - "Header1": ["value1"], - "Header2": ["value1", "value2"] - }, - "queryStringParameters": { - "parameter1": "value1", - "parameter2": "value" - }, - "multiValueQueryStringParameters": { - "parameter1": ["value1", "value2"], - "parameter2": ["value"] - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "id", - "authorizer": { - "claims": null, - "scopes": null - }, - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "extendedRequestId": "request-id", - "httpMethod": "GET", - "identity": { - "accessKey": null, - "accountId": null, - "caller": null, - "cognitoAuthenticationProvider": null, - "cognitoAuthenticationType": null, - "cognitoIdentityId": null, - "cognitoIdentityPoolId": null, - "principalOrgId": null, - "sourceIp": "192.168.0.1", - "user": null, - "userAgent": "user-agent", - "userArn": null, - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "path": "/my/path", - "protocol": "HTTP/1.1", - "requestId": "id=", - "requestTime": "04/Mar/2020:19:15:17 +0000", - "requestTimeEpoch": 1583349317135, - "resourceId": null, - "resourcePath": "/my/path", - "stage": "$default" - }, - "pathParameters": null, - "stageVariables": null, - "body": "Hello from Lambda!", - "isBase64Encoded": false -} diff --git a/packages/parser/tests/events/apiGatewayProxyEventAnotherPath.json b/packages/parser/tests/events/apiGatewayProxyEventAnotherPath.json deleted file mode 100644 index cc8b236234..0000000000 --- a/packages/parser/tests/events/apiGatewayProxyEventAnotherPath.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "version": "1.0", - "resource": "/my/anotherPath", - "path": "/my/anotherPath", - "httpMethod": "GET", - "headers": { - "Header1": "value1", - "Header2": "value2" - }, - "multiValueHeaders": { - "Header1": ["value1"], - "Header2": ["value1", "value2"] - }, - "queryStringParameters": { - "parameter1": "value1", - "parameter2": "value" - }, - "multiValueQueryStringParameters": { - "parameter1": ["value1", "value2"], - "parameter2": ["value"] - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "id", - "authorizer": { - "claims": null, - "scopes": null - }, - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "extendedRequestId": "request-id", - "httpMethod": "GET", - "identity": { - "accessKey": null, - "accountId": null, - "caller": null, - "cognitoAuthenticationProvider": null, - "cognitoAuthenticationType": null, - "cognitoIdentityId": null, - "cognitoIdentityPoolId": null, - "principalOrgId": null, - "sourceIp": "192.168.0.1", - "user": null, - "userAgent": "user-agent", - "userArn": null, - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "path": "/my/anotherPath", - "protocol": "HTTP/1.1", - "requestId": "id=", - "requestTime": "04/Mar/2020:19:15:17 +0000", - "requestTimeEpoch": 1583349317135, - "resourceId": null, - "resourcePath": "/my/anotherPath", - "stage": "$default" - }, - "pathParameters": null, - "stageVariables": null, - "body": "Hello from Lambda!", - "isBase64Encoded": true -} diff --git a/packages/parser/tests/events/apiGatewayProxyEventPathTrailingSlash.json b/packages/parser/tests/events/apiGatewayProxyEventPathTrailingSlash.json deleted file mode 100644 index 2de7ae409b..0000000000 --- a/packages/parser/tests/events/apiGatewayProxyEventPathTrailingSlash.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "version": "1.0", - "resource": "/my/path", - "path": "/my/path/", - "httpMethod": "GET", - "headers": { - "Header1": "value1", - "Header2": "value2" - }, - "multiValueHeaders": { - "Header1": ["value1"], - "Header2": ["value1", "value2"] - }, - "queryStringParameters": { - "parameter1": "value1", - "parameter2": "value" - }, - "multiValueQueryStringParameters": { - "parameter1": ["value1", "value2"], - "parameter2": ["value"] - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "id", - "authorizer": { - "claims": null, - "scopes": null - }, - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "extendedRequestId": "request-id", - "httpMethod": "GET", - "identity": { - "accessKey": null, - "accountId": null, - "caller": null, - "cognitoAuthenticationProvider": null, - "cognitoAuthenticationType": null, - "cognitoIdentityId": null, - "cognitoIdentityPoolId": null, - "principalOrgId": null, - "sourceIp": "192.168.0.1", - "user": null, - "userAgent": "user-agent", - "userArn": null, - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "path": "/my/path", - "protocol": "HTTP/1.1", - "requestId": "id=", - "requestTime": "04/Mar/2020:19:15:17 +0000", - "requestTimeEpoch": 1583349317135, - "resourceId": null, - "resourcePath": "/my/path", - "stage": "$default" - }, - "pathParameters": null, - "stageVariables": null, - "body": "Hello from Lambda!", - "isBase64Encoded": true -} diff --git a/packages/parser/tests/events/apiGatewayProxyEventPrincipalId.json b/packages/parser/tests/events/apiGatewayProxyEventPrincipalId.json deleted file mode 100644 index f18a2a44bb..0000000000 --- a/packages/parser/tests/events/apiGatewayProxyEventPrincipalId.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "resource": "/trip", - "path": "/trip", - "httpMethod": "POST", - "requestContext": { - "requestId": "34972478-2843-4ced-a657-253108738274", - "authorizer": { - "user_id": "fake_username", - "principalId": "fake", - "integrationLatency": 451 - } - } -} diff --git a/packages/parser/tests/events/apiGatewayProxyEventTestUI.json b/packages/parser/tests/events/apiGatewayProxyEventTestUI.json deleted file mode 100644 index 4c4b53557f..0000000000 --- a/packages/parser/tests/events/apiGatewayProxyEventTestUI.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "version": "1.0", - "resource": "/my/path", - "path": "/my/path", - "httpMethod": "GET", - "headers": { - "Header1": "value1", - "Header2": "value2", - "Origin": "https://aws.amazon.com" - }, - "multiValueHeaders": { - "Header1": ["value1"], - "Header2": ["value1", "value2"] - }, - "queryStringParameters": { - "parameter1": "value1", - "parameter2": "value" - }, - "multiValueQueryStringParameters": { - "parameter1": ["value1", "value2"], - "parameter2": ["value"] - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "id", - "authorizer": { - "claims": null, - "scopes": null - }, - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "extendedRequestId": "request-id", - "httpMethod": "GET", - "identity": { - "accessKey": null, - "accountId": null, - "caller": null, - "cognitoAuthenticationProvider": null, - "cognitoAuthenticationType": null, - "cognitoIdentityId": null, - "cognitoIdentityPoolId": null, - "principalOrgId": null, - "sourceIp": "test-invoke-source-ip", - "user": null, - "userAgent": "user-agent", - "userArn": null, - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "path": "/my/path", - "protocol": "HTTP/1.1", - "requestId": "id=", - "requestTime": "04/Mar/2020:19:15:17 +0000", - "requestTimeEpoch": 1583349317135, - "resourceId": null, - "resourcePath": "/my/path", - "stage": "$default" - }, - "pathParameters": null, - "stageVariables": null, - "body": "Hello from Lambda!", - "isBase64Encoded": false -} diff --git a/packages/parser/tests/events/apiGatewayProxyEvent_noVersionAuth.json b/packages/parser/tests/events/apiGatewayProxyEvent_noVersionAuth.json deleted file mode 100644 index aa90582aa5..0000000000 --- a/packages/parser/tests/events/apiGatewayProxyEvent_noVersionAuth.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "resource": "/my/path", - "path": "/my/path", - "httpMethod": "GET", - "headers": { - "Header1": "value1", - "Header2": "value2" - }, - "multiValueHeaders": { - "Header1": ["value1"], - "Header2": ["value1", "value2"] - }, - "queryStringParameters": { - "parameter1": "value1", - "parameter2": "value" - }, - "multiValueQueryStringParameters": { - "parameter1": ["value1", "value2"], - "parameter2": ["value"] - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "id", - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "extendedRequestId": "request-id", - "httpMethod": "GET", - "identity": { - "accessKey": null, - "accountId": null, - "caller": null, - "cognitoAuthenticationProvider": null, - "cognitoAuthenticationType": null, - "cognitoIdentityId": null, - "cognitoIdentityPoolId": null, - "principalOrgId": null, - "sourceIp": "192.168.0.1", - "user": null, - "userAgent": "user-agent", - "userArn": null, - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "path": "/my/path", - "protocol": "HTTP/1.1", - "requestId": "id=", - "requestTime": "04/Mar/2020:19:15:17 +0000", - "requestTimeEpoch": 1583349317135, - "resourceId": null, - "resourcePath": "/my/path", - "stage": "$default" - }, - "pathParameters": null, - "stageVariables": null, - "body": "Hello from Lambda!", - "isBase64Encoded": true -} diff --git a/packages/parser/tests/events/apiGatewayProxyOtherEvent.json b/packages/parser/tests/events/apiGatewayProxyOtherEvent.json deleted file mode 100644 index b5f484fde7..0000000000 --- a/packages/parser/tests/events/apiGatewayProxyOtherEvent.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "version": "1.0", - "resource": "/other/path", - "path": "/other/path", - "httpMethod": "GET", - "headers": { - "Header1": "value1", - "Header2": "value2", - "Origin": "https://aws.amazon.com" - }, - "multiValueHeaders": { - "Header1": ["value1"], - "Header2": ["value1", "value2"] - }, - "queryStringParameters": { - "parameter1": "value1", - "parameter2": "value" - }, - "multiValueQueryStringParameters": { - "parameter1": ["value1", "value2"], - "parameter2": ["value"] - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "id", - "authorizer": { - "claims": null, - "scopes": null - }, - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "extendedRequestId": "request-id", - "httpMethod": "GET", - "identity": { - "accessKey": null, - "accountId": null, - "caller": null, - "cognitoAuthenticationProvider": null, - "cognitoAuthenticationType": null, - "cognitoIdentityId": null, - "cognitoIdentityPoolId": null, - "principalOrgId": null, - "sourceIp": "192.168.0.1", - "user": null, - "userAgent": "user-agent", - "userArn": null, - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "path": "/other/path", - "protocol": "HTTP/1.1", - "requestId": "id=", - "requestTime": "04/Mar/2020:19:15:17 +0000", - "requestTimeEpoch": 1583349317135, - "resourceId": null, - "resourcePath": "/other/path", - "stage": "$default" - }, - "pathParameters": null, - "stageVariables": null, - "body": "Hello from Lambda!", - "isBase64Encoded": false -} diff --git a/packages/parser/tests/events/apiGatewayProxyV2Event.json b/packages/parser/tests/events/apiGatewayProxyV2Event.json deleted file mode 100644 index c01ff40d82..0000000000 --- a/packages/parser/tests/events/apiGatewayProxyV2Event.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "version": "2.0", - "routeKey": "$default", - "rawPath": "/my/path", - "rawQueryString": "parameter1=value1¶meter1=value2¶meter2=value", - "cookies": ["cookie1", "cookie2"], - "headers": { - "Header1": "value1", - "Header2": "value1,value2" - }, - "queryStringParameters": { - "parameter1": "value1,value2", - "parameter2": "value" - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "api-id", - "authentication": { - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "authorizer": { - "jwt": { - "claims": { - "claim1": "value1", - "claim2": "value2" - }, - "scopes": ["scope1", "scope2"] - } - }, - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "http": { - "method": "POST", - "path": "/my/path", - "protocol": "HTTP/1.1", - "sourceIp": "192.168.0.1", - "userAgent": "agent" - }, - "requestId": "id", - "routeKey": "$default", - "stage": "$default", - "time": "12/Mar/2020:19:03:58 +0000", - "timeEpoch": 1583348638390 - }, - "body": "{\"message\": \"hello world\", \"username\": \"tom\"}", - "pathParameters": { - "parameter1": "value1" - }, - "isBase64Encoded": false, - "stageVariables": { - "stageVariable1": "value1", - "stageVariable2": "value2" - } -} diff --git a/packages/parser/tests/events/apiGatewayProxyV2EventPathTrailingSlash.json b/packages/parser/tests/events/apiGatewayProxyV2EventPathTrailingSlash.json deleted file mode 100644 index b61beaa0e6..0000000000 --- a/packages/parser/tests/events/apiGatewayProxyV2EventPathTrailingSlash.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "version": "2.0", - "routeKey": "$default", - "rawPath": "/my/path/", - "rawQueryString": "parameter1=value1¶meter1=value2¶meter2=value", - "cookies": ["cookie1", "cookie2"], - "headers": { - "Header1": "value1", - "Header2": "value1,value2" - }, - "queryStringParameters": { - "parameter1": "value1,value2", - "parameter2": "value" - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "api-id", - "authentication": { - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "authorizer": { - "jwt": { - "claims": { - "claim1": "value1", - "claim2": "value2" - }, - "scopes": ["scope1", "scope2"] - } - }, - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "http": { - "method": "POST", - "path": "/my/path", - "protocol": "HTTP/1.1", - "sourceIp": "192.168.0.1", - "userAgent": "agent" - }, - "requestId": "id", - "routeKey": "$default", - "stage": "$default", - "time": "12/Mar/2020:19:03:58 +0000", - "timeEpoch": 1583348638390 - }, - "body": "{\"message\": \"hello world\", \"username\": \"tom\"}", - "pathParameters": { - "parameter1": "value1" - }, - "isBase64Encoded": false, - "stageVariables": { - "stageVariable1": "value1", - "stageVariable2": "value2" - } -} diff --git a/packages/parser/tests/events/apiGatewayProxyV2Event_GET.json b/packages/parser/tests/events/apiGatewayProxyV2Event_GET.json deleted file mode 100644 index df84c046d4..0000000000 --- a/packages/parser/tests/events/apiGatewayProxyV2Event_GET.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "version": "2.0", - "routeKey": "$default", - "rawPath": "/my/path", - "rawQueryString": "parameter1=value1¶meter1=value2¶meter2=value", - "cookies": ["cookie1", "cookie2"], - "headers": { - "Header1": "value1", - "Header2": "value1,value2" - }, - "queryStringParameters": { - "parameter1": "value1,value2", - "parameter2": "value" - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "api-id", - "authentication": { - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "authorizer": { - "jwt": { - "claims": { - "claim1": "value1", - "claim2": "value2" - }, - "scopes": ["scope1", "scope2"] - } - }, - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "http": { - "method": "GET", - "path": "/my/path", - "protocol": "HTTP/1.1", - "sourceIp": "192.168.0.1", - "userAgent": "agent" - }, - "requestId": "id", - "routeKey": "$default", - "stage": "$default", - "time": "12/Mar/2020:19:03:58 +0000", - "timeEpoch": 1583348638390 - }, - "pathParameters": { - "parameter1": "value1" - }, - "isBase64Encoded": false, - "stageVariables": { - "stageVariable1": "value1", - "stageVariable2": "value2" - } -} diff --git a/packages/parser/tests/events/apiGatewayProxyV2IamEvent.json b/packages/parser/tests/events/apiGatewayProxyV2IamEvent.json deleted file mode 100644 index 3bc003d656..0000000000 --- a/packages/parser/tests/events/apiGatewayProxyV2IamEvent.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "version": "2.0", - "routeKey": "$default", - "rawPath": "/my/path", - "rawQueryString": "parameter1=value1¶meter1=value2¶meter2=value", - "cookies": ["cookie1", "cookie2"], - "headers": { - "Header1": "value1", - "Header2": "value2" - }, - "queryStringParameters": { - "parameter1": "value1,value2", - "parameter2": "value" - }, - "pathParameters": { - "proxy": "hello/world" - }, - "requestContext": { - "routeKey": "$default", - "accountId": "123456789012", - "stage": "$default", - "requestId": "id", - "authorizer": { - "iam": { - "accessKey": "ARIA2ZJZYVUEREEIHAKY", - "accountId": "1234567890", - "callerId": "AROA7ZJZYVRE7C3DUXHH6:CognitoIdentityCredentials", - "cognitoIdentity": { - "amr": ["foo"], - "identityId": "us-east-1:3f291106-8703-466b-8f2b-3ecee1ca56ce", - "identityPoolId": "us-east-1:4f291106-8703-466b-8f2b-3ecee1ca56ce" - }, - "principalOrgId": "AwsOrgId", - "userArn": "arn:aws:iam::1234567890:user/Admin", - "userId": "AROA2ZJZYVRE7Y3TUXHH6" - } - }, - "apiId": "api-id", - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "time": "12/Mar/2020:19:03:58+0000", - "timeEpoch": 1583348638390, - "http": { - "method": "GET", - "path": "/my/path", - "protocol": "HTTP/1.1", - "sourceIp": "192.168.0.1", - "userAgent": "agent" - } - }, - "stageVariables": { - "stageVariable1": "value1", - "stageVariable2": "value2" - }, - "body": "{\r\n\t\"a\": 1\r\n}", - "isBase64Encoded": false -} diff --git a/packages/parser/tests/events/apiGatewayProxyV2LambdaAuthorizerEvent.json b/packages/parser/tests/events/apiGatewayProxyV2LambdaAuthorizerEvent.json deleted file mode 100644 index 58ba0489e0..0000000000 --- a/packages/parser/tests/events/apiGatewayProxyV2LambdaAuthorizerEvent.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "version": "2.0", - "routeKey": "$default", - "rawPath": "/my/path", - "rawQueryString": "parameter1=value1¶meter1=value2¶meter2=value", - "cookies": ["cookie1", "cookie2"], - "headers": { - "Header1": "value1", - "Header2": "value2" - }, - "queryStringParameters": { - "parameter1": "value1,value2", - "parameter2": "value" - }, - "pathParameters": { - "proxy": "hello/world" - }, - "requestContext": { - "routeKey": "$default", - "accountId": "123456789012", - "stage": "$default", - "requestId": "id", - "authorizer": { - "lambda": { - "key": "value" - } - }, - "apiId": "api-id", - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "time": "12/Mar/2020:19:03:58+0000", - "timeEpoch": 1583348638390, - "http": { - "method": "GET", - "path": "/my/path", - "protocol": "HTTP/1.1", - "sourceIp": "192.168.0.1", - "userAgent": "agent" - } - }, - "stageVariables": { - "stageVariable1": "value1", - "stageVariable2": "value2" - }, - "body": "{\r\n\t\"a\": 1\r\n}", - "isBase64Encoded": false -} diff --git a/packages/parser/tests/events/apiGatewayProxyV2OtherGetEvent.json b/packages/parser/tests/events/apiGatewayProxyV2OtherGetEvent.json deleted file mode 100644 index b600aa35c3..0000000000 --- a/packages/parser/tests/events/apiGatewayProxyV2OtherGetEvent.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "version": "2.0", - "routeKey": "$default", - "rawPath": "/other/path", - "rawQueryString": "parameter1=value1¶meter1=value2¶meter2=value", - "cookies": ["cookie1", "cookie2"], - "headers": { - "Header1": "value1", - "Header2": "value1,value2" - }, - "queryStringParameters": { - "parameter1": "value1,value2", - "parameter2": "value" - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "api-id", - "authentication": { - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "authorizer": { - "jwt": { - "claims": { - "claim1": "value1", - "claim2": "value2" - }, - "scopes": ["scope1", "scope2"] - } - }, - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "http": { - "method": "GET", - "path": "/other/path", - "protocol": "HTTP/1.1", - "sourceIp": "192.168.0.1", - "userAgent": "agent" - }, - "requestId": "id", - "routeKey": "$default", - "stage": "$default", - "time": "12/Mar/2020:19:03:58 +0000", - "timeEpoch": 1583348638390 - }, - "pathParameters": { - "parameter1": "value1" - }, - "isBase64Encoded": false, - "stageVariables": { - "stageVariable1": "value1", - "stageVariable2": "value2" - } -} diff --git a/packages/parser/tests/events/apiGatewayProxyV2SchemaMiddlewareInvalidEvent.json b/packages/parser/tests/events/apiGatewayProxyV2SchemaMiddlewareInvalidEvent.json deleted file mode 100644 index 9ecf730d4b..0000000000 --- a/packages/parser/tests/events/apiGatewayProxyV2SchemaMiddlewareInvalidEvent.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "version": "2.0", - "routeKey": "$default", - "rawPath": "/my/path", - "rawQueryString": "parameter1=value1¶meter1=value2¶meter2=value", - "cookies": ["cookie1", "cookie2"], - "headers": { - "Header1": "value1", - "Header2": "value1,value2" - }, - "queryStringParameters": { - "parameter1": "value1,value2", - "parameter2": "value" - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "api-id", - "authentication": { - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "authorizer": { - "jwt": { - "claims": { - "claim1": "value1", - "claim2": "value2" - }, - "scopes": ["scope1", "scope2"] - } - }, - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "http": { - "method": "POST", - "path": "/my/path", - "protocol": "HTTP/1.1", - "sourceIp": "192.168.0.1", - "userAgent": "agent" - }, - "requestId": "id", - "routeKey": "$default", - "stage": "$default", - "time": "12/Mar/2020:19:03:58 +0000", - "timeEpoch": 1583348638390 - }, - "body": "{\"username\": \"lessa\"}", - "pathParameters": { - "parameter1": "value1" - }, - "isBase64Encoded": false, - "stageVariables": { - "stageVariable1": "value1", - "stageVariable2": "value2" - } -} diff --git a/packages/parser/tests/events/apiGatewayProxyV2SchemaMiddlewareValidEvent.json b/packages/parser/tests/events/apiGatewayProxyV2SchemaMiddlewareValidEvent.json deleted file mode 100644 index 1e5802a685..0000000000 --- a/packages/parser/tests/events/apiGatewayProxyV2SchemaMiddlewareValidEvent.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "version": "2.0", - "routeKey": "$default", - "rawPath": "/my/path", - "rawQueryString": "parameter1=value1¶meter1=value2¶meter2=value", - "cookies": ["cookie1", "cookie2"], - "headers": { - "Header1": "value1", - "Header2": "value1,value2" - }, - "queryStringParameters": { - "parameter1": "value1,value2", - "parameter2": "value" - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "api-id", - "authentication": { - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "authorizer": { - "jwt": { - "claims": { - "claim1": "value1", - "claim2": "value2" - }, - "scopes": ["scope1", "scope2"] - } - }, - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "http": { - "method": "POST", - "path": "/my/path", - "protocol": "HTTP/1.1", - "sourceIp": "192.168.0.1", - "userAgent": "agent" - }, - "requestId": "id", - "routeKey": "$default", - "stage": "$default", - "time": "12/Mar/2020:19:03:58 +0000", - "timeEpoch": 1583348638390 - }, - "body": "{\"message\": \"hello world\", \"username\": \"lessa\"}", - "pathParameters": { - "parameter1": "value1" - }, - "isBase64Encoded": false, - "stageVariables": { - "stageVariable1": "value1", - "stageVariable2": "value2" - } -} diff --git a/packages/parser/tests/events/apiGatewaySchemaMiddlewareInvalidEvent.json b/packages/parser/tests/events/apiGatewaySchemaMiddlewareInvalidEvent.json deleted file mode 100644 index bc5d7ae252..0000000000 --- a/packages/parser/tests/events/apiGatewaySchemaMiddlewareInvalidEvent.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "version": "1.0", - "resource": "/my/path", - "path": "/my/path", - "httpMethod": "POST", - "headers": { - "Header1": "value1", - "Header2": "value2", - "Origin": "https://aws.amazon.com" - }, - "multiValueHeaders": { - "Header1": ["value1"], - "Header2": ["value1", "value2"] - }, - "queryStringParameters": { - "parameter1": "value1", - "parameter2": "value" - }, - "multiValueQueryStringParameters": { - "parameter1": ["value1", "value2"], - "parameter2": ["value"] - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "id", - "authorizer": { - "claims": null, - "scopes": null - }, - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "extendedRequestId": "request-id", - "httpMethod": "GET", - "identity": { - "accessKey": null, - "accountId": null, - "caller": null, - "cognitoAuthenticationProvider": null, - "cognitoAuthenticationType": null, - "cognitoIdentityId": null, - "cognitoIdentityPoolId": null, - "principalOrgId": null, - "sourceIp": "192.168.0.1", - "user": null, - "userAgent": "user-agent", - "userArn": null, - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "path": "/my/path", - "protocol": "HTTP/1.1", - "requestId": "id=", - "requestTime": "04/Mar/2020:19:15:17 +0000", - "requestTimeEpoch": 1583349317135, - "resourceId": null, - "resourcePath": "/my/path", - "stage": "$default" - }, - "pathParameters": null, - "stageVariables": null, - "body": "{\"username\": \"lessa\"}", - "isBase64Encoded": false -} diff --git a/packages/parser/tests/events/apiGatewaySchemaMiddlewareValidEvent.json b/packages/parser/tests/events/apiGatewaySchemaMiddlewareValidEvent.json deleted file mode 100644 index e3d5236ce5..0000000000 --- a/packages/parser/tests/events/apiGatewaySchemaMiddlewareValidEvent.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "version": "1.0", - "resource": "/my/path", - "path": "/my/path", - "httpMethod": "POST", - "headers": { - "Header1": "value1", - "Header2": "value2", - "Origin": "https://aws.amazon.com" - }, - "multiValueHeaders": { - "Header1": ["value1"], - "Header2": ["value1", "value2"] - }, - "queryStringParameters": { - "parameter1": "value1", - "parameter2": "value" - }, - "multiValueQueryStringParameters": { - "parameter1": ["value1", "value2"], - "parameter2": ["value"] - }, - "requestContext": { - "accountId": "123456789012", - "apiId": "id", - "authorizer": { - "claims": null, - "scopes": null - }, - "domainName": "id.execute-api.us-east-1.amazonaws.com", - "domainPrefix": "id", - "extendedRequestId": "request-id", - "httpMethod": "GET", - "identity": { - "accessKey": null, - "accountId": null, - "caller": null, - "cognitoAuthenticationProvider": null, - "cognitoAuthenticationType": null, - "cognitoIdentityId": null, - "cognitoIdentityPoolId": null, - "principalOrgId": null, - "sourceIp": "192.168.0.1", - "user": null, - "userAgent": "user-agent", - "userArn": null, - "clientCert": { - "clientCertPem": "CERT_CONTENT", - "subjectDN": "www.example.com", - "issuerDN": "Example issuer", - "serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1", - "validity": { - "notBefore": "May 28 12:30:02 2019 GMT", - "notAfter": "Aug 5 09:36:04 2021 GMT" - } - } - }, - "path": "/my/path", - "protocol": "HTTP/1.1", - "requestId": "id=", - "requestTime": "04/Mar/2020:19:15:17 +0000", - "requestTimeEpoch": 1583349317135, - "resourceId": null, - "resourcePath": "/my/path", - "stage": "$default" - }, - "pathParameters": null, - "stageVariables": null, - "body": "{\"message\": \"hello world\", \"username\": \"lessa\"}", - "isBase64Encoded": false -} diff --git a/packages/parser/tests/events/appSyncAuthorizerEvent.json b/packages/parser/tests/events/appSyncAuthorizerEvent.json deleted file mode 100644 index 5b58de9dd4..0000000000 --- a/packages/parser/tests/events/appSyncAuthorizerEvent.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "authorizationToken": "BE9DC5E3-D410-4733-AF76-70178092E681", - "requestContext": { - "apiId": "giy7kumfmvcqvbedntjwjvagii", - "accountId": "254688921111", - "requestId": "b80ed838-14c6-4500-b4c3-b694c7bef086", - "queryString": "mutation MyNewTask($desc: String!) {\n createTask(description: $desc, owner: \"ccc\", taskStatus: \"cc\", title: \"ccc\") {\n id\n }\n}\n", - "operationName": "MyNewTask", - "variables": { - "desc": "Foo" - } - } -} diff --git a/packages/parser/tests/events/appSyncAuthorizerResponse.json b/packages/parser/tests/events/appSyncAuthorizerResponse.json deleted file mode 100644 index dfd52d9498..0000000000 --- a/packages/parser/tests/events/appSyncAuthorizerResponse.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "isAuthorized": true, - "resolverContext": { - "name": "Foo Man", - "balance": 100 - }, - "deniedFields": ["Mutation.createEvent"], - "ttlOverride": 15 -} diff --git a/packages/parser/tests/events/appSyncDirectResolver.json b/packages/parser/tests/events/appSyncDirectResolver.json deleted file mode 100644 index 64054c9acb..0000000000 --- a/packages/parser/tests/events/appSyncDirectResolver.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "arguments": { - "id": "my identifier" - }, - "identity": { - "claims": { - "sub": "192879fc-a240-4bf1-ab5a-d6a00f3063f9", - "email_verified": true, - "iss": "https://cognito-idp.us-west-2.amazonaws.com/us-west-xxxxxxxxxxx", - "phone_number_verified": false, - "cognito:username": "jdoe", - "aud": "7471s60os7h0uu77i1tk27sp9n", - "event_id": "bc334ed8-a938-4474-b644-9547e304e606", - "token_use": "id", - "auth_time": 1599154213, - "phone_number": "+19999999999", - "exp": 1599157813, - "iat": 1599154213, - "email": "jdoe@email.com" - }, - "defaultAuthStrategy": "ALLOW", - "groups": null, - "issuer": "https://cognito-idp.us-west-2.amazonaws.com/us-west-xxxxxxxxxxx", - "sourceIp": ["1.1.1.1"], - "sub": "192879fc-a240-4bf1-ab5a-d6a00f3063f9", - "username": "jdoe" - }, - "source": null, - "request": { - "headers": { - "x-forwarded-for": "1.1.1.1, 2.2.2.2", - "cloudfront-viewer-country": "US", - "cloudfront-is-tablet-viewer": "false", - "via": "2.0 xxxxxxxxxxxxxxxx.cloudfront.net (CloudFront)", - "cloudfront-forwarded-proto": "https", - "origin": "https://us-west-1.console.aws.amazon.com", - "content-length": "217", - "accept-language": "en-US,en;q=0.9", - "host": "xxxxxxxxxxxxxxxx.appsync-api.us-west-1.amazonaws.com", - "x-forwarded-proto": "https", - "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.83 Safari/537.36", - "accept": "*/*", - "cloudfront-is-mobile-viewer": "false", - "cloudfront-is-smarttv-viewer": "false", - "accept-encoding": "gzip, deflate, br", - "referer": "https://us-west-1.console.aws.amazon.com/appsync/home?region=us-west-1", - "content-type": "application/json", - "sec-fetch-mode": "cors", - "x-amz-cf-id": "3aykhqlUwQeANU-HGY7E_guV5EkNeMMtwyOgiA==", - "x-amzn-trace-id": "Root=1-5f512f51-fac632066c5e848ae714", - "authorization": "eyJraWQiOiJScWFCSlJqYVJlM0hrSnBTUFpIcVRXazNOW...", - "sec-fetch-dest": "empty", - "x-amz-user-agent": "AWS-Console-AppSync/", - "cloudfront-is-desktop-viewer": "true", - "sec-fetch-site": "cross-site", - "x-forwarded-port": "443" - } - }, - "prev": null, - "info": { - "selectionSetList": ["id", "field1", "field2"], - "selectionSetGraphQL": "{\n id\n field1\n field2\n}", - "parentTypeName": "Mutation", - "fieldName": "createSomething", - "variables": {} - }, - "stash": {} -} diff --git a/packages/parser/tests/events/appSyncResolverEvent.json b/packages/parser/tests/events/appSyncResolverEvent.json deleted file mode 100644 index 6a5d72195c..0000000000 --- a/packages/parser/tests/events/appSyncResolverEvent.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "typeName": "Merchant", - "fieldName": "locations", - "arguments": { - "page": 2, - "size": 1, - "name": "value" - }, - "identity": { - "claims": { - "sub": "07920713-4526-4642-9c88-2953512de441", - "iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_POOL_ID", - "aud": "58rc9bf5kkti90ctmvioppukm9", - "event_id": "7f4c9383-abf6-48b7-b821-91643968b755", - "token_use": "id", - "auth_time": 1615366261, - "name": "Michael Brewer", - "exp": 1615369861, - "iat": 1615366261 - }, - "defaultAuthStrategy": "ALLOW", - "groups": null, - "issuer": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_POOL_ID", - "sourceIp": ["11.215.2.22"], - "sub": "07920713-4526-4642-9c88-2953512de441", - "username": "mike" - }, - "source": { - "name": "Value", - "nested": { - "name": "value", - "list": [] - } - }, - "request": { - "headers": { - "x-forwarded-for": "11.215.2.22, 64.44.173.11", - "cloudfront-viewer-country": "US", - "cloudfront-is-tablet-viewer": "false", - "via": "2.0 SOMETHING.cloudfront.net (CloudFront)", - "cloudfront-forwarded-proto": "https", - "origin": "https://console.aws.amazon.com", - "content-length": "156", - "accept-language": "en-US,en;q=0.9", - "host": "SOMETHING.appsync-api.us-east-1.amazonaws.com", - "x-forwarded-proto": "https", - "sec-gpc": "1", - "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) etc.", - "accept": "*/*", - "cloudfront-is-mobile-viewer": "false", - "cloudfront-is-smarttv-viewer": "false", - "accept-encoding": "gzip, deflate, br", - "referer": "https://console.aws.amazon.com/", - "content-type": "application/json", - "sec-fetch-mode": "cors", - "x-amz-cf-id": "Fo5VIuvP6V6anIEt62WzFDCK45mzM4yEdpt5BYxOl9OFqafd-WR0cA==", - "x-amzn-trace-id": "Root=1-60488877-0b0c4e6727ab2a1c545babd0", - "authorization": "AUTH-HEADER", - "sec-fetch-dest": "empty", - "x-amz-user-agent": "AWS-Console-AppSync/", - "cloudfront-is-desktop-viewer": "true", - "sec-fetch-site": "cross-site", - "x-forwarded-port": "443" - } - }, - "prev": { - "result": {} - } -} diff --git a/packages/parser/tests/events/eventBridgeEvent.json b/packages/parser/tests/events/eventbridge/base.json similarity index 100% rename from packages/parser/tests/events/eventBridgeEvent.json rename to packages/parser/tests/events/eventbridge/base.json diff --git a/packages/parser/tests/unit/envelopes/eventbridge.test.ts b/packages/parser/tests/unit/envelopes/eventbridge.test.ts index 5b4443cd92..c66658ba97 100644 --- a/packages/parser/tests/unit/envelopes/eventbridge.test.ts +++ b/packages/parser/tests/unit/envelopes/eventbridge.test.ts @@ -1,123 +1,109 @@ -import { generateMock } from '@anatine/zod-mock'; -import type { EventBridgeEvent } from 'aws-lambda'; import { describe, expect, it } from 'vitest'; -import { ZodError } from 'zod'; +import { ZodError, z } from 'zod'; import { EventBridgeEnvelope } from '../../../src/envelopes/index.js'; import { ParseError } from '../../../src/errors.js'; -import { TestEvents, TestSchema } from '../schema/utils.js'; +import type { EventBridgeEvent } from '../../../src/types/schema.js'; +import { getTestEvent, omit } from '../schema/utils.js'; -describe('EventBridgeEnvelope ', () => { - describe('parse', () => { - it('should parse eventbridge event', () => { - const eventBridgeEvent = TestEvents.eventBridgeEvent as EventBridgeEvent< - string, - object - >; - - const data = generateMock(TestSchema); - - eventBridgeEvent.detail = data; - - expect(EventBridgeEnvelope.parse(eventBridgeEvent, TestSchema)).toEqual( - data - ); - }); - - it('should throw error if detail type does not match schema', () => { - const eventBridgeEvent = TestEvents.eventBridgeEvent as EventBridgeEvent< - string, - object - >; +describe('Envelope: EventBridgeEnvelope', () => { + const schema = z.object({ + instance_id: z.string(), + state: z.string(), + }); + const baseEvent = getTestEvent({ + eventsPath: 'eventbridge', + filename: 'base', + }); - eventBridgeEvent.detail = { - foo: 'bar', - }; + describe('Method: parse', () => { + it('throws if the payload does not match the schema', () => { + // Prepare + const event = structuredClone(baseEvent); + // Act & Assess expect(() => - EventBridgeEnvelope.parse(eventBridgeEvent, TestSchema) - ).toThrowError(); + EventBridgeEnvelope.parse( + event, + z.object({ + owner: z.string(), + }) + ) + ).toThrow( + expect.objectContaining({ + name: 'ParseError', + message: expect.stringContaining( + 'Failed to parse EventBridge envelope' + ), + cause: expect.objectContaining({ + issues: [ + { + code: 'invalid_type', + expected: 'string', + received: 'undefined', + path: ['detail', 'owner'], + message: 'Required', + }, + ], + }), + }) + ); }); - it('should throw when invalid data type provided', () => { - const eventBridgeEvent = TestEvents.eventBridgeEvent as EventBridgeEvent< - string, - object - >; + it('parses an EventBridge event', () => { + // Prepare + const testEvent = structuredClone(baseEvent); - eventBridgeEvent.detail = 1 as unknown as object; + // Act + const result = EventBridgeEnvelope.parse(testEvent, schema); - expect(() => - EventBridgeEnvelope.parse(eventBridgeEvent, TestSchema) - ).toThrow(); + // Assess + expect(result).toStrictEqual({ + instance_id: 'i-1234567890abcdef0', + state: 'terminated', + }); }); }); - describe('safeParse', () => { - it('should safe parse eventbridge event', () => { - const eventBridgeEvent = TestEvents.eventBridgeEvent as EventBridgeEvent< - string, - object - >; - - const data = generateMock(TestSchema); + describe('Method: safeParse', () => { + it('parses an EventBridge event', () => { + // Prepare + const event = structuredClone(baseEvent); - eventBridgeEvent.detail = data; + // Act + const result = EventBridgeEnvelope.safeParse(event, schema); - expect( - EventBridgeEnvelope.safeParse(eventBridgeEvent, TestSchema) - ).toEqual({ + // Assess + expect(result).toEqual({ success: true, - data: data, + data: { + instance_id: 'i-1234567890abcdef0', + state: 'terminated', + }, }); }); - it('should safe parse eventbridge event and return original event if invalid', () => { - const eventBridgeEvent = TestEvents.eventBridgeEvent as EventBridgeEvent< - string, - object - >; + it('returns an error if the event is not a valid EventBridge event', () => { + // Prepare + const event = omit(['detail'], structuredClone(baseEvent)); - eventBridgeEvent.detail = { - foo: 'bar', - }; - - const parseResult = EventBridgeEnvelope.safeParse( - eventBridgeEvent, - TestSchema - ); - expect(parseResult).toEqual({ - success: false, - error: expect.any(ParseError), - originalEvent: eventBridgeEvent, - }); - - if (!parseResult.success && parseResult.error) { - expect(parseResult.error.cause).toBeInstanceOf(ZodError); - } - }); - - it('should safe parse eventbridge event and return original event if invalid data type', () => { - const eventBridgeEvent = TestEvents.eventBridgeEvent as EventBridgeEvent< - string, - object - >; - - eventBridgeEvent.detail = 1 as unknown as object; - - expect( - EventBridgeEnvelope.safeParse(eventBridgeEvent, TestSchema) - ).toEqual({ - success: false, - error: expect.any(ParseError), - originalEvent: eventBridgeEvent, - }); - }); + // Act + const result = EventBridgeEnvelope.safeParse(event, schema); - it('should return original event and error envelope is invalid', () => { - expect(EventBridgeEnvelope.safeParse(1, TestSchema)).toEqual({ + // Assess + expect(result).toEqual({ success: false, - error: expect.any(ParseError), - originalEvent: 1, + error: new ParseError('Failed to parse EventBridge envelope', { + cause: new ZodError([ + { + code: 'invalid_type', + expected: 'object', + received: 'undefined', + path: ['detail'], + message: 'Required', + }, + ]), + }), + originalEvent: event, }); }); }); diff --git a/packages/parser/tests/unit/envelopes/lambda.test.ts b/packages/parser/tests/unit/envelopes/lambda.test.ts index 2260e099ed..b76228bb6e 100644 --- a/packages/parser/tests/unit/envelopes/lambda.test.ts +++ b/packages/parser/tests/unit/envelopes/lambda.test.ts @@ -1,5 +1,8 @@ import { generateMock } from '@anatine/zod-mock'; -import type { APIGatewayProxyEventV2 } from 'aws-lambda'; +import type { + APIGatewayProxyEventV2, + LambdaFunctionURLEvent, +} from 'aws-lambda'; import { describe, expect, it } from 'vitest'; import { ZodError } from 'zod'; import { ParseError } from '../../../src'; @@ -22,7 +25,7 @@ describe('Lambda Functions Url ', () => { it('should throw when no body provided', () => { const testEvent = - TestEvents.apiGatewayProxyV2Event as APIGatewayProxyEventV2; + TestEvents.lambdaFunctionUrlEvent as LambdaFunctionURLEvent; testEvent.body = undefined; expect(() => diff --git a/packages/parser/tests/unit/parser.decorator.test.ts b/packages/parser/tests/unit/parser.decorator.test.ts index 7e0a3d3293..d53418198c 100644 --- a/packages/parser/tests/unit/parser.decorator.test.ts +++ b/packages/parser/tests/unit/parser.decorator.test.ts @@ -8,7 +8,7 @@ import { ParseError } from '../../src/errors.js'; import { parser } from '../../src/index.js'; import { EventBridgeSchema } from '../../src/schemas/index.js'; import type { EventBridgeEvent, ParsedResult } from '../../src/types'; -import { TestEvents, TestSchema } from './schema/utils'; +import { TestEvents, TestSchema, getTestEvent } from './schema/utils'; describe('Parser Decorator', () => { const customEventBridgeSchema = EventBridgeSchema.extend({ @@ -90,7 +90,10 @@ describe('Parser Decorator', () => { it('should parse custom schema with envelope event', async () => { const customPayload = generateMock(TestSchema); - const testEvent = TestEvents.eventBridgeEvent as EventBridgeEvent; + const testEvent = getTestEvent({ + eventsPath: 'eventbridge', + filename: 'base', + }); testEvent.detail = customPayload; const resp = await lambda.handlerWithSchemaAndEnvelope( @@ -119,7 +122,10 @@ describe('Parser Decorator', () => { it('should parse and call private async method', async () => { const customPayload = generateMock(TestSchema); - const testEvent = TestEvents.eventBridgeEvent as EventBridgeEvent; + const testEvent = getTestEvent({ + eventsPath: 'eventbridge', + filename: 'base', + }); testEvent.detail = customPayload; const resp = await lambda.handlerWithParserCallsAnotherMethod( @@ -159,7 +165,10 @@ describe('Parser Decorator', () => { it('should parse event with envelope and safeParse', async () => { const testEvent = generateMock(TestSchema); - const event = TestEvents.eventBridgeEvent as EventBridgeEvent; + const event = getTestEvent({ + eventsPath: 'eventbridge', + filename: 'base', + }); event.detail = testEvent; const resp = await lambda.harndlerWithEnvelopeAndSafeParse( diff --git a/packages/parser/tests/unit/parser.middy.test.ts b/packages/parser/tests/unit/parser.middy.test.ts index 0528f71737..4c876b3424 100644 --- a/packages/parser/tests/unit/parser.middy.test.ts +++ b/packages/parser/tests/unit/parser.middy.test.ts @@ -8,7 +8,7 @@ import { EventBridgeEnvelope, SqsEnvelope } from '../../src/envelopes'; import { parser } from '../../src/middleware/parser.js'; import { SqsSchema } from '../../src/schemas'; import type { EventBridgeEvent, ParsedResult, SqsEvent } from '../../src/types'; -import { TestEvents, TestSchema } from './schema/utils'; +import { TestEvents, TestSchema, getTestEvent } from './schema/utils'; describe('Middleware: parser', () => { type TestEvent = z.infer; @@ -182,7 +182,10 @@ describe('Middleware: parser', () => { it('should return event when envelope and safeParse are true', async () => { const detail = generateMock(TestSchema); - const event = TestEvents.eventBridgeEvent as EventBridgeEvent; + const event = getTestEvent({ + eventsPath: 'eventbridge', + filename: 'base', + }); event.detail = detail; @@ -212,7 +215,10 @@ describe('Middleware: parser', () => { }); it('should return error when envelope provided, safeParse is true, and schema does not match', async () => { - const event = TestEvents.eventBridgeEvent as EventBridgeEvent; + const event = getTestEvent({ + eventsPath: 'eventbridge', + filename: 'base', + }); const middyfiedHandler = middy() .use( diff --git a/packages/parser/tests/unit/schema/eventbridge.test.ts b/packages/parser/tests/unit/schema/eventbridge.test.ts index 480d7a4030..49297b3a6c 100644 --- a/packages/parser/tests/unit/schema/eventbridge.test.ts +++ b/packages/parser/tests/unit/schema/eventbridge.test.ts @@ -1,11 +1,30 @@ import { describe, expect, it } from 'vitest'; -import { EventBridgeSchema } from '../../../src/schemas/'; -import { TestEvents } from './utils.js'; +import { EventBridgeSchema } from '../../../src/schemas/eventbridge.js'; +import type { EventBridgeEvent } from '../../../src/types/schema.js'; +import { getTestEvent, omit } from '../schema/utils.js'; -describe('EventBridge ', () => { - it('should parse eventbridge event', () => { - const eventBridgeEvent = TestEvents.eventBridgeEvent; +describe('Schema: EventBridge', () => { + const baseEvent = getTestEvent({ + eventsPath: 'eventbridge', + filename: 'base', + }); + + it('parses an EventBridge event', () => { + // Prepare + const event = structuredClone(baseEvent); + + // Act + const result = EventBridgeSchema.parse(event); + + // Assess + expect(result).toStrictEqual(event); + }); + + it('throws if the event is not an EventBridge event', () => { + // Prepare + const event = omit(['detail', 'detail-type'], structuredClone(baseEvent)); - expect(EventBridgeSchema.parse(eventBridgeEvent)).toEqual(eventBridgeEvent); + // Act & Assess + expect(() => EventBridgeSchema.parse(event)).toThrow(); }); }); diff --git a/packages/parser/tests/unit/schema/lambda.test.ts b/packages/parser/tests/unit/schema/lambda.test.ts index dfce359967..c5fd260112 100644 --- a/packages/parser/tests/unit/schema/lambda.test.ts +++ b/packages/parser/tests/unit/schema/lambda.test.ts @@ -4,7 +4,7 @@ import { TestEvents } from './utils.js'; describe('Lambda ', () => { it('should parse lambda event', () => { - const lambdaFunctionUrlEvent = TestEvents.apiGatewayProxyV2Event; + const lambdaFunctionUrlEvent = TestEvents.lambdaFunctionUrlEvent; expect(LambdaFunctionUrlSchema.parse(lambdaFunctionUrlEvent)).toEqual( lambdaFunctionUrlEvent diff --git a/packages/parser/tests/unit/schema/utils.ts b/packages/parser/tests/unit/schema/utils.ts index 4385288e9b..fe2ec91565 100644 --- a/packages/parser/tests/unit/schema/utils.ts +++ b/packages/parser/tests/unit/schema/utils.ts @@ -12,30 +12,6 @@ const filenames = [ 'albEvent', 'albEventPathTrailingSlash', 'albMultiValueHeadersEvent', - 'apiGatewayAuthorizerRequestEvent', - 'apiGatewayAuthorizerTokenEvent', - 'apiGatewayAuthorizerV2Event', - 'apiGatewayProxyEvent', - 'apiGatewayProxyEventAnotherPath', - 'apiGatewayProxyEventPathTrailingSlash', - 'apiGatewayProxyEventPrincipalId', - 'apiGatewayProxyEvent_noVersionAuth', - 'apiGatewayProxyOtherEvent', - 'apiGatewayProxyEventTestUI', - 'apiGatewayProxyV2Event', - 'apiGatewayProxyV2EventPathTrailingSlash', - 'apiGatewayProxyV2Event_GET', - 'apiGatewayProxyV2IamEvent', - 'apiGatewayProxyV2LambdaAuthorizerEvent', - 'apiGatewayProxyV2OtherGetEvent', - 'apiGatewayProxyV2SchemaMiddlewareInvalidEvent', - 'apiGatewayProxyV2SchemaMiddlewareValidEvent', - 'apiGatewaySchemaMiddlewareInvalidEvent', - 'apiGatewaySchemaMiddlewareValidEvent', - 'appSyncAuthorizerEvent', - 'appSyncAuthorizerResponse', - 'appSyncDirectResolver', - 'appSyncResolverEvent', 'awsConfigRuleConfigurationChanged', 'awsConfigRuleOversizedConfiguration', 'awsConfigRuleScheduled', @@ -62,10 +38,6 @@ const filenames = [ 'cognitoVerifyAuthChallengeResponseEvent', 'connectContactFlowEventAll', 'connectContactFlowEventMin', - 'dynamoStreamEvent', - 'eventBridgeEvent', - 'kafkaEventMsk', - 'kafkaEventSelfManaged', 'kinesisFirehoseKinesisEvent', 'kinesisFirehosePutEvent', 'kinesisFirehoseSQSEvent', From d13683de8c3b477d5e8be9a3186631b5adc061bf Mon Sep 17 00:00:00 2001 From: Andrea Amorosi Date: Tue, 21 Jan 2025 10:39:27 +0100 Subject: [PATCH 2/2] chore: remove unused imports --- packages/parser/tests/unit/parser.decorator.test.ts | 2 +- packages/parser/tests/unit/parser.middy.test.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/parser/tests/unit/parser.decorator.test.ts b/packages/parser/tests/unit/parser.decorator.test.ts index d53418198c..5ce14f7d04 100644 --- a/packages/parser/tests/unit/parser.decorator.test.ts +++ b/packages/parser/tests/unit/parser.decorator.test.ts @@ -8,7 +8,7 @@ import { ParseError } from '../../src/errors.js'; import { parser } from '../../src/index.js'; import { EventBridgeSchema } from '../../src/schemas/index.js'; import type { EventBridgeEvent, ParsedResult } from '../../src/types'; -import { TestEvents, TestSchema, getTestEvent } from './schema/utils'; +import { TestSchema, getTestEvent } from './schema/utils'; describe('Parser Decorator', () => { const customEventBridgeSchema = EventBridgeSchema.extend({ diff --git a/packages/parser/tests/unit/parser.middy.test.ts b/packages/parser/tests/unit/parser.middy.test.ts index 4c876b3424..805c0fd98f 100644 --- a/packages/parser/tests/unit/parser.middy.test.ts +++ b/packages/parser/tests/unit/parser.middy.test.ts @@ -8,7 +8,7 @@ import { EventBridgeEnvelope, SqsEnvelope } from '../../src/envelopes'; import { parser } from '../../src/middleware/parser.js'; import { SqsSchema } from '../../src/schemas'; import type { EventBridgeEvent, ParsedResult, SqsEvent } from '../../src/types'; -import { TestEvents, TestSchema, getTestEvent } from './schema/utils'; +import { TestSchema, getTestEvent } from './schema/utils'; describe('Middleware: parser', () => { type TestEvent = z.infer;