@owask/tapace-templates 0.0.0-stage → 0.1.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 (38) hide show
  1. package/README.md +13 -2
  2. package/dist/compiler/event-ticket.d.ts +38 -0
  3. package/dist/compiler/event-ticket.js +131 -0
  4. package/dist/compiler/loyalty-card.d.ts +28 -0
  5. package/dist/compiler/loyalty-card.js +70 -0
  6. package/dist/compiler/passmint-compiler.d.ts +118 -0
  7. package/dist/compiler/passmint-compiler.js +507 -0
  8. package/dist/compiler/preview-model.d.ts +123 -0
  9. package/dist/compiler/preview-model.js +402 -0
  10. package/dist/compiler/stamp-card.d.ts +23 -0
  11. package/dist/compiler/stamp-card.js +19 -0
  12. package/dist/compiler/template-preview.d.ts +34 -0
  13. package/dist/compiler/template-preview.js +125 -0
  14. package/dist/contract/definition.d.ts +1316 -0
  15. package/dist/contract/definition.js +854 -0
  16. package/dist/contract/event.d.ts +53 -0
  17. package/dist/contract/event.js +91 -0
  18. package/dist/contract/featured-actions.d.ts +45 -0
  19. package/dist/contract/featured-actions.js +81 -0
  20. package/dist/contract/fields.d.ts +153 -0
  21. package/dist/contract/fields.js +141 -0
  22. package/dist/contract/ids.d.ts +2 -0
  23. package/dist/contract/ids.js +6 -0
  24. package/dist/contract/index.d.ts +9 -0
  25. package/dist/contract/index.js +9 -0
  26. package/dist/contract/points.d.ts +41 -0
  27. package/dist/contract/points.js +86 -0
  28. package/dist/contract/primitives.d.ts +26 -0
  29. package/dist/contract/primitives.js +14 -0
  30. package/dist/contract/relevance.d.ts +54 -0
  31. package/dist/contract/relevance.js +52 -0
  32. package/dist/contract/stamps.d.ts +91 -0
  33. package/dist/contract/stamps.js +89 -0
  34. package/dist/contract/upgrade.d.ts +7 -0
  35. package/dist/contract/upgrade.js +39 -0
  36. package/dist/public-api.d.ts +4 -0
  37. package/dist/public-api.js +2 -0
  38. package/package.json +20 -4
