@foxford/sdk 5.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.
- package/README.mdx +493 -0
- package/index.cjs +1794 -0
- package/index.d.cts +780 -0
- package/index.d.ts +780 -0
- package/index.js +1748 -0
- package/index.js.flow +1005 -0
- package/package.json +65 -0
- package/plugins/autocomplete-email.cjs +305 -0
- package/plugins/autocomplete-email.d.cts +49 -0
- package/plugins/autocomplete-email.d.ts +49 -0
- package/plugins/autocomplete-email.js +270 -0
- package/plugins/autocomplete-email.js.flow +24 -0
- package/plugins/confirm-phone.cjs +503 -0
- package/plugins/confirm-phone.d.cts +95 -0
- package/plugins/confirm-phone.d.ts +95 -0
- package/plugins/confirm-phone.js +469 -0
- package/plugins/confirm-phone.js.flow +69 -0
package/README.mdx
ADDED
|
@@ -0,0 +1,493 @@
|
|
|
1
|
+
Пакет SDK для работы с платформой Foxford. Предоставляет типизированный интерфейс для взаимодействия с API Foxford и управление виджетами.
|
|
2
|
+
|
|
3
|
+
## Основные компоненты
|
|
4
|
+
|
|
5
|
+
### Foxford - основной класс
|
|
6
|
+
|
|
7
|
+
Класс Foxford является точкой входа в SDK. Инициализируется с конфигурацией и предоставляет доступ ко всем сервисам.
|
|
8
|
+
|
|
9
|
+
**Конструктор:**
|
|
10
|
+
```typescript
|
|
11
|
+
new Foxford(config?: FoxfordConfig)
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
**Свойства:**
|
|
15
|
+
|
|
16
|
+
- `user` - UserService для управления пользовательскими данными
|
|
17
|
+
- `cart` - CartService для работы с корзиной
|
|
18
|
+
- `course` - CourseService для получения информации о курсах
|
|
19
|
+
- `promo` - PromoService для работы с промокодами
|
|
20
|
+
- `tag` - TagService для управления тегами
|
|
21
|
+
- `widgets` - Widgets для инициализации виджетов
|
|
22
|
+
- `productPack` - ProductPackService для работы с пакетами продуктов
|
|
23
|
+
- `appOptions` - AppOptionsService для получения опций приложения
|
|
24
|
+
- `captcha` - CaptchaService для работы с капчей
|
|
25
|
+
|
|
26
|
+
**Методы:**
|
|
27
|
+
|
|
28
|
+
- `shortURL(url: string): Promise<ApiResponse<unknown>>` - создание короткой ссылки
|
|
29
|
+
- `applyPlugin(plugin: SdkPlugin): void` - применение плагина к SDK
|
|
30
|
+
|
|
31
|
+
### Конфигурация (FoxfordConfig)
|
|
32
|
+
|
|
33
|
+
```typescript
|
|
34
|
+
interface FoxfordConfig {
|
|
35
|
+
host?: string // Базовый URL API (по умолчанию: https://foxford.ru)
|
|
36
|
+
widgetsVersion?: 'latest' | string // Версия виджетов (deprecated)
|
|
37
|
+
antibot?: boolean // Включить антимеханизм защиты (по умолчанию: true)
|
|
38
|
+
antibotConfig?: FoxfordAntibotConfig // Конфигурация антибота
|
|
39
|
+
api?: ApiConfig // Дополнительная конфигурация API
|
|
40
|
+
captchaConfig?: () => CaptchaConfig // Конфигурация капчи
|
|
41
|
+
widgetsConfig?: WidgetsInitConfig // Конфигурация виджетов (deprecated)
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### События SDK
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
static events = {
|
|
49
|
+
FETCH_APP_OPTIONS: 'Foxford.app_options.fetch',
|
|
50
|
+
LR_REGISTRATION_SET: 'LR_REGISTRATION_SET'
|
|
51
|
+
}
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Сервисы
|
|
57
|
+
|
|
58
|
+
### UserService
|
|
59
|
+
|
|
60
|
+
Предоставляет методы для работы с пользовательскими данными.
|
|
61
|
+
|
|
62
|
+
**Методы:**
|
|
63
|
+
|
|
64
|
+
- `async addTag(id: number): Promise<unknown>` - добавить тег пользователю
|
|
65
|
+
- `async enrollCourse(id: number): Promise<void>` - записать пользователя на курс (deprecated, используйте CourseService)
|
|
66
|
+
|
|
67
|
+
### CartService
|
|
68
|
+
|
|
69
|
+
Работа с корзиной.
|
|
70
|
+
|
|
71
|
+
**Методы:**
|
|
72
|
+
|
|
73
|
+
- `createCartItem(id: number, type: CartItemResourceType): CartItemDTO` - создать объект элемента корзины
|
|
74
|
+
- `async addCartItemToCart(cartItem: CartItemDTO): Promise<unknown>` - добавить элемент в корзину
|
|
75
|
+
|
|
76
|
+
### CourseService
|
|
77
|
+
|
|
78
|
+
Работа с курсами.
|
|
79
|
+
|
|
80
|
+
**Методы:**
|
|
81
|
+
|
|
82
|
+
- `async getCourse(id: number): Promise<Course>` - получить информацию о курсе по ID
|
|
83
|
+
- `async enrollCourse(id: number): Promise<void>` - записать пользователя на курс
|
|
84
|
+
|
|
85
|
+
**Пример:**
|
|
86
|
+
```typescript
|
|
87
|
+
const course = await sdk.course.getCourse(123)
|
|
88
|
+
await sdk.course.enrollCourse(123)
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### PromoService
|
|
92
|
+
|
|
93
|
+
Работа с промокодами и акциями.
|
|
94
|
+
|
|
95
|
+
**Методы:**
|
|
96
|
+
|
|
97
|
+
- `async checkPromocode(code: string): Promise<unknown>` - проверить валидность промокода
|
|
98
|
+
- `async trackCodeCampaign(promoCode: string): Promise<void>` - записать факт показа промокода
|
|
99
|
+
|
|
100
|
+
### TagService
|
|
101
|
+
|
|
102
|
+
Управление тегами пользователей.
|
|
103
|
+
|
|
104
|
+
**Методы:**
|
|
105
|
+
|
|
106
|
+
- `async addTag(id: number): Promise<unknown>` - добавить тег пользователю
|
|
107
|
+
|
|
108
|
+
### WidgetsService
|
|
109
|
+
|
|
110
|
+
Инициализация и управление виджетами Foxford.
|
|
111
|
+
|
|
112
|
+
**Типы:**
|
|
113
|
+
|
|
114
|
+
```typescript
|
|
115
|
+
type Widget = {
|
|
116
|
+
name: 'menu' | 'reviews' | 'featuredCoaches' | 'coachEnrollment' |
|
|
117
|
+
'shortForm' | 'userTypePrompt' | 'teachersSlider' | 'externshipFormats'
|
|
118
|
+
options: Record<string, any>
|
|
119
|
+
container?: HTMLElement
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
type WidgetsInitConfig = {
|
|
123
|
+
version?: 'latest' | string
|
|
124
|
+
locale?: 'ru'
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
**Методы:**
|
|
129
|
+
|
|
130
|
+
- `async create(config: WidgetsConfig): Promise<void>` - инициализировать виджеты
|
|
131
|
+
- `async update(name: string, config: Widget): Promise<void>` - обновить существующий виджет
|
|
132
|
+
|
|
133
|
+
**Пример:**
|
|
134
|
+
```typescript
|
|
135
|
+
await sdk.widgets.create({
|
|
136
|
+
widgets: [
|
|
137
|
+
{
|
|
138
|
+
name: 'menu',
|
|
139
|
+
options: { /* опции */ }
|
|
140
|
+
}
|
|
141
|
+
]
|
|
142
|
+
})
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### ProductPackService
|
|
146
|
+
|
|
147
|
+
Работа с пакетами продуктов.
|
|
148
|
+
|
|
149
|
+
**Методы:**
|
|
150
|
+
|
|
151
|
+
- `async getProductPack(id: number): Promise<ProductPack>` - получить информацию о пакете продукта по ID
|
|
152
|
+
|
|
153
|
+
### AppOptionsService
|
|
154
|
+
|
|
155
|
+
Получение опций приложения (настройки, флаги экспериментов и т.д.).
|
|
156
|
+
|
|
157
|
+
**Методы:**
|
|
158
|
+
|
|
159
|
+
- `async getCurrentAppOptions(): Promise<AppOptions>` - получить текущие опции (с кешированием)
|
|
160
|
+
- `async getAppOptions(): Promise<AppOptions>` - получить опции из API
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## Сущности и типы данных
|
|
165
|
+
|
|
166
|
+
### UserDTO
|
|
167
|
+
|
|
168
|
+
```typescript
|
|
169
|
+
interface UserDTO {
|
|
170
|
+
id: null | number
|
|
171
|
+
email: string
|
|
172
|
+
firstName: string
|
|
173
|
+
middleName: string
|
|
174
|
+
lastName: string
|
|
175
|
+
fullName: string
|
|
176
|
+
shortName: string
|
|
177
|
+
createdAt: null | string
|
|
178
|
+
timezone: null | string
|
|
179
|
+
locale: null | string
|
|
180
|
+
grade: { id: null | number; index: null | number; name: null | string; translit: null | string }
|
|
181
|
+
phone: null | string
|
|
182
|
+
avatarUrl: string
|
|
183
|
+
isParent: boolean
|
|
184
|
+
isGraduated: boolean
|
|
185
|
+
gradeChecked: boolean
|
|
186
|
+
type: null | 'pupil' | 'agent'
|
|
187
|
+
isCoach: boolean
|
|
188
|
+
isMiniGroupTeacher: boolean
|
|
189
|
+
isExternshipCoach: boolean
|
|
190
|
+
isAgent: boolean
|
|
191
|
+
methodist: boolean
|
|
192
|
+
address: { /* адресные данные */ } | null
|
|
193
|
+
socialNets: Array<{ provider: 'facebook' | 'google_oauth2' | ...; uid: number }>
|
|
194
|
+
skype: null | string
|
|
195
|
+
settings?: { /* настройки пользователя */ }
|
|
196
|
+
bonus: { giftAmount: number; realMoneyAmount: number }
|
|
197
|
+
bonusAmount: number
|
|
198
|
+
hasActivePurchases: boolean
|
|
199
|
+
hasAttemptsSolveExamRehearsals: boolean
|
|
200
|
+
hasBookmarks: boolean
|
|
201
|
+
tags: null | string[]
|
|
202
|
+
cartTemplateId: null | number
|
|
203
|
+
cartItemsCount: number
|
|
204
|
+
onboardingFinished: boolean
|
|
205
|
+
emailConfirmed: boolean
|
|
206
|
+
phoneConfirmed: boolean
|
|
207
|
+
// ... и другие поля
|
|
208
|
+
}
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### ProductPack
|
|
212
|
+
|
|
213
|
+
```typescript
|
|
214
|
+
type ProductPack = {
|
|
215
|
+
name: string
|
|
216
|
+
description: string
|
|
217
|
+
meta_title: string
|
|
218
|
+
meta_description: string
|
|
219
|
+
published: true
|
|
220
|
+
content_description: string
|
|
221
|
+
disciplines_scope: string
|
|
222
|
+
guaranteed_admission: true
|
|
223
|
+
grade_names: string
|
|
224
|
+
is_purchased: false
|
|
225
|
+
learning_flow: { title: string; steps: Array<{ header: string; description: string }> }
|
|
226
|
+
offers: { intro: string; items: Array<{ title: string; description: string }> }
|
|
227
|
+
price_block: {
|
|
228
|
+
price: number
|
|
229
|
+
initial_price: number
|
|
230
|
+
title: string
|
|
231
|
+
description: string
|
|
232
|
+
points: Array<string>
|
|
233
|
+
price_per_month: number
|
|
234
|
+
initial_price_per_month: number
|
|
235
|
+
}
|
|
236
|
+
product_pack_items: Array<ProductTypeItem>
|
|
237
|
+
faq_items: Array<{ question: string; answer: string }>
|
|
238
|
+
landing_image_urls: Array<string>
|
|
239
|
+
}
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## Плагины
|
|
245
|
+
|
|
246
|
+
### ConfirmPhone
|
|
247
|
+
|
|
248
|
+
Плагин для подтверждения номера телефона в формах.
|
|
249
|
+
|
|
250
|
+
**Конструктор:**
|
|
251
|
+
```typescript
|
|
252
|
+
new ConfirmPhone(node: HTMLInputElement, options?: IConfirmPhoneOptions)
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
**Методы:**
|
|
256
|
+
|
|
257
|
+
- `apply(sdk: Foxford): void` - применить плагин к SDK
|
|
258
|
+
- `destroy(): void` - удалить плагин
|
|
259
|
+
- `requestCode(payloadData: TRequestData): Promise<TRequestResponse>` - запросить код подтверждения
|
|
260
|
+
- `confirmCode(payloadData: TConfirmData): Promise<TConfirmResponse>` - подтвердить код
|
|
261
|
+
|
|
262
|
+
**Опции конфигурации:**
|
|
263
|
+
|
|
264
|
+
```typescript
|
|
265
|
+
{
|
|
266
|
+
className?: string // CSS класс контейнера
|
|
267
|
+
confirmCodeInvalidText?: string // Текст ошибки неверного кода
|
|
268
|
+
confirmCodePlaceholderText?: string // Плейсхолдер поля кода
|
|
269
|
+
confirmedInputClassName?: string // CSS класс подтвержденного поля
|
|
270
|
+
disabledClassName?: string // CSS класс отключенного состояния
|
|
271
|
+
errorClassName?: string // CSS класс ошибки
|
|
272
|
+
hiddenClassName?: string // CSS класс скрытого элемента
|
|
273
|
+
inputParentsToHide?: string[] // Элементы-родители для скрытия
|
|
274
|
+
requestButtonText?: string // Текст кнопки запроса кода
|
|
275
|
+
retryButtonText?: string // Текст кнопки повторной отправки
|
|
276
|
+
sendCodeButtonText?: string // Текст кнопки отправки кода
|
|
277
|
+
unconfirmedHintText?: string // Текст подсказки неподтвержденного номера
|
|
278
|
+
untilRetryText?: string // Текст таймера повторной отправки
|
|
279
|
+
userData?: { phone: string; phoneConfirmed: boolean } // Данные пользователя
|
|
280
|
+
}
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
### EmailAutocomplete
|
|
284
|
+
|
|
285
|
+
Плагин для автодополнения email-адресов с проверкой на опечатки (используется алгоритм Левенштейна).
|
|
286
|
+
|
|
287
|
+
**Конструктор:**
|
|
288
|
+
```typescript
|
|
289
|
+
new EmailAutocomplete(node: HTMLInputElement, options?: EacOptions)
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
**Методы:**
|
|
293
|
+
|
|
294
|
+
- `apply(): void` - применить плагин к полю ввода
|
|
295
|
+
- `destroy(): void` - удалить плагин
|
|
296
|
+
- `clear(): void` - очистить состояние плагина
|
|
297
|
+
|
|
298
|
+
**Опции конфигурации:**
|
|
299
|
+
|
|
300
|
+
```typescript
|
|
301
|
+
{
|
|
302
|
+
emailDomains?: string[] // Список доменов для автодополнения (по умолчанию: gmail.com, mail.ru, yandex.ru и др.)
|
|
303
|
+
suggestionClass?: string // CSS класс для отображения автодополнения
|
|
304
|
+
suggestionColor?: string // Цвет текста автодополнения
|
|
305
|
+
suitableColor?: string // Цвет сообщения "возможно, вы имели в виду"
|
|
306
|
+
suitableEmailColor?: string // Цвет email-адреса в подсказке
|
|
307
|
+
suitableFontSize?: string // Размер шрифта подсказки
|
|
308
|
+
suitableLineHeight?: string // Высота строки подсказки
|
|
309
|
+
suitableLevenshteinTreshold?: number // Допустимое расстояние Левенштейна (по умолчанию: 5)
|
|
310
|
+
|
|
311
|
+
onAutocomplete?(value: string): void // Коллбек при автодополнении
|
|
312
|
+
onShowSuitableEmail?(): void // Коллбек при показе подсказки
|
|
313
|
+
onClickSuitableEmail?(): void // Коллбек при клике на подсказку
|
|
314
|
+
onHideSuitableEmail?(): void // Коллбек при скрытии подсказки
|
|
315
|
+
}
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
---
|
|
319
|
+
|
|
320
|
+
## Антимеханизм защиты (FoxfordAntibot)
|
|
321
|
+
|
|
322
|
+
Механизм для борьбы с автоматизированными запросами.
|
|
323
|
+
|
|
324
|
+
**Конструктор:**
|
|
325
|
+
```typescript
|
|
326
|
+
new FoxfordAntibot(config?: FoxfordAntibotConfig)
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
**Опции конфигурации:**
|
|
330
|
+
|
|
331
|
+
```typescript
|
|
332
|
+
{
|
|
333
|
+
antibotFrameSrc?: string // URL для антимеханизма (по умолчанию: https://foxford.ru/antibot/ping)
|
|
334
|
+
antibotOnload?(e: Event): void // Коллбек при успешной инициализации
|
|
335
|
+
antibotOnerror?(): void // Коллбек при ошибке инициализации
|
|
336
|
+
debug?: boolean // Режим отладки
|
|
337
|
+
}
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
---
|
|
341
|
+
|
|
342
|
+
## API плагины
|
|
343
|
+
|
|
344
|
+
SDK поставляется с набором встроенных API плагинов:
|
|
345
|
+
|
|
346
|
+
- `CamelizeRequestPlugin` - трансформация snake_case в camelCase для запросов к API
|
|
347
|
+
- `ReferrerRequestPlugin` - добавление реферера в заголовки запросов
|
|
348
|
+
- `DataLayerEventDispatcherPlugin` - отправка событий в dataLayer для Google Analytics
|
|
349
|
+
- `CaptchaPlugin` - интеграция с капчей
|
|
350
|
+
|
|
351
|
+
---
|
|
352
|
+
|
|
353
|
+
## Примеры использования
|
|
354
|
+
|
|
355
|
+
### Инициализация SDK
|
|
356
|
+
|
|
357
|
+
```typescript
|
|
358
|
+
import { Foxford } from '@foxford/sdk'
|
|
359
|
+
|
|
360
|
+
const sdk = new Foxford({
|
|
361
|
+
host: 'https://foxford.ru',
|
|
362
|
+
antibot: true,
|
|
363
|
+
widgetsConfig: {
|
|
364
|
+
locale: 'ru'
|
|
365
|
+
}
|
|
366
|
+
})
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
### Работа с курсами
|
|
370
|
+
|
|
371
|
+
```typescript
|
|
372
|
+
// Получить информацию о курсе
|
|
373
|
+
const course = await sdk.course.getCourse(123)
|
|
374
|
+
console.log(course)
|
|
375
|
+
|
|
376
|
+
// Записаться на курс
|
|
377
|
+
await sdk.course.enrollCourse(123)
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
### Работа с корзиной
|
|
381
|
+
|
|
382
|
+
```typescript
|
|
383
|
+
// Создать элемент корзины
|
|
384
|
+
const cartItem = sdk.cart.createCartItem(456, 'course')
|
|
385
|
+
|
|
386
|
+
// Добавить в корзину
|
|
387
|
+
await sdk.cart.addCartItemToCart(cartItem)
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
### Работа с промокодами
|
|
391
|
+
|
|
392
|
+
```typescript
|
|
393
|
+
// Проверить промокод
|
|
394
|
+
const result = await sdk.promo.checkPromocode('DISCOUNT2024')
|
|
395
|
+
console.log(result)
|
|
396
|
+
|
|
397
|
+
// Записать факт показа промокода
|
|
398
|
+
await sdk.promo.trackCodeCampaign('DISCOUNT2024')
|
|
399
|
+
```
|
|
400
|
+
|
|
401
|
+
### Инициализация виджетов
|
|
402
|
+
|
|
403
|
+
```typescript
|
|
404
|
+
await sdk.widgets.create({
|
|
405
|
+
locale: 'ru',
|
|
406
|
+
widgets: [
|
|
407
|
+
{
|
|
408
|
+
name: 'menu',
|
|
409
|
+
options: {}
|
|
410
|
+
},
|
|
411
|
+
{
|
|
412
|
+
name: 'reviews',
|
|
413
|
+
options: { limit: 5 }
|
|
414
|
+
},
|
|
415
|
+
{
|
|
416
|
+
name: 'featuredCoaches',
|
|
417
|
+
options: { count: 3 }
|
|
418
|
+
}
|
|
419
|
+
]
|
|
420
|
+
})
|
|
421
|
+
```
|
|
422
|
+
|
|
423
|
+
### Подтверждение телефона
|
|
424
|
+
|
|
425
|
+
```typescript
|
|
426
|
+
import { ConfirmPhone } from '@foxford/sdk'
|
|
427
|
+
|
|
428
|
+
const phoneInput = document.querySelector('input[type="tel"]') as HTMLInputElement
|
|
429
|
+
const confirmPlugin = new ConfirmPhone(phoneInput, {
|
|
430
|
+
userData: {
|
|
431
|
+
phone: '+79991234567',
|
|
432
|
+
phoneConfirmed: false
|
|
433
|
+
}
|
|
434
|
+
})
|
|
435
|
+
|
|
436
|
+
confirmPlugin.apply(sdk)
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
### Автодополнение email
|
|
440
|
+
|
|
441
|
+
```typescript
|
|
442
|
+
import { EmailAutocomplete } from '@foxford/sdk'
|
|
443
|
+
|
|
444
|
+
const emailInput = document.querySelector('input[type="email"]') as HTMLInputElement
|
|
445
|
+
const autocompletePlugin = new EmailAutocomplete(emailInput, {
|
|
446
|
+
emailDomains: ['gmail.com', 'yandex.ru'],
|
|
447
|
+
onAutocomplete: (value) => {
|
|
448
|
+
console.log('Автодополнено:', value)
|
|
449
|
+
}
|
|
450
|
+
})
|
|
451
|
+
|
|
452
|
+
autocompletePlugin.apply()
|
|
453
|
+
```
|
|
454
|
+
|
|
455
|
+
---
|
|
456
|
+
|
|
457
|
+
## Ошибки
|
|
458
|
+
|
|
459
|
+
### LogginError
|
|
460
|
+
|
|
461
|
+
Ошибка при работе с авторизацией.
|
|
462
|
+
|
|
463
|
+
```typescript
|
|
464
|
+
import { LogginError } from '@foxford/sdk'
|
|
465
|
+
|
|
466
|
+
throw new LogginError('Unauthorized', { cause: error })
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
### ConfirmationCodeRequestError
|
|
470
|
+
|
|
471
|
+
Ошибка при запросе кода подтверждения.
|
|
472
|
+
|
|
473
|
+
```typescript
|
|
474
|
+
import { ConfirmationCodeRequestError } from '@foxford/sdk'
|
|
475
|
+
|
|
476
|
+
throw new ConfirmationCodeRequestError('Invalid code', { cause: error })
|
|
477
|
+
```
|
|
478
|
+
|
|
479
|
+
---
|
|
480
|
+
|
|
481
|
+
## Экспортные точки
|
|
482
|
+
|
|
483
|
+
SDK предоставляет следующие экспортные точки:
|
|
484
|
+
|
|
485
|
+
- `@foxford/sdk` - основной пакет с Foxford и всеми сервисами
|
|
486
|
+
- `@foxford/sdk/plugins/confirm-phone` - плагин подтверждения телефона отдельно
|
|
487
|
+
- `@foxford/sdk/plugins/autocomplete-email` - плагин автодополнения email отдельно
|
|
488
|
+
|
|
489
|
+
---
|
|
490
|
+
|
|
491
|
+
## Лицензия
|
|
492
|
+
|
|
493
|
+
MIT © Foxford Co
|