@vaitosoi/minejs 0.3.1 → 0.4.0

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.
Files changed (78) hide show
  1. package/README.md +1 -1
  2. package/assets/minecraft/26.2/packets.json +27 -10
  3. package/dist/base/buffer.d.ts +2 -0
  4. package/dist/base/buffer.d.ts.map +1 -0
  5. package/dist/base/buffer.js +12 -0
  6. package/dist/base/buffer.js.map +1 -0
  7. package/dist/base/error.d.ts +33 -6
  8. package/dist/base/error.d.ts.map +1 -1
  9. package/dist/base/error.js +74 -11
  10. package/dist/base/error.js.map +1 -1
  11. package/dist/base/http.d.ts +2 -0
  12. package/dist/base/http.d.ts.map +1 -0
  13. package/dist/base/http.js +14 -0
  14. package/dist/base/http.js.map +1 -0
  15. package/dist/base/math.d.ts +22 -1
  16. package/dist/base/math.d.ts.map +1 -1
  17. package/dist/base/math.js +49 -2
  18. package/dist/base/math.js.map +1 -1
  19. package/dist/client/auth.d.ts +41 -7
  20. package/dist/client/auth.d.ts.map +1 -1
  21. package/dist/client/auth.js +96 -39
  22. package/dist/client/auth.js.map +1 -1
  23. package/dist/client/client.d.ts +50 -5
  24. package/dist/client/client.d.ts.map +1 -1
  25. package/dist/client/client.js +47 -18
  26. package/dist/client/client.js.map +1 -1
  27. package/dist/client/tcp.d.ts +1 -5
  28. package/dist/client/tcp.d.ts.map +1 -1
  29. package/dist/client/tcp.js +8 -21
  30. package/dist/client/tcp.js.map +1 -1
  31. package/dist/message/link.d.ts +10 -0
  32. package/dist/message/link.d.ts.map +1 -0
  33. package/dist/message/link.js +22 -0
  34. package/dist/message/link.js.map +1 -0
  35. package/dist/message/sigCache.d.ts +13 -0
  36. package/dist/message/sigCache.d.ts.map +1 -0
  37. package/dist/message/sigCache.js +26 -0
  38. package/dist/message/sigCache.js.map +1 -0
  39. package/dist/packet/decoder.d.ts +13 -0
  40. package/dist/packet/decoder.d.ts.map +1 -1
  41. package/dist/packet/decoder.js +21 -0
  42. package/dist/packet/decoder.js.map +1 -1
  43. package/dist/packet/dispatcher.d.ts +8 -1
  44. package/dist/packet/dispatcher.d.ts.map +1 -1
  45. package/dist/packet/dispatcher.js +142 -30
  46. package/dist/packet/dispatcher.js.map +1 -1
  47. package/dist/physics/player.d.ts +17 -23
  48. package/dist/physics/player.d.ts.map +1 -1
  49. package/dist/physics/player.js +59 -61
  50. package/dist/physics/player.js.map +1 -1
  51. package/dist/version/codec.d.ts.map +1 -1
  52. package/dist/version/codec.js +28 -7
  53. package/dist/version/codec.js.map +1 -1
  54. package/dist/version/registry.d.ts +1 -1
  55. package/dist/version/registry.d.ts.map +1 -1
  56. package/dist/version/registry.js +2 -7
  57. package/dist/version/registry.js.map +1 -1
  58. package/dist/world/state.d.ts +26 -2
  59. package/dist/world/state.d.ts.map +1 -1
  60. package/dist/world/state.js +58 -3
  61. package/dist/world/state.js.map +1 -1
  62. package/package.json +1 -1
  63. package/src/base/buffer.ts +12 -0
  64. package/src/base/error.ts +63 -10
  65. package/src/base/http.ts +10 -0
  66. package/src/base/math.ts +55 -3
  67. package/src/client/auth.ts +130 -52
  68. package/src/client/client.ts +96 -21
  69. package/src/client/tcp.ts +10 -27
  70. package/src/message/link.ts +17 -0
  71. package/src/message/sigCache.ts +25 -0
  72. package/src/packet/decoder.ts +21 -0
  73. package/src/packet/dispatcher.ts +169 -35
  74. package/src/physics/player.ts +83 -58
  75. package/src/version/codec.ts +32 -11
  76. package/src/version/registry.ts +2 -7
  77. package/src/world/state.ts +72 -4
  78. package/test/client/index.ts +27 -20
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/world/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/world/state.ts"],"names":[],"mappings":"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"}
@@ -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
- constructor(clientOptions, getUuid) {
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) {
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/world/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/world/state.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vaitosoi/minejs",
3
- "version": "0.3.1",
3
+ "version": "0.4.0",
4
4
  "description": "A Minecraft client package",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -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 AuthError extends Error {
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
- /** @hidden */
107
- export class RegistryItemNotFound extends Error {
108
- constructor(public item: string) {
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 ClientNotReady extends Error {
115
- constructor() {
116
- super(`client is not ready`);
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
  }
@@ -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): Buffer {
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
- return md5;
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
  }