@foxford/sdk 8.0.1 → 8.1.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/index.js.flow CHANGED
@@ -43,10 +43,256 @@ declare export {
43
43
  ResponseSuccessPluginInterface,
44
44
  } from "@foxford/services";
45
45
  import {
46
- type CartItemResourceType,
47
46
  type BusinessUnitAbbreviation,
47
+ type CartItemResourceType,
48
48
  type Course,
49
49
  } from "@foxford/types";
50
+ declare interface FoxfordAntibotConfig {
51
+ antibotFrameSrc?: string;
52
+ antibotOnload?: (e: Event) => void;
53
+ antibotOnerror?: () => void;
54
+ debug?: boolean;
55
+ }
56
+ declare class FoxfordAntibot {
57
+ static FOXFORD_ANTIBOT_URL: string;
58
+ static DEFAULT_CONFIG: {
59
+ antibotFrameSrc: string,
60
+ ...
61
+ };
62
+ static FRAME_CLASSNAME: string;
63
+ constructor(config?: FoxfordAntibotConfig): this;
64
+ createAntibotFrame: (params: {
65
+ src: string,
66
+ onload?: (_e: Event) => void,
67
+ onerror?: () => void,
68
+ ...
69
+ }) => void;
70
+ }
71
+ declare type Widget = {
72
+ name:
73
+ | "menu"
74
+ | "reviews"
75
+ | "featuredCoaches"
76
+ | "coachEnrollment"
77
+ | "shortForm"
78
+ | "userTypePrompt"
79
+ | "teachersSlider"
80
+ | "externshipFormats",
81
+ options: { [key: string]: any, ... },
82
+ container?: HTMLElement,
83
+ ...
84
+ };
85
+ declare type WidgetsInitConfig = {
86
+ version?: "latest" | string,
87
+ locale?: "ru",
88
+ ...
89
+ };
90
+ declare type WidgetsConfig = {
91
+ analyticContext?: {
92
+ prefix: string,
93
+ module: string,
94
+ payload?: { [key: any]: any, ... },
95
+ ...
96
+ },
97
+ rootColors?: boolean,
98
+ loadFonts?: boolean,
99
+ widgets: Array<Widget>,
100
+ ...
101
+ } & WidgetsInitConfig;
102
+ declare class Widgets {
103
+ static ENTRY: string[];
104
+ static DEFAULT_CONFIG: WidgetsInitConfig;
105
+ constructor(config: WidgetsInitConfig | void, apiInstance: ApiInstance): this;
106
+ create(config: WidgetsConfig): Promise<void>;
107
+ update(name: string, config: Widget): Promise<void>;
108
+ static appendScript(src: string): Promise<mixed>;
109
+ }
110
+ declare type ProductTypeItem = {
111
+ type: string,
112
+ id: number,
113
+ description: string,
114
+ title: string,
115
+ discipline: {
116
+ id: number,
117
+ name: string,
118
+ ...
119
+ },
120
+ teacher: {
121
+ id: number,
122
+ long_name: string,
123
+ description: string,
124
+ experience: number,
125
+ photo_url: string,
126
+ photo_large_url: string,
127
+ ...
128
+ },
129
+ levels: Array<{
130
+ id: number,
131
+ name: string,
132
+ ...
133
+ }>,
134
+ ...
135
+ };
136
+ declare type ProductPack = {
137
+ name: string,
138
+ description: string,
139
+ meta_title: string,
140
+ meta_description: string,
141
+ published: true,
142
+ content_description: string,
143
+ disciplines_scope: string,
144
+ guaranteed_admission: true,
145
+ grade_names: string,
146
+ is_purchased: false,
147
+ learning_flow: {
148
+ title: string,
149
+ steps: Array<{
150
+ header: string,
151
+ description: string,
152
+ ...
153
+ }>,
154
+ ...
155
+ },
156
+ offers: {
157
+ intro: string,
158
+ items: Array<{
159
+ title: string,
160
+ description: string,
161
+ ...
162
+ }>,
163
+ ...
164
+ },
165
+ price_block: {
166
+ price: number,
167
+ initial_price: number,
168
+ title: string,
169
+ description: string,
170
+ points: Array<string>,
171
+ price_per_month: number,
172
+ initial_price_per_month: number,
173
+ ...
174
+ },
175
+ product_pack_items: Array<ProductTypeItem>,
176
+ faq_items: Array<{
177
+ question: string,
178
+ answer: string,
179
+ ...
180
+ }>,
181
+ landing_image_urls: Array<string>,
182
+ ...
183
+ };
184
+ declare interface CartItemDTO {
185
+ cart_item_type: CartItemResourceType;
186
+ resource_id: number;
187
+ }
188
+ declare type FoxfordConfig = {
189
+ host?: string,
190
+
191
+ /**
192
+ * @deprecated
193
+ */
194
+ widgetsVersion?: "latest" | string,
195
+ antibot?: boolean,
196
+ antibotConfig?: FoxfordAntibotConfig,
197
+ api?: ApiConfig,
198
+ captchaConfig?: () => CaptchaConfig,
199
+
200
+ /**
201
+ * @deprecated Не используйте инициализацию виджетов через SDK
202
+ */
203
+ widgetsConfig?: WidgetsInitConfig,
204
+ ...
205
+ };
206
+ declare type Reasons =
207
+ | "additional_education_free_period_started"
208
+ | "announcement_clicked"
209
+ | "catalog_filtered"
210
+ | "coach_intro_lesson_scheduled"
211
+ | "coach_landing_visited"
212
+ | "course_conspect_visited"
213
+ | "course_landing_visited"
214
+ | "event_scheduled"
215
+ | "event_visited"
216
+ | "exam_rehearsal_page_visited"
217
+ | "exam_rehearsal_passed"
218
+ | "externship_contract_draft_created"
219
+ | "externship_demo_access"
220
+ | "externship_iep_selected"
221
+ | "externship_intendance_expressed"
222
+ | "interactive_training_course_visited"
223
+ | "externship_landing_visited"
224
+ | "externship_lead_request"
225
+ | "mini_group_landing_visited"
226
+ | "olympiad_page_visited"
227
+ | "onboarding"
228
+ | "onboarding_finished"
229
+ | "product_pack_landing_visited"
230
+ | "promos_coach_recommendation_clicked"
231
+ | "promos_course_recommendation_clicked"
232
+ | "promos_results_filtered"
233
+ | "subscription_landing_visited"
234
+ | "teacher_course_visited"
235
+ | "training_page_visited"
236
+ | "training_passed"
237
+ | "wiki_visited"
238
+ | "project_landing_cta_clicked";
239
+ declare type ProductFormats =
240
+ | "coach_course"
241
+ | "course"
242
+ | "event"
243
+ | "exam_rehearsal"
244
+ | "externship"
245
+ | "game"
246
+ | "interactive_trainings"
247
+ | "mini_group"
248
+ | "olympiad"
249
+ | "product_pack"
250
+ | "teacher_course"
251
+ | "trainings";
252
+ declare type UserInterests = {
253
+ businessUnitAbbrs?: BusinessUnitAbbreviation[] | null,
254
+ disciplineId?: number | number[] | null,
255
+ gradeId?: number | number[] | null,
256
+ levelId?: number | number[] | null,
257
+ productId?: number | null,
258
+ productFormat?: ProductFormats | null,
259
+ reason?: Reasons | null,
260
+ ...
261
+ };
262
+ declare interface CommunicationSubscriptions {
263
+ subscriptionNews?: boolean;
264
+ subscriptionMaterials?: boolean;
265
+ subscriptionEvents?: boolean;
266
+ subscriptionPromos?: boolean;
267
+ subscriptionReminders?: boolean;
268
+ subscriptionMedia?: boolean;
269
+ subscriptionExternship?: boolean;
270
+ subscriptionExternal?: boolean;
271
+ }
272
+ declare interface LoginByPhoneParams {
273
+ onEmailRequest: (phoneCheckResponse: {
274
+ email?: string,
275
+ fakeEmail?: boolean,
276
+ state: "new" | "confirmed" | "not_confirmed",
277
+ ...
278
+ }) => Promise<string>;
279
+ onCodeRequest: () => Promise<string>;
280
+ onNameRequest: () => Promise<{
281
+ first_name: string,
282
+ last_name: string,
283
+ ...
284
+ }>;
285
+ onConfirmationCodeResponse: (confirmationCodeResponse: {
286
+ nextDeliveryAt: string,
287
+ ...
288
+ }) => void;
289
+ onConfirmationCodeError: (error: Error) => void;
290
+ }
291
+ declare interface LoginOrRegistrationResponse {
292
+ redirectUrl?: string;
293
+ registered?: boolean;
294
+ type?: string;
295
+ }
50
296
  declare type PupilRole =
