diff --git a/server/routerlicious/packages/lambdas/src/nexus/connect.ts b/server/routerlicious/packages/lambdas/src/nexus/connect.ts index 2a36189d3428..2d8abd93be4d 100644 --- a/server/routerlicious/packages/lambdas/src/nexus/connect.ts +++ b/server/routerlicious/packages/lambdas/src/nexus/connect.ts @@ -270,16 +270,16 @@ async function connectOrderer( }; } -function trackSocket( +async function trackSocket( socket: IWebSocket, tenantId: string, documentId: string, claims: ITokenClaims, { socketTracker }: INexusLambdaDependencies, -): void { +): Promise { // Track socket and tokens for this connection if (socketTracker && claims.jti) { - socketTracker.addSocketForToken( + return socketTracker.addSocketForToken( createCompositeTokenId(tenantId, documentId, claims.jti), socket, ); @@ -712,7 +712,7 @@ export async function connectDocument( (connectedMessage as any).timestamp = connectedTimestamp; connectionTrace.stampStage(ConnectDocumentStage.MessageClientConnected); - trackSocket(socket, tenantId, documentId, claims, lambdaDependencies); + await trackSocket(socket, tenantId, documentId, claims, lambdaDependencies); connectionTrace.stampStage(ConnectDocumentStage.SocketTrackerAppended); trackCollaborationSession( diff --git a/server/routerlicious/packages/routerlicious-base/package.json b/server/routerlicious/packages/routerlicious-base/package.json index bf25cb4f666e..2a0d2f9ed8ba 100644 --- a/server/routerlicious/packages/routerlicious-base/package.json +++ b/server/routerlicious/packages/routerlicious-base/package.json @@ -82,6 +82,7 @@ "serialize-error": "^8.1.0", "sha.js": "^2.4.12", "sillyname": "^0.1.0", + "socket.io": "^4.8.0", "uuid": "^11.1.0", "winston": "^3.6.0", "ws": "^7.5.10" diff --git a/server/routerlicious/packages/routerlicious-base/src/nexus/customizations.ts b/server/routerlicious/packages/routerlicious-base/src/nexus/customizations.ts index 096a74572df6..63d5ebc55aed 100644 --- a/server/routerlicious/packages/routerlicious-base/src/nexus/customizations.ts +++ b/server/routerlicious/packages/routerlicious-base/src/nexus/customizations.ts @@ -15,6 +15,7 @@ import type { } from "@fluidframework/server-services-core"; import type { SocketIoAdapterCreator } from "@fluidframework/server-services-shared"; import type { IRedisClientConnectionManager } from "@fluidframework/server-services-utils"; +import type { Server } from "socket.io"; /** * @internal @@ -36,4 +37,5 @@ export interface INexusResourcesCustomizations { redisClientConnectionManagerForInvalidTokenCache?: IRedisClientConnectionManager; customCreateSocketIoAdapter?: SocketIoAdapterCreator; readinessCheck?: IReadinessCheck; + customSocketIoSetupFunction?: (io: Server) => void; } diff --git a/server/routerlicious/packages/routerlicious-base/src/nexus/runnerFactory.ts b/server/routerlicious/packages/routerlicious-base/src/nexus/runnerFactory.ts index 300eb15e3ab7..75495a9cca45 100644 --- a/server/routerlicious/packages/routerlicious-base/src/nexus/runnerFactory.ts +++ b/server/routerlicious/packages/routerlicious-base/src/nexus/runnerFactory.ts @@ -594,6 +594,7 @@ export class NexusResourcesFactory implements core.IResourcesFactory; - - /** - * @deprecated move this function to IRevokedTokenChecker - */ - isTokenRevoked?(tenantId: string, documentId: string, jwtId: string): Promise; } /** diff --git a/server/routerlicious/packages/services-core/src/webSocketTracker.ts b/server/routerlicious/packages/services-core/src/webSocketTracker.ts index 6b4c943c83a9..122a9ba2cbf6 100644 --- a/server/routerlicious/packages/services-core/src/webSocketTracker.ts +++ b/server/routerlicious/packages/services-core/src/webSocketTracker.ts @@ -12,7 +12,7 @@ import type { IWebSocket } from "./http"; */ export interface IWebSocketTracker { // Add a token to socket mapping - addSocketForToken(compositeTokenId: string, webSocket: IWebSocket); + addSocketForToken(compositeTokenId: string, webSocket: IWebSocket): Promise; // Get the socket objects with the given token getSocketsForToken(compositeTokenId: string): IWebSocket[]; diff --git a/server/routerlicious/packages/services-shared/src/webServer.ts b/server/routerlicious/packages/services-shared/src/webServer.ts index ceb8ded70276..c2840ed360f8 100644 --- a/server/routerlicious/packages/services-shared/src/webServer.ts +++ b/server/routerlicious/packages/services-shared/src/webServer.ts @@ -13,6 +13,7 @@ import * as util from "util"; import type * as core from "@fluidframework/server-services-core"; import { Lumberjack } from "@fluidframework/server-services-telemetry"; import type { IRedisClientConnectionManager } from "@fluidframework/server-services-utils"; +import { Server } from "socket.io"; import { setupMaster, setupWorker } from "@socket.io/sticky"; import * as socketIo from "./socketIoServer"; @@ -102,6 +103,7 @@ export class SocketIoWebServerFactory implements core.IWebServerFactory { private readonly httpServerConfig?: IHttpServerConfig, private readonly socketIoConfig?: socketIo.ISocketIoServerConfig, private readonly customCreateAdapter?: socketIo.SocketIoAdapterCreator, + private readonly customIoSetupFunction?: (io: Server) => void, ) {} public create(requestListener: RequestListener): core.IWebServer { @@ -115,7 +117,7 @@ export class SocketIoWebServerFactory implements core.IWebServerFactory { server, this.socketIoAdapterConfig, this.socketIoConfig, - undefined /* ioSetup */, + this.customIoSetupFunction, this.customCreateAdapter, ); diff --git a/server/routerlicious/packages/services-utils/src/webSocketTracker.ts b/server/routerlicious/packages/services-utils/src/webSocketTracker.ts index b6821edb36c3..a35b39819c90 100644 --- a/server/routerlicious/packages/services-utils/src/webSocketTracker.ts +++ b/server/routerlicious/packages/services-utils/src/webSocketTracker.ts @@ -16,31 +16,38 @@ export class WebSocketTracker implements IWebSocketTracker { // Map of socketId to token ids. It assumes one socket could be used for connections with multiple tokens private readonly socketIdToTokenIdMap: Map>; - constructor() { + constructor(private readonly useSocketIoRoomFeature: boolean = false) { this.socketIdToSocketMap = new Map(); this.tokenIdToSocketIdMap = new Map(); this.socketIdToTokenIdMap = new Map(); } - public addSocketForToken(compositeTokenId: string, webSocket: IWebSocket) { - const socketIds = this.tokenIdToSocketIdMap.get(compositeTokenId); - if (socketIds) { - socketIds.add(webSocket.id); + public async addSocketForToken(compositeTokenId: string, webSocket: IWebSocket): Promise { + if (this.useSocketIoRoomFeature) { + await webSocket.join(compositeTokenId); } else { - this.tokenIdToSocketIdMap.set(compositeTokenId, new Set([webSocket.id])); - } + const socketIds = this.tokenIdToSocketIdMap.get(compositeTokenId); + if (socketIds) { + socketIds.add(webSocket.id); + } else { + this.tokenIdToSocketIdMap.set(compositeTokenId, new Set([webSocket.id])); + } - const tokenIds = this.socketIdToTokenIdMap.get(webSocket.id); - if (tokenIds) { - tokenIds.add(compositeTokenId); - } else { - this.socketIdToTokenIdMap.set(webSocket.id, new Set([compositeTokenId])); - } + const tokenIds = this.socketIdToTokenIdMap.get(webSocket.id); + if (tokenIds) { + tokenIds.add(compositeTokenId); + } else { + this.socketIdToTokenIdMap.set(webSocket.id, new Set([compositeTokenId])); + } - this.socketIdToSocketMap.set(webSocket.id, webSocket); + this.socketIdToSocketMap.set(webSocket.id, webSocket); + } } public getSocketsForToken(compositeTokenId: string): IWebSocket[] { + if (this.useSocketIoRoomFeature) { + throw new Error("Method not supported when socket room feature is enabled."); + } const socketIds = this.tokenIdToSocketIdMap.get(compositeTokenId); if (!socketIds) { @@ -58,10 +65,17 @@ export class WebSocketTracker implements IWebSocketTracker { } public addSocket(webSocket: IWebSocket) { + if (this.useSocketIoRoomFeature) { + throw new Error("Method not supported when socket room feature is enabled."); + } this.socketIdToSocketMap.set(webSocket.id, webSocket); } public removeSocket(socketId: string) { + if (this.useSocketIoRoomFeature) { + // No need to manually remove socket when socket room feature is enabled + return false; + } const tokenIds = this.socketIdToTokenIdMap.get(socketId); if (tokenIds) { @@ -80,6 +94,9 @@ export class WebSocketTracker implements IWebSocketTracker { } public getAllSockets(): IWebSocket[] { + if (this.useSocketIoRoomFeature) { + throw new Error("Method not supported when socket room feature is enabled."); + } return Array.from(this.socketIdToSocketMap.values()); } } diff --git a/server/routerlicious/pnpm-lock.yaml b/server/routerlicious/pnpm-lock.yaml index f5904cadddf2..8d6a32035808 100644 --- a/server/routerlicious/pnpm-lock.yaml +++ b/server/routerlicious/pnpm-lock.yaml @@ -859,6 +859,9 @@ importers: sillyname: specifier: ^0.1.0 version: 0.1.0 + socket.io: + specifier: ^4.8.0 + version: 4.8.0 uuid: specifier: ^11.1.0 version: 11.1.0 @@ -2305,28 +2308,50 @@ packages: resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} + '@changesets/apply-release-plan@7.0.14': + resolution: {integrity: sha512-ddBvf9PHdy2YY0OUiEl3TV78mH9sckndJR14QAt87KLEbIov81XO0q0QAmvooBxXlqRRP8I9B7XOzZwQG7JkWA==} + '@changesets/apply-release-plan@7.0.5': resolution: {integrity: sha512-1cWCk+ZshEkSVEZrm2fSj1Gz8sYvxgUL4Q78+1ZZqeqfuevPTPk033/yUZ3df8BKMohkqqHfzj0HOOrG0KtXTw==} '@changesets/assemble-release-plan@6.0.4': resolution: {integrity: sha512-nqICnvmrwWj4w2x0fOhVj2QEGdlUuwVAwESrUo5HLzWMI1rE5SWfsr9ln+rDqWB6RQ2ZyaMZHUcU7/IRaUJS+Q==} + '@changesets/assemble-release-plan@6.0.9': + resolution: {integrity: sha512-tPgeeqCHIwNo8sypKlS3gOPmsS3wP0zHt67JDuL20P4QcXiw/O4Hl7oXiuLnP9yg+rXLQ2sScdV1Kkzde61iSQ==} + '@changesets/changelog-git@0.2.0': resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} + '@changesets/changelog-git@0.2.1': + resolution: {integrity: sha512-x/xEleCFLH28c3bQeQIyeZf8lFXyDFVn1SgcBiR2Tw/r4IAWlk1fzxCEZ6NxQAjF2Nwtczoen3OA2qR+UawQ8Q==} + '@changesets/cli@2.27.8': resolution: {integrity: sha512-gZNyh+LdSsI82wBSHLQ3QN5J30P4uHKJ4fXgoGwQxfXwYFTJzDdvIJasZn8rYQtmKhyQuiBj4SSnLuKlxKWq4w==} hasBin: true + '@changesets/cli@2.29.8': + resolution: {integrity: sha512-1weuGZpP63YWUYjay/E84qqwcnt5yJMM0tep10Up7Q5cS/DGe2IZ0Uj3HNMxGhCINZuR7aO9WBMdKnPit5ZDPA==} + hasBin: true + '@changesets/config@3.0.3': resolution: {integrity: sha512-vqgQZMyIcuIpw9nqFIpTSNyc/wgm/Lu1zKN5vECy74u95Qx/Wa9g27HdgO4NkVAaq+BGA8wUc/qvbvVNs93n6A==} + '@changesets/config@3.1.2': + resolution: {integrity: sha512-CYiRhA4bWKemdYi/uwImjPxqWNpqGPNbEBdX1BdONALFIDK7MCUj6FPkzD+z9gJcvDFUQJn9aDVf4UG7OT6Kog==} + '@changesets/errors@0.2.0': resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} '@changesets/get-dependents-graph@2.1.2': resolution: {integrity: sha512-sgcHRkiBY9i4zWYBwlVyAjEM9sAzs4wYVwJUdnbDLnVG3QwAaia1Mk5P8M7kraTOZN+vBET7n8KyB0YXCbFRLQ==} + '@changesets/get-dependents-graph@2.1.3': + resolution: {integrity: sha512-gphr+v0mv2I3Oxt19VdWRRUxq3sseyUpX9DaHpTUmLj92Y10AGy+XOtV+kbM6L/fDcpx7/ISDFK6T8A/P3lOdQ==} + + '@changesets/get-release-plan@4.0.14': + resolution: {integrity: sha512-yjZMHpUHgl4Xl5gRlolVuxDkm4HgSJqT93Ri1Uz8kGrQb+5iJ8dkXJ20M2j/Y4iV5QzS2c5SeTxVSKX+2eMI0g==} + '@changesets/get-release-plan@4.0.4': resolution: {integrity: sha512-SicG/S67JmPTrdcc9Vpu0wSQt7IiuN0dc8iR5VScnnTVPfIaLvKmEGRvIaF0kcn8u5ZqLbormZNTO77bCEvyWw==} @@ -2336,30 +2361,51 @@ packages: '@changesets/git@3.0.1': resolution: {integrity: sha512-pdgHcYBLCPcLd82aRcuO0kxCDbw/yISlOtkmwmE8Odo1L6hSiZrBOsRl84eYG7DRCab/iHnOkWqExqc4wxk2LQ==} + '@changesets/git@3.0.4': + resolution: {integrity: sha512-BXANzRFkX+XcC1q/d27NKvlJ1yf7PSAgi8JG6dt8EfbHFHi4neau7mufcSca5zRhwOL8j9s6EqsxmT+s+/E6Sw==} + '@changesets/logger@0.1.1': resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==} '@changesets/parse@0.4.0': resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==} + '@changesets/parse@0.4.2': + resolution: {integrity: sha512-Uo5MC5mfg4OM0jU3up66fmSn6/NE9INK+8/Vn/7sMVcdWg46zfbvvUSjD9EMonVqPi9fbrJH9SXHn48Tr1f2yA==} + '@changesets/pre@2.0.1': resolution: {integrity: sha512-vvBJ/If4jKM4tPz9JdY2kGOgWmCowUYOi5Ycv8dyLnEE8FgpYYUo1mgJZxcdtGGP3aG8rAQulGLyyXGSLkIMTQ==} + '@changesets/pre@2.0.2': + resolution: {integrity: sha512-HaL/gEyFVvkf9KFg6484wR9s0qjAXlZ8qWPDkTyKF6+zqjBe/I2mygg3MbpZ++hdi0ToqNUF8cjj7fBy0dg8Ug==} + '@changesets/read@0.6.1': resolution: {integrity: sha512-jYMbyXQk3nwP25nRzQQGa1nKLY0KfoOV7VLgwucI0bUO8t8ZLCr6LZmgjXsiKuRDc+5A6doKPr9w2d+FEJ55zQ==} + '@changesets/read@0.6.6': + resolution: {integrity: sha512-P5QaN9hJSQQKJShzzpBT13FzOSPyHbqdoIBUd2DJdgvnECCyO6LmAOWSV+O8se2TaZJVwSXjL+v9yhb+a9JeJg==} + '@changesets/should-skip-package@0.1.1': resolution: {integrity: sha512-H9LjLbF6mMHLtJIc/eHR9Na+MifJ3VxtgP/Y+XLn4BF7tDTEN1HNYtH6QMcjP1uxp9sjaFYmW8xqloaCi/ckTg==} + '@changesets/should-skip-package@0.1.2': + resolution: {integrity: sha512-qAK/WrqWLNCP22UDdBTMPH5f41elVDlsNyat180A33dWxuUDyNpg6fPi/FyTZwRriVjg0L8gnjJn2F9XAoF0qw==} + '@changesets/types@4.1.0': resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} '@changesets/types@6.0.0': resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==} + '@changesets/types@6.1.0': + resolution: {integrity: sha512-rKQcJ+o1nKNgeoYRHKOS07tAMNd3YSN0uHaJOZYjBAgxfV7TUE7JE+z4BzZdQwb5hKaYbayKN5KrYV7ODb2rAA==} + '@changesets/write@0.3.2': resolution: {integrity: sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==} + '@changesets/write@0.4.0': + resolution: {integrity: sha512-CdTLvIOPiCNuH71pyDu3rA+Q0n65cmAbXnwWH84rKGiFumFzkmHNT8KHTMEchcxN+Kl8I54xGUhJ7l3E7X396Q==} + '@colors/colors@1.5.0': resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} @@ -5175,6 +5221,10 @@ packages: resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} engines: {node: '>=8.6'} + enquirer@2.4.1: + resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} + engines: {node: '>=8.6'} + env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -6415,6 +6465,10 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true + js-yaml@4.1.1: + resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} + hasBin: true + jsbn@1.1.0: resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} @@ -8385,6 +8439,9 @@ packages: spawndamnit@2.0.0: resolution: {integrity: sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==} + spawndamnit@3.0.1: + resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} + spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} @@ -9777,6 +9834,22 @@ snapshots: '@bcoe/v8-coverage@1.0.2': {} + '@changesets/apply-release-plan@7.0.14': + dependencies: + '@changesets/config': 3.1.2 + '@changesets/get-version-range-type': 0.4.0 + '@changesets/git': 3.0.4 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + detect-indent: 6.1.0 + fs-extra: 7.0.1 + lodash.startcase: 4.4.0 + outdent: 0.5.0 + prettier: 2.8.8 + resolve-from: 5.0.0 + semver: 7.7.3 + '@changesets/apply-release-plan@7.0.5': dependencies: '@changesets/config': 3.0.3 @@ -9802,10 +9875,23 @@ snapshots: '@manypkg/get-packages': 1.1.3 semver: 7.7.2 + '@changesets/assemble-release-plan@6.0.9': + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.3 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + semver: 7.7.3 + '@changesets/changelog-git@0.2.0': dependencies: '@changesets/types': 6.0.0 + '@changesets/changelog-git@0.2.1': + dependencies: + '@changesets/types': 6.1.0 + '@changesets/cli@2.27.8': dependencies: '@changesets/apply-release-plan': 7.0.5 @@ -9839,6 +9925,39 @@ snapshots: spawndamnit: 2.0.0 term-size: 2.2.1 + '@changesets/cli@2.29.8': + dependencies: + '@changesets/apply-release-plan': 7.0.14 + '@changesets/assemble-release-plan': 6.0.9 + '@changesets/changelog-git': 0.2.1 + '@changesets/config': 3.1.2 + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.3 + '@changesets/get-release-plan': 4.0.14 + '@changesets/git': 3.0.4 + '@changesets/logger': 0.1.1 + '@changesets/pre': 2.0.2 + '@changesets/read': 0.6.6 + '@changesets/should-skip-package': 0.1.2 + '@changesets/types': 6.1.0 + '@changesets/write': 0.4.0 + '@inquirer/external-editor': 1.0.3(@types/node@18.19.39) + '@manypkg/get-packages': 1.1.3 + ansi-colors: 4.1.3 + ci-info: 3.8.0 + enquirer: 2.4.1 + fs-extra: 7.0.1 + mri: 1.2.0 + p-limit: 2.3.0 + package-manager-detector: 0.2.0 + picocolors: 1.1.1 + resolve-from: 5.0.0 + semver: 7.7.3 + spawndamnit: 3.0.1 + term-size: 2.2.1 + transitivePeerDependencies: + - '@types/node' + '@changesets/config@3.0.3': dependencies: '@changesets/errors': 0.2.0 @@ -9849,6 +9968,16 @@ snapshots: fs-extra: 7.0.1 micromatch: 4.0.8 + '@changesets/config@3.1.2': + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/get-dependents-graph': 2.1.3 + '@changesets/logger': 0.1.1 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + micromatch: 4.0.8 + '@changesets/errors@0.2.0': dependencies: extendable-error: 0.1.7 @@ -9860,6 +9989,22 @@ snapshots: picocolors: 1.1.1 semver: 7.7.2 + '@changesets/get-dependents-graph@2.1.3': + dependencies: + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + picocolors: 1.1.1 + semver: 7.7.3 + + '@changesets/get-release-plan@4.0.14': + dependencies: + '@changesets/assemble-release-plan': 6.0.9 + '@changesets/config': 3.1.2 + '@changesets/pre': 2.0.2 + '@changesets/read': 0.6.6 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + '@changesets/get-release-plan@4.0.4': dependencies: '@changesets/assemble-release-plan': 6.0.4 @@ -9879,6 +10024,14 @@ snapshots: micromatch: 4.0.8 spawndamnit: 2.0.0 + '@changesets/git@3.0.4': + dependencies: + '@changesets/errors': 0.2.0 + '@manypkg/get-packages': 1.1.3 + is-subdir: 1.2.0 + micromatch: 4.0.8 + spawndamnit: 3.0.1 + '@changesets/logger@0.1.1': dependencies: picocolors: 1.1.1 @@ -9888,6 +10041,11 @@ snapshots: '@changesets/types': 6.0.0 js-yaml: 3.14.1 + '@changesets/parse@0.4.2': + dependencies: + '@changesets/types': 6.1.0 + js-yaml: 4.1.1 + '@changesets/pre@2.0.1': dependencies: '@changesets/errors': 0.2.0 @@ -9895,6 +10053,13 @@ snapshots: '@manypkg/get-packages': 1.1.3 fs-extra: 7.0.1 + '@changesets/pre@2.0.2': + dependencies: + '@changesets/errors': 0.2.0 + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + fs-extra: 7.0.1 + '@changesets/read@0.6.1': dependencies: '@changesets/git': 3.0.1 @@ -9905,15 +10070,32 @@ snapshots: p-filter: 2.1.0 picocolors: 1.1.1 + '@changesets/read@0.6.6': + dependencies: + '@changesets/git': 3.0.4 + '@changesets/logger': 0.1.1 + '@changesets/parse': 0.4.2 + '@changesets/types': 6.1.0 + fs-extra: 7.0.1 + p-filter: 2.1.0 + picocolors: 1.1.1 + '@changesets/should-skip-package@0.1.1': dependencies: '@changesets/types': 6.0.0 '@manypkg/get-packages': 1.1.3 + '@changesets/should-skip-package@0.1.2': + dependencies: + '@changesets/types': 6.1.0 + '@manypkg/get-packages': 1.1.3 + '@changesets/types@4.1.0': {} '@changesets/types@6.0.0': {} + '@changesets/types@6.1.0': {} + '@changesets/write@0.3.2': dependencies: '@changesets/types': 6.0.0 @@ -9921,6 +10103,13 @@ snapshots: human-id: 1.0.2 prettier: 2.8.8 + '@changesets/write@0.4.0': + dependencies: + '@changesets/types': 6.1.0 + fs-extra: 7.0.1 + human-id: 4.1.3 + prettier: 2.8.8 + '@colors/colors@1.5.0': {} '@colors/colors@1.6.0': {} @@ -10010,11 +10199,12 @@ snapshots: '@fluid-private/changelog-generator-wrapper@file:../../packages/tools/changelog-generator-wrapper': dependencies: - '@changesets/cli': 2.27.8 + '@changesets/cli': 2.29.8 '@changesets/types': 6.0.0 - changesets-format-with-issue-links: 0.3.0(@changesets/cli@2.27.8) + changesets-format-with-issue-links: 0.3.0(@changesets/cli@2.29.8) typescript: 5.4.5 transitivePeerDependencies: + - '@types/node' - supports-color '@fluid-tools/build-cli@0.61.0(@types/node@18.19.39)(encoding@0.1.13)(typescript@5.1.6)': @@ -10365,7 +10555,7 @@ snapshots: '@types/semver': 7.7.0 assert: 2.1.0 async: 3.2.6 - axios: 1.12.2 + axios: 1.12.2(debug@4.3.4) buffer: 6.0.3 double-ended-queue: 2.1.0-0 events: 3.3.0 @@ -11480,7 +11670,7 @@ snapshots: '@pm2/pm2-version-check@1.0.4': dependencies: - debug: 4.4.1 + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -12230,7 +12420,7 @@ snapshots: '@typescript-eslint/types': 8.46.4 '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.1.6) '@typescript-eslint/visitor-keys': 8.46.4 - debug: 4.4.1 + debug: 4.4.3(supports-color@8.1.1) eslint: 8.57.1 typescript: 5.1.6 transitivePeerDependencies: @@ -12240,7 +12430,7 @@ snapshots: dependencies: '@typescript-eslint/tsconfig-utils': 8.46.4(typescript@5.1.6) '@typescript-eslint/types': 8.46.4 - debug: 4.4.1 + debug: 4.4.3(supports-color@8.1.1) typescript: 5.1.6 transitivePeerDependencies: - supports-color @@ -12268,7 +12458,7 @@ snapshots: dependencies: '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.1.6) '@typescript-eslint/utils': 7.18.0(eslint@8.57.1)(typescript@5.1.6) - debug: 4.4.1 + debug: 4.4.3(supports-color@8.1.1) eslint: 8.57.1 ts-api-utils: 1.4.3(typescript@5.1.6) optionalDependencies: @@ -12288,7 +12478,7 @@ snapshots: dependencies: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - debug: 4.4.1 + debug: 4.4.3(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.5 @@ -12303,7 +12493,7 @@ snapshots: dependencies: '@typescript-eslint/types': 8.31.1 '@typescript-eslint/visitor-keys': 8.31.1 - debug: 4.4.1 + debug: 4.4.3(supports-color@8.1.1) fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.5 @@ -12319,7 +12509,7 @@ snapshots: '@typescript-eslint/tsconfig-utils': 8.46.4(typescript@5.1.6) '@typescript-eslint/types': 8.46.4 '@typescript-eslint/visitor-keys': 8.46.4 - debug: 4.4.1 + debug: 4.4.3(supports-color@8.1.1) fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.5 @@ -12658,13 +12848,13 @@ snapshots: agent-base@7.1.1: dependencies: - debug: 4.4.1 + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color agentkeepalive@4.3.0: dependencies: - debug: 4.3.4 + debug: 4.4.3(supports-color@8.1.1) depd: 2.0.0 humanize-ms: 1.2.1 transitivePeerDependencies: @@ -12911,14 +13101,6 @@ snapshots: fast-deep-equal: 3.1.3 is-buffer: 2.0.5 - axios@1.12.2: - dependencies: - follow-redirects: 1.15.6(debug@4.3.4) - form-data: 4.0.4 - proxy-from-env: 1.1.0 - transitivePeerDependencies: - - debug - axios@1.12.2(debug@4.3.4): dependencies: follow-redirects: 1.15.6(debug@4.3.4) @@ -13253,6 +13435,14 @@ snapshots: transitivePeerDependencies: - supports-color + changesets-format-with-issue-links@0.3.0(@changesets/cli@2.29.8): + dependencies: + '@changesets/cli': 2.29.8 + gitlog: 4.0.8 + lodash: 4.17.21 + transitivePeerDependencies: + - supports-color + character-entities@2.0.2: {} chardet@0.7.0: {} @@ -13877,6 +14067,11 @@ snapshots: dependencies: ansi-colors: 4.1.3 + enquirer@2.4.1: + dependencies: + ansi-colors: 4.1.3 + strip-ansi: 6.0.1 + env-paths@2.2.1: {} envinfo@7.9.0: {} @@ -14625,7 +14820,7 @@ snapshots: dependencies: basic-ftp: 5.0.4 data-uri-to-buffer: 6.0.1 - debug: 4.4.1 + debug: 4.4.3(supports-color@8.1.1) fs-extra: 8.1.0 transitivePeerDependencies: - supports-color @@ -14862,7 +15057,7 @@ snapshots: http-proxy-agent@7.0.0: dependencies: agent-base: 7.1.1 - debug: 4.4.1 + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -14881,7 +15076,7 @@ snapshots: https-proxy-agent@7.0.5: dependencies: agent-base: 7.1.1 - debug: 4.4.1 + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -15331,6 +15526,10 @@ snapshots: dependencies: argparse: 2.0.1 + js-yaml@4.1.1: + dependencies: + argparse: 2.0.1 + jsbn@1.1.0: {} jsdoc-type-pratt-parser@5.1.1: {} @@ -16652,7 +16851,7 @@ snapshots: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.1 - debug: 4.4.1 + debug: 4.4.3(supports-color@8.1.1) get-uri: 6.0.2 http-proxy-agent: 7.0.0 https-proxy-agent: 7.0.5 @@ -16834,7 +17033,7 @@ snapshots: pm2-axon-rpc@0.7.1: dependencies: - debug: 4.4.1 + debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -16842,7 +17041,7 @@ snapshots: dependencies: amp: 0.3.1 amp-message: 0.1.2 - debug: 4.4.1 + debug: 4.4.3(supports-color@8.1.1) escape-string-regexp: 4.0.0 transitivePeerDependencies: - supports-color @@ -16859,7 +17058,7 @@ snapshots: pm2-sysmonit@1.2.8: dependencies: async: 3.2.6 - debug: 4.4.1 + debug: 4.4.3(supports-color@8.1.1) pidusage: 2.0.21 systeminformation: 5.27.11 tx2: 1.0.5 @@ -16987,7 +17186,7 @@ snapshots: proxy-agent@6.3.1: dependencies: agent-base: 7.1.1 - debug: 4.4.1 + debug: 4.4.3(supports-color@8.1.1) http-proxy-agent: 7.0.0 https-proxy-agent: 7.0.5 lru-cache: 7.18.3 @@ -17296,7 +17495,7 @@ snapshots: require-in-the-middle@5.2.0: dependencies: - debug: 4.4.1 + debug: 4.4.3(supports-color@8.1.1) module-details-from-path: 1.0.3 resolve: 1.22.10 transitivePeerDependencies: @@ -17729,7 +17928,7 @@ snapshots: socks-proxy-agent@8.0.4: dependencies: agent-base: 7.1.1 - debug: 4.4.1 + debug: 4.4.3(supports-color@8.1.1) socks: 2.8.3 transitivePeerDependencies: - supports-color @@ -17800,6 +17999,11 @@ snapshots: cross-spawn: 5.1.0 signal-exit: 3.0.7 + spawndamnit@3.0.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 @@ -17876,7 +18080,7 @@ snapshots: dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 string-width@7.2.0: dependencies: @@ -18781,7 +18985,7 @@ snapshots: dependencies: ansi-styles: 6.2.1 string-width: 5.1.2 - strip-ansi: 7.1.0 + strip-ansi: 7.1.2 wrap-ansi@9.0.2: dependencies: