@ifc-lite/server-bin 1.21.0 → 1.22.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.
package/README.md CHANGED
@@ -89,6 +89,10 @@ IFC_LITE_SKIP_DOWNLOAD=1 npm install @ifc-lite/server-bin
89
89
  npx @ifc-lite/server-bin download
90
90
  ```
91
91
 
92
+ ## When a version has no release binaries
93
+
94
+ The binary is downloaded from the GitHub release `v<package version>`. If that release is missing, or has no archive for your platform (every URL returns 404), the downloader uses the newest **older** `vX.Y.Z` release that has your platform's archive and a checksum. It verifies that archive the same way and prints a warning naming both versions. The warning is repeated on every run that uses the fallback binary. To try the exact version again, run `npx @ifc-lite/server-bin download`. A network error, 5xx response or rate limit never triggers the fallback. If `GITHUB_TOKEN` or `GH_TOKEN` is set, the release lookup is authenticated.
95
+
92
96
  ## Falling back
93
97
 
94
98
  If pre-built binaries don't fit (unsupported platform, locked-down corp environment, custom config), fall back to:
@@ -1 +1 @@
1
- {"version":3,"file":"binary.d.ts","sourceRoot":"","sources":["../src/binary.ts"],"names":[],"mappings":"AAiBA,OAAO,EAA2C,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AA4B3F;;GAEG;AACH,wBAAgB,aAAa,CAAC,YAAY,CAAC,EAAE,YAAY,GAAG,MAAM,CAGjE;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAsBvD;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAwG3E;;GAEG;AACH,wBAAsB,cAAc,CAAC,UAAU,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAkGnF;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,UAAU,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAKjF;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAsDpE;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI;IAC/B,QAAQ,EAAE,YAAY,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB,CASA"}
1
+ {"version":3,"file":"binary.d.ts","sourceRoot":"","sources":["../src/binary.ts"],"names":[],"mappings":"AAeA,OAAO,EAA2C,KAAK,YAAY,EAAE,MAAM,eAAe,CAAC;AA8B3F;;GAEG;AACH,wBAAgB,aAAa,CAAC,YAAY,CAAC,EAAE,YAAY,GAAG,MAAM,CAGjE;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAwBvD;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAwG3E;;GAEG;AACH,wBAAsB,cAAc,CAAC,UAAU,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqHnF;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,UAAU,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,MAAM,CAAC,CAKjF;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAsDpE;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI;IAC/B,QAAQ,EAAE,YAAY,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CACnB,CASA"}
package/dist/binary.js CHANGED
@@ -13,6 +13,7 @@ import { extract } from 'tar';
13
13
  import { execFileSync } from 'child_process';
14
14
  import { getPlatformInfo, getPlatformDescription } from './platform.js';
15
15
  import { verifyArchiveChecksum } from './checksum.js';
16
+ import { fallbackInUseWarning, findFallbackRelease, HttpStatusError, noBinaryMessage, parseVersionSidecar, versionSidecar } from './release-fallback.js';
16
17
  const __dirname = dirname(fileURLToPath(import.meta.url));
17
18
  // GitHub release URL pattern
18
19
  const GITHUB_REPO = 'LTplus-AG/ifc-lite';
@@ -53,9 +54,13 @@ export async function isBinaryCached() {
53
54
  return false;
54
55
  }
55
56
  try {
56
- const cachedVersion = (await readFile(VERSION_FILE, 'utf-8')).trim();
57
+ const cached = parseVersionSidecar(await readFile(VERSION_FILE, 'utf-8'));
57
58
  const currentVersion = await getPackageVersion();
58
- return cachedVersion === currentVersion;
59
+ if (cached.version !== currentVersion)
60
+ return false;
61
+ if (cached.fallback)
62
+ console.warn(fallbackInUseWarning(currentVersion, cached.fallback));
63
+ return true;
59
64
  }
60
65
  catch {
61
66
  // Legitimately silent: an unreadable version sidecar means "not cached",
@@ -75,7 +80,7 @@ async function downloadFile(url, destPath, onProgress) {
75
80
  redirect: 'follow',
76
81
  });
77
82
  if (!response.ok) {
78
- throw new Error(`Download failed: ${response.status} ${response.statusText}`);
83
+ throw new HttpStatusError(response.status, response.statusText);
79
84
  }
80
85
  const contentLength = response.headers.get('content-length');
81
86
  const total = contentLength ? parseInt(contentLength, 10) : 0;
@@ -157,15 +162,14 @@ export async function downloadBinary(onProgress) {
157
162
  const downloadUrl = `${RELEASE_BASE_URL}/v${version}/${platformInfo.archiveName}`;
158
163
  const archivePath = join(CACHE_DIR, platformInfo.archiveName);
159
164
  const binaryPath = getBinaryPath(platformInfo);
160
- // Clean up any existing files
161
- if (existsSync(archivePath)) {
162
- unlinkSync(archivePath);
163
- }
165
+ if (existsSync(archivePath))
166
+ unlinkSync(archivePath); // stale partial download
164
167
  // Download archive
165
168
  console.log(`Downloading from: ${downloadUrl}`);
166
169
  // Track the asset URL that actually succeeded so the checksum sidecar is
167
170
  // fetched from the SAME release/asset that produced this archive.
168
171
  let resolvedAssetUrl = downloadUrl;
172
+ let fallbackVersion;
169
173
  try {
170
174
  await downloadFile(downloadUrl, archivePath, onProgress);
171
175
  }
@@ -175,6 +179,10 @@ export async function downloadBinary(onProgress) {
175
179
  `${RELEASE_BASE_URL}/server-v${version}/${platformInfo.archiveName}`,
176
180
  `${RELEASE_BASE_URL}/${version}/${platformInfo.archiveName}`,
177
181
  ];
182
+ // Only a clean "not found" on every URL means this version has no
183
+ // release; any other failure (network, 5xx) must not silently swap in a
184
+ // different server version.
185
+ let allNotFound = error instanceof HttpStatusError && error.status === 404;
178
186
  let downloaded = false;
179
187
  for (const altUrl of altUrls) {
180
188
  try {
@@ -184,25 +192,38 @@ export async function downloadBinary(onProgress) {
184
192
  downloaded = true;
185
193
  break;
186
194
  }
187
- catch {
188
- // Legitimately silent: these are speculative URL shapes, and a miss on
189
- // one is the expected case. The alternates that were tried are printed
190
- // above; if none work, the `if (!downloaded)` below throws naming the
191
- // original download failure.
195
+ catch (altError) {
196
+ // Speculative URL shapes: a miss is the expected case. Only whether
197
+ // it was a 404 matters, for the fallback decision below.
198
+ allNotFound &&= altError instanceof HttpStatusError && altError.status === 404;
192
199
  continue;
193
200
  }
194
201
  }
195
202
  if (!downloaded) {
196
- throw new Error(`Failed to download binary from GitHub releases.\n` +
197
- `URL: ${downloadUrl}\n` +
198
- `Error: ${error instanceof Error ? error.message : String(error)}\n\n` +
199
- `This could mean:\n` +
200
- ` 1. The release doesn't exist yet for version ${version}\n` +
201
- ` 2. Pre-built binaries aren't available for ${platformInfo.targetTriple}\n` +
202
- ` 3. Network connectivity issues\n\n` +
203
- `Alternatives:\n` +
204
- ` - Use Docker: npx create-ifc-lite my-app --template server\n` +
205
- ` - Build from source: cargo build --release -p ifc-lite-server`);
203
+ const errorText = error instanceof Error ? error.message : String(error);
204
+ const lookup = allNotFound
205
+ ? await findFallbackRelease(platformInfo.archiveName, version)
206
+ : { found: null, reason: `the download failed for a reason other than a missing release (${errorText})` };
207
+ if (!lookup.found) {
208
+ throw new Error(noBinaryMessage({
209
+ version, downloadUrl, errorText, reason: lookup.reason, archiveName: platformInfo.archiveName,
210
+ }));
211
+ }
212
+ const fallback = lookup.found;
213
+ console.warn(`Warning: @ifc-lite/server-bin@${version} has no published binary for ${platformInfo.targetTriple} ` +
214
+ `(release v${version} is missing or lacks this platform's archive).\n` +
215
+ `Warning: falling back to the server binary from release v${fallback.version}.`);
216
+ console.log(`Downloading from: ${fallback.assetUrl}`);
217
+ try {
218
+ await downloadFile(fallback.assetUrl, archivePath, onProgress);
219
+ }
220
+ catch (fallbackError) {
221
+ throw new Error(`Release v${version} has no binary, and downloading the fallback from v${fallback.version} failed: ` +
222
+ `${fallbackError instanceof Error ? fallbackError.message : String(fallbackError)}\n` +
223
+ `Fix: npm i @ifc-lite/server-bin@${fallback.version}`);
224
+ }
225
+ resolvedAssetUrl = fallback.assetUrl;
226
+ fallbackVersion = fallback.version;
206
227
  }
