lesgo 0.7.8 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (318) hide show
  1. package/README.md +5 -4
  2. package/bin/lesgo-scripts.sh +52 -7
  3. package/dist/config/app.d.ts +7 -0
  4. package/dist/config/app.js +9 -0
  5. package/dist/config/aws.d.ts +5 -0
  6. package/dist/config/aws.js +4 -0
  7. package/dist/config/basicAuth.d.ts +7 -0
  8. package/dist/config/basicAuth.js +8 -0
  9. package/dist/config/crypto.d.ts +10 -0
  10. package/dist/config/crypto.js +9 -0
  11. package/dist/config/dynamodb.d.ts +8 -0
  12. package/dist/config/dynamodb.js +14 -0
  13. package/dist/config/elasticache.d.ts +7 -0
  14. package/dist/config/elasticache.js +6 -0
  15. package/dist/config/index.d.ts +11 -0
  16. package/dist/config/index.js +11 -0
  17. package/dist/config/jwt.d.ts +12 -0
  18. package/dist/config/jwt.js +16 -0
  19. package/dist/config/rds.d.ts +12 -0
  20. package/dist/config/rds.js +13 -0
  21. package/dist/config/s3.d.ts +5 -0
  22. package/dist/config/s3.js +5 -0
  23. package/dist/config/secretsManager.d.ts +4 -0
  24. package/dist/config/secretsManager.js +4 -0
  25. package/dist/config/sqs.d.ts +9 -0
  26. package/dist/config/sqs.js +18 -0
  27. package/dist/exceptions/LesgoException.d.ts +6 -0
  28. package/{src → dist}/exceptions/LesgoException.js +5 -4
  29. package/dist/exceptions/index.d.ts +1 -0
  30. package/dist/exceptions/index.js +1 -0
  31. package/dist/middlewares/disconnectMiddleware.d.ts +8 -0
  32. package/dist/middlewares/disconnectMiddleware.js +78 -0
  33. package/dist/middlewares/httpMiddleware.d.ts +12 -0
  34. package/dist/middlewares/httpMiddleware.js +74 -0
  35. package/dist/middlewares/httpResponseMiddleware.d.ts +7 -0
  36. package/dist/middlewares/httpResponseMiddleware.js +128 -0
  37. package/dist/middlewares/index.d.ts +7 -0
  38. package/dist/middlewares/index.js +7 -0
  39. package/dist/middlewares/invokeCommandMiddleware.d.ts +12 -0
  40. package/dist/middlewares/invokeCommandMiddleware.js +70 -0
  41. package/dist/middlewares/sqsMiddleware.d.ts +10 -0
  42. package/dist/middlewares/sqsMiddleware.js +70 -0
  43. package/dist/middlewares/verifyBasicAuthMiddleware.d.ts +8 -0
  44. package/dist/middlewares/verifyBasicAuthMiddleware.js +59 -0
  45. package/dist/middlewares/verifyJwtMiddleware.d.ts +6 -0
  46. package/dist/middlewares/verifyJwtMiddleware.js +37 -0
  47. package/dist/services/DynamoDbService/deleteRecord.d.ts +8 -0
  48. package/dist/services/DynamoDbService/deleteRecord.js +69 -0
  49. package/dist/services/DynamoDbService/getClient.d.ts +7 -0
  50. package/dist/services/DynamoDbService/getClient.js +30 -0
  51. package/dist/services/DynamoDbService/getTableName.d.ts +2 -0
  52. package/dist/services/DynamoDbService/getTableName.js +15 -0
  53. package/dist/services/DynamoDbService/index.d.ts +6 -0
  54. package/dist/services/DynamoDbService/index.js +6 -0
  55. package/dist/services/DynamoDbService/putRecord.d.ts +8 -0
  56. package/dist/services/DynamoDbService/putRecord.js +64 -0
  57. package/dist/services/DynamoDbService/query.d.ts +7 -0
  58. package/dist/services/DynamoDbService/query.js +78 -0
  59. package/dist/services/DynamoDbService/scan.d.ts +7 -0
  60. package/dist/services/DynamoDbService/scan.js +60 -0
  61. package/dist/services/DynamoDbService/updateRecord.d.ts +9 -0
  62. package/dist/services/DynamoDbService/updateRecord.js +89 -0
  63. package/dist/services/ElastiCacheRedisService/deleteRedisCache.d.ts +3 -0
  64. package/dist/services/ElastiCacheRedisService/deleteRedisCache.js +62 -0
  65. package/dist/services/ElastiCacheRedisService/disconnectElastiCacheRedisClient.d.ts +11 -0
  66. package/dist/services/ElastiCacheRedisService/disconnectElastiCacheRedisClient.js +69 -0
  67. package/dist/services/ElastiCacheRedisService/getElastiCacheRedisClient.d.ts +12 -0
  68. package/dist/services/ElastiCacheRedisService/getElastiCacheRedisClient.js +114 -0
  69. package/dist/services/ElastiCacheRedisService/getRedisCache.d.ts +3 -0
  70. package/dist/services/ElastiCacheRedisService/getRedisCache.js +70 -0
  71. package/dist/services/ElastiCacheRedisService/index.d.ts +5 -0
  72. package/dist/services/ElastiCacheRedisService/index.js +5 -0
  73. package/dist/services/ElastiCacheRedisService/setRedisCache.d.ts +6 -0
  74. package/dist/services/ElastiCacheRedisService/setRedisCache.js +77 -0
  75. package/dist/services/JWTService/decodeJwt.d.ts +7 -0
  76. package/dist/services/JWTService/decodeJwt.js +9 -0
  77. package/dist/services/JWTService/getJwtSecret.d.ts +13 -0
  78. package/dist/services/JWTService/getJwtSecret.js +54 -0
  79. package/dist/services/JWTService/index.d.ts +2 -0
  80. package/dist/services/JWTService/index.js +2 -0
  81. package/dist/services/JWTService/sign.d.ts +3 -0
  82. package/dist/services/JWTService/sign.js +31 -0
  83. package/dist/services/JWTService/verify.d.ts +7 -0
  84. package/dist/services/JWTService/verify.js +61 -0
  85. package/dist/services/LoggerService.d.ts +46 -0
  86. package/{src → dist}/services/LoggerService.js +36 -60
  87. package/dist/services/RDSAuroraMySQLProxyService/disconnectMySQLProxyClient.d.ts +2 -0
  88. package/dist/services/RDSAuroraMySQLProxyService/disconnectMySQLProxyClient.js +60 -0
  89. package/dist/services/RDSAuroraMySQLProxyService/getMySQLProxyClient.d.ts +8 -0
  90. package/dist/services/RDSAuroraMySQLProxyService/getMySQLProxyClient.js +87 -0
  91. package/dist/services/RDSAuroraMySQLProxyService/index.d.ts +3 -0
  92. package/dist/services/RDSAuroraMySQLProxyService/index.js +3 -0
  93. package/dist/services/RDSAuroraMySQLProxyService/query.d.ts +4 -0
  94. package/dist/services/RDSAuroraMySQLProxyService/query.js +63 -0
  95. package/dist/services/S3Service/getClient.d.ts +4 -0
  96. package/dist/services/S3Service/getClient.js +28 -0
  97. package/dist/services/S3Service/getDownloadSignedUrl.d.ts +7 -0
  98. package/dist/services/S3Service/getDownloadSignedUrl.js +58 -0
  99. package/dist/services/S3Service/getHeadObject.d.ts +13 -0
  100. package/dist/services/S3Service/getHeadObject.js +83 -0
  101. package/dist/services/S3Service/getObject.d.ts +10 -0
  102. package/dist/services/S3Service/getObject.js +89 -0
  103. package/dist/services/S3Service/getUploadSignedUrl.d.ts +7 -0
  104. package/dist/services/S3Service/getUploadSignedUrl.js +61 -0
  105. package/dist/services/S3Service/index.d.ts +6 -0
  106. package/dist/services/S3Service/index.js +6 -0
  107. package/dist/services/S3Service/putObject.d.ts +9 -0
  108. package/dist/services/S3Service/putObject.js +77 -0
  109. package/dist/services/SQSService/deleteMessage.d.ts +9 -0
  110. package/dist/services/SQSService/deleteMessage.js +69 -0
  111. package/dist/services/SQSService/dispatch.d.ts +9 -0
  112. package/dist/services/SQSService/dispatch.js +71 -0
  113. package/dist/services/SQSService/getClient.d.ts +4 -0
  114. package/dist/services/SQSService/getClient.js +28 -0
  115. package/dist/services/SQSService/getQueueUrl.d.ts +7 -0
  116. package/dist/services/SQSService/getQueueUrl.js +25 -0
  117. package/dist/services/SQSService/index.d.ts +4 -0
  118. package/dist/services/SQSService/index.js +4 -0
  119. package/dist/services/SQSService/receiveMessages.d.ts +8 -0
  120. package/dist/services/SQSService/receiveMessages.js +65 -0
  121. package/dist/services/SecretsManagerService/getClient.d.ts +7 -0
  122. package/dist/services/SecretsManagerService/getClient.js +28 -0
  123. package/dist/services/SecretsManagerService/getSecretValue.d.ts +7 -0
  124. package/dist/services/SecretsManagerService/getSecretValue.js +65 -0
  125. package/dist/services/SecretsManagerService/index.d.ts +2 -0
  126. package/dist/services/SecretsManagerService/index.js +2 -0
  127. package/dist/services/index.d.ts +1 -0
  128. package/dist/services/index.js +1 -0
  129. package/dist/types/aws.d.ts +8 -0
  130. package/dist/types/aws.js +1 -0
  131. package/dist/utils/cache/redis/deleteCache.d.ts +19 -0
  132. package/dist/utils/cache/redis/deleteCache.js +21 -0
  133. package/dist/utils/cache/redis/getCache.d.ts +22 -0
  134. package/dist/utils/cache/redis/getCache.js +24 -0
  135. package/dist/utils/cache/redis/getClient.d.ts +30 -0
  136. package/dist/utils/cache/redis/getClient.js +32 -0
  137. package/dist/utils/cache/redis/index.d.ts +4 -0
  138. package/dist/utils/cache/redis/index.js +4 -0
  139. package/dist/utils/cache/redis/setCache.d.ts +25 -0
  140. package/dist/utils/cache/redis/setCache.js +26 -0
  141. package/dist/utils/crypto/decrypt.d.ts +33 -0
  142. package/dist/utils/crypto/decrypt.js +59 -0
  143. package/dist/utils/crypto/encrypt.d.ts +31 -0
  144. package/dist/utils/crypto/encrypt.js +41 -0
  145. package/dist/utils/crypto/hash.d.ts +31 -0
  146. package/dist/utils/crypto/hash.js +56 -0
  147. package/dist/utils/crypto/index.d.ts +3 -0
  148. package/dist/utils/crypto/index.js +3 -0
  149. package/dist/utils/crypto/validateEncryptionFields.d.ts +19 -0
  150. package/dist/utils/crypto/validateEncryptionFields.js +71 -0
  151. package/dist/utils/db/mysql/proxy/disconnect.d.ts +2 -0
  152. package/dist/utils/db/mysql/proxy/disconnect.js +5 -0
  153. package/dist/utils/db/mysql/proxy/disconnectDb.d.ts +2 -0
  154. package/dist/utils/db/mysql/proxy/disconnectDb.js +5 -0
  155. package/dist/utils/db/mysql/proxy/getClient.d.ts +4 -0
  156. package/dist/utils/db/mysql/proxy/getClient.js +5 -0
  157. package/dist/utils/db/mysql/proxy/index.d.ts +3 -0
  158. package/dist/utils/db/mysql/proxy/index.js +3 -0
  159. package/dist/utils/db/mysql/proxy/query.d.ts +4 -0
  160. package/dist/utils/db/mysql/proxy/query.js +45 -0
  161. package/dist/utils/dynamodb/deleteRecord.d.ts +5 -0
  162. package/dist/utils/dynamodb/deleteRecord.js +39 -0
  163. package/dist/utils/dynamodb/getClient.d.ts +3 -0
  164. package/dist/utils/dynamodb/getClient.js +5 -0
  165. package/dist/utils/dynamodb/index.d.ts +6 -0
  166. package/dist/utils/dynamodb/index.js +6 -0
  167. package/dist/utils/dynamodb/putRecord.d.ts +4 -0
  168. package/dist/utils/dynamodb/putRecord.js +39 -0
  169. package/dist/utils/dynamodb/query.d.ts +5 -0
  170. package/dist/utils/dynamodb/query.js +52 -0
  171. package/dist/utils/dynamodb/scan.d.ts +4 -0
  172. package/dist/utils/dynamodb/scan.js +40 -0
  173. package/dist/utils/dynamodb/updateRecord.d.ts +5 -0
  174. package/dist/utils/dynamodb/updateRecord.js +53 -0
  175. package/dist/utils/formatUnixTimestamp.d.ts +8 -0
  176. package/dist/utils/formatUnixTimestamp.js +17 -0
  177. package/dist/utils/generateUid.d.ts +13 -0
  178. package/{src → dist}/utils/generateUid.js +9 -4
  179. package/dist/utils/getCurrentDatetime.d.ts +2 -0
  180. package/dist/utils/getCurrentDatetime.js +4 -0
  181. package/dist/utils/getCurrentTimestamp.d.ts +7 -0
  182. package/dist/utils/getCurrentTimestamp.js +9 -0
  183. package/dist/utils/getJwtSubFromAuthHeader.d.ts +9 -0
  184. package/dist/utils/getJwtSubFromAuthHeader.js +24 -0
  185. package/dist/utils/index.d.ts +9 -0
  186. package/dist/utils/index.js +9 -0
  187. package/dist/utils/isDecimal.d.ts +8 -0
  188. package/dist/utils/isDecimal.js +9 -0
  189. package/dist/utils/isEmail.d.ts +9 -0
  190. package/{src → dist}/utils/isEmail.js +9 -4
  191. package/dist/utils/isEmpty.d.ts +8 -0
  192. package/dist/utils/isEmpty.js +19 -0
  193. package/dist/utils/jwt/index.d.ts +2 -0
  194. package/dist/utils/jwt/index.js +2 -0
  195. package/dist/utils/jwt/sign.d.ts +3 -0
  196. package/dist/utils/jwt/sign.js +5 -0
  197. package/dist/utils/jwt/verify.d.ts +3 -0
  198. package/dist/utils/jwt/verify.js +12 -0
  199. package/dist/utils/logger.d.ts +20 -0
  200. package/dist/utils/logger.js +38 -0
  201. package/dist/utils/s3/getClient.d.ts +3 -0
  202. package/dist/utils/s3/getClient.js +5 -0
  203. package/dist/utils/s3/getDownloadSignedUrl.d.ts +5 -0
  204. package/dist/utils/s3/getDownloadSignedUrl.js +39 -0
  205. package/dist/utils/s3/getHeadObject.d.ts +10 -0
  206. package/dist/utils/s3/getHeadObject.js +39 -0
  207. package/dist/utils/s3/getObject.d.ts +13 -0
  208. package/dist/utils/s3/getObject.js +51 -0
  209. package/dist/utils/s3/getUploadSignedUrl.d.ts +5 -0
  210. package/dist/utils/s3/getUploadSignedUrl.js +39 -0
  211. package/dist/utils/s3/index.d.ts +6 -0
  212. package/dist/utils/s3/index.js +6 -0
  213. package/dist/utils/s3/putObject.d.ts +5 -0
  214. package/dist/utils/s3/putObject.js +39 -0
  215. package/dist/utils/secretsmanager/getClient.d.ts +3 -0
  216. package/dist/utils/secretsmanager/getClient.js +5 -0
  217. package/dist/utils/secretsmanager/getSecretValue.d.ts +4 -0
  218. package/dist/utils/secretsmanager/getSecretValue.js +68 -0
  219. package/dist/utils/secretsmanager/index.d.ts +2 -0
  220. package/dist/utils/secretsmanager/index.js +2 -0
  221. package/dist/utils/sqs/deleteMessage.d.ts +5 -0
  222. package/dist/utils/sqs/deleteMessage.js +39 -0
  223. package/dist/utils/sqs/dispatch.d.ts +5 -0
  224. package/dist/utils/sqs/dispatch.js +39 -0
  225. package/dist/utils/sqs/getClient.d.ts +3 -0
  226. package/dist/utils/sqs/getClient.js +5 -0
  227. package/dist/utils/sqs/index.d.ts +4 -0
  228. package/dist/utils/sqs/index.js +4 -0
  229. package/dist/utils/sqs/receiveMessages.d.ts +5 -0
  230. package/dist/utils/sqs/receiveMessages.js +39 -0
  231. package/dist/utils/validateFields.d.ts +22 -0
  232. package/{src → dist}/utils/validateFields.js +13 -19
  233. package/package.json +145 -34
  234. package/CHANGELOG.md +0 -9
  235. package/src/exceptions/__tests__/LesgoException.spec.js +0 -24
  236. package/src/exceptions/index.js +0 -4
  237. package/src/index.js +0 -4
  238. package/src/middlewares/__mocks__/ValidationErrorException.js +0 -18
  239. package/src/middlewares/__tests__/basicAuthMiddleware.spec.js +0 -225
  240. package/src/middlewares/__tests__/clientAuthMiddleware.spec.js +0 -137
  241. package/src/middlewares/__tests__/errorHttpResponseMiddleware.spec.js +0 -190
  242. package/src/middlewares/__tests__/gzipHttpResponse.spec.js +0 -185
  243. package/src/middlewares/__tests__/httpNoOutputMiddleware.spec.js +0 -199
  244. package/src/middlewares/__tests__/normalizeHttpRequestMiddleware.spec.js +0 -181
  245. package/src/middlewares/__tests__/normalizeSQSMessageMiddleware.spec.js +0 -120
  246. package/src/middlewares/__tests__/serverAuthMiddleware.spec.js +0 -170
  247. package/src/middlewares/__tests__/successHttpResponseMiddleware.spec.js +0 -159
  248. package/src/middlewares/__tests__/verifyJwtMiddleware.spec.js +0 -222
  249. package/src/middlewares/basicAuthMiddleware.js +0 -145
  250. package/src/middlewares/clientAuthMiddleware.js +0 -82
  251. package/src/middlewares/errorHttpResponseMiddleware.js +0 -99
  252. package/src/middlewares/gzipHttpResponse.js +0 -98
  253. package/src/middlewares/httpMiddleware.js +0 -19
  254. package/src/middlewares/httpNoOutputMiddleware.js +0 -87
  255. package/src/middlewares/index.js +0 -15
  256. package/src/middlewares/normalizeHttpRequestMiddleware.js +0 -101
  257. package/src/middlewares/normalizeSQSMessageMiddleware.js +0 -67
  258. package/src/middlewares/serverAuthMiddleware.js +0 -29
  259. package/src/middlewares/successHttpResponseMiddleware.js +0 -83
  260. package/src/middlewares/verifyJwtMiddleware.js +0 -62
  261. package/src/services/AuroraDbRDSProxyService.js +0 -182
  262. package/src/services/AuroraDbService.js +0 -111
  263. package/src/services/DynamoDbService.js +0 -177
  264. package/src/services/ElastiCacheService.js +0 -17
  265. package/src/services/ElasticsearchService.js +0 -181
  266. package/src/services/FirebaseAdminService.js +0 -108
  267. package/src/services/JwtService.js +0 -52
  268. package/src/services/S3Service.js +0 -59
  269. package/src/services/SQSService.js +0 -65
  270. package/src/services/__tests__/AuroraDbRDSProxyService.spec.js +0 -278
  271. package/src/services/__tests__/AuroraDbService.spec.js +0 -211
  272. package/src/services/__tests__/AwsElasticsearchConnection.spec.js +0 -89
  273. package/src/services/__tests__/DynamoDbService.spec.js +0 -314
  274. package/src/services/__tests__/ElasticsearchService.spec.js +0 -201
  275. package/src/services/__tests__/FirebaseAdminService.spec.js +0 -356
  276. package/src/services/__tests__/JwtService.spec.js +0 -35
  277. package/src/services/__tests__/LengthAwarePaginator.spec.js +0 -223
  278. package/src/services/__tests__/LoggerService.spec.js +0 -252
  279. package/src/services/__tests__/Paginator.spec.js +0 -383
  280. package/src/services/__tests__/S3Service.spec.js +0 -55
  281. package/src/services/__tests__/SQSService.spec.js +0 -47
  282. package/src/services/__tests__/SignedRequest.spec.js +0 -103
  283. package/src/services/aws/AwsElasticsearchConnection.js +0 -59
  284. package/src/services/aws/SignedRequest.js +0 -158
  285. package/src/services/index.js +0 -19
  286. package/src/services/pagination/LengthAwarePaginator.js +0 -49
  287. package/src/services/pagination/Paginator.js +0 -260
  288. package/src/utils/__mocks__/db.js +0 -109
  289. package/src/utils/__tests__/cache.spec.js +0 -131
  290. package/src/utils/__tests__/crypto.spec.js +0 -122
  291. package/src/utils/__tests__/db.spec.js +0 -70
  292. package/src/utils/__tests__/dynamodb.spec.js +0 -27
  293. package/src/utils/__tests__/elasticsearch.spec.js +0 -43
  294. package/src/utils/__tests__/generateUid.spec.js +0 -36
  295. package/src/utils/__tests__/getJwtSubFromAuthHeader.spec.js +0 -20
  296. package/src/utils/__tests__/isDecimal.spec.js +0 -12
  297. package/src/utils/__tests__/isEmail.spec.js +0 -28
  298. package/src/utils/__tests__/isEmpty.spec.js +0 -31
  299. package/src/utils/__tests__/logger.spec.js +0 -11
  300. package/src/utils/__tests__/objectStore.spec.js +0 -67
  301. package/src/utils/__tests__/prepSQLInsertParams.spec.js +0 -46
  302. package/src/utils/__tests__/prepSQLUpdateParams.spec.js +0 -36
  303. package/src/utils/__tests__/queue.spec.js +0 -54
  304. package/src/utils/__tests__/validateFields.spec.js +0 -374
  305. package/src/utils/cache.js +0 -215
  306. package/src/utils/crypto.js +0 -77
  307. package/src/utils/db.js +0 -17
  308. package/src/utils/dynamodb.js +0 -6
  309. package/src/utils/elasticsearch.js +0 -20
  310. package/src/utils/getJwtSubFromAuthHeader.js +0 -18
  311. package/src/utils/index.js +0 -26
  312. package/src/utils/isDecimal.js +0 -2
  313. package/src/utils/isEmpty.js +0 -6
  314. package/src/utils/logger.js +0 -25
  315. package/src/utils/objectStore.js +0 -11
  316. package/src/utils/prepSQLInsertParams.js +0 -21
  317. package/src/utils/prepSQLUpdateParams.js +0 -25
  318. package/src/utils/queue.js +0 -11
