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": { diff --git a/package.json b/package.json index e961cb2..3deeb81 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "soul-cli", - "version": "0.8.2", + "version": "0.8.4", "description": "A SQLite REST and Realtime server", "main": "src/server.js", "bin": { @@ -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" @@ -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.4", "body-parser": "^1.20.2", "check-password-strength": "^2.0.7", "cookie-parser": "^1.4.6", 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 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(); diff --git a/src/swagger/swagger.json b/src/swagger/swagger.json index c55db4b..3083aee 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.4", "title": "Soul API", "description": "API Documentation for Soul, a SQLite REST and realtime server. " },