@sdk-liuzhaoliang/cli 1.0.46 → 1.0.47

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 (3) hide show
  1. package/checksum +26 -0
  2. package/install.js +88 -2
  3. package/package.json +2 -1
package/checksum ADDED
@@ -0,0 +1,26 @@
1
+ e27edb299f809864b93c197a3319ea17d596418f5fb11e2424ecce4af56a1044 volcengine-cli_1.0.47_darwin_amd64.tar.gz
2
+ 37d50bd58e0d4d5d12797010f7b9011e7826d20eb7de5a4f5527b06a7d5daaaa volcengine-cli_1.0.47_darwin_amd64.zip
3
+ 7a0e725b0e3a5ddb0f1f1b883d9ce09f1b7109fdbe0767762318031651dcce11 volcengine-cli_1.0.47_darwin_arm64.tar.gz
4
+ 4b805d99348f3d476c6a5b4181093646a30dfa1011bf489479b7bca68a9ead02 volcengine-cli_1.0.47_darwin_arm64.zip
5
+ ec4e72df0afe3c1a7b4de9dabe9fb446404a7b7d611cb6bb3d5a9d78d71da75e volcengine-cli_1.0.47_freebsd_386.tar.gz
6
+ e31cde39d8936c4f503be6e3a59f03490912e23ba643ffc31e89c552a97d4474 volcengine-cli_1.0.47_freebsd_386.zip
7
+ 4d48e234ac2b866ee84d51fd61fb74d8629496555435f6b9b4fb6413b5e6bc32 volcengine-cli_1.0.47_freebsd_amd64.tar.gz
8
+ 1fd0faf0299ed030807fef04bebacd7c0334e74c7b7667fae8e58fc34ca10394 volcengine-cli_1.0.47_freebsd_amd64.zip
9
+ bf7035148b2b13ec6a2049b732cb703c50d457897d379e62a0245989a2abc522 volcengine-cli_1.0.47_freebsd_arm.tar.gz
10
+ d57f9c485cd60f31d5b73d314d53ff7dfed577a94e9cc12c20ca5e521e6a70c2 volcengine-cli_1.0.47_freebsd_arm.zip
11
+ 14ff0d779197857a00c9e5d1cd6e92d0efd42dfedca32f0c0c3e609bda231245 volcengine-cli_1.0.47_freebsd_arm64.tar.gz
12
+ 3b55d893b21f8ee5273fba08ec039ce54c493524db051c46d85c74950417853a volcengine-cli_1.0.47_freebsd_arm64.zip
13
+ 8d2157f2cf1849261b8ecae4581e35c15673aad3a0399f7260de077b8cbf11a7 volcengine-cli_1.0.47_linux_386.tar.gz
14
+ dec90bf94b5819c3f0d11cb81dc593c5162cdcdc01411eee0b690bd47ff6c6e0 volcengine-cli_1.0.47_linux_386.zip
15
+ ebcd30ece6a55e7061119f149eb01d0dbcb479da625b78bdafc51f4f6086435b volcengine-cli_1.0.47_linux_amd64.tar.gz
16
+ 1b39ace1e5a1df6cbc5c10b6c8db7e1638b36e7f9047362d604835117821d244 volcengine-cli_1.0.47_linux_amd64.zip
17
+ 90c86fdeca3ab41b9c82d12d1a479b44ed7486b06ca4ebc67b59426e9504a44e volcengine-cli_1.0.47_linux_arm.tar.gz
18
+ 83d8c19eb50555482d7884475c426dfbd1b42f796baafce670e42c2d18a4bd19 volcengine-cli_1.0.47_linux_arm.zip
19
+ 4c742a8819bc29e683cf5019ab3dc3f20297eb7415f7cf8ed0afcbe88bc051c2 volcengine-cli_1.0.47_linux_arm64.tar.gz
20
+ c3def6f6d05bb99171b199021cca9f878707ef7b7bc6d430e012daaf77f159da volcengine-cli_1.0.47_linux_arm64.zip
21
+ dd351767e49c0af726038cca762aee984ca68aba09f19adf5c253f88c509e733 volcengine-cli_1.0.47_windows_386.tar.gz
22
+ 4c2e4ae14f79bab2d8af4bc04b370d53a763243b98099517eeb2ab1cb6274209 volcengine-cli_1.0.47_windows_386.zip
23
+ a036a6e3a931330738a5d8b68ba3a083220ab65f0efa8a1f490601746d743da6 volcengine-cli_1.0.47_windows_amd64.tar.gz
24
+ 047221e1d8200dca4a277329274577420e11ffb962c4e7e77df5fbcecf5162ec volcengine-cli_1.0.47_windows_amd64.zip
25
+ 6580c3af61373f02c9c69dc14abc188a8ac1590cd2fc0d57f083f45e41294db6 volcengine-cli_1.0.47_windows_arm64.tar.gz
26
+ ee3f5b319d1f76b9adae26bf967a99d1087a9e64e19e2c60b3479bfe23ab3f35 volcengine-cli_1.0.47_windows_arm64.zip
package/install.js CHANGED
@@ -1,12 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  const { execSync } = require("child_process");
4
+ const crypto = require("crypto");
4
5
  const https = require("https");
5
6
  const fs = require("fs");
6
7
  const path = require("path");
7
8
 
8
- const VERSION = "1.0.46";
9
+ const VERSION = require("./package.json").version;
9
10
  const DEFAULT_DOWNLOAD_BASE_URL = "https://vecli-demo.tos-cn-beijing.volces.com/ve";
