@playaos/api-client 0.54.0 → 0.56.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +2240 -91
- package/dist/index.js +179 -13
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -57,6 +57,7 @@ interface Member {
|
|
|
57
57
|
yearJoined?: number | null;
|
|
58
58
|
adminRoles?: string[] | null;
|
|
59
59
|
isDeveloper?: boolean | null;
|
|
60
|
+
burningManBefore?: boolean | null;
|
|
60
61
|
referredByUserId?: string | null;
|
|
61
62
|
birthday?: string | null;
|
|
62
63
|
dietaryRestrictions?: string[] | null;
|
|
@@ -144,6 +145,7 @@ interface ApplicationAdmin extends Application {
|
|
|
144
145
|
reviewedAt: string | null;
|
|
145
146
|
}
|
|
146
147
|
interface AdminNotificationPrefs {
|
|
148
|
+
shiftCoverageAlerts: boolean;
|
|
147
149
|
applications: boolean;
|
|
148
150
|
payments: boolean;
|
|
149
151
|
shifts: boolean;
|
|
@@ -163,6 +165,7 @@ interface MemberDevice {
|
|
|
163
165
|
updatedAt: string | null;
|
|
164
166
|
}
|
|
165
167
|
interface ImportantDate {
|
|
168
|
+
slug?: string | null;
|
|
166
169
|
id: string;
|
|
167
170
|
title: string;
|
|
168
171
|
description: string | null;
|
|
@@ -171,6 +174,62 @@ interface ImportantDate {
|
|
|
171
174
|
category: string | null;
|
|
172
175
|
year: number;
|
|
173
176
|
}
|
|
177
|
+
interface SummerCampAttendee {
|
|
178
|
+
profileId: string;
|
|
179
|
+
nightsAttending: string[];
|
|
180
|
+
isDayTripOnly: boolean;
|
|
181
|
+
profile: {
|
|
182
|
+
name: string | null;
|
|
183
|
+
playaName: string | null;
|
|
184
|
+
profilePhotoPath: string | null;
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
interface SheetsSyncResult {
|
|
188
|
+
year: number;
|
|
189
|
+
tabs: {
|
|
190
|
+
name: string;
|
|
191
|
+
rows: number;
|
|
192
|
+
}[];
|
|
193
|
+
}
|
|
194
|
+
interface AdminWebhooksPage {
|
|
195
|
+
logs: {
|
|
196
|
+
id: string;
|
|
197
|
+
provider: string;
|
|
198
|
+
eventType: string;
|
|
199
|
+
processingStatus: string | null;
|
|
200
|
+
errorMessage: string | null;
|
|
201
|
+
createdAt: string | null;
|
|
202
|
+
processedAt: string | null;
|
|
203
|
+
payload: unknown;
|
|
204
|
+
}[];
|
|
205
|
+
queueStatus: {
|
|
206
|
+
queueName: string;
|
|
207
|
+
queueDepth: number;
|
|
208
|
+
maxReadCount: number;
|
|
209
|
+
oldestEnqueuedAt: string | null;
|
|
210
|
+
archivedCount: number;
|
|
211
|
+
latestArchivedAt: string | null;
|
|
212
|
+
}[];
|
|
213
|
+
}
|
|
214
|
+
interface WebhookCandidate {
|
|
215
|
+
id: string;
|
|
216
|
+
name: string;
|
|
217
|
+
email: string;
|
|
218
|
+
phone: string | null;
|
|
219
|
+
status: string;
|
|
220
|
+
signals: {
|
|
221
|
+
name: "exact" | "partial" | "none";
|
|
222
|
+
phone: "exact" | "none";
|
|
223
|
+
};
|
|
224
|
+
score: number;
|
|
225
|
+
}
|
|
226
|
+
type WebhookMatchSelection = {
|
|
227
|
+
kind: "candidate";
|
|
228
|
+
profileId: string;
|
|
229
|
+
} | {
|
|
230
|
+
kind: "email";
|
|
231
|
+
email: string;
|
|
232
|
+
};
|
|
174
233
|
interface SummerCampEvent {
|
|
175
234
|
id: string;
|
|
176
235
|
name: string;
|
|
@@ -184,9 +243,20 @@ interface SummerCampEvent {
|
|
|
184
243
|
registrationDeadline: string | null;
|
|
185
244
|
availableNights: string[];
|
|
186
245
|
costPerNight: string | null;
|
|
246
|
+
heroImageUrl: string | null;
|
|
247
|
+
detailsMarkdown: string | null;
|
|
248
|
+
itinerary: unknown;
|
|
249
|
+
packingList: unknown;
|
|
250
|
+
directionsUrl: string | null;
|
|
251
|
+
directionsNotes: string | null;
|
|
252
|
+
groupChatUrl: string | null;
|
|
253
|
+
airbnbCostPerPerson: string | null;
|
|
254
|
+
foodCostPerPerson: string | null;
|
|
187
255
|
}
|
|
188
256
|
type SummerCampRsvpStatus = "pending" | "confirmed" | "cancelled";
|
|
189
257
|
interface SummerCampRsvp {
|
|
258
|
+
owesFood: boolean;
|
|
259
|
+
amountPaid: string;
|
|
190
260
|
id: string;
|
|
191
261
|
eventId: string;
|
|
192
262
|
status: SummerCampRsvpStatus;
|
|
@@ -204,6 +274,7 @@ interface SummerCampRsvpInput {
|
|
|
204
274
|
type PhotoExportJobStatus = "queued" | "processing" | "completed" | "failed";
|
|
205
275
|
/** Admin member-photo ZIP export job (PLA-1217). */
|
|
206
276
|
interface PhotoExportJob {
|
|
277
|
+
startedAt?: string | null;
|
|
207
278
|
id: string;
|
|
208
279
|
status: PhotoExportJobStatus;
|
|
209
280
|
fileName: string;
|
|
@@ -217,6 +288,8 @@ interface PhotoExportJob {
|
|
|
217
288
|
completedAt: string | null;
|
|
218
289
|
}
|
|
219
290
|
interface CreatePhotoExportInput {
|
|
291
|
+
attending?: "true" | "all";
|
|
292
|
+
year?: number;
|
|
220
293
|
role?: string;
|
|
221
294
|
status?: string;
|
|
222
295
|
search?: string;
|
|
@@ -516,6 +589,7 @@ interface AdminShelter {
|
|
|
516
589
|
}>;
|
|
517
590
|
}
|
|
518
591
|
interface OrgConfig {
|
|
592
|
+
activeCampYear: number;
|
|
519
593
|
id: string;
|
|
520
594
|
name: string;
|
|
521
595
|
slug: string;
|
|
@@ -583,6 +657,7 @@ interface Account {
|
|
|
583
657
|
[key: string]: unknown;
|
|
584
658
|
}
|
|
585
659
|
interface CampDocument {
|
|
660
|
+
externalUrl?: string | null;
|
|
586
661
|
id: string;
|
|
587
662
|
orgId: string;
|
|
588
663
|
name: string;
|
|
@@ -809,6 +884,7 @@ interface MemberDeactivateResponse {
|
|
|
809
884
|
status: "inactive";
|
|
810
885
|
}
|
|
811
886
|
interface WaiverSection {
|
|
887
|
+
format?: "html" | "text";
|
|
812
888
|
id: string;
|
|
813
889
|
heading: string;
|
|
814
890
|
body: string;
|
|
@@ -924,7 +1000,7 @@ interface ApplicationEvent {
|
|
|
924
1000
|
* Widening the server list without widening this union lets a value escape
|
|
925
1001
|
* the declared type through the cast in `client.ts` — see PLA-1199.
|
|
926
1002
|
*/
|
|
927
|
-
type: "status_change" | "note_added" | "tags_updated" | "score_set" | "message_sent" | "message_received" | "approved" | "rejected" | "waitlisted" | "interview_invite_sent" | "interview_scheduled_manually" | "interview_completed" | "interviewer_assigned" | "red_flag_added";
|
|
1003
|
+
type: "status_change" | "note_added" | "tags_updated" | "score_set" | "message_sent" | "message_received" | "approved" | "rejected" | "waitlisted" | "interview_invite_sent" | "interview_scheduled_manually" | "interview_completed" | "interviewer_assigned" | "red_flag_added" | "referrer_updated";
|
|
928
1004
|
timestamp: string;
|
|
929
1005
|
fromStatus?: string | null;
|
|
930
1006
|
toStatus?: string;
|
|
@@ -1087,6 +1163,7 @@ interface SapAllocation {
|
|
|
1087
1163
|
totalAssigned: number;
|
|
1088
1164
|
}
|
|
1089
1165
|
interface UpdateSapAllocationInput {
|
|
1166
|
+
year?: number;
|
|
1090
1167
|
totalAllocated: number;
|
|
1091
1168
|
notes?: string | null;
|
|
1092
1169
|
}
|
|
@@ -1098,6 +1175,7 @@ interface SapDayAllocation {
|
|
|
1098
1175
|
notes: string | null;
|
|
1099
1176
|
}
|
|
1100
1177
|
interface UpsertSapDayAllocationInput {
|
|
1178
|
+
year?: number;
|
|
1101
1179
|
accessDate: string;
|
|
1102
1180
|
slotsAvailable: number;
|
|
1103
1181
|
notes?: string | null;
|
|
@@ -1113,6 +1191,7 @@ interface SapAssignment {
|
|
|
1113
1191
|
notes: string | null;
|
|
1114
1192
|
}
|
|
1115
1193
|
interface CreateSapAssignmentInput {
|
|
1194
|
+
year?: number;
|
|
1116
1195
|
userId: string;
|
|
1117
1196
|
sapNumber?: string | null;
|
|
1118
1197
|
vehicleDescription?: string | null;
|
|
@@ -1282,6 +1361,7 @@ interface Meeting {
|
|
|
1282
1361
|
dateOptions: MeetingDateOption[];
|
|
1283
1362
|
}
|
|
1284
1363
|
interface CreateMeetingInput {
|
|
1364
|
+
notifyMembers?: boolean;
|
|
1285
1365
|
title: string;
|
|
1286
1366
|
description?: string | null;
|
|
1287
1367
|
isMandatory: boolean;
|
|
@@ -1310,6 +1390,7 @@ interface Scholarship {
|
|
|
1310
1390
|
discountCodeId: string | null;
|
|
1311
1391
|
}
|
|
1312
1392
|
interface CreateScholarshipInput {
|
|
1393
|
+
providerManaged?: boolean;
|
|
1313
1394
|
userId: string;
|
|
1314
1395
|
promoCode: string;
|
|
1315
1396
|
discountAmount: number;
|
|
@@ -1353,101 +1434,1553 @@ interface VehiclePassUpdateInput {
|
|
|
1353
1434
|
vehiclePassStatus?: VehiclePassStatus | null;
|
|
1354
1435
|
vehiclePassConfirmation?: string | null;
|
|
1355
1436
|
}
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1437
|
+
/** Self-only fields needed to enter the member portal; never includes auth/provider tokens. */
|
|
1438
|
+
interface MemberSelfProfile {
|
|
1439
|
+
id: string;
|
|
1440
|
+
name: string | null;
|
|
1441
|
+
email: string | null;
|
|
1442
|
+
role: string | null;
|
|
1443
|
+
isDeveloper: boolean | null;
|
|
1444
|
+
firstName: string;
|
|
1445
|
+
lastName: string;
|
|
1446
|
+
phone: string | null;
|
|
1447
|
+
emergencyContactName: string | null;
|
|
1448
|
+
emergencyContactPhone: string | null;
|
|
1449
|
+
dietaryRestrictions: string[] | null;
|
|
1450
|
+
tshirtSize: string | null;
|
|
1451
|
+
profilePhotoPath: string | null;
|
|
1452
|
+
onboardingPasswordDone: boolean | null;
|
|
1453
|
+
playaName: string | null;
|
|
1454
|
+
homeCity: string | null;
|
|
1455
|
+
bio: string | null;
|
|
1456
|
+
referralCode: string | null;
|
|
1457
|
+
otherAllergies: string | null;
|
|
1458
|
+
hasEpipen: boolean | null;
|
|
1459
|
+
}
|
|
1460
|
+
interface MemberBootstrap {
|
|
1461
|
+
year: number;
|
|
1462
|
+
profile: MemberSelfProfile;
|
|
1463
|
+
campYear: {
|
|
1464
|
+
transportMode: string | null;
|
|
1465
|
+
attendanceResponse: string | null;
|
|
1466
|
+
shelterWizardDone: boolean | null;
|
|
1467
|
+
} | null;
|
|
1468
|
+
confirmedShelterAssignment: {
|
|
1469
|
+
id: string;
|
|
1470
|
+
} | null;
|
|
1471
|
+
unsignedDocuments: Array<{
|
|
1472
|
+
id: string;
|
|
1473
|
+
name: string;
|
|
1474
|
+
description: string | null;
|
|
1475
|
+
content: string | WaiverContent | null;
|
|
1476
|
+
filePath: string | null;
|
|
1477
|
+
}>;
|
|
1376
1478
|
}
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1479
|
+
interface MemberDashboard {
|
|
1480
|
+
year: number;
|
|
1481
|
+
profile: MemberSelfProfile;
|
|
1482
|
+
gateInput: {
|
|
1483
|
+
hasPaidBaseDues: boolean;
|
|
1484
|
+
hasPaidRvDues: boolean;
|
|
1485
|
+
ownsRvShelter: boolean;
|
|
1486
|
+
hasSignedWaiver: boolean;
|
|
1487
|
+
arrivalDate: string | null;
|
|
1488
|
+
departureDate: string | null;
|
|
1489
|
+
rvLengthFt: number | null;
|
|
1490
|
+
rvAmperage: number | null;
|
|
1491
|
+
name: string | null;
|
|
1492
|
+
phone: string | null;
|
|
1493
|
+
emergencyContactName: string | null;
|
|
1494
|
+
emergencyContactPhone: string | null;
|
|
1495
|
+
dietaryRestrictions: string[] | null;
|
|
1496
|
+
tshirtSize: string | null;
|
|
1497
|
+
transportMode: string | null;
|
|
1498
|
+
isAdmin: boolean;
|
|
1499
|
+
hasInterviewerSetup: boolean;
|
|
1500
|
+
hasProfilePhoto: boolean;
|
|
1501
|
+
};
|
|
1502
|
+
pendingDocuments: Array<{
|
|
1503
|
+
id: string;
|
|
1504
|
+
name: string;
|
|
1505
|
+
}>;
|
|
1506
|
+
hasShelterAssignment: boolean;
|
|
1507
|
+
upcomingShiftCount: number;
|
|
1508
|
+
importantDates: Array<{
|
|
1509
|
+
id: string;
|
|
1510
|
+
title: string;
|
|
1511
|
+
date: string;
|
|
1512
|
+
}>;
|
|
1513
|
+
upcomingMeetings: Array<{
|
|
1514
|
+
id: string;
|
|
1515
|
+
title: string;
|
|
1516
|
+
isMandatory: boolean;
|
|
1517
|
+
earliestDate: string;
|
|
1518
|
+
hasRsvped: boolean;
|
|
1519
|
+
}>;
|
|
1520
|
+
campSettings: Record<string, string>;
|
|
1521
|
+
yearsAttended: number[];
|
|
1522
|
+
}
|
|
1523
|
+
interface MemberOnboardingUpdate {
|
|
1524
|
+
firstName?: string;
|
|
1525
|
+
lastName?: string;
|
|
1526
|
+
phone?: string | null;
|
|
1527
|
+
emergencyContactName?: string | null;
|
|
1528
|
+
emergencyContactPhone?: string | null;
|
|
1529
|
+
dietaryRestrictions?: string[];
|
|
1530
|
+
tshirtSize?: string | null;
|
|
1531
|
+
bikeRentalInterest?: boolean | null;
|
|
1532
|
+
onboardingPasswordDone?: true;
|
|
1533
|
+
transportMode?: "personal_vehicle" | "rv" | "burner_bus" | "rideshare" | "other" | "burner_air" | "private_plane" | null;
|
|
1534
|
+
attendanceResponse?: "attending" | "not_attending" | "undecided";
|
|
1535
|
+
shelterWizardDone?: true;
|
|
1536
|
+
year?: number;
|
|
1537
|
+
}
|
|
1538
|
+
type ApplicationWorkflowInput = {
|
|
1539
|
+
action: "invite";
|
|
1540
|
+
} | {
|
|
1541
|
+
action: "assign_interviewer";
|
|
1542
|
+
interviewerId: string | null;
|
|
1543
|
+
} | {
|
|
1544
|
+
action: "schedule_manual";
|
|
1545
|
+
scheduledAt: string;
|
|
1546
|
+
} | {
|
|
1547
|
+
action: "red_flag";
|
|
1548
|
+
flag: string;
|
|
1549
|
+
} | {
|
|
1550
|
+
action: "interview_note";
|
|
1551
|
+
note: string;
|
|
1552
|
+
} | {
|
|
1553
|
+
action: "referrer";
|
|
1554
|
+
referrerUserId: string | null;
|
|
1555
|
+
} | {
|
|
1556
|
+
action: "transition";
|
|
1557
|
+
to: "approved" | "rejected" | "waitlisted" | "interviewed";
|
|
1558
|
+
reason?: string;
|
|
1559
|
+
activateMemberOnApproval?: boolean;
|
|
1560
|
+
};
|
|
1561
|
+
interface ApplicationWorkflowOptions {
|
|
1562
|
+
admins: {
|
|
1563
|
+
id: string;
|
|
1564
|
+
name: string | null;
|
|
1565
|
+
}[];
|
|
1566
|
+
workload: {
|
|
1567
|
+
interviewerId: string;
|
|
1568
|
+
interviewerName: string | null;
|
|
1569
|
+
pendingInterviews: number;
|
|
1570
|
+
completedInterviews: number;
|
|
1571
|
+
totalAssigned: number;
|
|
1572
|
+
lastAssignedAt: string | null;
|
|
1573
|
+
}[];
|
|
1574
|
+
referrers: {
|
|
1575
|
+
id: string;
|
|
1576
|
+
displayName: string;
|
|
1577
|
+
}[];
|
|
1578
|
+
}
|
|
1579
|
+
interface ApplicationActivityItem {
|
|
1580
|
+
id: string;
|
|
1581
|
+
type: "audit" | "message";
|
|
1582
|
+
timestamp: string;
|
|
1583
|
+
action?: string;
|
|
1584
|
+
details?: Record<string, unknown>;
|
|
1585
|
+
direction?: "inbound" | "outbound";
|
|
1586
|
+
subject?: string;
|
|
1587
|
+
body?: string;
|
|
1588
|
+
fromEmail?: string;
|
|
1589
|
+
actorName?: string;
|
|
1590
|
+
}
|
|
1591
|
+
type ShiftAdminOperation = {
|
|
1592
|
+
action: "create_type";
|
|
1593
|
+
name: string;
|
|
1594
|
+
description?: string;
|
|
1595
|
+
durationHours: number;
|
|
1596
|
+
} | {
|
|
1597
|
+
action: "update_type";
|
|
1598
|
+
id: string;
|
|
1599
|
+
name?: string;
|
|
1600
|
+
description?: string;
|
|
1601
|
+
durationHours?: number;
|
|
1602
|
+
} | {
|
|
1603
|
+
action: "delete_type";
|
|
1604
|
+
id: string;
|
|
1605
|
+
} | {
|
|
1606
|
+
action: "create_shift";
|
|
1607
|
+
shiftTypeId: string;
|
|
1608
|
+
shiftDate: string;
|
|
1609
|
+
startTime: string;
|
|
1610
|
+
endTime: string;
|
|
1611
|
+
maxSlots: number;
|
|
1612
|
+
notes?: string;
|
|
1613
|
+
} | {
|
|
1614
|
+
action: "update_shift";
|
|
1615
|
+
id: string;
|
|
1616
|
+
maxSlots?: number;
|
|
1617
|
+
notes?: string;
|
|
1618
|
+
startTime?: string;
|
|
1619
|
+
endTime?: string;
|
|
1620
|
+
} | {
|
|
1621
|
+
action: "delete_shift";
|
|
1622
|
+
id: string;
|
|
1623
|
+
} | {
|
|
1624
|
+
action: "bulk_create";
|
|
1625
|
+
shiftTypeId: string;
|
|
1626
|
+
dates: string[];
|
|
1627
|
+
startTime: string;
|
|
1628
|
+
endTime: string;
|
|
1629
|
+
maxSlots: number;
|
|
1630
|
+
} | {
|
|
1631
|
+
action: "clear_day";
|
|
1632
|
+
date: string;
|
|
1633
|
+
} | {
|
|
1634
|
+
action: "copy_day";
|
|
1635
|
+
sourceDate: string;
|
|
1636
|
+
targetDate: string;
|
|
1637
|
+
} | {
|
|
1638
|
+
action: "remove_signup";
|
|
1639
|
+
id: string;
|
|
1640
|
+
} | {
|
|
1641
|
+
action: "signup_role";
|
|
1642
|
+
id: string;
|
|
1643
|
+
role: string;
|
|
1644
|
+
};
|
|
1645
|
+
interface ShiftAdminOperationResult {
|
|
1646
|
+
id?: string;
|
|
1647
|
+
createdCount?: number;
|
|
1648
|
+
deletedCount?: number;
|
|
1649
|
+
copiedCount?: number;
|
|
1650
|
+
skippedCount?: number;
|
|
1651
|
+
}
|
|
1652
|
+
interface OwnerShelterPatch {
|
|
1653
|
+
name?: string | null;
|
|
1654
|
+
maxOccupants?: number;
|
|
1655
|
+
rvLengthFt?: number | null;
|
|
1656
|
+
rvAmperage?: 30 | 50 | null;
|
|
1657
|
+
shelterLengthFt?: number | null;
|
|
1658
|
+
shelterWidthFt?: number | null;
|
|
1659
|
+
shelterHeightFt?: number | null;
|
|
1660
|
+
needsPower?: boolean;
|
|
1661
|
+
needsPumping?: boolean;
|
|
1662
|
+
shelterDescription?: string | null;
|
|
1663
|
+
}
|
|
1664
|
+
interface OwnerShelterCreate extends OwnerShelterPatch {
|
|
1665
|
+
year?: number;
|
|
1666
|
+
shelterType: "rv" | "shiftpod" | "tent" | "hexayurt" | "other" | "car" | "truck" | "van" | "trailer";
|
|
1667
|
+
maxOccupants: number;
|
|
1668
|
+
payerUserId?: string | null;
|
|
1669
|
+
mateUserIds?: string[];
|
|
1670
|
+
completeWizard?: boolean;
|
|
1671
|
+
hasSpaceForOthers?: boolean;
|
|
1672
|
+
askingPrice?: number | null;
|
|
1673
|
+
}
|
|
1674
|
+
interface MemberShelter {
|
|
1675
|
+
id: string;
|
|
1676
|
+
name: string | null;
|
|
1677
|
+
shelterType: string;
|
|
1678
|
+
maxOccupants: number;
|
|
1679
|
+
rvLengthFt: number | null;
|
|
1680
|
+
rvAmperage: number | null;
|
|
1681
|
+
shelterLengthFt: number | null;
|
|
1682
|
+
shelterWidthFt: number | null;
|
|
1683
|
+
shelterHeightFt: number | null;
|
|
1684
|
+
needsPower: boolean | null;
|
|
1685
|
+
needsPumping: boolean | null;
|
|
1686
|
+
shelterDescription: string | null;
|
|
1687
|
+
members: Array<{
|
|
1688
|
+
id: string;
|
|
1689
|
+
name: string | null;
|
|
1690
|
+
isOwner: boolean;
|
|
1691
|
+
assignmentId: string;
|
|
1692
|
+
status: string;
|
|
1693
|
+
}>;
|
|
1694
|
+
}
|
|
1695
|
+
interface MemberShelterPage {
|
|
1696
|
+
currentAssignment: {
|
|
1697
|
+
id: string;
|
|
1698
|
+
isOwner: boolean;
|
|
1699
|
+
shelter: MemberShelter;
|
|
1700
|
+
} | null;
|
|
1701
|
+
availableShelters: MemberShelter[];
|
|
1702
|
+
pendingInvites: Array<{
|
|
1703
|
+
id: string;
|
|
1704
|
+
shelter: {
|
|
1434
1705
|
id: string;
|
|
1435
|
-
|
|
1706
|
+
name: string | null;
|
|
1707
|
+
shelterType: string;
|
|
1708
|
+
ownerName: string | null;
|
|
1709
|
+
};
|
|
1710
|
+
}>;
|
|
1711
|
+
}
|
|
1712
|
+
interface DocumentWriteInput {
|
|
1713
|
+
title: string;
|
|
1714
|
+
type: string;
|
|
1715
|
+
body?: unknown;
|
|
1716
|
+
description?: string | null;
|
|
1717
|
+
requiresSignature?: boolean;
|
|
1718
|
+
year?: number;
|
|
1719
|
+
deadline?: string | null;
|
|
1720
|
+
filePath?: string | null;
|
|
1721
|
+
externalUrl?: string | null;
|
|
1722
|
+
isActive?: boolean;
|
|
1723
|
+
}
|
|
1724
|
+
interface ContractSection {
|
|
1725
|
+
id: string;
|
|
1726
|
+
title: string;
|
|
1727
|
+
bodyHtml: string;
|
|
1728
|
+
sortOrder: number;
|
|
1729
|
+
}
|
|
1730
|
+
type ShiftAdminWorkflow = {
|
|
1731
|
+
action: "assign_member";
|
|
1732
|
+
shiftId: string;
|
|
1733
|
+
memberId: string;
|
|
1734
|
+
forceAssign?: boolean;
|
|
1735
|
+
} | {
|
|
1736
|
+
action: "assign_shelter";
|
|
1737
|
+
shiftId: string;
|
|
1738
|
+
shelterId: string;
|
|
1739
|
+
forceAssign?: boolean;
|
|
1740
|
+
} | {
|
|
1741
|
+
action: "publish";
|
|
1742
|
+
};
|
|
1743
|
+
interface ShiftAdminWorkflowResult {
|
|
1744
|
+
assignedCount?: number;
|
|
1745
|
+
skippedCount?: number;
|
|
1746
|
+
notificationsSent?: number;
|
|
1747
|
+
notificationsFailed?: number;
|
|
1748
|
+
totalMembers?: number;
|
|
1749
|
+
}
|
|
1750
|
+
interface ShiftPlannerData {
|
|
1751
|
+
year: number;
|
|
1752
|
+
members: Array<{
|
|
1753
|
+
id: string;
|
|
1754
|
+
name: string;
|
|
1755
|
+
email: string | null;
|
|
1756
|
+
dietaryRestrictions: string[] | null;
|
|
1757
|
+
shiftCapabilities: string[] | null;
|
|
1758
|
+
arrivalDate: string | null;
|
|
1759
|
+
departureDate: string | null;
|
|
1760
|
+
shelters: Array<{
|
|
1761
|
+
id: string;
|
|
1762
|
+
name: string;
|
|
1763
|
+
shelterType: string;
|
|
1436
1764
|
}>;
|
|
1437
|
-
|
|
1438
|
-
|
|
1439
|
-
|
|
1440
|
-
|
|
1441
|
-
|
|
1442
|
-
|
|
1765
|
+
}>;
|
|
1766
|
+
shelters: Array<{
|
|
1767
|
+
id: string;
|
|
1768
|
+
name: string;
|
|
1769
|
+
shelterType: string;
|
|
1770
|
+
}>;
|
|
1771
|
+
}
|
|
1772
|
+
interface MemberBikeStatus {
|
|
1773
|
+
bikeTypes: Array<{
|
|
1774
|
+
id: string;
|
|
1775
|
+
name: string;
|
|
1776
|
+
description: string | null;
|
|
1777
|
+
available: number;
|
|
1778
|
+
}>;
|
|
1779
|
+
rental: {
|
|
1780
|
+
id: string;
|
|
1781
|
+
status: string;
|
|
1782
|
+
bikeType: string;
|
|
1783
|
+
bikeNumber: string | null;
|
|
1784
|
+
} | null;
|
|
1785
|
+
hasSignedWaiver: boolean;
|
|
1786
|
+
year: number;
|
|
1787
|
+
}
|
|
1788
|
+
interface MemberProfileUpdate {
|
|
1789
|
+
firstName?: string;
|
|
1790
|
+
lastName?: string;
|
|
1791
|
+
phone?: string | null;
|
|
1792
|
+
emergencyContact?: string | null;
|
|
1793
|
+
emergencyContactName?: string | null;
|
|
1794
|
+
emergencyContactRelationship?: string | null;
|
|
1795
|
+
emergencyContactPhone?: string | null;
|
|
1796
|
+
birthday?: string | null;
|
|
1797
|
+
playaName?: string | null;
|
|
1798
|
+
bio?: string | null;
|
|
1799
|
+
homeCity?: string | null;
|
|
1800
|
+
otherAllergies?: string | null;
|
|
1801
|
+
dietaryRestrictions?: string[];
|
|
1802
|
+
teamInterests?: string[];
|
|
1803
|
+
hasEpipen?: boolean;
|
|
1804
|
+
tshirtSize?: string | null;
|
|
1805
|
+
referredByUserId?: string | null;
|
|
1806
|
+
socialMedia?: {
|
|
1807
|
+
instagram?: string | null;
|
|
1808
|
+
twitter?: string | null;
|
|
1809
|
+
tiktok?: string | null;
|
|
1810
|
+
facebook?: string | null;
|
|
1811
|
+
} | null;
|
|
1812
|
+
showSocialsInDirectory?: boolean;
|
|
1813
|
+
directoryNameDisplay?: "name" | "playa_name" | "both";
|
|
1814
|
+
}
|
|
1815
|
+
interface MemberTravelUpdate {
|
|
1816
|
+
arrivalDate?: string | null;
|
|
1817
|
+
departureDate?: string | null;
|
|
1818
|
+
buildArrivalDate?: string | null;
|
|
1819
|
+
burnerBusArrivalDate?: string | null;
|
|
1820
|
+
burnerBusDepartureDate?: string | null;
|
|
1821
|
+
burnerAirArrivalDate?: string | null;
|
|
1822
|
+
burnerAirDepartureDate?: string | null;
|
|
1823
|
+
privatePlaneArrivalDate?: string | null;
|
|
1824
|
+
privatePlaneDepartureDate?: string | null;
|
|
1825
|
+
burnerBusArrivalTime?: string | null;
|
|
1826
|
+
burnerBusDepartureTime?: string | null;
|
|
1827
|
+
burnerAirArrivalTime?: string | null;
|
|
1828
|
+
burnerAirDepartureTime?: string | null;
|
|
1829
|
+
privatePlaneArrivalTime?: string | null;
|
|
1830
|
+
privatePlaneDepartureTime?: string | null;
|
|
1831
|
+
arrivalTime?: "morning" | "afternoon" | "evening" | null;
|
|
1832
|
+
departureTime?: "morning" | "afternoon" | "evening" | null;
|
|
1833
|
+
transportMode?: MemberOnboardingUpdate["transportMode"];
|
|
1834
|
+
departureTransportMode?: MemberOnboardingUpdate["transportMode"];
|
|
1835
|
+
isBuildWeek?: boolean;
|
|
1836
|
+
isStrike?: boolean;
|
|
1837
|
+
wantsBikeRental?: boolean;
|
|
1838
|
+
attendanceResponse?: "attending" | "not_attending" | "undecided";
|
|
1839
|
+
containerService?: string | null;
|
|
1840
|
+
containerItemCount?: number | null;
|
|
1841
|
+
containerShippingNotes?: string | null;
|
|
1842
|
+
bikeTypePreference?: "ebike" | "pedal" | null;
|
|
1843
|
+
cookOrCleanPreference?: "cook" | "clean" | "no_preference" | null;
|
|
1844
|
+
}
|
|
1845
|
+
interface MemberSelfProfilePatch {
|
|
1846
|
+
profile?: MemberProfileUpdate;
|
|
1847
|
+
campYear?: MemberTravelUpdate;
|
|
1848
|
+
year?: number;
|
|
1849
|
+
}
|
|
1850
|
+
interface MemberProfileDetails {
|
|
1851
|
+
profile: { [K in keyof MemberProfileUpdate]-?: Exclude<MemberProfileUpdate[K], undefined> | null; } & {
|
|
1852
|
+
id: string;
|
|
1853
|
+
email: string | null;
|
|
1854
|
+
name: string | null;
|
|
1855
|
+
role: string | null;
|
|
1856
|
+
status: string | null;
|
|
1857
|
+
profilePhotoPath: string | null;
|
|
1858
|
+
referralCode: string;
|
|
1859
|
+
invitedAt: string | null;
|
|
1860
|
+
yearJoined: number | null;
|
|
1861
|
+
is747Alumni: boolean | null;
|
|
1862
|
+
createdAt: string | null;
|
|
1863
|
+
adminRoles: string[] | null;
|
|
1864
|
+
shiftCapabilities: string[] | null;
|
|
1865
|
+
};
|
|
1866
|
+
campYear: ({ [K in keyof MemberTravelUpdate]-?: Exclude<MemberTravelUpdate[K], undefined> | null; } & {
|
|
1867
|
+
year: number;
|
|
1868
|
+
ticketStatus: string | null;
|
|
1869
|
+
ticketConfirmationNumber: string | null;
|
|
1870
|
+
ticketNotes: string | null;
|
|
1871
|
+
hasWillCallTicket: boolean | null;
|
|
1872
|
+
}) | null;
|
|
1873
|
+
yearsAttended: number[];
|
|
1874
|
+
}
|
|
1875
|
+
interface MemberPushPreferences {
|
|
1876
|
+
shift_reminders: boolean;
|
|
1877
|
+
event_updates: boolean;
|
|
1878
|
+
camp_announcements: boolean;
|
|
1879
|
+
payment_reminders: boolean;
|
|
1880
|
+
document_requests: boolean;
|
|
1881
|
+
}
|
|
1882
|
+
interface MemberDocumentPage {
|
|
1883
|
+
defaultLegalName: string;
|
|
1884
|
+
documents: Array<{
|
|
1885
|
+
id: string;
|
|
1886
|
+
name: string;
|
|
1887
|
+
description: string | null;
|
|
1888
|
+
documentType: string;
|
|
1889
|
+
deadline: string | null;
|
|
1890
|
+
filePath: string | null;
|
|
1891
|
+
externalUrl: string | null;
|
|
1892
|
+
htmlContent: string | null;
|
|
1893
|
+
signatureId: string | null;
|
|
1894
|
+
isSigned: boolean;
|
|
1895
|
+
signedAt: string | null;
|
|
1896
|
+
}>;
|
|
1897
|
+
pastYearGroups: Array<{
|
|
1898
|
+
year: number;
|
|
1899
|
+
documents: Array<{
|
|
1900
|
+
id: string;
|
|
1901
|
+
name: string;
|
|
1902
|
+
description: string | null;
|
|
1903
|
+
filePath: string | null;
|
|
1904
|
+
externalUrl: string | null;
|
|
1443
1905
|
}>;
|
|
1444
|
-
|
|
1906
|
+
}>;
|
|
1907
|
+
}
|
|
1908
|
+
interface MemberShiftView {
|
|
1909
|
+
arrivalDate: string | null;
|
|
1910
|
+
departureDate: string | null;
|
|
1911
|
+
shifts: Array<{
|
|
1912
|
+
signupId: string;
|
|
1913
|
+
shiftId: string;
|
|
1914
|
+
shiftTypeName: string;
|
|
1915
|
+
shiftDate: string;
|
|
1916
|
+
startTime: string | null;
|
|
1917
|
+
endTime: string | null;
|
|
1918
|
+
status: string | null;
|
|
1919
|
+
coworkers: string[];
|
|
1920
|
+
}>;
|
|
1921
|
+
}
|
|
1922
|
+
type AdminShelterOperation = {
|
|
1923
|
+
action: "approve" | "remove";
|
|
1924
|
+
assignmentId: string;
|
|
1925
|
+
} | {
|
|
1926
|
+
action: "status";
|
|
1927
|
+
assignmentId: string;
|
|
1928
|
+
status: string;
|
|
1929
|
+
} | {
|
|
1930
|
+
action: "assign" | "move";
|
|
1931
|
+
shelterId: string;
|
|
1932
|
+
userId: string;
|
|
1933
|
+
forceOverCapacity?: boolean;
|
|
1934
|
+
} | {
|
|
1935
|
+
action: "transfer";
|
|
1936
|
+
shelterId: string;
|
|
1937
|
+
newOwnerUserId: string;
|
|
1938
|
+
} | {
|
|
1939
|
+
action: "create";
|
|
1940
|
+
ownerUserId: string;
|
|
1941
|
+
data: OwnerShelterCreate;
|
|
1942
|
+
} | {
|
|
1943
|
+
action: "update";
|
|
1944
|
+
shelterId: string;
|
|
1945
|
+
data: OwnerShelterPatch;
|
|
1946
|
+
} | {
|
|
1947
|
+
action: "placement";
|
|
1948
|
+
shelterId: string;
|
|
1949
|
+
mapX: number | null;
|
|
1950
|
+
mapY: number | null;
|
|
1951
|
+
} | {
|
|
1952
|
+
action: "delete";
|
|
1953
|
+
shelterId: string;
|
|
1954
|
+
};
|
|
1955
|
+
interface MobileShifts {
|
|
1956
|
+
shifts: Array<{
|
|
1957
|
+
id: string;
|
|
1958
|
+
date: string;
|
|
1959
|
+
startTime: string | null;
|
|
1960
|
+
endTime: string | null;
|
|
1961
|
+
maxSlots: number;
|
|
1962
|
+
type: {
|
|
1963
|
+
id: string;
|
|
1964
|
+
name: string;
|
|
1965
|
+
description: string | null;
|
|
1966
|
+
};
|
|
1967
|
+
currentSignups: number;
|
|
1968
|
+
isFull: boolean;
|
|
1969
|
+
isSignedUp: boolean;
|
|
1970
|
+
isEligible: boolean;
|
|
1971
|
+
signupId?: string;
|
|
1972
|
+
signupStatus?: string | null;
|
|
1973
|
+
}>;
|
|
1974
|
+
profile: {
|
|
1975
|
+
arrivalDate: string | null;
|
|
1976
|
+
departureDate: string | null;
|
|
1977
|
+
status: string | null;
|
|
1978
|
+
};
|
|
1979
|
+
}
|
|
1980
|
+
interface AdminCampSettings {
|
|
1981
|
+
year: number;
|
|
1982
|
+
slotLimits: Record<string, number>;
|
|
1983
|
+
feeTiers: Array<{
|
|
1984
|
+
id: string;
|
|
1985
|
+
name: string;
|
|
1986
|
+
displayName: string;
|
|
1987
|
+
amount: string;
|
|
1988
|
+
}>;
|
|
1989
|
+
reminders: Array<{
|
|
1990
|
+
type: string;
|
|
1991
|
+
enabled: boolean;
|
|
1992
|
+
}>;
|
|
1993
|
+
contract: {
|
|
1994
|
+
campName: string;
|
|
1995
|
+
legalEntity: string;
|
|
1996
|
+
logoUrl: string | null;
|
|
1997
|
+
addressLines: string[];
|
|
1998
|
+
footerText: string | null;
|
|
1999
|
+
};
|
|
2000
|
+
}
|
|
2001
|
+
type CampSettingsOperation = {
|
|
2002
|
+
action: "slot_limits";
|
|
2003
|
+
limits: Record<string, number>;
|
|
2004
|
+
} | {
|
|
2005
|
+
action: "fee_tier";
|
|
2006
|
+
id: string;
|
|
2007
|
+
displayName: string;
|
|
2008
|
+
amount: number;
|
|
2009
|
+
} | {
|
|
2010
|
+
action: "reminder";
|
|
2011
|
+
type: "payment" | "onboarding" | "documents" | "logistics_undecided" | "photo_avatar" | "photo_fullsize" | "attendance_nudge";
|
|
2012
|
+
enabled: boolean;
|
|
2013
|
+
} | ({
|
|
2014
|
+
action: "contract";
|
|
2015
|
+
} & AdminCampSettings["contract"]);
|
|
2016
|
+
type AdminBikeOperation = {
|
|
2017
|
+
action: "checkout";
|
|
2018
|
+
rentalId: string;
|
|
2019
|
+
bikeInventoryId: string;
|
|
2020
|
+
} | {
|
|
2021
|
+
action: "return";
|
|
2022
|
+
rentalId: string;
|
|
2023
|
+
depositStatus: "refunded" | "forfeited";
|
|
2024
|
+
damageNotes?: string;
|
|
2025
|
+
} | {
|
|
2026
|
+
action: "add";
|
|
2027
|
+
bikeId: string;
|
|
2028
|
+
typeId: string;
|
|
2029
|
+
notes?: string;
|
|
2030
|
+
} | {
|
|
2031
|
+
action: "mark_paid";
|
|
2032
|
+
rentalId: string;
|
|
2033
|
+
confirmationNumber: string;
|
|
2034
|
+
} | {
|
|
2035
|
+
action: "bike_status";
|
|
2036
|
+
bikeId: string;
|
|
2037
|
+
status: "available" | "rented" | "maintenance" | "retired";
|
|
2038
|
+
notes?: string;
|
|
2039
|
+
} | {
|
|
2040
|
+
action: "rental_status";
|
|
2041
|
+
rentalId: string;
|
|
2042
|
+
status: "pending_payment" | "pending_waiver" | "reserved" | "checked_out" | "returned" | "cancelled";
|
|
2043
|
+
} | {
|
|
2044
|
+
action: "nudge_interest";
|
|
2045
|
+
} | {
|
|
2046
|
+
action: "booking_link";
|
|
2047
|
+
memberId: string;
|
|
2048
|
+
};
|
|
2049
|
+
interface AdminBikeOperationResult {
|
|
2050
|
+
success: true;
|
|
2051
|
+
sent?: number;
|
|
2052
|
+
failed?: number;
|
|
2053
|
+
}
|
|
2054
|
+
type AdminPaymentOperation = {
|
|
2055
|
+
action: "manual_payment";
|
|
2056
|
+
payerId: string;
|
|
2057
|
+
paidForUserId?: string | null;
|
|
2058
|
+
amount: number;
|
|
2059
|
+
method: string;
|
|
2060
|
+
notes?: string;
|
|
2061
|
+
year?: number;
|
|
2062
|
+
} | {
|
|
2063
|
+
action: "assign_fee";
|
|
2064
|
+
memberId: string;
|
|
2065
|
+
feeTierId: string;
|
|
2066
|
+
feeType: "base" | "addon";
|
|
2067
|
+
} | {
|
|
2068
|
+
action: "refund";
|
|
2069
|
+
paymentId: string;
|
|
2070
|
+
} | {
|
|
2071
|
+
action: "link_refund";
|
|
2072
|
+
refundEventId: string;
|
|
2073
|
+
paymentId: string;
|
|
2074
|
+
} | {
|
|
2075
|
+
action: "nudge";
|
|
2076
|
+
memberIds: string[];
|
|
2077
|
+
};
|
|
2078
|
+
interface AdminPaymentOperationResult {
|
|
2079
|
+
success: true;
|
|
2080
|
+
paymentId?: string;
|
|
2081
|
+
sent?: number;
|
|
2082
|
+
failed?: number;
|
|
2083
|
+
}
|
|
2084
|
+
interface AdminPaymentSummary {
|
|
2085
|
+
totalUsers: number;
|
|
2086
|
+
totalOwed: number;
|
|
2087
|
+
totalPaid: number;
|
|
2088
|
+
totalBalance: number;
|
|
2089
|
+
paidCount: number;
|
|
2090
|
+
partialCount: number;
|
|
2091
|
+
unpaidCount: number;
|
|
2092
|
+
}
|
|
2093
|
+
interface UnmatchedRefund {
|
|
2094
|
+
id: string;
|
|
2095
|
+
amount: string;
|
|
2096
|
+
method: string | null;
|
|
2097
|
+
reason: string | null;
|
|
2098
|
+
refundedAt: string;
|
|
2099
|
+
givebutterRefundId: string;
|
|
2100
|
+
}
|
|
2101
|
+
interface SchedulingAvailability {
|
|
2102
|
+
id: string;
|
|
2103
|
+
dayOfWeek: number;
|
|
2104
|
+
startTime: string;
|
|
2105
|
+
endTime: string;
|
|
2106
|
+
timezone: string;
|
|
2107
|
+
}
|
|
2108
|
+
interface SchedulingOverride {
|
|
2109
|
+
id: string;
|
|
2110
|
+
overrideDate: string;
|
|
2111
|
+
overrideType: string;
|
|
2112
|
+
startTime: string | null;
|
|
2113
|
+
endTime: string | null;
|
|
2114
|
+
reason: string | null;
|
|
2115
|
+
}
|
|
2116
|
+
interface SchedulingAdminResult {
|
|
2117
|
+
token?: string;
|
|
2118
|
+
interviewerId?: string;
|
|
2119
|
+
availability?: SchedulingAvailability;
|
|
2120
|
+
override?: SchedulingOverride;
|
|
2121
|
+
success?: boolean;
|
|
2122
|
+
}
|
|
2123
|
+
interface SchedulingAdminSettings {
|
|
2124
|
+
googleConnected: boolean;
|
|
2125
|
+
interviewer: {
|
|
2126
|
+
id: string;
|
|
2127
|
+
schedulingType: string | null;
|
|
2128
|
+
externalSchedulingUrl: string | null;
|
|
2129
|
+
} | null;
|
|
2130
|
+
availability: SchedulingAvailability[];
|
|
2131
|
+
overrides: SchedulingOverride[];
|
|
2132
|
+
bookings: {
|
|
2133
|
+
id: string;
|
|
2134
|
+
candidateName: string;
|
|
2135
|
+
candidateEmail: string;
|
|
2136
|
+
startsAt: string;
|
|
2137
|
+
endsAt: string;
|
|
2138
|
+
applicationId: string;
|
|
2139
|
+
}[];
|
|
2140
|
+
}
|
|
2141
|
+
type SchedulingAdminOperation = {
|
|
2142
|
+
action: "feed_settings" | "rotate_feed";
|
|
2143
|
+
} | {
|
|
2144
|
+
action: "add_availability";
|
|
2145
|
+
interviewerId: string;
|
|
2146
|
+
input: {
|
|
2147
|
+
dayOfWeek: number;
|
|
2148
|
+
startTime: string;
|
|
2149
|
+
endTime: string;
|
|
2150
|
+
timezone: string;
|
|
2151
|
+
};
|
|
2152
|
+
} | {
|
|
2153
|
+
action: "delete_availability" | "delete_override";
|
|
2154
|
+
id: string;
|
|
2155
|
+
} | {
|
|
2156
|
+
action: "add_override";
|
|
2157
|
+
interviewerId: string;
|
|
2158
|
+
input: {
|
|
2159
|
+
overrideDate: string;
|
|
2160
|
+
overrideType: "block" | "available";
|
|
2161
|
+
startTime: string | null;
|
|
2162
|
+
endTime: string | null;
|
|
2163
|
+
};
|
|
2164
|
+
} | {
|
|
2165
|
+
action: "set_type";
|
|
2166
|
+
schedulingType: "google" | "external" | "manual";
|
|
2167
|
+
externalUrl?: string;
|
|
2168
|
+
};
|
|
2169
|
+
interface InterviewFeedBooking {
|
|
2170
|
+
id: string;
|
|
2171
|
+
startsAt: string;
|
|
2172
|
+
endsAt: string;
|
|
2173
|
+
candidateName: string;
|
|
2174
|
+
candidateEmail: string;
|
|
2175
|
+
candidateTimezone: string;
|
|
2176
|
+
applicationId: string;
|
|
2177
|
+
interviewerName: string | null;
|
|
2178
|
+
}
|
|
2179
|
+
interface AdminImportantDate {
|
|
2180
|
+
id: string;
|
|
2181
|
+
title: string;
|
|
2182
|
+
description: string | null;
|
|
2183
|
+
date: string;
|
|
2184
|
+
endDate: string | null;
|
|
2185
|
+
category: string | null;
|
|
2186
|
+
notifyDaysBefore: number[] | null;
|
|
2187
|
+
isSystem: boolean | null;
|
|
2188
|
+
slug: string | null;
|
|
2189
|
+
}
|
|
2190
|
+
interface AdminImportantDateInput {
|
|
2191
|
+
title: string;
|
|
2192
|
+
description: string;
|
|
2193
|
+
date: string;
|
|
2194
|
+
endDate: string | null;
|
|
2195
|
+
category: "dues" | "documents" | "tickets" | "event" | "other" | "system";
|
|
2196
|
+
notifyDaysBefore: number[];
|
|
2197
|
+
}
|
|
2198
|
+
type AdminImportantDateOperation = {
|
|
2199
|
+
action: "create";
|
|
2200
|
+
input: AdminImportantDateInput;
|
|
2201
|
+
} | {
|
|
2202
|
+
action: "update";
|
|
2203
|
+
id: string;
|
|
2204
|
+
input: AdminImportantDateInput;
|
|
2205
|
+
} | {
|
|
2206
|
+
action: "delete";
|
|
2207
|
+
id: string;
|
|
2208
|
+
};
|
|
2209
|
+
interface AdminPaymentsPage {
|
|
2210
|
+
year: number;
|
|
2211
|
+
transactions: {
|
|
2212
|
+
id: string;
|
|
2213
|
+
userId: string | null;
|
|
2214
|
+
date: string | null;
|
|
2215
|
+
createdAt: string | null;
|
|
2216
|
+
memberName: string;
|
|
2217
|
+
memberEmail: string;
|
|
2218
|
+
description: string | null;
|
|
2219
|
+
duesType: string | null;
|
|
2220
|
+
amount: number;
|
|
2221
|
+
paymentMethod: string;
|
|
2222
|
+
status: string;
|
|
2223
|
+
paidByName: string | null;
|
|
2224
|
+
paymentId: string | null;
|
|
2225
|
+
}[];
|
|
2226
|
+
typeBreakdown: {
|
|
2227
|
+
duesType: string | null;
|
|
2228
|
+
type: string;
|
|
2229
|
+
count: number;
|
|
2230
|
+
total: number;
|
|
2231
|
+
}[];
|
|
2232
|
+
unmatchedRefunds: {
|
|
2233
|
+
id: string;
|
|
2234
|
+
amount: string;
|
|
2235
|
+
method: string | null;
|
|
2236
|
+
reason: string | null;
|
|
2237
|
+
refundedAt: string;
|
|
2238
|
+
givebutterRefundId: string;
|
|
2239
|
+
}[];
|
|
2240
|
+
membersForPayment: {
|
|
2241
|
+
id: string;
|
|
2242
|
+
name: string;
|
|
2243
|
+
email: string;
|
|
2244
|
+
balance: number;
|
|
2245
|
+
}[];
|
|
2246
|
+
membersForRefund: {
|
|
2247
|
+
id: string;
|
|
2248
|
+
name: string;
|
|
2249
|
+
email: string;
|
|
2250
|
+
}[];
|
|
2251
|
+
}
|
|
2252
|
+
interface ScholarshipStats {
|
|
2253
|
+
totalAssigned: number;
|
|
2254
|
+
totalUsed: number;
|
|
2255
|
+
totalExpired: number;
|
|
2256
|
+
totalAmount: number;
|
|
2257
|
+
usedAmount: number;
|
|
2258
|
+
}
|
|
2259
|
+
interface AdminScholarshipsPage {
|
|
2260
|
+
year: number;
|
|
2261
|
+
scholarships: {
|
|
2262
|
+
id: string;
|
|
2263
|
+
userId: string;
|
|
2264
|
+
promoCode: string;
|
|
2265
|
+
discountAmount: string;
|
|
2266
|
+
reason: string | null;
|
|
2267
|
+
status: ScholarshipStatus;
|
|
2268
|
+
year: number;
|
|
2269
|
+
usedAt: string | null;
|
|
2270
|
+
createdAt: string | null;
|
|
2271
|
+
profile: {
|
|
2272
|
+
id: string;
|
|
2273
|
+
name: string | null;
|
|
2274
|
+
email: string | null;
|
|
2275
|
+
} | null;
|
|
2276
|
+
}[];
|
|
2277
|
+
availableMembers: {
|
|
2278
|
+
id: string;
|
|
2279
|
+
name: string | null;
|
|
2280
|
+
email: string | null;
|
|
2281
|
+
}[];
|
|
2282
|
+
usersWithSucceededPayment: string[];
|
|
2283
|
+
paymentLookupErrorMessage: string | null;
|
|
2284
|
+
discountsApplied: {
|
|
2285
|
+
id: string;
|
|
2286
|
+
discount: string | null;
|
|
2287
|
+
description: string | null;
|
|
2288
|
+
createdAt: string | null;
|
|
2289
|
+
profile: {
|
|
2290
|
+
id: string;
|
|
2291
|
+
name: string | null;
|
|
2292
|
+
email: string | null;
|
|
2293
|
+
} | null;
|
|
2294
|
+
}[];
|
|
2295
|
+
stats: ScholarshipStats;
|
|
2296
|
+
}
|
|
2297
|
+
type AdminMemberRole = "applicant" | "member" | "admin" | "super_admin";
|
|
2298
|
+
type AdminMemberStatus = "registered" | "pending" | "invite_sent" | "interview_scheduled" | "interviewed" | "approved" | "waitlisted" | "active" | "rejected" | "inactive";
|
|
2299
|
+
interface AdminMemberInvite {
|
|
2300
|
+
firstName: string;
|
|
2301
|
+
lastName: string;
|
|
2302
|
+
email: string;
|
|
2303
|
+
phone?: string | null;
|
|
2304
|
+
role: AdminMemberRole;
|
|
2305
|
+
status: AdminMemberStatus;
|
|
2306
|
+
virginBurner?: boolean;
|
|
2307
|
+
sendInvite?: boolean;
|
|
2308
|
+
}
|
|
2309
|
+
type AdminMemberOperation = {
|
|
2310
|
+
action: "role";
|
|
2311
|
+
profileId: string;
|
|
2312
|
+
role: AdminMemberRole;
|
|
2313
|
+
} | {
|
|
2314
|
+
action: "admin_roles";
|
|
2315
|
+
profileId: string;
|
|
2316
|
+
adminRoles: ("super_admin" | "finance" | "operations" | "membership" | "scholarship")[];
|
|
2317
|
+
} | {
|
|
2318
|
+
action: "status";
|
|
2319
|
+
profileId: string;
|
|
2320
|
+
status: AdminMemberStatus;
|
|
2321
|
+
} | {
|
|
2322
|
+
action: "attendance";
|
|
2323
|
+
profileId: string;
|
|
2324
|
+
attendanceResponse: "attending" | "not_attending" | "undecided" | null;
|
|
2325
|
+
/** Defaults to the active camp year. An explicit year must already have a camp year row. */
|
|
2326
|
+
year?: number;
|
|
2327
|
+
} | {
|
|
2328
|
+
action: "profile";
|
|
2329
|
+
profileId: string;
|
|
2330
|
+
profile?: MemberProfileUpdate;
|
|
2331
|
+
campYear?: Omit<MemberTravelUpdate, "attendanceResponse">;
|
|
2332
|
+
year?: number;
|
|
2333
|
+
} | {
|
|
2334
|
+
action: "delete";
|
|
2335
|
+
profileId: string;
|
|
2336
|
+
} | ({
|
|
2337
|
+
action: "invite";
|
|
2338
|
+
} & AdminMemberInvite) | {
|
|
2339
|
+
action: "bike_interest";
|
|
2340
|
+
profileId: string;
|
|
2341
|
+
wantsBikeRental: boolean;
|
|
2342
|
+
bikeTypePreference: "ebike" | "pedal" | null;
|
|
2343
|
+
/** Defaults to the active camp year. An explicit year must already have a camp year row. */
|
|
2344
|
+
year?: number;
|
|
2345
|
+
} | {
|
|
2346
|
+
action: "summer_rsvp";
|
|
2347
|
+
profileId: string;
|
|
2348
|
+
eventId: string;
|
|
2349
|
+
nightsAttending: string[];
|
|
2350
|
+
isDayTripOnly: boolean;
|
|
2351
|
+
dietaryRestrictions: string | null;
|
|
2352
|
+
notes: string | null;
|
|
2353
|
+
} | {
|
|
2354
|
+
action: "summer_cancel";
|
|
2355
|
+
rsvpId: string;
|
|
2356
|
+
} | {
|
|
2357
|
+
action: "meeting_rsvp";
|
|
2358
|
+
profileId: string;
|
|
2359
|
+
meetingId: string;
|
|
2360
|
+
dateOptionId: string;
|
|
2361
|
+
} | {
|
|
2362
|
+
action: "meeting_cancel";
|
|
2363
|
+
profileId: string;
|
|
2364
|
+
meetingId: string;
|
|
2365
|
+
};
|
|
2366
|
+
interface AdminImportRow {
|
|
2367
|
+
firstName: string;
|
|
2368
|
+
lastName: string;
|
|
2369
|
+
name?: string;
|
|
2370
|
+
email: string;
|
|
2371
|
+
phone?: string | null;
|
|
2372
|
+
playaName?: string | null;
|
|
2373
|
+
yearJoined?: number | null;
|
|
2374
|
+
attendingThisYear?: boolean;
|
|
2375
|
+
role: AdminMemberRole;
|
|
2376
|
+
status: AdminMemberStatus;
|
|
2377
|
+
}
|
|
2378
|
+
type AdminImportOperation = {
|
|
2379
|
+
action: "validate_emails";
|
|
2380
|
+
emails: string[];
|
|
2381
|
+
} | {
|
|
2382
|
+
action: "import";
|
|
2383
|
+
rows: AdminImportRow[];
|
|
2384
|
+
year: number;
|
|
2385
|
+
} | {
|
|
2386
|
+
action: "welcome";
|
|
2387
|
+
profileIds: string[];
|
|
2388
|
+
} | {
|
|
2389
|
+
action: "invite_broadcast";
|
|
2390
|
+
} | {
|
|
2391
|
+
action: "invite_existing";
|
|
2392
|
+
profileId: string;
|
|
2393
|
+
};
|
|
2394
|
+
interface AdminImportResult {
|
|
2395
|
+
duplicates?: string[];
|
|
2396
|
+
created?: number;
|
|
2397
|
+
failed?: number;
|
|
2398
|
+
errors?: string[];
|
|
2399
|
+
createdRows?: {
|
|
2400
|
+
index: number;
|
|
2401
|
+
profileId: string;
|
|
2402
|
+
}[];
|
|
2403
|
+
sent?: number;
|
|
2404
|
+
skipped?: number;
|
|
2405
|
+
}
|
|
2406
|
+
type BookkeepingAdminOperation = {
|
|
2407
|
+
action: "close" | "rollover";
|
|
2408
|
+
year: number;
|
|
2409
|
+
} | {
|
|
2410
|
+
action: "lessons";
|
|
2411
|
+
year: number;
|
|
2412
|
+
text: string;
|
|
2413
|
+
};
|
|
2414
|
+
interface AdminGivebutterWidgets {
|
|
2415
|
+
year: number;
|
|
2416
|
+
widgets: {
|
|
2417
|
+
id: string;
|
|
2418
|
+
category: string;
|
|
2419
|
+
tierKey: string;
|
|
2420
|
+
widgetId: string;
|
|
2421
|
+
label: string | null;
|
|
2422
|
+
isActive: boolean;
|
|
2423
|
+
year: number;
|
|
2424
|
+
}[];
|
|
2425
|
+
}
|
|
2426
|
+
type AdminGivebutterWidgetOperation = {
|
|
2427
|
+
action: "upsert";
|
|
2428
|
+
category: "dues" | "rv_addon" | "donation";
|
|
2429
|
+
tierKey: string;
|
|
2430
|
+
widgetId: string;
|
|
2431
|
+
label: string | null;
|
|
2432
|
+
} | {
|
|
2433
|
+
action: "delete";
|
|
2434
|
+
id: string;
|
|
2435
|
+
} | {
|
|
2436
|
+
action: "toggle";
|
|
2437
|
+
id: string;
|
|
2438
|
+
isActive: boolean;
|
|
2439
|
+
};
|
|
2440
|
+
type EmailSegmentKey = "allMembers" | "admins" | "unpaidDues" | "rvFeesOwed" | "hasntLoggedIn" | "outstandingRsvp" | "needsTicket" | "attendingBuildWeek" | "attendingSummerCamp" | "hasUnsignedDocuments";
|
|
2441
|
+
interface EmailRecipientFilter {
|
|
2442
|
+
status?: string[];
|
|
2443
|
+
paymentStatus?: string[];
|
|
2444
|
+
isAttending?: boolean;
|
|
2445
|
+
isBuildWeek?: boolean;
|
|
2446
|
+
tagIds?: string[];
|
|
2447
|
+
roles?: string[];
|
|
2448
|
+
memberIds?: string[];
|
|
2449
|
+
}
|
|
2450
|
+
interface EmailRecipient {
|
|
2451
|
+
id: string;
|
|
2452
|
+
name: string | null;
|
|
2453
|
+
email: string;
|
|
2454
|
+
}
|
|
2455
|
+
interface EmailComposerOptions {
|
|
2456
|
+
tags: {
|
|
2457
|
+
id: string;
|
|
2458
|
+
name: string;
|
|
2459
|
+
color: string;
|
|
2460
|
+
memberCount: number;
|
|
2461
|
+
}[];
|
|
2462
|
+
members: EmailRecipient[];
|
|
2463
|
+
segmentCounts: Record<EmailSegmentKey, number | null>;
|
|
2464
|
+
}
|
|
2465
|
+
/**
|
|
2466
|
+
* The admin delivery/retry tab. Each log is an `email_retries` row (PLA-801, the single retry
|
|
2467
|
+
* system). The `retried` tab lists rows re-attempted at least once.
|
|
2468
|
+
*/
|
|
2469
|
+
interface EmailDeliveryPage {
|
|
2470
|
+
logs: {
|
|
2471
|
+
id: string;
|
|
2472
|
+
recipientEmail: string | null;
|
|
2473
|
+
subject: string;
|
|
2474
|
+
emailType: string;
|
|
2475
|
+
/** Always null: retry rows carry the rendered message, not a template reference. */
|
|
2476
|
+
templateId: string | null;
|
|
2477
|
+
status: string;
|
|
2478
|
+
error: string | null;
|
|
2479
|
+
/** Provider failure class (e.g. transient vs permanent) when the last attempt failed. */
|
|
2480
|
+
failureClass: string | null;
|
|
2481
|
+
retryCount: number;
|
|
2482
|
+
/** When the retry executor will next attempt the row, if it is still pending. */
|
|
2483
|
+
nextRetryAt: string | null;
|
|
2484
|
+
/** Set only for delivered rows. */
|
|
2485
|
+
sentAt: string | null;
|
|
2486
|
+
createdAt: string;
|
|
2487
|
+
updatedAt: string;
|
|
2488
|
+
}[];
|
|
2489
|
+
totalSent: number;
|
|
2490
|
+
succeededSent: number;
|
|
2491
|
+
failed: number;
|
|
2492
|
+
queued: number;
|
|
2493
|
+
retryableCount: number;
|
|
2494
|
+
successRate: number;
|
|
2495
|
+
tabCounts: {
|
|
2496
|
+
failed: number;
|
|
2497
|
+
queued: number;
|
|
2498
|
+
succeeded: number;
|
|
2499
|
+
retried: number;
|
|
2500
|
+
};
|
|
2501
|
+
tabTotal: number;
|
|
2502
|
+
safePage: number;
|
|
2503
|
+
}
|
|
2504
|
+
/** Result of one `emails.syncContacts` call (POST /email/contacts/sync). */
|
|
2505
|
+
interface ContactSyncResponse {
|
|
2506
|
+
/** Contacts synced by this call only. */
|
|
2507
|
+
synced: number;
|
|
2508
|
+
/** Contacts that failed in this call only. */
|
|
2509
|
+
failed: number;
|
|
2510
|
+
/** True when the call stopped at its time limit before finishing; resume with `cursor`. */
|
|
2511
|
+
skipped: boolean;
|
|
2512
|
+
/** Opaque resume token for a partial sync; null once the sync is complete. */
|
|
2513
|
+
cursor: string | null;
|
|
2514
|
+
message: string;
|
|
2515
|
+
}
|
|
2516
|
+
interface EmailCmsPreview {
|
|
2517
|
+
html: string;
|
|
2518
|
+
cmsAvailable: boolean;
|
|
2519
|
+
storyId: number | null;
|
|
2520
|
+
templateContent: {
|
|
2521
|
+
subject: string;
|
|
2522
|
+
previewText: string;
|
|
2523
|
+
heading: string;
|
|
2524
|
+
body: string;
|
|
2525
|
+
ctaText: string;
|
|
2526
|
+
ctaUrl: string;
|
|
2527
|
+
signOff: string;
|
|
2528
|
+
signOffName: string;
|
|
2529
|
+
} | null;
|
|
2530
|
+
baseContent: {
|
|
2531
|
+
logoImage: string;
|
|
2532
|
+
logoText: string;
|
|
2533
|
+
footerText: string;
|
|
2534
|
+
footerUrl: string;
|
|
2535
|
+
footerUrlText: string;
|
|
2536
|
+
noreplyText: string;
|
|
2537
|
+
contactEmail: string;
|
|
2538
|
+
};
|
|
2539
|
+
}
|
|
2540
|
+
interface AdminMemberExportRow {
|
|
2541
|
+
email: string;
|
|
2542
|
+
firstName: string | null;
|
|
2543
|
+
lastName: string | null;
|
|
2544
|
+
status: string | null;
|
|
2545
|
+
role: string | null;
|
|
2546
|
+
hasPaidBaseDues: boolean;
|
|
2547
|
+
hasPaidRvDues: boolean;
|
|
2548
|
+
ownsRvShelter: boolean;
|
|
2549
|
+
shelterType: string | null;
|
|
2550
|
+
isAttending: boolean;
|
|
2551
|
+
}
|
|
2552
|
+
interface AdminGivebutterCatalog {
|
|
2553
|
+
campaigns: {
|
|
2554
|
+
id: number;
|
|
2555
|
+
title: string;
|
|
2556
|
+
status: string;
|
|
2557
|
+
lastSyncedAt: string;
|
|
2558
|
+
}[];
|
|
2559
|
+
items: {
|
|
2560
|
+
id: number;
|
|
2561
|
+
campaignId: number;
|
|
2562
|
+
name: string;
|
|
2563
|
+
price: number;
|
|
2564
|
+
active: boolean;
|
|
2565
|
+
}[];
|
|
2566
|
+
activeTier: {
|
|
2567
|
+
tier: "base_dues";
|
|
2568
|
+
campaignId: number;
|
|
2569
|
+
itemId: number;
|
|
2570
|
+
} | null;
|
|
2571
|
+
}
|
|
2572
|
+
type AdminGivebutterCatalogOperation = {
|
|
2573
|
+
action: "sync";
|
|
2574
|
+
} | {
|
|
2575
|
+
action: "set_active_tier";
|
|
2576
|
+
tier: "base_dues";
|
|
2577
|
+
campaignId: number;
|
|
2578
|
+
itemId: number;
|
|
2579
|
+
};
|
|
2580
|
+
type PackingContainerType = "hdx_tote" | "suitcase" | "box" | "bag" | "other";
|
|
2581
|
+
interface PackingContainer {
|
|
2582
|
+
id: string;
|
|
2583
|
+
name: string;
|
|
2584
|
+
type: PackingContainerType;
|
|
2585
|
+
size: string | null;
|
|
2586
|
+
description: string | null;
|
|
2587
|
+
}
|
|
2588
|
+
interface PackingContainerInput {
|
|
2589
|
+
name: string;
|
|
2590
|
+
type?: PackingContainerType;
|
|
2591
|
+
size?: string | null;
|
|
2592
|
+
description?: string | null;
|
|
2593
|
+
year: number;
|
|
2594
|
+
}
|
|
2595
|
+
interface PackingContainerListResponse {
|
|
2596
|
+
containers: (PackingContainer & {
|
|
2597
|
+
itemCount: number;
|
|
2598
|
+
})[];
|
|
2599
|
+
year: number;
|
|
2600
|
+
}
|
|
2601
|
+
interface PackingPlacementListResponse {
|
|
2602
|
+
items: PackingItem[];
|
|
2603
|
+
year: number;
|
|
2604
|
+
total: number;
|
|
2605
|
+
}
|
|
2606
|
+
interface AdminInterviewBooking {
|
|
2607
|
+
id: string;
|
|
2608
|
+
applicationId: string;
|
|
2609
|
+
startsAt: string;
|
|
2610
|
+
endsAt: string;
|
|
2611
|
+
candidateName: string;
|
|
2612
|
+
candidateEmail: string;
|
|
2613
|
+
timezone: string;
|
|
2614
|
+
}
|
|
2615
|
+
interface AccountReviewProfile {
|
|
2616
|
+
id: string;
|
|
2617
|
+
firstName: string;
|
|
2618
|
+
lastName: string;
|
|
2619
|
+
email: string | null;
|
|
2620
|
+
status: string | null;
|
|
2621
|
+
role: string | null;
|
|
2622
|
+
supabaseUserId: string | null;
|
|
2623
|
+
createdAt: string | null;
|
|
2624
|
+
provider: string | null;
|
|
2625
|
+
lastSignIn: string | null;
|
|
2626
|
+
}
|
|
2627
|
+
interface AdminAccountsPage {
|
|
2628
|
+
duplicates: {
|
|
2629
|
+
normalizedName: string;
|
|
2630
|
+
distance: number;
|
|
2631
|
+
profiles: (AccountReviewProfile & {
|
|
2632
|
+
applicationCount: number;
|
|
2633
|
+
campYears: number[];
|
|
2634
|
+
campYearCount: number;
|
|
2635
|
+
})[];
|
|
2636
|
+
}[];
|
|
2637
|
+
needsAttention: (AccountReviewProfile & {
|
|
2638
|
+
category: "registered-admin" | "registered-member" | "new-user-signed-in";
|
|
2639
|
+
applicationCount: number;
|
|
2640
|
+
})[];
|
|
2641
|
+
orphans: {
|
|
2642
|
+
id: string;
|
|
2643
|
+
email: string | null;
|
|
2644
|
+
createdAt: string | null;
|
|
2645
|
+
invitedAt: string | null;
|
|
2646
|
+
provider: null;
|
|
2647
|
+
}[];
|
|
2648
|
+
}
|
|
2649
|
+
type AdminAccountsOperation = {
|
|
2650
|
+
action: "promote" | "delete";
|
|
2651
|
+
profileIds: string[];
|
|
2652
|
+
} | {
|
|
2653
|
+
action: "dismiss";
|
|
2654
|
+
profileIdA: string;
|
|
2655
|
+
profileIdB: string;
|
|
2656
|
+
} | {
|
|
2657
|
+
action: "merge";
|
|
2658
|
+
primaryId: string;
|
|
2659
|
+
duplicateId: string;
|
|
2660
|
+
};
|
|
2661
|
+
interface AdminBikeInterestRow {
|
|
2662
|
+
userId: string;
|
|
2663
|
+
wantsBikeRental: boolean | null;
|
|
2664
|
+
bikeTypePreference: string | null;
|
|
2665
|
+
arrivalDate: string | null;
|
|
2666
|
+
attendanceResponse: string | null;
|
|
2667
|
+
transportMode: string | null;
|
|
2668
|
+
shelterWizardDone: boolean | null;
|
|
2669
|
+
hasConfirmedShelter: boolean;
|
|
2670
|
+
hasUnsignedDocuments: boolean;
|
|
2671
|
+
profiles: {
|
|
2672
|
+
name: string | null;
|
|
2673
|
+
email: string | null;
|
|
2674
|
+
firstName: string | null;
|
|
2675
|
+
lastName: string | null;
|
|
2676
|
+
phone: string | null;
|
|
2677
|
+
emergencyContactName: string | null;
|
|
2678
|
+
emergencyContactPhone: string | null;
|
|
2679
|
+
dietaryRestrictions: string[] | null;
|
|
2680
|
+
tshirtSize: string | null;
|
|
2681
|
+
onboardingPasswordDone: boolean | null;
|
|
2682
|
+
} | null;
|
|
2683
|
+
}
|
|
2684
|
+
//#endregion
|
|
2685
|
+
//#region src/client.d.ts
|
|
2686
|
+
interface ClientOptions {
|
|
2687
|
+
/** Base URL for authenticated /api/v1 routes, e.g. https://api.playaos.app */
|
|
2688
|
+
baseUrl: string;
|
|
2689
|
+
/** Optional base URL for /api/embed/v1 routes when they live on a different host. */
|
|
2690
|
+
embedBaseUrl?: string;
|
|
2691
|
+
/** API key in the format pk_live_* */
|
|
2692
|
+
apiKey: string;
|
|
2693
|
+
/**
|
|
2694
|
+
* Supabase session JWT of the acting member, sent as `X-PlayaOS-Member-Token`
|
|
2695
|
+
* on every /api/v1 call (PLA-1195). Member-scoped endpoints (a member's own
|
|
2696
|
+
* dues, payments, application, shelter, shifts signup, …) require it and
|
|
2697
|
+
* return 401 without it. Org-level endpoints do not require it, but a token
|
|
2698
|
+
* that is sent must still verify — an expired or invalid one is a 401 on any
|
|
2699
|
+
* /api/v1 route that installs the member middleware. Prefer
|
|
2700
|
+
* `client.withMember(token)` to derive a per-request client from a shared
|
|
2701
|
+
* server-side one rather than constructing a client per user.
|
|
2702
|
+
*/
|
|
2703
|
+
memberToken?: string;
|
|
2704
|
+
}
|
|
2705
|
+
export declare class PlayaOSClient {
|
|
2706
|
+
private readonly baseUrl;
|
|
2707
|
+
private readonly embedBaseUrl;
|
|
2708
|
+
private readonly apiKey;
|
|
2709
|
+
private readonly memberToken;
|
|
2710
|
+
constructor(opts: ClientOptions);
|
|
2711
|
+
/** Credentials for /api/v1 calls; the embed surface uses `apiKey` alone as the camp key. */
|
|
2712
|
+
private get auth();
|
|
2713
|
+
/**
|
|
2714
|
+
* Derive a client that acts as one member (PLA-1195): same host and org key,
|
|
2715
|
+
* plus the member's Supabase session JWT on every /api/v1 call. Use this in a
|
|
2716
|
+
* server that holds one org key and serves many signed-in members.
|
|
2717
|
+
*/
|
|
2718
|
+
withMember(memberToken: string): PlayaOSClient;
|
|
2719
|
+
/**
|
|
2720
|
+
* Admin dual-path (PLA-1203): when the client has a memberToken, call `/api/v1`
|
|
2721
|
+
* (org key + X-PlayaOS-Member-Token). Otherwise keep the legacy embed-admin
|
|
2722
|
+
* Bearer-JWT path so published consumers without withMember() still work.
|
|
2723
|
+
*/
|
|
2724
|
+
private adminV1OrEmbed;
|
|
2725
|
+
/** Resolve admin credential: memberToken clients skip accessToken; embed path requires it. */
|
|
2726
|
+
private adminAccess;
|
|
2727
|
+
readonly publicBooking: {
|
|
2728
|
+
details: (token: string, opts?: {
|
|
2729
|
+
signal?: AbortSignal;
|
|
2730
|
+
}) => Promise<{
|
|
2731
|
+
title: string;
|
|
2732
|
+
description: string | null;
|
|
2733
|
+
durationMinutes: number;
|
|
2734
|
+
candidateName: string;
|
|
2735
|
+
candidateEmail: string;
|
|
2736
|
+
booking: {
|
|
2737
|
+
id: string;
|
|
2738
|
+
startsAt: string;
|
|
2739
|
+
endsAt: string;
|
|
2740
|
+
timezone: string;
|
|
2741
|
+
} | null;
|
|
2742
|
+
}>;
|
|
2743
|
+
slots: (token: string, opts?: {
|
|
2744
|
+
signal?: AbortSignal;
|
|
2745
|
+
}) => Promise<{
|
|
2746
|
+
slots: Array<{
|
|
2747
|
+
start: string;
|
|
2748
|
+
end: string;
|
|
2749
|
+
interviewerId: string;
|
|
2750
|
+
}>;
|
|
2751
|
+
}>;
|
|
2752
|
+
book: (token: string, payload: {
|
|
2753
|
+
slotStart: string;
|
|
2754
|
+
interviewerId: string;
|
|
2755
|
+
candidateTimezone: string;
|
|
2756
|
+
}, opts?: {
|
|
2757
|
+
signal?: AbortSignal;
|
|
2758
|
+
}) => Promise<{
|
|
2759
|
+
booking: {
|
|
2760
|
+
id: string;
|
|
2761
|
+
startsAt: string;
|
|
2762
|
+
endsAt: string;
|
|
2763
|
+
meetLink: string | null;
|
|
2764
|
+
};
|
|
2765
|
+
}>;
|
|
2766
|
+
cancel: (token: string, payload: {
|
|
2767
|
+
bookingId: string;
|
|
2768
|
+
}, opts?: {
|
|
2769
|
+
signal?: AbortSignal;
|
|
2770
|
+
}) => Promise<{
|
|
2771
|
+
cancelled: true;
|
|
2772
|
+
}>;
|
|
2773
|
+
};
|
|
2774
|
+
readonly campSettings: {
|
|
2775
|
+
catalog: (opts?: {
|
|
2776
|
+
signal?: AbortSignal;
|
|
2777
|
+
}) => Promise<AdminGivebutterCatalog>;
|
|
2778
|
+
catalogOperation: (payload: AdminGivebutterCatalogOperation, opts?: {
|
|
2779
|
+
signal?: AbortSignal;
|
|
2780
|
+
}) => Promise<{
|
|
2781
|
+
success?: boolean;
|
|
2782
|
+
campaigns?: number;
|
|
2783
|
+
items?: number;
|
|
2784
|
+
}>;
|
|
2785
|
+
widgets: (opts?: {
|
|
2786
|
+
signal?: AbortSignal;
|
|
2787
|
+
}) => Promise<AdminGivebutterWidgets>;
|
|
2788
|
+
widgetOperation: (payload: AdminGivebutterWidgetOperation, opts?: {
|
|
2789
|
+
signal?: AbortSignal;
|
|
2790
|
+
}) => Promise<{
|
|
2791
|
+
success: true;
|
|
2792
|
+
}>;
|
|
2793
|
+
admin: (opts?: {
|
|
2794
|
+
signal?: AbortSignal;
|
|
2795
|
+
}) => Promise<AdminCampSettings>;
|
|
2796
|
+
update: (payload: CampSettingsOperation, opts?: {
|
|
2797
|
+
signal?: AbortSignal;
|
|
2798
|
+
}) => Promise<{
|
|
2799
|
+
success: true;
|
|
2800
|
+
}>;
|
|
2801
|
+
};
|
|
2802
|
+
readonly scheduling: {
|
|
2803
|
+
booking: (id: string, opts?: {
|
|
2804
|
+
signal?: AbortSignal;
|
|
2805
|
+
}) => Promise<AdminInterviewBooking>;
|
|
2806
|
+
adminSettings: (opts?: {
|
|
2807
|
+
signal?: AbortSignal;
|
|
2808
|
+
}) => Promise<SchedulingAdminSettings>;
|
|
2809
|
+
adminOperation: (payload: SchedulingAdminOperation, opts?: {
|
|
2810
|
+
signal?: AbortSignal;
|
|
2811
|
+
}) => Promise<SchedulingAdminResult>;
|
|
2812
|
+
feed: (interviewerId: string, token: string, opts?: {
|
|
2813
|
+
signal?: AbortSignal;
|
|
2814
|
+
}) => Promise<InterviewFeedBooking[]>;
|
|
2815
|
+
};
|
|
2816
|
+
readonly members: {
|
|
2817
|
+
adminExport: (params: {
|
|
2818
|
+
year: number;
|
|
2819
|
+
}, opts?: {
|
|
2820
|
+
signal?: AbortSignal;
|
|
2821
|
+
}) => Promise<{
|
|
2822
|
+
data: AdminMemberExportRow[];
|
|
2823
|
+
}>;
|
|
2824
|
+
adminOperation: (payload: AdminMemberOperation, opts?: {
|
|
2825
|
+
signal?: AbortSignal;
|
|
2826
|
+
}) => Promise<{
|
|
2827
|
+
success: true;
|
|
2828
|
+
profileId?: string;
|
|
2829
|
+
year?: number;
|
|
2830
|
+
}>;
|
|
2831
|
+
adminImportOperation: (payload: AdminImportOperation, opts?: {
|
|
2832
|
+
signal?: AbortSignal;
|
|
2833
|
+
}) => Promise<AdminImportResult>;
|
|
2834
|
+
adminDetail: (id: string, params?: {
|
|
2835
|
+
year?: number;
|
|
2836
|
+
}, opts?: {
|
|
2837
|
+
signal?: AbortSignal;
|
|
2838
|
+
}) => Promise<MemberProfileDetails>;
|
|
2839
|
+
adminHistory: (id: string, opts?: {
|
|
2840
|
+
signal?: AbortSignal;
|
|
2841
|
+
}) => Promise<{
|
|
2842
|
+
data: {
|
|
2843
|
+
id: string;
|
|
2844
|
+
editorName: string | null;
|
|
2845
|
+
changes: Record<string, {
|
|
2846
|
+
from: unknown;
|
|
2847
|
+
to: unknown;
|
|
2848
|
+
}>;
|
|
2849
|
+
createdAt: string | null;
|
|
2850
|
+
}[];
|
|
2851
|
+
}>;
|
|
2852
|
+
selfProfile: (params?: {
|
|
2853
|
+
year?: number;
|
|
2854
|
+
}, opts?: {
|
|
2855
|
+
signal?: AbortSignal;
|
|
2856
|
+
}) => Promise<MemberProfileDetails>;
|
|
2857
|
+
updateSelfProfile: (payload: MemberSelfProfilePatch, opts?: {
|
|
2858
|
+
signal?: AbortSignal;
|
|
2859
|
+
}) => Promise<{
|
|
2860
|
+
profileId: string;
|
|
2861
|
+
year: number | null;
|
|
2862
|
+
}>;
|
|
2863
|
+
referrers: (params: {
|
|
2864
|
+
q: string;
|
|
2865
|
+
}, opts?: {
|
|
2866
|
+
signal?: AbortSignal;
|
|
2867
|
+
}) => Promise<{
|
|
2868
|
+
data: Array<{
|
|
2869
|
+
id: string;
|
|
2870
|
+
name: string | null;
|
|
2871
|
+
}>;
|
|
2872
|
+
}>;
|
|
2873
|
+
referrer: (id: string, opts?: {
|
|
2874
|
+
signal?: AbortSignal;
|
|
2875
|
+
}) => Promise<{
|
|
2876
|
+
id: string;
|
|
2877
|
+
name: string | null;
|
|
2878
|
+
}>;
|
|
2879
|
+
getPushPreferences: (opts?: {
|
|
2880
|
+
signal?: AbortSignal;
|
|
2881
|
+
}) => Promise<MemberPushPreferences>;
|
|
2882
|
+
updatePushPreferences: (payload: Partial<MemberPushPreferences>, opts?: {
|
|
2883
|
+
signal?: AbortSignal;
|
|
2884
|
+
}) => Promise<MemberPushPreferences>;
|
|
2885
|
+
adminPhotoDownloadUrl: (id: string, params?: {
|
|
2886
|
+
original?: boolean;
|
|
2887
|
+
}, opts?: {
|
|
2888
|
+
signal?: AbortSignal;
|
|
2889
|
+
}) => Promise<{
|
|
2890
|
+
url: string;
|
|
2891
|
+
fileName: string;
|
|
2892
|
+
}>;
|
|
2893
|
+
adminPhotoUploadUrl: (id: string, payload: {
|
|
2894
|
+
contentType: "image/jpeg" | "image/png" | "image/webp";
|
|
2895
|
+
kind?: "avatar" | "original";
|
|
2896
|
+
}, opts?: {
|
|
2897
|
+
signal?: AbortSignal;
|
|
2898
|
+
}) => Promise<{
|
|
2899
|
+
uploadUrl: string;
|
|
2900
|
+
path: string;
|
|
2901
|
+
token: string;
|
|
2902
|
+
key: string;
|
|
2903
|
+
}>;
|
|
2904
|
+
adminSetPhoto: (id: string, payload: {
|
|
2905
|
+
key: string;
|
|
2906
|
+
originalKey?: string | null;
|
|
2907
|
+
}, opts?: {
|
|
2908
|
+
signal?: AbortSignal;
|
|
2909
|
+
}) => Promise<{
|
|
2910
|
+
avatarUrl: string;
|
|
2911
|
+
originalUrl: string | null;
|
|
2912
|
+
}>;
|
|
2913
|
+
adminDeletePhoto: (id: string, opts?: {
|
|
2914
|
+
signal?: AbortSignal;
|
|
2915
|
+
}) => Promise<{
|
|
2916
|
+
success: boolean;
|
|
2917
|
+
}>;
|
|
2918
|
+
updateOnboarding: (payload: MemberOnboardingUpdate, opts?: {
|
|
2919
|
+
signal?: AbortSignal;
|
|
2920
|
+
}) => Promise<{
|
|
2921
|
+
profileId: string;
|
|
2922
|
+
year: number | null;
|
|
2923
|
+
}>;
|
|
2924
|
+
bootstrap: (opts?: {
|
|
2925
|
+
signal?: AbortSignal;
|
|
2926
|
+
}) => Promise<MemberBootstrap>;
|
|
2927
|
+
dashboard: (opts?: {
|
|
2928
|
+
signal?: AbortSignal;
|
|
2929
|
+
}) => Promise<MemberDashboard>;
|
|
2930
|
+
/** Presigned profile-photo upload (PLA-1263). PUT the bytes, then setPhoto. */
|
|
2931
|
+
createPhotoUploadUrl: (payload: {
|
|
2932
|
+
contentType: "image/jpeg" | "image/png" | "image/webp";
|
|
2933
|
+
kind?: "avatar" | "original";
|
|
2934
|
+
}, opts?: {
|
|
2935
|
+
signal?: AbortSignal;
|
|
2936
|
+
}) => Promise<{
|
|
2937
|
+
uploadUrl: string;
|
|
2938
|
+
path: string;
|
|
2939
|
+
token: string;
|
|
2940
|
+
key: string;
|
|
2941
|
+
}>;
|
|
2942
|
+
setPhoto: (payload: {
|
|
2943
|
+
key: string;
|
|
2944
|
+
originalKey?: string | null;
|
|
2945
|
+
}, opts?: {
|
|
2946
|
+
signal?: AbortSignal;
|
|
2947
|
+
}) => Promise<{
|
|
2948
|
+
avatarUrl: string;
|
|
2949
|
+
originalUrl: string | null;
|
|
2950
|
+
}>;
|
|
2951
|
+
deletePhoto: (opts?: {
|
|
2952
|
+
signal?: AbortSignal;
|
|
2953
|
+
}) => Promise<{
|
|
2954
|
+
success: boolean;
|
|
2955
|
+
}>;
|
|
2956
|
+
/** Active push device tokens for the acting member (PLA-1261). */
|
|
2957
|
+
listDevices: (opts?: {
|
|
2958
|
+
signal?: AbortSignal;
|
|
2959
|
+
}) => Promise<MemberDevice[]>;
|
|
2960
|
+
registerDevice: (payload: {
|
|
2961
|
+
token: string;
|
|
2962
|
+
platform: "ios" | "android";
|
|
2963
|
+
environment?: "sandbox" | "production";
|
|
2964
|
+
}, opts?: {
|
|
2965
|
+
signal?: AbortSignal;
|
|
2966
|
+
}) => Promise<{
|
|
2967
|
+
id: string;
|
|
2968
|
+
registered: boolean;
|
|
2969
|
+
}>;
|
|
2970
|
+
deleteDevice: (payload: {
|
|
2971
|
+
token: string;
|
|
2972
|
+
}, opts?: {
|
|
2973
|
+
signal?: AbortSignal;
|
|
2974
|
+
}) => Promise<{
|
|
2975
|
+
unregistered: boolean;
|
|
2976
|
+
}>;
|
|
2977
|
+
/** The acting member's communication + (admin) notification preferences (PLA-1262). */
|
|
1445
2978
|
getPreferences: (opts?: {
|
|
1446
2979
|
signal?: AbortSignal;
|
|
1447
2980
|
}) => Promise<MemberPreferences>;
|
|
1448
2981
|
updatePreferences: (payload: {
|
|
1449
|
-
emailMarketingOptIn
|
|
1450
|
-
adminNotifications?: AdminNotificationPrefs
|
|
2982
|
+
emailMarketingOptIn?: boolean;
|
|
2983
|
+
adminNotifications?: Partial<AdminNotificationPrefs>;
|
|
1451
2984
|
}, opts?: {
|
|
1452
2985
|
signal?: AbortSignal;
|
|
1453
2986
|
}) => Promise<MemberPreferences>;
|
|
@@ -1529,10 +3062,14 @@ export declare class PlayaOSClient {
|
|
|
1529
3062
|
signal?: AbortSignal;
|
|
1530
3063
|
}) => Promise<{
|
|
1531
3064
|
url: string;
|
|
3065
|
+
fileName: string;
|
|
1532
3066
|
}>;
|
|
1533
3067
|
};
|
|
1534
3068
|
/** Summer-camp events + the acting member's RSVP (PLA-1270). */
|
|
1535
3069
|
readonly summerCamp: {
|
|
3070
|
+
listAttendees: (eventId: string, opts?: {
|
|
3071
|
+
signal?: AbortSignal;
|
|
3072
|
+
}) => Promise<SummerCampAttendee[]>;
|
|
1536
3073
|
listEvents: (opts?: {
|
|
1537
3074
|
signal?: AbortSignal;
|
|
1538
3075
|
}) => Promise<SummerCampEvent[]>;
|
|
@@ -1593,6 +3130,37 @@ export declare class PlayaOSClient {
|
|
|
1593
3130
|
}) => Promise<Paginated<DuesStatus>>;
|
|
1594
3131
|
};
|
|
1595
3132
|
readonly shifts: {
|
|
3133
|
+
memberAction: (payload: {
|
|
3134
|
+
action: "signup";
|
|
3135
|
+
shiftId: string;
|
|
3136
|
+
} | {
|
|
3137
|
+
action: "cancel";
|
|
3138
|
+
signupId: string;
|
|
3139
|
+
}, opts?: {
|
|
3140
|
+
signal?: AbortSignal;
|
|
3141
|
+
}) => Promise<{
|
|
3142
|
+
success: true;
|
|
3143
|
+
}>;
|
|
3144
|
+
mobile: (params: {
|
|
3145
|
+
type: "available" | "my-shifts";
|
|
3146
|
+
date: string;
|
|
3147
|
+
}, opts?: {
|
|
3148
|
+
signal?: AbortSignal;
|
|
3149
|
+
}) => Promise<MobileShifts>;
|
|
3150
|
+
memberView: (opts?: {
|
|
3151
|
+
signal?: AbortSignal;
|
|
3152
|
+
}) => Promise<MemberShiftView>;
|
|
3153
|
+
adminWorkflow: (payload: ShiftAdminWorkflow, opts?: {
|
|
3154
|
+
signal?: AbortSignal;
|
|
3155
|
+
}) => Promise<ShiftAdminWorkflowResult>;
|
|
3156
|
+
planner: (params?: {
|
|
3157
|
+
year?: number;
|
|
3158
|
+
}, opts?: {
|
|
3159
|
+
signal?: AbortSignal;
|
|
3160
|
+
}) => Promise<ShiftPlannerData>;
|
|
3161
|
+
adminOperation: (payload: ShiftAdminOperation, opts?: {
|
|
3162
|
+
signal?: AbortSignal;
|
|
3163
|
+
}) => Promise<ShiftAdminOperationResult>;
|
|
1596
3164
|
adminTypes: (opts?: {
|
|
1597
3165
|
signal?: AbortSignal;
|
|
1598
3166
|
}) => Promise<AdminShiftType[]>;
|
|
@@ -1622,6 +3190,37 @@ export declare class PlayaOSClient {
|
|
|
1622
3190
|
}) => Promise<CommitmentsListResponse>;
|
|
1623
3191
|
};
|
|
1624
3192
|
readonly payments: {
|
|
3193
|
+
adminPage: (params?: {
|
|
3194
|
+
year?: number;
|
|
3195
|
+
}, opts?: {
|
|
3196
|
+
signal?: AbortSignal;
|
|
3197
|
+
}) => Promise<AdminPaymentsPage>;
|
|
3198
|
+
adminOperation: (payload: AdminPaymentOperation, opts?: {
|
|
3199
|
+
signal?: AbortSignal;
|
|
3200
|
+
}) => Promise<AdminPaymentOperationResult>;
|
|
3201
|
+
unmatchedRefunds: (opts?: {
|
|
3202
|
+
signal?: AbortSignal;
|
|
3203
|
+
}) => Promise<UnmatchedRefund[]>;
|
|
3204
|
+
memberPayments: (id: string, opts?: {
|
|
3205
|
+
signal?: AbortSignal;
|
|
3206
|
+
}) => Promise<Array<{
|
|
3207
|
+
id: string;
|
|
3208
|
+
amount: string;
|
|
3209
|
+
paymentStatus: string | null;
|
|
3210
|
+
paymentDate: string | null;
|
|
3211
|
+
paymentMethod: string | null;
|
|
3212
|
+
}>>;
|
|
3213
|
+
adminSummary: (opts?: {
|
|
3214
|
+
signal?: AbortSignal;
|
|
3215
|
+
}) => Promise<AdminPaymentSummary>;
|
|
3216
|
+
exportMonarch: (params?: {
|
|
3217
|
+
from?: string;
|
|
3218
|
+
to?: string;
|
|
3219
|
+
}, opts?: {
|
|
3220
|
+
signal?: AbortSignal;
|
|
3221
|
+
}) => Promise<{
|
|
3222
|
+
csv: string;
|
|
3223
|
+
}>;
|
|
1625
3224
|
list: (params?: {
|
|
1626
3225
|
type?: "dues" | "payment";
|
|
1627
3226
|
memberId?: string;
|
|
@@ -1692,6 +3291,14 @@ export declare class PlayaOSClient {
|
|
|
1692
3291
|
};
|
|
1693
3292
|
/** Bookkeeping reads (PLA-1345): camp-year list + ops-binder export preview. */
|
|
1694
3293
|
readonly bookkeeping: {
|
|
3294
|
+
syncGoogleSheets: (opts?: {
|
|
3295
|
+
signal?: AbortSignal;
|
|
3296
|
+
}) => Promise<SheetsSyncResult>;
|
|
3297
|
+
adminOperation: (payload: BookkeepingAdminOperation, opts?: {
|
|
3298
|
+
signal?: AbortSignal;
|
|
3299
|
+
}) => Promise<{
|
|
3300
|
+
success: true;
|
|
3301
|
+
}>;
|
|
1695
3302
|
years: (opts?: {
|
|
1696
3303
|
signal?: AbortSignal;
|
|
1697
3304
|
}) => Promise<CampYearWithCounts[]>;
|
|
@@ -1715,6 +3322,16 @@ export declare class PlayaOSClient {
|
|
|
1715
3322
|
}) => Promise<Paginated<WebhookLog>>;
|
|
1716
3323
|
};
|
|
1717
3324
|
readonly notifications: {
|
|
3325
|
+
dispatch: (payload: {
|
|
3326
|
+
audience: "all" | "member" | "admin";
|
|
3327
|
+
title: string;
|
|
3328
|
+
body: string;
|
|
3329
|
+
}, opts?: {
|
|
3330
|
+
signal?: AbortSignal;
|
|
3331
|
+
}) => Promise<{
|
|
3332
|
+
queued: true;
|
|
3333
|
+
recipientCount: number;
|
|
3334
|
+
}>;
|
|
1718
3335
|
/** Set the acting member's notification high-water mark to now (PLA-1261). */
|
|
1719
3336
|
markSeen: (opts?: {
|
|
1720
3337
|
signal?: AbortSignal;
|
|
@@ -1731,9 +3348,73 @@ export declare class PlayaOSClient {
|
|
|
1731
3348
|
}) => Promise<NotificationLog[]>;
|
|
1732
3349
|
};
|
|
1733
3350
|
readonly documents: {
|
|
3351
|
+
memberPage: (params?: {
|
|
3352
|
+
year?: number;
|
|
3353
|
+
}, opts?: {
|
|
3354
|
+
signal?: AbortSignal;
|
|
3355
|
+
}) => Promise<MemberDocumentPage>;
|
|
3356
|
+
create: (payload: DocumentWriteInput, opts?: {
|
|
3357
|
+
signal?: AbortSignal;
|
|
3358
|
+
}) => Promise<CampDocument>;
|
|
3359
|
+
update: (id: string, payload: Partial<DocumentWriteInput>, opts?: {
|
|
3360
|
+
signal?: AbortSignal;
|
|
3361
|
+
}) => Promise<CampDocument>;
|
|
3362
|
+
delete: (id: string, opts?: {
|
|
3363
|
+
signal?: AbortSignal;
|
|
3364
|
+
}) => Promise<{
|
|
3365
|
+
id: string;
|
|
3366
|
+
deleted: true;
|
|
3367
|
+
}>;
|
|
3368
|
+
createUploadUrl: (payload: {
|
|
3369
|
+
fileName: string;
|
|
3370
|
+
contentType: string;
|
|
3371
|
+
}, opts?: {
|
|
3372
|
+
signal?: AbortSignal;
|
|
3373
|
+
}) => Promise<{
|
|
3374
|
+
uploadUrl: string;
|
|
3375
|
+
path: string;
|
|
3376
|
+
token: string;
|
|
3377
|
+
key: string;
|
|
3378
|
+
}>;
|
|
3379
|
+
sourceDownloadUrl: (payload: {
|
|
3380
|
+
filePath: string;
|
|
3381
|
+
download?: boolean;
|
|
3382
|
+
}, opts?: {
|
|
3383
|
+
signal?: AbortSignal;
|
|
3384
|
+
}) => Promise<{
|
|
3385
|
+
url: string;
|
|
3386
|
+
}>;
|
|
3387
|
+
getSections: (id: string, opts?: {
|
|
3388
|
+
signal?: AbortSignal;
|
|
3389
|
+
}) => Promise<ContractSection[]>;
|
|
3390
|
+
saveSections: (id: string, payload: {
|
|
3391
|
+
sections: Array<Omit<ContractSection, "id"> & {
|
|
3392
|
+
id?: string;
|
|
3393
|
+
}>;
|
|
3394
|
+
}, opts?: {
|
|
3395
|
+
signal?: AbortSignal;
|
|
3396
|
+
}) => Promise<ContractSection[]>;
|
|
3397
|
+
renderContract: (id: string, opts?: {
|
|
3398
|
+
signal?: AbortSignal;
|
|
3399
|
+
}) => Promise<{
|
|
3400
|
+
html: string;
|
|
3401
|
+
}>;
|
|
3402
|
+
signatureDownloadUrl: (id: string, opts?: {
|
|
3403
|
+
signal?: AbortSignal;
|
|
3404
|
+
}) => Promise<{
|
|
3405
|
+
url: string;
|
|
3406
|
+
fileName: string;
|
|
3407
|
+
}>;
|
|
3408
|
+
deleteSignature: (id: string, opts?: {
|
|
3409
|
+
signal?: AbortSignal;
|
|
3410
|
+
}) => Promise<{
|
|
3411
|
+
id: string;
|
|
3412
|
+
deleted: true;
|
|
3413
|
+
}>;
|
|
1734
3414
|
list: (params?: {
|
|
1735
3415
|
type?: string;
|
|
1736
3416
|
year?: number;
|
|
3417
|
+
activeYear?: boolean;
|
|
1737
3418
|
}, opts?: {
|
|
1738
3419
|
signal?: AbortSignal;
|
|
1739
3420
|
}) => Promise<AdminCampDocument[]>;
|
|
@@ -1753,6 +3434,11 @@ export declare class PlayaOSClient {
|
|
|
1753
3434
|
type: "checkbox" | "drawn" | "typed";
|
|
1754
3435
|
signerName?: string;
|
|
1755
3436
|
};
|
|
3437
|
+
strict?: boolean;
|
|
3438
|
+
audit?: {
|
|
3439
|
+
ipAddress?: string;
|
|
3440
|
+
userAgent?: string;
|
|
3441
|
+
};
|
|
1756
3442
|
}, opts?: {
|
|
1757
3443
|
signal?: AbortSignal;
|
|
1758
3444
|
}) => Promise<CampDocumentSignature>;
|
|
@@ -1762,6 +3448,19 @@ export declare class PlayaOSClient {
|
|
|
1762
3448
|
}) => Promise<CampDocumentDownloadUrl>;
|
|
1763
3449
|
};
|
|
1764
3450
|
readonly meetings: {
|
|
3451
|
+
/** Save the acting member's response; the date option must belong to this meeting. */
|
|
3452
|
+
rsvp: (id: string, payload: {
|
|
3453
|
+
dateOptionId: string;
|
|
3454
|
+
}, opts?: {
|
|
3455
|
+
signal?: AbortSignal;
|
|
3456
|
+
}) => Promise<{
|
|
3457
|
+
ok: true;
|
|
3458
|
+
}>;
|
|
3459
|
+
cancelRsvp: (id: string, opts?: {
|
|
3460
|
+
signal?: AbortSignal;
|
|
3461
|
+
}) => Promise<{
|
|
3462
|
+
ok: true;
|
|
3463
|
+
}>;
|
|
1765
3464
|
list: (params?: {
|
|
1766
3465
|
year?: number;
|
|
1767
3466
|
limit?: number;
|
|
@@ -1785,6 +3484,22 @@ export declare class PlayaOSClient {
|
|
|
1785
3484
|
}>;
|
|
1786
3485
|
};
|
|
1787
3486
|
readonly scholarships: {
|
|
3487
|
+
adminPage: (params?: {
|
|
3488
|
+
year?: number;
|
|
3489
|
+
}, opts?: {
|
|
3490
|
+
signal?: AbortSignal;
|
|
3491
|
+
}) => Promise<AdminScholarshipsPage>;
|
|
3492
|
+
refresh: (id: string, opts?: {
|
|
3493
|
+
signal?: AbortSignal;
|
|
3494
|
+
}) => Promise<{
|
|
3495
|
+
givebutterActive: boolean;
|
|
3496
|
+
givebutterUsed: number;
|
|
3497
|
+
}>;
|
|
3498
|
+
stats: (params?: {
|
|
3499
|
+
year?: number;
|
|
3500
|
+
}, opts?: {
|
|
3501
|
+
signal?: AbortSignal;
|
|
3502
|
+
}) => Promise<ScholarshipStats>;
|
|
1788
3503
|
/** Create a scholarship (code + Givebutter sync). Admin-only (PLA-1266). */
|
|
1789
3504
|
create: (payload: CreateScholarshipInput, opts?: {
|
|
1790
3505
|
signal?: AbortSignal;
|
|
@@ -1792,16 +3507,23 @@ export declare class PlayaOSClient {
|
|
|
1792
3507
|
/** Move a scholarship between assigned/used/expired. Admin-only (PLA-1266). */
|
|
1793
3508
|
updateStatus: (id: string, status: ScholarshipStatus, opts?: {
|
|
1794
3509
|
signal?: AbortSignal;
|
|
3510
|
+
verifyProvider?: boolean;
|
|
3511
|
+
providerManaged?: boolean;
|
|
1795
3512
|
}) => Promise<Scholarship>;
|
|
1796
3513
|
/** Delete a scholarship (deactivates its code). Admin-only (PLA-1266). */
|
|
1797
3514
|
remove: (id: string, opts?: {
|
|
1798
3515
|
signal?: AbortSignal;
|
|
3516
|
+
providerManaged?: boolean;
|
|
1799
3517
|
}) => Promise<{
|
|
1800
3518
|
id: string;
|
|
1801
3519
|
deleted: boolean;
|
|
1802
3520
|
}>;
|
|
1803
3521
|
};
|
|
1804
3522
|
readonly tickets: {
|
|
3523
|
+
/** Admin upsert by member and camp year, including members with no existing tracking row. */
|
|
3524
|
+
upsert: (memberId: string, year: number, payload: TicketUpdateInput, opts?: {
|
|
3525
|
+
signal?: AbortSignal;
|
|
3526
|
+
}) => Promise<Ticket>;
|
|
1805
3527
|
/** Admin ticket-page projection; requires ticket, vehicle-pass, and member read scopes. */
|
|
1806
3528
|
adminList: (params?: {
|
|
1807
3529
|
year?: number;
|
|
@@ -1814,12 +3536,117 @@ export declare class PlayaOSClient {
|
|
|
1814
3536
|
}) => Promise<Ticket>;
|
|
1815
3537
|
};
|
|
1816
3538
|
readonly vehiclePasses: {
|
|
3539
|
+
/** Admin upsert by member and camp year, including members with no existing tracking row. */
|
|
3540
|
+
upsert: (memberId: string, year: number, payload: VehiclePassUpdateInput, opts?: {
|
|
3541
|
+
signal?: AbortSignal;
|
|
3542
|
+
}) => Promise<VehiclePass>;
|
|
1817
3543
|
/** Update a member's vehicle-pass status. Admin-only (PLA-1266). */
|
|
1818
3544
|
update: (id: string, payload: VehiclePassUpdateInput, opts?: {
|
|
1819
3545
|
signal?: AbortSignal;
|
|
1820
3546
|
}) => Promise<VehiclePass>;
|
|
1821
3547
|
};
|
|
1822
3548
|
readonly shelters: {
|
|
3549
|
+
adminOperation: (payload: AdminShelterOperation, opts?: {
|
|
3550
|
+
signal?: AbortSignal;
|
|
3551
|
+
}) => Promise<{
|
|
3552
|
+
success: true;
|
|
3553
|
+
shelterId?: string;
|
|
3554
|
+
feesRecalculated?: boolean;
|
|
3555
|
+
}>;
|
|
3556
|
+
createForMember: (payload: OwnerShelterCreate, opts?: {
|
|
3557
|
+
signal?: AbortSignal;
|
|
3558
|
+
}) => Promise<{
|
|
3559
|
+
shelterId: string;
|
|
3560
|
+
shareUrl: string | null;
|
|
3561
|
+
}>;
|
|
3562
|
+
updateForMember: (id: string, payload: OwnerShelterPatch, opts?: {
|
|
3563
|
+
signal?: AbortSignal;
|
|
3564
|
+
}) => Promise<{
|
|
3565
|
+
updated: true;
|
|
3566
|
+
}>;
|
|
3567
|
+
deleteForMember: (id: string, opts?: {
|
|
3568
|
+
signal?: AbortSignal;
|
|
3569
|
+
}) => Promise<{
|
|
3570
|
+
shelterType: string;
|
|
3571
|
+
}>;
|
|
3572
|
+
memberPage: (params?: {
|
|
3573
|
+
year?: number;
|
|
3574
|
+
}, opts?: {
|
|
3575
|
+
signal?: AbortSignal;
|
|
3576
|
+
}) => Promise<MemberShelterPage>;
|
|
3577
|
+
searchMembers: (params: {
|
|
3578
|
+
q: string;
|
|
3579
|
+
}, opts?: {
|
|
3580
|
+
signal?: AbortSignal;
|
|
3581
|
+
}) => Promise<{
|
|
3582
|
+
data: Array<{
|
|
3583
|
+
id: string;
|
|
3584
|
+
name: string | null;
|
|
3585
|
+
}>;
|
|
3586
|
+
}>;
|
|
3587
|
+
requestJoin: (id: string, opts?: {
|
|
3588
|
+
signal?: AbortSignal;
|
|
3589
|
+
}) => Promise<{
|
|
3590
|
+
id: string;
|
|
3591
|
+
}>;
|
|
3592
|
+
inviteCandidates: (id: string, opts?: {
|
|
3593
|
+
signal?: AbortSignal;
|
|
3594
|
+
}) => Promise<{
|
|
3595
|
+
data: Array<{
|
|
3596
|
+
id: string;
|
|
3597
|
+
firstName: string | null;
|
|
3598
|
+
lastName: string | null;
|
|
3599
|
+
name: string | null;
|
|
3600
|
+
email: string | null;
|
|
3601
|
+
profilePhotoPath: string | null;
|
|
3602
|
+
}>;
|
|
3603
|
+
}>;
|
|
3604
|
+
previewJoinRequest: (token: string, opts?: {
|
|
3605
|
+
signal?: AbortSignal;
|
|
3606
|
+
}) => Promise<{
|
|
3607
|
+
shelterName: string | null;
|
|
3608
|
+
requesterName: string | null;
|
|
3609
|
+
status: string | null;
|
|
3610
|
+
}>;
|
|
3611
|
+
decideJoinRequest: (payload: {
|
|
3612
|
+
token: string;
|
|
3613
|
+
approved: boolean;
|
|
3614
|
+
}, opts?: {
|
|
3615
|
+
signal?: AbortSignal;
|
|
3616
|
+
}) => Promise<{
|
|
3617
|
+
success: true;
|
|
3618
|
+
status: "confirmed" | "declined";
|
|
3619
|
+
}>;
|
|
3620
|
+
requestPayer: (payload: {
|
|
3621
|
+
payerUserId: string;
|
|
3622
|
+
year?: number;
|
|
3623
|
+
}, opts?: {
|
|
3624
|
+
signal?: AbortSignal;
|
|
3625
|
+
}) => Promise<{
|
|
3626
|
+
existingShelterId: string | null;
|
|
3627
|
+
}>;
|
|
3628
|
+
pendingPayerRequests: (params?: {
|
|
3629
|
+
year?: number;
|
|
3630
|
+
}, opts?: {
|
|
3631
|
+
signal?: AbortSignal;
|
|
3632
|
+
}) => Promise<{
|
|
3633
|
+
data: Array<{
|
|
3634
|
+
assignmentId: string;
|
|
3635
|
+
userId: string;
|
|
3636
|
+
name: string;
|
|
3637
|
+
}>;
|
|
3638
|
+
}>;
|
|
3639
|
+
resolvePayerRequests: (payload: {
|
|
3640
|
+
shelterId: string;
|
|
3641
|
+
decisions: Array<{
|
|
3642
|
+
assignmentId: string;
|
|
3643
|
+
approved: boolean;
|
|
3644
|
+
}>;
|
|
3645
|
+
}, opts?: {
|
|
3646
|
+
signal?: AbortSignal;
|
|
3647
|
+
}) => Promise<{
|
|
3648
|
+
success: true;
|
|
3649
|
+
}>;
|
|
1823
3650
|
/** Admin-only shelter table/map projection; requires members:read and a member token. */
|
|
1824
3651
|
adminList: (params: {
|
|
1825
3652
|
year: number;
|
|
@@ -1864,6 +3691,33 @@ export declare class PlayaOSClient {
|
|
|
1864
3691
|
}>;
|
|
1865
3692
|
};
|
|
1866
3693
|
readonly bikes: {
|
|
3694
|
+
adminInterest: (params?: {
|
|
3695
|
+
year?: number;
|
|
3696
|
+
}, opts?: {
|
|
3697
|
+
signal?: AbortSignal;
|
|
3698
|
+
}) => Promise<{
|
|
3699
|
+
year: number;
|
|
3700
|
+
data: AdminBikeInterestRow[];
|
|
3701
|
+
}>;
|
|
3702
|
+
adminOperation: (payload: AdminBikeOperation, opts?: {
|
|
3703
|
+
signal?: AbortSignal;
|
|
3704
|
+
}) => Promise<AdminBikeOperationResult>;
|
|
3705
|
+
memberStatus: (params?: {
|
|
3706
|
+
year?: number;
|
|
3707
|
+
}, opts?: {
|
|
3708
|
+
signal?: AbortSignal;
|
|
3709
|
+
}) => Promise<MemberBikeStatus>;
|
|
3710
|
+
reserveForMember: (payload: {
|
|
3711
|
+
bikeTypeId: string;
|
|
3712
|
+
year?: number;
|
|
3713
|
+
}, opts?: {
|
|
3714
|
+
signal?: AbortSignal;
|
|
3715
|
+
}) => Promise<{
|
|
3716
|
+
id: string;
|
|
3717
|
+
status: string;
|
|
3718
|
+
depositAmount: number | null;
|
|
3719
|
+
waiverSigned: boolean;
|
|
3720
|
+
}>;
|
|
1867
3721
|
list: (params?: {
|
|
1868
3722
|
status?: string;
|
|
1869
3723
|
}, opts?: {
|
|
@@ -1933,6 +3787,37 @@ export declare class PlayaOSClient {
|
|
|
1933
3787
|
}) => Promise<BikeRentalInterestedNotReservedResponse>;
|
|
1934
3788
|
};
|
|
1935
3789
|
readonly tags: {
|
|
3790
|
+
create: (payload: {
|
|
3791
|
+
name: string;
|
|
3792
|
+
description?: string | null;
|
|
3793
|
+
color?: string | null;
|
|
3794
|
+
}, opts?: {
|
|
3795
|
+
signal?: AbortSignal;
|
|
3796
|
+
}) => Promise<MemberTag>;
|
|
3797
|
+
update: (id: string, payload: {
|
|
3798
|
+
name: string;
|
|
3799
|
+
description?: string | null;
|
|
3800
|
+
color?: string | null;
|
|
3801
|
+
}, opts?: {
|
|
3802
|
+
signal?: AbortSignal;
|
|
3803
|
+
}) => Promise<MemberTag>;
|
|
3804
|
+
delete: (id: string, opts?: {
|
|
3805
|
+
signal?: AbortSignal;
|
|
3806
|
+
}) => Promise<{
|
|
3807
|
+
id: string;
|
|
3808
|
+
}>;
|
|
3809
|
+
assign: (memberId: string, tagId: string, opts?: {
|
|
3810
|
+
signal?: AbortSignal;
|
|
3811
|
+
}) => Promise<{
|
|
3812
|
+
memberId: string;
|
|
3813
|
+
tagId: string;
|
|
3814
|
+
}>;
|
|
3815
|
+
remove: (memberId: string, tagId: string, opts?: {
|
|
3816
|
+
signal?: AbortSignal;
|
|
3817
|
+
}) => Promise<{
|
|
3818
|
+
memberId: string;
|
|
3819
|
+
tagId: string;
|
|
3820
|
+
}>;
|
|
1936
3821
|
list: (opts?: {
|
|
1937
3822
|
signal?: AbortSignal;
|
|
1938
3823
|
}) => Promise<MemberTagWithMemberCount[]>;
|
|
@@ -1963,6 +3848,59 @@ export declare class PlayaOSClient {
|
|
|
1963
3848
|
* and 401 on an org key alone.
|
|
1964
3849
|
*/
|
|
1965
3850
|
readonly packing: {
|
|
3851
|
+
containers: {
|
|
3852
|
+
list: (params?: {
|
|
3853
|
+
year?: number;
|
|
3854
|
+
}, opts?: {
|
|
3855
|
+
signal?: AbortSignal;
|
|
3856
|
+
}) => Promise<PackingContainerListResponse>;
|
|
3857
|
+
create: (payload: PackingContainerInput, opts?: {
|
|
3858
|
+
signal?: AbortSignal;
|
|
3859
|
+
}) => Promise<{
|
|
3860
|
+
id: string;
|
|
3861
|
+
}>;
|
|
3862
|
+
update: (id: string, payload: Partial<Omit<PackingContainerInput, "year">> & {
|
|
3863
|
+
year: number;
|
|
3864
|
+
}, opts?: {
|
|
3865
|
+
signal?: AbortSignal;
|
|
3866
|
+
}) => Promise<PackingContainer>;
|
|
3867
|
+
remove: (id: string, params: {
|
|
3868
|
+
year: number;
|
|
3869
|
+
}, opts?: {
|
|
3870
|
+
signal?: AbortSignal;
|
|
3871
|
+
}) => Promise<{
|
|
3872
|
+
ok: true;
|
|
3873
|
+
}>;
|
|
3874
|
+
};
|
|
3875
|
+
placements: {
|
|
3876
|
+
list: (params?: {
|
|
3877
|
+
year?: number;
|
|
3878
|
+
shelter?: string;
|
|
3879
|
+
filter?: "packed" | "unpacked";
|
|
3880
|
+
containerId?: string;
|
|
3881
|
+
}, opts?: {
|
|
3882
|
+
signal?: AbortSignal;
|
|
3883
|
+
}) => Promise<PackingPlacementListResponse>;
|
|
3884
|
+
place: (payload: {
|
|
3885
|
+
slug: string;
|
|
3886
|
+
containerId: string;
|
|
3887
|
+
year: number;
|
|
3888
|
+
shelter?: string;
|
|
3889
|
+
}, opts?: {
|
|
3890
|
+
signal?: AbortSignal;
|
|
3891
|
+
}) => Promise<{
|
|
3892
|
+
ok: true;
|
|
3893
|
+
}>;
|
|
3894
|
+
unpack: (payload: {
|
|
3895
|
+
slug: string;
|
|
3896
|
+
year: number;
|
|
3897
|
+
shelter?: string;
|
|
3898
|
+
}, opts?: {
|
|
3899
|
+
signal?: AbortSignal;
|
|
3900
|
+
}) => Promise<{
|
|
3901
|
+
ok: true;
|
|
3902
|
+
}>;
|
|
3903
|
+
};
|
|
1966
3904
|
/** The resolved list: curated base + camp layer + personal layer (ADR-071). */
|
|
1967
3905
|
list: (params?: {
|
|
1968
3906
|
year?: number;
|
|
@@ -2062,12 +4000,24 @@ export declare class PlayaOSClient {
|
|
|
2062
4000
|
/**
|
|
2063
4001
|
* SAP — Special Access Pass, for early/overnight vehicle arrival (PLA-1202).
|
|
2064
4002
|
* Admin/super_admin only; there is no member-facing SAP surface. Year is
|
|
2065
|
-
*
|
|
2066
|
-
* pass one.
|
|
4003
|
+
* the selected year when supplied, otherwise the org's active camp year.
|
|
2067
4004
|
*/
|
|
2068
4005
|
readonly sap: {
|
|
4006
|
+
roster: (params?: {
|
|
4007
|
+
year?: number;
|
|
4008
|
+
}, opts?: {
|
|
4009
|
+
signal?: AbortSignal;
|
|
4010
|
+
}) => Promise<Array<{
|
|
4011
|
+
id: string;
|
|
4012
|
+
name: string | null;
|
|
4013
|
+
email: string | null;
|
|
4014
|
+
role: string | null;
|
|
4015
|
+
status: string | null;
|
|
4016
|
+
buildArrivalDate: string | null;
|
|
4017
|
+
}>>;
|
|
2069
4018
|
allocation: {
|
|
2070
4019
|
get: (opts?: {
|
|
4020
|
+
year?: number;
|
|
2071
4021
|
signal?: AbortSignal;
|
|
2072
4022
|
}) => Promise<SapAllocation>;
|
|
2073
4023
|
update: (payload: UpdateSapAllocationInput, opts?: {
|
|
@@ -2075,7 +4025,21 @@ export declare class PlayaOSClient {
|
|
|
2075
4025
|
}) => Promise<SapAllocation>;
|
|
2076
4026
|
};
|
|
2077
4027
|
dayAllocations: {
|
|
4028
|
+
update: (id: string, payload: {
|
|
4029
|
+
slotsAvailable: number;
|
|
4030
|
+
notes?: string | null;
|
|
4031
|
+
}, opts?: {
|
|
4032
|
+
signal?: AbortSignal;
|
|
4033
|
+
}) => Promise<{
|
|
4034
|
+
ok: true;
|
|
4035
|
+
}>;
|
|
4036
|
+
remove: (id: string, opts?: {
|
|
4037
|
+
signal?: AbortSignal;
|
|
4038
|
+
}) => Promise<{
|
|
4039
|
+
ok: true;
|
|
4040
|
+
}>;
|
|
2078
4041
|
list: (opts?: {
|
|
4042
|
+
year?: number;
|
|
2079
4043
|
signal?: AbortSignal;
|
|
2080
4044
|
}) => Promise<{
|
|
2081
4045
|
items: SapDayAllocation[];
|
|
@@ -2087,6 +4051,7 @@ export declare class PlayaOSClient {
|
|
|
2087
4051
|
};
|
|
2088
4052
|
assignments: {
|
|
2089
4053
|
list: (opts?: {
|
|
4054
|
+
year?: number;
|
|
2090
4055
|
signal?: AbortSignal;
|
|
2091
4056
|
}) => Promise<{
|
|
2092
4057
|
items: SapAssignment[];
|
|
@@ -2105,6 +4070,14 @@ export declare class PlayaOSClient {
|
|
|
2105
4070
|
};
|
|
2106
4071
|
};
|
|
2107
4072
|
readonly importantDates: {
|
|
4073
|
+
adminList: (opts?: {
|
|
4074
|
+
signal?: AbortSignal;
|
|
4075
|
+
}) => Promise<AdminImportantDate[]>;
|
|
4076
|
+
adminOperation: (payload: AdminImportantDateOperation, opts?: {
|
|
4077
|
+
signal?: AbortSignal;
|
|
4078
|
+
}) => Promise<{
|
|
4079
|
+
success: true;
|
|
4080
|
+
}>;
|
|
2108
4081
|
/** Visible camp dates (PLA-1268), optionally pinned to a year. */
|
|
2109
4082
|
list: (params?: {
|
|
2110
4083
|
year?: number;
|
|
@@ -2113,6 +4086,103 @@ export declare class PlayaOSClient {
|
|
|
2113
4086
|
}) => Promise<ImportantDate[]>;
|
|
2114
4087
|
};
|
|
2115
4088
|
readonly emails: {
|
|
4089
|
+
recipients: (payload: EmailRecipientFilter, opts?: {
|
|
4090
|
+
signal?: AbortSignal;
|
|
4091
|
+
}) => Promise<EmailRecipient[]>;
|
|
4092
|
+
composerOptions: (params?: {
|
|
4093
|
+
q?: string;
|
|
4094
|
+
}, opts?: {
|
|
4095
|
+
signal?: AbortSignal;
|
|
4096
|
+
}) => Promise<EmailComposerOptions>;
|
|
4097
|
+
broadcast: (payload: {
|
|
4098
|
+
subject: string;
|
|
4099
|
+
body: string;
|
|
4100
|
+
filter?: EmailRecipientFilter;
|
|
4101
|
+
segmentKey?: EmailSegmentKey;
|
|
4102
|
+
}, opts?: {
|
|
4103
|
+
signal?: AbortSignal;
|
|
4104
|
+
}) => Promise<{
|
|
4105
|
+
success: true;
|
|
4106
|
+
sent: number;
|
|
4107
|
+
failed: number;
|
|
4108
|
+
total: number;
|
|
4109
|
+
}>;
|
|
4110
|
+
history: (opts?: {
|
|
4111
|
+
signal?: AbortSignal;
|
|
4112
|
+
}) => Promise<{
|
|
4113
|
+
broadcasts: {
|
|
4114
|
+
id: string;
|
|
4115
|
+
subject: string;
|
|
4116
|
+
recipientCount: number | null;
|
|
4117
|
+
sentAt: string | null;
|
|
4118
|
+
senderName: string | null;
|
|
4119
|
+
}[];
|
|
4120
|
+
}>;
|
|
4121
|
+
deliveryPage: (params?: {
|
|
4122
|
+
tab?: "failed" | "queued" | "succeeded" | "retried";
|
|
4123
|
+
page?: number;
|
|
4124
|
+
}, opts?: {
|
|
4125
|
+
signal?: AbortSignal;
|
|
4126
|
+
}) => Promise<EmailDeliveryPage>;
|
|
4127
|
+
/**
|
|
4128
|
+
* Make one failed retry row due now; the retry executor sends it (nothing is sent by this call).
|
|
4129
|
+
* Permanent failures are refused with 400.
|
|
4130
|
+
*/
|
|
4131
|
+
retryLog: (id: string, opts?: {
|
|
4132
|
+
signal?: AbortSignal;
|
|
4133
|
+
}) => Promise<{
|
|
4134
|
+
success: true;
|
|
4135
|
+
}>;
|
|
4136
|
+
/** Run this camp's due retry rows through the retry executor now (about 30s budget). */
|
|
4137
|
+
retryFailed: (opts?: {
|
|
4138
|
+
signal?: AbortSignal;
|
|
4139
|
+
}) => Promise<{
|
|
4140
|
+
retried: number;
|
|
4141
|
+
skipped: number;
|
|
4142
|
+
}>;
|
|
4143
|
+
dismissLog: (id: string, opts?: {
|
|
4144
|
+
signal?: AbortSignal;
|
|
4145
|
+
}) => Promise<{
|
|
4146
|
+
success: true;
|
|
4147
|
+
}>;
|
|
4148
|
+
cmsPreview: (id: string, opts?: {
|
|
4149
|
+
signal?: AbortSignal;
|
|
4150
|
+
}) => Promise<EmailCmsPreview>;
|
|
4151
|
+
setupContacts: (opts?: {
|
|
4152
|
+
signal?: AbortSignal;
|
|
4153
|
+
}) => Promise<{
|
|
4154
|
+
segmentIds: Record<string, string>;
|
|
4155
|
+
failedSegments: string[];
|
|
4156
|
+
}>;
|
|
4157
|
+
/**
|
|
4158
|
+
* Sync this camp's members into its own Resend account. Each call works for a bounded time; when
|
|
4159
|
+
* it stops at that limit it returns `skipped: true` and a `cursor`. Pass that cursor back as
|
|
4160
|
+
* `opts.cursor` to resume after the last processed member, and repeat until `cursor` is null
|
|
4161
|
+
* (sync complete). `synced`/`failed` count the one call. Fails with 400 until
|
|
4162
|
+
* {@link setupContacts} has run, or on an invalid cursor.
|
|
4163
|
+
*/
|
|
4164
|
+
syncContacts: (opts?: {
|
|
4165
|
+
cursor?: string | null;
|
|
4166
|
+
signal?: AbortSignal;
|
|
4167
|
+
}) => Promise<ContactSyncResponse>;
|
|
4168
|
+
/**
|
|
4169
|
+
* Release an interview invitation stuck behind an uncertain or abandoned delivery claim, so the
|
|
4170
|
+
* next invite attempt sends again. Check the email provider first. Accepted deliveries are never
|
|
4171
|
+
* released.
|
|
4172
|
+
*/
|
|
4173
|
+
releaseInvitationDelivery: (applicationId: string, opts?: {
|
|
4174
|
+
signal?: AbortSignal;
|
|
4175
|
+
}) => Promise<{
|
|
4176
|
+
released: number;
|
|
4177
|
+
}>;
|
|
4178
|
+
syncTemplates: (opts?: {
|
|
4179
|
+
signal?: AbortSignal;
|
|
4180
|
+
}) => Promise<{
|
|
4181
|
+
id: string;
|
|
4182
|
+
name: string;
|
|
4183
|
+
previewId: string;
|
|
4184
|
+
action: "created" | "updated";
|
|
4185
|
+
}[]>;
|
|
2116
4186
|
/** Admin template registry (PLA-1265). */
|
|
2117
4187
|
listTemplates: (opts?: {
|
|
2118
4188
|
signal?: AbortSignal;
|
|
@@ -2134,6 +4204,23 @@ export declare class PlayaOSClient {
|
|
|
2134
4204
|
}) => Promise<EmailRetryListResponse>;
|
|
2135
4205
|
};
|
|
2136
4206
|
readonly onboarding: {
|
|
4207
|
+
createCustomItem: (payload: {
|
|
4208
|
+
categoryId: string;
|
|
4209
|
+
name: string;
|
|
4210
|
+
year: number;
|
|
4211
|
+
}, opts?: {
|
|
4212
|
+
signal?: AbortSignal;
|
|
4213
|
+
}) => Promise<MemberCustomChecklistItem>;
|
|
4214
|
+
updateCustomItem: (id: string, payload: {
|
|
4215
|
+
completed: boolean;
|
|
4216
|
+
}, opts?: {
|
|
4217
|
+
signal?: AbortSignal;
|
|
4218
|
+
}) => Promise<MemberCustomChecklistItem>;
|
|
4219
|
+
deleteCustomItem: (id: string, opts?: {
|
|
4220
|
+
signal?: AbortSignal;
|
|
4221
|
+
}) => Promise<{
|
|
4222
|
+
success: true;
|
|
4223
|
+
}>;
|
|
2137
4224
|
/** The camp's onboarding checklist template (PLA-1340 adds `priority`). */
|
|
2138
4225
|
checklist: (params?: PaginationParams, opts?: {
|
|
2139
4226
|
signal?: AbortSignal;
|
|
@@ -2161,7 +4248,69 @@ export declare class PlayaOSClient {
|
|
|
2161
4248
|
}) => Promise<OnboardingProgress>;
|
|
2162
4249
|
};
|
|
2163
4250
|
readonly admin: {
|
|
4251
|
+
accounts: {
|
|
4252
|
+
page: (opts?: {
|
|
4253
|
+
signal?: AbortSignal;
|
|
4254
|
+
}) => Promise<AdminAccountsPage>;
|
|
4255
|
+
operate: (payload: AdminAccountsOperation, opts?: {
|
|
4256
|
+
signal?: AbortSignal;
|
|
4257
|
+
}) => Promise<{
|
|
4258
|
+
success: true;
|
|
4259
|
+
}>;
|
|
4260
|
+
};
|
|
4261
|
+
webhooks: {
|
|
4262
|
+
page: (opts?: {
|
|
4263
|
+
signal?: AbortSignal;
|
|
4264
|
+
}) => Promise<AdminWebhooksPage>;
|
|
4265
|
+
candidates: (payer: {
|
|
4266
|
+
firstName: string | null;
|
|
4267
|
+
lastName: string | null;
|
|
4268
|
+
phone: string | null;
|
|
4269
|
+
}, opts?: {
|
|
4270
|
+
signal?: AbortSignal;
|
|
4271
|
+
}) => Promise<WebhookCandidate[]>;
|
|
4272
|
+
retry: (id: string, opts?: {
|
|
4273
|
+
signal?: AbortSignal;
|
|
4274
|
+
}) => Promise<{
|
|
4275
|
+
queued: true;
|
|
4276
|
+
}>;
|
|
4277
|
+
match: (id: string, selection: WebhookMatchSelection, opts?: {
|
|
4278
|
+
signal?: AbortSignal;
|
|
4279
|
+
}) => Promise<{
|
|
4280
|
+
queued: true;
|
|
4281
|
+
}>;
|
|
4282
|
+
retryFailed: (opts?: {
|
|
4283
|
+
signal?: AbortSignal;
|
|
4284
|
+
}) => Promise<{
|
|
4285
|
+
queued: number;
|
|
4286
|
+
failed: number;
|
|
4287
|
+
}>;
|
|
4288
|
+
};
|
|
2164
4289
|
applications: {
|
|
4290
|
+
workflow: (id: string, payload: ApplicationWorkflowInput, opts?: {
|
|
4291
|
+
signal?: AbortSignal;
|
|
4292
|
+
}) => Promise<{
|
|
4293
|
+
applicationId: string;
|
|
4294
|
+
}>;
|
|
4295
|
+
workflowOptions: (params?: {
|
|
4296
|
+
q?: string;
|
|
4297
|
+
excludeUserId?: string;
|
|
4298
|
+
}, opts?: {
|
|
4299
|
+
signal?: AbortSignal;
|
|
4300
|
+
}) => Promise<ApplicationWorkflowOptions>;
|
|
4301
|
+
activity: (id: string, opts?: {
|
|
4302
|
+
signal?: AbortSignal;
|
|
4303
|
+
}) => Promise<{
|
|
4304
|
+
data: ApplicationActivityItem[];
|
|
4305
|
+
}>;
|
|
4306
|
+
sendMessage: (id: string, payload: {
|
|
4307
|
+
subject: string;
|
|
4308
|
+
body: string;
|
|
4309
|
+
}, opts?: {
|
|
4310
|
+
signal?: AbortSignal;
|
|
4311
|
+
}) => Promise<{
|
|
4312
|
+
success: true;
|
|
4313
|
+
}>;
|
|
2165
4314
|
/**
|
|
2166
4315
|
* Admin-scoped application list (PLA-1322): the member-safe shape plus the
|
|
2167
4316
|
* applicant phone, referrer name and admin-managed metadata, with the same
|
|
@@ -2518,5 +4667,5 @@ interface PublicMarketplaceClient {
|
|
|
2518
4667
|
}
|
|
2519
4668
|
export declare function createPublicMarketplaceClient(opts: PublicMarketplaceClientOptions): PublicMarketplaceClient;
|
|
2520
4669
|
//#endregion
|
|
2521
|
-
export type { AdminBikeInventory, AdminBikeRental, AdminBikeType, AdminCampDocument, AdminDocumentSignature, AdminNotificationPrefs, AdminShelter, AdminShift, AdminShiftType, AdminTicketRow, Application, ApplicationAdmin, ApplicationAnnotations, ApplicationCapacity, ApplicationCreatePayload, ApplicationCreateResponse, ApplicationNote, ApplicationScore, ApplicationStatus, ApplicationTransitionPayload, ApplicationTransitionResponse, BikeRentalCatalogItem, BikeRentalCatalogResponse, BikeRentalDeliveryMode, BikeRentalFramePreference, BikeRentalInterestedMember, BikeRentalInterestedNotReservedResponse, BikeRentalRequestInput, BikeRentalRequestResult, BikeRentalReservation, BikeRentalReservationListResponse, BikeRentalWaiver, BookkeepingExportPreview, BuildStrikeReportRow, CampDocumentDownloadUrl, CampDocumentSignature, CampDocumentSignaturesResponse, CampYearWithCounts, Commitment, CommitmentDataType, CommitmentValue, CommitmentsListResponse, CreateMeetingInput, CreateSapAssignmentInput, CreateScholarshipInput, DailyHeadcount, DashboardMetrics, DuesStatus, DuesSummaryRow, DuesTypePayor, EmailLog, EmailRetry, EmailRetryCount, EmailRetryListResponse, EmailTemplate, ExchangeParams, ExchangeResult, ImageUploadTarget, ImportantDate, ListingImage, LogisticsBreakdowns, LogisticsSummary, MarketplaceFlagReason, Meeting, MeetingDateOption, MeetingListResponse, MeetingRsvp, Member, MemberCreatePayload, MemberCreateResponse, MemberCustomChecklistItem, MemberDeactivateResponse, MemberDevice, MemberDuesStatus, MemberPreferences, MemberRole, MemberTag, MemberTagAssignment, MemberTagWithMemberCount, MemberUpdatePayload, MemberUpdateResponse, NewListingInput, OnboardingChecklistCategory, OnboardingChecklistItem, OnboardingProgress, OrgConfig, PackingCampAdminItem, PackingCampAdminList, PackingCampCategory, PackingCampCategoryInput, PackingCampItem, PackingItem, PackingItemStatus, PackingLayer, PackingListResponse, PackingPersonalItem, PaymentPageResponse, PublicMarketplaceClient, PublicMarketplaceClientOptions, RvAmperageTotal, SapAllocation, SapAssignment, SapDayAllocation, Scholarship, ScholarshipStatus, ShelterTypeDistribution, Shift, ShiftSignup, ShiftType, Ticket, TicketStatus, TicketUpdateInput, TshirtSizeTotal, UnsureDateMember, UpdateSapAllocationInput, UpdateSapAssignmentInput, UpsertPackingCampItemInput, UpsertSapDayAllocationInput, VehiclePass, VehiclePassStatus, VehiclePassUpdateInput, Waiver, WaiverContent, WaiverSection, WaiverSignPayload, WaiverSignResponse, WaiverStatus, WebhookLog };
|
|
4670
|
+
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, 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, 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, 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 };
|
|
2522
4671
|
//# sourceMappingURL=index.d.ts.map
|