vv-iiko-pp-parser 1.0.6
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 +151 -0
- package/README.md +582 -0
- package/dist/clients/clients.fetcher.d.ts +102 -0
- package/dist/clients/clients.fetcher.d.ts.map +1 -0
- package/dist/clients/clients.fetcher.js +196 -0
- package/dist/clients/clients.fetcher.js.map +1 -0
- package/dist/clients/clients.parser.d.ts +144 -0
- package/dist/clients/clients.parser.d.ts.map +1 -0
- package/dist/clients/clients.parser.js +473 -0
- package/dist/clients/clients.parser.js.map +1 -0
- package/dist/clients/clients.service.d.ts +90 -0
- package/dist/clients/clients.service.d.ts.map +1 -0
- package/dist/clients/clients.service.js +277 -0
- package/dist/clients/clients.service.js.map +1 -0
- package/dist/clients/clients.types.d.ts +127 -0
- package/dist/clients/clients.types.d.ts.map +1 -0
- package/dist/clients/clients.types.js +6 -0
- package/dist/clients/clients.types.js.map +1 -0
- package/dist/clients/index.d.ts +5 -0
- package/dist/clients/index.d.ts.map +1 -0
- package/dist/clients/index.js +25 -0
- package/dist/clients/index.js.map +1 -0
- package/dist/core/auth/iiko-auth.service.d.ts +52 -0
- package/dist/core/auth/iiko-auth.service.d.ts.map +1 -0
- package/dist/core/auth/iiko-auth.service.js +302 -0
- package/dist/core/auth/iiko-auth.service.js.map +1 -0
- package/dist/core/http/iiko-http.client.d.ts +13 -0
- package/dist/core/http/iiko-http.client.d.ts.map +1 -0
- package/dist/core/http/iiko-http.client.js +55 -0
- package/dist/core/http/iiko-http.client.js.map +1 -0
- package/dist/core/iiko-parser.config.d.ts +28 -0
- package/dist/core/iiko-parser.config.d.ts.map +1 -0
- package/dist/core/iiko-parser.config.js +76 -0
- package/dist/core/iiko-parser.config.js.map +1 -0
- package/dist/core/parser/iiko-parser.service.d.ts +15 -0
- package/dist/core/parser/iiko-parser.service.d.ts.map +1 -0
- package/dist/core/parser/iiko-parser.service.js +156 -0
- package/dist/core/parser/iiko-parser.service.js.map +1 -0
- package/dist/core/session/iiko-session.service.d.ts +68 -0
- package/dist/core/session/iiko-session.service.d.ts.map +1 -0
- package/dist/core/session/iiko-session.service.js +209 -0
- package/dist/core/session/iiko-session.service.js.map +1 -0
- package/dist/iiko-parser.d.ts +149 -0
- package/dist/iiko-parser.d.ts.map +1 -0
- package/dist/iiko-parser.js +209 -0
- package/dist/iiko-parser.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/company-profile.interface.d.ts +12 -0
- package/dist/interfaces/company-profile.interface.d.ts.map +1 -0
- package/dist/interfaces/company-profile.interface.js +3 -0
- package/dist/interfaces/company-profile.interface.js.map +1 -0
- package/dist/invoices/index.d.ts +6 -0
- package/dist/invoices/index.d.ts.map +1 -0
- package/dist/invoices/index.js +22 -0
- package/dist/invoices/index.js.map +1 -0
- package/dist/invoices/invoices.fetcher.d.ts +49 -0
- package/dist/invoices/invoices.fetcher.d.ts.map +1 -0
- package/dist/invoices/invoices.fetcher.js +141 -0
- package/dist/invoices/invoices.fetcher.js.map +1 -0
- package/dist/invoices/invoices.filters.d.ts +40 -0
- package/dist/invoices/invoices.filters.d.ts.map +1 -0
- package/dist/invoices/invoices.filters.js +81 -0
- package/dist/invoices/invoices.filters.js.map +1 -0
- package/dist/invoices/invoices.parser.d.ts +101 -0
- package/dist/invoices/invoices.parser.d.ts.map +1 -0
- package/dist/invoices/invoices.parser.js +540 -0
- package/dist/invoices/invoices.parser.js.map +1 -0
- package/dist/invoices/invoices.service.d.ts +82 -0
- package/dist/invoices/invoices.service.d.ts.map +1 -0
- package/dist/invoices/invoices.service.js +361 -0
- package/dist/invoices/invoices.service.js.map +1 -0
- package/dist/invoices/invoices.storage.service.d.ts +30 -0
- package/dist/invoices/invoices.storage.service.d.ts.map +1 -0
- package/dist/invoices/invoices.storage.service.js +135 -0
- package/dist/invoices/invoices.storage.service.js.map +1 -0
- package/dist/invoices/invoices.types.d.ts +94 -0
- package/dist/invoices/invoices.types.d.ts.map +1 -0
- package/dist/invoices/invoices.types.js +3 -0
- package/dist/invoices/invoices.types.js.map +1 -0
- package/dist/types.d.ts +138 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +4 -0
- package/dist/types.js.map +1 -0
- package/package.json +52 -0
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.IikoAuthService = void 0;
|
|
37
|
+
const tough_cookie_1 = require("tough-cookie");
|
|
38
|
+
const fs = __importStar(require("fs/promises"));
|
|
39
|
+
const path = __importStar(require("path"));
|
|
40
|
+
const cheerio = __importStar(require("cheerio"));
|
|
41
|
+
const iiko_parser_config_1 = require("../iiko-parser.config");
|
|
42
|
+
/**
|
|
43
|
+
* Сервис авторизации в iiko Partner Portal.
|
|
44
|
+
*
|
|
45
|
+
* Выполняет form-based авторизацию через Symfony Security:
|
|
46
|
+
* 1. GET запрос на страницу логина для получения CSRF токена
|
|
47
|
+
* 2. POST запрос с credentials и CSRF токеном
|
|
48
|
+
* 3. Сохранение cookies (PHPSESSION, REMEMBERME) в файл
|
|
49
|
+
*
|
|
50
|
+
* Cookies автоматически сохраняются и загружаются для переиспользования.
|
|
51
|
+
*/
|
|
52
|
+
class IikoAuthService {
|
|
53
|
+
constructor(login, password, httpClient, cookiesPath, report) {
|
|
54
|
+
this.login = login;
|
|
55
|
+
this.password = password;
|
|
56
|
+
this.httpClient = httpClient;
|
|
57
|
+
this.cookiesPath = cookiesPath;
|
|
58
|
+
this.report = report;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Выполняет полный процесс авторизации в iiko Partner Portal.
|
|
62
|
+
*
|
|
63
|
+
* Шаги авторизации:
|
|
64
|
+
* 1. GET /en/login — получение страницы логина и CSRF токена
|
|
65
|
+
* 2. POST /en/login — отправка формы с credentials
|
|
66
|
+
* 3. Проверка наличия индикаторов успешной авторизации
|
|
67
|
+
* 4. Сохранение cookies в файл
|
|
68
|
+
*
|
|
69
|
+
* Использует Symfony Security форму с полями:
|
|
70
|
+
* - username (не email!)
|
|
71
|
+
* - password
|
|
72
|
+
* - _csrf_token
|
|
73
|
+
* - _remember_me
|
|
74
|
+
* - _target_path
|
|
75
|
+
*
|
|
76
|
+
* @throws Error если авторизация не удалась
|
|
77
|
+
*/
|
|
78
|
+
async loginUser() {
|
|
79
|
+
if (!this.login || !this.password) {
|
|
80
|
+
throw new Error('Login и Password должны быть переданы в конструктор');
|
|
81
|
+
}
|
|
82
|
+
this.report?.({ stage: 'auth', message: 'Starting authentication process...' });
|
|
83
|
+
try {
|
|
84
|
+
const client = this.httpClient.getClient();
|
|
85
|
+
// STEP 1: GET login page для получения PHP сессии и CSRF токена
|
|
86
|
+
console.log('📥 Шаг 1/3: Получаем страницу логина для инициализации сессии...');
|
|
87
|
+
const loginPageResponse = await client.get(iiko_parser_config_1.IikoParserConfig.endpoints.login);
|
|
88
|
+
console.log(`✅ Страница логина получена. Статус: ${loginPageResponse.status}`);
|
|
89
|
+
// Debug: показываем cookies после GET
|
|
90
|
+
await this.httpClient.debugCookies();
|
|
91
|
+
// STEP 2: Извлекаем CSRF токен из HTML
|
|
92
|
+
console.log('🔍 Шаг 2/3: Извлекаем CSRF токен из HTML...');
|
|
93
|
+
const csrfToken = this.extractCsrfToken(loginPageResponse.data);
|
|
94
|
+
if (!csrfToken) {
|
|
95
|
+
console.warn('⚠️ CSRF токен не найден в HTML');
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
console.log(`✅ CSRF токен извлечён: ${csrfToken.substring(0, 20)}...`);
|
|
99
|
+
}
|
|
100
|
+
// STEP 3: POST login с полными данными (Symfony Security)
|
|
101
|
+
console.log('📤 Шаг 3/3: Отправляем данные авторизации (Symfony form)...');
|
|
102
|
+
const formData = new URLSearchParams();
|
|
103
|
+
formData.append('username', this.login); // ← Symfony uses "username", not "email"!
|
|
104
|
+
formData.append('password', this.password);
|
|
105
|
+
formData.append('_remember_me', 'on'); // ← Symfony remember me checkbox
|
|
106
|
+
formData.append('_target_path', '/en/cabinet/profile.html'); // ← REQUIRED for Symfony!
|
|
107
|
+
// Добавляем CSRF токен если найден
|
|
108
|
+
if (csrfToken) {
|
|
109
|
+
formData.append('_csrf_token', csrfToken);
|
|
110
|
+
}
|
|
111
|
+
console.debug(`📋 Отправляемые поля: username, password, _remember_me, _target_path${csrfToken ? ', _csrf_token' : ''}`);
|
|
112
|
+
const postResponse = await client.post(iiko_parser_config_1.IikoParserConfig.endpoints.login, formData, {
|
|
113
|
+
headers: {
|
|
114
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
115
|
+
'Referer': `${iiko_parser_config_1.IikoParserConfig.baseUrl}${iiko_parser_config_1.IikoParserConfig.endpoints.login}`,
|
|
116
|
+
'Origin': iiko_parser_config_1.IikoParserConfig.baseUrl,
|
|
117
|
+
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
|
|
118
|
+
'Accept-Language': 'en-US,en;q=0.9',
|
|
119
|
+
'Upgrade-Insecure-Requests': '1',
|
|
120
|
+
},
|
|
121
|
+
maxRedirects: 5,
|
|
122
|
+
validateStatus: () => true, // Allow all statuses (including redirects)
|
|
123
|
+
});
|
|
124
|
+
console.log(`✅ POST запрос выполнен. Статус: ${postResponse.status}`);
|
|
125
|
+
// Если редирект - это нормально для Symfony
|
|
126
|
+
if (postResponse.status === 302 || postResponse.status === 301) {
|
|
127
|
+
console.log(`🔄 Редирект обнаружен на: ${postResponse.headers.location}`);
|
|
128
|
+
}
|
|
129
|
+
// Debug: показываем cookies после POST
|
|
130
|
+
await this.httpClient.debugCookies();
|
|
131
|
+
// Проверяем, что авторизация действительно прошла
|
|
132
|
+
const isAuthenticated = await this.verifyAuthentication();
|
|
133
|
+
if (!isAuthenticated) {
|
|
134
|
+
throw new Error('Авторизация не удалась: сессия создана, но пользователь не аутентифицирован');
|
|
135
|
+
}
|
|
136
|
+
this.report?.({ stage: 'auth', message: 'Authentication completed successfully' });
|
|
137
|
+
// Сохраняем cookies
|
|
138
|
+
await this.saveCookies();
|
|
139
|
+
}
|
|
140
|
+
catch (error) {
|
|
141
|
+
console.error('❌ Ошибка при авторизации:', error.message);
|
|
142
|
+
if (error.response) {
|
|
143
|
+
console.error(`HTTP статус: ${error.response.status}`);
|
|
144
|
+
const preview = typeof error.response.data === 'string'
|
|
145
|
+
? error.response.data.substring(0, 300)
|
|
146
|
+
: JSON.stringify(error.response.data).substring(0, 300);
|
|
147
|
+
console.error(`Данные ответа: ${preview}`);
|
|
148
|
+
}
|
|
149
|
+
throw error;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Извлекает CSRF токен из HTML страницы логина
|
|
154
|
+
*/
|
|
155
|
+
extractCsrfToken(html) {
|
|
156
|
+
try {
|
|
157
|
+
const $ = cheerio.load(html);
|
|
158
|
+
// Ищем по разным возможным селекторам
|
|
159
|
+
const selectors = [
|
|
160
|
+
'input[name="_csrf_token"]',
|
|
161
|
+
'input[name="csrf_token"]',
|
|
162
|
+
'input[name="_token"]',
|
|
163
|
+
'input[name="token"]',
|
|
164
|
+
'input[type="hidden"][name*="csrf"]',
|
|
165
|
+
'input[type="hidden"][name*="token"]',
|
|
166
|
+
];
|
|
167
|
+
for (const selector of selectors) {
|
|
168
|
+
const token = $(selector).val();
|
|
169
|
+
if (token && typeof token === 'string') {
|
|
170
|
+
console.debug(`CSRF токен найден через селектор: ${selector}`);
|
|
171
|
+
return token;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// Попробуем regex если селекторы не сработали
|
|
175
|
+
const regexPatterns = [
|
|
176
|
+
/_csrf_token["']?\s*[:=]\s*["']([^"']+)["']/i,
|
|
177
|
+
/csrf[_-]?token["']?\s*[:=]\s*["']([^"']+)["']/i,
|
|
178
|
+
/<input[^>]*name=["']_csrf_token["'][^>]*value=["']([^"']+)["']/i,
|
|
179
|
+
];
|
|
180
|
+
for (const regex of regexPatterns) {
|
|
181
|
+
const match = html.match(regex);
|
|
182
|
+
if (match && match[1]) {
|
|
183
|
+
console.debug(`CSRF токен найден через regex: ${regex}`);
|
|
184
|
+
return match[1];
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return null;
|
|
188
|
+
}
|
|
189
|
+
catch (error) {
|
|
190
|
+
console.error('Ошибка при извлечении CSRF токена:', error.message);
|
|
191
|
+
return null;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Проверяет, что пользователь действительно аутентифицирован
|
|
196
|
+
*/
|
|
197
|
+
async verifyAuthentication() {
|
|
198
|
+
try {
|
|
199
|
+
console.log('🔍 Проверка аутентификации...');
|
|
200
|
+
const client = this.httpClient.getClient();
|
|
201
|
+
const response = await client.get(iiko_parser_config_1.IikoParserConfig.endpoints.profile);
|
|
202
|
+
// Проверяем статус
|
|
203
|
+
if (response.status !== 200) {
|
|
204
|
+
console.warn(`⚠️ Неожиданный статус: ${response.status}`);
|
|
205
|
+
return false;
|
|
206
|
+
}
|
|
207
|
+
const html = response.data || '';
|
|
208
|
+
// Проверяем наличие признаков НЕавторизованности
|
|
209
|
+
if (typeof html === 'string') {
|
|
210
|
+
const errorIndicators = [
|
|
211
|
+
'Ошибка 403',
|
|
212
|
+
'Доступ запрещен',
|
|
213
|
+
'Access denied',
|
|
214
|
+
'Forbidden',
|
|
215
|
+
'/login',
|
|
216
|
+
'form-signin',
|
|
217
|
+
'auth-form',
|
|
218
|
+
'Please sign in',
|
|
219
|
+
'Log in',
|
|
220
|
+
'Sign in',
|
|
221
|
+
'type="password"', // login form input
|
|
222
|
+
];
|
|
223
|
+
for (const indicator of errorIndicators) {
|
|
224
|
+
if (html.includes(indicator)) {
|
|
225
|
+
console.warn(`⚠️ Обнаружен индикатор отсутствия авторизации: "${indicator}"`);
|
|
226
|
+
return false;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
// Проверяем наличие признаков успешной авторизации
|
|
230
|
+
const successIndicators = [
|
|
231
|
+
'profile',
|
|
232
|
+
'cabinet',
|
|
233
|
+
'logout',
|
|
234
|
+
'личный кабинет',
|
|
235
|
+
'профиль',
|
|
236
|
+
'sign out',
|
|
237
|
+
'log out',
|
|
238
|
+
];
|
|
239
|
+
let foundSuccess = false;
|
|
240
|
+
for (const indicator of successIndicators) {
|
|
241
|
+
if (html.toLowerCase().includes(indicator.toLowerCase())) {
|
|
242
|
+
foundSuccess = true;
|
|
243
|
+
console.debug(`✅ Найден индикатор авторизации: "${indicator}"`);
|
|
244
|
+
break;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
if (!foundSuccess) {
|
|
248
|
+
console.warn('⚠️ Не найдено признаков успешной авторизации');
|
|
249
|
+
return false;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
console.log('✅ Аутентификация подтверждена');
|
|
253
|
+
return true;
|
|
254
|
+
}
|
|
255
|
+
catch (error) {
|
|
256
|
+
console.error('❌ Ошибка при проверке аутентификации:', error.message);
|
|
257
|
+
return false;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
async saveCookies() {
|
|
261
|
+
try {
|
|
262
|
+
const cookieJar = this.httpClient.getCookieJar();
|
|
263
|
+
const cookiesJson = JSON.stringify(cookieJar.toJSON());
|
|
264
|
+
// Убедимся, что директория существует
|
|
265
|
+
const cookiesDir = path.dirname(this.cookiesPath);
|
|
266
|
+
await fs.mkdir(cookiesDir, { recursive: true });
|
|
267
|
+
await fs.writeFile(this.cookiesPath, cookiesJson, 'utf-8');
|
|
268
|
+
console.log(`💾 Cookies сохранены в ${this.cookiesPath}`);
|
|
269
|
+
}
|
|
270
|
+
catch (error) {
|
|
271
|
+
console.error('❌ Ошибка при сохранении cookies:', error.message);
|
|
272
|
+
throw error;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
async loadCookies() {
|
|
276
|
+
try {
|
|
277
|
+
const cookiesData = await fs.readFile(this.cookiesPath, 'utf-8');
|
|
278
|
+
const cookieJar = tough_cookie_1.CookieJar.fromJSON(cookiesData);
|
|
279
|
+
console.log('📂 Cookies загружены из файла');
|
|
280
|
+
return cookieJar;
|
|
281
|
+
}
|
|
282
|
+
catch (error) {
|
|
283
|
+
if (error.code === 'ENOENT') {
|
|
284
|
+
console.log('📂 Файл cookies не найден');
|
|
285
|
+
return null;
|
|
286
|
+
}
|
|
287
|
+
console.error('❌ Ошибка при загрузке cookies:', error.message);
|
|
288
|
+
throw error;
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
async cookiesFileExists() {
|
|
292
|
+
try {
|
|
293
|
+
await fs.access(this.cookiesPath);
|
|
294
|
+
return true;
|
|
295
|
+
}
|
|
296
|
+
catch {
|
|
297
|
+
return false;
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
exports.IikoAuthService = IikoAuthService;
|
|
302
|
+
//# sourceMappingURL=iiko-auth.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iiko-auth.service.js","sourceRoot":"","sources":["../../../src/core/auth/iiko-auth.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AxiosInstance } from 'axios';
|
|
2
|
+
import { CookieJar } from 'tough-cookie';
|
|
3
|
+
export declare class IikoHttpClient {
|
|
4
|
+
private axiosInstance;
|
|
5
|
+
private cookieJar;
|
|
6
|
+
constructor();
|
|
7
|
+
private createAxiosInstance;
|
|
8
|
+
getClient(): AxiosInstance;
|
|
9
|
+
getCookieJar(): CookieJar;
|
|
10
|
+
setCookieJar(cookieJar: CookieJar): void;
|
|
11
|
+
debugCookies(): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=iiko-http.client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iiko-http.client.d.ts","sourceRoot":"","sources":["../../../src/core/http/iiko-http.client.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAE7C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzC,qBAAa,cAAc;IACzB,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,SAAS,CAAY;;IAO7B,OAAO,CAAC,mBAAmB;IAwB3B,SAAS,IAAI,aAAa;IAI1B,YAAY,IAAI,SAAS;IAIzB,YAAY,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAMlC,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;CAMpC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.IikoHttpClient = void 0;
|
|
7
|
+
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
const axios_cookiejar_support_1 = require("axios-cookiejar-support");
|
|
9
|
+
const tough_cookie_1 = require("tough-cookie");
|
|
10
|
+
const iiko_parser_config_1 = require("../iiko-parser.config");
|
|
11
|
+
class IikoHttpClient {
|
|
12
|
+
constructor() {
|
|
13
|
+
this.cookieJar = new tough_cookie_1.CookieJar();
|
|
14
|
+
this.createAxiosInstance();
|
|
15
|
+
}
|
|
16
|
+
createAxiosInstance() {
|
|
17
|
+
// CRITICAL: jar must be passed BEFORE wrapper()
|
|
18
|
+
const axiosConfig = {
|
|
19
|
+
baseURL: iiko_parser_config_1.IikoParserConfig.baseUrl,
|
|
20
|
+
jar: this.cookieJar, // ← jar MUST be here
|
|
21
|
+
withCredentials: true,
|
|
22
|
+
maxRedirects: 5,
|
|
23
|
+
validateStatus: (status) => status >= 200 && status < 400,
|
|
24
|
+
headers: {
|
|
25
|
+
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
|
|
26
|
+
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
|
|
27
|
+
'Accept-Language': 'en-US,en;q=0.9',
|
|
28
|
+
'Accept-Encoding': 'gzip, deflate, br',
|
|
29
|
+
'Connection': 'keep-alive',
|
|
30
|
+
'Upgrade-Insecure-Requests': '1',
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
const instance = axios_1.default.create(axiosConfig);
|
|
34
|
+
this.axiosInstance = (0, axios_cookiejar_support_1.wrapper)(instance);
|
|
35
|
+
}
|
|
36
|
+
getClient() {
|
|
37
|
+
return this.axiosInstance;
|
|
38
|
+
}
|
|
39
|
+
getCookieJar() {
|
|
40
|
+
return this.cookieJar;
|
|
41
|
+
}
|
|
42
|
+
setCookieJar(cookieJar) {
|
|
43
|
+
this.cookieJar = cookieJar;
|
|
44
|
+
// CRITICAL: Recreate axios instance with new CookieJar
|
|
45
|
+
this.createAxiosInstance();
|
|
46
|
+
}
|
|
47
|
+
async debugCookies() {
|
|
48
|
+
const cookies = await this.cookieJar.getCookies(iiko_parser_config_1.IikoParserConfig.baseUrl);
|
|
49
|
+
const cookieString = cookies.map((c) => `${c.key}=${c.value}`).join('; ');
|
|
50
|
+
console.debug(`Current cookies: ${cookieString || '(empty)'}`);
|
|
51
|
+
console.debug(`Total cookies count: ${cookies.length}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
exports.IikoHttpClient = IikoHttpClient;
|
|
55
|
+
//# sourceMappingURL=iiko-http.client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iiko-http.client.js","sourceRoot":"","sources":["../../../src/core/http/iiko-http.client.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA6C;AAC7C,qEAAkD;AAClD,+CAAyC;AACzC,8DAAyD;AAEzD,MAAa,cAAc;IAIzB;QACE,IAAI,CAAC,SAAS,GAAG,IAAI,wBAAS,EAAE,CAAC;QACjC,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAEO,mBAAmB;QACzB,gDAAgD;QAChD,MAAM,WAAW,GAAQ;YACvB,OAAO,EAAE,qCAAgB,CAAC,OAAO;YACjC,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,qBAAqB;YAC1C,eAAe,EAAE,IAAI;YACrB,YAAY,EAAE,CAAC;YACf,cAAc,EAAE,CAAC,MAAc,EAAE,EAAE,CAAC,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG;YACjE,OAAO,EAAE;gBACP,YAAY,EACV,iHAAiH;gBACnH,QAAQ,EACN,4EAA4E;gBAC9E,iBAAiB,EAAE,gBAAgB;gBACnC,iBAAiB,EAAE,mBAAmB;gBACtC,YAAY,EAAE,YAAY;gBAC1B,2BAA2B,EAAE,GAAG;aACjC;SACF,CAAC;QAEF,MAAM,QAAQ,GAAG,eAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAC3C,IAAI,CAAC,aAAa,GAAG,IAAA,iCAAO,EAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,YAAY,CAAC,SAAoB;QAC/B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,uDAAuD;QACvD,IAAI,CAAC,mBAAmB,EAAE,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,qCAAgB,CAAC,OAAO,CAAC,CAAC;QAC1E,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1E,OAAO,CAAC,KAAK,CAAC,oBAAoB,YAAY,IAAI,SAAS,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,KAAK,CAAC,wBAAwB,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAC1D,CAAC;CACF;AArDD,wCAqDC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Глобальная конфигурация парсера iiko Partner Portal.
|
|
3
|
+
*
|
|
4
|
+
* Содержит базовые URL, пути к endpoints и утилиты для определения
|
|
5
|
+
* расположения файлов cookies.
|
|
6
|
+
*/
|
|
7
|
+
export declare const IikoParserConfig: {
|
|
8
|
+
baseUrl: string;
|
|
9
|
+
endpoints: {
|
|
10
|
+
login: string;
|
|
11
|
+
profile: string;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Определяет директорию для хранения cookies.
|
|
15
|
+
*
|
|
16
|
+
* Порядок приоритета:
|
|
17
|
+
* 1. Если передан customPath — используется он
|
|
18
|
+
* 2. Если задана переменная окружения VV_IIKO_COOKIES_DIR — используется она
|
|
19
|
+
* 3. По умолчанию: {process.cwd()}/.vv-cookies
|
|
20
|
+
*
|
|
21
|
+
* Cookies хранятся в проекте-потребителе, а не внутри node_modules.
|
|
22
|
+
*
|
|
23
|
+
* @param customPath - Пользовательский путь к директории cookies (опционально)
|
|
24
|
+
* @returns Полный путь к файлу cookies
|
|
25
|
+
*/
|
|
26
|
+
getCookiesPath: (customPath?: string) => string;
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=iiko-parser.config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iiko-parser.config.d.ts","sourceRoot":"","sources":["../../src/core/iiko-parser.config.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB;;;;;;IAO3B;;;;;;;;;;;;OAYG;kCAC2B,MAAM,KAAG,MAAM;CAc9C,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.IikoParserConfig = void 0;
|
|
37
|
+
const path = __importStar(require("path"));
|
|
38
|
+
/**
|
|
39
|
+
* Глобальная конфигурация парсера iiko Partner Portal.
|
|
40
|
+
*
|
|
41
|
+
* Содержит базовые URL, пути к endpoints и утилиты для определения
|
|
42
|
+
* расположения файлов cookies.
|
|
43
|
+
*/
|
|
44
|
+
exports.IikoParserConfig = {
|
|
45
|
+
baseUrl: 'https://pp.iiko.ru',
|
|
46
|
+
endpoints: {
|
|
47
|
+
login: '/en/login',
|
|
48
|
+
profile: '/ru/cabinet/profile.html',
|
|
49
|
+
},
|
|
50
|
+
/**
|
|
51
|
+
* Определяет директорию для хранения cookies.
|
|
52
|
+
*
|
|
53
|
+
* Порядок приоритета:
|
|
54
|
+
* 1. Если передан customPath — используется он
|
|
55
|
+
* 2. Если задана переменная окружения VV_IIKO_COOKIES_DIR — используется она
|
|
56
|
+
* 3. По умолчанию: {process.cwd()}/.vv-cookies
|
|
57
|
+
*
|
|
58
|
+
* Cookies хранятся в проекте-потребителе, а не внутри node_modules.
|
|
59
|
+
*
|
|
60
|
+
* @param customPath - Пользовательский путь к директории cookies (опционально)
|
|
61
|
+
* @returns Полный путь к файлу cookies
|
|
62
|
+
*/
|
|
63
|
+
getCookiesPath: (customPath) => {
|
|
64
|
+
if (customPath) {
|
|
65
|
+
return customPath;
|
|
66
|
+
}
|
|
67
|
+
// Проверяем переменную окружения
|
|
68
|
+
const envCookiesDir = process.env.VV_IIKO_COOKIES_DIR;
|
|
69
|
+
if (envCookiesDir) {
|
|
70
|
+
return path.join(envCookiesDir, 'iiko.cookies.json');
|
|
71
|
+
}
|
|
72
|
+
// Дефолтный путь: {cwd}/.vv-cookies/iiko.cookies.json
|
|
73
|
+
return path.join(process.cwd(), '.vv-cookies', 'iiko.cookies.json');
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
//# sourceMappingURL=iiko-parser.config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iiko-parser.config.js","sourceRoot":"","sources":["../../src/core/iiko-parser.config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAA6B;AAE7B;;;;;GAKG;AACU,QAAA,gBAAgB,GAAG;IAC9B,OAAO,EAAE,oBAAoB;IAC7B,SAAS,EAAE;QACT,KAAK,EAAE,WAAW;QAClB,OAAO,EAAE,0BAA0B;KACpC;IAED;;;;;;;;;;;;OAYG;IACH,cAAc,EAAE,CAAC,UAAmB,EAAU,EAAE;QAC9C,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,UAAU,CAAC;QACpB,CAAC;QAED,iCAAiC;QACjC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC;QACtD,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC;QACvD,CAAC;QAED,sDAAsD;QACtD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,mBAAmB,CAAC,CAAC;IACtE,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { IikoSessionService } from '../session/iiko-session.service';
|
|
2
|
+
import { CompanyProfile } from '../../interfaces/company-profile.interface';
|
|
3
|
+
export declare class IikoParserService {
|
|
4
|
+
private readonly sessionService;
|
|
5
|
+
constructor(sessionService: IikoSessionService);
|
|
6
|
+
/**
|
|
7
|
+
* Парсит профиль компании из /en/cabinet/profile.html
|
|
8
|
+
*/
|
|
9
|
+
parseCompanyProfile(): Promise<CompanyProfile>;
|
|
10
|
+
/**
|
|
11
|
+
* Выводит красивые логи профиля компании
|
|
12
|
+
*/
|
|
13
|
+
logCompanyProfile(profile: CompanyProfile): void;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=iiko-parser.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iiko-parser.service.d.ts","sourceRoot":"","sources":["../../../src/core/parser/iiko-parser.service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAC;AAE5E,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,cAAc;gBAAd,cAAc,EAAE,kBAAkB;IAE/D;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,cAAc,CAAC;IAoGpD;;OAEG;IACH,iBAAiB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;CAoBjD"}
|