@meowpanel/api 0.14.0 → 0.16.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.
- package/README.md +1 -1
- package/esm/mod.d.ts +3 -3
- package/esm/mod.d.ts.map +1 -1
- package/esm/mod.js +1 -1
- package/esm/src/client.d.ts +1 -1
- package/esm/src/client.js +1 -1
- package/esm/src/http.d.ts +11 -3
- package/esm/src/http.d.ts.map +1 -1
- package/esm/src/http.js +25 -15
- package/esm/src/resources/servers/activity.d.ts +16 -1
- package/esm/src/resources/servers/activity.d.ts.map +1 -1
- package/esm/src/resources/servers/activity.js +10 -1
- package/esm/src/resources/servers/backups.d.ts +7 -7
- package/esm/src/resources/servers/backups.d.ts.map +1 -1
- package/esm/src/resources/servers/backups.js +8 -8
- package/esm/src/resources/servers/connection.d.ts +82 -40
- package/esm/src/resources/servers/connection.d.ts.map +1 -1
- package/esm/src/resources/servers/connection.js +117 -76
- package/esm/src/resources/servers/node-client.d.ts +5 -4
- package/esm/src/resources/servers/node-client.d.ts.map +1 -1
- package/esm/src/resources/servers/node-client.js +6 -10
- package/esm/src/resources/servers/server.d.ts +1 -1
- package/esm/src/resources/servers/server.js +3 -3
- package/esm/src/resources/servers/types.d.ts +6 -1
- package/esm/src/resources/servers/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/script/mod.d.ts +3 -3
- package/script/mod.d.ts.map +1 -1
- package/script/mod.js +1 -1
- package/script/src/client.d.ts +1 -1
- package/script/src/client.js +1 -1
- package/script/src/http.d.ts +11 -3
- package/script/src/http.d.ts.map +1 -1
- package/script/src/http.js +25 -15
- package/script/src/resources/servers/activity.d.ts +16 -1
- package/script/src/resources/servers/activity.d.ts.map +1 -1
- package/script/src/resources/servers/activity.js +9 -0
- package/script/src/resources/servers/backups.d.ts +7 -7
- package/script/src/resources/servers/backups.d.ts.map +1 -1
- package/script/src/resources/servers/backups.js +8 -8
- package/script/src/resources/servers/connection.d.ts +82 -40
- package/script/src/resources/servers/connection.d.ts.map +1 -1
- package/script/src/resources/servers/connection.js +117 -76
- package/script/src/resources/servers/node-client.d.ts +5 -4
- package/script/src/resources/servers/node-client.d.ts.map +1 -1
- package/script/src/resources/servers/node-client.js +6 -10
- package/script/src/resources/servers/server.d.ts +1 -1
- package/script/src/resources/servers/server.js +3 -3
- package/script/src/resources/servers/types.d.ts +6 -1
- package/script/src/resources/servers/types.d.ts.map +1 -1
|
@@ -3,16 +3,18 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.ServerConnection = void 0;
|
|
4
4
|
const reactive_js_1 = require("../../reactive.js");
|
|
5
5
|
const sse_js_1 = require("../../sse.js");
|
|
6
|
+
const transferStatuses = ['pending', 'processing', 'canceling', 'canceled', 'failed', 'completed'];
|
|
6
7
|
/**
|
|
7
8
|
* A real-time SSE connection to a specific server on its Whisker node daemon.
|
|
8
9
|
*
|
|
9
|
-
* Emits typed events for console
|
|
10
|
-
* Also
|
|
11
|
-
*
|
|
10
|
+
* Emits typed events for the console timeline, power state changes, and resource utilization.
|
|
11
|
+
* Also keeps the console timeline in {@link entries}, starting with the history the node holds,
|
|
12
|
+
* fetched on {@link open}.
|
|
12
13
|
*
|
|
13
14
|
* The stream reconnects on its own after the daemon restarts or the network drops. Track it
|
|
14
|
-
* through {@link state} or the `connection_state` event. After a reconnect,
|
|
15
|
-
*
|
|
15
|
+
* through {@link state} or the `connection_state` event. After a reconnect, or when the daemon
|
|
16
|
+
* dropped entries for a viewer that fell behind, the missing entries are fetched and appended to
|
|
17
|
+
* {@link entries} in order, and emitted as `console_entry`.
|
|
16
18
|
*
|
|
17
19
|
* Obtain a connection via `Server.createConnection`.
|
|
18
20
|
*
|
|
@@ -25,8 +27,8 @@ const sse_js_1 = require("../../sse.js");
|
|
|
25
27
|
*
|
|
26
28
|
* await conn.open();
|
|
27
29
|
*
|
|
28
|
-
* // Reactive: $conn.
|
|
29
|
-
* // Live
|
|
30
|
+
* // Reactive: $conn.entries is the console timeline
|
|
31
|
+
* // Live entries are appended automatically as they arrive over SSE
|
|
30
32
|
*
|
|
31
33
|
* // Later...
|
|
32
34
|
* conn.close();
|
|
@@ -35,11 +37,9 @@ const sse_js_1 = require("../../sse.js");
|
|
|
35
37
|
class ServerConnection extends reactive_js_1.ReactiveResource {
|
|
36
38
|
serverId;
|
|
37
39
|
nodeUrl;
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
static
|
|
41
|
-
/** Console history lines fetched from the node on open and after each reconnect. */
|
|
42
|
-
static historyLines = 100;
|
|
40
|
+
http;
|
|
41
|
+
/** How many entries {@link ServerConnection.entries} keeps, the size of the daemon's timeline. */
|
|
42
|
+
static maxEntries = 1000;
|
|
43
43
|
/**
|
|
44
44
|
* Whisker sends a keepalive every 20 seconds, so a stream silent for this long is dead even
|
|
45
45
|
* if the socket never closed.
|
|
@@ -47,23 +47,23 @@ class ServerConnection extends reactive_js_1.ReactiveResource {
|
|
|
47
47
|
static idleTimeoutMs = 45_000;
|
|
48
48
|
listeners = new Map();
|
|
49
49
|
sse;
|
|
50
|
-
/** Live
|
|
51
|
-
|
|
50
|
+
/** Live entries held back while the post-reconnect history is merged in. */
|
|
51
|
+
pendingEntries;
|
|
52
52
|
/**
|
|
53
|
-
*
|
|
53
|
+
* The console timeline, oldest first, capped at the daemon's timeline size.
|
|
54
54
|
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
55
|
+
* Starts with the history the node holds when {@link open} is called, then grows as
|
|
56
|
+
* `console_entry` events arrive.
|
|
57
57
|
*
|
|
58
|
-
* Use as a reactive store: `$conn.
|
|
58
|
+
* Use as a reactive store: `$conn.entries`.
|
|
59
59
|
*/
|
|
60
|
-
|
|
60
|
+
entries = [];
|
|
61
61
|
/** @internal */
|
|
62
|
-
constructor(serverId, nodeUrl,
|
|
62
|
+
constructor(serverId, nodeUrl, http) {
|
|
63
63
|
super();
|
|
64
64
|
this.serverId = serverId;
|
|
65
65
|
this.nodeUrl = nodeUrl;
|
|
66
|
-
this.
|
|
66
|
+
this.http = http;
|
|
67
67
|
}
|
|
68
68
|
/** State of the stream to the daemon. */
|
|
69
69
|
get state() {
|
|
@@ -74,10 +74,16 @@ class ServerConnection extends reactive_js_1.ReactiveResource {
|
|
|
74
74
|
return this.state === 'connected';
|
|
75
75
|
}
|
|
76
76
|
/**
|
|
77
|
-
*
|
|
77
|
+
* The auth issuer id the connection's token belongs to, which is how {@link ConsoleEntry.issuerId}
|
|
78
|
+
* names the viewer. `undefined` if the token does not say.
|
|
79
|
+
*/
|
|
80
|
+
get viewerIssuerId() {
|
|
81
|
+
return tokenSubject(this.http.getToken());
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Fetch the console history and open the SSE stream.
|
|
78
85
|
*
|
|
79
|
-
*
|
|
80
|
-
* live events.
|
|
86
|
+
* Fills {@link entries} with the history the node holds, then begins streaming live events.
|
|
81
87
|
*
|
|
82
88
|
* Only one stream is maintained at a time.
|
|
83
89
|
*
|
|
@@ -87,16 +93,18 @@ class ServerConnection extends reactive_js_1.ReactiveResource {
|
|
|
87
93
|
this.close();
|
|
88
94
|
const history = await this.fetchHistory();
|
|
89
95
|
if (history) {
|
|
90
|
-
this.
|
|
96
|
+
this.entries = history.slice(-ServerConnection.maxEntries);
|
|
91
97
|
this.notify();
|
|
92
98
|
}
|
|
93
99
|
const url = `${this.nodeUrl}/api/servers/${this.serverId}/sse`;
|
|
94
|
-
const sse = new sse_js_1.SseConnection(url, this.getToken, {
|
|
100
|
+
const sse = new sse_js_1.SseConnection(url, () => this.http.getToken(), {
|
|
101
|
+
idleTimeoutMs: ServerConnection.idleTimeoutMs,
|
|
102
|
+
});
|
|
95
103
|
this.sse = sse;
|
|
96
104
|
let previous = sse.state;
|
|
97
105
|
sse.on('state', (state) => {
|
|
98
106
|
if (state === 'connected' && previous === 'reconnecting')
|
|
99
|
-
this.
|
|
107
|
+
this.resyncEntries(sse);
|
|
100
108
|
previous = state;
|
|
101
109
|
this.notify();
|
|
102
110
|
this.emit('connection_state', state);
|
|
@@ -107,7 +115,7 @@ class ServerConnection extends reactive_js_1.ReactiveResource {
|
|
|
107
115
|
close() {
|
|
108
116
|
const sse = this.sse;
|
|
109
117
|
this.sse = undefined;
|
|
110
|
-
this.
|
|
118
|
+
this.pendingEntries = undefined;
|
|
111
119
|
sse?.disconnect();
|
|
112
120
|
sse?.removeAllListeners();
|
|
113
121
|
}
|
|
@@ -141,41 +149,49 @@ class ServerConnection extends reactive_js_1.ReactiveResource {
|
|
|
141
149
|
}
|
|
142
150
|
async fetchHistory() {
|
|
143
151
|
try {
|
|
144
|
-
const res = await
|
|
152
|
+
const res = await this.http.fetchUrl(`${this.nodeUrl}/api/servers/${this.serverId}/logs`);
|
|
145
153
|
if (!res.ok)
|
|
146
154
|
return undefined;
|
|
147
155
|
const json = (await res.json());
|
|
148
|
-
return json.data ?? [];
|
|
156
|
+
return (json.data ?? []).map(parseConsoleEntry).filter((e) => e !== undefined);
|
|
149
157
|
}
|
|
150
158
|
catch {
|
|
151
159
|
return undefined;
|
|
152
160
|
}
|
|
153
161
|
}
|
|
154
162
|
/**
|
|
155
|
-
* Fill in the
|
|
163
|
+
* Fill in the entries missed while the stream was down, or that the daemon dropped, from the
|
|
164
|
+
* history. `first` is a live entry that came after the gap.
|
|
156
165
|
*
|
|
157
|
-
* Live
|
|
158
|
-
*
|
|
166
|
+
* Live entries are held back until the history arrives, so the gap comes before them. A
|
|
167
|
+
* daemon whose newest entry is older than the last one seen has lost its timeline, and its
|
|
168
|
+
* history is taken as new.
|
|
159
169
|
*/
|
|
160
|
-
async
|
|
161
|
-
const pending = [];
|
|
162
|
-
this.
|
|
170
|
+
async resyncEntries(sse, first) {
|
|
171
|
+
const pending = first ? [first] : [];
|
|
172
|
+
this.pendingEntries = pending;
|
|
163
173
|
const history = await this.fetchHistory();
|
|
164
|
-
if (this.sse !== sse || this.
|
|
174
|
+
if (this.sse !== sse || this.pendingEntries !== pending)
|
|
165
175
|
return;
|
|
166
|
-
this.
|
|
167
|
-
const
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
176
|
+
this.pendingEntries = undefined;
|
|
177
|
+
const newest = history?.at(-1)?.seq ?? 0;
|
|
178
|
+
if (newest < this.lastSeq)
|
|
179
|
+
this.entries = [];
|
|
180
|
+
for (const entry of [...(history ?? []), ...pending])
|
|
181
|
+
this.appendEntry(entry);
|
|
182
|
+
}
|
|
183
|
+
get lastSeq() {
|
|
184
|
+
return this.entries.at(-1)?.seq ?? 0;
|
|
171
185
|
}
|
|
172
|
-
|
|
173
|
-
this.
|
|
174
|
-
|
|
175
|
-
|
|
186
|
+
appendEntry(entry) {
|
|
187
|
+
if (entry.seq <= this.lastSeq)
|
|
188
|
+
return;
|
|
189
|
+
this.entries.push(entry);
|
|
190
|
+
if (this.entries.length > ServerConnection.maxEntries) {
|
|
191
|
+
this.entries.shift();
|
|
176
192
|
}
|
|
177
193
|
this.notify();
|
|
178
|
-
this.emit('
|
|
194
|
+
this.emit('console_entry', entry);
|
|
179
195
|
}
|
|
180
196
|
emit(event, payload) {
|
|
181
197
|
this.listeners.get(event)?.forEach((h) => h(payload));
|
|
@@ -191,11 +207,19 @@ class ServerConnection extends reactive_js_1.ReactiveResource {
|
|
|
191
207
|
try {
|
|
192
208
|
const parsed = JSON.parse(rawData);
|
|
193
209
|
switch (event) {
|
|
194
|
-
case '
|
|
195
|
-
|
|
210
|
+
case 'console_entry': {
|
|
211
|
+
const entry = parseConsoleEntry(parsed);
|
|
212
|
+
if (!entry)
|
|
196
213
|
return;
|
|
197
|
-
|
|
198
|
-
|
|
214
|
+
if (this.pendingEntries)
|
|
215
|
+
this.pendingEntries.push(entry);
|
|
216
|
+
// A skipped number means the daemon dropped entries for a viewer that fell behind.
|
|
217
|
+
else if (this.sse && this.entries.length > 0 && entry.seq > this.lastSeq + 1) {
|
|
218
|
+
void this.resyncEntries(this.sse, entry);
|
|
219
|
+
}
|
|
220
|
+
else
|
|
221
|
+
this.appendEntry(entry);
|
|
222
|
+
return;
|
|
199
223
|
}
|
|
200
224
|
case 'status': {
|
|
201
225
|
if (typeof parsed !== 'string')
|
|
@@ -254,9 +278,13 @@ class ServerConnection extends reactive_js_1.ReactiveResource {
|
|
|
254
278
|
payload = '';
|
|
255
279
|
break;
|
|
256
280
|
}
|
|
257
|
-
case '
|
|
281
|
+
case 'transfer_status': {
|
|
282
|
+
if (!transferStatuses.includes(parsed))
|
|
283
|
+
return;
|
|
284
|
+
payload = parsed;
|
|
285
|
+
break;
|
|
286
|
+
}
|
|
258
287
|
case 'daemon_message':
|
|
259
|
-
case 'transfer_status':
|
|
260
288
|
case 'transfer_logs': {
|
|
261
289
|
if (typeof parsed !== 'string')
|
|
262
290
|
return;
|
|
@@ -264,10 +292,10 @@ class ServerConnection extends reactive_js_1.ReactiveResource {
|
|
|
264
292
|
break;
|
|
265
293
|
}
|
|
266
294
|
case 'backup_completed': {
|
|
267
|
-
if (typeof parsed?.
|
|
295
|
+
if (typeof parsed?.id !== 'string')
|
|
268
296
|
return;
|
|
269
297
|
payload = {
|
|
270
|
-
|
|
298
|
+
id: parsed.id,
|
|
271
299
|
isSuccessful: Boolean(parsed.is_successful),
|
|
272
300
|
checksum: typeof parsed.checksum === 'string' ? parsed.checksum : '',
|
|
273
301
|
checksumType: typeof parsed.checksum_type === 'string' ? parsed.checksum_type : '',
|
|
@@ -282,30 +310,43 @@ class ServerConnection extends reactive_js_1.ReactiveResource {
|
|
|
282
310
|
catch {
|
|
283
311
|
return;
|
|
284
312
|
}
|
|
285
|
-
if (event === 'console_output') {
|
|
286
|
-
const line = payload;
|
|
287
|
-
if (this.pendingOutput)
|
|
288
|
-
this.pendingOutput.push(line);
|
|
289
|
-
else
|
|
290
|
-
this.appendOutput(line);
|
|
291
|
-
return;
|
|
292
|
-
}
|
|
293
313
|
this.emit(event, payload);
|
|
294
314
|
}
|
|
295
315
|
}
|
|
296
316
|
exports.ServerConnection = ServerConnection;
|
|
297
|
-
/**
|
|
298
|
-
function
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
317
|
+
/** Map a raw timeline entry from the daemon, or `undefined` if it is not one. */
|
|
318
|
+
function parseConsoleEntry(raw) {
|
|
319
|
+
const r = raw;
|
|
320
|
+
if (typeof r?.seq !== 'number' || typeof r.kind !== 'string' || typeof r.time !== 'string')
|
|
321
|
+
return undefined;
|
|
322
|
+
const text = (key) => (typeof r[key] === 'string' && r[key] !== '' ? r[key] : undefined);
|
|
323
|
+
return {
|
|
324
|
+
seq: r.seq,
|
|
325
|
+
time: new Date(r.time),
|
|
326
|
+
kind: r.kind,
|
|
327
|
+
text: text('text'),
|
|
328
|
+
state: text('state'),
|
|
329
|
+
action: text('action'),
|
|
330
|
+
status: text('status'),
|
|
331
|
+
error: text('error'),
|
|
332
|
+
jobId: text('job'),
|
|
333
|
+
issuerId: text('issuer'),
|
|
334
|
+
activityId: text('activity'),
|
|
335
|
+
exitCode: typeof r.exit_code === 'number' ? r.exit_code : undefined,
|
|
336
|
+
outOfMemory: r.out_of_memory === true ? true : undefined,
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
/** The `sub` claim of a JWT, without verifying it. */
|
|
340
|
+
function tokenSubject(token) {
|
|
341
|
+
try {
|
|
342
|
+
const payload = token.split('.')[1];
|
|
343
|
+
if (!payload)
|
|
344
|
+
return undefined;
|
|
345
|
+
const json = atob(payload.replace(/-/g, '+').replace(/_/g, '/'));
|
|
346
|
+
const sub = JSON.parse(json).sub;
|
|
347
|
+
return typeof sub === 'string' ? sub : undefined;
|
|
348
|
+
}
|
|
349
|
+
catch {
|
|
350
|
+
return undefined;
|
|
309
351
|
}
|
|
310
|
-
return 0;
|
|
311
352
|
}
|
|
@@ -1,20 +1,21 @@
|
|
|
1
|
+
import type { HttpClient } from '../../http.js';
|
|
1
2
|
import type { NanoID } from '../../types.js';
|
|
2
3
|
/**
|
|
3
4
|
* Transport for direct calls to a server's Whisker node daemon.
|
|
4
5
|
*
|
|
5
6
|
* File operations, backups, jobs, and the live connection all bypass Nexus and talk
|
|
6
7
|
* to the node that hosts the server. The node URL is resolved lazily on first use and
|
|
7
|
-
* cached.
|
|
8
|
-
* non-2xx responses.
|
|
8
|
+
* cached. Requests go through the client's `fetch` with its current bearer token, so a
|
|
9
|
+
* refreshed token applies to them too, and throw {@link ApiError} on non-2xx responses.
|
|
9
10
|
*
|
|
10
11
|
* @internal
|
|
11
12
|
*/
|
|
12
13
|
export declare class NodeClient {
|
|
13
14
|
private readonly serverId;
|
|
14
|
-
private readonly
|
|
15
|
+
private readonly http;
|
|
15
16
|
private readonly resolveNodeUrl;
|
|
16
17
|
private nodeUrl?;
|
|
17
|
-
constructor(serverId: NanoID,
|
|
18
|
+
constructor(serverId: NanoID, http: HttpClient, resolveNodeUrl: () => Promise<string>);
|
|
18
19
|
/** Base URL for this server on its node, e.g. `https://node:8080/api/servers/<id>`. */
|
|
19
20
|
private base;
|
|
20
21
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-client.d.ts","sourceRoot":"","sources":["../../../../src/src/resources/servers/node-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C;;;;;;;;;GASG;AACH,qBAAa,UAAU;IAIrB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"node-client.d.ts","sourceRoot":"","sources":["../../../../src/src/resources/servers/node-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAE7C;;;;;;;;;GASG;AACH,qBAAa,UAAU;IAIrB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,cAAc;IALhC,OAAO,CAAC,OAAO,CAAC,CAAS;gBAGP,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,UAAU,EAChB,cAAc,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC;IAGvD,uFAAuF;YACzE,IAAI;IAKlB;;;;;OAKG;IACU,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAa/E,8DAA8D;IACjD,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,CAAC,CAAA;KAAE,CAAC;CAQ/F"}
|
|
@@ -7,19 +7,19 @@ const errors_js_1 = require("../../errors.js");
|
|
|
7
7
|
*
|
|
8
8
|
* File operations, backups, jobs, and the live connection all bypass Nexus and talk
|
|
9
9
|
* to the node that hosts the server. The node URL is resolved lazily on first use and
|
|
10
|
-
* cached.
|
|
11
|
-
* non-2xx responses.
|
|
10
|
+
* cached. Requests go through the client's `fetch` with its current bearer token, so a
|
|
11
|
+
* refreshed token applies to them too, and throw {@link ApiError} on non-2xx responses.
|
|
12
12
|
*
|
|
13
13
|
* @internal
|
|
14
14
|
*/
|
|
15
15
|
class NodeClient {
|
|
16
16
|
serverId;
|
|
17
|
-
|
|
17
|
+
http;
|
|
18
18
|
resolveNodeUrl;
|
|
19
19
|
nodeUrl;
|
|
20
|
-
constructor(serverId,
|
|
20
|
+
constructor(serverId, http, resolveNodeUrl) {
|
|
21
21
|
this.serverId = serverId;
|
|
22
|
-
this.
|
|
22
|
+
this.http = http;
|
|
23
23
|
this.resolveNodeUrl = resolveNodeUrl;
|
|
24
24
|
}
|
|
25
25
|
/** Base URL for this server on its node, e.g. `https://node:8080/api/servers/<id>`. */
|
|
@@ -35,11 +35,7 @@ class NodeClient {
|
|
|
35
35
|
* @param init Standard `RequestInit`; the bearer header is added automatically.
|
|
36
36
|
*/
|
|
37
37
|
async fetch(endpoint, init = {}) {
|
|
38
|
-
const
|
|
39
|
-
const res = await globalThis.fetch(url, {
|
|
40
|
-
...init,
|
|
41
|
-
headers: { 'Authorization': `Bearer ${this.token}`, ...init.headers },
|
|
42
|
-
});
|
|
38
|
+
const res = await this.http.fetchUrl((await this.base()) + endpoint, init);
|
|
43
39
|
if (!res.ok) {
|
|
44
40
|
let message = `HTTP ${res.status}`;
|
|
45
41
|
try {
|
|
@@ -74,7 +74,7 @@ export interface ServerBuild {
|
|
|
74
74
|
* await server.sendCommand('say Hello!');
|
|
75
75
|
*
|
|
76
76
|
* const conn = await server.createConnection();
|
|
77
|
-
* conn.on('
|
|
77
|
+
* conn.on('console_entry', (entry) => console.log(entry.text));
|
|
78
78
|
* await conn.open();
|
|
79
79
|
* ```
|
|
80
80
|
*/
|
|
@@ -27,7 +27,7 @@ const sub_users_js_1 = require("./sub-users.js");
|
|
|
27
27
|
* await server.sendCommand('say Hello!');
|
|
28
28
|
*
|
|
29
29
|
* const conn = await server.createConnection();
|
|
30
|
-
* conn.on('
|
|
30
|
+
* conn.on('console_entry', (entry) => console.log(entry.text));
|
|
31
31
|
* await conn.open();
|
|
32
32
|
* ```
|
|
33
33
|
*/
|
|
@@ -81,7 +81,7 @@ class Server extends reactive_js_1.ReactiveResource {
|
|
|
81
81
|
this.activity = new activity_js_1.ServerActivityManager(this.id, http);
|
|
82
82
|
this.subUsers = new sub_users_js_1.ServerUserManager(`/servers/${this.id}`, http);
|
|
83
83
|
this.features = new features_js_1.ServerFeaturesManager(this.id, http);
|
|
84
|
-
this.node = new node_client_js_1.NodeClient(this.id, http
|
|
84
|
+
this.node = new node_client_js_1.NodeClient(this.id, http, resolveNodeUrl);
|
|
85
85
|
this.files = new files_js_1.ServerFilesManager(this.node);
|
|
86
86
|
this.backups = new backups_js_1.ServerBackupsManager(this.node);
|
|
87
87
|
this.jobs = new jobs_js_1.ServerJobsManager(this.node);
|
|
@@ -175,7 +175,7 @@ class Server extends reactive_js_1.ReactiveResource {
|
|
|
175
175
|
*/
|
|
176
176
|
async createConnection() {
|
|
177
177
|
const nodeUrl = await this.resolveNodeUrl();
|
|
178
|
-
return new connection_js_1.ServerConnection(this.id, nodeUrl,
|
|
178
|
+
return new connection_js_1.ServerConnection(this.id, nodeUrl, this.http);
|
|
179
179
|
}
|
|
180
180
|
}
|
|
181
181
|
exports.Server = Server;
|
|
@@ -123,7 +123,7 @@ export interface ActivityJobLogSourceData {
|
|
|
123
123
|
export interface ActivityJobData {
|
|
124
124
|
id: string;
|
|
125
125
|
kind: string;
|
|
126
|
-
status: 'in_progress' | 'completed' | 'failed';
|
|
126
|
+
status: 'in_progress' | 'completed' | 'failed' | 'canceled';
|
|
127
127
|
progress: number | null;
|
|
128
128
|
message: string | null;
|
|
129
129
|
log_source: ActivityJobLogSourceData;
|
|
@@ -135,6 +135,11 @@ export interface ActivityJobData {
|
|
|
135
135
|
/** Raw API shape for an activity log entry. @internal */
|
|
136
136
|
export interface ActivityLogData {
|
|
137
137
|
id: string;
|
|
138
|
+
/**
|
|
139
|
+
* The id the node daemon gave an entry it reported, or `null` for one the API recorded.
|
|
140
|
+
* Present only with the `node_entry_id` include.
|
|
141
|
+
*/
|
|
142
|
+
node_entry_id?: string | null;
|
|
138
143
|
event: string;
|
|
139
144
|
server_id?: string | null;
|
|
140
145
|
node_id?: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/src/resources/servers/types.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/src/resources/servers/types.ts"],"names":[],"mappings":"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"}
|