@meowpanel/api 0.15.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.
Files changed (44) hide show
  1. package/README.md +1 -1
  2. package/esm/mod.d.ts +3 -3
  3. package/esm/mod.d.ts.map +1 -1
  4. package/esm/mod.js +1 -1
  5. package/esm/src/client.d.ts +1 -1
  6. package/esm/src/client.js +1 -1
  7. package/esm/src/http.d.ts +11 -3
  8. package/esm/src/http.d.ts.map +1 -1
  9. package/esm/src/http.js +25 -15
  10. package/esm/src/resources/servers/activity.d.ts +16 -1
  11. package/esm/src/resources/servers/activity.d.ts.map +1 -1
  12. package/esm/src/resources/servers/activity.js +10 -1
  13. package/esm/src/resources/servers/connection.d.ts +80 -38
  14. package/esm/src/resources/servers/connection.d.ts.map +1 -1
  15. package/esm/src/resources/servers/connection.js +115 -74
  16. package/esm/src/resources/servers/node-client.d.ts +5 -4
  17. package/esm/src/resources/servers/node-client.d.ts.map +1 -1
  18. package/esm/src/resources/servers/node-client.js +6 -10
  19. package/esm/src/resources/servers/server.d.ts +1 -1
  20. package/esm/src/resources/servers/server.js +3 -3
  21. package/esm/src/resources/servers/types.d.ts +6 -1
  22. package/esm/src/resources/servers/types.d.ts.map +1 -1
  23. package/package.json +1 -1
  24. package/script/mod.d.ts +3 -3
  25. package/script/mod.d.ts.map +1 -1
  26. package/script/mod.js +1 -1
  27. package/script/src/client.d.ts +1 -1
  28. package/script/src/client.js +1 -1
  29. package/script/src/http.d.ts +11 -3
  30. package/script/src/http.d.ts.map +1 -1
  31. package/script/src/http.js +25 -15
  32. package/script/src/resources/servers/activity.d.ts +16 -1
  33. package/script/src/resources/servers/activity.d.ts.map +1 -1
  34. package/script/src/resources/servers/activity.js +9 -0
  35. package/script/src/resources/servers/connection.d.ts +80 -38
  36. package/script/src/resources/servers/connection.d.ts.map +1 -1
  37. package/script/src/resources/servers/connection.js +115 -74
  38. package/script/src/resources/servers/node-client.d.ts +5 -4
  39. package/script/src/resources/servers/node-client.d.ts.map +1 -1
  40. package/script/src/resources/servers/node-client.js +6 -10
  41. package/script/src/resources/servers/server.d.ts +1 -1
  42. package/script/src/resources/servers/server.js +3 -3
  43. package/script/src/resources/servers/types.d.ts +6 -1
  44. 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 output, power state changes, and resource utilization.
10
- * Also maintains a rolling buffer of console output lines in {@link output}, pre-populated
11
- * with recent history fetched from the node on {@link open}.
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, console lines the
15
- * daemon still holds from the gap are appended to {@link output} and emitted as `console_output`.
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.output is the full rolling buffer of console lines
29
- * // Live lines are appended automatically as they arrive over SSE
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
- getToken;
39
- /** Maximum number of console output lines retained in {@link ServerConnection.output}. */
40
- static maxOutputLines = 1024;
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 console lines held back while the post-reconnect history is merged in. */
51
- pendingOutput;
50
+ /** Live entries held back while the post-reconnect history is merged in. */
51
+ pendingEntries;
52
52
  /**
53
- * Rolling buffer of console output lines, capped at {@link ServerConnection.maxOutputLines}.
53
+ * The console timeline, oldest first, capped at the daemon's timeline size.
54
54
  *
55
- * Pre-populated with recent history from the node when {@link open} is called,
56
- * then appended to live as `console_output` SSE events arrive.
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.output`.
58
+ * Use as a reactive store: `$conn.entries`.
59
59
  */
60
- output = [];
60
+ entries = [];
61
61
  /** @internal */
62
- constructor(serverId, nodeUrl, getToken) {
62
+ constructor(serverId, nodeUrl, http) {
63
63
  super();
64
64
  this.serverId = serverId;
65
65
  this.nodeUrl = nodeUrl;
66
- this.getToken = getToken;
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
- * Fetch console history and open the SSE stream.
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
- * Populates {@link output} with recent history from the node, then begins streaming
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.output = history;
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, { idleTimeoutMs: ServerConnection.idleTimeoutMs });
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.resyncOutput(sse);
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.pendingOutput = undefined;
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 fetch(`${this.nodeUrl}/api/servers/${this.serverId}/logs?size=${ServerConnection.historyLines}`, { headers: { Authorization: `Bearer ${this.getToken()}` } });
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 console lines printed while the stream was down.
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 lines are held back until the history arrives, because the history snapshot may
158
- * already contain them. Lines that fell out of the daemon's history window are lost.
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 resyncOutput(sse) {
161
- const pending = [];
162
- this.pendingOutput = pending;
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.pendingOutput !== pending)
174
+ if (this.sse !== sse || this.pendingEntries !== pending)
165
175
  return;
166
- this.pendingOutput = undefined;
167
- const missed = history ? history.slice(overlapLength(this.output, history)) : [];
168
- const live = history ? pending.slice(overlapLength(history, pending)) : pending;
169
- for (const line of [...missed, ...live])
170
- this.appendOutput(line);
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
- appendOutput(line) {
173
- this.output.push(line);
174
- if (this.output.length > ServerConnection.maxOutputLines) {
175
- this.output.shift();
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('console_output', line);
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 'console_output': {
195
- if (typeof parsed !== 'string')
210
+ case 'console_entry': {
211
+ const entry = parseConsoleEntry(parsed);
212
+ if (!entry)
196
213
  return;
197
- payload = parsed;
198
- break;
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 'install_output':
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;
@@ -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
- /** Length of the longest suffix of `head` that is also a prefix of `tail`. */
298
- function overlapLength(head, tail) {
299
- for (let k = Math.min(head.length, tail.length); k > 0; k--) {
300
- let match = true;
301
- for (let i = 0; i < k; i++) {
302
- if (head[head.length - k + i] !== tail[i]) {
303
- match = false;
304
- break;
305
- }
306
- }
307
- if (match)
308
- return k;
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. All requests carry the scoped bearer token and throw {@link ApiError} on
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 token;
15
+ private readonly http;
15
16
  private readonly resolveNodeUrl;
16
17
  private nodeUrl?;
17
- constructor(serverId: NanoID, token: string, resolveNodeUrl: () => Promise<string>);
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,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,cAAc;IALhC,OAAO,CAAC,OAAO,CAAC,CAAS;gBAGP,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,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;IAiB/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"}
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. All requests carry the scoped bearer token and throw {@link ApiError} on
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
- token;
17
+ http;
18
18
  resolveNodeUrl;
19
19
  nodeUrl;
20
- constructor(serverId, token, resolveNodeUrl) {
20
+ constructor(serverId, http, resolveNodeUrl) {
21
21
  this.serverId = serverId;
22
- this.token = token;
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 url = (await this.base()) + endpoint;
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('console_output', (line) => console.log(line));
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('console_output', (line) => console.log(line));
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.getToken(), resolveNodeUrl);
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, () => this.http.getToken());
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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"}