@vaitosoi/minejs 0.3.1 → 0.4.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 +5 -8
- package/assets/minecraft/26.2/packets.json +27 -10
- package/dist/base/buffer.d.ts +2 -0
- package/dist/base/buffer.d.ts.map +1 -0
- package/dist/base/buffer.js +12 -0
- package/dist/base/buffer.js.map +1 -0
- package/dist/base/error.d.ts +33 -6
- package/dist/base/error.d.ts.map +1 -1
- package/dist/base/error.js +74 -11
- package/dist/base/error.js.map +1 -1
- package/dist/base/http.d.ts +2 -0
- package/dist/base/http.d.ts.map +1 -0
- package/dist/base/http.js +14 -0
- package/dist/base/http.js.map +1 -0
- package/dist/base/math.d.ts +22 -1
- package/dist/base/math.d.ts.map +1 -1
- package/dist/base/math.js +49 -2
- package/dist/base/math.js.map +1 -1
- package/dist/client/auth.d.ts +41 -7
- package/dist/client/auth.d.ts.map +1 -1
- package/dist/client/auth.js +96 -39
- package/dist/client/auth.js.map +1 -1
- package/dist/client/client.d.ts +50 -5
- package/dist/client/client.d.ts.map +1 -1
- package/dist/client/client.js +47 -18
- package/dist/client/client.js.map +1 -1
- package/dist/client/tcp.d.ts +1 -5
- package/dist/client/tcp.d.ts.map +1 -1
- package/dist/client/tcp.js +8 -21
- package/dist/client/tcp.js.map +1 -1
- package/dist/message/link.d.ts +10 -0
- package/dist/message/link.d.ts.map +1 -0
- package/dist/message/link.js +22 -0
- package/dist/message/link.js.map +1 -0
- package/dist/message/sigCache.d.ts +13 -0
- package/dist/message/sigCache.d.ts.map +1 -0
- package/dist/message/sigCache.js +26 -0
- package/dist/message/sigCache.js.map +1 -0
- package/dist/packet/decoder.d.ts +13 -0
- package/dist/packet/decoder.d.ts.map +1 -1
- package/dist/packet/decoder.js +21 -0
- package/dist/packet/decoder.js.map +1 -1
- package/dist/packet/dispatcher.d.ts +8 -1
- package/dist/packet/dispatcher.d.ts.map +1 -1
- package/dist/packet/dispatcher.js +142 -30
- package/dist/packet/dispatcher.js.map +1 -1
- package/dist/physics/player.d.ts +17 -23
- package/dist/physics/player.d.ts.map +1 -1
- package/dist/physics/player.js +59 -61
- package/dist/physics/player.js.map +1 -1
- package/dist/version/codec.d.ts.map +1 -1
- package/dist/version/codec.js +28 -7
- package/dist/version/codec.js.map +1 -1
- package/dist/version/registry.d.ts +1 -1
- package/dist/version/registry.d.ts.map +1 -1
- package/dist/version/registry.js +2 -7
- package/dist/version/registry.js.map +1 -1
- package/dist/world/state.d.ts +26 -2
- package/dist/world/state.d.ts.map +1 -1
- package/dist/world/state.js +58 -3
- package/dist/world/state.js.map +1 -1
- package/package.json +1 -1
- package/src/base/buffer.ts +12 -0
- package/src/base/error.ts +63 -10
- package/src/base/http.ts +10 -0
- package/src/base/math.ts +55 -3
- package/src/client/auth.ts +130 -52
- package/src/client/client.ts +96 -21
- package/src/client/tcp.ts +10 -27
- package/src/message/link.ts +17 -0
- package/src/message/sigCache.ts +25 -0
- package/src/packet/decoder.ts +21 -0
- package/src/packet/dispatcher.ts +169 -35
- package/src/physics/player.ts +83 -58
- package/src/version/codec.ts +32 -11
- package/src/version/registry.ts +2 -7
- package/src/world/state.ts +72 -4
- package/test/client/index.ts +27 -20
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/world/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/world/state.ts"],"names":[],"mappings":"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"}
|
package/dist/world/state.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.SharedState = exports.ConnectionState = exports.ClientStatus = exports.GameMode = void 0;
|
|
4
4
|
const error_1 = require("../base/error");
|
|
5
|
+
const sigCache_1 = require("../message/sigCache");
|
|
5
6
|
var GameMode;
|
|
6
7
|
(function (GameMode) {
|
|
7
8
|
GameMode[GameMode["Survival"] = 0] = "Survival";
|
|
@@ -26,23 +27,38 @@ var ConnectionState;
|
|
|
26
27
|
})(ConnectionState || (exports.ConnectionState = ConnectionState = {}));
|
|
27
28
|
class SharedState {
|
|
28
29
|
clientOptions;
|
|
29
|
-
getUuid;
|
|
30
30
|
mutationQueue = [];
|
|
31
31
|
eventQueue = [];
|
|
32
32
|
sendQueue = [];
|
|
33
33
|
state = ConnectionState.Disconnected;
|
|
34
34
|
status = ClientStatus.Disconnected;
|
|
35
35
|
compressionThreshold = 0;
|
|
36
|
+
// Auth stuffs
|
|
37
|
+
authClient = undefined;
|
|
38
|
+
playerUUID = undefined;
|
|
39
|
+
publicKey = undefined;
|
|
40
|
+
signature = undefined;
|
|
41
|
+
signatureExpireTime = undefined;
|
|
42
|
+
// eslint-disable-next-line no-undef
|
|
43
|
+
signatureTimeoutInstance = undefined;
|
|
36
44
|
sharedSecret = undefined;
|
|
37
45
|
cipher = undefined;
|
|
38
46
|
decipher = undefined;
|
|
47
|
+
useEncryption = false;
|
|
48
|
+
sessionID = undefined;
|
|
39
49
|
server = undefined;
|
|
40
50
|
registry = undefined;
|
|
41
51
|
world = null;
|
|
42
52
|
player = null;
|
|
43
|
-
|
|
53
|
+
/**
|
|
54
|
+
* For maintaining message order.
|
|
55
|
+
*
|
|
56
|
+
* A UUID map to a MessageLink.
|
|
57
|
+
*/
|
|
58
|
+
messageLinks = undefined;
|
|
59
|
+
messageSignatureCache = undefined;
|
|
60
|
+
constructor(clientOptions) {
|
|
44
61
|
this.clientOptions = clientOptions;
|
|
45
|
-
this.getUuid = getUuid;
|
|
46
62
|
}
|
|
47
63
|
isReady() {
|
|
48
64
|
return this.status === ClientStatus.Ready;
|
|
@@ -56,14 +72,53 @@ class SharedState {
|
|
|
56
72
|
this.eventQueue = [];
|
|
57
73
|
this.sendQueue = [];
|
|
58
74
|
this.state = ConnectionState.Disconnected;
|
|
75
|
+
this.status = ClientStatus.Disconnected;
|
|
59
76
|
this.compressionThreshold = 0;
|
|
77
|
+
this.authClient = undefined;
|
|
78
|
+
this.playerUUID = undefined;
|
|
79
|
+
this.publicKey = undefined;
|
|
80
|
+
this.signature = undefined;
|
|
60
81
|
this.sharedSecret = undefined;
|
|
61
82
|
this.cipher = undefined;
|
|
62
83
|
this.decipher = undefined;
|
|
84
|
+
this.useEncryption = false;
|
|
85
|
+
this.sessionID = undefined;
|
|
86
|
+
this.signatureTimeoutInstance = undefined;
|
|
63
87
|
this.server = undefined;
|
|
64
88
|
this.registry = undefined;
|
|
65
89
|
this.world = undefined;
|
|
66
90
|
this.player = undefined;
|
|
91
|
+
if (this.clientOptions.shouldVerifyMessageSignature)
|
|
92
|
+
this.messageSignatureCache = sigCache_1.SignatureCache.default();
|
|
93
|
+
else
|
|
94
|
+
this.messageSignatureCache = undefined;
|
|
95
|
+
if (this.clientOptions.shouldVerifyMessageOrder)
|
|
96
|
+
this.messageLinks = {};
|
|
97
|
+
else
|
|
98
|
+
this.messageLinks = undefined;
|
|
99
|
+
}
|
|
100
|
+
getSignature() {
|
|
101
|
+
if (this.publicKey && this.signature)
|
|
102
|
+
return {
|
|
103
|
+
publicKey: this.publicKey,
|
|
104
|
+
signature: this.signature
|
|
105
|
+
};
|
|
106
|
+
throw new error_1.AuthRelatedNotFound("public key and signature");
|
|
107
|
+
}
|
|
108
|
+
async fetchSignature() {
|
|
109
|
+
if (!this.authClient)
|
|
110
|
+
throw new error_1.AuthRelatedNotFound("instance of class AuthClient");
|
|
111
|
+
const { publicKey, signature, expiresAt } = await this.authClient.getKeyPair();
|
|
112
|
+
this.publicKey = Buffer.from(publicKey);
|
|
113
|
+
this.signature = Buffer.from(signature);
|
|
114
|
+
return expiresAt;
|
|
115
|
+
}
|
|
116
|
+
async startSignatureLoop() {
|
|
117
|
+
const expiresAt = await this.fetchSignature();
|
|
118
|
+
this.signatureTimeoutInstance = setTimeout(async () => await this.startSignatureLoop(), expiresAt - Date.now() - 10_000);
|
|
119
|
+
}
|
|
120
|
+
stopSignatureLoop() {
|
|
121
|
+
clearTimeout(this.signatureTimeoutInstance);
|
|
67
122
|
}
|
|
68
123
|
enqueueMutation(mutation) { this.mutationQueue.push(mutation); }
|
|
69
124
|
enqueuePacket(packet, data) {
|
package/dist/world/state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/world/state.ts"],"names":[],"mappings":";;;AAGA,
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/world/state.ts"],"names":[],"mappings":";;;AAGA,yCAAoE;AAIpE,kDAAqD;AA+ErD,IAAY,QAKX;AALD,WAAY,QAAQ;IAChB,+CAAY,CAAA;IACZ,+CAAY,CAAA;IACZ,iDAAa,CAAA;IACb,iDAAa,CAAA;AACjB,CAAC,EALW,QAAQ,aAAR,QAAQ,GAAR,QAAQ,QAKnB;AAoBD,IAAY,YAKX;AALD,WAAY,YAAY;IACpB,+DAAY,CAAA;IACZ,2DAAU,CAAA;IACV,uDAAQ,CAAA;IACR,iDAAK,CAAA;AACT,CAAC,EALW,YAAY,aAAZ,YAAY,GAAZ,YAAY,QAKvB;AAED,IAAY,eAMX;AAND,WAAY,eAAe;IACvB,qEAAY,CAAA;IACZ,+DAAS,CAAA;IACT,uDAAK,CAAA;IACL,+DAAS,CAAA;IACT,qDAAI,CAAA;AACR,CAAC,EANW,eAAe,aAAf,eAAe,GAAf,eAAe,QAM1B;AAgBD;IAsCe,aAAa;IArChB,aAAa,GAAkB,EAAE,CAAC;IAClC,UAAU,GAAmB,EAAE,CAAC;IAChC,SAAS,GAAoB,EAAE,CAAC;IAEjC,KAAK,GAAoB,eAAe,CAAC,YAAY,CAAC;IACtD,MAAM,GAAiB,YAAY,CAAC,YAAY,CAAC;IACjD,oBAAoB,GAAW,CAAC,CAAC;IAExC,cAAc;IACP,UAAU,GAA2B,SAAS,CAAC;IAC/C,UAAU,GAAuB,SAAS,CAAC;IAC3C,SAAS,GAAuB,SAAS,CAAC;IAC1C,SAAS,GAAuB,SAAS,CAAC;IAC1C,mBAAmB,GAAuB,SAAS,CAAC;IAC3D,oCAAoC;IAC5B,wBAAwB,GAA+B,SAAS,CAAC;IAElE,YAAY,GAAuB,SAAS,CAAC;IAC7C,MAAM,GAAyB,SAAS,CAAC;IACzC,QAAQ,GAA2B,SAAS,CAAC;IAC7C,aAAa,GAAY,KAAK,CAAC;IAC/B,SAAS,GAAuB,SAAS,CAAC;IAE1C,MAAM,GAAuB,SAAS,CAAC;IACvC,QAAQ,GAAsD,SAAS,CAAC;IACxE,KAAK,GAA6B,IAAW,CAAC;IAC9C,MAAM,GAA8B,IAAW,CAAC;IAEvD;;;;OAIG;IACI,YAAY,GAA4C,SAAS,CAAC;IAClE,qBAAqB,GAA+B,SAAS,CAAC;IAErE,YACW,aAA2B;6BAA3B,aAAa;IACpB,CAAC;IAEE,OAAO;QACV,OAAO,IAAI,CAAC,MAAM,KAAK,YAAY,CAAC,KAAK,CAAC;IAC9C,CAAC;IAEM,UAAU;QACb,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,MAAM,IAAI,sBAAc,EAAE,CAAC;IACnC,CAAC;IAEM,WAAW;QACd,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QAEpB,IAAI,CAAC,KAAK,GAAG,eAAe,CAAC,YAAY,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,YAAY,CAAC;QACxC,IAAI,CAAC,oBAAoB,GAAG,CAAC,CAAC;QAE9B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAE3B,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,wBAAwB,GAAG,SAAS,CAAC;QAE1C,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QACxB,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,SAAgB,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,SAAgB,CAAC;QAE/B,IAAI,IAAI,CAAC,aAAa,CAAC,4BAA4B;YAC/C,IAAI,CAAC,qBAAqB,GAAG,yBAAc,CAAC,OAAO,EAAE,CAAC;;YAEtD,IAAI,CAAC,qBAAqB,GAAG,SAAS,CAAC;QAC3C,IAAI,IAAI,CAAC,aAAa,CAAC,wBAAwB;YAC3C,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;;YAEvB,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;IACtC,CAAC;IAEM,YAAY;QACf,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS;YAChC,OAAO;gBACH,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,SAAS,EAAE,IAAI,CAAC,SAAS;aAC5B,CAAC;QACN,MAAM,IAAI,2BAAmB,CAAC,0BAA0B,CAAC,CAAC;IAC9D,CAAC;IAEO,KAAK,CAAC,cAAc;QACxB,IAAI,CAAC,IAAI,CAAC,UAAU;YAChB,MAAM,IAAI,2BAAmB,CAAC,8BAA8B,CAAC,CAAC;QAClE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC;QAC/E,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,OAAO,SAAS,CAAC;IACrB,CAAC;IACM,KAAK,CAAC,kBAAkB;QAC3B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC9C,IAAI,CAAC,wBAAwB,GAAG,UAAU,CACtC,KAAK,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,kBAAkB,EAAE,EAC3C,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAClC,CAAC;IACN,CAAC;IACM,iBAAiB;QACpB,YAAY,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAChD,CAAC;IAEM,eAAe,CAAC,QAAqB,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAI7E,aAAa,CAAC,MAA8B,EAAE,IAAa;QAC9D,IAAI,OAAO,MAAM,KAAK,QAAQ;YAC1B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;gBAChB,EAAE,EAAE,MAAM;gBACV,IAAI,EAAE,IAAK;aACd,CAAC,CAAC;;YAEH,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAIM,YAAY,CAAC,KAAmB,EAAE,GAAG,IAAW;QACnD,IAAI,OAAO,KAAK,KAAK,QAAQ;YACzB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;gBACjB,KAAK;gBACL,IAAI,EAAE,IAAW;aACpB,CAAC,CAAC;;YAEH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAEM,aAAa;QAChB,OAAO,IAAI,EAAE,CAAC;YACV,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;YAC5C,IAAI,QAAQ;gBACR,QAAQ,CAAC,IAAI,CAAC,CAAC;;gBAEf,MAAM;QACd,CAAC;IACL,CAAC;IACM,UAAU;QACb,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,OAAO,MAAM,CAAC;IAClB,CAAC;IACM,WAAW;QACd,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAChD,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;QACpB,OAAO,OAAO,CAAC;IACnB,CAAC;CACJ"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export function sliceBuffer<T = Buffer>(
|
|
2
|
+
buf: Buffer,
|
|
3
|
+
byteLength: number,
|
|
4
|
+
transform?: (buf: Buffer, ind: number) => T
|
|
5
|
+
): T[] {
|
|
6
|
+
const chunks: Buffer[] = [];
|
|
7
|
+
for (let i = 0; i < buf.length; i += byteLength)
|
|
8
|
+
chunks.push(buf.subarray(i, i + byteLength));
|
|
9
|
+
if (transform)
|
|
10
|
+
return chunks.map(transform);
|
|
11
|
+
return chunks as T[];
|
|
12
|
+
}
|
package/src/base/error.ts
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
/** @hidden */
|
|
2
|
+
export class ClientNotReady extends Error {
|
|
3
|
+
constructor() {
|
|
4
|
+
super(`client is not ready`);
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
|
|
1
8
|
/** @hidden */
|
|
2
9
|
export class UnexpectedValue extends Error {
|
|
3
10
|
constructor(
|
|
@@ -33,6 +40,10 @@ export class InvalidValue extends Error {
|
|
|
33
40
|
}
|
|
34
41
|
}
|
|
35
42
|
|
|
43
|
+
/*
|
|
44
|
+
* TCP connection
|
|
45
|
+
*/
|
|
46
|
+
|
|
36
47
|
/** @hidden */
|
|
37
48
|
export class SockerIsNotWritable extends Error {
|
|
38
49
|
constructor() {
|
|
@@ -40,6 +51,10 @@ export class SockerIsNotWritable extends Error {
|
|
|
40
51
|
}
|
|
41
52
|
}
|
|
42
53
|
|
|
54
|
+
/*
|
|
55
|
+
* Authenticating...
|
|
56
|
+
*/
|
|
57
|
+
|
|
43
58
|
/** @hidden */
|
|
44
59
|
export class CantGetMsAuthToken extends Error {
|
|
45
60
|
constructor() {
|
|
@@ -55,12 +70,19 @@ export class CantGetMsAccessToken extends Error {
|
|
|
55
70
|
}
|
|
56
71
|
|
|
57
72
|
/** @hidden */
|
|
58
|
-
export class
|
|
59
|
-
constructor(public error: string) {
|
|
73
|
+
export class OAuthError extends Error {
|
|
74
|
+
constructor(public error: string, public detail?: any) {
|
|
60
75
|
super(`got oauth error: ${error}, for more info: https://datatracker.ietf.org/doc/html/rfc6749#section-5.2`);
|
|
61
76
|
}
|
|
62
77
|
}
|
|
63
78
|
|
|
79
|
+
/** @hidden */
|
|
80
|
+
export class AuthClientError extends Error {
|
|
81
|
+
constructor(public error: string, public detail?: any) {
|
|
82
|
+
super(error, detail);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
64
86
|
/** @hidden */
|
|
65
87
|
export class XboxError extends Error {
|
|
66
88
|
constructor(public code: string) {
|
|
@@ -68,6 +90,12 @@ export class XboxError extends Error {
|
|
|
68
90
|
}
|
|
69
91
|
}
|
|
70
92
|
|
|
93
|
+
/** @hidden */
|
|
94
|
+
export class MinecraftError extends Error {
|
|
95
|
+
constructor(public error: string) {
|
|
96
|
+
super(`minecraft auth error: ${error}`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
71
99
|
/** @hidden */
|
|
72
100
|
export class ProfileNotFound extends Error {
|
|
73
101
|
constructor() {
|
|
@@ -103,20 +131,22 @@ export class MissingAuthOption extends Error {
|
|
|
103
131
|
}
|
|
104
132
|
}
|
|
105
133
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
super(`cant find registry item: ${item}`);
|
|
134
|
+
export class AuthRelatedNotFound extends Error {
|
|
135
|
+
constructor(public component: string) {
|
|
136
|
+
super(`auth option is enabled, but the auth related component (${component}) is not found`);
|
|
110
137
|
}
|
|
111
138
|
}
|
|
112
139
|
|
|
140
|
+
/*
|
|
141
|
+
* Packets
|
|
142
|
+
*/
|
|
143
|
+
|
|
113
144
|
/** @hidden */
|
|
114
|
-
export class
|
|
115
|
-
constructor() {
|
|
116
|
-
super(`
|
|
145
|
+
export class RegistryItemNotFound extends Error {
|
|
146
|
+
constructor(public item: string) {
|
|
147
|
+
super(`cant find registry item: ${item}`);
|
|
117
148
|
}
|
|
118
149
|
}
|
|
119
|
-
|
|
120
150
|
/** @hidden */
|
|
121
151
|
export class VersionNotSupport extends Error {
|
|
122
152
|
constructor(public version: string) {
|
|
@@ -151,4 +181,27 @@ export class MissingField extends Error {
|
|
|
151
181
|
constructor(public field: string, public where: string) {
|
|
152
182
|
super(`missing ${field} in ${where}`);
|
|
153
183
|
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
/** @hidden */
|
|
187
|
+
export class NotImplemented extends Error {
|
|
188
|
+
constructor() {
|
|
189
|
+
super("if you are dev, please create an issue on github. if you are vaito, hey, this function is not injected >:(");
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/*
|
|
194
|
+
* Messages
|
|
195
|
+
*/
|
|
196
|
+
|
|
197
|
+
export class MessageLinkNotFound extends Error {
|
|
198
|
+
constructor(public senderUUID: string) {
|
|
199
|
+
super(`message link of sender ${senderUUID} not found, maybe because server has sent out of order packet`);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
export class HaveSignatureButNotIndex extends Error {
|
|
204
|
+
constructor() {
|
|
205
|
+
super (`expecting both shouldVerifyMessageOrder set to true when shouldVerifyMessageSignature set to true`);
|
|
206
|
+
}
|
|
154
207
|
}
|
package/src/base/http.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { AuthClientError } from "./error";
|
|
2
|
+
|
|
3
|
+
export async function getJson(res: Response, source: string) {
|
|
4
|
+
const data = await res.text();
|
|
5
|
+
try {
|
|
6
|
+
return JSON.parse(data);
|
|
7
|
+
} catch (e) {
|
|
8
|
+
throw new AuthClientError(`cant parse json from ${source}`, data);
|
|
9
|
+
}
|
|
10
|
+
}
|
package/src/base/math.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createHash } from "node:crypto";
|
|
1
|
+
import { createHash, randomBytes } from "node:crypto";
|
|
2
2
|
|
|
3
3
|
/** @hidden */
|
|
4
4
|
export const Epsilon = 1.0e-7; // 1^-7
|
|
@@ -9,17 +9,39 @@ export const Epsilon = 1.0e-7; // 1^-7
|
|
|
9
9
|
* Use for offline account
|
|
10
10
|
*
|
|
11
11
|
* @hidden
|
|
12
|
+
* @see https://github.com/openjdk/jdk/blob/master/src/java.base/share/classes/java/util/UUID.java#L165
|
|
12
13
|
*/
|
|
13
|
-
export function computeUUID(playerName: string):
|
|
14
|
+
export function computeUUID(playerName: string): string {
|
|
14
15
|
const md5 = createHash("md5").update(playerName).digest();
|
|
15
16
|
md5[6]! &= 0x0f; /* clear version */
|
|
16
17
|
md5[6]! |= 0x30; /* set to version 3 */
|
|
17
18
|
md5[8]! &= 0x3f; /* clear variant */
|
|
18
19
|
md5[8]! |= 0x80; /* set to IETF variant */
|
|
20
|
+
return md5.toString("hex");
|
|
21
|
+
}
|
|
19
22
|
|
|
20
|
-
|
|
23
|
+
/**
|
|
24
|
+
* Create random UUID but in bytes
|
|
25
|
+
*
|
|
26
|
+
* @hidden
|
|
27
|
+
* @see https://github.com/openjdk/jdk/blob/master/src/java.base/share/classes/java/util/UUID.java#L144
|
|
28
|
+
*/
|
|
29
|
+
export function randomUUIDBytes(): Buffer {
|
|
30
|
+
const buffer = randomBytes(16);
|
|
31
|
+
buffer[6]! &= 0x0f; /* clear version */
|
|
32
|
+
buffer[6]! |= 0x40; /* set to version 4 */
|
|
33
|
+
buffer[8]! &= 0x3f; /* clear variant */
|
|
34
|
+
buffer[8]! |= 0x80; /* set to IETF variant */
|
|
35
|
+
return buffer;
|
|
21
36
|
}
|
|
22
37
|
|
|
38
|
+
/**
|
|
39
|
+
* Transform UUID string into Buffer
|
|
40
|
+
*
|
|
41
|
+
* @hidden
|
|
42
|
+
*/
|
|
43
|
+
export const uuidToBuffer = (uuid: string) => Buffer.from(uuid.replaceAll("-", ""), "hex");
|
|
44
|
+
|
|
23
45
|
/** @hidden */
|
|
24
46
|
export const minBigInt = (...args: bigint[]) => args.reduce((min, val) => val < min ? val : min);
|
|
25
47
|
|
|
@@ -60,4 +82,34 @@ export function clamp(a: number, min: number, max: number) {
|
|
|
60
82
|
if (a < min) return min;
|
|
61
83
|
if (a > max) return max;
|
|
62
84
|
return a;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* Compute SHA1 for authenticating client with Mojang server
|
|
89
|
+
*
|
|
90
|
+
* @see https://gist.github.com/andrewrk/4425843?permalink_comment_id=5445918#gistcomment-5445918
|
|
91
|
+
* @hidden
|
|
92
|
+
*/
|
|
93
|
+
export function minecraftSha1(
|
|
94
|
+
serverId: string,
|
|
95
|
+
sharedSecret: Buffer,
|
|
96
|
+
publicKey: Buffer,
|
|
97
|
+
): string {
|
|
98
|
+
const sha1 = createHash('sha1');
|
|
99
|
+
sha1.update(Buffer.from(serverId, 'ascii'));
|
|
100
|
+
sha1.update(sharedSecret);
|
|
101
|
+
sha1.update(publicKey);
|
|
102
|
+
|
|
103
|
+
return mcHexDigest(sha1.digest());
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Compute the hex digest
|
|
108
|
+
*
|
|
109
|
+
* @see https://gist.github.com/andrewrk/4425843?permalink_comment_id=5445918#gistcomment-5445918
|
|
110
|
+
* @hidden
|
|
111
|
+
*/
|
|
112
|
+
function mcHexDigest(digest: Buffer | Uint8Array): string {
|
|
113
|
+
const bigint = BigInt(`0x${digest.toString('hex')}`);
|
|
114
|
+
return BigInt.asIntN(digest.length * 8, bigint).toString(16);
|
|
63
115
|
}
|