platform-types 1.10.852 → 1.10.854

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.
@@ -0,0 +1,216 @@
1
+ /**
2
+ * Customer service-order tracking — the page a customer opens from a link a
3
+ * shop sends (`/servicio/{handle}`), and the same view for a signed-in customer
4
+ * on their account.
5
+ *
6
+ * The HANDLE is 16 base62 characters (~95 bits), stored server-side and a
7
+ * bearer credential over exactly ONE service order of one store. It authorises
8
+ * the read (`GET /services/tracking?handle=`) and the current presupuesto PDF
9
+ * (`GET /services/tracking?handle=&mode=quote-pdf`), and nothing else. Every
10
+ * earlier link of an order dies when staff revoke it. A link stops reading
11
+ * `serviceTrackingLinkDaysAfterClose` days (platform global, default 90) after
12
+ * the order reached a terminal status.
13
+ *
14
+ * The gate is `ecommerce.config.serviceTracking` AND the `workshop` module on.
15
+ * With the gate off, staff cannot mint and the signed-in reads refuse, but a
16
+ * link minted earlier keeps reading (STORE_MODULES rule 4).
17
+ */
18
+ /**
19
+ * The refusals the PUBLIC tracking routes answer themselves.
20
+ *
21
+ * - SERVICE_TRACKING_TOKEN_INVALID (401): every reason a handle cannot be
22
+ * honoured — missing, malformed, unknown, revoked, past the lifetime,
23
+ * presented on another store's host or with no store host at all, or naming
24
+ * an order that is gone or disabled — with one identical body, so a handle is
25
+ * never an oracle.
26
+ * - SERVICE_QUOTE_NOT_FOUND (404, `mode=quote-pdf` only): the order has no
27
+ * current presupuesto a customer was sent.
28
+ */
29
+ export declare const SERVICE_TRACKING_ERROR_CODES: readonly ["SERVICE_TRACKING_TOKEN_INVALID", "SERVICE_QUOTE_NOT_FOUND"];
30
+ export type ServiceTrackingErrorCode = (typeof SERVICE_TRACKING_ERROR_CODES)[number];
31
+ /**
32
+ * The refusals of the signed-in reads (`GET /user?mode=service-orders` and
33
+ * `?mode=service-order&serviceOrderId=`).
34
+ *
35
+ * - SERVICE_TRACKING_DISABLED (403): the store's gate is off.
36
+ * - SERVICE_ORDER_NOT_FOUND (404): no such order, a disabled one, or one that
37
+ * belongs to another customer — one answer for all three.
38
+ */
39
+ export declare const SERVICE_TRACKING_ACCOUNT_ERROR_CODES: readonly ["SERVICE_TRACKING_DISABLED", "SERVICE_ORDER_NOT_FOUND"];
40
+ export type ServiceTrackingAccountErrorCode = (typeof SERVICE_TRACKING_ACCOUNT_ERROR_CODES)[number];
41
+ /**
42
+ * The refusals of the staff `POST /services { mode: 'trackingLink' }`, beside
43
+ * the router's own (`ROLE_FORBIDDEN`, `VALIDATION_FAILED`, `SERVICE_ORDER_NOT_FOUND`).
44
+ *
45
+ * - SERVICE_TRACKING_DISABLED (403, mint only): the store's gate is off.
46
+ * - SERVICE_TRACKING_NO_ADDRESS (409, mint only): the store has no public
47
+ * storefront address to build the link on (no slug, or public links off).
48
+ * - SERVICE_TRACKING_LINK_LAPSED (409, mint only): the order closed more than
49
+ * `serviceTrackingLinkDaysAfterClose` days ago, so a link would not read.
50
+ * - ADMIN_REQUIRED (403, revoke only): revoking takes ADMIN, SUPERVISOR or MANAGER.
51
+ */
52
+ export declare const SERVICE_TRACKING_OPERATOR_ERROR_CODES: readonly ["SERVICE_TRACKING_DISABLED", "SERVICE_TRACKING_NO_ADDRESS", "SERVICE_TRACKING_LINK_LAPSED", "ADMIN_REQUIRED"];
53
+ export type ServiceTrackingOperatorErrorCode = (typeof SERVICE_TRACKING_OPERATOR_ERROR_CODES)[number];
54
+ /** `POST /services { mode: 'trackingLink' }` actions. */
55
+ export declare const SERVICE_TRACKING_LINK_ACTIONS: readonly ["mint", "revoke"];
56
+ /** The storefront path a tracking link opens: `/servicio/{handle}`. */
57
+ export declare const SERVICE_TRACKING_PATH_PREFIX: "/servicio/";
58
+ /** The handle's exact shape: 16 base62 characters. */
59
+ export declare const SERVICE_TRACKING_HANDLE_RE: RegExp;
60
+ declare global {
61
+ type ServiceTrackingLinkAction = (typeof SERVICE_TRACKING_LINK_ACTIONS)[number];
62
+ /** `ServiceOrder.trackingLink` — what staff see of the link; the handle never rides it. */
63
+ interface ServiceTrackingLinkState {
64
+ /** Unix ms the current link was minted. */
65
+ mintedAt: number;
66
+ /** Unix ms every earlier link was revoked; removed by the next mint. */
67
+ revokedAt?: number;
68
+ }
69
+ /** `POST /services { mode: 'trackingLink', action: 'mint' }` — any staff who can open the order. */
70
+ interface ServiceTrackingLinkMintRequest {
71
+ mode: 'trackingLink';
72
+ action: 'mint';
73
+ serviceOrderId: string;
74
+ }
75
+ /**
76
+ * `POST /services { mode: 'trackingLink', action: 'revoke' }` — ADMIN,
77
+ * SUPERVISOR or MANAGER, never under impersonation. Kills every earlier link;
78
+ * the next mint answers a new one.
79
+ */
80
+ interface ServiceTrackingLinkRevokeRequest {
81
+ mode: 'trackingLink';
82
+ action: 'revoke';
83
+ serviceOrderId: string;
84
+ }
85
+ type ServiceTrackingLinkRequest = ServiceTrackingLinkMintRequest | ServiceTrackingLinkRevokeRequest;
86
+ /** The mint answer's `data`: the link at the current generation (one link per generation, so a repeat mint answers the same URL). */
87
+ interface ServiceTrackingLinkMintResult {
88
+ url: string;
89
+ trackingLink: ServiceTrackingLinkState;
90
+ }
91
+ /** The revoke answer's `data`. `trackingLink` is absent when the order never had a link (nothing is written on it then). */
92
+ interface ServiceTrackingLinkRevokeResult {
93
+ trackingLink?: ServiceTrackingLinkState;
94
+ }
95
+ /**
96
+ * `POST /services/tracking/recover` body (strict): ask for the tracking link of
97
+ * one service ticket. Always `202` with one fixed body, whether or not anything
98
+ * matched; a match mails the live link to the address STORED on the ticket's
99
+ * customer (never this one). Only a malformed body answers otherwise (`400`).
100
+ */
101
+ interface ServiceTrackingRecoverRequest {
102
+ /** The ticket number the shop printed on the order: digits, at least 6. */
103
+ ticketNumber: string;
104
+ email: string;
105
+ }
106
+ /** One step of the status history as the customer sees it — no operator, no note. */
107
+ interface ServiceTrackingTimelineEntry {
108
+ status: ServiceStatus;
109
+ /** Unix ms. */
110
+ at: number;
111
+ }
112
+ /** The equipment as taken in. Every field is optional; the serial travels as its last four characters only. */
113
+ interface ServiceTrackingEquipment {
114
+ type?: string;
115
+ brand?: string;
116
+ model?: string;
117
+ serialLast4?: string;
118
+ accessories?: string[];
119
+ condition?: string;
120
+ reportedIssue?: string;
121
+ }
122
+ /** One material the presupuesto proposes — no product id, no SKU, no money. */
123
+ interface ServiceTrackingQuotePart {
124
+ name: string;
125
+ quantity: number;
126
+ condition: PartCondition;
127
+ }
128
+ /**
129
+ * The current presupuesto as the customer was sent it — never a draft, never
130
+ * a superseded version. `status` is that version's own: `sent` (awaiting a
131
+ * decision), `approved`, `rejected` or `expired`.
132
+ */
133
+ interface ServiceTrackingQuote {
134
+ quoteId: string;
135
+ status: Exclude<ServiceQuoteStatus, 'draft' | 'superseded'>;
136
+ laborCost?: number;
137
+ partsCost?: number;
138
+ amount: number;
139
+ /** The version's own stamp, else the order's. */
140
+ currency: string;
141
+ /** Unix ms. */
142
+ quotedAt?: number;
143
+ /** Unix ms the offer lapses (Ley 24.240 art. 21(g)). */
144
+ expiresAt?: number;
145
+ parts: ServiceTrackingQuotePart[];
146
+ /** Unix ms of the approval or the rejection. */
147
+ decidedAt?: number;
148
+ }
149
+ /** Whether the customer may decide the presupuesto online. */
150
+ interface ServiceTrackingDecision {
151
+ /** `false` until the online decision ships. */
152
+ canDecide: boolean;
153
+ /** Whether an approval needs the 6-digit code sent to the contact on file. */
154
+ approveNeedsCode: boolean;
155
+ }
156
+ /** The customer's contact as the shop holds it, masked. */
157
+ interface ServiceTrackingContact {
158
+ firstName: string;
159
+ emailMasked?: string;
160
+ phoneMasked?: string;
161
+ }
162
+ /** The shop, as the page names it. `contact` is the storefront's published contact (empty when the shop publishes none). */
163
+ interface ServiceTrackingStore {
164
+ name: string;
165
+ logoUrl?: string;
166
+ contact: StorefrontPublicContact;
167
+ }
168
+ /**
169
+ * The tracking view, built by ALLOW-LIST. Never carries operator notes,
170
+ * diagnosis notes, merchant part costs, work logs, the technician, any user
171
+ * or customer id, a rejection note, a draft or a superseded quote version.
172
+ */
173
+ interface ServiceTrackingView {
174
+ ticketNumber: string;
175
+ serviceType: ServiceType;
176
+ status: ServiceStatus;
177
+ /** The status history, oldest first. */
178
+ timeline: ServiceTrackingTimelineEntry[];
179
+ /** Present only while work is blocked. */
180
+ hold?: {
181
+ reason: ServiceHoldReason;
182
+ expectedUntil?: number;
183
+ };
184
+ custody: ServiceCustody;
185
+ /** Unix ms. */
186
+ promisedAt?: number;
187
+ /** Unix ms. */
188
+ readyAt?: number;
189
+ equipment: ServiceTrackingEquipment;
190
+ /** What was actually wrong, as told to the customer. */
191
+ faultFound?: string;
192
+ quote?: ServiceTrackingQuote;
193
+ /** Unix ms. */
194
+ warrantyExpiresAt?: number;
195
+ decision: ServiceTrackingDecision;
196
+ contact: ServiceTrackingContact;
197
+ store: ServiceTrackingStore;
198
+ }
199
+ /** One row of `GET /user?mode=service-orders`. */
200
+ interface ServiceTrackingAccountListItem {
201
+ serviceOrderId: string;
202
+ ticketNumber: string;
203
+ serviceType: ServiceType;
204
+ status: ServiceStatus;
205
+ /** Unix ms. */
206
+ createdAt: number;
207
+ /** Unix ms. */
208
+ promisedAt?: number;
209
+ equipment: Pick<ServiceTrackingEquipment, 'type' | 'brand' | 'model'>;
210
+ }
211
+ /** `GET /user?mode=service-orders` `data`. `truncated` when more orders exist than were returned. */
212
+ interface ServiceTrackingAccountList {
213
+ serviceOrders: ServiceTrackingAccountListItem[];
214
+ truncated: boolean;
215
+ }
216
+ }
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Customer service-order tracking — the page a customer opens from a link a
3
+ * shop sends (`/servicio/{handle}`), and the same view for a signed-in customer
4
+ * on their account.
5
+ *
6
+ * The HANDLE is 16 base62 characters (~95 bits), stored server-side and a
7
+ * bearer credential over exactly ONE service order of one store. It authorises
8
+ * the read (`GET /services/tracking?handle=`) and the current presupuesto PDF
9
+ * (`GET /services/tracking?handle=&mode=quote-pdf`), and nothing else. Every
10
+ * earlier link of an order dies when staff revoke it. A link stops reading
11
+ * `serviceTrackingLinkDaysAfterClose` days (platform global, default 90) after
12
+ * the order reached a terminal status.
13
+ *
14
+ * The gate is `ecommerce.config.serviceTracking` AND the `workshop` module on.
15
+ * With the gate off, staff cannot mint and the signed-in reads refuse, but a
16
+ * link minted earlier keeps reading (STORE_MODULES rule 4).
17
+ */
18
+ /**
19
+ * The refusals the PUBLIC tracking routes answer themselves.
20
+ *
21
+ * - SERVICE_TRACKING_TOKEN_INVALID (401): every reason a handle cannot be
22
+ * honoured — missing, malformed, unknown, revoked, past the lifetime,
23
+ * presented on another store's host or with no store host at all, or naming
24
+ * an order that is gone or disabled — with one identical body, so a handle is
25
+ * never an oracle.
26
+ * - SERVICE_QUOTE_NOT_FOUND (404, `mode=quote-pdf` only): the order has no
27
+ * current presupuesto a customer was sent.
28
+ */
29
+ export const SERVICE_TRACKING_ERROR_CODES = ['SERVICE_TRACKING_TOKEN_INVALID', 'SERVICE_QUOTE_NOT_FOUND'];
30
+ /**
31
+ * The refusals of the signed-in reads (`GET /user?mode=service-orders` and
32
+ * `?mode=service-order&serviceOrderId=`).
33
+ *
34
+ * - SERVICE_TRACKING_DISABLED (403): the store's gate is off.
35
+ * - SERVICE_ORDER_NOT_FOUND (404): no such order, a disabled one, or one that
36
+ * belongs to another customer — one answer for all three.
37
+ */
38
+ export const SERVICE_TRACKING_ACCOUNT_ERROR_CODES = ['SERVICE_TRACKING_DISABLED', 'SERVICE_ORDER_NOT_FOUND'];
39
+ /**
40
+ * The refusals of the staff `POST /services { mode: 'trackingLink' }`, beside
41
+ * the router's own (`ROLE_FORBIDDEN`, `VALIDATION_FAILED`, `SERVICE_ORDER_NOT_FOUND`).
42
+ *
43
+ * - SERVICE_TRACKING_DISABLED (403, mint only): the store's gate is off.
44
+ * - SERVICE_TRACKING_NO_ADDRESS (409, mint only): the store has no public
45
+ * storefront address to build the link on (no slug, or public links off).
46
+ * - SERVICE_TRACKING_LINK_LAPSED (409, mint only): the order closed more than
47
+ * `serviceTrackingLinkDaysAfterClose` days ago, so a link would not read.
48
+ * - ADMIN_REQUIRED (403, revoke only): revoking takes ADMIN, SUPERVISOR or MANAGER.
49
+ */
50
+ export const SERVICE_TRACKING_OPERATOR_ERROR_CODES = [
51
+ 'SERVICE_TRACKING_DISABLED',
52
+ 'SERVICE_TRACKING_NO_ADDRESS',
53
+ 'SERVICE_TRACKING_LINK_LAPSED',
54
+ 'ADMIN_REQUIRED',
55
+ ];
56
+ /** `POST /services { mode: 'trackingLink' }` actions. */
57
+ export const SERVICE_TRACKING_LINK_ACTIONS = ['mint', 'revoke'];
58
+ /** The storefront path a tracking link opens: `/servicio/{handle}`. */
59
+ export const SERVICE_TRACKING_PATH_PREFIX = '/servicio/';
60
+ /** The handle's exact shape: 16 base62 characters. */
61
+ export const SERVICE_TRACKING_HANDLE_RE = /^[0-9A-Za-z]{16}$/;
package/dist/store.d.ts CHANGED
@@ -182,6 +182,19 @@ declare global {
182
182
  * frame), so the storefront can offer the request.
