order3000 0.25.0 → 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,3 @@
1
- import { CurrencyCode } from '@kolaveri/money';
2
1
  import { z as z$1 } from 'zod';
3
2
  import { z } from 'zod/v4';
4
3
  import { RealtimePostgresChangesPayload, RealtimeChannel, SupabaseClient } from '@supabase/supabase-js';
@@ -66,7 +65,7 @@ interface components {
66
65
  schemas: {
67
66
  /**
68
67
  * Area
69
- * @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.
70
69
  */
71
70
  Area: {
72
71
  id: string;
@@ -83,8 +82,7 @@ interface components {
83
82
  } | null;
84
83
  minCapacity: number | null;
85
84
  maxCapacity: number;
86
- /** @enum {string} */
87
- currency: "EUR" | "CHF";
85
+ currency: components["schemas"]["Currency"];
88
86
  basePrice: number | null;
89
87
  perPersonPrice: number | null;
90
88
  features: {
@@ -96,12 +94,13 @@ interface components {
96
94
  [key: string]: string;
97
95
  };
98
96
  }[] | null;
99
- /** @enum {string} */
100
- bookingMode: "slot" | "day";
97
+ bookingMode: components["schemas"]["AreaBookingMode"];
98
+ isBookable?: boolean;
99
+ isPublic?: boolean;
100
+ isActive?: boolean;
101
101
  assets?: {
102
102
  id: string;
103
- /** @enum {string} */
104
- type: "image" | "video" | "document";
103
+ type: components["schemas"]["AssetType"];
105
104
  tags: string[] | null;
106
105
  filename: string;
107
106
  contentType: string;
@@ -120,13 +119,13 @@ interface components {
120
119
  publicUrl: string;
121
120
  }[];
122
121
  };
123
- /** ListAreasResponse */
124
- ListAreasResponse: components["schemas"]["Area"][];
122
+ /** FetchAreasResponse */
123
+ FetchAreasResponse: components["schemas"]["Area"][];
125
124
  /**
126
- * GetAreaResponse
127
- * @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.
128
127
  */
129
- GetAreaResponse: {
128
+ FetchAreaResponse: {
130
129
  id: string;
131
130
  venueId: string;
132
131
  accessor: string;
@@ -141,8 +140,7 @@ interface components {
141
140
  } | null;
142
141
  minCapacity: number | null;
143
142
  maxCapacity: number;
144
- /** @enum {string} */
145
- currency: "EUR" | "CHF";
143
+ currency: components["schemas"]["Currency"];
146
144
  basePrice: number | null;
147
145
  perPersonPrice: number | null;
148
146
  features: {
@@ -154,12 +152,13 @@ interface components {
154
152
  [key: string]: string;
155
153
  };
156
154
  }[] | null;
157
- /** @enum {string} */
158
- bookingMode: "slot" | "day";
155
+ bookingMode: components["schemas"]["AreaBookingMode"];
156
+ isBookable?: boolean;
157
+ isPublic?: boolean;
158
+ isActive?: boolean;
159
159
  assets?: {
160
160
  id: string;
161
- /** @enum {string} */
162
- type: "image" | "video" | "document";
161
+ type: components["schemas"]["AssetType"];
163
162
  tags: string[] | null;
164
163
  filename: string;
165
164
  contentType: string;
@@ -182,16 +181,30 @@ interface components {
182
181
  GetAreaAvailabilityResponse: {
183
182
  from: string;
184
183
  to: string;
185
- /** @enum {string} */
186
- bookingMode: "slot" | "day";
184
+ bookingMode: components["schemas"]["AreaBookingMode"];
187
185
  occupied: {
188
186
  date: string;
189
187
  startTime: string | null;
190
188
  endTime: string | null;
191
189
  }[];
192
190
  };
193
- /** SubmitAreaBookingRequest */
194
- 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: {
195
208
  requestedDate: string;
196
209
  requestedStartTime?: string;
197
210
  requestedEndTime?: string;
@@ -202,11 +215,10 @@ interface components {
202
215
  customerEmail: string;
203
216
  customerPhone?: string;
204
217
  message?: string;
205
- /** @enum {string} */
206
- source?: "website" | "phone" | "walk_in";
218
+ source?: components["schemas"]["AreaBookingRequestSource"];
207
219
  };
208
- /** SubmitAreaBookingResponse */
209
- SubmitAreaBookingResponse: {
220
+ /** SubmitAreaBookingRequestResponse */
221
+ SubmitAreaBookingRequestResponse: {
210
222
  id: string;
211
223
  venueId: string;
212
224
  areaId: string;
@@ -219,10 +231,8 @@ interface components {
219
231
  customerEmail: string;
220
232
  customerPhone: string | null;
221
233
  message: string | null;
222
- /** @enum {string} */
223
- source: "website" | "phone" | "walk_in";
224
- /** @enum {string} */
225
- status: "pending" | "approved" | "rejected" | "cancelled";
234
+ source: components["schemas"]["AreaBookingRequestSource"];
235
+ status: components["schemas"]["AreaBookingRequestStatus"];
226
236
  areaBookingId: string | null;
227
237
  createdAt: string | null;
228
238
  updatedAt: string | null;
@@ -295,8 +305,7 @@ interface components {
295
305
  isActive: boolean;
296
306
  isFeatured: boolean;
297
307
  priority: number;
298
- /** @enum {string} */
299
- status: "draft" | "published";
308
+ status: components["schemas"]["ArticleStatus"];
300
309
  publishedAt: string | null;
301
310
  createdAt: string | null;
302
311
  updatedAt: string | null;
@@ -340,8 +349,7 @@ interface components {
340
349
  isActive: boolean;
341
350
  isFeatured: boolean;
342
351
  priority: number;
343
- /** @enum {string} */
344
- status: "draft" | "published";
352
+ status: components["schemas"]["ArticleStatus"];
345
353
  publishedAt: string | null;
346
354
  createdAt: string | null;
347
355
  updatedAt: string | null;
@@ -409,24 +417,23 @@ interface components {
409
417
  isActive: boolean;
410
418
  isFeatured: boolean;
411
419
  priority: number;
412
- /** @enum {string} */
413
- status: "draft" | "published";
420
+ status: components["schemas"]["ArticleStatus"];
414
421
  publishedAt: string | null;
415
422
  createdAt: string | null;
416
423
  updatedAt: string | null;
417
424
  featureImage: components["schemas"]["FeatureImage"] | null;
418
425
  ogImage?: components["schemas"]["OgImage"] | null;
419
426
  };
420
- /** UploadFeatureImageRequest */
421
- UploadFeatureImageRequest: {
427
+ /** SetArticleFeatureImageUploadBody */
428
+ SetArticleFeatureImageUploadBody: {
422
429
  /** @description Image file (multipart/form-data field) */
423
- file: unknown;
430
+ file: string;
424
431
  };
425
432
  /**
426
- * PatchFeatureImageRequest
433
+ * PatchArticleFeatureImageBody
427
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`.
428
435
  */
429
- PatchFeatureImageRequest: {
436
+ PatchArticleFeatureImageBody: {
430
437
  caption?: {
431
438
  [key: string]: unknown;
432
439
  };
@@ -436,8 +443,7 @@ interface components {
436
443
  };
437
444
  /** BasketTotals */
438
445
  BasketTotals: {
439
- /** @enum {string} */
440
- currency: "EUR" | "CHF";
446
+ currency: components["schemas"]["Currency"];
441
447
  itemsTotal: number;
442
448
  taxAmount: number;
443
449
  depositCharge: number;
@@ -450,6 +456,44 @@ interface components {
450
456
  count: number;
451
457
  }[];
452
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
+ };
453
497
  /**
454
498
  * AddToBasketRequest
455
499
  * @description Add an item to the shopping basket
@@ -462,8 +506,7 @@ interface components {
462
506
  menuItemId: string;
463
507
  role?: string;
464
508
  quantity?: number;
465
- /** @enum {string} */
466
- unit?: "grams" | "kilograms" | "liters" | "milliliters" | "pieces";
509
+ unit?: components["schemas"]["Unit"];
467
510
  }[];
468
511
  metadata?: {
469
512
  [key: string]: unknown;
@@ -480,8 +523,7 @@ interface components {
480
523
  [key: string]: string;
481
524
  };
482
525
  amount: number;
483
- /** @enum {string} */
484
- currency: "EUR" | "CHF";
526
+ currency: components["schemas"]["Currency"];
485
527
  } | null;
486
528
  totals: components["schemas"]["BasketTotals"];
487
529
  };
@@ -504,8 +546,7 @@ interface components {
504
546
  };
505
547
  /** GetBasketTotalsResponse */
506
548
  GetBasketTotalsResponse: {
507
- /** @enum {string} */
508
- currency: "EUR" | "CHF";
549
+ currency: components["schemas"]["Currency"];
509
550
  itemsTotal: number;
510
551
  taxAmount: number;
511
552
  depositCharge: number;
@@ -518,6 +559,14 @@ interface components {
518
559
  count: number;
519
560
  }[];
520
561
  };
562
+ /** AbandonBasketRequest */
563
+ AbandonBasketRequest: {
564
+ sessionId: string;
565
+ };
566
+ /** AbandonBasketResponse */
567
+ AbandonBasketResponse: {
568
+ abandonedCount: number;
569
+ };
521
570
  /** SetBasketDeclaredReturnsRequest */
522
571
  SetBasketDeclaredReturnsRequest: {
523
572
  venueAccessor: string;
@@ -537,12 +586,191 @@ interface components {
537
586
  }[];
538
587
  };
539
588
  /** FetchEventsResponse */
540
- FetchEventsResponse: ({
589
+ FetchEventsResponse: {
541
590
  id: string;
542
591
  venueId: string;
543
- } & {
544
- [key: string]: unknown;
545
- })[];
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
+ }[];
546
774
  /**
547
775
  * FetchEventResponse
548
776
  * @description Event details. Nested objects (schedule, timeSlots, menus, posters, nextOccurrence) pass through; their shape follows the SDK Event interface.
@@ -554,8 +782,72 @@ interface components {
554
782
  name: {
555
783
  [key: string]: string;
556
784
  };
557
- } & {
558
- [key: string]: unknown;
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
+ }[];
559
851
  };
560
852
  /**
561
853
  * CreateEventRequest
@@ -592,8 +884,7 @@ interface components {
592
884
  endTime: string;
593
885
  lastSeatingTime?: string | null;
594
886
  }[];
595
- /** @enum {string|null} */
596
- slotMode?: "interval" | "duration" | null;
887
+ slotMode?: components["schemas"]["SlotMode"];
597
888
  intervalDuration?: number | null;
598
889
  duration?: number | null;
599
890
  } | null;
@@ -635,67 +926,189 @@ interface components {
635
926
  };
636
927
  /**
637
928
  * FetchMenuResponse
638
- * @description Menu details. Nested arrays (items, assets, bundles, schedule, etc.) pass through; their shape follows the SDK Menu interface.
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.
639
930
  */
640
931
  FetchMenuResponse: {
641
932
  id: string;
642
- venueId: string;
933
+ name: {
934
+ [key: string]: string;
935
+ };
643
936
  accessor: string;
644
- name: (string | number | boolean | (null)) | {
645
- [key: string]: unknown;
646
- } | unknown[];
647
- description: ((string | number | boolean | (null)) | {
648
- [key: string]: unknown;
649
- } | unknown[]) | null;
650
- metadata: ((string | number | boolean | (null)) | {
651
- [key: string]: unknown;
652
- } | unknown[]) | null;
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;
653
949
  sortIndex: string | null;
654
- deliveryThresholdAmount: number | null;
655
- deliveryThresholdQuantity: number | null;
656
- createdAt: unknown;
657
950
  updatedAt: unknown;
658
- createdBy: string | null;
659
951
  updatedBy: string | null;
660
- assets?: {
952
+ createdAt: unknown;
953
+ createdBy: string | null;
954
+ venueId: string;
955
+ deliveryThresholdAmount: number | null;
956
+ deliveryThresholdQuantity: number | null;
957
+ assets: {
661
958
  id: string;
662
- /** @enum {string} */
663
- type: "image" | "video" | "document";
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;
664
972
  tags: string[] | null;
665
973
  bucket: string;
666
974
  storagePath: string;
667
975
  filename: string;
668
976
  contentType: string;
669
977
  sizeBytes: number;
670
- caption: (string | number | boolean | (null)) | {
978
+ caption: {
671
979
  [key: string]: unknown;
672
- } | unknown[];
673
- alt: (string | number | boolean | (null)) | {
674
- [key: string]: unknown;
675
- } | unknown[];
676
- metadata: ((string | number | boolean | (null)) | {
677
- [key: string]: unknown;
678
- } | unknown[]) | null;
679
- cropArea: ((string | number | boolean | (null)) | {
980
+ };
981
+ alt: {
680
982
  [key: string]: unknown;
681
- } | unknown[]) | null;
682
- isActive: boolean;
683
- sortIndex: string | null;
684
- createdAt: unknown;
685
- updatedAt: unknown;
686
- createdBy: string | null;
687
- updatedBy: string | null;
688
- venueId: string | null;
689
- publicUrl: string | null;
983
+ };
984
+ cropArea: {
985
+ x: number;
986
+ y: number;
987
+ width: number;
988
+ height: number;
989
+ } | null;
990
+ publicUrl: string;
690
991
  }[];
691
992
  items?: {
692
- [key: string]: unknown;
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;
693
1108
  }[];
694
- } & {
695
- [key: string]: unknown;
696
1109
  };
697
1110
  /** FetchMenuBundlesResponse */
698
- FetchMenuBundlesResponse: ({
1111
+ FetchMenuBundlesResponse: {
699
1112
  id: string;
700
1113
  menuId: string;
701
1114
  name: {
@@ -710,11 +1123,9 @@ interface components {
710
1123
  tags: string[];
711
1124
  price: {
712
1125
  amount: number;
713
- /** @enum {string} */
714
- currency: "EUR" | "CHF";
1126
+ currency: components["schemas"]["Currency"];
715
1127
  };
716
- /** @enum {string} */
717
- currency: "EUR" | "CHF";
1128
+ currency: components["schemas"]["Currency"];
718
1129
  taxRateId: string;
719
1130
  isActive: boolean;
720
1131
  sortIndex: string | null;
@@ -725,15 +1136,14 @@ interface components {
725
1136
  };
726
1137
  } | null;
727
1138
  deposit: {
1139
+ depositwareTemplateId: string;
1140
+ accessor: string;
728
1141
  amount: number;
729
- /** @enum {string} */
730
- currency: "EUR" | "CHF";
1142
+ currency: components["schemas"]["Currency"];
731
1143
  } | null;
732
- } & {
733
- [key: string]: unknown;
734
- })[];
1144
+ }[];
735
1145
  /** FetchMenuSubscriptionsResponse */
736
- FetchMenuSubscriptionsResponse: ({
1146
+ FetchMenuSubscriptionsResponse: {
737
1147
  id: string;
738
1148
  menuId: string;
739
1149
  accessor: string;
@@ -748,35 +1158,30 @@ interface components {
748
1158
  } | null;
749
1159
  scheduleId: string | null;
750
1160
  allowance: number;
751
- /** @enum {string} */
752
- billingPeriod: "week" | "month" | "year";
753
- /** @enum {string} */
754
- allowancePeriod: "week" | "month" | "year";
1161
+ billingPeriod: components["schemas"]["SubscriptionPeriod"];
1162
+ allowancePeriod: components["schemas"]["SubscriptionPeriod"];
755
1163
  expiryInDays: number;
756
1164
  price: number;
757
- /** @enum {string} */
758
- currency: "EUR" | "CHF";
1165
+ currency: components["schemas"]["Currency"];
759
1166
  stripeProductId: string | null;
760
1167
  stripePriceId: string | null;
761
1168
  isActive: boolean;
762
1169
  sortIndex: string | null;
763
1170
  subscriberCount: number;
764
1171
  redeemableTagSets: string[][];
765
- posters?: {
1172
+ posters: {
766
1173
  id: string;
767
1174
  menuSubscriptionId: string;
768
1175
  storagePath: string;
769
- publicUrl: string | null;
1176
+ publicUrl: string;
770
1177
  filename: string;
771
1178
  contentType: string;
772
- sizeBytes: number | null;
1179
+ sizeBytes: number;
773
1180
  sortIndex: string | null;
774
1181
  createdBy: string | null;
775
1182
  createdAt: string | null;
776
1183
  }[];
777
- } & {
778
- [key: string]: unknown;
779
- })[];
1184
+ }[];
780
1185
  /**
781
1186
  * PlaceOrderRequest
782
1187
  * @description Place a new order for a specific venue
@@ -804,8 +1209,7 @@ interface components {
804
1209
  publicId: string | null;
805
1210
  orderId: string;
806
1211
  quickReferenceNumber: number | null;
807
- /** @enum {string} */
808
- currency: "EUR" | "CHF";
1212
+ currency: components["schemas"]["Currency"];
809
1213
  };
810
1214
  /** ConfirmOrderRequest */
811
1215
  ConfirmOrderRequest: {
@@ -821,12 +1225,52 @@ interface components {
821
1225
  quickReferenceNumber: number | null;
822
1226
  customerId?: string;
823
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;
1239
+ totalAmount: number;
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
+ }[];
1268
+ };
824
1269
  /** CreatePaymentIntentRequest */
825
1270
  CreatePaymentIntentRequest: {
826
1271
  venueAccessor: string;
827
1272
  basketId: string;
828
- /** @enum {string} */
829
- currency: "EUR" | "CHF";
1273
+ currency: components["schemas"]["Currency"];
830
1274
  sessionId: string;
831
1275
  fulfillmentType: components["schemas"]["FulfillmentType"];
832
1276
  /** Format: date-time */
@@ -850,8 +1294,7 @@ interface components {
850
1294
  venueAccessor: string;
851
1295
  basketId: string;
852
1296
  sessionId: string;
853
- /** @enum {string} */
854
- currency: "EUR" | "CHF";
1297
+ currency: components["schemas"]["Currency"];
855
1298
  declaredReturns?: {
856
1299
  depositwareTemplateId: string;
857
1300
  count: number;
@@ -871,8 +1314,7 @@ interface components {
871
1314
  venueAccessor: string;
872
1315
  basketId: string;
873
1316
  sessionId: string;
874
- /** @enum {string} */
875
- currency: "EUR" | "CHF";
1317
+ currency: components["schemas"]["Currency"];
876
1318
  declaredReturns?: {
877
1319
  depositwareTemplateId: string;
878
1320
  count: number;
@@ -920,16 +1362,8 @@ interface components {
920
1362
  customerEmail?: string | null;
921
1363
  /** @description Phone number for reservation confirmations and updates. Include country code for international numbers. */
922
1364
  customerPhone?: string | null;
923
- /**
924
- * @description Preferred contact method. Defaults to `email` when omitted.
925
- * @enum {string}
926
- */
927
- contactPreference?: "email" | "phone" | "sms" | "none";
928
- /**
929
- * @description Origin of the reservation request. Defaults to `website` when omitted.
930
- * @enum {string}
931
- */
932
- source?: "website" | "phone" | "walk_in";
1365
+ contactPreference?: components["schemas"]["ContactPreference"];
1366
+ source?: components["schemas"]["AreaBookingRequestSource"];
933
1367
  /** @description Any dietary restrictions, allergies, or special occasions (max 500 characters) */
934
1368
  specialRequests?: string | null;
935
1369
  /** @description Preferred seating area or table type (e.g., "window seat", "quiet area", "patio") */
@@ -977,16 +1411,8 @@ interface components {
977
1411
  customerEmail: string | null;
978
1412
  /** @description Customer phone number */
979
1413
  customerPhone: string | null;
980
- /**
981
- * @description Preferred contact method
982
- * @enum {string}
983
- */
984
- contactPreference: "email" | "phone" | "sms" | "none";
985
- /**
986
- * @description Current status of the reservation
987
- * @enum {string}
988
- */
989
- status: "pending" | "confirmed" | "arrived" | "seated" | "completed" | "cancelled" | "no_show";
1414
+ contactPreference: components["schemas"]["ContactPreference"];
1415
+ status: components["schemas"]["ReservationStatus"];
990
1416
  /** @description 6-character confirmation code for the reservation */
991
1417
  confirmationCode: string | null;
992
1418
  /** @description When the reservation was confirmed */
@@ -999,18 +1425,10 @@ interface components {
999
1425
  completedAt: unknown;
1000
1426
  /** @description When the reservation was cancelled */
1001
1427
  cancelledAt: unknown;
1002
- /**
1003
- * @description Who initiated the cancellation
1004
- * @enum {string|null}
1005
- */
1006
- cancellationReason: "customer_request" | "restaurant_request" | null;
1428
+ cancellationReason: components["schemas"]["CancellationReason"];
1007
1429
  /** @description Additional cancellation details */
1008
1430
  cancellationNote: string | null;
1009
- /**
1010
- * @description Origin of the reservation
1011
- * @enum {string}
1012
- */
1013
- source: "website" | "phone" | "walk_in";
1431
+ source: components["schemas"]["AreaBookingRequestSource"];
1014
1432
  /** @description Any special requirements or notes */
1015
1433
  specialRequests: string | null;
1016
1434
  /** @description Preferred seating location */
@@ -1040,15 +1458,12 @@ interface components {
1040
1458
  } | null;
1041
1459
  scheduleId: string | null;
1042
1460
  allowance: number;
1043
- /** @enum {string} */
1044
- billingPeriod: "week" | "month" | "year";
1045
- /** @enum {string} */
1046
- allowancePeriod: "week" | "month" | "year";
1461
+ billingPeriod: components["schemas"]["SubscriptionPeriod"];
1462
+ allowancePeriod: components["schemas"]["SubscriptionPeriod"];
1047
1463
  redeemableTagSets: string[][];
1048
1464
  expiryInDays: number | null;
1049
1465
  price: number;
1050
- /** @enum {string} */
1051
- currency: "EUR" | "CHF";
1466
+ currency: components["schemas"]["Currency"];
1052
1467
  isActive: boolean;
1053
1468
  sortIndex: string | null;
1054
1469
  posters: {
@@ -1065,8 +1480,8 @@ interface components {
1065
1480
  createdAt: string | null;
1066
1481
  }[];
1067
1482
  };
1068
- /** SubscribeRequest */
1069
- SubscribeRequest: {
1483
+ /** SubscribeToSubscriptionBody */
1484
+ SubscribeToSubscriptionBody: {
1070
1485
  /** Format: email */
1071
1486
  email: string;
1072
1487
  firstName?: string;
@@ -1077,8 +1492,8 @@ interface components {
1077
1492
  /** Format: uri */
1078
1493
  cancelUrl: string;
1079
1494
  };
1080
- /** SubscribeResponse */
1081
- SubscribeResponse: {
1495
+ /** SubscribeToSubscriptionResponse */
1496
+ SubscribeToSubscriptionResponse: {
1082
1497
  /** Format: uri */
1083
1498
  checkoutUrl: string | null;
1084
1499
  sessionId: string;
@@ -1099,8 +1514,7 @@ interface components {
1099
1514
  periodStart: string;
1100
1515
  periodEnd: string;
1101
1516
  expiresAt: string | null;
1102
- /** @enum {string} */
1103
- status: "available" | "redeemed" | "expired";
1517
+ status: components["schemas"]["SubscriptionCreditStatus"];
1104
1518
  redeemedAt: string | null;
1105
1519
  orderId: string | null;
1106
1520
  createdAt: string | null;
@@ -1193,13 +1607,14 @@ interface components {
1193
1607
  joinedAt: string;
1194
1608
  items: {
1195
1609
  id: string;
1196
- metadata: unknown;
1610
+ metadata: {
1611
+ [key: string]: unknown;
1612
+ } | null;
1197
1613
  menuItems: {
1198
1614
  menuItemId: string;
1199
1615
  role: string | null;
1200
1616
  quantity: number;
1201
- /** @enum {string} */
1202
- unit: "grams" | "kilograms" | "liters" | "milliliters" | "pieces";
1617
+ unit: components["schemas"]["Unit"];
1203
1618
  }[];
1204
1619
  isPaid: boolean;
1205
1620
  }[];
@@ -1341,6 +1756,40 @@ interface components {
1341
1756
  diningTime: string;
1342
1757
  diningOffset: number;
1343
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;
1792
+ };
1344
1793
  /** SwitchFulfillmentTeamOrderRequest */
1345
1794
  SwitchFulfillmentTeamOrderRequest: {
1346
1795
  publicId: string;
@@ -1386,13 +1835,119 @@ interface components {
1386
1835
  updatedAt: unknown;
1387
1836
  };
1388
1837
  /** @enum {string} */
1389
- PaymentMethod: "card" | "cash" | "voucher";
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";
1390
1885
  /** @enum {string} */
1391
1886
  FulfillmentType: "pickup" | "delivery";
1392
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} */
1393
1904
  TeamOrderStatus: "draft" | "collecting" | "locked" | "placed" | "ready" | "completed" | "cancelled";
1394
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} */
1395
1946
  ParticipantStatus: "browsing" | "authorized" | "cash_pending" | "placed" | "completed" | "cancelled";
1947
+ /** @enum {string} */
1948
+ EnumTrue: "true";
1949
+ /** @enum {string} */
1950
+ EnumFalse: "false";
1396
1951
  };
1397
1952
  responses: never;
1398
1953
  parameters: never;
@@ -1410,12 +1965,12 @@ type GetArticleResponse = schemas['FetchArticleResponse'];
1410
1965
  type PatchArticleRequest = schemas['EditArticleRequest'];
1411
1966
  type PatchArticleResponse = schemas['EditArticleResponse'];
1412
1967
  type FeatureImage = schemas['FeatureImage'];
1413
- type PatchFeatureImageRequest = schemas['PatchFeatureImageRequest'];
1968
+ type PatchFeatureImageRequest = schemas['PatchArticleFeatureImageBody'];
1414
1969
  /**
1415
1970
  * Args for `client.articles.uploadFeatureImage()`. The SDK accepts a
1416
1971
  * `Buffer` or `Uint8Array` payload + filename + content-type — it
1417
1972
  * builds the FormData internally so callers don't have to know about
1418
- * multipart wire encoding.
1973
+ * multipart wire encoding. Client ergonomics, no wire equivalent.
1419
1974
  */
1420
1975
  interface UploadFeatureImageArgs {
1421
1976
  data: Buffer | Uint8Array;
@@ -1433,13 +1988,12 @@ interface ListArticlesOptions {
1433
1988
  type Venue = schemas['GetVenueResponse'];
1434
1989
  type GetVenueResponse = schemas['GetVenueResponse'];
1435
1990
  /**
1436
- * Order fulfillment type - matches order_fulfillment_type enum in order3000 database.
1437
- * 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.
1438
1994
  */
1439
- type OrderFulfillmentType = 'pickup' | 'delivery';
1440
- type PlaceOrderRequest = Omit<schemas['PlaceOrderRequest'], 'taxAmount' | 'totalAmount' | 'fulfillmentAt'> & {
1441
- /** Fulfillment type for the order (pickup or delivery) */
1442
- fulfillmentType?: OrderFulfillmentType;
1995
+ type OrderFulfillmentType = schemas['FulfillmentType'];
1996
+ type PlaceOrderRequest = Omit<schemas['PlaceOrderRequest'], 'fulfillmentAt'> & {
1443
1997
  /**
1444
1998
  * When the order should be fulfilled (ISO 8601 datetime or Date).
1445
1999
  * Null / omitted in team-order mode — the Lead's pickup-time decision
@@ -1447,127 +2001,52 @@ type PlaceOrderRequest = Omit<schemas['PlaceOrderRequest'], 'taxAmount' | 'total
1447
2001
  * submit time.
1448
2002
  */
1449
2003
  fulfillmentAt?: Date | string | null;
1450
- /** Guest session identifier for customer lookup */
1451
- sessionId?: string;
1452
- /** Customer first name (for cash orders) */
1453
- customerFirstName?: string;
1454
- /** Customer last name (for cash orders) */
1455
- customerLastName?: string;
1456
- /** Customer email address (for cash orders) */
1457
- customerEmail?: string;
1458
- /**
1459
- * Deposit containers the customer declares they will return at pickup.
1460
- * Per-template references only — order3000 refuses any inbound deposit
1461
- * money amount.
1462
- */
1463
- declaredReturns?: DeclaredReturn[];
1464
2004
  };
1465
2005
  type PlaceOrderResponse = schemas['PlaceOrderResponse'];
1466
2006
  type MakeReservationRequest = schemas['MakeReservationRequest'];
1467
2007
  type MakeReservationResponse = schemas['MakeReservationResponse'];
1468
- type DayOfWeek = 'monday' | 'tuesday' | 'wednesday' | 'thursday' | 'friday' | 'saturday' | 'sunday';
1469
- interface TimeSlot {
1470
- id: string;
1471
- startTime: string;
1472
- endTime: string | null;
1473
- dayOfWeek?: DayOfWeek | null;
1474
- isSchedulable: boolean | null;
1475
- }
1476
- interface ScheduleOverride {
1477
- id: string;
1478
- date: string;
1479
- reason: Record<string, string> | null;
1480
- timeSlots: TimeSlot[];
1481
- }
1482
- interface Schedule {
1483
- id: string;
1484
- name: Record<string, string>;
1485
- description: Record<string, string> | null;
1486
- timezone: string;
1487
- rrule: string | null;
1488
- exdates: string[] | null;
1489
- validFrom: string | null;
1490
- validTo: string | null;
1491
- priority: number | null;
1492
- isActive: boolean;
1493
- sortIndex: string | null;
1494
- updatedAt: string | null;
1495
- updatedBy: string | null;
1496
- createdAt: string | null;
1497
- createdBy: string | null;
1498
- slotMode: 'interval' | 'duration';
1499
- intervalDuration: number | null;
1500
- duration: number | null;
1501
- }
1502
- interface EventPoster {
1503
- id: string;
1504
- eventId: string;
1505
- storagePath: string;
1506
- /** Public URL for accessing the poster image (no expiry) */
1507
- publicUrl: string | null;
1508
- filename: string;
1509
- contentType: string;
1510
- sizeBytes: number;
1511
- isPrimary: boolean;
1512
- sortIndex: string | null;
1513
- createdBy: string | null;
1514
- createdAt: string | null;
1515
- }
1516
- interface Promotion {
1517
- id: string;
1518
- venueId: string;
1519
- name: Record<string, string>;
1520
- description: Record<string, string> | null;
1521
- benefitType: 'free_item' | 'discount_percentage' | 'discount_amount' | 'buy_x_get_y';
1522
- benefitValue: Record<string, unknown>;
1523
- conditions: Record<string, unknown> | null;
1524
- maxRedemptions: number | null;
1525
- currentRedemptions: number | null;
1526
- validFrom: string | null;
1527
- validTo: string | null;
1528
- isActive: boolean;
1529
- createdBy: string | null;
1530
- updatedBy: string | null;
1531
- createdAt: string | null;
1532
- updatedAt: string | null;
1533
- timeSlotIds?: string[] | null;
1534
- }
1535
- interface Event {
1536
- id: string;
1537
- venueId: string;
1538
- name: Record<string, string>;
1539
- description: Record<string, string> | null;
1540
- scheduleId: string | null;
1541
- maxBookings: number | null;
1542
- maxGuests: number | null;
1543
- minPartySize: number | null;
1544
- maxPartySize: number | null;
1545
- isPublic: boolean;
1546
- isRecurring: boolean;
1547
- isClosed: boolean;
1548
- reservationsEnabled: boolean;
1549
- bookingOpensAtDays: number | null;
1550
- /** Offset (ms) before event when booking closes (codebase convention: ms). */
1551
- bookingClosesAtOffset: number | null;
1552
- isActive: boolean;
1553
- /** Whether this event should be displayed prominently in public-facing areas */
1554
- isFeatured: boolean;
1555
- /** Priority for conflict resolution (higher = takes precedence) */
1556
- priority: number;
1557
- createdBy: string | null;
1558
- updatedBy: string | null;
1559
- createdAt: string | null;
1560
- updatedAt: string | null;
1561
- schedule: Schedule | null;
1562
- posters: EventPoster[];
1563
- promotions: Promotion[];
1564
- /** Regular time slots (by day of week) */
1565
- timeSlots: TimeSlot[];
1566
- /** Date-specific schedule overrides */
1567
- scheduleOverrides: ScheduleOverride[];
1568
- /** Next occurrence date for recurring events (YYYY-MM-DD format) */
1569
- nextOccurrence?: string | null;
1570
- }
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];
1571
2050
  interface ListEventsOptions {
1572
2051
  /** Include private events in the response */
1573
2052
  includePrivate?: boolean;
@@ -1582,11 +2061,20 @@ interface ListEventsOptions {
1582
2061
  /** Filter for events occurring within N days from today */
1583
2062
  upcomingWithinDays?: number;
1584
2063
  }
1585
- type ListEventsResponse = Event[];
1586
- type MenuItemType = 'dish' | 'beverage';
1587
2064
  /**
1588
- * Crop area coordinates for assets.
1589
- * 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.
1590
2078
  */
1591
2079
  interface CropArea {
1592
2080
  x: number;
@@ -1594,599 +2082,220 @@ interface CropArea {
1594
2082
  width: number;
1595
2083
  height: number;
1596
2084
  }
1597
- interface MenuAsset {
1598
- id: string;
1599
- type: 'image' | 'video' | 'document';
1600
- tags: string[] | null;
1601
- filename: string;
1602
- contentType: string;
1603
- metadata: {
1604
- width?: number;
1605
- height?: number;
1606
- duration?: number;
1607
- } | null;
1608
- /** Crop area to apply when processing this asset. Used by prebuild scripts. */
1609
- cropArea: CropArea | null;
1610
- publicUrl: string;
1611
- }
1612
- interface MenuDish {
1613
- id: string;
1614
- accessor: string;
1615
- name: Record<string, string>;
1616
- shortName?: Record<string, string>;
1617
- description: Record<string, string> | null;
1618
- longDescription?: Record<string, string> | null;
1619
- isVegetarian: boolean | null;
1620
- isVegan: boolean | null;
1621
- isGlutenFree: boolean | null;
1622
- isDairyFree: boolean | null;
1623
- spiciness: number | null;
1624
- assets?: MenuAsset[];
1625
- }
1626
- interface MenuBeverage {
1627
- id: string;
1628
- accessor: string;
1629
- name: Record<string, string>;
1630
- shortName?: Record<string, string>;
1631
- description: Record<string, string> | null;
1632
- longDescription?: Record<string, string> | null;
1633
- assets?: MenuAsset[];
1634
- }
1635
- interface MenuItem {
1636
- id: string;
1637
- type: MenuItemType;
1638
- tags: string[] | null;
1639
- /** Price adjustment in cents (adds to bundle base price) */
1640
- priceAdjustment: number;
1641
- currency: CurrencyCode;
1642
- isActive: boolean;
1643
- /** Whether this menu item should get a dedicated SEO detail page on consumer sites */
1644
- isFeatured: boolean;
1645
- sortIndex: string | null;
1646
- dish: MenuDish | null;
1647
- beverage: MenuBeverage | null;
1648
- }
1649
- interface Menu {
1650
- id: string;
1651
- venueId: string;
1652
- accessor: string;
1653
- name: Record<string, string>;
1654
- description: Record<string, string> | null;
1655
- items?: MenuItem[];
1656
- /**
1657
- * Menu-level assets surfaced via the `menu_assets` junction. Populated
1658
- * when the caller passes `expand: ['assets']` (or `['items', 'assets']`)
1659
- * to `menus.getByAccessor` / `menus.get`. These are distinct from the
1660
- * per-item `dish.assets` / `beverage.assets` arrays — menu-level assets
1661
- * are curated for the menu as a whole (e.g. blog carousel imagery).
1662
- */
1663
- assets?: MenuAsset[];
1664
- }
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];
1665
2116
  interface GetMenuOptions {
1666
2117
  /** Expand related resources (items, assets) */
1667
2118
  expand?: ('items' | 'assets')[];
1668
2119
  }
1669
- interface MenuBundleDeposit {
1670
- /**
1671
- * Primary reference. Clients declare returns against this id +
1672
- * a count; they never specify a deposit money amount. order3000
1673
- * refuses to accept a deposit amount on any inbound payload.
1674
- */
1675
- depositwareTemplateId: string;
1676
- /**
1677
- * Stable, human-readable handle for the underlying depositware
1678
- * template (e.g. `tiffinbox-3-1ee95d`). Lets app code target a
1679
- * canonical template by a code-level constant without hardcoding
1680
- * an environment-specific UUID.
1681
- */
1682
- accessor: string;
1683
- name: Record<string, string>;
1684
- /**
1685
- * Display-only. Derived from `depositware_templates.deposit_base`.
1686
- * Never round-trip this value back to the server.
1687
- */
1688
- amount: number;
1689
- currency: CurrencyCode;
1690
- }
1691
- interface MenuBundle {
1692
- id: string;
1693
- menuId: string;
1694
- name: Record<string, string>;
1695
- description: Record<string, string> | null;
1696
- tags: string[];
1697
- price: number;
1698
- currency: CurrencyCode;
1699
- taxRateId: string;
1700
- isActive: boolean;
1701
- sortIndex: string | null;
1702
- deposit: MenuBundleDeposit | null;
1703
- }
1704
- interface ScheduleTimeSlot {
1705
- dayOfWeek: DayOfWeek | null;
1706
- timeSlot: {
1707
- id: string;
1708
- startTime: string;
1709
- endTime: string | null;
1710
- isActive: boolean | null;
1711
- isSchedulable: boolean | null;
1712
- };
1713
- }
1714
- interface ScheduleWithTimeSlots extends Schedule {
1715
- scheduleTimeSlots?: ScheduleTimeSlot[];
1716
- }
1717
- interface EventMenu {
1718
- id: string;
1719
- accessor: string;
1720
- name: Record<string, string>;
1721
- category: string;
1722
- }
1723
- interface EventByAccessor {
1724
- id: string;
1725
- venueId: string;
1726
- accessor: string | null;
1727
- name: Record<string, string>;
1728
- description: Record<string, string> | null;
1729
- scheduleId: string | null;
1730
- maxBookings: number | null;
1731
- maxGuests: number | null;
1732
- minPartySize: number | null;
1733
- maxPartySize: number | null;
1734
- isPublic: boolean;
1735
- isRecurring: boolean;
1736
- reservationsEnabled: boolean;
1737
- bookingOpensAtDays: number | null;
1738
- bookingClosesAtOffset: number | null;
1739
- isActive: boolean;
1740
- isFeatured: boolean;
1741
- priority: number;
1742
- createdAt: string | null;
1743
- updatedAt: string | null;
1744
- schedule?: ScheduleWithTimeSlots;
1745
- menus?: EventMenu[];
1746
- posters?: EventPoster[];
1747
- /** Next occurrence date for recurring events (YYYY-MM-DD format) */
1748
- nextOccurrence?: string | null;
1749
- }
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];
1750
2155
  interface GetEventOptions {
1751
2156
  /** Expand related resources (schedule, timeSlots, menus, posters) */
1752
2157
  expand?: ('schedule' | 'timeSlots' | 'menus' | 'posters')[];
1753
2158
  }
1754
- type AreaBookingMode = 'slot' | 'day';
1755
- type AreaBookingRequestStatus = 'pending' | 'approved' | 'rejected' | 'cancelled';
1756
- type AreaBookingRequestSource = 'website' | 'phone' | 'walk_in';
1757
- type AreaBookingStatus = 'confirmed' | 'arrived' | 'completed' | 'cancelled' | 'no_show';
1758
- interface AreaAsset {
1759
- id: string;
1760
- type: 'image' | 'video' | 'document';
1761
- tags: string[] | null;
1762
- filename: string;
1763
- contentType: string;
1764
- metadata: {
1765
- width?: number;
1766
- height?: number;
1767
- duration?: number;
1768
- } | null;
1769
- cropArea: CropArea | null;
1770
- publicUrl: string;
1771
- }
1772
- interface AreaFeature {
1773
- icon: string;
1774
- label: Record<string, string>;
1775
- description?: Record<string, string>;
1776
- }
1777
- interface Area {
1778
- id: string;
1779
- venueId: string;
1780
- accessor: string;
1781
- name: Record<string, string>;
1782
- description: Record<string, string> | null;
1783
- longDescription: Record<string, string> | null;
1784
- minCapacity: number | null;
1785
- maxCapacity: number;
1786
- currency: Currency;
1787
- /** Base price in cents (flat price per booking). Null when pricing is per-person only. */
1788
- basePrice: number | null;
1789
- /** Per-guest price in cents. Null when pricing is base-only. */
1790
- perPersonPrice: number | null;
1791
- features: AreaFeature[] | null;
1792
- bookingMode: AreaBookingMode;
1793
- assets?: AreaAsset[];
1794
- }
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'];
1795
2166
  interface GetAreaOptions {
1796
2167
  expand?: 'assets'[];
1797
2168
  }
1798
- interface AreaAvailabilityWindow {
1799
- /** YYYY-MM-DD */
1800
- date: string;
1801
- /** HH:MM:SS, null for day-mode bookings */
1802
- startTime: string | null;
1803
- endTime: string | null;
1804
- }
1805
- interface AreaAvailabilityResponse {
1806
- from: string;
1807
- to: string;
1808
- bookingMode: AreaBookingMode;
1809
- occupied: AreaAvailabilityWindow[];
1810
- }
2169
+ type AreaAvailabilityWindow = schemas['GetAreaAvailabilityResponse']['occupied'][number];
2170
+ type AreaAvailabilityResponse = schemas['GetAreaAvailabilityResponse'];
1811
2171
  interface GetAreaAvailabilityOptions {
1812
2172
  /** YYYY-MM-DD — defaults to today */
1813
2173
  from?: string;
1814
2174
  /** YYYY-MM-DD — defaults to today + 90d */
1815
2175
  to?: string;
1816
2176
  }
1817
- interface SubmitAreaBookingRequestPayload {
1818
- /** YYYY-MM-DD */
1819
- requestedDate: string;
1820
- /** HH:MM:SS — omit for day-mode bookings */
1821
- requestedStartTime?: string;
1822
- requestedEndTime?: string;
1823
- partySize: number;
1824
- customerFirstName: string;
1825
- customerLastName: string;
1826
- customerEmail: string;
1827
- customerPhone?: string;
1828
- message?: string;
1829
- source?: AreaBookingRequestSource;
1830
- }
1831
- interface AreaBookingRequestResponse {
1832
- id: string;
1833
- venueId: string;
1834
- areaId: string;
1835
- requestedDate: string;
1836
- requestedStartTime: string | null;
1837
- requestedEndTime: string | null;
1838
- partySize: number;
1839
- customerFirstName: string;
1840
- customerLastName: string;
1841
- customerEmail: string;
1842
- customerPhone: string | null;
1843
- message: string | null;
1844
- source: AreaBookingRequestSource;
1845
- status: AreaBookingRequestStatus;
1846
- areaBookingId: string | null;
1847
- createdAt: string | null;
1848
- updatedAt: string | null;
1849
- }
1850
- type BasketStatus = 'active' | 'abandoned' | 'converted';
1851
- type Currency = 'EUR' | 'CHF';
2177
+ type SubmitAreaBookingRequestPayload = schemas['SubmitAreaBookingPayload'];
2178
+ type AreaBookingRequestResponse = schemas['SubmitAreaBookingRequestResponse'];
1852
2179
  /**
1853
- * 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)`.
1854
2183
  */
1855
- type Unit = 'grams' | 'kilograms' | 'liters' | 'milliliters' | 'pieces';
2184
+ type Basket = NonNullable<schemas['FetchBasketResponse']>;
1856
2185
  /**
1857
- * Reference to a menu item within a basket item.
1858
- *
1859
- * Each menu item can have its own portion size (quantity + unit),
1860
- * 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`.
1861
2188
  */
1862
- interface BasketItemMenuItemRef {
1863
- menuItemId: string;
1864
- role: string | null;
1865
- quantity: number;
1866
- unit: Unit;
1867
- }
1868
- interface BasketItemMetadata {
1869
- type?: 'tiffinbox' | 'bowl' | 'sushi';
1870
- mode?: 2 | 3;
1871
- upsell?: {
1872
- tinOption: string;
1873
- rollOption: string;
1874
- };
1875
- price?: number;
1876
- [key: string]: unknown;
1877
- }
2189
+ type BasketStatus = Basket['status'];
2190
+ type Currency = schemas['BasketTotals']['currency'];
1878
2191
  /**
1879
- * Deposit info on a basket item — **always server-derived** from the row's
1880
- * `depositware_template_id` column. order3000 refuses any inbound deposit
1881
- * 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.
1882
2194
  */
1883
- interface BasketItemDeposit {
1884
- depositwareTemplateId: string;
1885
- name: Record<string, string>;
1886
- amount: number;
1887
- currency: Currency;
1888
- }
2195
+ type Unit = NonNullable<schemas['AddToBasketRequest']['menuItems'][number]['unit']>;
1889
2196
  /**
1890
- * A basket item represents a single physical product in the basket.
1891
- *
1892
- * Each basket item can contain multiple menu items (e.g., a TiffinBox
1893
- * with rice, curry, and sides). The itemCount in the response is the
1894
- * 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.
1895
2201
  */
1896
- interface BasketItem {
1897
- id: string;
1898
- metadata: BasketItemMetadata | null;
1899
- deposit: BasketItemDeposit | null;
1900
- menuItems: BasketItemMenuItemRef[];
1901
- }
1902
- interface Basket {
1903
- id: string;
1904
- sessionId: string;
1905
- status: BasketStatus;
1906
- currency: Currency;
1907
- items: BasketItem[];
1908
- itemCount: number;
1909
- /**
1910
- * Canonical totals computed server-side and shipped inline with the
1911
- * basket. Computed using `declaredReturns` below, so the deposit
1912
- * credit is already baked into `effectiveTotal` — clients render the
1913
- * final value on first paint without a follow-up chip-hydration round
1914
- * trip. Use `POST /baskets/:id/totals` only when the user interacts
1915
- * with the stepper to recompute with new counts.
1916
- */
1917
- totals: BasketTotals;
1918
- /**
1919
- * Server-persisted declared-return counts (from `baskets.declared_returns`).
1920
- * Reflects the participant's last chip click. Clients seed their
1921
- * local `declaredReturns` store from this at hydration time so the
1922
- * chip count + Gesamt are consistent on first paint. Only positive
1923
- * counts are present; zero entries are stripped.
1924
- */
1925
- declaredReturns: DeclaredReturn[];
1926
- expiresAt: string;
1927
- createdAt: string | null;
1928
- updatedAt: string | null;
1929
- }
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']>;
1930
2225
  /**
1931
- * 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`.
1932
2229
  */
1933
- type OrderStatus = 'pending' | 'in_progress' | 'ready' | 'completed' | 'cancelled';
2230
+ type OrderStatus = NonNullable<schemas['FetchLatestOrderResponse']>['status'];
1934
2231
  /**
1935
- * 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`.
1936
2235
  */
1937
- type PaymentStatus = 'unpaid' | 'authorized' | 'cash_pending' | 'paid' | 'refunded' | 'failed';
2236
+ type PaymentStatus = NonNullable<schemas['FetchLatestOrderResponse']>['paymentStatus'];
1938
2237
  /**
1939
2238
  * The most recent non-team order for a guest session, with the captured
1940
2239
  * basket items + totals + declared returns inlined. Returned by
1941
- * `orders.getLatest(sessionId)`. Used by thamarai to drive the
1942
- * post-placement read-only view of the ThermoBox stepper.
1943
- *
1944
- * `null` when the session has no qualifying order — fresh sessionIds
1945
- * 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).
1946
2245
  */
1947
- interface LatestOrder {
1948
- id: string;
1949
- /** URL-safe non-guessable id (e.g. `ORD-A3B7K2`). Nullable until backfill. */
1950
- publicId: string | null;
1951
- /** Cycling 100→999 per venue. Nullable until PaymentIntent assigns. */
1952
- quickReferenceNumber: number | null;
1953
- status: OrderStatus;
1954
- paymentStatus: PaymentStatus;
1955
- fulfillmentType: OrderFulfillmentType | null;
1956
- /** ISO timestamp of pickup / delivery. */
1957
- fulfillmentAt: string | null;
1958
- orderedAt: string;
1959
- totalAmount: number;
1960
- currency: Currency;
1961
- /** Captured basket items — same shape `Basket.items` uses. */
1962
- items: BasketItem[];
1963
- itemCount: number;
1964
- /** Captured basket totals; `effectiveTotal` already reflects the credit. */
1965
- totals: BasketTotals;
1966
- /** Declared-return counts the customer locked in at submit time. */
1967
- declaredReturns: DeclaredReturn[];
1968
- }
2246
+ type LatestOrder = NonNullable<schemas['FetchLatestOrderResponse']>;
1969
2247
  /**
1970
- * One "I'll return N of this template" declaration. Canonical deposit
1971
- * input across every order3000 endpoint — clients never specify a
1972
- * 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.
1973
2251
  */
1974
- interface DeclaredReturn {
1975
- depositwareTemplateId: string;
1976
- count: number;
1977
- }
2252
+ type DeclaredReturn = schemas['BasketTotals']['returnable'][number];
1978
2253
  /**
1979
- * Canonical basket totals (all cents). The single figure clients read
1980
- * for every displayed monetary value; replaces every local amount-times-
1981
- * 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.
1982
2257
  */
1983
- interface BasketTotals {
1984
- currency: Currency;
1985
- /** Food prices summed across basket items (tax-inclusive, no deposits). */
1986
- itemsTotal: number;
1987
- /** Tax portion extracted from `itemsTotal`. */
1988
- taxAmount: number;
1989
- /** Sum of deposits currently in the basket (one per returnable item). */
1990
- depositCharge: number;
1991
- /** `itemsTotal + depositCharge` — what an un-declared customer pays. */
1992
- grossTotal: number;
1993
- /** Credit owed for declared returns (bounded per-template by `returnable`). */
1994
- depositCredit: number;
1995
- /** `grossTotal − depositCredit`, clamped to zero. */
1996
- effectiveTotal: number;
1997
- /** When `depositCredit > grossTotal`, the excess is a cash refund due. */
1998
- cashRefund: number;
1999
- /** How many units of each depositware template the basket currently holds. */
2000
- returnable: DeclaredReturn[];
2001
- }
2258
+ type BasketTotals = schemas['BasketTotals'];
2002
2259
  /**
2003
2260
  * Request to add an item to the basket.
2004
2261
  *
2005
2262
  * Menu items can optionally include portion information (quantity/unit).
2006
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.
2007
2266
  */
2008
- interface AddToBasketRequest {
2009
- sessionId: string;
2010
- menuItems: Array<{
2011
- menuItemId: string;
2012
- role?: string;
2013
- quantity?: number;
2014
- unit?: Unit;
2015
- }>;
2016
- metadata?: BasketItemMetadata;
2017
- }
2018
- interface AddToBasketResponse {
2019
- basketItemId: string;
2020
- itemCount: number;
2021
- deposit: BasketItemDeposit | null;
2022
- /**
2023
- * Fresh canonical totals for the mutated basket (declaredReturns=[]).
2024
- * Clients apply this directly to their store — no extra round trip.
2025
- */
2026
- totals: BasketTotals;
2027
- }
2028
- interface RemoveFromBasketResponse {
2029
- success: boolean;
2030
- basketItemId: string;
2031
- itemCount: number;
2032
- /**
2033
- * Fresh canonical totals for the mutated basket (declaredReturns=[]).
2034
- * `null` when the basket has no items left after the removal.
2035
- */
2036
- totals: BasketTotals | null;
2037
- }
2038
- interface CreatePaymentIntentRequest {
2039
- basketId: string;
2040
- currency: Currency;
2041
- sessionId: string;
2042
- 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'> & {
2043
2271
  /**
2044
2272
  * Optional — null / omitted in team-order mode. The Lead's pickup-time
2045
2273
  * decision is stored on the team row and backfilled onto each child
2046
2274
  * order at submit time.
2047
2275
  */
2048
2276
  fulfillmentAt?: Date | string | null;
2049
- /** Customer first name (for Stripe metadata and customer record) */
2050
- customerFirstName?: string;
2051
- /** Customer last name (for Stripe metadata and customer record) */
2052
- customerLastName?: string;
2053
- /**
2054
- * Deposit containers the customer declares they will return at pickup.
2055
- * Per-template references only — order3000 refuses any inbound deposit
2056
- * money amount.
2057
- */
2058
- declaredReturns?: DeclaredReturn[];
2059
- /**
2060
- * The team order's public identifier (URL `?publicId=…`) when the
2061
- * caller is checking out as a team participant. Omitted for individual
2062
- * checkout. The server enters team-participant mode (manual-capture PI
2063
- * awaiting the Lead's submit) only when this is present AND matches the
2064
- * basket's attached team. Stale `basket.teamOrderId` without a matching
2065
- * `teamOrderPublicId` is treated as individual — the basket simply
2066
- * carries a dead pointer from an abandoned prior session.
2067
- */
2068
- teamOrderPublicId?: string;
2069
- }
2070
- interface CreatePaymentIntentResponse {
2071
- clientSecret: string;
2072
- paymentIntentId: string;
2073
- orderId: string;
2074
- }
2075
- interface CreateDeltaPaymentIntentRequest {
2076
- basketId: string;
2077
- sessionId: string;
2078
- currency: Currency;
2079
- /**
2080
- * Deposit containers the participant declares they will return at
2081
- * pickup. Used to apply deposit credit against the delta amount so the
2082
- * server's `currentTotal` matches the client's displayed effective
2083
- * total. Per-template references only.
2084
- */
2085
- declaredReturns?: DeclaredReturn[];
2086
- }
2087
- interface CreateDeltaPaymentIntentResponse {
2088
- /** null when Stripe confirmed the off-session PI without further action. */
2089
- clientSecret: string | null;
2090
- paymentIntentId: string;
2091
- orderId: string;
2092
- /** Delta amount actually charged (cents). */
2093
- amount: number;
2094
- /**
2095
- * Stripe PaymentIntent status after confirm. Typically:
2096
- * - 'requires_capture' → one-tap succeeded; capture happens at submit
2097
- * - 'requires_action' → 3DS prompt required; client completes via clientSecret
2098
- * - 'succeeded' (rare here, auto-capture would have to be set)
2099
- */
2100
- status: string;
2101
- }
2102
- interface ReduceDeltaPaymentIntentRequest {
2103
- basketId: string;
2104
- sessionId: string;
2105
- currency: Currency;
2106
- /**
2107
- * Deposit containers the participant declares they will return at pickup.
2108
- * Per-template references only; order3000 refuses any deposit money
2109
- * amount on input.
2110
- */
2111
- declaredReturns?: DeclaredReturn[];
2112
- }
2113
- interface ReduceDeltaPaymentIntentResponse {
2114
- orderId: string;
2115
- /** New authorised total (cents) after the reduction. */
2116
- paidTotal: number;
2117
- /** Amount actually released (cents). */
2118
- released: number;
2119
- }
2120
- interface ConfirmOrderRequest {
2121
- paymentIntentId: string;
2122
- }
2123
- interface ConfirmOrderResponse {
2124
- id: string;
2125
- status: string;
2126
- publicId: string | null;
2127
- /** Cycling 100→999 short reference printed on receipts and shown to staff. */
2128
- quickReferenceNumber: number | null;
2129
- /** Customer ID for the order (for client-side tracking) */
2130
- customerId?: string;
2131
- }
2132
- type SubscriptionPeriod = 'week' | 'month' | 'year';
2133
- type SubscriberStatus = 'active' | 'paused' | 'cancelled' | 'past_due' | 'trialing';
2134
- type SubscriptionCreditStatus = 'available' | 'redeemed' | 'expired';
2135
- interface MenuSubscriptionPoster {
2136
- id: string;
2137
- menuSubscriptionId: string;
2138
- storagePath: string;
2139
- /** Public URL for accessing the poster image (no expiry) */
2140
- publicUrl: string | null;
2141
- filename: string;
2142
- contentType: string;
2143
- sizeBytes: number;
2144
- sortIndex: string | null;
2145
- createdBy: string | null;
2146
- createdAt: string | null;
2147
- }
2148
- interface MenuSubscription {
2149
- id: string;
2150
- menuId: string;
2151
- accessor: string;
2152
- name: Record<string, string>;
2153
- shortName: Record<string, string> | null;
2154
- description: Record<string, string> | null;
2155
- scheduleId: string | null;
2156
- allowance: number;
2157
- billingPeriod: SubscriptionPeriod;
2158
- allowancePeriod: SubscriptionPeriod;
2159
- redeemableTagSets: string[][];
2160
- expiryInDays: number;
2161
- price: number;
2162
- currency: Currency;
2163
- isActive: boolean;
2164
- sortIndex: string | null;
2165
- posters: MenuSubscriptionPoster[];
2166
- }
2167
- interface SubscribeRequest {
2168
- email: string;
2169
- firstName?: string;
2170
- lastName?: string;
2171
- sessionId?: string;
2172
- successUrl: string;
2173
- cancelUrl: string;
2174
- }
2175
- interface SubscribeResponse {
2176
- checkoutUrl: string;
2177
- sessionId: string;
2178
- }
2179
- interface SubscriptionCredit {
2180
- id: string;
2181
- subscriberId: string;
2182
- periodStart: string;
2183
- periodEnd: string;
2184
- expiresAt: string;
2185
- status: SubscriptionCreditStatus;
2186
- redeemedAt: string | null;
2187
- orderId: string | null;
2188
- createdAt: string | null;
2189
- }
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];
2190
2299
 
2191
2300
  declare class AreasResource extends BaseResource {
2192
2301
  constructor(tokenManager: TokenManager, baseUrl: string);
@@ -3035,7 +3144,7 @@ interface MenuItemRow {
3035
3144
  dish_id: string | null;
3036
3145
  beverage_id: string | null;
3037
3146
  price_adjustment: number;
3038
- currency: CurrencyCode;
3147
+ currency: Currency;
3039
3148
  is_active: boolean;
3040
3149
  is_featured: boolean;
3041
3150
  tags: string[] | null;