@escapenavigator/types 2.1.17 → 2.1.19

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.
@@ -86,8 +86,7 @@ __decorate([
86
86
  __metadata("design:type", String)
87
87
  ], WidgetClientFormDto.prototype, "companyName", void 0);
88
88
  __decorate([
89
- (0, class_validator_1.ValidateIf)((values) => values.asCompany),
90
- (0, is_not_blank_1.IsNotBlank)(),
89
+ (0, class_validator_1.IsOptional)(),
91
90
  (0, class_transformer_1.Expose)(),
92
91
  __metadata("design:type", String)
93
92
  ], WidgetClientFormDto.prototype, "companyTaxId", void 0);
@@ -82,15 +82,29 @@ export type AdminIntegrationResourceRow = {
82
82
  matchConfidence: number | null;
83
83
  lastSeenAt: string | null;
84
84
  };
85
+ /**
86
+ * Поле доступа в карточке: значение целиком не отдаём.
87
+ * Для URL — хост и путь без query (там часто лежит ключ), для секрета — хвост.
88
+ */
89
+ export type AdminCredentialPreview = {
90
+ key: string;
91
+ kind: 'url' | 'secret' | 'text';
92
+ preview: string;
93
+ };
85
94
  /** Карточка подключения: всё, что нужно для разговора с квестом. */
86
95
  export type AdminIntegrationConnection = AdminIntegrationConnectionRow & {
87
96
  /** Какие поля доступа заполнены. Значения не отдаются никогда. */
88
97
  credentialsFilled: string[];
98
+ /** Ссылки и прочие доступы в безопасном виде — чтобы видеть, что именно подключено. */
99
+ credentialPreviews: AdminCredentialPreview[];
89
100
  settings: Record<string, unknown>;
90
101
  createdAt: string;
91
102
  lastSuccessAt: string | null;
92
103
  lastVerifiedAt: string | null;
93
104
  breakerOpenUntil: string | null;
105
+ verifyError: string | null;
106
+ adminComment: string | null;
107
+ selfServed: boolean;
94
108
  resourceRows: AdminIntegrationResourceRow[];
95
109
  incidents: AdminIntegrationIncidentRow[];
96
110
  runs: AdminIntegrationRunRow[];
@@ -23,6 +23,11 @@ export declare class ConnectIntegrationDto {
23
23
  * указания второй адрес затёр бы уже настроенную комнату.
24
24
  */
25
25
  questroomId?: number;
26
+ /**
27
+ * Существующее подключение при редактировании. Без него повторный ввод
28
+ * ищет «ту же систему» по провайдеру или комнате и может создать второе.
29
+ */
30
+ connectionId?: number;
26
31
  }
27
32
  /**
28
33
  * Подтверждение соответствия комнаты. `questroomId: null` означает «такой
@@ -41,6 +41,12 @@ __decorate([
41
41
  (0, class_validator_1.Min)(1),
42
42
  __metadata("design:type", Number)
43
43
  ], ConnectIntegrationDto.prototype, "questroomId", void 0);
44
+ __decorate([
45
+ (0, class_validator_1.IsOptional)(),
46
+ (0, class_validator_1.IsInt)(),
47
+ (0, class_validator_1.Min)(1),
48
+ __metadata("design:type", Number)
49
+ ], ConnectIntegrationDto.prototype, "connectionId", void 0);
44
50
  /**
45
51
  * Подтверждение соответствия комнаты. `questroomId: null` означает «такой
46
52
  * комнаты у меня нет» — она перестаёт предлагаться и в каталог не идёт.
@@ -81,3 +81,15 @@ export type CrmIntegrationStatus = {
81
81
  /** С какого момента проблема, если она есть. */
82
82
  problemSince: string | null;
83
83
  };
84
+ /**
85
+ * Данные для формы редактирования. Владелец видит свои же ссылки — иначе
86
+ * мастер открывается пустым, и кажется, что подключение стёрлось.
87
+ */
88
+ export type CrmIntegrationConnectionEdit = {
89
+ connectionId: number;
90
+ providerCode: IntegrationProviderCodeEnum;
91
+ title: string;
92
+ questroomId: number | null;
93
+ credentials: Record<string, string>;
94
+ settings: Record<string, unknown>;
95
+ };
@@ -14,7 +14,7 @@ import { OpenapiCreatePreorderDto } from '../orders/openapi-create-preorder.dto'
14
14
  * ни одного ордера не осталось.
15
15
  *
16
16
  * Ограничения:
17
- * • `items.length` в [2, 5] — одиночный preorder идёт через
17
+ * • `items.length` в [2, ORDER_GROUP_SIZE_LIMIT] — одиночный preorder идёт через
18
18
  * POST /openapi/orders/preorder (там нет смысла создавать группу);
19
19
  * верхний лимит — `OrderGroupService.ORDER_GROUP_SIZE_LIMIT`.
20
20
  * • Все items должны иметь идентичные client-fields (name/phone/email/...).
