@mxpicture/tesla-superchargers-api 0.1.6 → 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.
- package/dist/api/InvoicesApi.d.ts +17 -1
- package/dist/api/InvoicesApi.d.ts.map +1 -1
- package/dist/api/InvoicesApi.js +35 -0
- package/dist/api/InvoicesApi.js.map +1 -1
- package/dist/common/failures.common.d.ts +2 -0
- package/dist/common/failures.common.d.ts.map +1 -1
- package/dist/common/failures.common.js +1 -1
- package/dist/common/failures.common.js.map +1 -1
- 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/invoices.common.d.ts +9 -0
- package/dist/common/invoices.common.d.ts.map +1 -0
- package/dist/common/invoices.common.js +17 -0
- package/dist/common/invoices.common.js.map +1 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/invoices.types.d.ts +7 -0
- package/dist/types/invoices.types.d.ts.map +1 -0
- package/dist/types/invoices.types.js +2 -0
- package/dist/types/invoices.types.js.map +1 -0
- package/package.json +4 -4
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { type InvoicesCsv } from "../common/invoicesCsv.common.js";
|
|
2
2
|
import { IApi } from "./IApi.js";
|
|
3
3
|
import type { SyncSummary } from "../types/sync.types.js";
|
|
4
|
-
import type {
|
|
4
|
+
import type { UnmatchedInvoiceNotifySummary } from "../types/invoices.types.js";
|
|
5
|
+
import type { Meta, UnmatchedInvoiceCharge } from "@mxpicture/tesla-superchargers-mate/types";
|
|
5
6
|
import type { DropboxClient } from "@mxpicture/tesla-superchargers-cloud-store/client";
|
|
6
7
|
import type { DropboxEntry } from "@mxpicture/tesla-superchargers-cloud-store/types";
|
|
7
8
|
export declare class InvoicesApi extends IApi {
|
|
@@ -21,6 +22,21 @@ export declare class InvoicesApi extends IApi {
|
|
|
21
22
|
*/
|
|
22
23
|
syncCsv(csvText: string): Promise<SyncSummary>;
|
|
23
24
|
syncCsvFile(path: string): Promise<SyncSummary>;
|
|
25
|
+
/**
|
|
26
|
+
* Supercharger charges (geo-matched like the pricing) without a matched
|
|
27
|
+
* invoice, oldest first. With `onlyUnnotified` charges already paged are
|
|
28
|
+
* excluded.
|
|
29
|
+
*/
|
|
30
|
+
getUnmatched(onlyUnnotified?: boolean): Promise<UnmatchedInvoiceCharge[]>;
|
|
31
|
+
/**
|
|
32
|
+
* Page (Pushover) about Supercharger charges without a matched invoice,
|
|
33
|
+
* each charge exactly once: on a successful send the included charges are
|
|
34
|
+
* stamped (`pic_invoice_missing_states`) so a later run only pages about
|
|
35
|
+
* new ones. An invoice arriving clears the charge from the query either
|
|
36
|
+
* way. A no-op (nothing sent, nothing stamped) when there is nothing to
|
|
37
|
+
* report or Pushover is unconfigured; the count is reported either way.
|
|
38
|
+
*/
|
|
39
|
+
notifyUnmatched(logger?: (m: string) => void): Promise<UnmatchedInvoiceNotifySummary>;
|
|
24
40
|
protected _syncLoad(csvs: InvoicesCsv[]): Promise<SyncSummary>;
|
|
25
41
|
}
|
|
26
42
|
export declare const invoicesApi: () => InvoicesApi;
|
|
@@ -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;
|
|
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,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC;CAmBrE;AAGD,eAAO,MAAM,WAAW,mBAAqC,CAAC"}
|
package/dist/api/InvoicesApi.js
CHANGED
|
@@ -3,6 +3,8 @@ import { IApi } from "./IApi.js";
|
|
|
3
3
|
import { createMeta } from "@mxpicture/tesla-superchargers-mate/transform";
|
|
4
4
|
import { readFile } from "node:fs/promises";
|
|
5
5
|
import { InvoicesSync } from "../sync/InvoicesSync.js";
|
|
6
|
+
import { buildUnmatchedInvoicesMessage } from "../common/invoices.common.js";
|
|
7
|
+
import { pushoverConfigFromEnv, sendPushover, } from "../common/pushover.common.js";
|
|
6
8
|
import { chargingProcessesStore, picInvoiceFilesStore, } from "@mxpicture/tesla-superchargers-mate/store";
|
|
7
9
|
import { dropboxClientByEnv } from "@mxpicture/tesla-superchargers-cloud-store/client";
|
|
8
10
|
export class InvoicesApi extends IApi {
|
|
@@ -74,6 +76,39 @@ export class InvoicesApi extends IApi {
|
|
|
74
76
|
async syncCsvFile(path) {
|
|
75
77
|
return await this.syncCsv(await readFile(path, { encoding: "utf8" }));
|
|
76
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* Supercharger charges (geo-matched like the pricing) without a matched
|
|
81
|
+
* invoice, oldest first. With `onlyUnnotified` charges already paged are
|
|
82
|
+
* excluded.
|
|
83
|
+
*/
|
|
84
|
+
async getUnmatched(onlyUnnotified = false) {
|
|
85
|
+
return await chargingProcessesStore().getUnmatchedInvoiceCharges(onlyUnnotified);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Page (Pushover) about Supercharger charges without a matched invoice,
|
|
89
|
+
* each charge exactly once: on a successful send the included charges are
|
|
90
|
+
* stamped (`pic_invoice_missing_states`) so a later run only pages about
|
|
91
|
+
* new ones. An invoice arriving clears the charge from the query either
|
|
92
|
+
* way. A no-op (nothing sent, nothing stamped) when there is nothing to
|
|
93
|
+
* report or Pushover is unconfigured; the count is reported either way.
|
|
94
|
+
*/
|
|
95
|
+
async notifyUnmatched(logger = () => { }) {
|
|
96
|
+
const cfg = pushoverConfigFromEnv();
|
|
97
|
+
const charges = await this.getUnmatched(true);
|
|
98
|
+
const summary = {
|
|
99
|
+
configured: cfg != null,
|
|
100
|
+
sent: false,
|
|
101
|
+
charges: charges.length,
|
|
102
|
+
};
|
|
103
|
+
const message = buildUnmatchedInvoicesMessage(charges);
|
|
104
|
+
if (!message || !cfg)
|
|
105
|
+
return summary;
|
|
106
|
+
if (!(await sendPushover(cfg, message, logger)))
|
|
107
|
+
return summary;
|
|
108
|
+
summary.sent = true;
|
|
109
|
+
await chargingProcessesStore().markUnmatchedInvoiceNotified(charges.map((c) => c.id));
|
|
110
|
+
return summary;
|
|
111
|
+
}
|
|
77
112
|
async _syncLoad(csvs) {
|
|
78
113
|
const cp = chargingProcessesStore();
|
|
79
114
|
const meta = createMeta();
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
1
|
+
{"version":3,"file":"InvoicesApi.js","sourceRoot":"","sources":["../../src/api/InvoicesApi.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { PushoverMessage } from "../types/pushover.types.js";
|
|
2
2
|
import type { FailedSources } from "../types/failures.types.js";
|
|
3
|
+
/** One titled section: up to MAX_LISTED lines, then `…and N more.` if truncated. */
|
|
4
|
+
export declare const section: (title: string, lines: string[]) => string;
|
|
3
5
|
/**
|
|
4
6
|
* Build the Pushover message for a set of failing rows, or null when every
|
|
5
7
|
* source is empty (nothing to page). Pure — unit-tested without a request.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"failures.common.d.ts","sourceRoot":"","sources":["../../src/common/failures.common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"failures.common.d.ts","sourceRoot":"","sources":["../../src/common/failures.common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAKhE,oFAAoF;AACpF,eAAO,MAAM,OAAO,GAAI,OAAO,MAAM,EAAE,OAAO,MAAM,EAAE,KAAG,MAOxD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,aAAa,KACpB,eAAe,GAAG,IA2CpB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/** Max rows listed per source section before truncating with a summary line. */
|
|
2
2
|
const MAX_LISTED = 10;
|
|
3
3
|
/** One titled section: up to MAX_LISTED lines, then `…and N more.` if truncated. */
|
|
4
|
-
const section = (title, lines) => {
|
|
4
|
+
export const section = (title, lines) => {
|
|
5
5
|
const shown = lines.slice(0, MAX_LISTED).join("\n");
|
|
6
6
|
const more = lines.length > MAX_LISTED
|
|
7
7
|
? `\n…and ${lines.length - MAX_LISTED} more.`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"failures.common.js","sourceRoot":"","sources":["../../src/common/failures.common.ts"],"names":[],"mappings":"AAGA,gFAAgF;AAChF,MAAM,UAAU,GAAG,EAAE,CAAC;AAEtB,oFAAoF;AACpF,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,KAAe,EAAU,EAAE;
|
|
1
|
+
{"version":3,"file":"failures.common.js","sourceRoot":"","sources":["../../src/common/failures.common.ts"],"names":[],"mappings":"AAGA,gFAAgF;AAChF,MAAM,UAAU,GAAG,EAAE,CAAC;AAEtB,oFAAoF;AACpF,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,KAAe,EAAU,EAAE;IAChE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,IAAI,GACR,KAAK,CAAC,MAAM,GAAG,UAAU;QACvB,CAAC,CAAC,UAAU,KAAK,CAAC,MAAM,GAAG,UAAU,QAAQ;QAC7C,CAAC,CAAC,EAAE,CAAC;IACT,OAAO,GAAG,KAAK,KAAK,KAAK,GAAG,IAAI,EAAE,CAAC;AACrC,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,MAAqB,EACG,EAAE;IAC1B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;QAC3B,QAAQ,CAAC,IAAI,CACX,OAAO,CACL,UAAU,EACV,MAAM,CAAC,OAAO,CAAC,GAAG,CAChB,CAAC,CAAC,EAAE,EAAE,CACJ,aAAa,CAAC,CAAC,qBAAqB,GAAG;YACvC,IAAI,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK;YACxD,GAAG,CAAC,CAAC,aAAa,WAAW,CAChC,CACF,CACF,CAAC;IAEJ,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;QAC5B,QAAQ,CAAC,IAAI,CACX,OAAO,CACL,WAAW,EACX,MAAM,CAAC,QAAQ,CAAC,GAAG,CACjB,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,aAAa,WAAW,CAC7D,CACF,CACF,CAAC;IAEJ,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC;QACzB,QAAQ,CAAC,IAAI,CACX,OAAO,CACL,QAAQ,EACR,MAAM,CAAC,KAAK,CAAC,GAAG,CACd,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,iBAAiB,KAAK,CAAC,CAAC,aAAa,WAAW,CAC/D,CACF,CACF,CAAC;IAEJ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,OAAO;QACL,KAAK,EAAE,0BAA0B;QACjC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QAC9B,QAAQ,EAAE,CAAC;KACZ,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,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,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,6 +1,7 @@
|
|
|
1
1
|
// This file is auto-generated by build-cli. Do not edit manually.
|
|
2
2
|
export * from "./chargers.common.js";
|
|
3
3
|
export * from "./failures.common.js";
|
|
4
|
+
export * from "./invoices.common.js";
|
|
4
5
|
export * from "./invoicesCsv.common.js";
|
|
5
6
|
export * from "./pricebooks.common.js";
|
|
6
7
|
export * from "./pushover.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,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,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { UnmatchedInvoiceCharge } from "@mxpicture/tesla-superchargers-mate/types";
|
|
2
|
+
import type { PushoverMessage } from "../types/pushover.types.js";
|
|
3
|
+
/**
|
|
4
|
+
* Build the Pushover message for Supercharger charges without a matched
|
|
5
|
+
* invoice, or null when there are none (nothing to page). Pure — unit-tested
|
|
6
|
+
* without a request.
|
|
7
|
+
*/
|
|
8
|
+
export declare const buildUnmatchedInvoicesMessage: (charges: UnmatchedInvoiceCharge[]) => PushoverMessage | null;
|
|
9
|
+
//# sourceMappingURL=invoices.common.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invoices.common.d.ts","sourceRoot":"","sources":["../../src/common/invoices.common.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,2CAA2C,CAAC;AACxF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAGlE;;;;GAIG;AACH,eAAO,MAAM,6BAA6B,GACxC,SAAS,sBAAsB,EAAE,KAChC,eAAe,GAAG,IAepB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { section } from "./failures.common.js";
|
|
2
|
+
/**
|
|
3
|
+
* Build the Pushover message for Supercharger charges without a matched
|
|
4
|
+
* invoice, or null when there are none (nothing to page). Pure — unit-tested
|
|
5
|
+
* without a request.
|
|
6
|
+
*/
|
|
7
|
+
export const buildUnmatchedInvoicesMessage = (charges) => {
|
|
8
|
+
if (charges.length === 0)
|
|
9
|
+
return null;
|
|
10
|
+
return {
|
|
11
|
+
title: "🧾 Supercharger charges without invoice",
|
|
12
|
+
message: section("Charges:", charges.map((c) => `• charge #${c.id} (${c.start_date.toISOString()}): ` +
|
|
13
|
+
`${c.slug_title ?? "unknown site"}`)),
|
|
14
|
+
priority: 0,
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=invoices.common.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invoices.common.js","sourceRoot":"","sources":["../../src/common/invoices.common.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C;;;;GAIG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAC3C,OAAiC,EACT,EAAE;IAC1B,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEtC,OAAO;QACL,KAAK,EAAE,yCAAyC;QAChD,OAAO,EAAE,OAAO,CACd,UAAU,EACV,OAAO,CAAC,GAAG,CACT,CAAC,CAAC,EAAE,EAAE,CACJ,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,KAAK;YACrD,GAAG,CAAC,CAAC,UAAU,IAAI,cAAc,EAAE,CACtC,CACF;QACD,QAAQ,EAAE,CAAC;KACZ,CAAC;AACJ,CAAC,CAAC"}
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * from "./chargers.types.js";
|
|
2
2
|
export * from "./charging.types.js";
|
|
3
3
|
export * from "./failures.types.js";
|
|
4
|
+
export * from "./invoices.types.js";
|
|
4
5
|
export * from "./pricebooks.types.js";
|
|
5
6
|
export * from "./pushover.types.js";
|
|
6
7
|
export * from "./sync.types.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AACA,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AACA,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC"}
|
package/dist/types/index.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
export * from "./chargers.types.js";
|
|
3
3
|
export * from "./charging.types.js";
|
|
4
4
|
export * from "./failures.types.js";
|
|
5
|
+
export * from "./invoices.types.js";
|
|
5
6
|
export * from "./pricebooks.types.js";
|
|
6
7
|
export * from "./pushover.types.js";
|
|
7
8
|
export * from "./sync.types.js";
|
package/dist/types/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Outcome of an unmatched-invoice notify run: whether Pushover was configured/sent and the charge count. */
|
|
2
|
+
export interface UnmatchedInvoiceNotifySummary {
|
|
3
|
+
configured: boolean;
|
|
4
|
+
sent: boolean;
|
|
5
|
+
charges: number;
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=invoices.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invoices.types.d.ts","sourceRoot":"","sources":["../../src/types/invoices.types.ts"],"names":[],"mappings":"AAAA,6GAA6G;AAC7G,MAAM,WAAW,6BAA6B;IAC5C,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;CACjB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invoices.types.js","sourceRoot":"","sources":["../../src/types/invoices.types.ts"],"names":[],"mappings":""}
|
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.7",
|
|
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.7",
|
|
48
|
+
"@mxpicture/tesla-superchargers-mate": "^0.1.7",
|
|
49
|
+
"@mxpicture/tesla-superchargers-cloud-store": "^0.1.7",
|
|
50
50
|
"csv-parse": "^7.0.1",
|
|
51
51
|
"json5": "^2.2.3",
|
|
52
52
|
"zod": "^4.4.3"
|