baltica 0.1.8 → 0.1.10
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 +1 -0
- package/dist/bridge/bridge-player.d.ts +1 -1
- package/dist/bridge/bridge-player.js +3 -3
- package/dist/bridge/bridge.d.ts +1 -1
- package/dist/bridge/bridge.js +3 -3
- package/dist/bridge/types/bridge-player-events.d.ts +1 -1
- package/dist/client/client.d.ts +4 -4
- package/dist/client/client.js +17 -27
- package/dist/client/types/client-data.js +1 -1
- package/dist/client/types/client-events.d.ts +1 -1
- package/dist/client/types/payload.js +1 -1
- package/dist/client/worker/worker-client.d.ts +2 -3
- package/dist/client/worker/worker-client.js +3 -4
- package/dist/client/worker/worker.js +1 -14
- package/dist/index.d.ts +1 -2
- package/dist/index.js +1 -2
- package/dist/server/player.d.ts +5 -4
- package/dist/server/player.js +17 -16
- package/dist/server/server.d.ts +1 -1
- package/dist/server/server.js +4 -4
- package/dist/server/types/player-events.d.ts +1 -1
- package/dist/{libs → shared}/auth.d.ts +1 -1
- package/dist/{libs → shared}/auth.js +2 -2
- package/dist/{libs → shared}/index.d.ts +1 -0
- package/dist/{libs → shared}/index.js +1 -0
- package/package.json +2 -2
- /package/dist/{libs → shared}/emitter.d.ts +0 -0
- /package/dist/{libs → shared}/emitter.js +0 -0
- /package/dist/{libs → shared}/packet-compressor.d.ts +0 -0
- /package/dist/{libs → shared}/packet-compressor.js +0 -0
- /package/dist/{libs → shared}/packet-encryptor.d.ts +0 -0
- /package/dist/{libs → shared}/packet-encryptor.js +0 -0
- /package/dist/{types → shared/types}/global.d.ts +0 -0
- /package/dist/{types → shared/types}/global.js +0 -0
- /package/dist/{types → shared/types}/index.d.ts +0 -0
- /package/dist/{types → shared/types}/index.js +0 -0
package/README.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { Client } from "../client";
|
|
2
|
-
import { Emitter } from "../libs";
|
|
3
2
|
import type { Player } from "../server";
|
|
4
3
|
import type { Bridge } from "./bridge";
|
|
5
4
|
import type { BridgePlayerEvents } from "./types";
|
|
5
|
+
import { Emitter } from "../shared";
|
|
6
6
|
export declare class BridgePlayer extends Emitter<BridgePlayerEvents> {
|
|
7
7
|
bridge: Bridge;
|
|
8
8
|
player: Player;
|
|
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.BridgePlayer = void 0;
|
|
4
4
|
const protocol_1 = require("@serenityjs/protocol");
|
|
5
5
|
const client_1 = require("../client");
|
|
6
|
-
const
|
|
7
|
-
class BridgePlayer extends
|
|
6
|
+
const shared_1 = require("../shared");
|
|
7
|
+
class BridgePlayer extends shared_1.Emitter {
|
|
8
8
|
constructor(player, bridge) {
|
|
9
9
|
super();
|
|
10
10
|
this.player = player;
|
|
@@ -32,7 +32,7 @@ class BridgePlayer extends libs_1.Emitter {
|
|
|
32
32
|
this.player.on("DisconnectPacket", (packet) => this.bridge.disconnect(this));
|
|
33
33
|
this.on("clientBound-DisconnectPacket", (signal) => this.bridge.disconnect(this));
|
|
34
34
|
this.on("serverBound-DisconnectPacket", (signal) => this.bridge.disconnect(this));
|
|
35
|
-
this.
|
|
35
|
+
this.bridge.on("disconnect", () => this.bridge.disconnect(this));
|
|
36
36
|
this.client.connect();
|
|
37
37
|
}
|
|
38
38
|
handlePacket(rawBuffer, clientBound) {
|
package/dist/bridge/bridge.d.ts
CHANGED
package/dist/bridge/bridge.js
CHANGED
|
@@ -19,8 +19,8 @@ class Bridge extends server_1.Server {
|
|
|
19
19
|
// @ts-ignore
|
|
20
20
|
this.on("playerConnect", (player) => {
|
|
21
21
|
const bridgePlayer = new bridge_player_1.BridgePlayer(player, this);
|
|
22
|
-
console.log(`Player ${player.connection.
|
|
23
|
-
const key = `${player.connection.
|
|
22
|
+
console.log(`Player ${player.connection.getAddress().address} connected to bridge`);
|
|
23
|
+
const key = `${player.connection.getAddress().address}:${player.connection.getAddress().port}`;
|
|
24
24
|
this.clients.set(key, bridgePlayer);
|
|
25
25
|
this.emit("connect", bridgePlayer);
|
|
26
26
|
});
|
|
@@ -33,7 +33,7 @@ class Bridge extends server_1.Server {
|
|
|
33
33
|
disconnect.reason = protocol_1.DisconnectReason.LegacyDisconnect;
|
|
34
34
|
player.client.send(disconnect.serialize());
|
|
35
35
|
this.emit("disconnect", player);
|
|
36
|
-
const key = `${player.player.connection.
|
|
36
|
+
const key = `${player.player.connection.getAddress().address}:${player.player.connection.getAddress().port}`;
|
|
37
37
|
this.clients.delete(key);
|
|
38
38
|
this.onDisconnect(player.player);
|
|
39
39
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type * as Protocol from "@serenityjs/protocol";
|
|
2
|
-
import type { PacketNames } from "../../types";
|
|
2
|
+
import type { PacketNames } from "../../shared/types";
|
|
3
3
|
export type BridgeEventSignal = {
|
|
4
4
|
packet: InstanceType<(typeof Protocol)[PacketNames]>;
|
|
5
5
|
cancelled: boolean;
|
package/dist/client/client.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Client as RaknetClient, ConnectionStatus } from "@sanctumterra/raknet";
|
|
2
2
|
import { DataPacket, type StartGamePacket } from "@serenityjs/protocol";
|
|
3
|
-
import { Emitter, PacketCompressor, PacketEncryptor, type Profile } from "../
|
|
3
|
+
import { Emitter, PacketCompressor, PacketEncryptor, type Profile } from "../shared";
|
|
4
4
|
import { ClientData, type ClientEvents, type ClientOptions } from "./types";
|
|
5
5
|
import { WorkerClient } from "./worker";
|
|
6
6
|
export declare class Client extends Emitter<ClientEvents> {
|
|
@@ -21,7 +21,7 @@ export declare class Client extends Emitter<ClientEvents> {
|
|
|
21
21
|
/** Client Data for auth and login. */
|
|
22
22
|
data: ClientData;
|
|
23
23
|
/** Client status in this attempted connection */
|
|
24
|
-
status:
|
|
24
|
+
status: ConnectionStatus;
|
|
25
25
|
/** Packet Compression (class for simplicfication) */
|
|
26
26
|
packetCompressor: PacketCompressor;
|
|
27
27
|
/** Packet Encryptor (class for simplification) */
|
|
@@ -36,7 +36,7 @@ export declare class Client extends Emitter<ClientEvents> {
|
|
|
36
36
|
cancelPastLogin: boolean;
|
|
37
37
|
constructor(options: Partial<ClientOptions>);
|
|
38
38
|
/** Connect to the server and start sending/receiving packets. */
|
|
39
|
-
connect(): Promise<[
|
|
39
|
+
connect(): Promise<[StartGamePacket]>;
|
|
40
40
|
private handleEncapsulated;
|
|
41
41
|
/**
|
|
42
42
|
* Packets must be decompressed and decrypted already
|
package/dist/client/client.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Client = void 0;
|
|
4
|
+
const node_crypto_1 = require("node:crypto");
|
|
4
5
|
const raknet_1 = require("@sanctumterra/raknet");
|
|
5
6
|
const protocol_1 = require("@serenityjs/protocol");
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const types_1 = require("../types");
|
|
7
|
+
const shared_1 = require("../shared");
|
|
8
|
+
const types_1 = require("../shared/types");
|
|
9
9
|
const types_2 = require("./types");
|
|
10
10
|
const worker_1 = require("./worker");
|
|
11
|
-
class Client extends
|
|
11
|
+
class Client extends shared_1.Emitter {
|
|
12
12
|
constructor(options) {
|
|
13
13
|
super();
|
|
14
14
|
this.options = { ...types_2.defaultClientOptions, ...options };
|
|
@@ -20,7 +20,7 @@ class Client extends libs_1.Emitter {
|
|
|
20
20
|
this._compressionEnabled = false;
|
|
21
21
|
this._encryptionEnabled = false;
|
|
22
22
|
/** Client status */
|
|
23
|
-
this.status = raknet_1.
|
|
23
|
+
this.status = raknet_1.ConnectionStatus.Disconnected;
|
|
24
24
|
/** worker or not. */
|
|
25
25
|
this.raknet = this.options.worker
|
|
26
26
|
? new worker_1.WorkerClient({
|
|
@@ -39,20 +39,13 @@ class Client extends libs_1.Emitter {
|
|
|
39
39
|
this.once("session", () => {
|
|
40
40
|
this.sessionReady = true;
|
|
41
41
|
});
|
|
42
|
-
this.options.offline ? (0,
|
|
42
|
+
this.options.offline ? (0, shared_1.createOfflineSession)(this) : (0, shared_1.authenticate)(this);
|
|
43
43
|
}
|
|
44
44
|
/** Connect to the server and start sending/receiving packets. */
|
|
45
45
|
async connect() {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
An attempt to recover incase the error was not fatal.
|
|
50
|
-
If it was fatal we will get a differetnt error anyway. So dont judge me!
|
|
51
|
-
*/
|
|
52
|
-
return null;
|
|
53
|
-
});
|
|
54
|
-
this.status = raknet_1.Status.Connecting;
|
|
55
|
-
this.packetCompressor = new libs_1.PacketCompressor(this);
|
|
46
|
+
await this.raknet.connect();
|
|
47
|
+
this.status = raknet_1.ConnectionStatus.Connecting;
|
|
48
|
+
this.packetCompressor = new shared_1.PacketCompressor(this);
|
|
56
49
|
this.handleGamePackets();
|
|
57
50
|
this.raknet.on("encapsulated", this.handleEncapsulated.bind(this));
|
|
58
51
|
const request = new protocol_1.RequestNetworkSettingsPacket();
|
|
@@ -60,7 +53,7 @@ class Client extends libs_1.Emitter {
|
|
|
60
53
|
this.send(request);
|
|
61
54
|
return new Promise((resolve, rejevt) => {
|
|
62
55
|
this.once("SetLocalPlayerAsInitializedPacket", (packet) => {
|
|
63
|
-
resolve([
|
|
56
|
+
resolve([this.startGameData]);
|
|
64
57
|
});
|
|
65
58
|
});
|
|
66
59
|
}
|
|
@@ -179,13 +172,13 @@ class Client extends libs_1.Emitter {
|
|
|
179
172
|
}
|
|
180
173
|
});
|
|
181
174
|
this.on("DisconnectPacket", (packet) => {
|
|
182
|
-
this.status = raknet_1.
|
|
175
|
+
this.status = raknet_1.ConnectionStatus.Disconnected;
|
|
183
176
|
this.raknet.disconnect();
|
|
184
177
|
console.log(packet.message);
|
|
185
178
|
});
|
|
186
179
|
}
|
|
187
180
|
startEncryption(iv) {
|
|
188
|
-
this.packetEncryptor = new
|
|
181
|
+
this.packetEncryptor = new shared_1.PacketEncryptor(this, iv);
|
|
189
182
|
this._encryptionEnabled = true;
|
|
190
183
|
}
|
|
191
184
|
async waitForSessionReady() {
|
|
@@ -193,27 +186,24 @@ class Client extends libs_1.Emitter {
|
|
|
193
186
|
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
194
187
|
}
|
|
195
188
|
}
|
|
196
|
-
sendPacket(packet, priority = raknet_1.Priority.
|
|
189
|
+
sendPacket(packet, priority = raknet_1.Priority.High) {
|
|
197
190
|
try {
|
|
198
|
-
if (this.status === raknet_1.
|
|
191
|
+
if (this.status === raknet_1.ConnectionStatus.Disconnected)
|
|
199
192
|
return;
|
|
200
193
|
const serialized = packet instanceof protocol_1.DataPacket ? packet.serialize() : packet;
|
|
201
194
|
const compressed = this.packetCompressor.compress(serialized, this.options.compressionMethod);
|
|
202
|
-
|
|
203
|
-
frame.orderChannel = 0;
|
|
204
|
-
frame.payload = compressed;
|
|
205
|
-
this.raknet.sendFrame(frame, priority);
|
|
195
|
+
this.raknet.frameAndSend(compressed, priority);
|
|
206
196
|
}
|
|
207
197
|
catch (error) {
|
|
208
198
|
raknet_1.Logger.error(`Failed to send packet ${packet instanceof protocol_1.DataPacket ? packet.constructor.name : "Buffer"}`, error);
|
|
209
199
|
}
|
|
210
200
|
}
|
|
211
201
|
send(packet) {
|
|
212
|
-
this.sendPacket(packet, raknet_1.Priority.
|
|
202
|
+
this.sendPacket(packet, raknet_1.Priority.High);
|
|
213
203
|
}
|
|
214
204
|
queue(packet) {
|
|
215
205
|
raknet_1.Logger.debug(`Queueing packet ${packet instanceof protocol_1.DataPacket ? packet.constructor.name : "Buffer"}`);
|
|
216
|
-
this.sendPacket(packet, raknet_1.Priority.
|
|
206
|
+
this.sendPacket(packet, raknet_1.Priority.High);
|
|
217
207
|
}
|
|
218
208
|
}
|
|
219
209
|
exports.Client = Client;
|
|
@@ -40,7 +40,7 @@ const jose = __importStar(require("jose"));
|
|
|
40
40
|
const node_crypto_1 = require("node:crypto");
|
|
41
41
|
const uuid_1345_1 = require("uuid-1345");
|
|
42
42
|
const __1 = require("../");
|
|
43
|
-
const types_1 = require("../../types");
|
|
43
|
+
const types_1 = require("../../shared/types");
|
|
44
44
|
const login_data_1 = require("./login-data");
|
|
45
45
|
const PUBLIC_KEY = "MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAECRXueJeTDqNRRgJi/vlRufByu/2G0i2Ebt6YMar5QX/R0DIIyrJMcUpruK4QveTfJSTp3Shlq4Gk34cD/4GUWwkv0DVuzeuB+tXija7HBxii03NHDbPAD0AKnLr2wdAp";
|
|
46
46
|
const algorithm = "ES384";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Advertisement } from "@sanctumterra/raknet";
|
|
2
2
|
import type * as Protocol from "@serenityjs/protocol";
|
|
3
|
-
import type { PacketNames } from "../../types";
|
|
3
|
+
import type { PacketNames } from "../../shared/types";
|
|
4
4
|
type ClientEvents = {
|
|
5
5
|
[K in PacketNames]: [packet: InstanceType<(typeof Protocol)[K]>];
|
|
6
6
|
} & {
|
|
@@ -35,7 +35,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.createDefaultPayload = void 0;
|
|
37
37
|
const protocol_1 = require("@serenityjs/protocol");
|
|
38
|
-
const types_1 = require("../../types");
|
|
38
|
+
const types_1 = require("../../shared/types");
|
|
39
39
|
const client_data_1 = require("./client-data");
|
|
40
40
|
const skin = __importStar(require("./skin/Skin.json"));
|
|
41
41
|
const createDefaultPayload = (client) => {
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type ClientEvents, type ClientOptions, type Frame, Priority, EventEmitter as Emitter } from "@sanctumterra/raknet";
|
|
2
2
|
import type { Worker } from "node:worker_threads";
|
|
3
|
-
import { Emitter } from "../../libs/emitter";
|
|
4
3
|
declare class WorkerClient extends Emitter<ClientEvents> {
|
|
5
4
|
private _worker;
|
|
6
5
|
private _options;
|
|
@@ -8,7 +7,7 @@ declare class WorkerClient extends Emitter<ClientEvents> {
|
|
|
8
7
|
constructor(options: Partial<ClientOptions>);
|
|
9
8
|
get worker(): Worker | undefined;
|
|
10
9
|
private handleEvents;
|
|
11
|
-
connect(): Promise<
|
|
10
|
+
connect(): Promise<unknown>;
|
|
12
11
|
dispose(): void;
|
|
13
12
|
disconnect(): void;
|
|
14
13
|
cleanup(): void;
|
|
@@ -2,9 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.WorkerClient = void 0;
|
|
4
4
|
const raknet_1 = require("@sanctumterra/raknet");
|
|
5
|
-
const emitter_1 = require("../../libs/emitter");
|
|
6
5
|
const worker_1 = require("./worker");
|
|
7
|
-
class WorkerClient extends
|
|
6
|
+
class WorkerClient extends raknet_1.EventEmitter {
|
|
8
7
|
constructor(options) {
|
|
9
8
|
super();
|
|
10
9
|
this._options = { ...raknet_1.defaultClientOptions, ...options };
|
|
@@ -89,12 +88,12 @@ class WorkerClient extends emitter_1.Emitter {
|
|
|
89
88
|
this._worker?.postMessage({ type: "cleanup" });
|
|
90
89
|
this._worker = undefined;
|
|
91
90
|
}
|
|
92
|
-
frameAndSend(payload, priority = raknet_1.Priority.
|
|
91
|
+
frameAndSend(payload, priority = raknet_1.Priority.High) {
|
|
93
92
|
if (!this._worker)
|
|
94
93
|
return;
|
|
95
94
|
this._worker.postMessage({ type: "frameAndSend", payload, priority });
|
|
96
95
|
}
|
|
97
|
-
sendFrame(frame, priority = raknet_1.Priority.
|
|
96
|
+
sendFrame(frame, priority = raknet_1.Priority.High) {
|
|
98
97
|
if (!this._worker)
|
|
99
98
|
return;
|
|
100
99
|
this._worker.postMessage({ type: "sendFrame", frame, priority });
|
|
@@ -13,30 +13,17 @@ function connect(options) {
|
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
let client;
|
|
16
|
-
function cleanup() {
|
|
17
|
-
if (client) {
|
|
18
|
-
try {
|
|
19
|
-
client.removeAll();
|
|
20
|
-
}
|
|
21
|
-
catch (error) {
|
|
22
|
-
raknet_1.Logger.error(`Cleanup error: ${error}`);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
16
|
function main() {
|
|
27
17
|
if (!node_worker_threads_1.parentPort) {
|
|
28
18
|
raknet_1.Logger.error("Parent port is null");
|
|
29
19
|
return;
|
|
30
20
|
}
|
|
31
|
-
process.on("exit", cleanup);
|
|
32
21
|
process.on("SIGINT", () => {
|
|
33
|
-
cleanup();
|
|
34
22
|
process.exit(0);
|
|
35
23
|
});
|
|
36
24
|
node_worker_threads_1.parentPort.on("message", async (evt) => {
|
|
37
25
|
try {
|
|
38
26
|
if (evt.type === "connect") {
|
|
39
|
-
cleanup();
|
|
40
27
|
client = new raknet_1.Client(evt.options);
|
|
41
28
|
client.on("error", (error) => {
|
|
42
29
|
if (!node_worker_threads_1.parentPort)
|
|
@@ -88,7 +75,7 @@ function main() {
|
|
|
88
75
|
frame.reliability = evt.frame.reliability;
|
|
89
76
|
frame.reliableFrameIndex = evt.frame.reliableFrameIndex;
|
|
90
77
|
frame.sequenceFrameIndex = evt.frame.sequenceFrameIndex;
|
|
91
|
-
frame.
|
|
78
|
+
frame.splitSize = evt.frame.splitSize;
|
|
92
79
|
frame.splitFrameIndex = evt.frame.splitFrameIndex;
|
|
93
80
|
frame.splitId = evt.frame.splitId;
|
|
94
81
|
client.sendFrame(frame, evt.priority);
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
|
@@ -17,5 +17,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
17
17
|
__exportStar(require("./client"), exports);
|
|
18
18
|
__exportStar(require("./server"), exports);
|
|
19
19
|
__exportStar(require("./bridge"), exports);
|
|
20
|
-
__exportStar(require("./
|
|
21
|
-
__exportStar(require("./types"), exports);
|
|
20
|
+
__exportStar(require("./shared"), exports);
|
package/dist/server/player.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { type Connection,
|
|
1
|
+
import { type Connection, ConnectionStatus } from "@sanctumterra/raknet";
|
|
2
2
|
import { DataPacket } from "@serenityjs/protocol";
|
|
3
|
-
import { type ClientOptions, type LoginData, type Payload } from "../client";
|
|
4
|
-
import {
|
|
3
|
+
import { type ClientOptions, type LoginData, type Payload } from "../client/types";
|
|
4
|
+
import { PacketCompressor, PacketEncryptor } from "../shared";
|
|
5
5
|
import type { Server } from "./server";
|
|
6
6
|
import type { PlayerEvents } from "./types";
|
|
7
|
+
import { Emitter } from "../shared";
|
|
7
8
|
export declare class Player extends Emitter<PlayerEvents> {
|
|
8
9
|
packetCompressor: PacketCompressor;
|
|
9
10
|
packetEncryptor: PacketEncryptor;
|
|
@@ -11,7 +12,7 @@ export declare class Player extends Emitter<PlayerEvents> {
|
|
|
11
12
|
_encryptionEnabled: boolean;
|
|
12
13
|
iv: Buffer;
|
|
13
14
|
secretKeyBytes: Buffer;
|
|
14
|
-
status:
|
|
15
|
+
status: ConnectionStatus;
|
|
15
16
|
loginData: LoginData;
|
|
16
17
|
sharedSecret: Buffer;
|
|
17
18
|
server: Server;
|
package/dist/server/player.js
CHANGED
|
@@ -38,18 +38,19 @@ const raknet_1 = require("@sanctumterra/raknet");
|
|
|
38
38
|
const protocol_1 = require("@serenityjs/protocol");
|
|
39
39
|
const jose = __importStar(require("jose"));
|
|
40
40
|
const node_crypto_1 = require("node:crypto");
|
|
41
|
-
const
|
|
42
|
-
const
|
|
43
|
-
const
|
|
41
|
+
const types_1 = require("../client/types");
|
|
42
|
+
const shared_1 = require("../shared");
|
|
43
|
+
const types_2 = require("../shared/types");
|
|
44
|
+
const shared_2 = require("../shared");
|
|
44
45
|
const SALT = "🧂";
|
|
45
46
|
const SALT_BUFFER = Buffer.from(SALT);
|
|
46
|
-
class Player extends
|
|
47
|
+
class Player extends shared_2.Emitter {
|
|
47
48
|
constructor(server, connection) {
|
|
48
49
|
super();
|
|
49
|
-
this.status = raknet_1.
|
|
50
|
+
this.status = raknet_1.ConnectionStatus.Disconnected;
|
|
50
51
|
this.connection = connection;
|
|
51
52
|
this.server = server;
|
|
52
|
-
this.options =
|
|
53
|
+
this.options = types_1.defaultClientOptions;
|
|
53
54
|
this._compressionEnabled = false;
|
|
54
55
|
this._encryptionEnabled = false;
|
|
55
56
|
this.options.compressionMethod = this.server.options.compressionMethod;
|
|
@@ -87,9 +88,9 @@ class Player extends libs_1.Emitter {
|
|
|
87
88
|
this.processPacket(packet);
|
|
88
89
|
}
|
|
89
90
|
}
|
|
90
|
-
sendPacket(packet, priority = raknet_1.Priority.
|
|
91
|
+
sendPacket(packet, priority = raknet_1.Priority.High) {
|
|
91
92
|
try {
|
|
92
|
-
if (this.status === raknet_1.
|
|
93
|
+
if (this.status === raknet_1.ConnectionStatus.Disconnected)
|
|
93
94
|
return;
|
|
94
95
|
const serialized = packet instanceof protocol_1.DataPacket ? packet.serialize() : packet;
|
|
95
96
|
const compressed = this.packetCompressor.compress(serialized, this.options.compressionMethod);
|
|
@@ -103,25 +104,25 @@ class Player extends libs_1.Emitter {
|
|
|
103
104
|
}
|
|
104
105
|
}
|
|
105
106
|
send(packet) {
|
|
106
|
-
this.sendPacket(packet, raknet_1.Priority.
|
|
107
|
+
this.sendPacket(packet, raknet_1.Priority.High);
|
|
107
108
|
}
|
|
108
109
|
queue(packet) {
|
|
109
110
|
raknet_1.Logger.debug(`Queueing packet ${packet instanceof protocol_1.DataPacket ? packet.constructor.name : "Buffer"}`);
|
|
110
|
-
this.sendPacket(packet, raknet_1.Priority.
|
|
111
|
+
this.sendPacket(packet, raknet_1.Priority.Medium);
|
|
111
112
|
}
|
|
112
113
|
startEncryption(iv) {
|
|
113
114
|
if (!this.packetEncryptor) {
|
|
114
|
-
this.packetEncryptor = new
|
|
115
|
+
this.packetEncryptor = new shared_1.PacketEncryptor(this, iv);
|
|
115
116
|
this._encryptionEnabled = true;
|
|
116
117
|
}
|
|
117
118
|
}
|
|
118
119
|
prepare() {
|
|
119
|
-
this.loginData = (0,
|
|
120
|
-
this.packetCompressor = new
|
|
120
|
+
this.loginData = (0, types_1.prepareLoginData)();
|
|
121
|
+
this.packetCompressor = new shared_1.PacketCompressor(this);
|
|
121
122
|
// this.packetEncryptor = new PacketEncryptor(this);
|
|
122
123
|
this.connection.on("encapsulated", this.onEncapsulated.bind(this));
|
|
123
124
|
this.on("RequestNetworkSettingsPacket", (packet) => {
|
|
124
|
-
this.status = raknet_1.
|
|
125
|
+
this.status = raknet_1.ConnectionStatus.Connecting;
|
|
125
126
|
const settings = new protocol_1.NetworkSettingsPacket();
|
|
126
127
|
settings.compressionThreshold = this.server.options.compressionThreshold;
|
|
127
128
|
settings.clientScalar = 0;
|
|
@@ -133,7 +134,7 @@ class Player extends libs_1.Emitter {
|
|
|
133
134
|
});
|
|
134
135
|
this.on("LoginPacket", async (packet) => {
|
|
135
136
|
// TODO! Verify JWT.
|
|
136
|
-
const { key, data, skin } = await (0,
|
|
137
|
+
const { key, data, skin } = await (0, shared_2.decodeLoginJWT)(packet.tokens, types_2.CurrentVersionConst);
|
|
137
138
|
if (data === null) {
|
|
138
139
|
return;
|
|
139
140
|
}
|
|
@@ -145,7 +146,7 @@ class Player extends libs_1.Emitter {
|
|
|
145
146
|
format: "der",
|
|
146
147
|
type: "spki",
|
|
147
148
|
});
|
|
148
|
-
this.sharedSecret =
|
|
149
|
+
this.sharedSecret = types_1.ClientData.createSharedSecret(this.loginData.ecdhKeyPair.privateKey, pubKeyDer);
|
|
149
150
|
const secretHash = (0, node_crypto_1.createHash)("sha256")
|
|
150
151
|
.update(SALT_BUFFER)
|
|
151
152
|
.update(this.sharedSecret);
|
package/dist/server/server.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type Connection, Server as RaknetServer } from "@sanctumterra/raknet";
|
|
2
|
-
import { Emitter } from "../libs";
|
|
3
2
|
import { Player } from "./player";
|
|
4
3
|
import { type ServerEvents, type ServerOptions } from "./types";
|
|
4
|
+
import { Emitter } from "src/shared";
|
|
5
5
|
export declare class Server extends Emitter<ServerEvents> {
|
|
6
6
|
options: ServerOptions;
|
|
7
7
|
raknet: RaknetServer;
|
package/dist/server/server.js
CHANGED
|
@@ -3,16 +3,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Server = void 0;
|
|
4
4
|
const raknet_1 = require("@sanctumterra/raknet");
|
|
5
5
|
const protocol_1 = require("@serenityjs/protocol");
|
|
6
|
-
const libs_1 = require("../libs");
|
|
7
6
|
const player_1 = require("./player");
|
|
8
7
|
const types_1 = require("./types");
|
|
9
|
-
|
|
8
|
+
const shared_1 = require("src/shared");
|
|
9
|
+
class Server extends shared_1.Emitter {
|
|
10
10
|
constructor(options) {
|
|
11
11
|
super();
|
|
12
12
|
this.players = new Map();
|
|
13
13
|
this.options = { ...types_1.defaultServerOptions, ...options };
|
|
14
14
|
this.raknet = new raknet_1.Server({
|
|
15
|
-
|
|
15
|
+
address: this.options.address,
|
|
16
16
|
port: this.options.port,
|
|
17
17
|
motd: this.options.motd,
|
|
18
18
|
tickRate: this.options.tickRate,
|
|
@@ -44,7 +44,7 @@ class Server extends libs_1.Emitter {
|
|
|
44
44
|
const { address, port } = connection.getAddress();
|
|
45
45
|
raknet_1.Logger.info(`Session received from: ${address}:${port}`);
|
|
46
46
|
});
|
|
47
|
-
this.raknet.
|
|
47
|
+
this.raknet.listen();
|
|
48
48
|
}
|
|
49
49
|
onDisconnect(player) {
|
|
50
50
|
const key = this.getConKey(player.connection);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { LoginTokens } from "@serenityjs/protocol";
|
|
2
2
|
import * as jose from "jose";
|
|
3
|
-
import { type ProtocolList } from "
|
|
3
|
+
import { type ProtocolList } from "./types";
|
|
4
4
|
import type { Client } from "../client/client";
|
|
5
5
|
export interface Profile {
|
|
6
6
|
name: string;
|
|
@@ -43,7 +43,7 @@ const jose = __importStar(require("jose"));
|
|
|
43
43
|
const node_crypto_1 = require("node:crypto");
|
|
44
44
|
const prismarine_auth_1 = require("prismarine-auth");
|
|
45
45
|
const uuid_1345_1 = require("uuid-1345");
|
|
46
|
-
const
|
|
46
|
+
const types_1 = require("./types");
|
|
47
47
|
exports.UUID_NAMESPACE = "6ba7b811-9dad-11d1-80b4-00c04fd430c8";
|
|
48
48
|
const PUBLIC_KEY = "MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAECRXueJeTDqNRRgJi/vlRufByu/2G0i2Ebt6YMar5QX/R0DIIyrJMcUpruK4QveTfJSTp3Shlq4Gk34cD/4GUWwkv0DVuzeuB+tXija7HBxii03NHDbPAD0AKnLr2wdAp";
|
|
49
49
|
async function createOfflineSession(client) {
|
|
@@ -208,7 +208,7 @@ const decodeLoginJWT = async (tokens, version) => {
|
|
|
208
208
|
const client = tokens.client;
|
|
209
209
|
const payload = JSON.parse(identity);
|
|
210
210
|
let ClientUserChain = [];
|
|
211
|
-
if ((0,
|
|
211
|
+
if ((0, types_1.versionHigherThan)(version, "1.21.80")) {
|
|
212
212
|
if (!payload.Certificate) {
|
|
213
213
|
raknet_1.Logger.error("No certificate found in identity, possible version mismatch!");
|
|
214
214
|
return { key: null, data: null, skin: null };
|
|
@@ -15,6 +15,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./auth"), exports);
|
|
18
|
+
__exportStar(require("./types"), exports);
|
|
18
19
|
__exportStar(require("./emitter"), exports);
|
|
19
20
|
__exportStar(require("./packet-compressor"), exports);
|
|
20
21
|
__exportStar(require("./packet-encryptor"), exports);
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "baltica",
|
|
3
3
|
"description": "Library for Minecraft Bedrock Edition community developers.",
|
|
4
|
-
"version": "0.1.
|
|
4
|
+
"version": "0.1.10",
|
|
5
5
|
"minecraft": "1.21.100",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"license": "MIT",
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
}
|
|
22
22
|
],
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@sanctumterra/raknet": "^1.
|
|
24
|
+
"@sanctumterra/raknet": "^1.4.0",
|
|
25
25
|
"@serenityjs/binarystream": "^3.0.10",
|
|
26
26
|
"@serenityjs/protocol": "^0.8.7",
|
|
27
27
|
"jose": "^5.10.0",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|