@mxpicture/tesla-superchargers-api 0.1.37 → 0.1.38
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 +49 -11
- package/dist/api/ChargersApi.d.ts.map +1 -1
- package/dist/api/ChargersApi.js +126 -48
- package/dist/api/ChargersApi.js.map +1 -1
- package/dist/api/ChargingProcessesApi.d.ts.map +1 -1
- package/dist/api/ChargingProcessesApi.js +1 -1
- package/dist/api/ChargingProcessesApi.js.map +1 -1
- package/dist/common/chargers.common.d.ts.map +1 -1
- package/dist/common/chargers.common.js +6 -4
- package/dist/common/chargers.common.js.map +1 -1
- package/dist/types/chargers.types.d.ts +2 -1
- package/dist/types/chargers.types.d.ts.map +1 -1
- package/package.json +4 -4
|
@@ -1,7 +1,7 @@
|
|
|
1
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, ChargerFetchPricesResult } from "../types/chargers.types.js";
|
|
4
|
+
import type { ChargerCandidate, 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 {
|
|
@@ -17,20 +17,35 @@ export declare class ChargersApi extends IApi {
|
|
|
17
17
|
getFavourite(id: PicChargersId): Promise<ChargerFavourite | null>;
|
|
18
18
|
queryFavourites(): Promise<ChargerFavourite[]>;
|
|
19
19
|
updateFavourite(id: PicChargersId, favourite: boolean): Promise<ChargerFavourite | null>;
|
|
20
|
-
fetchSingle(item: CoordinateAny, locale?: string, radiusKm?: number): Promise<PicChargers | null>;
|
|
21
20
|
/**
|
|
22
|
-
*
|
|
21
|
+
* The nearest confirmed charger at a coordinate — {@link fetchByCoordinates}
|
|
22
|
+
* with a limit of 1.
|
|
23
|
+
*/
|
|
24
|
+
fetchFirstByCoordinates(item: CoordinateAny, locale?: string, radiusKm?: number): Promise<PicChargers | null>;
|
|
25
|
+
/**
|
|
26
|
+
* Find the Superchargers at a coordinate: try the nearby slug rows
|
|
23
27
|
* (slugs first — their location_url_slug is the canonical details slug),
|
|
24
28
|
* answer from the db when the cached charger is fresh, otherwise fetch and
|
|
25
29
|
* store it via the chargers sync. Candidates whose failure_count reached
|
|
26
30
|
* {@link FAILURE_DEPRIORITIZE_THRESHOLD} are tried last (still by
|
|
27
|
-
* distance within each bucket). Returns the
|
|
28
|
-
* failed fetch bumps the source row's failure_count
|
|
29
|
-
* cached charger is returned rather than nothing when
|
|
30
|
-
* the fetch budget (`maxFetches`, default
|
|
31
|
-
* spent.
|
|
31
|
+
* distance within each bucket). Returns the confirmed chargers, nearest
|
|
32
|
+
* first, up to `limit`; a failed fetch bumps the source row's failure_count
|
|
33
|
+
* and moves on. A stale cached charger is returned rather than nothing when
|
|
34
|
+
* its refresh fails or the fetch budget (`maxFetches`, default
|
|
35
|
+
* {@link MAX_CHARGER_FETCHES}) is spent.
|
|
32
36
|
*/
|
|
33
|
-
|
|
37
|
+
fetchByCoordinates(item: CoordinateAny, locale?: string, radiusKm?: number, limit?: number, maxFetches?: number): Promise<PicChargers[]>;
|
|
38
|
+
/** The charger for a details slug, fetched on demand when it is missing or stale. */
|
|
39
|
+
fetchBySlug(slug: string, locale?: string): Promise<PicChargers | null>;
|
|
40
|
+
/**
|
|
41
|
+
* Resolve a list of candidates to stored chargers: repeat failers
|
|
42
|
+
* ({@link FAILURE_DEPRIORITIZE_THRESHOLD}) are tried after the rest, each
|
|
43
|
+
* slug is attempted once, and a fresh stored row answers without a fetch.
|
|
44
|
+
* At most `maxFetches` (default {@link MAX_CHARGER_FETCHES}) detail fetches
|
|
45
|
+
* run per call — past that a stale stored row is returned rather than
|
|
46
|
+
* nothing. Stops at `limit` results.
|
|
47
|
+
*/
|
|
48
|
+
fetch(candidates: ChargerCandidate[], locale?: string, limit?: number, maxFetches?: number): Promise<PicChargers[]>;
|
|
34
49
|
/**
|
|
35
50
|
* The pricebook rows valid at `at` for the Supercharger at a coordinate.
|
|
36
51
|
* The charger is resolved from the stored rows first — soft-deleted
|
|
@@ -47,9 +62,32 @@ export declare class ChargersApi extends IApi {
|
|
|
47
62
|
* a fetch-on-demand stored the charger's first group), that earliest group
|
|
48
63
|
* is used as the best available estimate.
|
|
49
64
|
*/
|
|
50
|
-
|
|
65
|
+
fetchPricesByCoordinates(item: CoordinateAny, at: Date, radiusKm?: number): Promise<ChargerFetchPricesResult>;
|
|
66
|
+
/**
|
|
67
|
+
* The pricebook rows valid at `at` for the Supercharger with this details
|
|
68
|
+
* slug. Same contract as {@link fetchPricesByCoordinates}, including the
|
|
69
|
+
* soft-deleted rows: `location_url_slug` lives on the charger itself, so a
|
|
70
|
+
* site Tesla removed from the feed — `pic_slugs` row hard-deleted, link
|
|
71
|
+
* NULLed — still answers for past dates.
|
|
72
|
+
*/
|
|
73
|
+
fetchPricesBySlug(slug: string, at: Date): Promise<ChargerFetchPricesResult>;
|
|
74
|
+
/**
|
|
75
|
+
* The pricebook rows valid at `at` for a stored charger id — the resolution
|
|
76
|
+
* key that survives everything, since it is the row's own. A stale row is
|
|
77
|
+
* refreshed through the slug it was fetched by when it still has one.
|
|
78
|
+
*/
|
|
79
|
+
fetchPricesById(id: PicChargersId, at: Date): Promise<ChargerFetchPricesResult>;
|
|
51
80
|
initialLoadFile(path: string): Promise<void>;
|
|
52
|
-
|
|
81
|
+
/**
|
|
82
|
+
* Fetch one charger by its details slug and store it, or answer from what is
|
|
83
|
+
* already stored when the fetch fails: a failed refresh returns `cached`
|
|
84
|
+
* with its bumped failure_count (stale beats nothing), a failed first fetch
|
|
85
|
+
* records the failure on the slug row and returns null. Never throws — the
|
|
86
|
+
* caller gets a charger or nothing, not an error. `slugsId` is the
|
|
87
|
+
* `pic_slugs` row the candidate came from; without it the slug is resolved
|
|
88
|
+
* again from the db.
|
|
89
|
+
*/
|
|
90
|
+
fetchAndStore(slug: string, locale: string, cached?: PicChargers | null, slugsId?: PicSlugsId): Promise<PicChargers | null>;
|
|
53
91
|
/** Snapshot sync from a full-feed file dump. Does not touch pricebooks. */
|
|
54
92
|
syncFile(path: string): Promise<SyncSummary>;
|
|
55
93
|
protected syncSnapshot(docs: TeslaClientCharger[]): Promise<SyncSummary>;
|
|
@@ -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,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,
|
|
1
|
+
{"version":3,"file":"ChargersApi.d.ts","sourceRoot":"","sources":["../../src/api/ChargersApi.ts"],"names":[],"mappings":"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"}
|
package/dist/api/ChargersApi.js
CHANGED
|
@@ -60,37 +60,58 @@ export class ChargersApi extends IApi {
|
|
|
60
60
|
}
|
|
61
61
|
// Coalesce concurrent fetches for the same site. A parallel runPricing pass
|
|
62
62
|
// resolves many charges to the same slug at once, before the first fetch has
|
|
63
|
-
// stored the row for the DB freshness cache to dedup them. Keyed by slug
|
|
64
|
-
//
|
|
65
|
-
//
|
|
66
|
-
//
|
|
63
|
+
// stored the row for the DB freshness cache to dedup them. Keyed by slug +
|
|
64
|
+
// locale — that pair is what the details endpoint is called with, so two
|
|
65
|
+
// pic_slugs rows sharing a location_url_slug are one fetch, not two.
|
|
66
|
+
// In-flight only (cleared on settle); freshness/staleness still drives
|
|
67
|
+
// whether a new fetch runs.
|
|
67
68
|
#fetchInFlight = singleFlight();
|
|
68
|
-
|
|
69
|
-
|
|
69
|
+
/**
|
|
70
|
+
* The nearest confirmed charger at a coordinate — {@link fetchByCoordinates}
|
|
71
|
+
* with a limit of 1.
|
|
72
|
+
*/
|
|
73
|
+
async fetchFirstByCoordinates(item, locale = "de-DE", radiusKm) {
|
|
74
|
+
const [found] = await this.fetchByCoordinates(item, locale, radiusKm, 1);
|
|
70
75
|
return found ?? null;
|
|
71
76
|
}
|
|
72
77
|
/**
|
|
73
|
-
* Find the
|
|
78
|
+
* Find the Superchargers at a coordinate: try the nearby slug rows
|
|
74
79
|
* (slugs first — their location_url_slug is the canonical details slug),
|
|
75
80
|
* answer from the db when the cached charger is fresh, otherwise fetch and
|
|
76
81
|
* store it via the chargers sync. Candidates whose failure_count reached
|
|
77
82
|
* {@link FAILURE_DEPRIORITIZE_THRESHOLD} are tried last (still by
|
|
78
|
-
* distance within each bucket). Returns the
|
|
79
|
-
* failed fetch bumps the source row's failure_count
|
|
80
|
-
* cached charger is returned rather than nothing when
|
|
81
|
-
* the fetch budget (`maxFetches`, default
|
|
82
|
-
* spent.
|
|
83
|
+
* distance within each bucket). Returns the confirmed chargers, nearest
|
|
84
|
+
* first, up to `limit`; a failed fetch bumps the source row's failure_count
|
|
85
|
+
* and moves on. A stale cached charger is returned rather than nothing when
|
|
86
|
+
* its refresh fails or the fetch budget (`maxFetches`, default
|
|
87
|
+
* {@link MAX_CHARGER_FETCHES}) is spent.
|
|
83
88
|
*/
|
|
84
|
-
async
|
|
85
|
-
const chargers = [];
|
|
89
|
+
async fetchByCoordinates(item, locale = "de-DE", radiusKm, limit, maxFetches = MAX_CHARGER_FETCHES) {
|
|
86
90
|
const founds = radiusKm
|
|
87
91
|
? await picSlugsStore().queryByRadius(item, radiusKm)
|
|
88
92
|
: await picSlugsStore().queryByCoordinate(item);
|
|
89
93
|
const candidates = founds.map((found) => ({
|
|
90
94
|
slug: found.location_url_slug,
|
|
91
|
-
slugsId: found.id,
|
|
92
95
|
failureCount: found.failure_count,
|
|
96
|
+
slugsId: found.id,
|
|
93
97
|
}));
|
|
98
|
+
return await this.fetch(candidates, locale, limit, maxFetches);
|
|
99
|
+
}
|
|
100
|
+
/** The charger for a details slug, fetched on demand when it is missing or stale. */
|
|
101
|
+
async fetchBySlug(slug, locale = "de-DE") {
|
|
102
|
+
const [found] = await this.fetch([{ slug, failureCount: 0 }], locale, 1);
|
|
103
|
+
return found ?? null;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Resolve a list of candidates to stored chargers: repeat failers
|
|
107
|
+
* ({@link FAILURE_DEPRIORITIZE_THRESHOLD}) are tried after the rest, each
|
|
108
|
+
* slug is attempted once, and a fresh stored row answers without a fetch.
|
|
109
|
+
* At most `maxFetches` (default {@link MAX_CHARGER_FETCHES}) detail fetches
|
|
110
|
+
* run per call — past that a stale stored row is returned rather than
|
|
111
|
+
* nothing. Stops at `limit` results.
|
|
112
|
+
*/
|
|
113
|
+
async fetch(candidates, locale = "de-DE", limit, maxFetches = MAX_CHARGER_FETCHES) {
|
|
114
|
+
const chargers = [];
|
|
94
115
|
// deprioritize (not skip) repeat failers; the sort is stable, so the
|
|
95
116
|
// nearest-first order is kept within each bucket
|
|
96
117
|
candidates.sort((a, b) => Number(a.failureCount >= FAILURE_DEPRIORITIZE_THRESHOLD) -
|
|
@@ -98,12 +119,11 @@ export class ChargersApi extends IApi {
|
|
|
98
119
|
const seen = new Set();
|
|
99
120
|
let fetches = 0;
|
|
100
121
|
const chargersStore = picChargersStore();
|
|
101
|
-
const slugsStore = picSlugsStore();
|
|
102
122
|
for (const candidate of candidates) {
|
|
103
123
|
if (seen.has(candidate.slug))
|
|
104
124
|
continue;
|
|
105
125
|
seen.add(candidate.slug);
|
|
106
|
-
const cached = await chargersStore.getBySlug(candidate.
|
|
126
|
+
const cached = await chargersStore.getBySlug(candidate.slug);
|
|
107
127
|
if (cached && isFresh(cached)) {
|
|
108
128
|
chargers.push(cached);
|
|
109
129
|
if (limit && chargers.length >= limit)
|
|
@@ -119,30 +139,11 @@ export class ChargersApi extends IApi {
|
|
|
119
139
|
continue;
|
|
120
140
|
}
|
|
121
141
|
fetches++;
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
if (charger.failure_count > 0)
|
|
125
|
-
await chargersStore.resetFailed(charger.id);
|
|
126
|
-
await slugsStore.resetFailed(candidate.slugsId);
|
|
142
|
+
const charger = await this.fetchAndStore(candidate.slug, locale, cached, candidate.slugsId);
|
|
143
|
+
if (charger)
|
|
127
144
|
chargers.push(charger);
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
continue;
|
|
131
|
-
}
|
|
132
|
-
catch (error) {
|
|
133
|
-
console.warn(`charger fetch for slug "${candidate.slug}" failed: ` +
|
|
134
|
-
(error instanceof Error ? error.message : String(error)));
|
|
135
|
-
// record the failure where it happened: a failed refresh on the
|
|
136
|
-
// charger row, a failed first fetch on the slug row
|
|
137
|
-
if (cached) {
|
|
138
|
-
cached.failure_count = await chargersStore.incrementFailed(cached.id);
|
|
139
|
-
chargers.push(cached); // stale beats nothing
|
|
140
|
-
if (limit && chargers.length >= limit)
|
|
141
|
-
break;
|
|
142
|
-
continue;
|
|
143
|
-
}
|
|
144
|
-
candidate.failureCount = await slugsStore.incrementFailed(candidate.slugsId);
|
|
145
|
-
}
|
|
145
|
+
if (limit && chargers.length >= limit)
|
|
146
|
+
break;
|
|
146
147
|
}
|
|
147
148
|
return chargers;
|
|
148
149
|
}
|
|
@@ -162,7 +163,7 @@ export class ChargersApi extends IApi {
|
|
|
162
163
|
* a fetch-on-demand stored the charger's first group), that earliest group
|
|
163
164
|
* is used as the best available estimate.
|
|
164
165
|
*/
|
|
165
|
-
async
|
|
166
|
+
async fetchPricesByCoordinates(item, at, radiusKm) {
|
|
166
167
|
const result = {
|
|
167
168
|
charger: null,
|
|
168
169
|
rows: [],
|
|
@@ -172,9 +173,49 @@ export class ChargersApi extends IApi {
|
|
|
172
173
|
: await picChargersStore().getByCoordinate(item)) ?? null;
|
|
173
174
|
let charger = stored;
|
|
174
175
|
if (!stored || (at > stored.fetched_at && !isFresh(stored)))
|
|
175
|
-
charger = (await this.
|
|
176
|
+
charger = (await this.fetchFirstByCoordinates(item)) ?? stored;
|
|
176
177
|
if (!charger)
|
|
177
178
|
return result;
|
|
179
|
+
return await this.#pricesAt(charger, at);
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* The pricebook rows valid at `at` for the Supercharger with this details
|
|
183
|
+
* slug. Same contract as {@link fetchPricesByCoordinates}, including the
|
|
184
|
+
* soft-deleted rows: `location_url_slug` lives on the charger itself, so a
|
|
185
|
+
* site Tesla removed from the feed — `pic_slugs` row hard-deleted, link
|
|
186
|
+
* NULLed — still answers for past dates.
|
|
187
|
+
*/
|
|
188
|
+
async fetchPricesBySlug(slug, at) {
|
|
189
|
+
const stored = await picChargersStore().getBySlug(slug, true);
|
|
190
|
+
let charger = stored;
|
|
191
|
+
if (!stored || (at > stored.fetched_at && !isFresh(stored)))
|
|
192
|
+
charger = (await this.fetchBySlug(slug)) ?? stored;
|
|
193
|
+
if (!charger)
|
|
194
|
+
return { charger: null, rows: [] };
|
|
195
|
+
return await this.#pricesAt(charger, at);
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* The pricebook rows valid at `at` for a stored charger id — the resolution
|
|
199
|
+
* key that survives everything, since it is the row's own. A stale row is
|
|
200
|
+
* refreshed through the slug it was fetched by when it still has one.
|
|
201
|
+
*/
|
|
202
|
+
async fetchPricesById(id, at) {
|
|
203
|
+
const stored = await picChargersStore().getIncludingDeleted(id);
|
|
204
|
+
if (!stored)
|
|
205
|
+
return { charger: null, rows: [] };
|
|
206
|
+
let charger = stored;
|
|
207
|
+
if (at > stored.fetched_at && !isFresh(stored) && stored.location_url_slug)
|
|
208
|
+
charger = (await this.fetchBySlug(stored.location_url_slug)) ?? stored;
|
|
209
|
+
return await this.#pricesAt(charger, at);
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* The pricebook group valid at `at`, filtered to the rows whose time-of-use
|
|
213
|
+
* window covers that instant in the charger's time zone. When `at` predates
|
|
214
|
+
* the first recorded group — always the case right after a fetch-on-demand
|
|
215
|
+
* stored the charger's first group — that earliest group is the best
|
|
216
|
+
* available estimate.
|
|
217
|
+
*/
|
|
218
|
+
async #pricesAt(charger, at) {
|
|
178
219
|
const pricebooksStore = picPricebooksStore();
|
|
179
220
|
const group = await pricebooksStore.getGroupAt(charger.id, at);
|
|
180
221
|
const rows = group.length > 0
|
|
@@ -190,8 +231,42 @@ export class ChargersApi extends IApi {
|
|
|
190
231
|
const meta = createMeta();
|
|
191
232
|
await this.initialInserts(picChargersStore(), teslaClientChargersSchema.parse(json), (charger) => chargerToInitializer({ charger, meta }));
|
|
192
233
|
}
|
|
193
|
-
|
|
194
|
-
|
|
234
|
+
/**
|
|
235
|
+
* Fetch one charger by its details slug and store it, or answer from what is
|
|
236
|
+
* already stored when the fetch fails: a failed refresh returns `cached`
|
|
237
|
+
* with its bumped failure_count (stale beats nothing), a failed first fetch
|
|
238
|
+
* records the failure on the slug row and returns null. Never throws — the
|
|
239
|
+
* caller gets a charger or nothing, not an error. `slugsId` is the
|
|
240
|
+
* `pic_slugs` row the candidate came from; without it the slug is resolved
|
|
241
|
+
* again from the db.
|
|
242
|
+
*/
|
|
243
|
+
async fetchAndStore(slug, locale, cached, slugsId) {
|
|
244
|
+
const chargersStore = picChargersStore();
|
|
245
|
+
const slugsStore = picSlugsStore();
|
|
246
|
+
let charger;
|
|
247
|
+
try {
|
|
248
|
+
charger = await this.#fetchInFlight(`${slug} ${locale}`, () => this.#doFetchAndStore(slug, locale, slugsId));
|
|
249
|
+
}
|
|
250
|
+
catch (error) {
|
|
251
|
+
console.warn(`charger fetch for slug "${slug}" failed: ` +
|
|
252
|
+
(error instanceof Error ? error.message : String(error)));
|
|
253
|
+
// record the failure where it happened: a failed refresh on the
|
|
254
|
+
// charger row, a failed first fetch on the slug row
|
|
255
|
+
if (cached)
|
|
256
|
+
return {
|
|
257
|
+
...cached,
|
|
258
|
+
failure_count: await chargersStore.incrementFailed(cached.id),
|
|
259
|
+
};
|
|
260
|
+
const failedId = slugsId ?? (await slugsStore.idBySlug(slug));
|
|
261
|
+
if (failedId)
|
|
262
|
+
await slugsStore.incrementFailed(failedId);
|
|
263
|
+
else
|
|
264
|
+
console.warn(`charger fetch for slug "${slug}" failed with no pic_slugs row — failure not recorded`);
|
|
265
|
+
return null;
|
|
266
|
+
}
|
|
267
|
+
if (charger.pic_slugs_id)
|
|
268
|
+
await slugsStore.resetFailed(charger.pic_slugs_id);
|
|
269
|
+
return charger;
|
|
195
270
|
}
|
|
196
271
|
/**
|
|
197
272
|
* Fetch one charger by its details slug and upsert it on `location_guid`,
|
|
@@ -199,9 +274,10 @@ export class ChargersApi extends IApi {
|
|
|
199
274
|
* price changed, the current group is only re-stamped with the fetch's
|
|
200
275
|
* uuid; when one did, a new group is inserted and the old rows stay as
|
|
201
276
|
* history. A successful fetch resurrects the row and resets
|
|
202
|
-
* `failure_count`; `
|
|
203
|
-
*
|
|
204
|
-
* endpoint returns no
|
|
277
|
+
* `failure_count`; `slugsId` links it to the `pic_slugs` row it was found
|
|
278
|
+
* through, resolved from the slug when the caller did not pass one, and
|
|
279
|
+
* stored alongside the slug itself. Throws when the endpoint returns no
|
|
280
|
+
* charger.
|
|
205
281
|
*/
|
|
206
282
|
async #doFetchAndStore(slug, locale, slugsId) {
|
|
207
283
|
const clientDoc = await teslaClient().fetchCharger(slug, locale);
|
|
@@ -211,9 +287,11 @@ export class ChargersApi extends IApi {
|
|
|
211
287
|
` (${clientDoc.attempts} attempts)`);
|
|
212
288
|
const charger = clientDoc.charger;
|
|
213
289
|
const meta = createMeta();
|
|
214
|
-
const
|
|
290
|
+
const slugsStore = picSlugsStore();
|
|
215
291
|
const chargersStore = picChargersStore();
|
|
216
292
|
const pricebooksStore = picPricebooksStore();
|
|
293
|
+
const linkId = slugsId ?? (await slugsStore.idBySlug(slug)) ?? undefined;
|
|
294
|
+
const init = chargerToInitializer({ charger, meta, slugsId: linkId, slug });
|
|
217
295
|
const currencyCode = charger.effectivePricebooks[0]?.currencyCode;
|
|
218
296
|
const fxRate = currencyCode ? await fxToEur(currencyCode) : null;
|
|
219
297
|
return await transaction(chargersStore.table, async (tx) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChargersApi.js","sourceRoot":"","sources":["../../src/api/ChargersApi.ts"],"names":[],"mappings":"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"}
|
|
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,EACxB,KAAK,aAAa,EACnB,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;
|
|
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,EACnB,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;IAmErC,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;KACpC,GAAG,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;CAGtC;AAGD,eAAO,MAAM,oBAAoB,4BAA8C,CAAC"}
|
|
@@ -17,7 +17,7 @@ export class ChargingProcessesApi extends IApi {
|
|
|
17
17
|
item.topic = "failureLimitReached";
|
|
18
18
|
return item;
|
|
19
19
|
}
|
|
20
|
-
const pricebooks = await chargersApi().
|
|
20
|
+
const pricebooks = await chargersApi().fetchPricesByCoordinates({ latitude: charge.latitude, longitude: charge.longitude }, charge.start_date);
|
|
21
21
|
const rate = chargingRate(pricebooks.rows);
|
|
22
22
|
item.rate = rate;
|
|
23
23
|
if (!rate) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChargingProcessesApi.js","sourceRoot":"","sources":["../../src/api/ChargingProcessesApi.ts"],"names":[],"mappings":"AAAA,OAAO,EAIN,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,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAC9D,OAAO,EACL,8BAA8B,EAC9B,yBAAyB,GAC1B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,MAAM,OAAO,oBAAqB,SAAQ,IAAI;IACrC,KAAK,CAAC,UAAU;QACrB,MAAM,KAAK,GAAG,sBAAsB,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAEhD,MAAM,KAAK,GAAG,MAAM,kBAAkB,CACpC,OAAO,EACP,yBAAyB,EACzB,KAAK,EAAE,MAAM,EAA+B,EAAE;YAC5C,MAAM,IAAI,GAAuB,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;YAE9D,IACE,MAAM,CAAC,aAAa;gBACpB,MAAM,CAAC,aAAa,IAAI,8BAA8B,EACtD,CAAC;gBACD,IAAI,CAAC,KAAK,GAAG,qBAAqB,CAAC;gBACnC,OAAO,IAAI,CAAC;YACd,CAAC;YAED,MAAM,UAAU,GAAG,MAAM,WAAW,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"ChargingProcessesApi.js","sourceRoot":"","sources":["../../src/api/ChargingProcessesApi.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,QACc,CAAC;AAErD,eAAO,MAAM,OAAO,GAAI,KAAK,WAAW,KAAG,OAEkB,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;AAW9D,eAAO,MAAM,qBAAqB,GAAI,SAAS,MAAM,EAAE,KAAG,MAAM,EACA,CAAC"}
|
|
@@ -14,10 +14,12 @@ export const PRICING_FETCH_CONCURRENCY = Number(process.env.PRICING_FETCH_CONCUR
|
|
|
14
14
|
export const isFresh = (row) => row.fetched_at.getTime() >
|
|
15
15
|
Date.now() - CHARGER_STALE_AFTER_DAYS * 24 * 60 * 60 * 1000;
|
|
16
16
|
/**
|
|
17
|
-
* Columns the Tesla feed doesn't own — the `pic_slugs_id` FK link
|
|
18
|
-
*
|
|
19
|
-
*
|
|
17
|
+
* Columns the Tesla feed doesn't own — the `pic_slugs_id` FK link, the
|
|
18
|
+
* `location_url_slug` it was fetched by (the charger-details feed carries
|
|
19
|
+
* neither; both come from the map feed) and the user-set `favourite` flag. A
|
|
20
|
+
* snapshot re-sync must not wipe them, so they are dropped from the charger
|
|
21
|
+
* sync's compare/update column lists.
|
|
20
22
|
*/
|
|
21
|
-
const NON_FEED_COLUMNS = ["pic_slugs_id", "favourite"];
|
|
23
|
+
const NON_FEED_COLUMNS = ["pic_slugs_id", "location_url_slug", "favourite"];
|
|
22
24
|
export const withoutNonFeedColumns = (columns) => columns.filter((column) => !NON_FEED_COLUMNS.includes(column));
|
|
23
25
|
//# sourceMappingURL=chargers.common.js.map
|
|
@@ -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;;;;;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
|
|
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;;;;;;GAMG;AACH,MAAM,gBAAgB,GAAG,CAAC,cAAc,EAAE,mBAAmB,EAAE,WAAW,CAAC,CAAC;AAE5E,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,OAAiB,EAAY,EAAE,CACnE,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC"}
|
|
@@ -2,8 +2,9 @@ import type { PicChargers, PicChargersId, PicPricebooks, PicSlugsId } from "@mxp
|
|
|
2
2
|
export interface ChargerCandidate {
|
|
3
3
|
/** slug for the details endpoint (location_url_slug) */
|
|
4
4
|
slug: string;
|
|
5
|
-
slugsId: PicSlugsId;
|
|
6
5
|
failureCount: number;
|
|
6
|
+
/** the pic_slugs row it came from, when the caller already resolved one */
|
|
7
|
+
slugsId?: PicSlugsId;
|
|
7
8
|
}
|
|
8
9
|
export interface ChargerFavourite {
|
|
9
10
|
id: PicChargersId;
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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,YAAY,EAAE,MAAM,CAAC;IACrB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,UAAU,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.38",
|
|
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-cloud-store": "^0.1.
|
|
48
|
-
"@mxpicture/tesla-superchargers-generated": "^0.1.
|
|
49
|
-
"@mxpicture/tesla-superchargers-mate": "^0.1.
|
|
47
|
+
"@mxpicture/tesla-superchargers-cloud-store": "^0.1.38",
|
|
48
|
+
"@mxpicture/tesla-superchargers-generated": "^0.1.38",
|
|
49
|
+
"@mxpicture/tesla-superchargers-mate": "^0.1.38",
|
|
50
50
|
"csv-parse": "^7.0.1",
|
|
51
51
|
"json5": "^2.2.3",
|
|
52
52
|
"zod": "^4.4.3"
|