bitrix24-tasks-mcp-server 1.0.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 +115 -0
- package/build/bitrix24/client.d.ts +73 -0
- package/build/bitrix24/client.d.ts.map +1 -0
- package/build/bitrix24/client.js +414 -0
- package/build/bitrix24/client.js.map +1 -0
- package/build/config/index.d.ts +6 -0
- package/build/config/index.d.ts.map +1 -0
- package/build/config/index.js +8 -0
- package/build/config/index.js.map +1 -0
- package/build/index.d.ts +3 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +56 -0
- package/build/index.js.map +1 -0
- package/build/tools/index.d.ts +33 -0
- package/build/tools/index.d.ts.map +1 -0
- package/build/tools/index.js +439 -0
- package/build/tools/index.js.map +1 -0
- package/build/utils/logger.d.ts +7 -0
- package/build/utils/logger.d.ts.map +1 -0
- package/build/utils/logger.js +17 -0
- package/build/utils/logger.js.map +1 -0
- package/package.json +44 -0
package/README.md
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# Bitrix24 Tasks MCP Server
|
|
2
|
+
|
|
3
|
+
MCP server for Bitrix24 focused on:
|
|
4
|
+
|
|
5
|
+
- tasks (`tasks.task.*`)
|
|
6
|
+
- projects/workgroups (`sonet_group.*`)
|
|
7
|
+
- users (`user.*`)
|
|
8
|
+
|
|
9
|
+
## Quick start (without `npm install`)
|
|
10
|
+
|
|
11
|
+
Use `npx` in your MCP client config. This installs and runs the package automatically.
|
|
12
|
+
|
|
13
|
+
```json
|
|
14
|
+
{
|
|
15
|
+
"mcpServers": {
|
|
16
|
+
"bitrix24": {
|
|
17
|
+
"command": "npx",
|
|
18
|
+
"args": ["-y", "bitrix24-tasks-mcp-server@1.0.0"],
|
|
19
|
+
"env": {
|
|
20
|
+
"BITRIX24_WEBHOOK_URL": "https://your-domain.bitrix24.com/rest/USER_ID/WEBHOOK_CODE/"
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
If you want latest version each run:
|
|
28
|
+
|
|
29
|
+
```json
|
|
30
|
+
{
|
|
31
|
+
"mcpServers": {
|
|
32
|
+
"bitrix24": {
|
|
33
|
+
"command": "npx",
|
|
34
|
+
"args": ["-y", "bitrix24-tasks-mcp-server"],
|
|
35
|
+
"env": {
|
|
36
|
+
"BITRIX24_WEBHOOK_URL": "https://your-domain.bitrix24.com/rest/USER_ID/WEBHOOK_CODE/"
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## Alternative installation
|
|
44
|
+
|
|
45
|
+
Global:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
npm install -g bitrix24-tasks-mcp-server
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Local dependency:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
npm install bitrix24-tasks-mcp-server
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Configuration
|
|
58
|
+
|
|
59
|
+
Set webhook URL:
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
export BITRIX24_WEBHOOK_URL="https://your-domain.bitrix24.com/rest/USER_ID/WEBHOOK_CODE/"
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Required webhook scopes:
|
|
66
|
+
|
|
67
|
+
- `task`
|
|
68
|
+
- `tasks_extended`
|
|
69
|
+
- `sonet_group`
|
|
70
|
+
|
|
71
|
+
## Available tools
|
|
72
|
+
|
|
73
|
+
### Tasks
|
|
74
|
+
|
|
75
|
+
- `bitrix24_create_task` - Create a new task
|
|
76
|
+
- `bitrix24_get_task` - Get task by ID
|
|
77
|
+
- `bitrix24_list_tasks` - List tasks (by default only tasks of current webhook user)
|
|
78
|
+
- `bitrix24_get_latest_tasks` - Get latest tasks by creation date
|
|
79
|
+
- `bitrix24_get_tasks_from_date_range` - Get tasks created in a date range
|
|
80
|
+
- `bitrix24_update_task` - Update an existing task
|
|
81
|
+
|
|
82
|
+
### Projects
|
|
83
|
+
|
|
84
|
+
- `bitrix24_create_project` - Create a project/workgroup
|
|
85
|
+
- `bitrix24_get_project` - Get project by ID
|
|
86
|
+
- `bitrix24_list_projects` - List projects/workgroups
|
|
87
|
+
- `bitrix24_update_project` - Update project/workgroup
|
|
88
|
+
|
|
89
|
+
### Search and diagnostics
|
|
90
|
+
|
|
91
|
+
- `bitrix24_search_tasks_projects` - Search in task and project titles/descriptions
|
|
92
|
+
- `bitrix24_validate_webhook` - Validate webhook connectivity
|
|
93
|
+
- `bitrix24_diagnose_permissions` - Check current webhook scopes and access status
|
|
94
|
+
|
|
95
|
+
### Users
|
|
96
|
+
|
|
97
|
+
- `bitrix24_get_user` - Get user by ID
|
|
98
|
+
- `bitrix24_get_all_users` - Get all users
|
|
99
|
+
- `bitrix24_resolve_user_names` - Resolve user IDs to display names
|
|
100
|
+
|
|
101
|
+
## Local development
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
npm install
|
|
105
|
+
npm run build
|
|
106
|
+
npm run dev
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Publish to npm
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
npm run build
|
|
113
|
+
npm pack --dry-run
|
|
114
|
+
npm publish
|
|
115
|
+
```
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
export interface BitrixTask {
|
|
2
|
+
ID?: string;
|
|
3
|
+
TITLE?: string;
|
|
4
|
+
DESCRIPTION?: string;
|
|
5
|
+
RESPONSIBLE_ID?: string;
|
|
6
|
+
CREATED_BY?: string;
|
|
7
|
+
GROUP_ID?: string;
|
|
8
|
+
DEADLINE?: string;
|
|
9
|
+
PRIORITY?: '0' | '1' | '2';
|
|
10
|
+
STATUS?: '1' | '2' | '3' | '4' | '5';
|
|
11
|
+
STAGE?: string;
|
|
12
|
+
CREATED_DATE?: string;
|
|
13
|
+
CHANGED_DATE?: string;
|
|
14
|
+
CLOSED_DATE?: string;
|
|
15
|
+
STATUS_COMPLETE?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface BitrixProject {
|
|
18
|
+
ID?: string;
|
|
19
|
+
NAME?: string;
|
|
20
|
+
DESCRIPTION?: string;
|
|
21
|
+
OPENED?: 'Y' | 'N';
|
|
22
|
+
CLOSED?: 'Y' | 'N';
|
|
23
|
+
ACTIVE?: 'Y' | 'N';
|
|
24
|
+
OWNER_ID?: string;
|
|
25
|
+
DATE_CREATE?: string;
|
|
26
|
+
DATE_UPDATE?: string;
|
|
27
|
+
}
|
|
28
|
+
export declare class Bitrix24Client {
|
|
29
|
+
private baseUrl;
|
|
30
|
+
private lastRequestTime;
|
|
31
|
+
private readonly RATE_LIMIT_DELAY;
|
|
32
|
+
constructor(webhookUrl?: string);
|
|
33
|
+
private enforceRateLimit;
|
|
34
|
+
private makeRequest;
|
|
35
|
+
createTask(task: BitrixTask): Promise<string>;
|
|
36
|
+
getTask(id: string): Promise<BitrixTask>;
|
|
37
|
+
updateTask(id: string, task: Partial<BitrixTask>): Promise<boolean>;
|
|
38
|
+
listTasks(params?: {
|
|
39
|
+
select?: string[];
|
|
40
|
+
filter?: Record<string, any>;
|
|
41
|
+
order?: Record<string, string>;
|
|
42
|
+
start?: number;
|
|
43
|
+
}): Promise<BitrixTask[]>;
|
|
44
|
+
private normalizeTask;
|
|
45
|
+
private listTasksDeprecated;
|
|
46
|
+
getLatestTasks(limit?: number): Promise<BitrixTask[]>;
|
|
47
|
+
getTasksFromDateRange(startDate: string, endDate?: string, limit?: number): Promise<BitrixTask[]>;
|
|
48
|
+
createProject(project: BitrixProject): Promise<string>;
|
|
49
|
+
getProject(id: string): Promise<BitrixProject | null>;
|
|
50
|
+
updateProject(id: string, project: Partial<BitrixProject>): Promise<boolean>;
|
|
51
|
+
listProjects(params?: {
|
|
52
|
+
filter?: Record<string, any>;
|
|
53
|
+
order?: Record<string, string>;
|
|
54
|
+
start?: number;
|
|
55
|
+
}): Promise<BitrixProject[]>;
|
|
56
|
+
searchTasksAndProjects(query: string, options?: {
|
|
57
|
+
includeTasks?: boolean;
|
|
58
|
+
includeProjects?: boolean;
|
|
59
|
+
limit?: number;
|
|
60
|
+
}): Promise<{
|
|
61
|
+
tasks: BitrixTask[];
|
|
62
|
+
projects: BitrixProject[];
|
|
63
|
+
}>;
|
|
64
|
+
getCurrentUser(): Promise<any>;
|
|
65
|
+
getUser(userId: string): Promise<any>;
|
|
66
|
+
getAllUsers(): Promise<any[]>;
|
|
67
|
+
getUsersByIds(userIds: string[]): Promise<any[]>;
|
|
68
|
+
resolveUserNames(userIds: string[]): Promise<Record<string, string>>;
|
|
69
|
+
validateWebhook(): Promise<boolean>;
|
|
70
|
+
diagnosePermissions(): Promise<any>;
|
|
71
|
+
}
|
|
72
|
+
export declare const bitrix24Client: Bitrix24Client;
|
|
73
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/bitrix24/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
import fetch from 'node-fetch';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
const BITRIX24_WEBHOOK_URL = process.env.BITRIX24_WEBHOOK_URL ||
|
|
4
|
+
'https://sviluppofranchising.bitrix24.it/rest/27/wwugdez6m774803q/';
|
|
5
|
+
const BitrixResponseSchema = z.object({
|
|
6
|
+
result: z.any(),
|
|
7
|
+
error: z.optional(z.object({
|
|
8
|
+
error: z.string(),
|
|
9
|
+
error_description: z.string()
|
|
10
|
+
})),
|
|
11
|
+
total: z.optional(z.number()),
|
|
12
|
+
next: z.optional(z.number()),
|
|
13
|
+
time: z.optional(z.object({
|
|
14
|
+
start: z.number(),
|
|
15
|
+
finish: z.number(),
|
|
16
|
+
duration: z.number()
|
|
17
|
+
}))
|
|
18
|
+
});
|
|
19
|
+
export class Bitrix24Client {
|
|
20
|
+
baseUrl;
|
|
21
|
+
lastRequestTime = 0;
|
|
22
|
+
RATE_LIMIT_DELAY = 500;
|
|
23
|
+
constructor(webhookUrl = BITRIX24_WEBHOOK_URL) {
|
|
24
|
+
this.baseUrl = webhookUrl.replace(/\/$/, '');
|
|
25
|
+
}
|
|
26
|
+
async enforceRateLimit() {
|
|
27
|
+
const now = Date.now();
|
|
28
|
+
const timeSinceLastRequest = now - this.lastRequestTime;
|
|
29
|
+
if (timeSinceLastRequest < this.RATE_LIMIT_DELAY) {
|
|
30
|
+
await new Promise((resolve) => setTimeout(resolve, this.RATE_LIMIT_DELAY - timeSinceLastRequest));
|
|
31
|
+
}
|
|
32
|
+
this.lastRequestTime = Date.now();
|
|
33
|
+
}
|
|
34
|
+
async makeRequest(method, params = {}) {
|
|
35
|
+
await this.enforceRateLimit();
|
|
36
|
+
const url = `${this.baseUrl}/${method}`;
|
|
37
|
+
try {
|
|
38
|
+
let response;
|
|
39
|
+
if (Object.keys(params).length === 0) {
|
|
40
|
+
response = await fetch(url, {
|
|
41
|
+
method: 'GET',
|
|
42
|
+
headers: {
|
|
43
|
+
Accept: 'application/json'
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
const body = new URLSearchParams();
|
|
49
|
+
Object.entries(params).forEach(([key, value]) => {
|
|
50
|
+
if (key === 'fields' && typeof value === 'object' && value !== null) {
|
|
51
|
+
Object.entries(value).forEach(([fieldKey, fieldValue]) => {
|
|
52
|
+
if (Array.isArray(fieldValue)) {
|
|
53
|
+
fieldValue.forEach((item, index) => {
|
|
54
|
+
if (typeof item === 'object' && item !== null) {
|
|
55
|
+
Object.entries(item).forEach(([subKey, subValue]) => {
|
|
56
|
+
body.append(`fields[${fieldKey}][${index}][${subKey}]`, String(subValue));
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
body.append(`fields[${fieldKey}][${index}]`, String(item));
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
else if (fieldValue !== undefined && fieldValue !== null) {
|
|
65
|
+
body.append(`fields[${fieldKey}]`, String(fieldValue));
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
else if (key === 'order' && typeof value === 'object' && value !== null) {
|
|
70
|
+
Object.entries(value).forEach(([orderKey, orderValue]) => {
|
|
71
|
+
body.append(`order[${orderKey}]`, String(orderValue));
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
else if (key === 'filter' && typeof value === 'object' && value !== null) {
|
|
75
|
+
Object.entries(value).forEach(([filterKey, filterValue]) => {
|
|
76
|
+
body.append(`filter[${filterKey}]`, String(filterValue));
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
else if (Array.isArray(value)) {
|
|
80
|
+
value.forEach((item) => {
|
|
81
|
+
body.append(`${key}[]`, String(item));
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
else if (typeof value === 'object' && value !== null) {
|
|
85
|
+
body.append(key, JSON.stringify(value));
|
|
86
|
+
}
|
|
87
|
+
else if (value !== undefined && value !== null) {
|
|
88
|
+
body.append(key, String(value));
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
response = await fetch(url, {
|
|
92
|
+
method: 'POST',
|
|
93
|
+
headers: {
|
|
94
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
95
|
+
Accept: 'application/json'
|
|
96
|
+
},
|
|
97
|
+
body: body.toString()
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
if (!response.ok) {
|
|
101
|
+
const errorText = await response.text();
|
|
102
|
+
console.error(`HTTP Error ${response.status}:`, errorText);
|
|
103
|
+
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
104
|
+
}
|
|
105
|
+
const data = await response.json();
|
|
106
|
+
const parsed = BitrixResponseSchema.parse(data);
|
|
107
|
+
if (parsed.error) {
|
|
108
|
+
throw new Error(`Bitrix24 API Error: ${parsed.error.error} - ${parsed.error.error_description}`);
|
|
109
|
+
}
|
|
110
|
+
return parsed.result;
|
|
111
|
+
}
|
|
112
|
+
catch (error) {
|
|
113
|
+
console.error(`Bitrix24 API Error [${method}]:`, error);
|
|
114
|
+
throw error;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// Task Methods
|
|
118
|
+
async createTask(task) {
|
|
119
|
+
const result = await this.makeRequest('tasks.task.add', { fields: task });
|
|
120
|
+
return result.task.id.toString();
|
|
121
|
+
}
|
|
122
|
+
async getTask(id) {
|
|
123
|
+
const result = await this.makeRequest('tasks.task.get', { taskId: id });
|
|
124
|
+
return result.task;
|
|
125
|
+
}
|
|
126
|
+
async updateTask(id, task) {
|
|
127
|
+
const result = await this.makeRequest('tasks.task.update', { taskId: id, fields: task });
|
|
128
|
+
return result === true;
|
|
129
|
+
}
|
|
130
|
+
async listTasks(params = {}) {
|
|
131
|
+
const attempts = [];
|
|
132
|
+
attempts.push({ ...params });
|
|
133
|
+
if (params.select) {
|
|
134
|
+
const { select, ...withoutSelect } = params;
|
|
135
|
+
attempts.push(withoutSelect);
|
|
136
|
+
}
|
|
137
|
+
if (params.order) {
|
|
138
|
+
const { order, ...withoutOrder } = params;
|
|
139
|
+
attempts.push(withoutOrder);
|
|
140
|
+
}
|
|
141
|
+
if (params.select && params.order) {
|
|
142
|
+
const { select, order, ...minimal } = params;
|
|
143
|
+
attempts.push(minimal);
|
|
144
|
+
}
|
|
145
|
+
let lastError;
|
|
146
|
+
const triedPayloads = new Set();
|
|
147
|
+
for (const attempt of attempts) {
|
|
148
|
+
const serialized = JSON.stringify(attempt);
|
|
149
|
+
if (triedPayloads.has(serialized)) {
|
|
150
|
+
continue;
|
|
151
|
+
}
|
|
152
|
+
triedPayloads.add(serialized);
|
|
153
|
+
try {
|
|
154
|
+
const result = await this.makeRequest('tasks.task.list', attempt);
|
|
155
|
+
return result.tasks || [];
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
lastError = error;
|
|
159
|
+
const isBadRequest = error instanceof Error && error.message.includes('HTTP 400');
|
|
160
|
+
if (!isBadRequest) {
|
|
161
|
+
throw error;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
try {
|
|
166
|
+
return await this.listTasksDeprecated(params);
|
|
167
|
+
}
|
|
168
|
+
catch (deprecatedError) {
|
|
169
|
+
if (lastError) {
|
|
170
|
+
throw lastError instanceof Error ? lastError : new Error('Failed to list tasks');
|
|
171
|
+
}
|
|
172
|
+
throw deprecatedError;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
normalizeTask(task) {
|
|
176
|
+
return {
|
|
177
|
+
ID: task.ID ?? task.id,
|
|
178
|
+
TITLE: task.TITLE ?? task.title,
|
|
179
|
+
DESCRIPTION: task.DESCRIPTION ?? task.description,
|
|
180
|
+
RESPONSIBLE_ID: task.RESPONSIBLE_ID ?? task.responsibleId,
|
|
181
|
+
CREATED_BY: task.CREATED_BY ?? task.createdBy,
|
|
182
|
+
GROUP_ID: task.GROUP_ID ?? task.groupId,
|
|
183
|
+
DEADLINE: task.DEADLINE ?? task.deadline,
|
|
184
|
+
PRIORITY: task.PRIORITY ?? task.priority,
|
|
185
|
+
STATUS: task.STATUS ?? task.status,
|
|
186
|
+
STAGE: task.STAGE ?? task.stageId,
|
|
187
|
+
CREATED_DATE: task.CREATED_DATE ?? task.createdDate,
|
|
188
|
+
CHANGED_DATE: task.CHANGED_DATE ?? task.changedDate,
|
|
189
|
+
CLOSED_DATE: task.CLOSED_DATE ?? task.closedDate,
|
|
190
|
+
STATUS_COMPLETE: task.STATUS_COMPLETE ?? task.statusComplete
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
async listTasksDeprecated(params) {
|
|
194
|
+
const order = params.order || { ID: 'DESC' };
|
|
195
|
+
const filter = params.filter || {};
|
|
196
|
+
const taskData = (params.select && params.select.length > 0) ? params.select : ['ID', 'TITLE', 'STATUS', 'RESPONSIBLE_ID', 'DEADLINE'];
|
|
197
|
+
const navParams = params.start ? { iNumPage: Math.floor(params.start / 50) + 1 } : undefined;
|
|
198
|
+
const deprecatedMethods = ['task.items.getlist', 'task.item.list'];
|
|
199
|
+
let lastError;
|
|
200
|
+
for (const method of deprecatedMethods) {
|
|
201
|
+
try {
|
|
202
|
+
const payload = {
|
|
203
|
+
ORDER: order,
|
|
204
|
+
FILTER: filter,
|
|
205
|
+
TASKDATA: taskData
|
|
206
|
+
};
|
|
207
|
+
if (navParams) {
|
|
208
|
+
payload.NAV_PARAMS = navParams;
|
|
209
|
+
}
|
|
210
|
+
const result = await this.makeRequest(method, payload);
|
|
211
|
+
if (Array.isArray(result)) {
|
|
212
|
+
return result.map((task) => this.normalizeTask(task));
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
catch (error) {
|
|
216
|
+
lastError = error;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
throw lastError instanceof Error ? lastError : new Error('Failed to list tasks with deprecated API');
|
|
220
|
+
}
|
|
221
|
+
async getLatestTasks(limit = 20) {
|
|
222
|
+
const tasks = await this.listTasks({
|
|
223
|
+
start: 0,
|
|
224
|
+
order: { CREATED_DATE: 'DESC' }
|
|
225
|
+
});
|
|
226
|
+
return tasks.slice(0, limit);
|
|
227
|
+
}
|
|
228
|
+
async getTasksFromDateRange(startDate, endDate, limit = 50) {
|
|
229
|
+
const filter = {
|
|
230
|
+
'>=CREATED_DATE': startDate
|
|
231
|
+
};
|
|
232
|
+
if (endDate) {
|
|
233
|
+
filter['<=CREATED_DATE'] = endDate;
|
|
234
|
+
}
|
|
235
|
+
const tasks = await this.listTasks({
|
|
236
|
+
start: 0,
|
|
237
|
+
filter,
|
|
238
|
+
order: { CREATED_DATE: 'DESC' }
|
|
239
|
+
});
|
|
240
|
+
return tasks.slice(0, limit);
|
|
241
|
+
}
|
|
242
|
+
// Project Methods (Bitrix24 workgroups)
|
|
243
|
+
async createProject(project) {
|
|
244
|
+
const result = await this.makeRequest('sonet_group.create', { fields: project });
|
|
245
|
+
if (typeof result === 'string' || typeof result === 'number') {
|
|
246
|
+
return result.toString();
|
|
247
|
+
}
|
|
248
|
+
return (result?.ID || result?.id || '').toString();
|
|
249
|
+
}
|
|
250
|
+
async getProject(id) {
|
|
251
|
+
const result = await this.makeRequest('sonet_group.get', {
|
|
252
|
+
filter: { ID: id }
|
|
253
|
+
});
|
|
254
|
+
if (Array.isArray(result)) {
|
|
255
|
+
return (result[0] || null);
|
|
256
|
+
}
|
|
257
|
+
if (result && typeof result === 'object') {
|
|
258
|
+
return result;
|
|
259
|
+
}
|
|
260
|
+
return null;
|
|
261
|
+
}
|
|
262
|
+
async updateProject(id, project) {
|
|
263
|
+
const result = await this.makeRequest('sonet_group.update', { id, fields: project });
|
|
264
|
+
return result === true;
|
|
265
|
+
}
|
|
266
|
+
async listProjects(params = {}) {
|
|
267
|
+
const result = await this.makeRequest('sonet_group.get', params);
|
|
268
|
+
if (Array.isArray(result)) {
|
|
269
|
+
return result;
|
|
270
|
+
}
|
|
271
|
+
if (!result) {
|
|
272
|
+
return [];
|
|
273
|
+
}
|
|
274
|
+
return [result];
|
|
275
|
+
}
|
|
276
|
+
async searchTasksAndProjects(query, options = {}) {
|
|
277
|
+
const includeTasks = options.includeTasks !== false;
|
|
278
|
+
const includeProjects = options.includeProjects !== false;
|
|
279
|
+
const limit = options.limit || 20;
|
|
280
|
+
const loweredQuery = query.toLowerCase();
|
|
281
|
+
const result = {
|
|
282
|
+
tasks: [],
|
|
283
|
+
projects: []
|
|
284
|
+
};
|
|
285
|
+
if (includeTasks) {
|
|
286
|
+
const tasks = await this.listTasks({
|
|
287
|
+
start: 0,
|
|
288
|
+
order: { CREATED_DATE: 'DESC' },
|
|
289
|
+
select: ['*']
|
|
290
|
+
});
|
|
291
|
+
result.tasks = tasks
|
|
292
|
+
.filter((task) => (task.TITLE || '').toLowerCase().includes(loweredQuery) ||
|
|
293
|
+
(task.DESCRIPTION || '').toLowerCase().includes(loweredQuery))
|
|
294
|
+
.slice(0, limit);
|
|
295
|
+
}
|
|
296
|
+
if (includeProjects) {
|
|
297
|
+
const projects = await this.listProjects();
|
|
298
|
+
result.projects = projects
|
|
299
|
+
.filter((project) => (project.NAME || '').toLowerCase().includes(loweredQuery) ||
|
|
300
|
+
(project.DESCRIPTION || '').toLowerCase().includes(loweredQuery))
|
|
301
|
+
.slice(0, limit);
|
|
302
|
+
}
|
|
303
|
+
return result;
|
|
304
|
+
}
|
|
305
|
+
// Utility Methods
|
|
306
|
+
async getCurrentUser() {
|
|
307
|
+
return await this.makeRequest('user.current');
|
|
308
|
+
}
|
|
309
|
+
async getUser(userId) {
|
|
310
|
+
return await this.makeRequest('user.get', { ID: userId });
|
|
311
|
+
}
|
|
312
|
+
async getAllUsers() {
|
|
313
|
+
return await this.makeRequest('user.get');
|
|
314
|
+
}
|
|
315
|
+
async getUsersByIds(userIds) {
|
|
316
|
+
const results = [];
|
|
317
|
+
for (const userId of userIds) {
|
|
318
|
+
try {
|
|
319
|
+
const user = await this.getUser(userId);
|
|
320
|
+
results.push(user);
|
|
321
|
+
}
|
|
322
|
+
catch (error) {
|
|
323
|
+
console.error(`Error fetching user ${userId}:`, error);
|
|
324
|
+
results.push({
|
|
325
|
+
ID: userId,
|
|
326
|
+
NAME: 'Unknown',
|
|
327
|
+
LAST_NAME: 'User',
|
|
328
|
+
ERROR: error instanceof Error ? error.message : String(error)
|
|
329
|
+
});
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
return results;
|
|
333
|
+
}
|
|
334
|
+
async resolveUserNames(userIds) {
|
|
335
|
+
const userMap = {};
|
|
336
|
+
try {
|
|
337
|
+
const users = await this.getUsersByIds(userIds);
|
|
338
|
+
for (const user of users) {
|
|
339
|
+
const fullName = `${user.NAME || ''} ${user.LAST_NAME || ''}`.trim();
|
|
340
|
+
userMap[user.ID] = fullName || `User ${user.ID}`;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
catch (error) {
|
|
344
|
+
console.error('Error resolving user names:', error);
|
|
345
|
+
userIds.forEach((id) => {
|
|
346
|
+
userMap[id] = `User ${id}`;
|
|
347
|
+
});
|
|
348
|
+
}
|
|
349
|
+
return userMap;
|
|
350
|
+
}
|
|
351
|
+
async validateWebhook() {
|
|
352
|
+
try {
|
|
353
|
+
await this.makeRequest('app.info');
|
|
354
|
+
return true;
|
|
355
|
+
}
|
|
356
|
+
catch (error) {
|
|
357
|
+
console.error('Webhook validation failed:', error);
|
|
358
|
+
try {
|
|
359
|
+
await this.makeRequest('tasks.task.getFields');
|
|
360
|
+
return true;
|
|
361
|
+
}
|
|
362
|
+
catch (secondError) {
|
|
363
|
+
console.error('Alternative validation also failed:', secondError);
|
|
364
|
+
return false;
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
async diagnosePermissions() {
|
|
369
|
+
const results = {
|
|
370
|
+
webhook_valid: false,
|
|
371
|
+
app_info: null,
|
|
372
|
+
permissions: null,
|
|
373
|
+
tasks_access: false,
|
|
374
|
+
projects_access: false,
|
|
375
|
+
error_details: []
|
|
376
|
+
};
|
|
377
|
+
try {
|
|
378
|
+
results.app_info = await this.makeRequest('app.info');
|
|
379
|
+
results.webhook_valid = true;
|
|
380
|
+
}
|
|
381
|
+
catch (error) {
|
|
382
|
+
results.error_details.push(`app.info failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
383
|
+
}
|
|
384
|
+
try {
|
|
385
|
+
results.permissions = await this.makeRequest('user.access');
|
|
386
|
+
}
|
|
387
|
+
catch (error) {
|
|
388
|
+
results.error_details.push(`user.access failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
389
|
+
}
|
|
390
|
+
const scopes = Array.isArray(results.app_info?.SCOPE) ? results.app_info.SCOPE : [];
|
|
391
|
+
if (scopes.includes('task') || scopes.includes('tasks_extended')) {
|
|
392
|
+
results.tasks_access = true;
|
|
393
|
+
}
|
|
394
|
+
try {
|
|
395
|
+
await this.getLatestTasks(1);
|
|
396
|
+
results.tasks_access = true;
|
|
397
|
+
}
|
|
398
|
+
catch (error) {
|
|
399
|
+
if (!results.tasks_access) {
|
|
400
|
+
results.error_details.push(`tasks access failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
try {
|
|
404
|
+
await this.listProjects({ start: 0 });
|
|
405
|
+
results.projects_access = true;
|
|
406
|
+
}
|
|
407
|
+
catch (error) {
|
|
408
|
+
results.error_details.push(`projects access failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
409
|
+
}
|
|
410
|
+
return results;
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
export const bitrix24Client = new Bitrix24Client();
|
|
414
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/bitrix24/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,MAAM;;;;CAAkC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
const ConfigSchema = z.object({
|
|
3
|
+
BITRIX24_WEBHOOK_URL: z.string().url(),
|
|
4
|
+
NODE_ENV: z.enum(['development', 'production']).default('development'),
|
|
5
|
+
LOG_LEVEL: z.enum(['debug', 'info', 'warn', 'error']).default('info')
|
|
6
|
+
});
|
|
7
|
+
export const config = ConfigSchema.parse(process.env);
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACtC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC;IACtE,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;CACtE,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC"}
|
package/build/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|