@playaos/api-client 0.54.0 → 0.56.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/index.js CHANGED
@@ -225,7 +225,45 @@ var PlayaOSClient = class PlayaOSClient {
225
225
  signal: opts.signal
226
226
  };
227
227
  }
228
+ publicBooking = {
229
+ details: (token, opts) => request(buildUrl(this.baseUrl, `/public/booking/${encodeURIComponent(token)}`), this.auth, opts?.signal),
230
+ slots: (token, opts) => request(buildUrl(this.baseUrl, `/public/booking/${encodeURIComponent(token)}/slots`), this.auth, opts?.signal),
231
+ book: (token, payload, opts) => post(buildUrl(this.baseUrl, `/public/booking/${encodeURIComponent(token)}/book`), this.auth, payload, opts?.signal),
232
+ cancel: (token, payload, opts) => post(buildUrl(this.baseUrl, `/public/booking/${encodeURIComponent(token)}/cancel`), this.auth, payload, opts?.signal)
233
+ };
234
+ campSettings = {
235
+ catalog: (opts) => request(buildUrl(this.baseUrl, "/admin/givebutter-catalog"), this.auth, opts?.signal),
236
+ catalogOperation: (payload, opts) => post(buildUrl(this.baseUrl, "/admin/givebutter-catalog"), this.auth, payload, opts?.signal),
237
+ widgets: (opts) => request(buildUrl(this.baseUrl, "/admin/givebutter-widgets"), this.auth, opts?.signal),
238
+ widgetOperation: (payload, opts) => post(buildUrl(this.baseUrl, "/admin/givebutter-widgets"), this.auth, payload, opts?.signal),
239
+ admin: (opts) => request(buildUrl(this.baseUrl, "/admin/camp-settings"), this.auth, opts?.signal),
240
+ update: (payload, opts) => post(buildUrl(this.baseUrl, "/admin/camp-settings"), this.auth, payload, opts?.signal)
241
+ };
242
+ scheduling = {
243
+ booking: (id, opts) => request(buildUrl(this.baseUrl, `/admin/scheduling/bookings/${encodeURIComponent(id)}`), this.auth, opts?.signal),
244
+ adminSettings: (opts) => request(buildUrl(this.baseUrl, "/admin/scheduling/settings"), this.auth, opts?.signal),
245
+ adminOperation: (payload, opts) => post(buildUrl(this.baseUrl, "/admin/scheduling/settings"), this.auth, payload, opts?.signal),
246
+ feed: (interviewerId, token, opts) => request(buildUrl(this.baseUrl, `/scheduling/feed/${encodeURIComponent(interviewerId)}`, { token }), this.auth, opts?.signal)
247
+ };
228
248
  members = {
249
+ adminExport: (params, opts) => request(buildUrl(this.baseUrl, "/members/admin/export", params), this.auth, opts?.signal),
250
+ adminOperation: (payload, opts) => post(buildUrl(this.baseUrl, "/members/admin/operation"), this.auth, payload, opts?.signal),
251
+ adminImportOperation: (payload, opts) => post(buildUrl(this.baseUrl, "/members/admin/import-operation"), this.auth, payload, opts?.signal),
252
+ adminDetail: (id, params, opts) => request(buildUrl(this.baseUrl, `/members/admin/${encodeURIComponent(id)}/detail`, params), this.auth, opts?.signal),
253
+ adminHistory: (id, opts) => request(buildUrl(this.baseUrl, `/members/admin/${encodeURIComponent(id)}/history`), this.auth, opts?.signal),
254
+ selfProfile: (params, opts) => request(buildUrl(this.baseUrl, "/members/me/profile", params), this.auth, opts?.signal),
255
+ updateSelfProfile: (payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, "/members/me/profile"), this.auth, payload, opts?.signal),
256
+ referrers: (params, opts) => request(buildUrl(this.baseUrl, "/members/me/referrers", params), this.auth, opts?.signal),
257
+ referrer: (id, opts) => request(buildUrl(this.baseUrl, `/members/me/referrers/${encodeURIComponent(id)}`), this.auth, opts?.signal),
258
+ getPushPreferences: (opts) => request(buildUrl(this.baseUrl, "/members/me/push-preferences"), this.auth, opts?.signal),
259
+ updatePushPreferences: (payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, "/members/me/push-preferences"), this.auth, payload, opts?.signal),
260
+ adminPhotoDownloadUrl: (id, params, opts) => request(buildUrl(this.baseUrl, `/members/${encodeURIComponent(id)}/photo/download-url`, { original: params?.original === void 0 ? void 0 : String(params.original) }), this.auth, opts?.signal),
261
+ adminPhotoUploadUrl: (id, payload, opts) => post(buildUrl(this.baseUrl, `/members/${encodeURIComponent(id)}/photo/upload-url`), this.auth, payload, opts?.signal),
262
+ adminSetPhoto: (id, payload, opts) => post(buildUrl(this.baseUrl, `/members/${encodeURIComponent(id)}/photo`), this.auth, payload, opts?.signal),
263
+ adminDeletePhoto: (id, opts) => sendV1("DELETE", buildUrl(this.baseUrl, `/members/${encodeURIComponent(id)}/photo`), this.auth, {}, opts?.signal),
264
+ updateOnboarding: (payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, "/members/me/onboarding"), this.auth, payload, opts?.signal),
265
+ bootstrap: (opts) => request(buildUrl(this.baseUrl, "/members/me/bootstrap"), this.auth, opts?.signal),
266
+ dashboard: (opts) => request(buildUrl(this.baseUrl, "/members/me/dashboard"), this.auth, opts?.signal),
229
267
  /** Presigned profile-photo upload (PLA-1263). PUT the bytes, then setPhoto. */
