@peektravel/app-utilities 0.9.2 → 0.9.4

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 CHANGED
@@ -400,7 +400,12 @@ interface ProductMeetingLocation {
400
400
  }
401
401
  /** A single bookable sub-option (resource option or add-on item option). */
402
402
  interface ProductTicket {
403
- /** Unique identifier of the ticket / option. */
403
+ /**
404
+ * Unique identifier of the ticket / option. This is also the
405
+ * **`resourceOptionId`** — the id passed as a ticket's `resourceOptionId` when
406
+ * creating a booking (see {@link CreateBookingTicket}) and reported per slot by
407
+ * {@link AvailabilityService.getAvailabilityTimes}.
408
+ */
404
409
  id: string;
405
410
  /** Human-readable name of the ticket / option. */
406
411
  name: string;
@@ -748,6 +753,11 @@ interface Booking {
748
753
  portalUrl: string | null;
749
754
  /** Operator notes on the booking (`""` when none). */
750
755
  notes: string;
756
+ /**
757
+ * Operator-facing custom status set on the booking (via
758
+ * {@link BookingService.updateCustomStatus}), or `null` when none is set.
759
+ */
760
+ customStatus: string | null;
751
761
  /** Total booking value, human-formatted (e.g. `"$75.00"`). `""` if absent. */
752
762
  valueDisplay: string;
753
763
  /** Total booking value as a numeric string. `""` if absent. */
@@ -843,6 +853,11 @@ interface BookingTimeRangeSearch extends BookingReadOptions {
843
853
  type NoteMode = "append" | "overwrite";
844
854
  /** A requested ticket (resource option) and quantity for a new booking. */
845
855
  interface CreateBookingTicket {
856
+ /**
857
+ * The resource option to book — this is the {@link ProductTicket.id} from the
858
+ * activity's `tickets` (also reported per slot by
859
+ * {@link AvailabilityService.getAvailabilityTimes}).
860
+ */
846
861
  resourceOptionId: string;
847
862
  quantity: number;
848
863
  }
@@ -899,6 +914,15 @@ interface CreateBookingInput {
899
914
  guest: CreateBookingGuest;
900
915
  /** Operator notes to attach. */
901
916
  operatorNotes?: string;
917
+ /**
918
+ * Total list price for the booking, as a positive number string (commas
919
+ * allowed — `"100"`, `"1,000"`, `"10.00"`). When set, it is split evenly
920
+ * across the booking's tickets (each of the first n-1 tickets gets
921
+ * `floor(total / n)`, the last ticket the remainder) and sent per ticket in
922
+ * the activity's currency (falling back to `"USD"`). Omit to let Peek price
923
+ * the tickets from the activity's configured pricing.
924
+ */
925
+ listPrice?: string;
902
926
  /**
903
927
  * Answers to the activity's custom questions. When non-empty, the activity's
904
928
  * custom questions are fetched and each answer is validated/resolved before
@@ -953,6 +977,186 @@ interface CreatedBooking {
953
977
  transactionId?: string;
954
978
  }
955
979
 
980
+ /**
981
+ * The clean, transport-agnostic data model for a booking's custom-field
982
+ * metadata (the booking's `fieldResponses`).
983
+ *
984
+ * Each {@link MetaData} entry flattens the field definition (id/name/slug/type),
985
+ * its prompt (label/hint/required), and the response `refid`, and carries a
986
+ * single typed {@link MetaDataValue} — a discriminated union (keyed by `kind`)
987
+ * mirroring the gateway's `FieldResponseValue` variants, so exactly one shape is
988
+ * present per entry and consumers narrow on `kind`.
989
+ */
990
+ /** Barcode symbology reported on a `kind: "barcode"` metadata value. */
991
+ type MetaDataBarcodeType = "BARCODE_CODE128" | "BARCODE_CODE39" | "DATA_MATRIX" | "EAN_13" | "ITF" | "QR_CODE" | "TEXT" | "UPC";
992
+ /** Time unit reported on a `kind: "duration"` metadata value. */
993
+ type MetaDataDurationUnit = "SECONDS" | "MINUTES" | "HOURS" | "DAYS" | "WEEKS" | "MONTHS" | "YEARS";
994
+ /** Mass unit reported on a `kind: "weight"` metadata value. */
995
+ type MetaDataWeightUnit = "KILOGRAM" | "POUND" | "STONE";
996
+ /** Volume unit reported on a `kind: "volume"` metadata value. */
997
+ type MetaDataVolumeUnit = "GALLON";
998
+ /**
999
+ * A booking custom-field response value — a discriminated union keyed by `kind`,
1000
+ * one variant per gateway `…FieldResponseValue` type. Numeric `Int` values are
1001
+ * `number`; `Decimal` values are kept as strings to avoid float-precision loss;
1002
+ * `Date`/`Time` values are ISO strings.
1003
+ *
1004
+ * A human-readable, display-safe rendering of the value lives on the parent
1005
+ * {@link MetaData.displayValue}, not here.
1006
+ */
1007
+ type MetaDataValue = {
1008
+ kind: "age";
1009
+ age: number;
1010
+ } | {
1011
+ kind: "attachment";
1012
+ attachmentUrl: string;
1013
+ mime: string | null;
1014
+ name: string | null;
1015
+ size: number | null;
1016
+ } | {
1017
+ kind: "barcode";
1018
+ barcodeType: MetaDataBarcodeType | null;
1019
+ barcodeValue: string;
1020
+ } | {
1021
+ kind: "boolean";
1022
+ boolean: boolean;
1023
+ } | {
1024
+ kind: "checkbox";
1025
+ isChecked: boolean;
1026
+ } | {
1027
+ kind: "currency";
1028
+ currency: string;
1029
+ } | {
1030
+ kind: "date";
1031
+ date: string;
1032
+ } | {
1033
+ kind: "decimal";
1034
+ decimal: string | null;
1035
+ } | {
1036
+ kind: "duration";
1037
+ amount: number;
1038
+ unit: MetaDataDurationUnit | null;
1039
+ } | {
1040
+ kind: "email";
1041
+ email: string | null;
1042
+ } | {
1043
+ kind: "guest";
1044
+ name: string | null;
1045
+ email: string | null;
1046
+ dateOfBirth: string | null;
1047
+ notes: string | null;
1048
+ waiverSigned: boolean | null;
1049
+ } | {
1050
+ kind: "html";
1051
+ html: string;
1052
+ } | {
1053
+ kind: "imageUrl";
1054
+ imageUrl: string;
1055
+ } | {
1056
+ kind: "integer";
1057
+ integer: number;
1058
+ } | {
1059
+ kind: "location";
1060
+ country: string | null;
1061
+ county: string | null;
1062
+ locality: string | null;
1063
+ postalCode: string | null;
1064
+ region: string | null;
1065
+ streetAddress: string | null;
1066
+ } | {
1067
+ kind: "longText";
1068
+ longText: string;
1069
+ } | {
1070
+ kind: "meta";
1071
+ meta: unknown;
1072
+ } | {
1073
+ kind: "percent";
1074
+ percent: string | null;
1075
+ } | {
1076
+ kind: "phone";
1077
+ phone: string;
1078
+ } | {
1079
+ kind: "shortText";
1080
+ shortText: string;
1081
+ } | {
1082
+ kind: "time";
1083
+ time: string;
1084
+ } | {
1085
+ kind: "url";
1086
+ url: string | null;
1087
+ } | {
1088
+ kind: "volume";
1089
+ amount: string;
1090
+ unit: MetaDataVolumeUnit | null;
1091
+ } | {
1092
+ kind: "weight";
1093
+ amount: string;
1094
+ unit: MetaDataWeightUnit | null;
1095
+ };
1096
+ /** A single booking custom-field response (one `fieldResponse`). */
1097
+ interface MetaData {
1098
+ /** Field definition id. */
1099
+ id: string;
1100
+ /** Field name (human label). */
1101
+ name: string;
1102
+ /**
1103
+ * Field slug. When an `integrator` filter is applied, the matched
1104
+ * `integrators:<integrator>:` prefix is stripped off (e.g.
1105
+ * `integrators:bob:booking_url` → `booking_url`).
1106
+ */
1107
+ slug: string;
1108
+ /** Raw field type reported by the gateway (kept as a string). */
1109
+ type: string;
1110
+ /** Prompt label shown for the field, or `null` when the field has no prompt. */
1111
+ prompt: string | null;
1112
+ /** Prompt hint text, or `null`. */
1113
+ promptHint: string | null;
1114
+ /** Whether the field is required (`false` when the field has no prompt). */
1115
+ isRequired: boolean;
1116
+ /** The response's reference id. */
1117
+ refid: string;
1118
+ /**
1119
+ * A human-readable, display-safe string rendering of the value. Always
1120
+ * present — `""` when the value is absent or of an unrecognized variant. The
1121
+ * `html` value's rendering is HTML-escaped so it is safe to render as text.
1122
+ */
1123
+ displayValue: string;
1124
+ /**
1125
+ * The typed response value, or `null` when absent or of an unrecognized
1126
+ * (future) variant.
1127
+ */
1128
+ value: MetaDataValue | null;
1129
+ }
1130
+ /** A guest entry for `BookingService.setMetaDataGuest`. */
1131
+ interface SetMetaDataGuestInput {
1132
+ /** Guest name (required). */
1133
+ name: string;
1134
+ /** Guest email (required). */
1135
+ email: string;
1136
+ /** Date of birth as an ISO date (e.g. `"2010-06-21"`). */
1137
+ dateOfBirth?: string;
1138
+ /** Whether the guest signed the waiver. */
1139
+ waiverSigned?: boolean;
1140
+ /** Free-text notes. */
1141
+ notes?: string;
1142
+ }
1143
+ /** An attachment entry for `BookingService.setMetaDataAttachment`. */
1144
+ interface SetMetaDataAttachmentInput {
1145
+ /** Display name for the attachment (required). */
1146
+ name: string;
1147
+ /** URL of the attachment (required). */
1148
+ attachmentUrl: string;
1149
+ }
1150
+ /** The result of a `setMetaData…` write. */
1151
+ interface SetMetaDataResult {
1152
+ /** Whether the gateway reported the upsert succeeded. */
1153
+ success: boolean;
1154
+ /** The booking id echoed back (falls back to the requested id). */
1155
+ bookingId: string;
1156
+ /** The gateway's success or error message (`""` when none). */
1157
+ message: string;
1158
+ }
1159
+
956
1160
  /**
957
1161
  * The clean data model for a booking's payments on file.
958
1162
  */
@@ -1129,6 +1333,12 @@ interface BookingServiceOptions {
1129
1333
  pageSize?: number;
1130
1334
  /** Cross-cutting access options (PII exposure). Default: PII off. */
1131
1335
  accessOptions?: AccessOptions;
1336
+ /**
1337
+ * Integrator id used to scope `getMetaData` results — only fields whose slug
1338
+ * starts with `integrators:<integrator>:` are returned. Defaults to `""` (set
1339
+ * by the access service to the install's issuer).
1340
+ */
1341
+ integrator?: string;
1132
1342
  }
1133
1343
  /** Dependencies the {@link BookingService} composes for add-on resolution. */
1134
1344
  interface BookingServiceDeps {
@@ -1152,6 +1362,8 @@ declare class BookingService {
1152
1362
  private readonly pageSize;
1153
1363
  /** Whether customer PII is requested and payment operations are allowed. */
1154
1364
  private readonly fullCustomerAccess;
1365
+ /** Integrator id scoping `getMetaData` results. */
1366
+ private readonly integrator;
1155
1367
  constructor(client: GraphQLClient, deps: BookingServiceDeps, options?: BookingServiceOptions);
1156
1368
  /**
1157
1369
  * Throws a {@link PiiAccessDisabledError} for `operation` when this service was
@@ -1181,6 +1393,51 @@ declare class BookingService {
1181
1393
  searchByTimeslot(timeslotId: string, options?: BookingReadOptions): Promise<Booking[]>;
1182
1394
  /** Returns the guests on a booking (primary guest included). */
1183
1395
  getGuests(bookingId: string): Promise<Guest[]>;
1396
+ /**
1397
+ * Returns a booking's custom-field metadata (its `fieldResponses`), scoped to
1398
+ * this service's integrator. Only fields whose slug starts with
1399
+ * `integrators:<integrator>:` are returned, and that prefix is stripped from
1400
+ * each returned `slug`. Returns `[]` when the booking is not found or has no
1401
+ * matching fields.
1402
+ *
1403
+ * @example
1404
+ * ```ts
1405
+ * const meta = await peek.getBookingService().getMetaData("b_abc123");
1406
+ * for (const field of meta) {
1407
+ * if (field.value?.kind === "url") console.log(field.slug, field.value.url);
1408
+ * }
1409
+ * ```
1410
+ */
1411
+ getMetaData(bookingId: string): Promise<MetaData[]>;
1412
+ /**
1413
+ * Sets the booking's `guest` metadata field. Each guest requires a `name` and
1414
+ * `email`; `dateOfBirth`/`waiverSigned`/`notes` are optional.
1415
+ */
1416
+ setMetaDataGuest(bookingId: string, guests: SetMetaDataGuestInput[]): Promise<SetMetaDataResult>;
1417
+ /**
1418
+ * Sets the booking's `attachment` metadata field. Each attachment requires a
1419
+ * `name` and `attachmentUrl`.
1420
+ */
1421
+ setMetaDataAttachment(bookingId: string, attachments: SetMetaDataAttachmentInput[]): Promise<SetMetaDataResult>;
1422
+ /** Sets the booking's `manifest_url` metadata field. */
1423
+ setMetaDataManifestUrl(bookingId: string, url: string): Promise<SetMetaDataResult>;
1424
+ /** Sets the booking's `reservation_id` metadata field. */
1425
+ setMetaDataReservationId(bookingId: string, reservationId: string): Promise<SetMetaDataResult>;
1426
+ /** Sets the booking's `booking_status` metadata field. */
1427
+ setMetaDataBookingStatus(bookingId: string, status: string): Promise<SetMetaDataResult>;
1428
+ /** Sets the booking's `assigned_product` metadata field. */
1429
+ setMetaDataAssignedProduct(bookingId: string, productName: string): Promise<SetMetaDataResult>;
1430
+ /** Sets the booking's `assigned_employee` metadata field. */
1431
+ setMetaDataAssignedEmployee(bookingId: string, employeeName: string): Promise<SetMetaDataResult>;
1432
+ /** Sets the booking's `insurance_purchased` metadata field. */
1433
+ setMetaDataInsurancePurchased(bookingId: string, insurancePurchased: boolean): Promise<SetMetaDataResult>;
1434
+ /** Validates a non-empty `shortText` value and upserts it under `fieldName`. */
1435
+ private setShortTextField;
1436
+ /**
1437
+ * Validates the booking id and upserts a single field response (scoped to this
1438
+ * service's integrator), mapping the result union into a {@link SetMetaDataResult}.
1439
+ */
1440
+ private upsertFieldResponse;
1184
1441
  /** Returns the payments on file for a booking, or null when not found. */
1185
1442
  getPaymentsOnFile(bookingId: string): Promise<BookingPaymentsOnFile | null>;
1186
1443
  /**
@@ -1193,6 +1450,20 @@ declare class BookingService {
1193
1450
  * when not found.
1194
1451
  */
1195
1452
  setCheckinStatus(bookingId: string, checkedIn: boolean): Promise<Booking | null>;
1453
+ /**
1454
+ * Sets a booking's operator-facing custom status. Returns `true` when the
1455
+ * gateway confirms the stored `operatorStatus` equals the requested
1456
+ * `customStatus`, `false` otherwise.
1457
+ *
1458
+ * @example
1459
+ * ```ts
1460
+ * const ok = await peek.getBookingService().updateCustomStatus("b_abc123", "Awaiting deposit");
1461
+ * ```
1462
+ *
1463
+ * @throws {Error} when `bookingId` is not a valid booking id (`b_…`/`B-…`) or
1464
+ * when `customStatus` is not a non-empty string.
1465
+ */
1466
+ updateCustomStatus(bookingId: string, customStatus: string): Promise<boolean>;
1196
1467
  /** Cancels a booking and returns its id/displayId/status. */
1197
1468
  cancel(bookingId: string, notes?: string): Promise<CancelBookingResult>;
1198
1469
  /**
@@ -1311,6 +1582,11 @@ declare class BookingService {
1311
1582
  */
1312
1583
  private buildQuestionAnswers;
1313
1584
  private markCreatedBookingPaid;
1585
+ /**
1586
+ * Resolves an activity's ISO currency via the product service, falling back to
1587
+ * {@link DEFAULT_CURRENCY} when the activity (or its currency) can't be found.
1588
+ */
1589
+ private resolveActivityCurrency;
1314
1590
  /** Finds the parent item id of an add-on by matching its option id. */
1315
1591
  private resolveParentItemId;
1316
1592
  private validatePaymentInput;
@@ -2146,6 +2422,7 @@ declare class PeekAccessService {
2146
2422
  private readonly productServiceOptions;
2147
2423
  private readonly accessOptions;
2148
2424
  private readonly jwtSecret;
2425
+ private readonly issuer;
2149
2426
  private productService?;
2150
2427
  private accountUserService?;
2151
2428
  private resourcePoolService?;
@@ -2156,7 +2433,7 @@ declare class PeekAccessService {
2156
2433
  private dailyNoteService?;
2157
2434
  private availabilityService?;
2158
2435
  private membershipService?;
2159
- private bookingService?;
2436
+ private readonly bookingServices;
2160
2437
  private reviewService?;
2161
2438
  constructor(config: PeekAccessServiceConfig);
2162
2439
  /**
@@ -2237,9 +2514,14 @@ declare class PeekAccessService {
2237
2514
  getMembershipService(): MembershipService;
2238
2515
  /**
2239
2516
  * Returns the {@link BookingService} for this install, bound to the shared
2240
- * authenticated transport. The instance is created lazily and reused.
2517
+ * authenticated transport. Instances are created lazily and reused per
2518
+ * `integrator`.
2519
+ *
2520
+ * `integrator` scopes `getMetaData` results to a custom integrator id. **Do
2521
+ * not set it** unless Peek engineering created a custom integrator id for this
2522
+ * integration — omit it and the correct default is used.
2241
2523
  */
2242
- getBookingService(): BookingService;
2524
+ getBookingService(integrator?: string): BookingService;
2243
2525
  /**
2244
2526
  * Returns the {@link ReviewService} for this install, bound to the shared
2245
2527
  * authenticated transport. The instance is created lazily and reused.
@@ -3043,4 +3325,4 @@ declare class AcmeApiError extends Error {
3043
3325
  constructor(statusCode: number, body: unknown, message?: string);
3044
3326
  }
3045
3327
 
3046
- 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, 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 Ticket, type Timeslot, type TimeslotFilter, TimeslotService, type UpdateEngineInput, type UpdateTimeslotResult, type UpsertOverridesInput, type UpsertOverridesResult, type Waiver, createAccessServiceForInstall, noopLogger, parseBookingWebhook, parseInstallWebhook, parseWaiverWebhook, verifyInstallWebhook };
3328
+ 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 };