order3000 0.20.0 → 0.22.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.cjs CHANGED
@@ -134,6 +134,38 @@ class BaseResource {
134
134
  }
135
135
  return response.json();
136
136
  }
137
+ /**
138
+ * Multipart counterpart to `request`. Skips the JSON Content-Type
139
+ * default — `fetch` sets `multipart/form-data; boundary=…`
140
+ * automatically when the body is a `FormData`. Use for binary uploads
141
+ * (e.g. article feature image).
142
+ */
143
+ async requestMultipart(method, path, formData) {
144
+ const token = await this.tokenManager.getToken();
145
+ const venueId = this.tokenManager.getVenueId();
146
+ const url = `${this.baseUrl}/venues/${venueId}${this.resourcePath}${path}`;
147
+ const response = await fetch(url, {
148
+ method,
149
+ headers: {
150
+ Authorization: `Bearer ${token}`
151
+ // Intentionally NO Content-Type — fetch sets the boundary.
152
+ },
153
+ body: formData,
154
+ cache: "no-store",
155
+ signal: AbortSignal.timeout(36e4)
156
+ });
157
+ if (!response.ok) {
158
+ let body = "";
159
+ try {
160
+ body = await response.text();
161
+ } catch {
162
+ }
163
+ throw new Error(
164
+ `HTTP ${response.status}: ${response.statusText}${body ? ` \u2014 ${body}` : ""}`
165
+ );
166
+ }
167
+ return response.json();
168
+ }
137
169
  }
138
170
 
139
171
  class AreasResource extends BaseResource {
@@ -211,6 +243,79 @@ class ArticlesResource extends BaseResource {
211
243
  const path = qs ? `?${qs}` : "";
212
244
  return this.request("GET", path);
213
245
  }
246
+ /**
247
+ * Fetch a single article by id or accessor within the active venue.
248
+ * Returns the full row including the TipTap `content` document.
249
+ */
250
+ async getByAccessor(idOrAccessor) {
251
+ return this.request("GET", `/${encodeURIComponent(idOrAccessor)}`);
252
+ }
253
+ /**
254
+ * Partial-update an article. Locale-keyed fields (slug, title, excerpt)
255
+ * merge at the locale level — `{ slug: { en: 'foo' } }` updates `en`
256
+ * without touching `de`. Plain scalar / array fields fully replace.
257
+ * Returns the resulting article.
258
+ */
259
+ async patch(idOrAccessor, body) {
260
+ return this.request(
261
+ "PATCH",
262
+ `/${encodeURIComponent(idOrAccessor)}`,
263
+ body
264
+ );
265
+ }
266
+ /**
267
+ * Read the article's resolved feature image — asset id, public URL,
268
+ * matched locale, plus the FULL per-locale caption + alt records.
269
+ * Returns null when the article has no feature image yet (the wire
270
+ * 404 is mapped here for ergonomic null-checking on the caller side).
271
+ */
272
+ async getFeatureImage(idOrAccessor, options) {
273
+ const params = new URLSearchParams();
274
+ if (options?.locale) params.set("locale", options.locale);
275
+ const qs = params.toString();
276
+ const path = `/${encodeURIComponent(idOrAccessor)}/feature-image${qs ? `?${qs}` : ""}`;
277
+ try {
278
+ return await this.request("GET", path);
279
+ } catch (err) {
280
+ if (err instanceof Error && err.message.includes("HTTP 404")) {
281
+ return null;
282
+ }
283
+ throw err;
284
+ }
285
+ }
286
+ /**
287
+ * Upload a new feature image. Replaces any existing feature image
288
+ * for the venue's primary locale (the previous one is demoted to
289
+ * `role='inline'`). The SDK builds the multipart body internally —
290
+ * pass a Buffer/Uint8Array, the original filename, and the MIME
291
+ * type.
292
+ */
293
+ async uploadFeatureImage(idOrAccessor, file) {
294
+ const form = new FormData();
295
+ form.append(
296
+ "file",
297
+ new Blob([new Uint8Array(file.data)], { type: file.contentType }),
298
+ file.filename
299
+ );
300
+ return this.requestMultipart(
301
+ "POST",
302
+ `/${encodeURIComponent(idOrAccessor)}/feature-image`,
303
+ form
304
+ );
305
+ }
306
+ /**
307
+ * Update per-locale caption / alt on the article's feature image.
308
+ * Locale-keyed merge — `{ caption: { en: '…' } }` does not touch
309
+ * `de`. Plain-string locale values are server-side wrapped into
310
+ * minimal TipTap docs (the storage shape).
311
+ */
312
+ async patchFeatureImage(idOrAccessor, body) {
313
+ return this.request(
314
+ "PATCH",
315
+ `/${encodeURIComponent(idOrAccessor)}/feature-image`,
316
+ body
317
+ );
318
+ }
214
319
  }
