@vaitosoi/minejs 0.2.1 → 0.2.2

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 (80) hide show
  1. package/dist/base/aabb.d.ts +197 -0
  2. package/dist/base/aabb.d.ts.map +1 -0
  3. package/dist/base/aabb.js +576 -0
  4. package/dist/base/aabb.js.map +1 -0
  5. package/dist/base/bitset.d.ts +9 -0
  6. package/dist/base/bitset.d.ts.map +1 -0
  7. package/dist/base/bitset.js +46 -0
  8. package/dist/base/bitset.js.map +1 -0
  9. package/dist/base/block.d.ts +86 -0
  10. package/dist/base/block.d.ts.map +1 -0
  11. package/dist/base/block.js +232 -0
  12. package/dist/base/block.js.map +1 -0
  13. package/dist/base/direction.d.ts +153 -0
  14. package/dist/base/direction.d.ts.map +1 -0
  15. package/dist/base/direction.js +288 -0
  16. package/dist/base/direction.js.map +1 -0
  17. package/dist/base/entity.d.ts +43 -0
  18. package/dist/base/entity.d.ts.map +1 -0
  19. package/dist/base/entity.js +97 -0
  20. package/dist/base/entity.js.map +1 -0
  21. package/dist/base/error.d.ts +76 -0
  22. package/dist/base/error.d.ts.map +1 -0
  23. package/dist/base/error.js +141 -0
  24. package/dist/base/error.js.map +1 -0
  25. package/dist/base/event.d.ts +7 -0
  26. package/dist/base/event.d.ts.map +1 -0
  27. package/dist/base/event.js +3 -0
  28. package/dist/base/event.js.map +1 -0
  29. package/dist/base/math.d.ts +25 -0
  30. package/dist/base/math.d.ts.map +1 -0
  31. package/dist/base/math.js +69 -0
  32. package/dist/base/math.js.map +1 -0
  33. package/dist/base/player.d.ts +107 -0
  34. package/dist/base/player.d.ts.map +1 -0
  35. package/dist/base/player.js +543 -0
  36. package/dist/base/player.js.map +1 -0
  37. package/dist/base/registry.d.ts +50 -0
  38. package/dist/base/registry.d.ts.map +1 -0
  39. package/dist/base/registry.js +89 -0
  40. package/dist/base/registry.js.map +1 -0
  41. package/dist/base/tick.d.ts +19 -0
  42. package/dist/base/tick.d.ts.map +1 -0
  43. package/dist/base/tick.js +49 -0
  44. package/dist/base/tick.js.map +1 -0
  45. package/dist/base/typing.d.ts +3 -0
  46. package/dist/base/typing.d.ts.map +1 -0
  47. package/dist/base/typing.js +3 -0
  48. package/dist/base/typing.js.map +1 -0
  49. package/dist/client/auth.d.ts +39 -0
  50. package/dist/client/auth.d.ts.map +1 -0
  51. package/dist/client/auth.js +307 -0
  52. package/dist/client/auth.js.map +1 -0
  53. package/dist/client/client.d.ts +62 -0
  54. package/dist/client/client.d.ts.map +1 -0
  55. package/dist/client/client.js +98 -0
  56. package/dist/client/client.js.map +1 -0
  57. package/dist/client/static.d.ts +28 -0
  58. package/dist/client/static.d.ts.map +1 -0
  59. package/dist/client/static.js +43 -0
  60. package/dist/client/static.js.map +1 -0
  61. package/dist/client/tcp.d.ts +269 -0
  62. package/dist/client/tcp.d.ts.map +1 -0
  63. package/dist/client/tcp.js +838 -0
  64. package/dist/client/tcp.js.map +1 -0
  65. package/dist/index.d.ts +21 -0
  66. package/dist/index.d.ts.map +1 -0
  67. package/dist/index.js.map +1 -0
  68. package/dist/translator/decoder.d.ts +293 -0
  69. package/dist/translator/decoder.d.ts.map +1 -0
  70. package/dist/translator/decoder.js +668 -0
  71. package/dist/translator/decoder.js.map +1 -0
  72. package/dist/translator/encoder.d.ts +162 -0
  73. package/dist/translator/encoder.d.ts.map +1 -0
  74. package/dist/translator/encoder.js +430 -0
  75. package/dist/translator/encoder.js.map +1 -0
  76. package/dist/translator/static.d.ts +33 -0
  77. package/dist/translator/static.d.ts.map +1 -0
  78. package/dist/translator/static.js +42 -0
  79. package/dist/translator/static.js.map +1 -0
  80. package/package.json +1 -1
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.BlockRegistry = exports.EntityRegistry = void 0;
4
+ const promises_1 = require("fs/promises");
5
+ const error_1 = require("./error");
6
+ const block_1 = require("./block");
7
+ class EntityRegistry {
8
+ static loaded = false;
9
+ static data = {};
10
+ static mapTypeToData = {};
11
+ /**
12
+ * Load entity registry from JSON file.
13
+ *
14
+ * Should be called once time
15
+ */
16
+ static async load() {
17
+ if (this.loaded)
18
+ return;
19
+ this.loaded = true;
20
+ const file = await (0, promises_1.readFile)(`${__dirname}/../../assets/minecraft/entities.json`, { encoding: "utf8" });
21
+ const json = JSON.parse(file);
22
+ for (const entity in json) {
23
+ this.data[entity] = json[entity];
24
+ this.mapTypeToData[json[entity]["id"]] = entity;
25
+ }
26
+ }
27
+ /**
28
+ * Get an entity registy item
29
+ */
30
+ static get(entity) {
31
+ if (typeof entity === "string") {
32
+ return this.data[entity];
33
+ }
34
+ else {
35
+ const key = this.mapTypeToData[entity];
36
+ return this.data[key];
37
+ }
38
+ }
39
+ }
40
+ exports.EntityRegistry = EntityRegistry;
41
+ ;
42
+ class BlockRegistry {
43
+ static loaded = false;
44
+ /**
45
+ * block id to block
46
+ */
47
+ static blocks = {};
48
+ /**
49
+ * state id to block state
50
+ */
51
+ static states = {};
52
+ /**
53
+ * Load block registry from JSON file.
54
+ *
55
+ * Should be called once time
56
+ */
57
+ static async load() {
58
+ if (this.loaded)
59
+ return;
60
+ this.loaded = true;
61
+ const file = await (0, promises_1.readFile)(`${__dirname}/../../assets/minecraft/blocks.json`, { encoding: "utf8" });
62
+ const json = JSON.parse(file);
63
+ for (const [type, blockRaw] of Object.entries(json)) {
64
+ const block = new block_1.Block(type, blockRaw['definition'], blockRaw['properties'], blockRaw['states']);
65
+ this.blocks[type] = block;
66
+ for (const state of block.states)
67
+ this.states[state.id] = state;
68
+ }
69
+ }
70
+ /**
71
+ * Get a block registy item
72
+ */
73
+ static getBlock(type) {
74
+ if (!(type in this.blocks))
75
+ throw new error_1.RegistryItemNotFound(`block ${type}`);
76
+ return this.blocks[type];
77
+ }
78
+ /**
79
+ * Get a block state registy item
80
+ */
81
+ static getState(id) {
82
+ if (!(id in this.states))
83
+ throw new error_1.RegistryItemNotFound(`block state ${id}`);
84
+ return this.states[id];
85
+ }
86
+ }
87
+ exports.BlockRegistry = BlockRegistry;
88
+ ;
89
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/base/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Tick manager.
3
+ *
4
+ * Maintaining 20Hz tick like what vanilla does
5
+ */
6
+ export declare class TickLoop {
7
+ private onTick;
8
+ static readonly TICK_MS = 50;
9
+ private static readonly TICK_NS;
10
+ static readonly MAX_CATCHUP_TICKS = 10;
11
+ private running;
12
+ private nextTickTime;
13
+ private timer;
14
+ constructor(onTick: () => any);
15
+ start(): void;
16
+ stop(): void;
17
+ private next;
18
+ }
19
+ //# sourceMappingURL=tick.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tick.d.ts","sourceRoot":"","sources":["../../src/base/tick.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,qBAAa,QAAQ;IAUb,OAAO,CAAC,MAAM;IATlB,gBAAuB,OAAO,MAAM;IACpC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAqC;IACpE,gBAAuB,iBAAiB,MAAM;IAE9C,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,KAAK,CAAa;IAE1B,YACY,MAAM,EAAE,MAAM,GAAG,EAI5B;IAEM,KAAK,SAIX;IAEM,IAAI,SAIV;IAED,OAAO,CAAC,IAAI;CAiBf"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TickLoop = void 0;
4
+ /**
5
+ * Tick manager.
6
+ *
7
+ * Maintaining 20Hz tick like what vanilla does
8
+ */
9
+ class TickLoop {
10
+ onTick;
11
+ static TICK_MS = 50;
12
+ static TICK_NS = BigInt(this.TICK_MS) * 1000000n;
13
+ static MAX_CATCHUP_TICKS = 10;
14
+ running;
15
+ nextTickTime;
16
+ timer = null;
17
+ constructor(onTick) {
18
+ this.onTick = onTick;
19
+ this.running = false;
20
+ this.nextTickTime = BigInt(0);
21
+ }
22
+ start() {
23
+ this.running = true;
24
+ this.nextTickTime = process.hrtime.bigint();
25
+ this.next();
26
+ }
27
+ stop() {
28
+ this.running = false;
29
+ clearInterval(this.timer);
30
+ this.nextTickTime = BigInt(0);
31
+ }
32
+ next() {
33
+ if (!this.running)
34
+ this.stop();
35
+ const now = process.hrtime.bigint();
36
+ let tickRuns = 0;
37
+ while (this.nextTickTime < now && tickRuns < TickLoop.MAX_CATCHUP_TICKS) {
38
+ this.onTick();
39
+ this.nextTickTime += TickLoop.TICK_NS;
40
+ tickRuns++;
41
+ }
42
+ if (tickRuns >= TickLoop.MAX_CATCHUP_TICKS)
43
+ this.nextTickTime = now + TickLoop.TICK_NS;
44
+ const delayMs = Number((this.nextTickTime - process.hrtime.bigint())) / 1_000_000;
45
+ this.timer = setTimeout(() => this.next(), Math.max(0, delayMs));
46
+ }
47
+ }
48
+ exports.TickLoop = TickLoop;
49
+ //# sourceMappingURL=tick.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tick.js","sourceRoot":"","sources":["../../src/base/tick.ts"],"names":[],"mappings":";;;AAAA;;;;GAIG;AACH;IAUgB,MAAM;IATX,MAAM,CAAU,OAAO,GAAG,EAAE,CAAC;IAC5B,MAAM,CAAU,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,QAAU,CAAC;IAC7D,MAAM,CAAU,iBAAiB,GAAG,EAAE,CAAC;IAEtC,OAAO,CAAU;IACjB,YAAY,CAAS;IACrB,KAAK,GAAQ,IAAI,CAAC;IAE1B,YACY,MAAiB;sBAAjB,MAAM;QAEd,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IAEM,KAAK;QACR,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;IAChB,CAAC;IAEM,IAAI;QACP,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;QACrB,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IAClC,CAAC;IAEO,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,OAAO;YAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QAE/B,MAAM,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACpC,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,OAAO,IAAI,CAAC,YAAY,GAAG,GAAG,IAAI,QAAQ,GAAG,QAAQ,CAAC,iBAAiB,EAAE,CAAC;YACtE,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,IAAI,CAAC,YAAY,IAAI,QAAQ,CAAC,OAAO,CAAC;YACtC,QAAQ,EAAE,CAAC;QACf,CAAC;QAED,IAAI,QAAQ,IAAI,QAAQ,CAAC,iBAAiB;YACtC,IAAI,CAAC,YAAY,GAAG,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC;QAE/C,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,SAAS,CAAC;QAClF,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;IACrE,CAAC;CACJ"}
@@ -0,0 +1,3 @@
1
+ /** @hidden */
2
+ export type If<Condition extends boolean, True, False = null> = Condition extends true ? True : False;
3
+ //# sourceMappingURL=typing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typing.d.ts","sourceRoot":"","sources":["../../src/base/typing.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,MAAM,MAAM,EAAE,CAAC,SAAS,SAAS,OAAO,EAAE,IAAI,EAAE,KAAK,GAAG,IAAI,IAAI,SAAS,SAAS,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=typing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typing.js","sourceRoot":"","sources":["../../src/base/typing.ts"],"names":[],"mappings":""}
@@ -0,0 +1,39 @@
1
+ export interface AuthOption {
2
+ /**
3
+ * `"loopback"` - open a browser to login
4
+ * `"device_code"` - provide a device code to login
5
+ */
6
+ method: "loopback" | "device_code";
7
+ /**
8
+ * Automatedly open browser or print a URL to click on.
9
+ */
10
+ openBrowser: boolean;
11
+ /**
12
+ * The Client ID
13
+ *
14
+ * Get it by creating Microsoft Azure application
15
+ */
16
+ client_id: string;
17
+ /**
18
+ * Custom logger, default to `console.log`
19
+ */
20
+ log?: (message: string) => void;
21
+ }
22
+ /**
23
+ * Auth client, for authenticating Microsoft account
24
+ */
25
+ export declare class AuthClient {
26
+ private option;
27
+ private readonly codeVerifier;
28
+ private readonly codeChallenge;
29
+ constructor(option: AuthOption);
30
+ auth(): Promise<{
31
+ token: string;
32
+ uuid: string;
33
+ name: string;
34
+ }>;
35
+ private loopback;
36
+ private deviceCode;
37
+ private getMcToken;
38
+ }
39
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/client/auth.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,UAAU;IACvB;;;OAGG;IACH,MAAM,EAAE,UAAU,GAAG,aAAa,CAAC;IAEnC;;OAEG;IACH,WAAW,EAAE,OAAO,CAAC;IAErB;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAuFD;;GAEG;AACH,qBAAa,UAAU;IAKP,OAAO,CAAC,MAAM;IAJ1B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IAGvC,YAAoB,MAAM,EAAE,UAAU,EAOrC;IAEY,IAAI;eAuIN,MAAM;cACP,MAAM;cACN,MAAM;OAtIf;YAEa,QAAQ;YA0ER,UAAU;YAuDV,UAAU;CA8E3B"}
@@ -0,0 +1,307 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.AuthClient = void 0;
7
+ const node_http_1 = __importDefault(require("node:http"));
8
+ const node_crypto_1 = __importDefault(require("node:crypto"));
9
+ const node_net_1 = __importDefault(require("node:net"));
10
+ const node_child_process_1 = require("node:child_process");
11
+ const error_1 = require("../base/error");
12
+ // From assets dir
13
+ const ErrorHTML = `
14
+ <!DOCTYPE html>
15
+ <html>
16
+ <head>
17
+ <title>MineJS</title>
18
+ <style>
19
+ p { margin: 0; }
20
+ </style>
21
+ </head>
22
+ <body>
23
+ <div style="display: flex; height: 100vh; width: 100vw;">
24
+ <div style="margin: auto; display: flex; flex-direction: column; text-align: center">
25
+ <p style="font-size: 30px">An error is occurred while MineJS trying to get the token</p>
26
+ <p style="font-size: 35px; color: crimson">{error}</p>
27
+ <p style="font-size: 28px">{error_description}</p>
28
+ </div>
29
+ </div>
30
+ </body>
31
+ </html>
32
+ `;
33
+ const SuccessHTML = `
34
+ <!DOCTYPE html>
35
+ <html>
36
+ <head>
37
+ <title>MineJS</title>
38
+ <style>
39
+ p { margin: 0; }
40
+ </style>
41
+ </head>
42
+ <body>
43
+ <div style="display: flex; height: 100vh; width: 100vw;">
44
+ <div style="margin: auto; display: flex; flex-direction: column; text-align: center">
45
+ <p style="font-size: 40px; font-weight: bold; color: darkcyan;">Done!</p>
46
+ <p style="font-size: 30px;">You can close this tab</p>
47
+ </div>
48
+ </div>
49
+ </body>
50
+ </html>
51
+ `;
52
+ const InvalidHTML = `
53
+ <!DOCTYPE html>
54
+ <html>
55
+ <head>
56
+ <title>MineJS</title>
57
+ <style>
58
+ p { margin: 0; }
59
+ </style>
60
+ </head>
61
+ <body>
62
+ <div style="display: flex; height: 100vh; width: 100vw;">
63
+ <div style="margin: auto; display: flex; flex-direction: column; text-align: center">
64
+ <p style="font-size: 35px; color: crimson">Invalid request >:&lpar;</p>
65
+ <p style="font-size: 30px; color: crimson">{reason}</p>
66
+ </div>
67
+ </div>
68
+ </body>
69
+ </html>
70
+ `;
71
+ function open(url, log) {
72
+ // From https://stackoverflow.com/a/49013356/17106809
73
+ switch (process.platform) {
74
+ case "linux":
75
+ (0, node_child_process_1.exec)(`xdg-open "${url}"`);
76
+ break;
77
+ case "win32":
78
+ (0, node_child_process_1.exec)(`start "${url}"`);
79
+ break;
80
+ case "darwin":
81
+ (0, node_child_process_1.exec)(`open "${url}"`);
82
+ break;
83
+ default:
84
+ log(`${process.platform} is not supported`);
85
+ log(`please open this url in your browser: ${url}`);
86
+ break;
87
+ }
88
+ }
89
+ // Got this from https://github.com/sindresorhus/get-port/blob/main/index.js#L47
90
+ const getFreePort = () => new Promise((resolve) => {
91
+ const server = node_net_1.default.createServer();
92
+ server.listen(0, () => {
93
+ const port = server.address().port;
94
+ server.close(() => resolve(port));
95
+ });
96
+ });
97
+ const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
98
+ /**
99
+ * Auth client, for authenticating Microsoft account
100
+ */
101
+ class AuthClient {
102
+ option;
103
+ codeVerifier;
104
+ codeChallenge;
105
+ // private refreshToken?: string;
106
+ constructor(option) {
107
+ this.option = option;
108
+ const codeVerifier = node_crypto_1.default.randomBytes(32).toString("hex");
109
+ const hashed = node_crypto_1.default.hash("sha256", codeVerifier, "base64url");
110
+ this.option.log ||= console.log;
111
+ this.codeVerifier = codeVerifier;
112
+ this.codeChallenge = hashed;
113
+ }
114
+ async auth() {
115
+ if (this.option.method === "loopback")
116
+ return this.loopback();
117
+ else
118
+ return this.deviceCode();
119
+ }
120
+ async loopback() {
121
+ const freePort = await getFreePort();
122
+ const expectState = node_crypto_1.default.randomBytes(8).toString("hex");
123
+ const authUrl = new URL("https://login.microsoftonline.com/consumers/oauth2/v2.0/authorize");
124
+ authUrl.searchParams.append("client_id", this.option.client_id);
125
+ authUrl.searchParams.append("response_type", "code");
126
+ authUrl.searchParams.append("redirect_uri", `http://127.0.0.1:${freePort}`);
127
+ authUrl.searchParams.append("scope", "XboxLive.signin offline_access");
128
+ authUrl.searchParams.append("code_challenge", this.codeChallenge);
129
+ authUrl.searchParams.append("code_challenge_method", "S256");
130
+ authUrl.searchParams.append("state", expectState);
131
+ if (this.option.openBrowser === true)
132
+ open(authUrl.toString(), this.option.log);
133
+ else
134
+ this.option.log(`please open this url in your browser: ${authUrl.toString()}`);
135
+ const msAuthToken = await new Promise((resolve) => {
136
+ const server = node_http_1.default.createServer((req, res) => {
137
+ const end = (html, result = null) => {
138
+ res.end(html);
139
+ server.close();
140
+ return resolve(result);
141
+ };
142
+ const url = new URL(req.url || "", `http://127.0.0.1:${freePort}`);
143
+ const error = url.searchParams.get("error");
144
+ if (error) {
145
+ const description = url.searchParams.get("error_description");
146
+ end(ErrorHTML.replace("{error}", error).replace("{error_description}", description));
147
+ }
148
+ const code = url.searchParams.get("code");
149
+ if (!code)
150
+ end(InvalidHTML.replace("{reason}", "Missing <code>code</code> parameter"));
151
+ const state = url.searchParams.get("state");
152
+ if (!state)
153
+ end(InvalidHTML.replace("{reason}", "Missing <code>state</code> parameter"));
154
+ if (state !== expectState)
155
+ end(InvalidHTML.replace("{reason}", "Mismatch state"));
156
+ return end(SuccessHTML, code);
157
+ });
158
+ server.listen(freePort);
159
+ });
160
+ if (!msAuthToken)
161
+ throw new error_1.CantGetMsAccessToken();
162
+ const msTokenUrl = new URL("https://login.microsoftonline.com/consumers/oauth2/v2.0/token");
163
+ const msTokenBody = new URLSearchParams();
164
+ msTokenBody.append("client_id", this.option.client_id);
165
+ msTokenBody.append("code", msAuthToken);
166
+ msTokenBody.append("scope", "XboxLive.signin offline_access");
167
+ msTokenBody.append("redirect_uri", `http://127.0.0.1:${freePort}`);
168
+ msTokenBody.append("grant_type", "authorization_code");
169
+ msTokenBody.append("code_verifier", this.codeVerifier);
170
+ const msTokenRequest = await fetch(msTokenUrl, {
171
+ headers: {
172
+ "Content-Type": "application/x-www-form-urlencoded"
173
+ },
174
+ method: "POST",
175
+ body: msTokenBody.toString()
176
+ });
177
+ const msTokenResponse = await msTokenRequest.json();
178
+ if ("error" in msTokenResponse)
179
+ throw new error_1.AuthError(msTokenResponse["error"]);
180
+ const msToken = msTokenResponse["access_token"];
181
+ return this.getMcToken(msToken);
182
+ }
183
+ async deviceCode() {
184
+ const codeUrl = new URL("https://login.microsoftonline.com/consumers/oauth2/v2.0/devicecode");
185
+ const codeBody = new URLSearchParams();
186
+ codeBody.set("client_id", this.option.client_id);
187
+ codeBody.append("scope", "XboxLive.signin offline_access");
188
+ const codeRequest = await fetch(codeUrl, {
189
+ headers: {
190
+ "Content-Type": "application/x-www-form-urlencoded"
191
+ },
192
+ method: "POST",
193
+ body: codeBody.toString()
194
+ });
195
+ const codeResponse = await codeRequest.json();
196
+ const deviceCode = codeResponse["device_code"];
197
+ const message = codeResponse["message"];
198
+ let interval = Number(codeResponse["interval"]);
199
+ this.option.log(message);
200
+ let msToken;
201
+ const msTokenUrl = new URL("https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token");
202
+ const msTokenBody = new URLSearchParams();
203
+ msTokenBody.set("grant_type", "urn:ietf:params:oauth:grant-type:device_code");
204
+ msTokenBody.set("client_id", this.option.client_id);
205
+ msTokenBody.set("device_code", deviceCode);
206
+ while (true) {
207
+ await sleep(interval * 1000);
208
+ const msTokenRequest = await fetch(msTokenUrl, {
209
+ headers: {
210
+ "Content-Type": "application/x-www-form-urlencoded"
211
+ },
212
+ method: "POST"
213
+ });
214
+ const msTokenResponse = await msTokenRequest.json();
215
+ if ("error" in msTokenResponse)
216
+ switch (msTokenResponse["error"]) {
217
+ case "authorization_pending": continue;
218
+ case "slow_down":
219
+ interval += 5;
220
+ continue;
221
+ case "auth_denied": throw new error_1.AuthDenied();
222
+ case "expired_token": throw new error_1.AuthTokenExpired();
223
+ default: throw new error_1.AuthError(msTokenResponse["error"]);
224
+ }
225
+ else {
226
+ msToken = msTokenResponse["access_token"];
227
+ break;
228
+ }
229
+ }
230
+ if (!msToken)
231
+ throw new error_1.CantGetMsAccessToken();
232
+ return this.getMcToken(msToken);
233
+ }
234
+ async getMcToken(msToken) {
235
+ // Get Xbox Live token
236
+ const xboxRequest = await fetch("https://user.auth.xboxlive.com/user/authenticate", {
237
+ headers: {
238
+ "Content-Type": "application/json",
239
+ Accept: "application/json"
240
+ },
241
+ body: JSON.stringify({
242
+ "Properties": {
243
+ "AuthMethod": "RPS",
244
+ "SiteName": "user.auth.xboxlive.com",
245
+ "RpsTicket": `d=${msToken}`
246
+ },
247
+ "RelyingParty": "http://auth.xboxlive.com",
248
+ "TokenType": "JWT"
249
+ }),
250
+ method: "POST"
251
+ });
252
+ const xboxReponse = await xboxRequest.json();
253
+ const xboxToken = xboxReponse["Token"];
254
+ const userHash = xboxReponse["DisplayClaims"]["xui"][0]["uhs"];
255
+ const xboxSecurityRequest = await fetch("https://xsts.auth.xboxlive.com/xsts/authorize", {
256
+ headers: {
257
+ "Content-Type": "application/json",
258
+ Accept: "application/json"
259
+ },
260
+ body: JSON.stringify({
261
+ "Properties": {
262
+ "SandboxId": "RETAIL",
263
+ "UserTokens": [xboxToken]
264
+ },
265
+ "RelyingParty": "rp://api.minecraftservices.com/",
266
+ "TokenType": "JWT"
267
+ }),
268
+ method: "POST"
269
+ });
270
+ const xboxSecurityReponse = await xboxSecurityRequest.json();
271
+ if ("XErr" in xboxSecurityReponse)
272
+ throw new error_1.XboxError(xboxSecurityReponse["XErr"]);
273
+ const xboxSecurityToken = xboxSecurityReponse["Token"];
274
+ const minecraftRequest = await fetch("https://api.minecraftservices.com/authentication/login_with_xbox", {
275
+ headers: {
276
+ "Content-Type": "application/json",
277
+ Accept: "application/json"
278
+ },
279
+ body: JSON.stringify({
280
+ "identityToken": `XBL3.0 x=${userHash};${xboxSecurityToken}"`
281
+ }),
282
+ method: "POST"
283
+ });
284
+ const minecraftResponse = await minecraftRequest.json();
285
+ const minecraftToken = minecraftResponse["access_token"];
286
+ const mcProfileRequest = await fetch("https://api.minecraftservices.com/minecraft/profile", {
287
+ headers: {
288
+ "Authorization": `Bearer ${minecraftToken}`
289
+ },
290
+ method: "GET"
291
+ });
292
+ const mcProfileResponse = await mcProfileRequest.json();
293
+ if ("error" in mcProfileResponse) {
294
+ if (mcProfileResponse["error"] === "NOT_FOUND")
295
+ throw new error_1.ProfileNotFound();
296
+ else
297
+ throw new error_1.ProfileError(mcProfileResponse["error"], mcProfileResponse["errorMessage"]);
298
+ }
299
+ return {
300
+ token: minecraftToken,
301
+ uuid: mcProfileResponse["id"],
302
+ name: mcProfileResponse["name"]
303
+ };
304
+ }
305
+ }
306
+ exports.AuthClient = AuthClient;
307
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/client/auth.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ import { BlockState } from "../base/block";
2
+ import { MoveDirection } from "../base/player";
3
+ import { Entity, Message, TCPClientOption, TextComponent } from "./tcp";
4
+ import { TypedEmmiter } from "../base/event";
5
+ import { BaseVec3 } from "../base/direction";
6
+ export interface ClientEvents {
7
+ ready: [readyClient: Client<true>];
8
+ disconnect: [reason: string];
9
+ disconnectRaw: [textComponent: TextComponent];
10
+ playerPosition: [position: BaseVec3];
11
+ loadChunk: [chunkX: number, sectionY: number, chunkZ: number];
12
+ unloadChunk: [chunkX: number, chunkZ: number];
13
+ spawnEntity: [entity: Entity];
14
+ updateEntity: [entity: Entity];
15
+ removeEntity: [entityId: number];
16
+ message: [message: Message];
17
+ systemMessage: [message: string];
18
+ systemMessageRaw: [textComponent: TextComponent];
19
+ actionBar: [message: string];
20
+ actionBarRaw: [textComponent: TextComponent];
21
+ }
22
+ declare const Client_base: new () => TypedEmmiter<ClientEvents>;
23
+ /**
24
+ * High-level client.
25
+ */
26
+ export declare class Client<IsTCPReady extends boolean = boolean> extends Client_base {
27
+ private tickLoop;
28
+ private tcp;
29
+ private blocks;
30
+ private entities;
31
+ private player;
32
+ constructor(options: TCPClientOption);
33
+ private forwardEvent;
34
+ private forwardEvents;
35
+ /**
36
+ * Create a connection to the server
37
+ */
38
+ connect(): void;
39
+ /**
40
+ * Destroy the connection
41
+ */
42
+ disconnect(): void;
43
+ /**
44
+ * Press and hold a key
45
+ */
46
+ hold(direction: MoveDirection): void;
47
+ /**
48
+ * Release a key
49
+ */
50
+ release(direction: MoveDirection): void;
51
+ /**
52
+ * Release all key
53
+ */
54
+ stopMoving(): void;
55
+ /**
56
+ * Get the block state at position
57
+ */
58
+ at(x: number, y: number, z: number): BlockState | null;
59
+ at(position: BaseVec3): BlockState | null;
60
+ }
61
+ export {};
62
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client/client.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,UAAU,EAAE,MAAM,eAAe,CAAC;AAEzD,OAAO,EAAE,aAAa,EAAU,MAAM,gBAAgB,CAAC;AAEvD,OAAO,EAAE,MAAM,EAAE,OAAO,EAA8B,eAAe,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACpG,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,QAAQ,EAAQ,MAAM,mBAAmB,CAAC;AAEnD,MAAM,WAAW,YAAY;IACzB,KAAK,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACnC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,aAAa,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IAE9C,cAAc,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAErC,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9D,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAE9C,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,YAAY,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAGjC,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC5B,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACjC,gBAAgB,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;IACjD,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC7B,YAAY,EAAE,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC;CAChD;qCAK4F,YAAY,CAAC,YAAY,CAAC;AAHvH;;GAEG;AACH,qBAAa,MAAM,CAAC,UAAU,SAAS,OAAO,GAAG,OAAO,CAAE,SAAQ,WAAsD;IACpH,OAAO,CAAC,QAAQ,CAAW;IAE3B,OAAO,CAAC,GAAG,CAAwB;IACnC,OAAO,CAAC,MAAM,CAAe;IAC7B,OAAO,CAAC,QAAQ,CAAkB;IAClC,OAAO,CAAC,MAAM,CAAS;IAEvB,YAAY,OAAO,EAAE,eAAe,EAWnC;IAED,OAAO,CAAC,YAAY;IAGpB,OAAO,CAAC,aAAa;IAiBrB;;OAEG;IACI,OAAO,SAab;IACD;;OAEG;IACI,UAAU,SAEhB;IAGD;;OAEG;IACI,IAAI,CAAC,SAAS,EAAE,aAAa,QAEnC;IACD;;OAEG;IACI,OAAO,CAAC,SAAS,EAAE,aAAa,QAEtC;IACD;;OAEG;IACI,UAAU,SAEhB;IAGD;;OAEG;IACI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;IACvD,EAAE,CAAC,QAAQ,EAAE,QAAQ,GAAG,UAAU,GAAG,IAAI,CAAC;CAKpD"}