@voyantjs/plugin-smartbill 0.1.1 → 0.3.0

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.
@@ -0,0 +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,EACxB,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,4DAA4D;IAC5D,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,4CAA4C;IAC5C,aAAa,CACX,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAClC,4CAA4C;IAC5C,aAAa,CACX,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAClC,6CAA6C;IAC7C,cAAc,CACZ,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,wBAAwB,CAAC,CAAA;IACpC,kCAAkC;IAClC,OAAO,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAClG,yCAAyC;IACzC,gBAAgB,CACd,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,uBAAuB,CAAC,CAAA;CACpC;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,kBAAkB,CAyIzF"}
@@ -0,0 +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,eAAe,EACf,cAAc,EACd,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,YAAY,EACV,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,YAAY,CAAA"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mapping.d.ts","sourceRoot":"","sources":["../src/mapping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,YAAY,CAAA;AAEnB;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,uDAAuD;IACvD,cAAc,EAAE,MAAM,CAAA;IACtB,kDAAkD;IAClD,UAAU,EAAE,MAAM,CAAA;IAClB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,uEAAuE;IACvE,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,yEAAyE;IACzE,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,kBAAkB,GAAG,eAAe,CAapE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,kBAAkB,EACzB,OAAO,EAAE,uBAAuB,GAC/B,gBAAgB,EAAE,CAgBpB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,kBAAkB,EACzB,OAAO,EAAE,uBAAuB,GAC/B,oBAAoB,CA2BtB"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,gBAAgB,CAAA;AAExD,OAAO,EAAyB,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAChF,OAAO,EAAE,2BAA2B,EAAE,KAAK,uBAAuB,EAAE,MAAM,cAAc,CAAA;AACxF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAEpD;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED;;;GAGG;AACH,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;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,CAC3B,KAAK,EAAE,kBAAkB,KACtB,UAAU,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAEnD,MAAM,WAAW,sBAAuB,SAAQ,sBAAsB,EAAE,uBAAuB;IAC7F;;;OAGG;IACH,MAAM,CAAC,EAAE,uBAAuB,CAAA;IAChC;;;OAGG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,eAAe,CAAA;CACzB;AASD;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,CA8GvE"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@voyantjs/plugin-smartbill",
3
- "version": "0.1.1",
3
+ "version": "0.3.0",
4
4
  "license": "FSL-1.1-Apache-2.0",
5
5
  "type": "module",
6
6
  "exports": {
@@ -22,7 +22,7 @@
22
22
  }
23
23
  },
24
24
  "dependencies": {
25
- "@voyantjs/core": "0.1.1"
25
+ "@voyantjs/core": "0.3.0"
26
26
  },
27
27
  "devDependencies": {
28
28
  "typescript": "^6.0.2",
@@ -44,7 +44,7 @@
44
44
  "typecheck": "tsc --noEmit",
45
45
  "lint": "biome check src/",
46
46
  "test": "vitest run",
47
- "build": "tsc -p tsconfig.json",
47
+ "build": "pnpm run clean && tsc -p tsconfig.json",
48
48
  "clean": "rm -rf dist"
49
49
  },
50
50
  "main": "./dist/index.js",
