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.
Files changed (87) hide show
  1. package/CHANGELOG.md +151 -0
  2. package/README.md +582 -0
  3. package/dist/clients/clients.fetcher.d.ts +102 -0
  4. package/dist/clients/clients.fetcher.d.ts.map +1 -0
  5. package/dist/clients/clients.fetcher.js +196 -0
  6. package/dist/clients/clients.fetcher.js.map +1 -0
  7. package/dist/clients/clients.parser.d.ts +144 -0
  8. package/dist/clients/clients.parser.d.ts.map +1 -0
  9. package/dist/clients/clients.parser.js +473 -0
  10. package/dist/clients/clients.parser.js.map +1 -0
  11. package/dist/clients/clients.service.d.ts +90 -0
  12. package/dist/clients/clients.service.d.ts.map +1 -0
  13. package/dist/clients/clients.service.js +277 -0
  14. package/dist/clients/clients.service.js.map +1 -0
  15. package/dist/clients/clients.types.d.ts +127 -0
  16. package/dist/clients/clients.types.d.ts.map +1 -0
  17. package/dist/clients/clients.types.js +6 -0
  18. package/dist/clients/clients.types.js.map +1 -0
  19. package/dist/clients/index.d.ts +5 -0
  20. package/dist/clients/index.d.ts.map +1 -0
  21. package/dist/clients/index.js +25 -0
  22. package/dist/clients/index.js.map +1 -0
  23. package/dist/core/auth/iiko-auth.service.d.ts +52 -0
  24. package/dist/core/auth/iiko-auth.service.d.ts.map +1 -0
  25. package/dist/core/auth/iiko-auth.service.js +302 -0
  26. package/dist/core/auth/iiko-auth.service.js.map +1 -0
  27. package/dist/core/http/iiko-http.client.d.ts +13 -0
  28. package/dist/core/http/iiko-http.client.d.ts.map +1 -0
  29. package/dist/core/http/iiko-http.client.js +55 -0
  30. package/dist/core/http/iiko-http.client.js.map +1 -0
  31. package/dist/core/iiko-parser.config.d.ts +28 -0
  32. package/dist/core/iiko-parser.config.d.ts.map +1 -0
  33. package/dist/core/iiko-parser.config.js +76 -0
  34. package/dist/core/iiko-parser.config.js.map +1 -0
  35. package/dist/core/parser/iiko-parser.service.d.ts +15 -0
  36. package/dist/core/parser/iiko-parser.service.d.ts.map +1 -0
  37. package/dist/core/parser/iiko-parser.service.js +156 -0
  38. package/dist/core/parser/iiko-parser.service.js.map +1 -0
  39. package/dist/core/session/iiko-session.service.d.ts +68 -0
  40. package/dist/core/session/iiko-session.service.d.ts.map +1 -0
  41. package/dist/core/session/iiko-session.service.js +209 -0
  42. package/dist/core/session/iiko-session.service.js.map +1 -0
  43. package/dist/iiko-parser.d.ts +149 -0
  44. package/dist/iiko-parser.d.ts.map +1 -0
  45. package/dist/iiko-parser.js +209 -0
  46. package/dist/iiko-parser.js.map +1 -0
  47. package/dist/index.d.ts +4 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +7 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/interfaces/company-profile.interface.d.ts +12 -0
  52. package/dist/interfaces/company-profile.interface.d.ts.map +1 -0
  53. package/dist/interfaces/company-profile.interface.js +3 -0
  54. package/dist/interfaces/company-profile.interface.js.map +1 -0
  55. package/dist/invoices/index.d.ts +6 -0
  56. package/dist/invoices/index.d.ts.map +1 -0
  57. package/dist/invoices/index.js +22 -0
  58. package/dist/invoices/index.js.map +1 -0
  59. package/dist/invoices/invoices.fetcher.d.ts +49 -0
  60. package/dist/invoices/invoices.fetcher.d.ts.map +1 -0
  61. package/dist/invoices/invoices.fetcher.js +141 -0
  62. package/dist/invoices/invoices.fetcher.js.map +1 -0
  63. package/dist/invoices/invoices.filters.d.ts +40 -0
  64. package/dist/invoices/invoices.filters.d.ts.map +1 -0
  65. package/dist/invoices/invoices.filters.js +81 -0
  66. package/dist/invoices/invoices.filters.js.map +1 -0
  67. package/dist/invoices/invoices.parser.d.ts +101 -0
  68. package/dist/invoices/invoices.parser.d.ts.map +1 -0
  69. package/dist/invoices/invoices.parser.js +540 -0
  70. package/dist/invoices/invoices.parser.js.map +1 -0
  71. package/dist/invoices/invoices.service.d.ts +82 -0
  72. package/dist/invoices/invoices.service.d.ts.map +1 -0
  73. package/dist/invoices/invoices.service.js +361 -0
  74. package/dist/invoices/invoices.service.js.map +1 -0
  75. package/dist/invoices/invoices.storage.service.d.ts +30 -0
  76. package/dist/invoices/invoices.storage.service.d.ts.map +1 -0
  77. package/dist/invoices/invoices.storage.service.js +135 -0
  78. package/dist/invoices/invoices.storage.service.js.map +1 -0
  79. package/dist/invoices/invoices.types.d.ts +94 -0
  80. package/dist/invoices/invoices.types.d.ts.map +1 -0
  81. package/dist/invoices/invoices.types.js +3 -0
  82. package/dist/invoices/invoices.types.js.map +1 -0
  83. package/dist/types.d.ts +138 -0
  84. package/dist/types.d.ts.map +1 -0
  85. package/dist/types.js +4 -0
  86. package/dist/types.js.map +1 -0
  87. package/package.json +52 -0