183
183
  */
184
184
  wholesaleRequests?: boolean;
185
+ /**
186
+ * Whether the shop's customers can follow their service orders online: the
187
+ * tracking link (`/servicio/{handle}`) staff mint with
188
+ * `POST /services { mode: 'trackingLink' }`, and the signed-in
189
+ * `GET /user?mode=service-orders`. Absent or `false` = off. Honoured only
190
+ * while the `workshop` module is on (`config.modules.workshop !== false`).
191
+ * Turning it off later stops new links and the signed-in reads; links
192
+ * already minted keep reading (STORE_MODULES rule 4). Written by
193
+ * `PATCH /store` (ADMIN) and `PUT /platform/stores/{storeId}` (MANAGER).
194
+ * SENT TO SHOPPERS as the verdict (web `GET /store` and the customer
195
+ * `stores` frame): stored `true` AND the workshop module on.
196
+ */
197
+ serviceTracking?: boolean;
185
198
  /**
186
199
  * Whether the shop sells to shoppers without an account (server guest
187
200
  * cart, guest checkout). Absent means ON: a shop opts out by storing
@@ -260,7 +273,7 @@ declare global {
260
273
  * (Responsable Inscripto) refuses 409 NET_PLUS_IVA_REQUIRES_RI; nothing written.
261
274
  */
