@andrey4emk/npm-app-back-b24 0.9.8 → 1.0.2
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 +382 -453
- package/dist/bitrix24/b24.d.ts +19 -0
- package/dist/bitrix24/b24.d.ts.map +1 -0
- package/{bitrix24 → dist/bitrix24}/b24.js +62 -64
- package/dist/bitrix24/eventGet.d.ts +8 -0
- package/dist/bitrix24/eventGet.d.ts.map +1 -0
- package/dist/bitrix24/eventGet.js +92 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/logs/logs.d.ts +9 -0
- package/dist/logs/logs.d.ts.map +1 -0
- package/{logs → dist/logs}/logs.js +8 -20
- package/dist/sendMessage/chatApp.d.ts +37 -0
- package/dist/sendMessage/chatApp.d.ts.map +1 -0
- package/{sendMessage → dist/sendMessage}/chatApp.js +80 -90
- package/dist/sendMessage/email.d.ts +20 -0
- package/dist/sendMessage/email.d.ts.map +1 -0
- package/{sendMessage → dist/sendMessage}/email.js +21 -20
- package/dist/sendMessage/smsgold.d.ts +21 -0
- package/dist/sendMessage/smsgold.d.ts.map +1 -0
- package/{sendMessage → dist/sendMessage}/smsgold.js +38 -35
- package/dist/sendMessage/wappi.d.ts +35 -0
- package/dist/sendMessage/wappi.d.ts.map +1 -0
- package/{sendMessage → dist/sendMessage}/wappi.js +101 -116
- package/dist/types/index.d.ts +227 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +4 -0
- package/package.json +25 -14
- package/bitrix24/eventGet.js +0 -98
- package/index.js +0 -8
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { B24AuthParams, B24Secret, B24Client, TaskData, ApiResult } from "../types/index.js";
|
|
2
|
+
interface ExpressRequest {
|
|
3
|
+
body: Record<string, unknown>;
|
|
4
|
+
}
|
|
5
|
+
interface ExpressResponse {
|
|
6
|
+
status(code: number): ExpressResponse;
|
|
7
|
+
json(data: unknown): void;
|
|
8
|
+
}
|
|
9
|
+
export declare class B24Prepared {
|
|
10
|
+
constructor();
|
|
11
|
+
makeAuthParams(): Promise<ApiResult<{
|
|
12
|
+
AuthParams: B24AuthParams;
|
|
13
|
+
secret: B24Secret;
|
|
14
|
+
}>>;
|
|
15
|
+
save(req?: ExpressRequest | null, res?: ExpressResponse | null, $b24?: B24Client): Promise<ApiResult>;
|
|
16
|
+
}
|
|
17
|
+
export declare function errTask(b24: B24Client, dataTask: TaskData): Promise<ApiResult>;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=b24.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"b24.d.ts","sourceRoot":"","sources":["../../src/bitrix24/b24.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAiB,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGjH,UAAU,cAAc;IACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,UAAU,eAAe;IACrB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAAC;IACtC,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;CAC7B;AAgBD,qBAAa,WAAW;;IAGd,cAAc,IAAI,OAAO,CAAC,SAAS,CAAC;QAAE,UAAU,EAAE,aAAa,CAAC;QAAC,MAAM,EAAE,SAAS,CAAA;KAAE,CAAC,CAAC;IA+CtF,IAAI,CAAC,GAAG,GAAE,cAAc,GAAG,IAAW,EAAE,GAAG,GAAE,eAAe,GAAG,IAAW,EAAE,IAAI,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;CAiE1H;AAWD,wBAAsB,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CA+CpF"}
|
|
@@ -1,35 +1,33 @@
|
|
|
1
1
|
import { DateTime } from "luxon";
|
|
2
2
|
import path from "path";
|
|
3
3
|
import Conf from "conf";
|
|
4
|
-
|
|
5
4
|
import dotEnv from "dotenv";
|
|
6
5
|
dotEnv.config();
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
let clientSecret = appEnv == "DEV" ? process.env.APP_B24_CLIENT_SECRET_DEV : process.env.APP_B24_CLIENT_SECRET;
|
|
14
|
-
|
|
15
|
-
let confAuthB24 = new Conf({
|
|
6
|
+
const appName = process.env.APP_NAME || "Задай название приложения в .env";
|
|
7
|
+
const configDir = process.env.CONFIG_DIR || "../config";
|
|
8
|
+
const appEnv = process.env.APP_ENV || "PROD";
|
|
9
|
+
const clientId = appEnv === "DEV" ? process.env.APP_B24_CLIENT_ID_DEV : process.env.APP_B24_CLIENT_ID;
|
|
10
|
+
const clientSecret = appEnv === "DEV" ? process.env.APP_B24_CLIENT_SECRET_DEV : process.env.APP_B24_CLIENT_SECRET;
|
|
11
|
+
const confAuthB24 = new Conf({
|
|
16
12
|
cwd: path.resolve(configDir),
|
|
17
13
|
configName: "authB24",
|
|
18
14
|
});
|
|
19
|
-
|
|
20
15
|
export class B24Prepared {
|
|
21
|
-
constructor() {}
|
|
22
|
-
|
|
16
|
+
constructor() { }
|
|
23
17
|
async makeAuthParams() {
|
|
24
18
|
// Получаем данные авторизации из конфига
|
|
25
|
-
const authConfig = confAuthB24.
|
|
26
|
-
|
|
19
|
+
const authConfig = confAuthB24.store[appEnv];
|
|
27
20
|
// Проверяем данные из confAuthB24. Если чего то не хватает, то возвращаем null
|
|
28
21
|
if (!authConfig || !authConfig.domain || !authConfig.access_token || !authConfig.refresh_token) {
|
|
29
|
-
return { error: true, data:
|
|
22
|
+
return { error: true, data: undefined, message: "В конфиге authB24 не хватает данных для авторизации." };
|
|
30
23
|
}
|
|
31
24
|
// Формируем параметры авторизации для SDK
|
|
32
|
-
let
|
|
25
|
+
let domain = authConfig.domain;
|
|
26
|
+
// Если authParamB24.domain содержит https://, то удаляем его
|
|
27
|
+
if (domain.startsWith("https://")) {
|
|
28
|
+
domain = domain.replace("https://", "");
|
|
29
|
+
}
|
|
30
|
+
const AuthParams = {
|
|
33
31
|
applicationToken: "", // если нет — можно '' (см. примечание ниже)
|
|
34
32
|
userId: 0, // если неизвестен — 0
|
|
35
33
|
memberId: authConfig.member_id,
|
|
@@ -38,30 +36,23 @@ export class B24Prepared {
|
|
|
38
36
|
expires: authConfig.expires_in,
|
|
39
37
|
expiresIn: 1800,
|
|
40
38
|
scope: "", // если нет строки scope — оставьте пусто
|
|
41
|
-
domain:
|
|
42
|
-
clientEndpoint: `https://${
|
|
39
|
+
domain: domain,
|
|
40
|
+
clientEndpoint: `https://${domain}/rest/`,
|
|
43
41
|
serverEndpoint: "https://oauth.bitrix.info/rest/",
|
|
44
42
|
status: "L", // Local — для локальных приложений; подставьте свой вариант
|
|
45
43
|
issuer: "store", // опционально
|
|
46
44
|
};
|
|
47
|
-
// Если authParamB24.domain содержит https://, то удаляем его
|
|
48
|
-
if (AuthParams.domain.startsWith("https://")) {
|
|
49
|
-
AuthParams.domain = AuthParams.domain.replace("https://", "");
|
|
50
|
-
}
|
|
51
|
-
|
|
52
45
|
// Проверяем секреты приложения
|
|
53
46
|
if (!clientId || !clientSecret) {
|
|
54
|
-
return { error: true, data:
|
|
47
|
+
return { error: true, data: undefined, message: "Не заданы clientId или clientSecret приложения в .env." };
|
|
55
48
|
}
|
|
56
|
-
|
|
49
|
+
const secret = {
|
|
57
50
|
clientId: clientId,
|
|
58
51
|
clientSecret: clientSecret,
|
|
59
52
|
};
|
|
60
|
-
|
|
61
53
|
// Если все ок, то возвращаем параметры в data
|
|
62
54
|
return { error: false, data: { AuthParams, secret }, message: "Параметры авторизации сформированы." };
|
|
63
55
|
}
|
|
64
|
-
|
|
65
56
|
// Сохраняем токены из фронта
|
|
66
57
|
async save(req = null, res = null, $b24) {
|
|
67
58
|
try {
|
|
@@ -70,35 +61,36 @@ export class B24Prepared {
|
|
|
70
61
|
if (!$b24) {
|
|
71
62
|
return { error: true, message: "$b24 не инициализирован." };
|
|
72
63
|
}
|
|
73
|
-
|
|
74
64
|
// Пробуем получить данные авторизации
|
|
75
65
|
let newAuth = null;
|
|
76
66
|
try {
|
|
77
67
|
newAuth = await $b24.auth.getAuthData();
|
|
78
68
|
if (!newAuth) {
|
|
79
|
-
|
|
80
|
-
newAuth = refresh;
|
|
69
|
+
newAuth = await $b24.auth.refreshAuth();
|
|
81
70
|
}
|
|
82
|
-
} catch (error) {
|
|
83
|
-
return { error: true, message: `Ошибка при получении данных авторизации из $b24. ${error.message} ` };
|
|
84
71
|
}
|
|
85
|
-
|
|
72
|
+
catch (error) {
|
|
73
|
+
const err = error;
|
|
74
|
+
return { error: true, message: `Ошибка при получении данных авторизации из $b24. ${err.message} ` };
|
|
75
|
+
}
|
|
86
76
|
if (!newAuth || !newAuth.access_token) {
|
|
87
77
|
return { error: true, message: "Не удалось получить новые токены из $b24.auth.getAuthData()." };
|
|
88
|
-
}
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
89
80
|
confAuthB24.set(appEnv, newAuth);
|
|
90
81
|
return { error: false, message: "Токены битрикс24 пересохранены из бэка." };
|
|
91
82
|
}
|
|
92
|
-
}
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
93
85
|
// Вызвали из фронта
|
|
94
86
|
try {
|
|
95
87
|
const { access_token, refresh_token, domain, expires_in, member_id } = req.body;
|
|
96
88
|
if (!access_token || !refresh_token || !domain || !expires_in || !member_id) {
|
|
97
|
-
res
|
|
98
|
-
return { error: true, message: "Не заполнены обязательные поля." };
|
|
89
|
+
res?.status(400).json({ status: "error", message: "Не заполнены обязательные поля." });
|
|
90
|
+
return { error: true, message: "Не заполнены обязательные поля." };
|
|
99
91
|
}
|
|
100
92
|
// Если домен начинается с https:// или http:// убираем эту часть
|
|
101
|
-
|
|
93
|
+
const domainClean = domain.replace("https://", "").replace("http://", "");
|
|
102
94
|
confAuthB24.set(appEnv, {
|
|
103
95
|
access_token,
|
|
104
96
|
refresh_token,
|
|
@@ -106,45 +98,49 @@ export class B24Prepared {
|
|
|
106
98
|
expires_in,
|
|
107
99
|
member_id,
|
|
108
100
|
});
|
|
109
|
-
res
|
|
110
|
-
return { error: false, message: "Токены сохранены из фронта." };
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
|
|
101
|
+
res?.status(201).json({ status: "ok", message: "Сохранили токены. Перезапустите сервер для применения." });
|
|
102
|
+
return { error: false, message: "Токены сохранены из фронта." };
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
const err = error;
|
|
106
|
+
res?.status(500).json({ status: "error", message: "Не удалось сохранить токен." });
|
|
107
|
+
return { error: true, message: `Не удалось сохранить токен: ${err.message}` };
|
|
114
108
|
}
|
|
115
109
|
}
|
|
116
|
-
}
|
|
117
|
-
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
const err = error;
|
|
113
|
+
return { error: true, message: `Ошибка при сохранении токенов: ${err.message}` };
|
|
118
114
|
}
|
|
119
115
|
}
|
|
120
116
|
}
|
|
121
|
-
|
|
122
117
|
export async function errTask(b24, dataTask) {
|
|
123
118
|
try {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
119
|
+
const title = dataTask.title;
|
|
120
|
+
const description = dataTask.description || "";
|
|
121
|
+
const createdBy = dataTask.createdBy || 138;
|
|
122
|
+
const responsibleId = dataTask.responsibleId || 1;
|
|
123
|
+
const deadline = dataTask.deadline || DateTime.now().plus({ days: 1 }).toISO();
|
|
124
|
+
const groupId = dataTask.groupId || null; // Группа
|
|
125
|
+
const accomplices = dataTask.accomplices || []; // Соисполнители
|
|
126
|
+
const maxTasks = dataTask.maxTasks || 100;
|
|
127
|
+
const entityTypeAbbr = dataTask.entityTypeAbbr || "";
|
|
133
128
|
// Проверяем сколько создано таких задач. Если их уже больше 10, то не создаем новую
|
|
134
|
-
|
|
129
|
+
const resTasks = await b24.callMethod("tasks.task.list", {
|
|
135
130
|
filter: {
|
|
136
131
|
TITLE: title,
|
|
137
132
|
"<STATUS": 4,
|
|
138
133
|
},
|
|
139
134
|
select: ["ID", "STATUS"],
|
|
140
135
|
});
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
if (
|
|
136
|
+
const tasksData = resTasks.getData().result;
|
|
137
|
+
const tasks = tasksData.tasks;
|
|
138
|
+
if (tasks && tasks.length >= maxTasks) {
|
|
144
139
|
return { error: false, message: `Превышено максимальное количество задач с таким названием (${maxTasks}). Новая задача не создана.` };
|
|
145
|
-
}
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
146
142
|
// Создаем задачу в б24 на проверить. Если не смогли получить события
|
|
147
|
-
|
|
143
|
+
const resCreateTask = await b24.callMethod("tasks.task.add", {
|
|
148
144
|
fields: {
|
|
149
145
|
TITLE: title,
|
|
150
146
|
DESCRIPTION: `${appName} \n\n ${description}`,
|
|
@@ -158,7 +154,9 @@ export async function errTask(b24, dataTask) {
|
|
|
158
154
|
});
|
|
159
155
|
return { error: false, message: "Задача создана в Битрикс24.", result: resCreateTask.getData().result };
|
|
160
156
|
}
|
|
161
|
-
}
|
|
162
|
-
|
|
157
|
+
}
|
|
158
|
+
catch (error) {
|
|
159
|
+
const err = error;
|
|
160
|
+
return { error: true, message: `Не удалось создать задачу в Битрикс24: ${err.message}` };
|
|
163
161
|
}
|
|
164
162
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { B24Client, ApiResult, EventsResult, ConnectorEventsResult } from "../types/index.js";
|
|
2
|
+
export declare class Event {
|
|
3
|
+
private b24;
|
|
4
|
+
constructor(b24: B24Client);
|
|
5
|
+
get(eventName: string): Promise<ApiResult<EventsResult | ConnectorEventsResult>>;
|
|
6
|
+
clear(processId: string, messageId: string | string[]): Promise<ApiResult>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=eventGet.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eventGet.d.ts","sourceRoot":"","sources":["../../src/bitrix24/eventGet.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,YAAY,EAAgB,qBAAqB,EAAoB,MAAM,mBAAmB,CAAC;AA6BnI,qBAAa,KAAK;IACd,OAAO,CAAC,GAAG,CAAY;gBAEX,GAAG,EAAE,SAAS;IAOpB,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,YAAY,GAAG,qBAAqB,CAAC,CAAC;IA2EhF,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC;CAcnF"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Как использовать:
|
|
3
|
+
import { Event } from "@andrey4emk/npm-app-back-b24";
|
|
4
|
+
const event = new Event($b24); // $b24 — ваш экземпляр SDK
|
|
5
|
+
await event.get('ONCRMDYNAMICITEMUPDATE_149');
|
|
6
|
+
*/
|
|
7
|
+
export class Event {
|
|
8
|
+
b24;
|
|
9
|
+
constructor(b24) {
|
|
10
|
+
if (!b24 || typeof b24.callMethod !== "function") {
|
|
11
|
+
throw new Error("Event: передали херовый b24 или не передали вообще");
|
|
12
|
+
}
|
|
13
|
+
this.b24 = b24;
|
|
14
|
+
}
|
|
15
|
+
async get(eventName) {
|
|
16
|
+
try {
|
|
17
|
+
// Запрашиваем офлайн события сделок через API Bitrix24
|
|
18
|
+
const response = await this.b24.callMethod("event.offline.get", {
|
|
19
|
+
clear: 0,
|
|
20
|
+
filter: { EVENT_NAME: eventName },
|
|
21
|
+
});
|
|
22
|
+
const arrOfflineEvents = response.getData();
|
|
23
|
+
if (eventName === "ONIMCONNECTORMESSAGEADD") {
|
|
24
|
+
// Написали сообщение из битрикс24 в кастомный коннектор
|
|
25
|
+
const events = {
|
|
26
|
+
processId: null,
|
|
27
|
+
message: [],
|
|
28
|
+
};
|
|
29
|
+
if (arrOfflineEvents.result.events.length > 0) {
|
|
30
|
+
events.processId = arrOfflineEvents.result.process_id;
|
|
31
|
+
events.message = arrOfflineEvents.result.events.map((event) => ({
|
|
32
|
+
connectorId: event.EVENT_DATA.CONNECTOR || "",
|
|
33
|
+
lineId: event.EVENT_DATA.LINE || "",
|
|
34
|
+
chatId: event.EVENT_DATA.MESSAGES?.[0]?.chat?.id || 0,
|
|
35
|
+
text: event.EVENT_DATA.MESSAGES?.[0]?.message?.text || null,
|
|
36
|
+
file: event.EVENT_DATA.MESSAGES?.[0]?.message?.files || null,
|
|
37
|
+
attachments: event.EVENT_DATA.MESSAGES?.[0]?.message?.attachments || null,
|
|
38
|
+
im: event.EVENT_DATA.MESSAGES?.[0]?.im || null,
|
|
39
|
+
}));
|
|
40
|
+
}
|
|
41
|
+
return { error: false, data: events, message: "События коннектора получены." };
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
// Пока тут обрабатываем только события сделок и смарт процессов
|
|
45
|
+
const events = {
|
|
46
|
+
processId: null,
|
|
47
|
+
entitysId: [],
|
|
48
|
+
arrMessageIdAndEntityId: [],
|
|
49
|
+
};
|
|
50
|
+
// Очищаем сразу события, у которых EVENT_ADDITIONAL: { user_id: '138' }, их не обрабатываем
|
|
51
|
+
const arrEventsToClear = arrOfflineEvents.result.events.filter((event) => event.EVENT_ADDITIONAL.user_id === "138");
|
|
52
|
+
if (arrEventsToClear.length > 0) {
|
|
53
|
+
const arrMessageIdToClear = arrEventsToClear.map((event) => event.MESSAGE_ID);
|
|
54
|
+
await this.b24.callMethod("event.offline.clear", {
|
|
55
|
+
process_id: arrOfflineEvents.result.process_id,
|
|
56
|
+
message_id: arrMessageIdToClear,
|
|
57
|
+
});
|
|
58
|
+
// Удаляем эти события из основного массива
|
|
59
|
+
arrOfflineEvents.result.events = arrOfflineEvents.result.events.filter((event) => event.EVENT_ADDITIONAL.user_id !== "138");
|
|
60
|
+
}
|
|
61
|
+
if (arrOfflineEvents.result.events.length > 0) {
|
|
62
|
+
events.processId = arrOfflineEvents.result.process_id;
|
|
63
|
+
events.entitysId = arrOfflineEvents.result.events.map((event) => event.EVENT_DATA.FIELDS?.ID || 0);
|
|
64
|
+
events.arrMessageIdAndEntityId = arrOfflineEvents.result.events.map((event) => ({
|
|
65
|
+
messageId: event.MESSAGE_ID,
|
|
66
|
+
entityId: event.EVENT_DATA.FIELDS?.ID || 0,
|
|
67
|
+
}));
|
|
68
|
+
}
|
|
69
|
+
// Возвращаем очищенный результат
|
|
70
|
+
return { error: false, data: events, message: "События получены." };
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
const err = error;
|
|
75
|
+
return { error: true, status: "error", message: `Не удалось получить события. ${err.message}` };
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
async clear(processId, messageId) {
|
|
79
|
+
try {
|
|
80
|
+
// Очищаем офлайн события сделок через API Bitrix24
|
|
81
|
+
await this.b24.callMethod("event.offline.clear", {
|
|
82
|
+
process_id: processId,
|
|
83
|
+
message_id: messageId,
|
|
84
|
+
});
|
|
85
|
+
return { error: false, message: "События очищены." };
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
const err = error;
|
|
89
|
+
return { error: true, status: "error", message: `Не удалось очистить события. ${err.message}` };
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from "./bitrix24/b24.js";
|
|
2
|
+
export * from "./bitrix24/eventGet.js";
|
|
3
|
+
export * from "./sendMessage/chatApp.js";
|
|
4
|
+
export * from "./sendMessage/smsgold.js";
|
|
5
|
+
export * from "./sendMessage/email.js";
|
|
6
|
+
export * from "./sendMessage/wappi.js";
|
|
7
|
+
export * from "./logs/logs.js";
|
|
8
|
+
export type { ApiResult, B24AuthConfig, B24AuthParams, B24Secret, B24Client, B24Response, TaskData, EventMessage, EventsResult, ConnectorMessage, ConnectorEventsResult, WappiAuth, MessageData, MessengerType, ChatAppMakeParams, ChatAppAuthParams, ChatAppTypeParams, ChatAppMessengerType, EmailAuth, EmailData, SmsgoldAuth, SmsData, LogLevel, LogConfig, LogFullConfig, } from "./types/index.js";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,cAAc,mBAAmB,CAAC;AAClC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AAGvC,cAAc,gBAAgB,CAAC;AAG/B,YAAY,EAER,SAAS,EAGT,aAAa,EACb,aAAa,EACb,SAAS,EACT,SAAS,EACT,WAAW,EACX,QAAQ,EAGR,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,qBAAqB,EAGrB,SAAS,EACT,WAAW,EACX,aAAa,EAGb,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EAGpB,SAAS,EACT,SAAS,EAGT,WAAW,EACX,OAAO,EAGP,QAAQ,EACR,SAAS,EACT,aAAa,GAChB,MAAM,kBAAkB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// index.ts — публичная точка входа
|
|
2
|
+
// Bitrix24
|
|
3
|
+
export * from "./bitrix24/b24.js";
|
|
4
|
+
export * from "./bitrix24/eventGet.js";
|
|
5
|
+
// SendMessage
|
|
6
|
+
export * from "./sendMessage/chatApp.js";
|
|
7
|
+
export * from "./sendMessage/smsgold.js";
|
|
8
|
+
export * from "./sendMessage/email.js";
|
|
9
|
+
export * from "./sendMessage/wappi.js";
|
|
10
|
+
// Logs
|
|
11
|
+
export * from "./logs/logs.js";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { LogLevel } from "../types/index.js";
|
|
2
|
+
declare class LogsAPI {
|
|
3
|
+
#private;
|
|
4
|
+
constructor();
|
|
5
|
+
add(message: unknown, level?: LogLevel, jsonData?: unknown): void;
|
|
6
|
+
}
|
|
7
|
+
export declare const logs: LogsAPI;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=logs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/logs/logs.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAA4B,MAAM,mBAAmB,CAAC;AAU5E,cAAM,OAAO;;;IAiCT,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,IAAI;CA4BpE;AAED,eAAO,MAAM,IAAI,SAAgB,CAAC"}
|
|
@@ -2,13 +2,11 @@ import path from "path";
|
|
|
2
2
|
import Conf from "conf";
|
|
3
3
|
import dotEnv from "dotenv";
|
|
4
4
|
dotEnv.config();
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
let confLog = new Conf({
|
|
5
|
+
const configDir = process.env.CONFIG_DIR || "../config";
|
|
6
|
+
const confLog = new Conf({
|
|
8
7
|
cwd: path.resolve(configDir),
|
|
9
8
|
configName: "log",
|
|
10
9
|
});
|
|
11
|
-
|
|
12
10
|
class LogsAPI {
|
|
13
11
|
// Дефолтные настройки логирования
|
|
14
12
|
#defaultConfig = {
|
|
@@ -28,11 +26,9 @@ class LogsAPI {
|
|
|
28
26
|
json: true,
|
|
29
27
|
},
|
|
30
28
|
};
|
|
31
|
-
|
|
32
29
|
constructor() {
|
|
33
30
|
this.#initConfig();
|
|
34
31
|
}
|
|
35
|
-
|
|
36
32
|
// Проверяем и заполняем конфиг дефолтными значениями если данных нет
|
|
37
33
|
#initConfig() {
|
|
38
34
|
for (const level of Object.keys(this.#defaultConfig)) {
|
|
@@ -41,35 +37,27 @@ class LogsAPI {
|
|
|
41
37
|
}
|
|
42
38
|
}
|
|
43
39
|
}
|
|
44
|
-
|
|
45
40
|
add(message, level, jsonData) {
|
|
46
41
|
const levelStr = level || "info";
|
|
47
|
-
|
|
48
42
|
// Проверяем конфиг, и если стоит что логирование отключено, то выходим
|
|
49
|
-
const
|
|
50
|
-
if (!
|
|
43
|
+
const config = confLog.get(levelStr);
|
|
44
|
+
if (!config?.enabled) {
|
|
51
45
|
return;
|
|
52
46
|
}
|
|
53
|
-
|
|
54
47
|
const messageText = typeof message === "string" ? message : JSON.stringify(message);
|
|
55
|
-
|
|
56
48
|
// Цвета для разных уровней
|
|
57
49
|
const colors = {
|
|
58
|
-
info: confLog.get("info
|
|
59
|
-
debug: confLog.get("debug
|
|
60
|
-
error: confLog.get("error
|
|
50
|
+
info: confLog.get("info")?.color || "\x1b[32m",
|
|
51
|
+
debug: confLog.get("debug")?.color || "\x1b[37m",
|
|
52
|
+
error: confLog.get("error")?.color || "\x1b[31m",
|
|
61
53
|
};
|
|
62
|
-
|
|
63
54
|
const resetColor = "\x1b[0m"; // Сброс цвета
|
|
64
|
-
|
|
65
55
|
// Логирование с цветом в консоль
|
|
66
|
-
const color = colors[levelStr] || "\x1b[37m";
|
|
56
|
+
const color = colors[levelStr] || "\x1b[37m";
|
|
67
57
|
console.log(`${color}${levelStr}: ${messageText}${resetColor}`);
|
|
68
|
-
|
|
69
58
|
if (jsonData) {
|
|
70
59
|
console.dir(jsonData, { depth: null, colors: true });
|
|
71
60
|
}
|
|
72
61
|
}
|
|
73
62
|
}
|
|
74
|
-
|
|
75
63
|
export const logs = new LogsAPI();
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { ChatAppMakeParams, ChatAppAuthParams, ChatAppTypeParams, ChatAppMessengerType, MessageData, ApiResult } from "../types/index.js";
|
|
2
|
+
interface ChatAppResponse {
|
|
3
|
+
success: boolean;
|
|
4
|
+
data?: {
|
|
5
|
+
exist?: boolean;
|
|
6
|
+
accessToken?: string;
|
|
7
|
+
accessTokenEndTime?: string;
|
|
8
|
+
refreshToken?: string;
|
|
9
|
+
refreshTokenEndTime?: string;
|
|
10
|
+
};
|
|
11
|
+
licenses?: unknown[];
|
|
12
|
+
check?: boolean;
|
|
13
|
+
}
|
|
14
|
+
interface ChatAppSendResult extends ApiResult<ChatAppResponse> {
|
|
15
|
+
auth?: ChatAppAuthParams | null;
|
|
16
|
+
}
|
|
17
|
+
export declare class ChatApp {
|
|
18
|
+
/**
|
|
19
|
+
* @param makeParam - объект с параметрами для создания токена
|
|
20
|
+
* @param authParam - объект с параметрами авторизации
|
|
21
|
+
* @param typeParam - объект с типами мессенджеров и их параметрами
|
|
22
|
+
*/
|
|
23
|
+
private make;
|
|
24
|
+
private auth;
|
|
25
|
+
private type;
|
|
26
|
+
private updateToken;
|
|
27
|
+
constructor(makeParam: ChatAppMakeParams, authParam: ChatAppAuthParams, typeParam: ChatAppTypeParams);
|
|
28
|
+
sendMessageChatApp(messangerType: ChatAppMessengerType, messageData: MessageData): Promise<ChatAppSendResult>;
|
|
29
|
+
sendFileChatApp(messangerType: ChatAppMessengerType, messageData: MessageData): Promise<ChatAppSendResult>;
|
|
30
|
+
phoneCheckChatApp(messangerType: ChatAppMessengerType, phone: string): Promise<ChatAppSendResult>;
|
|
31
|
+
checkTokenChatApp(): Promise<ApiResult<ChatAppResponse>>;
|
|
32
|
+
makeTokenChatApp(): Promise<ApiResult>;
|
|
33
|
+
refreshTokenChatApp(): Promise<ApiResult>;
|
|
34
|
+
getLicensesChatApp(): Promise<ApiResult<unknown[]>>;
|
|
35
|
+
}
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=chatApp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chatApp.d.ts","sourceRoot":"","sources":["../../src/sendMessage/chatApp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE/I,UAAU,eAAe;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE;QACH,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,mBAAmB,CAAC,EAAE,MAAM,CAAC;KAChC,CAAC;IACF,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,UAAU,iBAAkB,SAAQ,SAAS,CAAC,eAAe,CAAC;IAC1D,IAAI,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;CACnC;AAED,qBAAa,OAAO;IAChB;;;;OAIG;IACH,OAAO,CAAC,IAAI,CAAoB;IAChC,OAAO,CAAC,IAAI,CAAoB;IAChC,OAAO,CAAC,IAAI,CAAoB;IAChC,OAAO,CAAC,WAAW,CAAU;gBAEjB,SAAS,EAAE,iBAAiB,EAAE,SAAS,EAAE,iBAAiB,EAAE,SAAS,EAAE,iBAAiB;IAO9F,kBAAkB,CAAC,aAAa,EAAE,oBAAoB,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAsD7G,eAAe,CAAC,aAAa,EAAE,oBAAoB,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA0D1G,iBAAiB,CAAC,aAAa,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA4CjG,iBAAiB,IAAI,OAAO,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAyBxD,gBAAgB,IAAI,OAAO,CAAC,SAAS,CAAC;IAmCtC,mBAAmB,IAAI,OAAO,CAAC,SAAS,CAAC;IAsCzC,kBAAkB,IAAI,OAAO,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;CAuB5D"}
|