@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.
Files changed (69) hide show
  1. package/package.json +33 -6
  2. package/providers/email.d.ts +1 -0
  3. package/providers/email.js +6 -5
  4. package/providers/email.js.map +1 -1
  5. package/services/aws/LambdaClient/LambdaInvocationFailedError.d.ts +1 -1
  6. package/services/aws/LambdaClient/LambdaInvocationFailedError.js +3 -3
  7. package/services/aws/LambdaClient/LambdaInvocationFailedError.js.map +1 -1
  8. package/services/aws/LambdaClient/index.d.ts +3 -2
  9. package/services/aws/LambdaClient/index.js +6 -4
  10. package/services/aws/LambdaClient/index.js.map +1 -1
  11. package/services/aws/SecretsClient.js +7 -13
  12. package/services/aws/SecretsClient.js.map +1 -1
  13. package/services/aws/dynamodb/BaseDynamoDataStorage.d.ts +6 -4
  14. package/services/aws/dynamodb/BaseDynamoDataStorage.js +55 -42
  15. package/services/aws/dynamodb/BaseDynamoDataStorage.js.map +1 -1
  16. package/services/aws/dynamodb/DynamoDataStorage.d.ts +8 -6
  17. package/services/aws/dynamodb/DynamoDataStorage.js +50 -40
  18. package/services/aws/dynamodb/DynamoDataStorage.js.map +1 -1
  19. package/services/aws/dynamodb/DynamoIndexDataStorage.d.ts +5 -2
  20. package/services/aws/dynamodb/DynamoIndexDataStorage.js +27 -17
  21. package/services/aws/dynamodb/DynamoIndexDataStorage.js.map +1 -1
  22. package/services/aws/dynamodb/interfaces/QueryableDataStorage.d.ts +5 -1
  23. package/services/aws/dynamodb/types/DeleteRequest.d.ts +4 -0
  24. package/services/aws/dynamodb/types/DeleteRequest.js +3 -0
  25. package/services/aws/dynamodb/types/DeleteRequest.js.map +1 -0
  26. package/services/aws/dynamodb/types/PutRequest.d.ts +4 -0
  27. package/services/aws/dynamodb/types/PutRequest.js +3 -0
  28. package/services/aws/dynamodb/types/PutRequest.js.map +1 -0
  29. package/services/aws/dynamodb/types/WriteRequest.d.ts +7 -0
  30. package/services/aws/dynamodb/types/WriteRequest.js +3 -0
  31. package/services/aws/dynamodb/types/WriteRequest.js.map +1 -0
  32. package/services/aws/dynamodb/utils/query/QueryBuilder.d.ts +3 -3
  33. package/services/aws/dynamodb/utils/query/QueryBuilder.js.map +1 -1
  34. package/services/aws/dynamodb/utils/query/QueryParameters.d.ts +0 -3
  35. package/services/email/SESTemplateClient.d.ts +2 -2
  36. package/services/email/SESTemplateClient.js +5 -3
  37. package/services/email/SESTemplateClient.js.map +1 -1
  38. package/services/email/__tests__/SESTemplateClient.spec.js +15 -13
  39. package/services/email/__tests__/SESTemplateClient.spec.js.map +1 -1
  40. package/services/queue/EventBridgeClient.js +8 -14
  41. package/services/queue/EventBridgeClient.js.map +1 -1
  42. package/services/queue/KinesisClient.d.ts +2 -2
  43. package/services/queue/KinesisClient.js +9 -10
  44. package/services/queue/KinesisClient.js.map +1 -1
  45. package/services/queue/SNSQueueClient.js +8 -20
  46. package/services/queue/SNSQueueClient.js.map +1 -1
  47. package/services/queue/SQSQueueClient.js +7 -11
  48. package/services/queue/SQSQueueClient.js.map +1 -1
  49. package/services/state-machine/StepFunctionsClient.js +5 -10
  50. package/services/state-machine/StepFunctionsClient.js.map +1 -1
  51. package/utils/caching/S3Cache.js +26 -31
  52. package/utils/caching/S3Cache.js.map +1 -1
  53. package/utils/caching/SecretCache.js +16 -22
  54. package/utils/caching/SecretCache.js.map +1 -1
  55. package/utils/handlers/HttpHandlerBuilder/index.js +2 -3
  56. package/utils/handlers/HttpHandlerBuilder/index.js.map +1 -1
  57. package/utils/handlers/LambdaHandlerBuilder/index.js +0 -2
  58. package/utils/handlers/LambdaHandlerBuilder/index.js.map +1 -1
  59. package/utils/handlers/QueueHandlerBuilder/extractors/DynamoStreamExtractor.d.ts +2 -1
  60. package/utils/handlers/QueueHandlerBuilder/extractors/DynamoStreamExtractor.js +2 -2
  61. package/utils/handlers/QueueHandlerBuilder/extractors/DynamoStreamExtractor.js.map +1 -1
  62. package/utils/handlers/QueueHandlerBuilder/index.js +0 -2
  63. package/utils/handlers/QueueHandlerBuilder/index.js.map +1 -1
  64. package/utils/getAWS.d.ts +0 -3
  65. package/utils/getAWS.js +0 -15
  66. package/utils/getAWS.js.map +0 -1
  67. package/utils/tracing.d.ts +0 -15
  68. package/utils/tracing.js +0 -122
  69. package/utils/tracing.js.map +0 -1
