noxctl 0.3.0 → 0.4.1
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 +56 -6
- package/dist/auth.d.ts +6 -2
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +61 -21
- package/dist/auth.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +391 -6
- package/dist/cli.js.map +1 -1
- package/dist/credentials-store.d.ts +1 -1
- package/dist/credentials-store.d.ts.map +1 -1
- package/dist/credentials-store.js +12 -11
- package/dist/credentials-store.js.map +1 -1
- package/dist/fortnox-client.d.ts +6 -1
- package/dist/fortnox-client.d.ts.map +1 -1
- package/dist/fortnox-client.js +150 -62
- package/dist/fortnox-client.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/operations/absencetransactions.d.ts +21 -0
- package/dist/operations/absencetransactions.d.ts.map +1 -0
- package/dist/operations/absencetransactions.js +36 -0
- package/dist/operations/absencetransactions.js.map +1 -0
- package/dist/operations/attendancetransactions.d.ts +21 -0
- package/dist/operations/attendancetransactions.d.ts.map +1 -0
- package/dist/operations/attendancetransactions.js +40 -0
- package/dist/operations/attendancetransactions.js.map +1 -0
- package/dist/operations/employees.d.ts +19 -0
- package/dist/operations/employees.d.ts.map +1 -0
- package/dist/operations/employees.js +34 -0
- package/dist/operations/employees.js.map +1 -0
- package/dist/operations/salarytransactions.d.ts +21 -0
- package/dist/operations/salarytransactions.d.ts.map +1 -0
- package/dist/operations/salarytransactions.js +35 -0
- package/dist/operations/salarytransactions.js.map +1 -0
- package/dist/operations/scheduletimes.d.ts +4 -0
- package/dist/operations/scheduletimes.d.ts.map +1 -0
- package/dist/operations/scheduletimes.js +24 -0
- package/dist/operations/scheduletimes.js.map +1 -0
- package/dist/tools/absencetransactions.d.ts +3 -0
- package/dist/tools/absencetransactions.d.ts.map +1 -0
- package/dist/tools/absencetransactions.js +66 -0
- package/dist/tools/absencetransactions.js.map +1 -0
- package/dist/tools/attendancetransactions.d.ts +3 -0
- package/dist/tools/attendancetransactions.d.ts.map +1 -0
- package/dist/tools/attendancetransactions.js +63 -0
- package/dist/tools/attendancetransactions.js.map +1 -0
- package/dist/tools/employees.d.ts +3 -0
- package/dist/tools/employees.d.ts.map +1 -0
- package/dist/tools/employees.js +119 -0
- package/dist/tools/employees.js.map +1 -0
- package/dist/tools/salarytransactions.d.ts +3 -0
- package/dist/tools/salarytransactions.d.ts.map +1 -0
- package/dist/tools/salarytransactions.js +70 -0
- package/dist/tools/salarytransactions.js.map +1 -0
- package/dist/tools/scheduletimes.d.ts +3 -0
- package/dist/tools/scheduletimes.d.ts.map +1 -0
- package/dist/tools/scheduletimes.js +62 -0
- package/dist/tools/scheduletimes.js.map +1 -0
- package/dist/tools/status.d.ts.map +1 -1
- package/dist/tools/status.js +4 -2
- package/dist/tools/status.js.map +1 -1
- package/dist/views.d.ts +9 -0
- package/dist/views.d.ts.map +1 -1
- package/dist/views.js +115 -0
- package/dist/views.js.map +1 -1
- package/package.json +6 -2
package/dist/fortnox-client.d.ts
CHANGED
|
@@ -7,8 +7,13 @@ export declare class FortnoxApiError extends Error {
|
|
|
7
7
|
readonly statusCode: number;
|
|
8
8
|
readonly fortnoxMessage: string;
|
|
9
9
|
readonly details?: string | undefined;
|
|
10
|
+
readonly retryAfterMs?: number | undefined;
|
|
10
11
|
readonly hint?: string;
|
|
11
|
-
constructor(statusCode: number, fortnoxMessage: string, details?: string | undefined, endpoint?: string);
|
|
12
|
+
constructor(statusCode: number, fortnoxMessage: string, details?: string | undefined, endpoint?: string, retryAfterMs?: number | undefined);
|
|
13
|
+
}
|
|
14
|
+
export declare class FortnoxRequestTimeoutError extends Error {
|
|
15
|
+
readonly outcomeUnknown: boolean;
|
|
16
|
+
constructor(method: string, endpoint: string, timeoutMs: number);
|
|
12
17
|
}
|
|
13
18
|
export interface RequestOptions {
|
|
14
19
|
method?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fortnox-client.d.ts","sourceRoot":"","sources":["../src/fortnox-client.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fortnox-client.d.ts","sourceRoot":"","sources":["../src/fortnox-client.ts"],"names":[],"mappings":"AA4CA,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,eAAgB,SAAQ,KAAK;aAItB,UAAU,EAAE,MAAM;aAClB,cAAc,EAAE,MAAM;aACtB,OAAO,CAAC,EAAE,MAAM;aAEhB,YAAY,CAAC,EAAE,MAAM;IAPvC,SAAgB,IAAI,CAAC,EAAE,MAAM,CAAC;gBAGZ,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE,MAAM,EACtB,OAAO,CAAC,EAAE,MAAM,YAAA,EAChC,QAAQ,CAAC,EAAE,MAAM,EACD,YAAY,CAAC,EAAE,MAAM,YAAA;CAWxC;AAED,qBAAa,0BAA2B,SAAQ,KAAK;IACnD,SAAgB,cAAc,EAAE,OAAO,CAAC;gBAE5B,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAShE;AA2ID,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,CAAC;CACtD;AAED,wBAAsB,cAAc,CAAC,CAAC,EACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,CAAC,CAAC,CAiFZ;AAED;;;GAGG;AACH,wBAAsB,aAAa,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnE,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAM,GACvD,OAAO,CAAC;IAAE,KAAK,EAAE,CAAC,EAAE,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC,CAsBjD"}
|
package/dist/fortnox-client.js
CHANGED
|
@@ -1,29 +1,48 @@
|
|
|
1
1
|
import { getResolvedProfile, getValidToken } from './auth.js';
|
|
2
2
|
import { DEFAULT_PROFILE } from './profile-name.js';
|
|
3
3
|
const BASE_URL = 'https://api.fortnox.se/3';
|
|
4
|
+
const REQUEST_TIMEOUT_MS = 30_000;
|
|
5
|
+
const UPLOAD_TIMEOUT_MS = 120_000;
|
|
6
|
+
const MAX_RETRIES = 3;
|
|
7
|
+
const MAX_RETRY_DELAY_MS = 30_000;
|
|
4
8
|
// Rate limiter: max 25 requests per 5 seconds
|
|
5
9
|
const RATE_WINDOW_MS = 5000;
|
|
6
10
|
const RATE_LIMIT = 25;
|
|
7
11
|
const requestTimestamps = [];
|
|
12
|
+
let rateLimitTail = Promise.resolve();
|
|
8
13
|
async function waitForRateLimit() {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
14
|
+
let release;
|
|
15
|
+
const previous = rateLimitTail;
|
|
16
|
+
rateLimitTail = new Promise((resolve) => {
|
|
17
|
+
release = resolve;
|
|
18
|
+
});
|
|
19
|
+
await previous;
|
|
20
|
+
try {
|
|
21
|
+
while (true) {
|
|
22
|
+
const now = Date.now();
|
|
23
|
+
while (requestTimestamps.length > 0 && requestTimestamps[0] <= now - RATE_WINDOW_MS) {
|
|
24
|
+
requestTimestamps.shift();
|
|
25
|
+
}
|
|
26
|
+
if (requestTimestamps.length < RATE_LIMIT) {
|
|
27
|
+
requestTimestamps.push(now);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const oldestInWindow = requestTimestamps[0];
|
|
31
|
+
const waitMs = Math.max(1, oldestInWindow + RATE_WINDOW_MS - now + 50);
|
|
32
|
+
await new Promise((resolve) => setTimeout(resolve, waitMs));
|
|
33
|
+
}
|
|
13
34
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
const waitMs = oldestInWindow + RATE_WINDOW_MS - now + 50; // 50ms buffer
|
|
17
|
-
await new Promise((resolve) => setTimeout(resolve, waitMs));
|
|
35
|
+
finally {
|
|
36
|
+
release();
|
|
18
37
|
}
|
|
19
|
-
requestTimestamps.push(Date.now());
|
|
20
38
|
}
|
|
21
39
|
export class FortnoxApiError extends Error {
|
|
22
40
|
statusCode;
|
|
23
41
|
fortnoxMessage;
|
|
24
42
|
details;
|
|
43
|
+
retryAfterMs;
|
|
25
44
|
hint;
|
|
26
|
-
constructor(statusCode, fortnoxMessage, details, endpoint) {
|
|
45
|
+
constructor(statusCode, fortnoxMessage, details, endpoint, retryAfterMs) {
|
|
27
46
|
const hint = getErrorHint(statusCode, fortnoxMessage, endpoint);
|
|
28
47
|
const profile = getResolvedProfile();
|
|
29
48
|
const profileTag = profile.toLowerCase() !== DEFAULT_PROFILE ? `[profile: ${profile}] ` : '';
|
|
@@ -34,11 +53,31 @@ export class FortnoxApiError extends Error {
|
|
|
34
53
|
this.statusCode = statusCode;
|
|
35
54
|
this.fortnoxMessage = fortnoxMessage;
|
|
36
55
|
this.details = details;
|
|
56
|
+
this.retryAfterMs = retryAfterMs;
|
|
37
57
|
this.name = 'FortnoxApiError';
|
|
38
58
|
this.hint = hint;
|
|
39
59
|
}
|
|
40
60
|
}
|
|
61
|
+
export class FortnoxRequestTimeoutError extends Error {
|
|
62
|
+
outcomeUnknown;
|
|
63
|
+
constructor(method, endpoint, timeoutMs) {
|
|
64
|
+
const mutation = !['GET', 'HEAD', 'OPTIONS'].includes(method);
|
|
65
|
+
const suffix = mutation
|
|
66
|
+
? ' The outcome is unknown; verify the result in Fortnox before retrying to avoid duplicate side effects.'
|
|
67
|
+
: ' It is safe to retry the read request.';
|
|
68
|
+
super(`Fortnox ${method} ${endpoint} timed out after ${timeoutMs} ms.${suffix}`);
|
|
69
|
+
this.name = 'FortnoxRequestTimeoutError';
|
|
70
|
+
this.outcomeUnknown = mutation;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
41
73
|
function getErrorHint(statusCode, message, endpoint) {
|
|
74
|
+
// Payroll: creating an employee fails with a null "ftgavtalid" when Fortnox
|
|
75
|
+
// can't assign a company/employment agreement — which happens when
|
|
76
|
+
// EmploymentForm / PersonelType / SalaryForm are omitted. Message-based (the
|
|
77
|
+
// status is a generic 400), so check it before the status switch.
|
|
78
|
+
if (/ftgavtal/i.test(message)) {
|
|
79
|
+
return 'Fortnox could not assign an employment agreement (företagsavtal). On employee create, also set EmploymentForm, PersonelType and SalaryForm — or configure a default agreement in Fortnox Lön.';
|
|
80
|
+
}
|
|
42
81
|
switch (statusCode) {
|
|
43
82
|
case 401:
|
|
44
83
|
return 'Authentication failed. Try `noxctl init` to re-authenticate.';
|
|
@@ -53,7 +92,7 @@ function getErrorHint(statusCode, message, endpoint) {
|
|
|
53
92
|
case 404:
|
|
54
93
|
return 'Resource not found. Verify the ID/number exists in Fortnox.';
|
|
55
94
|
case 429:
|
|
56
|
-
return 'Rate limited by Fortnox.
|
|
95
|
+
return 'Rate limited by Fortnox. Read requests are retried automatically; mutations are not retried to avoid duplicate side effects.';
|
|
57
96
|
default:
|
|
58
97
|
if (statusCode >= 500) {
|
|
59
98
|
return 'Fortnox server error. Try again in a moment.';
|
|
@@ -85,6 +124,11 @@ function endpointToScope(endpoint) {
|
|
|
85
124
|
inbox: 'inbox',
|
|
86
125
|
archive: 'archive',
|
|
87
126
|
voucherfileconnections: 'connectfile',
|
|
127
|
+
employees: 'salary',
|
|
128
|
+
salarytransactions: 'salary',
|
|
129
|
+
attendancetransactions: 'salary',
|
|
130
|
+
absencetransactions: 'salary',
|
|
131
|
+
scheduletimes: 'salary',
|
|
88
132
|
};
|
|
89
133
|
for (const [prefix, scope] of Object.entries(mapping)) {
|
|
90
134
|
if (path.startsWith(prefix))
|
|
@@ -92,7 +136,41 @@ function endpointToScope(endpoint) {
|
|
|
92
136
|
}
|
|
93
137
|
return undefined;
|
|
94
138
|
}
|
|
95
|
-
|
|
139
|
+
function errorCode(err) {
|
|
140
|
+
let current = err;
|
|
141
|
+
for (let depth = 0; depth < 4 && current && typeof current === 'object'; depth++) {
|
|
142
|
+
const value = current;
|
|
143
|
+
if (typeof value.code === 'string')
|
|
144
|
+
return value.code;
|
|
145
|
+
current = value.cause;
|
|
146
|
+
}
|
|
147
|
+
return undefined;
|
|
148
|
+
}
|
|
149
|
+
function isTimeoutError(err) {
|
|
150
|
+
return (err instanceof Error &&
|
|
151
|
+
(err.name === 'TimeoutError' || err.name === 'AbortError' || errorCode(err) === 'ABORT_ERR'));
|
|
152
|
+
}
|
|
153
|
+
function isTransientNetworkError(err) {
|
|
154
|
+
if (isTimeoutError(err))
|
|
155
|
+
return true;
|
|
156
|
+
const code = errorCode(err);
|
|
157
|
+
if (code &&
|
|
158
|
+
['ECONNRESET', 'ETIMEDOUT', 'EAI_AGAIN', 'ENETUNREACH', 'ECONNREFUSED'].includes(code)) {
|
|
159
|
+
return true;
|
|
160
|
+
}
|
|
161
|
+
return err instanceof TypeError && /fetch failed/i.test(err.message);
|
|
162
|
+
}
|
|
163
|
+
function retryAfterDelay(response) {
|
|
164
|
+
const raw = response.headers?.get?.('retry-after');
|
|
165
|
+
if (!raw)
|
|
166
|
+
return undefined;
|
|
167
|
+
const seconds = Number(raw);
|
|
168
|
+
const delay = Number.isFinite(seconds) ? seconds * 1000 : new Date(raw).getTime() - Date.now();
|
|
169
|
+
if (!Number.isFinite(delay))
|
|
170
|
+
return undefined;
|
|
171
|
+
return Math.min(Math.max(0, delay), MAX_RETRY_DELAY_MS);
|
|
172
|
+
}
|
|
173
|
+
async function retryWithBackoff(fn, retryable, maxRetries = MAX_RETRIES) {
|
|
96
174
|
for (let attempt = 0; attempt <= maxRetries; attempt++) {
|
|
97
175
|
try {
|
|
98
176
|
return await fn();
|
|
@@ -108,12 +186,12 @@ async function retryWithBackoff(fn, retryable, maxRetries = 3) {
|
|
|
108
186
|
if (!retryable.includes(err.statusCode))
|
|
109
187
|
throw err;
|
|
110
188
|
}
|
|
111
|
-
else if (err
|
|
112
|
-
!err.message.includes('ECONNRESET') &&
|
|
113
|
-
!err.message.includes('ETIMEDOUT')) {
|
|
189
|
+
else if (!isTransientNetworkError(err)) {
|
|
114
190
|
throw err;
|
|
115
191
|
}
|
|
116
|
-
const delay =
|
|
192
|
+
const delay = err instanceof FortnoxApiError && err.retryAfterMs !== undefined
|
|
193
|
+
? err.retryAfterMs
|
|
194
|
+
: Math.min(1000 * Math.pow(2, attempt), MAX_RETRY_DELAY_MS);
|
|
117
195
|
await new Promise((resolve) => setTimeout(resolve, delay));
|
|
118
196
|
}
|
|
119
197
|
}
|
|
@@ -122,59 +200,69 @@ async function retryWithBackoff(fn, retryable, maxRetries = 3) {
|
|
|
122
200
|
export async function fortnoxRequest(endpoint, options = {}) {
|
|
123
201
|
const method = (options.method || 'GET').toUpperCase();
|
|
124
202
|
const retryable = method === 'GET' || method === 'HEAD' || method === 'OPTIONS';
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
203
|
+
const timeoutMs = options.rawBody === undefined ? REQUEST_TIMEOUT_MS : UPLOAD_TIMEOUT_MS;
|
|
204
|
+
try {
|
|
205
|
+
return await retryWithBackoff(async () => {
|
|
206
|
+
await waitForRateLimit();
|
|
207
|
+
const token = await getValidToken();
|
|
208
|
+
const url = new URL(`${BASE_URL}/${endpoint}`);
|
|
209
|
+
if (options.params) {
|
|
210
|
+
for (const [key, value] of Object.entries(options.params)) {
|
|
211
|
+
if (value !== undefined) {
|
|
212
|
+
url.searchParams.set(key, String(value));
|
|
213
|
+
}
|
|
133
214
|
}
|
|
134
215
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
}
|
|
150
|
-
else {
|
|
151
|
-
headers['Content-Type'] = 'application/json';
|
|
152
|
-
if (options.body) {
|
|
153
|
-
fetchOptions.body = JSON.stringify(options.body);
|
|
216
|
+
const headers = {
|
|
217
|
+
Authorization: `Bearer ${token}`,
|
|
218
|
+
Accept: 'application/json',
|
|
219
|
+
};
|
|
220
|
+
const fetchOptions = {
|
|
221
|
+
method,
|
|
222
|
+
headers,
|
|
223
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
224
|
+
};
|
|
225
|
+
if (options.rawBody !== undefined) {
|
|
226
|
+
// A raw body (e.g. FormData for a multipart file upload): do NOT set
|
|
227
|
+
// Content-Type — fetch/undici derives it (and the multipart boundary)
|
|
228
|
+
// from the body itself.
|
|
229
|
+
fetchOptions.body = options.rawBody;
|
|
154
230
|
}
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
let details;
|
|
160
|
-
try {
|
|
161
|
-
const errorBody = (await response.json());
|
|
162
|
-
if (errorBody?.ErrorInformation) {
|
|
163
|
-
errorMessage = errorBody.ErrorInformation.message || errorMessage;
|
|
164
|
-
details = `Error code: ${errorBody.ErrorInformation.code}`;
|
|
231
|
+
else {
|
|
232
|
+
headers['Content-Type'] = 'application/json';
|
|
233
|
+
if (options.body) {
|
|
234
|
+
fetchOptions.body = JSON.stringify(options.body);
|
|
165
235
|
}
|
|
166
236
|
}
|
|
167
|
-
|
|
168
|
-
|
|
237
|
+
const response = await fetch(url.toString(), fetchOptions);
|
|
238
|
+
if (!response.ok) {
|
|
239
|
+
let errorMessage = `HTTP ${response.status}`;
|
|
240
|
+
let details;
|
|
241
|
+
try {
|
|
242
|
+
const errorBody = (await response.json());
|
|
243
|
+
if (errorBody?.ErrorInformation) {
|
|
244
|
+
errorMessage = errorBody.ErrorInformation.message || errorMessage;
|
|
245
|
+
details = `Error code: ${errorBody.ErrorInformation.code}`;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
catch {
|
|
249
|
+
// ignore parse errors
|
|
250
|
+
}
|
|
251
|
+
throw new FortnoxApiError(response.status, errorMessage, details, endpoint, retryAfterDelay(response));
|
|
169
252
|
}
|
|
170
|
-
|
|
253
|
+
// Some endpoints return empty responses (e.g., DELETE)
|
|
254
|
+
const text = await response.text();
|
|
255
|
+
if (!text)
|
|
256
|
+
return undefined;
|
|
257
|
+
return JSON.parse(text);
|
|
258
|
+
}, retryable);
|
|
259
|
+
}
|
|
260
|
+
catch (err) {
|
|
261
|
+
if (isTimeoutError(err)) {
|
|
262
|
+
throw new FortnoxRequestTimeoutError(method, endpoint, timeoutMs);
|
|
171
263
|
}
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
if (!text)
|
|
175
|
-
return undefined;
|
|
176
|
-
return JSON.parse(text);
|
|
177
|
-
}, retryable);
|
|
264
|
+
throw err;
|
|
265
|
+
}
|
|
178
266
|
}
|
|
179
267
|
/**
|
|
180
268
|
* Fetch all pages of a paginated Fortnox list endpoint.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fortnox-client.js","sourceRoot":"","sources":["../src/fortnox-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC9D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,QAAQ,GAAG,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"fortnox-client.js","sourceRoot":"","sources":["../src/fortnox-client.ts"],"names":[],"mappings":"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"}
|
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,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAgCpE,wBAAgB,YAAY,IAAI,SAAS,CAkCxC;AAED,MAAM,WAAW,qBAAqB;IACpC;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAMD,qBAAa,mBAAoB,SAAQ,KAAK;aAE1B,IAAI,EAChB,yBAAyB,GACzB,oBAAoB,GACpB,iBAAiB,GACjB,aAAa;gBAJD,IAAI,EAChB,yBAAyB,GACzB,oBAAoB,GACpB,iBAAiB,GACjB,aAAa,EACjB,OAAO,EAAE,MAAM;CAKlB;AAMD,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,CAAC,CAmC7D;AAID,wBAAsB,kBAAkB,CAAC,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,CAO7F;AAED,wBAAsB,cAAc,CAAC,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAavF"}
|
package/dist/index.js
CHANGED
|
@@ -24,10 +24,15 @@ import { registerPriceListTools } from './tools/pricelists.js';
|
|
|
24
24
|
import { registerFinancialYearTools } from './tools/financial-years.js';
|
|
25
25
|
import { registerContractTools } from './tools/contracts.js';
|
|
26
26
|
import { registerAnalyticsTools } from './tools/analytics.js';
|
|
27
|
+
import { registerEmployeeTools } from './tools/employees.js';
|
|
28
|
+
import { registerSalaryTransactionTools } from './tools/salarytransactions.js';
|
|
29
|
+
import { registerAttendanceTransactionTools } from './tools/attendancetransactions.js';
|
|
30
|
+
import { registerAbsenceTransactionTools } from './tools/absencetransactions.js';
|
|
31
|
+
import { registerScheduleTimeTools } from './tools/scheduletimes.js';
|
|
27
32
|
export function createServer() {
|
|
28
33
|
const server = new McpServer({
|
|
29
34
|
name: 'fortnox-mcp',
|
|
30
|
-
version: '0.
|
|
35
|
+
version: '0.4.1',
|
|
31
36
|
});
|
|
32
37
|
registerCustomerTools(server);
|
|
33
38
|
registerInvoiceTools(server);
|
|
@@ -50,6 +55,11 @@ export function createServer() {
|
|
|
50
55
|
registerFinancialYearTools(server);
|
|
51
56
|
registerContractTools(server);
|
|
52
57
|
registerAnalyticsTools(server);
|
|
58
|
+
registerEmployeeTools(server);
|
|
59
|
+
registerSalaryTransactionTools(server);
|
|
60
|
+
registerAttendanceTransactionTools(server);
|
|
61
|
+
registerAbsenceTransactionTools(server);
|
|
62
|
+
registerScheduleTimeTools(server);
|
|
53
63
|
return server;
|
|
54
64
|
}
|
|
55
65
|
// Thrown by resolveStartupProfile when the profile cannot be resolved
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACzE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,4BAA4B,EAAE,MAAM,8BAA8B,CAAC;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAC;AAC1E,OAAO,EAAE,mCAAmC,EAAE,MAAM,sCAAsC,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
interface AbsenceTransactionsResponse {
|
|
2
|
+
AbsenceTransactions: Record<string, unknown>[];
|
|
3
|
+
MetaInformation?: {
|
|
4
|
+
'@TotalResources': number;
|
|
5
|
+
'@TotalPages': number;
|
|
6
|
+
'@CurrentPage': number;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export interface ListAbsenceTransactionsParams {
|
|
10
|
+
employeeId?: string;
|
|
11
|
+
date?: string;
|
|
12
|
+
page?: number;
|
|
13
|
+
limit?: number;
|
|
14
|
+
all?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare function listAbsenceTransactions(params?: ListAbsenceTransactionsParams): Promise<AbsenceTransactionsResponse>;
|
|
17
|
+
export declare function getAbsenceTransaction(id: string): Promise<Record<string, unknown>>;
|
|
18
|
+
export declare function createAbsenceTransaction(params: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
19
|
+
export declare function deleteAbsenceTransaction(id: string): Promise<void>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=absencetransactions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"absencetransactions.d.ts","sourceRoot":"","sources":["../../src/operations/absencetransactions.ts"],"names":[],"mappings":"AAMA,UAAU,2BAA2B;IACnC,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAC/C,eAAe,CAAC,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;CAChG;AAED,MAAM,WAAW,6BAA6B;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,uBAAuB,CAC3C,MAAM,GAAE,6BAAkC,GACzC,OAAO,CAAC,2BAA2B,CAAC,CAsBtC;AAED,wBAAsB,qBAAqB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAKxF;AAED,wBAAsB,wBAAwB,CAC5C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAMlC;AAED,wBAAsB,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAIxE"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { fortnoxRequest, fetchAllPages } from '../fortnox-client.js';
|
|
2
|
+
export async function listAbsenceTransactions(params = {}) {
|
|
3
|
+
// Note the lowercase query keys: Fortnox expects "employeeid" and "date".
|
|
4
|
+
if (params.all) {
|
|
5
|
+
const { items, totalResources } = await fetchAllPages('absencetransactions', 'AbsenceTransactions', { employeeid: params.employeeId, date: params.date });
|
|
6
|
+
return {
|
|
7
|
+
AbsenceTransactions: items,
|
|
8
|
+
MetaInformation: { '@TotalResources': totalResources, '@TotalPages': 1, '@CurrentPage': 1 },
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
return fortnoxRequest('absencetransactions', {
|
|
12
|
+
params: {
|
|
13
|
+
employeeid: params.employeeId,
|
|
14
|
+
date: params.date,
|
|
15
|
+
page: params.page || 1,
|
|
16
|
+
limit: params.limit || 100,
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
export async function getAbsenceTransaction(id) {
|
|
21
|
+
const data = await fortnoxRequest(`absencetransactions/${encodeURIComponent(id)}`);
|
|
22
|
+
return data.AbsenceTransaction;
|
|
23
|
+
}
|
|
24
|
+
export async function createAbsenceTransaction(params) {
|
|
25
|
+
const data = await fortnoxRequest('absencetransactions', {
|
|
26
|
+
method: 'POST',
|
|
27
|
+
body: { AbsenceTransaction: params },
|
|
28
|
+
});
|
|
29
|
+
return data.AbsenceTransaction;
|
|
30
|
+
}
|
|
31
|
+
export async function deleteAbsenceTransaction(id) {
|
|
32
|
+
await fortnoxRequest(`absencetransactions/${encodeURIComponent(id)}`, {
|
|
33
|
+
method: 'DELETE',
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=absencetransactions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"absencetransactions.js","sourceRoot":"","sources":["../../src/operations/absencetransactions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAmBrE,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,SAAwC,EAAE;IAE1C,0EAA0E;IAC1E,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QACf,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,MAAM,aAAa,CACnD,qBAAqB,EACrB,qBAAqB,EACrB,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CACrD,CAAC;QACF,OAAO;YACL,mBAAmB,EAAE,KAAK;YAC1B,eAAe,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE;SAC5F,CAAC;IACJ,CAAC;IAED,OAAO,cAAc,CAA8B,qBAAqB,EAAE;QACxE,MAAM,EAAE;YACN,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC;YACtB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,GAAG;SAC3B;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,EAAU;IACpD,MAAM,IAAI,GAAG,MAAM,cAAc,CAC/B,uBAAuB,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAChD,CAAC;IACF,OAAO,IAAI,CAAC,kBAAkB,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,MAA+B;IAE/B,MAAM,IAAI,GAAG,MAAM,cAAc,CAA6B,qBAAqB,EAAE;QACnF,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,EAAE,kBAAkB,EAAE,MAAM,EAAE;KACrC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC,kBAAkB,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,EAAU;IACvD,MAAM,cAAc,CAAC,uBAAuB,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE;QACpE,MAAM,EAAE,QAAQ;KACjB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
interface AttendanceTransactionsResponse {
|
|
2
|
+
AttendanceTransactions: Record<string, unknown>[];
|
|
3
|
+
MetaInformation?: {
|
|
4
|
+
'@TotalResources': number;
|
|
5
|
+
'@TotalPages': number;
|
|
6
|
+
'@CurrentPage': number;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export interface ListAttendanceTransactionsParams {
|
|
10
|
+
employeeId?: string;
|
|
11
|
+
date?: string;
|
|
12
|
+
page?: number;
|
|
13
|
+
limit?: number;
|
|
14
|
+
all?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export declare function listAttendanceTransactions(params?: ListAttendanceTransactionsParams): Promise<AttendanceTransactionsResponse>;
|
|
17
|
+
export declare function getAttendanceTransaction(id: string): Promise<Record<string, unknown>>;
|
|
18
|
+
export declare function createAttendanceTransaction(params: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
19
|
+
export declare function deleteAttendanceTransaction(id: string): Promise<void>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=attendancetransactions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attendancetransactions.d.ts","sourceRoot":"","sources":["../../src/operations/attendancetransactions.ts"],"names":[],"mappings":"AAMA,UAAU,8BAA8B;IACtC,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IAClD,eAAe,CAAC,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;CAChG;AAED,MAAM,WAAW,gCAAgC;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,0BAA0B,CAC9C,MAAM,GAAE,gCAAqC,GAC5C,OAAO,CAAC,8BAA8B,CAAC,CA0BzC;AAED,wBAAsB,wBAAwB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAK3F;AAED,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAMlC;AAED,wBAAsB,2BAA2B,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI3E"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { fortnoxRequest, fetchAllPages } from '../fortnox-client.js';
|
|
2
|
+
export async function listAttendanceTransactions(params = {}) {
|
|
3
|
+
if (params.all) {
|
|
4
|
+
// The Fortnox attendance list endpoint names its filter params "employeeid"
|
|
5
|
+
// (all lowercase) and "date" — the filters must survive pagination, so pass
|
|
6
|
+
// them through to fetchAllPages too (not just the single-page branch below).
|
|
7
|
+
const { items, totalResources } = await fetchAllPages('attendancetransactions', 'AttendanceTransactions', { employeeid: params.employeeId, date: params.date });
|
|
8
|
+
return {
|
|
9
|
+
AttendanceTransactions: items,
|
|
10
|
+
MetaInformation: { '@TotalResources': totalResources, '@TotalPages': 1, '@CurrentPage': 1 },
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
// The Fortnox attendance list endpoint names its filter params "employeeid"
|
|
14
|
+
// (all lowercase) and "date" — map employeeId onto the lowercase key.
|
|
15
|
+
return fortnoxRequest('attendancetransactions', {
|
|
16
|
+
params: {
|
|
17
|
+
employeeid: params.employeeId,
|
|
18
|
+
date: params.date,
|
|
19
|
+
page: params.page || 1,
|
|
20
|
+
limit: params.limit || 100,
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
export async function getAttendanceTransaction(id) {
|
|
25
|
+
const data = await fortnoxRequest(`attendancetransactions/${encodeURIComponent(id)}`);
|
|
26
|
+
return data.AttendanceTransaction;
|
|
27
|
+
}
|
|
28
|
+
export async function createAttendanceTransaction(params) {
|
|
29
|
+
const data = await fortnoxRequest('attendancetransactions', {
|
|
30
|
+
method: 'POST',
|
|
31
|
+
body: { AttendanceTransaction: params },
|
|
32
|
+
});
|
|
33
|
+
return data.AttendanceTransaction;
|
|
34
|
+
}
|
|
35
|
+
export async function deleteAttendanceTransaction(id) {
|
|
36
|
+
await fortnoxRequest(`attendancetransactions/${encodeURIComponent(id)}`, {
|
|
37
|
+
method: 'DELETE',
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=attendancetransactions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attendancetransactions.js","sourceRoot":"","sources":["../../src/operations/attendancetransactions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAmBrE,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,SAA2C,EAAE;IAE7C,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QACf,4EAA4E;QAC5E,4EAA4E;QAC5E,6EAA6E;QAC7E,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,MAAM,aAAa,CACnD,wBAAwB,EACxB,wBAAwB,EACxB,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CACrD,CAAC;QACF,OAAO;YACL,sBAAsB,EAAE,KAAK;YAC7B,eAAe,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE;SAC5F,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,sEAAsE;IACtE,OAAO,cAAc,CAAiC,wBAAwB,EAAE;QAC9E,MAAM,EAAE;YACN,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC;YACtB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,GAAG;SAC3B;KACF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,EAAU;IACvD,MAAM,IAAI,GAAG,MAAM,cAAc,CAC/B,0BAA0B,kBAAkB,CAAC,EAAE,CAAC,EAAE,CACnD,CAAC;IACF,OAAO,IAAI,CAAC,qBAAqB,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,MAA+B;IAE/B,MAAM,IAAI,GAAG,MAAM,cAAc,CAAgC,wBAAwB,EAAE;QACzF,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,EAAE,qBAAqB,EAAE,MAAM,EAAE;KACxC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC,qBAAqB,CAAC;AACpC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,EAAU;IAC1D,MAAM,cAAc,CAAC,0BAA0B,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE;QACvE,MAAM,EAAE,QAAQ;KACjB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
interface EmployeesResponse {
|
|
2
|
+
Employees: Record<string, unknown>[];
|
|
3
|
+
MetaInformation?: {
|
|
4
|
+
'@TotalResources': number;
|
|
5
|
+
'@TotalPages': number;
|
|
6
|
+
'@CurrentPage': number;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export interface ListEmployeesParams {
|
|
10
|
+
page?: number;
|
|
11
|
+
limit?: number;
|
|
12
|
+
all?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare function listEmployees(params?: ListEmployeesParams): Promise<EmployeesResponse>;
|
|
15
|
+
export declare function getEmployee(employeeId: string): Promise<Record<string, unknown>>;
|
|
16
|
+
export declare function createEmployee(params: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
17
|
+
export declare function updateEmployee(employeeId: string, fields: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=employees.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"employees.d.ts","sourceRoot":"","sources":["../../src/operations/employees.ts"],"names":[],"mappings":"AAMA,UAAU,iBAAiB;IACzB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACrC,eAAe,CAAC,EAAE;QAAE,iBAAiB,EAAE,MAAM,CAAC;QAAC,aAAa,EAAE,MAAM,CAAC;QAAC,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;CAChG;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,wBAAsB,aAAa,CAAC,MAAM,GAAE,mBAAwB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAehG;AAED,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAKtF;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAMlC;AAED,wBAAsB,cAAc,CAClC,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAWlC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { fortnoxRequest, fetchAllPages } from '../fortnox-client.js';
|
|
2
|
+
export async function listEmployees(params = {}) {
|
|
3
|
+
if (params.all) {
|
|
4
|
+
const { items, totalResources } = await fetchAllPages('employees', 'Employees');
|
|
5
|
+
return {
|
|
6
|
+
Employees: items,
|
|
7
|
+
MetaInformation: { '@TotalResources': totalResources, '@TotalPages': 1, '@CurrentPage': 1 },
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
return fortnoxRequest('employees', {
|
|
11
|
+
params: { page: params.page || 1, limit: params.limit || 100 },
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
export async function getEmployee(employeeId) {
|
|
15
|
+
const data = await fortnoxRequest(`employees/${encodeURIComponent(employeeId)}`);
|
|
16
|
+
return data.Employee;
|
|
17
|
+
}
|
|
18
|
+
export async function createEmployee(params) {
|
|
19
|
+
const data = await fortnoxRequest('employees', {
|
|
20
|
+
method: 'POST',
|
|
21
|
+
body: { Employee: params },
|
|
22
|
+
});
|
|
23
|
+
return data.Employee;
|
|
24
|
+
}
|
|
25
|
+
export async function updateEmployee(employeeId, fields) {
|
|
26
|
+
// EmployeeId is the path key — never send it in the PUT body.
|
|
27
|
+
const { EmployeeId: _, ...body } = fields;
|
|
28
|
+
const data = await fortnoxRequest(`employees/${encodeURIComponent(employeeId)}`, {
|
|
29
|
+
method: 'PUT',
|
|
30
|
+
body: { Employee: body },
|
|
31
|
+
});
|
|
32
|
+
return data.Employee;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=employees.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"employees.js","sourceRoot":"","sources":["../../src/operations/employees.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAiBrE,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,SAA8B,EAAE;IAClE,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;QACf,MAAM,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,MAAM,aAAa,CACnD,WAAW,EACX,WAAW,CACZ,CAAC;QACF,OAAO;YACL,SAAS,EAAE,KAAK;YAChB,eAAe,EAAE,EAAE,iBAAiB,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE;SAC5F,CAAC;IACJ,CAAC;IAED,OAAO,cAAc,CAAoB,WAAW,EAAE;QACpD,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,GAAG,EAAE;KAC/D,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,UAAkB;IAClD,MAAM,IAAI,GAAG,MAAM,cAAc,CAC/B,aAAa,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAC9C,CAAC;IACF,OAAO,IAAI,CAAC,QAAQ,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAA+B;IAE/B,MAAM,IAAI,GAAG,MAAM,cAAc,CAAmB,WAAW,EAAE;QAC/D,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE;KAC3B,CAAC,CAAC;IACH,OAAO,IAAI,CAAC,QAAQ,CAAC;AACvB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,UAAkB,EAClB,MAA+B;IAE/B,8DAA8D;IAC9D,MAAM,EAAE,UAAU,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC;IAC1C,MAAM,IAAI,GAAG,MAAM,cAAc,CAC/B,aAAa,kBAAkB,CAAC,UAAU,CAAC,EAAE,EAC7C;QACE,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;KACzB,CACF,CAAC;IACF,OAAO,IAAI,CAAC,QAAQ,CAAC;AACvB,CAAC"}
|