pw-js-api 0.3.7-dev.6e82efb → 0.3.8

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.
@@ -1,5 +1,5 @@
1
1
  import PWGameClient from "../game/PWGameClient.js";
2
- import type { APIFailure, AuthResultSuccess, CollectionResult, ColUser, ColQuery, ColWorld, JoinKeyResult, ListBlockResult, LobbyResult } from "../types/api.js";
2
+ import type { APIFailure, AuthResultSuccess, CollectionResult, ColUser, ColQuery, ColWorld, JoinKeyResult, ListBlockResult, LobbyResult, ApiClientOptions } from "../types/api.js";
3
3
  import type { GameClientSettings, WorldJoinData } from "../types/game.js";
4
4
  /**
5
5
  * Note if you want to join a world, use new PWGameClient() then run .init()
@@ -13,6 +13,7 @@ export default class PWApiClient {
13
13
  * Account details with email and password, if applicable.
14
14
  */
15
15
  private account;
16
+ options: ApiClientOptions;
16
17
  loggedIn: boolean;
17
18
  /**
18
19
  * This will be undefined if getListBlocks() hasn't been run once.
@@ -30,12 +31,12 @@ export default class PWApiClient {
30
31
  * This will create an instance of the class, as you're using the token, it will automatically be marked as loggedIn.
31
32
  * @param token Must be a valid account token.
32
33
  */
33
- constructor(token: string);
34
+ constructor(token: string, options?: ApiClientOptions);
34
35
  /**
35
36
  * This will create an instance of the class, as you're putting the account details, you must manually authenticate before invoking restricted calls including joinRoom.
36
37
  * If populating email and password, you must manually authenticate yourself.
37
38
  */
38
- constructor(email: string, password: string);
39
+ constructor(email: string, password: string, options?: ApiClientOptions);
39
40
  /**
40
41
  * Connects the API instance to the server.
41
42
  * This will enable the client to join the room, or access to restricted collections.
@@ -76,7 +77,7 @@ export default class PWApiClient {
76
77
  /**
77
78
  * Non-authenticated. This will refresh the room types each time, so make sure to check if roomTypes is available.
78
79
  */
79
- static getRoomTypes(): Promise<string[]>;
80
+ static getRoomTypes(EndpointURL?: string): Promise<string[]>;
80
81
  /**
81
82
  * Non-authenticated. Returns the mappings from the game API.
82
83
  *
@@ -115,8 +116,8 @@ export default class PWApiClient {
115
116
  *
116
117
  * Note: This library also exports "BlockNames" which is an enum containing the block names along with their respective id.
117
118
  */
118
- static getListBlocks(skipCache: boolean | undefined, toObject: true): Promise<Record<string, ListBlockResult>>;
119
- static getListBlocks(skipCache?: boolean, toObject?: false): Promise<ListBlockResult[]>;
119
+ static getListBlocks(skipCache: boolean | undefined, toObject: true, EndpointURL?: string): Promise<Record<string, ListBlockResult>>;
120
+ static getListBlocks(skipCache?: boolean, toObject?: false, EndpointURL?: string): Promise<ListBlockResult[]>;
120
121
  /**
121
122
  * Returns the collection result of the query - your own worlds.
122
123
  * Default: page - 1, perPage - 10
@@ -133,8 +134,8 @@ export default class PWApiClient {
133
134
  * Returns the collection result of the query - players.
134
135
  * Default: page - 1, perPage - 10
135
136
  */
136
- static getPlayers(page?: number, perPage?: number, query?: ColQuery<ColUser>): Promise<CollectionResult<ColUser>>;
137
- static getPlayers(query: ColQuery<ColUser>): Promise<CollectionResult<ColUser>>;
137
+ static getPlayers(page?: number, perPage?: number, query?: ColQuery<ColUser>, EndpointURL?: string): Promise<CollectionResult<ColUser>>;
138
+ static getPlayers(query: ColQuery<ColUser>, EndpointURL?: string): Promise<CollectionResult<ColUser>>;
138
139
  /**
139
140
  * Returns the collection result of the query - public worlds.
140
141
  * Default: page - 1, perPage - 10
@@ -145,8 +146,22 @@ export default class PWApiClient {
145
146
  * Returns the collection result of the query - public worlds.
146
147
  * Default: page - 1, perPage - 10
147
148
  */
