@teamso/teamso-mcp 0.0.0-stage → 1.2.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/CHANGELOG.md +136 -0
- package/LICENSE +21 -0
- package/README.md +506 -2
- package/dist/client.d.ts +215 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +797 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts/index.d.ts +12 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +58 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/server.d.ts +28 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +58 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/account.d.ts +4 -0
- package/dist/tools/account.d.ts.map +1 -0
- package/dist/tools/account.js +34 -0
- package/dist/tools/account.js.map +1 -0
- package/dist/tools/api.d.ts +13 -0
- package/dist/tools/api.d.ts.map +1 -0
- package/dist/tools/api.js +982 -0
- package/dist/tools/api.js.map +1 -0
- package/dist/tools/approvals.d.ts +5 -0
- package/dist/tools/approvals.d.ts.map +1 -0
- package/dist/tools/approvals.js +120 -0
- package/dist/tools/approvals.js.map +1 -0
- package/dist/tools/communication.d.ts +4 -0
- package/dist/tools/communication.d.ts.map +1 -0
- package/dist/tools/communication.js +39 -0
- package/dist/tools/communication.js.map +1 -0
- package/dist/tools/employees.d.ts +5 -0
- package/dist/tools/employees.d.ts.map +1 -0
- package/dist/tools/employees.js +113 -0
- package/dist/tools/employees.js.map +1 -0
- package/dist/tools/help.d.ts +6 -0
- package/dist/tools/help.d.ts.map +1 -0
- package/dist/tools/help.js +171 -0
- package/dist/tools/help.js.map +1 -0
- package/dist/tools/index.d.ts +86 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +118 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/leave-support.d.ts +60 -0
- package/dist/tools/leave-support.d.ts.map +1 -0
- package/dist/tools/leave-support.js +185 -0
- package/dist/tools/leave-support.js.map +1 -0
- package/dist/tools/leave.d.ts +14 -0
- package/dist/tools/leave.d.ts.map +1 -0
- package/dist/tools/leave.js +388 -0
- package/dist/tools/leave.js.map +1 -0
- package/dist/tools/payroll.d.ts +5 -0
- package/dist/tools/payroll.d.ts.map +1 -0
- package/dist/tools/payroll.js +101 -0
- package/dist/tools/payroll.js.map +1 -0
- package/dist/tools/performance.d.ts +13 -0
- package/dist/tools/performance.d.ts.map +1 -0
- package/dist/tools/performance.js +592 -0
- package/dist/tools/performance.js.map +1 -0
- package/dist/tools/schemas.d.ts +2079 -0
- package/dist/tools/schemas.d.ts.map +1 -0
- package/dist/tools/schemas.js +460 -0
- package/dist/tools/schemas.js.map +1 -0
- package/dist/tools/shared.d.ts +20 -0
- package/dist/tools/shared.d.ts.map +1 -0
- package/dist/tools/shared.js +64 -0
- package/dist/tools/shared.js.map +1 -0
- package/dist/types.d.ts +545 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/api-endpoints.d.ts +130 -0
- package/dist/utils/api-endpoints.d.ts.map +1 -0
- package/dist/utils/api-endpoints.js +459 -0
- package/dist/utils/api-endpoints.js.map +1 -0
- package/dist/utils/dates.d.ts +27 -0
- package/dist/utils/dates.d.ts.map +1 -0
- package/dist/utils/dates.js +102 -0
- package/dist/utils/dates.js.map +1 -0
- package/dist/utils/format.d.ts +8 -0
- package/dist/utils/format.d.ts.map +1 -0
- package/dist/utils/format.js +26 -0
- package/dist/utils/format.js.map +1 -0
- package/dist/utils/help-search.d.ts +25 -0
- package/dist/utils/help-search.d.ts.map +1 -0
- package/dist/utils/help-search.js +93 -0
- package/dist/utils/help-search.js.map +1 -0
- package/dist/utils/json-schema-dialect.d.ts +12 -0
- package/dist/utils/json-schema-dialect.d.ts.map +1 -0
- package/dist/utils/json-schema-dialect.js +146 -0
- package/dist/utils/json-schema-dialect.js.map +1 -0
- package/dist/utils/results.d.ts +27 -0
- package/dist/utils/results.d.ts.map +1 -0
- package/dist/utils/results.js +88 -0
- package/dist/utils/results.js.map +1 -0
- package/dist/utils/structured.d.ts +89 -0
- package/dist/utils/structured.d.ts.map +1 -0
- package/dist/utils/structured.js +307 -0
- package/dist/utils/structured.js.map +1 -0
- package/dist/utils/text.d.ts +12 -0
- package/dist/utils/text.d.ts.map +1 -0
- package/dist/utils/text.js +46 -0
- package/dist/utils/text.js.map +1 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +6 -0
- package/dist/version.js.map +1 -0
- package/package.json +86 -4
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { z } from 'zod';
|
|
2
|
+
import type { HelpArticle, TeamsoAnnouncement, TeamsoAuthorizedEmployee, TeamsoGoal, TeamsoLeave, TeamsoLeavePolicyAssignment, TeamsoLeaveTypeBalance, TeamsoPayslip, TeamsoPerformancePeriod, TeamsoUser, TeamsoUserListItem, TeamsoUserSummary, TeamsoUserSummaryRef } from '../types.js';
|
|
3
|
+
import type { employeeSummarySchema, goalSchema, helpArticleSummarySchema, leaveSummarySchema, leaveTypeSchema, meOutputSchema, payslipSchema, pendingApprovalSchema, performancePeriodSchema } from '../tools/schemas.js';
|
|
4
|
+
/**
|
|
5
|
+
* Projections from Teamso API DTOs to the tool output schemas. Every function
|
|
6
|
+
* returns only schema fields, omitting empty values, so `structuredContent`
|
|
7
|
+
* validates against the published JSON Schema (which forbids unknown keys).
|
|
8
|
+
*/
|
|
9
|
+
export type HelpArticleSummary = z.infer<typeof helpArticleSummarySchema>;
|
|
10
|
+
export type MeProjection = z.infer<typeof meOutputSchema.user>;
|
|
11
|
+
export type LeaveTypeProjection = z.infer<typeof leaveTypeSchema>;
|
|
12
|
+
export type LeaveSummary = z.infer<typeof leaveSummarySchema>;
|
|
13
|
+
export type PendingApproval = z.infer<typeof pendingApprovalSchema>;
|
|
14
|
+
export type EmployeeSummary = z.infer<typeof employeeSummarySchema>;
|
|
15
|
+
export type PerformancePeriodProjection = z.infer<typeof performancePeriodSchema>;
|
|
16
|
+
export type GoalProjection = z.infer<typeof goalSchema>;
|
|
17
|
+
export type PayslipProjection = z.infer<typeof payslipSchema>;
|
|
18
|
+
export declare const HELP_RESOURCE_PREFIX = "teamso://how-to/";
|
|
19
|
+
export declare const TARGETED_PERFORMANCE_KEY = "targetedPerformance";
|
|
20
|
+
/** Teamso leave `state` codes (`LeaveConstants`). */
|
|
21
|
+
export declare const LEAVE_STATUSES: {
|
|
22
|
+
readonly pending_approval: 0;
|
|
23
|
+
readonly approved: 2;
|
|
24
|
+
readonly rejected: 3;
|
|
25
|
+
readonly awaiting_usage_approval: 4;
|
|
26
|
+
readonly completed: 5;
|
|
27
|
+
readonly awaiting_document: 6;
|
|
28
|
+
};
|
|
29
|
+
export type LeaveStatus = keyof typeof LEAVE_STATUSES;
|
|
30
|
+
export declare function leaveStatusName(code: number | undefined): string;
|
|
31
|
+
export declare function toHelpArticleSummary(article: HelpArticle, lang: string, siteOrigin: string): HelpArticleSummary;
|
|
32
|
+
export declare function absoluteHelpUrl(article: HelpArticle, siteOrigin: string): string;
|
|
33
|
+
export declare function fullNameOf(person: {
|
|
34
|
+
fullname?: string | null;
|
|
35
|
+
fullName?: string | null;
|
|
36
|
+
name?: string | null;
|
|
37
|
+
secondName?: string | null;
|
|
38
|
+
surname?: string | null;
|
|
39
|
+
} | null | undefined): string;
|
|
40
|
+
export declare function personRef(person: TeamsoUserSummaryRef | null | undefined): {
|
|
41
|
+
id: string;
|
|
42
|
+
fullName: string;
|
|
43
|
+
} | null;
|
|
44
|
+
export declare function toMe(user: TeamsoUser): MeProjection;
|
|
45
|
+
export declare function toLeavePolicy(assignment: TeamsoLeavePolicyAssignment): {
|
|
46
|
+
leavePolicyUserId: string;
|
|
47
|
+
id?: string;
|
|
48
|
+
name?: string;
|
|
49
|
+
};
|
|
50
|
+
export declare function toLeaveType(balance: TeamsoLeaveTypeBalance): LeaveTypeProjection;
|
|
51
|
+
export declare function toLeaveSummary(leave: TeamsoLeave): LeaveSummary;
|
|
52
|
+
export declare function toPendingApproval(leave: TeamsoLeave): PendingApproval;
|
|
53
|
+
/** `closedPayrollPeriods` from a leave mutation result, as display strings. */
|
|
54
|
+
export declare function closedPayrollPeriodsOf(result: unknown): string[];
|
|
55
|
+
export declare function toEmployeeFromList(user: TeamsoUserListItem): EmployeeSummary;
|
|
56
|
+
export declare function toEmployeeFromAuthorized(employee: TeamsoAuthorizedEmployee): EmployeeSummary;
|
|
57
|
+
export declare function toEmployeeProfile(summary: TeamsoUserSummary): {
|
|
58
|
+
id: string;
|
|
59
|
+
fullName: string;
|
|
60
|
+
email?: string;
|
|
61
|
+
phone?: string;
|
|
62
|
+
branch?: string;
|
|
63
|
+
department?: string;
|
|
64
|
+
position?: string;
|
|
65
|
+
manager: {
|
|
66
|
+
id?: string;
|
|
67
|
+
fullName: string;
|
|
68
|
+
} | null;
|
|
69
|
+
workLocation?: string;
|
|
70
|
+
workplace?: string;
|
|
71
|
+
};
|
|
72
|
+
export declare function toPerformancePeriod(period: TeamsoPerformancePeriod): PerformancePeriodProjection;
|
|
73
|
+
export declare function targetValueOf(goal: TeamsoGoal): number | undefined;
|
|
74
|
+
export declare function toGoal(goal: TeamsoGoal): GoalProjection;
|
|
75
|
+
export declare function toAnnouncement(announcement: TeamsoAnnouncement): {
|
|
76
|
+
id: string;
|
|
77
|
+
type?: string;
|
|
78
|
+
text: string;
|
|
79
|
+
date?: string;
|
|
80
|
+
sharedBy?: string;
|
|
81
|
+
coverPhotoUrl?: string;
|
|
82
|
+
};
|
|
83
|
+
export declare function toPayslip(payslip: TeamsoPayslip): PayslipProjection;
|
|
84
|
+
export declare function roundDays(value: number): number;
|
|
85
|
+
export declare function optionalString(value: string | null | undefined): string | undefined;
|
|
86
|
+
export declare function optionalNumber(value: number | string | null | undefined): number | undefined;
|
|
87
|
+
/** Drops `undefined` fields so optional schema keys are omitted, not `undefined`. */
|
|
88
|
+
export declare function compact<T extends Record<string, unknown>>(value: T): T;
|
|
89
|
+
//# sourceMappingURL=structured.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structured.d.ts","sourceRoot":"","sources":["../../src/utils/structured.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
import { toDisplayDateTime, toIsoDay } from './dates.js';
|
|
2
|
+
import { htmlToText } from './text.js';
|
|
3
|
+
export const HELP_RESOURCE_PREFIX = 'teamso://how-to/';
|
|
4
|
+
export const TARGETED_PERFORMANCE_KEY = 'targetedPerformance';
|
|
5
|
+
/** Teamso leave `state` codes (`LeaveConstants`). */
|
|
6
|
+
export const LEAVE_STATUSES = {
|
|
7
|
+
pending_approval: 0,
|
|
8
|
+
approved: 2,
|
|
9
|
+
rejected: 3,
|
|
10
|
+
awaiting_usage_approval: 4,
|
|
11
|
+
completed: 5,
|
|
12
|
+
awaiting_document: 6,
|
|
13
|
+
};
|
|
14
|
+
export function leaveStatusName(code) {
|
|
15
|
+
const entry = Object.entries(LEAVE_STATUSES).find(([, value]) => value === code);
|
|
16
|
+
return entry ? entry[0] : code === undefined ? 'unknown' : `unknown_${code}`;
|
|
17
|
+
}
|
|
18
|
+
// ------------------------------------------------------------------- help
|
|
19
|
+
export function toHelpArticleSummary(article, lang, siteOrigin) {
|
|
20
|
+
return {
|
|
21
|
+
id: article.id,
|
|
22
|
+
title: article.title,
|
|
23
|
+
summary: article.summary ?? '',
|
|
24
|
+
module: article.dir,
|
|
25
|
+
roles: article.roles ?? [],
|
|
26
|
+
url: absoluteHelpUrl(article, siteOrigin),
|
|
27
|
+
resource: `${HELP_RESOURCE_PREFIX}${article.lang ?? lang}/${article.id}`,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
export function absoluteHelpUrl(article, siteOrigin) {
|
|
31
|
+
const url = article.url ?? '';
|
|
32
|
+
if (/^https?:\/\//.test(url))
|
|
33
|
+
return url;
|
|
34
|
+
return `${siteOrigin}${url.startsWith('/') ? '' : '/'}${url}`;
|
|
35
|
+
}
|
|
36
|
+
// ---------------------------------------------------------------- account
|
|
37
|
+
export function fullNameOf(person) {
|
|
38
|
+
if (!person)
|
|
39
|
+
return '';
|
|
40
|
+
const full = person.fullname || person.fullName;
|
|
41
|
+
if (full && full.trim())
|
|
42
|
+
return full.trim();
|
|
43
|
+
return [person.name, person.secondName, person.surname]
|
|
44
|
+
.filter(part => part && part.trim())
|
|
45
|
+
.join(' ')
|
|
46
|
+
.trim();
|
|
47
|
+
}
|
|
48
|
+
export function personRef(person) {
|
|
49
|
+
if (!person?.id)
|
|
50
|
+
return null;
|
|
51
|
+
return { id: person.id, fullName: fullNameOf(person) || person.id };
|
|
52
|
+
}
|
|
53
|
+
export function toMe(user) {
|
|
54
|
+
const position = user.userTask?.userPosition;
|
|
55
|
+
const permissions = [...new Set((user.permissions ?? [])
|
|
56
|
+
.map(permission => permission.code)
|
|
57
|
+
.filter((code) => Boolean(code)))].sort();
|
|
58
|
+
return compact({
|
|
59
|
+
id: user.id,
|
|
60
|
+
fullName: fullNameOf(user) || user.id,
|
|
61
|
+
name: optionalString(user.name),
|
|
62
|
+
surname: optionalString(user.surname),
|
|
63
|
+
email: optionalString(user.email),
|
|
64
|
+
personnelId: optionalString(user.personnelId),
|
|
65
|
+
company: compact({
|
|
66
|
+
id: optionalString(user.companyId),
|
|
67
|
+
name: optionalString(user.companyName),
|
|
68
|
+
}),
|
|
69
|
+
department: optionalString(position?.department?.name),
|
|
70
|
+
position: optionalString(position?.name),
|
|
71
|
+
branch: optionalString(user.branchName?.name),
|
|
72
|
+
manager: personRef(user.userManager),
|
|
73
|
+
roles: (user.roles ?? []).map(role => role.name).filter((name) => Boolean(name)),
|
|
74
|
+
permissions,
|
|
75
|
+
payrollManager: user.payrollManager === true,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
// ------------------------------------------------------------------ leave
|
|
79
|
+
export function toLeavePolicy(assignment) {
|
|
80
|
+
return compact({
|
|
81
|
+
leavePolicyUserId: assignment.leavePolicyUserId,
|
|
82
|
+
id: optionalString(assignment.leavePolicy?.id),
|
|
83
|
+
name: optionalString(assignment.leavePolicy?.name),
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
export function toLeaveType(balance) {
|
|
87
|
+
const type = balance.leaveTypeRequestModel;
|
|
88
|
+
return compact({
|
|
89
|
+
id: type.id,
|
|
90
|
+
name: type.name || type.id,
|
|
91
|
+
remainingDays: roundDays(balance.right ?? 0),
|
|
92
|
+
isDefault: type.primary === true,
|
|
93
|
+
paid: type.paid === true,
|
|
94
|
+
limitation: optionalString(type.limitation),
|
|
95
|
+
dayLimit: typeof type.dayLimit === 'number' && type.dayLimit > 0 ? type.dayLimit : undefined,
|
|
96
|
+
minDaysPerRequest: optionalNumber(type.leastDayCount),
|
|
97
|
+
maxDaysPerRequest: optionalNumber(type.mostDayCount),
|
|
98
|
+
documentRequired: type.documentRequired === true,
|
|
99
|
+
descriptionRequired: type.descriptionRequired === true,
|
|
100
|
+
birthdayLeave: type.birthdayLeave === true,
|
|
101
|
+
countsCalendarDays: type.overriddenHolidays === true,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
export function toLeaveSummary(leave) {
|
|
105
|
+
return compact({
|
|
106
|
+
id: leave.id,
|
|
107
|
+
leaveTypeId: optionalString(leave.leaveTypeRequestModel?.id ?? leave.leaveTypeId),
|
|
108
|
+
leaveTypeName: optionalString(leave.leaveTypeRequestModel?.name),
|
|
109
|
+
start: optionalString(leave.startDate),
|
|
110
|
+
end: optionalString(leave.endDate),
|
|
111
|
+
workingDays: typeof leave.totalLeaveDay === 'number' ? roundDays(leave.totalLeaveDay) : undefined,
|
|
112
|
+
status: leaveStatusName(leave.state),
|
|
113
|
+
statusCode: leave.state,
|
|
114
|
+
description: optionalString(leave.description),
|
|
115
|
+
answer: optionalString(leave.answer),
|
|
116
|
+
createdAt: toDisplayDateTime(leave.createdAt ?? undefined),
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
export function toPendingApproval(leave) {
|
|
120
|
+
return compact({
|
|
121
|
+
leaveId: leave.id,
|
|
122
|
+
requester: leave.user?.id
|
|
123
|
+
? personRef(leave.user)
|
|
124
|
+
: leave.userId ? { id: leave.userId, fullName: leave.userId } : null,
|
|
125
|
+
leaveTypeName: optionalString(leave.leaveTypeRequestModel?.name),
|
|
126
|
+
start: optionalString(leave.startDate),
|
|
127
|
+
end: optionalString(leave.endDate),
|
|
128
|
+
workingDays: typeof leave.totalLeaveDay === 'number' ? roundDays(leave.totalLeaveDay) : undefined,
|
|
129
|
+
description: optionalString(leave.description),
|
|
130
|
+
approvalStep: leave.approvalQueue,
|
|
131
|
+
createdAt: toDisplayDateTime(leave.createdAt ?? undefined),
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
/** `closedPayrollPeriods` from a leave mutation result, as display strings. */
|
|
135
|
+
export function closedPayrollPeriodsOf(result) {
|
|
136
|
+
if (!isRecord(result) || !Array.isArray(result.closedPayrollPeriods))
|
|
137
|
+
return [];
|
|
138
|
+
return result.closedPayrollPeriods
|
|
139
|
+
.map(period => {
|
|
140
|
+
if (typeof period === 'string')
|
|
141
|
+
return period;
|
|
142
|
+
if (isRecord(period)) {
|
|
143
|
+
const label = period.term ?? period.period ?? period.name ?? period.id;
|
|
144
|
+
return typeof label === 'string' ? label : JSON.stringify(period);
|
|
145
|
+
}
|
|
146
|
+
return String(period);
|
|
147
|
+
})
|
|
148
|
+
.filter(Boolean);
|
|
149
|
+
}
|
|
150
|
+
// -------------------------------------------------------------- employees
|
|
151
|
+
export function toEmployeeFromList(user) {
|
|
152
|
+
const position = user.userTask?.userPosition;
|
|
153
|
+
return compact({
|
|
154
|
+
id: user.id,
|
|
155
|
+
fullName: fullNameOf(user) || user.id,
|
|
156
|
+
email: optionalString(user.email),
|
|
157
|
+
personnelId: optionalString(user.personnelId),
|
|
158
|
+
department: optionalString(position?.department?.name),
|
|
159
|
+
position: optionalString(position?.name),
|
|
160
|
+
branch: optionalString(user.branch?.name),
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
export function toEmployeeFromAuthorized(employee) {
|
|
164
|
+
return compact({
|
|
165
|
+
id: employee.id,
|
|
166
|
+
fullName: fullNameOf(employee) || employee.id,
|
|
167
|
+
email: optionalString(employee.email),
|
|
168
|
+
personnelId: optionalString(employee.personnelId),
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
export function toEmployeeProfile(summary) {
|
|
172
|
+
return compact({
|
|
173
|
+
id: summary.id,
|
|
174
|
+
fullName: optionalString(summary.fullname) ?? summary.id,
|
|
175
|
+
email: optionalString(summary.email),
|
|
176
|
+
phone: optionalString(summary.tel),
|
|
177
|
+
branch: optionalString(summary.branchName),
|
|
178
|
+
department: optionalString(summary.departmentName),
|
|
179
|
+
position: optionalString(summary.positionName),
|
|
180
|
+
manager: summary.manager || summary.managerId
|
|
181
|
+
? compact({
|
|
182
|
+
id: optionalString(summary.managerId),
|
|
183
|
+
fullName: optionalString(summary.manager) ?? summary.managerId ?? '',
|
|
184
|
+
})
|
|
185
|
+
: null,
|
|
186
|
+
workLocation: optionalString(summary.workLocation),
|
|
187
|
+
workplace: optionalString(summary.workPlaceName),
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
// ------------------------------------------------------------ performance
|
|
191
|
+
export function toPerformancePeriod(period) {
|
|
192
|
+
const scale = [...(period.evaluationScale ?? [])]
|
|
193
|
+
.sort((a, b) => (a.displayOrder ?? 0) - (b.displayOrder ?? 0))
|
|
194
|
+
.map(item => compact({
|
|
195
|
+
label: item.label ?? '',
|
|
196
|
+
value: optionalNumber(item.value),
|
|
197
|
+
minPercentage: optionalNumber(item.minPercentage),
|
|
198
|
+
maxPercentage: optionalNumber(item.maxPercentage),
|
|
199
|
+
}));
|
|
200
|
+
return compact({
|
|
201
|
+
id: period.id,
|
|
202
|
+
title: period.title,
|
|
203
|
+
status: optionalString(period.status),
|
|
204
|
+
startDate: toIsoDay(period.startDate),
|
|
205
|
+
endDate: toIsoDay(period.endDate),
|
|
206
|
+
targetEntryStartDate: toIsoDay(period.targetEntryStartDate),
|
|
207
|
+
targetEntryEndDate: toIsoDay(period.targetEntryEndDate),
|
|
208
|
+
targetEntryOpen: period.isTargetEntryOpen === true,
|
|
209
|
+
targetEntryLocked: period.isTargetEntryLocked === true,
|
|
210
|
+
goalEntryBy: optionalString(period.goalEntryBy),
|
|
211
|
+
successCriteriaEntryBy: optionalString(period.successCriteriaEntryBy),
|
|
212
|
+
minimumGoalCount: optionalNumber(period.minimumGoalCount),
|
|
213
|
+
employeeCanSelectOther: period.employeeCanSelectOther === true,
|
|
214
|
+
evaluationScale: scale,
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
export function targetValueOf(goal) {
|
|
218
|
+
if (typeof goal.targetValue === 'number')
|
|
219
|
+
return goal.targetValue;
|
|
220
|
+
const scores = goal.targetValueDefinition?.scores ?? [];
|
|
221
|
+
const target = scores.find(score => score.key === TARGETED_PERFORMANCE_KEY) ?? scores[0];
|
|
222
|
+
return optionalNumber(target?.value);
|
|
223
|
+
}
|
|
224
|
+
export function toGoal(goal) {
|
|
225
|
+
const definition = goal.targetValueDefinition;
|
|
226
|
+
return compact({
|
|
227
|
+
id: goal.id,
|
|
228
|
+
userId: optionalString(goal.userId),
|
|
229
|
+
userFullName: optionalString(goal.userFullName),
|
|
230
|
+
name: goal.name ?? '',
|
|
231
|
+
description: optionalString(goal.description),
|
|
232
|
+
type: optionalString(goal.type),
|
|
233
|
+
period: optionalString(goal.periodName),
|
|
234
|
+
status: goal.status ?? 'UNKNOWN',
|
|
235
|
+
weight: optionalNumber(goal.weight),
|
|
236
|
+
scaleCriterion: optionalString(definition?.scaleCriterion),
|
|
237
|
+
currency: optionalString(definition?.currency),
|
|
238
|
+
otherText: optionalString(definition?.otherText),
|
|
239
|
+
targetValue: targetValueOf(goal),
|
|
240
|
+
actualValue: optionalNumber(goal.actualValue),
|
|
241
|
+
actualText: optionalString(goal.actualText),
|
|
242
|
+
managerActualValue: optionalNumber(goal.managerActualValue),
|
|
243
|
+
managerActualText: optionalString(goal.managerActualText),
|
|
244
|
+
achievementPercentage: optionalNumber(goal.achievementPercentage),
|
|
245
|
+
// The evaluation result lives in scoreValue/weightedScore; `score` is a legacy column the API leaves null.
|
|
246
|
+
score: optionalNumber(goal.scoreValue ?? goal.score),
|
|
247
|
+
weightedScore: optionalNumber(goal.weightedScore),
|
|
248
|
+
// The owner's period final score once the evaluation chain has finished (same on every goal of the owner).
|
|
249
|
+
finalScore: optionalNumber(goal.userFinalScore),
|
|
250
|
+
finalScoreText: optionalString(goal.userFinalScoreText),
|
|
251
|
+
canApproveGoal: goal.canApproveGoal === true,
|
|
252
|
+
canReviseGoal: goal.canReviseGoal === true,
|
|
253
|
+
canEnterActualValue: goal.canEnterActualValue === true,
|
|
254
|
+
canApproveEvaluation: goal.canApprove === true,
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
// ---------------------------------------------------------- communication
|
|
258
|
+
export function toAnnouncement(announcement) {
|
|
259
|
+
return compact({
|
|
260
|
+
id: announcement.id,
|
|
261
|
+
type: optionalString(announcement.announcementType),
|
|
262
|
+
text: htmlToText(announcement.announcement),
|
|
263
|
+
date: optionalString(announcement.date),
|
|
264
|
+
sharedBy: optionalString(fullNameOf(announcement.sharedUser)),
|
|
265
|
+
coverPhotoUrl: optionalString(announcement.coverPhotoUrl),
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
// ---------------------------------------------------------------- payroll
|
|
269
|
+
export function toPayslip(payslip) {
|
|
270
|
+
return compact({
|
|
271
|
+
id: payslip.id,
|
|
272
|
+
term: optionalString(payslip.term),
|
|
273
|
+
status: optionalString(payslip.status),
|
|
274
|
+
sentToEmployeeAt: optionalString(payslip.sentToEmployeeAt),
|
|
275
|
+
createdAt: optionalString(payslip.createdAt),
|
|
276
|
+
canAnswer: payslip.canAnswer === true,
|
|
277
|
+
userAnswer: optionalString(payslip.userAnswer),
|
|
278
|
+
managerAnswer: optionalString(payslip.managerAnswer),
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
// ---------------------------------------------------------------- helpers
|
|
282
|
+
export function roundDays(value) {
|
|
283
|
+
return Math.round(value * 100) / 100;
|
|
284
|
+
}
|
|
285
|
+
export function optionalString(value) {
|
|
286
|
+
if (typeof value !== 'string')
|
|
287
|
+
return undefined;
|
|
288
|
+
const trimmed = value.trim();
|
|
289
|
+
return trimmed ? trimmed : undefined;
|
|
290
|
+
}
|
|
291
|
+
export function optionalNumber(value) {
|
|
292
|
+
if (typeof value === 'number')
|
|
293
|
+
return Number.isFinite(value) ? value : undefined;
|
|
294
|
+
if (typeof value === 'string' && value.trim()) {
|
|
295
|
+
const parsed = Number(value);
|
|
296
|
+
return Number.isFinite(parsed) ? parsed : undefined;
|
|
297
|
+
}
|
|
298
|
+
return undefined;
|
|
299
|
+
}
|
|
300
|
+
/** Drops `undefined` fields so optional schema keys are omitted, not `undefined`. */
|
|
301
|
+
export function compact(value) {
|
|
302
|
+
return Object.fromEntries(Object.entries(value).filter(([, entry]) => entry !== undefined));
|
|
303
|
+
}
|
|
304
|
+
function isRecord(value) {
|
|
305
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
306
|
+
}
|
|
307
|
+
//# sourceMappingURL=structured.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"structured.js","sourceRoot":"","sources":["../../src/utils/structured.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Case- and diacritic-insensitive folding for Turkish text, matching the API's
|
|
3
|
+
* `SearchTextUtil.normalize`: I/İ/ı collapse onto "i" and every other accent
|
|
4
|
+
* (ş, ç, ğ, ö, ü) is stripped, so "ozturk" finds "Öztürk".
|
|
5
|
+
*/
|
|
6
|
+
export declare function normalizeSearchText(value: string | null | undefined): string;
|
|
7
|
+
/** True when every whitespace-separated word of the query appears in one of the values. */
|
|
8
|
+
export declare function matchesAllWords(query: string, ...values: Array<string | null | undefined>): boolean;
|
|
9
|
+
/** Plain text from the HTML the announcement editor stores. */
|
|
10
|
+
export declare function htmlToText(html: string | null | undefined): string;
|
|
11
|
+
export declare function truncate(value: string, maxLength: number): string;
|
|
12
|
+
//# sourceMappingURL=text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/utils/text.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAO5E;AAED,2FAA2F;AAC3F,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,GAAG,OAAO,CAKnG;AAED,+DAA+D;AAC/D,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAelE;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAGjE"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Case- and diacritic-insensitive folding for Turkish text, matching the API's
|
|
3
|
+
* `SearchTextUtil.normalize`: I/İ/ı collapse onto "i" and every other accent
|
|
4
|
+
* (ş, ç, ğ, ö, ü) is stripped, so "ozturk" finds "Öztürk".
|
|
5
|
+
*/
|
|
6
|
+
export function normalizeSearchText(value) {
|
|
7
|
+
if (!value)
|
|
8
|
+
return '';
|
|
9
|
+
return value
|
|
10
|
+
.replace(/[ıI]/g, 'i')
|
|
11
|
+
.normalize('NFD')
|
|
12
|
+
.replace(/\p{M}+/gu, '')
|
|
13
|
+
.toLowerCase();
|
|
14
|
+
}
|
|
15
|
+
/** True when every whitespace-separated word of the query appears in one of the values. */
|
|
16
|
+
export function matchesAllWords(query, ...values) {
|
|
17
|
+
const words = normalizeSearchText(query).split(/\s+/).filter(Boolean);
|
|
18
|
+
if (words.length === 0)
|
|
19
|
+
return true;
|
|
20
|
+
const haystack = values.map(normalizeSearchText).filter(Boolean).join(' ');
|
|
21
|
+
return words.every(word => haystack.includes(word));
|
|
22
|
+
}
|
|
23
|
+
/** Plain text from the HTML the announcement editor stores. */
|
|
24
|
+
export function htmlToText(html) {
|
|
25
|
+
if (!html)
|
|
26
|
+
return '';
|
|
27
|
+
return html
|
|
28
|
+
.replace(/<\s*br\s*\/?>/gi, '\n')
|
|
29
|
+
.replace(/<\/\s*(p|div|li|h[1-6])\s*>/gi, '\n')
|
|
30
|
+
.replace(/<[^>]+>/g, '')
|
|
31
|
+
.replace(/ /g, ' ')
|
|
32
|
+
.replace(/&/g, '&')
|
|
33
|
+
.replace(/</g, '<')
|
|
34
|
+
.replace(/>/g, '>')
|
|
35
|
+
.replace(/"/g, '"')
|
|
36
|
+
.replace(/'/g, "'")
|
|
37
|
+
.replace(/[ \t]+/g, ' ')
|
|
38
|
+
.replace(/\s*\n\s*/g, '\n')
|
|
39
|
+
.trim();
|
|
40
|
+
}
|
|
41
|
+
export function truncate(value, maxLength) {
|
|
42
|
+
if (value.length <= maxLength)
|
|
43
|
+
return value;
|
|
44
|
+
return `${value.slice(0, Math.max(0, maxLength - 1)).trimEnd()}…`;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/utils/text.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAgC;IAClE,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,CAAC;IACtB,OAAO,KAAK;SACT,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,SAAS,CAAC,KAAK,CAAC;SAChB,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,WAAW,EAAE,CAAC;AACnB,CAAC;AAED,2FAA2F;AAC3F,MAAM,UAAU,eAAe,CAAC,KAAa,EAAE,GAAG,MAAwC;IACxF,MAAM,KAAK,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtE,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3E,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,+DAA+D;AAC/D,MAAM,UAAU,UAAU,CAAC,IAA+B;IACxD,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,OAAO,IAAI;SACR,OAAO,CAAC,iBAAiB,EAAE,IAAI,CAAC;SAChC,OAAO,CAAC,+BAA+B,EAAE,IAAI,CAAC;SAC9C,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC;SAC1B,IAAI,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAa,EAAE,SAAiB;IACvD,IAAI,KAAK,CAAC,MAAM,IAAI,SAAS;QAAE,OAAO,KAAK,CAAC;IAC5C,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAKA,wFAAwF;AACxF,eAAO,MAAM,OAAO,EAAE,MAAgB,CAAC"}
|
package/dist/version.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
const require = createRequire(import.meta.url);
|
|
3
|
+
const { version } = require('../package.json');
|
|
4
|
+
/** Package version, also sent to the API as `X-Teamso-Client: teamso-mcp/<version>`. */
|
|
5
|
+
export const VERSION = version;
|
|
6
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAEtE,wFAAwF;AACxF,MAAM,CAAC,MAAM,OAAO,GAAW,OAAO,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,88 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@teamso/teamso-mcp",
|
|
3
|
-
"version": "
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "1.2.1",
|
|
4
|
+
"description": "Official MCP server for Teamso HR: request leave, handle approvals, find colleagues, manage performance goals, read payslips, search the Teamso help center and reach every other Teamso module through permission-checked generic API tools from Cursor, Claude, Windsurf, and any MCP-compatible AI assistant",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/server.js",
|
|
7
|
+
"types": "dist/server.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"teamso-mcp": "dist/index.js"
|
|
10
|
+
},
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./dist/server.d.ts",
|
|
14
|
+
"default": "./dist/server.js"
|
|
15
|
+
},
|
|
16
|
+
"./server": {
|
|
17
|
+
"types": "./dist/server.d.ts",
|
|
18
|
+
"default": "./dist/server.js"
|
|
19
|
+
},
|
|
20
|
+
"./client": {
|
|
21
|
+
"types": "./dist/client.d.ts",
|
|
22
|
+
"default": "./dist/client.js"
|
|
23
|
+
},
|
|
24
|
+
"./prompts": {
|
|
25
|
+
"types": "./dist/prompts/index.d.ts",
|
|
26
|
+
"default": "./dist/prompts/index.js"
|
|
27
|
+
},
|
|
28
|
+
"./tools": {
|
|
29
|
+
"types": "./dist/tools/index.d.ts",
|
|
30
|
+
"default": "./dist/tools/index.js"
|
|
31
|
+
},
|
|
32
|
+
"./package.json": "./package.json"
|
|
33
|
+
},
|
|
34
|
+
"files": [
|
|
35
|
+
"dist",
|
|
36
|
+
"README.md",
|
|
37
|
+
"CHANGELOG.md",
|
|
38
|
+
"LICENSE"
|
|
39
|
+
],
|
|
40
|
+
"scripts": {
|
|
41
|
+
"build": "tsc",
|
|
42
|
+
"clean": "node -e \"require('node:fs').rmSync('dist', { recursive: true, force: true })\"",
|
|
43
|
+
"typecheck": "tsc --noEmit",
|
|
44
|
+
"test": "npm run build && node --test tests/*.test.mjs",
|
|
45
|
+
"prepare": "npm run build",
|
|
46
|
+
"prepublishOnly": "npm run clean && npm run build"
|
|
47
|
+
},
|
|
48
|
+
"keywords": [
|
|
49
|
+
"teamso",
|
|
50
|
+
"hr",
|
|
51
|
+
"hris",
|
|
52
|
+
"human-resources",
|
|
53
|
+
"leave-management",
|
|
54
|
+
"performance-management",
|
|
55
|
+
"payroll",
|
|
56
|
+
"mcp",
|
|
57
|
+
"model-context-protocol",
|
|
58
|
+
"cursor",
|
|
59
|
+
"claude",
|
|
60
|
+
"windsurf",
|
|
61
|
+
"llm"
|
|
62
|
+
],
|
|
63
|
+
"author": "Teamso",
|
|
64
|
+
"license": "MIT",
|
|
65
|
+
"repository": {
|
|
66
|
+
"type": "git",
|
|
67
|
+
"url": "git+https://github.com/Teamsocom/Teamso-MCP.git"
|
|
68
|
+
},
|
|
69
|
+
"homepage": "https://teamso.com/docs/mcp-self-hosted",
|
|
70
|
+
"bugs": {
|
|
71
|
+
"url": "https://github.com/Teamsocom/Teamso-MCP/issues"
|
|
72
|
+
},
|
|
73
|
+
"publishConfig": {
|
|
74
|
+
"access": "public"
|
|
75
|
+
},
|
|
76
|
+
"engines": {
|
|
77
|
+
"node": ">=20.0.0"
|
|
78
|
+
},
|
|
79
|
+
"dependencies": {
|
|
80
|
+
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
81
|
+
"ajv": "^8.20.0",
|
|
82
|
+
"zod": "^3.25.76"
|
|
83
|
+
},
|
|
84
|
+
"devDependencies": {
|
|
85
|
+
"@types/node": "^22.0.0",
|
|
86
|
+
"typescript": "^5.7.0"
|
|
87
|
+
}
|
|
88
|
+
}
|