diff --git a/.env b/.env index 403641853..ffab39ec9 100644 --- a/.env +++ b/.env @@ -41,5 +41,6 @@ GOOGLE_ARTIFACT_UPLOADER_KEY_FILE=anymal-grand-tour-3b7a5d0c8ef4.json # can be left empty if you don't want to use docker hub DOCKER_HUB_USERNAME= DOCKER_HUB_PASSWORD= +VITE_DOCKER_HUB_NAMESPACE= ARTIFACTS_UPLOADER_IMAGE=rslethz/grandtour-datasets:artifact-uploader-latest \ No newline at end of file diff --git a/.github/workflows/check_version_number.yml b/.github/workflows/check_version_number.yml index e7ba786f7..5493eccd9 100644 --- a/.github/workflows/check_version_number.yml +++ b/.github/workflows/check_version_number.yml @@ -15,7 +15,7 @@ jobs: - name: Checkout repository uses: actions/checkout@v5 - - uses: actions/setup-node@v5 + - uses: actions/setup-node@v6 with: node-version: '22' package-manager-cache: false diff --git a/.github/workflows/create_release.yml b/.github/workflows/create_release.yml index 35842ee4d..d98d699ee 100644 --- a/.github/workflows/create_release.yml +++ b/.github/workflows/create_release.yml @@ -15,7 +15,7 @@ jobs: - name: Checkout repository uses: actions/checkout@v5 - - uses: actions/setup-node@v5 + - uses: actions/setup-node@v6 with: node-version: '22' package-manager-cache: false diff --git a/.github/workflows/draft-pdf.yml b/.github/workflows/draft-pdf.yml index bbaddfb03..796a98f80 100644 --- a/.github/workflows/draft-pdf.yml +++ b/.github/workflows/draft-pdf.yml @@ -19,7 +19,7 @@ jobs: # This should be the path to the paper within your repo. paper-path: openjournals/paper.md - name: Upload - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: paper # This is the output path where Pandoc will write the compiled diff --git a/.github/workflows/eslint.yml b/.github/workflows/eslint.yml index 0a058fc7e..8807ae4c4 100644 --- a/.github/workflows/eslint.yml +++ b/.github/workflows/eslint.yml @@ -14,7 +14,7 @@ jobs: - uses: actions/checkout@v5 - name: Use Node.js - uses: actions/setup-node@v5 + uses: actions/setup-node@v6 with: node-version: '22' package-manager-cache: false diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f29abbeda..0167a2bf2 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -21,7 +21,7 @@ jobs: - uses: actions/checkout@v5 - name: Use Node.js - uses: actions/setup-node@v5 + uses: actions/setup-node@v6 with: node-version: '22' package-manager-cache: false diff --git a/backend/package.json b/backend/package.json index 720e7b918..f5ef39b61 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "kleinkram-backend", - "version": "0.51.0", + "version": "0.52.0", "description": "", "author": "", "private": true, @@ -20,10 +20,10 @@ "dependencies": { "@aws-sdk/client-sts": "3.726.1", "@google-cloud/local-auth": "^3.0.1", - "@nestjs/common": "^10.4.7", + "@nestjs/common": "^10.4.20", "@nestjs/config": "^4.0.2", "@nestjs/core": "^10.4.5", - "@nestjs/jwt": "^11.0.0", + "@nestjs/jwt": "^11.0.1", "@nestjs/mapped-types": "^2.0.5", "@nestjs/passport": "^11.0.5", "@nestjs/platform-express": "^10.4.20", @@ -41,7 +41,7 @@ "@opentelemetry/instrumentation-winston": "^0.51.0", "@opentelemetry/sdk-node": "^0.206.0", "@opentelemetry/sdk-trace-base": "^2.0.0", - "@swc/core": "^1.13.3", + "@swc/core": "^1.13.5", "@swc/jest": "^0.2.39", "@willsoto/nestjs-prometheus": "^6.0.1", "aws4": "^1.13.2", @@ -82,19 +82,19 @@ "@types/cookie-parser": "^1.4.9", "@types/express": "^5.0.3", "@types/jest": "^29.5.2", - "@types/node": "^24.0.7", + "@types/node": "^24.9.1", "@types/supertest": "^6.0.3", "@types/passport-github": "^1.1.12", "@types/multer": "^2.0.0", "@types/passport-google-oauth20": "^2.0.16", "@typescript-eslint/eslint-plugin": "^8.32.1", "@typescript-eslint/parser": "^8.25.0", - "eslint": "^9.36.0", + "eslint": "^9.37.0", "eslint-config-prettier": "^10.1.8", "eslint-plugin-prettier": "^5.5.4", "jest": "^29.7.0", "jest-junit": "^16.0.0", - "prettier": "^3.0.0", + "prettier": "^3.6.2", "source-map-support": "^0.5.21", "supertest": "^7.1.4", "ts-jest": "^29.4.4", diff --git a/backend/src/serialization.ts b/backend/src/serialization.ts index 31b359718..80b211495 100644 --- a/backend/src/serialization.ts +++ b/backend/src/serialization.ts @@ -62,12 +62,8 @@ export const missionEntityToDtoWithCreator = ( export const missionEntityToFlatDto = (mission: Mission): FlatMissionDto => { return { ...missionEntityToDtoWithCreator(mission), - filesCount: mission.files?.length || 0, - size: - mission.files?.reduce( - (accumulator, file) => accumulator + (file.size ?? 0), - 0, - ) || 0, + filesCount: mission.fileCount ?? 0, + size: mission.size ?? 0, }; }; diff --git a/backend/src/services/action.service.ts b/backend/src/services/action.service.ts index ef6d5d7d9..ca3caea67 100644 --- a/backend/src/services/action.service.ts +++ b/backend/src/services/action.service.ts @@ -100,9 +100,14 @@ export class ActionService { data: CreateTemplateDto, auth: AuthHeader, ): Promise { - if (!data.dockerImage.startsWith('rslethz/')) { + const dockerhub_namespace = process.env['VITE_DOCKER_HUB_NAMESPACE']; + // assert that we only run images from a specified namespace + if ( + dockerhub_namespace !== undefined && + !data.dockerImage.startsWith(dockerhub_namespace) + ) { throw new ConflictException( - 'Only images from the rslethz namespace are allowed', + `Only images from the ${dockerhub_namespace} namespace are allowed`, ); } const exists = await this.actionTemplateRepository.exists({ @@ -140,11 +145,11 @@ export class ActionService { data: UpdateTemplateDto, auth: AuthHeader, ): Promise { - if (!data.dockerImage.startsWith('rslethz/')) { - throw new ConflictException( - 'Only images from the rslethz namespace are allowed', - ); - } + //if (!data.dockerImage.startsWith('rslethz/')) { + // throw new ConflictException( + // 'Only images from the rslethz namespace are allowed', + // ); + //} const template = await this.actionTemplateRepository.findOneOrFail({ where: { uuid: data.uuid }, }); diff --git a/backend/src/services/mission.service.ts b/backend/src/services/mission.service.ts index 5bd215a0d..ed97cbf41 100644 --- a/backend/src/services/mission.service.ts +++ b/backend/src/services/mission.service.ts @@ -32,7 +32,12 @@ import { } from '../serialization'; import { TagService } from './tag.service'; import { UserService } from './user.service'; -import { addMissionFilters, addProjectFilters, addSort } from './utilities'; +import { + addFileStats, + addMissionFilters, + addProjectFilters, + addSort, +} from './utilities'; import { SortOrder } from '@common/api/types/pagination'; @@ -162,24 +167,25 @@ export class MissionService { take: number, userUuid: string, ): Promise { - let query = this.missionRepository + let idQuery = this.missionRepository .createQueryBuilder('mission') - .leftJoinAndSelect('mission.project', 'project') - .leftJoinAndSelect('mission.creator', 'creator') - .leftJoinAndSelect('mission.tags', 'tag') - .leftJoinAndSelect('tag.tagType', 'tagType'); + .select('mission.uuid') + .leftJoin('mission.project', 'project') + .leftJoin('mission.creator', 'creator') + .leftJoin('mission.tags', 'tag') + .leftJoin('tag.tagType', 'tagType'); - query = addAccessConstraintsToMissionQuery(query, userUuid); + idQuery = addAccessConstraintsToMissionQuery(idQuery, userUuid); - query = addProjectFilters( - query, + idQuery = addProjectFilters( + idQuery, this.projectRepository, projectUuids, projectPatterns, ); - query = addMissionFilters( - query, + idQuery = addMissionFilters( + idQuery, this.missionRepository, missionUuids, missionPatterns, @@ -187,11 +193,78 @@ export class MissionService { ); if (sortBy !== undefined) { - query = addSort(query, FIND_MANY_SORT_KEYS, sortBy, sortOrder); + idQuery = addSort(idQuery, FIND_MANY_SORT_KEYS, sortBy, sortOrder); } - query.take(take).skip(skip); - const [missions, count] = await query.getManyAndCount(); + // Get distinct mission UUIDs + idQuery.groupBy('mission.uuid'); + + // Get count before pagination + const count = await idQuery.getCount(); + idQuery.take(take).skip(skip); + + const missionIds = await idQuery.getRawMany(); + + if (missionIds.length === 0) { + return { + data: [], + count, + skip, + take, + }; + } + + let dataQuery = this.missionRepository + .createQueryBuilder('mission') + .leftJoinAndSelect('mission.project', 'project') + .leftJoinAndSelect('mission.creator', 'creator') + .leftJoinAndSelect('mission.tags', 'tag') + .leftJoinAndSelect('tag.tagType', 'tagType') + .where('mission.uuid IN (:...missionIds)', { + missionIds: missionIds.map((m) => m.mission_uuid), + }); + + if (sortBy !== undefined) { + dataQuery = addSort( + dataQuery, + FIND_MANY_SORT_KEYS, + sortBy, + sortOrder, + ); + } + + dataQuery = addFileStats(dataQuery); + + const result = await dataQuery.getRawAndEntities(); + const missions = result.entities; + const rawResults = result.raw; + + // Create a map for quick lookup of file stats by mission UUID + const statsMap = new Map< + string, + { fileCount: number; fileSize: number } + >(); + for (const raw of rawResults) { + const missionUuid = raw.mission_uuid; + if (!statsMap.has(missionUuid)) { + statsMap.set(missionUuid, { + fileCount: Number.parseInt(raw.fileCount) || 0, + fileSize: Number.parseInt(raw.fileSize) || 0, + }); + } + } + + // Assign file stats to missions + for (const mission of missions) { + const stats = statsMap.get(mission.uuid); + if (stats) { + mission.fileCount = stats.fileCount; + mission.size = stats.fileSize; + } else { + mission.fileCount = 0; + mission.size = 0; + } + } return { data: missions.map((element) => missionEntityToFlatDto(element)), diff --git a/backend/src/services/utilities.ts b/backend/src/services/utilities.ts index 6719ce385..48fec29ef 100644 --- a/backend/src/services/utilities.ts +++ b/backend/src/services/utilities.ts @@ -204,6 +204,26 @@ export const addMissionCount = ( return query; }; +export const addFileStats = ( + query: SelectQueryBuilder, +): SelectQueryBuilder => { + query + .addSelect((subQuery) => { + return subQuery + .select('COUNT(file.uuid)', 'count') + .from('file_entity', 'file') + .where('file."missionUuid" = mission.uuid'); + }, 'fileCount') + .addSelect((subQuery) => { + return subQuery + .select('COALESCE(SUM(file.size), 0)', 'sum') + .from('file_entity', 'file') + .where('file."missionUuid" = mission.uuid'); + }, 'fileSize'); + + return query; +}; + export const addProjectCreatorFilter = ( query: SelectQueryBuilder, creatorUuid: string | undefined, diff --git a/backend/yarn.lock b/backend/yarn.lock index 853932b34..ad5b6e3ba 100644 --- a/backend/yarn.lock +++ b/backend/yarn.lock @@ -1161,15 +1161,17 @@ debug "^4.3.1" minimatch "^3.1.2" -"@eslint/config-helpers@^0.3.1": - version "0.3.1" - resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.3.1.tgz#d316e47905bd0a1a931fa50e669b9af4104d1617" - integrity sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA== +"@eslint/config-helpers@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.4.0.tgz#e9f94ba3b5b875e32205cb83fece18e64486e9e6" + integrity sha512-WUFvV4WoIwW8Bv0KeKCIIEgdSiFOsulyN0xrMu+7z43q/hkOLXjvb5u7UC9jDxvRzcrbEmuZBX5yJZz1741jog== + dependencies: + "@eslint/core" "^0.16.0" -"@eslint/core@^0.15.2": - version "0.15.2" - resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.15.2.tgz#59386327d7862cc3603ebc7c78159d2dcc4a868f" - integrity sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg== +"@eslint/core@^0.16.0": + version "0.16.0" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.16.0.tgz#490254f275ba9667ddbab344f4f0a6b7a7bd7209" + integrity sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q== dependencies: "@types/json-schema" "^7.0.15" @@ -1188,22 +1190,22 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@9.36.0": - version "9.36.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.36.0.tgz#b1a3893dd6ce2defed5fd49de805ba40368e8fef" - integrity sha512-uhCbYtYynH30iZErszX78U+nR3pJU3RHGQ57NXy5QupD4SBVwDeU8TNBy+MjMngc1UyIW9noKqsRqfjQTBU2dw== +"@eslint/js@9.37.0": + version "9.37.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.37.0.tgz#0cfd5aa763fe5d1ee60bedf84cd14f54bcf9e21b" + integrity sha512-jaS+NJ+hximswBG6pjNX0uEJZkrT0zwpVi3BA3vX22aFGjJjmgSTSmPpZCRKmoBL5VY/M6p0xsSJx7rk7sy5gg== "@eslint/object-schema@^2.1.6": version "2.1.6" resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.6.tgz#58369ab5b5b3ca117880c0f6c0b0f32f6950f24f" integrity sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA== -"@eslint/plugin-kit@^0.3.5": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.3.5.tgz#fd8764f0ee79c8ddab4da65460c641cefee017c5" - integrity sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w== +"@eslint/plugin-kit@^0.4.0": + version "0.4.0" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.4.0.tgz#f6a245b42886abf6fc9c7ab7744a932250335ab2" + integrity sha512-sB5uyeq+dwCWyPi31B2gQlVlo+j5brPlWx4yZBrEaRo/nhdDE8Xke1gsGgtiBdaBTxuTkceLVuVt/pclrasb0A== dependencies: - "@eslint/core" "^0.15.2" + "@eslint/core" "^0.16.0" levn "^0.4.1" "@google-cloud/local-auth@^3.0.1": @@ -2111,10 +2113,10 @@ webpack "5.100.2" webpack-node-externals "3.0.0" -"@nestjs/common@^10.4.7": - version "10.4.17" - resolved "https://registry.yarnpkg.com/@nestjs/common/-/common-10.4.17.tgz#fa278d4b2a41a9180023d42b6899bfd290a34eeb" - integrity sha512-NKzPA4Tb35XjlxizsT8KZb3CCX8tNKj5EnsXsTl/gZX//uAWccBsqB8BjU69x/u4/kQ0106/Kt6PP+yrHAez0w== +"@nestjs/common@^10.4.20": + version "10.4.20" + resolved "https://registry.yarnpkg.com/@nestjs/common/-/common-10.4.20.tgz#db021ccfcae398c1cd6c8bc808a169285978d687" + integrity sha512-hxJxZF7jcKGuUzM9EYbuES80Z/36piJbiqmPy86mk8qOn5gglFebBTvcx7PWVbRNSb4gngASYnefBj/Y2HAzpQ== dependencies: uid "2.0.2" file-type "20.4.1" @@ -2142,12 +2144,12 @@ path-to-regexp "3.3.0" tslib "2.8.1" -"@nestjs/jwt@^11.0.0": - version "11.0.0" - resolved "https://registry.yarnpkg.com/@nestjs/jwt/-/jwt-11.0.0.tgz#aef1590e70830c70fba0f59e9b17314dc4d36822" - integrity sha512-v7YRsW3Xi8HNTsO+jeHSEEqelX37TVWgwt+BcxtkG/OfXJEOs6GZdbdza200d6KqId1pJQZ6UPj1F0M6E+mxaA== +"@nestjs/jwt@^11.0.1": + version "11.0.1" + resolved "https://registry.yarnpkg.com/@nestjs/jwt/-/jwt-11.0.1.tgz#3109ba23932330f4001db9e41e4374f2e41342df" + integrity sha512-HXSsc7SAnCnjA98TsZqrE7trGtHDnYXWp4Ffy6LwSmck1QvbGYdMzBquXofX5l6tIRpeY4Qidl2Ti2CVG77Pdw== dependencies: - "@types/jsonwebtoken" "9.0.7" + "@types/jsonwebtoken" "9.0.10" jsonwebtoken "9.0.2" "@nestjs/mapped-types@2.0.6": @@ -3217,74 +3219,74 @@ resolved "https://registry.yarnpkg.com/@sqltools/formatter/-/formatter-1.2.5.tgz#3abc203c79b8c3e90fd6c156a0c62d5403520e12" integrity sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw== -"@swc/core-darwin-arm64@1.13.3": - version "1.13.3" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.13.3.tgz#aaab6af81f255bdc9d3bf1d8d38457236cab1a02" - integrity sha512-ux0Ws4pSpBTqbDS9GlVP354MekB1DwYlbxXU3VhnDr4GBcCOimpocx62x7cFJkSpEBF8bmX8+/TTCGKh4PbyXw== - -"@swc/core-darwin-x64@1.13.3": - version "1.13.3" - resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.13.3.tgz#2f65063a9ffb169eec810d2d063d93d21b8ec593" - integrity sha512-p0X6yhxmNUOMZrbeZ3ZNsPige8lSlSe1llllXvpCLkKKxN/k5vZt1sULoq6Nj4eQ7KeHQVm81/+AwKZyf/e0TA== - -"@swc/core-linux-arm-gnueabihf@1.13.3": - version "1.13.3" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.13.3.tgz#1e4823f031f8ed8d77b0ea8ed70130cda2da6f1e" - integrity sha512-OmDoiexL2fVWvQTCtoh0xHMyEkZweQAlh4dRyvl8ugqIPEVARSYtaj55TBMUJIP44mSUOJ5tytjzhn2KFxFcBA== - -"@swc/core-linux-arm64-gnu@1.13.3": - version "1.13.3" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.13.3.tgz#1a82f884e9a73c5fb80a94ec67ee98e255f93cdd" - integrity sha512-STfKku3QfnuUj6k3g9ld4vwhtgCGYIFQmsGPPgT9MK/dI3Lwnpe5Gs5t1inoUIoGNP8sIOLlBB4HV4MmBjQuhw== - -"@swc/core-linux-arm64-musl@1.13.3": - version "1.13.3" - resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.13.3.tgz#f556489bec2451b8a3f28239e115a9480421c008" - integrity sha512-bc+CXYlFc1t8pv9yZJGus372ldzOVscBl7encUBlU1m/Sig0+NDJLz6cXXRcFyl6ABNOApWeR4Yl7iUWx6C8og== - -"@swc/core-linux-x64-gnu@1.13.3": - version "1.13.3" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.13.3.tgz#29e78da291a6ac800e807771a40f6a41d18f0ead" - integrity sha512-dFXoa0TEhohrKcxn/54YKs1iwNeW6tUkHJgXW33H381SvjKFUV53WR231jh1sWVJETjA3vsAwxKwR23s7UCmUA== - -"@swc/core-linux-x64-musl@1.13.3": - version "1.13.3" - resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.13.3.tgz#5f2b0639f54f89468ad2e464ba6b45ce19adeca2" - integrity sha512-ieyjisLB+ldexiE/yD8uomaZuZIbTc8tjquYln9Quh5ykOBY7LpJJYBWvWtm1g3pHv6AXlBI8Jay7Fffb6aLfA== - -"@swc/core-win32-arm64-msvc@1.13.3": - version "1.13.3" - resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.13.3.tgz#911185c11158b29a8884aea7036115a814a3725a" - integrity sha512-elTQpnaX5vESSbhCEgcwXjpMsnUbqqHfEpB7ewpkAsLzKEXZaK67ihSRYAuAx6ewRQTo7DS5iTT6X5aQD3MzMw== - -"@swc/core-win32-ia32-msvc@1.13.3": - version "1.13.3" - resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.13.3.tgz#279044bfdba0853f1afd138f582952461544e8e8" - integrity sha512-nvehQVEOdI1BleJpuUgPLrclJ0TzbEMc+MarXDmmiRFwEUGqj+pnfkTSb7RZyS1puU74IXdK/YhTirHurtbI9w== - -"@swc/core-win32-x64-msvc@1.13.3": - version "1.13.3" - resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.13.3.tgz#6069e132be45ac34ecb4d72730db53c60d6a5475" - integrity sha512-A+JSKGkRbPLVV2Kwx8TaDAV0yXIXm/gc8m98hSkVDGlPBBmydgzNdWy3X7HTUBM7IDk7YlWE7w2+RUGjdgpTmg== - -"@swc/core@^1.13.3": - version "1.13.3" - resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.13.3.tgz#7a8668d96a28b3431acc3b9652f2d3ff2b6e5531" - integrity sha512-ZaDETVWnm6FE0fc+c2UE8MHYVS3Fe91o5vkmGfgwGXFbxYvAjKSqxM/j4cRc9T7VZNSJjriXq58XkfCp3Y6f+w== +"@swc/core-darwin-arm64@1.13.5": + version "1.13.5" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.13.5.tgz#7638c073946f9297753ed9a2eb198d07b2336a24" + integrity sha512-lKNv7SujeXvKn16gvQqUQI5DdyY8v7xcoO3k06/FJbHJS90zEwZdQiMNRiqpYw/orU543tPaWgz7cIYWhbopiQ== + +"@swc/core-darwin-x64@1.13.5": + version "1.13.5" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.13.5.tgz#18061167378f0fb285e17818494bc6c89dd07551" + integrity sha512-ILd38Fg/w23vHb0yVjlWvQBoE37ZJTdlLHa8LRCFDdX4WKfnVBiblsCU9ar4QTMNdeTBEX9iUF4IrbNWhaF1Ng== + +"@swc/core-linux-arm-gnueabihf@1.13.5": + version "1.13.5" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.13.5.tgz#4c8062bd598049b5b9b0beb762e075e76b4c23c3" + integrity sha512-Q6eS3Pt8GLkXxqz9TAw+AUk9HpVJt8Uzm54MvPsqp2yuGmY0/sNaPPNVqctCX9fu/Nu8eaWUen0si6iEiCsazQ== + +"@swc/core-linux-arm64-gnu@1.13.5": + version "1.13.5" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.13.5.tgz#7222d321197ea9304e387933e87d775849fc1ae6" + integrity sha512-aNDfeN+9af+y+M2MYfxCzCy/VDq7Z5YIbMqRI739o8Ganz6ST+27kjQFd8Y/57JN/hcnUEa9xqdS3XY7WaVtSw== + +"@swc/core-linux-arm64-musl@1.13.5": + version "1.13.5" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.13.5.tgz#51e7958deaf37edc212bd9dc0ea1476f151d2bea" + integrity sha512-9+ZxFN5GJag4CnYnq6apKTnnezpfJhCumyz0504/JbHLo+Ue+ZtJnf3RhyA9W9TINtLE0bC4hKpWi8ZKoETyOQ== + +"@swc/core-linux-x64-gnu@1.13.5": + version "1.13.5" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.13.5.tgz#3476beab93ab03e92844d955ca9d9289aa4a5993" + integrity sha512-WD530qvHrki8Ywt/PloKUjaRKgstQqNGvmZl54g06kA+hqtSE2FTG9gngXr3UJxYu/cNAjJYiBifm7+w4nbHbA== + +"@swc/core-linux-x64-musl@1.13.5": + version "1.13.5" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.13.5.tgz#f4934b1e77e2a297909bb3ab977836205c36e5e0" + integrity sha512-Luj8y4OFYx4DHNQTWjdIuKTq2f5k6uSXICqx+FSabnXptaOBAbJHNbHT/06JZh6NRUouaf0mYXN0mcsqvkhd7Q== + +"@swc/core-win32-arm64-msvc@1.13.5": + version "1.13.5" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.13.5.tgz#5084c107435cfc82d4d901bfb388dc319d38a236" + integrity sha512-cZ6UpumhF9SDJvv4DA2fo9WIzlNFuKSkZpZmPG1c+4PFSEMy5DFOjBSllCvnqihCabzXzpn6ykCwBmHpy31vQw== + +"@swc/core-win32-ia32-msvc@1.13.5": + version "1.13.5" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.13.5.tgz#f8b2e28bc51b30467e316ed736a130c1324b9880" + integrity sha512-C5Yi/xIikrFUzZcyGj9L3RpKljFvKiDMtyDzPKzlsDrKIw2EYY+bF88gB6oGY5RGmv4DAX8dbnpRAqgFD0FMEw== + +"@swc/core-win32-x64-msvc@1.13.5": + version "1.13.5" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.13.5.tgz#13883cf3c63bf11b787e28dcdf75ca0cc49efa83" + integrity sha512-YrKdMVxbYmlfybCSbRtrilc6UA8GF5aPmGKBdPvjrarvsmf4i7ZHGCEnLtfOMd3Lwbs2WUZq3WdMbozYeLU93Q== + +"@swc/core@^1.13.5": + version "1.13.5" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.13.5.tgz#93874b831d3bd121560e6fcd688972b7fc7baa26" + integrity sha512-WezcBo8a0Dg2rnR82zhwoR6aRNxeTGfK5QCD6TQ+kg3xx/zNT02s/0o+81h/3zhvFSB24NtqEr8FTw88O5W/JQ== dependencies: "@swc/counter" "^0.1.3" - "@swc/types" "^0.1.23" + "@swc/types" "^0.1.24" optionalDependencies: - "@swc/core-darwin-arm64" "1.13.3" - "@swc/core-darwin-x64" "1.13.3" - "@swc/core-linux-arm-gnueabihf" "1.13.3" - "@swc/core-linux-arm64-gnu" "1.13.3" - "@swc/core-linux-arm64-musl" "1.13.3" - "@swc/core-linux-x64-gnu" "1.13.3" - "@swc/core-linux-x64-musl" "1.13.3" - "@swc/core-win32-arm64-msvc" "1.13.3" - "@swc/core-win32-ia32-msvc" "1.13.3" - "@swc/core-win32-x64-msvc" "1.13.3" + "@swc/core-darwin-arm64" "1.13.5" + "@swc/core-darwin-x64" "1.13.5" + "@swc/core-linux-arm-gnueabihf" "1.13.5" + "@swc/core-linux-arm64-gnu" "1.13.5" + "@swc/core-linux-arm64-musl" "1.13.5" + "@swc/core-linux-x64-gnu" "1.13.5" + "@swc/core-linux-x64-musl" "1.13.5" + "@swc/core-win32-arm64-msvc" "1.13.5" + "@swc/core-win32-ia32-msvc" "1.13.5" + "@swc/core-win32-x64-msvc" "1.13.5" "@swc/counter@^0.1.3": version "0.1.3" @@ -3300,10 +3302,10 @@ "@swc/counter" "^0.1.3" jsonc-parser "^3.2.0" -"@swc/types@^0.1.23": - version "0.1.23" - resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.23.tgz#7eabf88b9cfd929253859c562ae95982ee04b4e8" - integrity sha512-u1iIVZV9Q0jxY+yM2vw/hZGDNudsN85bBpTqzAQ9rzkxW9D+e3aEM4Han+ow518gSewkXgjmEK0BD79ZcNVgPw== +"@swc/types@^0.1.24": + version "0.1.25" + resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.25.tgz#b517b2a60feb37dd933e542d93093719e4cf1078" + integrity sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g== dependencies: "@swc/counter" "^0.1.3" @@ -3483,11 +3485,12 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== -"@types/jsonwebtoken@9.0.7": - version "9.0.7" - resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.7.tgz#e49b96c2b29356ed462e9708fc73b833014727d2" - integrity sha512-ugo316mmTYBl2g81zDFnZ7cfxlut3o+/EQdaP7J8QN2kY6lJ22hmQYCK5EHcJHbrW+dkCGSCPgbG8JtYj6qSrg== +"@types/jsonwebtoken@9.0.10": + version "9.0.10" + resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz#a7932a47177dcd4283b6146f3bd5c26d82647f09" + integrity sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA== dependencies: + "@types/ms" "*" "@types/node" "*" "@types/luxon@~3.6.0": @@ -3505,6 +3508,11 @@ resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== +"@types/ms@*": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78" + integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== + "@types/multer@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@types/multer/-/multer-2.0.0.tgz#db5f82136b619f5ce4d923b00034eb466c13acf4" @@ -3512,12 +3520,12 @@ dependencies: "@types/express" "*" -"@types/node@*", "@types/node@>=13.7.0", "@types/node@^24.0.7": - version "24.0.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-24.0.7.tgz#ee580f7850c7eabaeef61ef96b8d8c04fdf94f53" - integrity sha512-YIEUUr4yf8q8oQoXPpSlnvKNVKDQlPMWrmOcgzoduo7kvA2UF0/BwJ/eMKFTiTtkNL17I0M6Xe2tvwFU7be6iw== +"@types/node@*", "@types/node@>=13.7.0", "@types/node@^24.9.1": + version "24.9.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.9.1.tgz#b7360b3c789089e57e192695a855aa4f6981a53c" + integrity sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg== dependencies: - undici-types "~7.8.0" + undici-types "~7.16.0" "@types/oauth@*": version "0.9.6" @@ -4881,14 +4889,7 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" - integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== - dependencies: - ms "^2.1.3" - -debug@^4.3.7: +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5, debug@^4.3.7, debug@^4.4.0: version "4.4.3" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== @@ -5176,19 +5177,19 @@ eslint-visitor-keys@^4.2.0, eslint-visitor-keys@^4.2.1: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1" integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== -eslint@^9.36.0: - version "9.36.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.36.0.tgz#9cc5cbbfb9c01070425d9bfed81b4e79a1c09088" - integrity sha512-hB4FIzXovouYzwzECDcUkJ4OcfOEkXTv2zRY6B9bkwjx/cprAq0uvm1nl7zvQ0/TsUk0zQiN4uPfJpB9m+rPMQ== +eslint@^9.37.0: + version "9.37.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.37.0.tgz#ac0222127f76b09c0db63036f4fe289562072d74" + integrity sha512-XyLmROnACWqSxiGYArdef1fItQd47weqB7iwtfr9JHwRrqIXZdcFMvvEcL9xHCmL0SNsOvF0c42lWyM1U5dgig== dependencies: "@eslint-community/eslint-utils" "^4.8.0" "@eslint-community/regexpp" "^4.12.1" "@eslint/config-array" "^0.21.0" - "@eslint/config-helpers" "^0.3.1" - "@eslint/core" "^0.15.2" + "@eslint/config-helpers" "^0.4.0" + "@eslint/core" "^0.16.0" "@eslint/eslintrc" "^3.3.1" - "@eslint/js" "9.36.0" - "@eslint/plugin-kit" "^0.3.5" + "@eslint/js" "9.37.0" + "@eslint/plugin-kit" "^0.4.0" "@humanfs/node" "^0.16.6" "@humanwhocodes/module-importer" "^1.0.1" "@humanwhocodes/retry" "^0.4.2" @@ -7692,10 +7693,10 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@^3.0.0: - version "3.5.3" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.5.3.tgz#4fc2ce0d657e7a02e602549f053b239cb7dfe1b5" - integrity sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw== +prettier@^3.6.2: + version "3.6.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.6.2.tgz#ccda02a1003ebbb2bfda6f83a074978f608b9393" + integrity sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ== pretty-format@30.2.0: version "30.2.0" @@ -8690,10 +8691,10 @@ uint8array-extras@^1.4.0: resolved "https://registry.yarnpkg.com/uint8array-extras/-/uint8array-extras-1.4.0.tgz#e42a678a6dd335ec2d21661333ed42f44ae7cc74" integrity sha512-ZPtzy0hu4cZjv3z5NW9gfKnNLjoz4y6uv4HlelAjDK7sY/xOkKZv9xK/WQpcsBB3jEybChz9DPC2U/+cusjJVQ== -undici-types@~7.8.0: - version "7.8.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.8.0.tgz#de00b85b710c54122e44fbfd911f8d70174cd294" - integrity sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw== +undici-types@~7.16.0: + version "7.16.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.16.0.tgz#ffccdff36aea4884cbfce9a750a0580224f58a46" + integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw== universalify@^2.0.0: version "2.0.1" diff --git a/cli/kleinkram/api/deser.py b/cli/kleinkram/api/deser.py index 3bb8b854f..f493cee10 100644 --- a/cli/kleinkram/api/deser.py +++ b/cli/kleinkram/api/deser.py @@ -54,6 +54,8 @@ class MissionObjectKeys(str, Enum): CREATED_AT = "createdAt" UPDATED_AT = "updatedAt" TAGS = "tags" + FILESIZE = "size" + FILECOUNT = "filesCount" class ProjectObjectKeys(str, Enum): @@ -135,6 +137,8 @@ def _parse_mission(mission: MissionObject) -> Mission: created_at = _parse_datetime(mission[MissionObjectKeys.CREATED_AT]) updated_at = _parse_datetime(mission[MissionObjectKeys.UPDATED_AT]) metadata = _parse_metadata(mission[MissionObjectKeys.TAGS]) + file_count = mission[MissionObjectKeys.FILECOUNT] + filesize = mission[MissionObjectKeys.FILESIZE] project_id, project_name = _get_nested_info(mission, PROJECT) @@ -146,6 +150,8 @@ def _parse_mission(mission: MissionObject) -> Mission: metadata=metadata, project_id=project_id, project_name=project_name, + number_of_files=file_count, + size=filesize, ) except Exception as e: raise ParsingError(f"error parsing mission: {mission}") from e diff --git a/cli/kleinkram/api/routes.py b/cli/kleinkram/api/routes.py index 4c173ecd9..a686f0f21 100644 --- a/cli/kleinkram/api/routes.py +++ b/cli/kleinkram/api/routes.py @@ -43,6 +43,7 @@ from kleinkram.errors import MissionValidationError from kleinkram.errors import ProjectExists from kleinkram.errors import ProjectNotFound +from kleinkram.errors import ProjectValidationError from kleinkram.models import File from kleinkram.models import Mission from kleinkram.models import Project @@ -256,7 +257,7 @@ def _validate_mission_name( def _project_name_is_available(client: AuthenticatedClient, project_name: str) -> bool: project_query = ProjectQuery(patterns=[project_name]) try: - _ = get_project(client, project_query) + _ = get_project(client, project_query, exact_match=True) except ProjectNotFound: return True return False @@ -350,10 +351,8 @@ def _create_mission( def _create_project( client: AuthenticatedClient, project_name: str, description: str ) -> UUID: - if not _project_name_is_available(client, project_name): - raise ProjectExists(f"Project with name: `{project_name}` already exists") - # TODO: check name and description are valid + _validate_project_name(client, project_name, description) payload = {"name": project_name, "description": description} resp = client.post(CREATE_PROJECT, json=payload) resp.raise_for_status() @@ -361,6 +360,21 @@ def _create_project( return UUID(resp.json()["uuid"], version=4) +def _validate_project_name( + client: AuthenticatedClient, project_name: str, description: str +) -> None: + if not _project_name_is_available(client, project_name): + raise ProjectExists(f"Project with name: `{project_name}` already exists") + + if project_name.endswith(" "): + raise ProjectValidationError( + f"Project name must not end with a tailing whitespace: `{project_name}`" + ) + + if not description: + raise ProjectValidationError("Project description is required") + + def _validate_tag_value(tag_value, tag_datatype) -> None: if tag_datatype == "NUMBER": try: diff --git a/cli/kleinkram/cli/_mission.py b/cli/kleinkram/cli/_mission.py index 3a65456dd..bd80e4ce6 100644 --- a/cli/kleinkram/cli/_mission.py +++ b/cli/kleinkram/cli/_mission.py @@ -46,7 +46,7 @@ def create( metadata_dct = load_metadata(Path(metadata)) if metadata else {} # noqa client = AuthenticatedClient() - project = get_project(client, project_query) + project = get_project(client, project_query, exact_match=True) project_id = project.id project_required_tags = project.required_tags mission_id = kleinkram.api.routes._create_mission( diff --git a/cli/kleinkram/cli/_project.py b/cli/kleinkram/cli/_project.py index 7bc37378f..afe489a9a 100644 --- a/cli/kleinkram/cli/_project.py +++ b/cli/kleinkram/cli/_project.py @@ -73,7 +73,7 @@ def update( project_query = ProjectQuery(ids=project_ids, patterns=project_patterns) client = AuthenticatedClient() - project_id = get_project(client=client, query=project_query).id + project_id = get_project(client=client, query=project_query, exact_match=True).id kleinkram.core.update_project( client=client, project_id=project_id, description=description, new_name=new_name ) diff --git a/cli/kleinkram/core.py b/cli/kleinkram/core.py index 18719dd28..dc515ed69 100644 --- a/cli/kleinkram/core.py +++ b/cli/kleinkram/core.py @@ -107,7 +107,9 @@ def upload( if create and mission is None: # check if project exists and get its id at the same time - project = kleinkram.api.routes.get_project(client, query=query.project_query) + project = kleinkram.api.routes.get_project( + client, query=query.project_query, exact_match=True + ) project_id = project.id project_required_tags = project.required_tags mission_name = check_mission_query_is_creatable(query) diff --git a/cli/kleinkram/errors.py b/cli/kleinkram/errors.py index d2138940b..f38159531 100644 --- a/cli/kleinkram/errors.py +++ b/cli/kleinkram/errors.py @@ -52,6 +52,9 @@ class InvalidMissionMetadata(Exception): ... class MissionValidationError(Exception): ... +class ProjectValidationError(Exception): ... + + class NotAuthenticated(Exception): def __init__(self) -> None: super().__init__(LOGIN_MESSAGE) diff --git a/cli/setup.cfg b/cli/setup.cfg index 45f824d72..53ebb0104 100644 --- a/cli/setup.cfg +++ b/cli/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = kleinkram -version = 0.51.0 +version = 0.52.0 description = give me your bags long_description = file: README.md long_description_content_type = text/markdown diff --git a/common/entities/mission/mission.entity.ts b/common/entities/mission/mission.entity.ts index 25cc62e4d..9f92e2399 100644 --- a/common/entities/mission/mission.entity.ts +++ b/common/entities/mission/mission.entity.ts @@ -40,4 +40,7 @@ export default class Mission extends BaseEntity { @OneToMany(() => Tag, (tag) => tag.mission) tags?: Tag[]; + + fileCount?: number; + size?: number; } diff --git a/common/environment.ts b/common/environment.ts index dffb639be..b83494e44 100644 --- a/common/environment.ts +++ b/common/environment.ts @@ -190,4 +190,12 @@ export default { get VITE_USE_FAKE_OAUTH_FOR_DEVELOPMENT(): boolean { return asBoolean(process.env['VITE_USE_FAKE_OAUTH_FOR_DEVELOPMENT']); }, + + /** + * @returns Docker Hub namespace for image validation (optional) + * @example rslethz/ + */ + get DOCKER_HUB_NAMESPACE(): string { + return process.env['VITE_DOCKER_HUB_NAMESPACE'] ?? ''; + }, }; diff --git a/common/package.json b/common/package.json index 572e295a5..8a3c1298d 100644 --- a/common/package.json +++ b/common/package.json @@ -1,13 +1,13 @@ { "name": "kleinkram-common", - "version": "0.51.0", + "version": "0.52.0", "license": "MIT", "scripts": { "seed:config": "ts-node ./node_modules/typeorm-seeding/dist/cli.js config", "seed:run": "ts-node ./node_modules/typeorm-seeding/dist/cli.js seed" }, "dependencies": { - "@faker-js/faker": "^10.0.0", + "@faker-js/faker": "^10.1.0", "@nestjs/swagger": "^11.2.0", "bull": "^4.16.4", "class-transformer": "^0.5.1", @@ -19,7 +19,7 @@ "typeorm-seeding": "^1.6.1" }, "devDependencies": { - "@types/node": "^24.7.1", + "@types/node": "^24.10.0", "typescript": "^5.9.3" } } diff --git a/common/yarn.lock b/common/yarn.lock index f103eb999..b7f45e1c5 100644 --- a/common/yarn.lock +++ b/common/yarn.lock @@ -16,10 +16,10 @@ dependencies: "@jridgewell/trace-mapping" "0.3.9" -"@faker-js/faker@^10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@faker-js/faker/-/faker-10.0.0.tgz#df11f0ba2b2d7243574e34364948d6a25163c6f4" - integrity sha512-UollFEUkVXutsaP+Vndjxar40Gs5JL2HeLcl8xO1QAjJgOdhc3OmBFWyEylS+RddWaaBiAzH+5/17PLQJwDiLw== +"@faker-js/faker@^10.1.0": + version "10.1.0" + resolved "https://registry.yarnpkg.com/@faker-js/faker/-/faker-10.1.0.tgz#eb72869d01ccbff41a77aa7ac851ce1ac9371129" + integrity sha512-C3mrr3b5dRVlKPJdfrAXS8+dq+rq8Qm5SNRazca0JKgw1HQERFmrVb0towvMmw5uu8hHKNiQasMaR/tydf3Zsg== "@ioredis/commands@^1.1.1": version "1.2.0" @@ -126,12 +126,12 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== -"@types/node@^24.7.1": - version "24.7.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-24.7.1.tgz#3f0b17eddcd965c9e337af22459b04bafbf96e5e" - integrity sha512-CmyhGZanP88uuC5GpWU9q+fI61j2SkhO3UGMUdfYRE6Bcy0ccyzn1Rqj9YAB/ZY4kOXmNf0ocah5GtphmLMP6Q== +"@types/node@^24.10.0": + version "24.10.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.10.0.tgz#6b79086b0dfc54e775a34ba8114dcc4e0221f31f" + integrity sha512-qzQZRBqkFsYyaSWXuEHc2WR9c0a0CXwiE5FWUvn7ZM+vdy1uZLfCunD38UzhuB7YN/J11ndbDBcTmOdxJo9Q7A== dependencies: - undici-types "~7.14.0" + undici-types "~7.16.0" "@types/validator@^13.11.8": version "13.12.2" @@ -1390,10 +1390,10 @@ typescript@^5.9.3: resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f" integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== -undici-types@~7.14.0: - version "7.14.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.14.0.tgz#4c037b32ca4d7d62fae042174604341588bc0840" - integrity sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA== +undici-types@~7.16.0: + version "7.16.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.16.0.tgz#ffccdff36aea4884cbfce9a750a0580224f58a46" + integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw== util-deprecate@^1.0.1: version "1.0.2" diff --git a/docs/package.json b/docs/package.json index f8a94e0dc..d67e3fb55 100644 --- a/docs/package.json +++ b/docs/package.json @@ -1,6 +1,6 @@ { "name": "kleinkram-docs", - "version": "0.51.0", + "version": "0.52.0", "license": "MIT", "target": "es2022", "scripts": { @@ -13,10 +13,10 @@ "author": "Cyrill Püntener", "dependencies": { "vitepress": "^1.6.4", - "vue-json-pretty": "^2.5.0" + "vue-json-pretty": "^2.6.0" }, "devDependencies": { - "mermaid": "^11.12.0", + "mermaid": "^11.12.1", "vitepress-plugin-mermaid": "2.0.17", "vue": "^3.5.22" } diff --git a/docs/usage/actions/write-custom-actions.md b/docs/usage/actions/write-custom-actions.md index 19981b118..adb4aa2ae 100644 --- a/docs/usage/actions/write-custom-actions.md +++ b/docs/usage/actions/write-custom-actions.md @@ -69,15 +69,16 @@ The following environment variables are deprecated and will be removed in the fu ## Push Actions to Docker Hub -Kleinkram actions must be pushed to Docker Hub under the rslethz/\*\*\* namespace. To publish your action: +Kleinkram actions must be pushed to Docker Hub under a namespace defined by the `VITE_DOCKER_HUB_NAMESPACE` environment variable. +If this is left empty, actions are allowed to be pushed on any namespace. To publish your action: ```bash # login to docker hub docker login # build the image -docker build -t rslethz/my-action . +docker build -t /my-action . # push the image -docker push rslethz/my-action +docker push /my-action ``` diff --git a/docs/usage/files/compression.md b/docs/usage/files/compression.md new file mode 100644 index 000000000..7665a7c92 --- /dev/null +++ b/docs/usage/files/compression.md @@ -0,0 +1,258 @@ +# MCAP File Compression Best Practices + +This guide explains how to efficiently compress MCAP files for storage in Kleinkram while maintaining optimal performance for data access and processing. + +## TL;DR + +✅ **DO**: Use MCAP's built-in chunk compression +❌ **DON'T**: Compress entire files with `.zst` or `.gz` + +## Why MCAP Chunk Compression? + +MCAP files support internal **chunk-level compression** that provides: + +- **Storage savings**: 3-5x smaller files +- **Random access**: Read specific topics without decompressing everything +- **Transparent decompression**: Libraries handle it automatically +- **Industry standard**: Recommended by Foxglove and ROS 2 community + +## Recommended Workflow + +### On the Robot + +Record with the `fastwrite` profile for maximum performance during data collection: + +```bash +ros2 bag record --storage mcap --storage-preset-profile fastwrite \ + /camera/image /imu/data /lidar/scan +``` + +**What this does:** +- Writes uncompressed data for speed +- Minimal CPU usage during recording +- No CRC calculation (faster writes) +- No message index (added later) + +### Post-Processing (Offline) + +After recording, compress the files before uploading to Kleinkram: + +```bash +# Add chunk compression and message index +ros2 bag convert input.mcap -o output.mcap \ + --output-options "compression_mode=file,compression_format=zstd" +``` + +**Alternative using MCAP CLI:** + +```bash +# Install MCAP CLI +pip install mcap-cli + +# Compress with zstd (recommended) +mcap compress input.mcap --compression zstd --chunk-size 4MB + +# Or use LZ4 for faster decompression +mcap compress input.mcap --compression lz4 --chunk-size 4MB +``` + +### Upload to Kleinkram + +```bash +# Upload compressed MCAP (file extension is still .mcap) +klein upload output.mcap --mission "my-mission" --project "my-project" +``` + +## Compression Formats + +MCAP supports two compression algorithms: + +### Zstd (Recommended) + +```bash +mcap compress input.mcap --compression zstd +``` + +**Pros:** +- Best compression ratios (3-5x savings) +- Good decompression speed +- Industry standard + +**Use when:** Storage cost is a priority + +### LZ4 (Alternative) + +```bash +mcap compress input.mcap --compression lz4 +``` + +**Pros:** +- Faster decompression (~2x faster than zstd) +- Still good compression (2-3x savings) + +**Use when:** Decompression speed is critical + +## Storage Preset Profiles + +ROS 2 provides several preset profiles for different scenarios: + +### `fastwrite` (Recording) +Best for on-robot recording: +```bash +ros2 bag record --storage mcap --storage-preset-profile fastwrite +``` +- No compression +- No CRC +- No message index +- Minimal CPU/memory usage + +### `zstd_small` (Balanced) +Good balance of speed and compression: +```bash +ros2 bag record --storage mcap --storage-preset-profile zstd_small +``` +- Zstd compression (lowest ratio) +- No CRC calculation +- Good throughput + +### `zstd_fast` (Maximum Compression) +Best compression, slower writes: +```bash +ros2 bag record --storage mcap --storage-preset-profile zstd_fast +``` +- Zstd compression (highest ratio) +- 4MB chunks +- Maximum storage savings + +## Chunk Size Configuration + +Larger chunk sizes generally provide better compression: + +```bash +# Small chunks (good for random access) +mcap compress input.mcap --compression zstd --chunk-size 1MB + +# Medium chunks (balanced - recommended) +mcap compress input.mcap --compression zstd --chunk-size 4MB + +# Large chunks (best compression) +mcap compress input.mcap --compression zstd --chunk-size 8MB +``` + +**Recommendation:** Use 4MB chunks for a good balance of compression ratio and read performance. + +## What NOT to Do + +### ❌ File-Level Compression + +**Don't compress entire MCAP files:** + +```bash +# ❌ BAD - loses random access +zstd data.mcap # Creates data.mcap.zst +gzip data.mcap # Creates data.mcap.gz +``` + +**Why this is problematic:** +- Cannot read specific topics without full decompression +- Actions must decompress entire file (slow, lots of disk I/O) +- Not the standard practice in the community +- Kleinkram can't extract topic metadata without decompression + +## How Kleinkram Handles Compressed Files + +When you upload a chunk-compressed MCAP: + +1. **Upload**: File uploaded directly to storage (already compressed) +2. **Topic Extraction**: Kleinkram's queue consumer: + - Downloads the file + - MCAP library automatically decompresses chunks as needed + - Extracts topic metadata (names, types, message counts, frequencies) + - Stores metadata in database +3. **Storage**: Compressed MCAP stored as-is +4. **Actions**: Your action containers: + - Download compressed MCAP + - MCAP libraries handle decompression transparently + - Can efficiently read specific topics (random access works!) + +## Verifying Compression + +Check if your MCAP is compressed: + +```bash +# Using MCAP CLI +mcap info data.mcap + +# Look for: +# compression: zstd (or lz4) +# chunk count: > 0 +``` + +Example output: +``` +library: +profile: +messages: 45123 +duration: 1m23.456s +start: 2024-01-15T10:30:00Z +end: 2024-01-15T10:31:23Z +compression: zstd +chunk count: 42 +``` + +## Performance Comparison + +Example with a 10 GB dataset: + +| Method | File Size | Upload Time | Storage Cost | Action Access | +|--------|-----------|-------------|--------------|---------------| +| Uncompressed | 10 GB | Slow | High (1x) | Fast ✅ | +| Chunk Compressed (zstd) | 2 GB | Fast | Low (5x savings) | Fast ✅ | +| File-level .zst | 2 GB | Fast | Low (5x savings) | Slow ❌ | + +## FAQs + +### Q: Do I need to decompress chunk-compressed MCAPs before uploading? + +**A:** No! Upload them directly. Kleinkram's libraries handle decompression automatically. + +### Q: Will my actions need to decompress files? + +**A:** No! MCAP libraries (`@mcap/core`, Python `mcap`, C++ `mcap`, etc.) handle decompression transparently. Your action code doesn't change. + +### Q: Can I still seek to specific timestamps/topics? + +**A:** Yes! Chunk compression maintains the MCAP index, so random access works perfectly. + +### Q: What if I have `.mcap.zst` files? + +**A:** These are file-level compressed. Consider recompressing with chunk compression: + +```bash +# Decompress +zstd -d data.mcap.zst + +# Recompress with chunk compression +mcap compress data.mcap --compression zstd --chunk-size 4MB +``` + +### Q: Can I compress during recording? + +**A:** Yes, but it may impact recording performance on resource-constrained robots. Use `--storage-preset-profile zstd_small` for real-time compression with minimal overhead. + +## Additional Resources + +- [MCAP Specification](https://mcap.dev/spec) +- [Understanding MCAP Chunk Size and Compression](https://foxglove.dev/blog/understanding-mcap-chunk-size-and-compression) +- [ROS 2 rosbag2_storage_mcap Documentation](https://docs.ros.org/en/humble/p/rosbag2_storage_mcap/) +- [MCAP CLI Tools](https://github.com/foxglove/mcap/tree/main/python/mcap-cli) + +## Summary + +For optimal performance with Kleinkram: + +1. ✅ Record with `fastwrite` profile on robot +2. ✅ Post-process with `mcap compress` or `ros2 bag convert` +3. ✅ Upload chunk-compressed `.mcap` files +4. ✅ Enjoy fast uploads, storage savings, and efficient actions +5. ❌ Don't use file-level `.zst` or `.gz` compression diff --git a/docs/yarn.lock b/docs/yarn.lock index b375d8a89..df8795011 100644 --- a/docs/yarn.lock +++ b/docs/yarn.lock @@ -407,10 +407,10 @@ khroma "^2.0.0" non-layered-tidy-tree-layout "^2.0.2" -"@mermaid-js/parser@^0.6.2": - version "0.6.2" - resolved "https://registry.yarnpkg.com/@mermaid-js/parser/-/parser-0.6.2.tgz#6d505a33acb52ddeb592c596b14f9d92a30396a9" - integrity sha512-+PO02uGF6L6Cs0Bw8RpGhikVvMWEysfAyl27qTlroUB8jSWr1lL0Sf6zi78ZxlSnmgSY2AMMKVgghnN9jTtwkQ== +"@mermaid-js/parser@^0.6.3": + version "0.6.3" + resolved "https://registry.yarnpkg.com/@mermaid-js/parser/-/parser-0.6.3.tgz#3ce92dad2c5d696d29e11e21109c66a7886c824e" + integrity sha512-lnjOhe7zyHjc+If7yT4zoedx2vo4sHaTmtkl1+or8BRTnCtDmcTpAjpzDSfCZrshM5bCoz0GyidzadJAH1xobA== dependencies: langium "3.3.1" @@ -1392,10 +1392,10 @@ d3@^7.0.0, d3@^7.9.0: d3-transition "3" d3-zoom "3" -dagre-d3-es@7.0.11: - version "7.0.11" - resolved "https://registry.yarnpkg.com/dagre-d3-es/-/dagre-d3-es-7.0.11.tgz#2237e726c0577bfe67d1a7cfd2265b9ab2c15c40" - integrity sha512-tvlJLyQf834SylNKax8Wkzco/1ias1OPw8DcUMDE7oUIoSEW25riQVuiu/0OWEFqT0cxHT3Pa9/D82Jr47IONw== +dagre-d3-es@7.0.13: + version "7.0.13" + resolved "https://registry.yarnpkg.com/dagre-d3-es/-/dagre-d3-es-7.0.13.tgz#acfb4b449f6dcdd48d8ea8081a6d8c59bc8128c3" + integrity sha512-efEhnxpSuwpYOKRm/L5KbqoZmNNukHa/Flty4Wp62JRvgH2ojwVgPgdYyr4twpieZnyRDdIH7PY2mopX26+j2Q== dependencies: d3 "^7.9.0" lodash-es "^4.17.21" @@ -1649,21 +1649,21 @@ mdast-util-to-hast@^13.0.0: unist-util-visit "^5.0.0" vfile "^6.0.0" -mermaid@^11.12.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/mermaid/-/mermaid-11.12.0.tgz#8e394b6214e33cb52f6e8ad9eb1fd94c67ee5638" - integrity sha512-ZudVx73BwrMJfCFmSSJT84y6u5brEoV8DOItdHomNLz32uBjNrelm7mg95X7g+C6UoQH/W6mBLGDEDv73JdxBg== +mermaid@^11.12.1: + version "11.12.1" + resolved "https://registry.yarnpkg.com/mermaid/-/mermaid-11.12.1.tgz#97445451ce7d0d3740bc2159cb25464bece60b67" + integrity sha512-UlIZrRariB11TY1RtTgUWp65tphtBv4CSq7vyS2ZZ2TgoMjs2nloq+wFqxiwcxlhHUvs7DPGgMjs2aeQxz5h9g== dependencies: "@braintree/sanitize-url" "^7.1.1" "@iconify/utils" "^3.0.1" - "@mermaid-js/parser" "^0.6.2" + "@mermaid-js/parser" "^0.6.3" "@types/d3" "^7.4.3" cytoscape "^3.29.3" cytoscape-cose-bilkent "^4.1.0" cytoscape-fcose "^2.2.0" d3 "^7.9.0" d3-sankey "^0.12.3" - dagre-d3-es "7.0.11" + dagre-d3-es "7.0.13" dayjs "^1.11.18" dompurify "^3.2.5" katex "^0.16.22" @@ -2137,10 +2137,10 @@ vscode-uri@~3.0.8: resolved "https://registry.yarnpkg.com/vscode-uri/-/vscode-uri-3.0.8.tgz#1770938d3e72588659a172d0fd4642780083ff9f" integrity sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw== -vue-json-pretty@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/vue-json-pretty/-/vue-json-pretty-2.5.0.tgz#cb31d9a3f1fb385a209609dbb1cbb7aeaf891fa9" - integrity sha512-nZA6qXYaiMaE2J0HkKtkrLcPJoN03SDSBdZWEPiRwoOVySWOfoZCyadhBwBN6wAHTga+c/R49ExGWoKFXnu37A== +vue-json-pretty@^2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/vue-json-pretty/-/vue-json-pretty-2.6.0.tgz#30f865ff59a319bd88ff5ae7461682d07b0775e1" + integrity sha512-glz1aBVS35EO8+S9agIl3WOQaW2cJZW192UVKTuGmryx01ZvOVWc4pR3t+5UcyY4jdOfBUgVHjcpRpcnjRhCAg== vue@^3.5.13, vue@^3.5.22: version "3.5.22" diff --git a/examples/actions/Dockerfile b/examples/actions/Dockerfile index 89290023a..134ad0806 100644 --- a/examples/actions/Dockerfile +++ b/examples/actions/Dockerfile @@ -1,7 +1,7 @@ FROM python:latest # install kleinkram as CLI -RUN pip install kleinkram --pre --force-reinstall +RUN pip install kleinkram --pre --force-reinstall && pip install "httpx==0.26.0" # copy entrypoint and make it executable COPY ./entrypoint.sh /entrypoint.sh diff --git a/frontend/package.json b/frontend/package.json index cda6922ab..b7f5c9e2f 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "kleinkram-frontend", - "version": "0.51.0", + "version": "0.52.0", "description": "Data storage of ROS bags", "productName": "Kleinkram", "author": "Johann Schwabe ", @@ -13,29 +13,29 @@ }, "dependencies": { "@aws-sdk/client-s3": "3.726.1", - "@tanstack/vue-query": "^5.90.2", + "@tanstack/vue-query": "^5.90.5", "axios": "^1.12.2", "date-fns": "^4.1.0", "echarts": "^5.5.1", "jwt-decode": "^4.0.0", - "p-limit": "^7.1.1", + "p-limit": "^7.2.0", "postcss": "^8.5.6", "quasar": "^2.18.5", "spark-md5": "^3.0.2", - "vue": "^3.5.21", + "vue": "^3.5.22", "vue-echarts": "^7.0.3", "vue-json-pretty": "^2.5.0", - "vue-router": "^4.5.1" + "vue-router": "^4.6.3" }, "devDependencies": { "@quasar/app-vite": "^2.4.0", - "@types/node": "^24.7.0", + "@types/node": "^24.9.1", "@types/spark-md5": "^3.0.5", "autoprefixer": "^10.4.21", "jiti": "^2.6.1", "tsx": "^4.20.6", "typescript": "^5.9.3", - "vue-tsc": "^3.0.8" + "vue-tsc": "^3.1.1" }, "engines": { "node": "^22 || ^24", diff --git a/frontend/src/components/action-configuration.vue b/frontend/src/components/action-configuration.vue index 7f905b321..fc393e252 100644 --- a/frontend/src/components/action-configuration.vue +++ b/frontend/src/components/action-configuration.vue @@ -515,10 +515,14 @@ async function submitAnalysis() { }); return; } - if (!editingTemplate.value.imageName.startsWith('rslethz/')) { + const dockerhubNamespace = import.meta.env.VITE_DOCKER_HUB_NAMESPACE; + if ( + dockerhubNamespace && + !editingTemplate.value.imageName.startsWith(`${dockerhubNamespace}`) + ) { Notify.create({ group: false, - message: 'The image name must start with "rslethz/"', + message: `The image name must start with "${dockerhubNamespace}/"`, color: 'negative', position: 'bottom', timeout: 2000, diff --git a/frontend/yarn.lock b/frontend/yarn.lock index 15f2027ae..50882edd4 100644 --- a/frontend/yarn.lock +++ b/frontend/yarn.lock @@ -622,17 +622,17 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8" integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== -"@babel/parser@^7.28.3": - version "7.28.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.3.tgz#d2d25b814621bca5fe9d172bc93792547e7a2a71" - integrity sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA== +"@babel/parser@^7.28.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.28.4.tgz#da25d4643532890932cc03f7705fe19637e03fa8" + integrity sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg== dependencies: - "@babel/types" "^7.28.2" + "@babel/types" "^7.28.4" -"@babel/types@^7.28.2": - version "7.28.2" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.2.tgz#da9db0856a9a88e0a13b019881d7513588cf712b" - integrity sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ== +"@babel/types@^7.28.4": + version "7.28.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.28.4.tgz#0a4e618f4c60a7cd6c11cb2d48060e4dbe38ac3a" + integrity sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q== dependencies: "@babel/helper-string-parser" "^7.27.1" "@babel/helper-validator-identifier" "^7.27.1" @@ -1509,18 +1509,18 @@ dependencies: remove-accents "0.5.0" -"@tanstack/query-core@5.90.2": - version "5.90.2" - resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.90.2.tgz#ac5d0d0f19a38071db2d21d758b5c35a85d9c1d8" - integrity sha512-k/TcR3YalnzibscALLwxeiLUub6jN5EDLwKDiO7q5f4ICEoptJ+n9+7vcEFy5/x/i6Q+Lb/tXrsKCggf5uQJXQ== +"@tanstack/query-core@5.90.5": + version "5.90.5" + resolved "https://registry.yarnpkg.com/@tanstack/query-core/-/query-core-5.90.5.tgz#0175f9f517514906db8ab379589ed3f96694ecc4" + integrity sha512-wLamYp7FaDq6ZnNehypKI5fNvxHPfTYylE0m/ZpuuzJfJqhR5Pxg9gvGBHZx4n7J+V5Rg5mZxHHTlv25Zt5u+w== -"@tanstack/vue-query@^5.90.2": - version "5.90.2" - resolved "https://registry.yarnpkg.com/@tanstack/vue-query/-/vue-query-5.90.2.tgz#0a2461d7ba29b68b42129cab7a8d120814b5bb29" - integrity sha512-DLLY/B5QCbpi6AM2aaCowukQx2rXsQ4mH8RuDd8wQz0/L2bZ9Z/GgXlV310ouo47pJBmeibMVTmuoWsleT8llg== +"@tanstack/vue-query@^5.90.5": + version "5.90.5" + resolved "https://registry.yarnpkg.com/@tanstack/vue-query/-/vue-query-5.90.5.tgz#f9e13c4745d4e36ec3ab58e8cb252c63cc1aa97f" + integrity sha512-bTEmgIb6o5BqkoJPNV7ZKKsDHjiVnNydORw1n6S/x0dppb3lTT5KFOotQ5PqZG3OQY+9AwA6RJJN3pEx+9j1Pg== dependencies: "@tanstack/match-sorter-utils" "^8.19.4" - "@tanstack/query-core" "5.90.2" + "@tanstack/query-core" "5.90.5" "@vue/devtools-api" "^6.6.3" vue-demi "^0.14.10" @@ -1638,12 +1638,12 @@ dependencies: "@types/node" "*" -"@types/node@*", "@types/node@^24.7.0": - version "24.7.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-24.7.0.tgz#a34c9f0d3401db396782e440317dd5d8373c286f" - integrity sha512-IbKooQVqUBrlzWTi79E8Fw78l8k1RNtlDDNWsFZs7XonuQSJ8oNYfEeclhprUldXISRMLzBpILuKgPlIxm+/Yw== +"@types/node@*", "@types/node@^24.9.1": + version "24.9.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.9.1.tgz#b7360b3c789089e57e192695a855aa4f6981a53c" + integrity sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg== dependencies: - undici-types "~7.14.0" + undici-types "~7.16.0" "@types/qs@*": version "6.9.18" @@ -1705,112 +1705,103 @@ path-browserify "^1.0.1" vscode-uri "^3.0.8" -"@vue/compiler-core@3.5.21": - version "3.5.21" - resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.5.21.tgz#5915b19273f0492336f0beb227aba86813e2c8a8" - integrity sha512-8i+LZ0vf6ZgII5Z9XmUvrCyEzocvWT+TeR2VBUVlzIH6Tyv57E20mPZ1bCS+tbejgUgmjrEh7q/0F0bibskAmw== +"@vue/compiler-core@3.5.22": + version "3.5.22" + resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.5.22.tgz#bb8294a0dd31df540563cc6ffa0456f1f7687b97" + integrity sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ== dependencies: - "@babel/parser" "^7.28.3" - "@vue/shared" "3.5.21" + "@babel/parser" "^7.28.4" + "@vue/shared" "3.5.22" entities "^4.5.0" estree-walker "^2.0.2" source-map-js "^1.2.1" -"@vue/compiler-dom@3.5.21", "@vue/compiler-dom@^3.5.0": - version "3.5.21" - resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.5.21.tgz#26126447fe1e1d16c8cbac45b26e66b3f7175f65" - integrity sha512-jNtbu/u97wiyEBJlJ9kmdw7tAr5Vy0Aj5CgQmo+6pxWNQhXZDPsRr1UWPN4v3Zf82s2H3kF51IbzZ4jMWAgPlQ== +"@vue/compiler-dom@3.5.22", "@vue/compiler-dom@^3.5.0": + version "3.5.22" + resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.5.22.tgz#6c9c2c9843520f6d3dbc685e5d0e1e12a2c04c56" + integrity sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA== dependencies: - "@vue/compiler-core" "3.5.21" - "@vue/shared" "3.5.21" + "@vue/compiler-core" "3.5.22" + "@vue/shared" "3.5.22" -"@vue/compiler-sfc@3.5.21": - version "3.5.21" - resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.5.21.tgz#e48189ef3ffe334c864c2625389ebe3bb4fa41eb" - integrity sha512-SXlyk6I5eUGBd2v8Ie7tF6ADHE9kCR6mBEuPyH1nUZ0h6Xx6nZI29i12sJKQmzbDyr2tUHMhhTt51Z6blbkTTQ== +"@vue/compiler-sfc@3.5.22": + version "3.5.22" + resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.5.22.tgz#663a8483b1dda8de83b6fa1aab38a52bf73dd965" + integrity sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ== dependencies: - "@babel/parser" "^7.28.3" - "@vue/compiler-core" "3.5.21" - "@vue/compiler-dom" "3.5.21" - "@vue/compiler-ssr" "3.5.21" - "@vue/shared" "3.5.21" + "@babel/parser" "^7.28.4" + "@vue/compiler-core" "3.5.22" + "@vue/compiler-dom" "3.5.22" + "@vue/compiler-ssr" "3.5.22" + "@vue/shared" "3.5.22" estree-walker "^2.0.2" - magic-string "^0.30.18" + magic-string "^0.30.19" postcss "^8.5.6" source-map-js "^1.2.1" -"@vue/compiler-ssr@3.5.21": - version "3.5.21" - resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.5.21.tgz#f351c27aa5c075faa609596b2269c53df0df3aa1" - integrity sha512-vKQ5olH5edFZdf5ZrlEgSO1j1DMA4u23TVK5XR1uMhvwnYvVdDF0nHXJUblL/GvzlShQbjhZZ2uvYmDlAbgo9w== +"@vue/compiler-ssr@3.5.22": + version "3.5.22" + resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.5.22.tgz#a0ef16e364731b25e79a13470569066af101320f" + integrity sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww== dependencies: - "@vue/compiler-dom" "3.5.21" - "@vue/shared" "3.5.21" - -"@vue/compiler-vue2@^2.7.16": - version "2.7.16" - resolved "https://registry.yarnpkg.com/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz#2ba837cbd3f1b33c2bc865fbe1a3b53fb611e249" - integrity sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A== - dependencies: - de-indent "^1.0.2" - he "^1.2.0" + "@vue/compiler-dom" "3.5.22" + "@vue/shared" "3.5.22" "@vue/devtools-api@^6.6.3", "@vue/devtools-api@^6.6.4": version "6.6.4" resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz#cbe97fe0162b365edc1dba80e173f90492535343" integrity sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g== -"@vue/language-core@3.0.8": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@vue/language-core/-/language-core-3.0.8.tgz#818a2fa2e8296f7faeb5c6d5019ce6bb09fb2c6e" - integrity sha512-eYs6PF7bxoPYvek9qxceo1BCwFbJZYqJll+WaYC8o8ec60exqj+n+QRGGiJHSeUfYp0hDxARbMdxMq/fbPgU5g== +"@vue/language-core@3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@vue/language-core/-/language-core-3.1.1.tgz#29f32ca1fc5f1393f20e3eb9154a18914c813354" + integrity sha512-qjMY3Q+hUCjdH+jLrQapqgpsJ0rd/2mAY02lZoHG3VFJZZZKLjAlV+Oo9QmWIT4jh8+Rx8RUGUi++d7T9Wb6Mw== dependencies: "@volar/language-core" "2.4.23" "@vue/compiler-dom" "^3.5.0" - "@vue/compiler-vue2" "^2.7.16" "@vue/shared" "^3.5.0" - alien-signals "^2.0.5" + alien-signals "^3.0.0" muggle-string "^0.4.1" path-browserify "^1.0.1" picomatch "^4.0.2" -"@vue/reactivity@3.5.21": - version "3.5.21" - resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.5.21.tgz#34d4532c325876cf5481206060a3d525862c8ac5" - integrity sha512-3ah7sa+Cwr9iiYEERt9JfZKPw4A2UlbY8RbbnH2mGCE8NwHkhmlZt2VsH0oDA3P08X3jJd29ohBDtX+TbD9AsA== +"@vue/reactivity@3.5.22": + version "3.5.22" + resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.5.22.tgz#9b26f8557c96df46c9a859914a2229f3ca5b8f4f" + integrity sha512-f2Wux4v/Z2pqc9+4SmgZC1p73Z53fyD90NFWXiX9AKVnVBEvLFOWCEgJD3GdGnlxPZt01PSlfmLqbLYzY/Fw4A== dependencies: - "@vue/shared" "3.5.21" + "@vue/shared" "3.5.22" -"@vue/runtime-core@3.5.21": - version "3.5.21" - resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.5.21.tgz#d97a4e7223a99644129f95c7d8318a7e92f255e4" - integrity sha512-+DplQlRS4MXfIf9gfD1BOJpk5RSyGgGXD/R+cumhe8jdjUcq/qlxDawQlSI8hCKupBlvM+3eS1se5xW+SuNAwA== +"@vue/runtime-core@3.5.22": + version "3.5.22" + resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.5.22.tgz#e004c1e35f423555a0e4c10646ef3e9d380643d1" + integrity sha512-EHo4W/eiYeAzRTN5PCextDUZ0dMs9I8mQ2Fy+OkzvRPUYQEyK9yAjbasrMCXbLNhF7P0OUyivLjIy0yc6VrLJQ== dependencies: - "@vue/reactivity" "3.5.21" - "@vue/shared" "3.5.21" + "@vue/reactivity" "3.5.22" + "@vue/shared" "3.5.22" -"@vue/runtime-dom@3.5.21": - version "3.5.21" - resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.5.21.tgz#a3d35d53320abe8462c3bf2a469f729d8c9f78ff" - integrity sha512-3M2DZsOFwM5qI15wrMmNF5RJe1+ARijt2HM3TbzBbPSuBHOQpoidE+Pa+XEaVN+czbHf81ETRoG1ltztP2em8w== +"@vue/runtime-dom@3.5.22": + version "3.5.22" + resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.5.22.tgz#01276cea7cb9ac2b9aba046adfb5903b494e2e7e" + integrity sha512-Av60jsryAkI023PlN7LsqrfPvwfxOd2yAwtReCjeuugTJTkgrksYJJstg1e12qle0NarkfhfFu1ox2D+cQotww== dependencies: - "@vue/reactivity" "3.5.21" - "@vue/runtime-core" "3.5.21" - "@vue/shared" "3.5.21" + "@vue/reactivity" "3.5.22" + "@vue/runtime-core" "3.5.22" + "@vue/shared" "3.5.22" csstype "^3.1.3" -"@vue/server-renderer@3.5.21": - version "3.5.21" - resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.5.21.tgz#1d0be5059a0c10f2c0483eef71ebf5bfd21a8b49" - integrity sha512-qr8AqgD3DJPJcGvLcJKQo2tAc8OnXRcfxhOJCPF+fcfn5bBGz7VCcO7t+qETOPxpWK1mgysXvVT/j+xWaHeMWA== +"@vue/server-renderer@3.5.22": + version "3.5.22" + resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.5.22.tgz#d134e3409094044bd066d9803714677457756157" + integrity sha512-gXjo+ao0oHYTSswF+a3KRHZ1WszxIqO7u6XwNHqcqb9JfyIL/pbWrrh/xLv7jeDqla9u+LK7yfZKHih1e1RKAQ== dependencies: - "@vue/compiler-ssr" "3.5.21" - "@vue/shared" "3.5.21" + "@vue/compiler-ssr" "3.5.22" + "@vue/shared" "3.5.22" -"@vue/shared@3.5.21", "@vue/shared@^3.5.0": - version "3.5.21" - resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.5.21.tgz#505edb122629d1979f70a2a65ca0bd4050dc2e54" - integrity sha512-+2k1EQpnYuVuu3N7atWyG3/xoFWIVJZq4Mz8XNOdScFI0etES75fbny/oU4lKWk/577P1zmg0ioYvpGEDZ3DLw== +"@vue/shared@3.5.22", "@vue/shared@^3.5.0": + version "3.5.22" + resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.5.22.tgz#9d56a1644a3becb8af1e34655928b0e288d827f8" + integrity sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w== abort-controller@^3.0.0: version "3.0.0" @@ -1837,10 +1828,10 @@ acorn@^8.8.2: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== -alien-signals@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/alien-signals/-/alien-signals-2.0.5.tgz#7528fc28de7cd76ccb6aad1d46d5b5635ce10805" - integrity sha512-PdJB6+06nUNAClInE3Dweq7/2xVAYM64vvvS1IHVHSJmgeOtEdrAGyp7Z2oJtYm0B342/Exd2NT0uMJaThcjLQ== +alien-signals@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/alien-signals/-/alien-signals-3.0.0.tgz#e1e5259a3bfcec740a46ee2c67f176184be89457" + integrity sha512-JHoRJf18Y6HN4/KZALr3iU+0vW9LKG+8FMThQlbn4+gv8utsLIkwpomjElGPccGeNwh0FI2HN6BLnyFLo6OyLQ== ansi-escapes@^4.3.2: version "4.3.2" @@ -2303,11 +2294,6 @@ date-fns@^4.1.0: resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-4.1.0.tgz#64b3d83fff5aa80438f5b1a633c2e83b8a1c2d14" integrity sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg== -de-indent@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" - integrity sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg== - debug@2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" @@ -2774,11 +2760,6 @@ hasown@^2.0.2: dependencies: function-bind "^1.1.2" -he@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - html-minifier-terser@^7.2.0: version "7.2.0" resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz#18752e23a2f0ed4b0f550f217bb41693e975b942" @@ -3020,7 +3001,7 @@ lru-cache@^10.2.0: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== -magic-string@^0.30.18: +magic-string@^0.30.19: version "0.30.19" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.19.tgz#cebe9f104e565602e5d2098c5f2e79a77cc86da9" integrity sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw== @@ -3234,10 +3215,10 @@ os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== -p-limit@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-7.1.1.tgz#1f349332b179e370ede603078d975048b9e904a2" - integrity sha512-i8PyM2JnsNChVSYWLr2BAjNoLi0BAYC+wecOnZnVV+YSNJkzP7cWmvI34dk0WArWfH9KwBHNoZI3P3MppImlIA== +p-limit@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-7.2.0.tgz#afcf6b5a86d093660140497dda0e640dd01a7b3b" + integrity sha512-ATHLtwoTNDloHRFFxFJdHnG6n2WUeFjaR8XQMFdKIv0xkXjrER8/iG9iu265jOM95zXHAfv9oTkqhrfbIzosrQ== dependencies: yocto-queue "^1.2.1" @@ -4053,10 +4034,10 @@ ufo@^1.5.4: resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.6.1.tgz#ac2db1d54614d1b22c1d603e3aef44a85d8f146b" integrity sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA== -undici-types@~7.14.0: - version "7.14.0" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.14.0.tgz#4c037b32ca4d7d62fae042174604341588bc0840" - integrity sha512-QQiYxHuyZ9gQUIrmPo3IA+hUl4KYk8uSA7cHrcKd/l3p1OTpZcM0Tbp9x7FAtXdAYhlasd60ncPpgu6ihG6TOA== +undici-types@~7.16.0: + version "7.16.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.16.0.tgz#ffccdff36aea4884cbfce9a750a0580224f58a46" + integrity sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw== universalify@^2.0.0: version "2.0.1" @@ -4142,31 +4123,31 @@ vue-json-pretty@^2.5.0: resolved "https://registry.yarnpkg.com/vue-json-pretty/-/vue-json-pretty-2.5.0.tgz#cb31d9a3f1fb385a209609dbb1cbb7aeaf891fa9" integrity sha512-nZA6qXYaiMaE2J0HkKtkrLcPJoN03SDSBdZWEPiRwoOVySWOfoZCyadhBwBN6wAHTga+c/R49ExGWoKFXnu37A== -vue-router@^4.5.1: - version "4.5.1" - resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.5.1.tgz#47bffe2d3a5479d2886a9a244547a853aa0abf69" - integrity sha512-ogAF3P97NPm8fJsE4by9dwSYtDwXIY1nFY9T6DyQnGHd1E2Da94w9JIolpe42LJGIl0DwOHBi8TcRPlPGwbTtw== +vue-router@^4.6.3: + version "4.6.3" + resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-4.6.3.tgz#52a40a231b910806438a8203c065a411fd3f1faa" + integrity sha512-ARBedLm9YlbvQomnmq91Os7ck6efydTSpRP3nuOKCvgJOHNrhRoJDSKtee8kcL1Vf7nz6U+PMBL+hTvR3bTVQg== dependencies: "@vue/devtools-api" "^6.6.4" -vue-tsc@^3.0.8: - version "3.0.8" - resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-3.0.8.tgz#291c4ecf192f0bde15439c85cf65c8a9aba5b360" - integrity sha512-H9yg/m6ywykmWS+pIAEs65v2FrVm5uOA0a0dHkX6Sx8dNg1a1m4iudt/6eGa9fAenmNHGlLFN9XpWQb8i5sU1w== +vue-tsc@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/vue-tsc/-/vue-tsc-3.1.1.tgz#66a5a9965a81d8cae03dd2c0350e2c05b24a2a4d" + integrity sha512-fyixKxFniOVgn+L/4+g8zCG6dflLLt01Agz9jl3TO45Bgk87NZJRmJVPsiK+ouq3LB91jJCbOV+pDkzYTxbI7A== dependencies: "@volar/typescript" "2.4.23" - "@vue/language-core" "3.0.8" - -vue@^3.5.21: - version "3.5.21" - resolved "https://registry.yarnpkg.com/vue/-/vue-3.5.21.tgz#30af9553fd9642870321b7dc547b46c395cb7b91" - integrity sha512-xxf9rum9KtOdwdRkiApWL+9hZEMWE90FHh8yS1+KJAiWYh+iGWV1FquPjoO9VUHQ+VIhsCXNNyZ5Sf4++RVZBA== - dependencies: - "@vue/compiler-dom" "3.5.21" - "@vue/compiler-sfc" "3.5.21" - "@vue/runtime-dom" "3.5.21" - "@vue/server-renderer" "3.5.21" - "@vue/shared" "3.5.21" + "@vue/language-core" "3.1.1" + +vue@^3.5.22: + version "3.5.22" + resolved "https://registry.yarnpkg.com/vue/-/vue-3.5.22.tgz#2b8ddb94ee4b640ef12fe7f6efe1cf16f3b582e7" + integrity sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ== + dependencies: + "@vue/compiler-dom" "3.5.22" + "@vue/compiler-sfc" "3.5.22" + "@vue/runtime-dom" "3.5.22" + "@vue/server-renderer" "3.5.22" + "@vue/shared" "3.5.22" wcwidth@^1.0.1: version "1.0.1" diff --git a/package.json b/package.json index 802668d88..561b0b30c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "kleinkram", - "version": "0.51.0", + "version": "0.52.0", "main": "index.js", "repository": "git@github.com:leggedrobotics/GrandTourDatasets.git", "author": "Johann Schwabe ", diff --git a/queueConsumer/package.json b/queueConsumer/package.json index bc1378007..53aeec53c 100644 --- a/queueConsumer/package.json +++ b/queueConsumer/package.json @@ -1,6 +1,6 @@ { "name": "kleinkram-queue-consumer", - "version": "0.51.0", + "version": "0.52.0", "license": "MIT", "scripts": { "start": "nest start", @@ -12,7 +12,7 @@ "@mcap/core": "^2.1.7", "@mcap/nodejs": "^1.0.2", "@mcap/support": "^1.0.4", - "@nestjs/bull": "^11.0.3", + "@nestjs/bull": "^11.0.4", "@nestjs/common": "10.4.7", "@nestjs/config": "^4.0.2", "@nestjs/core": "10.4.6", @@ -20,26 +20,26 @@ "@nestjs/schedule": "^6.0.1", "@nestjs/typeorm": "^11.0.0", "@opentelemetry/api": "^1.9.0", - "@opentelemetry/exporter-prometheus": "^0.206.0", - "@opentelemetry/exporter-trace-otlp-http": "^0.206.0", - "@opentelemetry/instrumentation-express": "^0.55.0", - "@opentelemetry/instrumentation-fetch": "^0.206.0", - "@opentelemetry/instrumentation-http": "^0.206.0", - "@opentelemetry/instrumentation-nestjs-core": "^0.53.0", - "@opentelemetry/instrumentation-pg": "^0.59.0", - "@opentelemetry/instrumentation-winston": "^0.51.0", - "@opentelemetry/sdk-node": "^0.206.0", + "@opentelemetry/exporter-prometheus": "^0.207.0", + "@opentelemetry/exporter-trace-otlp-http": "^0.207.0", + "@opentelemetry/instrumentation-express": "^0.56.0", + "@opentelemetry/instrumentation-fetch": "^0.207.0", + "@opentelemetry/instrumentation-http": "^0.207.0", + "@opentelemetry/instrumentation-nestjs-core": "^0.54.0", + "@opentelemetry/instrumentation-pg": "^0.60.0", + "@opentelemetry/instrumentation-winston": "^0.52.0", + "@opentelemetry/sdk-node": "^0.207.0", "@opentelemetry/sdk-trace-base": "^2.0.0", "@types/multer": "^2.0.0", "bull": "^4.16.4", "dockerode": "^4.0.9", - "googleapis": "^161.0.0", + "googleapis": "^164.1.0", "minio": "^8.0.6", "pg": "^8.16.3", "redlock": "^5.0.0-beta.2", "reflect-metadata": "0.2.2", "rxjs": "7.8.2", - "systeminformation": "^5.27.10", + "systeminformation": "^5.27.11", "typeorm": "^0.3.27", "util": "^0.12.5", "winston": "3.18.3", @@ -47,8 +47,8 @@ }, "devDependencies": { "@nestjs/cli": "^11.0.10", - "@types/dockerode": "^3.3.44", - "@types/node": "24.7.0", + "@types/dockerode": "^3.3.45", + "@types/node": "24.7.2", "typescript": "5.9.3" } } diff --git a/queueConsumer/src/actions/services/docker-daemon.service.ts b/queueConsumer/src/actions/services/docker-daemon.service.ts index 439e04a9b..faa375085 100644 --- a/queueConsumer/src/actions/services/docker-daemon.service.ts +++ b/queueConsumer/src/actions/services/docker-daemon.service.ts @@ -303,10 +303,14 @@ export class DockerDaemon { @tracing() private async getImage(dockerImage: string) { - // assert that we only run rslethz images - if (!dockerImage.startsWith('rslethz/')) { + const dockerhub_namespace = process.env['VITE_DOCKER_HUB_NAMESPACE']; + // assert that we only run images from a specified namespace + if ( + dockerhub_namespace !== undefined && + !dockerImage.startsWith(dockerhub_namespace) + ) { throw new Error( - 'Only images from the rslethz organization are allowed', + `Only images from the ${dockerhub_namespace} namespace are allowed`, ); } diff --git a/queueConsumer/yarn.lock b/queueConsumer/yarn.lock index d1394c028..75c852856 100644 --- a/queueConsumer/yarn.lock +++ b/queueConsumer/yarn.lock @@ -603,19 +603,19 @@ resolved "https://registry.yarnpkg.com/@napi-rs/snappy-win32-x64-msvc/-/snappy-win32-x64-msvc-7.2.2.tgz#4f598d3a5d50904d9f72433819f68b21eaec4f7d" integrity sha512-a43cyx1nK0daw6BZxVcvDEXxKMFLSBSDTAhsFD0VqSKcC7MGUBMaqyoWUcMiI7LBSz4bxUmxDWKfCYzpEmeb3w== -"@nestjs/bull-shared@^11.0.3": - version "11.0.3" - resolved "https://registry.yarnpkg.com/@nestjs/bull-shared/-/bull-shared-11.0.3.tgz#b535b8dd42ef007840144d406ca4dbb9b99bfa14" - integrity sha512-CaHniPkLAxis6fAB1DB8WZELQv8VPCLedbj7iP0VQ1pz74i6NSzG9mBg6tOomXq/WW4la4P4OMGEQ48UAJh20A== +"@nestjs/bull-shared@^11.0.4": + version "11.0.4" + resolved "https://registry.yarnpkg.com/@nestjs/bull-shared/-/bull-shared-11.0.4.tgz#6179bb0a0ae705193a113ea60021d28732c6038d" + integrity sha512-VBJcDHSAzxQnpcDfA0kt9MTGUD1XZzfByV70su0W0eDCQ9aqIEBlzWRW21tv9FG9dIut22ysgDidshdjlnczLw== dependencies: tslib "2.8.1" -"@nestjs/bull@^11.0.3": - version "11.0.3" - resolved "https://registry.yarnpkg.com/@nestjs/bull/-/bull-11.0.3.tgz#11e506508deb117fff8cfb132ac22e4c47d02521" - integrity sha512-VyH823Klc7OgsU0FyuKItgRefgrQOQHN5uW9lHxNih6LRtw2Vpi9fENjPdOwjQqKexxZxjNDGKZoDCyK+UGclg== +"@nestjs/bull@^11.0.4": + version "11.0.4" + resolved "https://registry.yarnpkg.com/@nestjs/bull/-/bull-11.0.4.tgz#4520d775807a54d87aeec58be3e35a4c78018fb8" + integrity sha512-QVz2PR/rJF/isy7otVnMTSqLf/O71p9Ka7lBZt9Gm+NQFv8fcH2L11GL7TA0whyCcw/kAX5iRepUXz/wed4JoA== dependencies: - "@nestjs/bull-shared" "^11.0.3" + "@nestjs/bull-shared" "^11.0.4" tslib "2.8.1" "@nestjs/cli@^11.0.10": @@ -716,10 +716,10 @@ consola "^2.15.0" node-fetch "^2.6.1" -"@opentelemetry/api-logs@0.206.0", "@opentelemetry/api-logs@^0.206.0": - version "0.206.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.206.0.tgz#4df1526fed55fe686e69100cbeea0311fa04565d" - integrity sha512-yIVDu9jX//nV5wSMLZLdHdb1SKHIMj9k+wQVFtln5Flcgdldz9BkHtavvExQiJqBZg2OpEEJEZmzQazYztdz2A== +"@opentelemetry/api-logs@0.207.0", "@opentelemetry/api-logs@^0.207.0": + version "0.207.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/api-logs/-/api-logs-0.207.0.tgz#ae991c51eedda55af037a3e6fc1ebdb12b289f49" + integrity sha512-lAb0jQRVyleQQGiuuvCOTDVspc14nx6XJjP4FspJ1sNARo3Regq4ZZbrc3rN4b1TYSuUCvgH+UXUPug4SLOqEQ== dependencies: "@opentelemetry/api" "^1.3.0" @@ -728,334 +728,334 @@ resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.9.0.tgz#d03eba68273dc0f7509e2a3d5cba21eae10379fe" integrity sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg== -"@opentelemetry/context-async-hooks@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/context-async-hooks/-/context-async-hooks-2.1.0.tgz#de1de21d9536abfe73769f822b52a59a8c97b083" - integrity sha512-zOyetmZppnwTyPrt4S7jMfXiSX9yyfF0hxlA8B5oo2TtKl+/RGCy7fi4DrBfIf3lCPrkKsRBWZZD7RFojK7FDg== +"@opentelemetry/context-async-hooks@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/context-async-hooks/-/context-async-hooks-2.2.0.tgz#5465f6fad6350f52cf9d95a92907a3a464d50644" + integrity sha512-qRkLWiUEZNAmYapZ7KGS5C4OmBLcP/H2foXeOEaowYCR0wi89fHejrfYfbuLVCMLp/dWZXKvQusdbUEZjERfwQ== -"@opentelemetry/core@2.1.0", "@opentelemetry/core@^2.0.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-2.1.0.tgz#5539f04eb9e5245e000b0c3f77bdfaa07557e3a7" - integrity sha512-RMEtHsxJs/GiHHxYT58IY57UXAQTuUnZVco6ymDEqTNlJKTimM4qPUPVe8InNFyBjhHBEAx4k3Q8LtNayBsbUQ== +"@opentelemetry/core@2.2.0", "@opentelemetry/core@^2.0.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/core/-/core-2.2.0.tgz#2f857d7790ff160a97db3820889b5f4cade6eaee" + integrity sha512-FuabnnUm8LflnieVxs6eP7Z383hgQU4W1e3KJS6aOG3RxWxcHyBxH8fDMHNgu/gFx/M2jvTOW/4/PHhLz6bjWw== dependencies: "@opentelemetry/semantic-conventions" "^1.29.0" -"@opentelemetry/exporter-logs-otlp-grpc@0.206.0": - version "0.206.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-logs-otlp-grpc/-/exporter-logs-otlp-grpc-0.206.0.tgz#a60f126f92297a4c487196c3080b5eb6cf8b1fc1" - integrity sha512-kJKxKBaGwqWop95d6tcluz260IWwIgOG0BH8oVm6429tg8LxY2PJb7Om8d5s+5vOFM8DkUYCnIpn9d/13/RcKQ== +"@opentelemetry/exporter-logs-otlp-grpc@0.207.0": + version "0.207.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-logs-otlp-grpc/-/exporter-logs-otlp-grpc-0.207.0.tgz#ed3b2bf34b53371b419cabf6578d4bbbaf515b83" + integrity sha512-K92RN+kQGTMzFDsCzsYNGqOsXRUnko/Ckk+t/yPJao72MewOLgBUTWVHhebgkNfRCYqDz1v3K0aPT9OJkemvgg== dependencies: "@grpc/grpc-js" "^1.7.1" - "@opentelemetry/core" "2.1.0" - "@opentelemetry/otlp-exporter-base" "0.206.0" - "@opentelemetry/otlp-grpc-exporter-base" "0.206.0" - "@opentelemetry/otlp-transformer" "0.206.0" - "@opentelemetry/sdk-logs" "0.206.0" - -"@opentelemetry/exporter-logs-otlp-http@0.206.0": - version "0.206.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-logs-otlp-http/-/exporter-logs-otlp-http-0.206.0.tgz#86a0856c1f86649b53a7475dbbd53f7edf71d0db" - integrity sha512-VWcHEnS+1kN+sQTAdCgSn2anqHPxY1/e52fhpe2mcSnEaXI1srFf3RU5DAu7hzQO6T9DPQzOKG8kc76vCtyYDw== - dependencies: - "@opentelemetry/api-logs" "0.206.0" - "@opentelemetry/core" "2.1.0" - "@opentelemetry/otlp-exporter-base" "0.206.0" - "@opentelemetry/otlp-transformer" "0.206.0" - "@opentelemetry/sdk-logs" "0.206.0" - -"@opentelemetry/exporter-logs-otlp-proto@0.206.0": - version "0.206.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-logs-otlp-proto/-/exporter-logs-otlp-proto-0.206.0.tgz#78e87a90413541974f4fb356c5659bb87f5398de" - integrity sha512-CsYNXJwkn1qCXJGE+/JvvYucAjL8rpaxa2hnl+tDP6M5E0O3UVa8zG4ZUEebjr5J5Nc32egvslEZx5rgNOp3lQ== - dependencies: - "@opentelemetry/api-logs" "0.206.0" - "@opentelemetry/core" "2.1.0" - "@opentelemetry/otlp-exporter-base" "0.206.0" - "@opentelemetry/otlp-transformer" "0.206.0" - "@opentelemetry/resources" "2.1.0" - "@opentelemetry/sdk-logs" "0.206.0" - "@opentelemetry/sdk-trace-base" "2.1.0" - -"@opentelemetry/exporter-metrics-otlp-grpc@0.206.0": - version "0.206.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-metrics-otlp-grpc/-/exporter-metrics-otlp-grpc-0.206.0.tgz#5a3eedc8f7aaa41218189d3f4fd8467d9abcd0c7" - integrity sha512-/qGIwVa27BSGqzULB34O+UtEVl4isc+gEd2ydMfZVidWpdkJYbMeZZYBWi4z6giD0w0Dep5k/NIJ/lSEZoKEIg== + "@opentelemetry/core" "2.2.0" + "@opentelemetry/otlp-exporter-base" "0.207.0" + "@opentelemetry/otlp-grpc-exporter-base" "0.207.0" + "@opentelemetry/otlp-transformer" "0.207.0" + "@opentelemetry/sdk-logs" "0.207.0" + +"@opentelemetry/exporter-logs-otlp-http@0.207.0": + version "0.207.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-logs-otlp-http/-/exporter-logs-otlp-http-0.207.0.tgz#d8bc11aaea2051df731da6c4e803431233399ebb" + integrity sha512-JpOh7MguEUls8eRfkVVW3yRhClo5b9LqwWTOg8+i4gjr/+8eiCtquJnC7whvpTIGyff06cLZ2NsEj+CVP3Mjeg== + dependencies: + "@opentelemetry/api-logs" "0.207.0" + "@opentelemetry/core" "2.2.0" + "@opentelemetry/otlp-exporter-base" "0.207.0" + "@opentelemetry/otlp-transformer" "0.207.0" + "@opentelemetry/sdk-logs" "0.207.0" + +"@opentelemetry/exporter-logs-otlp-proto@0.207.0": + version "0.207.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-logs-otlp-proto/-/exporter-logs-otlp-proto-0.207.0.tgz#6bc7fbf486faad896eefca822b40f0571651518b" + integrity sha512-RQJEV/K6KPbQrIUbsrRkEe0ufks1o5OGLHy6jbDD8tRjeCsbFHWfg99lYBRqBV33PYZJXsigqMaAbjWGTFYzLw== + dependencies: + "@opentelemetry/api-logs" "0.207.0" + "@opentelemetry/core" "2.2.0" + "@opentelemetry/otlp-exporter-base" "0.207.0" + "@opentelemetry/otlp-transformer" "0.207.0" + "@opentelemetry/resources" "2.2.0" + "@opentelemetry/sdk-logs" "0.207.0" + "@opentelemetry/sdk-trace-base" "2.2.0" + +"@opentelemetry/exporter-metrics-otlp-grpc@0.207.0": + version "0.207.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-metrics-otlp-grpc/-/exporter-metrics-otlp-grpc-0.207.0.tgz#40488e0cde225ad295f37516b3a738b75427a1b7" + integrity sha512-6flX89W54gkwmqYShdcTBR1AEF5C1Ob0O8pDgmLPikTKyEv27lByr9yBmO5WrP0+5qJuNPHrLfgFQFYi6npDGA== dependencies: "@grpc/grpc-js" "^1.7.1" - "@opentelemetry/core" "2.1.0" - "@opentelemetry/exporter-metrics-otlp-http" "0.206.0" - "@opentelemetry/otlp-exporter-base" "0.206.0" - "@opentelemetry/otlp-grpc-exporter-base" "0.206.0" - "@opentelemetry/otlp-transformer" "0.206.0" - "@opentelemetry/resources" "2.1.0" - "@opentelemetry/sdk-metrics" "2.1.0" - -"@opentelemetry/exporter-metrics-otlp-http@0.206.0": - version "0.206.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.206.0.tgz#4511b5993f531f152c07b08849638ead396028d9" - integrity sha512-u6ztHNbgNlFw3vCuOErGsiiEcDk9KB0pwd/Jv6aPnvV4oKJd/5K+lfiSjDpCFUh5UUFJdGmHtADxUgbRpYMPyA== - dependencies: - "@opentelemetry/core" "2.1.0" - "@opentelemetry/otlp-exporter-base" "0.206.0" - "@opentelemetry/otlp-transformer" "0.206.0" - "@opentelemetry/resources" "2.1.0" - "@opentelemetry/sdk-metrics" "2.1.0" - -"@opentelemetry/exporter-metrics-otlp-proto@0.206.0": - version "0.206.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-metrics-otlp-proto/-/exporter-metrics-otlp-proto-0.206.0.tgz#87405977a31ced98effb026a6aeff73b6e5f3032" - integrity sha512-mLlmXmVOSwMw8Cm9RKz5ZuTUWW28lQWWIcy5cpEUhIrJ5cuSuTZ/PKIaa3+CHmcKkkF2pWFdBkzOIar9aApzoQ== - dependencies: - "@opentelemetry/core" "2.1.0" - "@opentelemetry/exporter-metrics-otlp-http" "0.206.0" - "@opentelemetry/otlp-exporter-base" "0.206.0" - "@opentelemetry/otlp-transformer" "0.206.0" - "@opentelemetry/resources" "2.1.0" - "@opentelemetry/sdk-metrics" "2.1.0" - -"@opentelemetry/exporter-prometheus@0.206.0", "@opentelemetry/exporter-prometheus@^0.206.0": - version "0.206.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-prometheus/-/exporter-prometheus-0.206.0.tgz#3a424375890ee0e8f467b31694fa194bdcb81c96" - integrity sha512-sCzW+vE2KhlDZhH73f7drr+d0kvlsqG02t9xGtG40c6t4hjgpa5qEwEZTzFo9s4djtUrmDBjwJ5S3NYuCERVKg== - dependencies: - "@opentelemetry/core" "2.1.0" - "@opentelemetry/resources" "2.1.0" - "@opentelemetry/sdk-metrics" "2.1.0" - -"@opentelemetry/exporter-trace-otlp-grpc@0.206.0": - version "0.206.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.206.0.tgz#4405326f4c37e3a420f274b519289529f1de93fc" - integrity sha512-/q8sU9wj20tT9m+529VXN9E9DzpvNui5Cict8onY/gRGeXqTav21xHkvmv0FSpetb/29WS89drVjfI8/Mf2iWQ== + "@opentelemetry/core" "2.2.0" + "@opentelemetry/exporter-metrics-otlp-http" "0.207.0" + "@opentelemetry/otlp-exporter-base" "0.207.0" + "@opentelemetry/otlp-grpc-exporter-base" "0.207.0" + "@opentelemetry/otlp-transformer" "0.207.0" + "@opentelemetry/resources" "2.2.0" + "@opentelemetry/sdk-metrics" "2.2.0" + +"@opentelemetry/exporter-metrics-otlp-http@0.207.0": + version "0.207.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.207.0.tgz#29b1acac4cd506a61f297ec50a3214095247a245" + integrity sha512-fG8FAJmvXOrKXGIRN8+y41U41IfVXxPRVwyB05LoMqYSjugx/FSBkMZUZXUT/wclTdmBKtS5MKoi0bEKkmRhSw== + dependencies: + "@opentelemetry/core" "2.2.0" + "@opentelemetry/otlp-exporter-base" "0.207.0" + "@opentelemetry/otlp-transformer" "0.207.0" + "@opentelemetry/resources" "2.2.0" + "@opentelemetry/sdk-metrics" "2.2.0" + +"@opentelemetry/exporter-metrics-otlp-proto@0.207.0": + version "0.207.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-metrics-otlp-proto/-/exporter-metrics-otlp-proto-0.207.0.tgz#dca0dd10febbef5c9bd89c0bde7d36fb5f93c7cd" + integrity sha512-kDBxiTeQjaRlUQzS1COT9ic+et174toZH6jxaVuVAvGqmxOkgjpLOjrI5ff8SMMQE69r03L3Ll3nPKekLopLwg== + dependencies: + "@opentelemetry/core" "2.2.0" + "@opentelemetry/exporter-metrics-otlp-http" "0.207.0" + "@opentelemetry/otlp-exporter-base" "0.207.0" + "@opentelemetry/otlp-transformer" "0.207.0" + "@opentelemetry/resources" "2.2.0" + "@opentelemetry/sdk-metrics" "2.2.0" + +"@opentelemetry/exporter-prometheus@0.207.0", "@opentelemetry/exporter-prometheus@^0.207.0": + version "0.207.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-prometheus/-/exporter-prometheus-0.207.0.tgz#67e7d2a5b8fe9942c5aec8bce711288f501815a5" + integrity sha512-Y5p1s39FvIRmU+F1++j7ly8/KSqhMmn6cMfpQqiDCqDjdDHwUtSq0XI0WwL3HYGnZeaR/VV4BNmsYQJ7GAPrhw== + dependencies: + "@opentelemetry/core" "2.2.0" + "@opentelemetry/resources" "2.2.0" + "@opentelemetry/sdk-metrics" "2.2.0" + +"@opentelemetry/exporter-trace-otlp-grpc@0.207.0": + version "0.207.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.207.0.tgz#e5f6a376b8947dc70c0b2df790e17daf881bf5b6" + integrity sha512-7u2ZmcIx6D4KG/+5np4X2qA0o+O0K8cnUDhR4WI/vr5ZZ0la9J9RG+tkSjC7Yz+2XgL6760gSIM7/nyd3yaBLA== dependencies: "@grpc/grpc-js" "^1.7.1" - "@opentelemetry/core" "2.1.0" - "@opentelemetry/otlp-exporter-base" "0.206.0" - "@opentelemetry/otlp-grpc-exporter-base" "0.206.0" - "@opentelemetry/otlp-transformer" "0.206.0" - "@opentelemetry/resources" "2.1.0" - "@opentelemetry/sdk-trace-base" "2.1.0" - -"@opentelemetry/exporter-trace-otlp-http@0.206.0", "@opentelemetry/exporter-trace-otlp-http@^0.206.0": - version "0.206.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.206.0.tgz#a9215ae233d0df7a15039bec9fd67ec6da1d28ed" - integrity sha512-xiEhJZxE9yDb13FVW4XaF7J56boLv1NALOGEVu3F8jMC24iZmX5TSVRJCNGLWyy1Xb3N27Yu31kdSsmEBCnxyw== - dependencies: - "@opentelemetry/core" "2.1.0" - "@opentelemetry/otlp-exporter-base" "0.206.0" - "@opentelemetry/otlp-transformer" "0.206.0" - "@opentelemetry/resources" "2.1.0" - "@opentelemetry/sdk-trace-base" "2.1.0" - -"@opentelemetry/exporter-trace-otlp-proto@0.206.0": - version "0.206.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.206.0.tgz#a4cdcc4702c862ac160a501c84df2f82c6c8ee61" - integrity sha512-A3lGp39qqZGt6PU/9X682/4KdkDMu+jO+slnNCdm8Zki3AKEFulY2yYtz4rL0rah/liN+ENRsFQWI/B3xJiZGw== - dependencies: - "@opentelemetry/core" "2.1.0" - "@opentelemetry/otlp-exporter-base" "0.206.0" - "@opentelemetry/otlp-transformer" "0.206.0" - "@opentelemetry/resources" "2.1.0" - "@opentelemetry/sdk-trace-base" "2.1.0" - -"@opentelemetry/exporter-zipkin@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-zipkin/-/exporter-zipkin-2.1.0.tgz#4e0a38757df09a04b2dc3194f1a9d56909d1c2d6" - integrity sha512-0mEI0VDZrrX9t5RE1FhAyGz+jAGt96HSuXu73leswtY3L5YZD11gtcpARY2KAx/s6Z2+rj5Mhj566JsI2C7mfA== + "@opentelemetry/core" "2.2.0" + "@opentelemetry/otlp-exporter-base" "0.207.0" + "@opentelemetry/otlp-grpc-exporter-base" "0.207.0" + "@opentelemetry/otlp-transformer" "0.207.0" + "@opentelemetry/resources" "2.2.0" + "@opentelemetry/sdk-trace-base" "2.2.0" + +"@opentelemetry/exporter-trace-otlp-http@0.207.0", "@opentelemetry/exporter-trace-otlp-http@^0.207.0": + version "0.207.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.207.0.tgz#1eb5046d160753698ff84a686f2c4dde7a9b446c" + integrity sha512-HSRBzXHIC7C8UfPQdu15zEEoBGv0yWkhEwxqgPCHVUKUQ9NLHVGXkVrf65Uaj7UwmAkC1gQfkuVYvLlD//AnUQ== + dependencies: + "@opentelemetry/core" "2.2.0" + "@opentelemetry/otlp-exporter-base" "0.207.0" + "@opentelemetry/otlp-transformer" "0.207.0" + "@opentelemetry/resources" "2.2.0" + "@opentelemetry/sdk-trace-base" "2.2.0" + +"@opentelemetry/exporter-trace-otlp-proto@0.207.0": + version "0.207.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.207.0.tgz#6421e8e68a00f677664ae2e11d13bd8969e24454" + integrity sha512-ruUQB4FkWtxHjNmSXjrhmJZFvyMm+tBzHyMm7YPQshApy4wvZUTcrpPyP/A/rCl/8M4BwoVIZdiwijMdbZaq4w== + dependencies: + "@opentelemetry/core" "2.2.0" + "@opentelemetry/otlp-exporter-base" "0.207.0" + "@opentelemetry/otlp-transformer" "0.207.0" + "@opentelemetry/resources" "2.2.0" + "@opentelemetry/sdk-trace-base" "2.2.0" + +"@opentelemetry/exporter-zipkin@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/exporter-zipkin/-/exporter-zipkin-2.2.0.tgz#92cd6438fcd92d2202a58ae9540673c888b6741a" + integrity sha512-VV4QzhGCT7cWrGasBWxelBjqbNBbyHicWWS/66KoZoe9BzYwFB72SH2/kkc4uAviQlO8iwv2okIJy+/jqqEHTg== dependencies: - "@opentelemetry/core" "2.1.0" - "@opentelemetry/resources" "2.1.0" - "@opentelemetry/sdk-trace-base" "2.1.0" + "@opentelemetry/core" "2.2.0" + "@opentelemetry/resources" "2.2.0" + "@opentelemetry/sdk-trace-base" "2.2.0" "@opentelemetry/semantic-conventions" "^1.29.0" -"@opentelemetry/instrumentation-express@^0.55.0": - version "0.55.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-express/-/instrumentation-express-0.55.0.tgz#8b77f7158ed259864fad4771487500793bc78019" - integrity sha512-E4SSJJcEZv8OIE643gcuJt8gZzxNbUft/x4tZmF5r1zqIFkmzhCgpKpDrFtrUh/blRjiOdOWlT7E4tzU19fDEA== +"@opentelemetry/instrumentation-express@^0.56.0": + version "0.56.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-express/-/instrumentation-express-0.56.0.tgz#b1c0ca9a31a716937f3ce4dfe2f51afb30ac5e12" + integrity sha512-rMV0WUTtAGEhHrHl3uDRIO97EkNUp4ewrW2iRVuP7kaV5qRT2b1pPV5PE75oR3GyLLSTooSAzGWl6CTm8eftKQ== dependencies: "@opentelemetry/core" "^2.0.0" - "@opentelemetry/instrumentation" "^0.206.0" + "@opentelemetry/instrumentation" "^0.207.0" "@opentelemetry/semantic-conventions" "^1.27.0" -"@opentelemetry/instrumentation-fetch@^0.206.0": - version "0.206.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-fetch/-/instrumentation-fetch-0.206.0.tgz#e396025498c0c742d2c118b38fccfb5265349595" - integrity sha512-/5aZ3hCjCz2IoqVgCvVlFLUwzpOoIXmw0EQwVKFZ4sjMnHOEVhZdlHUeZB7KfTdwELNNJJAaPzBU2UQ6CXPEYA== +"@opentelemetry/instrumentation-fetch@^0.207.0": + version "0.207.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-fetch/-/instrumentation-fetch-0.207.0.tgz#af1538ad610cb33d8bd62013e0084fb9d4996905" + integrity sha512-Urqh7w/KIGNYeaRf5Ba9FdJYCUF/g8RpiyywsMRc8sTK6hyQsn2p2vh+MzUQacQ7vZPzBc2u1l2034sIMhvGzA== dependencies: - "@opentelemetry/core" "2.1.0" - "@opentelemetry/instrumentation" "0.206.0" - "@opentelemetry/sdk-trace-web" "2.1.0" + "@opentelemetry/core" "2.2.0" + "@opentelemetry/instrumentation" "0.207.0" + "@opentelemetry/sdk-trace-web" "2.2.0" "@opentelemetry/semantic-conventions" "^1.29.0" -"@opentelemetry/instrumentation-http@^0.206.0": - version "0.206.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-http/-/instrumentation-http-0.206.0.tgz#059cf4a3b926b5e0a05ce4c27120e8ca01a75efc" - integrity sha512-U355U6PpRSj5NDLqI8uY2SPp4uapuGASSGFLPoQbrqphHQ6pJrHDFBTR72a+S5XvHJo1PlLS84k4IOl+tXYPsA== +"@opentelemetry/instrumentation-http@^0.207.0": + version "0.207.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-http/-/instrumentation-http-0.207.0.tgz#167a3acea4ec027bd24937d0b52f182e35be179f" + integrity sha512-FC4i5hVixTzuhg4SV2ycTEAYx+0E2hm+GwbdoVPSA6kna0pPVI4etzaA9UkpJ9ussumQheFXP6rkGIaFJjMxsw== dependencies: - "@opentelemetry/core" "2.1.0" - "@opentelemetry/instrumentation" "0.206.0" + "@opentelemetry/core" "2.2.0" + "@opentelemetry/instrumentation" "0.207.0" "@opentelemetry/semantic-conventions" "^1.29.0" forwarded-parse "2.1.2" -"@opentelemetry/instrumentation-nestjs-core@^0.53.0": - version "0.53.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.53.0.tgz#3e2ef55651c1a617c0a03430791812f9f89b18c3" - integrity sha512-8sDcdwPb6fJ2ayD7Q7H2Vxwj21ao8Atuvm+RtPzAdrOvqEWTigpO99LJaEsZRRphJTdRBejg07/oYQzJusPODQ== +"@opentelemetry/instrumentation-nestjs-core@^0.54.0": + version "0.54.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-nestjs-core/-/instrumentation-nestjs-core-0.54.0.tgz#4ba911323d2e4f93474957bc16451f61478bb2b3" + integrity sha512-kqJcOVcniazueWTXt9czK6gd9xlHw5IM5JQM4wfH0ZkjZjNkKtQNzlhjdJpvqVhU9bGHet1yfrHOKXxlP4YeOA== dependencies: - "@opentelemetry/instrumentation" "^0.206.0" + "@opentelemetry/instrumentation" "^0.207.0" "@opentelemetry/semantic-conventions" "^1.30.0" -"@opentelemetry/instrumentation-pg@^0.59.0": - version "0.59.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.59.0.tgz#86e9edc77bba77844b0fbd821abd23dc2999c68e" - integrity sha512-26Q6wwsx84K8KNX/CZ2q6ZRv2hIzPawRpL0og+Ro4BHN8Qin+ktkqFDlF2n83KPJn/tFstz3nErue+DAVXAGTw== +"@opentelemetry/instrumentation-pg@^0.60.0": + version "0.60.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.60.0.tgz#a3aa5533699ddf325df91315e2dc1bfc4c812346" + integrity sha512-qZKeQojYJMoo7kWbHw/+SHopSdhfTxNISsBS+ZBbkr44sepmk/PmyU2AbOsSK7VOKvFt3oZde2n2nly7rk0SsA== dependencies: "@opentelemetry/core" "^2.0.0" - "@opentelemetry/instrumentation" "^0.206.0" + "@opentelemetry/instrumentation" "^0.207.0" "@opentelemetry/semantic-conventions" "^1.34.0" "@opentelemetry/sql-common" "^0.41.2" "@types/pg" "8.15.5" "@types/pg-pool" "2.0.6" -"@opentelemetry/instrumentation-winston@^0.51.0": - version "0.51.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-winston/-/instrumentation-winston-0.51.0.tgz#c14b6fc26827a2f0922a556785cd651723bc4ea6" - integrity sha512-OMiMxDXsQ0XEefVcFtCp7hYXkfEtqCd8Y0/Lsam3G+U4etujqhYSL4IfteHysntFAT6Ji2JZ5QmffuwPKf/07g== +"@opentelemetry/instrumentation-winston@^0.52.0": + version "0.52.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation-winston/-/instrumentation-winston-0.52.0.tgz#4360b735cebd548d58a16629f91776884de56b5d" + integrity sha512-UtQIpNA0ZoaFdFRh2ygs2wA+prqwIgLzv4w0CAqph24FFsxHv7Uu8hgt69Y3EGC/NXJjVv7IMDmrXjCwP36EXQ== dependencies: - "@opentelemetry/api-logs" "^0.206.0" - "@opentelemetry/instrumentation" "^0.206.0" + "@opentelemetry/api-logs" "^0.207.0" + "@opentelemetry/instrumentation" "^0.207.0" -"@opentelemetry/instrumentation@0.206.0", "@opentelemetry/instrumentation@^0.206.0": - version "0.206.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.206.0.tgz#d65ae4327365c3a2c1c11750e7e8bd737873f8b4" - integrity sha512-anPU9GAn3vSH/0JFQZ4e626xRw8p8R21kxM7xammFk9BRhfDw1IpgqvFMllbb+1MSHHEX9EiUqYHJyWo/B6KGA== +"@opentelemetry/instrumentation@0.207.0", "@opentelemetry/instrumentation@^0.207.0": + version "0.207.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/instrumentation/-/instrumentation-0.207.0.tgz#1a5a921c04f171ff28096fa320af713f3c87ec14" + integrity sha512-y6eeli9+TLKnznrR8AZlQMSJT7wILpXH+6EYq5Vf/4Ao+huI7EedxQHwRgVUOMLFbe7VFDvHJrX9/f4lcwnJsA== dependencies: - "@opentelemetry/api-logs" "0.206.0" - import-in-the-middle "^1.8.1" + "@opentelemetry/api-logs" "0.207.0" + import-in-the-middle "^2.0.0" require-in-the-middle "^8.0.0" -"@opentelemetry/otlp-exporter-base@0.206.0": - version "0.206.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.206.0.tgz#9090e04ab5cb235074fc0fbeace7c6ef7305e492" - integrity sha512-Rv54oSNKMHYS5hv+H5EGksfBUtvPQWFTK+Dk6MjJun9tOijCsFJrhRFvAqg5d67TWSMn+ZQYRKIeXh5oLVrpAQ== +"@opentelemetry/otlp-exporter-base@0.207.0": + version "0.207.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.207.0.tgz#8a06e495d63d4b38e49a8852e9ff9d4e766f7cf4" + integrity sha512-4RQluMVVGMrHok/3SVeSJ6EnRNkA2MINcX88sh+d/7DjGUrewW/WT88IsMEci0wUM+5ykTpPPNbEOoW+jwHnbw== dependencies: - "@opentelemetry/core" "2.1.0" - "@opentelemetry/otlp-transformer" "0.206.0" + "@opentelemetry/core" "2.2.0" + "@opentelemetry/otlp-transformer" "0.207.0" -"@opentelemetry/otlp-grpc-exporter-base@0.206.0": - version "0.206.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.206.0.tgz#59d8f10f59a94c5c87a277bb80230a7e9d420549" - integrity sha512-IA8EDbrB8OKtidMqErBY8sUc9mh03LOXuNPwp4/rdPrxSt45g1gBuZMovRXdEWfRyKKbF2E7MdipT2m11bs6SQ== +"@opentelemetry/otlp-grpc-exporter-base@0.207.0": + version "0.207.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.207.0.tgz#c464d832f9168db9d4c4ea493811efb8b074aec0" + integrity sha512-eKFjKNdsPed4q9yYqeI5gBTLjXxDM/8jwhiC0icw3zKxHVGBySoDsed5J5q/PGY/3quzenTr3FiTxA3NiNT+nw== dependencies: "@grpc/grpc-js" "^1.7.1" - "@opentelemetry/core" "2.1.0" - "@opentelemetry/otlp-exporter-base" "0.206.0" - "@opentelemetry/otlp-transformer" "0.206.0" - -"@opentelemetry/otlp-transformer@0.206.0": - version "0.206.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-transformer/-/otlp-transformer-0.206.0.tgz#c5279f00c8ab3069226cc084a062bd1c684841fd" - integrity sha512-Li2Cik1WnmNbU2mmTnw7DxvRiXhMcnAuTfAclP8y/zy7h5+GrLDpTZ+Z0XUs+Q3MLkb/h3ry4uFrC/z+2a6X7g== - dependencies: - "@opentelemetry/api-logs" "0.206.0" - "@opentelemetry/core" "2.1.0" - "@opentelemetry/resources" "2.1.0" - "@opentelemetry/sdk-logs" "0.206.0" - "@opentelemetry/sdk-metrics" "2.1.0" - "@opentelemetry/sdk-trace-base" "2.1.0" + "@opentelemetry/core" "2.2.0" + "@opentelemetry/otlp-exporter-base" "0.207.0" + "@opentelemetry/otlp-transformer" "0.207.0" + +"@opentelemetry/otlp-transformer@0.207.0": + version "0.207.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/otlp-transformer/-/otlp-transformer-0.207.0.tgz#32dfee8283e030ad3fea041bed54e9ff440582df" + integrity sha512-+6DRZLqM02uTIY5GASMZWUwr52sLfNiEe20+OEaZKhztCs3+2LxoTjb6JxFRd9q1qNqckXKYlUKjbH/AhG8/ZA== + dependencies: + "@opentelemetry/api-logs" "0.207.0" + "@opentelemetry/core" "2.2.0" + "@opentelemetry/resources" "2.2.0" + "@opentelemetry/sdk-logs" "0.207.0" + "@opentelemetry/sdk-metrics" "2.2.0" + "@opentelemetry/sdk-trace-base" "2.2.0" protobufjs "^7.3.0" -"@opentelemetry/propagator-b3@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/propagator-b3/-/propagator-b3-2.1.0.tgz#7767fbb62f9c43115cb4dee48ab9acc6dba43963" - integrity sha512-yOdHmFseIChYanddMMz0mJIFQHyjwbNhoxc65fEAA8yanxcBPwoFDoh1+WBUWAO/Z0NRgk+k87d+aFIzAZhcBw== +"@opentelemetry/propagator-b3@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/propagator-b3/-/propagator-b3-2.2.0.tgz#fc1067b5fa618d06b6104d4c5b2a3c8ff7f09d55" + integrity sha512-9CrbTLFi5Ee4uepxg2qlpQIozoJuoAZU5sKMx0Mn7Oh+p7UrgCiEV6C02FOxxdYVRRFQVCinYR8Kf6eMSQsIsw== dependencies: - "@opentelemetry/core" "2.1.0" + "@opentelemetry/core" "2.2.0" -"@opentelemetry/propagator-jaeger@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/propagator-jaeger/-/propagator-jaeger-2.1.0.tgz#4bb040a4cb49e8f04523a1ad29b3b247717ba7ae" - integrity sha512-QYo7vLyMjrBCUTpwQBF/e+rvP7oGskrSELGxhSvLj5gpM0az9oJnu/0O4l2Nm7LEhAff80ntRYKkAcSwVgvSVQ== +"@opentelemetry/propagator-jaeger@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/propagator-jaeger/-/propagator-jaeger-2.2.0.tgz#c94b973320fffb44fba450978cbf23f68ced9cd3" + integrity sha512-FfeOHOrdhiNzecoB1jZKp2fybqmqMPJUXe2ZOydP7QzmTPYcfPeuaclTLYVhK3HyJf71kt8sTl92nV4YIaLaKA== dependencies: - "@opentelemetry/core" "2.1.0" + "@opentelemetry/core" "2.2.0" -"@opentelemetry/resources@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-2.1.0.tgz#11772e732af4f27953cf55567a6630d8b4d8282d" - integrity sha512-1CJjf3LCvoefUOgegxi8h6r4B/wLSzInyhGP2UmIBYNlo4Qk5CZ73e1eEyWmfXvFtm1ybkmfb2DqWvspsYLrWw== +"@opentelemetry/resources@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/resources/-/resources-2.2.0.tgz#b90a950ad98551295b76ea8a0e7efe45a179badf" + integrity sha512-1pNQf/JazQTMA0BiO5NINUzH0cbLbbl7mntLa4aJNmCCXSj0q03T5ZXXL0zw4G55TjdL9Tz32cznGClf+8zr5A== dependencies: - "@opentelemetry/core" "2.1.0" + "@opentelemetry/core" "2.2.0" "@opentelemetry/semantic-conventions" "^1.29.0" -"@opentelemetry/sdk-logs@0.206.0": - version "0.206.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-logs/-/sdk-logs-0.206.0.tgz#ac5251651bc80b80ffd8c4b1b028aa98f7b4c738" - integrity sha512-SQ2yTmqe4Mw9RI3a/glVkfjWPsXh6LySvnljXubiZq4zu+UP8NMJt2j82ZsYb+KpD7Eu+/41/7qlJnjdeVjz7Q== +"@opentelemetry/sdk-logs@0.207.0": + version "0.207.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-logs/-/sdk-logs-0.207.0.tgz#970ef9adcb4a19098eb53997846e0773fe16ba26" + integrity sha512-4MEQmn04y+WFe6cyzdrXf58hZxilvY59lzZj2AccuHW/+BxLn/rGVN/Irsi/F0qfBOpMOrrCLKTExoSL2zoQmg== dependencies: - "@opentelemetry/api-logs" "0.206.0" - "@opentelemetry/core" "2.1.0" - "@opentelemetry/resources" "2.1.0" + "@opentelemetry/api-logs" "0.207.0" + "@opentelemetry/core" "2.2.0" + "@opentelemetry/resources" "2.2.0" -"@opentelemetry/sdk-metrics@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-metrics/-/sdk-metrics-2.1.0.tgz#fbb9b270ee56c29feba885062e5c0418213fccf2" - integrity sha512-J9QX459mzqHLL9Y6FZ4wQPRZG4TOpMCyPOh6mkr/humxE1W2S3Bvf4i75yiMW9uyed2Kf5rxmLhTm/UK8vNkAw== - dependencies: - "@opentelemetry/core" "2.1.0" - "@opentelemetry/resources" "2.1.0" - -"@opentelemetry/sdk-node@^0.206.0": - version "0.206.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-node/-/sdk-node-0.206.0.tgz#cf1e412627eac01acad70e01246b1411c8f88bea" - integrity sha512-t/2xYG1+pXK2M4jra48Gw6BS0E/hz4zYwuqC8G8JCTx9UQpCiFlaA3Yxbns79R1h6NbQz7NAe2kJO3/Jf9BoIA== - dependencies: - "@opentelemetry/api-logs" "0.206.0" - "@opentelemetry/core" "2.1.0" - "@opentelemetry/exporter-logs-otlp-grpc" "0.206.0" - "@opentelemetry/exporter-logs-otlp-http" "0.206.0" - "@opentelemetry/exporter-logs-otlp-proto" "0.206.0" - "@opentelemetry/exporter-metrics-otlp-grpc" "0.206.0" - "@opentelemetry/exporter-metrics-otlp-http" "0.206.0" - "@opentelemetry/exporter-metrics-otlp-proto" "0.206.0" - "@opentelemetry/exporter-prometheus" "0.206.0" - "@opentelemetry/exporter-trace-otlp-grpc" "0.206.0" - "@opentelemetry/exporter-trace-otlp-http" "0.206.0" - "@opentelemetry/exporter-trace-otlp-proto" "0.206.0" - "@opentelemetry/exporter-zipkin" "2.1.0" - "@opentelemetry/instrumentation" "0.206.0" - "@opentelemetry/propagator-b3" "2.1.0" - "@opentelemetry/propagator-jaeger" "2.1.0" - "@opentelemetry/resources" "2.1.0" - "@opentelemetry/sdk-logs" "0.206.0" - "@opentelemetry/sdk-metrics" "2.1.0" - "@opentelemetry/sdk-trace-base" "2.1.0" - "@opentelemetry/sdk-trace-node" "2.1.0" +"@opentelemetry/sdk-metrics@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-metrics/-/sdk-metrics-2.2.0.tgz#3824133f0d681d778aff0f52b02a87ec6750fc2d" + integrity sha512-G5KYP6+VJMZzpGipQw7Giif48h6SGQ2PFKEYCybeXJsOCB4fp8azqMAAzE5lnnHK3ZVwYQrgmFbsUJO/zOnwGw== + dependencies: + "@opentelemetry/core" "2.2.0" + "@opentelemetry/resources" "2.2.0" + +"@opentelemetry/sdk-node@^0.207.0": + version "0.207.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-node/-/sdk-node-0.207.0.tgz#b42d8a57df62f6ef00533220be9a9306afa2c6f0" + integrity sha512-hnRsX/M8uj0WaXOBvFenQ8XsE8FLVh2uSnn1rkWu4mx+qu7EKGUZvZng6y/95cyzsqOfiaDDr08Ek4jppkIDNg== + dependencies: + "@opentelemetry/api-logs" "0.207.0" + "@opentelemetry/core" "2.2.0" + "@opentelemetry/exporter-logs-otlp-grpc" "0.207.0" + "@opentelemetry/exporter-logs-otlp-http" "0.207.0" + "@opentelemetry/exporter-logs-otlp-proto" "0.207.0" + "@opentelemetry/exporter-metrics-otlp-grpc" "0.207.0" + "@opentelemetry/exporter-metrics-otlp-http" "0.207.0" + "@opentelemetry/exporter-metrics-otlp-proto" "0.207.0" + "@opentelemetry/exporter-prometheus" "0.207.0" + "@opentelemetry/exporter-trace-otlp-grpc" "0.207.0" + "@opentelemetry/exporter-trace-otlp-http" "0.207.0" + "@opentelemetry/exporter-trace-otlp-proto" "0.207.0" + "@opentelemetry/exporter-zipkin" "2.2.0" + "@opentelemetry/instrumentation" "0.207.0" + "@opentelemetry/propagator-b3" "2.2.0" + "@opentelemetry/propagator-jaeger" "2.2.0" + "@opentelemetry/resources" "2.2.0" + "@opentelemetry/sdk-logs" "0.207.0" + "@opentelemetry/sdk-metrics" "2.2.0" + "@opentelemetry/sdk-trace-base" "2.2.0" + "@opentelemetry/sdk-trace-node" "2.2.0" "@opentelemetry/semantic-conventions" "^1.29.0" -"@opentelemetry/sdk-trace-base@2.1.0", "@opentelemetry/sdk-trace-base@^2.0.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.1.0.tgz#9d31474824e9ed215f94bf71260d5321f64d402a" - integrity sha512-uTX9FBlVQm4S2gVQO1sb5qyBLq/FPjbp+tmGoxu4tIgtYGmBYB44+KX/725RFDe30yBSaA9Ml9fqphe1hbUyLQ== +"@opentelemetry/sdk-trace-base@2.2.0", "@opentelemetry/sdk-trace-base@^2.0.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.2.0.tgz#ddef9a0afd01a623d8625a3529f2137b05e67d0b" + integrity sha512-xWQgL0Bmctsalg6PaXExmzdedSp3gyKV8mQBwK/j9VGdCDu2fmXIb2gAehBKbkXCpJ4HPkgv3QfoJWRT4dHWbw== dependencies: - "@opentelemetry/core" "2.1.0" - "@opentelemetry/resources" "2.1.0" + "@opentelemetry/core" "2.2.0" + "@opentelemetry/resources" "2.2.0" "@opentelemetry/semantic-conventions" "^1.29.0" -"@opentelemetry/sdk-trace-node@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-node/-/sdk-trace-node-2.1.0.tgz#cc066fefa87dd0898e77397224501a5f116397e0" - integrity sha512-SvVlBFc/jI96u/mmlKm86n9BbTCbQ35nsPoOohqJX6DXH92K0kTe73zGY5r8xoI1QkjR9PizszVJLzMC966y9Q== +"@opentelemetry/sdk-trace-node@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-node/-/sdk-trace-node-2.2.0.tgz#a2666a087d96fc31888169ad5f4cc1448b35cd8c" + integrity sha512-+OaRja3f0IqGG2kptVeYsrZQK9nKRSpfFrKtRBq4uh6nIB8bTBgaGvYQrQoRrQWQMA5dK5yLhDMDc0dvYvCOIQ== dependencies: - "@opentelemetry/context-async-hooks" "2.1.0" - "@opentelemetry/core" "2.1.0" - "@opentelemetry/sdk-trace-base" "2.1.0" + "@opentelemetry/context-async-hooks" "2.2.0" + "@opentelemetry/core" "2.2.0" + "@opentelemetry/sdk-trace-base" "2.2.0" -"@opentelemetry/sdk-trace-web@2.1.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-web/-/sdk-trace-web-2.1.0.tgz#5765729ad975a8611eb863d40778d644eda4ae54" - integrity sha512-2F6ZuZFmJg4CdhRPP8+60DkvEwGLCiU3ffAkgnnqe/ALGEBqGa0HrZaNWFGprXWVivrYHpXhr7AEfasgLZD71g== +"@opentelemetry/sdk-trace-web@2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@opentelemetry/sdk-trace-web/-/sdk-trace-web-2.2.0.tgz#9b6a894cf166fc821d329b65e26a3fd008cbfef0" + integrity sha512-x/LHsDBO3kfqaFx5qSzBljJ5QHsRXrvS4MybBDy1k7Svidb8ZyIPudWVzj3s5LpPkYZIgi9e+7tdsNCnptoelw== dependencies: - "@opentelemetry/core" "2.1.0" - "@opentelemetry/sdk-trace-base" "2.1.0" + "@opentelemetry/core" "2.2.0" + "@opentelemetry/sdk-trace-base" "2.2.0" "@opentelemetry/semantic-conventions@^1.27.0", "@opentelemetry/semantic-conventions@^1.29.0", "@opentelemetry/semantic-conventions@^1.30.0", "@opentelemetry/semantic-conventions@^1.34.0": version "1.36.0" @@ -1163,10 +1163,10 @@ "@types/node" "*" "@types/ssh2" "*" -"@types/dockerode@^3.3.44": - version "3.3.44" - resolved "https://registry.yarnpkg.com/@types/dockerode/-/dockerode-3.3.44.tgz#1e6d5b291646820e9daabfa132cdb33c9d535b56" - integrity sha512-fUpIHlsbYpxAJb285xx3vp7q5wf5mjqSn3cYwl/MhiM+DB99OdO5sOCPlO0PjO+TyOtphPs7tMVLU/RtOo/JjA== +"@types/dockerode@^3.3.45": + version "3.3.45" + resolved "https://registry.yarnpkg.com/@types/dockerode/-/dockerode-3.3.45.tgz#1b5f19301563acf811adc13a6b2b3e0981998a5e" + integrity sha512-iYpZF+xr5QLpIICejLdUF2r5gh8IXY1Gw3WLmt41dUbS3Vn/3hVgL+6lJBVbmrhYBWfbWPPstdr6+A0s95DTWA== dependencies: "@types/docker-modem" "*" "@types/node" "*" @@ -1244,10 +1244,10 @@ dependencies: "@types/express" "*" -"@types/node@*", "@types/node@24.7.0", "@types/node@>=13.7.0": - version "24.7.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-24.7.0.tgz#a34c9f0d3401db396782e440317dd5d8373c286f" - integrity sha512-IbKooQVqUBrlzWTi79E8Fw78l8k1RNtlDDNWsFZs7XonuQSJ8oNYfEeclhprUldXISRMLzBpILuKgPlIxm+/Yw== +"@types/node@*", "@types/node@24.7.2", "@types/node@>=13.7.0": + version "24.7.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-24.7.2.tgz#5adf66b6e2ac5cab1d10a2ad3682e359cb652f4a" + integrity sha512-/NbVmcGTP+lj5oa4yiYxxeBjRivKQ5Ns1eSZeB99ExsEQ6rX5XYU1Zy/gGxY/ilqtD4Etx9mKyrPxZRetiahhA== dependencies: undici-types "~7.14.0" @@ -2636,10 +2636,10 @@ googleapis-common@^8.0.0: qs "^6.7.0" url-template "^2.0.8" -googleapis@^161.0.0: - version "161.0.0" - resolved "https://registry.yarnpkg.com/googleapis/-/googleapis-161.0.0.tgz#63c1e3bf675683fdf131d5f05ae4f9613c5f60ee" - integrity sha512-JZy2cWMxgUF8E09KHzplI+z+FVG8NWDB/bsf4xevt9Um4bInb0X1qaG9qpDn49DHT5HsU0mOp3EOBGb8+AdE3Q== +googleapis@^164.1.0: + version "164.1.0" + resolved "https://registry.yarnpkg.com/googleapis/-/googleapis-164.1.0.tgz#21050b2e5a769de9359a375030fa99bca6dcf6d2" + integrity sha512-dIN768H8so9qGucFtjYPBZJ+OCEgDi/xYyvYQHniPL1ZCYvrRDBTmtbjVjKCPG1CuOhG4CKHZDXiFe6QZ2qBeQ== dependencies: google-auth-library "^10.2.0" googleapis-common "^8.0.0" @@ -2742,10 +2742,10 @@ import-fresh@^3.3.0: parent-module "^1.0.0" resolve-from "^4.0.0" -import-in-the-middle@^1.8.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/import-in-the-middle/-/import-in-the-middle-1.13.1.tgz#789651f9e93dd902a5a306f499ab51eb72b03a12" - integrity sha512-k2V9wNm9B+ysuelDTHjI9d5KPc4l8zAZTGqj+pcynvWkypZd857ryzN8jNC7Pg2YZXNMJcHRPpaDyCBbNyVRpA== +import-in-the-middle@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-in-the-middle/-/import-in-the-middle-2.0.0.tgz#295948cee94d0565314824c6bd75379d13e5b1a5" + integrity sha512-yNZhyQYqXpkT0AKq3F3KLasUSK4fHvebNH5hOsKQw2dhGSALvQ4U0BqUc5suziKvydO5u5hgN2hy1RJaho8U5A== dependencies: acorn "^8.14.0" acorn-import-attributes "^1.9.5" @@ -4033,10 +4033,10 @@ symbol-observable@4.0.0: resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-4.0.0.tgz#5b425f192279e87f2f9b937ac8540d1984b39205" integrity sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ== -systeminformation@^5.27.10: - version "5.27.10" - resolved "https://registry.yarnpkg.com/systeminformation/-/systeminformation-5.27.10.tgz#0129d9a5f1f26d3d2e9698962302896472324edf" - integrity sha512-jkeOerLSwLZqJrPHCYltlKHu0PisdepIuS4GwjFFtgQUG/5AQPVZekkECuULqdP0cgrrIHW8Nl8J7WQXo5ypEg== +systeminformation@^5.27.11: + version "5.27.11" + resolved "https://registry.yarnpkg.com/systeminformation/-/systeminformation-5.27.11.tgz#286c8eca3947cfde0da684221ee9afb2ae313441" + integrity sha512-K3Lto/2m3K2twmKHdgx5B+0in9qhXK4YnoT9rIlgwN/4v7OV5c8IjbeAUkuky/6VzCQC7iKCAqi8rZathCdjHg== tapable@^2.1.1, tapable@^2.2.0, tapable@^2.2.1: version "2.2.1"