215
320
 
216
321
  class BasketsResource extends BaseResource {
@@ -796,6 +901,44 @@ class TeamOrdersResource {
796
901
  }
797
902
  }
798
903
 
904
+ class VenuesResource {
905
+ constructor(tokenManager, baseUrl) {
906
+ this.tokenManager = tokenManager;
907
+ this.baseUrl = baseUrl;
908
+ }
909
+ /**
910
+ * Fetch a venue by its UUID or its accessor (slug). The path accepts
911
+ * either form; the server resolves transparently.
912
+ *
913
+ * Powers the order3000-cli's `venues use <accessor>` validation step
914
+ * — the CLI hits this to prove the accessor exists and to cache the
915
+ * resolved UUID + display fields locally.
916
+ */
917
+ async getByAccessor(idOrAccessor) {
918
+ const token = await this.tokenManager.getToken();
919
+ const url = `${this.baseUrl}/venues/${encodeURIComponent(idOrAccessor)}`;
920
+ const response = await fetch(url, {
921
+ method: "GET",
922
+ headers: {
923
+ Authorization: `Bearer ${token}`,
924
+ "Content-Type": "application/json"
925
+ },
926
+ cache: "no-store"
927
+ });
928
+ if (!response.ok) {
929
+ let body = "";
930
+ try {
931
+ body = await response.text();
932
+ } catch {
933
+ }
934
+ throw new Error(
935
+ `HTTP ${response.status}: ${response.statusText}${body ? ` \u2014 ${body}` : ""}`
936
+ );
937
+ }
938
+ return response.json();
939
+ }
940
+ }
941
+
799
942
  var __defProp$2 = Object.defineProperty;
800
943
  var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
801
944
  var __publicField$2 = (obj, key, value) => __defNormalProp$2(obj, typeof key !== "symbol" ? key + "" : key, value);
@@ -1130,6 +1273,7 @@ class Order3000Client {
1130
1273
  __publicField(this, "reservations");
1131
1274
  __publicField(this, "subscriptions");
1132
1275
  __publicField(this, "teamOrders");
1276
+ __publicField(this, "venues");
1133
1277
  __publicField(this, "realtime");
1134
1278
  __publicField(this, "baseUrl");
1135
1279
  __publicField(this, "tokenManager");
@@ -1160,6 +1304,7 @@ class Order3000Client {
1160
1304
  this.baseUrl
1161
1305
  );
1162
1306
  this.teamOrders = new TeamOrdersResource(this.tokenManager, this.baseUrl);
1307
+ this.venues = new VenuesResource(this.tokenManager, this.baseUrl);
1163
1308
  this.realtime = new RealtimeManager(this.tokenManager, this.baseUrl);
1164
1309
  }
1165
1310
  }
package/dist/client.d.cts CHANGED
@@ -50,7 +50,14 @@ declare abstract class BaseResource {
50
50
  protected readonly baseUrl: string;
51
51
  protected readonly resourcePath: string;
52
52
  constructor(tokenManager: TokenManager, baseUrl: string, resourcePath: string);
53
- protected request<T>(method: 'GET' | 'POST' | 'DELETE', path: string, data?: unknown, cacheOptions?: RequestCacheOptions): Promise<T>;
53
+ protected request<T>(method: 'GET' | 'POST' | 'PATCH' | 'DELETE', path: string, data?: unknown, cacheOptions?: RequestCacheOptions): Promise<T>;
54
+ /**
55
+ * Multipart counterpart to `request`. Skips the JSON Content-Type
56
+ * default — `fetch` sets `multipart/form-data; boundary=…`
57
+ * automatically when the body is a `FormData`. Use for binary uploads
58
+ * (e.g. article feature image).
59
+ */
60
+ protected requestMultipart<T>(method: 'POST' | 'PATCH' | 'PUT', path: string, formData: FormData): Promise<T>;
54
61
  }
55
62
 
