@vaitosoi/minejs 0.2.0 → 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.
- package/dist/base/aabb.d.ts +197 -0
- package/dist/base/aabb.d.ts.map +1 -0
- package/dist/base/aabb.js +576 -0
- package/dist/base/aabb.js.map +1 -0
- package/dist/base/bitset.d.ts +9 -0
- package/dist/base/bitset.d.ts.map +1 -0
- package/dist/base/bitset.js +46 -0
- package/dist/base/bitset.js.map +1 -0
- package/dist/base/block.d.ts +86 -0
- package/dist/base/block.d.ts.map +1 -0
- package/dist/base/block.js +232 -0
- package/dist/base/block.js.map +1 -0
- package/dist/base/direction.d.ts +153 -0
- package/dist/base/direction.d.ts.map +1 -0
- package/dist/base/direction.js +288 -0
- package/dist/base/direction.js.map +1 -0
- package/dist/base/entity.d.ts +43 -0
- package/dist/base/entity.d.ts.map +1 -0
- package/dist/base/entity.js +97 -0
- package/dist/base/entity.js.map +1 -0
- package/dist/base/error.d.ts +76 -0
- package/dist/base/error.d.ts.map +1 -0
- package/dist/base/error.js +141 -0
- package/dist/base/error.js.map +1 -0
- package/dist/base/event.d.ts +7 -0
- package/dist/base/event.d.ts.map +1 -0
- package/dist/base/event.js +3 -0
- package/dist/base/event.js.map +1 -0
- package/dist/base/math.d.ts +25 -0
- package/dist/base/math.d.ts.map +1 -0
- package/dist/base/math.js +69 -0
- package/dist/base/math.js.map +1 -0
- package/dist/base/player.d.ts +107 -0
- package/dist/base/player.d.ts.map +1 -0
- package/dist/base/player.js +543 -0
- package/dist/base/player.js.map +1 -0
- package/dist/base/registry.d.ts +50 -0
- package/dist/base/registry.d.ts.map +1 -0
- package/dist/base/registry.js +89 -0
- package/dist/base/registry.js.map +1 -0
- package/dist/base/tick.d.ts +19 -0
- package/dist/base/tick.d.ts.map +1 -0
- package/dist/base/tick.js +49 -0
- package/dist/base/tick.js.map +1 -0
- package/dist/base/typing.d.ts +3 -0
- package/dist/base/typing.d.ts.map +1 -0
- package/dist/base/typing.js +3 -0
- package/dist/base/typing.js.map +1 -0
- package/dist/client/auth.d.ts +39 -0
- package/dist/client/auth.d.ts.map +1 -0
- package/dist/client/auth.js +307 -0
- package/dist/client/auth.js.map +1 -0
- package/dist/client/client.d.ts +62 -0
- package/dist/client/client.d.ts.map +1 -0
- package/dist/client/client.js +98 -0
- package/dist/client/client.js.map +1 -0
- package/dist/client/static.d.ts +28 -0
- package/dist/client/static.d.ts.map +1 -0
- package/dist/client/static.js +43 -0
- package/dist/client/static.js.map +1 -0
- package/dist/client/tcp.d.ts +269 -0
- package/dist/client/tcp.d.ts.map +1 -0
- package/dist/client/tcp.js +838 -0
- package/dist/client/tcp.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js.map +1 -0
- package/dist/translator/decoder.d.ts +293 -0
- package/dist/translator/decoder.d.ts.map +1 -0
- package/dist/translator/decoder.js +668 -0
- package/dist/translator/decoder.js.map +1 -0
- package/dist/translator/encoder.d.ts +162 -0
- package/dist/translator/encoder.d.ts.map +1 -0
- package/dist/translator/encoder.js +430 -0
- package/dist/translator/encoder.js.map +1 -0
- package/dist/translator/static.d.ts +33 -0
- package/dist/translator/static.d.ts.map +1 -0
- package/dist/translator/static.js +42 -0
- package/dist/translator/static.js.map +1 -0
- package/package.json +10 -10
- package/src/base/aabb.ts +2 -0
- package/src/base/block.ts +4 -0
- package/src/base/direction.ts +5 -0
- package/src/base/error.ts +16 -0
- package/src/base/event.ts +1 -1
- package/src/base/math.ts +10 -0
- package/src/base/typing.ts +1 -0
- package/src/client/static.ts +4 -0
- package/src/translator/encoder.ts +2 -2
- package/src/translator/static.ts +9 -0
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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 >:(</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"}
|