lesgo 1.0.0 → 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 (315) hide show
  1. package/README.md +5 -4
  2. package/bin/lesgo-scripts.sh +4 -4
  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 +29 -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/src/exceptions/__tests__/LesgoException.spec.js +0 -24
  235. package/src/exceptions/index.js +0 -4
  236. package/src/index.js +0 -4
  237. package/src/middlewares/__mocks__/ValidationErrorException.js +0 -18
  238. package/src/middlewares/__tests__/basicAuthMiddleware.spec.js +0 -264
  239. package/src/middlewares/__tests__/clientAuthMiddleware.spec.js +0 -235
  240. package/src/middlewares/__tests__/errorHttpResponseMiddleware.spec.js +0 -203
  241. package/src/middlewares/__tests__/gzipHttpResponse.spec.js +0 -185
  242. package/src/middlewares/__tests__/httpNoOutputMiddleware.spec.js +0 -201
  243. package/src/middlewares/__tests__/normalizeHttpRequestMiddleware.spec.js +0 -181
  244. package/src/middlewares/__tests__/normalizeSQSMessageMiddleware.spec.js +0 -120
  245. package/src/middlewares/__tests__/successHttpResponseMiddleware.spec.js +0 -172
  246. package/src/middlewares/__tests__/verifyJwtMiddleware.spec.js +0 -297
  247. package/src/middlewares/basicAuthMiddleware.js +0 -125
  248. package/src/middlewares/clientAuthMiddleware.js +0 -103
  249. package/src/middlewares/errorHttpResponseMiddleware.js +0 -101
  250. package/src/middlewares/gzipHttpResponse.js +0 -98
  251. package/src/middlewares/httpMiddleware.js +0 -19
  252. package/src/middlewares/httpNoOutputMiddleware.js +0 -91
  253. package/src/middlewares/index.js +0 -19
  254. package/src/middlewares/normalizeHttpRequestMiddleware.js +0 -101
  255. package/src/middlewares/normalizeSQSMessageMiddleware.js +0 -67
  256. package/src/middlewares/successHttpResponseMiddleware.js +0 -85
  257. package/src/middlewares/verifyJwtMiddleware.js +0 -73
  258. package/src/services/AuroraDbRDSProxyService.js +0 -182
  259. package/src/services/AuroraDbService.js +0 -111
  260. package/src/services/DynamoDbService.js +0 -177
  261. package/src/services/ElastiCacheService.js +0 -17
  262. package/src/services/ElasticsearchService.js +0 -181
  263. package/src/services/FirebaseAdminService.js +0 -108
  264. package/src/services/JwtService.js +0 -52
  265. package/src/services/S3Service.js +0 -59
  266. package/src/services/SQSService.js +0 -65
  267. package/src/services/__tests__/AuroraDbRDSProxyService.spec.js +0 -278
  268. package/src/services/__tests__/AuroraDbService.spec.js +0 -211
  269. package/src/services/__tests__/AwsElasticsearchConnection.spec.js +0 -89
  270. package/src/services/__tests__/DynamoDbService.spec.js +0 -314
  271. package/src/services/__tests__/ElasticsearchService.spec.js +0 -201
  272. package/src/services/__tests__/FirebaseAdminService.spec.js +0 -356
  273. package/src/services/__tests__/JwtService.spec.js +0 -35
  274. package/src/services/__tests__/LengthAwarePaginator.spec.js +0 -223
  275. package/src/services/__tests__/LoggerService.spec.js +0 -267
  276. package/src/services/__tests__/Paginator.spec.js +0 -383
  277. package/src/services/__tests__/S3Service.spec.js +0 -55
  278. package/src/services/__tests__/SQSService.spec.js +0 -47
  279. package/src/services/__tests__/SignedRequest.spec.js +0 -103
  280. package/src/services/aws/AwsElasticsearchConnection.js +0 -59
  281. package/src/services/aws/SignedRequest.js +0 -158
  282. package/src/services/index.js +0 -19
  283. package/src/services/pagination/LengthAwarePaginator.js +0 -49
  284. package/src/services/pagination/Paginator.js +0 -260
  285. package/src/utils/__mocks__/db.js +0 -109
  286. package/src/utils/__tests__/cache.spec.js +0 -131
  287. package/src/utils/__tests__/crypto.spec.js +0 -122
  288. package/src/utils/__tests__/db.spec.js +0 -70
  289. package/src/utils/__tests__/dynamodb.spec.js +0 -27
  290. package/src/utils/__tests__/elasticsearch.spec.js +0 -43
  291. package/src/utils/__tests__/generateUid.spec.js +0 -36
  292. package/src/utils/__tests__/getJwtSubFromAuthHeader.spec.js +0 -20
  293. package/src/utils/__tests__/isDecimal.spec.js +0 -12
  294. package/src/utils/__tests__/isEmail.spec.js +0 -28
  295. package/src/utils/__tests__/isEmpty.spec.js +0 -31
  296. package/src/utils/__tests__/logger.spec.js +0 -11
  297. package/src/utils/__tests__/objectStore.spec.js +0 -67
  298. package/src/utils/__tests__/prepSQLInsertParams.spec.js +0 -46
  299. package/src/utils/__tests__/prepSQLUpdateParams.spec.js +0 -36
  300. package/src/utils/__tests__/queue.spec.js +0 -54
  301. package/src/utils/__tests__/validateFields.spec.js +0 -374
  302. package/src/utils/cache.js +0 -215
  303. package/src/utils/crypto.js +0 -77
  304. package/src/utils/db.js +0 -17
  305. package/src/utils/dynamodb.js +0 -6
  306. package/src/utils/elasticsearch.js +0 -20
  307. package/src/utils/getJwtSubFromAuthHeader.js +0 -18
  308. package/src/utils/index.js +0 -26
  309. package/src/utils/isDecimal.js +0 -2
  310. package/src/utils/isEmpty.js +0 -6
  311. package/src/utils/logger.js +0 -25
  312. package/src/utils/objectStore.js +0 -11
  313. package/src/utils/prepSQLInsertParams.js +0 -21
  314. package/src/utils/prepSQLUpdateParams.js +0 -25
  315. package/src/utils/queue.js +0 -11
