@brunwig/mup-aws-beanstalk 0.8.1

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 (57) hide show
  1. package/.babelrc +6 -0
  2. package/.eslintignore +2 -0
  3. package/.eslintrc.yml +10 -0
  4. package/.github/FUNDING.yml +12 -0
  5. package/changelog.md +56 -0
  6. package/docs/getting-started.md +83 -0
  7. package/docs/index.md +333 -0
  8. package/index.js +1 -0
  9. package/lib/assets/env.sh +30 -0
  10. package/lib/assets/env.yaml +19 -0
  11. package/lib/assets/graceful_shutdown.sh +14 -0
  12. package/lib/assets/graceful_shutdown.yaml +7 -0
  13. package/lib/assets/health-check.js +54 -0
  14. package/lib/assets/health-check.js.map +1 -0
  15. package/lib/assets/nginx-server.conf +59 -0
  16. package/lib/assets/nginx.conf +85 -0
  17. package/lib/assets/nginx.yaml +13 -0
  18. package/lib/assets/node.sh +25 -0
  19. package/lib/assets/node.yaml +8 -0
  20. package/lib/assets/npmrc +1 -0
  21. package/lib/assets/package.json +7 -0
  22. package/lib/assets/packages.yaml +5 -0
  23. package/lib/assets/start.sh +21 -0
  24. package/lib/aws.js +98 -0
  25. package/lib/aws.js.map +1 -0
  26. package/lib/certificates.js +64 -0
  27. package/lib/certificates.js.map +1 -0
  28. package/lib/command-handlers.js +774 -0
  29. package/lib/command-handlers.js.map +1 -0
  30. package/lib/commands.js +145 -0
  31. package/lib/commands.js.map +1 -0
  32. package/lib/download.js +27 -0
  33. package/lib/download.js.map +1 -0
  34. package/lib/eb-config.js +269 -0
  35. package/lib/eb-config.js.map +1 -0
  36. package/lib/env-ready.js +121 -0
  37. package/lib/env-ready.js.map +1 -0
  38. package/lib/env-settings.js +22 -0
  39. package/lib/env-settings.js.map +1 -0
  40. package/lib/index.js +111 -0
  41. package/lib/index.js.map +1 -0
  42. package/lib/policies.js +144 -0
  43. package/lib/policies.js.map +1 -0
  44. package/lib/prepare-bundle.js +245 -0
  45. package/lib/prepare-bundle.js.map +1 -0
  46. package/lib/recheck.js +27 -0
  47. package/lib/recheck.js.map +1 -0
  48. package/lib/upload.js +75 -0
  49. package/lib/upload.js.map +1 -0
  50. package/lib/utils.js +678 -0
  51. package/lib/utils.js.map +1 -0
  52. package/lib/validate.js +67 -0
  53. package/lib/validate.js.map +1 -0
  54. package/lib/versions.js +116 -0
  55. package/lib/versions.js.map +1 -0
  56. package/package.json +65 -0
  57. package/readme.md +18 -0
