hk-bus-eta 3.2.0 → 3.3.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.
@@ -0,0 +1,11 @@
1
+ import type { Eta, StopList } from "./type";
2
+ interface fetchEtasProps {
3
+ route: string;
4
+ stops: {
5
+ fortuneferry: string[];
6
+ };
7
+ seq: number;
8
+ stopList: StopList;
9
+ }
10
+ export default function fetchEtas({ route, stops: { fortuneferry: stops }, seq, stopList }: fetchEtasProps): Promise<Eta[]>;
11
+ export {};
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("./utils");
4
+ const getCode = (zhName) => {
5
+ if (zhName.includes("中環")) {
6
+ return "CL";
7
+ }
8
+ else if (zhName.includes("紅磡")) {
9
+ return "HH";
10
+ }
11
+ else if (zhName.includes("北角")) {
12
+ return "NP";
13
+ }
14
+ else if (zhName.includes("觀塘")) {
15
+ return "KT";
16
+ }
17
+ else if (zhName.includes("啟德")) {
18
+ return "KT";
19
+ }
20
+ else if (zhName.includes("屯門")) {
21
+ return "TM";
22
+ }
23
+ else if (zhName.includes("東涌")) {
24
+ return "TC";
25
+ }
26
+ else if (zhName.includes("沙螺灣")) {
27
+ return "SLW";
28
+ }
29
+ else if (zhName.includes("大澳")) {
30
+ return "TO";
31
+ }
32
+ return "CL";
33
+ };
34
+ function fetchEtas({ route, stops: { fortuneferry: stops }, seq, stopList }) {
35
+ if (stops.length === seq - 1)
36
+ return Promise.resolve([]);
37
+ const u = getCode(stopList[stops[seq]].name.zh);
38
+ const v = getCode(stopList[stops[seq + 1]].name.zh);
39
+ return fetch(`https://www.hongkongwatertaxi.com.hk/eta/?route=${u}${v}`, {
40
+ cache: utils_1.isSafari ? "default" : "no-store",
41
+ })
42
+ .then((response) => response.json())
43
+ .then(({ data }) => {
44
+ if (!data)
45
+ return [];
46
+ return data
47
+ .map(({ depart_time, rmk_tc, rmk_en }) => {
48
+ const date = new Date();
49
+ let guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`;
50
+ if ((new Date(guess)) < date) {
51
+ date.setDate(date.getDate() + 1);
52
+ guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`;
53
+ }
54
+ return {
55
+ eta: guess,
56
+ remark: {
57
+ zh: rmk_tc,
58
+ en: rmk_en,
59
+ },
60
+ dest: {
61
+ zh: "",
62
+ en: "",
63
+ },
64
+ co: "fortuneferry",
65
+ };
66
+ });
67
+ });
68
+ }
69
+ exports.default = fetchEtas;
70
+ //# sourceMappingURL=fortuneferry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fortuneferry.js","sourceRoot":"","sources":["../src/fortuneferry.ts"],"names":[],"mappings":"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"}
package/dist/gmb.js CHANGED
@@ -12,18 +12,21 @@ function fetchEtas({ gtfsId, stopId, bound, seq, }) {
12
12
  .filter(({ stop_seq }) => stop_seq === seq + 1)
13
13
  .reduce((acc, { eta }) => [
14
14
  ...acc,
15
- ...eta.map((data) => ({
16
- eta: data.timestamp,
17
- remark: {
18
- zh: data.remarks_tc,
19
- en: data.remarks_en,
20
- },
21
- dest: {
22
- zh: "",
23
- en: "",
24
- },
25
- co: "gmb",
26
- })),
15
+ ...eta.map((data) => {
16
+ var _a, _b;
17
+ return ({
18
+ eta: data.timestamp,
19
+ remark: {
20
+ zh: (_a = data.remarks_tc) !== null && _a !== void 0 ? _a : "",
21
+ en: (_b = data.remarks_en) !== null && _b !== void 0 ? _b : "",
22
+ },
23
+ dest: {
24
+ zh: "",
25
+ en: "",
26
+ },
27
+ co: "gmb",
28
+ });
29
+ }),
27
30
  ], []));
28
31
  }
29
32
  exports.default = fetchEtas;
