@bitblit/ratchet-aws 4.0.80-alpha

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 (241) hide show
  1. package/dist/cjs/batch/aws-batch-background-processor.js +44 -0
  2. package/dist/cjs/batch/aws-batch-ratchet.js +55 -0
  3. package/dist/cjs/build/ratchet-aws-info.js +18 -0
  4. package/dist/cjs/cache/dynamo-db-storage-provider.js +111 -0
  5. package/dist/cjs/cache/s3-storage-provider.js +44 -0
  6. package/dist/cjs/cache/simple-cache-object-wrapper.js +2 -0
  7. package/dist/cjs/cache/simple-cache-read-options.js +2 -0
  8. package/dist/cjs/cache/simple-cache-storage-provider.js +2 -0
  9. package/dist/cjs/cache/simple-cache.js +66 -0
  10. package/dist/cjs/cloudwatch/cloud-watch-log-group-ratchet.js +73 -0
  11. package/dist/cjs/cloudwatch/cloud-watch-logs-ratchet.js +173 -0
  12. package/dist/cjs/cloudwatch/cloud-watch-metrics-ratchet.js +57 -0
  13. package/dist/cjs/daemon/daemon-like.js +2 -0
  14. package/dist/cjs/daemon/daemon-process-create-options.js +2 -0
  15. package/dist/cjs/daemon/daemon-process-state-public-token.js +2 -0
  16. package/dist/cjs/daemon/daemon-process-state.js +2 -0
  17. package/dist/cjs/daemon/daemon-util.js +152 -0
  18. package/dist/cjs/daemon/daemon.js +126 -0
  19. package/dist/cjs/dao/prototype-dao-config.js +2 -0
  20. package/dist/cjs/dao/prototype-dao-db.js +2 -0
  21. package/dist/cjs/dao/prototype-dao-provider.js +2 -0
  22. package/dist/cjs/dao/prototype-dao.js +88 -0
  23. package/dist/cjs/dao/s3-prototype-dao-provider.js +28 -0
  24. package/dist/cjs/dao/s3-simple-dao.js +78 -0
  25. package/dist/cjs/dao/simple-dao-item.js +2 -0
  26. package/dist/cjs/dynamodb/dynamo-ratchet-like.js +2 -0
  27. package/dist/cjs/dynamodb/dynamo-ratchet.js +667 -0
  28. package/dist/cjs/dynamodb/dynamo-table-ratchet.js +91 -0
  29. package/dist/cjs/dynamodb/hash-spreader.js +62 -0
  30. package/dist/cjs/ec2/ec2-ratchet.js +107 -0
  31. package/dist/cjs/environment/cascade-environment-service-provider.js +27 -0
  32. package/dist/cjs/environment/env-var-environment-service-provider.js +33 -0
  33. package/dist/cjs/environment/environment-service-config.js +2 -0
  34. package/dist/cjs/environment/environment-service-provider.js +2 -0
  35. package/dist/cjs/environment/environment-service.js +52 -0
  36. package/dist/cjs/environment/fixed-environment-service-provider.js +24 -0
  37. package/dist/cjs/environment/s3-environment-service-provider.js +29 -0
  38. package/dist/cjs/environment/ssm-environment-service-provider.js +61 -0
  39. package/dist/cjs/expiring-code/dynamo-expiring-code-provider.js +26 -0
  40. package/dist/cjs/expiring-code/expiring-code-params.js +2 -0
  41. package/dist/cjs/expiring-code/expiring-code-provider.js +2 -0
  42. package/dist/cjs/expiring-code/expiring-code-ratchet.js +37 -0
  43. package/dist/cjs/expiring-code/expiring-code.js +2 -0
  44. package/dist/cjs/expiring-code/s3-expiring-code-provider.js +49 -0
  45. package/dist/cjs/iam/aws-credentials-ratchet.js +21 -0
  46. package/dist/cjs/index.js +81 -0
  47. package/dist/cjs/lambda/lambda-event-detector.js +42 -0
  48. package/dist/cjs/lambda/lambda-event-type-guards.js +28 -0
  49. package/dist/cjs/model/cloud-watch-metrics-minute-level-dynamo-count-request.js +2 -0
  50. package/dist/cjs/model/cloud-watch-metrics-unit.js +33 -0
  51. package/dist/cjs/model/dynamo/doc-put-item-command-input.js +2 -0
  52. package/dist/cjs/model/dynamo/doc-query-command-input.js +2 -0
  53. package/dist/cjs/model/dynamo/doc-scan-command-input.js +2 -0
  54. package/dist/cjs/model/dynamo/doc-update-item-command-input.js +2 -0
  55. package/dist/cjs/model/dynamo-count-result.js +2 -0
  56. package/dist/cjs/route53/route-53-ratchet.js +57 -0
  57. package/dist/cjs/runtime-parameter/cached-stored-runtime-parameter.js +2 -0
  58. package/dist/cjs/runtime-parameter/dynamo-runtime-parameter-provider.js +38 -0
  59. package/dist/cjs/runtime-parameter/global-variable-override-runtime-parameter-provider.js +54 -0
  60. package/dist/cjs/runtime-parameter/memory-runtime-parameter-provider.js +30 -0
  61. package/dist/cjs/runtime-parameter/runtime-parameter-provider.js +2 -0
  62. package/dist/cjs/runtime-parameter/runtime-parameter-ratchet.js +74 -0
  63. package/dist/cjs/runtime-parameter/stored-runtime-parameter.js +2 -0
  64. package/dist/cjs/s3/s3-cache-ratchet.js +332 -0
  65. package/dist/cjs/s3/s3-cache-to-local-disk-ratchet.js +105 -0
  66. package/dist/cjs/s3/s3-location-sync-ratchet.js +142 -0
  67. package/dist/cjs/s3/s3-ratchet.js +26 -0
  68. package/dist/cjs/ses/email-attachment.js +2 -0
  69. package/dist/cjs/ses/mailer-config.js +2 -0
  70. package/dist/cjs/ses/mailer-like.js +2 -0
  71. package/dist/cjs/ses/mailer.js +208 -0
  72. package/dist/cjs/ses/ratchet-template-renderer.js +2 -0
  73. package/dist/cjs/ses/ready-to-send-email.js +2 -0
  74. package/dist/cjs/ses/remote-handlebars-template-renderer.js +79 -0
  75. package/dist/cjs/ses/resolved-ready-to-send-email.js +2 -0
  76. package/dist/cjs/sns/sns-ratchet.js +47 -0
  77. package/dist/cjs/sync-lock/dynamo-db-sync-lock.js +69 -0
  78. package/dist/cjs/sync-lock/memory-sync-lock.js +40 -0
  79. package/dist/cjs/sync-lock/sync-lock-provider.js +2 -0
  80. package/dist/es/batch/aws-batch-background-processor.js +40 -0
  81. package/dist/es/batch/aws-batch-ratchet.js +51 -0
  82. package/dist/es/build/ratchet-aws-info.js +14 -0
  83. package/dist/es/cache/dynamo-db-storage-provider.js +107 -0
  84. package/dist/es/cache/s3-storage-provider.js +40 -0
  85. package/dist/es/cache/simple-cache-object-wrapper.js +1 -0
  86. package/dist/es/cache/simple-cache-read-options.js +1 -0
  87. package/dist/es/cache/simple-cache-storage-provider.js +1 -0
  88. package/dist/es/cache/simple-cache.js +62 -0
  89. package/dist/es/cloudwatch/cloud-watch-log-group-ratchet.js +69 -0
  90. package/dist/es/cloudwatch/cloud-watch-logs-ratchet.js +169 -0
  91. package/dist/es/cloudwatch/cloud-watch-metrics-ratchet.js +53 -0
  92. package/dist/es/daemon/daemon-like.js +1 -0
  93. package/dist/es/daemon/daemon-process-create-options.js +1 -0
  94. package/dist/es/daemon/daemon-process-state-public-token.js +1 -0
  95. package/dist/es/daemon/daemon-process-state.js +1 -0
  96. package/dist/es/daemon/daemon-util.js +148 -0
  97. package/dist/es/daemon/daemon.js +122 -0
  98. package/dist/es/dao/prototype-dao-config.js +1 -0
  99. package/dist/es/dao/prototype-dao-db.js +1 -0
  100. package/dist/es/dao/prototype-dao-provider.js +1 -0
  101. package/dist/es/dao/prototype-dao.js +84 -0
  102. package/dist/es/dao/s3-prototype-dao-provider.js +24 -0
  103. package/dist/es/dao/s3-simple-dao.js +74 -0
  104. package/dist/es/dao/simple-dao-item.js +1 -0
  105. package/dist/es/dynamodb/dynamo-ratchet-like.js +1 -0
  106. package/dist/es/dynamodb/dynamo-ratchet.js +663 -0
  107. package/dist/es/dynamodb/dynamo-table-ratchet.js +87 -0
  108. package/dist/es/dynamodb/hash-spreader.js +58 -0
  109. package/dist/es/ec2/ec2-ratchet.js +103 -0
  110. package/dist/es/environment/cascade-environment-service-provider.js +23 -0
  111. package/dist/es/environment/env-var-environment-service-provider.js +29 -0
  112. package/dist/es/environment/environment-service-config.js +1 -0
  113. package/dist/es/environment/environment-service-provider.js +1 -0
  114. package/dist/es/environment/environment-service.js +48 -0
  115. package/dist/es/environment/fixed-environment-service-provider.js +20 -0
  116. package/dist/es/environment/s3-environment-service-provider.js +25 -0
  117. package/dist/es/environment/ssm-environment-service-provider.js +56 -0
  118. package/dist/es/expiring-code/dynamo-expiring-code-provider.js +22 -0
  119. package/dist/es/expiring-code/expiring-code-params.js +1 -0
  120. package/dist/es/expiring-code/expiring-code-provider.js +1 -0
  121. package/dist/es/expiring-code/expiring-code-ratchet.js +33 -0
  122. package/dist/es/expiring-code/expiring-code.js +1 -0
  123. package/dist/es/expiring-code/s3-expiring-code-provider.js +45 -0
  124. package/dist/es/iam/aws-credentials-ratchet.js +17 -0
  125. package/dist/es/index.js +78 -0
  126. package/dist/es/lambda/lambda-event-detector.js +38 -0
  127. package/dist/es/lambda/lambda-event-type-guards.js +24 -0
  128. package/dist/es/model/cloud-watch-metrics-minute-level-dynamo-count-request.js +1 -0
  129. package/dist/es/model/cloud-watch-metrics-unit.js +30 -0
  130. package/dist/es/model/dynamo/doc-put-item-command-input.js +1 -0
  131. package/dist/es/model/dynamo/doc-query-command-input.js +1 -0
  132. package/dist/es/model/dynamo/doc-scan-command-input.js +1 -0
  133. package/dist/es/model/dynamo/doc-update-item-command-input.js +1 -0
  134. package/dist/es/model/dynamo-count-result.js +1 -0
  135. package/dist/es/route53/route-53-ratchet.js +53 -0
  136. package/dist/es/runtime-parameter/cached-stored-runtime-parameter.js +1 -0
  137. package/dist/es/runtime-parameter/dynamo-runtime-parameter-provider.js +34 -0
  138. package/dist/es/runtime-parameter/global-variable-override-runtime-parameter-provider.js +49 -0
  139. package/dist/es/runtime-parameter/memory-runtime-parameter-provider.js +26 -0
  140. package/dist/es/runtime-parameter/runtime-parameter-provider.js +1 -0
  141. package/dist/es/runtime-parameter/runtime-parameter-ratchet.js +70 -0
  142. package/dist/es/runtime-parameter/stored-runtime-parameter.js +1 -0
  143. package/dist/es/s3/s3-cache-ratchet.js +328 -0
  144. package/dist/es/s3/s3-cache-to-local-disk-ratchet.js +100 -0
  145. package/dist/es/s3/s3-location-sync-ratchet.js +137 -0
  146. package/dist/es/s3/s3-ratchet.js +22 -0
  147. package/dist/es/ses/email-attachment.js +1 -0
  148. package/dist/es/ses/mailer-config.js +1 -0
  149. package/dist/es/ses/mailer-like.js +1 -0
  150. package/dist/es/ses/mailer.js +204 -0
  151. package/dist/es/ses/ratchet-template-renderer.js +1 -0
  152. package/dist/es/ses/ready-to-send-email.js +1 -0
  153. package/dist/es/ses/remote-handlebars-template-renderer.js +74 -0
  154. package/dist/es/ses/resolved-ready-to-send-email.js +1 -0
  155. package/dist/es/sns/sns-ratchet.js +43 -0
  156. package/dist/es/sync-lock/dynamo-db-sync-lock.js +65 -0
  157. package/dist/es/sync-lock/memory-sync-lock.js +36 -0
  158. package/dist/es/sync-lock/sync-lock-provider.js +1 -0
  159. package/dist/tsconfig.cjs.tsbuildinfo +1 -0
  160. package/dist/tsconfig.es.tsbuildinfo +1 -0
  161. package/dist/tsconfig.types.tsbuildinfo +1 -0
  162. package/dist/types/batch/aws-batch-background-processor.d.ts +12 -0
  163. package/dist/types/batch/aws-batch-ratchet.d.ts +16 -0
  164. package/dist/types/build/ratchet-aws-info.d.ts +5 -0
  165. package/dist/types/cache/dynamo-db-storage-provider.d.ts +25 -0
  166. package/dist/types/cache/s3-storage-provider.d.ts +14 -0
  167. package/dist/types/cache/simple-cache-object-wrapper.d.ts +7 -0
  168. package/dist/types/cache/simple-cache-read-options.d.ts +5 -0
  169. package/dist/types/cache/simple-cache-storage-provider.d.ts +8 -0
  170. package/dist/types/cache/simple-cache.d.ts +14 -0
  171. package/dist/types/cloudwatch/cloud-watch-log-group-ratchet.d.ts +9 -0
  172. package/dist/types/cloudwatch/cloud-watch-logs-ratchet.d.ts +14 -0
  173. package/dist/types/cloudwatch/cloud-watch-metrics-ratchet.d.ts +10 -0
  174. package/dist/types/daemon/daemon-like.d.ts +17 -0
  175. package/dist/types/daemon/daemon-process-create-options.d.ts +7 -0
  176. package/dist/types/daemon/daemon-process-state-public-token.d.ts +4 -0
  177. package/dist/types/daemon/daemon-process-state.d.ts +13 -0
  178. package/dist/types/daemon/daemon-util.d.ts +24 -0
  179. package/dist/types/daemon/daemon.d.ts +33 -0
  180. package/dist/types/dao/prototype-dao-config.d.ts +8 -0
  181. package/dist/types/dao/prototype-dao-db.d.ts +4 -0
  182. package/dist/types/dao/prototype-dao-provider.d.ts +5 -0
  183. package/dist/types/dao/prototype-dao.d.ts +15 -0
  184. package/dist/types/dao/s3-prototype-dao-provider.d.ts +10 -0
  185. package/dist/types/dao/s3-simple-dao.d.ts +15 -0
  186. package/dist/types/dao/simple-dao-item.d.ts +5 -0
  187. package/dist/types/dynamodb/dynamo-ratchet-like.d.ts +27 -0
  188. package/dist/types/dynamodb/dynamo-ratchet.d.ts +36 -0
  189. package/dist/types/dynamodb/dynamo-table-ratchet.d.ts +11 -0
  190. package/dist/types/dynamodb/hash-spreader.d.ts +15 -0
  191. package/dist/types/ec2/ec2-ratchet.d.ts +25 -0
  192. package/dist/types/environment/cascade-environment-service-provider.d.ts +9 -0
  193. package/dist/types/environment/env-var-environment-service-provider.d.ts +10 -0
  194. package/dist/types/environment/environment-service-config.d.ts +7 -0
  195. package/dist/types/environment/environment-service-provider.d.ts +7 -0
  196. package/dist/types/environment/environment-service.d.ts +14 -0
  197. package/dist/types/environment/fixed-environment-service-provider.d.ts +10 -0
  198. package/dist/types/environment/s3-environment-service-provider.d.ts +18 -0
  199. package/dist/types/environment/ssm-environment-service-provider.d.ts +12 -0
  200. package/dist/types/expiring-code/dynamo-expiring-code-provider.d.ts +12 -0
  201. package/dist/types/expiring-code/expiring-code-params.d.ts +7 -0
  202. package/dist/types/expiring-code/expiring-code-provider.d.ts +5 -0
  203. package/dist/types/expiring-code/expiring-code-ratchet.d.ts +13 -0
  204. package/dist/types/expiring-code/expiring-code.d.ts +6 -0
  205. package/dist/types/expiring-code/s3-expiring-code-provider.d.ts +17 -0
  206. package/dist/types/iam/aws-credentials-ratchet.d.ts +9 -0
  207. package/dist/types/index.d.ts +81 -0
  208. package/dist/types/lambda/lambda-event-detector.d.ts +14 -0
  209. package/dist/types/lambda/lambda-event-type-guards.d.ts +10 -0
  210. package/dist/types/model/cloud-watch-metrics-minute-level-dynamo-count-request.d.ts +12 -0
  211. package/dist/types/model/cloud-watch-metrics-unit.d.ts +29 -0
  212. package/dist/types/model/dynamo/doc-put-item-command-input.d.ts +4 -0
  213. package/dist/types/model/dynamo/doc-query-command-input.d.ts +5 -0
  214. package/dist/types/model/dynamo/doc-scan-command-input.d.ts +5 -0
  215. package/dist/types/model/dynamo/doc-update-item-command-input.d.ts +5 -0
  216. package/dist/types/model/dynamo-count-result.d.ts +5 -0
  217. package/dist/types/route53/route-53-ratchet.d.ts +7 -0
  218. package/dist/types/runtime-parameter/cached-stored-runtime-parameter.d.ts +4 -0
  219. package/dist/types/runtime-parameter/dynamo-runtime-parameter-provider.d.ts +11 -0
  220. package/dist/types/runtime-parameter/global-variable-override-runtime-parameter-provider.d.ts +24 -0
  221. package/dist/types/runtime-parameter/memory-runtime-parameter-provider.d.ts +13 -0
  222. package/dist/types/runtime-parameter/runtime-parameter-provider.d.ts +11 -0
  223. package/dist/types/runtime-parameter/runtime-parameter-ratchet.d.ts +15 -0
  224. package/dist/types/runtime-parameter/stored-runtime-parameter.d.ts +6 -0
  225. package/dist/types/s3/s3-cache-ratchet.d.ts +38 -0
  226. package/dist/types/s3/s3-cache-to-local-disk-ratchet.d.ts +21 -0
  227. package/dist/types/s3/s3-location-sync-ratchet.d.ts +21 -0
  228. package/dist/types/s3/s3-ratchet.d.ts +5 -0
  229. package/dist/types/ses/email-attachment.d.ts +23 -0
  230. package/dist/types/ses/mailer-config.d.ts +15 -0
  231. package/dist/types/ses/mailer-like.d.ts +18 -0
  232. package/dist/types/ses/mailer.d.ts +26 -0
  233. package/dist/types/ses/ratchet-template-renderer.d.ts +8 -0
  234. package/dist/types/ses/ready-to-send-email.d.ts +66 -0
  235. package/dist/types/ses/remote-handlebars-template-renderer.d.ts +15 -0
  236. package/dist/types/ses/resolved-ready-to-send-email.d.ts +16 -0
  237. package/dist/types/sns/sns-ratchet.d.ts +8 -0
  238. package/dist/types/sync-lock/dynamo-db-sync-lock.d.ts +10 -0
  239. package/dist/types/sync-lock/memory-sync-lock.d.ts +11 -0
  240. package/dist/types/sync-lock/sync-lock-provider.d.ts +5 -0
  241. package/package.json +112 -0
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DynamoTableRatchet = void 0;
4
+ const client_dynamodb_1 = require("@aws-sdk/client-dynamodb");
5
+ const ratchet_common_1 = require("@bitblit/ratchet-common");
6
+ const ratchet_common_2 = require("@bitblit/ratchet-common");
7
+ const ratchet_common_3 = require("@bitblit/ratchet-common");
8
+ const ratchet_common_4 = require("@bitblit/ratchet-common");
9
+ class DynamoTableRatchet {
10
+ constructor(awsDDB) {
11
+ this.awsDDB = awsDDB;
12
+ if (!awsDDB) {
13
+ throw 'awsDDB may not be null';
14
+ }
15
+ }
16
+ async deleteTable(tableName, waitForDelete = true) {
17
+ ratchet_common_2.RequireRatchet.notNullOrUndefined(tableName);
18
+ const input = {
19
+ TableName: tableName,
20
+ };
21
+ ratchet_common_1.Logger.debug('Deleting ddb table %s', tableName);
22
+ const rval = await this.awsDDB.send(new client_dynamodb_1.DeleteTableCommand(input));
23
+ if (waitForDelete) {
24
+ ratchet_common_1.Logger.debug('Table marked for delete, waiting for deletion');
25
+ await this.waitForTableDelete(tableName);
26
+ }
27
+ return rval;
28
+ }
29
+ async createTable(input, waitForReady = true, replaceIfExists = false) {
30
+ ratchet_common_2.RequireRatchet.notNullOrUndefined(input);
31
+ ratchet_common_2.RequireRatchet.notNullOrUndefined(input.TableName);
32
+ ratchet_common_1.Logger.debug('Creating new table : %j', input);
33
+ const exists = await this.tableExists(input.TableName);
34
+ if (exists) {
35
+ if (replaceIfExists) {
36
+ ratchet_common_1.Logger.debug('Table %s exists and replace specified - deleting', input.TableName);
37
+ await this.deleteTable(input.TableName);
38
+ }
39
+ else {
40
+ ratchet_common_4.ErrorRatchet.throwFormattedErr('Cannot create table %s - exists already and replace not specified', input.TableName);
41
+ }
42
+ }
43
+ const rval = await this.awsDDB.send(new client_dynamodb_1.CreateTableCommand(input));
44
+ if (waitForReady) {
45
+ ratchet_common_1.Logger.debug('Table created, awaiting ready');
46
+ await this.waitForTableReady(input.TableName);
47
+ }
48
+ return rval;
49
+ }
50
+ async waitForTableReady(tableName) {
51
+ let rval = true;
52
+ let out = await this.safeDescribeTable(tableName);
53
+ while (!!out && !!out.Table && out.Table.TableStatus !== 'ACTIVE') {
54
+ ratchet_common_1.Logger.silly('Table not ready - waiting 2 seconds');
55
+ await ratchet_common_3.PromiseRatchet.wait(2000);
56
+ out = await this.safeDescribeTable(tableName);
57
+ }
58
+ if (!out && !out.Table) {
59
+ ratchet_common_1.Logger.warn('Cannot wait for %s to be ready - table does not exist', tableName);
60
+ rval = false;
61
+ }
62
+ return rval;
63
+ }
64
+ async waitForTableDelete(tableName) {
65
+ let out = await this.safeDescribeTable(tableName);
66
+ while (!!out) {
67
+ ratchet_common_1.Logger.silly('Table %s still exists, waiting 2 seconds (State is %s)', tableName, out.Table.TableStatus);
68
+ await ratchet_common_3.PromiseRatchet.wait(2000);
69
+ out = await this.safeDescribeTable(tableName);
70
+ }
71
+ }
72
+ async tableExists(tableName) {
73
+ const desc = await this.safeDescribeTable(tableName);
74
+ return !!desc;
75
+ }
76
+ async safeDescribeTable(tableName) {
77
+ try {
78
+ const out = await this.awsDDB.send(new client_dynamodb_1.DescribeTableCommand({ TableName: tableName }));
79
+ return out;
80
+ }
81
+ catch (err) {
82
+ if (!!err['code'] && err['code'] === 'ResourceNotFoundException') {
83
+ return null;
84
+ }
85
+ else {
86
+ throw err;
87
+ }
88
+ }
89
+ }
90
+ }
91
+ exports.DynamoTableRatchet = DynamoTableRatchet;
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.HashSpreader = void 0;
4
+ const ratchet_common_1 = require("@bitblit/ratchet-common");
5
+ class HashSpreader {
6
+ constructor(spots = 3, buckets = 16, separator = '_', alphabet = '0123456789ABCDEF') {
7
+ this.spots = spots;
8
+ this.buckets = buckets;
9
+ this.separator = separator;
10
+ this.alphabet = alphabet;
11
+ ratchet_common_1.RequireRatchet.true(spots > 0, 'Spots must be larger than 0');
12
+ ratchet_common_1.RequireRatchet.true(buckets > 1, 'Buckets must be larger than 1');
13
+ ratchet_common_1.RequireRatchet.notNullOrUndefined(ratchet_common_1.StringRatchet.trimToNull(alphabet), 'Alphabet may not be null or empty');
14
+ ratchet_common_1.RequireRatchet.true(ratchet_common_1.StringRatchet.allUnique(alphabet), 'Alphabet must be unique');
15
+ ratchet_common_1.RequireRatchet.true(ratchet_common_1.StringRatchet.stringContainsOnlyAlphanumeric(alphabet), 'Alphabet must be alphanumeric');
16
+ const permutations = Math.pow(alphabet.length, spots);
17
+ ratchet_common_1.RequireRatchet.true(buckets < permutations, 'Buckets must be less than permutations (' + buckets + ' / ' + permutations + ')');
18
+ ratchet_common_1.RequireRatchet.notNullOrUndefined(ratchet_common_1.StringRatchet.trimToNull(this.separator), 'Separator must be nonnull and nonempty');
19
+ const allPerms = ratchet_common_1.StringRatchet.allPermutationsOfLength(spots, alphabet);
20
+ this._allSlots = allPerms.slice(0, buckets);
21
+ }
22
+ get allBuckets() {
23
+ return Object.assign([], this._allSlots);
24
+ }
25
+ get randomBucket() {
26
+ return this._allSlots[Math.floor(Math.random() * this.buckets)];
27
+ }
28
+ allSpreadValues(input) {
29
+ ratchet_common_1.RequireRatchet.notNullOrUndefined(ratchet_common_1.StringRatchet.trimToNull(input), 'Cannot spread null/empty value');
30
+ const rval = this._allSlots.map((s) => input + this.separator + s);
31
+ return rval;
32
+ }
33
+ allSpreadValuesForArray(inputs) {
34
+ ratchet_common_1.RequireRatchet.true(inputs && inputs.length > 0, 'Cannot spread null/empty array');
35
+ let rval = [];
36
+ inputs.forEach((i) => {
37
+ rval = rval.concat(this.allSpreadValues(i));
38
+ });
39
+ return rval;
40
+ }
41
+ addSpreader(input) {
42
+ ratchet_common_1.RequireRatchet.notNullOrUndefined(ratchet_common_1.StringRatchet.trimToNull(input), 'Cannot spread null/empty value');
43
+ return input + this.separator + this.randomBucket;
44
+ }
45
+ extractBucket(input) {
46
+ ratchet_common_1.RequireRatchet.notNullOrUndefined(ratchet_common_1.StringRatchet.trimToNull(input), 'Cannot extract from null or empty value');
47
+ const loc = input.length - this.spots;
48
+ if (loc < 0 || input.charAt(loc) !== this.separator) {
49
+ ratchet_common_1.ErrorRatchet.throwFormattedErr('Cannot extract bucket, not created by this spreader (missing %s at location %d)', this.separator, loc);
50
+ }
51
+ return input.substring(loc);
52
+ }
53
+ removeBucket(input) {
54
+ ratchet_common_1.RequireRatchet.notNullOrUndefined(ratchet_common_1.StringRatchet.trimToNull(input), 'Cannot extract from null or empty value');
55
+ const loc = input.length - this.spots;
56
+ if (loc < 0 || input.charAt(loc) !== this.separator) {
57
+ ratchet_common_1.ErrorRatchet.throwFormattedErr('Cannot remove bucket, not created by this spreader (missing %s at location %d)', this.separator, loc);
58
+ }
59
+ return input.substring(0, loc);
60
+ }
61
+ }
62
+ exports.HashSpreader = HashSpreader;
@@ -0,0 +1,107 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Ec2Ratchet = void 0;
4
+ const client_ec2_1 = require("@aws-sdk/client-ec2");
5
+ const client_ec2_instance_connect_1 = require("@aws-sdk/client-ec2-instance-connect");
6
+ const ratchet_common_1 = require("@bitblit/ratchet-common");
7
+ const ratchet_common_2 = require("@bitblit/ratchet-common");
8
+ const ratchet_common_3 = require("@bitblit/ratchet-common");
9
+ class Ec2Ratchet {
10
+ constructor(region = 'us-east-1', availabilityZone = 'us-east-1a') {
11
+ this.region = region;
12
+ this.availabilityZone = availabilityZone;
13
+ this.ec2 = new client_ec2_1.EC2Client({ region: region });
14
+ this.ec2InstanceConnect = new client_ec2_instance_connect_1.EC2InstanceConnectClient({ region: region });
15
+ }
16
+ async stopInstance(instanceId, maxWaitForShutdownMS = 0) {
17
+ let rval = true;
18
+ try {
19
+ const stopParams = {
20
+ InstanceIds: [instanceId],
21
+ DryRun: false,
22
+ };
23
+ ratchet_common_1.Logger.info('About to stop instances : %j', stopParams);
24
+ await this.ec2.send(new client_ec2_1.StopInstancesCommand(stopParams));
25
+ ratchet_common_1.Logger.info('Stop instance command sent, waiting on shutdown');
26
+ let status = await this.describeInstance(instanceId);
27
+ if (maxWaitForShutdownMS > 0) {
28
+ const start = new Date().getTime();
29
+ while (!!status && status.State.Code !== 16 && new Date().getTime() - start < maxWaitForShutdownMS) {
30
+ ratchet_common_1.Logger.debug('Instance status is %j - waiting for 5 seconds (up to %s)', status.State, ratchet_common_2.DurationRatchet.formatMsDuration(maxWaitForShutdownMS));
31
+ await ratchet_common_3.PromiseRatchet.wait(5000);
32
+ status = await this.describeInstance(instanceId);
33
+ }
34
+ }
35
+ }
36
+ catch (err) {
37
+ ratchet_common_1.Logger.error('Failed to stop instance %s : %s', instanceId, err, err);
38
+ rval = false;
39
+ }
40
+ return rval;
41
+ }
42
+ async launchInstance(instanceId, maxWaitForStartupMS = 0) {
43
+ let rval = true;
44
+ try {
45
+ const startParams = {
46
+ InstanceIds: [instanceId],
47
+ DryRun: false,
48
+ };
49
+ ratchet_common_1.Logger.info('About to start instance : %j', startParams);
50
+ await this.ec2.send(new client_ec2_1.StartInstancesCommand(startParams));
51
+ ratchet_common_1.Logger.info('Start instance command sent, waiting on startup');
52
+ let status = await this.describeInstance(instanceId);
53
+ if (maxWaitForStartupMS > 0) {
54
+ const start = new Date().getTime();
55
+ while (!!status && status.State.Code !== 16 && new Date().getTime() - start < maxWaitForStartupMS) {
56
+ ratchet_common_1.Logger.debug('Instance status is %j - waiting for 5 seconds (up to %s)', status.State, ratchet_common_2.DurationRatchet.formatMsDuration(maxWaitForStartupMS));
57
+ await ratchet_common_3.PromiseRatchet.wait(5000);
58
+ status = await this.describeInstance(instanceId);
59
+ }
60
+ }
61
+ if (!!status && !!status.PublicIpAddress) {
62
+ ratchet_common_1.Logger.info('Instance address is %s', status.PublicIpAddress);
63
+ ratchet_common_1.Logger.info('SSH command : ssh -i path_to_pem_file ec2-user@%s', status.PublicIpAddress);
64
+ }
65
+ }
66
+ catch (err) {
67
+ ratchet_common_1.Logger.error('Failed to start instance %s : %s', instanceId, err, err);
68
+ rval = false;
69
+ }
70
+ return rval;
71
+ }
72
+ async describeInstance(instanceId) {
73
+ const res = await this.listAllInstances([instanceId]);
74
+ return res.length === 1 ? res[0] : null;
75
+ }
76
+ async listAllInstances(instanceIds = []) {
77
+ let rval = [];
78
+ const req = {
79
+ NextToken: null,
80
+ };
81
+ if (instanceIds && instanceIds.length > 0) {
82
+ req.InstanceIds = instanceIds;
83
+ }
84
+ do {
85
+ ratchet_common_1.Logger.debug('Pulling instances... (%j)', req);
86
+ const res = await this.ec2.send(new client_ec2_1.DescribeInstancesCommand(req));
87
+ res.Reservations.forEach((r) => {
88
+ rval = rval.concat(r.Instances);
89
+ });
90
+ req.NextToken = res.NextToken;
91
+ } while (req.NextToken);
92
+ ratchet_common_1.Logger.debug('Finished pulling instances (found %d)', rval.length);
93
+ return rval;
94
+ }
95
+ async sendPublicKeyToEc2Instance(instanceId, publicKeyString, instanceOsUser) {
96
+ const userName = instanceOsUser || 'ec2-user';
97
+ const req = {
98
+ InstanceId: instanceId,
99
+ AvailabilityZone: this.availabilityZone,
100
+ InstanceOSUser: userName,
101
+ SSHPublicKey: publicKeyString,
102
+ };
103
+ const rval = await this.ec2InstanceConnect.send(new client_ec2_instance_connect_1.SendSSHPublicKeyCommand(req));
104
+ return rval;
105
+ }
106
+ }
107
+ exports.Ec2Ratchet = Ec2Ratchet;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CascadeEnvironmentServiceProvider = void 0;
4
+ const ratchet_common_1 = require("@bitblit/ratchet-common");
5
+ const ratchet_common_2 = require("@bitblit/ratchet-common");
6
+ class CascadeEnvironmentServiceProvider {
7
+ constructor(providers) {
8
+ this.providers = providers;
9
+ ratchet_common_2.RequireRatchet.notNullOrUndefined(providers);
10
+ ratchet_common_2.RequireRatchet.true(providers.length > 0);
11
+ }
12
+ async fetchConfig(name) {
13
+ ratchet_common_1.Logger.silly('CascadeEnvironmentServiceProvider fetch for %s', name);
14
+ let rval = null;
15
+ for (let i = 0; i < this.providers.length && !rval; i++) {
16
+ try {
17
+ rval = await this.providers[i].fetchConfig(name);
18
+ }
19
+ catch (err) {
20
+ ratchet_common_1.Logger.error('Provider %d failed - trying next : %s', i, err, err);
21
+ rval = null;
22
+ }
23
+ }
24
+ return rval;
25
+ }
26
+ }
27
+ exports.CascadeEnvironmentServiceProvider = CascadeEnvironmentServiceProvider;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EnvVarEnvironmentServiceProvider = void 0;
4
+ const ratchet_common_1 = require("@bitblit/ratchet-common");
5
+ const ratchet_common_2 = require("@bitblit/ratchet-common");
6
+ const ratchet_common_3 = require("@bitblit/ratchet-common");
7
+ const ratchet_common_4 = require("@bitblit/ratchet-common");
8
+ class EnvVarEnvironmentServiceProvider {
9
+ constructor(envVarName) {
10
+ this.envVarName = envVarName;
11
+ ratchet_common_2.RequireRatchet.notNullOrUndefined(envVarName);
12
+ }
13
+ async fetchConfig() {
14
+ ratchet_common_1.Logger.silly('EnvVarEnvironmentServiceProvider fetch for %s', this.envVarName);
15
+ let rval = null;
16
+ const src = process ? process.env : global ? global : {};
17
+ const toParse = ratchet_common_4.StringRatchet.trimToNull(src[this.envVarName]);
18
+ if (toParse) {
19
+ try {
20
+ rval = JSON.parse(toParse);
21
+ }
22
+ catch (err) {
23
+ ratchet_common_1.Logger.error('Failed to read env - null or invalid JSON : %s : %s', err, toParse, err);
24
+ throw err;
25
+ }
26
+ }
27
+ else {
28
+ ratchet_common_3.ErrorRatchet.throwFormattedErr('Could not find env var with name : %s', this.envVarName);
29
+ }
30
+ return rval;
31
+ }
32
+ }
33
+ exports.EnvVarEnvironmentServiceProvider = EnvVarEnvironmentServiceProvider;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,52 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.EnvironmentService = void 0;
4
+ const ratchet_common_1 = require("@bitblit/ratchet-common");
5
+ const ratchet_common_2 = require("@bitblit/ratchet-common");
6
+ const ratchet_common_3 = require("@bitblit/ratchet-common");
7
+ const ratchet_common_4 = require("@bitblit/ratchet-common");
8
+ class EnvironmentService {
9
+ static defaultEnvironmentServiceConfig() {
10
+ const rval = {
11
+ maxRetries: 3,
12
+ backoffMultiplierMS: 500,
13
+ };
14
+ return rval;
15
+ }
16
+ constructor(provider, cfg = EnvironmentService.defaultEnvironmentServiceConfig()) {
17
+ this.provider = provider;
18
+ this.cfg = cfg;
19
+ this.readPromiseCache = new Map();
20
+ ratchet_common_3.RequireRatchet.notNullOrUndefined(provider);
21
+ ratchet_common_3.RequireRatchet.notNullOrUndefined(cfg);
22
+ }
23
+ async getConfig(name) {
24
+ ratchet_common_1.Logger.silly('EnvService:Request to read config %s', name);
25
+ if (!this.readPromiseCache.has(name)) {
26
+ ratchet_common_1.Logger.silly('EnvService: Nothing in cache - adding');
27
+ this.readPromiseCache.set(name, this.getConfigUncached(name));
28
+ }
29
+ return this.readPromiseCache.get(name);
30
+ }
31
+ async getConfigUncached(name) {
32
+ let tryCount = 1;
33
+ let rval = null;
34
+ while (!rval && tryCount < this.cfg.maxRetries) {
35
+ tryCount++;
36
+ ratchet_common_1.Logger.silly('Attempting fetch of %s', name);
37
+ try {
38
+ rval = await this.provider.fetchConfig(name);
39
+ }
40
+ catch (err) {
41
+ const waitMS = tryCount * this.cfg.backoffMultiplierMS;
42
+ ratchet_common_1.Logger.info('Error attempting to fetch config %s (try %d of %d, waiting %s MS): %s', name, tryCount, this.cfg.maxRetries, waitMS, err, err);
43
+ await ratchet_common_2.PromiseRatchet.wait(waitMS);
44
+ }
45
+ }
46
+ if (!rval) {
47
+ ratchet_common_4.ErrorRatchet.throwFormattedErr('Was unable to fetch config %s even after %d retries', name, this.cfg.maxRetries);
48
+ }
49
+ return rval;
50
+ }
51
+ }
52
+ exports.EnvironmentService = EnvironmentService;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FixedEnvironmentServiceProvider = void 0;
4
+ const ratchet_common_1 = require("@bitblit/ratchet-common");
5
+ const ratchet_common_2 = require("@bitblit/ratchet-common");
6
+ class FixedEnvironmentServiceProvider {
7
+ constructor(value) {
8
+ this.value = value;
9
+ ratchet_common_2.RequireRatchet.notNullOrUndefined(value);
10
+ }
11
+ static fromRecord(record) {
12
+ const m = new Map();
13
+ Object.keys(record).forEach((k) => {
14
+ m.set(k, record[k]);
15
+ });
16
+ return new FixedEnvironmentServiceProvider(m);
17
+ }
18
+ async fetchConfig(name) {
19
+ ratchet_common_1.Logger.silly('FixedEnvironmentServiceProvider fetch for %s', name);
20
+ const rval = this.value.get(name);
21
+ return rval;
22
+ }
23
+ }
24
+ exports.FixedEnvironmentServiceProvider = FixedEnvironmentServiceProvider;
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.S3EnvironmentServiceProvider = void 0;
4
+ const s3_cache_ratchet_1 = require("../s3/s3-cache-ratchet");
5
+ const ratchet_common_1 = require("@bitblit/ratchet-common");
6
+ const ratchet_common_2 = require("@bitblit/ratchet-common");
7
+ const ratchet_common_3 = require("@bitblit/ratchet-common");
8
+ const ratchet_common_4 = require("@bitblit/ratchet-common");
9
+ const client_s3_1 = require("@aws-sdk/client-s3");
10
+ class S3EnvironmentServiceProvider {
11
+ constructor(cfg) {
12
+ this.cfg = cfg;
13
+ ratchet_common_1.RequireRatchet.notNullOrUndefined(cfg);
14
+ ratchet_common_1.RequireRatchet.notNullOrUndefined(cfg.bucketName);
15
+ ratchet_common_1.RequireRatchet.notNullOrUndefined(cfg.region);
16
+ ratchet_common_1.RequireRatchet.true(!!cfg.s3Override || !!cfg.region, 'You must set either region or S3Override');
17
+ const s3 = cfg.s3Override || new client_s3_1.S3Client({ region: cfg.region });
18
+ this.ratchet = new s3_cache_ratchet_1.S3CacheRatchet(s3, cfg.bucketName);
19
+ }
20
+ async fetchConfig(name) {
21
+ const readPath = ratchet_common_4.StringRatchet.trimToEmpty(this.cfg.pathPrefix) + name + ratchet_common_4.StringRatchet.trimToEmpty(this.cfg.pathSuffix);
22
+ ratchet_common_3.Logger.silly('S3EnvironmentServiceProvider:Request to read config from : %s / %s', this.cfg.bucketName, readPath);
23
+ const sw = new ratchet_common_2.StopWatch();
24
+ const rval = await this.ratchet.fetchCacheFileAsObject(readPath);
25
+ sw.log();
26
+ return rval;
27
+ }
28
+ }
29
+ exports.S3EnvironmentServiceProvider = S3EnvironmentServiceProvider;
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SsmEnvironmentServiceProvider = void 0;
4
+ const ratchet_common_1 = require("@bitblit/ratchet-common");
5
+ const client_ssm_1 = require("@aws-sdk/client-ssm");
6
+ const ratchet_common_2 = require("@bitblit/ratchet-common");
7
+ const ratchet_common_3 = require("@bitblit/ratchet-common");
8
+ const ratchet_common_4 = require("@bitblit/ratchet-common");
9
+ const ratchet_common_5 = require("@bitblit/ratchet-common");
10
+ class SsmEnvironmentServiceProvider {
11
+ constructor(region = 'us-east-1', ssmEncrypted = true) {
12
+ this.region = region;
13
+ this.ssmEncrypted = ssmEncrypted;
14
+ ratchet_common_3.RequireRatchet.notNullOrUndefined(region);
15
+ ratchet_common_3.RequireRatchet.notNullOrUndefined(ssmEncrypted);
16
+ this.ssm = new client_ssm_1.SSMClient({ region: this.region });
17
+ }
18
+ async fetchConfig(name) {
19
+ var _a;
20
+ ratchet_common_1.Logger.silly('SsmEnvironmentServiceProvider fetch for %s', name);
21
+ const params = {
22
+ Name: name,
23
+ WithDecryption: this.ssmEncrypted,
24
+ };
25
+ let rval = null;
26
+ let toParse = null;
27
+ try {
28
+ const value = await this.ssm.send(new client_ssm_1.GetParameterCommand(params));
29
+ toParse = ratchet_common_5.StringRatchet.trimToNull((_a = value === null || value === void 0 ? void 0 : value.Parameter) === null || _a === void 0 ? void 0 : _a.Value);
30
+ }
31
+ catch (err) {
32
+ const errCode = err['code'] || '';
33
+ if (errCode.toLowerCase().indexOf('throttlingexception') !== -1) {
34
+ ratchet_common_1.Logger.warn('Throttled while trying to read parameters - waiting 1 second before allowing retry');
35
+ await ratchet_common_2.PromiseRatchet.wait(1000);
36
+ }
37
+ else if (errCode.toLowerCase().indexOf('parameternotfound') !== -1) {
38
+ const errMsg = ratchet_common_1.Logger.warn('AWS could not find parameter %s - are you using the right AWS key?', name);
39
+ throw new Error(errMsg);
40
+ }
41
+ else {
42
+ ratchet_common_1.Logger.error('Final environment fetch error (cannot retry) : %s', err, err);
43
+ throw err;
44
+ }
45
+ }
46
+ if (toParse) {
47
+ try {
48
+ rval = JSON.parse(toParse);
49
+ }
50
+ catch (err) {
51
+ ratchet_common_1.Logger.error('Failed to read env - null or invalid JSON : %s : %s', err, toParse, err);
52
+ throw err;
53
+ }
54
+ }
55
+ else {
56
+ ratchet_common_4.ErrorRatchet.throwFormattedErr('Could not find system parameter with name : %s in this account', name);
57
+ }
58
+ return rval;
59
+ }
60
+ }
61
+ exports.SsmEnvironmentServiceProvider = SsmEnvironmentServiceProvider;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DynamoExpiringCodeProvider = void 0;
4
+ class DynamoExpiringCodeProvider {
5
+ constructor(tableName, dynamoRatchet) {
6
+ this.tableName = tableName;
7
+ this.dynamoRatchet = dynamoRatchet;
8
+ }
9
+ async checkCode(code, context, deleteOnMatch) {
10
+ const keys = { code: code, context: context };
11
+ const expCode = await this.dynamoRatchet.simpleGet(this.tableName, keys);
12
+ const rval = expCode && expCode.expiresEpochMS > Date.now();
13
+ if (rval && deleteOnMatch) {
14
+ await this.dynamoRatchet.simpleDelete(this.tableName, keys);
15
+ }
16
+ return rval;
17
+ }
18
+ async storeCode(code) {
19
+ const output = await this.dynamoRatchet.simplePut(this.tableName, code);
20
+ return output && output.ConsumedCapacity.CapacityUnits > 0;
21
+ }
22
+ async createTableIfMissing(dtr) {
23
+ return null;
24
+ }
25
+ }
26
+ exports.DynamoExpiringCodeProvider = DynamoExpiringCodeProvider;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ExpiringCodeRatchet = void 0;
4
+ const ratchet_common_1 = require("@bitblit/ratchet-common");
5
+ const ratchet_common_2 = require("@bitblit/ratchet-common");
6
+ class ExpiringCodeRatchet {
7
+ constructor(provider) {
8
+ this.provider = provider;
9
+ }
10
+ static generateCode(params) {
11
+ ratchet_common_1.RequireRatchet.notNullOrUndefined(params, 'params');
12
+ ratchet_common_1.RequireRatchet.notNullOrUndefined(params.context, 'params.context');
13
+ ratchet_common_1.RequireRatchet.notNullOrUndefined(params.length, 'params.length');
14
+ ratchet_common_1.RequireRatchet.notNullOrUndefined(params.alphabet, 'params.alphabet');
15
+ let code = '';
16
+ for (let i = 0; i < params.length; i++) {
17
+ code += params.alphabet.charAt(Math.floor(params.alphabet.length * Math.random()));
18
+ }
19
+ const rval = {
20
+ code: code,
21
+ context: params.context,
22
+ tags: params.tags,
23
+ expiresEpochMS: Date.now() + params.timeToLiveSeconds * 1000,
24
+ };
25
+ return rval;
26
+ }
27
+ async createNewCode(params) {
28
+ const value = ExpiringCodeRatchet.generateCode(params);
29
+ const rval = await this.provider.storeCode(value);
30
+ return rval ? value : null;
31
+ }
32
+ async checkCode(code, context, deleteOnMatch) {
33
+ const rval = await this.provider.checkCode(ratchet_common_2.StringRatchet.trimToEmpty(code), ratchet_common_2.StringRatchet.trimToEmpty(context), deleteOnMatch);
34
+ return rval;
35
+ }
36
+ }
37
+ exports.ExpiringCodeRatchet = ExpiringCodeRatchet;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.S3ExpiringCodeProvider = void 0;
4
+ const ratchet_common_1 = require("@bitblit/ratchet-common");
5
+ class S3ExpiringCodeProvider {
6
+ constructor(s3CacheRatchet, keyName) {
7
+ this.s3CacheRatchet = s3CacheRatchet;
8
+ this.keyName = keyName;
9
+ ratchet_common_1.RequireRatchet.notNullOrUndefined(s3CacheRatchet, 's3CacheRatchet');
10
+ ratchet_common_1.RequireRatchet.notNullUndefinedOrOnlyWhitespaceString(s3CacheRatchet.getDefaultBucket(), 's3CacheRatchet.defaultBucket');
11
+ ratchet_common_1.RequireRatchet.notNullUndefinedOrOnlyWhitespaceString(keyName, 'keyName');
12
+ }
13
+ async fetchFile() {
14
+ const rval = (await this.s3CacheRatchet.fetchCacheFileAsObject(this.keyName)) || {
15
+ data: [],
16
+ lastModifiedEpochMS: Date.now(),
17
+ };
18
+ return rval;
19
+ }
20
+ async updateFile(vals) {
21
+ const next = {
22
+ data: vals || [],
23
+ lastModifiedEpochMS: Date.now(),
24
+ };
25
+ next.data = next.data.filter((d) => d.expiresEpochMS > Date.now());
26
+ ratchet_common_1.Logger.info('Updating code file to %s codes', next.data.length);
27
+ const rval = await this.s3CacheRatchet.writeObjectToCacheFile(this.keyName, next);
28
+ return rval;
29
+ }
30
+ async checkCode(code, context, deleteOnMatch) {
31
+ const val = await this.fetchFile();
32
+ const rval = val.data.find((d) => { var _a, _b; return ((_a = d === null || d === void 0 ? void 0 : d.code) === null || _a === void 0 ? void 0 : _a.toUpperCase()) === (code === null || code === void 0 ? void 0 : code.toUpperCase()) && ((_b = d === null || d === void 0 ? void 0 : d.context) === null || _b === void 0 ? void 0 : _b.toUpperCase()) === (context === null || context === void 0 ? void 0 : context.toUpperCase()); });
33
+ if (rval) {
34
+ if (deleteOnMatch || rval.expiresEpochMS < Date.now()) {
35
+ ratchet_common_1.Logger.info('Stripping used/expired code from the database');
36
+ const newData = val.data.filter((d) => d != rval);
37
+ await this.updateFile(newData);
38
+ }
39
+ }
40
+ return !!rval && rval.expiresEpochMS > Date.now();
41
+ }
42
+ async storeCode(code) {
43
+ const old = await this.fetchFile();
44
+ old.data.push(code);
45
+ const wrote = await this.updateFile(old.data);
46
+ return !!wrote;
47
+ }
48
+ }
49
+ exports.S3ExpiringCodeProvider = S3ExpiringCodeProvider;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AwsCredentialsRatchet = void 0;
4
+ const ratchet_common_1 = require("@bitblit/ratchet-common");
5
+ class AwsCredentialsRatchet {
6
+ constructor() { }
7
+ static applySetProfileEnvironmentalVariable(newProfile) {
8
+ if (!!process.env) {
9
+ if (ratchet_common_1.StringRatchet.trimToNull(newProfile)) {
10
+ process.env['AWS_PROFILE'] = newProfile;
11
+ }
12
+ else {
13
+ ratchet_common_1.ErrorRatchet.throwFormattedErr('Cannot set profile to null/empty string');
14
+ }
15
+ }
16
+ else {
17
+ ratchet_common_1.ErrorRatchet.throwFormattedErr('Cannot set profile - not in a node environment - process missing');
18
+ }
19
+ }
20
+ }
21
+ exports.AwsCredentialsRatchet = AwsCredentialsRatchet;