pw-js-api 0.0.4 → 0.0.6-dev.84aec6f

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.
@@ -53,6 +53,10 @@ export default class PWApiClient {
53
53
  * Non-authenticated. This will refresh the room types each time, so make sure to check if roomTypes is available.
54
54
  */
55
55
  getRoomTypes(): Promise<string[]>;
56
+ /**
57
+ * Non-authenticated. This will refresh the room types each time, so make sure to check if roomTypes is available.
58
+ */
59
+ static getRoomTypes(): Promise<string[]>;
56
60
  /**
57
61
  * Non-authenticated. Returns the mappings from the game API.
58
62
  */
@@ -101,6 +105,16 @@ export default class PWApiClient {
101
105
  * Note that username is cap sensitive, and may require you to use toUppercase
102
106
  */
103
107
  getPlayerByName(username: string): Promise<CollectionResult<ColPlayer>>;
108
+ /**
109
+ * IMPORTANT: This will return JSON for any responses that have the content-type of json, anything else will be sent back as Uint8array.
110
+ * If you're expecting raw bytes, make sure the endpoint is guaranteed to give you that otherwise there isn't a reason.
111
+ *
112
+ * This requires the manager to be authenticated, it will error if otherwise.
113
+ * @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.
114
+ * @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).
115
+ * @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.
116
+ */
117
+ static request<T>(url: string, body?: Record<string, any> | string, token?: string): Promise<T>;
104
118
  /**
105
119
  * IMPORTANT: This will return JSON for any responses that have the content-type of json, anything else will be sent back as Uint8array.
106
120
  * If you're expecting raw bytes, make sure the endpoint is guaranteed to give you that otherwise there isn't a reason.
@@ -80,6 +80,16 @@ class PWApiClient {
80
80
  return res;
81
81
  });
82
82
  }
83
+ /**
84
+ * Non-authenticated. This will refresh the room types each time, so make sure to check if roomTypes is available.
85
+ */
86
+ static getRoomTypes() {
87
+ return this.request(`${Constants_js_1.Endpoint.GameHTTP}/listroomtypes`)
88
+ .then(res => {
89
+ PWApiClient.roomTypes = res;
90
+ return res;
91
+ });
92
+ }
83
93
  /**
84
94
  * Non-authenticated. Returns the mappings from the game API.
85
95
  */
@@ -143,8 +153,6 @@ class PWApiClient {
143
153
  // return this.request<string[]>(`${Endpoint.GameHTTP}/message_types`)
144
154
  // .then(res => res instanceof Uint8Array ? [] : res ?? []);
145
155
  // }
146
- // TODO: QUERY FILTER AND STUFF!
147
- // https://github.com/MartenM/PixelPilot/blob/main/src/PixelPilot.Core/Api/PixelApiClient.cs very helpful yummy
148
156
  /**
149
157
  * IMPORTANT: This will return JSON for any responses that have the content-type of json, anything else will be sent back as Uint8array.
150
158
  * If you're expecting raw bytes, make sure the endpoint is guaranteed to give you that otherwise there isn't a reason.
@@ -152,16 +160,16 @@ class PWApiClient {
152
160
  * This requires the manager to be authenticated, it will error if otherwise.
153
161
  * @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.
154
162
  * @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).
155
- * @param isAuthenticated If true, this will send the token as the header.
163
+ * @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.
156
164
  */
157
- request(url, body, isAuthenticated = false) {
165
+ static request(url, body, token) {
158
166
  if (!(url.startsWith(Constants_js_1.Endpoint.Api) || url.startsWith(Constants_js_1.Endpoint.GameHTTP)))
159
167
  throw Error("URL given does not have the correct endpoint URL, this is for safety.");
160
168
  const headers = {
161
169
  // "user-agent": "PW-TS-API/0.0.1"
162
170
  };
163
- if (tslib_1.__classPrivateFieldGet(this, _PWApiClient_token, "f") && isAuthenticated)
164
- headers["authorization"] = tslib_1.__classPrivateFieldGet(this, _PWApiClient_token, "f");
171
+ if (typeof token === "string")
172
+ headers["authorization"] = token;
165
173
  if (typeof body === "object")
166
174
  body = JSON.stringify(body);
167
175
  let method = "GET";
@@ -183,6 +191,18 @@ class PWApiClient {
183
191
  return res.arrayBuffer();
184
192
  });
185
193
  }
194
+ /**
195
+ * IMPORTANT: This will return JSON for any responses that have the content-type of json, anything else will be sent back as Uint8array.
196
+ * If you're expecting raw bytes, make sure the endpoint is guaranteed to give you that otherwise there isn't a reason.
197
+ *
198
+ * This requires the manager to be authenticated, it will error if otherwise.
199
+ * @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.
200
+ * @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).
201
+ * @param isAuthenticated If true, this will send the token as the header.
202
+ */
203
+ request(url, body, isAuthenticated = false) {
204
+ return PWApiClient.request(url, body, isAuthenticated ? tslib_1.__classPrivateFieldGet(this, _PWApiClient_token, "f") : undefined);
205
+ }
186
206
  }
187
207
  _PWApiClient_token = new WeakMap(), _PWApiClient_account = new WeakMap();
188
208
  /**
@@ -190,4 +210,4 @@ _PWApiClient_token = new WeakMap(), _PWApiClient_account = new WeakMap();
190
210
  */
191
211
  PWApiClient.roomTypes = [];
192
212
  exports.default = PWApiClient;
193
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFdBcGlDbGllbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9saWIvYXBpL1BXQXBpQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxzRkFBbUQ7QUFHbkQsdURBQWdEO0FBQ2hELDZDQUFnRDtBQUVoRDs7R0FFRztBQUNILE1BQXFCLFdBQVc7SUEwQjVCLFlBQVksS0FBYSxFQUFFLFFBQWlCO1FBekI1Qzs7V0FFRztRQUNILHFDQUFnQjtRQUVoQjs7V0FFRztRQUNILCtCQUFXO1lBQ1AsS0FBSyxFQUFFLEVBQUU7WUFDVCxRQUFRLEVBQUUsRUFBRTtTQUNmLEVBQUE7UUFFRCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBYWIsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDekIsK0JBQUEsSUFBSSxzQkFBVSxLQUFLLE1BQUEsQ0FBQztZQUNwQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixPQUFPO1FBQ1gsQ0FBQztRQUVELCtCQUFBLElBQUksNEJBQVMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQzVCLCtCQUFBLElBQUksNEJBQVMsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBRWxDLHVCQUF1QjtJQUMzQixDQUFDO0lBV0QsWUFBWSxDQUFDLEtBQWMsRUFBRSxRQUFpQjtRQUMxQyxJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN0QixJQUFJLCtCQUFBLElBQUksNEJBQVMsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsSUFBSSwrQkFBQSxJQUFJLDRCQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDO2dCQUFFLE1BQU0sS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFFckgsS0FBSyxHQUFHLCtCQUFBLElBQUksNEJBQVMsQ0FBQyxLQUFLLENBQUM7WUFDNUIsUUFBUSxHQUFHLCtCQUFBLElBQUksNEJBQVMsQ0FBQyxRQUFRLENBQUM7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
213
+ //# 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";
@@ -7,7 +7,7 @@ import type { OmitRecursively, Optional, Promisable } from "../types/misc.js";
7
7
  export default class PWGameClient {
8
8
  #private;
9
9
  settings: GameClientSettings;
10
- api: PWApiClient;
10
+ api?: PWApiClient;
11
11
  socket?: WebSocket;
12
12
  protected totalBucket: Bucket;
13
13
  protected chatBucket: Bucket;
@@ -15,7 +15,7 @@ export default class PWGameClient {
15
15
  * NOTE: After constructing, you must then run .init() to connect the API IF you're using email/password.
16
16
  */
17
17
  constructor(api: PWApiClient, settings?: Partial<GameClientSettings>);
18
- init(): Promise<import("../index.js").APIFailure | import("../index.js").AuthResultSuccess>;
18
+ constructor(settings?: Partial<GameClientSettings>);
19
19
  get connected(): boolean;
20
20
  /**
21
21
  * This will connect to the world.
@@ -23,7 +23,18 @@ export default class PWGameClient {
23
23
  * (This returns itself for chaining)
24
24
  */
25
25
  joinWorld(roomId: string, joinData?: WorldJoinData): Promise<PWGameClient>;
26
- protected onSocketClose(evt: CloseEvent): Promise<PWGameClient> | undefined;
26
+ /**
27
+ * This is a more direct route if you already have a join key acquired via Pixelwalker's API.
28
+ *
29
+ * Useful for those wary of security.
30
+ *
31
+ * NOTE: You must give the room type, as to avoid circular dependency. You can use APIClient#getRoomTypes which is also available as static
32
+ */
33
+ static joinWorld(joinKey: string, roomType: string, obj?: {
34
+ joinData?: WorldJoinData;
35
+ gameSettings?: Partial<GameClientSettings>;
36
+ }): Promise<unknown>;
37
+ protected onSocketClose(evt: CloseEvent): Promise<number> | Promise<PWGameClient> | undefined;
27
38
  protected onSocketMessage(evt: MessageEvent): Promise<number> | undefined;
28
39
  /**
29
40
  * For faster performance (even if it seems insignificant),
@@ -54,7 +65,7 @@ export default class PWGameClient {
54
65
  * @param value Value of the packet to send along with, note that some properties are optional.
55
66
  * @param direct If it should skip queue.
56
67
  */
57
- send<Event extends keyof WorldEvents>(type: Event, value?: OmitRecursively<SendEvent<Event, WorldEvents>, "$typeName" | "$unknown">, direct?: boolean): void;
68
+ send<Event extends keyof WorldEvents>(type: Event, value?: OmitRecursively<Sendable<Event, WorldEvents>, "$typeName" | "$unknown">, direct?: boolean): void;
58
69
  }
59
- type SendEvent<E extends keyof WorldEvents, WE extends WorldEvents> = E extends "worldBlockPlacedPacket" ? Optional<WorldBlockPlacedPacket, "extraFields"> : E extends "WorldBlockFilledPacket" ? Optional<WorldBlockFilledPacket, "extraFields"> : WE[E];
70
+ 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
71
  export {};
@@ -8,9 +8,6 @@ const isows_1 = require("isows");
8
8
  const protobuf_1 = require("@bufbuild/protobuf");
9
9
  const Bucket_js_1 = tslib_1.__importDefault(require("../util/Bucket.js"));
10
10
  class PWGameClient {
11
- /**
12
- * NOTE: After constructing, you must then run .init() to connect the API IF you're using email/password.
13
- */
14
11
  constructor(api, settings) {
15
12
  var _a, _b, _c, _d;
16
13
  _PWGameClient_instances.add(this);
@@ -27,17 +24,19 @@ class PWGameClient {
27
24
  * NOTE: the "this" won't be the client itself. You will need to bind yourself if you want to keep this.
28
25
  */
29
26
  this.callbacks = {};
27
+ // I can't use instanceof cos of circular reference kms.
28
+ if (api && "getJoinKey" in api)
29
+ this.api = api;
30
+ else if (api) {
31
+ settings = api;
32
+ api = undefined;
33
+ }
30
34
  this.settings = {
31
35
  reconnectable: (_a = settings === null || settings === void 0 ? void 0 : settings.reconnectable) !== null && _a !== void 0 ? _a : true,
32
36
  reconnectCount: (_b = settings === null || settings === void 0 ? void 0 : settings.reconnectCount) !== null && _b !== void 0 ? _b : 3,
33
37
  reconnectInterval: (_c = settings === null || settings === void 0 ? void 0 : settings.reconnectInterval) !== null && _c !== void 0 ? _c : 5500,
34
38
  handlePackets: (_d = settings === null || settings === void 0 ? void 0 : settings.handlePackets) !== null && _d !== void 0 ? _d : ["PING"]
35
39
  };
36
- this.api = api;
37
- }
38
- init() {
39
- // For now this only authenticates idk why
40
- return this.api.authenticate();
41
40
  }
42
41
  get connected() {
43
42
  var _a;
@@ -51,6 +50,8 @@ class PWGameClient {
51
50
  joinWorld(roomId, joinData) {
52
51
  return tslib_1.__awaiter(this, void 0, void 0, function* () {
53
52
  var _a, _b, _c, _d;
53
+ if (!this.api)
54
+ throw Error("This can only work if you've used APIClient to join the world in the first place.");
54
55
  if (((_a = this.socket) === null || _a === void 0 ? void 0 : _a.readyState) === isows_1.WebSocket.CONNECTING)
55
56
  throw Error("Already trying to connect.");
56
57
  // if (!this.api.loggedIn) throw Error("API isn't logged in, you must use authenticate first.");
@@ -75,9 +76,38 @@ class PWGameClient {
75
76
  });
76
77
  });
77
78
  }
79
+ /**
80
+ * This is a more direct route if you already have a join key acquired via Pixelwalker's API.
81
+ *
82
+ * Useful for those wary of security.
83
+ *
84
+ * NOTE: You must give the room type, as to avoid circular dependency. You can use APIClient#getRoomTypes which is also available as static
85
+ */
86
+ static joinWorld(joinKey, roomType, obj) {
87
+ //const roomType = this.api.roomTypes?.[0] ?? await this.api.getRoomTypes().then(rTypes => rTypes[0]);
88
+ var _a;
89
+ const connectUrl = `${Constants_js_1.Endpoint.GameWS}/room/${joinKey}`
90
+ + ((obj === null || obj === void 0 ? void 0 : obj.joinData) === undefined ? "" : "?joinData=" + btoa(JSON.stringify(obj.joinData)));
91
+ const cli = new PWGameClient(obj === null || obj === void 0 ? void 0 : obj.gameSettings);
92
+ let count = (_a = cli.settings.reconnectCount) !== null && _a !== void 0 ? _a : 3;
93
+ return new Promise((res, rej) => {
94
+ var _a;
95
+ const timer = setTimeout(() => {
96
+ if (count-- < 0)
97
+ rej(new Error("Unable to (re)connect."));
98
+ cli.invoke("debug", "Failed to reconnect, retrying.");
99
+ // I know this is impossible but anyway
100
+ cli.socket = tslib_1.__classPrivateFieldGet(cli, _PWGameClient_instances, "m", _PWGameClient_createSocket).call(cli, connectUrl, timer, res);
101
+ timer.refresh();
102
+ }, (_a = cli.settings.reconnectInterval) !== null && _a !== void 0 ? _a : 5500);
103
+ cli.socket = tslib_1.__classPrivateFieldGet(cli, _PWGameClient_instances, "m", _PWGameClient_createSocket).call(cli, connectUrl, timer, res);
104
+ });
105
+ }
78
106
  onSocketClose(evt) {
79
107
  this.invoke("debug", `Server closed connection due to code: ${evt.code}, reason: ${evt.reason}.`);
80
108
  if (this.settings.reconnectable) {
109
+ if (this.api === undefined)
110
+ return this.invoke("debug", "Not attempting to reconnect as this game client was created with a join token.");
81
111
  if (tslib_1.__classPrivateFieldGet(this, _PWGameClient_prevWorldId, "f"))
82
112
  return this.joinWorld(tslib_1.__classPrivateFieldGet(this, _PWGameClient_prevWorldId, "f"));
83
113
  else
@@ -198,4 +228,4 @@ _PWGameClient_prevWorldId = new WeakMap(), _PWGameClient_instances = new WeakSet
198
228
  return socket;
199
229
  };
200
230
  exports.default = PWGameClient;
201
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFdHYW1lQ2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2dhbWUvUFdHYW1lQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxvREFBNkc7QUFFN0csdURBQWdEO0FBRWhELGlDQUFrQztBQUNsQyxpREFBa0U7QUFFbEUsMEVBQXVDO0FBR3ZDLE1BQXFCLFlBQVk7SUFXN0I7O09BRUc7SUFDSCxZQUFZLEdBQWdCLEVBQUUsUUFBc0M7OztRQVJwRSw0Q0FBc0I7UUFFWixnQkFBVyxHQUFHLElBQUksbUJBQU0sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDcEMsZUFBVSxHQUFHLElBQUksbUJBQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFxSDVDLHlEQUF5RDtRQUN6RCxrQkFBa0I7UUFDbEIsSUFBSTtRQUVKOzs7OztXQUtHO1FBQ08sY0FBUyxHQUFHLEVBRWtGLENBQUM7UUEzSHJHLElBQUksQ0FBQyxRQUFRLEdBQUc7WUFDWixhQUFhLEVBQUUsTUFBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsYUFBYSxtQ0FBSSxJQUFJO1lBQzlDLGNBQWMsRUFBRSxNQUFBLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxjQUFjLG1DQUFJLENBQUM7WUFDN0MsaUJBQWlCLEVBQUUsTUFBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsaUJBQWlCLG1DQUFJLElBQUk7WUFDdEQsYUFBYSxFQUFFLE1BQUEsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLGFBQWEsbUNBQUksQ0FBQyxNQUFNLENBQUM7U0FDckQsQ0FBQztRQUVGLElBQUksQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJO1FBQ0EsMENBQTBDO1FBRTFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNuQyxDQUFD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
231
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUFdHYW1lQ2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vbGliL2dhbWUvUFdHYW1lQ2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSxvREFBbUo7QUFFbkosdURBQWdEO0FBRWhELGlDQUFrQztBQUNsQyxpREFBa0U7QUFFbEUsMEVBQXVDO0FBR3ZDLE1BQXFCLFlBQVk7SUFpQjdCLFlBQVksR0FBK0MsRUFBRSxRQUFzQzs7O1FBWG5HLDRDQUFzQjtRQUVaLGdCQUFXLEdBQUcsSUFBSSxtQkFBTSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNwQyxlQUFVLEdBQUcsSUFBSSxtQkFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQTJKNUMseURBQXlEO1FBQ3pELGtCQUFrQjtRQUNsQixJQUFJO1FBRUo7Ozs7O1dBS0c7UUFDTyxjQUFTLEdBQUcsRUFFa0YsQ0FBQztRQTlKckcsd0RBQXdEO1FBQ3hELElBQUksR0FBRyxJQUFJLFlBQVksSUFBSSxHQUFHO1lBQUUsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7YUFDMUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNYLFFBQVEsR0FBRyxHQUFHLENBQUM7WUFDZixHQUFHLEdBQUcsU0FBUyxDQUFDO1FBQ3BCLENBQUM7UUFFRCxJQUFJLENBQUMsUUFBUSxHQUFHO1lBQ1osYUFBYSxFQUFFLE1BQUEsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLGFBQWEsbUNBQUksSUFBSTtZQUM5QyxjQUFjLEVBQUUsTUFBQSxRQUFRLGFBQVIsUUFBUSx1QkFBUixRQUFRLENBQUUsY0FBYyxtQ0FBSSxDQUFDO1lBQzdDLGlCQUFpQixFQUFFLE1BQUEsUUFBUSxhQUFSLFFBQVEsdUJBQVIsUUFBUSxDQUFFLGlCQUFpQixtQ0FBSSxJQUFJO1lBQ3RELGFBQWEsRUFBRSxNQUFBLFFBQVEsYUFBUixRQUFRLHVCQUFSLFFBQVEsQ0FBRSxh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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.mjs";
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
+ }
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Converted from typescript.
3
+ * @template {string} K
4
+ * @template {string|number} [Y=string]
5
+ *
6
+ * @param {Record<K, Y>} obj
7
+ */
8
+ export function swapObject(obj) {
9
+ /**
10
+ * @type {Record<Y, K>}
11
+ */
12
+ const res = {};
13
+
14
+ /**
15
+ * @type {[Y, string][]}
16
+ */
17
+ const entries = Object.entries(obj);
18
+
19
+ for (let i = 0, len = entries.len; i < len; i++) {
20
+ res[entries[i][1]] = entries[i][0];
21
+ }
22
+
23
+ return res;
24
+ }
package/package.json CHANGED
@@ -1,28 +1,27 @@
1
1
  {
2
2
  "name": "pw-js-api",
3
- "version": "0.0.4",
3
+ "version": "0.0.6-dev.84aec6f",
4
4
  "description": "A PixelWalker Library, aims to be minimal with support for browsers.",
5
- "scripts": {
6
- "test": "bun test/index.ts",
7
- "build": "rimraf dist && tsc -p tsconfig.json && ncp lib/types dist/types",
8
- "build:proto": "node scripts/build-proto.mjs && buf generate",
9
- "browsify": "rimraf browser && npm-run-all -p browsify-*",
10
- "browsify-prod": "cross-env NODE_ENV=production webpack --mode=production",
11
- "browsify-dev": "cross-env NODE_ENV=development webpack --mode=development",
12
- "prepare": "run-s build:proto build browsify"
13
- },
14
5
  "exports": {
15
6
  "bun": "./dist/index.js",
16
7
  "import": "./esm.mjs",
17
8
  "require": "./dist/index.js",
18
9
  "types": "./dist/index.d.ts"
19
10
  },
20
- "keywords": ["PixelWalker", "Typescript"],
11
+ "keywords": [
12
+ "PixelWalker",
13
+ "Typescript"
14
+ ],
21
15
  "author": "Doomester",
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git+https://github.com/doomestee/pw-js-api.git"
19
+ },
22
20
  "license": "MIT",
23
21
  "devDependencies": {
24
22
  "@bufbuild/buf": "~1.48.0",
25
23
  "@bufbuild/protoc-gen-es": "~2.2.3",
24
+ "@favware/npm-deprecate": "^2.0.0",
26
25
  "@types/node": "~22.10.2",
27
26
  "cross-env": "~7.0.3",
28
27
  "ncp": "^2.0.0",
@@ -36,5 +35,13 @@
36
35
  "@bufbuild/protobuf": "~2.2.3",
37
36
  "isows": "~1.0.6",
38
37
  "tslib": "~2.8.1"
38
+ },
39
+ "scripts": {
40
+ "test": "bun test/index.ts",
41
+ "build": "rimraf dist && tsc -p tsconfig.json && ncp lib/types dist/types",
42
+ "build:proto": "node scripts/build-proto.mjs && buf generate",
43
+ "browsify": "rimraf browser && npm-run-all -p browsify-*",
44
+ "browsify-prod": "cross-env NODE_ENV=production webpack --mode=production",
45
+ "browsify-dev": "cross-env NODE_ENV=development webpack --mode=development"
39
46
  }
40
- }
47
+ }