noxctl 0.7.4 → 0.8.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/README.md +39 -2
- package/dist/auth.d.ts +17 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +122 -15
- package/dist/auth.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +45 -28
- package/dist/cli.js.map +1 -1
- package/dist/credentials-store.d.ts +3 -0
- package/dist/credentials-store.d.ts.map +1 -1
- package/dist/credentials-store.js +54 -10
- package/dist/credentials-store.js.map +1 -1
- package/dist/embedded.d.ts +15 -0
- package/dist/embedded.d.ts.map +1 -0
- package/dist/embedded.js +11 -0
- package/dist/embedded.js.map +1 -0
- package/dist/fortnox-client.d.ts +34 -25
- package/dist/fortnox-client.d.ts.map +1 -1
- package/dist/fortnox-client.js +130 -50
- package/dist/fortnox-client.js.map +1 -1
- package/dist/index.d.ts +7 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +50 -35
- package/dist/index.js.map +1 -1
- package/dist/keychain-target.d.ts +3 -0
- package/dist/keychain-target.d.ts.map +1 -1
- package/dist/keychain-target.js +28 -7
- package/dist/keychain-target.js.map +1 -1
- package/dist/operations/absencetransactions.d.ts +9 -6
- package/dist/operations/absencetransactions.d.ts.map +1 -1
- package/dist/operations/absencetransactions.js +42 -33
- package/dist/operations/absencetransactions.js.map +1 -1
- package/dist/operations/accounts.d.ts +6 -3
- package/dist/operations/accounts.d.ts.map +1 -1
- package/dist/operations/accounts.js +28 -24
- package/dist/operations/accounts.js.map +1 -1
- package/dist/operations/analytics.d.ts +35 -0
- package/dist/operations/analytics.d.ts.map +1 -1
- package/dist/operations/analytics.js +59 -35
- package/dist/operations/analytics.js.map +1 -1
- package/dist/operations/articles.d.ts +9 -6
- package/dist/operations/articles.d.ts.map +1 -1
- package/dist/operations/articles.js +36 -32
- package/dist/operations/articles.js.map +1 -1
- package/dist/operations/attendancetransactions.d.ts +9 -6
- package/dist/operations/attendancetransactions.d.ts.map +1 -1
- package/dist/operations/attendancetransactions.js +45 -36
- package/dist/operations/attendancetransactions.js.map +1 -1
- package/dist/operations/company.d.ts +5 -1
- package/dist/operations/company.d.ts.map +1 -1
- package/dist/operations/company.js +8 -4
- package/dist/operations/company.js.map +1 -1
- package/dist/operations/contracts.d.ts +12 -9
- package/dist/operations/contracts.d.ts.map +1 -1
- package/dist/operations/contracts.js +59 -47
- package/dist/operations/contracts.js.map +1 -1
- package/dist/operations/costcenters.d.ts +10 -7
- package/dist/operations/costcenters.d.ts.map +1 -1
- package/dist/operations/costcenters.js +39 -35
- package/dist/operations/costcenters.js.map +1 -1
- package/dist/operations/customers.d.ts +9 -6
- package/dist/operations/customers.d.ts.map +1 -1
- package/dist/operations/customers.js +46 -42
- package/dist/operations/customers.js.map +1 -1
- package/dist/operations/employees.d.ts +9 -6
- package/dist/operations/employees.d.ts.map +1 -1
- package/dist/operations/employees.js +35 -31
- package/dist/operations/employees.js.map +1 -1
- package/dist/operations/financial-reports.d.ts +7 -2
- package/dist/operations/financial-reports.d.ts.map +1 -1
- package/dist/operations/financial-reports.js +169 -165
- package/dist/operations/financial-reports.js.map +1 -1
- package/dist/operations/financial-years.d.ts +8 -5
- package/dist/operations/financial-years.d.ts.map +1 -1
- package/dist/operations/financial-years.js +33 -29
- package/dist/operations/financial-years.js.map +1 -1
- package/dist/operations/index.d.ts +301 -0
- package/dist/operations/index.d.ts.map +1 -0
- package/dist/operations/index.js +64 -0
- package/dist/operations/index.js.map +1 -0
- package/dist/operations/invoice-payments.d.ts +10 -7
- package/dist/operations/invoice-payments.d.ts.map +1 -1
- package/dist/operations/invoice-payments.js +45 -35
- package/dist/operations/invoice-payments.js.map +1 -1
- package/dist/operations/invoices.d.ts +14 -30
- package/dist/operations/invoices.d.ts.map +1 -1
- package/dist/operations/invoices.js +131 -113
- package/dist/operations/invoices.js.map +1 -1
- package/dist/operations/offers.d.ts +11 -8
- package/dist/operations/offers.d.ts.map +1 -1
- package/dist/operations/offers.js +54 -43
- package/dist/operations/offers.js.map +1 -1
- package/dist/operations/orders.d.ts +10 -7
- package/dist/operations/orders.d.ts.map +1 -1
- package/dist/operations/orders.js +43 -39
- package/dist/operations/orders.js.map +1 -1
- package/dist/operations/pricelists.d.ts +16 -10
- package/dist/operations/pricelists.d.ts.map +1 -1
- package/dist/operations/pricelists.js +56 -48
- package/dist/operations/pricelists.js.map +1 -1
- package/dist/operations/projects.d.ts +9 -6
- package/dist/operations/projects.d.ts.map +1 -1
- package/dist/operations/projects.js +34 -30
- package/dist/operations/projects.js.map +1 -1
- package/dist/operations/recurrings.d.ts +14 -10
- package/dist/operations/recurrings.d.ts.map +1 -1
- package/dist/operations/recurrings.js +74 -59
- package/dist/operations/recurrings.js.map +1 -1
- package/dist/operations/salarytransactions.d.ts +9 -6
- package/dist/operations/salarytransactions.d.ts.map +1 -1
- package/dist/operations/salarytransactions.js +41 -32
- package/dist/operations/salarytransactions.js.map +1 -1
- package/dist/operations/scheduletimes.d.ts +7 -3
- package/dist/operations/scheduletimes.d.ts.map +1 -1
- package/dist/operations/scheduletimes.js +26 -22
- package/dist/operations/scheduletimes.js.map +1 -1
- package/dist/operations/supplier-invoice-payments.d.ts +9 -6
- package/dist/operations/supplier-invoice-payments.d.ts.map +1 -1
- package/dist/operations/supplier-invoice-payments.js +38 -29
- package/dist/operations/supplier-invoice-payments.js.map +1 -1
- package/dist/operations/supplier-invoices.d.ts +9 -6
- package/dist/operations/supplier-invoices.d.ts.map +1 -1
- package/dist/operations/supplier-invoices.js +41 -32
- package/dist/operations/supplier-invoices.js.map +1 -1
- package/dist/operations/suppliers.d.ts +9 -6
- package/dist/operations/suppliers.d.ts.map +1 -1
- package/dist/operations/suppliers.js +36 -32
- package/dist/operations/suppliers.js.map +1 -1
- package/dist/operations/tax.d.ts +5 -1
- package/dist/operations/tax.d.ts.map +1 -1
- package/dist/operations/tax.js +43 -39
- package/dist/operations/tax.js.map +1 -1
- package/dist/operations/taxreductions.d.ts +8 -5
- package/dist/operations/taxreductions.d.ts.map +1 -1
- package/dist/operations/taxreductions.js +28 -24
- package/dist/operations/taxreductions.js.map +1 -1
- package/dist/operations/vouchers.d.ts +11 -8
- package/dist/operations/vouchers.d.ts.map +1 -1
- package/dist/operations/vouchers.js +137 -122
- package/dist/operations/vouchers.js.map +1 -1
- package/dist/schema-audit-mappings.d.ts +9 -0
- package/dist/schema-audit-mappings.d.ts.map +1 -0
- package/dist/schema-audit-mappings.js +45 -0
- package/dist/schema-audit-mappings.js.map +1 -0
- package/dist/schema-audit.d.ts +45 -0
- package/dist/schema-audit.d.ts.map +1 -0
- package/dist/schema-audit.js +132 -0
- package/dist/schema-audit.js.map +1 -0
- package/dist/strict-mcp-server.d.ts +17 -0
- package/dist/strict-mcp-server.d.ts.map +1 -0
- package/dist/strict-mcp-server.js +35 -0
- package/dist/strict-mcp-server.js.map +1 -0
- package/dist/tools/absencetransactions.d.ts +2 -1
- package/dist/tools/absencetransactions.d.ts.map +1 -1
- package/dist/tools/absencetransactions.js +3 -2
- package/dist/tools/absencetransactions.js.map +1 -1
- package/dist/tools/analytics.d.ts +2 -1
- package/dist/tools/analytics.d.ts.map +1 -1
- package/dist/tools/analytics.js +3 -2
- package/dist/tools/analytics.js.map +1 -1
- package/dist/tools/articles.d.ts +2 -1
- package/dist/tools/articles.d.ts.map +1 -1
- package/dist/tools/articles.js +3 -2
- package/dist/tools/articles.js.map +1 -1
- package/dist/tools/attendancetransactions.d.ts +2 -1
- package/dist/tools/attendancetransactions.d.ts.map +1 -1
- package/dist/tools/attendancetransactions.js +3 -2
- package/dist/tools/attendancetransactions.js.map +1 -1
- package/dist/tools/bookkeeping.d.ts +2 -1
- package/dist/tools/bookkeeping.d.ts.map +1 -1
- package/dist/tools/bookkeeping.js +4 -4
- package/dist/tools/bookkeeping.js.map +1 -1
- package/dist/tools/company.d.ts +2 -1
- package/dist/tools/company.d.ts.map +1 -1
- package/dist/tools/company.js +3 -2
- package/dist/tools/company.js.map +1 -1
- package/dist/tools/contracts.d.ts +2 -1
- package/dist/tools/contracts.d.ts.map +1 -1
- package/dist/tools/contracts.js +3 -2
- package/dist/tools/contracts.js.map +1 -1
- package/dist/tools/costcenters.d.ts +2 -1
- package/dist/tools/costcenters.d.ts.map +1 -1
- package/dist/tools/costcenters.js +3 -2
- package/dist/tools/costcenters.js.map +1 -1
- package/dist/tools/customers.d.ts +2 -1
- package/dist/tools/customers.d.ts.map +1 -1
- package/dist/tools/customers.js +3 -2
- package/dist/tools/customers.js.map +1 -1
- package/dist/tools/employees.d.ts +2 -1
- package/dist/tools/employees.d.ts.map +1 -1
- package/dist/tools/employees.js +3 -2
- package/dist/tools/employees.js.map +1 -1
- package/dist/tools/financial-reports.d.ts +2 -1
- package/dist/tools/financial-reports.d.ts.map +1 -1
- package/dist/tools/financial-reports.js +3 -2
- package/dist/tools/financial-reports.js.map +1 -1
- package/dist/tools/financial-years.d.ts +2 -1
- package/dist/tools/financial-years.d.ts.map +1 -1
- package/dist/tools/financial-years.js +3 -2
- package/dist/tools/financial-years.js.map +1 -1
- package/dist/tools/invoice-payments.d.ts +2 -1
- package/dist/tools/invoice-payments.d.ts.map +1 -1
- package/dist/tools/invoice-payments.js +3 -2
- package/dist/tools/invoice-payments.js.map +1 -1
- package/dist/tools/invoices.d.ts +2 -1
- package/dist/tools/invoices.d.ts.map +1 -1
- package/dist/tools/invoices.js +58 -19
- package/dist/tools/invoices.js.map +1 -1
- package/dist/tools/offers.d.ts +2 -1
- package/dist/tools/offers.d.ts.map +1 -1
- package/dist/tools/offers.js +50 -19
- package/dist/tools/offers.js.map +1 -1
- package/dist/tools/orders.d.ts +2 -1
- package/dist/tools/orders.d.ts.map +1 -1
- package/dist/tools/orders.js +58 -18
- package/dist/tools/orders.js.map +1 -1
- package/dist/tools/pricelists.d.ts +2 -1
- package/dist/tools/pricelists.d.ts.map +1 -1
- package/dist/tools/pricelists.js +3 -2
- package/dist/tools/pricelists.js.map +1 -1
- package/dist/tools/projects.d.ts +2 -1
- package/dist/tools/projects.d.ts.map +1 -1
- package/dist/tools/projects.js +3 -2
- package/dist/tools/projects.js.map +1 -1
- package/dist/tools/recurrings.d.ts +2 -1
- package/dist/tools/recurrings.d.ts.map +1 -1
- package/dist/tools/recurrings.js +3 -2
- package/dist/tools/recurrings.js.map +1 -1
- package/dist/tools/salarytransactions.d.ts +2 -1
- package/dist/tools/salarytransactions.d.ts.map +1 -1
- package/dist/tools/salarytransactions.js +3 -2
- package/dist/tools/salarytransactions.js.map +1 -1
- package/dist/tools/scheduletimes.d.ts +2 -1
- package/dist/tools/scheduletimes.d.ts.map +1 -1
- package/dist/tools/scheduletimes.js +3 -2
- package/dist/tools/scheduletimes.js.map +1 -1
- package/dist/tools/status.d.ts.map +1 -1
- package/dist/tools/status.js +5 -4
- package/dist/tools/status.js.map +1 -1
- package/dist/tools/supplier-invoice-payments.d.ts +2 -1
- package/dist/tools/supplier-invoice-payments.d.ts.map +1 -1
- package/dist/tools/supplier-invoice-payments.js +3 -2
- package/dist/tools/supplier-invoice-payments.js.map +1 -1
- package/dist/tools/supplier-invoices.d.ts +2 -1
- package/dist/tools/supplier-invoices.d.ts.map +1 -1
- package/dist/tools/supplier-invoices.js +47 -6
- package/dist/tools/supplier-invoices.js.map +1 -1
- package/dist/tools/suppliers.d.ts +2 -1
- package/dist/tools/suppliers.d.ts.map +1 -1
- package/dist/tools/suppliers.js +3 -2
- package/dist/tools/suppliers.js.map +1 -1
- package/dist/tools/tax.d.ts +2 -1
- package/dist/tools/tax.d.ts.map +1 -1
- package/dist/tools/tax.js +3 -2
- package/dist/tools/tax.js.map +1 -1
- package/dist/tools/taxreductions.d.ts +2 -1
- package/dist/tools/taxreductions.d.ts.map +1 -1
- package/dist/tools/taxreductions.js +3 -2
- package/dist/tools/taxreductions.js.map +1 -1
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +3 -0
- package/dist/version.js.map +1 -0
- package/docs/embedded.md +60 -0
- package/package.json +23 -4
package/README.md
CHANGED
|
@@ -54,7 +54,8 @@ Prefer not to install globally? Skip the install command and run CLI commands as
|
|
|
54
54
|
|
|
55
55
|
**Documentation:** [full setup](#setup) · [profiles](#profiles-multi-tenant) ·
|
|
56
56
|
[commands and MCP tools](#tools) · [mutation safety](#mutation-safety) ·
|
|
57
|
-
[
|
|
57
|
+
[embedded runtimes](docs/embedded.md) · [troubleshooting](#troubleshooting) ·
|
|
58
|
+
[contributing](CONTRIBUTING.md)
|
|
58
59
|
|
|
59
60
|
## Setup
|
|
60
61
|
|
|
@@ -219,12 +220,41 @@ claude mcp add fortnox-prod -- npx noxctl serve
|
|
|
219
220
|
claude mcp add fortnox-staging -e NOXCTL_PROFILE=staging -- npx noxctl serve
|
|
220
221
|
```
|
|
221
222
|
|
|
223
|
+
### Embedded and hosted runtimes
|
|
224
|
+
|
|
225
|
+
Applications that supply their own authenticated Fortnox tenant context can use the supported `noxctl/embedded` package entry point. It provides an isolated client, typed operation set, and MCP server factory without exporting the local profile, keychain, or CLI startup APIs. See the [embedded runtime API and host responsibility boundary](docs/embedded.md).
|
|
226
|
+
|
|
222
227
|
Non-default sessions print a `[profile: <name>]` stderr banner on startup and prefix every Fortnox API error and token-refresh failure with the same tag so mis-bound sessions are diagnosable from a single error line.
|
|
223
228
|
|
|
224
229
|
### Fail-closed pointer semantics
|
|
225
230
|
|
|
226
231
|
If the active pointer becomes unreadable or corrupt and no explicit `--profile` flag or `NOXCTL_PROFILE` is set, `noxctl serve` **refuses to start** rather than silently falling back to `default`. This prevents a corrupted pointer from routing production MCP sessions to the wrong tenant. The CLI's `doctor` and `profile use` commands are exempt — they can still run against a broken pointer so you can repair it.
|
|
227
232
|
|
|
233
|
+
### Credential recovery from sandboxes and automation
|
|
234
|
+
|
|
235
|
+
Credential diagnostics use the same four states in `doctor`, `keychain status`,
|
|
236
|
+
and MCP status: `available`, `missing`, `locked`, and `inaccessible`. Only
|
|
237
|
+
`missing` means no registered profile or credential was found. `inaccessible`
|
|
238
|
+
means noxctl cannot safely determine whether credentials exist in the current
|
|
239
|
+
execution context; it will not recommend or start OAuth replacement from that
|
|
240
|
+
state.
|
|
241
|
+
|
|
242
|
+
Use this recovery flow when a sandboxed agent and your terminal disagree:
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
# Run these in a normal, unsandboxed terminal.
|
|
246
|
+
noxctl keychain status
|
|
247
|
+
noxctl keychain unlock # only when the dedicated keychain is locked
|
|
248
|
+
noxctl --profile <name> doctor
|
|
249
|
+
noxctl --profile <name> company info
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
Do not re-run `noxctl init` while the state is `locked` or `inaccessible`.
|
|
253
|
+
Resolve access first, then retry with an explicit profile. An MCP server is
|
|
254
|
+
pinned to the profile selected when that process starts; changing the active
|
|
255
|
+
pointer does not retarget it. Restart the MCP server after correcting profile
|
|
256
|
+
selection or unlocking credentials.
|
|
257
|
+
|
|
228
258
|
## YubiKey-locked keychain (macOS)
|
|
229
259
|
|
|
230
260
|
By default, credentials live in your macOS **login keychain**, which unlocks automatically when you log in. That's convenient, but it means an AI agent (or anything running as you) can read the tokens without a per-session gesture from you.
|
|
@@ -603,7 +633,12 @@ Once authorized, the tokens are stored in the OS keychain. No env vars are neede
|
|
|
603
633
|
|
|
604
634
|
**"Not authenticated. Run `noxctl init`"**
|
|
605
635
|
|
|
606
|
-
|
|
636
|
+
This message is emitted only when the credential state is `missing`. Re-run the
|
|
637
|
+
setup step. If the message instead says `locked` or `inaccessible`, do not
|
|
638
|
+
replace the credentials: follow the
|
|
639
|
+
[sandbox/automation recovery flow](#credential-recovery-from-sandboxes-and-automation).
|
|
640
|
+
On Linux, an inaccessible store can also mean that `secret-tool` is unavailable
|
|
641
|
+
(`sudo apt install libsecret-tools`).
|
|
607
642
|
|
|
608
643
|
**403 Forbidden from Fortnox API**
|
|
609
644
|
|
|
@@ -626,6 +661,8 @@ npm test # run tests
|
|
|
626
661
|
npm run test:watch # watch mode
|
|
627
662
|
npm run lint # ESLint with typescript-eslint
|
|
628
663
|
npm run format # format
|
|
664
|
+
npm run check:api # refresh the git-ignored OpenAPI cache and detect API drift
|
|
665
|
+
npm run audit:schemas # compare selected MCP write schemas with the local cache
|
|
629
666
|
```
|
|
630
667
|
|
|
631
668
|
## Architecture
|
package/dist/auth.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ProfileSource } from './profiles.js';
|
|
1
2
|
export declare const SCOPES = "article customer invoice payment supplier supplierinvoice bookkeeping companyinformation settings project costcenter price inbox connectfile";
|
|
2
3
|
export declare const ORDER_SCOPES = "offer order";
|
|
3
4
|
export declare const LEGACY_SCOPES = "article customer invoice payment supplier supplierinvoice bookkeeping companyinformation settings inbox connectfile";
|
|
@@ -26,9 +27,24 @@ export interface FortnoxAppConfig {
|
|
|
26
27
|
clientSecret: string;
|
|
27
28
|
serviceAccount?: boolean;
|
|
28
29
|
}
|
|
29
|
-
export declare function setResolvedProfile(name: string): void;
|
|
30
|
+
export declare function setResolvedProfile(name: string, source?: ProfileSource): void;
|
|
30
31
|
export declare function getResolvedProfile(): string;
|
|
32
|
+
export declare function getResolvedProfileSource(): ProfileSource;
|
|
31
33
|
export declare function __resetLegacyObservedForDefault(): void;
|
|
34
|
+
export type CredentialState = 'available' | 'missing' | 'locked' | 'inaccessible';
|
|
35
|
+
export interface CredentialInspection {
|
|
36
|
+
state: CredentialState;
|
|
37
|
+
profile: string;
|
|
38
|
+
source: ProfileSource | 'explicit';
|
|
39
|
+
credentials: FortnoxCredentials | null;
|
|
40
|
+
detail: string;
|
|
41
|
+
}
|
|
42
|
+
export declare class CredentialAccessError extends Error {
|
|
43
|
+
readonly profile: string;
|
|
44
|
+
readonly source: ProfileSource | 'explicit';
|
|
45
|
+
constructor(profile: string, source: ProfileSource | 'explicit', message: string);
|
|
46
|
+
}
|
|
47
|
+
export declare function inspectCredentials(profile?: string): Promise<CredentialInspection>;
|
|
32
48
|
export declare function loadCredentials(profile?: string): Promise<FortnoxCredentials | null>;
|
|
33
49
|
export declare function saveCredentials(creds: FortnoxCredentials, profile?: string): Promise<void>;
|
|
34
50
|
export declare function exchangeCodeForTokens(code: string, redirectUri: string, config: FortnoxAppConfig): Promise<{
|
package/dist/auth.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/auth.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { createServer } from 'node:http';
|
|
2
2
|
import { randomBytes } from 'node:crypto';
|
|
3
3
|
import { execFileSync } from 'node:child_process';
|
|
4
|
-
import { loadCredentialBlob, saveCredentialBlob } from './credentials-store.js';
|
|
4
|
+
import { CredentialStoreAccessError, loadCredentialBlob, saveCredentialBlob, } from './credentials-store.js';
|
|
5
5
|
import { KeychainLockedError } from './keychain-target.js';
|
|
6
6
|
import { DEFAULT_PROFILE, validateProfileName } from './profile-name.js';
|
|
7
|
-
import { migrateLegacyIfNeeded, readProfileIndex, upsertProfile } from './profiles.js';
|
|
7
|
+
import { migrateLegacyIfNeeded, readProfileIndex, upsertProfile, } from './profiles.js';
|
|
8
8
|
const FORTNOX_AUTH_URL = 'https://apps.fortnox.se/oauth-v1/auth';
|
|
9
9
|
const FORTNOX_TOKEN_URL = 'https://apps.fortnox.se/oauth-v1/token';
|
|
10
10
|
const CALLBACK_HOST = '127.0.0.1';
|
|
@@ -66,6 +66,7 @@ export const CREDENTIAL_SCHEMA_VERSION = 2;
|
|
|
66
66
|
// instance would share this state. Revisit if the MCP SDK grows request-local
|
|
67
67
|
// context that handlers can read.
|
|
68
68
|
let resolvedProfile = DEFAULT_PROFILE;
|
|
69
|
+
let resolvedProfileSource = 'default';
|
|
69
70
|
// Token endpoints may rotate refresh tokens, so concurrent requests for the
|
|
70
71
|
// same profile must share one refresh and one credential-store write. Profile
|
|
71
72
|
// names are case-insensitive throughout the storage layer.
|
|
@@ -74,12 +75,16 @@ const tokenRefreshes = new Map();
|
|
|
74
75
|
// successful load of the default profile. Set only by loadCredentials; read by
|
|
75
76
|
// saveCredentials to decide whether to dual-write during the 0.2.x window.
|
|
76
77
|
let legacyObservedForDefault = false;
|
|
77
|
-
export function setResolvedProfile(name) {
|
|
78
|
+
export function setResolvedProfile(name, source = 'default') {
|
|
78
79
|
resolvedProfile = validateProfileName(name);
|
|
80
|
+
resolvedProfileSource = source;
|
|
79
81
|
}
|
|
80
82
|
export function getResolvedProfile() {
|
|
81
83
|
return resolvedProfile;
|
|
82
84
|
}
|
|
85
|
+
export function getResolvedProfileSource() {
|
|
86
|
+
return resolvedProfileSource;
|
|
87
|
+
}
|
|
83
88
|
// Test-only: reset module-level observation state between cases.
|
|
84
89
|
export function __resetLegacyObservedForDefault() {
|
|
85
90
|
legacyObservedForDefault = false;
|
|
@@ -87,6 +92,30 @@ export function __resetLegacyObservedForDefault() {
|
|
|
87
92
|
function profileOrResolved(profile) {
|
|
88
93
|
return profile ?? resolvedProfile;
|
|
89
94
|
}
|
|
95
|
+
function sourceForProfile(profile) {
|
|
96
|
+
return profile.toLowerCase() === resolvedProfile.toLowerCase()
|
|
97
|
+
? resolvedProfileSource
|
|
98
|
+
: 'explicit';
|
|
99
|
+
}
|
|
100
|
+
function credentialContext(profile) {
|
|
101
|
+
return `profile "${profile}" (source: ${sourceForProfile(profile)})`;
|
|
102
|
+
}
|
|
103
|
+
function inaccessibleRecovery(profile) {
|
|
104
|
+
return (`Run \`noxctl keychain status\` and, if needed, \`noxctl keychain unlock\` in an ` +
|
|
105
|
+
`unsandboxed terminal, then retry with \`--profile ${profile}\`. An already-running MCP ` +
|
|
106
|
+
`server remains pinned to the profile selected at startup; changing the active profile ` +
|
|
107
|
+
`pointer will not retarget it, so restart that MCP process after correcting the profile.`);
|
|
108
|
+
}
|
|
109
|
+
export class CredentialAccessError extends Error {
|
|
110
|
+
profile;
|
|
111
|
+
source;
|
|
112
|
+
constructor(profile, source, message) {
|
|
113
|
+
super(message);
|
|
114
|
+
this.profile = profile;
|
|
115
|
+
this.source = source;
|
|
116
|
+
this.name = 'CredentialAccessError';
|
|
117
|
+
}
|
|
118
|
+
}
|
|
90
119
|
function isDefaultProfile(name) {
|
|
91
120
|
return name.toLowerCase() === DEFAULT_PROFILE;
|
|
92
121
|
}
|
|
@@ -99,18 +128,31 @@ function legacySlotExists(source) {
|
|
|
99
128
|
source === 'both-legacy-preferred' ||
|
|
100
129
|
source === 'legacy-plaintext');
|
|
101
130
|
}
|
|
102
|
-
export async function
|
|
131
|
+
export async function inspectCredentials(profile) {
|
|
103
132
|
const target = profileOrResolved(profile);
|
|
133
|
+
const source = sourceForProfile(target);
|
|
104
134
|
let result;
|
|
105
135
|
try {
|
|
106
136
|
result = await loadCredentialBlob(target);
|
|
107
137
|
}
|
|
108
138
|
catch (err) {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
139
|
+
if (err instanceof KeychainLockedError) {
|
|
140
|
+
return {
|
|
141
|
+
state: 'locked',
|
|
142
|
+
profile: target,
|
|
143
|
+
source,
|
|
144
|
+
credentials: null,
|
|
145
|
+
detail: `Credential state: locked for ${credentialContext(target)} — ${err.message}`,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
const reason = err instanceof CredentialStoreAccessError || err instanceof Error ? err.message : String(err);
|
|
149
|
+
return {
|
|
150
|
+
state: 'inaccessible',
|
|
151
|
+
profile: target,
|
|
152
|
+
source,
|
|
153
|
+
credentials: null,
|
|
154
|
+
detail: `Credential state: inaccessible for ${credentialContext(target)} — ${reason}. ${inaccessibleRecovery(target)}`,
|
|
155
|
+
};
|
|
114
156
|
}
|
|
115
157
|
if (isDefaultProfile(target) && legacySlotExists(result.source)) {
|
|
116
158
|
legacyObservedForDefault = true;
|
|
@@ -118,17 +160,82 @@ export async function loadCredentials(profile) {
|
|
|
118
160
|
// the raw legacy blob — not result.blob, which may be the new slot if
|
|
119
161
|
// pickHigher preferred it and would lose legacy-only metadata on drift.
|
|
120
162
|
// A failure here must not break auth — Chunk D's `doctor` will surface it.
|
|
121
|
-
|
|
163
|
+
try {
|
|
164
|
+
await migrateLegacyIfNeeded(result.legacyBlob);
|
|
165
|
+
}
|
|
166
|
+
catch (err) {
|
|
167
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
168
|
+
return {
|
|
169
|
+
state: 'inaccessible',
|
|
170
|
+
profile: target,
|
|
171
|
+
source,
|
|
172
|
+
credentials: null,
|
|
173
|
+
detail: `Credential state: inaccessible for ${credentialContext(target)} — legacy profile metadata could not be inspected (${reason}). ${inaccessibleRecovery(target)}`,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
if (!result.blob) {
|
|
178
|
+
let registered = false;
|
|
179
|
+
try {
|
|
180
|
+
const index = await readProfileIndex();
|
|
181
|
+
registered = index.profiles.some((entry) => entry.name.toLowerCase() === target.toLowerCase());
|
|
182
|
+
}
|
|
183
|
+
catch (err) {
|
|
184
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
185
|
+
return {
|
|
186
|
+
state: 'inaccessible',
|
|
187
|
+
profile: target,
|
|
188
|
+
source,
|
|
189
|
+
credentials: null,
|
|
190
|
+
detail: `Credential state: inaccessible for ${credentialContext(target)} — the profile index could not be read (${reason}). ${inaccessibleRecovery(target)}`,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
if (registered) {
|
|
194
|
+
return {
|
|
195
|
+
state: 'inaccessible',
|
|
196
|
+
profile: target,
|
|
197
|
+
source,
|
|
198
|
+
credentials: null,
|
|
199
|
+
detail: `Credential state: inaccessible for ${credentialContext(target)} — the registered profile exists, but credential lookup returned no item in this execution context. ${inaccessibleRecovery(target)}`,
|
|
200
|
+
};
|
|
201
|
+
}
|
|
202
|
+
return {
|
|
203
|
+
state: 'missing',
|
|
204
|
+
profile: target,
|
|
205
|
+
source,
|
|
206
|
+
credentials: null,
|
|
207
|
+
detail: `Credential state: missing for ${credentialContext(target)}. Run ${isDefaultProfile(target) ? '`noxctl init`' : `\`noxctl init --profile ${target}\``} to connect your Fortnox account.`,
|
|
208
|
+
};
|
|
122
209
|
}
|
|
123
|
-
if (!result.blob)
|
|
124
|
-
return null;
|
|
125
210
|
try {
|
|
126
|
-
return
|
|
211
|
+
return {
|
|
212
|
+
state: 'available',
|
|
213
|
+
profile: target,
|
|
214
|
+
source,
|
|
215
|
+
credentials: JSON.parse(result.blob),
|
|
216
|
+
detail: `Credential state: available for ${credentialContext(target)}`,
|
|
217
|
+
};
|
|
127
218
|
}
|
|
128
219
|
catch {
|
|
129
|
-
return
|
|
220
|
+
return {
|
|
221
|
+
state: 'inaccessible',
|
|
222
|
+
profile: target,
|
|
223
|
+
source,
|
|
224
|
+
credentials: null,
|
|
225
|
+
detail: `Credential state: inaccessible for ${credentialContext(target)} — the stored credential blob could not be parsed. ${inaccessibleRecovery(target)}`,
|
|
226
|
+
};
|
|
130
227
|
}
|
|
131
228
|
}
|
|
229
|
+
export async function loadCredentials(profile) {
|
|
230
|
+
const inspected = await inspectCredentials(profile);
|
|
231
|
+
if (inspected.state === 'available')
|
|
232
|
+
return inspected.credentials;
|
|
233
|
+
if (inspected.state === 'missing')
|
|
234
|
+
return null;
|
|
235
|
+
if (inspected.state === 'locked')
|
|
236
|
+
throw new KeychainLockedError(inspected.detail);
|
|
237
|
+
throw new CredentialAccessError(inspected.profile, inspected.source, inspected.detail);
|
|
238
|
+
}
|
|
132
239
|
export async function saveCredentials(creds, profile) {
|
|
133
240
|
const target = profileOrResolved(profile);
|
|
134
241
|
const stamped = {
|
|
@@ -226,7 +333,7 @@ export async function getValidToken(profile) {
|
|
|
226
333
|
const initCmd = isDefaultProfile(target)
|
|
227
334
|
? '`noxctl init`'
|
|
228
335
|
: `\`noxctl init --profile ${target}\``;
|
|
229
|
-
throw new Error(
|
|
336
|
+
throw new Error(`[profile: ${target}, source: ${sourceForProfile(target)}] Not authenticated. Run ${initCmd} to connect your Fortnox account.`);
|
|
230
337
|
}
|
|
231
338
|
// Token still valid — use it
|
|
232
339
|
if (Date.now() <= creds.expires_at - 5 * 60 * 1000) {
|
package/dist/auth.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../src/auth.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAcA,OAAO,EAOL,KAAK,eAAe,EACrB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAcA,OAAO,EAOL,KAAK,eAAe,EACrB,MAAM,eAAe,CAAC;AAwIvB,wBAAgB,sBAAsB,IAAI,eAAe,CAExD"}
|
package/dist/cli.js
CHANGED
|
@@ -7,6 +7,7 @@ import { readActivePointer, readActivePointerOutcome, writeActivePointer, delete
|
|
|
7
7
|
import { setResolvedProfile } from './auth.js';
|
|
8
8
|
import { applyPeriod } from './date-periods.js';
|
|
9
9
|
import { DEFAULT_PROFILE, InvalidProfileNameError } from './profile-name.js';
|
|
10
|
+
import { VERSION } from './version.js';
|
|
10
11
|
import { invoiceListColumns, invoiceDetailColumns, invoiceConfirmColumns, customerListColumns, customerDetailColumns, voucherListColumns, voucherDetailColumns, voucherRowColumns, accountListColumns, companyDetailColumns, articleListColumns, articleDetailColumns, supplierListColumns, supplierDetailColumns, supplierInvoiceListColumns, supplierInvoiceDetailColumns, supplierInvoiceConfirmColumns, invoicePaymentListColumns, invoicePaymentDetailColumns, supplierInvoicePaymentListColumns, supplierInvoicePaymentDetailColumns, offerListColumns, offerDetailColumns, orderListColumns, orderDetailColumns, projectListColumns, projectDetailColumns, costCenterListColumns, costCenterDetailColumns, taxReductionListColumns, taxReductionDetailColumns, priceListListColumns, priceListDetailColumns, priceListColumns, priceDetailColumns, financialYearListColumns, financialYearDetailColumns, lockedPeriodDetailColumns, contractListColumns, contractDetailColumns, recurringListColumns, recurringDetailColumns, invoiceRequestListColumns, invoiceRequestDetailColumns, topCustomerColumns, monthlyRevenueColumns, voucherAttachmentColumns, employeeListColumns, employeeDetailColumns, salaryTransactionListColumns, salaryTransactionDetailColumns, attendanceTransactionListColumns, attendanceTransactionDetailColumns, absenceTransactionListColumns, absenceTransactionDetailColumns, scheduleTimeDetailColumns, } from './views.js';
|
|
11
12
|
const program = new Command();
|
|
12
13
|
// A closed downstream pipe (`noxctl ... | head`, or a reader that exits early)
|
|
@@ -22,7 +23,7 @@ process.stdout.on('error', (err) => {
|
|
|
22
23
|
program
|
|
23
24
|
.name('noxctl')
|
|
24
25
|
.description('CLI and MCP server for Fortnox accounting')
|
|
25
|
-
.version(
|
|
26
|
+
.version(VERSION)
|
|
26
27
|
.addOption(new Option('-o, --output <format>', 'Output format (default: table on TTY, json when piped)')
|
|
27
28
|
.choices(['json', 'table'])
|
|
28
29
|
.default(undefined))
|
|
@@ -105,7 +106,7 @@ program.hook('preAction', async (thisCommand, actionCommand) => {
|
|
|
105
106
|
}
|
|
106
107
|
throw err;
|
|
107
108
|
}
|
|
108
|
-
setResolvedProfile(resolvedProfileInfo.name);
|
|
109
|
+
setResolvedProfile(resolvedProfileInfo.name, resolvedProfileInfo.source);
|
|
109
110
|
// Banner ownership: MCP `serve` prints its own banner in bindStartupProfile
|
|
110
111
|
// so host logs (Claude Desktop) always see it. Suppress here to avoid a
|
|
111
112
|
// duplicate on TTY invocations like `noxctl --profile X serve`.
|
|
@@ -199,7 +200,7 @@ program
|
|
|
199
200
|
.option('--with-salary', 'Also request the Lön (salary/payroll) scope — requires the Lön permission enabled on your Fortnox app')
|
|
200
201
|
.option('--with-orders', 'Also request the offer/order scopes — requires the Order licence on the Fortnox company')
|
|
201
202
|
.action(async (initOpts) => {
|
|
202
|
-
const {
|
|
203
|
+
const { inspectCredentials, runOAuthSetup, SCOPES, SALARY_SCOPE, ORDER_SCOPES } = await import('./auth.js');
|
|
203
204
|
const { validateProfileName } = await import('./profile-name.js');
|
|
204
205
|
// Opt-in scopes: flag for TTY, env var for non-interactive/CI runs. Both are
|
|
205
206
|
// licence-gated in Fortnox (Lön / Order), and asking for a scope the company
|
|
@@ -222,11 +223,15 @@ program
|
|
|
222
223
|
// (verification via getCompanyInfo, runOAuthSetup's internal saveCredentials
|
|
223
224
|
// call chain) targets the profile being initialized — not a stale pointer.
|
|
224
225
|
if (targetProfile.toLowerCase() !== resolvedProfileInfo.name.toLowerCase()) {
|
|
225
|
-
setResolvedProfile(targetProfile);
|
|
226
|
+
setResolvedProfile(targetProfile, 'flag');
|
|
226
227
|
resolvedProfileInfo = { name: targetProfile, source: 'flag' };
|
|
227
228
|
}
|
|
228
229
|
// Step 1: Check if already configured
|
|
229
|
-
const
|
|
230
|
+
const inspection = await inspectCredentials(targetProfile);
|
|
231
|
+
if (inspection.state === 'locked' || inspection.state === 'inaccessible') {
|
|
232
|
+
fail(inspection.detail);
|
|
233
|
+
}
|
|
234
|
+
const existing = inspection.credentials;
|
|
230
235
|
if (existing) {
|
|
231
236
|
console.log('Existing credentials found.');
|
|
232
237
|
if (process.stdin.isTTY && process.stdout.isTTY) {
|
|
@@ -556,9 +561,12 @@ profile
|
|
|
556
561
|
console.error(err instanceof Error ? err.message : String(err));
|
|
557
562
|
process.exit(2);
|
|
558
563
|
}
|
|
559
|
-
const {
|
|
560
|
-
const
|
|
561
|
-
if (
|
|
564
|
+
const { inspectCredentials } = await import('./auth.js');
|
|
565
|
+
const inspection = await inspectCredentials(validated);
|
|
566
|
+
if (inspection.state === 'locked' || inspection.state === 'inaccessible') {
|
|
567
|
+
fail(inspection.detail);
|
|
568
|
+
}
|
|
569
|
+
if (inspection.state === 'missing') {
|
|
562
570
|
console.error(`No credentials found for profile "${validated}". Run \`noxctl init --profile ${validated}\` first.`);
|
|
563
571
|
process.exit(1);
|
|
564
572
|
}
|
|
@@ -606,7 +614,7 @@ program
|
|
|
606
614
|
.command('doctor')
|
|
607
615
|
.description('Check setup: credentials, token, API connectivity, and scopes')
|
|
608
616
|
.action(async () => {
|
|
609
|
-
const {
|
|
617
|
+
const { inspectCredentials } = await import('./auth.js');
|
|
610
618
|
let ok = true;
|
|
611
619
|
function pass(label, detail) {
|
|
612
620
|
console.log(` ✓ ${label}${detail ? ` — ${detail}` : ''}`);
|
|
@@ -641,6 +649,9 @@ program
|
|
|
641
649
|
if (state === 'locked') {
|
|
642
650
|
fail('Dedicated keychain', 'locked — run `noxctl keychain unlock` (tap your YubiKey)');
|
|
643
651
|
}
|
|
652
|
+
else if (state === 'missing') {
|
|
653
|
+
fail('Dedicated keychain', `configured but inaccessible at ${activePath} — inspect it from an unsandboxed terminal`);
|
|
654
|
+
}
|
|
644
655
|
else {
|
|
645
656
|
pass('Dedicated keychain', `active, ${state} (${activePath})`);
|
|
646
657
|
}
|
|
@@ -682,27 +693,21 @@ program
|
|
|
682
693
|
catch {
|
|
683
694
|
// best-effort diagnostic — don't block doctor on filesystem issues
|
|
684
695
|
}
|
|
685
|
-
// 3.
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
const { KeychainLockedError } = await import('./keychain-target.js');
|
|
692
|
-
if (err instanceof KeychainLockedError) {
|
|
693
|
-
fail('Credentials', err.message);
|
|
694
|
-
console.log(`\n${ok ? 'All checks passed.' : 'Some checks failed.'}`);
|
|
695
|
-
return;
|
|
696
|
-
}
|
|
697
|
-
throw err;
|
|
696
|
+
// 3. Credential state
|
|
697
|
+
const inspection = await inspectCredentials();
|
|
698
|
+
if (inspection.state === 'locked' || inspection.state === 'inaccessible') {
|
|
699
|
+
fail('Credentials', `${inspection.state} — ${inspection.detail}`);
|
|
700
|
+
console.log(`\n${ok ? 'All checks passed.' : 'Some checks failed.'}`);
|
|
701
|
+
return;
|
|
698
702
|
}
|
|
699
|
-
if (
|
|
700
|
-
fail('Credentials', `not found for profile "${resolvedProfileInfo.name}" — run \`noxctl init${resolvedProfileInfo.name === DEFAULT_PROFILE
|
|
703
|
+
if (inspection.state === 'missing') {
|
|
704
|
+
fail('Credentials', `missing — not found for profile "${resolvedProfileInfo.name}" — run \`noxctl init${resolvedProfileInfo.name === DEFAULT_PROFILE
|
|
701
705
|
? ''
|
|
702
706
|
: ` --profile ${resolvedProfileInfo.name}`}\` to set up`);
|
|
703
707
|
console.log(`\n${ok ? 'All checks passed.' : 'Some checks failed.'}`);
|
|
704
708
|
return;
|
|
705
709
|
}
|
|
710
|
+
const creds = inspection.credentials;
|
|
706
711
|
pass('Credentials', 'found');
|
|
707
712
|
if (creds.company_name) {
|
|
708
713
|
pass('Company (cached)', creds.company_name);
|
|
@@ -795,6 +800,12 @@ keychain
|
|
|
795
800
|
const onDarwin = process.platform === 'darwin';
|
|
796
801
|
console.log('Keychain status\n');
|
|
797
802
|
console.log(` Platform ${process.platform}${onDarwin ? '' : ' (dedicated keychain is macOS-only)'}`);
|
|
803
|
+
const { inspectCredentials } = await import('./auth.js');
|
|
804
|
+
const inspection = await inspectCredentials();
|
|
805
|
+
console.log(` Credential state ${inspection.state} — profile "${inspection.profile}" (source: ${inspection.source})`);
|
|
806
|
+
if (inspection.state === 'locked' || inspection.state === 'inaccessible') {
|
|
807
|
+
console.log(`\n ${inspection.detail}`);
|
|
808
|
+
}
|
|
798
809
|
if (!onDarwin)
|
|
799
810
|
return;
|
|
800
811
|
const activePath = kt.activeKeychainPath();
|
|
@@ -822,10 +833,13 @@ keychain
|
|
|
822
833
|
.action(async () => {
|
|
823
834
|
requireDarwin();
|
|
824
835
|
const kt = await import('./keychain-target.js');
|
|
825
|
-
const
|
|
836
|
+
const activePath = kt.activeKeychainPath();
|
|
837
|
+
const kcPath = activePath ?? kt.dedicatedKeychainPath();
|
|
826
838
|
const state = kt.keychainLockState(kcPath);
|
|
827
839
|
if (state === 'missing') {
|
|
828
|
-
console.error(
|
|
840
|
+
console.error(activePath
|
|
841
|
+
? `The configured keychain at ${kcPath} is inaccessible. Retry from an unsandboxed terminal; do not re-run noxctl keychain init.`
|
|
842
|
+
: 'No dedicated keychain found. Run `noxctl keychain init` first.');
|
|
829
843
|
process.exit(1);
|
|
830
844
|
}
|
|
831
845
|
if (state === 'unlocked') {
|
|
@@ -868,9 +882,12 @@ keychain
|
|
|
868
882
|
.action(async () => {
|
|
869
883
|
requireDarwin();
|
|
870
884
|
const kt = await import('./keychain-target.js');
|
|
871
|
-
const
|
|
885
|
+
const activePath = kt.activeKeychainPath();
|
|
886
|
+
const kcPath = activePath ?? kt.dedicatedKeychainPath();
|
|
872
887
|
if (kt.keychainLockState(kcPath) === 'missing') {
|
|
873
|
-
console.error(
|
|
888
|
+
console.error(activePath
|
|
889
|
+
? `The configured keychain at ${kcPath} is inaccessible. Retry from an unsandboxed terminal.`
|
|
890
|
+
: 'No dedicated keychain found.');
|
|
874
891
|
process.exit(1);
|
|
875
892
|
}
|
|
876
893
|
kt.lockKeychain(kcPath);
|