@@ -28,7 +28,7 @@ const openapi_create_preorder_dto_1 = require("../orders/openapi-create-preorder
28
28
  * ни одного ордера не осталось.
29
29
  *
30
30
  * Ограничения:
31
- * • `items.length` в [2, 5] — одиночный preorder идёт через
31
+ * • `items.length` в [2, ORDER_GROUP_SIZE_LIMIT] — одиночный preorder идёт через
32
32
  * POST /openapi/orders/preorder (там нет смысла создавать группу);
33
33
  * верхний лимит — `OrderGroupService.ORDER_GROUP_SIZE_LIMIT`.
34
34
  * • Все items должны иметь идентичные client-fields (name/phone/email/...).
@@ -19,7 +19,7 @@ export declare class OpenapiCreatePreorderDto extends ClientFormDto {
19
19
  * непустой массив, бэкенд создаёт OrderGroupEntity (если её ещё нет)
20
20
  * и привязывает все указанные ордеры + только что созданный к группе.
21
21
  * Используется для оплаты нескольких игр одной транзакцией. Лимит
22
- * группы — 5 ордеров (см. OrderGroupService.ORDER_GROUP_SIZE_LIMIT).
22
+ * группы — `OrderGroupService.ORDER_GROUP_SIZE_LIMIT`.
23
23
  */
24
24
  attachToOrderTokens?: string[];
25
25
  players: number;
@@ -50,6 +50,10 @@ declare class Profile {
50
50
  availableLanguages: Languages[];
51
51
  language: Languages;
52
52
  widgetChatEnabled: boolean;
53
+ /**
54
+ * Moloni / InvoiceXpress настроены — виджет показывает «Fatura com NIF».
55
+ */
56
+ fiscalReady?: boolean;
53
57
  currency?: ProfileCurrencyEnum;
54
58
  }
55
59
  export declare class OpenapiWidgetInfoRO {
@@ -140,6 +140,10 @@ __decorate([
140
140
  (0, class_transformer_1.Expose)(),
141
141
  __metadata("design:type", Boolean)
142
142
  ], Profile.prototype, "widgetChatEnabled", void 0);
143
+ __decorate([
144
+ (0, class_transformer_1.Expose)(),
145
+ __metadata("design:type", Boolean)
146
+ ], Profile.prototype, "fiscalReady", void 0);
143
147
  __decorate([
144
148
  (0, class_transformer_1.Expose)(),
145
149
  (0, class_transformer_1.Transform)((data) => { var _a; return currency_by_country_1.currencyByCountry[(_a = data === null || data === void 0 ? void 0 : data.obj) === null || _a === void 0 ? void 0 : _a.country]; }),
@@ -12,6 +12,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.CreatePromocodeDto = exports.PromocodeNominalRuleDto = void 0;
13
13
  const class_transformer_1 = require("class-transformer");
14
14
  const class_validator_1 = require("class-validator");
15
+ const weekday_indexes_1 = require("../shared/weekday-indexes");
15
16
  const promocode_certificate_mode_enum_1 = require("./emun/promocode-certificate-mode.enum");
16
17
  const promocode_kind_enum_1 = require("./emun/promocode-kind.enum");
17
18
  const promocode_type_enum_1 = require("./emun/promocode-type.enum");
@@ -172,6 +173,11 @@ __decorate([
172
173
  ], CreatePromocodeDto.prototype, "availableTo", void 0);
173
174
  __decorate([
174
175
  (0, class_validator_1.IsOptional)(),
176
+ (0, class_validator_1.IsArray)(),
177
+ (0, class_validator_1.IsInt)({ each: true }),
178
+ (0, class_validator_1.Min)(0, { each: true }),
179
+ (0, class_validator_1.Max)(6, { each: true }),
180
+ (0, class_transformer_1.Transform)(({ value }) => (value == null ? value : (0, weekday_indexes_1.toWeekdayIndexes)(value))),
175
181
  (0, class_transformer_1.Expose)(),
176
182
  __metadata("design:type", Array)
177
183
  ], CreatePromocodeDto.prototype, "availableDays", void 0);
@@ -45,7 +45,7 @@ __decorate([
45
45
  __decorate([
46
46
  (0, class_validator_1.IsOptional)(),
47
47
  (0, class_transformer_1.Expose)(),
48
- (0, class_validator_1.MaxLength)(2500),
48
+ (0, class_validator_1.MaxLength)(3000),
49
49
  __metadata("design:type", String)
50
50
  ], Locale.prototype, "importantInfo", void 0);
51
51
  __decorate([
@@ -294,7 +294,7 @@ __decorate([
294
294
  __decorate([
295
295
  (0, class_validator_1.IsOptional)(),
296
296
  (0, class_transformer_1.Expose)(),
297
- (0, class_validator_1.MaxLength)(2500),
297
+ (0, class_validator_1.MaxLength)(3000),
298
298
  __metadata("design:type", String)
299
299
  ], CreateQuestroomDto.prototype, "importantInfo", void 0);
300
300
  __decorate([
@@ -0,0 +1,6 @@
1
+ /**
2
+ * 0 — пн … 6 — вс. `DaysOfWeek` ещё умеет писать `holiday` / `eve`,
3
+ * но в integer[] (промокоды, пакеты, апселлы) эти ключи класть нельзя:
4
+ * Postgres падает с `invalid input syntax for type integer`.
5
+ */
6
+ export declare const toWeekdayIndexes: (value: unknown) => number[];
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toWeekdayIndexes = void 0;
4
+ /**
5
+ * 0 — пн … 6 — вс. `DaysOfWeek` ещё умеет писать `holiday` / `eve`,
6
+ * но в integer[] (промокоды, пакеты, апселлы) эти ключи класть нельзя:
7
+ * Postgres падает с `invalid input syntax for type integer`.
8
+ */
9
+ const toWeekdayIndexes = (value) => {
10
+ if (!Array.isArray(value))
11
+ return [];
12
+ return value
13
+ .map((day) => Number(day))
14
+ .filter((day) => Number.isInteger(day) && day >= 0 && day <= 6);
15
+ };
16
+ exports.toWeekdayIndexes = toWeekdayIndexes;