@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,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DaemonUtil = void 0;
4
+ const ratchet_common_1 = require("@bitblit/ratchet-common");
5
+ const client_s3_1 = require("@aws-sdk/client-s3");
6
+ const lib_storage_1 = require("@aws-sdk/lib-storage");
7
+ class DaemonUtil {
8
+ static async start(cache, id, s3Key, options) {
9
+ try {
10
+ options.meta = options.meta || {};
11
+ ratchet_common_1.Logger.info('Starting daemon, key: %s, options: %j', s3Key, options);
12
+ const now = new Date().getTime();
13
+ const newState = {
14
+ id: id,
15
+ title: options.title,
16
+ lastUpdatedEpochMS: now,
17
+ lastUpdatedMessage: 'Created',
18
+ targetFileName: options.targetFileName,
19
+ startedEpochMS: now,
20
+ completedEpochMS: null,
21
+ meta: options.meta,
22
+ error: null,
23
+ link: null,
24
+ contentType: options.contentType,
25
+ };
26
+ const rval = await DaemonUtil.writeState(cache, s3Key, newState, DaemonUtil.DEFAULT_CONTENT);
27
+ return rval;
28
+ }
29
+ catch (err) {
30
+ ratchet_common_1.Logger.error('Error while trying to start a daemon: %j %s', options, err);
31
+ throw err;
32
+ }
33
+ }
34
+ static async writeState(cache, s3Key, newState, contents) {
35
+ try {
36
+ const s3meta = {};
37
+ newState.lastUpdatedEpochMS = new Date().getTime();
38
+ s3meta[DaemonUtil.DAEMON_METADATA_KEY] = JSON.stringify(newState);
39
+ const params = {
40
+ Bucket: cache.getDefaultBucket(),
41
+ Key: s3Key,
42
+ ContentType: newState.contentType,
43
+ Metadata: s3meta,
44
+ Body: new Blob([contents]),
45
+ };
46
+ if (newState.targetFileName) {
47
+ params.ContentDisposition = 'attachment;filename="' + newState.targetFileName + '"';
48
+ }
49
+ const written = await cache.getS3Client().send(new client_s3_1.PutObjectCommand(params));
50
+ ratchet_common_1.Logger.silly('Daemon wrote : %s', written);
51
+ return DaemonUtil.stat(cache, s3Key);
52
+ }
53
+ catch (err) {
54
+ ratchet_common_1.Logger.error('Error while trying to write a daemon stat: %j %s', newState, err);
55
+ throw err;
56
+ }
57
+ }
58
+ static async streamDataAndFinish(cache, s3Key, data) {
59
+ ratchet_common_1.Logger.debug('Streaming data to %s', s3Key);
60
+ const inStat = await DaemonUtil.updateMessage(cache, s3Key, 'Streaming data');
61
+ inStat.completedEpochMS = new Date().getTime();
62
+ inStat.lastUpdatedMessage = 'Complete';
63
+ const s3meta = {};
64
+ s3meta[DaemonUtil.DAEMON_METADATA_KEY] = JSON.stringify(inStat);
65
+ const params = {
66
+ Bucket: cache.getDefaultBucket(),
67
+ Key: s3Key,
68
+ ContentType: inStat.contentType,
69
+ Metadata: s3meta,
70
+ Body: data,
71
+ };
72
+ const upload = new lib_storage_1.Upload({
73
+ client: cache.getS3Client(),
74
+ params: params,
75
+ tags: [],
76
+ queueSize: 4,
77
+ partSize: 1024 * 1024 * 5,
78
+ leavePartsOnError: false,
79
+ });
80
+ upload.on('httpUploadProgress', (progress) => {
81
+ ratchet_common_1.Logger.info('Uploading : %s', progress);
82
+ });
83
+ const written = await upload.done();
84
+ ratchet_common_1.Logger.silly('Daemon wrote : %s', written);
85
+ return DaemonUtil.stat(cache, s3Key);
86
+ }
87
+ static async updateMessage(cache, s3Key, newMessage) {
88
+ try {
89
+ const inStat = await DaemonUtil.stat(cache, s3Key);
90
+ inStat.lastUpdatedMessage = newMessage;
91
+ return DaemonUtil.writeState(cache, s3Key, inStat, DaemonUtil.DEFAULT_CONTENT);
92
+ }
93
+ catch (err) {
94
+ ratchet_common_1.Logger.error('Error while trying to update a daemon message: %j %s', s3Key, err);
95
+ throw err;
96
+ }
97
+ }
98
+ static async stat(s3Cache, path) {
99
+ try {
100
+ ratchet_common_1.Logger.debug('Daemon stat for path %s / %s', s3Cache.getDefaultBucket(), path);
101
+ let stat = null;
102
+ const meta = await s3Cache.fetchMetaForCacheFile(path);
103
+ ratchet_common_1.Logger.debug('Daemon: Meta is %j', meta);
104
+ const metaString = meta && meta.Metadata ? meta.Metadata[DaemonUtil.DAEMON_METADATA_KEY] : null;
105
+ if (metaString) {
106
+ stat = JSON.parse(metaString);
107
+ if (stat.completedEpochMS && !stat.error) {
108
+ stat.link = await s3Cache.preSignedDownloadUrlForCacheFile(path);
109
+ }
110
+ }
111
+ else {
112
+ ratchet_common_1.Logger.warn('No metadata found! (Head was %j)', meta);
113
+ }
114
+ return stat;
115
+ }
116
+ catch (err) {
117
+ ratchet_common_1.Logger.error('Error while trying to fetch a daemon state: %j %s', path, err);
118
+ throw err;
119
+ }
120
+ }
121
+ static async abort(s3Cache, path) {
122
+ return DaemonUtil.error(s3Cache, path, 'Aborted');
123
+ }
124
+ static async error(s3Cache, path, error) {
125
+ try {
126
+ const inStat = await DaemonUtil.stat(s3Cache, path);
127
+ inStat.error = error;
128
+ inStat.completedEpochMS = new Date().getTime();
129
+ return DaemonUtil.writeState(s3Cache, path, inStat, DaemonUtil.DEFAULT_CONTENT);
130
+ }
131
+ catch (err) {
132
+ ratchet_common_1.Logger.error('Error while trying to write a daemon error: %j %s', path, err);
133
+ throw err;
134
+ }
135
+ }
136
+ static async finalize(s3Cache, path, contents) {
137
+ try {
138
+ ratchet_common_1.Logger.info('Finalizing daemon %s with %d bytes', path, contents.length);
139
+ const inStat = await DaemonUtil.stat(s3Cache, path);
140
+ inStat.completedEpochMS = new Date().getTime();
141
+ inStat.lastUpdatedMessage = 'Complete';
142
+ return DaemonUtil.writeState(s3Cache, path, inStat, contents);
143
+ }
144
+ catch (err) {
145
+ ratchet_common_1.Logger.error('Error while trying to finalize a daemon: %j %s', path, err);
146
+ throw err;
147
+ }
148
+ }
149
+ }
150
+ exports.DaemonUtil = DaemonUtil;
151
+ DaemonUtil.DEFAULT_CONTENT = Buffer.from('DAEMON_PLACEHOLDER');
152
+ DaemonUtil.DAEMON_METADATA_KEY = 'daemon_meta';
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Daemon = void 0;
4
+ const ratchet_common_1 = require("@bitblit/ratchet-common");
5
+ const s3_cache_ratchet_1 = require("../s3/s3-cache-ratchet");
6
+ const ratchet_common_2 = require("@bitblit/ratchet-common");
7
+ const daemon_util_1 = require("./daemon-util");
8
+ const ratchet_common_3 = require("@bitblit/ratchet-common");
9
+ class Daemon {
10
+ constructor(s3, bucket, prefix = '', _defaultGroup = Daemon.DEFAULT_DEFAULT_GROUP, jwtRatchet) {
11
+ this.s3 = s3;
12
+ this.bucket = bucket;
13
+ this.prefix = prefix;
14
+ this._defaultGroup = _defaultGroup;
15
+ this.jwtRatchet = jwtRatchet;
16
+ this.cache = new s3_cache_ratchet_1.S3CacheRatchet(this.s3, this.bucket);
17
+ }
18
+ get defaultGroup() {
19
+ return this._defaultGroup;
20
+ }
21
+ async keyToPublicToken(key, expirationSeconds) {
22
+ ratchet_common_3.RequireRatchet.notNullOrUndefined(this.jwtRatchet, 'You must set jwtRatchet if you wish to use public tokens');
23
+ ratchet_common_3.RequireRatchet.notNullOrUndefined(key, 'key');
24
+ ratchet_common_3.RequireRatchet.true(expirationSeconds > 0, 'Expiration seconds must be larger than 0');
25
+ const token = { daemonKey: key };
26
+ const publicToken = await this.jwtRatchet.createTokenString(token, expirationSeconds);
27
+ return publicToken;
28
+ }
29
+ keyToPath(key) {
30
+ return Buffer.from(key, 'base64').toString();
31
+ }
32
+ pathToKey(path) {
33
+ return Buffer.from(path).toString('base64');
34
+ }
35
+ generatePath(group = this._defaultGroup) {
36
+ return this.generatePrefix(group) + ratchet_common_2.StringRatchet.createType4Guid();
37
+ }
38
+ generatePrefix(group = this._defaultGroup) {
39
+ return this.prefix + group + '/';
40
+ }
41
+ async start(options) {
42
+ options.group = options.group || this._defaultGroup;
43
+ const path = this.generatePath(options.group);
44
+ const key = this.pathToKey(path);
45
+ return daemon_util_1.DaemonUtil.start(this.cache, key, path, options);
46
+ }
47
+ async writeState(newState, contents) {
48
+ const key = this.keyToPath(newState.id);
49
+ return daemon_util_1.DaemonUtil.writeState(this.cache, key, newState, contents);
50
+ }
51
+ async clean(group = this._defaultGroup, olderThanSeconds = 60 * 60 * 24 * 7) {
52
+ try {
53
+ ratchet_common_1.Logger.info('Daemon removing items older than %d seconds from group %s', olderThanSeconds, group);
54
+ const original = await this.list(group);
55
+ const now = new Date().getTime();
56
+ const removed = [];
57
+ for (let i = 0; i < original.length; i++) {
58
+ const test = original[i];
59
+ const ageSeconds = (now - test.startedEpochMS) / 1000;
60
+ if (ageSeconds > olderThanSeconds) {
61
+ const remove = await this.cache.removeCacheFile(this.keyToPath(test.id));
62
+ removed.push(test);
63
+ }
64
+ }
65
+ ratchet_common_1.Logger.debug('Removed %d of %d items', removed.length, original.length);
66
+ return removed;
67
+ }
68
+ catch (err) {
69
+ ratchet_common_1.Logger.error('Error while trying to clean a daemon: %j %s', group, err);
70
+ throw err;
71
+ }
72
+ }
73
+ async listKeys(group = this._defaultGroup) {
74
+ try {
75
+ const prefix = this.generatePrefix(group);
76
+ ratchet_common_1.Logger.info('Fetching children of %s', prefix);
77
+ const rval = await this.cache.directChildrenOfPrefix(prefix);
78
+ ratchet_common_1.Logger.debug('Found : %j', rval);
79
+ return rval;
80
+ }
81
+ catch (err) {
82
+ ratchet_common_1.Logger.error('Error while trying to list daemon keys: %j %s', group, err);
83
+ throw err;
84
+ }
85
+ }
86
+ async list(group = this._defaultGroup) {
87
+ try {
88
+ const prefix = this.generatePrefix(group);
89
+ ratchet_common_1.Logger.info('Fetching children of %s', prefix);
90
+ const keys = await this.listKeys(group);
91
+ const proms = keys.map((k) => this.stat(this.pathToKey(this.generatePrefix(group) + k)));
92
+ const rval = await Promise.all(proms);
93
+ return rval;
94
+ }
95
+ catch (err) {
96
+ ratchet_common_1.Logger.error('Error while trying to list daemon states: %j %s', group, err);
97
+ throw err;
98
+ }
99
+ }
100
+ async updateMessage(id, newMessage) {
101
+ const itemPath = this.keyToPath(id);
102
+ return daemon_util_1.DaemonUtil.updateMessage(this.cache, itemPath, newMessage);
103
+ }
104
+ async stat(key) {
105
+ const itemPath = this.keyToPath(key);
106
+ return daemon_util_1.DaemonUtil.stat(this.cache, itemPath);
107
+ }
108
+ async statFromPublicToken(publicToken) {
109
+ ratchet_common_3.RequireRatchet.notNullOrUndefined(this.jwtRatchet, 'You must set jwtRatchet if you wish to use public tokens');
110
+ ratchet_common_3.RequireRatchet.notNullOrUndefined(publicToken, 'publicToken');
111
+ const parsed = await this.jwtRatchet.decodeToken(publicToken);
112
+ const key = parsed === null || parsed === void 0 ? void 0 : parsed.daemonKey;
113
+ return key ? this.stat(key) : null;
114
+ }
115
+ async abort(id) {
116
+ return daemon_util_1.DaemonUtil.abort(this.cache, this.keyToPath(id));
117
+ }
118
+ async error(id, error) {
119
+ return daemon_util_1.DaemonUtil.error(this.cache, this.keyToPath(id), error);
120
+ }
121
+ async finalize(id, contents) {
122
+ return daemon_util_1.DaemonUtil.finalize(this.cache, this.keyToPath(id), contents);
123
+ }
124
+ }
125
+ exports.Daemon = Daemon;
126
+ Daemon.DEFAULT_DEFAULT_GROUP = 'DEFAULT';
@@ -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,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PrototypeDao = void 0;
4
+ const ratchet_common_1 = require("@bitblit/ratchet-common");
5
+ const luxon_1 = require("luxon");
6
+ class PrototypeDao {
7
+ static defaultDaoConfig() {
8
+ return {
9
+ guidCreateFunction: ratchet_common_1.StringRatchet.createType4Guid,
10
+ guidFieldName: 'guid',
11
+ createdEpochMSFieldName: 'createdEpochMS',
12
+ updatedEpochMSFieldName: 'updatedEpochMS',
13
+ createdUtcTimestampFieldName: null,
14
+ updatedUtcTimestampFieldName: null,
15
+ };
16
+ }
17
+ constructor(provider, cfg = PrototypeDao.defaultDaoConfig()) {
18
+ this.provider = provider;
19
+ this.cfg = cfg;
20
+ ratchet_common_1.RequireRatchet.notNullOrUndefined(provider, 'provider');
21
+ ratchet_common_1.RequireRatchet.notNullOrUndefined(cfg, 'cfg');
22
+ ratchet_common_1.RequireRatchet.notNullOrUndefined(cfg.guidCreateFunction, 'cfg.guidCreateFunction');
23
+ ratchet_common_1.RequireRatchet.notNullOrUndefined(cfg.guidFieldName, 'cfg.guidFieldName');
24
+ }
25
+ async fetchAll() {
26
+ const db = await this.provider.loadDatabase();
27
+ return db.items || [];
28
+ }
29
+ async resetDatabase() {
30
+ await this.provider.storeDatabase({ items: [], lastModifiedEpochMS: Date.now() });
31
+ }
32
+ async removeItems(guids) {
33
+ let old = await this.fetchAll();
34
+ if (guids) {
35
+ old = old.filter((t) => !guids.includes(t[this.cfg.guidFieldName]));
36
+ await this.provider.storeDatabase({ items: old, lastModifiedEpochMS: Date.now() });
37
+ }
38
+ return old;
39
+ }
40
+ async store(value) {
41
+ let old = await this.fetchAll();
42
+ if (value) {
43
+ value[this.cfg.guidFieldName] = value[this.cfg.guidFieldName] || this.cfg.guidCreateFunction();
44
+ if (this.cfg.createdEpochMSFieldName) {
45
+ value[this.cfg.createdEpochMSFieldName] = value[this.cfg.createdEpochMSFieldName] || Date.now();
46
+ }
47
+ if (this.cfg.createdUtcTimestampFieldName) {
48
+ value[this.cfg.createdUtcTimestampFieldName] = value[this.cfg.createdUtcTimestampFieldName] || luxon_1.DateTime.utc().toISO();
49
+ }
50
+ if (this.cfg.updatedEpochMSFieldName) {
51
+ value[this.cfg.updatedEpochMSFieldName] = Date.now();
52
+ }
53
+ if (this.cfg.updatedUtcTimestampFieldName) {
54
+ value[this.cfg.updatedUtcTimestampFieldName] = luxon_1.DateTime.utc().toISO();
55
+ }
56
+ old = old.filter((t) => t[this.cfg.guidFieldName] !== value[this.cfg.guidFieldName]);
57
+ old.push(value);
58
+ await this.provider.storeDatabase({ items: old, lastModifiedEpochMS: Date.now() });
59
+ }
60
+ return value;
61
+ }
62
+ async fetchById(guid) {
63
+ const old = await this.fetchAll();
64
+ return old.find((t) => t[this.cfg.guidFieldName] === guid);
65
+ }
66
+ async searchByField(fieldDotPath, fieldValue) {
67
+ ratchet_common_1.RequireRatchet.notNullOrUndefined(fieldDotPath, 'fieldDotPath');
68
+ ratchet_common_1.RequireRatchet.notNullOrUndefined(fieldValue, 'fieldValue');
69
+ const map = {};
70
+ map[fieldDotPath] = fieldValue;
71
+ return this.searchByFieldMap(map);
72
+ }
73
+ async searchByFieldMap(input) {
74
+ ratchet_common_1.RequireRatchet.notNullOrUndefined(input, 'input');
75
+ let old = await this.fetchAll();
76
+ old = old.filter((t) => {
77
+ let matchAll = true;
78
+ Object.keys(input).forEach((k) => {
79
+ const val = ratchet_common_1.MapRatchet.findValueDotPath(t, k);
80
+ const fieldValue = input[k];
81
+ matchAll = matchAll && val === fieldValue;
82
+ });
83
+ return matchAll;
84
+ });
85
+ return old;
86
+ }
87
+ }
88
+ exports.PrototypeDao = PrototypeDao;
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.S3PrototypeDaoProvider = void 0;
4
+ const ratchet_common_1 = require("@bitblit/ratchet-common");
5
+ class S3PrototypeDaoProvider {
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 storeDatabase(inDb) {
14
+ const toSave = inDb || { items: [], lastModifiedEpochMS: null };
15
+ toSave.lastModifiedEpochMS = Date.now();
16
+ const put = await this.s3CacheRatchet.writeObjectToCacheFile(this.keyName, toSave);
17
+ const rval = !!put;
18
+ return rval;
19
+ }
20
+ async loadDatabase() {
21
+ const rval = (await this.s3CacheRatchet.fetchCacheFileAsObject(this.keyName)) || {
22
+ items: [],
23
+ lastModifiedEpochMS: Date.now(),
24
+ };
25
+ return rval;
26
+ }
27
+ }
28
+ exports.S3PrototypeDaoProvider = S3PrototypeDaoProvider;
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.S3SimpleDao = void 0;
4
+ const ratchet_common_1 = require("@bitblit/ratchet-common");
5
+ const ratchet_common_2 = require("@bitblit/ratchet-common");
6
+ class S3SimpleDao {
7
+ constructor(cache, prefix) {
8
+ this.cache = cache;
9
+ this.prefix = prefix;
10
+ if (!cache) {
11
+ throw new Error('cache object may not be null');
12
+ }
13
+ if (!cache.getDefaultBucket()) {
14
+ throw new Error('Supplied cache must have default bucket set');
15
+ }
16
+ }
17
+ buildPathPrefix(path) {
18
+ let rval = '';
19
+ if (this.prefix) {
20
+ rval += this.prefix;
21
+ }
22
+ if (path) {
23
+ rval += path;
24
+ }
25
+ return rval;
26
+ }
27
+ buildFullPath(id, path) {
28
+ let rval = this.buildPathPrefix(path);
29
+ if (rval.length > 0) {
30
+ rval += '/';
31
+ }
32
+ rval += id + '.json';
33
+ return rval;
34
+ }
35
+ async exists(id, path) {
36
+ const fullPath = this.buildFullPath(id, path);
37
+ ratchet_common_1.Logger.debug('Check file existence : %s', fullPath);
38
+ return this.cache.fileExists(fullPath);
39
+ }
40
+ async fetch(id, path) {
41
+ const fullPath = this.buildFullPath(id, path);
42
+ ratchet_common_1.Logger.debug('Fetching : %s', fullPath);
43
+ const rval = (await this.cache.fetchCacheFileAsObject(fullPath));
44
+ rval.id = id;
45
+ rval.path = path;
46
+ return rval;
47
+ }
48
+ async store(item, path) {
49
+ item.id = item.id || ratchet_common_2.StringRatchet.createType4Guid();
50
+ item.lastModifiedEpochMS = new Date().getTime();
51
+ const fullPath = this.buildFullPath(item.id, path);
52
+ ratchet_common_1.Logger.debug('Storing : %s', fullPath);
53
+ const stored = await this.cache.writeObjectToCacheFile(fullPath, item);
54
+ const read = await this.fetch(item.id, path);
55
+ return read;
56
+ }
57
+ async listItems(path) {
58
+ const fullPath = this.buildPathPrefix(path);
59
+ ratchet_common_1.Logger.debug('Listing : %s', fullPath);
60
+ const rval = await this.cache.directChildrenOfPrefix(fullPath);
61
+ return rval;
62
+ }
63
+ async fetchItemsInPath(path) {
64
+ const fullPath = this.buildPathPrefix(path);
65
+ ratchet_common_1.Logger.debug('Full fetch of : %s', fullPath);
66
+ const items = await this.listItems(path);
67
+ const promises = items.map((s) => this.fetch(s, path));
68
+ const rval = await Promise.all(promises);
69
+ return rval;
70
+ }
71
+ async delete(id, path) {
72
+ const fullPath = this.buildFullPath(id, path);
73
+ ratchet_common_1.Logger.debug('Deleting : %s', fullPath);
74
+ const del = await this.cache.removeCacheFile(fullPath);
75
+ return del != null;
76
+ }
77
+ }
78
+ exports.S3SimpleDao = S3SimpleDao;
@@ -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 });