package/dist/gmb.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"gmb.js","sourceRoot":"","sources":["../src/gmb.ts"],"names":[],"mappings":";;AACA,mCAAmC;AASnC,SAAwB,SAAS,CAAC,EAChC,MAAM,EACN,MAAM,EACN,KAAK,EACL,GAAG,GACY;IACf,OAAO,KAAK,CACV,6CAA6C,MAAM,IAAI,MAAM,EAAE,EAC/D;QACE,KAAK,EAAE,gBAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;KACzC,CACF;SACE,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;SACnC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CACjB,IAAI;SACD,MAAM,CACL,CAAC,EAAE,SAAS,EAAO,EAAE,EAAE,CACrB,CAAC,KAAK,KAAK,GAAG,IAAI,SAAS,KAAK,CAAC,CAAC;QAClC,CAAC,KAAK,KAAK,GAAG,IAAI,SAAS,KAAK,CAAC,CAAC,CACrC;SACA,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAO,EAAE,EAAE,CAAC,QAAQ,KAAK,GAAG,GAAG,CAAC,CAAC;SACnD,MAAM,CACL,CAAC,GAAU,EAAE,EAAE,GAAG,EAAO,EAAE,EAAE,CAAC;QAC5B,GAAG,GAAG;QACN,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,CAAC;YACzB,GAAG,EAAE,IAAI,CAAC,SAAS;YACnB,MAAM,EAAE;gBACN,EAAE,EAAE,IAAI,CAAC,UAAU;gBACnB,EAAE,EAAE,IAAI,CAAC,UAAU;aACpB;YACD,IAAI,EAAE;gBACJ,EAAE,EAAE,EAAE;gBACN,EAAE,EAAE,EAAE;aACP;YACD,EAAE,EAAE,KAAK;SACV,CAAC,CAAC;KACJ,EACD,EAAE,CACH,CACJ,CAAC;AACN,CAAC;AAxCD,4BAwCC"}
1
+ {"version":3,"file":"gmb.js","sourceRoot":"","sources":["../src/gmb.ts"],"names":[],"mappings":";;AACA,mCAAmC;AASnC,SAAwB,SAAS,CAAC,EAChC,MAAM,EACN,MAAM,EACN,KAAK,EACL,GAAG,GACY;IACf,OAAO,KAAK,CACV,6CAA6C,MAAM,IAAI,MAAM,EAAE,EAC/D;QACE,KAAK,EAAE,gBAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;KACzC,CACF;SACE,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;SACnC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CACjB,IAAI;SACD,MAAM,CACL,CAAC,EAAE,SAAS,EAAO,EAAE,EAAE,CACrB,CAAC,KAAK,KAAK,GAAG,IAAI,SAAS,KAAK,CAAC,CAAC;QAClC,CAAC,KAAK,KAAK,GAAG,IAAI,SAAS,KAAK,CAAC,CAAC,CACrC;SACA,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAO,EAAE,EAAE,CAAC,QAAQ,KAAK,GAAG,GAAG,CAAC,CAAC;SACnD,MAAM,CACL,CAAC,GAAU,EAAE,EAAE,GAAG,EAAO,EAAE,EAAE,CAAC;QAC5B,GAAG,GAAG;QACN,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE;;YAAC,OAAA,CAAC;gBACzB,GAAG,EAAE,IAAI,CAAC,SAAS;gBACnB,MAAM,EAAE;oBACN,EAAE,EAAE,MAAA,IAAI,CAAC,UAAU,mCAAI,EAAE;oBACzB,EAAE,EAAE,MAAA,IAAI,CAAC,UAAU,mCAAI,EAAE;iBAC1B;gBACD,IAAI,EAAE;oBACJ,EAAE,EAAE,EAAE;oBACN,EAAE,EAAE,EAAE;iBACP;gBACD,EAAE,EAAE,KAAK;aACV,CAAC,CAAA;SAAA,CAAC;KACJ,EACD,EAAE,CACH,CACJ,CAAC;AACN,CAAC;AAxCD,4BAwCC"}
package/dist/hkkf.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ import type { Eta, RouteListEntry } from "./type";
2
+ interface fetchEtasProps {
3
+ route: string;
4
+ bound: RouteListEntry["bound"]["hkkf"];
5
+ seq: number;
6
+ }
7
+ export default function fetchEtas({ route, bound, seq }: fetchEtasProps): Promise<Eta[]>;
8
+ export {};
package/dist/hkkf.js ADDED
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("./utils");
4
+ function fetchEtas({ route, bound, seq }) {
5
+ if (seq === 0)
6
+ return Promise.resolve([]);
7
+ return fetch(`https://www.hkkfeta.com/opendata/eta/${route.slice(2)}/${bound === "I" ? "inbound" : "outbound"}`, {
8
+ cache: utils_1.isSafari ? "default" : "no-store",
9
+ })
10
+ .then((response) => response.json())
11
+ .then(({ data }) => {
12
+ if (!data)
13
+ return [];
14
+ return data
15
+ .map(({ ETA }) => {
16
+ return {
17
+ eta: ETA,
18
+ remark: {
19
+ zh: "",
20
+ en: "",
21
+ },
22
+ dest: {
23
+ zh: "",
24
+ en: "",
25
+ },
26
+ co: "hkkf",
27
+ };
28
+ });
29
+ });
30
+ }
31
+ exports.default = fetchEtas;
32
+ //# sourceMappingURL=hkkf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hkkf.js","sourceRoot":"","sources":["../src/hkkf.ts"],"names":[],"mappings":";;AACA,mCAAmC;AAQnC,SAAwB,SAAS,CAAC,EAChC,KAAK,EAAE,KAAK,EAAE,GAAG,EACF;IACf,IAAK,GAAG,KAAK,CAAC;QAAG,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC3C,OAAO,KAAK,CACV,wCAAwC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,EAClG;QACE,KAAK,EAAE,gBAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;KACzC,CACF;SACE,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;SACnC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;QACjB,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QAErB,OAAO,IAAI;aACR,GAAG,CAAC,CAAC,EAAC,GAAG,EAAM,EAAE,EAAE;YAClB,OAAO;gBACL,GAAG,EAAE,GAAG;gBACR,MAAM,EAAE;oBACN,EAAE,EAAE,EAAE;oBACN,EAAE,EAAE,EAAE;iBACP;gBACD,IAAI,EAAE;oBACJ,EAAE,EAAE,EAAE;oBACN,EAAE,EAAE,EAAE;iBACP;gBACD,EAAE,EAAE,MAAM;aACX,CAAA;QACH,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC;AA9BD,4BA8BC"}
package/dist/index.js CHANGED
@@ -20,6 +20,9 @@ const lrtfeeder_1 = __importDefault(require("./lrtfeeder"));
20
20
  const gmb_1 = __importDefault(require("./gmb"));
21
21
  const lightRail_1 = __importDefault(require("./lightRail"));
22
22
  const mtr_1 = __importDefault(require("./mtr"));