@@ -1,82 +0,0 @@
1
- import client from 'Config/client'; // eslint-disable-line import/no-unresolved
2
- import { errorHttpResponseAfterHandler } from './errorHttpResponseMiddleware';
3
- import validateFields from '../utils/validateFields';
4
- import { LesgoException } from '../exceptions';
5
-
6
- const FILE = 'Middlewares/clientAuthMiddleware';
7
-
8
- const validateParams = params => {
9
- const validFields = [
10
- { key: 'x-client-id', type: 'string', required: true },
11
- { key: 'client', type: 'object', required: true },
12
- ];
13
-
14
- try {
15
- return validateFields(params, validFields);
16
- } catch (error) {
17
- throw new LesgoException(error.message, `${FILE}::INVALID_AUTH_DATA`, 403, {
18
- error,
19
- });
20
- }
21
- };
22
-
23
- const getClientKey = event => {
24
- if (typeof event.headers['x-client-id'] === 'string') {
25
- return event.headers['x-client-id'];
26
- }
27
-
28
- if (event.input && typeof event.input.clientid === 'string') {
29
- return event.input.clientid;
30
- }
31
-
32
- return undefined;
33
- };
34
-
35
- export const clientAuthMiddlewareBeforeHandler = (
36
- handler,
37
- next,
38
- opt = undefined
39
- ) => {
40
- const validated = validateParams({
41
- 'x-client-id': getClientKey(handler.event),
42
- client,
43
- });
44
-
45
- const clientKey = validated['x-client-id'];
46
-
47
- const platform = Object.keys(validated.client).filter(clientPlatform => {
48
- return validated.client[clientPlatform].key === clientKey;
49
- });
50
-
51
- if (platform.length === 0) {
52
- throw new LesgoException(
53
- 'Invalid ClientId provided',
54
- `${FILE}::INVALID_CLIENT_ID`,
55
- 403,
56
- 'Ensure you are using the correct Client Id provided'
57
- );
58
- }
59
-
60
- // eslint-disable-next-line no-param-reassign,prefer-destructuring
61
- handler.event.platform = platform[0];
62
-
63
- if (typeof opt === 'function') {
64
- opt(handler);
65
- } else if (typeof opt === 'object') {
66
- const { callback } = opt;
67
- if (typeof callback === 'function') callback(handler);
68
- }
69
-
70
- next();
71
- };
72
-
73
- /* istanbul ignore next */
74
- const clientAuthMiddleware = opt => {
75
- return {
76
- before: (handler, next) =>
77
- clientAuthMiddlewareBeforeHandler(handler, next, opt),
78
- onError: (handler, next) => errorHttpResponseAfterHandler(handler, next),
79
- };
80
- };
81
-
82
- export default clientAuthMiddleware;
@@ -1,99 +0,0 @@
1
- import logger from '../utils/logger';
2
- import isEmpty from '../utils/isEmpty';
3
-
4
- const FILE = 'Lesgo/middlewares/errorHttpResponseMiddleware';
5
-
6
- export const errorHttpResponseHandler = async opts => {
7
- const defaults = {
8
- response: '',
9
- statusCode: 500,
10
- event: {},
11
- debugMode: false,
12
- headers: {
13
- 'Access-Control-Allow-Origin': '*',
14
- 'Cache-Control': 'no-cache',
15
- 'Content-Type': 'application/json',
16
- },
17
- error: '',
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
- const jsonBody = {
31
- status: 'error',
32
- data: null,
33
- error: {
34
- code: options.error.code || 'UNHANDLED_ERROR',
35
- message: options.error.name
36
- ? `${options.error.name}: ${options.error.message}`
37
- : options.error.message || options.error,
38
- details: options.error.extra || '',
39
- },
40
- _meta: options.debugMode ? options.event : {},
41
- };
42
-
43
- const statusCode = options.error.statusCode || options.statusCode;
44
-
45
- if (!isEmpty(options.error)) {
46
- logger.log(statusCode === 500 ? 'error' : 'warn', options.error);
47
- } else {
48
- logger.log(statusCode === 500 ? 'error' : 'warn', jsonBody.error.message, {
49
- error: jsonBody.error,
50
- });
51
- }
52
-
53
- try {
54
- const disconnect = [];
55
- if (!isEmpty(opts.cache)) disconnect.push(opts.cache.end());
56
- if (!isEmpty(opts.db)) disconnect.push(opts.db.end());
57
- if (!isEmpty(opts.dbRead)) disconnect.push(opts.dbRead.end());
58
-
59
- if (disconnect.length > 0) {
60
- await Promise.all(disconnect);
61
- }
62
- } catch (err) {
63
- logger.error(`${FILE}::Failed to end connection`, err);
64
- }
65
-
66
- return {
67
- headers: options.headers,
68
- statusCode,
69
- body: JSON.stringify(jsonBody),
70
- };
71
- };
72
-
73
- export const errorHttpResponseAfterHandler = async (handler, next, opts) => {
74
- const defaults = {
75
- error: handler.error,
76
- event: handler.event,
77
- logger: console.error, // eslint-disable-line no-console
78
- };
79
-
80
- const options = { ...defaults, ...opts };
81
-
82
- // eslint-disable-next-line no-param-reassign
83
- handler.response = await errorHttpResponseHandler(options);
84
- /* istanbul ignore next */
85
- next();
86
- };
87
-
88
- /**
89
- * Formats response for error responses
90
- */
91
- /* istanbul ignore next */
92
- const errorHttpResponseMiddleware = opts => {
93
- return {
94
- onError: (handler, next) =>
95
- errorHttpResponseAfterHandler(handler, next, opts),
96
- };
97
- };
98
-
99
- export default errorHttpResponseMiddleware;
@@ -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,87 +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 successHttpNoOutputResponseHandler = async opts => {
7
- const { queryStringParameters } = opts.event;
8
- const debug =
9
- queryStringParameters && queryStringParameters.debug && app.debug;
10
- const response = await successHttpResponseHandler(opts);
11
-
12
- /* istanbul ignore next */
13
- if (!debug && !opts.allowResponse(opts)) {
14
- response.body = null;
15
- }
16
-
17
- return response;
18
- };
19
-
20
- export const successHttpNoOutputResponseAfterHandler = async (
21
- handler,
22
- next,
23
- opts
24
- ) => {
25
- const defaults = {
26
- response: handler.response,
27
- event: handler.event,
28
- allowResponse: () => false,
29
- };
30
- const options = { ...defaults, ...opts };
31
-
32
- // eslint-disable-next-line no-param-reassign
33
- handler.response = await successHttpNoOutputResponseHandler(options);
34
-
35
- /* istanbul ignore next */
36
- next();
37
- };
38
-
39
- const errorHttpResponseNoOutputHandler = async opts => {
40
- const { queryStringParameters } = opts.event;
41
- const debug =
42
- queryStringParameters && queryStringParameters.debug && app.debug;
43
- const response = await errorHttpResponseHandler({
44
- ...opts,
45
- debugMode: opts.debugMode || debug,
46
- });
47
-
48
- if (!debug && !opts.allowResponse(opts)) {
49
- response.statusCode = 200;
50
- response.body = null;
51
- }
52
-
53
- return response;
54
- };
55
-
56
- export const errorHttpNoOutputResponseAfterHandler = async (
57
- handler,
58
- next,
59
- opts
60
- ) => {
61
- const defaults = {
62
- error: handler.error,
63
- event: handler.event,
64
- logger: console.error, // eslint-disable-line no-console
65
- allowResponse: () => false,
66
- };
67
-
68
- const options = { ...defaults, ...opts };
69
-
70
- // eslint-disable-next-line no-param-reassign
71
- handler.response = await errorHttpResponseNoOutputHandler(options);
72
- /* istanbul ignore next */
73
- next();
74
- };
75
-
76
- /* istanbul ignore next */
77
- const httpNoOutputMiddleware = opts => {
78
- return {
79
- before: (handler, next) => normalizeHttpRequestBeforeHandler(handler, next),
80
- after: (handler, next) =>
81
- successHttpNoOutputResponseAfterHandler(handler, next, opts),
82
- onError: (handler, next) =>
83
- errorHttpNoOutputResponseAfterHandler(handler, next, opts),
84
- };
85
- };
86
-
87
- export default httpNoOutputMiddleware;
@@ -1,15 +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
-
8
- export {
9
- httpMiddleware,
10
- normalizeHttpRequestMiddleware,
11
- successHttpResponseMiddleware,
12
- errorHttpResponseMiddleware,
13
- normalizeSQSMessageMiddleware,
14
- verifyJwtMiddleware,
15
- };
@@ -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,29 +0,0 @@
1
- import { verifyBasicAuthBeforeHandler } from './basicAuthMiddleware';
2
- import { verifyJwtMiddlewareBeforeHandler } from './verifyJwtMiddleware';
3
- import { errorHttpResponseAfterHandler } from './errorHttpResponseMiddleware';
4
-
5
- export const serverAuthBeforeHandler = (handler, next, opts) => {
6
- try {
7
- return verifyBasicAuthBeforeHandler(handler, next, opts);
8
- } catch (e) {
9
- if (
10
- e.code !==
11
- `Middlewares/basicAuthMiddleware::AUTH_INVALID_AUTHORIZATION_TYPE` &&
12
- e.code !==
13
- `Middlewares/basicAuthMiddleware::AUTHORIZATION_HEADER_NOT_FOUND`
14
- )
15
- throw e;
16
- }
17
-
18
- return verifyJwtMiddlewareBeforeHandler(handler, next, opts);
19
- };
20
-
21
- /* istanbul ignore next */
22
- const serverAuthMiddleware = opts => {
23
- return {
24
- before: (handler, next) => serverAuthBeforeHandler(handler, next, opts),
25
- onError: (handler, next) => errorHttpResponseAfterHandler(handler, next),
26
- };
27
- };
28
-
29
- export default serverAuthMiddleware;
@@ -1,83 +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: JSON.stringify({
47
- status: 'success',
48
- data: options.response,
49
- _meta: options.debugMode ? options.event : {},
50
- }),
51
- };
52
- };
53
-
54
- export const successHttpResponseAfterHandler = async (handler, next, opts) => {
55
- const defaults = {
56
- response: handler.response,
57
- event: handler.event,
58
- };
59
-
60
- const options = { ...defaults, ...opts };
61
-
62
- // eslint-disable-next-line no-param-reassign
63
- handler.response = await successHttpResponseHandler(options);
64
-
65
- // eslint-disable-next-line no-param-reassign
66
- handler.response = await gzipHttpResponse(handler, opts);
67
-
68
- /* istanbul ignore next */
69
- next();
70
- };
71
-
72
- /**
73
- * Formats response for successful responses
74
- */
75
- /* istanbul ignore next */
76
- const successHttpResponseMiddleware = opts => {
77
- return {
78
- after: (handler, next) =>
79
- successHttpResponseAfterHandler(handler, next, opts),
80
- };
81
- };
82
-
83
- export default successHttpResponseMiddleware;