diff --git a/.changeset/two-plums-smash.md b/.changeset/two-plums-smash.md new file mode 100644 index 00000000..c769090d --- /dev/null +++ b/.changeset/two-plums-smash.md @@ -0,0 +1,7 @@ +--- +"@tus/file-store": minor +"@tus/server": minor +"@tus/utils": minor +--- + +Require @redis/client ^5.0.0 for the RedisKvStore diff --git a/package-lock.json b/package-lock.json index d462b099..1b694e63 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1941,17 +1941,24 @@ } }, "node_modules/@redis/client": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@redis/client/-/client-1.6.0.tgz", - "integrity": "sha512-aR0uffYI700OEEH4gYnitAnv3vzVGXCFvYfdpu/CJKvk4pHfLPEy/JSZyrpQ+15WhXe1yJRXLtfQ84s4mEXnPg==", + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@redis/client/-/client-5.11.0.tgz", + "integrity": "sha512-GHoprlNQD51Xq2Ztd94HHV94MdFZQ3CVrpA04Fz8MVoHM0B7SlbmPEVIjwTbcv58z8QyjnrOuikS0rWF03k5dQ==", + "license": "MIT", "optional": true, "dependencies": { - "cluster-key-slot": "1.1.2", - "generic-pool": "3.9.0", - "yallist": "4.0.0" + "cluster-key-slot": "1.1.2" }, "engines": { - "node": ">=14" + "node": ">= 18" + }, + "peerDependencies": { + "@node-rs/xxhash": "^1.1.0" + }, + "peerDependenciesMeta": { + "@node-rs/xxhash": { + "optional": true + } } }, "node_modules/@shopify/semaphore": { @@ -3875,14 +3882,6 @@ "node": ">=14" } }, - "node_modules/generic-pool": { - "version": "3.9.0", - "license": "MIT", - "optional": true, - "engines": { - "node": ">= 4" - } - }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -6026,7 +6025,7 @@ }, "node_modules/yallist": { "version": "4.0.0", - "devOptional": true, + "dev": true, "license": "ISC" }, "node_modules/yargs": { @@ -6169,7 +6168,7 @@ "node": ">=20.19.0" }, "optionalDependencies": { - "@redis/client": "^1.6.0" + "@redis/client": "^5.0.0" } }, "packages/gcs-store": { @@ -6248,7 +6247,7 @@ "node": ">=20.19.0" }, "optionalDependencies": { - "@redis/client": "^1.6.0", + "@redis/client": "^5.0.0", "ioredis": "^5.4.1" } }, diff --git a/packages/file-store/package.json b/packages/file-store/package.json index 454ccec1..4345de61 100644 --- a/packages/file-store/package.json +++ b/packages/file-store/package.json @@ -32,7 +32,7 @@ "should": "^13.2.3" }, "optionalDependencies": { - "@redis/client": "^1.6.0" + "@redis/client": "^5.0.0" }, "engines": { "node": ">=20.19.0" diff --git a/packages/server/package.json b/packages/server/package.json index ecb05f47..5dc85858 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -42,7 +42,7 @@ "supertest": "^7.2.2" }, "optionalDependencies": { - "@redis/client": "^1.6.0", + "@redis/client": "^5.0.0", "ioredis": "^5.4.1" }, "engines": { diff --git a/packages/utils/src/kvstores/RedisKvStore.ts b/packages/utils/src/kvstores/RedisKvStore.ts index 8de54509..9028b3f0 100644 --- a/packages/utils/src/kvstores/RedisKvStore.ts +++ b/packages/utils/src/kvstores/RedisKvStore.ts @@ -30,12 +30,9 @@ export class RedisKvStore implements KvStore { async list(): Promise> { const keys = new Set() - let cursor = 0 - do { - const result = await this.redis.scan(cursor, {MATCH: `${this.prefix}*`, COUNT: 20}) - cursor = result.cursor - for (const key of result.keys) keys.add(key) - } while (cursor !== 0) + for await (const batch of this.redis.scanIterator({MATCH: `${this.prefix}*`, COUNT: 20})) { + for (const key of batch) keys.add(key) + } return Array.from(keys) }