order3000 0.25.0 → 1.0.1

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,192 @@ 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
+ dayOfWeek?: components["schemas"]["DayOfWeek"];
744
+ isSchedulable?: boolean | null;
745
+ }[];
746
+ }[];
747
+ promotions: {
748
+ id: string;
749
+ name: {
750
+ [key: string]: string;
751
+ };
752
+ description: {
753
+ [key: string]: string;
754
+ } | null;
755
+ validFrom: string | null;
756
+ validTo: string | null;
757
+ isActive: boolean;
758
+ updatedAt: unknown;
759
+ updatedBy: string | null;
760
+ createdAt: unknown;
761
+ createdBy: string | null;
762
+ venueId: string;
763
+ benefitType: components["schemas"]["PromotionBenefitType"];
764
+ benefitValue: {
765
+ [key: string]: unknown;
766
+ };
767
+ conditions: {
768
+ [key: string]: unknown;
769
+ } | null;
770
+ maxRedemptions: number | null;
771
+ currentRedemptions: number | null;
772
+ timeSlotIds: string[] | null;
773
+ }[];
774
+ }[];
546
775
  /**
547
776
  * FetchEventResponse
548
777
  * @description Event details. Nested objects (schedule, timeSlots, menus, posters, nextOccurrence) pass through; their shape follows the SDK Event interface.
@@ -554,8 +783,72 @@ interface components {
554
783
  name: {
555
784
  [key: string]: string;
556
785
  };
557
- } & {
558
- [key: string]: unknown;
786
+ description: {
787
+ [key: string]: string;
788
+ } | null;
789
+ scheduleId: string | null;
790
+ maxBookings: number | null;
791
+ maxGuests: number | null;
792
+ minPartySize: number | null;
793
+ maxPartySize: number | null;
794
+ isPublic: boolean;
795
+ isRecurring: boolean;
796
+ reservationsEnabled: boolean;
797
+ bookingOpensAtDays: number | null;
798
+ bookingClosesAtOffset: number | null;
799
+ isActive: boolean;
800
+ isFeatured: boolean;
801
+ priority: number;
802
+ createdAt: unknown;
803
+ updatedAt: unknown;
804
+ nextOccurrence?: string | null;
805
+ schedule?: {
806
+ id: string;
807
+ name: {
808
+ [key: string]: string;
809
+ };
810
+ description: {
811
+ [key: string]: string;
812
+ } | null;
813
+ timezone: string;
814
+ rrule: string | null;
815
+ exdates: string[] | null;
816
+ validFrom: string | null;
817
+ validTo: string | null;
818
+ priority: number | null;
819
+ isActive: boolean;
820
+ slotMode: components["schemas"]["SlotMode"];
821
+ intervalDuration: number | null;
822
+ duration: number | null;
823
+ scheduleTimeSlots?: {
824
+ dayOfWeek: components["schemas"]["DayOfWeek"];
825
+ timeSlot: {
826
+ id: string;
827
+ startTime: string;
828
+ endTime: string | null;
829
+ isActive: boolean | null;
830
+ isSchedulable: boolean | null;
831
+ };
832
+ }[];
833
+ };
834
+ menus?: {
835
+ id: string;
836
+ accessor: string;
837
+ name: {
838
+ [key: string]: string;
839
+ };
840
+ category: string;
841
+ }[];
842
+ posters?: {
843
+ id: string;
844
+ bucket: string;
845
+ storagePath: string;
846
+ filename: string;
847
+ contentType: string;
848
+ sizeBytes: number;
849
+ sortIndex: string | null;
850
+ publicUrl: string;
851
+ }[];
559
852
  };
560
853
  /**
561
854
  * CreateEventRequest
@@ -592,8 +885,7 @@ interface components {
592
885
  endTime: string;
593
886
  lastSeatingTime?: string | null;
594
887
  }[];
595
- /** @enum {string|null} */
596
- slotMode?: "interval" | "duration" | null;
888
+ slotMode?: components["schemas"]["SlotMode"];
597
889
  intervalDuration?: number | null;
598
890
  duration?: number | null;
599
891
  } | null;
@@ -635,67 +927,189 @@ interface components {
635
927
  };
636
928
  /**
637
929
  * FetchMenuResponse
638
- * @description Menu details. Nested arrays (items, assets, bundles, schedule, etc.) pass through; their shape follows the SDK Menu interface.
930
+ * @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
931
  */
