@trunkrs/common 1.12.5 → 4.0.1
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.
- package/package.json +33 -6
- package/providers/email.d.ts +1 -0
- package/providers/email.js +6 -5
- package/providers/email.js.map +1 -1
- package/services/aws/LambdaClient/LambdaInvocationFailedError.d.ts +1 -1
- package/services/aws/LambdaClient/LambdaInvocationFailedError.js +3 -3
- package/services/aws/LambdaClient/LambdaInvocationFailedError.js.map +1 -1
- package/services/aws/LambdaClient/index.d.ts +3 -2
- package/services/aws/LambdaClient/index.js +6 -4
- package/services/aws/LambdaClient/index.js.map +1 -1
- package/services/aws/SecretsClient.js +7 -13
- package/services/aws/SecretsClient.js.map +1 -1
- package/services/aws/dynamodb/BaseDynamoDataStorage.d.ts +6 -4
- package/services/aws/dynamodb/BaseDynamoDataStorage.js +55 -42
- package/services/aws/dynamodb/BaseDynamoDataStorage.js.map +1 -1
- package/services/aws/dynamodb/DynamoDataStorage.d.ts +8 -6
- package/services/aws/dynamodb/DynamoDataStorage.js +50 -40
- package/services/aws/dynamodb/DynamoDataStorage.js.map +1 -1
- package/services/aws/dynamodb/DynamoIndexDataStorage.d.ts +5 -2
- package/services/aws/dynamodb/DynamoIndexDataStorage.js +27 -17
- package/services/aws/dynamodb/DynamoIndexDataStorage.js.map +1 -1
- package/services/aws/dynamodb/interfaces/QueryableDataStorage.d.ts +5 -1
- package/services/aws/dynamodb/types/DeleteRequest.d.ts +4 -0
- package/services/aws/dynamodb/types/DeleteRequest.js +3 -0
- package/services/aws/dynamodb/types/DeleteRequest.js.map +1 -0
- package/services/aws/dynamodb/types/PutRequest.d.ts +4 -0
- package/services/aws/dynamodb/types/PutRequest.js +3 -0
- package/services/aws/dynamodb/types/PutRequest.js.map +1 -0
- package/services/aws/dynamodb/types/WriteRequest.d.ts +7 -0
- package/services/aws/dynamodb/types/WriteRequest.js +3 -0
- package/services/aws/dynamodb/types/WriteRequest.js.map +1 -0
- package/services/aws/dynamodb/utils/query/QueryBuilder.d.ts +3 -3
- package/services/aws/dynamodb/utils/query/QueryBuilder.js.map +1 -1
- package/services/aws/dynamodb/utils/query/QueryParameters.d.ts +0 -3
- package/services/email/SESTemplateClient.d.ts +2 -2
- package/services/email/SESTemplateClient.js +5 -3
- package/services/email/SESTemplateClient.js.map +1 -1
- package/services/email/__tests__/SESTemplateClient.spec.js +15 -13
- package/services/email/__tests__/SESTemplateClient.spec.js.map +1 -1
- package/services/queue/EventBridgeClient.js +8 -14
- package/services/queue/EventBridgeClient.js.map +1 -1
- package/services/queue/KinesisClient.d.ts +2 -2
- package/services/queue/KinesisClient.js +9 -10
- package/services/queue/KinesisClient.js.map +1 -1
- package/services/queue/SNSQueueClient.js +8 -20
- package/services/queue/SNSQueueClient.js.map +1 -1
- package/services/queue/SQSQueueClient.js +7 -11
- package/services/queue/SQSQueueClient.js.map +1 -1
- package/services/state-machine/StepFunctionsClient.js +5 -10
- package/services/state-machine/StepFunctionsClient.js.map +1 -1
- package/utils/caching/S3Cache.js +26 -31
- package/utils/caching/S3Cache.js.map +1 -1
- package/utils/caching/SecretCache.js +16 -22
- package/utils/caching/SecretCache.js.map +1 -1
- package/utils/handlers/HttpHandlerBuilder/index.js +2 -3
- package/utils/handlers/HttpHandlerBuilder/index.js.map +1 -1
- package/utils/handlers/LambdaHandlerBuilder/index.js +0 -2
- package/utils/handlers/LambdaHandlerBuilder/index.js.map +1 -1
- package/utils/handlers/QueueHandlerBuilder/extractors/DynamoStreamExtractor.d.ts +2 -1
- package/utils/handlers/QueueHandlerBuilder/extractors/DynamoStreamExtractor.js +2 -2
- package/utils/handlers/QueueHandlerBuilder/extractors/DynamoStreamExtractor.js.map +1 -1
- package/utils/handlers/QueueHandlerBuilder/index.js +0 -2
- package/utils/handlers/QueueHandlerBuilder/index.js.map +1 -1
- package/utils/getAWS.d.ts +0 -3
- package/utils/getAWS.js +0 -15
- package/utils/getAWS.js.map +0 -1
- package/utils/tracing.d.ts +0 -15
- package/utils/tracing.js +0 -122
- package/utils/tracing.js.map +0 -1
package/package.json
CHANGED
|
@@ -1,31 +1,45 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@trunkrs/common",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.1",
|
|
4
4
|
"description": "Common standards library for development in Trunkrs",
|
|
5
5
|
"types": "./index.d.ts",
|
|
6
6
|
"repository": "https://github.com/Trunkrs/common.git",
|
|
7
7
|
"author": "Leonard Breitkopf <leonard@trunkrs.nl>",
|
|
8
8
|
"license": "MIT",
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"aws-xray-sdk": "^3.3.4",
|
|
11
10
|
"axios": "^0.22.0",
|
|
12
11
|
"qs": "^6.10.1",
|
|
13
12
|
"deepmerge": "^4.2.2"
|
|
14
13
|
},
|
|
15
14
|
"devDependencies": {
|
|
16
|
-
"@
|
|
15
|
+
"@aws-sdk/client-dynamodb": "^3.421.0",
|
|
16
|
+
"@aws-sdk/client-eventbridge": "^3.421.0",
|
|
17
|
+
"@aws-sdk/client-kinesis": "^3.421.0",
|
|
18
|
+
"@aws-sdk/client-lambda": "^3.421.0",
|
|
19
|
+
"@aws-sdk/client-s3": "^3.421.0",
|
|
20
|
+
"@aws-sdk/client-secrets-manager": "^3.423.0",
|
|
21
|
+
"@aws-sdk/client-ses": "^3.421.0",
|
|
22
|
+
"@aws-sdk/client-sfn": "^3.423.0",
|
|
23
|
+
"@aws-sdk/client-sns": "^3.421.0",
|
|
24
|
+
"@aws-sdk/client-sqs": "^3.421.0",
|
|
25
|
+
"@aws-sdk/client-ssm": "^3.421.0",
|
|
26
|
+
"@aws-sdk/lib-dynamodb": "^3.421.0",
|
|
27
|
+
"@aws-sdk/util-dynamodb": "^3.421.0",
|
|
28
|
+
"@types/aws-lambda": "^8.10.122",
|
|
17
29
|
"@types/faker": "^5.5.8",
|
|
18
30
|
"@types/jest": "^27.0.1",
|
|
19
31
|
"@types/joi": "^17.2.3",
|
|
20
32
|
"@types/jsonwebtoken": "^8.5.8",
|
|
21
33
|
"@types/node": "^14.11.2",
|
|
22
|
-
"@types/nodemailer": "^6.4.
|
|
34
|
+
"@types/nodemailer": "^6.4.11",
|
|
23
35
|
"@types/qs": "^6.9.7",
|
|
24
36
|
"@types/typescript": "^2.0.0",
|
|
25
37
|
"@types/uuid": "^8.3.1",
|
|
26
38
|
"@typescript-eslint/eslint-plugin": "^4.0.1",
|
|
27
39
|
"@typescript-eslint/parser": "^4.0.1",
|
|
28
40
|
"aws-lambda": "^1.0.6",
|
|
41
|
+
"aws-sdk-client-mock": "^3.0.0",
|
|
42
|
+
"aws-xray-sdk-core": "^3.5.2",
|
|
29
43
|
"concurrently": "^6.2.1",
|
|
30
44
|
"eslint": "^7.10.0",
|
|
31
45
|
"eslint-config-airbnb-base-typescript-prettier": "^3.1.1",
|
|
@@ -51,7 +65,6 @@
|
|
|
51
65
|
"@typescript-eslint/eslint-plugin": ">=4 || <5",
|
|
52
66
|
"@typescript-eslint/parser": ">=4 || <5",
|
|
53
67
|
"redis": ">=4 || <5",
|
|
54
|
-
"aws-sdk": ">2.1000.0 || <3",
|
|
55
68
|
"date-fns": ">=2 || <3",
|
|
56
69
|
"eslint": ">=7.2.0",
|
|
57
70
|
"eslint-config-airbnb-base-typescript-prettier": ">=3.1 || <4",
|
|
@@ -60,6 +73,20 @@
|
|
|
60
73
|
"jsonwebtoken": "8",
|
|
61
74
|
"uuid": "8",
|
|
62
75
|
"prettier": ">=2",
|
|
63
|
-
"ts-jest": ">=21"
|
|
76
|
+
"ts-jest": ">=21",
|
|
77
|
+
"@aws-sdk/client-dynamodb": "^3.421.0 || < 4",
|
|
78
|
+
"@aws-sdk/client-eventbridge": "^3.421.0 || < 4",
|
|
79
|
+
"@aws-sdk/client-kinesis": "^3.421.0 || < 4",
|
|
80
|
+
"@aws-sdk/client-lambda": "^3.421.0 || < 4",
|
|
81
|
+
"@aws-sdk/client-s3": "^3.421.0 || < 4",
|
|
82
|
+
"@aws-sdk/client-secrets-manager": "^3.423.0 || < 4",
|
|
83
|
+
"@aws-sdk/client-ses": "^3.421.0 || <4",
|
|
84
|
+
"@aws-sdk/client-sfn": "^3.423.0 || <4",
|
|
85
|
+
"@aws-sdk/client-sns": "^3.421.0 || <4",
|
|
86
|
+
"@aws-sdk/client-sqs": "^3.421.0 || <4",
|
|
87
|
+
"@aws-sdk/client-ssm": "^3.421.0 || <4",
|
|
88
|
+
"@aws-sdk/lib-dynamodb": "^3.421.0 || <4",
|
|
89
|
+
"@aws-sdk/util-dynamodb": "^3.421.0 || <4",
|
|
90
|
+
"aws-xray-sdk-core": "^3.5.2 || <4"
|
|
64
91
|
}
|
|
65
92
|
}
|
package/providers/email.d.ts
CHANGED
|
@@ -13,5 +13,6 @@ export interface ConfigureEmailClientsRequest {
|
|
|
13
13
|
}
|
|
14
14
|
export declare const NodemailerClient: symbol;
|
|
15
15
|
export declare const SesNodemailerClient: symbol;
|
|
16
|
+
export declare const SESClientSymbol: symbol;
|
|
16
17
|
export declare const TemplateFileCache: symbol;
|
|
17
18
|
export declare const configureEmailClients: (request: ConfigureEmailClientsRequest) => ServiceProvider;
|
package/providers/email.js
CHANGED
|
@@ -22,9 +22,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
22
22
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
23
|
};
|
|
24
24
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
-
exports.configureEmailClients = exports.TemplateFileCache = exports.SesNodemailerClient = exports.NodemailerClient = void 0;
|
|
25
|
+
exports.configureEmailClients = exports.TemplateFileCache = exports.SESClientSymbol = exports.SesNodemailerClient = exports.NodemailerClient = void 0;
|
|
26
26
|
const nodemailer_1 = require("nodemailer");
|
|
27
|
-
const
|
|
27
|
+
const client_ses_1 = require("@aws-sdk/client-ses");
|
|
28
28
|
const service_provider_1 = __importStar(require("../utils/service-provider"));
|
|
29
29
|
const aws_1 = __importDefault(require("./aws"));
|
|
30
30
|
const email_1 = require("../services/email");
|
|
@@ -32,17 +32,18 @@ const caching_1 = require("../utils/caching");
|
|
|
32
32
|
const utils_1 = __importStar(require("./utils"));
|
|
33
33
|
exports.NodemailerClient = service_provider_1.default.createSymbol('NodemailerClient');
|
|
34
34
|
exports.SesNodemailerClient = service_provider_1.default.createSymbol('SesNodemailerClient');
|
|
35
|
+
exports.SESClientSymbol = service_provider_1.default.createSymbol('SESClient');
|
|
35
36
|
exports.TemplateFileCache = service_provider_1.default.createSymbol('TemplateCache');
|
|
36
37
|
const configureEmailClients = (request) => {
|
|
37
38
|
const serviceProvider = new service_provider_1.default();
|
|
38
39
|
serviceProvider.register(exports.NodemailerClient, service_provider_1.Lifecycle.Singleton, () => (0, nodemailer_1.createTransport)({
|
|
39
|
-
SES: aws_1.default.provide(
|
|
40
|
+
SES: aws_1.default.provide(exports.SESClientSymbol),
|
|
40
41
|
}));
|
|
41
42
|
serviceProvider.register(exports.TemplateFileCache, service_provider_1.Lifecycle.Singleton, () => new caching_1.FileCache(utils_1.default.provide(utils_1.Serializer), 7200000, null, request.templateCacheMountPath));
|
|
42
|
-
aws_1.default.register(
|
|
43
|
+
aws_1.default.register(exports.SESClientSymbol, service_provider_1.Lifecycle.Singleton, () => new client_ses_1.SESClient({
|
|
43
44
|
region: request.sesRegion,
|
|
44
45
|
}));
|
|
45
|
-
serviceProvider.register(email_1.SESTemplateClient, service_provider_1.Lifecycle.Singleton, () => new email_1.SESTemplateClient(aws_1.default.provide(
|
|
46
|
+
serviceProvider.register(email_1.SESTemplateClient, service_provider_1.Lifecycle.Singleton, () => new email_1.SESTemplateClient(aws_1.default.provide(exports.SESClientSymbol), serviceProvider.provide(exports.TemplateFileCache)));
|
|
46
47
|
serviceProvider.register(exports.SesNodemailerClient, service_provider_1.Lifecycle.Singleton, () => new email_1.NodemailerEmailClient({
|
|
47
48
|
mailer: serviceProvider.provide(exports.NodemailerClient),
|
|
48
49
|
templateClient: serviceProvider.provide(email_1.SESTemplateClient),
|
package/providers/email.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.js","sourceRoot":"","sources":["../../providers/email.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA4C;AAE5C,
|
|
1
|
+
{"version":3,"file":"email.js","sourceRoot":"","sources":["../../providers/email.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA4C;AAE5C,oDAA+C;AAE/C,8EAAsE;AAEtE,gDAA+B;AAC/B,6CAI0B;AAC1B,8CAAmD;AACnD,iDAAmD;AActC,QAAA,gBAAgB,GAC3B,0BAAe,CAAC,YAAY,CAAO,kBAAkB,CAAC,CAAA;AAE3C,QAAA,mBAAmB,GAAG,0BAAe,CAAC,YAAY,CAC7D,qBAAqB,CACtB,CAAA;AAEY,QAAA,eAAe,GAC1B,0BAAe,CAAC,YAAY,CAAY,WAAW,CAAC,CAAA;AACzC,QAAA,iBAAiB,GAC5B,0BAAe,CAAC,YAAY,CAAQ,eAAe,CAAC,CAAA;AAE/C,MAAM,qBAAqB,GAAG,CACnC,OAAqC,EACpB,EAAE;IACnB,MAAM,eAAe,GAAG,IAAI,0BAAe,EAAE,CAAA;IAE7C,eAAe,CAAC,QAAQ,CAAC,wBAAgB,EAAE,4BAAS,CAAC,SAAS,EAAE,GAAG,EAAE,CACnE,IAAA,4BAAe,EAAC;QACd,GAAG,EAAE,aAAW,CAAC,OAAO,CAAC,uBAAe,CAAC;KAC1C,CAAC,CACH,CAAA;IAED,eAAe,CAAC,QAAQ,CACtB,yBAAiB,EACjB,4BAAS,CAAC,SAAS,EACnB,GAAG,EAAE,CACH,IAAI,mBAAS,CACX,eAAa,CAAC,OAAO,CAAC,kBAAU,CAAC,EACjC,OAAO,EACP,IAAI,EACJ,OAAO,CAAC,sBAAsB,CAC/B,CACJ,CAAA;IAED,aAAW,CAAC,QAAQ,CAClB,uBAAe,EACf,4BAAS,CAAC,SAAS,EACnB,GAAG,EAAE,CACH,IAAI,sBAAS,CAAC;QACZ,MAAM,EAAE,OAAO,CAAC,SAAS;KAC1B,CAAC,CACL,CAAA;IAED,eAAe,CAAC,QAAQ,CACtB,yBAAiB,EACjB,4BAAS,CAAC,SAAS,EACnB,GAAG,EAAE,CACH,IAAI,yBAAiB,CACnB,aAAW,CAAC,OAAO,CAAC,uBAAe,CAAC,EACpC,eAAe,CAAC,OAAO,CAAC,yBAAiB,CAAC,CAC3C,CACJ,CAAA;IAED,eAAe,CAAC,QAAQ,CACtB,2BAAmB,EACnB,4BAAS,CAAC,SAAS,EACnB,GAAG,EAAE,CACH,IAAI,6BAAqB,CAAC;QACxB,MAAM,EAAE,eAAe,CAAC,OAAO,CAAC,wBAAgB,CAAC;QACjD,cAAc,EAAE,eAAe,CAAC,OAAO,CAAC,yBAAiB,CAAC;QAC1D,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,IAAI;QACxC,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,IAAI;QAC9C,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,wBAAwB,EAAE,OAAO,CAAC,wBAAwB;KAC3D,CAAC,CACL,CAAA;IAED,OAAO,eAAe,CAAA;AACxB,CAAC,CAAA;AA3DY,QAAA,qBAAqB,yBA2DjC"}
|
|
@@ -5,10 +5,10 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const ErrorBase_1 = __importDefault(require("../../../models/errors/ErrorBase"));
|
|
7
7
|
class LambdaInvocationFailedError extends ErrorBase_1.default {
|
|
8
|
-
constructor(error) {
|
|
8
|
+
constructor(logs, error) {
|
|
9
9
|
super();
|
|
10
|
-
this.message =
|
|
11
|
-
|
|
10
|
+
this.message = `Lambda Invocation Failed with error: ${JSON.stringify(error, null, 2)}. Last 4KB of executed lambda logs: ${logs}
|
|
11
|
+
`;
|
|
12
12
|
Error.captureStackTrace(this);
|
|
13
13
|
}
|
|
14
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LambdaInvocationFailedError.js","sourceRoot":"","sources":["../../../../services/aws/LambdaClient/LambdaInvocationFailedError.ts"],"names":[],"mappings":";;;;;AAAA,iFAAwD;AAExD,MAAM,2BAA4B,SAAQ,mBAAS;IACjD,YAAmB,KAAW;
|
|
1
|
+
{"version":3,"file":"LambdaInvocationFailedError.js","sourceRoot":"","sources":["../../../../services/aws/LambdaClient/LambdaInvocationFailedError.ts"],"names":[],"mappings":";;;;;AAAA,iFAAwD;AAExD,MAAM,2BAA4B,SAAQ,mBAAS;IACjD,YAAmB,IAAY,EAAE,KAAW;QAC1C,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,OAAO,GAAG,wCAAwC,IAAI,CAAC,SAAS,CACnE,KAAK,EACL,IAAI,EACJ,CAAC,CACF,uCAAuC,IAAI;KAC3C,CAAA;QAED,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;IAC/B,CAAC;CACF;AAED,kBAAe,2BAA2B,CAAA"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
+
import { LambdaClient as AWSLambdaClient } from '@aws-sdk/client-lambda';
|
|
1
2
|
import { Serializer } from '../../../utils/serialization';
|
|
2
3
|
declare class LambdaClient<TResponse = unknown, TInvokeArgs = unknown> {
|
|
3
4
|
protected readonly functionArn: string;
|
|
4
5
|
protected readonly serializer: Serializer;
|
|
5
|
-
protected readonly lambdaInstance:
|
|
6
|
-
constructor(functionArn: string, serializer: Serializer, lambdaInstance:
|
|
6
|
+
protected readonly lambdaInstance: AWSLambdaClient;
|
|
7
|
+
constructor(functionArn: string, serializer: Serializer, lambdaInstance: AWSLambdaClient);
|
|
7
8
|
invokeLambda(args?: TInvokeArgs): Promise<TResponse | void>;
|
|
8
9
|
}
|
|
9
10
|
export default LambdaClient;
|
|
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const client_lambda_1 = require("@aws-sdk/client-lambda");
|
|
6
7
|
const LambdaInvocationFailedError_1 = __importDefault(require("./LambdaInvocationFailedError"));
|
|
7
8
|
class LambdaClient {
|
|
8
9
|
constructor(functionArn, serializer, lambdaInstance) {
|
|
@@ -11,15 +12,16 @@ class LambdaClient {
|
|
|
11
12
|
this.lambdaInstance = lambdaInstance;
|
|
12
13
|
}
|
|
13
14
|
async invokeLambda(args) {
|
|
14
|
-
const serializedInput =
|
|
15
|
+
const serializedInput = args
|
|
15
16
|
? this.serializer.serialize(args, 'string')
|
|
16
17
|
: undefined;
|
|
17
|
-
const
|
|
18
|
+
const command = new client_lambda_1.InvokeCommand({
|
|
18
19
|
Payload: serializedInput,
|
|
19
20
|
FunctionName: this.functionArn,
|
|
20
|
-
})
|
|
21
|
+
});
|
|
22
|
+
const result = await this.lambdaInstance.send(command);
|
|
21
23
|
if (result.FunctionError) {
|
|
22
|
-
throw new LambdaInvocationFailedError_1.default(result.FunctionError);
|
|
24
|
+
throw new LambdaInvocationFailedError_1.default(result.LogResult, result.FunctionError);
|
|
23
25
|
}
|
|
24
26
|
if (!result.Payload) {
|
|
25
27
|
return;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../services/aws/LambdaClient/index.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../services/aws/LambdaClient/index.ts"],"names":[],"mappings":";;;;;AAAA,0DAG+B;AAG/B,gGAAuE;AAEvE,MAAM,YAAY;IAChB,YACqB,WAAmB,EACnB,UAAsB,EACtB,cAA+B;QAF/B,gBAAW,GAAX,WAAW,CAAQ;QACnB,eAAU,GAAV,UAAU,CAAY;QACtB,mBAAc,GAAd,cAAc,CAAiB;IACjD,CAAC;IAEG,KAAK,CAAC,YAAY,CAAC,IAAkB;QAC1C,MAAM,eAAe,GAAG,IAAI;YAC1B,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC;YAC3C,CAAC,CAAC,SAAS,CAAA;QAEb,MAAM,OAAO,GAAG,IAAI,6BAAa,CAAC;YAChC,OAAO,EAAE,eAAe;YACxB,YAAY,EAAE,IAAI,CAAC,WAAW;SAC/B,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAEtD,IAAI,MAAM,CAAC,aAAa,EAAE;YACxB,MAAM,IAAI,qCAA2B,CACnC,MAAM,CAAC,SAAmB,EAC1B,MAAM,CAAC,aAAa,CACrB,CAAA;SACF;QAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE;YACnB,OAAM;SACP;QAED,MAAM,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CACpD,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAC5B,CAAA;QAED,OAAO,kBAAkB,CAAA;IAC3B,CAAC;CACF;AAED,kBAAe,YAAY,CAAA"}
|
|
@@ -1,20 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const
|
|
7
|
-
const { SecretsManager } = (0, getAWS_1.default)();
|
|
3
|
+
const client_secrets_manager_1 = require("@aws-sdk/client-secrets-manager");
|
|
8
4
|
class SecretsClient {
|
|
9
5
|
constructor(cache) {
|
|
10
6
|
this.cache = cache;
|
|
11
|
-
this.secretsManager = new
|
|
7
|
+
this.secretsManager = new client_secrets_manager_1.SecretsManagerClient();
|
|
12
8
|
}
|
|
13
9
|
async getSecretValue(secretName) {
|
|
14
10
|
const getSecret = async () => {
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
.promise();
|
|
11
|
+
const command = new client_secrets_manager_1.GetSecretValueCommand({ SecretId: secretName });
|
|
12
|
+
const secret = await this.secretsManager.send(command);
|
|
18
13
|
return secret.SecretString;
|
|
19
14
|
};
|
|
20
15
|
if (this.cache) {
|
|
@@ -24,12 +19,11 @@ class SecretsClient {
|
|
|
24
19
|
return getSecret();
|
|
25
20
|
}
|
|
26
21
|
async updateSecretValue(secretName, secretValue) {
|
|
27
|
-
|
|
28
|
-
.putSecretValue({
|
|
22
|
+
const command = new client_secrets_manager_1.PutSecretValueCommand({
|
|
29
23
|
SecretId: secretName,
|
|
30
24
|
SecretString: secretValue,
|
|
31
|
-
})
|
|
32
|
-
|
|
25
|
+
});
|
|
26
|
+
await this.secretsManager.send(command);
|
|
33
27
|
if (this.cache) {
|
|
34
28
|
const isCacheNotEmpty = await this.cache.hasKey(secretName);
|
|
35
29
|
if (isCacheNotEmpty) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SecretsClient.js","sourceRoot":"","sources":["../../../services/aws/SecretsClient.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"SecretsClient.js","sourceRoot":"","sources":["../../../services/aws/SecretsClient.ts"],"names":[],"mappings":";;AAAA,4EAIwC;AAIxC,MAAM,aAAa;IAGjB,YAAoC,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;QAFhC,mBAAc,GAAG,IAAI,6CAAoB,EAAE,CAAA;IAER,CAAC;IAE9C,KAAK,CAAC,cAAc,CAAC,UAAkB;QAC5C,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;YAC3B,MAAM,OAAO,GAAG,IAAI,8CAAqB,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAA;YAEnE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YAEtD,OAAO,MAAM,CAAC,YAAY,CAAA;QAC5B,CAAC,CAAA;QAED,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,CAC3C,UAAU,EACV,SAAS,CACV,CAAA;YAED,OAAO,WAAW,CAAA;SACnB;QAED,OAAO,SAAS,EAAE,CAAA;IACpB,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAC5B,UAAkB,EAClB,WAAmB;QAEnB,MAAM,OAAO,GAAG,IAAI,8CAAqB,CAAC;YACxC,QAAQ,EAAE,UAAU;YACpB,YAAY,EAAE,WAAW;SAC1B,CAAC,CAAA;QAEF,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAEvC,IAAI,IAAI,CAAC,KAAK,EAAE;YACd,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;YAC3D,IAAI,eAAe,EAAE;gBACnB,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;aACpC;YAED,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;SAC9C;IACH,CAAC;CACF;AAED,kBAAe,aAAa,CAAA"}
|
|
@@ -1,12 +1,14 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { DynamoDBDocumentClient, QueryCommandInput, ScanCommandInput } from '@aws-sdk/lib-dynamodb';
|
|
2
2
|
import PaginatedFindResult from './interfaces/PaginatedFindResult';
|
|
3
3
|
declare abstract class BaseDynamoDataStorage<TEntity> {
|
|
4
4
|
protected readonly tableName: string;
|
|
5
5
|
protected abstract readonly keys: Array<keyof TEntity>;
|
|
6
|
-
protected readonly documentClient:
|
|
6
|
+
protected readonly documentClient: DynamoDBDocumentClient;
|
|
7
7
|
protected constructor(tableName: string);
|
|
8
|
-
protected
|
|
9
|
-
protected
|
|
8
|
+
protected executeQuery<TResultEntity = TEntity>(query: QueryCommandInput): Promise<TResultEntity[]>;
|
|
9
|
+
protected executeScan<TResultEntity = TEntity>(query: ScanCommandInput): Promise<TResultEntity[]>;
|
|
10
|
+
protected executePaginatedQuery<TResultEntity = TEntity>(query: QueryCommandInput, lastEvaluatedKey?: string): Promise<PaginatedFindResult<TResultEntity>>;
|
|
11
|
+
protected executePaginatedScan<TResultEntity = TEntity>(query: ScanCommandInput, lastEvaluatedKey?: string): Promise<PaginatedFindResult<TResultEntity>>;
|
|
10
12
|
protected getKeyPairFromModel(model: TEntity): Partial<TEntity>;
|
|
11
13
|
}
|
|
12
14
|
export default BaseDynamoDataStorage;
|
|
@@ -1,28 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const
|
|
7
|
-
const
|
|
3
|
+
const lib_dynamodb_1 = require("@aws-sdk/lib-dynamodb");
|
|
4
|
+
const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
|
|
8
5
|
class BaseDynamoDataStorage {
|
|
9
6
|
constructor(tableName) {
|
|
10
7
|
this.tableName = tableName;
|
|
11
|
-
this.documentClient = new
|
|
8
|
+
this.documentClient = lib_dynamodb_1.DynamoDBDocumentClient.from(new client_dynamodb_1.DynamoDBClient());
|
|
12
9
|
}
|
|
13
|
-
async
|
|
10
|
+
async executeQuery(query) {
|
|
14
11
|
var _a;
|
|
15
12
|
const results = [];
|
|
16
13
|
let lastEvaluatedKey;
|
|
17
14
|
console.log('DDB Op', query);
|
|
18
15
|
do {
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
.query({ ...query, ExclusiveStartKey: lastEvaluatedKey })
|
|
25
|
-
.promise();
|
|
16
|
+
const command = new lib_dynamodb_1.QueryCommand({
|
|
17
|
+
...query,
|
|
18
|
+
ExclusiveStartKey: lastEvaluatedKey,
|
|
19
|
+
});
|
|
20
|
+
const page = await this.documentClient.send(command);
|
|
26
21
|
if ((_a = page.Items) === null || _a === void 0 ? void 0 : _a.length) {
|
|
27
22
|
results.push(...page.Items);
|
|
28
23
|
}
|
|
@@ -30,39 +25,57 @@ class BaseDynamoDataStorage {
|
|
|
30
25
|
} while (lastEvaluatedKey);
|
|
31
26
|
return results;
|
|
32
27
|
}
|
|
33
|
-
async
|
|
28
|
+
async executeScan(query) {
|
|
34
29
|
var _a;
|
|
35
30
|
const results = [];
|
|
31
|
+
let lastEvaluatedKey;
|
|
36
32
|
console.log('DDB Op', query);
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
decodedLastEvaluatedKey = JSON.parse(Buffer
|
|
40
|
-
.from(lastEvaluatedKey, 'base64')
|
|
41
|
-
.toString('utf-8'));
|
|
42
|
-
}
|
|
43
|
-
const page = operation === 'Scan'
|
|
44
|
-
? await this.documentClient
|
|
45
|
-
.scan({
|
|
46
|
-
...query,
|
|
47
|
-
ExclusiveStartKey: decodedLastEvaluatedKey,
|
|
48
|
-
})
|
|
49
|
-
.promise()
|
|
50
|
-
: await this.documentClient
|
|
51
|
-
.query({
|
|
33
|
+
do {
|
|
34
|
+
const command = new client_dynamodb_1.ScanCommand({
|
|
52
35
|
...query,
|
|
53
|
-
ExclusiveStartKey:
|
|
54
|
-
})
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
36
|
+
ExclusiveStartKey: lastEvaluatedKey,
|
|
37
|
+
});
|
|
38
|
+
const page = await this.documentClient.send(command);
|
|
39
|
+
if ((_a = page.Items) === null || _a === void 0 ? void 0 : _a.length) {
|
|
40
|
+
results.push(...page.Items);
|
|
41
|
+
}
|
|
42
|
+
lastEvaluatedKey = page.LastEvaluatedKey;
|
|
43
|
+
} while (lastEvaluatedKey);
|
|
44
|
+
return results;
|
|
45
|
+
}
|
|
46
|
+
async executePaginatedQuery(query, lastEvaluatedKey) {
|
|
47
|
+
const decodedLastEvaluatedKey = lastEvaluatedKey
|
|
48
|
+
? JSON.parse(Buffer.from(lastEvaluatedKey, 'base64').toString('utf-8'))
|
|
49
|
+
: undefined;
|
|
50
|
+
const command = new lib_dynamodb_1.QueryCommand({
|
|
51
|
+
...query,
|
|
52
|
+
ExclusiveStartKey: decodedLastEvaluatedKey,
|
|
53
|
+
});
|
|
54
|
+
const page = await this.documentClient.send(command);
|
|
55
|
+
const items = page.Items || [];
|
|
56
|
+
const newLastEvaluatedKey = page.LastEvaluatedKey
|
|
57
|
+
? Buffer.from(JSON.stringify(page.LastEvaluatedKey, null, 2), 'utf-8').toString('base64')
|
|
58
|
+
: undefined;
|
|
59
|
+
return {
|
|
60
|
+
items,
|
|
61
|
+
lastEvaluatedKey: newLastEvaluatedKey,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
async executePaginatedScan(query, lastEvaluatedKey) {
|
|
65
|
+
const decodedLastEvaluatedKey = lastEvaluatedKey
|
|
66
|
+
? JSON.parse(Buffer.from(lastEvaluatedKey, 'base64').toString('utf-8'))
|
|
67
|
+
: undefined;
|
|
68
|
+
const command = new client_dynamodb_1.ScanCommand({
|
|
69
|
+
...query,
|
|
70
|
+
ExclusiveStartKey: decodedLastEvaluatedKey,
|
|
71
|
+
});
|
|
72
|
+
const page = await this.documentClient.send(command);
|
|
73
|
+
const items = page.Items || [];
|
|
74
|
+
const newLastEvaluatedKey = page.LastEvaluatedKey
|
|
75
|
+
? Buffer.from(JSON.stringify(page.LastEvaluatedKey, null, 2), 'utf-8').toString('base64')
|
|
76
|
+
: undefined;
|
|
64
77
|
return {
|
|
65
|
-
items
|
|
78
|
+
items,
|
|
66
79
|
lastEvaluatedKey: newLastEvaluatedKey,
|
|
67
80
|
};
|
|
68
81
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BaseDynamoDataStorage.js","sourceRoot":"","sources":["../../../../services/aws/dynamodb/BaseDynamoDataStorage.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"BaseDynamoDataStorage.js","sourceRoot":"","sources":["../../../../services/aws/dynamodb/BaseDynamoDataStorage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
import { DynamoDB } from 'aws-sdk';
|
|
2
1
|
import { PrimaryKey, QueryParameters } from './utils';
|
|
3
2
|
import BaseDynamoDataStorage from './BaseDynamoDataStorage';
|
|
4
|
-
import DataStorage from './interfaces/DataStorage';
|
|
5
3
|
import PaginatedFindResult from './interfaces/PaginatedFindResult';
|
|
6
|
-
|
|
4
|
+
import WriteRequest from './types/WriteRequest';
|
|
5
|
+
import QueryableDataStorage from './interfaces/QueryableDataStorage';
|
|
6
|
+
declare abstract class DynamoDataStorage<TEntity> extends BaseDynamoDataStorage<TEntity> implements QueryableDataStorage<TEntity> {
|
|
7
7
|
protected constructor(tableName: string);
|
|
8
|
-
protected batchWriteRequest(writeRequests:
|
|
8
|
+
protected batchWriteRequest(writeRequests: WriteRequest[], batchSize?: number): Promise<void>;
|
|
9
9
|
get(key: PrimaryKey<TEntity>): Promise<TEntity | null>;
|
|
10
10
|
batchGet(keys: PrimaryKey<TEntity>[], batchSize?: number): Promise<TEntity[]>;
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
query<TResultEntity = TEntity>(query: QueryParameters<TEntity>): Promise<TResultEntity[]>;
|
|
12
|
+
scan<TResultEntity = TEntity>(query: QueryParameters<TEntity>): Promise<TResultEntity[]>;
|
|
13
|
+
queryForPage<TResultEntity = TEntity>(query: QueryParameters<TEntity>, lastEvaluatedKey?: string): Promise<PaginatedFindResult<TResultEntity>>;
|
|
14
|
+
scanForPage<TResultEntity = TEntity>(query: QueryParameters<TEntity>, lastEvaluatedKey?: string): Promise<PaginatedFindResult<TResultEntity>>;
|
|
13
15
|
findOne(query: Omit<QueryParameters<TEntity>, 'limit'>): Promise<TEntity | null>;
|
|
14
16
|
remove(entity: Partial<TEntity>): Promise<void>;
|
|
15
17
|
batchRemove(entities: Partial<TEntity>[], batchSize?: number): Promise<void>;
|
|
@@ -3,6 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const lib_dynamodb_1 = require("@aws-sdk/lib-dynamodb");
|
|
6
7
|
const utils_1 = require("./utils");
|
|
7
8
|
const BaseDynamoDataStorage_1 = __importDefault(require("./BaseDynamoDataStorage"));
|
|
8
9
|
const BatchSizeTooBigError_1 = __importDefault(require("./BatchSizeTooBigError"));
|
|
@@ -24,21 +25,18 @@ class DynamoDataStorage extends BaseDynamoDataStorage_1.default {
|
|
|
24
25
|
[this.tableName]: batch,
|
|
25
26
|
};
|
|
26
27
|
do {
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
RequestItems: requestItems,
|
|
30
|
-
})
|
|
31
|
-
.promise();
|
|
28
|
+
const command = new lib_dynamodb_1.BatchWriteCommand({ RequestItems: requestItems });
|
|
29
|
+
const result = await this.documentClient.send(command);
|
|
32
30
|
requestItems = result.UnprocessedItems;
|
|
33
31
|
} while (requestItems && Object.keys(requestItems).length > 0);
|
|
34
32
|
}
|
|
35
33
|
}
|
|
36
34
|
async get(key) {
|
|
37
|
-
const
|
|
35
|
+
const command = new lib_dynamodb_1.GetCommand({
|
|
38
36
|
TableName: this.tableName,
|
|
39
37
|
Key: key,
|
|
40
|
-
};
|
|
41
|
-
const result = await this.documentClient.
|
|
38
|
+
});
|
|
39
|
+
const result = await this.documentClient.send(command);
|
|
42
40
|
return result.Item ? result.Item : null;
|
|
43
41
|
}
|
|
44
42
|
async batchGet(keys, batchSize = 100) {
|
|
@@ -47,14 +45,12 @@ class DynamoDataStorage extends BaseDynamoDataStorage_1.default {
|
|
|
47
45
|
batches.push(keys.splice(0, batchSize).filter((key) => key));
|
|
48
46
|
}
|
|
49
47
|
const batchResults = await Promise.all(batches.map(async (batch) => {
|
|
50
|
-
const
|
|
48
|
+
const command = new lib_dynamodb_1.BatchGetCommand({
|
|
51
49
|
RequestItems: {
|
|
52
50
|
[this.tableName]: { Keys: batch },
|
|
53
51
|
},
|
|
54
|
-
};
|
|
55
|
-
const results = await this.documentClient
|
|
56
|
-
.batchGet(dynamoBatchGetRequest)
|
|
57
|
-
.promise();
|
|
52
|
+
});
|
|
53
|
+
const results = await this.documentClient.send(command);
|
|
58
54
|
return ((results.Responses &&
|
|
59
55
|
results.Responses[this.tableName]) || []);
|
|
60
56
|
}));
|
|
@@ -63,42 +59,57 @@ class DynamoDataStorage extends BaseDynamoDataStorage_1.default {
|
|
|
63
59
|
return results;
|
|
64
60
|
}, []);
|
|
65
61
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
62
|
+
query(query) {
|
|
63
|
+
const builderParams = {
|
|
64
|
+
query,
|
|
65
|
+
tableName: this.tableName,
|
|
66
|
+
primaryKeys: this.keys,
|
|
67
|
+
};
|
|
68
|
+
const ddbQuery = utils_1.QueryBuilder.buildQuery(builderParams);
|
|
69
|
+
return this.executeQuery(ddbQuery);
|
|
70
|
+
}
|
|
71
|
+
scan(query) {
|
|
72
|
+
const builderParams = {
|
|
73
|
+
query,
|
|
74
|
+
tableName: this.tableName,
|
|
75
|
+
primaryKeys: this.keys,
|
|
76
|
+
};
|
|
77
|
+
const ddbQuery = utils_1.QueryBuilder.buildScan(builderParams);
|
|
78
|
+
return this.executeScan(ddbQuery);
|
|
79
|
+
}
|
|
80
|
+
queryForPage(query, lastEvaluatedKey) {
|
|
81
|
+
const builderParams = {
|
|
82
|
+
query,
|
|
83
|
+
tableName: this.tableName,
|
|
84
|
+
primaryKeys: this.keys,
|
|
85
|
+
};
|
|
86
|
+
const ddbQuery = utils_1.QueryBuilder.buildQuery(builderParams);
|
|
87
|
+
return this.executePaginatedQuery(ddbQuery, lastEvaluatedKey);
|
|
75
88
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
return result;
|
|
89
|
+
scanForPage(query, lastEvaluatedKey) {
|
|
90
|
+
const builderParams = {
|
|
91
|
+
query,
|
|
92
|
+
tableName: this.tableName,
|
|
93
|
+
primaryKeys: this.keys,
|
|
94
|
+
};
|
|
95
|
+
const ddbQuery = utils_1.QueryBuilder.buildScan(builderParams);
|
|
96
|
+
return this.executePaginatedScan(ddbQuery, lastEvaluatedKey);
|
|
85
97
|
}
|
|
86
98
|
async findOne(query) {
|
|
87
99
|
const limitedQuery = {
|
|
88
100
|
...query,
|
|
89
101
|
limit: 1,
|
|
90
102
|
};
|
|
91
|
-
const [result] = await this.
|
|
103
|
+
const [result] = await this.query(limitedQuery);
|
|
92
104
|
return result !== null && result !== void 0 ? result : null;
|
|
93
105
|
}
|
|
94
106
|
async remove(entity) {
|
|
95
107
|
const keyPair = this.getKeyPairFromModel(entity);
|
|
96
|
-
|
|
97
|
-
.delete({
|
|
108
|
+
const command = new lib_dynamodb_1.DeleteCommand({
|
|
98
109
|
TableName: this.tableName,
|
|
99
110
|
Key: keyPair,
|
|
100
|
-
})
|
|
101
|
-
|
|
111
|
+
});
|
|
112
|
+
await this.documentClient.send(command);
|
|
102
113
|
}
|
|
103
114
|
async batchRemove(entities, batchSize = 24) {
|
|
104
115
|
const keyPairs = entities.map((entity) => this.getKeyPairFromModel(entity));
|
|
@@ -119,12 +130,11 @@ class DynamoDataStorage extends BaseDynamoDataStorage_1.default {
|
|
|
119
130
|
return entities;
|
|
120
131
|
}
|
|
121
132
|
async save(entity) {
|
|
122
|
-
|
|
123
|
-
.put({
|
|
133
|
+
const command = new lib_dynamodb_1.PutCommand({
|
|
124
134
|
TableName: this.tableName,
|
|
125
135
|
Item: entity,
|
|
126
|
-
})
|
|
127
|
-
|
|
136
|
+
});
|
|
137
|
+
await this.documentClient.send(command);
|
|
128
138
|
return entity;
|
|
129
139
|
}
|
|
130
140
|
}
|