@colyseus/sdk 0.17.8 → 0.17.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/build/3rd_party/discord.cjs +1 -1
  2. package/build/3rd_party/discord.mjs +1 -1
  3. package/build/Auth.cjs +1 -1
  4. package/build/Auth.mjs +1 -1
  5. package/build/Client.cjs +1 -1
  6. package/build/Client.cjs.map +1 -1
  7. package/build/Client.d.ts +6 -6
  8. package/build/Client.mjs +1 -1
  9. package/build/Client.mjs.map +1 -1
  10. package/build/Connection.cjs +1 -1
  11. package/build/Connection.mjs +1 -1
  12. package/build/HTTP.cjs +17 -2
  13. package/build/HTTP.cjs.map +1 -1
  14. package/build/HTTP.d.ts +3 -0
  15. package/build/HTTP.mjs +17 -2
  16. package/build/HTTP.mjs.map +1 -1
  17. package/build/Protocol.cjs +1 -1
  18. package/build/Protocol.mjs +1 -1
  19. package/build/Room.cjs +1 -1
  20. package/build/Room.cjs.map +1 -1
  21. package/build/Room.d.ts +19 -3
  22. package/build/Room.mjs +1 -1
  23. package/build/Room.mjs.map +1 -1
  24. package/build/Storage.cjs +1 -1
  25. package/build/Storage.mjs +1 -1
  26. package/build/core/nanoevents.cjs +1 -1
  27. package/build/core/nanoevents.mjs +1 -1
  28. package/build/core/signal.cjs +1 -1
  29. package/build/core/signal.mjs +1 -1
  30. package/build/core/utils.cjs +1 -1
  31. package/build/core/utils.cjs.map +1 -1
  32. package/build/core/utils.d.ts +11 -0
  33. package/build/core/utils.mjs +1 -1
  34. package/build/core/utils.mjs.map +1 -1
  35. package/build/errors/Errors.cjs +1 -1
  36. package/build/errors/Errors.mjs +1 -1
  37. package/build/index.cjs +1 -1
  38. package/build/index.cjs.map +1 -1
  39. package/build/index.d.ts +1 -0
  40. package/build/index.mjs +1 -1
  41. package/build/index.mjs.map +1 -1
  42. package/build/legacy.cjs +1 -1
  43. package/build/legacy.mjs +1 -1
  44. package/build/serializer/NoneSerializer.cjs +1 -1
  45. package/build/serializer/NoneSerializer.mjs +1 -1
  46. package/build/serializer/SchemaSerializer.cjs +1 -1
  47. package/build/serializer/SchemaSerializer.mjs +1 -1
  48. package/build/serializer/Serializer.cjs +1 -1
  49. package/build/serializer/Serializer.mjs +1 -1
  50. package/build/transport/H3Transport.cjs +1 -1
  51. package/build/transport/H3Transport.mjs +1 -1
  52. package/build/transport/WebSocketTransport.cjs +1 -1
  53. package/build/transport/WebSocketTransport.mjs +1 -1
  54. package/dist/colyseus-cocos-creator.js +16 -2
  55. package/dist/colyseus-cocos-creator.js.map +1 -1
  56. package/dist/colyseus.js +16 -2
  57. package/dist/colyseus.js.map +1 -1
  58. package/dist/debug.js +1 -1
  59. package/package.json +1 -1
  60. package/src/Client.ts +20 -20
  61. package/src/HTTP.ts +18 -1
  62. package/src/Room.ts +25 -6
  63. package/src/core/utils.ts +18 -1
  64. package/src/index.ts +1 -0
@@ -3,7 +3,7 @@
3
3
  // This software is released under the MIT License.
4
4
  // https://opensource.org/license/MIT
5
5
  //
6
- // colyseus.js@0.17.8
6
+ // colyseus.js@0.17.11
7
7
  'use strict';
8
8
 
9
9
  /**
@@ -3,7 +3,7 @@
3
3
  // This software is released under the MIT License.
4
4
  // https://opensource.org/license/MIT
5
5
  //
6
- // colyseus.js@0.17.8
6
+ // colyseus.js@0.17.11
7
7
  /**
8
8
  * Discord Embedded App SDK
9
9
  * https://github.com/colyseus/colyseus/issues/707
package/build/Auth.cjs CHANGED
@@ -3,7 +3,7 @@
3
3
  // This software is released under the MIT License.
4
4
  // https://opensource.org/license/MIT
5
5
  //
6
- // colyseus.js@0.17.8
6
+ // colyseus.js@0.17.11
7
7
  'use strict';
8
8
 
9
9
  var tslib = require('tslib');
package/build/Auth.mjs CHANGED
@@ -3,7 +3,7 @@
3
3
  // This software is released under the MIT License.
4
4
  // https://opensource.org/license/MIT
5
5
  //
6
- // colyseus.js@0.17.8
6
+ // colyseus.js@0.17.11
7
7
  import { getItem, removeItem, setItem } from './Storage.mjs';
8
8
  import { createNanoEvents } from './core/nanoevents.mjs';
9
9
 
package/build/Client.cjs CHANGED
@@ -3,7 +3,7 @@
3
3
  // This software is released under the MIT License.
4
4
  // https://opensource.org/license/MIT
5
5
  //
6
- // colyseus.js@0.17.8
6
+ // colyseus.js@0.17.11
7
7
  'use strict';
8
8
 
9
9
  var tslib = require('tslib');
@@ -1 +1 @@
1
- {"version":3,"file":"Client.cjs","sources":["../src/Client.ts"],"sourcesContent":["import type { matchMaker, SDKTypes, Room as ServerRoom } from '@colyseus/core';\n\nimport { CloseCode, ServerError } from './errors/Errors.ts';\nimport { Room } from './Room.ts';\nimport { SchemaConstructor } from './serializer/SchemaSerializer.ts';\nimport { HTTP } from './HTTP.ts';\nimport { Auth } from './Auth.ts';\nimport { Protocol } from './Protocol.ts';\nimport { Connection } from './Connection.ts';\nimport { discordURLBuilder } from './3rd_party/discord.ts';\n\nexport type JoinOptions = any;\nexport type ISeatReservation = matchMaker.ISeatReservation;\n\nexport class MatchMakeError extends Error {\n code: number;\n constructor(message: string, code: number) {\n super(message);\n this.code = code;\n this.name = \"MatchMakeError\";\n Object.setPrototypeOf(this, MatchMakeError.prototype);\n }\n}\n\n// - React Native does not provide `window.location`\n// - Cocos Creator (Native) does not provide `window.location.hostname`\nconst DEFAULT_ENDPOINT = (typeof (window) !== \"undefined\" && typeof (window?.location?.hostname) !== \"undefined\")\n ? `${window.location.protocol.replace(\"http\", \"ws\")}//${window.location.hostname}${(window.location.port && `:${window.location.port}`)}`\n : \"ws://127.0.0.1:2567\";\n\nexport interface EndpointSettings {\n hostname: string,\n secure: boolean,\n port?: number,\n pathname?: string,\n searchParams?: string,\n protocol?: \"ws\" | \"h3\";\n}\n\nexport interface ClientOptions {\n headers?: { [id: string]: string };\n urlBuilder?: (url: URL) => string;\n protocol?: \"ws\" | \"h3\";\n}\n\nexport interface LatencyOptions {\n /** \"ws\" for WebSocket, \"h3\" for WebTransport (default: \"ws\") */\n protocol?: \"ws\" | \"h3\";\n /** Number of pings to send (default: 1). Returns the average latency when > 1. */\n pingCount?: number;\n}\n\nexport class ColyseusSDK<ServerType extends SDKTypes = any, UserData = any> {\n static VERSION = \"0.17\";\n\n /**\n * The HTTP client to make requests to the server.\n */\n public http: HTTP<ServerType['~routes']>;\n\n /**\n * The authentication module to authenticate into requests and rooms.\n */\n public auth: Auth<UserData>;\n\n /**\n * The settings used to connect to the server.\n */\n public settings: EndpointSettings;\n\n protected urlBuilder: (url: URL) => string;\n\n constructor(\n settings: string | EndpointSettings = DEFAULT_ENDPOINT,\n options?: ClientOptions,\n ) {\n if (typeof (settings) === \"string\") {\n\n //\n // endpoint by url\n //\n const url = (settings.startsWith(\"/\"))\n ? new URL(settings, DEFAULT_ENDPOINT)\n : new URL(settings);\n\n const secure = (url.protocol === \"https:\" || url.protocol === \"wss:\");\n const port = Number(url.port || (secure ? 443 : 80));\n\n this.settings = {\n hostname: url.hostname,\n pathname: url.pathname,\n port,\n secure,\n searchParams: url.searchParams.toString() || undefined,\n };\n\n } else {\n //\n // endpoint by settings\n //\n if (settings.port === undefined) {\n settings.port = (settings.secure) ? 443 : 80;\n }\n if (settings.pathname === undefined) {\n settings.pathname = \"\";\n }\n this.settings = settings;\n }\n\n // make sure pathname does not end with \"/\"\n if (this.settings.pathname.endsWith(\"/\")) {\n this.settings.pathname = this.settings.pathname.slice(0, -1);\n }\n\n // specify room connection protocol if provided\n if (options?.protocol) {\n this.settings.protocol = options.protocol;\n }\n\n this.http = new HTTP(this, {\n headers: options?.headers || {},\n });\n this.auth = new Auth(this.http);\n\n this.urlBuilder = options?.urlBuilder;\n\n //\n // Discord Embedded SDK requires a custom URL builder\n //\n if (\n !this.urlBuilder &&\n typeof (window) !== \"undefined\" &&\n window?.location?.hostname?.includes(\"discordsays.com\")\n ) {\n this.urlBuilder = discordURLBuilder;\n console.log(\"Colyseus SDK: Discord Embedded SDK detected. Using custom URL builder.\");\n }\n }\n\n /**\n * Select the endpoint with the lowest latency.\n * @param endpoints Array of endpoints to select from.\n * @param options Client options.\n * @param latencyOptions Latency measurement options (protocol, pingCount).\n * @returns The client with the lowest latency.\n */\n static async selectByLatency<ServerType extends SDKTypes = any, UserData = any>(\n endpoints: Array<string | EndpointSettings>,\n options?: ClientOptions,\n latencyOptions: LatencyOptions = {}\n ) {\n const clients = endpoints.map(endpoint => new ColyseusSDK<ServerType, UserData>(endpoint, options));\n\n const latencies = (await Promise.allSettled(clients.map((client, index) => client.getLatency(latencyOptions).then(latency => {\n const settings = clients[index].settings;\n console.log(`🛜 Endpoint Latency: ${latency}ms - ${settings.hostname}:${settings.port}${settings.pathname}`);\n return [index, latency]\n }))))\n .filter((result) => result.status === 'fulfilled')\n .map(result => result.value);\n\n if (latencies.length === 0) {\n throw new Error('All endpoints failed to respond');\n }\n\n return clients[latencies.sort((a, b) => a[1] - b[1])[0][0]];\n }\n\n // Overload: Use room name from ServerType to infer room type\n public async joinOrCreate<R extends keyof ServerType['~rooms']>(\n roomName: R,\n options?: Parameters<ServerType['~rooms'][R]['~room']['prototype']['onJoin']>[1],\n rootSchema?: SchemaConstructor<ServerType>\n ): Promise<Room<ServerType['~rooms'][R]['~room']>>\n // Overload: Pass RoomType directly to extract state\n public async joinOrCreate<RoomType extends typeof ServerRoom>(\n roomName: string,\n options?: Parameters<RoomType['prototype']['onJoin']>[1],\n rootSchema?: SchemaConstructor<RoomType['prototype']['state']>\n ): Promise<Room<RoomType>>\n // Overload: Pass State type directly\n public async joinOrCreate<State = any>(\n roomName: string,\n options?: JoinOptions,\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<any, State>>\n // Implementation\n public async joinOrCreate<T = any>(roomName: string, options: JoinOptions = {}, rootSchema?: SchemaConstructor<T>) {\n return await this.createMatchMakeRequest<T>('joinOrCreate', roomName, options, rootSchema);\n }\n\n // Overload: Use room name from ServerType to infer room type\n public async create<R extends keyof ServerType['~rooms']>(\n roomName: R,\n options?: Parameters<ServerType['~rooms'][R]['~room']['prototype']['onJoin']>[1],\n rootSchema?: SchemaConstructor<ServerType>\n ): Promise<Room<ServerType['~rooms'][R]['~room']>>\n // Overload: Pass RoomType directly to extract state\n public async create<RoomType extends typeof ServerRoom>(\n roomName: string,\n options?: Parameters<RoomType['prototype']['onJoin']>[1],\n rootSchema?: SchemaConstructor<RoomType['prototype']['state']>\n ): Promise<Room<RoomType>>\n // Overload: Pass State type directly\n public async create<State = any>(\n roomName: string,\n options?: JoinOptions,\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<any, State>>\n // Implementation\n public async create<T = any>(roomName: string, options: JoinOptions = {}, rootSchema?: SchemaConstructor<T>) {\n return await this.createMatchMakeRequest<T>('create', roomName, options, rootSchema);\n }\n\n // Overload: Use room name from ServerType to infer room type\n public async join<R extends keyof ServerType['~rooms']>(\n roomName: R,\n options?: Parameters<ServerType['~rooms'][R]['~room']['prototype']['onJoin']>[1],\n rootSchema?: SchemaConstructor<ServerType>\n ): Promise<Room<ServerType['~rooms'][R]['~room']>>\n // Overload: Pass RoomType directly to extract state\n public async join<RoomType extends typeof ServerRoom>(\n roomName: string,\n options?: Parameters<RoomType['prototype']['onJoin']>[1],\n rootSchema?: SchemaConstructor<RoomType['prototype']['state']>\n ): Promise<Room<RoomType>>\n // Overload: Pass State type directly\n public async join<State = any>(\n roomName: string,\n options?: JoinOptions,\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<any, State>>\n // Implementation\n public async join<T = any>(roomName: string, options: JoinOptions = {}, rootSchema?: SchemaConstructor<T>) {\n return await this.createMatchMakeRequest<T>('join', roomName, options, rootSchema);\n }\n\n // Overload: Use room name from ServerType to infer room type\n public async joinById<R extends keyof ServerType['~rooms']>(\n roomName: R,\n options?: Parameters<ServerType['~rooms'][R]['~room']['prototype']['onJoin']>[1],\n rootSchema?: SchemaConstructor<ServerType>\n ): Promise<Room<ServerType['~rooms'][R]['~room']>>\n // Overload: Pass RoomType directly to extract state\n public async joinById<RoomType extends typeof ServerRoom>(\n roomId: string,\n options?: Parameters<RoomType['prototype']['onJoin']>[1],\n rootSchema?: SchemaConstructor<RoomType['prototype']['state']>\n ): Promise<Room<RoomType>>\n // Overload: Pass State type directly\n public async joinById<State = any>(\n roomId: string,\n options?: JoinOptions,\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<any, State>>\n // Implementation\n public async joinById<T = any>(roomId: string, options: JoinOptions = {}, rootSchema?: SchemaConstructor<T>) {\n return await this.createMatchMakeRequest<T>('joinById', roomId, options, rootSchema);\n }\n\n /**\n * Re-establish connection with a room this client was previously connected to.\n *\n * @param reconnectionToken The `room.reconnectionToken` from previously connected room.\n * @param rootSchema (optional) Concrete root schema definition\n * @returns Promise<Room>\n */\n // Overload: Use room name from ServerType to infer room type\n public async reconnect<R extends keyof ServerType['~rooms']>(reconnectionToken: string, roomName?: R): Promise<Room<ServerType['~rooms'][R]['~room']>>\n // Overload: Pass RoomType directly to extract state\n public async reconnect<RoomType extends typeof ServerRoom>(\n reconnectionToken: string,\n rootSchema?: SchemaConstructor<RoomType['prototype']['state']>\n ): Promise<Room<RoomType>>\n // Overload: Pass State type directly\n public async reconnect<State = any>(\n reconnectionToken: string,\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<any, State>>\n // Implementation\n public async reconnect<T = any>(reconnectionToken: string, rootSchema?: SchemaConstructor<T>) {\n if (typeof (reconnectionToken) === \"string\" && typeof (rootSchema) === \"string\") {\n throw new Error(\"DEPRECATED: .reconnect() now only accepts 'reconnectionToken' as argument.\\nYou can get this token from previously connected `room.reconnectionToken`\");\n }\n const [roomId, token] = reconnectionToken.split(\":\");\n\t\tif (!roomId || !token) {\n\t\t\tthrow new Error(\"Invalid reconnection token format.\\nThe format should be roomId:reconnectionToken\");\n\t\t}\n return await this.createMatchMakeRequest<T>('reconnect', roomId, { reconnectionToken: token }, rootSchema);\n }\n\n public async consumeSeatReservation<T>(\n response: ISeatReservation,\n rootSchema?: SchemaConstructor<T>\n ): Promise<Room<any, T>> {\n const room = this.createRoom<T>(response.name, rootSchema);\n room.roomId = response.roomId;\n room.sessionId = response.sessionId;\n\n const options: any = { sessionId: room.sessionId };\n\n // forward \"reconnection token\" in case of reconnection.\n if (response.reconnectionToken) {\n options.reconnectionToken = response.reconnectionToken;\n }\n\n room.connect(\n this.buildEndpoint(response, options),\n response,\n this.http.options.headers\n );\n\n return new Promise((resolve, reject) => {\n const onError = (code, message) => reject(new ServerError(code, message));\n room.onError.once(onError);\n\n room['onJoin'].once(() => {\n room.onError.remove(onError);\n resolve(room);\n });\n });\n }\n\n /**\n * Create a new connection with the server, and measure the latency.\n * @param options Latency measurement options (protocol, pingCount).\n */\n public getLatency(options: LatencyOptions = {}): Promise<number> {\n const protocol = options.protocol ?? \"ws\";\n const pingCount = options.pingCount ?? 1;\n\n return new Promise<number>((resolve, reject) => {\n const conn = new Connection(protocol);\n const latencies: number[] = [];\n let pingStart = 0;\n\n conn.events.onopen = () => {\n pingStart = Date.now();\n conn.send(new Uint8Array([Protocol.PING]));\n };\n\n conn.events.onmessage = (_: MessageEvent) => {\n latencies.push(Date.now() - pingStart);\n\n if (latencies.length < pingCount) {\n // Send another ping\n pingStart = Date.now();\n conn.send(new Uint8Array([Protocol.PING]));\n } else {\n // Done, calculate average and close\n conn.close();\n const average = latencies.reduce((sum, l) => sum + l, 0) / latencies.length;\n resolve(average);\n }\n };\n\n conn.events.onerror = (event: ErrorEvent) => {\n reject(new ServerError(CloseCode.ABNORMAL_CLOSURE, `Failed to get latency: ${event.message}`));\n };\n\n conn.connect(this.getHttpEndpoint());\n });\n }\n\n protected async createMatchMakeRequest<T>(\n method: string,\n roomName: string,\n options: JoinOptions = {},\n rootSchema?: SchemaConstructor<T>,\n ) {\n const httpResponse = await (this.http as HTTP<any>).post(`/matchmake/${method}/${roomName}`, {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n },\n body: options\n });\n\n // Handle HTTP error responses\n if (!httpResponse.ok) {\n // @ts-ignore\n throw new MatchMakeError(httpResponse.error.message || httpResponse.error, httpResponse.error.code || httpResponse.status);\n }\n\n const response = httpResponse.data as unknown as ISeatReservation;\n\n // forward reconnection token during \"reconnect\" methods.\n if (method === \"reconnect\") {\n response.reconnectionToken = options.reconnectionToken;\n }\n\n return await this.consumeSeatReservation<T>(response, rootSchema);\n }\n\n protected createRoom<T>(roomName: string, rootSchema?: SchemaConstructor<T>) {\n return new Room<any, T>(roomName, rootSchema);\n }\n\n protected buildEndpoint(seatReservation: ISeatReservation, options: any = {}) {\n let protocol: string = this.settings.protocol || \"ws\";\n let searchParams = this.settings.searchParams || \"\";\n\n // forward authentication token\n if (this.http.authToken) {\n options['_authToken'] = this.http.authToken;\n }\n\n // append provided options\n for (const name in options) {\n if (!options.hasOwnProperty(name)) {\n continue;\n }\n searchParams += (searchParams ? '&' : '') + `${name}=${options[name]}`;\n }\n\n if (protocol === \"h3\") {\n protocol = \"http\";\n }\n\n let endpoint = (this.settings.secure)\n ? `${protocol}s://`\n : `${protocol}://`;\n\n if (seatReservation.publicAddress) {\n endpoint += `${seatReservation.publicAddress}`;\n\n } else {\n endpoint += `${this.settings.hostname}${this.getEndpointPort()}${this.settings.pathname}`;\n }\n\n const endpointURL = `${endpoint}/${seatReservation.processId}/${seatReservation.roomId}?${searchParams}`;\n return (this.urlBuilder)\n ? this.urlBuilder(new URL(endpointURL))\n : endpointURL;\n }\n\n protected getHttpEndpoint(segments: string = '') {\n const path = segments.startsWith(\"/\") ? segments : `/${segments}`;\n\n let endpointURL = `${(this.settings.secure) ? \"https\" : \"http\"}://${this.settings.hostname}${this.getEndpointPort()}${this.settings.pathname}${path}`;\n\n if (this.settings.searchParams) {\n endpointURL += `?${this.settings.searchParams}`;\n }\n\n return (this.urlBuilder)\n ? this.urlBuilder(new URL(endpointURL))\n : endpointURL;\n }\n\n protected getEndpointPort() {\n return (this.settings.port !== 80 && this.settings.port !== 443)\n ? `:${this.settings.port}`\n : \"\";\n }\n}\n\nexport const Client = ColyseusSDK;\nexport type Client = InstanceType<typeof ColyseusSDK>;"],"names":["HTTP","Auth","discordURLBuilder","__awaiter","ServerError","Connection","Protocol","CloseCode","Room"],"mappings":"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"}
1
+ {"version":3,"file":"Client.cjs","sources":["../src/Client.ts"],"sourcesContent":["import type { matchMaker, SDKTypes, Room as ServerRoom } from '@colyseus/core';\n\nimport { CloseCode, ServerError } from './errors/Errors.ts';\nimport { Room } from './Room.ts';\nimport { SchemaConstructor } from './serializer/SchemaSerializer.ts';\nimport { HTTP } from './HTTP.ts';\nimport { Auth } from './Auth.ts';\nimport { Protocol } from './Protocol.ts';\nimport { Connection } from './Connection.ts';\nimport { discordURLBuilder } from './3rd_party/discord.ts';\n\nexport type JoinOptions = any;\nexport type ISeatReservation = matchMaker.ISeatReservation;\n\nexport class MatchMakeError extends Error {\n code: number;\n constructor(message: string, code: number) {\n super(message);\n this.code = code;\n this.name = \"MatchMakeError\";\n Object.setPrototypeOf(this, MatchMakeError.prototype);\n }\n}\n\n// - React Native does not provide `window.location`\n// - Cocos Creator (Native) does not provide `window.location.hostname`\nconst DEFAULT_ENDPOINT = (typeof (window) !== \"undefined\" && typeof (window?.location?.hostname) !== \"undefined\")\n ? `${window.location.protocol.replace(\"http\", \"ws\")}//${window.location.hostname}${(window.location.port && `:${window.location.port}`)}`\n : \"ws://127.0.0.1:2567\";\n\nexport interface EndpointSettings {\n hostname: string,\n secure: boolean,\n port?: number,\n pathname?: string,\n searchParams?: string,\n protocol?: \"ws\" | \"h3\";\n}\n\nexport interface ClientOptions {\n headers?: { [id: string]: string };\n urlBuilder?: (url: URL) => string;\n protocol?: \"ws\" | \"h3\";\n}\n\nexport interface LatencyOptions {\n /** \"ws\" for WebSocket, \"h3\" for WebTransport (default: \"ws\") */\n protocol?: \"ws\" | \"h3\";\n /** Number of pings to send (default: 1). Returns the average latency when > 1. */\n pingCount?: number;\n}\n\nexport class ColyseusSDK<ServerType extends SDKTypes = any, UserData = any> {\n static VERSION = \"0.17\";\n\n /**\n * The HTTP client to make requests to the server.\n */\n public http: HTTP<ServerType['~routes']>;\n\n /**\n * The authentication module to authenticate into requests and rooms.\n */\n public auth: Auth<UserData>;\n\n /**\n * The settings used to connect to the server.\n */\n public settings: EndpointSettings;\n\n protected urlBuilder: (url: URL) => string;\n\n constructor(\n settings: string | EndpointSettings = DEFAULT_ENDPOINT,\n options?: ClientOptions,\n ) {\n if (typeof (settings) === \"string\") {\n\n //\n // endpoint by url\n //\n const url = (settings.startsWith(\"/\"))\n ? new URL(settings, DEFAULT_ENDPOINT)\n : new URL(settings);\n\n const secure = (url.protocol === \"https:\" || url.protocol === \"wss:\");\n const port = Number(url.port || (secure ? 443 : 80));\n\n this.settings = {\n hostname: url.hostname,\n pathname: url.pathname,\n port,\n secure,\n searchParams: url.searchParams.toString() || undefined,\n };\n\n } else {\n //\n // endpoint by settings\n //\n if (settings.port === undefined) {\n settings.port = (settings.secure) ? 443 : 80;\n }\n if (settings.pathname === undefined) {\n settings.pathname = \"\";\n }\n this.settings = settings;\n }\n\n // make sure pathname does not end with \"/\"\n if (this.settings.pathname.endsWith(\"/\")) {\n this.settings.pathname = this.settings.pathname.slice(0, -1);\n }\n\n // specify room connection protocol if provided\n if (options?.protocol) {\n this.settings.protocol = options.protocol;\n }\n\n this.http = new HTTP(this, {\n headers: options?.headers || {},\n });\n this.auth = new Auth(this.http);\n\n this.urlBuilder = options?.urlBuilder;\n\n //\n // Discord Embedded SDK requires a custom URL builder\n //\n if (\n !this.urlBuilder &&\n typeof (window) !== \"undefined\" &&\n window?.location?.hostname?.includes(\"discordsays.com\")\n ) {\n this.urlBuilder = discordURLBuilder;\n console.log(\"Colyseus SDK: Discord Embedded SDK detected. Using custom URL builder.\");\n }\n }\n\n /**\n * Select the endpoint with the lowest latency.\n * @param endpoints Array of endpoints to select from.\n * @param options Client options.\n * @param latencyOptions Latency measurement options (protocol, pingCount).\n * @returns The client with the lowest latency.\n */\n static async selectByLatency<ServerType extends SDKTypes = any, UserData = any>(\n endpoints: Array<string | EndpointSettings>,\n options?: ClientOptions,\n latencyOptions: LatencyOptions = {}\n ) {\n const clients = endpoints.map(endpoint => new ColyseusSDK<ServerType, UserData>(endpoint, options));\n\n const latencies = (await Promise.allSettled(clients.map((client, index) => client.getLatency(latencyOptions).then(latency => {\n const settings = clients[index].settings;\n console.log(`🛜 Endpoint Latency: ${latency}ms - ${settings.hostname}:${settings.port}${settings.pathname}`);\n return [index, latency]\n }))))\n .filter((result) => result.status === 'fulfilled')\n .map(result => result.value);\n\n if (latencies.length === 0) {\n throw new Error('All endpoints failed to respond');\n }\n\n return clients[latencies.sort((a, b) => a[1] - b[1])[0][0]];\n }\n\n // Overload: Use room name from ServerType to infer room type\n public async joinOrCreate<R extends keyof ServerType['~rooms']>(\n roomName: R,\n options?: Parameters<ServerType['~rooms'][R]['~room']['prototype']['onJoin']>[1],\n rootSchema?: SchemaConstructor<ServerType>\n ): Promise<Room<ServerType['~rooms'][R]['~room']>>\n // Overload: Pass RoomType directly to extract state\n public async joinOrCreate<RoomType extends ServerRoom>(\n roomName: string,\n options?: Parameters<RoomType['onJoin']>[1],\n rootSchema?: SchemaConstructor<RoomType['state']>\n ): Promise<Room<RoomType, RoomType['state']>>\n // Overload: Pass State type directly\n public async joinOrCreate<State = any>(\n roomName: string,\n options?: JoinOptions,\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<any, State>>\n // Implementation\n public async joinOrCreate<T = any>(roomName: string, options: JoinOptions = {}, rootSchema?: SchemaConstructor<T>) {\n return await this.createMatchMakeRequest<T>('joinOrCreate', roomName, options, rootSchema);\n }\n\n // Overload: Use room name from ServerType to infer room type\n public async create<R extends keyof ServerType['~rooms']>(\n roomName: R,\n options?: Parameters<ServerType['~rooms'][R]['~room']['prototype']['onJoin']>[1],\n rootSchema?: SchemaConstructor<ServerType>\n ): Promise<Room<ServerType['~rooms'][R]['~room']>>\n // Overload: Pass RoomType directly to extract state\n public async create<RoomType extends ServerRoom>(\n roomName: string,\n options?: Parameters<RoomType['onJoin']>[1],\n rootSchema?: SchemaConstructor<RoomType['state']>\n ): Promise<Room<RoomType, RoomType['state']>>\n // Overload: Pass State type directly\n public async create<State = any>(\n roomName: string,\n options?: JoinOptions,\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<any, State>>\n // Implementation\n public async create<T = any>(roomName: string, options: JoinOptions = {}, rootSchema?: SchemaConstructor<T>) {\n return await this.createMatchMakeRequest<T>('create', roomName, options, rootSchema);\n }\n\n // Overload: Use room name from ServerType to infer room type\n public async join<R extends keyof ServerType['~rooms']>(\n roomName: R,\n options?: Parameters<ServerType['~rooms'][R]['~room']['prototype']['onJoin']>[1],\n rootSchema?: SchemaConstructor<ServerType>\n ): Promise<Room<ServerType['~rooms'][R]['~room']>>\n // Overload: Pass RoomType directly to extract state\n public async join<RoomType extends ServerRoom>(\n roomName: string,\n options?: Parameters<RoomType['onJoin']>[1],\n rootSchema?: SchemaConstructor<RoomType['state']>\n ): Promise<Room<RoomType, RoomType['state']>>\n // Overload: Pass State type directly\n public async join<State = any>(\n roomName: string,\n options?: JoinOptions,\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<any, State>>\n // Implementation\n public async join<T = any>(roomName: string, options: JoinOptions = {}, rootSchema?: SchemaConstructor<T>) {\n return await this.createMatchMakeRequest<T>('join', roomName, options, rootSchema);\n }\n\n // Overload: Use room name from ServerType to infer room type\n public async joinById<R extends keyof ServerType['~rooms']>(\n roomName: R,\n options?: Parameters<ServerType['~rooms'][R]['~room']['prototype']['onJoin']>[1],\n rootSchema?: SchemaConstructor<ServerType>\n ): Promise<Room<ServerType['~rooms'][R]['~room']>>\n // Overload: Pass RoomType directly to extract state\n public async joinById<RoomType extends ServerRoom>(\n roomId: string,\n options?: Parameters<RoomType['onJoin']>[1],\n rootSchema?: SchemaConstructor<RoomType['state']>\n ): Promise<Room<RoomType, RoomType['state']>>\n // Overload: Pass State type directly\n public async joinById<State = any>(\n roomId: string,\n options?: JoinOptions,\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<any, State>>\n // Implementation\n public async joinById<T = any>(roomId: string, options: JoinOptions = {}, rootSchema?: SchemaConstructor<T>) {\n return await this.createMatchMakeRequest<T>('joinById', roomId, options, rootSchema);\n }\n\n /**\n * Re-establish connection with a room this client was previously connected to.\n *\n * @param reconnectionToken The `room.reconnectionToken` from previously connected room.\n * @param rootSchema (optional) Concrete root schema definition\n * @returns Promise<Room>\n */\n // Overload: Use room name from ServerType to infer room type\n public async reconnect<R extends keyof ServerType['~rooms']>(reconnectionToken: string, roomName?: R): Promise<Room<ServerType['~rooms'][R]['~room']>>\n // Overload: Pass RoomType directly to extract state\n public async reconnect<RoomType extends ServerRoom>(\n reconnectionToken: string,\n rootSchema?: SchemaConstructor<RoomType['state']>\n ): Promise<Room<RoomType, RoomType['state']>>\n // Overload: Pass State type directly\n public async reconnect<State = any>(\n reconnectionToken: string,\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<any, State>>\n // Implementation\n public async reconnect<T = any>(reconnectionToken: string, rootSchema?: SchemaConstructor<T>) {\n if (typeof (reconnectionToken) === \"string\" && typeof (rootSchema) === \"string\") {\n throw new Error(\"DEPRECATED: .reconnect() now only accepts 'reconnectionToken' as argument.\\nYou can get this token from previously connected `room.reconnectionToken`\");\n }\n const [roomId, token] = reconnectionToken.split(\":\");\n\t\tif (!roomId || !token) {\n\t\t\tthrow new Error(\"Invalid reconnection token format.\\nThe format should be roomId:reconnectionToken\");\n\t\t}\n return await this.createMatchMakeRequest<T>('reconnect', roomId, { reconnectionToken: token }, rootSchema);\n }\n\n public async consumeSeatReservation<T>(\n response: ISeatReservation,\n rootSchema?: SchemaConstructor<T>\n ): Promise<Room<any, T>> {\n const room = this.createRoom<T>(response.name, rootSchema);\n room.roomId = response.roomId;\n room.sessionId = response.sessionId;\n\n const options: any = { sessionId: room.sessionId };\n\n // forward \"reconnection token\" in case of reconnection.\n if (response.reconnectionToken) {\n options.reconnectionToken = response.reconnectionToken;\n }\n\n room.connect(\n this.buildEndpoint(response, options),\n response,\n this.http.options.headers\n );\n\n return new Promise((resolve, reject) => {\n const onError = (code, message) => reject(new ServerError(code, message));\n room.onError.once(onError);\n\n room['onJoin'].once(() => {\n room.onError.remove(onError);\n resolve(room);\n });\n });\n }\n\n /**\n * Create a new connection with the server, and measure the latency.\n * @param options Latency measurement options (protocol, pingCount).\n */\n public getLatency(options: LatencyOptions = {}): Promise<number> {\n const protocol = options.protocol ?? \"ws\";\n const pingCount = options.pingCount ?? 1;\n\n return new Promise<number>((resolve, reject) => {\n const conn = new Connection(protocol);\n const latencies: number[] = [];\n let pingStart = 0;\n\n conn.events.onopen = () => {\n pingStart = Date.now();\n conn.send(new Uint8Array([Protocol.PING]));\n };\n\n conn.events.onmessage = (_: MessageEvent) => {\n latencies.push(Date.now() - pingStart);\n\n if (latencies.length < pingCount) {\n // Send another ping\n pingStart = Date.now();\n conn.send(new Uint8Array([Protocol.PING]));\n } else {\n // Done, calculate average and close\n conn.close();\n const average = latencies.reduce((sum, l) => sum + l, 0) / latencies.length;\n resolve(average);\n }\n };\n\n conn.events.onerror = (event: ErrorEvent) => {\n reject(new ServerError(CloseCode.ABNORMAL_CLOSURE, `Failed to get latency: ${event.message}`));\n };\n\n conn.connect(this.getHttpEndpoint());\n });\n }\n\n protected async createMatchMakeRequest<T>(\n method: string,\n roomName: string,\n options: JoinOptions = {},\n rootSchema?: SchemaConstructor<T>,\n ) {\n const httpResponse = await (this.http as HTTP<any>).post(`/matchmake/${method}/${roomName}`, {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n },\n body: options\n });\n\n // Handle HTTP error responses\n if (!httpResponse.ok) {\n // @ts-ignore\n throw new MatchMakeError(httpResponse.error.message || httpResponse.error, httpResponse.error.code || httpResponse.status);\n }\n\n const response = httpResponse.data as unknown as ISeatReservation;\n\n // forward reconnection token during \"reconnect\" methods.\n if (method === \"reconnect\") {\n response.reconnectionToken = options.reconnectionToken;\n }\n\n return await this.consumeSeatReservation<T>(response, rootSchema);\n }\n\n protected createRoom<T>(roomName: string, rootSchema?: SchemaConstructor<T>) {\n return new Room<any, T>(roomName, rootSchema);\n }\n\n protected buildEndpoint(seatReservation: ISeatReservation, options: any = {}) {\n let protocol: string = this.settings.protocol || \"ws\";\n let searchParams = this.settings.searchParams || \"\";\n\n // forward authentication token\n if (this.http.authToken) {\n options['_authToken'] = this.http.authToken;\n }\n\n // append provided options\n for (const name in options) {\n if (!options.hasOwnProperty(name)) {\n continue;\n }\n searchParams += (searchParams ? '&' : '') + `${name}=${options[name]}`;\n }\n\n if (protocol === \"h3\") {\n protocol = \"http\";\n }\n\n let endpoint = (this.settings.secure)\n ? `${protocol}s://`\n : `${protocol}://`;\n\n if (seatReservation.publicAddress) {\n endpoint += `${seatReservation.publicAddress}`;\n\n } else {\n endpoint += `${this.settings.hostname}${this.getEndpointPort()}${this.settings.pathname}`;\n }\n\n const endpointURL = `${endpoint}/${seatReservation.processId}/${seatReservation.roomId}?${searchParams}`;\n return (this.urlBuilder)\n ? this.urlBuilder(new URL(endpointURL))\n : endpointURL;\n }\n\n protected getHttpEndpoint(segments: string = '') {\n const path = segments.startsWith(\"/\") ? segments : `/${segments}`;\n\n let endpointURL = `${(this.settings.secure) ? \"https\" : \"http\"}://${this.settings.hostname}${this.getEndpointPort()}${this.settings.pathname}${path}`;\n\n if (this.settings.searchParams) {\n endpointURL += `?${this.settings.searchParams}`;\n }\n\n return (this.urlBuilder)\n ? this.urlBuilder(new URL(endpointURL))\n : endpointURL;\n }\n\n protected getEndpointPort() {\n return (this.settings.port !== 80 && this.settings.port !== 443)\n ? `:${this.settings.port}`\n : \"\";\n }\n}\n\nexport const Client = ColyseusSDK;\nexport type Client<ServerType extends SDKTypes = any, UserData = any> = InstanceType<typeof ColyseusSDK<ServerType, UserData>>;"],"names":["HTTP","Auth","discordURLBuilder","__awaiter","ServerError","Connection","Protocol","CloseCode","Room"],"mappings":"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"}
package/build/Client.d.ts CHANGED
@@ -55,16 +55,16 @@ export declare class ColyseusSDK<ServerType extends SDKTypes = any, UserData = a
55
55
  */
56
56
  static selectByLatency<ServerType extends SDKTypes = any, UserData = any>(endpoints: Array<string | EndpointSettings>, options?: ClientOptions, latencyOptions?: LatencyOptions): Promise<ColyseusSDK<ServerType, UserData>>;
57
57
  joinOrCreate<R extends keyof ServerType['~rooms']>(roomName: R, options?: Parameters<ServerType['~rooms'][R]['~room']['prototype']['onJoin']>[1], rootSchema?: SchemaConstructor<ServerType>): Promise<Room<ServerType['~rooms'][R]['~room']>>;
58
- joinOrCreate<RoomType extends typeof ServerRoom>(roomName: string, options?: Parameters<RoomType['prototype']['onJoin']>[1], rootSchema?: SchemaConstructor<RoomType['prototype']['state']>): Promise<Room<RoomType>>;
58
+ joinOrCreate<RoomType extends ServerRoom>(roomName: string, options?: Parameters<RoomType['onJoin']>[1], rootSchema?: SchemaConstructor<RoomType['state']>): Promise<Room<RoomType, RoomType['state']>>;
59
59
  joinOrCreate<State = any>(roomName: string, options?: JoinOptions, rootSchema?: SchemaConstructor<State>): Promise<Room<any, State>>;
60
60
  create<R extends keyof ServerType['~rooms']>(roomName: R, options?: Parameters<ServerType['~rooms'][R]['~room']['prototype']['onJoin']>[1], rootSchema?: SchemaConstructor<ServerType>): Promise<Room<ServerType['~rooms'][R]['~room']>>;
61
- create<RoomType extends typeof ServerRoom>(roomName: string, options?: Parameters<RoomType['prototype']['onJoin']>[1], rootSchema?: SchemaConstructor<RoomType['prototype']['state']>): Promise<Room<RoomType>>;
61
+ create<RoomType extends ServerRoom>(roomName: string, options?: Parameters<RoomType['onJoin']>[1], rootSchema?: SchemaConstructor<RoomType['state']>): Promise<Room<RoomType, RoomType['state']>>;
62
62
  create<State = any>(roomName: string, options?: JoinOptions, rootSchema?: SchemaConstructor<State>): Promise<Room<any, State>>;
63
63
  join<R extends keyof ServerType['~rooms']>(roomName: R, options?: Parameters<ServerType['~rooms'][R]['~room']['prototype']['onJoin']>[1], rootSchema?: SchemaConstructor<ServerType>): Promise<Room<ServerType['~rooms'][R]['~room']>>;
64
- join<RoomType extends typeof ServerRoom>(roomName: string, options?: Parameters<RoomType['prototype']['onJoin']>[1], rootSchema?: SchemaConstructor<RoomType['prototype']['state']>): Promise<Room<RoomType>>;
64
+ join<RoomType extends ServerRoom>(roomName: string, options?: Parameters<RoomType['onJoin']>[1], rootSchema?: SchemaConstructor<RoomType['state']>): Promise<Room<RoomType, RoomType['state']>>;
65
65
  join<State = any>(roomName: string, options?: JoinOptions, rootSchema?: SchemaConstructor<State>): Promise<Room<any, State>>;
66
66
  joinById<R extends keyof ServerType['~rooms']>(roomName: R, options?: Parameters<ServerType['~rooms'][R]['~room']['prototype']['onJoin']>[1], rootSchema?: SchemaConstructor<ServerType>): Promise<Room<ServerType['~rooms'][R]['~room']>>;
67
- joinById<RoomType extends typeof ServerRoom>(roomId: string, options?: Parameters<RoomType['prototype']['onJoin']>[1], rootSchema?: SchemaConstructor<RoomType['prototype']['state']>): Promise<Room<RoomType>>;
67
+ joinById<RoomType extends ServerRoom>(roomId: string, options?: Parameters<RoomType['onJoin']>[1], rootSchema?: SchemaConstructor<RoomType['state']>): Promise<Room<RoomType, RoomType['state']>>;
68
68
  joinById<State = any>(roomId: string, options?: JoinOptions, rootSchema?: SchemaConstructor<State>): Promise<Room<any, State>>;
69
69
  /**
70
70
  * Re-establish connection with a room this client was previously connected to.
@@ -74,7 +74,7 @@ export declare class ColyseusSDK<ServerType extends SDKTypes = any, UserData = a
74
74
  * @returns Promise<Room>
75
75
  */
76
76
  reconnect<R extends keyof ServerType['~rooms']>(reconnectionToken: string, roomName?: R): Promise<Room<ServerType['~rooms'][R]['~room']>>;
77
- reconnect<RoomType extends typeof ServerRoom>(reconnectionToken: string, rootSchema?: SchemaConstructor<RoomType['prototype']['state']>): Promise<Room<RoomType>>;
77
+ reconnect<RoomType extends ServerRoom>(reconnectionToken: string, rootSchema?: SchemaConstructor<RoomType['state']>): Promise<Room<RoomType, RoomType['state']>>;
78
78
  reconnect<State = any>(reconnectionToken: string, rootSchema?: SchemaConstructor<State>): Promise<Room<any, State>>;
79
79
  consumeSeatReservation<T>(response: ISeatReservation, rootSchema?: SchemaConstructor<T>): Promise<Room<any, T>>;
80
80
  /**
@@ -89,4 +89,4 @@ export declare class ColyseusSDK<ServerType extends SDKTypes = any, UserData = a
89
89
  protected getEndpointPort(): string;
90
90
  }
91
91
  export declare const Client: typeof ColyseusSDK;
92
- export type Client = InstanceType<typeof ColyseusSDK>;
92
+ export type Client<ServerType extends SDKTypes = any, UserData = any> = InstanceType<typeof ColyseusSDK<ServerType, UserData>>;
package/build/Client.mjs CHANGED
@@ -3,7 +3,7 @@
3
3
  // This software is released under the MIT License.
4
4
  // https://opensource.org/license/MIT
5
5
  //
6
- // colyseus.js@0.17.8
6
+ // colyseus.js@0.17.11
7
7
  import { ServerError, CloseCode } from './errors/Errors.mjs';
8
8
  import { Room } from './Room.mjs';
9
9
  import { HTTP } from './HTTP.mjs';
@@ -1 +1 @@
1
- {"version":3,"file":"Client.mjs","sources":["../src/Client.ts"],"sourcesContent":["import type { matchMaker, SDKTypes, Room as ServerRoom } from '@colyseus/core';\n\nimport { CloseCode, ServerError } from './errors/Errors.ts';\nimport { Room } from './Room.ts';\nimport { SchemaConstructor } from './serializer/SchemaSerializer.ts';\nimport { HTTP } from './HTTP.ts';\nimport { Auth } from './Auth.ts';\nimport { Protocol } from './Protocol.ts';\nimport { Connection } from './Connection.ts';\nimport { discordURLBuilder } from './3rd_party/discord.ts';\n\nexport type JoinOptions = any;\nexport type ISeatReservation = matchMaker.ISeatReservation;\n\nexport class MatchMakeError extends Error {\n code: number;\n constructor(message: string, code: number) {\n super(message);\n this.code = code;\n this.name = \"MatchMakeError\";\n Object.setPrototypeOf(this, MatchMakeError.prototype);\n }\n}\n\n// - React Native does not provide `window.location`\n// - Cocos Creator (Native) does not provide `window.location.hostname`\nconst DEFAULT_ENDPOINT = (typeof (window) !== \"undefined\" && typeof (window?.location?.hostname) !== \"undefined\")\n ? `${window.location.protocol.replace(\"http\", \"ws\")}//${window.location.hostname}${(window.location.port && `:${window.location.port}`)}`\n : \"ws://127.0.0.1:2567\";\n\nexport interface EndpointSettings {\n hostname: string,\n secure: boolean,\n port?: number,\n pathname?: string,\n searchParams?: string,\n protocol?: \"ws\" | \"h3\";\n}\n\nexport interface ClientOptions {\n headers?: { [id: string]: string };\n urlBuilder?: (url: URL) => string;\n protocol?: \"ws\" | \"h3\";\n}\n\nexport interface LatencyOptions {\n /** \"ws\" for WebSocket, \"h3\" for WebTransport (default: \"ws\") */\n protocol?: \"ws\" | \"h3\";\n /** Number of pings to send (default: 1). Returns the average latency when > 1. */\n pingCount?: number;\n}\n\nexport class ColyseusSDK<ServerType extends SDKTypes = any, UserData = any> {\n static VERSION = \"0.17\";\n\n /**\n * The HTTP client to make requests to the server.\n */\n public http: HTTP<ServerType['~routes']>;\n\n /**\n * The authentication module to authenticate into requests and rooms.\n */\n public auth: Auth<UserData>;\n\n /**\n * The settings used to connect to the server.\n */\n public settings: EndpointSettings;\n\n protected urlBuilder: (url: URL) => string;\n\n constructor(\n settings: string | EndpointSettings = DEFAULT_ENDPOINT,\n options?: ClientOptions,\n ) {\n if (typeof (settings) === \"string\") {\n\n //\n // endpoint by url\n //\n const url = (settings.startsWith(\"/\"))\n ? new URL(settings, DEFAULT_ENDPOINT)\n : new URL(settings);\n\n const secure = (url.protocol === \"https:\" || url.protocol === \"wss:\");\n const port = Number(url.port || (secure ? 443 : 80));\n\n this.settings = {\n hostname: url.hostname,\n pathname: url.pathname,\n port,\n secure,\n searchParams: url.searchParams.toString() || undefined,\n };\n\n } else {\n //\n // endpoint by settings\n //\n if (settings.port === undefined) {\n settings.port = (settings.secure) ? 443 : 80;\n }\n if (settings.pathname === undefined) {\n settings.pathname = \"\";\n }\n this.settings = settings;\n }\n\n // make sure pathname does not end with \"/\"\n if (this.settings.pathname.endsWith(\"/\")) {\n this.settings.pathname = this.settings.pathname.slice(0, -1);\n }\n\n // specify room connection protocol if provided\n if (options?.protocol) {\n this.settings.protocol = options.protocol;\n }\n\n this.http = new HTTP(this, {\n headers: options?.headers || {},\n });\n this.auth = new Auth(this.http);\n\n this.urlBuilder = options?.urlBuilder;\n\n //\n // Discord Embedded SDK requires a custom URL builder\n //\n if (\n !this.urlBuilder &&\n typeof (window) !== \"undefined\" &&\n window?.location?.hostname?.includes(\"discordsays.com\")\n ) {\n this.urlBuilder = discordURLBuilder;\n console.log(\"Colyseus SDK: Discord Embedded SDK detected. Using custom URL builder.\");\n }\n }\n\n /**\n * Select the endpoint with the lowest latency.\n * @param endpoints Array of endpoints to select from.\n * @param options Client options.\n * @param latencyOptions Latency measurement options (protocol, pingCount).\n * @returns The client with the lowest latency.\n */\n static async selectByLatency<ServerType extends SDKTypes = any, UserData = any>(\n endpoints: Array<string | EndpointSettings>,\n options?: ClientOptions,\n latencyOptions: LatencyOptions = {}\n ) {\n const clients = endpoints.map(endpoint => new ColyseusSDK<ServerType, UserData>(endpoint, options));\n\n const latencies = (await Promise.allSettled(clients.map((client, index) => client.getLatency(latencyOptions).then(latency => {\n const settings = clients[index].settings;\n console.log(`🛜 Endpoint Latency: ${latency}ms - ${settings.hostname}:${settings.port}${settings.pathname}`);\n return [index, latency]\n }))))\n .filter((result) => result.status === 'fulfilled')\n .map(result => result.value);\n\n if (latencies.length === 0) {\n throw new Error('All endpoints failed to respond');\n }\n\n return clients[latencies.sort((a, b) => a[1] - b[1])[0][0]];\n }\n\n // Overload: Use room name from ServerType to infer room type\n public async joinOrCreate<R extends keyof ServerType['~rooms']>(\n roomName: R,\n options?: Parameters<ServerType['~rooms'][R]['~room']['prototype']['onJoin']>[1],\n rootSchema?: SchemaConstructor<ServerType>\n ): Promise<Room<ServerType['~rooms'][R]['~room']>>\n // Overload: Pass RoomType directly to extract state\n public async joinOrCreate<RoomType extends typeof ServerRoom>(\n roomName: string,\n options?: Parameters<RoomType['prototype']['onJoin']>[1],\n rootSchema?: SchemaConstructor<RoomType['prototype']['state']>\n ): Promise<Room<RoomType>>\n // Overload: Pass State type directly\n public async joinOrCreate<State = any>(\n roomName: string,\n options?: JoinOptions,\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<any, State>>\n // Implementation\n public async joinOrCreate<T = any>(roomName: string, options: JoinOptions = {}, rootSchema?: SchemaConstructor<T>) {\n return await this.createMatchMakeRequest<T>('joinOrCreate', roomName, options, rootSchema);\n }\n\n // Overload: Use room name from ServerType to infer room type\n public async create<R extends keyof ServerType['~rooms']>(\n roomName: R,\n options?: Parameters<ServerType['~rooms'][R]['~room']['prototype']['onJoin']>[1],\n rootSchema?: SchemaConstructor<ServerType>\n ): Promise<Room<ServerType['~rooms'][R]['~room']>>\n // Overload: Pass RoomType directly to extract state\n public async create<RoomType extends typeof ServerRoom>(\n roomName: string,\n options?: Parameters<RoomType['prototype']['onJoin']>[1],\n rootSchema?: SchemaConstructor<RoomType['prototype']['state']>\n ): Promise<Room<RoomType>>\n // Overload: Pass State type directly\n public async create<State = any>(\n roomName: string,\n options?: JoinOptions,\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<any, State>>\n // Implementation\n public async create<T = any>(roomName: string, options: JoinOptions = {}, rootSchema?: SchemaConstructor<T>) {\n return await this.createMatchMakeRequest<T>('create', roomName, options, rootSchema);\n }\n\n // Overload: Use room name from ServerType to infer room type\n public async join<R extends keyof ServerType['~rooms']>(\n roomName: R,\n options?: Parameters<ServerType['~rooms'][R]['~room']['prototype']['onJoin']>[1],\n rootSchema?: SchemaConstructor<ServerType>\n ): Promise<Room<ServerType['~rooms'][R]['~room']>>\n // Overload: Pass RoomType directly to extract state\n public async join<RoomType extends typeof ServerRoom>(\n roomName: string,\n options?: Parameters<RoomType['prototype']['onJoin']>[1],\n rootSchema?: SchemaConstructor<RoomType['prototype']['state']>\n ): Promise<Room<RoomType>>\n // Overload: Pass State type directly\n public async join<State = any>(\n roomName: string,\n options?: JoinOptions,\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<any, State>>\n // Implementation\n public async join<T = any>(roomName: string, options: JoinOptions = {}, rootSchema?: SchemaConstructor<T>) {\n return await this.createMatchMakeRequest<T>('join', roomName, options, rootSchema);\n }\n\n // Overload: Use room name from ServerType to infer room type\n public async joinById<R extends keyof ServerType['~rooms']>(\n roomName: R,\n options?: Parameters<ServerType['~rooms'][R]['~room']['prototype']['onJoin']>[1],\n rootSchema?: SchemaConstructor<ServerType>\n ): Promise<Room<ServerType['~rooms'][R]['~room']>>\n // Overload: Pass RoomType directly to extract state\n public async joinById<RoomType extends typeof ServerRoom>(\n roomId: string,\n options?: Parameters<RoomType['prototype']['onJoin']>[1],\n rootSchema?: SchemaConstructor<RoomType['prototype']['state']>\n ): Promise<Room<RoomType>>\n // Overload: Pass State type directly\n public async joinById<State = any>(\n roomId: string,\n options?: JoinOptions,\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<any, State>>\n // Implementation\n public async joinById<T = any>(roomId: string, options: JoinOptions = {}, rootSchema?: SchemaConstructor<T>) {\n return await this.createMatchMakeRequest<T>('joinById', roomId, options, rootSchema);\n }\n\n /**\n * Re-establish connection with a room this client was previously connected to.\n *\n * @param reconnectionToken The `room.reconnectionToken` from previously connected room.\n * @param rootSchema (optional) Concrete root schema definition\n * @returns Promise<Room>\n */\n // Overload: Use room name from ServerType to infer room type\n public async reconnect<R extends keyof ServerType['~rooms']>(reconnectionToken: string, roomName?: R): Promise<Room<ServerType['~rooms'][R]['~room']>>\n // Overload: Pass RoomType directly to extract state\n public async reconnect<RoomType extends typeof ServerRoom>(\n reconnectionToken: string,\n rootSchema?: SchemaConstructor<RoomType['prototype']['state']>\n ): Promise<Room<RoomType>>\n // Overload: Pass State type directly\n public async reconnect<State = any>(\n reconnectionToken: string,\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<any, State>>\n // Implementation\n public async reconnect<T = any>(reconnectionToken: string, rootSchema?: SchemaConstructor<T>) {\n if (typeof (reconnectionToken) === \"string\" && typeof (rootSchema) === \"string\") {\n throw new Error(\"DEPRECATED: .reconnect() now only accepts 'reconnectionToken' as argument.\\nYou can get this token from previously connected `room.reconnectionToken`\");\n }\n const [roomId, token] = reconnectionToken.split(\":\");\n\t\tif (!roomId || !token) {\n\t\t\tthrow new Error(\"Invalid reconnection token format.\\nThe format should be roomId:reconnectionToken\");\n\t\t}\n return await this.createMatchMakeRequest<T>('reconnect', roomId, { reconnectionToken: token }, rootSchema);\n }\n\n public async consumeSeatReservation<T>(\n response: ISeatReservation,\n rootSchema?: SchemaConstructor<T>\n ): Promise<Room<any, T>> {\n const room = this.createRoom<T>(response.name, rootSchema);\n room.roomId = response.roomId;\n room.sessionId = response.sessionId;\n\n const options: any = { sessionId: room.sessionId };\n\n // forward \"reconnection token\" in case of reconnection.\n if (response.reconnectionToken) {\n options.reconnectionToken = response.reconnectionToken;\n }\n\n room.connect(\n this.buildEndpoint(response, options),\n response,\n this.http.options.headers\n );\n\n return new Promise((resolve, reject) => {\n const onError = (code, message) => reject(new ServerError(code, message));\n room.onError.once(onError);\n\n room['onJoin'].once(() => {\n room.onError.remove(onError);\n resolve(room);\n });\n });\n }\n\n /**\n * Create a new connection with the server, and measure the latency.\n * @param options Latency measurement options (protocol, pingCount).\n */\n public getLatency(options: LatencyOptions = {}): Promise<number> {\n const protocol = options.protocol ?? \"ws\";\n const pingCount = options.pingCount ?? 1;\n\n return new Promise<number>((resolve, reject) => {\n const conn = new Connection(protocol);\n const latencies: number[] = [];\n let pingStart = 0;\n\n conn.events.onopen = () => {\n pingStart = Date.now();\n conn.send(new Uint8Array([Protocol.PING]));\n };\n\n conn.events.onmessage = (_: MessageEvent) => {\n latencies.push(Date.now() - pingStart);\n\n if (latencies.length < pingCount) {\n // Send another ping\n pingStart = Date.now();\n conn.send(new Uint8Array([Protocol.PING]));\n } else {\n // Done, calculate average and close\n conn.close();\n const average = latencies.reduce((sum, l) => sum + l, 0) / latencies.length;\n resolve(average);\n }\n };\n\n conn.events.onerror = (event: ErrorEvent) => {\n reject(new ServerError(CloseCode.ABNORMAL_CLOSURE, `Failed to get latency: ${event.message}`));\n };\n\n conn.connect(this.getHttpEndpoint());\n });\n }\n\n protected async createMatchMakeRequest<T>(\n method: string,\n roomName: string,\n options: JoinOptions = {},\n rootSchema?: SchemaConstructor<T>,\n ) {\n const httpResponse = await (this.http as HTTP<any>).post(`/matchmake/${method}/${roomName}`, {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n },\n body: options\n });\n\n // Handle HTTP error responses\n if (!httpResponse.ok) {\n // @ts-ignore\n throw new MatchMakeError(httpResponse.error.message || httpResponse.error, httpResponse.error.code || httpResponse.status);\n }\n\n const response = httpResponse.data as unknown as ISeatReservation;\n\n // forward reconnection token during \"reconnect\" methods.\n if (method === \"reconnect\") {\n response.reconnectionToken = options.reconnectionToken;\n }\n\n return await this.consumeSeatReservation<T>(response, rootSchema);\n }\n\n protected createRoom<T>(roomName: string, rootSchema?: SchemaConstructor<T>) {\n return new Room<any, T>(roomName, rootSchema);\n }\n\n protected buildEndpoint(seatReservation: ISeatReservation, options: any = {}) {\n let protocol: string = this.settings.protocol || \"ws\";\n let searchParams = this.settings.searchParams || \"\";\n\n // forward authentication token\n if (this.http.authToken) {\n options['_authToken'] = this.http.authToken;\n }\n\n // append provided options\n for (const name in options) {\n if (!options.hasOwnProperty(name)) {\n continue;\n }\n searchParams += (searchParams ? '&' : '') + `${name}=${options[name]}`;\n }\n\n if (protocol === \"h3\") {\n protocol = \"http\";\n }\n\n let endpoint = (this.settings.secure)\n ? `${protocol}s://`\n : `${protocol}://`;\n\n if (seatReservation.publicAddress) {\n endpoint += `${seatReservation.publicAddress}`;\n\n } else {\n endpoint += `${this.settings.hostname}${this.getEndpointPort()}${this.settings.pathname}`;\n }\n\n const endpointURL = `${endpoint}/${seatReservation.processId}/${seatReservation.roomId}?${searchParams}`;\n return (this.urlBuilder)\n ? this.urlBuilder(new URL(endpointURL))\n : endpointURL;\n }\n\n protected getHttpEndpoint(segments: string = '') {\n const path = segments.startsWith(\"/\") ? segments : `/${segments}`;\n\n let endpointURL = `${(this.settings.secure) ? \"https\" : \"http\"}://${this.settings.hostname}${this.getEndpointPort()}${this.settings.pathname}${path}`;\n\n if (this.settings.searchParams) {\n endpointURL += `?${this.settings.searchParams}`;\n }\n\n return (this.urlBuilder)\n ? this.urlBuilder(new URL(endpointURL))\n : endpointURL;\n }\n\n protected getEndpointPort() {\n return (this.settings.port !== 80 && this.settings.port !== 443)\n ? `:${this.settings.port}`\n : \"\";\n }\n}\n\nexport const Client = ColyseusSDK;\nexport type Client = InstanceType<typeof ColyseusSDK>;"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Client.mjs","sources":["../src/Client.ts"],"sourcesContent":["import type { matchMaker, SDKTypes, Room as ServerRoom } from '@colyseus/core';\n\nimport { CloseCode, ServerError } from './errors/Errors.ts';\nimport { Room } from './Room.ts';\nimport { SchemaConstructor } from './serializer/SchemaSerializer.ts';\nimport { HTTP } from './HTTP.ts';\nimport { Auth } from './Auth.ts';\nimport { Protocol } from './Protocol.ts';\nimport { Connection } from './Connection.ts';\nimport { discordURLBuilder } from './3rd_party/discord.ts';\n\nexport type JoinOptions = any;\nexport type ISeatReservation = matchMaker.ISeatReservation;\n\nexport class MatchMakeError extends Error {\n code: number;\n constructor(message: string, code: number) {\n super(message);\n this.code = code;\n this.name = \"MatchMakeError\";\n Object.setPrototypeOf(this, MatchMakeError.prototype);\n }\n}\n\n// - React Native does not provide `window.location`\n// - Cocos Creator (Native) does not provide `window.location.hostname`\nconst DEFAULT_ENDPOINT = (typeof (window) !== \"undefined\" && typeof (window?.location?.hostname) !== \"undefined\")\n ? `${window.location.protocol.replace(\"http\", \"ws\")}//${window.location.hostname}${(window.location.port && `:${window.location.port}`)}`\n : \"ws://127.0.0.1:2567\";\n\nexport interface EndpointSettings {\n hostname: string,\n secure: boolean,\n port?: number,\n pathname?: string,\n searchParams?: string,\n protocol?: \"ws\" | \"h3\";\n}\n\nexport interface ClientOptions {\n headers?: { [id: string]: string };\n urlBuilder?: (url: URL) => string;\n protocol?: \"ws\" | \"h3\";\n}\n\nexport interface LatencyOptions {\n /** \"ws\" for WebSocket, \"h3\" for WebTransport (default: \"ws\") */\n protocol?: \"ws\" | \"h3\";\n /** Number of pings to send (default: 1). Returns the average latency when > 1. */\n pingCount?: number;\n}\n\nexport class ColyseusSDK<ServerType extends SDKTypes = any, UserData = any> {\n static VERSION = \"0.17\";\n\n /**\n * The HTTP client to make requests to the server.\n */\n public http: HTTP<ServerType['~routes']>;\n\n /**\n * The authentication module to authenticate into requests and rooms.\n */\n public auth: Auth<UserData>;\n\n /**\n * The settings used to connect to the server.\n */\n public settings: EndpointSettings;\n\n protected urlBuilder: (url: URL) => string;\n\n constructor(\n settings: string | EndpointSettings = DEFAULT_ENDPOINT,\n options?: ClientOptions,\n ) {\n if (typeof (settings) === \"string\") {\n\n //\n // endpoint by url\n //\n const url = (settings.startsWith(\"/\"))\n ? new URL(settings, DEFAULT_ENDPOINT)\n : new URL(settings);\n\n const secure = (url.protocol === \"https:\" || url.protocol === \"wss:\");\n const port = Number(url.port || (secure ? 443 : 80));\n\n this.settings = {\n hostname: url.hostname,\n pathname: url.pathname,\n port,\n secure,\n searchParams: url.searchParams.toString() || undefined,\n };\n\n } else {\n //\n // endpoint by settings\n //\n if (settings.port === undefined) {\n settings.port = (settings.secure) ? 443 : 80;\n }\n if (settings.pathname === undefined) {\n settings.pathname = \"\";\n }\n this.settings = settings;\n }\n\n // make sure pathname does not end with \"/\"\n if (this.settings.pathname.endsWith(\"/\")) {\n this.settings.pathname = this.settings.pathname.slice(0, -1);\n }\n\n // specify room connection protocol if provided\n if (options?.protocol) {\n this.settings.protocol = options.protocol;\n }\n\n this.http = new HTTP(this, {\n headers: options?.headers || {},\n });\n this.auth = new Auth(this.http);\n\n this.urlBuilder = options?.urlBuilder;\n\n //\n // Discord Embedded SDK requires a custom URL builder\n //\n if (\n !this.urlBuilder &&\n typeof (window) !== \"undefined\" &&\n window?.location?.hostname?.includes(\"discordsays.com\")\n ) {\n this.urlBuilder = discordURLBuilder;\n console.log(\"Colyseus SDK: Discord Embedded SDK detected. Using custom URL builder.\");\n }\n }\n\n /**\n * Select the endpoint with the lowest latency.\n * @param endpoints Array of endpoints to select from.\n * @param options Client options.\n * @param latencyOptions Latency measurement options (protocol, pingCount).\n * @returns The client with the lowest latency.\n */\n static async selectByLatency<ServerType extends SDKTypes = any, UserData = any>(\n endpoints: Array<string | EndpointSettings>,\n options?: ClientOptions,\n latencyOptions: LatencyOptions = {}\n ) {\n const clients = endpoints.map(endpoint => new ColyseusSDK<ServerType, UserData>(endpoint, options));\n\n const latencies = (await Promise.allSettled(clients.map((client, index) => client.getLatency(latencyOptions).then(latency => {\n const settings = clients[index].settings;\n console.log(`🛜 Endpoint Latency: ${latency}ms - ${settings.hostname}:${settings.port}${settings.pathname}`);\n return [index, latency]\n }))))\n .filter((result) => result.status === 'fulfilled')\n .map(result => result.value);\n\n if (latencies.length === 0) {\n throw new Error('All endpoints failed to respond');\n }\n\n return clients[latencies.sort((a, b) => a[1] - b[1])[0][0]];\n }\n\n // Overload: Use room name from ServerType to infer room type\n public async joinOrCreate<R extends keyof ServerType['~rooms']>(\n roomName: R,\n options?: Parameters<ServerType['~rooms'][R]['~room']['prototype']['onJoin']>[1],\n rootSchema?: SchemaConstructor<ServerType>\n ): Promise<Room<ServerType['~rooms'][R]['~room']>>\n // Overload: Pass RoomType directly to extract state\n public async joinOrCreate<RoomType extends ServerRoom>(\n roomName: string,\n options?: Parameters<RoomType['onJoin']>[1],\n rootSchema?: SchemaConstructor<RoomType['state']>\n ): Promise<Room<RoomType, RoomType['state']>>\n // Overload: Pass State type directly\n public async joinOrCreate<State = any>(\n roomName: string,\n options?: JoinOptions,\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<any, State>>\n // Implementation\n public async joinOrCreate<T = any>(roomName: string, options: JoinOptions = {}, rootSchema?: SchemaConstructor<T>) {\n return await this.createMatchMakeRequest<T>('joinOrCreate', roomName, options, rootSchema);\n }\n\n // Overload: Use room name from ServerType to infer room type\n public async create<R extends keyof ServerType['~rooms']>(\n roomName: R,\n options?: Parameters<ServerType['~rooms'][R]['~room']['prototype']['onJoin']>[1],\n rootSchema?: SchemaConstructor<ServerType>\n ): Promise<Room<ServerType['~rooms'][R]['~room']>>\n // Overload: Pass RoomType directly to extract state\n public async create<RoomType extends ServerRoom>(\n roomName: string,\n options?: Parameters<RoomType['onJoin']>[1],\n rootSchema?: SchemaConstructor<RoomType['state']>\n ): Promise<Room<RoomType, RoomType['state']>>\n // Overload: Pass State type directly\n public async create<State = any>(\n roomName: string,\n options?: JoinOptions,\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<any, State>>\n // Implementation\n public async create<T = any>(roomName: string, options: JoinOptions = {}, rootSchema?: SchemaConstructor<T>) {\n return await this.createMatchMakeRequest<T>('create', roomName, options, rootSchema);\n }\n\n // Overload: Use room name from ServerType to infer room type\n public async join<R extends keyof ServerType['~rooms']>(\n roomName: R,\n options?: Parameters<ServerType['~rooms'][R]['~room']['prototype']['onJoin']>[1],\n rootSchema?: SchemaConstructor<ServerType>\n ): Promise<Room<ServerType['~rooms'][R]['~room']>>\n // Overload: Pass RoomType directly to extract state\n public async join<RoomType extends ServerRoom>(\n roomName: string,\n options?: Parameters<RoomType['onJoin']>[1],\n rootSchema?: SchemaConstructor<RoomType['state']>\n ): Promise<Room<RoomType, RoomType['state']>>\n // Overload: Pass State type directly\n public async join<State = any>(\n roomName: string,\n options?: JoinOptions,\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<any, State>>\n // Implementation\n public async join<T = any>(roomName: string, options: JoinOptions = {}, rootSchema?: SchemaConstructor<T>) {\n return await this.createMatchMakeRequest<T>('join', roomName, options, rootSchema);\n }\n\n // Overload: Use room name from ServerType to infer room type\n public async joinById<R extends keyof ServerType['~rooms']>(\n roomName: R,\n options?: Parameters<ServerType['~rooms'][R]['~room']['prototype']['onJoin']>[1],\n rootSchema?: SchemaConstructor<ServerType>\n ): Promise<Room<ServerType['~rooms'][R]['~room']>>\n // Overload: Pass RoomType directly to extract state\n public async joinById<RoomType extends ServerRoom>(\n roomId: string,\n options?: Parameters<RoomType['onJoin']>[1],\n rootSchema?: SchemaConstructor<RoomType['state']>\n ): Promise<Room<RoomType, RoomType['state']>>\n // Overload: Pass State type directly\n public async joinById<State = any>(\n roomId: string,\n options?: JoinOptions,\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<any, State>>\n // Implementation\n public async joinById<T = any>(roomId: string, options: JoinOptions = {}, rootSchema?: SchemaConstructor<T>) {\n return await this.createMatchMakeRequest<T>('joinById', roomId, options, rootSchema);\n }\n\n /**\n * Re-establish connection with a room this client was previously connected to.\n *\n * @param reconnectionToken The `room.reconnectionToken` from previously connected room.\n * @param rootSchema (optional) Concrete root schema definition\n * @returns Promise<Room>\n */\n // Overload: Use room name from ServerType to infer room type\n public async reconnect<R extends keyof ServerType['~rooms']>(reconnectionToken: string, roomName?: R): Promise<Room<ServerType['~rooms'][R]['~room']>>\n // Overload: Pass RoomType directly to extract state\n public async reconnect<RoomType extends ServerRoom>(\n reconnectionToken: string,\n rootSchema?: SchemaConstructor<RoomType['state']>\n ): Promise<Room<RoomType, RoomType['state']>>\n // Overload: Pass State type directly\n public async reconnect<State = any>(\n reconnectionToken: string,\n rootSchema?: SchemaConstructor<State>\n ): Promise<Room<any, State>>\n // Implementation\n public async reconnect<T = any>(reconnectionToken: string, rootSchema?: SchemaConstructor<T>) {\n if (typeof (reconnectionToken) === \"string\" && typeof (rootSchema) === \"string\") {\n throw new Error(\"DEPRECATED: .reconnect() now only accepts 'reconnectionToken' as argument.\\nYou can get this token from previously connected `room.reconnectionToken`\");\n }\n const [roomId, token] = reconnectionToken.split(\":\");\n\t\tif (!roomId || !token) {\n\t\t\tthrow new Error(\"Invalid reconnection token format.\\nThe format should be roomId:reconnectionToken\");\n\t\t}\n return await this.createMatchMakeRequest<T>('reconnect', roomId, { reconnectionToken: token }, rootSchema);\n }\n\n public async consumeSeatReservation<T>(\n response: ISeatReservation,\n rootSchema?: SchemaConstructor<T>\n ): Promise<Room<any, T>> {\n const room = this.createRoom<T>(response.name, rootSchema);\n room.roomId = response.roomId;\n room.sessionId = response.sessionId;\n\n const options: any = { sessionId: room.sessionId };\n\n // forward \"reconnection token\" in case of reconnection.\n if (response.reconnectionToken) {\n options.reconnectionToken = response.reconnectionToken;\n }\n\n room.connect(\n this.buildEndpoint(response, options),\n response,\n this.http.options.headers\n );\n\n return new Promise((resolve, reject) => {\n const onError = (code, message) => reject(new ServerError(code, message));\n room.onError.once(onError);\n\n room['onJoin'].once(() => {\n room.onError.remove(onError);\n resolve(room);\n });\n });\n }\n\n /**\n * Create a new connection with the server, and measure the latency.\n * @param options Latency measurement options (protocol, pingCount).\n */\n public getLatency(options: LatencyOptions = {}): Promise<number> {\n const protocol = options.protocol ?? \"ws\";\n const pingCount = options.pingCount ?? 1;\n\n return new Promise<number>((resolve, reject) => {\n const conn = new Connection(protocol);\n const latencies: number[] = [];\n let pingStart = 0;\n\n conn.events.onopen = () => {\n pingStart = Date.now();\n conn.send(new Uint8Array([Protocol.PING]));\n };\n\n conn.events.onmessage = (_: MessageEvent) => {\n latencies.push(Date.now() - pingStart);\n\n if (latencies.length < pingCount) {\n // Send another ping\n pingStart = Date.now();\n conn.send(new Uint8Array([Protocol.PING]));\n } else {\n // Done, calculate average and close\n conn.close();\n const average = latencies.reduce((sum, l) => sum + l, 0) / latencies.length;\n resolve(average);\n }\n };\n\n conn.events.onerror = (event: ErrorEvent) => {\n reject(new ServerError(CloseCode.ABNORMAL_CLOSURE, `Failed to get latency: ${event.message}`));\n };\n\n conn.connect(this.getHttpEndpoint());\n });\n }\n\n protected async createMatchMakeRequest<T>(\n method: string,\n roomName: string,\n options: JoinOptions = {},\n rootSchema?: SchemaConstructor<T>,\n ) {\n const httpResponse = await (this.http as HTTP<any>).post(`/matchmake/${method}/${roomName}`, {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n },\n body: options\n });\n\n // Handle HTTP error responses\n if (!httpResponse.ok) {\n // @ts-ignore\n throw new MatchMakeError(httpResponse.error.message || httpResponse.error, httpResponse.error.code || httpResponse.status);\n }\n\n const response = httpResponse.data as unknown as ISeatReservation;\n\n // forward reconnection token during \"reconnect\" methods.\n if (method === \"reconnect\") {\n response.reconnectionToken = options.reconnectionToken;\n }\n\n return await this.consumeSeatReservation<T>(response, rootSchema);\n }\n\n protected createRoom<T>(roomName: string, rootSchema?: SchemaConstructor<T>) {\n return new Room<any, T>(roomName, rootSchema);\n }\n\n protected buildEndpoint(seatReservation: ISeatReservation, options: any = {}) {\n let protocol: string = this.settings.protocol || \"ws\";\n let searchParams = this.settings.searchParams || \"\";\n\n // forward authentication token\n if (this.http.authToken) {\n options['_authToken'] = this.http.authToken;\n }\n\n // append provided options\n for (const name in options) {\n if (!options.hasOwnProperty(name)) {\n continue;\n }\n searchParams += (searchParams ? '&' : '') + `${name}=${options[name]}`;\n }\n\n if (protocol === \"h3\") {\n protocol = \"http\";\n }\n\n let endpoint = (this.settings.secure)\n ? `${protocol}s://`\n : `${protocol}://`;\n\n if (seatReservation.publicAddress) {\n endpoint += `${seatReservation.publicAddress}`;\n\n } else {\n endpoint += `${this.settings.hostname}${this.getEndpointPort()}${this.settings.pathname}`;\n }\n\n const endpointURL = `${endpoint}/${seatReservation.processId}/${seatReservation.roomId}?${searchParams}`;\n return (this.urlBuilder)\n ? this.urlBuilder(new URL(endpointURL))\n : endpointURL;\n }\n\n protected getHttpEndpoint(segments: string = '') {\n const path = segments.startsWith(\"/\") ? segments : `/${segments}`;\n\n let endpointURL = `${(this.settings.secure) ? \"https\" : \"http\"}://${this.settings.hostname}${this.getEndpointPort()}${this.settings.pathname}${path}`;\n\n if (this.settings.searchParams) {\n endpointURL += `?${this.settings.searchParams}`;\n }\n\n return (this.urlBuilder)\n ? this.urlBuilder(new URL(endpointURL))\n : endpointURL;\n }\n\n protected getEndpointPort() {\n return (this.settings.port !== 80 && this.settings.port !== 443)\n ? `:${this.settings.port}`\n : \"\";\n }\n}\n\nexport const Client = ColyseusSDK;\nexport type Client<ServerType extends SDKTypes = any, UserData = any> = InstanceType<typeof ColyseusSDK<ServerType, UserData>>;"],"names":[],"mappings":"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"}
@@ -3,7 +3,7 @@
3
3
  // This software is released under the MIT License.
4
4
  // https://opensource.org/license/MIT
5
5
  //
6
- // colyseus.js@0.17.8
6
+ // colyseus.js@0.17.11
7
7
  'use strict';
8
8
 
9
9
  var H3Transport = require('./transport/H3Transport.cjs');
@@ -3,7 +3,7 @@
3
3
  // This software is released under the MIT License.
4
4
  // https://opensource.org/license/MIT
5
5
  //
6
- // colyseus.js@0.17.8
6
+ // colyseus.js@0.17.11
7
7
  import { H3TransportTransport } from './transport/H3Transport.mjs';
8
8
  import { WebSocketTransport } from './transport/WebSocketTransport.mjs';
9
9
 
package/build/HTTP.cjs CHANGED
@@ -3,10 +3,11 @@
3
3
  // This software is released under the MIT License.
4
4
  // https://opensource.org/license/MIT
5
5
  //
6
- // colyseus.js@0.17.8
6
+ // colyseus.js@0.17.11
7
7
  'use strict';
8
8
 
9
9
  var tslib = require('tslib');
10
+ var Errors = require('./errors/Errors.cjs');
10
11
 
11
12
  function isJSONSerializable(value) {
12
13
  if (value === undefined) {
@@ -89,6 +90,7 @@ class HTTP {
89
90
  }
90
91
  executeRequest(method, path, requestOptions) {
91
92
  return tslib.__awaiter(this, void 0, void 0, function* () {
93
+ var _a;
92
94
  //
93
95
  // FIXME: if FormData is provided, merging "baseOptions.body" with
94
96
  // "options.body" will not work as intended
@@ -123,7 +125,20 @@ class HTTP {
123
125
  body,
124
126
  method });
125
127
  const url = getURLWithQueryParams(this.sdk['getHttpEndpoint'](path.toString()), mergedOptions);
126
- const response = yield fetch(url, mergedOptions);
128
+ let response;
129
+ try {
130
+ response = yield fetch(url, mergedOptions);
131
+ }
132
+ catch (err) {
133
+ // If it's an AbortError, re-throw as-is
134
+ if (err.name === 'AbortError') {
135
+ throw err;
136
+ }
137
+ // Re-throw with network error code at top level (e.g. ECONNREFUSED)
138
+ const networkError = new Errors.ServerError(((_a = err.cause) === null || _a === void 0 ? void 0 : _a.code) || err.code, err.message);
139
+ networkError.cause = err.cause;
140
+ throw networkError;
141
+ }
127
142
  const contentType = response.headers.get("content-type");
128
143
  let data;
129
144
  let error = null;
@@ -1 +1 @@
1
- {"version":3,"file":"HTTP.cjs","sources":["../src/HTTP.ts"],"sourcesContent":["import type { Router, HasRequiredKeys, Prettify, UnionToIntersection, Endpoint, HTTPMethod } from \"@colyseus/better-call\";\nimport { ColyseusSDK } from \"./Client.ts\";\n\n// Helper to check if a type is 'any'\ntype IsAny<T> = 0 extends 1 & T ? true : false;\n\n// Helper to check if a type resolves to any after indexed access\n// When T is any, T[K] is also any, but IsAny<T[K]> may not detect it due to deferred evaluation\n// We check multiple characteristics of 'any':\n// 1. Direct any check: IsAny<T>\n// 2. Accepts all string keys: string extends keyof T\n// 3. Accepts all number and symbol keys: for complete 'any' detection\ntype IsAnyOrAnyIndexed<T> = IsAny<T> extends true\n ? true\n : (string extends keyof T\n ? true\n : (number extends keyof T\n ? (symbol extends keyof T ? true : false)\n : false));\n\ntype HasRequired<\n T extends {\n body?: any;\n query?: any;\n params?: any;\n },\n> = T[\"body\"] extends object\n ? HasRequiredKeys<T[\"body\"]> extends true\n ? true\n : T[\"query\"] extends object\n ? HasRequiredKeys<T[\"query\"]> extends true\n ? true\n : T[\"params\"] extends object\n ? HasRequiredKeys<T[\"params\"]>\n : false\n : T[\"params\"] extends object\n ? HasRequiredKeys<T[\"params\"]>\n : false\n : T[\"query\"] extends object\n ? HasRequiredKeys<T[\"query\"]> extends true\n ? true\n : T[\"params\"] extends object\n ? HasRequiredKeys<T[\"params\"]>\n : false\n : T[\"params\"] extends object\n ? HasRequiredKeys<T[\"params\"]>\n : false;\n\ntype InferContext<T> = T extends (ctx: infer Ctx) => any\n ? Ctx extends object\n ? Ctx\n : never\n : never;\n\n// WithRequired - makes specific keys required\n// This works by spreading T and then overriding the specified keys to be non-nullable\ntype WithRequired<T, K extends keyof any> = Prettify<T & {\n [P in K & keyof T]-?: NonNullable<T[P]>\n}>;\n\ntype WithoutServerOnly<T extends Record<string, Endpoint>> = {\n [K in keyof T]: T[K] extends Endpoint<any, infer O>\n ? O extends { metadata: { SERVER_ONLY: true } }\n ? never\n : T[K]\n : T[K];\n};\n\n// Method-specific options type\ntype MethodOptions<API, M extends HTTPMethod> = API extends { [key: string]: infer T; }\n ? T extends Endpoint<any, infer O>\n ? O[\"method\"] extends M\n ? { [key in T[\"path\"]]: T; }\n : O[\"method\"] extends M[]\n ? M extends O[\"method\"][number]\n ? { [key in T[\"path\"]]: T; }\n : {}\n : O[\"method\"] extends \"*\"\n ? { [key in T[\"path\"]]: T; }\n : {}\n : {}\n : {};\n\nexport type RequiredOptionKeys<\n C extends {\n body?: any;\n query?: any;\n params?: any;\n },\n> = (C[\"body\"] extends object\n ? HasRequiredKeys<C[\"body\"]> extends true\n ? { body: true }\n : {}\n : {}) &\n (C[\"query\"] extends object\n ? HasRequiredKeys<C[\"query\"]> extends true\n ? { query: true }\n : {}\n : {}) &\n (C[\"params\"] extends object\n ? HasRequiredKeys<C[\"params\"]> extends true\n ? { params: true }\n : {}\n : {});\n\n\ntype CommonHeaders = {\n accept: \"application/json\" | \"text/plain\" | \"application/octet-stream\";\n \"content-type\": \"application/json\" | \"text/plain\" | \"application/x-www-form-urlencoded\" | \"multipart/form-data\" | \"application/octet-stream\";\n authorization: \"Bearer\" | \"Basic\";\n};\n\ntype FetchRequestOptions<\n Body = any,\n Query extends Record<string, any> = any,\n Params extends Record<string, any> | Array<string> | undefined = any, Res = any,\n ExtraOptions extends Record<string, any> = {}\n> = Prettify<ExtraOptions & Omit<RequestInit, \"body\"> & {\n// baseURL?: string;\n\n /**\n * Headers\n */\n headers?: CommonHeaders | Headers | HeadersInit;\n\n /**\n * Body\n */\n body?: Body;\n\n /**\n * Query parameters (key-value pairs)\n */\n query?: Query;\n\n /**\n * Dynamic parameters.\n *\n * If url is defined as /path/:id, params will be { id: string }\n */\n params?: Params;\n}>\n\ntype ResponseData<T> = {\n ok: true;\n data: T;\n error: null,\n response: Response;\n headers: Headers;\n status: number;\n statusText: string;\n};\n\ntype ResponseError<E> = {\n ok: false,\n data: null,\n error: Prettify<(E extends Record<string, any> ? E : {\n message?: string;\n }) & {\n code?: string;\n }>;\n response: Response;\n headers: Headers;\n status: number;\n statusText: string;\n};\n\ntype FetchResponse<T, E extends Record<string, unknown> | unknown = unknown, Throw extends boolean = false> =\n Throw extends true\n ? T\n : ResponseData<T> | ResponseError<E>;\n\nexport function isJSONSerializable(value: any) {\n\tif (value === undefined) {\n\t\treturn false;\n\t}\n\tconst t = typeof value;\n\tif (t === \"string\" || t === \"number\" || t === \"boolean\" || t === null) {\n\t\treturn true;\n\t}\n\tif (t !== \"object\") {\n\t\treturn false;\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn true;\n\t}\n\tif (value.buffer) {\n\t\treturn false;\n\t}\n\treturn (\n\t\t(value.constructor && value.constructor.name === \"Object\") ||\n\t\ttypeof value.toJSON === \"function\"\n\t);\n}\n\nconst JSON_RE = /^application\\/(?:[\\w!#$%&*.^`~-]*\\+)?json(;.+)?$/i;\n\nexport type ResponseType = \"json\" | \"text\" | \"blob\";\nexport function detectResponseType(request: Response): ResponseType {\n\tconst _contentType = request.headers.get(\"content-type\");\n\tconst textTypes = new Set([\n\t\t\"image/svg\",\n\t\t\"application/xml\",\n\t\t\"application/xhtml\",\n\t\t\"application/html\",\n\t]);\n\tif (!_contentType) {\n\t\treturn \"json\";\n\t}\n\tconst contentType = _contentType.split(\";\").shift() || \"\";\n\tif (JSON_RE.test(contentType)) {\n\t\treturn \"json\";\n\t}\n\tif (textTypes.has(contentType) || contentType.startsWith(\"text/\")) {\n\t\treturn \"text\";\n\t}\n\treturn \"blob\";\n}\n\nfunction getURLWithQueryParams(url: string, option?: FetchRequestOptions) {\n\tconst { params, query } = option || {};\n\n\t// Parse the URL and extract existing query parameters\n\tconst [urlPath, urlQuery] = url.split(\"?\");\n\tlet path = urlPath;\n\n\t// Handle params substitution\n\tif (params) {\n\t\tif (Array.isArray(params)) {\n\t\t\tconst paramPaths = path.split(\"/\").filter((p) => p.startsWith(\":\"));\n\t\t\tfor (const [index, key] of paramPaths.entries()) {\n\t\t\t\tconst value = params[index];\n\t\t\t\tpath = path.replace(key, value);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (const [key, value] of Object.entries(params)) {\n\t\t\t\tpath = path.replace(`:${key}`, String(value));\n\t\t\t}\n\t\t}\n\t}\n\n\t// Merge query parameters from URL and options\n\tconst queryParams = new URLSearchParams(urlQuery);\n\tif (query) {\n\t\tfor (const [key, value] of Object.entries(query)) {\n\t\t\tif (value == null) continue;\n\t\t\tqueryParams.set(key, String(value));\n\t\t}\n\t}\n\n\t// Build final URL\n\tlet queryParamString = queryParams.toString();\n\tqueryParamString = queryParamString.length > 0 ? `?${queryParamString}`.replace(/\\+/g, \"%20\") : \"\";\n\n\treturn `${path}${queryParamString}`;\n}\n\ntype InferredAPI<R> = R extends { endpoints: Record<string, Endpoint> }\n ? WithoutServerOnly<R[\"endpoints\"]>\n : WithoutServerOnly<R & Record<string, Endpoint>>;\n\nexport class HTTP<R extends Router | Router[\"endpoints\"]> {\n public authToken: string | undefined;\n public options: FetchRequestOptions;\n\n private sdk: ColyseusSDK;\n\n constructor(sdk: ColyseusSDK, baseOptions: FetchRequestOptions) {\n this.sdk = sdk;\n this.options = baseOptions;\n }\n\n private async request<\n M extends HTTPMethod,\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, M>>> = Prettify<UnionToIntersection<MethodOptions<API, M>>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n method: M,\n path: K,\n options?: FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n > {\n return this.executeRequest(method, path, options);\n }\n\n // Overload for endpoints WITH required fields (body/query/params)\n get<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"GET\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"GET\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends true ? K : never),\n options: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : WithRequired<FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>, keyof RequiredOptionKeys<C>>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n // Overload for endpoints WITHOUT required fields (permissive when R is 'any')\n get<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"GET\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"GET\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends false ? K : never),\n options?: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n get(path: any, options?: any): Promise<any> {\n return this.request(\"GET\", path, options);\n }\n\n // Overload for endpoints WITH required fields (body/query/params)\n post<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"POST\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"POST\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: (IsAnyOrAnyIndexed<R> extends true ? string : never) | (IsAny<API> extends true ? string : never) | (HasRequired<C> extends true ? K : never),\n options: IsAnyOrAnyIndexed<R> extends true ? FetchRequestOptions<any, any, any> : (IsAny<API> extends true\n ? FetchRequestOptions<any, any, any>\n : WithRequired<FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>, keyof RequiredOptionKeys<C>>)\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n // Overload for endpoints WITHOUT required fields (permissive when R is 'any')\n post<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"POST\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"POST\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: (IsAnyOrAnyIndexed<R> extends true ? string : never) | (IsAny<API> extends true ? string : never) | (HasRequired<C> extends false ? K : never),\n options?: IsAnyOrAnyIndexed<R> extends true ? FetchRequestOptions<any, any, any> : (IsAny<API> extends true\n ? FetchRequestOptions<any, any, any>\n : FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>)\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n post(path: any, options?: any): Promise<any> {\n return this.request(\"POST\", path, options);\n }\n\n // Overload for endpoints WITH required fields (body/query/params)\n delete<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"DELETE\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"DELETE\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends true ? K : never),\n options: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : WithRequired<FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>, keyof RequiredOptionKeys<C>>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n // Overload for endpoints WITHOUT required fields (permissive when R is 'any')\n delete<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"DELETE\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"DELETE\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends false ? K : never),\n options?: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n delete(path: any, options?: any): Promise<any> {\n return this.request(\"DELETE\", path, options);\n }\n\n // Overload for endpoints WITH required fields (body/query/params)\n patch<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"PATCH\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"PATCH\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends true ? K : never),\n options: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : WithRequired<FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>, keyof RequiredOptionKeys<C>>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n // Overload for endpoints WITHOUT required fields (permissive when R is 'any')\n patch<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"PATCH\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"PATCH\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends false ? K : never),\n options?: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n patch(path: any, options?: any): Promise<any> {\n return this.request(\"PATCH\", path, options);\n }\n\n // Overload for endpoints WITH required fields (body/query/params)\n put<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"PUT\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"PUT\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends true ? K : never),\n options: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : WithRequired<FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>, keyof RequiredOptionKeys<C>>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n // Overload for endpoints WITHOUT required fields (permissive when R is 'any')\n put<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"PUT\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"PUT\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends false ? K : never),\n options?: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n put(path: any, options?: any): Promise<any> {\n return this.request(\"PUT\", path, options);\n }\n\n protected async executeRequest<M extends HTTPMethod>(\n method: M,\n path: any,\n requestOptions?: any\n ): Promise<any> {\n //\n // FIXME: if FormData is provided, merging \"baseOptions.body\" with\n // \"options.body\" will not work as intended\n //\n let body = (this.options.body)\n ? { ...this.options.body, ...(requestOptions?.body as object || {}) }\n : requestOptions?.body;\n\n const query = (this.options.query)\n ? { ...this.options.query, ...(requestOptions?.query as object || {}) }\n : requestOptions?.query;\n\n const params = (this.options.params)\n ? { ...this.options.params, ...(requestOptions?.params as object || {}) }\n : requestOptions?.params;\n\n const headers = new Headers(\n (this.options.headers)\n ? { ...this.options.headers, ...(requestOptions?.headers || {}) }\n : requestOptions?.headers\n );\n\n // Add Authorization header if authToken is set\n if (this.authToken && !headers.has(\"authorization\")) {\n headers.set(\"authorization\", `Bearer ${this.authToken}`);\n }\n\n // Stringify JSON-serializable objects for fetch() body\n if (isJSONSerializable(body) && typeof body === 'object' && body !== null) {\n if (!headers.has(\"content-type\")) {\n headers.set(\"content-type\", \"application/json\");\n }\n for (const [key, value] of Object.entries(body)) {\n if (value instanceof Date) {\n body[key] = value.toISOString();\n }\n }\n body = JSON.stringify(body);\n }\n\n const mergedOptions = {\n credentials: requestOptions?.credentials || \"include\",\n ...this.options,\n ...requestOptions,\n query,\n params,\n headers,\n body,\n method,\n };\n\n const url = getURLWithQueryParams(this.sdk['getHttpEndpoint'](path.toString()), mergedOptions);\n\n const response = await fetch(url, mergedOptions);\n const contentType = response.headers.get(\"content-type\");\n\n let data: any;\n let error = null;\n\n // TODO: improve content-type detection here!\n if (contentType?.indexOf(\"json\")) {\n data = await response.json();\n\n } else if (contentType?.indexOf(\"text\")) {\n data = await response.text();\n\n } else {\n data = await response.blob();\n }\n\n if (!response.ok) {\n // TODO: throw error here?!\n error = data;\n data = null;\n }\n\n return {\n ok: response.ok,\n headers: response.headers,\n data,\n error,\n status: response.status,\n statusText: response.statusText,\n response,\n };\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"HTTP.cjs","sources":["../src/HTTP.ts"],"sourcesContent":["import type { Router, HasRequiredKeys, Prettify, UnionToIntersection, Endpoint, HTTPMethod } from \"@colyseus/better-call\";\nimport { ColyseusSDK } from \"./Client.ts\";\nimport { ServerError } from \"./errors/Errors.ts\";\n\n/**\n * TODO: we should clean up the types repetition in this file.\n */\n\n// Helper to check if a type is 'any'\ntype IsAny<T> = 0 extends 1 & T ? true : false;\n\n// Helper to check if a type resolves to any after indexed access\n// When T is any, T[K] is also any, but IsAny<T[K]> may not detect it due to deferred evaluation\n// We check multiple characteristics of 'any':\n// 1. Direct any check: IsAny<T>\n// 2. Accepts all string keys: string extends keyof T\n// 3. Accepts all number and symbol keys: for complete 'any' detection\ntype IsAnyOrAnyIndexed<T> = IsAny<T> extends true\n ? true\n : (string extends keyof T\n ? true\n : (number extends keyof T\n ? (symbol extends keyof T ? true : false)\n : false));\n\ntype HasRequired<\n T extends {\n body?: any;\n query?: any;\n params?: any;\n },\n> = T[\"body\"] extends object\n ? HasRequiredKeys<T[\"body\"]> extends true\n ? true\n : T[\"query\"] extends object\n ? HasRequiredKeys<T[\"query\"]> extends true\n ? true\n : T[\"params\"] extends object\n ? HasRequiredKeys<T[\"params\"]>\n : false\n : T[\"params\"] extends object\n ? HasRequiredKeys<T[\"params\"]>\n : false\n : T[\"query\"] extends object\n ? HasRequiredKeys<T[\"query\"]> extends true\n ? true\n : T[\"params\"] extends object\n ? HasRequiredKeys<T[\"params\"]>\n : false\n : T[\"params\"] extends object\n ? HasRequiredKeys<T[\"params\"]>\n : false;\n\ntype InferContext<T> = T extends (ctx: infer Ctx) => any\n ? Ctx extends object\n ? Ctx\n : never\n : never;\n\n// WithRequired - makes specific keys required\n// This works by spreading T and then overriding the specified keys to be non-nullable\ntype WithRequired<T, K extends keyof any> = Prettify<T & {\n [P in K & keyof T]-?: NonNullable<T[P]>\n}>;\n\ntype WithoutServerOnly<T extends Record<string, Endpoint>> = {\n [K in keyof T]: T[K] extends Endpoint<any, infer O>\n ? O extends { metadata: { SERVER_ONLY: true } }\n ? never\n : T[K]\n : T[K];\n};\n\n// Method-specific options type\ntype MethodOptions<API, M extends HTTPMethod> = API extends { [key: string]: infer T; }\n ? T extends Endpoint<any, infer O>\n ? O[\"method\"] extends M\n ? { [key in T[\"path\"]]: T; }\n : O[\"method\"] extends M[]\n ? M extends O[\"method\"][number]\n ? { [key in T[\"path\"]]: T; }\n : {}\n : O[\"method\"] extends \"*\"\n ? { [key in T[\"path\"]]: T; }\n : {}\n : {}\n : {};\n\nexport type RequiredOptionKeys<\n C extends {\n body?: any;\n query?: any;\n params?: any;\n },\n> = (C[\"body\"] extends object\n ? HasRequiredKeys<C[\"body\"]> extends true\n ? { body: true }\n : {}\n : {}) &\n (C[\"query\"] extends object\n ? HasRequiredKeys<C[\"query\"]> extends true\n ? { query: true }\n : {}\n : {}) &\n (C[\"params\"] extends object\n ? HasRequiredKeys<C[\"params\"]> extends true\n ? { params: true }\n : {}\n : {});\n\n\ntype CommonHeaders = {\n accept: \"application/json\" | \"text/plain\" | \"application/octet-stream\";\n \"content-type\": \"application/json\" | \"text/plain\" | \"application/x-www-form-urlencoded\" | \"multipart/form-data\" | \"application/octet-stream\";\n authorization: \"Bearer\" | \"Basic\";\n};\n\ntype FetchRequestOptions<\n Body = any,\n Query extends Record<string, any> = any,\n Params extends Record<string, any> | Array<string> | undefined = any, Res = any,\n ExtraOptions extends Record<string, any> = {}\n> = Prettify<ExtraOptions & Omit<RequestInit, \"body\"> & {\n// baseURL?: string;\n\n /**\n * Headers\n */\n headers?: CommonHeaders | Headers | HeadersInit;\n\n /**\n * Body\n */\n body?: Body;\n\n /**\n * Query parameters (key-value pairs)\n */\n query?: Query;\n\n /**\n * Dynamic parameters.\n *\n * If url is defined as /path/:id, params will be { id: string }\n */\n params?: Params;\n}>\n\ntype ResponseData<T> = {\n ok: true;\n data: T;\n error: null,\n response: Response;\n headers: Headers;\n status: number;\n statusText: string;\n};\n\ntype ResponseError<E> = {\n ok: false,\n data: null,\n error: Prettify<(E extends Record<string, any> ? E : {\n message?: string;\n }) & {\n code?: string;\n }>;\n response: Response;\n headers: Headers;\n status: number;\n statusText: string;\n};\n\ntype FetchResponse<T, E extends Record<string, unknown> | unknown = unknown, Throw extends boolean = false> =\n Throw extends true\n ? T\n : ResponseData<T> | ResponseError<E>;\n\nexport function isJSONSerializable(value: any) {\n\tif (value === undefined) {\n\t\treturn false;\n\t}\n\tconst t = typeof value;\n\tif (t === \"string\" || t === \"number\" || t === \"boolean\" || t === null) {\n\t\treturn true;\n\t}\n\tif (t !== \"object\") {\n\t\treturn false;\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn true;\n\t}\n\tif (value.buffer) {\n\t\treturn false;\n\t}\n\treturn (\n\t\t(value.constructor && value.constructor.name === \"Object\") ||\n\t\ttypeof value.toJSON === \"function\"\n\t);\n}\n\nconst JSON_RE = /^application\\/(?:[\\w!#$%&*.^`~-]*\\+)?json(;.+)?$/i;\n\nexport type ResponseType = \"json\" | \"text\" | \"blob\";\nexport function detectResponseType(request: Response): ResponseType {\n\tconst _contentType = request.headers.get(\"content-type\");\n\tconst textTypes = new Set([\n\t\t\"image/svg\",\n\t\t\"application/xml\",\n\t\t\"application/xhtml\",\n\t\t\"application/html\",\n\t]);\n\tif (!_contentType) {\n\t\treturn \"json\";\n\t}\n\tconst contentType = _contentType.split(\";\").shift() || \"\";\n\tif (JSON_RE.test(contentType)) {\n\t\treturn \"json\";\n\t}\n\tif (textTypes.has(contentType) || contentType.startsWith(\"text/\")) {\n\t\treturn \"text\";\n\t}\n\treturn \"blob\";\n}\n\nfunction getURLWithQueryParams(url: string, option?: FetchRequestOptions) {\n\tconst { params, query } = option || {};\n\n\t// Parse the URL and extract existing query parameters\n\tconst [urlPath, urlQuery] = url.split(\"?\");\n\tlet path = urlPath;\n\n\t// Handle params substitution\n\tif (params) {\n\t\tif (Array.isArray(params)) {\n\t\t\tconst paramPaths = path.split(\"/\").filter((p) => p.startsWith(\":\"));\n\t\t\tfor (const [index, key] of paramPaths.entries()) {\n\t\t\t\tconst value = params[index];\n\t\t\t\tpath = path.replace(key, value);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (const [key, value] of Object.entries(params)) {\n\t\t\t\tpath = path.replace(`:${key}`, String(value));\n\t\t\t}\n\t\t}\n\t}\n\n\t// Merge query parameters from URL and options\n\tconst queryParams = new URLSearchParams(urlQuery);\n\tif (query) {\n\t\tfor (const [key, value] of Object.entries(query)) {\n\t\t\tif (value == null) continue;\n\t\t\tqueryParams.set(key, String(value));\n\t\t}\n\t}\n\n\t// Build final URL\n\tlet queryParamString = queryParams.toString();\n\tqueryParamString = queryParamString.length > 0 ? `?${queryParamString}`.replace(/\\+/g, \"%20\") : \"\";\n\n\treturn `${path}${queryParamString}`;\n}\n\ntype InferredAPI<R> = R extends { endpoints: Record<string, Endpoint> }\n ? WithoutServerOnly<R[\"endpoints\"]>\n : WithoutServerOnly<R & Record<string, Endpoint>>;\n\nexport class HTTP<R extends Router | Router[\"endpoints\"]> {\n public authToken: string | undefined;\n public options: FetchRequestOptions;\n\n private sdk: ColyseusSDK;\n\n constructor(sdk: ColyseusSDK, baseOptions: FetchRequestOptions) {\n this.sdk = sdk;\n this.options = baseOptions;\n }\n\n private async request<\n M extends HTTPMethod,\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, M>>> = Prettify<UnionToIntersection<MethodOptions<API, M>>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n method: M,\n path: K,\n options?: FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n > {\n return this.executeRequest(method, path, options);\n }\n\n // Overload for endpoints WITH required fields (body/query/params)\n get<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"GET\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"GET\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends true ? K : never),\n options: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : WithRequired<FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>, keyof RequiredOptionKeys<C>>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n // Overload for endpoints WITHOUT required fields (permissive when R is 'any')\n get<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"GET\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"GET\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends false ? K : never),\n options?: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n get(path: any, options?: any): Promise<any> {\n return this.request(\"GET\", path, options);\n }\n\n // Overload for endpoints WITH required fields (body/query/params)\n post<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"POST\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"POST\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: (IsAnyOrAnyIndexed<R> extends true ? string : never) | (IsAny<API> extends true ? string : never) | (HasRequired<C> extends true ? K : never),\n options: IsAnyOrAnyIndexed<R> extends true ? FetchRequestOptions<any, any, any> : (IsAny<API> extends true\n ? FetchRequestOptions<any, any, any>\n : WithRequired<FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>, keyof RequiredOptionKeys<C>>)\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n // Overload for endpoints WITHOUT required fields (permissive when R is 'any')\n post<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"POST\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"POST\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: (IsAnyOrAnyIndexed<R> extends true ? string : never) | (IsAny<API> extends true ? string : never) | (HasRequired<C> extends false ? K : never),\n options?: IsAnyOrAnyIndexed<R> extends true ? FetchRequestOptions<any, any, any> : (IsAny<API> extends true\n ? FetchRequestOptions<any, any, any>\n : FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>)\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n post(path: any, options?: any): Promise<any> {\n return this.request(\"POST\", path, options);\n }\n\n // Overload for endpoints WITH required fields (body/query/params)\n delete<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"DELETE\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"DELETE\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends true ? K : never),\n options: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : WithRequired<FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>, keyof RequiredOptionKeys<C>>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n // Overload for endpoints WITHOUT required fields (permissive when R is 'any')\n delete<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"DELETE\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"DELETE\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends false ? K : never),\n options?: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n delete(path: any, options?: any): Promise<any> {\n return this.request(\"DELETE\", path, options);\n }\n\n // Overload for endpoints WITH required fields (body/query/params)\n patch<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"PATCH\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"PATCH\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends true ? K : never),\n options: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : WithRequired<FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>, keyof RequiredOptionKeys<C>>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n // Overload for endpoints WITHOUT required fields (permissive when R is 'any')\n patch<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"PATCH\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"PATCH\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends false ? K : never),\n options?: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n patch(path: any, options?: any): Promise<any> {\n return this.request(\"PATCH\", path, options);\n }\n\n // Overload for endpoints WITH required fields (body/query/params)\n put<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"PUT\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"PUT\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends true ? K : never),\n options: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : WithRequired<FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>, keyof RequiredOptionKeys<C>>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n // Overload for endpoints WITHOUT required fields (permissive when R is 'any')\n put<\n API extends InferredAPI<R> = InferredAPI<R>,\n OPT extends Prettify<UnionToIntersection<MethodOptions<API, \"PUT\">>> = Prettify<UnionToIntersection<MethodOptions<API, \"PUT\">>>,\n K extends keyof OPT = keyof OPT,\n C extends InferContext<OPT[K]> = InferContext<OPT[K]>\n >(\n path: IsAnyOrAnyIndexed<R> extends true ? string : (HasRequired<C> extends false ? K : never),\n options?: IsAnyOrAnyIndexed<R> extends true\n ? FetchRequestOptions<any, any, any>\n : FetchRequestOptions<C[\"body\"], C[\"query\"], C[\"params\"]>\n ): Promise<\n FetchResponse<Awaited<ReturnType<OPT[K] extends Endpoint ? OPT[K] : never>>>\n >;\n\n put(path: any, options?: any): Promise<any> {\n return this.request(\"PUT\", path, options);\n }\n\n protected async executeRequest<M extends HTTPMethod>(\n method: M,\n path: any,\n requestOptions?: any\n ): Promise<any> {\n //\n // FIXME: if FormData is provided, merging \"baseOptions.body\" with\n // \"options.body\" will not work as intended\n //\n let body = (this.options.body)\n ? { ...this.options.body, ...(requestOptions?.body as object || {}) }\n : requestOptions?.body;\n\n const query = (this.options.query)\n ? { ...this.options.query, ...(requestOptions?.query as object || {}) }\n : requestOptions?.query;\n\n const params = (this.options.params)\n ? { ...this.options.params, ...(requestOptions?.params as object || {}) }\n : requestOptions?.params;\n\n const headers = new Headers(\n (this.options.headers)\n ? { ...this.options.headers, ...(requestOptions?.headers || {}) }\n : requestOptions?.headers\n );\n\n // Add Authorization header if authToken is set\n if (this.authToken && !headers.has(\"authorization\")) {\n headers.set(\"authorization\", `Bearer ${this.authToken}`);\n }\n\n // Stringify JSON-serializable objects for fetch() body\n if (isJSONSerializable(body) && typeof body === 'object' && body !== null) {\n if (!headers.has(\"content-type\")) {\n headers.set(\"content-type\", \"application/json\");\n }\n for (const [key, value] of Object.entries(body)) {\n if (value instanceof Date) {\n body[key] = value.toISOString();\n }\n }\n body = JSON.stringify(body);\n }\n\n const mergedOptions = {\n credentials: requestOptions?.credentials || \"include\",\n ...this.options,\n ...requestOptions,\n query,\n params,\n headers,\n body,\n method,\n };\n\n const url = getURLWithQueryParams(this.sdk['getHttpEndpoint'](path.toString()), mergedOptions);\n\n let response: Response;\n try {\n response = await fetch(url, mergedOptions);\n } catch (err: any) {\n // If it's an AbortError, re-throw as-is\n if (err.name === 'AbortError') {\n throw err;\n }\n // Re-throw with network error code at top level (e.g. ECONNREFUSED)\n const networkError: ServerError = new ServerError(err.cause?.code || err.code, err.message);\n networkError.cause = err.cause;\n throw networkError;\n }\n const contentType = response.headers.get(\"content-type\");\n\n let data: any;\n let error = null;\n\n // TODO: improve content-type detection here!\n if (contentType?.indexOf(\"json\")) {\n data = await response.json();\n\n } else if (contentType?.indexOf(\"text\")) {\n data = await response.text();\n\n } else {\n data = await response.blob();\n }\n\n if (!response.ok) {\n // TODO: throw error here?!\n error = data;\n data = null;\n }\n\n return {\n ok: response.ok,\n headers: response.headers,\n data,\n error,\n status: response.status,\n statusText: response.statusText,\n response,\n };\n }\n}\n"],"names":["ServerError"],"mappings":";;;;;;;;;;;AAiLM,SAAU,kBAAkB,CAAC,KAAU,EAAA;AAC5C,IAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACxB,QAAA,OAAO,KAAK;IACb;AACA,IAAA,MAAM,CAAC,GAAG,OAAO,KAAK;AACtB,IAAA,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,KAAK,IAAI,EAAE;AACtE,QAAA,OAAO,IAAI;IACZ;AACA,IAAA,IAAI,CAAC,KAAK,QAAQ,EAAE;AACnB,QAAA,OAAO,KAAK;IACb;AACA,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACzB,QAAA,OAAO,IAAI;IACZ;AACA,IAAA,IAAI,KAAK,CAAC,MAAM,EAAE;AACjB,QAAA,OAAO,KAAK;IACb;AACA,IAAA,QACC,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,KAAK,QAAQ;AACzD,QAAA,OAAO,KAAK,CAAC,MAAM,KAAK,UAAU;AAEpC;AA0BA,SAAS,qBAAqB,CAAC,GAAW,EAAE,MAA4B,EAAA;IACvE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,EAAE;;AAGtC,IAAA,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;IAC1C,IAAI,IAAI,GAAG,OAAO;;IAGlB,IAAI,MAAM,EAAE;AACX,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACnE,YAAA,KAAK,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE;AAChD,gBAAA,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;gBAC3B,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC;YAChC;QACD;aAAO;AACN,YAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAClD,gBAAA,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAA,CAAA,EAAI,GAAG,CAAA,CAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAC9C;QACD;IACD;;AAGA,IAAA,MAAM,WAAW,GAAG,IAAI,eAAe,CAAC,QAAQ,CAAC;IACjD,IAAI,KAAK,EAAE;AACV,QAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACjD,IAAI,KAAK,IAAI,IAAI;gBAAE;YACnB,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;QACpC;IACD;;AAGA,IAAA,IAAI,gBAAgB,GAAG,WAAW,CAAC,QAAQ,EAAE;IAC7C,gBAAgB,GAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC,GAAG,CAAA,CAAA,EAAI,gBAAgB,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE;AAElG,IAAA,OAAO,CAAA,EAAG,IAAI,CAAA,EAAG,gBAAgB,EAAE;AACpC;MAMa,IAAI,CAAA;IAMb,WAAA,CAAY,GAAgB,EAAE,WAAgC,EAAA;AAC1D,QAAA,IAAI,CAAC,GAAG,GAAG,GAAG;AACd,QAAA,IAAI,CAAC,OAAO,GAAG,WAAW;IAC9B;AAEc,IAAA,OAAO,CAOjB,MAAS,EACT,IAAO,EACP,OAAiE,EAAA;;YAIjE,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC;QACrD,CAAC,CAAA;AAAA,IAAA;IAgCD,GAAG,CAAC,IAAS,EAAE,OAAa,EAAA;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC;IAC7C;IAgCA,IAAI,CAAC,IAAS,EAAE,OAAa,EAAA;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC;IAC9C;IAgCA,MAAM,CAAC,IAAS,EAAE,OAAa,EAAA;QAC3B,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC;IAChD;IAgCA,KAAK,CAAC,IAAS,EAAE,OAAa,EAAA;QAC1B,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC;IAC/C;IAgCA,GAAG,CAAC,IAAS,EAAE,OAAa,EAAA;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC;IAC7C;AAEgB,IAAA,cAAc,CAC1B,MAAS,EACT,IAAS,EACT,cAAoB,EAAA;;;;;;;YAMpB,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI;AACzB,kBAAC,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAA,GAAM,CAAA,cAAc,KAAA,IAAA,IAAd,cAAc,KAAA,MAAA,GAAA,MAAA,GAAd,cAAc,CAAE,IAAc,KAAI,EAAE,EAAC,GACjE,cAAc,KAAA,IAAA,IAAd,cAAc,KAAA,MAAA,GAAA,MAAA,GAAd,cAAc,CAAE,IAAI;YAE1B,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK;AAC7B,kBAAC,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAA,GAAM,CAAA,cAAc,KAAA,IAAA,IAAd,cAAc,KAAA,MAAA,GAAA,MAAA,GAAd,cAAc,CAAE,KAAe,KAAI,EAAE,EAAC,GACnE,cAAc,KAAA,IAAA,IAAd,cAAc,KAAA,MAAA,GAAA,MAAA,GAAd,cAAc,CAAE,KAAK;YAE3B,MAAM,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM;AAC/B,kBAAC,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAA,GAAM,CAAA,cAAc,KAAA,IAAA,IAAd,cAAc,KAAA,MAAA,GAAA,MAAA,GAAd,cAAc,CAAE,MAAgB,KAAI,EAAE,EAAC,GACrE,cAAc,KAAA,IAAA,IAAd,cAAc,KAAA,MAAA,GAAA,MAAA,GAAd,cAAc,CAAE,MAAM;YAE5B,MAAM,OAAO,GAAG,IAAI,OAAO,CACvB,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO;AACjB,kBAAC,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,MAAA,CAAA,EAAA,EAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAA,GAAM,CAAA,cAAc,KAAA,IAAA,IAAd,cAAc,uBAAd,cAAc,CAAE,OAAO,KAAI,EAAE,EAAC,GAC7D,cAAc,KAAA,IAAA,IAAd,cAAc,KAAA,MAAA,GAAA,MAAA,GAAd,cAAc,CAAE,OAAO,CAChC;;AAGD,YAAA,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE;gBACjD,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,CAAA,OAAA,EAAU,IAAI,CAAC,SAAS,CAAA,CAAE,CAAC;YAC5D;;AAGA,YAAA,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE;gBACvE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE;AAC9B,oBAAA,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,kBAAkB,CAAC;gBACnD;AACA,gBAAA,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;AAC7C,oBAAA,IAAI,KAAK,YAAY,IAAI,EAAE;wBACvB,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE;oBACnC;gBACJ;AACA,gBAAA,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAC/B;YAEA,MAAM,aAAa,+CACf,WAAW,EAAE,CAAA,cAAc,KAAA,IAAA,IAAd,cAAc,KAAA,MAAA,GAAA,MAAA,GAAd,cAAc,CAAE,WAAW,KAAI,SAAS,EAAA,EAClD,IAAI,CAAC,OAAO,CAAA,EACZ,cAAc,CAAA,EAAA,EACjB,KAAK;gBACL,MAAM;gBACN,OAAO;gBACP,IAAI;AACJ,gBAAA,MAAM,GACT;AAED,YAAA,MAAM,GAAG,GAAG,qBAAqB,CAAC,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,EAAE,aAAa,CAAC;AAE9F,YAAA,IAAI,QAAkB;AACtB,YAAA,IAAI;gBACA,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,aAAa,CAAC;YAC9C;YAAE,OAAO,GAAQ,EAAE;;AAEf,gBAAA,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE;AAC3B,oBAAA,MAAM,GAAG;gBACb;;gBAEA,MAAM,YAAY,GAAgB,IAAIA,kBAAW,CAAC,CAAA,CAAA,EAAA,GAAA,GAAG,CAAC,KAAK,0CAAE,IAAI,KAAI,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC;AAC3F,gBAAA,YAAY,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK;AAC9B,gBAAA,MAAM,YAAY;YACtB;YACA,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;AAExD,YAAA,IAAI,IAAS;YACb,IAAI,KAAK,GAAG,IAAI;;YAGhB,IAAI,WAAW,KAAA,IAAA,IAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAE,OAAO,CAAC,MAAM,CAAC,EAAE;AAC9B,gBAAA,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;YAEhC;iBAAO,IAAI,WAAW,KAAA,IAAA,IAAX,WAAW,KAAA,MAAA,GAAA,MAAA,GAAX,WAAW,CAAE,OAAO,CAAC,MAAM,CAAC,EAAE;AACrC,gBAAA,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;YAEhC;iBAAO;AACH,gBAAA,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE;YAChC;AAEA,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE;;gBAEd,KAAK,GAAG,IAAI;gBACZ,IAAI,GAAG,IAAI;YACf;YAEA,OAAO;gBACH,EAAE,EAAE,QAAQ,CAAC,EAAE;gBACf,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,IAAI;gBACJ,KAAK;gBACL,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,UAAU,EAAE,QAAQ,CAAC,UAAU;gBAC/B,QAAQ;aACX;QACL,CAAC,CAAA;AAAA,IAAA;AACJ;;;;;"}