diff --git a/package-lock.json b/package-lock.json index f9a43eb6..4fab6251 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,16 +1,16 @@ { "name": "@cap-js-community/event-queue", - "version": "1.11.0-beta.5", + "version": "1.11.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@cap-js-community/event-queue", - "version": "1.11.0-beta.5", + "version": "1.11.0", "license": "Apache-2.0", "dependencies": { - "@sap/xssec": "^4.6.0", - "cron-parser": "^5.3.1", + "@sap/xssec": "^4.10.0", + "cron-parser": "^5.4.0", "redis": "^4.7.0", "verror": "^1.10.1", "yaml": "^2.7.1" @@ -18,17 +18,17 @@ "devDependencies": { "@actions/core": "^1.11.1", "@cap-js/cds-test": "^0.4.0", - "@cap-js/hana": "^2.2.0", - "@cap-js/sqlite": "^2.0.1", + "@cap-js/hana": "^2.3.3", + "@cap-js/sqlite": "^2.0.3", "@opentelemetry/api": "^1.9.0", - "@sap/cds": "^9.3.1", - "@sap/cds-dk": "^9.3.1", + "@sap/cds": "^9.4.1", + "@sap/cds-dk": "^9.4.1", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-jest": "^28.6.0", "eslint-plugin-node": "^11.1.0", "express": "^4.21.2", - "hdb": "^2.25.1", + "hdb": "^2.26.1", "jest": "^29.7.0", "prettier": "^2.8.8", "sqlite3": "^5.1.7" @@ -616,9 +616,9 @@ } }, "node_modules/@cap-js/db-service": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@cap-js/db-service/-/db-service-2.4.0.tgz", - "integrity": "sha512-tWZUkgAPgZQIVu3xownD9cA9joXPI84KDstx3ZezOxXJuRsapgM2QEs0TXwQK5XLG43FUAsGO7wVJPoZ29ZH2Q==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@cap-js/db-service/-/db-service-2.5.1.tgz", + "integrity": "sha512-dpz9lvOepcXOgE8uTs9abCotLcCt1odpwlrUT4AW2pnSrMB0EVMRbHKVIlufmrm8Kh/Y5c2d6ODald8eahsEDw==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -629,13 +629,13 @@ } }, "node_modules/@cap-js/hana": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@cap-js/hana/-/hana-2.2.0.tgz", - "integrity": "sha512-UKAnj/KMyZZpYlbqna02E2KXJfz8pKsKLmhjDbExsGk/1Fh34VojxzD0wAYqV/CrTkx4Su25Ru3VarEurMP3kg==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/@cap-js/hana/-/hana-2.3.3.tgz", + "integrity": "sha512-hGcN8xZYWt6opB8wl7mjsANR1v70/zuBK2XWxbAJj3mhuQAm0svT2PdSfru76X9NOq/nWIHCSFFHl+DDKAbZnw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@cap-js/db-service": "^2.1.1", + "@cap-js/db-service": "^2.5.1", "hdb": "^0.19.5" }, "peerDependencies": { @@ -662,9 +662,9 @@ } }, "node_modules/@cap-js/sqlite": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@cap-js/sqlite/-/sqlite-2.0.2.tgz", - "integrity": "sha512-oNg2f56sfELshyp0eSmYYwG1lt4Zmc135sLIzS8iykHdRVxxJpTrPj0jx0Y4Hc6sfC9u25LRXVu/ZKqjm9Yu+Q==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@cap-js/sqlite/-/sqlite-2.0.3.tgz", + "integrity": "sha512-Zm2JLpPuddFkeqM47TX7V7IC6x3WOfn5lTRbaiVOMvRQoshCNXTkjv083ssfiwF/jF/46/PSVox+fTElozg6XA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1395,13 +1395,13 @@ } }, "node_modules/@sap/cds": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/@sap/cds/-/cds-9.3.1.tgz", - "integrity": "sha512-xA9EN29X8HKaz83Aod1e3Bs6LRvqcCVoaTvCtyOup5rMYDQumcoZ7UOKH6NIUTeO0zOtafUiMHucMG+dBnq5XQ==", + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/@sap/cds/-/cds-9.4.3.tgz", + "integrity": "sha512-X0EuuGjM9I8DAl3j2E7gYpDae804/votP3y0lbEsk8RbyE6dWFX3k8Bx0q5UyE2Lmw2ID/44TA+iCTQBhFjfFg==", "dev": true, "license": "SEE LICENSE IN LICENSE", "dependencies": { - "@sap/cds-compiler": "^6.1", + "@sap/cds-compiler": "^6.3", "@sap/cds-fiori": "^2", "js-yaml": "^4.1.0" }, @@ -1427,9 +1427,9 @@ } }, "node_modules/@sap/cds-compiler": { - "version": "6.3.4", - "resolved": "https://registry.npmjs.org/@sap/cds-compiler/-/cds-compiler-6.3.4.tgz", - "integrity": "sha512-3Ip+PgK0yiZXftAC1Pc5euiz4L56t0vX/a4k8xJwTxD0Ccr6G3AvmEFLju5f96D18nr4lH1djC05BeK9yWUpGg==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@sap/cds-compiler/-/cds-compiler-6.4.2.tgz", + "integrity": "sha512-kjhq8GxzCLIfsM4aln9saxkifPC26MYuAqT82QB7RGZDVFM5Pw09Dp6TcKCSp65hut0YgHkvHlVGWMZWWBJNdA==", "dev": true, "license": "SEE LICENSE IN LICENSE", "bin": { @@ -1442,9 +1442,9 @@ } }, "node_modules/@sap/cds-dk": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/@sap/cds-dk/-/cds-dk-9.3.1.tgz", - "integrity": "sha512-Afa7hg+YwPgSq+tGY7CX2ZOo0decIp0qEyLaDdeXViAVPYZGiUjWp9Zyb8PoNElC5UNkRMDRJ4ZGOKjzf+mM+A==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/@sap/cds-dk/-/cds-dk-9.4.1.tgz", + "integrity": "sha512-Mqx23EU99c9XNqBLtkusNl4Q2WEjT2fx2GgUJwtKFl2WbUPNX3YjlmdvJnPKOQQkJ5Bi/5S6BLjTAipKivKIzw==", "dev": true, "hasShrinkwrap": true, "license": "SEE LICENSE IN LICENSE", @@ -1483,8 +1483,8 @@ } }, "node_modules/@sap/cds-dk/node_modules/@cap-js/db-service": { - "version": "2.4.0", - "integrity": "sha512-tWZUkgAPgZQIVu3xownD9cA9joXPI84KDstx3ZezOxXJuRsapgM2QEs0TXwQK5XLG43FUAsGO7wVJPoZ29ZH2Q==", + "version": "2.5.1", + "integrity": "sha512-dpz9lvOepcXOgE8uTs9abCotLcCt1odpwlrUT4AW2pnSrMB0EVMRbHKVIlufmrm8Kh/Y5c2d6ODald8eahsEDw==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -1508,8 +1508,8 @@ } }, "node_modules/@sap/cds-dk/node_modules/@cap-js/sqlite": { - "version": "2.0.2", - "integrity": "sha512-oNg2f56sfELshyp0eSmYYwG1lt4Zmc135sLIzS8iykHdRVxxJpTrPj0jx0Y4Hc6sfC9u25LRXVu/ZKqjm9Yu+Q==", + "version": "2.0.3", + "integrity": "sha512-Zm2JLpPuddFkeqM47TX7V7IC6x3WOfn5lTRbaiVOMvRQoshCNXTkjv083ssfiwF/jF/46/PSVox+fTElozg6XA==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -1522,8 +1522,8 @@ } }, "node_modules/@sap/cds-dk/node_modules/@eslint/js": { - "version": "9.35.0", - "integrity": "sha512-30iXE9whjlILfWobBkNerJo+TXYsgVM5ERQwMcMKCHckHflCmf7wXDAHlARoWnh0s1U72WqlbeyE7iAcCzuCPw==", + "version": "9.37.0", + "integrity": "sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg==", "extraneous": true, "license": "MIT", "engines": { @@ -1534,8 +1534,8 @@ } }, "node_modules/@sap/cds-dk/node_modules/@sap/cds": { - "version": "9.3.1", - "integrity": "sha512-xA9EN29X8HKaz83Aod1e3Bs6LRvqcCVoaTvCtyOup5rMYDQumcoZ7UOKH6NIUTeO0zOtafUiMHucMG+dBnq5XQ==", + "version": "9.4.2", + "integrity": "sha512-+MtNRviAgyZnPkSkT9sZ52rKRrNcTSpjIL88HfPtS5VzWX17Niu9PRANba/dd8aF4lxSQEEqb85zqJkga6MwKA==", "dev": true, "license": "SEE LICENSE IN LICENSE", "dependencies": { @@ -1565,8 +1565,8 @@ } }, "node_modules/@sap/cds-dk/node_modules/@sap/cds-compiler": { - "version": "6.3.0", - "integrity": "sha512-4HhZuiKa8SztqtjfM9Iey7yb2U6xQGzUbjib3JXcSSP6AJ6Bz0gViliTwf8dASPTLRtv7HU82277m4uqxU2qjw==", + "version": "6.4.2", + "integrity": "sha512-kjhq8GxzCLIfsM4aln9saxkifPC26MYuAqT82QB7RGZDVFM5Pw09Dp6TcKCSp65hut0YgHkvHlVGWMZWWBJNdA==", "dev": true, "license": "SEE LICENSE IN LICENSE", "bin": { @@ -1579,13 +1579,13 @@ } }, "node_modules/@sap/cds-dk/node_modules/@sap/cds-fiori": { - "version": "2.0.1", - "integrity": "sha512-KZVLWXndydgqdlao8OL1gtgd/XMgBdiKBmmgwGpBL1y4S21FOXglnWh6d3bnSZL/qwR3z50D+0PoGghjhayF0Q==", + "version": "2.1.0", + "integrity": "sha512-EoNtPT5aVurxwsqHQfW2FgnXA3Ysu9GvihR0jTQNUZ4pVlHHFkfFehH6G2DIHKyfTROWaahegJsMpiwpE8clkg==", "dev": true, "license": "SEE LICENSE IN LICENSE", "peerDependencies": { "@sap/cds": ">=8", - "express": ">=4" + "express": "^4" } }, "node_modules/@sap/cds-dk/node_modules/@sap/cds-mtxs": { @@ -1629,8 +1629,8 @@ } }, "node_modules/@sap/cds-dk/node_modules/@sap/hdi-deploy": { - "version": "5.5.0", - "integrity": "sha512-nxamWIBz+D/4wcvgYgxGSJLsyJ1KNtU9X6gfMHiyi/IjozGN/3WdeT11++jy5qeZNkdinuND55RRlRcnsu3W5g==", + "version": "5.5.1", + "integrity": "sha512-5r9SIkXX7cO+MwRFF32O566sMx6LP1mLin0eT9F+Adqy+0SrdwkWv4JslQzYetiWLuNsfqQljcao62alaxts8A==", "dev": true, "license": "See LICENSE file", "dependencies": { @@ -1718,8 +1718,8 @@ "license": "MIT" }, "node_modules/@sap/cds-dk/node_modules/axios": { - "version": "1.11.0", - "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", + "version": "1.12.2", + "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", "dev": true, "license": "MIT", "dependencies": { @@ -1750,8 +1750,8 @@ "optional": true }, "node_modules/@sap/cds-dk/node_modules/better-sqlite3": { - "version": "12.2.0", - "integrity": "sha512-eGbYq2CT+tos1fBwLQ/tkBt9J5M3JEHjku4hbvQUePCckkvVf14xWj+1m7dGoK81M/fOjFT7yM9UMeKT/+vFLQ==", + "version": "12.4.1", + "integrity": "sha512-3yVdyZhklTiNrtg+4WqHpJpFDd+WHTg2oM7UcR80GqL05AOV0xEJzc6qNvFYoEtE+hRp1n9MpN6/+4yhlGkDXQ==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -2042,8 +2042,8 @@ } }, "node_modules/@sap/cds-dk/node_modules/detect-libc": { - "version": "2.0.4", - "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "version": "2.1.2", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "dev": true, "license": "Apache-2.0", "optional": true, @@ -2761,8 +2761,8 @@ "license": "MIT" }, "node_modules/@sap/cds-dk/node_modules/node-abi": { - "version": "3.77.0", - "integrity": "sha512-DSmt0OEcLoK4i3NuscSbGjOf3bqiDEutejqENSplMSFA/gmB8mkED9G4pKWnPl7MDU4rSHebKPHeitpDfyH0cQ==", + "version": "3.78.0", + "integrity": "sha512-E2wEyrgX/CqvicaQYU3Ze1PFGjc4QYPGsjUrlYkqAE0WjHEZwgOsGMPMzkMse4LjJbDmaEuDX3CM036j5K2DSQ==", "dev": true, "license": "MIT", "optional": true, @@ -3012,8 +3012,8 @@ "license": "ISC" }, "node_modules/@sap/cds-dk/node_modules/semver": { - "version": "7.7.2", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "optional": true, @@ -3251,8 +3251,8 @@ } }, "node_modules/@sap/cds-dk/node_modules/tar-fs": { - "version": "2.1.3", - "integrity": "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==", + "version": "2.1.4", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", "dev": true, "license": "MIT", "optional": true, @@ -3447,23 +3447,23 @@ } }, "node_modules/@sap/cds-fiori": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@sap/cds-fiori/-/cds-fiori-2.0.1.tgz", - "integrity": "sha512-KZVLWXndydgqdlao8OL1gtgd/XMgBdiKBmmgwGpBL1y4S21FOXglnWh6d3bnSZL/qwR3z50D+0PoGghjhayF0Q==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@sap/cds-fiori/-/cds-fiori-2.1.0.tgz", + "integrity": "sha512-EoNtPT5aVurxwsqHQfW2FgnXA3Ysu9GvihR0jTQNUZ4pVlHHFkfFehH6G2DIHKyfTROWaahegJsMpiwpE8clkg==", "dev": true, "license": "SEE LICENSE IN LICENSE", "peerDependencies": { "@sap/cds": ">=8", - "express": ">=4" + "express": "^4" } }, "node_modules/@sap/xssec": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@sap/xssec/-/xssec-4.9.1.tgz", - "integrity": "sha512-DENmjd04ndQbNC8vP8PU1Ee4pRtaSDnDgHpcesEAokjsQVFG4rFtVuzObQHDrNT89gyBhyHtVEkV6+g1XFDNbw==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@sap/xssec/-/xssec-4.10.0.tgz", + "integrity": "sha512-6SxDorJpQRNjI0sCTwHoFkyECI5IrxnRZ3adoTY0XeGM8QcMoYmLnJIPXoa6AYSzMB89rjJ02j1PQVWACYt/Hg==", "license": "SAP DEVELOPER LICENSE AGREEMENT", "dependencies": { - "debug": "^4.3.4", + "debug": "^4.4.3", "jwt-decode": "^4" }, "engines": { @@ -3601,13 +3601,13 @@ } }, "node_modules/@types/node": { - "version": "24.3.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.3.3.tgz", - "integrity": "sha512-GKBNHjoNw3Kra1Qg5UXttsY5kiWMEfoHq2TmXb+b1rcm6N7B3wTrFYIf/oSZ1xNQ+hVVijgLkiDZh7jRRsh+Gw==", + "version": "24.7.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.7.2.tgz", + "integrity": "sha512-/NbVmcGTP+lj5oa4yiYxxeBjRivKQ5Ns1eSZeB99ExsEQ6rX5XYU1Zy/gGxY/ilqtD4Etx9mKyrPxZRetiahhA==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~7.10.0" + "undici-types": "~7.14.0" } }, "node_modules/@types/stack-utils": { @@ -3635,14 +3635,14 @@ "license": "MIT" }, "node_modules/@typescript-eslint/project-service": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.43.0.tgz", - "integrity": "sha512-htB/+D/BIGoNTQYffZw4uM4NzzuolCoaA/BusuSIcC8YjmBYQioew5VUZAYdAETPjeed0hqCaW7EHg+Robq8uw==", + "version": "8.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.1.tgz", + "integrity": "sha512-FOIaFVMHzRskXr5J4Jp8lFVV0gz5ngv3RHmn+E4HYxSJ3DgDzU7fVI1/M7Ijh1zf6S7HIoaIOtln1H5y8V+9Zg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.43.0", - "@typescript-eslint/types": "^8.43.0", + "@typescript-eslint/tsconfig-utils": "^8.46.1", + "@typescript-eslint/types": "^8.46.1", "debug": "^4.3.4" }, "engines": { @@ -3657,14 +3657,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.43.0.tgz", - "integrity": "sha512-daSWlQ87ZhsjrbMLvpuuMAt3y4ba57AuvadcR7f3nl8eS3BjRc8L9VLxFLk92RL5xdXOg6IQ+qKjjqNEimGuAg==", + "version": "8.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.1.tgz", + "integrity": "sha512-weL9Gg3/5F0pVQKiF8eOXFZp8emqWzZsOJuWRUNtHT+UNV2xSJegmpCNQHy37aEQIbToTq7RHKhWvOsmbM680A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.43.0", - "@typescript-eslint/visitor-keys": "8.43.0" + "@typescript-eslint/types": "8.46.1", + "@typescript-eslint/visitor-keys": "8.46.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3675,9 +3675,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.43.0.tgz", - "integrity": "sha512-ALC2prjZcj2YqqL5X/bwWQmHA2em6/94GcbB/KKu5SX3EBDOsqztmmX1kMkvAJHzxk7TazKzJfFiEIagNV3qEA==", + "version": "8.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.1.tgz", + "integrity": "sha512-X88+J/CwFvlJB+mK09VFqx5FE4H5cXD+H/Bdza2aEWkSb8hnWIQorNcscRl4IEo1Cz9VI/+/r/jnGWkbWPx54g==", "dev": true, "license": "MIT", "engines": { @@ -3692,9 +3692,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.43.0.tgz", - "integrity": "sha512-vQ2FZaxJpydjSZJKiSW/LJsabFFvV7KgLC5DiLhkBcykhQj8iK9BOaDmQt74nnKdLvceM5xmhaTF+pLekrxEkw==", + "version": "8.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.1.tgz", + "integrity": "sha512-C+soprGBHwWBdkDpbaRC4paGBrkIXxVlNohadL5o0kfhsXqOC6GYH2S/Obmig+I0HTDl8wMaRySwrfrXVP8/pQ==", "dev": true, "license": "MIT", "engines": { @@ -3706,16 +3706,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.43.0.tgz", - "integrity": "sha512-7Vv6zlAhPb+cvEpP06WXXy/ZByph9iL6BQRBDj4kmBsW98AqEeQHlj/13X+sZOrKSo9/rNKH4Ul4f6EICREFdw==", + "version": "8.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.1.tgz", + "integrity": "sha512-uIifjT4s8cQKFQ8ZBXXyoUODtRoAd7F7+G8MKmtzj17+1UbdzFl52AzRyZRyKqPHhgzvXunnSckVu36flGy8cg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.43.0", - "@typescript-eslint/tsconfig-utils": "8.43.0", - "@typescript-eslint/types": "8.43.0", - "@typescript-eslint/visitor-keys": "8.43.0", + "@typescript-eslint/project-service": "8.46.1", + "@typescript-eslint/tsconfig-utils": "8.46.1", + "@typescript-eslint/types": "8.46.1", + "@typescript-eslint/visitor-keys": "8.46.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -3761,16 +3761,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.43.0.tgz", - "integrity": "sha512-S1/tEmkUeeswxd0GGcnwuVQPFWo8NzZTOMxCvw8BX7OMxnNae+i8Tm7REQen/SwUIPoPqfKn7EaZ+YLpiB3k9g==", + "version": "8.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.1.tgz", + "integrity": "sha512-vkYUy6LdZS7q1v/Gxb2Zs7zziuXN0wxqsetJdeZdRe/f5dwJFglmuvZBfTUivCtjH725C1jWCDfpadadD95EDQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.43.0", - "@typescript-eslint/types": "8.43.0", - "@typescript-eslint/typescript-estree": "8.43.0" + "@typescript-eslint/scope-manager": "8.46.1", + "@typescript-eslint/types": "8.46.1", + "@typescript-eslint/typescript-estree": "8.46.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3785,13 +3785,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.43.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.43.0.tgz", - "integrity": "sha512-T+S1KqRD4sg/bHfLwrpF/K3gQLBM1n7Rp7OjjikjTEssI2YJzQpi5WXoynOaQ93ERIuq3O8RBTOUYDKszUCEHw==", + "version": "8.46.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.1.tgz", + "integrity": "sha512-ptkmIf2iDkNUjdeu2bQqhFPV1m6qTnFFjg7PPDjxKWaMaP0Z6I9l30Jr3g5QqbZGdw8YdYvLp+XnqnWWZOg/NA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.43.0", + "@typescript-eslint/types": "8.46.1", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -4061,9 +4061,9 @@ "license": "MIT" }, "node_modules/axios": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.1.tgz", - "integrity": "sha512-Kn4kbSXpkFHCGE6rBFNwIv0GQs4AvDT80jlveJDKFxjbTYMUeB4QtsdPCv6H8Cm19Je7IU6VFtRl2zWZI0rudQ==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", + "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", "dev": true, "license": "MIT", "dependencies": { @@ -4227,9 +4227,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.2.tgz", - "integrity": "sha512-NvcIedLxrs9llVpX7wI+Jz4Hn9vJQkCPKrTaHIE0sW/Rj1iq6Fzby4NbyTZjQJNoypBXNaG7tEHkTgONZpwgxQ==", + "version": "2.8.16", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.16.tgz", + "integrity": "sha512-OMu3BGQ4E7P1ErFsIPpbJh0qvDudM/UuJeHgkAvfWe+0HFJCXh+t/l8L6fVLR55RI/UbKrVLnAXZSVwd9ysWYw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -4237,9 +4237,9 @@ } }, "node_modules/better-sqlite3": { - "version": "12.2.0", - "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.2.0.tgz", - "integrity": "sha512-eGbYq2CT+tos1fBwLQ/tkBt9J5M3JEHjku4hbvQUePCckkvVf14xWj+1m7dGoK81M/fOjFT7yM9UMeKT/+vFLQ==", + "version": "12.4.1", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.4.1.tgz", + "integrity": "sha512-3yVdyZhklTiNrtg+4WqHpJpFDd+WHTg2oM7UcR80GqL05AOV0xEJzc6qNvFYoEtE+hRp1n9MpN6/+4yhlGkDXQ==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -4340,9 +4340,9 @@ } }, "node_modules/browserslist": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.0.tgz", - "integrity": "sha512-P9go2WrP9FiPwLv3zqRD/Uoxo0RSHjzFCiQz7d4vbmwNqQFo9T9WCeP/Qn5EbcKQY6DBbkxEXNcpJOmncNrb7A==", + "version": "4.26.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.3.tgz", + "integrity": "sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==", "dev": true, "funding": [ { @@ -4360,9 +4360,9 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.8.2", - "caniuse-lite": "^1.0.30001741", - "electron-to-chromium": "^1.5.218", + "baseline-browser-mapping": "^2.8.9", + "caniuse-lite": "^1.0.30001746", + "electron-to-chromium": "^1.5.227", "node-releases": "^2.0.21", "update-browserslist-db": "^1.1.3" }, @@ -4530,9 +4530,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001741", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001741.tgz", - "integrity": "sha512-QGUGitqsc8ARjLdgAfxETDhRbJ0REsP6O3I96TAth/mVjh2cYzN2u+3AzPP3aVSm2FehEItaJw1xd+IGBXWeSw==", + "version": "1.0.30001750", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001750.tgz", + "integrity": "sha512-cuom0g5sdX6rw00qOoLNSFCJ9/mYIsuSOA+yzpDw8eopiFqcVwQvZHqov0vmEighRxX++cfC0Vg1G+1Iy/mSpQ==", "dev": true, "funding": [ { @@ -4713,9 +4713,9 @@ } }, "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", - "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", + "integrity": "sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==", "dev": true, "license": "MIT" }, @@ -4854,9 +4854,9 @@ } }, "node_modules/cron-parser": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-5.3.1.tgz", - "integrity": "sha512-Mu5Jk1b4cUfY8u34+thI9TZxvQiuhaMBS2Ag84rOSoHlU33xtIPkXwr6lWuw3XPmxSxq317B+hl0o4J+LdhwNg==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/cron-parser/-/cron-parser-5.4.0.tgz", + "integrity": "sha512-HxYB8vTvnQFx4dLsZpGRa0uHp6X3qIzS3ZJgJ9v6l/5TJMgeWQbLkR5yiJ5hOxGbc9+jCADDnydIe15ReLZnJA==", "license": "MIT", "dependencies": { "luxon": "^3.7.1" @@ -4881,9 +4881,9 @@ } }, "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -5008,9 +5008,9 @@ } }, "node_modules/detect-libc": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", - "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -5073,9 +5073,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.218", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.218.tgz", - "integrity": "sha512-uwwdN0TUHs8u6iRgN8vKeWZMRll4gBkz+QMqdS7DDe49uiK68/UX92lFb61oiFPrpYZNeZIqa4bA7O6Aiasnzg==", + "version": "1.5.237", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.237.tgz", + "integrity": "sha512-icUt1NvfhGLar5lSWH3tHNzablaA5js3HVHacQimfP8ViEBOQv+L7DKEuHdbTZ0SKCO1ogTJTIL1Gwk9S6Qvcg==", "dev": true, "license": "ISC" }, @@ -5164,9 +5164,9 @@ "optional": true }, "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz", + "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -6234,9 +6234,9 @@ } }, "node_modules/hdb": { - "version": "2.25.1", - "resolved": "https://registry.npmjs.org/hdb/-/hdb-2.25.1.tgz", - "integrity": "sha512-/ojm+fki1r+sqMqQjwTLcF1VeL3tkNxMLS/CVKXuUbz6xDco3wdSR0wTh0FzMPUOHnptCErxV6YNUbvdALSFww==", + "version": "2.26.1", + "resolved": "https://registry.npmjs.org/hdb/-/hdb-2.26.1.tgz", + "integrity": "sha512-m8X1ugfxgbrUIB6o9Mpvm7IrgMBfChBoG1m6JxuJWjdg5g36eXInE4wbCYMRH8UPO2g0Y/Fswu42t3XA6tntLg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -6244,6 +6244,9 @@ }, "engines": { "node": ">= 18" + }, + "optionalDependencies": { + "lz4-wasm-nodejs": "^0.9.2" } }, "node_modules/html-escaper": { @@ -7441,6 +7444,14 @@ "node": ">=12" } }, + "node_modules/lz4-wasm-nodejs": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/lz4-wasm-nodejs/-/lz4-wasm-nodejs-0.9.2.tgz", + "integrity": "sha512-hSwgJPS98q/Oe/89Y1OxzeA/UdnASG8GvldRyKa7aZyoAFCC8VPRtViBSava7wWC66WocjUwBpWau2rEmyFPsw==", + "dev": true, + "license": "MIT", + "optional": true + }, "node_modules/make-dir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", @@ -7838,9 +7849,9 @@ } }, "node_modules/node-abi": { - "version": "3.77.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.77.0.tgz", - "integrity": "sha512-DSmt0OEcLoK4i3NuscSbGjOf3bqiDEutejqENSplMSFA/gmB8mkED9G4pKWnPl7MDU4rSHebKPHeitpDfyH0cQ==", + "version": "3.78.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.78.0.tgz", + "integrity": "sha512-E2wEyrgX/CqvicaQYU3Ze1PFGjc4QYPGsjUrlYkqAE0WjHEZwgOsGMPMzkMse4LjJbDmaEuDX3CM036j5K2DSQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7891,9 +7902,9 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.21", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.21.tgz", - "integrity": "sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==", + "version": "2.0.25", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.25.tgz", + "integrity": "sha512-4auku8B/vw5psvTiiN9j1dAOsXvMoGqJuKJcR+dTdqiXEK20mMTk1UEo3HS16LeGQsVG6+qKTPM9u/qQ2LqATA==", "dev": true, "license": "MIT" }, @@ -8763,9 +8774,9 @@ "license": "MIT" }, "node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", "bin": { @@ -9302,9 +9313,9 @@ } }, "node_modules/tar-fs": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.3.tgz", - "integrity": "sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9507,9 +9518,9 @@ } }, "node_modules/undici-types": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.10.0.tgz", - "integrity": "sha512-t5Fy/nfn+14LuOc2KNYg75vZqClpAiqscVvMygNnlsHBFpSXdJaYtXMcdNLpl/Qvc3P2cB3s6lOV51nqsFq4ag==", + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.14.0.tgz", + "integrity": "sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA==", "dev": true, "license": "MIT" }, diff --git a/package.json b/package.json index 747c7ae0..0df9dd6f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@cap-js-community/event-queue", - "version": "1.11.0-beta.5", + "version": "1.11.0", "description": "An event queue that enables secure transactional processing of asynchronous and periodic events, featuring instant event processing with Redis Pub/Sub and load distribution across all application instances.", "main": "src/index.js", "types": "src/index.d.ts", @@ -47,24 +47,24 @@ "node": ">=18" }, "dependencies": { - "@sap/xssec": "^4.6.0", - "cron-parser": "^5.3.1", + "@sap/xssec": "^4.10.0", + "cron-parser": "^5.4.0", "redis": "^4.7.0", "verror": "^1.10.1", "yaml": "^2.7.1" }, "devDependencies": { "@cap-js/cds-test": "^0.4.0", - "@cap-js/hana": "^2.2.0", - "@cap-js/sqlite": "^2.0.1", - "@sap/cds": "^9.3.1", - "@sap/cds-dk": "^9.3.1", + "@cap-js/hana": "^2.3.3", + "@cap-js/sqlite": "^2.0.3", + "@sap/cds": "^9.4.1", + "@sap/cds-dk": "^9.4.1", "eslint": "^8.57.0", "eslint-config-prettier": "^9.1.0", "eslint-plugin-jest": "^28.6.0", "eslint-plugin-node": "^11.1.0", "express": "^4.21.2", - "hdb": "^2.25.1", + "hdb": "^2.26.1", "jest": "^29.7.0", "prettier": "^2.8.8", "sqlite3": "^5.1.7", diff --git a/src/redis/redisPub.js b/src/redis/redisPub.js index a3144294..0751ad46 100644 --- a/src/redis/redisPub.js +++ b/src/redis/redisPub.js @@ -77,7 +77,7 @@ const broadcastEvent = async (tenantId, events, forceBroadcast = false) => { for (let i = 0; i < TRIES_FOR_PUBLISH_PERIODIC_EVENT; i++) { const result = eventConfig.multiInstanceProcessing ? false - : await distributedLock.checkLockExistsAndReturnValue(context, [type, subType].join("##")); + : await distributedLock.checkLockExists(context, [type, subType].join("##")); if (result) { logger.debug("skip publish redis event as no lock is available", { type, diff --git a/src/runner/runner.js b/src/runner/runner.js index c59839a6..f7cf77e1 100644 --- a/src/runner/runner.js +++ b/src/runner/runner.js @@ -405,7 +405,7 @@ const _acquireRunId = async (context) => { overrideValue: true, }); } else { - runId = await distributedLock.checkLockExistsAndReturnValue(context, EVENT_QUEUE_RUN_ID, { + runId = await distributedLock.getValue(context, EVENT_QUEUE_RUN_ID, { tenantScoped: false, }); } @@ -422,7 +422,7 @@ const _calculateOffsetForFirstRun = async () => { try { await trace(dummyContext, "calculateOffsetForFirstRun", async () => { if (eventQueueConfig.redisEnabled) { - let lastRunTs = await distributedLock.checkLockExistsAndReturnValue(dummyContext, EVENT_QUEUE_RUN_TS, { + let lastRunTs = await distributedLock.getValue(dummyContext, EVENT_QUEUE_RUN_TS, { tenantScoped: false, }); if (!lastRunTs) { @@ -434,7 +434,7 @@ const _calculateOffsetForFirstRun = async () => { if (couldSetValue) { lastRunTs = ts; } else { - lastRunTs = await distributedLock.checkLockExistsAndReturnValue(dummyContext, EVENT_QUEUE_RUN_TS, { + lastRunTs = await distributedLock.getValue(dummyContext, EVENT_QUEUE_RUN_TS, { tenantScoped: false, }); } diff --git a/src/shared/cdsHelper.js b/src/shared/cdsHelper.js index 52797202..f736574d 100644 --- a/src/shared/cdsHelper.js +++ b/src/shared/cdsHelper.js @@ -165,38 +165,7 @@ const getAllTenantIds = async () => { }, []); }; -const TENANT_COLUMNS = ["subscribedSubdomain", "createdAt", "modifiedAt"]; - -const getAllTenantWithMetadata = async () => { - const response = await _getAllTenantBase(); - if (!response) { - return null; - } - - return response.reduce(async (result, row) => { - const tenantId = row.subscribedTenantId ?? row.tenant; - result = await result; - if (await common.isTenantIdValidCb(TenantIdCheckTypes.eventProcessing, tenantId)) { - const data = Object.entries(row).reduce( - (result, [key, value]) => { - if (TENANT_COLUMNS.includes(key)) { - result[key] = value; - } else { - result.metadata[key] = value; - } - return result; - }, - { metadata: {} } - ); - data.metadata = JSON.stringify(data.metadata); - result.push(data); - } - return result; - }, []); -}; - module.exports = { executeInNewTransaction, getAllTenantIds, - getAllTenantWithMetadata, }; diff --git a/src/shared/common.js b/src/shared/common.js index 2fb82789..dc58109b 100644 --- a/src/shared/common.js +++ b/src/shared/common.js @@ -92,7 +92,7 @@ const hashStringTo32Bit = (value) => crypto.createHash("sha256").update(String(v const _getNewAuthContext = async (tenantId) => { try { if (!_getNewAuthContext._xsuaaService) { - _getNewAuthContext._xsuaaService = new xssec.XsuaaService(cds.requires.auth.credentials); + _getNewAuthContext._xsuaaService = new xssec.XsuaaService(cds.requires["xsuaa-eventQueue"]?.credentials); } const authService = _getNewAuthContext._xsuaaService; const token = await authService.fetchClientCredentialsToken({ zid: tenantId }); diff --git a/src/shared/distributedLock.js b/src/shared/distributedLock.js index bea3ad6d..d4acb5c4 100644 --- a/src/shared/distributedLock.js +++ b/src/shared/distributedLock.js @@ -60,12 +60,21 @@ const releaseLock = async (context, key, { tenantScoped = true } = {}) => { } }; -const checkLockExistsAndReturnValue = async (context, key, { tenantScoped = true } = {}) => { +const checkLockExists = async (context, key, { tenantScoped = true } = {}) => { const fullKey = _generateKey(context, tenantScoped, key); if (config.redisEnabled) { - return await _checkLockExistsRedis(context, fullKey); + return !!(await _getLockValueRedis(context, fullKey)); } else { - return await _checkLockExistsDb(context, fullKey); + return !!(await _getLockValueDb(context, fullKey)); + } +}; + +const getValue = async (context, key, { tenantScoped = true } = {}) => { + const fullKey = _generateKey(context, tenantScoped, key); + if (config.redisEnabled) { + return await _getLockValueRedis(context, fullKey); + } else { + return await _getLockValueDb(context, fullKey); } }; @@ -106,12 +115,12 @@ const _renewLockRedis = async (context, fullKey, expiryTime, { value = "true" } return result === REDIS_COMMAND_OK; }; -const _checkLockExistsRedis = async (context, fullKey) => { +const _getLockValueRedis = async (context, fullKey) => { const client = await redis.createMainClientAndConnect(config.redisOptions); - return await client.exists(fullKey); + return await client.get(fullKey); }; -const _checkLockExistsDb = async (context, fullKey) => { +const _getLockValueDb = async (context, fullKey) => { let result; await cdsHelper.executeInNewTransaction(context, "distributedLock-checkExists", async (tx) => { result = await tx.run(SELECT.one.from(config.tableNameEventLock).where("code =", fullKey)); @@ -259,7 +268,8 @@ const shutdownHandler = async () => { module.exports = { acquireLock, releaseLock, - checkLockExistsAndReturnValue, + checkLockExists, + getValue, setValueWithExpire, shutdownHandler, renewLock, diff --git a/srv/service/admin-service.cds b/srv/service/admin-service.cds index de64a0fb..748a0c6b 100644 --- a/srv/service/admin-service.cds +++ b/srv/service/admin-service.cds @@ -42,12 +42,4 @@ service EventQueueAdminService { @mandatory subType: String) returns Boolean; } - - @readonly - @cds.persistence.skip - entity Tenant { - Key ID: String; - subdomain: String; - metadata: String; - } } diff --git a/srv/service/admin-service.js b/srv/service/admin-service.js index 9ca90bf5..15e11919 100644 --- a/srv/service/admin-service.js +++ b/srv/service/admin-service.js @@ -1,7 +1,6 @@ "use strict"; const cds = require("@sap/cds"); -const cdsHelper = require("../../src/shared/cdsHelper"); const { EventProcessingStatus } = require("../../src"); const config = require("../../src/config"); const distributedLock = require("../../src/shared/distributedLock"); @@ -9,7 +8,7 @@ const redisPub = require("../../src/redis/redisPub"); module.exports = class AdminService extends cds.ApplicationService { async init() { - const { Event: EventService, Tenant, Lock: LockService } = this.entities(); + const { Event: EventService, Lock: LockService } = this.entities(); const { Event: EventDb } = cds.db.entities("sap.eventqueue"); const { landscape, space } = this.getLandscapeAndSpace(); @@ -18,9 +17,6 @@ module.exports = class AdminService extends cds.ApplicationService { req.reject(403, "Admin service is disabled by configuration"); } - if (req.target.name === Tenant.name) { - return; - } const headers = Object.assign({}, req.headers, req.req?.headers); const tenant = headers["z-id"] ?? req.data.tenant; @@ -61,11 +57,6 @@ module.exports = class AdminService extends cds.ApplicationService { })); }); - this.on("READ", Tenant, async () => { - const tenants = await cdsHelper.getAllTenantWithMetadata(); - return tenants ?? []; - }); - this.on("setStatusAndAttempts", async (req) => { const tenant = req.headers["z-id"]; cds.log("eventQueue").info("Restarting processing for event queue"); diff --git a/test-integration/runner.test.js b/test-integration/runner.test.js index 4e73fb93..959f97c7 100644 --- a/test-integration/runner.test.js +++ b/test-integration/runner.test.js @@ -495,12 +495,12 @@ describe("runner", () => { }); it("acquireRunId should set ts", async () => { - let runTs = await distributedLock.checkLockExistsAndReturnValue({}, runner.__.EVENT_QUEUE_RUN_TS, { + let runTs = await distributedLock.getValue({}, runner.__.EVENT_QUEUE_RUN_TS, { tenantScoped: false, }); expect(runTs).toBeFalsy(); await runner.__._acquireRunId(); - runTs = await distributedLock.checkLockExistsAndReturnValue({}, runner.__.EVENT_QUEUE_RUN_TS, { + runTs = await distributedLock.getValue({}, runner.__.EVENT_QUEUE_RUN_TS, { tenantScoped: false, }); expect(runTs).toBeDefined(); @@ -512,7 +512,7 @@ describe("runner", () => { jest.useFakeTimers(); const systemTime = Date.now(); jest.setSystemTime(systemTime); - const runTs = await distributedLock.checkLockExistsAndReturnValue({}, runner.__.EVENT_QUEUE_RUN_TS, { + const runTs = await distributedLock.getValue({}, runner.__.EVENT_QUEUE_RUN_TS, { tenantScoped: false, }); const expectedTs = new Date(runTs).getTime() + configInstance.runInterval - systemTime; @@ -528,7 +528,7 @@ describe("runner", () => { jest.useFakeTimers(); const systemTime = Date.now(); jest.setSystemTime(systemTime); - const runTs = await distributedLock.checkLockExistsAndReturnValue({}, runner.__.EVENT_QUEUE_RUN_TS, { + const runTs = await distributedLock.getValue({}, runner.__.EVENT_QUEUE_RUN_TS, { tenantScoped: false, }); const expectedTs = new Date(runTs).getTime() + configInstance.runInterval - systemTime; diff --git a/test/__snapshots__/admin-service.test.js.snap b/test/__snapshots__/admin-service.test.js.snap index 1cb3cfaa..69664ba7 100644 --- a/test/__snapshots__/admin-service.test.js.snap +++ b/test/__snapshots__/admin-service.test.js.snap @@ -28,7 +28,6 @@ exports[`admin-service-test metadata snapshot 1`] = ` - @@ -65,14 +64,6 @@ exports[`admin-service-test metadata snapshot 1`] = ` - - - - - - - - @@ -212,23 +203,6 @@ exports[`admin-service-test metadata snapshot 1`] = ` - - - - - - - - - - - - - - - - - " @@ -249,10 +223,3 @@ exports[`admin-service-test read entities: Lock 1`] = ` "value": [], } `; - -exports[`admin-service-test read entities: Tenant 1`] = ` -{ - "@odata.context": "$metadata#Tenant", - "value": [], -} -`; diff --git a/test/redisPubSub.test.js b/test/redisPubSub.test.js index d4206569..85255348 100644 --- a/test/redisPubSub.test.js +++ b/test/redisPubSub.test.js @@ -7,7 +7,7 @@ const setTimeoutSpy = jest.spyOn(global, "setTimeout").mockImplementation((first }); const distributedLock = require("../src/shared/distributedLock"); -const checkLockExistsSpy = jest.spyOn(distributedLock, "checkLockExistsAndReturnValue"); +const checkLockExistsSpy = jest.spyOn(distributedLock, "checkLockExists"); const config = require("../src/config"); const redisPub = require("../src/redis/redisPub"); const redisSub = require("../src/redis/redisSub");