package/package.json CHANGED
@@ -1,31 +1,45 @@
1
1
  {
2
2
  "name": "@trunkrs/common",
3
- "version": "1.12.5",
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
- "@types/aws-lambda": "^8.10.92",
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.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
  }
@@ -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;
@@ -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 aws_sdk_1 = require("aws-sdk");
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(aws_sdk_1.SES),
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(aws_sdk_1.SES, service_provider_1.Lifecycle.Singleton, () => new aws_sdk_1.SES({
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(aws_sdk_1.SES), serviceProvider.provide(exports.TemplateFileCache)));
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),
@@ -1 +1 @@
1
- {"version":3,"file":"email.js","sourceRoot":"","sources":["../../providers/email.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA4C;AAE5C,qCAA6B;AAC7B,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,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,aAAG,CAAC;KAC9B,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,aAAG,EACH,4BAAS,CAAC,SAAS,EACnB,GAAG,EAAE,CACH,IAAI,aAAG,CAAC;QACN,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,aAAG,CAAC,EACxB,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"}
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"}
@@ -1,5 +1,5 @@
1
1
  import ErrorBase from '../../../models/errors/ErrorBase';
2
2
  declare class LambdaInvocationFailedError extends ErrorBase {
3
- constructor(error?: any);
3
+ constructor(logs: string, error?: any);
4
4
  }
5
5
  export default LambdaInvocationFailedError;
@@ -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
- `Lambda Invocation Failed with error: ${JSON.stringify(error, null, 2)}`;
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;QAC5B,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,OAAO;YACV,wCAAwC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAA;QAC1E,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAA;IAC/B,CAAC;CACF;AAED,kBAAe,2BAA2B,CAAA"}
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: AWS.Lambda;
6
- constructor(functionArn: string, serializer: Serializer, lambdaInstance: AWS.Lambda);
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 = !!args
15
+ const serializedInput = args
15
16
  ? this.serializer.serialize(args, 'string')
16
17
  : undefined;
17
- const result = await this.lambdaInstance.invoke({
18
+ const command = new client_lambda_1.InvokeCommand({
18
19
  Payload: serializedInput,
19
20
  FunctionName: this.functionArn,
20
- }).promise();
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":";;;;;AACA,gGAAuE;AAEvE,MAAM,YAAY;IAChB,YACqB,WAAmB,EACnB,UAAsB,EACtB,cAA0B;QAF1B,gBAAW,GAAX,WAAW,CAAQ;QACnB,eAAU,GAAV,UAAU,CAAY;QACtB,mBAAc,GAAd,cAAc,CAAY;IAC5C,CAAC;IAEG,KAAK,CAAC,YAAY,CAAC,IAAkB;QAC1C,MAAM,eAAe,GAAG,CAAC,CAAC,IAAI;YAC5B,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC;YAC3C,CAAC,CAAC,SAAS,CAAA;QAEb,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;YAC9C,OAAO,EAAE,eAAe;YACxB,YAAY,EAAE,IAAI,CAAC,WAAW;SAC/B,CAAC,CAAC,OAAO,EAAE,CAAA;QAGZ,IAAI,MAAM,CAAC,aAAa,EAAE;YACxB,MAAM,IAAI,qCAA2B,CAAC,MAAM,CAAC,aAAa,CAAC,CAAA;SAC5D;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,OAAiB,CAAC,CACtC,CAAA;QAED,OAAO,kBAAkB,CAAA;IAC3B,CAAC;CACF;AAED,kBAAe,YAAY,CAAA"}
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 getAWS_1 = __importDefault(require("../../utils/getAWS"));
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 SecretsManager();
7
+ this.secretsManager = new client_secrets_manager_1.SecretsManagerClient();
12
8
  }
13
9
  async getSecretValue(secretName) {
14
10
  const getSecret = async () => {
15
- const secret = await this.secretsManager
16
- .getSecretValue({ SecretId: secretName })
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
- await this.secretsManager
28
- .putSecretValue({
22
+ const command = new client_secrets_manager_1.PutSecretValueCommand({
29
23
  SecretId: secretName,
30
24
  SecretString: secretValue,
31
- })
32
- .promise();
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":";;;;;AACA,gEAAuC;AAEvC,MAAM,EAAE,cAAc,EAAE,GAAG,IAAA,gBAAM,GAAE,CAAA;AAEnC,MAAM,aAAa;IAGjB,YAAoC,KAAa;QAAb,UAAK,GAAL,KAAK,CAAQ;QAFhC,mBAAc,GAAG,IAAI,cAAc,EAAE,CAAA;IAEF,CAAC;IAE9C,KAAK,CAAC,cAAc,CAAC,UAAkB;QAC5C,MAAM,SAAS,GAAG,KAAK,IAAI,EAAE;YAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc;iBACrC,cAAc,CAAC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;iBACxC,OAAO,EAAE,CAAA;YAEZ,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,IAAI,CAAC,cAAc;aACtB,cAAc,CAAC;YACd,QAAQ,EAAE,UAAU;YACpB,YAAY,EAAE,WAAW;SAC1B,CAAC;aACD,OAAO,EAAE,CAAA;QAEZ,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
+ {"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 AWS from 'aws-sdk';
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: AWS.DynamoDB.DocumentClient;
6
+ protected readonly documentClient: DynamoDBDocumentClient;
7
7
  protected constructor(tableName: string);
8
- protected executeOperation<TResultEntity = TEntity>(operation: 'Scan' | 'Query', query: AWS.DynamoDB.DocumentClient.ScanInput): Promise<TResultEntity[]>;
9
- protected executePaginatedOperation<TResultEntity = TEntity>(operation: 'Scan' | 'Query', query: AWS.DynamoDB.DocumentClient.ScanInput, lastEvaluatedKey?: string): Promise<PaginatedFindResult<TResultEntity>>;
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 getAWS_1 = __importDefault(require("../../../utils/getAWS"));
7
- const { DynamoDB } = (0, getAWS_1.default)();
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 DynamoDB.DocumentClient();
8
+ this.documentClient = lib_dynamodb_1.DynamoDBDocumentClient.from(new client_dynamodb_1.DynamoDBClient());
12
9
  }
13
- async executeOperation(operation, query) {
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 page = operation === 'Scan'
20
- ? await this.documentClient
21
- .scan({ ...query, ExclusiveStartKey: lastEvaluatedKey })
22
- .promise()
23
- : await this.documentClient
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 executePaginatedOperation(operation, query, lastEvaluatedKey) {
28
+ async executeScan(query) {
34
29
  var _a;
35
30
  const results = [];
31
+ let lastEvaluatedKey;
36
32
  console.log('DDB Op', query);
37
- let decodedLastEvaluatedKey;
38
- if (lastEvaluatedKey) {
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: decodedLastEvaluatedKey,
54
- })
55
- .promise();
56
- if ((_a = page.Items) === null || _a === void 0 ? void 0 : _a.length) {
57
- results.push(...page.Items);
58
- }
59
- let newLastEvaluatedKey;
60
- if (page.LastEvaluatedKey) {
61
- newLastEvaluatedKey = Buffer
62
- .from(JSON.stringify(page.LastEvaluatedKey, null, 2), 'utf-8').toString('base64');
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: results,
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":"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"}
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
- declare abstract class DynamoDataStorage<TEntity> extends BaseDynamoDataStorage<TEntity> implements DataStorage<TEntity> {
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: DynamoDB.DocumentClient.WriteRequests, batchSize?: number): Promise<void>;
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
- find<TResultEntity = TEntity>(query: QueryParameters<TEntity>): Promise<TResultEntity[]>;
12
- paginatedFind<TResultEntity = TEntity>(query: QueryParameters<TEntity>, lastEvaluatedKey?: string): Promise<PaginatedFindResult<TResultEntity>>;
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 result = await this.documentClient
28
- .batchWrite({
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 dynamoGetRequest = {
35
+ const command = new lib_dynamodb_1.GetCommand({
38
36
  TableName: this.tableName,
39
37
  Key: key,
40
- };
41
- const result = await this.documentClient.get(dynamoGetRequest).promise();
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 dynamoBatchGetRequest = {
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
- async find(query) {
67
- var _a, _b;
68
- const queryOp = (_b = (_a = query.queryOptions) === null || _a === void 0 ? void 0 : _a.operation) !== null && _b !== void 0 ? _b : 'Query';
69
- const builderParams = { query, tableName: this.tableName, primaryKeys: this.keys };
70
- const ddbQuery = queryOp === 'Scan'
71
- ? utils_1.QueryBuilder.buildScan(builderParams)
72
- : utils_1.QueryBuilder.buildQuery(builderParams);
73
- const result = await this.executeOperation(queryOp, ddbQuery);
74
- return result;
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
- async paginatedFind(query, lastEvaluatedKey) {
77
- var _a, _b;
78
- const queryOp = (_b = (_a = query.queryOptions) === null || _a === void 0 ? void 0 : _a.operation) !== null && _b !== void 0 ? _b : 'Query';
79
- const builderParams = { query, tableName: this.tableName, primaryKeys: this.keys };
80
- const ddbQuery = queryOp === 'Scan'
81
- ? utils_1.QueryBuilder.buildScan(builderParams)
82
- : utils_1.QueryBuilder.buildQuery(builderParams);
83
- const result = await this.executePaginatedOperation(queryOp, ddbQuery, lastEvaluatedKey);
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.find(limitedQuery);
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
- await this.documentClient
97
- .delete({
108
+ const command = new lib_dynamodb_1.DeleteCommand({
98
109
  TableName: this.tableName,
99
110
  Key: keyPair,
100
- })
101
- .promise();
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
- await this.documentClient
123
- .put({
133
+ const command = new lib_dynamodb_1.PutCommand({
124
134
  TableName: this.tableName,
125
135
  Item: entity,
126
- })
127
- .promise();
136
+ });
137
+ await this.documentClient.send(command);
128
138
  return entity;
129
139
  }
130
140
  }