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
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import zlib from 'zlib';
|
|
2
|
-
import LesgoException from '../exceptions/LesgoException';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Perform zipping and add neccessary header
|
|
6
|
-
*/
|
|
7
|
-
export const gzip = async response => {
|
|
8
|
-
return new Promise((resolve, reject) => {
|
|
9
|
-
try {
|
|
10
|
-
zlib.gzip(response.body, (error, gzippedResponse) => {
|
|
11
|
-
if (error) {
|
|
12
|
-
reject(new LesgoException(error.message, 'GZIP_LIB_ERROR'));
|
|
13
|
-
} else {
|
|
14
|
-
response.body = gzippedResponse.toString('base64');
|
|
15
|
-
response.isBase64Encoded = true;
|
|
16
|
-
response.headers = {
|
|
17
|
-
...response.headers,
|
|
18
|
-
'Content-Encoding': 'gzip',
|
|
19
|
-
};
|
|
20
|
-
resolve(response);
|
|
21
|
-
}
|
|
22
|
-
});
|
|
23
|
-
} catch (err) {
|
|
24
|
-
/* istanbul ignore next */
|
|
25
|
-
reject(new LesgoException(err.message, 'GZIP_UNKNOWN_ERROR', 500));
|
|
26
|
-
}
|
|
27
|
-
});
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Determine request origin
|
|
32
|
-
*/
|
|
33
|
-
export const determineRequestOrigin = handler => {
|
|
34
|
-
const { requestContext = {} } = handler.event;
|
|
35
|
-
let requestFrom = 'APIGATEWAY';
|
|
36
|
-
|
|
37
|
-
if (requestContext.elb) {
|
|
38
|
-
requestFrom = 'ELB';
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
if (requestContext.apiId) {
|
|
42
|
-
requestFrom = 'APIGATEWAY';
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
return requestFrom;
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Determine headers Accept-Encoding exist
|
|
50
|
-
*/
|
|
51
|
-
export const determineRequestAcceptEncoding = handler => {
|
|
52
|
-
const { headers } = handler.event;
|
|
53
|
-
|
|
54
|
-
let acceptEncoding =
|
|
55
|
-
headers['Accept-encoding'] ||
|
|
56
|
-
headers['accept-encoding'] ||
|
|
57
|
-
headers['Accept-Encoding'];
|
|
58
|
-
|
|
59
|
-
if (acceptEncoding) {
|
|
60
|
-
// normalise header
|
|
61
|
-
const re = / /g;
|
|
62
|
-
acceptEncoding = acceptEncoding
|
|
63
|
-
.replace(re, '')
|
|
64
|
-
.toLowerCase()
|
|
65
|
-
.split(',');
|
|
66
|
-
|
|
67
|
-
if (acceptEncoding.includes('gzip')) {
|
|
68
|
-
return true;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
return false;
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
export const gzipHttpResponse = async (handler, options = {}) => {
|
|
76
|
-
/*
|
|
77
|
-
* By default we zip on ELB request only, but you also add APIGATEWAY
|
|
78
|
-
* Supported Request [ELB, APIGATEWAY]
|
|
79
|
-
*/
|
|
80
|
-
let zipWhenRequest = ['ELB'];
|
|
81
|
-
if (options.zipWhenRequest) {
|
|
82
|
-
zipWhenRequest = options.zipWhenRequest;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
const requestFrom = determineRequestOrigin(handler);
|
|
86
|
-
|
|
87
|
-
if (
|
|
88
|
-
zipWhenRequest.includes(requestFrom) &&
|
|
89
|
-
determineRequestAcceptEncoding(handler)
|
|
90
|
-
) {
|
|
91
|
-
// eslint-disable-next-line no-param-reassign
|
|
92
|
-
handler.response = await gzip(handler.response);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
return handler.response;
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
export default gzipHttpResponse;
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { normalizeHttpRequestBeforeHandler } from './normalizeHttpRequestMiddleware';
|
|
2
|
-
import { successHttpResponseAfterHandler } from './successHttpResponseMiddleware';
|
|
3
|
-
import { errorHttpResponseAfterHandler } from './errorHttpResponseMiddleware';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Combines all http middlewares into a single middleware
|
|
7
|
-
*/
|
|
8
|
-
/* istanbul ignore next */
|
|
9
|
-
const httpMiddleware = opts => {
|
|
10
|
-
return {
|
|
11
|
-
before: (handler, next) => normalizeHttpRequestBeforeHandler(handler, next),
|
|
12
|
-
after: (handler, next) =>
|
|
13
|
-
successHttpResponseAfterHandler(handler, next, opts),
|
|
14
|
-
onError: (handler, next) =>
|
|
15
|
-
errorHttpResponseAfterHandler(handler, next, opts),
|
|
16
|
-
};
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
export default httpMiddleware;
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import app from 'Config/app'; // eslint-disable-line import/no-unresolved
|
|
2
|
-
import { normalizeHttpRequestBeforeHandler } from './normalizeHttpRequestMiddleware';
|
|
3
|
-
import { successHttpResponseHandler } from './successHttpResponseMiddleware';
|
|
4
|
-
import { errorHttpResponseHandler } from './errorHttpResponseMiddleware';
|
|
5
|
-
|
|
6
|
-
const allowResponse = () => {
|
|
7
|
-
return app.debug;
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
const successHttpNoOutputResponseHandler = async opts => {
|
|
11
|
-
const { queryStringParameters } = opts.event;
|
|
12
|
-
const debug = queryStringParameters && queryStringParameters.debug;
|
|
13
|
-
const response = await successHttpResponseHandler(opts);
|
|
14
|
-
const shouldAllowResponse = opts.allowResponse || allowResponse;
|
|
15
|
-
|
|
16
|
-
/* istanbul ignore next */
|
|
17
|
-
if (!debug || !shouldAllowResponse(opts)) {
|
|
18
|
-
response.body = '';
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
return response;
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
export const successHttpNoOutputResponseAfterHandler = async (
|
|
25
|
-
handler,
|
|
26
|
-
next,
|
|
27
|
-
opts
|
|
28
|
-
) => {
|
|
29
|
-
const defaults = {
|
|
30
|
-
response: handler.response,
|
|
31
|
-
event: handler.event,
|
|
32
|
-
allowResponse,
|
|
33
|
-
};
|
|
34
|
-
const options = { ...defaults, ...opts };
|
|
35
|
-
|
|
36
|
-
// eslint-disable-next-line no-param-reassign
|
|
37
|
-
handler.response = await successHttpNoOutputResponseHandler(options);
|
|
38
|
-
|
|
39
|
-
/* istanbul ignore next */
|
|
40
|
-
next();
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
const errorHttpResponseNoOutputHandler = async opts => {
|
|
44
|
-
const { queryStringParameters } = opts.event;
|
|
45
|
-
const debug = queryStringParameters && queryStringParameters.debug;
|
|
46
|
-
const response = await errorHttpResponseHandler({
|
|
47
|
-
...opts,
|
|
48
|
-
debugMode: opts.debugMode || debug,
|
|
49
|
-
});
|
|
50
|
-
const shouldAllowResponse = opts.allowResponse || allowResponse;
|
|
51
|
-
|
|
52
|
-
if (!debug || !shouldAllowResponse(opts)) {
|
|
53
|
-
response.statusCode = 200;
|
|
54
|
-
response.body = '';
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
return response;
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
export const errorHttpNoOutputResponseAfterHandler = async (
|
|
61
|
-
handler,
|
|
62
|
-
next,
|
|
63
|
-
opts
|
|
64
|
-
) => {
|
|
65
|
-
const defaults = {
|
|
66
|
-
error: handler.error,
|
|
67
|
-
event: handler.event,
|
|
68
|
-
logger: console.error, // eslint-disable-line no-console
|
|
69
|
-
allowResponse,
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
const options = { ...defaults, ...opts };
|
|
73
|
-
|
|
74
|
-
// eslint-disable-next-line no-param-reassign
|
|
75
|
-
handler.response = await errorHttpResponseNoOutputHandler(options);
|
|
76
|
-
/* istanbul ignore next */
|
|
77
|
-
next();
|
|
78
|
-
};
|
|
79
|
-
|
|
80
|
-
/* istanbul ignore next */
|
|
81
|
-
const httpNoOutputMiddleware = opts => {
|
|
82
|
-
return {
|
|
83
|
-
before: (handler, next) => normalizeHttpRequestBeforeHandler(handler, next),
|
|
84
|
-
after: (handler, next) =>
|
|
85
|
-
successHttpNoOutputResponseAfterHandler(handler, next, opts),
|
|
86
|
-
onError: (handler, next) =>
|
|
87
|
-
errorHttpNoOutputResponseAfterHandler(handler, next, opts),
|
|
88
|
-
};
|
|
89
|
-
};
|
|
90
|
-
|
|
91
|
-
export default httpNoOutputMiddleware;
|
package/src/middlewares/index.js
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import httpMiddleware from './httpMiddleware';
|
|
2
|
-
import normalizeHttpRequestMiddleware from './normalizeHttpRequestMiddleware';
|
|
3
|
-
import successHttpResponseMiddleware from './successHttpResponseMiddleware';
|
|
4
|
-
import errorHttpResponseMiddleware from './errorHttpResponseMiddleware';
|
|
5
|
-
import normalizeSQSMessageMiddleware from './normalizeSQSMessageMiddleware';
|
|
6
|
-
import verifyJwtMiddleware from './verifyJwtMiddleware';
|
|
7
|
-
import basicAuthMiddleware from './basicAuthMiddleware';
|
|
8
|
-
import clientAuthMiddleware from './clientAuthMiddleware';
|
|
9
|
-
|
|
10
|
-
export {
|
|
11
|
-
httpMiddleware,
|
|
12
|
-
normalizeHttpRequestMiddleware,
|
|
13
|
-
successHttpResponseMiddleware,
|
|
14
|
-
errorHttpResponseMiddleware,
|
|
15
|
-
normalizeSQSMessageMiddleware,
|
|
16
|
-
verifyJwtMiddleware,
|
|
17
|
-
basicAuthMiddleware,
|
|
18
|
-
clientAuthMiddleware,
|
|
19
|
-
};
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
import app from 'Config/app'; // eslint-disable-line import/no-unresolved
|
|
2
|
-
import getJwtSubFromAuthHeader from '../utils/getJwtSubFromAuthHeader';
|
|
3
|
-
import logger from '../utils/logger';
|
|
4
|
-
|
|
5
|
-
export const normalizeRequest = opts => {
|
|
6
|
-
const { headers, body } = opts;
|
|
7
|
-
let { qs } = opts;
|
|
8
|
-
let input = null;
|
|
9
|
-
|
|
10
|
-
// to be consistent with api gateway, we convert empty object to null
|
|
11
|
-
if (JSON.stringify(qs) === '{}') qs = null;
|
|
12
|
-
|
|
13
|
-
if (!headers && qs === null) return input;
|
|
14
|
-
|
|
15
|
-
if (qs !== null) input = qs;
|
|
16
|
-
|
|
17
|
-
const contentType = headers['Content-Type'] || headers['content-type'];
|
|
18
|
-
|
|
19
|
-
if (!contentType) return input;
|
|
20
|
-
|
|
21
|
-
/* istanbul ignore else */
|
|
22
|
-
if (contentType.startsWith('application/json')) {
|
|
23
|
-
try {
|
|
24
|
-
input = { ...input, ...JSON.parse(body) };
|
|
25
|
-
} catch (err) {
|
|
26
|
-
throw new Error(
|
|
27
|
-
'Content type defined as JSON but an invalid JSON was provided'
|
|
28
|
-
);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
return input;
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
export const normalizeHttpRequestBeforeHandler = (handler, next) => {
|
|
36
|
-
const options = {
|
|
37
|
-
headers: handler.event.headers,
|
|
38
|
-
qs: handler.event.queryStringParameters,
|
|
39
|
-
body: handler.event.body,
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
// eslint-disable-next-line no-param-reassign
|
|
43
|
-
handler.event.input = normalizeRequest(options);
|
|
44
|
-
|
|
45
|
-
const authHeader =
|
|
46
|
-
options.headers.Authorization || options.headers.authorization;
|
|
47
|
-
|
|
48
|
-
const auth = {};
|
|
49
|
-
if (authHeader) {
|
|
50
|
-
auth.sub = getJwtSubFromAuthHeader(authHeader);
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
// eslint-disable-next-line no-param-reassign
|
|
54
|
-
handler.event.auth = auth;
|
|
55
|
-
|
|
56
|
-
const tags = {};
|
|
57
|
-
switch (handler.event.version) {
|
|
58
|
-
case '2.0': {
|
|
59
|
-
if (handler.event.requestContext && handler.event.requestContext.http) {
|
|
60
|
-
tags.path = handler.event.requestContext.http.path;
|
|
61
|
-
tags.httpMethod = handler.event.requestContext.http.method;
|
|
62
|
-
}
|
|
63
|
-
break;
|
|
64
|
-
}
|
|
65
|
-
default:
|
|
66
|
-
tags.path = handler.event.path;
|
|
67
|
-
tags.httpMethod = handler.event.httpMethod;
|
|
68
|
-
break;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
logger.addMeta({
|
|
72
|
-
requestId: handler.event.requestContext
|
|
73
|
-
? handler.event.requestContext.requestId
|
|
74
|
-
: null,
|
|
75
|
-
tags,
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
if (app.debug) {
|
|
79
|
-
logger.addMeta({
|
|
80
|
-
auth: handler.event.auth,
|
|
81
|
-
queryStringParameters: options.qs,
|
|
82
|
-
body: options.body,
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/* istanbul ignore next */
|
|
87
|
-
next();
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
/**
|
|
91
|
-
* Normalizes handler.event.body and handler.event.queryStringParameters
|
|
92
|
-
* as handler.event.input Object
|
|
93
|
-
*/
|
|
94
|
-
/* istanbul ignore next */
|
|
95
|
-
const normalizeHttpRequestMiddleware = () => {
|
|
96
|
-
return {
|
|
97
|
-
before: (handler, next) => normalizeHttpRequestBeforeHandler(handler, next),
|
|
98
|
-
};
|
|
99
|
-
};
|
|
100
|
-
|
|
101
|
-
export default normalizeHttpRequestMiddleware;
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import logger from '../utils/logger';
|
|
2
|
-
import isEmpty from '../utils/isEmpty';
|
|
3
|
-
|
|
4
|
-
const FILE = 'Lesgo/middlewares/normalizeSQSMessageMiddleware';
|
|
5
|
-
|
|
6
|
-
export const normalizeHandler = records => {
|
|
7
|
-
let recordCount = 0;
|
|
8
|
-
|
|
9
|
-
if (!records || records === null || Object.keys(records).length === 0) {
|
|
10
|
-
recordCount = null;
|
|
11
|
-
} else {
|
|
12
|
-
recordCount = Object.keys(records).length;
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
logger.addMeta({ recordCount });
|
|
16
|
-
|
|
17
|
-
if (recordCount === null) return null;
|
|
18
|
-
|
|
19
|
-
return Object.values(records).map(record => ({
|
|
20
|
-
messageId: record.messageId,
|
|
21
|
-
receiptHandle: record.receiptHandle,
|
|
22
|
-
...JSON.parse(record.body),
|
|
23
|
-
}));
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
export const disconnectConnections = async opts => {
|
|
27
|
-
try {
|
|
28
|
-
const disconnect = [];
|
|
29
|
-
if (opts) {
|
|
30
|
-
if (!isEmpty(opts.cache)) disconnect.push(opts.cache.end());
|
|
31
|
-
if (!isEmpty(opts.db)) disconnect.push(opts.db.end());
|
|
32
|
-
if (!isEmpty(opts.dbRead)) disconnect.push(opts.dbRead.end());
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
if (disconnect.length > 0) {
|
|
36
|
-
await Promise.all(disconnect);
|
|
37
|
-
}
|
|
38
|
-
} catch (err) {
|
|
39
|
-
logger.error(`${FILE}::Failed to end connection`, err);
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
* Normalizes handler.event.Records as handler.event.collections Object.
|
|
45
|
-
* This type of request is received by SQS listeners
|
|
46
|
-
*/
|
|
47
|
-
/* istanbul ignore next */
|
|
48
|
-
const normalizeSQSMessageMiddleware /* istanbul ignore next */ = opts => {
|
|
49
|
-
return {
|
|
50
|
-
before: (handler, next) => {
|
|
51
|
-
const { Records } = handler.event;
|
|
52
|
-
// eslint-disable-next-line no-param-reassign
|
|
53
|
-
handler.event.collection = normalizeHandler(Records);
|
|
54
|
-
next();
|
|
55
|
-
},
|
|
56
|
-
after: async (handler, next) => {
|
|
57
|
-
await disconnectConnections(opts);
|
|
58
|
-
next();
|
|
59
|
-
},
|
|
60
|
-
onError: async (handler, next) => {
|
|
61
|
-
await disconnectConnections(opts);
|
|
62
|
-
next();
|
|
63
|
-
},
|
|
64
|
-
};
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
export default normalizeSQSMessageMiddleware;
|
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
import gzipHttpResponse from './gzipHttpResponse';
|
|
2
|
-
import isEmpty from '../utils/isEmpty';
|
|
3
|
-
import logger from '../utils/logger';
|
|
4
|
-
|
|
5
|
-
const FILE = 'Lesgo/middlewares/successHttpResponseMiddleware';
|
|
6
|
-
|
|
7
|
-
export const successHttpResponseHandler = async opts => {
|
|
8
|
-
const defaults = {
|
|
9
|
-
response: '',
|
|
10
|
-
statusCode: 200,
|
|
11
|
-
event: {},
|
|
12
|
-
debugMode: false,
|
|
13
|
-
headers: {
|
|
14
|
-
'Access-Control-Allow-Origin': '*',
|
|
15
|
-
'Cache-Control': 'no-cache',
|
|
16
|
-
'Content-Type': 'application/json',
|
|
17
|
-
},
|
|
18
|
-
};
|
|
19
|
-
|
|
20
|
-
const optionsHeadersMerged =
|
|
21
|
-
opts === undefined
|
|
22
|
-
? { ...defaults.headers }
|
|
23
|
-
: {
|
|
24
|
-
...opts,
|
|
25
|
-
headers: { ...defaults.headers, ...opts.headers },
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
const options = { ...defaults, ...optionsHeadersMerged };
|
|
29
|
-
|
|
30
|
-
try {
|
|
31
|
-
const disconnect = [];
|
|
32
|
-
if (!isEmpty(opts.cache)) disconnect.push(opts.cache.end());
|
|
33
|
-
if (!isEmpty(opts.db)) disconnect.push(opts.db.end());
|
|
34
|
-
if (!isEmpty(opts.dbRead)) disconnect.push(opts.dbRead.end());
|
|
35
|
-
|
|
36
|
-
if (disconnect.length > 0) {
|
|
37
|
-
await Promise.all(disconnect);
|
|
38
|
-
}
|
|
39
|
-
} catch (err) {
|
|
40
|
-
logger.error(`${FILE}::Failed to end connection`, err);
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
return {
|
|
44
|
-
headers: options.headers,
|
|
45
|
-
statusCode: options.statusCode,
|
|
46
|
-
body: options.formatSuccess
|
|
47
|
-
? options.formatSuccess(options)
|
|
48
|
-
: JSON.stringify({
|
|
49
|
-
status: 'success',
|
|
50
|
-
data: options.response,
|
|
51
|
-
_meta: options.debugMode ? options.event : {},
|
|
52
|
-
}),
|
|
53
|
-
};
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
export const successHttpResponseAfterHandler = async (handler, next, opts) => {
|
|
57
|
-
const defaults = {
|
|
58
|
-
response: handler.response,
|
|
59
|
-
event: handler.event,
|
|
60
|
-
};
|
|
61
|
-
|
|
62
|
-
const options = { ...defaults, ...opts };
|
|
63
|
-
|
|
64
|
-
// eslint-disable-next-line no-param-reassign
|
|
65
|
-
handler.response = await successHttpResponseHandler(options);
|
|
66
|
-
|
|
67
|
-
// eslint-disable-next-line no-param-reassign
|
|
68
|
-
handler.response = await gzipHttpResponse(handler, opts);
|
|
69
|
-
|
|
70
|
-
/* istanbul ignore next */
|
|
71
|
-
next();
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Formats response for successful responses
|
|
76
|
-
*/
|
|
77
|
-
/* istanbul ignore next */
|
|
78
|
-
const successHttpResponseMiddleware = opts => {
|
|
79
|
-
return {
|
|
80
|
-
after: (handler, next) =>
|
|
81
|
-
successHttpResponseAfterHandler(handler, next, opts),
|
|
82
|
-
};
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
export default successHttpResponseMiddleware;
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
import config from 'Config/jwt'; // eslint-disable-line import/no-unresolved
|
|
2
|
-
import JwtService from '../services/JwtService';
|
|
3
|
-
import LesgoException from '../exceptions/LesgoException';
|
|
4
|
-
|
|
5
|
-
export const token = headers => {
|
|
6
|
-
const authorizationHeader = headers.Authorization || headers.authorization;
|
|
7
|
-
|
|
8
|
-
if (!authorizationHeader) {
|
|
9
|
-
throw new LesgoException(
|
|
10
|
-
'Authorization Header is required!',
|
|
11
|
-
'JWT_MISSING_AUTHORIZATION_HEADER',
|
|
12
|
-
403
|
|
13
|
-
);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
const parsed = authorizationHeader.split(' ');
|
|
17
|
-
|
|
18
|
-
if (!parsed[1]) {
|
|
19
|
-
throw new LesgoException(
|
|
20
|
-
'Missing Bearer token!',
|
|
21
|
-
'JWT_MISSING_BEARER_TOKEN',
|
|
22
|
-
403
|
|
23
|
-
);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
return parsed[1];
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
export const verifyJwtMiddlewareBeforeHandler = async (handler, next, opts) => {
|
|
30
|
-
const { headers } = handler.event;
|
|
31
|
-
|
|
32
|
-
const finalConfig =
|
|
33
|
-
typeof opts !== 'undefined' && 'jwtConfig' in opts
|
|
34
|
-
? opts.jwtConfig
|
|
35
|
-
: config;
|
|
36
|
-
|
|
37
|
-
const { secret, callback } = finalConfig;
|
|
38
|
-
|
|
39
|
-
try {
|
|
40
|
-
const service = new JwtService(token(headers), {
|
|
41
|
-
...finalConfig,
|
|
42
|
-
...{
|
|
43
|
-
secret: typeof secret === 'function' ? secret(handler) : secret,
|
|
44
|
-
},
|
|
45
|
-
});
|
|
46
|
-
|
|
47
|
-
// eslint-disable-next-line no-param-reassign
|
|
48
|
-
handler.event.decodedJwt = service.validate().decoded;
|
|
49
|
-
|
|
50
|
-
if (typeof callback === 'function') {
|
|
51
|
-
await callback(handler);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
next();
|
|
55
|
-
} catch (err) {
|
|
56
|
-
if (err.name === 'JsonWebTokenError') {
|
|
57
|
-
throw new LesgoException(err.message, 'JWT_ERROR', 403, err);
|
|
58
|
-
} else if (err.name === 'TokenExpiredError') {
|
|
59
|
-
throw new LesgoException(err.message, 'JWT_EXPIRED', 403, err);
|
|
60
|
-
} else {
|
|
61
|
-
throw err;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
const verifyJwtMiddleware /* istanbul ignore next */ = opts => {
|
|
67
|
-
return {
|
|
68
|
-
before: (handler, next) =>
|
|
69
|
-
verifyJwtMiddlewareBeforeHandler(handler, next, opts),
|
|
70
|
-
};
|
|
71
|
-
};
|
|
72
|
-
|
|
73
|
-
export default verifyJwtMiddleware;
|