@vantaloom/cli 0.1.2 → 0.1.3

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/src/cli.mjs +23 -2
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vantaloom/cli",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "Vantaloom local runtime manager.",
package/src/cli.mjs CHANGED
@@ -261,7 +261,7 @@ async function syncFromRelease(options, action) {
261
261
  }
262
262
 
263
263
  async function downloadReleaseAsset({ repo, releaseTag, assetName, target, token }) {
264
- const url = `https://github.com/${repo}/releases/download/${releaseTag}/${assetName}`
264
+ const releaseUrl = `https://api.github.com/repos/${repo}/releases/tags/${releaseTag}`
265
265
  const headers = {
266
266
  "User-Agent": "vantaloom-cli",
267
267
  }
@@ -270,7 +270,28 @@ async function downloadReleaseAsset({ repo, releaseTag, assetName, target, token
270
270
  headers.Authorization = `Bearer ${githubToken}`
271
271
  }
272
272
 
273
- const response = await fetch(url, { headers })
273
+ const releaseResponse = await fetch(releaseUrl, { headers })
274
+ if (!releaseResponse.ok) {
275
+ const detail = await releaseResponse.text().catch(() => "")
276
+ const authHint = releaseResponse.status === 404 || releaseResponse.status === 403
277
+ ? " If the repository is private, set VANTALOOM_GITHUB_TOKEN to a GitHub token that can read releases."
278
+ : ""
279
+ throw new Error(`failed to inspect ${repo}@${releaseTag}: HTTP ${releaseResponse.status}.${authHint}${detail ? ` ${detail.slice(0, 200)}` : ""}`)
280
+ }
281
+
282
+ const release = await releaseResponse.json()
283
+ const asset = release.assets?.find((asset) => asset.name === assetName)
284
+ if (!asset) {
285
+ const names = release.assets?.map((asset) => asset.name).join(", ") || "none"
286
+ throw new Error(`missing release asset ${assetName} in ${repo}@${releaseTag}; available assets: ${names}`)
287
+ }
288
+
289
+ const response = await fetch(asset.url, {
290
+ headers: {
291
+ ...headers,
292
+ Accept: "application/octet-stream",
293
+ },
294
+ })
274
295
  if (!response.ok) {
275
296
  const detail = await response.text().catch(() => "")
276
297
  const authHint = response.status === 404 || response.status === 403