order3000 0.24.5 → 1.0.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.
package/dist/client.d.cts CHANGED
@@ -1,4 +1,5 @@
1
- import { CurrencyCode } from '@kolaveri/money';
1
+ import { z as z$1 } from 'zod';
2
+ import { z } from 'zod/v4';
2
3
  import { RealtimePostgresChangesPayload, RealtimeChannel, SupabaseClient } from '@supabase/supabase-js';
3
4
 
4
5
  declare class TokenManager {
@@ -64,7 +65,7 @@ interface components {
64
65
  schemas: {
65
66
  /**
66
67
  * Area
67
- * @description A bookable + public area for a venue. Assets are only included when the request expands them.
68
+ * @description A bookable + public area for a venue. Assets are only included when the request expands them. Operational flags (`isActive`, `isPublic`, `isBookable`) and audit columns are only populated for authenticated venue staff.
68
69
  */
69
70
  Area: {
70
71
  id: string;
@@ -81,8 +82,7 @@ interface components {
81
82
  } | null;
82
83
  minCapacity: number | null;
83
84
  maxCapacity: number;
84
- /** @enum {string} */
85
- currency: "EUR" | "CHF";
85
+ currency: components["schemas"]["Currency"];
86
86
  basePrice: number | null;
87
87
  perPersonPrice: number | null;
88
88
  features: {
@@ -94,12 +94,13 @@ interface components {
94
94
  [key: string]: string;
95
95
  };
96
96
  }[] | null;
97
- /** @enum {string} */
98
- bookingMode: "slot" | "day";
97
+ bookingMode: components["schemas"]["AreaBookingMode"];
98
+ isBookable?: boolean;
99
+ isPublic?: boolean;
100
+ isActive?: boolean;
99
101
  assets?: {
100
102
  id: string;
101
- /** @enum {string} */
102
- type: "image" | "video" | "document";
103
+ type: components["schemas"]["AssetType"];
103
104
  tags: string[] | null;
104
105
  filename: string;
105
106
  contentType: string;
@@ -118,13 +119,13 @@ interface components {
118
119
  publicUrl: string;
119
120
  }[];
120
121
  };
121
- /** ListAreasResponse */
122
- ListAreasResponse: components["schemas"]["Area"][];
122
+ /** FetchAreasResponse */
123
+ FetchAreasResponse: components["schemas"]["Area"][];
123
124
  /**
124
- * GetAreaResponse
125
- * @description A bookable + public area for a venue. Assets are only included when the request expands them.
125
+ * FetchAreaResponse
126
+ * @description A bookable + public area for a venue. Assets are only included when the request expands them. Operational flags (`isActive`, `isPublic`, `isBookable`) and audit columns are only populated for authenticated venue staff.
126
127
  */
127
- GetAreaResponse: {
128
+ FetchAreaResponse: {
128
129
  id: string;
129
130
  venueId: string;
130
131
  accessor: string;
@@ -139,8 +140,7 @@ interface components {
139
140
  } | null;
140
141
  minCapacity: number | null;
141
142
  maxCapacity: number;
142
- /** @enum {string} */
143
- currency: "EUR" | "CHF";
143
+ currency: components["schemas"]["Currency"];
144
144
  basePrice: number | null;
145
145
  perPersonPrice: number | null;
146
146
  features: {
@@ -152,12 +152,13 @@ interface components {
152
152
  [key: string]: string;
153
153
  };
154
154
  }[] | null;
155
- /** @enum {string} */
156
- bookingMode: "slot" | "day";
155
+ bookingMode: components["schemas"]["AreaBookingMode"];
156
+ isBookable?: boolean;
157
+ isPublic?: boolean;
158
+ isActive?: boolean;
157
159
  assets?: {
158
160
  id: string;
159
- /** @enum {string} */
160
- type: "image" | "video" | "document";
161
+ type: components["schemas"]["AssetType"];
161
162
  tags: string[] | null;
162
163
  filename: string;
163
164
  contentType: string;
@@ -180,16 +181,30 @@ interface components {
180
181
  GetAreaAvailabilityResponse: {
181
182
  from: string;
182
183
  to: string;
183
- /** @enum {string} */
184
- bookingMode: "slot" | "day";
184
+ bookingMode: components["schemas"]["AreaBookingMode"];
185
185
  occupied: {
186
186
  date: string;
187
187
  startTime: string | null;
188
188
  endTime: string | null;
189
189
  }[];
190
190
  };
191
- /** SubmitAreaBookingRequest */
192
- SubmitAreaBookingRequest: {
191
+ /** FetchAreaBookingsResponse */
192
+ FetchAreaBookingsResponse: {
193
+ id: string;
194
+ areaId: string;
195
+ bookingDate: string;
196
+ startTime: string | null;
197
+ endTime: string | null;
198
+ partySize: number;
199
+ status: components["schemas"]["AreaBookingStatus"];
200
+ customerFirstName?: string;
201
+ customerLastName?: string;
202
+ totalPrice?: number;
203
+ currency?: components["schemas"]["Currency"];
204
+ confirmationCode?: string | null;
205
+ }[];
206
+ /** SubmitAreaBookingPayload */
207
+ SubmitAreaBookingPayload: {
193
208
  requestedDate: string;
194
209
  requestedStartTime?: string;
195
210
  requestedEndTime?: string;
@@ -200,11 +215,10 @@ interface components {
200
215
  customerEmail: string;
201
216
  customerPhone?: string;
202
217
  message?: string;
203
- /** @enum {string} */
204
- source?: "website" | "phone" | "walk_in";
218
+ source?: components["schemas"]["AreaBookingRequestSource"];
205
219
  };
206
- /** SubmitAreaBookingResponse */
207
- SubmitAreaBookingResponse: {
220
+ /** SubmitAreaBookingRequestResponse */
221
+ SubmitAreaBookingRequestResponse: {
208
222
  id: string;
209
223
  venueId: string;
210
224
  areaId: string;
@@ -217,10 +231,8 @@ interface components {
217
231
  customerEmail: string;
218
232
  customerPhone: string | null;
219
233
  message: string | null;
220
- /** @enum {string} */
221
- source: "website" | "phone" | "walk_in";
222
- /** @enum {string} */
223
- status: "pending" | "approved" | "rejected" | "cancelled";
234
+ source: components["schemas"]["AreaBookingRequestSource"];
235
+ status: components["schemas"]["AreaBookingRequestStatus"];
224
236
  areaBookingId: string | null;
225
237
  createdAt: string | null;
226
238
  updatedAt: string | null;
@@ -246,11 +258,22 @@ interface components {
246
258
  [key: string]: unknown;
247
259
  };
248
260
  };
249
- /**
250
- * Article
251
- * @description A venue's article. `content` is a TipTap JSON document; treat it as opaque on the wire. `featureImage` is resolved per-locale with a fallback to the venue's primary locale.
252
- */
253
- Article: {
261
+ /** OgImage */
262
+ OgImage: {
263
+ id: string;
264
+ publicUrl: string | null;
265
+ locale: string;
266
+ };
267
+ /** ArticleMentionCounts */
268
+ ArticleMentionCounts: {
269
+ dishes: number;
270
+ beverages: number;
271
+ ingredients: number;
272
+ menus: number;
273
+ rituals: number;
274
+ };
275
+ /** FetchArticlesResponse */
276
+ FetchArticlesResponse: {
254
277
  id: string;
255
278
  venueId: string;
256
279
  accessor: string;
@@ -272,22 +295,29 @@ interface components {
272
295
  content: {
273
296
  [key: string]: unknown;
274
297
  } | null;
298
+ metaTitle: {
299
+ [key: string]: string;
300
+ } | null;
301
+ metaDescription: {
302
+ [key: string]: string;
303
+ } | null;
275
304
  tags: string[];
276
305
  isActive: boolean;
277
306
  isFeatured: boolean;
278
307
  priority: number;
279
- publishedAt: unknown;
280
- createdAt: unknown;
281
- updatedAt: unknown;
308
+ status: components["schemas"]["ArticleStatus"];
309
+ publishedAt: string | null;
310
+ createdAt: string | null;
311
+ updatedAt: string | null;
282
312
  featureImage: components["schemas"]["FeatureImage"] | null;
283
- };
284
- /** ListArticlesResponse */
285
- ListArticlesResponse: components["schemas"]["Article"][];
313
+ ogImage?: components["schemas"]["OgImage"] | null;
314
+ mentionCounts?: components["schemas"]["ArticleMentionCounts"];
315
+ }[];
286
316
  /**
287
- * GetArticleResponse
288
- * @description A venue's article. `content` is a TipTap JSON document; treat it as opaque on the wire. `featureImage` is resolved per-locale with a fallback to the venue's primary locale.
317
+ * FetchArticleResponse
318
+ * @description A venue's article. `content` is a TipTap JSON document; treat it as opaque on the wire. `featureImage` is resolved per-locale with a fallback to the venue's primary locale. `ogImage` overrides the social-card image when set; `null` means it falls back to `featureImage`.
289
319
  */
290
- GetArticleResponse: {
320
+ FetchArticleResponse: {
291
321
  id: string;
292
322
  venueId: string;
293
323
  accessor: string;
@@ -309,45 +339,53 @@ interface components {
309
339
  content: {
310
340
  [key: string]: unknown;
311
341
  } | null;
342
+ metaTitle: {
343
+ [key: string]: string;
344
+ } | null;
345
+ metaDescription: {
346
+ [key: string]: string;
347
+ } | null;
312
348
  tags: string[];
313
349
  isActive: boolean;
314
350
  isFeatured: boolean;
315
351
  priority: number;
316
- publishedAt: unknown;
317
- createdAt: unknown;
318
- updatedAt: unknown;
352
+ status: components["schemas"]["ArticleStatus"];
353
+ publishedAt: string | null;
354
+ createdAt: string | null;
355
+ updatedAt: string | null;
319
356
  featureImage: components["schemas"]["FeatureImage"] | null;
357
+ ogImage?: components["schemas"]["OgImage"] | null;
320
358
  };
321
- /** PatchArticleRequest */
322
- PatchArticleRequest: {
359
+ /** EditArticleRequest */
360
+ EditArticleRequest: {
323
361
  slug?: {
324
- [key: string]: string | {
325
- [key: string]: unknown;
326
- };
362
+ [key: string]: unknown;
327
363
  };
328
364
  title?: {
329
- [key: string]: string | {
330
- [key: string]: unknown;
331
- };
365
+ [key: string]: unknown;
332
366
  };
333
367
  excerpt?: {
334
- [key: string]: string | {
335
- [key: string]: unknown;
336
- };
368
+ [key: string]: unknown;
337
369
  };
338
370
  content?: {
339
371
  [key: string]: unknown;
340
372
  };
373
+ metaTitle?: {
374
+ [key: string]: string;
375
+ };
376
+ metaDescription?: {
377
+ [key: string]: string;
378
+ };
341
379
  tags?: string[];
342
380
  isActive?: boolean;
343
381
  isFeatured?: boolean;
344
382
  priority?: number;
345
383
  };
346
384
  /**
347
- * PatchArticleResponse
348
- * @description A venue's article. `content` is a TipTap JSON document; treat it as opaque on the wire. `featureImage` is resolved per-locale with a fallback to the venue's primary locale.
385
+ * EditArticleResponse
386
+ * @description A venue's article. `content` is a TipTap JSON document; treat it as opaque on the wire. `featureImage` is resolved per-locale with a fallback to the venue's primary locale. `ogImage` overrides the social-card image when set; `null` means it falls back to `featureImage`.
349
387
  */
350
- PatchArticleResponse: {
388
+ EditArticleResponse: {
351
389
  id: string;
352
390
  venueId: string;
353
391
  accessor: string;
@@ -369,25 +407,33 @@ interface components {
369
407
  content: {
370
408
  [key: string]: unknown;
371
409
  } | null;
410
+ metaTitle: {
411
+ [key: string]: string;
412
+ } | null;
413
+ metaDescription: {
414
+ [key: string]: string;
415
+ } | null;
372
416
  tags: string[];
373
417
  isActive: boolean;
374
418
  isFeatured: boolean;
375
419
  priority: number;
376
- publishedAt: unknown;
377
- createdAt: unknown;
378
- updatedAt: unknown;
420
+ status: components["schemas"]["ArticleStatus"];
421
+ publishedAt: string | null;
422
+ createdAt: string | null;
423
+ updatedAt: string | null;
379
424
  featureImage: components["schemas"]["FeatureImage"] | null;
425
+ ogImage?: components["schemas"]["OgImage"] | null;
380
426
  };
381
- /** UploadFeatureImageRequest */
382
- UploadFeatureImageRequest: {
427
+ /** SetArticleFeatureImageUploadBody */
428
+ SetArticleFeatureImageUploadBody: {
383
429
  /** @description Image file (multipart/form-data field) */
384
- file: unknown;
430
+ file: string;
385
431
  };
386
432
  /**
387
- * PatchFeatureImageRequest
433
+ * PatchArticleFeatureImageBody
388
434
  * @description Locale-keyed merge of the asset-side `caption` and `alt` records. Each locale value may be a plain string OR a TipTap doc; strings are wrapped server-side. Setting `en` does not touch `de`.
389
435
  */
390
- PatchFeatureImageRequest: {
436
+ PatchArticleFeatureImageBody: {
391
437
  caption?: {
392
438
  [key: string]: unknown;
393
439
  };
@@ -395,6 +441,59 @@ interface components {
395
441
  [key: string]: unknown;
396
442
  };
397
443
  };
444
+ /** BasketTotals */
445
+ BasketTotals: {
446
+ currency: components["schemas"]["Currency"];
447
+ itemsTotal: number;
448
+ taxAmount: number;
449
+ depositCharge: number;
450
+ grossTotal: number;
451
+ depositCredit: number;
452
+ effectiveTotal: number;
453
+ cashRefund: number;
454
+ returnable: {
455
+ depositwareTemplateId: string;
456
+ count: number;
457
+ }[];
458
+ };
459
+ /** FetchBasketResponse */
460
+ FetchBasketResponse: {
461
+ /** Format: uuid */
462
+ id: string;
463
+ sessionId: string;
464
+ status: components["schemas"]["BasketStatus"];
465
+ currency: components["schemas"]["Currency"];
466
+ items: {
467
+ /** Format: uuid */
468
+ id: string;
469
+ metadata: {
470
+ [key: string]: unknown;
471
+ } | null;
472
+ deposit: {
473
+ depositwareTemplateId: string;
474
+ name: {
475
+ [key: string]: string;
476
+ };
477
+ amount: number;
478
+ currency: components["schemas"]["Currency"];
479
+ } | null;
480
+ menuItems: {
481
+ menuItemId: string;
482
+ role: string | null;
483
+ quantity: number;
484
+ unit: components["schemas"]["Unit"];
485
+ }[];
486
+ }[];
487
+ itemCount: number;
488
+ totals: components["schemas"]["BasketTotals"];
489
+ declaredReturns: {
490
+ depositwareTemplateId: string;
491
+ count: number;
492
+ }[];
493
+ expiresAt: string;
494
+ createdAt: string | null;
495
+ updatedAt: string | null;
496
+ };
398
497
  /**
399
498
  * AddToBasketRequest
400
499
  * @description Add an item to the shopping basket
@@ -407,8 +506,7 @@ interface components {
407
506
  menuItemId: string;
408
507
  role?: string;
409
508
  quantity?: number;
410
- /** @enum {string} */
411
- unit?: "grams" | "kilograms" | "liters" | "milliliters" | "pieces";
509
+ unit?: components["schemas"]["Unit"];
412
510
  }[];
413
511
  metadata?: {
414
512
  [key: string]: unknown;
@@ -425,24 +523,9 @@ interface components {
425
523
  [key: string]: string;
426
524
  };
427
525
  amount: number;
428
- /** @enum {string} */
429
- currency: "EUR" | "CHF";
526
+ currency: components["schemas"]["Currency"];
430
527
  } | null;
431
- totals: {
432
- /** @enum {string} */
433
- currency: "EUR" | "CHF";
434
- itemsTotal: number;
435
- taxAmount: number;
436
- depositCharge: number;
437
- grossTotal: number;
438
- depositCredit: number;
439
- effectiveTotal: number;
440
- cashRefund: number;
441
- returnable: {
442
- depositwareTemplateId: string;
443
- count: number;
444
- }[];
445
- };
528
+ totals: components["schemas"]["BasketTotals"];
446
529
  };
447
530
  /** RemoveFromBasketResponse */
448
531
  RemoveFromBasketResponse: {
@@ -450,24 +533,12 @@ interface components {
450
533
  /** Format: uuid */
451
534
  basketItemId: string;
452
535
  itemCount: number;
453
- totals: {
454
- /** @enum {string} */
455
- currency: "EUR" | "CHF";
456
- itemsTotal: number;
457
- taxAmount: number;
458
- depositCharge: number;
459
- grossTotal: number;
460
- depositCredit: number;
461
- effectiveTotal: number;
462
- cashRefund: number;
463
- returnable: {
464
- depositwareTemplateId: string;
465
- count: number;
466
- }[];
467
- } | null;
536
+ totals: components["schemas"]["BasketTotals"] | null;
468
537
  };
469
538
  /** GetBasketTotalsRequest */
470
539
  GetBasketTotalsRequest: {
540
+ venueAccessor: string;
541
+ basketId: string;
471
542
  declaredReturns?: {
472
543
  depositwareTemplateId: string;
473
544
  count: number;
@@ -475,8 +546,7 @@ interface components {
475
546
  };
476
547
  /** GetBasketTotalsResponse */
477
548
  GetBasketTotalsResponse: {
478
- /** @enum {string} */
479
- currency: "EUR" | "CHF";
549
+ currency: components["schemas"]["Currency"];
480
550
  itemsTotal: number;
481
551
  taxAmount: number;
482
552
  depositCharge: number;
@@ -489,8 +559,17 @@ interface components {
489
559
  count: number;
490
560
  }[];
491
561
  };
562
+ /** AbandonBasketRequest */
563
+ AbandonBasketRequest: {
564
+ sessionId: string;
565
+ };
566
+ /** AbandonBasketResponse */
567
+ AbandonBasketResponse: {
568
+ abandonedCount: number;
569
+ };
492
570
  /** SetBasketDeclaredReturnsRequest */
493
571
  SetBasketDeclaredReturnsRequest: {
572
+ venueAccessor: string;
494
573
  basketId: string;
495
574
  sessionId: string;
496
575
  declaredReturns: {
@@ -506,6 +585,270 @@ interface components {
506
585
  count: number;
507
586
  }[];
508
587
  };
588
+ /** FetchEventsResponse */
589
+ FetchEventsResponse: {
590
+ id: string;
591
+ venueId: string;
592
+ accessor: string | null;
593
+ name: {
594
+ [key: string]: string;
595
+ };
596
+ description: {
597
+ [key: string]: string;
598
+ } | null;
599
+ scheduleId: string | null;
600
+ ritualId: string | null;
601
+ maxBookings: number | null;
602
+ maxGuests: number | null;
603
+ minPartySize: number | null;
604
+ maxPartySize: number | null;
605
+ isPublic: boolean;
606
+ isRecurring: boolean;
607
+ reservationsEnabled: boolean;
608
+ bookingOpensAtDays: number | null;
609
+ bookingClosesAtOffset: number | null;
610
+ isActive: boolean;
611
+ isFeatured: boolean;
612
+ priority: number;
613
+ createdBy: string | null;
614
+ updatedBy: string | null;
615
+ createdAt: unknown;
616
+ updatedAt: unknown;
617
+ schedule: {
618
+ id: string;
619
+ duration: number | null;
620
+ name: {
621
+ [key: string]: string;
622
+ };
623
+ timezone: string;
624
+ description: {
625
+ [key: string]: string;
626
+ } | null;
627
+ rrule: string | null;
628
+ exdates: string[] | null;
629
+ validFrom: string | null;
630
+ validTo: string | null;
631
+ priority: number | null;
632
+ slotMode: components["schemas"]["SlotMode"];
633
+ intervalDuration: number | null;
634
+ isActive: boolean;
635
+ sortIndex: string | null;
636
+ updatedAt: unknown;
637
+ updatedBy: string | null;
638
+ createdAt: unknown;
639
+ createdBy: string | null;
640
+ scheduleOverrides: {
641
+ id: string;
642
+ date: string;
643
+ priority: number | null;
644
+ isActive: boolean;
645
+ updatedAt: unknown;
646
+ updatedBy: string | null;
647
+ createdAt: unknown;
648
+ createdBy: string | null;
649
+ scheduleId: string;
650
+ reason: {
651
+ [key: string]: string;
652
+ } | null;
653
+ scheduleOverrideTimeSlots: {
654
+ sortIndex: string | null;
655
+ overrideId: string;
656
+ timeSlotId: string;
657
+ timeSlot: {
658
+ id: string;
659
+ isActive: boolean | null;
660
+ sortIndex: string | null;
661
+ updatedAt: unknown;
662
+ updatedBy: string | null;
663
+ createdAt: unknown;
664
+ createdBy: string | null;
665
+ startTime: string;
666
+ endTime: string | null;
667
+ isSchedulable: boolean | null;
668
+ };
669
+ }[];
670
+ }[];
671
+ scheduleTimeSlots: {
672
+ sortIndex: string | null;
673
+ scheduleId: string | null;
674
+ timeSlotId: string | null;
675
+ dayOfWeek: components["schemas"]["DayOfWeek"];
676
+ timeSlot: {
677
+ id: string;
678
+ isActive: boolean | null;
679
+ sortIndex: string | null;
680
+ updatedAt: unknown;
681
+ updatedBy: string | null;
682
+ createdAt: unknown;
683
+ createdBy: string | null;
684
+ startTime: string;
685
+ endTime: string | null;
686
+ isSchedulable: boolean | null;
687
+ } | null;
688
+ }[];
689
+ } | null;
690
+ nextOccurrence: string | null;
691
+ posters: {
692
+ id: string;
693
+ type: components["schemas"]["AssetType"];
694
+ metadata: {
695
+ width?: number;
696
+ height?: number;
697
+ duration?: number;
698
+ } | null;
699
+ isActive: boolean;
700
+ sortIndex: string | null;
701
+ updatedAt: unknown;
702
+ updatedBy: string | null;
703
+ createdAt: unknown;
704
+ createdBy: string | null;
705
+ venueId: string | null;
706
+ tags: string[] | null;
707
+ bucket: string;
708
+ storagePath: string;
709
+ filename: string;
710
+ contentType: string;
711
+ sizeBytes: number;
712
+ caption: {
713
+ [key: string]: unknown;
714
+ };
715
+ alt: {
716
+ [key: string]: unknown;
717
+ };
718
+ cropArea: {
719
+ x: number;
720
+ y: number;
721
+ width: number;
722
+ height: number;
723
+ } | null;
724
+ publicUrl: string;
725
+ }[];
726
+ timeSlots: {
727
+ id?: string;
728
+ startTime?: string;
729
+ endTime?: string | null;
730
+ dayOfWeek: components["schemas"]["DayOfWeek"];
731
+ isSchedulable?: boolean | null;
732
+ }[];
733
+ scheduleOverrides: {
734
+ id: string;
735
+ date: string;
736
+ reason: {
737
+ [key: string]: string;
738
+ } | null;
739
+ timeSlots: {
740
+ id: string;
741
+ startTime: string;
742
+ endTime: string | null;
743
+ isSchedulable: boolean | null;
744
+ }[];
745
+ }[];
746
+ promotions: {
747
+ id: string;
748
+ name: {
749
+ [key: string]: string;
750
+ };
751
+ description: {
752
+ [key: string]: string;
753
+ } | null;
754
+ validFrom: string | null;
755
+ validTo: string | null;
756
+ isActive: boolean;
757
+ updatedAt: unknown;
758
+ updatedBy: string | null;
759
+ createdAt: unknown;
760
+ createdBy: string | null;
761
+ venueId: string;
762
+ benefitType: components["schemas"]["PromotionBenefitType"];
763
+ benefitValue: {
764
+ [key: string]: unknown;
765
+ };
766
+ conditions: {
767
+ [key: string]: unknown;
768
+ } | null;
769
+ maxRedemptions: number | null;
770
+ currentRedemptions: number | null;
771
+ timeSlotIds: string[] | null;
772
+ }[];
773
+ }[];
774
+ /**
775
+ * FetchEventResponse
776
+ * @description Event details. Nested objects (schedule, timeSlots, menus, posters, nextOccurrence) pass through; their shape follows the SDK Event interface.
777
+ */
778
+ FetchEventResponse: {
779
+ id: string;
780
+ venueId: string;
781
+ accessor: string | null;
782
+ name: {
783
+ [key: string]: string;
784
+ };
785
+ description: {
786
+ [key: string]: string;
787
+ } | null;
788
+ scheduleId: string | null;
789
+ maxBookings: number | null;
790
+ maxGuests: number | null;
791
+ minPartySize: number | null;
792
+ maxPartySize: number | null;
793
+ isPublic: boolean;
794
+ isRecurring: boolean;
795
+ reservationsEnabled: boolean;
796
+ bookingOpensAtDays: number | null;
797
+ bookingClosesAtOffset: number | null;
798
+ isActive: boolean;
799
+ isFeatured: boolean;
800
+ priority: number;
801
+ createdAt: unknown;
802
+ updatedAt: unknown;
803
+ nextOccurrence?: string | null;
804
+ schedule?: {
805
+ id: string;
806
+ name: {
807
+ [key: string]: string;
808
+ };
809
+ description: {
810
+ [key: string]: string;
811
+ } | null;
812
+ timezone: string;
813
+ rrule: string | null;
814
+ exdates: string[] | null;
815
+ validFrom: string | null;
816
+ validTo: string | null;
817
+ priority: number | null;
818
+ isActive: boolean;
819
+ slotMode: components["schemas"]["SlotMode"];
820
+ intervalDuration: number | null;
821
+ duration: number | null;
822
+ scheduleTimeSlots?: {
823
+ dayOfWeek: components["schemas"]["DayOfWeek"];
824
+ timeSlot: {
825
+ id: string;
826
+ startTime: string;
827
+ endTime: string | null;
828
+ isActive: boolean | null;
829
+ isSchedulable: boolean | null;
830
+ };
831
+ }[];
832
+ };
833
+ menus?: {
834
+ id: string;
835
+ accessor: string;
836
+ name: {
837
+ [key: string]: string;
838
+ };
839
+ category: string;
840
+ }[];
841
+ posters?: {
842
+ id: string;
843
+ bucket: string;
844
+ storagePath: string;
845
+ filename: string;
846
+ contentType: string;
847
+ sizeBytes: number;
848
+ sortIndex: string | null;
849
+ publicUrl: string;
850
+ }[];
851
+ };
509
852
  /**
510
853
  * CreateEventRequest
511
854
  * @description Request payload for creating a new event
@@ -527,7 +870,7 @@ interface components {
527
870
  isRecurring?: boolean;
528
871
  reservationsEnabled?: boolean;
529
872
  bookingOpensAtDays?: number | null;
530
- bookingClosesAtHours?: number | null;
873
+ bookingClosesAtOffset?: number | null;
531
874
  isActive?: boolean;
532
875
  isFeatured?: boolean;
533
876
  priority?: number;
@@ -541,10 +884,9 @@ interface components {
541
884
  endTime: string;
542
885
  lastSeatingTime?: string | null;
543
886
  }[];
544
- /** @enum {string|null} */
545
- slotMode?: "interval" | "duration" | null;
546
- intervalMinutes?: number | null;
547
- durationMinutes?: number | null;
887
+ slotMode?: components["schemas"]["SlotMode"];
888
+ intervalDuration?: number | null;
889
+ duration?: number | null;
548
890
  } | null;
549
891
  ritualAccessor?: string | null;
550
892
  venueAccessor: string;
@@ -573,7 +915,7 @@ interface components {
573
915
  isRecurring: boolean;
574
916
  reservationsEnabled: boolean;
575
917
  bookingOpensAtDays: number | null;
576
- bookingClosesAtHours: number | null;
918
+ bookingClosesAtOffset: number | null;
577
919
  isActive: boolean;
578
920
  isFeatured: boolean;
579
921
  priority: number;
@@ -583,102 +925,354 @@ interface components {
583
925
  updatedAt: unknown;
584
926
  };
585
927
  /**
586
- * GetMenuResponse
587
- * @description Menu details. Nested arrays (items, assets, bundles, schedule, etc.) pass through; their shape follows the SDK Menu interface.
928
+ * FetchMenuResponse
929
+ * @description Menu details. `assets[]` is always hydrated with public URLs; `items[]` (with nested dish/beverage) is included when `expand=items` is requested. Each dish/beverage always carries its flat, hydrated `assets[]` (public URLs resolved) — the raw junction relations are never surfaced.
588
930
  */
589
- GetMenuResponse: {
931
+ FetchMenuResponse: {
590
932
  id: string;
591
- venueId: string;
592
- accessor: string;
593
933
  name: {
594
934
  [key: string]: string;
595
935
  };
596
- } & {
597
- [key: string]: unknown;
936
+ accessor: string;
937
+ metadata: {
938
+ orderingEnabled?: boolean;
939
+ compactTags?: string[];
940
+ showDepositware?: boolean;
941
+ tagSortOrder?: string[];
942
+ subscriptionsEnabled?: boolean;
943
+ isDeliveryEnabled?: boolean;
944
+ assetsEnabled?: boolean;
945
+ } | null;
946
+ description: {
947
+ [key: string]: string;
948
+ } | null;
949
+ sortIndex: string | null;
950
+ updatedAt: unknown;
951
+ updatedBy: string | null;
952
+ createdAt: unknown;
953
+ createdBy: string | null;
954
+ venueId: string;
955
+ deliveryThresholdAmount: number | null;
956
+ deliveryThresholdQuantity: number | null;
957
+ assets: {
958
+ id: string;
959
+ type: components["schemas"]["AssetType"];
960
+ metadata: {
961
+ width?: number;
962
+ height?: number;
963
+ duration?: number;
964
+ } | null;
965
+ isActive: boolean;
966
+ sortIndex: string | null;
967
+ updatedAt: unknown;
968
+ updatedBy: string | null;
969
+ createdAt: unknown;
970
+ createdBy: string | null;
971
+ venueId: string | null;
972
+ tags: string[] | null;
973
+ bucket: string;
974
+ storagePath: string;
975
+ filename: string;
976
+ contentType: string;
977
+ sizeBytes: number;
978
+ caption: {
979
+ [key: string]: unknown;
980
+ };
981
+ alt: {
982
+ [key: string]: unknown;
983
+ };
984
+ cropArea: {
985
+ x: number;
986
+ y: number;
987
+ width: number;
988
+ height: number;
989
+ } | null;
990
+ publicUrl: string;
991
+ }[];
992
+ items?: {
993
+ id: string;
994
+ type: components["schemas"]["MenuItemType"];
995
+ tags: string[] | null;
996
+ priceAdjustment: number;
997
+ currency: components["schemas"]["Currency"];
998
+ isActive: boolean;
999
+ isFeatured: boolean;
1000
+ sortIndex: string | null;
1001
+ dish: {
1002
+ id: string;
1003
+ accessor: string;
1004
+ name: {
1005
+ [key: string]: string;
1006
+ };
1007
+ shortName?: {
1008
+ [key: string]: string;
1009
+ };
1010
+ description: {
1011
+ [key: string]: string;
1012
+ } | null;
1013
+ longDescription?: {
1014
+ [key: string]: string;
1015
+ } | null;
1016
+ isVegetarian: boolean | null;
1017
+ isVegan: boolean | null;
1018
+ isGlutenFree: boolean | null;
1019
+ isDairyFree: boolean | null;
1020
+ spiciness: number | null;
1021
+ assets?: {
1022
+ id: string;
1023
+ type: components["schemas"]["AssetType"];
1024
+ metadata: {
1025
+ width?: number;
1026
+ height?: number;
1027
+ duration?: number;
1028
+ } | null;
1029
+ isActive: boolean;
1030
+ sortIndex: string | null;
1031
+ updatedAt: unknown;
1032
+ updatedBy: string | null;
1033
+ createdAt: unknown;
1034
+ createdBy: string | null;
1035
+ venueId: string | null;
1036
+ tags: string[] | null;
1037
+ bucket: string;
1038
+ storagePath: string;
1039
+ filename: string;
1040
+ contentType: string;
1041
+ sizeBytes: number;
1042
+ caption: {
1043
+ [key: string]: unknown;
1044
+ };
1045
+ alt: {
1046
+ [key: string]: unknown;
1047
+ };
1048
+ cropArea: {
1049
+ x: number;
1050
+ y: number;
1051
+ width: number;
1052
+ height: number;
1053
+ } | null;
1054
+ publicUrl: string;
1055
+ }[];
1056
+ } | null;
1057
+ beverage: {
1058
+ id: string;
1059
+ accessor: string;
1060
+ name: {
1061
+ [key: string]: string;
1062
+ };
1063
+ shortName?: {
1064
+ [key: string]: string;
1065
+ };
1066
+ description: {
1067
+ [key: string]: string;
1068
+ } | null;
1069
+ longDescription?: {
1070
+ [key: string]: string;
1071
+ } | null;
1072
+ assets?: {
1073
+ id: string;
1074
+ type: components["schemas"]["AssetType"];
1075
+ metadata: {
1076
+ width?: number;
1077
+ height?: number;
1078
+ duration?: number;
1079
+ } | null;
1080
+ isActive: boolean;
1081
+ sortIndex: string | null;
1082
+ updatedAt: unknown;
1083
+ updatedBy: string | null;
1084
+ createdAt: unknown;
1085
+ createdBy: string | null;
1086
+ venueId: string | null;
1087
+ tags: string[] | null;
1088
+ bucket: string;
1089
+ storagePath: string;
1090
+ filename: string;
1091
+ contentType: string;
1092
+ sizeBytes: number;
1093
+ caption: {
1094
+ [key: string]: unknown;
1095
+ };
1096
+ alt: {
1097
+ [key: string]: unknown;
1098
+ };
1099
+ cropArea: {
1100
+ x: number;
1101
+ y: number;
1102
+ width: number;
1103
+ height: number;
1104
+ } | null;
1105
+ publicUrl: string;
1106
+ }[];
1107
+ } | null;
1108
+ }[];
598
1109
  };
599
- /** ListMenuBundlesResponse */
600
- ListMenuBundlesResponse: ({
1110
+ /** FetchMenuBundlesResponse */
1111
+ FetchMenuBundlesResponse: {
601
1112
  id: string;
602
1113
  menuId: string;
603
- } & {
604
- [key: string]: unknown;
605
- })[];
606
- /** ListMenuSubscriptionsResponse */
607
- ListMenuSubscriptionsResponse: ({
1114
+ name: {
1115
+ [key: string]: string;
1116
+ };
1117
+ shortName: {
1118
+ [key: string]: string;
1119
+ } | null;
1120
+ description: {
1121
+ [key: string]: string;
1122
+ } | null;
1123
+ tags: string[];
1124
+ price: {
1125
+ amount: number;
1126
+ currency: components["schemas"]["Currency"];
1127
+ };
1128
+ currency: components["schemas"]["Currency"];
1129
+ taxRateId: string;
1130
+ isActive: boolean;
1131
+ sortIndex: string | null;
1132
+ depositwareTemplateId: string | null;
1133
+ depositwareTemplate: {
1134
+ name: {
1135
+ [key: string]: string;
1136
+ };
1137
+ } | null;
1138
+ deposit: {
1139
+ depositwareTemplateId: string;
1140
+ accessor: string;
1141
+ amount: number;
1142
+ currency: components["schemas"]["Currency"];
1143
+ } | null;
1144
+ }[];
1145
+ /** FetchMenuSubscriptionsResponse */
1146
+ FetchMenuSubscriptionsResponse: {
608
1147
  id: string;
609
1148
  menuId: string;
610
- } & {
611
- [key: string]: unknown;
612
- })[];
1149
+ accessor: string;
1150
+ name: {
1151
+ [key: string]: string;
1152
+ };
1153
+ shortName: {
1154
+ [key: string]: string;
1155
+ } | null;
1156
+ description: {
1157
+ [key: string]: string;
1158
+ } | null;
1159
+ scheduleId: string | null;
1160
+ allowance: number;
1161
+ billingPeriod: components["schemas"]["SubscriptionPeriod"];
1162
+ allowancePeriod: components["schemas"]["SubscriptionPeriod"];
1163
+ expiryInDays: number;
1164
+ price: number;
1165
+ currency: components["schemas"]["Currency"];
1166
+ stripeProductId: string | null;
1167
+ stripePriceId: string | null;
1168
+ isActive: boolean;
1169
+ sortIndex: string | null;
1170
+ subscriberCount: number;
1171
+ redeemableTagSets: string[][];
1172
+ posters: {
1173
+ id: string;
1174
+ menuSubscriptionId: string;
1175
+ storagePath: string;
1176
+ publicUrl: string;
1177
+ filename: string;
1178
+ contentType: string;
1179
+ sizeBytes: number;
1180
+ sortIndex: string | null;
1181
+ createdBy: string | null;
1182
+ createdAt: string | null;
1183
+ }[];
1184
+ }[];
613
1185
  /**
614
1186
  * PlaceOrderRequest
615
1187
  * @description Place a new order for a specific venue
616
1188
  */
617
1189
  PlaceOrderRequest: {
618
- id?: string;
619
- venueId: string;
1190
+ venueAccessor: string;
620
1191
  basketId: string;
621
- publicId?: string | null;
622
- quickReferenceNumber?: number | null;
623
- /** @enum {string} */
624
- status?: "pending" | "in_progress" | "ready" | "completed" | "cancelled";
625
- paymentIntentId?: string | null;
626
- /** @enum {string|null} */
627
- paymentMethod?: "card" | "cash" | "voucher" | null;
628
- /** @enum {string} */
629
- paymentStatus?: "unpaid" | "paid" | "refunded" | "authorized" | "cash_pending";
630
- taxAmount: number;
631
- totalAmount: number;
632
- /** @enum {string} */
633
- currency?: "EUR" | "CHF";
634
- /** @enum {string|null} */
635
- fulfillmentType?: "pickup" | "delivery" | null;
636
- fulfillmentAt?: unknown;
637
- orderedAt?: unknown;
638
- orderedBy: string;
639
- updatedAt?: unknown;
640
- updatedBy?: string | null;
641
- teamOrderId?: string | null;
642
- participantDisplayName?: string | null;
643
- leadSettledAt?: unknown;
1192
+ sessionId: string;
1193
+ paymentMethod: components["schemas"]["PaymentMethod"];
1194
+ fulfillmentType: components["schemas"]["FulfillmentType"];
1195
+ /** Format: date-time */
1196
+ fulfillmentAt?: string | null;
1197
+ customerFirstName?: string;
1198
+ customerLastName?: string;
1199
+ customerEmail?: string;
1200
+ declaredReturns?: {
1201
+ depositwareTemplateId: string;
1202
+ count: number;
1203
+ }[];
644
1204
  };
645
1205
  /** PlaceOrderResponse */
646
1206
  PlaceOrderResponse: {
647
1207
  id: string;
648
- venueId: string;
649
- basketId: string;
1208
+ status: string;
1209
+ publicId: string | null;
1210
+ orderId: string;
1211
+ quickReferenceNumber: number | null;
1212
+ currency: components["schemas"]["Currency"];
1213
+ };
1214
+ /** ConfirmOrderRequest */
1215
+ ConfirmOrderRequest: {
1216
+ venueAccessor: string;
1217
+ orderId: string;
1218
+ paymentIntentId: string;
1219
+ };
1220
+ /** ConfirmOrderResponse */
1221
+ ConfirmOrderResponse: {
1222
+ id: string;
1223
+ status: string;
650
1224
  publicId: string | null;
651
1225
  quickReferenceNumber: number | null;
652
- /** @enum {string} */
653
- status: "pending" | "in_progress" | "ready" | "completed" | "cancelled";
654
- paymentIntentId: string | null;
655
- /** @enum {string|null} */
656
- paymentMethod: "card" | "cash" | "voucher" | null;
657
- /** @enum {string} */
658
- paymentStatus: "unpaid" | "paid" | "refunded" | "authorized" | "cash_pending";
659
- taxAmount: number;
1226
+ customerId?: string;
1227
+ };
1228
+ /** FetchLatestOrderResponse */
1229
+ FetchLatestOrderResponse: {
1230
+ /** Format: uuid */
1231
+ id: string;
1232
+ publicId: string | null;
1233
+ quickReferenceNumber: number | null;
1234
+ status: components["schemas"]["OrderStatus"];
1235
+ paymentStatus: components["schemas"]["PaymentStatus"];
1236
+ fulfillmentType: components["schemas"]["FulfillmentType"];
1237
+ fulfillmentAt: string | null;
1238
+ orderedAt: string;
660
1239
  totalAmount: number;
661
- /** @enum {string} */
662
- currency: "EUR" | "CHF";
663
- /** @enum {string|null} */
664
- fulfillmentType: "pickup" | "delivery" | null;
665
- fulfillmentAt: unknown;
666
- orderedAt: unknown;
667
- orderedBy: string;
668
- updatedAt: unknown;
669
- updatedBy: string | null;
670
- teamOrderId: string | null;
671
- participantDisplayName: string | null;
672
- leadSettledAt: unknown;
1240
+ currency: components["schemas"]["Currency"];
1241
+ items: {
1242
+ /** Format: uuid */
1243
+ id: string;
1244
+ metadata: {
1245
+ [key: string]: unknown;
1246
+ } | null;
1247
+ deposit: {
1248
+ depositwareTemplateId: string;
1249
+ name: {
1250
+ [key: string]: string;
1251
+ };
1252
+ amount: number;
1253
+ currency: components["schemas"]["Currency"];
1254
+ } | null;
1255
+ menuItems: {
1256
+ menuItemId: string;
1257
+ role: string | null;
1258
+ quantity: number;
1259
+ unit: components["schemas"]["Unit"];
1260
+ }[];
1261
+ }[];
1262
+ itemCount: number;
1263
+ totals: components["schemas"]["BasketTotals"];
1264
+ declaredReturns: {
1265
+ depositwareTemplateId: string;
1266
+ count: number;
1267
+ }[];
673
1268
  };
674
1269
  /** CreatePaymentIntentRequest */
675
1270
  CreatePaymentIntentRequest: {
1271
+ venueAccessor: string;
676
1272
  basketId: string;
677
- /** @enum {string} */
678
- currency: "EUR" | "CHF";
1273
+ currency: components["schemas"]["Currency"];
679
1274
  sessionId: string;
680
- /** @enum {string} */
681
- fulfillmentType: "pickup" | "delivery";
1275
+ fulfillmentType: components["schemas"]["FulfillmentType"];
682
1276
  /** Format: date-time */
683
1277
  fulfillmentAt?: string | null;
684
1278
  customerFirstName?: string;
@@ -697,10 +1291,10 @@ interface components {
697
1291
  };
698
1292
  /** CreateDeltaPaymentIntentRequest */
699
1293
  CreateDeltaPaymentIntentRequest: {
1294
+ venueAccessor: string;
700
1295
  basketId: string;
701
1296
  sessionId: string;
702
- /** @enum {string} */
703
- currency: "EUR" | "CHF";
1297
+ currency: components["schemas"]["Currency"];
704
1298
  declaredReturns?: {
705
1299
  depositwareTemplateId: string;
706
1300
  count: number;
@@ -717,10 +1311,10 @@ interface components {
717
1311
  };
718
1312
  /** ReduceDeltaPaymentIntentRequest */
719
1313
  ReduceDeltaPaymentIntentRequest: {
1314
+ venueAccessor: string;
720
1315
  basketId: string;
721
1316
  sessionId: string;
722
- /** @enum {string} */
723
- currency: "EUR" | "CHF";
1317
+ currency: components["schemas"]["Currency"];
724
1318
  declaredReturns?: {
725
1319
  depositwareTemplateId: string;
726
1320
  count: number;
@@ -737,12 +1331,13 @@ interface components {
737
1331
  * @description Request payload for making a new reservation
738
1332
  */
739
1333
  MakeReservationRequest: {
1334
+ /** @description Venue identifier — UUID or URL-friendly slug (accessor). Resolved server-side. */
1335
+ venueAccessor: string;
740
1336
  /**
741
1337
  * Format: uuid
742
1338
  * @description UUID of the event this reservation is for
743
1339
  */
744
1340
  eventId: string;
745
- quickReferenceNumber?: number | null;
746
1341
  /** @description Date of the reservation in YYYY-MM-DD format */
747
1342
  reservationDate: string;
748
1343
  /** @description Time of the reservation in HH:MM:SS format */
@@ -750,12 +1345,12 @@ interface components {
750
1345
  /** @description Number of guests in the party. Must be between 1 and 20. */
751
1346
  partySize: number;
752
1347
  /** @description Reservation duration in minutes. Defaults to 120 minutes if not specified. Range: 30-300 minutes. */
753
- duration: number | null;
1348
+ duration?: number | null;
754
1349
  /**
755
1350
  * Format: uuid
756
1351
  * @description UUID of existing customer profile if available
757
1352
  */
758
- customerId: string | null;
1353
+ customerId?: string | null;
759
1354
  /** @description First name of the customer making the reservation */
760
1355
  customerFirstName: string;
761
1356
  /** @description Last name of the customer making the reservation */
@@ -767,21 +1362,12 @@ interface components {
767
1362
  customerEmail?: string | null;
768
1363
  /** @description Phone number for reservation confirmations and updates. Include country code for international numbers. */
769
1364
  customerPhone?: string | null;
770
- /**
771
- * @description Preferred method for reservation reminders and updates
772
- * @enum {string}
773
- */
774
- contactPreference: "email" | "phone" | "sms" | "none";
775
- /**
776
- * @description Origin of the reservation request
777
- * @enum {string}
778
- */
779
- source: "website" | "phone" | "walk_in";
1365
+ contactPreference?: components["schemas"]["ContactPreference"];
1366
+ source?: components["schemas"]["AreaBookingRequestSource"];
780
1367
  /** @description Any dietary restrictions, allergies, or special occasions (max 500 characters) */
781
- specialRequests: string | null;
1368
+ specialRequests?: string | null;
782
1369
  /** @description Preferred seating area or table type (e.g., "window seat", "quiet area", "patio") */
783
- tablePreference: string | null;
784
- venueAccessor: string;
1370
+ tablePreference?: string | null;
785
1371
  };
786
1372
  /**
787
1373
  * MakeReservationResponse
@@ -825,16 +1411,8 @@ interface components {
825
1411
  customerEmail: string | null;
826
1412
  /** @description Customer phone number */
827
1413
  customerPhone: string | null;
828
- /**
829
- * @description Preferred contact method
830
- * @enum {string}
831
- */
832
- contactPreference: "email" | "phone" | "sms" | "none";
833
- /**
834
- * @description Current status of the reservation
835
- * @enum {string}
836
- */
837
- status: "pending" | "confirmed" | "arrived" | "seated" | "completed" | "cancelled" | "no_show";
1414
+ contactPreference: components["schemas"]["ContactPreference"];
1415
+ status: components["schemas"]["ReservationStatus"];
838
1416
  /** @description 6-character confirmation code for the reservation */
839
1417
  confirmationCode: string | null;
840
1418
  /** @description When the reservation was confirmed */
@@ -847,18 +1425,10 @@ interface components {
847
1425
  completedAt: unknown;
848
1426
  /** @description When the reservation was cancelled */
849
1427
  cancelledAt: unknown;
850
- /**
851
- * @description Who initiated the cancellation
852
- * @enum {string|null}
853
- */
854
- cancellationReason: "customer_request" | "restaurant_request" | null;
1428
+ cancellationReason: components["schemas"]["CancellationReason"];
855
1429
  /** @description Additional cancellation details */
856
1430
  cancellationNote: string | null;
857
- /**
858
- * @description Origin of the reservation
859
- * @enum {string}
860
- */
861
- source: "website" | "phone" | "walk_in";
1431
+ source: components["schemas"]["AreaBookingRequestSource"];
862
1432
  /** @description Any special requirements or notes */
863
1433
  specialRequests: string | null;
864
1434
  /** @description Preferred seating location */
@@ -888,17 +1458,14 @@ interface components {
888
1458
  } | null;
889
1459
  scheduleId: string | null;
890
1460
  allowance: number;
891
- /** @enum {string} */
892
- billingPeriod: "week" | "month" | "year";
893
- /** @enum {string} */
894
- allowancePeriod: "week" | "month" | "year";
895
- redeemableTagSets: string[] | null;
1461
+ billingPeriod: components["schemas"]["SubscriptionPeriod"];
1462
+ allowancePeriod: components["schemas"]["SubscriptionPeriod"];
1463
+ redeemableTagSets: string[][];
896
1464
  expiryInDays: number | null;
897
1465
  price: number;
898
- /** @enum {string} */
899
- currency: "EUR" | "CHF";
1466
+ currency: components["schemas"]["Currency"];
900
1467
  isActive: boolean;
901
- sortIndex: number | null;
1468
+ sortIndex: string | null;
902
1469
  posters: {
903
1470
  id: string;
904
1471
  menuSubscriptionId: string;
@@ -907,14 +1474,14 @@ interface components {
907
1474
  publicUrl: string;
908
1475
  filename: string;
909
1476
  contentType: string;
910
- sizeBytes: number | null;
911
- sortIndex: number | null;
1477
+ sizeBytes: number;
1478
+ sortIndex: string | null;
912
1479
  createdBy: string | null;
913
1480
  createdAt: string | null;
914
1481
  }[];
915
1482
  };
916
- /** SubscribeRequest */
917
- SubscribeRequest: {
1483
+ /** SubscribeToSubscriptionBody */
1484
+ SubscribeToSubscriptionBody: {
918
1485
  /** Format: email */
919
1486
  email: string;
920
1487
  firstName?: string;
@@ -925,8 +1492,8 @@ interface components {
925
1492
  /** Format: uri */
926
1493
  cancelUrl: string;
927
1494
  };
928
- /** SubscribeResponse */
929
- SubscribeResponse: {
1495
+ /** SubscribeToSubscriptionResponse */
1496
+ SubscribeToSubscriptionResponse: {
930
1497
  /** Format: uri */
931
1498
  checkoutUrl: string | null;
932
1499
  sessionId: string;
@@ -947,19 +1514,25 @@ interface components {
947
1514
  periodStart: string;
948
1515
  periodEnd: string;
949
1516
  expiresAt: string | null;
950
- /** @enum {string} */
951
- status: "available" | "redeemed" | "expired";
1517
+ status: components["schemas"]["SubscriptionCreditStatus"];
952
1518
  redeemedAt: string | null;
953
1519
  orderId: string | null;
954
1520
  createdAt: string | null;
955
1521
  }[];
1522
+ /** DeliveryAddress */
1523
+ DeliveryAddress: {
1524
+ street: string;
1525
+ city: string;
1526
+ state: string;
1527
+ postalCode: string;
1528
+ country: string;
1529
+ };
956
1530
  /**
957
1531
  * CreateTeamOrderRequest
958
1532
  * @description Create a team order: promotes the lead's active basket into a shared team basket and returns the share token.
959
1533
  */
960
1534
  CreateTeamOrderRequest: {
961
- /** Format: uuid */
962
- venueId: string;
1535
+ venueAccessor: string;
963
1536
  sessionId: string;
964
1537
  /** Format: uuid */
965
1538
  menuId: string;
@@ -969,18 +1542,11 @@ interface components {
969
1542
  logoUrl?: string;
970
1543
  /** Format: date-time */
971
1544
  deadlineAt?: string | null;
972
- /** @enum {string} */
973
- fulfillmentType: "pickup" | "delivery";
1545
+ fulfillmentType: components["schemas"]["FulfillmentType"];
974
1546
  /** Format: date-time */
975
1547
  fulfillmentAt?: string | null;
976
- deliveryAddress?: {
977
- street: string;
978
- city: string;
979
- state: string;
980
- postalCode: string;
981
- country: string;
982
- };
983
- allowedPaymentMethods: ("card" | "cash" | "voucher")[];
1548
+ deliveryAddress?: components["schemas"]["DeliveryAddress"];
1549
+ allowedPaymentMethods: components["schemas"]["PaymentMethod"][];
984
1550
  /** Format: uuid */
985
1551
  eventId?: string;
986
1552
  };
@@ -1001,11 +1567,9 @@ interface components {
1001
1567
  teamName: string | null;
1002
1568
  logoUrl: string | null;
1003
1569
  leadDisplayName: string;
1004
- /** @enum {string} */
1005
- status: "draft" | "collecting" | "locked" | "placed" | "ready" | "completed" | "cancelled";
1006
- allowedPaymentMethods: ("card" | "cash" | "voucher")[];
1007
- /** @enum {string} */
1008
- fulfillmentType: "pickup" | "delivery";
1570
+ status: components["schemas"]["TeamOrderStatus"];
1571
+ allowedPaymentMethods: components["schemas"]["PaymentMethod"][];
1572
+ fulfillmentType: components["schemas"]["FulfillmentType"];
1009
1573
  /** Format: date-time */
1010
1574
  fulfillmentAt: string | null;
1011
1575
  /** Format: date-time */
@@ -1033,32 +1597,30 @@ interface components {
1033
1597
  orderId: string | null;
1034
1598
  participantNumber: number | null;
1035
1599
  displayName: string | null;
1036
- /** @enum {string} */
1037
- status: "browsing" | "authorized" | "cash_pending" | "placed" | "completed" | "cancelled";
1600
+ status: components["schemas"]["ParticipantStatus"];
1038
1601
  bundleCount: number;
1039
1602
  amount: number;
1040
- /** @enum {string|null} */
1041
- paymentMethod: "card" | "cash" | "voucher" | null;
1603
+ paymentMethod: components["schemas"]["PaymentMethod"];
1042
1604
  isLead: boolean;
1043
1605
  isMe: boolean;
1044
1606
  /** Format: date-time */
1045
1607
  joinedAt: string;
1046
1608
  items: {
1047
1609
  id: string;
1048
- metadata: unknown;
1610
+ metadata: {
1611
+ [key: string]: unknown;
1612
+ } | null;
1049
1613
  menuItems: {
1050
1614
  menuItemId: string;
1051
1615
  role: string | null;
1052
1616
  quantity: number;
1053
- /** @enum {string} */
1054
- unit: "grams" | "kilograms" | "liters" | "milliliters" | "pieces";
1617
+ unit: components["schemas"]["Unit"];
1055
1618
  }[];
1056
1619
  isPaid: boolean;
1057
1620
  }[];
1058
1621
  payments: {
1059
1622
  amount: number;
1060
- /** @enum {string} */
1061
- method: "card" | "cash" | "voucher";
1623
+ method: components["schemas"]["PaymentMethod"];
1062
1624
  /** @enum {string} */
1063
1625
  status: "authorized" | "captured" | "cash_pending" | "cash_received";
1064
1626
  /** Format: date-time */
@@ -1100,8 +1662,7 @@ interface components {
1100
1662
  teamOrderId: string;
1101
1663
  basketId: string;
1102
1664
  customerId: string;
1103
- /** @enum {string} */
1104
- status: "draft" | "collecting" | "locked" | "placed" | "ready" | "completed" | "cancelled";
1665
+ status: components["schemas"]["TeamOrderStatus"];
1105
1666
  isLead: boolean;
1106
1667
  alreadyJoined: boolean;
1107
1668
  };
@@ -1114,8 +1675,7 @@ interface components {
1114
1675
  SubmitTeamOrderResponse: {
1115
1676
  /** Format: uuid */
1116
1677
  teamOrderId: string;
1117
- /** @enum {string} */
1118
- status: "draft" | "collecting" | "locked" | "placed" | "ready" | "completed" | "cancelled";
1678
+ status: components["schemas"]["TeamOrderStatus"];
1119
1679
  capturedOrderIds: string[];
1120
1680
  cashPendingOrderIds: string[];
1121
1681
  droppedBasketIds: string[];
@@ -1132,8 +1692,7 @@ interface components {
1132
1692
  CancelTeamOrderResponse: {
1133
1693
  /** Format: uuid */
1134
1694
  teamOrderId: string;
1135
- /** @enum {string} */
1136
- status: "draft" | "collecting" | "locked" | "placed" | "ready" | "completed" | "cancelled";
1695
+ status: components["schemas"]["TeamOrderStatus"];
1137
1696
  voidedPaymentIntentIds: string[];
1138
1697
  /** Format: date-time */
1139
1698
  cancelledAt: string;
@@ -1149,8 +1708,7 @@ interface components {
1149
1708
  ExtendDeadlineTeamOrderResponse: {
1150
1709
  /** Format: uuid */
1151
1710
  teamOrderId: string;
1152
- /** @enum {string} */
1153
- status: "draft" | "collecting" | "locked" | "placed" | "ready" | "completed" | "cancelled";
1711
+ status: components["schemas"]["TeamOrderStatus"];
1154
1712
  /** Format: date-time */
1155
1713
  deadlineAt: string | null;
1156
1714
  };
@@ -1165,8 +1723,7 @@ interface components {
1165
1723
  SetFulfillmentAtTeamOrderResponse: {
1166
1724
  /** Format: uuid */
1167
1725
  teamOrderId: string;
1168
- /** @enum {string} */
1169
- status: "draft" | "collecting" | "locked" | "placed" | "ready" | "completed" | "cancelled";
1726
+ status: components["schemas"]["TeamOrderStatus"];
1170
1727
  /** Format: date-time */
1171
1728
  fulfillmentAt: string;
1172
1729
  /** Format: date-time */
@@ -1182,8 +1739,7 @@ interface components {
1182
1739
  SetDiningLocationTeamOrderResponse: {
1183
1740
  /** Format: uuid */
1184
1741
  teamOrderId: string;
1185
- /** @enum {string} */
1186
- status: "draft" | "collecting" | "locked" | "placed" | "ready" | "completed" | "cancelled";
1742
+ status: components["schemas"]["TeamOrderStatus"];
1187
1743
  diningLocation: string | null;
1188
1744
  };
1189
1745
  /** SetDiningTimeTeamOrderRequest */
@@ -1196,46 +1752,64 @@ interface components {
1196
1752
  SetDiningTimeTeamOrderResponse: {
1197
1753
  /** Format: uuid */
1198
1754
  teamOrderId: string;
1199
- /** @enum {string} */
1200
- status: "draft" | "collecting" | "locked" | "placed" | "ready" | "completed" | "cancelled";
1755
+ status: components["schemas"]["TeamOrderStatus"];
1201
1756
  diningTime: string;
1202
- diningOffsetMinutes: number;
1757
+ diningOffset: number;
1758
+ };
1759
+ /** SetOrderLeadSettledRequest */
1760
+ SetOrderLeadSettledRequest: {
1761
+ publicId: string;
1762
+ sessionId: string;
1763
+ /** Format: uuid */
1764
+ orderId: string;
1765
+ settled: boolean;
1766
+ };
1767
+ /** SetOrderLeadSettledResponse */
1768
+ SetOrderLeadSettledResponse: {
1769
+ /** Format: uuid */
1770
+ orderId: string;
1771
+ leadSettledAt: string | null;
1772
+ };
1773
+ /** AutoExtendFulfillmentIfExpiredRequest */
1774
+ AutoExtendFulfillmentIfExpiredRequest: {
1775
+ publicId: string;
1776
+ sessionId: string;
1777
+ /** Format: date-time */
1778
+ proposedFulfillmentAt: string;
1779
+ };
1780
+ /** AutoExtendFulfillmentIfExpiredResponse */
1781
+ AutoExtendFulfillmentIfExpiredResponse: {
1782
+ extended: boolean;
1783
+ teamOrderId: string;
1784
+ status: string;
1785
+ /** Format: date-time */
1786
+ fulfillmentAt: string;
1787
+ /** Format: date-time */
1788
+ deadlineAt: string | null;
1789
+ /** Format: date-time */
1790
+ previousFulfillmentAt: string;
1791
+ waitingCount: number;
1203
1792
  };
1204
1793
  /** SwitchFulfillmentTeamOrderRequest */
1205
1794
  SwitchFulfillmentTeamOrderRequest: {
1206
1795
  publicId: string;
1207
- sessionId: string;
1208
- /** @enum {string} */
1209
- fulfillmentType: "pickup" | "delivery";
1210
- deliveryAddress?: {
1211
- street: string;
1212
- city: string;
1213
- state: string;
1214
- postalCode: string;
1215
- country: string;
1216
- };
1796
+ sessionId: string;
1797
+ fulfillmentType: components["schemas"]["FulfillmentType"];
1798
+ deliveryAddress?: components["schemas"]["DeliveryAddress"];
1217
1799
  };
1218
1800
  /** SwitchFulfillmentTeamOrderResponse */
1219
1801
  SwitchFulfillmentTeamOrderResponse: {
1220
1802
  /** Format: uuid */
1221
1803
  teamOrderId: string;
1222
- /** @enum {string} */
1223
- status: "draft" | "collecting" | "locked" | "placed" | "ready" | "completed" | "cancelled";
1224
- /** @enum {string} */
1225
- fulfillmentType: "pickup" | "delivery";
1804
+ status: components["schemas"]["TeamOrderStatus"];
1805
+ fulfillmentType: components["schemas"]["FulfillmentType"];
1226
1806
  deliveryAddressId: string | null;
1227
1807
  };
1228
1808
  /** UpdateDeliveryAddressTeamOrderRequest */
1229
1809
  UpdateDeliveryAddressTeamOrderRequest: {
1230
1810
  publicId: string;
1231
1811
  sessionId: string;
1232
- deliveryAddress: {
1233
- street: string;
1234
- city: string;
1235
- state: string;
1236
- postalCode: string;
1237
- country: string;
1238
- };
1812
+ deliveryAddress: components["schemas"]["DeliveryAddress"];
1239
1813
  };
1240
1814
  /** UpdateDeliveryAddressTeamOrderResponse */
1241
1815
  UpdateDeliveryAddressTeamOrderResponse: {
@@ -1260,6 +1834,120 @@ interface components {
1260
1834
  createdAt: unknown;
1261
1835
  updatedAt: unknown;
1262
1836
  };
1837
+ /** @enum {string} */
1838
+ ActorType: "human" | "robot";
1839
+ /** @enum {string} */
1840
+ AdditiveFunction: "acid" | "acidity_regulator" | "anti_caking_agent" | "anti_foaming_agent" | "antioxidant" | "bulking_agent" | "carrier" | "colour" | "emulsifier" | "emulsifying_salt" | "firming_agent" | "flavour_enhancer" | "flour_treatment_agent" | "foaming_agent" | "gelling_agent" | "glazing_agent" | "humectant" | "modified_starch" | "preservative" | "packaging_gas" | "propellant_gas" | "raising_agent" | "sequestrant" | "stabiliser" | "sweetener" | "thickener";
1841
+ /** @enum {string} */
1842
+ AreaBookingMode: "slot" | "day";
1843
+ /** @enum {string} */
1844
+ AreaBookingRequestSource: "website" | "phone" | "walk_in";
1845
+ /** @enum {string} */
1846
+ AreaBookingRequestStatus: "pending" | "approved" | "rejected" | "cancelled";
1847
+ /** @enum {string} */
1848
+ AreaBookingStatus: "confirmed" | "arrived" | "completed" | "cancelled" | "no_show";
1849
+ /** @enum {string} */
1850
+ ArticleEditorSaveState: "idle" | "saving" | "saved" | "error";
1851
+ /** @enum {string} */
1852
+ ArticleStatus: "draft" | "published";
1853
+ /** @enum {string} */
1854
+ BasketStatus: "active" | "abandoned" | "converted";
1855
+ /** @enum {string} */
1856
+ BeverageCategory: "wine" | "beer" | "coffee" | "tea" | "cocktail" | "juice" | "soft_drink" | "dairy_drink" | "spirit" | "water";
1857
+ /** @enum {string} */
1858
+ CancellationReason: "customer_request" | "restaurant_request";
1859
+ /** @enum {string} */
1860
+ ContactPreference: "email" | "phone" | "sms" | "none";
1861
+ /** @enum {string} */
1862
+ CountryCode: "AD" | "AE" | "AF" | "AG" | "AI" | "AL" | "AM" | "AO" | "AQ" | "AR" | "AS" | "AT" | "AU" | "AW" | "AX" | "AZ" | "BA" | "BB" | "BD" | "BE" | "BF" | "BG" | "BH" | "BI" | "BJ" | "BL" | "BM" | "BN" | "BO" | "BQ" | "BR" | "BS" | "BT" | "BV" | "BW" | "BY" | "BZ" | "CA" | "CC" | "CD" | "CF" | "CG" | "CH" | "CI" | "CK" | "CL" | "CM" | "CN" | "CO" | "CR" | "CU" | "CV" | "CW" | "CX" | "CY" | "CZ" | "DE" | "DJ" | "DK" | "DM" | "DO" | "DZ" | "EC" | "EE" | "EG" | "EH" | "ER" | "ES" | "ET" | "FI" | "FJ" | "FK" | "FM" | "FO" | "FR" | "GA" | "GB" | "GD" | "GE" | "GF" | "GG" | "GH" | "GI" | "GL" | "GM" | "GN" | "GP" | "GQ" | "GR" | "GS" | "GT" | "GU" | "GW" | "GY" | "HK" | "HM" | "HN" | "HR" | "HT" | "HU" | "ID" | "IE" | "IL" | "IM" | "IN" | "IO" | "IQ" | "IR" | "IS" | "IT" | "JE" | "JM" | "JO" | "JP" | "KE" | "KG" | "KH" | "KI" | "KM" | "KN" | "KP" | "KR" | "KW" | "KY" | "KZ" | "LA" | "LB" | "LC" | "LI" | "LK" | "LR" | "LS" | "LT" | "LU" | "LV" | "LY" | "MA" | "MC" | "MD" | "ME" | "MF" | "MG" | "MH" | "MK" | "ML" | "MM" | "MN" | "MO" | "MP" | "MQ" | "MR" | "MS" | "MT" | "MU" | "MV" | "MW" | "MX" | "MY" | "MZ" | "NA" | "NC" | "NE" | "NF" | "NG" | "NI" | "NL" | "NO" | "NP" | "NR" | "NU" | "NZ" | "OM" | "PA" | "PE" | "PF" | "PG" | "PH" | "PK" | "PL" | "PM" | "PN" | "PR" | "PS" | "PT" | "PW" | "PY" | "QA" | "RE" | "RO" | "RS" | "RU" | "RW" | "SA" | "SB" | "SC" | "SD" | "SE" | "SG" | "SH" | "SI" | "SJ" | "SK" | "SL" | "SM" | "SN" | "SO" | "SR" | "SS" | "ST" | "SV" | "SX" | "SY" | "SZ" | "TC" | "TD" | "TF" | "TG" | "TH" | "TJ" | "TK" | "TL" | "TM" | "TN" | "TO" | "TR" | "TT" | "TV" | "TW" | "TZ" | "UA" | "UG" | "UM" | "US" | "UY" | "UZ" | "VA" | "VC" | "VE" | "VG" | "VI" | "VN" | "VU" | "WF" | "WS" | "YE" | "YT" | "ZA" | "ZM" | "ZW";
1863
+ /** @enum {string} */
1864
+ Currency: "EUR" | "CHF";
1865
+ /** @enum {string} */
1866
+ DepositTransactionType: "charged" | "refunded" | "forfeited" | "waived" | "credit_used";
1867
+ /** @enum {string} */
1868
+ DepositwareStatus: "available" | "issued" | "returned" | "lost" | "damaged" | "retired";
1869
+ /** @enum {string} */
1870
+ EntityOwnerType: "event" | "dish" | "beverage" | "venue" | "menu" | "menuSubscription" | "ritual";
1871
+ /** @enum {string} */
1872
+ IntegrationNotificationType: "order_created" | "order_cancelled" | "order_completed" | "team_order_created" | "reservation_created" | "reservation_confirmed" | "reservation_cancelled";
1873
+ /** @enum {string} */
1874
+ IntegrationType: "telegram";
1875
+ /** @enum {string} */
1876
+ InventoryAssetStatus: "available" | "in_use" | "maintenance" | "retired";
1877
+ /** @enum {string} */
1878
+ InventoryCategory: "depositware" | "furniture" | "equipment" | "utensil";
1879
+ /** @enum {string} */
1880
+ InvitationScenario: "new_user" | "already_member" | "former_employee";
1881
+ /** @enum {string} */
1882
+ Locale: "aa" | "ab" | "ae" | "af" | "ak" | "am" | "an" | "ar" | "as" | "av" | "ay" | "az" | "ba" | "be" | "bg" | "bh" | "bi" | "bm" | "bn" | "bo" | "br" | "bs" | "ca" | "ce" | "ch" | "co" | "cr" | "cs" | "cu" | "cv" | "cy" | "da" | "de" | "dv" | "dz" | "ee" | "el" | "en" | "eo" | "es" | "et" | "eu" | "fa" | "ff" | "fi" | "fj" | "fo" | "fr" | "fy" | "ga" | "gd" | "gl" | "gn" | "gu" | "gv" | "ha" | "he" | "hi" | "ho" | "hr" | "ht" | "hu" | "hy" | "hz" | "ia" | "id" | "ie" | "ig" | "ii" | "ik" | "io" | "is" | "it" | "iu" | "ja" | "jv" | "ka" | "kg" | "ki" | "kj" | "kk" | "kl" | "km" | "kn" | "ko" | "kr" | "ks" | "ku" | "kv" | "kw" | "ky" | "la" | "lb" | "lg" | "li" | "ln" | "lo" | "lt" | "lu" | "lv" | "mg" | "mh" | "mi" | "mk" | "ml" | "mn" | "mr" | "ms" | "mt" | "my" | "na" | "nb" | "nd" | "ne" | "ng" | "nl" | "nn" | "no" | "nr" | "nv" | "ny" | "oc" | "oj" | "om" | "or" | "os" | "pa" | "pi" | "pl" | "ps" | "pt" | "qu" | "rm" | "rn" | "ro" | "ru" | "rw" | "sa" | "sc" | "sd" | "se" | "sg" | "si" | "sk" | "sl" | "sm" | "sn" | "so" | "sq" | "sr" | "ss" | "st" | "su" | "sv" | "sw" | "ta" | "te" | "tg" | "th" | "ti" | "tk" | "tl" | "tn" | "to" | "tr" | "ts" | "tt" | "tw" | "ty" | "ug" | "uk" | "ur" | "uz" | "ve" | "vi" | "vo" | "wa" | "wo" | "xh" | "yi" | "yo" | "za" | "zh" | "zu";
1883
+ /** @enum {string} */
1884
+ MenuItemType: "dish" | "beverage";
1885
+ /** @enum {string} */
1886
+ FulfillmentType: "pickup" | "delivery";
1887
+ /** @enum {string} */
1888
+ OrderStatus: "pending" | "in_progress" | "ready" | "completed" | "cancelled";
1889
+ /** @enum {string} */
1890
+ PaymentMethod: "card" | "cash" | "voucher";
1891
+ /** @enum {string} */
1892
+ PaymentStatus: "unpaid" | "paid" | "refunded" | "authorized" | "cash_pending";
1893
+ /** @enum {string} */
1894
+ ScanTokenEntityType: "order" | "depositware";
1895
+ /** @enum {string} */
1896
+ SortOrder: "asc" | "desc";
1897
+ /** @enum {string} */
1898
+ SubscriberStatus: "active" | "paused" | "cancelled" | "past_due" | "trialing";
1899
+ /** @enum {string} */
1900
+ SubscriptionCreditStatus: "available" | "redeemed" | "expired";
1901
+ /** @enum {string} */
1902
+ SubscriptionPeriod: "week" | "month" | "year";
1903
+ /** @enum {string} */
1904
+ TeamOrderStatus: "draft" | "collecting" | "locked" | "placed" | "ready" | "completed" | "cancelled";
1905
+ /** @enum {string} */
1906
+ Unit: "grams" | "kilograms" | "liters" | "milliliters" | "pieces";
1907
+ /** @enum {string} */
1908
+ MentionEntityType: "dish" | "beverage" | "ingredient" | "menu" | "ritual";
1909
+ /** @enum {string} */
1910
+ MentionKind: "link" | "value";
1911
+ /** @enum {string} */
1912
+ PendingSuperadminTransferStatus: "pending_invite" | "accepted_awaiting_payment" | "completed" | "cancelled" | "expired";
1913
+ /** @enum {string} */
1914
+ BillingMode: "single_anchor" | "split";
1915
+ /** @enum {string} */
1916
+ VenueChargeKind: "base" | "addon";
1917
+ /** @enum {string} */
1918
+ AssetType: "image" | "video" | "document";
1919
+ /** @enum {string} */
1920
+ Jurisdiction: "DE" | "CH" | "FR" | "IT";
1921
+ /** @enum {string} */
1922
+ DayOfWeek: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday";
1923
+ /** @enum {string} */
1924
+ SlotMode: "interval" | "duration";
1925
+ /** @enum {string} */
1926
+ TeamOrderPaymentStatus: "authorized" | "captured" | "cash_pending" | "cash_received" | "voided" | "failed";
1927
+ /** @enum {string} */
1928
+ FeatureCategory: "articles" | "auth" | "billing" | "core" | "customers" | "events" | "inventory" | "menus" | "orders" | "platform" | "promotions" | "reservations" | "settings" | "venues";
1929
+ /** @enum {string} */
1930
+ FeatureStatus: "backlog" | "in_development" | "released";
1931
+ /** @enum {string} */
1932
+ MentionFieldFormatter: "text" | "currency" | "integer" | "percentage" | "boolean";
1933
+ /** @enum {string} */
1934
+ PromotionBenefitType: "free_item" | "discount_percentage" | "discount_amount" | "buy_x_get_y";
1935
+ /** @enum {string} */
1936
+ ReservationPromotionStatus: "applied" | "redeemed" | "expired";
1937
+ /** @enum {string} */
1938
+ ReservationStatus: "pending" | "confirmed" | "arrived" | "seated" | "completed" | "cancelled" | "no_show";
1939
+ /** @enum {string} */
1940
+ VenueAssetType: "logomark" | "wordmark" | "combinationmark_horizontal" | "combinationmark_vertical";
1941
+ /** @enum {string} */
1942
+ VenueUserStatus: "pending" | "confirmed" | "revoked";
1943
+ /** @enum {string} */
1944
+ VenueType: "restaurant" | "fine_dining_restaurant" | "ghost_kitchen" | "food_truck";
1945
+ /** @enum {string} */
1946
+ ParticipantStatus: "browsing" | "authorized" | "cash_pending" | "placed" | "completed" | "cancelled";
1947
+ /** @enum {string} */
1948
+ EnumTrue: "true";
1949
+ /** @enum {string} */
1950
+ EnumFalse: "false";
1263
1951
  };
1264
1952
  responses: never;
1265
1953
  parameters: never;
@@ -1271,18 +1959,18 @@ interface components {
1271
1959
  type schemas = components['schemas'];
1272
1960
  type CreateEventRequest = schemas['CreateEventRequest'];
1273
1961
  type CreateEventResponse = schemas['CreateEventResponse'];
1274
- type Article = schemas['Article'];
1275
- type ListArticlesResponse = schemas['ListArticlesResponse'];
1276
- type GetArticleResponse = schemas['GetArticleResponse'];
1277
- type PatchArticleRequest = schemas['PatchArticleRequest'];
1278
- type PatchArticleResponse = schemas['PatchArticleResponse'];
1962
+ type Article = schemas['FetchArticleResponse'];
1963
+ type ListArticlesResponse = schemas['FetchArticlesResponse'];
1964
+ type GetArticleResponse = schemas['FetchArticleResponse'];
1965
+ type PatchArticleRequest = schemas['EditArticleRequest'];
1966
+ type PatchArticleResponse = schemas['EditArticleResponse'];
1279
1967
  type FeatureImage = schemas['FeatureImage'];
1280
- type PatchFeatureImageRequest = schemas['PatchFeatureImageRequest'];
1968
+ type PatchFeatureImageRequest = schemas['PatchArticleFeatureImageBody'];
1281
1969
  /**
1282
1970
  * Args for `client.articles.uploadFeatureImage()`. The SDK accepts a
1283
1971
  * `Buffer` or `Uint8Array` payload + filename + content-type — it
1284
1972
  * builds the FormData internally so callers don't have to know about
1285
- * multipart wire encoding.
1973
+ * multipart wire encoding. Client ergonomics, no wire equivalent.
1286
1974
  */
1287
1975
  interface UploadFeatureImageArgs {
1288
1976
  data: Buffer | Uint8Array;
@@ -1297,16 +1985,15 @@ interface ListArticlesOptions {
1297
1985
  /** When `true`, include articles whose `isActive` is `false`. Default `false`. */
1298
1986
  includeInactive?: boolean;
1299
1987
  }
1300
- type Venue = schemas['Venue'];
1988
+ type Venue = schemas['GetVenueResponse'];
1301
1989
  type GetVenueResponse = schemas['GetVenueResponse'];
1302
1990
  /**
1303
- * Order fulfillment type - matches order_fulfillment_type enum in order3000 database.
1304
- * Keep in sync with apps/order3000/src/drizzle/enums.ts
1991
+ * Order fulfillment type — bound to the generated `FulfillmentType`
1992
+ * component (order3000's `order_fulfillment_type` enum, surfaced via
1993
+ * `openapi-typescript`). Never hand-rolled.
1305
1994
  */
1306
- type OrderFulfillmentType = 'pickup' | 'delivery';
1307
- type PlaceOrderRequest = Omit<schemas['PlaceOrderRequest'], 'taxAmount' | 'totalAmount' | 'fulfillmentAt'> & {
1308
- /** Fulfillment type for the order (pickup or delivery) */
1309
- fulfillmentType?: OrderFulfillmentType;
1995
+ type OrderFulfillmentType = schemas['FulfillmentType'];
1996
+ type PlaceOrderRequest = Omit<schemas['PlaceOrderRequest'], 'fulfillmentAt'> & {
1310
1997
  /**
1311
1998
  * When the order should be fulfilled (ISO 8601 datetime or Date).
1312
1999
  * Null / omitted in team-order mode — the Lead's pickup-time decision
@@ -1314,126 +2001,52 @@ type PlaceOrderRequest = Omit<schemas['PlaceOrderRequest'], 'taxAmount' | 'total
1314
2001
  * submit time.
1315
2002
  */
1316
2003
  fulfillmentAt?: Date | string | null;
1317
- /** Guest session identifier for customer lookup */
1318
- sessionId?: string;
1319
- /** Customer first name (for cash orders) */
1320
- customerFirstName?: string;
1321
- /** Customer last name (for cash orders) */
1322
- customerLastName?: string;
1323
- /** Customer email address (for cash orders) */
1324
- customerEmail?: string;
1325
- /**
1326
- * Deposit containers the customer declares they will return at pickup.
1327
- * Per-template references only — order3000 refuses any inbound deposit
1328
- * money amount.
1329
- */
1330
- declaredReturns?: DeclaredReturn[];
1331
2004
  };
1332
2005
  type PlaceOrderResponse = schemas['PlaceOrderResponse'];
1333
2006
  type MakeReservationRequest = schemas['MakeReservationRequest'];
1334
2007
  type MakeReservationResponse = schemas['MakeReservationResponse'];
1335
- type DayOfWeek = 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | 'sunday';
1336
- interface TimeSlot {
1337
- id: string;
1338
- startTime: string;
1339
- endTime: string | null;
1340
- dayOfWeek?: DayOfWeek | null;
1341
- isSchedulable: boolean | null;
1342
- }
1343
- interface ScheduleOverride {
1344
- id: string;
1345
- date: string;
1346
- reason: Record<string, string> | null;
1347
- timeSlots: TimeSlot[];
1348
- }
1349
- interface Schedule {
1350
- id: string;
1351
- name: Record<string, string>;
1352
- description: Record<string, string> | null;
1353
- timezone: string;
1354
- rrule: string | null;
1355
- exdates: string[] | null;
1356
- validFrom: string | null;
1357
- validTo: string | null;
1358
- priority: number | null;
1359
- isActive: boolean;
1360
- sortIndex: string | null;
1361
- updatedAt: string | null;
1362
- updatedBy: string | null;
1363
- createdAt: string | null;
1364
- createdBy: string | null;
1365
- slotMode: 'interval' | 'duration';
1366
- intervalMinutes: number | null;
1367
- durationMinutes: number | null;
1368
- }
1369
- interface EventPoster {
1370
- id: string;
1371
- eventId: string;
1372
- storagePath: string;
1373
- /** Public URL for accessing the poster image (no expiry) */
1374
- publicUrl: string | null;
1375
- filename: string;
1376
- contentType: string;
1377
- sizeBytes: number;
1378
- isPrimary: boolean;
1379
- sortIndex: string | null;
1380
- createdBy: string | null;
1381
- createdAt: string | null;
1382
- }
1383
- interface Promotion {
1384
- id: string;
1385
- venueId: string;
1386
- name: Record<string, string>;
1387
- description: Record<string, string> | null;
1388
- benefitType: 'free_item' | 'discount_percentage' | 'discount_amount' | 'buy_x_get_y';
1389
- benefitValue: Record<string, unknown>;
1390
- conditions: Record<string, unknown> | null;
1391
- maxRedemptions: number | null;
1392
- currentRedemptions: number | null;
1393
- validFrom: string | null;
1394
- validTo: string | null;
1395
- isActive: boolean;
1396
- createdBy: string | null;
1397
- updatedBy: string | null;
1398
- createdAt: string | null;
1399
- updatedAt: string | null;
1400
- timeSlotIds?: string[] | null;
1401
- }
1402
- interface Event {
1403
- id: string;
1404
- venueId: string;
1405
- name: Record<string, string>;
1406
- description: Record<string, string> | null;
1407
- scheduleId: string | null;
1408
- maxBookings: number | null;
1409
- maxGuests: number | null;
1410
- minPartySize: number | null;
1411
- maxPartySize: number | null;
1412
- isPublic: boolean;
1413
- isRecurring: boolean;
1414
- isClosed: boolean;
1415
- reservationsEnabled: boolean;
1416
- bookingOpensAtDays: number | null;
1417
- bookingClosesAtHours: number | null;
1418
- isActive: boolean;
1419
- /** Whether this event should be displayed prominently in public-facing areas */
1420
- isFeatured: boolean;
1421
- /** Priority for conflict resolution (higher = takes precedence) */
1422
- priority: number;
1423
- createdBy: string | null;
1424
- updatedBy: string | null;
1425
- createdAt: string | null;
1426
- updatedAt: string | null;
1427
- schedule: Schedule | null;
1428
- posters: EventPoster[];
1429
- promotions: Promotion[];
1430
- /** Regular time slots (by day of week) */
1431
- timeSlots: TimeSlot[];
1432
- /** Date-specific schedule overrides */
1433
- scheduleOverrides: ScheduleOverride[];
1434
- /** Next occurrence date for recurring events (YYYY-MM-DD format) */
1435
- nextOccurrence?: string | null;
1436
- }
2008
+ /**
2009
+ * Day of week — generated-bound to the `dayOfWeek` enum carried by the
2010
+ * events list schedule time-slot rows. The order3000 events output
2011
+ * schema is now precise (no more `.passthrough()`), so this derives
2012
+ * straight from the wire contract.
2013
+ */
2014
+ type DayOfWeek = NonNullable<NonNullable<schemas['FetchEventsResponse'][number]['schedule']>['scheduleTimeSlots'][number]['dayOfWeek']>;
2015
+ /**
2016
+ * A single regular (by-day-of-week) time slot for an event. Generated-bound
2017
+ * to the events list response's `timeSlots[]` element.
2018
+ */
2019
+ type TimeSlot = schemas['FetchEventsResponse'][number]['timeSlots'][number];
2020
+ /**
2021
+ * A date-specific schedule override for an event. Generated-bound to the
2022
+ * events list response's `scheduleOverrides[]` element.
2023
+ */
2024
+ type ScheduleOverride = schemas['FetchEventsResponse'][number]['scheduleOverrides'][number];
2025
+ /**
2026
+ * An event's schedule (rrule, validity window, slot-generation settings,
2027
+ * plus the nested override / time-slot rows). Generated-bound to the
2028
+ * non-null `schedule` object on the events list response.
2029
+ *
2030
+ * `intervalDuration` / `duration` are milliseconds (codebase convention).
2031
+ */
2032
+ type Schedule = NonNullable<schemas['FetchEventsResponse'][number]['schedule']>;
2033
+ /**
2034
+ * An event poster (image/video/document asset attached to an event).
2035
+ * Generated-bound to the events list response's `posters[]` element.
2036
+ */
2037
+ type EventPoster = schemas['FetchEventsResponse'][number]['posters'][number];
2038
+ /**
2039
+ * A promotion attached to an event. Generated-bound to the events list
2040
+ * response's `promotions[]` element.
2041
+ */
2042
+ type Promotion = schemas['FetchEventsResponse'][number]['promotions'][number];
2043
+ /**
2044
+ * A single event as returned by the list endpoint, with schedule,
2045
+ * posters, promotions, time slots and overrides inlined. Generated-bound
2046
+ * to the events list response element — request-shape drift is now
2047
+ * impossible.
2048
+ */
2049
+ type Event = schemas['FetchEventsResponse'][number];
1437
2050
  interface ListEventsOptions {
1438
2051
  /** Include private events in the response */
1439
2052
  includePrivate?: boolean;
@@ -1448,11 +2061,20 @@ interface ListEventsOptions {
1448
2061
  /** Filter for events occurring within N days from today */
1449
2062
  upcomingWithinDays?: number;
1450
2063
  }
1451
- type ListEventsResponse = Event[];
1452
- type MenuItemType = 'dish' | 'beverage';
1453
2064
  /**
1454
- * Crop area coordinates for assets.
1455
- * Re-exported from @kolaveri/molecules Cropper component for type consistency.
2065
+ * The events list response — generated-bound to `FetchEventsResponse`
2066
+ * (an array of {@link Event}). Never hand-rolled.
2067
+ */
2068
+ type ListEventsResponse = schemas['FetchEventsResponse'];
2069
+ /**
2070
+ * Menu item discriminant — generated-bound to the `type` enum on the
2071
+ * menu response's `items[]` element. The `fetchMenu` output schema is
2072
+ * now precise; never hand-rolled.
2073
+ */
2074
+ type MenuItemType = NonNullable<schemas['FetchMenuResponse']['items']>[number]['type'];
2075
+ /**
2076
+ * Crop area coordinates for assets. Shared UI helper (mirrors the
2077
+ * `@kolaveri/molecules` Cropper type) — not a wire DTO.
1456
2078
  */
1457
2079
  interface CropArea {
1458
2080
  x: number;
@@ -1460,599 +2082,220 @@ interface CropArea {
1460
2082
  width: number;
1461
2083
  height: number;
1462
2084
  }
1463
- interface MenuAsset {
1464
- id: string;
1465
- type: 'image' | 'video' | 'document';
1466
- tags: string[] | null;
1467
- filename: string;
1468
- contentType: string;
1469
- metadata: {
1470
- width?: number;
1471
- height?: number;
1472
- duration?: number;
1473
- } | null;
1474
- /** Crop area to apply when processing this asset. Used by prebuild scripts. */
1475
- cropArea: CropArea | null;
1476
- publicUrl: string;
1477
- }
1478
- interface MenuDish {
1479
- id: string;
1480
- accessor: string;
1481
- name: Record<string, string>;
1482
- shortName?: Record<string, string>;
1483
- description: Record<string, string> | null;
1484
- longDescription?: Record<string, string> | null;
1485
- isVegetarian: boolean | null;
1486
- isVegan: boolean | null;
1487
- isGlutenFree: boolean | null;
1488
- isDairyFree: boolean | null;
1489
- spiciness: number | null;
1490
- assets?: MenuAsset[];
1491
- }
1492
- interface MenuBeverage {
1493
- id: string;
1494
- accessor: string;
1495
- name: Record<string, string>;
1496
- shortName?: Record<string, string>;
1497
- description: Record<string, string> | null;
1498
- longDescription?: Record<string, string> | null;
1499
- assets?: MenuAsset[];
1500
- }
1501
- interface MenuItem {
1502
- id: string;
1503
- type: MenuItemType;
1504
- tags: string[] | null;
1505
- /** Price adjustment in cents (adds to bundle base price) */
1506
- priceAdjustment: number;
1507
- currency: CurrencyCode;
1508
- isActive: boolean;
1509
- /** Whether this menu item should get a dedicated SEO detail page on consumer sites */
1510
- isFeatured: boolean;
1511
- sortIndex: string | null;
1512
- dish: MenuDish | null;
1513
- beverage: MenuBeverage | null;
1514
- }
1515
- interface Menu {
1516
- id: string;
1517
- venueId: string;
1518
- accessor: string;
1519
- name: Record<string, string>;
1520
- description: Record<string, string> | null;
1521
- items?: MenuItem[];
1522
- /**
1523
- * Menu-level assets surfaced via the `menu_assets` junction. Populated
1524
- * when the caller passes `expand: ['assets']` (or `['items', 'assets']`)
1525
- * to `menus.getByAccessor` / `menus.get`. These are distinct from the
1526
- * per-item `dish.assets` / `beverage.assets` arrays — menu-level assets
1527
- * are curated for the menu as a whole (e.g. blog carousel imagery).
1528
- */
1529
- assets?: MenuAsset[];
1530
- }
2085
+ /**
2086
+ * A menu — generated-bound to `FetchMenuResponse`. order3000's
2087
+ * `fetchMenu` action always projects the flat, hydrated client view:
2088
+ * `assets[]` (menu-level) and every `items[].dish.assets[]` /
2089
+ * `items[].beverage.assets[]` are resolved to flat assets carrying
2090
+ * their Supabase `publicUrl`; the raw `*_assets` junction relations are
2091
+ * stripped at source and never surface on the wire. Bound here via the
2092
+ * same alias-derivation style as `Basket`/`BasketItem`.
2093
+ */
2094
+ type Menu = NonNullable<schemas['FetchMenuResponse']>;
2095
+ /**
2096
+ * A single menu item — generated-bound to the element type of
2097
+ * `Menu.items[]` (present when `expand=items`).
2098
+ */
2099
+ type MenuItem = NonNullable<Menu['items']>[number];
2100
+ /**
2101
+ * The dish carried by a menu item — generated-bound to `MenuItem.dish`.
2102
+ */
2103
+ type MenuDish = NonNullable<MenuItem['dish']>;
2104
+ /**
2105
+ * The beverage carried by a menu item — generated-bound to
2106
+ * `MenuItem.beverage`.
2107
+ */
2108
+ type MenuBeverage = NonNullable<MenuItem['beverage']>;
2109
+ /**
2110
+ * A flat, hydrated asset — generated-bound to the element type of the
2111
+ * always-present menu-level `Menu.assets[]`. Identical in shape to the
2112
+ * per-item `dish.assets[]` / `beverage.assets[]` elements (all are the
2113
+ * same hydrated asset projection with a resolved `publicUrl`).
2114
+ */
2115
+ type MenuAsset = NonNullable<Menu['assets']>[number];
1531
2116
  interface GetMenuOptions {
1532
2117
  /** Expand related resources (items, assets) */
1533
2118
  expand?: ('items' | 'assets')[];
1534
2119
  }
1535
- interface MenuBundleDeposit {
1536
- /**
1537
- * Primary reference. Clients declare returns against this id +
1538
- * a count; they never specify a deposit money amount. order3000
1539
- * refuses to accept a deposit amount on any inbound payload.
1540
- */
1541
- depositwareTemplateId: string;
1542
- /**
1543
- * Stable, human-readable handle for the underlying depositware
1544
- * template (e.g. `tiffinbox-3-1ee95d`). Lets app code target a
1545
- * canonical template by a code-level constant without hardcoding
1546
- * an environment-specific UUID.
1547
- */
1548
- accessor: string;
1549
- name: Record<string, string>;
1550
- /**
1551
- * Display-only. Derived from `depositware_templates.deposit_base`.
1552
- * Never round-trip this value back to the server.
1553
- */
1554
- amount: number;
1555
- currency: CurrencyCode;
1556
- }
1557
- interface MenuBundle {
1558
- id: string;
1559
- menuId: string;
1560
- name: Record<string, string>;
1561
- description: Record<string, string> | null;
1562
- tags: string[];
1563
- price: number;
1564
- currency: CurrencyCode;
1565
- taxRateId: string;
1566
- isActive: boolean;
1567
- sortIndex: string | null;
1568
- deposit: MenuBundleDeposit | null;
1569
- }
1570
- interface ScheduleTimeSlot {
1571
- dayOfWeek: DayOfWeek | null;
1572
- timeSlot: {
1573
- id: string;
1574
- startTime: string;
1575
- endTime: string | null;
1576
- isActive: boolean | null;
1577
- isSchedulable: boolean | null;
1578
- };
1579
- }
1580
- interface ScheduleWithTimeSlots extends Schedule {
1581
- scheduleTimeSlots?: ScheduleTimeSlot[];
1582
- }
1583
- interface EventMenu {
1584
- id: string;
1585
- accessor: string;
1586
- name: Record<string, string>;
1587
- category: string;
1588
- }
1589
- interface EventByAccessor {
1590
- id: string;
1591
- venueId: string;
1592
- accessor: string | null;
1593
- name: Record<string, string>;
1594
- description: Record<string, string> | null;
1595
- scheduleId: string | null;
1596
- maxBookings: number | null;
1597
- maxGuests: number | null;
1598
- minPartySize: number | null;
1599
- maxPartySize: number | null;
1600
- isPublic: boolean;
1601
- isRecurring: boolean;
1602
- reservationsEnabled: boolean;
1603
- bookingOpensAtDays: number | null;
1604
- bookingClosesAtHours: number | null;
1605
- isActive: boolean;
1606
- isFeatured: boolean;
1607
- priority: number;
1608
- createdAt: string | null;
1609
- updatedAt: string | null;
1610
- schedule?: ScheduleWithTimeSlots;
1611
- menus?: EventMenu[];
1612
- posters?: EventPoster[];
1613
- /** Next occurrence date for recurring events (YYYY-MM-DD format) */
1614
- nextOccurrence?: string | null;
1615
- }
2120
+ /**
2121
+ * Wire shape for a single menu bundle, bound to the generated OpenAPI
2122
+ * schema (`FetchMenuBundlesResponse`) — never hand-rolled. The
2123
+ * authoritative contract is order3000's `fetchMenuBundles` output
2124
+ * schema, surfaced here via `openapi-typescript`. Notably `price` is
2125
+ * `{ amount, currency }`, not a bare number.
2126
+ */
2127
+ type MenuBundle = schemas['FetchMenuBundlesResponse'][number];
2128
+ type MenuBundleDeposit = NonNullable<MenuBundle['deposit']>;
2129
+ /**
2130
+ * A single event as returned by the `getByAccessor` endpoint, with
2131
+ * optional schedule / menus / posters expansions. Generated-bound to the
2132
+ * `FetchEventResponse` component (the order3000 `fetchEvent` output
2133
+ * schema is now precise) — request-shape drift is impossible.
2134
+ */
2135
+ type EventByAccessor = schemas['FetchEventResponse'];
2136
+ /**
2137
+ * The `getByAccessor` event's schedule sub-object, including the optional
2138
+ * `scheduleTimeSlots[]` expansion. Generated-bound to the non-null
2139
+ * `schedule` on `FetchEventResponse`. Kept as a distinct public SDK type
2140
+ * name (re-exported as `O3KScheduleWithTimeSlots`) for downstream
2141
+ * stability; structurally it is the by-accessor schedule shape.
2142
+ */
2143
+ type ScheduleWithTimeSlots = NonNullable<EventByAccessor['schedule']>;
2144
+ /**
2145
+ * A single regular time slot on the by-accessor event's schedule.
2146
+ * Generated-bound to the element type of the (optional)
2147
+ * `schedule.scheduleTimeSlots[]` array on `FetchEventResponse`.
2148
+ */
2149
+ type ScheduleTimeSlot = NonNullable<ScheduleWithTimeSlots['scheduleTimeSlots']>[number];
2150
+ /**
2151
+ * A menu summary attached to a by-accessor event. Generated-bound to the
2152
+ * element type of `FetchEventResponse`'s optional `menus[]` array.
2153
+ */
2154
+ type EventMenu = NonNullable<EventByAccessor['menus']>[number];
1616
2155
  interface GetEventOptions {
1617
2156
  /** Expand related resources (schedule, timeSlots, menus, posters) */
1618
2157
  expand?: ('schedule' | 'timeSlots' | 'menus' | 'posters')[];
1619
2158
  }
1620
- type AreaBookingMode = 'slot' | 'day';
1621
- type AreaBookingRequestStatus = 'pending' | 'approved' | 'rejected' | 'cancelled';
1622
- type AreaBookingRequestSource = 'website' | 'phone' | 'walk_in';
1623
- type AreaBookingStatus = 'confirmed' | 'arrived' | 'completed' | 'cancelled' | 'no_show';
1624
- interface AreaAsset {
1625
- id: string;
1626
- type: 'image' | 'video' | 'document';
1627
- tags: string[] | null;
1628
- filename: string;
1629
- contentType: string;
1630
- metadata: {
1631
- width?: number;
1632
- height?: number;
1633
- duration?: number;
1634
- } | null;
1635
- cropArea: CropArea | null;
1636
- publicUrl: string;
1637
- }
1638
- interface AreaFeature {
1639
- icon: string;
1640
- label: Record<string, string>;
1641
- description?: Record<string, string>;
1642
- }
1643
- interface Area {
1644
- id: string;
1645
- venueId: string;
1646
- accessor: string;
1647
- name: Record<string, string>;
1648
- description: Record<string, string> | null;
1649
- longDescription: Record<string, string> | null;
1650
- minCapacity: number | null;
1651
- maxCapacity: number;
1652
- currency: Currency;
1653
- /** Base price in cents (flat price per booking). Null when pricing is per-person only. */
1654
- basePrice: number | null;
1655
- /** Per-guest price in cents. Null when pricing is base-only. */
1656
- perPersonPrice: number | null;
1657
- features: AreaFeature[] | null;
1658
- bookingMode: AreaBookingMode;
1659
- assets?: AreaAsset[];
1660
- }
2159
+ type AreaBookingMode = schemas['FetchAreaResponse']['bookingMode'];
2160
+ type AreaBookingRequestStatus = schemas['SubmitAreaBookingRequestResponse']['status'];
2161
+ type AreaBookingRequestSource = schemas['SubmitAreaBookingRequestResponse']['source'];
2162
+ type AreaBookingStatus = schemas['FetchAreaBookingsResponse'][number]['status'];
2163
+ type AreaAsset = NonNullable<schemas['FetchAreaResponse']['assets']>[number];
2164
+ type AreaFeature = NonNullable<schemas['FetchAreaResponse']['features']>[number];
2165
+ type Area = schemas['FetchAreaResponse'];
1661
2166
  interface GetAreaOptions {
1662
2167
  expand?: 'assets'[];
1663
2168
  }
1664
- interface AreaAvailabilityWindow {
1665
- /** YYYY-MM-DD */
1666
- date: string;
1667
- /** HH:MM:SS, null for day-mode bookings */
1668
- startTime: string | null;
1669
- endTime: string | null;
1670
- }
1671
- interface AreaAvailabilityResponse {
1672
- from: string;
1673
- to: string;
1674
- bookingMode: AreaBookingMode;
1675
- occupied: AreaAvailabilityWindow[];
1676
- }
2169
+ type AreaAvailabilityWindow = schemas['GetAreaAvailabilityResponse']['occupied'][number];
2170
+ type AreaAvailabilityResponse = schemas['GetAreaAvailabilityResponse'];
1677
2171
  interface GetAreaAvailabilityOptions {
1678
2172
  /** YYYY-MM-DD — defaults to today */
1679
2173
  from?: string;
1680
2174
  /** YYYY-MM-DD — defaults to today + 90d */
1681
2175
  to?: string;
1682
2176
  }
1683
- interface SubmitAreaBookingRequestPayload {
1684
- /** YYYY-MM-DD */
1685
- requestedDate: string;
1686
- /** HH:MM:SS — omit for day-mode bookings */
1687
- requestedStartTime?: string;
1688
- requestedEndTime?: string;
1689
- partySize: number;
1690
- customerFirstName: string;
1691
- customerLastName: string;
1692
- customerEmail: string;
1693
- customerPhone?: string;
1694
- message?: string;
1695
- source?: AreaBookingRequestSource;
1696
- }
1697
- interface AreaBookingRequestResponse {
1698
- id: string;
1699
- venueId: string;
1700
- areaId: string;
1701
- requestedDate: string;
1702
- requestedStartTime: string | null;
1703
- requestedEndTime: string | null;
1704
- partySize: number;
1705
- customerFirstName: string;
1706
- customerLastName: string;
1707
- customerEmail: string;
1708
- customerPhone: string | null;
1709
- message: string | null;
1710
- source: AreaBookingRequestSource;
1711
- status: AreaBookingRequestStatus;
1712
- areaBookingId: string | null;
1713
- createdAt: string | null;
1714
- updatedAt: string | null;
1715
- }
1716
- type BasketStatus = 'active' | 'abandoned' | 'converted';
1717
- type Currency = 'EUR' | 'CHF';
2177
+ type SubmitAreaBookingRequestPayload = schemas['SubmitAreaBookingPayload'];
2178
+ type AreaBookingRequestResponse = schemas['SubmitAreaBookingRequestResponse'];
1718
2179
  /**
1719
- * Unit of measurement for portion tracking.
2180
+ * Canonical basket — generated-bound to the `FetchBasketResponse`
2181
+ * component (the order3000 `fetchBasket` output schema is now precise).
2182
+ * Returned by `baskets.get(sessionId)`.
1720
2183
  */
1721
- type Unit = 'grams' | 'kilograms' | 'liters' | 'milliliters' | 'pieces';
2184
+ type Basket = NonNullable<schemas['FetchBasketResponse']>;
1722
2185
  /**
1723
- * Reference to a menu item within a basket item.
1724
- *
1725
- * Each menu item can have its own portion size (quantity + unit),
1726
- * allowing for precise tracking like "100g rice, 80g curry".
2186
+ * Basket lifecycle status — generated-bound to the `status` enum on
2187
+ * `FetchBasketResponse`. No longer a bare wire `string`.
1727
2188
  */
1728
- interface BasketItemMenuItemRef {
1729
- menuItemId: string;
1730
- role: string | null;
1731
- quantity: number;
1732
- unit: Unit;
1733
- }
1734
- interface BasketItemMetadata {
1735
- type?: 'tiffinbox' | 'bowl' | 'sushi';
1736
- mode?: 2 | 3;
1737
- upsell?: {
1738
- tinOption: string;
1739
- rollOption: string;
1740
- };
1741
- price?: number;
1742
- [key: string]: unknown;
1743
- }
2189
+ type BasketStatus = Basket['status'];
2190
+ type Currency = schemas['BasketTotals']['currency'];
1744
2191
  /**
1745
- * Deposit info on a basket item — **always server-derived** from the row's
1746
- * `depositware_template_id` column. order3000 refuses any inbound deposit
1747
- * money amount; this object is outbound-only, for UI display.
2192
+ * Unit of measurement for portion tracking. Bound to the generated
2193
+ * add-to-basket request shape.
1748
2194
  */
1749
- interface BasketItemDeposit {
1750
- depositwareTemplateId: string;
1751
- name: Record<string, string>;
1752
- amount: number;
1753
- currency: Currency;
1754
- }
2195
+ type Unit = NonNullable<schemas['AddToBasketRequest']['menuItems'][number]['unit']>;
1755
2196
  /**
1756
- * A basket item represents a single physical product in the basket.
1757
- *
1758
- * Each basket item can contain multiple menu items (e.g., a TiffinBox
1759
- * with rice, curry, and sides). The itemCount in the response is the
1760
- * COUNT of basket items, not a sum of quantities.
2197
+ * A single basket item — generated-bound to the element type of
2198
+ * `FetchBasketResponse.items[]`. One physical product (e.g. a TiffinBox
2199
+ * with rice, curry, and sides); `Basket.itemCount` is the COUNT of basket
2200
+ * items, not a sum of menu-item quantities.
1761
2201
  */
1762
- interface BasketItem {
1763
- id: string;
1764
- metadata: BasketItemMetadata | null;
1765
- deposit: BasketItemDeposit | null;
1766
- menuItems: BasketItemMenuItemRef[];
1767
- }
1768
- interface Basket {
1769
- id: string;
1770
- sessionId: string;
1771
- status: BasketStatus;
1772
- currency: Currency;
1773
- items: BasketItem[];
1774
- itemCount: number;
1775
- /**
1776
- * Canonical totals computed server-side and shipped inline with the
1777
- * basket. Computed using `declaredReturns` below, so the deposit
1778
- * credit is already baked into `effectiveTotal` — clients render the
1779
- * final value on first paint without a follow-up chip-hydration round
1780
- * trip. Use `POST /baskets/:id/totals` only when the user interacts
1781
- * with the stepper to recompute with new counts.
1782
- */
1783
- totals: BasketTotals;
1784
- /**
1785
- * Server-persisted declared-return counts (from `baskets.declared_returns`).
1786
- * Reflects the participant's last chip click. Clients seed their
1787
- * local `declaredReturns` store from this at hydration time so the
1788
- * chip count + Gesamt are consistent on first paint. Only positive
1789
- * counts are present; zero entries are stripped.
1790
- */
1791
- declaredReturns: DeclaredReturn[];
1792
- expiresAt: string;
1793
- createdAt: string | null;
1794
- updatedAt: string | null;
1795
- }
2202
+ type BasketItem = Basket['items'][number];
2203
+ /**
2204
+ * Reference to a menu item within a basket item — generated-bound to the
2205
+ * element type of `BasketItem.menuItems[]`. Each ref carries its own
2206
+ * portion size (quantity + unit) for precise tracking like
2207
+ * "100g rice, 80g curry".
2208
+ */
2209
+ type BasketItemMenuItemRef = BasketItem['menuItems'][number];
2210
+ /**
2211
+ * Free-form per-basket-item metadata bag — generated-bound to the
2212
+ * (nullable) `metadata` object on `FetchBasketResponse.items[]`. The wire
2213
+ * contract types this as an open `{ [key: string]: unknown }` record;
2214
+ * thamarai narrows individual keys (`type`, `mode`, `upsell`, `price`) at
2215
+ * its own transform boundary.
2216
+ */
2217
+ type BasketItemMetadata = NonNullable<BasketItem['metadata']>;
2218
+ /**
2219
+ * Deposit info on a basket item — generated-bound to the (nullable)
2220
+ * `deposit` object on `FetchBasketResponse.items[]`. order3000 refuses
2221
+ * any inbound deposit money amount; this object is outbound-only, for UI
2222
+ * display.
2223
+ */
2224
+ type BasketItemDeposit = NonNullable<BasketItem['deposit']>;
1796
2225
  /**
1797
- * Order workflow status (matches `order_status` enum in order3000).
2226
+ * Order workflow status — generated-bound to the `status` enum on
2227
+ * `FetchLatestOrderResponse` (order3000's `order_status`). No longer a
2228
+ * bare wire `string`.
1798
2229
  */
1799
- type OrderStatus = 'pending' | 'in_progress' | 'ready' | 'completed' | 'cancelled';
2230
+ type OrderStatus = NonNullable<schemas['FetchLatestOrderResponse']>['status'];
1800
2231
  /**
1801
- * Payment workflow status (matches `payment_status` enum in order3000).
2232
+ * Payment workflow status — generated-bound to the `paymentStatus` enum
2233
+ * on `FetchLatestOrderResponse` (order3000's `payment_status`). No longer
2234
+ * a bare wire `string`.
1802
2235
  */
1803
- type PaymentStatus = 'unpaid' | 'authorized' | 'cash_pending' | 'paid' | 'refunded' | 'failed';
2236
+ type PaymentStatus = NonNullable<schemas['FetchLatestOrderResponse']>['paymentStatus'];
1804
2237
  /**
1805
2238
  * The most recent non-team order for a guest session, with the captured
1806
2239
  * basket items + totals + declared returns inlined. Returned by
1807
- * `orders.getLatest(sessionId)`. Used by thamarai to drive the
1808
- * post-placement read-only view of the ThermoBox stepper.
1809
- *
1810
- * `null` when the session has no qualifying order — fresh sessionIds
1811
- * and team-only sessions both fall through to `null`.
2240
+ * `orders.getLatest(sessionId)` — `null` when the session has no
2241
+ * qualifying order (fresh sessionIds and team-only sessions both fall
2242
+ * through to `null`). Generated-bound to the `FetchLatestOrderResponse`
2243
+ * component (the order3000 `fetchLatestOrder` output schema is now
2244
+ * precise).
1812
2245
  */
1813
- interface LatestOrder {
1814
- id: string;
1815
- /** URL-safe non-guessable id (e.g. `ORD-A3B7K2`). Nullable until backfill. */
1816
- publicId: string | null;
1817
- /** Cycling 100→999 per venue. Nullable until PaymentIntent assigns. */
1818
- quickReferenceNumber: number | null;
1819
- status: OrderStatus;
1820
- paymentStatus: PaymentStatus;
1821
- fulfillmentType: OrderFulfillmentType | null;
1822
- /** ISO timestamp of pickup / delivery. */
1823
- fulfillmentAt: string | null;
1824
- orderedAt: string;
1825
- totalAmount: number;
1826
- currency: Currency;
1827
- /** Captured basket items — same shape `Basket.items` uses. */
1828
- items: BasketItem[];
1829
- itemCount: number;
1830
- /** Captured basket totals; `effectiveTotal` already reflects the credit. */
1831
- totals: BasketTotals;
1832
- /** Declared-return counts the customer locked in at submit time. */
1833
- declaredReturns: DeclaredReturn[];
1834
- }
2246
+ type LatestOrder = NonNullable<schemas['FetchLatestOrderResponse']>;
1835
2247
  /**
1836
- * One "I'll return N of this template" declaration. Canonical deposit
1837
- * input across every order3000 endpoint — clients never specify a
1838
- * deposit money amount.
2248
+ * One "I'll return N of this template" declaration. Bound to the
2249
+ * generated basket-totals `returnable` element — clients never specify
2250
+ * a deposit money amount.
1839
2251
  */
1840
- interface DeclaredReturn {
1841
- depositwareTemplateId: string;
1842
- count: number;
1843
- }
2252
+ type DeclaredReturn = schemas['BasketTotals']['returnable'][number];
1844
2253
  /**
1845
- * Canonical basket totals (all cents). The single figure clients read
1846
- * for every displayed monetary value; replaces every local amount-times-
1847
- * count multiplication.
2254
+ * Canonical basket totals (all cents), bound to the generated
2255
+ * `BasketTotals` component. The single figure clients read for every
2256
+ * displayed monetary value.
1848
2257
  */
1849
- interface BasketTotals {
1850
- currency: Currency;
1851
- /** Food prices summed across basket items (tax-inclusive, no deposits). */
1852
- itemsTotal: number;
1853
- /** Tax portion extracted from `itemsTotal`. */
1854
- taxAmount: number;
1855
- /** Sum of deposits currently in the basket (one per returnable item). */
1856
- depositCharge: number;
1857
- /** `itemsTotal + depositCharge` — what an un-declared customer pays. */
1858
- grossTotal: number;
1859
- /** Credit owed for declared returns (bounded per-template by `returnable`). */
1860
- depositCredit: number;
1861
- /** `grossTotal − depositCredit`, clamped to zero. */
1862
- effectiveTotal: number;
1863
- /** When `depositCredit > grossTotal`, the excess is a cash refund due. */
1864
- cashRefund: number;
1865
- /** How many units of each depositware template the basket currently holds. */
1866
- returnable: DeclaredReturn[];
1867
- }
2258
+ type BasketTotals = schemas['BasketTotals'];
1868
2259
  /**
1869
2260
  * Request to add an item to the basket.
1870
2261
  *
1871
2262
  * Menu items can optionally include portion information (quantity/unit).
1872
2263
  * If not provided, defaults to the menu item's configured portion size.
2264
+ * `venueAccessor` is injected by the SDK resource layer, so it's omitted
2265
+ * from the public caller shape.
1873
2266
  */
1874
- interface AddToBasketRequest {
1875
- sessionId: string;
1876
- menuItems: Array<{
1877
- menuItemId: string;
1878
- role?: string;
1879
- quantity?: number;
1880
- unit?: Unit;
1881
- }>;
1882
- metadata?: BasketItemMetadata;
1883
- }
1884
- interface AddToBasketResponse {
1885
- basketItemId: string;
1886
- itemCount: number;
1887
- deposit: BasketItemDeposit | null;
1888
- /**
1889
- * Fresh canonical totals for the mutated basket (declaredReturns=[]).
1890
- * Clients apply this directly to their store — no extra round trip.
1891
- */
1892
- totals: BasketTotals;
1893
- }
1894
- interface RemoveFromBasketResponse {
1895
- success: boolean;
1896
- basketItemId: string;
1897
- itemCount: number;
1898
- /**
1899
- * Fresh canonical totals for the mutated basket (declaredReturns=[]).
1900
- * `null` when the basket has no items left after the removal.
1901
- */
1902
- totals: BasketTotals | null;
1903
- }
1904
- interface CreatePaymentIntentRequest {
1905
- basketId: string;
1906
- currency: Currency;
1907
- sessionId: string;
1908
- fulfillmentType?: OrderFulfillmentType;
2267
+ type AddToBasketRequest = Omit<schemas['AddToBasketRequest'], 'venueId'>;
2268
+ type AddToBasketResponse = schemas['AddToBasketResponse'];
2269
+ type RemoveFromBasketResponse = schemas['RemoveFromBasketResponse'];
2270
+ type CreatePaymentIntentRequest = Omit<schemas['CreatePaymentIntentRequest'], 'venueAccessor' | 'fulfillmentAt'> & {
1909
2271
  /**
1910
2272
  * Optional — null / omitted in team-order mode. The Lead's pickup-time
1911
2273
  * decision is stored on the team row and backfilled onto each child
1912
2274
  * order at submit time.
1913
2275
  */
1914
2276
  fulfillmentAt?: Date | string | null;
1915
- /** Customer first name (for Stripe metadata and customer record) */
1916
- customerFirstName?: string;
1917
- /** Customer last name (for Stripe metadata and customer record) */
1918
- customerLastName?: string;
1919
- /**
1920
- * Deposit containers the customer declares they will return at pickup.
1921
- * Per-template references only — order3000 refuses any inbound deposit
1922
- * money amount.
1923
- */
1924
- declaredReturns?: DeclaredReturn[];
1925
- /**
1926
- * The team order's public identifier (URL `?publicId=…`) when the
1927
- * caller is checking out as a team participant. Omitted for individual
1928
- * checkout. The server enters team-participant mode (manual-capture PI
1929
- * awaiting the Lead's submit) only when this is present AND matches the
1930
- * basket's attached team. Stale `basket.teamOrderId` without a matching
1931
- * `teamOrderPublicId` is treated as individual — the basket simply
1932
- * carries a dead pointer from an abandoned prior session.
1933
- */
1934
- teamOrderPublicId?: string;
1935
- }
1936
- interface CreatePaymentIntentResponse {
1937
- clientSecret: string;
1938
- paymentIntentId: string;
1939
- orderId: string;
1940
- }
1941
- interface CreateDeltaPaymentIntentRequest {
1942
- basketId: string;
1943
- sessionId: string;
1944
- currency: Currency;
1945
- /**
1946
- * Deposit containers the participant declares they will return at
1947
- * pickup. Used to apply deposit credit against the delta amount so the
1948
- * server's `currentTotal` matches the client's displayed effective
1949
- * total. Per-template references only.
1950
- */
1951
- declaredReturns?: DeclaredReturn[];
1952
- }
1953
- interface CreateDeltaPaymentIntentResponse {
1954
- /** null when Stripe confirmed the off-session PI without further action. */
1955
- clientSecret: string | null;
1956
- paymentIntentId: string;
1957
- orderId: string;
1958
- /** Delta amount actually charged (cents). */
1959
- amount: number;
1960
- /**
1961
- * Stripe PaymentIntent status after confirm. Typically:
1962
- * - 'requires_capture' → one-tap succeeded; capture happens at submit
1963
- * - 'requires_action' → 3DS prompt required; client completes via clientSecret
1964
- * - 'succeeded' (rare here, auto-capture would have to be set)
1965
- */
1966
- status: string;
1967
- }
1968
- interface ReduceDeltaPaymentIntentRequest {
1969
- basketId: string;
1970
- sessionId: string;
1971
- currency: Currency;
1972
- /**
1973
- * Deposit containers the participant declares they will return at pickup.
1974
- * Per-template references only; order3000 refuses any deposit money
1975
- * amount on input.
1976
- */
1977
- declaredReturns?: DeclaredReturn[];
1978
- }
1979
- interface ReduceDeltaPaymentIntentResponse {
1980
- orderId: string;
1981
- /** New authorised total (cents) after the reduction. */
1982
- paidTotal: number;
1983
- /** Amount actually released (cents). */
1984
- released: number;
1985
- }
1986
- interface ConfirmOrderRequest {
1987
- paymentIntentId: string;
1988
- }
1989
- interface ConfirmOrderResponse {
1990
- id: string;
1991
- status: string;
1992
- publicId: string | null;
1993
- /** Cycling 100→999 short reference printed on receipts and shown to staff. */
1994
- quickReferenceNumber: number | null;
1995
- /** Customer ID for the order (for client-side tracking) */
1996
- customerId?: string;
1997
- }
1998
- type SubscriptionPeriod = 'week' | 'month' | 'year';
1999
- type SubscriberStatus = 'active' | 'paused' | 'cancelled' | 'past_due' | 'trialing';
2000
- type SubscriptionCreditStatus = 'available' | 'redeemed' | 'expired';
2001
- interface MenuSubscriptionPoster {
2002
- id: string;
2003
- menuSubscriptionId: string;
2004
- storagePath: string;
2005
- /** Public URL for accessing the poster image (no expiry) */
2006
- publicUrl: string | null;
2007
- filename: string;
2008
- contentType: string;
2009
- sizeBytes: number;
2010
- sortIndex: string | null;
2011
- createdBy: string | null;
2012
- createdAt: string | null;
2013
- }
2014
- interface MenuSubscription {
2015
- id: string;
2016
- menuId: string;
2017
- accessor: string;
2018
- name: Record<string, string>;
2019
- shortName: Record<string, string> | null;
2020
- description: Record<string, string> | null;
2021
- scheduleId: string | null;
2022
- allowance: number;
2023
- billingPeriod: SubscriptionPeriod;
2024
- allowancePeriod: SubscriptionPeriod;
2025
- redeemableTagSets: string[][];
2026
- expiryInDays: number;
2027
- price: number;
2028
- currency: Currency;
2029
- isActive: boolean;
2030
- sortIndex: string | null;
2031
- posters: MenuSubscriptionPoster[];
2032
- }
2033
- interface SubscribeRequest {
2034
- email: string;
2035
- firstName?: string;
2036
- lastName?: string;
2037
- sessionId?: string;
2038
- successUrl: string;
2039
- cancelUrl: string;
2040
- }
2041
- interface SubscribeResponse {
2042
- checkoutUrl: string;
2043
- sessionId: string;
2044
- }
2045
- interface SubscriptionCredit {
2046
- id: string;
2047
- subscriberId: string;
2048
- periodStart: string;
2049
- periodEnd: string;
2050
- expiresAt: string;
2051
- status: SubscriptionCreditStatus;
2052
- redeemedAt: string | null;
2053
- orderId: string | null;
2054
- createdAt: string | null;
2055
- }
2277
+ };
2278
+ type CreatePaymentIntentResponse = schemas['CreatePaymentIntentResponse'];
2279
+ type CreateDeltaPaymentIntentRequest = Omit<schemas['CreateDeltaPaymentIntentRequest'], 'venueAccessor'>;
2280
+ type CreateDeltaPaymentIntentResponse = schemas['CreateDeltaPaymentIntentResponse'];
2281
+ type ReduceDeltaPaymentIntentRequest = Omit<schemas['ReduceDeltaPaymentIntentRequest'], 'venueAccessor'>;
2282
+ type ReduceDeltaPaymentIntentResponse = schemas['ReduceDeltaPaymentIntentResponse'];
2283
+ type ConfirmOrderRequest = Omit<schemas['ConfirmOrderRequest'], 'venueAccessor' | 'orderId'>;
2284
+ type ConfirmOrderResponse = schemas['ConfirmOrderResponse'];
2285
+ type SubscriptionPeriod = schemas['GetSubscriptionResponse']['billingPeriod'];
2286
+ /**
2287
+ * Subscriber lifecycle status — generated-bound to the `subscriber_status`
2288
+ * pgEnum, surfaced via order3000's `FetchSubscribersResponse[].status`
2289
+ * (and `fetchMenuSubscription`). openapi-typescript hoists the shared
2290
+ * enum into `components.schemas['SubscriberStatus']`.
2291
+ */
2292
+ type SubscriberStatus = schemas['SubscriberStatus'];
2293
+ type SubscriptionCreditStatus = schemas['GetSubscriptionCreditsResponse'][number]['status'];
2294
+ type MenuSubscriptionPoster = NonNullable<schemas['GetSubscriptionResponse']['posters']>[number];
2295
+ type MenuSubscription = schemas['GetSubscriptionResponse'];
2296
+ type SubscribeRequest = schemas['SubscribeToSubscriptionBody'];
2297
+ type SubscribeResponse = schemas['SubscribeToSubscriptionResponse'];
2298
+ type SubscriptionCredit = schemas['GetSubscriptionCreditsResponse'][number];
2056
2299
 
2057
2300
  declare class AreasResource extends BaseResource {
2058
2301
  constructor(tokenManager: TokenManager, baseUrl: string);
@@ -2366,34 +2609,80 @@ declare class SubscriptionsResource extends BaseResource {
2366
2609
  }
2367
2610
 
2368
2611
  /**
2369
- * Runtime enum objects that mirror order3000's Drizzle `pgEnum` shape —
2370
- * they carry an `enumValues` tuple. This lets SDK consumers write the exact
2371
- * same `z.enum(paymentMethodEnum.enumValues)` expression they would write
2372
- * against a real pgEnum, keeping one consistent pattern across the
2373
- * codebase (order3000's server imports the actual pgEnum from
2374
- * `@/drizzle/enums`; thamarai and other SDK consumers import these
2375
- * shape-compatible objects from 'order3000').
2612
+ * Generated by Kubb (https://kubb.dev/).
2613
+ * Do not edit manually.
2614
+ */
2615
+
2616
+ declare const fulfillmentTypeSchema: z.ZodEnum<{
2617
+ pickup: "pickup";
2618
+ delivery: "delivery";
2619
+ }>;
2620
+
2621
+ /**
2622
+ * Generated by Kubb (https://kubb.dev/).
2623
+ * Do not edit manually.
2624
+ */
2625
+
2626
+ declare const participantStatusSchema: z.ZodEnum<{
2627
+ placed: "placed";
2628
+ completed: "completed";
2629
+ cancelled: "cancelled";
2630
+ browsing: "browsing";
2631
+ authorized: "authorized";
2632
+ cash_pending: "cash_pending";
2633
+ }>;
2634
+
2635
+ /**
2636
+ * Generated by Kubb (https://kubb.dev/).
2637
+ * Do not edit manually.
2638
+ */
2639
+
2640
+ declare const paymentMethodSchema: z.ZodEnum<{
2641
+ card: "card";
2642
+ cash: "cash";
2643
+ voucher: "voucher";
2644
+ }>;
2645
+
2646
+ /**
2647
+ * Generated by Kubb (https://kubb.dev/).
2648
+ * Do not edit manually.
2649
+ */
2650
+
2651
+ declare const teamOrderStatusSchema: z.ZodEnum<{
2652
+ draft: "draft";
2653
+ collecting: "collecting";
2654
+ locked: "locked";
2655
+ placed: "placed";
2656
+ ready: "ready";
2657
+ completed: "completed";
2658
+ cancelled: "cancelled";
2659
+ }>;
2660
+
2661
+ /**
2662
+ * Runtime enum objects with an `enumValues` tuple — kept as a thin shim
2663
+ * over the kubb-generated `z.enum(...)` schemas so that downstream SDK
2664
+ * consumers can write `z.enum(paymentMethodEnum.enumValues)`, the same
2665
+ * idiom order3000's server uses against the real Drizzle pgEnum.
2376
2666
  *
2377
- * The tuples themselves must stay in sync with the matching pgEnum in
2378
- * `apps/order3000/src/drizzle/enums.ts`. That's a manual mirror — the SDK
2379
- * is a standalone package and can't import from the app's Drizzle schema.
2667
+ * The values themselves are now sourced from `apps/order3000/public/openapi.json`
2668
+ * via kubb — no manual mirror to maintain.
2380
2669
  */
2381
2670
  declare const paymentMethodEnum: {
2382
- enumValues: readonly ["card", "cash", "voucher"];
2671
+ enumValues: ("card" | "cash" | "voucher")[];
2383
2672
  };
2384
2673
  declare const fulfillmentTypeEnum: {
2385
- enumValues: readonly ["pickup", "delivery"];
2674
+ enumValues: ("pickup" | "delivery")[];
2386
2675
  };
2387
2676
  declare const teamOrderStatusEnum: {
2388
- enumValues: readonly ["draft", "collecting", "locked", "placed", "ready", "completed", "cancelled"];
2677
+ enumValues: ("draft" | "collecting" | "locked" | "placed" | "ready" | "completed" | "cancelled")[];
2389
2678
  };
2390
2679
  declare const participantStatusEnum: {
2391
- enumValues: readonly ["browsing", "authorized", "cash_pending", "placed", "completed", "cancelled"];
2680
+ enumValues: ("placed" | "completed" | "cancelled" | "browsing" | "authorized" | "cash_pending")[];
2392
2681
  };
2393
- type PaymentMethod = (typeof paymentMethodEnum.enumValues)[number];
2394
- type FulfillmentType = (typeof fulfillmentTypeEnum.enumValues)[number];
2395
- type TeamOrderStatus = (typeof teamOrderStatusEnum.enumValues)[number];
2396
- type ParticipantStatus = (typeof participantStatusEnum.enumValues)[number];
2682
+ type PaymentMethod = z$1.infer<typeof paymentMethodSchema>;
2683
+ type FulfillmentType = z$1.infer<typeof fulfillmentTypeSchema>;
2684
+ type TeamOrderStatus = z$1.infer<typeof teamOrderStatusSchema>;
2685
+ type ParticipantStatus = z$1.infer<typeof participantStatusSchema>;
2397
2686
  interface TeamDeliveryAddress {
2398
2687
  street: string;
2399
2688
  city: string;
@@ -2744,7 +3033,7 @@ declare class TeamOrdersResource {
2744
3033
  /**
2745
3034
  * Lead sets when the team will start eating. Client sends HH:MM; server
2746
3035
  * computes the delta against `fulfillmentAt` and stores it as
2747
- * `dining_offset_minutes` so the intent survives any later pickup change.
3036
+ * `dining_offset` (ms) so the intent survives any later pickup change.
2748
3037
  */
2749
3038
  setDiningTime(publicId: string, request: {
2750
3039
  sessionId: string;
@@ -2753,7 +3042,7 @@ declare class TeamOrdersResource {
2753
3042
  teamOrderId: string;
2754
3043
  status: TeamOrderStatus;
2755
3044
  diningTime: string;
2756
- diningOffsetMinutes: number;
3045
+ diningOffset: number;
2757
3046
  }>;
2758
3047
  /**
2759
3048
  * Toggle a participant's "settled" tick on the team Lead's
@@ -2855,7 +3144,7 @@ interface MenuItemRow {
2855
3144
  dish_id: string | null;
2856
3145
  beverage_id: string | null;
2857
3146
  price_adjustment: number;
2858
- currency: CurrencyCode;
3147
+ currency: Currency;
2859
3148
  is_active: boolean;
2860
3149
  is_featured: boolean;
2861
3150
  tags: string[] | null;
@@ -2960,19 +3249,63 @@ interface ScheduleInfo {
2960
3249
  }
2961
3250
  interface ScheduleInput {
2962
3251
  rrule?: string | null;
2963
- intervalMinutes?: number | null;
3252
+ /** Slot interval in milliseconds (codebase convention). */
3253
+ intervalDuration?: number | null;
2964
3254
  scheduleTimeSlots?: ScheduleTimeSlot[];
2965
3255
  }
2966
3256
  /**
2967
3257
  * Extract schedule information from a schedule object.
2968
3258
  * Returns time range and active days for display purposes.
2969
3259
  *
2970
- * @param schedule - Schedule object with rrule, intervalMinutes, and scheduleTimeSlots
3260
+ * @param schedule - Schedule object with rrule, intervalDuration (ms), and scheduleTimeSlots
2971
3261
  * @returns ScheduleInfo with timeRange and activeDays
2972
3262
  */
2973
3263
  declare function getScheduleInfo(schedule: ScheduleInput | null | undefined): ScheduleInfo;
2974
3264
 
2975
- interface Order3000ClientConfig {
3265
+ /**
3266
+ * Generated by Kubb (https://kubb.dev/).
3267
+ * Do not edit manually.
3268
+ */
3269
+
3270
+ declare const deliveryAddressSchema: z.ZodObject<{
3271
+ street: z.ZodString;
3272
+ city: z.ZodString;
3273
+ state: z.ZodString;
3274
+ postalCode: z.ZodString;
3275
+ country: z.ZodString;
3276
+ }, z.core.$strip>;
3277
+
3278
+ /**
3279
+ * Generated by Kubb (https://kubb.dev/).
3280
+ * Do not edit manually.
3281
+ */
3282
+ /**
3283
+ * DeliveryAddress
3284
+ */
3285
+ type DeliveryAddress = {
3286
+ /**
3287
+ * @type string
3288
+ */
3289
+ street: string;
3290
+ /**
3291
+ * @type string
3292
+ */
3293
+ city: string;
3294
+ /**
3295
+ * @type string
3296
+ */
3297
+ state: string;
3298
+ /**
3299
+ * @type string
3300
+ */
3301
+ postalCode: string;
3302
+ /**
3303
+ * @type string
3304
+ */
3305
+ country: string;
3306
+ };
3307
+
3308
+ interface O3KClientConfig {
2976
3309
  clientId: string;
2977
3310
  clientSecret: string;
2978
3311
  venueId?: string;
@@ -2990,7 +3323,7 @@ interface Order3000ClientConfig {
2990
3323
  */
2991
3324
  tokenUrl?: string;
2992
3325
  }
2993
- declare class Order3000Client {
3326
+ declare class O3KClient {
2994
3327
  areas: AreasResource;
2995
3328
  articles: ArticlesResource;
2996
3329
  baskets: BasketsResource;
@@ -3005,8 +3338,8 @@ declare class Order3000Client {
3005
3338
  realtime: RealtimeManager;
3006
3339
  private readonly baseUrl;
3007
3340
  private readonly tokenManager;
3008
- constructor(config: Order3000ClientConfig);
3341
+ constructor(config: O3KClientConfig);
3009
3342
  }
3010
3343
 
3011
- export { Order3000Client, fulfillmentTypeEnum, getScheduleInfo, participantStatusEnum, paymentMethodEnum, teamOrderStatusEnum };
3012
- export type { AddToBasketRequest, AddToBasketResponse, Area, AreaAsset, AreaAvailabilityResponse, AreaAvailabilityWindow, AreaBookingMode, AreaBookingRequestResponse, AreaBookingRequestSource, AreaBookingRequestStatus, AreaBookingStatus, AreaFeature, Article, Basket, BasketItem, BasketItemDeposit, BasketItemMenuItemRef, BasketItemMetadata, BasketStatus, BasketTotals, CancelTeamOrderResponse, ConfirmOrderRequest, ConfirmOrderResponse, CreateDeltaPaymentIntentRequest, CreateDeltaPaymentIntentResponse, CreatePaymentIntentRequest, CreatePaymentIntentResponse, CreateTeamOrderRequest, CreateTeamOrderResponse, CropArea, Currency, DayOfWeek, DeclaredReturn, Event, EventByAccessor, EventMenu, EventPoster, EventRow, ExtendDeadlineResponse as ExtendTeamOrderDeadlineResponse, FeatureImage, FetchTeamOrderResponse, GetAreaAvailabilityOptions, GetAreaOptions, GetArticleResponse, GetEventOptions, GetMenuOptions, GetVenueResponse, JoinTeamOrderRequest, JoinTeamOrderResponse, LatestOrder, ListArticlesOptions, ListArticlesResponse, ListEventsOptions, ListEventsResponse, Menu, MenuAsset, MenuBeverage, MenuBundle, MenuBundleDeposit, MenuDish, MenuItem, MenuItemRow, MenuItemType, MenuSubscription, MenuSubscriptionPoster, Order3000ClientConfig, OrderFulfillmentType, OrderStatus, PatchArticleRequest, PatchArticleResponse, PatchFeatureImageRequest, PaymentStatus, PlaceOrderRequest, Promotion, RealtimeConfig, RealtimeEvent, RealtimeSubscription, RemoveFromBasketResponse, Schedule, ScheduleInfo, ScheduleOverride, ScheduleOverrideRow, ScheduleRow, ScheduleTimeSlot, ScheduleWithTimeSlots, SubmitAreaBookingRequestPayload, SubmitTeamOrderResponse, SubscribeRequest, SubscribeResponse, SubscriberStatus, SubscriptionCredit, SubscriptionCreditStatus, SubscriptionOptions, SubscriptionPeriod, SwitchFulfillmentResponse as SwitchTeamOrderFulfillmentResponse, TeamDeliveryAddress, TeamOrderBasketItem, TeamOrderBasketItemMenuItemRef, FulfillmentType as TeamOrderFulfillmentType, TeamOrderParticipant, ParticipantStatus as TeamOrderParticipantStatus, PaymentMethod as TeamOrderPaymentMethod, TeamOrderStatus, ThresholdCheck as TeamOrderThresholdCheck, TimeSlot, Unit, UpdateDeliveryAddressResponse as UpdateTeamOrderDeliveryAddressResponse, UploadFeatureImageArgs, Venue };
3344
+ export { O3KClient, deliveryAddressSchema as O3KDeliveryAddressSchema, fulfillmentTypeEnum as O3KFulfillmentTypeEnum, getScheduleInfo as O3KGetScheduleInfo, participantStatusEnum as O3KParticipantStatusEnum, paymentMethodEnum as O3KPaymentMethodEnum, teamOrderStatusEnum as O3KTeamOrderStatusEnum };
3345
+ export type { AddToBasketRequest as O3KAddToBasketRequest, AddToBasketResponse as O3KAddToBasketResponse, Area as O3KArea, AreaAsset as O3KAreaAsset, AreaAvailabilityResponse as O3KAreaAvailabilityResponse, AreaAvailabilityWindow as O3KAreaAvailabilityWindow, AreaBookingMode as O3KAreaBookingMode, AreaBookingRequestResponse as O3KAreaBookingRequestResponse, AreaBookingRequestSource as O3KAreaBookingRequestSource, AreaBookingRequestStatus as O3KAreaBookingRequestStatus, AreaBookingStatus as O3KAreaBookingStatus, AreaFeature as O3KAreaFeature, Article as O3KArticle, Basket as O3KBasket, BasketItem as O3KBasketItem, BasketItemDeposit as O3KBasketItemDeposit, BasketItemMenuItemRef as O3KBasketItemMenuItemRef, BasketItemMetadata as O3KBasketItemMetadata, BasketStatus as O3KBasketStatus, BasketTotals as O3KBasketTotals, CancelTeamOrderResponse as O3KCancelTeamOrderResponse, O3KClientConfig, ConfirmOrderRequest as O3KConfirmOrderRequest, ConfirmOrderResponse as O3KConfirmOrderResponse, CreateDeltaPaymentIntentRequest as O3KCreateDeltaPaymentIntentRequest, CreateDeltaPaymentIntentResponse as O3KCreateDeltaPaymentIntentResponse, CreatePaymentIntentRequest as O3KCreatePaymentIntentRequest, CreatePaymentIntentResponse as O3KCreatePaymentIntentResponse, CreateTeamOrderRequest as O3KCreateTeamOrderRequest, CreateTeamOrderResponse as O3KCreateTeamOrderResponse, CropArea as O3KCropArea, Currency as O3KCurrency, DayOfWeek as O3KDayOfWeek, DeclaredReturn as O3KDeclaredReturn, DeliveryAddress as O3KDeliveryAddress, Event as O3KEvent, EventByAccessor as O3KEventByAccessor, EventMenu as O3KEventMenu, EventPoster as O3KEventPoster, EventRow as O3KEventRow, ExtendDeadlineResponse as O3KExtendTeamOrderDeadlineResponse, FeatureImage as O3KFeatureImage, FetchTeamOrderResponse as O3KFetchTeamOrderResponse, GetAreaAvailabilityOptions as O3KGetAreaAvailabilityOptions, GetAreaOptions as O3KGetAreaOptions, GetArticleResponse as O3KGetArticleResponse, GetEventOptions as O3KGetEventOptions, GetMenuOptions as O3KGetMenuOptions, GetVenueResponse as O3KGetVenueResponse, JoinTeamOrderRequest as O3KJoinTeamOrderRequest, JoinTeamOrderResponse as O3KJoinTeamOrderResponse, LatestOrder as O3KLatestOrder, ListArticlesOptions as O3KListArticlesOptions, ListArticlesResponse as O3KListArticlesResponse, ListEventsOptions as O3KListEventsOptions, ListEventsResponse as O3KListEventsResponse, Menu as O3KMenu, MenuAsset as O3KMenuAsset, MenuBeverage as O3KMenuBeverage, MenuBundle as O3KMenuBundle, MenuBundleDeposit as O3KMenuBundleDeposit, MenuDish as O3KMenuDish, MenuItem as O3KMenuItem, MenuItemRow as O3KMenuItemRow, MenuItemType as O3KMenuItemType, MenuSubscription as O3KMenuSubscription, MenuSubscriptionPoster as O3KMenuSubscriptionPoster, OrderFulfillmentType as O3KOrderFulfillmentType, OrderStatus as O3KOrderStatus, PatchArticleRequest as O3KPatchArticleRequest, PatchArticleResponse as O3KPatchArticleResponse, PatchFeatureImageRequest as O3KPatchFeatureImageRequest, PaymentStatus as O3KPaymentStatus, PlaceOrderRequest as O3KPlaceOrderRequest, Promotion as O3KPromotion, RealtimeConfig as O3KRealtimeConfig, RealtimeEvent as O3KRealtimeEvent, RealtimeSubscription as O3KRealtimeSubscription, RemoveFromBasketResponse as O3KRemoveFromBasketResponse, Schedule as O3KSchedule, ScheduleInfo as O3KScheduleInfo, ScheduleOverride as O3KScheduleOverride, ScheduleOverrideRow as O3KScheduleOverrideRow, ScheduleRow as O3KScheduleRow, ScheduleTimeSlot as O3KScheduleTimeSlot, ScheduleWithTimeSlots as O3KScheduleWithTimeSlots, SubmitAreaBookingRequestPayload as O3KSubmitAreaBookingRequestPayload, SubmitTeamOrderResponse as O3KSubmitTeamOrderResponse, SubscribeRequest as O3KSubscribeRequest, SubscribeResponse as O3KSubscribeResponse, SubscriberStatus as O3KSubscriberStatus, SubscriptionCredit as O3KSubscriptionCredit, SubscriptionCreditStatus as O3KSubscriptionCreditStatus, SubscriptionOptions as O3KSubscriptionOptions, SubscriptionPeriod as O3KSubscriptionPeriod, SwitchFulfillmentResponse as O3KSwitchTeamOrderFulfillmentResponse, TeamDeliveryAddress as O3KTeamDeliveryAddress, TeamOrderBasketItem as O3KTeamOrderBasketItem, TeamOrderBasketItemMenuItemRef as O3KTeamOrderBasketItemMenuItemRef, FulfillmentType as O3KTeamOrderFulfillmentType, TeamOrderParticipant as O3KTeamOrderParticipant, ParticipantStatus as O3KTeamOrderParticipantStatus, PaymentMethod as O3KTeamOrderPaymentMethod, TeamOrderStatus as O3KTeamOrderStatus, ThresholdCheck as O3KTeamOrderThresholdCheck, TimeSlot as O3KTimeSlot, Unit as O3KUnit, UpdateDeliveryAddressResponse as O3KUpdateTeamOrderDeliveryAddressResponse, UploadFeatureImageArgs as O3KUploadFeatureImageArgs, Venue as O3KVenue };