@tbox.cn/app-contracts-mall 0.1.1 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/README.md +16 -2
  2. package/dist/alipay-activity/cards.d.ts +305 -0
  3. package/dist/assembly.d.ts +54 -0
  4. package/dist/chunk-KIZD6FZ2.js +43 -0
  5. package/dist/deployment.d.ts +42 -0
  6. package/dist/domain/activity.d.ts +64 -0
  7. package/dist/domain/coupon.d.ts +2 -0
  8. package/dist/domain/entitlement.d.ts +53 -0
  9. package/dist/domain/offer.d.ts +111 -0
  10. package/dist/domain/operation.d.ts +22 -0
  11. package/dist/domain/parking.d.ts +195 -12
  12. package/dist/domain/points.d.ts +3 -2
  13. package/dist/domain/shopping-guide.d.ts +201 -0
  14. package/dist/guard.d.ts +50 -0
  15. package/dist/index.d.ts +22 -2
  16. package/dist/member/cards.d.ts +940 -0
  17. package/dist/parking/cards.d.ts +1271 -0
  18. package/dist/promotion/cards.d.ts +2529 -0
  19. package/dist/query-context.d.ts +47 -0
  20. package/dist/runtime.d.ts +20 -0
  21. package/dist/runtime.js +1281 -0
  22. package/dist/scope.d.ts +76 -0
  23. package/dist/server/index.d.ts +11 -0
  24. package/dist/server/index.js +80 -0
  25. package/dist/server/mall-context.d.ts +24 -0
  26. package/dist/server/mall-control-plane.d.ts +8 -0
  27. package/dist/server/request-credentials.d.ts +22 -0
  28. package/dist/services/customer-service.d.ts +11 -0
  29. package/dist/services/mall-info.d.ts +26 -0
  30. package/dist/services/member.d.ts +243 -9
  31. package/dist/services/parking.d.ts +105 -12
  32. package/dist/services/promotion.d.ts +100 -4
  33. package/dist/services/shopping-guide.d.ts +97 -0
  34. package/dist/shared/cards.d.ts +42 -0
  35. package/dist/shopping-guide/cards.d.ts +7039 -0
  36. package/package.json +19 -8
  37. package/src/alipay-activity/cards.ts +66 -0
  38. package/src/assembly.ts +103 -0
  39. package/src/deployment.ts +44 -0
  40. package/src/domain/activity.ts +66 -0
  41. package/src/domain/coupon.ts +3 -0
  42. package/src/domain/entitlement.ts +56 -0
  43. package/src/domain/offer.ts +120 -0
  44. package/src/domain/operation.ts +40 -0
  45. package/src/domain/parking.ts +206 -12
  46. package/src/domain/points.ts +3 -2
  47. package/src/domain/shopping-guide.ts +242 -0
  48. package/src/guard.ts +48 -0
  49. package/src/index.ts +22 -2
  50. package/src/member/cards.ts +209 -0
  51. package/src/parking/cards.ts +233 -0
  52. package/src/promotion/cards.ts +290 -0
  53. package/src/query-context.ts +81 -0
  54. package/src/runtime.ts +41 -0
  55. package/src/scope.ts +92 -0
  56. package/src/server/index.ts +11 -0
  57. package/src/server/mall-context.ts +39 -0
  58. package/src/server/mall-control-plane.ts +56 -0
  59. package/src/server/request-credentials.ts +43 -0
  60. package/src/service-slots.json +23 -0
  61. package/src/services/customer-service.ts +12 -0
  62. package/src/services/mall-info.ts +31 -0
  63. package/src/services/member.ts +354 -9
  64. package/src/services/parking.ts +161 -11
  65. package/src/services/promotion.ts +124 -4
  66. package/src/services/shopping-guide.ts +138 -0
  67. package/src/shared/cards.ts +25 -0
  68. package/src/shopping-guide/cards.ts +438 -0
  69. package/tests/assembly-validate-scope.test.ts +132 -0
  70. package/tests/cards.test.ts +586 -0
  71. package/tests/context-unification.test.ts +73 -0
  72. package/tests/mall-control-plane.test.ts +86 -0
  73. package/tests/member-status.test.ts +197 -0
  74. package/tests/query-context.test.ts +111 -0
  75. package/tests/request-credentials.test.ts +38 -0
  76. package/tests/resolve-primitives.test.ts +55 -0
  77. package/tests/service-slots.test.ts +78 -0
  78. package/tsconfig.json +1 -1
