@sagl/server 0.1.0-next.49 → 0.1.0-next.53
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/actions.js +1 -1
- package/dist/actions.js.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/mission.d.ts +3 -0
- package/dist/mission.js +10 -0
- package/dist/mission.js.map +1 -1
- package/dist/native.d.ts +3 -0
- package/dist/native.js.map +1 -1
- package/dist/query-client.d.ts +66 -0
- package/dist/query-client.js +128 -0
- package/dist/query-client.js.map +1 -0
- package/dist/query.d.ts +72 -0
- package/dist/query.js +220 -0
- package/dist/query.js.map +1 -0
- package/dist/screeneffects.d.ts +36 -0
- package/dist/screeneffects.js +62 -1
- package/dist/screeneffects.js.map +1 -1
- package/dist/server.d.ts +15 -0
- package/dist/server.js +16 -0
- package/dist/server.js.map +1 -1
- package/package.json +3 -3
package/dist/query.js
ADDED
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
// The query: what anyone can learn about the server without joining it,
|
|
2
|
+
// over UDP on its game port (the core answers) and, if the gamemode turns
|
|
3
|
+
// it on, over HTTP. Asking one is query-client.ts (also @sagl/query).
|
|
4
|
+
import * as fs from "node:fs";
|
|
5
|
+
import * as http from "node:http";
|
|
6
|
+
import * as path from "node:path";
|
|
7
|
+
const PLAYERS = { none: 0, count: 1, list: 2 };
|
|
8
|
+
const MAX_TEXT = 1000;
|
|
9
|
+
const MAX_VALUE = 256;
|
|
10
|
+
function checkText(what, s, max = MAX_TEXT) {
|
|
11
|
+
if (typeof s !== "string")
|
|
12
|
+
throw new TypeError(`query: ${what} must be a string`);
|
|
13
|
+
if (s.length > max)
|
|
14
|
+
throw new RangeError(`query: ${what} is over ${max} characters`);
|
|
15
|
+
return s;
|
|
16
|
+
}
|
|
17
|
+
function checkInfo(info) {
|
|
18
|
+
const out = {};
|
|
19
|
+
if (info.description !== undefined)
|
|
20
|
+
out.description = checkText("description", info.description);
|
|
21
|
+
if (info.gamemode !== undefined)
|
|
22
|
+
out.gamemode = checkText("gamemode", info.gamemode, 64);
|
|
23
|
+
if (info.language !== undefined)
|
|
24
|
+
out.language = checkText("language", info.language, 64);
|
|
25
|
+
if (info.tags !== undefined) {
|
|
26
|
+
if (!Array.isArray(info.tags) || info.tags.length > 32)
|
|
27
|
+
throw new TypeError("query: tags must be an array of up to 32 strings");
|
|
28
|
+
out.tags = info.tags.map((t) => checkText("a tag", t, 32));
|
|
29
|
+
}
|
|
30
|
+
if (info.links !== undefined) {
|
|
31
|
+
out.links = {};
|
|
32
|
+
for (const [name, url] of Object.entries(info.links)) {
|
|
33
|
+
checkText("a link's name", name, 32);
|
|
34
|
+
let u;
|
|
35
|
+
try {
|
|
36
|
+
u = new URL(checkText(`links.${name}`, url, 512));
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
throw new TypeError(`query: links.${name} isn't a URL: ${url}`);
|
|
40
|
+
}
|
|
41
|
+
if (u.protocol !== "http:" && u.protocol !== "https:")
|
|
42
|
+
throw new TypeError(`query: links.${name} must be http(s): ${url}`);
|
|
43
|
+
out.links[name] = url;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
return out;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* `server.query`: what the server tells anyone who asks without joining
|
|
50
|
+
* (server lists, a browser in the game): its name, version, players and
|
|
51
|
+
* branding (the core's), and the gamemode's own fields and values.
|
|
52
|
+
*
|
|
53
|
+
* ```ts
|
|
54
|
+
* server.query.info = {
|
|
55
|
+
* description: "Los Santos roleplay, whitelisted.",
|
|
56
|
+
* gamemode: "Roleplay", language: "en", tags: ["rp", "whitelist"],
|
|
57
|
+
* links: { website: "https://example.com", discord: "https://discord.gg/example" },
|
|
58
|
+
* };
|
|
59
|
+
* server.query.set("map", "Los Santos");
|
|
60
|
+
* setInterval(() => server.query.set("cops", copsOnDuty()), 10_000);
|
|
61
|
+
* await server.query.http({ port: 8080 }); // and over HTTP, for websites
|
|
62
|
+
* ```
|
|
63
|
+
*/
|
|
64
|
+
export class ServerQuery {
|
|
65
|
+
#native;
|
|
66
|
+
#clientFiles;
|
|
67
|
+
#info = {};
|
|
68
|
+
#values = new Map();
|
|
69
|
+
#players = "list";
|
|
70
|
+
#pending = false;
|
|
71
|
+
#http = null;
|
|
72
|
+
/** @internal */
|
|
73
|
+
constructor(native, clientFiles) {
|
|
74
|
+
this.#native = native;
|
|
75
|
+
this.#clientFiles = clientFiles;
|
|
76
|
+
}
|
|
77
|
+
/** The gamemode's fields: set as a whole (`update` changes some). */
|
|
78
|
+
get info() {
|
|
79
|
+
return structuredClone(this.#info);
|
|
80
|
+
}
|
|
81
|
+
set info(info) {
|
|
82
|
+
this.#info = checkInfo(info);
|
|
83
|
+
this.#push();
|
|
84
|
+
}
|
|
85
|
+
/** Changes some of `info`, keeping the rest. */
|
|
86
|
+
update(info) {
|
|
87
|
+
this.info = { ...this.#info, ...info };
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* One of the gamemode's values (`"map"`, `"cops"`, `"event"`, ...), shown
|
|
91
|
+
* under `values`: a string (up to 256 characters), number, boolean or
|
|
92
|
+
* null. Up to 64 of them.
|
|
93
|
+
*/
|
|
94
|
+
set(key, value) {
|
|
95
|
+
checkText("a value's key", key, 64);
|
|
96
|
+
if (typeof value === "string")
|
|
97
|
+
checkText(`values.${key}`, value, MAX_VALUE);
|
|
98
|
+
else if (typeof value === "number" && !Number.isFinite(value))
|
|
99
|
+
throw new RangeError(`query: values.${key} must be finite`);
|
|
100
|
+
else if (value !== null && typeof value !== "number" && typeof value !== "boolean") {
|
|
101
|
+
throw new TypeError(`query: values.${key} must be a string, number, boolean or null`);
|
|
102
|
+
}
|
|
103
|
+
if (!this.#values.has(key) && this.#values.size >= 64)
|
|
104
|
+
throw new RangeError("query: 64 values at most");
|
|
105
|
+
if (this.#values.get(key) === value && this.#values.has(key))
|
|
106
|
+
return;
|
|
107
|
+
this.#values.set(key, value);
|
|
108
|
+
this.#push();
|
|
109
|
+
}
|
|
110
|
+
get(key) {
|
|
111
|
+
return this.#values.get(key);
|
|
112
|
+
}
|
|
113
|
+
delete(key) {
|
|
114
|
+
const had = this.#values.delete(key);
|
|
115
|
+
if (had)
|
|
116
|
+
this.#push();
|
|
117
|
+
return had;
|
|
118
|
+
}
|
|
119
|
+
/** The values, as an object (a copy). */
|
|
120
|
+
get values() {
|
|
121
|
+
return Object.fromEntries(this.#values);
|
|
122
|
+
}
|
|
123
|
+
/** The player list (`"list"`, the default), just how many are on (`"count"`), or neither. */
|
|
124
|
+
get players() {
|
|
125
|
+
return this.#players;
|
|
126
|
+
}
|
|
127
|
+
set players(p) {
|
|
128
|
+
if (!(p in PLAYERS))
|
|
129
|
+
throw new TypeError(`query: players must be "list", "count" or "none"`);
|
|
130
|
+
this.#players = p;
|
|
131
|
+
this.#push();
|
|
132
|
+
}
|
|
133
|
+
/** What a query gets now. */
|
|
134
|
+
get result() {
|
|
135
|
+
return JSON.parse(this.#native.queryJson());
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Serves the query over HTTP too, for websites: `GET /` (or `/query`)
|
|
139
|
+
* the same JSON a UDP query gets, `GET /logo` the logo. Any site may
|
|
140
|
+
* read them (CORS). Resolves once it's listening.
|
|
141
|
+
*/
|
|
142
|
+
http(options) {
|
|
143
|
+
if (this.#http)
|
|
144
|
+
throw new Error("query: HTTP is on already (close it first)");
|
|
145
|
+
const server = http.createServer((req, res) => this.#serve(req, res));
|
|
146
|
+
this.#http = server;
|
|
147
|
+
return new Promise((resolve, reject) => {
|
|
148
|
+
server.once("error", (e) => {
|
|
149
|
+
this.#http = null;
|
|
150
|
+
reject(e);
|
|
151
|
+
});
|
|
152
|
+
server.listen(options.port, options.host, () => resolve());
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
/** Stops serving HTTP. */
|
|
156
|
+
closeHttp() {
|
|
157
|
+
const server = this.#http;
|
|
158
|
+
this.#http = null;
|
|
159
|
+
if (!server)
|
|
160
|
+
return Promise.resolve();
|
|
161
|
+
return new Promise((resolve) => server.close(() => resolve()));
|
|
162
|
+
}
|
|
163
|
+
#serve(req, res) {
|
|
164
|
+
const url = (req.url ?? "/").split("?")[0];
|
|
165
|
+
const headers = { "Access-Control-Allow-Origin": "*" };
|
|
166
|
+
if (req.method !== "GET" && req.method !== "HEAD") {
|
|
167
|
+
res.writeHead(405, { ...headers, Allow: "GET, HEAD" }).end();
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
if (url === "/" || url === "/query") {
|
|
171
|
+
const body = this.#native.queryJson();
|
|
172
|
+
res.writeHead(200, { ...headers, "Content-Type": "application/json; charset=utf-8", "Cache-Control": "no-cache" });
|
|
173
|
+
res.end(req.method === "HEAD" ? undefined : body);
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
if (url === "/logo") {
|
|
177
|
+
const logo = JSON.parse(this.#native.queryJson()).branding.logo;
|
|
178
|
+
const file = logo && this.#clientFiles ? this.#logoPath(logo.sha256) : null;
|
|
179
|
+
if (!logo || !file) {
|
|
180
|
+
res.writeHead(404, headers).end();
|
|
181
|
+
return;
|
|
182
|
+
}
|
|
183
|
+
const etag = `"${logo.sha256}"`;
|
|
184
|
+
if (req.headers["if-none-match"] === etag) {
|
|
185
|
+
res.writeHead(304, { ...headers, ETag: etag }).end();
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
fs.readFile(file, (err, data) => {
|
|
189
|
+
if (err) {
|
|
190
|
+
res.writeHead(500, headers).end();
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
const type = data[0] === 0x89 ? "image/png" : "image/jpeg";
|
|
194
|
+
res.writeHead(200, { ...headers, "Content-Type": type, ETag: etag, "Cache-Control": "public, max-age=300" });
|
|
195
|
+
res.end(req.method === "HEAD" ? undefined : data);
|
|
196
|
+
});
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
res.writeHead(404, headers).end();
|
|
200
|
+
}
|
|
201
|
+
#logoPath(sha256) {
|
|
202
|
+
const f = this.#native.clientFiles().find((c) => c.sha256 === sha256);
|
|
203
|
+
return f && this.#clientFiles ? path.join(this.#clientFiles, f.path) : null;
|
|
204
|
+
}
|
|
205
|
+
// To the core, once per tick of changes.
|
|
206
|
+
#push() {
|
|
207
|
+
if (this.#pending)
|
|
208
|
+
return;
|
|
209
|
+
this.#pending = true;
|
|
210
|
+
queueMicrotask(() => {
|
|
211
|
+
this.#pending = false;
|
|
212
|
+
const fields = { ...this.#info };
|
|
213
|
+
if (this.#values.size)
|
|
214
|
+
fields.values = Object.fromEntries(this.#values);
|
|
215
|
+
const json = JSON.stringify(fields);
|
|
216
|
+
this.#native.setQuery(json === "{}" ? "" : json.slice(1, -1), PLAYERS[this.#players]);
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
|
package/dist/screeneffects.d.ts
CHANGED
|
@@ -24,6 +24,11 @@ type Spec = {
|
|
|
24
24
|
* client/src/script_things.cpp: add a new one to all three.
|
|
25
25
|
*/
|
|
26
26
|
export declare const BUILT_IN_SCREEN_EFFECTS: Readonly<Record<string, Readonly<ScreenEffectParams>>>;
|
|
27
|
+
/** Effects as they were (`ScreenEffects.snapshot` / `save`), to go back to. */
|
|
28
|
+
export interface ScreenEffectsSnapshot {
|
|
29
|
+
/** Back to them: those on now that weren't in it go, they come back as they were. */
|
|
30
|
+
restore(fadeMs?: number): void;
|
|
31
|
+
}
|
|
27
32
|
/**
|
|
28
33
|
* A full-screen effect on one player's screen, or on everyone's
|
|
29
34
|
* (`player.screenEffects.add`, `server.screenEffects.add`): a pixel shader
|
|
@@ -43,6 +48,10 @@ export declare class ScreenEffect {
|
|
|
43
48
|
set(params: ScreenEffectParams): this;
|
|
44
49
|
/** Takes it off, fading out over `fadeMs` (default 0: at once). */
|
|
45
50
|
remove(fadeMs?: number): void;
|
|
51
|
+
/** @internal On again (`ScreenEffects.restore`), with these parameters. */
|
|
52
|
+
revive(params: ScreenEffectParams, fadeMs: number): void;
|
|
53
|
+
/** @internal Its parameters as they are (`ScreenEffects.save`). */
|
|
54
|
+
snapshot(): ScreenEffectParams;
|
|
46
55
|
/** @internal */
|
|
47
56
|
spec(fadeMs: number): Spec;
|
|
48
57
|
}
|
|
@@ -93,6 +102,33 @@ export declare class ScreenEffects {
|
|
|
93
102
|
get list(): ScreenEffect[];
|
|
94
103
|
/** Takes every one off, fading out over `fadeMs`. */
|
|
95
104
|
clear(fadeMs?: number): void;
|
|
105
|
+
/**
|
|
106
|
+
* The effects on now, with their parameters, to go back to: `restore()`
|
|
107
|
+
* on what this returns. Doesn't touch what `save()` remembers, so a
|
|
108
|
+
* cutscene can take its own (as `Mission.cinematic` does).
|
|
109
|
+
*/
|
|
110
|
+
snapshot(): ScreenEffectsSnapshot;
|
|
111
|
+
/**
|
|
112
|
+
* Remembers the effects on now, with their parameters, for `restore()`
|
|
113
|
+
* (replacing what was saved before). Returns the snapshot too.
|
|
114
|
+
*
|
|
115
|
+
* ```ts
|
|
116
|
+
* player.screenEffects.save();
|
|
117
|
+
* player.screenEffects.clear(300);
|
|
118
|
+
* player.screenEffects.add("tiltshift"); // the scene's own
|
|
119
|
+
* // ...
|
|
120
|
+
* player.screenEffects.restore(500); // theirs back, the scene's gone
|
|
121
|
+
* ```
|
|
122
|
+
*/
|
|
123
|
+
save(): ScreenEffectsSnapshot;
|
|
124
|
+
/**
|
|
125
|
+
* Back to what `save()` last remembered, whatever happened since
|
|
126
|
+
* (cleared, reset, others added): those on now that weren't saved go, and
|
|
127
|
+
* the saved ones come back as they were (the same `ScreenEffect`s, so code
|
|
128
|
+
* holding them carries on), fading over `fadeMs`. Nothing saved: every one
|
|
129
|
+
* goes. The save stays, to restore again.
|
|
130
|
+
*/
|
|
131
|
+
restore(fadeMs?: number): void;
|
|
96
132
|
/** @internal A player joined: everyone's on their screen too. */
|
|
97
133
|
joined(player: Player): void;
|
|
98
134
|
}
|
package/dist/screeneffects.js
CHANGED
|
@@ -128,6 +128,16 @@ export class ScreenEffect {
|
|
|
128
128
|
this.#active = false;
|
|
129
129
|
this.#send(null, Math.max(0, Math.trunc(fadeMs)));
|
|
130
130
|
}
|
|
131
|
+
/** @internal On again (`ScreenEffects.restore`), with these parameters. */
|
|
132
|
+
revive(params, fadeMs) {
|
|
133
|
+
this.#params = structuredClone(params);
|
|
134
|
+
this.#active = true;
|
|
135
|
+
this.#send(this.spec(fadeMs), 0);
|
|
136
|
+
}
|
|
137
|
+
/** @internal Its parameters as they are (`ScreenEffects.save`). */
|
|
138
|
+
snapshot() {
|
|
139
|
+
return structuredClone(this.#params);
|
|
140
|
+
}
|
|
131
141
|
/** @internal */
|
|
132
142
|
spec(fadeMs) {
|
|
133
143
|
const e = encode(this.#params, this.#sizes);
|
|
@@ -193,9 +203,14 @@ export class ScreenEffects {
|
|
|
193
203
|
throw new ReferenceError(`no screen effect or client file "${effect}"`);
|
|
194
204
|
}
|
|
195
205
|
const id = this.#next++;
|
|
196
|
-
|
|
206
|
+
// (Its first send comes from its constructor, before `added` is set:
|
|
207
|
+
// the list gets it below.)
|
|
208
|
+
let added;
|
|
209
|
+
added = new ScreenEffect(effect, shader, params, options, (spec, fadeMs) => {
|
|
197
210
|
if (!spec)
|
|
198
211
|
this.#effects.delete(id);
|
|
212
|
+
else if (added)
|
|
213
|
+
this.#effects.set(id, added);
|
|
199
214
|
for (const p of this.#targets())
|
|
200
215
|
this.#sendTo(p, id, spec, fadeMs);
|
|
201
216
|
});
|
|
@@ -234,6 +249,52 @@ export class ScreenEffects {
|
|
|
234
249
|
for (const e of this.list)
|
|
235
250
|
e.remove(fadeMs);
|
|
236
251
|
}
|
|
252
|
+
/**
|
|
253
|
+
* The effects on now, with their parameters, to go back to: `restore()`
|
|
254
|
+
* on what this returns. Doesn't touch what `save()` remembers, so a
|
|
255
|
+
* cutscene can take its own (as `Mission.cinematic` does).
|
|
256
|
+
*/
|
|
257
|
+
snapshot() {
|
|
258
|
+
const saved = this.list.map((effect) => ({ effect, params: effect.snapshot() }));
|
|
259
|
+
return { restore: (fadeMs = 0) => this.#restore(saved, fadeMs) };
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Remembers the effects on now, with their parameters, for `restore()`
|
|
263
|
+
* (replacing what was saved before). Returns the snapshot too.
|
|
264
|
+
*
|
|
265
|
+
* ```ts
|
|
266
|
+
* player.screenEffects.save();
|
|
267
|
+
* player.screenEffects.clear(300);
|
|
268
|
+
* player.screenEffects.add("tiltshift"); // the scene's own
|
|
269
|
+
* // ...
|
|
270
|
+
* player.screenEffects.restore(500); // theirs back, the scene's gone
|
|
271
|
+
* ```
|
|
272
|
+
*/
|
|
273
|
+
save() {
|
|
274
|
+
return (this.#saved = this.snapshot());
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Back to what `save()` last remembered, whatever happened since
|
|
278
|
+
* (cleared, reset, others added): those on now that weren't saved go, and
|
|
279
|
+
* the saved ones come back as they were (the same `ScreenEffect`s, so code
|
|
280
|
+
* holding them carries on), fading over `fadeMs`. Nothing saved: every one
|
|
281
|
+
* goes. The save stays, to restore again.
|
|
282
|
+
*/
|
|
283
|
+
restore(fadeMs = 0) {
|
|
284
|
+
if (this.#saved)
|
|
285
|
+
this.#saved.restore(fadeMs);
|
|
286
|
+
else
|
|
287
|
+
this.clear(fadeMs);
|
|
288
|
+
}
|
|
289
|
+
#saved = null;
|
|
290
|
+
#restore(saved, fadeMs) {
|
|
291
|
+
const keep = new Set(saved.map((s) => s.effect));
|
|
292
|
+
for (const e of this.list)
|
|
293
|
+
if (!keep.has(e))
|
|
294
|
+
e.remove(fadeMs);
|
|
295
|
+
for (const { effect, params } of saved)
|
|
296
|
+
effect.revive(params, effect.active ? 0 : fadeMs);
|
|
297
|
+
}
|
|
237
298
|
/** @internal A player joined: everyone's on their screen too. */
|
|
238
299
|
joined(player) {
|
|
239
300
|
for (const [id, e] of this.#effects)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screeneffects.js","sourceRoot":"","sources":["../src/screeneffects.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"screeneffects.js","sourceRoot":"","sources":["../src/screeneffects.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { type WeaponViolationReason } from "./native.js";
|
|
2
|
+
import { ServerQuery, type QueryInfo, type QueryPlayers, type QueryHttpOptions } from "./query.js";
|
|
3
|
+
import type { QueryValue } from "./query-client.js";
|
|
2
4
|
import { Player, type Vector3 } from "./player.js";
|
|
3
5
|
import { Vehicle } from "./vehicle.js";
|
|
4
6
|
import { Ped, type PedSettings } from "./ped.js";
|
|
@@ -116,6 +118,17 @@ export interface ServerOptions {
|
|
|
116
118
|
clientFiles?: string;
|
|
117
119
|
/** How the server looks to joining players: see `Branding`. */
|
|
118
120
|
branding?: Branding;
|
|
121
|
+
/**
|
|
122
|
+
* What the server tells anyone who asks without joining (server lists,
|
|
123
|
+
* the game's browser): the gamemode's fields, values and how much of the
|
|
124
|
+
* player list to show, and `http` to serve it over HTTP too. See
|
|
125
|
+
* `server.query`.
|
|
126
|
+
*/
|
|
127
|
+
query?: QueryInfo & {
|
|
128
|
+
values?: Record<string, QueryValue>;
|
|
129
|
+
players?: QueryPlayers;
|
|
130
|
+
http?: QueryHttpOptions;
|
|
131
|
+
};
|
|
119
132
|
}
|
|
120
133
|
/**
|
|
121
134
|
* The server's look, sent to players first thing as they join: the loading
|
|
@@ -470,6 +483,8 @@ export declare class Server {
|
|
|
470
483
|
readonly options: Readonly<ServerOptions>;
|
|
471
484
|
/** Operator console on stdin; add commands with `server.console.command()`. */
|
|
472
485
|
readonly console: Console;
|
|
486
|
+
/** The query: what anyone can learn without joining (see `ServerQuery`). */
|
|
487
|
+
readonly query: ServerQuery;
|
|
473
488
|
/** JavaScript run (sandboxed) in every player's game: see `ClientScripts`. */
|
|
474
489
|
readonly clientScripts: ClientScripts;
|
|
475
490
|
/** The pause menu's map, everyone's: see `GameMap`. */
|
package/dist/server.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { native } from "./native.js";
|
|
2
|
+
import { ServerQuery } from "./query.js";
|
|
2
3
|
import { Player } from "./player.js";
|
|
3
4
|
import { Vehicle } from "./vehicle.js";
|
|
4
5
|
import { Ped, setPedSpeaker } from "./ped.js";
|
|
@@ -37,6 +38,8 @@ export class Server {
|
|
|
37
38
|
options;
|
|
38
39
|
/** Operator console on stdin; add commands with `server.console.command()`. */
|
|
39
40
|
console;
|
|
41
|
+
/** The query: what anyone can learn without joining (see `ServerQuery`). */
|
|
42
|
+
query;
|
|
40
43
|
/** JavaScript run (sandboxed) in every player's game: see `ClientScripts`. */
|
|
41
44
|
clientScripts;
|
|
42
45
|
/** The pause menu's map, everyone's: see `GameMap`. */
|
|
@@ -411,6 +414,18 @@ export class Server {
|
|
|
411
414
|
this.clientScripts = new ClientScripts(this.#native);
|
|
412
415
|
if (options.branding)
|
|
413
416
|
this.branding = options.branding;
|
|
417
|
+
this.query = new ServerQuery(this.#native, options.clientFiles);
|
|
418
|
+
if (options.query) {
|
|
419
|
+
const { values, players, http, ...info } = options.query;
|
|
420
|
+
this.query.info = info;
|
|
421
|
+
for (const [k, v] of Object.entries(values ?? {}))
|
|
422
|
+
this.query.set(k, v);
|
|
423
|
+
if (players)
|
|
424
|
+
this.query.players = players;
|
|
425
|
+
if (http) {
|
|
426
|
+
this.query.http(http).catch((e) => console.error(`query: HTTP on port ${http.port}: ${e.message}`));
|
|
427
|
+
}
|
|
428
|
+
}
|
|
414
429
|
this.map = new GameMap(this.#native, -1);
|
|
415
430
|
let nextDraw = 1_000_000; // apart from players' own ids
|
|
416
431
|
this.draw = new ServerDraw(this.#native, () => this.players, () => nextDraw++);
|
|
@@ -500,6 +515,7 @@ export class Server {
|
|
|
500
515
|
this.#checkpointTimer = null;
|
|
501
516
|
}
|
|
502
517
|
this.console.stop();
|
|
518
|
+
void this.query.closeHttp();
|
|
503
519
|
this.#native.shutdown();
|
|
504
520
|
}
|
|
505
521
|
// ---- Events -----------------------------------------------------------------
|