@@ -0,0 +1,77 @@
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 { logger, validateFields } from '../../utils';
35
+ import { LesgoException } from '../../exceptions';
36
+ import getElastiCacheRedisClient from './getElastiCacheRedisClient';
37
+ const FILE = 'lesgo.services.ElastiCacheRedis.setRedisCache';
38
+ const setRedisCache = (key, value, opts, clientOpts) =>
39
+ __awaiter(void 0, void 0, void 0, function* () {
40
+ var _a;
41
+ const input = validateFields({ key, value }, [
42
+ { key: 'key', type: 'string', required: true },
43
+ { key: 'value', type: 'any', required: true },
44
+ ]);
45
+ opts = Object.assign(Object.assign({}, opts), {
46
+ EX:
47
+ (_a = opts === null || opts === void 0 ? void 0 : opts.EX) !== null &&
48
+ _a !== void 0
49
+ ? _a
50
+ : 300,
51
+ });
52
+ const client = yield getElastiCacheRedisClient(clientOpts);
53
+ input.value =
54
+ typeof input.value === 'object'
55
+ ? JSON.stringify(input.value)
56
+ : input.value;
57
+ try {
58
+ // @ts-ignore
59
+ const resp = yield client.set(input.key, input.value, 'EX', opts.EX);
60
+ logger.debug(`${FILE}::RECEIVED_RESPONSE`, { resp, input, value });
61
+ return resp;
62
+ } catch (err) {
63
+ throw new LesgoException(
64
+ 'Failed to set redis cache',
65
+ `${FILE}::SET_ERROR`,
66
+ 500,
67
+ {
68
+ err,
69
+ input,
70
+ value,
71
+ opts,
72
+ clientOpts,
73
+ }
74
+ );
75
+ }
76
+ });
77
+ export default setRedisCache;
@@ -0,0 +1,7 @@
1
+ import { JwtHeader, JwtPayload } from 'jsonwebtoken';
2
+ declare const decodeJwt: (token: string) => {
3
+ header: JwtHeader;
4
+ payload: JwtPayload;
5
+ signature: string;
6
+ };
7
+ export default decodeJwt;
@@ -0,0 +1,9 @@
1
+ const decodeJwt = token => {
2
+ const parts = token.split('.');
3
+ return {
4
+ header: JSON.parse(Buffer.from(parts[0], 'base64').toString('utf8')),
5
+ payload: JSON.parse(Buffer.from(parts[1], 'base64').toString('utf8')),
6
+ signature: parts[2],
7
+ };
8
+ };
9
+ export default decodeJwt;
@@ -0,0 +1,13 @@
1
+ export interface GetJwtSecretInput {
2
+ secret?: string;
3
+ keyid?: string;
4
+ }
5
+ export interface JwtSecret {
6
+ keyid: string;
7
+ secret: string;
8
+ }
9
+ declare const getJwtSecret: (input: GetJwtSecretInput) => {
10
+ keyid: string;
11
+ secret: string;
12
+ };
13
+ export default getJwtSecret;
@@ -0,0 +1,54 @@
1
+ import { LesgoException } from '../../exceptions';
2
+ import jwtConfig from '../../config/jwt';
3
+ const FILE = 'lesgo.services.JWTService.getJwtSecret';
4
+ const getJwtSecret = input => {
5
+ var _a, _b;
6
+ const jwtSecret = {
7
+ keyid: input.keyid || '',
8
+ secret: input.secret || '',
9
+ };
10
+ if (!input.secret) {
11
+ jwtSecret.keyid =
12
+ ((_a = jwtConfig.secrets[0]) === null || _a === void 0
13
+ ? void 0
14
+ : _a.keyid) || '';
15
+ jwtSecret.secret =
16
+ ((_b = jwtConfig.secrets[0]) === null || _b === void 0
17
+ ? void 0
18
+ : _b.secret) || '';
19
+ }
20
+ if (input.secret) {
21
+ const foundSecret = jwtConfig.secrets.find(
22
+ s => (s === null || s === void 0 ? void 0 : s.secret) === input.secret
23
+ );
24
+ if (!foundSecret) {
25
+ throw new LesgoException(
26
+ `No matching JWT Secret found.`,
27
+ `${FILE}::SECRET_NOT_FOUND`
28
+ );
29
+ }
30
+ jwtSecret.keyid = foundSecret.keyid;
31
+ jwtSecret.secret = foundSecret.secret;
32
+ }
33
+ if (input.keyid) {
34
+ const foundSecret = jwtConfig.secrets.find(
35
+ s => (s === null || s === void 0 ? void 0 : s.keyid) === input.keyid
36
+ );
37
+ if (!foundSecret) {
38
+ throw new LesgoException(
39
+ `kid ${input.keyid} not found.`,
40
+ `${FILE}::KID_NOT_FOUND`
41
+ );
42
+ }
43
+ jwtSecret.keyid = foundSecret.keyid;
44
+ jwtSecret.secret = foundSecret.secret;
45
+ }
46
+ if (!jwtSecret.secret) {
47
+ throw new LesgoException(
48
+ 'Missing Secret to sign JWT',
49
+ `${FILE}::SECRET_NOT_FOUND`
50
+ );
51
+ }
52
+ return jwtSecret;
53
+ };
54
+ export default getJwtSecret;
@@ -0,0 +1,2 @@
1
+ export { default as sign } from './sign';
2
+ export { default as verify } from './verify';
@@ -0,0 +1,2 @@
1
+ export { default as sign } from './sign';
2
+ export { default as verify } from './verify';
@@ -0,0 +1,3 @@
1
+ import { SignOptions } from 'jsonwebtoken';
2
+ declare const sign: (payload: any, secret?: string, opts?: SignOptions) => string;
3
+ export default sign;
@@ -0,0 +1,31 @@
1
+ import { sign as signJwt } from 'jsonwebtoken';
2
+ import { jwt as jwtConfig } from '../../config';
3
+ import { generateUid } from '../../utils';
4
+ import getJwtSecret from './getJwtSecret';
5
+ const sign = (payload, secret, opts) => {
6
+ const jwtSecret = getJwtSecret({
7
+ secret,
8
+ keyid: opts === null || opts === void 0 ? void 0 : opts.keyid,
9
+ });
10
+ const options = Object.assign(Object.assign({}, opts), {
11
+ algorithm:
12
+ (opts === null || opts === void 0 ? void 0 : opts.algorithm) ||
13
+ jwtConfig.algorithm,
14
+ expiresIn:
15
+ (opts === null || opts === void 0 ? void 0 : opts.expiresIn) ||
16
+ jwtConfig.expiresIn,
17
+ issuer:
18
+ (opts === null || opts === void 0 ? void 0 : opts.issuer) ||
19
+ jwtConfig.issuer,
20
+ audience:
21
+ (opts === null || opts === void 0 ? void 0 : opts.audience) ||
22
+ jwtConfig.audience,
23
+ jwtid:
24
+ (opts === null || opts === void 0 ? void 0 : opts.jwtid) ||
25
+ generateUid({ length: 16 }),
26
+ keyid: jwtSecret.keyid,
27
+ });
28
+ const token = signJwt(payload, jwtSecret.secret, options);
29
+ return token;
30
+ };
31
+ export default sign;
@@ -0,0 +1,7 @@
1
+ import { VerifyOptions } from 'jsonwebtoken';
2
+ export interface VerifyInputOptions extends VerifyOptions {
3
+ validateClaims?: boolean;
4
+ keyid?: string;
5
+ }
6
+ declare const verify: (token: string, secret?: string, opts?: VerifyInputOptions) => string | import("jsonwebtoken").JwtPayload | import("jsonwebtoken").Jwt;
7
+ export default verify;
@@ -0,0 +1,61 @@
1
+ import { verify as verifyToken } from 'jsonwebtoken';
2
+ import jwtConfig from '../../config/jwt';
3
+ import { LesgoException } from '../../exceptions';
4
+ import { isEmpty, logger } from '../../utils';
5
+ import getJwtSecret from './getJwtSecret';
6
+ import decodeJwt from './decodeJwt';
7
+ const FILE = 'lesgo.services.JWTService.verify';
8
+ const verify = (token, secret, opts) => {
9
+ const { header, payload, signature } = decodeJwt(token);
10
+ logger.debug(`${FILE}::DECODED_JWT`, { header, payload, signature });
11
+ const jwtSecret = getJwtSecret({
12
+ secret,
13
+ keyid:
14
+ payload.kid ||
15
+ header.kid ||
16
+ (opts === null || opts === void 0 ? void 0 : opts.keyid),
17
+ });
18
+ const validateClaims = !isEmpty(
19
+ opts === null || opts === void 0 ? void 0 : opts.validateClaims
20
+ )
21
+ ? opts === null || opts === void 0
22
+ ? void 0
23
+ : opts.validateClaims
24
+ : jwtConfig.validateClaims;
25
+ if (validateClaims) {
26
+ opts = Object.assign(
27
+ {
28
+ issuer:
29
+ (opts === null || opts === void 0 ? void 0 : opts.issuer) ||
30
+ jwtConfig.issuer,
31
+ audience:
32
+ (opts === null || opts === void 0 ? void 0 : opts.audience) ||
33
+ jwtConfig.audience,
34
+ },
35
+ opts
36
+ );
37
+ }
38
+ opts = Object.assign({ complete: true }, opts);
39
+ try {
40
+ logger.debug(`${FILE}::VERIFYING_TOKEN`, {
41
+ token,
42
+ opts,
43
+ isValidateClaims: validateClaims,
44
+ });
45
+ const decoded = verifyToken(token, jwtSecret.secret, opts);
46
+ logger.debug(`${FILE}::VERIFIED_TOKEN`, decoded);
47
+ return decoded;
48
+ } catch (error) {
49
+ throw new LesgoException(
50
+ 'Failed to verify token',
51
+ `${FILE}::VERIFY_ERROR`,
52
+ 500,
53
+ {
54
+ error,
55
+ token,
56
+ opts,
57
+ }
58
+ );
59
+ }
60
+ };
61
+ export default verify;
@@ -0,0 +1,46 @@
1
+ type LogLevel = 'error' | 'warn' | 'notice' | 'info' | 'debug';
2
+ interface LoggerServiceOptions {
3
+ logger?: string;
4
+ defaultMeta?: object;
5
+ transports?: Array<Transport>;
6
+ }
7
+ interface Transport {
8
+ logType: string;
9
+ level: string;
10
+ config?: TransportConfig;
11
+ }
12
+ interface TransportConfig {
13
+ getCreatedAt?: boolean;
14
+ meta?: object;
15
+ tags?: TransportConfigTags;
16
+ }
17
+ interface TransportConfigTags {
18
+ [key: string]: string;
19
+ }
20
+ export default class LoggerService {
21
+ logger: string;
22
+ meta: object;
23
+ transports: Array<Transport>;
24
+ logLevels: {
25
+ [key: string]: number;
26
+ };
27
+ constructor(opts?: LoggerServiceOptions);
28
+ log(level: LogLevel, message: string, extra?: {}): void;
29
+ error(message: string, extra?: {}): void;
30
+ warn(message: string, extra?: {}): void;
31
+ info(message: string, extra?: {}): void;
32
+ debug(message: string, extra?: {}): void;
33
+ notice(message: string, extra?: {}): void;
34
+ addMeta(meta?: {}): void;
35
+ consoleLogger(level: LogLevel, message: string): void | null;
36
+ checkIsLogRequired(transportName: string, level: LogLevel): boolean;
37
+ structureLogMessage(level: LogLevel, message: any, extra: object): {
38
+ level: LogLevel;
39
+ message: any;
40
+ logger: string;
41
+ extra: {};
42
+ };
43
+ refineMessagePerTransport(transportName: string, message: any): any;
44
+ getTransportByName(transportName: string): Transport | undefined;
45
+ }
46
+ export {};
@@ -1,9 +1,5 @@
1
1
  import LesgoException from '../exceptions/LesgoException';
