@substrat-run/connector-fortnox 0.4.67 → 0.5.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.
- package/dist/api.d.ts +58 -5
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +113 -9
- package/dist/api.js.map +1 -1
- package/dist/index.d.ts +95 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +226 -17
- package/dist/index.js.map +1 -1
- package/dist/mock.d.ts +18 -2
- package/dist/mock.d.ts.map +1 -1
- package/dist/mock.js +36 -1
- package/dist/mock.js.map +1 -1
- package/package.json +4 -4
package/dist/api.d.ts
CHANGED
|
@@ -83,6 +83,42 @@ export declare const fortnoxCompany: z.ZodObject<{
|
|
|
83
83
|
CountryCode: z.ZodPipe<z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNull]>>, z.ZodTransform<string, string | null | undefined>>;
|
|
84
84
|
}, z.core.$strip>;
|
|
85
85
|
export type FortnoxCompany = z.infer<typeof fortnoxCompany>;
|
|
86
|
+
/**
|
|
87
|
+
* One supplier invoice, as `GET /3/supplierinvoices/{GivenNumber}` returns it. Only the fields
|
|
88
|
+
* the invoice landing carries are read; the rest are ignored.
|
|
89
|
+
*/
|
|
90
|
+
declare const fortnoxSupplierInvoice: z.ZodObject<{
|
|
91
|
+
GivenNumber: z.ZodPipe<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>, z.ZodTransform<string, string | number>>;
|
|
92
|
+
SupplierNumber: z.ZodPipe<z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNull]>>, z.ZodTransform<string, string | null | undefined>>;
|
|
93
|
+
SupplierName: z.ZodPipe<z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNull]>>, z.ZodTransform<string, string | null | undefined>>;
|
|
94
|
+
InvoiceNumber: z.ZodPipe<z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNull]>>, z.ZodTransform<string, string | null | undefined>>;
|
|
95
|
+
InvoiceDate: z.ZodPipe<z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNull]>>, z.ZodTransform<string, string | null | undefined>>;
|
|
96
|
+
DueDate: z.ZodPipe<z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNull]>>, z.ZodTransform<string, string | null | undefined>>;
|
|
97
|
+
Currency: z.ZodPipe<z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNull]>>, z.ZodTransform<string, string | null | undefined>>;
|
|
98
|
+
Total: z.ZodPipe<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>, z.ZodTransform<string, string | number>>;
|
|
99
|
+
Booked: z.ZodBoolean;
|
|
100
|
+
Cancelled: z.ZodBoolean;
|
|
101
|
+
SupplierInvoiceRows: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
102
|
+
Account: z.ZodPipe<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>, z.ZodTransform<string, string | number>>;
|
|
103
|
+
CostCenter: z.ZodPipe<z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNull]>>, z.ZodTransform<string, string | null | undefined>>;
|
|
104
|
+
Debit: z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>, z.ZodTransform<string, string | number>>>;
|
|
105
|
+
Credit: z.ZodDefault<z.ZodPipe<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>, z.ZodTransform<string, string | number>>>;
|
|
106
|
+
}, z.core.$strip>>>;
|
|
107
|
+
}, z.core.$strip>;
|
|
108
|
+
export type FortnoxSupplierInvoice = z.infer<typeof fortnoxSupplierInvoice>;
|
|
109
|
+
export interface FortnoxApiOptions {
|
|
110
|
+
apiBase?: string;
|
|
111
|
+
oauthBase?: string;
|
|
112
|
+
/** Injected so a test can assert elapsed time without sleeping. */
|
|
113
|
+
now?: () => number;
|
|
114
|
+
/** Injected for the same reason: the throttle and the 429 retry wait through this. */
|
|
115
|
+
sleep?: (ms: number) => Promise<void>;
|
|
116
|
+
/**
|
|
117
|
+
* A sliding window SHARED by every client of one pass. The limit is per company, and a
|
|
118
|
+
* sweep builds one client per binding, so a shared window is what models it.
|
|
119
|
+
*/
|
|
120
|
+
rateWindow?: number[];
|
|
121
|
+
}
|
|
86
122
|
/**
|
|
87
123
|
* A Fortnox API failure, with the one bit a caller actually branches on.
|
|
88
124
|
*
|
|
@@ -110,12 +146,20 @@ export declare class FortnoxApi {
|
|
|
110
146
|
* long and a pass is seconds, so one mint serves a whole pass.
|
|
111
147
|
*/
|
|
112
148
|
private token;
|
|
113
|
-
constructor(conn: ConnectorConnection, options?:
|
|
114
|
-
apiBase?: string;
|
|
115
|
-
oauthBase?: string;
|
|
116
|
-
now?: () => number;
|
|
117
|
-
});
|
|
149
|
+
constructor(conn: ConnectorConnection, options?: FortnoxApiOptions);
|
|
118
150
|
private readonly now;
|
|
151
|
+
private readonly sleep;
|
|
152
|
+
/** When the last {@link RATE_LIMIT_REQUESTS} REST requests went out, oldest first. */
|
|
153
|
+
private readonly sent;
|
|
154
|
+
/** Wait, if the sliding window says the next REST request would breach Fortnox's limit. */
|
|
155
|
+
private throttle;
|
|
156
|
+
/**
|
|
157
|
+
* One authenticated REST request, throttled, and waited through a 429 up to
|
|
158
|
+
* {@link RATE_LIMIT_RETRIES} times. The window only sees this client's traffic: a ledger
|
|
159
|
+
* connection to the same company, or the company's own integrations, spend from the same
|
|
160
|
+
* limit, and the retry is what absorbs them.
|
|
161
|
+
*/
|
|
162
|
+
private request;
|
|
119
163
|
private secret;
|
|
120
164
|
/**
|
|
121
165
|
* Mint (or reuse) an access token via `grant_type=client_credentials`.
|
|
@@ -132,6 +176,14 @@ export declare class FortnoxApi {
|
|
|
132
176
|
companyInformation(): Promise<FortnoxCompany>;
|
|
133
177
|
/** Every financial year the company has, newest first is NOT guaranteed — sort yourself. */
|
|
134
178
|
financialYears(): Promise<FortnoxFinancialYear[]>;
|
|
179
|
+
/**
|
|
180
|
+
* The `GivenNumber` of every supplier invoice changed at or after `lastModified` — Fortnox's
|
|
181
|
+
* `YYYY-MM-DD HH:MM`, in Swedish local time. Every list page is read: the list carries no rows,
|
|
182
|
+
* so it is the cheap half, and the caller decides how many details to spend.
|
|
183
|
+
*/
|
|
184
|
+
supplierInvoicesModifiedSince(lastModified: string): Promise<string[]>;
|
|
185
|
+
/** One supplier invoice with its rows. */
|
|
186
|
+
supplierInvoice(givenNumber: string): Promise<FortnoxSupplierInvoice>;
|
|
135
187
|
/**
|
|
136
188
|
* The whole year's bookkeeping as one SIE4 file — the read this connector exists for.
|
|
137
189
|
*
|
|
@@ -146,4 +198,5 @@ export declare class FortnoxApi {
|
|
|
146
198
|
*/
|
|
147
199
|
sieFile(financialYearId: number): Promise<string>;
|
|
148
200
|
}
|
|
201
|
+
export {};
|
|
149
202
|
//# sourceMappingURL=api.d.ts.map
|
package/dist/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAWhE;;;;;;;;;;;;;GAaG;AAEH,gFAAgF;AAChF,eAAO,MAAM,kBAAkB,qCAAqC,CAAC;AACrE,sDAAsD;AACtD,eAAO,MAAM,gBAAgB,6BAA6B,CAAC;AAE3D;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,aAAa;;;;iBAcxB,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,wKAAwK;IACxK,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,GAAG,MAAM,CAUT;AAED,uFAAuF;AACvF,eAAO,MAAM,oBAAoB;;;;;iBAK/B,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AA6BxE,eAAO,MAAM,cAAc;;;;;iBAWzB,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAK5D;;;GAGG;AACH,QAAA,MAAM,sBAAsB;;;;;;;;;;;;;;;;;iBAsB1B,CAAC;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAyB5E,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,sFAAsF;IACtF,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACvB;AASD;;;;;;;GAOG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,YAAY,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAMxD;CACF;AA+CD,qBAAa,UAAU;IACrB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAsB;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC;;;;;;;OAOG;IACH,OAAO,CAAC,KAAK,CAAuD;IAEpE,YAAY,IAAI,EAAE,mBAAmB,EAAE,OAAO,CAAC,EAAE,iBAAiB,EAOjE;IAED,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;IACtD,sFAAsF;IACtF,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAW;IAEhC,2FAA2F;YAC7E,QAAQ;IAatB;;;;;OAKG;YACW,OAAO;IAYrB,OAAO,CAAC,MAAM;IAYd;;;;;;;OAOG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CA+BnC;IAED,oFAAoF;YACtE,OAAO;IAarB,sFAAsF;IAChF,kBAAkB,IAAI,OAAO,CAAC,cAAc,CAAC,CAKlD;IAED,4FAA4F;IACtF,cAAc,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAGtD;IAED;;;;OAIG;IACG,6BAA6B,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAa3E;IAED,0CAA0C;IACpC,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAK1E;IAED;;;;;;;;;;;OAWG;IACG,OAAO,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAYtD;CACF"}
|
package/dist/api.js
CHANGED
|
@@ -123,6 +123,54 @@ export const fortnoxCompany = z.object({
|
|
|
123
123
|
.transform((v) => v ?? undefined),
|
|
124
124
|
CountryCode: fortnoxText(),
|
|
125
125
|
});
|
|
126
|
+
/** A number Fortnox may send as a JSON number or as a string. Kept as a string: never arithmetic on floats. */
|
|
127
|
+
const fortnoxNumber = z.union([z.number(), z.string().min(1)]).transform(String);
|
|
128
|
+
/**
|
|
129
|
+
* One supplier invoice, as `GET /3/supplierinvoices/{GivenNumber}` returns it. Only the fields
|
|
130
|
+
* the invoice landing carries are read; the rest are ignored.
|
|
131
|
+
*/
|
|
132
|
+
const fortnoxSupplierInvoice = z.object({
|
|
133
|
+
/** Fortnox's own sequence number for the invoice in this company — the key a landing upserts by. */
|
|
134
|
+
GivenNumber: fortnoxNumber,
|
|
135
|
+
SupplierNumber: fortnoxText(),
|
|
136
|
+
SupplierName: fortnoxText(),
|
|
137
|
+
InvoiceNumber: fortnoxText(),
|
|
138
|
+
InvoiceDate: fortnoxText(),
|
|
139
|
+
DueDate: fortnoxText(),
|
|
140
|
+
Currency: fortnoxText('SEK'),
|
|
141
|
+
Total: fortnoxNumber,
|
|
142
|
+
Booked: z.boolean(),
|
|
143
|
+
Cancelled: z.boolean(),
|
|
144
|
+
SupplierInvoiceRows: z
|
|
145
|
+
.array(z.object({
|
|
146
|
+
Account: fortnoxNumber,
|
|
147
|
+
CostCenter: fortnoxText(),
|
|
148
|
+
Debit: fortnoxNumber.default('0'),
|
|
149
|
+
Credit: fortnoxNumber.default('0'),
|
|
150
|
+
}))
|
|
151
|
+
.default([]),
|
|
152
|
+
});
|
|
153
|
+
/** How many list entries one `GET /3/supplierinvoices` page asks for — Fortnox's maximum. */
|
|
154
|
+
const LIST_LIMIT = 500;
|
|
155
|
+
/**
|
|
156
|
+
* Fortnox's documented REST limit: 25 requests per 5 seconds per client and company (the
|
|
157
|
+
* "300 a minute" figure is this, averaged). A sliding window rather than a fixed spacing, so a
|
|
158
|
+
* short pass goes out at once and only a long burst waits.
|
|
159
|
+
*/
|
|
160
|
+
const RATE_LIMIT_REQUESTS = 25;
|
|
161
|
+
const RATE_LIMIT_WINDOW_MS = 5_000;
|
|
162
|
+
/** 429s in a row one request sits out before the pass fails on it. */
|
|
163
|
+
const RATE_LIMIT_RETRIES = 3;
|
|
164
|
+
/**
|
|
165
|
+
* `Retry-After` in milliseconds: the header's seconds when Fortnox sends one, else a whole
|
|
166
|
+
* window. Capped, so a provider answering an hour cannot hang a sweep.
|
|
167
|
+
*/
|
|
168
|
+
function retryAfterMs(header) {
|
|
169
|
+
const seconds = header === null || header.trim() === '' ? Number.NaN : Number(header);
|
|
170
|
+
if (!Number.isFinite(seconds) || seconds < 0)
|
|
171
|
+
return RATE_LIMIT_WINDOW_MS;
|
|
172
|
+
return Math.min(seconds * 1000, RATE_LIMIT_WINDOW_MS * 3);
|
|
173
|
+
}
|
|
126
174
|
const tokenResponse = z.object({
|
|
127
175
|
access_token: z.string().min(1),
|
|
128
176
|
token_type: z.string().default('bearer'),
|
|
@@ -207,8 +255,47 @@ export class FortnoxApi {
|
|
|
207
255
|
this.apiBase = options?.apiBase ?? FORTNOX_API_BASE;
|
|
208
256
|
this.oauthBase = options?.oauthBase ?? FORTNOX_OAUTH_BASE;
|
|
209
257
|
this.now = options?.now ?? (() => Date.now());
|
|
258
|
+
this.sleep = options?.sleep ?? ((ms) => new Promise((resolve) => setTimeout(resolve, ms)));
|
|
259
|
+
this.sent = options?.rateWindow ?? [];
|
|
210
260
|
}
|
|
211
261
|
now;
|
|
262
|
+
sleep;
|
|
263
|
+
/** When the last {@link RATE_LIMIT_REQUESTS} REST requests went out, oldest first. */
|
|
264
|
+
sent;
|
|
265
|
+
/** Wait, if the sliding window says the next REST request would breach Fortnox's limit. */
|
|
266
|
+
async throttle() {
|
|
267
|
+
const cutoff = this.now() - RATE_LIMIT_WINDOW_MS;
|
|
268
|
+
while (this.sent.length > 0 && this.sent[0] <= cutoff)
|
|
269
|
+
this.sent.shift();
|
|
270
|
+
if (this.sent.length >= RATE_LIMIT_REQUESTS) {
|
|
271
|
+
// The oldest request leaving the window is the earliest moment a new one fits.
|
|
272
|
+
const waitMs = this.sent[0] + RATE_LIMIT_WINDOW_MS - this.now();
|
|
273
|
+
if (waitMs > 0)
|
|
274
|
+
await this.sleep(waitMs);
|
|
275
|
+
const after = this.now() - RATE_LIMIT_WINDOW_MS;
|
|
276
|
+
while (this.sent.length > 0 && this.sent[0] <= after)
|
|
277
|
+
this.sent.shift();
|
|
278
|
+
}
|
|
279
|
+
this.sent.push(this.now());
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* One authenticated REST request, throttled, and waited through a 429 up to
|
|
283
|
+
* {@link RATE_LIMIT_RETRIES} times. The window only sees this client's traffic: a ledger
|
|
284
|
+
* connection to the same company, or the company's own integrations, spend from the same
|
|
285
|
+
* limit, and the retry is what absorbs them.
|
|
286
|
+
*/
|
|
287
|
+
async request(path, accept) {
|
|
288
|
+
for (let attempt = 0;; attempt += 1) {
|
|
289
|
+
const token = await this.accessToken();
|
|
290
|
+
await this.throttle();
|
|
291
|
+
const res = await this.conn.fetch(`${this.apiBase}${path}`, {
|
|
292
|
+
headers: { Authorization: `Bearer ${token}`, ...(accept ? { Accept: accept } : {}) },
|
|
293
|
+
});
|
|
294
|
+
if (res.status !== 429 || attempt >= RATE_LIMIT_RETRIES)
|
|
295
|
+
return res;
|
|
296
|
+
await this.sleep(retryAfterMs(res.headers?.get('Retry-After') ?? null));
|
|
297
|
+
}
|
|
298
|
+
}
|
|
212
299
|
secret() {
|
|
213
300
|
const parsed = fortnoxSecret.safeParse(this.conn.secret);
|
|
214
301
|
if (!parsed.success) {
|
|
@@ -255,10 +342,7 @@ export class FortnoxApi {
|
|
|
255
342
|
}
|
|
256
343
|
/** A JSON GET against the REST host, authenticated with a freshly-ensured token. */
|
|
257
344
|
async getJson(path) {
|
|
258
|
-
const
|
|
259
|
-
const res = await this.conn.fetch(`${this.apiBase}${path}`, {
|
|
260
|
-
headers: { Authorization: `Bearer ${token}`, Accept: 'application/json' },
|
|
261
|
-
});
|
|
345
|
+
const res = await this.request(path, 'application/json');
|
|
262
346
|
const body = await res.text();
|
|
263
347
|
if (!res.ok) {
|
|
264
348
|
throw new FortnoxApiError(`Fortnox GET ${path} failed: ${errorMessage(body, res.status)}`, res.status, body);
|
|
@@ -275,6 +359,30 @@ export class FortnoxApi {
|
|
|
275
359
|
const raw = (await this.getJson('/financialyears'));
|
|
276
360
|
return z.array(fortnoxFinancialYear).parse(raw.FinancialYears ?? []);
|
|
277
361
|
}
|
|
362
|
+
/**
|
|
363
|
+
* The `GivenNumber` of every supplier invoice changed at or after `lastModified` — Fortnox's
|
|
364
|
+
* `YYYY-MM-DD HH:MM`, in Swedish local time. Every list page is read: the list carries no rows,
|
|
365
|
+
* so it is the cheap half, and the caller decides how many details to spend.
|
|
366
|
+
*/
|
|
367
|
+
async supplierInvoicesModifiedSince(lastModified) {
|
|
368
|
+
const page = z.object({
|
|
369
|
+
MetaInformation: z.object({ '@TotalPages': z.number() }).optional(),
|
|
370
|
+
SupplierInvoices: z.array(z.object({ GivenNumber: fortnoxNumber })).default([]),
|
|
371
|
+
});
|
|
372
|
+
const numbers = [];
|
|
373
|
+
for (let current = 1, total = 1; current <= total; current += 1) {
|
|
374
|
+
const query = `lastmodified=${encodeURIComponent(lastModified)}&limit=${LIST_LIMIT}&page=${current}`;
|
|
375
|
+
const parsed = page.parse(await this.getJson(`/supplierinvoices?${query}`));
|
|
376
|
+
numbers.push(...parsed.SupplierInvoices.map((i) => i.GivenNumber));
|
|
377
|
+
total = parsed.MetaInformation?.['@TotalPages'] ?? 1;
|
|
378
|
+
}
|
|
379
|
+
return numbers;
|
|
380
|
+
}
|
|
381
|
+
/** One supplier invoice with its rows. */
|
|
382
|
+
async supplierInvoice(givenNumber) {
|
|
383
|
+
const raw = (await this.getJson(`/supplierinvoices/${encodeURIComponent(givenNumber)}`));
|
|
384
|
+
return fortnoxSupplierInvoice.parse(raw.SupplierInvoice ?? raw);
|
|
385
|
+
}
|
|
278
386
|
/**
|
|
279
387
|
* The whole year's bookkeeping as one SIE4 file — the read this connector exists for.
|
|
280
388
|
*
|
|
@@ -288,11 +396,7 @@ export class FortnoxApi {
|
|
|
288
396
|
* which owns the charset decision for the whole connector.
|
|
289
397
|
*/
|
|
290
398
|
async sieFile(financialYearId) {
|
|
291
|
-
const
|
|
292
|
-
const path = `/sie/4?financialyear=${financialYearId}`;
|
|
293
|
-
const res = await this.conn.fetch(`${this.apiBase}${path}`, {
|
|
294
|
-
headers: { Authorization: `Bearer ${token}` },
|
|
295
|
-
});
|
|
399
|
+
const res = await this.request(`/sie/4?financialyear=${financialYearId}`);
|
|
296
400
|
if (!res.ok) {
|
|
297
401
|
const body = await res.text();
|
|
298
402
|
throw new FortnoxApiError(`Fortnox SIE4 export failed: ${errorMessage(body, res.status)}`, res.status, body);
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { type ConnectionActivity, type ConnectionCredential, type ConnectionProbe, type ConnectionId } from '@substrat-run/contracts';
|
|
3
3
|
import type { FetchLike, ScopeHost } from '@substrat-run/kernel';
|
|
4
|
-
export { FortnoxApi, FortnoxApiError, FORTNOX_API_BASE, FORTNOX_OAUTH_BASE, fortnoxConsentUrl, fortnoxSecret, type FortnoxCompany, type FortnoxFinancialYear, type FortnoxSecret, } from './api.js';
|
|
4
|
+
export { FortnoxApi, FortnoxApiError, FORTNOX_API_BASE, FORTNOX_OAUTH_BASE, fortnoxConsentUrl, fortnoxSecret, type FortnoxCompany, type FortnoxFinancialYear, type FortnoxSecret, type FortnoxApiOptions, type FortnoxSupplierInvoice, } from './api.js';
|
|
5
5
|
export { parseSie4, splitSieLine, sieAmount, sieDate, type SieAccount, type SieDimension, type SieLedger, type SieObject, type SieTransaction, type SieVoucher, } from './sie4.js';
|
|
6
6
|
export { COST_CENTRE_DIMENSION, financialYearFor, summarizeLedger, type LedgerBalance, type LedgerSummary, } from './aggregate.js';
|
|
7
|
-
export { FortnoxMock, type FortnoxMockOptions } from './mock.js';
|
|
7
|
+
export { FortnoxMock, type FortnoxMockOptions, type FortnoxMockSupplierInvoice } from './mock.js';
|
|
8
8
|
export { completeFortnoxConsent, type FortnoxConsentCompletion } from './connect.js';
|
|
9
9
|
/**
|
|
10
10
|
* The Fortnox connector — the INBOUND half of accounting integration.
|
|
@@ -82,6 +82,8 @@ export interface FortnoxBinding {
|
|
|
82
82
|
* authority of this binding without opening the vertical's source.
|
|
83
83
|
*/
|
|
84
84
|
permission: string;
|
|
85
|
+
/** Absent on pre-kind bindings, which are ledger bindings. */
|
|
86
|
+
kind?: 'ledger' | 'supplier-invoice';
|
|
85
87
|
/**
|
|
86
88
|
* WHICH company's connection reads the books (#2316): the connection's `externalAccountRef`.
|
|
87
89
|
*
|
|
@@ -106,6 +108,23 @@ export interface FortnoxBinding {
|
|
|
106
108
|
contentHash: string;
|
|
107
109
|
balances: number;
|
|
108
110
|
};
|
|
111
|
+
/** An invoice binding's cursor (#2422), written only after a landing succeeded. */
|
|
112
|
+
invoiceSync?: {
|
|
113
|
+
/** Invoices changed at or after this instant, less {@link INVOICE_OVERLAP_MS}, are read next pass. */
|
|
114
|
+
since: string;
|
|
115
|
+
syncedAt: string;
|
|
116
|
+
/** How many invoices the last landing carried. */
|
|
117
|
+
landed: number;
|
|
118
|
+
/**
|
|
119
|
+
* A change set larger than one pass's budget: when the run began, and the last `GivenNumber`
|
|
120
|
+
* landed. `since` stays put until the run drains, then moves to `startedAt`, so an invoice
|
|
121
|
+
* that changed again mid-run is read again rather than skipped.
|
|
122
|
+
*/
|
|
123
|
+
pending?: {
|
|
124
|
+
startedAt: string;
|
|
125
|
+
through: string;
|
|
126
|
+
};
|
|
127
|
+
};
|
|
109
128
|
}
|
|
110
129
|
/**
|
|
111
130
|
* One page of parsed bookkeeping, as it crosses into a scope.
|
|
@@ -151,6 +170,42 @@ export declare const fortnoxLedgerPage: z.ZodObject<{
|
|
|
151
170
|
}, z.core.$strip>>;
|
|
152
171
|
}, z.core.$strip>;
|
|
153
172
|
export type FortnoxLedgerPage = z.infer<typeof fortnoxLedgerPage>;
|
|
173
|
+
/**
|
|
174
|
+
* The supplier invoices an invoice binding lands (#2422) — one page per pass that found changes.
|
|
175
|
+
*
|
|
176
|
+
* Parsed on the way OUT, like {@link fortnoxLedgerPage}, and frozen the same way: fields are only
|
|
177
|
+
* ever added. Neutral provider facts; what an invoice means to its reader is the vertical's.
|
|
178
|
+
*/
|
|
179
|
+
export declare const fortnoxSupplierInvoicePage: z.ZodObject<{
|
|
180
|
+
connectionId: z.ZodString;
|
|
181
|
+
company: z.ZodObject<{
|
|
182
|
+
name: z.ZodString;
|
|
183
|
+
organizationNumber: z.ZodString;
|
|
184
|
+
}, z.core.$strip>;
|
|
185
|
+
invoices: z.ZodArray<z.ZodObject<{
|
|
186
|
+
givenNumber: z.ZodString;
|
|
187
|
+
supplierNumber: z.ZodString;
|
|
188
|
+
supplierName: z.ZodString;
|
|
189
|
+
invoiceNumber: z.ZodString;
|
|
190
|
+
invoiceDate: z.ZodString;
|
|
191
|
+
dueDate: z.ZodString;
|
|
192
|
+
total: z.ZodObject<{
|
|
193
|
+
amount: z.core.$ZodBranded<z.ZodString, "MoneyAmount", "out">;
|
|
194
|
+
currency: z.core.$ZodBranded<z.ZodString, "CurrencyCode", "out">;
|
|
195
|
+
}, z.core.$strip>;
|
|
196
|
+
booked: z.ZodBoolean;
|
|
197
|
+
cancelled: z.ZodBoolean;
|
|
198
|
+
rows: z.ZodArray<z.ZodObject<{
|
|
199
|
+
account: z.ZodString;
|
|
200
|
+
costCentre: z.ZodNullable<z.ZodString>;
|
|
201
|
+
amount: z.ZodObject<{
|
|
202
|
+
amount: z.core.$ZodBranded<z.ZodString, "MoneyAmount", "out">;
|
|
203
|
+
currency: z.core.$ZodBranded<z.ZodString, "CurrencyCode", "out">;
|
|
204
|
+
}, z.core.$strip>;
|
|
205
|
+
}, z.core.$strip>>;
|
|
206
|
+
}, z.core.$strip>>;
|
|
207
|
+
}, z.core.$strip>;
|
|
208
|
+
export type FortnoxSupplierInvoicePage = z.infer<typeof fortnoxSupplierInvoicePage>;
|
|
154
209
|
export interface FortnoxConnectorOptions {
|
|
155
210
|
fetch: FetchLike;
|
|
156
211
|
apiBase?: string;
|
|
@@ -158,15 +213,19 @@ export interface FortnoxConnectorOptions {
|
|
|
158
213
|
timeoutMs?: number;
|
|
159
214
|
/** Injected so a test can assert elapsed time without sleeping. */
|
|
160
215
|
now?: () => number;
|
|
216
|
+
/** Injected for the same reason: the rate-limit waits go through this. */
|
|
217
|
+
sleep?: (ms: number) => Promise<void>;
|
|
218
|
+
/** One window for every client of a pass; see {@link FortnoxApiOptions.rateWindow}. */
|
|
219
|
+
rateWindow?: number[];
|
|
161
220
|
}
|
|
162
221
|
/**
|
|
163
222
|
* Declare that a connection should sync one scope — the one-time setup a poll-only
|
|
164
223
|
* connector needs in place of a dispatch.
|
|
165
224
|
*
|
|
166
|
-
* **Refuses a binding whose grant is missing**,
|
|
167
|
-
*
|
|
168
|
-
* at sweep time that the connection cannot invoke the operation —
|
|
169
|
-
* possible place: after a year of bookkeeping has been fetched, in a background timer
|
|
225
|
+
* **Refuses a binding whose grant is missing**, except for the automatic landing pass
|
|
226
|
+
* after it has validated the declaration and before it writes that grant. The alternative —
|
|
227
|
+
* write the binding, discover at sweep time that the connection cannot invoke the operation —
|
|
228
|
+
* fails in the worst possible place: after a year of bookkeeping has been fetched, in a background timer
|
|
170
229
|
* nobody is watching, with a provider round trip already spent. Here it fails in the
|
|
171
230
|
* operator's hands, naming the permission to grant.
|
|
172
231
|
*/
|
|
@@ -177,6 +236,9 @@ export declare function bindFortnoxScope(host: ScopeHost, input: {
|
|
|
177
236
|
vertical: string;
|
|
178
237
|
operation: string;
|
|
179
238
|
permission: string;
|
|
239
|
+
kind?: 'ledger' | 'supplier-invoice';
|
|
240
|
+
/** Internal automatic-pass path: the declaration was checked and its grant follows this write. */
|
|
241
|
+
grantPreflighted?: boolean;
|
|
180
242
|
/** The connection's `externalAccountRef` — the company. See {@link FortnoxBinding.externalAccountRef}. */
|
|
181
243
|
externalAccountRef?: string | null;
|
|
182
244
|
now?: () => number;
|
|
@@ -216,10 +278,34 @@ export declare function syncFortnoxScope(host: ScopeHost, connectionId: Connecti
|
|
|
216
278
|
to: string;
|
|
217
279
|
};
|
|
218
280
|
}): Promise<FortnoxSyncResult>;
|
|
281
|
+
/** What one invoice binding's pass did. */
|
|
282
|
+
export interface FortnoxInvoiceSyncResult {
|
|
283
|
+
scopeId: string;
|
|
284
|
+
/** Invoices landed this pass; 0 when nothing changed or the pass's budget was spent. */
|
|
285
|
+
landed: number;
|
|
286
|
+
/** True when changed invoices are left for a later pass. */
|
|
287
|
+
pending: boolean;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Sync ONE invoice binding (#2422): list the supplier invoices changed since its cursor, read
|
|
291
|
+
* each one's rows, and land them in one page through the binding's operation as the connection.
|
|
292
|
+
*
|
|
293
|
+
* Read-only toward Fortnox. Reads at most `budget.details` invoices, oldest number first, and
|
|
294
|
+
* spends from the budget so bindings sharing a pass share Fortnox's rate limit. The cursor is
|
|
295
|
+
* written only after the landing succeeded, so a refused page is read again next pass.
|
|
296
|
+
*/
|
|
297
|
+
export declare function syncFortnoxSupplierInvoices(host: ScopeHost, connectionId: ConnectionId, binding: FortnoxBinding, options: FortnoxConnectorOptions & {
|
|
298
|
+
budget?: {
|
|
299
|
+
details: number;
|
|
300
|
+
};
|
|
301
|
+
}): Promise<FortnoxInvoiceSyncResult>;
|
|
219
302
|
/** What one sweep pass over a connection did. */
|
|
220
303
|
export interface FortnoxSweepResult {
|
|
221
304
|
found: number;
|
|
305
|
+
/** Ledger bindings whose books changed and landed. */
|
|
222
306
|
synced: FortnoxSyncResult[];
|
|
307
|
+
/** Invoice bindings that landed invoices. */
|
|
308
|
+
invoices: FortnoxInvoiceSyncResult[];
|
|
223
309
|
unchanged: number;
|
|
224
310
|
failed: {
|
|
225
311
|
scopeId: string;
|
|
@@ -228,7 +314,9 @@ export interface FortnoxSweepResult {
|
|
|
228
314
|
}
|
|
229
315
|
/**
|
|
230
316
|
* Poll Fortnox for every scope this connection is bound to — the {@link ConnectorSweeper}
|
|
231
|
-
* a deployment schedules.
|
|
317
|
+
* a deployment schedules. A ledger binding syncs its year of books
|
|
318
|
+
* ({@link syncFortnoxScope}); an invoice binding lands the supplier invoices changed since its
|
|
319
|
+
* cursor ({@link syncFortnoxSupplierInvoices}). The name predates invoices and is kept.
|
|
232
320
|
*
|
|
233
321
|
* A timer calls this; it holds no timer itself. That keeps the trigger a deployment
|
|
234
322
|
* concern (`startPlatformSweeper` on node, `definePlatformSweeperDO`'s alarm on
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { connectionActivity, connectionId as connectionIdSchema, instant, money, scopeId as scopeIdSchema, tenantId as tenantIdSchema, } from '@substrat-run/contracts';
|
|
2
|
+
import { addDecimal, connectionActivity, connectionId as connectionIdSchema, instant, money, mulDecimal, scopeId as scopeIdSchema, tenantId as tenantIdSchema, } from '@substrat-run/contracts';
|
|
3
3
|
import { deadlineFetch, settleConnectionUse } from '@substrat-run/kernel';
|
|
4
4
|
import { FortnoxApi, FortnoxApiError, FORTNOX_API_BASE, FORTNOX_OAUTH_BASE, fortnoxSecret, } from './api.js';
|
|
5
5
|
import { financialYearFor, summarizeLedger } from './aggregate.js';
|
|
@@ -104,25 +104,119 @@ export const fortnoxLedgerPage = z.object({
|
|
|
104
104
|
});
|
|
105
105
|
/** How many balance rows ride one `invoke`. */
|
|
106
106
|
const PAGE_SIZE = 500;
|
|
107
|
+
/**
|
|
108
|
+
* The supplier invoices an invoice binding lands (#2422) — one page per pass that found changes.
|
|
109
|
+
*
|
|
110
|
+
* Parsed on the way OUT, like {@link fortnoxLedgerPage}, and frozen the same way: fields are only
|
|
111
|
+
* ever added. Neutral provider facts; what an invoice means to its reader is the vertical's.
|
|
112
|
+
*/
|
|
113
|
+
export const fortnoxSupplierInvoicePage = z.object({
|
|
114
|
+
connectionId: z.string().min(1),
|
|
115
|
+
/** The company the invoices belong to — a bureau lands many companies into one install. */
|
|
116
|
+
company: z.object({
|
|
117
|
+
name: z.string(),
|
|
118
|
+
organizationNumber: z.string(),
|
|
119
|
+
}),
|
|
120
|
+
invoices: z
|
|
121
|
+
.array(z.object({
|
|
122
|
+
/**
|
|
123
|
+
* Fortnox's own number for the invoice in this company. With `connectionId`, the key a
|
|
124
|
+
* landing upserts by: a later page resends an invoice whenever it changes, and the
|
|
125
|
+
* cursor's overlap can resend one that did not.
|
|
126
|
+
*/
|
|
127
|
+
givenNumber: z.string().min(1),
|
|
128
|
+
supplierNumber: z.string(),
|
|
129
|
+
supplierName: z.string(),
|
|
130
|
+
invoiceNumber: z.string(),
|
|
131
|
+
invoiceDate: z.string(),
|
|
132
|
+
dueDate: z.string(),
|
|
133
|
+
/** In the invoice's own currency. */
|
|
134
|
+
total: money,
|
|
135
|
+
booked: z.boolean(),
|
|
136
|
+
cancelled: z.boolean(),
|
|
137
|
+
/** The invoice's accounting rows: debit-positive, in SEK, as the ledger page states them. */
|
|
138
|
+
rows: z.array(z.object({
|
|
139
|
+
account: z.string(),
|
|
140
|
+
costCentre: z.string().nullable(),
|
|
141
|
+
amount: money,
|
|
142
|
+
})),
|
|
143
|
+
}))
|
|
144
|
+
.min(1),
|
|
145
|
+
});
|
|
146
|
+
/**
|
|
147
|
+
* Invoice details read per connection per pass. The client paces every read to Fortnox's limit,
|
|
148
|
+
* so this bounds how long one pass runs (about 40 seconds at the limit) rather than the rate. A
|
|
149
|
+
* larger change set resumes on the next pass.
|
|
150
|
+
*/
|
|
151
|
+
const INVOICE_DETAILS_PER_PASS = 200;
|
|
152
|
+
/**
|
|
153
|
+
* How long one binding's pass keeps starting invoice reads. Pacing alone puts 200 reads at about
|
|
154
|
+
* 40 seconds, but every 429 adds its wait, and a sweep holds one of a few concurrent slots while
|
|
155
|
+
* it runs. Past this, what was read lands and the next pass resumes after it.
|
|
156
|
+
*/
|
|
157
|
+
const INVOICE_PASS_DEADLINE_MS = 90_000;
|
|
158
|
+
/** How far back a binding's first pass reads. */
|
|
159
|
+
const INVOICE_FIRST_LOOKBACK_MS = 90 * 86_400_000;
|
|
160
|
+
/**
|
|
161
|
+
* Read back from each cursor. Fortnox's filter is to the minute in Swedish local time, and the
|
|
162
|
+
* landing upserts, so re-reading a few minutes costs a resend and missing them costs an invoice.
|
|
163
|
+
*/
|
|
164
|
+
const INVOICE_OVERLAP_MS = 5 * 60_000;
|
|
165
|
+
const STOCKHOLM = new Intl.DateTimeFormat('en-CA', {
|
|
166
|
+
timeZone: 'Europe/Stockholm',
|
|
167
|
+
year: 'numeric',
|
|
168
|
+
month: '2-digit',
|
|
169
|
+
day: '2-digit',
|
|
170
|
+
hour: '2-digit',
|
|
171
|
+
minute: '2-digit',
|
|
172
|
+
hourCycle: 'h23',
|
|
173
|
+
});
|
|
174
|
+
/** An instant as Swedish wall time to the minute: `YYYY-MM-DD HH:MM`. */
|
|
175
|
+
const stockholmMinute = (ms) => {
|
|
176
|
+
const p = Object.fromEntries(STOCKHOLM.formatToParts(new Date(ms)).map((part) => [part.type, part.value]));
|
|
177
|
+
return `${p.year}-${p.month}-${p.day} ${p.hour}:${p.minute}`;
|
|
178
|
+
};
|
|
179
|
+
/**
|
|
180
|
+
* The `lastmodified` filter for a cursor. Fortnox filters by wall time, and the autumn change
|
|
181
|
+
* repeats an hour: a cursor in the FIRST 02:xx would hide a change made in the second 02:xx at
|
|
182
|
+
* an earlier minute. So inside the first pass of a repeated hour, the filter starts at that
|
|
183
|
+
* hour's beginning; the landing upserts, so the extra minutes cost only resends.
|
|
184
|
+
*/
|
|
185
|
+
const lastModifiedFilter = (ms) => {
|
|
186
|
+
const wall = stockholmMinute(ms);
|
|
187
|
+
return stockholmMinute(ms + 3_600_000) === wall ? `${wall.slice(0, 14)}00` : wall;
|
|
188
|
+
};
|
|
189
|
+
/** The client options a sync builds its `FortnoxApi` with. */
|
|
190
|
+
const apiOptions = (options) => ({
|
|
191
|
+
apiBase: options.apiBase,
|
|
192
|
+
oauthBase: options.oauthBase,
|
|
193
|
+
now: options.now,
|
|
194
|
+
sleep: options.sleep,
|
|
195
|
+
rateWindow: options.rateWindow,
|
|
196
|
+
});
|
|
107
197
|
/**
|
|
108
198
|
* Declare that a connection should sync one scope — the one-time setup a poll-only
|
|
109
199
|
* connector needs in place of a dispatch.
|
|
110
200
|
*
|
|
111
|
-
* **Refuses a binding whose grant is missing**,
|
|
112
|
-
*
|
|
113
|
-
* at sweep time that the connection cannot invoke the operation —
|
|
114
|
-
* possible place: after a year of bookkeeping has been fetched, in a background timer
|
|
201
|
+
* **Refuses a binding whose grant is missing**, except for the automatic landing pass
|
|
202
|
+
* after it has validated the declaration and before it writes that grant. The alternative —
|
|
203
|
+
* write the binding, discover at sweep time that the connection cannot invoke the operation —
|
|
204
|
+
* fails in the worst possible place: after a year of bookkeeping has been fetched, in a background timer
|
|
115
205
|
* nobody is watching, with a provider round trip already spent. Here it fails in the
|
|
116
206
|
* operator's hands, naming the permission to grant.
|
|
117
207
|
*/
|
|
118
208
|
export async function bindFortnoxScope(host, input) {
|
|
119
209
|
const tenant = tenantIdSchema.parse(input.tenantId);
|
|
120
210
|
const scope = scopeIdSchema.parse(input.scopeId);
|
|
211
|
+
const current = (await listFortnoxBindings(host, input.connectionId)).find((b) => b.scopeId === input.scopeId);
|
|
212
|
+
if (current && (current.kind ?? 'ledger') !== (input.kind ?? 'ledger')) {
|
|
213
|
+
throw new Error(`one Fortnox landing kind per scope; use a separate scope for the other kind (${current.kind ?? 'ledger'} to ${input.kind ?? 'ledger'} on scope ${input.scopeId})`);
|
|
214
|
+
}
|
|
121
215
|
// On the host, not `admin`: this is the same projection the permission checker reads,
|
|
122
216
|
// so a binding is verified against the tuples that will actually gate the invoke —
|
|
123
217
|
// not against a directory row that may not have reached the scope yet.
|
|
124
|
-
const granted = await host.connectionGrantsInScope(tenant, scope);
|
|
125
|
-
const held = granted.some((g) => g.connectionId === input.connectionId && g.permission === input.permission);
|
|
218
|
+
const granted = input.grantPreflighted ? [] : await host.connectionGrantsInScope(tenant, scope);
|
|
219
|
+
const held = input.grantPreflighted || granted.some((g) => g.connectionId === input.connectionId && g.permission === input.permission);
|
|
126
220
|
if (!held) {
|
|
127
221
|
throw new Error(`connection ${input.connectionId} does not hold '${input.permission}' on scope ${input.scopeId} — ` +
|
|
128
222
|
`a sweep would fetch the ledger and then fail to land it. Grant it first ` +
|
|
@@ -134,6 +228,7 @@ export async function bindFortnoxScope(host, input) {
|
|
|
134
228
|
vertical: input.vertical,
|
|
135
229
|
operation: input.operation,
|
|
136
230
|
permission: input.permission,
|
|
231
|
+
...(input.kind ? { kind: input.kind } : {}),
|
|
137
232
|
...(input.externalAccountRef ? { externalAccountRef: input.externalAccountRef } : {}),
|
|
138
233
|
boundAt: new Date(input.now?.() ?? Date.now()).toISOString(),
|
|
139
234
|
};
|
|
@@ -173,13 +268,12 @@ const sha256Hex = async (text) => {
|
|
|
173
268
|
* matters because a sweep runs on a timer and most passes find books nobody has touched.
|
|
174
269
|
*/
|
|
175
270
|
export async function syncFortnoxScope(host, connectionId, binding, options) {
|
|
271
|
+
if (binding.kind !== undefined && binding.kind !== 'ledger') {
|
|
272
|
+
throw new Error(`ledger sync cannot use Fortnox binding kind '${String(binding.kind)}'`);
|
|
273
|
+
}
|
|
176
274
|
const admin = host.admin;
|
|
177
275
|
const conn = await openFortnoxConnection(admin, options.fetch, binding.tenantId, binding.vertical, options.timeoutMs ?? 30_000, { externalAccountRef: binding.externalAccountRef ?? null, expected: connectionId });
|
|
178
|
-
const api = new FortnoxApi(conn,
|
|
179
|
-
apiBase: options.apiBase,
|
|
180
|
-
oauthBase: options.oauthBase,
|
|
181
|
-
now: options.now,
|
|
182
|
-
});
|
|
276
|
+
const api = new FortnoxApi(conn, apiOptions(options));
|
|
183
277
|
// The period defaults to the calendar year containing "now", which is the sane
|
|
184
278
|
// default for a recurring sync; a caller back-filling names its own.
|
|
185
279
|
const nowMs = options.now?.() ?? Date.now();
|
|
@@ -282,9 +376,109 @@ export async function syncFortnoxScope(host, connectionId, binding, options) {
|
|
|
282
376
|
outOfRange: summary.outOfRange,
|
|
283
377
|
};
|
|
284
378
|
}
|
|
379
|
+
/**
|
|
380
|
+
* Sync ONE invoice binding (#2422): list the supplier invoices changed since its cursor, read
|
|
381
|
+
* each one's rows, and land them in one page through the binding's operation as the connection.
|
|
382
|
+
*
|
|
383
|
+
* Read-only toward Fortnox. Reads at most `budget.details` invoices, oldest number first, and
|
|
384
|
+
* spends from the budget so bindings sharing a pass share Fortnox's rate limit. The cursor is
|
|
385
|
+
* written only after the landing succeeded, so a refused page is read again next pass.
|
|
386
|
+
*/
|
|
387
|
+
export async function syncFortnoxSupplierInvoices(host, connectionId, binding, options) {
|
|
388
|
+
if (binding.kind !== 'supplier-invoice') {
|
|
389
|
+
throw new Error(`supplier-invoice sync cannot use Fortnox binding kind '${String(binding.kind ?? 'ledger')}'`);
|
|
390
|
+
}
|
|
391
|
+
const conn = await openFortnoxConnection(host.admin, options.fetch, binding.tenantId, binding.vertical, options.timeoutMs ?? 30_000, { externalAccountRef: binding.externalAccountRef ?? null, expected: connectionId });
|
|
392
|
+
const api = new FortnoxApi(conn, apiOptions(options));
|
|
393
|
+
const nowMs = options.now?.() ?? Date.now();
|
|
394
|
+
const cursor = binding.invoiceSync;
|
|
395
|
+
const since = cursor ? Date.parse(cursor.since) : nowMs - INVOICE_FIRST_LOOKBACK_MS;
|
|
396
|
+
const through = cursor?.pending ? Number(cursor.pending.through) : -Infinity;
|
|
397
|
+
const changed = [...new Set(await api.supplierInvoicesModifiedSince(lastModifiedFilter(since - INVOICE_OVERLAP_MS)))]
|
|
398
|
+
.filter((n) => Number(n) > through)
|
|
399
|
+
.sort((a, b) => Number(a) - Number(b));
|
|
400
|
+
const budget = options.budget ?? { details: INVOICE_DETAILS_PER_PASS };
|
|
401
|
+
const batch = changed.slice(0, budget.details);
|
|
402
|
+
if (batch.length === 0)
|
|
403
|
+
return { scopeId: binding.scopeId, landed: 0, pending: changed.length > 0 };
|
|
404
|
+
budget.details -= batch.length;
|
|
405
|
+
// Read in number order, stopping at the first read that fails. What was read before it still
|
|
406
|
+
// lands and the cursor moves past it, so a failure costs the pass the rest of its batch, never
|
|
407
|
+
// the progress already made. A 404 is an invoice deleted between the list and the read: there
|
|
408
|
+
// is nothing to land, so it is stepped over. Any other failure (a 429 past its retries, a 5xx,
|
|
409
|
+
// an invoice our schema cannot read) ends the pass naming the invoice, and the next pass
|
|
410
|
+
// starts from it. An invoice that can never be read therefore fails every pass by number
|
|
411
|
+
// instead of being dropped, because a skipped one would not reach the vertical until someone
|
|
412
|
+
// edited it in Fortnox.
|
|
413
|
+
const invoices = [];
|
|
414
|
+
let handled = 0;
|
|
415
|
+
let failure = null;
|
|
416
|
+
for (const givenNumber of batch) {
|
|
417
|
+
try {
|
|
418
|
+
invoices.push(landedInvoice(await api.supplierInvoice(givenNumber)));
|
|
419
|
+
}
|
|
420
|
+
catch (err) {
|
|
421
|
+
if (!(err instanceof FortnoxApiError && err.status === 404)) {
|
|
422
|
+
failure = new Error(`supplier invoice ${givenNumber}: ${err instanceof Error ? err.message : String(err)}`);
|
|
423
|
+
break;
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
handled += 1;
|
|
427
|
+
// Checked after a read, so every pass makes progress however slow the list was.
|
|
428
|
+
if ((options.now?.() ?? Date.now()) - nowMs >= INVOICE_PASS_DEADLINE_MS)
|
|
429
|
+
break;
|
|
430
|
+
}
|
|
431
|
+
if (handled === 0)
|
|
432
|
+
throw failure;
|
|
433
|
+
if (invoices.length > 0) {
|
|
434
|
+
const company = await api.companyInformation();
|
|
435
|
+
const payload = fortnoxSupplierInvoicePage.parse({
|
|
436
|
+
connectionId,
|
|
437
|
+
company: { name: company.CompanyName, organizationNumber: company.OrganizationNumber },
|
|
438
|
+
invoices,
|
|
439
|
+
});
|
|
440
|
+
// The connection acting as itself (#97), gated on the grant the binding was seated with.
|
|
441
|
+
const scope = await host.getConnectorScope(connectionId, scopeIdSchema.parse(binding.scopeId));
|
|
442
|
+
await scope.invoke(binding.operation, payload);
|
|
443
|
+
}
|
|
444
|
+
const more = changed.length > handled;
|
|
445
|
+
const startedAt = cursor?.pending?.startedAt ?? new Date(nowMs).toISOString();
|
|
446
|
+
const synced = {
|
|
447
|
+
...binding,
|
|
448
|
+
invoiceSync: {
|
|
449
|
+
since: more ? new Date(since).toISOString() : startedAt,
|
|
450
|
+
syncedAt: new Date(nowMs).toISOString(),
|
|
451
|
+
landed: invoices.length,
|
|
452
|
+
...(more ? { pending: { startedAt, through: batch[handled - 1] } } : {}),
|
|
453
|
+
},
|
|
454
|
+
};
|
|
455
|
+
await host.admin.putConnectorState(connectionId, bindingKey(binding.scopeId), synced);
|
|
456
|
+
if (failure)
|
|
457
|
+
throw failure;
|
|
458
|
+
return { scopeId: binding.scopeId, landed: invoices.length, pending: more };
|
|
459
|
+
}
|
|
460
|
+
/** One Fortnox invoice as the page carries it, parsed here so a bad one is named by number. */
|
|
461
|
+
const landedInvoice = (invoice) => fortnoxSupplierInvoicePage.shape.invoices.element.parse({
|
|
462
|
+
givenNumber: invoice.GivenNumber,
|
|
463
|
+
supplierNumber: invoice.SupplierNumber,
|
|
464
|
+
supplierName: invoice.SupplierName,
|
|
465
|
+
invoiceNumber: invoice.InvoiceNumber,
|
|
466
|
+
invoiceDate: invoice.InvoiceDate,
|
|
467
|
+
dueDate: invoice.DueDate,
|
|
468
|
+
total: { amount: invoice.Total, currency: invoice.Currency },
|
|
469
|
+
booked: invoice.Booked,
|
|
470
|
+
cancelled: invoice.Cancelled,
|
|
471
|
+
rows: invoice.SupplierInvoiceRows.map((row) => ({
|
|
472
|
+
account: row.Account,
|
|
473
|
+
costCentre: row.CostCenter || null,
|
|
474
|
+
amount: { amount: addDecimal(row.Debit, mulDecimal('-1', row.Credit)), currency: 'SEK' },
|
|
475
|
+
})),
|
|
476
|
+
});
|
|
285
477
|
/**
|
|
286
478
|
* Poll Fortnox for every scope this connection is bound to — the {@link ConnectorSweeper}
|
|
287
|
-
* a deployment schedules.
|
|
479
|
+
* a deployment schedules. A ledger binding syncs its year of books
|
|
480
|
+
* ({@link syncFortnoxScope}); an invoice binding lands the supplier invoices changed since its
|
|
481
|
+
* cursor ({@link syncFortnoxSupplierInvoices}). The name predates invoices and is kept.
|
|
288
482
|
*
|
|
289
483
|
* A timer calls this; it holds no timer itself. That keeps the trigger a deployment
|
|
290
484
|
* concern (`startPlatformSweeper` on node, `definePlatformSweeperDO`'s alarm on
|
|
@@ -296,15 +490,30 @@ export async function syncFortnoxScope(host, connectionId, binding, options) {
|
|
|
296
490
|
*/
|
|
297
491
|
export async function sweepFortnoxLedger(host, connectionId, options) {
|
|
298
492
|
const rows = await host.admin.listConnectorState(connectionId, BINDING_PREFIX);
|
|
299
|
-
const result = { found: 0, synced: [], unchanged: 0, failed: [] };
|
|
493
|
+
const result = { found: 0, synced: [], invoices: [], unchanged: 0, failed: [] };
|
|
494
|
+
// One budget and one rate window per pass: every binding on this connection reads the same company.
|
|
495
|
+
const budget = { details: INVOICE_DETAILS_PER_PASS };
|
|
496
|
+
const pass = { ...options, rateWindow: options.rateWindow ?? [] };
|
|
300
497
|
for (const { value } of rows) {
|
|
301
498
|
// A tombstoned binding (`unbindFortnoxScope`) — present as a row, not a target.
|
|
302
499
|
if (value === null || typeof value !== 'object')
|
|
303
500
|
continue;
|
|
304
501
|
const binding = value;
|
|
305
502
|
result.found += 1;
|
|
503
|
+
if (binding.kind !== undefined && binding.kind !== 'ledger' && binding.kind !== 'supplier-invoice') {
|
|
504
|
+
result.failed.push({ scopeId: binding.scopeId, error: `unknown Fortnox binding kind '${String(binding.kind)}'; upgrade this platform before polling this binding` });
|
|
505
|
+
continue;
|
|
506
|
+
}
|
|
306
507
|
try {
|
|
307
|
-
|
|
508
|
+
if (binding.kind === 'supplier-invoice') {
|
|
509
|
+
const r = await syncFortnoxSupplierInvoices(host, connectionId, binding, { ...pass, budget });
|
|
510
|
+
if (r.landed > 0)
|
|
511
|
+
result.invoices.push(r);
|
|
512
|
+
else
|
|
513
|
+
result.unchanged += 1;
|
|
514
|
+
continue;
|
|
515
|
+
}
|
|
516
|
+
const r = await syncFortnoxScope(host, connectionId, binding, pass);
|
|
308
517
|
if (r.changed)
|
|
309
518
|
result.synced.push(r);
|
|
310
519
|
else
|
|
@@ -427,8 +636,8 @@ export async function fortnoxConnectionActivity(host, connectionId) {
|
|
|
427
636
|
key,
|
|
428
637
|
title: `${b.vertical} — ${b.scopeId}`,
|
|
429
638
|
reference: b.lastSync ? String(b.lastSync.financialYearId) : null,
|
|
430
|
-
status: b.lastSync ? 'synced' : 'bound — not yet synced',
|
|
431
|
-
at: instant.parse(b.lastSync?.syncedAt ?? b.boundAt),
|
|
639
|
+
status: b.lastSync || b.invoiceSync ? 'synced' : 'bound — not yet synced',
|
|
640
|
+
at: instant.parse(b.lastSync?.syncedAt ?? b.invoiceSync?.syncedAt ?? b.boundAt),
|
|
432
641
|
facts: [
|
|
433
642
|
{ label: 'Lands through', value: b.operation },
|
|
434
643
|
{ label: 'Permission', value: b.permission },
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/mock.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { FetchLike } from '@substrat-run/kernel';
|
|
2
2
|
/**
|
|
3
|
-
* Fortnox in memory — the token endpoint and the
|
|
4
|
-
*
|
|
3
|
+
* Fortnox in memory — the token endpoint and the REST reads the sweep makes, enough to run
|
|
4
|
+
* it without a provider account.
|
|
5
5
|
*
|
|
6
6
|
* **What a mock proves:** that our shape works — the client-credentials mint, the
|
|
7
7
|
* PC8/CP437 decode, the year-overlap pick, the paging, the unchanged-hash skip.
|
|
@@ -40,6 +40,15 @@ export interface FortnoxMockOptions {
|
|
|
40
40
|
*/
|
|
41
41
|
consentCode?: string;
|
|
42
42
|
}
|
|
43
|
+
/** A supplier invoice as the mock serves its detail, plus when it last changed (`YYYY-MM-DD HH:MM`, Swedish local). */
|
|
44
|
+
export interface FortnoxMockSupplierInvoice {
|
|
45
|
+
invoice: {
|
|
46
|
+
GivenNumber: string;
|
|
47
|
+
} & Record<string, unknown>;
|
|
48
|
+
modified: string;
|
|
49
|
+
/** Listed, but its detail answers 404: deleted between the list and the read. */
|
|
50
|
+
gone?: boolean;
|
|
51
|
+
}
|
|
43
52
|
/**
|
|
44
53
|
* Encode to PC8 (code page 437) — the charset a real Fortnox SIE export declares in
|
|
45
54
|
* `#FORMAT` and actually sends.
|
|
@@ -70,6 +79,13 @@ export declare class FortnoxMock {
|
|
|
70
79
|
/** Every REST path fetched, in order. */
|
|
71
80
|
readonly calls: string[];
|
|
72
81
|
constructor(options?: FortnoxMockOptions);
|
|
82
|
+
private readonly supplierInvoices;
|
|
83
|
+
/** REST requests still to be answered 429 with `Retry-After: 2`, counting down. */
|
|
84
|
+
rateLimitNext: number;
|
|
85
|
+
/** Only requests whose path contains this count toward {@link rateLimitNext}. */
|
|
86
|
+
rateLimitOn: string;
|
|
87
|
+
/** Add or change a supplier invoice — how a test simulates "an invoice was booked". */
|
|
88
|
+
setSupplierInvoice(entry: FortnoxMockSupplierInvoice): void;
|
|
73
89
|
/** Replace one year's SIE payload — how a test simulates "the books changed". */
|
|
74
90
|
setSie(financialYearId: number, text: string): void;
|
|
75
91
|
private json;
|
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,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAQtD;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;IACtF,cAAc,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACpE,uCAAuC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAejD;AAED,qBAAa,WAAW;IACtB,QAAQ,CAAC,OAAO,gCAAgC;IAChD,QAAQ,CAAC,SAAS,wCAAwC;IAE1D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6C;IACrE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoD;IAC1E,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAyB;IAC7C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,8DAA8D;IAC9D,OAAO,CAAC,WAAW,CAAqB;IAExC,wFAAwF;IACxF,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAM;IAC9B,yCAAyC;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAM;IAE9B,YAAY,OAAO,GAAE,kBAAuB,EAgB3C;IAED,iFAAiF;IACjF,MAAM,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAElD;IAED,OAAO,CAAC,IAAI;
|
|
1
|
+
{"version":3,"file":"mock.d.ts","sourceRoot":"","sources":["../src/mock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAQtD;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,kBAAkB,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;IACtF,cAAc,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACpE,uCAAuC;IACvC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,6CAA6C;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,uHAAuH;AACvH,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC3D,QAAQ,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,UAAU,CAejD;AAED,qBAAa,WAAW;IACtB,QAAQ,CAAC,OAAO,gCAAgC;IAChD,QAAQ,CAAC,SAAS,wCAAwC;IAE1D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6C;IACrE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoD;IAC1E,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAyB;IAC7C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,8DAA8D;IAC9D,OAAO,CAAC,WAAW,CAAqB;IAExC,wFAAwF;IACxF,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAM;IAC9B,yCAAyC;IACzC,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,CAAM;IAE9B,YAAY,OAAO,GAAE,kBAAuB,EAgB3C;IAED,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAiD;IAElF,mFAAmF;IACnF,aAAa,SAAK;IAClB,iFAAiF;IACjF,WAAW,SAAM;IAEjB,uFAAuF;IACvF,kBAAkB,CAAC,KAAK,EAAE,0BAA0B,GAAG,IAAI,CAE1D;IAED,iFAAiF;IACjF,MAAM,CAAC,eAAe,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAElD;IAED,OAAO,CAAC,IAAI;IAWZ,yCAAyC;IACzC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAmGvB;CACH"}
|
package/dist/mock.js
CHANGED
|
@@ -60,15 +60,25 @@ export class FortnoxMock {
|
|
|
60
60
|
this.expiresIn = options.expiresIn ?? 3600;
|
|
61
61
|
this.consentCode = options.consentCode;
|
|
62
62
|
}
|
|
63
|
+
supplierInvoices = new Map();
|
|
64
|
+
/** REST requests still to be answered 429 with `Retry-After: 2`, counting down. */
|
|
65
|
+
rateLimitNext = 0;
|
|
66
|
+
/** Only requests whose path contains this count toward {@link rateLimitNext}. */
|
|
67
|
+
rateLimitOn = '';
|
|
68
|
+
/** Add or change a supplier invoice — how a test simulates "an invoice was booked". */
|
|
69
|
+
setSupplierInvoice(entry) {
|
|
70
|
+
this.supplierInvoices.set(entry.invoice.GivenNumber, entry);
|
|
71
|
+
}
|
|
63
72
|
/** Replace one year's SIE payload — how a test simulates "the books changed". */
|
|
64
73
|
setSie(financialYearId, text) {
|
|
65
74
|
this.sie[financialYearId] = text;
|
|
66
75
|
}
|
|
67
|
-
json(body, status = 200) {
|
|
76
|
+
json(body, status = 200, headers = {}) {
|
|
68
77
|
const text = JSON.stringify(body);
|
|
69
78
|
return {
|
|
70
79
|
ok: status >= 200 && status < 300,
|
|
71
80
|
status,
|
|
81
|
+
headers: { get: (name) => headers[name] ?? null },
|
|
72
82
|
text: async () => text,
|
|
73
83
|
arrayBuffer: async () => pc8Bytes(text).buffer,
|
|
74
84
|
};
|
|
@@ -124,12 +134,37 @@ export class FortnoxMock {
|
|
|
124
134
|
return this.json({ ErrorInformation: { message: 'invalid token' } }, 401);
|
|
125
135
|
}
|
|
126
136
|
this.calls.push(path);
|
|
137
|
+
if (this.rateLimitNext > 0 && path.includes(this.rateLimitOn)) {
|
|
138
|
+
this.rateLimitNext -= 1;
|
|
139
|
+
return this.json({ message: 'Too many requests' }, 429, { 'Retry-After': '2' });
|
|
140
|
+
}
|
|
127
141
|
if (path.endsWith('/companyinformation')) {
|
|
128
142
|
return this.json({ CompanyInformation: this.company });
|
|
129
143
|
}
|
|
130
144
|
if (path.endsWith('/financialyears')) {
|
|
131
145
|
return this.json({ FinancialYears: this.years });
|
|
132
146
|
}
|
|
147
|
+
if (url.pathname.endsWith('/supplierinvoices')) {
|
|
148
|
+
// `lastmodified` is inclusive and to the minute, so string order is time order.
|
|
149
|
+
const query = new URLSearchParams(url.search.slice(1));
|
|
150
|
+
const since = query.get('lastmodified') ?? '';
|
|
151
|
+
const limit = Number(query.get('limit') ?? 100);
|
|
152
|
+
const page = Number(query.get('page') ?? 1);
|
|
153
|
+
const matching = [...this.supplierInvoices.values()].filter((e) => e.modified >= since);
|
|
154
|
+
return this.json({
|
|
155
|
+
MetaInformation: { '@TotalPages': Math.max(1, Math.ceil(matching.length / limit)), '@CurrentPage': page },
|
|
156
|
+
SupplierInvoices: matching
|
|
157
|
+
.slice((page - 1) * limit, page * limit)
|
|
158
|
+
.map((e) => ({ GivenNumber: e.invoice.GivenNumber })),
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
const invoiceMatch = /\/supplierinvoices\/([^/?]+)$/.exec(url.pathname);
|
|
162
|
+
if (invoiceMatch) {
|
|
163
|
+
const entry = this.supplierInvoices.get(decodeURIComponent(invoiceMatch[1]));
|
|
164
|
+
if (!entry || entry.gone)
|
|
165
|
+
return this.json({ ErrorInformation: { message: 'no such supplier invoice' } }, 404);
|
|
166
|
+
return this.json({ SupplierInvoice: entry.invoice });
|
|
167
|
+
}
|
|
133
168
|
const sieMatch = /\/sie\/4\?financialyear=(\d+)$/.exec(path);
|
|
134
169
|
if (sieMatch) {
|
|
135
170
|
const id = Number(sieMatch[1]);
|
package/dist/mock.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock.js","sourceRoot":"","sources":["../src/mock.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"mock.js","sourceRoot":"","sources":["../src/mock.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAiDvC;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,sFAAsF;IACtF,oFAAoF;IACpF,uEAAuE;IACvE,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;QACvC,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC;YAChB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACf,SAAS;QACX,CAAC;QACD,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACpC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IAC7C,CAAC;IACD,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,OAAO,WAAW;IACb,OAAO,GAAG,4BAA4B,CAAC;IACvC,SAAS,GAAG,oCAAoC,CAAC;IAEzC,QAAQ,CAAS;IACjB,YAAY,CAAS;IACrB,QAAQ,CAAS;IACjB,OAAO,CAA6C;IACpD,KAAK,CAAoD;IACzD,GAAG,CAAyB;IAC5B,SAAS,CAAS;IACnC,8DAA8D;IACtD,WAAW,CAAqB;IAExC,wFAAwF;IAC/E,KAAK,GAAa,EAAE,CAAC;IAC9B,yCAAyC;IAChC,KAAK,GAAa,EAAE,CAAC;IAE9B,YAAY,OAAO,GAAuB,EAAE;QAC1C,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,WAAW,CAAC;QAChD,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,eAAe,CAAC;QAC5D,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,QAAQ,CAAC;QAC7C,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI;YAChC,WAAW,EAAE,gBAAgB;YAC7B,kBAAkB,EAAE,aAAa;YACjC,cAAc,EAAE,MAAM;SACvB,CAAC;QACF,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,cAAc,IAAI;YACrC,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE;YACvD,EAAE,EAAE,EAAE,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE;SACxD,CAAC;QACF,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC;QAC3C,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACzC,CAAC;IAEgB,gBAAgB,GAAG,IAAI,GAAG,EAAsC,CAAC;IAElF,mFAAmF;IACnF,aAAa,GAAG,CAAC,CAAC;IAClB,iFAAiF;IACjF,WAAW,GAAG,EAAE,CAAC;IAEjB,uFAAuF;IACvF,kBAAkB,CAAC,KAAiC;QAClD,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC9D,CAAC;IAED,iFAAiF;IACjF,MAAM,CAAC,eAAuB,EAAE,IAAY;QAC1C,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;IACnC,CAAC;IAEO,IAAI,CAAC,IAAa,EAAE,MAAM,GAAG,GAAG,EAAE,OAAO,GAA2B,EAAE;QAC5E,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAClC,OAAO;YACL,EAAE,EAAE,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG;YACjC,MAAM;YACN,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE;YACzD,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;YACtB,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,MAAqB;SAC5B,CAAC;IACtC,CAAC;IAED,yCAAyC;IAChC,KAAK,GAAc,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAChD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;QAC3B,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC;QAEvC,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACrC,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAA2B,CAAC;YAChE,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;YAC5C,MAAM,QAAQ,GAAG,SAAS,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,EAAE,CAAC;YAC1E,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,EAAE,GAAG,CAAC,CAAC;YAClG,CAAC;YACD,iFAAiF;YACjF,4DAA4D;YAC5D,IAAI,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAAE,CAAC;gBACvE,MAAM,IAAI,GAAG,IAAI,eAAe,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;gBACpF,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,IAAI,IAAI,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;oBAChE,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,EAAE,GAAG,CAAC,CAAC;gBAChG,CAAC;gBACD,IAAI,CAAC,WAAW,GAAG,SAAS,CAAC;gBAC7B,MAAM,KAAK,GAAG,iBAAiB,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACvD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACvB,OAAO,IAAI,CAAC,IAAI,CAAC;oBACf,YAAY,EAAE,KAAK;oBACnB,UAAU,EAAE,QAAQ;oBACpB,UAAU,EAAE,IAAI,CAAC,SAAS;oBAC1B,KAAK,EAAE,gDAAgD;iBACxD,CAAC,CAAC;YACL,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAClD,+EAA+E;gBAC/E,+EAA+E;gBAC/E,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,EAAE,GAAG,CAAC,CAAC;YAC3F,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,+BAA+B,CAAC,EAAE,CAAC;gBACxE,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,wBAAwB,EAAE,EAAE,GAAG,CAAC,CAAC;YAC7D,CAAC;YACD,MAAM,KAAK,GAAG,SAAS,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvB,OAAO,IAAI,CAAC,IAAI,CAAC;gBACf,YAAY,EAAE,KAAK;gBACnB,UAAU,EAAE,QAAQ;gBACpB,UAAU,EAAE,IAAI,CAAC,SAAS;gBAC1B,KAAK,EAAE,gDAAgD;aACxD,CAAC,CAAC;QACL,CAAC;QAED,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAA2B,CAAC;QAChE,MAAM,MAAM,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACxE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACjC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,gBAAgB,EAAE,EAAE,OAAO,EAAE,eAAe,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QAC5E,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtB,IAAI,IAAI,CAAC,aAAa,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9D,IAAI,CAAC,aAAa,IAAI,CAAC,CAAC;YACxB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,mBAAmB,EAAE,EAAE,GAAG,EAAE,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;QAClF,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,CAAC;YACzC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,cAAc,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAC/C,gFAAgF;YAChF,MAAM,KAAK,GAAG,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACvD,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;YAChD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAC5C,MAAM,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,KAAK,CAAC,CAAC;YACxF,OAAO,IAAI,CAAC,IAAI,CAAC;gBACf,eAAe,EAAE,EAAE,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,EAAE,cAAc,EAAE,IAAI,EAAE;gBACzG,gBAAgB,EAAE,QAAQ;qBACvB,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,EAAE,IAAI,GAAG,KAAK,CAAC;qBACvC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;aACxD,CAAC,CAAC;QACL,CAAC;QACD,MAAM,YAAY,GAAG,+BAA+B,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACxE,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;YAC9E,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI;gBAAE,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,gBAAgB,EAAE,EAAE,OAAO,EAAE,0BAA0B,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YAC/G,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,eAAe,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,MAAM,QAAQ,GAAG,gCAAgC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC1B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,gBAAgB,EAAE,EAAE,OAAO,EAAE,wBAAwB,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;YACrF,CAAC;YACD,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC7B,OAAO;gBACL,EAAE,EAAE,IAAI;gBACR,MAAM,EAAE,GAAG;gBACX,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;gBACtB,WAAW,EAAE,KAAK,IAAI,EAAE,CAAC,KAAK,CAAC,MAAqB;aACnB,CAAC;QACtC,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,gBAAgB,EAAE,EAAE,OAAO,EAAE,iBAAiB,IAAI,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;IACpF,CAAC,CAAC;CACH"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@substrat-run/connector-fortnox",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Substrat connector: Fortnox accounting (Swedish). Reads a company's bookkeeping as SIE4 on a poll and lands it into a scope through the vertical's own operation. Auth is OAuth2 client-credentials against a service consent, so there is no refresh token to rotate. Host code — swept on a ScopeHost, never module code.",
|
|
5
5
|
"license": "AGPL-3.0-only",
|
|
6
6
|
"repository": {
|
|
@@ -25,14 +25,14 @@
|
|
|
25
25
|
}
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@substrat-run/
|
|
29
|
-
"@substrat-run/
|
|
28
|
+
"@substrat-run/kernel": "^0.167.0",
|
|
29
|
+
"@substrat-run/contracts": "^0.167.0"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"typescript": "^7.0.0",
|
|
33
33
|
"vitest": "^5.0.5",
|
|
34
34
|
"zod": "^4.4.3",
|
|
35
|
-
"@substrat-run/adapter-sqlite": "^0.
|
|
35
|
+
"@substrat-run/adapter-sqlite": "^0.167.0"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
|
38
38
|
"zod": "^4.4.0"
|