@bitblit/ratchet-aws 4.0.420-alpha → 4.0.421-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 (303) hide show
  1. package/lib/batch/aws-batch-background-processor.d.ts +8 -0
  2. package/lib/batch/aws-batch-background-processor.js +46 -0
  3. package/lib/batch/aws-batch-background-processor.js.map +1 -0
  4. package/lib/batch/aws-batch-ratchet.d.ts +13 -0
  5. package/lib/batch/aws-batch-ratchet.js +56 -0
  6. package/lib/batch/aws-batch-ratchet.js.map +1 -0
  7. package/lib/batch/index.d.ts +2 -0
  8. package/lib/batch/index.js +3 -0
  9. package/lib/batch/index.js.map +1 -0
  10. package/lib/build/index.d.ts +1 -0
  11. package/lib/build/index.js +2 -0
  12. package/lib/build/index.js.map +1 -0
  13. package/lib/build/ratchet-aws-info.d.ts +5 -0
  14. package/lib/build/ratchet-aws-info.js +15 -0
  15. package/lib/build/ratchet-aws-info.js.map +1 -0
  16. package/lib/cache/index.d.ts +5 -0
  17. package/lib/cache/index.js +6 -0
  18. package/lib/cache/index.js.map +1 -0
  19. package/lib/cache/memory-storage-provider.d.ts +10 -0
  20. package/lib/cache/memory-storage-provider.js +28 -0
  21. package/lib/cache/memory-storage-provider.js.map +1 -0
  22. package/lib/cache/simple-cache-object-wrapper.d.ts +7 -0
  23. package/lib/cache/simple-cache-object-wrapper.js +2 -0
  24. package/lib/cache/simple-cache-object-wrapper.js.map +1 -0
  25. package/lib/cache/simple-cache-read-options.d.ts +5 -0
  26. package/lib/cache/simple-cache-read-options.js +2 -0
  27. package/lib/cache/simple-cache-read-options.js.map +1 -0
  28. package/lib/cache/simple-cache-storage-provider.d.ts +8 -0
  29. package/lib/cache/simple-cache-storage-provider.js +2 -0
  30. package/lib/cache/simple-cache-storage-provider.js.map +1 -0
  31. package/lib/cache/simple-cache.d.ts +14 -0
  32. package/lib/cache/simple-cache.js +65 -0
  33. package/lib/cache/simple-cache.js.map +1 -0
  34. package/lib/cloudwatch/cloud-watch-log-group-ratchet.d.ts +10 -0
  35. package/lib/cloudwatch/cloud-watch-log-group-ratchet.js +75 -0
  36. package/lib/cloudwatch/cloud-watch-log-group-ratchet.js.map +1 -0
  37. package/lib/cloudwatch/cloud-watch-logs-ratchet.d.ts +15 -0
  38. package/lib/cloudwatch/cloud-watch-logs-ratchet.js +174 -0
  39. package/lib/cloudwatch/cloud-watch-logs-ratchet.js.map +1 -0
  40. package/lib/cloudwatch/cloud-watch-metrics-ratchet.d.ts +10 -0
  41. package/lib/cloudwatch/cloud-watch-metrics-ratchet.js +57 -0
  42. package/lib/cloudwatch/cloud-watch-metrics-ratchet.js.map +1 -0
  43. package/lib/cloudwatch/index.d.ts +3 -0
  44. package/lib/cloudwatch/index.js +4 -0
  45. package/lib/cloudwatch/index.js.map +1 -0
  46. package/lib/daemon/daemon-like.d.ts +16 -0
  47. package/lib/daemon/daemon-like.js +2 -0
  48. package/lib/daemon/daemon-like.js.map +1 -0
  49. package/lib/daemon/daemon-process-create-options.d.ts +7 -0
  50. package/lib/daemon/daemon-process-create-options.js +2 -0
  51. package/lib/daemon/daemon-process-create-options.js.map +1 -0
  52. package/lib/daemon/daemon-process-state-public-token.d.ts +4 -0
  53. package/lib/daemon/daemon-process-state-public-token.js +2 -0
  54. package/lib/daemon/daemon-process-state-public-token.js.map +1 -0
  55. package/lib/daemon/daemon-process-state.d.ts +13 -0
  56. package/lib/daemon/daemon-process-state.js +2 -0
  57. package/lib/daemon/daemon-process-state.js.map +1 -0
  58. package/lib/daemon/daemon-stream-data-options.d.ts +5 -0
  59. package/lib/daemon/daemon-stream-data-options.js +2 -0
  60. package/lib/daemon/daemon-stream-data-options.js.map +1 -0
  61. package/lib/daemon/daemon-util.d.ts +17 -0
  62. package/lib/daemon/daemon-util.js +154 -0
  63. package/lib/daemon/daemon-util.js.map +1 -0
  64. package/lib/daemon/daemon.d.ts +32 -0
  65. package/lib/daemon/daemon.js +129 -0
  66. package/lib/daemon/daemon.js.map +1 -0
  67. package/lib/daemon/index.d.ts +7 -0
  68. package/lib/daemon/index.js +8 -0
  69. package/lib/daemon/index.js.map +1 -0
  70. package/lib/dao/example-prototype-dao-item.d.ts +8 -0
  71. package/lib/dao/example-prototype-dao-item.js +2 -0
  72. package/lib/dao/example-prototype-dao-item.js.map +1 -0
  73. package/lib/dao/index.d.ts +8 -0
  74. package/lib/dao/index.js +9 -0
  75. package/lib/dao/index.js.map +1 -0
  76. package/lib/dao/memory-prototype-dao-provider.d.ts +7 -0
  77. package/lib/dao/memory-prototype-dao-provider.js +11 -0
  78. package/lib/dao/memory-prototype-dao-provider.js.map +1 -0
  79. package/lib/dao/prototype-dao-config.d.ts +8 -0
  80. package/lib/dao/prototype-dao-config.js +2 -0
  81. package/lib/dao/prototype-dao-config.js.map +1 -0
  82. package/lib/dao/prototype-dao-db.d.ts +4 -0
  83. package/lib/dao/prototype-dao-db.js +2 -0
  84. package/lib/dao/prototype-dao-db.js.map +1 -0
  85. package/lib/dao/prototype-dao-provider.d.ts +5 -0
  86. package/lib/dao/prototype-dao-provider.js +2 -0
  87. package/lib/dao/prototype-dao-provider.js.map +1 -0
  88. package/lib/dao/prototype-dao.d.ts +15 -0
  89. package/lib/dao/prototype-dao.js +89 -0
  90. package/lib/dao/prototype-dao.js.map +1 -0
  91. package/lib/dao/s3-simple-dao.d.ts +15 -0
  92. package/lib/dao/s3-simple-dao.js +77 -0
  93. package/lib/dao/s3-simple-dao.js.map +1 -0
  94. package/lib/dao/simple-dao-item.d.ts +5 -0
  95. package/lib/dao/simple-dao-item.js +2 -0
  96. package/lib/dao/simple-dao-item.js.map +1 -0
  97. package/lib/dynamodb/dynamo-ratchet-like.d.ts +25 -0
  98. package/lib/dynamodb/dynamo-ratchet-like.js +2 -0
  99. package/lib/dynamodb/dynamo-ratchet-like.js.map +1 -0
  100. package/lib/dynamodb/dynamo-ratchet.d.ts +34 -0
  101. package/lib/dynamodb/dynamo-ratchet.js +671 -0
  102. package/lib/dynamodb/dynamo-ratchet.js.map +1 -0
  103. package/lib/dynamodb/dynamo-table-ratchet.d.ts +13 -0
  104. package/lib/dynamodb/dynamo-table-ratchet.js +140 -0
  105. package/lib/dynamodb/dynamo-table-ratchet.js.map +1 -0
  106. package/lib/dynamodb/hash-spreader.d.ts +15 -0
  107. package/lib/dynamodb/hash-spreader.js +66 -0
  108. package/lib/dynamodb/hash-spreader.js.map +1 -0
  109. package/lib/dynamodb/impl/dynamo-db-storage-provider.d.ts +25 -0
  110. package/lib/dynamodb/impl/dynamo-db-storage-provider.js +110 -0
  111. package/lib/dynamodb/impl/dynamo-db-storage-provider.js.map +1 -0
  112. package/lib/dynamodb/impl/dynamo-db-sync-lock.d.ts +10 -0
  113. package/lib/dynamodb/impl/dynamo-db-sync-lock.js +71 -0
  114. package/lib/dynamodb/impl/dynamo-db-sync-lock.js.map +1 -0
  115. package/lib/dynamodb/impl/dynamo-expiring-code-provider.d.ts +12 -0
  116. package/lib/dynamodb/impl/dynamo-expiring-code-provider.js +25 -0
  117. package/lib/dynamodb/impl/dynamo-expiring-code-provider.js.map +1 -0
  118. package/lib/dynamodb/impl/dynamo-runtime-parameter-provider.d.ts +11 -0
  119. package/lib/dynamodb/impl/dynamo-runtime-parameter-provider.js +37 -0
  120. package/lib/dynamodb/impl/dynamo-runtime-parameter-provider.js.map +1 -0
  121. package/lib/dynamodb/index.d.ts +8 -0
  122. package/lib/dynamodb/index.js +9 -0
  123. package/lib/dynamodb/index.js.map +1 -0
  124. package/lib/ec2/ec2-ratchet.d.ts +16 -0
  125. package/lib/ec2/ec2-ratchet.js +114 -0
  126. package/lib/ec2/ec2-ratchet.js.map +1 -0
  127. package/lib/ec2/index.d.ts +1 -0
  128. package/lib/ec2/index.js +2 -0
  129. package/lib/ec2/index.js.map +1 -0
  130. package/lib/ecr/ecr-unused-image-cleaner-options.d.ts +7 -0
  131. package/lib/ecr/ecr-unused-image-cleaner-options.js +2 -0
  132. package/lib/ecr/ecr-unused-image-cleaner-options.js.map +1 -0
  133. package/lib/ecr/ecr-unused-image-cleaner-output.d.ts +7 -0
  134. package/lib/ecr/ecr-unused-image-cleaner-output.js +2 -0
  135. package/lib/ecr/ecr-unused-image-cleaner-output.js.map +1 -0
  136. package/lib/ecr/ecr-unused-image-cleaner-repository-output.d.ts +8 -0
  137. package/lib/ecr/ecr-unused-image-cleaner-repository-output.js +2 -0
  138. package/lib/ecr/ecr-unused-image-cleaner-repository-output.js.map +1 -0
  139. package/lib/ecr/ecr-unused-image-cleaner.d.ts +18 -0
  140. package/lib/ecr/ecr-unused-image-cleaner.js +136 -0
  141. package/lib/ecr/ecr-unused-image-cleaner.js.map +1 -0
  142. package/lib/ecr/index.d.ts +9 -0
  143. package/lib/ecr/index.js +10 -0
  144. package/lib/ecr/index.js.map +1 -0
  145. package/lib/ecr/retained-image-descriptor.d.ts +6 -0
  146. package/lib/ecr/retained-image-descriptor.js +2 -0
  147. package/lib/ecr/retained-image-descriptor.js.map +1 -0
  148. package/lib/ecr/retained-image-reason.d.ts +4 -0
  149. package/lib/ecr/retained-image-reason.js +6 -0
  150. package/lib/ecr/retained-image-reason.js.map +1 -0
  151. package/lib/ecr/used-image-finder.d.ts +3 -0
  152. package/lib/ecr/used-image-finder.js +2 -0
  153. package/lib/ecr/used-image-finder.js.map +1 -0
  154. package/lib/ecr/used-image-finders/aws-batch-used-image-finder.d.ts +8 -0
  155. package/lib/ecr/used-image-finders/aws-batch-used-image-finder.js +32 -0
  156. package/lib/ecr/used-image-finders/aws-batch-used-image-finder.js.map +1 -0
  157. package/lib/ecr/used-image-finders/lambda-used-image-finder.d.ts +8 -0
  158. package/lib/ecr/used-image-finders/lambda-used-image-finder.js +40 -0
  159. package/lib/ecr/used-image-finders/lambda-used-image-finder.js.map +1 -0
  160. package/lib/environment/cascade-environment-service-provider.d.ts +6 -0
  161. package/lib/environment/cascade-environment-service-provider.js +25 -0
  162. package/lib/environment/cascade-environment-service-provider.js.map +1 -0
  163. package/lib/environment/env-var-environment-service-provider.d.ts +6 -0
  164. package/lib/environment/env-var-environment-service-provider.js +31 -0
  165. package/lib/environment/env-var-environment-service-provider.js.map +1 -0
  166. package/lib/environment/environment-service-config.d.ts +4 -0
  167. package/lib/environment/environment-service-config.js +2 -0
  168. package/lib/environment/environment-service-config.js.map +1 -0
  169. package/lib/environment/environment-service-provider.d.ts +3 -0
  170. package/lib/environment/environment-service-provider.js +2 -0
  171. package/lib/environment/environment-service-provider.js.map +1 -0
  172. package/lib/environment/environment-service.d.ts +11 -0
  173. package/lib/environment/environment-service.js +51 -0
  174. package/lib/environment/environment-service.js.map +1 -0
  175. package/lib/environment/fixed-environment-service-provider.d.ts +7 -0
  176. package/lib/environment/fixed-environment-service-provider.js +22 -0
  177. package/lib/environment/fixed-environment-service-provider.js.map +1 -0
  178. package/lib/environment/index.d.ts +7 -0
  179. package/lib/environment/index.js +8 -0
  180. package/lib/environment/index.js.map +1 -0
  181. package/lib/environment/ssm-environment-service-provider.d.ts +8 -0
  182. package/lib/environment/ssm-environment-service-provider.js +59 -0
  183. package/lib/environment/ssm-environment-service-provider.js.map +1 -0
  184. package/lib/expiring-code/expiring-code-params.d.ts +7 -0
  185. package/lib/expiring-code/expiring-code-params.js +2 -0
  186. package/lib/expiring-code/expiring-code-params.js.map +1 -0
  187. package/lib/expiring-code/expiring-code-provider.d.ts +5 -0
  188. package/lib/expiring-code/expiring-code-provider.js +2 -0
  189. package/lib/expiring-code/expiring-code-provider.js.map +1 -0
  190. package/lib/expiring-code/expiring-code-ratchet.d.ts +10 -0
  191. package/lib/expiring-code/expiring-code-ratchet.js +35 -0
  192. package/lib/expiring-code/expiring-code-ratchet.js.map +1 -0
  193. package/lib/expiring-code/expiring-code.d.ts +6 -0
  194. package/lib/expiring-code/expiring-code.js +2 -0
  195. package/lib/expiring-code/expiring-code.js.map +1 -0
  196. package/lib/expiring-code/index.d.ts +4 -0
  197. package/lib/expiring-code/index.js +5 -0
  198. package/lib/expiring-code/index.js.map +1 -0
  199. package/lib/iam/aws-credentials-ratchet.d.ts +4 -0
  200. package/lib/iam/aws-credentials-ratchet.js +19 -0
  201. package/lib/iam/aws-credentials-ratchet.js.map +1 -0
  202. package/lib/iam/index.d.ts +1 -0
  203. package/lib/iam/index.js +2 -0
  204. package/lib/iam/index.js.map +1 -0
  205. package/lib/lambda/index.d.ts +2 -0
  206. package/lib/lambda/index.js +3 -0
  207. package/lib/lambda/index.js.map +1 -0
  208. package/lib/lambda/lambda-event-detector.d.ts +15 -0
  209. package/lib/lambda/lambda-event-detector.js +42 -0
  210. package/lib/lambda/lambda-event-detector.js.map +1 -0
  211. package/lib/lambda/lambda-event-type-guards.d.ts +11 -0
  212. package/lib/lambda/lambda-event-type-guards.js +28 -0
  213. package/lib/lambda/lambda-event-type-guards.js.map +1 -0
  214. package/lib/model/cloud-watch-metrics-minute-level-dynamo-count-request.d.ts +12 -0
  215. package/lib/model/cloud-watch-metrics-minute-level-dynamo-count-request.js +2 -0
  216. package/lib/model/cloud-watch-metrics-minute-level-dynamo-count-request.js.map +1 -0
  217. package/lib/model/dynamo-count-result.d.ts +5 -0
  218. package/lib/model/dynamo-count-result.js +2 -0
  219. package/lib/model/dynamo-count-result.js.map +1 -0
  220. package/lib/model/index.d.ts +2 -0
  221. package/lib/model/index.js +3 -0
  222. package/lib/model/index.js.map +1 -0
  223. package/lib/route53/index.d.ts +1 -0
  224. package/lib/route53/index.js +2 -0
  225. package/lib/route53/index.js.map +1 -0
  226. package/lib/route53/route-53-ratchet.d.ts +8 -0
  227. package/lib/route53/route-53-ratchet.js +59 -0
  228. package/lib/route53/route-53-ratchet.js.map +1 -0
  229. package/lib/runtime-parameter/cached-stored-runtime-parameter.d.ts +4 -0
  230. package/lib/runtime-parameter/cached-stored-runtime-parameter.js +2 -0
  231. package/lib/runtime-parameter/cached-stored-runtime-parameter.js.map +1 -0
  232. package/lib/runtime-parameter/global-variable-override-runtime-parameter-provider.d.ts +17 -0
  233. package/lib/runtime-parameter/global-variable-override-runtime-parameter-provider.js +52 -0
  234. package/lib/runtime-parameter/global-variable-override-runtime-parameter-provider.js.map +1 -0
  235. package/lib/runtime-parameter/index.d.ts +6 -0
  236. package/lib/runtime-parameter/index.js +7 -0
  237. package/lib/runtime-parameter/index.js.map +1 -0
  238. package/lib/runtime-parameter/memory-runtime-parameter-provider.d.ts +10 -0
  239. package/lib/runtime-parameter/memory-runtime-parameter-provider.js +35 -0
  240. package/lib/runtime-parameter/memory-runtime-parameter-provider.js.map +1 -0
  241. package/lib/runtime-parameter/runtime-parameter-provider.d.ts +6 -0
  242. package/lib/runtime-parameter/runtime-parameter-provider.js +2 -0
  243. package/lib/runtime-parameter/runtime-parameter-provider.js.map +1 -0
  244. package/lib/runtime-parameter/runtime-parameter-ratchet.d.ts +15 -0
  245. package/lib/runtime-parameter/runtime-parameter-ratchet.js +72 -0
  246. package/lib/runtime-parameter/runtime-parameter-ratchet.js.map +1 -0
  247. package/lib/runtime-parameter/stored-runtime-parameter.d.ts +6 -0
  248. package/lib/runtime-parameter/stored-runtime-parameter.js +2 -0
  249. package/lib/runtime-parameter/stored-runtime-parameter.js.map +1 -0
  250. package/lib/s3/expanded-file-children.d.ts +5 -0
  251. package/lib/s3/expanded-file-children.js +2 -0
  252. package/lib/s3/expanded-file-children.js.map +1 -0
  253. package/lib/s3/impl/s3-environment-service-provider.d.ts +15 -0
  254. package/lib/s3/impl/s3-environment-service-provider.js +28 -0
  255. package/lib/s3/impl/s3-environment-service-provider.js.map +1 -0
  256. package/lib/s3/impl/s3-expiring-code-provider.d.ts +17 -0
  257. package/lib/s3/impl/s3-expiring-code-provider.js +49 -0
  258. package/lib/s3/impl/s3-expiring-code-provider.js.map +1 -0
  259. package/lib/s3/impl/s3-prototype-dao-provider.d.ts +10 -0
  260. package/lib/s3/impl/s3-prototype-dao-provider.js +27 -0
  261. package/lib/s3/impl/s3-prototype-dao-provider.js.map +1 -0
  262. package/lib/s3/impl/s3-storage-provider.d.ts +14 -0
  263. package/lib/s3/impl/s3-storage-provider.js +44 -0
  264. package/lib/s3/impl/s3-storage-provider.js.map +1 -0
  265. package/lib/s3/index.d.ts +9 -0
  266. package/lib/s3/index.js +10 -0
  267. package/lib/s3/index.js.map +1 -0
  268. package/lib/s3/s3-cache-ratchet-like.d.ts +25 -0
  269. package/lib/s3/s3-cache-ratchet-like.js +2 -0
  270. package/lib/s3/s3-cache-ratchet-like.js.map +1 -0
  271. package/lib/s3/s3-cache-ratchet.d.ts +35 -0
  272. package/lib/s3/s3-cache-ratchet.js +360 -0
  273. package/lib/s3/s3-cache-ratchet.js.map +1 -0
  274. package/lib/s3/s3-location-sync-ratchet.d.ts +21 -0
  275. package/lib/s3/s3-location-sync-ratchet.js +140 -0
  276. package/lib/s3/s3-location-sync-ratchet.js.map +1 -0
  277. package/lib/s3/s3-ratchet.d.ts +5 -0
  278. package/lib/s3/s3-ratchet.js +23 -0
  279. package/lib/s3/s3-ratchet.js.map +1 -0
  280. package/lib/ses/index.d.ts +1 -0
  281. package/lib/ses/index.js +2 -0
  282. package/lib/ses/index.js.map +1 -0
  283. package/lib/ses/ses-mail-sending-provider.d.ts +15 -0
  284. package/lib/ses/ses-mail-sending-provider.js +68 -0
  285. package/lib/ses/ses-mail-sending-provider.js.map +1 -0
  286. package/lib/sns/index.d.ts +1 -0
  287. package/lib/sns/index.js +2 -0
  288. package/lib/sns/index.js.map +1 -0
  289. package/lib/sns/sns-ratchet.d.ts +9 -0
  290. package/lib/sns/sns-ratchet.js +49 -0
  291. package/lib/sns/sns-ratchet.js.map +1 -0
  292. package/lib/sync-lock/index.d.ts +2 -0
  293. package/lib/sync-lock/index.js +3 -0
  294. package/lib/sync-lock/index.js.map +1 -0
  295. package/lib/sync-lock/memory-sync-lock.d.ts +8 -0
  296. package/lib/sync-lock/memory-sync-lock.js +36 -0
  297. package/lib/sync-lock/memory-sync-lock.js.map +1 -0
  298. package/lib/sync-lock/sync-lock-provider.d.ts +5 -0
  299. package/lib/sync-lock/sync-lock-provider.js +2 -0
  300. package/lib/sync-lock/sync-lock-provider.js.map +1 -0
  301. package/package.json +55 -56
  302. package/lib/index.mjs +0 -2
  303. package/lib/types.d.ts +0 -818
