@mxpicture/tesla-superchargers-api 0.1.31 → 0.1.33
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/ChargingProcessesApi.d.ts.map +1 -1
- package/dist/api/ChargingProcessesApi.js +17 -3
- package/dist/api/ChargingProcessesApi.js.map +1 -1
- package/dist/common/fx.common.d.ts +12 -0
- package/dist/common/fx.common.d.ts.map +1 -0
- package/dist/common/fx.common.js +70 -0
- package/dist/common/fx.common.js.map +1 -0
- package/dist/common/index.d.ts +1 -0
- package/dist/common/index.d.ts.map +1 -1
- package/dist/common/index.js +1 -0
- package/dist/common/index.js.map +1 -1
- package/dist/common/pricebooks.common.d.ts +10 -8
- package/dist/common/pricebooks.common.d.ts.map +1 -1
- package/dist/common/pricebooks.common.js +35 -16
- package/dist/common/pricebooks.common.js.map +1 -1
- package/dist/types/charging.types.d.ts +1 -1
- package/dist/types/charging.types.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -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,EACzB,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;
|
|
1
|
+
{"version":3,"file":"ChargingProcessesApi.d.ts","sourceRoot":"","sources":["../../src/api/ChargingProcessesApi.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACzB,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;IAkErC,kBAAkB,IAAI,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAIxD,WAAW,CACtB,SAAS,EAAE,mBAAmB,EAC9B,IAAI,EAAE,MAAM,GAAG,IAAI,GAClB,OAAO,CAAC,iBAAiB,CAAC;CAG9B;AAGD,eAAO,MAAM,oBAAoB,4BAA8C,CAAC"}
|
|
@@ -2,9 +2,10 @@ import {} from "@mxpicture/tesla-superchargers-generated/public";
|
|
|
2
2
|
import { chargingProcessesStore } from "@mxpicture/tesla-superchargers-mate/store";
|
|
3
3
|
import { chargersApi } from "./ChargersApi.js";
|
|
4
4
|
import { IApi } from "./IApi.js";
|
|
5
|
-
import {
|
|
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 { BASE_CURRENCY, fxToEur } from "../common/fx.common.js";
|
|
8
9
|
export class ChargingProcessesApi extends IApi {
|
|
9
10
|
async runPricing() {
|
|
10
11
|
const store = chargingProcessesStore();
|
|
@@ -17,7 +18,7 @@ export class ChargingProcessesApi extends IApi {
|
|
|
17
18
|
return item;
|
|
18
19
|
}
|
|
19
20
|
const pricebooks = await chargersApi().fetchPrices({ latitude: charge.latitude, longitude: charge.longitude }, charge.start_date);
|
|
20
|
-
const rate =
|
|
21
|
+
const rate = chargingRate(pricebooks);
|
|
21
22
|
item.rate = rate;
|
|
22
23
|
if (!rate) {
|
|
23
24
|
item.topic = "noRate";
|
|
@@ -31,7 +32,20 @@ export class ChargingProcessesApi extends IApi {
|
|
|
31
32
|
item.failure_count = await store.incrementFailed(item.charge.id);
|
|
32
33
|
return item;
|
|
33
34
|
}
|
|
34
|
-
|
|
35
|
+
// cost is written into TeslaMate's single-currency cost column, so a
|
|
36
|
+
// foreign-currency rate is converted to EUR at the charge's own date;
|
|
37
|
+
// an unresolvable rate leaves the charge unpriced rather than storing
|
|
38
|
+
// a wrong-currency number.
|
|
39
|
+
const local = rate.rate * Number(energy);
|
|
40
|
+
const fx = rate.currencyCode.toUpperCase() === BASE_CURRENCY
|
|
41
|
+
? 1
|
|
42
|
+
: await fxToEur(rate.currencyCode, charge.start_date);
|
|
43
|
+
if (fx === null) {
|
|
44
|
+
item.topic = "noFxRate";
|
|
45
|
+
item.failure_count = await store.incrementFailed(item.charge.id);
|
|
46
|
+
return item;
|
|
47
|
+
}
|
|
48
|
+
const cost = Number((local * fx).toFixed(2));
|
|
35
49
|
item.cost = cost;
|
|
36
50
|
await chargingProcessesApi().updatePrice(charge.id, cost);
|
|
37
51
|
item.topic = "chargeUpdated";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChargingProcessesApi.js","sourceRoot":"","sources":["../../src/api/ChargingProcessesApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAGN,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AAEnF,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAK/C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"ChargingProcessesApi.js","sourceRoot":"","sources":["../../src/api/ChargingProcessesApi.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** The currency TeslaMate's `cost` column is aggregated in. */
|
|
2
|
+
export declare const BASE_CURRENCY = "EUR";
|
|
3
|
+
/** Fetch the EUR-per-unit rate, primary then fallback; null on any failure. */
|
|
4
|
+
export declare const fetchRateToEur: (rateDate: string, quoteLower: string) => Promise<number | null>;
|
|
5
|
+
/**
|
|
6
|
+
* EUR per 1 unit of `currencyCode` on the day of `at` (UTC), or null when the
|
|
7
|
+
* rate can't be resolved. EUR returns 1 without any store or network access.
|
|
8
|
+
* A cache hit is returned directly; a miss fetches once (single-flighted) and
|
|
9
|
+
* caches the result before returning it.
|
|
10
|
+
*/
|
|
11
|
+
export declare const fxToEur: (currencyCode: string, at: Date) => Promise<number | null>;
|
|
12
|
+
//# sourceMappingURL=fx.common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fx.common.d.ts","sourceRoot":"","sources":["../../src/common/fx.common.ts"],"names":[],"mappings":"AAYA,+DAA+D;AAC/D,eAAO,MAAM,aAAa,QAAQ,CAAC;AAgBnC,+EAA+E;AAC/E,eAAO,MAAM,cAAc,GACzB,UAAU,MAAM,EAChB,YAAY,MAAM,KACjB,OAAO,CAAC,MAAM,GAAG,IAAI,CAevB,CAAC;AAKF;;;;;GAKG;AACH,eAAO,MAAM,OAAO,GAClB,cAAc,MAAM,EACpB,IAAI,IAAI,KACP,OAAO,CAAC,MAAM,GAAG,IAAI,CAevB,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FX conversion to the base currency for the charge-cost boundary. A charge's
|
|
3
|
+
* cost is written into TeslaMate's single-currency `charging_processes.cost`,
|
|
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
|
+
* a EUR charge short-circuits before any store or network access. A rate that
|
|
7
|
+
* cannot be resolved returns null so the caller can leave the charge unpriced
|
|
8
|
+
* rather than store a wrong-currency cost.
|
|
9
|
+
*/
|
|
10
|
+
import { picFxRatesStore } from "@mxpicture/tesla-superchargers-mate/store";
|
|
11
|
+
import { singleFlight } from "./concurrency.common.js";
|
|
12
|
+
/** The currency TeslaMate's `cost` column is aggregated in. */
|
|
13
|
+
export const BASE_CURRENCY = "EUR";
|
|
14
|
+
/** Abort a stalled FX request rather than block a pricing pass on it. */
|
|
15
|
+
const FX_HTTP_TIMEOUT_MS = 10_000;
|
|
16
|
+
/**
|
|
17
|
+
* Historical daily rates from the keyless fawazahmed0/exchange-api. Primary is
|
|
18
|
+
* the jsDelivr CDN, with the pages.dev mirror as fallback. The response is
|
|
19
|
+
* `{ "date": ..., "{quote}": { "eur": <number>, ... } }`, so `[quote].eur` is
|
|
20
|
+
* EUR per 1 unit of the quote currency.
|
|
21
|
+
*/
|
|
22
|
+
const fxUrls = (rateDate, quoteLower) => [
|
|
23
|
+
`https://cdn.jsdelivr.net/npm/@fawazahmed0/currency-api@${rateDate}/v1/currencies/${quoteLower}.json`,
|
|
24
|
+
`https://${rateDate}.currency-api.pages.dev/v1/currencies/${quoteLower}.json`,
|
|
25
|
+
];
|
|
26
|
+
/** Fetch the EUR-per-unit rate, primary then fallback; null on any failure. */
|
|
27
|
+
export const fetchRateToEur = async (rateDate, quoteLower) => {
|
|
28
|
+
for (const url of fxUrls(rateDate, quoteLower)) {
|
|
29
|
+
try {
|
|
30
|
+
const res = await fetch(url, {
|
|
31
|
+
signal: AbortSignal.timeout(FX_HTTP_TIMEOUT_MS),
|
|
32
|
+
});
|
|
33
|
+
if (!res.ok)
|
|
34
|
+
continue;
|
|
35
|
+
const body = await res.json();
|
|
36
|
+
const rate = body?.[quoteLower]?.eur;
|
|
37
|
+
if (typeof rate === "number" && Number.isFinite(rate))
|
|
38
|
+
return rate;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// network error / timeout / bad JSON — try the next host
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
};
|
|
46
|
+
/** Coalesce concurrent lookups sharing a (date, currency) into one fetch. */
|
|
47
|
+
const fxInFlight = singleFlight();
|
|
48
|
+
/**
|
|
49
|
+
* EUR per 1 unit of `currencyCode` on the day of `at` (UTC), or null when the
|
|
50
|
+
* rate can't be resolved. EUR returns 1 without any store or network access.
|
|
51
|
+
* A cache hit is returned directly; a miss fetches once (single-flighted) and
|
|
52
|
+
* caches the result before returning it.
|
|
53
|
+
*/
|
|
54
|
+
export const fxToEur = async (currencyCode, at) => {
|
|
55
|
+
if (currencyCode.toUpperCase() === BASE_CURRENCY)
|
|
56
|
+
return 1;
|
|
57
|
+
const rateDate = at.toISOString().slice(0, 10);
|
|
58
|
+
const quote = currencyCode.toUpperCase();
|
|
59
|
+
const cached = await picFxRatesStore().getRate(rateDate, quote);
|
|
60
|
+
if (cached !== null)
|
|
61
|
+
return Number(cached);
|
|
62
|
+
return await fxInFlight(`${rateDate} ${quote}`, async () => {
|
|
63
|
+
const rate = await fetchRateToEur(rateDate, quote.toLowerCase());
|
|
64
|
+
if (rate === null)
|
|
65
|
+
return null;
|
|
66
|
+
await picFxRatesStore().putRate(rateDate, quote, String(rate));
|
|
67
|
+
return rate;
|
|
68
|
+
});
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=fx.common.js.map
|
|
@@ -0,0 +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,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,+EAA+E;AAC/E,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EACjC,QAAgB,EAChB,UAAkB,EACM,EAAE;IAC1B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,CAAC;QAC/C,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,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAY,IAAI,EAAE,CAAC,UAAU,CAAC,EAAE,GAAG,CAAC;YAC9C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,OAAO,IAAI,CAAC;QACrE,CAAC;QAAC,MAAM,CAAC;YACP,yDAAyD;QAC3D,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,6EAA6E;AAC7E,MAAM,UAAU,GAAG,YAAY,EAAiB,CAAC;AAEjD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,KAAK,EAC1B,YAAoB,EACpB,EAAQ,EACgB,EAAE;IAC1B,IAAI,YAAY,CAAC,WAAW,EAAE,KAAK,aAAa;QAAE,OAAO,CAAC,CAAC;IAE3D,MAAM,QAAQ,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC/C,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,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC;IAE3C,OAAO,MAAM,UAAU,CAAC,GAAG,QAAQ,IAAI,KAAK,EAAE,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QACjE,IAAI,IAAI,KAAK,IAAI;YAAE,OAAO,IAAI,CAAC;QAC/B,MAAM,eAAe,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/D,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
|
package/dist/common/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * from "./chargers.common.js";
|
|
2
2
|
export * from "./concurrency.common.js";
|
|
3
3
|
export * from "./failures.common.js";
|
|
4
|
+
export * from "./fx.common.js";
|
|
4
5
|
export * from "./invoices.common.js";
|
|
5
6
|
export * from "./invoicesCsv.common.js";
|
|
6
7
|
export * from "./pricebooks.common.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":"AACA,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":"AACA,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC"}
|
package/dist/common/index.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
export * from "./chargers.common.js";
|
|
3
3
|
export * from "./concurrency.common.js";
|
|
4
4
|
export * from "./failures.common.js";
|
|
5
|
+
export * from "./fx.common.js";
|
|
5
6
|
export * from "./invoices.common.js";
|
|
6
7
|
export * from "./invoicesCsv.common.js";
|
|
7
8
|
export * from "./pricebooks.common.js";
|
package/dist/common/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC"}
|
|
@@ -35,13 +35,15 @@ export declare const pricebookCoversInstant: (row: Pick<PricebookContent, "days"
|
|
|
35
35
|
*/
|
|
36
36
|
export declare const samePricebookGroup: (a: PricebookContent[], b: PricebookContent[]) => boolean;
|
|
37
37
|
/**
|
|
38
|
-
* The per-kWh rate
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
38
|
+
* The per-kWh rate paid for charging, picked from the variant rows valid at
|
|
39
|
+
* one instant (member/non-member × vehicle make × fee type, as `getPrices`
|
|
40
|
+
* returns them): fee type "charging", billed per kWh (per-minute billing
|
|
41
|
+
* depends on charging power, which stored energy totals don't carry), the
|
|
42
|
+
* non-member row when both memberships are present (Tesla drivers need no
|
|
43
|
+
* membership). Prefers the Tesla vehicle make; falls back to the first other
|
|
44
|
+
* vehicle make's rate when the feed has no Tesla row, so a charger missing
|
|
45
|
+
* Tesla-specific pricing doesn't leave the caller without a price. Returns
|
|
46
|
+
* null when no billable row exists at all.
|
|
45
47
|
*/
|
|
46
|
-
export declare const
|
|
48
|
+
export declare const chargingRate: (rows: PricebookContent[]) => ChargingRate | null;
|
|
47
49
|
//# sourceMappingURL=pricebooks.common.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricebooks.common.d.ts","sourceRoot":"","sources":["../../src/common/pricebooks.common.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"pricebooks.common.d.ts","sourceRoot":"","sources":["../../src/common/pricebooks.common.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEnF,8EAA8E;AAC9E,eAAO,MAAM,kBAAkB,SAAS,CAAC;AACzC,eAAO,MAAM,iBAAiB,aAAa,CAAC;AAC5C,eAAO,MAAM,OAAO,QAAQ,CAAC;AAE7B,wEAAwE;AACxE,eAAO,MAAM,aAAa,GAAI,MAAM,IAAI,GAAG,MAAM,KAAG,MAInD,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,GAAG,MAAM,KAAG,MAC7B,CAAC;AAE1B,oFAAoF;AACpF,eAAO,MAAM,YAAY,GAAI,KAAK,gBAAgB,KAAG,MAcxC,CAAC;AAEd,qHAAqH;AACrH,eAAO,MAAM,YAAY,GACvB,IAAI,IAAI,EACR,UAAU,MAAM,KACf;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAkBjC,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,sBAAsB,GACjC,KAAK,IAAI,CAAC,gBAAgB,EAAE,MAAM,GAAG,YAAY,GAAG,UAAU,CAAC,EAC/D,IAAI,IAAI,EACR,UAAU,MAAM,KACf,OASF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAC7B,GAAG,gBAAgB,EAAE,EACrB,GAAG,gBAAgB,EAAE,KACpB,OAKF,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,gBAAgB,EAAE,KAAG,YAAY,GAAG,IAwBtE,CAAC"}
|
|
@@ -75,22 +75,41 @@ export const samePricebookGroup = (a, b) => {
|
|
|
75
75
|
return canonical(a) === canonical(b);
|
|
76
76
|
};
|
|
77
77
|
/**
|
|
78
|
-
* The per-kWh rate
|
|
79
|
-
*
|
|
80
|
-
*
|
|
81
|
-
*
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
78
|
+
* The per-kWh rate paid for charging, picked from the variant rows valid at
|
|
79
|
+
* one instant (member/non-member × vehicle make × fee type, as `getPrices`
|
|
80
|
+
* returns them): fee type "charging", billed per kWh (per-minute billing
|
|
81
|
+
* depends on charging power, which stored energy totals don't carry), the
|
|
82
|
+
* non-member row when both memberships are present (Tesla drivers need no
|
|
83
|
+
* membership). Prefers the Tesla vehicle make; falls back to the first other
|
|
84
|
+
* vehicle make's rate when the feed has no Tesla row, so a charger missing
|
|
85
|
+
* Tesla-specific pricing doesn't leave the caller without a price. Returns
|
|
86
|
+
* null when no billable row exists at all.
|
|
85
87
|
*/
|
|
86
|
-
export const
|
|
87
|
-
|
|
88
|
-
const
|
|
89
|
-
row.
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
88
|
+
export const chargingRate = (rows) => {
|
|
89
|
+
const groups = new Map();
|
|
90
|
+
for (const row of rows) {
|
|
91
|
+
if (row.fee_type.toLowerCase() !== CHARGING_FEE_TYPE)
|
|
92
|
+
continue;
|
|
93
|
+
if (row.uom.toLowerCase() !== KWH_UOM)
|
|
94
|
+
continue;
|
|
95
|
+
const vehicleType = row.vehicle_make_type.toLowerCase();
|
|
96
|
+
const group = groups.get(vehicleType);
|
|
97
|
+
if (group)
|
|
98
|
+
group.push(row);
|
|
99
|
+
else
|
|
100
|
+
groups.set(vehicleType, [row]);
|
|
101
|
+
}
|
|
102
|
+
const rateFor = (vehicleType) => {
|
|
103
|
+
const candidates = groups.get(vehicleType);
|
|
104
|
+
const row = candidates?.find((candidate) => !candidate.is_member_pricebook) ??
|
|
105
|
+
candidates?.[0];
|
|
106
|
+
return row
|
|
107
|
+
? { rate: Number(row.rate_base), currencyCode: row.currency_code }
|
|
108
|
+
: null;
|
|
109
|
+
};
|
|
110
|
+
if (groups.has(TESLA_VEHICLE_MAKE))
|
|
111
|
+
return rateFor(TESLA_VEHICLE_MAKE);
|
|
112
|
+
const otherType = [...groups.keys()].find((t) => t !== TESLA_VEHICLE_MAKE);
|
|
113
|
+
return otherType ? rateFor(otherType) : null;
|
|
95
114
|
};
|
|
96
115
|
//# sourceMappingURL=pricebooks.common.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricebooks.common.js","sourceRoot":"","sources":["../../src/common/pricebooks.common.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pricebooks.common.js","sourceRoot":"","sources":["../../src/common/pricebooks.common.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@ import type { UnpricedChargingProcess } from "@mxpicture/tesla-superchargers-mat
|
|
|
2
2
|
import type { ChargingRate } from "./pricebooks.types.js";
|
|
3
3
|
export interface PricingSummaryItem {
|
|
4
4
|
charge: UnpricedChargingProcess;
|
|
5
|
-
topic: "chargeUpdated" | "noRate" | "noEnergyValue" | "failureLimitReached" | "unknown";
|
|
5
|
+
topic: "chargeUpdated" | "noRate" | "noEnergyValue" | "noFxRate" | "failureLimitReached" | "unknown";
|
|
6
6
|
energy?: string | null;
|
|
7
7
|
rate?: ChargingRate | null;
|
|
8
8
|
cost?: number | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"charging.types.d.ts","sourceRoot":"","sources":["../../src/types/charging.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AACzF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,uBAAuB,CAAC;IAChC,KAAK,EACD,eAAe,GACf,QAAQ,GACR,eAAe,GACf,qBAAqB,GACrB,SAAS,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,kBAAkB,EAAE,CAAC;CAC7B"}
|
|
1
|
+
{"version":3,"file":"charging.types.d.ts","sourceRoot":"","sources":["../../src/types/charging.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,2CAA2C,CAAC;AACzF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAE1D,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,uBAAuB,CAAC;IAChC,KAAK,EACD,eAAe,GACf,QAAQ,GACR,eAAe,GACf,UAAU,GACV,qBAAqB,GACrB,SAAS,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,cAAc;IAC7B,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,kBAAkB,EAAE,CAAC;CAC7B"}
|
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.33",
|
|
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.33",
|
|
48
|
+
"@mxpicture/tesla-superchargers-mate": "^0.1.33",
|
|
49
|
+
"@mxpicture/tesla-superchargers-cloud-store": "^0.1.33",
|
|
50
50
|
"csv-parse": "^7.0.1",
|
|
51
51
|
"json5": "^2.2.3",
|
|
52
52
|
"zod": "^4.4.3"
|