207
228
  }
208
229
  // Verify archive integrity before we extract / chmod / execute it. Fails
@@ -222,8 +243,9 @@ export async function downloadBinary(onProgress) {
222
243
  throw new Error(`Binary not found after extraction: ${binaryPath}\n` +
223
244
  `Archive may have unexpected structure.`);
224
245
  }
225
- // Write version file
226
- await writeFile(VERSION_FILE, version);
246
+ // Keyed on THIS package's version even for a fallback install (reused, not
247
+ // re-resolved every run); the sidecar names the fallback so each run warns.
248
+ await writeFile(VERSION_FILE, versionSidecar(version, fallbackVersion));
227
249
  // Clean up archive
228
250
  unlinkSync(archivePath);
229
251
  console.log(`Binary installed at: ${binaryPath}`);
@@ -1 +1 @@
1
- {"version":3,"file":"binary.js","sourceRoot":"","sources":["../src/binary.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"binary.js","sourceRoot":"","sources":["../src/binary.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Parse an expected SHA-256 hex digest for the given archive file name out of a
3
+ * checksum body. Supports both the single-digest sidecar form ("<hex>" or
4
+ * "<hex> <name>") and the multi-line SHA256SUMS form ("<hex> <name>" per
5
+ * line). Returns the lowercased 64-char hex digest, or null if not found.
6
+ */
7
+ export declare function parseExpectedSha256(body: string, archiveName: string): string | null;
8
+ //# sourceMappingURL=checksum-parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checksum-parse.d.ts","sourceRoot":"","sources":["../src/checksum-parse.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkBpF"}
@@ -0,0 +1,32 @@
1
+ // This Source Code Form is subject to the terms of the Mozilla Public
2
+ // License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ // file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
+ /**
5
+ * Parse an expected SHA-256 hex digest for the given archive file name out of a
6
+ * checksum body. Supports both the single-digest sidecar form ("<hex>" or
7
+ * "<hex> <name>") and the multi-line SHA256SUMS form ("<hex> <name>" per
8
+ * line). Returns the lowercased 64-char hex digest, or null if not found.
9
+ */
10
+ export function parseExpectedSha256(body, archiveName) {
11
+ const lines = body.split('\n');
12
+ for (const raw of lines) {
13
+ const line = raw.trim();
14
+ if (!line)
15
+ continue;
16
+ // Each line is "<hex>" or "<hex> <filename>" (filename may have a leading '*').
17
+ const match = line.match(/^([0-9a-fA-F]{64})(?:[ \t]+\*?(.+))?$/);
18
+ if (!match)
19
+ continue;
20
+ const [, digest, name] = match;
21
+ // A bare single-digest sidecar (no filename) always applies to this asset.
22
+ if (!name)
23
+ return digest.toLowerCase();
24
+ // SHA256SUMS lists many files; only accept the line for this archive.
25
+ const fileName = name.trim();
26
+ if (fileName === archiveName || fileName.endsWith(`/${archiveName}`)) {
27
+ return digest.toLowerCase();
28
+ }
29
+ }
30
+ return null;
31
+ }
32
+ //# sourceMappingURL=checksum-parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checksum-parse.js","sourceRoot":"","sources":["../src/checksum-parse.ts"],"names":[],"mappings":"AAAA,sEAAsE;AACtE,sEAAsE;AACtE,4DAA4D;AAE5D;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY,EAAE,WAAmB;IACnE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI;YAAE,SAAS;QACpB,iFAAiF;QACjF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;QAClE,IAAI,CAAC,KAAK;YAAE,SAAS;QACrB,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;QAC/B,2EAA2E;QAC3E,IAAI,CAAC,IAAI;YAAE,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC;QACvC,sEAAsE;QACtE,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,WAAW,EAAE,CAAC,EAAE,CAAC;YACrE,OAAO,MAAM,CAAC,WAAW,EAAE,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"checksum.d.ts","sourceRoot":"","sources":["../src/checksum.ts"],"names":[],"mappings":"AAmGA;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAmCf"}
1
+ {"version":3,"file":"checksum.d.ts","sourceRoot":"","sources":["../src/checksum.ts"],"names":[],"mappings":"AA0EA;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,IAAI,CAAC,CAmCf"}
package/dist/checksum.js CHANGED
@@ -11,17 +11,18 @@
11
11
  * checksum fail closed: the artifact is unlinked and an error thrown.
12
12
  *
13
13
  * Failing closed on a missing sidecar cannot break a supported install:
14
- * binary.ts derives the release tag from this package's own version, so a
15
- * given published version only ever downloads its own release, and every
16
- * release cut at or after the version that ships this code publishes one
17
- * sidecar per archive (.github/workflows/server-binaries.yml, "Create
14
+ * binary.ts derives the release tag from this package's own version, and
15
+ * every release cut at or after the version that ships this code publishes
16
+ * one sidecar per archive (.github/workflows/server-binaries.yml, "Create
18
17
  * Checksum Sidecar" - enforced by scripts/check-server-bin-targets.mjs).
19
- * Releases without sidecars are only downloaded by older published package
20
- * versions, which carry their own fail-open copy of this check.
18
+ * When that release is missing, binary.ts falls back to an older release
19
+ * (release-fallback.ts), and only to one whose asset list carries a checksum,
20
+ * which is then verified here exactly like the primary download.
21
21
  */
22
22
  import { existsSync, unlinkSync, createReadStream } from 'fs';
23
23
  import { pipeline } from 'stream/promises';
24
24
  import { createHash } from 'crypto';
25
+ import { parseExpectedSha256 } from './checksum-parse.js';
25
26
  /**
26
27
  * Compute the SHA-256 of a file, streamed so large archives are not buffered
27
28
  * entirely in memory.
@@ -31,34 +32,6 @@ async function computeFileSha256(filePath) {
31
32
  await pipeline(createReadStream(filePath), hash);
32
33
  return hash.digest('hex');
33
34
  }
34
- /**
35
- * Parse an expected SHA-256 hex digest for the given archive file name out of a
36
- * checksum body. Supports both the single-digest sidecar form ("<hex>" or
37
- * "<hex> <name>") and the multi-line SHA256SUMS form ("<hex> <name>" per
38
- * line). Returns the lowercased 64-char hex digest, or null if not found.
39
- */
40
- function parseExpectedSha256(body, archiveName) {
41
- const lines = body.split('\n');
42
- for (const raw of lines) {
43
- const line = raw.trim();
44
- if (!line)
45
- continue;
46
- // Each line is "<hex>" or "<hex> <filename>" (filename may have a leading '*').
47
- const match = line.match(/^([0-9a-fA-F]{64})(?:[ \t]+\*?(.+))?$/);
48
- if (!match)
49
- continue;
50
- const [, digest, name] = match;
51
- // A bare single-digest sidecar (no filename) always applies to this asset.
52
- if (!name)
53
- return digest.toLowerCase();
54
- // SHA256SUMS lists many files; only accept the line for this archive.
55
- const fileName = name.trim();
56
- if (fileName === archiveName || fileName.endsWith(`/${archiveName}`)) {
57
- return digest.toLowerCase();
58
- }
59
- }
60
- return null;
61
- }
62
35
  /**
63
36
  * Fetch the expected SHA-256 for the resolved asset from the SAME release.
64
37
  * Tries the per-asset sidecar ("<assetUrl>.sha256") first, then a release-wide
@@ -111,7 +84,7 @@ export async function verifyArchiveChecksum(archivePath, assetUrl, archiveName)
111
84
  ` 2. A network problem blocked the checksum fetch\n` +
112
85
  ` 3. The release is incomplete - report at https://github.com/LTplus-AG/ifc-lite/issues\n` +
113
86
  `Alternatives:\n` +
114
- ` - Use Docker: npx create-ifc-lite my-app --template server\n` +
87
+ ` - Pin a version whose release carries verified binaries: npm i @ifc-lite/server-bin@X.Y.Z\n` +
115
88
  ` - Build from source: cargo build --release -p ifc-lite-server`);
116
89
  }
117
90
  const actual = await computeFileSha256(archivePath);
@@ -1 +1 @@
1
- {"version":3,"file":"checksum.js","sourceRoot":"","sources":["../src/checksum.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checksum.js","sourceRoot":"","sources":["../src/checksum.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -57,7 +57,7 @@ Documentation:
57
57
  https://github.com/LTplus-AG/ifc-lite
58
58
 
59
59
  Alternatives:
60
- - Docker: npx create-ifc-lite my-app --template server
60
+ - Another version: npm i @ifc-lite/server-bin@X.Y.Z (one whose release has binaries)
61
61
  - From source: cargo run --release -p ifc-lite-server
62
62
  `;
63
63
  async function main() {
@@ -37,8 +37,7 @@ async function main() {
37
37
  // Don't fail installation, just warn
38
38
  console.warn(`\n[ifc-lite-server] Warning: Failed to download binary.\n` +
39
39
  `Error: ${error instanceof Error ? error.message : String(error)}\n` +
40
- `You can download manually later with: npx @ifc-lite/server-bin download\n` +
41
- `Or use Docker: npx create-ifc-lite my-app --template server`);
40
+ `You can download manually later with: npx @ifc-lite/server-bin download`);
42
41
  }
43
42
  }
44
43
  main();
@@ -1 +1 @@
1
- {"version":3,"file":"postinstall.js","sourceRoot":"","sources":["../src/postinstall.ts"],"names":[],"mappings":";AAEA,sEAAsE;AACtE,sEAAsE;AACtE,4DAA4D;AAE5D;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAExE,KAAK,UAAU,IAAI;IACjB,wCAAwC;IACxC,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,4EAA4E,CAAC,CAAC;QAC1F,OAAO;IACT,CAAC;IAED,yBAAyB;IACzB,IAAI,MAAM,cAAc,EAAE,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;QAC1E,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,4CAA4C,sBAAsB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAEnG,MAAM,cAAc,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE;YACzC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACd,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;gBACvD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,OAAO,GAAG,CAAC,CAAC;YACvE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,qCAAqC;QACrC,OAAO,CAAC,IAAI,CACV,2DAA2D;YAC3D,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI;YACpE,2EAA2E;YAC3E,6DAA6D,CAC9D,CAAC;IACJ,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
1
+ {"version":3,"file":"postinstall.js","sourceRoot":"","sources":["../src/postinstall.ts"],"names":[],"mappings":";AAEA,sEAAsE;AACtE,sEAAsE;AACtE,4DAA4D;AAE5D;;;;;;GAMG;AAEH,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAExE,KAAK,UAAU,IAAI;IACjB,wCAAwC;IACxC,IAAI,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,4EAA4E,CAAC,CAAC;QAC1F,OAAO;IACT,CAAC;IAED,yBAAyB;IACzB,IAAI,MAAM,cAAc,EAAE,EAAE,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;QAC1E,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,4CAA4C,sBAAsB,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QAEnG,MAAM,cAAc,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,EAAE;YACzC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACd,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,UAAU,GAAG,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC;gBACvD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oCAAoC,OAAO,GAAG,CAAC,CAAC;YACvE,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,qCAAqC;QACrC,OAAO,CAAC,IAAI,CACV,2DAA2D;YAC3D,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI;YACpE,yEAAyE,CAC1E,CAAC;IACJ,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC"}
@@ -0,0 +1,51 @@
1
+ /** A download that failed with an HTTP status (as opposed to a network error). */
2
+ export declare class HttpStatusError extends Error {
3
+ readonly status: number;
4
+ constructor(status: number, statusText: string);
5
+ }
6
+ export interface FallbackRelease {
7
+ /** Semver of the release, without the leading `v`. */
8
+ version: string;
9
+ /** Browser download URL of this platform's archive in that release. */
10
+ assetUrl: string;
11
+ }
12
+ export type FallbackLookup = {
13
+ found: FallbackRelease;
14
+ } | {
15
+ found: null;
16
+ reason: string;
17
+ };
18
+ /**
19
+ * Find the newest release OLDER than `requestedVersion` that carries
20
+ * `archiveName` plus its checksum. Never throws: API, rate-limit and network
21
+ * failures come back as `{ found: null, reason }` so the caller can put them
22
+ * in its error message.
23
+ */
24
+ export declare function findFallbackRelease(archiveName: string, requestedVersion: string): Promise<FallbackLookup>;
25
+ /**
26
+ * The version sidecar (`.cache/version.txt`). Its first line is the package
27
+ * version the cache is keyed on; a fallback install adds a second line naming
28
+ * the release that actually supplied the binary, so every later run can say so
29
+ * instead of the substitution being visible only in a (usually hidden)
30
+ * postinstall log.
31
+ */
32
+ export declare function versionSidecar(version: string, fallbackVersion?: string): string;
33
+ export declare function parseVersionSidecar(text: string): {
34
+ version: string;
35
+ fallback: string | null;
36
+ };
37
+ /** The warning printed on every run that reuses a fallback binary. */
38
+ export declare function fallbackInUseWarning(version: string, fallbackVersion: string): string;
39
+ /**
40
+ * The error text for "no binary for this version and no usable fallback".
41
+ * It names the concrete fix (pin a version whose release has binaries)
42
+ * rather than an alternative install route.
43
+ */
44
+ export declare function noBinaryMessage(details: {
45
+ version: string;
46
+ downloadUrl: string;
47
+ errorText: string;
48
+ reason: string;
49
+ archiveName: string;
50
+ }): string;
51
+ //# sourceMappingURL=release-fallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release-fallback.d.ts","sourceRoot":"","sources":["../src/release-fallback.ts"],"names":[],"mappings":"AA+BA,kFAAkF;AAClF,qBAAa,eAAgB,SAAQ,KAAK;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM;gBAAd,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAIxD;AAED,MAAM,WAAW,eAAe;IAC9B,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,cAAc,GACtB;IAAE,KAAK,EAAE,eAAe,CAAA;CAAE,GAC1B;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AA0EpC;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,cAAc,CAAC,CAiEzB;AAiBD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAEhF;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAI9F;AAED,sEAAsE;AACtE,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,MAAM,CAMrF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;CACrB,GAAG,MAAM,CAWT"}
@@ -0,0 +1,207 @@
1
+ // This Source Code Form is subject to the terms of the Mozilla Public
2
+ // License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ // file, You can obtain one at https://mozilla.org/MPL/2.0/.
4
+ /**
5
+ * Fallback release resolution for when this package version's own release
6
+ * carries no archive for the current platform (#5525).
7
+ *
8
+ * binary.ts derives the release tag from the package version, so a version
9
+ * that reaches npm without a matching `v<version>` release (1.20.0 and 1.21.0
10
+ * both did) 404s on every platform. Instead of failing, look up the newest
11
+ * OLDER `vX.Y.Z` release that does carry this platform's archive, via the
12
+ * unauthenticated GitHub releases API. The caller verifies the fallback's
13
+ * checksum exactly as it does the primary download.
14
+ */
15
+ import { parseExpectedSha256 } from './checksum-parse.js';
16
+ const GITHUB_REPO = 'LTplus-AG/ifc-lite';
17
+ const RELEASES_API_URL = `https://api.github.com/repos/${GITHUB_REPO}/releases`;
18
+ const RELEASES_PAGE_URL = `https://github.com/${GITHUB_REPO}/releases`;
19
+ const RELEASES_DOWNLOAD_URL = `${RELEASES_PAGE_URL}/download`;
20
+ /**
21
+ * The repo publishes one GitHub release per npm package, so `v*` server
22
+ * releases are sparse in the listing. Five pages of 100 cover weeks of
23
+ * releases while staying well under the 60/hour unauthenticated rate limit.
24
+ */
25
+ const PER_PAGE = 100;
26
+ const MAX_PAGES = 5;
27
+ /** A download that failed with an HTTP status (as opposed to a network error). */
28
+ export class HttpStatusError extends Error {
29
+ status;
30
+ constructor(status, statusText) {
31
+ super(`Download failed: ${status} ${statusText}`);
32
+ this.status = status;
33
+ this.name = 'HttpStatusError';
34
+ }
35
+ }
36
+ function parseSemver(version) {
37
+ const match = /^(\d+)\.(\d+)\.(\d+)$/.exec(version);
38
+ return match ? [Number(match[1]), Number(match[2]), Number(match[3])] : null;
39
+ }
40
+ function compareSemver(a, b) {
41
+ return a[0] - b[0] || a[1] - b[1] || a[2] - b[2];
42
+ }
43
+ /**
44
+ * A release-wide SHA256SUMS need not list every platform: one that covers the
45
+ * others but not this archive would be chosen, downloaded, and then fail the
46
+ * fail-closed verification, aborting the install while an older release could
47
+ * still have worked. So a SHA256SUMS-only candidate counts only once its body
48
+ * is seen to carry a line for this archive.
49
+ */
50
+ async function sumsCoverArchive(candidate, archiveName) {
51
+ if (!candidate.sumsOnly)
52
+ return true;
53
+ try {
54
+ const response = await fetch(candidate.assetUrl.replace(/[^/]+$/, 'SHA256SUMS'), {
55
+ headers: { 'User-Agent': 'ifc-lite-server-bin' },
56
+ redirect: 'follow',
57
+ });
58
+ return response.ok && parseExpectedSha256(await response.text(), archiveName) !== null;
59
+ }
60
+ catch {
61
+ // Unreadable now means unverifiable at install time too: try an older one.
62
+ return false;
63
+ }
64
+ }
65
+ function usableAsset(release, archiveName) {
66
+ if (release.draft === true || release.prerelease === true)
67
+ return null;
68
+ if (typeof release.tag_name !== 'string' || !release.tag_name.startsWith('v'))
69
+ return null;
70
+ const version = release.tag_name.slice(1);
71
+ if (!parseSemver(version) || !Array.isArray(release.assets))
72
+ return null;
73
+ const assets = release.assets.filter((a) => typeof a.name === 'string' && (a.state === undefined || a.state === 'uploaded'));
74
+ const archive = assets.find((a) => a.name === archiveName);
75
+ const hasSidecar = assets.some((a) => a.name === `${archiveName}.sha256`);
76
+ const hasSums = assets.some((a) => a.name === 'SHA256SUMS');
77
+ if (!archive || !(hasSidecar || hasSums) || typeof archive.browser_download_url !== 'string')
78
+ return null;
79
+ // The checksum is fetched relative to this URL, so it must be the release's
80
+ // own asset on github.com, not whatever the API response names.
81
+ if (!archive.browser_download_url.startsWith(`${RELEASES_DOWNLOAD_URL}/${release.tag_name}/`))
82
+ return null;
83
+ return { version, assetUrl: archive.browser_download_url, sumsOnly: !hasSidecar };
84
+ }
85
+ /**
86
+ * Find the newest release OLDER than `requestedVersion` that carries
87
+ * `archiveName` plus its checksum. Never throws: API, rate-limit and network
88
+ * failures come back as `{ found: null, reason }` so the caller can put them
89
+ * in its error message.
90
+ */
91
+ export async function findFallbackRelease(archiveName, requestedVersion) {
92
+ const requested = parseSemver(requestedVersion);
93
+ // Without a plain X.Y.Z (e.g. a prerelease) "older" is undefined, and a
94
+ // fallback could pick a newer or unrelated release. Refuse instead.
95
+ if (!requested) {
96
+ return { found: null, reason: `v${requestedVersion} is not a plain X.Y.Z version, so no older release can be chosen` };
97
+ }
98
+ for (let page = 1; page <= MAX_PAGES; page++) {
99
+ const url = `${RELEASES_API_URL}?per_page=${PER_PAGE}&page=${page}`;
100
+ let releases;
101
+ try {
102
+ const response = await fetch(url, { headers: apiHeaders() });
103
+ if (!response.ok) {
104
+ const rateLimited = (response.status === 403 || response.status === 429) &&
105
+ response.headers?.get('x-ratelimit-remaining') === '0';
106
+ return {
107
+ found: null,
108
+ reason: rateLimited
109
+ ? 'the GitHub API rate limit for unauthenticated requests is exhausted (retry within the hour)'
110
+ : `the GitHub releases API answered ${response.status} ${response.statusText}`,
111
+ };
112
+ }
113
+ releases = await response.json();
114
+ }
115
+ catch (error) {
116
+ return {
117
+ found: null,
118
+ reason: `the GitHub releases API could not be reached: ${error instanceof Error ? error.message : String(error)}`,
119
+ };
120
+ }
121
+ if (!Array.isArray(releases)) {
122
+ return { found: null, reason: 'the GitHub releases API returned an unexpected response' };
123
+ }
124
+ const candidates = [];
125
+ for (const release of releases) {
126
+ const candidate = usableAsset(release, archiveName);
127
+ if (!candidate)
128
+ continue;
129
+ const semver = parseSemver(candidate.version);
130
+ if (!semver)
131
+ continue;
132
+ // Only ever fall BACK: a release newer than the requested version is
133
+ // not what this package version was built against.
134
+ if (compareSemver(semver, requested) >= 0)
135
+ continue;
136
+ candidates.push({ candidate, semver });
137
+ }
138
+ // Releases are listed newest first, so this page's candidates are newer
139
+ // than any later page's; the newest one whose checksum covers the archive
140
+ // wins.
141
+ candidates.sort((a, b) => compareSemver(b.semver, a.semver));
142
+ for (const { candidate } of candidates) {
143
+ if (await sumsCoverArchive(candidate, archiveName)) {
144
+ return { found: { version: candidate.version, assetUrl: candidate.assetUrl } };
145
+ }
146
+ }
147
+ // A short page is the end of the list.
148
+ if (releases.length < PER_PAGE)
149
+ break;
150
+ }
151
+ return {
152
+ found: null,
153
+ reason: `no release older than v${requestedVersion} in the ${MAX_PAGES * PER_PAGE} most recent carries ${archiveName} with a checksum`,
154
+ };
155
+ }
156
+ /**
157
+ * Headers for the releases API. A `GITHUB_TOKEN` / `GH_TOKEN` in the
158
+ * environment (CI, shared NAT: where the 60/hour unauthenticated limit runs
159
+ * out first) is sent so the lookup gets the authenticated limit.
160
+ */
161
+ function apiHeaders() {
162
+ const headers = {
163
+ 'User-Agent': 'ifc-lite-server-bin',
164
+ Accept: 'application/vnd.github+json',
165
+ };
166
+ const token = process.env.GITHUB_TOKEN || process.env.GH_TOKEN;
167
+ if (token)
168
+ headers.Authorization = `Bearer ${token}`;
169
+ return headers;
170
+ }
171
+ /**
172
+ * The version sidecar (`.cache/version.txt`). Its first line is the package
173
+ * version the cache is keyed on; a fallback install adds a second line naming
174
+ * the release that actually supplied the binary, so every later run can say so
175
+ * instead of the substitution being visible only in a (usually hidden)
176
+ * postinstall log.
177
+ */
178
+ export function versionSidecar(version, fallbackVersion) {
179
+ return fallbackVersion ? `${version}\nfallback ${fallbackVersion}\n` : version;
180
+ }
181
+ export function parseVersionSidecar(text) {
182
+ const [first = '', second = ''] = text.trim().split(/\r?\n/);
183
+ const fallback = /^fallback (\S+)$/.exec(second.trim());
184
+ return { version: first.trim(), fallback: fallback ? fallback[1] : null };
185
+ }
186
+ /** The warning printed on every run that reuses a fallback binary. */
187
+ export function fallbackInUseWarning(version, fallbackVersion) {
188
+ return (`Warning: @ifc-lite/server-bin@${version} is running the server binary from release v${fallbackVersion}, ` +
189
+ `because release v${version} had no binary for this platform when it was installed.\n` +
190
+ `Warning: run "npx @ifc-lite/server-bin download" to retry v${version}, or pin: npm i @ifc-lite/server-bin@${fallbackVersion}`);
191
+ }
192
+ /**
193
+ * The error text for "no binary for this version and no usable fallback".
194
+ * It names the concrete fix (pin a version whose release has binaries)
195
+ * rather than an alternative install route.
196
+ */
197
+ export function noBinaryMessage(details) {
198
+ return (`Failed to download the IFC-Lite server binary for @ifc-lite/server-bin@${details.version}.\n` +
199
+ `URL: ${details.downloadUrl}\n` +
200
+ `Error: ${details.errorText}\n` +
201
+ `No fallback release was used: ${details.reason}.\n\n` +
202
+ `Fix: install a server-bin version whose GitHub release carries binaries.\n` +
203
+ ` 1. Pick the newest "vX.Y.Z" release listing ${details.archiveName}: ${RELEASES_PAGE_URL}\n` +
204
+ ` 2. npm i @ifc-lite/server-bin@X.Y.Z (or: npx @ifc-lite/server-bin@X.Y.Z)\n` +
205
+ `Or build from source: cargo build --release -p ifc-lite-server`);
206
+ }
207
+ //# sourceMappingURL=release-fallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release-fallback.js","sourceRoot":"","sources":["../src/release-fallback.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ifc-lite/server-bin",
3
- "version": "1.21.0",
3
+ "version": "1.22.1",
4
4
  "description": "Pre-built IFC-Lite server binary - run without Docker or Rust",
5
5
  "type": "module",
6
6
  "bin": {