@voyantjs/plugin-smartbill 0.26.6 → 0.26.8
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/client.d.ts +22 -11
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +65 -45
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/mock.d.ts +8 -2
- package/dist/mock.d.ts.map +1 -1
- package/dist/mock.js +175 -38
- package/dist/plugin.d.ts.map +1 -1
- package/dist/plugin.js +6 -1
- package/dist/settlement.d.ts.map +1 -1
- package/dist/settlement.js +4 -3
- package/dist/types.d.ts +74 -13
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/client.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { SmartbillFetch, SmartbillInvoiceBody, SmartbillInvoiceResponse, SmartbillPdfResponse, SmartbillStatusResponse } from "./types.js";
|
|
1
|
+
import type { SmartbillEnvelope, SmartbillEstimateInvoicesResponse, SmartbillFetch, SmartbillInvoiceBody, SmartbillInvoiceResponse, SmartbillPdfResponse, SmartbillSeriesResponse, SmartbillStatusResponse, SmartbillTaxesResponse } from "./types.js";
|
|
2
2
|
/**
|
|
3
3
|
* Options for {@link createSmartbillClient}.
|
|
4
4
|
*/
|
|
@@ -15,24 +15,35 @@ export interface SmartbillClientOptions {
|
|
|
15
15
|
fetch?: SmartbillFetch;
|
|
16
16
|
}
|
|
17
17
|
export interface SmartbillClientApi {
|
|
18
|
-
/** Create an invoice. Returns the series + number + URL. */
|
|
18
|
+
/** Create an invoice. Returns the live envelope: series + number + URL + status/message. */
|
|
19
19
|
createInvoice(body: SmartbillInvoiceBody): Promise<SmartbillInvoiceResponse>;
|
|
20
20
|
/** Create a proforma invoice. */
|
|
21
21
|
createProforma(body: SmartbillInvoiceBody): Promise<SmartbillInvoiceResponse>;
|
|
22
|
-
/** Cancel an invoice by series + number. */
|
|
23
|
-
cancelInvoice(companyVatCode: string, seriesName: string, number: string): Promise<
|
|
24
|
-
|
|
25
|
-
|
|
22
|
+
/** Cancel an invoice by series + number. Returns the live envelope. */
|
|
23
|
+
cancelInvoice(companyVatCode: string, seriesName: string, number: string): Promise<SmartbillEnvelope>;
|
|
24
|
+
/** Restore a previously cancelled invoice. */
|
|
25
|
+
restoreInvoice(companyVatCode: string, seriesName: string, number: string): Promise<SmartbillEnvelope>;
|
|
26
26
|
/** Delete an invoice by series + number. */
|
|
27
|
-
deleteInvoice(companyVatCode: string, seriesName: string, number: string): Promise<
|
|
28
|
-
|
|
29
|
-
}>;
|
|
30
|
-
/** Reverse an invoice by series + number. */
|
|
27
|
+
deleteInvoice(companyVatCode: string, seriesName: string, number: string): Promise<SmartbillEnvelope>;
|
|
28
|
+
/** Reverse an invoice — issues a credit-note style reversal invoice. */
|
|
31
29
|
reverseInvoice(companyVatCode: string, seriesName: string, number: string): Promise<SmartbillInvoiceResponse>;
|
|
32
|
-
/**
|
|
30
|
+
/** Download invoice PDF bytes. */
|
|
31
|
+
viewInvoicePdf(companyVatCode: string, seriesName: string, number: string): Promise<SmartbillPdfResponse>;
|
|
32
|
+
/**
|
|
33
|
+
* Alias for {@link viewInvoicePdf}. Kept for backward compatibility with
|
|
34
|
+
* earlier client versions that only exposed an invoice PDF method.
|
|
35
|
+
*/
|
|
33
36
|
viewPdf(companyVatCode: string, seriesName: string, number: string): Promise<SmartbillPdfResponse>;
|
|
37
|
+
/** Download proforma PDF bytes. */
|
|
38
|
+
viewEstimatePdf(companyVatCode: string, seriesName: string, number: string): Promise<SmartbillPdfResponse>;
|
|
34
39
|
/** Get payment status for an invoice. */
|
|
35
40
|
getPaymentStatus(companyVatCode: string, seriesName: string, number: string): Promise<SmartbillStatusResponse>;
|
|
41
|
+
/** List taxes configured on the SmartBill account. */
|
|
42
|
+
listTaxes(): Promise<SmartbillTaxesResponse>;
|
|
43
|
+
/** List document series configured on the SmartBill account. */
|
|
44
|
+
listSeries(): Promise<SmartbillSeriesResponse>;
|
|
45
|
+
/** List invoices created from a proforma (conversion lookup). */
|
|
46
|
+
listEstimateInvoices(companyVatCode: string, seriesName: string, number: string): Promise<SmartbillEstimateInvoicesResponse>;
|
|
36
47
|
}
|
|
37
48
|
export declare function createSmartbillClient(options: SmartbillClientOptions): SmartbillClientApi;
|
|
38
49
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,iBAAiB,EACjB,iCAAiC,EACjC,cAAc,EACd,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACvB,MAAM,YAAY,CAAA;AAEnB;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,0CAA0C;IAC1C,QAAQ,EAAE,MAAM,CAAA;IAChB,2BAA2B;IAC3B,QAAQ,EAAE,MAAM,CAAA;IAChB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,oEAAoE;IACpE,KAAK,CAAC,EAAE,cAAc,CAAA;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,4FAA4F;IAC5F,aAAa,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAA;IAC5E,iCAAiC;IACjC,cAAc,CAAC,IAAI,EAAE,oBAAoB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAAA;IAC7E,uEAAuE;IACvE,aAAa,CACX,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,iBAAiB,CAAC,CAAA;IAC7B,8CAA8C;IAC9C,cAAc,CACZ,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,iBAAiB,CAAC,CAAA;IAC7B,4CAA4C;IAC5C,aAAa,CACX,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,iBAAiB,CAAC,CAAA;IAC7B,wEAAwE;IACxE,cAAc,CACZ,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,wBAAwB,CAAC,CAAA;IACpC,kCAAkC;IAClC,cAAc,CACZ,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAChC;;;OAGG;IACH,OAAO,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAClG,mCAAmC;IACnC,eAAe,CACb,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAChC,yCAAyC;IACzC,gBAAgB,CACd,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,uBAAuB,CAAC,CAAA;IACnC,sDAAsD;IACtD,SAAS,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAAA;IAC5C,gEAAgE;IAChE,UAAU,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAAA;IAC9C,iEAAiE;IACjE,oBAAoB,CAClB,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,iCAAiC,CAAC,CAAA;CAC9C;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,kBAAkB,CAqMzF"}
|
package/dist/client.js
CHANGED
|
@@ -11,7 +11,7 @@ export function createSmartbillClient(options) {
|
|
|
11
11
|
Accept: "application/json",
|
|
12
12
|
};
|
|
13
13
|
}
|
|
14
|
-
async function request(method, path, body) {
|
|
14
|
+
async function request(operation, method, path, body) {
|
|
15
15
|
if (!fetchImpl) {
|
|
16
16
|
throw new Error("SmartBill client requires a fetch implementation");
|
|
17
17
|
}
|
|
@@ -23,83 +23,103 @@ export function createSmartbillClient(options) {
|
|
|
23
23
|
init.body = JSON.stringify(body);
|
|
24
24
|
const response = await fetchImpl(`${apiUrl}${path}`, init);
|
|
25
25
|
let text = "";
|
|
26
|
-
let
|
|
26
|
+
let parsed = null;
|
|
27
27
|
try {
|
|
28
28
|
text = await response.text();
|
|
29
|
-
|
|
29
|
+
parsed = text ? JSON.parse(text) : null;
|
|
30
30
|
}
|
|
31
31
|
catch {
|
|
32
|
-
// leave
|
|
32
|
+
// leave parsed as null, surface text
|
|
33
33
|
}
|
|
34
|
-
|
|
34
|
+
if (!response.ok) {
|
|
35
|
+
throw new Error(`SmartBill ${operation} failed (${response.status}): ${text}`);
|
|
36
|
+
}
|
|
37
|
+
const envelope = (parsed ?? {});
|
|
38
|
+
if (envelope.status === "Error" || envelope.errorText) {
|
|
39
|
+
throw new Error(`SmartBill ${operation} failed: ${envelope.errorText ?? envelope.message ?? "Error"}`);
|
|
40
|
+
}
|
|
41
|
+
return envelope;
|
|
35
42
|
}
|
|
36
|
-
async function
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
43
|
+
async function fetchPdf(operation, path) {
|
|
44
|
+
if (!fetchImpl) {
|
|
45
|
+
throw new Error("SmartBill client requires a fetch implementation");
|
|
46
|
+
}
|
|
47
|
+
const response = await fetchImpl(`${apiUrl}${path}`, {
|
|
48
|
+
method: "GET",
|
|
49
|
+
headers: { ...headers(), Accept: "application/pdf" },
|
|
50
|
+
});
|
|
51
|
+
if (!response.ok) {
|
|
52
|
+
const text = await response.text().catch(() => "");
|
|
53
|
+
throw new Error(`SmartBill ${operation} failed (${response.status}): ${text}`);
|
|
40
54
|
}
|
|
41
|
-
|
|
55
|
+
const buffer = await response.arrayBuffer();
|
|
56
|
+
const contentType = response.headers?.get("content-type") ?? "application/pdf";
|
|
57
|
+
return { bytes: new Uint8Array(buffer), contentType };
|
|
58
|
+
}
|
|
59
|
+
function pdfQuery(companyVatCode, seriesName, number) {
|
|
60
|
+
return `cif=${encodeURIComponent(companyVatCode)}&seriesname=${encodeURIComponent(seriesName)}&number=${encodeURIComponent(number)}`;
|
|
61
|
+
}
|
|
62
|
+
async function createInvoice(body) {
|
|
63
|
+
return request("createInvoice", "POST", "/invoice", body);
|
|
42
64
|
}
|
|
43
65
|
async function createProforma(body) {
|
|
44
|
-
|
|
45
|
-
if (!res.ok) {
|
|
46
|
-
throw new Error(`SmartBill createProforma failed (${res.status}): ${res.text}`);
|
|
47
|
-
}
|
|
48
|
-
return (res.json ?? {});
|
|
66
|
+
return request("createProforma", "POST", "/estimate", body);
|
|
49
67
|
}
|
|
50
68
|
async function cancelInvoice(companyVatCode, seriesName, number) {
|
|
51
|
-
|
|
69
|
+
return request("cancelInvoice", "PUT", "/invoice/cancel", {
|
|
70
|
+
companyVatCode,
|
|
71
|
+
seriesName,
|
|
72
|
+
number,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
async function restoreInvoice(companyVatCode, seriesName, number) {
|
|
76
|
+
return request("restoreInvoice", "PUT", "/invoice/restore", {
|
|
52
77
|
companyVatCode,
|
|
53
78
|
seriesName,
|
|
54
79
|
number,
|
|
55
80
|
});
|
|
56
|
-
if (!res.ok) {
|
|
57
|
-
throw new Error(`SmartBill cancelInvoice failed (${res.status}): ${res.text}`);
|
|
58
|
-
}
|
|
59
|
-
return (res.json ?? {});
|
|
60
81
|
}
|
|
61
82
|
async function deleteInvoice(companyVatCode, seriesName, number) {
|
|
62
|
-
|
|
63
|
-
const res = await request("DELETE", `/invoice?${query}`);
|
|
64
|
-
if (!res.ok) {
|
|
65
|
-
throw new Error(`SmartBill deleteInvoice failed (${res.status}): ${res.text}`);
|
|
66
|
-
}
|
|
67
|
-
return (res.json ?? {});
|
|
83
|
+
return request("deleteInvoice", "DELETE", `/invoice?${pdfQuery(companyVatCode, seriesName, number)}`);
|
|
68
84
|
}
|
|
69
85
|
async function reverseInvoice(companyVatCode, seriesName, number) {
|
|
70
|
-
|
|
86
|
+
return request("reverseInvoice", "PUT", "/invoice/reverse", {
|
|
71
87
|
companyVatCode,
|
|
72
88
|
seriesName,
|
|
73
89
|
number,
|
|
74
90
|
});
|
|
75
|
-
if (!res.ok) {
|
|
76
|
-
throw new Error(`SmartBill reverseInvoice failed (${res.status}): ${res.text}`);
|
|
77
|
-
}
|
|
78
|
-
return (res.json ?? {});
|
|
79
91
|
}
|
|
80
|
-
async function
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
}
|
|
86
|
-
return (res.json ?? {});
|
|
92
|
+
async function viewInvoicePdf(companyVatCode, seriesName, number) {
|
|
93
|
+
return fetchPdf("viewInvoicePdf", `/invoice/pdf?${pdfQuery(companyVatCode, seriesName, number)}`);
|
|
94
|
+
}
|
|
95
|
+
async function viewEstimatePdf(companyVatCode, seriesName, number) {
|
|
96
|
+
return fetchPdf("viewEstimatePdf", `/estimate/pdf?${pdfQuery(companyVatCode, seriesName, number)}`);
|
|
87
97
|
}
|
|
88
98
|
async function getPaymentStatus(companyVatCode, seriesName, number) {
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
99
|
+
return request("getPaymentStatus", "GET", `/invoice/paymentstatus?${pdfQuery(companyVatCode, seriesName, number)}`);
|
|
100
|
+
}
|
|
101
|
+
async function listTaxes() {
|
|
102
|
+
return request("listTaxes", "GET", "/tax");
|
|
103
|
+
}
|
|
104
|
+
async function listSeries() {
|
|
105
|
+
return request("listSeries", "GET", "/series");
|
|
106
|
+
}
|
|
107
|
+
async function listEstimateInvoices(companyVatCode, seriesName, number) {
|
|
108
|
+
return request("listEstimateInvoices", "GET", `/estimate/invoices?${pdfQuery(companyVatCode, seriesName, number)}`);
|
|
95
109
|
}
|
|
96
110
|
return {
|
|
97
111
|
createInvoice,
|
|
98
112
|
createProforma,
|
|
99
113
|
cancelInvoice,
|
|
114
|
+
restoreInvoice,
|
|
100
115
|
deleteInvoice,
|
|
101
116
|
reverseInvoice,
|
|
102
|
-
|
|
117
|
+
viewInvoicePdf,
|
|
118
|
+
viewPdf: viewInvoicePdf,
|
|
119
|
+
viewEstimatePdf,
|
|
103
120
|
getPaymentStatus,
|
|
121
|
+
listTaxes,
|
|
122
|
+
listSeries,
|
|
123
|
+
listEstimateInvoices,
|
|
104
124
|
};
|
|
105
125
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -10,5 +10,5 @@ export type { ResolvedSmartbillSyncEventNames, SmartbillSyncRuntime } from "./ru
|
|
|
10
10
|
export { createSmartbillSyncRuntime } from "./runtime.js";
|
|
11
11
|
export type { SmartbillInvoiceSettlementPoller, SmartbillInvoiceSettlementPollerOptions, SmartbillSettlementExternalRef, SmartbillSettlementInvoice, SmartbillSettlementPollerContext, SmartbillSettlementPollerResult, } from "./settlement.js";
|
|
12
12
|
export { createSmartbillInvoiceSettlementPoller } from "./settlement.js";
|
|
13
|
-
export type { SmartbillClient, SmartbillFetch, SmartbillInvoiceBody, SmartbillInvoiceResponse, SmartbillPdfResponse, SmartbillProduct, SmartbillStatusResponse, VoyantInvoiceEvent, } from "./types.js";
|
|
13
|
+
export type { SmartbillClient, SmartbillEnvelope, SmartbillEstimateInvoicesResponse, SmartbillFetch, SmartbillInvoiceBody, SmartbillInvoiceResponse, SmartbillPaymentEntry, SmartbillPdfResponse, SmartbillProduct, SmartbillSeriesResponse, SmartbillStatusResponse, SmartbillTaxesResponse, VoyantInvoiceEvent, } from "./types.js";
|
|
14
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACnD,YAAY,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AAC3D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAA;AACnF,YAAY,EACV,qBAAqB,EACrB,yBAAyB,EACzB,2BAA2B,EAC3B,0BAA0B,EAC1B,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,yBAAyB,EACzB,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAA;AACrD,YAAY,EACV,eAAe,EACf,cAAc,EACd,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,YAAY,EAAE,+BAA+B,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACzF,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAA;AACzD,YAAY,EACV,gCAAgC,EAChC,uCAAuC,EACvC,8BAA8B,EAC9B,0BAA0B,EAC1B,gCAAgC,EAChC,+BAA+B,GAChC,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,sCAAsC,EAAE,MAAM,iBAAiB,CAAA;AACxE,YAAY,EACV,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,YAAY,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AACnD,YAAY,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AAC3D,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAA;AACnF,YAAY,EACV,qBAAqB,EACrB,yBAAyB,EACzB,2BAA2B,EAC3B,0BAA0B,EAC1B,oBAAoB,EACpB,qBAAqB,EACrB,mBAAmB,EACnB,mBAAmB,EACnB,yBAAyB,EACzB,0BAA0B,EAC1B,gBAAgB,GACjB,MAAM,WAAW,CAAA;AAClB,OAAO,EAAE,yBAAyB,EAAE,MAAM,WAAW,CAAA;AACrD,YAAY,EACV,eAAe,EACf,cAAc,EACd,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,YAAY,EAAE,+BAA+B,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAA;AACzF,OAAO,EAAE,0BAA0B,EAAE,MAAM,cAAc,CAAA;AACzD,YAAY,EACV,gCAAgC,EAChC,uCAAuC,EACvC,8BAA8B,EAC9B,0BAA0B,EAC1B,gCAAgC,EAChC,+BAA+B,GAChC,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAE,sCAAsC,EAAE,MAAM,iBAAiB,CAAA;AACxE,YAAY,EACV,eAAe,EACf,iBAAiB,EACjB,iCAAiC,EACjC,cAAc,EACd,oBAAoB,EACpB,wBAAwB,EACxB,qBAAqB,EACrB,oBAAoB,EACpB,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,YAAY,CAAA"}
|
package/dist/mock.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { SmartbillFetch, SmartbillInvoiceBody, SmartbillInvoiceResponse } from "./types.js";
|
|
1
|
+
import type { SmartbillFetch, SmartbillInvoiceBody, SmartbillInvoiceResponse, SmartbillPaymentEntry } from "./types.js";
|
|
2
2
|
export type SmartbillMockDocumentKind = "invoice" | "estimate";
|
|
3
3
|
export type SmartbillMockDocumentStatus = "issued" | "cancelled" | "deleted" | "reversed" | "restored";
|
|
4
4
|
export interface SmartbillMockTax {
|
|
@@ -21,6 +21,7 @@ export interface SmartbillMockDocument {
|
|
|
21
21
|
url: string;
|
|
22
22
|
total: number;
|
|
23
23
|
paidAmount: number;
|
|
24
|
+
payments: SmartbillPaymentEntry[];
|
|
24
25
|
createdAt: string;
|
|
25
26
|
convertedInvoices: SmartbillInvoiceResponse[];
|
|
26
27
|
}
|
|
@@ -45,7 +46,12 @@ export interface SmartbillMockRequest {
|
|
|
45
46
|
export interface SmartbillMockResponse {
|
|
46
47
|
status: number;
|
|
47
48
|
headers: Record<string, string>;
|
|
48
|
-
|
|
49
|
+
/**
|
|
50
|
+
* Serialised body. JSON endpoints emit a UTF-8 string; PDF endpoints
|
|
51
|
+
* emit raw bytes. The HTTP listener writes both as-is; the in-process
|
|
52
|
+
* `fetch` adapter exposes them through the matching Response method.
|
|
53
|
+
*/
|
|
54
|
+
body: string | Uint8Array;
|
|
49
55
|
}
|
|
50
56
|
export interface SmartbillMockServer {
|
|
51
57
|
fetch: SmartbillFetch;
|
package/dist/mock.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../src/mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../src/mock.ts"],"names":[],"mappings":"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"}
|
package/dist/mock.js
CHANGED
|
@@ -35,7 +35,7 @@ export function createSmartbillMockServer(options = {}) {
|
|
|
35
35
|
seriesName: args.invoiceSeriesName ?? estimate.body.seriesName,
|
|
36
36
|
mentions: appendTestMention(estimate.body.mentions, `Converted from proforma ${args.seriesName}-${args.number}`),
|
|
37
37
|
});
|
|
38
|
-
const response =
|
|
38
|
+
const response = toCreateResponse(invoice);
|
|
39
39
|
estimate.convertedInvoices.push(response);
|
|
40
40
|
documents.set(documentKey(estimate.kind, estimate.companyVatCode, estimate.seriesName, estimate.number), estimate);
|
|
41
41
|
return response;
|
|
@@ -46,37 +46,30 @@ export function createSmartbillMockServer(options = {}) {
|
|
|
46
46
|
const path = normalizeSmartbillPath(url.pathname);
|
|
47
47
|
try {
|
|
48
48
|
if (method === "GET" && path === "/tax")
|
|
49
|
-
return json(200, taxes);
|
|
49
|
+
return json(200, taxesEnvelope(taxes));
|
|
50
50
|
if (method === "GET" && path === "/series")
|
|
51
|
-
return json(200, listSeries());
|
|
51
|
+
return json(200, seriesEnvelope(listSeries()));
|
|
52
52
|
if (method === "POST" && path === "/invoice") {
|
|
53
|
-
return json(200,
|
|
53
|
+
return json(200, toCreateResponse(createDocument("invoice", parseBody(request.body))));
|
|
54
54
|
}
|
|
55
55
|
if (method === "POST" && path === "/estimate") {
|
|
56
|
-
return json(200,
|
|
56
|
+
return json(200, toCreateResponse(createDocument("estimate", parseBody(request.body))));
|
|
57
57
|
}
|
|
58
58
|
if (method === "GET" && path === "/invoice/pdf") {
|
|
59
|
-
return
|
|
59
|
+
return pdf(findByQuery("invoice", url));
|
|
60
60
|
}
|
|
61
61
|
if (method === "GET" && path === "/estimate/pdf") {
|
|
62
|
-
return
|
|
62
|
+
return pdf(findByQuery("estimate", url));
|
|
63
63
|
}
|
|
64
64
|
if (method === "GET" && path === "/estimate/invoices") {
|
|
65
|
-
return json(200,
|
|
65
|
+
return json(200, estimateInvoicesEnvelope(findByQuery("estimate", url)));
|
|
66
66
|
}
|
|
67
67
|
if (method === "GET" && path === "/invoice/paymentstatus") {
|
|
68
|
-
|
|
69
|
-
return json(200, {
|
|
70
|
-
status: invoice.status === "cancelled" || invoice.status === "deleted"
|
|
71
|
-
? invoice.status
|
|
72
|
-
: paymentStatus(invoice),
|
|
73
|
-
paidAmount: invoice.paidAmount,
|
|
74
|
-
unpaidAmount: Math.max(0, invoice.total - invoice.paidAmount),
|
|
75
|
-
});
|
|
68
|
+
return json(200, paymentStatusEnvelope(findByQuery("invoice", url)));
|
|
76
69
|
}
|
|
77
70
|
if (method === "PUT" && path === "/invoice/cancel") {
|
|
78
|
-
updateInvoiceStatus(parseBody(request.body), "cancelled");
|
|
79
|
-
return json(200, {});
|
|
71
|
+
const invoice = updateInvoiceStatus(parseBody(request.body), "cancelled");
|
|
72
|
+
return json(200, ackEnvelope(`Invoice ${invoice.seriesName}-${invoice.number} cancelled`));
|
|
80
73
|
}
|
|
81
74
|
if (method === "PUT" && path === "/invoice/reverse") {
|
|
82
75
|
const invoice = updateInvoiceStatus(parseBody(request.body), "reversed");
|
|
@@ -88,22 +81,20 @@ export function createSmartbillMockServer(options = {}) {
|
|
|
88
81
|
})),
|
|
89
82
|
mentions: appendTestMention(invoice.body.mentions, `Reversal for ${invoice.seriesName}-${invoice.number}`),
|
|
90
83
|
});
|
|
91
|
-
return json(200,
|
|
84
|
+
return json(200, toCreateResponse(reversal));
|
|
92
85
|
}
|
|
93
86
|
if (method === "PUT" && path === "/invoice/restore") {
|
|
94
|
-
updateInvoiceStatus(parseBody(request.body), "restored");
|
|
95
|
-
return json(200, {});
|
|
87
|
+
const invoice = updateInvoiceStatus(parseBody(request.body), "restored");
|
|
88
|
+
return json(200, ackEnvelope(`Invoice ${invoice.seriesName}-${invoice.number} restored`));
|
|
96
89
|
}
|
|
97
90
|
if (method === "DELETE" && path === "/invoice") {
|
|
98
|
-
updateByQuery(url, "deleted");
|
|
99
|
-
return json(200, {});
|
|
91
|
+
const invoice = updateByQuery(url, "deleted");
|
|
92
|
+
return json(200, ackEnvelope(`Invoice ${invoice.seriesName}-${invoice.number} deleted`));
|
|
100
93
|
}
|
|
101
|
-
return json(404,
|
|
94
|
+
return json(404, errorEnvelope(`SmartBill mock endpoint not found: ${method} ${path}`));
|
|
102
95
|
}
|
|
103
96
|
catch (error) {
|
|
104
|
-
return json(error instanceof SmartbillMockError ? error.status : 500,
|
|
105
|
-
errorText: error instanceof Error ? error.message : "SmartBill mock failed",
|
|
106
|
-
});
|
|
97
|
+
return json(error instanceof SmartbillMockError ? error.status : 500, errorEnvelope(error instanceof Error ? error.message : "SmartBill mock failed"));
|
|
107
98
|
}
|
|
108
99
|
}
|
|
109
100
|
const fetch = async (input, init) => {
|
|
@@ -112,11 +103,30 @@ export function createSmartbillMockServer(options = {}) {
|
|
|
112
103
|
url: input,
|
|
113
104
|
body: init.body,
|
|
114
105
|
});
|
|
106
|
+
const isBinary = response.body instanceof Uint8Array;
|
|
107
|
+
const bytes = isBinary
|
|
108
|
+
? response.body
|
|
109
|
+
: new TextEncoder().encode(response.body);
|
|
110
|
+
const text = isBinary
|
|
111
|
+
? new TextDecoder().decode(response.body)
|
|
112
|
+
: response.body;
|
|
115
113
|
return {
|
|
116
114
|
ok: response.status >= 200 && response.status < 300,
|
|
117
115
|
status: response.status,
|
|
118
|
-
json: async () =>
|
|
119
|
-
|
|
116
|
+
json: async () => {
|
|
117
|
+
if (isBinary)
|
|
118
|
+
throw new Error("SmartBill mock response is not JSON");
|
|
119
|
+
return JSON.parse(text);
|
|
120
|
+
},
|
|
121
|
+
text: async () => text,
|
|
122
|
+
arrayBuffer: async () => {
|
|
123
|
+
const copy = new ArrayBuffer(bytes.byteLength);
|
|
124
|
+
new Uint8Array(copy).set(bytes);
|
|
125
|
+
return copy;
|
|
126
|
+
},
|
|
127
|
+
headers: {
|
|
128
|
+
get: (name) => response.headers[name.toLowerCase()] ?? null,
|
|
129
|
+
},
|
|
120
130
|
};
|
|
121
131
|
};
|
|
122
132
|
async function listen(listenOptions = {}) {
|
|
@@ -164,6 +174,17 @@ export function createSmartbillMockServer(options = {}) {
|
|
|
164
174
|
const number = nextNumber(kind, seriesName);
|
|
165
175
|
const companyVatCode = body.companyVatCode;
|
|
166
176
|
const total = totalAmount(body, taxes);
|
|
177
|
+
const paid = paidAmount(body, total);
|
|
178
|
+
const payments = body.payment
|
|
179
|
+
? [
|
|
180
|
+
{
|
|
181
|
+
type: body.payment.type,
|
|
182
|
+
value: paid,
|
|
183
|
+
paidDate: now().toISOString().slice(0, 10),
|
|
184
|
+
isCash: body.payment.isCash,
|
|
185
|
+
},
|
|
186
|
+
]
|
|
187
|
+
: [];
|
|
167
188
|
const document = {
|
|
168
189
|
kind,
|
|
169
190
|
companyVatCode,
|
|
@@ -176,7 +197,8 @@ export function createSmartbillMockServer(options = {}) {
|
|
|
176
197
|
},
|
|
177
198
|
url: `smartbill-mock://test-document/${kind}/${encodeURIComponent(companyVatCode)}/${encodeURIComponent(seriesName)}/${number}.pdf`,
|
|
178
199
|
total,
|
|
179
|
-
paidAmount:
|
|
200
|
+
paidAmount: paid,
|
|
201
|
+
payments,
|
|
180
202
|
createdAt: now().toISOString(),
|
|
181
203
|
convertedInvoices: [],
|
|
182
204
|
};
|
|
@@ -220,6 +242,20 @@ export function createSmartbillMockServer(options = {}) {
|
|
|
220
242
|
const invoice = findByQuery("invoice", url);
|
|
221
243
|
invoice.status = status;
|
|
222
244
|
documents.set(documentKey("invoice", invoice.companyVatCode, invoice.seriesName, invoice.number), invoice);
|
|
245
|
+
return invoice;
|
|
246
|
+
}
|
|
247
|
+
function pdf(document) {
|
|
248
|
+
const label = `${document.kind === "estimate" ? "Proforma" : "Invoice"} ${document.seriesName}-${document.number} (TEST)`;
|
|
249
|
+
return {
|
|
250
|
+
status: 200,
|
|
251
|
+
headers: {
|
|
252
|
+
"access-control-allow-origin": "*",
|
|
253
|
+
"content-type": "application/pdf",
|
|
254
|
+
"content-disposition": `inline; filename="${document.seriesName}-${document.number}.pdf"`,
|
|
255
|
+
"x-mock-pdf-url": document.url,
|
|
256
|
+
},
|
|
257
|
+
body: createPlaceholderPdf(label),
|
|
258
|
+
};
|
|
223
259
|
}
|
|
224
260
|
reset();
|
|
225
261
|
return {
|
|
@@ -292,20 +328,76 @@ function taxPercentage(lineTaxPercentage, taxes) {
|
|
|
292
328
|
function paidAmount(body, total) {
|
|
293
329
|
return roundMoney(Math.min(total, body.payment?.value ?? 0));
|
|
294
330
|
}
|
|
295
|
-
function
|
|
296
|
-
if (document.paidAmount >= document.total && document.total > 0)
|
|
297
|
-
return "paid";
|
|
298
|
-
if (document.paidAmount > 0)
|
|
299
|
-
return "partially_paid";
|
|
300
|
-
return "unpaid";
|
|
301
|
-
}
|
|
302
|
-
function toDocumentResponse(document) {
|
|
331
|
+
function toCreateResponse(document) {
|
|
303
332
|
return {
|
|
333
|
+
status: "Ok",
|
|
334
|
+
message: "",
|
|
335
|
+
errorText: "",
|
|
304
336
|
series: document.seriesName,
|
|
305
337
|
number: document.number,
|
|
306
338
|
url: document.url,
|
|
307
339
|
};
|
|
308
340
|
}
|
|
341
|
+
function ackEnvelope(message) {
|
|
342
|
+
return { status: "Ok", message, errorText: "" };
|
|
343
|
+
}
|
|
344
|
+
function errorEnvelope(message) {
|
|
345
|
+
return { status: "Error", message: "", errorText: message };
|
|
346
|
+
}
|
|
347
|
+
function taxesEnvelope(taxes) {
|
|
348
|
+
return {
|
|
349
|
+
status: "Ok",
|
|
350
|
+
message: "",
|
|
351
|
+
errorText: "",
|
|
352
|
+
taxes: taxes.map(({ name, percentage }) => ({ name, percentage })),
|
|
353
|
+
};
|
|
354
|
+
}
|
|
355
|
+
function seriesEnvelope(series) {
|
|
356
|
+
return {
|
|
357
|
+
status: "Ok",
|
|
358
|
+
message: "",
|
|
359
|
+
errorText: "",
|
|
360
|
+
list: series.map((item) => ({
|
|
361
|
+
name: item.name,
|
|
362
|
+
nextNumber: item.nextNumber,
|
|
363
|
+
type: item.type === "invoice" ? "f" : "p",
|
|
364
|
+
})),
|
|
365
|
+
};
|
|
366
|
+
}
|
|
367
|
+
function paymentStatusEnvelope(document) {
|
|
368
|
+
const unpaid = Math.max(0, roundMoney(document.total - document.paidAmount));
|
|
369
|
+
return {
|
|
370
|
+
status: "Ok",
|
|
371
|
+
message: paymentStatusMessage(document),
|
|
372
|
+
errorText: "",
|
|
373
|
+
paid: document.total > 0 && document.paidAmount >= document.total,
|
|
374
|
+
invoiceTotalAmount: document.total,
|
|
375
|
+
paidAmount: document.paidAmount,
|
|
376
|
+
unpaidAmount: unpaid,
|
|
377
|
+
payments: document.payments.map((entry) => ({ ...entry })),
|
|
378
|
+
};
|
|
379
|
+
}
|
|
380
|
+
function paymentStatusMessage(document) {
|
|
381
|
+
if (document.status === "cancelled")
|
|
382
|
+
return "Invoice cancelled";
|
|
383
|
+
if (document.status === "deleted")
|
|
384
|
+
return "Invoice deleted";
|
|
385
|
+
if (document.status === "reversed")
|
|
386
|
+
return "Invoice reversed";
|
|
387
|
+
return "";
|
|
388
|
+
}
|
|
389
|
+
function estimateInvoicesEnvelope(estimate) {
|
|
390
|
+
const last = estimate.convertedInvoices[estimate.convertedInvoices.length - 1];
|
|
391
|
+
return {
|
|
392
|
+
status: "Ok",
|
|
393
|
+
message: "",
|
|
394
|
+
errorText: "",
|
|
395
|
+
series: last?.series ?? "",
|
|
396
|
+
number: last?.number ?? "",
|
|
397
|
+
areInvoicesCreated: estimate.convertedInvoices.length > 0,
|
|
398
|
+
invoices: estimate.convertedInvoices.map((invoice) => ({ ...invoice })),
|
|
399
|
+
};
|
|
400
|
+
}
|
|
309
401
|
function appendTestMention(existing, mention) {
|
|
310
402
|
return existing ? `${existing}\n${mention}` : mention;
|
|
311
403
|
}
|
|
@@ -319,6 +411,7 @@ function cloneDocument(document) {
|
|
|
319
411
|
return {
|
|
320
412
|
...document,
|
|
321
413
|
body: structuredClone(document.body),
|
|
414
|
+
payments: document.payments.map((entry) => ({ ...entry })),
|
|
322
415
|
convertedInvoices: document.convertedInvoices.map((invoice) => ({ ...invoice })),
|
|
323
416
|
};
|
|
324
417
|
}
|
|
@@ -339,3 +432,47 @@ async function importNodeHttp() {
|
|
|
339
432
|
const specifier = "node:http";
|
|
340
433
|
return import(specifier);
|
|
341
434
|
}
|
|
435
|
+
/**
|
|
436
|
+
* Builds a small but well-formed single-page PDF that satisfies SDKs
|
|
437
|
+
* expecting `application/pdf` bytes. The label is rendered on the page
|
|
438
|
+
* so the file is recognisable when opened by hand.
|
|
439
|
+
*/
|
|
440
|
+
function createPlaceholderPdf(label) {
|
|
441
|
+
const escapedLabel = label.replace(/[()\\]/g, (m) => `\\${m}`);
|
|
442
|
+
const stream = `BT /F1 18 Tf 72 720 Td (${escapedLabel}) Tj ET`;
|
|
443
|
+
const objects = [
|
|
444
|
+
"<< /Type /Catalog /Pages 2 0 R >>",
|
|
445
|
+
"<< /Type /Pages /Kids [3 0 R] /Count 1 >>",
|
|
446
|
+
"<< /Type /Page /Parent 2 0 R /MediaBox [0 0 612 792] /Contents 4 0 R /Resources << /Font << /F1 5 0 R >> >> >>",
|
|
447
|
+
`<< /Length ${stream.length} >>\nstream\n${stream}\nendstream`,
|
|
448
|
+
"<< /Type /Font /Subtype /Type1 /BaseFont /Helvetica >>",
|
|
449
|
+
];
|
|
450
|
+
const encoder = new TextEncoder();
|
|
451
|
+
const parts = [];
|
|
452
|
+
parts.push(encoder.encode("%PDF-1.4\n%"));
|
|
453
|
+
// Binary marker: any four bytes >=128 satisfy PDF readers' "this file is binary" probe.
|
|
454
|
+
parts.push(new Uint8Array([0xe2, 0xe3, 0xcf, 0xd3, 0x0a]));
|
|
455
|
+
let length = parts.reduce((sum, p) => sum + p.byteLength, 0);
|
|
456
|
+
const offsets = [];
|
|
457
|
+
for (let i = 0; i < objects.length; i++) {
|
|
458
|
+
offsets.push(length);
|
|
459
|
+
const chunk = encoder.encode(`${i + 1} 0 obj\n${objects[i]}\nendobj\n`);
|
|
460
|
+
parts.push(chunk);
|
|
461
|
+
length += chunk.byteLength;
|
|
462
|
+
}
|
|
463
|
+
const xrefStart = length;
|
|
464
|
+
let xref = `xref\n0 ${objects.length + 1}\n0000000000 65535 f \n`;
|
|
465
|
+
for (const off of offsets) {
|
|
466
|
+
xref += `${String(off).padStart(10, "0")} 00000 n \n`;
|
|
467
|
+
}
|
|
468
|
+
xref += `trailer\n<< /Size ${objects.length + 1} /Root 1 0 R >>\nstartxref\n${xrefStart}\n%%EOF\n`;
|
|
469
|
+
parts.push(encoder.encode(xref));
|
|
470
|
+
const total = parts.reduce((sum, p) => sum + p.byteLength, 0);
|
|
471
|
+
const out = new Uint8Array(total);
|
|
472
|
+
let offset = 0;
|
|
473
|
+
for (const part of parts) {
|
|
474
|
+
out.set(part, offset);
|
|
475
|
+
offset += part.byteLength;
|
|
476
|
+
}
|
|
477
|
+
return out;
|
|
478
|
+
}
|
package/dist/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,gBAAgB,CAAA;AAGxD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,KAAK,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AAExF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAGpD,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAChD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;CACjD;AAED,MAAM,MAAM,cAAc,GAAG,CAC3B,KAAK,EAAE,kBAAkB,KACtB,UAAU,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAEnD,MAAM,WAAW,sBAAuB,SAAQ,sBAAsB,EAAE,uBAAuB;IAC7F,MAAM,CAAC,EAAE,uBAAuB,CAAA;IAChC,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,MAAM,CAAC,EAAE,eAAe,CAAA;CACzB;AASD,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,gBAAgB,CAAA;AAGxD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AACzD,OAAO,KAAK,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AAExF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAGpD,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAChD,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;CACjD;AAED,MAAM,MAAM,cAAc,GAAG,CAC3B,KAAK,EAAE,kBAAkB,KACtB,UAAU,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAEnD,MAAM,WAAW,sBAAuB,SAAQ,sBAAsB,EAAE,uBAAuB;IAC7F,MAAM,CAAC,EAAE,uBAAuB,CAAA;IAChC,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,MAAM,CAAC,EAAE,eAAe,CAAA;CACzB;AASD,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,CA8HvE"}
|
package/dist/plugin.js
CHANGED
|
@@ -94,7 +94,12 @@ export function smartbillPlugin(options) {
|
|
|
94
94
|
return;
|
|
95
95
|
}
|
|
96
96
|
const status = await client.getPaymentStatus(validatedOptions.companyVatCode, seriesName, number);
|
|
97
|
-
|
|
97
|
+
const paymentLabel = status.paid
|
|
98
|
+
? "paid"
|
|
99
|
+
: (status.paidAmount ?? 0) > 0
|
|
100
|
+
? "partially_paid"
|
|
101
|
+
: "unpaid";
|
|
102
|
+
logger.info?.(`[smartbill] payment status for ${seriesName}-${number}: ${paymentLabel}`, status);
|
|
98
103
|
}
|
|
99
104
|
catch (err) {
|
|
100
105
|
logger.error(`[smartbill] getPaymentStatus on "${eventNames.syncRequested}" failed for ${event.id}`, err);
|
package/dist/settlement.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"settlement.d.ts","sourceRoot":"","sources":["../src/settlement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAGzD,MAAM,WAAW,uCAAwC,SAAQ,sBAAsB;IACrF,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,8BAA8B;IAC7C,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,gCAAgC;IAC/C,OAAO,EAAE,0BAA0B,CAAA;IACnC,WAAW,EAAE,8BAA8B,CAAA;CAC5C;AAED,MAAM,WAAW,+BAA+B;IAC9C,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;CAC1C;AAED,MAAM,MAAM,gCAAgC,GAAG,CAC7C,OAAO,EAAE,gCAAgC,KACtC,OAAO,CAAC,+BAA+B,CAAC,CAAA;AAuD7C,wBAAgB,sCAAsC,CACpD,OAAO,EAAE,uCAAuC,GAC/C,gCAAgC,
|
|
1
|
+
{"version":3,"file":"settlement.d.ts","sourceRoot":"","sources":["../src/settlement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAGzD,MAAM,WAAW,uCAAwC,SAAQ,sBAAsB;IACrF,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,MAAM,WAAW,0BAA0B;IACzC,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,WAAW,8BAA8B;IAC7C,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,MAAM,WAAW,gCAAgC;IAC/C,OAAO,EAAE,0BAA0B,CAAA;IACnC,WAAW,EAAE,8BAA8B,CAAA;CAC5C;AAED,MAAM,WAAW,+BAA+B;IAC9C,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1B,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,iBAAiB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACjC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;CAC1C;AAED,MAAM,MAAM,gCAAgC,GAAG,CAC7C,OAAO,EAAE,gCAAgC,KACtC,OAAO,CAAC,+BAA+B,CAAC,CAAA;AAuD7C,wBAAgB,sCAAsC,CACpD,OAAO,EAAE,uCAAuC,GAC/C,gCAAgC,CA2ClC"}
|
package/dist/settlement.js
CHANGED
|
@@ -43,16 +43,17 @@ export function createSmartbillInvoiceSettlementPoller(options) {
|
|
|
43
43
|
return { syncError: "SmartBill settlement polling requires seriesName" };
|
|
44
44
|
}
|
|
45
45
|
const status = await client.getPaymentStatus(companyVatCode, seriesName, number);
|
|
46
|
+
const paid = status.paid === true;
|
|
46
47
|
return {
|
|
47
48
|
externalId: externalRef.externalId ?? null,
|
|
48
49
|
externalNumber: number,
|
|
49
|
-
status:
|
|
50
|
+
status: paid ? "paid" : "unpaid",
|
|
50
51
|
paidAmountCents: toCents(status.paidAmount),
|
|
51
52
|
unpaidAmountCents: toCents(status.unpaidAmount),
|
|
52
|
-
settledAt:
|
|
53
|
+
settledAt: paid && typeof status.paidAmount === "number" && status.paidAmount > 0
|
|
53
54
|
? new Date().toISOString()
|
|
54
55
|
: null,
|
|
55
|
-
syncError: status.errorText
|
|
56
|
+
syncError: status.errorText ? status.errorText : null,
|
|
56
57
|
metadata: {
|
|
57
58
|
...(metadata ?? {}),
|
|
58
59
|
companyVatCode,
|
package/dist/types.d.ts
CHANGED
|
@@ -68,34 +68,91 @@ export interface SmartbillInvoiceBody {
|
|
|
68
68
|
};
|
|
69
69
|
}
|
|
70
70
|
/**
|
|
71
|
-
*
|
|
71
|
+
* Live-API response envelope shared by most SmartBill endpoints.
|
|
72
|
+
*
|
|
73
|
+
* The live API returns `status: "Ok"` on success and `status: "Error"` (or
|
|
74
|
+
* an HTTP non-2xx) on failure. `errorText` carries the machine-readable
|
|
75
|
+
* cause; `message` is a human-readable note.
|
|
72
76
|
*/
|
|
73
|
-
export interface
|
|
77
|
+
export interface SmartbillEnvelope {
|
|
78
|
+
/** "Ok" on success, "Error" on failure. */
|
|
79
|
+
status?: string;
|
|
80
|
+
message?: string;
|
|
81
|
+
errorText?: string;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* SmartBill API response for invoice / estimate creation.
|
|
85
|
+
*/
|
|
86
|
+
export interface SmartbillInvoiceResponse extends SmartbillEnvelope {
|
|
74
87
|
number?: string;
|
|
75
88
|
series?: string;
|
|
76
89
|
url?: string;
|
|
77
|
-
errorText?: string;
|
|
78
90
|
}
|
|
79
91
|
/**
|
|
80
|
-
* SmartBill API response for PDF
|
|
92
|
+
* SmartBill API response for the PDF endpoints. Live SmartBill responds
|
|
93
|
+
* with raw PDF bytes and `Content-Type: application/pdf`.
|
|
81
94
|
*/
|
|
82
95
|
export interface SmartbillPdfResponse {
|
|
83
|
-
|
|
84
|
-
|
|
96
|
+
/** Raw PDF bytes returned by SmartBill. */
|
|
97
|
+
bytes: Uint8Array;
|
|
98
|
+
/** Content-Type header from the response. */
|
|
99
|
+
contentType: string;
|
|
85
100
|
}
|
|
86
101
|
/**
|
|
87
|
-
* SmartBill API response for invoice
|
|
102
|
+
* SmartBill API response for `GET /invoice/paymentstatus`.
|
|
103
|
+
*
|
|
104
|
+
* Live shape: the envelope's `status` is `"Ok"` / `"Error"`, while payment
|
|
105
|
+
* state is carried by `paid: boolean` plus the amount fields. `payments`
|
|
106
|
+
* is the per-receipt list. The mock and the live API both populate these.
|
|
88
107
|
*/
|
|
89
|
-
export interface SmartbillStatusResponse {
|
|
90
|
-
|
|
108
|
+
export interface SmartbillStatusResponse extends SmartbillEnvelope {
|
|
109
|
+
/** True when the invoice has been fully paid. */
|
|
110
|
+
paid?: boolean;
|
|
111
|
+
invoiceTotalAmount?: number;
|
|
91
112
|
paidAmount?: number;
|
|
92
113
|
unpaidAmount?: number;
|
|
93
|
-
|
|
114
|
+
payments?: SmartbillPaymentEntry[];
|
|
115
|
+
}
|
|
116
|
+
export interface SmartbillPaymentEntry {
|
|
117
|
+
type?: string;
|
|
118
|
+
value?: number;
|
|
119
|
+
paidDate?: string;
|
|
120
|
+
[key: string]: unknown;
|
|
94
121
|
}
|
|
95
122
|
/**
|
|
96
|
-
*
|
|
97
|
-
|
|
98
|
-
|
|
123
|
+
* Response shape for `GET /tax`.
|
|
124
|
+
*/
|
|
125
|
+
export interface SmartbillTaxesResponse extends SmartbillEnvelope {
|
|
126
|
+
taxes?: Array<{
|
|
127
|
+
name: string;
|
|
128
|
+
percentage: number;
|
|
129
|
+
}>;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Response shape for `GET /series`. `type` is `"f"` (factură / invoice) or
|
|
133
|
+
* `"p"` (proformă).
|
|
134
|
+
*/
|
|
135
|
+
export interface SmartbillSeriesResponse extends SmartbillEnvelope {
|
|
136
|
+
list?: Array<{
|
|
137
|
+
name: string;
|
|
138
|
+
nextNumber: number;
|
|
139
|
+
type: "f" | "p";
|
|
140
|
+
}>;
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Response shape for `GET /estimate/invoices` (proforma → invoice
|
|
144
|
+
* conversion lookup).
|
|
145
|
+
*/
|
|
146
|
+
export interface SmartbillEstimateInvoicesResponse extends SmartbillEnvelope {
|
|
147
|
+
series?: string;
|
|
148
|
+
number?: string;
|
|
149
|
+
areInvoicesCreated?: boolean;
|
|
150
|
+
invoices?: SmartbillInvoiceResponse[];
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Minimal `fetch` shape the SmartBill client depends on. Mirrors the
|
|
154
|
+
* subset of the global `fetch` Response that the client uses, so the
|
|
155
|
+
* global `fetch` and the mock server both fit.
|
|
99
156
|
*/
|
|
100
157
|
export type SmartbillFetch = (input: string, init: {
|
|
101
158
|
method: string;
|
|
@@ -106,5 +163,9 @@ export type SmartbillFetch = (input: string, init: {
|
|
|
106
163
|
status: number;
|
|
107
164
|
json: () => Promise<unknown>;
|
|
108
165
|
text: () => Promise<string>;
|
|
166
|
+
arrayBuffer: () => Promise<ArrayBuffer>;
|
|
167
|
+
headers?: {
|
|
168
|
+
get(name: string): string | null;
|
|
169
|
+
};
|
|
109
170
|
}>;
|
|
110
171
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAA;IACV,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,OAAO,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,MAAM,CAAA;IACtB,MAAM,EAAE,eAAe,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,gBAAgB,EAAE,CAAA;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,OAAO,CAAC,EAAE;QACR,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,MAAM,EAAE,OAAO,CAAA;KAChB,CAAA;CACF;AAED
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAA;IACV,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;IAChB,aAAa,EAAE,OAAO,CAAA;IACtB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,MAAM,CAAA;IACtB,MAAM,EAAE,eAAe,CAAA;IACvB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,gBAAgB,EAAE,CAAA;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,OAAO,CAAC,EAAE;QACR,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,MAAM,CAAA;QACb,MAAM,EAAE,OAAO,CAAA;KAChB,CAAA;CACF;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,2CAA2C;IAC3C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,wBAAyB,SAAQ,iBAAiB;IACjE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC,2CAA2C;IAC3C,KAAK,EAAE,UAAU,CAAA;IACjB,6CAA6C;IAC7C,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,uBAAwB,SAAQ,iBAAiB;IAChE,iDAAiD;IACjD,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,qBAAqB,EAAE,CAAA;CACnC;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAuB,SAAQ,iBAAiB;IAC/D,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACpD;AAED;;;GAGG;AACH,MAAM,WAAW,uBAAwB,SAAQ,iBAAiB;IAChE,IAAI,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAAA;KAAE,CAAC,CAAA;CACpE;AAED;;;GAGG;AACH,MAAM,WAAW,iCAAkC,SAAQ,iBAAiB;IAC1E,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,EAAE,wBAAwB,EAAE,CAAA;CACtC;AAED;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,CAC3B,KAAK,EAAE,MAAM,EACb,IAAI,EAAE;IACJ,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,KACE,OAAO,CAAC;IACX,EAAE,EAAE,OAAO,CAAA;IACX,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;IAC5B,IAAI,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAA;IAC3B,WAAW,EAAE,MAAM,OAAO,CAAC,WAAW,CAAC,CAAA;IACvC,OAAO,CAAC,EAAE;QAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAA;KAAE,CAAA;CAC/C,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@voyantjs/plugin-smartbill",
|
|
3
|
-
"version": "0.26.
|
|
3
|
+
"version": "0.26.8",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"zod": "^4.3.6",
|
|
40
|
-
"@voyantjs/core": "0.26.
|
|
40
|
+
"@voyantjs/core": "0.26.8"
|
|
41
41
|
},
|
|
42
42
|
"devDependencies": {
|
|
43
43
|
"typescript": "^6.0.2",
|