@rise-maritime/keelson-js 0.6.0-alpha.255.dev.1 → 0.6.0-alpha.275.dev.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.
Files changed (48) hide show
  1. package/dist/index.d.ts +83 -8
  2. package/dist/index.js +23 -1
  3. package/dist/index.test.js +31 -0
  4. package/dist/interfaces/AlarmAck.d.ts +2 -2
  5. package/dist/interfaces/AlarmAck.js +2 -2
  6. package/dist/interfaces/ContainerControl.d.ts +239 -0
  7. package/dist/interfaces/ContainerControl.js +1053 -0
  8. package/dist/interfaces/ContainerHost.d.ts +403 -0
  9. package/dist/interfaces/ContainerHost.js +1230 -0
  10. package/dist/interfaces/ErrorResponse.d.ts +7 -2
  11. package/dist/interfaces/ErrorResponse.js +12 -2
  12. package/dist/interfaces/Route.d.ts +141 -6
  13. package/dist/interfaces/Route.js +309 -4
  14. package/dist/interfaces/RoutePlanner.d.ts +19 -1
  15. package/dist/interfaces/RoutePlanner.js +23 -1
  16. package/dist/interfaces/ScenarioControl.d.ts +132 -3
  17. package/dist/interfaces/ScenarioControl.js +439 -37
  18. package/dist/interfaces/VehicleNavigation.d.ts +55 -0
  19. package/dist/interfaces/VehicleNavigation.js +233 -1
  20. package/dist/interfaces/VehicleSimulatorControl.d.ts +0 -83
  21. package/dist/interfaces/VehicleSimulatorControl.js +1 -293
  22. package/dist/interfaces/serviceRegistry.d.ts +84 -8
  23. package/dist/interfaces/serviceRegistry.js +4 -0
  24. package/dist/interfaces.json +2 -0
  25. package/dist/payloads/AdviceDisposition.d.ts +55 -0
  26. package/dist/payloads/AdviceDisposition.js +242 -0
  27. package/dist/payloads/ChecklistHandover.d.ts +522 -0
  28. package/dist/payloads/ChecklistHandover.js +1735 -0
  29. package/dist/payloads/ContainerHost.d.ts +407 -0
  30. package/dist/payloads/ContainerHost.js +1245 -0
  31. package/dist/payloads/Encounter.d.ts +104 -0
  32. package/dist/payloads/Encounter.js +573 -0
  33. package/dist/payloads/NavigationAdvice.d.ts +94 -0
  34. package/dist/payloads/NavigationAdvice.js +596 -0
  35. package/dist/payloads/NavigationState.d.ts +90 -0
  36. package/dist/payloads/NavigationState.js +377 -0
  37. package/dist/payloads/Route.d.ts +142 -6
  38. package/dist/payloads/Route.js +318 -4
  39. package/dist/payloads/RouteExecution.d.ts +7 -0
  40. package/dist/payloads/ScenarioEvent.d.ts +14 -0
  41. package/dist/payloads/ScenarioEvent.js +16 -0
  42. package/dist/payloads/index.d.ts +1 -1
  43. package/dist/payloads/index.js +2 -2
  44. package/dist/payloads/index.keelson.d.ts +10 -4
  45. package/dist/payloads/index.keelson.js +10 -4
  46. package/dist/qos.json +6 -0
  47. package/dist/subjects.json +20 -1
  48. package/package.json +1 -1
