@webda/aws 4.0.0-beta.2 → 4.0.0-beta.4

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 (169) hide show
  1. package/README.md +64 -7
  2. package/lib/deployers/awsdeployer.d.ts +340 -0
  3. package/lib/deployers/awsdeployer.d.ts.map +1 -0
  4. package/lib/deployers/awsdeployer.js +673 -0
  5. package/lib/deployers/awsdeployer.js.map +1 -0
  6. package/lib/deployers/cloudformation.service.d.ts +438 -0
  7. package/lib/deployers/cloudformation.service.d.ts.map +1 -0
  8. package/lib/deployers/cloudformation.service.js +889 -0
  9. package/lib/deployers/cloudformation.service.js.map +1 -0
  10. package/lib/deployers/index.d.ts +4 -254
  11. package/lib/deployers/index.d.ts.map +1 -1
  12. package/lib/deployers/index.js +4 -542
  13. package/lib/deployers/index.js.map +1 -1
  14. package/lib/deployers/lambda-entrypoint.d.ts +33 -1
  15. package/lib/deployers/lambda-entrypoint.d.ts.map +1 -1
  16. package/lib/deployers/lambda-entrypoint.js +44 -10
  17. package/lib/deployers/lambda-entrypoint.js.map +1 -1
  18. package/lib/deployers/lambdapackager.service.d.ts +123 -0
  19. package/lib/deployers/lambdapackager.service.d.ts.map +1 -0
  20. package/lib/deployers/lambdapackager.service.js +149 -0
  21. package/lib/deployers/lambdapackager.service.js.map +1 -0
  22. package/lib/deployers/zip.d.ts +42 -0
  23. package/lib/deployers/zip.d.ts.map +1 -0
  24. package/lib/deployers/zip.js +129 -0
  25. package/lib/deployers/zip.js.map +1 -0
  26. package/lib/index.d.ts +1 -0
  27. package/lib/index.d.ts.map +1 -1
  28. package/lib/index.js +1 -0
  29. package/lib/index.js.map +1 -1
  30. package/lib/services/aws-parameters.d.ts +33 -0
  31. package/lib/services/aws-parameters.d.ts.map +1 -0
  32. package/lib/services/aws-parameters.js +18 -0
  33. package/lib/services/aws-parameters.js.map +1 -0
  34. package/lib/services/awscommands.service.d.ts +39 -0
  35. package/lib/services/awscommands.service.d.ts.map +1 -0
  36. package/lib/services/awscommands.service.js +127 -0
  37. package/lib/services/awscommands.service.js.map +1 -0
  38. package/lib/services/cloudwatchlogger.service.d.ts +131 -0
  39. package/lib/services/cloudwatchlogger.service.d.ts.map +1 -0
  40. package/lib/services/{cloudwatchlogger.js → cloudwatchlogger.service.js} +60 -28
  41. package/lib/services/cloudwatchlogger.service.js.map +1 -0
  42. package/lib/services/contributors.d.ts +36 -0
  43. package/lib/services/contributors.d.ts.map +1 -0
  44. package/lib/services/contributors.js +2 -0
  45. package/lib/services/contributors.js.map +1 -0
  46. package/lib/services/dynamodb.service.d.ts +298 -0
  47. package/lib/services/dynamodb.service.d.ts.map +1 -0
  48. package/lib/services/dynamodb.service.js +986 -0
  49. package/lib/services/dynamodb.service.js.map +1 -0
  50. package/lib/services/index.d.ts +11 -31
  51. package/lib/services/index.d.ts.map +1 -1
  52. package/lib/services/index.js +11 -8
  53. package/lib/services/index.js.map +1 -1
  54. package/lib/services/lambdacaller.service.d.ts +81 -0
  55. package/lib/services/lambdacaller.service.d.ts.map +1 -0
  56. package/lib/services/lambdacaller.service.js +75 -0
  57. package/lib/services/lambdacaller.service.js.map +1 -0
  58. package/lib/services/lambdaserver.service.d.ts +127 -0
  59. package/lib/services/lambdaserver.service.d.ts.map +1 -0
  60. package/lib/services/lambdaserver.service.js +294 -0
  61. package/lib/services/lambdaserver.service.js.map +1 -0
  62. package/lib/services/{route53.d.ts → route53.service.d.ts} +21 -12
  63. package/lib/services/route53.service.d.ts.map +1 -0
  64. package/lib/services/{route53.js → route53.service.js} +25 -28
  65. package/lib/services/route53.service.js.map +1 -0
  66. package/lib/services/s3binary.service.d.ts +215 -0
  67. package/lib/services/s3binary.service.d.ts.map +1 -0
  68. package/lib/services/{s3binary.js → s3binary.service.js} +93 -55
  69. package/lib/services/s3binary.service.js.map +1 -0
  70. package/lib/services/secretsmanager.service.d.ts +102 -0
  71. package/lib/services/secretsmanager.service.d.ts.map +1 -0
  72. package/lib/services/{secretsmanager.js → secretsmanager.service.js} +40 -22
  73. package/lib/services/secretsmanager.service.js.map +1 -0
  74. package/lib/services/{sqsqueue.d.ts → sqsqueue.service.d.ts} +60 -35
  75. package/lib/services/sqsqueue.service.d.ts.map +1 -0
  76. package/lib/services/{sqsqueue.js → sqsqueue.service.js} +53 -28
  77. package/lib/services/sqsqueue.service.js.map +1 -0
  78. package/package.json +56 -64
  79. package/webda.module.json +1425 -264
  80. package/lib/deployers/cloudformation.d.ts +0 -317
  81. package/lib/deployers/cloudformation.d.ts.map +0 -1
  82. package/lib/deployers/cloudformation.js +0 -837
  83. package/lib/deployers/cloudformation.js.map +0 -1
  84. package/lib/deployers/cloudformation.spec.d.ts +0 -2
  85. package/lib/deployers/cloudformation.spec.d.ts.map +0 -1
  86. package/lib/deployers/cloudformation.spec.js +0 -530
  87. package/lib/deployers/cloudformation.spec.js.map +0 -1
  88. package/lib/deployers/index.spec.d.ts +0 -9
  89. package/lib/deployers/index.spec.d.ts.map +0 -1
  90. package/lib/deployers/index.spec.js +0 -595
  91. package/lib/deployers/index.spec.js.map +0 -1
  92. package/lib/deployers/lambdapackager.d.ts +0 -28
  93. package/lib/deployers/lambdapackager.d.ts.map +0 -1
  94. package/lib/deployers/lambdapackager.js +0 -26
  95. package/lib/deployers/lambdapackager.js.map +0 -1
  96. package/lib/deployers/lambdapackager.spec.d.ts +0 -2
  97. package/lib/deployers/lambdapackager.spec.d.ts.map +0 -1
  98. package/lib/deployers/lambdapackager.spec.js +0 -44
  99. package/lib/deployers/lambdapackager.spec.js.map +0 -1
  100. package/lib/index.spec.d.ts +0 -11
  101. package/lib/index.spec.d.ts.map +0 -1
  102. package/lib/index.spec.js +0 -42
  103. package/lib/index.spec.js.map +0 -1
  104. package/lib/services/aws-mixin.d.ts +0 -25
  105. package/lib/services/aws-mixin.d.ts.map +0 -1
  106. package/lib/services/aws-mixin.js +0 -18
  107. package/lib/services/aws-mixin.js.map +0 -1
  108. package/lib/services/cloudwatchlogger.d.ts +0 -82
  109. package/lib/services/cloudwatchlogger.d.ts.map +0 -1
  110. package/lib/services/cloudwatchlogger.js.map +0 -1
  111. package/lib/services/cloudwatchlogger.spec.d.ts +0 -2
  112. package/lib/services/cloudwatchlogger.spec.d.ts.map +0 -1
  113. package/lib/services/cloudwatchlogger.spec.js +0 -104
  114. package/lib/services/cloudwatchlogger.spec.js.map +0 -1
  115. package/lib/services/dynamodb.d.ts +0 -174
  116. package/lib/services/dynamodb.d.ts.map +0 -1
  117. package/lib/services/dynamodb.js +0 -711
  118. package/lib/services/dynamodb.js.map +0 -1
  119. package/lib/services/dynamodb.spec.d.ts +0 -24
  120. package/lib/services/dynamodb.spec.d.ts.map +0 -1
  121. package/lib/services/dynamodb.spec.js +0 -344
  122. package/lib/services/dynamodb.spec.js.map +0 -1
  123. package/lib/services/lambdacaller.d.ts +0 -69
  124. package/lib/services/lambdacaller.d.ts.map +0 -1
  125. package/lib/services/lambdacaller.js +0 -63
  126. package/lib/services/lambdacaller.js.map +0 -1
  127. package/lib/services/lambdacaller.spec.d.ts +0 -2
  128. package/lib/services/lambdacaller.spec.d.ts.map +0 -1
  129. package/lib/services/lambdacaller.spec.js +0 -70
  130. package/lib/services/lambdacaller.spec.js.map +0 -1
  131. package/lib/services/lambdaserver.d.ts +0 -87
  132. package/lib/services/lambdaserver.d.ts.map +0 -1
  133. package/lib/services/lambdaserver.js +0 -263
  134. package/lib/services/lambdaserver.js.map +0 -1
  135. package/lib/services/lambdaserver.spec.d.ts +0 -2
  136. package/lib/services/lambdaserver.spec.d.ts.map +0 -1
  137. package/lib/services/lambdaserver.spec.js +0 -417
  138. package/lib/services/lambdaserver.spec.js.map +0 -1
  139. package/lib/services/route53.d.ts.map +0 -1
  140. package/lib/services/route53.js.map +0 -1
  141. package/lib/services/route53.spec.d.ts +0 -2
  142. package/lib/services/route53.spec.d.ts.map +0 -1
  143. package/lib/services/route53.spec.js +0 -102
  144. package/lib/services/route53.spec.js.map +0 -1
  145. package/lib/services/s3binary.d.ts +0 -163
  146. package/lib/services/s3binary.d.ts.map +0 -1
  147. package/lib/services/s3binary.js.map +0 -1
  148. package/lib/services/s3binary.spec.d.ts +0 -2
  149. package/lib/services/s3binary.spec.d.ts.map +0 -1
  150. package/lib/services/s3binary.spec.js +0 -284
  151. package/lib/services/s3binary.spec.js.map +0 -1
  152. package/lib/services/secretsmanager.d.ts +0 -81
  153. package/lib/services/secretsmanager.d.ts.map +0 -1
  154. package/lib/services/secretsmanager.js.map +0 -1
  155. package/lib/services/secretsmanager.spec.d.ts +0 -2
  156. package/lib/services/secretsmanager.spec.d.ts.map +0 -1
  157. package/lib/services/secretsmanager.spec.js +0 -66
  158. package/lib/services/secretsmanager.spec.js.map +0 -1
  159. package/lib/services/sqsqueue.d.ts.map +0 -1
  160. package/lib/services/sqsqueue.js.map +0 -1
  161. package/lib/services/sqsqueue.spec.d.ts +0 -2
  162. package/lib/services/sqsqueue.spec.d.ts.map +0 -1
  163. package/lib/services/sqsqueue.spec.js +0 -157
  164. package/lib/services/sqsqueue.spec.js.map +0 -1
  165. package/lib/shell.d.ts +0 -13
  166. package/lib/shell.d.ts.map +0 -1
  167. package/lib/shell.js +0 -42
  168. package/lib/shell.js.map +0 -1
  169. package/webda.shell.json +0 -11
