From b9e3fc54fd635c1a201c757005b6e55898d444ae Mon Sep 17 00:00:00 2001 From: forehalo Date: Mon, 24 Feb 2025 04:44:44 +0000 Subject: [PATCH] fix(server): include check of prerelease versions (#10386) --- .../server/src/__tests__/version.spec.ts | 23 +++++++++++++++++++ .../server/src/core/version/service.ts | 7 +++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/packages/backend/server/src/__tests__/version.spec.ts b/packages/backend/server/src/__tests__/version.spec.ts index e3dc0cf475..8b54b7289e 100644 --- a/packages/backend/server/src/__tests__/version.spec.ts +++ b/packages/backend/server/src/__tests__/version.spec.ts @@ -146,3 +146,26 @@ test('should tell downgrade if client version is higher than allowed', async t = 'Unsupported client with version [0.23.0], required version is [>=0.20.0 <=0.22.0].' ); }); + +test('should test prerelease version', async t => { + runtime.fetch + .withArgs('client/versionControl.requiredVersion') + .resolves('>=0.19.0'); + + let res = await app + .GET('/guarded/test') + .set('x-affine-version', '0.19.0-canary.1'); + + // 0.19.0-canary.1 is lower than 0.19.0 obviously + t.is(res.status, 403); + + res = await app + .GET('/guarded/test') + .set('x-affine-version', '0.20.0-canary.1'); + + t.is(res.status, 200); + + res = await app.GET('/guarded/test').set('x-affine-version', '0.20.0-beta.2'); + + t.is(res.status, 200); +}); diff --git a/packages/backend/server/src/core/version/service.ts b/packages/backend/server/src/core/version/service.ts index 385b596503..9201fde4f6 100644 --- a/packages/backend/server/src/core/version/service.ts +++ b/packages/backend/server/src/core/version/service.ts @@ -20,7 +20,12 @@ export class VersionService { return true; } - if (!clientVersion || !semver.satisfies(clientVersion, range)) { + if ( + !clientVersion || + !semver.satisfies(clientVersion, range, { + includePrerelease: true, + }) + ) { throw new UnsupportedClientVersion({ clientVersion: clientVersion ?? 'unset_or_invalid', requiredVersion,