@@ -0,0 +1,59 @@
1
+ # This nginx config is used with platforms based on Amazon Linux AMI
2
+ # (the version before Amazon Linux 2)
3
+ <% if(forceSSL) { %>
4
+ if ($http_x_forwarded_proto = "http") {
5
+ return 301 https://$host$request_uri;
6
+ }
7
+ <% } %>
8
+
9
+ location / {
10
+ proxy_pass http://127.0.0.1:8081;
11
+ proxy_http_version 1.1;
12
+
13
+ proxy_set_header Connection $connection_upgrade;
14
+ proxy_set_header Upgrade $http_upgrade;
15
+ proxy_set_header Host $host;
16
+ proxy_set_header X-Real-IP $remote_addr;
17
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
18
+
19
+ <% if(forceSSL) { %>
20
+ add_header Strict-Transport-Security "max-age=31536000; includeSubDomains;";
21
+ <% } %>
22
+ }
23
+
24
+
25
+ location ~* /packages/.+\.(eot|ttf|woff)$ {
26
+ root /var/app/current/programs/web.browser;
27
+ access_log off;
28
+ add_header Access-Control-Allow-Origin *;
29
+ add_header Vary Origin;
30
+ add_header Pragma public;
31
+ add_header Cache-Control "public";
32
+ expires max;
33
+ }
34
+
35
+ location ~* \.(eot|ttf|woff)$ {
36
+ root /var/app/current/programs/web.browser/app;
37
+ access_log off;
38
+ add_header Access-Control-Allow-Origin *;
39
+ add_header Vary Origin;
40
+ add_header Pragma public;
41
+ add_header Cache-Control "public";
42
+ expires max;
43
+ }
44
+
45
+
46
+ location /aws-health-check-3984729847289743128904723 {
47
+ proxy_pass http://127.0.0.1:8039;
48
+ proxy_set_header Connection "";
49
+ proxy_http_version 1.1;
50
+ proxy_set_header Host $host;
51
+ proxy_set_header X-Real-IP $remote_addr;
52
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
53
+ proxy_set_header Upgrade $http_upgrade;
54
+ proxy_set_header Connection "upgrade";
55
+ }
56
+
57
+ # gzip on;
58
+ # gzip_comp_level 4;
59
+ # gzip_types text/html text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
@@ -0,0 +1,85 @@
1
+ # This nginx config is used with platforms based on Amazon Linux AMI
2
+ # (the version before Amazon Linux 2)
3
+ proxy_buffer_size 128k;
4
+ proxy_buffers 4 256k;
5
+ proxy_busy_buffers_size 256k;
6
+
7
+ upstream nodejs {
8
+ server 127.0.0.1:8081;
9
+ keepalive 256;
10
+ }
11
+
12
+ upstream healthcheck {
13
+ server 127.0.0.1:8039;
14
+ keepalive 256;
15
+ }
16
+
17
+ server {
18
+ listen 8080;
19
+
20
+ if ($time_iso8601 ~ "^(\d{4})-(\d{2})-(\d{2})T(\d{2})") {
21
+ set $year $1;
22
+ set $month $2;
23
+ set $day $3;
24
+ set $hour $4;
25
+ }
26
+
27
+ access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd;
28
+ access_log /var/log/nginx/access.log main;
29
+
30
+ <% if(forceSSL) { %>
31
+ if ($http_x_forwarded_proto = "http") {
32
+ return 301 https://$host$request_uri;
33
+ }
34
+ <% } %>
35
+
36
+ location ~* /packages/.+\.(eot|ttf|woff)$ {
37
+ root /var/app/current/programs/web.browser;
38
+ access_log off;
39
+ add_header Access-Control-Allow-Origin *;
40
+ add_header Vary Origin;
41
+ add_header Pragma public;
42
+ add_header Cache-Control "public";
43
+ expires max;
44
+ }
45
+
46
+ location ~* \.(eot|ttf|woff)$ {
47
+ root /var/app/current/programs/web.browser/app;
48
+ access_log off;
49
+ add_header Access-Control-Allow-Origin *;
50
+ add_header Vary Origin;
51
+ add_header Pragma public;
52
+ add_header Cache-Control "public";
53
+ expires max;
54
+ }
55
+
56
+ location / {
57
+ proxy_pass http://nodejs;
58
+ proxy_set_header Connection "";
59
+ proxy_http_version 1.1;
60
+ proxy_set_header Host $host;
61
+ proxy_set_header X-Real-IP $remote_addr;
62
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
63
+ proxy_set_header Upgrade $http_upgrade;
64
+ proxy_set_header Connection "upgrade";
65
+
66
+ <% if(forceSSL) { %>
67
+ add_header Strict-Transport-Security "max-age=31536000; includeSubDomains;";
68
+ <% } %>
69
+ }
70
+
71
+ location /aws-health-check-3984729847289743128904723 {
72
+ proxy_pass http://healthcheck;
73
+ proxy_set_header Connection "";
74
+ proxy_http_version 1.1;
75
+ proxy_set_header Host $host;
76
+ proxy_set_header X-Real-IP $remote_addr;
77
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
78
+ proxy_set_header Upgrade $http_upgrade;
79
+ proxy_set_header Connection "upgrade";
80
+ }
81
+
82
+ gzip on;
83
+ gzip_comp_level 4;
84
+ gzip_types text/html text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
85
+ }
@@ -0,0 +1,13 @@
1
+ files:
2
+ "/etc/nginx/conf.d/proxy.conf" :
3
+ mode: "000644"
4
+ owner: root
5
+ group: users
6
+ content: |
7
+ <%- padScript(include('./nginx.conf'), 10) %>
8
+
9
+ container_commands:
10
+ create_healthd_folder:
11
+ command: "mkdir -p /var/log/nginx/healthd/"
12
+ removeconfig:
13
+ command: "rm -f /tmp/deployment/config/#etc#nginx#conf.d#00_elastic_beanstalk_proxy.conf /etc/nginx/conf.d/00_elastic_beanstalk_proxy.conf"
@@ -0,0 +1,25 @@
1
+ #!/bin/bash
2
+ NODE_VERSION=<%= nodeVersion %>
3
+ NPM_VERSION=<%= npmVersion %>
4
+
5
+
6
+ export NVM_DIR="/.nvm"
7
+ # Install nvm
8
+ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.6/install.sh | bash
9
+ [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
10
+
11
+ nvm install $NODE_VERSION
12
+ nvm use $NODE_VERSION
13
+ nvm alias default $NODE_VERSION
14
+ npm i -g npm@$NPM_VERSION
15
+
16
+ APP_PATH="$(/opt/elasticbeanstalk/bin/get-config container -k app_staging_dir)"
17
+ echo "APP_PATH: $APP_PATH"
18
+
19
+ # AWS Linux 2
20
+ [[ -z "$APP_PATH" ]] && APP_PATH="$(/opt/elasticbeanstalk/bin/get-config platformconfig -k AppStagingDir)"
21
+ echo "APP_PATH: $APP_PATH"
22
+
23
+ cd "$APP_PATH"
24
+ ls
25
+ cd programs/server && npm install --unsafe-perm
@@ -0,0 +1,8 @@
1
+ files:
2
+ # Runs before `npm install` in '50npm.sh'
3
+ "/opt/elasticbeanstalk/hooks/appdeploy/pre/45node.sh" :
4
+ mode: "000775"
5
+ owner: root
6
+ group: users
7
+ content: |
8
+ <%- padScript(include('./node.sh'), 12) %>
@@ -0,0 +1 @@
1
+ unsafe-perm=true
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "<%= name %>",
3
+ "version": "<%= version %>.0.0",
4
+ "scripts": {
5
+ "start": "bash ./start.sh"
6
+ }
7
+ }
@@ -0,0 +1,5 @@
1
+ packages:
2
+ "yum":
3
+ <% for(var key in packages) { %>
4
+ <%- key %>: "<%- packages[key] %>"
5
+ <% } %>
@@ -0,0 +1,21 @@
1
+ #!/bin/bash
2
+
3
+ export NVM_DIR="/.nvm"
4
+ [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
5
+
6
+ nvm use default --delete-prefix --silent
7
+
8
+ [[ ! -z "$MUP_ENV_FILE_VERSION" ]] && { echo "Long Env is enabled."; source /etc/app/env.txt; }
9
+
10
+ echo "Node version"
11
+ echo $(node --version)
12
+ echo "Npm version"
13
+ echo $(npm --version)
14
+
15
+ export METEOR_SETTINGS=$(node -e 'console.log(decodeURIComponent(process.env.METEOR_SETTINGS_ENCODED))')
16
+
17
+ echo "=> Starting health check server"
18
+ node health-check.js &
19
+
20
+ echo "=> Starting App"
21
+ node main.js
package/lib/aws.js ADDED
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = configure;
7
+ exports.ec2InstanceConnect = exports.ec2 = exports.ssm = exports.sts = exports.cloudWatchEvents = exports.cloudTrail = exports.acm = exports.autoScaling = exports.iam = exports.beanstalk = exports.s3 = void 0;
8
+
9
+ var _awsSdk = _interopRequireDefault(require("aws-sdk"));
10
+
11
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
12
+
13
+ /* eslint-disable import/no-mutable-exports */
14
+ let s3 = {};
15
+ exports.s3 = s3;
16
+ let beanstalk = {};
17
+ exports.beanstalk = beanstalk;
18
+ let iam = {};
19
+ exports.iam = iam;
20
+ let autoScaling = {};
21
+ exports.autoScaling = autoScaling;
22
+ let acm = {};
23
+ exports.acm = acm;
24
+ let cloudTrail = {};
25
+ exports.cloudTrail = cloudTrail;
26
+ let cloudWatchEvents = {};
27
+ exports.cloudWatchEvents = cloudWatchEvents;
28
+ let sts = {};
29
+ exports.sts = sts;
30
+ let ssm = {};
31
+ exports.ssm = ssm;
32
+ let ec2 = {};
33
+ exports.ec2 = ec2;
34
+ let ec2InstanceConnect = {};
35
+ /* eslint-enable import/no-mutable-exports */
36
+
37
+ exports.ec2InstanceConnect = ec2InstanceConnect;
38
+ const MAX_RETRY_DELAY = 1000 * 60 * 2;
39
+ const AWS_UPLOAD_TIMEOUT = 1000 * 60 * 60;
40
+
41
+ function configure({
42
+ auth,
43
+ name,
44
+ region
45
+ }) {
46
+ const options = {
47
+ accessKeyId: auth.id,
48
+ secretAccessKey: auth.secret,
49
+ region: region || 'us-east-1',
50
+ maxRetries: 25,
51
+ retryDelayOptions: {
52
+ customBackoff: retryCount => Math.min(2 ** retryCount * 1000, MAX_RETRY_DELAY)
53
+ }
54
+ };
55
+
56
+ _awsSdk.default.config.update(options);
57
+
58
+ exports.s3 = s3 = new _awsSdk.default.S3({
59
+ params: {
60
+ Bucket: `mup-${name}`
61
+ },
62
+ httpOptions: {
63
+ timeout: AWS_UPLOAD_TIMEOUT
64
+ },
65
+ apiVersion: '2006-03-01'
66
+ });
67
+ exports.beanstalk = beanstalk = new _awsSdk.default.ElasticBeanstalk({
68
+ apiVersion: '2010-12-01'
69
+ });
70
+ exports.iam = iam = new _awsSdk.default.IAM({
71
+ apiVersion: '2010-05-08'
72
+ });
73
+ exports.autoScaling = autoScaling = new _awsSdk.default.AutoScaling({
74
+ apiVersion: '2011-01-01'
75
+ });
76
+ exports.acm = acm = new _awsSdk.default.ACM({
77
+ apiVersion: '2015-12-08'
78
+ });
79
+ exports.cloudTrail = cloudTrail = new _awsSdk.default.CloudTrail({
80
+ apiVersion: '2013-11-01'
81
+ });
82
+ exports.sts = sts = new _awsSdk.default.STS({
83
+ apiVersion: '2011-06-15'
84
+ });
85
+ exports.cloudWatchEvents = cloudWatchEvents = new _awsSdk.default.CloudWatchEvents({
86
+ apiVersion: '2015-10-07'
87
+ });
88
+ exports.ssm = ssm = new _awsSdk.default.SSM({
89
+ apiVersion: '2014-11-06'
90
+ });
91
+ exports.ec2 = ec2 = new _awsSdk.default.EC2({
92
+ apiVersion: '2016-11-15'
93
+ });
94
+ exports.ec2InstanceConnect = ec2InstanceConnect = new _awsSdk.default.EC2InstanceConnect({
95
+ apiVersion: '2018-04-02'
96
+ });
97
+ }
98
+ //# sourceMappingURL=aws.js.map
package/lib/aws.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/aws.js"],"names":["s3","beanstalk","iam","autoScaling","acm","cloudTrail","cloudWatchEvents","sts","ssm","ec2","ec2InstanceConnect","MAX_RETRY_DELAY","AWS_UPLOAD_TIMEOUT","configure","auth","name","region","options","accessKeyId","id","secretAccessKey","secret","maxRetries","retryDelayOptions","customBackoff","retryCount","Math","min","AWS","config","update","S3","params","Bucket","httpOptions","timeout","apiVersion","ElasticBeanstalk","IAM","AutoScaling","ACM","CloudTrail","STS","CloudWatchEvents","SSM","EC2","EC2InstanceConnect"],"mappings":";;;;;;;;AAAA;;;;AAEA;AACO,IAAIA,EAAE,GAAG,EAAT;;AACA,IAAIC,SAAS,GAAG,EAAhB;;AACA,IAAIC,GAAG,GAAG,EAAV;;AACA,IAAIC,WAAW,GAAG,EAAlB;;AACA,IAAIC,GAAG,GAAG,EAAV;;AACA,IAAIC,UAAU,GAAG,EAAjB;;AACA,IAAIC,gBAAgB,GAAG,EAAvB;;AACA,IAAIC,GAAG,GAAG,EAAV;;AACA,IAAIC,GAAG,GAAG,EAAV;;AACA,IAAIC,GAAG,GAAG,EAAV;;AACA,IAAIC,kBAAkB,GAAG,EAAzB;AAEP;;;AAEA,MAAMC,eAAe,GAAG,OAAO,EAAP,GAAY,CAApC;AACA,MAAMC,kBAAkB,GAAG,OAAO,EAAP,GAAY,EAAvC;;AAEe,SAASC,SAAT,CAAmB;AAAEC,EAAAA,IAAF;AAAQC,EAAAA,IAAR;AAAcC,EAAAA;AAAd,CAAnB,EAA2C;AACxD,QAAMC,OAAO,GAAG;AACdC,IAAAA,WAAW,EAAEJ,IAAI,CAACK,EADJ;AAEdC,IAAAA,eAAe,EAAEN,IAAI,CAACO,MAFR;AAGdL,IAAAA,MAAM,EAAEA,MAAM,IAAI,WAHJ;AAIdM,IAAAA,UAAU,EAAE,EAJE;AAKdC,IAAAA,iBAAiB,EAAE;AACjBC,MAAAA,aAAa,EAAEC,UAAU,IAAIC,IAAI,CAACC,GAAL,CAAU,KAAKF,UAAL,GAAkB,IAA5B,EAAmCd,eAAnC;AADZ;AALL,GAAhB;;AAUAiB,kBAAIC,MAAJ,CAAWC,MAAX,CAAkBb,OAAlB;;AAEA,eAAAjB,EAAE,GAAG,IAAI4B,gBAAIG,EAAR,CAAW;AACdC,IAAAA,MAAM,EAAE;AAAEC,MAAAA,MAAM,EAAG,OAAMlB,IAAK;AAAtB,KADM;AAEdmB,IAAAA,WAAW,EAAE;AAAEC,MAAAA,OAAO,EAAEvB;AAAX,KAFC;AAGdwB,IAAAA,UAAU,EAAE;AAHE,GAAX,CAAL;AAKA,sBAAAnC,SAAS,GAAG,IAAI2B,gBAAIS,gBAAR,CAAyB;AAAED,IAAAA,UAAU,EAAE;AAAd,GAAzB,CAAZ;AACA,gBAAAlC,GAAG,GAAG,IAAI0B,gBAAIU,GAAR,CAAY;AAAEF,IAAAA,UAAU,EAAE;AAAd,GAAZ,CAAN;AACA,wBAAAjC,WAAW,GAAG,IAAIyB,gBAAIW,WAAR,CAAoB;AAAEH,IAAAA,UAAU,EAAE;AAAd,GAApB,CAAd;AACA,gBAAAhC,GAAG,GAAG,IAAIwB,gBAAIY,GAAR,CAAY;AAAEJ,IAAAA,UAAU,EAAE;AAAd,GAAZ,CAAN;AACA,uBAAA/B,UAAU,GAAG,IAAIuB,gBAAIa,UAAR,CAAmB;AAAEL,IAAAA,UAAU,EAAE;AAAd,GAAnB,CAAb;AACA,gBAAA7B,GAAG,GAAG,IAAIqB,gBAAIc,GAAR,CAAY;AAAEN,IAAAA,UAAU,EAAE;AAAd,GAAZ,CAAN;AACA,6BAAA9B,gBAAgB,GAAG,IAAIsB,gBAAIe,gBAAR,CAAyB;AAAEP,IAAAA,UAAU,EAAE;AAAd,GAAzB,CAAnB;AACA,gBAAA5B,GAAG,GAAG,IAAIoB,gBAAIgB,GAAR,CAAY;AAAER,IAAAA,UAAU,EAAE;AAAd,GAAZ,CAAN;AACA,gBAAA3B,GAAG,GAAG,IAAImB,gBAAIiB,GAAR,CAAY;AAAET,IAAAA,UAAU,EAAE;AAAd,GAAZ,CAAN;AACA,+BAAA1B,kBAAkB,GAAG,IAAIkB,gBAAIkB,kBAAR,CAA2B;AAAEV,IAAAA,UAAU,EAAE;AAAd,GAA3B,CAArB;AACD","sourcesContent":["import AWS from 'aws-sdk';\n\n/* eslint-disable import/no-mutable-exports */\nexport let s3 = {};\nexport let beanstalk = {};\nexport let iam = {};\nexport let autoScaling = {};\nexport let acm = {};\nexport let cloudTrail = {};\nexport let cloudWatchEvents = {};\nexport let sts = {};\nexport let ssm = {};\nexport let ec2 = {};\nexport let ec2InstanceConnect = {};\n\n/* eslint-enable import/no-mutable-exports */\n\nconst MAX_RETRY_DELAY = 1000 * 60 * 2;\nconst AWS_UPLOAD_TIMEOUT = 1000 * 60 * 60;\n\nexport default function configure({ auth, name, region }) {\n const options = {\n accessKeyId: auth.id,\n secretAccessKey: auth.secret,\n region: region || 'us-east-1',\n maxRetries: 25,\n retryDelayOptions: {\n customBackoff: retryCount => Math.min((2 ** retryCount * 1000), MAX_RETRY_DELAY)\n }\n };\n\n AWS.config.update(options);\n\n s3 = new AWS.S3({\n params: { Bucket: `mup-${name}` },\n httpOptions: { timeout: AWS_UPLOAD_TIMEOUT },\n apiVersion: '2006-03-01'\n });\n beanstalk = new AWS.ElasticBeanstalk({ apiVersion: '2010-12-01' });\n iam = new AWS.IAM({ apiVersion: '2010-05-08' });\n autoScaling = new AWS.AutoScaling({ apiVersion: '2011-01-01' });\n acm = new AWS.ACM({ apiVersion: '2015-12-08' });\n cloudTrail = new AWS.CloudTrail({ apiVersion: '2013-11-01' });\n sts = new AWS.STS({ apiVersion: '2011-06-15' });\n cloudWatchEvents = new AWS.CloudWatchEvents({ apiVersion: '2015-10-07' });\n ssm = new AWS.SSM({ apiVersion: '2014-11-06' });\n ec2 = new AWS.EC2({ apiVersion: '2016-11-15' });\n ec2InstanceConnect = new AWS.EC2InstanceConnect({ apiVersion: '2018-04-02' });\n}\n"],"file":"aws.js"}
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = ensureSSLConfigured;
7
+
8
+ var _aws = require("./aws");
9
+
10
+ var _utils = require("./utils");
11
+
12
+ var _ebConfig = require("./eb-config");
13
+
14
+ var _envReady = require("./env-ready");
15
+
16
+ async function ensureSSLConfigured(config, certificateArn) {
17
+ const {
18
+ app,
19
+ environment
20
+ } = (0, _utils.names)(config);
21
+ const ebConfig = [{
22
+ Namespace: 'aws:elbv2:listener:443',
23
+ OptionName: 'SSLCertificateArns',
24
+ Value: certificateArn
25
+ }, {
26
+ Namespace: 'aws:elbv2:listener:443',
27
+ OptionName: 'DefaultProcess',
28
+ Value: 'default'
29
+ }, {
30
+ Namespace: 'aws:elbv2:listener:443',
31
+ OptionName: 'ListenerEnabled',
32
+ Value: 'true'
33
+ }, {
34
+ Namespace: 'aws:elbv2:listener:443',
35
+ OptionName: 'Protocol',
36
+ Value: 'HTTPS'
37
+ }];
38
+ const domains = config.app.sslDomains; // we use domains to decide if we need to do something about SSL
39
+
40
+ if (!domains || domains.length === 0) {
41
+ return;
42
+ }
43
+
44
+ const {
45
+ ConfigurationSettings
46
+ } = await _aws.beanstalk.describeConfigurationSettings({
47
+ EnvironmentName: environment,
48
+ ApplicationName: app
49
+ }).promise();
50
+ const current = ConfigurationSettings[0].OptionSettings.reduce(_ebConfig.convertToObject, {});
51
+ const desired = ebConfig.reduce(_ebConfig.convertToObject, {});
52
+ const needToUpdate = Object.keys(desired).find(key => !current[key] || current[key].Value !== desired[key].Value);
53
+
54
+ if (!needToUpdate) {
55
+ return;
56
+ }
57
+
58
+ await _aws.beanstalk.updateEnvironment({
59
+ EnvironmentName: environment,
60
+ OptionSettings: ebConfig
61
+ }).promise();
62
+ await (0, _envReady.waitForEnvReady)(config, true);
63
+ }
64
+ //# sourceMappingURL=certificates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/certificates.js"],"names":["ensureSSLConfigured","config","certificateArn","app","environment","ebConfig","Namespace","OptionName","Value","domains","sslDomains","length","ConfigurationSettings","beanstalk","describeConfigurationSettings","EnvironmentName","ApplicationName","promise","current","OptionSettings","reduce","convertToObject","desired","needToUpdate","Object","keys","find","key","updateEnvironment"],"mappings":";;;;;;;AAAA;;AACA;;AACA;;AACA;;AAEe,eAAeA,mBAAf,CAAmCC,MAAnC,EAA2CC,cAA3C,EAA2D;AACxE,QAAM;AACJC,IAAAA,GADI;AAEJC,IAAAA;AAFI,MAGF,kBAAMH,MAAN,CAHJ;AAKA,QAAMI,QAAQ,GAAG,CAAC;AAChBC,IAAAA,SAAS,EAAE,wBADK;AAEhBC,IAAAA,UAAU,EAAE,oBAFI;AAGhBC,IAAAA,KAAK,EAAEN;AAHS,GAAD,EAId;AACDI,IAAAA,SAAS,EAAE,wBADV;AAEDC,IAAAA,UAAU,EAAE,gBAFX;AAGDC,IAAAA,KAAK,EAAE;AAHN,GAJc,EAQd;AACDF,IAAAA,SAAS,EAAE,wBADV;AAEDC,IAAAA,UAAU,EAAE,iBAFX;AAGDC,IAAAA,KAAK,EAAE;AAHN,GARc,EAYd;AACDF,IAAAA,SAAS,EAAE,wBADV;AAEDC,IAAAA,UAAU,EAAE,UAFX;AAGDC,IAAAA,KAAK,EAAE;AAHN,GAZc,CAAjB;AAkBA,QAAMC,OAAO,GAAGR,MAAM,CAACE,GAAP,CAAWO,UAA3B,CAxBwE,CA0BxE;;AACA,MAAI,CAACD,OAAD,IAAYA,OAAO,CAACE,MAAR,KAAmB,CAAnC,EAAsC;AACpC;AACD;;AAED,QAAM;AAAEC,IAAAA;AAAF,MAA4B,MAAMC,eACrCC,6BADqC,CACP;AAC7BC,IAAAA,eAAe,EAAEX,WADY;AAE7BY,IAAAA,eAAe,EAAEb;AAFY,GADO,EAKrCc,OALqC,EAAxC;AAOA,QAAMC,OAAO,GAAGN,qBAAqB,CAAC,CAAD,CAArB,CAAyBO,cAAzB,CAAwCC,MAAxC,CACdC,yBADc,EAEd,EAFc,CAAhB;AAIA,QAAMC,OAAO,GAAGjB,QAAQ,CAACe,MAAT,CAAgBC,yBAAhB,EAAiC,EAAjC,CAAhB;AAEA,QAAME,YAAY,GAAGC,MAAM,CAACC,IAAP,CAAYH,OAAZ,EAAqBI,IAArB,CAClBC,GAAD,IAAS,CAACT,OAAO,CAACS,GAAD,CAAR,IAAiBT,OAAO,CAACS,GAAD,CAAP,CAAanB,KAAb,KAAuBc,OAAO,CAACK,GAAD,CAAP,CAAanB,KAD3C,CAArB;;AAIA,MAAI,CAACe,YAAL,EAAmB;AACjB;AACD;;AAED,QAAMV,eACHe,iBADG,CACe;AACjBb,IAAAA,eAAe,EAAEX,WADA;AAEjBe,IAAAA,cAAc,EAAEd;AAFC,GADf,EAKHY,OALG,EAAN;AAMA,QAAM,+BAAgBhB,MAAhB,EAAwB,IAAxB,CAAN;AACD","sourcesContent":["import { beanstalk } from './aws';\nimport { names } from './utils';\nimport { convertToObject } from './eb-config';\nimport { waitForEnvReady } from './env-ready';\n\nexport default async function ensureSSLConfigured(config, certificateArn) {\n const {\n app,\n environment\n } = names(config);\n\n const ebConfig = [{\n Namespace: 'aws:elbv2:listener:443',\n OptionName: 'SSLCertificateArns',\n Value: certificateArn\n }, {\n Namespace: 'aws:elbv2:listener:443',\n OptionName: 'DefaultProcess',\n Value: 'default'\n }, {\n Namespace: 'aws:elbv2:listener:443',\n OptionName: 'ListenerEnabled',\n Value: 'true'\n }, {\n Namespace: 'aws:elbv2:listener:443',\n OptionName: 'Protocol',\n Value: 'HTTPS'\n }];\n\n const domains = config.app.sslDomains;\n\n // we use domains to decide if we need to do something about SSL\n if (!domains || domains.length === 0) {\n return;\n }\n\n const { ConfigurationSettings } = await beanstalk\n .describeConfigurationSettings({\n EnvironmentName: environment,\n ApplicationName: app,\n })\n .promise();\n\n const current = ConfigurationSettings[0].OptionSettings.reduce(\n convertToObject,\n {}\n );\n const desired = ebConfig.reduce(convertToObject, {});\n\n const needToUpdate = Object.keys(desired).find(\n (key) => !current[key] || current[key].Value !== desired[key].Value\n );\n\n if (!needToUpdate) {\n return;\n }\n\n await beanstalk\n .updateEnvironment({\n EnvironmentName: environment,\n OptionSettings: ebConfig,\n })\n .promise();\n await waitForEnvReady(config, true);\n}\n"],"file":"certificates.js"}