@@ -1,543 +1,5 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
- return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- import { ACM } from "@aws-sdk/client-acm";
8
- import { EC2 } from "@aws-sdk/client-ec2";
9
- import { Route53 } from "@aws-sdk/client-route-53";
10
- import { NotFound, S3 } from "@aws-sdk/client-s3";
11
- import { STS } from "@aws-sdk/client-sts";
12
- import { Cache, WaitFor, WaitLinearDelay, WebdaError } from "@webda/core";
13
- import { Deployer } from "@webda/shell";
14
- import bluebird from "bluebird";
15
- import * as crypto from "crypto";
16
- import * as fs from "fs";
17
- import { globSync } from "glob";
18
- import IamPolicyOptimizer from "iam-policy-optimizer";
19
- import * as mime from "mime-types";
20
- import * as path from "path";
21
- import { randomUUID } from "crypto";
22
- import { Route53Service } from "../services/route53.js";
23
- /**
24
- * Abstract AWS Deployer
25
- *
26
- * It includes some basic utilities methods to be used by
27
- * final deployers
28
- */
29
- export class AWSDeployer extends Deployer {
30
- constructor(manager, resources) {
31
- super(manager, resources);
32
- this.resources.accessKeyId = this.resources.accessKeyId || process.env["AWS_ACCESS_KEY_ID"];
33
- this.resources.secretAccessKey = this.resources.secretAccessKey || process.env["AWS_SECRET_ACCESS_KEY"];
34
- this.resources.sessionToken = this.resources.sessionToken || process.env["AWS_SESSION_TOKEN"];
35
- this.resources.region = this.resources.region || process.env["AWS_DEFAULT_REGION"] || "us-east-1";
36
- this.resources.endpoints = this.resources.endpoints || {};
37
- this.resources.Tags = this.resources.Tags || {};
38
- if (!Array.isArray(this.resources.Tags)) {
39
- this.resources.Tags = this.transformMapTagsToArray(this.resources.Tags);
40
- }
41
- }
42
- /**
43
- * Return AWS region
44
- */
45
- getRegion() {
46
- return this.resources.region;
47
- }
48
- /**
49
- * Return the current AWS Identity used
50
- */
51
- async getAWSIdentity() {
52
- const sts = new STS({
53
- endpoint: this.resources.endpoints.STS
54
- });
55
- return sts.getCallerIdentity({});
56
- }
57
- /**
58
- * Return the default VPC for the current region
59
- */
60
- async getDefaultVpc() {
61
- const defaultVpc = {
62
- Id: "",
63
- Subnets: []
64
- };
65
- const ec2 = new EC2({
66
- endpoint: this.resources.endpoints.EC2
67
- });
68
- const res = await ec2.describeVpcs({});
69
- for (const i in res.Vpcs) {
70
- if (res.Vpcs[i].IsDefault) {
71
- defaultVpc.Id = res.Vpcs[i].VpcId;
72
- break;
73
- }
74
- }
75
- if (defaultVpc.Id === "") {
76
- return undefined;
77
- }
78
- const vpcFilter = {
79
- Filters: [
80
- {
81
- Name: "vpc-id",
82
- Values: [defaultVpc.Id]
83
- }
84
- ]
85
- };
86
- const res2 = await ec2.describeSubnets(vpcFilter);
87
- for (const i in res2.Subnets) {
88
- defaultVpc.Subnets.push(res2.Subnets[i]);
89
- }
90
- return defaultVpc;
91
- }
92
- /**
93
- * Generate a MD5 in hex
94
- * @param str to hash
95
- */
96
- md5(str) {
97
- return this.hash(str, "md5", "hex");
98
- }
99
- /**
100
- * Hash the string
101
- *
102
- * @param str to hash
103
- * @param type of hash
104
- * @param format hex or b64
105
- */
106
- hash(str, type = "md5", format = "hex") {
107
- return crypto.createHash(type).update(str).digest(format);
108
- }
109
- /**
110
- * Replace / by _ as theses ID are not allowed in AWS
111
- *
112
- * @param id
113
- */
114
- _replaceForAWS(id) {
115
- return id.replace(/\//g, "_");
116
- }
117
- /**
118
- * Get a certificate or create it
119
- *
120
- * @param domain to get certificate for
121
- * @param region
122
- */
123
- async getCertificate(domain, region = undefined) {
124
- if (domain.endsWith(".")) {
125
- domain = domain.substring(0, domain.length - 1);
126
- }
127
- const acm = new ACM({
128
- endpoint: this.resources.endpoints.ACM,
129
- region
130
- });
131
- const params = {};
132
- let res;
133
- let certificate;
134
- do {
135
- res = await acm.listCertificates(params);
136
- certificate = res.CertificateSummaryList.filter(cert => cert.DomainName === domain).pop();
137
- params.NextToken = res.NextToken;
138
- } while (!certificate && res.NextToken);
139
- // We did not find the certificate need to create one
140
- if (!certificate) {
141
- const zone = await this.getZoneForDomainName(domain);
142
- if (!zone) {
143
- throw new WebdaError.CodeError("ROUTE53_NOTFOUND", "Cannot create certificate as Route53 Zone was not found");
144
- }
145
- this.logger.log("INFO", "Creating a certificate for", domain);
146
- certificate = await this.doCreateCertificate(domain, zone);
147
- }
148
- return certificate;
149
- }
150
- /**
151
- * Get the closest zone to the domain
152
- *
153
- * @param domain to get zone for
154
- */
155
- async getZoneForDomainName(domain) {
156
- return Route53Service.getZoneForDomainName(domain);
157
- }
158
- /**
159
- * Transform a tag map into a tag array
160
- *
161
- * @param tags
162
- */
163
- transformMapTagsToArray(tags) {
164
- if (Array.isArray(tags)) {
165
- return tags;
166
- }
167
- const res = [];
168
- for (const i in tags) {
169
- res.push({ Key: i, Value: tags[i] });
170
- }
171
- return res;
172
- }
173
- /**
174
- * Transform a tag array into a tag map
175
- *
176
- * @param tags
177
- */
178
- transformArrayTagsToMap(tags) {
179
- if (!Array.isArray(tags)) {
180
- return tags;
181
- }
182
- const res = {};
183
- tags.forEach(t => (res[t.Key] = t.Value));
184
- return res;
185
- }
186
- /**
187
- * Take this.resources[key].Tags and add all remaining Tags from this.resources.Tags
188
- *
189
- * @param key of the resources to add
190
- */
191
- getDefaultTags(key = undefined) {
192
- let Tags;
193
- if (typeof key === "string") {
194
- Tags = this.resources[key] ? this.transformMapTagsToArray(this.resources[key].Tags) || [] : [];
195
- }
196
- else {
197
- Tags = this.transformMapTagsToArray(key) || [];
198
- }
199
- if (this.resources.Tags.length) {
200
- const TagKeys = Tags.map(t => t.Key);
201
- Tags.push(...this.resources.Tags.filter(t => TagKeys.indexOf(t.Key) < 0));
202
- }
203
- return Tags;
204
- }
205
- /**
206
- * Take this.resources[key].Tags and add all remaining Tags from this.resources.Tags
207
- *
208
- * @param key of the resources to add
209
- */
210
- getDefaultTagsAsMap(key = undefined) {
211
- return this.transformArrayTagsToMap(this.getDefaultTags(key));
212
- }
213
- /**
214
- * Return the S3 Tagging string
215
- * @param key of the resources to add
216
- */
217
- getDefaultTagsAsS3Tagging(key = undefined) {
218
- return this.getDefaultTags(key)
219
- .map(tag => `${encodeURIComponent(tag.Key)}=${encodeURIComponent(tag.Value)}`)
220
- .join("&");
221
- }
222
- async waitFor(callback, retries, title, delay) {
223
- return WaitFor(callback, retries, title, this.logger, WaitLinearDelay(delay));
224
- }
225
- /**
226
- * Create a certificate for a domain
227
- * Will use Route 53 to do the validation
228
- *
229
- * @param domain to create the certificate for
230
- * @param zone
231
- */
232
- async doCreateCertificate(domain, zone) {
233
- const acm = new ACM({
234
- endpoint: this.resources.endpoints.S3
235
- });
236
- if (domain.endsWith(".")) {
237
- domain = domain.substring(0, domain.length - 1);
238
- }
239
- const params = {
240
- DomainName: domain,
241
- DomainValidationOptions: [
242
- {
243
- DomainName: domain,
244
- ValidationDomain: domain
245
- }
246
- ],
247
- ValidationMethod: "DNS",
248
- IdempotencyToken: "Webda_" + this.md5(domain).substring(0, 26)
249
- };
250
- const certificate = await acm.requestCertificate(params);
251
- let cert = await this.waitFor(async (resolve) => {
252
- const res = await acm.describeCertificate({
253
- CertificateArn: certificate.CertificateArn
254
- });
255
- if (res.Certificate.DomainValidationOptions && res.Certificate.DomainValidationOptions[0].ResourceRecord) {
256
- resolve(res.Certificate);
257
- return true;
258
- }
259
- return false;
260
- }, 5, "Waiting for certificate challenge", 10000);
261
- if (cert === undefined || cert.Status === "FAILED") {
262
- throw new WebdaError.CodeError("ACM_VALIDATION_FAILED", "Certificate validation has failed");
263
- }
264
- if (cert.Status === "PENDING_VALIDATION") {
265
- // On create need to wait
266
- const record = cert.DomainValidationOptions[0].ResourceRecord;
267
- this.logger.log("INFO", "Need to validate certificate", cert.CertificateArn);
268
- await this.createDNSEntry(record.Name, "CNAME", record.Value, zone);
269
- // Waiting for certificate validation
270
- cert = await this.waitFor(async (resolve, reject) => {
271
- const res = await acm.describeCertificate({
272
- CertificateArn: cert.CertificateArn
273
- });
274
- if (res.Certificate.Status === "ISSUED") {
275
- resolve(res.Certificate);
276
- return true;
277
- }
278
- if (res.Certificate.Status !== "PENDING_VALIDATION") {
279
- reject(res.Certificate);
280
- return true;
281
- }
282
- }, 10, "Waiting for certificate validation", 60000);
283
- }
284
- //
285
- return cert;
286
- }
287
- /**
288
- * Create DNS entry
289
- *
290
- * @param domain to create
291
- * @param type of DNS
292
- * @param value the value of the record
293
- * @param targetZone
294
- */
295
- async createDNSEntry(domain, type, value, targetZone = undefined) {
296
- this.logger.log("INFO", `Creating DNS entry ${domain} ${type} ${value}`);
297
- const r53 = new Route53({
298
- endpoint: this.resources.endpoints.S3
299
- });
300
- if (!domain.endsWith(".")) {
301
- domain = domain + ".";
302
- }
303
- if (!targetZone) {
304
- targetZone = await this.getZoneForDomainName(domain);
305
- }
306
- if (!targetZone) {
307
- throw Error("Domain is not handled on AWS");
308
- }
309
- await r53.changeResourceRecordSets({
310
- HostedZoneId: targetZone.Id,
311
- ChangeBatch: {
312
- Changes: [
313
- {
314
- Action: "UPSERT",
315
- ResourceRecordSet: {
316
- Name: domain,
317
- ResourceRecords: [
318
- {
319
- Value: value
320
- }
321
- ],
322
- TTL: 360,
323
- Type: type
324
- }
325
- }
326
- ],
327
- Comment: "webda-automated-deploiement"
328
- }
329
- });
330
- }
331
- getARNPolicy(accountId, region) {
332
- return [
333
- {
334
- Sid: "WebdaLog",
335
- Effect: "Allow",
336
- Action: ["logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents"],
337
- Resource: ["arn:aws:logs:" + region + ":" + accountId + ":*"]
338
- }
339
- ];
340
- }
341
- /**
342
- * Generate the `PolicyDocument`
343
- *
344
- * It will browse all services for a method `getARNPolicy`
345
- * Allowing you to write some specific Service or Bean that
346
- * requires specific AWS permissions
347
- */
348
- async getPolicyDocument(additionalStatements = []) {
349
- const me = await this.getAWSIdentity();
350
- const services = this.manager.getWebda().getServices();
351
- const statements = [];
352
- // Build policy
353
- for (const i in services) {
354
- if ("getARNPolicy" in services[i]) {
355
- // Update to match recuring policy - might need to split if policy too big
356
- const res = services[i].getARNPolicy(me.Account, this.getRegion());
357
- if (Array.isArray(res)) {
358
- statements.push(...res);
359
- }
360
- else {
361
- statements.push(res);
362
- }
363
- }
364
- }
365
- statements.push(...this.getARNPolicy(me.Account, this.getRegion()));
366
- const policyDocument = {
367
- Version: "2012-10-17",
368
- Statement: [...statements, ...additionalStatements]
369
- };
370
- // @ts-ignore
371
- return IamPolicyOptimizer.default?.reducePolicyObject(policyDocument);
372
- }
373
- /**
374
- * Create a bucket if it does not exist
375
- *
376
- * @param bucket to create
377
- */
378
- async createBucket(Bucket) {
379
- const s3 = new S3({
380
- endpoint: this.resources.endpoints.S3,
381
- forcePathStyle: this.resources.endpoints.S3 !== undefined
382
- });
383
- try {
384
- await s3.headBucket({
385
- Bucket
386
- });
387
- }
388
- catch (err) {
389
- if (err.name === "Forbidden") {
390
- this.logger.log("ERROR", "S3 bucket already exists in another account or you do not have permissions on it");
391
- }
392
- else if (err instanceof NotFound) {
393
- this.logger.log("INFO", "\tCreating S3 Bucket", Bucket);
394
- // Setup www permission on it
395
- await s3.createBucket({
396
- Bucket: Bucket
397
- });
398
- const Tags = this.getDefaultTags([]);
399
- if (Tags.length) {
400
- await s3.putBucketTagging({
401
- Bucket,
402
- Tagging: {
403
- TagSet: Tags
404
- }
405
- });
406
- }
407
- }
408
- }
409
- }
410
- /**
411
- * Send a full folder (recursive) on bucket
412
- *
413
- * @param bucket to send data to
414
- * @param folder path to local folder to send
415
- * @param prefix prefix on the bucket
416
- */
417
- async putFolderOnBucket(bucket, folder, prefix = "") {
418
- const absFolder = path.resolve(folder);
419
- const files = globSync(`${absFolder}/**/*`);
420
- await this.putFilesOnBucket(bucket,
421
- // Replace \ by / for Windows system
422
- files.map(f => ({
423
- key: `${prefix}${path.relative(absFolder, f).replace(/\\/g, "/")}`,
424
- src: f
425
- })));
426
- }
427
- /**
428
- * Find the common prefix between two strings
429
- *
430
- * Example
431
- * ```
432
- * commonPrefix("/test/plop1", "/templates/") => "/te"
433
- * ```
434
- *
435
- *
436
- * @param str1 to compare
437
- * @param str2 to compare
438
- */
439
- commonPrefix(str1, str2) {
440
- let res = "";
441
- let i = 0;
442
- while (i < str1.length && i < str2.length && str1[i] === str2[i]) {
443
- res += str1[i];
444
- i++;
445
- }
446
- return res;
447
- }
448
- /**
449
- * Add files to a bucket
450
- *
451
- * It uses hash and ETag to avoid uploading files already present
452
- *
453
- *
454
- * The files src can be either:
455
- * - a string representing the local path
456
- * - a Buffer with the dynamic content
457
- *
458
- * @param bucket to send bucket
459
- * @param files to send
460
- */
461
- async putFilesOnBucket(bucket, files) {
462
- const s3 = new S3({
463
- endpoint: this.resources.endpoints.S3,
464
- forcePathStyle: this.resources.endpoints.S3 !== undefined
465
- });
466
- if (!files.length) {
467
- return;
468
- }
469
- files.forEach(f => {
470
- if (f.src === undefined) {
471
- throw Error("Should have src and key defined");
472
- }
473
- else if (!f.key) {
474
- f.key = path.relative(process.cwd(), f.src);
475
- }
476
- });
477
- // Create the bucket
478
- await this.createBucket(bucket);
479
- // Retrieve current files to only upload the one we do not have
480
- const currentFiles = {};
481
- const Prefix = files.reduce((prev, cur) => this.commonPrefix(prev, cur.key), files[0].key);
482
- const Params = {
483
- Bucket: bucket,
484
- Prefix,
485
- MaxKeys: 1000,
486
- ContinuationToken: undefined
487
- };
488
- do {
489
- const res = await s3.listObjectsV2(Params);
490
- res.Contents.forEach(obj => {
491
- currentFiles[obj.Key] = obj;
492
- });
493
- Params.ContinuationToken = res.NextContinuationToken;
494
- } while (Params.ContinuationToken);
495
- // Should implement multithread here - cleaning too
496
- const uuid = randomUUID();
497
- let fullSize = 0;
498
- files = files.filter(info => {
499
- if (typeof info.src === "string") {
500
- const s3obj = currentFiles[info.key];
501
- const fd = fs.openSync(info.src, "r");
502
- const stat = fs.fstatSync(fd);
503
- if (s3obj && stat.size === s3obj.Size) {
504
- const md5 = `"${this.hash(fs.readFileSync(info.src).toString(), "md5", "hex")}"`;
505
- if (md5 === s3obj.ETag) {
506
- this.logger.log("TRACE", "Skipping upload of", info.src, "file with same hash already on bucket");
507
- return false;
508
- }
509
- }
510
- fullSize += stat.size;
511
- }
512
- return true;
513
- });
514
- this.logger.logProgressStart(uuid, files.length, "Uploading to S3 bucket " + bucket);
515
- await bluebird.map(files, async (info) => {
516
- // Need to have mimetype to serve the content correctly
517
- const mimetype = info.mimetype || mime.contentType(path.extname(info.key)) || "application/octet-stream";
518
- // use of upload and get size length
519
- await s3.putObject({
520
- Bucket: bucket,
521
- Body: typeof info.src === "string" ? fs.createReadStream(info.src) : info.src,
522
- Key: info.key,
523
- ContentType: mimetype,
524
- Tagging: this.getDefaultTagsAsS3Tagging()
525
- });
526
- this.logger.logProgressIncrement(1, uuid);
527
- this.logger.log("INFO", "Uploaded", typeof info.src === "string" ? info.src : "<dynamicContent>", "to", `s3://${bucket}/${info.key}`, "(" + mimetype + ")");
528
- }, { concurrency: 5 });
529
- }
530
- }
531
- __decorate([
532
- Cache()
533
- ], AWSDeployer.prototype, "getAWSIdentity", null);
534
- __decorate([
535
- Cache()
536
- ], AWSDeployer.prototype, "getDefaultVpc", null);
537
- __decorate([
538
- Cache()
539
- ], AWSDeployer.prototype, "getZoneForDomainName", null);
540
- __decorate([
541
- Cache()
542
- ], AWSDeployer.prototype, "getPolicyDocument", null);
1
+ export * from "./awsdeployer.js";
2
+ export * from "./cloudformation.service.js";
3
+ export * from "./lambdapackager.service.js";
4
+ export * from "./zip.js";
543
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/deployers/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/deployers/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,UAAU,CAAC"}
@@ -1,2 +1,34 @@
1
- export declare function handler(event: any, context: any): Promise<any>;
1
+ import { InstanceStorage } from "@webda/core";
2
+ import type { Context as LambdaContext } from "aws-lambda";
3
+ import { LambdaServer } from "../services/lambdaserver.service.js";
4
+ /**
5
+ * A booted packaged application
6
+ */
7
+ export interface LambdaApplication {
8
+ /**
9
+ * The LambdaServer handling the invocations
10
+ */
11
+ lambda: LambdaServer;
12
+ /**
13
+ * The instance storage the application was booted in, every invocation runs within it
14
+ */
15
+ instance: InstanceStorage;
16
+ }
17
+ /**
18
+ * Boot the packaged application in its own instance storage and return its LambdaServer
19
+ *
20
+ * @param appPath - the packaged application folder
21
+ * @returns the LambdaServer service and its instance storage
22
+ */
23
+ export declare function bootLambdaServer(appPath?: string): Promise<LambdaApplication>;
24
+ /**
25
+ * Lambda handler: the default `Handler` of the CloudFormation deployer
26
+ *
27
+ * The application is booted once, every invocation runs within its instance storage
28
+ *
29
+ * @param event - the Lambda event
30
+ * @param context - the Lambda context
31
+ * @returns the API Gateway result for HTTP requests
32
+ */
33
+ export declare function handler(event: any, context: LambdaContext): Promise<any>;
2
34
  //# sourceMappingURL=lambda-entrypoint.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lambda-entrypoint.d.ts","sourceRoot":"","sources":["../../src/deployers/lambda-entrypoint.ts"],"names":[],"mappings":"AAWA,wBAAsB,OAAO,CAAC,KAAK,KAAA,EAAE,OAAO,KAAA,gBAE3C"}
1
+ {"version":3,"file":"lambda-entrypoint.d.ts","sourceRoot":"","sources":["../../src/deployers/lambda-entrypoint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,eAAe,EAA8C,MAAM,aAAa,CAAC;AAC7G,OAAO,KAAK,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,MAAM,EAAE,YAAY,CAAC;IACrB;;OAEG;IACH,QAAQ,EAAE,eAAe,CAAC;CAC3B;AAOD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,GAAE,MAAyD,GACjE,OAAO,CAAC,iBAAiB,CAAC,CAe5B;AAED;;;;;;;;GAQG;AACH,wBAAsB,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,CAQ9E"}
@@ -1,13 +1,47 @@
1
- // Must use require instead of import to avoid https://github.com/microsoft/TypeScript/issues/14538#issuecomment-491126722
2
- // Revisit above comment
3
- // @ts-ignore
4
- const aws = require("@webda/aws"); // eslint-disable-line
5
- //import { LambdaServer } from "@webda/aws";
6
- import { Application } from "@webda/core";
7
- // Create thee LambdaServer
8
- const lambda = new aws.LambdaServer(new Application(process.cwd()));
9
- // Export the handler
1
+ import { Application, Core, runWithInstanceStorage, useInstanceStorage } from "@webda/core";
2
+ import { LambdaServer } from "../services/lambdaserver.service.js";
3
+ /**
4
+ * The packaged application, booted on the first invocation
5
+ */
6
+ let booted;
7
+ /**
8
+ * Boot the packaged application in its own instance storage and return its LambdaServer
9
+ *
10
+ * @param appPath - the packaged application folder
11
+ * @returns the LambdaServer service and its instance storage
12
+ */
13
+ export function bootLambdaServer(appPath = process.env["LAMBDA_TASK_ROOT"] || process.cwd()) {
14
+ return runWithInstanceStorage({}, async () => {
15
+ const app = new Application(appPath);
16
+ useInstanceStorage().application = app;
17
+ await app.load();
18
+ const core = new Core(app);
19
+ await core.init();
20
+ const services = Object.values(core.getServices());
21
+ const lambda = (services.find(service => service instanceof LambdaServer) ??
22
+ services.find(service => service?.constructor?.name === "LambdaServer"));
23
+ if (!lambda) {
24
+ throw new Error("No LambdaServer service found in the packaged application");
25
+ }
26
+ return { lambda, instance: useInstanceStorage() };
27
+ });
28
+ }
29
+ /**
30
+ * Lambda handler: the default `Handler` of the CloudFormation deployer
31
+ *
32
+ * The application is booted once, every invocation runs within its instance storage
33
+ *
34
+ * @param event - the Lambda event
35
+ * @param context - the Lambda context
36
+ * @returns the API Gateway result for HTTP requests
37
+ */
10
38
  export async function handler(event, context) {
11
- return lambda.handleRequest(event, context);
39
+ booted ?? (booted = bootLambdaServer().catch(err => {
40
+ // Allow a later invocation to retry the boot
41
+ booted = undefined;
42
+ throw err;
43
+ }));
44
+ const { lambda, instance } = await booted;
45
+ return runWithInstanceStorage(instance, () => lambda.handleRequest(event, context));
12
46
  }
13
47
  //# sourceMappingURL=lambda-entrypoint.js.map