@pushwoosh/http-client 1.4.0 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,9 @@
1
1
  # Pushwoosh / Micro Frontends / Http Client
2
- Этот пакет является частью микрофронтендовой архитектуры.
3
- Предназначен для выполнения запросов к API.
2
+ Этот пакет является частью микрофронтендовой архитектуры
3
+ <br/>
4
+ За основу взят проект [Single SPA](https://single-spa.js.org)
5
+ <br/>
6
+ Предназначен для выполнения запросов к API
4
7
 
5
8
  ## Термины
6
9
  [Аутентификация](https://auth0.com/docs/authentication) - процесс подтверждения личности пользователя
@@ -12,19 +15,23 @@
12
15
  [Сервер авторизации](https://www.rfc-editor.org/rfc/rfc6749.html#section-1.1) - сервер, выдающий токены доступа клиенту после успешной аутентификации владельца ресурса и получение авторизации
13
16
 
14
17
  ## Установка
15
- 0. Установить переменную окружения "NPM_TOKEN" в терминале (токен можно получить у администраторов)
16
- 1. Выполнить `npm ci` для установки зависимостей
18
+ 1. Сгенерировать ключи для запуска сервера в режиме HTTPS. ([Confluence](https://confluence.corp.pushwoosh.com/display/FD/HTTPS+on+localhost))
19
+ 2. Выполнить `npm ci`
17
20
 
18
21
  ## Запуск разработки
19
- 0. Скопировать файл `.env.example` в `.env`. Удалить из него комментарии к переменным
20
- 1. Выполнить `npm start`
22
+ 1. Скопировать файл `.env.example` в `.env`. Удалить из него комментарии к переменным
23
+ 2. Выполнить `npm start`
21
24
 
22
25
  ## Работа с библиотекой
26
+ Библиотека собирается в формате UMD.
27
+ <br/>
28
+ В первую очередь предназначена для загрузки с помощью SystemJS.
29
+
23
30
  ### Создание экземпляра HttpClient
24
31
  При создании экземпляра класса HttpClient необходимо указать следующие параметры:
25
32
 
26
33
  ```typescript
27
- import { HttpClient } from './http-client';
34
+ import { HttpClient } from '@pushwoosh/http-client';
28
35
 
29
36
  const httpClient = new HttpClient({
30
37
  errorMiddleware: (error: unknown): Promise<never> | never => {
@@ -53,7 +60,7 @@ const introspect = await httpClient.initialize(authorizationCode, authorizationS
53
60
 
54
61
  `authorizationState` - это случайная строка, сгенерированная и сохраненная клиентом перед началом сеанса, возвращается вместе с `authorizationCode`
55
62
 
56
- `introspect` - это данные о текущем сеансе (идентификатор пользователя, идентификатор аккаунта и т.п.), которые зашиты в `accessToken`
63
+ `introspect` - это данные о текущем сеансе (идентификатор пользователя, идентификатор аккаунта и т.п.), которые зашиты в `access token`
57
64
 
58
65
  ### Начать сеанс
59
66
  Выполнить аутентификацию пользователя на клиенте
@@ -133,11 +140,26 @@ curl 'https://app.pushwoosh.com/entrypoint' \
133
140
  try {
134
141
  const result = httpClient.get<never, never, { some: string }>('/entrypoint', {
135
142
  withAuthorization: true,
136
- withCredentials: false,
137
- responseMiddleware: (response: Response): { some: string } => { // если стандартный middleware для разбора ответа от сервера не подходит
138
- const jsonResponse = httpClient.baseResponseMiddleware(response);
139
- const result = httpClient.baseResponseMiddleware(jsonResponse);
140
- return result;
143
+ responseMiddleware: (response: Response<{some: string}>): { some: string } => {
144
+ // если стандартный middleware для разбора ответа от сервера не подходит
145
+ // например когда ответ от сервера всегда 200, а коды ошибок зашиты в самом ответе.
146
+ // {
147
+ // status: 200,
148
+ // message: 'Ok',
149
+ // result: {
150
+ // status: 200,
151
+ // message: 'Ok',
152
+ // response: {
153
+ // some: 'some-string',
154
+ // },
155
+ // },
156
+ // }
157
+ const jsonResponse = httpClient.baseResponseMiddleware(response);
158
+ if (jsonResponse.status !== 200) {
159
+ // map jsonResponse error to HttpClient error and throw it.
160
+ }
161
+
162
+ return jsonResponse.result;
141
163
  },
142
164
  });
143
165
  } catch (error: unknown) {
@@ -154,56 +176,59 @@ import { ForbiddenError, HttpClient, NotFoundError, UnauthorizedError } from './
154
176
  try {
155
177
  const result = httpClient.get<never, never, never>('/entrypoint', {
156
178
  withAuthorization: true,
157
- withCredentials: false,
158
179
  });
159
180
  } catch (error: unknown) {
160
181
  if (error instanceof UnauthorizedError) {
161
- // TODO: Если пользователь не авторизован...
182
+ // TODO: Если не авторизован...
162
183
  }
163
184
 
164
185
  if (error instanceof ForbiddenError) {
165
- // TODO: Если пользователю запрещено выполнять запрос...
186
+ // TODO: Если запрещено выполнять запрос...
166
187
  }
167
188
 
168
189
  if (error instanceof NotFoundError) {
169
190
  // TODO: Если сервер ничего не нашел...
170
191
  }
171
192
 
172
- // записываем ошибку в sentry
173
- captureException(error);
193
+ // TODO: error capture
174
194
  }
175
195
  ```
176
196
 
197
+ ### Родительский класс для ошибок
198
+ `HttpClientError` - Класс описывает ошибку связанную с HttpClient.
199
+ <br/>
200
+ HttpClientError класс является наследником Error.
201
+ <br/>
202
+ <b>Никогда не выбрасывается как исключение. От нее наследуются все остальные ошибки!</b>
203
+
177
204
  Каждая ошибка имеет свой класс:
178
205
 
179
206
  #### Ошибки связанные с самим модулем:
180
- `HttpClientError (extends Error)` - Класс описывает ошибку связанную с HttpClient
207
+ `InternalError` - Класс описывающий внутреннюю ошибку HttpClient
181
208
 
182
- `InternalError (extends HttpClientError)` - Класс описывающий внутреннюю ошибку HttpClient
209
+ #### Ошибки связанные с ответами от сервера:
210
+ `BadRequestError` - Класс описывающий ошибку "Плохой запрос"
183
211
 
184
- #### Ошибки связанные со всеми запросами:
185
- `UnknownError (extends HttpClientError)` - Неизвестная ошибка HttpClient
212
+ `UnauthorizedError` - Класс описывающий ошибку "Не авторизовано"
186
213
 
187
- #### Ошибки связанные с запросами:
188
- `BadRequestError (extends HttpClientError)` - Класс описывающий ошибку "Плохой запрос"
214
+ `ForbiddenError` - Класс описывающий ошибку "Запрещено"
189
215
 
190
- `UnauthorizedError (extends HttpClientError)` - Класс описывающий ошибку "Не авторизовано"
216
+ `NotFoundError` - Класс описывающий ошибку "Не найден"
191
217
 
192
- `ForbiddenError (extends HttpClientError)` - Класс описывающий ошибку "Запрещено"
218
+ `MethodNotAllowedError` - Класс описывающий ошибку "Метод не доступен"
193
219
 
194
- `NotFoundError (extends HttpClientError)` - Класс описывающий ошибку "Не найден"
220
+ `UnsupportedMediaTypeError` - Класс описывающий ошибку "Медиа формат не поддерживается сервером"
195
221
 
196
- `MethodNotAllowedError (extends HttpClientError)` - Класс описывающий ошибку "Метод не доступен"
197
-
198
- `UnsupportedMediaTypeError (extends HttpClientError)` - Класс описывающий ошибку "Медиа формат не поддерживается сервером"
199
-
200
- `UnprocessableEntityError (extends HttpClientError)` - Класс описывающий ошибку "Сервер не может обработать запрос"
222
+ `UnprocessableEntityError` - Класс описывающий ошибку "Сервер не может обработать запрос"
201
223
 
202
224
  #### Ошибки связанные с работой сервера:
203
- `InternalServerError (extends HttpClientError)` - Класс описывающий ошибку "Внутренняя ошибка сервера"
225
+ `InternalServerError` - Класс описывающий ошибку "Внутренняя ошибка сервера"
226
+
227
+ `BadGatewayError` - Класс описывающий ошибку "Плохой шлюз"
204
228
 
205
- `BadGatewayError (extends HttpClientError)` - Класс описывающий ошибку "Плохой шлюз"
229
+ `ServiceUnavailableError` - Класс описывающий ошибку "Сервис недоступен"
206
230
 
207
- `ServiceUnavailableError (extends HttpClientError)` - Класс описывающий ошибку "Сервис недоступен"
231
+ `GatewayTimeoutError` - Класс описывающий ошибку "Вышло время ожидания ответа"
208
232
 
209
- `GatewayTimeoutError (extends HttpClientError)` - Класс описывающий ошибку "Вышло время ожидания ответа"
233
+ #### Остальные:
234
+ `UnknownServerError` - Класс описывает ошибку связанную с запросами к серверу, но для которой не подходит ни один из вариантов выше.