From 61d8e693c5a973671bd01f35dd4b61a946cbb694 Mon Sep 17 00:00:00 2001 From: apetitco Date: Tue, 16 Dec 2025 14:09:02 +0100 Subject: [PATCH 01/22] (schism): started separating backend from frontend --- .idea/workspace.xml | 114 ++++++++++ docker-compose.yml | 26 +++ frontend/pnpm-lock.yaml | 295 ++++++++++++++++++++++++++ frontend/src/pages/ttt/ttt.ts | 200 ++++-------------- src/@shared/package.json | 4 + src/auth/package.json | 4 + src/chat/package.json | 4 + src/package.json | 4 + src/pnpm-lock.yaml | 380 ++++++++++++++++++++++++++++++++++ src/tic-tac-toe/package.json | 21 ++ src/tic-tac-toe/src/app.ts | 240 +++++++++++++++++++++ src/tic-tac-toe/src/game.ts | 81 ++++++++ src/user/package.json | 4 + 13 files changed, 1214 insertions(+), 163 deletions(-) create mode 100644 .idea/workspace.xml create mode 100644 src/tic-tac-toe/package.json create mode 100644 src/tic-tac-toe/src/app.ts create mode 100644 src/tic-tac-toe/src/game.ts diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..0b1cef8 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,114 @@ + + + + + + + + + + { + "lastFilter": { + "state": "OPEN", + "assignee": "RepentedAlex" + } +} + { + "selectedUrlAndAccountId": { + "url": "https://github.com/Maix0/ft_deadge.git", + "accountId": "05fe7ff5-d360-4ad3-b17e-66daa92a5dbb" + } +} + + + { + "associatedIndex": 2 +} + + + + + + + + + + + + + + 1765884886075 + + + + + + + + + + + + + + + - - \ No newline at end of file From d946e59755f78af09d538caf5a361d3ed2a500b2 Mon Sep 17 00:00:00 2001 From: apetitco Date: Sat, 20 Dec 2025 00:42:59 +0100 Subject: [PATCH 11/22] (misc): Bit of cleaning --- src/tic-tac-toe/src/app.ts | 190 +------------------------------------ 1 file changed, 1 insertion(+), 189 deletions(-) diff --git a/src/tic-tac-toe/src/app.ts b/src/tic-tac-toe/src/app.ts index 59579cd..ba8b753 100644 --- a/src/tic-tac-toe/src/app.ts +++ b/src/tic-tac-toe/src/app.ts @@ -44,7 +44,6 @@ const app: FastifyPluginAsync = async (fastify, opts): Promise => { }); }; export default app; -export { app }; // When using .decorate you have to specify added properties for Typescript declare module 'fastify' { @@ -95,191 +94,4 @@ async function onReady(fastify: FastifyInstance, game: TTC) { }); }); }); -} - -// // TODO: Import the plugins defined for this microservice -// // TODO: Import the routes defined for this microservice - -// // @brief The microservice app (as a plugin for Fastify), kinda like a main function I guess ??? -// // @param fastify -// // @param opts -// export const app: FastifyPluginAsync = async (fastify, opts): Promise => { -// // Register all the fastify plugins that this app will use - -// // Once it is done: -// fastify.ready((err) => { -// if (err) { -// throw err; -// } -// // TODO: Supposedly, something should be there I guess -// }); -// }; -// // Export it as the default for this file. -// export default app; - -// // TODO: Understand what is this for in /src/chat/src/app.ts -// // declare module 'fastify' { -// // interface FastifyInstance { -// // io: Server<{ -// // hello: (message: string) => string; -// // MsgObjectServer: (data: { message: ClientMessage }) => void; -// // message: (msg: string) => void; -// // testend: (sock_id_client: string) => void; -// // }>; -// // } -// // } - -// // TODO: Same for this, also in /src/chat/src/app.ts -// // async function onReady(fastify: FastifyInstance) { -// // function connectedUser(io?: Server, target?: string): number { -// // let count = 0; -// // const seen = new Set(); -// // // <- only log/count unique usernames - -// // for (const [socketId, username] of clientChat) { -// // // Basic sanity checks -// // if (typeof socketId !== 'string' || socketId.length === 0) { -// // clientChat.delete(socketId); -// // continue; -// // } -// // if (typeof username !== 'string' || username.length === 0) { -// // clientChat.delete(socketId); -// // continue; -// // } - -// // // If we have the io instance, attempt to validate the socket is still connected -// // if (io && typeof io.sockets?.sockets?.get === 'function') { -// // const s = io.sockets.sockets.get(socketId) as -// // | Socket -// // | undefined; -// // // If socket not found or disconnected, remove from map and skip -// // if (!s || s.disconnected) { -// // clientChat.delete(socketId); -// // continue; -// // } - -// // // Skip duplicates (DO NOT delete them — just don't count) -// // if (seen.has(username)) { -// // continue; -// // } -// // // socket exists and is connected -// // seen.add(username); -// // count++; -// // // console.log(color.green,"count: ", count); -// // console.log(color.yellow, 'Client:', color.reset, username); - -// // const targetSocketId = target; -// // io.to(targetSocketId!).emit('listObj', username); - -// // console.log( -// // color.yellow, -// // 'Chat Socket ID:', -// // color.reset, -// // socketId, -// // ); -// // continue; -// // } - -// // // If no io provided, assume entries in the map are valid and count them. -// // count++; -// // console.log( -// // color.red, -// // 'Client (unverified):', -// // color.reset, -// // username, -// // ); -// // console.log( -// // color.red, -// // 'Chat Socket ID (unverified):', -// // color.reset, -// // socketId, -// // ); -// // } - -// // return count; -// // } - -// // function broadcast(data: ClientMessage, sender?: string) { -// // fastify.io.fetchSockets().then((sockets) => { -// // for (const s of sockets) { -// // if (s.id !== sender) { -// // // Send REAL JSON object -// // const clientName = clientChat.get(s.id) || null; -// // if (clientName !== null) { -// // s.emit('MsgObjectServer', { message: data }); -// // } -// // console.log(' Target window socket ID:', s.id); -// // console.log(' Target window ID:', [...s.rooms]); -// // console.log(' Sender window ID:', sender ? sender : 'none'); -// // } -// // } -// // }); -// // } - -// // fastify.io.on('connection', (socket: Socket) => { -// // socket.on('message', (message: string) => { -// // console.info( -// // color.blue, -// // 'Socket connected!', -// // color.reset, -// // socket.id, -// // ); -// // console.log( -// // color.blue, -// // 'Received message from client', -// // color.reset, -// // message, -// // ); - -// // const obj: ClientMessage = JSON.parse(message) as ClientMessage; -// // clientChat.set(socket.id, obj.user); -// // console.log( -// // color.green, -// // 'Message from client', -// // color.reset, -// // `Sender: login name: "${obj.user}" - windowID "${obj.SenderWindowID}" - text message: "${obj.text}"`, -// // ); -// // // Send object directly — DO NOT wrap it in a string -// // broadcast(obj, obj.SenderWindowID); -// // console.log( -// // color.red, -// // 'connected in the Chat :', -// // connectedUser(fastify.io), -// // color.reset, -// // ); -// // }); - -// // socket.on('testend', (sock_id_cl: string) => { -// // console.log('testend received from client socket id:', sock_id_cl); -// // }); - -// // socket.on('list', () => { -// // console.log(color.red, 'list activated', color.reset, socket.id); -// // connectedUser(fastify.io, socket.id); -// // }); - -// // socket.on('disconnecting', (reason) => { -// // const clientName = clientChat.get(socket.id) || null; -// // console.log( -// // color.green, -// // `Client disconnecting: ${clientName} (${socket.id}) reason:`, -// // reason, -// // ); -// // if (reason === 'transport error') return; - -// // if (clientName !== null) { -// // const obj = { -// // type: 'chat', -// // user: clientName, -// // token: '', -// // text: 'LEFT the chat', -// // timestamp: Date.now(), -// // SenderWindowID: socket.id, -// // }; - -// // broadcast(obj, obj.SenderWindowID); -// // // clientChat.delete(obj.user); -// // } -// // }); -// // }); -// // } \ No newline at end of file +} \ No newline at end of file From 5e1245b016b6554325f351f997da77544c3562cf Mon Sep 17 00:00:00 2001 From: apetitco Date: Sat, 20 Dec 2025 00:43:17 +0100 Subject: [PATCH 12/22] (misc): Added tsconfig.json file --- src/tic-tac-toe/tsconfig.json | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/tic-tac-toe/tsconfig.json diff --git a/src/tic-tac-toe/tsconfig.json b/src/tic-tac-toe/tsconfig.json new file mode 100644 index 0000000..e6d24e2 --- /dev/null +++ b/src/tic-tac-toe/tsconfig.json @@ -0,0 +1,5 @@ +{ + "extends": "../tsconfig.base.json", + "compilerOptions": {}, + "include": ["src/**/*.ts"] +} From 4dd69d67e3c37116da1313f372bef899617ef0b1 Mon Sep 17 00:00:00 2001 From: apetitco Date: Sat, 20 Dec 2025 00:44:04 +0100 Subject: [PATCH 13/22] (misc): Checked Implement other game and added task to write to database --- frontend/src/pages/ttt/README.md | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/frontend/src/pages/ttt/README.md b/frontend/src/pages/ttt/README.md index d8169ae..d5de0ed 100644 --- a/frontend/src/pages/ttt/README.md +++ b/frontend/src/pages/ttt/README.md @@ -18,12 +18,13 @@ enhancing user engagement with gameplay history, and facilitating matchmaking for an enjoyable gaming experience. # TO-DO -For now I am prohibited from working on the backend as per Maieul's request. -[ ] - Implement other game +For now I am prohibited from working on the backend as per Maieul's request. +[X] - Implement other game [X] - (Done on Dec. 7 2025) Task for December 08 or 09: Tic-tac-toe should lock up once it's finished (i.e., draw or win) and print who won, how many turns and which row/col/diag the win happened in -[ ] - Implement user history -[ ] - Implement matchmaking -[ ] - -[ ] - -[ ] - \ No newline at end of file +[ ] - Implement user history (ongoing) + [ ] - Write to database the outcome of each game +[ ] - Implement matchmaking +[ ] - +[ ] - +[ ] - \ No newline at end of file From aa1af1f6c57cefd3ab65c482443b876f1d53099f Mon Sep 17 00:00:00 2001 From: apetitco Date: Sat, 20 Dec 2025 00:44:37 +0100 Subject: [PATCH 14/22] (misc): Updated name for network. --- docker-compose.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index f4303df..031df10 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,6 +3,7 @@ networks: driver: bridge monitoring: driver: bridge + services: frontend: build: ./frontend @@ -79,7 +80,7 @@ services: container_name: tic-tac-toe restart: unless-stopped networks: - - transcendance-network + - app volumes: - sqlite-volume:/volumes/database - static-volume:/volumes/static From 014ab9fa702fd37bca12dc49051db5d0a2feef29 Mon Sep 17 00:00:00 2001 From: apetitco Date: Sat, 20 Dec 2025 00:45:49 +0100 Subject: [PATCH 15/22] (tic-tac-toe): Laid the foundations for tic tac toe/database interactions --- src/@shared/src/database/init.sql | 9 ++++ src/@shared/src/database/mixin/tictactoe.ts | 55 +++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 src/@shared/src/database/mixin/tictactoe.ts diff --git a/src/@shared/src/database/init.sql b/src/@shared/src/database/init.sql index 2406225..f2d2af4 100644 --- a/src/@shared/src/database/init.sql +++ b/src/@shared/src/database/init.sql @@ -23,3 +23,12 @@ CREATE TABLE IF NOT EXISTS blocked ( CREATE UNIQUE INDEX IF NOT EXISTS idx_blocked_user_pair ON blocked(user, blocked); +CREATE TABLE IF NOT EXISTS tictactoe ( + id INTEGER PRIMARY KEY NOT NULL, + player1 TEXT NOT NULL, + player2 TEXT NOT NULL, + outcome TEXT NOT NULL, + + FOREIGN KEY(player1) REFERENCES user(id) + FOREIGN KEY(player2) REFERENCES user(id) +); diff --git a/src/@shared/src/database/mixin/tictactoe.ts b/src/@shared/src/database/mixin/tictactoe.ts new file mode 100644 index 0000000..5fb7c5c --- /dev/null +++ b/src/@shared/src/database/mixin/tictactoe.ts @@ -0,0 +1,55 @@ +import { isNullish } from '@shared/utils'; +import type { Database } from './_base'; +import { UserId } from './user'; + +// describe every function in the object +export interface ITicTacToeDb extends Database { + normalFunction(id: TemplateId): TemplateData | undefined, + asyncFunction(id: TemplateId): Promise, +}; + +export const TicTacToeImpl: Omit = { + /** + * @brief Write the outcome of the specified game to the database. + * + * @param gameId The game we want to write the outcome of. + * + */ + setGameOutcome(this: ITicTacToeDb, id: GameId): void { + // Find a way to retrieve the outcome of the game. + this.prepare('INSERT INTO tictactoe (game, outcome) VALUES (@id, "draw" /* replace w/ game outcome */)').run({ id }); + }, + /** + * whole function description + * + * @param id the argument description + * + * @returns what does the function return ? + */ +// async asyncFunction(this: ITemplateDb, id: TemplateId): Promise { +// void id; +// return undefined; +// }, +}; + +export type TicTacToeId = number & { readonly __brand: unique symbol }; + +export type TemplateData = { + readonly id: TicTacToeId; + readonly player1: string; + readonly player2: string; + readonly outcome: string; +}; + +// this function will be able to be called from everywhere +// export async function freeFloatingExportedFunction(): Promise { +// return false; +// } + +// this function will never be able to be called outside of this module +// async function privateFunction(): Promise { +// return undefined; +// } + +// silence warnings +void privateFunction; From 7fe19d1737375be21dbcbc0b4bd086198eda1287 Mon Sep 17 00:00:00 2001 From: apetitco Date: Sat, 20 Dec 2025 00:53:04 +0100 Subject: [PATCH 16/22] (misc): reindented file with tabs --- src/@shared/src/database/mixin/tictactoe.ts | 49 ++++++++++----------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/src/@shared/src/database/mixin/tictactoe.ts b/src/@shared/src/database/mixin/tictactoe.ts index 5fb7c5c..8d83e0b 100644 --- a/src/@shared/src/database/mixin/tictactoe.ts +++ b/src/@shared/src/database/mixin/tictactoe.ts @@ -1,31 +1,30 @@ -import { isNullish } from '@shared/utils'; import type { Database } from './_base'; -import { UserId } from './user'; +// import { UserId } from './user'; // describe every function in the object export interface ITicTacToeDb extends Database { - normalFunction(id: TemplateId): TemplateData | undefined, - asyncFunction(id: TemplateId): Promise, + normalFunction(id: TemplateId): TemplateData | undefined, + asyncFunction(id: TemplateId): Promise, }; export const TicTacToeImpl: Omit = { - /** - * @brief Write the outcome of the specified game to the database. - * - * @param gameId The game we want to write the outcome of. - * - */ - setGameOutcome(this: ITicTacToeDb, id: GameId): void { - // Find a way to retrieve the outcome of the game. - this.prepare('INSERT INTO tictactoe (game, outcome) VALUES (@id, "draw" /* replace w/ game outcome */)').run({ id }); - }, - /** - * whole function description - * - * @param id the argument description - * - * @returns what does the function return ? - */ + /** + * @brief Write the outcome of the specified game to the database. + * + * @param gameId The game we want to write the outcome of. + * + */ + setGameOutcome(this: ITicTacToeDb, id: GameId): void { + // Find a way to retrieve the outcome of the game. + this.prepare('INSERT INTO tictactoe (game, outcome) VALUES (@id, "draw" /* replace w/ game outcome */)').run({ id }); + }, + /** + * whole function description + * + * @param id the argument description + * + * @returns what does the function return ? + */ // async asyncFunction(this: ITemplateDb, id: TemplateId): Promise { // void id; // return undefined; @@ -35,10 +34,10 @@ export const TicTacToeImpl: Omit = { export type TicTacToeId = number & { readonly __brand: unique symbol }; export type TemplateData = { - readonly id: TicTacToeId; - readonly player1: string; - readonly player2: string; - readonly outcome: string; + readonly id: TicTacToeId; + readonly player1: string; + readonly player2: string; + readonly outcome: string; }; // this function will be able to be called from everywhere From 3e939ec87d574d04629a513c43e6e11a0fbc40ab Mon Sep 17 00:00:00 2001 From: apetitco Date: Sat, 20 Dec 2025 01:00:40 +0100 Subject: [PATCH 17/22] (tic-tac-toe): Laid the foundations for tic tac toe/database interactions --- src/@shared/src/database/mixin/tictactoe.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/@shared/src/database/mixin/tictactoe.ts b/src/@shared/src/database/mixin/tictactoe.ts index 8d83e0b..4d4cda8 100644 --- a/src/@shared/src/database/mixin/tictactoe.ts +++ b/src/@shared/src/database/mixin/tictactoe.ts @@ -3,8 +3,8 @@ import type { Database } from './_base'; // describe every function in the object export interface ITicTacToeDb extends Database { - normalFunction(id: TemplateId): TemplateData | undefined, - asyncFunction(id: TemplateId): Promise, + setGameOutcome(this: ITicTacToeDb, id: GameId): void, +// asyncFunction(id: TemplateId): Promise, }; export const TicTacToeImpl: Omit = { From e46f031f6441630e1f368c48e1ed627d143b679c Mon Sep 17 00:00:00 2001 From: apetitco Date: Sat, 20 Dec 2025 01:04:37 +0100 Subject: [PATCH 18/22] (tic-tac-toe): Laid the foundations for tic tac toe/database interactions --- src/@shared/src/database/mixin/tictactoe.ts | 2 +- src/tic-tac-toe/src/app.ts | 1 + src/tic-tac-toe/src/game.ts | 2 ++ 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/@shared/src/database/mixin/tictactoe.ts b/src/@shared/src/database/mixin/tictactoe.ts index 4d4cda8..5cb3e7d 100644 --- a/src/@shared/src/database/mixin/tictactoe.ts +++ b/src/@shared/src/database/mixin/tictactoe.ts @@ -33,7 +33,7 @@ export const TicTacToeImpl: Omit = { export type TicTacToeId = number & { readonly __brand: unique symbol }; -export type TemplateData = { +export type TicTacToeData = { readonly id: TicTacToeId; readonly player1: string; readonly player2: string; diff --git a/src/tic-tac-toe/src/app.ts b/src/tic-tac-toe/src/app.ts index ba8b753..7238b0b 100644 --- a/src/tic-tac-toe/src/app.ts +++ b/src/tic-tac-toe/src/app.ts @@ -7,6 +7,7 @@ import * as auth from '@shared/auth'; import * as swagger from '@shared/swagger'; import * as utils from '@shared/utils'; import { Server } from 'socket.io'; +import type { TicTacToeData } from '@shared/database/mixin/tictactoe'; declare const __SERVICE_NAME: string; diff --git a/src/tic-tac-toe/src/game.ts b/src/tic-tac-toe/src/game.ts index c472e50..0d929ad 100644 --- a/src/tic-tac-toe/src/game.ts +++ b/src/tic-tac-toe/src/game.ts @@ -1,3 +1,5 @@ +import type { TicTacToeData } from '@shared/database/mixin/tictactoe'; + // Represents the possible states of a cell on the board. // `null` means that the cell is empty. type CellState = 'O' | 'X' | null From 333caf09ee4ef76fd884ed73ded45015661b554c Mon Sep 17 00:00:00 2001 From: apetitco Date: Sat, 20 Dec 2025 01:22:55 +0100 Subject: [PATCH 19/22] (tic-tac-toe): Laid the foundations for tic tac toe/database interactions --- src/tic-tac-toe/src/app.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/tic-tac-toe/src/app.ts b/src/tic-tac-toe/src/app.ts index 7238b0b..4e18aa8 100644 --- a/src/tic-tac-toe/src/app.ts +++ b/src/tic-tac-toe/src/app.ts @@ -7,7 +7,7 @@ import * as auth from '@shared/auth'; import * as swagger from '@shared/swagger'; import * as utils from '@shared/utils'; import { Server } from 'socket.io'; -import type { TicTacToeData } from '@shared/database/mixin/tictactoe'; +import type { TicTacToeImpl } from '@shared/database/mixin/tictactoe'; declare const __SERVICE_NAME: string; @@ -83,6 +83,7 @@ async function onReady(fastify: FastifyInstance, game: TTC) { turn: game.currentPlayer, lastResult: result, }); +// setGameOutcome(); } }); From 3ed00bd62b495f2a8ff773706760c6fd38fcf972 Mon Sep 17 00:00:00 2001 From: apetitco Date: Sun, 21 Dec 2025 02:58:15 +0100 Subject: [PATCH 20/22] (backend): trying to have a working backend. Did I manage to achieve this task: NO. --- Docker.mk | 1 + docker-compose.yml | 10 +- frontend/pnpm-lock.yaml | 184 +++++++++++------------ src/@shared/package.json | 2 +- src/auth/package.json | 2 +- src/chat/package.json | 2 +- src/package.json | 2 +- src/pnpm-lock.yaml | 260 ++++++++++++++++----------------- src/tic-tac-toe/entrypoint.sh | 7 + src/tic-tac-toe/package.json | 7 +- src/tic-tac-toe/src/openapi.ts | 21 +++ src/tic-tac-toe/src/run.ts | 14 +- src/tic-tac-toe/vite.config.js | 54 +++++++ src/user/package.json | 2 +- 14 files changed, 327 insertions(+), 241 deletions(-) create mode 100644 src/tic-tac-toe/entrypoint.sh create mode 100644 src/tic-tac-toe/src/openapi.ts create mode 100644 src/tic-tac-toe/vite.config.js diff --git a/Docker.mk b/Docker.mk index 5f6efcb..3d7bcb4 100644 --- a/Docker.mk +++ b/Docker.mk @@ -17,6 +17,7 @@ DOCKER_SERVICE= \ auth \ chat \ + tic-tac-toe \ frontend \ nginx \ user \ diff --git a/docker-compose.yml b/docker-compose.yml index 031df10..8f841ec 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -76,9 +76,8 @@ services: context: ./src/ args: - SERVICE=tic-tac-toe - - EXTRA_FILES=tic-tac-toe/extra - container_name: tic-tac-toe - restart: unless-stopped + container_name: app-tic-tac-toe + restart: always networks: - app volumes: @@ -87,6 +86,11 @@ services: environment: - JWT_SECRET=KRUGKIDROVUWG2ZAMJZG653OEBTG66BANJ2W24DTEBXXMZLSEB2GQZJANRQXU6JA - DATABASE_DIR=/volumes/database + logging: + driver: gelf + options: + gelf-address: "udp://127.0.0.1:12201" + tag: "{{.Name}}" ############### # CHAT # diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index ec12443..02fe5dd 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -214,113 +214,113 @@ packages: '@jridgewell/trace-mapping@0.3.31': resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - '@rollup/rollup-android-arm-eabi@4.53.5': - resolution: {integrity: sha512-iDGS/h7D8t7tvZ1t6+WPK04KD0MwzLZrG0se1hzBjSi5fyxlsiggoJHwh18PCFNn7tG43OWb6pdZ6Y+rMlmyNQ==} + '@rollup/rollup-android-arm-eabi@4.54.0': + resolution: {integrity: sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.53.5': - resolution: {integrity: sha512-wrSAViWvZHBMMlWk6EJhvg8/rjxzyEhEdgfMMjREHEq11EtJ6IP6yfcCH57YAEca2Oe3FNCE9DSTgU70EIGmVw==} + '@rollup/rollup-android-arm64@4.54.0': + resolution: {integrity: sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.53.5': - resolution: {integrity: sha512-S87zZPBmRO6u1YXQLwpveZm4JfPpAa6oHBX7/ghSiGH3rz/KDgAu1rKdGutV+WUI6tKDMbaBJomhnT30Y2t4VQ==} + '@rollup/rollup-darwin-arm64@4.54.0': + resolution: {integrity: sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.53.5': - resolution: {integrity: sha512-YTbnsAaHo6VrAczISxgpTva8EkfQus0VPEVJCEaboHtZRIb6h6j0BNxRBOwnDciFTZLDPW5r+ZBmhL/+YpTZgA==} + '@rollup/rollup-darwin-x64@4.54.0': + resolution: {integrity: sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.53.5': - resolution: {integrity: sha512-1T8eY2J8rKJWzaznV7zedfdhD1BqVs1iqILhmHDq/bqCUZsrMt+j8VCTHhP0vdfbHK3e1IQ7VYx3jlKqwlf+vw==} + '@rollup/rollup-freebsd-arm64@4.54.0': + resolution: {integrity: sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.53.5': - resolution: {integrity: sha512-sHTiuXyBJApxRn+VFMaw1U+Qsz4kcNlxQ742snICYPrY+DDL8/ZbaC4DVIB7vgZmp3jiDaKA0WpBdP0aqPJoBQ==} + '@rollup/rollup-freebsd-x64@4.54.0': + resolution: {integrity: sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.53.5': - resolution: {integrity: sha512-dV3T9MyAf0w8zPVLVBptVlzaXxka6xg1f16VAQmjg+4KMSTWDvhimI/Y6mp8oHwNrmnmVl9XxJ/w/mO4uIQONA==} + '@rollup/rollup-linux-arm-gnueabihf@4.54.0': + resolution: {integrity: sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.53.5': - resolution: {integrity: sha512-wIGYC1x/hyjP+KAu9+ewDI+fi5XSNiUi9Bvg6KGAh2TsNMA3tSEs+Sh6jJ/r4BV/bx/CyWu2ue9kDnIdRyafcQ==} + '@rollup/rollup-linux-arm-musleabihf@4.54.0': + resolution: {integrity: sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.53.5': - resolution: {integrity: sha512-Y+qVA0D9d0y2FRNiG9oM3Hut/DgODZbU9I8pLLPwAsU0tUKZ49cyV1tzmB/qRbSzGvY8lpgGkJuMyuhH7Ma+Vg==} + '@rollup/rollup-linux-arm64-gnu@4.54.0': + resolution: {integrity: sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.53.5': - resolution: {integrity: sha512-juaC4bEgJsyFVfqhtGLz8mbopaWD+WeSOYr5E16y+1of6KQjc0BpwZLuxkClqY1i8sco+MdyoXPNiCkQou09+g==} + '@rollup/rollup-linux-arm64-musl@4.54.0': + resolution: {integrity: sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.53.5': - resolution: {integrity: sha512-rIEC0hZ17A42iXtHX+EPJVL/CakHo+tT7W0pbzdAGuWOt2jxDFh7A/lRhsNHBcqL4T36+UiAgwO8pbmn3dE8wA==} + '@rollup/rollup-linux-loong64-gnu@4.54.0': + resolution: {integrity: sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.53.5': - resolution: {integrity: sha512-T7l409NhUE552RcAOcmJHj3xyZ2h7vMWzcwQI0hvn5tqHh3oSoclf9WgTl+0QqffWFG8MEVZZP1/OBglKZx52Q==} + '@rollup/rollup-linux-ppc64-gnu@4.54.0': + resolution: {integrity: sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.53.5': - resolution: {integrity: sha512-7OK5/GhxbnrMcxIFoYfhV/TkknarkYC1hqUw1wU2xUN3TVRLNT5FmBv4KkheSG2xZ6IEbRAhTooTV2+R5Tk0lQ==} + '@rollup/rollup-linux-riscv64-gnu@4.54.0': + resolution: {integrity: sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.53.5': - resolution: {integrity: sha512-GwuDBE/PsXaTa76lO5eLJTyr2k8QkPipAyOrs4V/KJufHCZBJ495VCGJol35grx9xryk4V+2zd3Ri+3v7NPh+w==} + '@rollup/rollup-linux-riscv64-musl@4.54.0': + resolution: {integrity: sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.53.5': - resolution: {integrity: sha512-IAE1Ziyr1qNfnmiQLHBURAD+eh/zH1pIeJjeShleII7Vj8kyEm2PF77o+lf3WTHDpNJcu4IXJxNO0Zluro8bOw==} + '@rollup/rollup-linux-s390x-gnu@4.54.0': + resolution: {integrity: sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.53.5': - resolution: {integrity: sha512-Pg6E+oP7GvZ4XwgRJBuSXZjcqpIW3yCBhK4BcsANvb47qMvAbCjR6E+1a/U2WXz1JJxp9/4Dno3/iSJLcm5auw==} + '@rollup/rollup-linux-x64-gnu@4.54.0': + resolution: {integrity: sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.53.5': - resolution: {integrity: sha512-txGtluxDKTxaMDzUduGP0wdfng24y1rygUMnmlUJ88fzCCULCLn7oE5kb2+tRB+MWq1QDZT6ObT5RrR8HFRKqg==} + '@rollup/rollup-linux-x64-musl@4.54.0': + resolution: {integrity: sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==} cpu: [x64] os: [linux] - '@rollup/rollup-openharmony-arm64@4.53.5': - resolution: {integrity: sha512-3DFiLPnTxiOQV993fMc+KO8zXHTcIjgaInrqlG8zDp1TlhYl6WgrOHuJkJQ6M8zHEcntSJsUp1XFZSY8C1DYbg==} + '@rollup/rollup-openharmony-arm64@4.54.0': + resolution: {integrity: sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.53.5': - resolution: {integrity: sha512-nggc/wPpNTgjGg75hu+Q/3i32R00Lq1B6N1DO7MCU340MRKL3WZJMjA9U4K4gzy3dkZPXm9E1Nc81FItBVGRlA==} + '@rollup/rollup-win32-arm64-msvc@4.54.0': + resolution: {integrity: sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.53.5': - resolution: {integrity: sha512-U/54pTbdQpPLBdEzCT6NBCFAfSZMvmjr0twhnD9f4EIvlm9wy3jjQ38yQj1AGznrNO65EWQMgm/QUjuIVrYF9w==} + '@rollup/rollup-win32-ia32-msvc@4.54.0': + resolution: {integrity: sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.53.5': - resolution: {integrity: sha512-2NqKgZSuLH9SXBBV2dWNRCZmocgSOx8OJSdpRaEcRlIfX8YrKxUT6z0F1NpvDVhOsl190UFTRh2F2WDWWCYp3A==} + '@rollup/rollup-win32-x64-gnu@4.54.0': + resolution: {integrity: sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.53.5': - resolution: {integrity: sha512-JRpZUhCfhZ4keB5v0fe02gQJy05GqboPOaxvjugW04RLSYYoB/9t2lx2u/tMs/Na/1NXfY8QYjgRljRpN+MjTQ==} + '@rollup/rollup-win32-x64-msvc@4.54.0': + resolution: {integrity: sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==} cpu: [x64] os: [win32] @@ -667,8 +667,8 @@ packages: require-main-filename@2.0.0: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - rollup@4.53.5: - resolution: {integrity: sha512-iTNAbFSlRpcHeeWu73ywU/8KuU/LZmNCSxp6fjQkJBD3ivUb8tpDrXhIxEzA05HlYMEwmtaUnb3RP+YNv162OQ==} + rollup@4.54.0: + resolution: {integrity: sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -905,70 +905,70 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@rollup/rollup-android-arm-eabi@4.53.5': + '@rollup/rollup-android-arm-eabi@4.54.0': optional: true - '@rollup/rollup-android-arm64@4.53.5': + '@rollup/rollup-android-arm64@4.54.0': optional: true - '@rollup/rollup-darwin-arm64@4.53.5': + '@rollup/rollup-darwin-arm64@4.54.0': optional: true - '@rollup/rollup-darwin-x64@4.53.5': + '@rollup/rollup-darwin-x64@4.54.0': optional: true - '@rollup/rollup-freebsd-arm64@4.53.5': + '@rollup/rollup-freebsd-arm64@4.54.0': optional: true - '@rollup/rollup-freebsd-x64@4.53.5': + '@rollup/rollup-freebsd-x64@4.54.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.53.5': + '@rollup/rollup-linux-arm-gnueabihf@4.54.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.53.5': + '@rollup/rollup-linux-arm-musleabihf@4.54.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.53.5': + '@rollup/rollup-linux-arm64-gnu@4.54.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.53.5': + '@rollup/rollup-linux-arm64-musl@4.54.0': optional: true - '@rollup/rollup-linux-loong64-gnu@4.53.5': + '@rollup/rollup-linux-loong64-gnu@4.54.0': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.53.5': + '@rollup/rollup-linux-ppc64-gnu@4.54.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.53.5': + '@rollup/rollup-linux-riscv64-gnu@4.54.0': optional: true - '@rollup/rollup-linux-riscv64-musl@4.53.5': + '@rollup/rollup-linux-riscv64-musl@4.54.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.53.5': + '@rollup/rollup-linux-s390x-gnu@4.54.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.53.5': + '@rollup/rollup-linux-x64-gnu@4.54.0': optional: true - '@rollup/rollup-linux-x64-musl@4.53.5': + '@rollup/rollup-linux-x64-musl@4.54.0': optional: true - '@rollup/rollup-openharmony-arm64@4.53.5': + '@rollup/rollup-openharmony-arm64@4.54.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.53.5': + '@rollup/rollup-win32-arm64-msvc@4.54.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.53.5': + '@rollup/rollup-win32-ia32-msvc@4.54.0': optional: true - '@rollup/rollup-win32-x64-gnu@4.53.5': + '@rollup/rollup-win32-x64-gnu@4.54.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.53.5': + '@rollup/rollup-win32-x64-msvc@4.54.0': optional: true '@socket.io/component-emitter@3.1.2': {} @@ -1256,32 +1256,32 @@ snapshots: require-main-filename@2.0.0: {} - rollup@4.53.5: + rollup@4.54.0: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.53.5 - '@rollup/rollup-android-arm64': 4.53.5 - '@rollup/rollup-darwin-arm64': 4.53.5 - '@rollup/rollup-darwin-x64': 4.53.5 - '@rollup/rollup-freebsd-arm64': 4.53.5 - '@rollup/rollup-freebsd-x64': 4.53.5 - '@rollup/rollup-linux-arm-gnueabihf': 4.53.5 - '@rollup/rollup-linux-arm-musleabihf': 4.53.5 - '@rollup/rollup-linux-arm64-gnu': 4.53.5 - '@rollup/rollup-linux-arm64-musl': 4.53.5 - '@rollup/rollup-linux-loong64-gnu': 4.53.5 - '@rollup/rollup-linux-ppc64-gnu': 4.53.5 - '@rollup/rollup-linux-riscv64-gnu': 4.53.5 - '@rollup/rollup-linux-riscv64-musl': 4.53.5 - '@rollup/rollup-linux-s390x-gnu': 4.53.5 - '@rollup/rollup-linux-x64-gnu': 4.53.5 - '@rollup/rollup-linux-x64-musl': 4.53.5 - '@rollup/rollup-openharmony-arm64': 4.53.5 - '@rollup/rollup-win32-arm64-msvc': 4.53.5 - '@rollup/rollup-win32-ia32-msvc': 4.53.5 - '@rollup/rollup-win32-x64-gnu': 4.53.5 - '@rollup/rollup-win32-x64-msvc': 4.53.5 + '@rollup/rollup-android-arm-eabi': 4.54.0 + '@rollup/rollup-android-arm64': 4.54.0 + '@rollup/rollup-darwin-arm64': 4.54.0 + '@rollup/rollup-darwin-x64': 4.54.0 + '@rollup/rollup-freebsd-arm64': 4.54.0 + '@rollup/rollup-freebsd-x64': 4.54.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.54.0 + '@rollup/rollup-linux-arm-musleabihf': 4.54.0 + '@rollup/rollup-linux-arm64-gnu': 4.54.0 + '@rollup/rollup-linux-arm64-musl': 4.54.0 + '@rollup/rollup-linux-loong64-gnu': 4.54.0 + '@rollup/rollup-linux-ppc64-gnu': 4.54.0 + '@rollup/rollup-linux-riscv64-gnu': 4.54.0 + '@rollup/rollup-linux-riscv64-musl': 4.54.0 + '@rollup/rollup-linux-s390x-gnu': 4.54.0 + '@rollup/rollup-linux-x64-gnu': 4.54.0 + '@rollup/rollup-linux-x64-musl': 4.54.0 + '@rollup/rollup-openharmony-arm64': 4.54.0 + '@rollup/rollup-win32-arm64-msvc': 4.54.0 + '@rollup/rollup-win32-ia32-msvc': 4.54.0 + '@rollup/rollup-win32-x64-gnu': 4.54.0 + '@rollup/rollup-win32-x64-msvc': 4.54.0 fsevents: 2.3.3 set-blocking@2.0.0: {} @@ -1350,7 +1350,7 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.53.5 + rollup: 4.54.0 tinyglobby: 0.2.15 optionalDependencies: '@types/node': 25.0.3 diff --git a/src/@shared/package.json b/src/@shared/package.json index 4cdbef0..43efa32 100644 --- a/src/@shared/package.json +++ b/src/@shared/package.json @@ -20,7 +20,7 @@ "fastify-plugin": "^5.1.0", "joi": "^18.0.2", "otp": "^1.1.2", - "typebox": "^1.0.64", + "typebox": "^1.0.65", "uuidv7": "^1.1.0" }, "devDependencies": { diff --git a/src/auth/package.json b/src/auth/package.json index b709575..ace48e9 100644 --- a/src/auth/package.json +++ b/src/auth/package.json @@ -27,7 +27,7 @@ "fastify": "^5.6.2", "fastify-cli": "^7.4.1", "fastify-plugin": "^5.1.0", - "typebox": "^1.0.64" + "typebox": "^1.0.65" }, "devDependencies": { "@types/node": "^22.19.3", diff --git a/src/chat/package.json b/src/chat/package.json index 555055b..502b538 100644 --- a/src/chat/package.json +++ b/src/chat/package.json @@ -27,7 +27,7 @@ "fastify": "^5.6.2", "fastify-plugin": "^5.1.0", "socket.io": "^4.8.1", - "typebox": "^1.0.64" + "typebox": "^1.0.65" }, "devDependencies": { "@types/node": "^22.19.3", diff --git a/src/package.json b/src/package.json index 3169a11..d58f871 100644 --- a/src/package.json +++ b/src/package.json @@ -33,7 +33,7 @@ "vite": "^7.3.0" }, "dependencies": { - "@redocly/cli": "^2.13.0", + "@redocly/cli": "^2.14.0", "bindings": "^1.5.0" } } diff --git a/src/pnpm-lock.yaml b/src/pnpm-lock.yaml index dffd059..8932a9b 100644 --- a/src/pnpm-lock.yaml +++ b/src/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: dependencies: '@redocly/cli': - specifier: ^2.13.0 - version: 2.13.0(@opentelemetry/api@1.9.0)(ajv@8.17.1)(core-js@3.47.0) + specifier: ^2.14.0 + version: 2.14.0(@opentelemetry/api@1.9.0)(ajv@8.17.1)(core-js@3.47.0) bindings: specifier: ^1.5.0 version: 1.5.0 @@ -79,8 +79,8 @@ importers: specifier: ^1.1.2 version: 1.1.2 typebox: - specifier: ^1.0.64 - version: 1.0.64 + specifier: ^1.0.65 + version: 1.0.65 uuidv7: specifier: ^1.1.0 version: 1.1.0 @@ -122,15 +122,15 @@ importers: specifier: ^5.1.0 version: 5.1.0 typebox: - specifier: ^1.0.64 - version: 1.0.64 + specifier: ^1.0.65 + version: 1.0.65 devDependencies: '@types/node': specifier: ^22.19.3 version: 22.19.3 rollup-plugin-node-externals: specifier: ^8.1.2 - version: 8.1.2(rollup@4.53.5) + version: 8.1.2(rollup@4.54.0) vite: specifier: ^7.3.0 version: 7.3.0(@types/node@22.19.3)(yaml@2.8.2) @@ -168,15 +168,15 @@ importers: specifier: ^4.8.1 version: 4.8.1 typebox: - specifier: ^1.0.64 - version: 1.0.64 + specifier: ^1.0.65 + version: 1.0.65 devDependencies: '@types/node': specifier: ^22.19.3 version: 22.19.3 rollup-plugin-node-externals: specifier: ^8.1.2 - version: 8.1.2(rollup@4.53.5) + version: 8.1.2(rollup@4.54.0) vite: specifier: ^7.3.0 version: 7.3.0(@types/node@22.19.3)(yaml@2.8.2) @@ -214,8 +214,8 @@ importers: specifier: ^4.8.1 version: 4.8.1 typebox: - specifier: ^1.0.64 - version: 1.0.64 + specifier: ^1.0.65 + version: 1.0.65 devDependencies: '@types/node': specifier: ^22.19.3 @@ -225,7 +225,7 @@ importers: version: 5.1.0(fastify@5.6.2)(socket.io@4.8.1) rollup-plugin-node-externals: specifier: ^8.1.2 - version: 8.1.2(rollup@4.53.5) + version: 8.1.2(rollup@4.54.0) vite: specifier: ^7.3.0 version: 7.3.0(@types/node@22.19.3)(yaml@2.8.2) @@ -260,15 +260,15 @@ importers: specifier: ^5.1.0 version: 5.1.0 typebox: - specifier: ^1.0.64 - version: 1.0.64 + specifier: ^1.0.65 + version: 1.0.65 devDependencies: '@types/node': specifier: ^22.19.3 version: 22.19.3 rollup-plugin-node-externals: specifier: ^8.1.2 - version: 8.1.2(rollup@4.53.5) + version: 8.1.2(rollup@4.54.0) vite: specifier: ^7.3.0 version: 7.3.0(@types/node@22.19.3)(yaml@2.8.2) @@ -728,136 +728,136 @@ packages: '@redocly/ajv@8.17.1': resolution: {integrity: sha512-EDtsGZS964mf9zAUXAl9Ew16eYbeyAFWhsPr0fX6oaJxgd8rApYlPBf0joyhnUHz88WxrigyFtTaqqzXNzPgqw==} - '@redocly/cli@2.13.0': - resolution: {integrity: sha512-VOGh8p5gKy+u94SbvMGaHvDM6TPw668D9iQkNSztoi4T5sj3ZwM7Y8Z3yZnMqC5s5epDcLAMq4jCO8UVn5ZWHg==} + '@redocly/cli@2.14.0': + resolution: {integrity: sha512-LvVYV7KJGtVqltBc8Cbw2s4QpFOzend5nCsgR1JgWvHNt70f1AzqoHr5y7GO+3ThwumrTzPvjta+Ln+n3x5NmA==} engines: {node: '>=22.12.0 || >=20.19.0 <21.0.0', npm: '>=10'} hasBin: true '@redocly/config@0.22.2': resolution: {integrity: sha512-roRDai8/zr2S9YfmzUfNhKjOF0NdcOIqF7bhf4MVC5UxpjIysDjyudvlAiVbpPHp3eDRWbdzUgtkK1a7YiDNyQ==} - '@redocly/config@0.41.0': - resolution: {integrity: sha512-8yJ2e+ex8KVF25zijdpDbAEjyubk7NLfHsLI8h0MUnLEo2iEg6rTCDT9Qw71XDqd5UlXvfJb0Z0h6dd+Y6pWLw==} + '@redocly/config@0.41.1': + resolution: {integrity: sha512-LcMCzFbP/sqkCLSG3YswmeScP4fM5SjDCQizwa+psZ0PhYrKOMF7azZ6ZBkWs115uv5RfOk+jYAWLdKkZGGGXg==} '@redocly/openapi-core@1.34.6': resolution: {integrity: sha512-2+O+riuIUgVSuLl3Lyh5AplWZyVMNuG2F98/o6NrutKJfW4/GTZdPpZlIphS0HGgcOHgmWcCSHj+dWFlZaGSHw==} engines: {node: '>=18.17.0', npm: '>=9.5.0'} - '@redocly/openapi-core@2.13.0': - resolution: {integrity: sha512-xQ4z5tsrXbIa4EfCniHv1zZ4etmQ0lpRcxy750iOamV5A/+19mgbPtD+UQCoT18puDAjcnOgpX7x2ha72qKrnw==} + '@redocly/openapi-core@2.14.0': + resolution: {integrity: sha512-GeSIesfbh5TdqoWBu7wPzCAGUvKfLBnN60rKnhZCyxrs6M0tn7GYhtET+P5HsNlXmvW4vFNDBlLDoATW/dKrrQ==} engines: {node: '>=22.12.0 || >=20.19.0 <21.0.0', npm: '>=10'} - '@redocly/respect-core@2.13.0': - resolution: {integrity: sha512-35OidNXWkmmsJiwgX+tFw7FaU8usZVvZ/lFBFNJga65pivEvaDlfiwKxIRTzM4iuNbc2FRvP2q30dlGAztv0tg==} + '@redocly/respect-core@2.14.0': + resolution: {integrity: sha512-7HYB66oNUOcBjBZpK/i5xPpXIYXt09a98WX0subaAQZJinLGq8D3hbgLAp+pXZgosHNeZ0QKahOExsZ25JZSHw==} engines: {node: '>=22.12.0 || >=20.19.0 <21.0.0', npm: '>=10'} - '@rollup/rollup-android-arm-eabi@4.53.5': - resolution: {integrity: sha512-iDGS/h7D8t7tvZ1t6+WPK04KD0MwzLZrG0se1hzBjSi5fyxlsiggoJHwh18PCFNn7tG43OWb6pdZ6Y+rMlmyNQ==} + '@rollup/rollup-android-arm-eabi@4.54.0': + resolution: {integrity: sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.53.5': - resolution: {integrity: sha512-wrSAViWvZHBMMlWk6EJhvg8/rjxzyEhEdgfMMjREHEq11EtJ6IP6yfcCH57YAEca2Oe3FNCE9DSTgU70EIGmVw==} + '@rollup/rollup-android-arm64@4.54.0': + resolution: {integrity: sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.53.5': - resolution: {integrity: sha512-S87zZPBmRO6u1YXQLwpveZm4JfPpAa6oHBX7/ghSiGH3rz/KDgAu1rKdGutV+WUI6tKDMbaBJomhnT30Y2t4VQ==} + '@rollup/rollup-darwin-arm64@4.54.0': + resolution: {integrity: sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.53.5': - resolution: {integrity: sha512-YTbnsAaHo6VrAczISxgpTva8EkfQus0VPEVJCEaboHtZRIb6h6j0BNxRBOwnDciFTZLDPW5r+ZBmhL/+YpTZgA==} + '@rollup/rollup-darwin-x64@4.54.0': + resolution: {integrity: sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.53.5': - resolution: {integrity: sha512-1T8eY2J8rKJWzaznV7zedfdhD1BqVs1iqILhmHDq/bqCUZsrMt+j8VCTHhP0vdfbHK3e1IQ7VYx3jlKqwlf+vw==} + '@rollup/rollup-freebsd-arm64@4.54.0': + resolution: {integrity: sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.53.5': - resolution: {integrity: sha512-sHTiuXyBJApxRn+VFMaw1U+Qsz4kcNlxQ742snICYPrY+DDL8/ZbaC4DVIB7vgZmp3jiDaKA0WpBdP0aqPJoBQ==} + '@rollup/rollup-freebsd-x64@4.54.0': + resolution: {integrity: sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.53.5': - resolution: {integrity: sha512-dV3T9MyAf0w8zPVLVBptVlzaXxka6xg1f16VAQmjg+4KMSTWDvhimI/Y6mp8oHwNrmnmVl9XxJ/w/mO4uIQONA==} + '@rollup/rollup-linux-arm-gnueabihf@4.54.0': + resolution: {integrity: sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.53.5': - resolution: {integrity: sha512-wIGYC1x/hyjP+KAu9+ewDI+fi5XSNiUi9Bvg6KGAh2TsNMA3tSEs+Sh6jJ/r4BV/bx/CyWu2ue9kDnIdRyafcQ==} + '@rollup/rollup-linux-arm-musleabihf@4.54.0': + resolution: {integrity: sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.53.5': - resolution: {integrity: sha512-Y+qVA0D9d0y2FRNiG9oM3Hut/DgODZbU9I8pLLPwAsU0tUKZ49cyV1tzmB/qRbSzGvY8lpgGkJuMyuhH7Ma+Vg==} + '@rollup/rollup-linux-arm64-gnu@4.54.0': + resolution: {integrity: sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.53.5': - resolution: {integrity: sha512-juaC4bEgJsyFVfqhtGLz8mbopaWD+WeSOYr5E16y+1of6KQjc0BpwZLuxkClqY1i8sco+MdyoXPNiCkQou09+g==} + '@rollup/rollup-linux-arm64-musl@4.54.0': + resolution: {integrity: sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.53.5': - resolution: {integrity: sha512-rIEC0hZ17A42iXtHX+EPJVL/CakHo+tT7W0pbzdAGuWOt2jxDFh7A/lRhsNHBcqL4T36+UiAgwO8pbmn3dE8wA==} + '@rollup/rollup-linux-loong64-gnu@4.54.0': + resolution: {integrity: sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.53.5': - resolution: {integrity: sha512-T7l409NhUE552RcAOcmJHj3xyZ2h7vMWzcwQI0hvn5tqHh3oSoclf9WgTl+0QqffWFG8MEVZZP1/OBglKZx52Q==} + '@rollup/rollup-linux-ppc64-gnu@4.54.0': + resolution: {integrity: sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.53.5': - resolution: {integrity: sha512-7OK5/GhxbnrMcxIFoYfhV/TkknarkYC1hqUw1wU2xUN3TVRLNT5FmBv4KkheSG2xZ6IEbRAhTooTV2+R5Tk0lQ==} + '@rollup/rollup-linux-riscv64-gnu@4.54.0': + resolution: {integrity: sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.53.5': - resolution: {integrity: sha512-GwuDBE/PsXaTa76lO5eLJTyr2k8QkPipAyOrs4V/KJufHCZBJ495VCGJol35grx9xryk4V+2zd3Ri+3v7NPh+w==} + '@rollup/rollup-linux-riscv64-musl@4.54.0': + resolution: {integrity: sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.53.5': - resolution: {integrity: sha512-IAE1Ziyr1qNfnmiQLHBURAD+eh/zH1pIeJjeShleII7Vj8kyEm2PF77o+lf3WTHDpNJcu4IXJxNO0Zluro8bOw==} + '@rollup/rollup-linux-s390x-gnu@4.54.0': + resolution: {integrity: sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.53.5': - resolution: {integrity: sha512-Pg6E+oP7GvZ4XwgRJBuSXZjcqpIW3yCBhK4BcsANvb47qMvAbCjR6E+1a/U2WXz1JJxp9/4Dno3/iSJLcm5auw==} + '@rollup/rollup-linux-x64-gnu@4.54.0': + resolution: {integrity: sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.53.5': - resolution: {integrity: sha512-txGtluxDKTxaMDzUduGP0wdfng24y1rygUMnmlUJ88fzCCULCLn7oE5kb2+tRB+MWq1QDZT6ObT5RrR8HFRKqg==} + '@rollup/rollup-linux-x64-musl@4.54.0': + resolution: {integrity: sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==} cpu: [x64] os: [linux] - '@rollup/rollup-openharmony-arm64@4.53.5': - resolution: {integrity: sha512-3DFiLPnTxiOQV993fMc+KO8zXHTcIjgaInrqlG8zDp1TlhYl6WgrOHuJkJQ6M8zHEcntSJsUp1XFZSY8C1DYbg==} + '@rollup/rollup-openharmony-arm64@4.54.0': + resolution: {integrity: sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.53.5': - resolution: {integrity: sha512-nggc/wPpNTgjGg75hu+Q/3i32R00Lq1B6N1DO7MCU340MRKL3WZJMjA9U4K4gzy3dkZPXm9E1Nc81FItBVGRlA==} + '@rollup/rollup-win32-arm64-msvc@4.54.0': + resolution: {integrity: sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.53.5': - resolution: {integrity: sha512-U/54pTbdQpPLBdEzCT6NBCFAfSZMvmjr0twhnD9f4EIvlm9wy3jjQ38yQj1AGznrNO65EWQMgm/QUjuIVrYF9w==} + '@rollup/rollup-win32-ia32-msvc@4.54.0': + resolution: {integrity: sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.53.5': - resolution: {integrity: sha512-2NqKgZSuLH9SXBBV2dWNRCZmocgSOx8OJSdpRaEcRlIfX8YrKxUT6z0F1NpvDVhOsl190UFTRh2F2WDWWCYp3A==} + '@rollup/rollup-win32-x64-gnu@4.54.0': + resolution: {integrity: sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.53.5': - resolution: {integrity: sha512-JRpZUhCfhZ4keB5v0fe02gQJy05GqboPOaxvjugW04RLSYYoB/9t2lx2u/tMs/Na/1NXfY8QYjgRljRpN+MjTQ==} + '@rollup/rollup-win32-x64-msvc@4.54.0': + resolution: {integrity: sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==} cpu: [x64] os: [win32] @@ -2237,8 +2237,8 @@ packages: peerDependencies: rollup: ^4.0.0 - rollup@4.53.5: - resolution: {integrity: sha512-iTNAbFSlRpcHeeWu73ywU/8KuU/LZmNCSxp6fjQkJBD3ivUb8tpDrXhIxEzA05HlYMEwmtaUnb3RP+YNv162OQ==} + rollup@4.54.0: + resolution: {integrity: sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -2499,8 +2499,8 @@ packages: resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} engines: {node: '>= 0.6'} - typebox@1.0.64: - resolution: {integrity: sha512-U6quDhQMzQRzBX8jvlE5mZlUnlMRTaZrG/QMAhOYVJ0D0rhq1iOXBQVSzBX0JgAh55jXQ7fWIv24i+lVimXcDw==} + typebox@1.0.65: + resolution: {integrity: sha512-3WaZ4QmfAxmelhi0dwusYDoZ+DLDoVrsc3aORzgtk1I8JfIf4wn+F8i1TtrnU2jJKM/hZgjJGfzXrwS4B31zZw==} typescript-eslint@8.50.0: resolution: {integrity: sha512-Q1/6yNUmCpH94fbgMUMg2/BSAr/6U7GBk61kZTv1/asghQOWOjTlp9K8mixS5NcJmm2creY+UFfGeW/+OcA64A==} @@ -3126,14 +3126,14 @@ snapshots: json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - '@redocly/cli@2.13.0(@opentelemetry/api@1.9.0)(ajv@8.17.1)(core-js@3.47.0)': + '@redocly/cli@2.14.0(@opentelemetry/api@1.9.0)(ajv@8.17.1)(core-js@3.47.0)': dependencies: '@opentelemetry/exporter-trace-otlp-http': 0.202.0(@opentelemetry/api@1.9.0) '@opentelemetry/resources': 2.0.1(@opentelemetry/api@1.9.0) '@opentelemetry/sdk-trace-node': 2.0.1(@opentelemetry/api@1.9.0) '@opentelemetry/semantic-conventions': 1.34.0 - '@redocly/openapi-core': 2.13.0(ajv@8.17.1) - '@redocly/respect-core': 2.13.0(ajv@8.17.1) + '@redocly/openapi-core': 2.14.0(ajv@8.17.1) + '@redocly/respect-core': 2.14.0(ajv@8.17.1) abort-controller: 3.0.0 chokidar: 3.6.0 colorette: 1.4.0 @@ -3167,7 +3167,7 @@ snapshots: '@redocly/config@0.22.2': {} - '@redocly/config@0.41.0': + '@redocly/config@0.41.1': dependencies: json-schema-to-ts: 2.7.2 @@ -3185,10 +3185,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@redocly/openapi-core@2.13.0(ajv@8.17.1)': + '@redocly/openapi-core@2.14.0(ajv@8.17.1)': dependencies: '@redocly/ajv': 8.17.1 - '@redocly/config': 0.41.0 + '@redocly/config': 0.41.1 ajv-formats: 3.0.1(ajv@8.17.1) colorette: 1.4.0 js-levenshtein: 1.1.6 @@ -3199,12 +3199,12 @@ snapshots: transitivePeerDependencies: - ajv - '@redocly/respect-core@2.13.0(ajv@8.17.1)': + '@redocly/respect-core@2.14.0(ajv@8.17.1)': dependencies: '@faker-js/faker': 7.6.0 '@noble/hashes': 1.8.0 '@redocly/ajv': 8.17.1 - '@redocly/openapi-core': 2.13.0(ajv@8.17.1) + '@redocly/openapi-core': 2.14.0(ajv@8.17.1) better-ajv-errors: 1.2.0(ajv@8.17.1) colorette: 2.0.20 json-pointer: 0.6.2 @@ -3214,70 +3214,70 @@ snapshots: transitivePeerDependencies: - ajv - '@rollup/rollup-android-arm-eabi@4.53.5': + '@rollup/rollup-android-arm-eabi@4.54.0': optional: true - '@rollup/rollup-android-arm64@4.53.5': + '@rollup/rollup-android-arm64@4.54.0': optional: true - '@rollup/rollup-darwin-arm64@4.53.5': + '@rollup/rollup-darwin-arm64@4.54.0': optional: true - '@rollup/rollup-darwin-x64@4.53.5': + '@rollup/rollup-darwin-x64@4.54.0': optional: true - '@rollup/rollup-freebsd-arm64@4.53.5': + '@rollup/rollup-freebsd-arm64@4.54.0': optional: true - '@rollup/rollup-freebsd-x64@4.53.5': + '@rollup/rollup-freebsd-x64@4.54.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.53.5': + '@rollup/rollup-linux-arm-gnueabihf@4.54.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.53.5': + '@rollup/rollup-linux-arm-musleabihf@4.54.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.53.5': + '@rollup/rollup-linux-arm64-gnu@4.54.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.53.5': + '@rollup/rollup-linux-arm64-musl@4.54.0': optional: true - '@rollup/rollup-linux-loong64-gnu@4.53.5': + '@rollup/rollup-linux-loong64-gnu@4.54.0': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.53.5': + '@rollup/rollup-linux-ppc64-gnu@4.54.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.53.5': + '@rollup/rollup-linux-riscv64-gnu@4.54.0': optional: true - '@rollup/rollup-linux-riscv64-musl@4.53.5': + '@rollup/rollup-linux-riscv64-musl@4.54.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.53.5': + '@rollup/rollup-linux-s390x-gnu@4.54.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.53.5': + '@rollup/rollup-linux-x64-gnu@4.54.0': optional: true - '@rollup/rollup-linux-x64-musl@4.53.5': + '@rollup/rollup-linux-x64-musl@4.54.0': optional: true - '@rollup/rollup-openharmony-arm64@4.53.5': + '@rollup/rollup-openharmony-arm64@4.54.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.53.5': + '@rollup/rollup-win32-arm64-msvc@4.54.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.53.5': + '@rollup/rollup-win32-ia32-msvc@4.54.0': optional: true - '@rollup/rollup-win32-x64-gnu@4.53.5': + '@rollup/rollup-win32-x64-gnu@4.54.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.53.5': + '@rollup/rollup-win32-x64-msvc@4.54.0': optional: true '@socket.io/component-emitter@3.1.2': {} @@ -4729,36 +4729,36 @@ snapshots: rfdc@1.4.1: {} - rollup-plugin-node-externals@8.1.2(rollup@4.53.5): + rollup-plugin-node-externals@8.1.2(rollup@4.54.0): dependencies: - rollup: 4.53.5 + rollup: 4.54.0 - rollup@4.53.5: + rollup@4.54.0: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.53.5 - '@rollup/rollup-android-arm64': 4.53.5 - '@rollup/rollup-darwin-arm64': 4.53.5 - '@rollup/rollup-darwin-x64': 4.53.5 - '@rollup/rollup-freebsd-arm64': 4.53.5 - '@rollup/rollup-freebsd-x64': 4.53.5 - '@rollup/rollup-linux-arm-gnueabihf': 4.53.5 - '@rollup/rollup-linux-arm-musleabihf': 4.53.5 - '@rollup/rollup-linux-arm64-gnu': 4.53.5 - '@rollup/rollup-linux-arm64-musl': 4.53.5 - '@rollup/rollup-linux-loong64-gnu': 4.53.5 - '@rollup/rollup-linux-ppc64-gnu': 4.53.5 - '@rollup/rollup-linux-riscv64-gnu': 4.53.5 - '@rollup/rollup-linux-riscv64-musl': 4.53.5 - '@rollup/rollup-linux-s390x-gnu': 4.53.5 - '@rollup/rollup-linux-x64-gnu': 4.53.5 - '@rollup/rollup-linux-x64-musl': 4.53.5 - '@rollup/rollup-openharmony-arm64': 4.53.5 - '@rollup/rollup-win32-arm64-msvc': 4.53.5 - '@rollup/rollup-win32-ia32-msvc': 4.53.5 - '@rollup/rollup-win32-x64-gnu': 4.53.5 - '@rollup/rollup-win32-x64-msvc': 4.53.5 + '@rollup/rollup-android-arm-eabi': 4.54.0 + '@rollup/rollup-android-arm64': 4.54.0 + '@rollup/rollup-darwin-arm64': 4.54.0 + '@rollup/rollup-darwin-x64': 4.54.0 + '@rollup/rollup-freebsd-arm64': 4.54.0 + '@rollup/rollup-freebsd-x64': 4.54.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.54.0 + '@rollup/rollup-linux-arm-musleabihf': 4.54.0 + '@rollup/rollup-linux-arm64-gnu': 4.54.0 + '@rollup/rollup-linux-arm64-musl': 4.54.0 + '@rollup/rollup-linux-loong64-gnu': 4.54.0 + '@rollup/rollup-linux-ppc64-gnu': 4.54.0 + '@rollup/rollup-linux-riscv64-gnu': 4.54.0 + '@rollup/rollup-linux-riscv64-musl': 4.54.0 + '@rollup/rollup-linux-s390x-gnu': 4.54.0 + '@rollup/rollup-linux-x64-gnu': 4.54.0 + '@rollup/rollup-linux-x64-musl': 4.54.0 + '@rollup/rollup-openharmony-arm64': 4.54.0 + '@rollup/rollup-win32-arm64-msvc': 4.54.0 + '@rollup/rollup-win32-ia32-msvc': 4.54.0 + '@rollup/rollup-win32-x64-gnu': 4.54.0 + '@rollup/rollup-win32-x64-msvc': 4.54.0 fsevents: 2.3.3 safe-buffer@5.2.1: {} @@ -5052,7 +5052,7 @@ snapshots: media-typer: 1.1.0 mime-types: 3.0.2 - typebox@1.0.64: {} + typebox@1.0.65: {} typescript-eslint@8.50.0(eslint@9.39.2)(typescript@5.9.3): dependencies: @@ -5111,7 +5111,7 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.53.5 + rollup: 4.54.0 tinyglobby: 0.2.15 optionalDependencies: '@types/node': 22.19.3 @@ -5124,7 +5124,7 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.53.5 + rollup: 4.54.0 tinyglobby: 0.2.15 optionalDependencies: '@types/node': 25.0.3 diff --git a/src/tic-tac-toe/entrypoint.sh b/src/tic-tac-toe/entrypoint.sh new file mode 100644 index 0000000..f1735d5 --- /dev/null +++ b/src/tic-tac-toe/entrypoint.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +set -e +# do anything here + +# run the CMD [ ... ] from the dockerfile +exec "$@" diff --git a/src/tic-tac-toe/package.json b/src/tic-tac-toe/package.json index e9edce4..e75880b 100644 --- a/src/tic-tac-toe/package.json +++ b/src/tic-tac-toe/package.json @@ -6,9 +6,8 @@ "scripts": { "start": "npm run build && node dist/run.js", "build": "vite build", - "build:prod": "vite build --outDir=/dist --minify=true --sourcemap=false", - "REMOVEME-build:openapi": "VITE_ENTRYPOINT=src/openapi.ts vite build && node dist/openapi.cjs >openapi.json", - "test": "echo \"Error: no test specified\" && exit 1" + "build:prod": "vite build --outDir=/dist --minify=true --sourcemap=false && mv /dist/run.js /dist/run.cjs", + "build:openapi": "VITE_ENTRYPOINT=src/openapi.ts vite build && mv dist/openapi.js dist/openapi.cjs && node dist/openapi.cjs >openapi.json" }, "keywords": [], "author": "", @@ -24,7 +23,7 @@ "fastify": "^5.6.2", "fastify-plugin": "^5.1.0", "socket.io": "^4.8.1", - "typebox": "^1.0.64" + "typebox": "^1.0.65" }, "devDependencies": { "@types/node": "^22.19.3", diff --git a/src/tic-tac-toe/src/openapi.ts b/src/tic-tac-toe/src/openapi.ts new file mode 100644 index 0000000..d66d7a7 --- /dev/null +++ b/src/tic-tac-toe/src/openapi.ts @@ -0,0 +1,21 @@ +import f, { FastifyPluginAsync } from 'fastify'; +import * as swagger from '@shared/swagger'; +import * as auth from '@shared/auth'; + +declare const __SERVICE_NAME: string; + +// @ts-expect-error: import.meta.glob is a vite thing. Typescript doesn't know this... +const routes = import.meta.glob('./routes/**/*.ts', { eager: true }); + +async function start() { + const fastify = f({ logger: false }); + await fastify.register(auth.authPlugin, { onlySchema: true }); + await fastify.register(swagger.useSwagger, { service: __SERVICE_NAME }); + + for (const route of Object.values(routes)) { + await fastify.register(route as FastifyPluginAsync, {}); + } + await fastify.ready(); + console.log(JSON.stringify(fastify.swagger(), undefined, 4)); +} +start(); diff --git a/src/tic-tac-toe/src/run.ts b/src/tic-tac-toe/src/run.ts index a65470a..dc06dc8 100644 --- a/src/tic-tac-toe/src/run.ts +++ b/src/tic-tac-toe/src/run.ts @@ -6,13 +6,13 @@ import app from './app'; const start = async () => { const envToLogger = { development: { - transport: { - target: 'pino', - options: { - translateTime: 'HH:MM:ss Z', - ignore: 'pid,hostname', - }, - }, + // transport: { + // target: 'pino', + // options: { + // translateTime: 'HH:MM:ss Z', + // ignore: 'pid,hostname', + // }, + // }, }, production: true, test: false, diff --git a/src/tic-tac-toe/vite.config.js b/src/tic-tac-toe/vite.config.js new file mode 100644 index 0000000..ba669e5 --- /dev/null +++ b/src/tic-tac-toe/vite.config.js @@ -0,0 +1,54 @@ +import { defineConfig } from 'vite'; +import tsconfigPaths from 'vite-tsconfig-paths'; +import nodeExternals from 'rollup-plugin-node-externals'; +import path from 'node:path'; +import fs from 'node:fs'; + +function collectDeps(...pkgJsonPaths) { + const allDeps = new Set(); + for (const pkgPath of pkgJsonPaths) { + const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8')); + for (const dep of Object.keys(pkg.dependencies || {})) { + allDeps.add(dep); + } + for (const peer of Object.keys(pkg.peerDependencies || {})) { + allDeps.add(peer); + } + } + return Array.from(allDeps); +} + +const externals = collectDeps( + './package.json', + '../@shared/package.json', +); + + +export default defineConfig({ + root: __dirname, + define: { + __SERVICE_NAME: '"tic-tac-toe"', + }, + // service root + plugins: [tsconfigPaths(), nodeExternals()], + build: { + ssr: true, + outDir: 'dist', + emptyOutDir: true, + lib: { + entry: path.resolve(__dirname, process.env.VITE_ENTRYPOINT ?? 'src/run.ts'), + // adjust main entry + formats: ['cjs'], + // CommonJS for Node.js + fileName: (format, entryName) => `${entryName}.cjs`, + }, + rollupOptions: { + external: externals, + }, + target: 'node22', + // or whatever Node version you use + sourcemap: true, + minify: false, + // for easier debugging + }, +}); diff --git a/src/user/package.json b/src/user/package.json index 2987bf2..e5c94cc 100644 --- a/src/user/package.json +++ b/src/user/package.json @@ -26,7 +26,7 @@ "fastify": "^5.6.2", "fastify-cli": "^7.4.1", "fastify-plugin": "^5.1.0", - "typebox": "^1.0.64" + "typebox": "^1.0.65" }, "devDependencies": { "@types/node": "^22.19.3", From 54c8e35a8ecdd5145f023e06f29c18033cfc7116 Mon Sep 17 00:00:00 2001 From: apetitco Date: Sun, 21 Dec 2025 02:59:04 +0100 Subject: [PATCH 21/22] (backend): trying to have a working backend. Did I manage to achieve this task: NO. --- src/tic-tac-toe/openapi.json | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/tic-tac-toe/openapi.json diff --git a/src/tic-tac-toe/openapi.json b/src/tic-tac-toe/openapi.json new file mode 100644 index 0000000..38cd725 --- /dev/null +++ b/src/tic-tac-toe/openapi.json @@ -0,0 +1,21 @@ +{ + "openapi": "3.1.0", + "info": { + "version": "9.6.1", + "title": "@fastify/swagger" + }, + "components": { + "schemas": {} + }, + "paths": {}, + "servers": [ + { + "url": "https://local.maix.me:8888", + "description": "direct from docker" + }, + { + "url": "https://local.maix.me:8000", + "description": "using fnginx" + } + ] +} From 6e4d0b7e59133b72a8ada80ecce4f3a9769aa814 Mon Sep 17 00:00:00 2001 From: Maieul BOYER Date: Mon, 22 Dec 2025 14:56:39 +0100 Subject: [PATCH 22/22] update: added ttt to nginx configuration --- nginx/conf/locations/ttt.conf | 14 ++++++++++++++ src/tic-tac-toe/src/plugins/socket.ts | 2 +- 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 nginx/conf/locations/ttt.conf diff --git a/nginx/conf/locations/ttt.conf b/nginx/conf/locations/ttt.conf new file mode 100644 index 0000000..eee6057 --- /dev/null +++ b/nginx/conf/locations/ttt.conf @@ -0,0 +1,14 @@ +#forward the post request to the microservice +location /api/ttt/ { + proxy_pass http://app-tic-tac-toe; +} + +location /api/ttt/socket.io/ { + + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + proxy_set_header Host $host; + proxy_read_timeout 3600s; + proxy_pass http://app-tic-tac-toe; +} diff --git a/src/tic-tac-toe/src/plugins/socket.ts b/src/tic-tac-toe/src/plugins/socket.ts index f32dec8..f485775 100644 --- a/src/tic-tac-toe/src/plugins/socket.ts +++ b/src/tic-tac-toe/src/plugins/socket.ts @@ -18,7 +18,7 @@ const fastifySocketIO: FastifyPluginAsync = fp(async (fastify) => { } fastify.decorate( 'io', - new Server(fastify.server, { path: '/api/chat/socket.io' }), + new Server(fastify.server, { path: '/api/ttt/socket.io' }), ); fastify.addHook('preClose', defaultPreClose); fastify.addHook('onClose', (instance: FastifyInstance, done) => {