@idm-plugin/vessel 1.0.8 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,12 +1,40 @@
1
- var C = Object.defineProperty;
2
- var O = (M, u, e) => u in M ? C(M, u, { enumerable: !0, configurable: !0, writable: !0, value: e }) : M[u] = e;
3
- var q = (M, u, e) => (O(M, typeof u != "symbol" ? u + "" : u, e), e);
1
+ var L = Object.defineProperty;
2
+ var F = (p, u, e) => u in p ? L(p, u, { enumerable: !0, configurable: !0, writable: !0, value: e }) : p[u] = e;
3
+ var q = (p, u, e) => (F(p, typeof u != "symbol" ? u + "" : u, e), e);
4
4
  import Y from "got";
5
- import * as W from "log4js";
6
- import p from "moment";
7
- const j = W.getLogger();
8
- j.level = "info";
9
- class V {
5
+ import y from "moment";
6
+ function K(p) {
7
+ return p && p.__esModule && Object.prototype.hasOwnProperty.call(p, "default") ? p.default : p;
8
+ }
9
+ class W {
10
+ log() {
11
+ }
12
+ isLevelEnabled() {
13
+ return !1;
14
+ }
15
+ addContext() {
16
+ }
17
+ removeContext() {
18
+ }
19
+ clearContext() {
20
+ }
21
+ }
22
+ ["Trace", "Debug", "Info", "Warn", "Error", "Fatal", "Mark"].forEach((p) => {
23
+ W.prototype[p.toLowerCase()] = () => {
24
+ }, W.prototype[`is${p}Enabled`] = () => !1;
25
+ });
26
+ const z = () => {
27
+ try {
28
+ return require("log4js");
29
+ } catch {
30
+ return null;
31
+ }
32
+ }, V = z(), G = V ? V.getLogger : () => new W();
33
+ var B = {
34
+ getLogger: G
35
+ };
36
+ const O = /* @__PURE__ */ K(B), j = O.getLogger();
37
+ class C {
10
38
  /**
11
39
  * 解析AIS状态码
12
40
  * @param status
@@ -47,7 +75,7 @@ class V {
47
75
  return { labelCn: e, labelEn: n };
48
76
  }
49
77
  }
50
- class B extends V {
78
+ class tt extends C {
51
79
  constructor(e, n) {
52
80
  super();
53
81
  q(this, "clientId");
@@ -69,15 +97,15 @@ class B extends V {
69
97
  expiresIn: o.expires_in,
70
98
  scope: o.scope,
71
99
  jti: o.jti,
72
- issuedAt: p().utc().format()
100
+ issuedAt: y().utc().format()
73
101
  });
74
102
  }
75
103
  async realTimePosition(e, n = {}) {
76
- var h, c, f;
77
- (!this.token || p().diff(p(this.token.issuedAt), "seconds") > ((h = this.token) == null ? void 0 : h.expiresIn) - 300) && await this.authToken(n);
104
+ var h, c, l;
105
+ (!this.token || y().diff(y(this.token.issuedAt), "seconds") > ((h = this.token) == null ? void 0 : h.expiresIn) - 300) && await this.authToken(n);
78
106
  const a = "https://svc.data.myvessel.cn/sdc/v1/vessels/status/location/unit", o = {
79
107
  headers: {
80
- Authorization: `${(c = this.token) == null ? void 0 : c.tokenType} ${(f = this.token) == null ? void 0 : f.accessToken}`
108
+ Authorization: `${(c = this.token) == null ? void 0 : c.tokenType} ${(l = this.token) == null ? void 0 : l.accessToken}`
81
109
  },
82
110
  searchParams: { mmsi: e }
83
111
  };
@@ -88,7 +116,7 @@ class B extends V {
88
116
  const t = s.data;
89
117
  for (const m in t)
90
118
  !isNaN(t[m]) && Number(t[m]) !== 1 / 0 && (t[m] = Number(t[m]));
91
- const r = p(`${t.postime} +08:00`, "YYYY-MM-DD HH:mm:ss +08:00");
119
+ const r = y(`${t.postime} +08:00`, "YYYY-MM-DD HH:mm:ss +08:00");
92
120
  return {
93
121
  mmsi: t.mmsi,
94
122
  name: t.vesselName,
@@ -115,17 +143,17 @@ class B extends V {
115
143
  };
116
144
  }
117
145
  async trajectory(e, n, a, o, s = !0, t = {}) {
118
- (!this.token || p().diff(p(this.token.issuedAt), "seconds") > this.token.expiresIn - 300) && await this.authToken(t);
119
- const r = await this.realTimePosition(e, t), i = p(n), h = p(a), c = [];
146
+ (!this.token || y().diff(y(this.token.issuedAt), "seconds") > this.token.expiresIn - 300) && await this.authToken(t);
147
+ const r = await this.realTimePosition(e, t), i = y(n), h = y(a), c = [];
120
148
  for (; h.diff(i, "day", !0) > 30; )
121
149
  await this.trajectoryIn30Day(e, i, i.clone().add(30, "day"), r, o, c, t), i.add(30, "day");
122
150
  return await this.trajectoryIn30Day(e, i, h, r, o, c, t), c;
123
151
  }
124
152
  async trajectoryIn30Day(e, n, a, o, s, t, r = {}) {
125
- var d, b, w, y, v;
153
+ var d, M, v, k, w;
126
154
  const i = "https://svc.data.myvessel.cn/sdc/v1/vessels/status/track", h = {
127
155
  headers: {
128
- Authorization: `${(d = this.token) == null ? void 0 : d.tokenType} ${(b = this.token) == null ? void 0 : b.accessToken}`
156
+ Authorization: `${(d = this.token) == null ? void 0 : d.tokenType} ${(M = this.token) == null ? void 0 : M.accessToken}`
129
157
  },
130
158
  json: {
131
159
  mmsi: e,
@@ -137,12 +165,12 @@ class B extends V {
137
165
  const c = await Y.post(i, h).json();
138
166
  if (c.code)
139
167
  return j.warn("[%s] fetch trajectory failed: %j", r.requestId, i, { message: c.message, status: c.status, code: c.code }), c;
140
- let f = -1;
141
- const m = p(`${(y = (w = c.data) == null ? void 0 : w[0]) == null ? void 0 : y.postime} +08:00`, "YYYY-MM-DD HH:mm:ss +08:00");
142
- return (v = c.data) == null || v.forEach((g) => {
168
+ let l = -1;
169
+ const m = y(`${(k = (v = c.data) == null ? void 0 : v[0]) == null ? void 0 : k.postime} +08:00`, "YYYY-MM-DD HH:mm:ss +08:00");
170
+ return (w = c.data) == null || w.forEach((g) => {
143
171
  for (const S in g)
144
172
  !isNaN(g[S]) && Number(g[S]) !== 1 / 0 && (g[S] = Number(g[S]));
145
- const I = p(`${g.postime} +08:00`, "YYYY-MM-DD HH:mm:ss +08:00"), N = g.eta ? p(`${g.eta} +08:00`, "YYYY-MM-DD HH:mm:ss +08:00") : void 0, l = g.status, { labelCn: E, labelEn: _ } = this.parseStatus(l), R = {
173
+ const I = y(`${g.postime} +08:00`, "YYYY-MM-DD HH:mm:ss +08:00"), N = g.eta ? y(`${g.eta} +08:00`, "YYYY-MM-DD HH:mm:ss +08:00") : void 0, f = g.status, { labelCn: D, labelEn: _ } = this.parseStatus(f), R = {
146
174
  mmsi: g.mmsi,
147
175
  imo: o == null ? void 0 : o.imo,
148
176
  lat: g.lat,
@@ -151,21 +179,21 @@ class B extends V {
151
179
  cog: g.cog,
152
180
  hdg: g.hdg,
153
181
  draught: g.draught,
154
- status: l,
182
+ status: f,
155
183
  eta: N == null ? void 0 : N.unix(),
156
184
  destination: g.dest,
157
185
  positionTime: I.unix(),
158
- labelCn: E,
186
+ labelCn: D,
159
187
  labelEn: _,
160
188
  method: "trajectory",
161
189
  vendor: "myVessel",
162
190
  utc: I.utc().format()
163
191
  }, H = Math.floor(I.diff(m, "minute", !0) / (s || 1));
164
- H !== f && (f = H, t.push(R));
192
+ H !== l && (l = H, t.push(R));
165
193
  }), t;
166
194
  }
167
195
  }
168
- class U extends V {
196
+ class et extends C {
169
197
  constructor(e) {
170
198
  super();
171
199
  q(this, "token");
@@ -185,7 +213,7 @@ class U extends V {
185
213
  for (const m in t)
186
214
  !isNaN(t[m]) && Number(t[m]) !== 1 / 0 && (t[m] = Number(t[m]));
187
215
  t.status = t.sp > 3 ? 0 : 1;
188
- const r = t.status, { labelCn: i, labelEn: h } = this.parseStatus(r), c = p(`${t.ti} +08:00`, "YYYY-MM-DD HH:mm:ss +08:00");
216
+ const r = t.status, { labelCn: i, labelEn: h } = this.parseStatus(r), c = y(`${t.ti} +08:00`, "YYYY-MM-DD HH:mm:ss +08:00");
189
217
  return {
190
218
  mmsi: t.m,
191
219
  name: t.n,
@@ -200,7 +228,7 @@ class U extends V {
200
228
  cog: t.co,
201
229
  hdg: t.h,
202
230
  rot: isNaN(t.rot) ? 0 : t.rot,
203
- eta: /\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/.test(t.eta) ? p(`${t.eta} +08:00`, "YYYY-MM-DD HH:mm:ss +08:00").unix() : void 0,
231
+ eta: /\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/.test(t.eta) ? y(`${t.eta} +08:00`, "YYYY-MM-DD HH:mm:ss +08:00").unix() : void 0,
204
232
  destination: t.destination,
205
233
  positionTime: c.unix(),
206
234
  utc: c.utc().format(),
@@ -241,55 +269,55 @@ class U extends V {
241
269
  async trajectory(e, n, a, o, s = !0, t = {}) {
242
270
  var g, I, N;
243
271
  const r = await this.realTimePosition(e, t);
244
- let i = p(n);
245
- const h = p(a), c = p();
272
+ let i = y(n);
273
+ const h = y(a), c = y();
246
274
  if (s) {
247
- let l = h.diff(i, "d", !0);
248
- l < 0 ? i = h.clone().subtract(40, "d") : l < 30 ? i.subtract(10, "d") : l < 60 ? i.subtract(5, "d") : i = h.clone().subtract(80, "d"), l = c.diff(h, "d", !0), h.add(l > 10 ? 240 : l * 24, "h");
275
+ let f = h.diff(i, "d", !0);
276
+ f < 0 ? i = h.clone().subtract(40, "d") : f < 30 ? i.subtract(10, "d") : f < 60 ? i.subtract(5, "d") : i = h.clone().subtract(80, "d"), f = c.diff(h, "d", !0), h.add(f > 10 ? 240 : f * 24, "h");
249
277
  }
250
- const f = {
278
+ const l = {
251
279
  searchParams: {
252
280
  endtime: h.utcOffset("+8:00").format("YYYY-MM-DD HH:mm:ss"),
253
281
  starttime: i.utcOffset("+8:00").format("YYYY-MM-DD HH:mm:ss"),
254
282
  mmsi: e,
255
283
  usertoken: this.token
256
284
  }
257
- }, m = "https://api.hifleet.com/position/trajectory/nocompressed/withstatic/token", d = await Y.get(m, f).json();
258
- j.info("[%s] fetch trajectory from: %s - %j", t.requestId, m, f);
259
- let b;
260
- d && (b = ((I = (g = d.ships) == null ? void 0 : g.offors) == null ? void 0 : I.ship) || [], b.length || j.warn("[%s] fetch trajectory failed: %j", t.requestId, d));
261
- const w = [];
262
- let y = -1;
263
- const v = p(`${(N = b == null ? void 0 : b[0]) == null ? void 0 : N.ti} +08:00`, "YYYY-MM-DD HH:mm:ss +08:00");
264
- for (const l of b) {
265
- for (const x in l)
266
- !isNaN(l[x]) && Number(l[x]) !== 1 / 0 && (l[x] = Number(l[x]));
267
- const E = p(`${l.ti} +08:00`, "YYYY-MM-DD HH:mm:ss +08:00");
268
- l.status = l.sp > 4 ? 0 : 1;
269
- const { labelEn: _, labelCn: R } = this.parseStatus(l.status), H = {
270
- mmsi: l.m,
271
- name: l.n,
285
+ }, m = "https://api.hifleet.com/position/trajectory/nocompressed/withstatic/token", d = await Y.get(m, l).json();
286
+ j.info("[%s] fetch trajectory from: %s - %j", t.requestId, m, l);
287
+ let M;
288
+ d && (M = ((I = (g = d.ships) == null ? void 0 : g.offors) == null ? void 0 : I.ship) || [], M.length || j.warn("[%s] fetch trajectory failed: %j", t.requestId, d));
289
+ const v = [];
290
+ let k = -1;
291
+ const w = y(`${(N = M == null ? void 0 : M[0]) == null ? void 0 : N.ti} +08:00`, "YYYY-MM-DD HH:mm:ss +08:00");
292
+ for (const f of M) {
293
+ for (const x in f)
294
+ !isNaN(f[x]) && Number(f[x]) !== 1 / 0 && (f[x] = Number(f[x]));
295
+ const D = y(`${f.ti} +08:00`, "YYYY-MM-DD HH:mm:ss +08:00");
296
+ f.status = f.sp > 4 ? 0 : 1;
297
+ const { labelEn: _, labelCn: R } = this.parseStatus(f.status), H = {
298
+ mmsi: f.m,
299
+ name: f.n,
272
300
  imo: r == null ? void 0 : r.imo,
273
- lat: l.la,
274
- lng: l.lo,
275
- draught: l.draught,
276
- sog: l.sp,
277
- cog: l.co,
278
- hdg: l.hdg,
279
- positionTime: E.unix(),
280
- utc: E.utc().format(),
281
- status: l.status,
301
+ lat: f.la,
302
+ lng: f.lo,
303
+ draught: f.draught,
304
+ sog: f.sp,
305
+ cog: f.co,
306
+ hdg: f.hdg,
307
+ positionTime: D.unix(),
308
+ utc: D.utc().format(),
309
+ status: f.status,
282
310
  labelCn: R,
283
311
  labelEn: _,
284
312
  method: "trajectory",
285
313
  vendor: "hifleet"
286
- }, S = Math.floor(E.diff(v, "minute", !0) / (o || 1));
287
- S !== y && (y = S, w.push(H));
314
+ }, S = Math.floor(D.diff(w, "minute", !0) / (o || 1));
315
+ S !== k && (k = S, v.push(H));
288
316
  }
289
- return w;
317
+ return v;
290
318
  }
291
319
  }
292
- class J extends V {
320
+ class st extends C {
293
321
  constructor(e) {
294
322
  super();
295
323
  q(this, "token");
@@ -306,9 +334,9 @@ class J extends V {
306
334
  if (j.info("[%s] fetch realtime position from: %s - %j", n.requestId, o, a), (s == null ? void 0 : s.status) !== 0)
307
335
  return s;
308
336
  const t = s.data[0];
309
- for (const f in t)
310
- !isNaN(t[f]) && Number(t[f]) !== 1 / 0 && (t[f] = Number(t[f]));
311
- const { labelCn: r, labelEn: i } = await this.parseStatus(t.navistat), h = p.unix(t.lasttime);
337
+ for (const l in t)
338
+ !isNaN(t[l]) && Number(t[l]) !== 1 / 0 && (t[l] = Number(t[l]));
339
+ const { labelCn: r, labelEn: i } = await this.parseStatus(t.navistat), h = y.unix(t.lasttime);
312
340
  return {
313
341
  mmsi: t.ShipID,
314
342
  name: t.name,
@@ -333,8 +361,8 @@ class J extends V {
333
361
  };
334
362
  }
335
363
  async trajectory(e, n, a, o, s = !0, t = {}) {
336
- var v;
337
- const r = await this.realTimePosition(e, t), i = p(n), h = p(a), c = "https://api.shipxy.com/apicall/GetShipTrack", f = {
364
+ var w;
365
+ const r = await this.realTimePosition(e, t), i = y(n), h = y(a), c = "https://api.shipxy.com/apicall/GetShipTrack", l = {
338
366
  searchParams: {
339
367
  id: e,
340
368
  k: this.token,
@@ -343,13 +371,13 @@ class J extends V {
343
371
  btm: i.unix(),
344
372
  etm: h.unix()
345
373
  }
346
- }, m = await Y.get(c, f).json();
347
- if (j.info("[%s] fetch trajectory from: %s - %j", t.requestId, c, f), (m == null ? void 0 : m.status) !== 0)
374
+ }, m = await Y.get(c, l).json();
375
+ if (j.info("[%s] fetch trajectory from: %s - %j", t.requestId, c, l), (m == null ? void 0 : m.status) !== 0)
348
376
  return m;
349
- const d = m == null ? void 0 : m.points, b = [], w = p.unix((v = d[0]) == null ? void 0 : v.utc);
350
- let y = -1;
377
+ const d = m == null ? void 0 : m.points, M = [], v = y.unix((w = d[0]) == null ? void 0 : w.utc);
378
+ let k = -1;
351
379
  for (const g of d) {
352
- const I = p.unix(g.utc), N = {
380
+ const I = y.unix(g.utc), N = {
353
381
  imo: r == null ? void 0 : r.imo,
354
382
  mmsi: e,
355
383
  sog: Math.round(g.sog * 3600 / 1e3 / 1852 * 100) / 100,
@@ -360,13 +388,13 @@ class J extends V {
360
388
  utc: I.utc().format(),
361
389
  method: "trajectory",
362
390
  vendor: "shipxy"
363
- }, l = Math.floor(I.diff(w, "minute", !0) / (o || 1));
364
- l !== y && (y = l, b.push(N));
391
+ }, f = Math.floor(I.diff(v, "minute", !0) / (o || 1));
392
+ f !== k && (k = f, M.push(N));
365
393
  }
366
- return b;
394
+ return M;
367
395
  }
368
396
  }
369
- class Q extends V {
397
+ class ot extends C {
370
398
  constructor(e) {
371
399
  super();
372
400
  q(this, "token");
@@ -419,7 +447,7 @@ class Q extends V {
419
447
  const i = r.data[0];
420
448
  for (const d in i)
421
449
  !isNaN(i[d]) && Number(i[d]) !== 1 / 0 && (i[d] = Number(i[d]));
422
- const { labelCn: h, labelEn: c } = await this.parseStatus(i.aisNavStatus), f = p.unix(i.posTime);
450
+ const { labelCn: h, labelEn: c } = await this.parseStatus(i.aisNavStatus), l = y.unix(i.posTime);
423
451
  return {
424
452
  ...o,
425
453
  mmsi: e,
@@ -430,7 +458,7 @@ class Q extends V {
430
458
  hdg: Math.round(i.heading * 100) / 100,
431
459
  rot: Math.round(i.rot * 100) / 100,
432
460
  positionTime: i.posTime,
433
- utc: f.utc().format(),
461
+ utc: l.utc().format(),
434
462
  status: i.aisNavStatus,
435
463
  labelEn: c,
436
464
  labelCn: h,
@@ -439,13 +467,13 @@ class Q extends V {
439
467
  };
440
468
  }
441
469
  async trajectory(e, n, a, o, s = !0, t = {}) {
442
- const r = p(n), i = p(a), h = await this.getShipId(e), c = await this.getShipInfo(h), f = [];
470
+ const r = y(n), i = y(a), h = await this.getShipId(e), c = await this.getShipInfo(h), l = [];
443
471
  for (; i.diff(r, "day", !0) > 30; )
444
- await this.trajectoryIn30Day(h, r.unix(), r.add(30, "day").unix(), c, e, o, f);
445
- return await this.trajectoryIn30Day(h, r.unix(), i.unix(), c, e, o, f), f;
472
+ await this.trajectoryIn30Day(h, r.unix(), r.add(30, "day").unix(), c, e, o, l);
473
+ return await this.trajectoryIn30Day(h, r.unix(), i.unix(), c, e, o, l), l;
446
474
  }
447
475
  async trajectoryIn30Day(e, n, a, o, s, t, r, i = {}) {
448
- var w;
476
+ var v;
449
477
  const h = {
450
478
  headers: {
451
479
  appKey: this.token
@@ -455,38 +483,37 @@ class Q extends V {
455
483
  startTime: n,
456
484
  endTime: a
457
485
  }
458
- }, c = "https://api3.myships.com/sp/ships/position/history", f = await Y.post(c, h).json();
459
- if (j.info("[%s] fetch trajectory from: %s - %j", i.requestId, c, h), f.code !== "0")
460
- return j.warn("[%s] invoke myship trajectory failed: %j", i.requestId, f), f;
461
- const m = f.data;
462
- for (const y in m)
463
- !isNaN(m[y]) && Number(m[y]) !== 1 / 0 && (m[y] = Number(m[y]));
464
- const d = p.unix((w = m[0]) == null ? void 0 : w.posTime);
465
- let b = -1;
466
- for (const y of m) {
467
- const v = p.unix(y.posTime), g = {
486
+ }, c = "https://api3.myships.com/sp/ships/position/history", l = await Y.post(c, h).json();
487
+ if (j.info("[%s] fetch trajectory from: %s - %j", i.requestId, c, h), l.code !== "0")
488
+ return j.warn("[%s] invoke myship trajectory failed: %j", i.requestId, l), l;
489
+ const m = l.data;
490
+ for (const k in m)
491
+ !isNaN(m[k]) && Number(m[k]) !== 1 / 0 && (m[k] = Number(m[k]));
492
+ const d = y.unix((v = m[0]) == null ? void 0 : v.posTime);
493
+ let M = -1;
494
+ for (const k of m) {
495
+ const w = y.unix(k.posTime), g = {
468
496
  imo: o == null ? void 0 : o.imo,
469
497
  mmsi: s,
470
- lat: Math.round(y.lat / 1e4 / 60 * 1e5) / 1e5,
471
- lng: Math.round(y.lon / 1e4 / 60 * 1e5) / 1e5,
472
- sog: Math.round(y.sog / 10 * 100) / 100,
473
- cog: Math.round(y.cog / 10 * 100) / 100,
474
- hdg: Math.round(y.heading * 100) / 100,
475
- rot: Math.round(y.rot * 100) / 100,
476
- positionTime: v.unix(),
477
- utc: v.utc().format(),
498
+ lat: Math.round(k.lat / 1e4 / 60 * 1e5) / 1e5,
499
+ lng: Math.round(k.lon / 1e4 / 60 * 1e5) / 1e5,
500
+ sog: Math.round(k.sog / 10 * 100) / 100,
501
+ cog: Math.round(k.cog / 10 * 100) / 100,
502
+ hdg: Math.round(k.heading * 100) / 100,
503
+ rot: Math.round(k.rot * 100) / 100,
504
+ positionTime: w.unix(),
505
+ utc: w.utc().format(),
478
506
  method: "trajectory",
479
507
  vendor: "myship"
480
- }, I = Math.floor(v.diff(d, "minute", !0) / (t || 1));
481
- I !== b && (b = I, r.push(g));
508
+ }, I = Math.floor(w.diff(d, "minute", !0) / (t || 1));
509
+ I !== M && (M = I, r.push(g));
482
510
  }
483
511
  return r;
484
512
  }
485
513
  }
486
- const $ = W.getLogger();
487
- $.level = "info";
488
- var K = /* @__PURE__ */ ((M) => (M.NOTICE = "NOTICE", M.WARN = "WARN", M.HEAVY = "HEAVY", M.SEVERE = "SEVERE", M.ERROR = "ERROR", M.FATAL = "FATAL", M))(K || {});
489
- class L {
514
+ const A = O.getLogger();
515
+ var U = /* @__PURE__ */ ((p) => (p.NOTICE = "NOTICE", p.WARN = "WARN", p.HEAVY = "HEAVY", p.SEVERE = "SEVERE", p.ERROR = "ERROR", p.FATAL = "FATAL", p))(U || {});
516
+ class J {
490
517
  /**
491
518
  * 解析告警规则, 多规则场景
492
519
  * @param rule
@@ -497,7 +524,7 @@ class L {
497
524
  */
498
525
  parsePrinciple(u, e = {}) {
499
526
  var t, r, i;
500
- $.info("[%s] parse rule: %s", e.requestId, u);
527
+ A.info("[%s] parse rule: %s", e.requestId, u);
501
528
  const n = new RegExp("(?<=\\[)(.+)(?=\\])", "g"), a = u.match(n) ? (t = u.match(n)) == null ? void 0 : t[0] : void 0, o = a == null ? void 0 : a.split(";");
502
529
  if (!o)
503
530
  return;
@@ -507,8 +534,8 @@ class L {
507
534
  if (h === 0 && !c)
508
535
  s.scope = o[0];
509
536
  else if (c)
510
- for (let f = 0, m = c.length; f < m; f++) {
511
- const d = this.parseRule(c[f]);
537
+ for (let l = 0, m = c.length; l < m; l++) {
538
+ const d = this.parseRule(c[l]);
512
539
  d && (s[d.level] ? d.key ? s[d.level][d == null ? void 0 : d.key] = d : s[d.level] = d : d.key ? s[d.level] = { [d == null ? void 0 : d.key]: d } : s[d.level] = d);
513
540
  }
514
541
  }
@@ -522,7 +549,7 @@ class L {
522
549
  */
523
550
  parseRule(u, e = {}) {
524
551
  var s;
525
- $.info("[%s] parse rule: %s", e.requestId, u), u = u.startsWith("[") ? u : `[${u}`, u = u.endsWith("]") ? u : `${u}]`;
552
+ A.info("[%s] parse rule: %s", e.requestId, u), u = u.startsWith("[") ? u : `[${u}`, u = u.endsWith("]") ? u : `${u}]`;
526
553
  const n = new RegExp("(?<=\\[)(.+?)(?=\\])", "g"), a = (s = u == null ? void 0 : u.match(n)) == null ? void 0 : s[0], o = a == null ? void 0 : a.split(",");
527
554
  if (o)
528
555
  return { operator: o[0], number: Number(o[1]), level: o[2], time: Number(o[3]), key: o[4] };
@@ -534,24 +561,24 @@ class L {
534
561
  * @param options
535
562
  */
536
563
  checkWeather(u, e, n = {}) {
537
- var d, b, w, y, v, g, I, N, l, E, _, R, H, S, x;
564
+ var d, M, v, k, w, g, I, N, f, D, _, R, H, S, x;
538
565
  let a = 0, o = 0, s = 0, t = 0;
539
- const r = ((b = (d = e == null ? void 0 : e.SEVERE) == null ? void 0 : d.sigWave) == null ? void 0 : b.number) * 1.6, i = (y = (w = e == null ? void 0 : e.SEVERE) == null ? void 0 : w.sigWave) == null ? void 0 : y.number, h = (g = (v = e == null ? void 0 : e.HEAVY) == null ? void 0 : v.sigWave) == null ? void 0 : g.number, c = ((N = (I = e == null ? void 0 : e.SEVERE) == null ? void 0 : I.wind) == null ? void 0 : N.number) + 2, f = (E = (l = e == null ? void 0 : e.SEVERE) == null ? void 0 : l.wind) == null ? void 0 : E.number, m = (R = (_ = e == null ? void 0 : e.HEAVY) == null ? void 0 : _.wind) == null ? void 0 : R.number;
540
- for (let A = 0; A < (u == null ? void 0 : u.length); A++) {
541
- const k = u[A], T = (S = (H = k == null ? void 0 : k.meteo) == null ? void 0 : H.wave) == null ? void 0 : S.sig, D = (x = k == null ? void 0 : k.meteo) == null ? void 0 : x.wind, P = A ? p(k.eta).diff(p(u[A - 1].eta), "hour", !0) : 0;
542
- t = P > t ? P : t, $.info("[%s] check sig.wave: %j", n.requestId, { ...T, dgThd4Wv: r, svThd4Wv: i, hvThd4Wv: h }), (T == null ? void 0 : T.height) >= r ? k.isDangerous = !0 : (T == null ? void 0 : T.height) >= i ? k.isSevere = !0 : (T == null ? void 0 : T.height) >= h && (k.isHeavy = !0), $.info("[%s] check wind: %j", n.requestId, { ...D, dgThd4Wd: c, svThd4Wd: f, hvThd4Wd: m }), (D == null ? void 0 : D.scale) >= c ? (k.isDangerous = !0, delete k.isSevere, delete k.isHeavy) : (D == null ? void 0 : D.scale) > f ? (k.isDangerous || (k.isSevere = !0), delete k.isHeavy) : (D == null ? void 0 : D.scale) === m && !k.isDangerous && !k.isSevere && (k.isHeavy = !0), a += k.isDangerous ? P : 0, o += k.isSevere ? P : 0, s += k.isHeavy ? P : 0;
566
+ const r = Math.round(((M = (d = e == null ? void 0 : e.SEVERE) == null ? void 0 : d.sigWave) == null ? void 0 : M.number) * 1.6 * 100) / 100, i = (k = (v = e == null ? void 0 : e.SEVERE) == null ? void 0 : v.sigWave) == null ? void 0 : k.number, h = (g = (w = e == null ? void 0 : e.HEAVY) == null ? void 0 : w.sigWave) == null ? void 0 : g.number, c = Math.round((((N = (I = e == null ? void 0 : e.SEVERE) == null ? void 0 : I.wind) == null ? void 0 : N.number) + 2) * 100) / 100, l = (D = (f = e == null ? void 0 : e.SEVERE) == null ? void 0 : f.wind) == null ? void 0 : D.number, m = (R = (_ = e == null ? void 0 : e.HEAVY) == null ? void 0 : _.wind) == null ? void 0 : R.number;
567
+ for (let $ = 0; $ < (u == null ? void 0 : u.length); $++) {
568
+ const b = u[$], T = (S = (H = b == null ? void 0 : b.meteo) == null ? void 0 : H.wave) == null ? void 0 : S.sig, E = (x = b == null ? void 0 : b.meteo) == null ? void 0 : x.wind, P = $ ? y(b.eta).diff(y(u[$ - 1].eta), "hour", !0) : 0;
569
+ t = P > t ? P : t, A.info("[%s] check sig.wave: %j", n.requestId, { ...T, dgThd4Wv: r, svThd4Wv: i, hvThd4Wv: h }), (T == null ? void 0 : T.height) >= r ? b.isDangerous = !0 : (T == null ? void 0 : T.height) >= i ? b.isSevere = !0 : (T == null ? void 0 : T.height) >= h && (b.isHeavy = !0), A.info("[%s] check wind: %j", n.requestId, { ...E, dgThd4Wd: c, svThd4Wd: l, hvThd4Wd: m }), (E == null ? void 0 : E.scale) >= c ? (b.isDangerous = !0, delete b.isSevere, delete b.isHeavy) : (E == null ? void 0 : E.scale) > l ? (b.isDangerous || (b.isSevere = !0), delete b.isHeavy) : (E == null ? void 0 : E.scale) === m && !b.isDangerous && !b.isSevere && (b.isHeavy = !0), a += b.isDangerous ? P : 0, o += b.isSevere ? P : 0, s += b.isHeavy ? P : 0;
543
570
  }
544
- return a = Math.round(a * 100) / 100, o = Math.round(o * 100) / 100, s = Math.round(s * 100) / 100, t = Math.round(t), { sample: u, dangerous: a, severe: o, heavy: s, step: t < 3 ? 3 : t, wind: { dgThd4Wd: c, svThd4Wd: f, hvThd4Wd: m }, sig: { dgThd4Wv: r, svThd4Wv: i, hvThd4Wv: h } };
571
+ return a = Math.round(a * 100) / 100, o = Math.round(o * 100) / 100, s = Math.round(s * 100) / 100, t = Math.round(t), { sample: u, dangerous: a, severe: o, heavy: s, step: t < 3 ? 3 : t, wind: { dgThd4Wd: c, svThd4Wd: l, hvThd4Wd: m }, sig: { dgThd4Wv: r, svThd4Wv: i, hvThd4Wv: h } };
545
572
  }
546
573
  }
547
- const X = new L();
574
+ const nt = new J();
548
575
  export {
549
- V as AISImpl,
550
- L as AlertHelper,
551
- K as AlertLevel,
552
- U as HifleetImpl,
553
- Q as MyShipImpl,
554
- B as MyVesselImpl,
555
- J as ShipxyImpl,
556
- X as alertHelper
576
+ C as AISImpl,
577
+ J as AlertHelper,
578
+ U as AlertLevel,
579
+ et as HifleetImpl,
580
+ ot as MyShipImpl,
581
+ tt as MyVesselImpl,
582
+ st as ShipxyImpl,
583
+ nt as alertHelper
557
584
  };
@@ -1 +1 @@
1
- (function(j,y){typeof exports=="object"&&typeof module<"u"?y(exports,require("got"),require("log4js"),require("moment")):typeof define=="function"&&define.amd?define(["exports","got","log4js","moment"],y):(j=typeof globalThis<"u"?globalThis:j||self,y(j["idm-plugin-rabbitmq"]={},j.got,j.log4js,j.moment))})(this,function(j,y,q,p){"use strict";var Q=Object.defineProperty;var X=(j,y,q)=>y in j?Q(j,y,{enumerable:!0,configurable:!0,writable:!0,value:q}):j[y]=q;var A=(j,y,q)=>(X(j,typeof y!="symbol"?y+"":y,q),q);function z(I){const m=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(I){for(const e in I)if(e!=="default"){const a=Object.getOwnPropertyDescriptor(I,e);Object.defineProperty(m,e,a.get?a:{enumerable:!0,get:()=>I[e]})}}return m.default=I,Object.freeze(m)}const C=z(q),M=C.getLogger();M.level="info";class O{parseStatus(m){let e,a;switch(m){case 0:e="在航(主机推动)",a="The engine is in use";break;case 1:e="锚泊",a="Anchored";break;case 2:e="失控",a="Not operated";break;case 3:e="操纵受限",a="Limited airworthiness";break;case 4:e="吃水受限",a="Limited by ship's draft";break;case 5:e="靠泊",a="Mooring";break;case 6:e="搁浅",a="Stranded";break;case 7:e="捕捞作业",a="Engaged in fishing";break;case 8:e="靠帆船提供动力",a="Sailing";break;default:e="未定义",a="Undefined"}return{labelCn:e,labelEn:a}}}class F extends O{constructor(e,a){super();A(this,"clientId");A(this,"clientSecret");A(this,"token");this.clientId=e,this.clientSecret=a}async authToken(e={}){const a="https://svc.data.myvessel.cn/ada/oauth/token",n={searchParams:{client_id:this.clientId,client_secret:this.clientSecret,grant_type:"client_credentials"}},o=await y.post(a,n).json();M.info("[%s] fetch access token from: %s - %j",e.requestId,a,o),o.error||(this.token={accessToken:o.access_token,tokenType:o.token_type,expiresIn:o.expires_in,scope:o.scope,jti:o.jti,issuedAt:p().utc().format()})}async realTimePosition(e,a={}){var d,c,l;(!this.token||p().diff(p(this.token.issuedAt),"seconds")>((d=this.token)==null?void 0:d.expiresIn)-300)&&await this.authToken(a);const n="https://svc.data.myvessel.cn/sdc/v1/vessels/status/location/unit",o={headers:{Authorization:`${(c=this.token)==null?void 0:c.tokenType} ${(l=this.token)==null?void 0:l.accessToken}`},searchParams:{mmsi:e}};M.info("[%s] fetch realtime position from: %s - %j",a.requestId,n,o);const s=await y.get(n,o).json();if(s.code)return M.warn("[%s] fetch realtime position failed: %j",a.requestId,n,{message:s.message,status:s.status,code:s.code}),s;const t=s.data;for(const u in t)!isNaN(t[u])&&Number(t[u])!==1/0&&(t[u]=Number(t[u]));const r=p(`${t.postime} +08:00`,"YYYY-MM-DD HH:mm:ss +08:00");return{mmsi:t.mmsi,name:t.vesselName,imo:t.imo,callSign:t.callsign,lat:t.lat,lng:t.lon,length:t.length,width:t.width,draught:t.currDraught,sog:t.sog,cog:t.cog,hdg:t.hdg,rot:t.rot,eta:t.eta,destination:t.dest,positionTime:r.unix(),status:t.status,labelCn:t.statusNameCn,labelEn:t.statusNameEn,method:"position",vendor:"myVessel",utc:r.utc().format()}}async trajectory(e,a,n,o,s=!0,t={}){(!this.token||p().diff(p(this.token.issuedAt),"seconds")>this.token.expiresIn-300)&&await this.authToken(t);const r=await this.realTimePosition(e,t),i=p(a),d=p(n),c=[];for(;d.diff(i,"day",!0)>30;)await this.trajectoryIn30Day(e,i,i.clone().add(30,"day"),r,o,c,t),i.add(30,"day");return await this.trajectoryIn30Day(e,i,d,r,o,c,t),c}async trajectoryIn30Day(e,a,n,o,s,t,r={}){var h,v,Y,k,S;const i="https://svc.data.myvessel.cn/sdc/v1/vessels/status/track",d={headers:{Authorization:`${(h=this.token)==null?void 0:h.tokenType} ${(v=this.token)==null?void 0:v.accessToken}`},json:{mmsi:e,startTime:a.utcOffset(8).format("YYYY-MM-DD HH:mm:ss"),endTime:n.utcOffset(8).format("YYYY-MM-DD HH:mm:ss")}};M.info("[%s] fetch trajectory from: %s - %j",r.requestId,i,d);const c=await y.post(i,d).json();if(c.code)return M.warn("[%s] fetch trajectory failed: %j",r.requestId,i,{message:c.message,status:c.status,code:c.code}),c;let l=-1;const u=p(`${(k=(Y=c.data)==null?void 0:Y[0])==null?void 0:k.postime} +08:00`,"YYYY-MM-DD HH:mm:ss +08:00");return(S=c.data)==null||S.forEach(g=>{for(const T in g)!isNaN(g[T])&&Number(g[T])!==1/0&&(g[T]=Number(g[T]));const w=p(`${g.postime} +08:00`,"YYYY-MM-DD HH:mm:ss +08:00"),N=g.eta?p(`${g.eta} +08:00`,"YYYY-MM-DD HH:mm:ss +08:00"):void 0,f=g.status,{labelCn:E,labelEn:P}=this.parseStatus(f),R={mmsi:g.mmsi,imo:o==null?void 0:o.imo,lat:g.lat,lng:g.lon,sog:g.sog,cog:g.cog,hdg:g.hdg,draught:g.draught,status:f,eta:N==null?void 0:N.unix(),destination:g.dest,positionTime:w.unix(),labelCn:E,labelEn:P,method:"trajectory",vendor:"myVessel",utc:w.utc().format()},x=Math.floor(w.diff(u,"minute",!0)/(s||1));x!==l&&(l=x,t.push(R))}),t}}class G extends O{constructor(e){super();A(this,"token");this.token=e}async realTimePosition(e,a={}){const n="https://api.hifleet.com/position/position/get/token",o={searchParams:{mmsi:e,usertoken:this.token}},s=await y.post(n,o).json();M.info("[%s] fetch realtime position from: %s - %j",a.requestId,n,o);const t=s==null?void 0:s.list;if(!t)return M.warn("[%s] fetch realtime position failed: %j",a.requestId,n,s),s;for(const u in t)!isNaN(t[u])&&Number(t[u])!==1/0&&(t[u]=Number(t[u]));t.status=t.sp>3?0:1;const r=t.status,{labelCn:i,labelEn:d}=this.parseStatus(r),c=p(`${t.ti} +08:00`,"YYYY-MM-DD HH:mm:ss +08:00");return{mmsi:t.m,name:t.n,imo:t.imonumber,callSign:t.callsign,lat:Math.round(t.la/60*1e5)/1e5,lng:Math.round(t.lo/60*1e5)/1e5,length:t.l,width:t.w,draught:t.draught,sog:t.sp,cog:t.co,hdg:t.h,rot:isNaN(t.rot)?0:t.rot,eta:/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/.test(t.eta)?p(`${t.eta} +08:00`,"YYYY-MM-DD HH:mm:ss +08:00").unix():void 0,destination:t.destination,positionTime:c.unix(),utc:c.utc().format(),status:r,labelCn:i,labelEn:d,method:"position",vendor:"hifleet"}}async search(e,a={}){let n="https://www.hifleet.com/hifleetapi/searchVesselOL.do";const o={searchParams:{keyword:e},headers:{Referer:"https://www.hifleet.com",Origin:"https://www.hifleet.com",Host:"www.hifleet.com"}};let s=await y.post(n,o).json();M.info("[%s] fetch vessel props from: %s - %j",a.requestId,n,o),s instanceof Array&&(s=s[0]);for(const r in s)!isNaN(s[r])&&Number(s[r])!==1/0&&(s[r]=Number(s[r]));const t={mmsi:s.m,name:s.n,imo:s.i,callSign:s.c,length:s.l,breadth:s.b,draught:s.dr};return n="https://www.hifleet.com/hifleetapi/sameShipSearch.do",s=await y.post(n,o).json(),M.info("[%s] fetch vessel dead weight from: %s - %j",a.requestId,n,o),s instanceof Array&&(s=s[0]),s&&(t.deadweight=Number(s.dwt)),t}async trajectory(e,a,n,o,s=!0,t={}){var g,w,N;const r=await this.realTimePosition(e,t);let i=p(a);const d=p(n),c=p();if(s){let f=d.diff(i,"d",!0);f<0?i=d.clone().subtract(40,"d"):f<30?i.subtract(10,"d"):f<60?i.subtract(5,"d"):i=d.clone().subtract(80,"d"),f=c.diff(d,"d",!0),d.add(f>10?240:f*24,"h")}const l={searchParams:{endtime:d.utcOffset("+8:00").format("YYYY-MM-DD HH:mm:ss"),starttime:i.utcOffset("+8:00").format("YYYY-MM-DD HH:mm:ss"),mmsi:e,usertoken:this.token}},u="https://api.hifleet.com/position/trajectory/nocompressed/withstatic/token",h=await y.get(u,l).json();M.info("[%s] fetch trajectory from: %s - %j",t.requestId,u,l);let v;h&&(v=((w=(g=h.ships)==null?void 0:g.offors)==null?void 0:w.ship)||[],v.length||M.warn("[%s] fetch trajectory failed: %j",t.requestId,h));const Y=[];let k=-1;const S=p(`${(N=v==null?void 0:v[0])==null?void 0:N.ti} +08:00`,"YYYY-MM-DD HH:mm:ss +08:00");for(const f of v){for(const _ in f)!isNaN(f[_])&&Number(f[_])!==1/0&&(f[_]=Number(f[_]));const E=p(`${f.ti} +08:00`,"YYYY-MM-DD HH:mm:ss +08:00");f.status=f.sp>4?0:1;const{labelEn:P,labelCn:R}=this.parseStatus(f.status),x={mmsi:f.m,name:f.n,imo:r==null?void 0:r.imo,lat:f.la,lng:f.lo,draught:f.draught,sog:f.sp,cog:f.co,hdg:f.hdg,positionTime:E.unix(),utc:E.utc().format(),status:f.status,labelCn:R,labelEn:P,method:"trajectory",vendor:"hifleet"},T=Math.floor(E.diff(S,"minute",!0)/(o||1));T!==k&&(k=T,Y.push(x))}return Y}}class B extends O{constructor(e){super();A(this,"token");this.token=e}async realTimePosition(e,a={}){const n={searchParams:{id:e,k:this.token,enc:1}},o="https://api.shipxy.com/apicall/GetSingleShip",s=await y.get(o,n).json();if(M.info("[%s] fetch realtime position from: %s - %j",a.requestId,o,n),(s==null?void 0:s.status)!==0)return s;const t=s.data[0];for(const l in t)!isNaN(t[l])&&Number(t[l])!==1/0&&(t[l]=Number(t[l]));const{labelCn:r,labelEn:i}=await this.parseStatus(t.navistat),d=p.unix(t.lasttime);return{mmsi:t.ShipID,name:t.name,imo:t.imo,callSign:t.callsign,lat:Math.round(t.lat/1e6*1e5)/1e5,lng:Math.round(t.lon/1e6*1e5)/1e5,length:Math.round(t.length/10*100)/100,width:Math.round(t.width/10*100)/100,draught:Math.round(t.draught/1e3*100)/100,sog:Math.round(t.sog*3600/1e3/1852*100)/100,cog:Math.round(t.cog/100*100)/100,hdg:Math.round(t.hdg/100*100)/100,rot:Math.round(t.rot/100*100)/100,positionTime:t.lasttime,utc:d.utc().format(),status:t.navistat,labelEn:i,labelCn:r,method:"position",vendor:"shipxy"}}async trajectory(e,a,n,o,s=!0,t={}){var S;const r=await this.realTimePosition(e,t),i=p(a),d=p(n),c="https://api.shipxy.com/apicall/GetShipTrack",l={searchParams:{id:e,k:this.token,enc:1,cut:0,btm:i.unix(),etm:d.unix()}},u=await y.get(c,l).json();if(M.info("[%s] fetch trajectory from: %s - %j",t.requestId,c,l),(u==null?void 0:u.status)!==0)return u;const h=u==null?void 0:u.points,v=[],Y=p.unix((S=h[0])==null?void 0:S.utc);let k=-1;for(const g of h){const w=p.unix(g.utc),N={imo:r==null?void 0:r.imo,mmsi:e,sog:Math.round(g.sog*3600/1e3/1852*100)/100,cog:Math.round(g.cog/100*100)/100,lat:Math.round(g.lat/1e6*1e5)/1e5,lng:Math.round(g.lon/1e6*1e5)/1e5,positionTime:w.unix(),utc:w.utc().format(),method:"trajectory",vendor:"shipxy"},f=Math.floor(w.diff(Y,"minute",!0)/(o||1));f!==k&&(k=f,v.push(N))}return v}}class U extends O{constructor(e){super();A(this,"token");this.token=e}async getShipId(e,a={}){const n={headers:{appKey:this.token},json:{mmsiList:e}},o="https://api3.myships.com/sp/ships/getShipIdByMMSI",s=await y.post(o,n).json();return M.info("[%s] fetch ship id from: %s - %j",a.requestId,o,n),s.code!=="0"?s:s.data[0].shipId}async getShipInfo(e,a={}){const n={headers:{appKey:this.token},json:{shipId:e}},o="https://api3.myships.com/sp/ships/aissta",s=await y.post(o,n).json();if(M.info("[%s] fetch ship info from: %s - %j",a.requestId,o,n),s.code!=="0")return s;const t=s.data;let r=t.imo;return e==="407170"&&(r="9198379",M.warn("[%s] ship(%s) imo error: %s, should be %s",a.requestId,e,t.imo,r)),{mmsi:t.mmsi,name:t.shipnameEn,imo:r,callSign:t.callSign,length:t.length,width:t.breadth,draught:(t.draught||100)/10}}async realTimePosition(e,a={}){const n=await this.getShipId(e,a),o=await this.getShipInfo(n,a),s={headers:{appKey:this.token},json:{shipId:n}},t="https://api3.myships.com/sp/ships/position/latest",r=await y.post(t,s).json();M.info("[%s] fetch realtime position from: %s - %j",a.requestId,t,s);const i=r.data[0];for(const h in i)!isNaN(i[h])&&Number(i[h])!==1/0&&(i[h]=Number(i[h]));const{labelCn:d,labelEn:c}=await this.parseStatus(i.aisNavStatus),l=p.unix(i.posTime);return{...o,mmsi:e,lat:Math.round(i.lat/1e4/60*1e5)/1e5,lng:Math.round(i.lon/1e4/60*1e5)/1e5,sog:Math.round(i.sog/10*100)/100,cog:Math.round(i.cog/10*100)/100,hdg:Math.round(i.heading*100)/100,rot:Math.round(i.rot*100)/100,positionTime:i.posTime,utc:l.utc().format(),status:i.aisNavStatus,labelEn:c,labelCn:d,method:"position",vendor:"myship"}}async trajectory(e,a,n,o,s=!0,t={}){const r=p(a),i=p(n),d=await this.getShipId(e),c=await this.getShipInfo(d),l=[];for(;i.diff(r,"day",!0)>30;)await this.trajectoryIn30Day(d,r.unix(),r.add(30,"day").unix(),c,e,o,l);return await this.trajectoryIn30Day(d,r.unix(),i.unix(),c,e,o,l),l}async trajectoryIn30Day(e,a,n,o,s,t,r,i={}){var Y;const d={headers:{appKey:this.token},json:{shipId:e,startTime:a,endTime:n}},c="https://api3.myships.com/sp/ships/position/history",l=await y.post(c,d).json();if(M.info("[%s] fetch trajectory from: %s - %j",i.requestId,c,d),l.code!=="0")return M.warn("[%s] invoke myship trajectory failed: %j",i.requestId,l),l;const u=l.data;for(const k in u)!isNaN(u[k])&&Number(u[k])!==1/0&&(u[k]=Number(u[k]));const h=p.unix((Y=u[0])==null?void 0:Y.posTime);let v=-1;for(const k of u){const S=p.unix(k.posTime),g={imo:o==null?void 0:o.imo,mmsi:s,lat:Math.round(k.lat/1e4/60*1e5)/1e5,lng:Math.round(k.lon/1e4/60*1e5)/1e5,sog:Math.round(k.sog/10*100)/100,cog:Math.round(k.cog/10*100)/100,hdg:Math.round(k.heading*100)/100,rot:Math.round(k.rot*100)/100,positionTime:S.unix(),utc:S.utc().format(),method:"trajectory",vendor:"myship"},w=Math.floor(S.diff(h,"minute",!0)/(t||1));w!==v&&(v=w,r.push(g))}return r}}const V=C.getLogger();V.level="info";var K=(I=>(I.NOTICE="NOTICE",I.WARN="WARN",I.HEAVY="HEAVY",I.SEVERE="SEVERE",I.ERROR="ERROR",I.FATAL="FATAL",I))(K||{});class L{parsePrinciple(m,e={}){var t,r,i;V.info("[%s] parse rule: %s",e.requestId,m);const a=new RegExp("(?<=\\[)(.+)(?=\\])","g"),n=m.match(a)?(t=m.match(a))==null?void 0:t[0]:void 0,o=n==null?void 0:n.split(";");if(!o)return;const s={};for(let d=0;d<(o==null?void 0:o.length);d++){const c=(i=(r=o[d].match(a))==null?void 0:r[0])==null?void 0:i.split("],");if(d===0&&!c)s.scope=o[0];else if(c)for(let l=0,u=c.length;l<u;l++){const h=this.parseRule(c[l]);h&&(s[h.level]?h.key?s[h.level][h==null?void 0:h.key]=h:s[h.level]=h:h.key?s[h.level]={[h==null?void 0:h.key]:h}:s[h.level]=h)}}return s}parseRule(m,e={}){var s;V.info("[%s] parse rule: %s",e.requestId,m),m=m.startsWith("[")?m:`[${m}`,m=m.endsWith("]")?m:`${m}]`;const a=new RegExp("(?<=\\[)(.+?)(?=\\])","g"),n=(s=m==null?void 0:m.match(a))==null?void 0:s[0],o=n==null?void 0:n.split(",");if(o)return{operator:o[0],number:Number(o[1]),level:o[2],time:Number(o[3]),key:o[4]}}checkWeather(m,e,a={}){var h,v,Y,k,S,g,w,N,f,E,P,R,x,T,_;let n=0,o=0,s=0,t=0;const r=((v=(h=e==null?void 0:e.SEVERE)==null?void 0:h.sigWave)==null?void 0:v.number)*1.6,i=(k=(Y=e==null?void 0:e.SEVERE)==null?void 0:Y.sigWave)==null?void 0:k.number,d=(g=(S=e==null?void 0:e.HEAVY)==null?void 0:S.sigWave)==null?void 0:g.number,c=((N=(w=e==null?void 0:e.SEVERE)==null?void 0:w.wind)==null?void 0:N.number)+2,l=(E=(f=e==null?void 0:e.SEVERE)==null?void 0:f.wind)==null?void 0:E.number,u=(R=(P=e==null?void 0:e.HEAVY)==null?void 0:P.wind)==null?void 0:R.number;for(let $=0;$<(m==null?void 0:m.length);$++){const b=m[$],H=(T=(x=b==null?void 0:b.meteo)==null?void 0:x.wave)==null?void 0:T.sig,D=(_=b==null?void 0:b.meteo)==null?void 0:_.wind,W=$?p(b.eta).diff(p(m[$-1].eta),"hour",!0):0;t=W>t?W:t,V.info("[%s] check sig.wave: %j",a.requestId,{...H,dgThd4Wv:r,svThd4Wv:i,hvThd4Wv:d}),(H==null?void 0:H.height)>=r?b.isDangerous=!0:(H==null?void 0:H.height)>=i?b.isSevere=!0:(H==null?void 0:H.height)>=d&&(b.isHeavy=!0),V.info("[%s] check wind: %j",a.requestId,{...D,dgThd4Wd:c,svThd4Wd:l,hvThd4Wd:u}),(D==null?void 0:D.scale)>=c?(b.isDangerous=!0,delete b.isSevere,delete b.isHeavy):(D==null?void 0:D.scale)>l?(b.isDangerous||(b.isSevere=!0),delete b.isHeavy):(D==null?void 0:D.scale)===u&&!b.isDangerous&&!b.isSevere&&(b.isHeavy=!0),n+=b.isDangerous?W:0,o+=b.isSevere?W:0,s+=b.isHeavy?W:0}return n=Math.round(n*100)/100,o=Math.round(o*100)/100,s=Math.round(s*100)/100,t=Math.round(t),{sample:m,dangerous:n,severe:o,heavy:s,step:t<3?3:t,wind:{dgThd4Wd:c,svThd4Wd:l,hvThd4Wd:u},sig:{dgThd4Wv:r,svThd4Wv:i,hvThd4Wv:d}}}}const J=new L;j.AISImpl=O,j.AlertHelper=L,j.AlertLevel=K,j.HifleetImpl=G,j.MyShipImpl=U,j.MyVesselImpl=F,j.ShipxyImpl=B,j.alertHelper=J,Object.defineProperty(j,Symbol.toStringTag,{value:"Module"})});
1
+ (function(M,y){typeof exports=="object"&&typeof module<"u"?y(exports,require("got"),require("moment")):typeof define=="function"&&define.amd?define(["exports","got","moment"],y):(M=typeof globalThis<"u"?globalThis:M||self,y(M["idm-plugin-rabbitmq"]={},M.got,M.moment))})(this,function(M,y,l){"use strict";var Z=Object.defineProperty;var tt=(M,y,l)=>y in M?Z(M,y,{enumerable:!0,configurable:!0,writable:!0,value:l}):M[y]=l;var _=(M,y,l)=>(tt(M,typeof y!="symbol"?y+"":y,l),l);function z(k){return k&&k.__esModule&&Object.prototype.hasOwnProperty.call(k,"default")?k.default:k}class W{log(){}isLevelEnabled(){return!1}addContext(){}removeContext(){}clearContext(){}}["Trace","Debug","Info","Warn","Error","Fatal","Mark"].forEach(k=>{W.prototype[k.toLowerCase()]=()=>{},W.prototype[`is${k}Enabled`]=()=>!1});const O=(()=>{try{return require("log4js")}catch{return null}})();var G={getLogger:O?O.getLogger:()=>new W};const L=z(G),I=L.getLogger();class R{parseStatus(p){let e,a;switch(p){case 0:e="在航(主机推动)",a="The engine is in use";break;case 1:e="锚泊",a="Anchored";break;case 2:e="失控",a="Not operated";break;case 3:e="操纵受限",a="Limited airworthiness";break;case 4:e="吃水受限",a="Limited by ship's draft";break;case 5:e="靠泊",a="Mooring";break;case 6:e="搁浅",a="Stranded";break;case 7:e="捕捞作业",a="Engaged in fishing";break;case 8:e="靠帆船提供动力",a="Sailing";break;default:e="未定义",a="Undefined"}return{labelCn:e,labelEn:a}}}class B extends R{constructor(e,a){super();_(this,"clientId");_(this,"clientSecret");_(this,"token");this.clientId=e,this.clientSecret=a}async authToken(e={}){const a="https://svc.data.myvessel.cn/ada/oauth/token",n={searchParams:{client_id:this.clientId,client_secret:this.clientSecret,grant_type:"client_credentials"}},o=await y.post(a,n).json();I.info("[%s] fetch access token from: %s - %j",e.requestId,a,o),o.error||(this.token={accessToken:o.access_token,tokenType:o.token_type,expiresIn:o.expires_in,scope:o.scope,jti:o.jti,issuedAt:l().utc().format()})}async realTimePosition(e,a={}){var d,c,f;(!this.token||l().diff(l(this.token.issuedAt),"seconds")>((d=this.token)==null?void 0:d.expiresIn)-300)&&await this.authToken(a);const n="https://svc.data.myvessel.cn/sdc/v1/vessels/status/location/unit",o={headers:{Authorization:`${(c=this.token)==null?void 0:c.tokenType} ${(f=this.token)==null?void 0:f.accessToken}`},searchParams:{mmsi:e}};I.info("[%s] fetch realtime position from: %s - %j",a.requestId,n,o);const s=await y.get(n,o).json();if(s.code)return I.warn("[%s] fetch realtime position failed: %j",a.requestId,n,{message:s.message,status:s.status,code:s.code}),s;const t=s.data;for(const u in t)!isNaN(t[u])&&Number(t[u])!==1/0&&(t[u]=Number(t[u]));const r=l(`${t.postime} +08:00`,"YYYY-MM-DD HH:mm:ss +08:00");return{mmsi:t.mmsi,name:t.vesselName,imo:t.imo,callSign:t.callsign,lat:t.lat,lng:t.lon,length:t.length,width:t.width,draught:t.currDraught,sog:t.sog,cog:t.cog,hdg:t.hdg,rot:t.rot,eta:t.eta,destination:t.dest,positionTime:r.unix(),status:t.status,labelCn:t.statusNameCn,labelEn:t.statusNameEn,method:"position",vendor:"myVessel",utc:r.utc().format()}}async trajectory(e,a,n,o,s=!0,t={}){(!this.token||l().diff(l(this.token.issuedAt),"seconds")>this.token.expiresIn-300)&&await this.authToken(t);const r=await this.realTimePosition(e,t),i=l(a),d=l(n),c=[];for(;d.diff(i,"day",!0)>30;)await this.trajectoryIn30Day(e,i,i.clone().add(30,"day"),r,o,c,t),i.add(30,"day");return await this.trajectoryIn30Day(e,i,d,r,o,c,t),c}async trajectoryIn30Day(e,a,n,o,s,t,r={}){var h,w,Y,j,S;const i="https://svc.data.myvessel.cn/sdc/v1/vessels/status/track",d={headers:{Authorization:`${(h=this.token)==null?void 0:h.tokenType} ${(w=this.token)==null?void 0:w.accessToken}`},json:{mmsi:e,startTime:a.utcOffset(8).format("YYYY-MM-DD HH:mm:ss"),endTime:n.utcOffset(8).format("YYYY-MM-DD HH:mm:ss")}};I.info("[%s] fetch trajectory from: %s - %j",r.requestId,i,d);const c=await y.post(i,d).json();if(c.code)return I.warn("[%s] fetch trajectory failed: %j",r.requestId,i,{message:c.message,status:c.status,code:c.code}),c;let f=-1;const u=l(`${(j=(Y=c.data)==null?void 0:Y[0])==null?void 0:j.postime} +08:00`,"YYYY-MM-DD HH:mm:ss +08:00");return(S=c.data)==null||S.forEach(g=>{for(const N in g)!isNaN(g[N])&&Number(g[N])!==1/0&&(g[N]=Number(g[N]));const v=l(`${g.postime} +08:00`,"YYYY-MM-DD HH:mm:ss +08:00"),T=g.eta?l(`${g.eta} +08:00`,"YYYY-MM-DD HH:mm:ss +08:00"):void 0,m=g.status,{labelCn:D,labelEn:A}=this.parseStatus(m),P={mmsi:g.mmsi,imo:o==null?void 0:o.imo,lat:g.lat,lng:g.lon,sog:g.sog,cog:g.cog,hdg:g.hdg,draught:g.draught,status:m,eta:T==null?void 0:T.unix(),destination:g.dest,positionTime:v.unix(),labelCn:D,labelEn:A,method:"trajectory",vendor:"myVessel",utc:v.utc().format()},q=Math.floor(v.diff(u,"minute",!0)/(s||1));q!==f&&(f=q,t.push(P))}),t}}class U extends R{constructor(e){super();_(this,"token");this.token=e}async realTimePosition(e,a={}){const n="https://api.hifleet.com/position/position/get/token",o={searchParams:{mmsi:e,usertoken:this.token}},s=await y.post(n,o).json();I.info("[%s] fetch realtime position from: %s - %j",a.requestId,n,o);const t=s==null?void 0:s.list;if(!t)return I.warn("[%s] fetch realtime position failed: %j",a.requestId,n,s),s;for(const u in t)!isNaN(t[u])&&Number(t[u])!==1/0&&(t[u]=Number(t[u]));t.status=t.sp>3?0:1;const r=t.status,{labelCn:i,labelEn:d}=this.parseStatus(r),c=l(`${t.ti} +08:00`,"YYYY-MM-DD HH:mm:ss +08:00");return{mmsi:t.m,name:t.n,imo:t.imonumber,callSign:t.callsign,lat:Math.round(t.la/60*1e5)/1e5,lng:Math.round(t.lo/60*1e5)/1e5,length:t.l,width:t.w,draught:t.draught,sog:t.sp,cog:t.co,hdg:t.h,rot:isNaN(t.rot)?0:t.rot,eta:/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/.test(t.eta)?l(`${t.eta} +08:00`,"YYYY-MM-DD HH:mm:ss +08:00").unix():void 0,destination:t.destination,positionTime:c.unix(),utc:c.utc().format(),status:r,labelCn:i,labelEn:d,method:"position",vendor:"hifleet"}}async search(e,a={}){let n="https://www.hifleet.com/hifleetapi/searchVesselOL.do";const o={searchParams:{keyword:e},headers:{Referer:"https://www.hifleet.com",Origin:"https://www.hifleet.com",Host:"www.hifleet.com"}};let s=await y.post(n,o).json();I.info("[%s] fetch vessel props from: %s - %j",a.requestId,n,o),s instanceof Array&&(s=s[0]);for(const r in s)!isNaN(s[r])&&Number(s[r])!==1/0&&(s[r]=Number(s[r]));const t={mmsi:s.m,name:s.n,imo:s.i,callSign:s.c,length:s.l,breadth:s.b,draught:s.dr};return n="https://www.hifleet.com/hifleetapi/sameShipSearch.do",s=await y.post(n,o).json(),I.info("[%s] fetch vessel dead weight from: %s - %j",a.requestId,n,o),s instanceof Array&&(s=s[0]),s&&(t.deadweight=Number(s.dwt)),t}async trajectory(e,a,n,o,s=!0,t={}){var g,v,T;const r=await this.realTimePosition(e,t);let i=l(a);const d=l(n),c=l();if(s){let m=d.diff(i,"d",!0);m<0?i=d.clone().subtract(40,"d"):m<30?i.subtract(10,"d"):m<60?i.subtract(5,"d"):i=d.clone().subtract(80,"d"),m=c.diff(d,"d",!0),d.add(m>10?240:m*24,"h")}const f={searchParams:{endtime:d.utcOffset("+8:00").format("YYYY-MM-DD HH:mm:ss"),starttime:i.utcOffset("+8:00").format("YYYY-MM-DD HH:mm:ss"),mmsi:e,usertoken:this.token}},u="https://api.hifleet.com/position/trajectory/nocompressed/withstatic/token",h=await y.get(u,f).json();I.info("[%s] fetch trajectory from: %s - %j",t.requestId,u,f);let w;h&&(w=((v=(g=h.ships)==null?void 0:g.offors)==null?void 0:v.ship)||[],w.length||I.warn("[%s] fetch trajectory failed: %j",t.requestId,h));const Y=[];let j=-1;const S=l(`${(T=w==null?void 0:w[0])==null?void 0:T.ti} +08:00`,"YYYY-MM-DD HH:mm:ss +08:00");for(const m of w){for(const x in m)!isNaN(m[x])&&Number(m[x])!==1/0&&(m[x]=Number(m[x]));const D=l(`${m.ti} +08:00`,"YYYY-MM-DD HH:mm:ss +08:00");m.status=m.sp>4?0:1;const{labelEn:A,labelCn:P}=this.parseStatus(m.status),q={mmsi:m.m,name:m.n,imo:r==null?void 0:r.imo,lat:m.la,lng:m.lo,draught:m.draught,sog:m.sp,cog:m.co,hdg:m.hdg,positionTime:D.unix(),utc:D.utc().format(),status:m.status,labelCn:P,labelEn:A,method:"trajectory",vendor:"hifleet"},N=Math.floor(D.diff(S,"minute",!0)/(o||1));N!==j&&(j=N,Y.push(q))}return Y}}class J extends R{constructor(e){super();_(this,"token");this.token=e}async realTimePosition(e,a={}){const n={searchParams:{id:e,k:this.token,enc:1}},o="https://api.shipxy.com/apicall/GetSingleShip",s=await y.get(o,n).json();if(I.info("[%s] fetch realtime position from: %s - %j",a.requestId,o,n),(s==null?void 0:s.status)!==0)return s;const t=s.data[0];for(const f in t)!isNaN(t[f])&&Number(t[f])!==1/0&&(t[f]=Number(t[f]));const{labelCn:r,labelEn:i}=await this.parseStatus(t.navistat),d=l.unix(t.lasttime);return{mmsi:t.ShipID,name:t.name,imo:t.imo,callSign:t.callsign,lat:Math.round(t.lat/1e6*1e5)/1e5,lng:Math.round(t.lon/1e6*1e5)/1e5,length:Math.round(t.length/10*100)/100,width:Math.round(t.width/10*100)/100,draught:Math.round(t.draught/1e3*100)/100,sog:Math.round(t.sog*3600/1e3/1852*100)/100,cog:Math.round(t.cog/100*100)/100,hdg:Math.round(t.hdg/100*100)/100,rot:Math.round(t.rot/100*100)/100,positionTime:t.lasttime,utc:d.utc().format(),status:t.navistat,labelEn:i,labelCn:r,method:"position",vendor:"shipxy"}}async trajectory(e,a,n,o,s=!0,t={}){var S;const r=await this.realTimePosition(e,t),i=l(a),d=l(n),c="https://api.shipxy.com/apicall/GetShipTrack",f={searchParams:{id:e,k:this.token,enc:1,cut:0,btm:i.unix(),etm:d.unix()}},u=await y.get(c,f).json();if(I.info("[%s] fetch trajectory from: %s - %j",t.requestId,c,f),(u==null?void 0:u.status)!==0)return u;const h=u==null?void 0:u.points,w=[],Y=l.unix((S=h[0])==null?void 0:S.utc);let j=-1;for(const g of h){const v=l.unix(g.utc),T={imo:r==null?void 0:r.imo,mmsi:e,sog:Math.round(g.sog*3600/1e3/1852*100)/100,cog:Math.round(g.cog/100*100)/100,lat:Math.round(g.lat/1e6*1e5)/1e5,lng:Math.round(g.lon/1e6*1e5)/1e5,positionTime:v.unix(),utc:v.utc().format(),method:"trajectory",vendor:"shipxy"},m=Math.floor(v.diff(Y,"minute",!0)/(o||1));m!==j&&(j=m,w.push(T))}return w}}class Q extends R{constructor(e){super();_(this,"token");this.token=e}async getShipId(e,a={}){const n={headers:{appKey:this.token},json:{mmsiList:e}},o="https://api3.myships.com/sp/ships/getShipIdByMMSI",s=await y.post(o,n).json();return I.info("[%s] fetch ship id from: %s - %j",a.requestId,o,n),s.code!=="0"?s:s.data[0].shipId}async getShipInfo(e,a={}){const n={headers:{appKey:this.token},json:{shipId:e}},o="https://api3.myships.com/sp/ships/aissta",s=await y.post(o,n).json();if(I.info("[%s] fetch ship info from: %s - %j",a.requestId,o,n),s.code!=="0")return s;const t=s.data;let r=t.imo;return e==="407170"&&(r="9198379",I.warn("[%s] ship(%s) imo error: %s, should be %s",a.requestId,e,t.imo,r)),{mmsi:t.mmsi,name:t.shipnameEn,imo:r,callSign:t.callSign,length:t.length,width:t.breadth,draught:(t.draught||100)/10}}async realTimePosition(e,a={}){const n=await this.getShipId(e,a),o=await this.getShipInfo(n,a),s={headers:{appKey:this.token},json:{shipId:n}},t="https://api3.myships.com/sp/ships/position/latest",r=await y.post(t,s).json();I.info("[%s] fetch realtime position from: %s - %j",a.requestId,t,s);const i=r.data[0];for(const h in i)!isNaN(i[h])&&Number(i[h])!==1/0&&(i[h]=Number(i[h]));const{labelCn:d,labelEn:c}=await this.parseStatus(i.aisNavStatus),f=l.unix(i.posTime);return{...o,mmsi:e,lat:Math.round(i.lat/1e4/60*1e5)/1e5,lng:Math.round(i.lon/1e4/60*1e5)/1e5,sog:Math.round(i.sog/10*100)/100,cog:Math.round(i.cog/10*100)/100,hdg:Math.round(i.heading*100)/100,rot:Math.round(i.rot*100)/100,positionTime:i.posTime,utc:f.utc().format(),status:i.aisNavStatus,labelEn:c,labelCn:d,method:"position",vendor:"myship"}}async trajectory(e,a,n,o,s=!0,t={}){const r=l(a),i=l(n),d=await this.getShipId(e),c=await this.getShipInfo(d),f=[];for(;i.diff(r,"day",!0)>30;)await this.trajectoryIn30Day(d,r.unix(),r.add(30,"day").unix(),c,e,o,f);return await this.trajectoryIn30Day(d,r.unix(),i.unix(),c,e,o,f),f}async trajectoryIn30Day(e,a,n,o,s,t,r,i={}){var Y;const d={headers:{appKey:this.token},json:{shipId:e,startTime:a,endTime:n}},c="https://api3.myships.com/sp/ships/position/history",f=await y.post(c,d).json();if(I.info("[%s] fetch trajectory from: %s - %j",i.requestId,c,d),f.code!=="0")return I.warn("[%s] invoke myship trajectory failed: %j",i.requestId,f),f;const u=f.data;for(const j in u)!isNaN(u[j])&&Number(u[j])!==1/0&&(u[j]=Number(u[j]));const h=l.unix((Y=u[0])==null?void 0:Y.posTime);let w=-1;for(const j of u){const S=l.unix(j.posTime),g={imo:o==null?void 0:o.imo,mmsi:s,lat:Math.round(j.lat/1e4/60*1e5)/1e5,lng:Math.round(j.lon/1e4/60*1e5)/1e5,sog:Math.round(j.sog/10*100)/100,cog:Math.round(j.cog/10*100)/100,hdg:Math.round(j.heading*100)/100,rot:Math.round(j.rot*100)/100,positionTime:S.unix(),utc:S.utc().format(),method:"trajectory",vendor:"myship"},v=Math.floor(S.diff(h,"minute",!0)/(t||1));v!==w&&(w=v,r.push(g))}return r}}const V=L.getLogger();var F=(k=>(k.NOTICE="NOTICE",k.WARN="WARN",k.HEAVY="HEAVY",k.SEVERE="SEVERE",k.ERROR="ERROR",k.FATAL="FATAL",k))(F||{});class K{parsePrinciple(p,e={}){var t,r,i;V.info("[%s] parse rule: %s",e.requestId,p);const a=new RegExp("(?<=\\[)(.+)(?=\\])","g"),n=p.match(a)?(t=p.match(a))==null?void 0:t[0]:void 0,o=n==null?void 0:n.split(";");if(!o)return;const s={};for(let d=0;d<(o==null?void 0:o.length);d++){const c=(i=(r=o[d].match(a))==null?void 0:r[0])==null?void 0:i.split("],");if(d===0&&!c)s.scope=o[0];else if(c)for(let f=0,u=c.length;f<u;f++){const h=this.parseRule(c[f]);h&&(s[h.level]?h.key?s[h.level][h==null?void 0:h.key]=h:s[h.level]=h:h.key?s[h.level]={[h==null?void 0:h.key]:h}:s[h.level]=h)}}return s}parseRule(p,e={}){var s;V.info("[%s] parse rule: %s",e.requestId,p),p=p.startsWith("[")?p:`[${p}`,p=p.endsWith("]")?p:`${p}]`;const a=new RegExp("(?<=\\[)(.+?)(?=\\])","g"),n=(s=p==null?void 0:p.match(a))==null?void 0:s[0],o=n==null?void 0:n.split(",");if(o)return{operator:o[0],number:Number(o[1]),level:o[2],time:Number(o[3]),key:o[4]}}checkWeather(p,e,a={}){var h,w,Y,j,S,g,v,T,m,D,A,P,q,N,x;let n=0,o=0,s=0,t=0;const r=Math.round(((w=(h=e==null?void 0:e.SEVERE)==null?void 0:h.sigWave)==null?void 0:w.number)*1.6*100)/100,i=(j=(Y=e==null?void 0:e.SEVERE)==null?void 0:Y.sigWave)==null?void 0:j.number,d=(g=(S=e==null?void 0:e.HEAVY)==null?void 0:S.sigWave)==null?void 0:g.number,c=Math.round((((T=(v=e==null?void 0:e.SEVERE)==null?void 0:v.wind)==null?void 0:T.number)+2)*100)/100,f=(D=(m=e==null?void 0:e.SEVERE)==null?void 0:m.wind)==null?void 0:D.number,u=(P=(A=e==null?void 0:e.HEAVY)==null?void 0:A.wind)==null?void 0:P.number;for(let $=0;$<(p==null?void 0:p.length);$++){const b=p[$],E=(N=(q=b==null?void 0:b.meteo)==null?void 0:q.wave)==null?void 0:N.sig,H=(x=b==null?void 0:b.meteo)==null?void 0:x.wind,C=$?l(b.eta).diff(l(p[$-1].eta),"hour",!0):0;t=C>t?C:t,V.info("[%s] check sig.wave: %j",a.requestId,{...E,dgThd4Wv:r,svThd4Wv:i,hvThd4Wv:d}),(E==null?void 0:E.height)>=r?b.isDangerous=!0:(E==null?void 0:E.height)>=i?b.isSevere=!0:(E==null?void 0:E.height)>=d&&(b.isHeavy=!0),V.info("[%s] check wind: %j",a.requestId,{...H,dgThd4Wd:c,svThd4Wd:f,hvThd4Wd:u}),(H==null?void 0:H.scale)>=c?(b.isDangerous=!0,delete b.isSevere,delete b.isHeavy):(H==null?void 0:H.scale)>f?(b.isDangerous||(b.isSevere=!0),delete b.isHeavy):(H==null?void 0:H.scale)===u&&!b.isDangerous&&!b.isSevere&&(b.isHeavy=!0),n+=b.isDangerous?C:0,o+=b.isSevere?C:0,s+=b.isHeavy?C:0}return n=Math.round(n*100)/100,o=Math.round(o*100)/100,s=Math.round(s*100)/100,t=Math.round(t),{sample:p,dangerous:n,severe:o,heavy:s,step:t<3?3:t,wind:{dgThd4Wd:c,svThd4Wd:f,hvThd4Wd:u},sig:{dgThd4Wv:r,svThd4Wv:i,hvThd4Wv:d}}}}const X=new K;M.AISImpl=R,M.AlertHelper=K,M.AlertLevel=F,M.HifleetImpl=U,M.MyShipImpl=Q,M.MyVesselImpl=B,M.ShipxyImpl=J,M.alertHelper=X,Object.defineProperty(M,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@idm-plugin/vessel",
3
3
  "private": false,
4
- "version": "1.0.8",
4
+ "version": "1.1.0",
5
5
  "description": "idm plugin for vessel",
6
6
  "type": "module",
7
7
  "keywords": [
@@ -27,6 +27,7 @@
27
27
  "release": "yarn build && yarn publish --access public"
28
28
  },
29
29
  "dependencies": {
30
+ "@log4js-node/log4js-api": "^1.0.2",
30
31
  "got": "11",
31
32
  "log4js": "^6.9.1",
32
33
  "moment": "^2.30.1"