@substrat-run/connector-fortnox 0.2.0 → 0.4.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/LICENSE +661 -0
- package/README.md +43 -19
- package/dist/api.d.ts +12 -17
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +38 -10
- package/dist/api.js.map +1 -1
- package/dist/connect.d.ts +44 -0
- package/dist/connect.d.ts.map +1 -0
- package/dist/connect.js +98 -0
- package/dist/connect.js.map +1 -0
- package/dist/index.d.ts +13 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -1
- package/dist/mock.d.ts +24 -4
- package/dist/mock.d.ts.map +1 -1
- package/dist/mock.js +49 -9
- package/dist/mock.js.map +1 -1
- package/dist/sie4.d.ts +35 -1
- package/dist/sie4.d.ts.map +1 -1
- package/dist/sie4.js +61 -1
- package/dist/sie4.js.map +1 -1
- package/package.json +13 -13
package/README.md
CHANGED
|
@@ -89,6 +89,16 @@ shown nowhere in the Developer Portal, so there is no way to assemble the creden
|
|
|
89
89
|
not what it needs today — this is the single most expensive thing to get wrong, because fixing it
|
|
90
90
|
means going back to every customer.
|
|
91
91
|
|
|
92
|
+
### The hosted flow is the same code
|
|
93
|
+
|
|
94
|
+
A deployment that connects customers from a screen (the dashboard's Fortnox Connect button and
|
|
95
|
+
its shareable connect links, #1220) runs `completeFortnoxConsent` when the consent redirect comes
|
|
96
|
+
back: the code exchange, the `companyinformation` read, and the client-credentials proof are the
|
|
97
|
+
exported sequence, not a reimplementation of it. The caller supplies the code, the registered
|
|
98
|
+
redirect URI and a `fetch`; what comes back is the sealed-ready secret plus the company it names —
|
|
99
|
+
show that company to the person who clicked approve, because a consent granted while signed into
|
|
100
|
+
the wrong company-switcher entry looks identical up to that moment.
|
|
101
|
+
|
|
92
102
|
## Using it
|
|
93
103
|
|
|
94
104
|
```ts
|
|
@@ -158,25 +168,37 @@ to bind time rather than disappearing.
|
|
|
158
168
|
1. **Your deployment must schedule the poll** (step 4). The connector provides the driver; it
|
|
159
169
|
cannot hold a timer — that is a deployment concern. Without one wired, a binding is inert.
|
|
160
170
|
|
|
161
|
-
2. **The live round-trip is
|
|
162
|
-
|
|
163
|
-
`financialyears`, `sie/4` —
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
171
|
+
2. **The live round-trip is verified**, against a Fortnox test company (2026-09-03), and it
|
|
172
|
+
found two real bugs — see caveat 3. `test/live.test.ts` runs the real API — mint,
|
|
173
|
+
`companyinformation`, `financialyears`, `sie/4` — whenever `secrets/connectors.env` (shared
|
|
174
|
+
by every connector) holds a complete credential, and skips otherwise, so CI without secrets
|
|
175
|
+
stays green. `pnpm fortnox:connect` is what fills that file; `DatabaseNumber` is shown nowhere
|
|
176
|
+
in the Developer Portal, so it cannot be typed by hand.
|
|
177
|
+
|
|
178
|
+
What the live run settled: `grant_type=client_credentials` with a `TenantId` header really does
|
|
179
|
+
mint with no refresh token in the response, and the envelopes really are `FinancialYears` /
|
|
180
|
+
`CompanyInformation`. What it disproved is in caveat 3.
|
|
170
181
|
|
|
171
182
|
`test/live.test.ts` reads only: the data calls are GETs, and the one POST is the token mint,
|
|
172
183
|
which creates no Fortnox record. This connector has no write path to Fortnox at all, so
|
|
173
|
-
running it against a production company cannot damage anything.
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
184
|
+
running it against a production company cannot damage anything. Putting test data INTO a
|
|
185
|
+
sandbox is therefore a separate script — `pnpm fortnox:seed` — which refuses any company whose
|
|
186
|
+
organisation number is not Fortnox's sandbox marker `555555-5555`. Note that an empty sandbox
|
|
187
|
+
makes the charset and double-entry assertions silently not run at all, so seed before judging
|
|
188
|
+
a red.
|
|
189
|
+
|
|
190
|
+
3. **SIE4 is PC8 (code page 437) — not latin1, and not UTF-8.** The file says so in `#FORMAT`;
|
|
191
|
+
the HTTP response does not. Decoding as UTF-8 throws on the first Swedish letter, which is the
|
|
192
|
+
*good* failure. Decoding as latin1 is the bad one: every byte 0x00–0xFF is a valid latin1 code
|
|
193
|
+
point, so nothing throws and no replacement character appears — you simply get account names
|
|
194
|
+
with the wrong letters. **This connector shipped that way**, and the whole package stayed green,
|
|
195
|
+
because `FortnoxMock` encoded latin1 too: the reader and the fixture agreed with each other
|
|
196
|
+
while both disagreed with Fortnox. Only the live suite could see it.
|
|
197
|
+
|
|
198
|
+
`decodeSie` (`src/sie4.ts`) owns the charset, reads `#FORMAT`, and refuses one it does not
|
|
199
|
+
implement rather than guessing. `TextDecoder` is no help — CP437 is not in the WHATWG registry,
|
|
200
|
+
and `TextDecoder('iso-8859-1')` is really windows-1252 — so it carries a mapping table for
|
|
201
|
+
0x80–0xFF. `FortnoxMock` now encodes CP437 the way Fortnox does.
|
|
180
202
|
|
|
181
203
|
4. **Pick the financial year by OVERLAP, never containment.** A newly-acquired company's first
|
|
182
204
|
financial year can start mid-month (24 April, say). A search for "the year containing 1 January"
|
|
@@ -196,9 +218,11 @@ to bind time rather than disappearing.
|
|
|
196
218
|
## Testing
|
|
197
219
|
|
|
198
220
|
`FortnoxMock` implements the token endpoint and the three REST reads in memory, so the whole sweep
|
|
199
|
-
runs without a Fortnox account — credential minting,
|
|
221
|
+
runs without a Fortnox account — credential minting, PC8/CP437 decoding, year selection, paging,
|
|
200
222
|
the unchanged-hash skip, and the bind-time grant refusal.
|
|
201
223
|
|
|
202
224
|
**What a mock proves:** that our shape works. **What it cannot prove:** that our reading of
|
|
203
|
-
Fortnox's API is correct — the mock *is* our reading.
|
|
204
|
-
|
|
225
|
+
Fortnox's API is correct — the mock *is* our reading. That is not a hypothetical here: the mock
|
|
226
|
+
encoded the wrong charset for as long as the reader decoded it, and they agreed with each other
|
|
227
|
+
right up until a real call disagreed with both. Green here means *ready to check against a real
|
|
228
|
+
company*, and the checking is `test/live.test.ts`.
|
package/dist/api.d.ts
CHANGED
|
@@ -76,19 +76,11 @@ export declare const fortnoxFinancialYear: z.ZodObject<{
|
|
|
76
76
|
AccountingMethod: z.ZodOptional<z.ZodString>;
|
|
77
77
|
}, z.core.$strip>;
|
|
78
78
|
export type FortnoxFinancialYear = z.infer<typeof fortnoxFinancialYear>;
|
|
79
|
-
/**
|
|
80
|
-
* The company, as `GET /3/companyinformation` returns it.
|
|
81
|
-
*
|
|
82
|
-
* `DatabaseNumber` is the whole reason this endpoint is called: it IS the `TenantId`
|
|
83
|
-
* header value, and it is how a connect flow learns which company the consent it just
|
|
84
|
-
* received belongs to. It is also the cheapest authenticated read Fortnox offers, so
|
|
85
|
-
* it doubles as the credential probe.
|
|
86
|
-
*/
|
|
87
79
|
export declare const fortnoxCompany: z.ZodObject<{
|
|
88
|
-
CompanyName: z.
|
|
89
|
-
OrganizationNumber: z.
|
|
90
|
-
DatabaseNumber: z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString]>>;
|
|
91
|
-
CountryCode: z.ZodOptional<z.ZodString
|
|
80
|
+
CompanyName: z.ZodPipe<z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNull]>>, z.ZodTransform<string, string | null | undefined>>;
|
|
81
|
+
OrganizationNumber: z.ZodPipe<z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNull]>>, z.ZodTransform<string, string | null | undefined>>;
|
|
82
|
+
DatabaseNumber: z.ZodPipe<z.ZodOptional<z.ZodUnion<readonly [z.ZodNumber, z.ZodString, z.ZodNull]>>, z.ZodTransform<string | number | undefined, string | number | null | undefined>>;
|
|
83
|
+
CountryCode: z.ZodPipe<z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNull]>>, z.ZodTransform<string, string | null | undefined>>;
|
|
92
84
|
}, z.core.$strip>;
|
|
93
85
|
export type FortnoxCompany = z.infer<typeof fortnoxCompany>;
|
|
94
86
|
/**
|
|
@@ -143,11 +135,14 @@ export declare class FortnoxApi {
|
|
|
143
135
|
/**
|
|
144
136
|
* The whole year's bookkeeping as one SIE4 file — the read this connector exists for.
|
|
145
137
|
*
|
|
146
|
-
* **The response is
|
|
147
|
-
*
|
|
148
|
-
* account name, cost-centre label and verification
|
|
149
|
-
* ledger that looks like a working one.
|
|
150
|
-
*
|
|
138
|
+
* **The response is PC8 (code page 437), not UTF-8 and not latin1**, and nothing in
|
|
139
|
+
* the HTTP response says so — only the file's own `#FORMAT` post does. Decoding it
|
|
140
|
+
* wrong mangles every å/ä/ö in every account name, cost-centre label and verification
|
|
141
|
+
* text, which is a corrupted ledger that looks like a working one. Decoding as latin1
|
|
142
|
+
* does not even fail loudly: every byte is a valid latin1 code point, so it produces
|
|
143
|
+
* no replacement character and no throw. That is what shipped here until a live call
|
|
144
|
+
* disproved it. So the bytes are taken as an ArrayBuffer and handed to `decodeSie`,
|
|
145
|
+
* which owns the charset decision for the whole connector.
|
|
151
146
|
*/
|
|
152
147
|
sieFile(financialYearId: number): Promise<string>;
|
|
153
148
|
}
|
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;AAShE;;;;;;;;;;;;;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,6FAA6F;IAC7F,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;AAS5D;;;;;;;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,YACE,IAAI,EAAE,mBAAmB,EACzB,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAA;KAAE,EAMvE;IAED,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IAEnC,OAAO,CAAC,MAAM;IAYd;;;;;;;OAOG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,CAAC,CA+BnC;IAED,oFAAoF;YACtE,OAAO;IAgBrB,sFAAsF;IAChF,kBAAkB,IAAI,OAAO,CAAC,cAAc,CAAC,CAKlD;IAED,4FAA4F;IACtF,cAAc,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC,CAGtD;IAED;;;;;;;;;;;OAWG;IACG,OAAO,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBtD;CACF"}
|
package/dist/api.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
+
import { decodeSie } from './sie4.js';
|
|
2
3
|
/**
|
|
3
4
|
* A thin, typed client over the Fortnox REST API and its OAuth2 token endpoint.
|
|
4
5
|
*
|
|
@@ -93,11 +94,34 @@ export const fortnoxFinancialYear = z.object({
|
|
|
93
94
|
* received belongs to. It is also the cheapest authenticated read Fortnox offers, so
|
|
94
95
|
* it doubles as the credential probe.
|
|
95
96
|
*/
|
|
97
|
+
/**
|
|
98
|
+
* A text field Fortnox may send as an explicit `null`.
|
|
99
|
+
*
|
|
100
|
+
* `.optional()` is not enough, and the difference cost a live failure: it permits an
|
|
101
|
+
* ABSENT key, while Fortnox sends the key with `null` in it for anything the company
|
|
102
|
+
* has not filled in. A sandbox with a blank address answers `CountryCode: null`,
|
|
103
|
+
* `ZipCode: null`, `VisitAddress: null` — verified against api.fortnox.se 2026-09-03 —
|
|
104
|
+
* and the parse threw where the mock, which always sent complete strings, had passed.
|
|
105
|
+
* That is exactly the seam the live suite exists to hold: the mock is our reading of
|
|
106
|
+
* the docs on both sides of the call, so only a real company can disagree with it.
|
|
107
|
+
*
|
|
108
|
+
* Null and absent both mean "not set here", so both become the fallback.
|
|
109
|
+
*/
|
|
110
|
+
const fortnoxText = (fallback = '') => z
|
|
111
|
+
.union([z.string(), z.null()])
|
|
112
|
+
.optional()
|
|
113
|
+
.transform((v) => v ?? fallback);
|
|
96
114
|
export const fortnoxCompany = z.object({
|
|
97
|
-
CompanyName:
|
|
98
|
-
OrganizationNumber:
|
|
99
|
-
|
|
100
|
-
|
|
115
|
+
CompanyName: fortnoxText(),
|
|
116
|
+
OrganizationNumber: fortnoxText(),
|
|
117
|
+
// Normalized to `undefined` rather than kept as `null`, because every caller asks
|
|
118
|
+
// `=== undefined` before stringifying it — and `String(null)` is the tenant id
|
|
119
|
+
// `"null"`, which would key a connection to a company that does not exist.
|
|
120
|
+
DatabaseNumber: z
|
|
121
|
+
.union([z.number(), z.string(), z.null()])
|
|
122
|
+
.optional()
|
|
123
|
+
.transform((v) => v ?? undefined),
|
|
124
|
+
CountryCode: fortnoxText(),
|
|
101
125
|
});
|
|
102
126
|
const tokenResponse = z.object({
|
|
103
127
|
access_token: z.string().min(1),
|
|
@@ -254,11 +278,14 @@ export class FortnoxApi {
|
|
|
254
278
|
/**
|
|
255
279
|
* The whole year's bookkeeping as one SIE4 file — the read this connector exists for.
|
|
256
280
|
*
|
|
257
|
-
* **The response is
|
|
258
|
-
*
|
|
259
|
-
* account name, cost-centre label and verification
|
|
260
|
-
* ledger that looks like a working one.
|
|
261
|
-
*
|
|
281
|
+
* **The response is PC8 (code page 437), not UTF-8 and not latin1**, and nothing in
|
|
282
|
+
* the HTTP response says so — only the file's own `#FORMAT` post does. Decoding it
|
|
283
|
+
* wrong mangles every å/ä/ö in every account name, cost-centre label and verification
|
|
284
|
+
* text, which is a corrupted ledger that looks like a working one. Decoding as latin1
|
|
285
|
+
* does not even fail loudly: every byte is a valid latin1 code point, so it produces
|
|
286
|
+
* no replacement character and no throw. That is what shipped here until a live call
|
|
287
|
+
* disproved it. So the bytes are taken as an ArrayBuffer and handed to `decodeSie`,
|
|
288
|
+
* which owns the charset decision for the whole connector.
|
|
262
289
|
*/
|
|
263
290
|
async sieFile(financialYearId) {
|
|
264
291
|
const token = await this.accessToken();
|
|
@@ -270,7 +297,8 @@ export class FortnoxApi {
|
|
|
270
297
|
const body = await res.text();
|
|
271
298
|
throw new FortnoxApiError(`Fortnox SIE4 export failed: ${errorMessage(body, res.status)}`, res.status, body);
|
|
272
299
|
}
|
|
273
|
-
|
|
300
|
+
// PC8/CP437, not latin1 — see `decodeSie`. Fortnox declares it in `#FORMAT`.
|
|
301
|
+
return decodeSie(await res.arrayBuffer());
|
|
274
302
|
}
|
|
275
303
|
}
|
|
276
304
|
//# sourceMappingURL=api.js.map
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import type { FetchLike } from '@substrat-run/kernel';
|
|
2
|
+
import { type FortnoxCompany, type FortnoxSecret } from './api.js';
|
|
3
|
+
/**
|
|
4
|
+
* Complete a service consent: the one-time authorization-code round, packaged.
|
|
5
|
+
*
|
|
6
|
+
* This is the step between "a person clicked approve at Fortnox" and "a connection
|
|
7
|
+
* exists" — the exact sequence `scripts/connect.mts` runs locally, exported so a
|
|
8
|
+
* hosted connect flow (the dashboard's Connect button, #1220) is the same shipped
|
|
9
|
+
* code rather than a reimplementation:
|
|
10
|
+
*
|
|
11
|
+
* 1. Exchange the one-time `code` (`grant_type=authorization_code`). The ONLY place
|
|
12
|
+
* this flow is ever used; the tokens it yields are discarded after step 2.
|
|
13
|
+
* 2. Read `GET /3/companyinformation` — the consent's company, and its
|
|
14
|
+
* `DatabaseNumber`, which is the credential's `tenantId` and is shown nowhere
|
|
15
|
+
* else.
|
|
16
|
+
* 3. **Mint again with `client_credentials`** from the assembled triple. This is the
|
|
17
|
+
* connector's whole premise (a service consent mintable from static values, no
|
|
18
|
+
* refresh token), so it is proven here, at connect time, in the operator's hands —
|
|
19
|
+
* never first discovered by a background sweep.
|
|
20
|
+
*
|
|
21
|
+
* What comes back is the sealed-ready secret plus the company it names, so a connect
|
|
22
|
+
* flow can both store the credential and show a person WHICH company they just
|
|
23
|
+
* attached — the check that catches a consent granted while signed into the wrong
|
|
24
|
+
* company switcher entry.
|
|
25
|
+
*/
|
|
26
|
+
export interface FortnoxConsentCompletion {
|
|
27
|
+
secret: FortnoxSecret;
|
|
28
|
+
company: FortnoxCompany;
|
|
29
|
+
/** Visible to the client-credentials token — proof the mint reads real data. */
|
|
30
|
+
financialYears: number;
|
|
31
|
+
}
|
|
32
|
+
export declare function completeFortnoxConsent(input: {
|
|
33
|
+
clientId: string;
|
|
34
|
+
clientSecret: string;
|
|
35
|
+
/** The one-time `code` the consent redirect carried. */
|
|
36
|
+
code: string;
|
|
37
|
+
/** Must EXACTLY match the redirect URI registered in the Developer Portal. */
|
|
38
|
+
redirectUri: string;
|
|
39
|
+
fetch: FetchLike;
|
|
40
|
+
oauthBase?: string;
|
|
41
|
+
apiBase?: string;
|
|
42
|
+
now?: () => number;
|
|
43
|
+
}): Promise<FortnoxConsentCompletion>;
|
|
44
|
+
//# sourceMappingURL=connect.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAuB,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAOL,KAAK,cAAc,EACnB,KAAK,aAAa,EACnB,MAAM,UAAU,CAAC;AAOlB;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,WAAW,wBAAwB;IACvC,MAAM,EAAE,aAAa,CAAC;IACtB,OAAO,EAAE,cAAc,CAAC;IACxB,gFAAgF;IAChF,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,wBAAsB,sBAAsB,CAAC,KAAK,EAAE;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,8EAA8E;IAC9E,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,SAAS,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAmFpC"}
|
package/dist/connect.js
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { connectionId as connectionIdSchema } from '@substrat-run/contracts';
|
|
2
|
+
import { FortnoxApi, FortnoxApiError, FORTNOX_API_BASE, FORTNOX_OAUTH_BASE, fortnoxCompany, fortnoxSecret, } from './api.js';
|
|
3
|
+
export async function completeFortnoxConsent(input) {
|
|
4
|
+
const oauthBase = input.oauthBase ?? FORTNOX_OAUTH_BASE;
|
|
5
|
+
const apiBase = input.apiBase ?? FORTNOX_API_BASE;
|
|
6
|
+
// 1. The code exchange. Failures carry Fortnox's own words: `invalid_grant` here
|
|
7
|
+
// usually means the code was already spent (a reloaded callback tab) or the
|
|
8
|
+
// redirect URI differs from the registered one.
|
|
9
|
+
const tokenRes = await input.fetch(`${oauthBase}/token`, {
|
|
10
|
+
method: 'POST',
|
|
11
|
+
headers: {
|
|
12
|
+
Authorization: `Basic ${btoa(`${input.clientId}:${input.clientSecret}`)}`,
|
|
13
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
14
|
+
},
|
|
15
|
+
body: new URLSearchParams({
|
|
16
|
+
grant_type: 'authorization_code',
|
|
17
|
+
code: input.code,
|
|
18
|
+
redirect_uri: input.redirectUri,
|
|
19
|
+
}).toString(),
|
|
20
|
+
});
|
|
21
|
+
const tokenBody = await tokenRes.text();
|
|
22
|
+
if (!tokenRes.ok) {
|
|
23
|
+
throw new FortnoxApiError(`Fortnox code exchange failed: ${sliceError(tokenBody, tokenRes.status)}`, tokenRes.status, tokenBody);
|
|
24
|
+
}
|
|
25
|
+
let accessToken;
|
|
26
|
+
try {
|
|
27
|
+
accessToken = JSON.parse(tokenBody).access_token;
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
// fall through to the throw below — a non-JSON 200 is a broken exchange too.
|
|
31
|
+
}
|
|
32
|
+
if (!accessToken) {
|
|
33
|
+
throw new FortnoxApiError('no access_token in Fortnox code-exchange response', 502, tokenBody);
|
|
34
|
+
}
|
|
35
|
+
// 2. WHICH company consented — `DatabaseNumber` is the whole reason this read exists.
|
|
36
|
+
const infoRes = await input.fetch(`${apiBase}/companyinformation`, {
|
|
37
|
+
headers: { Authorization: `Bearer ${accessToken}`, Accept: 'application/json' },
|
|
38
|
+
});
|
|
39
|
+
const infoBody = await infoRes.text();
|
|
40
|
+
if (!infoRes.ok) {
|
|
41
|
+
throw new FortnoxApiError(`Fortnox companyinformation failed: ${sliceError(infoBody, infoRes.status)}`, infoRes.status, infoBody);
|
|
42
|
+
}
|
|
43
|
+
let company;
|
|
44
|
+
try {
|
|
45
|
+
const raw = JSON.parse(infoBody);
|
|
46
|
+
company = fortnoxCompany.parse(raw.CompanyInformation ?? raw);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
throw new FortnoxApiError('Fortnox companyinformation was not the documented shape', 502, infoBody);
|
|
50
|
+
}
|
|
51
|
+
if (company.DatabaseNumber === undefined) {
|
|
52
|
+
throw new FortnoxApiError('Fortnox companyinformation carried no DatabaseNumber — cannot key the connection', 502, infoBody);
|
|
53
|
+
}
|
|
54
|
+
// A header value, never arithmetic — and `fortnoxSecret` wants a digit-only string.
|
|
55
|
+
const secret = fortnoxSecret.parse({
|
|
56
|
+
clientId: input.clientId,
|
|
57
|
+
clientSecret: input.clientSecret,
|
|
58
|
+
tenantId: String(company.DatabaseNumber),
|
|
59
|
+
});
|
|
60
|
+
// 3. THE claim: the triple mints via client_credentials, with no refresh token in
|
|
61
|
+
// play. `financialYears` (the cheapest scoped read the sweep itself needs) proves the
|
|
62
|
+
// token reads real data — a mint that cannot read would connect a scope the first
|
|
63
|
+
// sweep then fails on.
|
|
64
|
+
const api = new FortnoxApi(bareConnection(secret, input.fetch), {
|
|
65
|
+
apiBase,
|
|
66
|
+
oauthBase,
|
|
67
|
+
...(input.now ? { now: input.now } : {}),
|
|
68
|
+
});
|
|
69
|
+
const years = await api.financialYears();
|
|
70
|
+
return { secret, company, financialYears: years.length };
|
|
71
|
+
}
|
|
72
|
+
/** A bare connection carrying a candidate secret — the same shape the probe builds. */
|
|
73
|
+
function bareConnection(secret, fetchImpl) {
|
|
74
|
+
return {
|
|
75
|
+
id: connectionIdSchema.parse('00000000000000000000000000'), // no row yet; never read
|
|
76
|
+
tenantId: '',
|
|
77
|
+
vertical: '',
|
|
78
|
+
provider: 'fortnox',
|
|
79
|
+
secret,
|
|
80
|
+
expiresAt: null,
|
|
81
|
+
fetch: fetchImpl,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/** The provider's own message where it sent one; the raw slice beats a bare status. */
|
|
85
|
+
function sliceError(body, status) {
|
|
86
|
+
try {
|
|
87
|
+
const parsed = JSON.parse(body);
|
|
88
|
+
const found = parsed.error_description ?? parsed.error;
|
|
89
|
+
if (typeof found === 'string' && found !== '')
|
|
90
|
+
return found;
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
// Not JSON — fall through.
|
|
94
|
+
}
|
|
95
|
+
const slice = body.trim().slice(0, 200);
|
|
96
|
+
return slice === '' ? `HTTP ${status}` : slice;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=connect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
|
-
import { type ConnectionActivity, type ConnectionProbe, type ConnectionId } from '@substrat-run/contracts';
|
|
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
4
|
export { FortnoxApi, FortnoxApiError, FORTNOX_API_BASE, FORTNOX_OAUTH_BASE, fortnoxConsentUrl, fortnoxSecret, type FortnoxCompany, type FortnoxFinancialYear, type FortnoxSecret, } 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
7
|
export { FortnoxMock, type FortnoxMockOptions } from './mock.js';
|
|
8
|
+
export { completeFortnoxConsent, type FortnoxConsentCompletion } from './connect.js';
|
|
8
9
|
/**
|
|
9
10
|
* The Fortnox connector — the INBOUND half of accounting integration.
|
|
10
11
|
*
|
|
@@ -257,4 +258,15 @@ export declare function probeFortnoxConnection(host: ScopeHost, connection: {
|
|
|
257
258
|
* answers it without spending a provider round trip.
|
|
258
259
|
*/
|
|
259
260
|
export declare function fortnoxConnectionActivity(host: ScopeHost, connectionId: ConnectionId): Promise<ConnectionActivity>;
|
|
261
|
+
/**
|
|
262
|
+
* The stored credential, REDUCED (#605) — identifiers whole, secrets masked.
|
|
263
|
+
*
|
|
264
|
+
* `tenantId` is deliberately unmasked: it is the company's DatabaseNumber — an
|
|
265
|
+
* identifier, not a secret — and it is the field an operator most needs to read when a
|
|
266
|
+
* connection syncs the wrong company's books.
|
|
267
|
+
*/
|
|
268
|
+
export declare function fortnoxCredentialSummary(host: ScopeHost, connection: {
|
|
269
|
+
tenantId: string;
|
|
270
|
+
vertical: string;
|
|
271
|
+
}): Promise<ConnectionCredential>;
|
|
260
272
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAOL,KAAK,kBAAkB,EACvB,KAAK,eAAe,EACpB,KAAK,YAAY,EAClB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAEV,SAAS,EAET,SAAS,EACV,MAAM,sBAAsB,CAAC;AAiB9B,OAAO,EACL,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,aAAa,GACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,SAAS,EACT,YAAY,EACZ,SAAS,EACT,OAAO,EACP,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,UAAU,GAChB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,KAAK,aAAa,EAClB,KAAK,aAAa,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAOL,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,eAAe,EACpB,KAAK,YAAY,EAClB,MAAM,yBAAyB,CAAC;AACjC,OAAO,KAAK,EAEV,SAAS,EAET,SAAS,EACV,MAAM,sBAAsB,CAAC;AAiB9B,OAAO,EACL,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,KAAK,cAAc,EACnB,KAAK,oBAAoB,EACzB,KAAK,aAAa,GACnB,MAAM,UAAU,CAAC;AAClB,OAAO,EACL,SAAS,EACT,YAAY,EACZ,SAAS,EACT,OAAO,EACP,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,SAAS,EACd,KAAK,cAAc,EACnB,KAAK,UAAU,GAChB,MAAM,WAAW,CAAC;AACnB,OAAO,EACL,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,KAAK,aAAa,EAClB,KAAK,aAAa,GACnB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,KAAK,wBAAwB,EAAE,MAAM,cAAc,CAAC;AAErF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,yBAAyB,aAAc,CAAC;AAMrD;;;;;;GAMG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;;;OAOG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,QAAQ,CAAC,EAAE;QACT,eAAe,EAAE,MAAM,CAAC;QACxB,QAAQ,EAAE,MAAM,CAAC;QACjB;;;;;WAKG;QACH,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC;CACH;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAiC5B,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAKlE,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,SAAS,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mEAAmE;IACnE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,SAAS,EACf,KAAK,EAAE;IACL,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB,GACA,OAAO,CAAC,cAAc,CAAC,CA8BzB;AAED,8CAA8C;AAC9C,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,SAAS,EACf,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,cAAc,EAAE,CAAC,CAS3B;AAED;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,SAAS,EACf,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,iCAAiC;AACjC,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,sFAAsF;IACtF,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,qEAAqE;IACrE,UAAU,EAAE,MAAM,CAAC;CACpB;AAOD;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,SAAS,EACf,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,uBAAuB,GAAG;IAAE,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAC3E,OAAO,CAAC,iBAAiB,CAAC,CA2H5B;AAED,iDAAiD;AACjD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC9C;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,SAAS,EACf,YAAY,EAAE,YAAY,EAC1B,OAAO,EAAE,uBAAuB,GAAG;IAAE,MAAM,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE,GAC3E,OAAO,CAAC,kBAAkB,CAAC,CAsB7B;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,eAAe,CAAC,CA4B1B;AAED,uFAAuF;AACvF,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,SAAS,EACf,UAAU,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,EAClD,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,eAAe,CAAC,CAS1B;AAmDD;;;;;;GAMG;AACH,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,SAAS,EACf,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,kBAAkB,CAAC,CAmC7B;AAED;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,SAAS,EACf,UAAU,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACjD,OAAO,CAAC,oBAAoB,CAAC,CAmB/B"}
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,7 @@ export { FortnoxApi, FortnoxApiError, FORTNOX_API_BASE, FORTNOX_OAUTH_BASE, fort
|
|
|
7
7
|
export { parseSie4, splitSieLine, sieAmount, sieDate, } from './sie4.js';
|
|
8
8
|
export { COST_CENTRE_DIMENSION, financialYearFor, summarizeLedger, } from './aggregate.js';
|
|
9
9
|
export { FortnoxMock } from './mock.js';
|
|
10
|
+
export { completeFortnoxConsent } from './connect.js';
|
|
10
11
|
/**
|
|
11
12
|
* The Fortnox connector — the INBOUND half of accounting integration.
|
|
12
13
|
*
|
|
@@ -449,6 +450,29 @@ export async function fortnoxConnectionActivity(host, connectionId) {
|
|
|
449
450
|
live: false,
|
|
450
451
|
});
|
|
451
452
|
}
|
|
453
|
+
/**
|
|
454
|
+
* The stored credential, REDUCED (#605) — identifiers whole, secrets masked.
|
|
455
|
+
*
|
|
456
|
+
* `tenantId` is deliberately unmasked: it is the company's DatabaseNumber — an
|
|
457
|
+
* identifier, not a secret — and it is the field an operator most needs to read when a
|
|
458
|
+
* connection syncs the wrong company's books.
|
|
459
|
+
*/
|
|
460
|
+
export async function fortnoxCredentialSummary(host, connection) {
|
|
461
|
+
const open = await host.admin.openConnection(tenantIdSchema.parse(connection.tenantId), connection.vertical, 'fortnox');
|
|
462
|
+
if (!open) {
|
|
463
|
+
throw new Error(`no live 'fortnox' connection for tenant ${connection.tenantId} / vertical '${connection.vertical}'`);
|
|
464
|
+
}
|
|
465
|
+
const secret = fortnoxSecret.parse(open.secret);
|
|
466
|
+
return {
|
|
467
|
+
fields: [
|
|
468
|
+
{ key: 'clientId', label: 'Client ID', value: secret.clientId, masked: false },
|
|
469
|
+
{ key: 'clientSecret', label: 'Client secret', value: maskSecret(secret.clientSecret), masked: true },
|
|
470
|
+
{ key: 'tenantId', label: 'Tenant ID (DatabaseNumber)', value: secret.tenantId, masked: false },
|
|
471
|
+
],
|
|
472
|
+
};
|
|
473
|
+
}
|
|
474
|
+
/** A bullet run plus the last four — or nothing at all when there is too little to hide behind. */
|
|
475
|
+
const maskSecret = (value) => value.length < 8 ? '••••••••' : `••••••••${value.slice(-4)}`;
|
|
452
476
|
/** Open the live Fortnox connection for a (tenant, vertical), with health recorded. */
|
|
453
477
|
async function openFortnoxConnection(admin, fetchImpl, tenant, vertical, timeoutMs) {
|
|
454
478
|
const parsedTenant = tenantIdSchema.parse(tenant);
|
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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"}
|