From 24bff4f710808850e9939d24558846fe22d3b504 Mon Sep 17 00:00:00 2001 From: Benny Halperin Date: Wed, 31 Dec 2025 10:40:08 +0200 Subject: [PATCH 1/4] Fixed typo --- apps/ui-e2e/src/poms/login.page.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/ui-e2e/src/poms/login.page.ts b/apps/ui-e2e/src/poms/login.page.ts index 440127b..628afaf 100644 --- a/apps/ui-e2e/src/poms/login.page.ts +++ b/apps/ui-e2e/src/poms/login.page.ts @@ -23,9 +23,9 @@ export class LoginPage { await this.page.goto('/login'); } - async fill(email: string, passord: string) { + async fill(email: string, password: string) { await this.email.fill(email); - await this.password.fill(passord); + await this.password.fill(password); } async login() { From 1ed3ab2782eef85ac4936a472f5c14516164e220 Mon Sep 17 00:00:00 2001 From: Benny Halperin Date: Wed, 7 Jan 2026 14:06:17 +0200 Subject: [PATCH 2/4] Updated dependencies --- package.json | 9 ++- yarn.lock | 213 +++++++++++++++++++++++++-------------------------- 2 files changed, 109 insertions(+), 113 deletions(-) diff --git a/package.json b/package.json index f0dce57..46a722f 100644 --- a/package.json +++ b/package.json @@ -47,13 +47,14 @@ "@nestjs/microservices": "^11.1.11", "@nestjs/passport": "^11.0.5", "@nestjs/platform-express": "^11.1.11", - "@nestjs/swagger": "^11.2.3", + "@nestjs/swagger": "^11.2.4", "@ngrx/signals": "^21.0.1", "@prisma/adapter-pg": "^7.2.0", "@prisma/client": "^7.2.0", "axios": "^1.13.2", "bcrypt": "^6.0.0", "bootstrap": "^5.3.8", + "chalk": "^5.6.2", "class-transformer": "^0.5.1", "class-validator": "^0.14.3", "cookie-parser": "^1.4.7", @@ -118,14 +119,14 @@ "@types/passport-jwt": "^4.0.1", "@types/passport-local": "^1.0.38", "@types/pg": "^8.16.0", - "@typescript-eslint/eslint-plugin": "^8.51.0", - "@typescript-eslint/parser": "^8.51.0", + "@typescript-eslint/eslint-plugin": "^8.52.0", + "@typescript-eslint/parser": "^8.52.0", "copy-files-from-to": "^4.0.0", "esbuild": "^0.27.2", "eslint": "^9.39.2", "eslint-config-prettier": "^10.1.8", "eslint-plugin-playwright": "^2.4.0", - "globals": "^16.5.0", + "globals": "^17.0.0", "jest": "^30.2.0", "jest-environment-jsdom": "^30.2.0", "jest-environment-node": "^30.2.0", diff --git a/yarn.lock b/yarn.lock index 695586b..2f3498c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3491,13 +3491,6 @@ dependencies: eslint-visitor-keys "^3.3.0" -"@eslint-community/eslint-utils@^4.7.0": - version "4.7.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz#607084630c6c033992a082de6e6fbc1a8b52175a" - integrity sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw== - dependencies: - eslint-visitor-keys "^3.4.3" - "@eslint-community/eslint-utils@^4.8.0": version "4.8.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.8.0.tgz#0e3b5e45566d1bce1ec47d8aae2fc2ad77ad0894" @@ -3505,16 +3498,23 @@ dependencies: eslint-visitor-keys "^3.4.3" -"@eslint-community/regexpp@^4.10.0": - version "4.11.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae" - integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A== +"@eslint-community/eslint-utils@^4.9.1": + version "4.9.1" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz#4e90af67bc51ddee6cdef5284edf572ec376b595" + integrity sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ== + dependencies: + eslint-visitor-keys "^3.4.3" "@eslint-community/regexpp@^4.12.1": version "4.12.1" resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== +"@eslint-community/regexpp@^4.12.2": + version "4.12.2" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b" + integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== + "@eslint/config-array@^0.21.1": version "0.21.1" resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.21.1.tgz#7d1b0060fea407f8301e932492ba8c18aff29713" @@ -5219,17 +5219,17 @@ jsonc-parser "3.3.1" pluralize "8.0.0" -"@nestjs/swagger@^11.2.3": - version "11.2.3" - resolved "https://registry.yarnpkg.com/@nestjs/swagger/-/swagger-11.2.3.tgz#979fbc87fedee0b71d9af181cafe9dbe3e4bd976" - integrity sha512-a0xFfjeqk69uHIUpP8u0ryn4cKuHdra2Ug96L858i0N200Hxho+n3j+TlQXyOF4EstLSGjTfxI1Xb2E1lUxeNg== +"@nestjs/swagger@^11.2.4": + version "11.2.4" + resolved "https://registry.yarnpkg.com/@nestjs/swagger/-/swagger-11.2.4.tgz#78e8186c1798de295f05545cfccc045b4c59fe82" + integrity sha512-7MLqtHfD2qfhZUyg13FyX6liwigtXUL8gHXq7PaBcGo9cu8QWDDT//Fn3qzJx59+Wh+Ly/Zn+prCMpskPI5nrQ== dependencies: "@microsoft/tsdoc" "0.16.0" "@nestjs/mapped-types" "2.1.0" js-yaml "4.1.1" lodash "4.17.21" path-to-regexp "8.3.0" - swagger-ui-dist "5.30.2" + swagger-ui-dist "5.31.0" "@nestjs/testing@^11.1.11": version "11.1.11" @@ -7393,47 +7393,47 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/eslint-plugin@^8.51.0": - version "8.51.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.51.0.tgz#8985230730c0d955bf6aa0aed98c5c2c95102e1a" - integrity sha512-XtssGWJvypyM2ytBnSnKtHYOGT+4ZwTnBVl36TA4nRO2f4PRNGz5/1OszHzcZCvcBMh+qb7I06uoCmLTRdR9og== - dependencies: - "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "8.51.0" - "@typescript-eslint/type-utils" "8.51.0" - "@typescript-eslint/utils" "8.51.0" - "@typescript-eslint/visitor-keys" "8.51.0" - ignore "^7.0.0" +"@typescript-eslint/eslint-plugin@^8.52.0": + version "8.52.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.52.0.tgz#9a9f1d2ee974ed77a8b1bda94e77123f697ee8b4" + integrity sha512-okqtOgqu2qmZJ5iN4TWlgfF171dZmx2FzdOv2K/ixL2LZWDStL8+JgQerI2sa8eAEfoydG9+0V96m7V+P8yE1Q== + dependencies: + "@eslint-community/regexpp" "^4.12.2" + "@typescript-eslint/scope-manager" "8.52.0" + "@typescript-eslint/type-utils" "8.52.0" + "@typescript-eslint/utils" "8.52.0" + "@typescript-eslint/visitor-keys" "8.52.0" + ignore "^7.0.5" natural-compare "^1.4.0" - ts-api-utils "^2.2.0" + ts-api-utils "^2.4.0" -"@typescript-eslint/parser@^8.51.0": - version "8.51.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.51.0.tgz#584fb8be3a867cbf980917aabed5f7528f615d6b" - integrity sha512-3xP4XzzDNQOIqBMWogftkwxhg5oMKApqY0BAflmLZiFYHqyhSOxv/cd/zPQLTcCXr4AkaKb25joocY0BD1WC6A== +"@typescript-eslint/parser@^8.52.0": + version "8.52.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.52.0.tgz#9fae9f5f13ebb1c8f31a50c34381bfd6bf96a05f" + integrity sha512-iIACsx8pxRnguSYhHiMn2PvhvfpopO9FXHyn1mG5txZIsAaB6F0KwbFnUQN3KCiG3Jcuad/Cao2FAs1Wp7vAyg== dependencies: - "@typescript-eslint/scope-manager" "8.51.0" - "@typescript-eslint/types" "8.51.0" - "@typescript-eslint/typescript-estree" "8.51.0" - "@typescript-eslint/visitor-keys" "8.51.0" - debug "^4.3.4" + "@typescript-eslint/scope-manager" "8.52.0" + "@typescript-eslint/types" "8.52.0" + "@typescript-eslint/typescript-estree" "8.52.0" + "@typescript-eslint/visitor-keys" "8.52.0" + debug "^4.4.3" -"@typescript-eslint/project-service@8.51.0": - version "8.51.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.51.0.tgz#3cfef313d8bebbf4b2442675a4dd463cef4c8369" - integrity sha512-Luv/GafO07Z7HpiI7qeEW5NW8HUtZI/fo/kE0YbtQEFpJRUuR0ajcWfCE5bnMvL7QQFrmT/odMe8QZww8X2nfQ== +"@typescript-eslint/project-service@8.52.0": + version "8.52.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.52.0.tgz#5fb4c16af4eda6d74c70cbc62f5d3f77b96e4cbe" + integrity sha512-xD0MfdSdEmeFa3OmVqonHi+Cciab96ls1UhIF/qX/O/gPu5KXD0bY9lu33jj04fjzrXHcuvjBcBC+D3SNSadaw== dependencies: - "@typescript-eslint/tsconfig-utils" "^8.51.0" - "@typescript-eslint/types" "^8.51.0" - debug "^4.3.4" + "@typescript-eslint/tsconfig-utils" "^8.52.0" + "@typescript-eslint/types" "^8.52.0" + debug "^4.4.3" -"@typescript-eslint/scope-manager@8.51.0": - version "8.51.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.51.0.tgz#19b42f65680c21f7b6f40fe9024327f6bb1893c1" - integrity sha512-JhhJDVwsSx4hiOEQPeajGhCWgBMBwVkxC/Pet53EpBVs7zHHtayKefw1jtPaNRXpI9RA2uocdmpdfE7T+NrizA== +"@typescript-eslint/scope-manager@8.52.0": + version "8.52.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.52.0.tgz#9884ff690fad30380ccabfb08af1ac200af6b4e5" + integrity sha512-ixxqmmCcc1Nf8S0mS0TkJ/3LKcC8mruYJPOU6Ia2F/zUUR4pApW7LzrpU3JmtePbRUTes9bEqRc1Gg4iyRnDzA== dependencies: - "@typescript-eslint/types" "8.51.0" - "@typescript-eslint/visitor-keys" "8.51.0" + "@typescript-eslint/types" "8.52.0" + "@typescript-eslint/visitor-keys" "8.52.0" "@typescript-eslint/scope-manager@8.6.0": version "8.6.0" @@ -7443,21 +7443,21 @@ "@typescript-eslint/types" "8.6.0" "@typescript-eslint/visitor-keys" "8.6.0" -"@typescript-eslint/tsconfig-utils@8.51.0", "@typescript-eslint/tsconfig-utils@^8.51.0": - version "8.51.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.51.0.tgz#a575e9885e62dbd260fb64474eff1dae6e317515" - integrity sha512-Qi5bSy/vuHeWyir2C8u/uqGMIlIDu8fuiYWv48ZGlZ/k+PRPHtaAu7erpc7p5bzw2WNNSniuxoMSO4Ar6V9OXw== +"@typescript-eslint/tsconfig-utils@8.52.0", "@typescript-eslint/tsconfig-utils@^8.52.0": + version "8.52.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.52.0.tgz#0296751c22ed05c83787a6eaec65ae221bd8b8ed" + integrity sha512-jl+8fzr/SdzdxWJznq5nvoI7qn2tNYV/ZBAEcaFMVXf+K6jmXvAFrgo/+5rxgnL152f//pDEAYAhhBAZGrVfwg== -"@typescript-eslint/type-utils@8.51.0": - version "8.51.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.51.0.tgz#ec165b0312a6025c2a2a3f39641e46ab4f049564" - integrity sha512-0XVtYzxnobc9K0VU7wRWg1yiUrw4oQzexCG2V2IDxxCxhqBMSMbjB+6o91A+Uc0GWtgjCa3Y8bi7hwI0Tu4n5Q== +"@typescript-eslint/type-utils@8.52.0": + version "8.52.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.52.0.tgz#6e554113f8a074cf9b2faa818d2ebfccb867d6c5" + integrity sha512-JD3wKBRWglYRQkAtsyGz1AewDu3mTc7NtRjR/ceTyGoPqmdS5oCdx/oZMWD5Zuqmo6/MpsYs0wp6axNt88/2EQ== dependencies: - "@typescript-eslint/types" "8.51.0" - "@typescript-eslint/typescript-estree" "8.51.0" - "@typescript-eslint/utils" "8.51.0" - debug "^4.3.4" - ts-api-utils "^2.2.0" + "@typescript-eslint/types" "8.52.0" + "@typescript-eslint/typescript-estree" "8.52.0" + "@typescript-eslint/utils" "8.52.0" + debug "^4.4.3" + ts-api-utils "^2.4.0" "@typescript-eslint/type-utils@^8.0.0": version "8.6.0" @@ -7474,10 +7474,10 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.13.1.tgz#787db283bd0b58751094c90d5b58bbf5e9fc9bd8" integrity sha512-7K7HMcSQIAND6RBL4kDl24sG/xKM13cA85dc7JnmQXw2cBDngg7c19B++JzvJHRG3zG36n9j1i451GBzRuHchw== -"@typescript-eslint/types@8.51.0", "@typescript-eslint/types@^8.51.0": - version "8.51.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.51.0.tgz#6996e59d49e92fb893531bdc249f0d92a7bebdbb" - integrity sha512-TizAvWYFM6sSscmEakjY3sPqGwxZRSywSsPEiuZF6d5GmGD9Gvlsv0f6N8FvAAA0CD06l3rIcWNbsN1e5F/9Ag== +"@typescript-eslint/types@8.52.0", "@typescript-eslint/types@^8.52.0": + version "8.52.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.52.0.tgz#1eb0a16b324824bc23b89d109a267c38c9213c4a" + integrity sha512-LWQV1V4q9V4cT4H5JCIx3481iIFxH1UkVk+ZkGGAV1ZGcjGI9IoFOfg3O6ywz8QqCDEp7Inlg6kovMofsNRaGg== "@typescript-eslint/types@8.6.0": version "8.6.0" @@ -7498,20 +7498,20 @@ semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/typescript-estree@8.51.0": - version "8.51.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.51.0.tgz#b57f5157d1ac2127bd7c2c9ad8060fa017df4a1a" - integrity sha512-1qNjGqFRmlq0VW5iVlcyHBbCjPB7y6SxpBkrbhNWMy/65ZoncXCEPJxkRZL8McrseNH6lFhaxCIaX+vBuFnRng== +"@typescript-eslint/typescript-estree@8.52.0": + version "8.52.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.52.0.tgz#2ad7721c671be2127951286cb7f44c4ce55b0591" + integrity sha512-XP3LClsCc0FsTK5/frGjolyADTh3QmsLp6nKd476xNI9CsSsLnmn4f0jrzNoAulmxlmNIpeXuHYeEQv61Q6qeQ== dependencies: - "@typescript-eslint/project-service" "8.51.0" - "@typescript-eslint/tsconfig-utils" "8.51.0" - "@typescript-eslint/types" "8.51.0" - "@typescript-eslint/visitor-keys" "8.51.0" - debug "^4.3.4" - minimatch "^9.0.4" - semver "^7.6.0" + "@typescript-eslint/project-service" "8.52.0" + "@typescript-eslint/tsconfig-utils" "8.52.0" + "@typescript-eslint/types" "8.52.0" + "@typescript-eslint/visitor-keys" "8.52.0" + debug "^4.4.3" + minimatch "^9.0.5" + semver "^7.7.3" tinyglobby "^0.2.15" - ts-api-utils "^2.2.0" + ts-api-utils "^2.4.0" "@typescript-eslint/typescript-estree@8.6.0": version "8.6.0" @@ -7527,15 +7527,15 @@ semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/utils@8.51.0": - version "8.51.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.51.0.tgz#b9a071cd210647f860a38873acf9bc5157bea56a" - integrity sha512-11rZYxSe0zabiKaCP2QAwRf/dnmgFgvTmeDTtZvUvXG3UuAdg/GU02NExmmIXzz3vLGgMdtrIosI84jITQOxUA== +"@typescript-eslint/utils@8.52.0": + version "8.52.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.52.0.tgz#b249be8264899b80d996fa353b4b84da4662f962" + integrity sha512-wYndVMWkweqHpEpwPhwqE2lnD2DxC6WVLupU/DOt/0/v+/+iQbbzO3jOHjmBMnhu0DgLULvOaU4h4pwHYi2oRQ== dependencies: - "@eslint-community/eslint-utils" "^4.7.0" - "@typescript-eslint/scope-manager" "8.51.0" - "@typescript-eslint/types" "8.51.0" - "@typescript-eslint/typescript-estree" "8.51.0" + "@eslint-community/eslint-utils" "^4.9.1" + "@typescript-eslint/scope-manager" "8.52.0" + "@typescript-eslint/types" "8.52.0" + "@typescript-eslint/typescript-estree" "8.52.0" "@typescript-eslint/utils@8.6.0", "@typescript-eslint/utils@^8.0.0": version "8.6.0" @@ -7555,12 +7555,12 @@ "@typescript-eslint/types" "7.13.1" eslint-visitor-keys "^3.4.3" -"@typescript-eslint/visitor-keys@8.51.0": - version "8.51.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.51.0.tgz#d37f5c82b9bece2c8aeb3ba7bb836bbba0f92bb8" - integrity sha512-mM/JRQOzhVN1ykejrvwnBRV3+7yTKK8tVANVN3o1O0t0v7o+jqdVu9crPy5Y9dov15TJk/FTIgoUGHrTOVL3Zg== +"@typescript-eslint/visitor-keys@8.52.0": + version "8.52.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.52.0.tgz#50361c48a6302676230fe498f80f6decce4bf673" + integrity sha512-ink3/Zofus34nmBsPjow63FP5M7IGff0RKAgqR6+CFpdk22M7aLwC9gOcLGYqr7MczLPzZVERW9hRog3O4n1sQ== dependencies: - "@typescript-eslint/types" "8.51.0" + "@typescript-eslint/types" "8.52.0" eslint-visitor-keys "^4.2.1" "@typescript-eslint/visitor-keys@8.6.0": @@ -11562,10 +11562,10 @@ globals@^16.4.0: resolved "https://registry.yarnpkg.com/globals/-/globals-16.4.0.tgz#574bc7e72993d40cf27cf6c241f324ee77808e51" integrity sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw== -globals@^16.5.0: - version "16.5.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-16.5.0.tgz#ccf1594a437b97653b2be13ed4d8f5c9f850cac1" - integrity sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ== +globals@^17.0.0: + version "17.0.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-17.0.0.tgz#a4196d9cfeb4d627ba165b4647b1f5853bf90a30" + integrity sha512-gv5BeD2EssA793rlFWVPMMCqefTlpusw6/2TbAVMy0FzcG8wKJn4O+NqJ4+XWmmwrayJgw5TzrmWjFgmz1XPqw== globby@^11.1.0: version "11.1.0" @@ -12033,11 +12033,6 @@ ignore@^5.0.4, ignore@^5.1.9, ignore@^5.2.0, ignore@^5.2.4: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== -ignore@^7.0.0: - version "7.0.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.4.tgz#a12c70d0f2607c5bf508fb65a40c75f037d7a078" - integrity sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A== - ignore@^7.0.5: version "7.0.5" resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.5.tgz#4cb5f6cd7d4c7ab0365738c7aea888baa6d7efd9" @@ -17534,10 +17529,10 @@ svgo@^3.0.2, svgo@^3.2.0: csso "^5.0.5" picocolors "^1.0.0" -swagger-ui-dist@5.30.2: - version "5.30.2" - resolved "https://registry.yarnpkg.com/swagger-ui-dist/-/swagger-ui-dist-5.30.2.tgz#b146c5bd92cc712340f8847b546ea64d785efeb2" - integrity sha512-HWCg1DTNE/Nmapt+0m2EPXFwNKNeKK4PwMjkwveN/zn1cV2Kxi9SURd+m0SpdcSgWEK/O64sf8bzXdtUhigtHA== +swagger-ui-dist@5.31.0: + version "5.31.0" + resolved "https://registry.yarnpkg.com/swagger-ui-dist/-/swagger-ui-dist-5.31.0.tgz#a2529f844c83b7e85c2caaf2c64a8277dd71db98" + integrity sha512-zSUTIck02fSga6rc0RZP3b7J7wgHXwLea8ZjgLA3Vgnb8QeOl3Wou2/j5QkzSGeoz6HusP/coYuJl33aQxQZpg== dependencies: "@scarf/scarf" "=1.4.0" @@ -17850,10 +17845,10 @@ ts-api-utils@^2.1.0: resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91" integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ== -ts-api-utils@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.3.0.tgz#9f397ac9d88ac76e8dd6e8bc4af0dbf98af99f73" - integrity sha512-6eg3Y9SF7SsAvGzRHQvvc1skDAhwI4YQ32ui1scxD1Ccr0G5qIIbUBT3pFTKX8kmWIQClHobtUdNuaBgwdfdWg== +ts-api-utils@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.4.0.tgz#2690579f96d2790253bdcf1ca35d569ad78f9ad8" + integrity sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA== ts-checker-rspack-plugin@^1.1.1: version "1.1.1" From 3b1c6e57bdbfdb39e77cceccf807c531d9064ae8 Mon Sep 17 00:00:00 2001 From: Benny Halperin Date: Wed, 7 Jan 2026 14:16:10 +0200 Subject: [PATCH 3/4] Improved handling error scenarios of token expiry / token refresh time expiry --- .../gh-users/gh-users.component.html | 62 ++++++++++--------- .../src/app/interceptors/auth.interceptor.ts | 9 ++- 2 files changed, 36 insertions(+), 35 deletions(-) diff --git a/apps/ui/src/app/components/gh-users/gh-users.component.html b/apps/ui/src/app/components/gh-users/gh-users.component.html index 4619324..06e8b49 100644 --- a/apps/ui/src/app/components/gh-users/gh-users.component.html +++ b/apps/ui/src/app/components/gh-users/gh-users.component.html @@ -1,37 +1,39 @@
-
- @if (!usersPageResource.error() && usersPageResource.hasValue() && !!userListRangeIds.first) { -
Showing {{ usersPageResource.value().length }} Github users (ID #{{ userListRangeIds.first }} to #{{ userListRangeIds.last }})
- } - @else if (!usersPageResource.isLoading()) { -
No users found
- } -
- + @if(!usersPageResource.error()) { +
+ @if (usersPageResource.hasValue() && !!userListRangeIds.first) { +
Showing {{ usersPageResource.value().length }} Github users (ID #{{ userListRangeIds.first }} to #{{ userListRangeIds.last }})
+ } + @else if (!usersPageResource.isLoading()) { +
No users found
+ } +
+ +
+
+ +
+
+ +
+
+
+
+ + +
+
+
-
- -
-
- -
-
-
-
- - -
-
-
-
+ }
diff --git a/apps/ui/src/app/interceptors/auth.interceptor.ts b/apps/ui/src/app/interceptors/auth.interceptor.ts index 7a9c7b8..47113cd 100644 --- a/apps/ui/src/app/interceptors/auth.interceptor.ts +++ b/apps/ui/src/app/interceptors/auth.interceptor.ts @@ -1,7 +1,7 @@ import { HttpErrorResponse, HttpInterceptorFn, HttpRequest } from '@angular/common/http'; import { inject } from '@angular/core'; import { AppRouter } from 'fw-extensions/app-router'; -import { catchError, switchMap, tap, throwError } from 'rxjs'; +import { catchError, from, switchMap, tap, throwError } from 'rxjs'; import { AuthService } from 'services/auth.service'; import { IS_PUBLIC_API, IS_REFRESH_API } from 'utils/api'; @@ -19,14 +19,13 @@ export const authInterceptor: HttpInterceptorFn = (req, next) => { console.error('*** authInterceptor error = ', error); if (error.status === 401) { if (req.context.get(IS_REFRESH_API)) { - router.navigateToTokenExpired(); - - return throwError(() => new Error(error.message)); + return from(router.navigateToTokenExpired()).pipe( + switchMap(() => throwError(() => new Error(error.message))), + ); } return authService.refresh(authService.refreshToken).pipe( tap(() => authService.saveCredentials()), switchMap(() => { - authService.saveCredentials(); authReq = addToken(req, authService.accessToken); return next(authReq); From 7de27905043770e253698c30be50b9dd8fe7ec7f Mon Sep 17 00:00:00 2001 From: Benny Halperin Date: Wed, 7 Jan 2026 14:16:41 +0200 Subject: [PATCH 4/4] Implemented measureTime decorator --- apps/api/src/modules/auth/auth.controller.ts | 3 +- libs/shared/src/lib/utils/decorators.ts | 44 +++++++++++++++++-- .../src/users/users.controller.ts | 3 +- 3 files changed, 45 insertions(+), 5 deletions(-) diff --git a/apps/api/src/modules/auth/auth.controller.ts b/apps/api/src/modules/auth/auth.controller.ts index b5c8a1f..5b1f097 100644 --- a/apps/api/src/modules/auth/auth.controller.ts +++ b/apps/api/src/modules/auth/auth.controller.ts @@ -3,7 +3,7 @@ import { globalConfig } from '@gh/config'; import { PrismaService, User as PrismaUser } from '@gh/prisma'; import { LoginDto } from '@gh/shared/dtos'; import { AuthKeys } from '@gh/shared/models'; -import { loggedMethod } from '@gh/shared/utils'; +import { loggedMethod, measureTime } from '@gh/shared/utils'; import { Body, Controller, Get, HttpCode, HttpStatus, Inject, Post, Req, Res, UnauthorizedException, UseGuards } from '@nestjs/common'; import { ConfigType } from '@nestjs/config'; import { ApiBody } from '@nestjs/swagger'; @@ -28,6 +28,7 @@ export class AuthController { @HttpCode(HttpStatus.OK) @ApiBody({ type: LoginDto }) @loggedMethod('Log in with user/password') + @measureTime() async login(@Body() user: LoginDto, @Res() res: Response) { const response = await this.authService.login(user as PrismaUser); diff --git a/libs/shared/src/lib/utils/decorators.ts b/libs/shared/src/lib/utils/decorators.ts index 23b737b..7c82725 100644 --- a/libs/shared/src/lib/utils/decorators.ts +++ b/libs/shared/src/lib/utils/decorators.ts @@ -1,11 +1,13 @@ +import chalk from 'chalk'; + const loggedMethod = (message = '') => { return (target: object, propertyKey: string, descriptor: PropertyDescriptor) => { const originalMethod = descriptor.value; // Now, over-write the original method - descriptor.value = function (...args: unknown[]) { + descriptor.value = function(...args: unknown[]) { // Execute custom logic - console.log(`Called %c${propertyKey}(${args})`, 'color: green; font-size: 14px; font-style: italic; font-weight: bold;', message ? `| message = ${message}` : ''); + console.log(chalk.green.bold(`🔊 Called ${propertyKey}(${args})`), message ? `| message = ${message}` : ''); // Call original function return originalMethod.apply(this, args); @@ -15,4 +17,40 @@ const loggedMethod = (message = '') => { }; }; -export { loggedMethod }; +const measureTime = () => { + const logTime = (methodName: string, duration: number) => { + console.log(chalk.green.bold(`\u23f3 Method ${methodName} took ${duration.toFixed(2)}ms`)); + }; + + return (target: object, propertyKey: string, descriptor: PropertyDescriptor) => { + const originalMethod = descriptor.value; + + descriptor.value = function(...args: unknown[]) { + const start = performance.now(); + const result = originalMethod.apply(this, args); + + // If result is a Promise (thenable), handle asynchronously + if (result && typeof (result as Promise).then === 'function') { + return (result as Promise) + .then((res) => { + const end = performance.now(); + + logTime(propertyKey, end - start); + + return res; + }); + } + + // Synchronous result + const end = performance.now(); + + logTime(propertyKey, end - start); + + return result; + }; + + return descriptor; + } +}; + +export { loggedMethod, measureTime }; diff --git a/services/users-service/src/users/users.controller.ts b/services/users-service/src/users/users.controller.ts index 5fcac63..2f22ac2 100644 --- a/services/users-service/src/users/users.controller.ts +++ b/services/users-service/src/users/users.controller.ts @@ -1,5 +1,5 @@ import { CreateUserDto, UpdateUserDto } from '@gh/shared'; -import { loggedMethod } from '@gh/shared/utils'; +import { loggedMethod, measureTime } from '@gh/shared/utils'; import { Controller, Get } from '@nestjs/common'; import { MessagePattern } from '@nestjs/microservices'; import { UsersService } from './users.service'; @@ -28,6 +28,7 @@ export class UsersController { @MessagePattern('get_user_by_email') @loggedMethod('Users microservice: Get user by email') + @measureTime() getUserByEmail(email: string) { return this.usersService.getUserByEmail(email); }