diff --git a/package-lock.json b/package-lock.json index 06a17d9e..0f3e3523 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "veritable-ui", - "version": "0.14.18", + "version": "0.14.19", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "veritable-ui", - "version": "0.14.18", + "version": "0.14.19", "license": "Apache-2.0", "dependencies": { "@digicatapult/tsoa-oauth-express": "^0.1.69", @@ -40,7 +40,7 @@ "@playwright/test": "^1.48.2", "@swc-node/register": "^1.10.9", "@swc/cli": "^0.5.0", - "@swc/core": "^1.9.2", + "@swc/core": "^1.9.1", "@types/body-parser": "^1.19.5", "@types/chai": "^5.0.1", "@types/chai-jest-snapshot": "^1.3.8", @@ -54,8 +54,8 @@ "@types/supertest": "^6.0.2", "@types/swagger-ui-express": "^4.1.7", "@types/ws": "^8.5.13", - "@typescript-eslint/eslint-plugin": "^8.14.0", - "@typescript-eslint/parser": "^8.14.0", + "@typescript-eslint/eslint-plugin": "^8.13.0", + "@typescript-eslint/parser": "^8.13.0", "chai": "^5.1.2", "chai-jest-snapshot": "^2.0.0", "concurrently": "^9.1.0", @@ -1632,15 +1632,15 @@ } }, "node_modules/@swc/core": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.9.2.tgz", - "integrity": "sha512-dYyEkO6mRYtZFpnOsnYzv9rY69fHAHoawYOjGOEcxk9WYtaJhowMdP/w6NcOKnz2G7GlZaenjkzkMa6ZeQeMsg==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.9.1.tgz", + "integrity": "sha512-OnPc+Kt5oy3xTvr/KCUOqE9ptJcWbyQgAUr1ydh9EmbBcmJTaO1kfQCxm/axzJi6sKeDTxL9rX5zvLOhoYIaQw==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3", - "@swc/types": "^0.1.15" + "@swc/types": "^0.1.14" }, "engines": { "node": ">=10" @@ -1650,16 +1650,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.9.2", - "@swc/core-darwin-x64": "1.9.2", - "@swc/core-linux-arm-gnueabihf": "1.9.2", - "@swc/core-linux-arm64-gnu": "1.9.2", - "@swc/core-linux-arm64-musl": "1.9.2", - "@swc/core-linux-x64-gnu": "1.9.2", - "@swc/core-linux-x64-musl": "1.9.2", - "@swc/core-win32-arm64-msvc": "1.9.2", - "@swc/core-win32-ia32-msvc": "1.9.2", - "@swc/core-win32-x64-msvc": "1.9.2" + "@swc/core-darwin-arm64": "1.9.1", + "@swc/core-darwin-x64": "1.9.1", + "@swc/core-linux-arm-gnueabihf": "1.9.1", + "@swc/core-linux-arm64-gnu": "1.9.1", + "@swc/core-linux-arm64-musl": "1.9.1", + "@swc/core-linux-x64-gnu": "1.9.1", + "@swc/core-linux-x64-musl": "1.9.1", + "@swc/core-win32-arm64-msvc": "1.9.1", + "@swc/core-win32-ia32-msvc": "1.9.1", + "@swc/core-win32-x64-msvc": "1.9.1" }, "peerDependencies": { "@swc/helpers": "*" @@ -1671,9 +1671,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.9.2.tgz", - "integrity": "sha512-nETmsCoY29krTF2PtspEgicb3tqw7Ci5sInTI03EU5zpqYbPjoPH99BVTjj0OsF53jP5MxwnLI5Hm21lUn1d6A==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.9.1.tgz", + "integrity": "sha512-2/ncHSCdAh5OHem1fMITrWEzzl97OdMK1PHc9CkxSJnphLjRubfxB5sbc5tDhcO68a5tVy+DxwaBgDec3PXnOg==", "cpu": [ "arm64" ], @@ -1688,9 +1688,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.9.2.tgz", - "integrity": "sha512-9gD+bwBz8ZByjP6nZTXe/hzd0tySIAjpDHgkFiUrc+5zGF+rdTwhcNrzxNHJmy6mw+PW38jqII4uspFHUqqxuQ==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.9.1.tgz", + "integrity": "sha512-4MDOFC5zmNqRJ9RGFOH95oYf27J9HniLVpB1pYm2gGeNHdl2QvDMtx2QTuMHQ6+OTn/3y1BHYuhBGp7d405oLA==", "cpu": [ "x64" ], @@ -1705,9 +1705,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.9.2.tgz", - "integrity": "sha512-kYq8ief1Qrn+WmsTWAYo4r+Coul4dXN6cLFjiPZ29Cv5pyU+GFvSPAB4bEdMzwy99rCR0u2P10UExaeCjurjvg==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.9.1.tgz", + "integrity": "sha512-eVW/BjRW8/HpLe3+1jRU7w7PdRLBgnEEYTkHJISU8805/EKT03xNZn6CfaBpKfeAloY4043hbGzE/NP9IahdpQ==", "cpu": [ "arm" ], @@ -1722,9 +1722,9 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.9.2.tgz", - "integrity": "sha512-n0W4XiXlmEIVqxt+rD3ZpkogsEWUk1jJ+i5bQNgB+1JuWh0fBE8c/blDgTQXa0GB5lTPVDZQussgdNOCnAZwiA==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.9.1.tgz", + "integrity": "sha512-8m3u1v8R8NgI/9+cHMkzk14w87blSy3OsQPWPfhOL+XPwhyLPvat+ahQJb2nZmltjTgkB4IbzKFSfbuA34LmNA==", "cpu": [ "arm64" ], @@ -1739,9 +1739,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.9.2.tgz", - "integrity": "sha512-8xzrOmsyCC1zrx2Wzx/h8dVsdewO1oMCwBTLc1gSJ/YllZYTb04pNm6NsVbzUX2tKddJVRgSJXV10j/NECLwpA==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.9.1.tgz", + "integrity": "sha512-hpT0sQAZnW8l02I289yeyFfT9llGO9PzKDxUq8pocKtioEHiElRqR53juCWoSmzuWi+6KX7zUJ0NKCBrc8pmDg==", "cpu": [ "arm64" ], @@ -1756,9 +1756,9 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.9.2.tgz", - "integrity": "sha512-kZrNz/PjRQKcchWF6W292jk3K44EoVu1ad5w+zbS4jekIAxsM8WwQ1kd+yjUlN9jFcF8XBat5NKIs9WphJCVXg==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.9.1.tgz", + "integrity": "sha512-sGFdpdAYusk/ropHiwtXom2JrdaKPxl8MqemRv6dvxZq1Gm/GdmOowxdXIPjCgBGMgoXVcgNviH6CgiO5q+UtA==", "cpu": [ "x64" ], @@ -1773,9 +1773,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.9.2.tgz", - "integrity": "sha512-TTIpR4rjMkhX1lnFR+PSXpaL83TrQzp9znRdp2TzYrODlUd/R20zOwSo9vFLCyH6ZoD47bccY7QeGZDYT3nlRg==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.9.1.tgz", + "integrity": "sha512-YtNLNwIWs0Z2+XgBs6+LrCIGtfCDtNr4S4b6Q5HDOreEIGzSvhkef8eyBI5L+fJ2eGov4b7iEo61C4izDJS5RA==", "cpu": [ "x64" ], @@ -1790,9 +1790,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.9.2.tgz", - "integrity": "sha512-+Eg2d4icItKC0PMjZxH7cSYFLWk0aIp94LNmOw6tPq0e69ax6oh10upeq0D1fjWsKLmOJAWEvnXlayZcijEXDw==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.9.1.tgz", + "integrity": "sha512-qSxD3uZW2vSiHqUt30vUi0PB92zDh9bjqh5YKpfhhVa7h1vt/xXhlid8yMvSNToTfzhRrTEffOAPUr7WVoyQUA==", "cpu": [ "arm64" ], @@ -1807,9 +1807,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.9.2.tgz", - "integrity": "sha512-nLWBi4vZDdM/LkiQmPCakof8Dh1/t5EM7eudue04V1lIcqx9YHVRS3KMwEaCoHLGg0c312Wm4YgrWQd9vwZ5zQ==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.9.1.tgz", + "integrity": "sha512-C3fPEwyX/WRPlX6zIToNykJuz1JkZX0sk8H1QH2vpnKuySUkt/Ur5K2FzLgSWzJdbfxstpgS151/es0VGAD+ZA==", "cpu": [ "ia32" ], @@ -1824,9 +1824,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.9.2.tgz", - "integrity": "sha512-ik/k+JjRJBFkXARukdU82tSVx0CbExFQoQ78qTO682esbYXzjdB5eLVkoUbwen299pnfr88Kn4kyIqFPTje8Xw==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.9.1.tgz", + "integrity": "sha512-2XZ+U1AyVsOAXeH6WK1syDm7+gwTjA8fShs93WcbxnK7HV+NigDlvr4124CeJLTHyh3fMh1o7+CnQnaBJhlysQ==", "cpu": [ "x64" ], @@ -1848,9 +1848,9 @@ "license": "Apache-2.0" }, "node_modules/@swc/types": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.15.tgz", - "integrity": "sha512-XKaZ+dzDIQ9Ot9o89oJQ/aluI17+VvUnIpYJTcZtvv1iYX6MzHh3Ik2CSR7MdPKpPwfZXHBeCingb2b4PoDVdw==", + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.14.tgz", + "integrity": "sha512-PbSmTiYCN+GMrvfjrMo9bdY+f2COnwbdnoMw7rqU/PI5jXpKjxOGZ0qqZCImxnT81NkNsKnmEpvu+hRXLBeCJg==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2398,17 +2398,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.14.0.tgz", - "integrity": "sha512-tqp8H7UWFaZj0yNO6bycd5YjMwxa6wIHOLZvWPkidwbgLCsBMetQoGj7DPuAlWa2yGO3H48xmPwjhsSPPCGU5w==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.13.0.tgz", + "integrity": "sha512-nQtBLiZYMUPkclSeC3id+x4uVd1SGtHuElTxL++SfP47jR0zfkZBJHc+gL4qPsgTuypz0k8Y2GheaDYn6Gy3rg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.14.0", - "@typescript-eslint/type-utils": "8.14.0", - "@typescript-eslint/utils": "8.14.0", - "@typescript-eslint/visitor-keys": "8.14.0", + "@typescript-eslint/scope-manager": "8.13.0", + "@typescript-eslint/type-utils": "8.13.0", + "@typescript-eslint/utils": "8.13.0", + "@typescript-eslint/visitor-keys": "8.13.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -2432,16 +2432,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.14.0.tgz", - "integrity": "sha512-2p82Yn9juUJq0XynBXtFCyrBDb6/dJombnz6vbo6mgQEtWHfvHbQuEa9kAOVIt1c9YFwi7H6WxtPj1kg+80+RA==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.13.0.tgz", + "integrity": "sha512-w0xp+xGg8u/nONcGw1UXAr6cjCPU1w0XVyBs6Zqaj5eLmxkKQAByTdV/uGgNN5tVvN/kKpoQlP2cL7R+ajZZIQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "8.14.0", - "@typescript-eslint/types": "8.14.0", - "@typescript-eslint/typescript-estree": "8.14.0", - "@typescript-eslint/visitor-keys": "8.14.0", + "@typescript-eslint/scope-manager": "8.13.0", + "@typescript-eslint/types": "8.13.0", + "@typescript-eslint/typescript-estree": "8.13.0", + "@typescript-eslint/visitor-keys": "8.13.0", "debug": "^4.3.4" }, "engines": { @@ -2461,14 +2461,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.14.0.tgz", - "integrity": "sha512-aBbBrnW9ARIDn92Zbo7rguLnqQ/pOrUguVpbUwzOhkFg2npFDwTgPGqFqE0H5feXcOoJOfX3SxlJaKEVtq54dw==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.13.0.tgz", + "integrity": "sha512-XsGWww0odcUT0gJoBZ1DeulY1+jkaHUciUq4jKNv4cpInbvvrtDoyBH9rE/n2V29wQJPk8iCH1wipra9BhmiMA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.14.0", - "@typescript-eslint/visitor-keys": "8.14.0" + "@typescript-eslint/types": "8.13.0", + "@typescript-eslint/visitor-keys": "8.13.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2479,14 +2479,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.14.0.tgz", - "integrity": "sha512-Xcz9qOtZuGusVOH5Uk07NGs39wrKkf3AxlkK79RBK6aJC1l03CobXjJbwBPSidetAOV+5rEVuiT1VSBUOAsanQ==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.13.0.tgz", + "integrity": "sha512-Rqnn6xXTR316fP4D2pohZenJnp+NwQ1mo7/JM+J1LWZENSLkJI8ID8QNtlvFeb0HnFSK94D6q0cnMX6SbE5/vA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.14.0", - "@typescript-eslint/utils": "8.14.0", + "@typescript-eslint/typescript-estree": "8.13.0", + "@typescript-eslint/utils": "8.13.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -2504,9 +2504,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.14.0.tgz", - "integrity": "sha512-yjeB9fnO/opvLJFAsPNYlKPnEM8+z4og09Pk504dkqonT02AyL5Z9SSqlE0XqezS93v6CXn49VHvB2G7XSsl0g==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.13.0.tgz", + "integrity": "sha512-4cyFErJetFLckcThRUFdReWJjVsPCqyBlJTi6IDEpc1GWCIIZRFxVppjWLIMcQhNGhdWJJRYFHpHoDWvMlDzng==", "dev": true, "license": "MIT", "engines": { @@ -2518,14 +2518,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.14.0.tgz", - "integrity": "sha512-OPXPLYKGZi9XS/49rdaCbR5j/S14HazviBlUQFvSKz3npr3NikF+mrgK7CFVur6XEt95DZp/cmke9d5i3vtVnQ==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.13.0.tgz", + "integrity": "sha512-v7SCIGmVsRK2Cy/LTLGN22uea6SaUIlpBcO/gnMGT/7zPtxp90bphcGf4fyrCQl3ZtiBKqVTG32hb668oIYy1g==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "8.14.0", - "@typescript-eslint/visitor-keys": "8.14.0", + "@typescript-eslint/types": "8.13.0", + "@typescript-eslint/visitor-keys": "8.13.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -2563,16 +2563,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.14.0.tgz", - "integrity": "sha512-OGqj6uB8THhrHj0Fk27DcHPojW7zKwKkPmHXHvQ58pLYp4hy8CSUdTKykKeh+5vFqTTVmjz0zCOOPKRovdsgHA==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.13.0.tgz", + "integrity": "sha512-A1EeYOND6Uv250nybnLZapeXpYMl8tkzYUxqmoKAWnI4sei3ihf2XdZVd+vVOmHGcp3t+P7yRrNsyyiXTvShFQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.14.0", - "@typescript-eslint/types": "8.14.0", - "@typescript-eslint/typescript-estree": "8.14.0" + "@typescript-eslint/scope-manager": "8.13.0", + "@typescript-eslint/types": "8.13.0", + "@typescript-eslint/typescript-estree": "8.13.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2586,13 +2586,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.14.0.tgz", - "integrity": "sha512-vG0XZo8AdTH9OE6VFRwAZldNc7qtJ/6NLGWak+BtENuEUXGZgFpihILPiBvKXvJ2nFu27XNGC6rKiwuaoMbYzQ==", + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.13.0.tgz", + "integrity": "sha512-7N/+lztJqH4Mrf0lb10R/CbI1EaAMMGyF5y0oJvFoAhafwgiRA7TXyd8TFn8FC8k5y2dTsYogg238qavRGNnlw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/types": "8.13.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { diff --git a/package.json b/package.json index 5d250800..4278a800 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "veritable-ui", - "version": "0.14.18", + "version": "0.14.19", "description": "UI for Veritable", "main": "src/index.ts", "type": "module", @@ -64,7 +64,7 @@ "@playwright/test": "^1.48.2", "@swc-node/register": "^1.10.9", "@swc/cli": "^0.5.0", - "@swc/core": "^1.9.2", + "@swc/core": "^1.9.1", "@types/body-parser": "^1.19.5", "@types/chai": "^5.0.1", "@types/chai-jest-snapshot": "^1.3.8", @@ -78,8 +78,8 @@ "@types/supertest": "^6.0.2", "@types/swagger-ui-express": "^4.1.7", "@types/ws": "^8.5.13", - "@typescript-eslint/eslint-plugin": "^8.14.0", - "@typescript-eslint/parser": "^8.14.0", + "@typescript-eslint/eslint-plugin": "^8.13.0", + "@typescript-eslint/parser": "^8.13.0", "chai": "^5.1.2", "chai-jest-snapshot": "^2.0.0", "concurrently": "^9.1.0", diff --git a/src/controllers/connection/__tests__/newConnection.test.ts b/src/controllers/connection/__tests__/newConnection.test.ts index 5ed1043b..a5e49641 100644 --- a/src/controllers/connection/__tests__/newConnection.test.ts +++ b/src/controllers/connection/__tests__/newConnection.test.ts @@ -360,11 +360,19 @@ describe('NewConnectionController', () => { }) it('should send second email to admin', () => { + expect(emailSpy.firstCall.args[0]).equal('connection_invite') expect(emailSpy.secondCall.args[0]).equal('connection_invite_admin') - expect(emailSpy.secondCall.args[1]?.address).equal( - 'NAME, ADDRESS_LINE_1, ADDRESS_LINE_2, CARE_OF, LOCALITY, PO_BOX, POSTAL_CODE, COUNTRY, PREMISES, REGION' - ) + expect(emailSpy.firstCall.args[1]).to.deep.contain({ + to: 'alice@example.com', + toCompanyName: 'NAME', + fromCompanyName: 'COMPANY_NAME', + }) expect(emailSpy.secondCall.args[1]?.pin).match(/[0-9]{6}/) + expect(emailSpy.secondCall.args[1]).to.deep.contain({ + receiver: 'NAME', + address: + 'NAME, ADDRESS_LINE_1, ADDRESS_LINE_2, CARE_OF, LOCALITY, PO_BOX, POSTAL_CODE, COUNTRY, PREMISES, REGION', + }) }) }) }) @@ -545,10 +553,12 @@ describe('NewConnectionController', () => { it('should send email to admin', () => { expect(emailSpy.firstCall.args[0]).equal('connection_invite_admin') - expect(emailSpy.firstCall.args[1]?.address).equal( - 'NAME, ADDRESS_LINE_1, ADDRESS_LINE_2, CARE_OF, LOCALITY, PO_BOX, POSTAL_CODE, COUNTRY, PREMISES, REGION' - ) expect(emailSpy.firstCall.args[1]?.pin).match(/[0-9]{6}/) + expect(emailSpy.firstCall.args[1]).to.deep.contain({ + receiver: 'NAME', + address: + 'NAME, ADDRESS_LINE_1, ADDRESS_LINE_2, CARE_OF, LOCALITY, PO_BOX, POSTAL_CODE, COUNTRY, PREMISES, REGION', + }) }) }) }) diff --git a/src/controllers/connection/newConnection.ts b/src/controllers/connection/newConnection.ts index 0005fbb1..e5232106 100644 --- a/src/controllers/connection/newConnection.ts +++ b/src/controllers/connection/newConnection.ts @@ -407,6 +407,7 @@ export class NewConnectionController extends HTMLController { private async sendAdminEmail(company: CompanyProfile, pin: string) { await neverFail( this.email.sendMail('connection_invite_admin', { + receiver: company.company_name, address: [ company.company_name, company.registered_office_address.address_line_1, diff --git a/src/env/__tests__/index.test.ts b/src/env/__tests__/index.test.ts index 93b6bd17..b9fb8ce0 100644 --- a/src/env/__tests__/index.test.ts +++ b/src/env/__tests__/index.test.ts @@ -17,7 +17,7 @@ const requiredProdEnvs = { IDP_CLIENT_ID: 'veritable', IDP_INTERNAL_URL_PREFIX: 'http://localhost:3080/realms/veritable/protocol/openid-connect', IDP_PUBLIC_URL_PREFIX: 'http://localhost:3080/realms/veritable/protocol/openid-connect', - INVITATION_FROM_COMPANY_NUMBER: '123456789', + INVITATION_FROM_COMPANY_NUMBER: '04659351', INVITATION_PIN_SECRET: 'secret', ISSUANCE_CRED_DEF_POLICY: 'CREATE_NEW', ISSUANCE_DID_POLICY: 'CREATE_NEW', diff --git a/src/models/emailServiceInt/templates/invitationAdmin.tsx b/src/models/emailServiceInt/templates/invitationAdmin.tsx index 76a98964..c7bf561f 100644 --- a/src/models/emailServiceInt/templates/invitationAdmin.tsx +++ b/src/models/emailServiceInt/templates/invitationAdmin.tsx @@ -1,23 +1,41 @@ import Html from '@kitajs/html' import { SendMailOptions } from 'nodemailer' + import { Env } from '../../../env/index.js' +import CompanyHouseEntity from '../../companyHouseEntity.js' export default { name: 'connection_invite_admin' as const, - template: async function (env: Env, params: { pin: string; address: string }): Promise { + template: async function ( + env: Env, + params: { pin: string; receiver: string; address: string } + ): Promise { + const companyHouse = new CompanyHouseEntity(env) + const localCompany = await companyHouse.localCompanyHouseProfile() return { to: env.get('EMAIL_ADMIN_ADDRESS'), from: env.get('EMAIL_FROM_ADDRESS'), - subject: 'Action required: process veritable invitation', + subject: `Postal Code for Verification: Invitation from ${localCompany.company_name} on Veritable`, text: ` - Action required: process veritable invitation - PIN: ${params.pin}, - Address: ${params.address}, + Hi ${localCompany.company_name} Admin, + Please post this verification code to ${params.receiver}, to complete the verification process. + + Address: ${params.address} + + Verification Code: ${params.pin}, `, html: await ( <> -

Action required: process veritable invitation

-

Pin:

+

{Html.escapeHtml(`Hi ${localCompany.company_name}`)}

+
+

+ {Html.escapeHtml( + `Please post this verification code to ${params.receiver}, to complete the verification process.` + )} +

+ +
+

Verification Code:

{Html.escapeHtml(params.pin)}

Address:

{Html.escapeHtml(params.address)}

diff --git a/test/e2e/a-homepage-redirect.spec.ts b/test/e2e/a-homepage.spec.ts similarity index 100% rename from test/e2e/a-homepage-redirect.spec.ts rename to test/e2e/a-homepage.spec.ts diff --git a/test/e2e/connection-alice-to-bob.spec.ts b/test/e2e/connection-alice-to-bob.spec.ts index a3dda91a..9de5748c 100644 --- a/test/e2e/connection-alice-to-bob.spec.ts +++ b/test/e2e/connection-alice-to-bob.spec.ts @@ -1,11 +1,10 @@ import { expect, Page, test } from '@playwright/test' import { cleanup, CustomBrowserContext, withLoggedInUser, withRegisteredAccount } from './helpers/registerLogIn.js' -import { checkEmails, extractInvite, extractPin, findNewAdminEmail } from './helpers/smtpEmails.js' +import { checkEmails, extractInvite, extractPin } from './helpers/smtpEmails.js' test.describe('Connection from Alice to Bob', () => { let context: CustomBrowserContext let page: Page - let adminEmailId: string let invite: string | null let pinForBob: string let pinForAlice: string @@ -73,7 +72,6 @@ test.describe('Connection from Alice to Bob', () => { await test.step('Retrieve invite and pin for Bob', async () => { const adminEmail = await checkEmails('admin@veritable.com') const inviteEmail = await checkEmails('alice@testmail.com') - adminEmailId = adminEmail.id const extractedPin = await extractPin(adminEmail.id) expect(extractedPin).toHaveLength(6) @@ -123,7 +121,7 @@ test.describe('Connection from Alice to Bob', () => { }) await test.step('Retrieve pin for Alice', async () => { - const newAdminEmail = await findNewAdminEmail(adminEmailId) + const newAdminEmail = await checkEmails('admin@veritable.com') const extractedPin = await extractPin(newAdminEmail.id) expect(extractedPin).toHaveLength(6) if (!extractedPin) throw new Error('PIN from admin email was not found.') diff --git a/test/e2e/helpers/setupConnection.ts b/test/e2e/helpers/setupConnection.ts index c220b78e..bab60280 100644 --- a/test/e2e/helpers/setupConnection.ts +++ b/test/e2e/helpers/setupConnection.ts @@ -66,7 +66,7 @@ export async function withConnection(invitatorUrl: string, receiverUrl: string) stepCount: '2', }) - retries = 20 + retries = 30 while (retries) { await delay(500) const invitatorConnection = await fetchGet(`${invitatorUrl}/connection?search=OFFSHORE`) diff --git a/test/e2e/helpers/smtpEmails.ts b/test/e2e/helpers/smtpEmails.ts index cf1f4fe4..7520f542 100644 --- a/test/e2e/helpers/smtpEmails.ts +++ b/test/e2e/helpers/smtpEmails.ts @@ -82,11 +82,11 @@ async function extractPin(emailId: string): Promise { const rawEmailContent = await response.text() // Regex pattern to find the PIN - const pinPattern = /

Pin:<\/p>

(\d{6})<\/p>/ + const pinPattern = /\d{6}/g const match = rawEmailContent.match(pinPattern) - if (match && match[1]) { - return match[1] + if (match && match[0]) { + return match[0] } else { return null } @@ -136,8 +136,7 @@ async function findNewAdminEmail(oldAdminEmailId: string): Promise { } const newAdminEmail = results.find( - (msg: Email) => - msg.subject === 'Action required: process veritable invitation' && msg.id !== oldAdminEmailId + (msg: Email) => msg.subject === 'Postal Code for Verification:' && msg.id !== oldAdminEmailId ) if (!newAdminEmail) { diff --git a/test/integration/smtpEmail.test.ts b/test/integration/smtpEmail.test.ts index f791846c..2925ce58 100644 --- a/test/integration/smtpEmail.test.ts +++ b/test/integration/smtpEmail.test.ts @@ -54,6 +54,7 @@ describe('SMTP email', () => { await cleanupCloudagent() server.cloudagentEvents.stop() }) + it('should send an email via SMTP', async () => { const options = { hostname: 'localhost', @@ -75,7 +76,8 @@ describe('SMTP email', () => { const parsedMessages = EmailResponseSchema.parse(messages) const results = parsedMessages['results'] expect(results).to.be.an('array') - expect(results).length(2) + expect(results[0]).to.have.property('deliveredTo').that.is.equal('admin@veritable.com') + expect(results[1]).to.have.property('deliveredTo').that.is.equal('alice@example.com') // Invite email assertions const inviteEmail = results.find( @@ -83,18 +85,36 @@ describe('SMTP email', () => { ) if (inviteEmail) { expect(inviteEmail.to).to.have.lengthOf(1) - expect(inviteEmail.to[0]).to.contain('alice@example.com') + expect(inviteEmail).to.deep.contain({ + isRelayed: false, + deliveredTo: 'alice@example.com', + from: 'hello@veritable.com', + to: ['alice@example.com'], + subject: 'DIGITAL CATAPULT invites you to a secure, verified connection on Veritable', + attachmentCount: 0, + isUnread: true, + }) } else { throw new Error('No email found with the correct subject.') } // Admin email assertions - const adminEmail = results.find((msg) => msg.subject === 'Action required: process veritable invitation') + const adminEmail = results.find( + (msg) => msg.subject === 'Postal Code for Verification: Invitation from DIGITAL CATAPULT on Veritable' + ) if (adminEmail) { expect(adminEmail.to).to.have.lengthOf(1) - expect(adminEmail.to[0]).to.contain('admin@veritable.com') + expect(adminEmail).to.deep.contain({ + isRelayed: false, + deliveredTo: 'admin@veritable.com', + from: 'hello@veritable.com', + to: ['admin@veritable.com'], + subject: 'Postal Code for Verification: Invitation from DIGITAL CATAPULT on Veritable', + attachmentCount: 0, + isUnread: true, + }) } else { - throw new Error('No email found with the subject "Action required: process veritable invitation".') + throw new Error('No email found with the subject "Postal Code for Verification".') } resolve(true)