@playaos/api-client 0.57.0 → 0.58.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/README.md CHANGED
@@ -61,6 +61,44 @@ const created = await client.applications.create({
61
61
 
62
62
  If your deployment serves both route families from the same host, omit `embedBaseUrl` and the client will reuse `baseUrl`.
63
63
 
64
+ ### External application receipts
65
+
66
+ External forms can submit only the fields they collect, plus structured
67
+ `custom_fields`. Omit uncollected birthdays and acknowledgements; never invent
68
+ affirmative consent to satisfy the multi-step wizard's separate requirements.
69
+ The camp must have an active year configured.
70
+
71
+ The approval workflow requires actual principles agreement. An intake without
72
+ that answer can be stored, but cannot be approved. Collect explicit consent in
73
+ forms intended to complete that workflow and pass `agrees_to_principles: true`
74
+ only after the applicant acknowledges it. Missing consent is never an implied
75
+ agreement, and administrators cannot manufacture it during reconciliation.
76
+
77
+ For retryable submissions, create one UUID per logical application and retain it
78
+ with the draft. Send it as `submission_id` on every identical retry:
79
+
80
+ ```ts
81
+ const receipt = await client.applications.create({
82
+ submission_id: submissionId,
83
+ first_name: "Rain",
84
+ last_name: "",
85
+ email: "rain@example.com",
86
+ custom_fields: { interests: ["pickleball"] },
87
+ });
88
+ ```
89
+
90
+ A fresh opted-in acceptance returns `replayed: false`. An identical retry returns
91
+ the same `applicationId` and original `year` with `replayed: true`, without
92
+ changing the saved application. Different answers under an accepted key conflict;
93
+ an email duplicate under another key is not an owned receipt. Retries remain
94
+ scoped to the issuing camp. Keep this operation on the server when its camp
95
+ credential is server-only.
96
+
97
+ Start optional mail or spreadsheet side effects only for an explicit
98
+ `replayed === false` result. A replay or older server's missing flag does not
99
+ prove those side effects are safe to repeat. Saved acceptance and notification
100
+ delivery are separate outcomes; reconcile unknown delivery before resending.
101
+
64
102
  ## Route hosts
65
103
 
66
104
  - `baseUrl` is used for authenticated `/api/v1/*` routes.
@@ -50,6 +50,7 @@ export declare const step5Schema: z.ZodObject<{
50
50
  agrees_to_principles: z.ZodLiteral<true>;
51
51
  }, z.core.$strip>;
52
52
  export declare const applicationSchema: z.ZodObject<{
53
+ submission_id: z.ZodOptional<z.ZodString>;
53
54
  acknowledged_expectations: z.ZodOptional<z.ZodLiteral<true>>;
54
55
  first_name: z.ZodString;
55
56
  last_name: z.ZodString;
@@ -51,9 +51,10 @@ const step5Schema = z.object({
51
51
  agrees_to_principles: z.literal(true, { error: "You must agree to the 10 Principles" })
52
52
  });
53
53
  const applicationSchema = z.object({
54
+ submission_id: z.string().uuid().optional(),
54
55
  acknowledged_expectations: z.literal(true).optional(),
55
56
  first_name: z.string().min(1),
56
- last_name: z.string().min(1),
57
+ last_name: z.string(),
57
58
  email: z.string().email(),
58
59
  phone: z.string().optional(),
59
60
  referral_code: z.string().optional(),
@@ -1 +1 @@
1
- {"version":3,"file":"applications-schema.js","names":[],"sources":["../src/applications-schema.ts"],"sourcesContent":["import { z } from \"zod\";\n\n// Single source of truth for the apply-wizard form shape.\n// The portal apply flow and the @playaos/react <ApplicationForm> SDK both import\n// from here so the validation contract can never drift between them (PLA-483).\n// `ApplicationCreatePayload` in ./types.ts is the zod-free wire mirror; a type\n// equivalence test (applications-schema.test.ts) keeps the two locked together.\n\n// Per-step validation schemas\nexport const step0Schema = z.object({\n acknowledged_expectations: z.literal(true, {\n error: \"Please acknowledge the expectations to continue\",\n }),\n});\n\nexport const step1Schema = z.object({\n first_name: z.string().min(1, \"First name is required\"),\n last_name: z.string().min(1, \"Last name is required\"),\n email: z.string().email(\"Invalid email address\"),\n phone: z.string().min(10, \"Phone number is required\"),\n referral_code: z.string().optional(),\n socials: z.string().optional(),\n birthday: z.string().min(1, \"Birthday is required\"),\n hometown: z.string().min(1, \"Location is required\"),\n});\n\nexport const step2Schema = z.object({\n how_heard: z.string().min(1, \"Please tell us how you heard about us\"),\n burning_man_before: z.enum([\"yes\", \"no\"], { error: \"Please select an option\" }),\n burning_man_years: z.string().optional(),\n});\n\nexport const step3Schema = z.object({\n shelter_type: z.enum([\"joining_rv\", \"bringing_rv\", \"shiftpod_tent\", \"car\", \"truck\", \"van\", \"unsure\"], {\n error: \"Please select a shelter type\",\n }),\n shelter_mates: z.string().optional(),\n ticket_status: z.enum([\"looking\", \"have_ticket\", \"unsure\"], { error: \"Please select your ticket status\" }),\n});\n\nexport const step4Schema = z\n .object({\n build_available: z.boolean(),\n build_skills: z.string().optional(),\n strike_available: z.boolean(),\n strike_help: z.string().optional(),\n // commitmentId → value. Integers only on the number branch (per dataType);\n // per-commitment bounds (min/max) are validated against the live defs at\n // form-render + on the server, not here (PLA-682).\n commitments: z.record(z.string(), z.union([z.number().int(), z.boolean()])).optional(),\n })\n .refine((data) => !data.build_available || data.build_skills, {\n message: \"Please tell us about your build skills\",\n path: [\"build_skills\"],\n })\n .refine((data) => !data.strike_available || data.strike_help, {\n message: \"Please tell us how you can help with strike\",\n path: [\"strike_help\"],\n });\n\nexport const step5Schema = z.object({\n about_yourself: z.string().min(50, \"Please write at least 50 characters about yourself\"),\n agrees_to_principles: z.literal(true, { error: \"You must agree to the 10 Principles\" }),\n});\n\n// Combined schema for API-level validation — permissive so external camps\n// can submit applications with only first_name + last_name + email + custom_fields.\n// Step schemas (above) remain strict for the PlayaOS wizard UI.\nexport const applicationSchema = z.object({\n acknowledged_expectations: z.literal(true).optional(),\n first_name: z.string().min(1),\n last_name: z.string().min(1),\n email: z.string().email(),\n phone: z.string().optional(),\n referral_code: z.string().optional(),\n socials: z.string().optional(),\n birthday: z.string().optional(),\n hometown: z.string().optional(),\n how_heard: z.string().optional(),\n burning_man_before: z.enum([\"yes\", \"no\"]).optional(),\n burning_man_years: z.string().optional(),\n shelter_type: z.enum([\"joining_rv\", \"bringing_rv\", \"shiftpod_tent\", \"car\", \"truck\", \"van\", \"unsure\"]).optional(),\n shelter_mates: z.string().optional(),\n ticket_status: z.enum([\"looking\", \"have_ticket\", \"unsure\"]).optional(),\n build_available: z.boolean().optional(),\n build_skills: z.string().optional(),\n strike_available: z.boolean().optional(),\n strike_help: z.string().optional(),\n about_yourself: z.string().optional(),\n agrees_to_principles: z.literal(true).optional(),\n // Permissive at the API level (no bounds checks) — the server validates each\n // value against the live commitment definition before seeding (PLA-682).\n commitments: z.record(z.string(), z.union([z.number(), z.boolean()])).optional(),\n custom_fields: z.object({}).passthrough().optional(),\n});\n\nexport type ApplicationFormData = z.infer<typeof applicationSchema>;\nexport type Step0Data = z.infer<typeof step0Schema>;\nexport type Step1Data = z.infer<typeof step1Schema>;\nexport type Step2Data = z.infer<typeof step2Schema>;\nexport type Step3Data = z.infer<typeof step3Schema>;\nexport type Step4Data = z.infer<typeof step4Schema>;\nexport type Step5Data = z.infer<typeof step5Schema>;\n"],"mappings":";;AASA,MAAa,cAAc,EAAE,OAAO,EAClC,2BAA2B,EAAE,QAAQ,MAAM,EACzC,OAAO,kDACT,CAAC,EACH,CAAC;AAED,MAAa,cAAc,EAAE,OAAO;CAClC,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,GAAG,wBAAwB;CACtD,WAAW,EAAE,OAAO,CAAC,CAAC,IAAI,GAAG,uBAAuB;CACpD,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,uBAAuB;CAC/C,OAAO,EAAE,OAAO,CAAC,CAAC,IAAI,IAAI,0BAA0B;CACpD,eAAe,EAAE,OAAO,CAAC,CAAC,SAAS;CACnC,SAAS,EAAE,OAAO,CAAC,CAAC,SAAS;CAC7B,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,GAAG,sBAAsB;CAClD,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,GAAG,sBAAsB;AACpD,CAAC;AAED,MAAa,cAAc,EAAE,OAAO;CAClC,WAAW,EAAE,OAAO,CAAC,CAAC,IAAI,GAAG,uCAAuC;CACpE,oBAAoB,EAAE,KAAK,CAAC,OAAO,IAAI,GAAG,EAAE,OAAO,0BAA0B,CAAC;CAC9E,mBAAmB,EAAE,OAAO,CAAC,CAAC,SAAS;AACzC,CAAC;AAED,MAAa,cAAc,EAAE,OAAO;CAClC,cAAc,EAAE,KAAK;EAAC;EAAc;EAAe;EAAiB;EAAO;EAAS;EAAO;CAAQ,GAAG,EACpG,OAAO,+BACT,CAAC;CACD,eAAe,EAAE,OAAO,CAAC,CAAC,SAAS;CACnC,eAAe,EAAE,KAAK;EAAC;EAAW;EAAe;CAAQ,GAAG,EAAE,OAAO,mCAAmC,CAAC;AAC3G,CAAC;AAED,MAAa,cAAc,EACxB,OAAO;CACN,iBAAiB,EAAE,QAAQ;CAC3B,cAAc,EAAE,OAAO,CAAC,CAAC,SAAS;CAClC,kBAAkB,EAAE,QAAQ;CAC5B,aAAa,EAAE,OAAO,CAAC,CAAC,SAAS;CAIjC,aAAa,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;AACvF,CAAC,CAAC,CACD,QAAQ,SAAS,CAAC,KAAK,mBAAmB,KAAK,cAAc;CAC5D,SAAS;CACT,MAAM,CAAC,cAAc;AACvB,CAAC,CAAC,CACD,QAAQ,SAAS,CAAC,KAAK,oBAAoB,KAAK,aAAa;CAC5D,SAAS;CACT,MAAM,CAAC,aAAa;AACtB,CAAC;AAEH,MAAa,cAAc,EAAE,OAAO;CAClC,gBAAgB,EAAE,OAAO,CAAC,CAAC,IAAI,IAAI,oDAAoD;CACvF,sBAAsB,EAAE,QAAQ,MAAM,EAAE,OAAO,sCAAsC,CAAC;AACxF,CAAC;AAKD,MAAa,oBAAoB,EAAE,OAAO;CACxC,2BAA2B,EAAE,QAAQ,IAAI,CAAC,CAAC,SAAS;CACpD,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CAC5B,WAAW,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC;CAC3B,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM;CACxB,OAAO,EAAE,OAAO,CAAC,CAAC,SAAS;CAC3B,eAAe,EAAE,OAAO,CAAC,CAAC,SAAS;CACnC,SAAS,EAAE,OAAO,CAAC,CAAC,SAAS;CAC7B,UAAU,EAAE,OAAO,CAAC,CAAC,SAAS;CAC9B,UAAU,EAAE,OAAO,CAAC,CAAC,SAAS;CAC9B,WAAW,EAAE,OAAO,CAAC,CAAC,SAAS;CAC/B,oBAAoB,EAAE,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,SAAS;CACnD,mBAAmB,EAAE,OAAO,CAAC,CAAC,SAAS;CACvC,cAAc,EAAE,KAAK;EAAC;EAAc;EAAe;EAAiB;EAAO;EAAS;EAAO;CAAQ,CAAC,CAAC,CAAC,SAAS;CAC/G,eAAe,EAAE,OAAO,CAAC,CAAC,SAAS;CACnC,eAAe,EAAE,KAAK;EAAC;EAAW;EAAe;CAAQ,CAAC,CAAC,CAAC,SAAS;CACrE,iBAAiB,EAAE,QAAQ,CAAC,CAAC,SAAS;CACtC,cAAc,EAAE,OAAO,CAAC,CAAC,SAAS;CAClC,kBAAkB,EAAE,QAAQ,CAAC,CAAC,SAAS;CACvC,aAAa,EAAE,OAAO,CAAC,CAAC,SAAS;CACjC,gBAAgB,EAAE,OAAO,CAAC,CAAC,SAAS;CACpC,sBAAsB,EAAE,QAAQ,IAAI,CAAC,CAAC,SAAS;CAG/C,aAAa,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;CAC/E,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,SAAS;AACrD,CAAC"}
1
+ {"version":3,"file":"applications-schema.js","names":[],"sources":["../src/applications-schema.ts"],"sourcesContent":["import { z } from \"zod\";\n\n// Single source of truth for the apply-wizard form shape.\n// The portal apply flow and the @playaos/react <ApplicationForm> SDK both import\n// from here so the validation contract can never drift between them (PLA-483).\n// `ApplicationCreatePayload` in ./types.ts is the zod-free wire mirror; a type\n// equivalence test (applications-schema.test.ts) keeps the two locked together.\n\n// Per-step validation schemas\nexport const step0Schema = z.object({\n acknowledged_expectations: z.literal(true, {\n error: \"Please acknowledge the expectations to continue\",\n }),\n});\n\nexport const step1Schema = z.object({\n first_name: z.string().min(1, \"First name is required\"),\n last_name: z.string().min(1, \"Last name is required\"),\n email: z.string().email(\"Invalid email address\"),\n phone: z.string().min(10, \"Phone number is required\"),\n referral_code: z.string().optional(),\n socials: z.string().optional(),\n birthday: z.string().min(1, \"Birthday is required\"),\n hometown: z.string().min(1, \"Location is required\"),\n});\n\nexport const step2Schema = z.object({\n how_heard: z.string().min(1, \"Please tell us how you heard about us\"),\n burning_man_before: z.enum([\"yes\", \"no\"], { error: \"Please select an option\" }),\n burning_man_years: z.string().optional(),\n});\n\nexport const step3Schema = z.object({\n shelter_type: z.enum([\"joining_rv\", \"bringing_rv\", \"shiftpod_tent\", \"car\", \"truck\", \"van\", \"unsure\"], {\n error: \"Please select a shelter type\",\n }),\n shelter_mates: z.string().optional(),\n ticket_status: z.enum([\"looking\", \"have_ticket\", \"unsure\"], { error: \"Please select your ticket status\" }),\n});\n\nexport const step4Schema = z\n .object({\n build_available: z.boolean(),\n build_skills: z.string().optional(),\n strike_available: z.boolean(),\n strike_help: z.string().optional(),\n // commitmentId → value. Integers only on the number branch (per dataType);\n // per-commitment bounds (min/max) are validated against the live defs at\n // form-render + on the server, not here (PLA-682).\n commitments: z.record(z.string(), z.union([z.number().int(), z.boolean()])).optional(),\n })\n .refine((data) => !data.build_available || data.build_skills, {\n message: \"Please tell us about your build skills\",\n path: [\"build_skills\"],\n })\n .refine((data) => !data.strike_available || data.strike_help, {\n message: \"Please tell us how you can help with strike\",\n path: [\"strike_help\"],\n });\n\nexport const step5Schema = z.object({\n about_yourself: z.string().min(50, \"Please write at least 50 characters about yourself\"),\n agrees_to_principles: z.literal(true, { error: \"You must agree to the 10 Principles\" }),\n});\n\n// Combined schema for API-level validation — permissive so external camps\n// can submit applications with only first_name + last_name + email + custom_fields.\n// Step schemas (above) remain strict for the PlayaOS wizard UI.\nexport const applicationSchema = z.object({\n submission_id: z.string().uuid().optional(),\n acknowledged_expectations: z.literal(true).optional(),\n first_name: z.string().min(1),\n last_name: z.string(),\n email: z.string().email(),\n phone: z.string().optional(),\n referral_code: z.string().optional(),\n socials: z.string().optional(),\n birthday: z.string().optional(),\n hometown: z.string().optional(),\n how_heard: z.string().optional(),\n burning_man_before: z.enum([\"yes\", \"no\"]).optional(),\n burning_man_years: z.string().optional(),\n shelter_type: z.enum([\"joining_rv\", \"bringing_rv\", \"shiftpod_tent\", \"car\", \"truck\", \"van\", \"unsure\"]).optional(),\n shelter_mates: z.string().optional(),\n ticket_status: z.enum([\"looking\", \"have_ticket\", \"unsure\"]).optional(),\n build_available: z.boolean().optional(),\n build_skills: z.string().optional(),\n strike_available: z.boolean().optional(),\n strike_help: z.string().optional(),\n about_yourself: z.string().optional(),\n agrees_to_principles: z.literal(true).optional(),\n // Permissive at the API level (no bounds checks) — the server validates each\n // value against the live commitment definition before seeding (PLA-682).\n commitments: z.record(z.string(), z.union([z.number(), z.boolean()])).optional(),\n custom_fields: z.object({}).passthrough().optional(),\n});\n\nexport type ApplicationFormData = z.infer<typeof applicationSchema>;\nexport type Step0Data = z.infer<typeof step0Schema>;\nexport type Step1Data = z.infer<typeof step1Schema>;\nexport type Step2Data = z.infer<typeof step2Schema>;\nexport type Step3Data = z.infer<typeof step3Schema>;\nexport type Step4Data = z.infer<typeof step4Schema>;\nexport type Step5Data = z.infer<typeof step5Schema>;\n"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -35,6 +35,19 @@ type PaginationParams = {
35
35
  /** Opaque cursor from a previous response's nextCursor. */
36
36
  cursor?: string;
37
37
  };
38
+ /**
39
+ * Event scope for event-scoped reads and writes (ADR-132). Send `eventId` for a canonical event.
40
+ * Year handling is endpoint-specific during the ADR-132 rollout (`playa-0i3qp.11.3.x`): endpoints
41
+ * that have adopted the contract resolve a `year` alone to at most one event and answer
42
+ * 409 `EVENT_REQUIRED` with the candidate events when it matches several; endpoints that have
43
+ * not adopted it yet still treat `year` as the legacy annual filter.
44
+ */
45
+ type EventScopeParams = {
46
+ /** Legacy camp year. */
47
+ year?: number;
48
+ /** Canonical event ID. */
49
+ eventId?: string;
50
+ };
38
51
  interface Member {
39
52
  id: string;
40
53
  firstName: string;
@@ -123,7 +136,29 @@ interface ApplicationCapacity {
123
136
  limit: number;
124
137
  atCapacity: boolean;
125
138
  }
139
+ interface ApplicationWorkflowCapabilities {
140
+ transitions: {
141
+ to: "approved" | "rejected" | "waitlisted" | "interviewed";
142
+ enabled: boolean;
143
+ reason?: string;
144
+ }[];
145
+ invite: {
146
+ enabled: boolean;
147
+ reason?: string;
148
+ };
149
+ interviewNote: {
150
+ enabled: boolean;
151
+ reason?: string;
152
+ };
153
+ annotations: {
154
+ notes: boolean;
155
+ tags: boolean;
156
+ scores: boolean;
157
+ };
158
+ }
126
159
  interface ApplicationAdmin extends Application {
160
+ /** Advisory server policy; writes remain authoritative. Absent on older servers. */
161
+ workflowCapabilities?: ApplicationWorkflowCapabilities;
127
162
  /** Applicant phone from the joined profile (PLA-1322). */
128
163
  phone: string | null;
129
164
  /** Applicant birthday (YYYY-MM-DD) from the joined profile (PLA-1332). */
@@ -174,6 +209,15 @@ interface ImportantDate {
174
209
  category: string | null;
175
210
  year: number;
176
211
  }
212
+ type EventStatus = "draft" | "published" | "archived";
213
+ interface EventSummary {
214
+ id: string;
215
+ name: string;
216
+ status: EventStatus;
217
+ startDate: string | null;
218
+ endDate: string | null;
219
+ timezone: string | null;
220
+ }
177
221
  interface SummerCampAttendee {
178
222
  profileId: string;
179
223
  nightsAttending: string[];
@@ -288,8 +332,9 @@ interface PhotoExportJob {
288
332
  completedAt: string | null;
289
333
  }
290
334
  interface CreatePhotoExportInput {
335
+ /** Canonical event (`events.id`) to export. Required since 0.58.0, which removed `year`. */
336
+ eventId: string;
291
337
  attending?: "true" | "all";
292
- year?: number;
293
338
  role?: string;
294
339
  status?: string;
295
340
  search?: string;
@@ -300,7 +345,8 @@ interface OnboardingProgress {
300
345
  orgId: string;
301
346
  userId: string;
302
347
  itemId: string;
303
- year: number;
348
+ eventId: string | null;
349
+ year: number | null;
304
350
  completed: boolean | null;
305
351
  }
306
352
  /** A camp year with its per-year member/date counts (`GET /bookkeeping/years`, PLA-1345). */
@@ -444,7 +490,8 @@ interface MemberCustomChecklistItem {
444
490
  categoryId: string;
445
491
  name: string;
446
492
  completed: boolean | null;
447
- year: number;
493
+ eventId: string | null;
494
+ year: number | null;
448
495
  }
449
496
  interface DuesStatus {
450
497
  userId: string | null;
@@ -471,6 +518,10 @@ interface MemberDuesStatus {
471
518
  attendanceResponse: string | null;
472
519
  /** Whether the member has ever signed in (PLA-1343). */
473
520
  hasLoggedIn: boolean | null;
521
+ /** Event the row is for; absent or null on the annual path (ADR-132). */
522
+ eventId?: string | null;
523
+ /** Event participation status; absent or null on the annual path. */
524
+ participationStatus?: string | null;
474
525
  }
475
526
  /** Per-tier dues totals from `dues_summary` (PLA-1336). */
476
527
  interface DuesSummaryRow {
@@ -520,6 +571,8 @@ interface ShiftSignup {
520
571
  userId: string;
521
572
  status: string | null;
522
573
  role: string | null;
574
+ canceledAt?: string | null;
575
+ waitlistedAt?: string | null;
523
576
  }
524
577
  interface ShiftType {
525
578
  id: string;
@@ -527,6 +580,10 @@ interface ShiftType {
527
580
  description: string | null;
528
581
  }
529
582
  interface Shift {
583
+ /** Server-owned self-service time window only; publication and capacity are separate. */
584
+ selfServiceOpen?: boolean;
585
+ /** Effective capacity for self-service signup; independent of mobile/admin policies. */
586
+ selfSignupCapacity?: number;
530
587
  id: string;
531
588
  orgId: string;
532
589
  shiftDate: string;
@@ -588,8 +645,28 @@ interface AdminShelter {
588
645
  } | null;
589
646
  }>;
590
647
  }
648
+ /** An organization-owned event, as listed on `GET /org` (ADR-132). */
649
+ interface OrgEvent {
650
+ id: string;
651
+ name: string;
652
+ slug: string;
653
+ status: "draft" | "published" | "archived";
654
+ startDate: string | null;
655
+ endDate: string | null;
656
+ }
591
657
  interface OrgConfig {
658
+ /** Canonical branding fields; absent on older API deployments. */
659
+ tagline?: string | null;
660
+ description?: string | null;
661
+ /**
662
+ * @deprecated Display and legacy use only: the configured active camp year, else the current
663
+ * calendar year. Not an event scope (ADR-132); send `eventId` or an explicit `year` instead.
664
+ */
592
665
  activeCampYear: number;
666
+ /** Actual configured active camp year; absent on older API deployments. Never a calendar fallback. */
667
+ configuredActiveCampYear?: number | null;
668
+ /** The organization's events, ordered by start date; absent on older API deployments (ADR-132). */
669
+ events?: OrgEvent[];
593
670
  id: string;
594
671
  name: string;
595
672
  slug: string;
@@ -821,6 +898,8 @@ interface MemberGroupRosterRow {
821
898
  profileStatus: string | null;
822
899
  }
823
900
  interface ApplicationCreatePayload {
901
+ /** Stable opaque UUID for exact-payload receipt recovery; never reuse for changed answers. */
902
+ submission_id?: string;
824
903
  acknowledged_expectations?: true;
825
904
  first_name: string;
826
905
  last_name: string;
@@ -849,6 +928,10 @@ interface ApplicationCreatePayload {
849
928
  interface ApplicationCreateResponse {
850
929
  applicationId: string;
851
930
  status: string;
931
+ /** Original accepted camp year. */
932
+ year?: number;
933
+ /** Present for opted-in submissions; only false authorizes fresh delivery side effects. */
934
+ replayed?: boolean;
852
935
  }
853
936
  interface ApplicationTransitionPayload {
854
937
  to: ApplicationStatus;
@@ -1291,8 +1374,10 @@ interface BikeRentalInterestedMember {
1291
1374
  unmatchable: boolean;
1292
1375
  }
1293
1376
  interface BikeRentalInterestedNotReservedResponse {
1294
- /** Active camp year; the calendar year when no camp year is active. */
1377
+ /** Camp year of the list; for an event, its start year. */
1295
1378
  year: number;
1379
+ /** Event the list is for; null on the annual path. */
1380
+ eventId: string | null;
1296
1381
  items: BikeRentalInterestedMember[];
1297
1382
  }
1298
1383
  /** Email template registry entry (PLA-1265). */
@@ -1381,7 +1466,8 @@ interface Scholarship {
1381
1466
  id: string;
1382
1467
  orgId: string;
1383
1468
  userId: string;
1384
- year: number;
1469
+ eventId: string | null;
1470
+ year: number | null;
1385
1471
  promoCode: string;
1386
1472
  discountAmount: string;
1387
1473
  reason: string | null;
@@ -1396,6 +1482,7 @@ interface CreateScholarshipInput {
1396
1482
  discountAmount: number;
1397
1483
  reason?: string;
1398
1484
  year?: number;
1485
+ eventId?: string;
1399
1486
  }
1400
1487
  type TicketStatus = "have_ticket" | "need_ticket" | "step_enrolled" | "low_income_approved";
1401
1488
  interface AdminTicketRow extends Ticket {
@@ -1496,6 +1583,26 @@ interface MemberBootstrap {
1496
1583
  externalUrl: string | null;
1497
1584
  }>;
1498
1585
  }
1586
+ /** Acting member's active-year dues flags and attributed payment history. */
1587
+ interface MemberPaymentsOverview {
1588
+ year: number;
1589
+ duesStatus: {
1590
+ hasPaidBaseDues: boolean;
1591
+ hasPaidRvDues: boolean;
1592
+ ownsRvShelter: boolean;
1593
+ rvAmperage: number | null;
1594
+ rvType: string | null;
1595
+ totalPaid: number;
1596
+ };
1597
+ payments: Array<{
1598
+ id: string;
1599
+ amount: number;
1600
+ paymentMethod: string | null;
1601
+ paymentStatus: string | null;
1602
+ paymentDate: string | null;
1603
+ }>;
1604
+ donationWidgetId: string | null;
1605
+ }
1499
1606
  interface MemberDashboard {
1500
1607
  year: number;
1501
1608
  profile: MemberSelfProfile;
@@ -2143,6 +2250,11 @@ interface SchedulingAdminResult {
2143
2250
  success?: boolean;
2144
2251
  }
2145
2252
  interface SchedulingAdminSettings {
2253
+ /** Missing on older servers; an empty array means no active camp booking links. */
2254
+ bookingLinks?: {
2255
+ id: string;
2256
+ title: string;
2257
+ }[];
2146
2258
  googleConnected: boolean;
2147
2259
  interviewer: {
2148
2260
  id: string;
@@ -2283,11 +2395,12 @@ interface AdminScholarshipsPage {
2283
2395
  scholarships: {
2284
2396
  id: string;
2285
2397
  userId: string;
2398
+ eventId: string | null;
2286
2399
  promoCode: string;
2287
2400
  discountAmount: string;
2288
2401
  reason: string | null;
2289
2402
  status: ScholarshipStatus;
2290
- year: number;
2403
+ year: number | null;
2291
2404
  usedAt: string | null;
2292
2405
  createdAt: string | null;
2293
2406
  profile: {
@@ -2995,6 +3108,17 @@ export declare class PlayaOSClient {
2995
3108
  dashboard: (opts?: {
2996
3109
  signal?: AbortSignal;
2997
3110
  }) => Promise<MemberDashboard>;
3111
+ /** Always the acting member, including admins; requires a member token and members:read scope. */
3112
+ paymentOverview: (opts?: {
3113
+ signal?: AbortSignal;
3114
+ }) => Promise<MemberPaymentsOverview>;
3115
+ /** Acting member's original photo only; missing originals return 404, never an avatar fallback. */
3116
+ selfPhotoDownloadUrl: (opts?: {
3117
+ signal?: AbortSignal;
3118
+ }) => Promise<{
3119
+ url: string;
3120
+ fileName: string;
3121
+ }>;
2998
3122
  /** Presigned profile-photo upload (PLA-1263). PUT the bytes, then setPhoto. */
2999
3123
  createPhotoUploadUrl: (payload: {
3000
3124
  contentType: "image/jpeg" | "image/png" | "image/webp";
@@ -3060,6 +3184,8 @@ export declare class PlayaOSClient {
3060
3184
  sortBy?: "name" | "email" | "role" | "status" | "createdAt";
3061
3185
  sortOrder?: "asc" | "desc";
3062
3186
  attending?: "true" | "false";
3187
+ /** Canonical event to scope `attending` to; alone, lists that event's participants. */
3188
+ eventId?: string;
3063
3189
  } & PaginationParams & {
3064
3190
  /** Raw row offset — the members table's pager. Mutually exclusive with `cursor`. */
3065
3191
  offset?: number;
@@ -3572,9 +3698,7 @@ export declare class PlayaOSClient {
3572
3698
  }>;
3573
3699
  };
3574
3700
  readonly scholarships: {
3575
- adminPage: (params?: {
3576
- year?: number;
3577
- }, opts?: {
3701
+ adminPage: (params?: EventScopeParams, opts?: {
3578
3702
  signal?: AbortSignal;
3579
3703
  }) => Promise<AdminScholarshipsPage>;
3580
3704
  refresh: (id: string, opts?: {
@@ -3583,9 +3707,7 @@ export declare class PlayaOSClient {
3583
3707
  givebutterActive: boolean;
3584
3708
  givebutterUsed: number;
3585
3709
  }>;
3586
- stats: (params?: {
3587
- year?: number;
3588
- }, opts?: {
3710
+ stats: (params?: EventScopeParams, opts?: {
3589
3711
  signal?: AbortSignal;
3590
3712
  }) => Promise<ScholarshipStats>;
3591
3713
  /** Create a scholarship (code + Givebutter sync). Admin-only (PLA-1266). */
@@ -3869,8 +3991,11 @@ export declare class PlayaOSClient {
3869
3991
  requestReservation: (payload: BikeRentalRequestInput, opts?: {
3870
3992
  signal?: AbortSignal;
3871
3993
  }) => Promise<BikeRentalRequestResult>;
3872
- /** Members who said they want a bike but have no reservation, for the active camp year. Org key only. */
3873
- interestedNotReserved: (opts?: {
3994
+ /**
3995
+ * Members who said they want a bike but have no reservation, for one event or camp year. With
3996
+ * no params, the camp's configured active camp year. Org key only.
3997
+ */
3998
+ interestedNotReserved: (params?: EventScopeParams, opts?: {
3874
3999
  signal?: AbortSignal;
3875
4000
  }) => Promise<BikeRentalInterestedNotReservedResponse>;
3876
4001
  };
@@ -4173,6 +4298,14 @@ export declare class PlayaOSClient {
4173
4298
  signal?: AbortSignal;
4174
4299
  }) => Promise<ImportantDate[]>;
4175
4300
  };
4301
+ readonly events: {
4302
+ /** The camp's events with the given status (default `published`), earliest first. */
4303
+ list: (params?: {
4304
+ status?: EventStatus;
4305
+ }, opts?: {
4306
+ signal?: AbortSignal;
4307
+ }) => Promise<EventSummary[]>;
4308
+ };
4176
4309
  readonly emails: {
4177
4310
  recipients: (payload: EmailRecipientFilter, opts?: {
4178
4311
  signal?: AbortSignal;
@@ -4320,22 +4453,19 @@ export declare class PlayaOSClient {
4320
4453
  /** Per-member checklist completion; non-admins are pinned to themselves. */
4321
4454
  progress: (params?: {
4322
4455
  userId?: string;
4323
- year?: number;
4324
- } & PaginationParams, opts?: {
4456
+ } & EventScopeParams & PaginationParams, opts?: {
4325
4457
  signal?: AbortSignal;
4326
4458
  }) => Promise<Paginated<OnboardingProgress>>;
4327
4459
  /** The acting member's own custom checklist items for a year (PLA-1340). */
4328
4460
  customItems: (params?: {
4329
4461
  userId?: string;
4330
- year?: number;
4331
- } & PaginationParams, opts?: {
4462
+ } & EventScopeParams & PaginationParams, opts?: {
4332
4463
  signal?: AbortSignal;
4333
4464
  }) => Promise<Paginated<MemberCustomChecklistItem>>;
4334
4465
  /** Tick a checklist item for the acting member (PLA-1259). */
4335
4466
  setProgress: (itemId: string, payload: {
4336
4467
  completed: boolean;
4337
- year?: number;
4338
- }, opts?: {
4468
+ } & EventScopeParams, opts?: {
4339
4469
  signal?: AbortSignal;
4340
4470
  }) => Promise<OnboardingProgress>;
4341
4471
  };
@@ -4544,23 +4674,21 @@ export declare class PlayaOSClient {
4544
4674
  accessToken?: string;
4545
4675
  signal?: AbortSignal;
4546
4676
  }) => Promise<DuesUpdateResponse>;
4547
- /** Per-member dues state from `member_dues_status` (PLA-1336). V1-only — requires a member token. */
4548
- status: (params?: {
4549
- year?: number;
4550
- }, opts?: {
4677
+ /**
4678
+ * Per-member dues state for one event or camp year (PLA-1336, ADR-132). With no params, the
4679
+ * configured active camp year. V1-only — requires a member token.
4680
+ */
4681
+ status: (params?: EventScopeParams, opts?: {
4551
4682
  signal?: AbortSignal;
4552
4683
  }) => Promise<MemberDuesStatus[]>;
4553
- /** Per-tier dues totals from `dues_summary` (PLA-1336). V1-only — requires a member token. */
4554
- summary: (params?: {
4555
- year?: number;
4556
- }, opts?: {
4684
+ /** Per-tier dues totals for one event or camp year (PLA-1336, ADR-132). V1-only — requires a member token. */
4685
+ summary: (params?: EventScopeParams, opts?: {
4557
4686
  signal?: AbortSignal;
4558
4687
  }) => Promise<DuesSummaryRow[]>;
4559
- /** Members who paid a given dues type (PLA-1336). V1-only — requires a member token. */
4688
+ /** Members who paid a given dues type, for one event or camp year (PLA-1336, ADR-132). V1-only — requires a member token. */
4560
4689
  payors: (params: {
4561
4690
  duesType: string;
4562
- year: number;
4563
- }, opts?: {
4691
+ } & EventScopeParams, opts?: {
4564
4692
  signal?: AbortSignal;
4565
4693
  }) => Promise<DuesTypePayor[]>;
4566
4694
  };
@@ -4759,5 +4887,5 @@ interface PublicMarketplaceClient {
4759
4887
  }
4760
4888
  export declare function createPublicMarketplaceClient(opts: PublicMarketplaceClientOptions): PublicMarketplaceClient;
4761
4889
  //#endregion
4762
- export type { AccountReviewProfile, AdminAccountsOperation, AdminAccountsPage, AdminBikeInterestRow, AdminBikeInventory, AdminBikeOperation, AdminBikeOperationResult, AdminBikeRental, AdminBikeType, AdminCampDocument, AdminCampSettings, AdminDocumentSignature, AdminGivebutterCatalog, AdminGivebutterCatalogOperation, AdminGivebutterWidgetOperation, AdminGivebutterWidgets, AdminImportOperation, AdminImportResult, AdminImportRow, AdminImportantDate, AdminImportantDateInput, AdminImportantDateOperation, AdminInterviewBooking, AdminMemberExportRow, AdminMemberInvite, AdminMemberOperation, AdminMemberRole, AdminMemberStatus, AdminNotificationPrefs, AdminPaymentOperation, AdminPaymentOperationResult, AdminPaymentSummary, AdminPaymentsPage, AdminScholarshipsPage, AdminShelter, AdminShelterOperation, AdminShift, AdminShiftType, AdminTicketRow, AdminWebhooksPage, Application, ApplicationActivityItem, ApplicationAdmin, ApplicationAnnotations, ApplicationCapacity, ApplicationCreatePayload, ApplicationCreateResponse, ApplicationNote, ApplicationScore, ApplicationStatus, ApplicationTransitionPayload, ApplicationTransitionResponse, ApplicationWorkflowInput, ApplicationWorkflowOptions, BikeRentalCatalogItem, BikeRentalCatalogResponse, BikeRentalDeliveryMode, BikeRentalFramePreference, BikeRentalInterestedMember, BikeRentalInterestedNotReservedResponse, BikeRentalRequestInput, BikeRentalRequestResult, BikeRentalReservation, BikeRentalReservationListResponse, BikeRentalWaiver, BookkeepingAdminOperation, BookkeepingExportPreview, BuildStrikeReportRow, CampDocumentDownloadUrl, CampDocumentSignature, CampDocumentSignaturesResponse, CampSettingsOperation, CampYearWithCounts, Commitment, CommitmentDataType, CommitmentValue, CommitmentsListResponse, ContactSyncResponse, ContractSection, CreateMeetingInput, CreateSapAssignmentInput, CreateScholarshipInput, DailyHeadcount, DashboardMetrics, DirectoryMember, DirectoryMembersListResponse, DocumentWriteInput, DuesStatus, DuesSummaryRow, DuesTypePayor, EmailCmsPreview, EmailComposerOptions, EmailDeliveryPage, EmailLog, EmailRecipient, EmailRecipientFilter, EmailRetry, EmailRetryCount, EmailRetryListResponse, EmailSegmentKey, EmailTemplate, ExchangeParams, ExchangeResult, ImageUploadTarget, ImportantDate, InterviewFeedBooking, ListingImage, LogisticsBreakdowns, LogisticsSummary, MarketplaceFlagReason, Meeting, MeetingDateOption, MeetingListResponse, MeetingRsvp, Member, MemberBikeStatus, MemberBootstrap, MemberCreatePayload, MemberCreateResponse, MemberCustomChecklistItem, MemberDashboard, MemberDeactivateResponse, MemberDevice, MemberDocumentPage, MemberDuesStatus, MemberGateId, MemberGatePlan, MemberGateStep, MemberInboxNotification, MemberInboxPage, MemberOnboardingUpdate, MemberPreferences, MemberProfileDetails, MemberPushPreferences, MemberRole, MemberSelfProfile, MemberSelfProfilePatch, MemberShelter, MemberShelterPage, MemberShiftView, MemberTag, MemberTagAssignment, MemberTagWithMemberCount, MemberUpdatePayload, MemberUpdateResponse, MobileShifts, NewListingInput, OnboardingChecklistCategory, OnboardingChecklistItem, OnboardingProgress, OrgConfig, OwnerShelterCreate, OwnerShelterPatch, PackingCampAdminItem, PackingCampAdminList, PackingCampCategory, PackingCampCategoryInput, PackingCampItem, PackingContainer, PackingContainerInput, PackingContainerListResponse, PackingContainerType, PackingItem, PackingItemStatus, PackingLayer, PackingListResponse, PackingPersonalItem, PackingPlacementListResponse, PaymentPageResponse, PublicMarketplaceClient, PublicMarketplaceClientOptions, RvAmperageTotal, SapAllocation, SapAssignment, SapDayAllocation, SchedulingAdminOperation, SchedulingAdminResult, SchedulingAdminSettings, SchedulingAvailability, SchedulingOverride, Scholarship, ScholarshipStats, ScholarshipStatus, SetPhotoPayload, SheetsSyncResult, ShelterTypeDistribution, Shift, ShiftAdminOperation, ShiftAdminOperationResult, ShiftAdminWorkflow, ShiftAdminWorkflowResult, ShiftPlannerData, ShiftSignup, ShiftType, SummerCampAttendee, SummerCampEvent, SummerCampRsvp, SummerCampRsvpInput, Ticket, TicketStatus, TicketUpdateInput, TshirtSizeTotal, UnmatchedRefund, UnsureDateMember, UpdateSapAllocationInput, UpdateSapAssignmentInput, UpsertPackingCampItemInput, UpsertSapDayAllocationInput, VehiclePass, VehiclePassStatus, VehiclePassUpdateInput, Waiver, WaiverContent, WaiverSection, WaiverSignPayload, WaiverSignResponse, WaiverStatus, WebhookCandidate, WebhookLog, WebhookMatchSelection };
4890
+ export type { AccountReviewProfile, AdminAccountsOperation, AdminAccountsPage, AdminBikeInterestRow, AdminBikeInventory, AdminBikeOperation, AdminBikeOperationResult, AdminBikeRental, AdminBikeType, AdminCampDocument, AdminCampSettings, AdminDocumentSignature, AdminGivebutterCatalog, AdminGivebutterCatalogOperation, AdminGivebutterWidgetOperation, AdminGivebutterWidgets, AdminImportOperation, AdminImportResult, AdminImportRow, AdminImportantDate, AdminImportantDateInput, AdminImportantDateOperation, AdminInterviewBooking, AdminMemberExportRow, AdminMemberInvite, AdminMemberOperation, AdminMemberRole, AdminMemberStatus, AdminNotificationPrefs, AdminPaymentOperation, AdminPaymentOperationResult, AdminPaymentSummary, AdminPaymentsPage, AdminScholarshipsPage, AdminShelter, AdminShelterOperation, AdminShift, AdminShiftType, AdminTicketRow, AdminWebhooksPage, Application, ApplicationActivityItem, ApplicationAdmin, ApplicationAnnotations, ApplicationCapacity, ApplicationCreatePayload, ApplicationCreateResponse, ApplicationEvent, ApplicationNote, ApplicationScore, ApplicationStatus, ApplicationTransitionPayload, ApplicationTransitionResponse, ApplicationWorkflowCapabilities, ApplicationWorkflowInput, ApplicationWorkflowOptions, AvailabilityWindow, BikeRentalCatalogItem, BikeRentalCatalogResponse, BikeRentalDeliveryMode, BikeRentalFramePreference, BikeRentalInterestedMember, BikeRentalInterestedNotReservedResponse, BikeRentalRequestInput, BikeRentalRequestResult, BikeRentalReservation, BikeRentalReservationListResponse, BikeRentalWaiver, BookkeepingAdminOperation, BookkeepingExportPreview, BuildStrikeReportRow, CampDocumentDownloadUrl, CampDocumentSignature, CampDocumentSignaturesResponse, CampSettingsOperation, CampYearWithCounts, Commitment, CommitmentDataType, CommitmentValue, CommitmentsListResponse, ContactSyncResponse, ContractSection, CreateMeetingInput, CreateSapAssignmentInput, CreateScholarshipInput, DailyHeadcount, DashboardMetrics, DirectoryMember, DirectoryMembersListResponse, DocumentWriteInput, DuesStatus, DuesSummaryRow, DuesTypePayor, EmailCmsPreview, EmailComposerOptions, EmailDeliveryPage, EmailLog, EmailRecipient, EmailRecipientFilter, EmailRetry, EmailRetryCount, EmailRetryListResponse, EmailSegmentKey, EmailTemplate, EventScopeParams, EventStatus, EventSummary, ExchangeParams, ExchangeResult, ImageUploadTarget, ImportantDate, InterviewFeedBooking, ListingImage, LogisticsBreakdowns, LogisticsSummary, MarketplaceFlagReason, Meeting, MeetingDateOption, MeetingListResponse, MeetingRsvp, Member, MemberBikeStatus, MemberBootstrap, MemberCreatePayload, MemberCreateResponse, MemberCustomChecklistItem, MemberDashboard, MemberDeactivateResponse, MemberDevice, MemberDocumentPage, MemberDuesStatus, MemberGateId, MemberGatePlan, MemberGateStep, MemberInboxNotification, MemberInboxPage, MemberOnboardingUpdate, MemberPaymentsOverview, MemberPreferences, MemberProfileDetails, MemberPushPreferences, MemberRole, MemberSelfProfile, MemberSelfProfilePatch, MemberShelter, MemberShelterPage, MemberShiftView, MemberTag, MemberTagAssignment, MemberTagWithMemberCount, MemberUpdatePayload, MemberUpdateResponse, MobileShifts, NewListingInput, OnboardingChecklistCategory, OnboardingChecklistItem, OnboardingProgress, OrgConfig, OrgEvent, OwnerShelterCreate, OwnerShelterPatch, PackingCampAdminItem, PackingCampAdminList, PackingCampCategory, PackingCampCategoryInput, PackingCampItem, PackingContainer, PackingContainerInput, PackingContainerListResponse, PackingContainerType, PackingItem, PackingItemStatus, PackingLayer, PackingListResponse, PackingPersonalItem, PackingPlacementListResponse, PaymentPageResponse, PublicMarketplaceClient, PublicMarketplaceClientOptions, RvAmperageTotal, SapAllocation, SapAssignment, SapDayAllocation, SchedulingAdminOperation, SchedulingAdminResult, SchedulingAdminSettings, SchedulingAvailability, SchedulingOverride, Scholarship, ScholarshipStats, ScholarshipStatus, SetPhotoPayload, SheetsSyncResult, ShelterTypeDistribution, Shift, ShiftAdminOperation, ShiftAdminOperationResult, ShiftAdminWorkflow, ShiftAdminWorkflowResult, ShiftPlannerData, ShiftSignup, ShiftType, SummerCampAttendee, SummerCampEvent, SummerCampRsvp, SummerCampRsvpInput, Ticket, TicketStatus, TicketUpdateInput, TshirtSizeTotal, UnmatchedRefund, UnsureDateMember, UpdateSapAllocationInput, UpdateSapAssignmentInput, UpsertPackingCampItemInput, UpsertSapDayAllocationInput, VehiclePass, VehiclePassStatus, VehiclePassUpdateInput, Waiver, WaiverContent, WaiverSection, WaiverSignPayload, WaiverSignResponse, WaiverStatus, WebhookCandidate, WebhookLog, WebhookMatchSelection };
4763
4891
  //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -266,6 +266,10 @@ var PlayaOSClient = class PlayaOSClient {
266
266
  bootstrap: (opts) => request(buildUrl(this.baseUrl, "/members/me/bootstrap"), this.auth, opts?.signal, "no-store"),
267
267
  gates: (opts) => request(buildUrl(this.baseUrl, "/members/me/gates"), this.auth, opts?.signal, "no-store"),
268
268
  dashboard: (opts) => request(buildUrl(this.baseUrl, "/members/me/dashboard"), this.auth, opts?.signal),
269
+ /** Always the acting member, including admins; requires a member token and members:read scope. */
270
+ paymentOverview: (opts) => request(buildUrl(this.baseUrl, "/members/me/payment-overview"), this.auth, opts?.signal, "no-store"),
271
+ /** Acting member's original photo only; missing originals return 404, never an avatar fallback. */
272
+ selfPhotoDownloadUrl: (opts) => request(buildUrl(this.baseUrl, "/members/me/photo/download-url"), this.auth, opts?.signal, "no-store"),
269
273
  /** Presigned profile-photo upload (PLA-1263). PUT the bytes, then setPhoto. */
270
274
  createPhotoUploadUrl: (payload, opts) => post(buildUrl(this.baseUrl, "/members/me/photo/upload-url"), this.auth, payload, opts?.signal),
271
275
  setPhoto: (payload, opts) => post(buildUrl(this.baseUrl, "/members/me/photo"), this.auth, payload, opts?.signal),
@@ -528,8 +532,11 @@ var PlayaOSClient = class PlayaOSClient {
528
532
  * the model is sold out, 400 when it is unknown or no longer bookable.
529
533
  */
530
534
  requestReservation: (payload, opts) => post(buildUrl(this.baseUrl, "/bike-rentals/requests"), this.auth, payload, opts?.signal),
531
- /** Members who said they want a bike but have no reservation, for the active camp year. Org key only. */
532
- interestedNotReserved: (opts) => request(buildUrl(this.baseUrl, "/bike-rentals/interested-not-reserved"), this.auth, opts?.signal)
535
+ /**
536
+ * Members who said they want a bike but have no reservation, for one event or camp year. With
537
+ * no params, the camp's configured active camp year. Org key only.
538
+ */
539
+ interestedNotReserved: (params, opts) => request(buildUrl(this.baseUrl, "/bike-rentals/interested-not-reserved", params), this.auth, opts?.signal)
533
540
  };
534
541
  tags = {
535
542
  create: (payload, opts) => post(buildUrl(this.baseUrl, "/tags"), this.auth, payload, opts?.signal),
@@ -629,6 +636,9 @@ var PlayaOSClient = class PlayaOSClient {
629
636
  /** Visible camp dates (PLA-1268), optionally pinned to a year. */
630
637
  list: (params, opts) => request(buildUrl(this.baseUrl, "/important-dates", params), this.auth, opts?.signal)
631
638
  };
639
+ events = {
640
+ /** The camp's events with the given status (default `published`), earliest first. */
641
+ list: (params, opts) => request(buildUrl(this.baseUrl, "/events", params), this.auth, opts?.signal) };
632
642
  emails = {
633
643
  recipients: (payload, opts) => post(buildUrl(this.baseUrl, "/email/recipients"), this.auth, payload, opts?.signal),
634
644
  composerOptions: (params, opts) => request(buildUrl(this.baseUrl, "/email/composer-options", params), this.auth, opts?.signal),
@@ -786,17 +796,20 @@ send: (payload, opts) => (({ accessToken, signal }) => this.adminV1OrEmbed("POST
786
796
  create: (payload, opts) => (({ accessToken, signal }) => this.adminV1OrEmbed("POST", "/dues", "/admin/dues", accessToken, payload, signal))(this.adminAccess(opts)),
787
797
  /** Update a dues/payment record (PLA-708). Requires admin Bearer token. */
788
798
  update: (id, payload, opts) => (({ accessToken, signal }) => this.adminV1OrEmbed("PATCH", `/dues/${encodeURIComponent(id)}`, `/admin/dues/${encodeURIComponent(id)}`, accessToken, payload, signal))(this.adminAccess(opts)),
789
- /** Per-member dues state from `member_dues_status` (PLA-1336). V1-only — requires a member token. */
799
+ /**
800
+ * Per-member dues state for one event or camp year (PLA-1336, ADR-132). With no params, the
801
+ * configured active camp year. V1-only — requires a member token.
802
+ */
790
803
  status: (params, opts) => {
791
804
  if (!this.memberToken) throw new Error("dues.status requires withMember(token)");
792
805
  return request(buildUrl(this.baseUrl, "/admin/dues/status", params), this.auth, opts?.signal).then((r) => r.data);
793
806
  },
794
- /** Per-tier dues totals from `dues_summary` (PLA-1336). V1-only — requires a member token. */
807
+ /** Per-tier dues totals for one event or camp year (PLA-1336, ADR-132). V1-only — requires a member token. */
795
808
  summary: (params, opts) => {
796
809
  if (!this.memberToken) throw new Error("dues.summary requires withMember(token)");
797
810
  return request(buildUrl(this.baseUrl, "/admin/dues/summary", params), this.auth, opts?.signal).then((r) => r.data);
798
811
  },
799
- /** Members who paid a given dues type (PLA-1336). V1-only — requires a member token. */
812
+ /** Members who paid a given dues type, for one event or camp year (PLA-1336, ADR-132). V1-only — requires a member token. */
800
813
  payors: (params, opts) => {
801
814
  if (!this.memberToken) throw new Error("dues.payors requires withMember(token)");
802
815
  return request(buildUrl(this.baseUrl, "/admin/dues/payors", params), this.auth, opts?.signal).then((r) => r.data);