56
63
  interface components {
@@ -218,9 +225,24 @@ interface components {
218
225
  createdAt: string | null;
219
226
  updatedAt: string | null;
220
227
  };
228
+ /**
229
+ * FeatureImage
230
+ * @description An article's resolved feature image. `caption` / `alt` are per-locale TipTap docs (PATCH accepts plain strings — server normalises).
231
+ */
232
+ FeatureImage: {
233
+ id: string;
234
+ publicUrl: string | null;
235
+ locale: string;
236
+ caption: {
237
+ [key: string]: unknown;
238
+ } | null;
239
+ alt: {
240
+ [key: string]: unknown;
241
+ } | null;
242
+ };
221
243
  /**
222
244
  * Article
223
- * @description A venue's article. `content` is a TipTap JSON document; treat it as opaque on the wire.
245
+ * @description A venue's article. `content` is a TipTap JSON document; treat it as opaque on the wire. `featureImage` is resolved per-locale with a fallback to the venue's primary locale.
224
246
  */
225
247
  Article: {
226
248
  id: string;
@@ -234,21 +256,115 @@ interface components {
234
256
  };
235
257
  excerpt: {
236
258
  [key: string]: string;
237
- };
259
+ } | null;
238
260
  content: {
239
261
  [key: string]: unknown;
240
- };
262
+ } | null;
241
263
  tags: string[];
242
- featuredImageId: string | null;
243
264
  isActive: boolean;
244
265
  isFeatured: boolean;
245
266
  priority: number;
246
- publishedAt: string | null;
247
- createdAt: string | null;
248
- updatedAt: string | null;
267
+ publishedAt: unknown;
268
+ createdAt: unknown;
269
+ updatedAt: unknown;
270
+ featureImage: components["schemas"]["FeatureImage"] | null;
249
271
  };
250
272
  /** ListArticlesResponse */
251
273
  ListArticlesResponse: components["schemas"]["Article"][];
274
+ /**
275
+ * GetArticleResponse
276
+ * @description A venue's article. `content` is a TipTap JSON document; treat it as opaque on the wire. `featureImage` is resolved per-locale with a fallback to the venue's primary locale.
277
+ */
278
+ GetArticleResponse: {
279
+ id: string;
280
+ venueId: string;
281
+ accessor: string;
282
+ slug: {
283
+ [key: string]: string;
284
+ };
285
+ title: {
286
+ [key: string]: string;
287
+ };
288
+ excerpt: {
289
+ [key: string]: string;
290
+ } | null;
291
+ content: {
292
+ [key: string]: unknown;
293
+ } | null;
294
+ tags: string[];
295
+ isActive: boolean;
296
+ isFeatured: boolean;
297
+ priority: number;
298
+ publishedAt: unknown;
299
+ createdAt: unknown;
300
+ updatedAt: unknown;
301
+ featureImage: components["schemas"]["FeatureImage"] | null;
302
+ };
303
+ /** PatchArticleRequest */
304
+ PatchArticleRequest: {
305
+ slug?: {
306
+ [key: string]: string;
307
+ };
308
+ title?: {
309
+ [key: string]: string;
310
+ };
311
+ excerpt?: {
312
+ [key: string]: string;
313
+ };
314
+ content?: {
315
+ [key: string]: unknown;
316
+ };
317
+ tags?: string[];
318
+ isActive?: boolean;
319
+ isFeatured?: boolean;
320
+ priority?: number;
321
+ };
322
+ /**
323
+ * PatchArticleResponse
324
+ * @description A venue's article. `content` is a TipTap JSON document; treat it as opaque on the wire. `featureImage` is resolved per-locale with a fallback to the venue's primary locale.
325
+ */
326
+ PatchArticleResponse: {
327
+ id: string;
328
+ venueId: string;
329
+ accessor: string;
330
+ slug: {
331
+ [key: string]: string;
332
+ };
333
+ title: {
334
+ [key: string]: string;
335
+ };
336
+ excerpt: {
337
+ [key: string]: string;
338
+ } | null;
339
+ content: {
340
+ [key: string]: unknown;
341
+ } | null;
342
+ tags: string[];
343
+ isActive: boolean;
344
+ isFeatured: boolean;
345
+ priority: number;
346
+ publishedAt: unknown;
347
+ createdAt: unknown;
348
+ updatedAt: unknown;
349
+ featureImage: components["schemas"]["FeatureImage"] | null;
350
+ };
351
+ /** UploadFeatureImageRequest */
352
+ UploadFeatureImageRequest: {
353
+ /** @description Image file (multipart/form-data field) */
354
+ file: unknown;
355
+ };
356
+ /**
357
+ * PatchFeatureImageRequest
358
+ * @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`.
359
+ */
360
+ PatchFeatureImageRequest: {
361
+ caption?: {
362
+ [key: string]: unknown;
363
+ };
364
+ alt?: {
365
+ [key: string]: unknown;
366
+ };
367
+ };
252
368
  /**
253
369
  * AddToBasketRequest
254
370
  * @description Add an item to the shopping basket
@@ -1097,6 +1213,23 @@ interface components {
1097
1213
  teamOrderId: string;
1098
1214
  deliveryAddressId: string;
1099
1215
  };
1216
+ /**
1217
+ * GetVenueResponse
1218
+ * @description A venue. The public API exposes only the minimal id + accessor + naming + locale fields the CLI's `venues use` / `auth whoami` consume.
1219
+ */
1220
+ GetVenueResponse: {
1221
+ id: string;
1222
+ accessor: string;
1223
+ officialName: string;
1224
+ legalName: string;
1225
+ shortName: string;
1226
+ brandName: string;
1227
+ primaryLocale: string;
1228
+ supportedLocales: string[];
1229
+ timezone: string;
1230
+ createdAt: unknown;
1231
+ updatedAt: unknown;
1232
+ };
1100
1233
  };
