@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 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)` | First matching event from occurrences in the requested window |
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`, `maxSeats` for one RSVP right now, `autoConfirm`, 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 |
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
- /** Searches occurrences in the supplied window (server default: next 30 UTC days). */
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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@acms-subir/client",
3
- "version": "0.1.17",
3
+ "version": "0.1.19",
4
4
  "description": "Typed, dependency-free client for the ACMS public mobile API.",
5
5
  "type": "module",
6
6
  "license": "MIT",