pw-js-api 0.3.9-dev.8d142df → 0.3.10-dev.38f4253
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.
- package/browser/pw.dev.js +2 -2
- package/browser/pw.prod.js +1 -1
- package/cm/api/PWApiClient.js +3 -2
- package/cm/game/PWGameClient.d.ts +2 -2
- package/cm/game/PWGameClient.js +6 -6
- package/esm/api/PWApiClient.js +3 -2
- package/esm/game/PWGameClient.d.ts +2 -2
- package/esm/game/PWGameClient.js +6 -6
- package/esm/types/api.d.ts +1 -0
- package/package.json +1 -1
package/browser/pw.dev.js
CHANGED
|
@@ -26,7 +26,7 @@ return /******/ (() => { // webpackBootstrap
|
|
|
26
26
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
27
27
|
|
|
28
28
|
"use strict";
|
|
29
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! tslib */ \"./node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs\");\n/* harmony import */ var _game_PWGameClient_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../game/PWGameClient.js */ \"./esm/game/PWGameClient.js\");\n/* harmony import */ var _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/Constants.js */ \"./esm/util/Constants.js\");\n/* harmony import */ var _util_Misc_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/Misc.js */ \"./esm/util/Misc.js\");\n\n\n\n\n/**\n * Note if you want to join a world, use new PWGameClient() then run .init()\n */\nclass PWApiClient {\n constructor(email, password, options) {\n /**\n * Account details with email and password, if applicable.\n */\n this.account = {\n email: \"\",\n password: \"\"\n };\n this.loggedIn = false;\n this.options = {\n endpoints: {\n Api: _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.Api,\n GameHTTP: _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.GameHTTP\n }\n };\n if (typeof password === \"object\") {\n this.options = (0,_util_Misc_js__WEBPACK_IMPORTED_MODULE_2__.mergeObjects)(this.options, password);\n password = undefined;\n }\n else if (options)\n this.options = (0,_util_Misc_js__WEBPACK_IMPORTED_MODULE_2__.mergeObjects)(this.options, options);\n if (password === undefined) {\n this.token = email;\n this.loggedIn = true;\n return;\n }\n this.account.email = email;\n this.account.password = password;\n // this.token = token;\n }\n authenticate(email, password) {\n if (email === undefined) {\n if (this.account.email.length === 0 || this.account.password.length === 0)\n throw Error(\"No email/password given.\");\n email = this.account.email;\n password = this.account.password;\n }\n return this.request(`${this.options.endpoints.Api}/api/collections/users/auth-with-password`, { identity: email, password }, undefined, this.options.endpoints.Api !== _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.Api).then(res => {\n if (\"token\" in res) {\n this.token = res.token;\n this.loggedIn = true;\n }\n return res;\n }); //.then(console.log);\n }\n /**\n * Internal.\n */\n getJoinKey(roomType, roomId) {\n return this.request(`${this.options.endpoints.Api}/api/joinkey/${roomType}/${roomId}`, undefined, true, this.options.endpoints.Api !== _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.Api);\n }\n /**\n * This route is available to take if you chose to create an API client to then join a world, in which case this returns the Game Client instance.\n *\n * Make sure the API client is already authenticated before calling this.\n *\n * The 3rd parameter is for if you wish to customise the reconnectability of the game client.\n */\n joinWorld(roomId, obj) {\n const game = new _game_PWGameClient_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](this, obj === null || obj === void 0 ? void 0 : obj.gameSettings);\n return game.joinWorld(roomId, obj === null || obj === void 0 ? void 0 : obj.joinData);\n }\n // I feel like this is cursed.\n /**\n * This will be an empty array if getRoomTypes has never been used successfully at least once.\n */\n get roomTypes() {\n return PWApiClient.roomTypes;\n }\n /**\n * Non-authenticated. This will refresh the room types each time, so make sure to check if roomTypes is available.\n */\n getRoomTypes() {\n return PWApiClient.getRoomTypes(this.options.endpoints.GameHTTP);\n }\n /**\n * Non-authenticated. This will refresh the room types each time, so make sure to check if roomTypes is available.\n */\n static getRoomTypes(EndpointURL = _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.GameHTTP) {\n return this.request(`${EndpointURL}/listroomtypes`, undefined, undefined, EndpointURL !== _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.GameHTTP)\n .then(res => {\n PWApiClient.roomTypes = res;\n return this.getListBlocks(true);\n })\n .then(() => {\n return PWApiClient.roomTypes;\n });\n }\n /**\n * Non-authenticated. Returns the mappings from the game API.\n *\n * Note: This library also exports \"BlockNames\" which is an enum containing the block names along with their respective id.\n *\n * @deprecated Use getListBlocks()\n */\n getMappings() {\n return PWApiClient.getMappings();\n }\n /**\n * Non-authenticated. Returns the mappings from the game API.\n *\n * Note: This library also exports \"BlockNames\" which is an enum containing the block names along with their respective id.\n *\n * @deprecated Use getListBlocks()\n */\n static getMappings() {\n return this.request(`${_util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.GameHTTP}/mappings`);\n }\n getListBlocks(skipCache = false, toObject) {\n // Yes, this actually gets typescript compiler to stop moaning\n if (toObject)\n return PWApiClient.getListBlocks(skipCache, toObject, this.options.endpoints.GameHTTP);\n return PWApiClient.getListBlocks(skipCache, toObject, this.options.endpoints.GameHTTP);\n }\n static getListBlocks() {\n return (0,tslib__WEBPACK_IMPORTED_MODULE_3__.__awaiter)(this, arguments, void 0, function* (skipCache = false, toObject, EndpointURL = _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.GameHTTP) {\n if (!skipCache) {\n if (this.listBlocks !== undefined && !toObject)\n return this.listBlocks;\n if (this.listBlocksObj !== undefined && toObject)\n return this.listBlocksObj;\n }\n return this.request(`${EndpointURL}/listblocks`, undefined, undefined, EndpointURL !== _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.GameHTTP)\n .then(res => {\n const obj = {};\n const arr = []; // PW doesn't sort the returned endpoint data despite data structure means it's perfectly capable\n for (let i = 0, len = res.length; i < len; i++) {\n obj[res[i].PaletteId.toUpperCase()] = res[i];\n arr[res[i].Id] = res[i];\n }\n this.listBlocksObj = obj;\n this.listBlocks = arr;\n if (toObject)\n return obj;\n else\n return arr;\n });\n });\n }\n getOwnedWorlds(page = 1, perPage = 10, query) {\n if (typeof page === \"object\") {\n query = page;\n page = 1;\n }\n return this.request(`${this.options.endpoints.Api}/api/collections/worlds/records?page=${page}&perPage=${perPage}${(0,_util_Misc_js__WEBPACK_IMPORTED_MODULE_2__.queryToString)(query)}`, undefined, true, this.options.endpoints.Api !== _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.Api);\n }\n getPlayers(page = 1, perPage = 10, query) {\n if (typeof page === \"object\") {\n query = page;\n page = 1;\n }\n return PWApiClient.getPlayers(page, perPage, query, this.options.endpoints.Api);\n }\n static getPlayers(page = 1, perPage = 10, query, EndpointURL = _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.Api) {\n if (typeof page === \"object\") {\n if (typeof perPage === \"string\") {\n EndpointURL = perPage;\n perPage = 10;\n }\n query = page;\n page = 1;\n }\n return this.request(`${EndpointURL}/api/collections/users/records?page=${page}&perPage=${perPage}${(0,_util_Misc_js__WEBPACK_IMPORTED_MODULE_2__.queryToString)(query)}`, undefined, undefined, EndpointURL !== _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.Api);\n }\n getPublicWorlds(page = 1, perPage = 10, query) {\n if (typeof page === \"object\") {\n query = page;\n page = 1;\n }\n return PWApiClient.getPublicWorlds(page, perPage, query, this.options.endpoints.Api);\n }\n static getPublicWorlds(page = 1, perPage = 10, query, EndpointURL = _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.Api) {\n if (typeof page === \"object\") {\n if (typeof perPage === \"string\") {\n EndpointURL = perPage;\n perPage = 10;\n }\n query = page;\n page = 1;\n }\n return this.request(`${EndpointURL}/api/collections/worlds/records?page=${page}&perPage=${perPage}${(0,_util_Misc_js__WEBPACK_IMPORTED_MODULE_2__.queryToString)(query)}`, undefined, undefined, EndpointURL !== _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.Api);\n }\n getWootedWorlds(page = 1, perPage = 10, query) {\n if (typeof page === \"object\") {\n query = page;\n page = 1;\n }\n return PWApiClient.getWootedWorlds(page, perPage, query, this.options.endpoints.Api);\n }\n static getWootedWorlds(page = 1, perPage = 10, query, EndpointURL = _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.Api) {\n if (typeof page === \"object\") {\n if (typeof perPage === \"string\") {\n EndpointURL = perPage;\n perPage = 10;\n }\n query = page;\n page = 1;\n }\n return this.request(`${EndpointURL}/api/collections/worlds/records?page=${page}&perPage=${perPage}${(0,_util_Misc_js__WEBPACK_IMPORTED_MODULE_2__.queryToString)(query)}`, undefined, undefined, EndpointURL !== _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.Api);\n }\n /**\n * Returns the lobby result.\n */\n getVisibleWorlds() {\n return PWApiClient.getVisibleWorlds(this.options.endpoints.GameHTTP);\n }\n /**\n * Returns the lobby result.\n */\n static getVisibleWorlds(EndpointURL = _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.GameHTTP) {\n if (this.roomTypes.length === 0)\n throw Error(\"roomTypes is empty - use getRoomTypes first!\");\n return this.request(`${EndpointURL}/room/list/${this.roomTypes[0]}`, undefined, undefined, EndpointURL !== _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.GameHTTP);\n }\n /**\n * Returns the world, if it exists and is public.\n */\n getPublicWorld(id) {\n return this.getPublicWorlds(1, 1, { filter: { id } })\n .then(res => res.items[0]);\n }\n /**\n * Returns the world, if it exists and is public.\n */\n static getPublicWorld(id) {\n return this.getPublicWorlds(1, 1, { filter: { id } })\n .then(res => res.items[0]);\n }\n getMinimap(world, toURL = false) {\n if (toURL)\n return `${this.options.endpoints.Api}/api/files/rhrbt6wqhc4s0cp/${world.id}/${world.minimap}`;\n return PWApiClient.getMinimap(world, toURL, this.options.endpoints.Api);\n }\n static getMinimap(world, toURL = false, EndpointURL = _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.Api) {\n if (toURL)\n return `${EndpointURL}/api/files/rhrbt6wqhc4s0cp/${world.id}/${world.minimap}`;\n return this.request(this.getMinimap(world, true, EndpointURL), undefined, undefined, EndpointURL !== _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.Api)\n .then(res => {\n if (\"message\" in res)\n throw Error(\"Minimap doesn't exist, the world may be unlisted.\");\n return res;\n });\n }\n /**\n * Note that username is cap sensitive, and may require you to use toUppercase\n */\n getPlayerByName(username) {\n return this.getPlayers(1, 1, { filter: { username } })\n .then(res => res.items[0]);\n }\n /**\n * Note that username is cap sensitive, and may require you to use toUppercase\n */\n static getPlayerByName(username) {\n return this.getPlayers(1, 1, { filter: { username } })\n .then(res => res.items[0]);\n }\n // This doesn't seem to work so I commented it out, not removing it as there might be an oversight idk\n // getMessageTypes() {\n // return this.request<string[]>(`${Endpoint.GameHTTP}/message_types`)\n // .then(res => res instanceof Uint8Array ? [] : res ?? []);\n // }\n /**\n * IMPORTANT: This will return JSON for any responses that have the content-type of json, anything else will be sent back as ArrayBuffer.\n * If you're expecting raw bytes, make sure the endpoint is guaranteed to give you that otherwise there isn't a reason.\n *\n * This requires the manager to be authenticated, it will error if otherwise.\n * @param url Requires to be a full URL with endpoint unfortunately. It will throw error if it doesn't match any of the 2 HTTP endpoint URLs.\n * @param body If this is passed, the request will become a POST. (If you need to send a POST but has no data, just send an empty object).\n * @param token The API token (not join key), this is if you wish to use authenticated API calls without having to instantise an api client yourself.\n * @param overrideURL If true, this will skip checking if the URL truly belongs to PW (production wise).\n */\n static request(url, body, token, overrideURL = false) {\n if (!overrideURL && !(url.startsWith(_util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.Api) || url.startsWith(_util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.GameHTTP) || url.startsWith(_util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.Client + \"/atlases/\")))\n throw Error(\"URL given does not have the correct endpoint URL, this is for safety.\");\n const headers = {\n // \"user-agent\": \"PW-TS-API/0.0.1\"\n };\n if (typeof token === \"string\")\n headers[\"authorization\"] = token;\n if (typeof body === \"object\")\n body = JSON.stringify(body);\n let method = \"GET\";\n if (typeof body !== \"undefined\") {\n headers[\"content-type\"] = \"application/json\";\n method = \"POST\";\n }\n let status = 0;\n return fetch(url, {\n headers, method,\n body: body\n }).then(res => {\n var _a;\n if (res.status === 403)\n throw Error(\"Forbidden access - token invalid or unauthorised.\");\n // else if (res.status !== 200) throw Error(\"\")\n status = res.status;\n if ((_a = res.headers.get(\"content-type\")) === null || _a === void 0 ? void 0 : _a.startsWith(\"application/json\"))\n return res.json();\n else\n return res.arrayBuffer();\n })\n .then(data => {\n if (status > 400)\n throw data;\n else\n return data;\n });\n }\n /**\n * IMPORTANT: This will return JSON for any responses that have the content-type of json, anything else will be sent back as Uint8array.\n * If you're expecting raw bytes, make sure the endpoint is guaranteed to give you that otherwise there isn't a reason.\n *\n * This requires the manager to be authenticated, it will error if otherwise.\n * @param url Requires to be a full URL with endpoint unfortunately. It will throw error if it doesn't match any of the 2 HTTP endpoint URLs.\n * @param body If this is passed, the request will become a POST. (If you need to send a POST but has no data, just send an empty object).\n * @param isAuthenticated If true, this will send the token as the header.\n * @param overrideURL If true, this will skip checking if the URL truly belongs to PW (production wise).\n */\n request(url, body, isAuthenticated = false, overrideURL = false) {\n return PWApiClient.request(url, body, isAuthenticated ? this.token : undefined, overrideURL);\n }\n}\n/**\n * This will be an empty array if getRoomTypes has never been used successfully at least once.\n */\nPWApiClient.roomTypes = [];\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PWApiClient);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFdBcGlDbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvYXBpL1BXQXBpQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLFlBQVksTUFBTSx5QkFBeUIsQ0FBQztBQUduRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU5RDs7R0FFRztBQUNILE1BQXFCLFdBQVc7SUF5QzVCLFlBQVksS0FBYSxFQUFFLFFBQW9DLEVBQUUsT0FBMEI7UUFuQzNGOztXQUVHO1FBQ0ssWUFBTyxHQUFHO1lBQ2QsS0FBSyxFQUFFLEVBQUU7WUFDVCxRQUFRLEVBQUUsRUFBRTtTQUNmLENBQUE7UUFJRCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBMEJiLElBQUksQ0FBQyxPQUFPLEdBQUc7WUFDWCxTQUFTLEVBQUU7Z0JBQ1AsR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFHO2dCQUNqQixRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVE7YUFDOUI7U0FDSixDQUFBO1FBRUQsSUFBSSxPQUFPLFFBQVEsS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsT0FBTyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3BELFFBQVEsR0FBRyxTQUFTLENBQUM7UUFDekIsQ0FBQzthQUFNLElBQUksT0FBTztZQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFFdkUsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7WUFDckIsT0FBTztRQUNYLENBQUM7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\n\n//# sourceURL=webpack://PW/./esm/api/PWApiClient.js?");
|
|
29
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! tslib */ \"./node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs\");\n/* harmony import */ var _game_PWGameClient_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../game/PWGameClient.js */ \"./esm/game/PWGameClient.js\");\n/* harmony import */ var _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/Constants.js */ \"./esm/util/Constants.js\");\n/* harmony import */ var _util_Misc_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/Misc.js */ \"./esm/util/Misc.js\");\n\n\n\n\n/**\n * Note if you want to join a world, use new PWGameClient() then run .init()\n */\nclass PWApiClient {\n constructor(email, password, options) {\n /**\n * Account details with email and password, if applicable.\n */\n this.account = {\n email: \"\",\n password: \"\"\n };\n this.loggedIn = false;\n this.options = {\n endpoints: {\n Api: _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.Api,\n GameHTTP: _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.GameHTTP,\n GameWS: _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.GameWS,\n }\n };\n if (typeof password === \"object\") {\n this.options = (0,_util_Misc_js__WEBPACK_IMPORTED_MODULE_2__.mergeObjects)(this.options, password);\n password = undefined;\n }\n else if (options)\n this.options = (0,_util_Misc_js__WEBPACK_IMPORTED_MODULE_2__.mergeObjects)(this.options, options);\n if (password === undefined) {\n this.token = email;\n this.loggedIn = true;\n return;\n }\n this.account.email = email;\n this.account.password = password;\n // this.token = token;\n }\n authenticate(email, password) {\n if (email === undefined) {\n if (this.account.email.length === 0 || this.account.password.length === 0)\n throw Error(\"No email/password given.\");\n email = this.account.email;\n password = this.account.password;\n }\n return this.request(`${this.options.endpoints.Api}/api/collections/users/auth-with-password`, { identity: email, password }, undefined, this.options.endpoints.Api !== _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.Api).then(res => {\n if (\"token\" in res) {\n this.token = res.token;\n this.loggedIn = true;\n }\n return res;\n }); //.then(console.log);\n }\n /**\n * Internal.\n */\n getJoinKey(roomType, roomId) {\n return this.request(`${this.options.endpoints.Api}/api/joinkey/${roomType}/${roomId}`, undefined, true, this.options.endpoints.Api !== _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.Api);\n }\n /**\n * This route is available to take if you chose to create an API client to then join a world, in which case this returns the Game Client instance.\n *\n * Make sure the API client is already authenticated before calling this.\n *\n * The 3rd parameter is for if you wish to customise the reconnectability of the game client.\n */\n joinWorld(roomId, obj) {\n const game = new _game_PWGameClient_js__WEBPACK_IMPORTED_MODULE_0__[\"default\"](this, obj === null || obj === void 0 ? void 0 : obj.gameSettings);\n return game.joinWorld(roomId, obj === null || obj === void 0 ? void 0 : obj.joinData);\n }\n // I feel like this is cursed.\n /**\n * This will be an empty array if getRoomTypes has never been used successfully at least once.\n */\n get roomTypes() {\n return PWApiClient.roomTypes;\n }\n /**\n * Non-authenticated. This will refresh the room types each time, so make sure to check if roomTypes is available.\n */\n getRoomTypes() {\n return PWApiClient.getRoomTypes(this.options.endpoints.GameHTTP);\n }\n /**\n * Non-authenticated. This will refresh the room types each time, so make sure to check if roomTypes is available.\n */\n static getRoomTypes(EndpointURL = _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.GameHTTP) {\n return this.request(`${EndpointURL}/listroomtypes`, undefined, undefined, EndpointURL !== _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.GameHTTP)\n .then(res => {\n PWApiClient.roomTypes = res;\n return this.getListBlocks(true);\n })\n .then(() => {\n return PWApiClient.roomTypes;\n });\n }\n /**\n * Non-authenticated. Returns the mappings from the game API.\n *\n * Note: This library also exports \"BlockNames\" which is an enum containing the block names along with their respective id.\n *\n * @deprecated Use getListBlocks()\n */\n getMappings() {\n return PWApiClient.getMappings();\n }\n /**\n * Non-authenticated. Returns the mappings from the game API.\n *\n * Note: This library also exports \"BlockNames\" which is an enum containing the block names along with their respective id.\n *\n * @deprecated Use getListBlocks()\n */\n static getMappings() {\n return this.request(`${_util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.GameHTTP}/mappings`);\n }\n getListBlocks(skipCache = false, toObject) {\n // Yes, this actually gets typescript compiler to stop moaning\n if (toObject)\n return PWApiClient.getListBlocks(skipCache, toObject, this.options.endpoints.GameHTTP);\n return PWApiClient.getListBlocks(skipCache, toObject, this.options.endpoints.GameHTTP);\n }\n static getListBlocks() {\n return (0,tslib__WEBPACK_IMPORTED_MODULE_3__.__awaiter)(this, arguments, void 0, function* (skipCache = false, toObject, EndpointURL = _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.GameHTTP) {\n if (!skipCache) {\n if (this.listBlocks !== undefined && !toObject)\n return this.listBlocks;\n if (this.listBlocksObj !== undefined && toObject)\n return this.listBlocksObj;\n }\n return this.request(`${EndpointURL}/listblocks`, undefined, undefined, EndpointURL !== _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.GameHTTP)\n .then(res => {\n const obj = {};\n const arr = []; // PW doesn't sort the returned endpoint data despite data structure means it's perfectly capable\n for (let i = 0, len = res.length; i < len; i++) {\n obj[res[i].PaletteId.toUpperCase()] = res[i];\n arr[res[i].Id] = res[i];\n }\n this.listBlocksObj = obj;\n this.listBlocks = arr;\n if (toObject)\n return obj;\n else\n return arr;\n });\n });\n }\n getOwnedWorlds(page = 1, perPage = 10, query) {\n if (typeof page === \"object\") {\n query = page;\n page = 1;\n }\n return this.request(`${this.options.endpoints.Api}/api/collections/worlds/records?page=${page}&perPage=${perPage}${(0,_util_Misc_js__WEBPACK_IMPORTED_MODULE_2__.queryToString)(query)}`, undefined, true, this.options.endpoints.Api !== _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.Api);\n }\n getPlayers(page = 1, perPage = 10, query) {\n if (typeof page === \"object\") {\n query = page;\n page = 1;\n }\n return PWApiClient.getPlayers(page, perPage, query, this.options.endpoints.Api);\n }\n static getPlayers(page = 1, perPage = 10, query, EndpointURL = _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.Api) {\n if (typeof page === \"object\") {\n if (typeof perPage === \"string\") {\n EndpointURL = perPage;\n perPage = 10;\n }\n query = page;\n page = 1;\n }\n return this.request(`${EndpointURL}/api/collections/users/records?page=${page}&perPage=${perPage}${(0,_util_Misc_js__WEBPACK_IMPORTED_MODULE_2__.queryToString)(query)}`, undefined, undefined, EndpointURL !== _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.Api);\n }\n getPublicWorlds(page = 1, perPage = 10, query) {\n if (typeof page === \"object\") {\n query = page;\n page = 1;\n }\n return PWApiClient.getPublicWorlds(page, perPage, query, this.options.endpoints.Api);\n }\n static getPublicWorlds(page = 1, perPage = 10, query, EndpointURL = _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.Api) {\n if (typeof page === \"object\") {\n if (typeof perPage === \"string\") {\n EndpointURL = perPage;\n perPage = 10;\n }\n query = page;\n page = 1;\n }\n return this.request(`${EndpointURL}/api/collections/worlds/records?page=${page}&perPage=${perPage}${(0,_util_Misc_js__WEBPACK_IMPORTED_MODULE_2__.queryToString)(query)}`, undefined, undefined, EndpointURL !== _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.Api);\n }\n getWootedWorlds(page = 1, perPage = 10, query) {\n if (typeof page === \"object\") {\n query = page;\n page = 1;\n }\n return PWApiClient.getWootedWorlds(page, perPage, query, this.options.endpoints.Api);\n }\n static getWootedWorlds(page = 1, perPage = 10, query, EndpointURL = _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.Api) {\n if (typeof page === \"object\") {\n if (typeof perPage === \"string\") {\n EndpointURL = perPage;\n perPage = 10;\n }\n query = page;\n page = 1;\n }\n return this.request(`${EndpointURL}/api/collections/worlds/records?page=${page}&perPage=${perPage}${(0,_util_Misc_js__WEBPACK_IMPORTED_MODULE_2__.queryToString)(query)}`, undefined, undefined, EndpointURL !== _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.Api);\n }\n /**\n * Returns the lobby result.\n */\n getVisibleWorlds() {\n return PWApiClient.getVisibleWorlds(this.options.endpoints.GameHTTP);\n }\n /**\n * Returns the lobby result.\n */\n static getVisibleWorlds(EndpointURL = _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.GameHTTP) {\n if (this.roomTypes.length === 0)\n throw Error(\"roomTypes is empty - use getRoomTypes first!\");\n return this.request(`${EndpointURL}/room/list/${this.roomTypes[0]}`, undefined, undefined, EndpointURL !== _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.GameHTTP);\n }\n /**\n * Returns the world, if it exists and is public.\n */\n getPublicWorld(id) {\n return this.getPublicWorlds(1, 1, { filter: { id } })\n .then(res => res.items[0]);\n }\n /**\n * Returns the world, if it exists and is public.\n */\n static getPublicWorld(id) {\n return this.getPublicWorlds(1, 1, { filter: { id } })\n .then(res => res.items[0]);\n }\n getMinimap(world, toURL = false) {\n if (toURL)\n return `${this.options.endpoints.Api}/api/files/rhrbt6wqhc4s0cp/${world.id}/${world.minimap}`;\n return PWApiClient.getMinimap(world, toURL, this.options.endpoints.Api);\n }\n static getMinimap(world, toURL = false, EndpointURL = _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.Api) {\n if (toURL)\n return `${EndpointURL}/api/files/rhrbt6wqhc4s0cp/${world.id}/${world.minimap}`;\n return this.request(this.getMinimap(world, true, EndpointURL), undefined, undefined, EndpointURL !== _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.Api)\n .then(res => {\n if (\"message\" in res)\n throw Error(\"Minimap doesn't exist, the world may be unlisted.\");\n return res;\n });\n }\n /**\n * Note that username is cap sensitive, and may require you to use toUppercase\n */\n getPlayerByName(username) {\n return this.getPlayers(1, 1, { filter: { username } })\n .then(res => res.items[0]);\n }\n /**\n * Note that username is cap sensitive, and may require you to use toUppercase\n */\n static getPlayerByName(username) {\n return this.getPlayers(1, 1, { filter: { username } })\n .then(res => res.items[0]);\n }\n // This doesn't seem to work so I commented it out, not removing it as there might be an oversight idk\n // getMessageTypes() {\n // return this.request<string[]>(`${Endpoint.GameHTTP}/message_types`)\n // .then(res => res instanceof Uint8Array ? [] : res ?? []);\n // }\n /**\n * IMPORTANT: This will return JSON for any responses that have the content-type of json, anything else will be sent back as ArrayBuffer.\n * If you're expecting raw bytes, make sure the endpoint is guaranteed to give you that otherwise there isn't a reason.\n *\n * This requires the manager to be authenticated, it will error if otherwise.\n * @param url Requires to be a full URL with endpoint unfortunately. It will throw error if it doesn't match any of the 2 HTTP endpoint URLs.\n * @param body If this is passed, the request will become a POST. (If you need to send a POST but has no data, just send an empty object).\n * @param token The API token (not join key), this is if you wish to use authenticated API calls without having to instantise an api client yourself.\n * @param overrideURL If true, this will skip checking if the URL truly belongs to PW (production wise).\n */\n static request(url, body, token, overrideURL = false) {\n if (!overrideURL && !(url.startsWith(_util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.Api) || url.startsWith(_util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.GameHTTP) || url.startsWith(_util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.Client + \"/atlases/\")))\n throw Error(\"URL given does not have the correct endpoint URL, this is for safety.\");\n const headers = {\n // \"user-agent\": \"PW-TS-API/0.0.1\"\n };\n if (typeof token === \"string\")\n headers[\"authorization\"] = token;\n if (typeof body === \"object\")\n body = JSON.stringify(body);\n let method = \"GET\";\n if (typeof body !== \"undefined\") {\n headers[\"content-type\"] = \"application/json\";\n method = \"POST\";\n }\n let status = 0;\n return fetch(url, {\n headers, method,\n body: body\n }).then(res => {\n var _a;\n if (res.status === 403)\n throw Error(\"Forbidden access - token invalid or unauthorised.\");\n // else if (res.status !== 200) throw Error(\"\")\n status = res.status;\n if ((_a = res.headers.get(\"content-type\")) === null || _a === void 0 ? void 0 : _a.startsWith(\"application/json\"))\n return res.json();\n else\n return res.arrayBuffer();\n })\n .then(data => {\n if (status > 400)\n throw data;\n else\n return data;\n });\n }\n /**\n * IMPORTANT: This will return JSON for any responses that have the content-type of json, anything else will be sent back as Uint8array.\n * If you're expecting raw bytes, make sure the endpoint is guaranteed to give you that otherwise there isn't a reason.\n *\n * This requires the manager to be authenticated, it will error if otherwise.\n * @param url Requires to be a full URL with endpoint unfortunately. It will throw error if it doesn't match any of the 2 HTTP endpoint URLs.\n * @param body If this is passed, the request will become a POST. (If you need to send a POST but has no data, just send an empty object).\n * @param isAuthenticated If true, this will send the token as the header.\n * @param overrideURL If true, this will skip checking if the URL truly belongs to PW (production wise).\n */\n request(url, body, isAuthenticated = false, overrideURL = false) {\n return PWApiClient.request(url, body, isAuthenticated ? this.token : undefined, overrideURL);\n }\n}\n/**\n * This will be an empty array if getRoomTypes has never been used successfully at least once.\n */\nPWApiClient.roomTypes = [];\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (PWApiClient);\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFdBcGlDbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvYXBpL1BXQXBpQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLFlBQVksTUFBTSx5QkFBeUIsQ0FBQztBQUduRCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDaEQsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU5RDs7R0FFRztBQUNILE1BQXFCLFdBQVc7SUF5QzVCLFlBQVksS0FBYSxFQUFFLFFBQW9DLEVBQUUsT0FBMEI7UUFuQzNGOztXQUVHO1FBQ0ssWUFBTyxHQUFHO1lBQ2QsS0FBSyxFQUFFLEVBQUU7WUFDVCxRQUFRLEVBQUUsRUFBRTtTQUNmLENBQUE7UUFJRCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBMEJiLElBQUksQ0FBQyxPQUFPLEdBQUc7WUFDWCxTQUFTLEVBQUU7Z0JBQ1AsR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFHO2dCQUNqQixRQUFRLEVBQUUsUUFBUSxDQUFDLFFBQVE7Z0JBQzNCLE1BQU0sRUFBRSxRQUFRLENBQUMsTUFBTTthQUMxQjtTQUNKLENBQUE7UUFFRCxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQy9CLElBQUksQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLENBQUM7WUFDcEQsUUFBUSxHQUFHLFNBQVMsQ0FBQztRQUN6QixDQUFDO2FBQU0sSUFBSSxPQUFPO1lBQUUsSUFBSSxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUV2RSxJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUNuQixJQUFJLENBQUMsUUFBUSxHQUFH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\n\n//# sourceURL=webpack://PW/./esm/api/PWApiClient.js?");
|
|
30
30
|
|
|
31
31
|
/***/ }),
|
|
32
32
|
|
|
@@ -48,7 +48,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
|
|
|
48
48
|
/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
|
|
49
49
|
|
|
50
50
|
"use strict";
|
|
51
|
-
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ PWGameClient)\n/* harmony export */ });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! tslib */ \"./node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs\");\n/* harmony import */ var _gen_world_pb_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../gen/world_pb.js */ \"./esm/gen/world_pb.js\");\n/* harmony import */ var _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/Constants.js */ \"./esm/util/Constants.js\");\n/* harmony import */ var _util_Errors_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/Errors.js */ \"./esm/util/Errors.js\");\n/* harmony import */ var isows__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! isows */ \"./node_modules/.pnpm/isows@1.0.6_ws@8.18.0/node_modules/isows/_esm/native.js\");\n/* harmony import */ var _bufbuild_protobuf__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @bufbuild/protobuf */ \"./node_modules/.pnpm/@bufbuild+protobuf@2.2.3/node_modules/@bufbuild/protobuf/dist/esm/from-binary.js\");\n/* harmony import */ var _bufbuild_protobuf__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @bufbuild/protobuf */ \"./node_modules/.pnpm/@bufbuild+protobuf@2.2.3/node_modules/@bufbuild/protobuf/dist/esm/to-binary.js\");\n/* harmony import */ var _bufbuild_protobuf__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @bufbuild/protobuf */ \"./node_modules/.pnpm/@bufbuild+protobuf@2.2.3/node_modules/@bufbuild/protobuf/dist/esm/create.js\");\n/* harmony import */ var _util_Queue_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/Queue.js */ \"./esm/util/Queue.js\");\n/* harmony import */ var _util_Misc_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/Misc.js */ \"./esm/util/Misc.js\");\n/* harmony import */ var _util_Timeout_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../util/Timeout.js */ \"./esm/util/Timeout.js\");\n\n\n\n\n\n\n\n\n\nclass PWGameClient {\n constructor(api, settings) {\n var _a, _b, _c, _d, _e;\n this.totalBucket = new _util_Queue_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"](100, 1000);\n this.chatBucket = new _util_Queue_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"](10, 1000);\n this.connectAttempts = {\n time: -1,\n count: 0,\n };\n // listen<Event extends keyof WorldEvents>(type: Event) {\n // type === \"\"\n // }\n /**\n * For faster performance (even if it seems insignificant),\n * direct functions are used instead of events which are also inconsistent with browsers/nodejs etc.\n *\n * NOTE: the \"this\" won't be the client itself. You will need to bind yourself if you want to keep this.\n */\n this.callbacks = {};\n // private hooks = {\n // } as Partial<{ [K in keyof P]: Array<(statey: P[K]) => Promisable<K>> }>\n /**\n * Poorly documented because I cba\n */\n this.hooks = [];\n // I can't use instanceof cos of circular reference kms.\n if (api && \"getJoinKey\" in api)\n this.api = api;\n else if (api) {\n settings = api;\n api = undefined;\n }\n this.settings = {\n reconnectable: (_a = settings === null || settings === void 0 ? void 0 : settings.reconnectable) !== null && _a !== void 0 ? _a : true,\n reconnectCount: (_b = settings === null || settings === void 0 ? void 0 : settings.reconnectCount) !== null && _b !== void 0 ? _b : 5,\n reconnectInterval: (_c = settings === null || settings === void 0 ? void 0 : settings.reconnectInterval) !== null && _c !== void 0 ? _c : 4000,\n reconnectTimeGap: (_d = settings === null || settings === void 0 ? void 0 : settings.reconnectTimeGap) !== null && _d !== void 0 ? _d : 10000,\n handlePackets: (_e = settings === null || settings === void 0 ? void 0 : settings.handlePackets) !== null && _e !== void 0 ? _e : [\"PING\"],\n };\n }\n get connected() {\n var _a;\n return ((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === isows__WEBPACK_IMPORTED_MODULE_6__.WebSocket.OPEN;\n }\n /**\n * This will connect to the world.\n *\n * (This returns itself for chaining)\n */\n joinWorld(roomId, joinData) {\n return (0,tslib__WEBPACK_IMPORTED_MODULE_7__.__awaiter)(this, void 0, void 0, function* () {\n var _a, _b, _c;\n if (!this.api)\n throw Error(\"This can only work if you've used APIClient to join the world in the first place.\");\n if (((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === isows__WEBPACK_IMPORTED_MODULE_6__.WebSocket.CONNECTING)\n throw Error(\"Already trying to connect.\");\n // if (!this.api.loggedIn) throw Error(\"API isn't logged in, you must use authenticate first.\");\n const roomType = (_c = (_b = this.api.roomTypes) === null || _b === void 0 ? void 0 : _b[0]) !== null && _c !== void 0 ? _c : yield this.api.getRoomTypes().then(rTypes => rTypes[0]);\n const joinReq = yield this.api.getJoinKey(roomType, roomId);\n if (!(\"token\" in joinReq) || joinReq.token.length === 0)\n throw Error(\"Unable to secure a join key - is account details valid?\");\n const connectUrl = `${_util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.GameWS}/ws?joinKey=${joinReq.token}`\n + (joinData === undefined ? \"\" : \"&joinData=\" + btoa(JSON.stringify(joinData)));\n this.prevWorldId = roomId;\n if ((this.connectAttempts.time + this.settings.reconnectTimeGap) < Date.now()) {\n this.connectAttempts = {\n time: Date.now(), count: 0\n };\n }\n return new Promise((res, rej) => {\n var _a;\n if (this.connectAttempts.count++ > this.settings.reconnectCount)\n return rej(new Error(\"Unable to connect due to many attempts.\"));\n const timer = setInterval(() => {\n if (this.connectAttempts.count++ > this.settings.reconnectCount)\n return rej(new Error(\"Unable to (re)connect.\"));\n this.invoke(\"debug\", \"Failed to reconnect, retrying.\");\n this.socket = this.createSocket(connectUrl, timer, res, rej);\n }, (_a = this.settings.reconnectInterval) !== null && _a !== void 0 ? _a : 4000);\n this.socket = this.createSocket(connectUrl, timer, res, rej);\n });\n });\n }\n /**\n * INTERNAL\n */\n createSocket(url, timer, res, rej) {\n const socket = new isows__WEBPACK_IMPORTED_MODULE_6__.WebSocket(url);\n socket.binaryType = \"arraybuffer\";\n // For res/rej.\n let init = false;\n socket.onmessage = (evt) => {\n var _a;\n const rawPacket = (0,_bufbuild_protobuf__WEBPACK_IMPORTED_MODULE_8__.fromBinary)(_gen_world_pb_js__WEBPACK_IMPORTED_MODULE_0__.WorldPacketSchema, evt.data instanceof ArrayBuffer ? new Uint8Array(evt.data) : evt.data);\n const { packet } = rawPacket;\n this.invoke(\"debug\", \"Received \" + packet.case);\n this.invoke(\"raw\", rawPacket);\n if (packet.case === undefined) {\n return this.invoke(\"unknown\", packet.value);\n } //this.callbacks.raw?.(packet);;\n let states = {}; // | undefined;\n if (this.hooks.length) {\n try {\n states = {};\n for (let i = 0, len = this.hooks.length; i < len; i++) {\n const res = this.hooks[i](rawPacket);\n if (typeof res === \"object\") {\n const entries = Object.entries(res);\n for (let j = 0, jen = entries.length; j < jen; j++) {\n states[entries[j][0]] = entries[j][1];\n }\n }\n }\n }\n catch (err) {\n this.invoke(\"debug\", \"Unable to execute all hooks safely\");\n // TODO: separate event for error\n console.error(err);\n states = {};\n }\n }\n switch (packet.case) {\n case \"playerInitPacket\":\n if (this.settings.handlePackets.findIndex(v => v === \"INIT\") !== -1)\n this.send(\"playerInitReceived\");\n if ((_a = packet.value.playerProperties) === null || _a === void 0 ? void 0 : _a.isWorldOwner) {\n this.totalBucket.tokenLimit = 200;\n this.chatBucket.tokenLimit = 10;\n }\n else {\n this.totalBucket.tokenLimit = 125;\n this.chatBucket.tokenLimit = 5;\n }\n if (!init) {\n clearInterval(timer);\n init = true;\n res(this);\n // Give the client the init again as they might could have missed it even by a few milliseconds.\n return (0,_util_Timeout_js__WEBPACK_IMPORTED_MODULE_5__.customSetTimeout)(() => {\n // TODO: deduplicate this part.\n if (this.hooks.length) {\n try {\n states = {};\n for (let i = 0, len = this.hooks.length; i < len; i++) {\n const res = this.hooks[i](rawPacket);\n if (typeof res === \"object\") {\n const entries = Object.entries(res);\n for (let j = 0, jen = entries.length; j < jen; j++) {\n states[entries[j][0]] = entries[j][1];\n }\n }\n }\n }\n catch (err) {\n this.invoke(\"debug\", \"Unable to execute all hooks safely\");\n // TODO: separate event for error\n console.error(err);\n states = {};\n }\n }\n this.invoke(packet.case, packet.value, states);\n }, 1500);\n }\n break;\n case \"ping\":\n if (this.settings.handlePackets.findIndex(v => v === \"PING\") !== -1)\n this.send(\"ping\", undefined, true);\n break;\n }\n this.invoke(packet.case, packet.value, states);\n };\n socket.onopen = (evt) => {\n this.invoke(\"debug\", \"Connected successfully, waiting for init packet.\");\n };\n socket.onclose = (evt) => {\n this.invoke(\"debug\", `Server closed connection due to code ${evt.code}, reason: \"${evt.reason}\".`);\n if (!init) {\n clearInterval(timer);\n rej(new _util_Errors_js__WEBPACK_IMPORTED_MODULE_2__.AuthError(evt.reason, (evt.code)));\n }\n if (this.settings.reconnectable) {\n if (this.api === undefined)\n return this.invoke(\"debug\", \"Not attempting to reconnect as this game client was created with a join token.\");\n // if (evt.reason === \"Failed to preload the world.\") {\n // return this.invoke(\"debug\", \"Not attempting to reconnect as the world don't exist.\");\n // }\n if (this.prevWorldId) {\n this.invoke(\"debug\", \"Attempting to reconnect.\");\n return this.joinWorld(this.prevWorldId).catch(err => {\n this.invoke(\"debug\", err);\n });\n }\n else\n this.invoke(\"debug\", \"Warning: Socket closed, attempt to reconnect was made but no previous world id was kept.\");\n }\n };\n return socket;\n }\n /**\n * This is a more direct route if you already have a join key acquired via Pixelwalker's API.\n *\n * Useful for those wary of security.\n */\n static joinWorld(joinKey, obj) {\n const connectUrl = `${_util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.GameWS}/ws?joinKey=${joinKey}`\n + ((obj === null || obj === void 0 ? void 0 : obj.joinData) === undefined ? \"\" : \"&joinData=\" + btoa(JSON.stringify(obj.joinData)));\n const cli = new PWGameClient(obj === null || obj === void 0 ? void 0 : obj.gameSettings);\n if ((cli.connectAttempts.time + cli.settings.reconnectTimeGap) < Date.now()) {\n cli.connectAttempts = {\n time: Date.now(), count: 0\n };\n }\n return new Promise((res, rej) => {\n var _a;\n if (cli.connectAttempts.count++ > cli.settings.reconnectCount)\n return rej(new Error(\"Unable to connect due to many attempts.\"));\n const timer = setInterval(() => {\n var _a;\n (_a = cli.socket) === null || _a === void 0 ? void 0 : _a.close();\n if (cli.connectAttempts.count++ > cli.settings.reconnectCount)\n return rej(new Error(\"Unable to (re)connect.\"));\n cli.invoke(\"debug\", \"Failed to reconnect, retrying.\");\n cli.socket = cli.createSocket(connectUrl, timer, res, rej);\n }, (_a = cli.settings.reconnectInterval) !== null && _a !== void 0 ? _a : 4000);\n cli.socket = cli.createSocket(connectUrl, timer, res, rej);\n });\n }\n /**\n * This is different to addCallback as all hooks (regardless of the type) will execute first before the callbacks, each hook may modify something or do something in the background\n * and may pass it to callbacks (via the second parameter in callbacks). If an error occurs while executing one of the hooks,\n * the execution of hooks will halt for that packet and callbacks will run without the states.\n *\n * NOTE: This is permanent, if a hook is added, it can't be removed.\n */\n addHook(hook) {\n // if (this.callbacks[\"raw\"] === undefined) this.callbacks[\"raw\"] = [];\n // this.hooks.oldChatMessagesPacket\n this.hooks.push(hook);\n // this.callbacks[\"raw\"].unshift(hook);\n return this;\n }\n addCallback(type, ...cbs) {\n // this.callbacks[type] = cb;\n if (this.callbacks[type] === undefined)\n this.callbacks[type] = [];\n if (cbs.length === 0)\n return this;\n this.callbacks[type].push(...cbs);\n return this;\n }\n prependCallback(type, ...cbs) {\n // this.callbacks[type] = cb;\n if (this.callbacks[type] === undefined)\n this.callbacks[type] = [];\n if (cbs.length === 0)\n return this;\n this.callbacks[type].unshift(...cbs);\n return this;\n }\n /**\n * @param type The type of the event\n * @param cb It can be the function itself (to remove that specific function). If undefined, it will remove ALL functions from that list, it will return undefined.\n */\n removeCallback(type, cb) {\n const callbacks = this.callbacks[type];\n if (callbacks === undefined || cb === undefined) {\n callbacks === null || callbacks === void 0 ? void 0 : callbacks.splice(0);\n return;\n }\n else {\n for (let i = 0, len = callbacks.length; i < len; i++) {\n if (callbacks[i] === cb) {\n return callbacks.splice(i, 1)[0];\n }\n }\n }\n return;\n }\n invoke(type, data, states) {\n return (0,tslib__WEBPACK_IMPORTED_MODULE_7__.__awaiter)(this, void 0, void 0, function* () {\n const cbs = this.callbacks[type];\n let result = {\n count: 0, stopped: false\n };\n if (cbs === undefined)\n return result;\n for (let i = 0, len = cbs.length; i < len; i++) {\n const res = yield ((0,_util_Misc_js__WEBPACK_IMPORTED_MODULE_4__.isCustomPacket)(type) ? cbs[i](data) : cbs[i](data, states));\n result.count++;\n if (typeof res === \"object\") {\n const keys = Object.keys(res);\n for (let j = 0, jen = keys.length; j < jen; j++) {\n data[keys[j]] = res[keys[j]];\n }\n }\n if (res === \"STOP\") {\n result.stopped = true;\n return result;\n }\n }\n return result;\n });\n }\n /**\n * This assumes that the connection\n *\n * @param type Type of the packet.\n * @param value Value of the packet to send along with, note that some properties are optional.\n * @param direct If it should skip queue.\n */\n send(type, value, direct = false) {\n this.invoke(\"debug\", \"Sent \" + type + \" with \" + (value === undefined ? \"0\" : Object.keys(value).length) + \" parameters.\");\n const send = () => {\n var _a;\n return (_a = this.socket) === null || _a === void 0 ? void 0 : _a.send((0,_bufbuild_protobuf__WEBPACK_IMPORTED_MODULE_9__.toBinary)(_gen_world_pb_js__WEBPACK_IMPORTED_MODULE_0__.WorldPacketSchema, (0,_bufbuild_protobuf__WEBPACK_IMPORTED_MODULE_10__.create)(_gen_world_pb_js__WEBPACK_IMPORTED_MODULE_0__.WorldPacketSchema, { packet: { case: type, value } })));\n };\n if (direct)\n return send();\n if (type === \"playerChatPacket\")\n this.chatBucket.queue(() => { send(); });\n else\n this.totalBucket.queue(() => { send(); });\n }\n /**\n * By default this will set the game client settings reconnectable to false.\n *\n * If reconnect is true, an additionl parameter can be passed which is the amount of time to wait before it attempts to reconnect (DEFAULT: none)\n */\n disconnect(reconnect = false) {\n var _a, _b;\n // Accept the possibility that people may try to \n if (reconnect === true)\n this.settings.reconnectable = true;\n else\n this.settings.reconnectable = false;\n (_a = this.socket) === null || _a === void 0 ? void 0 : _a.close();\n return ((_b = this.socket) === null || _b === void 0 ? void 0 : _b.readyState) === isows__WEBPACK_IMPORTED_MODULE_6__.WebSocket.CLOSED;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFdHYW1lQ2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2dhbWUvUFdHYW1lQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQTJHLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEssT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWxFLE9BQU8sS0FBSyxNQUFNLGtCQUFrQixDQUFDO0FBRXJDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUl0RCxNQUFNLENBQUMsT0FBTyxPQUFPLFlBQVk7SUF3QjdCLFlBQVksR0FBK0MsRUFBRSxRQUFzQzs7UUFiekYsZ0JBQVcsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkMsZUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVqQyxvQkFBZSxHQUFHO1lBQ3hCLElBQUksRUFBRSxDQUFDLENBQUM7WUFDUixLQUFLLEVBQUUsQ0FBQztTQUNYLENBQUE7UUE4T0QseURBQXlEO1FBQ3pELGtCQUFrQjtRQUNsQixJQUFJO1FBRUo7Ozs7O1dBS0c7UUFDTyxjQUFTLEdBQUcsRUFFaUgsQ0FBQztRQUV4SSxvQkFBb0I7UUFFcEIsMkVBQTJFO1FBRTNFOztXQUVHO1FBQ0ssVUFBSyxHQUFrQyxFQUFFLENBQUM7UUEzUDlDLHdEQUF3RDtRQUN4RCxJQUFJLEdBQUcsSUFB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\n\n//# sourceURL=webpack://PW/./esm/game/PWGameClient.js?");
|
|
51
|
+
eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ PWGameClient)\n/* harmony export */ });\n/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! tslib */ \"./node_modules/.pnpm/tslib@2.8.1/node_modules/tslib/tslib.es6.mjs\");\n/* harmony import */ var _gen_world_pb_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../gen/world_pb.js */ \"./esm/gen/world_pb.js\");\n/* harmony import */ var _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../util/Constants.js */ \"./esm/util/Constants.js\");\n/* harmony import */ var _util_Errors_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util/Errors.js */ \"./esm/util/Errors.js\");\n/* harmony import */ var isows__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! isows */ \"./node_modules/.pnpm/isows@1.0.6_ws@8.18.0/node_modules/isows/_esm/native.js\");\n/* harmony import */ var _bufbuild_protobuf__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! @bufbuild/protobuf */ \"./node_modules/.pnpm/@bufbuild+protobuf@2.2.3/node_modules/@bufbuild/protobuf/dist/esm/from-binary.js\");\n/* harmony import */ var _bufbuild_protobuf__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @bufbuild/protobuf */ \"./node_modules/.pnpm/@bufbuild+protobuf@2.2.3/node_modules/@bufbuild/protobuf/dist/esm/to-binary.js\");\n/* harmony import */ var _bufbuild_protobuf__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @bufbuild/protobuf */ \"./node_modules/.pnpm/@bufbuild+protobuf@2.2.3/node_modules/@bufbuild/protobuf/dist/esm/create.js\");\n/* harmony import */ var _util_Queue_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../util/Queue.js */ \"./esm/util/Queue.js\");\n/* harmony import */ var _util_Misc_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../util/Misc.js */ \"./esm/util/Misc.js\");\n/* harmony import */ var _util_Timeout_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../util/Timeout.js */ \"./esm/util/Timeout.js\");\n\n\n\n\n\n\n\n\n\nclass PWGameClient {\n constructor(api, settings) {\n var _a, _b, _c, _d, _e;\n this.totalBucket = new _util_Queue_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"](100, 1000);\n this.chatBucket = new _util_Queue_js__WEBPACK_IMPORTED_MODULE_3__[\"default\"](10, 1000);\n this.connectAttempts = {\n time: -1,\n count: 0,\n };\n // listen<Event extends keyof WorldEvents>(type: Event) {\n // type === \"\"\n // }\n /**\n * For faster performance (even if it seems insignificant),\n * direct functions are used instead of events which are also inconsistent with browsers/nodejs etc.\n *\n * NOTE: the \"this\" won't be the client itself. You will need to bind yourself if you want to keep this.\n */\n this.callbacks = {};\n // private hooks = {\n // } as Partial<{ [K in keyof P]: Array<(statey: P[K]) => Promisable<K>> }>\n /**\n * Poorly documented because I cba\n */\n this.hooks = [];\n // I can't use instanceof cos of circular reference kms.\n if (api && \"getJoinKey\" in api)\n this.api = api;\n else if (api) {\n settings = api;\n api = undefined;\n }\n this.settings = {\n reconnectable: (_a = settings === null || settings === void 0 ? void 0 : settings.reconnectable) !== null && _a !== void 0 ? _a : true,\n reconnectCount: (_b = settings === null || settings === void 0 ? void 0 : settings.reconnectCount) !== null && _b !== void 0 ? _b : 5,\n reconnectInterval: (_c = settings === null || settings === void 0 ? void 0 : settings.reconnectInterval) !== null && _c !== void 0 ? _c : 4000,\n reconnectTimeGap: (_d = settings === null || settings === void 0 ? void 0 : settings.reconnectTimeGap) !== null && _d !== void 0 ? _d : 10000,\n handlePackets: (_e = settings === null || settings === void 0 ? void 0 : settings.handlePackets) !== null && _e !== void 0 ? _e : [\"PING\"],\n };\n }\n get connected() {\n var _a;\n return ((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === isows__WEBPACK_IMPORTED_MODULE_6__.WebSocket.OPEN;\n }\n /**\n * This will connect to the world.\n *\n * (This returns itself for chaining)\n */\n joinWorld(roomId_1, joinData_1) {\n return (0,tslib__WEBPACK_IMPORTED_MODULE_7__.__awaiter)(this, arguments, void 0, function* (roomId, joinData, EndpointURL = _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.GameWS) {\n var _a, _b, _c;\n if (!this.api)\n throw Error(\"This can only work if you've used APIClient to join the world in the first place.\");\n if (((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === isows__WEBPACK_IMPORTED_MODULE_6__.WebSocket.CONNECTING)\n throw Error(\"Already trying to connect.\");\n // if (!this.api.loggedIn) throw Error(\"API isn't logged in, you must use authenticate first.\");\n const roomType = (_c = (_b = this.api.roomTypes) === null || _b === void 0 ? void 0 : _b[0]) !== null && _c !== void 0 ? _c : yield this.api.getRoomTypes().then(rTypes => rTypes[0]);\n const joinReq = yield this.api.getJoinKey(roomType, roomId);\n if (!(\"token\" in joinReq) || joinReq.token.length === 0)\n throw Error(\"Unable to secure a join key - is account details valid?\");\n const connectUrl = `${EndpointURL}/ws?joinKey=${joinReq.token}`\n + (joinData === undefined ? \"\" : \"&joinData=\" + btoa(JSON.stringify(joinData)));\n this.prevWorldId = roomId;\n if ((this.connectAttempts.time + this.settings.reconnectTimeGap) < Date.now()) {\n this.connectAttempts = {\n time: Date.now(), count: 0\n };\n }\n return new Promise((res, rej) => {\n var _a;\n if (this.connectAttempts.count++ > this.settings.reconnectCount)\n return rej(new Error(\"Unable to connect due to many attempts.\"));\n const timer = setInterval(() => {\n if (this.connectAttempts.count++ > this.settings.reconnectCount)\n return rej(new Error(\"Unable to (re)connect.\"));\n this.invoke(\"debug\", \"Failed to reconnect, retrying.\");\n this.socket = this.createSocket(connectUrl, timer, res, rej);\n }, (_a = this.settings.reconnectInterval) !== null && _a !== void 0 ? _a : 4000);\n this.socket = this.createSocket(connectUrl, timer, res, rej);\n });\n });\n }\n /**\n * INTERNAL\n */\n createSocket(url, timer, res, rej) {\n const socket = new isows__WEBPACK_IMPORTED_MODULE_6__.WebSocket(url);\n socket.binaryType = \"arraybuffer\";\n // For res/rej.\n let init = false;\n socket.onmessage = (evt) => {\n var _a;\n const rawPacket = (0,_bufbuild_protobuf__WEBPACK_IMPORTED_MODULE_8__.fromBinary)(_gen_world_pb_js__WEBPACK_IMPORTED_MODULE_0__.WorldPacketSchema, evt.data instanceof ArrayBuffer ? new Uint8Array(evt.data) : evt.data);\n const { packet } = rawPacket;\n this.invoke(\"debug\", \"Received \" + packet.case);\n this.invoke(\"raw\", rawPacket);\n if (packet.case === undefined) {\n return this.invoke(\"unknown\", packet.value);\n } //this.callbacks.raw?.(packet);;\n let states = {}; // | undefined;\n if (this.hooks.length) {\n try {\n states = {};\n for (let i = 0, len = this.hooks.length; i < len; i++) {\n const res = this.hooks[i](rawPacket);\n if (typeof res === \"object\") {\n const entries = Object.entries(res);\n for (let j = 0, jen = entries.length; j < jen; j++) {\n states[entries[j][0]] = entries[j][1];\n }\n }\n }\n }\n catch (err) {\n this.invoke(\"debug\", \"Unable to execute all hooks safely\");\n // TODO: separate event for error\n console.error(err);\n states = {};\n }\n }\n switch (packet.case) {\n case \"playerInitPacket\":\n if (this.settings.handlePackets.findIndex(v => v === \"INIT\") !== -1)\n this.send(\"playerInitReceived\");\n if ((_a = packet.value.playerProperties) === null || _a === void 0 ? void 0 : _a.isWorldOwner) {\n this.totalBucket.tokenLimit = 200;\n this.chatBucket.tokenLimit = 10;\n }\n else {\n this.totalBucket.tokenLimit = 125;\n this.chatBucket.tokenLimit = 5;\n }\n if (!init) {\n clearInterval(timer);\n init = true;\n res(this);\n // Give the client the init again as they might could have missed it even by a few milliseconds.\n return (0,_util_Timeout_js__WEBPACK_IMPORTED_MODULE_5__.customSetTimeout)(() => {\n // TODO: deduplicate this part.\n if (this.hooks.length) {\n try {\n states = {};\n for (let i = 0, len = this.hooks.length; i < len; i++) {\n const res = this.hooks[i](rawPacket);\n if (typeof res === \"object\") {\n const entries = Object.entries(res);\n for (let j = 0, jen = entries.length; j < jen; j++) {\n states[entries[j][0]] = entries[j][1];\n }\n }\n }\n }\n catch (err) {\n this.invoke(\"debug\", \"Unable to execute all hooks safely\");\n // TODO: separate event for error\n console.error(err);\n states = {};\n }\n }\n this.invoke(packet.case, packet.value, states);\n }, 1500);\n }\n break;\n case \"ping\":\n if (this.settings.handlePackets.findIndex(v => v === \"PING\") !== -1)\n this.send(\"ping\", undefined, true);\n break;\n }\n this.invoke(packet.case, packet.value, states);\n };\n socket.onopen = (evt) => {\n this.invoke(\"debug\", \"Connected successfully, waiting for init packet.\");\n };\n socket.onclose = (evt) => {\n this.invoke(\"debug\", `Server closed connection due to code ${evt.code}, reason: \"${evt.reason}\".`);\n if (!init) {\n clearInterval(timer);\n rej(new _util_Errors_js__WEBPACK_IMPORTED_MODULE_2__.AuthError(evt.reason, (evt.code)));\n }\n if (this.settings.reconnectable) {\n if (this.api === undefined)\n return this.invoke(\"debug\", \"Not attempting to reconnect as this game client was created with a join token.\");\n // if (evt.reason === \"Failed to preload the world.\") {\n // return this.invoke(\"debug\", \"Not attempting to reconnect as the world don't exist.\");\n // }\n if (this.prevWorldId) {\n this.invoke(\"debug\", \"Attempting to reconnect.\");\n return this.joinWorld(this.prevWorldId).catch(err => {\n this.invoke(\"debug\", err);\n });\n }\n else\n this.invoke(\"debug\", \"Warning: Socket closed, attempt to reconnect was made but no previous world id was kept.\");\n }\n };\n return socket;\n }\n /**\n * This is a more direct route if you already have a join key acquired via Pixelwalker's API.\n *\n * Useful for those wary of security.\n */\n static joinWorld(joinKey, obj, EndpointURL = _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.GameWS) {\n const connectUrl = `${EndpointURL}/ws?joinKey=${joinKey}`\n + ((obj === null || obj === void 0 ? void 0 : obj.joinData) === undefined ? \"\" : \"&joinData=\" + btoa(JSON.stringify(obj.joinData)));\n const cli = new PWGameClient(obj === null || obj === void 0 ? void 0 : obj.gameSettings);\n if ((cli.connectAttempts.time + cli.settings.reconnectTimeGap) < Date.now()) {\n cli.connectAttempts = {\n time: Date.now(), count: 0\n };\n }\n return new Promise((res, rej) => {\n var _a;\n if (cli.connectAttempts.count++ > cli.settings.reconnectCount)\n return rej(new Error(\"Unable to connect due to many attempts.\"));\n const timer = setInterval(() => {\n var _a;\n (_a = cli.socket) === null || _a === void 0 ? void 0 : _a.close();\n if (cli.connectAttempts.count++ > cli.settings.reconnectCount)\n return rej(new Error(\"Unable to (re)connect.\"));\n cli.invoke(\"debug\", \"Failed to reconnect, retrying.\");\n cli.socket = cli.createSocket(connectUrl, timer, res, rej);\n }, (_a = cli.settings.reconnectInterval) !== null && _a !== void 0 ? _a : 4000);\n cli.socket = cli.createSocket(connectUrl, timer, res, rej);\n });\n }\n /**\n * This is different to addCallback as all hooks (regardless of the type) will execute first before the callbacks, each hook may modify something or do something in the background\n * and may pass it to callbacks (via the second parameter in callbacks). If an error occurs while executing one of the hooks,\n * the execution of hooks will halt for that packet and callbacks will run without the states.\n *\n * NOTE: This is permanent, if a hook is added, it can't be removed.\n */\n addHook(hook) {\n // if (this.callbacks[\"raw\"] === undefined) this.callbacks[\"raw\"] = [];\n // this.hooks.oldChatMessagesPacket\n this.hooks.push(hook);\n // this.callbacks[\"raw\"].unshift(hook);\n return this;\n }\n addCallback(type, ...cbs) {\n // this.callbacks[type] = cb;\n if (this.callbacks[type] === undefined)\n this.callbacks[type] = [];\n if (cbs.length === 0)\n return this;\n this.callbacks[type].push(...cbs);\n return this;\n }\n prependCallback(type, ...cbs) {\n // this.callbacks[type] = cb;\n if (this.callbacks[type] === undefined)\n this.callbacks[type] = [];\n if (cbs.length === 0)\n return this;\n this.callbacks[type].unshift(...cbs);\n return this;\n }\n /**\n * @param type The type of the event\n * @param cb It can be the function itself (to remove that specific function). If undefined, it will remove ALL functions from that list, it will return undefined.\n */\n removeCallback(type, cb) {\n const callbacks = this.callbacks[type];\n if (callbacks === undefined || cb === undefined) {\n callbacks === null || callbacks === void 0 ? void 0 : callbacks.splice(0);\n return;\n }\n else {\n for (let i = 0, len = callbacks.length; i < len; i++) {\n if (callbacks[i] === cb) {\n return callbacks.splice(i, 1)[0];\n }\n }\n }\n return;\n }\n invoke(type, data, states) {\n return (0,tslib__WEBPACK_IMPORTED_MODULE_7__.__awaiter)(this, void 0, void 0, function* () {\n const cbs = this.callbacks[type];\n let result = {\n count: 0, stopped: false\n };\n if (cbs === undefined)\n return result;\n for (let i = 0, len = cbs.length; i < len; i++) {\n const res = yield ((0,_util_Misc_js__WEBPACK_IMPORTED_MODULE_4__.isCustomPacket)(type) ? cbs[i](data) : cbs[i](data, states));\n result.count++;\n if (typeof res === \"object\") {\n const keys = Object.keys(res);\n for (let j = 0, jen = keys.length; j < jen; j++) {\n data[keys[j]] = res[keys[j]];\n }\n }\n if (res === \"STOP\") {\n result.stopped = true;\n return result;\n }\n }\n return result;\n });\n }\n /**\n * This assumes that the connection\n *\n * @param type Type of the packet.\n * @param value Value of the packet to send along with, note that some properties are optional.\n * @param direct If it should skip queue.\n */\n send(type, value, direct = false) {\n this.invoke(\"debug\", \"Sent \" + type + \" with \" + (value === undefined ? \"0\" : Object.keys(value).length) + \" parameters.\");\n const send = () => {\n var _a;\n return (_a = this.socket) === null || _a === void 0 ? void 0 : _a.send((0,_bufbuild_protobuf__WEBPACK_IMPORTED_MODULE_9__.toBinary)(_gen_world_pb_js__WEBPACK_IMPORTED_MODULE_0__.WorldPacketSchema, (0,_bufbuild_protobuf__WEBPACK_IMPORTED_MODULE_10__.create)(_gen_world_pb_js__WEBPACK_IMPORTED_MODULE_0__.WorldPacketSchema, { packet: { case: type, value } })));\n };\n if (direct)\n return send();\n if (type === \"playerChatPacket\")\n this.chatBucket.queue(() => { send(); });\n else\n this.totalBucket.queue(() => { send(); });\n }\n /**\n * By default this will set the game client settings reconnectable to false.\n *\n * If reconnect is true, an additionl parameter can be passed which is the amount of time to wait before it attempts to reconnect (DEFAULT: none)\n */\n disconnect(reconnect = false) {\n var _a, _b;\n // Accept the possibility that people may try to \n if (reconnect === true)\n this.settings.reconnectable = true;\n else\n this.settings.reconnectable = false;\n (_a = this.socket) === null || _a === void 0 ? void 0 : _a.close();\n return ((_b = this.socket) === null || _b === void 0 ? void 0 : _b.readyState) === isows__WEBPACK_IMPORTED_MODULE_6__.WebSocket.CLOSED;\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFdHYW1lQ2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2dhbWUvUFdHYW1lQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQTJHLGlCQUFpQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEssT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUU5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRWxFLE9BQU8sS0FBSyxNQUFNLGtCQUFrQixDQUFDO0FBRXJDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUl0RCxNQUFNLENBQUMsT0FBTyxPQUFPLFlBQVk7SUF3QjdCLFlBQVksR0FBK0MsRUFBRSxRQUFzQzs7UUFiekYsZ0JBQVcsR0FBRyxJQUFJLEtBQUssQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkMsZUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUVqQyxvQkFBZSxHQUFHO1lBQ3hCLElBQUksRUFBRSxDQUFDLENBQUM7WUFDUixLQUFLLEVBQUUsQ0FBQztTQUNYLENBQUE7UUE4T0QseURBQXlEO1FBQ3pELGtCQUFrQjtRQUNsQixJQUFJO1FBRUo7Ozs7O1dBS0c7UUFDTyxjQUFTLEdBQUcsRUFFaUgsQ0FBQztRQUV4SSxvQkFBb0I7UUFFcEIsMkVBQTJFO1FBRTNFOztXQUVHO1FBQ0ssVUFBSyxHQUFrQyxFQUFFLENBQUM7UUEzUDlDLHdEQUF3RDtRQUN4RCxJQUFJLEdBQUcsSUFB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\n\n//# sourceURL=webpack://PW/./esm/game/PWGameClient.js?");
|
|
52
52
|
|
|
53
53
|
/***/ }),
|
|
54
54
|
|