1101
1234
  responses: never;
1102
1235
  parameters: never;
@@ -1110,6 +1243,22 @@ type CreateEventRequest = schemas['CreateEventRequest'];
1110
1243
  type CreateEventResponse = schemas['CreateEventResponse'];
1111
1244
  type Article = schemas['Article'];
1112
1245
  type ListArticlesResponse = schemas['ListArticlesResponse'];
1246
+ type GetArticleResponse = schemas['GetArticleResponse'];
1247
+ type PatchArticleRequest = schemas['PatchArticleRequest'];
1248
+ type PatchArticleResponse = schemas['PatchArticleResponse'];
1249
+ type FeatureImage = schemas['FeatureImage'];
1250
+ type PatchFeatureImageRequest = schemas['PatchFeatureImageRequest'];
1251
+ /**
1252
+ * Args for `client.articles.uploadFeatureImage()`. The SDK accepts a
1253
+ * `Buffer` or `Uint8Array` payload + filename + content-type — it
1254
+ * builds the FormData internally so callers don't have to know about
1255
+ * multipart wire encoding.
1256
+ */
1257
+ interface UploadFeatureImageArgs {
1258
+ data: Buffer | Uint8Array;
1259
+ filename: string;
1260
+ contentType: string;
1261
+ }
1113
1262
  interface ListArticlesOptions {
1114
1263
  /** Only return articles whose `tags` array contains this value. */
1115
1264
  tag?: string;
@@ -1118,6 +1267,8 @@ interface ListArticlesOptions {
1118
1267
  /** When `true`, include articles whose `isActive` is `false`. Default `false`. */
1119
1268
  includeInactive?: boolean;
1120
1269
  }
1270
+ type Venue = schemas['Venue'];
1271
+ type GetVenueResponse = schemas['GetVenueResponse'];
1121
1272
  /**
1122
1273
  * Order fulfillment type - matches order_fulfillment_type enum in order3000 database.
1123
1274
  * Keep in sync with apps/order3000/src/drizzle/enums.ts
@@ -1907,6 +2058,42 @@ declare class ArticlesResource extends BaseResource {
1907
2058
  * for human-friendly node addressing.
1908
2059
  */
1909
2060
  list(options?: ListArticlesOptions): Promise<ListArticlesResponse>;
2061
+ /**
2062
+ * Fetch a single article by id or accessor within the active venue.
2063
+ * Returns the full row including the TipTap `content` document.
2064
+ */
2065
+ getByAccessor(idOrAccessor: string): Promise<Article>;
2066
+ /**
2067
+ * Partial-update an article. Locale-keyed fields (slug, title, excerpt)
2068
+ * merge at the locale level — `{ slug: { en: 'foo' } }` updates `en`
2069
+ * without touching `de`. Plain scalar / array fields fully replace.
2070
+ * Returns the resulting article.
2071
+ */
2072
+ patch(idOrAccessor: string, body: PatchArticleRequest): Promise<Article>;
2073
+ /**
2074
+ * Read the article's resolved feature image — asset id, public URL,
2075
+ * matched locale, plus the FULL per-locale caption + alt records.
2076
+ * Returns null when the article has no feature image yet (the wire
2077
+ * 404 is mapped here for ergonomic null-checking on the caller side).
2078
+ */
2079
+ getFeatureImage(idOrAccessor: string, options?: {
2080
+ locale?: string;
2081
+ }): Promise<FeatureImage | null>;
2082
+ /**
2083
+ * Upload a new feature image. Replaces any existing feature image
2084
+ * for the venue's primary locale (the previous one is demoted to
2085
+ * `role='inline'`). The SDK builds the multipart body internally —
2086
+ * pass a Buffer/Uint8Array, the original filename, and the MIME
2087
+ * type.
2088
+ */
2089
+ uploadFeatureImage(idOrAccessor: string, file: UploadFeatureImageArgs): Promise<FeatureImage>;
2090
+ /**
2091
+ * Update per-locale caption / alt on the article's feature image.
2092
+ * Locale-keyed merge — `{ caption: { en: '…' } }` does not touch
2093
+ * `de`. Plain-string locale values are server-side wrapped into
2094
+ * minimal TipTap docs (the storage shape).
2095
+ */
2096
+ patchFeatureImage(idOrAccessor: string, body: PatchFeatureImageRequest): Promise<FeatureImage>;
1910
2097
  }