148
- static getPublicWorlds(page?: number, perPage?: number, query?: ColQuery<ColWorld>): Promise<CollectionResult<ColWorld>>;
149
- static getPublicWorlds(query: ColQuery<ColWorld>): Promise<CollectionResult<ColWorld>>;
149
+ static getPublicWorlds(page?: number, perPage?: number, query?: ColQuery<ColWorld>, EndpointURL?: string): Promise<CollectionResult<ColWorld>>;
150
+ static getPublicWorlds(query: ColQuery<ColWorld>, EndpointURL?: string): Promise<CollectionResult<ColWorld>>;
151
+ /**
152
+ * Returns the collection result of the query - public worlds.
153
+ * Default: page - 1, perPage - 10
154
+ */
155
+ getWootedWorlds(page: number, perPage: number, query?: ColQuery<ColWorld>): Promise<CollectionResult<ColWorld>>;
156
+ getWootedWorlds(query: ColQuery<ColWorld>): Promise<CollectionResult<ColWorld>>;
157
+ /**
158
+ * NOTE: It will always return empty result if not authenticated.
159
+ *
160
+ * Returns the collection result of the query - wooted worlds.
161
+ * Default: page - 1, perPage - 10
162
+ */
163
+ static getWootedWorlds(page?: number, perPage?: number, query?: ColQuery<ColWorld>, EndpointURL?: string): Promise<CollectionResult<ColWorld>>;
164
+ static getWootedWorlds(query: ColQuery<ColWorld>, EndpointURL?: string): Promise<CollectionResult<ColWorld>>;
150
165
  /**
151
166
  * Returns the lobby result.
152
167
  */
@@ -154,7 +169,7 @@ export default class PWApiClient {
154
169
  /**
155
170
  * Returns the lobby result.
156
171
  */
157
- static getVisibleWorlds(): Promise<LobbyResult>;
172
+ static getVisibleWorlds(EndpointURL?: string): Promise<LobbyResult>;
158
173
  /**
159
174
  * Returns the world, if it exists and is public.
160
175
  */
@@ -183,14 +198,14 @@ export default class PWApiClient {
183
198
  static getMinimap(world: ColWorld | {
184
199
  id: string;
185
200
  minimap: string;
186
- }, toURL?: false): Promise<ArrayBuffer>;
201
+ }, toURL?: false, EndpointURL?: string): Promise<ArrayBuffer>;
187
202
  /**
188
203
  * Gives the URL pointing to the minimap image.
189
204
  */
190
205
  static getMinimap(world: ColWorld | {
191
206
  id: string;
192
207
  minimap: string;
193
- }, toURL: true): string;
208
+ }, toURL: true, EndpointURL?: string): string;
194
209
  /**
195
210
  * Note that username is cap sensitive, and may require you to use toUppercase
196
211
  */
@@ -207,8 +222,9 @@ export default class PWApiClient {
207
222
  * @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.
208
223
  * @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).
209
224
  * @param token The API token (not join key), this is if you wish to use authenticated API calls without having to instantise an api client yourself.
225
+ * @param overrideURL If true, this will skip checking if the URL truly belongs to PW (production wise).
210
226
  */
211
- static request<T>(url: string, body?: Record<string, any> | string, token?: string): Promise<T>;
227
+ static request<T>(url: string, body?: Record<string, any> | string, token?: string, overrideURL?: boolean): Promise<T>;
212
228
  /**
213
229
  * IMPORTANT: This will return JSON for any responses that have the content-type of json, anything else will be sent back as Uint8array.
214
230
  * If you're expecting raw bytes, make sure the endpoint is guaranteed to give you that otherwise there isn't a reason.
@@ -217,6 +233,7 @@ export default class PWApiClient {
217
233
  * @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.
218
234
  * @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).
219
235
  * @param isAuthenticated If true, this will send the token as the header.
236
+ * @param overrideURL If true, this will skip checking if the URL truly belongs to PW (production wise).
220
237
  */
221
- protected request<T>(url: string, body?: Record<string, any> | string, isAuthenticated?: boolean): Promise<T>;
238
+ protected request<T>(url: string, body?: Record<string, any> | string, isAuthenticated?: boolean, overrideURL?: boolean): Promise<T>;
222
239
  }
@@ -8,7 +8,7 @@ const Misc_js_1 = require("../util/Misc.js");
8
8
  * Note if you want to join a world, use new PWGameClient() then run .init()
9
9
  */