230
268
  createPhotoUploadUrl: (payload, opts) => post(buildUrl(this.baseUrl, "/members/me/photo/upload-url"), this.auth, payload, opts?.signal),
231
269
  setPhoto: (payload, opts) => post(buildUrl(this.baseUrl, "/members/me/photo"), this.auth, payload, opts?.signal),
@@ -269,6 +307,7 @@ var PlayaOSClient = class PlayaOSClient {
269
307
  };
270
308
  /** Summer-camp events + the acting member's RSVP (PLA-1270). */
271
309
  summerCamp = {
310
+ listAttendees: (eventId, opts) => request(buildUrl(this.baseUrl, `/summer-camp/events/${encodeURIComponent(eventId)}/attendees`), this.auth, opts?.signal),
272
311
  listEvents: (opts) => request(buildUrl(this.baseUrl, "/summer-camp/events"), this.auth, opts?.signal),
273
312
  getMyRsvp: (eventId, opts) => request(buildUrl(this.baseUrl, `/summer-camp/events/${encodeURIComponent(eventId)}/rsvp`), this.auth, opts?.signal).then((r) => r.rsvp),
274
313
  rsvp: (eventId, payload, opts) => sendV1("PUT", buildUrl(this.baseUrl, `/summer-camp/events/${encodeURIComponent(eventId)}/rsvp`), this.auth, payload, opts?.signal),
@@ -296,6 +335,12 @@ var PlayaOSClient = class PlayaOSClient {
296
335
  };
297
336
  dues = { list: (params, opts) => request(buildUrl(this.baseUrl, "/dues", params), this.auth, opts?.signal) };
298
337
  shifts = {
338
+ memberAction: (payload, opts) => post(buildUrl(this.baseUrl, "/members/shifts/actions"), this.auth, payload, opts?.signal),
339
+ mobile: (params, opts) => request(buildUrl(this.baseUrl, "/members/shifts/mobile", params), this.auth, opts?.signal),
340
+ memberView: (opts) => request(buildUrl(this.baseUrl, "/members/shifts/view"), this.auth, opts?.signal),
341
+ adminWorkflow: (payload, opts) => post(buildUrl(this.baseUrl, "/admin/shifts/workflow"), this.auth, payload, opts?.signal),
342
+ planner: (params, opts) => request(buildUrl(this.baseUrl, "/admin/shifts/planner", params), this.auth, opts?.signal),
343
+ adminOperation: (payload, opts) => post(buildUrl(this.baseUrl, "/admin/shifts/operations"), this.auth, payload, opts?.signal),
299
344
  adminTypes: (opts) => request(buildUrl(this.baseUrl, "/shifts/types"), this.auth, opts?.signal),
300
345
  adminList: (params, opts) => request(buildUrl(this.baseUrl, "/shifts/admin", params), this.auth, opts?.signal),
301
346
  list: (params, opts) => request(buildUrl(this.baseUrl, "/shifts", params), this.auth, opts?.signal)
@@ -303,6 +348,12 @@ var PlayaOSClient = class PlayaOSClient {
303
348
  org = { get: (opts) => request(buildUrl(this.baseUrl, "/org"), this.auth, opts?.signal) };
304
349
  commitments = { list: (opts) => getEmbed(buildEmbedUrl(this.embedBaseUrl, "/commitments"), this.apiKey, opts?.signal) };
305
350
  payments = {
351
+ adminPage: (params, opts) => request(buildUrl(this.baseUrl, "/admin/payments/page", params), this.auth, opts?.signal),
352
+ adminOperation: (payload, opts) => post(buildUrl(this.baseUrl, "/admin/payments/operations"), this.auth, payload, opts?.signal),
353
+ unmatchedRefunds: (opts) => request(buildUrl(this.baseUrl, "/admin/payments/unmatched-refunds"), this.auth, opts?.signal),
354
+ memberPayments: (id, opts) => request(buildUrl(this.baseUrl, `/admin/payments/member/${encodeURIComponent(id)}`), this.auth, opts?.signal),
355
+ adminSummary: (opts) => request(buildUrl(this.baseUrl, "/admin/payments/summary"), this.auth, opts?.signal),
356
+ exportMonarch: (params, opts) => request(buildUrl(this.baseUrl, "/admin/payments/export", params), this.auth, opts?.signal),
306
357
  list: (params, opts) => request(buildUrl(this.baseUrl, "/payments", params), this.auth, opts?.signal),
307
358
  /** Requires a member token. `memberId` may be omitted by a non-admin (defaults to themselves); admins must pass it. */
308
359
  page: (memberId, duesCollectionId, opts) => post(buildUrl(this.baseUrl, "/payments/page"), this.auth, {
@@ -326,6 +377,8 @@ var PlayaOSClient = class PlayaOSClient {
326
377
  };
327
378
  /** Bookkeeping reads (PLA-1345): camp-year list + ops-binder export preview. */
328
379
  bookkeeping = {
380
+ syncGoogleSheets: (opts) => post(buildUrl(this.baseUrl, "/admin/bookkeeping/sheets/sync"), this.auth, void 0, opts?.signal),
381
+ adminOperation: (payload, opts) => post(buildUrl(this.baseUrl, "/admin/bookkeeping/operations"), this.auth, payload, opts?.signal),
329
382
  years: (opts) => request(buildUrl(this.baseUrl, "/bookkeeping/years"), this.auth, opts?.signal).then((r) => r.data),
330
383
  exportPreview: (params, opts) => request(buildUrl(this.baseUrl, "/bookkeeping/export-preview", params), this.auth, opts?.signal)
331
384
  };
@@ -335,11 +388,23 @@ var PlayaOSClient = class PlayaOSClient {
335
388
  webhookLogs: (params, opts) => request(buildUrl(this.baseUrl, "/audit/webhook-logs", params), this.auth, opts?.signal)
336
389
  };
337
390
  notifications = {
391
+ dispatch: (payload, opts) => post(buildUrl(this.baseUrl, "/notifications/dispatch"), this.auth, payload, opts?.signal),
338
392
  /** Set the acting member's notification high-water mark to now (PLA-1261). */
339
393
  markSeen: (opts) => sendV1("PUT", buildUrl(this.baseUrl, "/notifications/seen"), this.auth, {}, opts?.signal),
340
394
  list: (params, opts) => request(buildUrl(this.baseUrl, "/notifications", params), this.auth, opts?.signal)
341
395
  };
342
396
  documents = {
397
+ memberPage: (params, opts) => request(buildUrl(this.baseUrl, "/members/documents/page", params), this.auth, opts?.signal),
398
+ create: (payload, opts) => post(buildUrl(this.baseUrl, "/documents"), this.auth, payload, opts?.signal),
399
+ update: (id, payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, `/documents/${encodeURIComponent(id)}`), this.auth, payload, opts?.signal),
400
+ delete: (id, opts) => sendV1("DELETE", buildUrl(this.baseUrl, `/documents/${encodeURIComponent(id)}`), this.auth, {}, opts?.signal),
401
+ createUploadUrl: (payload, opts) => post(buildUrl(this.baseUrl, "/documents/upload-url"), this.auth, payload, opts?.signal),
402
+ sourceDownloadUrl: (payload, opts) => post(buildUrl(this.baseUrl, "/documents/source-download-url"), this.auth, payload, opts?.signal),
403
+ getSections: (id, opts) => request(buildUrl(this.baseUrl, `/documents/${encodeURIComponent(id)}/sections`), this.auth, opts?.signal),
404
+ saveSections: (id, payload, opts) => sendV1("PUT", buildUrl(this.baseUrl, `/documents/${encodeURIComponent(id)}/sections`), this.auth, payload, opts?.signal),
405
+ renderContract: (id, opts) => request(buildUrl(this.baseUrl, `/documents/${encodeURIComponent(id)}/render`), this.auth, opts?.signal),
406
+ signatureDownloadUrl: (id, opts) => request(buildUrl(this.baseUrl, `/documents/signatures/${encodeURIComponent(id)}/download-url`), this.auth, opts?.signal),
407
+ deleteSignature: (id, opts) => sendV1("DELETE", buildUrl(this.baseUrl, `/documents/signatures/${encodeURIComponent(id)}`), this.auth, {}, opts?.signal),
343
408
  list: (params, opts) => request(buildUrl(this.baseUrl, "/documents", params), this.auth, opts?.signal),
344
409
  get: (id, opts) => request(buildUrl(this.baseUrl, `/documents/${encodeURIComponent(id)}`), this.auth, opts?.signal),
345
410
  /** Admin member signature rows, optionally filtered to one document. */
@@ -350,6 +415,9 @@ var PlayaOSClient = class PlayaOSClient {
350
415
  downloadUrl: (id, opts) => request(buildUrl(this.baseUrl, `/members/documents/${encodeURIComponent(id)}/download-url`), this.auth, opts?.signal)
351
416
  };
352
417
  meetings = {
418
+ /** Save the acting member's response; the date option must belong to this meeting. */
419
+ rsvp: (id, payload, opts) => sendV1("PUT", buildUrl(this.baseUrl, `/meetings/${encodeURIComponent(id)}/rsvp`), this.auth, payload, opts?.signal),
420
+ cancelRsvp: (id, opts) => sendV1("DELETE", buildUrl(this.baseUrl, `/meetings/${encodeURIComponent(id)}/rsvp`), this.auth, void 0, opts?.signal),
353
421
  list: (params, opts) => request(buildUrl(this.baseUrl, "/meetings", params), this.auth, opts?.signal),
354
422
  get: (id, opts) => request(buildUrl(this.baseUrl, `/meetings/${encodeURIComponent(id)}`), this.auth, opts?.signal),
355
423
  /** Create a meeting (PLA-1266). Admin-only; requires a member token. */
@@ -358,23 +426,48 @@ var PlayaOSClient = class PlayaOSClient {
358
426
  archive: (id, opts) => sendV1("DELETE", buildUrl(this.baseUrl, `/meetings/${encodeURIComponent(id)}`), this.auth, void 0, opts?.signal)
359
427
  };
360
428
  scholarships = {
429
+ adminPage: (params, opts) => request(buildUrl(this.baseUrl, "/scholarships/admin-page", params), this.auth, opts?.signal),
430
+ refresh: (id, opts) => post(buildUrl(this.baseUrl, `/scholarships/${encodeURIComponent(id)}/refresh`), this.auth, {}, opts?.signal),
431
+ stats: (params, opts) => request(buildUrl(this.baseUrl, "/scholarships/stats", params), this.auth, opts?.signal),
361
432
  /** Create a scholarship (code + Givebutter sync). Admin-only (PLA-1266). */
362
433
  create: (payload, opts) => post(buildUrl(this.baseUrl, "/scholarships"), this.auth, payload, opts?.signal),
363
434
  /** Move a scholarship between assigned/used/expired. Admin-only (PLA-1266). */
364
- updateStatus: (id, status, opts) => sendV1("PATCH", buildUrl(this.baseUrl, `/scholarships/${encodeURIComponent(id)}`), this.auth, { status }, opts?.signal),
435
+ updateStatus: (id, status, opts) => sendV1("PATCH", buildUrl(this.baseUrl, `/scholarships/${encodeURIComponent(id)}`), this.auth, {
436
+ status,
437
+ ...opts?.providerManaged !== void 0 ? { providerManaged: opts.providerManaged } : {},
438
+ ...opts?.verifyProvider !== void 0 ? { verifyProvider: opts.verifyProvider } : {}
439
+ }, opts?.signal),
365
440
  /** Delete a scholarship (deactivates its code). Admin-only (PLA-1266). */
366
- remove: (id, opts) => sendV1("DELETE", buildUrl(this.baseUrl, `/scholarships/${encodeURIComponent(id)}`), this.auth, void 0, opts?.signal)
441
+ remove: (id, opts) => sendV1("DELETE", buildUrl(this.baseUrl, `/scholarships/${encodeURIComponent(id)}`, { providerManaged: opts?.providerManaged }), this.auth, void 0, opts?.signal)
367
442
  };
368
443
  tickets = {
444
+ /** Admin upsert by member and camp year, including members with no existing tracking row. */
445
+ upsert: (memberId, year, payload, opts) => sendV1("PUT", buildUrl(this.baseUrl, `/members/${encodeURIComponent(memberId)}/tickets/${year}`), this.auth, payload, opts?.signal),
369
446
  /** Admin ticket-page projection; requires ticket, vehicle-pass, and member read scopes. */
370
447
  adminList: (params, opts) => request(buildUrl(this.baseUrl, "/tickets/admin", params), this.auth, opts?.signal),
371
448
  /** Update a member's ticket status/confirmation. Admin-only (PLA-1266). */
372
449
  update: (id, payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, `/tickets/${encodeURIComponent(id)}`), this.auth, payload, opts?.signal)
373
450
  };
374
- vehiclePasses = {
375
- /** Update a member's vehicle-pass status. Admin-only (PLA-1266). */
376
- update: (id, payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, `/vehicle-passes/${encodeURIComponent(id)}`), this.auth, payload, opts?.signal) };
451
+ vehiclePasses = {
452
+ /** Admin upsert by member and camp year, including members with no existing tracking row. */
453
+ upsert: (memberId, year, payload, opts) => sendV1("PUT", buildUrl(this.baseUrl, `/members/${encodeURIComponent(memberId)}/vehicle-passes/${year}`), this.auth, payload, opts?.signal),
454
+ /** Update a member's vehicle-pass status. Admin-only (PLA-1266). */
455
+ update: (id, payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, `/vehicle-passes/${encodeURIComponent(id)}`), this.auth, payload, opts?.signal)
456
+ };
377
457
  shelters = {
458
+ adminOperation: (payload, opts) => post(buildUrl(this.baseUrl, "/admin/shelters/operations"), this.auth, payload, opts?.signal),
459
+ createForMember: (payload, opts) => post(buildUrl(this.baseUrl, "/members/me/shelters"), this.auth, payload, opts?.signal),
460
+ updateForMember: (id, payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, `/members/me/shelters/${encodeURIComponent(id)}`), this.auth, payload, opts?.signal),
461
+ deleteForMember: (id, opts) => sendV1("DELETE", buildUrl(this.baseUrl, `/members/me/shelters/${encodeURIComponent(id)}`), this.auth, {}, opts?.signal),
462
+ memberPage: (params, opts) => request(buildUrl(this.baseUrl, "/members/me/shelters", params), this.auth, opts?.signal),
463
+ searchMembers: (params, opts) => request(buildUrl(this.baseUrl, "/shelters/member-search", params), this.auth, opts?.signal),
464
+ requestJoin: (id, opts) => post(buildUrl(this.baseUrl, `/shelters/${encodeURIComponent(id)}/request-join`), this.auth, {}, opts?.signal),
465
+ inviteCandidates: (id, opts) => request(buildUrl(this.baseUrl, `/shelters/${encodeURIComponent(id)}/invite-candidates`), this.auth, opts?.signal),
466
+ previewJoinRequest: (token, opts) => request(buildUrl(this.baseUrl, "/shelters/join-requests/preview", { token }), this.auth, opts?.signal),
467
+ decideJoinRequest: (payload, opts) => post(buildUrl(this.baseUrl, "/shelters/join-requests/decision"), this.auth, payload, opts?.signal),
468
+ requestPayer: (payload, opts) => post(buildUrl(this.baseUrl, "/shelters/payer-requests"), this.auth, payload, opts?.signal),
469
+ pendingPayerRequests: (params, opts) => request(buildUrl(this.baseUrl, "/shelters/payer-requests", params), this.auth, opts?.signal),
470
+ resolvePayerRequests: (payload, opts) => post(buildUrl(this.baseUrl, "/shelters/payer-requests/resolve"), this.auth, payload, opts?.signal),
378
471
  /** Admin-only shelter table/map projection; requires members:read and a member token. */
379
472
  adminList: (params, opts) => request(buildUrl(this.baseUrl, "/shelters/admin", params), this.auth, opts?.signal),
380
473
  list: (params, opts) => request(buildUrl(this.baseUrl, "/shelters", params), this.auth, opts?.signal),
@@ -389,6 +482,10 @@ update: (id, payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, `/vehicle-
389
482
  respond: (assignmentId, accept, opts) => sendV1("PUT", buildUrl(this.baseUrl, `/shelter-assignments/${encodeURIComponent(assignmentId)}/response`), this.auth, { accept }, opts?.signal)
390
483
  };
391
484
  bikes = {
485
+ adminInterest: (params, opts) => request(buildUrl(this.baseUrl, "/admin/bikes/interest", params), this.auth, opts?.signal),
486
+ adminOperation: (payload, opts) => post(buildUrl(this.baseUrl, "/admin/bikes/operations"), this.auth, payload, opts?.signal),
487
+ memberStatus: (params, opts) => request(buildUrl(this.baseUrl, "/members/me/bikes", params), this.auth, opts?.signal),
488
+ reserveForMember: (payload, opts) => post(buildUrl(this.baseUrl, "/members/me/bikes"), this.auth, payload, opts?.signal),
392
489
  list: (params, opts) => request(buildUrl(this.baseUrl, "/bikes", params), this.auth, opts?.signal),
393
490
  get: (id, opts) => request(buildUrl(this.baseUrl, `/bikes/${encodeURIComponent(id)}`), this.auth, opts?.signal),
394
491
  /** Admin-only, camp-owned inventory read; requires members:read and a member token. */
@@ -426,6 +523,11 @@ update: (id, payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, `/vehicle-
426
523
  interestedNotReserved: (opts) => request(buildUrl(this.baseUrl, "/bike-rentals/interested-not-reserved"), this.auth, opts?.signal)
427
524
  };
428
525
  tags = {
526
+ create: (payload, opts) => post(buildUrl(this.baseUrl, "/tags"), this.auth, payload, opts?.signal),
527
+ update: (id, payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, `/tags/${encodeURIComponent(id)}`), this.auth, payload, opts?.signal),
528
+ delete: (id, opts) => sendV1("DELETE", buildUrl(this.baseUrl, `/tags/${encodeURIComponent(id)}`), this.auth, void 0, opts?.signal),
529
+ assign: (memberId, tagId, opts) => post(buildUrl(this.baseUrl, `/members/${encodeURIComponent(memberId)}/tags/${encodeURIComponent(tagId)}`), this.auth, {}, opts?.signal),
530
+ remove: (memberId, tagId, opts) => sendV1("DELETE", buildUrl(this.baseUrl, `/members/${encodeURIComponent(memberId)}/tags/${encodeURIComponent(tagId)}`), this.auth, void 0, opts?.signal),
429
531
  list: (opts) => request(buildUrl(this.baseUrl, "/tags"), this.auth, opts?.signal),
430
532
  /** Admin-only bulk read; requires a member-bound client. */
431
533
  assignments: (opts) => request(buildUrl(this.baseUrl, "/tags/assignments"), this.auth, opts?.signal)
@@ -441,6 +543,17 @@ update: (id, payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, `/vehicle-
441
543
  * and 401 on an org key alone.
442
544
  */
443
545
  packing = {
546
+ containers: {
547
+ list: (params, opts) => request(buildUrl(this.baseUrl, "/packing/containers", params), this.auth, opts?.signal),
548
+ create: (payload, opts) => post(buildUrl(this.baseUrl, "/packing/containers"), this.auth, payload, opts?.signal),
549
+ update: (id, payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, `/packing/containers/${encodeURIComponent(id)}`), this.auth, payload, opts?.signal),
550
+ remove: (id, params, opts) => sendV1("DELETE", buildUrl(this.baseUrl, `/packing/containers/${encodeURIComponent(id)}`, params), this.auth, void 0, opts?.signal)
551
+ },
552
+ placements: {
553
+ list: (params, opts) => request(buildUrl(this.baseUrl, "/packing/placements", params), this.auth, opts?.signal),
554
+ place: (payload, opts) => sendV1("PUT", buildUrl(this.baseUrl, "/packing/placements"), this.auth, payload, opts?.signal),
555
+ unpack: (payload, opts) => sendV1("DELETE", buildUrl(this.baseUrl, "/packing/placements"), this.auth, payload, opts?.signal)
556
+ },
444
557
  /** The resolved list: curated base + camp layer + personal layer (ADR-071). */
445
558
  list: (params, opts) => request(buildUrl(this.baseUrl, "/packing", params), this.auth, opts?.signal),
446
559
  /**
@@ -479,30 +592,65 @@ update: (id, payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, `/vehicle-
479
592
  /**
480
593
  * SAP — Special Access Pass, for early/overnight vehicle arrival (PLA-1202).
481
594
  * Admin/super_admin only; there is no member-facing SAP surface. Year is
482
- * always the org's active camp year — the server derives it, callers never
483
- * pass one.
595
+ * the selected year when supplied, otherwise the org's active camp year.
484
596
  */
485
597
  sap = {
598
+ roster: (params, opts) => request(buildUrl(this.baseUrl, "/sap/roster", params), this.auth, opts?.signal),
486
599
  allocation: {
487
- get: (opts) => request(buildUrl(this.baseUrl, "/sap/allocation"), this.auth, opts?.signal),
600
+ get: (opts) => request(buildUrl(this.baseUrl, "/sap/allocation", { year: opts?.year }), this.auth, opts?.signal),
488
601
  update: (payload, opts) => sendV1("PUT", buildUrl(this.baseUrl, "/sap/allocation"), this.auth, payload, opts?.signal)
489
602
  },
490
603
  dayAllocations: {
491
- list: (opts) => request(buildUrl(this.baseUrl, "/sap/day-allocations"), this.auth, opts?.signal),
604
+ update: (id, payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, `/sap/day-allocations/${encodeURIComponent(id)}`), this.auth, payload, opts?.signal),
605
+ remove: (id, opts) => sendV1("DELETE", buildUrl(this.baseUrl, `/sap/day-allocations/${encodeURIComponent(id)}`), this.auth, {}, opts?.signal),
606
+ list: (opts) => request(buildUrl(this.baseUrl, "/sap/day-allocations", { year: opts?.year }), this.auth, opts?.signal),
492
607
  /** Upserts by (active year, accessDate); 409 on a cross-org date collision. */
493
608
  upsert: (payload, opts) => sendV1("PUT", buildUrl(this.baseUrl, "/sap/day-allocations"), this.auth, payload, opts?.signal)
494
609
  },
495
610
  assignments: {
496
- list: (opts) => request(buildUrl(this.baseUrl, "/sap/assignments"), this.auth, opts?.signal),
611
+ list: (opts) => request(buildUrl(this.baseUrl, "/sap/assignments", { year: opts?.year }), this.auth, opts?.signal),
497
612
  create: (payload, opts) => post(buildUrl(this.baseUrl, "/sap/assignments"), this.auth, payload, opts?.signal),
498
613
  update: (payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, "/sap/assignments"), this.auth, payload, opts?.signal),
499
614
  remove: (assignmentId, opts) => sendV1("DELETE", buildUrl(this.baseUrl, "/sap/assignments"), this.auth, { assignmentId }, opts?.signal)
500
615
  }
501
616
  };
502
- importantDates = {
503
- /** Visible camp dates (PLA-1268), optionally pinned to a year. */
504
- list: (params, opts) => request(buildUrl(this.baseUrl, "/important-dates", params), this.auth, opts?.signal) };
617
+ importantDates = {
618
+ adminList: (opts) => request(buildUrl(this.baseUrl, "/admin/important-dates"), this.auth, opts?.signal),
619
+ adminOperation: (payload, opts) => post(buildUrl(this.baseUrl, "/admin/important-dates"), this.auth, payload, opts?.signal),
620
+ /** Visible camp dates (PLA-1268), optionally pinned to a year. */
621
+ list: (params, opts) => request(buildUrl(this.baseUrl, "/important-dates", params), this.auth, opts?.signal)
622
+ };
505
623
  emails = {
624
+ recipients: (payload, opts) => post(buildUrl(this.baseUrl, "/email/recipients"), this.auth, payload, opts?.signal),
625
+ composerOptions: (params, opts) => request(buildUrl(this.baseUrl, "/email/composer-options", params), this.auth, opts?.signal),
626
+ broadcast: (payload, opts) => post(buildUrl(this.baseUrl, "/email/broadcasts"), this.auth, payload, opts?.signal),
627
+ history: (opts) => request(buildUrl(this.baseUrl, "/email/history"), this.auth, opts?.signal),
628
+ deliveryPage: (params, opts) => request(buildUrl(this.baseUrl, "/email/delivery", params), this.auth, opts?.signal),
629
+ /**
630
+ * Make one failed retry row due now; the retry executor sends it (nothing is sent by this call).
631
+ * Permanent failures are refused with 400.
632
+ */
633
+ retryLog: (id, opts) => post(buildUrl(this.baseUrl, `/email/delivery/${encodeURIComponent(id)}/retry`), this.auth, {}, opts?.signal),
634
+ /** Run this camp's due retry rows through the retry executor now (about 30s budget). */
635
+ retryFailed: (opts) => post(buildUrl(this.baseUrl, "/email/delivery/retry"), this.auth, {}, opts?.signal),
636
+ dismissLog: (id, opts) => post(buildUrl(this.baseUrl, `/email/delivery/${encodeURIComponent(id)}/dismiss`), this.auth, {}, opts?.signal),
637
+ cmsPreview: (id, opts) => post(buildUrl(this.baseUrl, `/email/templates/${encodeURIComponent(id)}/cms-preview`), this.auth, {}, opts?.signal),
638
+ setupContacts: (opts) => post(buildUrl(this.baseUrl, "/email/contacts/setup"), this.auth, {}, opts?.signal),
639
+ /**
640
+ * Sync this camp's members into its own Resend account. Each call works for a bounded time; when
641
+ * it stops at that limit it returns `skipped: true` and a `cursor`. Pass that cursor back as
642
+ * `opts.cursor` to resume after the last processed member, and repeat until `cursor` is null
643
+ * (sync complete). `synced`/`failed` count the one call. Fails with 400 until
644
+ * {@link setupContacts} has run, or on an invalid cursor.
645
+ */
646
+ syncContacts: (opts) => post(buildUrl(this.baseUrl, "/email/contacts/sync", { cursor: opts?.cursor ?? void 0 }), this.auth, {}, opts?.signal),
647
+ /**
648
+ * Release an interview invitation stuck behind an uncertain or abandoned delivery claim, so the
649
+ * next invite attempt sends again. Check the email provider first. Accepted deliveries are never
650
+ * released.
651
+ */
652
+ releaseInvitationDelivery: (applicationId, opts) => post(buildUrl(this.baseUrl, `/email/delivery/applications/${encodeURIComponent(applicationId)}/release`), this.auth, {}, opts?.signal),
653
+ syncTemplates: (opts) => post(buildUrl(this.baseUrl, "/email/templates/sync"), this.auth, {}, opts?.signal),
506
654
  /** Admin template registry (PLA-1265). */
507
655
  listTemplates: (opts) => request(buildUrl(this.baseUrl, "/email/templates"), this.auth, opts?.signal).then((r) => r.data),
508
656
  /** Render-only template preview, as HTML (PLA-1265). */
@@ -511,6 +659,9 @@ list: (params, opts) => request(buildUrl(this.baseUrl, "/important-dates", param
511
659
  listRetries: (params, opts) => request(buildUrl(this.baseUrl, "/email/retries", params), this.auth, opts?.signal)
512
660
  };
513
661
  onboarding = {
662
+ createCustomItem: (payload, opts) => post(buildUrl(this.baseUrl, "/onboarding/custom-items"), this.auth, payload, opts?.signal),
663
+ updateCustomItem: (id, payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, `/onboarding/custom-items/${encodeURIComponent(id)}`), this.auth, payload, opts?.signal),
664
+ deleteCustomItem: (id, opts) => sendV1("DELETE", buildUrl(this.baseUrl, `/onboarding/custom-items/${encodeURIComponent(id)}`), this.auth, void 0, opts?.signal),
514
665
  /** The camp's onboarding checklist template (PLA-1340 adds `priority`). */
515
666
  checklist: (params, opts) => request(buildUrl(this.baseUrl, "/onboarding/checklist", params), this.auth, opts?.signal),
516
667
  /** Per-member checklist completion; non-admins are pinned to themselves. */
@@ -521,7 +672,22 @@ list: (params, opts) => request(buildUrl(this.baseUrl, "/important-dates", param
521
672
  setProgress: (itemId, payload, opts) => sendV1("PUT", buildUrl(this.baseUrl, `/onboarding/progress/${encodeURIComponent(itemId)}`), this.auth, payload, opts?.signal)
522
673
  };
523
674
  admin = {
675
+ accounts: {
676
+ page: (opts) => request(buildUrl(this.baseUrl, "/admin/accounts"), this.auth, opts?.signal),
677
+ operate: (payload, opts) => post(buildUrl(this.baseUrl, "/admin/accounts"), this.auth, payload, opts?.signal)
678
+ },
679
+ webhooks: {
680
+ page: (opts) => request(buildUrl(this.baseUrl, "/admin/webhooks"), this.auth, opts?.signal),
681
+ candidates: (payer, opts) => post(buildUrl(this.baseUrl, "/admin/webhooks/candidates"), this.auth, payer, opts?.signal),
682
+ retry: (id, opts) => post(buildUrl(this.baseUrl, `/admin/webhooks/${encodeURIComponent(id)}/retry`), this.auth, void 0, opts?.signal),
683
+ match: (id, selection, opts) => post(buildUrl(this.baseUrl, `/admin/webhooks/${encodeURIComponent(id)}/match`), this.auth, selection, opts?.signal),
684
+ retryFailed: (opts) => post(buildUrl(this.baseUrl, "/admin/webhooks/retry-failed"), this.auth, void 0, opts?.signal)
685
+ },
524
686
  applications: {
687
+ workflow: (id, payload, opts) => post(buildUrl(this.baseUrl, `/admin/applications/${encodeURIComponent(id)}/workflow`), this.auth, payload, opts?.signal),
688
+ workflowOptions: (params, opts) => request(buildUrl(this.baseUrl, "/admin/applications/workflow-options", params), this.auth, opts?.signal),
689
+ activity: (id, opts) => request(buildUrl(this.baseUrl, `/admin/applications/${encodeURIComponent(id)}/activity`), this.auth, opts?.signal),
690
+ sendMessage: (id, payload, opts) => post(buildUrl(this.baseUrl, `/admin/applications/${encodeURIComponent(id)}/messages`), this.auth, payload, opts?.signal),
525
691
  /**
526
692
  * Admin-scoped application list (PLA-1322): the member-safe shape plus the
527
693
  * applicant phone, referrer name and admin-managed metadata, with the same