51
297
  | "11 класс"
52
298
  | "10 класс"
@@ -67,6 +313,21 @@ declare type UserRole =
67
313
  | "Выпускник"
68
314
  | "Дошкольник"
69
315
  | PupilRole;
316
+ declare type LeaderboardAccessState =
317
+ | "unavailable"
318
+ | "available"
319
+ | "vacation"
320
+ | "disabled";
321
+ declare type LeaderboardReadinessState =
322
+ | "changeable_course_selection"
323
+ | "ready"
324
+ | "unready"
325
+ | "waiting_course_selection";
326
+ declare type LearningGoalsAccessState =
327
+ | "enabled"
328
+ | "disabled"
329
+ | "optional"
330
+ | "required";
70
331
  declare interface UserDTO {
71
332
  id: null | number;
72
333
  email: string;
@@ -194,138 +455,677 @@ declare interface UserDTO {
194
455
  yearName: string,
195
456
  ...
196
457
  } | null;
197
- }
198
- declare class User {
199
- constructor(): this;
200
- id: $PropertyType<UserDTO, "id">;
201
- email: $PropertyType<UserDTO, "email">;
202
- firstName: $PropertyType<UserDTO, "firstName">;
203
- middleName: $PropertyType<UserDTO, "middleName">;
204
- lastName: $PropertyType<UserDTO, "lastName">;
458
+
459
+ /**
460
+ * Текущий интерес посетителя — та же форма, что у `GET /api/user/user_interest`, но из профиля.
461
+ */
462
+ currentInterest: UserInterests | null;
463
+
464
+ /**
465
+ * До какой даты открыт приём в домашнюю школу.
466
+ */
467
+ admissionFinishesOn: null | string;
468
+
469
+ /**
470
+ * Посетитель пришёл из Алгоритмики.
471
+ */
472
+ algoritmika: boolean;
473
+ bonusesPageVisited: boolean;
474
+ canChangeSchoolInfo: boolean;
475
+ externshipDemoAccessActive: boolean;
476
+
477
+ /**
478
+ * Экстернат ждёт оплаты: когда закроется доступ и по какому договору.
479
+ */
480
+ externshipPaymentRequired: {
481
+ accessClosingDate: string,
482
+ contractId: number,
483
+ ...
484
+ } | null;
485
+ externshipPromoHeaderOn: boolean;
486
+ hasExamProgressAccess: boolean;
487
+ hasYearlyRecapAccess: boolean;
488
+ isAttestationSchoolManager: null | boolean;
489
+ isMentor: boolean;
490
+ isXpStreakAvailable: boolean;
491
+ leaderboard: {
492
+ accessState: LeaderboardAccessState,
493
+ readinessState: LeaderboardReadinessState,
494
+ ...
495
+ } | null;
496
+ leaderboardAccessState: LeaderboardAccessState;
497
+ learningGoalsAccessState: LearningGoalsAccessState;
498
+
499
+ /**
500
+ * Мессенджеры, на которые подписан посетитель; `null` — бэкенд не считал.
501
+ */
502
+ messengerSubscriptions: null | string[];
503
+ needToPromoteRenewalWithCoach: boolean;
504
+ nextYearCoursesBannerAvailable: boolean;
505
+ passwordSet: null | boolean;
506
+ referralCode: null | string;
507
+ targetActionsOnboardingAvailable: boolean;
508
+ }
509
+ declare class User {
510
+ constructor(): this;
511
+
512
+ /**
513
+ * Идентификатор посетителя на бэкенде.
514
+ * @returns Число либо `null` у гостя.
515
+ */
516
+ id: $PropertyType<UserDTO, "id">;
517
+
518
+ /**
519
+ * Почта посетителя.
520
+ * @returns Строка; пустая, если почты нет.
521
+ */
522
+ email: $PropertyType<UserDTO, "email">;
523
+
524
+ /**
525
+ * Имя.
526
+ * @returns Строка; пустая, если не заполнено.
527
+ */
528
+ firstName: $PropertyType<UserDTO, "firstName">;
529
+
530
+ /**
531
+ * Отчество.
532
+ * @returns Строка; пустая, если не заполнено.
533
+ */
534
+ middleName: $PropertyType<UserDTO, "middleName">;
535
+
536
+ /**
537
+ * Фамилия.
538
+ * @returns Строка; пустая, если не заполнено.
539
+ */
540
+ lastName: $PropertyType<UserDTO, "lastName">;
541
+
542
+ /**
543
+ * Полное имя, каким его собрал бэкенд.
544
+ * @returns Строка; пустая у гостя.
545
+ */
205
546
  fullName: $PropertyType<UserDTO, "fullName">;
547
+
548
+ /**
549
+ * Короткое имя для обращения в интерфейсе.
550
+ * @returns Строка; пустая у гостя.
551
+ */
206
552
  shortName: $PropertyType<UserDTO, "shortName">;
553
+
554
+ /**
555
+ * Когда заведён профиль.
556
+ * @returns Дата ISO либо `null` у гостя.
557
+ */
207
558
  createdAt: $PropertyType<UserDTO, "createdAt">;
559
+
560
+ /**
561
+ * Часовой пояс посетителя.
562
+ * @returns Имя пояса либо `null`, если не задан.
563
+ */
208
564
  timezone: $PropertyType<UserDTO, "timezone">;
565
+
566
+ /**
567
+ * Локаль интерфейса.
568
+ * @returns Код локали либо `null`, если не задана.
569
+ */
209
570
  locale: $PropertyType<UserDTO, "locale">;
571
+
572
+ /**
573
+ * Класс посетителя: id, порядковый номер, имя и транслит.
574
+ * @returns Объект класса; у гостя поля `null` и пустые строки.
575
+ */
210
576
  grade: $PropertyType<UserDTO, "grade">;
577
+
578
+ /**
579
+ * Телефон посетителя.
580
+ * @returns Строка либо `null`, если не указан.
581
+ */
211
582
  phone: $PropertyType<UserDTO, "phone">;
583
+
584
+ /**
585
+ * Адрес аватара.
586
+ * @returns Строка; пустая, если аватара нет.
587
+ */
212
588
  avatarUrl: $PropertyType<UserDTO, "avatarUrl">;
589
+
590
+ /**
591
+ * Посетитель — родитель.
592
+ * @returns `true`, если роль родительская.
593
+ */
213
594
  isParent: $PropertyType<UserDTO, "isParent">;
595
+
596
+ /**
597
+ * Посетитель — выпускник.
598
+ * @returns `true`, если школу закончил.
599
+ */
214
600
  isGraduated: $PropertyType<UserDTO, "isGraduated">;
601
+
602
+ /**
603
+ * Класс подтверждён посетителем.
604
+ * @returns `true`, если класс проверен.
605
+ */
215
606
  gradeChecked: $PropertyType<UserDTO, "gradeChecked">;
607
+
608
+ /**
609
+ * Тип учётной записи на бэкенде.
610
+ * @returns `pupil`, `agent` либо `null` у гостя.
611
+ */
216
612
  type: $PropertyType<UserDTO, "type">;
613
+
614
+ /**
615
+ * Посетитель — репетитор.
616
+ * @returns `true`, если роль репетитора.
617
+ */
217
618
  isCoach: $PropertyType<UserDTO, "isCoach">;
619
+
620
+ /**
621
+ * Ведёт мини-группы.
622
+ * @returns `true`, если ведёт.
623
+ */
218
624
  isMiniGroupTeacher: $PropertyType<UserDTO, "isMiniGroupTeacher">;
625
+
626
+ /**
627
+ * Репетитор экстерната.
628
+ * @returns `true`, если ведёт экстернат.
629
+ */
219
630
  isExternshipCoach: $PropertyType<UserDTO, "isExternshipCoach">;
631
+
632
+ /**
633
+ * Посетитель — учитель.
634
+ * @returns `true`, если роль учителя.
635
+ */
220
636
  isAgent: $PropertyType<UserDTO, "isAgent">;
637
+
638
+ /**
639
+ * Посетитель — методист.
640
+ * @returns `true`, если методист.
641
+ */
221
642
  methodist: $PropertyType<UserDTO, "methodist">;
643
+
644
+ /**
645
+ * Почтовый адрес: страна, регион, город, улица, дом.
646
+ * @returns Объект адреса либо `null`, если не заполнен.
647
+ */
222
648
  address: $PropertyType<UserDTO, "address">;
649
+
650
+ /**
651
+ * Привязанные соцсети.
652
+ * @returns Список провайдеров с идентификаторами; пустой, если привязок нет.
653
+ */
223
654
  socialNets: $PropertyType<UserDTO, "socialNets">;
655
+
656
+ /**
657
+ * Логин в Skype.
658
+ * @returns Строка либо `null`.
659
+ */
224
660
  skype: $PropertyType<UserDTO, "skype">;
661
+
662
+ /**
663
+ * Настройки интерфейса: показанные подсказки и скрытые баннеры.
664
+ * @returns Объект флагов либо `undefined`, если бэкенд их не прислал.
665
+ */
225
666
  settings: $PropertyType<UserDTO, "settings">;
667
+
668
+ /**
669
+ * Бонусный счёт: подарочные и реальные бонусы.
670
+ * @returns Объект с суммами.
671
+ */
226
672
  bonus: $PropertyType<UserDTO, "bonus">;
673
+
674
+ /**
675
+ * Сумма бонусов на счёте.
676
+ * @returns Число.
677
+ */
227
678
  bonusAmount: $PropertyType<UserDTO, "bonusAmount">;
679
+
680
+ /**
681
+ * Есть действующие покупки.
682
+ * @returns `true`, если есть.
683
+ */
228
684
  hasActivePurchases: $PropertyType<UserDTO, "hasActivePurchases">;
685
+
686
+ /**
687
+ * Остались попытки пробных экзаменов.
688
+ * @returns `true`, если остались.
689
+ */
229
690
  hasAttemptsSolveExamRehearsals: $PropertyType<
230
691
  UserDTO,
231
692
  "hasAttemptsSolveExamRehearsals"
232
693
  >;
694
+
695
+ /**
696
+ * Есть закладки.
697
+ * @returns `true`, если есть.
698
+ */
233
699
  hasBookmarks: $PropertyType<UserDTO, "hasBookmarks">;
700
+
701
+ /**
702
+ * Метки посетителя на бэкенде.
703
+ * @returns Список строк либо `null`.
704
+ */
234
705
  tags: $PropertyType<UserDTO, "tags">;
706
+
707
+ /**
708
+ * Шаблон корзины.
709
+ * @returns Число либо `null`.
710
+ */
235
711
  cartTemplateId: $PropertyType<UserDTO, "cartTemplateId">;
712
+
713
+ /**
714
+ * Сколько позиций в корзине.
715
+ * @returns Число.
716
+ */
236
717
  cartItemsCount: $PropertyType<UserDTO, "cartItemsCount">;
718
+
719
+ /**
720
+ * Онбординг пройден.
721
+ * @returns `true`, если пройден.
722
+ */
237
723
  onboardingFinished: $PropertyType<UserDTO, "onboardingFinished">;
724
+
725
+ /**
726
+ * Когда пройден онбординг.
727
+ * @returns Дата ISO либо `null`, пока не пройден.
728
+ */
238
729
  onboardingFinishedAt: $PropertyType<UserDTO, "onboardingFinishedAt">;
730
+
731
+ /**
732
+ * Почта подтверждена.
733
+ * @returns `true`, если подтверждена.
734
+ */
239
735
  emailConfirmed: $PropertyType<UserDTO, "emailConfirmed">;
736
+
737
+ /**
738
+ * Телефон подтверждён.
739
+ * @returns `true`, если подтверждён.
740
+ */
240
741
  phoneConfirmed: $PropertyType<UserDTO, "phoneConfirmed">;
742
+
743
+ /**
744
+ * Почта выдумана бэкендом при регистрации без почты.
745
+ * @returns `true`, если почта ненастоящая.
746
+ */
241
747
  fakeEmail: $PropertyType<UserDTO, "fakeEmail">;
748
+
749
+ /**
750
+ * Посетитель заведён бэкендом без его участия (например, по заявке).
751
+ * @returns `true`, если учётная запись ненастоящая.
752
+ */
242
753
  fakeUser: $PropertyType<UserDTO, "fakeUser">;
754
+
755
+ /**
756
+ * Профиль дополнен данными после регистрации.
757
+ * @returns `true`, если дополнен.
758
+ */
243
759
  profileEnriched: $PropertyType<UserDTO, "profileEnriched">;
760
+
761
+ /**
762
+ * Идентификатор итогов года.
763
+ * @returns Строка либо `null`, если итогов нет.
764
+ */
244
765
  recapUuid: $PropertyType<UserDTO, "recapUuid">;
766
+
767
+ /**
768
+ * Дисциплины, которые изучает посетитель.
769
+ * @returns Список id; пустой, если не выбраны.
770
+ */
245
771
  disciplineIds: $PropertyType<UserDTO, "disciplineIds">;
772
+
773
+ /**
774
+ * Настройки приватности.
775
+ * @returns Объект с флагом публичного профиля.
776
+ */
246
777
  privacy: $PropertyType<UserDTO, "privacy">;
778
+
779
+ /**
780
+ * Телефон родителя.
781
+ * @returns Строка либо `null`.
782
+ */
247
783
  parentPhone: $PropertyType<UserDTO, "parentPhone">;
784
+
785
+ /**
786
+ * Телефон родителя подтверждён.
787
+ * @returns `true`, если подтверждён.
788
+ */
248
789
  parentPhoneConfirmed: $PropertyType<UserDTO, "parentPhoneConfirmed">;
790
+
791
+ /**
792
+ * Посетитель что-то покупал.
793
+ * @returns `true`, `false` либо `null`, если бэкенд не считал.
794
+ */
249
795
  isCustomer: $PropertyType<UserDTO, "isCustomer">;
796
+
797
+ /**
798
+ * Доступны многодневные серии занятий.
799
+ * @returns `true`, если доступны.
800
+ */
250
801
  hasAccessToMultiDaysStreaks: $PropertyType<
251
802
  UserDTO,
252
803
  "hasAccessToMultiDaysStreaks"
253
804
  >;
805
+
806
+ /**
807
+ * Ученик начальной школы.
808
+ * @returns `true`, если начальная школа.
809
+ */
254
810
  isElementaryPupil: $PropertyType<UserDTO, "isElementaryPupil">;
811
+
812
+ /**
813
+ * Токен для канала уведомлений по WebSocket.
814
+ * @returns Строка либо `null`, если канала нет.
815
+ */
255
816
  webSocketNotificationsJwt: $PropertyType<
256
817
  UserDTO,
257
818
  "webSocketNotificationsJwt"
258
819
  >;
820
+
821
+ /**
822
+ * Доступны аттестационные листы.
823
+ * @returns `true`, если доступны.
824
+ */
259
825
  hasAccessToAttestationSheets: $PropertyType<
260
826
  UserDTO,
261
827
  "hasAccessToAttestationSheets"
262
828
  >;
829
+
830
+ /**
831
+ * Посетитель учится в экстернате.
832
+ * @returns `true`, если экстернат.
833
+ */
263
834
  externshipUser: $PropertyType<UserDTO, "externshipUser">;
835
+
836
+ /**
837
+ * Есть оплаченные договоры экстерната.
838
+ * @returns `true`, если есть.
839
+ */
264
840
  hasPurchasedExternshipContracts: $PropertyType<
265
841
  UserDTO,
266
842
  "hasPurchasedExternshipContracts"
267
843
  >;
844
+
845
+ /**
846
+ * Доступна аттестация экстерната.
847
+ * @returns `true`, если доступна.
848
+ */
268
849
  hasExternshipAttestationAccess: $PropertyType<
269
850
  UserDTO,
270
851
  "hasExternshipAttestationAccess"
271
852
  >;
853
+
854
+ /**
855
+ * Профиль в разделе социализации.
856
+ * @returns Объект с id и состоянием либо `null`, если профиля нет.
857
+ */
272
858
  socializationProfile: $PropertyType<UserDTO, "socializationProfile">;
859
+
860
+ /**
861
+ * Когда заканчивается бесплатный доступ.
862
+ * @returns Дата ISO либо `null`, если доступа нет.
863
+ */
273
864
  freeAccessFinishesAt: $PropertyType<UserDTO, "freeAccessFinishesAt">;
865
+
866
+ /**
867
+ * В комнате начальной школы есть непросмотренные новинки.
868
+ * @returns `true`, если есть; `undefined`, если бэкенд не прислал.
869
+ */
274
870
  hasUnseenRoomFeatures: $PropertyType<UserDTO, "hasUnseenRoomFeatures">;
871
+
872
+ /**
873
+ * Покупал договоры экстерната.
874
+ * @returns `true`, если покупал.
875
+ */
275
876
  purchaseAnyExternshipContracts: $PropertyType<
276
877
  UserDTO,
277
878
  "purchaseAnyExternshipContracts"
278
879
  >;
880
+
881
+ /**
882
+ * Связан с экстернатом: ученик, родитель либо репетитор.
883
+ * @returns `true`, если связан; `undefined`, если бэкенд не прислал.
884
+ */
279
885
  hasExternshipRelation: $PropertyType<UserDTO, "hasExternshipRelation">;
886
+
887
+ /**
888
+ * Есть действующий договор экстерната.
889
+ * @returns `true`, если есть; `undefined`, если бэкенд не прислал.
890
+ */
280
891
  hasExternshipActiveContract: $PropertyType<
281
892
  UserDTO,
282
893
  "hasExternshipActiveContract"
283
894
  >;
895
+
896
+ /**
897
+ * Можно продлить договор домашней школы.
898
+ * @returns `true`, если можно; `undefined`, если бэкенд не прислал.
899
+ */
284
900
  canProlongateContract: $PropertyType<UserDTO, "canProlongateContract">;
901
+
902
+ /**
903
+ * Окно пролонгации договора: даты, скидка, заголовок следующего года.
904
+ * @returns Объект окна, `null` либо `undefined`, если окна нет.
905
+ */
285
906
  prolongation: $PropertyType<UserDTO, "prolongation">;
286
907
 
908
+ /**
909
+ * Текущий интерес посетителя: класс, дисциплина, уровень, формат и причина. Та же форма, что у `GET /api/user/user_interest`, но из профиля, без похода.
910
+ * @returns Объект интереса либо `null`, если бэкенд не считал.
911
+ */
912
+ currentInterest: $PropertyType<UserDTO, "currentInterest">;
913
+
914
+ /**
915
+ * До какой даты открыт приём в домашнюю школу.
916
+ * @returns Дата либо `null`, если приём не идёт.
917
+ */
918
+ admissionFinishesOn: $PropertyType<UserDTO, "admissionFinishesOn">;
919
+
920
+ /**
921
+ * Посетитель пришёл из Алгоритмики — партнёрский вход с другой площадки.
922
+ * @returns `true`, если из Алгоритмики.
923
+ */
924
+ algoritmika: $PropertyType<UserDTO, "algoritmika">;
925
+
926
+ /**
927
+ * Страница бонусов уже открывалась — подсказки на ней больше не показываются.
928
+ * @returns `true`, если открывалась.
929
+ */
930
+ bonusesPageVisited: $PropertyType<UserDTO, "bonusesPageVisited">;
931
+
932
+ /**
933
+ * Посетителю разрешено менять школу и класс в профиле.
934
+ * @returns `true`, если разрешено.
935
+ */
936
+ canChangeSchoolInfo: $PropertyType<UserDTO, "canChangeSchoolInfo">;
937
+
938
+ /**
939
+ * Идёт демо-доступ к экстернату.
940
+ * @returns `true`, пока демо активно.
941
+ */
942
+ externshipDemoAccessActive: $PropertyType<
943
+ UserDTO,
944
+ "externshipDemoAccessActive"
945
+ >;
946
+
947
+ /**
948
+ * Экстернат ждёт оплаты: когда закроется доступ и по какому договору.
949
+ * @returns Объект с датой и id договора либо `null`, если долга нет.
950
+ */
951
+ externshipPaymentRequired: $PropertyType<
952
+ UserDTO,
953
+ "externshipPaymentRequired"
954
+ >;
955
+
956
+ /**
957
+ * Показывать промо-шапку экстерната.
958
+ * @returns `true`, если показывать.
959
+ */
960
+ externshipPromoHeaderOn: $PropertyType<UserDTO, "externshipPromoHeaderOn">;
961
+
962
+ /**
963
+ * Доступен раздел прогресса подготовки к экзаменам.
964
+ * @returns `true`, если доступен.
965
+ */
966
+ hasExamProgressAccess: $PropertyType<UserDTO, "hasExamProgressAccess">;
967
+
968
+ /**
969
+ * Доступны итоги года; их адрес — `recapUuid`.
970
+ * @returns `true`, если доступны.
971
+ */
972
+ hasYearlyRecapAccess: $PropertyType<UserDTO, "hasYearlyRecapAccess">;
973
+
974
+ /**
975
+ * Управляет аттестационной школой.
976
+ * @returns `true`, `false` либо `null`, если бэкенд не считал.
977
+ */
978
+ isAttestationSchoolManager: $PropertyType<
979
+ UserDTO,
980
+ "isAttestationSchoolManager"
981
+ >;
982
+
983
+ /**
984
+ * Посетитель — наставник.
985
+ * @returns `true`, если наставник.
986
+ */
987
+ isMentor: $PropertyType<UserDTO, "isMentor">;
988
+
989
+ /**
990
+ * Доступна серия ежедневных занятий с опытом (XP-стрик).
991
+ * @returns `true`, если доступна.
992
+ */
993
+ isXpStreakAvailable: $PropertyType<UserDTO, "isXpStreakAvailable">;
994
+
995
+ /**
996
+ * Таблица лидеров: доступна ли посетителю и готов ли он к ней (выбор курса).
997
+ * @returns Объект состояний либо `null`, если посетитель вне программы.
998
+ */
999
+ leaderboard: $PropertyType<UserDTO, "leaderboard">;
1000
+
1001
+ /**
1002
+ * Состояние доступа к таблице лидеров.
1003
+ * @returns `unavailable`, `available`, `vacation` либо `disabled`.
1004
+ */
1005
+ leaderboardAccessState: $PropertyType<UserDTO, "leaderboardAccessState">;
1006
+
1007
+ /**
1008
+ * Как устроены учебные цели у посетителя.
1009
+ * @returns `enabled`, `disabled`, `optional` либо `required`.
1010
+ */
1011
+ learningGoalsAccessState: $PropertyType<UserDTO, "learningGoalsAccessState">;
1012
+
1013
+ /**
1014
+ * Мессенджеры, на которые посетитель подписан на уведомления.
1015
+ * @returns Список либо `null`, если бэкенд не считал.
1016
+ */
1017
+ messengerSubscriptions: $PropertyType<UserDTO, "messengerSubscriptions">;
1018
+
1019
+ /**
1020
+ * Пора предлагать продление занятий с репетитором.
1021
+ * @returns `true`, если пора.
1022
+ */
1023
+ needToPromoteRenewalWithCoach: $PropertyType<
1024
+ UserDTO,
1025
+ "needToPromoteRenewalWithCoach"
1026
+ >;
1027
+
1028
+ /**
1029
+ * Показывать баннер курсов следующего учебного года.
1030
+ * @returns `true`, если показывать.
1031
+ */
1032
+ nextYearCoursesBannerAvailable: $PropertyType<
1033
+ UserDTO,
1034
+ "nextYearCoursesBannerAvailable"
1035
+ >;
1036
+
1037
+ /**
1038
+ * Пароль задан — вход не только через код или соцсеть.
1039
+ * @returns `true`, `false` либо `null`, если бэкенд не считал.
1040
+ */
1041
+ passwordSet: $PropertyType<UserDTO, "passwordSet">;
1042
+
1043
+ /**
1044
+ * Реферальный код для программы «приведи друга».
1045
+ * @returns Строка либо `null`, если код не выдан.
1046
+ */
1047
+ referralCode: $PropertyType<UserDTO, "referralCode">;
1048
+
1049
+ /**
1050
+ * Доступен онбординг целевых действий.
1051
+ * @returns `true`, если доступен.
1052
+ */
1053
+ targetActionsOnboardingAvailable: $PropertyType<
1054
+ UserDTO,
1055
+ "targetActionsOnboardingAvailable"
1056
+ >;
1057
+
287
1058
  /**
288
1059
  * Идёт ли сейчас окно пролонгации договора домашней школы.
289
1060
  *
290
1061
  * Границы включаются: последний день окна ещё считается пролонгацией. Не заданная граница
291
1062
  * означает, что окна нет вовсе, а не что оно бесконечно.
1063
+ * @returns `true`, если сегодня внутри окна включительно
292
1064
  */
293
1065
  isProlongationBetweenDates(): boolean;
1066
+
1067
+ /**
1068
+ * Гость — сущность с умолчаниями всех полей и признаком `isDefaultUser()`.
1069
+ * @returns Новая сущность на каждый вызов: умолчания общие на процесс, копия своя.
1070
+ */
294
1071
  static createDefault(): User;
295
1072
 
296
1073
  /**
297
1074
  * Форма посетителя по умолчанию ДАННЫМИ — гость со всеми полями: тому, кто отдаёт `UserDTO`
298
1075
  * наружу (хост — приложениям), нужна полная форма, а не сущность с методами. Своя копия на
299
1076
  * вызов: умолчания общие на процесс, и правка чужой копии их не тронет.
1077
+ * @returns Новая копия умолчаний на каждый вызов
1078
+ */
1079
+ static defaultDto(): UserDTO;
1080
+
1081
+ /**
1082
+ * Сущность из профиля бэкенда (`UserDTO` в camelCase): строковые поля чистятся от null-байтов
1083
+ * и пробелов по краям, остальное берётся как есть.
1084
+ * @param input - Профиль в форме `UserDTO`
1085
+ * @returns Сущность над копией профиля: исходный объект не трогается
300
1086
  */
301
- static defaultDto(): UserDTO;
302
1087
  static fromApi(input: mixed): User;
1088
+
1089
+ /**
1090
+ * Сущность собрана из умолчаний (`createDefault`), а не из профиля бэкенда.
1091
+ * @returns `true` у гостя по умолчанию
1092
+ */
303
1093
  isDefaultUser(): boolean;
1094
+
1095
+ /**
1096
+ * Посетитель вошёл — у него есть идентификатор на бэкенде.
1097
+ * @returns `true`, если `id` задан и положителен
1098
+ */
304
1099
  isLoggedIn(): boolean;
305
1100
 
306
1101
  /**
307
- * Возвращает тектовое представление роли / класса пользователя
308
- * @returns {UserRole}
1102
+ * Роль либо класс словом — для подписи в интерфейсе.
1103
+ * @returns «Дошкольник» для нулевого класса, «Выпускник» без класса, иначе класс («5 класс»)
309
1104
  */
310
1105
  getPupilRole(): UserRole;
311
1106
 
312
1107
  /**
313
- * Возвращает роль пользователя
314
- * @returns {UserRole} роль как строка
1108
+ * Роль словом — по флагам профиля, первый совпавший: репетитор, учитель, родитель.
1109
+ * @returns «Репетитор», «Учитель», «Родитель», иначе роль ученика из `getPupilRole()`
315
1110
  */
316
1111
  getRole: () => UserRole;
317
1112
 
318
1113
  /**
319
- * Возвращает фамилию и инициалы юзера
320
- * @param {User} user
321
- * @return {string} 'Пупкин В.'
1114
+ * Фамилия с инициалами имени и отчества — подпись в списках.
1115
+ * @returns Строка вида «Пупкин В. И.»; без отчества — «Пупкин В.»
322
1116
  */
323
1117
  getInitials: () => string;
1118
+
1119
+ /**
1120
+ * Профиль строкой JSON — для печати в документ и передачи по сети.
1121
+ * @returns JSON полей сущности
1122
+ */
324
1123
  toJson(): string;
325
1124
 
326
1125
  /**
327
1126
  * Посетитель данными — то, что едет по сети и в состояние: сущность с методами не
328
1127
  * сериализуется. Своя копия на вызов: сущность неизменяема, и правка копии её не тронет.
1128
+ * @returns Копия полей сущности данными
329
1129
  */
330
1130
  toDto(): UserDTO;
331
1131
  }
