hk-bus-eta 3.4.1 → 3.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -10,4 +10,5 @@ export declare function fetchEtas({ route, stops, bound, dest, freq, seq, servic
10
10
  export declare function fetchEtaDb(): Promise<EtaDb>;
11
11
  export declare function fetchEtaDbMd5(): Promise<string>;
12
12
  export declare function fetchRouteUpdatedAt(route: RouteListEntry): Promise<number>;
13
+ export * from "./journeyTime";
13
14
  export type * from "./type";
package/dist/index.js CHANGED
@@ -1,4 +1,18 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
2
16
  var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
17
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
18
  return new (P || (P = Promise))(function (resolve, reject) {
@@ -128,4 +142,5 @@ function fetchRouteUpdatedAt(route) {
128
142
  });
129
143
  }
130
144
  exports.fetchRouteUpdatedAt = fetchRouteUpdatedAt;
145
+ __exportStar(require("./journeyTime"), exports);
131
146
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { RouteListEntry, StopList } from "./type";
2
+ /**
3
+ * Fetch Journey time in minute for a route
4
+ * @param {Object}
5
+ * @returns {number} journey time in minute
6
+ */
7
+ export declare function fetchEstJourneyTime({ route, stopList, startSeq, endSeq, batchSize, signal }: {
8
+ route: RouteListEntry;
9
+ stopList: StopList;
10
+ startSeq: number;
11
+ endSeq: number;
12
+ batchSize?: number;
13
+ signal?: AbortSignal | null;
14
+ }): Promise<number>;
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.fetchEstJourneyTime = void 0;
13
+ const __HK_BUS_ETA_JT_CACHE__ = {};
14
+ /**
15
+ * Fetch Journey time in minute for a route
16
+ * @param {Object}
17
+ * @returns {number} journey time in minute
18
+ */
19
+ function fetchEstJourneyTime({ route, stopList, startSeq, endSeq, batchSize = 4, signal }) {
20
+ return __awaiter(this, void 0, void 0, function* () {
21
+ const stops = Object.values(route.stops)[0];
22
+ if (!["kmb", "nlb", "ctb", "lrtfeeder", "gmb"].includes(Object.keys(route.stops)[0]))
23
+ throw new Error("Support vehicle transport only");
24
+ if (startSeq < 0)
25
+ throw new Error("startSeq should be ≥ 0");
26
+ if (endSeq >= stops.length)
27
+ throw new Error("endSeq should be < number of stops");
28
+ if (startSeq >= endSeq)
29
+ throw new Error("startSeq should be < endSeq");
30
+ let ts = Date.now();
31
+ let ret = 0;
32
+ let payloads = [];
33
+ for (let i = startSeq; i < endSeq; ++i) {
34
+ payloads.push([
35
+ `${stops[i]}-${stops[i + 1]}`,
36
+ JSON.stringify({
37
+ start: {
38
+ lat: stopList[stops[i]].location.lat,
39
+ long: stopList[stops[i]].location.lng,
40
+ },
41
+ end: {
42
+ lat: stopList[stops[i + 1]].location.lat,
43
+ long: stopList[stops[i + 1]].location.lng,
44
+ },
45
+ departIn: Math.round(ret / 15) * 15
46
+ })
47
+ ]);
48
+ if (payloads.length < batchSize && i !== endSeq - 1) {
49
+ // skip fetching until whole batch filled
50
+ continue;
51
+ }
52
+ const minutes = yield Promise.all(payloads.map(([key, payload]) => {
53
+ // load from cache if it is query within 15 minutes
54
+ if (key in __HK_BUS_ETA_JT_CACHE__ && __HK_BUS_ETA_JT_CACHE__[key].ts + 15 * 60 * 1000 >= ts) {
55
+ return Promise.resolve(__HK_BUS_ETA_JT_CACHE__[key].m);
56
+ }
57
+ return (
58
+ //TODO: update to use gov API
59
+ // fetch('https://tdas.hkbus.app/tdas/api/route', {
60
+ fetch('https://tdas.hkbus.app/tdas/api/route', {
61
+ method: "POST",
62
+ headers: {
63
+ 'Content-Type': "application/json",
64
+ },
65
+ body: payload,
66
+ signal,
67
+ })
68
+ .then(r => r.json())
69
+ .then(({ eta, distM, jSpeed }) => {
70
+ var _a;
71
+ const speedStr = (_a = /(\d+)公里\/小時/g.exec(jSpeed)) === null || _a === void 0 ? void 0 : _a[1];
72
+ if (speedStr !== null &&
73
+ speedStr !== undefined &&
74
+ !isNaN(parseInt(speedStr, 10))) {
75
+ return (distM / parseInt(speedStr, 10) / 1000) * 60;
76
+ }
77
+ console.warn("Unable to parse TDAS response for more precise journey time. Falling back.");
78
+ const [hh, mm] = eta.split(":").map((v) => parseInt(v, 10));
79
+ return hh * 60 + mm;
80
+ })
81
+ .catch(() => {
82
+ // for any error, assume 4 minutes journey time blindly
83
+ return 4;
84
+ })
85
+ .then(m => {
86
+ __HK_BUS_ETA_JT_CACHE__[key] = { m: m + 1, ts };
87
+ // margin for car accelerating, decelerating, and passenger picking up and dropping off
88
+ return m + 1;
89
+ }));
90
+ }));
91
+ minutes.forEach(m => {
92
+ ret += m;
93
+ });
94
+ payloads.length = 0;
95
+ }
96
+ for (const k in __HK_BUS_ETA_JT_CACHE__) {
97
+ // clean up cache
98
+ if (__HK_BUS_ETA_JT_CACHE__[k].ts + 15 * 60 * 1000 < ts) {
99
+ delete __HK_BUS_ETA_JT_CACHE__[k];
100
+ }
101
+ }
102
+ return ret;
103
+ });
104
+ }
105
+ exports.fetchEstJourneyTime = fetchEstJourneyTime;
106
+ //# sourceMappingURL=journeyTime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journeyTime.js","sourceRoot":"","sources":["../src/journeyTime.ts"],"names":[],"mappings":"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"}
package/esm/index.d.ts CHANGED
@@ -10,4 +10,5 @@ export declare function fetchEtas({ route, stops, bound, dest, freq, seq, servic
10
10
  export declare function fetchEtaDb(): Promise<EtaDb>;
11
11
  export declare function fetchEtaDbMd5(): Promise<string>;
12
12
  export declare function fetchRouteUpdatedAt(route: RouteListEntry): Promise<number>;
13
+ export * from "./journeyTime";
13
14
  export type * from "./type";
package/esm/index.js CHANGED
@@ -101,4 +101,5 @@ export async function fetchRouteUpdatedAt(route) {
101
101
  return 0;
102
102
  });
103
103
  }
104
+ export * from "./journeyTime";
104
105
  //# sourceMappingURL=index.js.map
package/esm/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,OAAO,CAAC;AACxB,OAAO,GAAG,MAAM,OAAO,CAAC;AACxB,OAAO,GAAG,MAAM,OAAO,CAAC;AACxB,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,GAAG,MAAM,OAAO,CAAC;AACxB,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,GAAG,MAAM,OAAO,CAAC;AACxB,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,IAAI,MAAM,QAAQ,CAAC;AAW1B,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,EAC9B,KAAK,EACL,KAAK,EACL,KAAK,EACL,IAAI,EACJ,IAAI,EACJ,GAAG,EACH,WAAW,EACX,EAAE,EACF,KAAK,EACL,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,aAAa,GACE;IACf,IAAI;QACF,IAAI,KAAK,GAAU,EAAE,CAAC;QACtB,KAAK,MAAM,UAAU,IAAI,EAAE,EAAE;YAC3B,IAAI,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE;gBACrC,KAAK,GAAG,KAAK,CAAC,MAAM,CAClB,MAAM,GAAG,CAAC;oBACR,KAAK;oBACL,KAAK,EAAE,KAAK,CAAC,GAAG;oBAChB,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;oBACtB,GAAG;oBACH,EAAE;oBACF,WAAW;oBACX,KAAK,EAAE,KAAK,CAAC,GAAG;iBACjB,CAAC,CACH,CAAC;aACH;iBAAM,IAAI,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE;gBAC5C,KAAK,GAAG,KAAK,CAAC,MAAM,CAClB,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,CACpE,CAAC;aACH;iBAAM,IAAI,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE;gBAC5C,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;aACpE;iBAAM,IAAI,UAAU,KAAK,WAAW,IAAI,KAAK,CAAC,SAAS,EAAE;gBACxD,KAAK,GAAG,KAAK,CAAC,MAAM,CAClB,MAAM,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CACnE,CAAC;aACH;iBAAM,IAAI,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE;gBAC5C,KAAK,GAAG,KAAK,CAAC,MAAM,CAClB,MAAM,GAAG,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CACrE,CAAC;aACH;iBAAM,IAAI,UAAU,KAAK,WAAW,IAAI,KAAK,CAAC,SAAS,EAAE;gBACxD,KAAK,GAAG,KAAK,CAAC,MAAM,CAClB,MAAM,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAC/D,CAAC;aACH;iBAAM,IAAI,UAAU,KAAK,KAAK,IAAI,KAAK,CAAC,GAAG,EAAE;gBAC5C,KAAK,GAAG,KAAK,CAAC,MAAM,CAClB,MAAM,GAAG,CAAC;oBACR,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;oBACtB,KAAK;oBACL,QAAQ;oBACR,KAAK,EAAE,KAAK,CAAC,GAAG;iBACjB,CAAC,CACH,CAAC;aACH;iBAAM,IAAI,UAAU,KAAK,cAAc,IAAI,KAAK,CAAC,YAAY,EAAE;gBAC9D,KAAK,GAAG,KAAK,CAAC,MAAM,CAClB,MAAM,YAAY,CAAC;oBACjB,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ;iBACpD,CAAC,CACH,CAAA;aACF;iBAAM,IAAI,UAAU,KAAK,UAAU,IAAI,KAAK,CAAC,QAAQ,EAAE;gBACtD,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,QAAQ,CAAC,EAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAC,CAAC,CAAC,CAAA;aAClF;iBAAM,IAAI,UAAU,KAAK,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE;gBAC9C,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,EAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,aAAa,EAAC,CAAC,CAAC,CAAA;aACvE;SACF;QAED,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;YAC5B,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;SACpC;QACD,OAAO,KAAK;aACT,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACb,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,EAAE;gBAAE,OAAO,CAAC,CAAC;iBAChC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,KAAK,EAAE;gBAAE,OAAO,CAAC,CAAC,CAAC;YAC3C,OAAO,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC,CAAC,CAAC;KACN;IAAC,OAAO,GAAG,EAAE;QACZ,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACnB,OAAO,EAAE,CAAC;KACX;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,OAAO,KAAK,CAAC,+CAA+C,EAAE,EAAC,KAAK,EAAE,UAAU,EAAC,CAAC;SAC/E,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACrB,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,gEAAgE,EAAE,EAAC,KAAK,EAAE,UAAU,EAAC,CAAC;SACtG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CACrB,CAAC;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa;IACjC,OAAO,KAAK,CAAC,0CAA0C,EAAE,EAAC,KAAK,EAAE,UAAU,EAAC,CAAC;SAC1E,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACrB,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,2DAA2D,EAAE,EAAC,KAAK,EAAE,UAAU,EAAC,CAAC;SACjG,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CACrB,CAAC;AACN,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAAqB;IAC7D,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,WAAW,EAAE,CAAA;IACtG,OAAO,KAAK,CACV,mCAAmC,QAAQ,CAAC,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC,EAAE,CACvF;SACE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;QACV,IAAI,CAAC,CAAC,EAAE,EAAE;YACR,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;SACjB;QACD,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC;IAC3B,CAAC,CAAC;SACD,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CACV,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CACvB;SACA,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;QACX,OAAO,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;AACP,CAAC;AAED,cAAc,eAAe,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { RouteListEntry, StopList } from "./type";
2
+ /**
3
+ * Fetch Journey time in minute for a route
4
+ * @param {Object}
5
+ * @returns {number} journey time in minute
6
+ */
7
+ export declare function fetchEstJourneyTime({ route, stopList, startSeq, endSeq, batchSize, signal }: {
8
+ route: RouteListEntry;
9
+ stopList: StopList;
10
+ startSeq: number;
11
+ endSeq: number;
12
+ batchSize?: number;
13
+ signal?: AbortSignal | null;
14
+ }): Promise<number>;
@@ -0,0 +1,91 @@
1
+ const __HK_BUS_ETA_JT_CACHE__ = {};
2
+ /**
3
+ * Fetch Journey time in minute for a route
4
+ * @param {Object}
5
+ * @returns {number} journey time in minute
6
+ */
7
+ export async function fetchEstJourneyTime({ route, stopList, startSeq, endSeq, batchSize = 4, signal }) {
8
+ const stops = Object.values(route.stops)[0];
9
+ if (!["kmb", "nlb", "ctb", "lrtfeeder", "gmb"].includes(Object.keys(route.stops)[0]))
10
+ throw new Error("Support vehicle transport only");
11
+ if (startSeq < 0)
12
+ throw new Error("startSeq should be ≥ 0");
13
+ if (endSeq >= stops.length)
14
+ throw new Error("endSeq should be < number of stops");
15
+ if (startSeq >= endSeq)
16
+ throw new Error("startSeq should be < endSeq");
17
+ let ts = Date.now();
18
+ let ret = 0;
19
+ let payloads = [];
20
+ for (let i = startSeq; i < endSeq; ++i) {
21
+ payloads.push([
22
+ `${stops[i]}-${stops[i + 1]}`,
23
+ JSON.stringify({
24
+ start: {
25
+ lat: stopList[stops[i]].location.lat,
26
+ long: stopList[stops[i]].location.lng,
27
+ },
28
+ end: {
29
+ lat: stopList[stops[i + 1]].location.lat,
30
+ long: stopList[stops[i + 1]].location.lng,
31
+ },
32
+ departIn: Math.round(ret / 15) * 15
33
+ })
34
+ ]);
35
+ if (payloads.length < batchSize && i !== endSeq - 1) {
36
+ // skip fetching until whole batch filled
37
+ continue;
38
+ }
39
+ const minutes = await Promise.all(payloads.map(([key, payload]) => {
40
+ // load from cache if it is query within 15 minutes
41
+ if (key in __HK_BUS_ETA_JT_CACHE__ && __HK_BUS_ETA_JT_CACHE__[key].ts + 15 * 60 * 1000 >= ts) {
42
+ return Promise.resolve(__HK_BUS_ETA_JT_CACHE__[key].m);
43
+ }
44
+ return (
45
+ //TODO: update to use gov API
46
+ // fetch('https://tdas.hkbus.app/tdas/api/route', {
47
+ fetch('https://tdas.hkbus.app/tdas/api/route', {
48
+ method: "POST",
49
+ headers: {
50
+ 'Content-Type': "application/json",
51
+ },
52
+ body: payload,
53
+ signal,
54
+ })
55
+ .then(r => r.json())
56
+ .then(({ eta, distM, jSpeed }) => {
57
+ var _a;
58
+ const speedStr = (_a = /(\d+)公里\/小時/g.exec(jSpeed)) === null || _a === void 0 ? void 0 : _a[1];
59
+ if (speedStr !== null &&
60
+ speedStr !== undefined &&
61
+ !isNaN(parseInt(speedStr, 10))) {
62
+ return (distM / parseInt(speedStr, 10) / 1000) * 60;
63
+ }
64
+ console.warn("Unable to parse TDAS response for more precise journey time. Falling back.");
65
+ const [hh, mm] = eta.split(":").map((v) => parseInt(v, 10));
66
+ return hh * 60 + mm;
67
+ })
68
+ .catch(() => {
69
+ // for any error, assume 4 minutes journey time blindly
70
+ return 4;
71
+ })
72
+ .then(m => {
73
+ __HK_BUS_ETA_JT_CACHE__[key] = { m: m + 1, ts };
74
+ // margin for car accelerating, decelerating, and passenger picking up and dropping off
75
+ return m + 1;
76
+ }));
77
+ }));
78
+ minutes.forEach(m => {
79
+ ret += m;
80
+ });
81
+ payloads.length = 0;
82
+ }
83
+ for (const k in __HK_BUS_ETA_JT_CACHE__) {
84
+ // clean up cache
85
+ if (__HK_BUS_ETA_JT_CACHE__[k].ts + 15 * 60 * 1000 < ts) {
86
+ delete __HK_BUS_ETA_JT_CACHE__[k];
87
+ }
88
+ }
89
+ return ret;
90
+ }
91
+ //# sourceMappingURL=journeyTime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"journeyTime.js","sourceRoot":"","sources":["../src/journeyTime.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hk-bus-eta",
3
- "version": "3.4.1",
3
+ "version": "3.5.1",
4
4
  "description": "Query the ETA (Estimated Time of Arrival) of HK Bus/Minibus/MTR/Lightrail",
5
5
  "main": "dist/index.js",
6
6
  "module": "esm/index.js",
@@ -16,7 +16,8 @@
16
16
  "build:esm": "tsc --target es2018 --outDir esm",
17
17
  "build:cjs": "tsc --target es2015 --module commonjs --outDir dist",
18
18
  "build": "yarn build:cjs && yarn build:esm",
19
- "prepublish": "yarn build"
19
+ "prepublish": "yarn build",
20
+ "est": "ts-node ./est.ts"
20
21
  },
21
22
  "repository": {
22
23
  "type": "git",
package/src/index.ts CHANGED
@@ -139,4 +139,6 @@ export async function fetchRouteUpdatedAt(route: RouteListEntry): Promise<number
139
139
  });
