@playaos/api-client 0.53.0 → 0.55.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,44 @@ 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
+ adminSettings: (opts) => request(buildUrl(this.baseUrl, "/admin/scheduling/settings"), this.auth, opts?.signal),
244
+ adminOperation: (payload, opts) => post(buildUrl(this.baseUrl, "/admin/scheduling/settings"), this.auth, payload, opts?.signal),
245
+ feed: (interviewerId, token, opts) => request(buildUrl(this.baseUrl, `/scheduling/feed/${encodeURIComponent(interviewerId)}`, { token }), this.auth, opts?.signal)
246
+ };
228
247
  members = {
248
+ adminExport: (params, opts) => request(buildUrl(this.baseUrl, "/members/admin/export", params), this.auth, opts?.signal),
249
+ adminOperation: (payload, opts) => post(buildUrl(this.baseUrl, "/members/admin/operation"), this.auth, payload, opts?.signal),
250
+ adminImportOperation: (payload, opts) => post(buildUrl(this.baseUrl, "/members/admin/import-operation"), this.auth, payload, opts?.signal),
251
+ adminDetail: (id, params, opts) => request(buildUrl(this.baseUrl, `/members/admin/${encodeURIComponent(id)}/detail`, params), this.auth, opts?.signal),
252
+ adminHistory: (id, opts) => request(buildUrl(this.baseUrl, `/members/admin/${encodeURIComponent(id)}/history`), this.auth, opts?.signal),
253
+ selfProfile: (params, opts) => request(buildUrl(this.baseUrl, "/members/me/profile", params), this.auth, opts?.signal),
254
+ updateSelfProfile: (payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, "/members/me/profile"), this.auth, payload, opts?.signal),
255
+ referrers: (params, opts) => request(buildUrl(this.baseUrl, "/members/me/referrers", params), this.auth, opts?.signal),
256
+ referrer: (id, opts) => request(buildUrl(this.baseUrl, `/members/me/referrers/${encodeURIComponent(id)}`), this.auth, opts?.signal),
257
+ getPushPreferences: (opts) => request(buildUrl(this.baseUrl, "/members/me/push-preferences"), this.auth, opts?.signal),
258
+ updatePushPreferences: (payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, "/members/me/push-preferences"), this.auth, payload, opts?.signal),
259
+ 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),
260
+ adminPhotoUploadUrl: (id, payload, opts) => post(buildUrl(this.baseUrl, `/members/${encodeURIComponent(id)}/photo/upload-url`), this.auth, payload, opts?.signal),
261
+ adminSetPhoto: (id, payload, opts) => post(buildUrl(this.baseUrl, `/members/${encodeURIComponent(id)}/photo`), this.auth, payload, opts?.signal),
262
+ adminDeletePhoto: (id, opts) => sendV1("DELETE", buildUrl(this.baseUrl, `/members/${encodeURIComponent(id)}/photo`), this.auth, {}, opts?.signal),
263
+ updateOnboarding: (payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, "/members/me/onboarding"), this.auth, payload, opts?.signal),
264
+ bootstrap: (opts) => request(buildUrl(this.baseUrl, "/members/me/bootstrap"), this.auth, opts?.signal),
265
+ dashboard: (opts) => request(buildUrl(this.baseUrl, "/members/me/dashboard"), this.auth, opts?.signal),
229
266
  /** Presigned profile-photo upload (PLA-1263). PUT the bytes, then setPhoto. */
230
267
  createPhotoUploadUrl: (payload, opts) => post(buildUrl(this.baseUrl, "/members/me/photo/upload-url"), this.auth, payload, opts?.signal),
231
268
  setPhoto: (payload, opts) => post(buildUrl(this.baseUrl, "/members/me/photo"), this.auth, payload, opts?.signal),
@@ -296,6 +333,12 @@ var PlayaOSClient = class PlayaOSClient {
296
333
  };
