From caea35d8f8c99f687ca7fc9cb2e1656b635ec425 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 16 Nov 2025 10:14:09 +0000 Subject: [PATCH 1/8] Update better-sqlite3 to v12.4.1 for Node.js 24 support - Upgrade better-sqlite3 from ^8.1.0 to ^12.4.1 - Enables Node.js 24 compatibility - better-sqlite3 v12.x supports Node.js 20, 22, 23, and 24 - No breaking API changes affecting soul-cli functionality Fixes compatibility issues when running on Node.js 24. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e961cb2..c1d66ed 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "homepage": "https://github.com/thevahidal/soul#readme", "dependencies": { "bcrypt": "^5.1.1", - "better-sqlite3": "^8.1.0", + "better-sqlite3": "^12.4.1", "body-parser": "^1.20.2", "check-password-strength": "^2.0.7", "cookie-parser": "^1.4.6", From 75e3a5cea19fbbf7aa0f16931af1057ea4168992 Mon Sep 17 00:00:00 2001 From: Ian Mayo Date: Sun, 16 Nov 2025 10:30:10 +0000 Subject: [PATCH 2/8] Use most recent release of better-sqlite3 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c1d66ed..3a1bf6f 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "homepage": "https://github.com/thevahidal/soul#readme", "dependencies": { "bcrypt": "^5.1.1", - "better-sqlite3": "^12.4.1", + "better-sqlite3": "^12.4.4", "body-parser": "^1.20.2", "check-password-strength": "^2.0.7", "cookie-parser": "^1.4.6", From 5342dd49f08e9cc09ecb7af318442138ec4d4465 Mon Sep 17 00:00:00 2001 From: Ian Mayo Date: Sun, 16 Nov 2025 10:30:10 +0000 Subject: [PATCH 3/8] Use most recent release of better-sqlite3 --- package-lock.json | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index fc2441c..ed34d3d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "MIT", "dependencies": { "bcrypt": "^5.1.1", - "better-sqlite3": "^8.1.0", + "better-sqlite3": "^12.4.1", "body-parser": "^1.20.2", "check-password-strength": "^2.0.7", "cookie-parser": "^1.4.6", @@ -2163,13 +2163,17 @@ } }, "node_modules/better-sqlite3": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-8.1.0.tgz", - "integrity": "sha512-p1m09H+Oi8R9TPj810pdNswMFuVgRNgCJEWypp6jlkOgSwMIrNyuj3hW78xEuBRGok5RzeaUW8aBtTWF3l/TQA==", + "version": "12.4.1", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.4.1.tgz", + "integrity": "sha512-3yVdyZhklTiNrtg+4WqHpJpFDd+WHTg2oM7UcR80GqL05AOV0xEJzc6qNvFYoEtE+hRp1n9MpN6/+4yhlGkDXQ==", "hasInstallScript": true, + "license": "MIT", "dependencies": { "bindings": "^1.5.0", - "prebuild-install": "^7.1.0" + "prebuild-install": "^7.1.1" + }, + "engines": { + "node": "20.x || 22.x || 23.x || 24.x" } }, "node_modules/binary-extensions": { From 9e73dabbf820d07204430d1db4f64069d82d0341 Mon Sep 17 00:00:00 2001 From: Ian Mayo Date: Sun, 30 Nov 2025 15:13:46 +0000 Subject: [PATCH 4/8] Enable auth mode in test configuration Add AUTH, TOKEN_SECRET, and initial user credentials to test script so auth-related tests can run properly. Add --forceExit for clean exit. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3a1bf6f..b86db4f 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "dev": "npm run swagger-autogen && cross-env NO_CLI=true nodemon src/server.js", "cli": "nodemon src/server.js --database foobar.db", "swagger-autogen": "cross-env NO_CLI=true node src/swagger/index.js", - "test": "cross-env CI=true NODE_ENV=test NO_CLI=true DB=test.db CORE_PORT=8001 jest --testTimeout=10000", + "test": "cross-env CI=true NODE_ENV=test NO_CLI=true DB=test.db CORE_PORT=8001 AUTH=true TOKEN_SECRET=test-secret INITIAL_USER_USERNAME=admin INITIAL_USER_PASSWORD=Admin123#Test jest --testTimeout=10000 --forceExit", "prepare": "husky install", "lint": "eslint . --fix --max-warnings=0", "format": "prettier . --write" From 5f2686d2336c1952a9833989bb7fbc3943025f7f Mon Sep 17 00:00:00 2001 From: Ian Mayo Date: Sun, 30 Nov 2025 15:14:25 +0000 Subject: [PATCH 5/8] Add unref() to token cleanup interval Prevents the setInterval from blocking process exit during tests. --- src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index 5a1776b..d9d5615 100755 --- a/src/index.js +++ b/src/index.js @@ -100,7 +100,7 @@ if (config.auth) { setInterval( removeRevokedRefreshTokens, authConstants.REVOKED_REFRESH_TOKENS_REMOVAL_TIME_RANGE, -); +).unref(); // If the user has passed custom CLI commands run the command and exit to avoid running the server runCLICommands(); From 8e2e4125d80b9f192433e71c6463200a089a9511 Mon Sep 17 00:00:00 2001 From: Ian Mayo Date: Sun, 30 Nov 2025 15:24:41 +0000 Subject: [PATCH 6/8] Bump version to 0.8.3 --- package.json | 2 +- src/swagger/swagger.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index b86db4f..0beac6c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "soul-cli", - "version": "0.8.2", + "version": "0.8.3", "description": "A SQLite REST and Realtime server", "main": "src/server.js", "bin": { diff --git a/src/swagger/swagger.json b/src/swagger/swagger.json index c55db4b..78548e2 100644 --- a/src/swagger/swagger.json +++ b/src/swagger/swagger.json @@ -1,7 +1,7 @@ { "swagger": "2.0", "info": { - "version": "0.8.1", + "version": "0.8.3", "title": "Soul API", "description": "API Documentation for Soul, a SQLite REST and realtime server. " }, From 426ed496707ccebcc7c9827945f2a0e6d93ae8c5 Mon Sep 17 00:00:00 2001 From: Ian Mayo Date: Sun, 30 Nov 2025 17:46:56 +0000 Subject: [PATCH 7/8] Fix test isolation issue with default role creation Handle SQLITE_CONSTRAINT_UNIQUE error when default role already exists, which can occur when Jest workers share the test database but have separate module caches. --- src/controllers/auth/tables.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/controllers/auth/tables.js b/src/controllers/auth/tables.js index 550cd46..960e345 100644 --- a/src/controllers/auth/tables.js +++ b/src/controllers/auth/tables.js @@ -49,13 +49,20 @@ const createDefaultTables = async () => { // create _roles table if (!roleTable) { tableService.createTable(ROLES_TABLE, schema.roleSchema); + } - // create a default role in the _roles table + // create a default role in the _roles table if it doesn't exist + try { const role = rowService.save({ tableName: ROLES_TABLE, fields: { name: constantRoles.DEFAULT_ROLE }, }); roleId = role.lastInsertRowid; + } catch (e) { + if (e.code !== 'SQLITE_CONSTRAINT_UNIQUE') { + throw e; + } + // role already exists, ignore } // create _roles_permissions table From beb95e785b28e2037d8dba187551ae0aedbff58c Mon Sep 17 00:00:00 2001 From: Ian Mayo Date: Sun, 30 Nov 2025 17:47:37 +0000 Subject: [PATCH 8/8] Bump version to 0.8.4 --- package.json | 2 +- src/swagger/swagger.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 0beac6c..3deeb81 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "soul-cli", - "version": "0.8.3", + "version": "0.8.4", "description": "A SQLite REST and Realtime server", "main": "src/server.js", "bin": { diff --git a/src/swagger/swagger.json b/src/swagger/swagger.json index 78548e2..3083aee 100644 --- a/src/swagger/swagger.json +++ b/src/swagger/swagger.json @@ -1,7 +1,7 @@ { "swagger": "2.0", "info": { - "version": "0.8.3", + "version": "0.8.4", "title": "Soul API", "description": "API Documentation for Soul, a SQLite REST and realtime server. " },