10
10
  class PWApiClient {
11
- constructor(email, password) {
11
+ constructor(email, password, options) {
12
12
  /**
13
13
  * Account details with email and password, if applicable.
14
14
  */
@@ -17,6 +17,18 @@ class PWApiClient {
17
17
  password: ""
18
18
  };
19
19
  this.loggedIn = false;
20
+ this.options = {
21
+ endpoints: {
22
+ Api: Constants_js_1.Endpoint.Api,
23
+ GameHTTP: Constants_js_1.Endpoint.GameHTTP
24
+ }
25
+ };
26
+ if (typeof password === "object") {
27
+ this.options = (0, Misc_js_1.mergeObjects)(this.options, password);
28
+ password = undefined;
29
+ }
30
+ else if (options)
31
+ this.options = (0, Misc_js_1.mergeObjects)(this.options, options);
20
32
  if (password === undefined) {
21
33
  this.token = email;
22
34
  this.loggedIn = true;
@@ -33,7 +45,7 @@ class PWApiClient {
33
45
  email = this.account.email;
34
46
  password = this.account.password;
35
47
  }
36
- return this.request(`${Constants_js_1.Endpoint.Api}/api/collections/users/auth-with-password`, { identity: email, password }).then(res => {
48
+ return this.request(`${this.options.endpoints.Api}/api/collections/users/auth-with-password`, { identity: email, password }, undefined, this.options.endpoints.Api !== Constants_js_1.Endpoint.Api).then(res => {
37
49
  if ("token" in res) {
38
50
  this.token = res.token;
39
51
  this.loggedIn = true;
@@ -45,7 +57,7 @@ class PWApiClient {
45
57
  * Internal.
46
58
  */
47
59
  getJoinKey(roomType, roomId) {
48
- return this.request(`${Constants_js_1.Endpoint.Api}/api/joinkey/${roomType}/${roomId}`, undefined, true);
60
+ return this.request(`${this.options.endpoints.Api}/api/joinkey/${roomType}/${roomId}`, undefined, true, this.options.endpoints.Api !== Constants_js_1.Endpoint.Api);
49
61
  }
50
62
  /**
51
63
  * 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.
@@ -69,13 +81,13 @@ class PWApiClient {
69
81
  * Non-authenticated. This will refresh the room types each time, so make sure to check if roomTypes is available.
70
82
  */
71
83
  getRoomTypes() {
72
- return PWApiClient.getRoomTypes();
84
+ return PWApiClient.getRoomTypes(this.options.endpoints.GameHTTP);
73
85
  }
74
86
  /**
75
87
  * Non-authenticated. This will refresh the room types each time, so make sure to check if roomTypes is available.
76
88
  */
77
- static getRoomTypes() {
78
- return this.request(`${Constants_js_1.Endpoint.GameHTTP}/listroomtypes`)
89
+ static getRoomTypes(EndpointURL = Constants_js_1.Endpoint.GameHTTP) {
90
+ return this.request(`${EndpointURL}/listroomtypes`, undefined, undefined, EndpointURL !== Constants_js_1.Endpoint.GameHTTP)
79
91
  .then(res => {
80
92
  PWApiClient.roomTypes = res;
81
93
  return this.getListBlocks(true);
@@ -107,18 +119,18 @@ class PWApiClient {
107
119
  getListBlocks(skipCache = false, toObject) {
108
120
  // Yes, this actually gets typescript compiler to stop moaning
109
121
  if (toObject)
110
- return PWApiClient.getListBlocks(skipCache, toObject);
111
- return PWApiClient.getListBlocks(skipCache, toObject);
122
+ return PWApiClient.getListBlocks(skipCache, toObject, this.options.endpoints.GameHTTP);
123
+ return PWApiClient.getListBlocks(skipCache, toObject, this.options.endpoints.GameHTTP);
112
124
  }
113
125
  static getListBlocks() {
114
- return tslib_1.__awaiter(this, arguments, void 0, function* (skipCache = false, toObject) {
126
+ return tslib_1.__awaiter(this, arguments, void 0, function* (skipCache = false, toObject, EndpointURL = Constants_js_1.Endpoint.GameHTTP) {
115
127
  if (!skipCache) {
116
128
  if (this.listBlocks !== undefined && !toObject)
117
129
  return this.listBlocks;
118
130
  if (this.listBlocksObj !== undefined && toObject)
119
131
  return this.listBlocksObj;
120
132
  }
121
- return this.request(`${Constants_js_1.Endpoint.GameHTTP}/listblocks`)
133
+ return this.request(`${EndpointURL}/listblocks`, undefined, undefined, EndpointURL !== Constants_js_1.Endpoint.GameHTTP)
122
134
  .then(res => {
123
135
  const obj = {};
124
136
  const arr = []; // PW doesn't sort the returned endpoint data despite data structure means it's perfectly capable
@@ -140,55 +152,82 @@ class PWApiClient {
140
152
  query = page;
141
153
  page = 1;
142
154
  }
143
- return this.request(`${Constants_js_1.Endpoint.Api}/api/collections/worlds/records?page=${page}&perPage=${perPage}${(0, Misc_js_1.queryToString)(query)}`, undefined, true);
155
+ return this.request(`${this.options.endpoints.Api}/api/collections/worlds/records?page=${page}&perPage=${perPage}${(0, Misc_js_1.queryToString)(query)}`, undefined, true, this.options.endpoints.Api !== Constants_js_1.Endpoint.Api);
144
156
  }
145
157
  getPlayers(page = 1, perPage = 10, query) {
146
158
  if (typeof page === "object") {
147
159
  query = page;
148
160
  page = 1;
149
161
  }
150
- return PWApiClient.getPlayers(page, perPage, query);
162
+ return PWApiClient.getPlayers(page, perPage, query, this.options.endpoints.Api);
151
163
  }
152
- static getPlayers(page = 1, perPage = 10, query) {
164
+ static getPlayers(page = 1, perPage = 10, query, EndpointURL = Constants_js_1.Endpoint.Api) {
153
165
  if (typeof page === "object") {
166
+ if (typeof perPage === "string") {
167
+ EndpointURL = perPage;
168
+ perPage = 10;
169
+ }
154
170
  query = page;
155
171
  page = 1;
156
172
  }
157
- return this.request(`${Constants_js_1.Endpoint.Api}/api/collections/users/records?page=${page}&perPage=${perPage}${(0, Misc_js_1.queryToString)(query)}`);
173
+ return this.request(`${EndpointURL}/api/collections/users/records?page=${page}&perPage=${perPage}${(0, Misc_js_1.queryToString)(query)}`, undefined, undefined, EndpointURL !== Constants_js_1.Endpoint.Api);
158
174
  }
159
175
  getPublicWorlds(page = 1, perPage = 10, query) {
160
176
  if (typeof page === "object") {
161
177
  query = page;
162
178
  page = 1;
163
179
  }
164
- return PWApiClient.getPublicWorlds(page, perPage, query);
180
+ return PWApiClient.getPublicWorlds(page, perPage, query, this.options.endpoints.Api);
181
+ }
182
+ static getPublicWorlds(page = 1, perPage = 10, query, EndpointURL = Constants_js_1.Endpoint.Api) {
183
+ if (typeof page === "object") {
184
+ if (typeof perPage === "string") {
185
+ EndpointURL = perPage;
186
+ perPage = 10;
187
+ }
188
+ query = page;
189
+ page = 1;
190
+ }
191
+ return this.request(`${EndpointURL}/api/collections/worlds/records?page=${page}&perPage=${perPage}${(0, Misc_js_1.queryToString)(query)}`, undefined, undefined, EndpointURL !== Constants_js_1.Endpoint.Api);
192
+ }
193
+ getWootedWorlds(page = 1, perPage = 10, query) {
194
+ if (typeof page === "object") {
195
+ query = page;
196
+ page = 1;
197
+ }
198
+ return PWApiClient.getWootedWorlds(page, perPage, query, this.options.endpoints.Api);
165
199
  }
166
- static getPublicWorlds(page = 1, perPage = 10, query) {
200
+ static getWootedWorlds(page = 1, perPage = 10, query, EndpointURL = Constants_js_1.Endpoint.Api) {
167
201
  if (typeof page === "object") {
202
+ if (typeof perPage === "string") {
203
+ EndpointURL = perPage;
204
+ perPage = 10;
205
+ }
168
206
  query = page;
169
207
  page = 1;
170
208
  }
171
- return this.request(`${Constants_js_1.Endpoint.Api}/api/collections/worlds/records?page=${page}&perPage=${perPage}${(0, Misc_js_1.queryToString)(query)}`);
209
+ return this.request(`${EndpointURL}/api/collections/worlds/records?page=${page}&perPage=${perPage}${(0, Misc_js_1.queryToString)(query)}`, undefined, undefined, EndpointURL !== Constants_js_1.Endpoint.Api);
172
210
  }
173
211
  /**
174
212
  * Returns the lobby result.
175
213
  */
176
214
  getVisibleWorlds() {
177
- return PWApiClient.getVisibleWorlds();
215
+ return PWApiClient.getVisibleWorlds(this.options.endpoints.GameHTTP);
178
216
  }
179
217
  /**
180
218
  * Returns the lobby result.
181
219
  */
182
- static getVisibleWorlds() {
220
+ static getVisibleWorlds(EndpointURL = Constants_js_1.Endpoint.GameHTTP) {
183
221
  if (this.roomTypes.length === 0)
184
222
  throw Error("roomTypes is empty - use getRoomTypes first!");
185
- return this.request(`${Constants_js_1.Endpoint.GameHTTP}/room/list/${this.roomTypes[0]}`);
223
+ return this.request(`${EndpointURL}/room/list/${this.roomTypes[0]}`, undefined, undefined, EndpointURL !== Constants_js_1.Endpoint.GameHTTP);
186
224
  }
187
225
  /**
188
226
  * Returns the world, if it exists and is public.
189
227
  */
190
228
  getPublicWorld(id) {
191
- return PWApiClient.getPublicWorld(id);
229
+ return this.getPublicWorlds(1, 1, { filter: { id } })
230
+ .then(res => res.items[0]);
192
231
  }
193
232
  /**
194
233
  * Returns the world, if it exists and is public.
@@ -199,13 +238,13 @@ class PWApiClient {
199
238
  }
200
239
  getMinimap(world, toURL = false) {
201
240
  if (toURL)
202
- return `${Constants_js_1.Endpoint.Api}/api/files/rhrbt6wqhc4s0cp/${world.id}/${world.minimap}`;
203
- return PWApiClient.getMinimap(world, toURL);
241
+ return `${this.options.endpoints.Api}/api/files/rhrbt6wqhc4s0cp/${world.id}/${world.minimap}`;
242
+ return PWApiClient.getMinimap(world, toURL, this.options.endpoints.Api);
204
243
  }
205
- static getMinimap(world, toURL = false) {
244
+ static getMinimap(world, toURL = false, EndpointURL = Constants_js_1.Endpoint.Api) {
206
245
  if (toURL)
207
- return `${Constants_js_1.Endpoint.Api}/api/files/rhrbt6wqhc4s0cp/${world.id}/${world.minimap}`;
208
- return this.request(this.getMinimap(world, true))
246
+ return `${EndpointURL}/api/files/rhrbt6wqhc4s0cp/${world.id}/${world.minimap}`;
247
+ return this.request(this.getMinimap(world, true, EndpointURL), undefined, undefined, EndpointURL !== Constants_js_1.Endpoint.Api)
209
248
  .then(res => {
210
249
  if ("message" in res)
211
250
  throw Error("Minimap doesn't exist, the world may be unlisted.");
@@ -216,7 +255,8 @@ class PWApiClient {
216
255
  * Note that username is cap sensitive, and may require you to use toUppercase
217
256
  */
218
257
  getPlayerByName(username) {
219
- return PWApiClient.getPlayerByName(username);
258
+ return this.getPlayers(1, 1, { filter: { username } })
259
+ .then(res => res.items[0]);
220
260
  }
221
261
  /**
222
262
  * Note that username is cap sensitive, and may require you to use toUppercase
@@ -238,9 +278,10 @@ class PWApiClient {
238
278
  * @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.
239
279
  * @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).
240
280
  * @param token The API token (not join key), this is if you wish to use authenticated API calls without having to instantise an api client yourself.
281
+ * @param overrideURL If true, this will skip checking if the URL truly belongs to PW (production wise).
241
282
  */
242
- static request(url, body, token) {
243
- if (!(url.startsWith(Constants_js_1.Endpoint.Api) || url.startsWith(Constants_js_1.Endpoint.GameHTTP) || url.startsWith(Constants_js_1.Endpoint.Client + "/atlases/")))
283
+ static request(url, body, token, overrideURL = false) {
284
+ if (!overrideURL && !(url.startsWith(Constants_js_1.Endpoint.Api) || url.startsWith(Constants_js_1.Endpoint.GameHTTP) || url.startsWith(Constants_js_1.Endpoint.Client + "/atlases/")))
244
285
  throw Error("URL given does not have the correct endpoint URL, this is for safety.");
245
286
  const headers = {
246
287
  // "user-agent": "PW-TS-API/0.0.1"
@@ -284,9 +325,10 @@ class PWApiClient {
284
325
  * @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.
285
326
  * @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).
286
327
  * @param isAuthenticated If true, this will send the token as the header.
328
+ * @param overrideURL If true, this will skip checking if the URL truly belongs to PW (production wise).
287
329
  */
288
- request(url, body, isAuthenticated = false) {
289
- return PWApiClient.request(url, body, isAuthenticated ? this.token : undefined);
330
+ request(url, body, isAuthenticated = false, overrideURL = false) {
331
+ return PWApiClient.request(url, body, isAuthenticated ? this.token : undefined, overrideURL);
290
332
  }
291
333
  }
292
334
  /**
@@ -294,4 +336,4 @@ class PWApiClient {
294
336
  */
295
337
  PWApiClient.roomTypes = [];
296
338
  exports.default = PWApiClient;
297
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFdBcGlDbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvYXBpL1BXQXBpQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNGQUFtRDtBQUduRCx1REFBZ0Q7QUFDaEQsNkNBQWdEO0FBRWhEOztHQUVHO0FBQ0gsTUFBcUIsV0FBVztJQXVDNUIsWUFBWSxLQUFhLEVBQUUsUUFBaUI7UUFqQzVDOztXQUVHO1FBQ0ssWUFBTyxHQUFHO1lBQ2QsS0FBSyxFQUFFLEVBQUU7WUFDVCxRQUFRLEVBQUUsRUFBRTtTQUNmLENBQUE7UUFFRCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBMEJiLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLE9BQU87UUFDWCxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUVqQyxzQkFBc0I7SUFDMUIsQ0FBQztJQVlELFlBQVksQ0FBQyxLQUFjLEVBQUUsUUFBaUI7UUFDMUMsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDdEIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDO2dCQUFFLE1BQU0sS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFFbkgsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1lBQzNCLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUNyQyxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsT0FB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
339
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFdBcGlDbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvYXBpL1BXQXBpQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNGQUFtRDtBQUduRCx1REFBZ0Q7QUFDaEQsNkNBQThEO0FBRTlEOztHQUVHO0FBQ0gsTUFBcUIsV0FBVztJQXlDNUIsWUFBWSxLQUFhLEVBQUUsUUFBb0MsRUFBRSxPQUEwQjtRQW5DM0Y7O1dBRUc7UUFDSyxZQUFPLEdBQUc7WUFDZCxLQUFLLEVBQUUsRUFBRTtZQUNULFFBQVEsRUFBRSxFQUFFO1NBQ2YsQ0FBQTtRQUlELGFBQVEsR0FBRyxLQUFLLENBQUM7UUEwQmIsSUFBSSxDQUFDLE9BQU8sR0FBRztZQUNYLFNBQVMsRUFBRTtnQkFDUCxHQUFHLEVBQUUsdUJBQVEsQ0FBQyxHQUFHO2dCQUNqQixRQUFRLEVBQUUsdUJBQVEsQ0FBQyxRQUFRO2FBQzlCO1NBQ0osQ0FBQTtRQUVELElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDL0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFBLHNCQUFZLEVBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsQ0FBQztZQUNwRCxRQUFRLEdBQUcsU0FBUyxDQUFDO1FBQ3pCLENBQUM7YUFBTSxJQUFJLE9BQU87WUFBRSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUEsc0JBQVksRUFBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRXZFLElBQUksUUFBUSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ25CLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLE9BQU87UUFDWCxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFB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
package/cm/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export type * from "./types/index.d.ts";
2
2
  export { default as PWApiClient } from "./api/PWApiClient.js";
3
3
  export { default as PWGameClient } from "./game/PWGameClient.js";
4
+ export { default as PWAtlases } from "./api/PWAtlases.js";
4
5
  export * from "./util/Constants.js";
5
6
  export * as Constants from "./util/Constants.js";
6
7
  export * as Errors from "./util/Errors.js";
package/cm/index.js CHANGED
@@ -1,15 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ProtoGen = exports.BlockNames = exports.Errors = exports.Constants = exports.PWGameClient = exports.PWApiClient = void 0;
3
+ exports.ProtoGen = exports.BlockNames = exports.Errors = exports.Constants = exports.PWAtlases = exports.PWGameClient = exports.PWApiClient = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  var PWApiClient_js_1 = require("./api/PWApiClient.js");
6
6
  Object.defineProperty(exports, "PWApiClient", { enumerable: true, get: function () { return tslib_1.__importDefault(PWApiClient_js_1).default; } });
7
7
  var PWGameClient_js_1 = require("./game/PWGameClient.js");
8
8
  Object.defineProperty(exports, "PWGameClient", { enumerable: true, get: function () { return tslib_1.__importDefault(PWGameClient_js_1).default; } });
9
+ var PWAtlases_js_1 = require("./api/PWAtlases.js");
10
+ Object.defineProperty(exports, "PWAtlases", { enumerable: true, get: function () { return tslib_1.__importDefault(PWAtlases_js_1).default; } });
9
11
  tslib_1.__exportStar(require("./util/Constants.js"), exports);
10
12
  exports.Constants = tslib_1.__importStar(require("./util/Constants.js"));
11
13
  exports.Errors = tslib_1.__importStar(require("./util/Errors.js"));
12
14
  var block_js_1 = require("./util/block.js");
13
15
  Object.defineProperty(exports, "BlockNames", { enumerable: true, get: function () { return block_js_1.BlockNames; } });
14
16
  exports.ProtoGen = tslib_1.__importStar(require("./gen/world_pb.js"));
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLHVEQUE4RDtBQUFyRCxzSUFBQSxPQUFPLE9BQWU7QUFDL0IsMERBQWlFO0FBQXhELHdJQUFBLE9BQU8sT0FBZ0I7QUFDaEMsOERBQW9DO0FBQ3BDLHlFQUFpRDtBQUNqRCxtRUFBMkM7QUFDM0MsNENBQXdEO0FBQS9DLHNHQUFBLFVBQVUsT0FBQTtBQUNuQixzRUFBOEMifQ==
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9saWIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUNBLHVEQUE4RDtBQUFyRCxzSUFBQSxPQUFPLE9BQWU7QUFDL0IsMERBQWlFO0FBQXhELHdJQUFBLE9BQU8sT0FBZ0I7QUFDaEMsbURBQTBEO0FBQWpELGtJQUFBLE9BQU8sT0FBYTtBQUM3Qiw4REFBb0M7QUFDcEMseUVBQWlEO0FBQ2pELG1FQUEyQztBQUMzQyw0Q0FBd0Q7QUFBL0Msc0dBQUEsVUFBVSxPQUFBO0FBQ25CLHNFQUE4QyJ9
@@ -1,6 +1,6 @@
1
1
  export declare const Endpoint: {
2
- Api: string;
3
- GameHTTP: string;
4
- GameWS: string;
5
- Client: string;
2
+ readonly Api: "https://api.pixelwalker.net";
3
+ readonly GameHTTP: "https://game.pixelwalker.net";
4
+ readonly GameWS: "wss://game.pixelwalker.net";
5
+ readonly Client: "https://client.pixelwalker.net";
6
6
  };
@@ -7,4 +7,4 @@ exports.Endpoint = {
7
7
  GameWS: "wss://game.pixelwalker.net",
8
8
  Client: "https://client.pixelwalker.net",
9
9
  };
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL3V0aWwvQ29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFhLFFBQUEsUUFBUSxHQUFHO0lBQ3BCLEdBQUcsRUFBRSw2QkFBNkI7SUFDbEMsUUFBUSxFQUFFLDhCQUE4QjtJQUN4QyxNQUFNLEVBQUUsNEJBQTRCO0lBQ3BDLE1BQU0sRUFBRSxnQ0FBZ0M7Q0FDM0MsQ0FBQSJ9
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL3V0aWwvQ29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFhLFFBQUEsUUFBUSxHQUFHO0lBQ3BCLEdBQUcsRUFBRSw2QkFBNkI7SUFDbEMsUUFBUSxFQUFFLDhCQUE4QjtJQUN4QyxNQUFNLEVBQUUsNEJBQTRCO0lBQ3BDLE1BQU0sRUFBRSxnQ0FBZ0M7Q0FDbEMsQ0FBQyJ9
package/cm/util/Misc.d.ts CHANGED
@@ -1,4 +1,15 @@
1
1
  import type { ColItem, ColQuery } from "../types/api.js";
2
2
  import type { CustomBotEvents, MergedEvents } from "../types/events.js";
3
3
  export declare function queryToString<T extends ColItem>(query: ColQuery<T> | undefined): string;
4
+ /**
5
+ * This takes in two parameters - Object A and B.
6
+ *
7
+ * Object A will be used as the object to add properties from Object B to.
8
+ * If some of the properties in Object B are also objects, this will run recursively to ensure they are all added.
9
+ *
10
+ * Annoyingly, due to how Typescript works, the only way I could get an object with combined properties is if I return it so rip mutability.
11
+ *
12
+ * IGNORE THE LAST TWO PARAMETERS.
13
+ */
14
+ export declare function mergeObjects<A extends Record<string, any>, B extends Record<string, any>>(objA: A, objB: B, depth?: number, prevObj?: any): A & B;
4
15
  export declare function isCustomPacket(type: keyof MergedEvents): type is keyof CustomBotEvents;
package/cm/util/Misc.js CHANGED
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.queryToString = queryToString;
4
+ exports.mergeObjects = mergeObjects;
4
5
  exports.isCustomPacket = isCustomPacket;
5
6
  function queryToString(query) {
6
7
  if (typeof query === "undefined")
@@ -48,6 +49,33 @@ function queryToString(query) {
48
49
  }
49
50
  return str;
50
51
  }
52
+ /**
53
+ * This takes in two parameters - Object A and B.
54
+ *
55
+ * Object A will be used as the object to add properties from Object B to.
56
+ * If some of the properties in Object B are also objects, this will run recursively to ensure they are all added.
57
+ *
58
+ * Annoyingly, due to how Typescript works, the only way I could get an object with combined properties is if I return it so rip mutability.
59
+ *
60
+ * IGNORE THE LAST TWO PARAMETERS.
61
+ */
62
+ function mergeObjects(objA, objB, depth = 0, prevObj) {
63
+ const keys = Object.keys(objB);
64
+ const obj = depth > 0 ? objA : structuredClone(objA);
65
+ for (let i = 0; i < keys.length; i++) {
66
+ const propA = objA[keys[i]];
67
+ const propB = objB[keys[i]];
68
+ if (typeof propB === "object" && propB !== null) {
69
+ if (typeof propA !== "object" || propA === null) {
70
+ obj[keys[i]] = {};
71
+ }
72
+ mergeObjects(obj[keys[i]], propB, depth + 1);
73
+ }
74
+ else
75
+ obj[keys[i]] = propB;
76
+ }
77
+ return obj;
78
+ }
51
79
  // console.log(queryToString<ColWorld>({ filter: { id: "a" } }));
52
80
  // console.log(queryToString<ColWorld>({ filter: { id: "a", created: "nice" } }));
53
81
  // console.log(queryToString<ColWorld>({ filter: "a~b,ok=lol" }));
@@ -55,4 +83,4 @@ function queryToString(query) {
55
83
  function isCustomPacket(type) {
56
84
  return type === "debug" || type === "unknown" || type === "raw";
57
85
  }
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlzYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlsL01pc2MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSxzQ0E2Q0M7QUFRRCx3Q0FFQztBQXZERCxTQUFnQixhQUFhLENBQW9CLEtBQThCO0lBQzNFLElBQUksT0FBTyxLQUFLLEtBQUssV0FBVztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBRTVDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUViLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2YsSUFBSSxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbkMsR0FBRyxJQUFJLFVBQVUsQ0FBQztZQUVsQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUU3QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ2pELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFeEIsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRO29CQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztnQkFDbEUsaURBQWlEOztvQkFDNUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3hDLENBQUM7UUFDTCxDQUFDOztZQUFNLEdBQUcsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDYixJQUFJLE9BQU8sS0FBSyxDQUFDLE1BQU0sS0FBSyxRQUFRLEVBQUUsQ0FBQztZQUNuQyxHQUFHLElBQUksUUFBUSxDQUFDO1lBRWhCLG1DQUFtQztZQUVuQyxXQUFXO1lBQ1AsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBNkIsQ0FBQztZQUU5RyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQy9DLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQStDLENBQUM7Z0JBRXBFLElBQUksT0FBTyxJQUFJLEtBQUssUUFBUTtvQkFBRSxHQUFHLElBQUksSUFBSSxHQUFHLEdBQUcsQ0FBQztxQkFDM0MsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssU0FBUztvQkFBRSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztxQkFDaEQsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSztvQkFBRSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztxQkFDNUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTTtvQkFBRSxHQUFHLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7WUFDNUQsQ0FBQztZQUVELElBQUksS0FBSyxDQUFDLE1BQU07Z0JBQUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0MsSUFBSTtRQUNSLENBQUM7O1lBQU0sR0FBRyxJQUFJLFFBQVEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxPQUFPLEdBQUcsQ0FBQztBQUNmLENBQUM7QUFFRCxpRUFBaUU7QUFDakUsa0ZBQWtGO0FBQ2xGLGtFQUFrRTtBQUVsRSwySUFBMkk7QUFFM0ksU0FBZ0IsY0FBYyxDQUFDLElBQXdCO0lBQ25ELE9BQU8sSUFBSSxLQUFLLE9BQU8sSUFBSSxJQUFJLEtBQUssU0FBUyxJQUFJLElBQUksS0FBSyxLQUFLLENBQUM7QUFDcEUsQ0FBQyJ9
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlzYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL2xpYi91dGlsL01pc2MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSxzQ0E2Q0M7QUFZRCxvQ0FrQkM7QUFRRCx3Q0FFQztBQXJGRCxTQUFnQixhQUFhLENBQW9CLEtBQThCO0lBQzNFLElBQUksT0FBTyxLQUFLLEtBQUssV0FBVztRQUFFLE9BQU8sRUFBRSxDQUFDO0lBRTVDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztJQUViLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2YsSUFBSSxPQUFPLEtBQUssQ0FBQyxNQUFNLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbkMsR0FBRyxJQUFJLFVBQVUsQ0FBQztZQUVsQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUU3QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ2pELE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFeEIsSUFBSSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRO29CQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztnQkFDbEUsaURBQWlEOztvQkFDNUMsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ3hDLENBQUM7UUFDTCxDQUFDOztZQUFNLEdBQUcsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFBSSxLQUFLLENBQUMsSUFB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
@@ -1300,8 +1300,8 @@ export declare enum BlockNames {
1300
1300
  MINE_STALAGMITE = 1298,
1301
1301
  MINE_STALAGTITE = 1299,
1302
1302
  MINE_CRYSTAL_RED = 1300,
1303
- MINE_CRYSTAL_GREEN = 1301,
1304
- MINE_CRYSTAL_YELLOW = 1302,
1303
+ MINE_CRYSTAL_YELLOW = 1301,
1304
+ MINE_CRYSTAL_GREEN = 1302,
1305
1305
  MINE_CRYSTAL_CYAN = 1303,
1306
1306
  MINE_CRYSTAL_BLUE = 1304,
1307
1307
  MINE_CRYSTAL_PURPLE = 1305,