@t4dhg/mcp-factorial 7.1.0 → 8.2.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 +278 -55
- package/dist/api/ats.d.ts +78 -0
- package/dist/api/ats.d.ts.map +1 -0
- package/dist/api/ats.js +173 -0
- package/dist/api/ats.js.map +1 -0
- package/dist/api/attendance.d.ts +27 -0
- package/dist/api/attendance.d.ts.map +1 -0
- package/dist/api/attendance.js +62 -0
- package/dist/api/attendance.js.map +1 -0
- package/dist/api/contracts.d.ts +40 -0
- package/dist/api/contracts.d.ts.map +1 -0
- package/dist/api/contracts.js +146 -0
- package/dist/api/contracts.js.map +1 -0
- package/dist/api/documents.d.ts +95 -0
- package/dist/api/documents.d.ts.map +1 -0
- package/dist/api/documents.js +265 -0
- package/dist/api/documents.js.map +1 -0
- package/dist/api/employees.d.ts +35 -0
- package/dist/api/employees.d.ts.map +1 -0
- package/dist/api/employees.js +116 -0
- package/dist/api/employees.js.map +1 -0
- package/dist/api/index.d.ts +22 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +36 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/job-catalog.d.ts +21 -0
- package/dist/api/job-catalog.d.ts.map +1 -0
- package/dist/api/job-catalog.js +34 -0
- package/dist/api/job-catalog.js.map +1 -0
- package/dist/api/locations.d.ts +26 -0
- package/dist/api/locations.d.ts.map +1 -0
- package/dist/api/locations.js +59 -0
- package/dist/api/locations.js.map +1 -0
- package/dist/api/payroll.d.ts +30 -0
- package/dist/api/payroll.d.ts.map +1 -0
- package/dist/api/payroll.js +68 -0
- package/dist/api/payroll.js.map +1 -0
- package/dist/api/projects.d.ts +82 -0
- package/dist/api/projects.d.ts.map +1 -0
- package/dist/api/projects.js +193 -0
- package/dist/api/projects.js.map +1 -0
- package/dist/api/shared.d.ts +12 -0
- package/dist/api/shared.d.ts.map +1 -0
- package/dist/api/shared.js +17 -0
- package/dist/api/shared.js.map +1 -0
- package/dist/api/teams.d.ts +26 -0
- package/dist/api/teams.d.ts.map +1 -0
- package/dist/api/teams.js +59 -0
- package/dist/api/teams.js.map +1 -0
- package/dist/api/time-off.d.ts +47 -0
- package/dist/api/time-off.d.ts.map +1 -0
- package/dist/api/time-off.js +112 -0
- package/dist/api/time-off.js.map +1 -0
- package/dist/api/training.d.ts +62 -0
- package/dist/api/training.d.ts.map +1 -0
- package/dist/api/training.js +147 -0
- package/dist/api/training.js.map +1 -0
- package/dist/api/work-areas.d.ts +30 -0
- package/dist/api/work-areas.d.ts.map +1 -0
- package/dist/api/work-areas.js +71 -0
- package/dist/api/work-areas.js.map +1 -0
- package/dist/api.d.ts +3 -464
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +3 -1274
- package/dist/api.js.map +1 -1
- package/dist/audit.d.ts +8 -3
- package/dist/audit.d.ts.map +1 -1
- package/dist/audit.js +8 -3
- package/dist/audit.js.map +1 -1
- package/dist/index.d.ts +6 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -3860
- package/dist/index.js.map +1 -1
- package/dist/oauth.d.ts +63 -0
- package/dist/oauth.d.ts.map +1 -0
- package/dist/oauth.js +143 -0
- package/dist/oauth.js.map +1 -0
- package/dist/schemas/ats.d.ts +326 -0
- package/dist/schemas/ats.d.ts.map +1 -0
- package/dist/schemas/ats.js +121 -0
- package/dist/schemas/ats.js.map +1 -0
- package/dist/schemas/documents.d.ts +78 -0
- package/dist/schemas/documents.d.ts.map +1 -0
- package/dist/schemas/documents.js +34 -0
- package/dist/schemas/documents.js.map +1 -0
- package/dist/schemas/employees.d.ts +528 -0
- package/dist/schemas/employees.d.ts.map +1 -0
- package/dist/schemas/employees.js +206 -0
- package/dist/schemas/employees.js.map +1 -0
- package/dist/schemas/index.d.ts +18 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +28 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/job-catalog.d.ts +57 -0
- package/dist/schemas/job-catalog.d.ts.map +1 -0
- package/dist/schemas/job-catalog.js +27 -0
- package/dist/schemas/job-catalog.js.map +1 -0
- package/dist/schemas/payroll.d.ts +98 -0
- package/dist/schemas/payroll.d.ts.map +1 -0
- package/dist/schemas/payroll.js +43 -0
- package/dist/schemas/payroll.js.map +1 -0
- package/dist/schemas/projects.d.ts +277 -0
- package/dist/schemas/projects.d.ts.map +1 -0
- package/dist/schemas/projects.js +114 -0
- package/dist/schemas/projects.js.map +1 -0
- package/dist/schemas/shared.d.ts +42 -0
- package/dist/schemas/shared.d.ts.map +1 -0
- package/dist/schemas/shared.js +65 -0
- package/dist/schemas/shared.js.map +1 -0
- package/dist/schemas/time-off.d.ts +286 -0
- package/dist/schemas/time-off.d.ts.map +1 -0
- package/dist/schemas/time-off.js +111 -0
- package/dist/schemas/time-off.js.map +1 -0
- package/dist/schemas/training.d.ts +223 -0
- package/dist/schemas/training.d.ts.map +1 -0
- package/dist/schemas/training.js +88 -0
- package/dist/schemas/training.js.map +1 -0
- package/dist/schemas/work-areas.d.ts +71 -0
- package/dist/schemas/work-areas.d.ts.map +1 -0
- package/dist/schemas/work-areas.js +30 -0
- package/dist/schemas/work-areas.js.map +1 -0
- package/dist/schemas.d.ts +3 -1932
- package/dist/schemas.d.ts.map +1 -1
- package/dist/schemas.js +3 -785
- package/dist/schemas.js.map +1 -1
- package/dist/tool-utils.d.ts +0 -14
- package/dist/tool-utils.d.ts.map +1 -1
- package/dist/tool-utils.js +5 -18
- package/dist/tool-utils.js.map +1 -1
- package/dist/tools/ats.d.ts +6 -0
- package/dist/tools/ats.d.ts.map +1 -0
- package/dist/tools/ats.js +206 -0
- package/dist/tools/ats.js.map +1 -0
- package/dist/tools/attendance.d.ts +6 -0
- package/dist/tools/attendance.d.ts.map +1 -0
- package/dist/tools/attendance.js +86 -0
- package/dist/tools/attendance.js.map +1 -0
- package/dist/tools/contracts.d.ts +6 -0
- package/dist/tools/contracts.d.ts.map +1 -0
- package/dist/tools/contracts.js +63 -0
- package/dist/tools/contracts.js.map +1 -0
- package/dist/tools/documents.d.ts +6 -0
- package/dist/tools/documents.d.ts.map +1 -0
- package/dist/tools/documents.js +135 -0
- package/dist/tools/documents.js.map +1 -0
- package/dist/tools/employees.d.ts +6 -0
- package/dist/tools/employees.d.ts.map +1 -0
- package/dist/tools/employees.js +125 -0
- package/dist/tools/employees.js.map +1 -0
- package/dist/tools/index.d.ts +17 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +221 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/job-catalog.d.ts +6 -0
- package/dist/tools/job-catalog.d.ts.map +1 -0
- package/dist/tools/job-catalog.js +39 -0
- package/dist/tools/job-catalog.js.map +1 -0
- package/dist/tools/locations.d.ts +6 -0
- package/dist/tools/locations.d.ts.map +1 -0
- package/dist/tools/locations.js +93 -0
- package/dist/tools/locations.js.map +1 -0
- package/dist/tools/payroll.d.ts +6 -0
- package/dist/tools/payroll.d.ts.map +1 -0
- package/dist/tools/payroll.js +76 -0
- package/dist/tools/payroll.js.map +1 -0
- package/dist/tools/projects.d.ts +6 -0
- package/dist/tools/projects.d.ts.map +1 -0
- package/dist/tools/projects.js +203 -0
- package/dist/tools/projects.js.map +1 -0
- package/dist/tools/shared.d.ts +84 -0
- package/dist/tools/shared.d.ts.map +1 -0
- package/dist/tools/shared.js +164 -0
- package/dist/tools/shared.js.map +1 -0
- package/dist/tools/teams.d.ts +6 -0
- package/dist/tools/teams.d.ts.map +1 -0
- package/dist/tools/teams.js +81 -0
- package/dist/tools/teams.js.map +1 -0
- package/dist/tools/time-off.d.ts +6 -0
- package/dist/tools/time-off.d.ts.map +1 -0
- package/dist/tools/time-off.js +144 -0
- package/dist/tools/time-off.js.map +1 -0
- package/dist/tools/training.d.ts +6 -0
- package/dist/tools/training.d.ts.map +1 -0
- package/dist/tools/training.js +160 -0
- package/dist/tools/training.js.map +1 -0
- package/dist/tools/work-areas.d.ts +6 -0
- package/dist/tools/work-areas.d.ts.map +1 -0
- package/dist/tools/work-areas.js +85 -0
- package/dist/tools/work-areas.js.map +1 -0
- package/dist/utils.d.ts +35 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +97 -0
- package/dist/utils.js.map +1 -1
- package/dist/write-safety.d.ts +229 -2
- package/dist/write-safety.d.ts.map +1 -1
- package/dist/write-safety.js +42 -3
- package/dist/write-safety.js.map +1 -1
- package/llms.txt +2 -2
- package/package.json +2 -2
package/dist/api/ats.js
ADDED
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ATS (Applicant Tracking System) API endpoints
|
|
3
|
+
*/
|
|
4
|
+
import { fetchList, fetchOne, postOne, patchOne, deleteOne, postAction } from '../http-client.js';
|
|
5
|
+
import { cache, cached, CACHE_TTL, CacheManager } from '../cache.js';
|
|
6
|
+
import { buildPaginationParams, sliceForPagination, } from '../pagination.js';
|
|
7
|
+
import { AuditAction, auditedOperation } from '../audit.js';
|
|
8
|
+
import { validateId } from '../utils.js';
|
|
9
|
+
import { ENDPOINTS, endpointWithId, endpointWithAction } from '../endpoints.js';
|
|
10
|
+
// ============================================================================
|
|
11
|
+
// ATS - READ endpoints
|
|
12
|
+
// ============================================================================
|
|
13
|
+
/**
|
|
14
|
+
* List all job postings
|
|
15
|
+
*/
|
|
16
|
+
export async function listJobPostings(options) {
|
|
17
|
+
const params = buildPaginationParams(options);
|
|
18
|
+
const postings = await cached(CacheManager.key('job_postings', options), () => fetchList(ENDPOINTS.jobPostings), CACHE_TTL.default);
|
|
19
|
+
return sliceForPagination(postings, params);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Get a specific job posting by ID
|
|
23
|
+
*/
|
|
24
|
+
export async function getJobPosting(id) {
|
|
25
|
+
validateId(id, 'job posting');
|
|
26
|
+
return cached(`job_posting:${id}`, () => fetchOne(endpointWithId(ENDPOINTS.jobPostings, id)), CACHE_TTL.default);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* List all candidates
|
|
30
|
+
*/
|
|
31
|
+
export async function listCandidates(options) {
|
|
32
|
+
const params = buildPaginationParams(options);
|
|
33
|
+
const candidates = await fetchList(ENDPOINTS.candidates);
|
|
34
|
+
return sliceForPagination(candidates, params);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Get a specific candidate by ID
|
|
38
|
+
*/
|
|
39
|
+
export async function getCandidate(id) {
|
|
40
|
+
validateId(id, 'candidate');
|
|
41
|
+
return fetchOne(endpointWithId(ENDPOINTS.candidates, id));
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* List all applications
|
|
45
|
+
*/
|
|
46
|
+
export async function listApplications(jobPostingId, options) {
|
|
47
|
+
const params = buildPaginationParams(options);
|
|
48
|
+
const queryParams = {};
|
|
49
|
+
if (jobPostingId)
|
|
50
|
+
queryParams.job_posting_id = jobPostingId;
|
|
51
|
+
const applications = await fetchList(ENDPOINTS.applications, {
|
|
52
|
+
params: queryParams,
|
|
53
|
+
});
|
|
54
|
+
return sliceForPagination(applications, params);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get a specific application by ID
|
|
58
|
+
*/
|
|
59
|
+
export async function getApplication(id) {
|
|
60
|
+
validateId(id, 'application');
|
|
61
|
+
return fetchOne(endpointWithId(ENDPOINTS.applications, id));
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* List all hiring stages
|
|
65
|
+
*/
|
|
66
|
+
export async function listHiringStages() {
|
|
67
|
+
return cached('hiring_stages:all', () => fetchList(ENDPOINTS.hiringStages), CACHE_TTL.default);
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Get a specific hiring stage by ID
|
|
71
|
+
*/
|
|
72
|
+
export async function getHiringStage(id) {
|
|
73
|
+
validateId(id, 'hiring stage');
|
|
74
|
+
return fetchOne(endpointWithId(ENDPOINTS.hiringStages, id));
|
|
75
|
+
}
|
|
76
|
+
// ============================================================================
|
|
77
|
+
// ATS - WRITE endpoints
|
|
78
|
+
// ============================================================================
|
|
79
|
+
/**
|
|
80
|
+
* Create a job posting
|
|
81
|
+
*/
|
|
82
|
+
export async function createJobPosting(input) {
|
|
83
|
+
return auditedOperation(AuditAction.CREATE, 'job_posting', undefined, async () => {
|
|
84
|
+
const posting = await postOne(ENDPOINTS.jobPostings, input);
|
|
85
|
+
cache.invalidatePrefix('job_postings');
|
|
86
|
+
return posting;
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Update a job posting
|
|
91
|
+
*/
|
|
92
|
+
export async function updateJobPosting(id, input) {
|
|
93
|
+
validateId(id, 'job posting');
|
|
94
|
+
return auditedOperation(AuditAction.UPDATE, 'job_posting', id, async () => {
|
|
95
|
+
const posting = await patchOne(endpointWithId(ENDPOINTS.jobPostings, id), input);
|
|
96
|
+
cache.invalidate(`job_posting:${id}`);
|
|
97
|
+
cache.invalidatePrefix('job_postings');
|
|
98
|
+
return posting;
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Delete a job posting
|
|
103
|
+
*/
|
|
104
|
+
export async function deleteJobPosting(id) {
|
|
105
|
+
validateId(id, 'job posting');
|
|
106
|
+
return auditedOperation(AuditAction.DELETE, 'job_posting', id, async () => {
|
|
107
|
+
await deleteOne(endpointWithId(ENDPOINTS.jobPostings, id));
|
|
108
|
+
cache.invalidate(`job_posting:${id}`);
|
|
109
|
+
cache.invalidatePrefix('job_postings');
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Create a candidate
|
|
114
|
+
*/
|
|
115
|
+
export async function createCandidate(input) {
|
|
116
|
+
return auditedOperation(AuditAction.CREATE, 'candidate', undefined, async () => {
|
|
117
|
+
return postOne(ENDPOINTS.candidates, input);
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Update a candidate
|
|
122
|
+
*/
|
|
123
|
+
export async function updateCandidate(id, input) {
|
|
124
|
+
validateId(id, 'candidate');
|
|
125
|
+
return auditedOperation(AuditAction.UPDATE, 'candidate', id, async () => {
|
|
126
|
+
return patchOne(endpointWithId(ENDPOINTS.candidates, id), input);
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Delete a candidate
|
|
131
|
+
*/
|
|
132
|
+
export async function deleteCandidate(id) {
|
|
133
|
+
validateId(id, 'candidate');
|
|
134
|
+
return auditedOperation(AuditAction.DELETE, 'candidate', id, async () => {
|
|
135
|
+
await deleteOne(endpointWithId(ENDPOINTS.candidates, id));
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Create an application
|
|
140
|
+
*/
|
|
141
|
+
export async function createApplication(input) {
|
|
142
|
+
return auditedOperation(AuditAction.CREATE, 'application', undefined, async () => {
|
|
143
|
+
return postOne(ENDPOINTS.applications, input);
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Update an application
|
|
148
|
+
*/
|
|
149
|
+
export async function updateApplication(id, input) {
|
|
150
|
+
validateId(id, 'application');
|
|
151
|
+
return auditedOperation(AuditAction.UPDATE, 'application', id, async () => {
|
|
152
|
+
return patchOne(endpointWithId(ENDPOINTS.applications, id), input);
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Delete an application
|
|
157
|
+
*/
|
|
158
|
+
export async function deleteApplication(id) {
|
|
159
|
+
validateId(id, 'application');
|
|
160
|
+
return auditedOperation(AuditAction.DELETE, 'application', id, async () => {
|
|
161
|
+
await deleteOne(endpointWithId(ENDPOINTS.applications, id));
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Advance an application to the next stage
|
|
166
|
+
*/
|
|
167
|
+
export async function advanceApplication(id) {
|
|
168
|
+
validateId(id, 'application');
|
|
169
|
+
return auditedOperation(AuditAction.UPDATE, 'application', id, async () => {
|
|
170
|
+
return postAction(endpointWithAction(ENDPOINTS.applications, id, 'apply'));
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=ats.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ats.js","sourceRoot":"","sources":["../../src/api/ats.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attendance API endpoints: Shifts
|
|
3
|
+
*/
|
|
4
|
+
import { type PaginatedResponse } from '../pagination.js';
|
|
5
|
+
import type { Shift, CreateShiftInput, UpdateShiftInput } from '../schemas.js';
|
|
6
|
+
import type { ListShiftsOptions } from '../types.js';
|
|
7
|
+
/**
|
|
8
|
+
* List shifts with optional filtering
|
|
9
|
+
*/
|
|
10
|
+
export declare function listShifts(options?: ListShiftsOptions): Promise<PaginatedResponse<Shift>>;
|
|
11
|
+
/**
|
|
12
|
+
* Get a specific shift by ID
|
|
13
|
+
*/
|
|
14
|
+
export declare function getShift(id: number): Promise<Shift>;
|
|
15
|
+
/**
|
|
16
|
+
* Create a new shift
|
|
17
|
+
*/
|
|
18
|
+
export declare function createShift(input: CreateShiftInput): Promise<Shift>;
|
|
19
|
+
/**
|
|
20
|
+
* Update a shift
|
|
21
|
+
*/
|
|
22
|
+
export declare function updateShift(id: number, input: UpdateShiftInput): Promise<Shift>;
|
|
23
|
+
/**
|
|
24
|
+
* Delete a shift
|
|
25
|
+
*/
|
|
26
|
+
export declare function deleteShift(id: number): Promise<void>;
|
|
27
|
+
//# sourceMappingURL=attendance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attendance.d.ts","sourceRoot":"","sources":["../../src/api/attendance.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EAA2C,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACnG,OAAO,KAAK,EAAE,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAI/E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAe/F;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAIzD;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,CAKzE;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,KAAK,CAAC,CAOrF;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM3D"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Attendance API endpoints: Shifts
|
|
3
|
+
*/
|
|
4
|
+
import { fetchList, fetchOne, postOne, patchOne, deleteOne } from '../http-client.js';
|
|
5
|
+
import { buildPaginationParams, paginateResponse } from '../pagination.js';
|
|
6
|
+
import { AuditAction, auditedOperation } from '../audit.js';
|
|
7
|
+
import { validateId } from '../utils.js';
|
|
8
|
+
import { ENDPOINTS, endpointWithId } from '../endpoints.js';
|
|
9
|
+
/**
|
|
10
|
+
* List shifts with optional filtering
|
|
11
|
+
*/
|
|
12
|
+
export async function listShifts(options) {
|
|
13
|
+
const params = buildPaginationParams(options);
|
|
14
|
+
const queryParams = {
|
|
15
|
+
page: params.page,
|
|
16
|
+
limit: params.limit,
|
|
17
|
+
};
|
|
18
|
+
if (options?.employee_id)
|
|
19
|
+
queryParams.employee_id = options.employee_id;
|
|
20
|
+
if (options?.clock_in_gte)
|
|
21
|
+
queryParams.clock_in_gte = options.clock_in_gte;
|
|
22
|
+
if (options?.clock_in_lte)
|
|
23
|
+
queryParams.clock_in_lte = options.clock_in_lte;
|
|
24
|
+
const shifts = await fetchList(ENDPOINTS.shifts, { params: queryParams });
|
|
25
|
+
return paginateResponse(shifts, params.page, params.limit);
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Get a specific shift by ID
|
|
29
|
+
*/
|
|
30
|
+
export async function getShift(id) {
|
|
31
|
+
validateId(id, 'shift');
|
|
32
|
+
return fetchOne(endpointWithId(ENDPOINTS.shifts, id));
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Create a new shift
|
|
36
|
+
*/
|
|
37
|
+
export async function createShift(input) {
|
|
38
|
+
return auditedOperation(AuditAction.CREATE, 'shift', undefined, async () => {
|
|
39
|
+
const shift = await postOne(ENDPOINTS.shifts, input);
|
|
40
|
+
return shift;
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Update a shift
|
|
45
|
+
*/
|
|
46
|
+
export async function updateShift(id, input) {
|
|
47
|
+
validateId(id, 'shift');
|
|
48
|
+
return auditedOperation(AuditAction.UPDATE, 'shift', id, async () => {
|
|
49
|
+
const shift = await patchOne(endpointWithId(ENDPOINTS.shifts, id), input);
|
|
50
|
+
return shift;
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Delete a shift
|
|
55
|
+
*/
|
|
56
|
+
export async function deleteShift(id) {
|
|
57
|
+
validateId(id, 'shift');
|
|
58
|
+
return auditedOperation(AuditAction.DELETE, 'shift', id, async () => {
|
|
59
|
+
await deleteOne(endpointWithId(ENDPOINTS.shifts, id));
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=attendance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attendance.js","sourceRoot":"","sources":["../../src/api/attendance.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACtF,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAA0B,MAAM,kBAAkB,CAAC;AAEnG,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAG5D;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,OAA2B;IAC1D,MAAM,MAAM,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAE9C,MAAM,WAAW,GAAgD;QAC/D,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,KAAK,EAAE,MAAM,CAAC,KAAK;KACpB,CAAC;IAEF,IAAI,OAAO,EAAE,WAAW;QAAE,WAAW,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACxE,IAAI,OAAO,EAAE,YAAY;QAAE,WAAW,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAC3E,IAAI,OAAO,EAAE,YAAY;QAAE,WAAW,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;IAE3E,MAAM,MAAM,GAAG,MAAM,SAAS,CAAQ,SAAS,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IAEjF,OAAO,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;AAC7D,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,EAAU;IACvC,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAExB,OAAO,QAAQ,CAAQ,cAAc,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;AAC/D,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAuB;IACvD,OAAO,gBAAgB,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,IAAI,EAAE;QACzE,MAAM,KAAK,GAAG,MAAM,OAAO,CAAQ,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC5D,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAAU,EAAE,KAAuB;IACnE,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAExB,OAAO,gBAAgB,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAQ,cAAc,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;QACjF,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAAU;IAC1C,UAAU,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAExB,OAAO,gBAAgB,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,IAAI,EAAE;QAClE,MAAM,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contract API endpoints
|
|
3
|
+
*/
|
|
4
|
+
import { type PaginatedResponse, type PaginationInput } from '../pagination.js';
|
|
5
|
+
import type { Employee, Contract } from '../schemas.js';
|
|
6
|
+
/**
|
|
7
|
+
* List contracts, optionally filtered by employee ID
|
|
8
|
+
*/
|
|
9
|
+
export declare function listContracts(employeeId?: number, options?: PaginationInput): Promise<PaginatedResponse<Contract>>;
|
|
10
|
+
/**
|
|
11
|
+
* Get the latest contract for an employee
|
|
12
|
+
* Returns the most recent contract based on effective_on date
|
|
13
|
+
*/
|
|
14
|
+
export declare function getLatestContract(employeeId: number): Promise<Contract | null>;
|
|
15
|
+
/**
|
|
16
|
+
* Employee with their latest contract data
|
|
17
|
+
*/
|
|
18
|
+
export interface EmployeeWithContract {
|
|
19
|
+
employee: Employee;
|
|
20
|
+
contract: Contract | null;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Get an employee with their latest contract
|
|
24
|
+
* Combines employee data with compensation/job role info from their contract
|
|
25
|
+
*/
|
|
26
|
+
export declare function getEmployeeWithContract(employeeId: number): Promise<EmployeeWithContract>;
|
|
27
|
+
/**
|
|
28
|
+
* List employees by job role ID
|
|
29
|
+
* Uses contract data to find employees assigned to a specific job role
|
|
30
|
+
*
|
|
31
|
+
* Note: Job role assignment is stored in contracts (job_catalog_role_id),
|
|
32
|
+
* not on the employee object itself. This is an API design choice by Factorial.
|
|
33
|
+
*/
|
|
34
|
+
export declare function listEmployeesByJobRole(jobRoleId: number, options?: PaginationInput): Promise<PaginatedResponse<EmployeeWithContract>>;
|
|
35
|
+
/**
|
|
36
|
+
* List employees by job level ID
|
|
37
|
+
* Uses contract data to find employees at a specific job level
|
|
38
|
+
*/
|
|
39
|
+
export declare function listEmployeesByJobLevel(jobLevelId: number, options?: PaginationInput): Promise<PaginatedResponse<EmployeeWithContract>>;
|
|
40
|
+
//# sourceMappingURL=contracts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.d.ts","sourceRoot":"","sources":["../../src/api/contracts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACrB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAKxD;;GAEG;AACH,wBAAsB,aAAa,CACjC,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAqBtC;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAuBpF;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAU/F;AAED;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,CAAC,CAqDlD;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,eAAe,GACxB,OAAO,CAAC,iBAAiB,CAAC,oBAAoB,CAAC,CAAC,CAoDlD"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Contract API endpoints
|
|
3
|
+
*/
|
|
4
|
+
import { fetchList } from '../http-client.js';
|
|
5
|
+
import { cached, CACHE_TTL } from '../cache.js';
|
|
6
|
+
import { buildPaginationParams, sliceForPagination, } from '../pagination.js';
|
|
7
|
+
import { validateId } from '../utils.js';
|
|
8
|
+
import { ENDPOINTS } from '../endpoints.js';
|
|
9
|
+
import { getEmployee } from './employees.js';
|
|
10
|
+
/**
|
|
11
|
+
* List contracts, optionally filtered by employee ID
|
|
12
|
+
*/
|
|
13
|
+
export async function listContracts(employeeId, options) {
|
|
14
|
+
if (employeeId !== undefined) {
|
|
15
|
+
validateId(employeeId, 'employee');
|
|
16
|
+
}
|
|
17
|
+
const params = buildPaginationParams(options);
|
|
18
|
+
// Note: The API doesn't reliably filter by employee_id query param,
|
|
19
|
+
// so we fetch all contracts and filter client-side
|
|
20
|
+
const allContracts = await cached('contracts:all', () => fetchList(ENDPOINTS.contracts), CACHE_TTL.contracts);
|
|
21
|
+
const filtered = employeeId !== undefined
|
|
22
|
+
? allContracts.filter(c => c.employee_id === employeeId)
|
|
23
|
+
: allContracts;
|
|
24
|
+
return sliceForPagination(filtered, params);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Get the latest contract for an employee
|
|
28
|
+
* Returns the most recent contract based on effective_on date
|
|
29
|
+
*/
|
|
30
|
+
export async function getLatestContract(employeeId) {
|
|
31
|
+
validateId(employeeId, 'employee');
|
|
32
|
+
const allContracts = await cached('contracts:all', () => fetchList(ENDPOINTS.contracts), CACHE_TTL.contracts);
|
|
33
|
+
const employeeContracts = allContracts.filter(c => c.employee_id === employeeId);
|
|
34
|
+
if (employeeContracts.length === 0) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
// Sort by effective_on descending (most recent first)
|
|
38
|
+
employeeContracts.sort((a, b) => {
|
|
39
|
+
const dateA = a.effective_on ? new Date(a.effective_on).getTime() : 0;
|
|
40
|
+
const dateB = b.effective_on ? new Date(b.effective_on).getTime() : 0;
|
|
41
|
+
return dateB - dateA;
|
|
42
|
+
});
|
|
43
|
+
return employeeContracts[0];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get an employee with their latest contract
|
|
47
|
+
* Combines employee data with compensation/job role info from their contract
|
|
48
|
+
*/
|
|
49
|
+
export async function getEmployeeWithContract(employeeId) {
|
|
50
|
+
validateId(employeeId, 'employee');
|
|
51
|
+
// Fetch employee and contract in parallel
|
|
52
|
+
const [employee, contract] = await Promise.all([
|
|
53
|
+
getEmployee(employeeId),
|
|
54
|
+
getLatestContract(employeeId),
|
|
55
|
+
]);
|
|
56
|
+
return { employee, contract };
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* List employees by job role ID
|
|
60
|
+
* Uses contract data to find employees assigned to a specific job role
|
|
61
|
+
*
|
|
62
|
+
* Note: Job role assignment is stored in contracts (job_catalog_role_id),
|
|
63
|
+
* not on the employee object itself. This is an API design choice by Factorial.
|
|
64
|
+
*/
|
|
65
|
+
export async function listEmployeesByJobRole(jobRoleId, options) {
|
|
66
|
+
validateId(jobRoleId, 'job role');
|
|
67
|
+
const params = buildPaginationParams(options);
|
|
68
|
+
// Get all contracts and filter by job role
|
|
69
|
+
const allContracts = await cached('contracts:all', () => fetchList(ENDPOINTS.contracts), CACHE_TTL.contracts);
|
|
70
|
+
// Find contracts with this job role, grouped by employee (latest contract per employee)
|
|
71
|
+
const latestContractsByEmployee = new Map();
|
|
72
|
+
for (const contract of allContracts) {
|
|
73
|
+
if (contract.job_catalog_role_id === jobRoleId) {
|
|
74
|
+
const existing = latestContractsByEmployee.get(contract.employee_id);
|
|
75
|
+
if (!existing) {
|
|
76
|
+
latestContractsByEmployee.set(contract.employee_id, contract);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
// Keep the more recent contract
|
|
80
|
+
const existingDate = existing.effective_on ? new Date(existing.effective_on).getTime() : 0;
|
|
81
|
+
const contractDate = contract.effective_on ? new Date(contract.effective_on).getTime() : 0;
|
|
82
|
+
if (contractDate > existingDate) {
|
|
83
|
+
latestContractsByEmployee.set(contract.employee_id, contract);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
const employeeIds = Array.from(latestContractsByEmployee.keys());
|
|
89
|
+
if (employeeIds.length === 0) {
|
|
90
|
+
return { data: [], meta: { page: params.page, limit: params.limit, total: 0 } };
|
|
91
|
+
}
|
|
92
|
+
// Get all employees
|
|
93
|
+
const allEmployees = await cached('employees:all', () => fetchList(ENDPOINTS.employees), CACHE_TTL.employees);
|
|
94
|
+
// Match employees with their contracts
|
|
95
|
+
const results = [];
|
|
96
|
+
for (const emp of allEmployees) {
|
|
97
|
+
const contract = latestContractsByEmployee.get(emp.id);
|
|
98
|
+
if (contract) {
|
|
99
|
+
results.push({ employee: emp, contract });
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return sliceForPagination(results, params);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* List employees by job level ID
|
|
106
|
+
* Uses contract data to find employees at a specific job level
|
|
107
|
+
*/
|
|
108
|
+
export async function listEmployeesByJobLevel(jobLevelId, options) {
|
|
109
|
+
validateId(jobLevelId, 'job level');
|
|
110
|
+
const params = buildPaginationParams(options);
|
|
111
|
+
// Get all contracts and filter by job level
|
|
112
|
+
const allContracts = await cached('contracts:all', () => fetchList(ENDPOINTS.contracts), CACHE_TTL.contracts);
|
|
113
|
+
// Find contracts with this job level, grouped by employee (latest contract per employee)
|
|
114
|
+
const latestContractsByEmployee = new Map();
|
|
115
|
+
for (const contract of allContracts) {
|
|
116
|
+
if (contract.job_catalog_level_id === jobLevelId) {
|
|
117
|
+
const existing = latestContractsByEmployee.get(contract.employee_id);
|
|
118
|
+
if (!existing) {
|
|
119
|
+
latestContractsByEmployee.set(contract.employee_id, contract);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
const existingDate = existing.effective_on ? new Date(existing.effective_on).getTime() : 0;
|
|
123
|
+
const contractDate = contract.effective_on ? new Date(contract.effective_on).getTime() : 0;
|
|
124
|
+
if (contractDate > existingDate) {
|
|
125
|
+
latestContractsByEmployee.set(contract.employee_id, contract);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
const employeeIds = Array.from(latestContractsByEmployee.keys());
|
|
131
|
+
if (employeeIds.length === 0) {
|
|
132
|
+
return { data: [], meta: { page: params.page, limit: params.limit, total: 0 } };
|
|
133
|
+
}
|
|
134
|
+
// Get all employees
|
|
135
|
+
const allEmployees = await cached('employees:all', () => fetchList(ENDPOINTS.employees), CACHE_TTL.employees);
|
|
136
|
+
// Match employees with their contracts
|
|
137
|
+
const results = [];
|
|
138
|
+
for (const emp of allEmployees) {
|
|
139
|
+
const contract = latestContractsByEmployee.get(emp.id);
|
|
140
|
+
if (contract) {
|
|
141
|
+
results.push({ employee: emp, contract });
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return sliceForPagination(results, params);
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=contracts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/api/contracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Document API endpoints: Folders, Documents, Downloads
|
|
3
|
+
*/
|
|
4
|
+
import { type PaginatedResponse } from '../pagination.js';
|
|
5
|
+
import type { Folder, Document } from '../schemas.js';
|
|
6
|
+
import type { ListDocumentsOptions } from '../types.js';
|
|
7
|
+
/**
|
|
8
|
+
* List all folders
|
|
9
|
+
*/
|
|
10
|
+
export declare function listFolders(): Promise<Folder[]>;
|
|
11
|
+
/**
|
|
12
|
+
* Get a specific folder by ID
|
|
13
|
+
*/
|
|
14
|
+
export declare function getFolder(id: number): Promise<Folder>;
|
|
15
|
+
/**
|
|
16
|
+
* List documents with optional filtering by folder
|
|
17
|
+
*/
|
|
18
|
+
export declare function listDocuments(options?: ListDocumentsOptions): Promise<PaginatedResponse<Document>>;
|
|
19
|
+
/**
|
|
20
|
+
* Get a specific document by ID
|
|
21
|
+
*
|
|
22
|
+
* Note: The Factorial API's individual document endpoint (/documents/documents/{id})
|
|
23
|
+
* can be unreliable, similar to the employee endpoint. This function implements a fallback
|
|
24
|
+
* to listing all documents and filtering if the direct endpoint fails or returns no data.
|
|
25
|
+
*
|
|
26
|
+
* IMPORTANT: Due to Factorial API limitations, this function may not find employee-specific
|
|
27
|
+
* documents that were returned by listDocuments({ employee_ids: [...] }). This is because
|
|
28
|
+
* the fallback query cannot access all employee documents. For download operations,
|
|
29
|
+
* prefer using the document object directly (from listDocuments) rather than re-fetching by ID.
|
|
30
|
+
*
|
|
31
|
+
* @param id - The document ID
|
|
32
|
+
* @returns The document object
|
|
33
|
+
* @throws Error if document is not found
|
|
34
|
+
*/
|
|
35
|
+
export declare function getDocument(id: number): Promise<Document>;
|
|
36
|
+
/**
|
|
37
|
+
* Response from the download-urls/bulk-create endpoint
|
|
38
|
+
*/
|
|
39
|
+
interface DownloadUrlResponse {
|
|
40
|
+
document_id: number;
|
|
41
|
+
url: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Get download URLs for documents using the bulk-create endpoint
|
|
45
|
+
*
|
|
46
|
+
* IMPORTANT: This endpoint requires OAuth2 authentication. API key authentication
|
|
47
|
+
* does not work for document downloads - this is a Factorial API limitation.
|
|
48
|
+
*
|
|
49
|
+
* @param documentIds - Array of document IDs to get download URLs for
|
|
50
|
+
* @returns Array of document IDs with their signed download URLs
|
|
51
|
+
* @throws Error if OAuth2 is not configured or authentication fails
|
|
52
|
+
*/
|
|
53
|
+
export declare function getDocumentDownloadUrls(documentIds: number[]): Promise<DownloadUrlResponse[]>;
|
|
54
|
+
/**
|
|
55
|
+
* Download a document by getting its signed URL and fetching the content
|
|
56
|
+
* @param idOrDocument - The document ID or a Document object (to avoid re-fetching metadata)
|
|
57
|
+
* @param outputDir - Directory to save the file to
|
|
58
|
+
* @returns Path to the downloaded file and metadata
|
|
59
|
+
*/
|
|
60
|
+
export declare function downloadDocument(idOrDocument: number | Document, outputDir: string): Promise<{
|
|
61
|
+
path: string;
|
|
62
|
+
document: Document;
|
|
63
|
+
}>;
|
|
64
|
+
/**
|
|
65
|
+
* Outcome of a bulk payslip download
|
|
66
|
+
*
|
|
67
|
+
* Failures are returned rather than swallowed, so a partial download cannot be
|
|
68
|
+
* reported as a complete one.
|
|
69
|
+
*/
|
|
70
|
+
export interface PayslipDownloadResult {
|
|
71
|
+
downloaded: Array<{
|
|
72
|
+
path: string;
|
|
73
|
+
document: Document;
|
|
74
|
+
}>;
|
|
75
|
+
failures: string[];
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Download all payslips for an employee
|
|
79
|
+
* @param employeeId - The employee ID
|
|
80
|
+
* @param outputDir - Directory to save files to
|
|
81
|
+
* @returns The payslips downloaded, and a description of any that failed
|
|
82
|
+
*/
|
|
83
|
+
export declare function downloadEmployeePayslips(employeeId: number, outputDir: string): Promise<PayslipDownloadResult>;
|
|
84
|
+
/**
|
|
85
|
+
* Download any employee document by ID
|
|
86
|
+
* @param documentId - The document ID
|
|
87
|
+
* @param outputDir - Directory to save the file to
|
|
88
|
+
* @returns Path to the downloaded file and metadata
|
|
89
|
+
*/
|
|
90
|
+
export declare function downloadEmployeeDocument(documentId: number, outputDir: string): Promise<{
|
|
91
|
+
path: string;
|
|
92
|
+
document: Document;
|
|
93
|
+
}>;
|
|
94
|
+
export {};
|
|
95
|
+
//# sourceMappingURL=documents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../src/api/documents.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,OAAO,EAA2C,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACnG,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAItD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAExD;;GAEG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAErD;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAI3D;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAqCtC;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,CAAC,CAoC/D;AAED;;GAEG;AACH,UAAU,mBAAmB;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;;;GASG;AACH,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EAAE,GACpB,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAoEhC;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,MAAM,GAAG,QAAQ,EAC/B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC,CA6C/C;AAED;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAC;IACxD,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,qBAAqB,CAAC,CAmDhC;AAED;;;;;GAKG;AACH,wBAAsB,wBAAwB,CAC5C,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,QAAQ,CAAA;CAAE,CAAC,CAE/C"}
|