@mxpicture/tesla-superchargers-api 0.1.4 → 0.1.5
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 +15 -3
- package/dist/api/InvoicesApi.d.ts.map +1 -1
- package/dist/api/InvoicesApi.js +60 -6
- package/dist/api/InvoicesApi.js.map +1 -1
- package/dist/common/invoicesCsv.common.d.ts +2 -0
- package/dist/common/invoicesCsv.common.d.ts.map +1 -1
- package/dist/common/invoicesCsv.common.js +9 -1
- package/dist/common/invoicesCsv.common.js.map +1 -1
- package/dist/sync/ISyncHandler.d.ts +6 -5
- package/dist/sync/ISyncHandler.d.ts.map +1 -1
- package/dist/sync/ISyncHandler.js +11 -7
- package/dist/sync/ISyncHandler.js.map +1 -1
- package/dist/sync/ISyncPlanHandler.d.ts +5 -1
- package/dist/sync/ISyncPlanHandler.d.ts.map +1 -1
- package/dist/sync/ISyncPlanHandler.js +6 -2
- package/dist/sync/ISyncPlanHandler.js.map +1 -1
- package/dist/sync/InvoicesSync.js +1 -1
- package/dist/sync/InvoicesSync.js.map +1 -1
- package/package.json +4 -3
|
@@ -1,11 +1,23 @@
|
|
|
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 { Meta } from "@mxpicture/tesla-superchargers-mate/types";
|
|
5
|
+
import type { DropboxClient } from "@mxpicture/tesla-superchargers-cloud-store/client";
|
|
6
|
+
import type { DropboxEntry } from "@mxpicture/tesla-superchargers-cloud-store/types";
|
|
4
7
|
export declare class InvoicesApi extends IApi {
|
|
8
|
+
syncDropbox(): Promise<SyncSummary>;
|
|
5
9
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
10
|
+
* Sync one dropbox entry: non-CSV entries and files already recorded in
|
|
11
|
+
* `pic_invoice_files` are skipped. A file is recorded only after all its
|
|
12
|
+
* rows landed — a failed file is logged and retried on the next run.
|
|
13
|
+
*/
|
|
14
|
+
protected syncDropboxEntry(entry: DropboxEntry, client: DropboxClient, meta: Meta, storedNames: Set<string>): Promise<SyncSummary | null>;
|
|
15
|
+
/**
|
|
16
|
+
* Throws when any row fails validation, before touching the db — a file is
|
|
17
|
+
* imported completely or not at all, so a file recorded as synced never
|
|
18
|
+
* hides silently dropped rows. The exception are credit/free charges
|
|
19
|
+
* without an invoice number: they cannot be keyed, so they are skipped and
|
|
20
|
+
* reported via `feedNullKeys` instead of failing the file.
|
|
9
21
|
*/
|
|
10
22
|
syncCsv(csvText: string): Promise<SyncSummary>;
|
|
11
23
|
syncCsvFile(path: string): Promise<SyncSummary>;
|
|
@@ -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;AAO1D,OAAO,KAAK,EAAW,IAAI,EAAE,MAAM,2CAA2C,CAAC;AAC/E,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;cAI5C,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,19 +3,73 @@ 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 { chargingProcessesStore } from "@mxpicture/tesla-superchargers-mate/store";
|
|
6
|
+
import { chargingProcessesStore, picInvoiceFilesStore, } from "@mxpicture/tesla-superchargers-mate/store";
|
|
7
|
+
import { dropboxClientByEnv } from "@mxpicture/tesla-superchargers-cloud-store/client";
|
|
7
8
|
export class InvoicesApi extends IApi {
|
|
9
|
+
async syncDropbox() {
|
|
10
|
+
const client = dropboxClientByEnv();
|
|
11
|
+
const entries = await client.fetchBaseDir();
|
|
12
|
+
const meta = createMeta();
|
|
13
|
+
const storedNames = new Set((await picInvoiceFilesStore().query()).map((file) => file.name.toLowerCase()));
|
|
14
|
+
const summary = {
|
|
15
|
+
feedCount: 0,
|
|
16
|
+
feedDuplicates: 0,
|
|
17
|
+
feedNullKeys: 0,
|
|
18
|
+
upserted: 0,
|
|
19
|
+
deleted: 0,
|
|
20
|
+
};
|
|
21
|
+
for (const entry of entries) {
|
|
22
|
+
const subSummary = await this.syncDropboxEntry(entry, client, meta, storedNames);
|
|
23
|
+
if (subSummary) {
|
|
24
|
+
summary.feedCount += subSummary.feedCount;
|
|
25
|
+
summary.feedDuplicates += subSummary.feedDuplicates;
|
|
26
|
+
summary.feedNullKeys += subSummary.feedNullKeys;
|
|
27
|
+
summary.upserted += subSummary.upserted;
|
|
28
|
+
summary.deleted += subSummary.deleted;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return summary;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Sync one dropbox entry: non-CSV entries and files already recorded in
|
|
35
|
+
* `pic_invoice_files` are skipped. A file is recorded only after all its
|
|
36
|
+
* rows landed — a failed file is logged and retried on the next run.
|
|
37
|
+
*/
|
|
38
|
+
async syncDropboxEntry(entry, client, meta, storedNames) {
|
|
39
|
+
const nameLower = entry.name.toLowerCase();
|
|
40
|
+
if (!nameLower.endsWith(".csv"))
|
|
41
|
+
return null;
|
|
42
|
+
if (storedNames.has(nameLower))
|
|
43
|
+
return null;
|
|
44
|
+
try {
|
|
45
|
+
const file = await client.fetchFile(entry.path);
|
|
46
|
+
const summary = await this.syncCsv(file.content);
|
|
47
|
+
await picInvoiceFilesStore().insert({ ...meta, name: entry.name });
|
|
48
|
+
storedNames.add(nameLower);
|
|
49
|
+
return summary;
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
console.warn(`invoices dropbox: sync of "${entry.name}" failed:`, error);
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
8
56
|
/**
|
|
9
|
-
* Throws when any row fails validation, before touching the db
|
|
10
|
-
*
|
|
11
|
-
*
|
|
57
|
+
* Throws when any row fails validation, before touching the db — a file is
|
|
58
|
+
* imported completely or not at all, so a file recorded as synced never
|
|
59
|
+
* hides silently dropped rows. The exception are credit/free charges
|
|
60
|
+
* without an invoice number: they cannot be keyed, so they are skipped and
|
|
61
|
+
* reported via `feedNullKeys` instead of failing the file.
|
|
12
62
|
*/
|
|
13
63
|
async syncCsv(csvText) {
|
|
14
|
-
const { invoices, errors } = parseInvoicesCsv(csvText);
|
|
64
|
+
const { invoices, errors, nullInvoiceNumbers } = parseInvoicesCsv(csvText);
|
|
15
65
|
if (errors.length > 0)
|
|
16
66
|
throw new Error(`invoices CSV: ${errors.length} invalid row(s)\n` +
|
|
17
67
|
formatInvoicesCsvErrors(errors));
|
|
18
|
-
|
|
68
|
+
const summary = await this._syncLoad(invoices);
|
|
69
|
+
// skipped pre-parse, so mirror the plan's null-key accounting
|
|
70
|
+
summary.feedCount += nullInvoiceNumbers;
|
|
71
|
+
summary.feedNullKeys += nullInvoiceNumbers;
|
|
72
|
+
return summary;
|
|
19
73
|
}
|
|
20
74
|
async syncCsvFile(path) {
|
|
21
75
|
return await this.syncCsv(await readFile(path, { encoding: "utf8" }));
|
|
@@ -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;AAE3E,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,
|
|
1
|
+
{"version":3,"file":"InvoicesApi.js","sourceRoot":"","sources":["../../src/api/InvoicesApi.ts"],"names":[],"mappings":"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"}
|
|
@@ -77,6 +77,8 @@ export declare const formatInvoicesCsvErrors: (errors: InvoicesCsvError[]) => st
|
|
|
77
77
|
export declare const parseInvoicesCsv: (csvText: string) => {
|
|
78
78
|
invoices: InvoicesCsv[];
|
|
79
79
|
errors: InvoicesCsvError[];
|
|
80
|
+
/** rows without an invoice number (credit/free charges) — skipped, not errors */
|
|
81
|
+
nullInvoiceNumbers: number;
|
|
80
82
|
};
|
|
81
83
|
export declare const fromInvoiceCsv: ({ csv, meta, }: {
|
|
82
84
|
csv: InvoicesCsv;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoicesCsv.common.d.ts","sourceRoot":"","sources":["../../src/common/invoicesCsv.common.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EACV,OAAO,EAEP,IAAI,EACL,MAAM,2CAA2C,CAAC;AAEnD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAmGxB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwB5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAM5D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;CAC5B;AAED,+EAA+E;AAC/E,eAAO,MAAM,uBAAuB,GAAI,QAAQ,gBAAgB,EAAE,KAAG,MAQtD,CAAC;AAEhB,eAAO,MAAM,gBAAgB,GAC3B,SAAS,MAAM,KACd;IACD,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,MAAM,EAAE,gBAAgB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"invoicesCsv.common.d.ts","sourceRoot":"","sources":["../../src/common/invoicesCsv.common.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,KAAK,EACV,OAAO,EAEP,IAAI,EACL,MAAM,2CAA2C,CAAC;AAEnD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAmGxB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwB5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAM5D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;CAC5B;AAED,+EAA+E;AAC/E,eAAO,MAAM,uBAAuB,GAAI,QAAQ,gBAAgB,EAAE,KAAG,MAQtD,CAAC;AAEhB,eAAO,MAAM,gBAAgB,GAC3B,SAAS,MAAM,KACd;IACD,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,iFAAiF;IACjF,kBAAkB,EAAE,MAAM,CAAC;CA4B5B,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,gBAG5B;IACD,GAAG,EAAE,WAAW,CAAC;IACjB,IAAI,EAAE,IAAI,CAAC;CACZ,KAAG,OAgCH,CAAC"}
|
|
@@ -140,14 +140,22 @@ export const parseInvoicesCsv = (csvText) => {
|
|
|
140
140
|
});
|
|
141
141
|
const invoices = [];
|
|
142
142
|
const errors = [];
|
|
143
|
+
let nullInvoiceNumbers = 0;
|
|
143
144
|
records.forEach((record, i) => {
|
|
145
|
+
// Credit/free charges ("CHARGING : CREDIT", €0.00) come without an
|
|
146
|
+
// invoice number. They cannot be keyed on invoice_number, so they are
|
|
147
|
+
// counted and skipped instead of failing the whole file.
|
|
148
|
+
if (naToNull(record.InvoiceNumber) === null) {
|
|
149
|
+
nullInvoiceNumbers++;
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
144
152
|
const result = invoicesCsvSchema.safeParse(record);
|
|
145
153
|
if (result.success)
|
|
146
154
|
invoices.push(result.data);
|
|
147
155
|
else
|
|
148
156
|
errors.push({ line: i + 2, issues: result.error.issues });
|
|
149
157
|
});
|
|
150
|
-
return { invoices, errors };
|
|
158
|
+
return { invoices, errors, nullInvoiceNumbers };
|
|
151
159
|
};
|
|
152
160
|
export const fromInvoiceCsv = ({ csv, meta, }) => {
|
|
153
161
|
const result = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"invoicesCsv.common.js","sourceRoot":"","sources":["../../src/common/invoicesCsv.common.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"invoicesCsv.common.js","sourceRoot":"","sources":["../../src/common/invoicesCsv.common.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@ import { ISyncPlanHandler } from "./ISyncPlanHandler.js";
|
|
|
6
6
|
export interface SyncHandlerParams<DB extends SyncDbRow, INITIALZER extends object> {
|
|
7
7
|
store: IMateStore<string, DB, INITIALZER, any>;
|
|
8
8
|
initializerKeys: KeyParams<INITIALZER>[];
|
|
9
|
-
deleteAbsent: "hard" | "soft";
|
|
9
|
+
deleteAbsent: "hard" | "soft" | "never";
|
|
10
10
|
conflictColumn: keyof DB & keyof INITIALZER;
|
|
11
11
|
}
|
|
12
12
|
export declare abstract class ISyncHandler<DOC, DB extends SyncDbRow, INITIALZER extends object> extends ISyncPlanHandler<DOC, DB, INITIALZER> {
|
|
@@ -15,10 +15,11 @@ export declare abstract class ISyncHandler<DOC, DB extends SyncDbRow, INITIALZER
|
|
|
15
15
|
/**
|
|
16
16
|
* Snapshot sync: plan in memory, then — in one advisory-locked transaction —
|
|
17
17
|
* delete the rows absent from the feed (`deleteAbsent`: "soft" keeps them
|
|
18
|
-
* with `deleted_at` set, "hard" removes them — the table mirrors the feed
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
18
|
+
* with `deleted_at` set, "hard" removes them — the table mirrors the feed;
|
|
19
|
+
* "never" keeps absent rows untouched and also disables the truncation
|
|
20
|
+
* circuit breaker, since partial feeds are expected then) and upsert the
|
|
21
|
+
* rest (value-compared via IS DISTINCT FROM). The delete runs first so rows
|
|
22
|
+
* the upsert is about to insert cannot be caught by the absence check.
|
|
22
23
|
*/
|
|
23
24
|
snapshot(p: {
|
|
24
25
|
docs: DOC[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ISyncHandler.d.ts","sourceRoot":"","sources":["../../src/sync/ISyncHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,UAAU,EAChB,MAAM,2CAA2C,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,2CAA2C,CAAC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD,MAAM,WAAW,iBAAiB,CAChC,EAAE,SAAS,SAAS,EACpB,UAAU,SAAS,MAAM;IAGzB,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;IAC/C,eAAe,EAAE,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;IACzC,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"ISyncHandler.d.ts","sourceRoot":"","sources":["../../src/sync/ISyncHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,UAAU,EAChB,MAAM,2CAA2C,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,2CAA2C,CAAC;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iDAAiD,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAGzD,MAAM,WAAW,iBAAiB,CAChC,EAAE,SAAS,SAAS,EACpB,UAAU,SAAS,MAAM;IAGzB,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;IAC/C,eAAe,EAAE,SAAS,CAAC,UAAU,CAAC,EAAE,CAAC;IACzC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IACxC,cAAc,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC;CAC7C;AAED,8BAAsB,YAAY,CAChC,GAAG,EACH,EAAE,SAAS,SAAS,EACpB,UAAU,SAAS,MAAM,CACzB,SAAQ,gBAAgB,CAAC,GAAG,EAAE,EAAE,EAAE,UAAU,CAAC;IAC7C,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,iBAAiB,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;gBAE1C,CAAC,EAAE,iBAAiB,CAAC,EAAE,EAAE,UAAU,CAAC;IAKvD;;;;;;;;OAQG;IACU,QAAQ,CAAC,CAAC,EAAE;QAAE,IAAI,EAAE,GAAG,EAAE,CAAC;QAAC,IAAI,EAAE,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,CAAC;IA2C3E;;;;;;OAMG;IACI,OAAO,IAAI;QAChB,aAAa,EAAE,MAAM,EAAE,CAAC;QACxB,cAAc,EAAE,MAAM,EAAE,CAAC;KAC1B;CAWF"}
|
|
@@ -10,10 +10,11 @@ export class ISyncHandler extends ISyncPlanHandler {
|
|
|
10
10
|
/**
|
|
11
11
|
* Snapshot sync: plan in memory, then — in one advisory-locked transaction —
|
|
12
12
|
* delete the rows absent from the feed (`deleteAbsent`: "soft" keeps them
|
|
13
|
-
* with `deleted_at` set, "hard" removes them — the table mirrors the feed
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
13
|
+
* with `deleted_at` set, "hard" removes them — the table mirrors the feed;
|
|
14
|
+
* "never" keeps absent rows untouched and also disables the truncation
|
|
15
|
+
* circuit breaker, since partial feeds are expected then) and upsert the
|
|
16
|
+
* rest (value-compared via IS DISTINCT FROM). The delete runs first so rows
|
|
17
|
+
* the upsert is about to insert cannot be caught by the absence check.
|
|
17
18
|
*/
|
|
18
19
|
async snapshot(p) {
|
|
19
20
|
return await transaction(this.params.store.table, async (tx) => {
|
|
@@ -22,10 +23,13 @@ export class ISyncHandler extends ISyncPlanHandler {
|
|
|
22
23
|
docs: p.docs,
|
|
23
24
|
dbDocs,
|
|
24
25
|
meta: p.meta,
|
|
26
|
+
skipCircuitBreaker: this.params.deleteAbsent === "never",
|
|
25
27
|
});
|
|
26
|
-
const deleted = this.params.deleteAbsent === "
|
|
27
|
-
?
|
|
28
|
-
:
|
|
28
|
+
const deleted = this.params.deleteAbsent === "never"
|
|
29
|
+
? 0
|
|
30
|
+
: this.params.deleteAbsent === "hard"
|
|
31
|
+
? await this.params.store.deleteWhereIdNotIn(plan.seenIds, tx)
|
|
32
|
+
: await this.params.store.softDeleteWhereIdNotIn(plan.seenIds, p.meta, tx);
|
|
29
33
|
const { compareColumns, updateColumns } = this.columns();
|
|
30
34
|
const upserted = await this.params.store.upsertMany(plan.upserts, {
|
|
31
35
|
conflictColumn: this.params.conflictColumn.toString(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ISyncHandler.js","sourceRoot":"","sources":["../../src/sync/ISyncHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,GAEZ,MAAM,2CAA2C,CAAC;AAInD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAa7D,MAAM,OAAgB,YAIpB,SAAQ,gBAAqC;IAC1B,MAAM,CAAoC;IAE7D,YAAmB,CAAoC;QACrD,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;IACzB,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"ISyncHandler.js","sourceRoot":"","sources":["../../src/sync/ISyncHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,GAEZ,MAAM,2CAA2C,CAAC;AAInD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAa7D,MAAM,OAAgB,YAIpB,SAAQ,gBAAqC;IAC1B,MAAM,CAAoC;IAE7D,YAAmB,CAAoC;QACrD,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC;QACxB,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;IACzB,CAAC;IAED;;;;;;;;OAQG;IACI,KAAK,CAAC,QAAQ,CAAC,CAA8B;QAClD,OAAO,MAAM,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE;YAC7D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;YAE5D,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBACrB,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,MAAM;gBACN,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,kBAAkB,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK,OAAO;aACzD,CAAC,CAAC;YAEH,MAAM,OAAO,GACX,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK,OAAO;gBAClC,CAAC,CAAC,CAAC;gBACH,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK,MAAM;oBACnC,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC;oBAC9D,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAC5C,IAAI,CAAC,OAAO,EACZ,CAAC,CAAC,IAAI,EACN,EAAE,CACH,CAAC;YAEV,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;YACzD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CACjD,IAAI,CAAC,OAAO,EACZ;gBACE,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE;gBACrD,aAAa,EAAE,aAAa;gBAC5B,cAAc,EAAE,cAAc;aAC/B,EACD,EAAE,CACH,CAAC;YAEF,OAAO;gBACL,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM;gBACxB,cAAc,EAAE,IAAI,CAAC,cAAc;gBACnC,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,QAAQ;gBACR,OAAO;aACR,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACI,OAAO;QAIZ,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAc,CAAC,CAAC;QAC3E,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1E,MAAM,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC;YACjD,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,YAAY,CAAC;YAC5B,CAAC,CAAC,OAAO,CAAC;QACZ,OAAO;YACL,cAAc;YACd,aAAa,EAAE,CAAC,GAAG,cAAc,EAAE,YAAY,EAAE,iBAAiB,CAAC;SACpE,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -10,12 +10,16 @@ export declare abstract class ISyncPlanHandler<DOC, DB extends SyncDbRow, INITIA
|
|
|
10
10
|
* Pure planning step of a snapshot sync: match feed docs to db rows by the
|
|
11
11
|
* semantic key (deduplicating the feed, first wins) and track which db ids
|
|
12
12
|
* were seen so the caller can delete the absent rest.
|
|
13
|
-
* Throws (before anything is written) when the feed looks truncated
|
|
13
|
+
* Throws (before anything is written) when the feed looks truncated —
|
|
14
|
+
* unless `skipCircuitBreaker` is set: syncs that never delete absent rows
|
|
15
|
+
* (`deleteAbsent: "never"`) feed partial snapshots by design, so a small
|
|
16
|
+
* feed is expected there, not a truncation signal.
|
|
14
17
|
*/
|
|
15
18
|
plan(p: {
|
|
16
19
|
docs: DOC[];
|
|
17
20
|
dbDocs: DB[];
|
|
18
21
|
meta: Meta;
|
|
22
|
+
skipCircuitBreaker?: boolean;
|
|
19
23
|
}): SyncPlan<INITIALZER>;
|
|
20
24
|
}
|
|
21
25
|
//# sourceMappingURL=ISyncPlanHandler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ISyncPlanHandler.d.ts","sourceRoot":"","sources":["../../src/sync/ISyncPlanHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,2CAA2C,CAAC;AAGtE,8BAAsB,gBAAgB,CACpC,GAAG,EACH,EAAE,SAAS,SAAS,EACpB,UAAU,SAAS,MAAM;aAGP,cAAc,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU;gBAA3C,cAAc,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU;IAG7D,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,GAAG,UAAU;IAElE,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI;IAGnD,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,MAAM,GAAG,IAAI;IAIzC
|
|
1
|
+
{"version":3,"file":"ISyncPlanHandler.d.ts","sourceRoot":"","sources":["../../src/sync/ISyncPlanHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,2CAA2C,CAAC;AAGtE,8BAAsB,gBAAgB,CACpC,GAAG,EACH,EAAE,SAAS,SAAS,EACpB,UAAU,SAAS,MAAM;aAGP,cAAc,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU;gBAA3C,cAAc,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU;IAG7D,SAAS,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,GAAG,UAAU;IAElE,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI;IAGnD,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,GAAG,MAAM,GAAG,IAAI;IAIzC;;;;;;;;OAQG;IACI,IAAI,CAAC,CAAC,EAAE;QACb,IAAI,EAAE,GAAG,EAAE,CAAC;QACZ,MAAM,EAAE,EAAE,EAAE,CAAC;QACb,IAAI,EAAE,IAAI,CAAC;QACX,kBAAkB,CAAC,EAAE,OAAO,CAAC;KAC9B,GAAG,QAAQ,CAAC,UAAU,CAAC;CA+CzB"}
|
|
@@ -14,11 +14,15 @@ export class ISyncPlanHandler {
|
|
|
14
14
|
* Pure planning step of a snapshot sync: match feed docs to db rows by the
|
|
15
15
|
* semantic key (deduplicating the feed, first wins) and track which db ids
|
|
16
16
|
* were seen so the caller can delete the absent rest.
|
|
17
|
-
* Throws (before anything is written) when the feed looks truncated
|
|
17
|
+
* Throws (before anything is written) when the feed looks truncated —
|
|
18
|
+
* unless `skipCircuitBreaker` is set: syncs that never delete absent rows
|
|
19
|
+
* (`deleteAbsent: "never"`) feed partial snapshots by design, so a small
|
|
20
|
+
* feed is expected there, not a truncation signal.
|
|
18
21
|
*/
|
|
19
22
|
plan(p) {
|
|
20
23
|
const activeCount = p.dbDocs.filter((doc) => doc.deleted_at == null).length;
|
|
21
|
-
if (
|
|
24
|
+
if (!p.skipCircuitBreaker &&
|
|
25
|
+
activeCount > 0 &&
|
|
22
26
|
p.docs.length < activeCount * CIRCUIT_BREAKER_MIN_RATIO)
|
|
23
27
|
throw new Error(`sync aborted: feed has ${p.docs.length} docs for ${activeCount} active rows` +
|
|
24
28
|
` (circuit breaker ratio ${CIRCUIT_BREAKER_MIN_RATIO}) — refusing to mass soft-delete`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ISyncPlanHandler.js","sourceRoot":"","sources":["../../src/sync/ISyncPlanHandler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAErE,MAAM,OAAgB,gBAAgB;IAMlB;IADlB,YACkB,cAA2C;QAA3C,mBAAc,GAAd,cAAc,CAA6B;IAC1D,CAAC;IAIM,SAAS,CAAC,GAAe;QACjC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,CAAkB,CAAC;IAC7D,CAAC;IACS,OAAO,CAAC,GAAO;QACvB,OAAO,GAAG,CAAC,IAAI,CAAC,cAAc,CAAkB,CAAC;IACnD,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"ISyncPlanHandler.js","sourceRoot":"","sources":["../../src/sync/ISyncPlanHandler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAErE,MAAM,OAAgB,gBAAgB;IAMlB;IADlB,YACkB,cAA2C;QAA3C,mBAAc,GAAd,cAAc,CAA6B;IAC1D,CAAC;IAIM,SAAS,CAAC,GAAe;QACjC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,CAAC,IAAI,IAAI,CAAkB,CAAC;IAC7D,CAAC;IACS,OAAO,CAAC,GAAO;QACvB,OAAO,GAAG,CAAC,IAAI,CAAC,cAAc,CAAkB,CAAC;IACnD,CAAC;IAED;;;;;;;;OAQG;IACI,IAAI,CAAC,CAKX;QACC,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,MAAM,CAAC;QAC5E,IACE,CAAC,CAAC,CAAC,kBAAkB;YACrB,WAAW,GAAG,CAAC;YACf,CAAC,CAAC,IAAI,CAAC,MAAM,GAAG,WAAW,GAAG,yBAAyB;YAEvD,MAAM,IAAI,KAAK,CACb,0BAA0B,CAAC,CAAC,IAAI,CAAC,MAAM,aAAa,WAAW,cAAc;gBAC3E,2BAA2B,yBAAyB,kCAAkC,CACzF,CAAC;QAEJ,MAAM,OAAO,GAAG,IAAI,GAAG,EAAc,CAAC;QACtC,KAAK,MAAM,KAAK,IAAI,CAAC,CAAC,MAAM,EAAE,CAAC;YAC7B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,GAAG,KAAK,IAAI;gBAAE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC;QAED,MAAM,IAAI,GAAyB;YACjC,OAAO,EAAE,EAAE;YACX,OAAO,EAAE,EAAE;YACX,cAAc,EAAE,CAAC;YACjB,YAAY,EAAE,CAAC;SAChB,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QAEnC,KAAK,MAAM,SAAS,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACrD,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAEnC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;gBACjB,IAAI,CAAC,YAAY,EAAE,CAAC;gBACpB,SAAS;YACX,CAAC;YACD,IAAI,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACtB,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,SAAS;YACX,CAAC;YACD,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAElB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,KAAK,KAAK,SAAS;gBAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACrD,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InvoicesSync.js","sourceRoot":"","sources":["../../src/sync/InvoicesSync.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,GAG3B,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AAErF,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAE7E,MAAM,OAAO,YAAa,SAAQ,YAIjC;IACC;QACE,KAAK,CAAC;YACJ,KAAK,EAAE,gBAAgB,EAAE;YACzB,cAAc,EAAE,gBAAgB;YAChC,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"InvoicesSync.js","sourceRoot":"","sources":["../../src/sync/InvoicesSync.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,0BAA0B,GAG3B,MAAM,iDAAiD,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,+CAA+C,CAAC;AAErF,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAE7E,MAAM,OAAO,YAAa,SAAQ,YAIjC;IACC;QACE,KAAK,CAAC;YACJ,KAAK,EAAE,gBAAgB,EAAE;YACzB,cAAc,EAAE,gBAAgB;YAChC,YAAY,EAAE,OAAO;YACrB,eAAe,EAAE,0BAA0B;SAC5C,CAAC,CAAC;IACL,CAAC;IAEkB,aAAa,CAC9B,OAAgB,EAChB,IAAU;QAEV,OAAO,oBAAoB,CAAC;YAC1B,OAAO;YACP,IAAI;SACL,CAAC,CAAC;IACL,CAAC;CACF"}
|
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.5",
|
|
4
4
|
"description": "Fetch + store Tesla Supercharger locations and pricing",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"author": "MXPicture",
|
|
@@ -44,8 +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.
|
|
47
|
+
"@mxpicture/tesla-superchargers-generated": "^0.1.5",
|
|
48
|
+
"@mxpicture/tesla-superchargers-mate": "^0.1.5",
|
|
49
|
+
"@mxpicture/tesla-superchargers-cloud-store": "^0.1.5",
|
|
49
50
|
"csv-parse": "^7.0.1",
|
|
50
51
|
"json5": "^2.2.3",
|
|
51
52
|
"zod": "^4.4.3"
|