@klarna/nest-lambda-microservice 0.1.0-beta.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 (92) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE +202 -0
  3. package/README.md +364 -0
  4. package/dist/client/index.d.ts +1 -0
  5. package/dist/client/index.js +17 -0
  6. package/dist/client/lambda-microservice.client.d.ts +21 -0
  7. package/dist/client/lambda-microservice.client.js +102 -0
  8. package/dist/ctx-host/index.d.ts +1 -0
  9. package/dist/ctx-host/index.js +17 -0
  10. package/dist/ctx-host/lambda.context.d.ts +10 -0
  11. package/dist/ctx-host/lambda.context.js +18 -0
  12. package/dist/decorators/index.d.ts +1 -0
  13. package/dist/decorators/index.js +17 -0
  14. package/dist/decorators/use-partial-pattern-match.d.ts +21 -0
  15. package/dist/decorators/use-partial-pattern-match.js +53 -0
  16. package/dist/errors/IncomingResponseError.d.ts +6 -0
  17. package/dist/errors/IncomingResponseError.js +25 -0
  18. package/dist/errors/NoConsumerError.d.ts +3 -0
  19. package/dist/errors/NoConsumerError.js +9 -0
  20. package/dist/errors/index.d.ts +2 -0
  21. package/dist/errors/index.js +18 -0
  22. package/dist/index.d.ts +8 -0
  23. package/dist/index.js +24 -0
  24. package/dist/interfaces/index.d.ts +4 -0
  25. package/dist/interfaces/index.js +20 -0
  26. package/dist/interfaces/lambda-microservice.config.d.ts +9 -0
  27. package/dist/interfaces/lambda-microservice.config.js +2 -0
  28. package/dist/interfaces/lambda-microservice.packet.d.ts +35 -0
  29. package/dist/interfaces/lambda-microservice.packet.js +2 -0
  30. package/dist/interfaces/request.builder.d.ts +4 -0
  31. package/dist/interfaces/request.builder.js +2 -0
  32. package/dist/interfaces/response.builder.d.ts +3 -0
  33. package/dist/interfaces/response.builder.js +2 -0
  34. package/dist/lambda/event-mapper.d.ts +7 -0
  35. package/dist/lambda/event-mapper.js +54 -0
  36. package/dist/lambda/index.d.ts +2 -0
  37. package/dist/lambda/index.js +18 -0
  38. package/dist/lambda/integrations/apigateway.d.ts +5 -0
  39. package/dist/lambda/integrations/apigateway.js +26 -0
  40. package/dist/lambda/integrations/dynamodb.d.ts +3 -0
  41. package/dist/lambda/integrations/dynamodb.js +16 -0
  42. package/dist/lambda/integrations/eventbridge.d.ts +10 -0
  43. package/dist/lambda/integrations/eventbridge.js +13 -0
  44. package/dist/lambda/integrations/index.d.ts +7 -0
  45. package/dist/lambda/integrations/index.js +23 -0
  46. package/dist/lambda/integrations/kinesis.d.ts +3 -0
  47. package/dist/lambda/integrations/kinesis.js +16 -0
  48. package/dist/lambda/integrations/s3.d.ts +3 -0
  49. package/dist/lambda/integrations/s3.js +16 -0
  50. package/dist/lambda/integrations/sns.d.ts +4 -0
  51. package/dist/lambda/integrations/sns.js +26 -0
  52. package/dist/lambda/integrations/sqs.d.ts +5 -0
  53. package/dist/lambda/integrations/sqs.js +38 -0
  54. package/dist/record-builders/api-gateway-request.builder.d.ts +17 -0
  55. package/dist/record-builders/api-gateway-request.builder.js +43 -0
  56. package/dist/record-builders/api-gateway-response.builder.d.ts +6 -0
  57. package/dist/record-builders/api-gateway-response.builder.js +23 -0
  58. package/dist/record-builders/custom-request.builder.d.ts +10 -0
  59. package/dist/record-builders/custom-request.builder.js +22 -0
  60. package/dist/record-builders/custom-response.builder.d.ts +6 -0
  61. package/dist/record-builders/custom-response.builder.js +27 -0
  62. package/dist/record-builders/event-bridge-request.builder.d.ts +16 -0
  63. package/dist/record-builders/event-bridge-request.builder.js +29 -0
  64. package/dist/record-builders/event-bridge-response.builder.d.ts +6 -0
  65. package/dist/record-builders/event-bridge-response.builder.js +23 -0
  66. package/dist/record-builders/index.d.ts +12 -0
  67. package/dist/record-builders/index.js +28 -0
  68. package/dist/record-builders/s3-request.builder.d.ts +15 -0
  69. package/dist/record-builders/s3-request.builder.js +30 -0
  70. package/dist/record-builders/s3-response.builder.d.ts +6 -0
  71. package/dist/record-builders/s3-response.builder.js +19 -0
  72. package/dist/record-builders/sns-request.builder.d.ts +16 -0
  73. package/dist/record-builders/sns-request.builder.js +51 -0
  74. package/dist/record-builders/sns-response.builder.d.ts +6 -0
  75. package/dist/record-builders/sns-response.builder.js +19 -0
  76. package/dist/record-builders/sqs-request.builder.d.ts +16 -0
  77. package/dist/record-builders/sqs-request.builder.js +57 -0
  78. package/dist/record-builders/sqs-response.builder.d.ts +11 -0
  79. package/dist/record-builders/sqs-response.builder.js +24 -0
  80. package/dist/server/__mocks__/index.d.ts +1 -0
  81. package/dist/server/__mocks__/index.js +17 -0
  82. package/dist/server/__mocks__/lambda-microservice.broker.d.ts +11 -0
  83. package/dist/server/__mocks__/lambda-microservice.broker.js +37 -0
  84. package/dist/server/index.d.ts +2 -0
  85. package/dist/server/index.js +18 -0
  86. package/dist/server/lambda-microservice.broker.d.ts +13 -0
  87. package/dist/server/lambda-microservice.broker.js +44 -0
  88. package/dist/server/lambda-microservice.server.d.ts +26 -0
  89. package/dist/server/lambda-microservice.server.js +144 -0
  90. package/dist/server/mocks.d.ts +1 -0
  91. package/dist/server/mocks.js +17 -0
  92. package/package.json +59 -0