@@ -0,0 +1,209 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IikoParser = void 0;
4
+ const iiko_parser_config_1 = require("./core/iiko-parser.config");
5
+ const iiko_http_client_1 = require("./core/http/iiko-http.client");
6
+ const iiko_auth_service_1 = require("./core/auth/iiko-auth.service");
7
+ const iiko_session_service_1 = require("./core/session/iiko-session.service");
8
+ const iiko_parser_service_1 = require("./core/parser/iiko-parser.service");
9
+ const invoices_service_1 = require("./invoices/invoices.service");
10
+ const invoices_fetcher_1 = require("./invoices/invoices.fetcher");
11
+ const invoices_parser_1 = require("./invoices/invoices.parser");
12
+ const invoices_filters_1 = require("./invoices/invoices.filters");
13
+ const invoices_storage_service_1 = require("./invoices/invoices.storage.service");
14
+ const clients_service_1 = require("./clients/clients.service");
15
+ /**
16
+ * Главный класс для работы с iiko Partner Portal.
17
+ *
18
+ * Предоставляет высокоуровневое API для:
19
+ * - Получения списка инвойсов с фильтрацией
20
+ * - Парсинга деталей инвойсов из модальных окон
21
+ * - Получения профиля компании
22
+ *
23
+ * Управляет всеми внутренними сервисами: авторизацией, HTTP-клиентом,
24
+ * парсингом HTML и хранением cookies.
25
+ */
26
+ class IikoParser {
27
+ /**
28
+ * Создаёт экземпляр парсера iiko Partner Portal.
29
+ *
30
+ * Инициализирует все внутренние сервисы в правильном порядке зависимостей.
31
+ * Cookies сохраняются автоматически после авторизации для переиспользования.
32
+ *
33
+ * @param options - Конфигурация парсера (логин, пароль, опциональные настройки)
34
+ */
35
+ constructor(options) {
36
+ this.options = options;
37
+ // Setup cookies path
38
+ this.cookiesPath = iiko_parser_config_1.IikoParserConfig.getCookiesPath(options.cookiesPath);
39
+ // Create all services following the same dependency chain as reference
40
+ this.httpClient = new iiko_http_client_1.IikoHttpClient();
41
+ this.authService = new iiko_auth_service_1.IikoAuthService(options.login, options.password, this.httpClient, this.cookiesPath, this.report.bind(this));
42
+ this.sessionService = new iiko_session_service_1.IikoSessionService(this.authService, this.httpClient, this.report.bind(this));
43
+ this.parserService = new iiko_parser_service_1.IikoParserService(this.sessionService);
44
+ // Create invoices services
45
+ const invoicesFetcher = new invoices_fetcher_1.InvoicesFetcher(this.sessionService);
46
+ const invoicesParser = new invoices_parser_1.InvoicesParser();
47
+ const invoicesFilters = new invoices_filters_1.InvoicesFilters();
48
+ const invoicesStorage = new invoices_storage_service_1.IikoInvoicesStorageService();
49
+ this.invoicesService = new invoices_service_1.InvoicesService(invoicesFetcher, invoicesParser, invoicesFilters, invoicesStorage, this.report.bind(this));
50
+ // Create clients service
51
+ this.clientsService = new clients_service_1.ClientsService(this.sessionService, this.report.bind(this));
52
+ }
53
+ /**
54
+ * Безопасно сообщает о прогрессе выполнения.
55
+ *
56
+ * Вызывает callback только если он был передан в options.
57
+ * Не выбрасывает исключения при ошибках в callback.
58
+ *
59
+ * @param event - Событие прогресса
60
+ */
61
+ report(event) {
62
+ this.options.onProgress?.(event);
63
+ }
64
+ /**
65
+ * Инициализирует или проверяет текущую сессию.
66
+ *
67
+ * Порядок действий:
68
+ * 1. Пытается загрузить cookies из файла
69
+ * 2. Если cookies валидные — использует их
70
+ * 3. Если cookies отсутствуют или невалидные — выполняет авторизацию
71
+ *
72
+ * Метод безопасно вызывать многократно. Повторная авторизация
73
+ * выполняется только при необходимости.
74
+ *
75
+ * @returns Promise, который резолвится после успешной инициализации сессии
76
+ */
77
+ async ensureSession() {
78
+ // This follows the EXACT same logic as the reference
79
+ await this.sessionService.ensureSession();
80
+ }
81
+ /**
82
+ * Получает список инвойсов с опциональной фильтрацией и деталями.
83
+ *
84
+ * Без флага `withDetails` возвращает только основные данные (быстро).
85
+ * С флагом `withDetails: true` дополнительно загружает items и subscriptions
86
+ * из модальных окон каждого инвойса (медленнее).
87
+ *
88
+ * Поддерживаемые фильтры:
89
+ * - searchBy: 'invoice_number' | 'tax_id' | 'client' | 'firm'
90
+ * - searchValue: значение для поиска
91
+ * - dateFrom / dateTo: фильтрация по дате (YYYY-MM-DD)
92
+ * - pagination: управление пагинацией (pageSize, maxPages)
93
+ * - withDetails: загружать ли детали из модальных окон
94
+ *
95
+ * Пагинация:
96
+ * - По умолчанию загружаются все страницы
97
+ * - Можно ограничить через pagination.maxPages
98
+ * - Размер страницы задаётся через pagination.pageSize (по умолчанию: 50)
99
+ *
100
+ * @param filter - Опциональные параметры фильтрации и загрузки деталей
101
+ * @returns Массив инвойсов с заполненными полями
102
+ *
103
+ * @example
104
+ * // Быстрый поиск без деталей
105
+ * const invoices = await parser.getInvoices({ searchBy: 'invoice_number', searchValue: 'INV123' });
106
+ *
107
+ * @example
108
+ * // Полная загрузка с деталями
109
+ * const invoices = await parser.getInvoices({ withDetails: true });
110
+ *
111
+ * @example
112
+ * // Загрузка с ограничением пагинации
113
+ * const invoices = await parser.getInvoices({
114
+ * pagination: { maxPages: 2, pageSize: 100 }
115
+ * });
116
+ */
117
+ async getInvoices(filter) {
118
+ // Extract pagination options
119
+ const pageSize = filter?.pagination?.pageSize || 50;
120
+ const maxPages = filter?.pagination?.maxPages;
121
+ // Delegate to invoices service with pagination and date filters
122
+ const invoices = await this.invoicesService.fetchAndParseInvoices({
123
+ searchBy: filter?.searchBy,
124
+ searchValue: filter?.searchValue,
125
+ dateFrom: filter?.dateFrom,
126
+ dateTo: filter?.dateTo,
127
+ pageSize,
128
+ maxPages,
129
+ });
130
+ // Enrich with details from modal windows if requested
131
+ if (filter?.withDetails === true) {
132
+ const enrichedInvoices = await this.invoicesService.enrichInvoicesWithDetails(invoices);
133
+ this.report({ stage: 'done', message: 'Invoices parsing completed with details' });
134
+ return enrichedInvoices;
135
+ }
136
+ this.report({ stage: 'done', message: 'Invoices parsing completed' });
137
+ return invoices;
138
+ }
139
+ /**
140
+ * Получает профиль компании из кабинета iiko Partner Portal.
141
+ *
142
+ * Извлекает информацию о компании, включая название, телефон и email.
143
+ * Требует предварительной инициализации сессии через `ensureSession()`.
144
+ *
145
+ * @returns Профиль компании с основными данными
146
+ */
147
+ async getCompanyProfile() {
148
+ // Get profile using parser service
149
+ const profile = await this.parserService.parseCompanyProfile();
150
+ // Convert to our public API format
151
+ return {
152
+ name: profile.companyName,
153
+ phone: profile.phone,
154
+ email: profile.email,
155
+ address: '', // Not available in original interface
156
+ };
157
+ }
158
+ /**
159
+ * Получает список клиентов с детальной информацией.
160
+ *
161
+ * Загружает все страницы клиентов из /en/cabinet/ajax/clients-list.html,
162
+ * затем для каждого клиента загружает детальную информацию профиля
163
+ * из /en/cabinet/client-area/index.html.
164
+ *
165
+ * Детали клиента включают:
166
+ * - UUID клиента
167
+ * - Версия iiko
168
+ * - Email и телефон
169
+ * - Юридическое лицо (Legal Entity)
170
+ * - ИНН (TIN - только цифры)
171
+ *
172
+ * Поддерживаемые фильтры:
173
+ * - query: поисковый запрос по названию клиента
174
+ * - perPage: количество клиентов на странице (по умолчанию: 20)
175
+ * - maxPages: максимальное количество страниц для загрузки (по умолчанию: все)
176
+ *
177
+ * Пагинация:
178
+ * - По умолчанию загружаются все страницы
179
+ * - Можно ограничить через maxPages
180
+ *
181
+ * Progress stages:
182
+ * - fetch_clients: загрузка страниц со списком клиентов
183
+ * - parse_clients: парсинг списка клиентов
184
+ * - fetch_client_details: загрузка деталей каждого клиента
185
+ * - done: завершение работы
186
+ *
187
+ * @param filter - Опциональные параметры фильтрации
188
+ * @returns Массив клиентов с полной информацией
189
+ *
190
+ * @example
191
+ * // Загрузить всех клиентов
192
+ * const clients = await parser.getClients();
193
+ *
194
+ * @example
195
+ * // Поиск клиентов по запросу
196
+ * const clients = await parser.getClients({ query: 'Restaurant' });
197
+ *
198
+ * @example
199
+ * // Ограничить количество страниц
200
+ * const clients = await parser.getClients({ maxPages: 2, perPage: 50 });
201
+ */
202
+ async getClients(filter) {
203
+ const clients = await this.clientsService.fetchAndParseClients(filter);
204
+ this.report({ stage: 'done', message: 'Clients parsing completed' });
205
+ return clients;
206
+ }
207
+ }
208
+ exports.IikoParser = IikoParser;
209
+ //# sourceMappingURL=iiko-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iiko-parser.js","sourceRoot":"","sources":["../src/iiko-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { IikoParser } from './iiko-parser';
2
+ export type { IikoParserOptions, InvoicesFilter, InvoiceData, CompanyProfile, ParserProgressEvent, ParserProgressCallback } from './types';
3
+ export type { ClientsFilter, ClientData } from './clients/clients.types';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,YAAY,EACV,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,SAAS,CAAC;AACjB,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IikoParser = void 0;
4
+ // Public API exports
5
+ var iiko_parser_1 = require("./iiko-parser");
6
+ Object.defineProperty(exports, "IikoParser", { enumerable: true, get: function () { return iiko_parser_1.IikoParser; } });
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,qBAAqB;AACrB,6CAA2C;AAAlC,yGAAA,UAAU,OAAA"}
@@ -0,0 +1,12 @@
1
+ export interface CompanyProfile {
2
+ companyName: string;
3
+ phone: string;
4
+ email: string;
5
+ partnerStatus: string;
6
+ masterPartner: {
7
+ company: string;
8
+ manager: string;
9
+ email: string;
10
+ };
11
+ }
12
+ //# sourceMappingURL=company-profile.interface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"company-profile.interface.d.ts","sourceRoot":"","sources":["../../src/interfaces/company-profile.interface.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=company-profile.interface.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"company-profile.interface.js","sourceRoot":"","sources":["../../src/interfaces/company-profile.interface.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ export * from './invoices.service';
2
+ export * from './invoices.fetcher';
3
+ export * from './invoices.parser';
4
+ export * from './invoices.filters';
5
+ export * from './invoices.types';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/invoices/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,oBAAoB,CAAC;AACnC,cAAc,mBAAmB,CAAC;AAClC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,22 @@
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./invoices.service"), exports);
18
+ __exportStar(require("./invoices.fetcher"), exports);
19
+ __exportStar(require("./invoices.parser"), exports);
20
+ __exportStar(require("./invoices.filters"), exports);
21
+ __exportStar(require("./invoices.types"), exports);
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/invoices/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,qDAAmC;AACnC,oDAAkC;AAClC,qDAAmC;AACnC,mDAAiC"}
@@ -0,0 +1,49 @@
1
+ import { IikoSessionService } from '../core/session/iiko-session.service';
2
+ import { InvoicesFetchParams } from './invoices.types';
3
+ /**
4
+ * Сервис для загрузки HTML страниц из iiko Partner Portal.
5
+ *
6
+ * Выполняет HTTP GET запросы к различным endpoints портала:
7
+ * - AJAX endpoint для получения таблицы инвойсов
8
+ * - Modal endpoint для получения деталей конкретного инвойса
9
+ *
10
+ * Использует авторизованный HTTP клиент с cookies из IikoSessionService.
11
+ */
12
+ export declare class InvoicesFetcher {
13
+ private readonly sessionService;
14
+ private readonly ajaxEndpoint;
15
+ private readonly modalEndpoint;
16
+ constructor(sessionService: IikoSessionService);
17
+ /**
18
+ * Выполняет HTTP GET запрос к AJAX endpoint iiko PP
19
+ * для получения HTML таблицы инвойсов.
20
+ *
21
+ * Использует уже авторизованный HTTP клиент с CookieJar.
22
+ * Не выполняет авторизацию и не валидирует сессию.
23
+ *
24
+ * Поддерживает пагинацию и кастомные query-параметры для фильтрации
25
+ * (searchBy, query и другие).
26
+ *
27
+ * @param params - Параметры пагинации (perPage, page)
28
+ * @param customParams - Дополнительные query-параметры (search_by, query, и т.д.)
29
+ * @returns HTML строку с таблицей инвойсов
30
+ */
31
+ fetchInvoicesHtml(params?: InvoicesFetchParams, customParams?: Record<string, any>): Promise<string>;
32
+ /**
33
+ * Загружает HTML модального окна с деталями инвойса
34
+ */
35
+ fetchInvoiceModal(clientId: string, invoiceId: string): Promise<string>;
36
+ /**
37
+ * Загружает HTML модального окна с деталями инвойса по прямому URL.
38
+ *
39
+ * URL обычно извлекается из поля `detailsUrl` объекта InvoiceData.
40
+ * Выполняет простой GET запрос без дополнительной обработки.
41
+ *
42
+ * Использует авторизованный HTTP клиент с CookieJar.
43
+ *
44
+ * @param url - Относительный или абсолютный URL модального окна
45
+ * @returns HTML строку с деталями инвойса (items, subscriptions)
46
+ */
47
+ fetchInvoiceDetails(url: string): Promise<string>;
48
+ }
49
+ //# sourceMappingURL=invoices.fetcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoices.fetcher.d.ts","sourceRoot":"","sources":["../../src/invoices/invoices.fetcher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;;;;;;;GAQG;AACH,qBAAa,eAAe;IAId,OAAO,CAAC,QAAQ,CAAC,cAAc;IAH3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiD;IAC9E,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA4C;gBAE7C,cAAc,EAAE,kBAAkB;IAE/D;;;;;;;;;;;;;OAaG;IACG,iBAAiB,CACrB,MAAM,CAAC,EAAE,mBAAmB,EAC5B,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GACjC,OAAO,CAAC,MAAM,CAAC;IA0DlB;;OAEG;IACG,iBAAiB,CACrB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC;IAkClB;;;;;;;;;;OAUG;IACG,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CA0BxD"}
@@ -0,0 +1,141 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InvoicesFetcher = void 0;
4
+ /**
5
+ * Сервис для загрузки HTML страниц из iiko Partner Portal.
6
+ *
7
+ * Выполняет HTTP GET запросы к различным endpoints портала:
8
+ * - AJAX endpoint для получения таблицы инвойсов
9
+ * - Modal endpoint для получения деталей конкретного инвойса
10
+ *
11
+ * Использует авторизованный HTTP клиент с cookies из IikoSessionService.
12
+ */
13
+ class InvoicesFetcher {
14
+ constructor(sessionService) {
15
+ this.sessionService = sessionService;
16
+ this.ajaxEndpoint = '/en/cabinet/invoices/get-for-customers-ajax';
17
+ this.modalEndpoint = '/en/cabinet/invoices/invoice-info.html';
18
+ }
19
+ /**
20
+ * Выполняет HTTP GET запрос к AJAX endpoint iiko PP
21
+ * для получения HTML таблицы инвойсов.
22
+ *
23
+ * Использует уже авторизованный HTTP клиент с CookieJar.
24
+ * Не выполняет авторизацию и не валидирует сессию.
25
+ *
26
+ * Поддерживает пагинацию и кастомные query-параметры для фильтрации
27
+ * (searchBy, query и другие).
28
+ *
29
+ * @param params - Параметры пагинации (perPage, page)
30
+ * @param customParams - Дополнительные query-параметры (search_by, query, и т.д.)
31
+ * @returns HTML строку с таблицей инвойсов
32
+ */
33
+ async fetchInvoicesHtml(params, customParams) {
34
+ try {
35
+ const perPage = params?.perPage || 10;
36
+ const page = params?.page || 1;
37
+ // Получаем авторизованный клиент (сессия уже инициализирована)
38
+ const client = await this.sessionService.getAuthorizedClient();
39
+ // Объединяем параметры
40
+ const queryParams = {
41
+ perPage,
42
+ page,
43
+ ...customParams,
44
+ };
45
+ // Выполняем GET запрос к AJAX endpoint
46
+ const response = await client.get(this.ajaxEndpoint, {
47
+ params: queryParams,
48
+ paramsSerializer: (params) => {
49
+ // Кастомный сериализатор для поддержки массивов в формате key[]=value
50
+ const parts = [];
51
+ Object.keys(params).forEach((key) => {
52
+ const value = params[key];
53
+ if (Array.isArray(value)) {
54
+ value.forEach((v) => {
55
+ parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(v)}`);
56
+ });
57
+ }
58
+ else {
59
+ parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`);
60
+ }
61
+ });
62
+ return parts.join('&');
63
+ },
64
+ });
65
+ if (response.status !== 200) {
66
+ throw new Error(`AJAX endpoint вернул статус ${response.status}`);
67
+ }
68
+ const html = response.data;
69
+ if (typeof html !== 'string') {
70
+ throw new Error('AJAX endpoint вернул не HTML');
71
+ }
72
+ return html;
73
+ }
74
+ catch (error) {
75
+ console.error(`❌ Ошибка при запросе таблицы инвойсов: ${error.message}`);
76
+ if (error.response) {
77
+ console.error(`HTTP статус: ${error.response.status}`);
78
+ }
79
+ throw error;
80
+ }
81
+ }
82
+ /**
83
+ * Загружает HTML модального окна с деталями инвойса
84
+ */
85
+ async fetchInvoiceModal(clientId, invoiceId) {
86
+ try {
87
+ // Получаем авторизованный клиент (сессия уже инициализирована)
88
+ const client = await this.sessionService.getAuthorizedClient();
89
+ const response = await client.get(this.modalEndpoint, {
90
+ params: {
91
+ client_id: clientId,
92
+ invoice_id: invoiceId,
93
+ },
94
+ });
95
+ if (response.status !== 200) {
96
+ throw new Error(`Modal endpoint вернул статус ${response.status}`);
97
+ }
98
+ const html = response.data;
99
+ if (typeof html !== 'string') {
100
+ throw new Error('Modal endpoint вернул не HTML');
101
+ }
102
+ return html;
103
+ }
104
+ catch (error) {
105
+ console.error(`❌ Ошибка при загрузке модального окна (client=${clientId}, invoice=${invoiceId}): ${error.message}`);
106
+ throw error;
107
+ }
108
+ }
109
+ /**
110
+ * Загружает HTML модального окна с деталями инвойса по прямому URL.
111
+ *
112
+ * URL обычно извлекается из поля `detailsUrl` объекта InvoiceData.
113
+ * Выполняет простой GET запрос без дополнительной обработки.
114
+ *
115
+ * Использует авторизованный HTTP клиент с CookieJar.
116
+ *
117
+ * @param url - Относительный или абсолютный URL модального окна
118
+ * @returns HTML строку с деталями инвойса (items, subscriptions)
119
+ */
120
+ async fetchInvoiceDetails(url) {
121
+ try {
122
+ // Получаем авторизованный клиент (сессия уже инициализирована)
123
+ const client = await this.sessionService.getAuthorizedClient();
124
+ const response = await client.get(url);
125
+ if (response.status !== 200) {
126
+ throw new Error(`Запрос к ${url} вернул статус ${response.status}`);
127
+ }
128
+ const html = response.data;
129
+ if (typeof html !== 'string') {
130
+ throw new Error('Endpoint вернул не HTML');
131
+ }
132
+ return html;
133
+ }
134
+ catch (error) {
135
+ console.error(`❌ Ошибка при загрузке деталей инвойса (${url}): ${error.message}`);
136
+ throw error;
137
+ }
138
+ }
139
+ }
140
+ exports.InvoicesFetcher = InvoicesFetcher;
141
+ //# sourceMappingURL=invoices.fetcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoices.fetcher.js","sourceRoot":"","sources":["../../src/invoices/invoices.fetcher.ts"],"names":[],"mappings":";;;AAIA;;;;;;;;GAQG;AACH,MAAa,eAAe;IAI1B,YAA6B,cAAkC;QAAlC,mBAAc,GAAd,cAAc,CAAoB;QAH9C,iBAAY,GAAG,6CAA6C,CAAC;QAC7D,kBAAa,GAAG,wCAAwC,CAAC;IAER,CAAC;IAEnE;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,iBAAiB,CACrB,MAA4B,EAC5B,YAAkC;QAElC,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,IAAI,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,IAAI,CAAC,CAAC;YAE/B,+DAA+D;YAC/D,MAAM,MAAM,GACV,MAAM,IAAI,CAAC,cAAc,CAAC,mBAAmB,EAAE,CAAC;YAElD,uBAAuB;YACvB,MAAM,WAAW,GAAG;gBAClB,OAAO;gBACP,IAAI;gBACJ,GAAG,YAAY;aAChB,CAAC;YAEF,uCAAuC;YACvC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE;gBACnD,MAAM,EAAE,WAAW;gBACnB,gBAAgB,EAAE,CAAC,MAAM,EAAE,EAAE;oBAC3B,sEAAsE;oBACtE,MAAM,KAAK,GAAa,EAAE,CAAC;oBAC3B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;wBAClC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;wBAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;4BACzB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;gCAClB,KAAK,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;4BACpE,CAAC,CAAC,CAAC;wBACL,CAAC;6BAAM,CAAC;4BACN,KAAK,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,IAAI,kBAAkB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;wBACxE,CAAC;oBACH,CAAC,CAAC,CAAC;oBACH,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACzB,CAAC;aACF,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACpE,CAAC;YAED,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YAE3B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAClD,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CACX,0CAA2C,KAAa,CAAC,OAAO,EAAE,CACnE,CAAC;YACF,IAAK,KAAa,CAAC,QAAQ,EAAE,CAAC;gBAC5B,OAAO,CAAC,KAAK,CAAC,gBAAiB,KAAa,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YAClE,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,iBAAiB,CACrB,QAAgB,EAChB,SAAiB;QAEjB,IAAI,CAAC;YACH,+DAA+D;YAC/D,MAAM,MAAM,GACV,MAAM,IAAI,CAAC,cAAc,CAAC,mBAAmB,EAAE,CAAC;YAElD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE;gBACpD,MAAM,EAAE;oBACN,SAAS,EAAE,QAAQ;oBACnB,UAAU,EAAE,SAAS;iBACtB;aACF,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CACb,gCAAgC,QAAQ,CAAC,MAAM,EAAE,CAClD,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YAE3B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;YACnD,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CACX,iDAAiD,QAAQ,aAAa,SAAS,MAAO,KAAa,CAAC,OAAO,EAAE,CAC9G,CAAC;YACF,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,mBAAmB,CAAC,GAAW;QACnC,IAAI,CAAC;YACH,+DAA+D;YAC/D,MAAM,MAAM,GACV,MAAM,IAAI,CAAC,cAAc,CAAC,mBAAmB,EAAE,CAAC;YAElD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAEvC,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,MAAM,IAAI,KAAK,CAAC,YAAY,GAAG,kBAAkB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;YACtE,CAAC;YAED,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YAE3B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;YAC7C,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CACX,0CAA0C,GAAG,MAAO,KAAa,CAAC,OAAO,EAAE,CAC5E,CAAC;YACF,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF;AA9JD,0CA8JC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Утилиты для работы с фильтрами и query-параметрами инвойсов.
3
+ *
4
+ * Формирует корректные параметры для AJAX endpoint iiko Partner Portal
5
+ * с учётом специфики API (массивы статусов, форматы дат, поисковые запросы).
6
+ */
7
+ export declare class InvoicesFilters {
8
+ /**
9
+ * Конвертирует дату из формата YYYY-MM-DD в dd.mm.yyyy
10
+ * @param date - Дата в формате YYYY-MM-DD (например, "2026-01-15")
11
+ * @returns Дата в формате dd.mm.yyyy (например, "15.01.2026")
12
+ */
13
+ convertDateFormat(date: string): string;
14
+ /**
15
+ * Формирует query параметры для фильтрации инвойсов.
16
+ *
17
+ * Конвертирует высокоуровневые параметры (год, месяц, статусы, поиск)
18
+ * в формат query-параметров, ожидаемый API iiko Partner Portal.
19
+ *
20
+ * Статусы передаются как массив с ключом `invoiceStatus[]`.
21
+ * Месяц форматируется как `YYYY-MM`.
22
+ *
23
+ * @param params - Параметры фильтрации
24
+ * @returns Объект с query-параметрами для axios
25
+ */
26
+ buildFilterParams(params: {
27
+ year: number;
28
+ month: number;
29
+ statuses: string[];
30
+ page: number;
31
+ perPage: number;
32
+ searchBy?: string;
33
+ searchValue?: string;
34
+ }): Record<string, string | string[]>;
35
+ /**
36
+ * Форматирует query параметры для axios
37
+ */
38
+ formatForAxios(params: Record<string, string | string[]>): any;
39
+ }
40
+ //# sourceMappingURL=invoices.filters.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoices.filters.d.ts","sourceRoot":"","sources":["../../src/invoices/invoices.filters.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,qBAAa,eAAe;IAC1B;;;;OAIG;IACH,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAKvC;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,MAAM,EAAE;QACxB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAmCrC;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,GAAG;CAe/D"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.InvoicesFilters = void 0;
4
+ /**
5
+ * Утилиты для работы с фильтрами и query-параметрами инвойсов.
6
+ *
7
+ * Формирует корректные параметры для AJAX endpoint iiko Partner Portal
8
+ * с учётом специфики API (массивы статусов, форматы дат, поисковые запросы).
9
+ */
10
+ class InvoicesFilters {
11
+ /**
12
+ * Конвертирует дату из формата YYYY-MM-DD в dd.mm.yyyy
13
+ * @param date - Дата в формате YYYY-MM-DD (например, "2026-01-15")
14
+ * @returns Дата в формате dd.mm.yyyy (например, "15.01.2026")
15
+ */
16
+ convertDateFormat(date) {
17
+ const [year, month, day] = date.split('-');
18
+ return `${day}.${month}.${year}`;
19
+ }
20
+ /**
21
+ * Формирует query параметры для фильтрации инвойсов.
22
+ *
23
+ * Конвертирует высокоуровневые параметры (год, месяц, статусы, поиск)
24
+ * в формат query-параметров, ожидаемый API iiko Partner Portal.
25
+ *
26
+ * Статусы передаются как массив с ключом `invoiceStatus[]`.
27
+ * Месяц форматируется как `YYYY-MM`.
28
+ *
29
+ * @param params - Параметры фильтрации
30
+ * @returns Объект с query-параметрами для axios
31
+ */
32
+ buildFilterParams(params) {
33
+ const { year, month, statuses, page, perPage, searchBy, searchValue } = params;
34
+ // Формируем месяц в формате YYYY-MM
35
+ const monthStr = month.toString().padStart(2, '0');
36
+ const monthValue = `${year}-${monthStr}`;
37
+ const queryParams = {
38
+ invoice_created_month_value: monthValue,
39
+ page: page.toString(),
40
+ perPage: perPage.toString(),
41
+ };
42
+ // Добавляем статусы как массив
43
+ if (statuses && statuses.length > 0) {
44
+ // Используем специальный ключ для массива
45
+ statuses.forEach((status) => {
46
+ const key = 'invoiceStatus[]';
47
+ if (Array.isArray(queryParams[key])) {
48
+ queryParams[key].push(status);
49
+ }
50
+ else {
51
+ queryParams[key] = [status];
52
+ }
53
+ });
54
+ }
55
+ // Добавляем параметры поиска если указаны
56
+ if (searchBy && searchValue) {
57
+ queryParams['search_by'] = searchBy;
58
+ queryParams['search'] = searchValue;
59
+ }
60
+ return queryParams;
61
+ }
62
+ /**
63
+ * Форматирует query параметры для axios
64
+ */
65
+ formatForAxios(params) {
66
+ const result = {};
67
+ Object.keys(params).forEach((key) => {
68
+ const value = params[key];
69
+ if (Array.isArray(value)) {
70
+ // Для массивов axios нужен специальный формат
71
+ result[key] = value;
72
+ }
73
+ else {
74
+ result[key] = value;
75
+ }
76
+ });
77
+ return result;
78
+ }
79
+ }
80
+ exports.InvoicesFilters = InvoicesFilters;
81
+ //# sourceMappingURL=invoices.filters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invoices.filters.js","sourceRoot":"","sources":["../../src/invoices/invoices.filters.ts"],"names":[],"mappings":";;;AAAA;;;;;GAKG;AACH,MAAa,eAAe;IAC1B;;;;OAIG;IACH,iBAAiB,CAAC,IAAY;QAC5B,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC3C,OAAO,GAAG,GAAG,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;IACnC,CAAC;IAED;;;;;;;;;;;OAWG;IACH,iBAAiB,CAAC,MAQjB;QACC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;QAE/E,oCAAoC;QACpC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,GAAG,IAAI,IAAI,QAAQ,EAAE,CAAC;QAEzC,MAAM,WAAW,GAAsC;YACrD,2BAA2B,EAAE,UAAU;YACvC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE;YACrB,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE;SAC5B,CAAC;QAEF,+BAA+B;QAC/B,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,0CAA0C;YAC1C,QAAQ,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;gBAC1B,MAAM,GAAG,GAAG,iBAAiB,CAAC;gBAC9B,IAAI,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;oBACnC,WAAW,CAAC,GAAG,CAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC9C,CAAC;qBAAM,CAAC;oBACN,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAC9B,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC;QAED,0CAA0C;QAC1C,IAAI,QAAQ,IAAI,WAAW,EAAE,CAAC;YAC5B,WAAW,CAAC,WAAW,CAAC,GAAG,QAAQ,CAAC;YACpC,WAAW,CAAC,QAAQ,CAAC,GAAG,WAAW,CAAC;QACtC,CAAC;QAED,OAAO,WAAW,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,MAAyC;QACtD,MAAM,MAAM,GAAQ,EAAE,CAAC;QAEvB,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAClC,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,8CAA8C;gBAC9C,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACtB,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACtB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC;IAChB,CAAC;CACF;AApFD,0CAoFC"}