140
140
  }
141
141
 
142
+ export * from "./journeyTime";
143
+
142
144
  export type * from "./type";
@@ -0,0 +1,106 @@
1
+ import { RouteListEntry, StopList } from "./type";
2
+
3
+ type JT_CACHE = Record<string, {
4
+ m: number;
5
+ ts: number;
6
+ }>
7
+
8
+ const __HK_BUS_ETA_JT_CACHE__: JT_CACHE = {}
9
+
10
+ /**
11
+ * Fetch Journey time in minute for a route
12
+ * @param {Object}
13
+ * @returns {number} journey time in minute
14
+ */
15
+ export async function fetchEstJourneyTime({
16
+ route, stopList, startSeq, endSeq, batchSize = 4, signal
17
+ }: {
18
+ route: RouteListEntry, stopList: StopList, startSeq: number, endSeq: number, batchSize?: number,
19
+ signal?: AbortSignal | null,
20
+ }): Promise<number> {
21
+ const stops = Object.values(route.stops)[0]
22
+ if ( !["kmb", "nlb", "ctb", "lrtfeeder", "gmb"].includes(Object.keys(route.stops)[0]) ) throw new Error("Support vehicle transport only")
23
+ if ( startSeq < 0 ) throw new Error("startSeq should be ≥ 0")
24
+ if ( endSeq >= stops.length ) throw new Error("endSeq should be < number of stops")
25
+ if ( startSeq >= endSeq ) throw new Error("startSeq should be < endSeq")
26
+
27
+ let ts = Date.now()
28
+ let ret = 0
29
+ let payloads = []
30
+ for ( let i = startSeq; i < endSeq; ++i ) {
31
+ payloads.push([
32
+ `${stops[i]}-${stops[i+1]}`,
33
+ JSON.stringify({
34
+ start: {
35
+ lat: stopList[stops[i]].location.lat,
36
+ long: stopList[stops[i]].location.lng,
37
+ },
38
+ end: {
39
+ lat: stopList[stops[i+1]].location.lat,
40
+ long: stopList[stops[i+1]].location.lng,
41
+ },
42
+ departIn: Math.round(ret / 15) * 15
43
+ })
44
+ ])
45
+ if ( payloads.length < batchSize && i !== endSeq - 1 ) {
46
+ // skip fetching until whole batch filled
47
+ continue
48
+ }
49
+ const minutes = await Promise.all(payloads.map(([key, payload]) => {
50
+ // load from cache if it is query within 15 minutes
51
+ if ( key in __HK_BUS_ETA_JT_CACHE__ && __HK_BUS_ETA_JT_CACHE__[key].ts + 15 * 60 * 1000 >= ts ) {
52
+ return Promise.resolve(__HK_BUS_ETA_JT_CACHE__[key].m)
53
+ }
54
+
55
+ return (
56
+ //TODO: update to use gov API
57
+ // fetch('https://tdas.hkbus.app/tdas/api/route', {
58
+ fetch('https://tdas.hkbus.app/tdas/api/route', {
59
+ method: "POST",
60
+ headers: {
61
+ 'Content-Type': "application/json",
62
+ },
63
+ body: payload,
64
+ signal,
65
+ })
66
+ .then(r => r.json())
67
+ .then(({eta, distM, jSpeed}) => {
68
+ const speedStr = /(\d+)公里\/小時/g.exec(jSpeed)?.[1];
69
+ if (
70
+ speedStr !== null &&
71
+ speedStr !== undefined &&
72
+ !isNaN(parseInt(speedStr, 10))
73
+ ) {
74
+ return (distM / parseInt(speedStr, 10) / 1000) * 60;
75
+ }
76
+ console.warn(
77
+ "Unable to parse TDAS response for more precise journey time. Falling back."
78
+ );
79
+ const [hh, mm] = eta.split(":").map((v: string) => parseInt(v, 10))
80
+ return hh * 60 + mm;
81
+ })
82
+ .catch(() => {
83
+ // for any error, assume 4 minutes journey time blindly
84
+ return 4;
85
+ })
86
+ .then(m => {
87
+ __HK_BUS_ETA_JT_CACHE__[key] = { m: m + 1, ts }
88
+ // margin for car accelerating, decelerating, and passenger picking up and dropping off
89
+ return m + 1
90
+ })
91
+ )
92
+ }
93
+ ))
94
+ minutes.forEach(m => {
95
+ ret += m
96
+ })
97
+ payloads.length = 0
98
+ }
99
+ for ( const k in __HK_BUS_ETA_JT_CACHE__ ) {
100
+ // clean up cache
101
+ if ( __HK_BUS_ETA_JT_CACHE__[k].ts + 15 * 60 * 1000 < ts ) {
102
+ delete __HK_BUS_ETA_JT_CACHE__[k];
103
+ }
104
+ }
105
+ return ret
106
+ }