11
+ const CHECKSUM_PATH = path.join(__dirname, "checksum");
12
+ const OFFICIAL_RELEASES_URL = "https://github.com/sdk-liuzhaoliang/volcengine-cli/releases";
10
13
  const DOWNLOAD_BASE_URL = normalizeBaseURL(
11
14
  process.env.VOLCENGINE_CLI_DOWNLOAD_BASE_URL || DEFAULT_DOWNLOAD_BASE_URL
12
15
  );
@@ -68,6 +71,81 @@ function archiveURLForTarget(target, version, downloadBaseURL) {
68
71
  return `${baseURL}/v${version}/${archiveNameForTarget(target, version)}`;
69
72
  }
70
73
 
74
+ function sha256(data) {
75
+ return crypto.createHash("sha256").update(data).digest("hex");
76
+ }
77
+
78
+ function archiveBasename(filename) {
79
+ return String(filename || "").split(/[\\/]/).pop();
80
+ }
81
+
82
+ function parseChecksum(content) {
83
+ const entries = [];
84
+ String(content || "")
85
+ .split(/\r?\n/)
86
+ .forEach((line, index) => {
87
+ const trimmed = line.trim();
88
+ if (!trimmed) {
89
+ return;
90
+ }
91
+
92
+ const match = trimmed.match(/^([a-fA-F0-9]{64})\s+\*?(.+)$/);
93
+ if (!match) {
94
+ throw new Error(`Invalid checksum line ${index + 1}`);
95
+ }
96
+
97
+ entries.push({
98
+ hash: match[1].toLowerCase(),
99
+ filename: match[2],
100
+ });
101
+ });
102
+ return entries;
103
+ }
104
+
105
+ function checksumForArchive(content, archiveName) {
106
+ const match = parseChecksum(content).find(
107
+ (entry) => entry.filename === archiveName || archiveBasename(entry.filename) === archiveName
108
+ );
109
+
110
+ if (!match) {
111
+ throw new Error(`Checksum entry not found for ${archiveName}`);
112
+ }
113
+
114
+ return match.hash;
115
+ }
116
+
117
+ function verifyArchiveChecksum(data, archiveName, checksumPath = CHECKSUM_PATH) {
118
+ let checksumContent;
119
+ try {
120
+ checksumContent = fs.readFileSync(checksumPath, "utf8");
121
+ } catch (err) {
122
+ if (err && err.code === "ENOENT") {
123
+ throw new Error(`Checksum file not found: ${checksumPath}`);
124
+ }
125
+ throw err;
126
+ }
127
+
128
+ const expected = checksumForArchive(checksumContent, archiveName);
129
+ const actual = sha256(data);
130
+
131
+ if (actual !== expected) {
132
+ throw new Error(
133
+ `Checksum mismatch for ${archiveName}: expected ${expected}, got ${actual}. ` +
134
+ `The downloaded archive may have been tampered with. ` +
135
+ `Please download Volcengine CLI from the official releases page: ${OFFICIAL_RELEASES_URL}`
136
+ );
137
+ }
138
+
139
+ return actual;
140
+ }
141
+
142
+ function downloadErrorMessage(statusCode, url) {
143
+ return (
144
+ `Download failed: HTTP ${statusCode} for ${url}. ` +
145
+ `Please download Volcengine CLI from the official releases page: ${OFFICIAL_RELEASES_URL}`
146
+ );
147
+ }
148
+
71
149
  function createWindowsVeShim(binDir) {
72
150
  const shimPath = path.join(binDir, "ve");
73
151
  const shim = `#!/usr/bin/env node
@@ -99,7 +177,7 @@ function download(url) {
99
177
  return;
100
178
  }
101
179
  if (res.statusCode !== 200) {
102
- reject(new Error(`Download failed: HTTP ${res.statusCode} for ${url}`));
180
+ reject(new Error(downloadErrorMessage(res.statusCode, url)));
103
181
  return;
104
182
  }
105
183
  const chunks = [];
@@ -131,6 +209,8 @@ async function install() {
131
209
  console.log(`Downloading ${zipName}...`);
132
210
 
133
211
  const data = await download(url);
212
+ verifyArchiveChecksum(data, zipName);
213
+
134
214
  const tmpDir = path.join(__dirname, ".tmp");
135
215
  const zipPath = path.join(tmpDir, zipName);
136
216
 
@@ -188,7 +268,13 @@ module.exports = {
188
268
  archiveNameForTarget,
189
269
  archiveURLForTarget,
190
270
  binaryNameForPlatform,
271
+ checksumForArchive,
191
272
  createWindowsVeShim,
273
+ downloadErrorMessage,
192
274
  normalizeBaseURL,
275
+ parseChecksum,
276
+ sha256,
193
277
  targetForPlatform,
278
+ verifyArchiveChecksum,
279
+ version: VERSION,
194
280
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sdk-liuzhaoliang/cli",
3
- "version": "1.0.46",
3
+ "version": "1.0.47",
4
4
  "description": "Volcengine CLI test package for sdk-liuzhaoliang",
5
5
  "bin": {
6
6
  "ve": "bin/ve"
@@ -12,6 +12,7 @@
12
12
  },
13
13
  "files": [
14
14
  "bin/",
15
+ "checksum",
15
16
  "install.js"
16
17
  ],
17
18
  "keywords": [