@@ -1 +0,0 @@
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,EACxB,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,4DAA4D;IAC5D,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,4CAA4C;IAC5C,aAAa,CACX,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAClC,4CAA4C;IAC5C,aAAa,CACX,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAClC,6CAA6C;IAC7C,cAAc,CACZ,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,wBAAwB,CAAC,CAAA;IACpC,kCAAkC;IAClC,OAAO,CAAC,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAA;IAClG,yCAAyC;IACzC,gBAAgB,CACd,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,uBAAuB,CAAC,CAAA;CACpC;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,kBAAkB,CAyIzF"}
@@ -1 +0,0 @@
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,eAAe,EACf,cAAc,EACd,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,YAAY,EACV,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,wBAAwB,EACxB,oBAAoB,EACpB,gBAAgB,EAChB,uBAAuB,EACvB,kBAAkB,GACnB,MAAM,YAAY,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"mapping.d.ts","sourceRoot":"","sources":["../../src/mapping.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,oBAAoB,EACpB,gBAAgB,EAChB,kBAAkB,EACnB,MAAM,YAAY,CAAA;AAEnB;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,uDAAuD;IACvD,cAAc,EAAE,MAAM,CAAA;IACtB,kDAAkD;IAClD,UAAU,EAAE,MAAM,CAAA;IAClB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,uEAAuE;IACvE,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,yEAAyE;IACzE,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,kBAAkB,GAAG,eAAe,CAapE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,KAAK,EAAE,kBAAkB,EACzB,OAAO,EAAE,uBAAuB,GAC/B,gBAAgB,EAAE,CAgBpB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,KAAK,EAAE,kBAAkB,EACzB,OAAO,EAAE,uBAAuB,GAC/B,oBAAoB,CA2BtB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAc,MAAM,gBAAgB,CAAA;AAExD,OAAO,EAAyB,KAAK,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAChF,OAAO,EAAE,2BAA2B,EAAE,KAAK,uBAAuB,EAAE,MAAM,cAAc,CAAA;AACxF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAA;AAEpD;;;GAGG;AACH,MAAM,WAAW,uBAAuB;IACtC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED;;;GAGG;AACH,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;;;GAGG;AACH,MAAM,MAAM,cAAc,GAAG,CAC3B,KAAK,EAAE,kBAAkB,KACtB,UAAU,CAAC,OAAO,2BAA2B,CAAC,CAAA;AAEnD,MAAM,WAAW,sBAAuB,SAAQ,sBAAsB,EAAE,uBAAuB;IAC7F;;;OAGG;IACH,MAAM,CAAC,EAAE,uBAAuB,CAAA;IAChC;;;OAGG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAA;IACzB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,eAAe,CAAA;CACzB;AASD;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,MAAM,CA8GvE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=client.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.test.d.ts","sourceRoot":"","sources":["../../../tests/unit/client.test.ts"],"names":[],"mappings":""}
@@ -1,182 +0,0 @@
1
- import { describe, expect, it, vi } from "vitest";
2
- import { createSmartbillClient } from "../../src/client.js";
3
- function jsonResponse(status, body) {
4
- const text = JSON.stringify(body);
5
- return {
6
- ok: status >= 200 && status < 300,
7
- status,
8
- json: async () => JSON.parse(text),
9
- text: async () => text,
10
- };
11
- }
12
- function textResponse(status, text) {
13
- return {
14
- ok: status >= 200 && status < 300,
15
- status,
16
- json: async () => {
17
- throw new Error("not json");
18
- },
19
- text: async () => text,
20
- };
21
- }
22
- const baseOptions = {
23
- username: "user@example.com",
24
- apiToken: "test-token",
25
- };
26
- describe("createSmartbillClient.createInvoice", () => {
27
- it("sends POST to /invoice with basic auth", async () => {
28
- const fetchMock = vi.fn(async () => jsonResponse(200, { number: "1", series: "A" }));
29
- const client = createSmartbillClient({ ...baseOptions, fetch: fetchMock });
30
- const result = await client.createInvoice({
31
- companyVatCode: "RO123",
32
- client: { name: "Acme" },
33
- seriesName: "A",
34
- currency: "RON",
35
- products: [
36
- {
37
- name: "Tour",
38
- measureUnit: "buc",
39
- quantity: 1,
40
- price: 100,
41
- currency: "RON",
42
- isTaxIncluded: true,
43
- },
44
- ],
45
- });
46
- expect(result).toEqual({ number: "1", series: "A" });
47
- const [url, init] = fetchMock.mock.calls[0];
48
- expect(url).toBe("https://ws.smartbill.ro/SBORO/api/invoice");
49
- expect(init.method).toBe("POST");
50
- expect(init.headers.Authorization).toMatch(/^Basic /);
51
- expect(init.headers["Content-Type"]).toBe("application/json");
52
- const body = JSON.parse(init.body ?? "{}");
53
- expect(body.companyVatCode).toBe("RO123");
54
- expect(body.products).toHaveLength(1);
55
- });
56
- it("throws on non-2xx response", async () => {
57
- const fetchMock = vi.fn(async () => textResponse(400, "bad request"));
58
- const client = createSmartbillClient({ ...baseOptions, fetch: fetchMock });
59
- await expect(client.createInvoice({
60
- companyVatCode: "RO123",
61
- client: { name: "X" },
62
- seriesName: "A",
63
- currency: "RON",
64
- products: [],
65
- })).rejects.toThrow(/SmartBill createInvoice failed \(400\)/);
66
- });
67
- });
68
- describe("createSmartbillClient.createProforma", () => {
69
- it("sends POST to /estimate", async () => {
70
- const fetchMock = vi.fn(async () => jsonResponse(200, { number: "P1", series: "P" }));
71
- const client = createSmartbillClient({ ...baseOptions, fetch: fetchMock });
72
- await client.createProforma({
73
- companyVatCode: "RO123",
74
- client: { name: "X" },
75
- seriesName: "P",
76
- currency: "RON",
77
- products: [],
78
- });
79
- const [url] = fetchMock.mock.calls[0];
80
- expect(url).toBe("https://ws.smartbill.ro/SBORO/api/estimate");
81
- });
82
- });
83
- describe("createSmartbillClient.cancelInvoice", () => {
84
- it("sends PUT to /invoice/cancel", async () => {
85
- const fetchMock = vi.fn(async () => jsonResponse(200, {}));
86
- const client = createSmartbillClient({ ...baseOptions, fetch: fetchMock });
87
- await client.cancelInvoice("RO123", "A", "42");
88
- const [url, init] = fetchMock.mock.calls[0];
89
- expect(url).toBe("https://ws.smartbill.ro/SBORO/api/invoice/cancel");
90
- expect(init.method).toBe("PUT");
91
- const body = JSON.parse(init.body ?? "{}");
92
- expect(body).toEqual({ companyVatCode: "RO123", seriesName: "A", number: "42" });
93
- });
94
- it("throws on error", async () => {
95
- const fetchMock = vi.fn(async () => textResponse(500, "fail"));
96
- const client = createSmartbillClient({ ...baseOptions, fetch: fetchMock });
97
- await expect(client.cancelInvoice("RO123", "A", "1")).rejects.toThrow(/SmartBill cancelInvoice failed \(500\)/);
98
- });
99
- });
100
- describe("createSmartbillClient.deleteInvoice", () => {
101
- it("sends DELETE to /invoice with query params", async () => {
102
- const fetchMock = vi.fn(async () => jsonResponse(200, {}));
103
- const client = createSmartbillClient({ ...baseOptions, fetch: fetchMock });
104
- await client.deleteInvoice("RO123", "A", "42");
105
- const [url, init] = fetchMock.mock.calls[0];
106
- expect(url).toContain("/invoice?cif=RO123&seriesname=A&number=42");
107
- expect(init.method).toBe("DELETE");
108
- });
109
- });
110
- describe("createSmartbillClient.reverseInvoice", () => {
111
- it("sends PUT to /invoice/reverse", async () => {
112
- const fetchMock = vi.fn(async () => jsonResponse(200, { number: "S1", series: "S" }));
113
- const client = createSmartbillClient({ ...baseOptions, fetch: fetchMock });
114
- const result = await client.reverseInvoice("RO123", "A", "42");
115
- expect(result).toEqual({ number: "S1", series: "S" });
116
- const [url, init] = fetchMock.mock.calls[0];
117
- expect(url).toBe("https://ws.smartbill.ro/SBORO/api/invoice/reverse");
118
- expect(init.method).toBe("PUT");
119
- });
120
- });
121
- describe("createSmartbillClient.viewPdf", () => {
122
- it("sends GET to /invoice/pdf with query params", async () => {
123
- const fetchMock = vi.fn(async () => jsonResponse(200, { url: "https://smartbill.ro/pdf/123" }));
124
- const client = createSmartbillClient({ ...baseOptions, fetch: fetchMock });
125
- const result = await client.viewPdf("RO123", "A", "42");
126
- expect(result.url).toBe("https://smartbill.ro/pdf/123");
127
- const [url, init] = fetchMock.mock.calls[0];
128
- expect(url).toContain("/invoice/pdf?cif=RO123&seriesname=A&number=42");
129
- expect(init.method).toBe("GET");
130
- });
131
- });
132
- describe("createSmartbillClient.getPaymentStatus", () => {
133
- it("sends GET to /invoice/paymentstatus", async () => {
134
- const fetchMock = vi.fn(async () => jsonResponse(200, { status: "paid", paidAmount: 100, unpaidAmount: 0 }));
135
- const client = createSmartbillClient({ ...baseOptions, fetch: fetchMock });
136
- const result = await client.getPaymentStatus("RO123", "A", "42");
137
- expect(result).toEqual({ status: "paid", paidAmount: 100, unpaidAmount: 0 });
138
- const [url] = fetchMock.mock.calls[0];
139
- expect(url).toContain("/invoice/paymentstatus?cif=RO123&seriesname=A&number=42");
140
- });
141
- });
142
- describe("createSmartbillClient — custom apiUrl", () => {
143
- it("respects custom API base URL", async () => {
144
- const fetchMock = vi.fn(async () => jsonResponse(200, {}));
145
- const client = createSmartbillClient({
146
- ...baseOptions,
147
- apiUrl: "https://custom.example.com/api/",
148
- fetch: fetchMock,
149
- });
150
- await client.cancelInvoice("RO1", "A", "1");
151
- const [url] = fetchMock.mock.calls[0];
152
- expect(url).toBe("https://custom.example.com/api/invoice/cancel");
153
- });
154
- });
155
- describe("createSmartbillClient — basic auth encoding", () => {
156
- it("encodes username:token as base64", async () => {
157
- const fetchMock = vi.fn(async () => jsonResponse(200, {}));
158
- const client = createSmartbillClient({
159
- username: "test@test.com",
160
- apiToken: "secret123",
161
- fetch: fetchMock,
162
- });
163
- await client.cancelInvoice("X", "A", "1");
164
- const [, init] = fetchMock.mock.calls[0];
165
- const expected = `Basic ${btoa("test@test.com:secret123")}`;
166
- expect(init.headers.Authorization).toBe(expected);
167
- });
168
- });
169
- describe("createSmartbillClient — fetch handling", () => {
170
- it("throws when no fetch implementation is available", async () => {
171
- const originalFetch = globalThis.fetch;
172
- globalThis.fetch = undefined;
173
- try {
174
- // biome-ignore lint/suspicious/noExplicitAny: simulating missing fetch
175
- const client = createSmartbillClient({ ...baseOptions, fetch: undefined });
176
- await expect(client.cancelInvoice("X", "A", "1")).rejects.toThrow(/requires a fetch implementation/);
177
- }
178
- finally {
179
- globalThis.fetch = originalFetch;
180
- }
181
- });
182
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=mapping.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mapping.test.d.ts","sourceRoot":"","sources":["../../../tests/unit/mapping.test.ts"],"names":[],"mappings":""}
@@ -1,149 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { mapClient, mapLineItems, mapVoyantInvoiceToSmartbill } from "../../src/mapping.js";
3
- const defaultOptions = {
4
- companyVatCode: "RO12345678",
5
- seriesName: "A",
6
- };
7
- function event(overrides = {}) {
8
- return { id: "inv_test", ...overrides };
9
- }
10
- describe("mapClient", () => {
11
- it("extracts client fields from event", () => {
12
- const result = mapClient(event({
13
- clientName: "Acme SRL",
14
- clientVatCode: "RO999",
15
- clientAddress: "Str. Test 1",
16
- clientCity: "Bucharest",
17
- clientCounty: "B",
18
- clientCountry: "RO",
19
- clientEmail: "acme@test.com",
20
- clientPhone: "+40700000000",
21
- }));
22
- expect(result.name).toBe("Acme SRL");
23
- expect(result.vatCode).toBe("RO999");
24
- expect(result.address).toBe("Str. Test 1");
25
- expect(result.city).toBe("Bucharest");
26
- expect(result.email).toBe("acme@test.com");
27
- expect(result.saveToDb).toBe(false);
28
- });
29
- it("falls back to customerName if clientName is missing", () => {
30
- const result = mapClient(event({ customerName: "Fallback Inc" }));
31
- expect(result.name).toBe("Fallback Inc");
32
- });
33
- it("uses 'Client' fallback for missing name", () => {
34
- const result = mapClient(event());
35
- expect(result.name).toBe("Client");
36
- });
37
- it("returns undefined for missing optional fields", () => {
38
- const result = mapClient(event());
39
- expect(result.vatCode).toBeUndefined();
40
- expect(result.address).toBeUndefined();
41
- expect(result.email).toBeUndefined();
42
- });
43
- });
44
- describe("mapLineItems", () => {
45
- it("maps an array of line items", () => {
46
- const result = mapLineItems(event({
47
- lineItems: [
48
- {
49
- description: "Safari Tour",
50
- code: "TOUR-1",
51
- unit: "buc",
52
- quantity: 2,
53
- unitPrice: 50000,
54
- currency: "RON",
55
- isService: true,
56
- },
57
- ],
58
- }), defaultOptions);
59
- expect(result).toHaveLength(1);
60
- expect(result[0].name).toBe("Safari Tour");
61
- expect(result[0].code).toBe("TOUR-1");
62
- expect(result[0].quantity).toBe(2);
63
- expect(result[0].price).toBe(50000);
64
- expect(result[0].isService).toBe(true);
65
- expect(result[0].isTaxIncluded).toBe(true);
66
- });
67
- it("returns empty array when no lineItems", () => {
68
- expect(mapLineItems(event(), defaultOptions)).toEqual([]);
69
- });
70
- it("uses event.currency as fallback for item currency", () => {
71
- const result = mapLineItems(event({
72
- currency: "EUR",
73
- lineItems: [{ name: "X", quantity: 1, price: 10 }],
74
- }), defaultOptions);
75
- expect(result[0].currency).toBe("EUR");
76
- });
77
- it("respects isTaxIncluded from options", () => {
78
- const result = mapLineItems(event({ lineItems: [{ name: "X", quantity: 1, price: 10 }] }), {
79
- ...defaultOptions,
80
- isTaxIncluded: false,
81
- });
82
- expect(result[0].isTaxIncluded).toBe(false);
83
- });
84
- it("passes through taxPercentage when present", () => {
85
- const result = mapLineItems(event({ lineItems: [{ name: "X", quantity: 1, price: 10, taxPercentage: 19 }] }), defaultOptions);
86
- expect(result[0].taxPercentage).toBe(19);
87
- });
88
- it("omits taxPercentage when not present", () => {
89
- const result = mapLineItems(event({ lineItems: [{ name: "X", quantity: 1, price: 10 }] }), defaultOptions);
90
- expect(result[0].taxPercentage).toBeUndefined();
91
- });
92
- });
93
- describe("mapVoyantInvoiceToSmartbill", () => {
94
- it("produces a complete SmartBill invoice body", () => {
95
- const result = mapVoyantInvoiceToSmartbill(event({
96
- clientName: "Test SRL",
97
- currency: "RON",
98
- issueDate: "2026-01-15",
99
- dueDate: "2026-02-15",
100
- lineItems: [{ name: "Tour Package", quantity: 1, unitPrice: 50000 }],
101
- }), defaultOptions);
102
- expect(result.companyVatCode).toBe("RO12345678");
103
- expect(result.seriesName).toBe("A");
104
- expect(result.currency).toBe("RON");
105
- expect(result.language).toBe("RO");
106
- expect(result.client.name).toBe("Test SRL");
107
- expect(result.products).toHaveLength(1);
108
- expect(result.issueDate).toBe("2026-01-15");
109
- expect(result.dueDate).toBe("2026-02-15");
110
- });
111
- it("sets isDraft when event has isDraft=true", () => {
112
- const result = mapVoyantInvoiceToSmartbill(event({ isDraft: true }), defaultOptions);
113
- expect(result.isDraft).toBe(true);
114
- });
115
- it("does not set isDraft when not present", () => {
116
- const result = mapVoyantInvoiceToSmartbill(event(), defaultOptions);
117
- expect(result.isDraft).toBeUndefined();
118
- });
119
- it("appends Art. 311 mention when art311SpecialRegime is true", () => {
120
- const result = mapVoyantInvoiceToSmartbill(event(), {
121
- ...defaultOptions,
122
- art311SpecialRegime: true,
123
- });
124
- expect(result.mentions).toContain("Art. 311");
125
- });
126
- it("appends Art. 311 to existing mentions", () => {
127
- const result = mapVoyantInvoiceToSmartbill(event({ mentions: "Custom note" }), {
128
- ...defaultOptions,
129
- art311SpecialRegime: true,
130
- });
131
- expect(result.mentions).toContain("Custom note");
132
- expect(result.mentions).toContain("Art. 311");
133
- });
134
- it("uses custom language", () => {
135
- const result = mapVoyantInvoiceToSmartbill(event(), {
136
- ...defaultOptions,
137
- language: "EN",
138
- });
139
- expect(result.language).toBe("EN");
140
- });
141
- it("defaults currency to RON", () => {
142
- const result = mapVoyantInvoiceToSmartbill(event(), defaultOptions);
143
- expect(result.currency).toBe("RON");
144
- });
145
- it("passes through observations", () => {
146
- const result = mapVoyantInvoiceToSmartbill(event({ observations: "Test obs" }), defaultOptions);
147
- expect(result.observations).toBe("Test obs");
148
- });
149
- });
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=plugin.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"plugin.test.d.ts","sourceRoot":"","sources":["../../../tests/unit/plugin.test.ts"],"names":[],"mappings":""}
@@ -1,216 +0,0 @@
1
- import { describe, expect, it, vi } from "vitest";
2
- import { smartbillPlugin } from "../../src/plugin.js";
3
- function jsonResponse(status, body) {
4
- const text = JSON.stringify(body);
5
- return {
6
- ok: status >= 200 && status < 300,
7
- status,
8
- json: async () => JSON.parse(text),
9
- text: async () => text,
10
- };
11
- }
12
- function textResponse(status, text) {
13
- return {
14
- ok: status >= 200 && status < 300,
15
- status,
16
- json: async () => {
17
- throw new Error("not json");
18
- },
19
- text: async () => text,
20
- };
21
- }
22
- const baseOptions = {
23
- username: "user@test.com",
24
- apiToken: "tok",
25
- companyVatCode: "RO12345678",
26
- seriesName: "A",
27
- };
28
- function makeLogger() {
29
- return {
30
- error: vi.fn(),
31
- info: vi.fn(),
32
- };
33
- }
34
- describe("smartbillPlugin structure", () => {
35
- it("returns a Plugin with name and version", () => {
36
- const fetchMock = vi.fn();
37
- const plugin = smartbillPlugin({ ...baseOptions, fetch: fetchMock });
38
- expect(plugin.name).toBe("smartbill");
39
- expect(plugin.version).toBe("0.1.0");
40
- expect(plugin.subscribers).toHaveLength(3);
41
- });
42
- it("subscribes to default event names", () => {
43
- const fetchMock = vi.fn();
44
- const plugin = smartbillPlugin({ ...baseOptions, fetch: fetchMock });
45
- const events = plugin.subscribers.map((s) => s.event);
46
- expect(events).toEqual(["invoice.issued", "invoice.voided", "invoice.external.sync.requested"]);
47
- });
48
- it("subscribes to custom event names", () => {
49
- const fetchMock = vi.fn();
50
- const plugin = smartbillPlugin({
51
- ...baseOptions,
52
- fetch: fetchMock,
53
- events: {
54
- issued: "custom.issued",
55
- voided: "custom.voided",
56
- syncRequested: "custom.sync",
57
- },
58
- });
59
- const events = plugin.subscribers.map((s) => s.event);
60
- expect(events).toEqual(["custom.issued", "custom.voided", "custom.sync"]);
61
- });
62
- });
63
- describe("smartbillPlugin — invoice.issued subscriber", () => {
64
- it("calls createInvoice with mapped body", async () => {
65
- const fetchMock = vi.fn(async () => jsonResponse(200, { number: "1", series: "A" }));
66
- const logger = makeLogger();
67
- const plugin = smartbillPlugin({ ...baseOptions, fetch: fetchMock, logger });
68
- const handler = plugin.subscribers[0].handler;
69
- await handler({
70
- id: "inv_123",
71
- clientName: "Test SRL",
72
- currency: "RON",
73
- lineItems: [{ name: "Tour", quantity: 1, unitPrice: 50000 }],
74
- });
75
- expect(fetchMock).toHaveBeenCalledOnce();
76
- const [url, init] = fetchMock.mock.calls[0];
77
- expect(url).toContain("/invoice");
78
- expect(init.method).toBe("POST");
79
- const body = JSON.parse(init.body ?? "{}");
80
- expect(body.companyVatCode).toBe("RO12345678");
81
- expect(body.seriesName).toBe("A");
82
- expect(body.client.name).toBe("Test SRL");
83
- expect(logger.info).toHaveBeenCalledOnce();
84
- });
85
- it("logs error and does not throw on failure", async () => {
86
- const fetchMock = vi.fn(async () => textResponse(500, "boom"));
87
- const logger = makeLogger();
88
- const plugin = smartbillPlugin({ ...baseOptions, fetch: fetchMock, logger });
89
- const handler = plugin.subscribers[0].handler;
90
- // Should not throw
91
- await handler({ id: "inv_fail", lineItems: [] });
92
- expect(logger.error).toHaveBeenCalledOnce();
93
- expect(logger.error.mock.calls[0][0]).toContain("createInvoice");
94
- expect(logger.error.mock.calls[0][0]).toContain("inv_fail");
95
- });
96
- it("ignores null data", async () => {
97
- const fetchMock = vi.fn();
98
- const plugin = smartbillPlugin({ ...baseOptions, fetch: fetchMock });
99
- await plugin.subscribers[0].handler(null);
100
- expect(fetchMock).not.toHaveBeenCalled();
101
- });
102
- it("ignores data without id", async () => {
103
- const fetchMock = vi.fn();
104
- const plugin = smartbillPlugin({ ...baseOptions, fetch: fetchMock });
105
- await plugin.subscribers[0].handler({ noId: true });
106
- expect(fetchMock).not.toHaveBeenCalled();
107
- });
108
- });
109
- describe("smartbillPlugin — invoice.voided subscriber", () => {
110
- it("calls cancelInvoice with external number", async () => {
111
- const fetchMock = vi.fn(async () => jsonResponse(200, {}));
112
- const logger = makeLogger();
113
- const plugin = smartbillPlugin({ ...baseOptions, fetch: fetchMock, logger });
114
- const handler = plugin.subscribers[1].handler;
115
- await handler({
116
- id: "inv_void",
117
- externalSeriesName: "B",
118
- externalNumber: "42",
119
- });
120
- expect(fetchMock).toHaveBeenCalledOnce();
121
- const body = JSON.parse(fetchMock.mock.calls[0][1].body ?? "{}");
122
- expect(body).toEqual({
123
- companyVatCode: "RO12345678",
124
- seriesName: "B",
125
- number: "42",
126
- });
127
- expect(logger.info).toHaveBeenCalledOnce();
128
- });
129
- it("falls back to invoiceNumber when externalNumber missing", async () => {
130
- const fetchMock = vi.fn(async () => jsonResponse(200, {}));
131
- const logger = makeLogger();
132
- const plugin = smartbillPlugin({ ...baseOptions, fetch: fetchMock, logger });
133
- const handler = plugin.subscribers[1].handler;
134
- await handler({ id: "inv_void2", invoiceNumber: "99" });
135
- const body = JSON.parse(fetchMock.mock.calls[0][1].body ?? "{}");
136
- expect(body.seriesName).toBe("A"); // falls back to options.seriesName
137
- expect(body.number).toBe("99");
138
- });
139
- it("logs error when no number is available", async () => {
140
- const fetchMock = vi.fn();
141
- const logger = makeLogger();
142
- const plugin = smartbillPlugin({ ...baseOptions, fetch: fetchMock, logger });
143
- const handler = plugin.subscribers[1].handler;
144
- await handler({ id: "inv_no_num" });
145
- expect(fetchMock).not.toHaveBeenCalled();
146
- expect(logger.error).toHaveBeenCalledOnce();
147
- expect(logger.error.mock.calls[0][0]).toContain("missing external number");
148
- });
149
- it("logs error on cancel failure (fire-and-forget)", async () => {
150
- const fetchMock = vi.fn(async () => textResponse(500, "error"));
151
- const logger = makeLogger();
152
- const plugin = smartbillPlugin({ ...baseOptions, fetch: fetchMock, logger });
153
- const handler = plugin.subscribers[1].handler;
154
- await handler({ id: "inv_err", externalNumber: "1" });
155
- expect(logger.error).toHaveBeenCalledOnce();
156
- expect(logger.error.mock.calls[0][0]).toContain("cancelInvoice");
157
- });
158
- });
159
- describe("smartbillPlugin — invoice.external.sync.requested subscriber", () => {
160
- it("calls getPaymentStatus and logs result", async () => {
161
- const fetchMock = vi.fn(async () => jsonResponse(200, { status: "paid", paidAmount: 100 }));
162
- const logger = makeLogger();
163
- const plugin = smartbillPlugin({ ...baseOptions, fetch: fetchMock, logger });
164
- const handler = plugin.subscribers[2].handler;
165
- await handler({ id: "inv_sync", externalNumber: "55" });
166
- expect(fetchMock).toHaveBeenCalledOnce();
167
- const [url] = fetchMock.mock.calls[0];
168
- expect(url).toContain("/invoice/paymentstatus");
169
- expect(logger.info).toHaveBeenCalledOnce();
170
- expect(logger.info.mock.calls[0][0]).toContain("paid");
171
- });
172
- it("logs error when no number is available", async () => {
173
- const fetchMock = vi.fn();
174
- const logger = makeLogger();
175
- const plugin = smartbillPlugin({ ...baseOptions, fetch: fetchMock, logger });
176
- const handler = plugin.subscribers[2].handler;
177
- await handler({ id: "inv_no_num" });
178
- expect(fetchMock).not.toHaveBeenCalled();
179
- expect(logger.error).toHaveBeenCalledOnce();
180
- expect(logger.error.mock.calls[0][0]).toContain("missing external number");
181
- });
182
- it("logs error on failure (fire-and-forget)", async () => {
183
- const fetchMock = vi.fn(async () => textResponse(500, "timeout"));
184
- const logger = makeLogger();
185
- const plugin = smartbillPlugin({ ...baseOptions, fetch: fetchMock, logger });
186
- const handler = plugin.subscribers[2].handler;
187
- await handler({ id: "inv_err", externalNumber: "1" });
188
- expect(logger.error).toHaveBeenCalledOnce();
189
- expect(logger.error.mock.calls[0][0]).toContain("getPaymentStatus");
190
- });
191
- });
192
- describe("smartbillPlugin — custom mapEvent", () => {
193
- it("uses custom mapper when provided", async () => {
194
- const fetchMock = vi.fn(async () => jsonResponse(200, { number: "1", series: "A" }));
195
- const logger = makeLogger();
196
- const customMapper = vi.fn().mockReturnValue({
197
- companyVatCode: "CUSTOM",
198
- client: { name: "Custom" },
199
- seriesName: "Z",
200
- currency: "EUR",
201
- products: [],
202
- });
203
- const plugin = smartbillPlugin({
204
- ...baseOptions,
205
- fetch: fetchMock,
206
- logger,
207
- mapEvent: customMapper,
208
- });
209
- const handler = plugin.subscribers[0].handler;
210
- await handler({ id: "inv_custom" });
211
- expect(customMapper).toHaveBeenCalledOnce();
212
- expect(customMapper.mock.calls[0][0].id).toBe("inv_custom");
213
- const body = JSON.parse(fetchMock.mock.calls[0][1].body ?? "{}");
214
- expect(body.companyVatCode).toBe("CUSTOM");
215
- });
216
- });
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes