@rise-maritime/keelson-js 0.6.0-experimental.6 → 0.6.0-experimental.8
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 +8 -0
- package/dist/interfaces/NavigationControl.d.ts +5 -2
- package/dist/interfaces/ReplayControl.d.ts +40 -1
- package/dist/interfaces/ReplayControl.js +77 -1
- package/dist/interfaces/Route.d.ts +3 -0
- package/dist/interfaces/Voyage.d.ts +10 -0
- package/dist/interfaces/Voyage.js +16 -0
- package/dist/interfaces/serviceRegistry.d.ts +8 -0
- package/dist/payloads/ReplayStatus.d.ts +7 -0
- package/dist/payloads/ReplayStatus.js +32 -0
- package/dist/payloads/Route.d.ts +3 -0
- package/dist/payloads/Voyage.d.ts +10 -0
- package/dist/payloads/Voyage.js +16 -0
- package/dist/subjects.json +0 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -257,6 +257,14 @@ export declare function getInterfaceDefinition(interfaceAndVersion: string): {
|
|
|
257
257
|
readonly responseStream: false;
|
|
258
258
|
readonly options: {};
|
|
259
259
|
};
|
|
260
|
+
readonly set_range: {
|
|
261
|
+
readonly name: "set_range";
|
|
262
|
+
readonly requestType: import("./interfaces/ReplayControl").MessageFns<import("./interfaces/ReplayControl").SetRangeRequest>;
|
|
263
|
+
readonly requestStream: false;
|
|
264
|
+
readonly responseType: import("./interfaces/ReplayControl").MessageFns<import("./interfaces/ReplayControl").ReplaySuccessResponse>;
|
|
265
|
+
readonly responseStream: false;
|
|
266
|
+
readonly options: {};
|
|
267
|
+
};
|
|
260
268
|
};
|
|
261
269
|
} | {
|
|
262
270
|
readonly name: "RoutePlanner";
|
|
@@ -13,7 +13,9 @@ export interface Caller {
|
|
|
13
13
|
controllerId: string;
|
|
14
14
|
/**
|
|
15
15
|
* The token of the command_authority lease the caller holds. Absent when it holds none, which
|
|
16
|
-
* is valid only while the responder holds the conn itself
|
|
16
|
+
* is valid only while the responder holds the conn itself. The token is broadcast on a stored
|
|
17
|
+
* slot, so this is an interlock against a station that has lost the conn, not a credential
|
|
18
|
+
* (protocols/navigation_conduct.yaml).
|
|
17
19
|
*/
|
|
18
20
|
authorityToken?: string | undefined;
|
|
19
21
|
}
|
|
@@ -65,7 +67,8 @@ export interface SetGuidanceOrderRequest {
|
|
|
65
67
|
export interface SetGuidanceOrderResponse {
|
|
66
68
|
/**
|
|
67
69
|
* UNSUPPORTED when the responder, or the vehicle behind it, cannot hold the requested frame —
|
|
68
|
-
* it never substitutes course for heading or the reverse.
|
|
70
|
+
* it never substitutes course for heading or the reverse. TEMPORARILY_REJECTED when there is no
|
|
71
|
+
* active voyage to steer.
|
|
69
72
|
*/
|
|
70
73
|
result: CommandResult;
|
|
71
74
|
detail: string;
|
|
@@ -58,7 +58,12 @@ export interface LoadFileRequest {
|
|
|
58
58
|
path: string;
|
|
59
59
|
}
|
|
60
60
|
export interface SeekRequest {
|
|
61
|
-
/**
|
|
61
|
+
/**
|
|
62
|
+
* Target playhead timestamp. Must fall within the ACTIVE RANGE when `set_range` has set one, and
|
|
63
|
+
* within the loaded file's window otherwise; outside it the reply is OUT_OF_RANGE. A seek is not
|
|
64
|
+
* clamped into the range, for the reason an inverted range is not swapped: a client that read its
|
|
65
|
+
* own position back and found it somewhere else would have nothing telling it so.
|
|
66
|
+
*/
|
|
62
67
|
target: Date | undefined;
|
|
63
68
|
}
|
|
64
69
|
export interface SetSpeedRequest {
|
|
@@ -72,6 +77,31 @@ export interface SetSpeedRequest {
|
|
|
72
77
|
export interface SetLoopRequest {
|
|
73
78
|
loop: boolean;
|
|
74
79
|
}
|
|
80
|
+
/**
|
|
81
|
+
* Bound playback to a span of the loaded file.
|
|
82
|
+
*
|
|
83
|
+
* The operation a reviewer wants constantly: an incident occupies twenty seconds of a two-hour
|
|
84
|
+
* recording, and you want those twenty seconds -- repeatedly, if `set_loop` is on. Composing it from
|
|
85
|
+
* `seek` does not work well, because a client can only notice the end has passed AFTER it has
|
|
86
|
+
* published past it; see RISE-Maritime/keelson#198.
|
|
87
|
+
*
|
|
88
|
+
* BOTH FIELDS UNSET CLEARS THE RANGE and returns playback to the whole file. Clearing has to be
|
|
89
|
+
* expressible, and it is: these are MESSAGE fields, so proto3 gives them explicit presence and a
|
|
90
|
+
* server distinguishes unset from a zero Timestamp with `HasField`. That distinction is load-bearing
|
|
91
|
+
* rather than pedantic -- epoch 0 is a legitimate log time, and a recording from a device with no
|
|
92
|
+
* clock really does start there, so a zero value could not have doubled as "none".
|
|
93
|
+
*/
|
|
94
|
+
export interface SetRangeRequest {
|
|
95
|
+
/** First message replayed. Unset means the file's start. */
|
|
96
|
+
start: Date | undefined;
|
|
97
|
+
/**
|
|
98
|
+
* Playback stops or loops on reaching this. Unset means the file's end.
|
|
99
|
+
*
|
|
100
|
+
* Inclusive: an operator who puts the out-point ON a message means to hear that message. Only
|
|
101
|
+
* `end` strictly BEFORE `start` is refused -- `end` equal to `start` is a one-message span.
|
|
102
|
+
*/
|
|
103
|
+
end: Date | undefined;
|
|
104
|
+
}
|
|
75
105
|
/** Generic acknowledgement for control commands. */
|
|
76
106
|
export interface ReplaySuccessResponse {
|
|
77
107
|
}
|
|
@@ -85,6 +115,7 @@ export declare const LoadFileRequest: MessageFns<LoadFileRequest>;
|
|
|
85
115
|
export declare const SeekRequest: MessageFns<SeekRequest>;
|
|
86
116
|
export declare const SetSpeedRequest: MessageFns<SetSpeedRequest>;
|
|
87
117
|
export declare const SetLoopRequest: MessageFns<SetLoopRequest>;
|
|
118
|
+
export declare const SetRangeRequest: MessageFns<SetRangeRequest>;
|
|
88
119
|
export declare const ReplaySuccessResponse: MessageFns<ReplaySuccessResponse>;
|
|
89
120
|
export type ReplayControlDefinition = typeof ReplayControlDefinition;
|
|
90
121
|
export declare const ReplayControlDefinition: {
|
|
@@ -164,6 +195,14 @@ export declare const ReplayControlDefinition: {
|
|
|
164
195
|
readonly responseStream: false;
|
|
165
196
|
readonly options: {};
|
|
166
197
|
};
|
|
198
|
+
readonly set_range: {
|
|
199
|
+
readonly name: "set_range";
|
|
200
|
+
readonly requestType: MessageFns<SetRangeRequest>;
|
|
201
|
+
readonly requestStream: false;
|
|
202
|
+
readonly responseType: MessageFns<ReplaySuccessResponse>;
|
|
203
|
+
readonly responseStream: false;
|
|
204
|
+
readonly options: {};
|
|
205
|
+
};
|
|
167
206
|
};
|
|
168
207
|
};
|
|
169
208
|
type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// protoc v6.30.2
|
|
6
6
|
// source: ReplayControl.proto
|
|
7
7
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
exports.ReplayControlDefinition = exports.ReplaySuccessResponse = exports.SetLoopRequest = exports.SetSpeedRequest = exports.SeekRequest = exports.LoadFileRequest = exports.DescribeFileResponse = exports.ChannelInfo = exports.DescribeFileRequest = exports.ListFilesResponse = exports.ListFilesRequest = exports.FileInfo = exports.protobufPackage = void 0;
|
|
8
|
+
exports.ReplayControlDefinition = exports.ReplaySuccessResponse = exports.SetRangeRequest = exports.SetLoopRequest = exports.SetSpeedRequest = exports.SeekRequest = exports.LoadFileRequest = exports.DescribeFileResponse = exports.ChannelInfo = exports.DescribeFileRequest = exports.ListFilesResponse = exports.ListFilesRequest = exports.FileInfo = exports.protobufPackage = void 0;
|
|
9
9
|
/* eslint-disable */
|
|
10
10
|
const wire_1 = require("@bufbuild/protobuf/wire");
|
|
11
11
|
const empty_1 = require("./google/protobuf/empty");
|
|
@@ -751,6 +751,74 @@ exports.SetLoopRequest = {
|
|
|
751
751
|
return message;
|
|
752
752
|
},
|
|
753
753
|
};
|
|
754
|
+
function createBaseSetRangeRequest() {
|
|
755
|
+
return { start: undefined, end: undefined };
|
|
756
|
+
}
|
|
757
|
+
exports.SetRangeRequest = {
|
|
758
|
+
encode(message, writer = new wire_1.BinaryWriter()) {
|
|
759
|
+
if (message.start !== undefined) {
|
|
760
|
+
timestamp_1.Timestamp.encode(toTimestamp(message.start), writer.uint32(10).fork()).join();
|
|
761
|
+
}
|
|
762
|
+
if (message.end !== undefined) {
|
|
763
|
+
timestamp_1.Timestamp.encode(toTimestamp(message.end), writer.uint32(18).fork()).join();
|
|
764
|
+
}
|
|
765
|
+
return writer;
|
|
766
|
+
},
|
|
767
|
+
decode(input, length) {
|
|
768
|
+
const reader = input instanceof wire_1.BinaryReader ? input : new wire_1.BinaryReader(input);
|
|
769
|
+
let end = length === undefined ? reader.len : reader.pos + length;
|
|
770
|
+
const message = createBaseSetRangeRequest();
|
|
771
|
+
while (reader.pos < end) {
|
|
772
|
+
const tag = reader.uint32();
|
|
773
|
+
switch (tag >>> 3) {
|
|
774
|
+
case 1: {
|
|
775
|
+
if (tag !== 10) {
|
|
776
|
+
break;
|
|
777
|
+
}
|
|
778
|
+
message.start = fromTimestamp(timestamp_1.Timestamp.decode(reader, reader.uint32()));
|
|
779
|
+
continue;
|
|
780
|
+
}
|
|
781
|
+
case 2: {
|
|
782
|
+
if (tag !== 18) {
|
|
783
|
+
break;
|
|
784
|
+
}
|
|
785
|
+
message.end = fromTimestamp(timestamp_1.Timestamp.decode(reader, reader.uint32()));
|
|
786
|
+
continue;
|
|
787
|
+
}
|
|
788
|
+
}
|
|
789
|
+
if ((tag & 7) === 4 || tag === 0) {
|
|
790
|
+
break;
|
|
791
|
+
}
|
|
792
|
+
reader.skip(tag & 7);
|
|
793
|
+
}
|
|
794
|
+
return message;
|
|
795
|
+
},
|
|
796
|
+
fromJSON(object) {
|
|
797
|
+
return {
|
|
798
|
+
start: isSet(object.start) ? fromJsonTimestamp(object.start) : undefined,
|
|
799
|
+
end: isSet(object.end) ? fromJsonTimestamp(object.end) : undefined,
|
|
800
|
+
};
|
|
801
|
+
},
|
|
802
|
+
toJSON(message) {
|
|
803
|
+
const obj = {};
|
|
804
|
+
if (message.start !== undefined) {
|
|
805
|
+
obj.start = message.start.toISOString();
|
|
806
|
+
}
|
|
807
|
+
if (message.end !== undefined) {
|
|
808
|
+
obj.end = message.end.toISOString();
|
|
809
|
+
}
|
|
810
|
+
return obj;
|
|
811
|
+
},
|
|
812
|
+
create(base) {
|
|
813
|
+
return exports.SetRangeRequest.fromPartial(base ?? {});
|
|
814
|
+
},
|
|
815
|
+
fromPartial(object) {
|
|
816
|
+
const message = createBaseSetRangeRequest();
|
|
817
|
+
message.start = object.start ?? undefined;
|
|
818
|
+
message.end = object.end ?? undefined;
|
|
819
|
+
return message;
|
|
820
|
+
},
|
|
821
|
+
};
|
|
754
822
|
function createBaseReplaySuccessResponse() {
|
|
755
823
|
return {};
|
|
756
824
|
}
|
|
@@ -865,6 +933,14 @@ exports.ReplayControlDefinition = {
|
|
|
865
933
|
responseStream: false,
|
|
866
934
|
options: {},
|
|
867
935
|
},
|
|
936
|
+
set_range: {
|
|
937
|
+
name: "set_range",
|
|
938
|
+
requestType: exports.SetRangeRequest,
|
|
939
|
+
requestStream: false,
|
|
940
|
+
responseType: exports.ReplaySuccessResponse,
|
|
941
|
+
responseStream: false,
|
|
942
|
+
options: {},
|
|
943
|
+
},
|
|
868
944
|
},
|
|
869
945
|
};
|
|
870
946
|
function toTimestamp(date) {
|
|
@@ -410,6 +410,9 @@ export interface Waypoints {
|
|
|
410
410
|
* route sets no default speed" as distinct from "this route defaults to
|
|
411
411
|
* zero", and a consumer merging defaults into a waypoint cannot tell which
|
|
412
412
|
* it was handed.
|
|
413
|
+
*
|
|
414
|
+
* `Leg.xtd_corridor_mode` and both boundary lists are ignored here: a drawn
|
|
415
|
+
* corridor belongs to one stretch of water and cannot be a default (§6.2.2).
|
|
413
416
|
*/
|
|
414
417
|
export interface DefaultWaypoint {
|
|
415
418
|
leg: Leg | undefined;
|
|
@@ -126,6 +126,16 @@ export interface Voyage {
|
|
|
126
126
|
* voyages (e.g. crewed vs unmanned).
|
|
127
127
|
*/
|
|
128
128
|
reroutingPolicy: DynamicReroutingPolicy | undefined;
|
|
129
|
+
/**
|
|
130
|
+
* -- Who writes this voyage -------------------------------------------------
|
|
131
|
+
* `voyage/{voyage_id}` is a slot (§2.1.1): one position per voyage, overwritten
|
|
132
|
+
* as the voyage runs, with no producer chunk in the key. The current writer is
|
|
133
|
+
* therefore in the payload, and this is it — the navigation process conducting
|
|
134
|
+
* the voyage, while it serves `navigation_control/v1`
|
|
135
|
+
* (protocols/navigation_conduct.yaml). Empty before conduct begins: a voyage
|
|
136
|
+
* published PLANNED by a station is not yet conducted by anybody.
|
|
137
|
+
*/
|
|
138
|
+
conductedBy: string;
|
|
129
139
|
}
|
|
130
140
|
export declare const VoyageAuditEntry: MessageFns<VoyageAuditEntry>;
|
|
131
141
|
export declare const DynamicReroutingPolicy: MessageFns<DynamicReroutingPolicy>;
|
|
@@ -425,6 +425,7 @@ function createBaseVoyage() {
|
|
|
425
425
|
linkedProcedureIds: [],
|
|
426
426
|
auditTrail: [],
|
|
427
427
|
reroutingPolicy: undefined,
|
|
428
|
+
conductedBy: "",
|
|
428
429
|
};
|
|
429
430
|
}
|
|
430
431
|
exports.Voyage = {
|
|
@@ -498,6 +499,9 @@ exports.Voyage = {
|
|
|
498
499
|
if (message.reroutingPolicy !== undefined) {
|
|
499
500
|
exports.DynamicReroutingPolicy.encode(message.reroutingPolicy, writer.uint32(722).fork()).join();
|
|
500
501
|
}
|
|
502
|
+
if (message.conductedBy !== "") {
|
|
503
|
+
writer.uint32(730).string(message.conductedBy);
|
|
504
|
+
}
|
|
501
505
|
return writer;
|
|
502
506
|
},
|
|
503
507
|
decode(input, length) {
|
|
@@ -668,6 +672,13 @@ exports.Voyage = {
|
|
|
668
672
|
message.reroutingPolicy = exports.DynamicReroutingPolicy.decode(reader, reader.uint32());
|
|
669
673
|
continue;
|
|
670
674
|
}
|
|
675
|
+
case 91: {
|
|
676
|
+
if (tag !== 730) {
|
|
677
|
+
break;
|
|
678
|
+
}
|
|
679
|
+
message.conductedBy = reader.string();
|
|
680
|
+
continue;
|
|
681
|
+
}
|
|
671
682
|
}
|
|
672
683
|
if ((tag & 7) === 4 || tag === 0) {
|
|
673
684
|
break;
|
|
@@ -707,6 +718,7 @@ exports.Voyage = {
|
|
|
707
718
|
reroutingPolicy: isSet(object.reroutingPolicy)
|
|
708
719
|
? exports.DynamicReroutingPolicy.fromJSON(object.reroutingPolicy)
|
|
709
720
|
: undefined,
|
|
721
|
+
conductedBy: isSet(object.conductedBy) ? globalThis.String(object.conductedBy) : "",
|
|
710
722
|
};
|
|
711
723
|
},
|
|
712
724
|
toJSON(message) {
|
|
@@ -780,6 +792,9 @@ exports.Voyage = {
|
|
|
780
792
|
if (message.reroutingPolicy !== undefined) {
|
|
781
793
|
obj.reroutingPolicy = exports.DynamicReroutingPolicy.toJSON(message.reroutingPolicy);
|
|
782
794
|
}
|
|
795
|
+
if (message.conductedBy !== "") {
|
|
796
|
+
obj.conductedBy = message.conductedBy;
|
|
797
|
+
}
|
|
783
798
|
return obj;
|
|
784
799
|
},
|
|
785
800
|
create(base) {
|
|
@@ -816,6 +831,7 @@ exports.Voyage = {
|
|
|
816
831
|
message.reroutingPolicy = (object.reroutingPolicy !== undefined && object.reroutingPolicy !== null)
|
|
817
832
|
? exports.DynamicReroutingPolicy.fromPartial(object.reroutingPolicy)
|
|
818
833
|
: undefined;
|
|
834
|
+
message.conductedBy = object.conductedBy ?? "";
|
|
819
835
|
return message;
|
|
820
836
|
},
|
|
821
837
|
};
|
|
@@ -239,6 +239,14 @@ export declare const serviceDefinitions: {
|
|
|
239
239
|
readonly responseStream: false;
|
|
240
240
|
readonly options: {};
|
|
241
241
|
};
|
|
242
|
+
readonly set_range: {
|
|
243
|
+
readonly name: "set_range";
|
|
244
|
+
readonly requestType: import("./ReplayControl").MessageFns<import("./ReplayControl").SetRangeRequest>;
|
|
245
|
+
readonly requestStream: false;
|
|
246
|
+
readonly responseType: import("./ReplayControl").MessageFns<import("./ReplayControl").ReplaySuccessResponse>;
|
|
247
|
+
readonly responseStream: false;
|
|
248
|
+
readonly options: {};
|
|
249
|
+
};
|
|
242
250
|
};
|
|
243
251
|
};
|
|
244
252
|
readonly "route_planner/v1": {
|
|
@@ -32,6 +32,13 @@ export interface ReplayStatus {
|
|
|
32
32
|
progressPct: number;
|
|
33
33
|
/** Whether the replayer is configured to loop on end-of-file. */
|
|
34
34
|
loop: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* The active play range, when one is set. Reported so a client that did not set it -- a second
|
|
37
|
+
* station watching the same replay -- can still show what is being played, and so a client can
|
|
38
|
+
* tell "no range" from "a range it has forgotten". Unset when playback covers the whole file.
|
|
39
|
+
*/
|
|
40
|
+
rangeStart: Date | undefined;
|
|
41
|
+
rangeEnd: Date | undefined;
|
|
35
42
|
/** Identification of the daemon producing this sample. See DaemonInfo above. */
|
|
36
43
|
daemon: DaemonInfo | undefined;
|
|
37
44
|
/** Progress of an in-flight load_file, 0..100. Zero outside of LOADING. */
|
|
@@ -169,6 +169,8 @@ function createBaseReplayStatus() {
|
|
|
169
169
|
totalMessageCount: 0,
|
|
170
170
|
progressPct: 0,
|
|
171
171
|
loop: false,
|
|
172
|
+
rangeStart: undefined,
|
|
173
|
+
rangeEnd: undefined,
|
|
172
174
|
daemon: undefined,
|
|
173
175
|
loadProgressPct: 0,
|
|
174
176
|
lastLoadError: "",
|
|
@@ -207,6 +209,12 @@ exports.ReplayStatus = {
|
|
|
207
209
|
if (message.loop !== false) {
|
|
208
210
|
writer.uint32(80).bool(message.loop);
|
|
209
211
|
}
|
|
212
|
+
if (message.rangeStart !== undefined) {
|
|
213
|
+
timestamp_1.Timestamp.encode(toTimestamp(message.rangeStart), writer.uint32(90).fork()).join();
|
|
214
|
+
}
|
|
215
|
+
if (message.rangeEnd !== undefined) {
|
|
216
|
+
timestamp_1.Timestamp.encode(toTimestamp(message.rangeEnd), writer.uint32(98).fork()).join();
|
|
217
|
+
}
|
|
210
218
|
if (message.daemon !== undefined) {
|
|
211
219
|
exports.DaemonInfo.encode(message.daemon, writer.uint32(162).fork()).join();
|
|
212
220
|
}
|
|
@@ -295,6 +303,20 @@ exports.ReplayStatus = {
|
|
|
295
303
|
message.loop = reader.bool();
|
|
296
304
|
continue;
|
|
297
305
|
}
|
|
306
|
+
case 11: {
|
|
307
|
+
if (tag !== 90) {
|
|
308
|
+
break;
|
|
309
|
+
}
|
|
310
|
+
message.rangeStart = fromTimestamp(timestamp_1.Timestamp.decode(reader, reader.uint32()));
|
|
311
|
+
continue;
|
|
312
|
+
}
|
|
313
|
+
case 12: {
|
|
314
|
+
if (tag !== 98) {
|
|
315
|
+
break;
|
|
316
|
+
}
|
|
317
|
+
message.rangeEnd = fromTimestamp(timestamp_1.Timestamp.decode(reader, reader.uint32()));
|
|
318
|
+
continue;
|
|
319
|
+
}
|
|
298
320
|
case 20: {
|
|
299
321
|
if (tag !== 162) {
|
|
300
322
|
break;
|
|
@@ -337,6 +359,8 @@ exports.ReplayStatus = {
|
|
|
337
359
|
totalMessageCount: isSet(object.totalMessageCount) ? globalThis.Number(object.totalMessageCount) : 0,
|
|
338
360
|
progressPct: isSet(object.progressPct) ? globalThis.Number(object.progressPct) : 0,
|
|
339
361
|
loop: isSet(object.loop) ? globalThis.Boolean(object.loop) : false,
|
|
362
|
+
rangeStart: isSet(object.rangeStart) ? fromJsonTimestamp(object.rangeStart) : undefined,
|
|
363
|
+
rangeEnd: isSet(object.rangeEnd) ? fromJsonTimestamp(object.rangeEnd) : undefined,
|
|
340
364
|
daemon: isSet(object.daemon) ? exports.DaemonInfo.fromJSON(object.daemon) : undefined,
|
|
341
365
|
loadProgressPct: isSet(object.loadProgressPct) ? globalThis.Number(object.loadProgressPct) : 0,
|
|
342
366
|
lastLoadError: isSet(object.lastLoadError) ? globalThis.String(object.lastLoadError) : "",
|
|
@@ -374,6 +398,12 @@ exports.ReplayStatus = {
|
|
|
374
398
|
if (message.loop !== false) {
|
|
375
399
|
obj.loop = message.loop;
|
|
376
400
|
}
|
|
401
|
+
if (message.rangeStart !== undefined) {
|
|
402
|
+
obj.rangeStart = message.rangeStart.toISOString();
|
|
403
|
+
}
|
|
404
|
+
if (message.rangeEnd !== undefined) {
|
|
405
|
+
obj.rangeEnd = message.rangeEnd.toISOString();
|
|
406
|
+
}
|
|
377
407
|
if (message.daemon !== undefined) {
|
|
378
408
|
obj.daemon = exports.DaemonInfo.toJSON(message.daemon);
|
|
379
409
|
}
|
|
@@ -400,6 +430,8 @@ exports.ReplayStatus = {
|
|
|
400
430
|
message.totalMessageCount = object.totalMessageCount ?? 0;
|
|
401
431
|
message.progressPct = object.progressPct ?? 0;
|
|
402
432
|
message.loop = object.loop ?? false;
|
|
433
|
+
message.rangeStart = object.rangeStart ?? undefined;
|
|
434
|
+
message.rangeEnd = object.rangeEnd ?? undefined;
|
|
403
435
|
message.daemon = (object.daemon !== undefined && object.daemon !== null)
|
|
404
436
|
? exports.DaemonInfo.fromPartial(object.daemon)
|
|
405
437
|
: undefined;
|
package/dist/payloads/Route.d.ts
CHANGED
|
@@ -417,6 +417,9 @@ export interface Waypoints {
|
|
|
417
417
|
* route sets no default speed" as distinct from "this route defaults to
|
|
418
418
|
* zero", and a consumer merging defaults into a waypoint cannot tell which
|
|
419
419
|
* it was handed.
|
|
420
|
+
*
|
|
421
|
+
* `Leg.xtd_corridor_mode` and both boundary lists are ignored here: a drawn
|
|
422
|
+
* corridor belongs to one stretch of water and cannot be a default (§6.2.2).
|
|
420
423
|
*/
|
|
421
424
|
export interface DefaultWaypoint {
|
|
422
425
|
$type: "keelson.DefaultWaypoint";
|
|
@@ -128,6 +128,16 @@ export interface Voyage {
|
|
|
128
128
|
* voyages (e.g. crewed vs unmanned).
|
|
129
129
|
*/
|
|
130
130
|
reroutingPolicy: DynamicReroutingPolicy | undefined;
|
|
131
|
+
/**
|
|
132
|
+
* -- Who writes this voyage -------------------------------------------------
|
|
133
|
+
* `voyage/{voyage_id}` is a slot (§2.1.1): one position per voyage, overwritten
|
|
134
|
+
* as the voyage runs, with no producer chunk in the key. The current writer is
|
|
135
|
+
* therefore in the payload, and this is it — the navigation process conducting
|
|
136
|
+
* the voyage, while it serves `navigation_control/v1`
|
|
137
|
+
* (protocols/navigation_conduct.yaml). Empty before conduct begins: a voyage
|
|
138
|
+
* published PLANNED by a station is not yet conducted by anybody.
|
|
139
|
+
*/
|
|
140
|
+
conductedBy: string;
|
|
131
141
|
}
|
|
132
142
|
export declare const VoyageAuditEntry: MessageFns<VoyageAuditEntry, "keelson.VoyageAuditEntry">;
|
|
133
143
|
export declare const DynamicReroutingPolicy: MessageFns<DynamicReroutingPolicy, "keelson.DynamicReroutingPolicy">;
|
package/dist/payloads/Voyage.js
CHANGED
|
@@ -433,6 +433,7 @@ function createBaseVoyage() {
|
|
|
433
433
|
linkedProcedureIds: [],
|
|
434
434
|
auditTrail: [],
|
|
435
435
|
reroutingPolicy: undefined,
|
|
436
|
+
conductedBy: "",
|
|
436
437
|
};
|
|
437
438
|
}
|
|
438
439
|
exports.Voyage = {
|
|
@@ -507,6 +508,9 @@ exports.Voyage = {
|
|
|
507
508
|
if (message.reroutingPolicy !== undefined) {
|
|
508
509
|
exports.DynamicReroutingPolicy.encode(message.reroutingPolicy, writer.uint32(722).fork()).join();
|
|
509
510
|
}
|
|
511
|
+
if (message.conductedBy !== "") {
|
|
512
|
+
writer.uint32(730).string(message.conductedBy);
|
|
513
|
+
}
|
|
510
514
|
return writer;
|
|
511
515
|
},
|
|
512
516
|
decode(input, length) {
|
|
@@ -677,6 +681,13 @@ exports.Voyage = {
|
|
|
677
681
|
message.reroutingPolicy = exports.DynamicReroutingPolicy.decode(reader, reader.uint32());
|
|
678
682
|
continue;
|
|
679
683
|
}
|
|
684
|
+
case 91: {
|
|
685
|
+
if (tag !== 730) {
|
|
686
|
+
break;
|
|
687
|
+
}
|
|
688
|
+
message.conductedBy = reader.string();
|
|
689
|
+
continue;
|
|
690
|
+
}
|
|
680
691
|
}
|
|
681
692
|
if ((tag & 7) === 4 || tag === 0) {
|
|
682
693
|
break;
|
|
@@ -717,6 +728,7 @@ exports.Voyage = {
|
|
|
717
728
|
reroutingPolicy: isSet(object.reroutingPolicy)
|
|
718
729
|
? exports.DynamicReroutingPolicy.fromJSON(object.reroutingPolicy)
|
|
719
730
|
: undefined,
|
|
731
|
+
conductedBy: isSet(object.conductedBy) ? globalThis.String(object.conductedBy) : "",
|
|
720
732
|
};
|
|
721
733
|
},
|
|
722
734
|
toJSON(message) {
|
|
@@ -790,6 +802,9 @@ exports.Voyage = {
|
|
|
790
802
|
if (message.reroutingPolicy !== undefined) {
|
|
791
803
|
obj.reroutingPolicy = exports.DynamicReroutingPolicy.toJSON(message.reroutingPolicy);
|
|
792
804
|
}
|
|
805
|
+
if (message.conductedBy !== "") {
|
|
806
|
+
obj.conductedBy = message.conductedBy;
|
|
807
|
+
}
|
|
793
808
|
return obj;
|
|
794
809
|
},
|
|
795
810
|
create(base) {
|
|
@@ -826,6 +841,7 @@ exports.Voyage = {
|
|
|
826
841
|
message.reroutingPolicy = (object.reroutingPolicy !== undefined && object.reroutingPolicy !== null)
|
|
827
842
|
? exports.DynamicReroutingPolicy.fromPartial(object.reroutingPolicy)
|
|
828
843
|
: undefined;
|
|
844
|
+
message.conductedBy = object.conductedBy ?? "";
|
|
829
845
|
return message;
|
|
830
846
|
},
|
|
831
847
|
};
|
package/dist/subjects.json
CHANGED
|
@@ -172,7 +172,6 @@
|
|
|
172
172
|
"container_status": "keelson.ContainerHostStatus",
|
|
173
173
|
"container_stats": "keelson.ContainerHostStats",
|
|
174
174
|
"radio_channel_ppm_pct": "keelson.TimestampedFloat",
|
|
175
|
-
"radio_rssi": "keelson.TimestampedFloat",
|
|
176
175
|
"radio_rsrp_dbm": "keelson.TimestampedFloat",
|
|
177
176
|
"radio_rsrq_db": "keelson.TimestampedFloat",
|
|
178
177
|
"radio_sinr_db": "keelson.TimestampedFloat",
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rise-maritime/keelson-js",
|
|
3
3
|
"//version": "NOT the published version. The release workflow overwrites it from the release tag (npm version --no-git-tag-version), so tag and artifact cannot disagree. Only matters for local installs; do not hand-bump before tagging — that manual step is what broke release 0.5.4.",
|
|
4
|
-
"version": "0.6.0-experimental.
|
|
4
|
+
"version": "0.6.0-experimental.8",
|
|
5
5
|
"description": "Keelson JavaScript SDK with Node-RED nodes",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"files": [
|