@escapenavigator/types 2.1.6 → 2.1.8

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.
Files changed (132) hide show
  1. package/dist/admin/aggregator-order/aggregator-order.ro.d.ts +16 -0
  2. package/dist/admin/aggregator-order/aggregator-order.ro.js +16 -0
  3. package/dist/admin/aggregator-order/create-aggregator-order.dto.d.ts +6 -0
  4. package/dist/admin/aggregator-order/create-aggregator-order.dto.js +6 -0
  5. package/dist/agregator/agregator-find-questroom-by-title.ro.js +4 -1
  6. package/dist/agregator/agregator-questroom-card.ro.d.ts +17 -0
  7. package/dist/agregator/agregator-questroom-card.ro.js +36 -2
  8. package/dist/agregator/agregator-questroom.ro.d.ts +2 -0
  9. package/dist/agregator/agregator-questroom.ro.js +14 -1
  10. package/dist/client/update-client-billing-defaults.dto.d.ts +5 -0
  11. package/dist/client/update-client-billing-defaults.dto.js +35 -0
  12. package/dist/constants/navigator-certificate-nominal-bounds.d.ts +8 -0
  13. package/dist/constants/navigator-certificate-nominal-bounds.js +45 -0
  14. package/dist/integrations/admin-integration.ro.d.ts +122 -0
  15. package/dist/integrations/admin-integration.ro.js +2 -0
  16. package/dist/integrations/booking-mode.enum.d.ts +24 -0
  17. package/dist/integrations/booking-mode.enum.js +28 -0
  18. package/dist/integrations/connect-integration.dto.d.ts +44 -0
  19. package/dist/integrations/connect-integration.dto.js +101 -0
  20. package/dist/integrations/connection-status.enum.d.ts +30 -0
  21. package/dist/integrations/connection-status.enum.js +34 -0
  22. package/dist/integrations/connector-capabilities.d.ts +85 -0
  23. package/dist/integrations/connector-capabilities.js +2 -0
  24. package/dist/integrations/credential-field.d.ts +80 -0
  25. package/dist/integrations/credential-field.js +2 -0
  26. package/dist/integrations/crm-integration-status.ro.d.ts +70 -0
  27. package/dist/integrations/crm-integration-status.ro.js +43 -0
  28. package/dist/integrations/incident-status.enum.d.ts +31 -0
  29. package/dist/integrations/incident-status.enum.js +36 -0
  30. package/dist/integrations/incident-type.enum.d.ts +30 -0
  31. package/dist/integrations/incident-type.enum.js +34 -0
  32. package/dist/integrations/integration-request-status.enum.d.ts +22 -0
  33. package/dist/integrations/integration-request-status.enum.js +26 -0
  34. package/dist/integrations/normalized-slot.d.ts +79 -0
  35. package/dist/integrations/normalized-slot.js +2 -0
  36. package/dist/integrations/partner-wire.d.ts +124 -0
  37. package/dist/integrations/partner-wire.js +26 -0
  38. package/dist/integrations/partners-booking-v1-schedule.dto.d.ts +11 -0
  39. package/dist/integrations/partners-booking-v1-schedule.dto.js +43 -0
  40. package/dist/integrations/partners-booking-v1.d.ts +124 -0
  41. package/dist/integrations/partners-booking-v1.js +2 -0
  42. package/dist/integrations/pending-booking-request.ro.d.ts +32 -0
  43. package/dist/integrations/pending-booking-request.ro.js +2 -0
  44. package/dist/integrations/provider-code.enum.d.ts +37 -0
  45. package/dist/integrations/provider-code.enum.js +41 -0
  46. package/dist/integrations/resource-match-status.enum.d.ts +25 -0
  47. package/dist/integrations/resource-match-status.enum.js +29 -0
  48. package/dist/integrations/run-operation.enum.d.ts +22 -0
  49. package/dist/integrations/run-operation.enum.js +26 -0
  50. package/dist/integrations/run-outcome.enum.d.ts +23 -0
  51. package/dist/integrations/run-outcome.enum.js +27 -0
  52. package/dist/navigator-certificate/create-navigator-certificate-sale.dto.d.ts +2 -2
  53. package/dist/navigator-certificate/create-navigator-certificate-sale.dto.js +4 -2
  54. package/dist/navigator-certificate/create-navigator-certificate-template.dto.d.ts +3 -2
  55. package/dist/navigator-certificate/create-navigator-certificate-template.dto.js +10 -2
  56. package/dist/navigator-certificate/enum/navigator-certificate-tag-nav-mode.enum.d.ts +5 -0
  57. package/dist/navigator-certificate/enum/navigator-certificate-tag-nav-mode.enum.js +9 -0
  58. package/dist/navigator-certificate/enum/navigator-certificate-tag-slug.enum.d.ts +23 -0
  59. package/dist/navigator-certificate/enum/navigator-certificate-tag-slug.enum.js +27 -0
  60. package/dist/navigator-certificate/index.d.ts +6 -0
  61. package/dist/navigator-certificate/index.js +6 -0
  62. package/dist/navigator-certificate/navigator-certificate-tag-catalog.d.ts +8 -0
  63. package/dist/navigator-certificate/navigator-certificate-tag-catalog.js +107 -0
  64. package/dist/navigator-certificate/navigator-certificate-tag-season.d.ts +8 -0
  65. package/dist/navigator-certificate/navigator-certificate-tag-season.js +86 -0
  66. package/dist/navigator-certificate/navigator-certificate-tag.ro.d.ts +8 -0
  67. package/dist/navigator-certificate/navigator-certificate-tag.ro.js +31 -0
  68. package/dist/navigator-certificate/navigator-certificate-template.ro.d.ts +3 -2
  69. package/dist/navigator-certificate/navigator-certificate-template.ro.js +5 -1
  70. package/dist/navigator-certificate/navigator-certificate-templates.ro.d.ts +16 -0
  71. package/dist/navigator-certificate/navigator-certificate-templates.ro.js +54 -1
  72. package/dist/navigator-certificate/update-navigator-certificate-tag.dto.d.ts +5 -0
  73. package/dist/navigator-certificate/update-navigator-certificate-tag.dto.js +30 -0
  74. package/dist/navigator-certificate/update-navigator-certificate-template.dto.d.ts +3 -2
  75. package/dist/navigator-certificate/update-navigator-certificate-template.dto.js +9 -2
  76. package/dist/openapi/external-booking/openapi-external-quote.dto.d.ts +22 -0
  77. package/dist/openapi/external-booking/openapi-external-quote.dto.js +43 -0
  78. package/dist/openapi/external-booking/openapi-external-quote.ro.d.ts +65 -0
  79. package/dist/openapi/external-booking/openapi-external-quote.ro.js +83 -0
  80. package/dist/openapi/morty/morty-timeslot.ro.js +13 -0
  81. package/dist/openapi/shared/openapi-questroom.ro.d.ts +1 -0
  82. package/dist/openapi/shared/openapi-questroom.ro.js +4 -0
  83. package/dist/openapi/slots/openapi-slot-add-hold.dto.d.ts +9 -0
  84. package/dist/openapi/slots/openapi-slot-add-hold.dto.js +6 -0
  85. package/dist/openapi/slots/openapi-slot-hold.ro.d.ts +50 -0
  86. package/dist/openapi/slots/openapi-slot-hold.ro.js +37 -0
  87. package/dist/openapi/slots/openapi-widget-slot.ro.d.ts +16 -1
  88. package/dist/openapi/slots/openapi-widget-slot.ro.js +11 -0
  89. package/dist/openapi/widget/bookeo/openapi-widget-bookeo-get-prices.dto.d.ts +9 -0
  90. package/dist/openapi/widget/bookeo/openapi-widget-bookeo-get-prices.dto.js +6 -0
  91. package/dist/openapi/widget/bookeo/openapi-widget-create-bookeo-order.dto.d.ts +19 -0
  92. package/dist/openapi/widget/bookeo/openapi-widget-create-bookeo-order.dto.js +18 -0
  93. package/dist/order/update-order.dto.d.ts +4 -0
  94. package/dist/order/update-order.dto.js +24 -0
  95. package/dist/parse-results/booking-provider-signatures.d.ts +35 -0
  96. package/dist/parse-results/booking-provider-signatures.js +93 -0
  97. package/dist/player/player-leaderboard.ro.d.ts +20 -0
  98. package/dist/player/player-leaderboard.ro.js +81 -0
  99. package/dist/player/player.ro.d.ts +30 -1
  100. package/dist/player/player.ro.js +85 -1
  101. package/dist/profile/admin-profile.ro.d.ts +3 -0
  102. package/dist/profile/admin-profile.ro.js +9 -0
  103. package/dist/profile/create-profile.dto.d.ts +1 -0
  104. package/dist/profile/create-profile.dto.js +6 -0
  105. package/dist/profile/enum/navigator-certificate-program.enum.d.ts +5 -0
  106. package/dist/profile/enum/navigator-certificate-program.enum.js +9 -0
  107. package/dist/profile/profile.ro.d.ts +2 -0
  108. package/dist/profile/profile.ro.js +5 -0
  109. package/dist/profile/query-admin-profile.dto.d.ts +2 -0
  110. package/dist/profile/query-admin-profile.dto.js +4 -0
  111. package/dist/questroom/agregator-questroom.ro.d.ts +1 -0
  112. package/dist/questroom/create-questroom-admin.dto.d.ts +1 -0
  113. package/dist/questroom/create-questroom-admin.dto.js +6 -0
  114. package/dist/questroom/create-questroom.dto.d.ts +4 -0
  115. package/dist/questroom/create-questroom.dto.js +6 -0
  116. package/dist/questroom/questroom.ro.d.ts +1 -0
  117. package/dist/questroom/questroom.ro.js +4 -0
  118. package/dist/questroom/questrooms-list-admin.ro.d.ts +2 -0
  119. package/dist/questroom/questrooms-list-admin.ro.js +8 -0
  120. package/dist/rating-badge/create-rating-badge.dto.d.ts +9 -0
  121. package/dist/{questroom/bind-bookeo.dto.js → rating-badge/create-rating-badge.dto.js} +8 -7
  122. package/dist/rating-badge/enum/rating-badge-status.enum.d.ts +6 -0
  123. package/dist/rating-badge/enum/rating-badge-status.enum.js +10 -0
  124. package/dist/rating-badge/ranking-overview.ro.d.ts +65 -0
  125. package/dist/rating-badge/ranking-overview.ro.js +249 -0
  126. package/dist/rating-badge/rating-badge-admin.ro.d.ts +7 -0
  127. package/dist/rating-badge/rating-badge-admin.ro.js +33 -0
  128. package/dist/rating-badge/rating-badge.ro.d.ts +12 -0
  129. package/dist/rating-badge/rating-badge.ro.js +50 -0
  130. package/dist/tsconfig.build.tsbuildinfo +1 -1
  131. package/package.json +2 -2
  132. package/dist/questroom/bind-bookeo.dto.d.ts +0 -4
