lesgo 1.0.0 → 2.1.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/README.md +5 -4
- package/bin/lesgo-scripts.sh +4 -4
- package/dist/config/app.d.ts +7 -0
- package/dist/config/app.js +9 -0
- package/dist/config/aws.d.ts +5 -0
- package/dist/config/aws.js +4 -0
- package/dist/config/basicAuth.d.ts +7 -0
- package/dist/config/basicAuth.js +8 -0
- package/dist/config/crypto.d.ts +10 -0
- package/dist/config/crypto.js +9 -0
- package/dist/config/dynamodb.d.ts +8 -0
- package/dist/config/dynamodb.js +14 -0
- package/dist/config/elasticache.d.ts +7 -0
- package/dist/config/elasticache.js +6 -0
- package/dist/config/index.d.ts +11 -0
- package/dist/config/index.js +11 -0
- package/dist/config/jwt.d.ts +12 -0
- package/dist/config/jwt.js +16 -0
- package/dist/config/rds.d.ts +12 -0
- package/dist/config/rds.js +13 -0
- package/dist/config/s3.d.ts +5 -0
- package/dist/config/s3.js +5 -0
- package/dist/config/secretsManager.d.ts +4 -0
- package/dist/config/secretsManager.js +4 -0
- package/dist/config/sqs.d.ts +9 -0
- package/dist/config/sqs.js +18 -0
- package/dist/exceptions/LesgoException.d.ts +6 -0
- package/{src → dist}/exceptions/LesgoException.js +5 -4
- package/dist/exceptions/index.d.ts +1 -0
- package/dist/exceptions/index.js +1 -0
- package/dist/middlewares/disconnectMiddleware.d.ts +8 -0
- package/dist/middlewares/disconnectMiddleware.js +78 -0
- package/dist/middlewares/httpMiddleware.d.ts +12 -0
- package/dist/middlewares/httpMiddleware.js +74 -0
- package/dist/middlewares/httpResponseMiddleware.d.ts +7 -0
- package/dist/middlewares/httpResponseMiddleware.js +128 -0
- package/dist/middlewares/index.d.ts +7 -0
- package/dist/middlewares/index.js +7 -0
- package/dist/middlewares/invokeCommandMiddleware.d.ts +12 -0
- package/dist/middlewares/invokeCommandMiddleware.js +70 -0
- package/dist/middlewares/sqsMiddleware.d.ts +10 -0
- package/dist/middlewares/sqsMiddleware.js +70 -0
- package/dist/middlewares/verifyBasicAuthMiddleware.d.ts +8 -0
- package/dist/middlewares/verifyBasicAuthMiddleware.js +59 -0
- package/dist/middlewares/verifyJwtMiddleware.d.ts +6 -0
- package/dist/middlewares/verifyJwtMiddleware.js +37 -0
- package/dist/services/DynamoDbService/deleteRecord.d.ts +8 -0
- package/dist/services/DynamoDbService/deleteRecord.js +69 -0
- package/dist/services/DynamoDbService/getClient.d.ts +7 -0
- package/dist/services/DynamoDbService/getClient.js +30 -0
- package/dist/services/DynamoDbService/getTableName.d.ts +2 -0
- package/dist/services/DynamoDbService/getTableName.js +15 -0
- package/dist/services/DynamoDbService/index.d.ts +6 -0
- package/dist/services/DynamoDbService/index.js +6 -0
- package/dist/services/DynamoDbService/putRecord.d.ts +8 -0
- package/dist/services/DynamoDbService/putRecord.js +64 -0
- package/dist/services/DynamoDbService/query.d.ts +7 -0
- package/dist/services/DynamoDbService/query.js +78 -0
- package/dist/services/DynamoDbService/scan.d.ts +7 -0
- package/dist/services/DynamoDbService/scan.js +60 -0
- package/dist/services/DynamoDbService/updateRecord.d.ts +9 -0
- package/dist/services/DynamoDbService/updateRecord.js +89 -0
- package/dist/services/ElastiCacheRedisService/deleteRedisCache.d.ts +3 -0
- package/dist/services/ElastiCacheRedisService/deleteRedisCache.js +62 -0
- package/dist/services/ElastiCacheRedisService/disconnectElastiCacheRedisClient.d.ts +11 -0
- package/dist/services/ElastiCacheRedisService/disconnectElastiCacheRedisClient.js +69 -0
- package/dist/services/ElastiCacheRedisService/getElastiCacheRedisClient.d.ts +12 -0
- package/dist/services/ElastiCacheRedisService/getElastiCacheRedisClient.js +114 -0
- package/dist/services/ElastiCacheRedisService/getRedisCache.d.ts +3 -0
- package/dist/services/ElastiCacheRedisService/getRedisCache.js +70 -0
- package/dist/services/ElastiCacheRedisService/index.d.ts +5 -0
- package/dist/services/ElastiCacheRedisService/index.js +5 -0
- package/dist/services/ElastiCacheRedisService/setRedisCache.d.ts +6 -0
- package/dist/services/ElastiCacheRedisService/setRedisCache.js +77 -0
- package/dist/services/JWTService/decodeJwt.d.ts +7 -0
- package/dist/services/JWTService/decodeJwt.js +9 -0
- package/dist/services/JWTService/getJwtSecret.d.ts +13 -0
- package/dist/services/JWTService/getJwtSecret.js +54 -0
- package/dist/services/JWTService/index.d.ts +2 -0
- package/dist/services/JWTService/index.js +2 -0
- package/dist/services/JWTService/sign.d.ts +3 -0
- package/dist/services/JWTService/sign.js +31 -0
- package/dist/services/JWTService/verify.d.ts +7 -0
- package/dist/services/JWTService/verify.js +61 -0
- package/dist/services/LoggerService.d.ts +46 -0
- package/{src → dist}/services/LoggerService.js +29 -60
- package/dist/services/RDSAuroraMySQLProxyService/disconnectMySQLProxyClient.d.ts +2 -0
- package/dist/services/RDSAuroraMySQLProxyService/disconnectMySQLProxyClient.js +60 -0
- package/dist/services/RDSAuroraMySQLProxyService/getMySQLProxyClient.d.ts +8 -0
- package/dist/services/RDSAuroraMySQLProxyService/getMySQLProxyClient.js +87 -0
- package/dist/services/RDSAuroraMySQLProxyService/index.d.ts +3 -0
- package/dist/services/RDSAuroraMySQLProxyService/index.js +3 -0
- package/dist/services/RDSAuroraMySQLProxyService/query.d.ts +4 -0
- package/dist/services/RDSAuroraMySQLProxyService/query.js +63 -0
- package/dist/services/S3Service/getClient.d.ts +4 -0
- package/dist/services/S3Service/getClient.js +28 -0
- package/dist/services/S3Service/getDownloadSignedUrl.d.ts +7 -0
- package/dist/services/S3Service/getDownloadSignedUrl.js +58 -0
- package/dist/services/S3Service/getHeadObject.d.ts +13 -0
- package/dist/services/S3Service/getHeadObject.js +83 -0
- package/dist/services/S3Service/getObject.d.ts +10 -0
- package/dist/services/S3Service/getObject.js +89 -0
- package/dist/services/S3Service/getUploadSignedUrl.d.ts +7 -0
- package/dist/services/S3Service/getUploadSignedUrl.js +61 -0
- package/dist/services/S3Service/index.d.ts +6 -0
- package/dist/services/S3Service/index.js +6 -0
- package/dist/services/S3Service/putObject.d.ts +9 -0
- package/dist/services/S3Service/putObject.js +77 -0
- package/dist/services/SQSService/deleteMessage.d.ts +9 -0
- package/dist/services/SQSService/deleteMessage.js +69 -0
- package/dist/services/SQSService/dispatch.d.ts +9 -0
- package/dist/services/SQSService/dispatch.js +71 -0
- package/dist/services/SQSService/getClient.d.ts +4 -0
- package/dist/services/SQSService/getClient.js +28 -0
- package/dist/services/SQSService/getQueueUrl.d.ts +7 -0
- package/dist/services/SQSService/getQueueUrl.js +25 -0
- package/dist/services/SQSService/index.d.ts +4 -0
- package/dist/services/SQSService/index.js +4 -0
- package/dist/services/SQSService/receiveMessages.d.ts +8 -0
- package/dist/services/SQSService/receiveMessages.js +65 -0
- package/dist/services/SecretsManagerService/getClient.d.ts +7 -0
- package/dist/services/SecretsManagerService/getClient.js +28 -0
- package/dist/services/SecretsManagerService/getSecretValue.d.ts +7 -0
- package/dist/services/SecretsManagerService/getSecretValue.js +65 -0
- package/dist/services/SecretsManagerService/index.d.ts +2 -0
- package/dist/services/SecretsManagerService/index.js +2 -0
- package/dist/services/index.d.ts +1 -0
- package/dist/services/index.js +1 -0
- package/dist/types/aws.d.ts +8 -0
- package/dist/types/aws.js +1 -0
- package/dist/utils/cache/redis/deleteCache.d.ts +19 -0
- package/dist/utils/cache/redis/deleteCache.js +21 -0
- package/dist/utils/cache/redis/getCache.d.ts +22 -0
- package/dist/utils/cache/redis/getCache.js +24 -0
- package/dist/utils/cache/redis/getClient.d.ts +30 -0
- package/dist/utils/cache/redis/getClient.js +32 -0
- package/dist/utils/cache/redis/index.d.ts +4 -0
- package/dist/utils/cache/redis/index.js +4 -0
- package/dist/utils/cache/redis/setCache.d.ts +25 -0
- package/dist/utils/cache/redis/setCache.js +26 -0
- package/dist/utils/crypto/decrypt.d.ts +33 -0
- package/dist/utils/crypto/decrypt.js +59 -0
- package/dist/utils/crypto/encrypt.d.ts +31 -0
- package/dist/utils/crypto/encrypt.js +41 -0
- package/dist/utils/crypto/hash.d.ts +31 -0
- package/dist/utils/crypto/hash.js +56 -0
- package/dist/utils/crypto/index.d.ts +3 -0
- package/dist/utils/crypto/index.js +3 -0
- package/dist/utils/crypto/validateEncryptionFields.d.ts +19 -0
- package/dist/utils/crypto/validateEncryptionFields.js +71 -0
- package/dist/utils/db/mysql/proxy/disconnect.d.ts +2 -0
- package/dist/utils/db/mysql/proxy/disconnect.js +5 -0
- package/dist/utils/db/mysql/proxy/disconnectDb.d.ts +2 -0
- package/dist/utils/db/mysql/proxy/disconnectDb.js +5 -0
- package/dist/utils/db/mysql/proxy/getClient.d.ts +4 -0
- package/dist/utils/db/mysql/proxy/getClient.js +5 -0
- package/dist/utils/db/mysql/proxy/index.d.ts +3 -0
- package/dist/utils/db/mysql/proxy/index.js +3 -0
- package/dist/utils/db/mysql/proxy/query.d.ts +4 -0
- package/dist/utils/db/mysql/proxy/query.js +45 -0
- package/dist/utils/dynamodb/deleteRecord.d.ts +5 -0
- package/dist/utils/dynamodb/deleteRecord.js +39 -0
- package/dist/utils/dynamodb/getClient.d.ts +3 -0
- package/dist/utils/dynamodb/getClient.js +5 -0
- package/dist/utils/dynamodb/index.d.ts +6 -0
- package/dist/utils/dynamodb/index.js +6 -0
- package/dist/utils/dynamodb/putRecord.d.ts +4 -0
- package/dist/utils/dynamodb/putRecord.js +39 -0
- package/dist/utils/dynamodb/query.d.ts +5 -0
- package/dist/utils/dynamodb/query.js +52 -0
- package/dist/utils/dynamodb/scan.d.ts +4 -0
- package/dist/utils/dynamodb/scan.js +40 -0
- package/dist/utils/dynamodb/updateRecord.d.ts +5 -0
- package/dist/utils/dynamodb/updateRecord.js +53 -0
- package/dist/utils/formatUnixTimestamp.d.ts +8 -0
- package/dist/utils/formatUnixTimestamp.js +17 -0
- package/dist/utils/generateUid.d.ts +13 -0
- package/{src → dist}/utils/generateUid.js +9 -4
- package/dist/utils/getCurrentDatetime.d.ts +2 -0
- package/dist/utils/getCurrentDatetime.js +4 -0
- package/dist/utils/getCurrentTimestamp.d.ts +7 -0
- package/dist/utils/getCurrentTimestamp.js +9 -0
- package/dist/utils/getJwtSubFromAuthHeader.d.ts +9 -0
- package/dist/utils/getJwtSubFromAuthHeader.js +24 -0
- package/dist/utils/index.d.ts +9 -0
- package/dist/utils/index.js +9 -0
- package/dist/utils/isDecimal.d.ts +8 -0
- package/dist/utils/isDecimal.js +9 -0
- package/dist/utils/isEmail.d.ts +9 -0
- package/{src → dist}/utils/isEmail.js +9 -4
- package/dist/utils/isEmpty.d.ts +8 -0
- package/dist/utils/isEmpty.js +19 -0
- package/dist/utils/jwt/index.d.ts +2 -0
- package/dist/utils/jwt/index.js +2 -0
- package/dist/utils/jwt/sign.d.ts +3 -0
- package/dist/utils/jwt/sign.js +5 -0
- package/dist/utils/jwt/verify.d.ts +3 -0
- package/dist/utils/jwt/verify.js +12 -0
- package/dist/utils/logger.d.ts +20 -0
- package/dist/utils/logger.js +38 -0
- package/dist/utils/s3/getClient.d.ts +3 -0
- package/dist/utils/s3/getClient.js +5 -0
- package/dist/utils/s3/getDownloadSignedUrl.d.ts +5 -0
- package/dist/utils/s3/getDownloadSignedUrl.js +39 -0
- package/dist/utils/s3/getHeadObject.d.ts +10 -0
- package/dist/utils/s3/getHeadObject.js +39 -0
- package/dist/utils/s3/getObject.d.ts +13 -0
- package/dist/utils/s3/getObject.js +51 -0
- package/dist/utils/s3/getUploadSignedUrl.d.ts +5 -0
- package/dist/utils/s3/getUploadSignedUrl.js +39 -0
- package/dist/utils/s3/index.d.ts +6 -0
- package/dist/utils/s3/index.js +6 -0
- package/dist/utils/s3/putObject.d.ts +5 -0
- package/dist/utils/s3/putObject.js +39 -0
- package/dist/utils/secretsmanager/getClient.d.ts +3 -0
- package/dist/utils/secretsmanager/getClient.js +5 -0
- package/dist/utils/secretsmanager/getSecretValue.d.ts +4 -0
- package/dist/utils/secretsmanager/getSecretValue.js +68 -0
- package/dist/utils/secretsmanager/index.d.ts +2 -0
- package/dist/utils/secretsmanager/index.js +2 -0
- package/dist/utils/sqs/deleteMessage.d.ts +5 -0
- package/dist/utils/sqs/deleteMessage.js +39 -0
- package/dist/utils/sqs/dispatch.d.ts +5 -0
- package/dist/utils/sqs/dispatch.js +39 -0
- package/dist/utils/sqs/getClient.d.ts +3 -0
- package/dist/utils/sqs/getClient.js +5 -0
- package/dist/utils/sqs/index.d.ts +4 -0
- package/dist/utils/sqs/index.js +4 -0
- package/dist/utils/sqs/receiveMessages.d.ts +5 -0
- package/dist/utils/sqs/receiveMessages.js +39 -0
- package/dist/utils/validateFields.d.ts +22 -0
- package/{src → dist}/utils/validateFields.js +13 -19
- package/package.json +145 -34
- package/src/exceptions/__tests__/LesgoException.spec.js +0 -24
- package/src/exceptions/index.js +0 -4
- package/src/index.js +0 -4
- package/src/middlewares/__mocks__/ValidationErrorException.js +0 -18
- package/src/middlewares/__tests__/basicAuthMiddleware.spec.js +0 -264
- package/src/middlewares/__tests__/clientAuthMiddleware.spec.js +0 -235
- package/src/middlewares/__tests__/errorHttpResponseMiddleware.spec.js +0 -203
- package/src/middlewares/__tests__/gzipHttpResponse.spec.js +0 -185
- package/src/middlewares/__tests__/httpNoOutputMiddleware.spec.js +0 -201
- package/src/middlewares/__tests__/normalizeHttpRequestMiddleware.spec.js +0 -181
- package/src/middlewares/__tests__/normalizeSQSMessageMiddleware.spec.js +0 -120
- package/src/middlewares/__tests__/successHttpResponseMiddleware.spec.js +0 -172
- package/src/middlewares/__tests__/verifyJwtMiddleware.spec.js +0 -297
- package/src/middlewares/basicAuthMiddleware.js +0 -125
- package/src/middlewares/clientAuthMiddleware.js +0 -103
- package/src/middlewares/errorHttpResponseMiddleware.js +0 -101
- package/src/middlewares/gzipHttpResponse.js +0 -98
- package/src/middlewares/httpMiddleware.js +0 -19
- package/src/middlewares/httpNoOutputMiddleware.js +0 -91
- package/src/middlewares/index.js +0 -19
- package/src/middlewares/normalizeHttpRequestMiddleware.js +0 -101
- package/src/middlewares/normalizeSQSMessageMiddleware.js +0 -67
- package/src/middlewares/successHttpResponseMiddleware.js +0 -85
- package/src/middlewares/verifyJwtMiddleware.js +0 -73
- package/src/services/AuroraDbRDSProxyService.js +0 -182
- package/src/services/AuroraDbService.js +0 -111
- package/src/services/DynamoDbService.js +0 -177
- package/src/services/ElastiCacheService.js +0 -17
- package/src/services/ElasticsearchService.js +0 -181
- package/src/services/FirebaseAdminService.js +0 -108
- package/src/services/JwtService.js +0 -52
- package/src/services/S3Service.js +0 -59
- package/src/services/SQSService.js +0 -65
- package/src/services/__tests__/AuroraDbRDSProxyService.spec.js +0 -278
- package/src/services/__tests__/AuroraDbService.spec.js +0 -211
- package/src/services/__tests__/AwsElasticsearchConnection.spec.js +0 -89
- package/src/services/__tests__/DynamoDbService.spec.js +0 -314
- package/src/services/__tests__/ElasticsearchService.spec.js +0 -201
- package/src/services/__tests__/FirebaseAdminService.spec.js +0 -356
- package/src/services/__tests__/JwtService.spec.js +0 -35
- package/src/services/__tests__/LengthAwarePaginator.spec.js +0 -223
- package/src/services/__tests__/LoggerService.spec.js +0 -267
- package/src/services/__tests__/Paginator.spec.js +0 -383
- package/src/services/__tests__/S3Service.spec.js +0 -55
- package/src/services/__tests__/SQSService.spec.js +0 -47
- package/src/services/__tests__/SignedRequest.spec.js +0 -103
- package/src/services/aws/AwsElasticsearchConnection.js +0 -59
- package/src/services/aws/SignedRequest.js +0 -158
- package/src/services/index.js +0 -19
- package/src/services/pagination/LengthAwarePaginator.js +0 -49
- package/src/services/pagination/Paginator.js +0 -260
- package/src/utils/__mocks__/db.js +0 -109
- package/src/utils/__tests__/cache.spec.js +0 -131
- package/src/utils/__tests__/crypto.spec.js +0 -122
- package/src/utils/__tests__/db.spec.js +0 -70
- package/src/utils/__tests__/dynamodb.spec.js +0 -27
- package/src/utils/__tests__/elasticsearch.spec.js +0 -43
- package/src/utils/__tests__/generateUid.spec.js +0 -36
- package/src/utils/__tests__/getJwtSubFromAuthHeader.spec.js +0 -20
- package/src/utils/__tests__/isDecimal.spec.js +0 -12
- package/src/utils/__tests__/isEmail.spec.js +0 -28
- package/src/utils/__tests__/isEmpty.spec.js +0 -31
- package/src/utils/__tests__/logger.spec.js +0 -11
- package/src/utils/__tests__/objectStore.spec.js +0 -67
- package/src/utils/__tests__/prepSQLInsertParams.spec.js +0 -46
- package/src/utils/__tests__/prepSQLUpdateParams.spec.js +0 -36
- package/src/utils/__tests__/queue.spec.js +0 -54
- package/src/utils/__tests__/validateFields.spec.js +0 -374
- package/src/utils/cache.js +0 -215
- package/src/utils/crypto.js +0 -77
- package/src/utils/db.js +0 -17
- package/src/utils/dynamodb.js +0 -6
- package/src/utils/elasticsearch.js +0 -20
- package/src/utils/getJwtSubFromAuthHeader.js +0 -18
- package/src/utils/index.js +0 -26
- package/src/utils/isDecimal.js +0 -2
- package/src/utils/isEmpty.js +0 -6
- package/src/utils/logger.js +0 -25
- package/src/utils/objectStore.js +0 -11
- package/src/utils/prepSQLInsertParams.js +0 -21
- package/src/utils/prepSQLUpdateParams.js +0 -25
- package/src/utils/queue.js +0 -11
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
var __awaiter =
|
|
2
|
+
(this && this.__awaiter) ||
|
|
3
|
+
function (thisArg, _arguments, P, generator) {
|
|
4
|
+
function adopt(value) {
|
|
5
|
+
return value instanceof P
|
|
6
|
+
? value
|
|
7
|
+
: new P(function (resolve) {
|
|
8
|
+
resolve(value);
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
12
|
+
function fulfilled(value) {
|
|
13
|
+
try {
|
|
14
|
+
step(generator.next(value));
|
|
15
|
+
} catch (e) {
|
|
16
|
+
reject(e);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function rejected(value) {
|
|
20
|
+
try {
|
|
21
|
+
step(generator['throw'](value));
|
|
22
|
+
} catch (e) {
|
|
23
|
+
reject(e);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function step(result) {
|
|
27
|
+
result.done
|
|
28
|
+
? resolve(result.value)
|
|
29
|
+
: adopt(result.value).then(fulfilled, rejected);
|
|
30
|
+
}
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
import { isEmpty, logger } from '../utils';
|
|
35
|
+
const FILE = 'lesgo.middlewares.httpResponseMiddleware';
|
|
36
|
+
const defaultOptions = {
|
|
37
|
+
debugMode: false,
|
|
38
|
+
headers: {
|
|
39
|
+
'Access-Control-Allow-Origin': '*',
|
|
40
|
+
'Cache-Control': 'no-cache',
|
|
41
|
+
'Content-Type': 'application/json',
|
|
42
|
+
},
|
|
43
|
+
isBase64Encoded: false,
|
|
44
|
+
};
|
|
45
|
+
const httpResponseMiddleware = (opts = {}) => {
|
|
46
|
+
const options = Object.assign(
|
|
47
|
+
Object.assign(Object.assign({}, defaultOptions), opts),
|
|
48
|
+
{
|
|
49
|
+
headers: Object.assign(
|
|
50
|
+
Object.assign({}, defaultOptions.headers),
|
|
51
|
+
opts.headers
|
|
52
|
+
),
|
|
53
|
+
}
|
|
54
|
+
);
|
|
55
|
+
const httpResponseMiddlewareAfter = request =>
|
|
56
|
+
__awaiter(void 0, void 0, void 0, function* () {
|
|
57
|
+
var _a;
|
|
58
|
+
let body;
|
|
59
|
+
if (options.headers['Content-Type'] !== 'application/json') {
|
|
60
|
+
body = request.response;
|
|
61
|
+
} else {
|
|
62
|
+
body = {
|
|
63
|
+
status: 'success',
|
|
64
|
+
data: request.response,
|
|
65
|
+
_meta: options.debugMode ? request.event : {},
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
const responseData = {
|
|
69
|
+
statusCode: 200,
|
|
70
|
+
headers: Object.assign(
|
|
71
|
+
Object.assign({}, options.headers),
|
|
72
|
+
(_a = request.response) === null || _a === void 0
|
|
73
|
+
? void 0
|
|
74
|
+
: _a.headers
|
|
75
|
+
),
|
|
76
|
+
body,
|
|
77
|
+
isBase64Encoded: options.isBase64Encoded,
|
|
78
|
+
};
|
|
79
|
+
logger.debug(`${FILE}::RESPONSE_DATA_SUCCESS`, responseData);
|
|
80
|
+
request.response = Object.assign(Object.assign({}, responseData), {
|
|
81
|
+
body:
|
|
82
|
+
options.headers['Content-Type'] === 'application/json'
|
|
83
|
+
? JSON.stringify(responseData.body)
|
|
84
|
+
: responseData.body,
|
|
85
|
+
});
|
|
86
|
+
});
|
|
87
|
+
const httpResponseMiddlewareOnError = request =>
|
|
88
|
+
__awaiter(void 0, void 0, void 0, function* () {
|
|
89
|
+
var _b;
|
|
90
|
+
const error = request.error;
|
|
91
|
+
if (error.extra && error.extra.statusCode) {
|
|
92
|
+
delete error.extra.statusCode;
|
|
93
|
+
}
|
|
94
|
+
const responseData = {
|
|
95
|
+
statusCode: error.statusCode || 500,
|
|
96
|
+
headers: Object.assign(
|
|
97
|
+
Object.assign({}, options.headers),
|
|
98
|
+
(_b = request.response) === null || _b === void 0
|
|
99
|
+
? void 0
|
|
100
|
+
: _b.headers
|
|
101
|
+
),
|
|
102
|
+
body: {
|
|
103
|
+
status: 'error',
|
|
104
|
+
data: null,
|
|
105
|
+
error: {
|
|
106
|
+
code: error.code || 'UNHANDLED_ERROR',
|
|
107
|
+
message: error.message || 'Unhandled error occurred',
|
|
108
|
+
details: error.extra || {},
|
|
109
|
+
},
|
|
110
|
+
_meta: options.debugMode ? request.event : {},
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
logger.debug(`${FILE}::RESPONSE_DATA_ERROR`, responseData);
|
|
114
|
+
request.response = Object.assign(Object.assign({}, responseData), {
|
|
115
|
+
body: JSON.stringify(responseData.body),
|
|
116
|
+
});
|
|
117
|
+
if (isEmpty(error.statusCode) || error.statusCode >= 500) {
|
|
118
|
+
logger.error(error.message, error);
|
|
119
|
+
} else {
|
|
120
|
+
logger.warn(error.message, error);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
return {
|
|
124
|
+
after: httpResponseMiddlewareAfter,
|
|
125
|
+
onError: httpResponseMiddlewareOnError,
|
|
126
|
+
};
|
|
127
|
+
};
|
|
128
|
+
export default httpResponseMiddleware;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { default as disconnectMiddleware } from './disconnectMiddleware';
|
|
2
|
+
export { default as httpMiddleware } from './httpMiddleware';
|
|
3
|
+
export { default as httpResponseMiddleware } from './httpResponseMiddleware';
|
|
4
|
+
export { default as invokeCommandMiddleware } from './invokeCommandMiddleware';
|
|
5
|
+
export { default as sqsMiddleware } from './sqsMiddleware';
|
|
6
|
+
export { default as verifyBasicAuthMiddleware } from './verifyBasicAuthMiddleware';
|
|
7
|
+
export { default as verifyJwtMiddleware } from './verifyJwtMiddleware';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { default as disconnectMiddleware } from './disconnectMiddleware';
|
|
2
|
+
export { default as httpMiddleware } from './httpMiddleware';
|
|
3
|
+
export { default as httpResponseMiddleware } from './httpResponseMiddleware';
|
|
4
|
+
export { default as invokeCommandMiddleware } from './invokeCommandMiddleware';
|
|
5
|
+
export { default as sqsMiddleware } from './sqsMiddleware';
|
|
6
|
+
export { default as verifyBasicAuthMiddleware } from './verifyBasicAuthMiddleware';
|
|
7
|
+
export { default as verifyJwtMiddleware } from './verifyJwtMiddleware';
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import middy from '@middy/core';
|
|
2
|
+
import { DisconnectMiddlewareOptions } from './disconnectMiddleware';
|
|
3
|
+
export interface InvokeCommandMiddlewareOptions extends DisconnectMiddlewareOptions {
|
|
4
|
+
debugMode?: boolean;
|
|
5
|
+
[key: string]: any;
|
|
6
|
+
}
|
|
7
|
+
declare const invokeCommandMiddleware: (opts?: InvokeCommandMiddlewareOptions) => {
|
|
8
|
+
before: (handler: middy.Request) => Promise<void>;
|
|
9
|
+
after: (handler: middy.Request) => Promise<void>;
|
|
10
|
+
onError: (handler: middy.Request) => Promise<void>;
|
|
11
|
+
};
|
|
12
|
+
export default invokeCommandMiddleware;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
var __awaiter =
|
|
2
|
+
(this && this.__awaiter) ||
|
|
3
|
+
function (thisArg, _arguments, P, generator) {
|
|
4
|
+
function adopt(value) {
|
|
5
|
+
return value instanceof P
|
|
6
|
+
? value
|
|
7
|
+
: new P(function (resolve) {
|
|
8
|
+
resolve(value);
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
12
|
+
function fulfilled(value) {
|
|
13
|
+
try {
|
|
14
|
+
step(generator.next(value));
|
|
15
|
+
} catch (e) {
|
|
16
|
+
reject(e);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function rejected(value) {
|
|
20
|
+
try {
|
|
21
|
+
step(generator['throw'](value));
|
|
22
|
+
} catch (e) {
|
|
23
|
+
reject(e);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function step(result) {
|
|
27
|
+
result.done
|
|
28
|
+
? resolve(result.value)
|
|
29
|
+
: adopt(result.value).then(fulfilled, rejected);
|
|
30
|
+
}
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
import eventNormalizer from '@middy/event-normalizer';
|
|
35
|
+
import doNotWaitForEmptyEventLoop from '@middy/do-not-wait-for-empty-event-loop';
|
|
36
|
+
import disconnectMiddleware from './disconnectMiddleware';
|
|
37
|
+
const invokeCommandMiddleware = (opts = {}) => {
|
|
38
|
+
const middlewarePackages = [
|
|
39
|
+
doNotWaitForEmptyEventLoop(),
|
|
40
|
+
eventNormalizer(),
|
|
41
|
+
disconnectMiddleware(opts),
|
|
42
|
+
];
|
|
43
|
+
return {
|
|
44
|
+
before: handler =>
|
|
45
|
+
__awaiter(void 0, void 0, void 0, function* () {
|
|
46
|
+
for (const middleware of middlewarePackages) {
|
|
47
|
+
if (middleware.before) {
|
|
48
|
+
yield middleware.before(handler);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}),
|
|
52
|
+
after: handler =>
|
|
53
|
+
__awaiter(void 0, void 0, void 0, function* () {
|
|
54
|
+
for (const middleware of middlewarePackages) {
|
|
55
|
+
if (middleware.after) {
|
|
56
|
+
yield middleware.after(handler);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}),
|
|
60
|
+
onError: handler =>
|
|
61
|
+
__awaiter(void 0, void 0, void 0, function* () {
|
|
62
|
+
for (const middleware of middlewarePackages) {
|
|
63
|
+
if (middleware.onError) {
|
|
64
|
+
yield middleware.onError(handler);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}),
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
export default invokeCommandMiddleware;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import middy from '@middy/core';
|
|
2
|
+
export interface HttpMiddlewareOptions {
|
|
3
|
+
debugMode?: boolean;
|
|
4
|
+
}
|
|
5
|
+
declare const httpMiddleware: () => {
|
|
6
|
+
before: (handler: middy.Request) => Promise<void>;
|
|
7
|
+
after: (handler: middy.Request) => Promise<void>;
|
|
8
|
+
onError: (handler: middy.Request) => Promise<void>;
|
|
9
|
+
};
|
|
10
|
+
export default httpMiddleware;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
var __awaiter =
|
|
2
|
+
(this && this.__awaiter) ||
|
|
3
|
+
function (thisArg, _arguments, P, generator) {
|
|
4
|
+
function adopt(value) {
|
|
5
|
+
return value instanceof P
|
|
6
|
+
? value
|
|
7
|
+
: new P(function (resolve) {
|
|
8
|
+
resolve(value);
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
12
|
+
function fulfilled(value) {
|
|
13
|
+
try {
|
|
14
|
+
step(generator.next(value));
|
|
15
|
+
} catch (e) {
|
|
16
|
+
reject(e);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function rejected(value) {
|
|
20
|
+
try {
|
|
21
|
+
step(generator['throw'](value));
|
|
22
|
+
} catch (e) {
|
|
23
|
+
reject(e);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function step(result) {
|
|
27
|
+
result.done
|
|
28
|
+
? resolve(result.value)
|
|
29
|
+
: adopt(result.value).then(fulfilled, rejected);
|
|
30
|
+
}
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
import eventNormalizer from '@middy/event-normalizer';
|
|
35
|
+
import doNotWaitForEmptyEventLoop from '@middy/do-not-wait-for-empty-event-loop';
|
|
36
|
+
import disconnectMiddleware from './disconnectMiddleware';
|
|
37
|
+
const httpMiddleware = () => {
|
|
38
|
+
const middlewarePackages = [
|
|
39
|
+
doNotWaitForEmptyEventLoop(),
|
|
40
|
+
eventNormalizer(),
|
|
41
|
+
disconnectMiddleware(),
|
|
42
|
+
];
|
|
43
|
+
return {
|
|
44
|
+
before: handler =>
|
|
45
|
+
__awaiter(void 0, void 0, void 0, function* () {
|
|
46
|
+
for (const middleware of middlewarePackages) {
|
|
47
|
+
if (middleware.before) {
|
|
48
|
+
yield middleware.before(handler);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}),
|
|
52
|
+
after: handler =>
|
|
53
|
+
__awaiter(void 0, void 0, void 0, function* () {
|
|
54
|
+
for (const middleware of middlewarePackages) {
|
|
55
|
+
if (middleware.after) {
|
|
56
|
+
yield middleware.after(handler);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}),
|
|
60
|
+
onError: handler =>
|
|
61
|
+
__awaiter(void 0, void 0, void 0, function* () {
|
|
62
|
+
for (const middleware of middlewarePackages) {
|
|
63
|
+
if (middleware.onError) {
|
|
64
|
+
yield middleware.onError(handler);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}),
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
export default httpMiddleware;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import middy from '@middy/core';
|
|
2
|
+
export interface VerifyBasicAuthMiddlewareOptions {
|
|
3
|
+
debugMode?: boolean;
|
|
4
|
+
}
|
|
5
|
+
declare const verifyBasicAuthMiddleware: (options?: VerifyBasicAuthMiddlewareOptions) => {
|
|
6
|
+
before: (request: middy.Request) => void;
|
|
7
|
+
};
|
|
8
|
+
export default verifyBasicAuthMiddleware;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import logger from '../utils/logger';
|
|
2
|
+
import { LesgoException } from '../exceptions';
|
|
3
|
+
import { validateFields } from '../utils';
|
|
4
|
+
import { basicAuth as basicAuthConfig } from '../config';
|
|
5
|
+
const FILE = 'lesgo.middlewares.verifyBasicAuthMiddleware';
|
|
6
|
+
const verifyBasicAuthMiddleware = (options = {}) => {
|
|
7
|
+
let decoded;
|
|
8
|
+
let input;
|
|
9
|
+
const verifyBasicAuth = basicAuth => {
|
|
10
|
+
if (basicAuth.includes('Basic')) {
|
|
11
|
+
basicAuth = basicAuth.replace('Basic ', '');
|
|
12
|
+
}
|
|
13
|
+
decoded = Buffer.from(basicAuth, 'base64').toString('utf8');
|
|
14
|
+
const [username, password] = decoded.split(':');
|
|
15
|
+
logger.debug(`${FILE}::BASIC_AUTH_DECODED`, { username, password });
|
|
16
|
+
try {
|
|
17
|
+
input = validateFields({ username, password }, [
|
|
18
|
+
{ key: 'username', type: 'string', required: true },
|
|
19
|
+
{ key: 'password', type: 'string', required: true },
|
|
20
|
+
]);
|
|
21
|
+
} catch (error) {
|
|
22
|
+
throw new LesgoException(
|
|
23
|
+
'Invalid basic auth due to missing fields',
|
|
24
|
+
`${FILE}::INVALID_BASIC_AUTH_MISSING_FIELDS`,
|
|
25
|
+
401,
|
|
26
|
+
error
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
const matchFound = basicAuthConfig.authorizedList.find(
|
|
30
|
+
a => a.username === username && a.password === password
|
|
31
|
+
);
|
|
32
|
+
if (!matchFound) {
|
|
33
|
+
throw new LesgoException(
|
|
34
|
+
'Invalid basic auth due to no match found',
|
|
35
|
+
`${FILE}::INVALID_BASIC_AUTH_NO_MATCH`,
|
|
36
|
+
401
|
|
37
|
+
);
|
|
38
|
+
}
|
|
39
|
+
return { username: input.username };
|
|
40
|
+
};
|
|
41
|
+
const verifyBasicAuthMiddlewareBefore = request => {
|
|
42
|
+
logger.debug(`${FILE}::BASIC_AUTH_TO_VERIFY`, { request, options });
|
|
43
|
+
const basicAuth = request.event.headers.authorization;
|
|
44
|
+
if (!basicAuth) {
|
|
45
|
+
throw new LesgoException(
|
|
46
|
+
'No basic auth provided',
|
|
47
|
+
`${FILE}::NO_BASIC_AUTH_PROVIDED`,
|
|
48
|
+
401
|
|
49
|
+
);
|
|
50
|
+
}
|
|
51
|
+
const decoded = verifyBasicAuth(basicAuth);
|
|
52
|
+
logger.debug(`${FILE}::BASIC_AUTH_VERIFIED`);
|
|
53
|
+
request.event.basicAuth = decoded;
|
|
54
|
+
};
|
|
55
|
+
return {
|
|
56
|
+
before: verifyBasicAuthMiddlewareBefore,
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
export default verifyBasicAuthMiddleware;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import middy from '@middy/core';
|
|
2
|
+
import { VerifyInputOptions } from '../services/JWTService/verify';
|
|
3
|
+
declare const verifyJwtMiddleware: (secret?: string, options?: VerifyInputOptions) => {
|
|
4
|
+
before: (request: middy.Request) => void;
|
|
5
|
+
};
|
|
6
|
+
export default verifyJwtMiddleware;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { verify } from '../utils/jwt';
|
|
2
|
+
import logger from '../utils/logger';
|
|
3
|
+
import { LesgoException } from '../exceptions';
|
|
4
|
+
const FILE = 'lesgo.middlewares.verifyJwtMiddleware';
|
|
5
|
+
const verifyJwtMiddleware = (secret, options) => {
|
|
6
|
+
const verifyJwt = (token, secret, opts) => {
|
|
7
|
+
try {
|
|
8
|
+
const decoded = verify(token, secret, opts);
|
|
9
|
+
return decoded;
|
|
10
|
+
} catch (error) {
|
|
11
|
+
throw new LesgoException(
|
|
12
|
+
'Error verifying JWT',
|
|
13
|
+
`${FILE}::ERROR_VERIFYING_JWT`,
|
|
14
|
+
401,
|
|
15
|
+
error
|
|
16
|
+
);
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
const verifyJwtMiddlewareBefore = request => {
|
|
20
|
+
logger.debug(`${FILE}::JWT_TO_VERIFY`, { request, options });
|
|
21
|
+
const token = request.event.headers.authorization;
|
|
22
|
+
if (!token) {
|
|
23
|
+
throw new LesgoException(
|
|
24
|
+
'No token provided',
|
|
25
|
+
`${FILE}::NO_TOKEN_PROVIDED`,
|
|
26
|
+
401
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
const decoded = verifyJwt(token, secret, options);
|
|
30
|
+
logger.debug(`${FILE}::JWT_VERIFIED`, { decoded });
|
|
31
|
+
request.event.jwt = decoded;
|
|
32
|
+
};
|
|
33
|
+
return {
|
|
34
|
+
before: verifyJwtMiddlewareBefore,
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
export default verifyJwtMiddleware;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { DeleteCommandInput, NativeAttributeValue } from '@aws-sdk/lib-dynamodb';
|
|
2
|
+
import { ClientOptions } from '../../types/aws';
|
|
3
|
+
export type Key = Record<string, NativeAttributeValue>;
|
|
4
|
+
export interface DeleteRecordOptions extends Partial<Omit<DeleteCommandInput, 'TableName'>> {
|
|
5
|
+
TableName?: string;
|
|
6
|
+
}
|
|
7
|
+
declare const deleteRecord: (key: Key, tableAlias: string, opts?: DeleteRecordOptions, clientOpts?: ClientOptions) => Promise<import("@aws-sdk/lib-dynamodb").DeleteCommandOutput>;
|
|
8
|
+
export default deleteRecord;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
var __awaiter =
|
|
2
|
+
(this && this.__awaiter) ||
|
|
3
|
+
function (thisArg, _arguments, P, generator) {
|
|
4
|
+
function adopt(value) {
|
|
5
|
+
return value instanceof P
|
|
6
|
+
? value
|
|
7
|
+
: new P(function (resolve) {
|
|
8
|
+
resolve(value);
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
12
|
+
function fulfilled(value) {
|
|
13
|
+
try {
|
|
14
|
+
step(generator.next(value));
|
|
15
|
+
} catch (e) {
|
|
16
|
+
reject(e);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function rejected(value) {
|
|
20
|
+
try {
|
|
21
|
+
step(generator['throw'](value));
|
|
22
|
+
} catch (e) {
|
|
23
|
+
reject(e);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function step(result) {
|
|
27
|
+
result.done
|
|
28
|
+
? resolve(result.value)
|
|
29
|
+
: adopt(result.value).then(fulfilled, rejected);
|
|
30
|
+
}
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
import { DeleteCommand } from '@aws-sdk/lib-dynamodb';
|
|
35
|
+
import LesgoException from '../../exceptions/LesgoException';
|
|
36
|
+
import { validateFields, logger } from '../../utils';
|
|
37
|
+
import getClient from './getClient';
|
|
38
|
+
import getTableName from './getTableName';
|
|
39
|
+
const FILE = 'lesgo.services.DynamoDbService.deleteRecord';
|
|
40
|
+
const deleteRecord = (key, tableAlias, opts, clientOpts) =>
|
|
41
|
+
__awaiter(void 0, void 0, void 0, function* () {
|
|
42
|
+
const input = validateFields({ key, tableAlias }, [
|
|
43
|
+
{ key: 'key', type: 'object', required: true },
|
|
44
|
+
{ key: 'tableAlias', type: 'string', required: true },
|
|
45
|
+
]);
|
|
46
|
+
const tableName = getTableName(input.tableAlias);
|
|
47
|
+
const client = getClient(clientOpts);
|
|
48
|
+
const commandInput = Object.assign(
|
|
49
|
+
{ TableName: tableName, Key: input.key },
|
|
50
|
+
opts
|
|
51
|
+
);
|
|
52
|
+
try {
|
|
53
|
+
const data = yield client.send(new DeleteCommand(commandInput));
|
|
54
|
+
logger.debug(`${FILE}::RECEIVED_RESPONSE`, { data, commandInput });
|
|
55
|
+
return data;
|
|
56
|
+
} catch (error) {
|
|
57
|
+
throw new LesgoException(
|
|
58
|
+
'Failed to delete record',
|
|
59
|
+
`${FILE}::ERROR`,
|
|
60
|
+
500,
|
|
61
|
+
{
|
|
62
|
+
error,
|
|
63
|
+
commandInput,
|
|
64
|
+
clientOpts,
|
|
65
|
+
}
|
|
66
|
+
);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
export default deleteRecord;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb';
|
|
2
|
+
import { ClientOptions } from '../../types/aws';
|
|
3
|
+
export interface Singleton {
|
|
4
|
+
[key: string]: DynamoDBDocumentClient;
|
|
5
|
+
}
|
|
6
|
+
declare const getClient: (opts?: ClientOptions) => DynamoDBDocumentClient;
|
|
7
|
+
export default getClient;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { DynamoDBClient } from '@aws-sdk/client-dynamodb';
|
|
2
|
+
import { DynamoDBDocumentClient } from '@aws-sdk/lib-dynamodb';
|
|
3
|
+
import { isEmpty, logger, validateFields } from '../../utils';
|
|
4
|
+
import { dynamodb as dynamodbConfig } from '../../config';
|
|
5
|
+
const FILE = 'lesgo.services.DynamoDbService.getClient';
|
|
6
|
+
const singleton = {};
|
|
7
|
+
const getClient = (opts = {}) => {
|
|
8
|
+
const options = validateFields(opts, [
|
|
9
|
+
{ key: 'region', type: 'string', required: false },
|
|
10
|
+
{ key: 'singletonConn', type: 'string', required: false },
|
|
11
|
+
]);
|
|
12
|
+
const region = options.region || dynamodbConfig.region;
|
|
13
|
+
const singletonConn = options.singletonConn || 'default';
|
|
14
|
+
if (!isEmpty(singleton[singletonConn])) {
|
|
15
|
+
logger.debug(`${FILE}::REUSE_CLIENT_SINGLETON`, {
|
|
16
|
+
client: singleton[singletonConn],
|
|
17
|
+
region,
|
|
18
|
+
});
|
|
19
|
+
return singleton[singletonConn];
|
|
20
|
+
}
|
|
21
|
+
const ddbClient = new DynamoDBClient({ region });
|
|
22
|
+
const client = DynamoDBDocumentClient.from(ddbClient);
|
|
23
|
+
logger.debug(`${FILE}::NEW_CLIENT_SINGLETON`, {
|
|
24
|
+
client,
|
|
25
|
+
region,
|
|
26
|
+
});
|
|
27
|
+
singleton[singletonConn] = client;
|
|
28
|
+
return client;
|
|
29
|
+
};
|
|
30
|
+
export default getClient;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { LesgoException } from '../../exceptions';
|
|
2
|
+
import dynamodbConfig from '../../config/dynamodb';
|
|
3
|
+
const FILE = 'lesgo.services.DynamoDbService.getTableName';
|
|
4
|
+
export default tableAlias => {
|
|
5
|
+
const table = dynamodbConfig.tables.find(t => t.alias === tableAlias);
|
|
6
|
+
if (!table) {
|
|
7
|
+
throw new LesgoException(
|
|
8
|
+
'Table not found',
|
|
9
|
+
`${FILE}::TABLE_NOT_FOUND`,
|
|
10
|
+
404,
|
|
11
|
+
{ tableAlias }
|
|
12
|
+
);
|
|
13
|
+
}
|
|
14
|
+
return table.name;
|
|
15
|
+
};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { default as deleteRecord } from './deleteRecord';
|
|
2
|
+
export { default as getClient } from './getClient';
|
|
3
|
+
export { default as putRecord } from './putRecord';
|
|
4
|
+
export { default as query } from './query';
|
|
5
|
+
export { default as scan } from './scan';
|
|
6
|
+
export { default as updateRecord } from './updateRecord';
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { default as deleteRecord } from './deleteRecord';
|
|
2
|
+
export { default as getClient } from './getClient';
|
|
3
|
+
export { default as putRecord } from './putRecord';
|
|
4
|
+
export { default as query } from './query';
|
|
5
|
+
export { default as scan } from './scan';
|
|
6
|
+
export { default as updateRecord } from './updateRecord';
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { NativeAttributeValue, PutCommandInput } from '@aws-sdk/lib-dynamodb';
|
|
2
|
+
import { ClientOptions } from '../../types/aws';
|
|
3
|
+
export interface PutRecordOptions extends Partial<Omit<PutCommandInput, 'TableName'>> {
|
|
4
|
+
TableName?: string;
|
|
5
|
+
}
|
|
6
|
+
export type Item = Record<string, NativeAttributeValue>;
|
|
7
|
+
declare const putRecord: (item: Item, tableAlias: string, opts?: PutRecordOptions, clientOpts?: ClientOptions) => Promise<import("@aws-sdk/lib-dynamodb").PutCommandOutput>;
|
|
8
|
+
export default putRecord;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
var __awaiter =
|
|
2
|
+
(this && this.__awaiter) ||
|
|
3
|
+
function (thisArg, _arguments, P, generator) {
|
|
4
|
+
function adopt(value) {
|
|
5
|
+
return value instanceof P
|
|
6
|
+
? value
|
|
7
|
+
: new P(function (resolve) {
|
|
8
|
+
resolve(value);
|
|
9
|
+
});
|
|
10
|
+
}
|
|
11
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
12
|
+
function fulfilled(value) {
|
|
13
|
+
try {
|
|
14
|
+
step(generator.next(value));
|
|
15
|
+
} catch (e) {
|
|
16
|
+
reject(e);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function rejected(value) {
|
|
20
|
+
try {
|
|
21
|
+
step(generator['throw'](value));
|
|
22
|
+
} catch (e) {
|
|
23
|
+
reject(e);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function step(result) {
|
|
27
|
+
result.done
|
|
28
|
+
? resolve(result.value)
|
|
29
|
+
: adopt(result.value).then(fulfilled, rejected);
|
|
30
|
+
}
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
import { PutCommand } from '@aws-sdk/lib-dynamodb';
|
|
35
|
+
import LesgoException from '../../exceptions/LesgoException';
|
|
36
|
+
import { validateFields, logger } from '../../utils';
|
|
37
|
+
import getTableName from './getTableName';
|
|
38
|
+
import getClient from './getClient';
|
|
39
|
+
const FILE = 'lesgo.services.DynamoDbService.putRecord';
|
|
40
|
+
const putRecord = (item, tableAlias, opts, clientOpts) =>
|
|
41
|
+
__awaiter(void 0, void 0, void 0, function* () {
|
|
42
|
+
const input = validateFields({ item, tableAlias }, [
|
|
43
|
+
{ key: 'item', type: 'object', required: true },
|
|
44
|
+
{ key: 'tableAlias', type: 'string', required: true },
|
|
45
|
+
]);
|
|
46
|
+
const tableName = getTableName(input.tableAlias);
|
|
47
|
+
const client = getClient(clientOpts);
|
|
48
|
+
const commandInput = Object.assign(
|
|
49
|
+
{ TableName: tableName, Item: input.item },
|
|
50
|
+
opts
|
|
51
|
+
);
|
|
52
|
+
try {
|
|
53
|
+
const resp = yield client.send(new PutCommand(commandInput));
|
|
54
|
+
logger.debug(`${FILE}::RECEIVED_RESPONSE`, { resp, commandInput });
|
|
55
|
+
return resp;
|
|
56
|
+
} catch (error) {
|
|
57
|
+
throw new LesgoException('Failed to put record', `${FILE}::ERROR`, 500, {
|
|
58
|
+
error,
|
|
59
|
+
commandInput,
|
|
60
|
+
clientOpts,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
export default putRecord;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { NativeAttributeValue, QueryCommandInput } from '@aws-sdk/lib-dynamodb';
|
|
2
|
+
import { ClientOptions } from '../../types/aws';
|
|
3
|
+
export interface QueryOptions extends Partial<Omit<QueryCommandInput, 'TableName'>> {
|
|
4
|
+
TableName?: string;
|
|
5
|
+
}
|
|
6
|
+
declare const query: (tableAlias: string, keyConditionExpression: string, expressionAttributeValues: Record<string, NativeAttributeValue>, opts?: QueryOptions, clientOpts?: ClientOptions) => Promise<import("@aws-sdk/lib-dynamodb").QueryCommandOutput>;
|
|
7
|
+
export default query;
|