Improve library
This commit is contained in:
12
src/index.ts
12
src/index.ts
@@ -1,9 +1,9 @@
|
||||
export { numberToUint16BE, numberToUint32BE } from "./utilities/number";
|
||||
export { unpackIncomingPacket } from "./messages/packet";
|
||||
export { packers, unpackers } from "./mapping";
|
||||
export { MessageTypes } from "./common";
|
||||
export { IncomingPacket, OutgoingPacket } from "./messages/packet";
|
||||
export { SubscribeMessage } from "./messages/subscribe";
|
||||
export { BasicMessage } from "./messages/basic";
|
||||
export { UserDataRequestMessage } from "./messages/userDataRequest";
|
||||
export { UserDataResponseMessage } from "./messages/userDataResponse";
|
||||
export type { MessageTypes } from "./common";
|
||||
export type { IncomingPacket, OutgoingPacket } from "./messages/packet";
|
||||
export type { SubscribeMessage } from "./messages/subscribe";
|
||||
export type { BasicMessage } from "./messages/basic";
|
||||
export type { UserDataRequestMessage } from "./messages/userDataRequest";
|
||||
export type { UserDataResponseMessage } from "./messages/userDataResponse";
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { encrypt } from "romulus-js";
|
||||
import { encrypt, decrypt } from "romulus-js";
|
||||
import { DEFAULT_KEY, MessageTypes } from "../common";
|
||||
import { numberToUint16BE } from "../utilities/number";
|
||||
import { packOutgoingPacket } from "./packet";
|
||||
@@ -28,9 +28,17 @@ export function packBasicMessage(
|
||||
|
||||
/**
|
||||
* Unpack the data section of an incoming basic message (0x0001) message.
|
||||
* @param data The data section of an incoming basic message (0x0001) message.
|
||||
* @returns An encrypted unpacked basic message (0x0001) message.
|
||||
* @param data The encrypted data section of an incoming basic message (0x0001) message.
|
||||
* @param key The key to decrypt the data with.
|
||||
* @returns The decrypted plaintext message.
|
||||
*/
|
||||
export function unpackBasicMessage(data: Uint8Array): Uint8Array {
|
||||
return data;
|
||||
export function unpackBasicMessage(
|
||||
data: Uint8Array,
|
||||
key: Uint8Array = DEFAULT_KEY,
|
||||
): Uint8Array {
|
||||
const result = decrypt(data, MESSAGE_TYPE, key);
|
||||
if (result.success) {
|
||||
return result.plaintext;
|
||||
}
|
||||
throw new Error("Failed to decrypt basic message");
|
||||
}
|
||||
|
||||
@@ -5,12 +5,11 @@ import { packOutgoingPacket } from "./packet";
|
||||
const MESSAGE_TYPE = numberToUint16BE(MessageTypes.GetHistory);
|
||||
|
||||
/**
|
||||
* Create an outgoing keepalive (0x0005) packet.
|
||||
* @returns An outgoing keepalive (0x0005) packet.
|
||||
* Create an outgoing get history (0xfffe) packet.
|
||||
* @returns An outgoing get history (0xfffe) packet.
|
||||
*/
|
||||
export function packGetHistoryMessage(): Uint8Array {
|
||||
return packOutgoingPacket({
|
||||
messageType: MESSAGE_TYPE,
|
||||
data: new Uint8Array(0),
|
||||
});
|
||||
}
|
||||
|
||||
@@ -11,6 +11,5 @@ const MESSAGE_TYPE = numberToUint16BE(MessageTypes.Keepalive);
|
||||
export function packKeepaliveMessage(): Uint8Array {
|
||||
return packOutgoingPacket({
|
||||
messageType: MESSAGE_TYPE,
|
||||
data: new Uint8Array(0),
|
||||
});
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ export interface IncomingPacket {
|
||||
|
||||
export interface OutgoingPacket {
|
||||
messageType: Uint8Array;
|
||||
data: Uint8Array;
|
||||
data?: Uint8Array;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -19,18 +19,21 @@ export interface OutgoingPacket {
|
||||
* @returns A buffer containing the ready-to-send packet.
|
||||
*/
|
||||
export function packOutgoingPacket(outgoingPacket: OutgoingPacket): Uint8Array {
|
||||
// Default to empty data if not provided
|
||||
const data = outgoingPacket.data ?? new Uint8Array(0);
|
||||
|
||||
// Verify that the data does not exceed the maximum data length.
|
||||
if (outgoingPacket.data.length > MAX_DATA_LENGTH) {
|
||||
if (data.length > MAX_DATA_LENGTH) {
|
||||
throw RangeError(
|
||||
`Specified data of length ${outgoingPacket.data.length} exceeds max data length ${MAX_DATA_LENGTH}.`,
|
||||
`Specified data of length ${data.length} exceeds max data length ${MAX_DATA_LENGTH}.`,
|
||||
);
|
||||
}
|
||||
|
||||
// Prepare the outgoing packet.
|
||||
const buffer = new SmartBuffer();
|
||||
buffer.writeBytes(outgoingPacket.messageType);
|
||||
buffer.writeBytes(numberToUint16BE(outgoingPacket.data.length));
|
||||
buffer.writeBytes(outgoingPacket.data);
|
||||
buffer.writeBytes(numberToUint16BE(data.length));
|
||||
buffer.writeBytes(data);
|
||||
|
||||
return buffer.data;
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ export function unpackUserDataRequestMessage(
|
||||
data: Uint8Array,
|
||||
): UserDataRequestMessage {
|
||||
// Unpack and read data in correct format.
|
||||
const packedData = SmartBuffer.from(data);
|
||||
const packedData = SmartBuffer.from(Array.from(data));
|
||||
|
||||
const usernameLength = packedData.readUInt16();
|
||||
const username = packedData.readBytes(usernameLength);
|
||||
|
||||
@@ -59,7 +59,7 @@ export function unpackUserDataResponseMessage(
|
||||
data: Uint8Array,
|
||||
): UserDataResponseMessage {
|
||||
// Unpack and read data in correct format.
|
||||
const packedData = SmartBuffer.from(data);
|
||||
const packedData = SmartBuffer.from(Array.from(data));
|
||||
|
||||
const usernameLength = packedData.readUInt16();
|
||||
const username = packedData.readBytes(usernameLength);
|
||||
|
||||
Reference in New Issue
Block a user