@shaunlwm/pickle.ts 0.0.1
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 +245 -0
- package/dist/adapters/base-adapter.d.ts +39 -0
- package/dist/adapters/base-adapter.d.ts.map +1 -0
- package/dist/adapters/base-adapter.js +79 -0
- package/dist/adapters/base-adapter.js.map +1 -0
- package/dist/adapters/cpjourney-adapter.d.ts +12 -0
- package/dist/adapters/cpjourney-adapter.d.ts.map +1 -0
- package/dist/adapters/cpjourney-adapter.js +114 -0
- package/dist/adapters/cpjourney-adapter.js.map +1 -0
- package/dist/adapters/index.d.ts +9 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +8 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/client.d.ts +60 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +191 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/types/adapter-types.d.ts +27 -0
- package/dist/types/adapter-types.d.ts.map +1 -0
- package/dist/types/adapter-types.js +2 -0
- package/dist/types/adapter-types.js.map +1 -0
- package/dist/types/message-types.d.ts +159 -0
- package/dist/types/message-types.d.ts.map +1 -0
- package/dist/types/message-types.js +2 -0
- package/dist/types/message-types.js.map +1 -0
- package/dist/types/player-types.d.ts +85 -0
- package/dist/types/player-types.d.ts.map +1 -0
- package/dist/types/player-types.js +2 -0
- package/dist/types/player-types.js.map +1 -0
- package/package.json +33 -0
package/README.md
ADDED
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
# pickle.ts
|
|
2
|
+
|
|
3
|
+
Type-safe client library for Club Penguin Private Servers.
|
|
4
|
+
|
|
5
|
+
Built with TypeScript, Socket.IO, and msgpack. Supports multiple CPPS backends through an adapter pattern — currently ships with CPJourney support.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install pickle.ts
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Quick Start
|
|
14
|
+
|
|
15
|
+
```typescript
|
|
16
|
+
import { Client } from "pickle.ts"
|
|
17
|
+
|
|
18
|
+
const client = new Client("CPJourney")
|
|
19
|
+
|
|
20
|
+
const servers = await client.login({
|
|
21
|
+
username: "myuser",
|
|
22
|
+
password: "mypass",
|
|
23
|
+
})
|
|
24
|
+
// => [{ name: "Blizzard", population: 6 }, { name: "Sleet", population: 3 }, ...]
|
|
25
|
+
|
|
26
|
+
await client.connect(servers[0].name)
|
|
27
|
+
|
|
28
|
+
console.log(client.player?.username) // your penguin
|
|
29
|
+
console.log(client.room) // current room id
|
|
30
|
+
console.log(client.users.size) // penguins in room
|
|
31
|
+
|
|
32
|
+
client.walk(400, 300)
|
|
33
|
+
client.sendMessage("hello!")
|
|
34
|
+
client.joinRoom(100)
|
|
35
|
+
|
|
36
|
+
client.disconnect()
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## API
|
|
40
|
+
|
|
41
|
+
### `new Client(server, options?)`
|
|
42
|
+
|
|
43
|
+
Creates a new client instance.
|
|
44
|
+
|
|
45
|
+
| Param | Type | Description |
|
|
46
|
+
|---|---|---|
|
|
47
|
+
| `server` | `"CPJourney"` | CPPS server identifier (strongly typed) |
|
|
48
|
+
| `options.debug` | `boolean \| LogFn` | Enable debug logging. Pass `true` for console.log, or a custom function |
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
// default console.log
|
|
52
|
+
const client = new Client("CPJourney", { debug: true })
|
|
53
|
+
|
|
54
|
+
// custom logger
|
|
55
|
+
const client = new Client("CPJourney", {
|
|
56
|
+
debug: (msg, ...args) => myLogger.info(msg, ...args)
|
|
57
|
+
})
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### `client.login(options)`
|
|
61
|
+
|
|
62
|
+
Authenticates and returns the server list with populations.
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
const servers = await client.login({
|
|
66
|
+
username: "user",
|
|
67
|
+
password: "pass",
|
|
68
|
+
})
|
|
69
|
+
// servers: ServerInfo[] = [{ name: string, population: number }]
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Also supports token-based login:
|
|
73
|
+
|
|
74
|
+
```typescript
|
|
75
|
+
const servers = await client.login({
|
|
76
|
+
username: "user",
|
|
77
|
+
token: "savedToken",
|
|
78
|
+
})
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### `client.connect(serverName, options?)`
|
|
82
|
+
|
|
83
|
+
Connects to a game server. Handles queue automatically if the server is full.
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
await client.connect("Blizzard")
|
|
87
|
+
|
|
88
|
+
// with queue monitoring
|
|
89
|
+
await client.connect("Blizzard", {
|
|
90
|
+
onQueueUpdate: ({ position, queueLength }) => {
|
|
91
|
+
console.log(`#${position} of ${queueLength}`)
|
|
92
|
+
}
|
|
93
|
+
})
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
After `connect()` resolves, `client.player`, `client.room`, and `client.users` are populated.
|
|
97
|
+
|
|
98
|
+
### State
|
|
99
|
+
|
|
100
|
+
| Property | Type | Description |
|
|
101
|
+
|---|---|---|
|
|
102
|
+
| `client.player` | `PlayerData \| null` | Your penguin's full data (coins, inventory, settings, etc.) |
|
|
103
|
+
| `client.room` | `number \| null` | Current room ID |
|
|
104
|
+
| `client.users` | `Map<number, RoomUser>` | All penguins in the current room, keyed by ID |
|
|
105
|
+
|
|
106
|
+
`client.users` is automatically kept in sync — players are added/removed as they join/leave, positions and equipment update in real-time.
|
|
107
|
+
|
|
108
|
+
### Actions
|
|
109
|
+
|
|
110
|
+
```typescript
|
|
111
|
+
// Movement
|
|
112
|
+
client.walk(x, y)
|
|
113
|
+
client.joinRoom(roomId)
|
|
114
|
+
client.joinRoom(roomId, spawnX, spawnY)
|
|
115
|
+
|
|
116
|
+
// Chat
|
|
117
|
+
client.sendMessage("hello!")
|
|
118
|
+
client.sendEmote(1) // wave
|
|
119
|
+
client.sendSafe(800) // safe chat message id
|
|
120
|
+
client.snowball(x, y)
|
|
121
|
+
|
|
122
|
+
// Equipment
|
|
123
|
+
client.equipColor(1)
|
|
124
|
+
client.equipHead(1234)
|
|
125
|
+
client.equipFace(5678)
|
|
126
|
+
client.equipNeck(9012)
|
|
127
|
+
client.equipBody(3456)
|
|
128
|
+
client.equipHand(7890)
|
|
129
|
+
client.equipFeet(1234)
|
|
130
|
+
client.equipFlag(5678)
|
|
131
|
+
client.equipPhoto(9012)
|
|
132
|
+
client.addItem(itemId)
|
|
133
|
+
|
|
134
|
+
// Social
|
|
135
|
+
client.buddyRequest(userId)
|
|
136
|
+
client.buddyAccept(userId)
|
|
137
|
+
client.removeBuddy(userId)
|
|
138
|
+
client.addIgnore(userId)
|
|
139
|
+
client.removeIgnore(userId)
|
|
140
|
+
client.getPlayer(userId)
|
|
141
|
+
|
|
142
|
+
// Animation
|
|
143
|
+
client.sendFrame(frameId)
|
|
144
|
+
|
|
145
|
+
// Utility
|
|
146
|
+
client.getMascots()
|
|
147
|
+
client.getAllSlots()
|
|
148
|
+
await client.sleep(2000) // delay between actions
|
|
149
|
+
client.disconnect()
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### Events
|
|
153
|
+
|
|
154
|
+
All events are fully typed via `ServerMessages`.
|
|
155
|
+
|
|
156
|
+
```typescript
|
|
157
|
+
client.on("send_message", ({ id, message }) => {
|
|
158
|
+
const user = client.users.get(id)
|
|
159
|
+
console.log(`${user?.username}: ${message}`)
|
|
160
|
+
})
|
|
161
|
+
|
|
162
|
+
client.on("add_player", ({ user }) => {
|
|
163
|
+
console.log(`${user.username} joined the room`)
|
|
164
|
+
})
|
|
165
|
+
|
|
166
|
+
client.on("remove_player", ({ user }) => {
|
|
167
|
+
console.log(`Player ${user} left`)
|
|
168
|
+
})
|
|
169
|
+
|
|
170
|
+
client.on("send_position", ({ id, x, y }) => {
|
|
171
|
+
console.log(`Player ${id} moved to (${x}, ${y})`)
|
|
172
|
+
})
|
|
173
|
+
|
|
174
|
+
client.on("update_player", ({ id, item, slot }) => {
|
|
175
|
+
console.log(`Player ${id} equipped ${item} on ${slot}`)
|
|
176
|
+
})
|
|
177
|
+
|
|
178
|
+
client.on("send_emote", ({ id, emote }) => {
|
|
179
|
+
console.log(`Player ${id} emote ${emote}`)
|
|
180
|
+
})
|
|
181
|
+
|
|
182
|
+
client.on("send_frame", ({ id, frame }) => {
|
|
183
|
+
console.log(`Player ${id} frame ${frame}`)
|
|
184
|
+
})
|
|
185
|
+
|
|
186
|
+
client.on("join_room", ({ room, users }) => {
|
|
187
|
+
console.log(`Joined room ${room} with ${users.length} penguins`)
|
|
188
|
+
})
|
|
189
|
+
|
|
190
|
+
client.on("wait_queue_update", ({ position, queueLength }) => {
|
|
191
|
+
console.log(`Queue: #${position}/${queueLength}`)
|
|
192
|
+
})
|
|
193
|
+
|
|
194
|
+
client.on("disconnect", () => {
|
|
195
|
+
console.log("Connection lost")
|
|
196
|
+
})
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
## Types
|
|
200
|
+
|
|
201
|
+
All types are exported for external use:
|
|
202
|
+
|
|
203
|
+
```typescript
|
|
204
|
+
import type {
|
|
205
|
+
PlayerData, // full player data (coins, inventory, settings, buddies, etc.)
|
|
206
|
+
RoomUser, // player in a room (appearance, position, state)
|
|
207
|
+
PlayerAppearance, // equipment slots (color, head, face, body, etc.)
|
|
208
|
+
PlayerSettings, // game settings
|
|
209
|
+
Buddy, // buddy list entry
|
|
210
|
+
Mascot, // mascot data
|
|
211
|
+
ServerInfo, // server name + population
|
|
212
|
+
LoginOptions, // username + password login
|
|
213
|
+
TokenLoginOptions,// username + token login
|
|
214
|
+
LoginResult, // login response (servers, key, username)
|
|
215
|
+
QueueUpdate, // queue position update
|
|
216
|
+
ClientMessages, // all client -> server message types
|
|
217
|
+
ServerMessages, // all server -> client message types
|
|
218
|
+
} from "pickle.ts"
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
## Custom Adapters
|
|
222
|
+
|
|
223
|
+
To support a different CPPS, extend `BaseAdapter`:
|
|
224
|
+
|
|
225
|
+
```typescript
|
|
226
|
+
import { BaseAdapter } from "pickle.ts"
|
|
227
|
+
|
|
228
|
+
export class MyServerAdapter extends BaseAdapter {
|
|
229
|
+
readonly id = "MyServer"
|
|
230
|
+
|
|
231
|
+
async login(options) { /* your login flow */ }
|
|
232
|
+
async connect(serverName, loginResult, options?) { /* your connect flow */ }
|
|
233
|
+
send(action, args) { /* your packet format */ }
|
|
234
|
+
disconnect() { /* cleanup */ }
|
|
235
|
+
|
|
236
|
+
// override any game method if the server uses different packets
|
|
237
|
+
joinRoom(room, x, y) {
|
|
238
|
+
this.send("custom_join", { roomId: room })
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
## License
|
|
244
|
+
|
|
245
|
+
MIT
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { Socket } from "socket.io-client";
|
|
2
|
+
import type { LoginOptions, LoginResult, QueueUpdate, TokenLoginOptions } from "../types/adapter-types.js";
|
|
3
|
+
export type ConnectOptions = {
|
|
4
|
+
onQueueUpdate?: (update: QueueUpdate) => void;
|
|
5
|
+
};
|
|
6
|
+
export declare abstract class BaseAdapter {
|
|
7
|
+
abstract readonly id: string;
|
|
8
|
+
protected socket: Socket | null;
|
|
9
|
+
abstract login(options: LoginOptions | TokenLoginOptions): Promise<LoginResult>;
|
|
10
|
+
abstract connect(serverName: string, loginResult: LoginResult, options?: ConnectOptions): Promise<Socket>;
|
|
11
|
+
abstract disconnect(): void;
|
|
12
|
+
abstract send(action: string, args: Record<string, unknown>): void;
|
|
13
|
+
sendMessage(message: string): void;
|
|
14
|
+
sendEmote(emote: number): void;
|
|
15
|
+
sendSafe(safe: number): void;
|
|
16
|
+
walk(x: number, y: number): void;
|
|
17
|
+
sendFrame(frame: number, set?: boolean): void;
|
|
18
|
+
snowball(x: number, y: number): void;
|
|
19
|
+
joinRoom(room: number, x?: number, y?: number): void;
|
|
20
|
+
addItem(item: number): void;
|
|
21
|
+
equipColor(item: number): void;
|
|
22
|
+
equipHead(item: number): void;
|
|
23
|
+
equipFace(item: number): void;
|
|
24
|
+
equipNeck(item: number): void;
|
|
25
|
+
equipBody(item: number): void;
|
|
26
|
+
equipHand(item: number): void;
|
|
27
|
+
equipFeet(item: number): void;
|
|
28
|
+
equipFlag(item: number): void;
|
|
29
|
+
equipPhoto(item: number): void;
|
|
30
|
+
buddyRequest(id: number): void;
|
|
31
|
+
buddyAccept(id: number): void;
|
|
32
|
+
removeBuddy(id: number): void;
|
|
33
|
+
addIgnore(id: number): void;
|
|
34
|
+
removeIgnore(id: number): void;
|
|
35
|
+
getPlayer(id: number): void;
|
|
36
|
+
getAllSlots(): void;
|
|
37
|
+
getMascots(): void;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=base-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/base-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAE1G,MAAM,MAAM,cAAc,GAAG;IAC3B,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,WAAW,KAAK,IAAI,CAAA;CAC9C,CAAA;AAED,8BAAsB,WAAW;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IAC5B,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAO;IAEtC,QAAQ,CAAC,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC;IAC/E,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IACzG,QAAQ,CAAC,UAAU,IAAI,IAAI;IAC3B,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAElE,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIlC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI9B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI5B,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAIhC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI;IAI7C,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAIpC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAIpD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI9B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI7B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI7B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI7B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI7B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI7B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI7B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI7B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI9B,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI9B,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI7B,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI7B,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI3B,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI9B,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAI3B,WAAW,IAAI,IAAI;IAInB,UAAU,IAAI,IAAI;CAGnB"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
export class BaseAdapter {
|
|
2
|
+
socket = null;
|
|
3
|
+
sendMessage(message) {
|
|
4
|
+
this.send("send_message", { message });
|
|
5
|
+
}
|
|
6
|
+
sendEmote(emote) {
|
|
7
|
+
this.send("send_emote", { emote });
|
|
8
|
+
}
|
|
9
|
+
sendSafe(safe) {
|
|
10
|
+
this.send("send_safe", { safe });
|
|
11
|
+
}
|
|
12
|
+
walk(x, y) {
|
|
13
|
+
this.send("send_position", { x, y });
|
|
14
|
+
}
|
|
15
|
+
sendFrame(frame, set) {
|
|
16
|
+
this.send("send_frame", { frame, set });
|
|
17
|
+
}
|
|
18
|
+
snowball(x, y) {
|
|
19
|
+
this.send("snowball", { x, y });
|
|
20
|
+
}
|
|
21
|
+
joinRoom(room, x, y) {
|
|
22
|
+
this.send("join_room", { room, x: x ?? 0, y: y ?? 0 });
|
|
23
|
+
}
|
|
24
|
+
addItem(item) {
|
|
25
|
+
this.send("add_item", { item });
|
|
26
|
+
}
|
|
27
|
+
equipColor(item) {
|
|
28
|
+
this.send("update_color", { item });
|
|
29
|
+
}
|
|
30
|
+
equipHead(item) {
|
|
31
|
+
this.send("update_head", { item });
|
|
32
|
+
}
|
|
33
|
+
equipFace(item) {
|
|
34
|
+
this.send("update_face", { item });
|
|
35
|
+
}
|
|
36
|
+
equipNeck(item) {
|
|
37
|
+
this.send("update_neck", { item });
|
|
38
|
+
}
|
|
39
|
+
equipBody(item) {
|
|
40
|
+
this.send("update_body", { item });
|
|
41
|
+
}
|
|
42
|
+
equipHand(item) {
|
|
43
|
+
this.send("update_hand", { item });
|
|
44
|
+
}
|
|
45
|
+
equipFeet(item) {
|
|
46
|
+
this.send("update_feet", { item });
|
|
47
|
+
}
|
|
48
|
+
equipFlag(item) {
|
|
49
|
+
this.send("update_flag", { item });
|
|
50
|
+
}
|
|
51
|
+
equipPhoto(item) {
|
|
52
|
+
this.send("update_photo", { item });
|
|
53
|
+
}
|
|
54
|
+
buddyRequest(id) {
|
|
55
|
+
this.send("buddy_request", { id });
|
|
56
|
+
}
|
|
57
|
+
buddyAccept(id) {
|
|
58
|
+
this.send("buddy_accept", { id });
|
|
59
|
+
}
|
|
60
|
+
removeBuddy(id) {
|
|
61
|
+
this.send("remove_buddy", { id });
|
|
62
|
+
}
|
|
63
|
+
addIgnore(id) {
|
|
64
|
+
this.send("add_ignore", { id });
|
|
65
|
+
}
|
|
66
|
+
removeIgnore(id) {
|
|
67
|
+
this.send("remove_ignore", { id });
|
|
68
|
+
}
|
|
69
|
+
getPlayer(id) {
|
|
70
|
+
this.send("get_player", { id });
|
|
71
|
+
}
|
|
72
|
+
getAllSlots() {
|
|
73
|
+
this.send("get_all_slots", {});
|
|
74
|
+
}
|
|
75
|
+
getMascots() {
|
|
76
|
+
this.send("get_mascots", {});
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=base-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-adapter.js","sourceRoot":"","sources":["../../src/adapters/base-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type Socket } from "socket.io-client";
|
|
2
|
+
import type { LoginOptions, LoginResult, TokenLoginOptions } from "../types/adapter-types.js";
|
|
3
|
+
import { BaseAdapter, type ConnectOptions } from "./base-adapter.js";
|
|
4
|
+
export declare class CpjourneyAdapter extends BaseAdapter {
|
|
5
|
+
readonly id = "CPJourney";
|
|
6
|
+
login(options: LoginOptions | TokenLoginOptions): Promise<LoginResult>;
|
|
7
|
+
connect(serverName: string, loginResult: LoginResult, options?: ConnectOptions): Promise<Socket>;
|
|
8
|
+
send(action: string, args: Record<string, unknown>): void;
|
|
9
|
+
disconnect(): void;
|
|
10
|
+
private createSocket;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=cpjourney-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cpjourney-adapter.d.ts","sourceRoot":"","sources":["../../src/adapters/cpjourney-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAM,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAElD,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAA2B,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AACtH,OAAO,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAwBpE,qBAAa,gBAAiB,SAAQ,WAAW;IAC/C,QAAQ,CAAC,EAAE,eAAc;IAEnB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,iBAAiB,GAAG,OAAO,CAAC,WAAW,CAAC;IAsDtE,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAsDtG,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI;IAKzD,UAAU,IAAI,IAAI;IAKlB,OAAO,CAAC,YAAY;CAQrB"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { io } from "socket.io-client";
|
|
2
|
+
import msgpackParser from "socket.io-msgpack-parser";
|
|
3
|
+
import { BaseAdapter } from "./base-adapter.js";
|
|
4
|
+
const BASE_URL = "wss://play.cpjourney.net";
|
|
5
|
+
const DEFAULT_SECRET = "skip";
|
|
6
|
+
export class CpjourneyAdapter extends BaseAdapter {
|
|
7
|
+
id = "CPJourney";
|
|
8
|
+
async login(options) {
|
|
9
|
+
const loginSocket = this.createSocket("/world/login/");
|
|
10
|
+
const result = await new Promise((resolve, reject) => {
|
|
11
|
+
const timeout = setTimeout(() => {
|
|
12
|
+
loginSocket.disconnect();
|
|
13
|
+
reject(new Error("Login timed out"));
|
|
14
|
+
}, 10_000);
|
|
15
|
+
loginSocket.on("connect", () => {
|
|
16
|
+
const secret = options.secret ?? DEFAULT_SECRET;
|
|
17
|
+
const args = "token" in options
|
|
18
|
+
? { username: options.username, token: options.token, secret }
|
|
19
|
+
: { username: options.username, password: options.password, secret };
|
|
20
|
+
loginSocket.emit("message", { action: "login", args });
|
|
21
|
+
});
|
|
22
|
+
loginSocket.on("message", (msg) => {
|
|
23
|
+
if (msg.action !== "login")
|
|
24
|
+
return;
|
|
25
|
+
clearTimeout(timeout);
|
|
26
|
+
loginSocket.disconnect();
|
|
27
|
+
const response = msg.args;
|
|
28
|
+
if (!response.success) {
|
|
29
|
+
reject(new Error("Login failed"));
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const servers = Object.entries(response.populations).map(([name, population]) => ({ name, population }));
|
|
33
|
+
resolve({
|
|
34
|
+
servers,
|
|
35
|
+
key: response.key,
|
|
36
|
+
username: response.username,
|
|
37
|
+
moderator: response.moderator,
|
|
38
|
+
buddyWorlds: response.buddyWorlds ?? [],
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
loginSocket.on("connect_error", (err) => {
|
|
42
|
+
clearTimeout(timeout);
|
|
43
|
+
loginSocket.disconnect();
|
|
44
|
+
reject(new Error(`Login connection failed: ${err.message}`));
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
return result;
|
|
48
|
+
}
|
|
49
|
+
async connect(serverName, loginResult, options) {
|
|
50
|
+
const gameSocket = this.createSocket(`/world/${serverName.toLowerCase()}/`);
|
|
51
|
+
this.socket = gameSocket;
|
|
52
|
+
await new Promise((resolve, reject) => {
|
|
53
|
+
let authSent = false;
|
|
54
|
+
gameSocket.on("connect", () => {
|
|
55
|
+
gameSocket.emit("message", {
|
|
56
|
+
action: "game_auth",
|
|
57
|
+
args: {
|
|
58
|
+
username: loginResult.username,
|
|
59
|
+
key: loginResult.key,
|
|
60
|
+
createToken: false,
|
|
61
|
+
joinInvis: false,
|
|
62
|
+
takeoverMascot: false,
|
|
63
|
+
token: "",
|
|
64
|
+
},
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
gameSocket.on("message", (msg) => {
|
|
68
|
+
switch (msg.action) {
|
|
69
|
+
case "wait_queue_update": {
|
|
70
|
+
options?.onQueueUpdate?.(msg.args);
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
case "game_auth": {
|
|
74
|
+
if (authSent)
|
|
75
|
+
break;
|
|
76
|
+
authSent = true;
|
|
77
|
+
const response = msg.args;
|
|
78
|
+
if (!response.success) {
|
|
79
|
+
gameSocket.disconnect();
|
|
80
|
+
reject(new Error("Game auth failed"));
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
gameSocket.emit("message", { action: "join_server", args: {} });
|
|
84
|
+
resolve();
|
|
85
|
+
break;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
gameSocket.on("connect_error", (err) => {
|
|
90
|
+
gameSocket.disconnect();
|
|
91
|
+
reject(new Error(`Game connection failed: ${err.message}`));
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
return gameSocket;
|
|
95
|
+
}
|
|
96
|
+
send(action, args) {
|
|
97
|
+
if (!this.socket)
|
|
98
|
+
throw new Error("Not connected");
|
|
99
|
+
this.socket.emit("message", { action, args });
|
|
100
|
+
}
|
|
101
|
+
disconnect() {
|
|
102
|
+
this.socket?.disconnect();
|
|
103
|
+
this.socket = null;
|
|
104
|
+
}
|
|
105
|
+
createSocket(path) {
|
|
106
|
+
return io(BASE_URL, {
|
|
107
|
+
path,
|
|
108
|
+
parser: msgpackParser,
|
|
109
|
+
transports: ["polling", "websocket"],
|
|
110
|
+
reconnection: false,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=cpjourney-adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cpjourney-adapter.js","sourceRoot":"","sources":["../../src/adapters/cpjourney-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { BaseAdapter } from "./base-adapter.js";
|
|
2
|
+
import { CpjourneyAdapter } from "./cpjourney-adapter.js";
|
|
3
|
+
declare const ADAPTERS: {
|
|
4
|
+
readonly CPJourney: typeof CpjourneyAdapter;
|
|
5
|
+
};
|
|
6
|
+
export type AdapterName = keyof typeof ADAPTERS;
|
|
7
|
+
export declare function createAdapter(name: AdapterName): BaseAdapter;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAEzD,QAAA,MAAM,QAAQ;;CAEJ,CAAA;AAEV,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,QAAQ,CAAA;AAE/C,wBAAgB,aAAa,CAAC,IAAI,EAAE,WAAW,GAAG,WAAW,CAE5D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAEzD,MAAM,QAAQ,GAAG;IACf,SAAS,EAAE,gBAAgB;CACnB,CAAA;AAIV,MAAM,UAAU,aAAa,CAAC,IAAiB;IAC7C,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAA;AAC7B,CAAC"}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { EventEmitter } from "node:events";
|
|
2
|
+
import { type AdapterName } from "./adapters/index.js";
|
|
3
|
+
import type { ConnectOptions } from "./adapters/base-adapter.js";
|
|
4
|
+
import type { LoginOptions, ServerInfo, TokenLoginOptions } from "./types/adapter-types.js";
|
|
5
|
+
import type { ServerMessages } from "./types/message-types.js";
|
|
6
|
+
import type { PlayerData, RoomUser } from "./types/player-types.js";
|
|
7
|
+
type ServerMessageHandler<K extends keyof ServerMessages> = (args: ServerMessages[K]) => void;
|
|
8
|
+
export type LogFn = (message: string, ...args: unknown[]) => void;
|
|
9
|
+
export type ClientOptions = {
|
|
10
|
+
debug?: boolean | LogFn;
|
|
11
|
+
};
|
|
12
|
+
export declare class Client extends EventEmitter {
|
|
13
|
+
player: PlayerData | null;
|
|
14
|
+
room: number | null;
|
|
15
|
+
users: Map<number, RoomUser>;
|
|
16
|
+
private adapter;
|
|
17
|
+
private loginResult;
|
|
18
|
+
private log;
|
|
19
|
+
constructor(server: AdapterName, options?: ClientOptions);
|
|
20
|
+
login(options: LoginOptions | TokenLoginOptions): Promise<ServerInfo[]>;
|
|
21
|
+
connect(serverName: string, options?: ConnectOptions): Promise<void>;
|
|
22
|
+
on<K extends keyof ServerMessages>(event: K, listener: ServerMessageHandler<K>): this;
|
|
23
|
+
on(event: string, listener: (...args: unknown[]) => void): this;
|
|
24
|
+
off<K extends keyof ServerMessages>(event: K, listener: ServerMessageHandler<K>): this;
|
|
25
|
+
off(event: string, listener: (...args: unknown[]) => void): this;
|
|
26
|
+
once<K extends keyof ServerMessages>(event: K, listener: ServerMessageHandler<K>): this;
|
|
27
|
+
once(event: string, listener: (...args: unknown[]) => void): this;
|
|
28
|
+
emit<K extends keyof ServerMessages>(event: K, args: ServerMessages[K]): boolean;
|
|
29
|
+
emit(event: string, ...args: unknown[]): boolean;
|
|
30
|
+
sendMessage(message: string): void;
|
|
31
|
+
sendEmote(emote: number): void;
|
|
32
|
+
sendSafe(safe: number): void;
|
|
33
|
+
walk(x: number, y: number): void;
|
|
34
|
+
sendFrame(frame: number, set?: boolean): void;
|
|
35
|
+
snowball(x: number, y: number): void;
|
|
36
|
+
joinRoom(room: number, x?: number, y?: number): void;
|
|
37
|
+
addItem(item: number): void;
|
|
38
|
+
equipColor(item: number): void;
|
|
39
|
+
equipHead(item: number): void;
|
|
40
|
+
equipFace(item: number): void;
|
|
41
|
+
equipNeck(item: number): void;
|
|
42
|
+
equipBody(item: number): void;
|
|
43
|
+
equipHand(item: number): void;
|
|
44
|
+
equipFeet(item: number): void;
|
|
45
|
+
equipFlag(item: number): void;
|
|
46
|
+
equipPhoto(item: number): void;
|
|
47
|
+
buddyRequest(id: number): void;
|
|
48
|
+
buddyAccept(id: number): void;
|
|
49
|
+
removeBuddy(id: number): void;
|
|
50
|
+
addIgnore(id: number): void;
|
|
51
|
+
removeIgnore(id: number): void;
|
|
52
|
+
getPlayer(id: number): void;
|
|
53
|
+
getAllSlots(): void;
|
|
54
|
+
getMascots(): void;
|
|
55
|
+
sleep(ms: number): Promise<void>;
|
|
56
|
+
disconnect(): void;
|
|
57
|
+
private handleMessage;
|
|
58
|
+
}
|
|
59
|
+
export {};
|
|
60
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACrE,OAAO,KAAK,EAAe,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAC7E,OAAO,KAAK,EAAE,YAAY,EAA4B,UAAU,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AACrH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAA;AAEnE,KAAK,oBAAoB,CAAC,CAAC,SAAS,MAAM,cAAc,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;AAE7F,MAAM,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,CAAA;AAEjE,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,CAAA;CACxB,CAAA;AAWD,qBAAa,MAAO,SAAQ,YAAY;IACtC,MAAM,EAAE,UAAU,GAAG,IAAI,CAAO;IAChC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAO;IAC1B,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAY;IAExC,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,WAAW,CAA2B;IAC9C,OAAO,CAAC,GAAG,CAAqB;gBAEpB,MAAM,EAAE,WAAW,EAAE,OAAO,CAAC,EAAE,aAAa;IAWlD,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,iBAAiB,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAOvE,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAyD1E,EAAE,CAAC,CAAC,SAAS,MAAM,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI;IACrF,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI;IAK/D,GAAG,CAAC,CAAC,SAAS,MAAM,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI;IACtF,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI;IAKhE,IAAI,CAAC,CAAC,SAAS,MAAM,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI;IACvF,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI;IAKjE,IAAI,CAAC,CAAC,SAAS,MAAM,cAAc,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,GAAG,OAAO;IAChF,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,OAAO;IAKhD,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAClC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAC5B,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IAChC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI;IAC7C,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IACpD,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAC3B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAC9B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAC7B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAC7B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAC7B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAC7B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAC7B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAC7B,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAC7B,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAC9B,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAC9B,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAC7B,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAC7B,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAC3B,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAC9B,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAC3B,WAAW,IAAI,IAAI;IACnB,UAAU,IAAI,IAAI;IAElB,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhC,UAAU,IAAI,IAAI;IAQlB,OAAO,CAAC,aAAa;CAoEtB"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { EventEmitter } from "node:events";
|
|
2
|
+
import { createAdapter } from "./adapters/index.js";
|
|
3
|
+
function isMessagePayload(msg) {
|
|
4
|
+
return typeof msg === "object" && msg !== null && "action" in msg && "args" in msg;
|
|
5
|
+
}
|
|
6
|
+
export class Client extends EventEmitter {
|
|
7
|
+
player = null;
|
|
8
|
+
room = null;
|
|
9
|
+
users = new Map();
|
|
10
|
+
adapter;
|
|
11
|
+
loginResult = null;
|
|
12
|
+
log = null;
|
|
13
|
+
constructor(server, options) {
|
|
14
|
+
super();
|
|
15
|
+
this.adapter = createAdapter(server);
|
|
16
|
+
if (options?.debug) {
|
|
17
|
+
this.log = typeof options.debug === "function"
|
|
18
|
+
? options.debug
|
|
19
|
+
: console.log.bind(console);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
async login(options) {
|
|
23
|
+
this.log?.("[login] logging in as", options.username);
|
|
24
|
+
this.loginResult = await this.adapter.login(options);
|
|
25
|
+
this.log?.("[login] success —", this.loginResult.servers.length, "servers");
|
|
26
|
+
return this.loginResult.servers;
|
|
27
|
+
}
|
|
28
|
+
async connect(serverName, options) {
|
|
29
|
+
if (!this.loginResult)
|
|
30
|
+
throw new Error("Must call login() first");
|
|
31
|
+
this.log?.("[connect] joining", serverName);
|
|
32
|
+
const connectOptions = {
|
|
33
|
+
...options,
|
|
34
|
+
onQueueUpdate: (update) => {
|
|
35
|
+
this.log?.("[queue]", `#${update.position}/${update.queueLength}`);
|
|
36
|
+
this.emit("wait_queue_update", update);
|
|
37
|
+
options?.onQueueUpdate?.(update);
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
const socket = await this.adapter.connect(serverName, this.loginResult, connectOptions);
|
|
41
|
+
await new Promise((resolve, reject) => {
|
|
42
|
+
const timeout = setTimeout(() => {
|
|
43
|
+
reject(new Error("Waiting for load_player timed out"));
|
|
44
|
+
}, 10_000);
|
|
45
|
+
let playerLoaded = false;
|
|
46
|
+
let roomJoined = false;
|
|
47
|
+
const checkReady = () => {
|
|
48
|
+
if (playerLoaded && roomJoined) {
|
|
49
|
+
clearTimeout(timeout);
|
|
50
|
+
resolve();
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
socket.on("message", (msg) => {
|
|
54
|
+
if (!isMessagePayload(msg))
|
|
55
|
+
return;
|
|
56
|
+
this.handleMessage(msg);
|
|
57
|
+
switch (msg.action) {
|
|
58
|
+
case "load_player":
|
|
59
|
+
playerLoaded = true;
|
|
60
|
+
checkReady();
|
|
61
|
+
break;
|
|
62
|
+
case "join_room":
|
|
63
|
+
roomJoined = true;
|
|
64
|
+
checkReady();
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
socket.on("disconnect", () => {
|
|
69
|
+
clearTimeout(timeout);
|
|
70
|
+
if (!playerLoaded || !roomJoined) {
|
|
71
|
+
reject(new Error("Disconnected before fully loaded"));
|
|
72
|
+
}
|
|
73
|
+
this.emit("disconnect");
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
on(event, listener) {
|
|
78
|
+
return super.on(event, listener);
|
|
79
|
+
}
|
|
80
|
+
off(event, listener) {
|
|
81
|
+
return super.off(event, listener);
|
|
82
|
+
}
|
|
83
|
+
once(event, listener) {
|
|
84
|
+
return super.once(event, listener);
|
|
85
|
+
}
|
|
86
|
+
emit(event, ...args) {
|
|
87
|
+
return super.emit(event, ...args);
|
|
88
|
+
}
|
|
89
|
+
sendMessage(message) { this.adapter.sendMessage(message); }
|
|
90
|
+
sendEmote(emote) { this.adapter.sendEmote(emote); }
|
|
91
|
+
sendSafe(safe) { this.adapter.sendSafe(safe); }
|
|
92
|
+
walk(x, y) { this.adapter.walk(x, y); }
|
|
93
|
+
sendFrame(frame, set) { this.adapter.sendFrame(frame, set); }
|
|
94
|
+
snowball(x, y) { this.adapter.snowball(x, y); }
|
|
95
|
+
joinRoom(room, x, y) { this.adapter.joinRoom(room, x, y); }
|
|
96
|
+
addItem(item) { this.adapter.addItem(item); }
|
|
97
|
+
equipColor(item) { this.adapter.equipColor(item); }
|
|
98
|
+
equipHead(item) { this.adapter.equipHead(item); }
|
|
99
|
+
equipFace(item) { this.adapter.equipFace(item); }
|
|
100
|
+
equipNeck(item) { this.adapter.equipNeck(item); }
|
|
101
|
+
equipBody(item) { this.adapter.equipBody(item); }
|
|
102
|
+
equipHand(item) { this.adapter.equipHand(item); }
|
|
103
|
+
equipFeet(item) { this.adapter.equipFeet(item); }
|
|
104
|
+
equipFlag(item) { this.adapter.equipFlag(item); }
|
|
105
|
+
equipPhoto(item) { this.adapter.equipPhoto(item); }
|
|
106
|
+
buddyRequest(id) { this.adapter.buddyRequest(id); }
|
|
107
|
+
buddyAccept(id) { this.adapter.buddyAccept(id); }
|
|
108
|
+
removeBuddy(id) { this.adapter.removeBuddy(id); }
|
|
109
|
+
addIgnore(id) { this.adapter.addIgnore(id); }
|
|
110
|
+
removeIgnore(id) { this.adapter.removeIgnore(id); }
|
|
111
|
+
getPlayer(id) { this.adapter.getPlayer(id); }
|
|
112
|
+
getAllSlots() { this.adapter.getAllSlots(); }
|
|
113
|
+
getMascots() { this.adapter.getMascots(); }
|
|
114
|
+
sleep(ms) {
|
|
115
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
116
|
+
}
|
|
117
|
+
disconnect() {
|
|
118
|
+
this.log?.("[disconnect] closing connection");
|
|
119
|
+
this.adapter.disconnect();
|
|
120
|
+
this.player = null;
|
|
121
|
+
this.room = null;
|
|
122
|
+
this.users.clear();
|
|
123
|
+
}
|
|
124
|
+
handleMessage(msg) {
|
|
125
|
+
const { action, args } = msg;
|
|
126
|
+
switch (action) {
|
|
127
|
+
case "load_player": {
|
|
128
|
+
const user = args.user;
|
|
129
|
+
this.player = user;
|
|
130
|
+
this.log?.("[load_player]", user.username, `id=${user.id}`);
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
case "join_room": {
|
|
134
|
+
const room = args.room;
|
|
135
|
+
const users = args.users;
|
|
136
|
+
this.room = room;
|
|
137
|
+
this.users.clear();
|
|
138
|
+
for (const user of users) {
|
|
139
|
+
this.users.set(user.id, user);
|
|
140
|
+
}
|
|
141
|
+
this.log?.("[join_room]", `room=${room}`, `users=${users.length}`);
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
case "add_player": {
|
|
145
|
+
const user = args.user;
|
|
146
|
+
this.users.set(user.id, user);
|
|
147
|
+
this.log?.("[add_player]", user.username, `id=${user.id}`);
|
|
148
|
+
break;
|
|
149
|
+
}
|
|
150
|
+
case "remove_player": {
|
|
151
|
+
const id = args.user;
|
|
152
|
+
this.users.delete(id);
|
|
153
|
+
this.log?.("[remove_player]", `id=${id}`);
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
case "send_position": {
|
|
157
|
+
const id = args.id;
|
|
158
|
+
const user = this.users.get(id);
|
|
159
|
+
if (user) {
|
|
160
|
+
user.x = args.x;
|
|
161
|
+
user.y = args.y;
|
|
162
|
+
}
|
|
163
|
+
break;
|
|
164
|
+
}
|
|
165
|
+
case "send_frame": {
|
|
166
|
+
const id = args.id;
|
|
167
|
+
const user = this.users.get(id);
|
|
168
|
+
if (user) {
|
|
169
|
+
user.frame = args.frame;
|
|
170
|
+
}
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
case "update_player": {
|
|
174
|
+
const id = args.id;
|
|
175
|
+
const slot = args.slot;
|
|
176
|
+
const item = args.item;
|
|
177
|
+
const user = this.users.get(id);
|
|
178
|
+
if (user && slot in user) {
|
|
179
|
+
user[slot] = item;
|
|
180
|
+
}
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
default: {
|
|
184
|
+
this.log?.(`[${action}]`, JSON.stringify(args));
|
|
185
|
+
break;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
this.emit(action, args);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { Client, type ClientOptions, type LogFn } from "./client.js";
|
|
2
|
+
export { BaseAdapter, type ConnectOptions } from "./adapters/base-adapter.js";
|
|
3
|
+
export type { AdapterName } from "./adapters/index.js";
|
|
4
|
+
export type { PlayerData, RoomUser, Buddy, PlayerAppearance, PlayerSettings, Mascot } from "./types/player-types.js";
|
|
5
|
+
export type { ClientMessages, ServerMessages } from "./types/message-types.js";
|
|
6
|
+
export type { LoginOptions, TokenLoginOptions, ServerInfo, LoginResult, QueueUpdate } from "./types/adapter-types.js";
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAA;AACpE,OAAO,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAC7E,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACtD,YAAY,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AACpH,YAAY,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9E,YAAY,EAAE,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAkC,MAAM,aAAa,CAAA;AACpE,OAAO,EAAE,WAAW,EAAuB,MAAM,4BAA4B,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export type ServerInfo = {
|
|
2
|
+
name: string;
|
|
3
|
+
population: number;
|
|
4
|
+
};
|
|
5
|
+
export type LoginOptions = {
|
|
6
|
+
username: string;
|
|
7
|
+
password: string;
|
|
8
|
+
secret?: string;
|
|
9
|
+
};
|
|
10
|
+
export type TokenLoginOptions = {
|
|
11
|
+
username: string;
|
|
12
|
+
token: string;
|
|
13
|
+
secret?: string;
|
|
14
|
+
};
|
|
15
|
+
export type LoginResult = {
|
|
16
|
+
servers: ServerInfo[];
|
|
17
|
+
key: string;
|
|
18
|
+
username: string;
|
|
19
|
+
moderator: boolean;
|
|
20
|
+
buddyWorlds: string[];
|
|
21
|
+
};
|
|
22
|
+
export type QueueUpdate = {
|
|
23
|
+
userId: number;
|
|
24
|
+
position: number;
|
|
25
|
+
queueLength: number;
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=adapter-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-types.d.ts","sourceRoot":"","sources":["../../src/types/adapter-types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,UAAU,EAAE,CAAA;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,OAAO,CAAA;IAClB,WAAW,EAAE,MAAM,EAAE,CAAA;CACtB,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter-types.js","sourceRoot":"","sources":["../../src/types/adapter-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import type { Mascot, PlayerData, RoomUser } from "./player-types.js";
|
|
2
|
+
import type { QueueUpdate } from "./adapter-types.js";
|
|
3
|
+
export type ClientMessages = {
|
|
4
|
+
send_position: {
|
|
5
|
+
x: number;
|
|
6
|
+
y: number;
|
|
7
|
+
};
|
|
8
|
+
send_frame: {
|
|
9
|
+
frame: number;
|
|
10
|
+
set?: boolean;
|
|
11
|
+
};
|
|
12
|
+
send_message: {
|
|
13
|
+
message: string;
|
|
14
|
+
};
|
|
15
|
+
join_room: {
|
|
16
|
+
room: number;
|
|
17
|
+
x?: number;
|
|
18
|
+
y?: number;
|
|
19
|
+
};
|
|
20
|
+
add_item: {
|
|
21
|
+
item: number;
|
|
22
|
+
};
|
|
23
|
+
send_emote: {
|
|
24
|
+
emote: number;
|
|
25
|
+
};
|
|
26
|
+
send_safe: {
|
|
27
|
+
safe: number;
|
|
28
|
+
};
|
|
29
|
+
snowball: {
|
|
30
|
+
x: number;
|
|
31
|
+
y: number;
|
|
32
|
+
};
|
|
33
|
+
buddy_request: {
|
|
34
|
+
id: number;
|
|
35
|
+
};
|
|
36
|
+
buddy_accept: {
|
|
37
|
+
id: number;
|
|
38
|
+
};
|
|
39
|
+
remove_buddy: {
|
|
40
|
+
id: number;
|
|
41
|
+
};
|
|
42
|
+
get_player: {
|
|
43
|
+
id: number;
|
|
44
|
+
};
|
|
45
|
+
add_ignore: {
|
|
46
|
+
id: number;
|
|
47
|
+
};
|
|
48
|
+
remove_ignore: {
|
|
49
|
+
id: number;
|
|
50
|
+
};
|
|
51
|
+
update_color: {
|
|
52
|
+
item: number;
|
|
53
|
+
};
|
|
54
|
+
update_head: {
|
|
55
|
+
item: number;
|
|
56
|
+
};
|
|
57
|
+
update_face: {
|
|
58
|
+
item: number;
|
|
59
|
+
};
|
|
60
|
+
update_neck: {
|
|
61
|
+
item: number;
|
|
62
|
+
};
|
|
63
|
+
update_body: {
|
|
64
|
+
item: number;
|
|
65
|
+
};
|
|
66
|
+
update_hand: {
|
|
67
|
+
item: number;
|
|
68
|
+
};
|
|
69
|
+
update_feet: {
|
|
70
|
+
item: number;
|
|
71
|
+
};
|
|
72
|
+
update_flag: {
|
|
73
|
+
item: number;
|
|
74
|
+
};
|
|
75
|
+
update_photo: {
|
|
76
|
+
item: number;
|
|
77
|
+
};
|
|
78
|
+
get_all_slots: Record<string, never>;
|
|
79
|
+
get_mascots: Record<string, never>;
|
|
80
|
+
get_weather: Record<string, never>;
|
|
81
|
+
join_server: Record<string, never>;
|
|
82
|
+
check_puffle_sprite: {
|
|
83
|
+
puffleSprite: unknown;
|
|
84
|
+
};
|
|
85
|
+
};
|
|
86
|
+
export type ServerMessages = {
|
|
87
|
+
login: {
|
|
88
|
+
success: boolean;
|
|
89
|
+
username: string;
|
|
90
|
+
key: string;
|
|
91
|
+
populations: Record<string, number>;
|
|
92
|
+
moderator: boolean;
|
|
93
|
+
buddyWorlds: string[];
|
|
94
|
+
};
|
|
95
|
+
game_auth: {
|
|
96
|
+
success: boolean;
|
|
97
|
+
token?: string;
|
|
98
|
+
};
|
|
99
|
+
load_player: {
|
|
100
|
+
user: PlayerData;
|
|
101
|
+
};
|
|
102
|
+
join_room: {
|
|
103
|
+
room: number;
|
|
104
|
+
users: RoomUser[];
|
|
105
|
+
};
|
|
106
|
+
add_player: {
|
|
107
|
+
user: RoomUser;
|
|
108
|
+
};
|
|
109
|
+
remove_player: {
|
|
110
|
+
user: number;
|
|
111
|
+
};
|
|
112
|
+
send_position: {
|
|
113
|
+
id: number;
|
|
114
|
+
x: number;
|
|
115
|
+
y: number;
|
|
116
|
+
};
|
|
117
|
+
send_frame: {
|
|
118
|
+
id: number;
|
|
119
|
+
frame: number;
|
|
120
|
+
set?: boolean;
|
|
121
|
+
};
|
|
122
|
+
send_message: {
|
|
123
|
+
id: number;
|
|
124
|
+
message: string;
|
|
125
|
+
};
|
|
126
|
+
send_emote: {
|
|
127
|
+
id: number;
|
|
128
|
+
emote: number;
|
|
129
|
+
};
|
|
130
|
+
set_weather: {
|
|
131
|
+
type: string;
|
|
132
|
+
intensity: number;
|
|
133
|
+
};
|
|
134
|
+
open_sprite: {
|
|
135
|
+
id: number;
|
|
136
|
+
sprite: string;
|
|
137
|
+
};
|
|
138
|
+
close_sprite: {
|
|
139
|
+
id: number;
|
|
140
|
+
};
|
|
141
|
+
wait_queue_update: QueueUpdate;
|
|
142
|
+
cpj_ping: Record<string, never>;
|
|
143
|
+
get_mascots: {
|
|
144
|
+
mascots: Mascot[];
|
|
145
|
+
};
|
|
146
|
+
get_player: {
|
|
147
|
+
user: RoomUser;
|
|
148
|
+
};
|
|
149
|
+
update_player: {
|
|
150
|
+
id: number;
|
|
151
|
+
item: number;
|
|
152
|
+
slot: string;
|
|
153
|
+
};
|
|
154
|
+
slot: unknown[];
|
|
155
|
+
error: {
|
|
156
|
+
error: number;
|
|
157
|
+
};
|
|
158
|
+
};
|
|
159
|
+
//# sourceMappingURL=message-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-types.d.ts","sourceRoot":"","sources":["../../src/types/message-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-types.js","sourceRoot":"","sources":["../../src/types/message-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
export type PlayerAppearance = {
|
|
2
|
+
color: number;
|
|
3
|
+
hat: number;
|
|
4
|
+
head: number;
|
|
5
|
+
face: number;
|
|
6
|
+
face_mask: number;
|
|
7
|
+
neck: number;
|
|
8
|
+
neck_scarf: number;
|
|
9
|
+
body: number;
|
|
10
|
+
body_shirt: number;
|
|
11
|
+
hand: number;
|
|
12
|
+
hand_glove: number;
|
|
13
|
+
feet: number;
|
|
14
|
+
flag: number;
|
|
15
|
+
photo: number;
|
|
16
|
+
transform: number;
|
|
17
|
+
};
|
|
18
|
+
export type PlayerSettings = {
|
|
19
|
+
music_volume: number;
|
|
20
|
+
sfx_volume: number;
|
|
21
|
+
hide_penguins: boolean;
|
|
22
|
+
hide_chats: boolean;
|
|
23
|
+
hide_emotes: boolean;
|
|
24
|
+
hide_ui: boolean;
|
|
25
|
+
hide_usernames: boolean;
|
|
26
|
+
quality: number;
|
|
27
|
+
silence_notifications: boolean;
|
|
28
|
+
opt_out_postcards: boolean;
|
|
29
|
+
opt_out_buddy_requests: boolean;
|
|
30
|
+
};
|
|
31
|
+
export type Buddy = {
|
|
32
|
+
id: number;
|
|
33
|
+
username: string;
|
|
34
|
+
online: boolean;
|
|
35
|
+
favorite: boolean;
|
|
36
|
+
items: number[];
|
|
37
|
+
onlineServer: string;
|
|
38
|
+
};
|
|
39
|
+
export type RoomUser = PlayerAppearance & {
|
|
40
|
+
id: number;
|
|
41
|
+
username: string;
|
|
42
|
+
displayName: string;
|
|
43
|
+
joinTime: string;
|
|
44
|
+
x: number;
|
|
45
|
+
y: number;
|
|
46
|
+
frame: number;
|
|
47
|
+
walking: number;
|
|
48
|
+
walkingPuffleType: number;
|
|
49
|
+
openSprite?: string;
|
|
50
|
+
mascotGiveaway?: unknown;
|
|
51
|
+
iglooOpen: number;
|
|
52
|
+
iglooBounds: number;
|
|
53
|
+
igloo_slot: number;
|
|
54
|
+
currentLayer: number;
|
|
55
|
+
fireRank: number;
|
|
56
|
+
};
|
|
57
|
+
export type PlayerData = RoomUser & {
|
|
58
|
+
coins: number;
|
|
59
|
+
partyCoins: number;
|
|
60
|
+
gems: number;
|
|
61
|
+
rank: number;
|
|
62
|
+
streamer: boolean;
|
|
63
|
+
username_verified: boolean;
|
|
64
|
+
email_verified: boolean;
|
|
65
|
+
settings: PlayerSettings;
|
|
66
|
+
buddies: Buddy[];
|
|
67
|
+
buddyRequests: number[];
|
|
68
|
+
ignores: number[];
|
|
69
|
+
inventory: number[];
|
|
70
|
+
puffleInventory: unknown[];
|
|
71
|
+
igloos: unknown[];
|
|
72
|
+
furniture: unknown[];
|
|
73
|
+
flooring: unknown[];
|
|
74
|
+
inf_skill_points: number;
|
|
75
|
+
highest_floor_reached: number;
|
|
76
|
+
towerMeters: number;
|
|
77
|
+
towerExperience: number;
|
|
78
|
+
};
|
|
79
|
+
export type Mascot = {
|
|
80
|
+
id: number;
|
|
81
|
+
name: string;
|
|
82
|
+
giveaway: number;
|
|
83
|
+
stamp: number;
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=player-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"player-types.d.ts","sourceRoot":"","sources":["../../src/types/player-types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"player-types.js","sourceRoot":"","sources":["../../src/types/player-types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@shaunlwm/pickle.ts",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "Club Penguin Private Server client library",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"scripts": {
|
|
15
|
+
"build": "tsc",
|
|
16
|
+
"dev": "tsc --watch",
|
|
17
|
+
"typecheck": "tsc --noEmit",
|
|
18
|
+
"prepare": "npm run build",
|
|
19
|
+
"prepublishOnly": "npm run build"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"socket.io-client": "^4.8.1",
|
|
23
|
+
"socket.io-msgpack-parser": "^3.0.2"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@types/node": "^22.0.0",
|
|
27
|
+
"typescript": "^5.7.2"
|
|
28
|
+
},
|
|
29
|
+
"files": [
|
|
30
|
+
"dist"
|
|
31
|
+
],
|
|
32
|
+
"license": "MIT"
|
|
33
|
+
}
|