@mxpicture/tesla-superchargers-mate 0.1.5 → 0.1.7

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.
@@ -1,7 +1,7 @@
1
1
  import { type ChargingProcesses, type ChargingProcessesId, type ChargingProcessesInitializer, type ChargingProcessesMutator, type PicChargingProcessStates, type PicChargingProcessStatesId } from "@mxpicture/tesla-superchargers-generated/public";
2
2
  import { IMateStore } from "./IMateStore.js";
3
3
  import { type SqlTx } from "./db.js";
4
- import type { FailedChargingProcessState, UnpricedChargingProcess } from "../types/chargingProcess.types.js";
4
+ import type { FailedChargingProcessState, UnmatchedInvoiceCharge, UnpricedChargingProcess } from "../types/chargingProcess.types.js";
5
5
  /**
6
6
  * Access to TeslaMate's `charging_processes` table. The helpers here
7
7
  * ({@link ChargingProcessesStore.getUnpricedCharges},
@@ -13,6 +13,7 @@ import type { FailedChargingProcessState, UnpricedChargingProcess } from "../typ
13
13
  */
14
14
  export declare class ChargingProcessesStore extends IMateStore<ChargingProcessesId, ChargingProcesses, ChargingProcessesInitializer, ChargingProcessesMutator> {
15
15
  readonly statesTable: string;
16
+ readonly invoiceStatesTable: string;
16
17
  constructor();
17
18
  getUnpricedCharges(tx?: SqlTx): Promise<UnpricedChargingProcess[]>;
18
19
  updatePrice(processId: ChargingProcessesId, cost: number | null, tx?: SqlTx): Promise<ChargingProcesses>;
@@ -35,6 +36,16 @@ export declare class ChargingProcessesStore extends IMateStore<ChargingProcesses
35
36
  * by a couple of minutes). Adjust the tolerance to taste.
36
37
  */
37
38
  lookupChargingProcessId(vin: string, chargeStart: Date, tx?: SqlTx): Promise<number | null>;
39
+ /**
40
+ * Completed Supercharger charges — a charge whose position lies within the
41
+ * covered radius of a charger-typed slug, same geo-match the pricing uses —
42
+ * that no `pic_invoices` row is matched to, oldest first. With
43
+ * `onlyUnnotified` charges already paged (a stamped
44
+ * `pic_invoice_missing_states` row) are excluded.
45
+ */
46
+ getUnmatchedInvoiceCharges(onlyUnnotified?: boolean, tx?: SqlTx): Promise<UnmatchedInvoiceCharge[]>;
47
+ /** Stamp the missing-invoice notified flag for the given charges (upsert; empty is a no-op). */
48
+ markUnmatchedInvoiceNotified(processIds: ChargingProcessesId[], tx?: SqlTx): Promise<void>;
38
49
  }
39
50
  export declare const chargingProcessesStore: () => ChargingProcessesStore;
40
51
  //# sourceMappingURL=ChargingProcessesStore.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ChargingProcessesStore.d.ts","sourceRoot":"","sources":["../../src/store/ChargingProcessesStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,4BAA4B,EACjC,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAChC,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAO,KAAK,KAAK,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,KAAK,EACV,0BAA0B,EAC1B,uBAAuB,EACxB,MAAM,mCAAmC,CAAC;AAG3C;;;;;;;;GAQG;AACH,qBAAa,sBAAuB,SAAQ,UAAU,CACpD,mBAAmB,EACnB,iBAAiB,EACjB,4BAA4B,EAC5B,wBAAwB,CACzB;IACC,SAAgB,WAAW,EAAE,MAAM,CAAiC;;IAUvD,kBAAkB,CAC7B,EAAE,GAAE,KAAa,GAChB,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAuBxB,WAAW,CACtB,SAAS,EAAE,mBAAmB,EAC9B,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,EAAE,GAAE,KAAa,GAChB,OAAO,CAAC,iBAAiB,CAAC;IAQhB,QAAQ,CACnB,SAAS,EAAE,mBAAmB,EAC9B,EAAE,GAAE,KAAa,GAChB,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC;IAO9B,UAAU,CACrB,SAAS,EAAE,mBAAmB,EAC9B,EAAE,GAAE,KAAa,GAChB,OAAO,CAAC,IAAI,CAAC;IAIhB;;;;OAIG;IACU,eAAe,CAC1B,SAAS,EAAE,MAAM,EACjB,cAAc,UAAQ,EACtB,EAAE,GAAE,KAAa,GAChB,OAAO,CAAC,0BAA0B,EAAE,CAAC;IAWxC,iFAAiF;IACpE,kBAAkB,CAC7B,QAAQ,EAAE,0BAA0B,EAAE,EACtC,EAAE,GAAE,KAAa,GAChB,OAAO,CAAC,IAAI,CAAC;IAMhB,kGAAkG;IACrF,cAAc,CAAC,EAAE,GAAE,KAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAKlD,oBAAoB,CAC/B,SAAS,EAAE,mBAAmB,EAC9B,EAAE,GAAE,KAAa,GAChB,OAAO,CAAC,MAAM,CAAC;IAYlB;;;;OAIG;IACU,uBAAuB,CAClC,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,IAAI,EACjB,EAAE,GAAE,KAAa,GAChB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAY1B;AAGD,eAAO,MAAM,sBAAsB,8BACQ,CAAC"}
