@rise-maritime/keelson-js 0.6.0-alpha.282.dev.2 → 0.6.0-experimental.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/index.d.ts CHANGED
@@ -131,43 +131,6 @@ export declare function getInterfaceDefinition(interfaceAndVersion: string): {
131
131
  readonly options: {};
132
132
  };
133
133
  };
134
- } | {
135
- readonly name: "NavigationControl";
136
- readonly fullName: "keelson.interfaces.navigation_control.NavigationControl";
137
- readonly methods: {
138
- readonly load_route: {
139
- readonly name: "load_route";
140
- readonly requestType: import("./interfaces/NavigationControl").MessageFns<import("./interfaces/NavigationControl").LoadRouteRequest>;
141
- readonly requestStream: false;
142
- readonly responseType: import("./interfaces/NavigationControl").MessageFns<import("./interfaces/NavigationControl").LoadRouteResponse>;
143
- readonly responseStream: false;
144
- readonly options: {};
145
- };
146
- readonly set_guidance_order: {
147
- readonly name: "set_guidance_order";
148
- readonly requestType: import("./interfaces/NavigationControl").MessageFns<import("./interfaces/NavigationControl").SetGuidanceOrderRequest>;
149
- readonly requestStream: false;
150
- readonly responseType: import("./interfaces/NavigationControl").MessageFns<import("./interfaces/NavigationControl").SetGuidanceOrderResponse>;
151
- readonly responseStream: false;
152
- readonly options: {};
153
- };
154
- readonly set_voyage_status: {
155
- readonly name: "set_voyage_status";
156
- readonly requestType: import("./interfaces/NavigationControl").MessageFns<import("./interfaces/NavigationControl").SetVoyageStatusRequest>;
157
- readonly requestStream: false;
158
- readonly responseType: import("./interfaces/NavigationControl").MessageFns<import("./interfaces/NavigationControl").SetVoyageStatusResponse>;
159
- readonly responseStream: false;
160
- readonly options: {};
161
- };
162
- readonly get_navigation_state: {
163
- readonly name: "get_navigation_state";
164
- readonly requestType: import("./interfaces/NavigationControl").MessageFns<import("./interfaces/NavigationControl").GetNavigationStateRequest>;
165
- readonly requestStream: false;
166
- readonly responseType: import("./interfaces/NavigationState").MessageFns<import("./interfaces/NavigationState").NavigationState>;
167
- readonly responseStream: false;
168
- readonly options: {};
169
- };
170
- };
171
134
  } | {
172
135
  readonly name: "NetworkPingPong";
173
136
  readonly fullName: "keelson.interfaces.network_ping_pong.NetworkPingPong";
@@ -193,6 +156,14 @@ export declare function getInterfaceDefinition(interfaceAndVersion: string): {
193
156
  readonly responseStream: false;
194
157
  readonly options: {};
195
158
  };
159
+ readonly describe_file: {
160
+ readonly name: "describe_file";
161
+ readonly requestType: import("./interfaces/ReplayControl").MessageFns<import("./interfaces/ReplayControl").DescribeFileRequest>;
162
+ readonly requestStream: false;
163
+ readonly responseType: import("./interfaces/ReplayControl").MessageFns<import("./interfaces/ReplayControl").DescribeFileResponse>;
164
+ readonly responseStream: false;
165
+ readonly options: {};
166
+ };
196
167
  readonly load_file: {
197
168
  readonly name: "load_file";
198
169
  readonly requestType: import("./interfaces/ReplayControl").MessageFns<import("./interfaces/ReplayControl").LoadFileRequest>;
@@ -36,6 +36,13 @@ export interface ListContainersRequest {
36
36
  runningOnly: boolean;
37
37
  /** Optional shell-style glob against ContainerInfo.name. Empty matches all. */
38
38
  nameGlob: string;
39
+ /**
40
+ * Fill ContainerInfo.ports / networks / mounts. Off by default so a routine
41
+ * poll stays lean; a client sets it when the operator opens a detail view.
42
+ * This reply is the ONLY place those fields are populated -- never on the
43
+ * recorded container_status subject.
44
+ */
45
+ includeDeploymentDetail: boolean;
39
46
  }
40
47
  export interface ListContainersResponse {
41
48
  containers: ContainerInfo[];
@@ -106,7 +106,7 @@ function logStreamSelectorToJSON(object) {
106
106
  }
107
107
  exports.logStreamSelectorToJSON = logStreamSelectorToJSON;
108
108
  function createBaseListContainersRequest() {
109
- return { runningOnly: false, nameGlob: "" };
109
+ return { runningOnly: false, nameGlob: "", includeDeploymentDetail: false };
110
110
  }
111
111
  exports.ListContainersRequest = {
112
112
  encode(message, writer = new wire_1.BinaryWriter()) {
@@ -116,6 +116,9 @@ exports.ListContainersRequest = {
116
116
  if (message.nameGlob !== "") {
117
117
  writer.uint32(18).string(message.nameGlob);
118
118
  }
119
+ if (message.includeDeploymentDetail !== false) {
120
+ writer.uint32(24).bool(message.includeDeploymentDetail);
121
+ }
119
122
  return writer;
120
123
  },
121
124
  decode(input, length) {
@@ -139,6 +142,13 @@ exports.ListContainersRequest = {
139
142
  message.nameGlob = reader.string();
140
143
  continue;
141
144
  }
145
+ case 3: {
146
+ if (tag !== 24) {
147
+ break;
148
+ }
149
+ message.includeDeploymentDetail = reader.bool();
150
+ continue;
151
+ }
142
152
  }
143
153
  if ((tag & 7) === 4 || tag === 0) {
144
154
  break;
@@ -151,6 +161,9 @@ exports.ListContainersRequest = {
151
161
  return {
152
162
  runningOnly: isSet(object.runningOnly) ? globalThis.Boolean(object.runningOnly) : false,
153
163
  nameGlob: isSet(object.nameGlob) ? globalThis.String(object.nameGlob) : "",
164
+ includeDeploymentDetail: isSet(object.includeDeploymentDetail)
165
+ ? globalThis.Boolean(object.includeDeploymentDetail)
166
+ : false,
154
167
  };
155
168
  },
156
169
  toJSON(message) {
@@ -161,6 +174,9 @@ exports.ListContainersRequest = {
161
174
  if (message.nameGlob !== "") {
162
175
  obj.nameGlob = message.nameGlob;
163
176
  }
177
+ if (message.includeDeploymentDetail !== false) {
178
+ obj.includeDeploymentDetail = message.includeDeploymentDetail;
179
+ }
164
180
  return obj;
165
181
  },
166
182
  create(base) {
@@ -170,6 +186,7 @@ exports.ListContainersRequest = {
170
186
  const message = createBaseListContainersRequest();
171
187
  message.runningOnly = object.runningOnly ?? false;
172
188
  message.nameGlob = object.nameGlob ?? "";
189
+ message.includeDeploymentDetail = object.includeDeploymentDetail ?? false;
173
190
  return message;
174
191
  },
175
192
  };
@@ -63,6 +63,45 @@ export declare enum ContainerStatusTrigger {
63
63
  }
64
64
  export declare function containerStatusTriggerFromJSON(object: any): ContainerStatusTrigger;
65
65
  export declare function containerStatusTriggerToJSON(object: ContainerStatusTrigger): string;
66
+ /**
67
+ * A published port. Both halves are present because they answer different
68
+ * questions: container_port is what the process inside bound, host_port is what
69
+ * anything outside can reach.
70
+ */
71
+ export interface ContainerPortBinding {
72
+ containerPort: number;
73
+ /** "tcp" or "udp" as the runtime spells it. */
74
+ protocol: string;
75
+ /**
76
+ * The host interface the binding is on, as the runtime reports it (Docker
77
+ * says "0.0.0.0" or "::" for every interface).
78
+ */
79
+ hostIp: string;
80
+ /** 0 for a port exposed but not published. */
81
+ hostPort: number;
82
+ }
83
+ /**
84
+ * One network the container is attached to.
85
+ *
86
+ * A container on the HOST network is attached to no named network at all, which
87
+ * is why an empty list is a meaningful answer rather than a missing one -- the
88
+ * same fact ContainerResourceUsage expresses by omitting its network counters.
89
+ */
90
+ export interface ContainerNetworkAttachment {
91
+ name: string;
92
+ /** Empty when the runtime assigned none (host networking, or not yet started). */
93
+ ipAddress: string;
94
+ aliases: string[];
95
+ }
96
+ /** One mount into the container's filesystem. */
97
+ export interface ContainerMount {
98
+ /** "bind", "volume" or "tmpfs" as the runtime spells it. */
99
+ type: string;
100
+ /** The host path, or the volume name for a named volume. */
101
+ source: string;
102
+ destination: string;
103
+ readOnly: boolean;
104
+ }
66
105
  export interface ContainerInfo {
67
106
  /**
68
107
  * The operator-meaningful handle. Unique per host; the value every other
@@ -122,6 +161,9 @@ export interface ContainerInfo {
122
161
  * not explicitly ask otherwise gets.
123
162
  */
124
163
  removable: boolean;
164
+ ports: ContainerPortBinding[];
165
+ networks: ContainerNetworkAttachment[];
166
+ mounts: ContainerMount[];
125
167
  }
126
168
  /**
127
169
  * What `list` answers, published continuously instead of on request.
@@ -378,6 +420,9 @@ export interface ContainerHostStats {
378
420
  */
379
421
  sequence: number;
380
422
  }
423
+ export declare const ContainerPortBinding: MessageFns<ContainerPortBinding>;
424
+ export declare const ContainerNetworkAttachment: MessageFns<ContainerNetworkAttachment>;
425
+ export declare const ContainerMount: MessageFns<ContainerMount>;
381
426
  export declare const ContainerInfo: MessageFns<ContainerInfo>;
382
427
  export declare const ContainerHostStatus: MessageFns<ContainerHostStatus>;
383
428
  export declare const ContainerResourceUsage: MessageFns<ContainerResourceUsage>;
@@ -5,7 +5,7 @@
5
5
  // protoc v6.30.2
6
6
  // source: ContainerHost.proto
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.ContainerHostStats = exports.ContainerResourceUsage = exports.ContainerHostStatus = exports.ContainerInfo = exports.containerStatusTriggerToJSON = exports.containerStatusTriggerFromJSON = exports.ContainerStatusTrigger = exports.containerHealthStatusToJSON = exports.containerHealthStatusFromJSON = exports.ContainerHealthStatus = exports.containerRestartPolicyToJSON = exports.containerRestartPolicyFromJSON = exports.ContainerRestartPolicy = exports.containerStateToJSON = exports.containerStateFromJSON = exports.ContainerState = exports.protobufPackage = void 0;
8
+ exports.ContainerHostStats = exports.ContainerResourceUsage = exports.ContainerHostStatus = exports.ContainerInfo = exports.ContainerMount = exports.ContainerNetworkAttachment = exports.ContainerPortBinding = exports.containerStatusTriggerToJSON = exports.containerStatusTriggerFromJSON = exports.ContainerStatusTrigger = exports.containerHealthStatusToJSON = exports.containerHealthStatusFromJSON = exports.ContainerHealthStatus = exports.containerRestartPolicyToJSON = exports.containerRestartPolicyFromJSON = exports.ContainerRestartPolicy = exports.containerStateToJSON = exports.containerStateFromJSON = exports.ContainerState = exports.protobufPackage = void 0;
9
9
  /* eslint-disable */
10
10
  const wire_1 = require("@bufbuild/protobuf/wire");
11
11
  const timestamp_1 = require("./google/protobuf/timestamp");
@@ -242,6 +242,285 @@ function containerStatusTriggerToJSON(object) {
242
242
  }
243
243
  }
244
244
  exports.containerStatusTriggerToJSON = containerStatusTriggerToJSON;
245
+ function createBaseContainerPortBinding() {
246
+ return { containerPort: 0, protocol: "", hostIp: "", hostPort: 0 };
247
+ }
248
+ exports.ContainerPortBinding = {
249
+ encode(message, writer = new wire_1.BinaryWriter()) {
250
+ if (message.containerPort !== 0) {
251
+ writer.uint32(8).uint32(message.containerPort);
252
+ }
253
+ if (message.protocol !== "") {
254
+ writer.uint32(18).string(message.protocol);
255
+ }
256
+ if (message.hostIp !== "") {
257
+ writer.uint32(26).string(message.hostIp);
258
+ }
259
+ if (message.hostPort !== 0) {
260
+ writer.uint32(32).uint32(message.hostPort);
261
+ }
262
+ return writer;
263
+ },
264
+ decode(input, length) {
265
+ const reader = input instanceof wire_1.BinaryReader ? input : new wire_1.BinaryReader(input);
266
+ let end = length === undefined ? reader.len : reader.pos + length;
267
+ const message = createBaseContainerPortBinding();
268
+ while (reader.pos < end) {
269
+ const tag = reader.uint32();
270
+ switch (tag >>> 3) {
271
+ case 1: {
272
+ if (tag !== 8) {
273
+ break;
274
+ }
275
+ message.containerPort = reader.uint32();
276
+ continue;
277
+ }
278
+ case 2: {
279
+ if (tag !== 18) {
280
+ break;
281
+ }
282
+ message.protocol = reader.string();
283
+ continue;
284
+ }
285
+ case 3: {
286
+ if (tag !== 26) {
287
+ break;
288
+ }
289
+ message.hostIp = reader.string();
290
+ continue;
291
+ }
292
+ case 4: {
293
+ if (tag !== 32) {
294
+ break;
295
+ }
296
+ message.hostPort = reader.uint32();
297
+ continue;
298
+ }
299
+ }
300
+ if ((tag & 7) === 4 || tag === 0) {
301
+ break;
302
+ }
303
+ reader.skip(tag & 7);
304
+ }
305
+ return message;
306
+ },
307
+ fromJSON(object) {
308
+ return {
309
+ containerPort: isSet(object.containerPort) ? globalThis.Number(object.containerPort) : 0,
310
+ protocol: isSet(object.protocol) ? globalThis.String(object.protocol) : "",
311
+ hostIp: isSet(object.hostIp) ? globalThis.String(object.hostIp) : "",
312
+ hostPort: isSet(object.hostPort) ? globalThis.Number(object.hostPort) : 0,
313
+ };
314
+ },
315
+ toJSON(message) {
316
+ const obj = {};
317
+ if (message.containerPort !== 0) {
318
+ obj.containerPort = Math.round(message.containerPort);
319
+ }
320
+ if (message.protocol !== "") {
321
+ obj.protocol = message.protocol;
322
+ }
323
+ if (message.hostIp !== "") {
324
+ obj.hostIp = message.hostIp;
325
+ }
326
+ if (message.hostPort !== 0) {
327
+ obj.hostPort = Math.round(message.hostPort);
328
+ }
329
+ return obj;
330
+ },
331
+ create(base) {
332
+ return exports.ContainerPortBinding.fromPartial(base ?? {});
333
+ },
334
+ fromPartial(object) {
335
+ const message = createBaseContainerPortBinding();
336
+ message.containerPort = object.containerPort ?? 0;
337
+ message.protocol = object.protocol ?? "";
338
+ message.hostIp = object.hostIp ?? "";
339
+ message.hostPort = object.hostPort ?? 0;
340
+ return message;
341
+ },
342
+ };
343
+ function createBaseContainerNetworkAttachment() {
344
+ return { name: "", ipAddress: "", aliases: [] };
345
+ }
346
+ exports.ContainerNetworkAttachment = {
347
+ encode(message, writer = new wire_1.BinaryWriter()) {
348
+ if (message.name !== "") {
349
+ writer.uint32(10).string(message.name);
350
+ }
351
+ if (message.ipAddress !== "") {
352
+ writer.uint32(18).string(message.ipAddress);
353
+ }
354
+ for (const v of message.aliases) {
355
+ writer.uint32(26).string(v);
356
+ }
357
+ return writer;
358
+ },
359
+ decode(input, length) {
360
+ const reader = input instanceof wire_1.BinaryReader ? input : new wire_1.BinaryReader(input);
361
+ let end = length === undefined ? reader.len : reader.pos + length;
362
+ const message = createBaseContainerNetworkAttachment();
363
+ while (reader.pos < end) {
364
+ const tag = reader.uint32();
365
+ switch (tag >>> 3) {
366
+ case 1: {
367
+ if (tag !== 10) {
368
+ break;
369
+ }
370
+ message.name = reader.string();
371
+ continue;
372
+ }
373
+ case 2: {
374
+ if (tag !== 18) {
375
+ break;
376
+ }
377
+ message.ipAddress = reader.string();
378
+ continue;
379
+ }
380
+ case 3: {
381
+ if (tag !== 26) {
382
+ break;
383
+ }
384
+ message.aliases.push(reader.string());
385
+ continue;
386
+ }
387
+ }
388
+ if ((tag & 7) === 4 || tag === 0) {
389
+ break;
390
+ }
391
+ reader.skip(tag & 7);
392
+ }
393
+ return message;
394
+ },
395
+ fromJSON(object) {
396
+ return {
397
+ name: isSet(object.name) ? globalThis.String(object.name) : "",
398
+ ipAddress: isSet(object.ipAddress) ? globalThis.String(object.ipAddress) : "",
399
+ aliases: globalThis.Array.isArray(object?.aliases) ? object.aliases.map((e) => globalThis.String(e)) : [],
400
+ };
401
+ },
402
+ toJSON(message) {
403
+ const obj = {};
404
+ if (message.name !== "") {
405
+ obj.name = message.name;
406
+ }
407
+ if (message.ipAddress !== "") {
408
+ obj.ipAddress = message.ipAddress;
409
+ }
410
+ if (message.aliases?.length) {
411
+ obj.aliases = message.aliases;
412
+ }
413
+ return obj;
414
+ },
415
+ create(base) {
416
+ return exports.ContainerNetworkAttachment.fromPartial(base ?? {});
417
+ },
418
+ fromPartial(object) {
419
+ const message = createBaseContainerNetworkAttachment();
420
+ message.name = object.name ?? "";
421
+ message.ipAddress = object.ipAddress ?? "";
422
+ message.aliases = object.aliases?.map((e) => e) || [];
423
+ return message;
424
+ },
425
+ };
426
+ function createBaseContainerMount() {
427
+ return { type: "", source: "", destination: "", readOnly: false };
428
+ }
429
+ exports.ContainerMount = {
430
+ encode(message, writer = new wire_1.BinaryWriter()) {
431
+ if (message.type !== "") {
432
+ writer.uint32(10).string(message.type);
433
+ }
434
+ if (message.source !== "") {
435
+ writer.uint32(18).string(message.source);
436
+ }
437
+ if (message.destination !== "") {
438
+ writer.uint32(26).string(message.destination);
439
+ }
440
+ if (message.readOnly !== false) {
441
+ writer.uint32(32).bool(message.readOnly);
442
+ }
443
+ return writer;
444
+ },
445
+ decode(input, length) {
446
+ const reader = input instanceof wire_1.BinaryReader ? input : new wire_1.BinaryReader(input);
447
+ let end = length === undefined ? reader.len : reader.pos + length;
448
+ const message = createBaseContainerMount();
449
+ while (reader.pos < end) {
450
+ const tag = reader.uint32();
451
+ switch (tag >>> 3) {
452
+ case 1: {
453
+ if (tag !== 10) {
454
+ break;
455
+ }
456
+ message.type = reader.string();
457
+ continue;
458
+ }
459
+ case 2: {
460
+ if (tag !== 18) {
461
+ break;
462
+ }
463
+ message.source = reader.string();
464
+ continue;
465
+ }
466
+ case 3: {
467
+ if (tag !== 26) {
468
+ break;
469
+ }
470
+ message.destination = reader.string();
471
+ continue;
472
+ }
473
+ case 4: {
474
+ if (tag !== 32) {
475
+ break;
476
+ }
477
+ message.readOnly = reader.bool();
478
+ continue;
479
+ }
480
+ }
481
+ if ((tag & 7) === 4 || tag === 0) {
482
+ break;
483
+ }
484
+ reader.skip(tag & 7);
485
+ }
486
+ return message;
487
+ },
488
+ fromJSON(object) {
489
+ return {
490
+ type: isSet(object.type) ? globalThis.String(object.type) : "",
491
+ source: isSet(object.source) ? globalThis.String(object.source) : "",
492
+ destination: isSet(object.destination) ? globalThis.String(object.destination) : "",
493
+ readOnly: isSet(object.readOnly) ? globalThis.Boolean(object.readOnly) : false,
494
+ };
495
+ },
496
+ toJSON(message) {
497
+ const obj = {};
498
+ if (message.type !== "") {
499
+ obj.type = message.type;
500
+ }
501
+ if (message.source !== "") {
502
+ obj.source = message.source;
503
+ }
504
+ if (message.destination !== "") {
505
+ obj.destination = message.destination;
506
+ }
507
+ if (message.readOnly !== false) {
508
+ obj.readOnly = message.readOnly;
509
+ }
510
+ return obj;
511
+ },
512
+ create(base) {
513
+ return exports.ContainerMount.fromPartial(base ?? {});
514
+ },
515
+ fromPartial(object) {
516
+ const message = createBaseContainerMount();
517
+ message.type = object.type ?? "";
518
+ message.source = object.source ?? "";
519
+ message.destination = object.destination ?? "";
520
+ message.readOnly = object.readOnly ?? false;
521
+ return message;
522
+ },
523
+ };
245
524
  function createBaseContainerInfo() {
246
525
  return {
247
526
  name: "",
@@ -261,6 +540,9 @@ function createBaseContainerInfo() {
261
540
  composeProject: "",
262
541
  composeService: "",
263
542
  removable: false,
543
+ ports: [],
544
+ networks: [],
545
+ mounts: [],
264
546
  };
265
547
  }
266
548
  exports.ContainerInfo = {
@@ -316,6 +598,15 @@ exports.ContainerInfo = {
316
598
  if (message.removable !== false) {
317
599
  writer.uint32(136).bool(message.removable);
318
600
  }
601
+ for (const v of message.ports) {
602
+ exports.ContainerPortBinding.encode(v, writer.uint32(146).fork()).join();
603
+ }
604
+ for (const v of message.networks) {
605
+ exports.ContainerNetworkAttachment.encode(v, writer.uint32(154).fork()).join();
606
+ }
607
+ for (const v of message.mounts) {
608
+ exports.ContainerMount.encode(v, writer.uint32(162).fork()).join();
609
+ }
319
610
  return writer;
320
611
  },
321
612
  decode(input, length) {
@@ -444,6 +735,27 @@ exports.ContainerInfo = {
444
735
  message.removable = reader.bool();
445
736
  continue;
446
737
  }
738
+ case 18: {
739
+ if (tag !== 146) {
740
+ break;
741
+ }
742
+ message.ports.push(exports.ContainerPortBinding.decode(reader, reader.uint32()));
743
+ continue;
744
+ }
745
+ case 19: {
746
+ if (tag !== 154) {
747
+ break;
748
+ }
749
+ message.networks.push(exports.ContainerNetworkAttachment.decode(reader, reader.uint32()));
750
+ continue;
751
+ }
752
+ case 20: {
753
+ if (tag !== 162) {
754
+ break;
755
+ }
756
+ message.mounts.push(exports.ContainerMount.decode(reader, reader.uint32()));
757
+ continue;
758
+ }
447
759
  }
448
760
  if ((tag & 7) === 4 || tag === 0) {
449
761
  break;
@@ -473,6 +785,13 @@ exports.ContainerInfo = {
473
785
  composeProject: isSet(object.composeProject) ? globalThis.String(object.composeProject) : "",
474
786
  composeService: isSet(object.composeService) ? globalThis.String(object.composeService) : "",
475
787
  removable: isSet(object.removable) ? globalThis.Boolean(object.removable) : false,
788
+ ports: globalThis.Array.isArray(object?.ports)
789
+ ? object.ports.map((e) => exports.ContainerPortBinding.fromJSON(e))
790
+ : [],
791
+ networks: globalThis.Array.isArray(object?.networks)
792
+ ? object.networks.map((e) => exports.ContainerNetworkAttachment.fromJSON(e))
793
+ : [],
794
+ mounts: globalThis.Array.isArray(object?.mounts) ? object.mounts.map((e) => exports.ContainerMount.fromJSON(e)) : [],
476
795
  };
477
796
  },
478
797
  toJSON(message) {
@@ -528,6 +847,15 @@ exports.ContainerInfo = {
528
847
  if (message.removable !== false) {
529
848
  obj.removable = message.removable;
530
849
  }
850
+ if (message.ports?.length) {
851
+ obj.ports = message.ports.map((e) => exports.ContainerPortBinding.toJSON(e));
852
+ }
853
+ if (message.networks?.length) {
854
+ obj.networks = message.networks.map((e) => exports.ContainerNetworkAttachment.toJSON(e));
855
+ }
856
+ if (message.mounts?.length) {
857
+ obj.mounts = message.mounts.map((e) => exports.ContainerMount.toJSON(e));
858
+ }
531
859
  return obj;
532
860
  },
533
861
  create(base) {
@@ -552,6 +880,9 @@ exports.ContainerInfo = {
552
880
  message.composeProject = object.composeProject ?? "";
553
881
  message.composeService = object.composeService ?? "";
554
882
  message.removable = object.removable ?? false;
883
+ message.ports = object.ports?.map((e) => exports.ContainerPortBinding.fromPartial(e)) || [];
884
+ message.networks = object.networks?.map((e) => exports.ContainerNetworkAttachment.fromPartial(e)) || [];
885
+ message.mounts = object.mounts?.map((e) => exports.ContainerMount.fromPartial(e)) || [];
555
886
  return message;
556
887
  },
557
888
  };
@@ -22,6 +22,38 @@ export interface ListFilesResponse {
22
22
  baseDirectory: string;
23
23
  files: FileInfo[];
24
24
  }
25
+ export interface DescribeFileRequest {
26
+ /**
27
+ * Path relative to the replayer's base directory, as in load_file. The file
28
+ * need not be loaded — a client can inspect a recording before playing it.
29
+ */
30
+ path: string;
31
+ }
32
+ /** One channel (topic) in the file, and when it spoke. */
33
+ export interface ChannelInfo {
34
+ topic: string;
35
+ /** The channel's schema name as recorded, e.g. "keelson.TimestampedFloat". */
36
+ schemaName: string;
37
+ /** The channel's message encoding as recorded, e.g. "protobuf". */
38
+ messageEncoding: string;
39
+ messageCount: number;
40
+ /**
41
+ * log_time of the channel's first and last message. Unset when the channel
42
+ * recorded no messages. Exact, not the bounds of the chunks it appears in.
43
+ */
44
+ firstTime: Date | undefined;
45
+ lastTime: Date | undefined;
46
+ }
47
+ export interface DescribeFileResponse {
48
+ file: FileInfo | undefined;
49
+ channels: ChannelInfo[];
50
+ /**
51
+ * True when the file carried no summary or no chunk indexes, so the replayer
52
+ * had to read it end to end. The figures are still exact; the call was just
53
+ * proportional to the file's size rather than to its number of chunks.
54
+ */
55
+ fromScan: boolean;
56
+ }
25
57
  export interface LoadFileRequest {
26
58
  path: string;
27
59
  }
@@ -30,7 +62,11 @@ export interface SeekRequest {
30
62
  target: Date | undefined;
31
63
  }
32
64
  export interface SetSpeedRequest {
33
- /** Playback speed multiplier; expected range [0.25, 4.0]. */
65
+ /**
66
+ * Playback speed multiplier; expected range [0.25, 20.0]. At high speeds a
67
+ * recording heavy with images or point clouds is published as fast as the
68
+ * replayer can manage and lags wall time; no message is dropped.
69
+ */
34
70
  speed: number;
35
71
  }
36
72
  export interface SetLoopRequest {
@@ -42,6 +78,9 @@ export interface ReplaySuccessResponse {
42
78
  export declare const FileInfo: MessageFns<FileInfo>;
43
79
  export declare const ListFilesRequest: MessageFns<ListFilesRequest>;
44
80
  export declare const ListFilesResponse: MessageFns<ListFilesResponse>;
81
+ export declare const DescribeFileRequest: MessageFns<DescribeFileRequest>;
82
+ export declare const ChannelInfo: MessageFns<ChannelInfo>;
83
+ export declare const DescribeFileResponse: MessageFns<DescribeFileResponse>;
45
84
  export declare const LoadFileRequest: MessageFns<LoadFileRequest>;
46
85
  export declare const SeekRequest: MessageFns<SeekRequest>;
47
86
  export declare const SetSpeedRequest: MessageFns<SetSpeedRequest>;
@@ -60,6 +99,15 @@ export declare const ReplayControlDefinition: {
60
99
  readonly responseStream: false;
61
100
  readonly options: {};
62
101
  };
102
+ /** Per-channel message counts and first/last message times for one file. */
103
+ readonly describe_file: {
104
+ readonly name: "describe_file";
105
+ readonly requestType: MessageFns<DescribeFileRequest>;
106
+ readonly requestStream: false;
107
+ readonly responseType: MessageFns<DescribeFileResponse>;
108
+ readonly responseStream: false;
109
+ readonly options: {};
110
+ };
63
111
  readonly load_file: {
64
112
  readonly name: "load_file";
65
113
  readonly requestType: MessageFns<LoadFileRequest>;