From 0e4a1e7419812dddada6a01452cfa4e9d55fd6a8 Mon Sep 17 00:00:00 2001 From: Philipinho <16838612+Philipinho@users.noreply.github.com> Date: Thu, 26 Mar 2026 00:41:38 +0000 Subject: [PATCH 1/5] enum validation --- .../src/core/workspace/dto/update-workspace-user-role.dto.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/server/src/core/workspace/dto/update-workspace-user-role.dto.ts b/apps/server/src/core/workspace/dto/update-workspace-user-role.dto.ts index 2dc52a3b..4df9222e 100644 --- a/apps/server/src/core/workspace/dto/update-workspace-user-role.dto.ts +++ b/apps/server/src/core/workspace/dto/update-workspace-user-role.dto.ts @@ -1,4 +1,5 @@ -import { IsNotEmpty, IsString, IsUUID } from 'class-validator'; +import { IsEnum, IsNotEmpty, IsUUID } from 'class-validator'; +import { UserRole } from '../../../common/helpers/types/permission'; export class UpdateWorkspaceUserRoleDto { @IsNotEmpty() @@ -6,6 +7,6 @@ export class UpdateWorkspaceUserRoleDto { userId: string; @IsNotEmpty() - @IsString() + @IsEnum(UserRole) role: string; } From 53608eae35b533bd7675e6d4ba91f27bc442a3b1 Mon Sep 17 00:00:00 2001 From: Philipinho <16838612+Philipinho@users.noreply.github.com> Date: Thu, 26 Mar 2026 13:59:17 +0000 Subject: [PATCH 2/5] clean up ws --- apps/server/src/ws/ws.gateway.ts | 5 ++--- apps/server/src/ws/ws.service.ts | 9 +++++++++ apps/server/src/ws/ws.utils.ts | 1 + 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/apps/server/src/ws/ws.gateway.ts b/apps/server/src/ws/ws.gateway.ts index 231dfade..fd6810c8 100644 --- a/apps/server/src/ws/ws.gateway.ts +++ b/apps/server/src/ws/ws.gateway.ts @@ -65,12 +65,10 @@ export class WsGateway async handleMessage(client: Socket, data: any): Promise { if (this.wsService.isTreeEvent(data)) { await this.wsService.handleTreeEvent(client, data); - return; } - - client.broadcast.emit('message', data); } + /* @SubscribeMessage('join-room') handleJoinRoom(client: Socket, @MessageBody() roomName: string): void { // if room is a space, check if user has permissions @@ -81,6 +79,7 @@ export class WsGateway handleLeaveRoom(client: Socket, @MessageBody() roomName: string): void { client.leave(roomName); } + */ onModuleDestroy() { if (this.server) { diff --git a/apps/server/src/ws/ws.service.ts b/apps/server/src/ws/ws.service.ts index 3cdccf6b..23d41909 100644 --- a/apps/server/src/ws/ws.service.ts +++ b/apps/server/src/ws/ws.service.ts @@ -27,6 +27,15 @@ export class WsService { async handleTreeEvent(client: Socket, data: any): Promise { const room = getSpaceRoomName(data.spaceId); + if (!client.rooms.has(room)) { + return; + } + + if (data.operation === 'refetchRootTreeNodeEvent') { + client.broadcast.to(room).emit('message', data); + return; + } + const hasRestrictions = await this.spaceHasRestrictions(data.spaceId); if (!hasRestrictions) { client.broadcast.to(room).emit('message', data); diff --git a/apps/server/src/ws/ws.utils.ts b/apps/server/src/ws/ws.utils.ts index 0cf460f1..c0d48b54 100644 --- a/apps/server/src/ws/ws.utils.ts +++ b/apps/server/src/ws/ws.utils.ts @@ -14,4 +14,5 @@ export const TREE_EVENTS = new Set([ 'addTreeNode', 'moveTreeNode', 'deleteTreeNode', + 'refetchRootTreeNodeEvent', ]); From 2f92278a9d0eb7c94ad6e6884220e5d07e3cef27 Mon Sep 17 00:00:00 2001 From: Philipinho <16838612+Philipinho@users.noreply.github.com> Date: Thu, 26 Mar 2026 16:35:05 +0000 Subject: [PATCH 3/5] sync --- apps/server/src/ee | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/server/src/ee b/apps/server/src/ee index 73b69538..e7a6b77b 160000 --- a/apps/server/src/ee +++ b/apps/server/src/ee @@ -1 +1 @@ -Subproject commit 73b6953888a626ef8a6c02cdc372d52b4ea031c6 +Subproject commit e7a6b77b7b46ca88ab91b83d1f0267b5eb3538c1 From 7b0d8fe140269163a03142faf61047f458c8d39d Mon Sep 17 00:00:00 2001 From: Philipinho <16838612+Philipinho@users.noreply.github.com> Date: Thu, 26 Mar 2026 16:46:40 +0000 Subject: [PATCH 4/5] override --- package.json | 4 +++- pnpm-lock.yaml | 22 ++++++++++++---------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/package.json b/package.json index 3bc5e0c1..32418295 100644 --- a/package.json +++ b/package.json @@ -119,7 +119,9 @@ "express-rate-limit": "8.2.2", "minimatch@^3": "3.1.5", "minimatch@^5": "5.1.8", - "flatted": "3.4.2" + "flatted": "3.4.2", + "picomatch@<2.3.2": "2.3.2", + "fastify": "5.8.3" }, "neverBuiltDependencies": [] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b979f3c6..d3495aae 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -27,6 +27,8 @@ overrides: minimatch@^3: 3.1.5 minimatch@^5: 5.1.8 flatted: 3.4.2 + picomatch@<2.3.2: 2.3.2 + fastify: 5.8.3 patchedDependencies: '@tiptap/core': @@ -7003,8 +7005,8 @@ packages: fastify-plugin@5.1.0: resolution: {integrity: sha512-FAIDA8eovSt5qcDgcBvDuX/v0Cjz0ohGhENZ/wpc3y+oZCY2afZ9Baqql3g/lC+OHRnciQol4ww7tuthOb9idw==} - fastify@5.8.2: - resolution: {integrity: sha512-lZmt3navvZG915IE+f7/TIVamxIwmBd+OMB+O9WBzcpIwOo6F0LTh0sluoMFk5VkrKTvvrwIaoJPkir4Z+jtAg==} + fastify@5.8.3: + resolution: {integrity: sha512-XJXpRQ41+rsJ/GLeP9vyDC+fBXilcTlEXokMSexkdEkla4uf7ZQNaI5xl3el+kW5TZQulqYxLr659ey/KX7XmQ==} fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} @@ -8975,8 +8977,8 @@ packages: picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@2.3.1: - resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + picomatch@2.3.2: + resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} engines: {node: '>=8.6'} picomatch@4.0.2: @@ -13574,7 +13576,7 @@ snapshots: '@nestjs/common': 11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2) '@nestjs/core': 11.1.17(@nestjs/common@11.1.17(class-transformer@0.5.1)(class-validator@0.15.1)(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/websockets@11.1.17)(reflect-metadata@0.2.2)(rxjs@7.8.2) fast-querystring: 1.1.2 - fastify: 5.8.2 + fastify: 5.8.3 fastify-plugin: 5.1.0 find-my-way: 9.5.0 light-my-request: 6.6.0 @@ -16359,7 +16361,7 @@ snapshots: anymatch@3.1.3: dependencies: normalize-path: 3.0.0 - picomatch: 2.3.1 + picomatch: 2.3.2 arg@4.1.3: {} @@ -18057,7 +18059,7 @@ snapshots: fastify-plugin@5.1.0: {} - fastify@5.8.2: + fastify@5.8.3: dependencies: '@fastify/ajv-compiler': 4.0.5 '@fastify/error': 4.0.0 @@ -19697,7 +19699,7 @@ snapshots: micromatch@4.0.8: dependencies: braces: 3.0.3 - picomatch: 2.3.1 + picomatch: 2.3.2 mime-db@1.52.0: {} @@ -20265,7 +20267,7 @@ snapshots: picocolors@1.1.1: {} - picomatch@2.3.1: {} + picomatch@2.3.2: {} picomatch@4.0.2: {} @@ -20900,7 +20902,7 @@ snapshots: readdirp@3.6.0: dependencies: - picomatch: 2.3.1 + picomatch: 2.3.2 readdirp@4.0.2: {} From 4e8f533b9170931a8b469c54813cc09482fafef8 Mon Sep 17 00:00:00 2001 From: Philipinho <16838612+Philipinho@users.noreply.github.com> Date: Thu, 26 Mar 2026 16:48:33 +0000 Subject: [PATCH 5/5] override --- package.json | 5 +++- pnpm-lock.yaml | 75 ++++++++++++++++++++++++-------------------------- 2 files changed, 40 insertions(+), 40 deletions(-) diff --git a/package.json b/package.json index 32418295..63994abd 100644 --- a/package.json +++ b/package.json @@ -121,7 +121,10 @@ "minimatch@^5": "5.1.8", "flatted": "3.4.2", "picomatch@<2.3.2": "2.3.2", - "fastify": "5.8.3" + "picomatch@>=4.0.0 <4.0.4": "4.0.4", + "fastify": "5.8.3", + "yaml@>=1.0.0 <1.10.3": "1.10.3", + "yaml@>=2.0.0 <2.8.3": "2.8.3" }, "neverBuiltDependencies": [] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d3495aae..d7601191 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -28,7 +28,10 @@ overrides: minimatch@^5: 5.1.8 flatted: 3.4.2 picomatch@<2.3.2: 2.3.2 + picomatch@>=4.0.0 <4.0.4: 4.0.4 fastify: 5.8.3 + yaml@>=1.0.0 <1.10.3: 1.10.3 + yaml@>=2.0.0 <2.8.3: 2.8.3 patchedDependencies: '@tiptap/core': @@ -403,7 +406,7 @@ importers: version: 18.3.1 '@vitejs/plugin-react': specifier: ^6.0.0 - version: 6.0.1(vite@8.0.1(@types/node@22.19.1)(esbuild@0.27.4)(jiti@2.4.2)(less@4.2.0)(sugarss@5.0.1(postcss@8.5.8))(terser@5.39.0)(tsx@4.21.0)(yaml@2.7.0)) + version: 6.0.1(vite@8.0.1(@types/node@22.19.1)(esbuild@0.27.4)(jiti@2.4.2)(less@4.2.0)(sugarss@5.0.1(postcss@8.5.8))(terser@5.39.0)(tsx@4.21.0)(yaml@2.8.3)) eslint: specifier: ^9.28.0 version: 9.39.4(jiti@2.4.2) @@ -442,7 +445,7 @@ importers: version: 8.57.1(eslint@9.39.4(jiti@2.4.2))(typescript@5.9.3) vite: specifier: ^8.0.1 - version: 8.0.1(@types/node@22.19.1)(esbuild@0.27.4)(jiti@2.4.2)(less@4.2.0)(sugarss@5.0.1(postcss@8.5.8))(terser@5.39.0)(tsx@4.21.0)(yaml@2.7.0) + version: 8.0.1(@types/node@22.19.1)(esbuild@0.27.4)(jiti@2.4.2)(less@4.2.0)(sugarss@5.0.1(postcss@8.5.8))(terser@5.39.0)(tsx@4.21.0)(yaml@2.8.3) apps/server: dependencies: @@ -7018,7 +7021,7 @@ packages: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} peerDependencies: - picomatch: ^3 || ^4 + picomatch: 4.0.4 peerDependenciesMeta: picomatch: optional: true @@ -8981,12 +8984,8 @@ packages: resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} engines: {node: '>=8.6'} - picomatch@4.0.2: - resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} - engines: {node: '>=12'} - - picomatch@4.0.3: - resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + picomatch@4.0.4: + resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} engines: {node: '>=12'} pify@4.0.1: @@ -10455,7 +10454,7 @@ packages: sugarss: ^5.0.0 terser: ^5.16.0 tsx: ^4.8.1 - yaml: ^2.4.2 + yaml: 2.8.3 peerDependenciesMeta: '@types/node': optional: true @@ -10735,13 +10734,13 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yaml@1.10.2: - resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + yaml@1.10.3: + resolution: {integrity: sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==} engines: {node: '>= 6'} - yaml@2.7.0: - resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} - engines: {node: '>= 14'} + yaml@2.8.3: + resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==} + engines: {node: '>= 14.6'} hasBin: true yargs-parser@18.1.3: @@ -10868,7 +10867,7 @@ snapshots: ajv: 8.18.0 ajv-formats: 3.0.1(ajv@8.18.0) jsonc-parser: 3.3.1 - picomatch: 4.0.2 + picomatch: 4.0.4 rxjs: 7.8.1 source-map: 0.7.4 optionalDependencies: @@ -10879,7 +10878,7 @@ snapshots: ajv: 8.18.0 ajv-formats: 3.0.1(ajv@8.18.0) jsonc-parser: 3.3.1 - picomatch: 4.0.2 + picomatch: 4.0.4 rxjs: 7.8.1 source-map: 0.7.4 optionalDependencies: @@ -13712,7 +13711,7 @@ snapshots: jsonc-parser: 3.2.0 npm-run-path: 4.0.1 picocolors: 1.1.1 - picomatch: 4.0.2 + picomatch: 4.0.4 semver: 7.7.4 source-map-support: 0.5.19 tinyglobby: 0.2.15 @@ -13762,7 +13761,7 @@ snapshots: chalk: 4.1.2 enquirer: 2.3.6 nx: 22.6.1 - picomatch: 4.0.2 + picomatch: 4.0.4 semver: 7.7.4 tslib: 2.8.1 yargs-parser: 21.1.1 @@ -16149,10 +16148,10 @@ snapshots: '@vercel/oidc@3.1.0': {} - '@vitejs/plugin-react@6.0.1(vite@8.0.1(@types/node@22.19.1)(esbuild@0.27.4)(jiti@2.4.2)(less@4.2.0)(sugarss@5.0.1(postcss@8.5.8))(terser@5.39.0)(tsx@4.21.0)(yaml@2.7.0))': + '@vitejs/plugin-react@6.0.1(vite@8.0.1(@types/node@22.19.1)(esbuild@0.27.4)(jiti@2.4.2)(less@4.2.0)(sugarss@5.0.1(postcss@8.5.8))(terser@5.39.0)(tsx@4.21.0)(yaml@2.8.3))': dependencies: '@rolldown/pluginutils': 1.0.0-rc.7 - vite: 8.0.1(@types/node@22.19.1)(esbuild@0.27.4)(jiti@2.4.2)(less@4.2.0)(sugarss@5.0.1(postcss@8.5.8))(terser@5.39.0)(tsx@4.21.0)(yaml@2.7.0) + vite: 8.0.1(@types/node@22.19.1)(esbuild@0.27.4)(jiti@2.4.2)(less@4.2.0)(sugarss@5.0.1(postcss@8.5.8))(terser@5.39.0)(tsx@4.21.0)(yaml@2.8.3) '@webassemblyjs/ast@1.14.1': dependencies: @@ -17009,7 +17008,7 @@ snapshots: import-fresh: 3.3.0 parse-json: 5.2.0 path-type: 4.0.0 - yaml: 1.10.2 + yaml: 1.10.3 cosmiconfig@8.3.6(typescript@5.9.3): dependencies: @@ -18085,9 +18084,9 @@ snapshots: dependencies: bser: 2.1.1 - fdir@6.5.0(picomatch@4.0.3): + fdir@6.5.0(picomatch@4.0.4): optionalDependencies: - picomatch: 4.0.3 + picomatch: 4.0.4 fflate@0.4.8: {} @@ -18951,7 +18950,7 @@ snapshots: jest-regex-util: 30.0.1 jest-util: 30.3.0 jest-worker: 30.3.0 - picomatch: 4.0.3 + picomatch: 4.0.4 walker: 1.0.8 optionalDependencies: fsevents: 2.3.3 @@ -18994,7 +18993,7 @@ snapshots: '@types/stack-utils': 2.0.3 chalk: 4.1.2 graceful-fs: 4.2.11 - picomatch: 4.0.3 + picomatch: 4.0.4 pretty-format: 30.3.0 slash: 3.0.0 stack-utils: 2.0.6 @@ -19122,7 +19121,7 @@ snapshots: chalk: 4.1.2 ci-info: 4.4.0 graceful-fs: 4.2.11 - picomatch: 4.0.3 + picomatch: 4.0.4 jest-util@30.3.0: dependencies: @@ -19131,7 +19130,7 @@ snapshots: chalk: 4.1.2 ci-info: 4.4.0 graceful-fs: 4.2.11 - picomatch: 4.0.3 + picomatch: 4.0.4 jest-validate@30.3.0: dependencies: @@ -19902,7 +19901,7 @@ snapshots: tree-kill: 1.2.2 tsconfig-paths: 4.2.0 tslib: 2.8.1 - yaml: 2.7.0 + yaml: 2.8.3 yargs: 17.7.2 yargs-parser: 21.1.1 optionalDependencies: @@ -20269,9 +20268,7 @@ snapshots: picomatch@2.3.2: {} - picomatch@4.0.2: {} - - picomatch@4.0.3: {} + picomatch@4.0.4: {} pify@4.0.1: optional: true @@ -21604,8 +21601,8 @@ snapshots: tinyglobby@0.2.15: dependencies: - fdir: 6.5.0(picomatch@4.0.3) - picomatch: 4.0.3 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 tiptap-extension-global-drag-handle@0.1.18: {} @@ -21996,10 +21993,10 @@ snapshots: vary@1.1.2: {} - vite@8.0.1(@types/node@22.19.1)(esbuild@0.27.4)(jiti@2.4.2)(less@4.2.0)(sugarss@5.0.1(postcss@8.5.8))(terser@5.39.0)(tsx@4.21.0)(yaml@2.7.0): + vite@8.0.1(@types/node@22.19.1)(esbuild@0.27.4)(jiti@2.4.2)(less@4.2.0)(sugarss@5.0.1(postcss@8.5.8))(terser@5.39.0)(tsx@4.21.0)(yaml@2.8.3): dependencies: lightningcss: 1.32.0 - picomatch: 4.0.3 + picomatch: 4.0.4 postcss: 8.5.8 rolldown: 1.0.0-rc.10 tinyglobby: 0.2.15 @@ -22012,7 +22009,7 @@ snapshots: sugarss: 5.0.1(postcss@8.5.8) terser: 5.39.0 tsx: 4.21.0 - yaml: 2.7.0 + yaml: 2.8.3 void-elements@3.1.0: {} @@ -22289,9 +22286,9 @@ snapshots: yallist@3.1.1: {} - yaml@1.10.2: {} + yaml@1.10.3: {} - yaml@2.7.0: {} + yaml@2.8.3: {} yargs-parser@18.1.3: dependencies: