{"version":3,"file":"Client.js","sourceRoot":"","sources":["../src/Client.ts"],"names":[],"mappings":"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","sourcesContent":["import { ServerError } from './errors/Errors';\nimport { Room } from './Room';\nimport { SchemaConstructor } from './serializer/SchemaSerializer';\nimport { HTTP } from \"./HTTP\";\nimport { Auth } from './Auth';\nimport { SeatReservation } from './Protocol';\nimport { discordURLBuilder } from './3rd_party/discord';\n\nexport type JoinOptions = any;\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}\n\nexport interface ClientOptions {\n    headers?: { [id: string]: string };\n    urlBuilder?: (url: URL) => string;\n}\n\nexport class Client {\n    static VERSION = process.env.VERSION;\n\n    public http: HTTP;\n    public auth: Auth;\n\n    protected settings: EndpointSettings;\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        this.http = new HTTP(this, options?.headers || {});\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    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    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    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    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    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 = any>(\n        response: SeatReservation,\n        rootSchema?: SchemaConstructor<T>,\n        reuseRoomInstance?: Room // used in devMode\n    ): Promise<Room<T>> {\n        const room = this.createRoom<T>(response.room.name, rootSchema);\n        room.roomId = response.room.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        const targetRoom = reuseRoomInstance || room;\n        room.connect(this.buildEndpoint(response.room, options, response.protocol), response.devMode && (async () => {\n            console.info(`[Colyseus devMode]: ${String.fromCodePoint(0x1F504)} Re-establishing connection with room id '${room.roomId}'...`); // 🔄\n\n            let retryCount = 0;\n            let retryMaxRetries = 8;\n\n            const retryReconnection = async () => {\n                retryCount++;\n\n                try {\n                    await this.consumeSeatReservation(response, rootSchema, targetRoom);\n                    console.info(`[Colyseus devMode]: ${String.fromCodePoint(0x2705)} Successfully re-established connection with room '${room.roomId}'`); // ✅\n\n                } catch (e) {\n                    if (retryCount < retryMaxRetries) {\n                        console.info(`[Colyseus devMode]: ${String.fromCodePoint(0x1F504)} retrying... (${retryCount} out of ${retryMaxRetries})`); // 🔄\n                        setTimeout(retryReconnection, 2000);\n\n                    } else {\n                        console.info(`[Colyseus devMode]: ${String.fromCodePoint(0x274C)} Failed to reconnect. Is your server running? Please check server logs.`); // ❌\n                    }\n                }\n            };\n\n            setTimeout(retryReconnection, 2000);\n        }), targetRoom, response, this.http.headers);\n\n        return new Promise((resolve, reject) => {\n            const onError = (code, message) => reject(new ServerError(code, message));\n            targetRoom.onError.once(onError);\n\n            targetRoom['onJoin'].once(() => {\n                targetRoom.onError.remove(onError);\n                resolve(targetRoom);\n            });\n        });\n    }\n\n    protected async createMatchMakeRequest<T = any>(\n        method: string,\n        roomName: string,\n        options: JoinOptions = {},\n        rootSchema?: SchemaConstructor<T>,\n        reuseRoomInstance?: Room,\n    ) {\n        const response = (\n            await this.http.post<SeatReservation>(`matchmake/${method}/${roomName}`, {\n                headers: {\n                    'Accept': 'application/json',\n                    'Content-Type': 'application/json'\n                },\n                body: JSON.stringify(options)\n            })\n        ).data;\n\n        // FIXME: HTTP class is already handling this as ServerError.\n        // @ts-ignore\n        if (response.error) { throw new MatchMakeError(response.error, response.code); }\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, reuseRoomInstance);\n    }\n\n    protected createRoom<T = any>(roomName: string, rootSchema?: SchemaConstructor<T>) {\n        return new Room<T>(roomName, rootSchema);\n    }\n\n    protected buildEndpoint(room: any, options: any = {}, protocol: string = \"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 (room.publicAddress) {\n            endpoint += `${room.publicAddress}`;\n\n        } else {\n            endpoint += `${this.settings.hostname}${this.getEndpointPort()}${this.settings.pathname}`;\n        }\n\n        const endpointURL = `${endpoint}/${room.processId}/${room.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"]}