262
275
  interface EcommercePatchInput {
263
- config?: Pick<NonNullable<Ecommerce['config']>, 'showDefaultPriceList' | 'newCustomerPriceList' | 'registrationMode' | 'wholesaleRequests' | 'paymentHoldMinutes'> & StorefrontLiveSettingsPatch;
276
+ config?: Pick<NonNullable<Ecommerce['config']>, 'showDefaultPriceList' | 'newCustomerPriceList' | 'registrationMode' | 'wholesaleRequests' | 'serviceTracking' | 'paymentHoldMinutes'> & StorefrontLiveSettingsPatch;
264
277
  sidebar?: Ecommerce['sidebar'];
265
278
  home?: Omit<NonNullable<Ecommerce['home']>, 'displayOrders' | 'displayProfile'>;
266
279
  themeColors?: Ecommerce['themeColors'];
@@ -23,6 +23,10 @@ import { STOREFRONT_DESIGN_LITERAL_MAX_CODE_POINTS } from "./storefrontDesignReg
23
23
  * parameters.
24
24
  */
25
25
  export const STOREFRONT_WEB_LITERAL_KEYS = Object.freeze([
26
+ 'ADDRESSES_IS_DEFAULT',
27
+ 'ADDRESSES_LIMIT_REACHED',
28
+ 'ADDRESSES_NOT_FOUND',
29
+ 'ADDRESSES_WRITE_CONTENDED',
26
30
  'ALERT_INCLUDED_VAT',
27
31
  'APPOINTMENTS_BOOKED_DESC',
28
32
  'APPOINTMENTS_BOOKED_TITLE',
@@ -320,9 +324,11 @@ export const STOREFRONT_WEB_LITERAL_KEYS = Object.freeze([
320
324
  'BASKET_LINE_LIMIT_REACHED',
321
325
  'BASKET_LINE_NOT_LOADED',
322
326
  'BASKET_LINE_NOT_OFFERED',
327
+ 'BASKET_LINE_NO_PRICE',
323
328
  'BASKET_LINE_OUT_OF_STOCK',
324
329
  'BASKET_LINE_STOCK_SHORT_HIDDEN',
325
330
  'BASKET_LINE_UNAVAILABLE',
331
+ 'BASKET_LINE_WITHDRAWN',
326
332
  'BASKET_LOADING',
327
333
  'BASKET_MIN_BUY_MISSING',
328
334
  'BASKET_NEXT_BUTTON',
@@ -353,8 +359,28 @@ export const STOREFRONT_WEB_LITERAL_KEYS = Object.freeze([
353
359
  'BASKET_UNDO_ACTION',
354
360
  'BASKET_UPDATED_CONFIRMATION',
355
361
  'BASKET_VIEW_BASKET_ACTION',
362
+ 'BRANDS_DIRECTORY_EMPTY',
356
363
  'BRANDS_ERR_LOAD',
364
+ 'BRANDS_FILTER_ALL',
365
+ 'BRANDS_JUMP_LABEL',
366
+ 'BRANDS_LETTERS_LABEL',
367
+ 'BRANDS_LETTER_OTHER',
368
+ 'BRANDS_LETTER_OTHER_LABEL',
369
+ 'BRANDS_SEARCH_CLEAR',
370
+ 'BRANDS_SEARCH_LABEL',
371
+ 'BRANDS_SHOW_MORE',
357
372
  'BRANDS_TITLE',
373
+ 'BRAND_BREADCRUMB_LABEL',
374
+ 'BRAND_DESCRIPTION_MORE',
375
+ 'CATEGORY_DIRECTORY_EMPTY',
376
+ 'CATEGORY_DIRECTORY_EMPTY_ACTION',
377
+ 'CATEGORY_DIRECTORY_FAILED',
378
+ 'CATEGORY_DIRECTORY_JUMP_LABEL',
379
+ 'CATEGORY_MORE_ROOTS_TITLE',
380
+ 'CATEGORY_SHOW_LESS',
381
+ 'CATEGORY_SIBLINGS_LABEL',
382
+ 'CATEGORY_SUBCATEGORIES_LABEL',
383
+ 'CATEGORY_VIEW_ALL',
358
384
  'CHECKOUT_ACCESS_PENDING',
359
385
  'CHECKOUT_ACCESS_REJECTED',
360
386
  'CHECKOUT_ACCOUNT_DISABLED',
@@ -423,7 +449,6 @@ export const STOREFRONT_WEB_LITERAL_KEYS = Object.freeze([
423
449
  'CHECKOUT_DNI_REQUIRED_MESSAGE',
424
450
  'CHECKOUT_DNI_REQUIRED_MESSAGE_NO_THRESHOLD',
425
451
  'CHECKOUT_EDIT_BASKET',
426
- 'CHECKOUT_EMAIL_VERIFICATION_REQUIRED',
427
452
  'CHECKOUT_EMPTY_BASKET',
428
453
  'CHECKOUT_FX_NOTICE_PAYING',
429
454
  'CHECKOUT_FX_NOTICE_PREFERRED',
@@ -538,11 +563,13 @@ export const STOREFRONT_WEB_LITERAL_KEYS = Object.freeze([
538
563
  'DATA_RIGHTS_COLLECTION_CONTACTS',
539
564
  'DATA_RIGHTS_COLLECTION_FAVORITES',
540
565
  'DATA_RIGHTS_COLLECTION_INVOICES',
566
+ 'DATA_RIGHTS_COLLECTION_LOYALTY',
541
567
  'DATA_RIGHTS_COLLECTION_NOTES',
542
568
  'DATA_RIGHTS_COLLECTION_ORDERS',
543
569
  'DATA_RIGHTS_COLLECTION_PAYMENTS',
544
570
  'DATA_RIGHTS_COLLECTION_QUOTE_REQUESTS',
545
571
  'DATA_RIGHTS_COLLECTION_RECENT_PURCHASES',
572
+ 'DATA_RIGHTS_COLLECTION_SERVICE_ORDERS',
546
573
  'DATA_RIGHTS_COLLECTION_WHOLESALE_REQUESTS',
547
574
  'DATA_RIGHTS_DIALOG_ACK',
548
575
  'DATA_RIGHTS_DIALOG_CONFIRM',
@@ -623,6 +650,11 @@ export const STOREFRONT_WEB_LITERAL_KEYS = Object.freeze([
623
650
  'FAVORITES_TOGGLE_ARIA',
624
651
  'FAVORITES_TOGGLE_NAME',
625
652
  'FAVORITES_UNAVAILABLE',
653
+ 'FOOTER_DEFAULT_ACCOUNT_TITLE',
654
+ 'FOOTER_DEFAULT_CONTACT',
655
+ 'FOOTER_DEFAULT_HELP_TITLE',
656
+ 'FOOTER_DEFAULT_SHOP_TITLE',
657
+ 'FOOTER_LEGAL_NAV_ARIA',
626
658
  'FOOTER_PRIVACY_POLICY',
627
659
  'FORMS_FIELD_DNI_LABEL',
628
660
  'FORMS_FIELD_PHONE_LABEL',
@@ -669,7 +701,6 @@ export const STOREFRONT_WEB_LITERAL_KEYS = Object.freeze([
669
701
  'FORMS_ZOD_VALUE_OPTIONS',
670
702
  'FORM_FIX_ERRORS',
671
703
  'GLOBALS_APPOINTMENTS',
672
- 'GLOBALS_APP_VERSION',
673
704
  'GLOBALS_BASKET',
674
705
  'GLOBALS_BRANDS',
675
706
  'GLOBALS_CATEGORIES',
@@ -741,6 +772,9 @@ export const STOREFRONT_WEB_LITERAL_KEYS = Object.freeze([
741
772
  'HEADER_SEARCH_INPUT',
742
773
  'HEADER_SEARCH_LABEL',
743
774
  'HEADER_SEARCH_RECENT',
775
+ 'HEADER_SEARCH_RECENT_CLEAR',
776
+ 'HEADER_SEARCH_RECENT_CLEAR_ARIA',
777
+ 'HEADER_SEARCH_RECENT_REMOVE',
744
778
  'HEADER_SEARCH_SUGGESTIONS',
745
779
  'HEADER_SEARCH_SUGGESTION_BARCODE',
746
780
  'HEADER_SEARCH_SUGGESTION_SKU',
@@ -886,7 +920,9 @@ export const STOREFRONT_WEB_LITERAL_KEYS = Object.freeze([
886
920
  'MAINTENANCE_REDIRECT_TO_BASKET',
887
921
  'MAINTENANCE_SUPPORT_HINT_EMAIL',
888
922
  'MAINTENANCE_SURVEY_DISABLED',
923
+ 'MAINTENANCE_WHATSAPP_OPT_IN_DISABLED',
889
924
  'MAINTENANCE_WHOLESALE_REQUEST_DISABLED',
925
+ 'MAINTENANCE_WITHDRAWAL_DISABLED',
890
926
  'MARKETING_ACTIVATE_ALL',
891
927
  'MARKETING_ACTIVE_COUNT',
892
928
  'MARKETING_CHANNEL_ADS',
@@ -895,12 +931,6 @@ export const STOREFRONT_WEB_LITERAL_KEYS = Object.freeze([
895
931
  'MARKETING_CHANNEL_EMAIL',
896
932
  'MARKETING_CHANNEL_EMAIL_DESC',
897
933
  'MARKETING_CHANNEL_EMAIL_EXAMPLE',
898
- 'MARKETING_CHANNEL_SMS',
899
- 'MARKETING_CHANNEL_SMS_DESC',
900
- 'MARKETING_CHANNEL_SMS_EXAMPLE',
901
- 'MARKETING_CHANNEL_WHATSAPP',
902
- 'MARKETING_CHANNEL_WHATSAPP_DESC',
903
- 'MARKETING_CHANNEL_WHATSAPP_EXAMPLE',
904
934
  'MARKETING_DEACTIVATE_ALL',
905
935
  'MARKETING_ERROR_MESSAGE',
906
936
  'MARKETING_EXAMPLE_PREFIX',
@@ -920,6 +950,7 @@ export const STOREFRONT_WEB_LITERAL_KEYS = Object.freeze([
920
950
  'MOBILE_BUTTONS_BASKET',
921
951
  'MOBILE_BUTTONS_FAVORITES',
922
952
  'MOBILE_BUTTONS_INVOICES',
953
+ 'MOBILE_BUTTONS_NAV_ARIA',
923
954
  'MOBILE_BUTTONS_ORDERS',
924
955
  'NETWORK_OFFLINE',
925
956
  'NETWORK_REQUEST_FAILED',
@@ -948,6 +979,10 @@ export const STOREFRONT_WEB_LITERAL_KEYS = Object.freeze([
948
979
  'NOTIFICATION_PREFS_SUBTITLE',
949
980
  'NOTIFICATION_PREFS_TITLE',
950
981
  'NOTIFICATION_PREFS_UNAVAILABLE_RETRY',
982
+ 'NOTIFICATION_PREFS_WHATSAPP_ARIA',
983
+ 'NOTIFICATION_PREFS_WHATSAPP_DESCRIPTION',
984
+ 'NOTIFICATION_PREFS_WHATSAPP_LABEL',
985
+ 'NOTIFICATION_PREFS_WHATSAPP_NOT_SAVED',
951
986
  'NOT_FOUND_BACK_HOME',
952
987
  'NOT_FOUND_PAGE_BODY',
953
988
  'NOT_FOUND_PAGE_TITLE',
@@ -1176,6 +1211,7 @@ export const STOREFRONT_WEB_LITERAL_KEYS = Object.freeze([
1176
1211
  'PREVIEW_UNAVAILABLE_ACTION',
1177
1212
  'PREVIEW_VARIANTS',
1178
1213
  'PREVIEW_WAITING',
1214
+ 'PRICING_NET_PLUS_IVA',
1179
1215
  'PRICING_TIER_CHIP',
1180
1216
  'PRICING_TIER_FROM',
1181
1217
  'PRICING_TIER_UNITS',
@@ -1186,10 +1222,14 @@ export const STOREFRONT_WEB_LITERAL_KEYS = Object.freeze([
1186
1222
  'PRODUCTS_CLEAR_FILTERS',
1187
1223
  'PRODUCTS_FILTERS_LABEL',
1188
1224
  'PRODUCTS_FILTER_ALL_BRANDS',
1225
+ 'PRODUCTS_FILTER_ALL_CATEGORIES',
1189
1226
  'PRODUCTS_FILTER_ALL_PRODUCTS',
1190
1227
  'PRODUCTS_FILTER_ALL_TAGS',
1191
1228
  'PRODUCTS_FILTER_AVAILABILITY',
1192
1229
  'PRODUCTS_FILTER_BRAND',
1230
+ 'PRODUCTS_FILTER_BRAND_UNAVAILABLE',
1231
+ 'PRODUCTS_FILTER_CATEGORY',
1232
+ 'PRODUCTS_FILTER_CATEGORY_UNAVAILABLE',
1193
1233
  'PRODUCTS_FILTER_IN_OFFER',
1194
1234
  'PRODUCTS_FILTER_IN_STOCK',
1195
1235
  'PRODUCTS_FILTER_TAG',
@@ -1200,10 +1240,14 @@ export const STOREFRONT_WEB_LITERAL_KEYS = Object.freeze([
1200
1240
  'PRODUCTS_NO_INCOMES',
1201
1241
  'PRODUCTS_NO_MATCHES',
1202
1242
  'PRODUCTS_NO_RESULTS',
1243
+ 'PRODUCTS_PICK_SUBCATEGORY',
1203
1244
  'PRODUCTS_SEARCH_TITLE',
1204
- 'PRODUCTS_SELECT_CATEGORY',
1205
1245
  'PRODUCTS_SORT_LABEL',
1246
+ 'PRODUCTS_SORT_NAME_ASC',
1247
+ 'PRODUCTS_SORT_NAME_DESC',
1206
1248
  'PRODUCTS_SORT_NEWEST',
1249
+ 'PRODUCTS_SORT_PRICE_ASC',
1250
+ 'PRODUCTS_SORT_PRICE_DESC',
1207
1251
  'PRODUCTS_SORT_RELEVANCE',
1208
1252
  'PRODUCTS_TAG_NOT_FOUND',
1209
1253
  'PRODUCTS_TAG_TITLE',
@@ -1247,6 +1291,8 @@ export const STOREFRONT_WEB_LITERAL_KEYS = Object.freeze([
1247
1291
  'PRODUCT_INFO_TITLE',
1248
1292
  'PRODUCT_LOAD_FAILED',
1249
1293
  'PRODUCT_PAGE_TITLE',
1294
+ 'PRODUCT_PRICE_ON_REQUEST',
1295
+ 'PRODUCT_PRICE_ON_REQUEST_HINT',
1250
1296
  'PRODUCT_PRICE_PER_UNIT',
1251
1297
  'PRODUCT_PROMOTIONS_HINT',
1252
1298
  'PRODUCT_PROMOTIONS_TITLE',
@@ -1398,6 +1444,7 @@ export const STOREFRONT_WEB_LITERAL_KEYS = Object.freeze([
1398
1444
  'QUOTE_REQUEST_SIGNED_IN_HINT',
1399
1445
  'QUOTE_REQUEST_SUBMIT',
1400
1446
  'QUOTE_REQUEST_SUCCESS',
1447
+ 'REORDER_SHELF_TITLE',
1401
1448
  'SALE_BADGE_OFFER',
1402
1449
  'SALE_CHIP_ALL',
1403
1450
  'SALE_DISCOUNT_PERCENT',
@@ -1486,6 +1533,14 @@ export const STOREFRONT_WEB_LITERAL_KEYS = Object.freeze([
1486
1533
  'SURVEY_TITLE',
1487
1534
  'SYNC_ALERT_ERROR_MESSAGE',
1488
1535
  'SYNC_ALERT_OFFLINE_MESSAGE',
1536
+ 'WHATSAPP_OPT_IN_ERROR',
1537
+ 'WHATSAPP_OPT_IN_HELP_GUEST',
1538
+ 'WHATSAPP_OPT_IN_HELP_SIGNED_IN',
1539
+ 'WHATSAPP_OPT_IN_OFFER_ACTION',
1540
+ 'WHATSAPP_OPT_IN_OFFER_TEXT',
1541
+ 'WHATSAPP_OPT_IN_PROFILE_LINK',
1542
+ 'WHATSAPP_OPT_IN_SUCCESS',
1543
+ 'WHATSAPP_OPT_IN_UNAVAILABLE',
1489
1544
  'WHOLESALE_REQUEST_ACTIVITY_LABEL',
1490
1545
  'WHOLESALE_REQUEST_ALREADY_PENDING',
1491
1546
  'WHOLESALE_REQUEST_APPROVED',
@@ -939,6 +939,21 @@ declare global {
939
939
  payment_id: string;
940
940
  source: 'mp' | 'stripe' | 'mp_movement';
941
941
  }
942
+ /**
943
+ * ADMIN-tier staff reversed a linked payment's ledger credit (`POST /payments/{source}/{paymentId}/link`
944
+ * `{ mode: 'reverse-credit' }`). `user_id` is the acting operator; `customer_id` the customer whose
945
+ * balance rose by `amount` (in the ledger `currency`). Ids and figures only — never the operator's reason.
946
+ * BE-emitted, after the commit.
947
+ */
948
+ interface PaymentCreditReversedEvent extends UserActivityEventBase {
949
+ event: 'Payment Credit Reversed';
950
+ payment_id: string;
951
+ source: PaymentReceivedSource;
952
+ customer_id: string;
953
+ reversal_account_id: string;
954
+ amount: number;
955
+ currency: string;
956
+ }
942
957
  interface PaymentLinkageUpdatedEvent extends UserActivityEventBase {
943
958
  event: 'Payment Linkage Updated';
944
959
  payment_id: string;
@@ -1400,7 +1415,7 @@ declare global {
1400
1415
  event: 'Store Network Removed';
1401
1416
  network_id: string;
1402
1417
  }
1403
- type UserActivityEvent = CustomerConsentImportedEvent | CustomerConsentImportCompletedEvent | UserLoggedInEvent | UserLoggedOutEvent | UserPasswordChangedEvent | UserSuspendedEvent | TwoFactorEnrolledEvent | TwoFactorDisabledEvent | TwoFactorResetEvent | TwoFactorRecoveryCodesGeneratedEvent | PasskeyRegisteredEvent | PasskeyRevokedEvent | CustomerPasskeysRevokedEvent | StoreSettingsUpdatedEvent | PlanChangedEvent | InvoiceCreatedEvent | OrderCreatedEvent | OrderCancelledEvent | OrderEditedEvent | OrderReturnedEvent | ReturnLineRegradedEvent | ProductPriceChangedEvent | CustomerCreatedEvent | CustomerEditedEvent | CustomerRecordServedEvent | CustomerCreditCheckPerformedEvent | CustomersMergedEvent | CustomerMergeCancelledEvent | CashDrawerOpenedEvent | CashDrawerClosedEvent | TenantImpersonatedEvent | SecretRotatedEvent | UserCreatedEvent | UserUpdatedEvent | ProductCreatedEvent | ProductUpdatedEvent | StockIncomeCreatedEvent | StockAdjustedEvent | CategoryCreatedEvent | CategoryUpdatedEvent | BrandCreatedEvent | BrandUpdatedEvent | AttributeCreatedEvent | AttributeUpdatedEvent | SupplierCreatedEvent | SupplierUpdatedEvent | SupplierInvoiceCreatedEvent | SupplierInvoiceMatchOverriddenEvent | SupplierClaimRaisedEvent | SupplierClaimStatusChangedEvent | SupplierAccountCreatedEvent | SupplierAccountUpdatedEvent | AccountCreatedEvent | AccountDeletedEvent | CustomerBalanceReprojectedEvent | BasketUpdatedEvent | BasketDiscountGrantedEvent | BasketDeletedEvent | CashDrawerMovementEvent | CashDrawerReconciledEvent | PaymentCreatedEvent | PaymentLinkedEvent | PaymentUnlinkedEvent | PaymentLinkageUpdatedEvent | CreditLimitOverriddenEvent | AppointmentSelfBookingBlockOverriddenEvent | AppointmentSelfBookingBlockLiftedEvent | NotificationReadEvent | LogDeletedEvent | PlanCreatedEvent | StoreMaintenanceToggledEvent | PlatformMaintenanceToggledEvent | MaintenanceBroadcastSentEvent | TenantCreatedEvent | LiteralUpdatedEvent | SupportTicketCreatedEvent | SupportTicketUpdatedEvent | AuditTrailViewedEvent | ReportViewedEvent | CustomerPiiViewedEvent | CashDrawerUiOpenedEvent | CashDrawerUiClosedEvent | ExportInitiatedEvent | ImpersonationUiStartedEvent | ImpersonationUiEndedEvent | PaymentViewedEvent | InvoiceViewedEvent | CustomerDetailViewedEvent | SupplierAccountViewedEvent | SearchPerformedEvent | ActionDeniedEvent | TwoFactorChallengeShownEvent | TwoFactorCodeValidationFailedEvent | TwoFactorEnrollmentStartedEvent | TwoFactorRecoveryCodesRevealedEvent | TwoFactorResetInitiatedEvent | IntegrationTokenRefreshedEvent | WaitlistConvertedEvent | PlatformConfigUpdatedEvent | MlChannelStatusChangedEvent | IntegrationConnectionChangedEvent | PrintRuleCreatedEvent | PrintRuleEditedEvent | PrintRuleDeletedEvent | WebhookCreatedEvent | WebhookUpdatedEvent | WebhookDeletedEvent | PrinterActiveToggledEvent | PrinterRawFormatsUpdatedEvent | PrinterProfileUpdatedEvent | PlanTemplateUpdatedEvent | SupplierAccountDeletedEvent | CustomerPasswordResetInitiatedEvent | UserSessionsRevokedEvent | UserAnonymizedEvent | UserPasswordResetInitiatedByOperatorEvent | AgentCommandDispatchedEvent | PrintJobCancelledEvent | PrintAgentPairingCodeMintedEvent | PrintAgentPairedEvent | PrintAgentRevokedEvent | RmaRequestedEvent | RmaTransitionedEvent | RmaTrackingUpdatedEvent | ClockedInEvent | ClockedOutEvent | AttendanceCorrectedEvent | StoreNetworkRegisteredEvent | StoreNetworkRemovedEvent;
1418
+ type UserActivityEvent = CustomerConsentImportedEvent | CustomerConsentImportCompletedEvent | UserLoggedInEvent | UserLoggedOutEvent | UserPasswordChangedEvent | UserSuspendedEvent | TwoFactorEnrolledEvent | TwoFactorDisabledEvent | TwoFactorResetEvent | TwoFactorRecoveryCodesGeneratedEvent | PasskeyRegisteredEvent | PasskeyRevokedEvent | CustomerPasskeysRevokedEvent | StoreSettingsUpdatedEvent | PlanChangedEvent | InvoiceCreatedEvent | OrderCreatedEvent | OrderCancelledEvent | OrderEditedEvent | OrderReturnedEvent | ReturnLineRegradedEvent | ProductPriceChangedEvent | CustomerCreatedEvent | CustomerEditedEvent | CustomerRecordServedEvent | CustomerCreditCheckPerformedEvent | CustomersMergedEvent | CustomerMergeCancelledEvent | CashDrawerOpenedEvent | CashDrawerClosedEvent | TenantImpersonatedEvent | SecretRotatedEvent | UserCreatedEvent | UserUpdatedEvent | ProductCreatedEvent | ProductUpdatedEvent | StockIncomeCreatedEvent | StockAdjustedEvent | CategoryCreatedEvent | CategoryUpdatedEvent | BrandCreatedEvent | BrandUpdatedEvent | AttributeCreatedEvent | AttributeUpdatedEvent | SupplierCreatedEvent | SupplierUpdatedEvent | SupplierInvoiceCreatedEvent | SupplierInvoiceMatchOverriddenEvent | SupplierClaimRaisedEvent | SupplierClaimStatusChangedEvent | SupplierAccountCreatedEvent | SupplierAccountUpdatedEvent | AccountCreatedEvent | AccountDeletedEvent | CustomerBalanceReprojectedEvent | BasketUpdatedEvent | BasketDiscountGrantedEvent | BasketDeletedEvent | CashDrawerMovementEvent | CashDrawerReconciledEvent | PaymentCreatedEvent | PaymentLinkedEvent | PaymentUnlinkedEvent | PaymentCreditReversedEvent | PaymentLinkageUpdatedEvent | CreditLimitOverriddenEvent | AppointmentSelfBookingBlockOverriddenEvent | AppointmentSelfBookingBlockLiftedEvent | NotificationReadEvent | LogDeletedEvent | PlanCreatedEvent | StoreMaintenanceToggledEvent | PlatformMaintenanceToggledEvent | MaintenanceBroadcastSentEvent | TenantCreatedEvent | LiteralUpdatedEvent | SupportTicketCreatedEvent | SupportTicketUpdatedEvent | AuditTrailViewedEvent | ReportViewedEvent | CustomerPiiViewedEvent | CashDrawerUiOpenedEvent | CashDrawerUiClosedEvent | ExportInitiatedEvent | ImpersonationUiStartedEvent | ImpersonationUiEndedEvent | PaymentViewedEvent | InvoiceViewedEvent | CustomerDetailViewedEvent | SupplierAccountViewedEvent | SearchPerformedEvent | ActionDeniedEvent | TwoFactorChallengeShownEvent | TwoFactorCodeValidationFailedEvent | TwoFactorEnrollmentStartedEvent | TwoFactorRecoveryCodesRevealedEvent | TwoFactorResetInitiatedEvent | IntegrationTokenRefreshedEvent | WaitlistConvertedEvent | PlatformConfigUpdatedEvent | MlChannelStatusChangedEvent | IntegrationConnectionChangedEvent | PrintRuleCreatedEvent | PrintRuleEditedEvent | PrintRuleDeletedEvent | WebhookCreatedEvent | WebhookUpdatedEvent | WebhookDeletedEvent | PrinterActiveToggledEvent | PrinterRawFormatsUpdatedEvent | PrinterProfileUpdatedEvent | PlanTemplateUpdatedEvent | SupplierAccountDeletedEvent | CustomerPasswordResetInitiatedEvent | UserSessionsRevokedEvent | UserAnonymizedEvent | UserPasswordResetInitiatedByOperatorEvent | AgentCommandDispatchedEvent | PrintJobCancelledEvent | PrintAgentPairingCodeMintedEvent | PrintAgentPairedEvent | PrintAgentRevokedEvent | RmaRequestedEvent | RmaTransitionedEvent | RmaTrackingUpdatedEvent | ClockedInEvent | ClockedOutEvent | AttendanceCorrectedEvent | StoreNetworkRegisteredEvent | StoreNetworkRemovedEvent;
1404
1419
  }
1405
1420
  /**
1406
1421
  * Canonical whitelist of UI-only `UserActivityEvent` variant names. Imported by
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "platform-types",
3
- "version": "1.10.852",
3
+ "version": "1.10.854",
4
4
  "description": "Shared wire and entity contracts for the platform.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",