640
932
  FetchMenuResponse: {
641
933
  id: string;
642
- venueId: string;
934
+ name: {
935
+ [key: string]: string;
936
+ };
643
937
  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;
938
+ metadata: {
939
+ orderingEnabled?: boolean;
940
+ compactTags?: string[];
941
+ showDepositware?: boolean;
942
+ tagSortOrder?: string[];
943
+ subscriptionsEnabled?: boolean;
944
+ isDeliveryEnabled?: boolean;
945
+ assetsEnabled?: boolean;
946
+ } | null;
947
+ description: {
948
+ [key: string]: string;
949
+ } | null;
653
950
  sortIndex: string | null;
654
- deliveryThresholdAmount: number | null;
655
- deliveryThresholdQuantity: number | null;
656
- createdAt: unknown;
657
951
  updatedAt: unknown;
658
- createdBy: string | null;
659
952
  updatedBy: string | null;
660
- assets?: {
953
+ createdAt: unknown;
954
+ createdBy: string | null;
955
+ venueId: string;
956
+ deliveryThresholdAmount: number | null;
957
+ deliveryThresholdQuantity: number | null;
958
+ assets: {
661
959
  id: string;
662
- /** @enum {string} */
663
- type: "image" | "video" | "document";
960
+ type: components["schemas"]["AssetType"];
961
+ metadata: {
962
+ width?: number;
963
+ height?: number;
964
+ duration?: number;
965
+ } | null;
966
+ isActive: boolean;
967
+ sortIndex: string | null;
968
+ updatedAt: unknown;
969
+ updatedBy: string | null;
970
+ createdAt: unknown;
971
+ createdBy: string | null;
972
+ venueId: string | null;
664
973
  tags: string[] | null;
665
974
  bucket: string;
666
975
  storagePath: string;
667
976
  filename: string;
668
977
  contentType: string;
669
978
  sizeBytes: number;
670
- caption: (string | number | boolean | (null)) | {
671
- [key: string]: unknown;
672
- } | unknown[];
673
- alt: (string | number | boolean | (null)) | {
979
+ caption: {
674
980
  [key: string]: unknown;
675
- } | unknown[];
676
- metadata: ((string | number | boolean | (null)) | {
677
- [key: string]: unknown;
678
- } | unknown[]) | null;
679
- cropArea: ((string | number | boolean | (null)) | {
981
+ };
982
+ alt: {
680
983
  [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;
984
+ };
985
+ cropArea: {
986
+ x: number;
987
+ y: number;
988
+ width: number;
989
+ height: number;
990
+ } | null;
991
+ publicUrl: string;
690
992
  }[];
691
993
  items?: {
692
- [key: string]: unknown;
994
+ id: string;
995
+ type: components["schemas"]["MenuItemType"];
996
+ tags: string[] | null;
997
+ priceAdjustment: number;
998
+ currency: components["schemas"]["Currency"];
999
+ isActive: boolean;
1000
+ isFeatured: boolean;
1001
+ sortIndex: string | null;
1002
+ dish: {
1003
+ id: string;
1004
+ accessor: string;
1005
+ name: {
1006
+ [key: string]: string;
1007
+ };
1008
+ shortName?: {
1009
+ [key: string]: string;
1010
+ };
1011
+ description: {
1012
+ [key: string]: string;
1013
+ } | null;
1014
+ longDescription?: {
1015
+ [key: string]: string;
1016
+ } | null;
1017
+ isVegetarian: boolean | null;
1018
+ isVegan: boolean | null;
1019
+ isGlutenFree: boolean | null;
1020
+ isDairyFree: boolean | null;
1021
+ spiciness: number | null;
1022
+ assets?: {
1023
+ id: string;
1024
+ type: components["schemas"]["AssetType"];
1025
+ metadata: {
1026
+ width?: number;
1027
+ height?: number;
1028
+ duration?: number;
1029
+ } | null;
1030
+ isActive: boolean;
1031
+ sortIndex: string | null;
1032
+ updatedAt: unknown;
1033
+ updatedBy: string | null;
1034
+ createdAt: unknown;
1035
+ createdBy: string | null;
1036
+ venueId: string | null;
1037
+ tags: string[] | null;
1038
+ bucket: string;
1039
+ storagePath: string;
1040
+ filename: string;
1041
+ contentType: string;
1042
+ sizeBytes: number;
1043
+ caption: {
1044
+ [key: string]: unknown;
1045
+ };
1046
+ alt: {
1047
+ [key: string]: unknown;
1048
+ };
1049
+ cropArea: {
1050
+ x: number;
1051
+ y: number;
1052
+ width: number;
1053
+ height: number;
1054
+ } | null;
1055
+ publicUrl: string;
1056
+ }[];
1057
+ } | null;
1058
+ beverage: {
1059
+ id: string;
1060
+ accessor: string;
1061
+ name: {
1062
+ [key: string]: string;
1063
+ };
1064
+ shortName?: {
1065
+ [key: string]: string;
1066
+ };
1067
+ description: {
1068
+ [key: string]: string;
1069
+ } | null;
1070
+ longDescription?: {
1071
+ [key: string]: string;
1072
+ } | null;
1073
+ assets?: {
1074
+ id: string;
1075
+ type: components["schemas"]["AssetType"];
1076
+ metadata: {
1077
+ width?: number;
1078
+ height?: number;
1079
+ duration?: number;
1080
+ } | null;
1081
+ isActive: boolean;
1082
+ sortIndex: string | null;
1083
+ updatedAt: unknown;
1084
+ updatedBy: string | null;
1085
+ createdAt: unknown;
1086
+ createdBy: string | null;
1087
+ venueId: string | null;
1088
+ tags: string[] | null;
1089
+ bucket: string;
1090
+ storagePath: string;
1091
+ filename: string;
1092
+ contentType: string;
1093
+ sizeBytes: number;
1094
+ caption: {
1095
+ [key: string]: unknown;
1096
+ };
1097
+ alt: {
1098
+ [key: string]: unknown;
1099
+ };
1100
+ cropArea: {
1101
+ x: number;
1102
+ y: number;
1103
+ width: number;
1104
+ height: number;
1105
+ } | null;
1106
+ publicUrl: string;
1107
+ }[];
1108
+ } | null;
693
1109
  }[];
694
- } & {
695
- [key: string]: unknown;
696
1110
  };
697
1111
  /** FetchMenuBundlesResponse */
698
- FetchMenuBundlesResponse: ({
1112
+ FetchMenuBundlesResponse: {
699
1113
  id: string;
700
1114
  menuId: string;
701
1115
  name: {
@@ -710,11 +1124,9 @@ interface components {
710
1124
  tags: string[];
711
1125
  price: {
712
1126
  amount: number;
713
- /** @enum {string} */
714
- currency: "EUR" | "CHF";
1127
+ currency: components["schemas"]["Currency"];
715
1128
  };
716
- /** @enum {string} */
717
- currency: "EUR" | "CHF";
1129
+ currency: components["schemas"]["Currency"];
718
1130
  taxRateId: string;
719
1131
  isActive: boolean;
720
1132
  sortIndex: string | null;
@@ -725,15 +1137,14 @@ interface components {
725
1137
  };
726
1138
  } | null;
727
1139
  deposit: {
1140
+ depositwareTemplateId: string;
1141
+ accessor: string;
728
1142
  amount: number;
729
- /** @enum {string} */
730
- currency: "EUR" | "CHF";
1143
+ currency: components["schemas"]["Currency"];
731
1144
  } | null;
732
- } & {
733
- [key: string]: unknown;
734
- })[];
1145
+ }[];
735
1146
  /** FetchMenuSubscriptionsResponse */
736
- FetchMenuSubscriptionsResponse: ({
1147
+ FetchMenuSubscriptionsResponse: {
737
1148
  id: string;
738
1149
  menuId: string;
739
1150
  accessor: string;
@@ -748,35 +1159,30 @@ interface components {
748
1159
  } | null;
749
1160
  scheduleId: string | null;
750
1161
  allowance: number;
751
- /** @enum {string} */
752
- billingPeriod: "week" | "month" | "year";
753
- /** @enum {string} */
754
- allowancePeriod: "week" | "month" | "year";
1162
+ billingPeriod: components["schemas"]["SubscriptionPeriod"];
1163
+ allowancePeriod: components["schemas"]["SubscriptionPeriod"];
755
1164
  expiryInDays: number;
756
1165
  price: number;
757
- /** @enum {string} */
758
- currency: "EUR" | "CHF";
1166
+ currency: components["schemas"]["Currency"];
759
1167
  stripeProductId: string | null;
760
1168
  stripePriceId: string | null;
761
1169
  isActive: boolean;
762
1170
  sortIndex: string | null;
763
1171
  subscriberCount: number;
764
1172
  redeemableTagSets: string[][];
765
- posters?: {
1173
+ posters: {
766
1174
  id: string;
767
1175
  menuSubscriptionId: string;
768
1176
  storagePath: string;
769
- publicUrl: string | null;
1177
+ publicUrl: string;
770
1178
  filename: string;
771
1179
  contentType: string;
772
- sizeBytes: number | null;
1180
+ sizeBytes: number;
773
1181
  sortIndex: string | null;
774
1182
  createdBy: string | null;
775
1183
  createdAt: string | null;
776
1184
  }[];
777
- } & {
778
- [key: string]: unknown;
779
- })[];
1185
+ }[];
780
1186
  /**
781
1187
  * PlaceOrderRequest
782
1188
  * @description Place a new order for a specific venue
@@ -804,8 +1210,7 @@ interface components {
804
1210
  publicId: string | null;
805
1211
  orderId: string;
806
1212
  quickReferenceNumber: number | null;
807
- /** @enum {string} */
808
- currency: "EUR" | "CHF";
1213
+ currency: components["schemas"]["Currency"];
809
1214
  };
810
1215
  /** ConfirmOrderRequest */
811
1216
  ConfirmOrderRequest: {
@@ -821,12 +1226,52 @@ interface components {
821
1226
  quickReferenceNumber: number | null;
822
1227
  customerId?: string;
823
1228
  };
1229
+ /** FetchLatestOrderResponse */
1230
+ FetchLatestOrderResponse: {
1231
+ /** Format: uuid */
1232
+ id: string;
1233
+ publicId: string | null;
1234
+ quickReferenceNumber: number | null;
1235
+ status: components["schemas"]["OrderStatus"];
1236
+ paymentStatus: components["schemas"]["PaymentStatus"];
1237
+ fulfillmentType: components["schemas"]["FulfillmentType"];
1238
+ fulfillmentAt: string | null;
1239
+ orderedAt: string;
1240
+ totalAmount: number;
1241
+ currency: components["schemas"]["Currency"];
1242
+ items: {
1243
+ /** Format: uuid */
1244
+ id: string;
1245
+ metadata: {
1246
+ [key: string]: unknown;
1247
+ } | null;
1248
+ deposit: {
1249
+ depositwareTemplateId: string;
1250
+ name: {
1251
+ [key: string]: string;
1252
+ };
1253
+ amount: number;
1254
+ currency: components["schemas"]["Currency"];
1255
+ } | null;
1256
+ menuItems: {
1257
+ menuItemId: string;
1258
+ role: string | null;
1259
+ quantity: number;
1260
+ unit: components["schemas"]["Unit"];
1261
+ }[];
1262
+ }[];
1263
+ itemCount: number;
1264
+ totals: components["schemas"]["BasketTotals"];
1265
+ declaredReturns: {
1266
+ depositwareTemplateId: string;
1267
+ count: number;
1268
+ }[];
1269
+ };
824
1270
  /** CreatePaymentIntentRequest */
825
1271
  CreatePaymentIntentRequest: {
826
1272
  venueAccessor: string;
827
1273
  basketId: string;
828
- /** @enum {string} */
829
- currency: "EUR" | "CHF";
1274
+ currency: components["schemas"]["Currency"];
830
1275
  sessionId: string;
831
1276
  fulfillmentType: components["schemas"]["FulfillmentType"];
832
1277
  /** Format: date-time */
@@ -850,8 +1295,7 @@ interface components {
850
1295
  venueAccessor: string;
851
1296
  basketId: string;
852
1297
  sessionId: string;
853
- /** @enum {string} */
854
- currency: "EUR" | "CHF";
1298
+ currency: components["schemas"]["Currency"];
855
1299
  declaredReturns?: {
856
1300
  depositwareTemplateId: string;
857
1301
  count: number;
@@ -871,8 +1315,7 @@ interface components {
871
1315
  venueAccessor: string;
872
1316
  basketId: string;
873
1317
  sessionId: string;
874
- /** @enum {string} */
875
- currency: "EUR" | "CHF";
1318
+ currency: components["schemas"]["Currency"];
876
1319
  declaredReturns?: {
877
1320
  depositwareTemplateId: string;
878
1321
  count: number;
@@ -920,16 +1363,8 @@ interface components {
920
1363
  customerEmail?: string | null;
921
1364
  /** @description Phone number for reservation confirmations and updates. Include country code for international numbers. */
922
1365
  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";
1366
+ contactPreference?: components["schemas"]["ContactPreference"];
1367
+ source?: components["schemas"]["AreaBookingRequestSource"];
933
1368
  /** @description Any dietary restrictions, allergies, or special occasions (max 500 characters) */
934
1369
  specialRequests?: string | null;
935
1370
  /** @description Preferred seating area or table type (e.g., "window seat", "quiet area", "patio") */
@@ -977,16 +1412,8 @@ interface components {
977
1412
  customerEmail: string | null;
978
1413
  /** @description Customer phone number */
979
1414
  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";
1415
+ contactPreference: components["schemas"]["ContactPreference"];
1416
+ status: components["schemas"]["ReservationStatus"];
990
1417
  /** @description 6-character confirmation code for the reservation */
991
1418
  confirmationCode: string | null;
992
1419
  /** @description When the reservation was confirmed */
@@ -999,18 +1426,10 @@ interface components {
999
1426
  completedAt: unknown;
1000
1427
  /** @description When the reservation was cancelled */
1001
1428
  cancelledAt: unknown;
1002
- /**
1003
- * @description Who initiated the cancellation
1004
- * @enum {string|null}
1005
- */
1006
- cancellationReason: "customer_request" | "restaurant_request" | null;
1429
+ cancellationReason: components["schemas"]["CancellationReason"];
1007
1430
  /** @description Additional cancellation details */
1008
1431
  cancellationNote: string | null;
1009
- /**
1010
- * @description Origin of the reservation
1011
- * @enum {string}
1012
- */
1013
- source: "website" | "phone" | "walk_in";
1432
+ source: components["schemas"]["AreaBookingRequestSource"];
1014
1433
  /** @description Any special requirements or notes */
1015
1434
  specialRequests: string | null;
1016
1435
  /** @description Preferred seating location */
@@ -1040,15 +1459,12 @@ interface components {
1040
1459
  } | null;
1041
1460
  scheduleId: string | null;
1042
1461
  allowance: number;
1043
- /** @enum {string} */
1044
- billingPeriod: "week" | "month" | "year";
1045
- /** @enum {string} */
1046
- allowancePeriod: "week" | "month" | "year";
1462
+ billingPeriod: components["schemas"]["SubscriptionPeriod"];
1463
+ allowancePeriod: components["schemas"]["SubscriptionPeriod"];
1047
1464
  redeemableTagSets: string[][];
1048
1465
  expiryInDays: number | null;
1049
1466
  price: number;
1050
- /** @enum {string} */
1051
- currency: "EUR" | "CHF";
1467
+ currency: components["schemas"]["Currency"];
1052
1468
  isActive: boolean;
1053
1469
  sortIndex: string | null;
1054
1470
  posters: {
@@ -1065,8 +1481,8 @@ interface components {
1065
1481
  createdAt: string | null;
1066
1482
  }[];
1067
1483
  };
1068
- /** SubscribeRequest */
1069
- SubscribeRequest: {
1484
+ /** SubscribeToSubscriptionBody */
1485
+ SubscribeToSubscriptionBody: {
1070
1486
  /** Format: email */
1071
1487
  email: string;
1072
1488
  firstName?: string;
@@ -1077,8 +1493,8 @@ interface components {
1077
1493
  /** Format: uri */
1078
1494
  cancelUrl: string;
1079
1495
  };
1080
- /** SubscribeResponse */
1081
- SubscribeResponse: {
1496
+ /** SubscribeToSubscriptionResponse */
1497
+ SubscribeToSubscriptionResponse: {
1082
1498
  /** Format: uri */
1083
1499
  checkoutUrl: string | null;
1084
1500
  sessionId: string;
@@ -1099,8 +1515,7 @@ interface components {
1099
1515
  periodStart: string;
1100
1516
  periodEnd: string;
1101
1517
  expiresAt: string | null;
1102
- /** @enum {string} */
1103
- status: "available" | "redeemed" | "expired";
1518
+ status: components["schemas"]["SubscriptionCreditStatus"];
1104
1519
  redeemedAt: string | null;
1105
1520
  orderId: string | null;
1106
1521
  createdAt: string | null;
@@ -1193,13 +1608,14 @@ interface components {
1193
1608
  joinedAt: string;
1194
1609
  items: {
1195
1610
  id: string;
1196
- metadata: unknown;
1611
+ metadata: {
1612
+ [key: string]: unknown;
1613
+ } | null;
1197
1614
  menuItems: {
1198
1615
  menuItemId: string;
1199
1616
  role: string | null;
1200
1617
  quantity: number;
1201
- /** @enum {string} */
1202
- unit: "grams" | "kilograms" | "liters" | "milliliters" | "pieces";
1618
+ unit: components["schemas"]["Unit"];
1203
1619
  }[];
1204
1620
  isPaid: boolean;
1205
1621
  }[];
@@ -1341,6 +1757,40 @@ interface components {
1341
1757
  diningTime: string;
1342
1758
  diningOffset: number;
1343
1759
  };
1760
+ /** SetOrderLeadSettledRequest */
1761
+ SetOrderLeadSettledRequest: {
1762
+ publicId: string;
1763
+ sessionId: string;
1764
+ /** Format: uuid */
1765
+ orderId: string;
1766
+ settled: boolean;
1767
+ };
1768
+ /** SetOrderLeadSettledResponse */
1769
+ SetOrderLeadSettledResponse: {
1770
+ /** Format: uuid */
1771
+ orderId: string;
1772
+ leadSettledAt: string | null;
1773
+ };
1774
+ /** AutoExtendFulfillmentIfExpiredRequest */
1775
+ AutoExtendFulfillmentIfExpiredRequest: {
1776
+ publicId: string;
1777
+ sessionId: string;
1778
+ /** Format: date-time */
1779
+ proposedFulfillmentAt: string;
1780
+ };
1781
+ /** AutoExtendFulfillmentIfExpiredResponse */
1782
+ AutoExtendFulfillmentIfExpiredResponse: {
1783
+ extended: boolean;
1784
+ teamOrderId: string;
1785
+ status: string;
1786
+ /** Format: date-time */
1787
+ fulfillmentAt: string;
1788
+ /** Format: date-time */
1789
+ deadlineAt: string | null;
1790
+ /** Format: date-time */
1791
+ previousFulfillmentAt: string;
1792
+ waitingCount: number;
1793
+ };
1344
1794
  /** SwitchFulfillmentTeamOrderRequest */
1345
1795
  SwitchFulfillmentTeamOrderRequest: {
1346
1796
  publicId: string;
@@ -1386,13 +1836,119 @@ interface components {
1386
1836
  updatedAt: unknown;
1387
1837
  };
1388
1838
  /** @enum {string} */
1389
- PaymentMethod: "card" | "cash" | "voucher";
1839
+ ActorType: "human" | "robot";
1840
+ /** @enum {string} */
1841
+ 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";
1842
+ /** @enum {string} */
1843
+ AreaBookingMode: "slot" | "day";
1844
+ /** @enum {string} */
1845
+ AreaBookingRequestSource: "website" | "phone" | "walk_in";
1846
+ /** @enum {string} */
1847
+ AreaBookingRequestStatus: "pending" | "approved" | "rejected" | "cancelled";
1848
+ /** @enum {string} */
1849
+ AreaBookingStatus: "confirmed" | "arrived" | "completed" | "cancelled" | "no_show";
1850
+ /** @enum {string} */
1851
+ ArticleEditorSaveState: "idle" | "saving" | "saved" | "error";
1852
+ /** @enum {string} */
1853
+ ArticleStatus: "draft" | "published";
1854
+ /** @enum {string} */
1855
+ BasketStatus: "active" | "abandoned" | "converted";
1856
+ /** @enum {string} */
1857
+ BeverageCategory: "wine" | "beer" | "coffee" | "tea" | "cocktail" | "juice" | "soft_drink" | "dairy_drink" | "spirit" | "water";
1858
+ /** @enum {string} */
1859
+ CancellationReason: "customer_request" | "restaurant_request";
1860
+ /** @enum {string} */
1861
+ ContactPreference: "email" | "phone" | "sms" | "none";
1862
+ /** @enum {string} */
1863
+ 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";
1864
+ /** @enum {string} */
1865
+ Currency: "EUR" | "CHF";
1866
+ /** @enum {string} */
1867
+ DepositTransactionType: "charged" | "refunded" | "forfeited" | "waived" | "credit_used";
1868
+ /** @enum {string} */
1869
+ DepositwareStatus: "available" | "issued" | "returned" | "lost" | "damaged" | "retired";
1870
+ /** @enum {string} */
1871
+ EntityOwnerType: "event" | "dish" | "beverage" | "venue" | "menu" | "menuSubscription" | "ritual";
1872
+ /** @enum {string} */
1873
+ IntegrationNotificationType: "order_created" | "order_cancelled" | "order_completed" | "team_order_created" | "reservation_created" | "reservation_confirmed" | "reservation_cancelled";
1874
+ /** @enum {string} */
1875
+ IntegrationType: "telegram";
1876
+ /** @enum {string} */
1877
+ InventoryAssetStatus: "available" | "in_use" | "maintenance" | "retired";
1878
+ /** @enum {string} */
1879
+ InventoryCategory: "depositware" | "furniture" | "equipment" | "utensil";
1880
+ /** @enum {string} */
1881
+ InvitationScenario: "new_user" | "already_member" | "former_employee";
1882
+ /** @enum {string} */
1883
+ 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";
1884
+ /** @enum {string} */
1885
+ MenuItemType: "dish" | "beverage";
1390
1886
  /** @enum {string} */
1391
1887
  FulfillmentType: "pickup" | "delivery";
1392
1888
  /** @enum {string} */
1889
+ OrderStatus: "pending" | "in_progress" | "ready" | "completed" | "cancelled";
1890
+ /** @enum {string} */
1891
+ PaymentMethod: "card" | "cash" | "voucher";
1892
+ /** @enum {string} */
1893
+ PaymentStatus: "unpaid" | "paid" | "refunded" | "authorized" | "cash_pending";
1894
+ /** @enum {string} */
1895
+ ScanTokenEntityType: "order" | "depositware";
1896
+ /** @enum {string} */
1897
+ SortOrder: "asc" | "desc";
1898
+ /** @enum {string} */
1899
+ SubscriberStatus: "active" | "paused" | "cancelled" | "past_due" | "trialing";
1900
+ /** @enum {string} */
1901
+ SubscriptionCreditStatus: "available" | "redeemed" | "expired";
1902
+ /** @enum {string} */
1903
+ SubscriptionPeriod: "week" | "month" | "year";
1904
+ /** @enum {string} */
1393
1905
  TeamOrderStatus: "draft" | "collecting" | "locked" | "placed" | "ready" | "completed" | "cancelled";
1394
1906
  /** @enum {string} */
1907
+ Unit: "grams" | "kilograms" | "liters" | "milliliters" | "pieces";
1908
+ /** @enum {string} */
1909
+ MentionEntityType: "dish" | "beverage" | "ingredient" | "menu" | "ritual";
1910
+ /** @enum {string} */
1911
+ MentionKind: "link" | "value";
1912
+ /** @enum {string} */
1913
+ PendingSuperadminTransferStatus: "pending_invite" | "accepted_awaiting_payment" | "completed" | "cancelled" | "expired";
1914
+ /** @enum {string} */
1915
+ BillingMode: "single_anchor" | "split";
1916
+ /** @enum {string} */
1917
+ VenueChargeKind: "base" | "addon";
1918
+ /** @enum {string} */
1919
+ AssetType: "image" | "video" | "document";
1920
+ /** @enum {string} */
1921
+ Jurisdiction: "DE" | "CH" | "FR" | "IT";
1922
+ /** @enum {string} */
1923
+ DayOfWeek: "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday";
1924
+ /** @enum {string} */
1925
+ SlotMode: "interval" | "duration";
1926
+ /** @enum {string} */
1927
+ TeamOrderPaymentStatus: "authorized" | "captured" | "cash_pending" | "cash_received" | "voided" | "failed";
1928
+ /** @enum {string} */
1929
+ FeatureCategory: "articles" | "auth" | "billing" | "core" | "customers" | "events" | "inventory" | "menus" | "orders" | "platform" | "promotions" | "reservations" | "settings" | "venues";
1930
+ /** @enum {string} */
1931
+ FeatureStatus: "backlog" | "in_development" | "released";
1932
+ /** @enum {string} */
1933
+ MentionFieldFormatter: "text" | "currency" | "integer" | "percentage" | "boolean";
1934
+ /** @enum {string} */
1935
+ PromotionBenefitType: "free_item" | "discount_percentage" | "discount_amount" | "buy_x_get_y";
1936
+ /** @enum {string} */
1937
+ ReservationPromotionStatus: "applied" | "redeemed" | "expired";
1938
+ /** @enum {string} */
1939
+ ReservationStatus: "pending" | "confirmed" | "arrived" | "seated" | "completed" | "cancelled" | "no_show";
1940
+ /** @enum {string} */
1941
+ VenueAssetType: "logomark" | "wordmark" | "combinationmark_horizontal" | "combinationmark_vertical";
1942
+ /** @enum {string} */
1943
+ VenueUserStatus: "pending" | "confirmed" | "revoked";
1944
+ /** @enum {string} */
1945
+ VenueType: "restaurant" | "fine_dining_restaurant" | "ghost_kitchen" | "food_truck";
1946
+ /** @enum {string} */
1395
1947
  ParticipantStatus: "browsing" | "authorized" | "cash_pending" | "placed" | "completed" | "cancelled";
1948
+ /** @enum {string} */
1949
+ EnumTrue: "true";
1950
+ /** @enum {string} */
1951
+ EnumFalse: "false";
1396
1952
  };
1397
1953
  responses: never;
1398
1954
  parameters: never;
@@ -1410,12 +1966,12 @@ type GetArticleResponse = schemas['FetchArticleResponse'];
1410
1966
  type PatchArticleRequest = schemas['EditArticleRequest'];
1411
1967
  type PatchArticleResponse = schemas['EditArticleResponse'];
1412
1968
  type FeatureImage = schemas['FeatureImage'];
1413
- type PatchFeatureImageRequest = schemas['PatchFeatureImageRequest'];
1969
+ type PatchFeatureImageRequest = schemas['PatchArticleFeatureImageBody'];
1414
1970
  /**
1415
1971
  * Args for `client.articles.uploadFeatureImage()`. The SDK accepts a
1416
1972
  * `Buffer` or `Uint8Array` payload + filename + content-type — it
1417
1973
  * builds the FormData internally so callers don't have to know about
1418
- * multipart wire encoding.
1974
+ * multipart wire encoding. Client ergonomics, no wire equivalent.
1419
1975
  */
1420
1976
  interface UploadFeatureImageArgs {
1421
1977
  data: Buffer | Uint8Array;
@@ -1433,13 +1989,12 @@ interface ListArticlesOptions {
1433
1989
  type Venue = schemas['GetVenueResponse'];
1434
1990
  type GetVenueResponse = schemas['GetVenueResponse'];
1435
1991
  /**
1436
- * Order fulfillment type - matches order_fulfillment_type enum in order3000 database.
1437
- * Keep in sync with apps/order3000/src/drizzle/enums.ts
1992
+ * Order fulfillment type — bound to the generated `FulfillmentType`
1993
+ * component (order3000's `order_fulfillment_type` enum, surfaced via
1994
+ * `openapi-typescript`). Never hand-rolled.
1438
1995
  */
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;
1996
+ type OrderFulfillmentType = schemas['FulfillmentType'];
1997
+ type PlaceOrderRequest = Omit<schemas['PlaceOrderRequest'], 'fulfillmentAt'> & {
1443
1998
  /**
1444
1999
  * When the order should be fulfilled (ISO 8601 datetime or Date).
1445
2000
  * Null / omitted in team-order mode — the Lead's pickup-time decision
@@ -1447,127 +2002,56 @@ type PlaceOrderRequest = Omit<schemas['PlaceOrderRequest'], 'taxAmount' | 'total
1447
2002
  * submit time.
1448
2003
  */
1449
2004
  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
2005
  };
1465
2006
  type PlaceOrderResponse = schemas['PlaceOrderResponse'];
1466
2007
  type MakeReservationRequest = schemas['MakeReservationRequest'];
1467
2008
  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
- }
2009
+ /**
2010
+ * Day of week — generated-bound to the `dayOfWeek` enum carried by the
2011
+ * events list schedule time-slot rows. The order3000 events output
2012
+ * schema is now precise (no more `.passthrough()`), so this derives
2013
+ * straight from the wire contract.
2014
+ */
2015
+ type DayOfWeek = NonNullable<NonNullable<schemas['FetchEventsResponse'][number]['schedule']>['scheduleTimeSlots'][number]['dayOfWeek']>;
2016
+ /**
2017
+ * A single event time slot — the one slot shape, used by both the weekly
2018
+ * recurring `timeSlots[]` and the per-date `scheduleOverrides[].timeSlots[]`.
2019
+ * `dayOfWeek` is present only on weekly slots (optional); every field is
2020
+ * optional because the underlying join row may be absent, so consumers
2021
+ * resolving "the slots bookable on date X" must guard. Generated-bound to
2022
+ * the events list response's `timeSlots[]` element.
2023
+ */
2024
+ type TimeSlot = schemas['FetchEventsResponse'][number]['timeSlots'][number];
2025
+ /**
2026
+ * A date-specific schedule override for an event. Generated-bound to the
2027
+ * events list response's `scheduleOverrides[]` element.
2028
+ */
2029
+ type ScheduleOverride = schemas['FetchEventsResponse'][number]['scheduleOverrides'][number];
2030
+ /**
2031
+ * An event's schedule (rrule, validity window, slot-generation settings,
2032
+ * plus the nested override / time-slot rows). Generated-bound to the
2033
+ * non-null `schedule` object on the events list response.
2034
+ *
2035
+ * `intervalDuration` / `duration` are milliseconds (codebase convention).
2036
+ */
2037
+ type Schedule = NonNullable<schemas['FetchEventsResponse'][number]['schedule']>;
2038
+ /**
2039
+ * An event poster (image/video/document asset attached to an event).
2040
+ * Generated-bound to the events list response's `posters[]` element.
2041
+ */
2042
+ type EventPoster = schemas['FetchEventsResponse'][number]['posters'][number];
2043
+ /**
2044
+ * A promotion attached to an event. Generated-bound to the events list
2045
+ * response's `promotions[]` element.
2046
+ */
2047
+ type Promotion = schemas['FetchEventsResponse'][number]['promotions'][number];
2048
+ /**
2049
+ * A single event as returned by the list endpoint, with schedule,
2050
+ * posters, promotions, time slots and overrides inlined. Generated-bound
2051
+ * to the events list response element — request-shape drift is now
2052
+ * impossible.
2053
+ */
2054
+ type Event = schemas['FetchEventsResponse'][number];
1571
2055
  interface ListEventsOptions {
1572
2056
  /** Include private events in the response */
1573
2057
  includePrivate?: boolean;
@@ -1582,11 +2066,20 @@ interface ListEventsOptions {
1582
2066
  /** Filter for events occurring within N days from today */
1583
2067
  upcomingWithinDays?: number;
1584
2068
  }
1585
- type ListEventsResponse = Event[];
1586
- type MenuItemType = 'dish' | 'beverage';
1587
2069
  /**
1588
- * Crop area coordinates for assets.
1589
- * Re-exported from @kolaveri/molecules Cropper component for type consistency.
2070
+ * The events list response — generated-bound to `FetchEventsResponse`
2071
+ * (an array of {@link Event}). Never hand-rolled.
2072
+ */
2073
+ type ListEventsResponse = schemas['FetchEventsResponse'];
2074
+ /**
2075
+ * Menu item discriminant — generated-bound to the `type` enum on the
2076
+ * menu response's `items[]` element. The `fetchMenu` output schema is
2077
+ * now precise; never hand-rolled.
2078
+ */
2079
+ type MenuItemType = NonNullable<schemas['FetchMenuResponse']['items']>[number]['type'];
2080
+ /**
2081
+ * Crop area coordinates for assets. Shared UI helper (mirrors the
2082
+ * `@kolaveri/molecules` Cropper type) — not a wire DTO.
1590
2083
  */
1591
2084
  interface CropArea {
1592
2085
  x: number;
@@ -1594,599 +2087,220 @@ interface CropArea {
1594
2087
  width: number;
1595
2088
  height: number;
1596
2089
  }
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
- }
2090
+ /**
2091
+ * A menu — generated-bound to `FetchMenuResponse`. order3000's
2092
+ * `fetchMenu` action always projects the flat, hydrated client view:
2093
+ * `assets[]` (menu-level) and every `items[].dish.assets[]` /
2094
+ * `items[].beverage.assets[]` are resolved to flat assets carrying
2095
+ * their Supabase `publicUrl`; the raw `*_assets` junction relations are
2096
+ * stripped at source and never surface on the wire. Bound here via the
2097
+ * same alias-derivation style as `Basket`/`BasketItem`.
2098
+ */
2099
+ type Menu = NonNullable<schemas['FetchMenuResponse']>;
2100
+ /**
2101
+ * A single menu item — generated-bound to the element type of
2102
+ * `Menu.items[]` (present when `expand=items`).
2103
+ */
2104
+ type MenuItem = NonNullable<Menu['items']>[number];
2105
+ /**
2106
+ * The dish carried by a menu item — generated-bound to `MenuItem.dish`.
2107
+ */
2108
+ type MenuDish = NonNullable<MenuItem['dish']>;
2109
+ /**
2110
+ * The beverage carried by a menu item — generated-bound to
2111
+ * `MenuItem.beverage`.
2112
+ */
2113
+ type MenuBeverage = NonNullable<MenuItem['beverage']>;
2114
+ /**
2115
+ * A flat, hydrated asset — generated-bound to the element type of the
2116
+ * always-present menu-level `Menu.assets[]`. Identical in shape to the
2117
+ * per-item `dish.assets[]` / `beverage.assets[]` elements (all are the
2118
+ * same hydrated asset projection with a resolved `publicUrl`).
2119
+ */
2120
+ type MenuAsset = NonNullable<Menu['assets']>[number];
1665
2121
  interface GetMenuOptions {
1666
2122
  /** Expand related resources (items, assets) */
1667
2123
  expand?: ('items' | 'assets')[];
1668
2124
  }
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
- }
2125
+ /**
2126
+ * Wire shape for a single menu bundle, bound to the generated OpenAPI
2127
+ * schema (`FetchMenuBundlesResponse`) — never hand-rolled. The
2128
+ * authoritative contract is order3000's `fetchMenuBundles` output
2129
+ * schema, surfaced here via `openapi-typescript`. Notably `price` is
2130
+ * `{ amount, currency }`, not a bare number.
2131
+ */
2132
+ type MenuBundle = schemas['FetchMenuBundlesResponse'][number];
2133
+ type MenuBundleDeposit = NonNullable<MenuBundle['deposit']>;
2134
+ /**
2135
+ * A single event as returned by the `getByAccessor` endpoint, with
2136
+ * optional schedule / menus / posters expansions. Generated-bound to the
2137
+ * `FetchEventResponse` component (the order3000 `fetchEvent` output
2138
+ * schema is now precise) — request-shape drift is impossible.
2139
+ */
2140
+ type EventByAccessor = schemas['FetchEventResponse'];
2141
+ /**
2142
+ * The `getByAccessor` event's schedule sub-object, including the optional
2143
+ * `scheduleTimeSlots[]` expansion. Generated-bound to the non-null
2144
+ * `schedule` on `FetchEventResponse`. Kept as a distinct public SDK type
2145
+ * name (re-exported as `O3KScheduleWithTimeSlots`) for downstream
2146
+ * stability; structurally it is the by-accessor schedule shape.
2147
+ */
2148
+ type ScheduleWithTimeSlots = NonNullable<EventByAccessor['schedule']>;
2149
+ /**
2150
+ * A single regular time slot on the by-accessor event's schedule.
2151
+ * Generated-bound to the element type of the (optional)
2152
+ * `schedule.scheduleTimeSlots[]` array on `FetchEventResponse`.
2153
+ */
2154
+ type ScheduleTimeSlot = NonNullable<ScheduleWithTimeSlots['scheduleTimeSlots']>[number];
2155
+ /**
2156
+ * A menu summary attached to a by-accessor event. Generated-bound to the
2157
+ * element type of `FetchEventResponse`'s optional `menus[]` array.
2158
+ */
2159
+ type EventMenu = NonNullable<EventByAccessor['menus']>[number];
1750
2160
  interface GetEventOptions {
1751
2161
  /** Expand related resources (schedule, timeSlots, menus, posters) */
1752
2162
  expand?: ('schedule' | 'timeSlots' | 'menus' | 'posters')[];
1753
2163
  }
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
- }
2164
+ type AreaBookingMode = schemas['FetchAreaResponse']['bookingMode'];
2165
+ type AreaBookingRequestStatus = schemas['SubmitAreaBookingRequestResponse']['status'];
2166
+ type AreaBookingRequestSource = schemas['SubmitAreaBookingRequestResponse']['source'];
2167
+ type AreaBookingStatus = schemas['FetchAreaBookingsResponse'][number]['status'];
2168
+ type AreaAsset = NonNullable<schemas['FetchAreaResponse']['assets']>[number];
2169
+ type AreaFeature = NonNullable<schemas['FetchAreaResponse']['features']>[number];
2170
+ type Area = schemas['FetchAreaResponse'];
1795
2171
  interface GetAreaOptions {
1796
2172
  expand?: 'assets'[];
1797
2173
  }
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
- }
2174
+ type AreaAvailabilityWindow = schemas['GetAreaAvailabilityResponse']['occupied'][number];
2175
+ type AreaAvailabilityResponse = schemas['GetAreaAvailabilityResponse'];
1811
2176
  interface GetAreaAvailabilityOptions {
1812
2177
  /** YYYY-MM-DD — defaults to today */
1813
2178
  from?: string;
1814
2179
  /** YYYY-MM-DD — defaults to today + 90d */
1815
2180
  to?: string;
1816
2181
  }
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';
2182
+ type SubmitAreaBookingRequestPayload = schemas['SubmitAreaBookingPayload'];
2183
+ type AreaBookingRequestResponse = schemas['SubmitAreaBookingRequestResponse'];
1852
2184
  /**
1853
- * Unit of measurement for portion tracking.
2185
+ * Canonical basket — generated-bound to the `FetchBasketResponse`
2186
+ * component (the order3000 `fetchBasket` output schema is now precise).
2187
+ * Returned by `baskets.get(sessionId)`.
1854
2188
  */
1855
- type Unit = 'grams' | 'kilograms' | 'liters' | 'milliliters' | 'pieces';
2189
+ type Basket = NonNullable<schemas['FetchBasketResponse']>;
1856
2190
  /**
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".
2191
+ * Basket lifecycle status — generated-bound to the `status` enum on
2192
+ * `FetchBasketResponse`. No longer a bare wire `string`.
1861
2193
  */
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
- }
2194
+ type BasketStatus = Basket['status'];
2195
+ type Currency = schemas['BasketTotals']['currency'];
1878
2196
  /**
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.
2197
+ * Unit of measurement for portion tracking. Bound to the generated
2198
+ * add-to-basket request shape.
1882
2199
  */
1883
- interface BasketItemDeposit {
1884
- depositwareTemplateId: string;
1885
- name: Record<string, string>;
1886
- amount: number;
1887
- currency: Currency;
1888
- }
2200
+ type Unit = NonNullable<schemas['AddToBasketRequest']['menuItems'][number]['unit']>;
1889
2201
  /**
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.
2202
+ * A single basket item — generated-bound to the element type of
2203
+ * `FetchBasketResponse.items[]`. One physical product (e.g. a TiffinBox
2204
+ * with rice, curry, and sides); `Basket.itemCount` is the COUNT of basket
2205
+ * items, not a sum of menu-item quantities.
1895
2206
  */
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
- }
2207
+ type BasketItem = Basket['items'][number];
2208
+ /**
2209
+ * Reference to a menu item within a basket item — generated-bound to the
2210
+ * element type of `BasketItem.menuItems[]`. Each ref carries its own
2211
+ * portion size (quantity + unit) for precise tracking like
2212
+ * "100g rice, 80g curry".
2213
+ */
2214
+ type BasketItemMenuItemRef = BasketItem['menuItems'][number];
2215
+ /**
2216
+ * Free-form per-basket-item metadata bag — generated-bound to the
2217
+ * (nullable) `metadata` object on `FetchBasketResponse.items[]`. The wire
2218
+ * contract types this as an open `{ [key: string]: unknown }` record;
2219
+ * thamarai narrows individual keys (`type`, `mode`, `upsell`, `price`) at
2220
+ * its own transform boundary.
2221
+ */
2222
+ type BasketItemMetadata = NonNullable<BasketItem['metadata']>;
2223
+ /**
2224
+ * Deposit info on a basket item — generated-bound to the (nullable)
2225
+ * `deposit` object on `FetchBasketResponse.items[]`. order3000 refuses
2226
+ * any inbound deposit money amount; this object is outbound-only, for UI
2227
+ * display.
2228
+ */
2229
+ type BasketItemDeposit = NonNullable<BasketItem['deposit']>;
1930
2230
  /**
1931
- * Order workflow status (matches `order_status` enum in order3000).
2231
+ * Order workflow status — generated-bound to the `status` enum on
2232
+ * `FetchLatestOrderResponse` (order3000's `order_status`). No longer a
2233
+ * bare wire `string`.
1932
2234
  */
1933
- type OrderStatus = 'pending' | 'in_progress' | 'ready' | 'completed' | 'cancelled';
2235
+ type OrderStatus = NonNullable<schemas['FetchLatestOrderResponse']>['status'];
1934
2236
  /**
1935
- * Payment workflow status (matches `payment_status` enum in order3000).
2237
+ * Payment workflow status — generated-bound to the `paymentStatus` enum
2238
+ * on `FetchLatestOrderResponse` (order3000's `payment_status`). No longer
2239
+ * a bare wire `string`.
1936
2240
  */
1937
- type PaymentStatus = 'unpaid' | 'authorized' | 'cash_pending' | 'paid' | 'refunded' | 'failed';
2241
+ type PaymentStatus = NonNullable<schemas['FetchLatestOrderResponse']>['paymentStatus'];
1938
2242
  /**
1939
2243
  * The most recent non-team order for a guest session, with the captured
1940
2244
  * 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`.
2245
+ * `orders.getLatest(sessionId)` — `null` when the session has no
2246
+ * qualifying order (fresh sessionIds and team-only sessions both fall
2247
+ * through to `null`). Generated-bound to the `FetchLatestOrderResponse`
2248
+ * component (the order3000 `fetchLatestOrder` output schema is now
2249
+ * precise).
1946
2250
  */
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
- }
2251
+ type LatestOrder = NonNullable<schemas['FetchLatestOrderResponse']>;
1969
2252
  /**
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.
2253
+ * One "I'll return N of this template" declaration. Bound to the
2254
+ * generated basket-totals `returnable` element — clients never specify
2255
+ * a deposit money amount.
1973
2256
  */
1974
- interface DeclaredReturn {
1975
- depositwareTemplateId: string;
1976
- count: number;
1977
- }
2257
+ type DeclaredReturn = schemas['BasketTotals']['returnable'][number];
1978
2258
  /**
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.
2259
+ * Canonical basket totals (all cents), bound to the generated
2260
+ * `BasketTotals` component. The single figure clients read for every
2261
+ * displayed monetary value.
1982
2262
  */
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
- }
2263
+ type BasketTotals = schemas['BasketTotals'];
2002
2264
  /**
2003
2265
  * Request to add an item to the basket.
2004
2266
  *
2005
2267
  * Menu items can optionally include portion information (quantity/unit).
2006
2268
  * If not provided, defaults to the menu item's configured portion size.
2269
+ * `venueAccessor` is injected by the SDK resource layer, so it's omitted
2270
+ * from the public caller shape.
2007
2271
  */
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;
2272
+ type AddToBasketRequest = Omit<schemas['AddToBasketRequest'], 'venueId'>;
2273
+ type AddToBasketResponse = schemas['AddToBasketResponse'];
2274
+ type RemoveFromBasketResponse = schemas['RemoveFromBasketResponse'];
2275
+ type CreatePaymentIntentRequest = Omit<schemas['CreatePaymentIntentRequest'], 'venueAccessor' | 'fulfillmentAt'> & {
2043
2276
  /**
2044
2277
  * Optional — null / omitted in team-order mode. The Lead's pickup-time
2045
2278
  * decision is stored on the team row and backfilled onto each child
2046
2279
  * order at submit time.
2047
2280
  */
2048
2281
  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
- }
2282
+ };
2283
+ type CreatePaymentIntentResponse = schemas['CreatePaymentIntentResponse'];
2284
+ type CreateDeltaPaymentIntentRequest = Omit<schemas['CreateDeltaPaymentIntentRequest'], 'venueAccessor'>;
2285
+ type CreateDeltaPaymentIntentResponse = schemas['CreateDeltaPaymentIntentResponse'];
2286
+ type ReduceDeltaPaymentIntentRequest = Omit<schemas['ReduceDeltaPaymentIntentRequest'], 'venueAccessor'>;
2287
+ type ReduceDeltaPaymentIntentResponse = schemas['ReduceDeltaPaymentIntentResponse'];
2288
+ type ConfirmOrderRequest = Omit<schemas['ConfirmOrderRequest'], 'venueAccessor' | 'orderId'>;
2289
+ type ConfirmOrderResponse = schemas['ConfirmOrderResponse'];
2290
+ type SubscriptionPeriod = schemas['GetSubscriptionResponse']['billingPeriod'];
2291
+ /**
2292
+ * Subscriber lifecycle status — generated-bound to the `subscriber_status`
2293
+ * pgEnum, surfaced via order3000's `FetchSubscribersResponse[].status`
2294
+ * (and `fetchMenuSubscription`). openapi-typescript hoists the shared
2295
+ * enum into `components.schemas['SubscriberStatus']`.
2296
+ */
2297
+ type SubscriberStatus = schemas['SubscriberStatus'];
2298
+ type SubscriptionCreditStatus = schemas['GetSubscriptionCreditsResponse'][number]['status'];
2299
+ type MenuSubscriptionPoster = NonNullable<schemas['GetSubscriptionResponse']['posters']>[number];
2300
+ type MenuSubscription = schemas['GetSubscriptionResponse'];
2301
+ type SubscribeRequest = schemas['SubscribeToSubscriptionBody'];
2302
+ type SubscribeResponse = schemas['SubscribeToSubscriptionResponse'];
2303
+ type SubscriptionCredit = schemas['GetSubscriptionCreditsResponse'][number];
2190
2304
 
2191
2305
  declare class AreasResource extends BaseResource {
2192
2306
  constructor(tokenManager: TokenManager, baseUrl: string);
@@ -3035,7 +3149,7 @@ interface MenuItemRow {
3035
3149
  dish_id: string | null;
3036
3150
  beverage_id: string | null;
3037
3151
  price_adjustment: number;
3038
- currency: CurrencyCode;
3152
+ currency: Currency;
3039
3153
  is_active: boolean;
3040
3154
  is_featured: boolean;
3041
3155
  tags: string[] | null;