@@ -0,0 +1,37 @@
1
+ import { RequireRatchet } from '@bitblit/ratchet-common/lang/require-ratchet';
2
+ import { Logger } from '@bitblit/ratchet-common/logger/logger';
3
+ export class DynamoRuntimeParameterProvider {
4
+ dynamo;
5
+ tableName;
6
+ constructor(dynamo, tableName) {
7
+ this.dynamo = dynamo;
8
+ this.tableName = tableName;
9
+ RequireRatchet.notNullOrUndefined(this.dynamo);
10
+ RequireRatchet.notNullOrUndefined(this.tableName);
11
+ }
12
+ async readParameter(groupId, paramKey) {
13
+ Logger.silly('Reading %s / %s from underlying db', groupId, paramKey);
14
+ const req = {
15
+ groupId: groupId,
16
+ paramKey: paramKey,
17
+ };
18
+ const rval = await this.dynamo.simpleGet(this.tableName, req);
19
+ return rval;
20
+ }
21
+ async readAllParametersForGroup(groupId) {
22
+ const qry = {
23
+ TableName: this.tableName,
24
+ KeyConditionExpression: 'groupId = :groupId',
25
+ ExpressionAttributeValues: {
26
+ ':groupId': groupId,
27
+ },
28
+ };
29
+ const all = await this.dynamo.fullyExecuteQuery(qry);
30
+ return all;
31
+ }
32
+ async writeParameter(toStore) {
33
+ const rval = await this.dynamo.simplePut(this.tableName, toStore);
34
+ return !!rval;
35
+ }
36
+ }
37
+ //# sourceMappingURL=dynamo-runtime-parameter-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dynamo-runtime-parameter-provider.js","sourceRoot":"","sources":["../../../src/dynamodb/impl/dynamo-runtime-parameter-provider.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAE/D,MAAM,OAAO,8BAA8B;IAE/B;IACA;IAFV,YACU,MAAqB,EACrB,SAAiB;QADjB,WAAM,GAAN,MAAM,CAAe;QACrB,cAAS,GAAT,SAAS,CAAQ;QAEzB,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/C,cAAc,CAAC,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACpD,CAAC;IAEM,KAAK,CAAC,aAAa,CAAC,OAAe,EAAE,QAAgB;QAC1D,MAAM,CAAC,KAAK,CAAC,oCAAoC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QACtE,MAAM,GAAG,GAAQ;YACf,OAAO,EAAE,OAAO;YAChB,QAAQ,EAAE,QAAQ;SACnB,CAAC;QACF,MAAM,IAAI,GAA2B,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAyB,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;QAC9G,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,yBAAyB,CAAC,OAAe;QACpD,MAAM,GAAG,GAAsB;YAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,sBAAsB,EAAE,oBAAoB;YAC5C,yBAAyB,EAAE;gBACzB,UAAU,EAAE,OAAO;aACpB;SACF,CAAC;QAEF,MAAM,GAAG,GAA6B,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAyB,GAAG,CAAC,CAAC;QACvG,OAAO,GAAG,CAAC;IACb,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,OAA+B;QACzD,MAAM,IAAI,GAAqB,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACpF,OAAO,CAAC,CAAC,IAAI,CAAC;IAChB,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ export * from './dynamo-ratchet-like.js';
2
+ export * from './dynamo-ratchet.js';
3
+ export * from './dynamo-table-ratchet.js';
4
+ export * from './hash-spreader.js';
5
+ export * from './impl/dynamo-db-storage-provider.js';
6
+ export * from './impl/dynamo-db-sync-lock.js';
7
+ export * from './impl/dynamo-expiring-code-provider.js';
8
+ export * from './impl/dynamo-runtime-parameter-provider.js';
@@ -0,0 +1,9 @@
1
+ export * from './dynamo-ratchet-like.js';
2
+ export * from './dynamo-ratchet.js';
3
+ export * from './dynamo-table-ratchet.js';
4
+ export * from './hash-spreader.js';
5
+ export * from './impl/dynamo-db-storage-provider.js';
6
+ export * from './impl/dynamo-db-sync-lock.js';
7
+ export * from './impl/dynamo-expiring-code-provider.js';
8
+ export * from './impl/dynamo-runtime-parameter-provider.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/dynamodb/index.ts"],"names":[],"mappings":"AAIA,cAAc,0BAA0B,CAAC;AACzC,cAAc,qBAAqB,CAAC;AACpC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,sCAAsC,CAAC;AACrD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yCAAyC,CAAC;AACxD,cAAc,6CAA6C,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { EC2Client, Instance } from '@aws-sdk/client-ec2';
2
+ import { EC2InstanceConnectClient, SendSSHPublicKeyCommandOutput } from '@aws-sdk/client-ec2-instance-connect';
3
+ export declare class Ec2Ratchet {
4
+ private region;
5
+ private availabilityZone;
6
+ private ec2;
7
+ private ec2InstanceConnect;
8
+ constructor(region?: string, availabilityZone?: string);
9
+ get eC2Client(): EC2Client;
10
+ get eC2InstanceConnectClient(): EC2InstanceConnectClient;
11
+ stopInstance(instanceId: string, maxWaitForShutdownMS?: number): Promise<boolean>;
12
+ launchInstance(instanceId: string, maxWaitForStartupMS?: number): Promise<boolean>;
13
+ describeInstance(instanceId: string): Promise<Instance>;
14
+ listAllInstances(instanceIds?: string[]): Promise<Instance[]>;
15
+ sendPublicKeyToEc2Instance(instanceId: string, publicKeyString: string, instanceOsUser?: string): Promise<SendSSHPublicKeyCommandOutput>;
16
+ }
@@ -0,0 +1,114 @@
1
+ import { DescribeInstancesCommand, EC2Client, StartInstancesCommand, StopInstancesCommand, } from '@aws-sdk/client-ec2';
2
+ import { EC2InstanceConnectClient, SendSSHPublicKeyCommand, } from '@aws-sdk/client-ec2-instance-connect';
3
+ import { Logger } from '@bitblit/ratchet-common/logger/logger';
4
+ import { PromiseRatchet } from '@bitblit/ratchet-common/lang/promise-ratchet';
5
+ import { DurationRatchet } from '@bitblit/ratchet-common/lang/duration-ratchet';
6
+ export class Ec2Ratchet {
7
+ region;
8
+ availabilityZone;
9
+ ec2;
10
+ ec2InstanceConnect;
11
+ constructor(region = 'us-east-1', availabilityZone = 'us-east-1a') {
12
+ this.region = region;
13
+ this.availabilityZone = availabilityZone;
14
+ this.ec2 = new EC2Client({ region: region });
15
+ this.ec2InstanceConnect = new EC2InstanceConnectClient({ region: region });
16
+ }
17
+ get eC2Client() {
18
+ return this.ec2;
19
+ }
20
+ get eC2InstanceConnectClient() {
21
+ return this.ec2InstanceConnect;
22
+ }
23
+ async stopInstance(instanceId, maxWaitForShutdownMS = 0) {
24
+ let rval = true;
25
+ try {
26
+ const stopParams = {
27
+ InstanceIds: [instanceId],
28
+ DryRun: false,
29
+ };
30
+ Logger.info('About to stop instances : %j', stopParams);
31
+ await this.ec2.send(new StopInstancesCommand(stopParams));
32
+ Logger.info('Stop instance command sent, waiting on shutdown');
33
+ let status = await this.describeInstance(instanceId);
34
+ if (maxWaitForShutdownMS > 0) {
35
+ const start = new Date().getTime();
36
+ while (!!status && status.State.Code !== 16 && new Date().getTime() - start < maxWaitForShutdownMS) {
37
+ Logger.debug('Instance status is %j - waiting for 5 seconds (up to %s)', status.State, DurationRatchet.formatMsDuration(maxWaitForShutdownMS));
38
+ await PromiseRatchet.wait(5000);
39
+ status = await this.describeInstance(instanceId);
40
+ }
41
+ }
42
+ }
43
+ catch (err) {
44
+ Logger.error('Failed to stop instance %s : %s', instanceId, err, err);
45
+ rval = false;
46
+ }
47
+ return rval;
48
+ }
49
+ async launchInstance(instanceId, maxWaitForStartupMS = 0) {
50
+ let rval = true;
51
+ try {
52
+ const startParams = {
53
+ InstanceIds: [instanceId],
54
+ DryRun: false,
55
+ };
56
+ Logger.info('About to start instance : %j', startParams);
57
+ await this.ec2.send(new StartInstancesCommand(startParams));
58
+ Logger.info('Start instance command sent, waiting on startup');
59
+ let status = await this.describeInstance(instanceId);
60
+ if (maxWaitForStartupMS > 0) {
61
+ const start = new Date().getTime();
62
+ while (!!status && status.State.Code !== 16 && new Date().getTime() - start < maxWaitForStartupMS) {
63
+ Logger.debug('Instance status is %j - waiting for 5 seconds (up to %s)', status.State, DurationRatchet.formatMsDuration(maxWaitForStartupMS));
64
+ await PromiseRatchet.wait(5000);
65
+ status = await this.describeInstance(instanceId);
66
+ }
67
+ }
68
+ if (!!status && !!status.PublicIpAddress) {
69
+ Logger.info('Instance address is %s', status.PublicIpAddress);
70
+ Logger.info('SSH command : ssh -i path_to_pem_file ec2-user@%s', status.PublicIpAddress);
71
+ }
72
+ }
73
+ catch (err) {
74
+ Logger.error('Failed to start instance %s : %s', instanceId, err, err);
75
+ rval = false;
76
+ }
77
+ return rval;
78
+ }
79
+ async describeInstance(instanceId) {
80
+ const res = await this.listAllInstances([instanceId]);
81
+ return res.length === 1 ? res[0] : null;
82
+ }
83
+ async listAllInstances(instanceIds = []) {
84
+ let rval = [];
85
+ const req = {
86
+ NextToken: null,
87
+ };
88
+ if (instanceIds && instanceIds.length > 0) {
89
+ req.InstanceIds = instanceIds;
90
+ }
91
+ do {
92
+ Logger.debug('Pulling instances... (%j)', req);
93
+ const res = await this.ec2.send(new DescribeInstancesCommand(req));
94
+ res.Reservations.forEach((r) => {
95
+ rval = rval.concat(r.Instances);
96
+ });
97
+ req.NextToken = res.NextToken;
98
+ } while (req.NextToken);
99
+ Logger.debug('Finished pulling instances (found %d)', rval.length);
100
+ return rval;
101
+ }
102
+ async sendPublicKeyToEc2Instance(instanceId, publicKeyString, instanceOsUser) {
103
+ const userName = instanceOsUser || 'ec2-user';
104
+ const req = {
105
+ InstanceId: instanceId,
106
+ AvailabilityZone: this.availabilityZone,
107
+ InstanceOSUser: userName,
108
+ SSHPublicKey: publicKeyString,
109
+ };
110
+ const rval = await this.ec2InstanceConnect.send(new SendSSHPublicKeyCommand(req));
111
+ return rval;
112
+ }
113
+ }
114
+ //# sourceMappingURL=ec2-ratchet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ec2-ratchet.js","sourceRoot":"","sources":["../../src/ec2/ec2-ratchet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export * from './ec2-ratchet.js';
@@ -0,0 +1,2 @@
1
+ export * from './ec2-ratchet.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ec2/index.ts"],"names":[],"mappings":"AAIA,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { UsedImageFinder } from './used-image-finder.js';
2
+ export interface EcrUnusedImageCleanerOptions {
3
+ usedImageFinders: UsedImageFinder[];
4
+ dryRun?: boolean;
5
+ repositoriesToPurge?: string[];
6
+ minimumAgeInDays?: number;
7
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ecr-unused-image-cleaner-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecr-unused-image-cleaner-options.js","sourceRoot":"","sources":["../../src/ecr/ecr-unused-image-cleaner-options.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import { EcrUnusedImageCleanerRepositoryOutput } from './ecr-unused-image-cleaner-repository-output.js';
2
+ import { EcrUnusedImageCleanerOptions } from './ecr-unused-image-cleaner-options.js';
3
+ export interface EcrUnusedImageCleanerOutput {
4
+ registryId: string;
5
+ repositories: EcrUnusedImageCleanerRepositoryOutput[];
6
+ options: EcrUnusedImageCleanerOptions;
7
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ecr-unused-image-cleaner-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecr-unused-image-cleaner-output.js","sourceRoot":"","sources":["../../src/ecr/ecr-unused-image-cleaner-output.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import { ImageDetail, Repository } from '@aws-sdk/client-ecr';
2
+ import { RetainedImageDescriptor } from './retained-image-descriptor.js';
3
+ export interface EcrUnusedImageCleanerRepositoryOutput {
4
+ repository: Repository;
5
+ purged: ImageDetail[];
6
+ retained: RetainedImageDescriptor[];
7
+ totalBytesRecovered: number;
8
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ecr-unused-image-cleaner-repository-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecr-unused-image-cleaner-repository-output.js","sourceRoot":"","sources":["../../src/ecr/ecr-unused-image-cleaner-repository-output.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ import { ECRClient, ImageDetail, Repository } from '@aws-sdk/client-ecr';
2
+ import { EcrUnusedImageCleanerOptions } from './ecr-unused-image-cleaner-options.js';
3
+ import { UsedImageFinder } from './used-image-finder.js';
4
+ import { EcrUnusedImageCleanerRepositoryOutput } from './ecr-unused-image-cleaner-repository-output.js';
5
+ import { EcrUnusedImageCleanerOutput } from './ecr-unused-image-cleaner-output.js';
6
+ export declare class EcrUnusedImageCleaner {
7
+ private ecr;
8
+ private static readonly ECR_IMAGE_MINIMUM_AGE_DAYS;
9
+ private static readonly ECR_REPOSITORY_MINIMUM_IMAGE_COUNT;
10
+ constructor(ecr: ECRClient);
11
+ findAllUsedImages(finders: UsedImageFinder[]): Promise<string[]>;
12
+ performCleaning(opts: EcrUnusedImageCleanerOptions): Promise<EcrUnusedImageCleanerOutput>;
13
+ cleanRepository(repo: Repository, usedImageTags: string[], opts: EcrUnusedImageCleanerOptions): Promise<EcrUnusedImageCleanerRepositoryOutput>;
14
+ fetchAllImageDescriptors(repo: Repository): Promise<ImageDetail[]>;
15
+ fetchAllRepositoryDescriptors(registryId: string): Promise<Repository[]>;
16
+ fetchAllRepositoryNames(registryId: string): Promise<string[]>;
17
+ private fetchRegistryId;
18
+ }
@@ -0,0 +1,136 @@
1
+ import { BatchDeleteImageCommand, DescribeImagesCommand, DescribeRegistryCommand, DescribeRepositoriesCommand, } from '@aws-sdk/client-ecr';
2
+ import { RequireRatchet } from '@bitblit/ratchet-common/lang/require-ratchet';
3
+ import { Logger } from '@bitblit/ratchet-common/logger/logger';
4
+ import { StringRatchet } from '@bitblit/ratchet-common/lang/string-ratchet';
5
+ import { RetainedImageReason } from './retained-image-reason.js';
6
+ export class EcrUnusedImageCleaner {
7
+ ecr;
8
+ static ECR_IMAGE_MINIMUM_AGE_DAYS = 60;
9
+ static ECR_REPOSITORY_MINIMUM_IMAGE_COUNT = 600;
10
+ constructor(ecr) {
11
+ this.ecr = ecr;
12
+ RequireRatchet.notNullOrUndefined(ecr, 'ecr');
13
+ }
14
+ async findAllUsedImages(finders) {
15
+ const rval = new Set();
16
+ for (let i = 0; i < finders.length; i++) {
17
+ const next = await finders[i].findUsedImageUris();
18
+ next.forEach((s) => rval.add(s));
19
+ }
20
+ return Array.from(rval);
21
+ }
22
+ async performCleaning(opts) {
23
+ Logger.info('Starting cleaning with options : %j', opts);
24
+ Logger.info('Finding in-use images');
25
+ const usedImagesUris = await this.findAllUsedImages(opts.usedImageFinders || []);
26
+ const usedImageTags = usedImagesUris.map((s) => s.substring(s.lastIndexOf(':') + 1));
27
+ Logger.info('Found %d images in use: %j', usedImageTags.length, usedImageTags);
28
+ const regId = await this.fetchRegistryId();
29
+ Logger.info('Processing registry %s', regId);
30
+ const repos = await this.fetchAllRepositoryDescriptors(regId);
31
+ Logger.info('Found repos : %j', repos);
32
+ const cleaned = [];
33
+ for (let i = 0; i < repos.length; i++) {
34
+ Logger.info('Processing repo %d of %d', i, repos.length);
35
+ try {
36
+ const next = await this.cleanRepository(repos[i], usedImageTags, opts);
37
+ cleaned.push(next);
38
+ }
39
+ catch (err) {
40
+ Logger.error('Failed to process repo : %j : %s', repos[i], err, err);
41
+ }
42
+ }
43
+ const rval = {
44
+ registryId: regId,
45
+ repositories: cleaned,
46
+ options: opts,
47
+ };
48
+ return rval;
49
+ }
50
+ async cleanRepository(repo, usedImageTags, opts) {
51
+ Logger.info('Cleaning repository: %j', repo);
52
+ const images = await this.fetchAllImageDescriptors(repo);
53
+ Logger.info('Found images: %d : %j', images.length, images);
54
+ const toPurge = [];
55
+ const toKeep = [];
56
+ images.forEach((i) => {
57
+ const matches = usedImageTags.map((tag) => i.imageTags.includes(tag));
58
+ const anyMatch = matches.find((s) => s);
59
+ if (anyMatch) {
60
+ toKeep.push({ image: i, reason: RetainedImageReason.InUse });
61
+ }
62
+ else {
63
+ toPurge.push(i);
64
+ }
65
+ });
66
+ Logger.info('Found %d to purge and %d to keep', toPurge.length, toKeep.length);
67
+ const totalBytes = toPurge.map((p) => p.imageSizeInBytes).reduce((a, i) => a + i, 0);
68
+ Logger.info('Found %s total bytes to purge : %d', StringRatchet.formatBytes(totalBytes), totalBytes);
69
+ const purgeCmd = {
70
+ registryId: repo.registryId,
71
+ repositoryName: repo.repositoryName,
72
+ imageIds: toPurge.map((p) => {
73
+ return { imageDigest: p.imageDigest, imageTag: p.imageTags[0] };
74
+ }),
75
+ };
76
+ Logger.info('Purge command : %j', purgeCmd);
77
+ if (opts.dryRun) {
78
+ Logger.info('Dry run specd, stopping');
79
+ }
80
+ else {
81
+ if (purgeCmd.imageIds.length > 0) {
82
+ Logger.info('Purging unused images');
83
+ const output = await this.ecr.send(new BatchDeleteImageCommand(purgeCmd));
84
+ Logger.info('Response was : %j', output);
85
+ }
86
+ else {
87
+ Logger.info('Skipping - nothing to purge in this repo');
88
+ }
89
+ }
90
+ const rval = {
91
+ repository: repo,
92
+ purged: toPurge,
93
+ retained: toKeep,
94
+ totalBytesRecovered: totalBytes,
95
+ };
96
+ return rval;
97
+ }
98
+ async fetchAllImageDescriptors(repo) {
99
+ RequireRatchet.notNullOrUndefined(repo, 'repo');
100
+ let rval = [];
101
+ const cmd = {
102
+ registryId: repo.registryId,
103
+ repositoryName: repo.repositoryName,
104
+ };
105
+ let resp = null;
106
+ do {
107
+ resp = await this.ecr.send(new DescribeImagesCommand(cmd));
108
+ rval = rval.concat(resp.imageDetails);
109
+ cmd.nextToken = resp.nextToken;
110
+ } while (StringRatchet.trimToNull(cmd.nextToken));
111
+ return rval;
112
+ }
113
+ async fetchAllRepositoryDescriptors(registryId) {
114
+ let rval = [];
115
+ const cmd = {
116
+ registryId: registryId,
117
+ };
118
+ let resp = null;
119
+ do {
120
+ resp = await this.ecr.send(new DescribeRepositoriesCommand(cmd));
121
+ rval = rval.concat(resp.repositories);
122
+ cmd.nextToken = resp.nextToken;
123
+ } while (StringRatchet.trimToNull(cmd.nextToken));
124
+ return rval;
125
+ }
126
+ async fetchAllRepositoryNames(registryId) {
127
+ const resps = await this.fetchAllRepositoryDescriptors(registryId);
128
+ const rval = resps.map((r) => r.repositoryName);
129
+ return rval;
130
+ }
131
+ async fetchRegistryId() {
132
+ const response = await this.ecr.send(new DescribeRegistryCommand({}));
133
+ return response.registryId;
134
+ }
135
+ }
136
+ //# sourceMappingURL=ecr-unused-image-cleaner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ecr-unused-image-cleaner.js","sourceRoot":"","sources":["../../src/ecr/ecr-unused-image-cleaner.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EAGvB,qBAAqB,EAGrB,uBAAuB,EAEvB,2BAA2B,GAM5B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAK5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAGjE,MAAM,OAAO,qBAAqB;IAOZ;IALZ,MAAM,CAAU,0BAA0B,GAAW,EAAE,CAAC;IAGxD,MAAM,CAAU,kCAAkC,GAAW,GAAG,CAAC;IAEzE,YAAoB,GAAc;QAAd,QAAG,GAAH,GAAG,CAAW;QAChC,cAAc,CAAC,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAChD,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,OAA0B;QACvD,MAAM,IAAI,GAAgB,IAAI,GAAG,EAAU,CAAC;QAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,IAAI,GAAa,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC;YAC5D,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,IAAkC;QAC7D,MAAM,CAAC,IAAI,CAAC,qCAAqC,EAAE,IAAI,CAAC,CAAC;QAEzD,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACrC,MAAM,cAAc,GAAa,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;QAC3F,MAAM,aAAa,GAAa,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC/F,MAAM,CAAC,IAAI,CAAC,4BAA4B,EAAE,aAAa,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;QAE/E,MAAM,KAAK,GAAW,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAiB,MAAM,IAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC;QAC5E,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;QAEvC,MAAM,OAAO,GAA4C,EAAE,CAAC;QAC5D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YACzD,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;gBACvE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,MAAM,CAAC,KAAK,CAAC,kCAAkC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;QAED,MAAM,IAAI,GAAgC;YACxC,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,OAAO;YACrB,OAAO,EAAE,IAAI;SACd,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,eAAe,CAC1B,IAAgB,EAChB,aAAuB,EACvB,IAAkC;QAElC,MAAM,CAAC,IAAI,CAAC,yBAAyB,EAAE,IAAI,CAAC,CAAC;QAE7C,MAAM,MAAM,GAAkB,MAAM,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;QACxE,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAE5D,MAAM,OAAO,GAAkB,EAAE,CAAC;QAClC,MAAM,MAAM,GAA8B,EAAE,CAAC;QAC7C,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACnB,MAAM,OAAO,GAAc,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YACjF,MAAM,QAAQ,GAAY,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;YACjD,IAAI,QAAQ,EAAE,CAAC;gBACb,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,mBAAmB,CAAC,KAAK,EAAE,CAAC,CAAC;YAC/D,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,kCAAkC,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAE/E,MAAM,UAAU,GAAW,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC7F,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE,aAAa,CAAC,WAAW,CAAC,UAAU,CAAC,EAAE,UAAU,CAAC,CAAC;QAErG,MAAM,QAAQ,GAAiC;YAC7C,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBAC1B,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,CAAC,CAAC;SACH,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,QAAQ,CAAC,CAAC;QAE5C,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;QACzC,CAAC;aAAM,CAAC;YACN,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACjC,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;gBACrC,MAAM,MAAM,GAAkC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACzG,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAC;YAC3C,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;YAC1D,CAAC;QACH,CAAC;QAED,MAAM,IAAI,GAA0C;YAClD,UAAU,EAAE,IAAI;YAChB,MAAM,EAAE,OAAO;YACf,QAAQ,EAAE,MAAM;YAEhB,mBAAmB,EAAE,UAAU;SAChC,CAAC;QACF,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,wBAAwB,CAAC,IAAgB;QACpD,cAAc,CAAC,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QAChD,IAAI,IAAI,GAAkB,EAAE,CAAC;QAC7B,MAAM,GAAG,GAA+B;YACtC,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,cAAc,EAAE,IAAI,CAAC,cAAc;SACpC,CAAC;QACF,IAAI,IAAI,GAA2B,IAAI,CAAC;QAExC,GAAG,CAAC;YACF,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3D,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACtC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,CAAC,QAAQ,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;QAElD,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,6BAA6B,CAAC,UAAkB;QAC3D,IAAI,IAAI,GAAiB,EAAE,CAAC;QAC5B,MAAM,GAAG,GAAqC;YAC5C,UAAU,EAAE,UAAU;SACvB,CAAC;QACF,IAAI,IAAI,GAAiC,IAAI,CAAC;QAE9C,GAAG,CAAC;YACF,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,2BAA2B,CAAC,GAAG,CAAC,CAAC,CAAC;YACjE,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YACtC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QACjC,CAAC,QAAQ,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;QAElD,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,uBAAuB,CAAC,UAAkB;QACrD,MAAM,KAAK,GAAiB,MAAM,IAAI,CAAC,6BAA6B,CAAC,UAAU,CAAC,CAAC;QACjF,MAAM,IAAI,GAAa,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;QAC1D,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,eAAe;QAC3B,MAAM,QAAQ,GAA6B,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,uBAAuB,CAAC,EAAE,CAAC,CAAC,CAAC;QAChG,OAAO,QAAQ,CAAC,UAAU,CAAC;IAC7B,CAAC"}
@@ -0,0 +1,9 @@
1
+ export * from './ecr-unused-image-cleaner-options.js';
2
+ export * from './ecr-unused-image-cleaner-output.js';
3
+ export * from './ecr-unused-image-cleaner-repository-output.js';
4
+ export * from './ecr-unused-image-cleaner.js';
5
+ export * from './retained-image-descriptor.js';
6
+ export * from './retained-image-reason.js';
7
+ export * from './used-image-finder.js';
8
+ export * from './used-image-finders/aws-batch-used-image-finder.js';
9
+ export * from './used-image-finders/lambda-used-image-finder.js';
@@ -0,0 +1,10 @@
1
+ export * from './ecr-unused-image-cleaner-options.js';
2
+ export * from './ecr-unused-image-cleaner-output.js';
3
+ export * from './ecr-unused-image-cleaner-repository-output.js';
4
+ export * from './ecr-unused-image-cleaner.js';
5
+ export * from './retained-image-descriptor.js';
6
+ export * from './retained-image-reason.js';
7
+ export * from './used-image-finder.js';
8
+ export * from './used-image-finders/aws-batch-used-image-finder.js';
9
+ export * from './used-image-finders/lambda-used-image-finder.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ecr/index.ts"],"names":[],"mappings":"AAIA,cAAc,uCAAuC,CAAC;AACtD,cAAc,sCAAsC,CAAC;AACrD,cAAc,iDAAiD,CAAC;AAChE,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,qDAAqD,CAAC;AACpE,cAAc,kDAAkD,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { ImageDetail } from '@aws-sdk/client-ecr';
2
+ import { RetainedImageReason } from './retained-image-reason.js';
3
+ export interface RetainedImageDescriptor {
4
+ image: ImageDetail;
5
+ reason: RetainedImageReason;
6
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=retained-image-descriptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retained-image-descriptor.js","sourceRoot":"","sources":["../../src/ecr/retained-image-descriptor.ts"],"names":[],"mappings":""}
@@ -0,0 +1,4 @@
1
+ export declare enum RetainedImageReason {
2
+ InUse = "InUse",
3
+ MinimumAge = "MinimumAge"
4
+ }
@@ -0,0 +1,6 @@
1
+ export var RetainedImageReason;
2
+ (function (RetainedImageReason) {
3
+ RetainedImageReason["InUse"] = "InUse";
4
+ RetainedImageReason["MinimumAge"] = "MinimumAge";
5
+ })(RetainedImageReason || (RetainedImageReason = {}));
6
+ //# sourceMappingURL=retained-image-reason.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"retained-image-reason.js","sourceRoot":"","sources":["../../src/ecr/retained-image-reason.ts"],"names":[],"mappings":"AAGA,MAAM,CAAN,IAAY,mBAGX;AAHD,WAAY,mBAAmB;IAC7B,sCAAe,CAAA;IACf,gDAAyB,CAAA;AAC3B,CAAC,EAHW,mBAAmB,KAAnB,mBAAmB,QAG9B"}
@@ -0,0 +1,3 @@
1
+ export interface UsedImageFinder {
2
+ findUsedImageUris(): Promise<string[]>;
3
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=used-image-finder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"used-image-finder.js","sourceRoot":"","sources":["../../src/ecr/used-image-finder.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import { UsedImageFinder } from '../used-image-finder.js';
2
+ import { BatchClient, JobDefinition } from '@aws-sdk/client-batch';
3
+ export declare class AwsBatchUsedImageFinder implements UsedImageFinder {
4
+ private batch;
5
+ constructor(batch: BatchClient);
6
+ findUsedImageUris(): Promise<string[]>;
7
+ listAllJobDefinitions(includeInactive?: boolean): Promise<JobDefinition[]>;
8
+ }
@@ -0,0 +1,32 @@
1
+ import { RequireRatchet } from '@bitblit/ratchet-common/lang/require-ratchet';
2
+ import { Logger } from '@bitblit/ratchet-common/logger/logger';
3
+ import { StringRatchet } from '@bitblit/ratchet-common/lang/string-ratchet';
4
+ import { DescribeJobDefinitionsCommand, } from '@aws-sdk/client-batch';
5
+ export class AwsBatchUsedImageFinder {
6
+ batch;
7
+ constructor(batch) {
8
+ this.batch = batch;
9
+ RequireRatchet.notNullOrUndefined(batch, 'batch');
10
+ }
11
+ async findUsedImageUris() {
12
+ const jobs = await this.listAllJobDefinitions(false);
13
+ Logger.info('Found %d jobs', jobs.length);
14
+ const tmp = jobs.map((j) => j.containerProperties.image).filter((s) => StringRatchet.trimToNull(s));
15
+ const rval = Array.from(new Set(tmp));
16
+ return rval;
17
+ }
18
+ async listAllJobDefinitions(includeInactive) {
19
+ let rval = [];
20
+ const request = {
21
+ nextToken: null,
22
+ status: includeInactive ? undefined : 'ACTIVE',
23
+ };
24
+ do {
25
+ const tmp = await this.batch.send(new DescribeJobDefinitionsCommand(request));
26
+ rval = rval.concat(tmp.jobDefinitions);
27
+ request.nextToken = tmp.nextToken;
28
+ } while (request.nextToken);
29
+ return rval;
30
+ }
31
+ }
32
+ //# sourceMappingURL=aws-batch-used-image-finder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aws-batch-used-image-finder.js","sourceRoot":"","sources":["../../../src/ecr/used-image-finders/aws-batch-used-image-finder.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAC5E,OAAO,EAEL,6BAA6B,GAI9B,MAAM,uBAAuB,CAAC;AAE/B,MAAM,OAAO,uBAAuB;IACd;IAApB,YAAoB,KAAkB;QAAlB,UAAK,GAAL,KAAK,CAAa;QACpC,cAAc,CAAC,kBAAkB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACpD,CAAC;IACM,KAAK,CAAC,iBAAiB;QAC5B,MAAM,IAAI,GAAoB,MAAM,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;QACtE,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAa,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9G,MAAM,IAAI,GAAa,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAS,GAAG,CAAC,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,KAAK,CAAC,qBAAqB,CAAC,eAAyB;QAC1D,IAAI,IAAI,GAAoB,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAuC;YAClD,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ;SAC/C,CAAC;QACF,GAAG,CAAC;YACF,MAAM,GAAG,GAAwC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,6BAA6B,CAAC,OAAO,CAAC,CAAC,CAAC;YACnH,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YACvC,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;QACpC,CAAC,QAAQ,OAAO,CAAC,SAAS,EAAE;QAE5B,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import { UsedImageFinder } from '../used-image-finder.js';
2
+ import { FunctionConfiguration, LambdaClient } from '@aws-sdk/client-lambda';
3
+ export declare class LambdaUsedImageFinder implements UsedImageFinder {
4
+ private lambda;
5
+ constructor(lambda: LambdaClient);
6
+ findUsedImageUris(): Promise<string[]>;
7
+ fetchFunctions(): Promise<FunctionConfiguration[]>;
8
+ }
@@ -0,0 +1,40 @@
1
+ import { RequireRatchet } from '@bitblit/ratchet-common/lang/require-ratchet';
2
+ import { Logger } from '@bitblit/ratchet-common/logger/logger';
3
+ import { StringRatchet } from '@bitblit/ratchet-common/lang/string-ratchet';
4
+ import { GetFunctionCommand, ListFunctionsCommand, } from '@aws-sdk/client-lambda';
5
+ export class LambdaUsedImageFinder {
6
+ lambda;
7
+ constructor(lambda) {
8
+ this.lambda = lambda;
9
+ RequireRatchet.notNullOrUndefined(lambda, 'lambda');
10
+ }
11
+ async findUsedImageUris() {
12
+ const rval = new Set();
13
+ const fns = await this.fetchFunctions();
14
+ Logger.info('Found %d functions', fns.length);
15
+ for (let i = 0; i < fns.length; i++) {
16
+ if (fns[i].PackageType === 'Image') {
17
+ const out = await this.lambda.send(new GetFunctionCommand({ FunctionName: fns[i].FunctionName }));
18
+ if (out.Code.RepositoryType === 'ECR' && out.Code.ImageUri) {
19
+ rval.add(out.Code.ImageUri);
20
+ }
21
+ }
22
+ else {
23
+ Logger.info('Skipping zip packaged function: %s', fns[i].FunctionName);
24
+ }
25
+ }
26
+ return Array.from(rval);
27
+ }
28
+ async fetchFunctions() {
29
+ let rval = [];
30
+ const cmd = {};
31
+ let resp = null;
32
+ do {
33
+ resp = await this.lambda.send(new ListFunctionsCommand(cmd));
34
+ rval = rval.concat(resp.Functions);
35
+ cmd.Marker = resp.NextMarker;
36
+ } while (StringRatchet.trimToNull(cmd.Marker));
37
+ return rval;
38
+ }
39
+ }
40
+ //# sourceMappingURL=lambda-used-image-finder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lambda-used-image-finder.js","sourceRoot":"","sources":["../../../src/ecr/used-image-finders/lambda-used-image-finder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,8CAA8C,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,uCAAuC,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAC5E,OAAO,EAEL,kBAAkB,EAGlB,oBAAoB,GAErB,MAAM,wBAAwB,CAAC;AAGhC,MAAM,OAAO,qBAAqB;IACZ;IAApB,YAAoB,MAAoB;QAApB,WAAM,GAAN,MAAM,CAAc;QACtC,cAAc,CAAC,kBAAkB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACtD,CAAC;IAEM,KAAK,CAAC,iBAAiB;QAC5B,MAAM,IAAI,GAAgB,IAAI,GAAG,EAAU,CAAC;QAC5C,MAAM,GAAG,GAA4B,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QACjE,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,KAAK,OAAO,EAAE,CAAC;gBACnC,MAAM,GAAG,GAA6B,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,EAAE,YAAY,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;gBAC5H,IAAI,GAAG,CAAC,IAAI,CAAC,cAAc,KAAK,KAAK,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC3D,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,IAAI,CAAC,oCAAoC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;YACzE,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAEM,KAAK,CAAC,cAAc;QACzB,IAAI,IAAI,GAAU,EAAE,CAAC;QACrB,MAAM,GAAG,GAA8B,EAAE,CAAC;QAC1C,IAAI,IAAI,GAA0B,IAAI,CAAC;QAEvC,GAAG,CAAC;YACF,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7D,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACnC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC;QAC/B,CAAC,QAAQ,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;QAE/C,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,6 @@
1
+ import { EnvironmentServiceProvider } from './environment-service-provider.js';
2
+ export declare class CascadeEnvironmentServiceProvider<T> implements EnvironmentServiceProvider<T> {
3
+ private providers;
4
+ constructor(providers: EnvironmentServiceProvider<T>[]);
5
+ fetchConfig(name: string): Promise<T>;
6
+ }