1911
2098
 
1912
2099
  declare class BasketsResource extends BaseResource {
@@ -2592,6 +2779,27 @@ declare class TeamOrdersResource {
2592
2779
  }): Promise<UpdateDeliveryAddressResponse>;
2593
2780
  }
2594
2781
 
2782
+ /**
2783
+ * Reads at the venue level. Doesn't extend `BaseResource` because that
2784
+ * class hard-codes a `/venues/{venueId}/<resourcePath>` URL template,
2785
+ * which assumes a venue-scoped sub-resource. Venues themselves are AT
2786
+ * `/venues/:venueIdOrAccessor` directly.
2787
+ */
2788
+ declare class VenuesResource {
2789
+ private readonly tokenManager;
2790
+ private readonly baseUrl;
2791
+ constructor(tokenManager: TokenManager, baseUrl: string);
2792
+ /**
2793
+ * Fetch a venue by its UUID or its accessor (slug). The path accepts
2794
+ * either form; the server resolves transparently.
2795
+ *
2796
+ * Powers the order3000-cli's `venues use <accessor>` validation step
2797
+ * — the CLI hits this to prove the accessor exists and to cache the
2798
+ * resolved UUID + display fields locally.
2799
+ */
2800
+ getByAccessor(idOrAccessor: string): Promise<Venue>;
2801
+ }
2802
+
2595
2803
  type RealtimeEvent = 'INSERT' | 'UPDATE' | 'DELETE' | '*';
