@acms-subir/client 0.1.17 → 0.1.19
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/README.md +15 -5
- package/dist/index.d.ts +20 -1
- package/dist/index.js +15 -3
- package/dist/types.d.ts +111 -6
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -44,12 +44,13 @@ language. Update the site before shipping an app build with a newer client.
|
|
|
44
44
|
| `pages(opts)` | Page **summaries**, with pagination; use `page()` for sections |
|
|
45
45
|
| `search(text, opts)` | Top matches in `posts`, `pages` and `events`, plus `more` per group; `types`, `collection`, `limit` (1–20, default 5). Blank text resolves empty without a request |
|
|
46
46
|
| `events(opts)` | Occurrences with `from`, `to`, `calendar`, `tag`, `excludeTag`, `q`, pagination |
|
|
47
|
-
| `event(slug, opts)` |
|
|
47
|
+
| `event(slug, opts)` | One event by slug, whatever its date (`GET /events/{slug}`; on sites older than core 0.3.40, the first match in the requested window) |
|
|
48
|
+
| `eventDetail(slug, { on? })` | The event and its next occurrence, or the one on `on` (`YYYY-MM-DD`) |
|
|
48
49
|
| `calendars()` | Public calendars |
|
|
49
50
|
| `resources(opts)`, `resource(slug, opts)` | Public resources; slug lookup scans list pages |
|
|
50
51
|
| `availability(opts)` | Required `resource`, `link`; optional `from`, `days`, `minutes` |
|
|
51
|
-
| `rsvpStatus(slug, { start })` | One event date's RSVP status: `open` or `reason` (`disabled`, `ended`, `closed` past the event's deadline, `cancelled`, `full`), `closesAt` (when RSVPs to the date close, or `null`: open until it ends), live `going`/`left
|
|
52
|
-
| `book(opts)` | Resource booking or RSVP input (`RsvpInput` for an RSVP), optional `idempotencyKey`; sends the client's `locale` (or `opts.locale`) for its emails |
|
|
52
|
+
| `rsvpStatus(slug, { start })` | One event date's RSVP status: `open` or `reason` (`disabled`, `ended`, `closed` past the event's deadline, `cancelled`, `full`), `closesAt` (when RSVPs to the date close, or `null`: open until it ends), live `going`/`left` (held waitlist spots count as taken), `maxSeats` for one RSVP right now, `autoConfirm`, `waitlist` (`enabled`: a full date takes places in line; `waiting` people for `seats` seats; `maxSeats` for one place in line), and `form` (questions and `version`, or `null`). `start` is the occurrence's start exactly as `events()` returns it (a UTC ISO string such as `2026-10-05T14:00:00.000Z`). Never cached |
|
|
53
|
+
| `book(opts)` | Resource booking or RSVP input (`RsvpInput` for an RSVP; `waitlist: true` joins a full date's waitlist, status `waitlisted`), optional `idempotencyKey`; sends the client's `locale` (or `opts.locale`) for its emails |
|
|
53
54
|
| `openapi()` | Raw OpenAPI document |
|
|
54
55
|
| `registerDevice({ token, platform, locale?, topics?, channels? })` | Register or refresh an Expo push token (call on every app start); `{ created, device }`. `channels`: Android channels the app created (e.g. `['urgent']`) |
|
|
55
56
|
| `updateDevice(token, { topics?, locale?, channels? })` | Change a device's topics, language or channels |
|
|
@@ -59,7 +60,8 @@ language. Update the site before shipping an app build with a newer client.
|
|
|
59
60
|
| `live()` | Live video: the current broadcast (`snapshot` or `null`), `serverNow` and the owner's `display` choices. Never cached; 404 while `site.features.live` is false |
|
|
60
61
|
| `announcements({ kind?, pinned?, page?, limit? })`, `announcement(id)`, `paginate.announcements()` | Announcements up right now in the client's language, newest first (`pinned: true`: the banners, urgent first); 404 while `site.features.announcements` is false |
|
|
61
62
|
| `form(id)`, `submitForm(id, { answers, version?, idempotencyKey? })` | A published form's questions; send answers (checkbox groups as arrays). Each call makes one key; retries reuse it |
|
|
62
|
-
| `manageBooking(token)`, `cancelBooking(token)` | The booker's own booking from its `manageToken`, and cancelling it; `can` says what is allowed |
|
|
63
|
+
| `manageBooking(token)`, `cancelBooking(token)` | The booker's own booking from its `manageToken`, and cancelling it (or leaving a waitlist, or releasing a held spot); `can` says what is allowed. A waitlisted RSVP has `booking.position` (its place in line), an offered one `booking.holdUntil` |
|
|
64
|
+
| `confirmBooking(token)` | Take a spot the waitlist offered (`can.confirm`): `confirmed`, or `pending` when RSVPs need approval. 410 once `holdUntil` passed. Core 0.3.40 or later |
|
|
63
65
|
| `rescheduleAvailability(token, { from?, days?, minutes? })`, `rescheduleBooking(token, { start, minutes? })` | Open times for moving it (its own time counts as free), then the move |
|
|
64
66
|
| `bookingIcs(token)` | The booking as an iCalendar file (string) |
|
|
65
67
|
| `requestGuestCode(email)`, `guestSignIn({ email, code, deviceName? })`, `guestBookings(guestToken, { when? })`, `guestSignOut(guestToken)` | Guest sign-in for "My bookings" |
|
|
@@ -127,6 +129,14 @@ if (status.open) {
|
|
|
127
129
|
// result.manageToken changes or cancels it later (manageBooking, cancelBooking), like the email's link:
|
|
128
130
|
// keep it in secure storage only.
|
|
129
131
|
console.log(result.booking.status);
|
|
132
|
+
} else if (status.reason === 'full' && status.waitlist.enabled) {
|
|
133
|
+
// a place in line (status 'waitlisted', no seats); when a spot opens the site emails them and holds it
|
|
134
|
+
// for 24 hours: then manageBooking shows status 'offered' and holdUntil, and confirmBooking(token) takes it
|
|
135
|
+
const result = await client.book({
|
|
136
|
+
event: date.event.slug, start: date.start, seats: 2, name: 'Example Guest', email: 'guest@example.com', waitlist: true,
|
|
137
|
+
...(status.form ? { formVersion: status.form.version } : {}), idempotencyKey: crypto.randomUUID(),
|
|
138
|
+
});
|
|
139
|
+
console.log(result.booking.status);
|
|
130
140
|
}
|
|
131
141
|
|
|
132
142
|
const controller = new AbortController();
|
|
@@ -141,7 +151,7 @@ failures, 5xx and 429 responses at most twice (three attempts total), with
|
|
|
141
151
|
250/500ms backoff and at least the server's `Retry-After` delay (seconds or HTTP
|
|
142
152
|
date). A wait that would outlast `timeoutMs` throws the 429 straight away, with
|
|
143
153
|
`retryAfter`. One-shot writes (guest code requests and sign-in, cancelling and
|
|
144
|
-
moving a booking, guest sign-out) are never repeated automatically: on a
|
|
154
|
+
moving a booking, confirming a held spot, guest sign-out) are never repeated automatically: on a
|
|
145
155
|
network error, check the state before trying again. Booking retries always
|
|
146
156
|
reuse the same serialized body and UUID. By default each `book()` call creates
|
|
147
157
|
a key using `crypto.randomUUID`, falling back to a Math.random UUID v4 where
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Site, Theme, Page, Content, Post, ContentList, SearchResults, Links, Form, FormReceipt, FormResponseInput, ManagedBooking, RescheduleInput, ManageAvailabilityQuery, GuestCodeSent, GuestToken, GuestBookings, GuestBookingsQuery, GuestSignedOut, Events, Event, Calendars, Resources, Resource, Availability, BookingInput, BookingResult, RsvpStatus, Device, DeviceInput, DeviceUpdate, DeviceRegistration, DeviceRemoved, PushTopics, LiveStatus, Announcements, AnnouncementDetail } from './types.js';
|
|
1
|
+
import type { Site, Theme, Page, Content, Post, ContentList, SearchResults, Links, Form, FormReceipt, FormResponseInput, ManagedBooking, RescheduleInput, ManageAvailabilityQuery, GuestCodeSent, GuestToken, GuestBookings, GuestBookingsQuery, GuestSignedOut, Events, Event, Calendars, Resources, Resource, Availability, BookingInput, BookingResult, RsvpStatus, Device, DeviceInput, DeviceUpdate, DeviceRegistration, DeviceRemoved, PushTopics, LiveStatus, Announcements, AnnouncementDetail, EventDetail } from './types.js';
|
|
2
2
|
export { AcmsError, isAcmsError } from './errors.js';
|
|
3
3
|
export type * from './types.js';
|
|
4
4
|
export * from './editor.js';
|
|
@@ -125,6 +125,10 @@ export declare const endpoints: {
|
|
|
125
125
|
readonly method: "GET";
|
|
126
126
|
readonly path: "/events";
|
|
127
127
|
};
|
|
128
|
+
readonly eventDetail: {
|
|
129
|
+
readonly method: "GET";
|
|
130
|
+
readonly path: "/events/{slug}";
|
|
131
|
+
};
|
|
128
132
|
readonly calendars: {
|
|
129
133
|
readonly method: "GET";
|
|
130
134
|
readonly path: "/calendars";
|
|
@@ -197,6 +201,10 @@ export declare const endpoints: {
|
|
|
197
201
|
readonly method: "POST";
|
|
198
202
|
readonly path: "/bookings/manage/cancel";
|
|
199
203
|
};
|
|
204
|
+
readonly confirmBooking: {
|
|
205
|
+
readonly method: "POST";
|
|
206
|
+
readonly path: "/bookings/manage/confirm";
|
|
207
|
+
};
|
|
200
208
|
readonly rescheduleAvailability: {
|
|
201
209
|
readonly method: "GET";
|
|
202
210
|
readonly path: "/bookings/manage/availability";
|
|
@@ -244,7 +252,12 @@ export interface AcmsClient {
|
|
|
244
252
|
/** Ranked matches across posts, pages and events, the top few per group. Requires `site.features.search`. */
|
|
245
253
|
search(q: string, o?: SearchOptions): Promise<SearchResults>;
|
|
246
254
|
events(o?: EventOptions): Promise<Events>;
|
|
255
|
+
/** One event by slug, whatever its date (older sites: searched in the window). */
|
|
247
256
|
event(slug: string, o?: EventOptions): Promise<Event>;
|
|
257
|
+
/** One event by slug or id with its next occurrence, or the one on `on` (YYYY-MM-DD, like the website's ?on=). */
|
|
258
|
+
eventDetail(slug: string, o?: RequestOptions & {
|
|
259
|
+
on?: string;
|
|
260
|
+
}): Promise<EventDetail>;
|
|
248
261
|
calendars(o?: RequestOptions): Promise<Calendars>;
|
|
249
262
|
resources(o?: ListOptions): Promise<Resources>;
|
|
250
263
|
resource(slug: string, o?: RequestOptions): Promise<Resource>;
|
|
@@ -286,7 +299,13 @@ export interface AcmsClient {
|
|
|
286
299
|
}, o?: RequestOptions): Promise<FormReceipt>;
|
|
287
300
|
/** The booker's own booking, from its private token (`manageToken`). Never cached. Requires `site.features.bookingChanges`. */
|
|
288
301
|
manageBooking(token: string, o?: RequestOptions): Promise<ManagedBooking>;
|
|
302
|
+
/** Cancel it; for an RSVP on a waitlist, leave the line or release a held spot. */
|
|
289
303
|
cancelBooking(token: string, o?: RequestOptions): Promise<ManagedBooking>;
|
|
304
|
+
/**
|
|
305
|
+
* Take a spot an RSVP's waitlist offered (`booking.status` `offered`, `can.confirm`): confirmed, or
|
|
306
|
+
* pending when the event approves RSVPs. A spot past its `holdUntil` was released (410). Requires core 0.3.40.
|
|
307
|
+
*/
|
|
308
|
+
confirmBooking(token: string, o?: RequestOptions): Promise<ManagedBooking>;
|
|
290
309
|
/** Open times for moving the booking (its own time counts as free). */
|
|
291
310
|
rescheduleAvailability(token: string, q?: ManageAvailabilityQuery, o?: RequestOptions): Promise<Availability>;
|
|
292
311
|
rescheduleBooking(token: string, input: RescheduleInput, o?: RequestOptions): Promise<ManagedBooking>;
|
package/dist/index.js
CHANGED
|
@@ -7,7 +7,7 @@ export const endpoints = {
|
|
|
7
7
|
home: { method: 'GET', path: '/pages/home' }, page: { method: 'GET', path: '/pages/{slug}' },
|
|
8
8
|
content: { method: 'GET', path: '/content' }, contentById: { method: 'GET', path: '/content/{id}' },
|
|
9
9
|
search: { method: 'GET', path: '/search' },
|
|
10
|
-
events: { method: 'GET', path: '/events' }, calendars: { method: 'GET', path: '/calendars' },
|
|
10
|
+
events: { method: 'GET', path: '/events' }, eventDetail: { method: 'GET', path: '/events/{slug}' }, calendars: { method: 'GET', path: '/calendars' },
|
|
11
11
|
// an event date's RSVP status: live seats and questions (never cached); RSVP with book()
|
|
12
12
|
rsvpStatus: { method: 'GET', path: '/events/{slug}/rsvp' },
|
|
13
13
|
resources: { method: 'GET', path: '/resources' }, availability: { method: 'GET', path: '/availability' },
|
|
@@ -23,6 +23,8 @@ export const endpoints = {
|
|
|
23
23
|
announcements: { method: 'GET', path: '/announcements' }, announcement: { method: 'GET', path: '/announcements/{id}' },
|
|
24
24
|
// the booker's own booking: its private token goes in the Booking-Token header
|
|
25
25
|
manageBooking: { method: 'GET', path: '/bookings/manage' }, cancelBooking: { method: 'POST', path: '/bookings/manage/cancel' },
|
|
26
|
+
// take a spot an RSVP's waitlist offered
|
|
27
|
+
confirmBooking: { method: 'POST', path: '/bookings/manage/confirm' },
|
|
26
28
|
rescheduleAvailability: { method: 'GET', path: '/bookings/manage/availability' }, rescheduleBooking: { method: 'POST', path: '/bookings/manage/reschedule' },
|
|
27
29
|
bookingIcs: { method: 'GET', path: '/bookings/manage/ics' },
|
|
28
30
|
// guest sign-in for "My bookings" (emailed code → guest token)
|
|
@@ -30,7 +32,7 @@ export const endpoints = {
|
|
|
30
32
|
guestBookings: { method: 'GET', path: '/guest/bookings' }, guestSignOut: { method: 'POST', path: '/guest/revoke' },
|
|
31
33
|
};
|
|
32
34
|
// site: its legal links; pushTopics: topic names
|
|
33
|
-
const localized = new Set(['home', 'page', 'content', 'contentById', 'search', 'events', 'rsvpStatus', 'site', 'pushTopics', 'announcements', 'announcement']);
|
|
35
|
+
const localized = new Set(['home', 'page', 'content', 'contentById', 'search', 'events', 'rsvpStatus', 'site', 'pushTopics', 'announcements', 'announcement', 'eventDetail']);
|
|
34
36
|
// localized since core 0.3.32; older sites answer ?locale= with a 400, so ask them again without it
|
|
35
37
|
const lateLocalized = new Set(['site', 'pushTopics']);
|
|
36
38
|
function uuid() {
|
|
@@ -264,8 +266,17 @@ export function createClient(options) {
|
|
|
264
266
|
return request('contentById', o, { kind: 'post' }, item.id);
|
|
265
267
|
throw new AcmsError(404, 'not_found', 'Post not found.');
|
|
266
268
|
},
|
|
267
|
-
|
|
269
|
+
eventDetail: (slug, o = {}) => request('eventDetail', o, { on: o.on }, slug),
|
|
270
|
+
/** One event by slug, whatever its date. Sites older than core 0.3.40 have no such route: then it searches occurrences in the window (default: next 30 days). */
|
|
268
271
|
async event(slug, o = {}) {
|
|
272
|
+
try {
|
|
273
|
+
return (await request('eventDetail', o, {}, slug)).event;
|
|
274
|
+
}
|
|
275
|
+
catch (e) {
|
|
276
|
+
// a real "not found" comes as JSON with code not_found; an older site answers its HTML 404 page
|
|
277
|
+
if (!(e instanceof AcmsError) || e.status !== 404 || e.code === 'not_found')
|
|
278
|
+
throw e;
|
|
279
|
+
}
|
|
269
280
|
for await (const item of paginate.events(o))
|
|
270
281
|
if (item.event.slug === slug)
|
|
271
282
|
return item.event;
|
|
@@ -311,6 +322,7 @@ export function createClient(options) {
|
|
|
311
322
|
},
|
|
312
323
|
manageBooking: (token, o = {}) => request('manageBooking', o, {}, undefined, undefined, undefined, bookingAuth(token)),
|
|
313
324
|
cancelBooking: (token, o = {}) => request('cancelBooking', o, {}, undefined, undefined, undefined, bookingAuth(token)),
|
|
325
|
+
confirmBooking: (token, o = {}) => request('confirmBooking', o, {}, undefined, undefined, undefined, bookingAuth(token)),
|
|
314
326
|
rescheduleAvailability: (token, q = {}, o = {}) => request('rescheduleAvailability', o, { from: q.from, days: q.days, minutes: q.minutes }, undefined, undefined, undefined, bookingAuth(token)),
|
|
315
327
|
rescheduleBooking: (token, input, o = {}) => request('rescheduleBooking', o, {}, undefined, input, undefined, bookingAuth(token)),
|
|
316
328
|
bookingIcs: (token, o = {}) => request('bookingIcs', o, {}, undefined, undefined, undefined, { ...bookingAuth(token), text: true }),
|
package/dist/types.d.ts
CHANGED
|
@@ -223,6 +223,7 @@ export type Event = {
|
|
|
223
223
|
"maxSeats": number;
|
|
224
224
|
"closesAt": string | null;
|
|
225
225
|
"closeBefore": number;
|
|
226
|
+
"waitlist": boolean;
|
|
226
227
|
"form"?: {
|
|
227
228
|
"title": string;
|
|
228
229
|
"intro": string;
|
|
@@ -315,6 +316,7 @@ export type Events = {
|
|
|
315
316
|
"maxSeats": number;
|
|
316
317
|
"closesAt": string | null;
|
|
317
318
|
"closeBefore": number;
|
|
319
|
+
"waitlist": boolean;
|
|
318
320
|
"form"?: {
|
|
319
321
|
"title": string;
|
|
320
322
|
"intro": string;
|
|
@@ -351,6 +353,93 @@ export type Events = {
|
|
|
351
353
|
};
|
|
352
354
|
}>;
|
|
353
355
|
};
|
|
356
|
+
export type EventDetail = {
|
|
357
|
+
"locale": string | null;
|
|
358
|
+
"occurrence": ({
|
|
359
|
+
"id": string;
|
|
360
|
+
"start": string;
|
|
361
|
+
"end": string;
|
|
362
|
+
"allDay": boolean;
|
|
363
|
+
"cancelled": boolean;
|
|
364
|
+
}) | (null);
|
|
365
|
+
"event": {
|
|
366
|
+
"id": string;
|
|
367
|
+
"slug": string;
|
|
368
|
+
"title": string;
|
|
369
|
+
"excerpt": string;
|
|
370
|
+
"status": "draft" | "scheduled" | "published" | "archived";
|
|
371
|
+
"cancelled": boolean;
|
|
372
|
+
"featured": boolean;
|
|
373
|
+
"start": string;
|
|
374
|
+
"end": string;
|
|
375
|
+
"allDay": boolean;
|
|
376
|
+
"timezone": string;
|
|
377
|
+
"rrule": string;
|
|
378
|
+
"exdates": Array<string>;
|
|
379
|
+
"cancelledDates": Array<string>;
|
|
380
|
+
"location": {
|
|
381
|
+
"name": string;
|
|
382
|
+
"address": string;
|
|
383
|
+
"url": string;
|
|
384
|
+
"lat": number | null;
|
|
385
|
+
"lng": number | null;
|
|
386
|
+
"placeId": string;
|
|
387
|
+
"showMap": boolean;
|
|
388
|
+
"mapImage": string;
|
|
389
|
+
"mapImageDark": string;
|
|
390
|
+
};
|
|
391
|
+
"cta": {
|
|
392
|
+
"label": string;
|
|
393
|
+
"href": string;
|
|
394
|
+
"style": "primary" | "outline";
|
|
395
|
+
};
|
|
396
|
+
"tags": Array<string>;
|
|
397
|
+
"fields": {
|
|
398
|
+
[key: string]: string;
|
|
399
|
+
};
|
|
400
|
+
"rsvp": {
|
|
401
|
+
"enabled": boolean;
|
|
402
|
+
"capacity": number;
|
|
403
|
+
"autoConfirm": boolean;
|
|
404
|
+
"maxSeats": number;
|
|
405
|
+
"closesAt": string | null;
|
|
406
|
+
"closeBefore": number;
|
|
407
|
+
"waitlist": boolean;
|
|
408
|
+
"form"?: {
|
|
409
|
+
"title": string;
|
|
410
|
+
"intro": string;
|
|
411
|
+
"submitLabel": string;
|
|
412
|
+
"confirmation": string;
|
|
413
|
+
"fields": Array<{
|
|
414
|
+
"id": string;
|
|
415
|
+
"type": "text" | "textarea" | "email" | "phone" | "number" | "select" | "checkbox" | "date" | "radio" | "checkboxes" | "url" | "consent" | "heading";
|
|
416
|
+
"label": string;
|
|
417
|
+
"required": boolean;
|
|
418
|
+
"help": string;
|
|
419
|
+
"options": Array<string>;
|
|
420
|
+
"placeholder"?: string;
|
|
421
|
+
"width"?: "full" | "half";
|
|
422
|
+
"allowOther"?: boolean;
|
|
423
|
+
}>;
|
|
424
|
+
};
|
|
425
|
+
};
|
|
426
|
+
"url": string;
|
|
427
|
+
"icsUrl": string;
|
|
428
|
+
"repeats": string;
|
|
429
|
+
"image": string;
|
|
430
|
+
"imageAlt": string;
|
|
431
|
+
"updatedAt": string;
|
|
432
|
+
"calendars": Array<{
|
|
433
|
+
"id": string;
|
|
434
|
+
"slug": string;
|
|
435
|
+
"name": string;
|
|
436
|
+
"color": string;
|
|
437
|
+
}>;
|
|
438
|
+
"notify": {
|
|
439
|
+
"changes": Array<string>;
|
|
440
|
+
};
|
|
441
|
+
};
|
|
442
|
+
};
|
|
354
443
|
export type SearchResults = {
|
|
355
444
|
"locale": string | null;
|
|
356
445
|
"query": string;
|
|
@@ -456,6 +545,7 @@ export type SearchResults = {
|
|
|
456
545
|
"maxSeats": number;
|
|
457
546
|
"closesAt": string | null;
|
|
458
547
|
"closeBefore": number;
|
|
548
|
+
"waitlist": boolean;
|
|
459
549
|
"form"?: {
|
|
460
550
|
"title": string;
|
|
461
551
|
"intro": string;
|
|
@@ -623,6 +713,12 @@ export type RsvpStatus = {
|
|
|
623
713
|
"maxSeats": number;
|
|
624
714
|
"autoConfirm": boolean;
|
|
625
715
|
"closesAt": (string) | (null);
|
|
716
|
+
"waitlist": {
|
|
717
|
+
"enabled": boolean;
|
|
718
|
+
"waiting": number;
|
|
719
|
+
"seats": number;
|
|
720
|
+
"maxSeats": number;
|
|
721
|
+
};
|
|
626
722
|
"form": ({
|
|
627
723
|
"version": string;
|
|
628
724
|
"title": string;
|
|
@@ -647,7 +743,7 @@ export type ManagedBooking = {
|
|
|
647
743
|
"id": string;
|
|
648
744
|
"reference": string;
|
|
649
745
|
"kind": "booking" | "rsvp";
|
|
650
|
-
"status": "pending" | "confirmed" | "declined" | "cancelled";
|
|
746
|
+
"status": "pending" | "confirmed" | "declined" | "cancelled" | "waitlisted" | "offered" | "expired";
|
|
651
747
|
"start": string;
|
|
652
748
|
"end": string;
|
|
653
749
|
"allDay": boolean;
|
|
@@ -660,6 +756,8 @@ export type ManagedBooking = {
|
|
|
660
756
|
[key: string]: string;
|
|
661
757
|
};
|
|
662
758
|
"createdAt": string;
|
|
759
|
+
"position": (number) | (null);
|
|
760
|
+
"holdUntil": (string) | (null);
|
|
663
761
|
};
|
|
664
762
|
"title": string;
|
|
665
763
|
"location": string;
|
|
@@ -682,6 +780,7 @@ export type ManagedBooking = {
|
|
|
682
780
|
"can": {
|
|
683
781
|
"cancel": boolean;
|
|
684
782
|
"reschedule": boolean;
|
|
783
|
+
"confirm": boolean;
|
|
685
784
|
"cutoffHours": number;
|
|
686
785
|
"closed": boolean;
|
|
687
786
|
};
|
|
@@ -708,7 +807,7 @@ export type GuestBookings = {
|
|
|
708
807
|
"id": string;
|
|
709
808
|
"reference": string;
|
|
710
809
|
"kind": "booking" | "rsvp";
|
|
711
|
-
"status": "pending" | "confirmed" | "declined" | "cancelled";
|
|
810
|
+
"status": "pending" | "confirmed" | "declined" | "cancelled" | "waitlisted" | "offered" | "expired";
|
|
712
811
|
"start": string;
|
|
713
812
|
"end": string;
|
|
714
813
|
"seats": number;
|
|
@@ -718,6 +817,7 @@ export type GuestBookings = {
|
|
|
718
817
|
"can": {
|
|
719
818
|
"cancel": boolean;
|
|
720
819
|
"reschedule": boolean;
|
|
820
|
+
"confirm": boolean;
|
|
721
821
|
"cutoffHours": number;
|
|
722
822
|
"closed": boolean;
|
|
723
823
|
};
|
|
@@ -795,7 +895,7 @@ export type BookingResult = {
|
|
|
795
895
|
"booking": {
|
|
796
896
|
"id": string;
|
|
797
897
|
"kind": "booking" | "block" | "rsvp";
|
|
798
|
-
"status": "pending" | "confirmed" | "declined" | "cancelled";
|
|
898
|
+
"status": "pending" | "confirmed" | "declined" | "cancelled" | "waitlisted" | "offered" | "expired";
|
|
799
899
|
"name": string;
|
|
800
900
|
"email": string;
|
|
801
901
|
"phone": string;
|
|
@@ -1162,6 +1262,8 @@ export type EditorDocument = {
|
|
|
1162
1262
|
"maxSeats": number;
|
|
1163
1263
|
"closesAt": string | null;
|
|
1164
1264
|
"closeBefore": number;
|
|
1265
|
+
"notifyStaff": boolean;
|
|
1266
|
+
"waitlist": boolean;
|
|
1165
1267
|
"form"?: {
|
|
1166
1268
|
"title": string;
|
|
1167
1269
|
"intro": string;
|
|
@@ -1355,7 +1457,7 @@ export type EditorMediaList = {
|
|
|
1355
1457
|
export type EditorBooking = {
|
|
1356
1458
|
"id": string;
|
|
1357
1459
|
"kind": "booking" | "block" | "rsvp";
|
|
1358
|
-
"status": "pending" | "confirmed" | "declined" | "cancelled";
|
|
1460
|
+
"status": "pending" | "confirmed" | "declined" | "cancelled" | "waitlisted" | "offered" | "expired";
|
|
1359
1461
|
"name": string;
|
|
1360
1462
|
"email": string;
|
|
1361
1463
|
"phone": string;
|
|
@@ -1402,7 +1504,7 @@ export type EditorBookingList = {
|
|
|
1402
1504
|
"items": Array<{
|
|
1403
1505
|
"id": string;
|
|
1404
1506
|
"kind": "booking" | "block" | "rsvp";
|
|
1405
|
-
"status": "pending" | "confirmed" | "declined" | "cancelled";
|
|
1507
|
+
"status": "pending" | "confirmed" | "declined" | "cancelled" | "waitlisted" | "offered" | "expired";
|
|
1406
1508
|
"name": string;
|
|
1407
1509
|
"email": string;
|
|
1408
1510
|
"phone": string;
|
|
@@ -1997,6 +2099,7 @@ export type BookingInput = ({
|
|
|
1997
2099
|
"event": string;
|
|
1998
2100
|
"seats"?: number;
|
|
1999
2101
|
"formVersion"?: string;
|
|
2102
|
+
"waitlist"?: boolean;
|
|
2000
2103
|
});
|
|
2001
2104
|
export type DeviceInput = {
|
|
2002
2105
|
"token": string;
|
|
@@ -2094,6 +2197,8 @@ export type EditorSaveInput = {
|
|
|
2094
2197
|
"maxSeats": number;
|
|
2095
2198
|
"closesAt"?: (string) | (null);
|
|
2096
2199
|
"closeBefore"?: number;
|
|
2200
|
+
"notifyStaff"?: boolean;
|
|
2201
|
+
"waitlist"?: boolean;
|
|
2097
2202
|
"form"?: {
|
|
2098
2203
|
"title"?: string;
|
|
2099
2204
|
"intro"?: string;
|
|
@@ -2133,7 +2238,7 @@ export type EditorMediaQuery = {
|
|
|
2133
2238
|
"limit"?: number;
|
|
2134
2239
|
};
|
|
2135
2240
|
export type EditorBookingsQuery = {
|
|
2136
|
-
"status"?: "active" | "pending" | "confirmed" | "declined" | "cancelled" | "all";
|
|
2241
|
+
"status"?: "active" | "pending" | "confirmed" | "waitlist" | "waitlisted" | "offered" | "expired" | "declined" | "cancelled" | "all";
|
|
2137
2242
|
"from"?: (undefined) | (string);
|
|
2138
2243
|
"page"?: number;
|
|
2139
2244
|
"limit"?: number;
|