@@ -441,252 +1241,6 @@ declare class AppOptionsService {
441
1241
  */
442
1242
  getAppOptions(): Promise<AppOptions>;
443
1243
  }
444
- declare interface FoxfordAntibotConfig {
445
- antibotFrameSrc?: string;
446
- antibotOnload?: (e: Event) => void;
447
- antibotOnerror?: () => void;
448
- debug?: boolean;
449
- }
450
- declare class FoxfordAntibot {
451
- static FOXFORD_ANTIBOT_URL: string;
452
- static DEFAULT_CONFIG: {
453
- antibotFrameSrc: string,
454
- ...
455
- };
456
- static FRAME_CLASSNAME: string;
457
- constructor(config?: FoxfordAntibotConfig): this;
458
- createAntibotFrame: (params: {
459
- src: string,
460
- onload?: (_e: Event) => void,
461
- onerror?: () => void,
462
- ...
463
- }) => void;
464
- }
465
- declare type Widget = {
466
- name:
467
- | "menu"
468
- | "reviews"
469
- | "featuredCoaches"
470
- | "coachEnrollment"
471
- | "shortForm"
472
- | "userTypePrompt"
473
- | "teachersSlider"
474
- | "externshipFormats",
475
- options: { [key: string]: any, ... },
476
- container?: HTMLElement,
477
- ...
478
- };
479
- declare type WidgetsInitConfig = {
480
- version?: "latest" | string,
481
- locale?: "ru",
482
- ...
483
- };
484
- declare type WidgetsConfig = {
485
- analyticContext?: {
486
- prefix: string,
487
- module: string,
488
- payload?: { [key: any]: any, ... },
489
- ...
490
- },
491
- rootColors?: boolean,
492
- loadFonts?: boolean,
493
- widgets: Array<Widget>,
494
- ...
495
- } & WidgetsInitConfig;
496
- declare class Widgets {
497
- static ENTRY: string[];
498
- static DEFAULT_CONFIG: WidgetsInitConfig;
499
- constructor(config: WidgetsInitConfig | void, apiInstance: ApiInstance): this;
500
- create(config: WidgetsConfig): Promise<void>;
501
- update(name: string, config: Widget): Promise<void>;
502
- static appendScript(src: string): Promise<mixed>;
503
- }
504
- declare type ProductTypeItem = {
505
- type: string,
506
- id: number,
507
- description: string,
508
- title: string,
509
- discipline: {
510
- id: number,
511
- name: string,
512
- ...
513
- },
514
- teacher: {
515
- id: number,
516
- long_name: string,
517
- description: string,
518
- experience: number,
519
- photo_url: string,
520
- photo_large_url: string,
521
- ...
522
- },
523
- levels: Array<{
524
- id: number,
525
- name: string,
526
- ...
527
- }>,
528
- ...
529
- };
530
- declare type ProductPack = {
531
- name: string,
532
- description: string,
533
- meta_title: string,
534
- meta_description: string,
535
- published: true,
536
- content_description: string,
537
- disciplines_scope: string,
538
- guaranteed_admission: true,
539
- grade_names: string,
540
- is_purchased: false,
541
- learning_flow: {
542
- title: string,
543
- steps: Array<{
544
- header: string,
545
- description: string,
546
- ...
547
- }>,
548
- ...
549
- },
550
- offers: {
551
- intro: string,
552
- items: Array<{
553
- title: string,
554
- description: string,
555
- ...
556
- }>,
557
- ...
558
- },
559
- price_block: {
560
- price: number,
561
- initial_price: number,
562
- title: string,
563
- description: string,
564
- points: Array<string>,
565
- price_per_month: number,
566
- initial_price_per_month: number,
567
- ...
568
- },
569
- product_pack_items: Array<ProductTypeItem>,
570
- faq_items: Array<{
571
- question: string,
572
- answer: string,
573
- ...
574
- }>,
575
- landing_image_urls: Array<string>,
576
- ...
577
- };
578
- declare interface CartItemDTO {
579
- cart_item_type: CartItemResourceType;
580
- resource_id: number;
581
- }
582
- declare type FoxfordConfig = {
583
- host?: string,
584
-
585
- /**
586
- * @deprecated
587
- */
588
- widgetsVersion?: "latest" | string,
589
- antibot?: boolean,
590
- antibotConfig?: FoxfordAntibotConfig,
591
- api?: ApiConfig,
592
- captchaConfig?: () => CaptchaConfig,
593
-
594
- /**
595
- * @deprecated Не используйте инициализацию виджетов через SDK
596
- */
597
- widgetsConfig?: WidgetsInitConfig,
598
- ...
599
- };
600
- declare type Reasons =
601
- | "additional_education_free_period_started"
602
- | "announcement_clicked"
603
- | "catalog_filtered"
604
- | "coach_intro_lesson_scheduled"
605
- | "coach_landing_visited"
606
- | "course_conspect_visited"
607
- | "course_landing_visited"
608
- | "event_scheduled"
609
- | "event_visited"
610
- | "exam_rehearsal_page_visited"
611
- | "exam_rehearsal_passed"
612
- | "externship_contract_draft_created"
613
- | "externship_demo_access"
614
- | "externship_iep_selected"
615
- | "externship_intendance_expressed"
616
- | "interactive_training_course_visited"
617
- | "externship_landing_visited"
618
- | "externship_lead_request"
619
- | "mini_group_landing_visited"
620
- | "olympiad_page_visited"
621
- | "onboarding"
622
- | "onboarding_finished"
623
- | "product_pack_landing_visited"
624
- | "promos_coach_recommendation_clicked"
625
- | "promos_course_recommendation_clicked"
626
- | "promos_results_filtered"
627
- | "subscription_landing_visited"
628
- | "teacher_course_visited"
629
- | "training_page_visited"
630
- | "training_passed"
631
- | "wiki_visited"
632
- | "project_landing_cta_clicked";
633
- declare type ProductFormats =
634
- | "coach_course"
635
- | "course"
636
- | "event"
637
- | "exam_rehearsal"
638
- | "externship"
639
- | "game"
640
- | "interactive_trainings"
641
- | "mini_group"
642
- | "olympiad"
643
- | "product_pack"
644
- | "teacher_course"
645
- | "trainings";
646
- declare type UserInterests = {
647
- businessUnitAbbrs?: BusinessUnitAbbreviation[] | null,
648
- disciplineId?: number | number[] | null,
649
- gradeId?: number | number[] | null,
650
- levelId?: number | number[] | null,
651
- productId?: number | null,
652
- productFormat?: ProductFormats | null,
653
- reason?: Reasons | null,
654
- ...
655
- };
656
- declare interface CommunicationSubscriptions {
657
- subscriptionNews?: boolean;
658
- subscriptionMaterials?: boolean;
659
- subscriptionEvents?: boolean;
660
- subscriptionPromos?: boolean;
661
- subscriptionReminders?: boolean;
662
- subscriptionMedia?: boolean;
663
- subscriptionExternship?: boolean;
664
- subscriptionExternal?: boolean;
665
- }
666
- declare interface LoginByPhoneParams {
667
- onEmailRequest: (phoneCheckResponse: {
668
- email?: string,
669
- fakeEmail?: boolean,
670
- state: "new" | "confirmed" | "not_confirmed",
671
- ...
672
- }) => Promise<string>;
673
- onCodeRequest: () => Promise<string>;
674
- onNameRequest: () => Promise<{
675
- first_name: string,
676
- last_name: string,
677
- ...
678
- }>;
679
- onConfirmationCodeResponse: (confirmationCodeResponse: {
680
- nextDeliveryAt: string,
681
- ...
682
- }) => void;
683
- onConfirmationCodeError: (error: Error) => void;
684
- }
685
- declare interface LoginOrRegistrationResponse {
686
- redirectUrl?: string;
687
- registered?: boolean;
688
- type?: string;
689
- }
690
1244
  declare class CartService {
691
1245
  constructor(apiInstance: ApiInstance): this;
692
1246
  createCartItem(id: number, type: CartItemResourceType): CartItemDTO;