@mxpicture/tesla-superchargers-api 0.1.15 → 0.1.17
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 +4 -13
- package/dist/api/ChargersApi.d.ts.map +1 -1
- package/dist/api/ChargersApi.js +16 -5
- package/dist/api/ChargersApi.js.map +1 -1
- package/dist/api/ChargingProcessesApi.d.ts.map +1 -1
- package/dist/api/ChargingProcessesApi.js +12 -15
- package/dist/api/ChargingProcessesApi.js.map +1 -1
- package/dist/api/FailuresApi.js +4 -4
- package/dist/api/FailuresApi.js.map +1 -1
- package/dist/api/InvoicesApi.d.ts +1 -1
- package/dist/api/InvoicesApi.d.ts.map +1 -1
- package/dist/api/InvoicesApi.js +2 -2
- package/dist/api/InvoicesApi.js.map +1 -1
- package/dist/api/SlugsApi.d.ts +3 -3
- package/dist/api/SlugsApi.d.ts.map +1 -1
- package/dist/api/SlugsApi.js +5 -5
- package/dist/api/SlugsApi.js.map +1 -1
- package/dist/common/chargers.common.d.ts +7 -0
- package/dist/common/chargers.common.d.ts.map +1 -1
- package/dist/common/chargers.common.js +7 -0
- package/dist/common/chargers.common.js.map +1 -1
- package/dist/common/concurrency.common.d.ts +15 -0
- package/dist/common/concurrency.common.d.ts.map +1 -0
- package/dist/common/concurrency.common.js +37 -0
- package/dist/common/concurrency.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/package.json +4 -4
|
@@ -4,6 +4,7 @@ import type { CoordinateAny } from "@mxpicture/tesla-superchargers-mate/common";
|
|
|
4
4
|
import { IApi } from "./IApi.js";
|
|
5
5
|
import type { SyncSummary } from "../types/sync.types.js";
|
|
6
6
|
export declare class ChargersApi extends IApi {
|
|
7
|
+
#private;
|
|
7
8
|
get(item: CoordinateAny, locale?: string, radiusKm?: number): Promise<PicChargers | null>;
|
|
8
9
|
/**
|
|
9
10
|
* Find the Supercharger at a coordinate: try the nearby slug rows
|
|
@@ -36,20 +37,10 @@ export declare class ChargersApi extends IApi {
|
|
|
36
37
|
*/
|
|
37
38
|
getPrices(item: CoordinateAny, at: Date, radiusKm?: number): Promise<PicPricebooks[]>;
|
|
38
39
|
initialLoadFile(path: string): Promise<void>;
|
|
39
|
-
|
|
40
|
-
* Fetch one charger by its details slug and upsert it on `location_guid`,
|
|
41
|
-
* recording its pricebooks as history in the same transaction: when no
|
|
42
|
-
* price changed, the current group is only re-stamped with the fetch's
|
|
43
|
-
* uuid; when one did, a new group is inserted and the old rows stay as
|
|
44
|
-
* history. A successful fetch resurrects the row and resets
|
|
45
|
-
* `failure_count`; `ids` links it to the slug rows it was found through
|
|
46
|
-
* (existing links are kept when `ids` is omitted). Throws when the
|
|
47
|
-
* endpoint returns no charger.
|
|
48
|
-
*/
|
|
49
|
-
syncLoad(slug: string, locale: string, slugsId?: PicSlugsId): Promise<PicChargers>;
|
|
40
|
+
fetchAndStore(slug: string, locale: string, slugsId?: PicSlugsId): Promise<PicChargers>;
|
|
50
41
|
/** Snapshot sync from a full-feed file dump. Does not touch pricebooks. */
|
|
51
|
-
|
|
52
|
-
protected
|
|
42
|
+
syncFile(path: string): Promise<SyncSummary>;
|
|
43
|
+
protected syncSnapshot(docs: TeslaClientCharger[]): Promise<SyncSummary>;
|
|
53
44
|
}
|
|
54
45
|
export declare const chargersApi: () => ChargersApi;
|
|
55
46
|
//# sourceMappingURL=ChargersApi.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChargersApi.d.ts","sourceRoot":"","sources":["../../src/api/ChargersApi.ts"],"names":[],"mappings":"AAOA,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;AAOhF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"ChargersApi.d.ts","sourceRoot":"","sources":["../../src/api/ChargersApi.ts"],"names":[],"mappings":"AAOA,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;AAOhF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAQ1D,qBAAa,WAAY,SAAQ,IAAI;;IAStB,GAAG,CACd,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,SAAS,CACpB,IAAI,EAAE,aAAa,EACnB,EAAE,EAAE,IAAI,EACR,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,aAAa,EAAE,CAAC;IAuBd,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;IAoEvB,2EAA2E;IAC9D,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;cAKzC,YAAY,CAAC,IAAI,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;CAK/E;AAGD,eAAO,MAAM,WAAW,mBAAqC,CAAC"}
|
package/dist/api/ChargersApi.js
CHANGED
|
@@ -7,8 +7,16 @@ import { picChargersStore, picPricebooksStore, picSlugsStore, transaction, } fro
|
|
|
7
7
|
import { FAILURE_DEPRIORITIZE_THRESHOLD, isFresh, MAX_CHARGER_FETCHES, } from "../common/chargers.common.js";
|
|
8
8
|
import { IApi } from "./IApi.js";
|
|
9
9
|
import { pricebookCoversInstant, samePricebookGroup, } from "../common/pricebooks.common.js";
|
|
10
|
+
import { singleFlight } from "../common/concurrency.common.js";
|
|
10
11
|
import { ChargersSync } from "../sync/ChargersSync.js";
|
|
11
12
|
export class ChargersApi extends IApi {
|
|
13
|
+
// Coalesce concurrent fetches for the same site. A parallel runPricing pass
|
|
14
|
+
// resolves many charges to the same slug at once, before the first fetch has
|
|
15
|
+
// stored the row for the DB freshness cache to dedup them. Keyed by slug —
|
|
16
|
+
// location_url_slug is unique, so slugsId is consistent per key. In-flight
|
|
17
|
+
// only (cleared on settle); freshness/staleness still drives whether a new
|
|
18
|
+
// fetch runs.
|
|
19
|
+
#fetchInFlight = singleFlight();
|
|
12
20
|
async get(item, locale = "de-DE", radiusKm) {
|
|
13
21
|
const [found] = await this.query(item, locale, radiusKm, 1);
|
|
14
22
|
return found ?? null;
|
|
@@ -64,7 +72,7 @@ export class ChargersApi extends IApi {
|
|
|
64
72
|
}
|
|
65
73
|
fetches++;
|
|
66
74
|
try {
|
|
67
|
-
const charger = await this.
|
|
75
|
+
const charger = await this.fetchAndStore(candidate.slug, locale, candidate.slugsId);
|
|
68
76
|
if (charger.failure_count > 0)
|
|
69
77
|
await chargersStore.resetFailed(charger.id);
|
|
70
78
|
await slugsStore.resetFailed(candidate.slugsId);
|
|
@@ -127,6 +135,9 @@ export class ChargersApi extends IApi {
|
|
|
127
135
|
const meta = createMeta();
|
|
128
136
|
await this.initialInserts(picChargersStore(), teslaClientChargersSchema.parse(json), (charger) => chargerToInitializer({ charger, meta }));
|
|
129
137
|
}
|
|
138
|
+
async fetchAndStore(slug, locale, slugsId) {
|
|
139
|
+
return this.#fetchInFlight(`${slug} ${locale}`, () => this.#doFetchAndStore(slug, locale, slugsId));
|
|
140
|
+
}
|
|
130
141
|
/**
|
|
131
142
|
* Fetch one charger by its details slug and upsert it on `location_guid`,
|
|
132
143
|
* recording its pricebooks as history in the same transaction: when no
|
|
@@ -137,7 +148,7 @@ export class ChargersApi extends IApi {
|
|
|
137
148
|
* (existing links are kept when `ids` is omitted). Throws when the
|
|
138
149
|
* endpoint returns no charger.
|
|
139
150
|
*/
|
|
140
|
-
async
|
|
151
|
+
async #doFetchAndStore(slug, locale, slugsId) {
|
|
141
152
|
const clientDoc = await teslaClient().fetchCharger(slug, locale);
|
|
142
153
|
if (!clientDoc.charger)
|
|
143
154
|
throw new Error(`charger fetch for slug "${slug}" returned no charger` +
|
|
@@ -172,11 +183,11 @@ export class ChargersApi extends IApi {
|
|
|
172
183
|
});
|
|
173
184
|
}
|
|
174
185
|
/** Snapshot sync from a full-feed file dump. Does not touch pricebooks. */
|
|
175
|
-
async
|
|
186
|
+
async syncFile(path) {
|
|
176
187
|
const json = json5.parse(await readFile(path, { encoding: "utf8" }));
|
|
177
|
-
return await this.
|
|
188
|
+
return await this.syncSnapshot(teslaClientChargersSchema.parse(json));
|
|
178
189
|
}
|
|
179
|
-
async
|
|
190
|
+
async syncSnapshot(docs) {
|
|
180
191
|
const meta = createMeta();
|
|
181
192
|
const sync = new ChargersSync();
|
|
182
193
|
return await sync.snapshot({ docs, meta });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChargersApi.js","sourceRoot":"","sources":["../../src/api/ChargersApi.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,oBAAoB,EACpB,sBAAsB,GACvB,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;AAGnD,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,yBAAyB,CAAC;AAEvD,MAAM,OAAO,WAAY,SAAQ,IAAI;
|
|
1
|
+
{"version":3,"file":"ChargersApi.js","sourceRoot":"","sources":["../../src/api/ChargersApi.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;AAQjC,qBAAa,oBAAqB,SAAQ,IAAI;IAC/B,UAAU,IAAI,OAAO,CAAC,cAAc,CAAC;IAmDrC,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"}
|
|
@@ -3,46 +3,43 @@ import { chargingProcessesStore } from "@mxpicture/tesla-superchargers-mate/stor
|
|
|
3
3
|
import { chargersApi } from "./ChargersApi.js";
|
|
4
4
|
import { IApi } from "./IApi.js";
|
|
5
5
|
import { teslaChargingRate } from "../common/pricebooks.common.js";
|
|
6
|
-
import { FAILURE_DEPRIORITIZE_THRESHOLD } from "../common/chargers.common.js";
|
|
6
|
+
import { FAILURE_DEPRIORITIZE_THRESHOLD, PRICING_FETCH_CONCURRENCY, } from "../common/chargers.common.js";
|
|
7
|
+
import { mapWithConcurrency } from "../common/concurrency.common.js";
|
|
7
8
|
export class ChargingProcessesApi extends IApi {
|
|
8
9
|
async runPricing() {
|
|
9
10
|
const store = chargingProcessesStore();
|
|
10
11
|
const charges = await this.getUnpricedCharges();
|
|
11
|
-
const
|
|
12
|
-
unpricedCharges: charges.length,
|
|
13
|
-
items: [],
|
|
14
|
-
};
|
|
15
|
-
for (const charge of charges) {
|
|
12
|
+
const items = await mapWithConcurrency(charges, PRICING_FETCH_CONCURRENCY, async (charge) => {
|
|
16
13
|
const item = { charge, topic: "unknown" };
|
|
17
|
-
summary.items.push(item);
|
|
18
14
|
if (charge.failure_count &&
|
|
19
15
|
charge.failure_count >= FAILURE_DEPRIORITIZE_THRESHOLD) {
|
|
20
16
|
item.topic = "failureLimitReached";
|
|
21
|
-
|
|
17
|
+
return item;
|
|
22
18
|
}
|
|
23
19
|
const pricebooks = await chargersApi().getPrices({ latitude: charge.latitude, longitude: charge.longitude }, charge.start_date);
|
|
24
20
|
const rate = teslaChargingRate(pricebooks);
|
|
25
21
|
item.rate = rate;
|
|
26
22
|
if (!rate) {
|
|
27
23
|
item.topic = "noRate";
|
|
28
|
-
item.failure_count = await store.
|
|
29
|
-
|
|
24
|
+
item.failure_count = await store.incrementFailed(item.charge.id);
|
|
25
|
+
return item;
|
|
30
26
|
}
|
|
31
27
|
const energy = charge.charge_energy_used ?? charge.charge_energy_added;
|
|
32
28
|
item.energy = energy;
|
|
33
29
|
if (energy === null || !Number.isFinite(Number(energy))) {
|
|
34
30
|
item.topic = "noEnergyValue";
|
|
35
|
-
item.failure_count = await store.
|
|
36
|
-
|
|
31
|
+
item.failure_count = await store.incrementFailed(item.charge.id);
|
|
32
|
+
return item;
|
|
37
33
|
}
|
|
38
34
|
const cost = Number((rate.rate * Number(energy)).toFixed(2));
|
|
39
35
|
item.cost = cost;
|
|
40
36
|
await chargingProcessesApi().updatePrice(charge.id, cost);
|
|
41
37
|
item.topic = "chargeUpdated";
|
|
42
38
|
item.failure_count = 0;
|
|
43
|
-
await store.
|
|
44
|
-
|
|
45
|
-
|
|
39
|
+
await store.resetFailed(item.charge.id);
|
|
40
|
+
return item;
|
|
41
|
+
});
|
|
42
|
+
return { unpricedCharges: charges.length, items };
|
|
46
43
|
}
|
|
47
44
|
async getUnpricedCharges() {
|
|
48
45
|
return await chargingProcessesStore().getUnpricedCharges();
|
|
@@ -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,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,
|
|
1
|
+
{"version":3,"file":"ChargingProcessesApi.js","sourceRoot":"","sources":["../../src/api/ChargingProcessesApi.ts"],"names":[],"mappings":"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"}
|
package/dist/api/FailuresApi.js
CHANGED
|
@@ -18,7 +18,7 @@ export class FailuresApi extends IApi {
|
|
|
18
18
|
async getFailed(source, threshold = FAILURE_DEPRIORITIZE_THRESHOLD, onlyUnnotified = false) {
|
|
19
19
|
const result = { charges: [], chargers: [], slugs: [] };
|
|
20
20
|
if (source === "all" || source === "charges")
|
|
21
|
-
result.charges = await chargingProcessesStore().
|
|
21
|
+
result.charges = await chargingProcessesStore().getFailed(threshold, onlyUnnotified);
|
|
22
22
|
if (source === "all" || source === "chargers")
|
|
23
23
|
result.chargers = await picChargersStore().getFailed(threshold, onlyUnnotified);
|
|
24
24
|
if (source === "all" || source === "slugs")
|
|
@@ -33,7 +33,7 @@ export class FailuresApi extends IApi {
|
|
|
33
33
|
async resetFailed(source, id) {
|
|
34
34
|
switch (source) {
|
|
35
35
|
case "charges":
|
|
36
|
-
await chargingProcessesStore().
|
|
36
|
+
await chargingProcessesStore().resetFailed(Number(id));
|
|
37
37
|
return;
|
|
38
38
|
case "chargers":
|
|
39
39
|
await picChargersStore().resetFailed(id);
|
|
@@ -47,7 +47,7 @@ export class FailuresApi extends IApi {
|
|
|
47
47
|
async resetAllFailed(source) {
|
|
48
48
|
const counts = { charges: 0, chargers: 0, slugs: 0 };
|
|
49
49
|
if (source === "all" || source === "charges")
|
|
50
|
-
counts.charges = await chargingProcessesStore().
|
|
50
|
+
counts.charges = await chargingProcessesStore().resetAllFailed();
|
|
51
51
|
if (source === "all" || source === "chargers")
|
|
52
52
|
counts.chargers = await picChargersStore().resetAllFailed();
|
|
53
53
|
if (source === "all" || source === "slugs")
|
|
@@ -77,7 +77,7 @@ export class FailuresApi extends IApi {
|
|
|
77
77
|
if (!(await sendPushover(cfg, message, logger)))
|
|
78
78
|
return summary;
|
|
79
79
|
summary.sent = true;
|
|
80
|
-
await chargingProcessesStore().
|
|
80
|
+
await chargingProcessesStore().markNotified(failed.charges.map((c) => c.id));
|
|
81
81
|
await picChargersStore().markNotified(failed.chargers.map((c) => c.id));
|
|
82
82
|
await picSlugsStore().markNotified(failed.slugs.map((s) => s.id));
|
|
83
83
|
return summary;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FailuresApi.js","sourceRoot":"","sources":["../../src/api/FailuresApi.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,aAAa,GACd,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAC9E,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EACL,qBAAqB,EACrB,YAAY,GACb,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAOjC;;;;;GAKG;AACH,MAAM,OAAO,WAAY,SAAQ,IAAI;IACnC;;;;OAIG;IACI,KAAK,CAAC,SAAS,CACpB,MAA6B,EAC7B,YAAoB,8BAA8B,EAClD,cAAc,GAAG,KAAK;QAEtB,MAAM,MAAM,GAAkB,EAAE,OAAO,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QAEvE,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,SAAS;YAC1C,MAAM,CAAC,OAAO,GAAG,MAAM,sBAAsB,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"FailuresApi.js","sourceRoot":"","sources":["../../src/api/FailuresApi.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,7 +37,7 @@ export declare class InvoicesApi extends IApi {
|
|
|
37
37
|
* report or Pushover is unconfigured; the count is reported either way.
|
|
38
38
|
*/
|
|
39
39
|
notifyUnmatched(logger?: (m: string) => void): Promise<UnmatchedInvoiceNotifySummary>;
|
|
40
|
-
protected
|
|
40
|
+
protected syncSnapshot(csvs: InvoicesCsv[]): Promise<SyncSummary>;
|
|
41
41
|
}
|
|
42
42
|
export declare const invoicesApi: () => InvoicesApi;
|
|
43
43
|
//# sourceMappingURL=InvoicesApi.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InvoicesApi.d.ts","sourceRoot":"","sources":["../../src/api/InvoicesApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,WAAW,EACjB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAYhF,OAAO,KAAK,EAEV,IAAI,EACJ,sBAAsB,EACvB,MAAM,2CAA2C,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mDAAmD,CAAC;AAEvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kDAAkD,CAAC;AAErF,qBAAa,WAAY,SAAQ,IAAI;IACtB,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;IAqChD;;;;OAIG;cACa,gBAAgB,CAC9B,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,GACvB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAmB9B;;;;;;OAMG;IACU,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAc9C,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAI5D;;;;OAIG;IACU,YAAY,CACvB,cAAc,UAAQ,GACrB,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAMpC;;;;;;;OAOG;IACU,eAAe,CAC1B,MAAM,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAe,GACrC,OAAO,CAAC,6BAA6B,CAAC;cAqBzB,
|
|
1
|
+
{"version":3,"file":"InvoicesApi.d.ts","sourceRoot":"","sources":["../../src/api/InvoicesApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,WAAW,EACjB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,6BAA6B,EAAE,MAAM,4BAA4B,CAAC;AAYhF,OAAO,KAAK,EAEV,IAAI,EACJ,sBAAsB,EACvB,MAAM,2CAA2C,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mDAAmD,CAAC;AAEvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kDAAkD,CAAC;AAErF,qBAAa,WAAY,SAAQ,IAAI;IACtB,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;IAqChD;;;;OAIG;cACa,gBAAgB,CAC9B,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,GAAG,CAAC,MAAM,CAAC,GACvB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAmB9B;;;;;;OAMG;IACU,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAc9C,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAI5D;;;;OAIG;IACU,YAAY,CACvB,cAAc,UAAQ,GACrB,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAMpC;;;;;;;OAOG;IACU,eAAe,CAC1B,MAAM,GAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAe,GACrC,OAAO,CAAC,6BAA6B,CAAC;cAqBzB,YAAY,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;CAmBxE;AAGD,eAAO,MAAM,WAAW,mBAAqC,CAAC"}
|
package/dist/api/InvoicesApi.js
CHANGED
|
@@ -67,7 +67,7 @@ export class InvoicesApi extends IApi {
|
|
|
67
67
|
if (errors.length > 0)
|
|
68
68
|
throw new Error(`invoices CSV: ${errors.length} invalid row(s)\n` +
|
|
69
69
|
formatInvoicesCsvErrors(errors));
|
|
70
|
-
const summary = await this.
|
|
70
|
+
const summary = await this.syncSnapshot(invoices);
|
|
71
71
|
// skipped pre-parse, so mirror the plan's null-key accounting
|
|
72
72
|
summary.feedCount += nullInvoiceNumbers;
|
|
73
73
|
summary.feedNullKeys += nullInvoiceNumbers;
|
|
@@ -109,7 +109,7 @@ export class InvoicesApi extends IApi {
|
|
|
109
109
|
await chargingProcessesStore().markUnmatchedInvoiceNotified(charges.map((c) => c.id));
|
|
110
110
|
return summary;
|
|
111
111
|
}
|
|
112
|
-
async
|
|
112
|
+
async syncSnapshot(csvs) {
|
|
113
113
|
const cp = chargingProcessesStore();
|
|
114
114
|
const meta = createMeta();
|
|
115
115
|
const docs = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InvoicesApi.js","sourceRoot":"","sources":["../../src/api/InvoicesApi.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"InvoicesApi.js","sourceRoot":"","sources":["../../src/api/InvoicesApi.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,cAAc,EACd,gBAAgB,GAEjB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,+CAA+C,CAAC;AAG3E,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EACL,qBAAqB,EACrB,YAAY,GACb,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,2CAA2C,CAAC;AAOnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mDAAmD,CAAC;AAGvF,MAAM,OAAO,WAAY,SAAQ,IAAI;IAC5B,KAAK,CAAC,WAAW;QACtB,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;QAC1B,MAAM,WAAW,GAAG,IAAI,GAAG,CACzB,CAAC,MAAM,oBAAoB,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAClD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CACxB,CACF,CAAC;QAEF,MAAM,OAAO,GAAgB;YAC3B,SAAS,EAAE,CAAC;YACZ,cAAc,EAAE,CAAC;YACjB,YAAY,EAAE,CAAC;YACf,QAAQ,EAAE,CAAC;YACX,OAAO,EAAE,CAAC;SACX,CAAC;QAEF,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAC5C,KAAK,EACL,MAAM,EACN,IAAI,EACJ,WAAW,CACZ,CAAC;YACF,IAAI,UAAU,EAAE,CAAC;gBACf,OAAO,CAAC,SAAS,IAAI,UAAU,CAAC,SAAS,CAAC;gBAC1C,OAAO,CAAC,cAAc,IAAI,UAAU,CAAC,cAAc,CAAC;gBACpD,OAAO,CAAC,YAAY,IAAI,UAAU,CAAC,YAAY,CAAC;gBAChD,OAAO,CAAC,QAAQ,IAAI,UAAU,CAAC,QAAQ,CAAC;gBACxC,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC;YACxC,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACO,KAAK,CAAC,gBAAgB,CAC9B,KAAmB,EACnB,MAAqB,EACrB,IAAU,EACV,WAAwB;QAExB,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;QAC3C,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7C,IAAI,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,OAAO,IAAI,CAAC;QAE5C,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAEjD,MAAM,oBAAoB,EAAE,CAAC,MAAM,CAAC,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACnE,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAE3B,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,8BAA8B,KAAK,CAAC,IAAI,WAAW,EAAE,KAAK,CAAC,CAAC;YACzE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,OAAO,CAAC,OAAe;QAClC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,kBAAkB,EAAE,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC3E,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;YACnB,MAAM,IAAI,KAAK,CACb,iBAAiB,MAAM,CAAC,MAAM,mBAAmB;gBAC/C,uBAAuB,CAAC,MAAM,CAAC,CAClC,CAAC;QACJ,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAClD,8DAA8D;QAC9D,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC;QACxC,OAAO,CAAC,YAAY,IAAI,kBAAkB,CAAC;QAC3C,OAAO,OAAO,CAAC;IACjB,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,IAAY;QACnC,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACxE,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,YAAY,CACvB,cAAc,GAAG,KAAK;QAEtB,OAAO,MAAM,sBAAsB,EAAE,CAAC,0BAA0B,CAC9D,cAAc,CACf,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,eAAe,CAC1B,SAA8B,GAAG,EAAE,GAAE,CAAC;QAEtC,MAAM,GAAG,GAAG,qBAAqB,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAkC;YAC7C,UAAU,EAAE,GAAG,IAAI,IAAI;YACvB,IAAI,EAAE,KAAK;YACX,OAAO,EAAE,OAAO,CAAC,MAAM;SACxB,CAAC;QAEF,MAAM,OAAO,GAAG,6BAA6B,CAAC,OAAO,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO,IAAI,CAAC,GAAG;YAAE,OAAO,OAAO,CAAC;QAErC,IAAI,CAAC,CAAC,MAAM,YAAY,CAAC,GAAG,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;YAAE,OAAO,OAAO,CAAC;QAEhE,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;QACpB,MAAM,sBAAsB,EAAE,CAAC,4BAA4B,CACzD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CACzB,CAAC;QACF,OAAO,OAAO,CAAC;IACjB,CAAC;IAES,KAAK,CAAC,YAAY,CAAC,IAAmB;QAC9C,MAAM,EAAE,GAAG,sBAAsB,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;QAC1B,MAAM,IAAI,GAAc,EAAE,CAAC;QAE3B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,mBAAmB,GAAG,MAAM,EAAE,CAAC,uBAAuB,CAC1D,GAAG,CAAC,GAAG,EACP,GAAG,CAAC,mBAAmB,CACxB,CAAC;YACF,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,cAAc,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,mBAAmB,EAAE,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,IAAI,GAAG,IAAI,YAAY,EAAE,CAAC;QAChC,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC;YACzB,IAAI;YACJ,IAAI;SACL,CAAC,CAAC;IACL,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"}
|
package/dist/api/SlugsApi.d.ts
CHANGED
|
@@ -8,9 +8,9 @@ export declare class SlugsApi extends IApi {
|
|
|
8
8
|
query(item: CoordinateAny, radiusKm?: number): Promise<PicSlugsDistance[]>;
|
|
9
9
|
initialLoad(): Promise<SyncSummary>;
|
|
10
10
|
initialLoadFile(path: string): Promise<SyncSummary>;
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
protected
|
|
11
|
+
sync(): Promise<SyncSummary>;
|
|
12
|
+
syncFile(path: string): Promise<SyncSummary>;
|
|
13
|
+
protected syncSnapshot(docs: TeslaClientSlug[]): Promise<SyncSummary>;
|
|
14
14
|
}
|
|
15
15
|
export declare const slugsApi: () => SlugsApi;
|
|
16
16
|
//# sourceMappingURL=SlugsApi.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SlugsApi.d.ts","sourceRoot":"","sources":["../../src/api/SlugsApi.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAClF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAY1D,qBAAa,QAAS,SAAQ,IAAI;IACnB,GAAG,CACd,IAAI,EAAE,aAAa,EACnB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAMtB,KAAK,CAChB,IAAI,EAAE,aAAa,EACnB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAMjB,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;IAgBnC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAgBnD,
|
|
1
|
+
{"version":3,"file":"SlugsApi.d.ts","sourceRoot":"","sources":["../../src/api/SlugsApi.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAClF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4CAA4C,CAAC;AAChF,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAClF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAY1D,qBAAa,QAAS,SAAQ,IAAI;IACnB,GAAG,CACd,IAAI,EAAE,aAAa,EACnB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAMtB,KAAK,CAChB,IAAI,EAAE,aAAa,EACnB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,gBAAgB,EAAE,CAAC;IAMjB,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC;IAgBnC,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAgBnD,IAAI,IAAI,OAAO,CAAC,WAAW,CAAC;IAK5B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;cAIzC,YAAY,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;CAK5E;AAGD,eAAO,MAAM,QAAQ,gBAAkC,CAAC"}
|
package/dist/api/SlugsApi.js
CHANGED
|
@@ -46,14 +46,14 @@ export class SlugsApi extends IApi {
|
|
|
46
46
|
deleted: 0,
|
|
47
47
|
};
|
|
48
48
|
}
|
|
49
|
-
async
|
|
49
|
+
async sync() {
|
|
50
50
|
const clientDocs = await teslaClient().fetchSlugs();
|
|
51
|
-
return await this.
|
|
51
|
+
return await this.syncSnapshot(clientDocs);
|
|
52
52
|
}
|
|
53
|
-
async
|
|
54
|
-
return await this.
|
|
53
|
+
async syncFile(path) {
|
|
54
|
+
return await this.syncSnapshot(await readSlugsFile(path));
|
|
55
55
|
}
|
|
56
|
-
async
|
|
56
|
+
async syncSnapshot(docs) {
|
|
57
57
|
const meta = createMeta();
|
|
58
58
|
const sync = new SlugsSync();
|
|
59
59
|
return await sync.snapshot({ docs, meta });
|
package/dist/api/SlugsApi.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SlugsApi.js","sourceRoot":"","sources":["../../src/api/SlugsApi.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,WAAW,GACZ,MAAM,4CAA4C,CAAC;AACpD,OAAO,EACL,UAAU,EACV,iBAAiB,GAClB,MAAM,+CAA+C,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AAI1E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,sFAAsF;AACtF,MAAM,aAAa,GAAG,KAAK,EAAE,IAAY,EAA8B,EAAE;IACvE,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;IACrE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IACvD,IAAI,OAAO,GAAG,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,eAAe,IAAI,cAAc,OAAO,kBAAkB,CAAC,CAAC;IAC3E,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,OAAO,QAAS,SAAQ,IAAI;IACzB,KAAK,CAAC,GAAG,CACd,IAAmB,EACnB,QAAiB;QAEjB,OAAO,QAAQ;YACb,CAAC,CAAC,MAAM,aAAa,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC;YACnD,CAAC,CAAC,MAAM,aAAa,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;IAClD,CAAC;IAEM,KAAK,CAAC,KAAK,CAChB,IAAmB,EACnB,QAAiB;QAEjB,OAAO,QAAQ;YACb,CAAC,CAAC,MAAM,aAAa,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC;YACrD,CAAC,CAAC,MAAM,aAAa,EAAE,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC;IAEM,KAAK,CAAC,WAAW;QACtB,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,CACrC,aAAa,EAAE,EACf,MAAM,WAAW,EAAE,CAAC,UAAU,EAAE,EAChC,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAC5C,CAAC;QACF,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,cAAc,EAAE,CAAC;YACjB,YAAY,EAAE,CAAC;YACf,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,CAAC;SACX,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,eAAe,CAAC,IAAY;QACvC,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,CACrC,aAAa,EAAE,EACf,MAAM,aAAa,CAAC,IAAI,CAAC,EACzB,CAAC,IAAI,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAC5C,CAAC;QACF,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,cAAc,EAAE,CAAC;YACjB,YAAY,EAAE,CAAC;YACf,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,CAAC;SACX,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"SlugsApi.js","sourceRoot":"","sources":["../../src/api/SlugsApi.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,13 @@ export declare const CHARGER_STALE_AFTER_DAYS = 5;
|
|
|
5
5
|
export declare const MAX_CHARGER_FETCHES = 3;
|
|
6
6
|
/** Candidates that failed this often are tried after the rest, so dead slugs stop burning the fetch budget first. */
|
|
7
7
|
export declare const FAILURE_DEPRIORITIZE_THRESHOLD = 3;
|
|
8
|
+
/**
|
|
9
|
+
* Charges priced concurrently in one runPricing pass. Modest by default so the
|
|
10
|
+
* parallel detail fetches stay under the postgres pool (db.ts max 10, each fetch
|
|
11
|
+
* opens its own transaction) and keep Web Unlocker / Akamai load reasonable.
|
|
12
|
+
* Override with PRICING_FETCH_CONCURRENCY.
|
|
13
|
+
*/
|
|
14
|
+
export declare const PRICING_FETCH_CONCURRENCY: number;
|
|
8
15
|
export declare const isFresh: (row: PicChargers) => boolean;
|
|
9
16
|
/** FK links are not part of the feed; a snapshot re-sync must not wipe them. */
|
|
10
17
|
export declare const withoutFkColumns: (columns: string[]) => string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chargers.common.d.ts","sourceRoot":"","sources":["../../src/common/chargers.common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iDAAiD,CAAC;AAEnF,oEAAoE;AACpE,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C,wEAAwE;AACxE,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,qHAAqH;AACrH,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAEhD,eAAO,MAAM,OAAO,GAAI,KAAK,WAAW,KAAG,OAEkB,CAAC;AAE9D,gFAAgF;AAChF,eAAO,MAAM,gBAAgB,GAAI,SAAS,MAAM,EAAE,KAAG,MAAM,EACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"chargers.common.d.ts","sourceRoot":"","sources":["../../src/common/chargers.common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iDAAiD,CAAC;AAEnF,oEAAoE;AACpE,eAAO,MAAM,wBAAwB,IAAI,CAAC;AAE1C,wEAAwE;AACxE,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,qHAAqH;AACrH,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAEhD;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,QACc,CAAC;AAErD,eAAO,MAAM,OAAO,GAAI,KAAK,WAAW,KAAG,OAEkB,CAAC;AAE9D,gFAAgF;AAChF,eAAO,MAAM,gBAAgB,GAAI,SAAS,MAAM,EAAE,KAAG,MAAM,EACJ,CAAC"}
|
|
@@ -4,6 +4,13 @@ export const CHARGER_STALE_AFTER_DAYS = 5;
|
|
|
4
4
|
export const MAX_CHARGER_FETCHES = 3;
|
|
5
5
|
/** Candidates that failed this often are tried after the rest, so dead slugs stop burning the fetch budget first. */
|
|
6
6
|
export const FAILURE_DEPRIORITIZE_THRESHOLD = 3;
|
|
7
|
+
/**
|
|
8
|
+
* Charges priced concurrently in one runPricing pass. Modest by default so the
|
|
9
|
+
* parallel detail fetches stay under the postgres pool (db.ts max 10, each fetch
|
|
10
|
+
* opens its own transaction) and keep Web Unlocker / Akamai load reasonable.
|
|
11
|
+
* Override with PRICING_FETCH_CONCURRENCY.
|
|
12
|
+
*/
|
|
13
|
+
export const PRICING_FETCH_CONCURRENCY = Number(process.env.PRICING_FETCH_CONCURRENCY) || 4;
|
|
7
14
|
export const isFresh = (row) => row.fetched_at.getTime() >
|
|
8
15
|
Date.now() - CHARGER_STALE_AFTER_DAYS * 24 * 60 * 60 * 1000;
|
|
9
16
|
/** FK links are not part of the feed; a snapshot re-sync must not wipe them. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chargers.common.js","sourceRoot":"","sources":["../../src/common/chargers.common.ts"],"names":[],"mappings":"AAEA,oEAAoE;AACpE,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAE1C,wEAAwE;AACxE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAErC,qHAAqH;AACrH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC;AAEhD,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,GAAgB,EAAW,EAAE,CACnD,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE;IACxB,IAAI,CAAC,GAAG,EAAE,GAAG,wBAAwB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE9D,gFAAgF;AAChF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAiB,EAAY,EAAE,CAC9D,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,cAAc,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"chargers.common.js","sourceRoot":"","sources":["../../src/common/chargers.common.ts"],"names":[],"mappings":"AAEA,oEAAoE;AACpE,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAE1C,wEAAwE;AACxE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAErC,qHAAqH;AACrH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,yBAAyB,GACpC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;AAErD,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,GAAgB,EAAW,EAAE,CACnD,GAAG,CAAC,UAAU,CAAC,OAAO,EAAE;IACxB,IAAI,CAAC,GAAG,EAAE,GAAG,wBAAwB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAE9D,gFAAgF;AAChF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAiB,EAAY,EAAE,CAC9D,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,KAAK,cAAc,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run `fn` over `items` with at most `limit` promises in flight at once,
|
|
3
|
+
* returning results in input order. Rejects on the first task rejection
|
|
4
|
+
* (Promise.all semantics) — one failing item fails the whole pass, matching the
|
|
5
|
+
* sequential loop this replaces.
|
|
6
|
+
*/
|
|
7
|
+
export declare const mapWithConcurrency: <T, R>(items: readonly T[], limit: number, fn: (item: T, index: number) => Promise<R>) => Promise<R[]>;
|
|
8
|
+
/**
|
|
9
|
+
* Single-flight de-duplication: concurrent calls with the same key share one
|
|
10
|
+
* in-flight promise; the key is freed once it settles, so a later call runs `fn`
|
|
11
|
+
* again (freshness/staleness still decides whether a *new* fetch happens).
|
|
12
|
+
* Different keys never block each other.
|
|
13
|
+
*/
|
|
14
|
+
export declare const singleFlight: <R>() => ((key: string, fn: () => Promise<R>) => Promise<R>);
|
|
15
|
+
//# sourceMappingURL=concurrency.common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"concurrency.common.d.ts","sourceRoot":"","sources":["../../src/common/concurrency.common.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAU,CAAC,EAAE,CAAC,EAC3C,OAAO,SAAS,CAAC,EAAE,EACnB,OAAO,MAAM,EACb,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC,CAAC,KACzC,OAAO,CAAC,CAAC,EAAE,CAYb,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,OAAK,CAAC,CAClC,GAAG,EAAE,MAAM,EACX,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KACjB,OAAO,CAAC,CAAC,CAAC,CASd,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Run `fn` over `items` with at most `limit` promises in flight at once,
|
|
3
|
+
* returning results in input order. Rejects on the first task rejection
|
|
4
|
+
* (Promise.all semantics) — one failing item fails the whole pass, matching the
|
|
5
|
+
* sequential loop this replaces.
|
|
6
|
+
*/
|
|
7
|
+
export const mapWithConcurrency = async (items, limit, fn) => {
|
|
8
|
+
const results = new Array(items.length);
|
|
9
|
+
let next = 0;
|
|
10
|
+
const worker = async () => {
|
|
11
|
+
while (next < items.length) {
|
|
12
|
+
const i = next++;
|
|
13
|
+
results[i] = await fn(items[i], i);
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
const workers = Math.max(1, Math.min(limit, items.length));
|
|
17
|
+
await Promise.all(Array.from({ length: workers }, worker));
|
|
18
|
+
return results;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Single-flight de-duplication: concurrent calls with the same key share one
|
|
22
|
+
* in-flight promise; the key is freed once it settles, so a later call runs `fn`
|
|
23
|
+
* again (freshness/staleness still decides whether a *new* fetch happens).
|
|
24
|
+
* Different keys never block each other.
|
|
25
|
+
*/
|
|
26
|
+
export const singleFlight = () => {
|
|
27
|
+
const inFlight = new Map();
|
|
28
|
+
return (key, fn) => {
|
|
29
|
+
const existing = inFlight.get(key);
|
|
30
|
+
if (existing)
|
|
31
|
+
return existing;
|
|
32
|
+
const p = fn().finally(() => inFlight.delete(key));
|
|
33
|
+
inFlight.set(key, p);
|
|
34
|
+
return p;
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=concurrency.common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"concurrency.common.js","sourceRoot":"","sources":["../../src/common/concurrency.common.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EACrC,KAAmB,EACnB,KAAa,EACb,EAA0C,EAC5B,EAAE;IAChB,MAAM,OAAO,GAAG,IAAI,KAAK,CAAI,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3C,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,MAAM,GAAG,KAAK,IAAmB,EAAE;QACvC,OAAO,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACrC,CAAC;IACH,CAAC,CAAC;IACF,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3D,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IAC3D,OAAO,OAAO,CAAC;AACjB,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,GAGX,EAAE;IACjB,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC/C,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE;QACjB,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC9B,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACnD,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,CAAC,CAAC;IACX,CAAC,CAAC;AACJ,CAAC,CAAC"}
|
package/dist/common/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/common/index.ts"],"names":[],"mappings":"AACA,cAAc,sBAAsB,CAAC;AACrC,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,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC"}
|
package/dist/common/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// This file is auto-generated by build-cli. Do not edit manually.
|
|
2
2
|
export * from "./chargers.common.js";
|
|
3
|
+
export * from "./concurrency.common.js";
|
|
3
4
|
export * from "./failures.common.js";
|
|
4
5
|
export * from "./invoices.common.js";
|
|
5
6
|
export * from "./invoicesCsv.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,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,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC"}
|
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.17",
|
|
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.17",
|
|
48
|
+
"@mxpicture/tesla-superchargers-mate": "^0.1.17",
|
|
49
|
+
"@mxpicture/tesla-superchargers-cloud-store": "^0.1.17",
|
|
50
50
|
"csv-parse": "^7.0.1",
|
|
51
51
|
"json5": "^2.2.3",
|
|
52
52
|
"zod": "^4.4.3"
|