@foxford/sdk 8.0.1 → 8.1.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/api.d.cts +4 -19
- package/api.d.ts +4 -19
- package/api.js.flow +3 -26
- package/entities.cjs +557 -7
- package/entities.d.cts +524 -7
- package/entities.d.ts +524 -7
- package/entities.js +557 -7
- package/entities.js.flow +564 -7
- package/index.cjs +557 -7
- package/index.d.cts +697 -185
- package/index.d.ts +697 -185
- package/index.js +557 -7
- package/index.js.flow +817 -263
- package/package.json +5 -3
- package/plugins/autocomplete-email.d.cts +1 -1
- package/plugins/confirm-phone.d.cts +1 -1
- package/plugins/types-sRHKQ8xU.d.cts +1269 -0
- package/plugins/types-sRHKQ8xU.d.ts +1269 -0
- package/types-3Yq2Uj51.d.cts +33 -0
- package/types-BrKJGAOa.d.ts +33 -0
package/index.d.cts
CHANGED
|
@@ -1,9 +1,189 @@
|
|
|
1
1
|
import { ApiInstance, ApiConfig, CaptchaConfig, ApiResponse, ApiService, CaptchaService } from '@foxford/services';
|
|
2
2
|
export { ApiAdapter, ApiBasicCredentials, ApiConfig, ApiError, ApiErrorExtended, ApiInstance, ApiInterceptorManager, ApiMethod, ApiPromise, ApiProxyConfig, ApiRequestConfig, ApiRequestConfigExtended, ApiResponse, ApiResponseType, ApiRetryConfig, ApiService, ApiServiceInterface, ApiStatic, ApiTransformer, Cancel, CancelStatic, CancelToken, CancelTokenSource, CancelTokenStatic, Canceler, CaptchaError, CaptchaService, RequestPlugin, RequestPluginInterface, ResponseError, ResponseFailPlugin, ResponseSuccessPlugin, ResponseSuccessPluginInterface } from '@foxford/services';
|
|
3
|
-
import {
|
|
3
|
+
import { BusinessUnitAbbreviation, CartItemResourceType, Course } from '@foxford/types';
|
|
4
|
+
|
|
5
|
+
interface FoxfordAntibotConfig {
|
|
6
|
+
antibotFrameSrc?: string;
|
|
7
|
+
antibotOnload?: (e: Event) => void;
|
|
8
|
+
antibotOnerror?: () => void;
|
|
9
|
+
debug?: boolean;
|
|
10
|
+
}
|
|
11
|
+
declare class FoxfordAntibot {
|
|
12
|
+
private config;
|
|
13
|
+
static FOXFORD_ANTIBOT_URL: string;
|
|
14
|
+
static DEFAULT_CONFIG: {
|
|
15
|
+
antibotFrameSrc: string;
|
|
16
|
+
};
|
|
17
|
+
static FRAME_CLASSNAME: string;
|
|
18
|
+
constructor(config?: FoxfordAntibotConfig);
|
|
19
|
+
private static antibotIsInitialized;
|
|
20
|
+
private static createFrame;
|
|
21
|
+
createAntibotFrame: (params: {
|
|
22
|
+
src: string;
|
|
23
|
+
onload?: (_e: Event) => void;
|
|
24
|
+
onerror?: () => void;
|
|
25
|
+
}) => void;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
type Widget = {
|
|
29
|
+
name: 'menu' | 'reviews' | 'featuredCoaches' | 'coachEnrollment' | 'shortForm' | 'userTypePrompt' | 'teachersSlider' | 'externshipFormats';
|
|
30
|
+
options: Record<string, any>;
|
|
31
|
+
container?: HTMLElement;
|
|
32
|
+
};
|
|
33
|
+
type WidgetsInitConfig = {
|
|
34
|
+
version?: 'latest' | string;
|
|
35
|
+
locale?: 'ru';
|
|
36
|
+
};
|
|
37
|
+
interface WidgetsConfig extends WidgetsInitConfig {
|
|
38
|
+
analyticContext?: {
|
|
39
|
+
prefix: string;
|
|
40
|
+
module: string;
|
|
41
|
+
payload?: Record<any, any>;
|
|
42
|
+
};
|
|
43
|
+
rootColors?: boolean;
|
|
44
|
+
loadFonts?: boolean;
|
|
45
|
+
widgets: Array<Widget>;
|
|
46
|
+
}
|
|
47
|
+
declare class Widgets {
|
|
48
|
+
private config;
|
|
49
|
+
private api;
|
|
50
|
+
private manifest;
|
|
51
|
+
static ENTRY: string[];
|
|
52
|
+
static DEFAULT_CONFIG: WidgetsInitConfig;
|
|
53
|
+
constructor(config: WidgetsInitConfig | undefined, apiInstance: ApiInstance);
|
|
54
|
+
create(config: WidgetsConfig): Promise<void>;
|
|
55
|
+
update(name: string, config: Widget): Promise<void>;
|
|
56
|
+
private loadManifest;
|
|
57
|
+
static appendScript(src: string): Promise<unknown>;
|
|
58
|
+
private loadAssets;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
type ProductTypeItem = {
|
|
62
|
+
type: string;
|
|
63
|
+
id: number;
|
|
64
|
+
description: string;
|
|
65
|
+
title: string;
|
|
66
|
+
discipline: {
|
|
67
|
+
id: number;
|
|
68
|
+
name: string;
|
|
69
|
+
};
|
|
70
|
+
teacher: {
|
|
71
|
+
id: number;
|
|
72
|
+
long_name: string;
|
|
73
|
+
description: string;
|
|
74
|
+
experience: number;
|
|
75
|
+
photo_url: string;
|
|
76
|
+
photo_large_url: string;
|
|
77
|
+
};
|
|
78
|
+
levels: Array<{
|
|
79
|
+
id: number;
|
|
80
|
+
name: string;
|
|
81
|
+
}>;
|
|
82
|
+
};
|
|
83
|
+
type ProductPack = {
|
|
84
|
+
name: string;
|
|
85
|
+
description: string;
|
|
86
|
+
meta_title: string;
|
|
87
|
+
meta_description: string;
|
|
88
|
+
published: true;
|
|
89
|
+
content_description: string;
|
|
90
|
+
disciplines_scope: string;
|
|
91
|
+
guaranteed_admission: true;
|
|
92
|
+
grade_names: string;
|
|
93
|
+
is_purchased: false;
|
|
94
|
+
learning_flow: {
|
|
95
|
+
title: string;
|
|
96
|
+
steps: Array<{
|
|
97
|
+
header: string;
|
|
98
|
+
description: string;
|
|
99
|
+
}>;
|
|
100
|
+
};
|
|
101
|
+
offers: {
|
|
102
|
+
intro: string;
|
|
103
|
+
items: Array<{
|
|
104
|
+
title: string;
|
|
105
|
+
description: string;
|
|
106
|
+
}>;
|
|
107
|
+
};
|
|
108
|
+
price_block: {
|
|
109
|
+
price: number;
|
|
110
|
+
initial_price: number;
|
|
111
|
+
title: string;
|
|
112
|
+
description: string;
|
|
113
|
+
points: Array<string>;
|
|
114
|
+
price_per_month: number;
|
|
115
|
+
initial_price_per_month: number;
|
|
116
|
+
};
|
|
117
|
+
product_pack_items: Array<ProductTypeItem>;
|
|
118
|
+
faq_items: Array<{
|
|
119
|
+
question: string;
|
|
120
|
+
answer: string;
|
|
121
|
+
}>;
|
|
122
|
+
landing_image_urls: Array<string>;
|
|
123
|
+
};
|
|
124
|
+
interface CartItemDTO {
|
|
125
|
+
cart_item_type: CartItemResourceType;
|
|
126
|
+
resource_id: number;
|
|
127
|
+
}
|
|
128
|
+
type FoxfordConfig = {
|
|
129
|
+
host?: string;
|
|
130
|
+
/** @deprecated */
|
|
131
|
+
widgetsVersion?: 'latest' | string;
|
|
132
|
+
antibot?: boolean;
|
|
133
|
+
antibotConfig?: FoxfordAntibotConfig;
|
|
134
|
+
api?: ApiConfig;
|
|
135
|
+
captchaConfig?: () => CaptchaConfig;
|
|
136
|
+
/** @deprecated Не используйте инициализацию виджетов через SDK */
|
|
137
|
+
widgetsConfig?: WidgetsInitConfig;
|
|
138
|
+
};
|
|
139
|
+
type Reasons = 'additional_education_free_period_started' | 'announcement_clicked' | 'catalog_filtered' | 'coach_intro_lesson_scheduled' | 'coach_landing_visited' | 'course_conspect_visited' | 'course_landing_visited' | 'event_scheduled' | 'event_visited' | 'exam_rehearsal_page_visited' | 'exam_rehearsal_passed' | 'externship_contract_draft_created' | 'externship_demo_access' | 'externship_iep_selected' | 'externship_intendance_expressed' | 'interactive_training_course_visited' | 'externship_landing_visited' | 'externship_lead_request' | 'mini_group_landing_visited' | 'olympiad_page_visited' | 'onboarding' | 'onboarding_finished' | 'product_pack_landing_visited' | 'promos_coach_recommendation_clicked' | 'promos_course_recommendation_clicked' | 'promos_results_filtered' | 'subscription_landing_visited' | 'teacher_course_visited' | 'training_page_visited' | 'training_passed' | 'wiki_visited' | 'project_landing_cta_clicked';
|
|
140
|
+
type ProductFormats = 'coach_course' | 'course' | 'event' | 'exam_rehearsal' | 'externship' | 'game' | 'interactive_trainings' | 'mini_group' | 'olympiad' | 'product_pack' | 'teacher_course' | 'trainings';
|
|
141
|
+
type UserInterests = {
|
|
142
|
+
businessUnitAbbrs?: BusinessUnitAbbreviation[] | null;
|
|
143
|
+
disciplineId?: number | number[] | null;
|
|
144
|
+
gradeId?: number | number[] | null;
|
|
145
|
+
levelId?: number | number[] | null;
|
|
146
|
+
productId?: number | null;
|
|
147
|
+
productFormat?: ProductFormats | null;
|
|
148
|
+
reason?: Reasons | null;
|
|
149
|
+
};
|
|
150
|
+
interface CommunicationSubscriptions {
|
|
151
|
+
subscriptionNews?: boolean;
|
|
152
|
+
subscriptionMaterials?: boolean;
|
|
153
|
+
subscriptionEvents?: boolean;
|
|
154
|
+
subscriptionPromos?: boolean;
|
|
155
|
+
subscriptionReminders?: boolean;
|
|
156
|
+
subscriptionMedia?: boolean;
|
|
157
|
+
subscriptionExternship?: boolean;
|
|
158
|
+
subscriptionExternal?: boolean;
|
|
159
|
+
}
|
|
160
|
+
interface LoginByPhoneParams {
|
|
161
|
+
onEmailRequest: (phoneCheckResponse: {
|
|
162
|
+
email?: string;
|
|
163
|
+
fakeEmail?: boolean;
|
|
164
|
+
state: 'new' | 'confirmed' | 'not_confirmed';
|
|
165
|
+
}) => Promise<string>;
|
|
166
|
+
onCodeRequest: () => Promise<string>;
|
|
167
|
+
onNameRequest: () => Promise<{
|
|
168
|
+
first_name: string;
|
|
169
|
+
last_name: string;
|
|
170
|
+
}>;
|
|
171
|
+
onConfirmationCodeResponse: (confirmationCodeResponse: {
|
|
172
|
+
nextDeliveryAt: string;
|
|
173
|
+
}) => void;
|
|
174
|
+
onConfirmationCodeError: (error: Error) => void;
|
|
175
|
+
}
|
|
176
|
+
interface LoginOrRegistrationResponse {
|
|
177
|
+
redirectUrl?: string;
|
|
178
|
+
registered?: boolean;
|
|
179
|
+
type?: string;
|
|
180
|
+
}
|
|
4
181
|
|
|
5
182
|
type PupilRole = '11 класс' | '10 класс' | '9 класс' | '8 класс' | '7 класс' | '6 класс' | '5 класс' | '4 класс' | '3 класс' | '2 класс' | '1 класс';
|
|
6
183
|
type UserRole = 'Ученик' | 'Репетитор' | 'Учитель' | 'Родитель' | 'Выпускник' | 'Дошкольник' | PupilRole;
|
|
184
|
+
type LeaderboardAccessState = 'unavailable' | 'available' | 'vacation' | 'disabled';
|
|
185
|
+
type LeaderboardReadinessState = 'changeable_course_selection' | 'ready' | 'unready' | 'waiting_course_selection';
|
|
186
|
+
type LearningGoalsAccessState = 'enabled' | 'disabled' | 'optional' | 'required';
|
|
7
187
|
interface UserDTO {
|
|
8
188
|
id: null | number;
|
|
9
189
|
email: string;
|
|
@@ -114,79 +294,556 @@ interface UserDTO {
|
|
|
114
294
|
startsAt: null | string;
|
|
115
295
|
yearName: string;
|
|
116
296
|
} | null;
|
|
297
|
+
/** Текущий интерес посетителя — та же форма, что у `GET /api/user/user_interest`, но из профиля. */
|
|
298
|
+
currentInterest: UserInterests | null;
|
|
299
|
+
/** До какой даты открыт приём в домашнюю школу. */
|
|
300
|
+
admissionFinishesOn: null | string;
|
|
301
|
+
/** Посетитель пришёл из Алгоритмики. */
|
|
302
|
+
algoritmika: boolean;
|
|
303
|
+
bonusesPageVisited: boolean;
|
|
304
|
+
canChangeSchoolInfo: boolean;
|
|
305
|
+
externshipDemoAccessActive: boolean;
|
|
306
|
+
/** Экстернат ждёт оплаты: когда закроется доступ и по какому договору. */
|
|
307
|
+
externshipPaymentRequired: {
|
|
308
|
+
accessClosingDate: string;
|
|
309
|
+
contractId: number;
|
|
310
|
+
} | null;
|
|
311
|
+
externshipPromoHeaderOn: boolean;
|
|
312
|
+
hasExamProgressAccess: boolean;
|
|
313
|
+
hasYearlyRecapAccess: boolean;
|
|
314
|
+
isAttestationSchoolManager: null | boolean;
|
|
315
|
+
isMentor: boolean;
|
|
316
|
+
isXpStreakAvailable: boolean;
|
|
317
|
+
leaderboard: {
|
|
318
|
+
accessState: LeaderboardAccessState;
|
|
319
|
+
readinessState: LeaderboardReadinessState;
|
|
320
|
+
} | null;
|
|
321
|
+
leaderboardAccessState: LeaderboardAccessState;
|
|
322
|
+
learningGoalsAccessState: LearningGoalsAccessState;
|
|
323
|
+
/** Мессенджеры, на которые подписан посетитель; `null` — бэкенд не считал. */
|
|
324
|
+
messengerSubscriptions: null | string[];
|
|
325
|
+
needToPromoteRenewalWithCoach: boolean;
|
|
326
|
+
nextYearCoursesBannerAvailable: boolean;
|
|
327
|
+
passwordSet: null | boolean;
|
|
328
|
+
referralCode: null | string;
|
|
329
|
+
targetActionsOnboardingAvailable: boolean;
|
|
117
330
|
}
|
|
118
331
|
|
|
119
332
|
declare class User {
|
|
120
333
|
private readonly props;
|
|
121
334
|
private readonly isDefault;
|
|
122
335
|
private constructor();
|
|
336
|
+
/**
|
|
337
|
+
* Идентификатор посетителя на бэкенде.
|
|
338
|
+
*
|
|
339
|
+
* @returns Число либо `null` у гостя.
|
|
340
|
+
*/
|
|
123
341
|
get id(): UserDTO['id'];
|
|
342
|
+
/**
|
|
343
|
+
* Почта посетителя.
|
|
344
|
+
*
|
|
345
|
+
* @returns Строка; пустая, если почты нет.
|
|
346
|
+
*/
|
|
124
347
|
get email(): UserDTO['email'];
|
|
348
|
+
/**
|
|
349
|
+
* Имя.
|
|
350
|
+
*
|
|
351
|
+
* @returns Строка; пустая, если не заполнено.
|
|
352
|
+
*/
|
|
125
353
|
get firstName(): UserDTO['firstName'];
|
|
354
|
+
/**
|
|
355
|
+
* Отчество.
|
|
356
|
+
*
|
|
357
|
+
* @returns Строка; пустая, если не заполнено.
|
|
358
|
+
*/
|
|
126
359
|
get middleName(): UserDTO['middleName'];
|
|
360
|
+
/**
|
|
361
|
+
* Фамилия.
|
|
362
|
+
*
|
|
363
|
+
* @returns Строка; пустая, если не заполнено.
|
|
364
|
+
*/
|
|
127
365
|
get lastName(): UserDTO['lastName'];
|
|
366
|
+
/**
|
|
367
|
+
* Полное имя, каким его собрал бэкенд.
|
|
368
|
+
*
|
|
369
|
+
* @returns Строка; пустая у гостя.
|
|
370
|
+
*/
|
|
128
371
|
get fullName(): UserDTO['fullName'];
|
|
372
|
+
/**
|
|
373
|
+
* Короткое имя для обращения в интерфейсе.
|
|
374
|
+
*
|
|
375
|
+
* @returns Строка; пустая у гостя.
|
|
376
|
+
*/
|
|
129
377
|
get shortName(): UserDTO['shortName'];
|
|
378
|
+
/**
|
|
379
|
+
* Когда заведён профиль.
|
|
380
|
+
*
|
|
381
|
+
* @returns Дата ISO либо `null` у гостя.
|
|
382
|
+
*/
|
|
130
383
|
get createdAt(): UserDTO['createdAt'];
|
|
384
|
+
/**
|
|
385
|
+
* Часовой пояс посетителя.
|
|
386
|
+
*
|
|
387
|
+
* @returns Имя пояса либо `null`, если не задан.
|
|
388
|
+
*/
|
|
131
389
|
get timezone(): UserDTO['timezone'];
|
|
390
|
+
/**
|
|
391
|
+
* Локаль интерфейса.
|
|
392
|
+
*
|
|
393
|
+
* @returns Код локали либо `null`, если не задана.
|
|
394
|
+
*/
|
|
132
395
|
get locale(): UserDTO['locale'];
|
|
396
|
+
/**
|
|
397
|
+
* Класс посетителя: id, порядковый номер, имя и транслит.
|
|
398
|
+
*
|
|
399
|
+
* @returns Объект класса; у гостя поля `null` и пустые строки.
|
|
400
|
+
*/
|
|
133
401
|
get grade(): UserDTO['grade'];
|
|
402
|
+
/**
|
|
403
|
+
* Телефон посетителя.
|
|
404
|
+
*
|
|
405
|
+
* @returns Строка либо `null`, если не указан.
|
|
406
|
+
*/
|
|
134
407
|
get phone(): UserDTO['phone'];
|
|
408
|
+
/**
|
|
409
|
+
* Адрес аватара.
|
|
410
|
+
*
|
|
411
|
+
* @returns Строка; пустая, если аватара нет.
|
|
412
|
+
*/
|
|
135
413
|
get avatarUrl(): UserDTO['avatarUrl'];
|
|
414
|
+
/**
|
|
415
|
+
* Посетитель — родитель.
|
|
416
|
+
*
|
|
417
|
+
* @returns `true`, если роль родительская.
|
|
418
|
+
*/
|
|
136
419
|
get isParent(): UserDTO['isParent'];
|
|
420
|
+
/**
|
|
421
|
+
* Посетитель — выпускник.
|
|
422
|
+
*
|
|
423
|
+
* @returns `true`, если школу закончил.
|
|
424
|
+
*/
|
|
137
425
|
get isGraduated(): UserDTO['isGraduated'];
|
|
426
|
+
/**
|
|
427
|
+
* Класс подтверждён посетителем.
|
|
428
|
+
*
|
|
429
|
+
* @returns `true`, если класс проверен.
|
|
430
|
+
*/
|
|
138
431
|
get gradeChecked(): UserDTO['gradeChecked'];
|
|
432
|
+
/**
|
|
433
|
+
* Тип учётной записи на бэкенде.
|
|
434
|
+
*
|
|
435
|
+
* @returns `pupil`, `agent` либо `null` у гостя.
|
|
436
|
+
*/
|
|
139
437
|
get type(): UserDTO['type'];
|
|
438
|
+
/**
|
|
439
|
+
* Посетитель — репетитор.
|
|
440
|
+
*
|
|
441
|
+
* @returns `true`, если роль репетитора.
|
|
442
|
+
*/
|
|
140
443
|
get isCoach(): UserDTO['isCoach'];
|
|
444
|
+
/**
|
|
445
|
+
* Ведёт мини-группы.
|
|
446
|
+
*
|
|
447
|
+
* @returns `true`, если ведёт.
|
|
448
|
+
*/
|
|
141
449
|
get isMiniGroupTeacher(): UserDTO['isMiniGroupTeacher'];
|
|
450
|
+
/**
|
|
451
|
+
* Репетитор экстерната.
|
|
452
|
+
*
|
|
453
|
+
* @returns `true`, если ведёт экстернат.
|
|
454
|
+
*/
|
|
142
455
|
get isExternshipCoach(): UserDTO['isExternshipCoach'];
|
|
456
|
+
/**
|
|
457
|
+
* Посетитель — учитель.
|
|
458
|
+
*
|
|
459
|
+
* @returns `true`, если роль учителя.
|
|
460
|
+
*/
|
|
143
461
|
get isAgent(): UserDTO['isAgent'];
|
|
462
|
+
/**
|
|
463
|
+
* Посетитель — методист.
|
|
464
|
+
*
|
|
465
|
+
* @returns `true`, если методист.
|
|
466
|
+
*/
|
|
144
467
|
get methodist(): UserDTO['methodist'];
|
|
468
|
+
/**
|
|
469
|
+
* Почтовый адрес: страна, регион, город, улица, дом.
|
|
470
|
+
*
|
|
471
|
+
* @returns Объект адреса либо `null`, если не заполнен.
|
|
472
|
+
*/
|
|
145
473
|
get address(): UserDTO['address'];
|
|
474
|
+
/**
|
|
475
|
+
* Привязанные соцсети.
|
|
476
|
+
*
|
|
477
|
+
* @returns Список провайдеров с идентификаторами; пустой, если привязок нет.
|
|
478
|
+
*/
|
|
146
479
|
get socialNets(): UserDTO['socialNets'];
|
|
480
|
+
/**
|
|
481
|
+
* Логин в Skype.
|
|
482
|
+
*
|
|
483
|
+
* @returns Строка либо `null`.
|
|
484
|
+
*/
|
|
147
485
|
get skype(): UserDTO['skype'];
|
|
486
|
+
/**
|
|
487
|
+
* Настройки интерфейса: показанные подсказки и скрытые баннеры.
|
|
488
|
+
*
|
|
489
|
+
* @returns Объект флагов либо `undefined`, если бэкенд их не прислал.
|
|
490
|
+
*/
|
|
148
491
|
get settings(): UserDTO['settings'];
|
|
492
|
+
/**
|
|
493
|
+
* Бонусный счёт: подарочные и реальные бонусы.
|
|
494
|
+
*
|
|
495
|
+
* @returns Объект с суммами.
|
|
496
|
+
*/
|
|
149
497
|
get bonus(): UserDTO['bonus'];
|
|
498
|
+
/**
|
|
499
|
+
* Сумма бонусов на счёте.
|
|
500
|
+
*
|
|
501
|
+
* @returns Число.
|
|
502
|
+
*/
|
|
150
503
|
get bonusAmount(): UserDTO['bonusAmount'];
|
|
504
|
+
/**
|
|
505
|
+
* Есть действующие покупки.
|
|
506
|
+
*
|
|
507
|
+
* @returns `true`, если есть.
|
|
508
|
+
*/
|
|
151
509
|
get hasActivePurchases(): UserDTO['hasActivePurchases'];
|
|
510
|
+
/**
|
|
511
|
+
* Остались попытки пробных экзаменов.
|
|
512
|
+
*
|
|
513
|
+
* @returns `true`, если остались.
|
|
514
|
+
*/
|
|
152
515
|
get hasAttemptsSolveExamRehearsals(): UserDTO['hasAttemptsSolveExamRehearsals'];
|
|
516
|
+
/**
|
|
517
|
+
* Есть закладки.
|
|
518
|
+
*
|
|
519
|
+
* @returns `true`, если есть.
|
|
520
|
+
*/
|
|
153
521
|
get hasBookmarks(): UserDTO['hasBookmarks'];
|
|
522
|
+
/**
|
|
523
|
+
* Метки посетителя на бэкенде.
|
|
524
|
+
*
|
|
525
|
+
* @returns Список строк либо `null`.
|
|
526
|
+
*/
|
|
154
527
|
get tags(): UserDTO['tags'];
|
|
528
|
+
/**
|
|
529
|
+
* Шаблон корзины.
|
|
530
|
+
*
|
|
531
|
+
* @returns Число либо `null`.
|
|
532
|
+
*/
|
|
155
533
|
get cartTemplateId(): UserDTO['cartTemplateId'];
|
|
534
|
+
/**
|
|
535
|
+
* Сколько позиций в корзине.
|
|
536
|
+
*
|
|
537
|
+
* @returns Число.
|
|
538
|
+
*/
|
|
156
539
|
get cartItemsCount(): UserDTO['cartItemsCount'];
|
|
540
|
+
/**
|
|
541
|
+
* Онбординг пройден.
|
|
542
|
+
*
|
|
543
|
+
* @returns `true`, если пройден.
|
|
544
|
+
*/
|
|
157
545
|
get onboardingFinished(): UserDTO['onboardingFinished'];
|
|
546
|
+
/**
|
|
547
|
+
* Когда пройден онбординг.
|
|
548
|
+
*
|
|
549
|
+
* @returns Дата ISO либо `null`, пока не пройден.
|
|
550
|
+
*/
|
|
158
551
|
get onboardingFinishedAt(): UserDTO['onboardingFinishedAt'];
|
|
552
|
+
/**
|
|
553
|
+
* Почта подтверждена.
|
|
554
|
+
*
|
|
555
|
+
* @returns `true`, если подтверждена.
|
|
556
|
+
*/
|
|
159
557
|
get emailConfirmed(): UserDTO['emailConfirmed'];
|
|
558
|
+
/**
|
|
559
|
+
* Телефон подтверждён.
|
|
560
|
+
*
|
|
561
|
+
* @returns `true`, если подтверждён.
|
|
562
|
+
*/
|
|
160
563
|
get phoneConfirmed(): UserDTO['phoneConfirmed'];
|
|
564
|
+
/**
|
|
565
|
+
* Почта выдумана бэкендом при регистрации без почты.
|
|
566
|
+
*
|
|
567
|
+
* @returns `true`, если почта ненастоящая.
|
|
568
|
+
*/
|
|
161
569
|
get fakeEmail(): UserDTO['fakeEmail'];
|
|
570
|
+
/**
|
|
571
|
+
* Посетитель заведён бэкендом без его участия (например, по заявке).
|
|
572
|
+
*
|
|
573
|
+
* @returns `true`, если учётная запись ненастоящая.
|
|
574
|
+
*/
|
|
162
575
|
get fakeUser(): UserDTO['fakeUser'];
|
|
576
|
+
/**
|
|
577
|
+
* Профиль дополнен данными после регистрации.
|
|
578
|
+
*
|
|
579
|
+
* @returns `true`, если дополнен.
|
|
580
|
+
*/
|
|
163
581
|
get profileEnriched(): UserDTO['profileEnriched'];
|
|
582
|
+
/**
|
|
583
|
+
* Идентификатор итогов года.
|
|
584
|
+
*
|
|
585
|
+
* @returns Строка либо `null`, если итогов нет.
|
|
586
|
+
*/
|
|
164
587
|
get recapUuid(): UserDTO['recapUuid'];
|
|
588
|
+
/**
|
|
589
|
+
* Дисциплины, которые изучает посетитель.
|
|
590
|
+
*
|
|
591
|
+
* @returns Список id; пустой, если не выбраны.
|
|
592
|
+
*/
|
|
165
593
|
get disciplineIds(): UserDTO['disciplineIds'];
|
|
594
|
+
/**
|
|
595
|
+
* Настройки приватности.
|
|
596
|
+
*
|
|
597
|
+
* @returns Объект с флагом публичного профиля.
|
|
598
|
+
*/
|
|
166
599
|
get privacy(): UserDTO['privacy'];
|
|
600
|
+
/**
|
|
601
|
+
* Телефон родителя.
|
|
602
|
+
*
|
|
603
|
+
* @returns Строка либо `null`.
|
|
604
|
+
*/
|
|
167
605
|
get parentPhone(): UserDTO['parentPhone'];
|
|
606
|
+
/**
|
|
607
|
+
* Телефон родителя подтверждён.
|
|
608
|
+
*
|
|
609
|
+
* @returns `true`, если подтверждён.
|
|
610
|
+
*/
|
|
168
611
|
get parentPhoneConfirmed(): UserDTO['parentPhoneConfirmed'];
|
|
612
|
+
/**
|
|
613
|
+
* Посетитель что-то покупал.
|
|
614
|
+
*
|
|
615
|
+
* @returns `true`, `false` либо `null`, если бэкенд не считал.
|
|
616
|
+
*/
|
|
169
617
|
get isCustomer(): UserDTO['isCustomer'];
|
|
618
|
+
/**
|
|
619
|
+
* Доступны многодневные серии занятий.
|
|
620
|
+
*
|
|
621
|
+
* @returns `true`, если доступны.
|
|
622
|
+
*/
|
|
170
623
|
get hasAccessToMultiDaysStreaks(): UserDTO['hasAccessToMultiDaysStreaks'];
|
|
624
|
+
/**
|
|
625
|
+
* Ученик начальной школы.
|
|
626
|
+
*
|
|
627
|
+
* @returns `true`, если начальная школа.
|
|
628
|
+
*/
|
|
171
629
|
get isElementaryPupil(): UserDTO['isElementaryPupil'];
|
|
630
|
+
/**
|
|
631
|
+
* Токен для канала уведомлений по WebSocket.
|
|
632
|
+
*
|
|
633
|
+
* @returns Строка либо `null`, если канала нет.
|
|
634
|
+
*/
|
|
172
635
|
get webSocketNotificationsJwt(): UserDTO['webSocketNotificationsJwt'];
|
|
636
|
+
/**
|
|
637
|
+
* Доступны аттестационные листы.
|
|
638
|
+
*
|
|
639
|
+
* @returns `true`, если доступны.
|
|
640
|
+
*/
|
|
173
641
|
get hasAccessToAttestationSheets(): UserDTO['hasAccessToAttestationSheets'];
|
|
642
|
+
/**
|
|
643
|
+
* Посетитель учится в экстернате.
|
|
644
|
+
*
|
|
645
|
+
* @returns `true`, если экстернат.
|
|
646
|
+
*/
|
|
174
647
|
get externshipUser(): UserDTO['externshipUser'];
|
|
648
|
+
/**
|
|
649
|
+
* Есть оплаченные договоры экстерната.
|
|
650
|
+
*
|
|
651
|
+
* @returns `true`, если есть.
|
|
652
|
+
*/
|
|
175
653
|
get hasPurchasedExternshipContracts(): UserDTO['hasPurchasedExternshipContracts'];
|
|
654
|
+
/**
|
|
655
|
+
* Доступна аттестация экстерната.
|
|
656
|
+
*
|
|
657
|
+
* @returns `true`, если доступна.
|
|
658
|
+
*/
|
|
176
659
|
get hasExternshipAttestationAccess(): UserDTO['hasExternshipAttestationAccess'];
|
|
660
|
+
/**
|
|
661
|
+
* Профиль в разделе социализации.
|
|
662
|
+
*
|
|
663
|
+
* @returns Объект с id и состоянием либо `null`, если профиля нет.
|
|
664
|
+
*/
|
|
177
665
|
get socializationProfile(): UserDTO['socializationProfile'];
|
|
666
|
+
/**
|
|
667
|
+
* Когда заканчивается бесплатный доступ.
|
|
668
|
+
*
|
|
669
|
+
* @returns Дата ISO либо `null`, если доступа нет.
|
|
670
|
+
*/
|
|
178
671
|
get freeAccessFinishesAt(): UserDTO['freeAccessFinishesAt'];
|
|
672
|
+
/**
|
|
673
|
+
* В комнате начальной школы есть непросмотренные новинки.
|
|
674
|
+
*
|
|
675
|
+
* @returns `true`, если есть; `undefined`, если бэкенд не прислал.
|
|
676
|
+
*/
|
|
179
677
|
get hasUnseenRoomFeatures(): UserDTO['hasUnseenRoomFeatures'];
|
|
678
|
+
/**
|
|
679
|
+
* Покупал договоры экстерната.
|
|
680
|
+
*
|
|
681
|
+
* @returns `true`, если покупал.
|
|
682
|
+
*/
|
|
180
683
|
get purchaseAnyExternshipContracts(): UserDTO['purchaseAnyExternshipContracts'];
|
|
684
|
+
/**
|
|
685
|
+
* Связан с экстернатом: ученик, родитель либо репетитор.
|
|
686
|
+
*
|
|
687
|
+
* @returns `true`, если связан; `undefined`, если бэкенд не прислал.
|
|
688
|
+
*/
|
|
181
689
|
get hasExternshipRelation(): UserDTO['hasExternshipRelation'];
|
|
690
|
+
/**
|
|
691
|
+
* Есть действующий договор экстерната.
|
|
692
|
+
*
|
|
693
|
+
* @returns `true`, если есть; `undefined`, если бэкенд не прислал.
|
|
694
|
+
*/
|
|
182
695
|
get hasExternshipActiveContract(): UserDTO['hasExternshipActiveContract'];
|
|
696
|
+
/**
|
|
697
|
+
* Можно продлить договор домашней школы.
|
|
698
|
+
*
|
|
699
|
+
* @returns `true`, если можно; `undefined`, если бэкенд не прислал.
|
|
700
|
+
*/
|
|
183
701
|
get canProlongateContract(): UserDTO['canProlongateContract'];
|
|
702
|
+
/**
|
|
703
|
+
* Окно пролонгации договора: даты, скидка, заголовок следующего года.
|
|
704
|
+
*
|
|
705
|
+
* @returns Объект окна, `null` либо `undefined`, если окна нет.
|
|
706
|
+
*/
|
|
184
707
|
get prolongation(): UserDTO['prolongation'];
|
|
708
|
+
/**
|
|
709
|
+
* Текущий интерес посетителя: класс, дисциплина, уровень, формат и причина. Та же форма, что у `GET /api/user/user_interest`, но из профиля, без похода.
|
|
710
|
+
*
|
|
711
|
+
* @returns Объект интереса либо `null`, если бэкенд не считал.
|
|
712
|
+
*/
|
|
713
|
+
get currentInterest(): UserDTO['currentInterest'];
|
|
714
|
+
/**
|
|
715
|
+
* До какой даты открыт приём в домашнюю школу.
|
|
716
|
+
*
|
|
717
|
+
* @returns Дата либо `null`, если приём не идёт.
|
|
718
|
+
*/
|
|
719
|
+
get admissionFinishesOn(): UserDTO['admissionFinishesOn'];
|
|
720
|
+
/**
|
|
721
|
+
* Посетитель пришёл из Алгоритмики — партнёрский вход с другой площадки.
|
|
722
|
+
*
|
|
723
|
+
* @returns `true`, если из Алгоритмики.
|
|
724
|
+
*/
|
|
725
|
+
get algoritmika(): UserDTO['algoritmika'];
|
|
726
|
+
/**
|
|
727
|
+
* Страница бонусов уже открывалась — подсказки на ней больше не показываются.
|
|
728
|
+
*
|
|
729
|
+
* @returns `true`, если открывалась.
|
|
730
|
+
*/
|
|
731
|
+
get bonusesPageVisited(): UserDTO['bonusesPageVisited'];
|
|
732
|
+
/**
|
|
733
|
+
* Посетителю разрешено менять школу и класс в профиле.
|
|
734
|
+
*
|
|
735
|
+
* @returns `true`, если разрешено.
|
|
736
|
+
*/
|
|
737
|
+
get canChangeSchoolInfo(): UserDTO['canChangeSchoolInfo'];
|
|
738
|
+
/**
|
|
739
|
+
* Идёт демо-доступ к экстернату.
|
|
740
|
+
*
|
|
741
|
+
* @returns `true`, пока демо активно.
|
|
742
|
+
*/
|
|
743
|
+
get externshipDemoAccessActive(): UserDTO['externshipDemoAccessActive'];
|
|
744
|
+
/**
|
|
745
|
+
* Экстернат ждёт оплаты: когда закроется доступ и по какому договору.
|
|
746
|
+
*
|
|
747
|
+
* @returns Объект с датой и id договора либо `null`, если долга нет.
|
|
748
|
+
*/
|
|
749
|
+
get externshipPaymentRequired(): UserDTO['externshipPaymentRequired'];
|
|
750
|
+
/**
|
|
751
|
+
* Показывать промо-шапку экстерната.
|
|
752
|
+
*
|
|
753
|
+
* @returns `true`, если показывать.
|
|
754
|
+
*/
|
|
755
|
+
get externshipPromoHeaderOn(): UserDTO['externshipPromoHeaderOn'];
|
|
756
|
+
/**
|
|
757
|
+
* Доступен раздел прогресса подготовки к экзаменам.
|
|
758
|
+
*
|
|
759
|
+
* @returns `true`, если доступен.
|
|
760
|
+
*/
|
|
761
|
+
get hasExamProgressAccess(): UserDTO['hasExamProgressAccess'];
|
|
762
|
+
/**
|
|
763
|
+
* Доступны итоги года; их адрес — `recapUuid`.
|
|
764
|
+
*
|
|
765
|
+
* @returns `true`, если доступны.
|
|
766
|
+
*/
|
|
767
|
+
get hasYearlyRecapAccess(): UserDTO['hasYearlyRecapAccess'];
|
|
768
|
+
/**
|
|
769
|
+
* Управляет аттестационной школой.
|
|
770
|
+
*
|
|
771
|
+
* @returns `true`, `false` либо `null`, если бэкенд не считал.
|
|
772
|
+
*/
|
|
773
|
+
get isAttestationSchoolManager(): UserDTO['isAttestationSchoolManager'];
|
|
774
|
+
/**
|
|
775
|
+
* Посетитель — наставник.
|
|
776
|
+
*
|
|
777
|
+
* @returns `true`, если наставник.
|
|
778
|
+
*/
|
|
779
|
+
get isMentor(): UserDTO['isMentor'];
|
|
780
|
+
/**
|
|
781
|
+
* Доступна серия ежедневных занятий с опытом (XP-стрик).
|
|
782
|
+
*
|
|
783
|
+
* @returns `true`, если доступна.
|
|
784
|
+
*/
|
|
785
|
+
get isXpStreakAvailable(): UserDTO['isXpStreakAvailable'];
|
|
786
|
+
/**
|
|
787
|
+
* Таблица лидеров: доступна ли посетителю и готов ли он к ней (выбор курса).
|
|
788
|
+
*
|
|
789
|
+
* @returns Объект состояний либо `null`, если посетитель вне программы.
|
|
790
|
+
*/
|
|
791
|
+
get leaderboard(): UserDTO['leaderboard'];
|
|
792
|
+
/**
|
|
793
|
+
* Состояние доступа к таблице лидеров.
|
|
794
|
+
*
|
|
795
|
+
* @returns `unavailable`, `available`, `vacation` либо `disabled`.
|
|
796
|
+
*/
|
|
797
|
+
get leaderboardAccessState(): UserDTO['leaderboardAccessState'];
|
|
798
|
+
/**
|
|
799
|
+
* Как устроены учебные цели у посетителя.
|
|
800
|
+
*
|
|
801
|
+
* @returns `enabled`, `disabled`, `optional` либо `required`.
|
|
802
|
+
*/
|
|
803
|
+
get learningGoalsAccessState(): UserDTO['learningGoalsAccessState'];
|
|
804
|
+
/**
|
|
805
|
+
* Мессенджеры, на которые посетитель подписан на уведомления.
|
|
806
|
+
*
|
|
807
|
+
* @returns Список либо `null`, если бэкенд не считал.
|
|
808
|
+
*/
|
|
809
|
+
get messengerSubscriptions(): UserDTO['messengerSubscriptions'];
|
|
810
|
+
/**
|
|
811
|
+
* Пора предлагать продление занятий с репетитором.
|
|
812
|
+
*
|
|
813
|
+
* @returns `true`, если пора.
|
|
814
|
+
*/
|
|
815
|
+
get needToPromoteRenewalWithCoach(): UserDTO['needToPromoteRenewalWithCoach'];
|
|
816
|
+
/**
|
|
817
|
+
* Показывать баннер курсов следующего учебного года.
|
|
818
|
+
*
|
|
819
|
+
* @returns `true`, если показывать.
|
|
820
|
+
*/
|
|
821
|
+
get nextYearCoursesBannerAvailable(): UserDTO['nextYearCoursesBannerAvailable'];
|
|
822
|
+
/**
|
|
823
|
+
* Пароль задан — вход не только через код или соцсеть.
|
|
824
|
+
*
|
|
825
|
+
* @returns `true`, `false` либо `null`, если бэкенд не считал.
|
|
826
|
+
*/
|
|
827
|
+
get passwordSet(): UserDTO['passwordSet'];
|
|
828
|
+
/**
|
|
829
|
+
* Реферальный код для программы «приведи друга».
|
|
830
|
+
*
|
|
831
|
+
* @returns Строка либо `null`, если код не выдан.
|
|
832
|
+
*/
|
|
833
|
+
get referralCode(): UserDTO['referralCode'];
|
|
834
|
+
/**
|
|
835
|
+
* Доступен онбординг целевых действий.
|
|
836
|
+
*
|
|
837
|
+
* @returns `true`, если доступен.
|
|
838
|
+
*/
|
|
839
|
+
get targetActionsOnboardingAvailable(): UserDTO['targetActionsOnboardingAvailable'];
|
|
185
840
|
/**
|
|
186
841
|
* Идёт ли сейчас окно пролонгации договора домашней школы.
|
|
187
842
|
*
|
|
188
843
|
* Границы включаются: последний день окна ещё считается пролонгацией. Не заданная граница
|
|
189
844
|
* означает, что окна нет вовсе, а не что оно бесконечно.
|
|
845
|
+
*
|
|
846
|
+
* @returns `true`, если сегодня внутри окна включительно
|
|
190
847
|
*/
|
|
191
848
|
isProlongationBetweenDates(): boolean;
|
|
192
849
|
/**
|
|
@@ -197,11 +854,18 @@ declare class User {
|
|
|
197
854
|
* @returns клонированный объект
|
|
198
855
|
*/
|
|
199
856
|
private static deepClone;
|
|
857
|
+
/**
|
|
858
|
+
* Гость — сущность с умолчаниями всех полей и признаком `isDefaultUser()`.
|
|
859
|
+
*
|
|
860
|
+
* @returns Новая сущность на каждый вызов: умолчания общие на процесс, копия своя.
|
|
861
|
+
*/
|
|
200
862
|
static createDefault(): User;
|
|
201
863
|
/**
|
|
202
864
|
* Форма посетителя по умолчанию ДАННЫМИ — гость со всеми полями: тому, кто отдаёт `UserDTO`
|
|
203
865
|
* наружу (хост — приложениям), нужна полная форма, а не сущность с методами. Своя копия на
|
|
204
866
|
* вызов: умолчания общие на процесс, и правка чужой копии их не тронет.
|
|
867
|
+
*
|
|
868
|
+
* @returns Новая копия умолчаний на каждый вызов
|
|
205
869
|
*/
|
|
206
870
|
static defaultDto(): UserDTO;
|
|
207
871
|
/**
|
|
@@ -211,6 +875,13 @@ declare class User {
|
|
|
211
875
|
* @returns санитизированная строка
|
|
212
876
|
*/
|
|
213
877
|
private static sanitizeString;
|
|
878
|
+
/**
|
|
879
|
+
* Сущность из профиля бэкенда (`UserDTO` в camelCase): строковые поля чистятся от null-байтов
|
|
880
|
+
* и пробелов по краям, остальное берётся как есть.
|
|
881
|
+
*
|
|
882
|
+
* @param input - Профиль в форме `UserDTO`
|
|
883
|
+
* @returns Сущность над копией профиля: исходный объект не трогается
|
|
884
|
+
*/
|
|
214
885
|
static fromApi(input: unknown): User;
|
|
215
886
|
/**
|
|
216
887
|
* Санитизирует данные пользователя
|
|
@@ -219,30 +890,48 @@ declare class User {
|
|
|
219
890
|
* @returns санитизированные данные
|
|
220
891
|
*/
|
|
221
892
|
private static sanitizeUserData;
|
|
893
|
+
/**
|
|
894
|
+
* Сущность собрана из умолчаний (`createDefault`), а не из профиля бэкенда.
|
|
895
|
+
*
|
|
896
|
+
* @returns `true` у гостя по умолчанию
|
|
897
|
+
*/
|
|
222
898
|
isDefaultUser(): boolean;
|
|
899
|
+
/**
|
|
900
|
+
* Посетитель вошёл — у него есть идентификатор на бэкенде.
|
|
901
|
+
*
|
|
902
|
+
* @returns `true`, если `id` задан и положителен
|
|
903
|
+
*/
|
|
223
904
|
isLoggedIn(): boolean;
|
|
224
905
|
private static getGradeString;
|
|
225
906
|
/**
|
|
226
|
-
*
|
|
907
|
+
* Роль либо класс словом — для подписи в интерфейсе.
|
|
227
908
|
*
|
|
228
|
-
* @returns
|
|
909
|
+
* @returns «Дошкольник» для нулевого класса, «Выпускник» без класса, иначе класс («5 класс»)
|
|
229
910
|
*/
|
|
230
911
|
getPupilRole(): UserRole;
|
|
231
912
|
/**
|
|
232
|
-
*
|
|
233
|
-
*
|
|
913
|
+
* Роль словом — по флагам профиля, первый совпавший: репетитор, учитель, родитель.
|
|
914
|
+
*
|
|
915
|
+
* @returns «Репетитор», «Учитель», «Родитель», иначе роль ученика из `getPupilRole()`
|
|
234
916
|
*/
|
|
235
917
|
getRole: () => UserRole;
|
|
236
918
|
/**
|
|
237
|
-
*
|
|
238
|
-
*
|
|
239
|
-
* @
|
|
919
|
+
* Фамилия с инициалами имени и отчества — подпись в списках.
|
|
920
|
+
*
|
|
921
|
+
* @returns Строка вида «Пупкин В. И.»; без отчества — «Пупкин В.»
|
|
240
922
|
*/
|
|
241
923
|
getInitials: () => string;
|
|
924
|
+
/**
|
|
925
|
+
* Профиль строкой JSON — для печати в документ и передачи по сети.
|
|
926
|
+
*
|
|
927
|
+
* @returns JSON полей сущности
|
|
928
|
+
*/
|
|
242
929
|
toJson(): string;
|
|
243
930
|
/**
|
|
244
931
|
* Посетитель данными — то, что едет по сети и в состояние: сущность с методами не
|
|
245
932
|
* сериализуется. Своя копия на вызов: сущность неизменяема, и правка копии её не тронет.
|
|
933
|
+
*
|
|
934
|
+
* @returns Копия полей сущности данными
|
|
246
935
|
*/
|
|
247
936
|
toDto(): UserDTO;
|
|
248
937
|
}
|
|
@@ -338,183 +1027,6 @@ declare class AppOptionsService {
|
|
|
338
1027
|
getAppOptions(): Promise<AppOptions>;
|
|
339
1028
|
}
|
|
340
1029
|
|
|
341
|
-
interface FoxfordAntibotConfig {
|
|
342
|
-
antibotFrameSrc?: string;
|
|
343
|
-
antibotOnload?: (e: Event) => void;
|
|
344
|
-
antibotOnerror?: () => void;
|
|
345
|
-
debug?: boolean;
|
|
346
|
-
}
|
|
347
|
-
declare class FoxfordAntibot {
|
|
348
|
-
private config;
|
|
349
|
-
static FOXFORD_ANTIBOT_URL: string;
|
|
350
|
-
static DEFAULT_CONFIG: {
|
|
351
|
-
antibotFrameSrc: string;
|
|
352
|
-
};
|
|
353
|
-
static FRAME_CLASSNAME: string;
|
|
354
|
-
constructor(config?: FoxfordAntibotConfig);
|
|
355
|
-
private static antibotIsInitialized;
|
|
356
|
-
private static createFrame;
|
|
357
|
-
createAntibotFrame: (params: {
|
|
358
|
-
src: string;
|
|
359
|
-
onload?: (_e: Event) => void;
|
|
360
|
-
onerror?: () => void;
|
|
361
|
-
}) => void;
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
type Widget = {
|
|
365
|
-
name: 'menu' | 'reviews' | 'featuredCoaches' | 'coachEnrollment' | 'shortForm' | 'userTypePrompt' | 'teachersSlider' | 'externshipFormats';
|
|
366
|
-
options: Record<string, any>;
|
|
367
|
-
container?: HTMLElement;
|
|
368
|
-
};
|
|
369
|
-
type WidgetsInitConfig = {
|
|
370
|
-
version?: 'latest' | string;
|
|
371
|
-
locale?: 'ru';
|
|
372
|
-
};
|
|
373
|
-
interface WidgetsConfig extends WidgetsInitConfig {
|
|
374
|
-
analyticContext?: {
|
|
375
|
-
prefix: string;
|
|
376
|
-
module: string;
|
|
377
|
-
payload?: Record<any, any>;
|
|
378
|
-
};
|
|
379
|
-
rootColors?: boolean;
|
|
380
|
-
loadFonts?: boolean;
|
|
381
|
-
widgets: Array<Widget>;
|
|
382
|
-
}
|
|
383
|
-
declare class Widgets {
|
|
384
|
-
private config;
|
|
385
|
-
private api;
|
|
386
|
-
private manifest;
|
|
387
|
-
static ENTRY: string[];
|
|
388
|
-
static DEFAULT_CONFIG: WidgetsInitConfig;
|
|
389
|
-
constructor(config: WidgetsInitConfig | undefined, apiInstance: ApiInstance);
|
|
390
|
-
create(config: WidgetsConfig): Promise<void>;
|
|
391
|
-
update(name: string, config: Widget): Promise<void>;
|
|
392
|
-
private loadManifest;
|
|
393
|
-
static appendScript(src: string): Promise<unknown>;
|
|
394
|
-
private loadAssets;
|
|
395
|
-
}
|
|
396
|
-
|
|
397
|
-
type ProductTypeItem = {
|
|
398
|
-
type: string;
|
|
399
|
-
id: number;
|
|
400
|
-
description: string;
|
|
401
|
-
title: string;
|
|
402
|
-
discipline: {
|
|
403
|
-
id: number;
|
|
404
|
-
name: string;
|
|
405
|
-
};
|
|
406
|
-
teacher: {
|
|
407
|
-
id: number;
|
|
408
|
-
long_name: string;
|
|
409
|
-
description: string;
|
|
410
|
-
experience: number;
|
|
411
|
-
photo_url: string;
|
|
412
|
-
photo_large_url: string;
|
|
413
|
-
};
|
|
414
|
-
levels: Array<{
|
|
415
|
-
id: number;
|
|
416
|
-
name: string;
|
|
417
|
-
}>;
|
|
418
|
-
};
|
|
419
|
-
type ProductPack = {
|
|
420
|
-
name: string;
|
|
421
|
-
description: string;
|
|
422
|
-
meta_title: string;
|
|
423
|
-
meta_description: string;
|
|
424
|
-
published: true;
|
|
425
|
-
content_description: string;
|
|
426
|
-
disciplines_scope: string;
|
|
427
|
-
guaranteed_admission: true;
|
|
428
|
-
grade_names: string;
|
|
429
|
-
is_purchased: false;
|
|
430
|
-
learning_flow: {
|
|
431
|
-
title: string;
|
|
432
|
-
steps: Array<{
|
|
433
|
-
header: string;
|
|
434
|
-
description: string;
|
|
435
|
-
}>;
|
|
436
|
-
};
|
|
437
|
-
offers: {
|
|
438
|
-
intro: string;
|
|
439
|
-
items: Array<{
|
|
440
|
-
title: string;
|
|
441
|
-
description: string;
|
|
442
|
-
}>;
|
|
443
|
-
};
|
|
444
|
-
price_block: {
|
|
445
|
-
price: number;
|
|
446
|
-
initial_price: number;
|
|
447
|
-
title: string;
|
|
448
|
-
description: string;
|
|
449
|
-
points: Array<string>;
|
|
450
|
-
price_per_month: number;
|
|
451
|
-
initial_price_per_month: number;
|
|
452
|
-
};
|
|
453
|
-
product_pack_items: Array<ProductTypeItem>;
|
|
454
|
-
faq_items: Array<{
|
|
455
|
-
question: string;
|
|
456
|
-
answer: string;
|
|
457
|
-
}>;
|
|
458
|
-
landing_image_urls: Array<string>;
|
|
459
|
-
};
|
|
460
|
-
interface CartItemDTO {
|
|
461
|
-
cart_item_type: CartItemResourceType;
|
|
462
|
-
resource_id: number;
|
|
463
|
-
}
|
|
464
|
-
type FoxfordConfig = {
|
|
465
|
-
host?: string;
|
|
466
|
-
/** @deprecated */
|
|
467
|
-
widgetsVersion?: 'latest' | string;
|
|
468
|
-
antibot?: boolean;
|
|
469
|
-
antibotConfig?: FoxfordAntibotConfig;
|
|
470
|
-
api?: ApiConfig;
|
|
471
|
-
captchaConfig?: () => CaptchaConfig;
|
|
472
|
-
/** @deprecated Не используйте инициализацию виджетов через SDK */
|
|
473
|
-
widgetsConfig?: WidgetsInitConfig;
|
|
474
|
-
};
|
|
475
|
-
type Reasons = 'additional_education_free_period_started' | 'announcement_clicked' | 'catalog_filtered' | 'coach_intro_lesson_scheduled' | 'coach_landing_visited' | 'course_conspect_visited' | 'course_landing_visited' | 'event_scheduled' | 'event_visited' | 'exam_rehearsal_page_visited' | 'exam_rehearsal_passed' | 'externship_contract_draft_created' | 'externship_demo_access' | 'externship_iep_selected' | 'externship_intendance_expressed' | 'interactive_training_course_visited' | 'externship_landing_visited' | 'externship_lead_request' | 'mini_group_landing_visited' | 'olympiad_page_visited' | 'onboarding' | 'onboarding_finished' | 'product_pack_landing_visited' | 'promos_coach_recommendation_clicked' | 'promos_course_recommendation_clicked' | 'promos_results_filtered' | 'subscription_landing_visited' | 'teacher_course_visited' | 'training_page_visited' | 'training_passed' | 'wiki_visited' | 'project_landing_cta_clicked';
|
|
476
|
-
type ProductFormats = 'coach_course' | 'course' | 'event' | 'exam_rehearsal' | 'externship' | 'game' | 'interactive_trainings' | 'mini_group' | 'olympiad' | 'product_pack' | 'teacher_course' | 'trainings';
|
|
477
|
-
type UserInterests = {
|
|
478
|
-
businessUnitAbbrs?: BusinessUnitAbbreviation[] | null;
|
|
479
|
-
disciplineId?: number | number[] | null;
|
|
480
|
-
gradeId?: number | number[] | null;
|
|
481
|
-
levelId?: number | number[] | null;
|
|
482
|
-
productId?: number | null;
|
|
483
|
-
productFormat?: ProductFormats | null;
|
|
484
|
-
reason?: Reasons | null;
|
|
485
|
-
};
|
|
486
|
-
interface CommunicationSubscriptions {
|
|
487
|
-
subscriptionNews?: boolean;
|
|
488
|
-
subscriptionMaterials?: boolean;
|
|
489
|
-
subscriptionEvents?: boolean;
|
|
490
|
-
subscriptionPromos?: boolean;
|
|
491
|
-
subscriptionReminders?: boolean;
|
|
492
|
-
subscriptionMedia?: boolean;
|
|
493
|
-
subscriptionExternship?: boolean;
|
|
494
|
-
subscriptionExternal?: boolean;
|
|
495
|
-
}
|
|
496
|
-
interface LoginByPhoneParams {
|
|
497
|
-
onEmailRequest: (phoneCheckResponse: {
|
|
498
|
-
email?: string;
|
|
499
|
-
fakeEmail?: boolean;
|
|
500
|
-
state: 'new' | 'confirmed' | 'not_confirmed';
|
|
501
|
-
}) => Promise<string>;
|
|
502
|
-
onCodeRequest: () => Promise<string>;
|
|
503
|
-
onNameRequest: () => Promise<{
|
|
504
|
-
first_name: string;
|
|
505
|
-
last_name: string;
|
|
506
|
-
}>;
|
|
507
|
-
onConfirmationCodeResponse: (confirmationCodeResponse: {
|
|
508
|
-
nextDeliveryAt: string;
|
|
509
|
-
}) => void;
|
|
510
|
-
onConfirmationCodeError: (error: Error) => void;
|
|
511
|
-
}
|
|
512
|
-
interface LoginOrRegistrationResponse {
|
|
513
|
-
redirectUrl?: string;
|
|
514
|
-
registered?: boolean;
|
|
515
|
-
type?: string;
|
|
516
|
-
}
|
|
517
|
-
|
|
518
1030
|
declare class CartService {
|
|
519
1031
|
private api;
|
|
520
1032
|
constructor(apiInstance: ApiInstance);
|