2596
2804
  type RealtimeRow = {
2597
2805
  [key: string]: any;
@@ -2763,6 +2971,7 @@ declare class Order3000Client {
2763
2971
  reservations: ReservationsResource;
2764
2972
  subscriptions: SubscriptionsResource;
2765
2973
  teamOrders: TeamOrdersResource;
2974
+ venues: VenuesResource;
2766
2975
  realtime: RealtimeManager;
2767
2976
  private readonly baseUrl;
2768
2977
  private readonly tokenManager;
@@ -2770,4 +2979,4 @@ declare class Order3000Client {
2770
2979
  }
2771
2980
 
2772
2981
  export { Order3000Client, fulfillmentTypeEnum, getScheduleInfo, participantStatusEnum, paymentMethodEnum, teamOrderStatusEnum };
2773
- export type { AddToBasketRequest, AddToBasketResponse, Area, AreaAsset, AreaAvailabilityResponse, AreaAvailabilityWindow, AreaBookingMode, AreaBookingRequestResponse, AreaBookingRequestSource, AreaBookingRequestStatus, AreaBookingStatus, AreaFeature, Article, Basket, BasketItem, BasketItemDeposit, BasketItemMenuItemRef, BasketItemMetadata, BasketStatus, BasketTotals, CancelTeamOrderResponse, ConfirmOrderRequest, ConfirmOrderResponse, CreateDeltaPaymentIntentRequest, CreateDeltaPaymentIntentResponse, CreatePaymentIntentRequest, CreatePaymentIntentResponse, CreateTeamOrderRequest, CreateTeamOrderResponse, CropArea, Currency, DayOfWeek, DeclaredReturn, Event, EventByAccessor, EventMenu, EventPoster, EventRow, ExtendDeadlineResponse as ExtendTeamOrderDeadlineResponse, FetchTeamOrderResponse, GetAreaAvailabilityOptions, GetAreaOptions, GetEventOptions, GetMenuOptions, JoinTeamOrderRequest, JoinTeamOrderResponse, LatestOrder, ListArticlesOptions, ListArticlesResponse, ListEventsOptions, ListEventsResponse, Menu, MenuAsset, MenuBeverage, MenuBundle, MenuBundleDeposit, MenuDish, MenuItem, MenuItemRow, MenuItemType, MenuSubscription, MenuSubscriptionPoster, Order3000ClientConfig, OrderFulfillmentType, OrderStatus, PaymentStatus, PlaceOrderRequest, Promotion, RealtimeConfig, RealtimeEvent, RealtimeSubscription, RemoveFromBasketResponse, Schedule, ScheduleInfo, ScheduleOverride, ScheduleOverrideRow, ScheduleRow, ScheduleTimeSlot, ScheduleWithTimeSlots, SubmitAreaBookingRequestPayload, SubmitTeamOrderResponse, SubscribeRequest, SubscribeResponse, SubscriberStatus, SubscriptionCredit, SubscriptionCreditStatus, SubscriptionOptions, SubscriptionPeriod, SwitchFulfillmentResponse as SwitchTeamOrderFulfillmentResponse, TeamDeliveryAddress, TeamOrderBasketItem, TeamOrderBasketItemMenuItemRef, FulfillmentType as TeamOrderFulfillmentType, TeamOrderParticipant, ParticipantStatus as TeamOrderParticipantStatus, PaymentMethod as TeamOrderPaymentMethod, TeamOrderStatus, ThresholdCheck as TeamOrderThresholdCheck, TimeSlot, Unit, UpdateDeliveryAddressResponse as UpdateTeamOrderDeliveryAddressResponse };
2982
+ export type { AddToBasketRequest, AddToBasketResponse, Area, AreaAsset, AreaAvailabilityResponse, AreaAvailabilityWindow, AreaBookingMode, AreaBookingRequestResponse, AreaBookingRequestSource, AreaBookingRequestStatus, AreaBookingStatus, AreaFeature, Article, Basket, BasketItem, BasketItemDeposit, BasketItemMenuItemRef, BasketItemMetadata, BasketStatus, BasketTotals, CancelTeamOrderResponse, ConfirmOrderRequest, ConfirmOrderResponse, CreateDeltaPaymentIntentRequest, CreateDeltaPaymentIntentResponse, CreatePaymentIntentRequest, CreatePaymentIntentResponse, CreateTeamOrderRequest, CreateTeamOrderResponse, CropArea, Currency, DayOfWeek, DeclaredReturn, Event, EventByAccessor, EventMenu, EventPoster, EventRow, ExtendDeadlineResponse as ExtendTeamOrderDeadlineResponse, FeatureImage, FetchTeamOrderResponse, GetAreaAvailabilityOptions, GetAreaOptions, GetArticleResponse, GetEventOptions, GetMenuOptions, GetVenueResponse, JoinTeamOrderRequest, JoinTeamOrderResponse, LatestOrder, ListArticlesOptions, ListArticlesResponse, ListEventsOptions, ListEventsResponse, Menu, MenuAsset, MenuBeverage, MenuBundle, MenuBundleDeposit, MenuDish, MenuItem, MenuItemRow, MenuItemType, MenuSubscription, MenuSubscriptionPoster, Order3000ClientConfig, OrderFulfillmentType, OrderStatus, PatchArticleRequest, PatchArticleResponse, PatchFeatureImageRequest, PaymentStatus, PlaceOrderRequest, Promotion, RealtimeConfig, RealtimeEvent, RealtimeSubscription, RemoveFromBasketResponse, Schedule, ScheduleInfo, ScheduleOverride, ScheduleOverrideRow, ScheduleRow, ScheduleTimeSlot, ScheduleWithTimeSlots, SubmitAreaBookingRequestPayload, SubmitTeamOrderResponse, SubscribeRequest, SubscribeResponse, SubscriberStatus, SubscriptionCredit, SubscriptionCreditStatus, SubscriptionOptions, SubscriptionPeriod, SwitchFulfillmentResponse as SwitchTeamOrderFulfillmentResponse, TeamDeliveryAddress, TeamOrderBasketItem, TeamOrderBasketItemMenuItemRef, FulfillmentType as TeamOrderFulfillmentType, TeamOrderParticipant, ParticipantStatus as TeamOrderParticipantStatus, PaymentMethod as TeamOrderPaymentMethod, TeamOrderStatus, ThresholdCheck as TeamOrderThresholdCheck, TimeSlot, Unit, UpdateDeliveryAddressResponse as UpdateTeamOrderDeliveryAddressResponse, UploadFeatureImageArgs, Venue };