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 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":"AAqBA,MAAM,WAAW,UAAU;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC3B,MAAM,CAAC,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;IACnB,MAAM,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;IACnB,MAAM,CAAC,EAAE,GAAG,GAAG,GAAG,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAO;gBAE5B,UAAU,GAAE,MAA6B;YAIvC,gBAAgB;YAWhB,WAAW;IAqFnB,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAK7C,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAKxC,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAKnE,SAAS,CAAC,MAAM,GAAE;QACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC7B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;KACX,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAmD9B,OAAO,CAAC,aAAa;YAmBP,mBAAmB;IAqC3B,cAAc,CAAC,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IASzD,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IAmBrG,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;IAQtD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAgBrD,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAK5E,YAAY,CAAC,MAAM,GAAE;QACzB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC7B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;KACX,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;IAW3B,sBAAsB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE;QACnD,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,eAAe,CAAC,EAAE,OAAO,CAAC;QAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;KACX,GAAG,OAAO,CAAC;QAAE,KAAK,EAAE,UAAU,EAAE,CAAC;QAAC,QAAQ,EAAE,aAAa,EAAE,CAAA;KAAE,CAAC;IAwC9D,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC;IAI9B,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAIrC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAI7B,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAmBhD,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAmBpE,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAgBnC,mBAAmB,IAAI,OAAO,CAAC,GAAG,CAAC;CA8C1C;AAED,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
@@ -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":"AAAA,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,oBAAoB,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB;IAC3D,mEAAmE,CAAC;AAEtE,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,MAAM,EAAE,CAAC,CAAC,GAAG,EAAE;IACf,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;QACzB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE;KAC9B,CAAC,CAAC;IACH,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC7B,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IAC5B,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;QACxB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE;QACjB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE;QAClB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;KACrB,CAAC,CAAC;CACJ,CAAC,CAAC;AA+BH,MAAM,OAAO,cAAc;IACjB,OAAO,CAAS;IAChB,eAAe,GAAG,CAAC,CAAC;IACX,gBAAgB,GAAG,GAAG,CAAC;IAExC,YAAY,aAAqB,oBAAoB;QACnD,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC/C,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,oBAAoB,GAAG,GAAG,GAAG,IAAI,CAAC,eAAe,CAAC;QAExD,IAAI,oBAAoB,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACjD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,GAAG,oBAAoB,CAAC,CAAC,CAAC;QACpG,CAAC;QAED,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACpC,CAAC;IAEO,KAAK,CAAC,WAAW,CAAC,MAAc,EAAE,SAA8B,EAAE;QACxE,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAE9B,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,IAAI,MAAM,EAAE,CAAC;QAExC,IAAI,CAAC;YACH,IAAI,QAAQ,CAAC;YAEb,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrC,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;oBAC1B,MAAM,EAAE,KAAK;oBACb,OAAO,EAAE;wBACP,MAAM,EAAE,kBAAkB;qBAC3B;iBACF,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE,CAAC;gBAEnC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;oBAC9C,IAAI,GAAG,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;wBACpE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,EAAE;4BACvD,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;gCAC9B,UAAU,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;oCACjC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;wCAC9C,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE;4CAClD,IAAI,CAAC,MAAM,CAAC,UAAU,QAAQ,KAAK,KAAK,KAAK,MAAM,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;wCAC5E,CAAC,CAAC,CAAC;oCACL,CAAC;yCAAM,CAAC;wCACN,IAAI,CAAC,MAAM,CAAC,UAAU,QAAQ,KAAK,KAAK,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;oCAC7D,CAAC;gCACH,CAAC,CAAC,CAAC;4BACL,CAAC;iCAAM,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;gCAC3D,IAAI,CAAC,MAAM,CAAC,UAAU,QAAQ,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;4BACzD,CAAC;wBACH,CAAC,CAAC,CAAC;oBACL,CAAC;yBAAM,IAAI,GAAG,KAAK,OAAO,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;wBAC1E,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,EAAE,EAAE;4BACvD,IAAI,CAAC,MAAM,CAAC,SAAS,QAAQ,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;wBACxD,CAAC,CAAC,CAAC;oBACL,CAAC;yBAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;wBAC3E,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,EAAE,EAAE;4BACzD,IAAI,CAAC,MAAM,CAAC,UAAU,SAAS,GAAG,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC;wBAC3D,CAAC,CAAC,CAAC;oBACL,CAAC;yBAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;wBAChC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;4BACrB,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;wBACxC,CAAC,CAAC,CAAC;oBACL,CAAC;yBAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;wBACvD,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC1C,CAAC;yBAAM,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;wBACjD,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;oBAClC,CAAC;gBACH,CAAC,CAAC,CAAC;gBAEH,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;oBAC1B,MAAM,EAAE,MAAM;oBACd,OAAO,EAAE;wBACP,cAAc,EAAE,mCAAmC;wBACnD,MAAM,EAAE,kBAAkB;qBAC3B;oBACD,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE;iBACtB,CAAC,CAAC;YACL,CAAC;YAED,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACxC,OAAO,CAAC,KAAK,CAAC,cAAc,QAAQ,CAAC,MAAM,GAAG,EAAE,SAAS,CAAC,CAAC;gBAC3D,MAAM,IAAI,KAAK,CAAC,QAAQ,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;YACrE,CAAC;YAED,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,oBAAoB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAEhD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,uBAAuB,MAAM,CAAC,KAAK,CAAC,KAAK,MAAM,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC;YACnG,CAAC;YAED,OAAO,MAAM,CAAC,MAAM,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,MAAM,IAAI,EAAE,KAAK,CAAC,CAAC;YACxD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,eAAe;IACf,KAAK,CAAC,UAAU,CAAC,IAAgB;QAC/B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1E,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,EAAU;QACtB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;QACxE,OAAO,MAAM,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU,EAAE,IAAyB;QACpD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,mBAAmB,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QACzF,OAAO,MAAM,KAAK,IAAI,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,SAKZ,EAAE;QACJ,MAAM,QAAQ,GAA+B,EAAE,CAAC;QAChD,QAAQ,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;QAE7B,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,GAAG,MAAM,CAAC;YAC5C,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC/B,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,MAAM,EAAE,KAAK,EAAE,GAAG,YAAY,EAAE,GAAG,MAAM,CAAC;YAC1C,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9B,CAAC;QAED,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAClC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,GAAG,MAAM,CAAC;YAC7C,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;QAED,IAAI,SAAkB,CAAC;QACvB,MAAM,aAAa,GAAG,IAAI,GAAG,EAAU,CAAC;QAExC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC3C,IAAI,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;gBAClC,SAAS;YACX,CAAC;YACD,aAAa,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAE9B,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;gBAClE,OAAO,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;YAC5B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,SAAS,GAAG,KAAK,CAAC;gBAClB,MAAM,YAAY,GAAG,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;gBAClF,IAAI,CAAC,YAAY,EAAE,CAAC;oBAClB,MAAM,KAAK,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,eAAe,EAAE,CAAC;YACzB,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;YACnF,CAAC;YACD,MAAM,eAAe,CAAC;QACxB,CAAC;IACH,CAAC;IAEO,aAAa,CAAC,IAAS;QAC7B,OAAO;YACL,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE;YACtB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK;YAC/B,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW;YACjD,cAAc,EAAE,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,aAAa;YACzD,UAAU,EAAE,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS;YAC7C,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO;YACvC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;YACxC,QAAQ,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ;YACxC,MAAM,EAAE,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM;YAClC,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,OAAO;YACjC,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,WAAW;YACnD,YAAY,EAAE,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,WAAW;YACnD,WAAW,EAAE,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU;YAChD,eAAe,EAAE,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,cAAc;SAC7D,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAAC,MAKjC;QACC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,EAAE,CAAC;QACnC,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,UAAU,CAAC,CAAC;QACvI,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAE7F,MAAM,iBAAiB,GAAG,CAAC,oBAAoB,EAAE,gBAAgB,CAAC,CAAC;QACnE,IAAI,SAAkB,CAAC;QAEvB,KAAK,MAAM,MAAM,IAAI,iBAAiB,EAAE,CAAC;YACvC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAwB;oBACnC,KAAK,EAAE,KAAK;oBACZ,MAAM,EAAE,MAAM;oBACd,QAAQ,EAAE,QAAQ;iBACnB,CAAC;gBACF,IAAI,SAAS,EAAE,CAAC;oBACd,OAAO,CAAC,UAAU,GAAG,SAAS,CAAC;gBACjC,CAAC;gBAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBACvD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;oBAC1B,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;gBACxD,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,SAAS,GAAG,KAAK,CAAC;YACpB,CAAC;QACH,CAAC;QAED,MAAM,SAAS,YAAY,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IACvG,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,QAAgB,EAAE;QACrC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC;YACjC,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE;SAChC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,qBAAqB,CAAC,SAAiB,EAAE,OAAgB,EAAE,QAAgB,EAAE;QACjF,MAAM,MAAM,GAAwB;YAClC,gBAAgB,EAAE,SAAS;SAC5B,CAAC;QAEF,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,CAAC,gBAAgB,CAAC,GAAG,OAAO,CAAC;QACrC,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC;YACjC,KAAK,EAAE,CAAC;YACR,MAAM;YACN,KAAK,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE;SAChC,CAAC,CAAC;QAEH,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,wCAAwC;IACxC,KAAK,CAAC,aAAa,CAAC,OAAsB;QACxC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QACjF,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC7D,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC3B,CAAC;QACD,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC;IACrD,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,EAAU;QACzB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE;YACvD,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE;SACnB,CAAC,CAAC;QAEH,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAyB,CAAC;QACrD,CAAC;QAED,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YACzC,OAAO,MAAuB,CAAC;QACjC,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,EAAU,EAAE,OAA+B;QAC7D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,oBAAoB,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;QACrF,OAAO,MAAM,KAAK,IAAI,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,SAIf,EAAE;QACJ,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;QACjE,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,OAAO,MAAyB,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,OAAO,CAAC,MAAuB,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,sBAAsB,CAAC,KAAa,EAAE,UAIxC,EAAE;QACJ,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,KAAK,KAAK,CAAC;QACpD,MAAM,eAAe,GAAG,OAAO,CAAC,eAAe,KAAK,KAAK,CAAC;QAC1D,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;QAClC,MAAM,YAAY,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QAEzC,MAAM,MAAM,GAAuD;YACjE,KAAK,EAAE,EAAE;YACT,QAAQ,EAAE,EAAE;SACb,CAAC;QAEF,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC;gBACjC,KAAK,EAAE,CAAC;gBACR,KAAK,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE;gBAC/B,MAAM,EAAE,CAAC,GAAG,CAAC;aACd,CAAC,CAAC;YAEH,MAAM,CAAC,KAAK,GAAG,KAAK;iBACjB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACf,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;gBACvD,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAC9D;iBACA,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACrB,CAAC;QAED,IAAI,eAAe,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YAC3C,MAAM,CAAC,QAAQ,GAAG,QAAQ;iBACvB,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAClB,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;gBACzD,CAAC,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CACjE;iBACA,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QACrB,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,kBAAkB;IAClB,KAAK,CAAC,cAAc;QAClB,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,MAAc;QAC1B,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,WAAW;QACf,OAAO,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAC5C,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAiB;QACnC,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBACxC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,uBAAuB,MAAM,GAAG,EAAE,KAAK,CAAC,CAAC;gBACvD,OAAO,CAAC,IAAI,CAAC;oBACX,EAAE,EAAE,MAAM;oBACV,IAAI,EAAE,SAAS;oBACf,SAAS,EAAE,MAAM;oBACjB,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;iBAC9D,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,OAAiB;QACtC,MAAM,OAAO,GAA2B,EAAE,CAAC;QAE3C,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;YAChD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,IAAI,IAAI,EAAE,IAAI,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;gBACrE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,QAAQ,IAAI,QAAQ,IAAI,CAAC,EAAE,EAAE,CAAC;YACnD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;YACpD,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE;gBACrB,OAAO,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,EAAE,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YACnC,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC;YACnD,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,WAAW,CAAC,sBAAsB,CAAC,CAAC;gBAC/C,OAAO,IAAI,CAAC;YACd,CAAC;YAAC,OAAO,WAAW,EAAE,CAAC;gBACrB,OAAO,CAAC,KAAK,CAAC,qCAAqC,EAAE,WAAW,CAAC,CAAC;gBAClE,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,CAAC,mBAAmB;QACvB,MAAM,OAAO,GAAG;YACd,aAAa,EAAE,KAAK;YACpB,QAAQ,EAAE,IAAW;YACrB,WAAW,EAAE,IAAW;YACxB,YAAY,EAAE,KAAK;YACnB,eAAe,EAAE,KAAK;YACtB,aAAa,EAAE,EAAc;SAC9B,CAAC;QAEF,IAAI,CAAC;YACH,OAAO,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YACtD,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,oBAAoB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3G,CAAC;QAED,IAAI,CAAC;YACH,OAAO,CAAC,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,uBAAuB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9G,CAAC;QAED,MAAM,MAAM,GAAa,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9F,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACjE,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;QAC9B,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YAC7B,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;QAC9B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,CAAC;gBAC1B,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,wBAAwB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC/G,CAAC;QACH,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YACtC,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;QACjC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,2BAA2B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAClH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare const config: {
2
+ BITRIX24_WEBHOOK_URL: string;
3
+ NODE_ENV: "development" | "production";
4
+ LOG_LEVEL: "error" | "debug" | "info" | "warn";
5
+ };
6
+ //# sourceMappingURL=index.d.ts.map
@@ -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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}