297
334
  dues = { list: (params, opts) => request(buildUrl(this.baseUrl, "/dues", params), this.auth, opts?.signal) };
298
335
  shifts = {
336
+ memberAction: (payload, opts) => post(buildUrl(this.baseUrl, "/members/shifts/actions"), this.auth, payload, opts?.signal),
337
+ mobile: (params, opts) => request(buildUrl(this.baseUrl, "/members/shifts/mobile", params), this.auth, opts?.signal),
338
+ memberView: (opts) => request(buildUrl(this.baseUrl, "/members/shifts/view"), this.auth, opts?.signal),
339
+ adminWorkflow: (payload, opts) => post(buildUrl(this.baseUrl, "/admin/shifts/workflow"), this.auth, payload, opts?.signal),
340
+ planner: (params, opts) => request(buildUrl(this.baseUrl, "/admin/shifts/planner", params), this.auth, opts?.signal),
341
+ adminOperation: (payload, opts) => post(buildUrl(this.baseUrl, "/admin/shifts/operations"), this.auth, payload, opts?.signal),
299
342
  adminTypes: (opts) => request(buildUrl(this.baseUrl, "/shifts/types"), this.auth, opts?.signal),
300
343
  adminList: (params, opts) => request(buildUrl(this.baseUrl, "/shifts/admin", params), this.auth, opts?.signal),
301
344
  list: (params, opts) => request(buildUrl(this.baseUrl, "/shifts", params), this.auth, opts?.signal)
@@ -303,6 +346,12 @@ var PlayaOSClient = class PlayaOSClient {
303
346
  org = { get: (opts) => request(buildUrl(this.baseUrl, "/org"), this.auth, opts?.signal) };
304
347
  commitments = { list: (opts) => getEmbed(buildEmbedUrl(this.embedBaseUrl, "/commitments"), this.apiKey, opts?.signal) };
305
348
  payments = {
349
+ adminPage: (params, opts) => request(buildUrl(this.baseUrl, "/admin/payments/page", params), this.auth, opts?.signal),
350
+ adminOperation: (payload, opts) => post(buildUrl(this.baseUrl, "/admin/payments/operations"), this.auth, payload, opts?.signal),
351
+ unmatchedRefunds: (opts) => request(buildUrl(this.baseUrl, "/admin/payments/unmatched-refunds"), this.auth, opts?.signal),
352
+ memberPayments: (id, opts) => request(buildUrl(this.baseUrl, `/admin/payments/member/${encodeURIComponent(id)}`), this.auth, opts?.signal),
353
+ adminSummary: (opts) => request(buildUrl(this.baseUrl, "/admin/payments/summary"), this.auth, opts?.signal),
354
+ exportMonarch: (params, opts) => request(buildUrl(this.baseUrl, "/admin/payments/export", params), this.auth, opts?.signal),
306
355
  list: (params, opts) => request(buildUrl(this.baseUrl, "/payments", params), this.auth, opts?.signal),
307
356
  /** Requires a member token. `memberId` may be omitted by a non-admin (defaults to themselves); admins must pass it. */
308
357
  page: (memberId, duesCollectionId, opts) => post(buildUrl(this.baseUrl, "/payments/page"), this.auth, {
@@ -326,6 +375,7 @@ var PlayaOSClient = class PlayaOSClient {
326
375
  };
327
376
  /** Bookkeeping reads (PLA-1345): camp-year list + ops-binder export preview. */
328
377
  bookkeeping = {
378
+ adminOperation: (payload, opts) => post(buildUrl(this.baseUrl, "/admin/bookkeeping/operations"), this.auth, payload, opts?.signal),
329
379
  years: (opts) => request(buildUrl(this.baseUrl, "/bookkeeping/years"), this.auth, opts?.signal).then((r) => r.data),
330
380
  exportPreview: (params, opts) => request(buildUrl(this.baseUrl, "/bookkeeping/export-preview", params), this.auth, opts?.signal)
331
381
  };
@@ -335,11 +385,23 @@ var PlayaOSClient = class PlayaOSClient {
335
385
  webhookLogs: (params, opts) => request(buildUrl(this.baseUrl, "/audit/webhook-logs", params), this.auth, opts?.signal)
336
386
  };
337
387
  notifications = {
388
+ dispatch: (payload, opts) => post(buildUrl(this.baseUrl, "/notifications/dispatch"), this.auth, payload, opts?.signal),
338
389
  /** Set the acting member's notification high-water mark to now (PLA-1261). */
339
390
  markSeen: (opts) => sendV1("PUT", buildUrl(this.baseUrl, "/notifications/seen"), this.auth, {}, opts?.signal),
340
391
  list: (params, opts) => request(buildUrl(this.baseUrl, "/notifications", params), this.auth, opts?.signal)
341
392
  };
342
393
  documents = {
394
+ memberPage: (params, opts) => request(buildUrl(this.baseUrl, "/members/documents/page", params), this.auth, opts?.signal),
395
+ create: (payload, opts) => post(buildUrl(this.baseUrl, "/documents"), this.auth, payload, opts?.signal),
396
+ update: (id, payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, `/documents/${encodeURIComponent(id)}`), this.auth, payload, opts?.signal),
397
+ delete: (id, opts) => sendV1("DELETE", buildUrl(this.baseUrl, `/documents/${encodeURIComponent(id)}`), this.auth, {}, opts?.signal),
398
+ createUploadUrl: (payload, opts) => post(buildUrl(this.baseUrl, "/documents/upload-url"), this.auth, payload, opts?.signal),
399
+ sourceDownloadUrl: (payload, opts) => post(buildUrl(this.baseUrl, "/documents/source-download-url"), this.auth, payload, opts?.signal),
400
+ getSections: (id, opts) => request(buildUrl(this.baseUrl, `/documents/${encodeURIComponent(id)}/sections`), this.auth, opts?.signal),
401
+ saveSections: (id, payload, opts) => sendV1("PUT", buildUrl(this.baseUrl, `/documents/${encodeURIComponent(id)}/sections`), this.auth, payload, opts?.signal),
402
+ renderContract: (id, opts) => request(buildUrl(this.baseUrl, `/documents/${encodeURIComponent(id)}/render`), this.auth, opts?.signal),
403
+ signatureDownloadUrl: (id, opts) => request(buildUrl(this.baseUrl, `/documents/signatures/${encodeURIComponent(id)}/download-url`), this.auth, opts?.signal),
404
+ deleteSignature: (id, opts) => sendV1("DELETE", buildUrl(this.baseUrl, `/documents/signatures/${encodeURIComponent(id)}`), this.auth, {}, opts?.signal),
343
405
  list: (params, opts) => request(buildUrl(this.baseUrl, "/documents", params), this.auth, opts?.signal),
344
406
  get: (id, opts) => request(buildUrl(this.baseUrl, `/documents/${encodeURIComponent(id)}`), this.auth, opts?.signal),
345
407
  /** Admin member signature rows, optionally filtered to one document. */
@@ -350,6 +412,9 @@ var PlayaOSClient = class PlayaOSClient {
350
412
  downloadUrl: (id, opts) => request(buildUrl(this.baseUrl, `/members/documents/${encodeURIComponent(id)}/download-url`), this.auth, opts?.signal)
351
413
  };
352
414
  meetings = {
415
+ /** Save the acting member's response; the date option must belong to this meeting. */
416
+ rsvp: (id, payload, opts) => sendV1("PUT", buildUrl(this.baseUrl, `/meetings/${encodeURIComponent(id)}/rsvp`), this.auth, payload, opts?.signal),
417
+ cancelRsvp: (id, opts) => sendV1("DELETE", buildUrl(this.baseUrl, `/meetings/${encodeURIComponent(id)}/rsvp`), this.auth, void 0, opts?.signal),
353
418
  list: (params, opts) => request(buildUrl(this.baseUrl, "/meetings", params), this.auth, opts?.signal),
354
419
  get: (id, opts) => request(buildUrl(this.baseUrl, `/meetings/${encodeURIComponent(id)}`), this.auth, opts?.signal),
355
420
  /** Create a meeting (PLA-1266). Admin-only; requires a member token. */
@@ -358,23 +423,48 @@ var PlayaOSClient = class PlayaOSClient {
358
423
  archive: (id, opts) => sendV1("DELETE", buildUrl(this.baseUrl, `/meetings/${encodeURIComponent(id)}`), this.auth, void 0, opts?.signal)
359
424
  };
360
425
  scholarships = {
426
+ adminPage: (params, opts) => request(buildUrl(this.baseUrl, "/scholarships/admin-page", params), this.auth, opts?.signal),
427
+ refresh: (id, opts) => post(buildUrl(this.baseUrl, `/scholarships/${encodeURIComponent(id)}/refresh`), this.auth, {}, opts?.signal),
428
+ stats: (params, opts) => request(buildUrl(this.baseUrl, "/scholarships/stats", params), this.auth, opts?.signal),
361
429
  /** Create a scholarship (code + Givebutter sync). Admin-only (PLA-1266). */
362
430
  create: (payload, opts) => post(buildUrl(this.baseUrl, "/scholarships"), this.auth, payload, opts?.signal),
363
431
  /** 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),
432
+ updateStatus: (id, status, opts) => sendV1("PATCH", buildUrl(this.baseUrl, `/scholarships/${encodeURIComponent(id)}`), this.auth, {
433
+ status,
434
+ ...opts?.providerManaged !== void 0 ? { providerManaged: opts.providerManaged } : {},
435
+ ...opts?.verifyProvider !== void 0 ? { verifyProvider: opts.verifyProvider } : {}
436
+ }, opts?.signal),
365
437
  /** 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)
438
+ remove: (id, opts) => sendV1("DELETE", buildUrl(this.baseUrl, `/scholarships/${encodeURIComponent(id)}`, { providerManaged: opts?.providerManaged }), this.auth, void 0, opts?.signal)
367
439
  };
368
440
  tickets = {
441
+ /** Admin upsert by member and camp year, including members with no existing tracking row. */
442
+ upsert: (memberId, year, payload, opts) => sendV1("PUT", buildUrl(this.baseUrl, `/members/${encodeURIComponent(memberId)}/tickets/${year}`), this.auth, payload, opts?.signal),
369
443
  /** Admin ticket-page projection; requires ticket, vehicle-pass, and member read scopes. */
370
444
  adminList: (params, opts) => request(buildUrl(this.baseUrl, "/tickets/admin", params), this.auth, opts?.signal),
371
445
  /** Update a member's ticket status/confirmation. Admin-only (PLA-1266). */
372
446
  update: (id, payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, `/tickets/${encodeURIComponent(id)}`), this.auth, payload, opts?.signal)
373
447
  };
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) };
448
+ vehiclePasses = {
449
+ /** Admin upsert by member and camp year, including members with no existing tracking row. */
450
+ upsert: (memberId, year, payload, opts) => sendV1("PUT", buildUrl(this.baseUrl, `/members/${encodeURIComponent(memberId)}/vehicle-passes/${year}`), this.auth, payload, opts?.signal),
451
+ /** Update a member's vehicle-pass status. Admin-only (PLA-1266). */
452
+ update: (id, payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, `/vehicle-passes/${encodeURIComponent(id)}`), this.auth, payload, opts?.signal)
453
+ };
377
454
  shelters = {
455
+ adminOperation: (payload, opts) => post(buildUrl(this.baseUrl, "/admin/shelters/operations"), this.auth, payload, opts?.signal),
456
+ createForMember: (payload, opts) => post(buildUrl(this.baseUrl, "/members/me/shelters"), this.auth, payload, opts?.signal),
457
+ updateForMember: (id, payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, `/members/me/shelters/${encodeURIComponent(id)}`), this.auth, payload, opts?.signal),
458
+ deleteForMember: (id, opts) => sendV1("DELETE", buildUrl(this.baseUrl, `/members/me/shelters/${encodeURIComponent(id)}`), this.auth, {}, opts?.signal),
459
+ memberPage: (params, opts) => request(buildUrl(this.baseUrl, "/members/me/shelters", params), this.auth, opts?.signal),
460
+ searchMembers: (params, opts) => request(buildUrl(this.baseUrl, "/shelters/member-search", params), this.auth, opts?.signal),
461
+ requestJoin: (id, opts) => post(buildUrl(this.baseUrl, `/shelters/${encodeURIComponent(id)}/request-join`), this.auth, {}, opts?.signal),
462
+ inviteCandidates: (id, opts) => request(buildUrl(this.baseUrl, `/shelters/${encodeURIComponent(id)}/invite-candidates`), this.auth, opts?.signal),
463
+ previewJoinRequest: (token, opts) => request(buildUrl(this.baseUrl, "/shelters/join-requests/preview", { token }), this.auth, opts?.signal),
464
+ decideJoinRequest: (payload, opts) => post(buildUrl(this.baseUrl, "/shelters/join-requests/decision"), this.auth, payload, opts?.signal),
465
+ requestPayer: (payload, opts) => post(buildUrl(this.baseUrl, "/shelters/payer-requests"), this.auth, payload, opts?.signal),
466
+ pendingPayerRequests: (params, opts) => request(buildUrl(this.baseUrl, "/shelters/payer-requests", params), this.auth, opts?.signal),
467
+ resolvePayerRequests: (payload, opts) => post(buildUrl(this.baseUrl, "/shelters/payer-requests/resolve"), this.auth, payload, opts?.signal),
378
468
  /** Admin-only shelter table/map projection; requires members:read and a member token. */
379
469
  adminList: (params, opts) => request(buildUrl(this.baseUrl, "/shelters/admin", params), this.auth, opts?.signal),
380
470
  list: (params, opts) => request(buildUrl(this.baseUrl, "/shelters", params), this.auth, opts?.signal),
@@ -389,6 +479,9 @@ update: (id, payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, `/vehicle-
389
479
  respond: (assignmentId, accept, opts) => sendV1("PUT", buildUrl(this.baseUrl, `/shelter-assignments/${encodeURIComponent(assignmentId)}/response`), this.auth, { accept }, opts?.signal)
390
480
  };
391
481
  bikes = {
482
+ adminOperation: (payload, opts) => post(buildUrl(this.baseUrl, "/admin/bikes/operations"), this.auth, payload, opts?.signal),
483
+ memberStatus: (params, opts) => request(buildUrl(this.baseUrl, "/members/me/bikes", params), this.auth, opts?.signal),
484
+ reserveForMember: (payload, opts) => post(buildUrl(this.baseUrl, "/members/me/bikes"), this.auth, payload, opts?.signal),
392
485
  list: (params, opts) => request(buildUrl(this.baseUrl, "/bikes", params), this.auth, opts?.signal),
393
486
  get: (id, opts) => request(buildUrl(this.baseUrl, `/bikes/${encodeURIComponent(id)}`), this.auth, opts?.signal),
394
487
  /** Admin-only, camp-owned inventory read; requires members:read and a member token. */
@@ -426,6 +519,11 @@ update: (id, payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, `/vehicle-
426
519
  interestedNotReserved: (opts) => request(buildUrl(this.baseUrl, "/bike-rentals/interested-not-reserved"), this.auth, opts?.signal)
427
520
  };
428
521
  tags = {
522
+ create: (payload, opts) => post(buildUrl(this.baseUrl, "/tags"), this.auth, payload, opts?.signal),
523
+ update: (id, payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, `/tags/${encodeURIComponent(id)}`), this.auth, payload, opts?.signal),
524
+ delete: (id, opts) => sendV1("DELETE", buildUrl(this.baseUrl, `/tags/${encodeURIComponent(id)}`), this.auth, void 0, opts?.signal),
525
+ assign: (memberId, tagId, opts) => post(buildUrl(this.baseUrl, `/members/${encodeURIComponent(memberId)}/tags/${encodeURIComponent(tagId)}`), this.auth, {}, opts?.signal),
526
+ remove: (memberId, tagId, opts) => sendV1("DELETE", buildUrl(this.baseUrl, `/members/${encodeURIComponent(memberId)}/tags/${encodeURIComponent(tagId)}`), this.auth, void 0, opts?.signal),
429
527
  list: (opts) => request(buildUrl(this.baseUrl, "/tags"), this.auth, opts?.signal),
430
528
  /** Admin-only bulk read; requires a member-bound client. */
431
529
  assignments: (opts) => request(buildUrl(this.baseUrl, "/tags/assignments"), this.auth, opts?.signal)
@@ -469,36 +567,75 @@ update: (id, payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, `/vehicle-
469
567
  */
470
568
  campItems: {
471
569
  list: (params, opts) => request(buildUrl(this.baseUrl, "/packing/camp-items", { year: params?.year }), this.auth, opts?.signal ?? params?.signal),
472
- upsert: (payload, opts) => sendV1("PUT", buildUrl(this.baseUrl, "/packing/camp-items"), this.auth, payload, opts?.signal)
570
+ upsert: (payload, opts) => sendV1("PUT", buildUrl(this.baseUrl, "/packing/camp-items"), this.auth, payload, opts?.signal),
571
+ remove: (slug, opts) => sendV1("DELETE", buildUrl(this.baseUrl, "/packing/camp-items"), this.auth, { slug }, opts?.signal),
572
+ createCategory: (payload, opts) => sendV1("POST", buildUrl(this.baseUrl, "/packing/camp-categories"), this.auth, payload, opts?.signal),
573
+ updateCategory: (id, payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, `/packing/camp-categories/${encodeURIComponent(id)}`), this.auth, payload, opts?.signal),
574
+ removeCategory: (id, opts) => sendV1("DELETE", buildUrl(this.baseUrl, `/packing/camp-categories/${encodeURIComponent(id)}`), this.auth, void 0, opts?.signal)
473
575
  }
474
576
  };
475
577
  /**
476
578
  * SAP — Special Access Pass, for early/overnight vehicle arrival (PLA-1202).
477
579
  * Admin/super_admin only; there is no member-facing SAP surface. Year is
478
- * always the org's active camp year — the server derives it, callers never
479
- * pass one.
580
+ * the selected year when supplied, otherwise the org's active camp year.
480
581
  */
481
582
  sap = {
583
+ roster: (params, opts) => request(buildUrl(this.baseUrl, "/sap/roster", params), this.auth, opts?.signal),
482
584
  allocation: {
483
- get: (opts) => request(buildUrl(this.baseUrl, "/sap/allocation"), this.auth, opts?.signal),
585
+ get: (opts) => request(buildUrl(this.baseUrl, "/sap/allocation", { year: opts?.year }), this.auth, opts?.signal),
484
586
  update: (payload, opts) => sendV1("PUT", buildUrl(this.baseUrl, "/sap/allocation"), this.auth, payload, opts?.signal)
485
587
  },
486
588
  dayAllocations: {
487
- list: (opts) => request(buildUrl(this.baseUrl, "/sap/day-allocations"), this.auth, opts?.signal),
589
+ update: (id, payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, `/sap/day-allocations/${encodeURIComponent(id)}`), this.auth, payload, opts?.signal),
590
+ remove: (id, opts) => sendV1("DELETE", buildUrl(this.baseUrl, `/sap/day-allocations/${encodeURIComponent(id)}`), this.auth, {}, opts?.signal),
591
+ list: (opts) => request(buildUrl(this.baseUrl, "/sap/day-allocations", { year: opts?.year }), this.auth, opts?.signal),
488
592
  /** Upserts by (active year, accessDate); 409 on a cross-org date collision. */
489
593
  upsert: (payload, opts) => sendV1("PUT", buildUrl(this.baseUrl, "/sap/day-allocations"), this.auth, payload, opts?.signal)
490
594
  },
491
595
  assignments: {
492
- list: (opts) => request(buildUrl(this.baseUrl, "/sap/assignments"), this.auth, opts?.signal),
596
+ list: (opts) => request(buildUrl(this.baseUrl, "/sap/assignments", { year: opts?.year }), this.auth, opts?.signal),
493
597
  create: (payload, opts) => post(buildUrl(this.baseUrl, "/sap/assignments"), this.auth, payload, opts?.signal),
494
598
  update: (payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, "/sap/assignments"), this.auth, payload, opts?.signal),
495
599
  remove: (assignmentId, opts) => sendV1("DELETE", buildUrl(this.baseUrl, "/sap/assignments"), this.auth, { assignmentId }, opts?.signal)
496
600
  }
497
601
  };
498
- importantDates = {
499
- /** Visible camp dates (PLA-1268), optionally pinned to a year. */
500
- list: (params, opts) => request(buildUrl(this.baseUrl, "/important-dates", params), this.auth, opts?.signal) };
602
+ importantDates = {
603
+ adminList: (opts) => request(buildUrl(this.baseUrl, "/admin/important-dates"), this.auth, opts?.signal),
604
+ adminOperation: (payload, opts) => post(buildUrl(this.baseUrl, "/admin/important-dates"), this.auth, payload, opts?.signal),
605
+ /** Visible camp dates (PLA-1268), optionally pinned to a year. */
606
+ list: (params, opts) => request(buildUrl(this.baseUrl, "/important-dates", params), this.auth, opts?.signal)
607
+ };
501
608
  emails = {
609
+ recipients: (payload, opts) => post(buildUrl(this.baseUrl, "/email/recipients"), this.auth, payload, opts?.signal),
610
+ composerOptions: (params, opts) => request(buildUrl(this.baseUrl, "/email/composer-options", params), this.auth, opts?.signal),
611
+ broadcast: (payload, opts) => post(buildUrl(this.baseUrl, "/email/broadcasts"), this.auth, payload, opts?.signal),
612
+ history: (opts) => request(buildUrl(this.baseUrl, "/email/history"), this.auth, opts?.signal),
613
+ deliveryPage: (params, opts) => request(buildUrl(this.baseUrl, "/email/delivery", params), this.auth, opts?.signal),
614
+ /**
615
+ * Make one failed retry row due now; the retry executor sends it (nothing is sent by this call).
616
+ * Permanent failures are refused with 400.
617
+ */
618
+ retryLog: (id, opts) => post(buildUrl(this.baseUrl, `/email/delivery/${encodeURIComponent(id)}/retry`), this.auth, {}, opts?.signal),
619
+ /** Run this camp's due retry rows through the retry executor now (about 30s budget). */
620
+ retryFailed: (opts) => post(buildUrl(this.baseUrl, "/email/delivery/retry"), this.auth, {}, opts?.signal),
621
+ dismissLog: (id, opts) => post(buildUrl(this.baseUrl, `/email/delivery/${encodeURIComponent(id)}/dismiss`), this.auth, {}, opts?.signal),
622
+ cmsPreview: (id, opts) => post(buildUrl(this.baseUrl, `/email/templates/${encodeURIComponent(id)}/cms-preview`), this.auth, {}, opts?.signal),
623
+ setupContacts: (opts) => post(buildUrl(this.baseUrl, "/email/contacts/setup"), this.auth, {}, opts?.signal),
624
+ /**
625
+ * Sync this camp's members into its own Resend account. Each call works for a bounded time; when
626
+ * it stops at that limit it returns `skipped: true` and a `cursor`. Pass that cursor back as
627
+ * `opts.cursor` to resume after the last processed member, and repeat until `cursor` is null
628
+ * (sync complete). `synced`/`failed` count the one call. Fails with 400 until
629
+ * {@link setupContacts} has run, or on an invalid cursor.
630
+ */
631
+ syncContacts: (opts) => post(buildUrl(this.baseUrl, "/email/contacts/sync", { cursor: opts?.cursor ?? void 0 }), this.auth, {}, opts?.signal),
632
+ /**
633
+ * Release an interview invitation stuck behind an uncertain or abandoned delivery claim, so the
634
+ * next invite attempt sends again. Check the email provider first. Accepted deliveries are never
635
+ * released.
636
+ */
637
+ releaseInvitationDelivery: (applicationId, opts) => post(buildUrl(this.baseUrl, `/email/delivery/applications/${encodeURIComponent(applicationId)}/release`), this.auth, {}, opts?.signal),
638
+ syncTemplates: (opts) => post(buildUrl(this.baseUrl, "/email/templates/sync"), this.auth, {}, opts?.signal),
502
639
  /** Admin template registry (PLA-1265). */
503
640
  listTemplates: (opts) => request(buildUrl(this.baseUrl, "/email/templates"), this.auth, opts?.signal).then((r) => r.data),
504
641
  /** Render-only template preview, as HTML (PLA-1265). */
@@ -507,6 +644,9 @@ list: (params, opts) => request(buildUrl(this.baseUrl, "/important-dates", param
507
644
  listRetries: (params, opts) => request(buildUrl(this.baseUrl, "/email/retries", params), this.auth, opts?.signal)
508
645
  };
509
646
  onboarding = {
647
+ createCustomItem: (payload, opts) => post(buildUrl(this.baseUrl, "/onboarding/custom-items"), this.auth, payload, opts?.signal),
648
+ updateCustomItem: (id, payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, `/onboarding/custom-items/${encodeURIComponent(id)}`), this.auth, payload, opts?.signal),
649
+ deleteCustomItem: (id, opts) => sendV1("DELETE", buildUrl(this.baseUrl, `/onboarding/custom-items/${encodeURIComponent(id)}`), this.auth, void 0, opts?.signal),
510
650
  /** The camp's onboarding checklist template (PLA-1340 adds `priority`). */
511
651
  checklist: (params, opts) => request(buildUrl(this.baseUrl, "/onboarding/checklist", params), this.auth, opts?.signal),
512
652
  /** Per-member checklist completion; non-admins are pinned to themselves. */
@@ -518,6 +658,10 @@ list: (params, opts) => request(buildUrl(this.baseUrl, "/important-dates", param
518
658
  };
519
659
  admin = {
520
660
  applications: {
661
+ workflow: (id, payload, opts) => post(buildUrl(this.baseUrl, `/admin/applications/${encodeURIComponent(id)}/workflow`), this.auth, payload, opts?.signal),
662
+ workflowOptions: (params, opts) => request(buildUrl(this.baseUrl, "/admin/applications/workflow-options", params), this.auth, opts?.signal),
663
+ activity: (id, opts) => request(buildUrl(this.baseUrl, `/admin/applications/${encodeURIComponent(id)}/activity`), this.auth, opts?.signal),
664
+ sendMessage: (id, payload, opts) => post(buildUrl(this.baseUrl, `/admin/applications/${encodeURIComponent(id)}/messages`), this.auth, payload, opts?.signal),
521
665
  /**
522
666
  * Admin-scoped application list (PLA-1322): the member-safe shape plus the
523
667
  * applicant phone, referrer name and admin-managed metadata, with the same