@mxpicture/tesla-superchargers-api 0.1.35 → 0.1.36
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/api/ChargersApi.d.ts +3 -3
- package/dist/api/ChargersApi.d.ts.map +1 -1
- package/dist/api/ChargersApi.js +9 -2
- package/dist/api/ChargersApi.js.map +1 -1
- package/dist/api/ChargingProcessesApi.d.ts +7 -2
- package/dist/api/ChargingProcessesApi.d.ts.map +1 -1
- package/dist/api/ChargingProcessesApi.js +12 -9
- package/dist/api/ChargingProcessesApi.js.map +1 -1
- package/dist/api/FxRatesApi.d.ts +22 -0
- package/dist/api/FxRatesApi.d.ts.map +1 -1
- package/dist/api/FxRatesApi.js +41 -66
- package/dist/api/FxRatesApi.js.map +1 -1
- package/dist/common/fx.common.d.ts +8 -5
- package/dist/common/fx.common.d.ts.map +1 -1
- package/dist/common/fx.common.js +17 -15
- package/dist/common/fx.common.js.map +1 -1
- package/dist/types/chargers.types.d.ts +5 -1
- package/dist/types/chargers.types.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { type PicChargers, type PicChargersId, type
|
|
1
|
+
import { type PicChargers, type PicChargersId, type PicSlugsId } from "@mxpicture/tesla-superchargers-generated/public";
|
|
2
2
|
import { type TeslaClientCharger } from "@mxpicture/tesla-superchargers-mate/client";
|
|
3
3
|
import type { CoordinateAny } from "@mxpicture/tesla-superchargers-mate/common";
|
|
4
|
-
import type { ChargerFavourite } from "../types/chargers.types.js";
|
|
4
|
+
import type { ChargerFavourite, ChargerFetchPricesResult } from "../types/chargers.types.js";
|
|
5
5
|
import { IApi } from "./IApi.js";
|
|
6
6
|
import type { SyncSummary } from "../types/sync.types.js";
|
|
7
7
|
export declare class ChargersApi extends IApi {
|
|
@@ -47,7 +47,7 @@ export declare class ChargersApi extends IApi {
|
|
|
47
47
|
* a fetch-on-demand stored the charger's first group), that earliest group
|
|
48
48
|
* is used as the best available estimate.
|
|
49
49
|
*/
|
|
50
|
-
fetchPrices(item: CoordinateAny, at: Date, radiusKm?: number): Promise<
|
|
50
|
+
fetchPrices(item: CoordinateAny, at: Date, radiusKm?: number): Promise<ChargerFetchPricesResult>;
|
|
51
51
|
initialLoadFile(path: string): Promise<void>;
|
|
52
52
|
fetchAndStore(slug: string, locale: string, slugsId?: PicSlugsId): Promise<PicChargers>;
|
|
53
53
|
/** Snapshot sync from a full-feed file dump. Does not touch pricebooks. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChargersApi.d.ts","sourceRoot":"","sources":["../../src/api/ChargersApi.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,
|
|
1
|
+
{"version":3,"file":"ChargersApi.d.ts","sourceRoot":"","sources":["../../src/api/ChargersApi.ts"],"names":[],"mappings":"AAQA,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,aAAa,EAClB,KAAK,UAAU,EAChB,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAGL,KAAK,kBAAkB,EACxB,MAAM,4CAA4C,CAAC;AAOpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,KAAK,EAEV,gBAAgB,EAChB,wBAAwB,EACzB,MAAM,4BAA4B,CAAC;AAMpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAQ1D,qBAAa,WAAY,SAAQ,IAAI;;IACtB,GAAG,CACd,EAAE,EACE,MAAM,GACN;QACE,KAAK,EAAE,aAAa,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GACJ,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAOjB,KAAK,CAAC,MAAM,CAAC,EAAE;QAC1B,KAAK,CAAC,EAAE,aAAa,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAWb,YAAY,CACvB,EAAE,EAAE,aAAa,GAChB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAetB,eAAe,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAe9C,eAAe,CAC1B,EAAE,EAAE,aAAa,EACjB,SAAS,EAAE,OAAO,GACjB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IActB,WAAW,CACtB,IAAI,EAAE,aAAa,EACnB,MAAM,GAAE,MAAgB,EACxB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAK9B;;;;;;;;;;;OAWG;IACU,KAAK,CAChB,IAAI,EAAE,aAAa,EACnB,MAAM,GAAE,MAAgB,EACxB,QAAQ,CAAC,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,MAAM,EACd,UAAU,GAAE,MAA4B,GACvC,OAAO,CAAC,WAAW,EAAE,CAAC;IAmFzB;;;;;;;;;;;;;;;OAeG;IACU,WAAW,CACtB,IAAI,EAAE,aAAa,EACnB,EAAE,EAAE,IAAI,EACR,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,wBAAwB,CAAC;IAgCvB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU5C,aAAa,CACxB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,UAAU,GACnB,OAAO,CAAC,WAAW,CAAC;IAsEvB,2EAA2E;IAC9D,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;cAKzC,YAAY,CAC1B,IAAI,EAAE,kBAAkB,EAAE,GACzB,OAAO,CAAC,WAAW,CAAC;CAKxB;AAGD,eAAO,MAAM,WAAW,mBAAqC,CAAC"}
|
package/dist/api/ChargersApi.js
CHANGED
|
@@ -162,6 +162,10 @@ export class ChargersApi extends IApi {
|
|
|
162
162
|
* is used as the best available estimate.
|
|
163
163
|
*/
|
|
164
164
|
async fetchPrices(item, at, radiusKm) {
|
|
165
|
+
const result = {
|
|
166
|
+
charger: null,
|
|
167
|
+
rows: [],
|
|
168
|
+
};
|
|
165
169
|
const stored = (radiusKm
|
|
166
170
|
? await picChargersStore().getByRadius(item, radiusKm)
|
|
167
171
|
: await picChargersStore().getByCoordinate(item)) ?? null;
|
|
@@ -169,13 +173,16 @@ export class ChargersApi extends IApi {
|
|
|
169
173
|
if (!stored || (at > stored.fetched_at && !isFresh(stored)))
|
|
170
174
|
charger = (await this.fetchSingle(item)) ?? stored;
|
|
171
175
|
if (!charger)
|
|
172
|
-
return
|
|
176
|
+
return result;
|
|
173
177
|
const pricebooksStore = picPricebooksStore();
|
|
174
178
|
const group = await pricebooksStore.getGroupAt(charger.id, at);
|
|
175
179
|
const rows = group.length > 0
|
|
176
180
|
? group
|
|
177
181
|
: await pricebooksStore.getEarliestGroup(charger.id);
|
|
178
|
-
return
|
|
182
|
+
return {
|
|
183
|
+
charger,
|
|
184
|
+
rows: rows.filter((row) => pricebookCoversInstant(row, at, charger.time_zone)),
|
|
185
|
+
};
|
|
179
186
|
}
|
|
180
187
|
async initialLoadFile(path) {
|
|
181
188
|
const json = json5.parse(await readFile(path, { encoding: "utf8" }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChargersApi.js","sourceRoot":"","sources":["../../src/api/ChargersApi.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,oBAAoB,EACpB,sBAAsB,EACtB,eAAe,GAChB,MAAM,+CAA+C,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,
|
|
1
|
+
{"version":3,"file":"ChargersApi.js","sourceRoot":"","sources":["../../src/api/ChargersApi.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,oBAAoB,EACpB,sBAAsB,EACtB,eAAe,GAChB,MAAM,+CAA+C,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAIN,MAAM,iDAAiD,CAAC;AACzD,OAAO,EACL,WAAW,EACX,yBAAyB,GAE1B,MAAM,4CAA4C,CAAC;AACpD,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,WAAW,GACZ,MAAM,2CAA2C,CAAC;AAOnD,OAAO,EACL,8BAA8B,EAC9B,OAAO,EACP,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EACL,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,MAAM,OAAO,WAAY,SAAQ,IAAI;IAC5B,KAAK,CAAC,GAAG,CACd,EAKK;QAEL,IAAI,OAAO,EAAE,IAAI,QAAQ;YAAE,OAAO,MAAM,gBAAgB,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnE,IAAI,EAAE,CAAC,QAAQ;YACb,OAAO,MAAM,gBAAgB,EAAE,CAAC,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;QACrE,OAAO,MAAM,gBAAgB,EAAE,CAAC,eAAe,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;IAC5D,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,MAGlB;QACC,IAAI,MAAM,EAAE,KAAK,IAAI,MAAM,EAAE,QAAQ;YACnC,OAAO,MAAM,gBAAgB,EAAE,CAAC,aAAa,CAC3C,MAAM,EAAE,KAAK,EACb,MAAM,EAAE,QAAQ,CACjB,CAAC;QACJ,IAAI,MAAM,EAAE,KAAK;YACf,OAAO,MAAM,gBAAgB,EAAE,CAAC,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACnE,OAAO,EAAE,CAAC;IACZ,CAAC;IAEM,KAAK,CAAC,YAAY,CACvB,EAAiB;QAEjB,MAAM,OAAO,GAAG,MAAM,gBAAgB,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACjD,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC1B,OAAO;YACL,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;YAC9C,QAAQ,EAAE,OAAO,CAAC,iBAAiB;YACnC,SAAS,EAAE,OAAO,CAAC,kBAAkB;YACrC,aAAa,EAAE,OAAO,CAAC,aAAa;SACrC,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,eAAe;QAC1B,OAAO,CAAC,MAAM,gBAAgB,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAC3C,CAAC,OAAO,EAAoB,EAAE,CAAC,CAAC;YAC9B,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB;YAC1C,kBAAkB,EAAE,OAAO,CAAC,kBAAkB;YAC9C,QAAQ,EAAE,OAAO,CAAC,iBAAiB;YACnC,SAAS,EAAE,OAAO,CAAC,kBAAkB;YACrC,aAAa,EAAE,OAAO,CAAC,aAAa;SACrC,CAAC,CACH,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,eAAe,CAC1B,EAAiB,EACjB,SAAkB;QAElB,MAAM,KAAK,GAAG,gBAAgB,EAAE,CAAC;QACjC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAC1D,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC;IAED,4EAA4E;IAC5E,6EAA6E;IAC7E,2EAA2E;IAC3E,2EAA2E;IAC3E,2EAA2E;IAC3E,cAAc;IACL,cAAc,GAAG,YAAY,EAAe,CAAC;IAE/C,KAAK,CAAC,WAAW,CACtB,IAAmB,EACnB,SAAiB,OAAO,EACxB,QAAiB;QAEjB,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC5D,OAAO,KAAK,IAAI,IAAI,CAAC;IACvB,CAAC;IAED;;;;;;;;;;;OAWG;IACI,KAAK,CAAC,KAAK,CAChB,IAAmB,EACnB,SAAiB,OAAO,EACxB,QAAiB,EACjB,KAAc,EACd,aAAqB,mBAAmB;QAExC,MAAM,QAAQ,GAAkB,EAAE,CAAC;QAEnC,MAAM,MAAM,GAAG,QAAQ;YACrB,CAAC,CAAC,MAAM,aAAa,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC;YACrD,CAAC,CAAC,MAAM,aAAa,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAElD,MAAM,UAAU,GAAuB,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC5D,IAAI,EAAE,KAAK,CAAC,iBAAiB;YAC7B,OAAO,EAAE,KAAK,CAAC,EAAE;YACjB,YAAY,EAAE,KAAK,CAAC,aAAa;SAClC,CAAC,CAAC,CAAC;QACJ,qEAAqE;QACrE,iDAAiD;QACjD,UAAU,CAAC,IAAI,CACb,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,MAAM,CAAC,CAAC,CAAC,YAAY,IAAI,8BAA8B,CAAC;YACxD,MAAM,CAAC,CAAC,CAAC,YAAY,IAAI,8BAA8B,CAAC,CAC3D,CAAC;QAEF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;QACzC,MAAM,UAAU,GAAG,aAAa,EAAE,CAAC;QAEnC,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC;gBAAE,SAAS;YACvC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAEzB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAChE,IAAI,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC9B,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACtB,IAAI,KAAK,IAAI,QAAQ,CAAC,MAAM,IAAI,KAAK;oBAAE,MAAM;gBAC7C,SAAS;YACX,CAAC;YAED,IAAI,OAAO,IAAI,UAAU,EAAE,CAAC;gBAC1B,IAAI,MAAM,EAAE,CAAC;oBACX,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,sBAAsB;oBAC7C,IAAI,KAAK,IAAI,QAAQ,CAAC,MAAM,IAAI,KAAK;wBAAE,MAAM;gBAC/C,CAAC;gBACD,SAAS;YACX,CAAC;YAED,OAAO,EAAE,CAAC;YACV,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CACtC,SAAS,CAAC,IAAI,EACd,MAAM,EACN,SAAS,CAAC,OAAO,CAClB,CAAC;gBAEF,IAAI,OAAO,CAAC,aAAa,GAAG,CAAC;oBAC3B,MAAM,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBAE9C,MAAM,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAEhD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACvB,IAAI,KAAK,IAAI,QAAQ,CAAC,MAAM,IAAI,KAAK;oBAAE,MAAM;gBAC7C,SAAS;YACX,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CACV,2BAA2B,SAAS,CAAC,IAAI,YAAY;oBACnD,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAC3D,CAAC;gBACF,gEAAgE;gBAChE,oDAAoD;gBACpD,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,CAAC,aAAa,GAAG,MAAM,aAAa,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;oBACtE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,sBAAsB;oBAC7C,IAAI,KAAK,IAAI,QAAQ,CAAC,MAAM,IAAI,KAAK;wBAAE,MAAM;oBAC7C,SAAS;gBACX,CAAC;gBAED,SAAS,CAAC,YAAY,GAAG,MAAM,UAAU,CAAC,eAAe,CACvD,SAAS,CAAC,OAAO,CAClB,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;;;;;;;;;;;;;;OAeG;IACI,KAAK,CAAC,WAAW,CACtB,IAAmB,EACnB,EAAQ,EACR,QAAiB;QAEjB,MAAM,MAAM,GAA6B;YACvC,OAAO,EAAE,IAAI;YACb,IAAI,EAAE,EAAE;SACT,CAAC;QAEF,MAAM,MAAM,GACV,CAAC,QAAQ;YACP,CAAC,CAAC,MAAM,gBAAgB,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC;YACtD,CAAC,CAAC,MAAM,gBAAgB,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC;QAE9D,IAAI,OAAO,GAAuB,MAAM,CAAC;QACzC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACzD,OAAO,GAAG,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,MAAM,CAAC;QACrD,IAAI,CAAC,OAAO;YAAE,OAAO,MAAM,CAAC;QAE5B,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAC;QAE7C,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QAC/D,MAAM,IAAI,GACR,KAAK,CAAC,MAAM,GAAG,CAAC;YACd,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,MAAM,eAAe,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAEzD,OAAO;YACL,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CACxB,sBAAsB,CAAC,GAAG,EAAE,EAAE,EAAE,OAAO,CAAC,SAAS,CAAC,CACnD;SACF,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,IAAY;QACvC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QACrE,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;QAC1B,MAAM,IAAI,CAAC,cAAc,CACvB,gBAAgB,EAAE,EAClB,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,EACrC,CAAC,OAAO,EAAE,EAAE,CAAC,oBAAoB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CACrD,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,aAAa,CACxB,IAAY,EACZ,MAAc,EACd,OAAoB;QAEpB,OAAO,IAAI,CAAC,cAAc,CAAC,GAAG,IAAI,IAAI,MAAM,EAAE,EAAE,GAAG,EAAE,CACnD,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAC7C,CAAC;IACJ,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,gBAAgB,CACpB,IAAY,EACZ,MAAc,EACd,OAAoB;QAEpB,MAAM,SAAS,GAAG,MAAM,WAAW,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;QACjE,IAAI,CAAC,SAAS,CAAC,OAAO;YACpB,MAAM,IAAI,KAAK,CACb,2BAA2B,IAAI,uBAAuB;gBACpD,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACjD,KAAK,SAAS,CAAC,QAAQ,YAAY,CACtC,CAAC;QACJ,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;QAClC,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,oBAAoB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC9D,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;QACzC,MAAM,eAAe,GAAG,kBAAkB,EAAE,CAAC;QAE7C,OAAO,MAAM,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;YACzD,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,SAAS,CACvC,IAAI;YACJ,qEAAqE;YACrE,8CAA8C;YAC9C,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EACrE,EAAE,CACH,CAAC;YACF,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YAClE,MAAM,IAAI,GAAG,eAAe,CAC1B,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAC5C,sBAAsB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAChE,CACF,CAAC;YACF,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,+DAA+D;gBAC/D,mDAAmD;gBACnD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;oBACpB,OAAO,CAAC,IAAI,CACV,WAAW,GAAG,CAAC,EAAE,WAAW,IAAI,8DAA8D,CAC/F,CAAC;YACN,CAAC;iBAAM,IAAI,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;gBAC7C,oEAAoE;gBACpE,MAAM,eAAe,CAAC,oBAAoB,CACxC,GAAG,CAAC,EAAE,EACN,OAAO,CAAC,CAAC,CAAC,CAAC,eAAe,EAC1B,IAAI,CAAC,eAAe,EACpB,EAAE,CACH,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC7C,CAAC;YACD,OAAO,GAAG,CAAC;QACb,CAAC,CAAC,CAAC;IACL,CAAC;IAED,2EAA2E;IACpE,KAAK,CAAC,QAAQ,CAAC,IAAY;QAChC,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QACrE,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,yBAAyB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,CAAC;IAES,KAAK,CAAC,YAAY,CAC1B,IAA0B;QAE1B,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,YAAY,EAAE,CAAC;QAChC,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;CACF;AAED,IAAI,IAAI,GAAuB,IAAI,CAAC;AACpC,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,CAAC,IAAI,KAAK,IAAI,WAAW,EAAE,CAAC,CAAC"}
|
|
@@ -1,11 +1,16 @@
|
|
|
1
|
-
import { type ChargingProcesses, type ChargingProcessesId } from "@mxpicture/tesla-superchargers-generated/public";
|
|
1
|
+
import { type ChargingProcesses, type ChargingProcessesId, type PicChargersId, type PicFxRatesId } from "@mxpicture/tesla-superchargers-generated/public";
|
|
2
2
|
import type { UnpricedChargingProcess } from "@mxpicture/tesla-superchargers-mate/types";
|
|
3
3
|
import type { PricingSummary } from "../types/charging.types.js";
|
|
4
4
|
import { IApi } from "./IApi.js";
|
|
5
5
|
export declare class ChargingProcessesApi extends IApi {
|
|
6
6
|
runPricing(): Promise<PricingSummary>;
|
|
7
7
|
getUnpricedCharges(): Promise<UnpricedChargingProcess[]>;
|
|
8
|
-
updatePrice(
|
|
8
|
+
updatePrice(p: {
|
|
9
|
+
charging_processes_id: ChargingProcessesId;
|
|
10
|
+
cost?: number | null;
|
|
11
|
+
chargers_id?: PicChargersId | null;
|
|
12
|
+
fx_rates_id?: PicFxRatesId | null;
|
|
13
|
+
}): Promise<ChargingProcesses | null>;
|
|
9
14
|
}
|
|
10
15
|
export declare const chargingProcessesApi: () => ChargingProcessesApi;
|
|
11
16
|
//# sourceMappingURL=ChargingProcessesApi.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChargingProcessesApi.d.ts","sourceRoot":"","sources":["../../src/api/ChargingProcessesApi.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,
|
|
1
|
+
{"version":3,"file":"ChargingProcessesApi.d.ts","sourceRoot":"","sources":["../../src/api/ChargingProcessesApi.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,YAAY,EAClB,MAAM,iDAAiD,CAAC;AAEzD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AAEzF,OAAO,KAAK,EACV,cAAc,EAEf,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AASjC,qBAAa,oBAAqB,SAAQ,IAAI;IAC/B,UAAU,IAAI,OAAO,CAAC,cAAc,CAAC;IAsErC,kBAAkB,IAAI,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAIxD,WAAW,CAAC,CAAC,EAAE;QAC1B,qBAAqB,EAAE,mBAAmB,CAAC;QAC3C,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACrB,WAAW,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;QACnC,WAAW,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;KACnC,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;CAGtC;AAGD,eAAO,MAAM,oBAAoB,4BAA8C,CAAC"}
|
|
@@ -5,7 +5,7 @@ import { IApi } from "./IApi.js";
|
|
|
5
5
|
import { chargingRate } from "../common/pricebooks.common.js";
|
|
6
6
|
import { FAILURE_DEPRIORITIZE_THRESHOLD, PRICING_FETCH_CONCURRENCY, } from "../common/chargers.common.js";
|
|
7
7
|
import { mapWithConcurrency } from "../common/concurrency.common.js";
|
|
8
|
-
import {
|
|
8
|
+
import { fxToEur } from "../common/fx.common.js";
|
|
9
9
|
export class ChargingProcessesApi extends IApi {
|
|
10
10
|
async runPricing() {
|
|
11
11
|
const store = chargingProcessesStore();
|
|
@@ -18,7 +18,7 @@ export class ChargingProcessesApi extends IApi {
|
|
|
18
18
|
return item;
|
|
19
19
|
}
|
|
20
20
|
const pricebooks = await chargersApi().fetchPrices({ latitude: charge.latitude, longitude: charge.longitude }, charge.start_date);
|
|
21
|
-
const rate = chargingRate(pricebooks);
|
|
21
|
+
const rate = chargingRate(pricebooks.rows);
|
|
22
22
|
item.rate = rate;
|
|
23
23
|
if (!rate) {
|
|
24
24
|
item.topic = "noRate";
|
|
@@ -37,17 +37,20 @@ export class ChargingProcessesApi extends IApi {
|
|
|
37
37
|
// an unresolvable rate leaves the charge unpriced rather than storing
|
|
38
38
|
// a wrong-currency number.
|
|
39
39
|
const local = rate.rate * Number(energy);
|
|
40
|
-
const fx = rate.currencyCode.
|
|
41
|
-
? 1
|
|
42
|
-
: await fxToEur(rate.currencyCode, charge.start_date);
|
|
40
|
+
const fx = await fxToEur(rate.currencyCode, charge.start_date);
|
|
43
41
|
if (fx === null) {
|
|
44
42
|
item.topic = "noFxRate";
|
|
45
43
|
item.failure_count = await store.incrementFailed(item.charge.id);
|
|
46
44
|
return item;
|
|
47
45
|
}
|
|
48
|
-
const cost = Number((local * fx).toFixed(2));
|
|
46
|
+
const cost = Number((local * fx.rate_to_eur_num).toFixed(2));
|
|
49
47
|
item.cost = cost;
|
|
50
|
-
await chargingProcessesApi().updatePrice(
|
|
48
|
+
await chargingProcessesApi().updatePrice({
|
|
49
|
+
charging_processes_id: charge.id,
|
|
50
|
+
cost,
|
|
51
|
+
chargers_id: pricebooks.charger?.id ?? null,
|
|
52
|
+
fx_rates_id: fx.id,
|
|
53
|
+
});
|
|
51
54
|
item.topic = "chargeUpdated";
|
|
52
55
|
item.failure_count = 0;
|
|
53
56
|
await store.resetFailed(item.charge.id);
|
|
@@ -58,8 +61,8 @@ export class ChargingProcessesApi extends IApi {
|
|
|
58
61
|
async getUnpricedCharges() {
|
|
59
62
|
return await chargingProcessesStore().getUnpricedCharges();
|
|
60
63
|
}
|
|
61
|
-
async updatePrice(
|
|
62
|
-
return await chargingProcessesStore().updatePrice(
|
|
64
|
+
async updatePrice(p) {
|
|
65
|
+
return await chargingProcessesStore().updatePrice({ ...p });
|
|
63
66
|
}
|
|
64
67
|
}
|
|
65
68
|
let _api = null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChargingProcessesApi.js","sourceRoot":"","sources":["../../src/api/ChargingProcessesApi.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"ChargingProcessesApi.js","sourceRoot":"","sources":["../../src/api/ChargingProcessesApi.ts"],"names":[],"mappings":"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"}
|
package/dist/api/FxRatesApi.d.ts
CHANGED
|
@@ -2,7 +2,29 @@ import { IApi } from "./IApi.js";
|
|
|
2
2
|
import type { FxSyncSummary } from "../types/fx.types.js";
|
|
3
3
|
import type { FxRateRow } from "@mxpicture/tesla-superchargers-mate/types";
|
|
4
4
|
export declare class FxRatesApi extends IApi {
|
|
5
|
+
/**
|
|
6
|
+
* Every quote currency the feed publishes for one date, as storable rows.
|
|
7
|
+
* `quote_currency` is uppercase throughout the schema, so the feed's
|
|
8
|
+
* lowercase keys are normalized here — a lowercase row would never be found
|
|
9
|
+
* by {@link fxToEur}, which looks up the uppercased code.
|
|
10
|
+
*/
|
|
5
11
|
syncDate(rateDate: string): Promise<FxRateRow[]>;
|
|
12
|
+
/**
|
|
13
|
+
* Fill the window's missing rates and prune what fell out of it. A date the
|
|
14
|
+
* feed has not published yet is reported in `missingDates` and retried by
|
|
15
|
+
* the next run, never a failure.
|
|
16
|
+
*
|
|
17
|
+
* A date counts as covered only when every currency pricing can ask for is
|
|
18
|
+
* present — the ones `pic_pricebooks` uses, plus the base currency. Coverage
|
|
19
|
+
* cannot be judged per date alone: `fxToEur`'s lazy fallback stores a single
|
|
20
|
+
* currency, and that one row would otherwise mark the whole date done and
|
|
21
|
+
* keep the sync from ever filling the rest of it.
|
|
22
|
+
*
|
|
23
|
+
* A pricebook currency the feed does not publish can never become covered,
|
|
24
|
+
* so it is reported in `unknownCurrencies` and dropped from the needed set
|
|
25
|
+
* for the rest of the run — otherwise it would re-fetch the whole window on
|
|
26
|
+
* every run. The cost of one is a single request per run instead of none.
|
|
27
|
+
*/
|
|
6
28
|
sync(): Promise<FxSyncSummary>;
|
|
7
29
|
}
|
|
8
30
|
export declare const fxRatesApi: () => FxRatesApi;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FxRatesApi.d.ts","sourceRoot":"","sources":["../../src/api/FxRatesApi.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"FxRatesApi.d.ts","sourceRoot":"","sources":["../../src/api/FxRatesApi.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAQjC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2CAA2C,CAAC;AAY3E,qBAAa,UAAW,SAAQ,IAAI;IAClC;;;;;OAKG;IACU,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAkB7D;;;;;;;;;;;;;;;OAeG;IACU,IAAI,IAAI,OAAO,CAAC,aAAa,CAAC;CAkD5C;AAGD,eAAO,MAAM,UAAU,kBAAoC,CAAC"}
|
package/dist/api/FxRatesApi.js
CHANGED
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
* and none at all once the window is fully cached. `fxToEur` keeps its lazy
|
|
6
6
|
* per-charge fetch as the fallback for what the window does not cover.
|
|
7
7
|
*/
|
|
8
|
-
import { picFxRatesStore } from "@mxpicture/tesla-superchargers-mate/store";
|
|
8
|
+
import { picFxRatesStore, picPricebooksStore, } from "@mxpicture/tesla-superchargers-mate/store";
|
|
9
9
|
import { IApi } from "./IApi.js";
|
|
10
|
-
import { FX_SYNC_DAYS, fetchEurRates, rateToEur, toRateDate, } from "../common/fx.common.js";
|
|
10
|
+
import { BASE_CURRENCY, FX_SYNC_DAYS, fetchEurRates, rateToEur, toRateDate, } from "../common/fx.common.js";
|
|
11
11
|
const DAY_MS = 24 * 60 * 60 * 1000;
|
|
12
12
|
/** The last `days` UTC calendar days as `YYYY-MM-DD`, oldest first, today last. */
|
|
13
13
|
const utcDates = (days) => {
|
|
@@ -15,64 +15,12 @@ const utcDates = (days) => {
|
|
|
15
15
|
return Array.from({ length: days }, (_, i) => toRateDate(new Date(today - (days - 1 - i) * DAY_MS)));
|
|
16
16
|
};
|
|
17
17
|
export class FxRatesApi extends IApi {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
// const currencies = (
|
|
25
|
-
// await picPricebooksStore().getDistinctCurrencies()
|
|
26
|
-
// ).filter((c) => c !== BASE_CURRENCY);
|
|
27
|
-
// const dates = utcDates(FX_SYNC_DAYS);
|
|
28
|
-
// const fromDate = dates[0];
|
|
29
|
-
// const fetchedDates: string[] = [];
|
|
30
|
-
// const missingDates: string[] = [];
|
|
31
|
-
// const unknownCurrencies = new Set<string>();
|
|
32
|
-
// const rows: {
|
|
33
|
-
// rateDate: string;
|
|
34
|
-
// quoteCurrency: string;
|
|
35
|
-
// rateToEur: string;
|
|
36
|
-
// }[] = [];
|
|
37
|
-
// if (currencies.length) {
|
|
38
|
-
// const coverage = new Set(
|
|
39
|
-
// (await picFxRatesStore().getCoverage(fromDate)).map(
|
|
40
|
-
// (row) =>
|
|
41
|
-
// `${toRateDate(row.rate_date)} ${row.quote_currency.toUpperCase()}`,
|
|
42
|
-
// ),
|
|
43
|
-
// );
|
|
44
|
-
// for (const rateDate of dates) {
|
|
45
|
-
// const missing = currencies.filter(
|
|
46
|
-
// (c) => !coverage.has(`${rateDate} ${c}`),
|
|
47
|
-
// );
|
|
48
|
-
// if (!missing.length) continue;
|
|
49
|
-
// const rates = await fetchEurRates(rateDate);
|
|
50
|
-
// if (!rates) {
|
|
51
|
-
// missingDates.push(rateDate);
|
|
52
|
-
// continue;
|
|
53
|
-
// }
|
|
54
|
-
// fetchedDates.push(rateDate);
|
|
55
|
-
// for (const quoteCurrency of missing) {
|
|
56
|
-
// const rate = rateToEur(rates[quoteCurrency.toLowerCase()]);
|
|
57
|
-
// if (rate === null) {
|
|
58
|
-
// unknownCurrencies.add(quoteCurrency);
|
|
59
|
-
// continue;
|
|
60
|
-
// }
|
|
61
|
-
// rows.push({ rateDate, quoteCurrency, rateToEur: String(rate) });
|
|
62
|
-
// }
|
|
63
|
-
// }
|
|
64
|
-
// }
|
|
65
|
-
// return {
|
|
66
|
-
// days: FX_SYNC_DAYS,
|
|
67
|
-
// fromDate,
|
|
68
|
-
// currencies,
|
|
69
|
-
// fetchedDates,
|
|
70
|
-
// missingDates,
|
|
71
|
-
// unknownCurrencies: [...unknownCurrencies],
|
|
72
|
-
// inserted: await picFxRatesStore().putRates(rows),
|
|
73
|
-
// deleted: await picFxRatesStore().deleteStale(fromDate, currencies),
|
|
74
|
-
// };
|
|
75
|
-
// }
|
|
18
|
+
/**
|
|
19
|
+
* Every quote currency the feed publishes for one date, as storable rows.
|
|
20
|
+
* `quote_currency` is uppercase throughout the schema, so the feed's
|
|
21
|
+
* lowercase keys are normalized here — a lowercase row would never be found
|
|
22
|
+
* by {@link fxToEur}, which looks up the uppercased code.
|
|
23
|
+
*/
|
|
76
24
|
async syncDate(rateDate) {
|
|
77
25
|
const rows = [];
|
|
78
26
|
const rates = await fetchEurRates(rateDate);
|
|
@@ -81,28 +29,55 @@ export class FxRatesApi extends IApi {
|
|
|
81
29
|
for (const [quoteCurrency, quotePerEur] of Object.entries(rates)) {
|
|
82
30
|
const rate = rateToEur(quotePerEur);
|
|
83
31
|
if (rate !== null)
|
|
84
|
-
rows.push({
|
|
32
|
+
rows.push({
|
|
33
|
+
rateDate,
|
|
34
|
+
quoteCurrency: quoteCurrency.toUpperCase(),
|
|
35
|
+
rateToEur: String(rate),
|
|
36
|
+
});
|
|
85
37
|
}
|
|
86
38
|
return rows;
|
|
87
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* Fill the window's missing rates and prune what fell out of it. A date the
|
|
42
|
+
* feed has not published yet is reported in `missingDates` and retried by
|
|
43
|
+
* the next run, never a failure.
|
|
44
|
+
*
|
|
45
|
+
* A date counts as covered only when every currency pricing can ask for is
|
|
46
|
+
* present — the ones `pic_pricebooks` uses, plus the base currency. Coverage
|
|
47
|
+
* cannot be judged per date alone: `fxToEur`'s lazy fallback stores a single
|
|
48
|
+
* currency, and that one row would otherwise mark the whole date done and
|
|
49
|
+
* keep the sync from ever filling the rest of it.
|
|
50
|
+
*
|
|
51
|
+
* A pricebook currency the feed does not publish can never become covered,
|
|
52
|
+
* so it is reported in `unknownCurrencies` and dropped from the needed set
|
|
53
|
+
* for the rest of the run — otherwise it would re-fetch the whole window on
|
|
54
|
+
* every run. The cost of one is a single request per run instead of none.
|
|
55
|
+
*/
|
|
88
56
|
async sync() {
|
|
89
|
-
|
|
57
|
+
let needed = [
|
|
58
|
+
BASE_CURRENCY,
|
|
59
|
+
...(await picPricebooksStore().getDistinctCurrencies()).filter((c) => c !== BASE_CURRENCY),
|
|
60
|
+
];
|
|
90
61
|
const dates = utcDates(FX_SYNC_DAYS);
|
|
91
62
|
const fromDate = dates[0];
|
|
92
63
|
const fetchedDates = [];
|
|
93
64
|
const missingDates = [];
|
|
94
65
|
const unknownCurrencies = new Set();
|
|
95
66
|
const rows = [];
|
|
96
|
-
const coverage = new Set((await picFxRatesStore().
|
|
67
|
+
const coverage = new Set((await picFxRatesStore().getCoverage(fromDate)).map((row) => `${toRateDate(row.rate_date)} ${row.quote_currency.toUpperCase()}`));
|
|
97
68
|
for (const rateDate of dates) {
|
|
98
|
-
if (coverage.has(rateDate))
|
|
69
|
+
if (needed.every((c) => coverage.has(`${rateDate} ${c}`)))
|
|
99
70
|
continue;
|
|
100
71
|
const dateRows = await this.syncDate(rateDate);
|
|
101
72
|
if (!dateRows.length) {
|
|
102
73
|
missingDates.push(rateDate);
|
|
103
74
|
continue;
|
|
104
75
|
}
|
|
105
|
-
|
|
76
|
+
const published = new Set(dateRows.map((row) => row.quoteCurrency));
|
|
77
|
+
const unknown = needed.filter((c) => !published.has(c));
|
|
78
|
+
for (const currency of unknown)
|
|
79
|
+
unknownCurrencies.add(currency);
|
|
80
|
+
needed = needed.filter((c) => published.has(c));
|
|
106
81
|
fetchedDates.push(rateDate);
|
|
107
82
|
rows.push(...dateRows);
|
|
108
83
|
}
|
|
@@ -113,7 +88,7 @@ export class FxRatesApi extends IApi {
|
|
|
113
88
|
missingDates,
|
|
114
89
|
unknownCurrencies: [...unknownCurrencies],
|
|
115
90
|
inserted: await picFxRatesStore().putRates(rows),
|
|
116
|
-
deleted: await picFxRatesStore().deleteStale(fromDate
|
|
91
|
+
deleted: await picFxRatesStore().deleteStale(fromDate),
|
|
117
92
|
};
|
|
118
93
|
}
|
|
119
94
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FxRatesApi.js","sourceRoot":"","sources":["../../src/api/FxRatesApi.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"FxRatesApi.js","sourceRoot":"","sources":["../../src/api/FxRatesApi.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { FxRateNum } from "@mxpicture/tesla-superchargers-mate/types";
|
|
1
2
|
/** The currency TeslaMate's `cost` column is aggregated in. */
|
|
2
3
|
export declare const BASE_CURRENCY = "EUR";
|
|
3
4
|
/** How many UTC days back the daily sync covers, today included. */
|
|
@@ -12,10 +13,12 @@ export declare const fetchEurRates: (rateDate: string) => Promise<Record<string,
|
|
|
12
13
|
/** Invert a quote-per-EUR rate into EUR per 1 unit; null when unusable. */
|
|
13
14
|
export declare const rateToEur: (quotePerEur: number | undefined) => number | null;
|
|
14
15
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
16
|
+
* The stored rate row for `currencyCode` on the day of `at` (UTC), or null
|
|
17
|
+
* when it can't be resolved. The caller needs the row, not just the number:
|
|
18
|
+
* its id is the provenance written to `pic_charging_process_links`. EUR is not
|
|
19
|
+
* special-cased — the feed carries `eur: 1`, so the base currency resolves to
|
|
20
|
+
* a real row like any other. A cache hit is returned directly; a miss fetches
|
|
21
|
+
* once (single-flighted) and caches the result before returning it.
|
|
19
22
|
*/
|
|
20
|
-
export declare const fxToEur: (currencyCode: string, at: Date) => Promise<
|
|
23
|
+
export declare const fxToEur: (currencyCode: string, at: Date, noFetch?: boolean) => Promise<FxRateNum | null>;
|
|
21
24
|
//# sourceMappingURL=fx.common.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fx.common.d.ts","sourceRoot":"","sources":["../../src/common/fx.common.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fx.common.d.ts","sourceRoot":"","sources":["../../src/common/fx.common.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2CAA2C,CAAC;AAG3E,+DAA+D;AAC/D,eAAO,MAAM,aAAa,QAAQ,CAAC;AAEnC,oEAAoE;AACpE,eAAO,MAAM,YAAY,IAAI,CAAC;AAgB9B,eAAO,MAAM,UAAU,GAAI,GAAG,IAAI,WAAiC,CAAC;AAEpE;;;;GAIG;AACH,eAAO,MAAM,aAAa,GACxB,UAAU,MAAM,KACf,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAevC,CAAC;AAEF,2EAA2E;AAC3E,eAAO,MAAM,SAAS,GAAI,aAAa,MAAM,GAAG,SAAS,KAAG,MAAM,GAAG,IAG3D,CAAC;AAKX;;;;;;;GAOG;AACH,eAAO,MAAM,OAAO,GAClB,cAAc,MAAM,EACpB,IAAI,IAAI,EACR,UAAU,OAAO,KAChB,OAAO,CAAC,SAAS,GAAG,IAAI,CAiB1B,CAAC"}
|
package/dist/common/fx.common.js
CHANGED
|
@@ -2,13 +2,14 @@
|
|
|
2
2
|
* FX conversion to the base currency for the charge-cost boundary. A charge's
|
|
3
3
|
* cost is written into TeslaMate's single-currency `charging_processes.cost`,
|
|
4
4
|
* so a foreign-currency rate must be converted to EUR first. Rates are looked
|
|
5
|
-
* up per the charge's own (UTC) date and cached write-once in `pic_fx_rates
|
|
6
|
-
*
|
|
7
|
-
* cannot be resolved returns null so the caller
|
|
8
|
-
* rather than store a wrong-currency cost.
|
|
5
|
+
* up per the charge's own (UTC) date and cached write-once in `pic_fx_rates`,
|
|
6
|
+
* EUR (rate 1) included, so every priced charge can point at the rate row it
|
|
7
|
+
* was priced with. A rate that cannot be resolved returns null so the caller
|
|
8
|
+
* can leave the charge unpriced rather than store a wrong-currency cost.
|
|
9
9
|
*/
|
|
10
10
|
import { picFxRatesStore } from "@mxpicture/tesla-superchargers-mate/store";
|
|
11
11
|
import { singleFlight } from "./concurrency.common.js";
|
|
12
|
+
import { enrichFxRate } from "@mxpicture/tesla-superchargers-mate/transform";
|
|
12
13
|
/** The currency TeslaMate's `cost` column is aggregated in. */
|
|
13
14
|
export const BASE_CURRENCY = "EUR";
|
|
14
15
|
/** How many UTC days back the daily sync covers, today included. */
|
|
@@ -56,26 +57,27 @@ export const rateToEur = (quotePerEur) => quotePerEur !== undefined && Number.is
|
|
|
56
57
|
/** Coalesce concurrent lookups sharing a (date, currency) into one fetch. */
|
|
57
58
|
const fxInFlight = singleFlight();
|
|
58
59
|
/**
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
60
|
+
* The stored rate row for `currencyCode` on the day of `at` (UTC), or null
|
|
61
|
+
* when it can't be resolved. The caller needs the row, not just the number:
|
|
62
|
+
* its id is the provenance written to `pic_charging_process_links`. EUR is not
|
|
63
|
+
* special-cased — the feed carries `eur: 1`, so the base currency resolves to
|
|
64
|
+
* a real row like any other. A cache hit is returned directly; a miss fetches
|
|
65
|
+
* once (single-flighted) and caches the result before returning it.
|
|
63
66
|
*/
|
|
64
|
-
export const fxToEur = async (currencyCode, at) => {
|
|
65
|
-
if (currencyCode.toUpperCase() === BASE_CURRENCY)
|
|
66
|
-
return 1;
|
|
67
|
+
export const fxToEur = async (currencyCode, at, noFetch) => {
|
|
67
68
|
const rateDate = toRateDate(at);
|
|
68
69
|
const quote = currencyCode.toUpperCase();
|
|
69
70
|
const cached = await picFxRatesStore().getRate(rateDate, quote);
|
|
70
|
-
if (cached
|
|
71
|
-
return
|
|
71
|
+
if (cached)
|
|
72
|
+
return cached;
|
|
73
|
+
if (noFetch)
|
|
74
|
+
return null;
|
|
72
75
|
return await fxInFlight(`${rateDate} ${quote}`, async () => {
|
|
73
76
|
const rates = await fetchEurRates(rateDate);
|
|
74
77
|
const rate = rates ? rateToEur(rates[quote.toLowerCase()]) : null;
|
|
75
78
|
if (rate === null)
|
|
76
79
|
return null;
|
|
77
|
-
await picFxRatesStore().putRate(rateDate, quote, String(rate));
|
|
78
|
-
return rate;
|
|
80
|
+
return enrichFxRate(await picFxRatesStore().putRate(rateDate, quote, String(rate)));
|
|
79
81
|
});
|
|
80
82
|
};
|
|
81
83
|
//# sourceMappingURL=fx.common.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fx.common.js","sourceRoot":"","sources":["../../src/common/fx.common.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,+DAA+D;AAC/D,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC;AAEnC,oEAAoE;AACpE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC;AAE9B,yEAAyE;AACzE,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC;;;;;GAKG;AACH,MAAM,MAAM,GAAG,CAAC,QAAgB,EAAE,UAAkB,EAAY,EAAE,CAAC;IACjE,0DAA0D,QAAQ,kBAAkB,UAAU,OAAO;IACrG,WAAW,QAAQ,yCAAyC,UAAU,OAAO;CAC9E,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAO,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAEpE;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAChC,QAAgB,EACwB,EAAE;IAC1C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAC3B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,kBAAkB,CAAC;aAChD,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,SAAS;YACtB,MAAM,KAAK,GAAY,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC;YAC/C,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;gBACpC,OAAO,KAA+B,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,yDAAyD;QAC3D,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,2EAA2E;AAC3E,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,WAA+B,EAAiB,EAAE,CAC1E,WAAW,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC;IAC1E,CAAC,CAAC,CAAC,GAAG,WAAW;IACjB,CAAC,CAAC,IAAI,CAAC;AAEX,6EAA6E;AAC7E,MAAM,UAAU,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"fx.common.js","sourceRoot":"","sources":["../../src/common/fx.common.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEvD,OAAO,EAAE,YAAY,EAAE,MAAM,+CAA+C,CAAC;AAE7E,+DAA+D;AAC/D,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,CAAC;AAEnC,oEAAoE;AACpE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC;AAE9B,yEAAyE;AACzE,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC;;;;;GAKG;AACH,MAAM,MAAM,GAAG,CAAC,QAAgB,EAAE,UAAkB,EAAY,EAAE,CAAC;IACjE,0DAA0D,QAAQ,kBAAkB,UAAU,OAAO;IACrG,WAAW,QAAQ,yCAAyC,UAAU,OAAO;CAC9E,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAAO,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAEpE;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAChC,QAAgB,EACwB,EAAE;IAC1C,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC;QAC1C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;gBAC3B,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,kBAAkB,CAAC;aAChD,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,SAAS;YACtB,MAAM,KAAK,GAAY,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC;YAC/C,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;gBACpC,OAAO,KAA+B,CAAC;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,yDAAyD;QAC3D,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,2EAA2E;AAC3E,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,WAA+B,EAAiB,EAAE,CAC1E,WAAW,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,WAAW,GAAG,CAAC;IAC1E,CAAC,CAAC,CAAC,GAAG,WAAW;IACjB,CAAC,CAAC,IAAI,CAAC;AAEX,6EAA6E;AAC7E,MAAM,UAAU,GAAG,YAAY,EAAoB,CAAC;AAEpD;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAC1B,YAAoB,EACpB,EAAQ,EACR,OAAiB,EACU,EAAE;IAC7B,MAAM,QAAQ,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,YAAY,CAAC,WAAW,EAAE,CAAC;IAEzC,MAAM,MAAM,GAAG,MAAM,eAAe,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;IAChE,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,IAAI,OAAO;QAAE,OAAO,IAAI,CAAC;IAEzB,OAAO,MAAM,UAAU,CAAC,GAAG,QAAQ,IAAI,KAAK,EAAE,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,KAAK,GAAG,MAAM,aAAa,CAAC,QAAQ,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAClE,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC/B,OAAO,YAAY,CACjB,MAAM,eAAe,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAC/D,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { PicChargersId, PicSlugsId } from "@mxpicture/tesla-superchargers-generated/public";
|
|
1
|
+
import type { PicChargers, PicChargersId, PicPricebooks, PicSlugsId } from "@mxpicture/tesla-superchargers-generated/public";
|
|
2
2
|
export interface ChargerCandidate {
|
|
3
3
|
/** slug for the details endpoint (location_url_slug) */
|
|
4
4
|
slug: string;
|
|
@@ -15,4 +15,8 @@ export interface ChargerFavourite {
|
|
|
15
15
|
longitude: number;
|
|
16
16
|
failure_count: number;
|
|
17
17
|
}
|
|
18
|
+
export interface ChargerFetchPricesResult {
|
|
19
|
+
charger: PicChargers | null;
|
|
20
|
+
rows: PicPricebooks[];
|
|
21
|
+
}
|
|
18
22
|
//# sourceMappingURL=chargers.types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chargers.types.d.ts","sourceRoot":"","sources":["../../src/types/chargers.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,UAAU,EACX,MAAM,iDAAiD,CAAC;AAEzD,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,UAAU,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,aAAa,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB"}
|
|
1
|
+
{"version":3,"file":"chargers.types.d.ts","sourceRoot":"","sources":["../../src/types/chargers.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,aAAa,EACb,aAAa,EACb,UAAU,EACX,MAAM,iDAAiD,CAAC;AAEzD,MAAM,WAAW,gBAAgB;IAC/B,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,UAAU,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,aAAa,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,IAAI,EAAE,aAAa,EAAE,CAAC;CACvB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mxpicture/tesla-superchargers-api",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.36",
|
|
4
4
|
"description": "Fetch + store Tesla Supercharger locations and pricing",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "MXPicture",
|
|
@@ -44,9 +44,9 @@
|
|
|
44
44
|
"access": "public"
|
|
45
45
|
},
|
|
46
46
|
"dependencies": {
|
|
47
|
-
"@mxpicture/tesla-superchargers-generated": "^0.1.
|
|
48
|
-
"@mxpicture/tesla-superchargers-mate": "^0.1.
|
|
49
|
-
"@mxpicture/tesla-superchargers-cloud-store": "^0.1.
|
|
47
|
+
"@mxpicture/tesla-superchargers-generated": "^0.1.36",
|
|
48
|
+
"@mxpicture/tesla-superchargers-mate": "^0.1.36",
|
|
49
|
+
"@mxpicture/tesla-superchargers-cloud-store": "^0.1.36",
|
|
50
50
|
"csv-parse": "^7.0.1",
|
|
51
51
|
"json5": "^2.2.3",
|
|
52
52
|
"zod": "^4.4.3"
|