@playaos/api-client 0.54.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)
@@ -479,30 +577,65 @@ update: (id, payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, `/vehicle-
479
577
  /**
480
578
  * SAP — Special Access Pass, for early/overnight vehicle arrival (PLA-1202).
481
579
  * 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.
580
+ * the selected year when supplied, otherwise the org's active camp year.
484
581
  */
485
582
  sap = {
583
+ roster: (params, opts) => request(buildUrl(this.baseUrl, "/sap/roster", params), this.auth, opts?.signal),
486
584
  allocation: {
487
- 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),
488
586
  update: (payload, opts) => sendV1("PUT", buildUrl(this.baseUrl, "/sap/allocation"), this.auth, payload, opts?.signal)
489
587
  },
490
588
  dayAllocations: {
491
- 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),
492
592
  /** Upserts by (active year, accessDate); 409 on a cross-org date collision. */
493
593
  upsert: (payload, opts) => sendV1("PUT", buildUrl(this.baseUrl, "/sap/day-allocations"), this.auth, payload, opts?.signal)
494
594
  },
495
595
  assignments: {
496
- 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),
497
597
  create: (payload, opts) => post(buildUrl(this.baseUrl, "/sap/assignments"), this.auth, payload, opts?.signal),
498
598
  update: (payload, opts) => sendV1("PATCH", buildUrl(this.baseUrl, "/sap/assignments"), this.auth, payload, opts?.signal),
499
599
  remove: (assignmentId, opts) => sendV1("DELETE", buildUrl(this.baseUrl, "/sap/assignments"), this.auth, { assignmentId }, opts?.signal)
500
600
  }
501
601
  };
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) };
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
+ };
505
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),
506
639
  /** Admin template registry (PLA-1265). */
507
640
  listTemplates: (opts) => request(buildUrl(this.baseUrl, "/email/templates"), this.auth, opts?.signal).then((r) => r.data),
508
641
  /** Render-only template preview, as HTML (PLA-1265). */
@@ -511,6 +644,9 @@ list: (params, opts) => request(buildUrl(this.baseUrl, "/important-dates", param
511
644
  listRetries: (params, opts) => request(buildUrl(this.baseUrl, "/email/retries", params), this.auth, opts?.signal)
512
645
  };
513
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),
514
650
  /** The camp's onboarding checklist template (PLA-1340 adds `priority`). */
515
651
  checklist: (params, opts) => request(buildUrl(this.baseUrl, "/onboarding/checklist", params), this.auth, opts?.signal),
516
652
  /** Per-member checklist completion; non-admins are pinned to themselves. */
@@ -522,6 +658,10 @@ list: (params, opts) => request(buildUrl(this.baseUrl, "/important-dates", param
522
658
  };
523
659
  admin = {
524
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),
525
665
  /**
526
666
  * Admin-scoped application list (PLA-1322): the member-safe shape plus the
527
667
  * applicant phone, referrer name and admin-managed metadata, with the same