@@ -0,0 +1,1316 @@
1
+ import { z } from 'zod';
2
+ import { type FieldValue } from './primitives.js';
3
+ import { type FieldDef, type FieldSlot, type PosterSlot, type StandardSlot } from './fields.js';
4
+ import { type FeaturedActionDef } from './featured-actions.js';
5
+ import { type EventDetails } from './event.js';
6
+ import { type Relevance, type ResolvedRelevance } from './relevance.js';
7
+ export declare const TEMPLATE_SCHEMA_VERSION = 2;
8
+ /** Where a barcode's payload comes from. Resolved to a concrete message at issuance. */
9
+ export declare const BarcodeSourceSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
10
+ kind: z.ZodLiteral<"static">;
11
+ value: z.ZodString;
12
+ }, z.core.$strict>, z.ZodObject<{
13
+ kind: z.ZodLiteral<"passValue">;
14
+ sampleValue: z.ZodOptional<z.ZodString>;
15
+ }, z.core.$strict>, z.ZodObject<{
16
+ kind: z.ZodLiteral<"serialNumber">;
17
+ }, z.core.$strict>], "kind">;
18
+ export declare const BarcodeConfigSchema: z.ZodObject<{
19
+ format: z.ZodEnum<{
20
+ qr: "qr";
21
+ pdf417: "pdf417";
22
+ aztec: "aztec";
23
+ code128: "code128";
24
+ }>;
25
+ source: z.ZodDiscriminatedUnion<[z.ZodObject<{
26
+ kind: z.ZodLiteral<"static">;
27
+ value: z.ZodString;
28
+ }, z.core.$strict>, z.ZodObject<{
29
+ kind: z.ZodLiteral<"passValue">;
30
+ sampleValue: z.ZodOptional<z.ZodString>;
31
+ }, z.core.$strict>, z.ZodObject<{
32
+ kind: z.ZodLiteral<"serialNumber">;
33
+ }, z.core.$strict>], "kind">;
34
+ altText: z.ZodOptional<z.ZodString>;
35
+ showText: z.ZodOptional<z.ZodBoolean>;
36
+ messageEncoding: z.ZodOptional<z.ZodEnum<{
37
+ "iso-8859-1": "iso-8859-1";
38
+ "utf-8": "utf-8";
39
+ "utf-16": "utf-16";
40
+ }>>;
41
+ }, z.core.$strict>;
42
+ export type BarcodeConfig = z.infer<typeof BarcodeConfigSchema>;
43
+ /**
44
+ * Each type accepts only the slots its Apple style renders; strip, background
45
+ * and footer break Apple issuance for `generic` (see TEMPLATE_MAPPING.md "Image
46
+ * slots by pass type"). `artwork` and `primaryLogo` are poster-only.
47
+ */
48
+ export declare const GENERIC_IMAGE_SLOTS: readonly ["icon", "logo", "thumbnail", "artwork", "primaryLogo"];
49
+ export declare const EVENT_TICKET_IMAGE_SLOTS: readonly ["icon", "logo", "strip", "thumbnail", "background", "artwork", "primaryLogo"];
50
+ /** A stamp card's strip is drawn from its stamp settings, never uploaded. */
51
+ export declare const STAMP_CARD_IMAGE_SLOTS: readonly ["icon", "logo", "artwork", "primaryLogo"];
52
+ export declare const POINTS_CARD_IMAGE_SLOTS: readonly ["icon", "logo", "strip", "artwork", "primaryLogo"];
53
+ export type ImageSlotName = (typeof GENERIC_IMAGE_SLOTS)[number] | (typeof EVENT_TICKET_IMAGE_SLOTS)[number];
54
+ export declare const ImageSlotsSchema: z.ZodObject<{
55
+ icon: z.ZodString;
56
+ logo: z.ZodOptional<z.ZodString>;
57
+ thumbnail: z.ZodOptional<z.ZodString>;
58
+ artwork: z.ZodOptional<z.ZodString>;
59
+ primaryLogo: z.ZodOptional<z.ZodString>;
60
+ }, z.core.$strict>;
61
+ export type ImageSlots = z.infer<typeof ImageSlotsSchema>;
62
+ export declare const EventTicketImageSlotsSchema: z.ZodObject<{
63
+ icon: z.ZodString;
64
+ logo: z.ZodOptional<z.ZodString>;
65
+ strip: z.ZodOptional<z.ZodString>;
66
+ thumbnail: z.ZodOptional<z.ZodString>;
67
+ background: z.ZodOptional<z.ZodString>;
68
+ artwork: z.ZodOptional<z.ZodString>;
69
+ primaryLogo: z.ZodOptional<z.ZodString>;
70
+ }, z.core.$strict>;
71
+ export type EventTicketImageSlots = z.infer<typeof EventTicketImageSlotsSchema>;
72
+ export declare const StampCardImageSlotsSchema: z.ZodObject<{
73
+ icon: z.ZodString;
74
+ logo: z.ZodOptional<z.ZodString>;
75
+ artwork: z.ZodOptional<z.ZodString>;
76
+ primaryLogo: z.ZodOptional<z.ZodString>;
77
+ }, z.core.$strict>;
78
+ /** A points card's strip is an uploaded image, unrelated to the balance. */
79
+ export declare const PointsCardImageSlotsSchema: z.ZodObject<{
80
+ icon: z.ZodString;
81
+ logo: z.ZodOptional<z.ZodString>;
82
+ strip: z.ZodOptional<z.ZodString>;
83
+ artwork: z.ZodOptional<z.ZodString>;
84
+ primaryLogo: z.ZodOptional<z.ZodString>;
85
+ }, z.core.$strict>;
86
+ /**
87
+ * The wallets whose design this revision must keep valid: those offered on new
88
+ * passes or used by an active pass. The server sets it on save. A wallet left
89
+ * out may still hold design that is saved but not required.
90
+ */
91
+ export declare const PlatformsSchema: z.ZodObject<{
92
+ apple: z.ZodBoolean;
93
+ google: z.ZodBoolean;
94
+ }, z.core.$strict>;
95
+ /**
96
+ * The iOS 27 poster. It stays stored while switched off. `brand` picks a logo,
97
+ * logo text, or both; with both, Wallet cuts the text to fit beside the logo.
98
+ */
99
+ export declare const PosterSettingsSchema: z.ZodObject<{
100
+ enabled: z.ZodBoolean;
101
+ brand: z.ZodEnum<{
102
+ logo: "logo";
103
+ text: "text";
104
+ logoAndText: "logoAndText";
105
+ }>;
106
+ }, z.core.$strict>;
107
+ /**
108
+ * Apple-only controls. `sharingProhibited` hides Wallet's Share button; Google's
109
+ * closest control is `google.singleHolder`.
110
+ * `hideLogoText` drops `logoText` from the Apple pass only, for a wide logo that
111
+ * already shows the name; Google keeps it as the card title.
112
+ */
113
+ export declare const AppleSettingsSchema: z.ZodObject<{
114
+ sharingProhibited: z.ZodOptional<z.ZodBoolean>;
115
+ hideLogoText: z.ZodOptional<z.ZodBoolean>;
116
+ poster: z.ZodOptional<z.ZodObject<{
117
+ enabled: z.ZodBoolean;
118
+ brand: z.ZodEnum<{
119
+ logo: "logo";
120
+ text: "text";
121
+ logoAndText: "logoAndText";
122
+ }>;
123
+ }, z.core.$strict>>;
124
+ featuredActions: z.ZodOptional<z.ZodArray<z.ZodObject<{
125
+ id: z.ZodOptional<z.ZodString>;
126
+ key: z.ZodString;
127
+ type: z.ZodEnum<{
128
+ viewSchedule: "viewSchedule";
129
+ watchTrailer: "watchTrailer";
130
+ listenToMusic: "listenToMusic";
131
+ call: "call";
132
+ addToBalance: "addToBalance";
133
+ order: "order";
134
+ shop: "shop";
135
+ membershipBenefits: "membershipBenefits";
136
+ bookAppointment: "bookAppointment";
137
+ bookCar: "bookCar";
138
+ bookFlight: "bookFlight";
139
+ bookStay: "bookStay";
140
+ viewOffersRewards: "viewOffersRewards";
141
+ }>;
142
+ binding: z.ZodEnum<{
143
+ perPass: "perPass";
144
+ fixed: "fixed";
145
+ overridable: "overridable";
146
+ }>;
147
+ url: z.ZodOptional<z.ZodString>;
148
+ sampleUrl: z.ZodOptional<z.ZodString>;
149
+ }, z.core.$strict>>>;
150
+ }, z.core.$strict>;
151
+ /**
152
+ * Google-only controls. The hero image is Google-only (Apple has no analogue).
153
+ * `logoAssetId` is Google's logo, required when Google is on: Google crops it
154
+ * into a circle, while `images.logo` is Apple's wide 160×50 pt header logo.
155
+ * `wideLogoAssetId` is an optional wide header logo; Google still shows the
156
+ * square logo in the pass list and details.
157
+ * `singleHolder` locks each pass to the first Google account that saves it. It
158
+ * lives on the class, so a save applies it to every issued pass at once; Google
159
+ * refuses to turn it on while anyone holds a pass of the class.
160
+ */
161
+ export declare const GoogleSettingsSchema: z.ZodObject<{
162
+ heroAssetId: z.ZodOptional<z.ZodString>;
163
+ logoAssetId: z.ZodOptional<z.ZodString>;
164
+ wideLogoAssetId: z.ZodOptional<z.ZodString>;
165
+ singleHolder: z.ZodOptional<z.ZodBoolean>;
166
+ }, z.core.$strict>;
167
+ /** An event ticket's Google class also carries its card-front rows (`cardRows`). */
168
+ export declare const EventTicketGoogleSettingsSchema: z.ZodObject<{
169
+ heroAssetId: z.ZodOptional<z.ZodString>;
170
+ logoAssetId: z.ZodOptional<z.ZodString>;
171
+ wideLogoAssetId: z.ZodOptional<z.ZodString>;
172
+ singleHolder: z.ZodOptional<z.ZodBoolean>;
173
+ cardRows: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodString>>>;
174
+ }, z.core.$strict>;
175
+ /**
176
+ * A loyalty card's (stamp or points) Google class names (each falls back to logo
177
+ * text) and the fields shown as Member name and Member ID. Google requires the ID,
178
+ * so its field is a required per-pass field. On a stamp card the drawn stamps are
179
+ * the hero, so `heroAssetId` is rejected there.
180
+ */
181
+ export declare const LoyaltyGoogleSettingsSchema: z.ZodObject<{
182
+ heroAssetId: z.ZodOptional<z.ZodString>;
183
+ logoAssetId: z.ZodOptional<z.ZodString>;
184
+ wideLogoAssetId: z.ZodOptional<z.ZodString>;
185
+ singleHolder: z.ZodOptional<z.ZodBoolean>;
186
+ issuerName: z.ZodOptional<z.ZodString>;
187
+ programName: z.ZodOptional<z.ZodString>;
188
+ memberNameField: z.ZodOptional<z.ZodString>;
189
+ memberIdField: z.ZodOptional<z.ZodString>;
190
+ }, z.core.$strict>;
191
+ export declare const GenericConfigSchema: z.ZodObject<{
192
+ fields: z.ZodArray<z.ZodObject<{
193
+ id: z.ZodOptional<z.ZodString>;
194
+ key: z.ZodString;
195
+ label: z.ZodString;
196
+ binding: z.ZodEnum<{
197
+ shared: "shared";
198
+ perPass: "perPass";
199
+ event: "event";
200
+ stamps: "stamps";
201
+ points: "points";
202
+ stampsLeft: "stampsLeft";
203
+ pointsToGoal: "pointsToGoal";
204
+ }>;
205
+ required: z.ZodBoolean;
206
+ defaultValue: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
207
+ sampleValue: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
208
+ textAlignment: z.ZodOptional<z.ZodEnum<{
209
+ left: "left";
210
+ center: "center";
211
+ right: "right";
212
+ natural: "natural";
213
+ }>>;
214
+ event: z.ZodOptional<z.ZodEnum<{
215
+ name: "name";
216
+ venueName: "venueName";
217
+ venueAddress: "venueAddress";
218
+ doorsOpen: "doorsOpen";
219
+ start: "start";
220
+ end: "end";
221
+ }>>;
222
+ dateFormat: z.ZodOptional<z.ZodEnum<{
223
+ date: "date";
224
+ dateTime: "dateTime";
225
+ time: "time";
226
+ }>>;
227
+ googleRole: z.ZodOptional<z.ZodEnum<{
228
+ seat: "seat";
229
+ row: "row";
230
+ section: "section";
231
+ gate: "gate";
232
+ ticketType: "ticketType";
233
+ }>>;
234
+ }, z.core.$strict>>;
235
+ layouts: z.ZodObject<{
236
+ standard: z.ZodObject<{
237
+ header: z.ZodDefault<z.ZodArray<z.ZodString>>;
238
+ primary: z.ZodDefault<z.ZodArray<z.ZodString>>;
239
+ secondary: z.ZodDefault<z.ZodArray<z.ZodString>>;
240
+ auxiliary: z.ZodDefault<z.ZodArray<z.ZodString>>;
241
+ back: z.ZodDefault<z.ZodArray<z.ZodString>>;
242
+ }, z.core.$strict>;
243
+ poster: z.ZodOptional<z.ZodObject<{
244
+ header: z.ZodDefault<z.ZodArray<z.ZodString>>;
245
+ primary: z.ZodDefault<z.ZodArray<z.ZodString>>;
246
+ footer: z.ZodDefault<z.ZodArray<z.ZodString>>;
247
+ additionalInfo: z.ZodDefault<z.ZodArray<z.ZodString>>;
248
+ back: z.ZodDefault<z.ZodArray<z.ZodString>>;
249
+ }, z.core.$strict>>;
250
+ }, z.core.$strict>;
251
+ }, z.core.$strict>;
252
+ export type GenericConfig = z.infer<typeof GenericConfigSchema>;
253
+ export declare const EventTicketConfigSchema: z.ZodObject<{
254
+ fields: z.ZodArray<z.ZodObject<{
255
+ id: z.ZodOptional<z.ZodString>;
256
+ key: z.ZodString;
257
+ label: z.ZodString;
258
+ binding: z.ZodEnum<{
259
+ shared: "shared";
260
+ perPass: "perPass";
261
+ event: "event";
262
+ stamps: "stamps";
263
+ points: "points";
264
+ stampsLeft: "stampsLeft";
265
+ pointsToGoal: "pointsToGoal";
266
+ }>;
267
+ required: z.ZodBoolean;
268
+ defaultValue: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
269
+ sampleValue: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
270
+ textAlignment: z.ZodOptional<z.ZodEnum<{
271
+ left: "left";
272
+ center: "center";
273
+ right: "right";
274
+ natural: "natural";
275
+ }>>;
276
+ event: z.ZodOptional<z.ZodEnum<{
277
+ name: "name";
278
+ venueName: "venueName";
279
+ venueAddress: "venueAddress";
280
+ doorsOpen: "doorsOpen";
281
+ start: "start";
282
+ end: "end";
283
+ }>>;
284
+ dateFormat: z.ZodOptional<z.ZodEnum<{
285
+ date: "date";
286
+ dateTime: "dateTime";
287
+ time: "time";
288
+ }>>;
289
+ googleRole: z.ZodOptional<z.ZodEnum<{
290
+ seat: "seat";
291
+ row: "row";
292
+ section: "section";
293
+ gate: "gate";
294
+ ticketType: "ticketType";
295
+ }>>;
296
+ }, z.core.$strict>>;
297
+ layouts: z.ZodObject<{
298
+ standard: z.ZodObject<{
299
+ header: z.ZodDefault<z.ZodArray<z.ZodString>>;
300
+ primary: z.ZodDefault<z.ZodArray<z.ZodString>>;
301
+ secondary: z.ZodDefault<z.ZodArray<z.ZodString>>;
302
+ auxiliary: z.ZodDefault<z.ZodArray<z.ZodString>>;
303
+ back: z.ZodDefault<z.ZodArray<z.ZodString>>;
304
+ }, z.core.$strict>;
305
+ poster: z.ZodOptional<z.ZodObject<{
306
+ header: z.ZodDefault<z.ZodArray<z.ZodString>>;
307
+ primary: z.ZodDefault<z.ZodArray<z.ZodString>>;
308
+ footer: z.ZodDefault<z.ZodArray<z.ZodString>>;
309
+ additionalInfo: z.ZodDefault<z.ZodArray<z.ZodString>>;
310
+ back: z.ZodDefault<z.ZodArray<z.ZodString>>;
311
+ }, z.core.$strict>>;
312
+ }, z.core.$strict>;
313
+ }, z.core.$strict>;
314
+ /** Apple draws the primary field over the strip, so stamp cards' standard layout has none. */
315
+ export declare const StampCardConfigSchema: z.ZodObject<{
316
+ fields: z.ZodArray<z.ZodObject<{
317
+ id: z.ZodOptional<z.ZodString>;
318
+ key: z.ZodString;
319
+ label: z.ZodString;
320
+ binding: z.ZodEnum<{
321
+ shared: "shared";
322
+ perPass: "perPass";
323
+ event: "event";
324
+ stamps: "stamps";
325
+ points: "points";
326
+ stampsLeft: "stampsLeft";
327
+ pointsToGoal: "pointsToGoal";
328
+ }>;
329
+ required: z.ZodBoolean;
330
+ defaultValue: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
331
+ sampleValue: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
332
+ textAlignment: z.ZodOptional<z.ZodEnum<{
333
+ left: "left";
334
+ center: "center";
335
+ right: "right";
336
+ natural: "natural";
337
+ }>>;
338
+ event: z.ZodOptional<z.ZodEnum<{
339
+ name: "name";
340
+ venueName: "venueName";
341
+ venueAddress: "venueAddress";
342
+ doorsOpen: "doorsOpen";
343
+ start: "start";
344
+ end: "end";
345
+ }>>;
346
+ dateFormat: z.ZodOptional<z.ZodEnum<{
347
+ date: "date";
348
+ dateTime: "dateTime";
349
+ time: "time";
350
+ }>>;
351
+ googleRole: z.ZodOptional<z.ZodEnum<{
352
+ seat: "seat";
353
+ row: "row";
354
+ section: "section";
355
+ gate: "gate";
356
+ ticketType: "ticketType";
357
+ }>>;
358
+ }, z.core.$strict>>;
359
+ layouts: z.ZodObject<{
360
+ standard: z.ZodObject<{
361
+ header: z.ZodDefault<z.ZodArray<z.ZodString>>;
362
+ primary: z.ZodDefault<z.ZodArray<z.ZodString>>;
363
+ secondary: z.ZodDefault<z.ZodArray<z.ZodString>>;
364
+ auxiliary: z.ZodDefault<z.ZodArray<z.ZodString>>;
365
+ back: z.ZodDefault<z.ZodArray<z.ZodString>>;
366
+ }, z.core.$strict>;
367
+ poster: z.ZodOptional<z.ZodObject<{
368
+ header: z.ZodDefault<z.ZodArray<z.ZodString>>;
369
+ primary: z.ZodDefault<z.ZodArray<z.ZodString>>;
370
+ footer: z.ZodDefault<z.ZodArray<z.ZodString>>;
371
+ additionalInfo: z.ZodDefault<z.ZodArray<z.ZodString>>;
372
+ back: z.ZodDefault<z.ZodArray<z.ZodString>>;
373
+ }, z.core.$strict>>;
374
+ }, z.core.$strict>;
375
+ stamps: z.ZodObject<{
376
+ total: z.ZodNumber;
377
+ perRow: z.ZodNumber;
378
+ stamp: z.ZodDiscriminatedUnion<[z.ZodObject<{
379
+ kind: z.ZodLiteral<"icon">;
380
+ icon: z.ZodEnum<{
381
+ check: "check";
382
+ coffee: "coffee";
383
+ star: "star";
384
+ heart: "heart";
385
+ gift: "gift";
386
+ scissors: "scissors";
387
+ pizza: "pizza";
388
+ sparkle: "sparkle";
389
+ }>;
390
+ }, z.core.$strict>, z.ZodObject<{
391
+ kind: z.ZodLiteral<"image">;
392
+ assetId: z.ZodString;
393
+ }, z.core.$strict>], "kind">;
394
+ emptyAssetId: z.ZodOptional<z.ZodString>;
395
+ emptyStyle: z.ZodEnum<{
396
+ faded: "faded";
397
+ ring: "ring";
398
+ both: "both";
399
+ }>;
400
+ earnedColor: z.ZodString;
401
+ emptyColor: z.ZodString;
402
+ background: z.ZodDiscriminatedUnion<[z.ZodObject<{
403
+ kind: z.ZodLiteral<"color">;
404
+ color: z.ZodOptional<z.ZodString>;
405
+ }, z.core.$strict>, z.ZodObject<{
406
+ kind: z.ZodLiteral<"image">;
407
+ assetId: z.ZodString;
408
+ }, z.core.$strict>], "kind">;
409
+ poster: z.ZodOptional<z.ZodObject<{
410
+ background: z.ZodDiscriminatedUnion<[z.ZodObject<{
411
+ kind: z.ZodLiteral<"artwork">;
412
+ }, z.core.$strict>, z.ZodObject<{
413
+ kind: z.ZodLiteral<"color">;
414
+ color: z.ZodOptional<z.ZodString>;
415
+ }, z.core.$strict>], "kind">;
416
+ discColor: z.ZodString;
417
+ discOpacity: z.ZodNumber;
418
+ }, z.core.$strict>>;
419
+ }, z.core.$strict>;
420
+ notifications: z.ZodDefault<z.ZodObject<{
421
+ apple: z.ZodOptional<z.ZodString>;
422
+ googleTitle: z.ZodOptional<z.ZodString>;
423
+ googleBody: z.ZodOptional<z.ZodString>;
424
+ fullApple: z.ZodOptional<z.ZodString>;
425
+ fullGoogleTitle: z.ZodOptional<z.ZodString>;
426
+ fullGoogleBody: z.ZodOptional<z.ZodString>;
427
+ }, z.core.$strict>>;
428
+ }, z.core.$strict>;
429
+ export declare const PointsCardConfigSchema: z.ZodObject<{
430
+ fields: z.ZodArray<z.ZodObject<{
431
+ id: z.ZodOptional<z.ZodString>;
432
+ key: z.ZodString;
433
+ label: z.ZodString;
434
+ binding: z.ZodEnum<{
435
+ shared: "shared";
436
+ perPass: "perPass";
437
+ event: "event";
438
+ stamps: "stamps";
439
+ points: "points";
440
+ stampsLeft: "stampsLeft";
441
+ pointsToGoal: "pointsToGoal";
442
+ }>;
443
+ required: z.ZodBoolean;
444
+ defaultValue: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
445
+ sampleValue: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
446
+ textAlignment: z.ZodOptional<z.ZodEnum<{
447
+ left: "left";
448
+ center: "center";
449
+ right: "right";
450
+ natural: "natural";
451
+ }>>;
452
+ event: z.ZodOptional<z.ZodEnum<{
453
+ name: "name";
454
+ venueName: "venueName";
455
+ venueAddress: "venueAddress";
456
+ doorsOpen: "doorsOpen";
457
+ start: "start";
458
+ end: "end";
459
+ }>>;
460
+ dateFormat: z.ZodOptional<z.ZodEnum<{
461
+ date: "date";
462
+ dateTime: "dateTime";
463
+ time: "time";
464
+ }>>;
465
+ googleRole: z.ZodOptional<z.ZodEnum<{
466
+ seat: "seat";
467
+ row: "row";
468
+ section: "section";
469
+ gate: "gate";
470
+ ticketType: "ticketType";
471
+ }>>;
472
+ }, z.core.$strict>>;
473
+ layouts: z.ZodObject<{
474
+ standard: z.ZodObject<{
475
+ header: z.ZodDefault<z.ZodArray<z.ZodString>>;
476
+ primary: z.ZodDefault<z.ZodArray<z.ZodString>>;
477
+ secondary: z.ZodDefault<z.ZodArray<z.ZodString>>;
478
+ auxiliary: z.ZodDefault<z.ZodArray<z.ZodString>>;
479
+ back: z.ZodDefault<z.ZodArray<z.ZodString>>;
480
+ }, z.core.$strict>;
481
+ poster: z.ZodOptional<z.ZodObject<{
482
+ header: z.ZodDefault<z.ZodArray<z.ZodString>>;
483
+ primary: z.ZodDefault<z.ZodArray<z.ZodString>>;
484
+ footer: z.ZodDefault<z.ZodArray<z.ZodString>>;
485
+ additionalInfo: z.ZodDefault<z.ZodArray<z.ZodString>>;
486
+ back: z.ZodDefault<z.ZodArray<z.ZodString>>;
487
+ }, z.core.$strict>>;
488
+ }, z.core.$strict>;
489
+ points: z.ZodObject<{
490
+ min: z.ZodOptional<z.ZodNumber>;
491
+ max: z.ZodOptional<z.ZodNumber>;
492
+ goal: z.ZodOptional<z.ZodNumber>;
493
+ starting: z.ZodNumber;
494
+ }, z.core.$strict>;
495
+ notifications: z.ZodDefault<z.ZodObject<{
496
+ apple: z.ZodOptional<z.ZodString>;
497
+ googleTitle: z.ZodOptional<z.ZodString>;
498
+ googleBody: z.ZodOptional<z.ZodString>;
499
+ goalApple: z.ZodOptional<z.ZodString>;
500
+ goalGoogleTitle: z.ZodOptional<z.ZodString>;
501
+ goalGoogleBody: z.ZodOptional<z.ZodString>;
502
+ }, z.core.$strict>>;
503
+ }, z.core.$strict>;
504
+ export declare const RESERVED_FIELD_KEY_PREFIX = "tapace_";
505
+ /**
506
+ * The template definition: shared design fields plus a `type`-discriminated
507
+ * `config`. A new type is added by appending a member here (and its config
508
+ * schema) — never a separate table or `any`.
509
+ */
510
+ export declare const TemplateDefinitionSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
511
+ type: z.ZodLiteral<"generic">;
512
+ images: z.ZodObject<{
513
+ icon: z.ZodString;
514
+ logo: z.ZodOptional<z.ZodString>;
515
+ thumbnail: z.ZodOptional<z.ZodString>;
516
+ artwork: z.ZodOptional<z.ZodString>;
517
+ primaryLogo: z.ZodOptional<z.ZodString>;
518
+ }, z.core.$strict>;
519
+ google: z.ZodDefault<z.ZodObject<{
520
+ heroAssetId: z.ZodOptional<z.ZodString>;
521
+ logoAssetId: z.ZodOptional<z.ZodString>;
522
+ wideLogoAssetId: z.ZodOptional<z.ZodString>;
523
+ singleHolder: z.ZodOptional<z.ZodBoolean>;
524
+ }, z.core.$strict>>;
525
+ config: z.ZodObject<{
526
+ fields: z.ZodArray<z.ZodObject<{
527
+ id: z.ZodOptional<z.ZodString>;
528
+ key: z.ZodString;
529
+ label: z.ZodString;
530
+ binding: z.ZodEnum<{
531
+ shared: "shared";
532
+ perPass: "perPass";
533
+ event: "event";
534
+ stamps: "stamps";
535
+ points: "points";
536
+ stampsLeft: "stampsLeft";
537
+ pointsToGoal: "pointsToGoal";
538
+ }>;
539
+ required: z.ZodBoolean;
540
+ defaultValue: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
541
+ sampleValue: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
542
+ textAlignment: z.ZodOptional<z.ZodEnum<{
543
+ left: "left";
544
+ center: "center";
545
+ right: "right";
546
+ natural: "natural";
547
+ }>>;
548
+ event: z.ZodOptional<z.ZodEnum<{
549
+ name: "name";
550
+ venueName: "venueName";
551
+ venueAddress: "venueAddress";
552
+ doorsOpen: "doorsOpen";
553
+ start: "start";
554
+ end: "end";
555
+ }>>;
556
+ dateFormat: z.ZodOptional<z.ZodEnum<{
557
+ date: "date";
558
+ dateTime: "dateTime";
559
+ time: "time";
560
+ }>>;
561
+ googleRole: z.ZodOptional<z.ZodEnum<{
562
+ seat: "seat";
563
+ row: "row";
564
+ section: "section";
565
+ gate: "gate";
566
+ ticketType: "ticketType";
567
+ }>>;
568
+ }, z.core.$strict>>;
569
+ layouts: z.ZodObject<{
570
+ standard: z.ZodObject<{
571
+ header: z.ZodDefault<z.ZodArray<z.ZodString>>;
572
+ primary: z.ZodDefault<z.ZodArray<z.ZodString>>;
573
+ secondary: z.ZodDefault<z.ZodArray<z.ZodString>>;
574
+ auxiliary: z.ZodDefault<z.ZodArray<z.ZodString>>;
575
+ back: z.ZodDefault<z.ZodArray<z.ZodString>>;
576
+ }, z.core.$strict>;
577
+ poster: z.ZodOptional<z.ZodObject<{
578
+ header: z.ZodDefault<z.ZodArray<z.ZodString>>;
579
+ primary: z.ZodDefault<z.ZodArray<z.ZodString>>;
580
+ footer: z.ZodDefault<z.ZodArray<z.ZodString>>;
581
+ additionalInfo: z.ZodDefault<z.ZodArray<z.ZodString>>;
582
+ back: z.ZodDefault<z.ZodArray<z.ZodString>>;
583
+ }, z.core.$strict>>;
584
+ }, z.core.$strict>;
585
+ }, z.core.$strict>;
586
+ schemaVersion: z.ZodLiteral<2>;
587
+ description: z.ZodString;
588
+ organizationName: z.ZodString;
589
+ logoText: z.ZodOptional<z.ZodString>;
590
+ colors: z.ZodObject<{
591
+ background: z.ZodString;
592
+ foreground: z.ZodString;
593
+ label: z.ZodOptional<z.ZodString>;
594
+ }, z.core.$strict>;
595
+ barcode: z.ZodOptional<z.ZodObject<{
596
+ format: z.ZodEnum<{
597
+ qr: "qr";
598
+ pdf417: "pdf417";
599
+ aztec: "aztec";
600
+ code128: "code128";
601
+ }>;
602
+ source: z.ZodDiscriminatedUnion<[z.ZodObject<{
603
+ kind: z.ZodLiteral<"static">;
604
+ value: z.ZodString;
605
+ }, z.core.$strict>, z.ZodObject<{
606
+ kind: z.ZodLiteral<"passValue">;
607
+ sampleValue: z.ZodOptional<z.ZodString>;
608
+ }, z.core.$strict>, z.ZodObject<{
609
+ kind: z.ZodLiteral<"serialNumber">;
610
+ }, z.core.$strict>], "kind">;
611
+ altText: z.ZodOptional<z.ZodString>;
612
+ showText: z.ZodOptional<z.ZodBoolean>;
613
+ messageEncoding: z.ZodOptional<z.ZodEnum<{
614
+ "iso-8859-1": "iso-8859-1";
615
+ "utf-8": "utf-8";
616
+ "utf-16": "utf-16";
617
+ }>>;
618
+ }, z.core.$strict>>;
619
+ platforms: z.ZodObject<{
620
+ apple: z.ZodBoolean;
621
+ google: z.ZodBoolean;
622
+ }, z.core.$strict>;
623
+ apple: z.ZodDefault<z.ZodObject<{
624
+ sharingProhibited: z.ZodOptional<z.ZodBoolean>;
625
+ hideLogoText: z.ZodOptional<z.ZodBoolean>;
626
+ poster: z.ZodOptional<z.ZodObject<{
627
+ enabled: z.ZodBoolean;
628
+ brand: z.ZodEnum<{
629
+ logo: "logo";
630
+ text: "text";
631
+ logoAndText: "logoAndText";
632
+ }>;
633
+ }, z.core.$strict>>;
634
+ featuredActions: z.ZodOptional<z.ZodArray<z.ZodObject<{
635
+ id: z.ZodOptional<z.ZodString>;
636
+ key: z.ZodString;
637
+ type: z.ZodEnum<{
638
+ viewSchedule: "viewSchedule";
639
+ watchTrailer: "watchTrailer";
640
+ listenToMusic: "listenToMusic";
641
+ call: "call";
642
+ addToBalance: "addToBalance";
643
+ order: "order";
644
+ shop: "shop";
645
+ membershipBenefits: "membershipBenefits";
646
+ bookAppointment: "bookAppointment";
647
+ bookCar: "bookCar";
648
+ bookFlight: "bookFlight";
649
+ bookStay: "bookStay";
650
+ viewOffersRewards: "viewOffersRewards";
651
+ }>;
652
+ binding: z.ZodEnum<{
653
+ perPass: "perPass";
654
+ fixed: "fixed";
655
+ overridable: "overridable";
656
+ }>;
657
+ url: z.ZodOptional<z.ZodString>;
658
+ sampleUrl: z.ZodOptional<z.ZodString>;
659
+ }, z.core.$strict>>>;
660
+ }, z.core.$strict>>;
661
+ relevance: z.ZodOptional<z.ZodObject<{
662
+ locations: z.ZodOptional<z.ZodArray<z.ZodObject<{
663
+ latitude: z.ZodNumber;
664
+ longitude: z.ZodNumber;
665
+ message: z.ZodOptional<z.ZodString>;
666
+ }, z.core.$strict>>>;
667
+ dates: z.ZodOptional<z.ZodArray<z.ZodObject<{
668
+ start: z.ZodString;
669
+ end: z.ZodString;
670
+ }, z.core.$strict>>>;
671
+ timezone: z.ZodOptional<z.ZodString>;
672
+ }, z.core.$strict>>;
673
+ }, z.core.$strict>, z.ZodObject<{
674
+ type: z.ZodLiteral<"event_ticket">;
675
+ images: z.ZodObject<{
676
+ icon: z.ZodString;
677
+ logo: z.ZodOptional<z.ZodString>;
678
+ strip: z.ZodOptional<z.ZodString>;
679
+ thumbnail: z.ZodOptional<z.ZodString>;
680
+ background: z.ZodOptional<z.ZodString>;
681
+ artwork: z.ZodOptional<z.ZodString>;
682
+ primaryLogo: z.ZodOptional<z.ZodString>;
683
+ }, z.core.$strict>;
684
+ google: z.ZodDefault<z.ZodObject<{
685
+ heroAssetId: z.ZodOptional<z.ZodString>;
686
+ logoAssetId: z.ZodOptional<z.ZodString>;
687
+ wideLogoAssetId: z.ZodOptional<z.ZodString>;
688
+ singleHolder: z.ZodOptional<z.ZodBoolean>;
689
+ cardRows: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodString>>>;
690
+ }, z.core.$strict>>;
691
+ config: z.ZodObject<{
692
+ fields: z.ZodArray<z.ZodObject<{
693
+ id: z.ZodOptional<z.ZodString>;
694
+ key: z.ZodString;
695
+ label: z.ZodString;
696
+ binding: z.ZodEnum<{
697
+ shared: "shared";
698
+ perPass: "perPass";
699
+ event: "event";
700
+ stamps: "stamps";
701
+ points: "points";
702
+ stampsLeft: "stampsLeft";
703
+ pointsToGoal: "pointsToGoal";
704
+ }>;
705
+ required: z.ZodBoolean;
706
+ defaultValue: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
707
+ sampleValue: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
708
+ textAlignment: z.ZodOptional<z.ZodEnum<{
709
+ left: "left";
710
+ center: "center";
711
+ right: "right";
712
+ natural: "natural";
713
+ }>>;
714
+ event: z.ZodOptional<z.ZodEnum<{
715
+ name: "name";
716
+ venueName: "venueName";
717
+ venueAddress: "venueAddress";
718
+ doorsOpen: "doorsOpen";
719
+ start: "start";
720
+ end: "end";
721
+ }>>;
722
+ dateFormat: z.ZodOptional<z.ZodEnum<{
723
+ date: "date";
724
+ dateTime: "dateTime";
725
+ time: "time";
726
+ }>>;
727
+ googleRole: z.ZodOptional<z.ZodEnum<{
728
+ seat: "seat";
729
+ row: "row";
730
+ section: "section";
731
+ gate: "gate";
732
+ ticketType: "ticketType";
733
+ }>>;
734
+ }, z.core.$strict>>;
735
+ layouts: z.ZodObject<{
736
+ standard: z.ZodObject<{
737
+ header: z.ZodDefault<z.ZodArray<z.ZodString>>;
738
+ primary: z.ZodDefault<z.ZodArray<z.ZodString>>;
739
+ secondary: z.ZodDefault<z.ZodArray<z.ZodString>>;
740
+ auxiliary: z.ZodDefault<z.ZodArray<z.ZodString>>;
741
+ back: z.ZodDefault<z.ZodArray<z.ZodString>>;
742
+ }, z.core.$strict>;
743
+ poster: z.ZodOptional<z.ZodObject<{
744
+ header: z.ZodDefault<z.ZodArray<z.ZodString>>;
745
+ primary: z.ZodDefault<z.ZodArray<z.ZodString>>;
746
+ footer: z.ZodDefault<z.ZodArray<z.ZodString>>;
747
+ additionalInfo: z.ZodDefault<z.ZodArray<z.ZodString>>;
748
+ back: z.ZodDefault<z.ZodArray<z.ZodString>>;
749
+ }, z.core.$strict>>;
750
+ }, z.core.$strict>;
751
+ }, z.core.$strict>;
752
+ schemaVersion: z.ZodLiteral<2>;
753
+ description: z.ZodString;
754
+ organizationName: z.ZodString;
755
+ logoText: z.ZodOptional<z.ZodString>;
756
+ colors: z.ZodObject<{
757
+ background: z.ZodString;
758
+ foreground: z.ZodString;
759
+ label: z.ZodOptional<z.ZodString>;
760
+ }, z.core.$strict>;
761
+ barcode: z.ZodOptional<z.ZodObject<{
762
+ format: z.ZodEnum<{
763
+ qr: "qr";
764
+ pdf417: "pdf417";
765
+ aztec: "aztec";
766
+ code128: "code128";
767
+ }>;
768
+ source: z.ZodDiscriminatedUnion<[z.ZodObject<{
769
+ kind: z.ZodLiteral<"static">;
770
+ value: z.ZodString;
771
+ }, z.core.$strict>, z.ZodObject<{
772
+ kind: z.ZodLiteral<"passValue">;
773
+ sampleValue: z.ZodOptional<z.ZodString>;
774
+ }, z.core.$strict>, z.ZodObject<{
775
+ kind: z.ZodLiteral<"serialNumber">;
776
+ }, z.core.$strict>], "kind">;
777
+ altText: z.ZodOptional<z.ZodString>;
778
+ showText: z.ZodOptional<z.ZodBoolean>;
779
+ messageEncoding: z.ZodOptional<z.ZodEnum<{
780
+ "iso-8859-1": "iso-8859-1";
781
+ "utf-8": "utf-8";
782
+ "utf-16": "utf-16";
783
+ }>>;
784
+ }, z.core.$strict>>;
785
+ platforms: z.ZodObject<{
786
+ apple: z.ZodBoolean;
787
+ google: z.ZodBoolean;
788
+ }, z.core.$strict>;
789
+ apple: z.ZodDefault<z.ZodObject<{
790
+ sharingProhibited: z.ZodOptional<z.ZodBoolean>;
791
+ hideLogoText: z.ZodOptional<z.ZodBoolean>;
792
+ poster: z.ZodOptional<z.ZodObject<{
793
+ enabled: z.ZodBoolean;
794
+ brand: z.ZodEnum<{
795
+ logo: "logo";
796
+ text: "text";
797
+ logoAndText: "logoAndText";
798
+ }>;
799
+ }, z.core.$strict>>;
800
+ featuredActions: z.ZodOptional<z.ZodArray<z.ZodObject<{
801
+ id: z.ZodOptional<z.ZodString>;
802
+ key: z.ZodString;
803
+ type: z.ZodEnum<{
804
+ viewSchedule: "viewSchedule";
805
+ watchTrailer: "watchTrailer";
806
+ listenToMusic: "listenToMusic";
807
+ call: "call";
808
+ addToBalance: "addToBalance";
809
+ order: "order";
810
+ shop: "shop";
811
+ membershipBenefits: "membershipBenefits";
812
+ bookAppointment: "bookAppointment";
813
+ bookCar: "bookCar";
814
+ bookFlight: "bookFlight";
815
+ bookStay: "bookStay";
816
+ viewOffersRewards: "viewOffersRewards";
817
+ }>;
818
+ binding: z.ZodEnum<{
819
+ perPass: "perPass";
820
+ fixed: "fixed";
821
+ overridable: "overridable";
822
+ }>;
823
+ url: z.ZodOptional<z.ZodString>;
824
+ sampleUrl: z.ZodOptional<z.ZodString>;
825
+ }, z.core.$strict>>>;
826
+ }, z.core.$strict>>;
827
+ relevance: z.ZodOptional<z.ZodObject<{
828
+ locations: z.ZodOptional<z.ZodArray<z.ZodObject<{
829
+ latitude: z.ZodNumber;
830
+ longitude: z.ZodNumber;
831
+ message: z.ZodOptional<z.ZodString>;
832
+ }, z.core.$strict>>>;
833
+ dates: z.ZodOptional<z.ZodArray<z.ZodObject<{
834
+ start: z.ZodString;
835
+ end: z.ZodString;
836
+ }, z.core.$strict>>>;
837
+ timezone: z.ZodOptional<z.ZodString>;
838
+ }, z.core.$strict>>;
839
+ }, z.core.$strict>, z.ZodObject<{
840
+ type: z.ZodLiteral<"stamp_card">;
841
+ images: z.ZodObject<{
842
+ icon: z.ZodString;
843
+ logo: z.ZodOptional<z.ZodString>;
844
+ artwork: z.ZodOptional<z.ZodString>;
845
+ primaryLogo: z.ZodOptional<z.ZodString>;
846
+ }, z.core.$strict>;
847
+ google: z.ZodDefault<z.ZodObject<{
848
+ heroAssetId: z.ZodOptional<z.ZodString>;
849
+ logoAssetId: z.ZodOptional<z.ZodString>;
850
+ wideLogoAssetId: z.ZodOptional<z.ZodString>;
851
+ singleHolder: z.ZodOptional<z.ZodBoolean>;
852
+ issuerName: z.ZodOptional<z.ZodString>;
853
+ programName: z.ZodOptional<z.ZodString>;
854
+ memberNameField: z.ZodOptional<z.ZodString>;
855
+ memberIdField: z.ZodOptional<z.ZodString>;
856
+ }, z.core.$strict>>;
857
+ config: z.ZodObject<{
858
+ fields: z.ZodArray<z.ZodObject<{
859
+ id: z.ZodOptional<z.ZodString>;
860
+ key: z.ZodString;
861
+ label: z.ZodString;
862
+ binding: z.ZodEnum<{
863
+ shared: "shared";
864
+ perPass: "perPass";
865
+ event: "event";
866
+ stamps: "stamps";
867
+ points: "points";
868
+ stampsLeft: "stampsLeft";
869
+ pointsToGoal: "pointsToGoal";
870
+ }>;
871
+ required: z.ZodBoolean;
872
+ defaultValue: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
873
+ sampleValue: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
874
+ textAlignment: z.ZodOptional<z.ZodEnum<{
875
+ left: "left";
876
+ center: "center";
877
+ right: "right";
878
+ natural: "natural";
879
+ }>>;
880
+ event: z.ZodOptional<z.ZodEnum<{
881
+ name: "name";
882
+ venueName: "venueName";
883
+ venueAddress: "venueAddress";
884
+ doorsOpen: "doorsOpen";
885
+ start: "start";
886
+ end: "end";
887
+ }>>;
888
+ dateFormat: z.ZodOptional<z.ZodEnum<{
889
+ date: "date";
890
+ dateTime: "dateTime";
891
+ time: "time";
892
+ }>>;
893
+ googleRole: z.ZodOptional<z.ZodEnum<{
894
+ seat: "seat";
895
+ row: "row";
896
+ section: "section";
897
+ gate: "gate";
898
+ ticketType: "ticketType";
899
+ }>>;
900
+ }, z.core.$strict>>;
901
+ layouts: z.ZodObject<{
902
+ standard: z.ZodObject<{
903
+ header: z.ZodDefault<z.ZodArray<z.ZodString>>;
904
+ primary: z.ZodDefault<z.ZodArray<z.ZodString>>;
905
+ secondary: z.ZodDefault<z.ZodArray<z.ZodString>>;
906
+ auxiliary: z.ZodDefault<z.ZodArray<z.ZodString>>;
907
+ back: z.ZodDefault<z.ZodArray<z.ZodString>>;
908
+ }, z.core.$strict>;
909
+ poster: z.ZodOptional<z.ZodObject<{
910
+ header: z.ZodDefault<z.ZodArray<z.ZodString>>;
911
+ primary: z.ZodDefault<z.ZodArray<z.ZodString>>;
912
+ footer: z.ZodDefault<z.ZodArray<z.ZodString>>;
913
+ additionalInfo: z.ZodDefault<z.ZodArray<z.ZodString>>;
914
+ back: z.ZodDefault<z.ZodArray<z.ZodString>>;
915
+ }, z.core.$strict>>;
916
+ }, z.core.$strict>;
917
+ stamps: z.ZodObject<{
918
+ total: z.ZodNumber;
919
+ perRow: z.ZodNumber;
920
+ stamp: z.ZodDiscriminatedUnion<[z.ZodObject<{
921
+ kind: z.ZodLiteral<"icon">;
922
+ icon: z.ZodEnum<{
923
+ check: "check";
924
+ coffee: "coffee";
925
+ star: "star";
926
+ heart: "heart";
927
+ gift: "gift";
928
+ scissors: "scissors";
929
+ pizza: "pizza";
930
+ sparkle: "sparkle";
931
+ }>;
932
+ }, z.core.$strict>, z.ZodObject<{
933
+ kind: z.ZodLiteral<"image">;
934
+ assetId: z.ZodString;
935
+ }, z.core.$strict>], "kind">;
936
+ emptyAssetId: z.ZodOptional<z.ZodString>;
937
+ emptyStyle: z.ZodEnum<{
938
+ faded: "faded";
939
+ ring: "ring";
940
+ both: "both";
941
+ }>;
942
+ earnedColor: z.ZodString;
943
+ emptyColor: z.ZodString;
944
+ background: z.ZodDiscriminatedUnion<[z.ZodObject<{
945
+ kind: z.ZodLiteral<"color">;
946
+ color: z.ZodOptional<z.ZodString>;
947
+ }, z.core.$strict>, z.ZodObject<{
948
+ kind: z.ZodLiteral<"image">;
949
+ assetId: z.ZodString;
950
+ }, z.core.$strict>], "kind">;
951
+ poster: z.ZodOptional<z.ZodObject<{
952
+ background: z.ZodDiscriminatedUnion<[z.ZodObject<{
953
+ kind: z.ZodLiteral<"artwork">;
954
+ }, z.core.$strict>, z.ZodObject<{
955
+ kind: z.ZodLiteral<"color">;
956
+ color: z.ZodOptional<z.ZodString>;
957
+ }, z.core.$strict>], "kind">;
958
+ discColor: z.ZodString;
959
+ discOpacity: z.ZodNumber;
960
+ }, z.core.$strict>>;
961
+ }, z.core.$strict>;
962
+ notifications: z.ZodDefault<z.ZodObject<{
963
+ apple: z.ZodOptional<z.ZodString>;
964
+ googleTitle: z.ZodOptional<z.ZodString>;
965
+ googleBody: z.ZodOptional<z.ZodString>;
966
+ fullApple: z.ZodOptional<z.ZodString>;
967
+ fullGoogleTitle: z.ZodOptional<z.ZodString>;
968
+ fullGoogleBody: z.ZodOptional<z.ZodString>;
969
+ }, z.core.$strict>>;
970
+ }, z.core.$strict>;
971
+ schemaVersion: z.ZodLiteral<2>;
972
+ description: z.ZodString;
973
+ organizationName: z.ZodString;
974
+ logoText: z.ZodOptional<z.ZodString>;
975
+ colors: z.ZodObject<{
976
+ background: z.ZodString;
977
+ foreground: z.ZodString;
978
+ label: z.ZodOptional<z.ZodString>;
979
+ }, z.core.$strict>;
980
+ barcode: z.ZodOptional<z.ZodObject<{
981
+ format: z.ZodEnum<{
982
+ qr: "qr";
983
+ pdf417: "pdf417";
984
+ aztec: "aztec";
985
+ code128: "code128";
986
+ }>;
987
+ source: z.ZodDiscriminatedUnion<[z.ZodObject<{
988
+ kind: z.ZodLiteral<"static">;
989
+ value: z.ZodString;
990
+ }, z.core.$strict>, z.ZodObject<{
991
+ kind: z.ZodLiteral<"passValue">;
992
+ sampleValue: z.ZodOptional<z.ZodString>;
993
+ }, z.core.$strict>, z.ZodObject<{
994
+ kind: z.ZodLiteral<"serialNumber">;
995
+ }, z.core.$strict>], "kind">;
996
+ altText: z.ZodOptional<z.ZodString>;
997
+ showText: z.ZodOptional<z.ZodBoolean>;
998
+ messageEncoding: z.ZodOptional<z.ZodEnum<{
999
+ "iso-8859-1": "iso-8859-1";
1000
+ "utf-8": "utf-8";
1001
+ "utf-16": "utf-16";
1002
+ }>>;
1003
+ }, z.core.$strict>>;
1004
+ platforms: z.ZodObject<{
1005
+ apple: z.ZodBoolean;
1006
+ google: z.ZodBoolean;
1007
+ }, z.core.$strict>;
1008
+ apple: z.ZodDefault<z.ZodObject<{
1009
+ sharingProhibited: z.ZodOptional<z.ZodBoolean>;
1010
+ hideLogoText: z.ZodOptional<z.ZodBoolean>;
1011
+ poster: z.ZodOptional<z.ZodObject<{
1012
+ enabled: z.ZodBoolean;
1013
+ brand: z.ZodEnum<{
1014
+ logo: "logo";
1015
+ text: "text";
1016
+ logoAndText: "logoAndText";
1017
+ }>;
1018
+ }, z.core.$strict>>;
1019
+ featuredActions: z.ZodOptional<z.ZodArray<z.ZodObject<{
1020
+ id: z.ZodOptional<z.ZodString>;
1021
+ key: z.ZodString;
1022
+ type: z.ZodEnum<{
1023
+ viewSchedule: "viewSchedule";
1024
+ watchTrailer: "watchTrailer";
1025
+ listenToMusic: "listenToMusic";
1026
+ call: "call";
1027
+ addToBalance: "addToBalance";
1028
+ order: "order";
1029
+ shop: "shop";
1030
+ membershipBenefits: "membershipBenefits";
1031
+ bookAppointment: "bookAppointment";
1032
+ bookCar: "bookCar";
1033
+ bookFlight: "bookFlight";
1034
+ bookStay: "bookStay";
1035
+ viewOffersRewards: "viewOffersRewards";
1036
+ }>;
1037
+ binding: z.ZodEnum<{
1038
+ perPass: "perPass";
1039
+ fixed: "fixed";
1040
+ overridable: "overridable";
1041
+ }>;
1042
+ url: z.ZodOptional<z.ZodString>;
1043
+ sampleUrl: z.ZodOptional<z.ZodString>;
1044
+ }, z.core.$strict>>>;
1045
+ }, z.core.$strict>>;
1046
+ relevance: z.ZodOptional<z.ZodObject<{
1047
+ locations: z.ZodOptional<z.ZodArray<z.ZodObject<{
1048
+ latitude: z.ZodNumber;
1049
+ longitude: z.ZodNumber;
1050
+ message: z.ZodOptional<z.ZodString>;
1051
+ }, z.core.$strict>>>;
1052
+ dates: z.ZodOptional<z.ZodArray<z.ZodObject<{
1053
+ start: z.ZodString;
1054
+ end: z.ZodString;
1055
+ }, z.core.$strict>>>;
1056
+ timezone: z.ZodOptional<z.ZodString>;
1057
+ }, z.core.$strict>>;
1058
+ }, z.core.$strict>, z.ZodObject<{
1059
+ type: z.ZodLiteral<"points_card">;
1060
+ images: z.ZodObject<{
1061
+ icon: z.ZodString;
1062
+ logo: z.ZodOptional<z.ZodString>;
1063
+ strip: z.ZodOptional<z.ZodString>;
1064
+ artwork: z.ZodOptional<z.ZodString>;
1065
+ primaryLogo: z.ZodOptional<z.ZodString>;
1066
+ }, z.core.$strict>;
1067
+ google: z.ZodDefault<z.ZodObject<{
1068
+ heroAssetId: z.ZodOptional<z.ZodString>;
1069
+ logoAssetId: z.ZodOptional<z.ZodString>;
1070
+ wideLogoAssetId: z.ZodOptional<z.ZodString>;
1071
+ singleHolder: z.ZodOptional<z.ZodBoolean>;
1072
+ issuerName: z.ZodOptional<z.ZodString>;
1073
+ programName: z.ZodOptional<z.ZodString>;
1074
+ memberNameField: z.ZodOptional<z.ZodString>;
1075
+ memberIdField: z.ZodOptional<z.ZodString>;
1076
+ }, z.core.$strict>>;
1077
+ config: z.ZodObject<{
1078
+ fields: z.ZodArray<z.ZodObject<{
1079
+ id: z.ZodOptional<z.ZodString>;
1080
+ key: z.ZodString;
1081
+ label: z.ZodString;
1082
+ binding: z.ZodEnum<{
1083
+ shared: "shared";
1084
+ perPass: "perPass";
1085
+ event: "event";
1086
+ stamps: "stamps";
1087
+ points: "points";
1088
+ stampsLeft: "stampsLeft";
1089
+ pointsToGoal: "pointsToGoal";
1090
+ }>;
1091
+ required: z.ZodBoolean;
1092
+ defaultValue: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
1093
+ sampleValue: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
1094
+ textAlignment: z.ZodOptional<z.ZodEnum<{
1095
+ left: "left";
1096
+ center: "center";
1097
+ right: "right";
1098
+ natural: "natural";
1099
+ }>>;
1100
+ event: z.ZodOptional<z.ZodEnum<{
1101
+ name: "name";
1102
+ venueName: "venueName";
1103
+ venueAddress: "venueAddress";
1104
+ doorsOpen: "doorsOpen";
1105
+ start: "start";
1106
+ end: "end";
1107
+ }>>;
1108
+ dateFormat: z.ZodOptional<z.ZodEnum<{
1109
+ date: "date";
1110
+ dateTime: "dateTime";
1111
+ time: "time";
1112
+ }>>;
1113
+ googleRole: z.ZodOptional<z.ZodEnum<{
1114
+ seat: "seat";
1115
+ row: "row";
1116
+ section: "section";
1117
+ gate: "gate";
1118
+ ticketType: "ticketType";
1119
+ }>>;
1120
+ }, z.core.$strict>>;
1121
+ layouts: z.ZodObject<{
1122
+ standard: z.ZodObject<{
1123
+ header: z.ZodDefault<z.ZodArray<z.ZodString>>;
1124
+ primary: z.ZodDefault<z.ZodArray<z.ZodString>>;
1125
+ secondary: z.ZodDefault<z.ZodArray<z.ZodString>>;
1126
+ auxiliary: z.ZodDefault<z.ZodArray<z.ZodString>>;
1127
+ back: z.ZodDefault<z.ZodArray<z.ZodString>>;
1128
+ }, z.core.$strict>;
1129
+ poster: z.ZodOptional<z.ZodObject<{
1130
+ header: z.ZodDefault<z.ZodArray<z.ZodString>>;
1131
+ primary: z.ZodDefault<z.ZodArray<z.ZodString>>;
1132
+ footer: z.ZodDefault<z.ZodArray<z.ZodString>>;
1133
+ additionalInfo: z.ZodDefault<z.ZodArray<z.ZodString>>;
1134
+ back: z.ZodDefault<z.ZodArray<z.ZodString>>;
1135
+ }, z.core.$strict>>;
1136
+ }, z.core.$strict>;
1137
+ points: z.ZodObject<{
1138
+ min: z.ZodOptional<z.ZodNumber>;
1139
+ max: z.ZodOptional<z.ZodNumber>;
1140
+ goal: z.ZodOptional<z.ZodNumber>;
1141
+ starting: z.ZodNumber;
1142
+ }, z.core.$strict>;
1143
+ notifications: z.ZodDefault<z.ZodObject<{
1144
+ apple: z.ZodOptional<z.ZodString>;
1145
+ googleTitle: z.ZodOptional<z.ZodString>;
1146
+ googleBody: z.ZodOptional<z.ZodString>;
1147
+ goalApple: z.ZodOptional<z.ZodString>;
1148
+ goalGoogleTitle: z.ZodOptional<z.ZodString>;
1149
+ goalGoogleBody: z.ZodOptional<z.ZodString>;
1150
+ }, z.core.$strict>>;
1151
+ }, z.core.$strict>;
1152
+ schemaVersion: z.ZodLiteral<2>;
1153
+ description: z.ZodString;
1154
+ organizationName: z.ZodString;
1155
+ logoText: z.ZodOptional<z.ZodString>;
1156
+ colors: z.ZodObject<{
1157
+ background: z.ZodString;
1158
+ foreground: z.ZodString;
1159
+ label: z.ZodOptional<z.ZodString>;
1160
+ }, z.core.$strict>;
1161
+ barcode: z.ZodOptional<z.ZodObject<{
1162
+ format: z.ZodEnum<{
1163
+ qr: "qr";
1164
+ pdf417: "pdf417";
1165
+ aztec: "aztec";
1166
+ code128: "code128";
1167
+ }>;
1168
+ source: z.ZodDiscriminatedUnion<[z.ZodObject<{
1169
+ kind: z.ZodLiteral<"static">;
1170
+ value: z.ZodString;
1171
+ }, z.core.$strict>, z.ZodObject<{
1172
+ kind: z.ZodLiteral<"passValue">;
1173
+ sampleValue: z.ZodOptional<z.ZodString>;
1174
+ }, z.core.$strict>, z.ZodObject<{
1175
+ kind: z.ZodLiteral<"serialNumber">;
1176
+ }, z.core.$strict>], "kind">;
1177
+ altText: z.ZodOptional<z.ZodString>;
1178
+ showText: z.ZodOptional<z.ZodBoolean>;
1179
+ messageEncoding: z.ZodOptional<z.ZodEnum<{
1180
+ "iso-8859-1": "iso-8859-1";
1181
+ "utf-8": "utf-8";
1182
+ "utf-16": "utf-16";
1183
+ }>>;
1184
+ }, z.core.$strict>>;
1185
+ platforms: z.ZodObject<{
1186
+ apple: z.ZodBoolean;
1187
+ google: z.ZodBoolean;
1188
+ }, z.core.$strict>;
1189
+ apple: z.ZodDefault<z.ZodObject<{
1190
+ sharingProhibited: z.ZodOptional<z.ZodBoolean>;
1191
+ hideLogoText: z.ZodOptional<z.ZodBoolean>;
1192
+ poster: z.ZodOptional<z.ZodObject<{
1193
+ enabled: z.ZodBoolean;
1194
+ brand: z.ZodEnum<{
1195
+ logo: "logo";
1196
+ text: "text";
1197
+ logoAndText: "logoAndText";
1198
+ }>;
1199
+ }, z.core.$strict>>;
1200
+ featuredActions: z.ZodOptional<z.ZodArray<z.ZodObject<{
1201
+ id: z.ZodOptional<z.ZodString>;
1202
+ key: z.ZodString;
1203
+ type: z.ZodEnum<{
1204
+ viewSchedule: "viewSchedule";
1205
+ watchTrailer: "watchTrailer";
1206
+ listenToMusic: "listenToMusic";
1207
+ call: "call";
1208
+ addToBalance: "addToBalance";
1209
+ order: "order";
1210
+ shop: "shop";
1211
+ membershipBenefits: "membershipBenefits";
1212
+ bookAppointment: "bookAppointment";
1213
+ bookCar: "bookCar";
1214
+ bookFlight: "bookFlight";
1215
+ bookStay: "bookStay";
1216
+ viewOffersRewards: "viewOffersRewards";
1217
+ }>;
1218
+ binding: z.ZodEnum<{
1219
+ perPass: "perPass";
1220
+ fixed: "fixed";
1221
+ overridable: "overridable";
1222
+ }>;
1223
+ url: z.ZodOptional<z.ZodString>;
1224
+ sampleUrl: z.ZodOptional<z.ZodString>;
1225
+ }, z.core.$strict>>>;
1226
+ }, z.core.$strict>>;
1227
+ relevance: z.ZodOptional<z.ZodObject<{
1228
+ locations: z.ZodOptional<z.ZodArray<z.ZodObject<{
1229
+ latitude: z.ZodNumber;
1230
+ longitude: z.ZodNumber;
1231
+ message: z.ZodOptional<z.ZodString>;
1232
+ }, z.core.$strict>>>;
1233
+ dates: z.ZodOptional<z.ZodArray<z.ZodObject<{
1234
+ start: z.ZodString;
1235
+ end: z.ZodString;
1236
+ }, z.core.$strict>>>;
1237
+ timezone: z.ZodOptional<z.ZodString>;
1238
+ }, z.core.$strict>>;
1239
+ }, z.core.$strict>], "type">;
1240
+ /**
1241
+ * `event` is never stored in a revision: signing and previews overlay the
1242
+ * template's live event details, like `organizationName`.
1243
+ */
1244
+ export type TemplateDefinition = z.infer<typeof TemplateDefinitionSchema> & {
1245
+ event?: EventDetails;
1246
+ };
1247
+ export type TemplateTypeName = TemplateDefinition['type'];
1248
+ export type TemplateIssue = z.ZodError['issues'][number];
1249
+ export declare class TemplateValidationError extends Error {
1250
+ readonly issues: TemplateIssue[];
1251
+ constructor(issues: TemplateIssue[]);
1252
+ }
1253
+ /**
1254
+ * Parse an untrusted definition through the versioned schema. Version 1 bodies
1255
+ * are converted first. `type` is the caller's declared type (from the row /
1256
+ * request) and must match the body's discriminator — a mismatched type/config
1257
+ * pair is rejected, never coerced.
1258
+ */
1259
+ export declare function parseTemplateDefinition(declaredType: TemplateTypeName, input: unknown): TemplateDefinition;
1260
+ /**
1261
+ * A saved revision's definition. Saved definitions were validated on save;
1262
+ * version 1 ones are converted, and ones saved before the platform blocks
1263
+ * existed get empty ones.
1264
+ */
1265
+ export declare function storedDefinition(raw: unknown): TemplateDefinition;
1266
+ /** True when the pass renders the poster: switched on, with a stored poster layout. */
1267
+ export declare function posterEnabled(def: TemplateDefinition): boolean;
1268
+ /** The standard layout's fields per slot, in placement order. */
1269
+ export declare function standardLayoutFields(def: TemplateDefinition): Record<StandardSlot, FieldDef[]>;
1270
+ /** The poster layout's fields per slot, or undefined when the poster is not rendered. */
1271
+ export declare function posterLayoutFields(def: TemplateDefinition): Record<PosterSlot, FieldDef[]> | undefined;
1272
+ /**
1273
+ * Fields placed in a rendered layout: the standard layout, plus the poster while
1274
+ * it is on. Ordered by placement (standard slots, then poster slots).
1275
+ */
1276
+ export declare function activeFields(def: TemplateDefinition): FieldDef[];
1277
+ /** Where a field shows: its standard slot, or its poster slot for a poster-only field. */
1278
+ export declare function fieldSlot(def: TemplateDefinition, key: string): FieldSlot | undefined;
1279
+ export declare function featuredActions(def: TemplateDefinition): FeaturedActionDef[];
1280
+ /**
1281
+ * The Lock Screen relevance a pass carries: its own lists, else the template's,
1282
+ * else, on an event ticket, the venue and the doors-open (or start) to end window.
1283
+ * Date windows need Apple; locations also reach Google.
1284
+ */
1285
+ export declare function resolveRelevance(def: TemplateDefinition, own: Relevance | null | undefined): ResolvedRelevance;
1286
+ export declare function imageSlotsOf(def: TemplateDefinition): readonly ImageSlotName[];
1287
+ export declare function imageAssetId(def: TemplateDefinition, slot: ImageSlotName): string | undefined;
1288
+ /**
1289
+ * The asset the poster shows as its logo: the poster logo override, else the
1290
+ * Apple logo. Undefined when the poster is off or shows logo text only.
1291
+ */
1292
+ export declare function posterLogoAssetId(def: TemplateDefinition): string | undefined;
1293
+ /** Asset ids a definition references, so they can be ownership-checked. */
1294
+ export declare function referencedAssetIds(def: TemplateDefinition): string[];
1295
+ /** Keys the issue-pass form must collect: per-pass fields flagged required, in a rendered layout. */
1296
+ export declare function requiredFieldKeys(def: TemplateDefinition): string[];
1297
+ /** Featured actions every issued pass must supply a link for. */
1298
+ export declare function requiredActionKeys(def: TemplateDefinition): string[];
1299
+ /**
1300
+ * Assign stable ids to new fields and featured actions, and reject unknown or
1301
+ * duplicate ids. Within a layout a saved field keeps its slot: moving it means
1302
+ * deleting it and creating a new field.
1303
+ */
1304
+ export declare function normalizeFieldIds(def: TemplateDefinition, previousDef?: TemplateDefinition): TemplateDefinition;
1305
+ /**
1306
+ * Preview adapter: callers pass public key-based sample values, but the compiler
1307
+ * resolves per-pass values by field id. This maps keys to ids and assigns
1308
+ * ephemeral in-memory ids to unsaved (id-less) fields and actions so their
1309
+ * sample values still resolve. The returned definition is for rendering only,
1310
+ * never persisted; keys that match no field are dropped.
1311
+ */
1312
+ export declare function previewFieldValues(def: TemplateDefinition, sampleValues: Record<string, FieldValue>): {
1313
+ def: TemplateDefinition;
1314
+ values: Record<string, FieldValue>;
1315
+ };
1316
+ export declare function fieldValuesByKey(def: TemplateDefinition, byId: Record<string, unknown>): Record<string, unknown>;