1
+ {"version":3,"file":"ChargingProcessesStore.d.ts","sourceRoot":"","sources":["../../src/store/ChargingProcessesStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,4BAA4B,EACjC,KAAK,wBAAwB,EAC7B,KAAK,wBAAwB,EAC7B,KAAK,0BAA0B,EAChC,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAO,KAAK,KAAK,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,KAAK,EACV,0BAA0B,EAC1B,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,mCAAmC,CAAC;AAS3C;;;;;;;;GAQG;AACH,qBAAa,sBAAuB,SAAQ,UAAU,CACpD,mBAAmB,EACnB,iBAAiB,EACjB,4BAA4B,EAC5B,wBAAwB,CACzB;IACC,SAAgB,WAAW,EAAE,MAAM,CAAiC;IACpE,SAAgB,kBAAkB,EAAE,MAAM,CAAgC;;IAU7D,kBAAkB,CAC7B,EAAE,GAAE,KAAa,GAChB,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAuBxB,WAAW,CACtB,SAAS,EAAE,mBAAmB,EAC9B,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,EAAE,GAAE,KAAa,GAChB,OAAO,CAAC,iBAAiB,CAAC;IAQhB,QAAQ,CACnB,SAAS,EAAE,mBAAmB,EAC9B,EAAE,GAAE,KAAa,GAChB,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC;IAO9B,UAAU,CACrB,SAAS,EAAE,mBAAmB,EAC9B,EAAE,GAAE,KAAa,GAChB,OAAO,CAAC,IAAI,CAAC;IAIhB;;;;OAIG;IACU,eAAe,CAC1B,SAAS,EAAE,MAAM,EACjB,cAAc,UAAQ,EACtB,EAAE,GAAE,KAAa,GAChB,OAAO,CAAC,0BAA0B,EAAE,CAAC;IAWxC,iFAAiF;IACpE,kBAAkB,CAC7B,QAAQ,EAAE,0BAA0B,EAAE,EACtC,EAAE,GAAE,KAAa,GAChB,OAAO,CAAC,IAAI,CAAC;IAMhB,kGAAkG;IACrF,cAAc,CAAC,EAAE,GAAE,KAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAKlD,oBAAoB,CAC/B,SAAS,EAAE,mBAAmB,EAC9B,EAAE,GAAE,KAAa,GAChB,OAAO,CAAC,MAAM,CAAC;IAYlB;;;;OAIG;IACU,uBAAuB,CAClC,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,IAAI,EACjB,EAAE,GAAE,KAAa,GAChB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAazB;;;;;;OAMG;IACU,0BAA0B,CACrC,cAAc,UAAQ,EACtB,EAAE,GAAE,KAAa,GAChB,OAAO,CAAC,sBAAsB,EAAE,CAAC;IAoCpC,gGAAgG;IACnF,4BAA4B,CACvC,UAAU,EAAE,mBAAmB,EAAE,EACjC,EAAE,GAAE,KAAa,GAChB,OAAO,CAAC,IAAI,CAAC;CASjB;AAGD,eAAO,MAAM,sBAAsB,8BACQ,CAAC"}
@@ -1,6 +1,8 @@
1
1
  import { chargingProcessesInitializer, chargingProcessesMutator, } from "@mxpicture/tesla-superchargers-generated/public";
2
2
  import { IMateStore } from "./IMateStore.js";
3
3
  import { sql } from "./db.js";
4
+ import { CHARGER_MAP_TYPES } from "../client/common.clients.js";
5
+ import { COVERED_MARGIN, COVERED_RADIUS_KM, KM_PER_DEG_LAT, } from "../common/coordinates.js";
4
6
  /**
5
7
  * Access to TeslaMate's `charging_processes` table. The helpers here
6
8
  * ({@link ChargingProcessesStore.getUnpricedCharges},
@@ -12,6 +14,7 @@ import { sql } from "./db.js";
12
14
  */
13
15
  export class ChargingProcessesStore extends IMateStore {
14
16
  statesTable = "pic_charging_process_states";
17
+ invoiceStatesTable = "pic_invoice_missing_states";
15
18
  constructor() {
16
19
  super("charging_processes", chargingProcessesInitializer, chargingProcessesMutator);
17
20
  }
@@ -101,6 +104,57 @@ export class ChargingProcessesStore extends IMateStore {
101
104
  LIMIT 1`;
102
105
  return rows[0]?.id ?? null;
103
106
  }
107
+ /**
108
+ * Completed Supercharger charges — a charge whose position lies within the
109
+ * covered radius of a charger-typed slug, same geo-match the pricing uses —
110
+ * that no `pic_invoices` row is matched to, oldest first. With
111
+ * `onlyUnnotified` charges already paged (a stamped
112
+ * `pic_invoice_missing_states` row) are excluded.
113
+ */
114
+ async getUnmatchedInvoiceCharges(onlyUnnotified = false, tx = sql()) {
115
+ const radiusKm = COVERED_RADIUS_KM * COVERED_MARGIN;
116
+ const latDeg = radiusKm / KM_PER_DEG_LAT;
117
+ return await tx `
118
+ SELECT cp.id, cp.start_date, cp.end_date,
119
+ p.latitude, p.longitude,
120
+ slug.title AS slug_title, slug.distance_km
121
+ FROM charging_processes cp
122
+ INNER JOIN positions p ON p.id = cp.position_id
123
+ CROSS JOIN LATERAL (
124
+ SELECT s.title,
125
+ 2 * 6371 * asin(sqrt(
126
+ pow(sin(radians(s.latitude - p.latitude) / 2), 2)
127
+ + cos(radians(p.latitude)) * cos(radians(s.latitude))
128
+ * pow(sin(radians(s.longitude - p.longitude) / 2), 2)
129
+ )) AS distance_km
130
+ FROM pic_slugs s
131
+ WHERE s.location_types && ${[...CHARGER_MAP_TYPES]}::text[]
132
+ AND s.latitude BETWEEN p.latitude - ${latDeg} AND p.latitude + ${latDeg}
133
+ AND s.longitude BETWEEN p.longitude - ${latDeg} / cos(radians(p.latitude))
134
+ AND p.longitude + ${latDeg} / cos(radians(p.latitude))
135
+ ORDER BY distance_km
136
+ LIMIT 1
137
+ ) slug
138
+ WHERE cp.end_date IS NOT NULL
139
+ AND slug.distance_km < ${radiusKm}
140
+ AND NOT EXISTS (SELECT 1 FROM pic_invoices i WHERE i.charging_processes_id = cp.id)
141
+ ${onlyUnnotified
142
+ ? tx `AND NOT EXISTS (SELECT 1 FROM ${tx(this.invoiceStatesTable)} n
143
+ WHERE n.charging_processes_id = cp.id AND n.notified_at IS NOT NULL)`
144
+ : tx ``}
145
+ ORDER BY cp.start_date`;
146
+ }
147
+ /** Stamp the missing-invoice notified flag for the given charges (upsert; empty is a no-op). */
148
+ async markUnmatchedInvoiceNotified(processIds, tx = sql()) {
149
+ if (processIds.length === 0)
150
+ return;
151
+ await tx `
152
+ INSERT INTO ${tx(this.invoiceStatesTable)} (created_at, updated_at, charging_processes_id, notified_at)
153
+ SELECT CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, unnest(${processIds}::int[]), CURRENT_TIMESTAMP
154
+ ON CONFLICT (charging_processes_id)
155
+ DO UPDATE SET notified_at = CURRENT_TIMESTAMP,
156
+ updated_at = CURRENT_TIMESTAMP`;
157
+ }
104
158
  }
105
159
  let _store = null;
106
160
  export const chargingProcessesStore = () => (_store ??= new ChargingProcessesStore());
@@ -1 +1 @@
1
- {"version":3,"file":"ChargingProcessesStore.js","sourceRoot":"","sources":["../../src/store/ChargingProcessesStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChargingProcessesStore.js","sourceRoot":"","sources":["../../src/store/ChargingProcessesStore.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,4BAA4B,EAC5B,wBAAwB,GAOzB,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,GAAG,EAAc,MAAM,SAAS,CAAC;AAO1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,6BAA6B,CAAC;AAChE,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,cAAc,GACf,MAAM,0BAA0B,CAAC;AAElC;;;;;;;;GAQG;AACH,MAAM,OAAO,sBAAuB,SAAQ,UAK3C;IACiB,WAAW,GAAW,6BAA6B,CAAC;IACpD,kBAAkB,GAAW,4BAA4B,CAAC;IAE1E;QACE,KAAK,CACH,oBAAoB,EACpB,4BAA4B,EAC5B,wBAAwB,CACzB,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,kBAAkB,CAC7B,KAAY,GAAG,EAAE;QAEjB,OAAO,MAAM,EAAE,CAA2B;;;;;;;;;;;;;;;;;;;uCAmBP,CAAC;IACtC,CAAC;IAEM,KAAK,CAAC,WAAW,CACtB,SAA8B,EAC9B,IAAmB,EACnB,KAAY,GAAG,EAAE;QAEjB,OAAO,MAAM,IAAI,CAAC,MAAM,CACtB,SAAS,EACT,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,EAAE,EACpD,EAAE,CACH,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,QAAQ,CACnB,SAA8B,EAC9B,KAAY,GAAG,EAAE;QAEjB,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,CAErB,iBAAiB,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,kCAAkC,SAAS,EAAE,CAAC;QACpF,OAAO,GAAG,IAAI,IAAI,CAAC;IACrB,CAAC;IAEM,KAAK,CAAC,UAAU,CACrB,SAA8B,EAC9B,KAAY,GAAG,EAAE;QAEjB,MAAM,EAAE,CAAA,eAAe,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,kCAAkC,SAAS,EAAE,CAAC;IAC3F,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,eAAe,CAC1B,SAAiB,EACjB,cAAc,GAAG,KAAK,EACtB,KAAY,GAAG,EAAE;QAEjB,OAAO,MAAM,EAAE,CAA8B;;eAElC,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC;;mCAEA,SAAS;UAClC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAA,mCAAmC,CAAC,CAAC,CAAC,EAAE,CAAA,EAAE;;KAElE,CAAC;IACJ,CAAC;IAED,iFAAiF;IAC1E,KAAK,CAAC,kBAAkB,CAC7B,QAAsC,EACtC,KAAY,GAAG,EAAE;QAEjB,MAAM,EAAE,CAAA,UAAU,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC;;uBAEnB,QAA+B,aAAa,CAAC;IAClE,CAAC;IAED,kGAAkG;IAC3F,KAAK,CAAC,cAAc,CAAC,KAAY,GAAG,EAAE;QAC3C,MAAM,MAAM,GAAG,MAAM,EAAE,CAAA,eAAe,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7D,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;IAEM,KAAK,CAAC,oBAAoB,CAC/B,SAA8B,EAC9B,KAAY,GAAG,EAAE;QAEjB,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,EAAE,CAAuB;oBAC7B,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC;wDACgB,SAAS;;wCAEzB,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC;;;OAGrD,CAAC;QACJ,OAAO,GAAG,CAAC,aAAa,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,uBAAuB,CAClC,GAAW,EACX,WAAiB,EACjB,KAAY,GAAG,EAAE;QAEjB,MAAM,IAAI,GAAG,MAAM,EAAE,CAAkB;;;;qBAItB,GAAG;mCACW,WAAW;oCACV,WAAW;uDACQ,WAAW;aACrD,CAAC;QACV,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,IAAI,CAAC;IAC7B,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,0BAA0B,CACrC,cAAc,GAAG,KAAK,EACtB,KAAY,GAAG,EAAE;QAEjB,MAAM,QAAQ,GAAG,iBAAiB,GAAG,cAAc,CAAC;QACpD,MAAM,MAAM,GAAG,QAAQ,GAAG,cAAc,CAAC;QACzC,OAAO,MAAM,EAAE,CAA0B;;;;;;;;;;;;;;uCAcN,CAAC,GAAG,iBAAiB,CAAC;mDACV,MAAM,qBAAqB,MAAM;qDAC/B,MAAM;qDACN,MAAM;;;;;mCAKxB,QAAQ;;YAG/B,cAAc;YACZ,CAAC,CAAC,EAAE,CAAA,iCAAiC,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC;0FACY;YAC5E,CAAC,CAAC,EAAE,CAAA,EACR;+BACqB,CAAC;IAC9B,CAAC;IAED,gGAAgG;IACzF,KAAK,CAAC,4BAA4B,CACvC,UAAiC,EACjC,KAAY,GAAG,EAAE;QAEjB,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QACpC,MAAM,EAAE,CAAA;oBACQ,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC;8DACe,UAAiC;;;qDAG1C,CAAC;IACpD,CAAC;CACF;AAED,IAAI,MAAM,GAAkC,IAAI,CAAC;AACjD,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,EAAE,CACzC,CAAC,MAAM,KAAK,IAAI,sBAAsB,EAAE,CAAC,CAAC"}
@@ -3,6 +3,20 @@ import type { ChargingProcesses, ChargingProcessesId, PicChargingProcessStates,
3
3
  export interface FailedChargingProcessState extends PicChargingProcessStates {
4
4
  start_date: Date | null;
5
5
  }
6
+ /**
7
+ * A completed Supercharger charge (geo-matched to a charger-typed slug, same
8
+ * match the pricing uses) that no `pic_invoices` row is matched to.
9
+ */
10
+ export interface UnmatchedInvoiceCharge {
11
+ id: ChargingProcessesId;
12
+ start_date: ChargingProcesses["start_date"];
13
+ end_date: ChargingProcesses["end_date"];
14
+ latitude: Positions["latitude"];
15
+ longitude: Positions["longitude"];
16
+ /** title of the nearest matched slug (site name); null when the feed has none */
17
+ slug_title: string | null;
18
+ distance_km: number;
19
+ }
6
20
  export interface UnpricedChargingProcess {
7
21
  id: ChargingProcessesId;
8
22
  start_date: ChargingProcesses["start_date"];
@@ -1 +1 @@
1
- {"version":3,"file":"chargingProcess.types.d.ts","sourceRoot":"","sources":["../../src/types/chargingProcess.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,EACxB,0BAA0B,EAC1B,SAAS,EACV,MAAM,iDAAiD,CAAC;AAEzD,6EAA6E;AAC7E,MAAM,WAAW,0BAA2B,SAAQ,wBAAwB;IAC1E,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,mBAAmB,CAAC;IACxB,UAAU,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAC5C,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACxC,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACpC,WAAW,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC;IAC9C,UAAU,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAC5C,mBAAmB,EAAE,iBAAiB,CAAC,qBAAqB,CAAC,CAAC;IAC9D,kBAAkB,EAAE,iBAAiB,CAAC,oBAAoB,CAAC,CAAC;IAC5D,YAAY,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAChD,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IAChC,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IAClC,SAAS,CAAC,EAAE,0BAA0B,CAAC;IACvC,aAAa,CAAC,EAAE,wBAAwB,CAAC,eAAe,CAAC,CAAC;CAC3D"}
1
+ {"version":3,"file":"chargingProcess.types.d.ts","sourceRoot":"","sources":["../../src/types/chargingProcess.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,mBAAmB,EACnB,wBAAwB,EACxB,0BAA0B,EAC1B,SAAS,EACV,MAAM,iDAAiD,CAAC;AAEzD,6EAA6E;AAC7E,MAAM,WAAW,0BAA2B,SAAQ,wBAAwB;IAC1E,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC;CACzB;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,mBAAmB,CAAC;IACxB,UAAU,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAC5C,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACxC,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IAChC,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IAClC,iFAAiF;IACjF,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,mBAAmB,CAAC;IACxB,UAAU,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAC5C,QAAQ,EAAE,iBAAiB,CAAC,UAAU,CAAC,CAAC;IACxC,MAAM,EAAE,iBAAiB,CAAC,QAAQ,CAAC,CAAC;IACpC,WAAW,EAAE,iBAAiB,CAAC,aAAa,CAAC,CAAC;IAC9C,UAAU,EAAE,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAC5C,mBAAmB,EAAE,iBAAiB,CAAC,qBAAqB,CAAC,CAAC;IAC9D,kBAAkB,EAAE,iBAAiB,CAAC,oBAAoB,CAAC,CAAC;IAC5D,YAAY,EAAE,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAChD,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IAChC,SAAS,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;IAClC,SAAS,CAAC,EAAE,0BAA0B,CAAC;IACvC,aAAa,CAAC,EAAE,wBAAwB,CAAC,eAAe,CAAC,CAAC;CAC3D"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mxpicture/tesla-superchargers-mate",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "description": "TeslaMate integration",
5
5
  "type": "module",
6
6
  "author": "MXPicture",
@@ -48,7 +48,7 @@
48
48
  "access": "public"
49
49
  },
50
50
  "dependencies": {
51
- "@mxpicture/tesla-superchargers-generated": "^0.1.5",
51
+ "@mxpicture/tesla-superchargers-generated": "^0.1.7",
52
52
  "postgres": "^3.4.9",
53
53
  "short-uuid": "^6.0.3",
54
54
  "zod": "^4.3.6"