@@ -0,0 +1,2529 @@
1
+ /**
2
+ * 营销域卡片数据契约。
3
+ * 传输层维持 9 个稳定 CardType;presentation 显式保留 legacy marketing 的 19 个业务展示语义。
4
+ */
5
+ import { z } from 'zod';
6
+ /** promotion-offer-list:搜索/可领/推荐 三态列表 */
7
+ export declare const promotionOfferListCardDataSchema: z.ZodObject<{
8
+ presentation: z.ZodOptional<z.ZodEnum<["offer", "promotion", "coupon", "recommendation"]>>;
9
+ mode: z.ZodEnum<["search", "claimable", "recommend"]>;
10
+ /** 客户端默认展示 4 条;传入正整数可覆盖该上限。 */
11
+ maxItems: z.ZodOptional<z.ZodNumber>;
12
+ summary: z.ZodOptional<z.ZodString>;
13
+ items: z.ZodArray<z.ZodObject<{
14
+ offerRef: z.ZodString;
15
+ title: z.ZodString;
16
+ subtitle: z.ZodOptional<z.ZodString>;
17
+ offerType: z.ZodEnum<["COUPON", "BUNDLE", "PROMOTION", "ACTIVITY", "GROUPON"]>;
18
+ /** 主 facet 一句话(如「满 100 减 20」) */
19
+ benefitText: z.ZodOptional<z.ZodString>;
20
+ /** 使用门槛(如「满 300 元可用」) */
21
+ thresholdText: z.ZodOptional<z.ZodString>;
22
+ /**
23
+ * 券的**售价**展示,与 benefitText 是两回事——后者说优惠内容,这里说买这张券要花多少。
24
+ * 免费券给「免费」,付费券给「¥28.8」。文案由 provider 直接给:各厂商币种、小数位与
25
+ * 「免费/0 元」措辞不一,客户端不做数值运算也不反解金额。
26
+ */
27
+ priceText: z.ZodOptional<z.ZodString>;
28
+ /** 划线原价(如「¥38.8」)。与 priceText 成对出现才有意义,单独给不渲染。 */
29
+ originalPriceText: z.ZodOptional<z.ZodString>;
30
+ /** 折扣角标(如「7.5折」)。同样是 provider 直出文案,不由前端拿两个价格算。 */
31
+ discountLabel: z.ZodOptional<z.ZodString>;
32
+ /**
33
+ * 领取按钮文案:免费券「领取」、付费券「抢购」。由 provider 给而非前端按 priceText
34
+ * 猜——「免费」的写法各家不同,猜错就把付费券写成领取。缺省回落「领取」。
35
+ */
36
+ claimActionLabel: z.ZodOptional<z.ZodString>;
37
+ purchaseUrl: z.ZodOptional<z.ZodString>;
38
+ freeCouponClaimMode: z.ZodOptional<z.ZodEnum<["DIRECT", "REDIRECT"]>>;
39
+ /**
40
+ * 下面三条供**列表内的详情浮层**渲染——浮层就地展开,没有二次请求可拉,
41
+ * 需要的信息必须随列表一起下发。厂商不给就不渲染对应区块。
42
+ */
43
+ stockText: z.ZodOptional<z.ZodString>;
44
+ usageNoticeText: z.ZodOptional<z.ZodString>;
45
+ guaranteeText: z.ZodOptional<z.ZodString>;
46
+ usageSceneText: z.ZodOptional<z.ZodString>;
47
+ usageTimeText: z.ZodOptional<z.ZodString>;
48
+ claimTimeText: z.ZodOptional<z.ZodString>;
49
+ usageRuleText: z.ZodOptional<z.ZodString>;
50
+ /** 可领取(availability.status === 'AVAILABLE') */
51
+ claimable: z.ZodBoolean;
52
+ availabilityStatus: z.ZodOptional<z.ZodEnum<["AVAILABLE", "UNAVAILABLE", "REQUIRES_ACTION", "UNKNOWN"]>>;
53
+ validityText: z.ZodOptional<z.ZodString>;
54
+ imageUrl: z.ZodOptional<z.ZodString>;
55
+ /** 0.3.2 D4:条目动作(send:查看详情) */
56
+ itemActions: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{
57
+ kind: z.ZodLiteral<"send">;
58
+ label: z.ZodString;
59
+ value: z.ZodOptional<z.ZodString>;
60
+ visibleValue: z.ZodOptional<z.ZodString>;
61
+ }, "strip", z.ZodTypeAny, {
62
+ kind: "send";
63
+ label: string;
64
+ value?: string | undefined;
65
+ visibleValue?: string | undefined;
66
+ }, {
67
+ kind: "send";
68
+ label: string;
69
+ value?: string | undefined;
70
+ visibleValue?: string | undefined;
71
+ }>, z.ZodObject<{
72
+ kind: z.ZodLiteral<"link">;
73
+ label: z.ZodString;
74
+ url: z.ZodString;
75
+ }, "strip", z.ZodTypeAny, {
76
+ url: string;
77
+ kind: "link";
78
+ label: string;
79
+ }, {
80
+ url: string;
81
+ kind: "link";
82
+ label: string;
83
+ }>]>, "many">>;
84
+ tags: z.ZodArray<z.ZodString, "many">;
85
+ }, "strip", z.ZodTypeAny, {
86
+ title: string;
87
+ offerRef: string;
88
+ offerType: "COUPON" | "BUNDLE" | "PROMOTION" | "ACTIVITY" | "GROUPON";
89
+ claimable: boolean;
90
+ tags: string[];
91
+ imageUrl?: string | undefined;
92
+ usageTimeText?: string | undefined;
93
+ purchaseUrl?: string | undefined;
94
+ freeCouponClaimMode?: "DIRECT" | "REDIRECT" | undefined;
95
+ itemActions?: ({
96
+ kind: "send";
97
+ label: string;
98
+ value?: string | undefined;
99
+ visibleValue?: string | undefined;
100
+ } | {
101
+ url: string;
102
+ kind: "link";
103
+ label: string;
104
+ })[] | undefined;
105
+ subtitle?: string | undefined;
106
+ benefitText?: string | undefined;
107
+ thresholdText?: string | undefined;
108
+ priceText?: string | undefined;
109
+ originalPriceText?: string | undefined;
110
+ discountLabel?: string | undefined;
111
+ claimActionLabel?: string | undefined;
112
+ stockText?: string | undefined;
113
+ usageNoticeText?: string | undefined;
114
+ guaranteeText?: string | undefined;
115
+ usageSceneText?: string | undefined;
116
+ claimTimeText?: string | undefined;
117
+ usageRuleText?: string | undefined;
118
+ availabilityStatus?: "AVAILABLE" | "UNKNOWN" | "UNAVAILABLE" | "REQUIRES_ACTION" | undefined;
119
+ validityText?: string | undefined;
120
+ }, {
121
+ title: string;
122
+ offerRef: string;
123
+ offerType: "COUPON" | "BUNDLE" | "PROMOTION" | "ACTIVITY" | "GROUPON";
124
+ claimable: boolean;
125
+ tags: string[];
126
+ imageUrl?: string | undefined;
127
+ usageTimeText?: string | undefined;
128
+ purchaseUrl?: string | undefined;
129
+ freeCouponClaimMode?: "DIRECT" | "REDIRECT" | undefined;
130
+ itemActions?: ({
131
+ kind: "send";
132
+ label: string;
133
+ value?: string | undefined;
134
+ visibleValue?: string | undefined;
135
+ } | {
136
+ url: string;
137
+ kind: "link";
138
+ label: string;
139
+ })[] | undefined;
140
+ subtitle?: string | undefined;
141
+ benefitText?: string | undefined;
142
+ thresholdText?: string | undefined;
143
+ priceText?: string | undefined;
144
+ originalPriceText?: string | undefined;
145
+ discountLabel?: string | undefined;
146
+ claimActionLabel?: string | undefined;
147
+ stockText?: string | undefined;
148
+ usageNoticeText?: string | undefined;
149
+ guaranteeText?: string | undefined;
150
+ usageSceneText?: string | undefined;
151
+ claimTimeText?: string | undefined;
152
+ usageRuleText?: string | undefined;
153
+ availabilityStatus?: "AVAILABLE" | "UNKNOWN" | "UNAVAILABLE" | "REQUIRES_ACTION" | undefined;
154
+ validityText?: string | undefined;
155
+ }>, "many">;
156
+ noResultsReason: z.ZodOptional<z.ZodString>;
157
+ nextCursor: z.ZodOptional<z.ZodString>;
158
+ }, "strip", z.ZodTypeAny, {
159
+ items: {
160
+ title: string;
161
+ offerRef: string;
162
+ offerType: "COUPON" | "BUNDLE" | "PROMOTION" | "ACTIVITY" | "GROUPON";
163
+ claimable: boolean;
164
+ tags: string[];
165
+ imageUrl?: string | undefined;
166
+ usageTimeText?: string | undefined;
167
+ purchaseUrl?: string | undefined;
168
+ freeCouponClaimMode?: "DIRECT" | "REDIRECT" | undefined;
169
+ itemActions?: ({
170
+ kind: "send";
171
+ label: string;
172
+ value?: string | undefined;
173
+ visibleValue?: string | undefined;
174
+ } | {
175
+ url: string;
176
+ kind: "link";
177
+ label: string;
178
+ })[] | undefined;
179
+ subtitle?: string | undefined;
180
+ benefitText?: string | undefined;
181
+ thresholdText?: string | undefined;
182
+ priceText?: string | undefined;
183
+ originalPriceText?: string | undefined;
184
+ discountLabel?: string | undefined;
185
+ claimActionLabel?: string | undefined;
186
+ stockText?: string | undefined;
187
+ usageNoticeText?: string | undefined;
188
+ guaranteeText?: string | undefined;
189
+ usageSceneText?: string | undefined;
190
+ claimTimeText?: string | undefined;
191
+ usageRuleText?: string | undefined;
192
+ availabilityStatus?: "AVAILABLE" | "UNKNOWN" | "UNAVAILABLE" | "REQUIRES_ACTION" | undefined;
193
+ validityText?: string | undefined;
194
+ }[];
195
+ mode: "search" | "claimable" | "recommend";
196
+ summary?: string | undefined;
197
+ noResultsReason?: string | undefined;
198
+ presentation?: "coupon" | "promotion" | "recommendation" | "offer" | undefined;
199
+ maxItems?: number | undefined;
200
+ nextCursor?: string | undefined;
201
+ }, {
202
+ items: {
203
+ title: string;
204
+ offerRef: string;
205
+ offerType: "COUPON" | "BUNDLE" | "PROMOTION" | "ACTIVITY" | "GROUPON";
206
+ claimable: boolean;
207
+ tags: string[];
208
+ imageUrl?: string | undefined;
209
+ usageTimeText?: string | undefined;
210
+ purchaseUrl?: string | undefined;
211
+ freeCouponClaimMode?: "DIRECT" | "REDIRECT" | undefined;
212
+ itemActions?: ({
213
+ kind: "send";
214
+ label: string;
215
+ value?: string | undefined;
216
+ visibleValue?: string | undefined;
217
+ } | {
218
+ url: string;
219
+ kind: "link";
220
+ label: string;
221
+ })[] | undefined;
222
+ subtitle?: string | undefined;
223
+ benefitText?: string | undefined;
224
+ thresholdText?: string | undefined;
225
+ priceText?: string | undefined;
226
+ originalPriceText?: string | undefined;
227
+ discountLabel?: string | undefined;
228
+ claimActionLabel?: string | undefined;
229
+ stockText?: string | undefined;
230
+ usageNoticeText?: string | undefined;
231
+ guaranteeText?: string | undefined;
232
+ usageSceneText?: string | undefined;
233
+ claimTimeText?: string | undefined;
234
+ usageRuleText?: string | undefined;
235
+ availabilityStatus?: "AVAILABLE" | "UNKNOWN" | "UNAVAILABLE" | "REQUIRES_ACTION" | undefined;
236
+ validityText?: string | undefined;
237
+ }[];
238
+ mode: "search" | "claimable" | "recommend";
239
+ summary?: string | undefined;
240
+ noResultsReason?: string | undefined;
241
+ presentation?: "coupon" | "promotion" | "recommendation" | "offer" | undefined;
242
+ maxItems?: number | undefined;
243
+ nextCursor?: string | undefined;
244
+ }>;
245
+ export type PromotionOfferListCardData = z.infer<typeof promotionOfferListCardDataSchema>;
246
+ /** promotion-offer-detail:详情 + 领取/券码动作 */
247
+ export declare const promotionOfferDetailCardDataSchema: z.ZodObject<{
248
+ presentation: z.ZodOptional<z.ZodEnum<["offer", "promotion", "promotion-guide", "coupon", "package"]>>;
249
+ offerRef: z.ZodString;
250
+ title: z.ZodString;
251
+ offerType: z.ZodEnum<["COUPON", "BUNDLE", "PROMOTION", "ACTIVITY", "GROUPON"]>;
252
+ subtitle: z.ZodOptional<z.ZodString>;
253
+ description: z.ZodOptional<z.ZodString>;
254
+ imageUrl: z.ZodOptional<z.ZodString>;
255
+ benefitText: z.ZodOptional<z.ZodString>;
256
+ thresholdText: z.ZodOptional<z.ZodString>;
257
+ validityText: z.ZodOptional<z.ZodString>;
258
+ /** 售价三件套,语义同 offerSummary(provider 直出文案,前端不做运算) */
259
+ priceText: z.ZodOptional<z.ZodString>;
260
+ originalPriceText: z.ZodOptional<z.ZodString>;
261
+ discountLabel: z.ZodOptional<z.ZodString>;
262
+ claimActionLabel: z.ZodOptional<z.ZodString>;
263
+ purchaseUrl: z.ZodOptional<z.ZodString>;
264
+ /** 剩余库存文案(如「剩余:29」);厂商不给就不展示,别拿 0 当「售罄」用 */
265
+ stockText: z.ZodOptional<z.ZodString>;
266
+ usageNoticeText: z.ZodOptional<z.ZodString>;
267
+ /** 核销场景(如「万铺小二核销」)——告诉用户这张券在哪、怎么用掉 */
268
+ usageSceneText: z.ZodOptional<z.ZodString>;
269
+ usageTimeText: z.ZodOptional<z.ZodString>;
270
+ claimTimeText: z.ZodOptional<z.ZodString>;
271
+ usageRuleText: z.ZodOptional<z.ZodString>;
272
+ guaranteeText: z.ZodOptional<z.ZodString>;
273
+ /** 使用规则/参与步骤 */
274
+ rules: z.ZodArray<z.ZodString, "many">;
275
+ participationMode: z.ZodOptional<z.ZodEnum<["AUTOMATIC_DISCOUNT", "CLAIM_THEN_PURCHASE", "REGISTER_THEN_ATTEND", "GROUP_PURCHASE", "UNKNOWN"]>>;
276
+ steps: z.ZodOptional<z.ZodArray<z.ZodObject<{
277
+ title: z.ZodString;
278
+ description: z.ZodOptional<z.ZodString>;
279
+ }, "strip", z.ZodTypeAny, {
280
+ title: string;
281
+ description?: string | undefined;
282
+ }, {
283
+ title: string;
284
+ description?: string | undefined;
285
+ }>, "many">>;
286
+ requirements: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
287
+ notice: z.ZodOptional<z.ZodString>;
288
+ /** 厂商可提供时展示适用门店;可选以兼容历史卡数据。 */
289
+ stores: z.ZodOptional<z.ZodArray<z.ZodObject<{
290
+ storeId: z.ZodString;
291
+ storeName: z.ZodString;
292
+ businessName: z.ZodOptional<z.ZodString>;
293
+ address: z.ZodOptional<z.ZodString>;
294
+ floor: z.ZodOptional<z.ZodString>;
295
+ }, "strip", z.ZodTypeAny, {
296
+ storeId: string;
297
+ storeName: string;
298
+ address?: string | undefined;
299
+ businessName?: string | undefined;
300
+ floor?: string | undefined;
301
+ }, {
302
+ storeId: string;
303
+ storeName: string;
304
+ address?: string | undefined;
305
+ businessName?: string | undefined;
306
+ floor?: string | undefined;
307
+ }>, "many">>;
308
+ bundleItems: z.ZodOptional<z.ZodArray<z.ZodObject<{
309
+ name: z.ZodString;
310
+ quantity: z.ZodNumber;
311
+ }, "strip", z.ZodTypeAny, {
312
+ name: string;
313
+ quantity: number;
314
+ }, {
315
+ name: string;
316
+ quantity: number;
317
+ }>, "many">>;
318
+ /** 领取动作是否可用(未登录会员/不可用 → false + unavailableReason) */
319
+ claimable: z.ZodBoolean;
320
+ unavailableReason: z.ZodOptional<z.ZodString>;
321
+ caveats: z.ZodArray<z.ZodString, "many">;
322
+ }, "strip", z.ZodTypeAny, {
323
+ title: string;
324
+ offerRef: string;
325
+ caveats: string[];
326
+ offerType: "COUPON" | "BUNDLE" | "PROMOTION" | "ACTIVITY" | "GROUPON";
327
+ claimable: boolean;
328
+ rules: string[];
329
+ description?: string | undefined;
330
+ notice?: string | undefined;
331
+ imageUrl?: string | undefined;
332
+ usageTimeText?: string | undefined;
333
+ purchaseUrl?: string | undefined;
334
+ presentation?: "coupon" | "promotion" | "offer" | "promotion-guide" | "package" | undefined;
335
+ subtitle?: string | undefined;
336
+ steps?: {
337
+ title: string;
338
+ description?: string | undefined;
339
+ }[] | undefined;
340
+ benefitText?: string | undefined;
341
+ thresholdText?: string | undefined;
342
+ priceText?: string | undefined;
343
+ originalPriceText?: string | undefined;
344
+ discountLabel?: string | undefined;
345
+ claimActionLabel?: string | undefined;
346
+ stockText?: string | undefined;
347
+ usageNoticeText?: string | undefined;
348
+ guaranteeText?: string | undefined;
349
+ usageSceneText?: string | undefined;
350
+ claimTimeText?: string | undefined;
351
+ usageRuleText?: string | undefined;
352
+ validityText?: string | undefined;
353
+ participationMode?: "UNKNOWN" | "AUTOMATIC_DISCOUNT" | "CLAIM_THEN_PURCHASE" | "REGISTER_THEN_ATTEND" | "GROUP_PURCHASE" | undefined;
354
+ requirements?: string[] | undefined;
355
+ stores?: {
356
+ storeId: string;
357
+ storeName: string;
358
+ address?: string | undefined;
359
+ businessName?: string | undefined;
360
+ floor?: string | undefined;
361
+ }[] | undefined;
362
+ bundleItems?: {
363
+ name: string;
364
+ quantity: number;
365
+ }[] | undefined;
366
+ unavailableReason?: string | undefined;
367
+ }, {
368
+ title: string;
369
+ offerRef: string;
370
+ caveats: string[];
371
+ offerType: "COUPON" | "BUNDLE" | "PROMOTION" | "ACTIVITY" | "GROUPON";
372
+ claimable: boolean;
373
+ rules: string[];
374
+ description?: string | undefined;
375
+ notice?: string | undefined;
376
+ imageUrl?: string | undefined;
377
+ usageTimeText?: string | undefined;
378
+ purchaseUrl?: string | undefined;
379
+ presentation?: "coupon" | "promotion" | "offer" | "promotion-guide" | "package" | undefined;
380
+ subtitle?: string | undefined;
381
+ steps?: {
382
+ title: string;
383
+ description?: string | undefined;
384
+ }[] | undefined;
385
+ benefitText?: string | undefined;
386
+ thresholdText?: string | undefined;
387
+ priceText?: string | undefined;
388
+ originalPriceText?: string | undefined;
389
+ discountLabel?: string | undefined;
390
+ claimActionLabel?: string | undefined;
391
+ stockText?: string | undefined;
392
+ usageNoticeText?: string | undefined;
393
+ guaranteeText?: string | undefined;
394
+ usageSceneText?: string | undefined;
395
+ claimTimeText?: string | undefined;
396
+ usageRuleText?: string | undefined;
397
+ validityText?: string | undefined;
398
+ participationMode?: "UNKNOWN" | "AUTOMATIC_DISCOUNT" | "CLAIM_THEN_PURCHASE" | "REGISTER_THEN_ATTEND" | "GROUP_PURCHASE" | undefined;
399
+ requirements?: string[] | undefined;
400
+ stores?: {
401
+ storeId: string;
402
+ storeName: string;
403
+ address?: string | undefined;
404
+ businessName?: string | undefined;
405
+ floor?: string | undefined;
406
+ }[] | undefined;
407
+ bundleItems?: {
408
+ name: string;
409
+ quantity: number;
410
+ }[] | undefined;
411
+ unavailableReason?: string | undefined;
412
+ }>;
413
+ export type PromotionOfferDetailCardData = z.infer<typeof promotionOfferDetailCardDataSchema>;
414
+ /** promotion-entitlement-list:我的券 */
415
+ export declare const promotionEntitlementListCardDataSchema: z.ZodObject<{
416
+ mallId: z.ZodOptional<z.ZodString>;
417
+ miniAppId: z.ZodOptional<z.ZodString>;
418
+ /** 客户端默认展示 4 条;传入正整数可覆盖该上限。 */
419
+ maxItems: z.ZodOptional<z.ZodNumber>;
420
+ items: z.ZodArray<z.ZodObject<{
421
+ entitlementRef: z.ZodString;
422
+ title: z.ZodString;
423
+ imageUrl: z.ZodOptional<z.ZodString>;
424
+ entitlementType: z.ZodEnum<["COUPON", "BUNDLE", "PROMOTION", "ACTIVITY", "GROUPON"]>;
425
+ status: z.ZodEnum<["EFFECTIVE", "USED", "EXPIRED", "INVALID", "UNKNOWN"]>;
426
+ codeMasked: z.ZodOptional<z.ZodString>;
427
+ code: z.ZodOptional<z.ZodString>;
428
+ qrCodeEnabled: z.ZodOptional<z.ZodBoolean>;
429
+ benefitText: z.ZodOptional<z.ZodString>;
430
+ thresholdText: z.ZodOptional<z.ZodString>;
431
+ usageNotice: z.ZodOptional<z.ZodString>;
432
+ guaranteeText: z.ZodOptional<z.ZodString>;
433
+ usageSceneText: z.ZodOptional<z.ZodString>;
434
+ usageTimeText: z.ZodOptional<z.ZodString>;
435
+ claimTimeText: z.ZodOptional<z.ZodString>;
436
+ usageRuleText: z.ZodOptional<z.ZodString>;
437
+ validityText: z.ZodOptional<z.ZodString>;
438
+ validUntilText: z.ZodOptional<z.ZodString>;
439
+ /** 0.3.2 D4:条目动作(send:查看详情) */
440
+ itemActions: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{
441
+ kind: z.ZodLiteral<"send">;
442
+ label: z.ZodString;
443
+ value: z.ZodOptional<z.ZodString>;
444
+ visibleValue: z.ZodOptional<z.ZodString>;
445
+ }, "strip", z.ZodTypeAny, {
446
+ kind: "send";
447
+ label: string;
448
+ value?: string | undefined;
449
+ visibleValue?: string | undefined;
450
+ }, {
451
+ kind: "send";
452
+ label: string;
453
+ value?: string | undefined;
454
+ visibleValue?: string | undefined;
455
+ }>, z.ZodObject<{
456
+ kind: z.ZodLiteral<"link">;
457
+ label: z.ZodString;
458
+ url: z.ZodString;
459
+ }, "strip", z.ZodTypeAny, {
460
+ url: string;
461
+ kind: "link";
462
+ label: string;
463
+ }, {
464
+ url: string;
465
+ kind: "link";
466
+ label: string;
467
+ }>]>, "many">>;
468
+ stores: z.ZodOptional<z.ZodArray<z.ZodObject<{
469
+ storeId: z.ZodString;
470
+ storeName: z.ZodString;
471
+ businessName: z.ZodOptional<z.ZodString>;
472
+ imageUrl: z.ZodOptional<z.ZodString>;
473
+ address: z.ZodOptional<z.ZodString>;
474
+ floor: z.ZodOptional<z.ZodString>;
475
+ latitude: z.ZodOptional<z.ZodNumber>;
476
+ longitude: z.ZodOptional<z.ZodNumber>;
477
+ }, "strip", z.ZodTypeAny, {
478
+ storeId: string;
479
+ storeName: string;
480
+ latitude?: number | undefined;
481
+ longitude?: number | undefined;
482
+ imageUrl?: string | undefined;
483
+ address?: string | undefined;
484
+ businessName?: string | undefined;
485
+ floor?: string | undefined;
486
+ }, {
487
+ storeId: string;
488
+ storeName: string;
489
+ latitude?: number | undefined;
490
+ longitude?: number | undefined;
491
+ imageUrl?: string | undefined;
492
+ address?: string | undefined;
493
+ businessName?: string | undefined;
494
+ floor?: string | undefined;
495
+ }>, "many">>;
496
+ }, "strip", z.ZodTypeAny, {
497
+ status: "USED" | "EXPIRED" | "UNKNOWN" | "EFFECTIVE" | "INVALID";
498
+ title: string;
499
+ entitlementRef: string;
500
+ entitlementType: "COUPON" | "BUNDLE" | "PROMOTION" | "ACTIVITY" | "GROUPON";
501
+ code?: string | undefined;
502
+ imageUrl?: string | undefined;
503
+ usageTimeText?: string | undefined;
504
+ itemActions?: ({
505
+ kind: "send";
506
+ label: string;
507
+ value?: string | undefined;
508
+ visibleValue?: string | undefined;
509
+ } | {
510
+ url: string;
511
+ kind: "link";
512
+ label: string;
513
+ })[] | undefined;
514
+ benefitText?: string | undefined;
515
+ thresholdText?: string | undefined;
516
+ guaranteeText?: string | undefined;
517
+ usageSceneText?: string | undefined;
518
+ claimTimeText?: string | undefined;
519
+ usageRuleText?: string | undefined;
520
+ validityText?: string | undefined;
521
+ stores?: {
522
+ storeId: string;
523
+ storeName: string;
524
+ latitude?: number | undefined;
525
+ longitude?: number | undefined;
526
+ imageUrl?: string | undefined;
527
+ address?: string | undefined;
528
+ businessName?: string | undefined;
529
+ floor?: string | undefined;
530
+ }[] | undefined;
531
+ codeMasked?: string | undefined;
532
+ qrCodeEnabled?: boolean | undefined;
533
+ usageNotice?: string | undefined;
534
+ validUntilText?: string | undefined;
535
+ }, {
536
+ status: "USED" | "EXPIRED" | "UNKNOWN" | "EFFECTIVE" | "INVALID";
537
+ title: string;
538
+ entitlementRef: string;
539
+ entitlementType: "COUPON" | "BUNDLE" | "PROMOTION" | "ACTIVITY" | "GROUPON";
540
+ code?: string | undefined;
541
+ imageUrl?: string | undefined;
542
+ usageTimeText?: string | undefined;
543
+ itemActions?: ({
544
+ kind: "send";
545
+ label: string;
546
+ value?: string | undefined;
547
+ visibleValue?: string | undefined;
548
+ } | {
549
+ url: string;
550
+ kind: "link";
551
+ label: string;
552
+ })[] | undefined;
553
+ benefitText?: string | undefined;
554
+ thresholdText?: string | undefined;
555
+ guaranteeText?: string | undefined;
556
+ usageSceneText?: string | undefined;
557
+ claimTimeText?: string | undefined;
558
+ usageRuleText?: string | undefined;
559
+ validityText?: string | undefined;
560
+ stores?: {
561
+ storeId: string;
562
+ storeName: string;
563
+ latitude?: number | undefined;
564
+ longitude?: number | undefined;
565
+ imageUrl?: string | undefined;
566
+ address?: string | undefined;
567
+ businessName?: string | undefined;
568
+ floor?: string | undefined;
569
+ }[] | undefined;
570
+ codeMasked?: string | undefined;
571
+ qrCodeEnabled?: boolean | undefined;
572
+ usageNotice?: string | undefined;
573
+ validUntilText?: string | undefined;
574
+ }>, "many">;
575
+ noResultsReason: z.ZodOptional<z.ZodString>;
576
+ nextCursor: z.ZodOptional<z.ZodString>;
577
+ }, "strip", z.ZodTypeAny, {
578
+ items: {
579
+ status: "USED" | "EXPIRED" | "UNKNOWN" | "EFFECTIVE" | "INVALID";
580
+ title: string;
581
+ entitlementRef: string;
582
+ entitlementType: "COUPON" | "BUNDLE" | "PROMOTION" | "ACTIVITY" | "GROUPON";
583
+ code?: string | undefined;
584
+ imageUrl?: string | undefined;
585
+ usageTimeText?: string | undefined;
586
+ itemActions?: ({
587
+ kind: "send";
588
+ label: string;
589
+ value?: string | undefined;
590
+ visibleValue?: string | undefined;
591
+ } | {
592
+ url: string;
593
+ kind: "link";
594
+ label: string;
595
+ })[] | undefined;
596
+ benefitText?: string | undefined;
597
+ thresholdText?: string | undefined;
598
+ guaranteeText?: string | undefined;
599
+ usageSceneText?: string | undefined;
600
+ claimTimeText?: string | undefined;
601
+ usageRuleText?: string | undefined;
602
+ validityText?: string | undefined;
603
+ stores?: {
604
+ storeId: string;
605
+ storeName: string;
606
+ latitude?: number | undefined;
607
+ longitude?: number | undefined;
608
+ imageUrl?: string | undefined;
609
+ address?: string | undefined;
610
+ businessName?: string | undefined;
611
+ floor?: string | undefined;
612
+ }[] | undefined;
613
+ codeMasked?: string | undefined;
614
+ qrCodeEnabled?: boolean | undefined;
615
+ usageNotice?: string | undefined;
616
+ validUntilText?: string | undefined;
617
+ }[];
618
+ miniAppId?: string | undefined;
619
+ mallId?: string | undefined;
620
+ noResultsReason?: string | undefined;
621
+ maxItems?: number | undefined;
622
+ nextCursor?: string | undefined;
623
+ }, {
624
+ items: {
625
+ status: "USED" | "EXPIRED" | "UNKNOWN" | "EFFECTIVE" | "INVALID";
626
+ title: string;
627
+ entitlementRef: string;
628
+ entitlementType: "COUPON" | "BUNDLE" | "PROMOTION" | "ACTIVITY" | "GROUPON";
629
+ code?: string | undefined;
630
+ imageUrl?: string | undefined;
631
+ usageTimeText?: string | undefined;
632
+ itemActions?: ({
633
+ kind: "send";
634
+ label: string;
635
+ value?: string | undefined;
636
+ visibleValue?: string | undefined;
637
+ } | {
638
+ url: string;
639
+ kind: "link";
640
+ label: string;
641
+ })[] | undefined;
642
+ benefitText?: string | undefined;
643
+ thresholdText?: string | undefined;
644
+ guaranteeText?: string | undefined;
645
+ usageSceneText?: string | undefined;
646
+ claimTimeText?: string | undefined;
647
+ usageRuleText?: string | undefined;
648
+ validityText?: string | undefined;
649
+ stores?: {
650
+ storeId: string;
651
+ storeName: string;
652
+ latitude?: number | undefined;
653
+ longitude?: number | undefined;
654
+ imageUrl?: string | undefined;
655
+ address?: string | undefined;
656
+ businessName?: string | undefined;
657
+ floor?: string | undefined;
658
+ }[] | undefined;
659
+ codeMasked?: string | undefined;
660
+ qrCodeEnabled?: boolean | undefined;
661
+ usageNotice?: string | undefined;
662
+ validUntilText?: string | undefined;
663
+ }[];
664
+ miniAppId?: string | undefined;
665
+ mallId?: string | undefined;
666
+ noResultsReason?: string | undefined;
667
+ maxItems?: number | undefined;
668
+ nextCursor?: string | undefined;
669
+ }>;
670
+ export type PromotionEntitlementListCardData = z.infer<typeof promotionEntitlementListCardDataSchema>;
671
+ /** promotion-activity-category-list:活动分类入口。 */
672
+ export declare const promotionActivityCategoryListCardDataSchema: z.ZodObject<{
673
+ items: z.ZodArray<z.ZodObject<{
674
+ categoryId: z.ZodString;
675
+ name: z.ZodString;
676
+ parentId: z.ZodOptional<z.ZodString>;
677
+ itemActions: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{
678
+ kind: z.ZodLiteral<"send">;
679
+ label: z.ZodString;
680
+ value: z.ZodOptional<z.ZodString>;
681
+ visibleValue: z.ZodOptional<z.ZodString>;
682
+ }, "strip", z.ZodTypeAny, {
683
+ kind: "send";
684
+ label: string;
685
+ value?: string | undefined;
686
+ visibleValue?: string | undefined;
687
+ }, {
688
+ kind: "send";
689
+ label: string;
690
+ value?: string | undefined;
691
+ visibleValue?: string | undefined;
692
+ }>, z.ZodObject<{
693
+ kind: z.ZodLiteral<"link">;
694
+ label: z.ZodString;
695
+ url: z.ZodString;
696
+ }, "strip", z.ZodTypeAny, {
697
+ url: string;
698
+ kind: "link";
699
+ label: string;
700
+ }, {
701
+ url: string;
702
+ kind: "link";
703
+ label: string;
704
+ }>]>, "many">>;
705
+ }, "strip", z.ZodTypeAny, {
706
+ name: string;
707
+ categoryId: string;
708
+ itemActions?: ({
709
+ kind: "send";
710
+ label: string;
711
+ value?: string | undefined;
712
+ visibleValue?: string | undefined;
713
+ } | {
714
+ url: string;
715
+ kind: "link";
716
+ label: string;
717
+ })[] | undefined;
718
+ parentId?: string | undefined;
719
+ }, {
720
+ name: string;
721
+ categoryId: string;
722
+ itemActions?: ({
723
+ kind: "send";
724
+ label: string;
725
+ value?: string | undefined;
726
+ visibleValue?: string | undefined;
727
+ } | {
728
+ url: string;
729
+ kind: "link";
730
+ label: string;
731
+ })[] | undefined;
732
+ parentId?: string | undefined;
733
+ }>, "many">;
734
+ noResultsReason: z.ZodOptional<z.ZodString>;
735
+ }, "strip", z.ZodTypeAny, {
736
+ items: {
737
+ name: string;
738
+ categoryId: string;
739
+ itemActions?: ({
740
+ kind: "send";
741
+ label: string;
742
+ value?: string | undefined;
743
+ visibleValue?: string | undefined;
744
+ } | {
745
+ url: string;
746
+ kind: "link";
747
+ label: string;
748
+ })[] | undefined;
749
+ parentId?: string | undefined;
750
+ }[];
751
+ noResultsReason?: string | undefined;
752
+ }, {
753
+ items: {
754
+ name: string;
755
+ categoryId: string;
756
+ itemActions?: ({
757
+ kind: "send";
758
+ label: string;
759
+ value?: string | undefined;
760
+ visibleValue?: string | undefined;
761
+ } | {
762
+ url: string;
763
+ kind: "link";
764
+ label: string;
765
+ })[] | undefined;
766
+ parentId?: string | undefined;
767
+ }[];
768
+ noResultsReason?: string | undefined;
769
+ }>;
770
+ export type PromotionActivityCategoryListCardData = z.infer<typeof promotionActivityCategoryListCardDataSchema>;
771
+ /** promotion-best-deal:确定性测算或厂商不支持时的候选说明。 */
772
+ export declare const promotionBestDealCardDataSchema: z.ZodObject<{
773
+ authoritative: z.ZodBoolean;
774
+ originalAmountCents: z.ZodNumber;
775
+ savingsCents: z.ZodOptional<z.ZodNumber>;
776
+ expectedPayCents: z.ZodOptional<z.ZodNumber>;
777
+ appliedOfferRefs: z.ZodArray<z.ZodString, "many">;
778
+ candidates: z.ZodOptional<z.ZodArray<z.ZodObject<{
779
+ offerRef: z.ZodString;
780
+ title: z.ZodString;
781
+ subtitle: z.ZodOptional<z.ZodString>;
782
+ offerType: z.ZodEnum<["COUPON", "BUNDLE", "PROMOTION", "ACTIVITY", "GROUPON"]>;
783
+ /** 主 facet 一句话(如「满 100 减 20」) */
784
+ benefitText: z.ZodOptional<z.ZodString>;
785
+ /** 使用门槛(如「满 300 元可用」) */
786
+ thresholdText: z.ZodOptional<z.ZodString>;
787
+ /**
788
+ * 券的**售价**展示,与 benefitText 是两回事——后者说优惠内容,这里说买这张券要花多少。
789
+ * 免费券给「免费」,付费券给「¥28.8」。文案由 provider 直接给:各厂商币种、小数位与
790
+ * 「免费/0 元」措辞不一,客户端不做数值运算也不反解金额。
791
+ */
792
+ priceText: z.ZodOptional<z.ZodString>;
793
+ /** 划线原价(如「¥38.8」)。与 priceText 成对出现才有意义,单独给不渲染。 */
794
+ originalPriceText: z.ZodOptional<z.ZodString>;
795
+ /** 折扣角标(如「7.5折」)。同样是 provider 直出文案,不由前端拿两个价格算。 */
796
+ discountLabel: z.ZodOptional<z.ZodString>;
797
+ /**
798
+ * 领取按钮文案:免费券「领取」、付费券「抢购」。由 provider 给而非前端按 priceText
799
+ * 猜——「免费」的写法各家不同,猜错就把付费券写成领取。缺省回落「领取」。
800
+ */
801
+ claimActionLabel: z.ZodOptional<z.ZodString>;
802
+ purchaseUrl: z.ZodOptional<z.ZodString>;
803
+ freeCouponClaimMode: z.ZodOptional<z.ZodEnum<["DIRECT", "REDIRECT"]>>;
804
+ /**
805
+ * 下面三条供**列表内的详情浮层**渲染——浮层就地展开,没有二次请求可拉,
806
+ * 需要的信息必须随列表一起下发。厂商不给就不渲染对应区块。
807
+ */
808
+ stockText: z.ZodOptional<z.ZodString>;
809
+ usageNoticeText: z.ZodOptional<z.ZodString>;
810
+ guaranteeText: z.ZodOptional<z.ZodString>;
811
+ usageSceneText: z.ZodOptional<z.ZodString>;
812
+ usageTimeText: z.ZodOptional<z.ZodString>;
813
+ claimTimeText: z.ZodOptional<z.ZodString>;
814
+ usageRuleText: z.ZodOptional<z.ZodString>;
815
+ /** 可领取(availability.status === 'AVAILABLE') */
816
+ claimable: z.ZodBoolean;
817
+ availabilityStatus: z.ZodOptional<z.ZodEnum<["AVAILABLE", "UNAVAILABLE", "REQUIRES_ACTION", "UNKNOWN"]>>;
818
+ validityText: z.ZodOptional<z.ZodString>;
819
+ imageUrl: z.ZodOptional<z.ZodString>;
820
+ /** 0.3.2 D4:条目动作(send:查看详情) */
821
+ itemActions: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{
822
+ kind: z.ZodLiteral<"send">;
823
+ label: z.ZodString;
824
+ value: z.ZodOptional<z.ZodString>;
825
+ visibleValue: z.ZodOptional<z.ZodString>;
826
+ }, "strip", z.ZodTypeAny, {
827
+ kind: "send";
828
+ label: string;
829
+ value?: string | undefined;
830
+ visibleValue?: string | undefined;
831
+ }, {
832
+ kind: "send";
833
+ label: string;
834
+ value?: string | undefined;
835
+ visibleValue?: string | undefined;
836
+ }>, z.ZodObject<{
837
+ kind: z.ZodLiteral<"link">;
838
+ label: z.ZodString;
839
+ url: z.ZodString;
840
+ }, "strip", z.ZodTypeAny, {
841
+ url: string;
842
+ kind: "link";
843
+ label: string;
844
+ }, {
845
+ url: string;
846
+ kind: "link";
847
+ label: string;
848
+ }>]>, "many">>;
849
+ tags: z.ZodArray<z.ZodString, "many">;
850
+ }, "strip", z.ZodTypeAny, {
851
+ title: string;
852
+ offerRef: string;
853
+ offerType: "COUPON" | "BUNDLE" | "PROMOTION" | "ACTIVITY" | "GROUPON";
854
+ claimable: boolean;
855
+ tags: string[];
856
+ imageUrl?: string | undefined;
857
+ usageTimeText?: string | undefined;
858
+ purchaseUrl?: string | undefined;
859
+ freeCouponClaimMode?: "DIRECT" | "REDIRECT" | undefined;
860
+ itemActions?: ({
861
+ kind: "send";
862
+ label: string;
863
+ value?: string | undefined;
864
+ visibleValue?: string | undefined;
865
+ } | {
866
+ url: string;
867
+ kind: "link";
868
+ label: string;
869
+ })[] | undefined;
870
+ subtitle?: string | undefined;
871
+ benefitText?: string | undefined;
872
+ thresholdText?: string | undefined;
873
+ priceText?: string | undefined;
874
+ originalPriceText?: string | undefined;
875
+ discountLabel?: string | undefined;
876
+ claimActionLabel?: string | undefined;
877
+ stockText?: string | undefined;
878
+ usageNoticeText?: string | undefined;
879
+ guaranteeText?: string | undefined;
880
+ usageSceneText?: string | undefined;
881
+ claimTimeText?: string | undefined;
882
+ usageRuleText?: string | undefined;
883
+ availabilityStatus?: "AVAILABLE" | "UNKNOWN" | "UNAVAILABLE" | "REQUIRES_ACTION" | undefined;
884
+ validityText?: string | undefined;
885
+ }, {
886
+ title: string;
887
+ offerRef: string;
888
+ offerType: "COUPON" | "BUNDLE" | "PROMOTION" | "ACTIVITY" | "GROUPON";
889
+ claimable: boolean;
890
+ tags: string[];
891
+ imageUrl?: string | undefined;
892
+ usageTimeText?: string | undefined;
893
+ purchaseUrl?: string | undefined;
894
+ freeCouponClaimMode?: "DIRECT" | "REDIRECT" | undefined;
895
+ itemActions?: ({
896
+ kind: "send";
897
+ label: string;
898
+ value?: string | undefined;
899
+ visibleValue?: string | undefined;
900
+ } | {
901
+ url: string;
902
+ kind: "link";
903
+ label: string;
904
+ })[] | undefined;
905
+ subtitle?: string | undefined;
906
+ benefitText?: string | undefined;
907
+ thresholdText?: string | undefined;
908
+ priceText?: string | undefined;
909
+ originalPriceText?: string | undefined;
910
+ discountLabel?: string | undefined;
911
+ claimActionLabel?: string | undefined;
912
+ stockText?: string | undefined;
913
+ usageNoticeText?: string | undefined;
914
+ guaranteeText?: string | undefined;
915
+ usageSceneText?: string | undefined;
916
+ claimTimeText?: string | undefined;
917
+ usageRuleText?: string | undefined;
918
+ availabilityStatus?: "AVAILABLE" | "UNKNOWN" | "UNAVAILABLE" | "REQUIRES_ACTION" | undefined;
919
+ validityText?: string | undefined;
920
+ }>, "many">>;
921
+ message: z.ZodOptional<z.ZodString>;
922
+ }, "strip", z.ZodTypeAny, {
923
+ authoritative: boolean;
924
+ originalAmountCents: number;
925
+ appliedOfferRefs: string[];
926
+ message?: string | undefined;
927
+ savingsCents?: number | undefined;
928
+ expectedPayCents?: number | undefined;
929
+ candidates?: {
930
+ title: string;
931
+ offerRef: string;
932
+ offerType: "COUPON" | "BUNDLE" | "PROMOTION" | "ACTIVITY" | "GROUPON";
933
+ claimable: boolean;
934
+ tags: string[];
935
+ imageUrl?: string | undefined;
936
+ usageTimeText?: string | undefined;
937
+ purchaseUrl?: string | undefined;
938
+ freeCouponClaimMode?: "DIRECT" | "REDIRECT" | undefined;
939
+ itemActions?: ({
940
+ kind: "send";
941
+ label: string;
942
+ value?: string | undefined;
943
+ visibleValue?: string | undefined;
944
+ } | {
945
+ url: string;
946
+ kind: "link";
947
+ label: string;
948
+ })[] | undefined;
949
+ subtitle?: string | undefined;
950
+ benefitText?: string | undefined;
951
+ thresholdText?: string | undefined;
952
+ priceText?: string | undefined;
953
+ originalPriceText?: string | undefined;
954
+ discountLabel?: string | undefined;
955
+ claimActionLabel?: string | undefined;
956
+ stockText?: string | undefined;
957
+ usageNoticeText?: string | undefined;
958
+ guaranteeText?: string | undefined;
959
+ usageSceneText?: string | undefined;
960
+ claimTimeText?: string | undefined;
961
+ usageRuleText?: string | undefined;
962
+ availabilityStatus?: "AVAILABLE" | "UNKNOWN" | "UNAVAILABLE" | "REQUIRES_ACTION" | undefined;
963
+ validityText?: string | undefined;
964
+ }[] | undefined;
965
+ }, {
966
+ authoritative: boolean;
967
+ originalAmountCents: number;
968
+ appliedOfferRefs: string[];
969
+ message?: string | undefined;
970
+ savingsCents?: number | undefined;
971
+ expectedPayCents?: number | undefined;
972
+ candidates?: {
973
+ title: string;
974
+ offerRef: string;
975
+ offerType: "COUPON" | "BUNDLE" | "PROMOTION" | "ACTIVITY" | "GROUPON";
976
+ claimable: boolean;
977
+ tags: string[];
978
+ imageUrl?: string | undefined;
979
+ usageTimeText?: string | undefined;
980
+ purchaseUrl?: string | undefined;
981
+ freeCouponClaimMode?: "DIRECT" | "REDIRECT" | undefined;
982
+ itemActions?: ({
983
+ kind: "send";
984
+ label: string;
985
+ value?: string | undefined;
986
+ visibleValue?: string | undefined;
987
+ } | {
988
+ url: string;
989
+ kind: "link";
990
+ label: string;
991
+ })[] | undefined;
992
+ subtitle?: string | undefined;
993
+ benefitText?: string | undefined;
994
+ thresholdText?: string | undefined;
995
+ priceText?: string | undefined;
996
+ originalPriceText?: string | undefined;
997
+ discountLabel?: string | undefined;
998
+ claimActionLabel?: string | undefined;
999
+ stockText?: string | undefined;
1000
+ usageNoticeText?: string | undefined;
1001
+ guaranteeText?: string | undefined;
1002
+ usageSceneText?: string | undefined;
1003
+ claimTimeText?: string | undefined;
1004
+ usageRuleText?: string | undefined;
1005
+ availabilityStatus?: "AVAILABLE" | "UNKNOWN" | "UNAVAILABLE" | "REQUIRES_ACTION" | undefined;
1006
+ validityText?: string | undefined;
1007
+ }[] | undefined;
1008
+ }>;
1009
+ export type PromotionBestDealCardData = z.infer<typeof promotionBestDealCardDataSchema>;
1010
+ /** promotion-activity-list */
1011
+ export declare const promotionActivityListCardDataSchema: z.ZodObject<{
1012
+ items: z.ZodArray<z.ZodObject<{
1013
+ activityRef: z.ZodString;
1014
+ title: z.ZodString;
1015
+ subtitle: z.ZodOptional<z.ZodString>;
1016
+ coverUrl: z.ZodOptional<z.ZodString>;
1017
+ registrationRequired: z.ZodBoolean;
1018
+ jumpOnly: z.ZodOptional<z.ZodBoolean>;
1019
+ jumpLabel: z.ZodOptional<z.ZodString>;
1020
+ remainingQuota: z.ZodOptional<z.ZodNumber>;
1021
+ periodText: z.ZodOptional<z.ZodString>;
1022
+ categoryName: z.ZodOptional<z.ZodString>;
1023
+ availabilityStatus: z.ZodOptional<z.ZodEnum<["AVAILABLE", "FULL", "ENDED", "UPCOMING", "UNKNOWN"]>>;
1024
+ itemActions: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{
1025
+ kind: z.ZodLiteral<"send">;
1026
+ label: z.ZodString;
1027
+ value: z.ZodOptional<z.ZodString>;
1028
+ visibleValue: z.ZodOptional<z.ZodString>;
1029
+ }, "strip", z.ZodTypeAny, {
1030
+ kind: "send";
1031
+ label: string;
1032
+ value?: string | undefined;
1033
+ visibleValue?: string | undefined;
1034
+ }, {
1035
+ kind: "send";
1036
+ label: string;
1037
+ value?: string | undefined;
1038
+ visibleValue?: string | undefined;
1039
+ }>, z.ZodObject<{
1040
+ kind: z.ZodLiteral<"link">;
1041
+ label: z.ZodString;
1042
+ url: z.ZodString;
1043
+ }, "strip", z.ZodTypeAny, {
1044
+ url: string;
1045
+ kind: "link";
1046
+ label: string;
1047
+ }, {
1048
+ url: string;
1049
+ kind: "link";
1050
+ label: string;
1051
+ }>]>, "many">>;
1052
+ }, "strip", z.ZodTypeAny, {
1053
+ title: string;
1054
+ activityRef: string;
1055
+ registrationRequired: boolean;
1056
+ itemActions?: ({
1057
+ kind: "send";
1058
+ label: string;
1059
+ value?: string | undefined;
1060
+ visibleValue?: string | undefined;
1061
+ } | {
1062
+ url: string;
1063
+ kind: "link";
1064
+ label: string;
1065
+ })[] | undefined;
1066
+ coverUrl?: string | undefined;
1067
+ subtitle?: string | undefined;
1068
+ availabilityStatus?: "AVAILABLE" | "UNKNOWN" | "FULL" | "ENDED" | "UPCOMING" | undefined;
1069
+ jumpOnly?: boolean | undefined;
1070
+ jumpLabel?: string | undefined;
1071
+ remainingQuota?: number | undefined;
1072
+ periodText?: string | undefined;
1073
+ categoryName?: string | undefined;
1074
+ }, {
1075
+ title: string;
1076
+ activityRef: string;
1077
+ registrationRequired: boolean;
1078
+ itemActions?: ({
1079
+ kind: "send";
1080
+ label: string;
1081
+ value?: string | undefined;
1082
+ visibleValue?: string | undefined;
1083
+ } | {
1084
+ url: string;
1085
+ kind: "link";
1086
+ label: string;
1087
+ })[] | undefined;
1088
+ coverUrl?: string | undefined;
1089
+ subtitle?: string | undefined;
1090
+ availabilityStatus?: "AVAILABLE" | "UNKNOWN" | "FULL" | "ENDED" | "UPCOMING" | undefined;
1091
+ jumpOnly?: boolean | undefined;
1092
+ jumpLabel?: string | undefined;
1093
+ remainingQuota?: number | undefined;
1094
+ periodText?: string | undefined;
1095
+ categoryName?: string | undefined;
1096
+ }>, "many">;
1097
+ noResultsReason: z.ZodOptional<z.ZodString>;
1098
+ nextCursor: z.ZodOptional<z.ZodString>;
1099
+ }, "strip", z.ZodTypeAny, {
1100
+ items: {
1101
+ title: string;
1102
+ activityRef: string;
1103
+ registrationRequired: boolean;
1104
+ itemActions?: ({
1105
+ kind: "send";
1106
+ label: string;
1107
+ value?: string | undefined;
1108
+ visibleValue?: string | undefined;
1109
+ } | {
1110
+ url: string;
1111
+ kind: "link";
1112
+ label: string;
1113
+ })[] | undefined;
1114
+ coverUrl?: string | undefined;
1115
+ subtitle?: string | undefined;
1116
+ availabilityStatus?: "AVAILABLE" | "UNKNOWN" | "FULL" | "ENDED" | "UPCOMING" | undefined;
1117
+ jumpOnly?: boolean | undefined;
1118
+ jumpLabel?: string | undefined;
1119
+ remainingQuota?: number | undefined;
1120
+ periodText?: string | undefined;
1121
+ categoryName?: string | undefined;
1122
+ }[];
1123
+ noResultsReason?: string | undefined;
1124
+ nextCursor?: string | undefined;
1125
+ }, {
1126
+ items: {
1127
+ title: string;
1128
+ activityRef: string;
1129
+ registrationRequired: boolean;
1130
+ itemActions?: ({
1131
+ kind: "send";
1132
+ label: string;
1133
+ value?: string | undefined;
1134
+ visibleValue?: string | undefined;
1135
+ } | {
1136
+ url: string;
1137
+ kind: "link";
1138
+ label: string;
1139
+ })[] | undefined;
1140
+ coverUrl?: string | undefined;
1141
+ subtitle?: string | undefined;
1142
+ availabilityStatus?: "AVAILABLE" | "UNKNOWN" | "FULL" | "ENDED" | "UPCOMING" | undefined;
1143
+ jumpOnly?: boolean | undefined;
1144
+ jumpLabel?: string | undefined;
1145
+ remainingQuota?: number | undefined;
1146
+ periodText?: string | undefined;
1147
+ categoryName?: string | undefined;
1148
+ }[];
1149
+ noResultsReason?: string | undefined;
1150
+ nextCursor?: string | undefined;
1151
+ }>;
1152
+ export type PromotionActivityListCardData = z.infer<typeof promotionActivityListCardDataSchema>;
1153
+ /** promotion-activity-detail:详情 + 场次 + 指南 */
1154
+ export declare const promotionActivityDetailCardDataSchema: z.ZodObject<{
1155
+ presentation: z.ZodOptional<z.ZodEnum<["detail", "schedule", "guide"]>>;
1156
+ activityRef: z.ZodString;
1157
+ title: z.ZodString;
1158
+ subtitle: z.ZodOptional<z.ZodString>;
1159
+ categoryName: z.ZodOptional<z.ZodString>;
1160
+ description: z.ZodOptional<z.ZodString>;
1161
+ coverUrl: z.ZodOptional<z.ZodString>;
1162
+ periodText: z.ZodOptional<z.ZodString>;
1163
+ location: z.ZodOptional<z.ZodString>;
1164
+ registrationRequired: z.ZodBoolean;
1165
+ jumpOnly: z.ZodOptional<z.ZodBoolean>;
1166
+ jumpLabel: z.ZodOptional<z.ZodString>;
1167
+ /** 需报名时直达厂商支付宝小程序活动详情;由客户端 openLink 本地处理。 */
1168
+ registrationUrl: z.ZodOptional<z.ZodString>;
1169
+ remainingQuota: z.ZodOptional<z.ZodNumber>;
1170
+ sessions: z.ZodArray<z.ZodObject<{
1171
+ sessionRef: z.ZodString;
1172
+ title: z.ZodString;
1173
+ startText: z.ZodString;
1174
+ endText: z.ZodOptional<z.ZodString>;
1175
+ location: z.ZodOptional<z.ZodString>;
1176
+ remainingQuota: z.ZodOptional<z.ZodNumber>;
1177
+ status: z.ZodEnum<["OPEN", "FULL", "CLOSED", "UNKNOWN"]>;
1178
+ }, "strip", z.ZodTypeAny, {
1179
+ status: "CLOSED" | "UNKNOWN" | "OPEN" | "FULL";
1180
+ title: string;
1181
+ sessionRef: string;
1182
+ startText: string;
1183
+ location?: string | undefined;
1184
+ remainingQuota?: number | undefined;
1185
+ endText?: string | undefined;
1186
+ }, {
1187
+ status: "CLOSED" | "UNKNOWN" | "OPEN" | "FULL";
1188
+ title: string;
1189
+ sessionRef: string;
1190
+ startText: string;
1191
+ location?: string | undefined;
1192
+ remainingQuota?: number | undefined;
1193
+ endText?: string | undefined;
1194
+ }>, "many">;
1195
+ guideSteps: z.ZodArray<z.ZodString, "many">;
1196
+ guideItems: z.ZodOptional<z.ZodArray<z.ZodObject<{
1197
+ title: z.ZodString;
1198
+ description: z.ZodOptional<z.ZodString>;
1199
+ }, "strip", z.ZodTypeAny, {
1200
+ title: string;
1201
+ description?: string | undefined;
1202
+ }, {
1203
+ title: string;
1204
+ description?: string | undefined;
1205
+ }>, "many">>;
1206
+ conditions: z.ZodArray<z.ZodString, "many">;
1207
+ notice: z.ZodOptional<z.ZodString>;
1208
+ }, "strip", z.ZodTypeAny, {
1209
+ title: string;
1210
+ activityRef: string;
1211
+ registrationRequired: boolean;
1212
+ sessions: {
1213
+ status: "CLOSED" | "UNKNOWN" | "OPEN" | "FULL";
1214
+ title: string;
1215
+ sessionRef: string;
1216
+ startText: string;
1217
+ location?: string | undefined;
1218
+ remainingQuota?: number | undefined;
1219
+ endText?: string | undefined;
1220
+ }[];
1221
+ guideSteps: string[];
1222
+ conditions: string[];
1223
+ description?: string | undefined;
1224
+ notice?: string | undefined;
1225
+ location?: string | undefined;
1226
+ coverUrl?: string | undefined;
1227
+ presentation?: "detail" | "schedule" | "guide" | undefined;
1228
+ subtitle?: string | undefined;
1229
+ jumpOnly?: boolean | undefined;
1230
+ jumpLabel?: string | undefined;
1231
+ remainingQuota?: number | undefined;
1232
+ periodText?: string | undefined;
1233
+ categoryName?: string | undefined;
1234
+ registrationUrl?: string | undefined;
1235
+ guideItems?: {
1236
+ title: string;
1237
+ description?: string | undefined;
1238
+ }[] | undefined;
1239
+ }, {
1240
+ title: string;
1241
+ activityRef: string;
1242
+ registrationRequired: boolean;
1243
+ sessions: {
1244
+ status: "CLOSED" | "UNKNOWN" | "OPEN" | "FULL";
1245
+ title: string;
1246
+ sessionRef: string;
1247
+ startText: string;
1248
+ location?: string | undefined;
1249
+ remainingQuota?: number | undefined;
1250
+ endText?: string | undefined;
1251
+ }[];
1252
+ guideSteps: string[];
1253
+ conditions: string[];
1254
+ description?: string | undefined;
1255
+ notice?: string | undefined;
1256
+ location?: string | undefined;
1257
+ coverUrl?: string | undefined;
1258
+ presentation?: "detail" | "schedule" | "guide" | undefined;
1259
+ subtitle?: string | undefined;
1260
+ jumpOnly?: boolean | undefined;
1261
+ jumpLabel?: string | undefined;
1262
+ remainingQuota?: number | undefined;
1263
+ periodText?: string | undefined;
1264
+ categoryName?: string | undefined;
1265
+ registrationUrl?: string | undefined;
1266
+ guideItems?: {
1267
+ title: string;
1268
+ description?: string | undefined;
1269
+ }[] | undefined;
1270
+ }>;
1271
+ export type PromotionActivityDetailCardData = z.infer<typeof promotionActivityDetailCardDataSchema>;
1272
+ /** promotion-bumpin-activity card schema 已迁移至 alipay-activity/cards.ts,此处 re-export 保持向后兼容 */
1273
+ export { promotionBumpInActivityCardDataSchema, type PromotionBumpInActivityCardData, } from '../alipay-activity/cards';
1274
+ /** 10 个稳定传输卡型;其 presentation 变体覆盖 19 个 legacy 业务展示语义。 */
1275
+ export declare const promotionCardDataSchemas: {
1276
+ readonly 'promotion-offer-list': z.ZodObject<{
1277
+ presentation: z.ZodOptional<z.ZodEnum<["offer", "promotion", "coupon", "recommendation"]>>;
1278
+ mode: z.ZodEnum<["search", "claimable", "recommend"]>;
1279
+ /** 客户端默认展示 4 条;传入正整数可覆盖该上限。 */
1280
+ maxItems: z.ZodOptional<z.ZodNumber>;
1281
+ summary: z.ZodOptional<z.ZodString>;
1282
+ items: z.ZodArray<z.ZodObject<{
1283
+ offerRef: z.ZodString;
1284
+ title: z.ZodString;
1285
+ subtitle: z.ZodOptional<z.ZodString>;
1286
+ offerType: z.ZodEnum<["COUPON", "BUNDLE", "PROMOTION", "ACTIVITY", "GROUPON"]>;
1287
+ /** 主 facet 一句话(如「满 100 减 20」) */
1288
+ benefitText: z.ZodOptional<z.ZodString>;
1289
+ /** 使用门槛(如「满 300 元可用」) */
1290
+ thresholdText: z.ZodOptional<z.ZodString>;
1291
+ /**
1292
+ * 券的**售价**展示,与 benefitText 是两回事——后者说优惠内容,这里说买这张券要花多少。
1293
+ * 免费券给「免费」,付费券给「¥28.8」。文案由 provider 直接给:各厂商币种、小数位与
1294
+ * 「免费/0 元」措辞不一,客户端不做数值运算也不反解金额。
1295
+ */
1296
+ priceText: z.ZodOptional<z.ZodString>;
1297
+ /** 划线原价(如「¥38.8」)。与 priceText 成对出现才有意义,单独给不渲染。 */
1298
+ originalPriceText: z.ZodOptional<z.ZodString>;
1299
+ /** 折扣角标(如「7.5折」)。同样是 provider 直出文案,不由前端拿两个价格算。 */
1300
+ discountLabel: z.ZodOptional<z.ZodString>;
1301
+ /**
1302
+ * 领取按钮文案:免费券「领取」、付费券「抢购」。由 provider 给而非前端按 priceText
1303
+ * 猜——「免费」的写法各家不同,猜错就把付费券写成领取。缺省回落「领取」。
1304
+ */
1305
+ claimActionLabel: z.ZodOptional<z.ZodString>;
1306
+ purchaseUrl: z.ZodOptional<z.ZodString>;
1307
+ freeCouponClaimMode: z.ZodOptional<z.ZodEnum<["DIRECT", "REDIRECT"]>>;
1308
+ /**
1309
+ * 下面三条供**列表内的详情浮层**渲染——浮层就地展开,没有二次请求可拉,
1310
+ * 需要的信息必须随列表一起下发。厂商不给就不渲染对应区块。
1311
+ */
1312
+ stockText: z.ZodOptional<z.ZodString>;
1313
+ usageNoticeText: z.ZodOptional<z.ZodString>;
1314
+ guaranteeText: z.ZodOptional<z.ZodString>;
1315
+ usageSceneText: z.ZodOptional<z.ZodString>;
1316
+ usageTimeText: z.ZodOptional<z.ZodString>;
1317
+ claimTimeText: z.ZodOptional<z.ZodString>;
1318
+ usageRuleText: z.ZodOptional<z.ZodString>;
1319
+ /** 可领取(availability.status === 'AVAILABLE') */
1320
+ claimable: z.ZodBoolean;
1321
+ availabilityStatus: z.ZodOptional<z.ZodEnum<["AVAILABLE", "UNAVAILABLE", "REQUIRES_ACTION", "UNKNOWN"]>>;
1322
+ validityText: z.ZodOptional<z.ZodString>;
1323
+ imageUrl: z.ZodOptional<z.ZodString>;
1324
+ /** 0.3.2 D4:条目动作(send:查看详情) */
1325
+ itemActions: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{
1326
+ kind: z.ZodLiteral<"send">;
1327
+ label: z.ZodString;
1328
+ value: z.ZodOptional<z.ZodString>;
1329
+ visibleValue: z.ZodOptional<z.ZodString>;
1330
+ }, "strip", z.ZodTypeAny, {
1331
+ kind: "send";
1332
+ label: string;
1333
+ value?: string | undefined;
1334
+ visibleValue?: string | undefined;
1335
+ }, {
1336
+ kind: "send";
1337
+ label: string;
1338
+ value?: string | undefined;
1339
+ visibleValue?: string | undefined;
1340
+ }>, z.ZodObject<{
1341
+ kind: z.ZodLiteral<"link">;
1342
+ label: z.ZodString;
1343
+ url: z.ZodString;
1344
+ }, "strip", z.ZodTypeAny, {
1345
+ url: string;
1346
+ kind: "link";
1347
+ label: string;
1348
+ }, {
1349
+ url: string;
1350
+ kind: "link";
1351
+ label: string;
1352
+ }>]>, "many">>;
1353
+ tags: z.ZodArray<z.ZodString, "many">;
1354
+ }, "strip", z.ZodTypeAny, {
1355
+ title: string;
1356
+ offerRef: string;
1357
+ offerType: "COUPON" | "BUNDLE" | "PROMOTION" | "ACTIVITY" | "GROUPON";
1358
+ claimable: boolean;
1359
+ tags: string[];
1360
+ imageUrl?: string | undefined;
1361
+ usageTimeText?: string | undefined;
1362
+ purchaseUrl?: string | undefined;
1363
+ freeCouponClaimMode?: "DIRECT" | "REDIRECT" | undefined;
1364
+ itemActions?: ({
1365
+ kind: "send";
1366
+ label: string;
1367
+ value?: string | undefined;
1368
+ visibleValue?: string | undefined;
1369
+ } | {
1370
+ url: string;
1371
+ kind: "link";
1372
+ label: string;
1373
+ })[] | undefined;
1374
+ subtitle?: string | undefined;
1375
+ benefitText?: string | undefined;
1376
+ thresholdText?: string | undefined;
1377
+ priceText?: string | undefined;
1378
+ originalPriceText?: string | undefined;
1379
+ discountLabel?: string | undefined;
1380
+ claimActionLabel?: string | undefined;
1381
+ stockText?: string | undefined;
1382
+ usageNoticeText?: string | undefined;
1383
+ guaranteeText?: string | undefined;
1384
+ usageSceneText?: string | undefined;
1385
+ claimTimeText?: string | undefined;
1386
+ usageRuleText?: string | undefined;
1387
+ availabilityStatus?: "AVAILABLE" | "UNKNOWN" | "UNAVAILABLE" | "REQUIRES_ACTION" | undefined;
1388
+ validityText?: string | undefined;
1389
+ }, {
1390
+ title: string;
1391
+ offerRef: string;
1392
+ offerType: "COUPON" | "BUNDLE" | "PROMOTION" | "ACTIVITY" | "GROUPON";
1393
+ claimable: boolean;
1394
+ tags: string[];
1395
+ imageUrl?: string | undefined;
1396
+ usageTimeText?: string | undefined;
1397
+ purchaseUrl?: string | undefined;
1398
+ freeCouponClaimMode?: "DIRECT" | "REDIRECT" | undefined;
1399
+ itemActions?: ({
1400
+ kind: "send";
1401
+ label: string;
1402
+ value?: string | undefined;
1403
+ visibleValue?: string | undefined;
1404
+ } | {
1405
+ url: string;
1406
+ kind: "link";
1407
+ label: string;
1408
+ })[] | undefined;
1409
+ subtitle?: string | undefined;
1410
+ benefitText?: string | undefined;
1411
+ thresholdText?: string | undefined;
1412
+ priceText?: string | undefined;
1413
+ originalPriceText?: string | undefined;
1414
+ discountLabel?: string | undefined;
1415
+ claimActionLabel?: string | undefined;
1416
+ stockText?: string | undefined;
1417
+ usageNoticeText?: string | undefined;
1418
+ guaranteeText?: string | undefined;
1419
+ usageSceneText?: string | undefined;
1420
+ claimTimeText?: string | undefined;
1421
+ usageRuleText?: string | undefined;
1422
+ availabilityStatus?: "AVAILABLE" | "UNKNOWN" | "UNAVAILABLE" | "REQUIRES_ACTION" | undefined;
1423
+ validityText?: string | undefined;
1424
+ }>, "many">;
1425
+ noResultsReason: z.ZodOptional<z.ZodString>;
1426
+ nextCursor: z.ZodOptional<z.ZodString>;
1427
+ }, "strip", z.ZodTypeAny, {
1428
+ items: {
1429
+ title: string;
1430
+ offerRef: string;
1431
+ offerType: "COUPON" | "BUNDLE" | "PROMOTION" | "ACTIVITY" | "GROUPON";
1432
+ claimable: boolean;
1433
+ tags: string[];
1434
+ imageUrl?: string | undefined;
1435
+ usageTimeText?: string | undefined;
1436
+ purchaseUrl?: string | undefined;
1437
+ freeCouponClaimMode?: "DIRECT" | "REDIRECT" | undefined;
1438
+ itemActions?: ({
1439
+ kind: "send";
1440
+ label: string;
1441
+ value?: string | undefined;
1442
+ visibleValue?: string | undefined;
1443
+ } | {
1444
+ url: string;
1445
+ kind: "link";
1446
+ label: string;
1447
+ })[] | undefined;
1448
+ subtitle?: string | undefined;
1449
+ benefitText?: string | undefined;
1450
+ thresholdText?: string | undefined;
1451
+ priceText?: string | undefined;
1452
+ originalPriceText?: string | undefined;
1453
+ discountLabel?: string | undefined;
1454
+ claimActionLabel?: string | undefined;
1455
+ stockText?: string | undefined;
1456
+ usageNoticeText?: string | undefined;
1457
+ guaranteeText?: string | undefined;
1458
+ usageSceneText?: string | undefined;
1459
+ claimTimeText?: string | undefined;
1460
+ usageRuleText?: string | undefined;
1461
+ availabilityStatus?: "AVAILABLE" | "UNKNOWN" | "UNAVAILABLE" | "REQUIRES_ACTION" | undefined;
1462
+ validityText?: string | undefined;
1463
+ }[];
1464
+ mode: "search" | "claimable" | "recommend";
1465
+ summary?: string | undefined;
1466
+ noResultsReason?: string | undefined;
1467
+ presentation?: "coupon" | "promotion" | "recommendation" | "offer" | undefined;
1468
+ maxItems?: number | undefined;
1469
+ nextCursor?: string | undefined;
1470
+ }, {
1471
+ items: {
1472
+ title: string;
1473
+ offerRef: string;
1474
+ offerType: "COUPON" | "BUNDLE" | "PROMOTION" | "ACTIVITY" | "GROUPON";
1475
+ claimable: boolean;
1476
+ tags: string[];
1477
+ imageUrl?: string | undefined;
1478
+ usageTimeText?: string | undefined;
1479
+ purchaseUrl?: string | undefined;
1480
+ freeCouponClaimMode?: "DIRECT" | "REDIRECT" | undefined;
1481
+ itemActions?: ({
1482
+ kind: "send";
1483
+ label: string;
1484
+ value?: string | undefined;
1485
+ visibleValue?: string | undefined;
1486
+ } | {
1487
+ url: string;
1488
+ kind: "link";
1489
+ label: string;
1490
+ })[] | undefined;
1491
+ subtitle?: string | undefined;
1492
+ benefitText?: string | undefined;
1493
+ thresholdText?: string | undefined;
1494
+ priceText?: string | undefined;
1495
+ originalPriceText?: string | undefined;
1496
+ discountLabel?: string | undefined;
1497
+ claimActionLabel?: string | undefined;
1498
+ stockText?: string | undefined;
1499
+ usageNoticeText?: string | undefined;
1500
+ guaranteeText?: string | undefined;
1501
+ usageSceneText?: string | undefined;
1502
+ claimTimeText?: string | undefined;
1503
+ usageRuleText?: string | undefined;
1504
+ availabilityStatus?: "AVAILABLE" | "UNKNOWN" | "UNAVAILABLE" | "REQUIRES_ACTION" | undefined;
1505
+ validityText?: string | undefined;
1506
+ }[];
1507
+ mode: "search" | "claimable" | "recommend";
1508
+ summary?: string | undefined;
1509
+ noResultsReason?: string | undefined;
1510
+ presentation?: "coupon" | "promotion" | "recommendation" | "offer" | undefined;
1511
+ maxItems?: number | undefined;
1512
+ nextCursor?: string | undefined;
1513
+ }>;
1514
+ readonly 'promotion-offer-detail': z.ZodObject<{
1515
+ presentation: z.ZodOptional<z.ZodEnum<["offer", "promotion", "promotion-guide", "coupon", "package"]>>;
1516
+ offerRef: z.ZodString;
1517
+ title: z.ZodString;
1518
+ offerType: z.ZodEnum<["COUPON", "BUNDLE", "PROMOTION", "ACTIVITY", "GROUPON"]>;
1519
+ subtitle: z.ZodOptional<z.ZodString>;
1520
+ description: z.ZodOptional<z.ZodString>;
1521
+ imageUrl: z.ZodOptional<z.ZodString>;
1522
+ benefitText: z.ZodOptional<z.ZodString>;
1523
+ thresholdText: z.ZodOptional<z.ZodString>;
1524
+ validityText: z.ZodOptional<z.ZodString>;
1525
+ /** 售价三件套,语义同 offerSummary(provider 直出文案,前端不做运算) */
1526
+ priceText: z.ZodOptional<z.ZodString>;
1527
+ originalPriceText: z.ZodOptional<z.ZodString>;
1528
+ discountLabel: z.ZodOptional<z.ZodString>;
1529
+ claimActionLabel: z.ZodOptional<z.ZodString>;
1530
+ purchaseUrl: z.ZodOptional<z.ZodString>;
1531
+ /** 剩余库存文案(如「剩余:29」);厂商不给就不展示,别拿 0 当「售罄」用 */
1532
+ stockText: z.ZodOptional<z.ZodString>;
1533
+ usageNoticeText: z.ZodOptional<z.ZodString>;
1534
+ /** 核销场景(如「万铺小二核销」)——告诉用户这张券在哪、怎么用掉 */
1535
+ usageSceneText: z.ZodOptional<z.ZodString>;
1536
+ usageTimeText: z.ZodOptional<z.ZodString>;
1537
+ claimTimeText: z.ZodOptional<z.ZodString>;
1538
+ usageRuleText: z.ZodOptional<z.ZodString>;
1539
+ guaranteeText: z.ZodOptional<z.ZodString>;
1540
+ /** 使用规则/参与步骤 */
1541
+ rules: z.ZodArray<z.ZodString, "many">;
1542
+ participationMode: z.ZodOptional<z.ZodEnum<["AUTOMATIC_DISCOUNT", "CLAIM_THEN_PURCHASE", "REGISTER_THEN_ATTEND", "GROUP_PURCHASE", "UNKNOWN"]>>;
1543
+ steps: z.ZodOptional<z.ZodArray<z.ZodObject<{
1544
+ title: z.ZodString;
1545
+ description: z.ZodOptional<z.ZodString>;
1546
+ }, "strip", z.ZodTypeAny, {
1547
+ title: string;
1548
+ description?: string | undefined;
1549
+ }, {
1550
+ title: string;
1551
+ description?: string | undefined;
1552
+ }>, "many">>;
1553
+ requirements: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
1554
+ notice: z.ZodOptional<z.ZodString>;
1555
+ /** 厂商可提供时展示适用门店;可选以兼容历史卡数据。 */
1556
+ stores: z.ZodOptional<z.ZodArray<z.ZodObject<{
1557
+ storeId: z.ZodString;
1558
+ storeName: z.ZodString;
1559
+ businessName: z.ZodOptional<z.ZodString>;
1560
+ address: z.ZodOptional<z.ZodString>;
1561
+ floor: z.ZodOptional<z.ZodString>;
1562
+ }, "strip", z.ZodTypeAny, {
1563
+ storeId: string;
1564
+ storeName: string;
1565
+ address?: string | undefined;
1566
+ businessName?: string | undefined;
1567
+ floor?: string | undefined;
1568
+ }, {
1569
+ storeId: string;
1570
+ storeName: string;
1571
+ address?: string | undefined;
1572
+ businessName?: string | undefined;
1573
+ floor?: string | undefined;
1574
+ }>, "many">>;
1575
+ bundleItems: z.ZodOptional<z.ZodArray<z.ZodObject<{
1576
+ name: z.ZodString;
1577
+ quantity: z.ZodNumber;
1578
+ }, "strip", z.ZodTypeAny, {
1579
+ name: string;
1580
+ quantity: number;
1581
+ }, {
1582
+ name: string;
1583
+ quantity: number;
1584
+ }>, "many">>;
1585
+ /** 领取动作是否可用(未登录会员/不可用 → false + unavailableReason) */
1586
+ claimable: z.ZodBoolean;
1587
+ unavailableReason: z.ZodOptional<z.ZodString>;
1588
+ caveats: z.ZodArray<z.ZodString, "many">;
1589
+ }, "strip", z.ZodTypeAny, {
1590
+ title: string;
1591
+ offerRef: string;
1592
+ caveats: string[];
1593
+ offerType: "COUPON" | "BUNDLE" | "PROMOTION" | "ACTIVITY" | "GROUPON";
1594
+ claimable: boolean;
1595
+ rules: string[];
1596
+ description?: string | undefined;
1597
+ notice?: string | undefined;
1598
+ imageUrl?: string | undefined;
1599
+ usageTimeText?: string | undefined;
1600
+ purchaseUrl?: string | undefined;
1601
+ presentation?: "coupon" | "promotion" | "offer" | "promotion-guide" | "package" | undefined;
1602
+ subtitle?: string | undefined;
1603
+ steps?: {
1604
+ title: string;
1605
+ description?: string | undefined;
1606
+ }[] | undefined;
1607
+ benefitText?: string | undefined;
1608
+ thresholdText?: string | undefined;
1609
+ priceText?: string | undefined;
1610
+ originalPriceText?: string | undefined;
1611
+ discountLabel?: string | undefined;
1612
+ claimActionLabel?: string | undefined;
1613
+ stockText?: string | undefined;
1614
+ usageNoticeText?: string | undefined;
1615
+ guaranteeText?: string | undefined;
1616
+ usageSceneText?: string | undefined;
1617
+ claimTimeText?: string | undefined;
1618
+ usageRuleText?: string | undefined;
1619
+ validityText?: string | undefined;
1620
+ participationMode?: "UNKNOWN" | "AUTOMATIC_DISCOUNT" | "CLAIM_THEN_PURCHASE" | "REGISTER_THEN_ATTEND" | "GROUP_PURCHASE" | undefined;
1621
+ requirements?: string[] | undefined;
1622
+ stores?: {
1623
+ storeId: string;
1624
+ storeName: string;
1625
+ address?: string | undefined;
1626
+ businessName?: string | undefined;
1627
+ floor?: string | undefined;
1628
+ }[] | undefined;
1629
+ bundleItems?: {
1630
+ name: string;
1631
+ quantity: number;
1632
+ }[] | undefined;
1633
+ unavailableReason?: string | undefined;
1634
+ }, {
1635
+ title: string;
1636
+ offerRef: string;
1637
+ caveats: string[];
1638
+ offerType: "COUPON" | "BUNDLE" | "PROMOTION" | "ACTIVITY" | "GROUPON";
1639
+ claimable: boolean;
1640
+ rules: string[];
1641
+ description?: string | undefined;
1642
+ notice?: string | undefined;
1643
+ imageUrl?: string | undefined;
1644
+ usageTimeText?: string | undefined;
1645
+ purchaseUrl?: string | undefined;
1646
+ presentation?: "coupon" | "promotion" | "offer" | "promotion-guide" | "package" | undefined;
1647
+ subtitle?: string | undefined;
1648
+ steps?: {
1649
+ title: string;
1650
+ description?: string | undefined;
1651
+ }[] | undefined;
1652
+ benefitText?: string | undefined;
1653
+ thresholdText?: string | undefined;
1654
+ priceText?: string | undefined;
1655
+ originalPriceText?: string | undefined;
1656
+ discountLabel?: string | undefined;
1657
+ claimActionLabel?: string | undefined;
1658
+ stockText?: string | undefined;
1659
+ usageNoticeText?: string | undefined;
1660
+ guaranteeText?: string | undefined;
1661
+ usageSceneText?: string | undefined;
1662
+ claimTimeText?: string | undefined;
1663
+ usageRuleText?: string | undefined;
1664
+ validityText?: string | undefined;
1665
+ participationMode?: "UNKNOWN" | "AUTOMATIC_DISCOUNT" | "CLAIM_THEN_PURCHASE" | "REGISTER_THEN_ATTEND" | "GROUP_PURCHASE" | undefined;
1666
+ requirements?: string[] | undefined;
1667
+ stores?: {
1668
+ storeId: string;
1669
+ storeName: string;
1670
+ address?: string | undefined;
1671
+ businessName?: string | undefined;
1672
+ floor?: string | undefined;
1673
+ }[] | undefined;
1674
+ bundleItems?: {
1675
+ name: string;
1676
+ quantity: number;
1677
+ }[] | undefined;
1678
+ unavailableReason?: string | undefined;
1679
+ }>;
1680
+ readonly 'promotion-entitlement-list': z.ZodObject<{
1681
+ mallId: z.ZodOptional<z.ZodString>;
1682
+ miniAppId: z.ZodOptional<z.ZodString>;
1683
+ /** 客户端默认展示 4 条;传入正整数可覆盖该上限。 */
1684
+ maxItems: z.ZodOptional<z.ZodNumber>;
1685
+ items: z.ZodArray<z.ZodObject<{
1686
+ entitlementRef: z.ZodString;
1687
+ title: z.ZodString;
1688
+ imageUrl: z.ZodOptional<z.ZodString>;
1689
+ entitlementType: z.ZodEnum<["COUPON", "BUNDLE", "PROMOTION", "ACTIVITY", "GROUPON"]>;
1690
+ status: z.ZodEnum<["EFFECTIVE", "USED", "EXPIRED", "INVALID", "UNKNOWN"]>;
1691
+ codeMasked: z.ZodOptional<z.ZodString>;
1692
+ code: z.ZodOptional<z.ZodString>;
1693
+ qrCodeEnabled: z.ZodOptional<z.ZodBoolean>;
1694
+ benefitText: z.ZodOptional<z.ZodString>;
1695
+ thresholdText: z.ZodOptional<z.ZodString>;
1696
+ usageNotice: z.ZodOptional<z.ZodString>;
1697
+ guaranteeText: z.ZodOptional<z.ZodString>;
1698
+ usageSceneText: z.ZodOptional<z.ZodString>;
1699
+ usageTimeText: z.ZodOptional<z.ZodString>;
1700
+ claimTimeText: z.ZodOptional<z.ZodString>;
1701
+ usageRuleText: z.ZodOptional<z.ZodString>;
1702
+ validityText: z.ZodOptional<z.ZodString>;
1703
+ validUntilText: z.ZodOptional<z.ZodString>;
1704
+ /** 0.3.2 D4:条目动作(send:查看详情) */
1705
+ itemActions: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{
1706
+ kind: z.ZodLiteral<"send">;
1707
+ label: z.ZodString;
1708
+ value: z.ZodOptional<z.ZodString>;
1709
+ visibleValue: z.ZodOptional<z.ZodString>;
1710
+ }, "strip", z.ZodTypeAny, {
1711
+ kind: "send";
1712
+ label: string;
1713
+ value?: string | undefined;
1714
+ visibleValue?: string | undefined;
1715
+ }, {
1716
+ kind: "send";
1717
+ label: string;
1718
+ value?: string | undefined;
1719
+ visibleValue?: string | undefined;
1720
+ }>, z.ZodObject<{
1721
+ kind: z.ZodLiteral<"link">;
1722
+ label: z.ZodString;
1723
+ url: z.ZodString;
1724
+ }, "strip", z.ZodTypeAny, {
1725
+ url: string;
1726
+ kind: "link";
1727
+ label: string;
1728
+ }, {
1729
+ url: string;
1730
+ kind: "link";
1731
+ label: string;
1732
+ }>]>, "many">>;
1733
+ stores: z.ZodOptional<z.ZodArray<z.ZodObject<{
1734
+ storeId: z.ZodString;
1735
+ storeName: z.ZodString;
1736
+ businessName: z.ZodOptional<z.ZodString>;
1737
+ imageUrl: z.ZodOptional<z.ZodString>;
1738
+ address: z.ZodOptional<z.ZodString>;
1739
+ floor: z.ZodOptional<z.ZodString>;
1740
+ latitude: z.ZodOptional<z.ZodNumber>;
1741
+ longitude: z.ZodOptional<z.ZodNumber>;
1742
+ }, "strip", z.ZodTypeAny, {
1743
+ storeId: string;
1744
+ storeName: string;
1745
+ latitude?: number | undefined;
1746
+ longitude?: number | undefined;
1747
+ imageUrl?: string | undefined;
1748
+ address?: string | undefined;
1749
+ businessName?: string | undefined;
1750
+ floor?: string | undefined;
1751
+ }, {
1752
+ storeId: string;
1753
+ storeName: string;
1754
+ latitude?: number | undefined;
1755
+ longitude?: number | undefined;
1756
+ imageUrl?: string | undefined;
1757
+ address?: string | undefined;
1758
+ businessName?: string | undefined;
1759
+ floor?: string | undefined;
1760
+ }>, "many">>;
1761
+ }, "strip", z.ZodTypeAny, {
1762
+ status: "USED" | "EXPIRED" | "UNKNOWN" | "EFFECTIVE" | "INVALID";
1763
+ title: string;
1764
+ entitlementRef: string;
1765
+ entitlementType: "COUPON" | "BUNDLE" | "PROMOTION" | "ACTIVITY" | "GROUPON";
1766
+ code?: string | undefined;
1767
+ imageUrl?: string | undefined;
1768
+ usageTimeText?: string | undefined;
1769
+ itemActions?: ({
1770
+ kind: "send";
1771
+ label: string;
1772
+ value?: string | undefined;
1773
+ visibleValue?: string | undefined;
1774
+ } | {
1775
+ url: string;
1776
+ kind: "link";
1777
+ label: string;
1778
+ })[] | undefined;
1779
+ benefitText?: string | undefined;
1780
+ thresholdText?: string | undefined;
1781
+ guaranteeText?: string | undefined;
1782
+ usageSceneText?: string | undefined;
1783
+ claimTimeText?: string | undefined;
1784
+ usageRuleText?: string | undefined;
1785
+ validityText?: string | undefined;
1786
+ stores?: {
1787
+ storeId: string;
1788
+ storeName: string;
1789
+ latitude?: number | undefined;
1790
+ longitude?: number | undefined;
1791
+ imageUrl?: string | undefined;
1792
+ address?: string | undefined;
1793
+ businessName?: string | undefined;
1794
+ floor?: string | undefined;
1795
+ }[] | undefined;
1796
+ codeMasked?: string | undefined;
1797
+ qrCodeEnabled?: boolean | undefined;
1798
+ usageNotice?: string | undefined;
1799
+ validUntilText?: string | undefined;
1800
+ }, {
1801
+ status: "USED" | "EXPIRED" | "UNKNOWN" | "EFFECTIVE" | "INVALID";
1802
+ title: string;
1803
+ entitlementRef: string;
1804
+ entitlementType: "COUPON" | "BUNDLE" | "PROMOTION" | "ACTIVITY" | "GROUPON";
1805
+ code?: string | undefined;
1806
+ imageUrl?: string | undefined;
1807
+ usageTimeText?: string | undefined;
1808
+ itemActions?: ({
1809
+ kind: "send";
1810
+ label: string;
1811
+ value?: string | undefined;
1812
+ visibleValue?: string | undefined;
1813
+ } | {
1814
+ url: string;
1815
+ kind: "link";
1816
+ label: string;
1817
+ })[] | undefined;
1818
+ benefitText?: string | undefined;
1819
+ thresholdText?: string | undefined;
1820
+ guaranteeText?: string | undefined;
1821
+ usageSceneText?: string | undefined;
1822
+ claimTimeText?: string | undefined;
1823
+ usageRuleText?: string | undefined;
1824
+ validityText?: string | undefined;
1825
+ stores?: {
1826
+ storeId: string;
1827
+ storeName: string;
1828
+ latitude?: number | undefined;
1829
+ longitude?: number | undefined;
1830
+ imageUrl?: string | undefined;
1831
+ address?: string | undefined;
1832
+ businessName?: string | undefined;
1833
+ floor?: string | undefined;
1834
+ }[] | undefined;
1835
+ codeMasked?: string | undefined;
1836
+ qrCodeEnabled?: boolean | undefined;
1837
+ usageNotice?: string | undefined;
1838
+ validUntilText?: string | undefined;
1839
+ }>, "many">;
1840
+ noResultsReason: z.ZodOptional<z.ZodString>;
1841
+ nextCursor: z.ZodOptional<z.ZodString>;
1842
+ }, "strip", z.ZodTypeAny, {
1843
+ items: {
1844
+ status: "USED" | "EXPIRED" | "UNKNOWN" | "EFFECTIVE" | "INVALID";
1845
+ title: string;
1846
+ entitlementRef: string;
1847
+ entitlementType: "COUPON" | "BUNDLE" | "PROMOTION" | "ACTIVITY" | "GROUPON";
1848
+ code?: string | undefined;
1849
+ imageUrl?: string | undefined;
1850
+ usageTimeText?: string | undefined;
1851
+ itemActions?: ({
1852
+ kind: "send";
1853
+ label: string;
1854
+ value?: string | undefined;
1855
+ visibleValue?: string | undefined;
1856
+ } | {
1857
+ url: string;
1858
+ kind: "link";
1859
+ label: string;
1860
+ })[] | undefined;
1861
+ benefitText?: string | undefined;
1862
+ thresholdText?: string | undefined;
1863
+ guaranteeText?: string | undefined;
1864
+ usageSceneText?: string | undefined;
1865
+ claimTimeText?: string | undefined;
1866
+ usageRuleText?: string | undefined;
1867
+ validityText?: string | undefined;
1868
+ stores?: {
1869
+ storeId: string;
1870
+ storeName: string;
1871
+ latitude?: number | undefined;
1872
+ longitude?: number | undefined;
1873
+ imageUrl?: string | undefined;
1874
+ address?: string | undefined;
1875
+ businessName?: string | undefined;
1876
+ floor?: string | undefined;
1877
+ }[] | undefined;
1878
+ codeMasked?: string | undefined;
1879
+ qrCodeEnabled?: boolean | undefined;
1880
+ usageNotice?: string | undefined;
1881
+ validUntilText?: string | undefined;
1882
+ }[];
1883
+ miniAppId?: string | undefined;
1884
+ mallId?: string | undefined;
1885
+ noResultsReason?: string | undefined;
1886
+ maxItems?: number | undefined;
1887
+ nextCursor?: string | undefined;
1888
+ }, {
1889
+ items: {
1890
+ status: "USED" | "EXPIRED" | "UNKNOWN" | "EFFECTIVE" | "INVALID";
1891
+ title: string;
1892
+ entitlementRef: string;
1893
+ entitlementType: "COUPON" | "BUNDLE" | "PROMOTION" | "ACTIVITY" | "GROUPON";
1894
+ code?: string | undefined;
1895
+ imageUrl?: string | undefined;
1896
+ usageTimeText?: string | undefined;
1897
+ itemActions?: ({
1898
+ kind: "send";
1899
+ label: string;
1900
+ value?: string | undefined;
1901
+ visibleValue?: string | undefined;
1902
+ } | {
1903
+ url: string;
1904
+ kind: "link";
1905
+ label: string;
1906
+ })[] | undefined;
1907
+ benefitText?: string | undefined;
1908
+ thresholdText?: string | undefined;
1909
+ guaranteeText?: string | undefined;
1910
+ usageSceneText?: string | undefined;
1911
+ claimTimeText?: string | undefined;
1912
+ usageRuleText?: string | undefined;
1913
+ validityText?: string | undefined;
1914
+ stores?: {
1915
+ storeId: string;
1916
+ storeName: string;
1917
+ latitude?: number | undefined;
1918
+ longitude?: number | undefined;
1919
+ imageUrl?: string | undefined;
1920
+ address?: string | undefined;
1921
+ businessName?: string | undefined;
1922
+ floor?: string | undefined;
1923
+ }[] | undefined;
1924
+ codeMasked?: string | undefined;
1925
+ qrCodeEnabled?: boolean | undefined;
1926
+ usageNotice?: string | undefined;
1927
+ validUntilText?: string | undefined;
1928
+ }[];
1929
+ miniAppId?: string | undefined;
1930
+ mallId?: string | undefined;
1931
+ noResultsReason?: string | undefined;
1932
+ maxItems?: number | undefined;
1933
+ nextCursor?: string | undefined;
1934
+ }>;
1935
+ readonly 'promotion-activity-category-list': z.ZodObject<{
1936
+ items: z.ZodArray<z.ZodObject<{
1937
+ categoryId: z.ZodString;
1938
+ name: z.ZodString;
1939
+ parentId: z.ZodOptional<z.ZodString>;
1940
+ itemActions: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{
1941
+ kind: z.ZodLiteral<"send">;
1942
+ label: z.ZodString;
1943
+ value: z.ZodOptional<z.ZodString>;
1944
+ visibleValue: z.ZodOptional<z.ZodString>;
1945
+ }, "strip", z.ZodTypeAny, {
1946
+ kind: "send";
1947
+ label: string;
1948
+ value?: string | undefined;
1949
+ visibleValue?: string | undefined;
1950
+ }, {
1951
+ kind: "send";
1952
+ label: string;
1953
+ value?: string | undefined;
1954
+ visibleValue?: string | undefined;
1955
+ }>, z.ZodObject<{
1956
+ kind: z.ZodLiteral<"link">;
1957
+ label: z.ZodString;
1958
+ url: z.ZodString;
1959
+ }, "strip", z.ZodTypeAny, {
1960
+ url: string;
1961
+ kind: "link";
1962
+ label: string;
1963
+ }, {
1964
+ url: string;
1965
+ kind: "link";
1966
+ label: string;
1967
+ }>]>, "many">>;
1968
+ }, "strip", z.ZodTypeAny, {
1969
+ name: string;
1970
+ categoryId: string;
1971
+ itemActions?: ({
1972
+ kind: "send";
1973
+ label: string;
1974
+ value?: string | undefined;
1975
+ visibleValue?: string | undefined;
1976
+ } | {
1977
+ url: string;
1978
+ kind: "link";
1979
+ label: string;
1980
+ })[] | undefined;
1981
+ parentId?: string | undefined;
1982
+ }, {
1983
+ name: string;
1984
+ categoryId: string;
1985
+ itemActions?: ({
1986
+ kind: "send";
1987
+ label: string;
1988
+ value?: string | undefined;
1989
+ visibleValue?: string | undefined;
1990
+ } | {
1991
+ url: string;
1992
+ kind: "link";
1993
+ label: string;
1994
+ })[] | undefined;
1995
+ parentId?: string | undefined;
1996
+ }>, "many">;
1997
+ noResultsReason: z.ZodOptional<z.ZodString>;
1998
+ }, "strip", z.ZodTypeAny, {
1999
+ items: {
2000
+ name: string;
2001
+ categoryId: string;
2002
+ itemActions?: ({
2003
+ kind: "send";
2004
+ label: string;
2005
+ value?: string | undefined;
2006
+ visibleValue?: string | undefined;
2007
+ } | {
2008
+ url: string;
2009
+ kind: "link";
2010
+ label: string;
2011
+ })[] | undefined;
2012
+ parentId?: string | undefined;
2013
+ }[];
2014
+ noResultsReason?: string | undefined;
2015
+ }, {
2016
+ items: {
2017
+ name: string;
2018
+ categoryId: string;
2019
+ itemActions?: ({
2020
+ kind: "send";
2021
+ label: string;
2022
+ value?: string | undefined;
2023
+ visibleValue?: string | undefined;
2024
+ } | {
2025
+ url: string;
2026
+ kind: "link";
2027
+ label: string;
2028
+ })[] | undefined;
2029
+ parentId?: string | undefined;
2030
+ }[];
2031
+ noResultsReason?: string | undefined;
2032
+ }>;
2033
+ readonly 'promotion-best-deal': z.ZodObject<{
2034
+ authoritative: z.ZodBoolean;
2035
+ originalAmountCents: z.ZodNumber;
2036
+ savingsCents: z.ZodOptional<z.ZodNumber>;
2037
+ expectedPayCents: z.ZodOptional<z.ZodNumber>;
2038
+ appliedOfferRefs: z.ZodArray<z.ZodString, "many">;
2039
+ candidates: z.ZodOptional<z.ZodArray<z.ZodObject<{
2040
+ offerRef: z.ZodString;
2041
+ title: z.ZodString;
2042
+ subtitle: z.ZodOptional<z.ZodString>;
2043
+ offerType: z.ZodEnum<["COUPON", "BUNDLE", "PROMOTION", "ACTIVITY", "GROUPON"]>;
2044
+ /** 主 facet 一句话(如「满 100 减 20」) */
2045
+ benefitText: z.ZodOptional<z.ZodString>;
2046
+ /** 使用门槛(如「满 300 元可用」) */
2047
+ thresholdText: z.ZodOptional<z.ZodString>;
2048
+ /**
2049
+ * 券的**售价**展示,与 benefitText 是两回事——后者说优惠内容,这里说买这张券要花多少。
2050
+ * 免费券给「免费」,付费券给「¥28.8」。文案由 provider 直接给:各厂商币种、小数位与
2051
+ * 「免费/0 元」措辞不一,客户端不做数值运算也不反解金额。
2052
+ */
2053
+ priceText: z.ZodOptional<z.ZodString>;
2054
+ /** 划线原价(如「¥38.8」)。与 priceText 成对出现才有意义,单独给不渲染。 */
2055
+ originalPriceText: z.ZodOptional<z.ZodString>;
2056
+ /** 折扣角标(如「7.5折」)。同样是 provider 直出文案,不由前端拿两个价格算。 */
2057
+ discountLabel: z.ZodOptional<z.ZodString>;
2058
+ /**
2059
+ * 领取按钮文案:免费券「领取」、付费券「抢购」。由 provider 给而非前端按 priceText
2060
+ * 猜——「免费」的写法各家不同,猜错就把付费券写成领取。缺省回落「领取」。
2061
+ */
2062
+ claimActionLabel: z.ZodOptional<z.ZodString>;
2063
+ purchaseUrl: z.ZodOptional<z.ZodString>;
2064
+ freeCouponClaimMode: z.ZodOptional<z.ZodEnum<["DIRECT", "REDIRECT"]>>;
2065
+ /**
2066
+ * 下面三条供**列表内的详情浮层**渲染——浮层就地展开,没有二次请求可拉,
2067
+ * 需要的信息必须随列表一起下发。厂商不给就不渲染对应区块。
2068
+ */
2069
+ stockText: z.ZodOptional<z.ZodString>;
2070
+ usageNoticeText: z.ZodOptional<z.ZodString>;
2071
+ guaranteeText: z.ZodOptional<z.ZodString>;
2072
+ usageSceneText: z.ZodOptional<z.ZodString>;
2073
+ usageTimeText: z.ZodOptional<z.ZodString>;
2074
+ claimTimeText: z.ZodOptional<z.ZodString>;
2075
+ usageRuleText: z.ZodOptional<z.ZodString>;
2076
+ /** 可领取(availability.status === 'AVAILABLE') */
2077
+ claimable: z.ZodBoolean;
2078
+ availabilityStatus: z.ZodOptional<z.ZodEnum<["AVAILABLE", "UNAVAILABLE", "REQUIRES_ACTION", "UNKNOWN"]>>;
2079
+ validityText: z.ZodOptional<z.ZodString>;
2080
+ imageUrl: z.ZodOptional<z.ZodString>;
2081
+ /** 0.3.2 D4:条目动作(send:查看详情) */
2082
+ itemActions: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{
2083
+ kind: z.ZodLiteral<"send">;
2084
+ label: z.ZodString;
2085
+ value: z.ZodOptional<z.ZodString>;
2086
+ visibleValue: z.ZodOptional<z.ZodString>;
2087
+ }, "strip", z.ZodTypeAny, {
2088
+ kind: "send";
2089
+ label: string;
2090
+ value?: string | undefined;
2091
+ visibleValue?: string | undefined;
2092
+ }, {
2093
+ kind: "send";
2094
+ label: string;
2095
+ value?: string | undefined;
2096
+ visibleValue?: string | undefined;
2097
+ }>, z.ZodObject<{
2098
+ kind: z.ZodLiteral<"link">;
2099
+ label: z.ZodString;
2100
+ url: z.ZodString;
2101
+ }, "strip", z.ZodTypeAny, {
2102
+ url: string;
2103
+ kind: "link";
2104
+ label: string;
2105
+ }, {
2106
+ url: string;
2107
+ kind: "link";
2108
+ label: string;
2109
+ }>]>, "many">>;
2110
+ tags: z.ZodArray<z.ZodString, "many">;
2111
+ }, "strip", z.ZodTypeAny, {
2112
+ title: string;
2113
+ offerRef: string;
2114
+ offerType: "COUPON" | "BUNDLE" | "PROMOTION" | "ACTIVITY" | "GROUPON";
2115
+ claimable: boolean;
2116
+ tags: string[];
2117
+ imageUrl?: string | undefined;
2118
+ usageTimeText?: string | undefined;
2119
+ purchaseUrl?: string | undefined;
2120
+ freeCouponClaimMode?: "DIRECT" | "REDIRECT" | undefined;
2121
+ itemActions?: ({
2122
+ kind: "send";
2123
+ label: string;
2124
+ value?: string | undefined;
2125
+ visibleValue?: string | undefined;
2126
+ } | {
2127
+ url: string;
2128
+ kind: "link";
2129
+ label: string;
2130
+ })[] | undefined;
2131
+ subtitle?: string | undefined;
2132
+ benefitText?: string | undefined;
2133
+ thresholdText?: string | undefined;
2134
+ priceText?: string | undefined;
2135
+ originalPriceText?: string | undefined;
2136
+ discountLabel?: string | undefined;
2137
+ claimActionLabel?: string | undefined;
2138
+ stockText?: string | undefined;
2139
+ usageNoticeText?: string | undefined;
2140
+ guaranteeText?: string | undefined;
2141
+ usageSceneText?: string | undefined;
2142
+ claimTimeText?: string | undefined;
2143
+ usageRuleText?: string | undefined;
2144
+ availabilityStatus?: "AVAILABLE" | "UNKNOWN" | "UNAVAILABLE" | "REQUIRES_ACTION" | undefined;
2145
+ validityText?: string | undefined;
2146
+ }, {
2147
+ title: string;
2148
+ offerRef: string;
2149
+ offerType: "COUPON" | "BUNDLE" | "PROMOTION" | "ACTIVITY" | "GROUPON";
2150
+ claimable: boolean;
2151
+ tags: string[];
2152
+ imageUrl?: string | undefined;
2153
+ usageTimeText?: string | undefined;
2154
+ purchaseUrl?: string | undefined;
2155
+ freeCouponClaimMode?: "DIRECT" | "REDIRECT" | undefined;
2156
+ itemActions?: ({
2157
+ kind: "send";
2158
+ label: string;
2159
+ value?: string | undefined;
2160
+ visibleValue?: string | undefined;
2161
+ } | {
2162
+ url: string;
2163
+ kind: "link";
2164
+ label: string;
2165
+ })[] | undefined;
2166
+ subtitle?: string | undefined;
2167
+ benefitText?: string | undefined;
2168
+ thresholdText?: string | undefined;
2169
+ priceText?: string | undefined;
2170
+ originalPriceText?: string | undefined;
2171
+ discountLabel?: string | undefined;
2172
+ claimActionLabel?: string | undefined;
2173
+ stockText?: string | undefined;
2174
+ usageNoticeText?: string | undefined;
2175
+ guaranteeText?: string | undefined;
2176
+ usageSceneText?: string | undefined;
2177
+ claimTimeText?: string | undefined;
2178
+ usageRuleText?: string | undefined;
2179
+ availabilityStatus?: "AVAILABLE" | "UNKNOWN" | "UNAVAILABLE" | "REQUIRES_ACTION" | undefined;
2180
+ validityText?: string | undefined;
2181
+ }>, "many">>;
2182
+ message: z.ZodOptional<z.ZodString>;
2183
+ }, "strip", z.ZodTypeAny, {
2184
+ authoritative: boolean;
2185
+ originalAmountCents: number;
2186
+ appliedOfferRefs: string[];
2187
+ message?: string | undefined;
2188
+ savingsCents?: number | undefined;
2189
+ expectedPayCents?: number | undefined;
2190
+ candidates?: {
2191
+ title: string;
2192
+ offerRef: string;
2193
+ offerType: "COUPON" | "BUNDLE" | "PROMOTION" | "ACTIVITY" | "GROUPON";
2194
+ claimable: boolean;
2195
+ tags: string[];
2196
+ imageUrl?: string | undefined;
2197
+ usageTimeText?: string | undefined;
2198
+ purchaseUrl?: string | undefined;
2199
+ freeCouponClaimMode?: "DIRECT" | "REDIRECT" | undefined;
2200
+ itemActions?: ({
2201
+ kind: "send";
2202
+ label: string;
2203
+ value?: string | undefined;
2204
+ visibleValue?: string | undefined;
2205
+ } | {
2206
+ url: string;
2207
+ kind: "link";
2208
+ label: string;
2209
+ })[] | undefined;
2210
+ subtitle?: string | undefined;
2211
+ benefitText?: string | undefined;
2212
+ thresholdText?: string | undefined;
2213
+ priceText?: string | undefined;
2214
+ originalPriceText?: string | undefined;
2215
+ discountLabel?: string | undefined;
2216
+ claimActionLabel?: string | undefined;
2217
+ stockText?: string | undefined;
2218
+ usageNoticeText?: string | undefined;
2219
+ guaranteeText?: string | undefined;
2220
+ usageSceneText?: string | undefined;
2221
+ claimTimeText?: string | undefined;
2222
+ usageRuleText?: string | undefined;
2223
+ availabilityStatus?: "AVAILABLE" | "UNKNOWN" | "UNAVAILABLE" | "REQUIRES_ACTION" | undefined;
2224
+ validityText?: string | undefined;
2225
+ }[] | undefined;
2226
+ }, {
2227
+ authoritative: boolean;
2228
+ originalAmountCents: number;
2229
+ appliedOfferRefs: string[];
2230
+ message?: string | undefined;
2231
+ savingsCents?: number | undefined;
2232
+ expectedPayCents?: number | undefined;
2233
+ candidates?: {
2234
+ title: string;
2235
+ offerRef: string;
2236
+ offerType: "COUPON" | "BUNDLE" | "PROMOTION" | "ACTIVITY" | "GROUPON";
2237
+ claimable: boolean;
2238
+ tags: string[];
2239
+ imageUrl?: string | undefined;
2240
+ usageTimeText?: string | undefined;
2241
+ purchaseUrl?: string | undefined;
2242
+ freeCouponClaimMode?: "DIRECT" | "REDIRECT" | undefined;
2243
+ itemActions?: ({
2244
+ kind: "send";
2245
+ label: string;
2246
+ value?: string | undefined;
2247
+ visibleValue?: string | undefined;
2248
+ } | {
2249
+ url: string;
2250
+ kind: "link";
2251
+ label: string;
2252
+ })[] | undefined;
2253
+ subtitle?: string | undefined;
2254
+ benefitText?: string | undefined;
2255
+ thresholdText?: string | undefined;
2256
+ priceText?: string | undefined;
2257
+ originalPriceText?: string | undefined;
2258
+ discountLabel?: string | undefined;
2259
+ claimActionLabel?: string | undefined;
2260
+ stockText?: string | undefined;
2261
+ usageNoticeText?: string | undefined;
2262
+ guaranteeText?: string | undefined;
2263
+ usageSceneText?: string | undefined;
2264
+ claimTimeText?: string | undefined;
2265
+ usageRuleText?: string | undefined;
2266
+ availabilityStatus?: "AVAILABLE" | "UNKNOWN" | "UNAVAILABLE" | "REQUIRES_ACTION" | undefined;
2267
+ validityText?: string | undefined;
2268
+ }[] | undefined;
2269
+ }>;
2270
+ readonly 'promotion-activity-list': z.ZodObject<{
2271
+ items: z.ZodArray<z.ZodObject<{
2272
+ activityRef: z.ZodString;
2273
+ title: z.ZodString;
2274
+ subtitle: z.ZodOptional<z.ZodString>;
2275
+ coverUrl: z.ZodOptional<z.ZodString>;
2276
+ registrationRequired: z.ZodBoolean;
2277
+ jumpOnly: z.ZodOptional<z.ZodBoolean>;
2278
+ jumpLabel: z.ZodOptional<z.ZodString>;
2279
+ remainingQuota: z.ZodOptional<z.ZodNumber>;
2280
+ periodText: z.ZodOptional<z.ZodString>;
2281
+ categoryName: z.ZodOptional<z.ZodString>;
2282
+ availabilityStatus: z.ZodOptional<z.ZodEnum<["AVAILABLE", "FULL", "ENDED", "UPCOMING", "UNKNOWN"]>>;
2283
+ itemActions: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<"kind", [z.ZodObject<{
2284
+ kind: z.ZodLiteral<"send">;
2285
+ label: z.ZodString;
2286
+ value: z.ZodOptional<z.ZodString>;
2287
+ visibleValue: z.ZodOptional<z.ZodString>;
2288
+ }, "strip", z.ZodTypeAny, {
2289
+ kind: "send";
2290
+ label: string;
2291
+ value?: string | undefined;
2292
+ visibleValue?: string | undefined;
2293
+ }, {
2294
+ kind: "send";
2295
+ label: string;
2296
+ value?: string | undefined;
2297
+ visibleValue?: string | undefined;
2298
+ }>, z.ZodObject<{
2299
+ kind: z.ZodLiteral<"link">;
2300
+ label: z.ZodString;
2301
+ url: z.ZodString;
2302
+ }, "strip", z.ZodTypeAny, {
2303
+ url: string;
2304
+ kind: "link";
2305
+ label: string;
2306
+ }, {
2307
+ url: string;
2308
+ kind: "link";
2309
+ label: string;
2310
+ }>]>, "many">>;
2311
+ }, "strip", z.ZodTypeAny, {
2312
+ title: string;
2313
+ activityRef: string;
2314
+ registrationRequired: boolean;
2315
+ itemActions?: ({
2316
+ kind: "send";
2317
+ label: string;
2318
+ value?: string | undefined;
2319
+ visibleValue?: string | undefined;
2320
+ } | {
2321
+ url: string;
2322
+ kind: "link";
2323
+ label: string;
2324
+ })[] | undefined;
2325
+ coverUrl?: string | undefined;
2326
+ subtitle?: string | undefined;
2327
+ availabilityStatus?: "AVAILABLE" | "UNKNOWN" | "FULL" | "ENDED" | "UPCOMING" | undefined;
2328
+ jumpOnly?: boolean | undefined;
2329
+ jumpLabel?: string | undefined;
2330
+ remainingQuota?: number | undefined;
2331
+ periodText?: string | undefined;
2332
+ categoryName?: string | undefined;
2333
+ }, {
2334
+ title: string;
2335
+ activityRef: string;
2336
+ registrationRequired: boolean;
2337
+ itemActions?: ({
2338
+ kind: "send";
2339
+ label: string;
2340
+ value?: string | undefined;
2341
+ visibleValue?: string | undefined;
2342
+ } | {
2343
+ url: string;
2344
+ kind: "link";
2345
+ label: string;
2346
+ })[] | undefined;
2347
+ coverUrl?: string | undefined;
2348
+ subtitle?: string | undefined;
2349
+ availabilityStatus?: "AVAILABLE" | "UNKNOWN" | "FULL" | "ENDED" | "UPCOMING" | undefined;
2350
+ jumpOnly?: boolean | undefined;
2351
+ jumpLabel?: string | undefined;
2352
+ remainingQuota?: number | undefined;
2353
+ periodText?: string | undefined;
2354
+ categoryName?: string | undefined;
2355
+ }>, "many">;
2356
+ noResultsReason: z.ZodOptional<z.ZodString>;
2357
+ nextCursor: z.ZodOptional<z.ZodString>;
2358
+ }, "strip", z.ZodTypeAny, {
2359
+ items: {
2360
+ title: string;
2361
+ activityRef: string;
2362
+ registrationRequired: boolean;
2363
+ itemActions?: ({
2364
+ kind: "send";
2365
+ label: string;
2366
+ value?: string | undefined;
2367
+ visibleValue?: string | undefined;
2368
+ } | {
2369
+ url: string;
2370
+ kind: "link";
2371
+ label: string;
2372
+ })[] | undefined;
2373
+ coverUrl?: string | undefined;
2374
+ subtitle?: string | undefined;
2375
+ availabilityStatus?: "AVAILABLE" | "UNKNOWN" | "FULL" | "ENDED" | "UPCOMING" | undefined;
2376
+ jumpOnly?: boolean | undefined;
2377
+ jumpLabel?: string | undefined;
2378
+ remainingQuota?: number | undefined;
2379
+ periodText?: string | undefined;
2380
+ categoryName?: string | undefined;
2381
+ }[];
2382
+ noResultsReason?: string | undefined;
2383
+ nextCursor?: string | undefined;
2384
+ }, {
2385
+ items: {
2386
+ title: string;
2387
+ activityRef: string;
2388
+ registrationRequired: boolean;
2389
+ itemActions?: ({
2390
+ kind: "send";
2391
+ label: string;
2392
+ value?: string | undefined;
2393
+ visibleValue?: string | undefined;
2394
+ } | {
2395
+ url: string;
2396
+ kind: "link";
2397
+ label: string;
2398
+ })[] | undefined;
2399
+ coverUrl?: string | undefined;
2400
+ subtitle?: string | undefined;
2401
+ availabilityStatus?: "AVAILABLE" | "UNKNOWN" | "FULL" | "ENDED" | "UPCOMING" | undefined;
2402
+ jumpOnly?: boolean | undefined;
2403
+ jumpLabel?: string | undefined;
2404
+ remainingQuota?: number | undefined;
2405
+ periodText?: string | undefined;
2406
+ categoryName?: string | undefined;
2407
+ }[];
2408
+ noResultsReason?: string | undefined;
2409
+ nextCursor?: string | undefined;
2410
+ }>;
2411
+ readonly 'promotion-activity-detail': z.ZodObject<{
2412
+ presentation: z.ZodOptional<z.ZodEnum<["detail", "schedule", "guide"]>>;
2413
+ activityRef: z.ZodString;
2414
+ title: z.ZodString;
2415
+ subtitle: z.ZodOptional<z.ZodString>;
2416
+ categoryName: z.ZodOptional<z.ZodString>;
2417
+ description: z.ZodOptional<z.ZodString>;
2418
+ coverUrl: z.ZodOptional<z.ZodString>;
2419
+ periodText: z.ZodOptional<z.ZodString>;
2420
+ location: z.ZodOptional<z.ZodString>;
2421
+ registrationRequired: z.ZodBoolean;
2422
+ jumpOnly: z.ZodOptional<z.ZodBoolean>;
2423
+ jumpLabel: z.ZodOptional<z.ZodString>;
2424
+ /** 需报名时直达厂商支付宝小程序活动详情;由客户端 openLink 本地处理。 */
2425
+ registrationUrl: z.ZodOptional<z.ZodString>;
2426
+ remainingQuota: z.ZodOptional<z.ZodNumber>;
2427
+ sessions: z.ZodArray<z.ZodObject<{
2428
+ sessionRef: z.ZodString;
2429
+ title: z.ZodString;
2430
+ startText: z.ZodString;
2431
+ endText: z.ZodOptional<z.ZodString>;
2432
+ location: z.ZodOptional<z.ZodString>;
2433
+ remainingQuota: z.ZodOptional<z.ZodNumber>;
2434
+ status: z.ZodEnum<["OPEN", "FULL", "CLOSED", "UNKNOWN"]>;
2435
+ }, "strip", z.ZodTypeAny, {
2436
+ status: "CLOSED" | "UNKNOWN" | "OPEN" | "FULL";
2437
+ title: string;
2438
+ sessionRef: string;
2439
+ startText: string;
2440
+ location?: string | undefined;
2441
+ remainingQuota?: number | undefined;
2442
+ endText?: string | undefined;
2443
+ }, {
2444
+ status: "CLOSED" | "UNKNOWN" | "OPEN" | "FULL";
2445
+ title: string;
2446
+ sessionRef: string;
2447
+ startText: string;
2448
+ location?: string | undefined;
2449
+ remainingQuota?: number | undefined;
2450
+ endText?: string | undefined;
2451
+ }>, "many">;
2452
+ guideSteps: z.ZodArray<z.ZodString, "many">;
2453
+ guideItems: z.ZodOptional<z.ZodArray<z.ZodObject<{
2454
+ title: z.ZodString;
2455
+ description: z.ZodOptional<z.ZodString>;
2456
+ }, "strip", z.ZodTypeAny, {
2457
+ title: string;
2458
+ description?: string | undefined;
2459
+ }, {
2460
+ title: string;
2461
+ description?: string | undefined;
2462
+ }>, "many">>;
2463
+ conditions: z.ZodArray<z.ZodString, "many">;
2464
+ notice: z.ZodOptional<z.ZodString>;
2465
+ }, "strip", z.ZodTypeAny, {
2466
+ title: string;
2467
+ activityRef: string;
2468
+ registrationRequired: boolean;
2469
+ sessions: {
2470
+ status: "CLOSED" | "UNKNOWN" | "OPEN" | "FULL";
2471
+ title: string;
2472
+ sessionRef: string;
2473
+ startText: string;
2474
+ location?: string | undefined;
2475
+ remainingQuota?: number | undefined;
2476
+ endText?: string | undefined;
2477
+ }[];
2478
+ guideSteps: string[];
2479
+ conditions: string[];
2480
+ description?: string | undefined;
2481
+ notice?: string | undefined;
2482
+ location?: string | undefined;
2483
+ coverUrl?: string | undefined;
2484
+ presentation?: "detail" | "schedule" | "guide" | undefined;
2485
+ subtitle?: string | undefined;
2486
+ jumpOnly?: boolean | undefined;
2487
+ jumpLabel?: string | undefined;
2488
+ remainingQuota?: number | undefined;
2489
+ periodText?: string | undefined;
2490
+ categoryName?: string | undefined;
2491
+ registrationUrl?: string | undefined;
2492
+ guideItems?: {
2493
+ title: string;
2494
+ description?: string | undefined;
2495
+ }[] | undefined;
2496
+ }, {
2497
+ title: string;
2498
+ activityRef: string;
2499
+ registrationRequired: boolean;
2500
+ sessions: {
2501
+ status: "CLOSED" | "UNKNOWN" | "OPEN" | "FULL";
2502
+ title: string;
2503
+ sessionRef: string;
2504
+ startText: string;
2505
+ location?: string | undefined;
2506
+ remainingQuota?: number | undefined;
2507
+ endText?: string | undefined;
2508
+ }[];
2509
+ guideSteps: string[];
2510
+ conditions: string[];
2511
+ description?: string | undefined;
2512
+ notice?: string | undefined;
2513
+ location?: string | undefined;
2514
+ coverUrl?: string | undefined;
2515
+ presentation?: "detail" | "schedule" | "guide" | undefined;
2516
+ subtitle?: string | undefined;
2517
+ jumpOnly?: boolean | undefined;
2518
+ jumpLabel?: string | undefined;
2519
+ remainingQuota?: number | undefined;
2520
+ periodText?: string | undefined;
2521
+ categoryName?: string | undefined;
2522
+ registrationUrl?: string | undefined;
2523
+ guideItems?: {
2524
+ title: string;
2525
+ description?: string | undefined;
2526
+ }[] | undefined;
2527
+ }>;
2528
+ };
2529
+ export type PromotionCardType = keyof typeof promotionCardDataSchemas;