{
  "version": 3,
  "sources": ["../src/TestServer.ts"],
  "sourcesContent": ["import './Room.ext.ts';\n\nimport { Server, Room, matchMaker, type SDKTypes } from \"@colyseus/core\";\nimport { ColyseusSDK, type Room as SDKRoom, type InferRoomConstructor } from \"@colyseus/sdk\";\nimport * as httpie from \"httpie\";\n\nexport class ColyseusTestServer<ServerType extends SDKTypes = any> {\n  public server: Server;\n  public sdk: ColyseusSDK<ServerType>;\n\n  //\n  // TODO: deprecate this on Colyseus 1.0.\n  // Use `sdk.http` instead (which uses the auth token automatically)\n  //\n  public http: {\n    get: typeof httpie.get,\n    post: typeof httpie.post,\n    patch: typeof httpie.patch,\n    delete: typeof httpie.del,\n    put: typeof httpie.put,\n  };\n\n  constructor(server: Server) {\n    this.server = server;\n\n    const hostname = \"127.0.0.1\";\n    const port = server['port'];\n    this.sdk = new ColyseusSDK<ServerType>(`ws://${hostname}:${port}`);\n\n    const httpEndpoint = `http://${hostname}:${port}`;\n    this.http = {\n      ['get']: (segments, opts) => httpie.get(`${httpEndpoint}${segments}`, opts),\n      ['post']: (segments, opts) => httpie.post(`${httpEndpoint}${segments}`, opts),\n      ['patch']: (segments, opts) => httpie.patch(`${httpEndpoint}${segments}`, opts),\n      ['delete']: (segments, opts) => httpie.del(`${httpEndpoint}${segments}`, opts),\n      ['put']: (segments, opts) => httpie.put(`${httpEndpoint}${segments}`, opts),\n    };\n  }\n\n  // Overload: Use room name from ServerType to infer room type\n  async createRoom<R extends keyof ServerType['~rooms']>(\n    roomName: R,\n    clientOptions?: Parameters<ServerType['~rooms'][R]['~room']['onJoin']>[1]\n  ): Promise<ServerType['~rooms'][R]['~room']>;\n  // Overload: Pass Room type directly\n  async createRoom<R extends Room>(\n    roomName: string,\n    clientOptions?: any\n  ): Promise<R>;\n  // Overload: Pass State and Metadata type directly\n  async createRoom<State extends object = any, Metadata = any>( // TODO: deprecate on v1.0\n    roomName: string,\n    clientOptions?: any\n  ): Promise<Room<{ state: State, metadata: Metadata }>>;\n  // Implementation\n  async createRoom(roomName: string, clientOptions: any = {}) {\n    const room = await matchMaker.createRoom(roomName, clientOptions);\n    return this.getRoomById(room.roomId);\n  }\n\n  async connectTo<RoomInstance extends Room>(\n    room: RoomInstance,\n    clientOptions: any = {},\n  ): Promise<SDKRoom<RoomInstance, RoomInstance['state']>> {\n    const client = await this.sdk.joinById(room.roomId, clientOptions);\n\n    // otherwise `client.state` stays empty for a round-trip, and every\n    // assertion on it races the room's patch interval\n    await client.waitForInitialState();\n\n    return client;\n  }\n\n  // Overload: Pass Room type directly\n  getRoomById<T extends Room>(roomId: string): T;\n  // Overload: Pass State and Metadata type directly\n  getRoomById<State extends object = any, Metadata = any>(roomId: string): Room<{ state: State, metadata: Metadata }>;\n  // Implementation\n  getRoomById(roomId: string) {\n    return matchMaker.getLocalRoomById(roomId);\n  }\n\n  async cleanup() {\n    // ensure no rooms are still alive\n    await Promise.all(matchMaker.disconnectAll());\n    await this.sdk.auth.signOut();\n\n    const driver = this.server['driver'];\n    if (driver) { await driver.clear(); }\n  }\n\n  async shutdown() {\n    await this.server.gracefullyShutdown(false);\n  }\n\n}\n"],
  "mappings": ";AAAA,OAAO;AAEP,SAAuB,kBAAiC;AACxD,SAAS,mBAAoE;AAC7E,YAAY,YAAY;AAEjB,IAAM,qBAAN,MAA4D;AAAA,EAgBjE,YAAY,QAAgB;AAC1B,SAAK,SAAS;AAEd,UAAM,WAAW;AACjB,UAAM,OAAO,OAAO,MAAM;AAC1B,SAAK,MAAM,IAAI,YAAwB,QAAQ,QAAQ,IAAI,IAAI,EAAE;AAEjE,UAAM,eAAe,UAAU,QAAQ,IAAI,IAAI;AAC/C,SAAK,OAAO;AAAA,MACV,CAAC,KAAK,GAAG,CAAC,UAAU,SAAgB,WAAI,GAAG,YAAY,GAAG,QAAQ,IAAI,IAAI;AAAA,MAC1E,CAAC,MAAM,GAAG,CAAC,UAAU,SAAgB,YAAK,GAAG,YAAY,GAAG,QAAQ,IAAI,IAAI;AAAA,MAC5E,CAAC,OAAO,GAAG,CAAC,UAAU,SAAgB,aAAM,GAAG,YAAY,GAAG,QAAQ,IAAI,IAAI;AAAA,MAC9E,CAAC,QAAQ,GAAG,CAAC,UAAU,SAAgB,WAAI,GAAG,YAAY,GAAG,QAAQ,IAAI,IAAI;AAAA,MAC7E,CAAC,KAAK,GAAG,CAAC,UAAU,SAAgB,WAAI,GAAG,YAAY,GAAG,QAAQ,IAAI,IAAI;AAAA,IAC5E;AAAA,EACF;AAAA;AAAA,EAkBA,MAAM,WAAW,UAAkB,gBAAqB,CAAC,GAAG;AAC1D,UAAM,OAAO,MAAM,WAAW,WAAW,UAAU,aAAa;AAChE,WAAO,KAAK,YAAY,KAAK,MAAM;AAAA,EACrC;AAAA,EAEA,MAAM,UACJ,MACA,gBAAqB,CAAC,GACiC;AACvD,UAAM,SAAS,MAAM,KAAK,IAAI,SAAS,KAAK,QAAQ,aAAa;AAIjE,UAAM,OAAO,oBAAoB;AAEjC,WAAO;AAAA,EACT;AAAA;AAAA,EAOA,YAAY,QAAgB;AAC1B,WAAO,WAAW,iBAAiB,MAAM;AAAA,EAC3C;AAAA,EAEA,MAAM,UAAU;AAEd,UAAM,QAAQ,IAAI,WAAW,cAAc,CAAC;AAC5C,UAAM,KAAK,IAAI,KAAK,QAAQ;AAE5B,UAAM,SAAS,KAAK,OAAO,QAAQ;AACnC,QAAI,QAAQ;AAAE,YAAM,OAAO,MAAM;AAAA,IAAG;AAAA,EACtC;AAAA,EAEA,MAAM,WAAW;AACf,UAAM,KAAK,OAAO,mBAAmB,KAAK;AAAA,EAC5C;AAEF;",
  "names": []
}