@@ -0,0 +1,94 @@
1
+ import { BinaryReader, BinaryWriter } from "@bufbuild/protobuf/wire";
2
+ /**
3
+ * What own ship's navigation advises doing about one or more encounters.
4
+ *
5
+ * ADVICE IS A RECORD, NEVER A COMMAND. Nothing acts on this message by receiving it. Acting on it
6
+ * is a separate, authorised publish on the vehicle interfaces, after an AdviceDisposition of
7
+ * ACCEPTED from whoever holds the decision. That separation is the point: the advisor can be the
8
+ * author of the advice without ever holding the conn.
9
+ */
10
+ export interface NavigationAdvice {
11
+ $type: "keelson.NavigationAdvice";
12
+ timestamp: Date | undefined;
13
+ /**
14
+ * UUID, and the trailing key token. Restated with the same id while the same manoeuvre holds;
15
+ * a different manoeuvre is a new advice that supersedes this one.
16
+ */
17
+ adviceId: string;
18
+ voyageId?: string | undefined;
19
+ kind: NavigationAdvice_Kind;
20
+ /** The encounters this advice answers. Every open encounter with risk at or above RISK. */
21
+ encounterIds: string[];
22
+ /** Absent when the kind does not change that half (a pure course alteration has no propulsion). */
23
+ steering: NavigationAdvice_SteeringProposal | undefined;
24
+ propulsion: NavigationAdvice_PropulsionProposal | undefined;
25
+ /** The own-ship state the advice was computed from, so a reader can see the size of the change. */
26
+ fromCourseOverGroundDeg?: number | undefined;
27
+ fromSogMps?: number | undefined;
28
+ /** Consumers act within this window or not at all. */
29
+ validFrom: Date | undefined;
30
+ validTo: Date | undefined;
31
+ /**
32
+ * What the advisor predicts if the advice is followed now and held, against every target in
33
+ * range, not only the ones in encounter_ids. Constant-velocity prediction for the targets.
34
+ */
35
+ expectedMinCpaM?: number | undefined;
36
+ expectedMinRangeM?: number | undefined;
37
+ rules: string[];
38
+ /**
39
+ * Why, including what was NOT considered (e.g. "not checked against the chart"). Consumers MUST
40
+ * NOT parse it.
41
+ */
42
+ rationale: string;
43
+ /** Identifies the policy that produced this advice, as OperationalAuthority does. */
44
+ policyId?: string | undefined;
45
+ policyConfigDigest?: Uint8Array | undefined;
46
+ }
47
+ export declare enum NavigationAdvice_Kind {
48
+ KIND_UNSPECIFIED = 0,
49
+ KIND_COURSE_ALTERATION = 1,
50
+ KIND_SPEED_CHANGE = 2,
51
+ KIND_COURSE_AND_SPEED = 3,
52
+ /** KIND_STOP - take all way off */
53
+ KIND_STOP = 4,
54
+ /** KIND_MAINTAIN - stand on: keep course and speed (Rule 17(a)(i)), advised explicitly */
55
+ KIND_MAINTAIN = 5,
56
+ /** KIND_RESUME_TRACK - the encounters this avoided have closed */
57
+ KIND_RESUME_TRACK = 6,
58
+ UNRECOGNIZED = -1
59
+ }
60
+ export declare function navigationAdvice_KindFromJSON(object: any): NavigationAdvice_Kind;
61
+ export declare function navigationAdvice_KindToJSON(object: NavigationAdvice_Kind): string;
62
+ export interface NavigationAdvice_SteeringProposal {
63
+ $type: "keelson.NavigationAdvice.SteeringProposal";
64
+ courseOverGroundDeg?: number | undefined;
65
+ headingDeg?: number | undefined;
66
+ }
67
+ export interface NavigationAdvice_PropulsionProposal {
68
+ $type: "keelson.NavigationAdvice.PropulsionProposal";
69
+ sogMps?: number | undefined;
70
+ stwMps?: number | undefined;
71
+ }
72
+ export declare const NavigationAdvice: MessageFns<NavigationAdvice, "keelson.NavigationAdvice">;
73
+ export declare const NavigationAdvice_SteeringProposal: MessageFns<NavigationAdvice_SteeringProposal, "keelson.NavigationAdvice.SteeringProposal">;
74
+ export declare const NavigationAdvice_PropulsionProposal: MessageFns<NavigationAdvice_PropulsionProposal, "keelson.NavigationAdvice.PropulsionProposal">;
75
+ type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
76
+ type DeepPartial<T> = T extends Builtin ? T : T extends globalThis.Array<infer U> ? globalThis.Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : T extends {} ? {
77
+ [K in Exclude<keyof T, "$type">]?: DeepPartial<T[K]>;
78
+ } : Partial<T>;
79
+ type KeysOfUnion<T> = T extends T ? keyof T : never;
80
+ type Exact<P, I extends P> = P extends Builtin ? P : P & {
81
+ [K in keyof P]: Exact<P[K], I[K]>;
82
+ } & {
83
+ [K in Exclude<keyof I, KeysOfUnion<P> | "$type">]: never;
84
+ };
85
+ interface MessageFns<T, V extends string> {
86
+ readonly $type: V;
87
+ encode(message: T, writer?: BinaryWriter): BinaryWriter;
88
+ decode(input: BinaryReader | Uint8Array, length?: number): T;
89
+ fromJSON(object: any): T;
90
+ toJSON(message: T): unknown;
91
+ create<I extends Exact<DeepPartial<T>, I>>(base?: I): T;
92
+ fromPartial<I extends Exact<DeepPartial<T>, I>>(object: I): T;
93
+ }
94
+ export {};
@@ -0,0 +1,596 @@
1
+ "use strict";
2
+ // Code generated by protoc-gen-ts_proto. DO NOT EDIT.
3
+ // versions:
4
+ // protoc-gen-ts_proto v2.6.1
5
+ // protoc v6.30.2
6
+ // source: NavigationAdvice.proto
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.NavigationAdvice_PropulsionProposal = exports.NavigationAdvice_SteeringProposal = exports.NavigationAdvice = exports.navigationAdvice_KindToJSON = exports.navigationAdvice_KindFromJSON = exports.NavigationAdvice_Kind = void 0;
9
+ /* eslint-disable */
10
+ const wire_1 = require("@bufbuild/protobuf/wire");
11
+ const timestamp_1 = require("./google/protobuf/timestamp");
12
+ const typeRegistry_1 = require("./typeRegistry");
13
+ var NavigationAdvice_Kind;
14
+ (function (NavigationAdvice_Kind) {
15
+ NavigationAdvice_Kind[NavigationAdvice_Kind["KIND_UNSPECIFIED"] = 0] = "KIND_UNSPECIFIED";
16
+ NavigationAdvice_Kind[NavigationAdvice_Kind["KIND_COURSE_ALTERATION"] = 1] = "KIND_COURSE_ALTERATION";
17
+ NavigationAdvice_Kind[NavigationAdvice_Kind["KIND_SPEED_CHANGE"] = 2] = "KIND_SPEED_CHANGE";
18
+ NavigationAdvice_Kind[NavigationAdvice_Kind["KIND_COURSE_AND_SPEED"] = 3] = "KIND_COURSE_AND_SPEED";
19
+ /** KIND_STOP - take all way off */
20
+ NavigationAdvice_Kind[NavigationAdvice_Kind["KIND_STOP"] = 4] = "KIND_STOP";
21
+ /** KIND_MAINTAIN - stand on: keep course and speed (Rule 17(a)(i)), advised explicitly */
22
+ NavigationAdvice_Kind[NavigationAdvice_Kind["KIND_MAINTAIN"] = 5] = "KIND_MAINTAIN";
23
+ /** KIND_RESUME_TRACK - the encounters this avoided have closed */
24
+ NavigationAdvice_Kind[NavigationAdvice_Kind["KIND_RESUME_TRACK"] = 6] = "KIND_RESUME_TRACK";
25
+ NavigationAdvice_Kind[NavigationAdvice_Kind["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
26
+ })(NavigationAdvice_Kind || (exports.NavigationAdvice_Kind = NavigationAdvice_Kind = {}));
27
+ function navigationAdvice_KindFromJSON(object) {
28
+ switch (object) {
29
+ case 0:
30
+ case "KIND_UNSPECIFIED":
31
+ return NavigationAdvice_Kind.KIND_UNSPECIFIED;
32
+ case 1:
33
+ case "KIND_COURSE_ALTERATION":
34
+ return NavigationAdvice_Kind.KIND_COURSE_ALTERATION;
35
+ case 2:
36
+ case "KIND_SPEED_CHANGE":
37
+ return NavigationAdvice_Kind.KIND_SPEED_CHANGE;
38
+ case 3:
39
+ case "KIND_COURSE_AND_SPEED":
40
+ return NavigationAdvice_Kind.KIND_COURSE_AND_SPEED;
41
+ case 4:
42
+ case "KIND_STOP":
43
+ return NavigationAdvice_Kind.KIND_STOP;
44
+ case 5:
45
+ case "KIND_MAINTAIN":
46
+ return NavigationAdvice_Kind.KIND_MAINTAIN;
47
+ case 6:
48
+ case "KIND_RESUME_TRACK":
49
+ return NavigationAdvice_Kind.KIND_RESUME_TRACK;
50
+ case -1:
51
+ case "UNRECOGNIZED":
52
+ default:
53
+ return NavigationAdvice_Kind.UNRECOGNIZED;
54
+ }
55
+ }
56
+ exports.navigationAdvice_KindFromJSON = navigationAdvice_KindFromJSON;
57
+ function navigationAdvice_KindToJSON(object) {
58
+ switch (object) {
59
+ case NavigationAdvice_Kind.KIND_UNSPECIFIED:
60
+ return "KIND_UNSPECIFIED";
61
+ case NavigationAdvice_Kind.KIND_COURSE_ALTERATION:
62
+ return "KIND_COURSE_ALTERATION";
63
+ case NavigationAdvice_Kind.KIND_SPEED_CHANGE:
64
+ return "KIND_SPEED_CHANGE";
65
+ case NavigationAdvice_Kind.KIND_COURSE_AND_SPEED:
66
+ return "KIND_COURSE_AND_SPEED";
67
+ case NavigationAdvice_Kind.KIND_STOP:
68
+ return "KIND_STOP";
69
+ case NavigationAdvice_Kind.KIND_MAINTAIN:
70
+ return "KIND_MAINTAIN";
71
+ case NavigationAdvice_Kind.KIND_RESUME_TRACK:
72
+ return "KIND_RESUME_TRACK";
73
+ case NavigationAdvice_Kind.UNRECOGNIZED:
74
+ default:
75
+ return "UNRECOGNIZED";
76
+ }
77
+ }
78
+ exports.navigationAdvice_KindToJSON = navigationAdvice_KindToJSON;
79
+ function createBaseNavigationAdvice() {
80
+ return {
81
+ $type: "keelson.NavigationAdvice",
82
+ timestamp: undefined,
83
+ adviceId: "",
84
+ voyageId: undefined,
85
+ kind: 0,
86
+ encounterIds: [],
87
+ steering: undefined,
88
+ propulsion: undefined,
89
+ fromCourseOverGroundDeg: undefined,
90
+ fromSogMps: undefined,
91
+ validFrom: undefined,
92
+ validTo: undefined,
93
+ expectedMinCpaM: undefined,
94
+ expectedMinRangeM: undefined,
95
+ rules: [],
96
+ rationale: "",
97
+ policyId: undefined,
98
+ policyConfigDigest: undefined,
99
+ };
100
+ }
101
+ exports.NavigationAdvice = {
102
+ $type: "keelson.NavigationAdvice",
103
+ encode(message, writer = new wire_1.BinaryWriter()) {
104
+ if (message.timestamp !== undefined) {
105
+ timestamp_1.Timestamp.encode(toTimestamp(message.timestamp), writer.uint32(10).fork()).join();
106
+ }
107
+ if (message.adviceId !== "") {
108
+ writer.uint32(18).string(message.adviceId);
109
+ }
110
+ if (message.voyageId !== undefined) {
111
+ writer.uint32(26).string(message.voyageId);
112
+ }
113
+ if (message.kind !== 0) {
114
+ writer.uint32(32).int32(message.kind);
115
+ }
116
+ for (const v of message.encounterIds) {
117
+ writer.uint32(42).string(v);
118
+ }
119
+ if (message.steering !== undefined) {
120
+ exports.NavigationAdvice_SteeringProposal.encode(message.steering, writer.uint32(82).fork()).join();
121
+ }
122
+ if (message.propulsion !== undefined) {
123
+ exports.NavigationAdvice_PropulsionProposal.encode(message.propulsion, writer.uint32(90).fork()).join();
124
+ }
125
+ if (message.fromCourseOverGroundDeg !== undefined) {
126
+ writer.uint32(97).double(message.fromCourseOverGroundDeg);
127
+ }
128
+ if (message.fromSogMps !== undefined) {
129
+ writer.uint32(105).double(message.fromSogMps);
130
+ }
131
+ if (message.validFrom !== undefined) {
132
+ timestamp_1.Timestamp.encode(toTimestamp(message.validFrom), writer.uint32(162).fork()).join();
133
+ }
134
+ if (message.validTo !== undefined) {
135
+ timestamp_1.Timestamp.encode(toTimestamp(message.validTo), writer.uint32(170).fork()).join();
136
+ }
137
+ if (message.expectedMinCpaM !== undefined) {
138
+ writer.uint32(245).float(message.expectedMinCpaM);
139
+ }
140
+ if (message.expectedMinRangeM !== undefined) {
141
+ writer.uint32(253).float(message.expectedMinRangeM);
142
+ }
143
+ for (const v of message.rules) {
144
+ writer.uint32(322).string(v);
145
+ }
146
+ if (message.rationale !== "") {
147
+ writer.uint32(330).string(message.rationale);
148
+ }
149
+ if (message.policyId !== undefined) {
150
+ writer.uint32(402).string(message.policyId);
151
+ }
152
+ if (message.policyConfigDigest !== undefined) {
153
+ writer.uint32(410).bytes(message.policyConfigDigest);
154
+ }
155
+ return writer;
156
+ },
157
+ decode(input, length) {
158
+ const reader = input instanceof wire_1.BinaryReader ? input : new wire_1.BinaryReader(input);
159
+ let end = length === undefined ? reader.len : reader.pos + length;
160
+ const message = createBaseNavigationAdvice();
161
+ while (reader.pos < end) {
162
+ const tag = reader.uint32();
163
+ switch (tag >>> 3) {
164
+ case 1: {
165
+ if (tag !== 10) {
166
+ break;
167
+ }
168
+ message.timestamp = fromTimestamp(timestamp_1.Timestamp.decode(reader, reader.uint32()));
169
+ continue;
170
+ }
171
+ case 2: {
172
+ if (tag !== 18) {
173
+ break;
174
+ }
175
+ message.adviceId = reader.string();
176
+ continue;
177
+ }
178
+ case 3: {
179
+ if (tag !== 26) {
180
+ break;
181
+ }
182
+ message.voyageId = reader.string();
183
+ continue;
184
+ }
185
+ case 4: {
186
+ if (tag !== 32) {
187
+ break;
188
+ }
189
+ message.kind = reader.int32();
190
+ continue;
191
+ }
192
+ case 5: {
193
+ if (tag !== 42) {
194
+ break;
195
+ }
196
+ message.encounterIds.push(reader.string());
197
+ continue;
198
+ }
199
+ case 10: {
200
+ if (tag !== 82) {
201
+ break;
202
+ }
203
+ message.steering = exports.NavigationAdvice_SteeringProposal.decode(reader, reader.uint32());
204
+ continue;
205
+ }
206
+ case 11: {
207
+ if (tag !== 90) {
208
+ break;
209
+ }
210
+ message.propulsion = exports.NavigationAdvice_PropulsionProposal.decode(reader, reader.uint32());
211
+ continue;
212
+ }
213
+ case 12: {
214
+ if (tag !== 97) {
215
+ break;
216
+ }
217
+ message.fromCourseOverGroundDeg = reader.double();
218
+ continue;
219
+ }
220
+ case 13: {
221
+ if (tag !== 105) {
222
+ break;
223
+ }
224
+ message.fromSogMps = reader.double();
225
+ continue;
226
+ }
227
+ case 20: {
228
+ if (tag !== 162) {
229
+ break;
230
+ }
231
+ message.validFrom = fromTimestamp(timestamp_1.Timestamp.decode(reader, reader.uint32()));
232
+ continue;
233
+ }
234
+ case 21: {
235
+ if (tag !== 170) {
236
+ break;
237
+ }
238
+ message.validTo = fromTimestamp(timestamp_1.Timestamp.decode(reader, reader.uint32()));
239
+ continue;
240
+ }
241
+ case 30: {
242
+ if (tag !== 245) {
243
+ break;
244
+ }
245
+ message.expectedMinCpaM = reader.float();
246
+ continue;
247
+ }
248
+ case 31: {
249
+ if (tag !== 253) {
250
+ break;
251
+ }
252
+ message.expectedMinRangeM = reader.float();
253
+ continue;
254
+ }
255
+ case 40: {
256
+ if (tag !== 322) {
257
+ break;
258
+ }
259
+ message.rules.push(reader.string());
260
+ continue;
261
+ }
262
+ case 41: {
263
+ if (tag !== 330) {
264
+ break;
265
+ }
266
+ message.rationale = reader.string();
267
+ continue;
268
+ }
269
+ case 50: {
270
+ if (tag !== 402) {
271
+ break;
272
+ }
273
+ message.policyId = reader.string();
274
+ continue;
275
+ }
276
+ case 51: {
277
+ if (tag !== 410) {
278
+ break;
279
+ }
280
+ message.policyConfigDigest = reader.bytes();
281
+ continue;
282
+ }
283
+ }
284
+ if ((tag & 7) === 4 || tag === 0) {
285
+ break;
286
+ }
287
+ reader.skip(tag & 7);
288
+ }
289
+ return message;
290
+ },
291
+ fromJSON(object) {
292
+ return {
293
+ $type: exports.NavigationAdvice.$type,
294
+ timestamp: isSet(object.timestamp) ? fromJsonTimestamp(object.timestamp) : undefined,
295
+ adviceId: isSet(object.adviceId) ? globalThis.String(object.adviceId) : "",
296
+ voyageId: isSet(object.voyageId) ? globalThis.String(object.voyageId) : undefined,
297
+ kind: isSet(object.kind) ? navigationAdvice_KindFromJSON(object.kind) : 0,
298
+ encounterIds: globalThis.Array.isArray(object?.encounterIds)
299
+ ? object.encounterIds.map((e) => globalThis.String(e))
300
+ : [],
301
+ steering: isSet(object.steering) ? exports.NavigationAdvice_SteeringProposal.fromJSON(object.steering) : undefined,
302
+ propulsion: isSet(object.propulsion)
303
+ ? exports.NavigationAdvice_PropulsionProposal.fromJSON(object.propulsion)
304
+ : undefined,
305
+ fromCourseOverGroundDeg: isSet(object.fromCourseOverGroundDeg)
306
+ ? globalThis.Number(object.fromCourseOverGroundDeg)
307
+ : undefined,
308
+ fromSogMps: isSet(object.fromSogMps) ? globalThis.Number(object.fromSogMps) : undefined,
309
+ validFrom: isSet(object.validFrom) ? fromJsonTimestamp(object.validFrom) : undefined,
310
+ validTo: isSet(object.validTo) ? fromJsonTimestamp(object.validTo) : undefined,
311
+ expectedMinCpaM: isSet(object.expectedMinCpaM) ? globalThis.Number(object.expectedMinCpaM) : undefined,
312
+ expectedMinRangeM: isSet(object.expectedMinRangeM) ? globalThis.Number(object.expectedMinRangeM) : undefined,
313
+ rules: globalThis.Array.isArray(object?.rules) ? object.rules.map((e) => globalThis.String(e)) : [],
314
+ rationale: isSet(object.rationale) ? globalThis.String(object.rationale) : "",
315
+ policyId: isSet(object.policyId) ? globalThis.String(object.policyId) : undefined,
316
+ policyConfigDigest: isSet(object.policyConfigDigest) ? bytesFromBase64(object.policyConfigDigest) : undefined,
317
+ };
318
+ },
319
+ toJSON(message) {
320
+ const obj = {};
321
+ if (message.timestamp !== undefined) {
322
+ obj.timestamp = message.timestamp.toISOString();
323
+ }
324
+ if (message.adviceId !== "") {
325
+ obj.adviceId = message.adviceId;
326
+ }
327
+ if (message.voyageId !== undefined) {
328
+ obj.voyageId = message.voyageId;
329
+ }
330
+ if (message.kind !== 0) {
331
+ obj.kind = navigationAdvice_KindToJSON(message.kind);
332
+ }
333
+ if (message.encounterIds?.length) {
334
+ obj.encounterIds = message.encounterIds;
335
+ }
336
+ if (message.steering !== undefined) {
337
+ obj.steering = exports.NavigationAdvice_SteeringProposal.toJSON(message.steering);
338
+ }
339
+ if (message.propulsion !== undefined) {
340
+ obj.propulsion = exports.NavigationAdvice_PropulsionProposal.toJSON(message.propulsion);
341
+ }
342
+ if (message.fromCourseOverGroundDeg !== undefined) {
343
+ obj.fromCourseOverGroundDeg = message.fromCourseOverGroundDeg;
344
+ }
345
+ if (message.fromSogMps !== undefined) {
346
+ obj.fromSogMps = message.fromSogMps;
347
+ }
348
+ if (message.validFrom !== undefined) {
349
+ obj.validFrom = message.validFrom.toISOString();
350
+ }
351
+ if (message.validTo !== undefined) {
352
+ obj.validTo = message.validTo.toISOString();
353
+ }
354
+ if (message.expectedMinCpaM !== undefined) {
355
+ obj.expectedMinCpaM = message.expectedMinCpaM;
356
+ }
357
+ if (message.expectedMinRangeM !== undefined) {
358
+ obj.expectedMinRangeM = message.expectedMinRangeM;
359
+ }
360
+ if (message.rules?.length) {
361
+ obj.rules = message.rules;
362
+ }
363
+ if (message.rationale !== "") {
364
+ obj.rationale = message.rationale;
365
+ }
366
+ if (message.policyId !== undefined) {
367
+ obj.policyId = message.policyId;
368
+ }
369
+ if (message.policyConfigDigest !== undefined) {
370
+ obj.policyConfigDigest = base64FromBytes(message.policyConfigDigest);
371
+ }
372
+ return obj;
373
+ },
374
+ create(base) {
375
+ return exports.NavigationAdvice.fromPartial(base ?? {});
376
+ },
377
+ fromPartial(object) {
378
+ const message = createBaseNavigationAdvice();
379
+ message.timestamp = object.timestamp ?? undefined;
380
+ message.adviceId = object.adviceId ?? "";
381
+ message.voyageId = object.voyageId ?? undefined;
382
+ message.kind = object.kind ?? 0;
383
+ message.encounterIds = object.encounterIds?.map((e) => e) || [];
384
+ message.steering = (object.steering !== undefined && object.steering !== null)
385
+ ? exports.NavigationAdvice_SteeringProposal.fromPartial(object.steering)
386
+ : undefined;
387
+ message.propulsion = (object.propulsion !== undefined && object.propulsion !== null)
388
+ ? exports.NavigationAdvice_PropulsionProposal.fromPartial(object.propulsion)
389
+ : undefined;
390
+ message.fromCourseOverGroundDeg = object.fromCourseOverGroundDeg ?? undefined;
391
+ message.fromSogMps = object.fromSogMps ?? undefined;
392
+ message.validFrom = object.validFrom ?? undefined;
393
+ message.validTo = object.validTo ?? undefined;
394
+ message.expectedMinCpaM = object.expectedMinCpaM ?? undefined;
395
+ message.expectedMinRangeM = object.expectedMinRangeM ?? undefined;
396
+ message.rules = object.rules?.map((e) => e) || [];
397
+ message.rationale = object.rationale ?? "";
398
+ message.policyId = object.policyId ?? undefined;
399
+ message.policyConfigDigest = object.policyConfigDigest ?? undefined;
400
+ return message;
401
+ },
402
+ };
403
+ typeRegistry_1.messageTypeRegistry.set(exports.NavigationAdvice.$type, exports.NavigationAdvice);
404
+ function createBaseNavigationAdvice_SteeringProposal() {
405
+ return { $type: "keelson.NavigationAdvice.SteeringProposal", courseOverGroundDeg: undefined, headingDeg: undefined };
406
+ }
407
+ exports.NavigationAdvice_SteeringProposal = {
408
+ $type: "keelson.NavigationAdvice.SteeringProposal",
409
+ encode(message, writer = new wire_1.BinaryWriter()) {
410
+ if (message.courseOverGroundDeg !== undefined) {
411
+ writer.uint32(9).double(message.courseOverGroundDeg);
412
+ }
413
+ if (message.headingDeg !== undefined) {
414
+ writer.uint32(17).double(message.headingDeg);
415
+ }
416
+ return writer;
417
+ },
418
+ decode(input, length) {
419
+ const reader = input instanceof wire_1.BinaryReader ? input : new wire_1.BinaryReader(input);
420
+ let end = length === undefined ? reader.len : reader.pos + length;
421
+ const message = createBaseNavigationAdvice_SteeringProposal();
422
+ while (reader.pos < end) {
423
+ const tag = reader.uint32();
424
+ switch (tag >>> 3) {
425
+ case 1: {
426
+ if (tag !== 9) {
427
+ break;
428
+ }
429
+ message.courseOverGroundDeg = reader.double();
430
+ continue;
431
+ }
432
+ case 2: {
433
+ if (tag !== 17) {
434
+ break;
435
+ }
436
+ message.headingDeg = reader.double();
437
+ continue;
438
+ }
439
+ }
440
+ if ((tag & 7) === 4 || tag === 0) {
441
+ break;
442
+ }
443
+ reader.skip(tag & 7);
444
+ }
445
+ return message;
446
+ },
447
+ fromJSON(object) {
448
+ return {
449
+ $type: exports.NavigationAdvice_SteeringProposal.$type,
450
+ courseOverGroundDeg: isSet(object.courseOverGroundDeg)
451
+ ? globalThis.Number(object.courseOverGroundDeg)
452
+ : undefined,
453
+ headingDeg: isSet(object.headingDeg) ? globalThis.Number(object.headingDeg) : undefined,
454
+ };
455
+ },
456
+ toJSON(message) {
457
+ const obj = {};
458
+ if (message.courseOverGroundDeg !== undefined) {
459
+ obj.courseOverGroundDeg = message.courseOverGroundDeg;
460
+ }
461
+ if (message.headingDeg !== undefined) {
462
+ obj.headingDeg = message.headingDeg;
463
+ }
464
+ return obj;
465
+ },
466
+ create(base) {
467
+ return exports.NavigationAdvice_SteeringProposal.fromPartial(base ?? {});
468
+ },
469
+ fromPartial(object) {
470
+ const message = createBaseNavigationAdvice_SteeringProposal();
471
+ message.courseOverGroundDeg = object.courseOverGroundDeg ?? undefined;
472
+ message.headingDeg = object.headingDeg ?? undefined;
473
+ return message;
474
+ },
475
+ };
476
+ typeRegistry_1.messageTypeRegistry.set(exports.NavigationAdvice_SteeringProposal.$type, exports.NavigationAdvice_SteeringProposal);
477
+ function createBaseNavigationAdvice_PropulsionProposal() {
478
+ return { $type: "keelson.NavigationAdvice.PropulsionProposal", sogMps: undefined, stwMps: undefined };
479
+ }
480
+ exports.NavigationAdvice_PropulsionProposal = {
481
+ $type: "keelson.NavigationAdvice.PropulsionProposal",
482
+ encode(message, writer = new wire_1.BinaryWriter()) {
483
+ if (message.sogMps !== undefined) {
484
+ writer.uint32(9).double(message.sogMps);
485
+ }
486
+ if (message.stwMps !== undefined) {
487
+ writer.uint32(17).double(message.stwMps);
488
+ }
489
+ return writer;
490
+ },
491
+ decode(input, length) {
492
+ const reader = input instanceof wire_1.BinaryReader ? input : new wire_1.BinaryReader(input);
493
+ let end = length === undefined ? reader.len : reader.pos + length;
494
+ const message = createBaseNavigationAdvice_PropulsionProposal();
495
+ while (reader.pos < end) {
496
+ const tag = reader.uint32();
497
+ switch (tag >>> 3) {
498
+ case 1: {
499
+ if (tag !== 9) {
500
+ break;
501
+ }
502
+ message.sogMps = reader.double();
503
+ continue;
504
+ }
505
+ case 2: {
506
+ if (tag !== 17) {
507
+ break;
508
+ }
509
+ message.stwMps = reader.double();
510
+ continue;
511
+ }
512
+ }
513
+ if ((tag & 7) === 4 || tag === 0) {
514
+ break;
515
+ }
516
+ reader.skip(tag & 7);
517
+ }
518
+ return message;
519
+ },
520
+ fromJSON(object) {
521
+ return {
522
+ $type: exports.NavigationAdvice_PropulsionProposal.$type,
523
+ sogMps: isSet(object.sogMps) ? globalThis.Number(object.sogMps) : undefined,
524
+ stwMps: isSet(object.stwMps) ? globalThis.Number(object.stwMps) : undefined,
525
+ };
526
+ },
527
+ toJSON(message) {
528
+ const obj = {};
529
+ if (message.sogMps !== undefined) {
530
+ obj.sogMps = message.sogMps;
531
+ }
532
+ if (message.stwMps !== undefined) {
533
+ obj.stwMps = message.stwMps;
534
+ }
535
+ return obj;
536
+ },
537
+ create(base) {
538
+ return exports.NavigationAdvice_PropulsionProposal.fromPartial(base ?? {});
539
+ },
540
+ fromPartial(object) {
541
+ const message = createBaseNavigationAdvice_PropulsionProposal();
542
+ message.sogMps = object.sogMps ?? undefined;
543
+ message.stwMps = object.stwMps ?? undefined;
544
+ return message;
545
+ },
546
+ };
547
+ typeRegistry_1.messageTypeRegistry.set(exports.NavigationAdvice_PropulsionProposal.$type, exports.NavigationAdvice_PropulsionProposal);
548
+ function bytesFromBase64(b64) {
549
+ if (globalThis.Buffer) {
550
+ return Uint8Array.from(globalThis.Buffer.from(b64, "base64"));
551
+ }
552
+ else {
553
+ const bin = globalThis.atob(b64);
554
+ const arr = new Uint8Array(bin.length);
555
+ for (let i = 0; i < bin.length; ++i) {
556
+ arr[i] = bin.charCodeAt(i);
557
+ }
558
+ return arr;
559
+ }
560
+ }
561
+ function base64FromBytes(arr) {
562
+ if (globalThis.Buffer) {
563
+ return globalThis.Buffer.from(arr).toString("base64");
564
+ }
565
+ else {
566
+ const bin = [];
567
+ arr.forEach((byte) => {
568
+ bin.push(globalThis.String.fromCharCode(byte));
569
+ });
570
+ return globalThis.btoa(bin.join(""));
571
+ }
572
+ }
573
+ function toTimestamp(date) {
574
+ const seconds = Math.trunc(date.getTime() / 1000);
575
+ const nanos = (date.getTime() % 1000) * 1000000;
576
+ return { $type: "google.protobuf.Timestamp", seconds, nanos };
577
+ }
578
+ function fromTimestamp(t) {
579
+ let millis = (t.seconds || 0) * 1000;
580
+ millis += (t.nanos || 0) / 1000000;
581
+ return new globalThis.Date(millis);
582
+ }
583
+ function fromJsonTimestamp(o) {
584
+ if (o instanceof globalThis.Date) {
585
+ return o;
586
+ }
587
+ else if (typeof o === "string") {
588
+ return new globalThis.Date(o);
589
+ }
590
+ else {
591
+ return fromTimestamp(timestamp_1.Timestamp.fromJSON(o));
592
+ }
593
+ }
594
+ function isSet(value) {
595
+ return value !== null && value !== undefined;
596
+ }