intelicoreact 1.1.94 → 1.2.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.
@@ -0,0 +1,327 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.getIsOnlyAnObject = getIsOnlyAnObject;
9
+ exports.addCustomMethods = addCustomMethods;
10
+ exports.getInstanceOfFetchSystem = getInstanceOfFetchSystem;
11
+
12
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
13
+
14
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
+
16
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
17
+
18
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
19
+
20
+ var _AbortableFetch = _interopRequireDefault(require("./AbortableFetch"));
21
+
22
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
23
+
24
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
25
+
26
+ function getIsOnlyAnObject(input) {
27
+ return (0, _typeof2.default)(input) === 'object' && input instanceof Object && !Array.isArray(input);
28
+ }
29
+
30
+ function addCustomMethods(data, prefix) {
31
+ var _this = this;
32
+
33
+ var preparedPrefix = (prefix || '').toString();
34
+ Object.keys(data).forEach(function (key) {
35
+ var preparedKey = "".concat(preparedPrefix).concat(key);
36
+ if (typeof data[key] === 'function' && getIsOnlyAnObject(_this)) _this[preparedKey] = data[key];
37
+ });
38
+ }
39
+
40
+ function getInstanceOfFetchSystem(_x) {
41
+ return _getInstanceOfFetchSystem.apply(this, arguments);
42
+ }
43
+
44
+ function _getInstanceOfFetchSystem() {
45
+ _getInstanceOfFetchSystem = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee6(isGetBody) {
46
+ var _API_CONTEXT$addAsCom;
47
+
48
+ var API_CONTEXT, CREDENTIALS_CONTEXT, isUseImportMethod, credentials, cred, _ref2, headersToAbortableFetchInstance, queryParamsToAbortableFetchInstance, optionsToAbortableFetchInstance;
49
+
50
+ return _regenerator.default.wrap(function _callee6$(_context6) {
51
+ while (1) {
52
+ switch (_context6.prev = _context6.next) {
53
+ case 0:
54
+ API_CONTEXT = this;
55
+ CREDENTIALS_CONTEXT = API_CONTEXT.credentialsProcessing;
56
+ isUseImportMethod = typeof (CREDENTIALS_CONTEXT === null || CREDENTIALS_CONTEXT === void 0 ? void 0 : CREDENTIALS_CONTEXT.importCredentials) === 'function';
57
+ credentials = {}; //? Наличие credentialsProcessing включает добавление токена в принципе (если авторизованы в системе)
58
+
59
+ if (!CREDENTIALS_CONTEXT) {
60
+ _context6.next = 17;
61
+ break;
62
+ }
63
+
64
+ _context6.next = 7;
65
+ return CREDENTIALS_CONTEXT.getCredentials();
66
+
67
+ case 7:
68
+ cred = _context6.sent;
69
+ if (isUseImportMethod) cred = CREDENTIALS_CONTEXT.importCredentials(cred);
70
+
71
+ if (!CREDENTIALS_CONTEXT.isUseRefreshTokensPropcessing) {
72
+ _context6.next = 15;
73
+ break;
74
+ }
75
+
76
+ _context6.next = 12;
77
+ return CREDENTIALS_CONTEXT.waitRefresh(cred.isNeedRefresh).then( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee() {
78
+ return _regenerator.default.wrap(function _callee$(_context) {
79
+ while (1) {
80
+ switch (_context.prev = _context.next) {
81
+ case 0:
82
+ return _context.abrupt("return", CREDENTIALS_CONTEXT.processCredentials(cred));
83
+
84
+ case 1:
85
+ case "end":
86
+ return _context.stop();
87
+ }
88
+ }
89
+ }, _callee);
90
+ })));
91
+
92
+ case 12:
93
+ _context6.t0 = _context6.sent;
94
+ _context6.next = 16;
95
+ break;
96
+
97
+ case 15:
98
+ _context6.t0 = cred;
99
+
100
+ case 16:
101
+ credentials = _context6.t0;
102
+
103
+ case 17:
104
+ if (!(API_CONTEXT.addAsCommon && typeof API_CONTEXT.addAsCommon !== 'function')) {
105
+ _context6.next = 19;
106
+ break;
107
+ }
108
+
109
+ throw new Error('addAsCommon must be function (getInstanceOfFetchSystem)');
110
+
111
+ case 19:
112
+ _context6.next = 21;
113
+ return (_API_CONTEXT$addAsCom = API_CONTEXT.addAsCommon) === null || _API_CONTEXT$addAsCom === void 0 ? void 0 : _API_CONTEXT$addAsCom.call(API_CONTEXT);
114
+
115
+ case 21:
116
+ _context6.t1 = _context6.sent;
117
+
118
+ if (_context6.t1) {
119
+ _context6.next = 24;
120
+ break;
121
+ }
122
+
123
+ _context6.t1 = {};
124
+
125
+ case 24:
126
+ _ref2 = _context6.t1;
127
+ headersToAbortableFetchInstance = _ref2.headers;
128
+ queryParamsToAbortableFetchInstance = _ref2.queryParameters;
129
+ optionsToAbortableFetchInstance = _ref2.options;
130
+
131
+ if (!(headersToAbortableFetchInstance && !getIsOnlyAnObject(headersToAbortableFetchInstance) || optionsToAbortableFetchInstance && !getIsOnlyAnObject(optionsToAbortableFetchInstance) || queryParamsToAbortableFetchInstance && !(typeof queryParamsToAbortableFetchInstance === 'string' || getIsOnlyAnObject(queryParamsToAbortableFetchInstance) || Array.isArray(queryParamsToAbortableFetchInstance)))) {
132
+ _context6.next = 30;
133
+ break;
134
+ }
135
+
136
+ throw new Error('Bad output format from addAsCommon (getInstanceOfFetchSystem)');
137
+
138
+ case 30:
139
+ return _context6.abrupt("return", (CREDENTIALS_CONTEXT !== null && CREDENTIALS_CONTEXT !== void 0 && CREDENTIALS_CONTEXT.isUseRefreshTokensPropcessing ? CREDENTIALS_CONTEXT.waitRefresh() : Promise.resolve()).then( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee5() {
140
+ var _CREDENTIALS_CONTEXT$;
141
+
142
+ return _regenerator.default.wrap(function _callee5$(_context5) {
143
+ while (1) {
144
+ switch (_context5.prev = _context5.next) {
145
+ case 0:
146
+ return _context5.abrupt("return", new _AbortableFetch.default({
147
+ //? Метод по умолчанию
148
+ method: 'GET',
149
+ //? Заголовки по умолчанию
150
+ headers: _objectSpread(_objectSpread({}, headersToAbortableFetchInstance), credentials.token ? (CREDENTIALS_CONTEXT === null || CREDENTIALS_CONTEXT === void 0 ? void 0 : (_CREDENTIALS_CONTEXT$ = CREDENTIALS_CONTEXT.getHeadersForAuthorize) === null || _CREDENTIALS_CONTEXT$ === void 0 ? void 0 : _CREDENTIALS_CONTEXT$.call(CREDENTIALS_CONTEXT, credentials.token)) || {} : {}),
151
+ queryParameters: queryParamsToAbortableFetchInstance,
152
+ //? Опции по умолчанию
153
+ options: _objectSpread({
154
+ mode: 'cors',
155
+ redirect: 'follow'
156
+ }, optionsToAbortableFetchInstance),
157
+ //? Каждый запрос (каждый запрос мультизапроса), сделаный методом request этого экземпляра выполнит этот колбек
158
+ everyPromiseCallback: function () {
159
+ var _everyPromiseCallback = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee2(response) {
160
+ var _CREDENTIALS_CONTEXT$2, _CREDENTIALS_CONTEXT$3;
161
+
162
+ var _request$mesageOption, _API_CONTEXT$sendMess, request, isUseErrorToast;
163
+
164
+ return _regenerator.default.wrap(function _callee2$(_context2) {
165
+ while (1) {
166
+ switch (_context2.prev = _context2.next) {
167
+ case 0:
168
+ if (!response.status) {
169
+ //? this - это НЕ API_CONTEXT и НЕ CREDENTIALS_CONTEXT, a итоговый эекземпляр AbortableFetch
170
+ request = this.requestInput.find(function (item) {
171
+ return item.path === response.request.path;
172
+ });
173
+ isUseErrorToast = request === null || request === void 0 ? void 0 : (_request$mesageOption = request.mesageOptions) === null || _request$mesageOption === void 0 ? void 0 : _request$mesageOption.isUseErrorToast;
174
+ if (isUseErrorToast) (_API_CONTEXT$sendMess = API_CONTEXT.sendMessage) === null || _API_CONTEXT$sendMess === void 0 ? void 0 : _API_CONTEXT$sendMess.call(API_CONTEXT, API_CONTEXT.NO_INET, request.mesageOptions, response.clone());
175
+ }
176
+
177
+ if (!(API_CONTEXT.REJECT_CODES.includes(response.status) || CREDENTIALS_CONTEXT !== null && CREDENTIALS_CONTEXT !== void 0 && CREDENTIALS_CONTEXT.isUseRefreshTokensPropcessing && CREDENTIALS_CONTEXT !== null && CREDENTIALS_CONTEXT !== void 0 && (_CREDENTIALS_CONTEXT$2 = CREDENTIALS_CONTEXT.CODES_USING_THE_REFRESH_ATTEMPT) !== null && _CREDENTIALS_CONTEXT$2 !== void 0 && (_CREDENTIALS_CONTEXT$3 = _CREDENTIALS_CONTEXT$2.includes) !== null && _CREDENTIALS_CONTEXT$3 !== void 0 && _CREDENTIALS_CONTEXT$3.call(_CREDENTIALS_CONTEXT$2, response.status))) {
178
+ _context2.next = 5;
179
+ break;
180
+ }
181
+
182
+ _context2.t0 = Promise.reject(new Error("status:".concat(response.status)));
183
+ _context2.next = 15;
184
+ break;
185
+
186
+ case 5:
187
+ _context2.t1 = Promise;
188
+
189
+ if (isGetBody) {
190
+ _context2.next = 10;
191
+ break;
192
+ }
193
+
194
+ _context2.t2 = response;
195
+ _context2.next = 13;
196
+ break;
197
+
198
+ case 10:
199
+ _context2.next = 12;
200
+ return API_CONTEXT.getResponseBody(response);
201
+
202
+ case 12:
203
+ _context2.t2 = _context2.sent;
204
+
205
+ case 13:
206
+ _context2.t3 = _context2.t2;
207
+ _context2.t0 = _context2.t1.resolve.call(_context2.t1, _context2.t3);
208
+
209
+ case 15:
210
+ return _context2.abrupt("return", _context2.t0);
211
+
212
+ case 16:
213
+ case "end":
214
+ return _context2.stop();
215
+ }
216
+ }
217
+ }, _callee2, this);
218
+ }));
219
+
220
+ function everyPromiseCallback(_x2) {
221
+ return _everyPromiseCallback.apply(this, arguments);
222
+ }
223
+
224
+ return everyPromiseCallback;
225
+ }(),
226
+ //? Если хоть один запрос из пачки будет зареджекчен, зареджектится вся пачка.
227
+ //? В этом случае будет выполнен этот колбэк
228
+ catchCallback: function () {
229
+ var _catchCallback = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee4(res) {
230
+ var _this2 = this;
231
+
232
+ var code;
233
+ return _regenerator.default.wrap(function _callee4$(_context4) {
234
+ while (1) {
235
+ switch (_context4.prev = _context4.next) {
236
+ case 0:
237
+ code = +res.message.split(':')[1];
238
+
239
+ if (!API_CONTEXT.CODES_USING_THE_REFRESH_ATTEMPT.includes(code)) {
240
+ _context4.next = 3;
241
+ break;
242
+ }
243
+
244
+ return _context4.abrupt("return", (CREDENTIALS_CONTEXT === null || CREDENTIALS_CONTEXT === void 0 ? void 0 : CREDENTIALS_CONTEXT.waitRefresh(true).then( /*#__PURE__*/(0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee3() {
245
+ var _CREDENTIALS_CONTEXT$4, _CREDENTIALS_CONTEXT$5;
246
+
247
+ var newCredentials;
248
+ return _regenerator.default.wrap(function _callee3$(_context3) {
249
+ while (1) {
250
+ switch (_context3.prev = _context3.next) {
251
+ case 0:
252
+ _context3.next = 2;
253
+ return CREDENTIALS_CONTEXT === null || CREDENTIALS_CONTEXT === void 0 ? void 0 : CREDENTIALS_CONTEXT.processCredentials(CREDENTIALS_CONTEXT === null || CREDENTIALS_CONTEXT === void 0 ? void 0 : CREDENTIALS_CONTEXT.getCredentials(CREDENTIALS_CONTEXT === null || CREDENTIALS_CONTEXT === void 0 ? void 0 : (_CREDENTIALS_CONTEXT$4 = CREDENTIALS_CONTEXT.getIsTokenStartRefresh) === null || _CREDENTIALS_CONTEXT$4 === void 0 ? void 0 : _CREDENTIALS_CONTEXT$4.call(CREDENTIALS_CONTEXT)));
254
+
255
+ case 2:
256
+ _context3.t0 = _context3.sent;
257
+
258
+ if (_context3.t0) {
259
+ _context3.next = 5;
260
+ break;
261
+ }
262
+
263
+ _context3.t0 = {};
264
+
265
+ case 5:
266
+ newCredentials = _context3.t0;
267
+
268
+ //? Если есть новый токен - меняем его на экземпляре AbortableFetch
269
+ _this2.setHeaders(_objectSpread(_objectSpread({}, _this2.getHeaders()), newCredentials !== null && newCredentials !== void 0 && newCredentials.token ? {
270
+ Authorization: "Bearer ".concat(newCredentials === null || newCredentials === void 0 ? void 0 : newCredentials.token)
271
+ } : {})); //? Если есть новый токен - повторяем запрос последней пачки
272
+
273
+
274
+ if (!newCredentials.token) {
275
+ _context3.next = 11;
276
+ break;
277
+ }
278
+
279
+ return _context3.abrupt("return", _this2.repeatRequest());
280
+
281
+ case 11:
282
+ CREDENTIALS_CONTEXT === null || CREDENTIALS_CONTEXT === void 0 ? void 0 : (_CREDENTIALS_CONTEXT$5 = CREDENTIALS_CONTEXT.callbackAfterRejectRefresh) === null || _CREDENTIALS_CONTEXT$5 === void 0 ? void 0 : _CREDENTIALS_CONTEXT$5.call(CREDENTIALS_CONTEXT);
283
+
284
+ case 12:
285
+ case "end":
286
+ return _context3.stop();
287
+ }
288
+ }
289
+ }, _callee3);
290
+ })))) || Promise.reject(res));
291
+
292
+ case 3:
293
+ return _context4.abrupt("return", Promise.reject(res));
294
+
295
+ case 4:
296
+ case "end":
297
+ return _context4.stop();
298
+ }
299
+ }
300
+ }, _callee4);
301
+ }));
302
+
303
+ function catchCallback(_x3) {
304
+ return _catchCallback.apply(this, arguments);
305
+ }
306
+
307
+ return catchCallback;
308
+ }()
309
+ }));
310
+
311
+ case 1:
312
+ case "end":
313
+ return _context5.stop();
314
+ }
315
+ }
316
+ }, _callee5);
317
+ }))));
318
+
319
+ case 31:
320
+ case "end":
321
+ return _context6.stop();
322
+ }
323
+ }
324
+ }, _callee6, this);
325
+ }));
326
+ return _getInstanceOfFetchSystem.apply(this, arguments);
327
+ }
@@ -0,0 +1,185 @@
1
+ Класс RESTAPI предназначен для предоставления методов для совершения запросов на проекте.
2
+
3
+ В экземпляре класса содержится 2 основных метода:
4
+ - doRequest
5
+ - doMonoRequest
6
+
7
+
8
+ doRequest - базовый метод, рассчитан на совершение мультизапросов. Мультизапросы из одного элемента воспринимаются корректно.
9
+ doMonoRequest - вторичный метод на базе doRequest, рассчитан на совершение одиночных запросов, на вход принимает 1 обобщенный объект настроек
10
+
11
+ Возможности конфигурации аргументов вызова для этих методов описаны тут
12
+ https://dot818.atlassian.net/wiki/spaces/IFS/pages/2309324801/-
13
+
14
+
15
+
16
+
17
+
18
+ Разбор объекта конфигурирования для получения экземпляра класса RESTAPI
19
+
20
+ ***** БАЗОВОЕ ОПИСАНИЕ *****
21
+
22
+ Пример использования на проете:
23
+
24
+ export default new RESTAPI({
25
+ constants: { ... }, // - набор констант, как необходимых для класса, так и пользовательских
26
+ utils: { ... }, // - набор утилит, как методы перегружающие базовые классовые, так и отдельные пользовательские методы
27
+ requestsCreators: { ... }, // - набор крейтеров объектов описания запроса, как для перезагрузки базовых (нежелательно), так и для кастомных
28
+
29
+ credentialsProcessing: { ... }, // - конфигурация для работы с токенами
30
+
31
+ sendMessage: function // - метод реализующий рендер пользовательских сообщений (наприме ф-я, которая вызывает тот или иной toast)
32
+ });
33
+
34
+ ****************************
35
+
36
+
37
+ ----------
38
+ constants
39
+ ----------
40
+
41
+
42
+ API_PATH - url бэковской ipi (строго обязателен)
43
+
44
+ BAD_REQUEST_DATA_TEXT - текст для ошибок, вызванных передачей некорректной структуры первым аргументом doRequest
45
+ DEFAULT_SUCCESS_MESSAGE - текст дефолтного сообщения об успешном запросе
46
+ DEFAULT_ERROR_MESSAGE - текст дефолтного сообщения для НЕ 200-х кодов ответа
47
+ NO_INET - текст дефолтного сообщения для ситуаций, когда запрос не ушел (нет инета или CORS)
48
+
49
+ REJECT_CODES - массив кодов (numbers), которые прибодят к reject-у всей пачки
50
+ reject пачки приводит к выполнению колбэка catchCallback (смотри возврат из getInstanceOfFetchSystem, файл _utils.js)
51
+
52
+
53
+ ----------
54
+ utils
55
+ ----------
56
+
57
+
58
+ В классе имеются базовые утилиты, которые можно перегрузить на экземпляре, передав одноименные методы в объекте utils
59
+ (базовые методы содержаться в классе ApiUtils)
60
+
61
+ splitProperties - метод используемый ВСЕМИ requestСreator-ами.
62
+ Разделяет пропы из единого входного аргумента на пропы для описания запроса и пропы общих настроек
63
+ Прегрузка НЕ рекомендуется
64
+
65
+ getRootPath - Обработчик пропы api из объекта описания запроса (Пример: { path: 'https://example', api: 'auth', ... })
66
+ Базовый метод просто возвращает API_PATH
67
+ Если планируется в путь добавлять некие постфиксы РЕКОМЕНДУЕТСЯ перегрузить метод на экземпляре
68
+
69
+ getResponseBody - метод извлечения тела из объекта Response
70
+ Метод проверенный на практике, без реальной необходимости прегрузка НЕ рекомендуется
71
+
72
+ getErrorMessage - Обработчик структуры для ошибки
73
+ Базовый метод просто возвращает response (предполагается, что response - уже извлеченное тело ответа)
74
+ РЕКОМЕНДУЕТСЯ метод перегрузить на экземпляре, передав свой метод, умеющий оценивать принятую на проекте структуру тела ошибки
75
+
76
+ checkResponseCode - метод для внутренней работы, который триггерит ф-ю sendMessage
77
+ Прегрузка НЕ рекомендуется
78
+
79
+ addAsCommon - метод, который возвращает структуры, которые будут использованы для КАЖДОГО запроса, совершаемого методами экземпляра RESTAPI
80
+ Под структурами подразумевается информация о headers, queryParameters и options (подробнее смотри класс ApiUtils)
81
+ Базовый метод просто возвращает {}
82
+ Если планируется вводить что-то общее для каждого запроса, то РЕКОМЕНДУЕТСЯ метод перегрузить на экземпляре
83
+
84
+
85
+ ----------
86
+ requestsCreators
87
+ ----------
88
+
89
+
90
+ Объект requestsCreators - это объект с методами, которые "дорабатывают" объект описания запроса, если в нем указана пропа type,
91
+ одноименная с названием крейтера (не учитывая префикс createRequest_).
92
+
93
+ Например: такой объект описания запроса { path: 'https://example', type: 'toJson', ... }
94
+ до совершения запроса будет предварительно обработан базовым requestСreator-ом 'createRequest_toJson'
95
+
96
+ Объект requestsCreators может как перегружать базовые (не рекомендуется), так и добавлять кастомные.
97
+
98
+ !!! ВАЖНО !!!
99
+ Добавляя кастомный крейтер важно понимать, что его выходная структура должна соответствовать общему принципу всех крейтеров.
100
+ Так же КРАЙНЕ ЖЕЛАТЕЛЬНО на подобии с кастомными использовать метод splitProperties
101
+
102
+ !!! ВАЖНО !!!
103
+ Любые крейтеры (в том числе и перегружаемые) передаются БЕЗ всяких префиксов.
104
+
105
+ С примерами базовых крейтеров можно ознакомиться в классе ApiRequestCreators
106
+
107
+
108
+ ----------
109
+ credentialsProcessing
110
+ ----------
111
+
112
+ Объект конфигурации для работы с токенами (в том числе и флоу рефреша токенов).
113
+
114
+ !!! ВАЖНО !!!
115
+ Отсутствие объекта credentialsProcessing ОТКЛЮЧАЕТ добавление токенов в заголовки запросов.
116
+ И напротив - наличие этого объекта подразумевает, что если в системе имеется токен, то он будет добавляться к заголовкам
117
+
118
+ Рассмотрим управляющие свойства и методы
119
+
120
+
121
+ getCredentials() - Метод возвращающий объект с кредами. Обязательный
122
+ Предполагается что метод вернет структуру { token, expires, refreshToken }
123
+ Однако можно возвращать и другую структуру ЕСЛИ будет передан метод importCredentials (смотри ниже),
124
+ который сможет трансформировать выходную структуру из getCredentials к выше указанному формату
125
+
126
+ getHeadersForAuthorize(token) - Метод, который должен вернуть объект для конфигурации заголовка авторизации. Обязательный
127
+ Например: token => ({ Authorization: `Berer ${token}` }), где
128
+ ключ - название заголовка (в частности Authorization)
129
+ велью по ключу - велью заголовка (в частности `Berer ${token}`)
130
+
131
+
132
+ importCredentials(credentialsObj) - Метод-трансформер. Опционален.
133
+ На вход будет получать креды из getCredentials и refreshCredentials (смотри ниже),
134
+ на выход должен отдать структуру { token, expires, refreshToken }
135
+
136
+ saveCredentials(credentialsObj) - Метод который должен сохранять в системе креды.
137
+ Опционален в случае, если НЕ используется система обновления токенов, если используется - обязателен.
138
+ Предполагается, что saveCredentials сохраняет креды туда, откуда их берет getCredentials
139
+
140
+
141
+
142
+ isUseRefreshTokensPropcessing - Булевское свойство. Подключает флоу обновления токенов.
143
+
144
+ refreshCredentials(currentCredentialsObj) - Метод который отвечает за обновление кредов.
145
+ Предполагается, что ответственность за сохранение кредов на методе НЕ лежит,
146
+ т.к. в случае использования флоу обновления метод saveCredentials обязателен
147
+ Требования для выходной структуры эдентичны требованиям к getCredentials.
148
+ Предполагается, что refreshCredentials и getCredentials возвращают эдентичные структуры.
149
+
150
+ В классе CredentialsProcessing предусмотрен базовый метод refreshCredentials.
151
+ !!! ВАЖНО !!!
152
+ Если использованая в базовом методе методика обновления кредов НЕ ПОДХОДИТ,
153
+ то СТРОГО ОБЯЗАТЕЛЬНО перегрузить метод на экземпляре своей реализацией.
154
+ (Базовый - ф-я refreshCredentialsByDefault из метода refreshCredentials класса CredentialsProcessing)
155
+
156
+ REFRESH_TOKEN_PATH - Если использованая в базовом методе методика обновления кредов ПОДХОДИТ,
157
+ то метод refreshCredentials можно не перегружать (читай не передавать)
158
+ В этом случае СТРОГО ОБЯЗАТЕЛЬНО передать REFRESH_TOKEN_PATH
159
+ !!! ВАЖНО !!!
160
+ REFRESH_TOKEN_PATH передается полностью (глобальная адресация)
161
+
162
+
163
+ CODES_USING_THE_REFRESH_ATTEMPT - Массив кодов (numbers), которые триггерят обновление кредов.
164
+ Опционален, однако если планируется использовать флоу обновления кредов,
165
+ то не имеет смысла не передавать данный массив,
166
+ т.к. по умолчанию это свойство пустой массив,
167
+ а это означает, что ни один код ответа бэка НЕ триггернет процесс обновления
168
+
169
+ REFRESH_TOKEN_FLAG - Ключ для localStorage, оповещает систему, что уже какой-то запрос начал процесс обновления кредов
170
+ По умолчанию 'refreshTokenFlag'
171
+
172
+
173
+ INTERVAL_FOR_CHECKING_TOKEN_UPDATE - Частота проверки ожидающими обновления кредов запросами завершено ли обновление
174
+ По умолчанию 50мс
175
+
176
+ callbackAfterRejectRefresh - Метод который выполнится в случае, если обновить креды не удалось.
177
+ Как правило это logout.
178
+ Опционален.
179
+
180
+
181
+ ----------
182
+ sendMessage
183
+ ----------
184
+
185
+ К базовому описанию добавить нечего ).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "intelicoreact",
3
- "version": "1.1.94",
3
+ "version": "1.2.0",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "files": [
@@ -20,6 +20,7 @@
20
20
  "anme": "^1.0.1",
21
21
  "chart.js": "^3.8.0",
22
22
  "classnames": "^2.3.1",
23
+ "jsonwebtoken": "^9.0.2",
23
24
  "moment": "^2.29.1",
24
25
  "moment-timezone": "^0.5.34",
25
26
  "node-fetch": "^3.2.6",