pw-js-api 0.3.11-dev.7359457 → 0.3.12-dev.7afac9e

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 CHANGED
@@ -37,7 +37,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpac
37
37
  /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
38
38
 
39
39
  "use strict";
40
- eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ PWAtlases)\n/* harmony export */ });\n/* harmony import */ var _util_Constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/Constants */ \"./esm/util/Constants.js\");\n/* harmony import */ var _PWApiClient__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./PWApiClient */ \"./esm/api/PWApiClient.js\");\n\n\n/**\n * This standalone class has all (static) functions related to the atlases.\n */\nclass PWAtlases {\n /**\n * This is the json including the data for aura toggle animations, fire, team colour, smileys and other sprites.\n */\n static getSpritesJSON() {\n return _PWApiClient__WEBPACK_IMPORTED_MODULE_1__[\"default\"].request(_util_Constants__WEBPACK_IMPORTED_MODULE_0__.Endpoint.Client + \"/atlases/sprites.json\");\n }\n /**\n * This is the json including the data for blocks (including animations / morphs, action blocks, decorations).\n */\n static getBlocksJSON() {\n return _PWApiClient__WEBPACK_IMPORTED_MODULE_1__[\"default\"].request(_util_Constants__WEBPACK_IMPORTED_MODULE_0__.Endpoint.Client + \"/atlases/sprites.json\");\n }\n /**\n * This is the spritesheet (image in arraybuffer) for aura toggle animations, fire, team colour, smileys and other sprites.\n */\n static getSpritesPNG() {\n return _PWApiClient__WEBPACK_IMPORTED_MODULE_1__[\"default\"].request(_util_Constants__WEBPACK_IMPORTED_MODULE_0__.Endpoint.Client + \"/atlases/sprites.png\");\n }\n /**\n * This is the spritesheet (image in arraybuffer) for blocks (including animations / morphs, action blocks, decorations).\n */\n static getBlocksPNG() {\n return _PWApiClient__WEBPACK_IMPORTED_MODULE_1__[\"default\"].request(_util_Constants__WEBPACK_IMPORTED_MODULE_0__.Endpoint.Client + \"/atlases/blocks.png\");\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFdBdGxhc2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2FwaS9QV0F0bGFzZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzdDLE9BQU8sV0FBVyxNQUFNLGVBQWUsQ0FBQztBQUV4Qzs7R0FFRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sU0FBUztJQUMxQjs7T0FFRztJQUNILE1BQU0sQ0FBQyxjQUFjO1FBQ2pCLE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBZ0IsUUFBUSxDQUFDLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxDQUFBO0lBQ3hGLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxhQUFhO1FBQ2hCLE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBZ0IsUUFBUSxDQUFDLE1BQU0sR0FBRyx1QkFBdUIsQ0FBQyxDQUFBO0lBQ3hGLENBQUM7SUFFRDs7T0FFRztJQUNILE1BQU0sQ0FBQyxhQUFhO1FBQ2hCLE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBYyxRQUFRLENBQUMsTUFBTSxHQUFHLHNCQUFzQixDQUFDLENBQUE7SUFDckYsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLFlBQVk7UUFDZixPQUFPLFdBQVcsQ0FBQyxPQUFPLENBQWMsUUFBUSxDQUFDLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxDQUFBO0lBQ3BGLENBQUM7Q0FDSiJ9\n\n//# sourceURL=webpack://PW/./esm/api/PWAtlases.js?");
40
+ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"default\": () => (/* binding */ PWAtlases)\n/* harmony export */ });\n/* harmony import */ var _util_Constants_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../util/Constants.js */ \"./esm/util/Constants.js\");\n/* harmony import */ var _PWApiClient_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./PWApiClient.js */ \"./esm/api/PWApiClient.js\");\n\n\n/**\n * This standalone class has all (static) functions related to the atlases.\n */\nclass PWAtlases {\n /**\n * This is the json including the data for aura toggle animations, fire, team colour, smileys and other sprites.\n */\n static getSpritesJSON() {\n return _PWApiClient_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].request(_util_Constants_js__WEBPACK_IMPORTED_MODULE_0__.Endpoint.Client + \"/atlases/sprites.json\");\n }\n /**\n * This is the json including the data for blocks (including animations / morphs, action blocks, decorations).\n */\n static getBlocksJSON() {\n return _PWApiClient_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].request(_util_Constants_js__WEBPACK_IMPORTED_MODULE_0__.Endpoint.Client + \"/atlases/sprites.json\");\n }\n /**\n * This is the spritesheet (image in arraybuffer) for aura toggle animations, fire, team colour, smileys and other sprites.\n */\n static getSpritesPNG() {\n return _PWApiClient_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].request(_util_Constants_js__WEBPACK_IMPORTED_MODULE_0__.Endpoint.Client + \"/atlases/sprites.png\");\n }\n /**\n * This is the spritesheet (image in arraybuffer) for blocks (including animations / morphs, action blocks, decorations).\n */\n static getBlocksPNG() {\n return _PWApiClient_js__WEBPACK_IMPORTED_MODULE_1__[\"default\"].request(_util_Constants_js__WEBPACK_IMPORTED_MODULE_0__.Endpoint.Client + \"/atlases/blocks.png\");\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFdBdGxhc2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2FwaS9QV0F0bGFzZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2hELE9BQU8sV0FBVyxNQUFNLGtCQUFrQixDQUFDO0FBRTNDOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTyxTQUFTO0lBQzFCOztPQUVHO0lBQ0gsTUFBTSxDQUFDLGNBQWM7UUFDakIsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFnQixRQUFRLENBQUMsTUFBTSxHQUFHLHVCQUF1QixDQUFDLENBQUE7SUFDeEYsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLGFBQWE7UUFDaEIsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFnQixRQUFRLENBQUMsTUFBTSxHQUFHLHVCQUF1QixDQUFDLENBQUE7SUFDeEYsQ0FBQztJQUVEOztPQUVHO0lBQ0gsTUFBTSxDQUFDLGFBQWE7UUFDaEIsT0FBTyxXQUFXLENBQUMsT0FBTyxDQUFjLFFBQVEsQ0FBQyxNQUFNLEdBQUcsc0JBQXNCLENBQUMsQ0FBQTtJQUNyRixDQUFDO0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsWUFBWTtRQUNmLE9BQU8sV0FBVyxDQUFDLE9BQU8sQ0FBYyxRQUFRLENBQUMsTUFBTSxHQUFHLHFCQUFxQixDQUFDLENBQUE7SUFDcEYsQ0FBQztDQUNKIn0=\n\n//# sourceURL=webpack://PW/./esm/api/PWAtlases.js?");
41
41
 
42
42
  /***/ }),
43
43
 
@@ -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, EndpointURL) {\n return (0,tslib__WEBPACK_IMPORTED_MODULE_7__.__awaiter)(this, void 0, void 0, function* () {\n var _a, _b, _c, _d, _e;\n if (EndpointURL === void 0) { EndpointURL = (_b = (_a = this.api) === null || _a === void 0 ? void 0 : _a.options.endpoints.GameWS) !== null && _b !== void 0 ? _b : _util_Constants_js__WEBPACK_IMPORTED_MODULE_1__.Endpoint.GameWS; }\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 (((_c = this.socket) === null || _c === void 0 ? void 0 : _c.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 = (_e = (_d = this.api.roomTypes) === null || _d === void 0 ? void 0 : _d[0]) !== null && _e !== void 0 ? _e : 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?");
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, _d, _e;\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 = `${(_e = (_d = this.api) === null || _d === void 0 ? void 0 : _d.options.endpoints.GameWS) !== null && _e !== void 0 ? _e : _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, 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