2
-
3
- const getCurrentDateTime = () => {
4
- return new Date().toUTCString();
5
- };
6
-
2
+ import { getCurrentDatetime } from '../utils';
7
3
  export default class LoggerService {
8
4
  constructor(opts = {}) {
9
5
  const defaultOptions = {
@@ -11,22 +7,17 @@ export default class LoggerService {
11
7
  meta: {},
12
8
  transports: [],
13
9
  };
14
-
15
- const options = {
16
- ...defaultOptions,
10
+ const options = Object.assign(Object.assign({}, defaultOptions), {
17
11
  logger: opts.logger || defaultOptions.logger,
18
- meta: {
19
- ...defaultOptions.meta,
20
- ...(opts.defaultMeta || {}),
21
- },
12
+ meta: Object.assign(
13
+ Object.assign({}, defaultOptions.meta),
14
+ opts.defaultMeta || {}
15
+ ),
22
16
  transports: opts.transports || [],
23
- };
24
-
17
+ });
25
18
  this.logger = options.logger;
26
19
  this.meta = options.meta;
27
20
  this.transports = options.transports;
28
- this.getCreatedAt = options.getCreatedAt;
29
-
30
21
  this.logLevels = {
31
22
  error: 0,
32
23
  warn: 1,
@@ -35,114 +26,92 @@ export default class LoggerService {
35
26
  debug: 4,
36
27
  };
37
28
  }
38
-
39
29
  log(level, message, extra = {}) {
40
30
  if (level === undefined || !Object.keys(this.logLevels).includes(level)) {
41
31
  throw new LesgoException('Invalid level provided in log()');
42
32
  }
43
-
44
33
  const structuredMessage = this.structureLogMessage(level, message, extra);
45
-
46
34
  this.transports.map(transport => {
35
+ // @ts-ignore
47
36
  return this[`${transport.logType}Logger`](level, structuredMessage);
48
37
  });
49
38
  }
50
-
51
39
  error(message, extra = {}) {
52
40
  this.log('error', message, extra);
53
41
  }
54
-
55
42
  warn(message, extra = {}) {
56
43
  this.log('warn', message, extra);
57
44
  }
58
-
59
45
  info(message, extra = {}) {
60
46
  this.log('info', message, extra);
61
47
  }
62
-
63
48
  debug(message, extra = {}) {
64
49
  this.log('debug', message, extra);
65
50
  }
66
-
67
51
  notice(message, extra = {}) {
68
52
  this.log('notice', message, extra);
69
53
  }
70
-
71
54
  addMeta(meta = {}) {
72
- this.meta = {
73
- ...this.meta,
74
- ...meta,
75
- };
55
+ this.meta = Object.assign(Object.assign({}, this.meta), meta);
76
56
  }
77
-
78
57
  consoleLogger(level, message) {
79
58
  if (!this.checkIsLogRequired('console', level)) return null;
80
59
  const refinedMessage = this.refineMessagePerTransport('console', message);
81
60
  const consoleFunc = level === 'notice' ? 'log' : level;
82
-
83
- return console[consoleFunc](JSON.stringify(refinedMessage)); // eslint-disable-line no-console
61
+ return console[consoleFunc](JSON.stringify(refinedMessage));
84
62
  }
85
-
86
63
  checkIsLogRequired(transportName, level) {
87
- const transportLevel = this.getTransportByName(transportName).level;
88
-
64
+ const transport = this.getTransportByName(transportName);
65
+ if (transport === undefined) {
66
+ return false;
67
+ }
68
+ const transportLevel = transport.level;
89
69
  if (this.logLevels[transportLevel] < this.logLevels[level]) {
90
70
  return false;
91
71
  }
92
-
93
72
  return true;
94
73
  }
95
-
96
74
  structureLogMessage(level, message, extra) {
97
75
  const structuredMessage = {
98
76
  level,
99
77
  message,
100
78
  logger: this.logger,
101
- extra: {
102
- ...this.meta,
103
- ...extra,
104
- },
79
+ extra: Object.assign(Object.assign({}, this.meta), extra),
105
80
  };
106
-
107
81
  return structuredMessage;
108
82
  }
109
-
110
83
  refineMessagePerTransport(transportName, message) {
111
84
  const transport = this.getTransportByName(transportName);
112
- const refinedMessage = { ...message };
113
-
85
+ const refinedMessage = message;
86
+ if (transport === undefined) {
87
+ return refinedMessage;
88
+ }
114
89
  if (transport.config !== undefined) {
115
90
  if (transport.config.meta !== undefined) {
116
- refinedMessage.extra = {
117
- ...refinedMessage.extra,
118
- ...transport.config.meta,
119
- };
91
+ refinedMessage.extra = Object.assign(
92
+ Object.assign({}, refinedMessage.extra),
93
+ transport.config.meta
94
+ );
120
95
  }
121
-
122
96
  if (transport.config.tags !== undefined) {
123
97
  refinedMessage.tags = transport.config.tags;
124
98
  }
125
-
126
99
  if (
127
100
  refinedMessage.tags !== undefined &&
128
101
  refinedMessage.extra.tags !== undefined
129
102
  ) {
130
- refinedMessage.tags = {
131
- ...refinedMessage.tags,
132
- ...refinedMessage.extra.tags,
133
- };
134
-
103
+ refinedMessage.tags = Object.assign(
104
+ Object.assign({}, refinedMessage.tags),
105
+ refinedMessage.extra.tags
106
+ );
135
107
  delete refinedMessage.extra.tags;
136
108
  }
137
-
138
109
  if (transport.config.getCreatedAt) {
139
- refinedMessage.created = getCurrentDateTime();
110
+ refinedMessage.created = getCurrentDatetime();
140
111
  }
141
112
  }
142
-
143
113
  return refinedMessage;
144
114
  }
145
-
146
115
  getTransportByName(transportName) {
147
116
  return this.transports.find(
148
117
  transport => transport.logType === transportName
@@ -0,0 +1,2 @@
1
+ declare const disconnectMySQLProxyClient: () => Promise<void>;
2
+ export default disconnectMySQLProxyClient;
@@ -0,0 +1,60 @@
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 { logger } from '../../utils';
35
+ import { singleton } from '../RDSAuroraMySQLProxyService/getMySQLProxyClient';
36
+ const FILE =
37
+ 'lesgo.services.RDSAuroraMySQLProxyService.disconnectMySQLProxyClient';
38
+ const disconnectMySQLProxyClient = () =>
39
+ __awaiter(void 0, void 0, void 0, function* () {
40
+ const singletonConns = Object.keys(singleton);
41
+ if (singletonConns.length === 0) {
42
+ logger.debug(`${FILE}::NO_CONNECTIONS_TO_DISCONNECT`);
43
+ return;
44
+ }
45
+ logger.debug(`${FILE}::PREPARING_TO_DISCONNECT`, {
46
+ singletonConns,
47
+ });
48
+ singletonConns.forEach(singletonConn =>
49
+ __awaiter(void 0, void 0, void 0, function* () {
50
+ try {
51
+ yield singleton[singletonConn].end();
52
+ delete singleton[singletonConn];
53
+ logger.debug(`${FILE}::COMPLETED`, { singletonConn });
54
+ } catch (err) {
55
+ logger.error(`${FILE}::ERROR`, { singletonConn, err });
56
+ }
57
+ })
58
+ );
59
+ });
60
+ export default disconnectMySQLProxyClient;
@@ -0,0 +1,8 @@
1
+ import { Connection, ConnectionOptions } from 'mysql2/promise';
2
+ import { RDSAuroraMySQLProxyClientOptions } from '../../types/aws';
3
+ export interface Singleton {
4
+ [key: string]: Connection;
5
+ }
6
+ export declare const singleton: Singleton;
7
+ declare const getMySQLProxyClient: (connOptions?: ConnectionOptions, clientOpts?: RDSAuroraMySQLProxyClientOptions) => Promise<Connection>;
8
+ export default getMySQLProxyClient;
@@ -0,0 +1,87 @@
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 { createConnection } from 'mysql2/promise';
35
+ import { logger, isEmpty, validateFields } from '../../utils';
36
+ import { rds as rdsConfig } from '../../config';
37
+ import { getSecretValue } from '../../utils/secretsmanager';
38
+ const FILE = 'lesgo.services.RDSAuroraMySQLProxyService.getMySQLProxyClient';
39
+ export const singleton = {};
40
+ const getMySQLProxyClient = (connOptions, clientOpts) =>
41
+ __awaiter(void 0, void 0, void 0, function* () {
42
+ const options = validateFields(clientOpts || {}, [
43
+ { key: 'region', type: 'string', required: false },
44
+ { key: 'singletonConn', type: 'string', required: false },
45
+ { key: 'dbCredentialsSecretId', type: 'string', required: false },
46
+ { key: 'databaseName', type: 'string', required: false },
47
+ ]);
48
+ const region = options.region || rdsConfig.aurora.mysql.region;
49
+ const singletonConn = options.singletonConn || 'default';
50
+ const dbCredentialsSecretId =
51
+ options.dbCredentialsSecretId ||
52
+ rdsConfig.aurora.mysql.proxy.dbCredentialsSecretId;
53
+ const databaseName =
54
+ options.databaseName || rdsConfig.aurora.mysql.databaseName;
55
+ if (!isEmpty(singleton[singletonConn])) {
56
+ logger.debug(`${FILE}::REUSE_RDS_CONNECTION`, {
57
+ client: singleton[singletonConn],
58
+ region,
59
+ });
60
+ return singleton[singletonConn];
61
+ }
62
+ const dbCredentials = yield getSecretValue(
63
+ dbCredentialsSecretId,
64
+ undefined,
65
+ {
66
+ region,
67
+ singletonConn,
68
+ }
69
+ );
70
+ const validatedDbCredentials = validateFields(dbCredentials, [
71
+ { key: 'host', type: 'string', required: true },
72
+ { key: 'username', type: 'string', required: true },
73
+ { key: 'password', type: 'string', required: true },
74
+ ]);
75
+ const conn = yield createConnection(
76
+ Object.assign(Object.assign({}, connOptions), {
77
+ host: validatedDbCredentials.host,
78
+ user: validatedDbCredentials.username,
79
+ password: validatedDbCredentials.password,
80
+ database: databaseName,
81
+ })
82
+ );
83
+ singleton[singletonConn] = conn;
84
+ logger.debug(`${FILE}::NEW_RDS_CONNECTION`);
85
+ return conn;
86
+ });
87
+ export default getMySQLProxyClient;
@@ -0,0 +1,3 @@
1
+ export { default as disconnectMySQLProxyClient } from './disconnectMySQLProxyClient';
2
+ export { default as getMySQLProxyClient } from './getMySQLProxyClient';
3
+ export { default as query } from './query';
@@ -0,0 +1,3 @@
1
+ export { default as disconnectMySQLProxyClient } from './disconnectMySQLProxyClient';
2
+ export { default as getMySQLProxyClient } from './getMySQLProxyClient';
3
+ export { default as query } from './query';
@@ -0,0 +1,4 @@
1
+ import { ConnectionOptions } from 'mysql2/promise';
2
+ import { RDSAuroraMySQLProxyClientOptions } from '../../types/aws';
3
+ declare const query: (sql: string, preparedValues?: any[], connOptions?: ConnectionOptions, clientOpts?: RDSAuroraMySQLProxyClientOptions) => Promise<[import("mysql2/promise").QueryResult, import("mysql2/typings/mysql/lib/protocol/packets/FieldPacket").FieldPacket[]]>;
4
+ export default query;