@@ -0,0 +1,101 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.CreateIntegrationRequestDto = exports.ToggleIntegrationDto = exports.MatchIntegrationResourceDto = exports.ConnectIntegrationDto = void 0;
13
+ const class_validator_1 = require("class-validator");
14
+ const provider_code_enum_1 = require("./provider-code.enum");
15
+ /** Самостоятельное подключение своей системы из кабинета квеста. */
16
+ class ConnectIntegrationDto {
17
+ }
18
+ exports.ConnectIntegrationDto = ConnectIntegrationDto;
19
+ __decorate([
20
+ (0, class_validator_1.IsEnum)(provider_code_enum_1.IntegrationProviderCodeEnum),
21
+ __metadata("design:type", String)
22
+ ], ConnectIntegrationDto.prototype, "providerCode", void 0);
23
+ __decorate([
24
+ (0, class_validator_1.IsOptional)(),
25
+ (0, class_validator_1.IsString)(),
26
+ (0, class_validator_1.MaxLength)(200),
27
+ __metadata("design:type", String)
28
+ ], ConnectIntegrationDto.prototype, "title", void 0);
29
+ __decorate([
30
+ (0, class_validator_1.IsObject)(),
31
+ __metadata("design:type", Object)
32
+ ], ConnectIntegrationDto.prototype, "credentials", void 0);
33
+ __decorate([
34
+ (0, class_validator_1.IsOptional)(),
35
+ (0, class_validator_1.IsInt)(),
36
+ (0, class_validator_1.Min)(1),
37
+ __metadata("design:type", Number)
38
+ ], ConnectIntegrationDto.prototype, "questroomId", void 0);
39
+ /**
40
+ * Подтверждение соответствия комнаты. `questroomId: null` означает «такой
41
+ * комнаты у меня нет» — она перестаёт предлагаться и в каталог не идёт.
42
+ */
43
+ class MatchIntegrationResourceDto {
44
+ }
45
+ exports.MatchIntegrationResourceDto = MatchIntegrationResourceDto;
46
+ __decorate([
47
+ (0, class_validator_1.IsOptional)(),
48
+ (0, class_validator_1.IsInt)(),
49
+ (0, class_validator_1.Min)(1),
50
+ __metadata("design:type", Number)
51
+ ], MatchIntegrationResourceDto.prototype, "questroomId", void 0);
52
+ class ToggleIntegrationDto {
53
+ }
54
+ exports.ToggleIntegrationDto = ToggleIntegrationDto;
55
+ __decorate([
56
+ (0, class_validator_1.IsBoolean)(),
57
+ __metadata("design:type", Boolean)
58
+ ], ToggleIntegrationDto.prototype, "enabled", void 0);
59
+ /** Заявка «подключите меня сами» для систем без готового коннектора. */
60
+ class CreateIntegrationRequestDto {
61
+ }
62
+ exports.CreateIntegrationRequestDto = CreateIntegrationRequestDto;
63
+ __decorate([
64
+ (0, class_validator_1.IsString)(),
65
+ (0, class_validator_1.MaxLength)(200),
66
+ __metadata("design:type", String)
67
+ ], CreateIntegrationRequestDto.prototype, "systemName", void 0);
68
+ __decorate([
69
+ (0, class_validator_1.IsOptional)(),
70
+ (0, class_validator_1.IsString)(),
71
+ (0, class_validator_1.MaxLength)(500),
72
+ __metadata("design:type", String)
73
+ ], CreateIntegrationRequestDto.prototype, "bookingPageUrl", void 0);
74
+ __decorate([
75
+ (0, class_validator_1.IsOptional)(),
76
+ (0, class_validator_1.IsString)(),
77
+ (0, class_validator_1.MaxLength)(200),
78
+ __metadata("design:type", String)
79
+ ], CreateIntegrationRequestDto.prototype, "contactName", void 0);
80
+ __decorate([
81
+ (0, class_validator_1.IsOptional)(),
82
+ (0, class_validator_1.IsEmail)(),
83
+ __metadata("design:type", String)
84
+ ], CreateIntegrationRequestDto.prototype, "contactEmail", void 0);
85
+ __decorate([
86
+ (0, class_validator_1.IsOptional)(),
87
+ (0, class_validator_1.IsString)(),
88
+ (0, class_validator_1.MaxLength)(64),
89
+ __metadata("design:type", String)
90
+ ], CreateIntegrationRequestDto.prototype, "contactPhone", void 0);
91
+ __decorate([
92
+ (0, class_validator_1.IsOptional)(),
93
+ (0, class_validator_1.IsString)(),
94
+ (0, class_validator_1.MaxLength)(2000),
95
+ __metadata("design:type", String)
96
+ ], CreateIntegrationRequestDto.prototype, "comment", void 0);
97
+ __decorate([
98
+ (0, class_validator_1.IsOptional)(),
99
+ (0, class_validator_1.IsObject)(),
100
+ __metadata("design:type", Object)
101
+ ], CreateIntegrationRequestDto.prototype, "credentials", void 0);
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Состояние подключения. Различать «настраивается», «работает» и «сломалось»
3
+ * обязательно на уровне данных: от статуса зависит, показываем ли мы слоты
4
+ * игроку и будим ли поддержку.
5
+ */
6
+ export declare enum IntegrationConnectionStatusEnum {
7
+ /** Квест начал настройку, но проверка креденшелов ещё не прошла. */
8
+ DRAFT = "draft",
9
+ /**
10
+ * Ждёт нашего действия: одобрения приложения у вендора, статуса канала,
11
+ * ручной привязки квестов к каталогу. Квесту показываем понятное «мы
12
+ * работаем над этим», а не ошибку.
13
+ */
14
+ PENDING = "pending",
15
+ /** Работает: расписание отдаётся, брони уезжают. */
16
+ ACTIVE = "active",
17
+ /**
18
+ * Ошибки идут, но подключение ещё не отключено: часть вызовов проходит.
19
+ * Слоты показываем, режим при этом может деградировать до `request`.
20
+ */
21
+ DEGRADED = "degraded",
22
+ /**
23
+ * Не работает: креденшелы отозваны, вендор отвечает отказом, контракт
24
+ * изменился. Слоты не показываем — лучше пустое расписание, чем бронь,
25
+ * которая не доедет.
26
+ */
27
+ FAILED = "failed",
28
+ /** Выключено владельцем или нами. Связи с каталогом при этом не рвутся. */
29
+ DISABLED = "disabled"
30
+ }
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IntegrationConnectionStatusEnum = void 0;
4
+ /**
5
+ * Состояние подключения. Различать «настраивается», «работает» и «сломалось»
6
+ * обязательно на уровне данных: от статуса зависит, показываем ли мы слоты
7
+ * игроку и будим ли поддержку.
8
+ */
9
+ var IntegrationConnectionStatusEnum;
10
+ (function (IntegrationConnectionStatusEnum) {
11
+ /** Квест начал настройку, но проверка креденшелов ещё не прошла. */
12
+ IntegrationConnectionStatusEnum["DRAFT"] = "draft";
13
+ /**
14
+ * Ждёт нашего действия: одобрения приложения у вендора, статуса канала,
15
+ * ручной привязки квестов к каталогу. Квесту показываем понятное «мы
16
+ * работаем над этим», а не ошибку.
17
+ */
18
+ IntegrationConnectionStatusEnum["PENDING"] = "pending";
19
+ /** Работает: расписание отдаётся, брони уезжают. */
20
+ IntegrationConnectionStatusEnum["ACTIVE"] = "active";
21
+ /**
22
+ * Ошибки идут, но подключение ещё не отключено: часть вызовов проходит.
23
+ * Слоты показываем, режим при этом может деградировать до `request`.
24
+ */
25
+ IntegrationConnectionStatusEnum["DEGRADED"] = "degraded";
26
+ /**
27
+ * Не работает: креденшелы отозваны, вендор отвечает отказом, контракт
28
+ * изменился. Слоты не показываем — лучше пустое расписание, чем бронь,
29
+ * которая не доедет.
30
+ */
31
+ IntegrationConnectionStatusEnum["FAILED"] = "failed";
32
+ /** Выключено владельцем или нами. Связи с каталогом при этом не рвутся. */
33
+ IntegrationConnectionStatusEnum["DISABLED"] = "disabled";
34
+ })(IntegrationConnectionStatusEnum || (exports.IntegrationConnectionStatusEnum = IntegrationConnectionStatusEnum = {}));
@@ -0,0 +1,85 @@
1
+ import { IntegrationBookingModeEnum } from './booking-mode.enum';
2
+ /**
3
+ * Что коннектор умеет. Читается вызывающим кодом **до** вызова, чтобы
4
+ * `IntegrationGateway` не выяснял возможности методом «попробовать и поймать
5
+ * исключение»: у чужих API ошибка «не поддерживается» неотличима от ошибки
6
+ * «сломалось», и на второй мы обязаны поднимать инцидент, а на первую — нет.
7
+ */
8
+ export type ConnectorCapabilities = {
9
+ /**
10
+ * Режимы, которые провайдер вообще может обеспечить. Конкретный режим
11
+ * подключения выбирается из этого набора: у квеста без write-доступа
12
+ * останется только `REQUEST`, даже если провайдер умеет `INSTANT`.
13
+ */
14
+ bookingModes: IntegrationBookingModeEnum[];
15
+ /** Можно перечислить квесты/продукты аккаунта для автопривязки к каталогу. */
16
+ canListResources: boolean;
17
+ /**
18
+ * На что выдаются доступы.
19
+ *
20
+ * `account` (по умолчанию) — один ключ открывает весь аккаунт вендора, и у
21
+ * профиля одно подключение на систему: комнаты приходят списком.
22
+ *
23
+ * `resource` — доступ выдаётся на одну комнату (у MyERP-совместимых систем
24
+ * это персональный URL расписания с токеном в query). Тогда подключений у
25
+ * профиля столько, сколько комнат, и мастер обязан спросить, к какому нашему
26
+ * квесту относится введённый адрес: перечислить каталог вендора нельзя, а
27
+ * молча повесить второй адрес на то же подключение — значит затереть
28
+ * настроенную комнату.
29
+ */
30
+ connectionScope?: 'account' | 'resource';
31
+ /**
32
+ * Можно перепроверить один слот перед бронью. Без этого между показом
33
+ * расписания и нажатием «забронировать» мы работаем на кеше и рискуем
34
+ * двойной бронью.
35
+ */
36
+ canCheckSlot: boolean;
37
+ /**
38
+ * Перепроверка одного слота стоит вендору один запрос.
39
+ *
40
+ * Различать это обязательно, потому что `canCheckSlot` не говорит о цене
41
+ * вопроса. У OCTO и Regiondo есть ручка на конкретное время — спросить дёшево,
42
+ * и на клике по слоту это оправдано. У MyERP-совместимых систем такой ручки
43
+ * нет вовсе: «проверить слот» разворачивается в чтение всего расписания плюс
44
+ * тарифы, то есть два запроса в чужую CRM на каждый клик по времени. Живых
45
+ * MyERP-квестов больше двухсот, и они получили бы эту плату за данные, которые
46
+ * уже приехали вместе с расписанием.
47
+ *
48
+ * Не указано — считаем `false`: лишний запрос в чужую систему хуже, чем
49
+ * отсутствие уточнения, а провайдер с дешёвой проверкой скажет об этом сам.
50
+ */
51
+ singleSlotCheck?: boolean;
52
+ /** Можно отменить бронь по нашему идемпотентному ключу. */
53
+ canCancel: boolean;
54
+ /**
55
+ * Цену слота видно только внутри hold (так у Bookeo): значит показывать
56
+ * итоговую сумму до шага удержания нельзя.
57
+ */
58
+ priceRequiresHold: boolean;
59
+ /** Провайдер присылает вебхуки об изменениях на своей стороне. */
60
+ hasWebhooks: boolean;
61
+ /**
62
+ * Насколько вперёд провайдер отдаёт расписание, в днях. Наш горизонт
63
+ * показа не может быть больше.
64
+ */
65
+ scheduleHorizonDays: number;
66
+ /**
67
+ * Максимум дней в одном запросе расписания. Больше — разбиваем на
68
+ * несколько вызовов, а не молча теряем хвост.
69
+ */
70
+ maxRangeDaysPerRequest?: number;
71
+ /**
72
+ * Сколько у квеста времени на подтверждение заявки в режиме `REQUEST`.
73
+ * По истечении — инцидент `confirmation_timeout` и извинения игроку.
74
+ */
75
+ confirmationTimeoutMinutes?: number;
76
+ /**
77
+ * Ограничение частоты, которое декларирует вендор. Нужно gateway, чтобы
78
+ * не выгрести бан на аккаунт квеста: у Resova и Xola лимиты на ключ.
79
+ */
80
+ rateLimit?: {
81
+ requestsPerMinute: number;
82
+ /** Лимит общий на аккаунт вендора, а не на наше подключение. */
83
+ perAccount?: boolean;
84
+ };
85
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,80 @@
1
+ import { IntegrationProviderCodeEnum } from './provider-code.enum';
2
+ /**
3
+ * Описание одного поля, которое квест заполняет при подключении. Мастер в CRM
4
+ * и форма в админке рисуются из этого списка, а не хардкодят провайдеров:
5
+ * добавить коннектор должно значить «написать коннектор», а не «дописать
6
+ * четыре формы».
7
+ */
8
+ export type CredentialFieldType =
9
+ /** Обычная строка. */
10
+ 'text'
11
+ /** URL: валидируем схему и хост, показываем как ссылку. */
12
+ | 'url'
13
+ /**
14
+ * Секрет. В UI — поле с маскированием, в ответах API **никогда не
15
+ * возвращается целиком** (только последние символы), в логах проходит через
16
+ * `redactIntegrationPayload`.
17
+ */
18
+ | 'secret'
19
+ /** Выбор из фиксированного списка `options`. */
20
+ | 'select'
21
+ /** Галка: например, согласие квеста на комиссию вендора. */
22
+ | 'checkbox';
23
+ export type CredentialField = {
24
+ /** Ключ в объекте креденшелов подключения. */
25
+ key: string;
26
+ type: CredentialFieldType;
27
+ /** Подпись для квеста. Человеческая, без наших внутренних терминов. */
28
+ label: string;
29
+ required: boolean;
30
+ /** Короткая подсказка под полем. */
31
+ hint?: string;
32
+ placeholder?: string;
33
+ /** Для `select`. */
34
+ options?: Array<{
35
+ value: string;
36
+ label: string;
37
+ }>;
38
+ /**
39
+ * Регулярка для проверки на клиенте — как строка, чтобы контракт
40
+ * оставался сериализуемым и уезжал в CRM вместе с JSON.
41
+ */
42
+ pattern?: string;
43
+ /**
44
+ * Где владельцу взять это значение: «Settings → Company Settings → API →
45
+ * Create API». Без такой инструкции self-service не работает — квест
46
+ * упирается в поле «API key» и пишет в поддержку.
47
+ */
48
+ whereToFind?: string;
49
+ };
50
+ /**
51
+ * Всё, что нужно UI, чтобы показать провайдера в списке доступных подключений.
52
+ */
53
+ export type ProviderDescriptor = {
54
+ code: IntegrationProviderCodeEnum;
55
+ /** Название так, как его знает владелец квеста. */
56
+ title: string;
57
+ /** Логотип для карточки в мастере подключения. */
58
+ logoUrl?: string;
59
+ /** Поля формы подключения. */
60
+ credentials: CredentialField[];
61
+ /**
62
+ * Ссылка на нашу инструкцию по этому провайдеру. Обязательна: любое новое
63
+ * подключение сопровождается инструкцией и для квеста, и для админа.
64
+ */
65
+ docsUrl?: string;
66
+ /**
67
+ * Может ли квест подключиться сам, без нашего участия. `false` означает,
68
+ * что нужен ручной шаг с нашей стороны (одобрение приложения у вендора,
69
+ * статус канала) — и тогда мастер сразу предлагает оставить заявку, а не
70
+ * ведёт в форму, которая всё равно упрётся.
71
+ */
72
+ selfServe: boolean;
73
+ /**
74
+ * Предупреждение, которое обязательно показать до подключения. Пример:
75
+ * FareHarbor тарифицирует партнёрские брони, и владелец включает списание
76
+ * комиссии сам — про это он должен прочитать в мастере, а не узнать из
77
+ * счёта.
78
+ */
79
+ warning?: string;
80
+ };
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,70 @@
1
+ import { IntegrationBookingModeEnum } from './booking-mode.enum';
2
+ import { IntegrationProviderCodeEnum } from './provider-code.enum';
3
+ /**
4
+ * Состояние интеграции на языке владельца квеста.
5
+ *
6
+ * Отдельный перечень вместо `IntegrationConnectionStatusEnum` нужен потому, что
7
+ * технический статус отвечает на вопрос «что с подключением», а владельцу квеста
8
+ * важен другой: «идут ли ко мне игроки и должен ли я что-то сделать».
9
+ * `degraded` и `failed` для него одинаковы — записи нет; зато `failed` из-за
10
+ * отозванного ключа и `failed` из-за упавшего вендора требуют разного, хотя
11
+ * технический статус у них один.
12
+ */
13
+ export declare enum CrmIntegrationStateEnum {
14
+ /** Записи идут, делать ничего не нужно. */
15
+ WORKS = "works",
16
+ /** Подключение начато, но не доведено до конца — ждёт самого квеста. */
17
+ SETUP_NEEDED = "setup_needed",
18
+ /** Мы проверяем данные доступа, ответ будет в течение часа. */
19
+ CHECKING = "checking",
20
+ /** Работает, но с перебоями: часть игроков может не увидеть расписание. */
21
+ ATTENTION = "attention",
22
+ /** Записи нет. Требуется действие квеста или наша помощь. */
23
+ BROKEN = "broken",
24
+ /** Выключено — по просьбе квеста или нами. */
25
+ OFF = "off"
26
+ }
27
+ /** Что владельцу квеста сделать. `none` — ничего, всё в порядке. */
28
+ export declare enum CrmIntegrationActionEnum {
29
+ NONE = "none",
30
+ /** Закончить подключение в мастере. */
31
+ FINISH_SETUP = "finish_setup",
32
+ /** Обновить данные доступа: ключ отозван или истёк. */
33
+ RECONNECT = "reconnect",
34
+ /** Подтвердить, какие комнаты соответствуют комнатам в его системе. */
35
+ MATCH_ROOMS = "match_rooms",
36
+ /** Ничего не делать, проблема на стороне его системы — мы уже занимаемся. */
37
+ WAIT = "wait",
38
+ /** Написать нам: без человека не разобраться. */
39
+ CONTACT_SUPPORT = "contact_support"
40
+ }
41
+ export type CrmIntegrationStatus = {
42
+ connectionId: number | null;
43
+ providerCode: IntegrationProviderCodeEnum | null;
44
+ /** Название системы так, как её называет сам квест. */
45
+ providerTitle: string;
46
+ state: CrmIntegrationStateEnum;
47
+ /** Одна строка, которую видно в списке. Без технических терминов. */
48
+ headline: string;
49
+ /** Пояснение на два-три предложения: что происходит и почему. */
50
+ detail: string;
51
+ action: CrmIntegrationActionEnum;
52
+ /** Подпись кнопки под `action`. Пусто, если действий не требуется. */
53
+ actionLabel: string;
54
+ bookingMode: IntegrationBookingModeEnum | null;
55
+ /**
56
+ * Понятная формулировка режима: «запись подтверждается сразу» против
57
+ * «заявку подтверждаете вы». Квест должен понимать, чего от него ждут.
58
+ */
59
+ bookingModeLabel: string;
60
+ /** Сколько комнат показывается на агрегаторе. */
61
+ roomsOnline: number;
62
+ /** Сколько комнат ждут подтверждения соответствия. */
63
+ roomsWaitingMatch: number;
64
+ /** Когда расписание обновлялось в последний раз, человеческой фразой. */
65
+ scheduleUpdatedText: string;
66
+ /** Броней получено за последние 30 дней — главный аргумент «оно работает». */
67
+ bookings30d: number;
68
+ /** С какого момента проблема, если она есть. */
69
+ problemSince: string | null;
70
+ };
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CrmIntegrationActionEnum = exports.CrmIntegrationStateEnum = void 0;
4
+ /**
5
+ * Состояние интеграции на языке владельца квеста.
6
+ *
7
+ * Отдельный перечень вместо `IntegrationConnectionStatusEnum` нужен потому, что
8
+ * технический статус отвечает на вопрос «что с подключением», а владельцу квеста
9
+ * важен другой: «идут ли ко мне игроки и должен ли я что-то сделать».
10
+ * `degraded` и `failed` для него одинаковы — записи нет; зато `failed` из-за
11
+ * отозванного ключа и `failed` из-за упавшего вендора требуют разного, хотя
12
+ * технический статус у них один.
13
+ */
14
+ var CrmIntegrationStateEnum;
15
+ (function (CrmIntegrationStateEnum) {
16
+ /** Записи идут, делать ничего не нужно. */
17
+ CrmIntegrationStateEnum["WORKS"] = "works";
18
+ /** Подключение начато, но не доведено до конца — ждёт самого квеста. */
19
+ CrmIntegrationStateEnum["SETUP_NEEDED"] = "setup_needed";
20
+ /** Мы проверяем данные доступа, ответ будет в течение часа. */
21
+ CrmIntegrationStateEnum["CHECKING"] = "checking";
22
+ /** Работает, но с перебоями: часть игроков может не увидеть расписание. */
23
+ CrmIntegrationStateEnum["ATTENTION"] = "attention";
24
+ /** Записи нет. Требуется действие квеста или наша помощь. */
25
+ CrmIntegrationStateEnum["BROKEN"] = "broken";
26
+ /** Выключено — по просьбе квеста или нами. */
27
+ CrmIntegrationStateEnum["OFF"] = "off";
28
+ })(CrmIntegrationStateEnum || (exports.CrmIntegrationStateEnum = CrmIntegrationStateEnum = {}));
29
+ /** Что владельцу квеста сделать. `none` — ничего, всё в порядке. */
30
+ var CrmIntegrationActionEnum;
31
+ (function (CrmIntegrationActionEnum) {
32
+ CrmIntegrationActionEnum["NONE"] = "none";
33
+ /** Закончить подключение в мастере. */
34
+ CrmIntegrationActionEnum["FINISH_SETUP"] = "finish_setup";
35
+ /** Обновить данные доступа: ключ отозван или истёк. */
36
+ CrmIntegrationActionEnum["RECONNECT"] = "reconnect";
37
+ /** Подтвердить, какие комнаты соответствуют комнатам в его системе. */
38
+ CrmIntegrationActionEnum["MATCH_ROOMS"] = "match_rooms";
39
+ /** Ничего не делать, проблема на стороне его системы — мы уже занимаемся. */
40
+ CrmIntegrationActionEnum["WAIT"] = "wait";
41
+ /** Написать нам: без человека не разобраться. */
42
+ CrmIntegrationActionEnum["CONTACT_SUPPORT"] = "contact_support";
43
+ })(CrmIntegrationActionEnum || (exports.CrmIntegrationActionEnum = CrmIntegrationActionEnum = {}));
@@ -0,0 +1,31 @@
1
+ export declare enum IntegrationIncidentStatusEnum {
2
+ /** Открыт: проблема продолжается. */
3
+ OPEN = "open",
4
+ /**
5
+ * Взят в работу: поддержка увидела и связывается с квестом. Отдельный
6
+ * статус нужен, чтобы повторные алерты по одному и тому же инциденту не
7
+ * шли в чат каждые пять минут.
8
+ */
9
+ ACKNOWLEDGED = "acknowledged",
10
+ /** Починено: вызовы снова проходят. */
11
+ RESOLVED = "resolved",
12
+ /**
13
+ * Закрыт как ожидаемый: квест сам закрыл площадку, вендор объявил
14
+ * плановые работы. Из статистики здоровья такие исключаются, иначе
15
+ * подключение выглядит битым без причины.
16
+ */
17
+ IGNORED = "ignored"
18
+ }
19
+ /**
20
+ * Severity отвечает ровно на один вопрос: будить ли человека сейчас. Поэтому
21
+ * значений три, а не пять — иначе выбор превращается в вкусовщину, и всё
22
+ * уезжает в середину шкалы.
23
+ */
24
+ export declare enum IntegrationIncidentSeverityEnum {
25
+ /** Игрок уже пострадал: бронь не доехала, заявка просрочена. Алерт сразу. */
26
+ CRITICAL = "critical",
27
+ /** Подключение сломано, брони пока не терялись. Алерт в рабочее время. */
28
+ WARNING = "warning",
29
+ /** Симптом на будущее: растут таймауты, вендор начал ограничивать частоту. */
30
+ INFO = "info"
31
+ }
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IntegrationIncidentSeverityEnum = exports.IntegrationIncidentStatusEnum = void 0;
4
+ var IntegrationIncidentStatusEnum;
5
+ (function (IntegrationIncidentStatusEnum) {
6
+ /** Открыт: проблема продолжается. */
7
+ IntegrationIncidentStatusEnum["OPEN"] = "open";
8
+ /**
9
+ * Взят в работу: поддержка увидела и связывается с квестом. Отдельный
10
+ * статус нужен, чтобы повторные алерты по одному и тому же инциденту не
11
+ * шли в чат каждые пять минут.
12
+ */
13
+ IntegrationIncidentStatusEnum["ACKNOWLEDGED"] = "acknowledged";
14
+ /** Починено: вызовы снова проходят. */
15
+ IntegrationIncidentStatusEnum["RESOLVED"] = "resolved";
16
+ /**
17
+ * Закрыт как ожидаемый: квест сам закрыл площадку, вендор объявил
18
+ * плановые работы. Из статистики здоровья такие исключаются, иначе
19
+ * подключение выглядит битым без причины.
20
+ */
21
+ IntegrationIncidentStatusEnum["IGNORED"] = "ignored";
22
+ })(IntegrationIncidentStatusEnum || (exports.IntegrationIncidentStatusEnum = IntegrationIncidentStatusEnum = {}));
23
+ /**
24
+ * Severity отвечает ровно на один вопрос: будить ли человека сейчас. Поэтому
25
+ * значений три, а не пять — иначе выбор превращается в вкусовщину, и всё
26
+ * уезжает в середину шкалы.
27
+ */
28
+ var IntegrationIncidentSeverityEnum;
29
+ (function (IntegrationIncidentSeverityEnum) {
30
+ /** Игрок уже пострадал: бронь не доехала, заявка просрочена. Алерт сразу. */
31
+ IntegrationIncidentSeverityEnum["CRITICAL"] = "critical";
32
+ /** Подключение сломано, брони пока не терялись. Алерт в рабочее время. */
33
+ IntegrationIncidentSeverityEnum["WARNING"] = "warning";
34
+ /** Симптом на будущее: растут таймауты, вендор начал ограничивать частоту. */
35
+ IntegrationIncidentSeverityEnum["INFO"] = "info";
36
+ })(IntegrationIncidentSeverityEnum || (exports.IntegrationIncidentSeverityEnum = IntegrationIncidentSeverityEnum = {}));
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Тип инцидента. Тип определяет и текст алерта, и раздел в ранбуке
3
+ * (`docs/integrations-v2/ui-admin.md`): поддержка должна понимать, что делать,
4
+ * из самого уведомления, а не идти разбираться в логах.
5
+ */
6
+ export declare enum IntegrationIncidentTypeEnum {
7
+ /** Креденшелы отозваны или истекли: 401/403 от вендора. */
8
+ AUTH_FAILED = "auth_failed",
9
+ /** Вендор недоступен: таймауты, 5xx, обрывы. */
10
+ PROVIDER_DOWN = "provider_down",
11
+ /**
12
+ * Ответ пришёл, но не той формы: пропало поле, поменялся тип, сменился
13
+ * формат даты. Для storefront-коннекторов — основной риск, потому что у них
14
+ * нет контракта, есть только вёрстка.
15
+ */
16
+ CONTRACT_VIOLATION = "contract_violation",
17
+ /** Расписание отдаётся, но пустое дольше допустимого. */
18
+ EMPTY_SCHEDULE = "empty_schedule",
19
+ /** Бронь не доехала после всех попыток. Самый дорогой инцидент. */
20
+ BOOKING_FAILED = "booking_failed",
21
+ /** Заявка в режиме `request` не подтверждена квестом за отведённое время. */
22
+ CONFIRMATION_TIMEOUT = "confirmation_timeout",
23
+ /** Вендор ограничил частоту: рискуем баном ключа квеста. */
24
+ RATE_LIMITED = "rate_limited",
25
+ /**
26
+ * Ресурс пропал из выдачи вендора, а к нему привязан наш квест: страница
27
+ * показывает расписание, которого больше нет.
28
+ */
29
+ RESOURCE_GONE = "resource_gone"
30
+ }
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IntegrationIncidentTypeEnum = void 0;
4
+ /**
5
+ * Тип инцидента. Тип определяет и текст алерта, и раздел в ранбуке
6
+ * (`docs/integrations-v2/ui-admin.md`): поддержка должна понимать, что делать,
7
+ * из самого уведомления, а не идти разбираться в логах.
8
+ */
9
+ var IntegrationIncidentTypeEnum;
10
+ (function (IntegrationIncidentTypeEnum) {
11
+ /** Креденшелы отозваны или истекли: 401/403 от вендора. */
12
+ IntegrationIncidentTypeEnum["AUTH_FAILED"] = "auth_failed";
13
+ /** Вендор недоступен: таймауты, 5xx, обрывы. */
14
+ IntegrationIncidentTypeEnum["PROVIDER_DOWN"] = "provider_down";
15
+ /**
16
+ * Ответ пришёл, но не той формы: пропало поле, поменялся тип, сменился
17
+ * формат даты. Для storefront-коннекторов — основной риск, потому что у них
18
+ * нет контракта, есть только вёрстка.
19
+ */
20
+ IntegrationIncidentTypeEnum["CONTRACT_VIOLATION"] = "contract_violation";
21
+ /** Расписание отдаётся, но пустое дольше допустимого. */
22
+ IntegrationIncidentTypeEnum["EMPTY_SCHEDULE"] = "empty_schedule";
23
+ /** Бронь не доехала после всех попыток. Самый дорогой инцидент. */
24
+ IntegrationIncidentTypeEnum["BOOKING_FAILED"] = "booking_failed";
25
+ /** Заявка в режиме `request` не подтверждена квестом за отведённое время. */
26
+ IntegrationIncidentTypeEnum["CONFIRMATION_TIMEOUT"] = "confirmation_timeout";
27
+ /** Вендор ограничил частоту: рискуем баном ключа квеста. */
28
+ IntegrationIncidentTypeEnum["RATE_LIMITED"] = "rate_limited";
29
+ /**
30
+ * Ресурс пропал из выдачи вендора, а к нему привязан наш квест: страница
31
+ * показывает расписание, которого больше нет.
32
+ */
33
+ IntegrationIncidentTypeEnum["RESOURCE_GONE"] = "resource_gone";
34
+ })(IntegrationIncidentTypeEnum || (exports.IntegrationIncidentTypeEnum = IntegrationIncidentTypeEnum = {}));
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Состояние заявки «подключите меня сами» — кнопки, через которую квест
3
+ * передаёт данные нашему разработчику вместо самостоятельной настройки.
4
+ */
5
+ export declare enum IntegrationRequestStatusEnum {
6
+ /** Заявка создана, мы её ещё не смотрели. */
7
+ NEW = "new",
8
+ /** Данных не хватает: ждём ответа квеста. */
9
+ NEED_INFO = "need_info",
10
+ /** Взята в работу. */
11
+ IN_PROGRESS = "in_progress",
12
+ /**
13
+ * Ждём вендора: запросили доступ к API, статус канала, одобрение
14
+ * приложения. Отдельный статус, потому что ожидание тут измеряется
15
+ * неделями и это не наша задержка — но квесту всё равно надо отвечать.
16
+ */
17
+ WAITING_VENDOR = "waiting_vendor",
18
+ /** Подключение создано и работает. */
19
+ DONE = "done",
20
+ /** Отказ: система не поддаётся интеграции или квест передумал. */
21
+ REJECTED = "rejected"
22
+ }