@@ -0,0 +1,23 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./apigateway"), exports);
18
+ __exportStar(require("./dynamodb"), exports);
19
+ __exportStar(require("./eventbridge"), exports);
20
+ __exportStar(require("./kinesis"), exports);
21
+ __exportStar(require("./s3"), exports);
22
+ __exportStar(require("./sns"), exports);
23
+ __exportStar(require("./sqs"), exports);
@@ -0,0 +1,3 @@
1
+ import { KinesisStreamEvent, KinesisStreamRecord } from 'aws-lambda';
2
+ export declare const isKinesisRecord: (record: unknown) => record is KinesisStreamRecord;
3
+ export declare const isKinesisEvent: (event: unknown) => event is KinesisStreamEvent;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ // https://docs.aws.amazon.com/lambda/latest/dg/with-kinesis.html
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.isKinesisEvent = exports.isKinesisRecord = void 0;
5
+ const isKinesisRecord = (record) => {
6
+ return (record !== null && typeof record === 'object' && 'eventSource' in record && record?.eventSource === 'aws:kinesis');
7
+ };
8
+ exports.isKinesisRecord = isKinesisRecord;
9
+ const isKinesisEvent = (event) => {
10
+ return (event !== null &&
11
+ typeof event === 'object' &&
12
+ 'Records' in event &&
13
+ Array.isArray(event?.Records) &&
14
+ event.Records.every(exports.isKinesisRecord));
15
+ };
16
+ exports.isKinesisEvent = isKinesisEvent;
@@ -0,0 +1,3 @@
1
+ import { S3Event, S3EventRecord } from 'aws-lambda';
2
+ export declare const isS3Record: (record: unknown) => record is S3EventRecord;
3
+ export declare const isS3Event: (event: unknown) => event is S3Event;
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ // https://docs.aws.amazon.com/lambda/latest/dg/with-s3.html
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.isS3Event = exports.isS3Record = void 0;
5
+ const isS3Record = (record) => {
6
+ return record !== null && typeof record === 'object' && 'eventSource' in record && record?.eventSource === 'aws:s3';
7
+ };
8
+ exports.isS3Record = isS3Record;
9
+ const isS3Event = (event) => {
10
+ return (event !== null &&
11
+ typeof event === 'object' &&
12
+ 'Records' in event &&
13
+ Array.isArray(event?.Records) &&
14
+ event.Records.every(exports.isS3Record));
15
+ };
16
+ exports.isS3Event = isS3Event;
@@ -0,0 +1,4 @@
1
+ import { SNSEvent, SNSEventRecord, SNSMessage } from 'aws-lambda';
2
+ export declare const isSnsMessage: (payload: unknown) => payload is SNSMessage;
3
+ export declare const isSnsRecord: (record: unknown) => record is SNSEventRecord;
4
+ export declare const isSnsEvent: (event: unknown) => event is SNSEvent;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ // https://docs.aws.amazon.com/lambda/latest/dg/with-sns.html
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.isSnsEvent = exports.isSnsRecord = exports.isSnsMessage = void 0;
5
+ const isSnsMessage = (payload) => {
6
+ return (payload !== null &&
7
+ typeof payload === 'object' &&
8
+ 'Type' in payload &&
9
+ 'TopicArn' in payload &&
10
+ typeof payload.TopicArn === 'string' &&
11
+ payload?.Type === 'Notification' &&
12
+ payload?.TopicArn?.startsWith('arn:aws:sns'));
13
+ };
14
+ exports.isSnsMessage = isSnsMessage;
15
+ const isSnsRecord = (record) => {
16
+ return record !== null && typeof record === 'object' && 'EventSource' in record && record?.EventSource === 'aws:sns';
17
+ };
18
+ exports.isSnsRecord = isSnsRecord;
19
+ const isSnsEvent = (event) => {
20
+ return (event !== null &&
21
+ typeof event === 'object' &&
22
+ 'Records' in event &&
23
+ Array.isArray(event?.Records) &&
24
+ event.Records.every(exports.isSnsRecord));
25
+ };
26
+ exports.isSnsEvent = isSnsEvent;
@@ -0,0 +1,5 @@
1
+ import { SNSMessage, SQSEvent, SQSRecord } from 'aws-lambda';
2
+ export declare const isSqsRecord: (record: unknown) => record is SQSRecord;
3
+ export declare const isSqsEvent: (event: unknown) => event is SQSEvent;
4
+ export declare const tryUnwrapSnsMessageFromSqsRecord: (record: SQSRecord) => SNSMessage | never;
5
+ export declare const isSqsRecordWithEmbeddedSnsMessage: (record: unknown) => record is SQSRecord;
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ // https://docs.aws.amazon.com/lambda/latest/dg/with-sqs.html
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.isSqsRecordWithEmbeddedSnsMessage = exports.tryUnwrapSnsMessageFromSqsRecord = exports.isSqsEvent = exports.isSqsRecord = void 0;
5
+ const sns_1 = require("./sns");
6
+ const isSqsRecord = (record) => {
7
+ return typeof record === 'object' && record !== null && 'eventSource' in record && record?.eventSource === 'aws:sqs';
8
+ };
9
+ exports.isSqsRecord = isSqsRecord;
10
+ const isSqsEvent = (event) => {
11
+ return (event !== null &&
12
+ typeof event === 'object' &&
13
+ 'Records' in event &&
14
+ Array.isArray(event?.Records) &&
15
+ event.Records.every(exports.isSqsRecord));
16
+ };
17
+ exports.isSqsEvent = isSqsEvent;
18
+ const tryUnwrapSnsMessageFromSqsRecord = (record) => {
19
+ const parsedBody = JSON.parse(record.body);
20
+ if (!(0, sns_1.isSnsMessage)(parsedBody)) {
21
+ throw new Error('The SQS Record body is not a serialised SNS Message');
22
+ }
23
+ return parsedBody;
24
+ };
25
+ exports.tryUnwrapSnsMessageFromSqsRecord = tryUnwrapSnsMessageFromSqsRecord;
26
+ const isSqsRecordWithEmbeddedSnsMessage = (record) => {
27
+ if (!(0, exports.isSqsRecord)(record)) {
28
+ return false;
29
+ }
30
+ try {
31
+ (0, exports.tryUnwrapSnsMessageFromSqsRecord)(record);
32
+ return true;
33
+ }
34
+ catch (error) {
35
+ return false;
36
+ }
37
+ };
38
+ exports.isSqsRecordWithEmbeddedSnsMessage = isSqsRecordWithEmbeddedSnsMessage;
@@ -0,0 +1,17 @@
1
+ import { Context } from 'aws-lambda';
2
+ import { OutgoingApiGatewayRequest, RequestBuilder } from '../interfaces';
3
+ import { AnyAPIGatewayEvent } from '../lambda';
4
+ export interface ApiGatewayPattern {
5
+ httpMethod: string;
6
+ resource: string;
7
+ queryStringParameters: Record<string, unknown> | null;
8
+ pathParameters: Record<string, unknown> | null;
9
+ }
10
+ export declare class ApiGatewayRequestBuilder implements RequestBuilder {
11
+ protected readonly data: AnyAPIGatewayEvent;
12
+ protected readonly context: Context;
13
+ static buildPattern(data: AnyAPIGatewayEvent): ApiGatewayPattern;
14
+ protected pattern: ApiGatewayPattern;
15
+ constructor(data: AnyAPIGatewayEvent, context: Context);
16
+ build(): OutgoingApiGatewayRequest;
17
+ }
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ApiGatewayRequestBuilder = void 0;
4
+ const lambda_1 = require("../lambda");
5
+ class ApiGatewayRequestBuilder {
6
+ data;
7
+ context;
8
+ static buildPattern(data) {
9
+ if ((0, lambda_1.isApiGatewayEventV1)(data)) {
10
+ return {
11
+ httpMethod: data.httpMethod,
12
+ resource: data.resource,
13
+ queryStringParameters: data.queryStringParameters,
14
+ pathParameters: data.pathParameters,
15
+ };
16
+ }
17
+ if ((0, lambda_1.isApiGatewayEventV2)(data)) {
18
+ const [httpMethod, resource] = data.routeKey.split(' ');
19
+ return {
20
+ httpMethod: httpMethod,
21
+ resource: resource,
22
+ queryStringParameters: data.queryStringParameters ?? null,
23
+ pathParameters: data.pathParameters ?? null,
24
+ };
25
+ }
26
+ throw new Error('Unknown API Gateway event type');
27
+ }
28
+ pattern;
29
+ constructor(data, context) {
30
+ this.data = data;
31
+ this.context = context;
32
+ this.pattern = ApiGatewayRequestBuilder.buildPattern(this.data);
33
+ }
34
+ build() {
35
+ return {
36
+ id: this.data.requestContext.requestId,
37
+ pattern: this.pattern,
38
+ data: this.data,
39
+ context: this.context,
40
+ };
41
+ }
42
+ }
43
+ exports.ApiGatewayRequestBuilder = ApiGatewayRequestBuilder;
@@ -0,0 +1,6 @@
1
+ import { ResponseBuilder, ResponseTuple } from '../interfaces';
2
+ export declare class ApiGatewayResponseBuilder implements ResponseBuilder {
3
+ protected readonly responseTuples: ResponseTuple[];
4
+ constructor(responseTuples: ResponseTuple[]);
5
+ build(): unknown;
6
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ApiGatewayResponseBuilder = void 0;
4
+ const errors_1 = require("../errors");
5
+ class ApiGatewayResponseBuilder {
6
+ responseTuples;
7
+ constructor(responseTuples) {
8
+ this.responseTuples = responseTuples;
9
+ }
10
+ build() {
11
+ for (const [_request, response] of this.responseTuples) {
12
+ if (response instanceof errors_1.IncomingResponseError) {
13
+ throw response.cause;
14
+ }
15
+ }
16
+ if (this.responseTuples.length > 1) {
17
+ return this.responseTuples.map((tuple) => tuple[1]);
18
+ }
19
+ const tuple = this.responseTuples[0];
20
+ return tuple[1];
21
+ }
22
+ }
23
+ exports.ApiGatewayResponseBuilder = ApiGatewayResponseBuilder;
@@ -0,0 +1,10 @@
1
+ import { Context } from 'aws-lambda';
2
+ import { OutgoingCustomRequest, RequestBuilder } from '../interfaces';
3
+ export type CustomRecordPattern = '*';
4
+ export declare class CustomRequestBuilder implements RequestBuilder {
5
+ protected readonly data: unknown;
6
+ protected readonly context: Context;
7
+ protected pattern: CustomRecordPattern;
8
+ constructor(data: unknown, context: Context);
9
+ build(): OutgoingCustomRequest;
10
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CustomRequestBuilder = void 0;
4
+ const uuid_1 = require("uuid");
5
+ class CustomRequestBuilder {
6
+ data;
7
+ context;
8
+ pattern = '*';
9
+ constructor(data, context) {
10
+ this.data = data;
11
+ this.context = context;
12
+ }
13
+ build() {
14
+ return {
15
+ id: (0, uuid_1.v4)(),
16
+ pattern: this.pattern,
17
+ data: this.data,
18
+ context: this.context,
19
+ };
20
+ }
21
+ }
22
+ exports.CustomRequestBuilder = CustomRequestBuilder;
@@ -0,0 +1,6 @@
1
+ import { ResponseBuilder, ResponseTuple } from '../interfaces';
2
+ export declare class CustomResponseBuilder implements ResponseBuilder {
3
+ protected readonly responseTuples: ResponseTuple[];
4
+ constructor(responseTuples: ResponseTuple[]);
5
+ build(): unknown;
6
+ }
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CustomResponseBuilder = void 0;
4
+ const errors_1 = require("../errors");
5
+ class CustomResponseBuilder {
6
+ responseTuples;
7
+ constructor(responseTuples) {
8
+ this.responseTuples = responseTuples;
9
+ }
10
+ build() {
11
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
12
+ for (const [_request, response] of this.responseTuples) {
13
+ if (response instanceof errors_1.IncomingResponseError) {
14
+ throw response.cause;
15
+ }
16
+ }
17
+ if (!this.responseTuples.length) {
18
+ return undefined;
19
+ }
20
+ if (this.responseTuples.length > 1) {
21
+ return this.responseTuples.map((tuple) => tuple[1]);
22
+ }
23
+ const tuple = this.responseTuples[0];
24
+ return tuple[1];
25
+ }
26
+ }
27
+ exports.CustomResponseBuilder = CustomResponseBuilder;
@@ -0,0 +1,16 @@
1
+ import { Context } from 'aws-lambda';
2
+ import { AnyEventBridgeEvent, JSONValue } from '../lambda';
3
+ import { OutgoingEventBridgeRequest, RequestBuilder } from '../interfaces';
4
+ export interface EventBridgePattern {
5
+ source: string;
6
+ detailType: string;
7
+ detail: JSONValue;
8
+ }
9
+ export declare class EventBridgeRequestBuilder implements RequestBuilder {
10
+ protected readonly data: AnyEventBridgeEvent;
11
+ protected readonly context: Context;
12
+ static buildPattern(data: AnyEventBridgeEvent): EventBridgePattern;
13
+ protected pattern: EventBridgePattern;
14
+ constructor(data: AnyEventBridgeEvent, context: Context);
15
+ build(): OutgoingEventBridgeRequest;
16
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EventBridgeRequestBuilder = void 0;
4
+ class EventBridgeRequestBuilder {
5
+ data;
6
+ context;
7
+ static buildPattern(data) {
8
+ return {
9
+ source: data.source,
10
+ detailType: data['detail-type'],
11
+ detail: data.detail,
12
+ };
13
+ }
14
+ pattern;
15
+ constructor(data, context) {
16
+ this.data = data;
17
+ this.context = context;
18
+ this.pattern = EventBridgeRequestBuilder.buildPattern(this.data);
19
+ }
20
+ build() {
21
+ return {
22
+ id: this.data.id,
23
+ pattern: this.pattern,
24
+ data: this.data,
25
+ context: this.context,
26
+ };
27
+ }
28
+ }
29
+ exports.EventBridgeRequestBuilder = EventBridgeRequestBuilder;
@@ -0,0 +1,6 @@
1
+ import { ResponseBuilder, ResponseTuple } from '../interfaces';
2
+ export declare class EventBridgeResponseBuilder implements ResponseBuilder {
3
+ protected readonly responseTuples: ResponseTuple[];
4
+ constructor(responseTuples: ResponseTuple[]);
5
+ build(): unknown;
6
+ }
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EventBridgeResponseBuilder = void 0;
4
+ const errors_1 = require("../errors");
5
+ class EventBridgeResponseBuilder {
6
+ responseTuples;
7
+ constructor(responseTuples) {
8
+ this.responseTuples = responseTuples;
9
+ }
10
+ build() {
11
+ for (const [_request, response] of this.responseTuples) {
12
+ if (response instanceof errors_1.IncomingResponseError) {
13
+ throw response.cause;
14
+ }
15
+ }
16
+ if (this.responseTuples.length > 1) {
17
+ return this.responseTuples.map((tuple) => tuple[1]);
18
+ }
19
+ const tuple = this.responseTuples[0];
20
+ return tuple[1];
21
+ }
22
+ }
23
+ exports.EventBridgeResponseBuilder = EventBridgeResponseBuilder;
@@ -0,0 +1,12 @@
1
+ export * from './api-gateway-request.builder';
2
+ export * from './api-gateway-response.builder';
3
+ export * from './custom-request.builder';
4
+ export * from './custom-response.builder';
5
+ export * from './event-bridge-request.builder';
6
+ export * from './event-bridge-response.builder';
7
+ export * from './s3-request.builder';
8
+ export * from './s3-response.builder';
9
+ export * from './sns-request.builder';
10
+ export * from './sns-response.builder';
11
+ export * from './sqs-request.builder';
12
+ export * from './sqs-response.builder';
@@ -0,0 +1,28 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./api-gateway-request.builder"), exports);
18
+ __exportStar(require("./api-gateway-response.builder"), exports);
19
+ __exportStar(require("./custom-request.builder"), exports);
20
+ __exportStar(require("./custom-response.builder"), exports);
21
+ __exportStar(require("./event-bridge-request.builder"), exports);
22
+ __exportStar(require("./event-bridge-response.builder"), exports);
23
+ __exportStar(require("./s3-request.builder"), exports);
24
+ __exportStar(require("./s3-response.builder"), exports);
25
+ __exportStar(require("./sns-request.builder"), exports);
26
+ __exportStar(require("./sns-response.builder"), exports);
27
+ __exportStar(require("./sqs-request.builder"), exports);
28
+ __exportStar(require("./sqs-response.builder"), exports);
@@ -0,0 +1,15 @@
1
+ import { Context, S3EventRecord } from 'aws-lambda';
2
+ import { OutgoingS3Request, RequestBuilder } from '../interfaces';
3
+ export interface S3RecordPattern {
4
+ eventName: string;
5
+ bucketName: string;
6
+ objectKey: string;
7
+ }
8
+ export declare class S3RequestBuilder implements RequestBuilder {
9
+ protected readonly data: S3EventRecord;
10
+ protected readonly context: Context;
11
+ static buildPattern(data: S3EventRecord): S3RecordPattern;
12
+ protected pattern: S3RecordPattern;
13
+ constructor(data: S3EventRecord, context: Context);
14
+ build(): OutgoingS3Request;
15
+ }
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.S3RequestBuilder = void 0;
4
+ const uuid_1 = require("uuid");
5
+ class S3RequestBuilder {
6
+ data;
7
+ context;
8
+ static buildPattern(data) {
9
+ return {
10
+ eventName: data.eventName,
11
+ bucketName: data.s3.bucket.name,
12
+ objectKey: data.s3.object.key,
13
+ };
14
+ }
15
+ pattern;
16
+ constructor(data, context) {
17
+ this.data = data;
18
+ this.context = context;
19
+ this.pattern = S3RequestBuilder.buildPattern(this.data);
20
+ }
21
+ build() {
22
+ return {
23
+ id: (0, uuid_1.v4)(),
24
+ pattern: this.pattern,
25
+ data: this.data,
26
+ context: this.context,
27
+ };
28
+ }
29
+ }
30
+ exports.S3RequestBuilder = S3RequestBuilder;
@@ -0,0 +1,6 @@
1
+ import { ResponseBuilder, ResponseTuple } from '../interfaces';
2
+ export declare class S3ResponseBuilder implements ResponseBuilder {
3
+ protected readonly responseTuples: ResponseTuple[];
4
+ constructor(responseTuples: ResponseTuple[]);
5
+ build(): unknown[];
6
+ }
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.S3ResponseBuilder = void 0;
4
+ const errors_1 = require("../errors");
5
+ class S3ResponseBuilder {
6
+ responseTuples;
7
+ constructor(responseTuples) {
8
+ this.responseTuples = responseTuples;
9
+ }
10
+ build() {
11
+ for (const [_request, response] of this.responseTuples) {
12
+ if (response instanceof errors_1.IncomingResponseError) {
13
+ throw response.cause;
14
+ }
15
+ }
16
+ return this.responseTuples.map(([_request, response]) => response);
17
+ }
18
+ }
19
+ exports.S3ResponseBuilder = S3ResponseBuilder;
@@ -0,0 +1,16 @@
1
+ import { Context, SNSMessage, SNSMessageAttribute } from 'aws-lambda';
2
+ import { SNSEventRecord } from 'aws-lambda/trigger/sns';
3
+ import { OutgoingSnsRequest, RequestBuilder } from '../interfaces';
4
+ export interface SnsRecordPattern {
5
+ [key: string]: string | number;
6
+ }
7
+ export declare class SnsRequestBuilder implements RequestBuilder {
8
+ protected readonly data: SNSEventRecord;
9
+ protected readonly context: Context;
10
+ static buildPattern(data: SNSEventRecord): SnsRecordPattern;
11
+ static buildSnsMessagePattern(data: SNSMessage): SnsRecordPattern;
12
+ static mapSnsMessageAttributes(messageAttribute: SNSMessageAttribute): string | number;
13
+ protected pattern: SnsRecordPattern;
14
+ constructor(data: SNSEventRecord, context: Context);
15
+ build(): OutgoingSnsRequest;
16
+ }
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SnsRequestBuilder = void 0;
4
+ class SnsRequestBuilder {
5
+ data;
6
+ context;
7
+ static buildPattern(data) {
8
+ return SnsRequestBuilder.buildSnsMessagePattern(data.Sns);
9
+ }
10
+ static buildSnsMessagePattern(data) {
11
+ const pattern = {};
12
+ const messageAttrs = data.MessageAttributes;
13
+ return Reflect.ownKeys(messageAttrs).reduce((pattern, key) => {
14
+ Reflect.set(pattern, key, SnsRequestBuilder.mapSnsMessageAttributes(Reflect.get(messageAttrs, key)));
15
+ return pattern;
16
+ }, pattern);
17
+ }
18
+ static mapSnsMessageAttributes(messageAttribute) {
19
+ switch (messageAttribute.Type) {
20
+ case 'String':
21
+ try {
22
+ return messageAttribute.Value ? JSON.parse(messageAttribute.Value) : '';
23
+ }
24
+ catch (_error) {
25
+ return messageAttribute.Value ?? '';
26
+ }
27
+ case 'String.Array':
28
+ return messageAttribute.Value ? JSON.parse(messageAttribute.Value) : [];
29
+ case 'Number':
30
+ return messageAttribute.Value ? JSON.parse(messageAttribute.Value) : 0;
31
+ case 'Binary':
32
+ default:
33
+ throw new Error('Attribute type not implemented');
34
+ }
35
+ }
36
+ pattern = {};
37
+ constructor(data, context) {
38
+ this.data = data;
39
+ this.context = context;
40
+ this.pattern = SnsRequestBuilder.buildPattern(this.data);
41
+ }
42
+ build() {
43
+ return {
44
+ id: this.data.Sns.MessageId,
45
+ pattern: this.pattern,
46
+ data: this.data.Sns,
47
+ context: this.context,
48
+ };
49
+ }
50
+ }
51
+ exports.SnsRequestBuilder = SnsRequestBuilder;
@@ -0,0 +1,6 @@
1
+ import { ResponseBuilder, ResponseTuple } from '../interfaces';
2
+ export declare class SnsResponseBuilder implements ResponseBuilder {
3
+ protected readonly responseTuples: ResponseTuple[];
4
+ constructor(responseTuples: ResponseTuple[]);
5
+ build(): unknown[];
6
+ }
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SnsResponseBuilder = void 0;
4
+ const errors_1 = require("../errors");
5
+ class SnsResponseBuilder {
6
+ responseTuples;
7
+ constructor(responseTuples) {
8
+ this.responseTuples = responseTuples;
9
+ }
10
+ build() {
11
+ for (const [_request, response] of this.responseTuples) {
12
+ if (response instanceof errors_1.IncomingResponseError) {
13
+ throw response.cause;
14
+ }
15
+ }
16
+ return this.responseTuples.map(([_request, response]) => response);
17
+ }
18
+ }
19
+ exports.SnsResponseBuilder = SnsResponseBuilder;
@@ -0,0 +1,16 @@
1
+ import { Context, SQSRecord } from 'aws-lambda';
2
+ import { SQSMessageAttribute } from 'aws-lambda/trigger/sqs';
3
+ import { OutgoingSqsRequest, RequestBuilder } from '../interfaces';
4
+ export interface SqsRecordPattern {
5
+ [key: string]: string | number;
6
+ }
7
+ export declare class SqsRequestBuilder implements RequestBuilder {
8
+ protected readonly data: SQSRecord;
9
+ protected readonly context: Context;
10
+ static buildPattern(data: SQSRecord): SqsRecordPattern;
11
+ static buildSqsMessagePattern(data: SQSRecord): SqsRecordPattern;
12
+ static mapSqsMessageAttributes(messageAttribute: SQSMessageAttribute): string | number;
13
+ protected pattern: SqsRecordPattern;
14
+ constructor(data: SQSRecord, context: Context);
15
+ build(): OutgoingSqsRequest;
16
+ }