pw-js-api 0.0.3 → 0.0.5

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/README.md CHANGED
@@ -32,17 +32,18 @@ bun i pw-js-api
32
32
  You could use a CDN like jsdelivr or unpkg. You can put this in your HTML page:
33
33
 
34
34
  ```html
35
- <script src="https://cdn.jsdelivr.net/npm/pw-js-api@0.0.1/browser/pw.prod.js"></script>
35
+ <script src="https://cdn.jsdelivr.net/npm/pw-js-api@0.0.5/browser/pw.prod.js"></script>
36
36
  ```
37
37
 
38
38
  ```html
39
- <script src="https://cdn.jsdelivr.net/npm/pw-js-api@0.0.1/browser/pw.dev.js"></script>
39
+ <script src="https://cdn.jsdelivr.net/npm/pw-js-api@0.0.5/browser/pw.dev.js"></script>
40
40
  ```
41
41
 
42
42
  When you have these scripts in your HTML file, you will be able to use the global variable PW which contains PWGameClient, PWApiClient and Constants.
43
43
 
44
- <!-- ## Example
45
- [Example Bot Source Code](https://github.com/doomestee/PW-JS-Api/blob/main/examples/) -->
44
+ ## Example
45
+
46
+ Feel free to take a look at the [source code for an example bot](https://github.com/doomestee/PW-JS-Api/blob/main/examples/) that only does snake and listen to certain chat commands (.ping, .say and .disconnect)
46
47
 
47
48
  ## Why?
48
49
 
package/browser/pw.dev.js CHANGED
@@ -26,7 +26,7 @@ return /******/ (() => { // webpackBootstrap
26
26
  \*********************************/
27
27
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
28
28
 
29
- eval("\nvar _PWApiClient_token, _PWApiClient_account;\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.mjs\");\nconst PWGameClient_js_1 = tslib_1.__importDefault(__webpack_require__(/*! ../game/PWGameClient.js */ \"./dist/game/PWGameClient.js\"));\nconst Constants_js_1 = __webpack_require__(/*! ../util/Constants.js */ \"./dist/util/Constants.js\");\nconst Misc_js_1 = __webpack_require__(/*! ../util/Misc.js */ \"./dist/util/Misc.js\");\n/**\n * Note if you want to join a world, use new PWGameClient() then run .init()\n */\nclass PWApiClient {\n constructor(email, password) {\n /**\n * The account token, this is private to prevent tampering.\n */\n _PWApiClient_token.set(this, void 0);\n /**\n * Account details with email and password, if applicable.\n */\n _PWApiClient_account.set(this, {\n email: \"\",\n password: \"\"\n });\n this.loggedIn = false;\n if (password === undefined) {\n tslib_1.__classPrivateFieldSet(this, _PWApiClient_token, email, \"f\");\n this.loggedIn = true;\n return;\n }\n tslib_1.__classPrivateFieldGet(this, _PWApiClient_account, \"f\").email = email;\n tslib_1.__classPrivateFieldGet(this, _PWApiClient_account, \"f\").password = password;\n // this.#token = token;\n }\n authenticate(email, password) {\n if (email === undefined) {\n if (tslib_1.__classPrivateFieldGet(this, _PWApiClient_account, \"f\").email.length === 0 || tslib_1.__classPrivateFieldGet(this, _PWApiClient_account, \"f\").password.length === 0)\n throw Error(\"No email/password given.\");\n email = tslib_1.__classPrivateFieldGet(this, _PWApiClient_account, \"f\").email;\n password = tslib_1.__classPrivateFieldGet(this, _PWApiClient_account, \"f\").password;\n }\n return this.request(`${Constants_js_1.Endpoint.Api}/api/collections/users/auth-with-password`, { identity: email, password }).then(res => {\n if (\"token\" in res) {\n tslib_1.__classPrivateFieldSet(this, _PWApiClient_token, res.token, \"f\");\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(`${Constants_js_1.Endpoint.Api}/api/joinkey/${roomType}/${roomId}`, undefined, true);\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 PWGameClient_js_1.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 this.request(`${Constants_js_1.Endpoint.GameHTTP}/listroomtypes`)\n .then(res => {\n PWApiClient.roomTypes = res;\n return res;\n });\n }\n /**\n * Non-authenticated. Returns the mappings from the game API.\n */\n getMappings() {\n return this.request(`${Constants_js_1.Endpoint.GameHTTP}/mappings`);\n }\n getOwnedWorlds(page = 1, perPage = 10, query) {\n if (typeof page === \"object\") {\n query = page;\n page = 1;\n }\n return this.request(`${Constants_js_1.Endpoint.Api}/api/collections/worlds/records?page=${page}&perPage=${perPage}${(0, Misc_js_1.queryToString)(query)}`, undefined, true);\n }\n getPlayers(page = 1, perPage = 10, query) {\n if (typeof page === \"object\") {\n query = page;\n page = 1;\n }\n return this.request(`${Constants_js_1.Endpoint.Api}/api/collections/public_profiles/records?page=${page}&perPage=${perPage}${(0, Misc_js_1.queryToString)(query)}`);\n }\n getPublicWorlds(page = 1, perPage = 10, query) {\n if (typeof page === \"object\") {\n query = page;\n page = 1;\n }\n return this.request(`${Constants_js_1.Endpoint.Api}/api/collections/public_worlds/records?page=${page}&perPage=${perPage}${(0, Misc_js_1.queryToString)(query)}`);\n }\n /**\n * Returns the lobby result.\n */\n getVisibleWorlds() {\n if (this.roomTypes.length === 0)\n throw Error(\"roomTypes is empty - use getRoomTypes first!\");\n return this.request(`${Constants_js_1.Endpoint.GameHTTP}/room/list/${this.roomTypes[0]}`);\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 getMinimap(world, toURL = false) {\n if (toURL)\n return `${Constants_js_1.Endpoint.Api}/api/files/rhrbt6wqhc4s0cp/${world.id}/${world.minimap}`;\n return this.request(this.getMinimap(world, true))\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 }\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 // TODO: QUERY FILTER AND STUFF!\n // https://github.com/MartenM/PixelPilot/blob/main/src/PixelPilot.Core/Api/PixelApiClient.cs very helpful yummy\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 */\n request(url, body, isAuthenticated = false) {\n if (!(url.startsWith(Constants_js_1.Endpoint.Api) || url.startsWith(Constants_js_1.Endpoint.GameHTTP)))\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 (tslib_1.__classPrivateFieldGet(this, _PWApiClient_token, \"f\") && isAuthenticated)\n headers[\"authorization\"] = tslib_1.__classPrivateFieldGet(this, _PWApiClient_token, \"f\");\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 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 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 }\n}\n_PWApiClient_token = new WeakMap(), _PWApiClient_account = new WeakMap();\n/**\n * This will be an empty array if getRoomTypes has never been used successfully at least once.\n */\nPWApiClient.roomTypes = [];\nexports[\"default\"] = PWApiClient;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFdBcGlDbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvYXBpL1BXQXBpQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxzRkFBbUQ7QUFHbkQsdURBQWdEO0FBQ2hELDZDQUFnRDtBQUVoRDs7R0FFRztBQUNILE1BQXFCLFdBQVc7SUEwQjVCLFlBQVksS0FBYSxFQUFFLFFBQWlCO1FBekI1Qzs7V0FFRztRQUNILHFDQUFnQjtRQUVoQjs7V0FFRztRQUNILCtCQUFXO1lBQ1AsS0FBSyxFQUFFLEVBQUU7WUFDVCxRQUFRLEVBQUUsRUFBRTtTQUNmLEVBQUE7UUFFRCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBYWIsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDekIsK0JBQUEsSUFBSSxzQkFBVSxLQUFLLE1BQUEsQ0FBQztZQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixPQUFPO1FBQ1gsQ0FBQztRQUVELCtCQUFBLElBQUksNEJBQVMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzVCLCtCQUFBLElBQUksNEJBQVMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBRWxDLHVCQUF1QjtJQUMzQixDQUFDO0lBV0QsWUFBWSxDQUFDLEtBQWMsRUFBRSxRQUFpQjtRQUMxQyxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN0QixJQUFJLCtCQUFBLElBQUksNEJBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSwrQkFBQSxJQUFJLDRCQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDO2dCQUFFLE1BQU0sS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFFckgsS0FBSyxHQUFHLCtCQUFBLElBQUksNEJBQVMsQ0FBQyxLQUFLLENBQUM7WUFDNUIsUUFBUSxHQUFHLCtCQUFBLElBQUksNEJBQVMsQ0FBQyxRQUFRLENBQUM7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\n\n//# sourceURL=webpack://PW/./dist/api/PWApiClient.js?");
29
+ eval("\nvar _PWApiClient_token, _PWApiClient_account;\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.mjs\");\nconst PWGameClient_js_1 = tslib_1.__importDefault(__webpack_require__(/*! ../game/PWGameClient.js */ \"./dist/game/PWGameClient.js\"));\nconst Constants_js_1 = __webpack_require__(/*! ../util/Constants.js */ \"./dist/util/Constants.js\");\nconst Misc_js_1 = __webpack_require__(/*! ../util/Misc.js */ \"./dist/util/Misc.js\");\n/**\n * Note if you want to join a world, use new PWGameClient() then run .init()\n */\nclass PWApiClient {\n constructor(email, password) {\n /**\n * The account token, this is private to prevent tampering.\n */\n _PWApiClient_token.set(this, void 0);\n /**\n * Account details with email and password, if applicable.\n */\n _PWApiClient_account.set(this, {\n email: \"\",\n password: \"\"\n });\n this.loggedIn = false;\n if (password === undefined) {\n tslib_1.__classPrivateFieldSet(this, _PWApiClient_token, email, \"f\");\n this.loggedIn = true;\n return;\n }\n tslib_1.__classPrivateFieldGet(this, _PWApiClient_account, \"f\").email = email;\n tslib_1.__classPrivateFieldGet(this, _PWApiClient_account, \"f\").password = password;\n // this.#token = token;\n }\n authenticate(email, password) {\n if (email === undefined) {\n if (tslib_1.__classPrivateFieldGet(this, _PWApiClient_account, \"f\").email.length === 0 || tslib_1.__classPrivateFieldGet(this, _PWApiClient_account, \"f\").password.length === 0)\n throw Error(\"No email/password given.\");\n email = tslib_1.__classPrivateFieldGet(this, _PWApiClient_account, \"f\").email;\n password = tslib_1.__classPrivateFieldGet(this, _PWApiClient_account, \"f\").password;\n }\n return this.request(`${Constants_js_1.Endpoint.Api}/api/collections/users/auth-with-password`, { identity: email, password }).then(res => {\n if (\"token\" in res) {\n tslib_1.__classPrivateFieldSet(this, _PWApiClient_token, res.token, \"f\");\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(`${Constants_js_1.Endpoint.Api}/api/joinkey/${roomType}/${roomId}`, undefined, true);\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 PWGameClient_js_1.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 this.request(`${Constants_js_1.Endpoint.GameHTTP}/listroomtypes`)\n .then(res => {\n PWApiClient.roomTypes = res;\n return res;\n });\n }\n /**\n * Non-authenticated. Returns the mappings from the game API.\n */\n getMappings() {\n return this.request(`${Constants_js_1.Endpoint.GameHTTP}/mappings`);\n }\n getOwnedWorlds(page = 1, perPage = 10, query) {\n if (typeof page === \"object\") {\n query = page;\n page = 1;\n }\n return this.request(`${Constants_js_1.Endpoint.Api}/api/collections/worlds/records?page=${page}&perPage=${perPage}${(0, Misc_js_1.queryToString)(query)}`, undefined, true);\n }\n getPlayers(page = 1, perPage = 10, query) {\n if (typeof page === \"object\") {\n query = page;\n page = 1;\n }\n return this.request(`${Constants_js_1.Endpoint.Api}/api/collections/public_profiles/records?page=${page}&perPage=${perPage}${(0, Misc_js_1.queryToString)(query)}`);\n }\n getPublicWorlds(page = 1, perPage = 10, query) {\n if (typeof page === \"object\") {\n query = page;\n page = 1;\n }\n return this.request(`${Constants_js_1.Endpoint.Api}/api/collections/public_worlds/records?page=${page}&perPage=${perPage}${(0, Misc_js_1.queryToString)(query)}`);\n }\n /**\n * Returns the lobby result.\n */\n getVisibleWorlds() {\n if (this.roomTypes.length === 0)\n throw Error(\"roomTypes is empty - use getRoomTypes first!\");\n return this.request(`${Constants_js_1.Endpoint.GameHTTP}/room/list/${this.roomTypes[0]}`);\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 getMinimap(world, toURL = false) {\n if (toURL)\n return `${Constants_js_1.Endpoint.Api}/api/files/rhrbt6wqhc4s0cp/${world.id}/${world.minimap}`;\n return this.request(this.getMinimap(world, true))\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 }\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 // TODO: QUERY FILTER AND STUFF!\n // https://github.com/MartenM/PixelPilot/blob/main/src/PixelPilot.Core/Api/PixelApiClient.cs very helpful yummy\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 */\n request(url, body, isAuthenticated = false) {\n if (!(url.startsWith(Constants_js_1.Endpoint.Api) || url.startsWith(Constants_js_1.Endpoint.GameHTTP)))\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 (tslib_1.__classPrivateFieldGet(this, _PWApiClient_token, \"f\") && isAuthenticated)\n headers[\"authorization\"] = tslib_1.__classPrivateFieldGet(this, _PWApiClient_token, \"f\");\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 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 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 }\n}\n_PWApiClient_token = new WeakMap(), _PWApiClient_account = new WeakMap();\n/**\n * This will be an empty array if getRoomTypes has never been used successfully at least once.\n */\nPWApiClient.roomTypes = [];\nexports[\"default\"] = PWApiClient;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFdBcGlDbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvYXBpL1BXQXBpQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxzRkFBbUQ7QUFHbkQsdURBQWdEO0FBQ2hELDZDQUFnRDtBQUVoRDs7R0FFRztBQUNILE1BQXFCLFdBQVc7SUEwQjVCLFlBQVksS0FBYSxFQUFFLFFBQWlCO1FBekI1Qzs7V0FFRztRQUNILHFDQUFnQjtRQUVoQjs7V0FFRztRQUNILCtCQUFXO1lBQ1AsS0FBSyxFQUFFLEVBQUU7WUFDVCxRQUFRLEVBQUUsRUFBRTtTQUNmLEVBQUE7UUFFRCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBYWIsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDekIsK0JBQUEsSUFBSSxzQkFBVSxLQUFLLE1BQUEsQ0FBQztZQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixPQUFPO1FBQ1gsQ0FBQztRQUVELCtCQUFBLElBQUksNEJBQVMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzVCLCtCQUFBLElBQUksNEJBQVMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBRWxDLHVCQUF1QjtJQUMzQixDQUFDO0lBV0QsWUFBWSxDQUFDLEtBQWMsRUFBRSxRQUFpQjtRQUMxQyxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN0QixJQUFJLCtCQUFBLElBQUksNEJBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSwrQkFBQSxJQUFJLDRCQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDO2dCQUFFLE1BQU0sS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFFckgsS0FBSyxHQUFHLCtCQUFBLElBQUksNEJBQVMsQ0FBQyxLQUFLLENBQUM7WUFDNUIsUUFBUSxHQUFHLCtCQUFBLElBQUksNEJBQVMsQ0FBQyxRQUFRLENBQUM7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\n\n//# sourceURL=webpack://PW/./dist/api/PWApiClient.js?");
30
30
 
31
31
  /***/ }),
32
32
 
@@ -36,7 +36,7 @@ eval("\nvar _PWApiClient_token, _PWApiClient_account;\nObject.defineProperty(exp
36
36
  \***********************************/
37
37
  /***/ ((__unused_webpack_module, exports, __webpack_require__) => {
38
38
 
39
- eval("\nvar _PWGameClient_instances, _PWGameClient_prevWorldId, _PWGameClient_createSocket;\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.mjs\");\nconst world_pb_js_1 = __webpack_require__(/*! ../gen/world_pb.js */ \"./dist/gen/world_pb.js\");\nconst Constants_js_1 = __webpack_require__(/*! ../util/Constants.js */ \"./dist/util/Constants.js\");\nconst isows_1 = __webpack_require__(/*! isows */ \"./node_modules/isows/_esm/native.js\");\nconst protobuf_1 = __webpack_require__(/*! @bufbuild/protobuf */ \"./node_modules/@bufbuild/protobuf/dist/cjs/index.js\");\nconst Bucket_js_1 = tslib_1.__importDefault(__webpack_require__(/*! ../util/Bucket.js */ \"./dist/util/Bucket.js\"));\nclass PWGameClient {\n /**\n * NOTE: After constructing, you must then run .init() to connect the API IF you're using email/password.\n */\n constructor(api, settings) {\n var _a, _b, _c, _d;\n _PWGameClient_instances.add(this);\n _PWGameClient_prevWorldId.set(this, void 0);\n this.totalBucket = new Bucket_js_1.default(100, 1000);\n this.chatBucket = new Bucket_js_1.default(10, 1000);\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 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 : 3,\n reconnectInterval: (_c = settings === null || settings === void 0 ? void 0 : settings.reconnectInterval) !== null && _c !== void 0 ? _c : 5500,\n handlePackets: (_d = settings === null || settings === void 0 ? void 0 : settings.handlePackets) !== null && _d !== void 0 ? _d : [\"PING\"]\n };\n this.api = api;\n }\n init() {\n // For now this only authenticates idk why\n return this.api.authenticate();\n }\n get connected() {\n var _a;\n return ((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === isows_1.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 tslib_1.__awaiter(this, void 0, void 0, function* () {\n var _a, _b, _c, _d;\n if (((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === isows_1.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 = `${Constants_js_1.Endpoint.GameWS}/room/${joinReq.token}`\n + (joinData === undefined ? \"\" : \"?joinData=\" + btoa(JSON.stringify(joinData)));\n tslib_1.__classPrivateFieldSet(this, _PWGameClient_prevWorldId, roomId, \"f\");\n let count = (_d = this.settings.reconnectCount) !== null && _d !== void 0 ? _d : 3;\n return new Promise((res, rej) => {\n var _a;\n const timer = setTimeout(() => {\n if (count-- < 0)\n rej(new Error(\"Unable to (re)connect.\"));\n this.invoke(\"debug\", \"Failed to reconnect, retrying.\");\n this.socket = tslib_1.__classPrivateFieldGet(this, _PWGameClient_instances, \"m\", _PWGameClient_createSocket).call(this, connectUrl, timer, res);\n timer.refresh();\n }, (_a = this.settings.reconnectInterval) !== null && _a !== void 0 ? _a : 5500);\n this.socket = tslib_1.__classPrivateFieldGet(this, _PWGameClient_instances, \"m\", _PWGameClient_createSocket).call(this, connectUrl, timer, res);\n });\n });\n }\n onSocketClose(evt) {\n this.invoke(\"debug\", `Server closed connection due to code: ${evt.code}, reason: ${evt.reason}.`);\n if (this.settings.reconnectable) {\n if (tslib_1.__classPrivateFieldGet(this, _PWGameClient_prevWorldId, \"f\"))\n return this.joinWorld(tslib_1.__classPrivateFieldGet(this, _PWGameClient_prevWorldId, \"f\"));\n else\n this.invoke(\"debug\", \"Warning: Socket closed, attempt to reconnect was made but no previous world id was kept.\");\n }\n }\n onSocketMessage(evt) {\n var _a;\n const { packet } = (0, protobuf_1.fromBinary)(world_pb_js_1.WorldPacketSchema, evt.data instanceof ArrayBuffer ? new Uint8Array(evt.data) : evt.data);\n this.invoke(\"debug\", \"Received \" + packet.case);\n if (packet.case === undefined) {\n return this.invoke(\"unknown\", packet.value);\n }\n else\n this.invoke(\"raw\", packet); //this.callbacks.raw?.(packet);;\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.interval = 250;\n else\n this.totalBucket.interval = 100;\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);\n }\n /**\n * Adds a listener for the event type, it can even be a promise too.\n *\n * If the callback returns a specific string \"STOP\", it will prevent further listeners from being invoked.\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 /**\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 /**\n * INTERNAL. Invokes all functions of a callback type, unless one of them prohibits in transit.\n */\n invoke(type, data) {\n return tslib_1.__awaiter(this, void 0, void 0, function* () {\n const cbs = this.callbacks[type];\n let count = 0;\n if (cbs === undefined)\n return count;\n for (let i = 0, len = cbs.length; i < len; i++) {\n const res = yield cbs[i](data);\n count++;\n if (res === \"STOP\")\n return count;\n }\n return count;\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, protobuf_1.toBinary)(world_pb_js_1.WorldPacketSchema, (0, protobuf_1.create)(world_pb_js_1.WorldPacketSchema, { packet: { case: type, value } })));\n };\n if (direct)\n return send();\n this.totalBucket.queue(() => {\n if (type !== \"playerChatPacket\")\n send();\n else\n this.chatBucket.queue(() => { send(); });\n }, type === \"playerChatPacket\");\n }\n}\n_PWGameClient_prevWorldId = new WeakMap(), _PWGameClient_instances = new WeakSet(), _PWGameClient_createSocket = function _PWGameClient_createSocket(url, timer, res) {\n const socket = new isows_1.WebSocket(url);\n socket.binaryType = \"arraybuffer\";\n socket.onclose = this.onSocketClose.bind(this);\n socket.onmessage = this.onSocketMessage.bind(this);\n socket.onopen = (evt) => {\n clearTimeout(timer);\n this.invoke(\"debug\", \"Connected successfully.\");\n // console.log(\"Connected.\");\n // console.log(\"Connected: \" + new Date(ev.timeStamp));\n res(this);\n };\n return socket;\n};\nexports[\"default\"] = PWGameClient;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFdHYW1lQ2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2dhbWUvUFdHYW1lQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxvREFBNkc7QUFFN0csdURBQWdEO0FBRWhELGlDQUFrQztBQUNsQyxpREFBa0U7QUFFbEUsMEVBQXVDO0FBR3ZDLE1BQXFCLFlBQVk7SUFXN0I7O09BRUc7SUFDSCxZQUFZLEdBQWdCLEVBQUUsUUFBc0M7OztRQVJwRSw0Q0FBc0I7UUFFWixnQkFBVyxHQUFHLElBQUksbUJBQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEMsZUFBVSxHQUFHLElBQUksbUJBQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFxSDVDLHlEQUF5RDtRQUN6RCxrQkFBa0I7UUFDbEIsSUFBSTtRQUVKOzs7OztXQUtHO1FBQ08sY0FBUyxHQUFHLEVBRWtGLENBQUM7UUEzSHJHLElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDWixhQUFhLEVBQUUsTUFBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsYUFBYSxtQ0FBSSxJQUFJO1lBQzlDLGNBQWMsRUFBRSxNQUFBLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxjQUFjLG1DQUFJLENBQUM7WUFDN0MsaUJBQWlCLEVBQUUsTUFBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsaUJBQWlCLG1DQUFJLElBQUk7WUFDdEQsYUFBYSxFQUFFLE1BQUEsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLGFBQWEsbUNBQUksQ0FBQyxNQUFNLENBQUM7U0FDckQsQ0FBQztRQUVGLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJO1FBQ0EsMENBQTBDO1FBRTFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBSSxTQUFTOztRQUNULE9BQU8sQ0FBQSxNQUFBLElBQUksQ0FBQyxNQUFNLDBDQUFFLFVBQVUsTUFBSyxpQkFBUyxDQUFDLElBQUksQ0FBQztJQUN0RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNHLFNBQVMsQ0FBQyxNQUFjLEVBQUUsUUFBd0I7OztZQUNwRCxJQUFJLENBQUEsTUFBQSxJQUFJLENBQUMsTUFBTSwwQ0FBRSxVQUFVLE1BQUssaUJBQVMsQ0FBQyxVQUFVO2dCQUFFLE1BQU0sS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUM7WUFDaEcsZ0dBQWdHO1lBRWhHLE1BQU0sUUFBUSxHQUFHLE1BQUEsTUFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsMENBQUcsQ0FBQyxDQUFDLG1DQUFJLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUVwRyxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUU1RCxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQztnQkFBRSxNQUFNLEtBQUssQ0FBQyx5REFBeUQsQ0FBQyxDQUFDO1lBRWhJLE1BQU0sVUFBVSxHQUFHLEdBQUcsdUJBQVEsQ0FBQyxNQUFNLFNBQVMsT0FBTyxDQUFDLEtBQUssRUFBRTtrQkFDdkQsQ0FBQyxRQUFRLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFcEYsK0JBQUEsSUFBSSw2QkFBZ0IsTUFBTSxNQUFBLENBQUM7WUFFM0IsSUFBSSxLQUFLLEdBQUcsTUFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsbUNBQUksQ0FBQyxDQUFDO1lBRTlDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEVBQUU7O2dCQUM1QixNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO29CQUMxQixJQUFJLEtBQUssRUFBRSxHQUFHLENBQUM7d0JBQUUsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUMsQ0FBQztvQkFDMUQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQztvQkFFdkQsSUFBSSxDQUFDLE1BQU0sR0FBRywrQkFBQSxJQUFJLDJEQUFjLE1BQWxCLElBQUksRUFBZSxVQUFVLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUV6RCxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ3BCLENBQUMsRUFBRSxNQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLG1DQUFJLElBQUksQ0FBQyxDQUFDO2dCQUU1QyxJQUFJLENBQUMsTUFBTSxHQUFHLCtCQUFBLElBQUksMkRBQWMsTUFBbEIsSUFBSSxFQUFlLFVBQVUsRUFBRSxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUM7WUFDN0QsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO0tBQUE7SUFzQlMsYUFBYSxDQUFDLEdBQWU7UUFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUseUNBQXlDLEdBQUcsQ0FBQyxJQUFJLGFBQWEsR0FBRyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFFbEcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzlCLElBQUksK0JBQUEsSUFBSSxpQ0FBYTtnQkFBRSxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsK0JBQUEsSUFBSSxpQ0FBYSxDQUFDLENBQUM7O2dCQUMzRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSwwRkFBMEYsQ0FBQyxDQUFDO1FBQzFILENBQUM7SUFDTCxDQUFDO0lBRVMsZUFBZSxDQUFDLEdBQWlCOztRQUN2QyxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBQSxxQkFBVSxFQUFDLCtCQUFpQixFQUFFLEdBQUcsQ0FBQyxJQUFJLFlBQVksV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFdkksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVoRCxJQUFJLE1BQU0sQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDNUIsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDL0MsQ0FBQzs7WUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBLGdDQUFnQztRQUVsRSxRQUFRLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsQixLQUFLLGtCQUFrQjtnQkFDbkIsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUMvRCxJQUFJLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBRXBDLElBQUksTUFBQSxNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQiwwQ0FBRSxZQUFZO29CQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQzs7b0JBQzVFLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztnQkFDckMsTUFBTTtZQUNWLEtBQUssTUFBTTtnQkFDUCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQy9ELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDdkMsTUFBTTtRQUNkLENBQUM7UUFFRCxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFnQkQ7Ozs7T0FJRztJQUNILFdBQVcsQ0FBbUMsSUFBVyxFQUFFLEdBQUcsR0FBb0U7UUFDOUgsNkJBQTZCO1FBRTdCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxTQUFTO1lBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFbEUsSUFBSSxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUVsQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO1FBRWxDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjLENBQW1DLElBQVcsRUFBRSxFQUE2RDtRQUN2SCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXZDLElBQUksU0FBUyxLQUFLLFNBQVMsSUFBSSxFQUFFLEtBQUssU0FBUyxFQUFFLENBQUM7WUFBQyxTQUFTLGFBQVQsU0FBUyx1QkFBVCxTQUFTLENBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQUMsT0FBTztRQUFDLENBQUM7YUFDN0UsQ0FBQztZQUNGLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDbkQsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7b0JBQ3RCLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLENBQUM7WUFDTCxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU87SUFDWCxDQUFDO0lBRUQ7O09BRUc7SUFDYSxNQUFNLENBQW1DLElBQVcsRUFBRSxJQUF5Qjs7WUFDM0YsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUVqQyxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7WUFFZCxJQUFJLEdBQUcsS0FBSyxTQUFTO2dCQUFFLE9BQU8sS0FBSyxDQUFDO1lBRXBDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDN0MsTUFBTSxHQUFHLEdBQUcsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBRS9CLEtBQUssRUFBRSxDQUFDO2dCQUVSLElBQUksR0FBRyxLQUFLLE1BQU07b0JBQUUsT0FBTyxLQUFLLENBQUM7WUFDckMsQ0FBQztZQUVELE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7S0FBQTtJQUVEOzs7Ozs7T0FNRztJQUNILElBQUksQ0FBa0MsSUFBVyxFQUFFLEtBQThFLEVBQUUsTUFBTSxHQUFHLEtBQUs7UUFDN0ksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxHQUFHLElBQUksR0FBRyxRQUFRLEdBQUcsQ0FBQyxLQUFLLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUM7UUFFM0gsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFOztZQUFDLE9BQUEsTUFBQSxJQUFJLENBQUMsTUFBTSwwQ0FBRSxJQUFJLENBQ2hDLElBQUEsbUJBQVEsRUFBQywrQkFBaUIsRUFBRSxJQUFBLGlCQUFNLEVBQUMsK0JBQWlCLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBOEMsRUFBRSxDQUFDLENBQUMsQ0FDeEksQ0FBQTtTQUFBLENBQUM7UUFFRixJQUFJLE1BQU07WUFBRSxPQUFPLElBQUksRUFBRSxDQUFDO1FBRTFCLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUN4QixJQUFJLElBQUksS0FBSyxrQkFBa0I7Z0JBQUUsSUFBSSxFQUFFLENBQUE7O2dCQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLEVBQUUsQ0FBQSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pELENBQUMsRUFBRSxJQUFJLEtBQUssa0JBQWtCLENBQUMsQ0FBQTtJQUNuQyxDQUFDO0NBQ0o7cUpBbkppQixHQUFXLEVBQUUsS0FBcUIsRUFBRSxHQUFrQztJQUNoRixNQUFNLE1BQU0sR0FBRyxJQUFJLGlCQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDbEMsTUFBTSxDQUFDLFVBQVUsR0FBRyxhQUFhLENBQUM7SUFFbEMsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRW5ELE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUNwQixZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUseUJBQXlCLENBQUMsQ0FBQztRQUNoRCw2QkFBNkI7UUFDN0IsdURBQXVEO1FBRXZELEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNkLENBQUMsQ0FBQztJQUVGLE9BQU8sTUFBTSxDQUFDO0FBQ2xCLENBQUM7a0JBekZnQixZQUFZIn0=\n\n//# sourceURL=webpack://PW/./dist/game/PWGameClient.js?");
39
+ eval("\nvar _PWGameClient_instances, _PWGameClient_prevWorldId, _PWGameClient_createSocket;\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst tslib_1 = __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.mjs\");\nconst world_pb_js_1 = __webpack_require__(/*! ../gen/world_pb.js */ \"./dist/gen/world_pb.js\");\nconst Constants_js_1 = __webpack_require__(/*! ../util/Constants.js */ \"./dist/util/Constants.js\");\nconst isows_1 = __webpack_require__(/*! isows */ \"./node_modules/isows/_esm/native.js\");\nconst protobuf_1 = __webpack_require__(/*! @bufbuild/protobuf */ \"./node_modules/@bufbuild/protobuf/dist/cjs/index.js\");\nconst Bucket_js_1 = tslib_1.__importDefault(__webpack_require__(/*! ../util/Bucket.js */ \"./dist/util/Bucket.js\"));\nclass PWGameClient {\n /**\n * NOTE: After constructing, you must then run .init() to connect the API IF you're using email/password.\n */\n constructor(api, settings) {\n var _a, _b, _c, _d;\n _PWGameClient_instances.add(this);\n _PWGameClient_prevWorldId.set(this, void 0);\n this.totalBucket = new Bucket_js_1.default(100, 1000);\n this.chatBucket = new Bucket_js_1.default(10, 1000);\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 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 : 3,\n reconnectInterval: (_c = settings === null || settings === void 0 ? void 0 : settings.reconnectInterval) !== null && _c !== void 0 ? _c : 5500,\n handlePackets: (_d = settings === null || settings === void 0 ? void 0 : settings.handlePackets) !== null && _d !== void 0 ? _d : [\"PING\"]\n };\n this.api = api;\n }\n init() {\n // For now this only authenticates idk why\n return this.api.authenticate();\n }\n get connected() {\n var _a;\n return ((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === isows_1.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 tslib_1.__awaiter(this, void 0, void 0, function* () {\n var _a, _b, _c, _d;\n if (((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === isows_1.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 = `${Constants_js_1.Endpoint.GameWS}/room/${joinReq.token}`\n + (joinData === undefined ? \"\" : \"?joinData=\" + btoa(JSON.stringify(joinData)));\n tslib_1.__classPrivateFieldSet(this, _PWGameClient_prevWorldId, roomId, \"f\");\n let count = (_d = this.settings.reconnectCount) !== null && _d !== void 0 ? _d : 3;\n return new Promise((res, rej) => {\n var _a;\n const timer = setTimeout(() => {\n if (count-- < 0)\n rej(new Error(\"Unable to (re)connect.\"));\n this.invoke(\"debug\", \"Failed to reconnect, retrying.\");\n this.socket = tslib_1.__classPrivateFieldGet(this, _PWGameClient_instances, \"m\", _PWGameClient_createSocket).call(this, connectUrl, timer, res);\n timer.refresh();\n }, (_a = this.settings.reconnectInterval) !== null && _a !== void 0 ? _a : 5500);\n this.socket = tslib_1.__classPrivateFieldGet(this, _PWGameClient_instances, \"m\", _PWGameClient_createSocket).call(this, connectUrl, timer, res);\n });\n });\n }\n onSocketClose(evt) {\n this.invoke(\"debug\", `Server closed connection due to code: ${evt.code}, reason: ${evt.reason}.`);\n if (this.settings.reconnectable) {\n if (tslib_1.__classPrivateFieldGet(this, _PWGameClient_prevWorldId, \"f\"))\n return this.joinWorld(tslib_1.__classPrivateFieldGet(this, _PWGameClient_prevWorldId, \"f\"));\n else\n this.invoke(\"debug\", \"Warning: Socket closed, attempt to reconnect was made but no previous world id was kept.\");\n }\n }\n onSocketMessage(evt) {\n var _a;\n const { packet } = (0, protobuf_1.fromBinary)(world_pb_js_1.WorldPacketSchema, evt.data instanceof ArrayBuffer ? new Uint8Array(evt.data) : evt.data);\n this.invoke(\"debug\", \"Received \" + packet.case);\n if (packet.case === undefined) {\n return this.invoke(\"unknown\", packet.value);\n }\n else\n this.invoke(\"raw\", packet); //this.callbacks.raw?.(packet);;\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.interval = 250;\n else\n this.totalBucket.interval = 100;\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);\n }\n /**\n * Adds a listener for the event type, it can even be a promise too.\n *\n * If the callback returns a specific string \"STOP\", it will prevent further listeners from being invoked.\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 /**\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 /**\n * INTERNAL. Invokes all functions of a callback type, unless one of them prohibits in transit.\n */\n invoke(type, data) {\n return tslib_1.__awaiter(this, void 0, void 0, function* () {\n const cbs = this.callbacks[type];\n let count = 0;\n if (cbs === undefined)\n return count;\n for (let i = 0, len = cbs.length; i < len; i++) {\n const res = yield cbs[i](data);\n count++;\n if (res === \"STOP\")\n return count;\n }\n return count;\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, protobuf_1.toBinary)(world_pb_js_1.WorldPacketSchema, (0, protobuf_1.create)(world_pb_js_1.WorldPacketSchema, { packet: { case: type, value } })));\n };\n if (direct)\n return send();\n this.totalBucket.queue(() => {\n if (type !== \"playerChatPacket\")\n send();\n else\n this.chatBucket.queue(() => { send(); });\n }, type === \"playerChatPacket\");\n }\n}\n_PWGameClient_prevWorldId = new WeakMap(), _PWGameClient_instances = new WeakSet(), _PWGameClient_createSocket = function _PWGameClient_createSocket(url, timer, res) {\n const socket = new isows_1.WebSocket(url);\n socket.binaryType = \"arraybuffer\";\n socket.onclose = this.onSocketClose.bind(this);\n socket.onmessage = this.onSocketMessage.bind(this);\n socket.onopen = (evt) => {\n clearTimeout(timer);\n this.invoke(\"debug\", \"Connected successfully.\");\n // console.log(\"Connected.\");\n // console.log(\"Connected: \" + new Date(ev.timeStamp));\n res(this);\n };\n return socket;\n};\nexports[\"default\"] = PWGameClient;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFdHYW1lQ2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2dhbWUvUFdHYW1lQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxvREFBbUo7QUFFbkosdURBQWdEO0FBRWhELGlDQUFrQztBQUNsQyxpREFBa0U7QUFFbEUsMEVBQXVDO0FBR3ZDLE1BQXFCLFlBQVk7SUFXN0I7O09BRUc7SUFDSCxZQUFZLEdBQWdCLEVBQUUsUUFBc0M7OztRQVJwRSw0Q0FBc0I7UUFFWixnQkFBVyxHQUFHLElBQUksbUJBQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEMsZUFBVSxHQUFHLElBQUksbUJBQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFxSDVDLHlEQUF5RDtRQUN6RCxrQkFBa0I7UUFDbEIsSUFBSTtRQUVKOzs7OztXQUtHO1FBQ08sY0FBUyxHQUFHLEVBRWtGLENBQUM7UUEzSHJHLElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDWixhQUFhLEVBQUUsTUFBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsYUFBYSxtQ0FBSSxJQUFJO1lBQzlDLGNBQWMsRUFBRSxNQUFBLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxjQUFjLG1DQUFJLENBQUM7WUFDN0MsaUJBQWlCLEVBQUUsTUFBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsaUJBQWlCLG1DQUFJLElBQUk7WUFDdEQsYUFBYSxFQUFFLE1BQUEsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLGFBQWEsbUNBQUksQ0FBQyxNQUFNLENBQUM7U0FDckQsQ0FBQztRQUVGLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJO1FBQ0EsMENBQTBDO1FBRTFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNuQyxDQUFD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\n\n//# sourceURL=webpack://PW/./dist/game/PWGameClient.js?");
40
40
 
41
41
  /***/ }),
42
42
 
@@ -39,7 +39,7 @@ export default class PWApiClient {
39
39
  */
40
40
  joinWorld(roomId: string, obj?: {
41
41
  joinData?: WorldJoinData;
42
- gameSettings?: GameClientSettings;
42
+ gameSettings?: Partial<GameClientSettings>;
43
43
  }): Promise<PWGameClient>;
44
44
  /**
45
45
  * This will be an empty array if getRoomTypes has never been used successfully at least once.
@@ -190,4 +190,4 @@ _PWApiClient_token = new WeakMap(), _PWApiClient_account = new WeakMap();
190
190
  */
191
191
  PWApiClient.roomTypes = [];
192
192
  exports.default = PWApiClient;
193
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFdBcGlDbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvYXBpL1BXQXBpQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxzRkFBbUQ7QUFHbkQsdURBQWdEO0FBQ2hELDZDQUFnRDtBQUVoRDs7R0FFRztBQUNILE1BQXFCLFdBQVc7SUEwQjVCLFlBQVksS0FBYSxFQUFFLFFBQWlCO1FBekI1Qzs7V0FFRztRQUNILHFDQUFnQjtRQUVoQjs7V0FFRztRQUNILCtCQUFXO1lBQ1AsS0FBSyxFQUFFLEVBQUU7WUFDVCxRQUFRLEVBQUUsRUFBRTtTQUNmLEVBQUE7UUFFRCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBYWIsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDekIsK0JBQUEsSUFBSSxzQkFBVSxLQUFLLE1BQUEsQ0FBQztZQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixPQUFPO1FBQ1gsQ0FBQztRQUVELCtCQUFBLElBQUksNEJBQVMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzVCLCtCQUFBLElBQUksNEJBQVMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBRWxDLHVCQUF1QjtJQUMzQixDQUFDO0lBV0QsWUFBWSxDQUFDLEtBQWMsRUFBRSxRQUFpQjtRQUMxQyxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN0QixJQUFJLCtCQUFBLElBQUksNEJBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSwrQkFBQSxJQUFJLDRCQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDO2dCQUFFLE1BQU0sS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFFckgsS0FBSyxHQUFHLCtCQUFBLElBQUksNEJBQVMsQ0FBQyxLQUFLLENBQUM7WUFDNUIsUUFBUSxHQUFHLCtCQUFBLElBQUksNEJBQVMsQ0FBQyxRQUFRLENBQUM7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
193
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFdBcGlDbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvYXBpL1BXQXBpQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxzRkFBbUQ7QUFHbkQsdURBQWdEO0FBQ2hELDZDQUFnRDtBQUVoRDs7R0FFRztBQUNILE1BQXFCLFdBQVc7SUEwQjVCLFlBQVksS0FBYSxFQUFFLFFBQWlCO1FBekI1Qzs7V0FFRztRQUNILHFDQUFnQjtRQUVoQjs7V0FFRztRQUNILCtCQUFXO1lBQ1AsS0FBSyxFQUFFLEVBQUU7WUFDVCxRQUFRLEVBQUUsRUFBRTtTQUNmLEVBQUE7UUFFRCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBYWIsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDekIsK0JBQUEsSUFBSSxzQkFBVSxLQUFLLE1BQUEsQ0FBQztZQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixPQUFPO1FBQ1gsQ0FBQztRQUVELCtCQUFBLElBQUksNEJBQVMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzVCLCtCQUFBLElBQUksNEJBQVMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBRWxDLHVCQUF1QjtJQUMzQixDQUFDO0lBV0QsWUFBWSxDQUFDLEtBQWMsRUFBRSxRQUFpQjtRQUMxQyxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN0QixJQUFJLCtCQUFBLElBQUksNEJBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSwrQkFBQSxJQUFJLDRCQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDO2dCQUFFLE1BQU0sS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFFckgsS0FBSyxHQUFHLCtCQUFBLElBQUksNEJBQVMsQ0FBQyxLQUFLLENBQUM7WUFDNUIsUUFBUSxHQUFHLCtCQUFBLElBQUksNEJBQVMsQ0FBQyxRQUFRLENBQUM7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
@@ -1,5 +1,5 @@
1
1
  import type PWApiClient from "../api/PWApiClient.js";
2
- import { WorldBlockFilledPacket, WorldBlockPlacedPacket } from "../gen/world_pb.js";
2
+ import { type PlayerChatPacket, type WorldBlockFilledPacket, type WorldBlockPlacedPacket } from "../gen/world_pb.js";
3
3
  import type { GameClientSettings, WorldJoinData } from "../types/game.js";
4
4
  import type { MergedEvents, WorldEvents } from "../types/events.js";
5
5
  import Bucket from "../util/Bucket.js";
@@ -54,7 +54,7 @@ export default class PWGameClient {
54
54
  * @param value Value of the packet to send along with, note that some properties are optional.
55
55
  * @param direct If it should skip queue.
56
56
  */
57
- send<Event extends keyof WorldEvents>(type: Event, value?: OmitRecursively<SendEvent<Event, WorldEvents>, "$typeName" | "$unknown">, direct?: boolean): void;
57
+ send<Event extends keyof WorldEvents>(type: Event, value?: OmitRecursively<Sendable<Event, WorldEvents>, "$typeName" | "$unknown">, direct?: boolean): void;
58
58
  }
59
- type SendEvent<E extends keyof WorldEvents, WE extends WorldEvents> = E extends "worldBlockPlacedPacket" ? Optional<WorldBlockPlacedPacket, "extraFields"> : E extends "WorldBlockFilledPacket" ? Optional<WorldBlockFilledPacket, "extraFields"> : WE[E];
59
+ type Sendable<E extends keyof WorldEvents, WE extends WorldEvents> = E extends "worldBlockPlacedPacket" ? Optional<WorldBlockPlacedPacket, "extraFields"> : E extends "WorldBlockFilledPacket" ? Optional<WorldBlockFilledPacket, "extraFields"> : E extends "playerChatPacket" ? Omit<PlayerChatPacket, "playerId"> : WE[E];
60
60
  export {};
@@ -198,4 +198,4 @@ _PWGameClient_prevWorldId = new WeakMap(), _PWGameClient_instances = new WeakSet
198
198
  return socket;
199
199
  };
200
200
  exports.default = PWGameClient;
201
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFdHYW1lQ2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2dhbWUvUFdHYW1lQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxvREFBNkc7QUFFN0csdURBQWdEO0FBRWhELGlDQUFrQztBQUNsQyxpREFBa0U7QUFFbEUsMEVBQXVDO0FBR3ZDLE1BQXFCLFlBQVk7SUFXN0I7O09BRUc7SUFDSCxZQUFZLEdBQWdCLEVBQUUsUUFBc0M7OztRQVJwRSw0Q0FBc0I7UUFFWixnQkFBVyxHQUFHLElBQUksbUJBQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEMsZUFBVSxHQUFHLElBQUksbUJBQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFxSDVDLHlEQUF5RDtRQUN6RCxrQkFBa0I7UUFDbEIsSUFBSTtRQUVKOzs7OztXQUtHO1FBQ08sY0FBUyxHQUFHLEVBRWtGLENBQUM7UUEzSHJHLElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDWixhQUFhLEVBQUUsTUFBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsYUFBYSxtQ0FBSSxJQUFJO1lBQzlDLGNBQWMsRUFBRSxNQUFBLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxjQUFjLG1DQUFJLENBQUM7WUFDN0MsaUJBQWlCLEVBQUUsTUFBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsaUJBQWlCLG1DQUFJLElBQUk7WUFDdEQsYUFBYSxFQUFFLE1BQUEsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLGFBQWEsbUNBQUksQ0FBQyxNQUFNLENBQUM7U0FDckQsQ0FBQztRQUVGLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJO1FBQ0EsMENBQTBDO1FBRTFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNuQyxDQUFD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
201
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFdHYW1lQ2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2dhbWUvUFdHYW1lQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxvREFBbUo7QUFFbkosdURBQWdEO0FBRWhELGlDQUFrQztBQUNsQyxpREFBa0U7QUFFbEUsMEVBQXVDO0FBR3ZDLE1BQXFCLFlBQVk7SUFXN0I7O09BRUc7SUFDSCxZQUFZLEdBQWdCLEVBQUUsUUFBc0M7OztRQVJwRSw0Q0FBc0I7UUFFWixnQkFBVyxHQUFHLElBQUksbUJBQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEMsZUFBVSxHQUFHLElBQUksbUJBQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFxSDVDLHlEQUF5RDtRQUN6RCxrQkFBa0I7UUFDbEIsSUFBSTtRQUVKOzs7OztXQUtHO1FBQ08sY0FBUyxHQUFHLEVBRWtGLENBQUM7UUEzSHJHLElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDWixhQUFhLEVBQUUsTUFBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsYUFBYSxtQ0FBSSxJQUFJO1lBQzlDLGNBQWMsRUFBRSxNQUFBLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxjQUFjLG1DQUFJLENBQUM7WUFDN0MsaUJBQWlCLEVBQUUsTUFBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsaUJBQWlCLG1DQUFJLElBQUk7WUFDdEQsYUFBYSxFQUFFLE1BQUEsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLGFBQWEsbUNBQUksQ0FBQyxNQUFNLENBQUM7U0FDckQsQ0FBQztRQUVGLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJO1FBQ0EsMENBQTBDO1FBRTFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNuQyxDQUFD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
@@ -0,0 +1,118 @@
1
+ // Up to date as of v0.0.5
2
+ // - 2025-01-01 21:37 UTC+0
3
+
4
+ import { PWApiClient } from "pw-js-api";
5
+ import { swapObject } from "./util";
6
+
7
+ import { setTimeout } from "node:timers/promises";
8
+
9
+ const cli = new PWApiClient("<YOUR EMAIL HERE>", "<YOUR PASSWORD HERE>");
10
+
11
+ const mappings = await cli.getMappings();
12
+ const blockIdToType = swapObject(mappings);
13
+
14
+ // To fetch the token, allowing it to join a world.
15
+ await cli.authenticate();
16
+
17
+ const con = await cli.joinWorld("rfdeeb8d9d94f76", {
18
+ gameSettings: {
19
+ handlePackets: ["PING"]
20
+ }
21
+ });
22
+
23
+ /**
24
+ * Doesn't support filling
25
+ * @param {string} blockId
26
+ * @param {{ x: number, y: number }[]} positions
27
+ * @param {0|1} layer
28
+ * @returns
29
+ */
30
+ const place = (blockId, positions, layer = 1) => {
31
+ return con.send("worldBlockPlacedPacket", {
32
+ blockId: mappings[blockId], layer,
33
+ positions, isFillOperation: false
34
+ });
35
+ }
36
+
37
+ let botId = 1; let isOwner = false;
38
+
39
+ // You can use setCallBack (which returns itself for chaining)
40
+ con.addCallback("playerInitPacket", (data) => {
41
+ console.log("Connected as " + data.playerProperties?.username);
42
+
43
+ if (data.playerProperties) {
44
+ botId = data.playerProperties.playerId;
45
+ isOwner = data.playerProperties.isWorldOwner;
46
+ }
47
+
48
+ con.send("playerInitReceived");
49
+ }).addCallback("playerJoinedPacket", (data) => {
50
+ console.log(data.properties?.username + (data.properties.playerId < botId ? " is here." : " joined the world."));
51
+ });
52
+
53
+ con.addCallback("debug", console.log);
54
+
55
+ const snakeable = ["basic_", "brick_", "beveled_", "glass_", "minerals_"];
56
+
57
+ con.addCallback("worldBlockPlacedPacket", async function (data) {
58
+ if (data.playerId === botId) return;
59
+
60
+ if (isOwner) {
61
+ const blockId = blockIdToType[data.blockId];
62
+
63
+ if (data.isFillOperation) return; // fills have long cooldown.
64
+
65
+ if (snakeable.some(v => blockId === v + "green" || blockId === v + "red")) {
66
+ if (blockId.endsWith("green")) {
67
+ await setTimeout(150).then(() => place(blockId.split("_")[0] + "_red", data.positions, 1));
68
+ }
69
+ await setTimeout(300).then(() => place("empty", data.positions, 1));
70
+ }
71
+ }
72
+ });
73
+
74
+ let helpTime = -1;
75
+
76
+ con.addCallback("systemMessagePacket", (data) => {
77
+ // From /help - continuation of .ping
78
+ if (data.message.startsWith("Available commands:")) {
79
+ con.send("playerChatPacket", {
80
+ message: "Pong! Response time: " + (Date.now() - helpTime) + "ms.",
81
+ });
82
+ }
83
+ });
84
+
85
+ // A con accepts multiple callbacks for the same type!
86
+ // If one of the callback returns a "STOP" (similar to your typical event's stop propagation). It can even return a promise resolving to STOP too.
87
+
88
+ // For example:
89
+ // All messages will get logged if and only if the person isn't the bot.
90
+ // This can be tested with the ".say .ping" command where you will notice that the bot's messages does not get logged nor will it be listened to.
91
+ con.addCallback("playerChatPacket", (data) => {
92
+ if (data.playerId === botId) return "STOP";
93
+
94
+ console.log(data.message);
95
+ });
96
+
97
+ con.addCallback("playerChatPacket", (data) => {
98
+ const args = data.message.split(" ");
99
+
100
+ switch (args[0].toLowerCase()) {
101
+ case ".ping":
102
+ helpTime = Date.now();
103
+ con.send("playerChatPacket", {
104
+ message: "/help"
105
+ });
106
+ break;
107
+ case ".disconnect":
108
+ if (args[1] === "-f") con.settings.reconnectable = false;
109
+
110
+ con.socket?.close();
111
+ break;
112
+ case ".say":
113
+ con.send("playerChatPacket", {
114
+ message: args.slice(1).join(" ")
115
+ });
116
+ break;
117
+ }
118
+ });
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "pw-snake-js-bot",
3
+ "version": "0.0.1",
4
+ "description": "An example bot that does simple snake and ping command",
5
+ "main": "./index.js",
6
+ "scripts": {
7
+ "start": "node ./index.js"
8
+ },
9
+ "keywords": ["PixelWalker", "Example"],
10
+ "author": "Doomester",
11
+ "license": "Unlicense",
12
+ "type": "module",
13
+ "dependencies": {
14
+ "pw-js-api": "^0.0.5"
15
+ },
16
+ "devDependencies": {
17
+ "@types/node": "^22.10.3"
18
+ }
19
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pw-js-api",
3
- "version": "0.0.3",
3
+ "version": "0.0.5",
4
4
  "description": "A PixelWalker Library, aims to be minimal with support for browsers.",
5
5
  "scripts": {
6
6
  "test": "bun test/index.ts",