@peektravel/app-utilities 0.9.1 → 0.9.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -1
- package/dist/index.cjs +627 -80
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +350 -5
- package/dist/index.d.ts +350 -5
- package/dist/index.js +627 -80
- package/dist/index.js.map +1 -1
- package/docs/webhooks.md +1 -1
- package/llms.txt +36 -4
- package/package.json +1 -1
package/dist/index.d.cts
CHANGED
|
@@ -748,6 +748,11 @@ interface Booking {
|
|
|
748
748
|
portalUrl: string | null;
|
|
749
749
|
/** Operator notes on the booking (`""` when none). */
|
|
750
750
|
notes: string;
|
|
751
|
+
/**
|
|
752
|
+
* Operator-facing custom status set on the booking (via
|
|
753
|
+
* {@link BookingService.updateCustomStatus}), or `null` when none is set.
|
|
754
|
+
*/
|
|
755
|
+
customStatus: string | null;
|
|
751
756
|
/** Total booking value, human-formatted (e.g. `"$75.00"`). `""` if absent. */
|
|
752
757
|
valueDisplay: string;
|
|
753
758
|
/** Total booking value as a numeric string. `""` if absent. */
|
|
@@ -899,6 +904,15 @@ interface CreateBookingInput {
|
|
|
899
904
|
guest: CreateBookingGuest;
|
|
900
905
|
/** Operator notes to attach. */
|
|
901
906
|
operatorNotes?: string;
|
|
907
|
+
/**
|
|
908
|
+
* Total list price for the booking, as a positive number string (commas
|
|
909
|
+
* allowed — `"100"`, `"1,000"`, `"10.00"`). When set, it is split evenly
|
|
910
|
+
* across the booking's tickets (each of the first n-1 tickets gets
|
|
911
|
+
* `floor(total / n)`, the last ticket the remainder) and sent per ticket in
|
|
912
|
+
* the activity's currency (falling back to `"USD"`). Omit to let Peek price
|
|
913
|
+
* the tickets from the activity's configured pricing.
|
|
914
|
+
*/
|
|
915
|
+
listPrice?: string;
|
|
902
916
|
/**
|
|
903
917
|
* Answers to the activity's custom questions. When non-empty, the activity's
|
|
904
918
|
* custom questions are fetched and each answer is validated/resolved before
|
|
@@ -914,6 +928,16 @@ interface CreateBookingInput {
|
|
|
914
928
|
* Default: `false`.
|
|
915
929
|
*/
|
|
916
930
|
requireRequiredQuestions?: boolean;
|
|
931
|
+
/**
|
|
932
|
+
* When `true`, a `customQuestionAnswers` entry whose `questionIdOrText` is a
|
|
933
|
+
* `cq_…` id is accepted even if that id is **not** among the activity's custom
|
|
934
|
+
* questions — the check that a question id must match the activity's list is
|
|
935
|
+
* skipped, and the answer is sent as-is (as a text answer). Entries given by
|
|
936
|
+
* question **name** are unaffected: they still must match a question, so the
|
|
937
|
+
* activity's questions are fetched only when a by-name answer (or
|
|
938
|
+
* `requireRequiredQuestions`) needs them. Default: `false`.
|
|
939
|
+
*/
|
|
940
|
+
acceptAllCustomQuestionIds?: boolean;
|
|
917
941
|
/** Suppress the customer confirmation email. Default: false. */
|
|
918
942
|
skipCustomerEmail?: boolean;
|
|
919
943
|
/** Clone the quote from an existing order. */
|
|
@@ -943,6 +967,206 @@ interface CreatedBooking {
|
|
|
943
967
|
transactionId?: string;
|
|
944
968
|
}
|
|
945
969
|
|
|
970
|
+
/**
|
|
971
|
+
* The clean, transport-agnostic data model for a booking's custom-field
|
|
972
|
+
* metadata (the booking's `fieldResponses`).
|
|
973
|
+
*
|
|
974
|
+
* Each {@link MetaData} entry flattens the field definition (id/name/slug/type),
|
|
975
|
+
* its prompt (label/hint/required), and the response `refid`, and carries a
|
|
976
|
+
* single typed {@link MetaDataValue} — a discriminated union (keyed by `kind`)
|
|
977
|
+
* mirroring the gateway's `FieldResponseValue` variants, so exactly one shape is
|
|
978
|
+
* present per entry and consumers narrow on `kind`.
|
|
979
|
+
*/
|
|
980
|
+
/** Barcode symbology reported on a `kind: "barcode"` metadata value. */
|
|
981
|
+
type MetaDataBarcodeType = "BARCODE_CODE128" | "BARCODE_CODE39" | "DATA_MATRIX" | "EAN_13" | "ITF" | "QR_CODE" | "TEXT" | "UPC";
|
|
982
|
+
/** Time unit reported on a `kind: "duration"` metadata value. */
|
|
983
|
+
type MetaDataDurationUnit = "SECONDS" | "MINUTES" | "HOURS" | "DAYS" | "WEEKS" | "MONTHS" | "YEARS";
|
|
984
|
+
/** Mass unit reported on a `kind: "weight"` metadata value. */
|
|
985
|
+
type MetaDataWeightUnit = "KILOGRAM" | "POUND" | "STONE";
|
|
986
|
+
/** Volume unit reported on a `kind: "volume"` metadata value. */
|
|
987
|
+
type MetaDataVolumeUnit = "GALLON";
|
|
988
|
+
/**
|
|
989
|
+
* A booking custom-field response value — a discriminated union keyed by `kind`,
|
|
990
|
+
* one variant per gateway `…FieldResponseValue` type. Numeric `Int` values are
|
|
991
|
+
* `number`; `Decimal` values are kept as strings to avoid float-precision loss;
|
|
992
|
+
* `Date`/`Time` values are ISO strings.
|
|
993
|
+
*
|
|
994
|
+
* Every variant also carries a `displayValue` — a human-readable, display-safe
|
|
995
|
+
* string rendering of the value (empty when the underlying value is absent). The
|
|
996
|
+
* `html` variant's `displayValue` is HTML-escaped so it is safe to render as
|
|
997
|
+
* text.
|
|
998
|
+
*/
|
|
999
|
+
type MetaDataValue = {
|
|
1000
|
+
kind: "age";
|
|
1001
|
+
age: number;
|
|
1002
|
+
displayValue: string;
|
|
1003
|
+
} | {
|
|
1004
|
+
kind: "attachment";
|
|
1005
|
+
attachmentUrl: string;
|
|
1006
|
+
mime: string | null;
|
|
1007
|
+
name: string | null;
|
|
1008
|
+
size: number | null;
|
|
1009
|
+
displayValue: string;
|
|
1010
|
+
} | {
|
|
1011
|
+
kind: "barcode";
|
|
1012
|
+
barcodeType: MetaDataBarcodeType | null;
|
|
1013
|
+
barcodeValue: string;
|
|
1014
|
+
displayValue: string;
|
|
1015
|
+
} | {
|
|
1016
|
+
kind: "boolean";
|
|
1017
|
+
boolean: boolean;
|
|
1018
|
+
displayValue: string;
|
|
1019
|
+
} | {
|
|
1020
|
+
kind: "checkbox";
|
|
1021
|
+
isChecked: boolean;
|
|
1022
|
+
displayValue: string;
|
|
1023
|
+
} | {
|
|
1024
|
+
kind: "currency";
|
|
1025
|
+
currency: string;
|
|
1026
|
+
displayValue: string;
|
|
1027
|
+
} | {
|
|
1028
|
+
kind: "date";
|
|
1029
|
+
date: string;
|
|
1030
|
+
displayValue: string;
|
|
1031
|
+
} | {
|
|
1032
|
+
kind: "decimal";
|
|
1033
|
+
decimal: string | null;
|
|
1034
|
+
displayValue: string;
|
|
1035
|
+
} | {
|
|
1036
|
+
kind: "duration";
|
|
1037
|
+
amount: number;
|
|
1038
|
+
unit: MetaDataDurationUnit | null;
|
|
1039
|
+
displayValue: string;
|
|
1040
|
+
} | {
|
|
1041
|
+
kind: "email";
|
|
1042
|
+
email: string | null;
|
|
1043
|
+
displayValue: string;
|
|
1044
|
+
} | {
|
|
1045
|
+
kind: "guest";
|
|
1046
|
+
name: string | null;
|
|
1047
|
+
email: string | null;
|
|
1048
|
+
dateOfBirth: string | null;
|
|
1049
|
+
notes: string | null;
|
|
1050
|
+
waiverSigned: boolean | null;
|
|
1051
|
+
displayValue: string;
|
|
1052
|
+
} | {
|
|
1053
|
+
kind: "html";
|
|
1054
|
+
html: string;
|
|
1055
|
+
displayValue: string;
|
|
1056
|
+
} | {
|
|
1057
|
+
kind: "imageUrl";
|
|
1058
|
+
imageUrl: string;
|
|
1059
|
+
displayValue: string;
|
|
1060
|
+
} | {
|
|
1061
|
+
kind: "integer";
|
|
1062
|
+
integer: number;
|
|
1063
|
+
displayValue: string;
|
|
1064
|
+
} | {
|
|
1065
|
+
kind: "location";
|
|
1066
|
+
country: string | null;
|
|
1067
|
+
county: string | null;
|
|
1068
|
+
locality: string | null;
|
|
1069
|
+
postalCode: string | null;
|
|
1070
|
+
region: string | null;
|
|
1071
|
+
streetAddress: string | null;
|
|
1072
|
+
displayValue: string;
|
|
1073
|
+
} | {
|
|
1074
|
+
kind: "longText";
|
|
1075
|
+
longText: string;
|
|
1076
|
+
displayValue: string;
|
|
1077
|
+
} | {
|
|
1078
|
+
kind: "meta";
|
|
1079
|
+
meta: unknown;
|
|
1080
|
+
displayValue: string;
|
|
1081
|
+
} | {
|
|
1082
|
+
kind: "percent";
|
|
1083
|
+
percent: string | null;
|
|
1084
|
+
displayValue: string;
|
|
1085
|
+
} | {
|
|
1086
|
+
kind: "phone";
|
|
1087
|
+
phone: string;
|
|
1088
|
+
displayValue: string;
|
|
1089
|
+
} | {
|
|
1090
|
+
kind: "shortText";
|
|
1091
|
+
shortText: string;
|
|
1092
|
+
displayValue: string;
|
|
1093
|
+
} | {
|
|
1094
|
+
kind: "time";
|
|
1095
|
+
time: string;
|
|
1096
|
+
displayValue: string;
|
|
1097
|
+
} | {
|
|
1098
|
+
kind: "url";
|
|
1099
|
+
url: string | null;
|
|
1100
|
+
displayValue: string;
|
|
1101
|
+
} | {
|
|
1102
|
+
kind: "volume";
|
|
1103
|
+
amount: string;
|
|
1104
|
+
unit: MetaDataVolumeUnit | null;
|
|
1105
|
+
displayValue: string;
|
|
1106
|
+
} | {
|
|
1107
|
+
kind: "weight";
|
|
1108
|
+
amount: string;
|
|
1109
|
+
unit: MetaDataWeightUnit | null;
|
|
1110
|
+
displayValue: string;
|
|
1111
|
+
};
|
|
1112
|
+
/** A single booking custom-field response (one `fieldResponse`). */
|
|
1113
|
+
interface MetaData {
|
|
1114
|
+
/** Field definition id. */
|
|
1115
|
+
id: string;
|
|
1116
|
+
/** Field name (human label). */
|
|
1117
|
+
name: string;
|
|
1118
|
+
/**
|
|
1119
|
+
* Field slug. When an `integrator` filter is applied, the matched
|
|
1120
|
+
* `integrator:<integrator>:` prefix is stripped off (e.g.
|
|
1121
|
+
* `integrator:bob:booking_url` → `booking_url`).
|
|
1122
|
+
*/
|
|
1123
|
+
slug: string;
|
|
1124
|
+
/** Raw field type reported by the gateway (kept as a string). */
|
|
1125
|
+
type: string;
|
|
1126
|
+
/** Prompt label shown for the field, or `null` when the field has no prompt. */
|
|
1127
|
+
prompt: string | null;
|
|
1128
|
+
/** Prompt hint text, or `null`. */
|
|
1129
|
+
promptHint: string | null;
|
|
1130
|
+
/** Whether the field is required (`false` when the field has no prompt). */
|
|
1131
|
+
isRequired: boolean;
|
|
1132
|
+
/** The response's reference id. */
|
|
1133
|
+
refid: string;
|
|
1134
|
+
/**
|
|
1135
|
+
* The typed response value, or `null` when absent or of an unrecognized
|
|
1136
|
+
* (future) variant.
|
|
1137
|
+
*/
|
|
1138
|
+
value: MetaDataValue | null;
|
|
1139
|
+
}
|
|
1140
|
+
/** A guest entry for `BookingService.setMetaDataGuest`. */
|
|
1141
|
+
interface SetMetaDataGuestInput {
|
|
1142
|
+
/** Guest name (required). */
|
|
1143
|
+
name: string;
|
|
1144
|
+
/** Guest email (required). */
|
|
1145
|
+
email: string;
|
|
1146
|
+
/** Date of birth as an ISO date (e.g. `"2010-06-21"`). */
|
|
1147
|
+
dateOfBirth?: string;
|
|
1148
|
+
/** Whether the guest signed the waiver. */
|
|
1149
|
+
waiverSigned?: boolean;
|
|
1150
|
+
/** Free-text notes. */
|
|
1151
|
+
notes?: string;
|
|
1152
|
+
}
|
|
1153
|
+
/** An attachment entry for `BookingService.setMetaDataAttachment`. */
|
|
1154
|
+
interface SetMetaDataAttachmentInput {
|
|
1155
|
+
/** Display name for the attachment (required). */
|
|
1156
|
+
name: string;
|
|
1157
|
+
/** URL of the attachment (required). */
|
|
1158
|
+
attachmentUrl: string;
|
|
1159
|
+
}
|
|
1160
|
+
/** The result of a `setMetaData…` write. */
|
|
1161
|
+
interface SetMetaDataResult {
|
|
1162
|
+
/** Whether the gateway reported the upsert succeeded. */
|
|
1163
|
+
success: boolean;
|
|
1164
|
+
/** The booking id echoed back (falls back to the requested id). */
|
|
1165
|
+
bookingId: string;
|
|
1166
|
+
/** The gateway's success or error message (`""` when none). */
|
|
1167
|
+
message: string;
|
|
1168
|
+
}
|
|
1169
|
+
|
|
946
1170
|
/**
|
|
947
1171
|
* The clean data model for a booking's payments on file.
|
|
948
1172
|
*/
|
|
@@ -1119,6 +1343,12 @@ interface BookingServiceOptions {
|
|
|
1119
1343
|
pageSize?: number;
|
|
1120
1344
|
/** Cross-cutting access options (PII exposure). Default: PII off. */
|
|
1121
1345
|
accessOptions?: AccessOptions;
|
|
1346
|
+
/**
|
|
1347
|
+
* Integrator id used to scope `getMetaData` results — only fields whose slug
|
|
1348
|
+
* starts with `integrator:<integrator>:` are returned. Defaults to `""` (set
|
|
1349
|
+
* by the access service to the install's issuer).
|
|
1350
|
+
*/
|
|
1351
|
+
integrator?: string;
|
|
1122
1352
|
}
|
|
1123
1353
|
/** Dependencies the {@link BookingService} composes for add-on resolution. */
|
|
1124
1354
|
interface BookingServiceDeps {
|
|
@@ -1142,6 +1372,8 @@ declare class BookingService {
|
|
|
1142
1372
|
private readonly pageSize;
|
|
1143
1373
|
/** Whether customer PII is requested and payment operations are allowed. */
|
|
1144
1374
|
private readonly fullCustomerAccess;
|
|
1375
|
+
/** Integrator id scoping `getMetaData` results. */
|
|
1376
|
+
private readonly integrator;
|
|
1145
1377
|
constructor(client: GraphQLClient, deps: BookingServiceDeps, options?: BookingServiceOptions);
|
|
1146
1378
|
/**
|
|
1147
1379
|
* Throws a {@link PiiAccessDisabledError} for `operation` when this service was
|
|
@@ -1171,6 +1403,51 @@ declare class BookingService {
|
|
|
1171
1403
|
searchByTimeslot(timeslotId: string, options?: BookingReadOptions): Promise<Booking[]>;
|
|
1172
1404
|
/** Returns the guests on a booking (primary guest included). */
|
|
1173
1405
|
getGuests(bookingId: string): Promise<Guest[]>;
|
|
1406
|
+
/**
|
|
1407
|
+
* Returns a booking's custom-field metadata (its `fieldResponses`), scoped to
|
|
1408
|
+
* this service's integrator. Only fields whose slug starts with
|
|
1409
|
+
* `integrator:<integrator>:` are returned, and that prefix is stripped from
|
|
1410
|
+
* each returned `slug`. Returns `[]` when the booking is not found or has no
|
|
1411
|
+
* matching fields.
|
|
1412
|
+
*
|
|
1413
|
+
* @example
|
|
1414
|
+
* ```ts
|
|
1415
|
+
* const meta = await peek.getBookingService().getMetaData("b_abc123");
|
|
1416
|
+
* for (const field of meta) {
|
|
1417
|
+
* if (field.value?.kind === "url") console.log(field.slug, field.value.url);
|
|
1418
|
+
* }
|
|
1419
|
+
* ```
|
|
1420
|
+
*/
|
|
1421
|
+
getMetaData(bookingId: string): Promise<MetaData[]>;
|
|
1422
|
+
/**
|
|
1423
|
+
* Sets the booking's `guest` metadata field. Each guest requires a `name` and
|
|
1424
|
+
* `email`; `dateOfBirth`/`waiverSigned`/`notes` are optional.
|
|
1425
|
+
*/
|
|
1426
|
+
setMetaDataGuest(bookingId: string, guests: SetMetaDataGuestInput[]): Promise<SetMetaDataResult>;
|
|
1427
|
+
/**
|
|
1428
|
+
* Sets the booking's `attachment` metadata field. Each attachment requires a
|
|
1429
|
+
* `name` and `attachmentUrl`.
|
|
1430
|
+
*/
|
|
1431
|
+
setMetaDataAttachment(bookingId: string, attachments: SetMetaDataAttachmentInput[]): Promise<SetMetaDataResult>;
|
|
1432
|
+
/** Sets the booking's `manifest_url` metadata field. */
|
|
1433
|
+
setMetaDataManifestUrl(bookingId: string, url: string): Promise<SetMetaDataResult>;
|
|
1434
|
+
/** Sets the booking's `reservation_id` metadata field. */
|
|
1435
|
+
setMetaDataReservationId(bookingId: string, reservationId: string): Promise<SetMetaDataResult>;
|
|
1436
|
+
/** Sets the booking's `booking_status` metadata field. */
|
|
1437
|
+
setMetaDataBookingStatus(bookingId: string, status: string): Promise<SetMetaDataResult>;
|
|
1438
|
+
/** Sets the booking's `assigned_product` metadata field. */
|
|
1439
|
+
setMetaDataAssignedProduct(bookingId: string, productName: string): Promise<SetMetaDataResult>;
|
|
1440
|
+
/** Sets the booking's `assigned_employee` metadata field. */
|
|
1441
|
+
setMetaDataAssignedEmployee(bookingId: string, employeeName: string): Promise<SetMetaDataResult>;
|
|
1442
|
+
/** Sets the booking's `insurance_purchased` metadata field. */
|
|
1443
|
+
setMetaDataInsurancePurchased(bookingId: string, insurancePurchased: boolean): Promise<SetMetaDataResult>;
|
|
1444
|
+
/** Validates a non-empty `shortText` value and upserts it under `fieldName`. */
|
|
1445
|
+
private setShortTextField;
|
|
1446
|
+
/**
|
|
1447
|
+
* Validates the booking id and upserts a single field response (scoped to this
|
|
1448
|
+
* service's integrator), mapping the result union into a {@link SetMetaDataResult}.
|
|
1449
|
+
*/
|
|
1450
|
+
private upsertFieldResponse;
|
|
1174
1451
|
/** Returns the payments on file for a booking, or null when not found. */
|
|
1175
1452
|
getPaymentsOnFile(bookingId: string): Promise<BookingPaymentsOnFile | null>;
|
|
1176
1453
|
/**
|
|
@@ -1183,6 +1460,20 @@ declare class BookingService {
|
|
|
1183
1460
|
* when not found.
|
|
1184
1461
|
*/
|
|
1185
1462
|
setCheckinStatus(bookingId: string, checkedIn: boolean): Promise<Booking | null>;
|
|
1463
|
+
/**
|
|
1464
|
+
* Sets a booking's operator-facing custom status. Returns `true` when the
|
|
1465
|
+
* gateway confirms the stored `operatorStatus` equals the requested
|
|
1466
|
+
* `customStatus`, `false` otherwise.
|
|
1467
|
+
*
|
|
1468
|
+
* @example
|
|
1469
|
+
* ```ts
|
|
1470
|
+
* const ok = await peek.getBookingService().updateCustomStatus("b_abc123", "Awaiting deposit");
|
|
1471
|
+
* ```
|
|
1472
|
+
*
|
|
1473
|
+
* @throws {Error} when `bookingId` is not a valid booking id (`b_…`/`B-…`) or
|
|
1474
|
+
* when `customStatus` is not a non-empty string.
|
|
1475
|
+
*/
|
|
1476
|
+
updateCustomStatus(bookingId: string, customStatus: string): Promise<boolean>;
|
|
1186
1477
|
/** Cancels a booking and returns its id/displayId/status. */
|
|
1187
1478
|
cancel(bookingId: string, notes?: string): Promise<CancelBookingResult>;
|
|
1188
1479
|
/**
|
|
@@ -1295,10 +1586,17 @@ declare class BookingService {
|
|
|
1295
1586
|
* Resolves the input's custom-question answers into the quote's
|
|
1296
1587
|
* `questionAnswers` payload (each tagged with a fresh `refid`), or `null` when
|
|
1297
1588
|
* none were supplied. Fetches the activity's custom questions to validate
|
|
1298
|
-
* against; throws on the first unmatched/ambiguous/invalid answer.
|
|
1589
|
+
* against; throws on the first unmatched/ambiguous/invalid answer. When
|
|
1590
|
+
* `acceptAllCustomQuestionIds` is set the fetch is skipped if every answer is
|
|
1591
|
+
* given by id (a by-name answer still needs the list to resolve).
|
|
1299
1592
|
*/
|
|
1300
1593
|
private buildQuestionAnswers;
|
|
1301
1594
|
private markCreatedBookingPaid;
|
|
1595
|
+
/**
|
|
1596
|
+
* Resolves an activity's ISO currency via the product service, falling back to
|
|
1597
|
+
* {@link DEFAULT_CURRENCY} when the activity (or its currency) can't be found.
|
|
1598
|
+
*/
|
|
1599
|
+
private resolveActivityCurrency;
|
|
1302
1600
|
/** Finds the parent item id of an add-on by matching its option id. */
|
|
1303
1601
|
private resolveParentItemId;
|
|
1304
1602
|
private validatePaymentInput;
|
|
@@ -1822,6 +2120,31 @@ interface Review {
|
|
|
1822
2120
|
/** Free-text review. May be null. */
|
|
1823
2121
|
comment: string | null;
|
|
1824
2122
|
}
|
|
2123
|
+
/**
|
|
2124
|
+
* Aggregate review statistics for a single activity (product), as returned by
|
|
2125
|
+
* {@link ReviewService.getAllReviewSummaries}. Carries no per-review detail or
|
|
2126
|
+
* PII — just the rating distribution and average.
|
|
2127
|
+
*/
|
|
2128
|
+
interface ProductReviewSummary {
|
|
2129
|
+
/** Activity (product) id the summary is for. */
|
|
2130
|
+
productId: string;
|
|
2131
|
+
/** Activity (product) name. */
|
|
2132
|
+
productName: string;
|
|
2133
|
+
/** Average star rating as a decimal, or `null` when there are no ratings. */
|
|
2134
|
+
avgRating: number | null;
|
|
2135
|
+
/** Total number of reviews. */
|
|
2136
|
+
countTotal: number;
|
|
2137
|
+
/** Number of 1-star reviews. */
|
|
2138
|
+
countOneStar: number;
|
|
2139
|
+
/** Number of 2-star reviews. */
|
|
2140
|
+
countTwoStar: number;
|
|
2141
|
+
/** Number of 3-star reviews. */
|
|
2142
|
+
countThreeStar: number;
|
|
2143
|
+
/** Number of 4-star reviews. */
|
|
2144
|
+
countFourStar: number;
|
|
2145
|
+
/** Number of 5-star reviews. */
|
|
2146
|
+
countFiveStar: number;
|
|
2147
|
+
}
|
|
1825
2148
|
|
|
1826
2149
|
/**
|
|
1827
2150
|
* Reads activity reviews from the gateway, which returns them newest-first
|
|
@@ -1862,6 +2185,22 @@ declare class ReviewService {
|
|
|
1862
2185
|
* ```
|
|
1863
2186
|
*/
|
|
1864
2187
|
getReviews(productId: string, reviewCount?: number, reviewOffset?: number): Promise<Review[]>;
|
|
2188
|
+
/**
|
|
2189
|
+
* Returns an aggregate review summary for **every** activity — its average
|
|
2190
|
+
* rating and the count of reviews at each star level. This reads the same
|
|
2191
|
+
* activity list as `getAllProducts`; it carries no per-review detail or PII, so
|
|
2192
|
+
* it is unaffected by `fullCustomerAccess`. An activity with no reviews comes
|
|
2193
|
+
* back with a `null` `avgRating` and zero counts.
|
|
2194
|
+
*
|
|
2195
|
+
* @example
|
|
2196
|
+
* ```ts
|
|
2197
|
+
* const summaries = await peek.getReviewService().getAllReviewSummaries();
|
|
2198
|
+
* for (const s of summaries) {
|
|
2199
|
+
* console.log(s.productName, s.avgRating, s.countTotal);
|
|
2200
|
+
* }
|
|
2201
|
+
* ```
|
|
2202
|
+
*/
|
|
2203
|
+
getAllReviewSummaries(): Promise<ProductReviewSummary[]>;
|
|
1865
2204
|
private validate;
|
|
1866
2205
|
}
|
|
1867
2206
|
|
|
@@ -2093,6 +2432,7 @@ declare class PeekAccessService {
|
|
|
2093
2432
|
private readonly productServiceOptions;
|
|
2094
2433
|
private readonly accessOptions;
|
|
2095
2434
|
private readonly jwtSecret;
|
|
2435
|
+
private readonly issuer;
|
|
2096
2436
|
private productService?;
|
|
2097
2437
|
private accountUserService?;
|
|
2098
2438
|
private resourcePoolService?;
|
|
@@ -2103,7 +2443,7 @@ declare class PeekAccessService {
|
|
|
2103
2443
|
private dailyNoteService?;
|
|
2104
2444
|
private availabilityService?;
|
|
2105
2445
|
private membershipService?;
|
|
2106
|
-
private
|
|
2446
|
+
private readonly bookingServices;
|
|
2107
2447
|
private reviewService?;
|
|
2108
2448
|
constructor(config: PeekAccessServiceConfig);
|
|
2109
2449
|
/**
|
|
@@ -2184,9 +2524,14 @@ declare class PeekAccessService {
|
|
|
2184
2524
|
getMembershipService(): MembershipService;
|
|
2185
2525
|
/**
|
|
2186
2526
|
* Returns the {@link BookingService} for this install, bound to the shared
|
|
2187
|
-
* authenticated transport.
|
|
2527
|
+
* authenticated transport. Instances are created lazily and reused per
|
|
2528
|
+
* `integrator`.
|
|
2529
|
+
*
|
|
2530
|
+
* `integrator` scopes `getMetaData` results to a custom integrator id. **Do
|
|
2531
|
+
* not set it** unless Peek engineering created a custom integrator id for this
|
|
2532
|
+
* integration — omit it and the correct default is used.
|
|
2188
2533
|
*/
|
|
2189
|
-
getBookingService(): BookingService;
|
|
2534
|
+
getBookingService(integrator?: string): BookingService;
|
|
2190
2535
|
/**
|
|
2191
2536
|
* Returns the {@link ReviewService} for this install, bound to the shared
|
|
2192
2537
|
* authenticated transport. The instance is created lazily and reused.
|
|
@@ -2990,4 +3335,4 @@ declare class AcmeApiError extends Error {
|
|
|
2990
3335
|
constructor(statusCode: number, body: unknown, message?: string);
|
|
2991
3336
|
}
|
|
2992
3337
|
|
|
2993
|
-
export { ACTIVITY_PRODUCT_TYPE, ADD_ON_PRODUCT_TYPE, type AccessOptions, type AccountUser, AccountUserService, type AccountUserServiceOptions, AcmeAccessService, type AcmeAccessServiceConfig, type AcmeActivity, type AcmeActivityTicket, AcmeApiError, AcmeProductService, type Activity, type ActivityOverrides, type ActivityTicket, type AddAddonInput, AdminAccountRequiredError, type Agent, type AssignGuideResult, type AssignedActivity, type AssignedResource, type Availability, AvailabilityService, type AvailabilityTime, type AvailabilityTimesQuery, type Booking, type BookingAddon, type BookingAddonMoney, type BookingAddonOption, type BookingAddons, type BookingAddonsMutationResult, type BookingPaymentsOnFile, type BookingReadOptions, type BookingSearchBy, BookingService, type BookingServiceOptions, type BookingTimeRangeSearch, type CancelBookingResult, type Channel, type ClearOverridesInput, CngAccessService, type CngAccessServiceConfig, CngApiError, CngPermissionError, CngProductService, type CreateBookingGuest, type CreateBookingInput, type CreateBookingTicket, type CreateEngineInput, type CreatePromoCodeInput, type CreatedBooking, type CreatedPricingEngine, type CreatedPromoCode, type CustomQuestion, type CustomQuestionAnswer, type CustomQuestionAnswerInput, type CustomQuestionOption, type DailyNote, DailyNoteService, type Duration, type Guest, type GuestMetadata, type Guide, type GuideAssignment, INSTALL_STATUSES, type InstallAccessConfig, type InstallAccessService, type InstallAccessTarget, type InstallStatus, type InstallWebhook, type InstallWebhookAccount, type InstallWebhookClaims, type InvoiceLinkResult, type Logger, type MakePaymentInput, type MakePaymentResult, type Membership, type MembershipPurchaseInput, MembershipService, type NoteMode, type Payment, type PaymentSource, PeekAccessService, type PeekAccessServiceConfig, type PeekAuthTokenClaims, type PeekAuthTokenUser, PeekGraphQLError, PeekHttpError, type PeekPlatform, PiiAccessDisabledError, type Price, type PricingActivityContext, type PricingEngine, type PricingMoney, type PricingNamedRef, type PricingOverride, type PricingOverrideFilter, PricingService, type Product, type ProductMeetingLocation, ProductService, type ProductServiceOptions, type ProductTicket, type PromoCode, type PromoCodeFixedAmount, PromoCodeService, type PromoCodeServiceOptions, type PurchasedMembership, RENTAL_PRODUCT_TYPE, RateLimitError, type RefundInput, type RefundResult, ResellerService, type ResolvedOverride, type ResolvedPricingOverride, type ResolvedResourceOption, type Resource, type ResourceOptionOverride, type ResourceOptionQuantity, type ResourcePool, type ResourcePoolAccountUser, type ResourcePoolAssignment, type ResourcePoolMode, ResourcePoolService, type Review, ReviewService, type Ticket, type Timeslot, type TimeslotFilter, TimeslotService, type UpdateEngineInput, type UpdateTimeslotResult, type UpsertOverridesInput, type UpsertOverridesResult, type Waiver, createAccessServiceForInstall, noopLogger, parseBookingWebhook, parseInstallWebhook, parseWaiverWebhook, verifyInstallWebhook };
|
|
3338
|
+
export { ACTIVITY_PRODUCT_TYPE, ADD_ON_PRODUCT_TYPE, type AccessOptions, type AccountUser, AccountUserService, type AccountUserServiceOptions, AcmeAccessService, type AcmeAccessServiceConfig, type AcmeActivity, type AcmeActivityTicket, AcmeApiError, AcmeProductService, type Activity, type ActivityOverrides, type ActivityTicket, type AddAddonInput, AdminAccountRequiredError, type Agent, type AssignGuideResult, type AssignedActivity, type AssignedResource, type Availability, AvailabilityService, type AvailabilityTime, type AvailabilityTimesQuery, type Booking, type BookingAddon, type BookingAddonMoney, type BookingAddonOption, type BookingAddons, type BookingAddonsMutationResult, type BookingPaymentsOnFile, type BookingReadOptions, type BookingSearchBy, BookingService, type BookingServiceOptions, type BookingTimeRangeSearch, type CancelBookingResult, type Channel, type ClearOverridesInput, CngAccessService, type CngAccessServiceConfig, CngApiError, CngPermissionError, CngProductService, type CreateBookingGuest, type CreateBookingInput, type CreateBookingTicket, type CreateEngineInput, type CreatePromoCodeInput, type CreatedBooking, type CreatedPricingEngine, type CreatedPromoCode, type CustomQuestion, type CustomQuestionAnswer, type CustomQuestionAnswerInput, type CustomQuestionOption, type DailyNote, DailyNoteService, type Duration, type Guest, type GuestMetadata, type Guide, type GuideAssignment, INSTALL_STATUSES, type InstallAccessConfig, type InstallAccessService, type InstallAccessTarget, type InstallStatus, type InstallWebhook, type InstallWebhookAccount, type InstallWebhookClaims, type InvoiceLinkResult, type Logger, type MakePaymentInput, type MakePaymentResult, type Membership, type MembershipPurchaseInput, MembershipService, type MetaData, type MetaDataBarcodeType, type MetaDataDurationUnit, type MetaDataValue, type MetaDataVolumeUnit, type MetaDataWeightUnit, type NoteMode, type Payment, type PaymentSource, PeekAccessService, type PeekAccessServiceConfig, type PeekAuthTokenClaims, type PeekAuthTokenUser, PeekGraphQLError, PeekHttpError, type PeekPlatform, PiiAccessDisabledError, type Price, type PricingActivityContext, type PricingEngine, type PricingMoney, type PricingNamedRef, type PricingOverride, type PricingOverrideFilter, PricingService, type Product, type ProductMeetingLocation, type ProductReviewSummary, ProductService, type ProductServiceOptions, type ProductTicket, type PromoCode, type PromoCodeFixedAmount, PromoCodeService, type PromoCodeServiceOptions, type PurchasedMembership, RENTAL_PRODUCT_TYPE, RateLimitError, type RefundInput, type RefundResult, ResellerService, type ResolvedOverride, type ResolvedPricingOverride, type ResolvedResourceOption, type Resource, type ResourceOptionOverride, type ResourceOptionQuantity, type ResourcePool, type ResourcePoolAccountUser, type ResourcePoolAssignment, type ResourcePoolMode, ResourcePoolService, type Review, ReviewService, type SetMetaDataAttachmentInput, type SetMetaDataGuestInput, type SetMetaDataResult, type Ticket, type Timeslot, type TimeslotFilter, TimeslotService, type UpdateEngineInput, type UpdateTimeslotResult, type UpsertOverridesInput, type UpsertOverridesResult, type Waiver, createAccessServiceForInstall, noopLogger, parseBookingWebhook, parseInstallWebhook, parseWaiverWebhook, verifyInstallWebhook };
|