-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathindex.js
133 lines (130 loc) · 5.63 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
'use strict';
const https = require('https');
/** Dadata API class */
class Dadata {
/**
* API constructor
* @param {string} apiKey Ключ dadata.ru
*/
constructor(apiKey) {
this.apiKey = apiKey;
}
/**
* Клиент
* @private
* @param {string} api Название метода
* @param {params} params Параметры
* @returns {promise}
*/
_client(api, params) {
const request = Object.assign({
count: 10
}, params);
const options = {
method: 'POST',
hostname: 'suggestions.dadata.ru',
path: `/suggestions/api/4_1/rs/suggest/${api}`,
port: 443,
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'Authorization': `Token ${this.apiKey}`
}
};
return new Promise((resolve, reject) => {
const req = https.request(options, (res) => {
let result = '';
if (res.statusCode !== 200) {
return reject({
code: res.statusCode,
message: 'HTTP Error: bad status code'
});
}
res.on('data', (chunk) => {
result += chunk;
});
res.on('end', () => {
try {
result = JSON.parse(result);
} catch (err) {
return reject(err);
}
resolve(result);
});
});
req.on('error', reject);
req.write(JSON.stringify(request));
req.end();
});
}
/**
* Подсказки по ФИО
* @see {@link https://confluence.hflabs.ru/pages/viewpage.action?pageId=502038691|Документация}
* @param {object} params Параметры
* @param {string} params.query Запрос
* @param {number} [params.count=10] Кол-во возвращаемых результатов
* @param {string[]} [params.parts=null] Подсказки по части ФИО (NAME, SURNAME, PATRONYMIC)
* @param {string} [params.gender=UNKNOWN] Пол
* @return {promise<object[]>}
*/
fio(params) {
return this._client('fio', params)
}
/**
* Подсказки по адресу
* @see {@link https://confluence.hflabs.ru/pages/viewpage.action?pageId=502038680|Документация}
* @param {object} params Параметры
* @param {string} params.query Запрос
* @param {number} [params.count=10] Кол-во возвращаемых результатов
* @param {object} [params.locations=] Ограничение поиска адреса
* @param {number} params.location.region_fias_id Ограничение по ФИАС коду региона
* @param {number} params.location.area_fias_id Ограничение по ФИАС коду области
* @param {number} params.location.city_fias_id Ограничение по ФИАС коду города
* @param {number} params.location.settlement_fias_id Ограничение по ФИАС коду населенного пункта
* @param {number} params.location.street_fias_id Ограничение по ФИАС коду улицы
* @return {promise<object[]>}
*/
address(params) {
return this._client('address', params)
}
/**
* Подсказки по организациям
* @see {@link https://confluence.hflabs.ru/pages/viewpage.action?pageId=502038697|Документация}
* @param {object} params Параметры
* @param {string} params.query Запрос
* @param {number} [params.count=10] Кол-во возвращаемых результатов
* @param {string[]} [params.status=null] Фильтр по статусу организации (ACTIVE - активные, LIQUIDATING - ликвидируемые, LIQUIDATED - ликвидированные)
* @param {string} [params.type=null] Фильтр по юридическим лицам (LEGAL) или индивидуальным предпринимателям (INDIVIDUAL)
* @param {object[]} params.locations Фильтр по региону
* @param {number} params.locations.kladr_id Двухзначный код региона по КЛАДР
* @return {promise<object[]>}
*/
party(params) {
return this._client('party', params)
}
/**
* Подсказки по банкам
* @see {@link https://confluence.hflabs.ru/pages/viewpage.action?pageId=502038711|Документация}
* @param {object} params Параметры
* @param {string} params.query Запрос
* @param {number} [params.count=10] Кол-во возвращаемых результатов
* @param {string[]} [params.status=null] Фильтр по статусу (ACTIVE - активные, LIQUIDATING - ликвидируемые, LIQUIDATED - ликвидированные)
* @param {string} [params.type=null] Фильтр по типу банковской организации BANK - банк, NKO - небанковская кредитная организация, BANK_BRANCH - филиал банка, NKO_BRANCH - филиал небанковской кредитной организации, RKC - РКЦ / ГРКЦ, OTHER - другое
* @return {promise<object[]>}
*/
bank(params) {
return this._client('bank', params)
}
/**
* Подсказки по email
* @see {@link https://confluence.hflabs.ru/pages/viewpage.action?pageId=502038705|Документация}
* @param {object} params Параметры
* @param {string} params.query Запрос
* @param {number} [params.count=10] Кол-во возвращаемых результатов
* @return {promise<object[]>}
*/
email(params) {
return this._client('email', params)
}
}
module.exports = Dadata;