lknpd-nalog-api-reworked 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.
Files changed (50) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +95 -0
  3. package/dist/NalogApi.d.ts +10 -0
  4. package/dist/NalogApi.js +84 -0
  5. package/dist/NalogApi.js.map +1 -0
  6. package/dist/NalogClient.d.ts +11 -0
  7. package/dist/NalogClient.js +197 -0
  8. package/dist/NalogClient.js.map +1 -0
  9. package/dist/index.d.ts +1 -0
  10. package/dist/index.js +9 -0
  11. package/dist/index.js.map +1 -0
  12. package/dist/types/index.d.ts +88 -0
  13. package/dist/types/index.js +3 -0
  14. package/dist/types/index.js.map +1 -0
  15. package/dist/utils/convertProxy.d.ts +2 -0
  16. package/dist/utils/convertProxy.js +32 -0
  17. package/dist/utils/convertProxy.js.map +1 -0
  18. package/dist/utils/createDeviceId.d.ts +1 -0
  19. package/dist/utils/createDeviceId.js +7 -0
  20. package/dist/utils/createDeviceId.js.map +1 -0
  21. package/dist/utils/createProxyUrl.d.ts +1 -0
  22. package/dist/utils/createProxyUrl.js +24 -0
  23. package/dist/utils/createProxyUrl.js.map +1 -0
  24. package/dist/utils/getPhoneConfirmationCode.d.ts +1 -0
  25. package/dist/utils/getPhoneConfirmationCode.js +18 -0
  26. package/dist/utils/getPhoneConfirmationCode.js.map +1 -0
  27. package/dist/utils/getTotalAmount.d.ts +2 -0
  28. package/dist/utils/getTotalAmount.js +7 -0
  29. package/dist/utils/getTotalAmount.js.map +1 -0
  30. package/dist/utils/isExpiredToken.d.ts +1 -0
  31. package/dist/utils/isExpiredToken.js +7 -0
  32. package/dist/utils/isExpiredToken.js.map +1 -0
  33. package/dist/utils/isValidPhone.d.ts +1 -0
  34. package/dist/utils/isValidPhone.js +8 -0
  35. package/dist/utils/isValidPhone.js.map +1 -0
  36. package/dist/utils/requestWithAxios.d.ts +2 -0
  37. package/dist/utils/requestWithAxios.js +51 -0
  38. package/dist/utils/requestWithAxios.js.map +1 -0
  39. package/package.json +39 -0
  40. package/src/NalogApi.ts +94 -0
  41. package/src/NalogClient.ts +192 -0
  42. package/src/index.ts +1 -0
  43. package/src/types/index.ts +94 -0
  44. package/src/utils/createDeviceId.ts +3 -0
  45. package/src/utils/createProxyUrl.ts +28 -0
  46. package/src/utils/getPhoneConfirmationCode.ts +12 -0
  47. package/src/utils/getTotalAmount.ts +5 -0
  48. package/src/utils/isExpiredToken.ts +3 -0
  49. package/src/utils/isValidPhone.ts +4 -0
  50. package/src/utils/requestWithAxios.ts +50 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021 alexz9
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,95 @@
1
+ # lknpd-nalog-api
2
+ API для самозанятых в РФ «Мой налог»
3
+
4
+ Автоматизирует отправку чеков в налоговую и другие операции. Используетcя непубличный API с сайта [lknpd.nalog.ru](https://lknpd.nalog.ru)
5
+
6
+ ## Установка
7
+
8
+ The package can be installed via [npm](https://github.com/npm/cli):
9
+
10
+ ```
11
+ npm install lknpd-nalog-api --save
12
+ ```
13
+
14
+ ## Использование
15
+
16
+ 1. Импортируем класс NalogApi.
17
+ 2. Создаем экземпляр с передачей параметров авторизации.
18
+ 3. Вызываем нужные методы.
19
+
20
+ Пример:
21
+
22
+ ```js
23
+ const { NalogApi } = require("lknpd-nalog-api");
24
+
25
+ const nalogApi = new NalogApi({ phone: 79101112222 });
26
+ // или
27
+ const nalogApi = new NalogApi({ inn: 1234567890, password: "myPassword" });
28
+
29
+ const income = {
30
+ name: "Тестовый платеж",
31
+ amount: 1999.99,
32
+ quantity: 1,
33
+ };
34
+
35
+ nalogApi
36
+ .addIncome(income)
37
+ .then(receiptId => console.log(receiptId))
38
+ .catch(error => console.log(error));
39
+ ```
40
+
41
+ ### Авторизация и параметры для конструктора
42
+
43
+ Вы должны быть зарегистрированы как самозанятый и у вас должна быть учетная запись в приложении «Мой налог» или на сайте [lknpd.nalog.ru](https://lknpd.nalog.ru).
44
+ Передаем в качестве параметров конструктора объект с данными. Есть два варианта авторизации:
45
+
46
+ 1) По номеру телефона:
47
+
48
+ ```js
49
+ const nalogApi = new NalogApi({ phone: 79101112222 });
50
+ ```
51
+
52
+ | Prop | Type | Description |
53
+ | ----- | ---- | ----------- |
54
+ | phone | String \| Number | Телефон, к которому привязана учетка в налоговой |
55
+
56
+ После запуска скрипта на ваш телефон будет отправлено SMS с кодом, который нужно будет ввести в терминале. Код живет всего 3 минуты. Если SMS по каким-то причинам не пришла или пришла, но поздно, перезапустите скрипт. Следите чтобы процесс не падал на сервере, иначе нужно будет снова вводить код. По этой причине надежнее будет использовать второй способ авторизации.
57
+
58
+ 2) По ИНН и паролю:
59
+
60
+ ```js
61
+ const nalogApi = new NalogApi({ inn: 1234567890, password: "myPassword" });
62
+ ```
63
+
64
+ | Prop | Type | Description |
65
+ | ----- | --------------------------- | --------------- |
66
+ | inn | String \| Number | Ваш ИНН |
67
+ | password | String | Ваш пароль (узнать можно в налоговой)|
68
+
69
+ ### Методы API
70
+
71
+ Экземпляр класса NalogApi содержит:
72
+
73
+ | Name | Description | Params |
74
+ | ----------- | --------------- |-----------|
75
+ | getUserInfo | Возвращает данные о самозанятом | ------------|
76
+ | addIncome | Отправляет чек в налоговую | IServiceIncome \| IServiceIncome[], Date (необязательно, по умолчанию текущая отметка времени) |
77
+ | cancelIncome | Отменяет чек | receiptId: String - идентификатор чека |
78
+ | getApprovedIncome | Возвращает информацию о чеке | receiptId: String - идентификатор чека, format - "json" \| "print" (по умолчанию "json", "print" вернет Blob)
79
+ | callMethod | Вызов произвольного метода* | methodPath - путь метода, body - тело запроса (если не передавать, будет GET, иначе POST)|
80
+
81
+ Объект параметров чека для addIncome. Метод принимает как один объект, так и массив объектов. Это не добавление нескольких чеков за раз, просто в одном чеке может быть несколько услуг или товаров.
82
+ ```js
83
+ interface IServiceIncome {
84
+ name: string // название услуги
85
+ amount: number | string // сумма - 00.00 | 00 | "00.00" | "00"
86
+ quantity: number // количество (в чеке не отображается)
87
+ }
88
+ ```
89
+
90
+ \***callMethod** позволяет обратится к любому методу API со своими параметрами. Если необходимо то, чего нет в библиотеке, идем на сайт [lknpd.nalog.ru](https://lknpd.nalog.ru), отлавливаем http-запрос при нужных действиях, оттуда берем путь и параметры.
91
+
92
+
93
+ ## License
94
+
95
+ The MIT License.
@@ -0,0 +1,10 @@
1
+ import NalogClient from "./NalogClient";
2
+ import { INalogApiInitParams, INalogCancelIncomeResponse, INalogProfile, INalogReceiptIncome, IServiceIncome } from "./types";
3
+ declare class NalogApi extends NalogClient {
4
+ constructor({ inn, password, phone, proxy }: INalogApiInitParams);
5
+ getUserInfo(): Promise<INalogProfile>;
6
+ addIncome(services: IServiceIncome[] | IServiceIncome, date?: Date): Promise<string>;
7
+ cancelIncome(receiptUuid: string, comment: string): Promise<INalogCancelIncomeResponse["incomeInfo"]>;
8
+ getApprovedIncome(receiptUuid: string, format?: "json" | "print"): Promise<INalogReceiptIncome | Blob>;
9
+ }
10
+ export default NalogApi;
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ const NalogClient_1 = __importDefault(require("./NalogClient"));
16
+ const getTotalAmount_1 = __importDefault(require("./utils/getTotalAmount"));
17
+ const requestWithAxios_1 = __importDefault(require("./utils/requestWithAxios"));
18
+ class NalogApi extends NalogClient_1.default {
19
+ constructor({ inn, password, phone, proxy }) {
20
+ super({ inn, password, phone, proxy });
21
+ }
22
+ getUserInfo() {
23
+ return __awaiter(this, void 0, void 0, function* () {
24
+ return yield this.callMethod("user");
25
+ });
26
+ }
27
+ addIncome(services, date = new Date()) {
28
+ return __awaiter(this, void 0, void 0, function* () {
29
+ services = Array.isArray(services) ? services : [services];
30
+ const totalAmount = (0, getTotalAmount_1.default)(services);
31
+ const { approvedReceiptUuid, message } = yield this.callMethod("income", {
32
+ paymentType: "CASH",
33
+ ignoreMaxTotalIncomeRestriction: false,
34
+ client: {
35
+ contactPhone: null,
36
+ displayName: null,
37
+ incomeType: "FROM_INDIVIDUAL",
38
+ inn: null,
39
+ },
40
+ requestTime: new Date(),
41
+ operationTime: new Date(date),
42
+ services,
43
+ totalAmount,
44
+ });
45
+ if (!approvedReceiptUuid) {
46
+ throw new Error(message || "Failed to add income");
47
+ }
48
+ return approvedReceiptUuid;
49
+ });
50
+ }
51
+ cancelIncome(receiptUuid, comment) {
52
+ return __awaiter(this, void 0, void 0, function* () {
53
+ const { incomeInfo, message } = yield this.callMethod("cancel", {
54
+ receiptUuid,
55
+ comment,
56
+ partnerCode: null,
57
+ requestTime: new Date(),
58
+ });
59
+ if (!incomeInfo) {
60
+ throw new Error(message || "Failed to cancel income");
61
+ }
62
+ return incomeInfo;
63
+ });
64
+ }
65
+ getApprovedIncome(receiptUuid, format = "json") {
66
+ return __awaiter(this, void 0, void 0, function* () {
67
+ const inn = yield this.getInn();
68
+ if (format === "json") {
69
+ return (0, requestWithAxios_1.default)({
70
+ method: "GET",
71
+ url: `${this.apiUrl}/receipt/${inn}/${receiptUuid}/${format}`,
72
+ }, this.requestConfig);
73
+ }
74
+ const receiptData = yield (0, requestWithAxios_1.default)({
75
+ method: "GET",
76
+ url: `${this.apiUrl}/receipt/${inn}/${receiptUuid}/${format}`,
77
+ responseType: "arraybuffer",
78
+ }, this.requestConfig);
79
+ return new Blob([receiptData], { type: "application/pdf" });
80
+ });
81
+ }
82
+ }
83
+ exports.default = NalogApi;
84
+ //# sourceMappingURL=NalogApi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NalogApi.js","sourceRoot":"","sources":["../src/NalogApi.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,gEAAwC;AASxC,4EAAoD;AACpD,gFAAwD;AAExD,MAAM,QAAS,SAAQ,qBAAW;IAChC,YAAY,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAuB;QAC9D,KAAK,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;IACzC,CAAC;IAEK,WAAW;;YACf,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;KAAA;IAEK,SAAS,CACb,QAA2C,EAC3C,IAAI,GAAG,IAAI,IAAI,EAAE;;YAEjB,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;YAC3D,MAAM,WAAW,GAAG,IAAA,wBAAc,EAAC,QAAQ,CAAC,CAAC;YAC7C,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,GACpC,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;gBAC9B,WAAW,EAAE,MAAM;gBACnB,+BAA+B,EAAE,KAAK;gBACtC,MAAM,EAAE;oBACN,YAAY,EAAE,IAAI;oBAClB,WAAW,EAAE,IAAI;oBACjB,UAAU,EAAE,iBAAiB;oBAC7B,GAAG,EAAE,IAAI;iBACV;gBACD,WAAW,EAAE,IAAI,IAAI,EAAE;gBACvB,aAAa,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC;gBAC7B,QAAQ;gBACR,WAAW;aACZ,CAAC,CAAC;YACL,IAAI,CAAC,mBAAmB,EAAE;gBACxB,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,sBAAsB,CAAC,CAAC;aACpD;YACD,OAAO,mBAAmB,CAAC;QAC7B,CAAC;KAAA;IAEK,YAAY,CAChB,WAAmB,EACnB,OAAe;;YAEf,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAC3B,MAAM,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;gBAC9B,WAAW;gBACX,OAAO;gBACP,WAAW,EAAE,IAAI;gBACjB,WAAW,EAAE,IAAI,IAAI,EAAE;aACxB,CAAC,CAAC;YACL,IAAI,CAAC,UAAU,EAAE;gBACf,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,yBAAyB,CAAC,CAAC;aACvD;YACD,OAAO,UAAU,CAAC;QACpB,CAAC;KAAA;IAEK,iBAAiB,CACrB,WAAmB,EACnB,SAA2B,MAAM;;YAEjC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YAChC,IAAI,MAAM,KAAK,MAAM,EAAE;gBACrB,OAAO,IAAA,0BAAgB,EACrB;oBACE,MAAM,EAAE,KAAK;oBACb,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,YAAY,GAAG,IAAI,WAAW,IAAI,MAAM,EAAE;iBAC9D,EACD,IAAI,CAAC,aAAa,CACnB,CAAC;aACH;YAED,MAAM,WAAW,GAAG,MAAM,IAAA,0BAAgB,EACxC;gBACE,MAAM,EAAE,KAAK;gBACb,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,YAAY,GAAG,IAAI,WAAW,IAAI,MAAM,EAAE;gBAC7D,YAAY,EAAE,aAAa;aAC5B,EACD,IAAI,CAAC,aAAa,CACnB,CAAC;YAEF,OAAO,IAAI,IAAI,CAAC,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAC9D,CAAC;KAAA;CACF;AAED,kBAAe,QAAQ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { INalogApiInitParams } from "./types";
2
+ import { AxiosRequestConfig } from "axios";
3
+ declare abstract class NalogClient {
4
+ #private;
5
+ constructor({ inn, password, phone, proxy }: INalogApiInitParams);
6
+ callMethod<T = any>(methodPath: string, data?: any): Promise<T>;
7
+ protected getInn(): Promise<string>;
8
+ protected get apiUrl(): string;
9
+ protected get requestConfig(): AxiosRequestConfig<any>;
10
+ }
11
+ export default NalogClient;
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
12
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
13
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
14
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
15
+ };
16
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
17
+ if (kind === "m") throw new TypeError("Private method is not writable");
18
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
19
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
20
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
21
+ };
22
+ var __importDefault = (this && this.__importDefault) || function (mod) {
23
+ return (mod && mod.__esModule) ? mod : { "default": mod };
24
+ };
25
+ var _NalogClient_instances, _a, _NalogClient_instance, _NalogClient_apiUrl, _NalogClient_fetchHeaders, _NalogClient_deviceInfo, _NalogClient_inn, _NalogClient_token, _NalogClient_tokenExpireIn, _NalogClient_refreshToken, _NalogClient_authPromise, _NalogClient_httpsProxyAgent, _NalogClient_authPassword, _NalogClient_authPhone, _NalogClient_auth, _NalogClient_getToken, _NalogClient_request, _NalogClient_getRequestConfig;
26
+ Object.defineProperty(exports, "__esModule", { value: true });
27
+ const createProxyUrl_1 = __importDefault(require("./utils/createProxyUrl"));
28
+ const createDeviceId_1 = __importDefault(require("./utils/createDeviceId"));
29
+ const getPhoneConfirmationCode_1 = __importDefault(require("./utils/getPhoneConfirmationCode"));
30
+ const isExpiredToken_1 = __importDefault(require("./utils/isExpiredToken"));
31
+ const isValidPhone_1 = __importDefault(require("./utils/isValidPhone"));
32
+ const https_proxy_agent_1 = require("https-proxy-agent");
33
+ const requestWithAxios_1 = __importDefault(require("./utils/requestWithAxios"));
34
+ class NalogClient {
35
+ constructor({ inn, password, phone, proxy }) {
36
+ _NalogClient_instances.add(this);
37
+ _NalogClient_apiUrl.set(this, "https://lknpd.nalog.ru/api/v1");
38
+ _NalogClient_fetchHeaders.set(this, {
39
+ accept: "application/json, text/plain, */*",
40
+ "accept-language": "ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7",
41
+ "content-type": "application/json",
42
+ });
43
+ _NalogClient_deviceInfo.set(this, {
44
+ appVersion: "1.0.0",
45
+ sourceType: "WEB",
46
+ sourceDeviceId: "",
47
+ metaDetails: {
48
+ userAgent: "Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.192 Safari/537.36",
49
+ },
50
+ });
51
+ _NalogClient_inn.set(this, "");
52
+ _NalogClient_token.set(this, "");
53
+ _NalogClient_tokenExpireIn.set(this, "");
54
+ _NalogClient_refreshToken.set(this, "");
55
+ _NalogClient_authPromise.set(this, void 0);
56
+ _NalogClient_httpsProxyAgent.set(this, void 0);
57
+ if (__classPrivateFieldGet(NalogClient, _a, "f", _NalogClient_instance)) {
58
+ return __classPrivateFieldGet(NalogClient, _a, "f", _NalogClient_instance);
59
+ }
60
+ if (phone && !(0, isValidPhone_1.default)(phone)) {
61
+ throw new Error("Phone number entered incorrectly. Enter by pattern 79101112222");
62
+ }
63
+ if (!phone && (!inn || !password)) {
64
+ throw new Error("Login and password or phone are required for authorization");
65
+ }
66
+ if (proxy) {
67
+ __classPrivateFieldSet(this, _NalogClient_httpsProxyAgent, new https_proxy_agent_1.HttpsProxyAgent((0, createProxyUrl_1.default)(proxy)), "f");
68
+ }
69
+ __classPrivateFieldGet(this, _NalogClient_deviceInfo, "f").sourceDeviceId = (0, createDeviceId_1.default)();
70
+ __classPrivateFieldSet(this, _NalogClient_authPromise, phone
71
+ ? __classPrivateFieldGet(this, _NalogClient_instances, "m", _NalogClient_authPhone).call(this, phone)
72
+ : __classPrivateFieldGet(this, _NalogClient_instances, "m", _NalogClient_authPassword).call(this, inn, password), "f");
73
+ __classPrivateFieldSet(NalogClient, _a, this, "f", _NalogClient_instance);
74
+ }
75
+ callMethod(methodPath, data) {
76
+ return __awaiter(this, void 0, void 0, function* () {
77
+ const token = yield __classPrivateFieldGet(this, _NalogClient_instances, "m", _NalogClient_getToken).call(this);
78
+ const body = data ? JSON.stringify(data) : undefined;
79
+ const method = body ? "POST" : "GET";
80
+ const headers = Object.assign(Object.assign({}, __classPrivateFieldGet(this, _NalogClient_fetchHeaders, "f")), { Authorization: `Bearer ${token}` });
81
+ if (method === "GET") {
82
+ return __classPrivateFieldGet(this, _NalogClient_instances, "m", _NalogClient_request).call(this, {
83
+ method: "GET",
84
+ url: `${__classPrivateFieldGet(this, _NalogClient_apiUrl, "f")}/${methodPath}`,
85
+ headers,
86
+ });
87
+ }
88
+ return __classPrivateFieldGet(this, _NalogClient_instances, "m", _NalogClient_request).call(this, {
89
+ method: "POST",
90
+ url: `${__classPrivateFieldGet(this, _NalogClient_apiUrl, "f")}/${methodPath}`,
91
+ headers,
92
+ data: body,
93
+ });
94
+ });
95
+ }
96
+ getInn() {
97
+ return __awaiter(this, void 0, void 0, function* () {
98
+ yield __classPrivateFieldGet(this, _NalogClient_authPromise, "f");
99
+ return __classPrivateFieldGet(this, _NalogClient_inn, "f");
100
+ });
101
+ }
102
+ get apiUrl() {
103
+ return __classPrivateFieldGet(this, _NalogClient_apiUrl, "f");
104
+ }
105
+ get requestConfig() {
106
+ return __classPrivateFieldGet(this, _NalogClient_instances, "m", _NalogClient_getRequestConfig).call(this);
107
+ }
108
+ }
109
+ _a = NalogClient, _NalogClient_apiUrl = new WeakMap(), _NalogClient_fetchHeaders = new WeakMap(), _NalogClient_deviceInfo = new WeakMap(), _NalogClient_inn = new WeakMap(), _NalogClient_token = new WeakMap(), _NalogClient_tokenExpireIn = new WeakMap(), _NalogClient_refreshToken = new WeakMap(), _NalogClient_authPromise = new WeakMap(), _NalogClient_httpsProxyAgent = new WeakMap(), _NalogClient_instances = new WeakSet(), _NalogClient_authPassword = function _NalogClient_authPassword(username, password) {
110
+ return __awaiter(this, void 0, void 0, function* () {
111
+ const body = {
112
+ username,
113
+ password,
114
+ deviceInfo: __classPrivateFieldGet(this, _NalogClient_deviceInfo, "f"),
115
+ };
116
+ const response = yield __classPrivateFieldGet(this, _NalogClient_instances, "m", _NalogClient_request).call(this, {
117
+ method: "POST",
118
+ url: `${__classPrivateFieldGet(this, _NalogClient_apiUrl, "f")}/auth/lkfl`,
119
+ headers: __classPrivateFieldGet(this, _NalogClient_fetchHeaders, "f"),
120
+ data: body,
121
+ });
122
+ __classPrivateFieldGet(this, _NalogClient_instances, "m", _NalogClient_auth).call(this, response);
123
+ });
124
+ }, _NalogClient_authPhone = function _NalogClient_authPhone(phone) {
125
+ return __awaiter(this, void 0, void 0, function* () {
126
+ const body = { phone, requireTpToBeActive: true };
127
+ const startResponse = yield __classPrivateFieldGet(this, _NalogClient_instances, "m", _NalogClient_request).call(this, {
128
+ method: "POST",
129
+ url: `${__classPrivateFieldGet(this, _NalogClient_apiUrl, "f")}/auth/challenge/sms/start`,
130
+ headers: __classPrivateFieldGet(this, _NalogClient_fetchHeaders, "f"),
131
+ data: body,
132
+ });
133
+ const { challengeToken } = startResponse;
134
+ const code = yield (0, getPhoneConfirmationCode_1.default)();
135
+ const bodyVerify = {
136
+ deviceInfo: __classPrivateFieldGet(this, _NalogClient_deviceInfo, "f"),
137
+ challengeToken,
138
+ phone,
139
+ code,
140
+ };
141
+ const response = yield __classPrivateFieldGet(this, _NalogClient_instances, "m", _NalogClient_request).call(this, {
142
+ method: "POST",
143
+ url: `${__classPrivateFieldGet(this, _NalogClient_apiUrl, "f")}/auth/challenge/sms/verify`,
144
+ headers: __classPrivateFieldGet(this, _NalogClient_fetchHeaders, "f"),
145
+ data: bodyVerify,
146
+ });
147
+ __classPrivateFieldGet(this, _NalogClient_instances, "m", _NalogClient_auth).call(this, response);
148
+ });
149
+ }, _NalogClient_auth = function _NalogClient_auth(response) {
150
+ if (!response.refreshToken) {
151
+ throw new Error(response.message || "Authorization failed");
152
+ }
153
+ console.log("Authorization in lknpd.nalog.ru was successful");
154
+ __classPrivateFieldSet(this, _NalogClient_inn, response.profile.inn, "f");
155
+ __classPrivateFieldSet(this, _NalogClient_token, response.token, "f");
156
+ __classPrivateFieldSet(this, _NalogClient_tokenExpireIn, response.tokenExpireIn, "f");
157
+ __classPrivateFieldSet(this, _NalogClient_refreshToken, response.refreshToken, "f");
158
+ return response;
159
+ }, _NalogClient_getToken = function _NalogClient_getToken() {
160
+ return __awaiter(this, void 0, void 0, function* () {
161
+ yield __classPrivateFieldGet(this, _NalogClient_authPromise, "f");
162
+ if (__classPrivateFieldGet(this, _NalogClient_token, "f") && !(0, isExpiredToken_1.default)(__classPrivateFieldGet(this, _NalogClient_tokenExpireIn, "f"))) {
163
+ return __classPrivateFieldGet(this, _NalogClient_token, "f");
164
+ }
165
+ const body = {
166
+ deviceInfo: __classPrivateFieldGet(this, _NalogClient_deviceInfo, "f"),
167
+ refreshToken: __classPrivateFieldGet(this, _NalogClient_refreshToken, "f"),
168
+ };
169
+ const response = yield __classPrivateFieldGet(this, _NalogClient_instances, "m", _NalogClient_request).call(this, {
170
+ method: "POST",
171
+ url: `${__classPrivateFieldGet(this, _NalogClient_apiUrl, "f")}/auth/token`,
172
+ headers: __classPrivateFieldGet(this, _NalogClient_fetchHeaders, "f"),
173
+ data: body,
174
+ });
175
+ if (!response.token) {
176
+ throw new Error(response.message || "Failed to refresh token");
177
+ }
178
+ __classPrivateFieldSet(this, _NalogClient_refreshToken, response.refreshToken || __classPrivateFieldGet(this, _NalogClient_refreshToken, "f"), "f");
179
+ __classPrivateFieldSet(this, _NalogClient_token, response.token, "f");
180
+ __classPrivateFieldSet(this, _NalogClient_tokenExpireIn, response.tokenExpireIn, "f");
181
+ return __classPrivateFieldGet(this, _NalogClient_token, "f");
182
+ });
183
+ }, _NalogClient_request = function _NalogClient_request(requestConfig) {
184
+ return (0, requestWithAxios_1.default)(requestConfig, __classPrivateFieldGet(this, _NalogClient_instances, "m", _NalogClient_getRequestConfig).call(this));
185
+ }, _NalogClient_getRequestConfig = function _NalogClient_getRequestConfig() {
186
+ if (!__classPrivateFieldGet(this, _NalogClient_httpsProxyAgent, "f")) {
187
+ return {};
188
+ }
189
+ return {
190
+ httpAgent: __classPrivateFieldGet(this, _NalogClient_httpsProxyAgent, "f"),
191
+ httpsAgent: __classPrivateFieldGet(this, _NalogClient_httpsProxyAgent, "f"),
192
+ proxy: false,
193
+ };
194
+ };
195
+ _NalogClient_instance = { value: void 0 };
196
+ exports.default = NalogClient;
197
+ //# sourceMappingURL=NalogClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NalogClient.js","sourceRoot":"","sources":["../src/NalogClient.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export { default as NalogApi } from "./NalogApi";
package/dist/index.js ADDED
@@ -0,0 +1,9 @@
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.NalogApi = void 0;
7
+ var NalogApi_1 = require("./NalogApi");
8
+ Object.defineProperty(exports, "NalogApi", { enumerable: true, get: function () { return __importDefault(NalogApi_1).default; } });
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,uCAAiD;AAAxC,qHAAA,OAAO,OAAY"}
@@ -0,0 +1,88 @@
1
+ export interface INalogApiInitParams {
2
+ inn?: string | number;
3
+ password?: string;
4
+ phone?: string | number;
5
+ proxy?: string;
6
+ }
7
+ interface INalogApiError {
8
+ message: string;
9
+ code: string;
10
+ }
11
+ export interface IServiceIncome {
12
+ name: string;
13
+ amount: number | string;
14
+ quantity: number;
15
+ }
16
+ export interface INalogAuthResponse extends INalogApiError {
17
+ refreshToken: string;
18
+ refreshTokenExpiresIn: string | null;
19
+ token: string;
20
+ tokenExpireIn: string;
21
+ profile: INalogProfile;
22
+ }
23
+ export interface INalogAddIncomeResponse extends INalogApiError {
24
+ approvedReceiptUuid: string;
25
+ }
26
+ export interface INalogCancelIncomeResponse extends INalogApiError {
27
+ incomeInfo: {
28
+ approvedReceiptUuid: string;
29
+ name: string;
30
+ operationTime: Date;
31
+ requestTime: Date;
32
+ paymentType: "CASH";
33
+ partnerCode: null;
34
+ totalAmount: number;
35
+ cancellationInfo: {
36
+ operationTime: Date;
37
+ registerTime: Date;
38
+ taxPeriodId: number;
39
+ comment: string;
40
+ };
41
+ sourceDeviceId: string;
42
+ };
43
+ }
44
+ export interface INalogReceiptIncome {
45
+ cancellationInfo: null;
46
+ clientDisplayName: null;
47
+ clientInn: null;
48
+ description: [];
49
+ email: null;
50
+ incomeType: "FROM_INDIVIDUAL";
51
+ inn: string;
52
+ invoiceId: null;
53
+ operationTime: Date;
54
+ partnerDisplayName: null;
55
+ partnerInn: null;
56
+ paymentType: "CASH";
57
+ phone: null;
58
+ profession: string;
59
+ receiptId: string;
60
+ registerTime: Date;
61
+ requestTime: Date;
62
+ services: IServiceIncome[];
63
+ sourceDeviceId: string;
64
+ taxPeriodId: number;
65
+ totalAmount: number;
66
+ }
67
+ export interface INalogProfile {
68
+ lastName: string | null;
69
+ id: number;
70
+ displayName: string;
71
+ middleName: string | null;
72
+ email: string | null;
73
+ phone: string;
74
+ inn: string;
75
+ snils: string | null;
76
+ avatarExists: boolean;
77
+ initialRegistrationDate: Date;
78
+ registrationDate: Date;
79
+ firstReceiptRegisterTime: null;
80
+ firstReceiptCancelTime: null;
81
+ hideCancelledReceipt: boolean;
82
+ registerAvailable: null;
83
+ status: "ACTIVE" | string;
84
+ restrictedMode: boolean;
85
+ pfrUrl: string | null;
86
+ login: string | null;
87
+ }
88
+ export {};
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import { AxiosProxyConfig } from "axios";
2
+ export default function convertProxy(proxy: string): AxiosProxyConfig;
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ function convertProxy(proxy) {
4
+ const normalizedProxy = proxy.replace(/^http\{s\}:\/\//i, "http://");
5
+ const proxyRegex = /^(?:(https?):\/\/)?([^:/?#]+):([1-9]\d{0,4}):([^:]+):([^:]+)$/i;
6
+ const match = normalizedProxy.match(proxyRegex);
7
+ if (!match) {
8
+ throw new Error("Invalid proxy format. Use http://host:port:username:password or https://host:port:username:password (http{s}://... is also accepted)");
9
+ }
10
+ const protocol = (match[1] || "http").toLowerCase();
11
+ const host = match[2];
12
+ const port = Number(match[3]);
13
+ const username = match[4];
14
+ const password = match[5];
15
+ if (protocol !== "http" && protocol !== "https") {
16
+ throw new Error("Proxy protocol must be http or https");
17
+ }
18
+ if (port < 1 || port > 65535) {
19
+ throw new Error("Invalid proxy port");
20
+ }
21
+ return {
22
+ protocol,
23
+ host,
24
+ port,
25
+ auth: {
26
+ username,
27
+ password,
28
+ },
29
+ };
30
+ }
31
+ exports.default = convertProxy;
32
+ //# sourceMappingURL=convertProxy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convertProxy.js","sourceRoot":"","sources":["../../src/utils/convertProxy.ts"],"names":[],"mappings":";;AAEA,SAAwB,YAAY,CAAC,KAAa;IAChD,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;IACrE,MAAM,UAAU,GACd,gEAAgE,CAAC;IACnE,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAEhD,IAAI,CAAC,KAAK,EAAE;QACV,MAAM,IAAI,KAAK,CACb,sIAAsI,CACvI,CAAC;KACH;IAED,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IACpD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAE1B,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,OAAO,EAAE;QAC/C,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;KACzD;IAED,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE;QAC5B,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;KACvC;IAED,OAAO;QACL,QAAQ;QACR,IAAI;QACJ,IAAI;QACJ,IAAI,EAAE;YACJ,QAAQ;YACR,QAAQ;SACT;KACF,CAAC;AACJ,CAAC;AAnCD,+BAmCC"}
@@ -0,0 +1 @@
1
+ export default function createDeviceId(): string;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ function createDeviceId() {
4
+ return Math.random().toString(36).slice(2, 15) + Math.random().toString(36).slice(2, 15);
5
+ }
6
+ exports.default = createDeviceId;
7
+ //# sourceMappingURL=createDeviceId.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createDeviceId.js","sourceRoot":"","sources":["../../src/utils/createDeviceId.ts"],"names":[],"mappings":";;AAAA,SAAwB,cAAc;IACpC,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC3F,CAAC;AAFD,iCAEC"}
@@ -0,0 +1 @@
1
+ export default function createProxyUrl(proxy: string): string;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ function createProxyUrl(proxy) {
4
+ const normalizedProxy = proxy.replace(/^http\{s\}:\/\//i, "http://");
5
+ const proxyRegex = /^(?:(https?):\/\/)?([^:/?#]+):([1-9]\d{0,4}):([^:]+):([^:]+)$/i;
6
+ const match = normalizedProxy.match(proxyRegex);
7
+ if (!match) {
8
+ throw new Error("Invalid proxy format. Use http://host:port:username:password or https://host:port:username:password (http{s}://... is also accepted)");
9
+ }
10
+ const protocol = (match[1] || "http").toLowerCase();
11
+ const host = match[2];
12
+ const port = Number(match[3]);
13
+ const username = match[4];
14
+ const password = match[5];
15
+ if (protocol !== "http" && protocol !== "https") {
16
+ throw new Error("Proxy protocol must be http or https");
17
+ }
18
+ if (port < 1 || port > 65535) {
19
+ throw new Error("Invalid proxy port");
20
+ }
21
+ return `${protocol}://${encodeURIComponent(username)}:${encodeURIComponent(password)}@${host}:${port}`;
22
+ }
23
+ exports.default = createProxyUrl;
24
+ //# sourceMappingURL=createProxyUrl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createProxyUrl.js","sourceRoot":"","sources":["../../src/utils/createProxyUrl.ts"],"names":[],"mappings":";;AAAA,SAAwB,cAAc,CAAC,KAAa;IAClD,MAAM,eAAe,GAAG,KAAK,CAAC,OAAO,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC;IACrE,MAAM,UAAU,GACd,gEAAgE,CAAC;IACnE,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAEhD,IAAI,CAAC,KAAK,EAAE;QACV,MAAM,IAAI,KAAK,CACb,sIAAsI,CACvI,CAAC;KACH;IAED,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;IACpD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IACtB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1B,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAE1B,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,OAAO,EAAE;QAC/C,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;KACzD;IAED,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,EAAE;QAC5B,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;KACvC;IAED,OAAO,GAAG,QAAQ,MAAM,kBAAkB,CAAC,QAAQ,CAAC,IAAI,kBAAkB,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;AACzG,CAAC;AA3BD,iCA2BC"}