23
+ const sunferry_1 = __importDefault(require("./sunferry"));
24
+ const fortuneferry_1 = __importDefault(require("./fortuneferry"));
25
+ const hkkf_1 = __importDefault(require("./hkkf"));
23
26
  function fetchEtas({ route, stops, bound, dest, seq, serviceType, co, nlbId, gtfsId, stopList, language, }) {
24
27
  return __awaiter(this, void 0, void 0, function* () {
25
28
  try {
@@ -59,29 +62,16 @@ function fetchEtas({ route, stops, bound, dest, seq, serviceType, co, nlbId, gtf
59
62
  bound: bound.mtr,
60
63
  }));
61
64
  }
62
- else if (company_id === "gmbHki" && stops.gmbHki) {
63
- _etas = _etas.concat(yield (0, gmb_1.default)({
64
- stopId: stops.gmbHki[seq],
65
- gtfsId,
66
- seq,
67
- bound: bound.gmbHki,
65
+ else if (company_id === "fortuneferry" && stops.fortuneferry) {
66
+ _etas = _etas.concat(yield (0, fortuneferry_1.default)({
67
+ route, stops, seq, stopList
68
68
  }));
69
69
  }
70
- else if (company_id === "gmbKln" && stops.gmbKln) {
71
- _etas = _etas.concat(yield (0, gmb_1.default)({
72
- stopId: stops.gmbKln[seq],
73
- gtfsId,
74
- seq,
75
- bound: bound.gmbKln,
76
- }));
70
+ else if (company_id === "sunferry" && stops.sunferry) {
71
+ _etas = _etas.concat(yield (0, sunferry_1.default)({ route, seq }));
77
72
  }
78
- else if (company_id === "gmbNt" && stops.gmbNt) {
79
- _etas = _etas.concat(yield (0, gmb_1.default)({
80
- stopId: stops.gmbNt[seq],
81
- gtfsId,
82
- seq,
83
- bound: bound.gmbNt,
84
- }));
73
+ else if (company_id === "hkkf" && stops.hkkf) {
74
+ _etas = _etas.concat(yield (0, hkkf_1.default)({ route, bound: bound.hkkf, seq }));
85
75
  }
86
76
  }
87
77
  return _etas.sort((a, b) => {
@@ -101,18 +91,18 @@ function fetchEtas({ route, stops, bound, dest, seq, serviceType, co, nlbId, gtf
101
91
  exports.fetchEtas = fetchEtas;
102
92
  function fetchEtaDb() {
103
93
  return __awaiter(this, void 0, void 0, function* () {
104
- return fetch("https://data.hkbus.app/routeFareList.min.json")
94
+ return fetch("https://data.hkbus.app/routeFareList.min.json", { cache: "no-store" })
105
95
  .then((r) => r.json())
106
- .catch(() => fetch("https://hkbus.github.io/hk-bus-crawling/routeFareList.min.json")
96
+ .catch(() => fetch("https://hkbus.github.io/hk-bus-crawling/routeFareList.min.json", { cache: "no-store" })
107
97
  .then(r => r.json()));
108
98
  });
109
99
  }
110
100
  exports.fetchEtaDb = fetchEtaDb;
111
101
  function fetchEtaDbMd5() {
112
102
  return __awaiter(this, void 0, void 0, function* () {
113
- return fetch("https://data.hkbus.app/routeFareList.md5")
103
+ return fetch("https://data.hkbus.app/routeFareList.md5", { cache: "no-store" })
114
104
  .then((r) => r.text())
115
- .catch(() => fetch("https://hkbus.github.io/hk-bus-crawling/routeFareList.md5")
105
+ .catch(() => fetch("https://hkbus.github.io/hk-bus-crawling/routeFareList.md5", { cache: "no-store" })
116
106
  .then(r => r.text()));
117
107
  });
118
108
  }
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,7 @@
1
+ import type { Eta } from "./type";
2
+ interface fetchEtasProps {
3
+ route: string;
4
+ seq: number;
5
+ }
6
+ export default function fetchEtas({ route, seq }: fetchEtasProps): Promise<Eta[]>;
7
+ export {};
@@ -0,0 +1,38 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_1 = require("./utils");
4
+ function fetchEtas({ route, seq }) {
5
+ if (seq === 1)
6
+ return Promise.resolve([]);
7
+ return fetch(`https://www.sunferry.com.hk/eta/?route=${route}`, {
8
+ cache: utils_1.isSafari ? "default" : "no-store",
9
+ })
10
+ .then((response) => response.json())
11
+ .then(({ data }) => {
12
+ if (!data)
13
+ return [];
14
+ return data
15
+ .map(({ depart_time, rmk_en, rmk_tc, route_tc, route_en }) => {
16
+ const date = new Date();
17
+ let guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`;
18
+ if ((new Date(guess)) < date) {
19
+ date.setDate(date.getDate() + 1);
20
+ guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`;
21
+ }
22
+ return {
23
+ eta: guess,
24
+ remark: {
25
+ zh: rmk_tc,
26
+ en: rmk_en,
27
+ },
28
+ dest: {
29
+ zh: route_tc.split(" - ")[1],
30
+ en: route_en.split(" - ")[1],
31
+ },
32
+ co: "sunferry",
33
+ };
34
+ });
35
+ });
36
+ }
37
+ exports.default = fetchEtas;
38
+ //# sourceMappingURL=sunferry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sunferry.js","sourceRoot":"","sources":["../src/sunferry.ts"],"names":[],"mappings":";;AACA,mCAAmC;AAOnC,SAAwB,SAAS,CAAC,EAChC,KAAK,EAAE,GAAG,EACK;IACf,IAAK,GAAG,KAAK,CAAC;QAAG,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC3C,OAAO,KAAK,CACV,0CAA0C,KAAK,EAAE,EACjD;QACE,KAAK,EAAE,gBAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;KACzC,CACF;SACE,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;SACnC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;QACjB,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QAErB,OAAO,IAAI;aACR,GAAG,CAAC,CAAC,EAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAM,EAAE,EAAE;YAC9D,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,WAAW,YAAY,CAAA;YACjG,IAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,EAAG;gBAC9B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;gBAChC,KAAK,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,WAAW,YAAY,CAAA;aAC9F;YACD,OAAO;gBACL,GAAG,EAAE,KAAK;gBACV,MAAM,EAAE;oBACN,EAAE,EAAE,MAAM;oBACV,EAAE,EAAE,MAAM;iBACX;gBACD,IAAI,EAAE;oBACJ,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC5B,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBAC7B;gBACD,EAAE,EAAE,UAAU;aACf,CAAA;QACH,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC;AApCD,4BAoCC"}
package/dist/type.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export type Company = "kmb" | "nlb" | "ctb" | "lrtfeeder" | "gmb" | "lightRail" | "mtr" | "gmbHki" | "gmbKln" | "gmbNt";
1
+ export type Company = "kmb" | "nlb" | "ctb" | "lrtfeeder" | "gmb" | "lightRail" | "mtr" | "sunferry" | "hkkf" | "fortuneferry";
2
2
  export type Terminal = {
3
3
  en: string;
4
4
  zh: string;
@@ -69,4 +69,6 @@ export type Eta = {
69
69
  en: string;
70
70
  };
71
71
  co: Company;
72
+ lat?: number;
73
+ lng: number;
72
74
  };
@@ -0,0 +1,11 @@
1
+ import type { Eta, StopList } from "./type";
2
+ interface fetchEtasProps {
3
+ route: string;
4
+ stops: {
5
+ fortuneferry: string[];
6
+ };
7
+ seq: number;
8
+ stopList: StopList;
9
+ }
10
+ export default function fetchEtas({ route, stops: { fortuneferry: stops }, seq, stopList }: fetchEtasProps): Promise<Eta[]>;
11
+ export {};
@@ -0,0 +1,67 @@
1
+ import { isSafari } from "./utils";
2
+ const getCode = (zhName) => {
3
+ if (zhName.includes("中環")) {
4
+ return "CL";
5
+ }
6
+ else if (zhName.includes("紅磡")) {
7
+ return "HH";
8
+ }
9
+ else if (zhName.includes("北角")) {
10
+ return "NP";
11
+ }
12
+ else if (zhName.includes("觀塘")) {
13
+ return "KT";
14
+ }
15
+ else if (zhName.includes("啟德")) {
16
+ return "KT";
17
+ }
18
+ else if (zhName.includes("屯門")) {
19
+ return "TM";
20
+ }
21
+ else if (zhName.includes("東涌")) {
22
+ return "TC";
23
+ }
24
+ else if (zhName.includes("沙螺灣")) {
25
+ return "SLW";
26
+ }
27
+ else if (zhName.includes("大澳")) {
28
+ return "TO";
29
+ }
30
+ return "CL";
31
+ };
32
+ export default function fetchEtas({ route, stops: { fortuneferry: stops }, seq, stopList }) {
33
+ if (stops.length === seq - 1)
34
+ return Promise.resolve([]);
35
+ const u = getCode(stopList[stops[seq]].name.zh);
36
+ const v = getCode(stopList[stops[seq + 1]].name.zh);
37
+ return fetch(`https://www.hongkongwatertaxi.com.hk/eta/?route=${u}${v}`, {
38
+ cache: isSafari ? "default" : "no-store",
39
+ })
40
+ .then((response) => response.json())
41
+ .then(({ data }) => {
42
+ if (!data)
43
+ return [];
44
+ return data
45
+ .map(({ depart_time, rmk_tc, rmk_en }) => {
46
+ const date = new Date();
47
+ let guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`;
48
+ if ((new Date(guess)) < date) {
49
+ date.setDate(date.getDate() + 1);
50
+ guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`;
51
+ }
52
+ return {
53
+ eta: guess,
54
+ remark: {
55
+ zh: rmk_tc,
56
+ en: rmk_en,
57
+ },
58
+ dest: {
59
+ zh: "",
60
+ en: "",
61
+ },
62
+ co: "fortuneferry",
63
+ };
64
+ });
65
+ });
66
+ }
67
+ //# sourceMappingURL=fortuneferry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fortuneferry.js","sourceRoot":"","sources":["../src/fortuneferry.ts"],"names":[],"mappings":"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"}
package/esm/gmb.js CHANGED
@@ -10,18 +10,21 @@ export default function fetchEtas({ gtfsId, stopId, bound, seq, }) {
10
10
  .filter(({ stop_seq }) => stop_seq === seq + 1)
11
11
  .reduce((acc, { eta }) => [
12
12
  ...acc,
13
- ...eta.map((data) => ({
14
- eta: data.timestamp,
15
- remark: {
16
- zh: data.remarks_tc,
17
- en: data.remarks_en,
18
- },
19
- dest: {
20
- zh: "",
21
- en: "",
22
- },
23
- co: "gmb",
24
- })),
13
+ ...eta.map((data) => {
14
+ var _a, _b;
15
+ return ({
16
+ eta: data.timestamp,
17
+ remark: {
18
+ zh: (_a = data.remarks_tc) !== null && _a !== void 0 ? _a : "",
19
+ en: (_b = data.remarks_en) !== null && _b !== void 0 ? _b : "",
20
+ },
21
+ dest: {
22
+ zh: "",
23
+ en: "",
24
+ },
25
+ co: "gmb",
26
+ });
27
+ }),
25
28
  ], []));
26
29
  }
27
30
  //# sourceMappingURL=gmb.js.map
package/esm/gmb.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"gmb.js","sourceRoot":"","sources":["../src/gmb.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AASnC,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,MAAM,EACN,MAAM,EACN,KAAK,EACL,GAAG,GACY;IACf,OAAO,KAAK,CACV,6CAA6C,MAAM,IAAI,MAAM,EAAE,EAC/D;QACE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;KACzC,CACF;SACE,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;SACnC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CACjB,IAAI;SACD,MAAM,CACL,CAAC,EAAE,SAAS,EAAO,EAAE,EAAE,CACrB,CAAC,KAAK,KAAK,GAAG,IAAI,SAAS,KAAK,CAAC,CAAC;QAClC,CAAC,KAAK,KAAK,GAAG,IAAI,SAAS,KAAK,CAAC,CAAC,CACrC;SACA,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAO,EAAE,EAAE,CAAC,QAAQ,KAAK,GAAG,GAAG,CAAC,CAAC;SACnD,MAAM,CACL,CAAC,GAAU,EAAE,EAAE,GAAG,EAAO,EAAE,EAAE,CAAC;QAC5B,GAAG,GAAG;QACN,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,CAAC;YACzB,GAAG,EAAE,IAAI,CAAC,SAAS;YACnB,MAAM,EAAE;gBACN,EAAE,EAAE,IAAI,CAAC,UAAU;gBACnB,EAAE,EAAE,IAAI,CAAC,UAAU;aACpB;YACD,IAAI,EAAE;gBACJ,EAAE,EAAE,EAAE;gBACN,EAAE,EAAE,EAAE;aACP;YACD,EAAE,EAAE,KAAK;SACV,CAAC,CAAC;KACJ,EACD,EAAE,CACH,CACJ,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"gmb.js","sourceRoot":"","sources":["../src/gmb.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AASnC,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,MAAM,EACN,MAAM,EACN,KAAK,EACL,GAAG,GACY;IACf,OAAO,KAAK,CACV,6CAA6C,MAAM,IAAI,MAAM,EAAE,EAC/D;QACE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;KACzC,CACF;SACE,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;SACnC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CACjB,IAAI;SACD,MAAM,CACL,CAAC,EAAE,SAAS,EAAO,EAAE,EAAE,CACrB,CAAC,KAAK,KAAK,GAAG,IAAI,SAAS,KAAK,CAAC,CAAC;QAClC,CAAC,KAAK,KAAK,GAAG,IAAI,SAAS,KAAK,CAAC,CAAC,CACrC;SACA,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAO,EAAE,EAAE,CAAC,QAAQ,KAAK,GAAG,GAAG,CAAC,CAAC;SACnD,MAAM,CACL,CAAC,GAAU,EAAE,EAAE,GAAG,EAAO,EAAE,EAAE,CAAC;QAC5B,GAAG,GAAG;QACN,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE;;YAAC,OAAA,CAAC;gBACzB,GAAG,EAAE,IAAI,CAAC,SAAS;gBACnB,MAAM,EAAE;oBACN,EAAE,EAAE,MAAA,IAAI,CAAC,UAAU,mCAAI,EAAE;oBACzB,EAAE,EAAE,MAAA,IAAI,CAAC,UAAU,mCAAI,EAAE;iBAC1B;gBACD,IAAI,EAAE;oBACJ,EAAE,EAAE,EAAE;oBACN,EAAE,EAAE,EAAE;iBACP;gBACD,EAAE,EAAE,KAAK;aACV,CAAC,CAAA;SAAA,CAAC;KACJ,EACD,EAAE,CACH,CACJ,CAAC;AACN,CAAC"}
package/esm/hkkf.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ import type { Eta, RouteListEntry } from "./type";
2
+ interface fetchEtasProps {
3
+ route: string;
4
+ bound: RouteListEntry["bound"]["hkkf"];
5
+ seq: number;
6
+ }
7
+ export default function fetchEtas({ route, bound, seq }: fetchEtasProps): Promise<Eta[]>;
8
+ export {};
package/esm/hkkf.js ADDED
@@ -0,0 +1,29 @@
1
+ import { isSafari } from "./utils";
2
+ export default function fetchEtas({ route, bound, seq }) {
3
+ if (seq === 0)
4
+ return Promise.resolve([]);
5
+ return fetch(`https://www.hkkfeta.com/opendata/eta/${route.slice(2)}/${bound === "I" ? "inbound" : "outbound"}`, {
6
+ cache: isSafari ? "default" : "no-store",
7
+ })
8
+ .then((response) => response.json())
9
+ .then(({ data }) => {
10
+ if (!data)
11
+ return [];
12
+ return data
13
+ .map(({ ETA }) => {
14
+ return {
15
+ eta: ETA,
16
+ remark: {
17
+ zh: "",
18
+ en: "",
19
+ },
20
+ dest: {
21
+ zh: "",
22
+ en: "",
23
+ },
24
+ co: "hkkf",
25
+ };
26
+ });
27
+ });
28
+ }
29
+ //# sourceMappingURL=hkkf.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hkkf.js","sourceRoot":"","sources":["../src/hkkf.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAQnC,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,KAAK,EAAE,KAAK,EAAE,GAAG,EACF;IACf,IAAK,GAAG,KAAK,CAAC;QAAG,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC3C,OAAO,KAAK,CACV,wCAAwC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,EAAE,EAClG;QACE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;KACzC,CACF;SACE,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;SACnC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;QACjB,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QAErB,OAAO,IAAI;aACR,GAAG,CAAC,CAAC,EAAC,GAAG,EAAM,EAAE,EAAE;YAClB,OAAO;gBACL,GAAG,EAAE,GAAG;gBACR,MAAM,EAAE;oBACN,EAAE,EAAE,EAAE;oBACN,EAAE,EAAE,EAAE;iBACP;gBACD,IAAI,EAAE;oBACJ,EAAE,EAAE,EAAE;oBACN,EAAE,EAAE,EAAE;iBACP;gBACD,EAAE,EAAE,MAAM;aACX,CAAA;QACH,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC"}
package/esm/index.js CHANGED
@@ -5,6 +5,9 @@ import lrtfeeder from "./lrtfeeder";
5
5
  import gmb from "./gmb";
6
6
  import lightrail from "./lightRail";
7
7
  import mtr from "./mtr";
8
+ import sunferry from "./sunferry";
9
+ import fortuneferry from "./fortuneferry";
10
+ import hkkf from "./hkkf";
8
11
  export async function fetchEtas({ route, stops, bound, dest, seq, serviceType, co, nlbId, gtfsId, stopList, language, }) {
9
12
  try {
10
13
  let _etas = [];
@@ -43,29 +46,16 @@ export async function fetchEtas({ route, stops, bound, dest, seq, serviceType, c
43
46
  bound: bound.mtr,
44
47
  }));
45
48
  }
46
- else if (company_id === "gmbHki" && stops.gmbHki) {
47
- _etas = _etas.concat(await gmb({
48
- stopId: stops.gmbHki[seq],
49
- gtfsId,
50
- seq,
51
- bound: bound.gmbHki,
49
+ else if (company_id === "fortuneferry" && stops.fortuneferry) {
50
+ _etas = _etas.concat(await fortuneferry({
51
+ route, stops, seq, stopList
52
52
  }));
53
53
  }
54
- else if (company_id === "gmbKln" && stops.gmbKln) {
55
- _etas = _etas.concat(await gmb({
56
- stopId: stops.gmbKln[seq],
57
- gtfsId,
58
- seq,
59
- bound: bound.gmbKln,
60
- }));
54
+ else if (company_id === "sunferry" && stops.sunferry) {
55
+ _etas = _etas.concat(await sunferry({ route, seq }));
61
56
  }
62
- else if (company_id === "gmbNt" && stops.gmbNt) {
63
- _etas = _etas.concat(await gmb({
64
- stopId: stops.gmbNt[seq],
65
- gtfsId,
66
- seq,
67
- bound: bound.gmbNt,
68
- }));
57
+ else if (company_id === "hkkf" && stops.hkkf) {
58
+ _etas = _etas.concat(await hkkf({ route, bound: bound.hkkf, seq }));
69
59
  }
70
60
  }
71
61
  return _etas.sort((a, b) => {
@@ -82,15 +72,15 @@ export async function fetchEtas({ route, stops, bound, dest, seq, serviceType, c
82
72
  }
83
73
  }
84
74
  export async function fetchEtaDb() {
85
- return fetch("https://data.hkbus.app/routeFareList.min.json")
75
+ return fetch("https://data.hkbus.app/routeFareList.min.json", { cache: "no-store" })
86
76
  .then((r) => r.json())
87
- .catch(() => fetch("https://hkbus.github.io/hk-bus-crawling/routeFareList.min.json")
77
+ .catch(() => fetch("https://hkbus.github.io/hk-bus-crawling/routeFareList.min.json", { cache: "no-store" })
88
78
  .then(r => r.json()));
89
79
  }
90
80
  export async function fetchEtaDbMd5() {
91
- return fetch("https://data.hkbus.app/routeFareList.md5")
81
+ return fetch("https://data.hkbus.app/routeFareList.md5", { cache: "no-store" })
92
82
  .then((r) => r.text())
93
- .catch(() => fetch("https://hkbus.github.io/hk-bus-crawling/routeFareList.md5")
83
+ .catch(() => fetch("https://hkbus.github.io/hk-bus-crawling/routeFareList.md5", { cache: "no-store" })
94
84
  .then(r => r.text()));
95
85
  }
96
86
  //# 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":"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"}
@@ -0,0 +1,7 @@
1
+ import type { Eta } from "./type";
2
+ interface fetchEtasProps {
3
+ route: string;
4
+ seq: number;
5
+ }
6
+ export default function fetchEtas({ route, seq }: fetchEtasProps): Promise<Eta[]>;
7
+ export {};
@@ -0,0 +1,35 @@
1
+ import { isSafari } from "./utils";
2
+ export default function fetchEtas({ route, seq }) {
3
+ if (seq === 1)
4
+ return Promise.resolve([]);
5
+ return fetch(`https://www.sunferry.com.hk/eta/?route=${route}`, {
6
+ cache: isSafari ? "default" : "no-store",
7
+ })
8
+ .then((response) => response.json())
9
+ .then(({ data }) => {
10
+ if (!data)
11
+ return [];
12
+ return data
13
+ .map(({ depart_time, rmk_en, rmk_tc, route_tc, route_en }) => {
14
+ const date = new Date();
15
+ let guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`;
16
+ if ((new Date(guess)) < date) {
17
+ date.setDate(date.getDate() + 1);
18
+ guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`;
19
+ }
20
+ return {
21
+ eta: guess,
22
+ remark: {
23
+ zh: rmk_tc,
24
+ en: rmk_en,
25
+ },
26
+ dest: {
27
+ zh: route_tc.split(" - ")[1],
28
+ en: route_en.split(" - ")[1],
29
+ },
30
+ co: "sunferry",
31
+ };
32
+ });
33
+ });
34
+ }
35
+ //# sourceMappingURL=sunferry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sunferry.js","sourceRoot":"","sources":["../src/sunferry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAOnC,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAChC,KAAK,EAAE,GAAG,EACK;IACf,IAAK,GAAG,KAAK,CAAC;QAAG,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC3C,OAAO,KAAK,CACV,0CAA0C,KAAK,EAAE,EACjD;QACE,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;KACzC,CACF;SACE,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;SACnC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;QACjB,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QAErB,OAAO,IAAI;aACR,GAAG,CAAC,CAAC,EAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAM,EAAE,EAAE;YAC9D,MAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;YACxB,IAAI,KAAK,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,WAAW,YAAY,CAAA;YACjG,IAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,EAAG;gBAC9B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAA;gBAChC,KAAK,GAAG,GAAG,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,WAAW,YAAY,CAAA;aAC9F;YACD,OAAO;gBACL,GAAG,EAAE,KAAK;gBACV,MAAM,EAAE;oBACN,EAAE,EAAE,MAAM;oBACV,EAAE,EAAE,MAAM;iBACX;gBACD,IAAI,EAAE;oBACJ,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBAC5B,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;iBAC7B;gBACD,EAAE,EAAE,UAAU;aACf,CAAA;QACH,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC"}
package/esm/type.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export type Company = "kmb" | "nlb" | "ctb" | "lrtfeeder" | "gmb" | "lightRail" | "mtr" | "gmbHki" | "gmbKln" | "gmbNt";
1
+ export type Company = "kmb" | "nlb" | "ctb" | "lrtfeeder" | "gmb" | "lightRail" | "mtr" | "sunferry" | "hkkf" | "fortuneferry";
2
2
  export type Terminal = {
3
3
  en: string;
4
4
  zh: string;
@@ -69,4 +69,6 @@ export type Eta = {
69
69
  en: string;
70
70
  };
71
71
  co: Company;
72
+ lat?: number;
73
+ lng: number;
72
74
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hk-bus-eta",
3
- "version": "3.2.0",
3
+ "version": "3.3.0",
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",
@@ -0,0 +1,75 @@
1
+ import type { Eta, RouteListEntry, StopList } from "./type";
2
+ import { isSafari } from "./utils";
3
+
4
+ interface fetchEtasProps {
5
+ route: string;
6
+ stops: {
7
+ fortuneferry: string[];
8
+ }
9
+ seq: number;
10
+ stopList: StopList;
11
+ }
12
+
13
+ const getCode = (zhName: string) => {
14
+ if ( zhName.includes("中環") ) {
15
+ return "CL"
16
+ } else if ( zhName.includes("紅磡") ) {
17
+ return "HH"
18
+ } else if ( zhName.includes("北角") ) {
19
+ return "NP"
20
+ } else if ( zhName.includes("觀塘") ) {
21
+ return "KT"
22
+ } else if ( zhName.includes("啟德") ) {
23
+ return "KT"
24
+ } else if ( zhName.includes("屯門") ) {
25
+ return "TM"
26
+ } else if ( zhName.includes("東涌") ) {
27
+ return "TC"
28
+ } else if ( zhName.includes("沙螺灣") ) {
29
+ return "SLW"
30
+ } else if ( zhName.includes("大澳") ) {
31
+ return "TO"
32
+ }
33
+ return "CL";
34
+ }
35
+
36
+ export default function fetchEtas({
37
+ route, stops: { fortuneferry: stops }, seq, stopList
38
+ }: fetchEtasProps): Promise<Eta[]> {
39
+ if ( stops.length === seq - 1 ) return Promise.resolve([]);
40
+ const u = getCode(stopList[stops[seq]].name.zh)
41
+ const v = getCode(stopList[stops[seq+1]].name.zh)
42
+
43
+ return fetch(
44
+ `https://www.hongkongwatertaxi.com.hk/eta/?route=${u}${v}`,
45
+ {
46
+ cache: isSafari ? "default" : "no-store",
47
+ },
48
+ )
49
+ .then((response) => response.json())
50
+ .then(({ data }) => {
51
+ if (!data) return [];
52
+
53
+ return data
54
+ .map(({ depart_time, rmk_tc, rmk_en }: any) => {
55
+ const date = new Date();
56
+ let guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`
57
+ if ( (new Date(guess)) < date ) {
58
+ date.setDate(date.getDate() + 1)
59
+ guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`
60
+ }
61
+ return {
62
+ eta: guess,
63
+ remark: {
64
+ zh: rmk_tc,
65
+ en: rmk_en,
66
+ },
67
+ dest: {
68
+ zh: "",
69
+ en: "",
70
+ },
71
+ co: "fortuneferry",
72
+ }
73
+ });
74
+ });
75
+ }
package/src/gmb.ts CHANGED
@@ -35,8 +35,8 @@ export default function fetchEtas({
35
35
  ...eta.map((data: any) => ({
36
36
  eta: data.timestamp,
37
37
  remark: {
38
- zh: data.remarks_tc,
39
- en: data.remarks_en,
38
+ zh: data.remarks_tc ?? "",
39
+ en: data.remarks_en ?? "",
40
40
  },
41
41
  dest: {
42
42
  zh: "",
package/src/hkkf.ts ADDED
@@ -0,0 +1,40 @@
1
+ import type { Eta, RouteListEntry } from "./type";
2
+ import { isSafari } from "./utils";
3
+
4
+ interface fetchEtasProps {
5
+ route: string;
6
+ bound: RouteListEntry["bound"]["hkkf"];
7
+ seq: number;
8
+ }
9
+
10
+ export default function fetchEtas({
11
+ route, bound, seq
12
+ }: fetchEtasProps): Promise<Eta[]> {
13
+ if ( seq === 0 ) return Promise.resolve([])
14
+ return fetch(
15
+ `https://www.hkkfeta.com/opendata/eta/${route.slice(2)}/${bound === "I" ? "inbound" : "outbound"}`,
16
+ {
17
+ cache: isSafari ? "default" : "no-store",
18
+ },
19
+ )
20
+ .then((response) => response.json())
21
+ .then(({ data }) => {
22
+ if (!data) return [];
23
+
24
+ return data
25
+ .map(({ETA}: any) => {
26
+ return {
27
+ eta: ETA,
28
+ remark: {
29
+ zh: "",
30
+ en: "",
31
+ },
32
+ dest: {
33
+ zh: "",
34
+ en: "",
35
+ },
36
+ co: "hkkf",
37
+ }
38
+ });
39
+ });
40
+ }
package/src/index.ts CHANGED
@@ -5,6 +5,9 @@ import lrtfeeder from "./lrtfeeder";
5
5
  import gmb from "./gmb";
6
6
  import lightrail from "./lightRail";
7
7
  import mtr from "./mtr";
8
+ import sunferry from "./sunferry"
9
+ import fortuneferry from "./fortuneferry";
10
+ import hkkf from "./hkkf";
8
11
  import { RouteListEntry, EtaDb, Eta, StopList } from "./type";
9
12
 
10
13
  interface fetchEtasProps extends RouteListEntry {
@@ -68,33 +71,16 @@ export async function fetchEtas({
68
71
  bound: bound.mtr,
69
72
  }),
70
73
  );
71
- } else if (company_id === "gmbHki" && stops.gmbHki) {
74
+ } else if (company_id === "fortuneferry" && stops.fortuneferry) {
72
75
  _etas = _etas.concat(
73
- await gmb({
74
- stopId: stops.gmbHki[seq],
75
- gtfsId,
76
- seq,
77
- bound: bound.gmbHki,
78
- }),
79
- );
80
- } else if (company_id === "gmbKln" && stops.gmbKln) {
81
- _etas = _etas.concat(
82
- await gmb({
83
- stopId: stops.gmbKln[seq],
84
- gtfsId,
85
- seq,
86
- bound: bound.gmbKln,
87
- }),
88
- );
89
- } else if (company_id === "gmbNt" && stops.gmbNt) {
90
- _etas = _etas.concat(
91
- await gmb({
92
- stopId: stops.gmbNt[seq],
93
- gtfsId,
94
- seq,
95
- bound: bound.gmbNt,
96
- }),
97
- );
76
+ await fortuneferry({
77
+ route, stops, seq, stopList
78
+ })
79
+ )
80
+ } else if (company_id === "sunferry" && stops.sunferry) {
81
+ _etas = _etas.concat(await sunferry({route, seq}))
82
+ } else if (company_id === "hkkf" && stops.hkkf) {
83
+ _etas = _etas.concat(await hkkf({route, bound: bound.hkkf, seq}))
98
84
  }
99
85
  }
100
86
 
@@ -110,17 +96,17 @@ export async function fetchEtas({
110
96
  }
111
97
 
112
98
  export async function fetchEtaDb(): Promise<EtaDb> {
113
- return fetch("https://data.hkbus.app/routeFareList.min.json")
99
+ return fetch("https://data.hkbus.app/routeFareList.min.json", {cache: "no-store"})
114
100
  .then((r) => r.json())
115
- .catch(() => fetch("https://hkbus.github.io/hk-bus-crawling/routeFareList.min.json")
101
+ .catch(() => fetch("https://hkbus.github.io/hk-bus-crawling/routeFareList.min.json", {cache: "no-store"})
116
102
  .then(r => r.json())
117
103
  );
118
104
  }
119
105
 
120
106
  export async function fetchEtaDbMd5(): Promise<string> {
121
- return fetch("https://data.hkbus.app/routeFareList.md5")
107
+ return fetch("https://data.hkbus.app/routeFareList.md5", {cache: "no-store"})
122
108
  .then((r) => r.text())
123
- .catch(() => fetch("https://hkbus.github.io/hk-bus-crawling/routeFareList.md5")
109
+ .catch(() => fetch("https://hkbus.github.io/hk-bus-crawling/routeFareList.md5", {cache: "no-store"})
124
110
  .then(r => r.text())
125
111
  );
126
112
  }
@@ -0,0 +1,45 @@
1
+ import type { Eta } from "./type";
2
+ import { isSafari } from "./utils";
3
+
4
+ interface fetchEtasProps {
5
+ route: string;
6
+ seq: number;
7
+ }
8
+
9
+ export default function fetchEtas({
10
+ route, seq
11
+ }: fetchEtasProps): Promise<Eta[]> {
12
+ if ( seq === 1 ) return Promise.resolve([])
13
+ return fetch(
14
+ `https://www.sunferry.com.hk/eta/?route=${route}`,
15
+ {
16
+ cache: isSafari ? "default" : "no-store",
17
+ },
18
+ )
19
+ .then((response) => response.json())
20
+ .then(({ data }) => {
21
+ if (!data) return [];
22
+
23
+ return data
24
+ .map(({depart_time, rmk_en, rmk_tc, route_tc, route_en}: any) => {
25
+ const date = new Date();
26
+ let guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`
27
+ if ( (new Date(guess)) < date ) {
28
+ date.setDate(date.getDate() + 1)
29
+ guess = `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}T${depart_time}:00+08:00}`
30
+ }
31
+ return {
32
+ eta: guess,
33
+ remark: {
34
+ zh: rmk_tc,
35
+ en: rmk_en,
36
+ },
37
+ dest: {
38
+ zh: route_tc.split(" - ")[1],
39
+ en: route_en.split(" - ")[1],
40
+ },
41
+ co: "sunferry",
42
+ }
43
+ });
44
+ });
45
+ }
package/src/type.ts CHANGED
@@ -6,9 +6,9 @@ export type Company =
6
6
  | "gmb"
7
7
  | "lightRail"
8
8
  | "mtr"
9
- | "gmbHki"
10
- | "gmbKln"
11
- | "gmbNt";
9
+ | "sunferry"
10
+ | "hkkf"
11
+ | "fortuneferry";
12
12
 
13
13
  export type Terminal = {
14
14
  en: string;
@@ -85,4 +85,6 @@ export type Eta = {
85
85
  en: string;
86
86
  };
87
87
  co: Company;
88
+ lat?: number;
89
+ lng: number;
88
90
  };