import {z} from 'zod' export type GetApiOcapiV1MembersCurrentArgs = {loyaltySessionToken?: string | undefined, 'Connect-Region-Code'?: string | undefined}; export type GetApiOcapiV1MembersCurrentOptions = {baseUrl: string, fetch?: typeof fetch | undefined}; export const ocapiV1LoyaltyMembersPasswordResetMemberPasswordResetCodeCreate = z.object({email: z.string().nullable().optional(), username: z.string().nullable().optional(), languageTag: z.string().nullable().optional()}); export const ocapiV1LoyaltyMembersCredentialsMemberCredentials = z.object({username: z.string().nullable().optional(), email: z.string().nullable().optional()}); export const ocapiV1LoyaltyMembersClubMembershipsMemberClubMembership = z.object({clubId: z.number().int(), clubLevelId: z.number().int().nullable().optional()}); export const ocapiV1PersonName = z.object({givenName: z.string().nullable().optional(), familyName: z.string().nullable().optional(), middleName: z.string().nullable().optional()}); export const ocapiV1PhoneNumberType = z.enum(["Home", "Mobile", "Work", "Business", "Fax"]); export const ocapiV1PhoneNumber = z.object({type: ocapiV1PhoneNumberType, number: z.string().min(1)}); export const ocapiV1LoyaltyMembersPersonalDetailsMemberAddress = z.object({line1: z.string().nullable().optional(), suburb: z.string().nullable().optional(), city: z.string().nullable().optional(), state: z.string().nullable().optional(), postCode: z.string().nullable().optional(), country: z.string().nullable().optional()}); export const ocapiV1PushNotificationTokenType = z.enum(["Android", "Ios"]); export const ocapiV1PushNotificationToken = z.object({id: z.string().min(1), type: ocapiV1PushNotificationTokenType}); export const ocapiV1LoyaltyMembersPersonalDetailsMemberContactDetails = z.object({phoneNumbers: z.array(ocapiV1PhoneNumber), address: ocapiV1LoyaltyMembersPersonalDetailsMemberAddress.optional(), pushNotificationToken: ocapiV1PushNotificationToken.optional()}); export const ocapiV1LoyaltyMembersPersonalDetailsMemberInterestSubscription = z.object({interestId: z.number().int(), interestContactMethodIds: z.array(z.number().int())}); export const ocapiV1LoyaltyMembersPreferencesMemberSitePreferences = z.object({pickupSiteId: z.string().nullable().optional(), primarySiteId: z.string().nullable().optional(), preferredSiteIds: z.array(z.string())}); export const ocapiV1LoyaltyMembersPreferencesMemberGenrePreferences = z.object({preferredGenreIds: z.array(z.string())}); export const ocapiV1LoyaltyMembersPreferencesMemberContactMethod = z.enum(["Sms", "Email", "Mail", "Phone", "Fax"]); export const ocapiV1LoyaltyMembersPreferencesMemberMailerFrequency = z.enum(["Never", "Weekly", "Fortnightly", "Monthly"]); export const ocapiV1LoyaltyMembersPreferencesMemberContactPreferences = z.object({contactMethods: z.array(ocapiV1LoyaltyMembersPreferencesMemberContactMethod), mailerFrequency: ocapiV1LoyaltyMembersPreferencesMemberMailerFrequency, allowThirdPartyContact: z.boolean()}); export const ocapiV1LoyaltyMembersPreferencesMemberCustomPreference = z.object({customPreferenceId: z.number().int(), customPreferenceOptionIds: z.array(z.number().int())}); export const ocapiV1LoyaltyMembersPreferencesMemberPreferences = z.object({sites: ocapiV1LoyaltyMembersPreferencesMemberSitePreferences, genres: ocapiV1LoyaltyMembersPreferencesMemberGenrePreferences, contact: ocapiV1LoyaltyMembersPreferencesMemberContactPreferences, customPreferences: z.array(ocapiV1LoyaltyMembersPreferencesMemberCustomPreference), languageTag: z.string().nullable().optional(), allowThirdPartyProfiling: z.boolean()}); export const ocapiV1LoyaltyMembersPersonalDetailsMemberMaritalStatus = z.enum(["NotSpecified", "Single", "Married", "Partnered", "Divorced", "Other"]); export const ocapiV1LoyaltyMembersPersonalDetailsMemberGender = z.enum(["NotSpecified", "Male", "Female", "Other"]); export const ocapiV1LoyaltyMembersPersonalDetailsMemberPersonalDetails = z.object({name: ocapiV1PersonName, contactDetails: ocapiV1LoyaltyMembersPersonalDetailsMemberContactDetails, interestSubscriptions: z.array(ocapiV1LoyaltyMembersPersonalDetailsMemberInterestSubscription), preferences: ocapiV1LoyaltyMembersPreferencesMemberPreferences, birthDate: z.string().nullable().optional(), maritalStatus: ocapiV1LoyaltyMembersPersonalDetailsMemberMaritalStatus, gender: ocapiV1LoyaltyMembersPersonalDetailsMemberGender, educationLevelId: z.number().int().nullable().optional(), occupationId: z.number().int().nullable().optional(), householdPersonCount: z.number().int().nullable().optional(), nationalId: z.string().nullable().optional(), externalId: z.string().nullable().optional()}); export const ocapiV1LoyaltyMembersCardsMemberCard = z.object({cardNumber: z.string().min(1), isPrimary: z.boolean()}); export const ocapiV1LoyaltyMembersBalancesMemberBalanceExpiry = z.object({units: z.number(), expiresAt: z.string()}); export const ocapiV1LoyaltyMembersBalancesMemberBalance = z.object({balanceTypeId: z.number().int(), availableUnits: z.number(), expiries: z.array(ocapiV1LoyaltyMembersBalancesMemberBalanceExpiry)}); export const ocapiV1LoyaltyMembersPhotosMemberPhoto = z.object({uriExpiresAt: z.string(), uri: z.string()}); export const ocapiV1LoyaltyMembersSubscriptionsMemberSubscriptionStatus = z.enum(["Active", "Frozen", "OnHold", "NotStarted"]); export const ocapiV1MonetaryValue = z.object({valueIncludingTax: z.number(), valueExcludingTax: z.number(), tax: z.number()}); export const ocapiV1LoyaltyMembersSubscriptionsMemberSubscriptionBillingError = z.object({willBeRetried: z.boolean()}); export const ocapiV1LoyaltyMembersSubscriptionsMemberSubscriptionBillingDetails = z.object({isRecurring: z.boolean(), reactivationPrice: ocapiV1MonetaryValue.optional(), isUsingThirdPartyPaymentProvider: z.boolean(), currentBillingPeriodStartsAt: z.string().nullable().optional(), nextBillingPeriodStartsAt: z.string().nullable().optional(), billingError: ocapiV1LoyaltyMembersSubscriptionsMemberSubscriptionBillingError.optional(), hasLastContractedPaymentBeenMade: z.boolean().nullable().optional(), hasNextBillingPeriodPriceAdjustment: z.boolean().nullable().optional()}); export const ocapiV1LoyaltyMembersSubscriptionsMemberSubscriptionHoldPeriod = z.object({startDate: z.string(), endDate: z.string()}); export const ocapiV1LoyaltyMembersSubscriptionsMemberSubscription = z.object({subscriptionId: z.number().int(), status: ocapiV1LoyaltyMembersSubscriptionsMemberSubscriptionStatus, startsAt: z.string(), expiresAt: z.string().nullable().optional(), contractedTermEndsAt: z.string(), billingDetails: ocapiV1LoyaltyMembersSubscriptionsMemberSubscriptionBillingDetails, holdPeriod: ocapiV1LoyaltyMembersSubscriptionsMemberSubscriptionHoldPeriod.optional(), isCancellationAllowed: z.boolean(), cancelsAt: z.string().nullable().optional()}); export const ocapiV1LoyaltyMembersSubscriptionsMemberSubscriptions = z.object({current: ocapiV1LoyaltyMembersSubscriptionsMemberSubscription, future: ocapiV1LoyaltyMembersSubscriptionsMemberSubscription.optional(), canPurchaseFutureSubscription: z.boolean(), canPurchaseFutureSubscriptionAt: z.string()}); export const ocapiV1LoyaltyMembersFriendsMemberFriendPhoto = z.object({uriExpiresAt: z.string(), uri: z.string()}); export const ocapiV1LoyaltyMembersFriendsMemberFriendSubscription = z.object({subscriptionId: z.number().int()}); export const ocapiV1LoyaltyMembersFriendsMemberFriendSubscriptionSharing = z.object({friendCanUseMemberSubscription: z.boolean(), friendSubscriptions: z.array(ocapiV1LoyaltyMembersFriendsMemberFriendSubscription)}); export const ocapiV1LoyaltyMembersFriendsMemberFriend = z.object({id: z.string(), name: ocapiV1PersonName, photo: ocapiV1LoyaltyMembersFriendsMemberFriendPhoto.optional(), subscriptionSharing: ocapiV1LoyaltyMembersFriendsMemberFriendSubscriptionSharing, createdAt: z.string()}); export const ocapiV1LoyaltyMembersMember = z.object({id: z.string().min(1), hash: z.string().min(1), membershipStartDate: z.string(), credentials: z.union([ocapiV1LoyaltyMembersPasswordResetMemberPasswordResetCodeCreate, ocapiV1LoyaltyMembersCredentialsMemberCredentials]), clubMembership: ocapiV1LoyaltyMembersClubMembershipsMemberClubMembership, personalDetails: ocapiV1LoyaltyMembersPersonalDetailsMemberPersonalDetails, cards: z.array(ocapiV1LoyaltyMembersCardsMemberCard), balances: z.array(ocapiV1LoyaltyMembersBalancesMemberBalance), photo: ocapiV1LoyaltyMembersPhotosMemberPhoto.optional(), subscriptions: ocapiV1LoyaltyMembersSubscriptionsMemberSubscriptions.optional(), friends: z.array(ocapiV1LoyaltyMembersFriendsMemberFriend)}); export const ocapiV1Translation = z.object({languageTag: z.string().min(1), text: z.string().min(1)}); export const ocapiV1Translatable = z.object({text: z.string().min(1), translations: z.array(ocapiV1Translation)}); export const ocapiV1LoyaltyBalanceTypesBalanceType = z.object({id: z.number().int(), name: ocapiV1Translatable, isPrimary: z.boolean(), unitName: z.string().nullable().optional(), paymentConversionRate: z.number().nullable().optional(), unitDecimalPlaces: z.number().int()}); export const ocapiV1LoyaltyClubsClub = z.object({id: z.number().int(), name: ocapiV1Translatable}); export const ocapiV1LoyaltyClubsClubLevel = z.object({id: z.number().int(), name: ocapiV1Translatable, isExemptFromBookingFees: z.boolean()}); export const ocapiV1QuantityLimit = z.object({isUnlimited: z.boolean(), maximum: z.number().int().nullable().optional(), minimum: z.number().int()}); export const ocapiV1LoyaltyMasterDataCustomPreferencesCustomPreferenceOption = z.object({id: z.number().int(), name: ocapiV1Translatable}); export const ocapiV1LoyaltyMasterDataCustomPreferencesCustomPreference = z.object({id: z.number().int(), name: ocapiV1Translatable, optionQuantityLimit: ocapiV1QuantityLimit, options: z.array(ocapiV1LoyaltyMasterDataCustomPreferencesCustomPreferenceOption)}); export const ocapiV1LoyaltyMasterDataEducationLevelsEducationLevel = z.object({id: z.number().int(), name: ocapiV1Translatable}); export const ocapiV1LoyaltyMasterDataGenresLoyaltyGenre = z.object({id: z.string().min(1), name: ocapiV1Translatable}); export const ocapiV1LoyaltyMasterDataInterestsInterest = z.object({id: z.number().int(), name: ocapiV1Translatable, displayPriority: z.number().int()}); export const ocapiV1LoyaltyMasterDataInterestsInterestContactMethod = z.object({id: z.number().int(), name: ocapiV1Translatable}); export const ocapiV1LoyaltyMasterDataOccupationsOccupation = z.object({id: z.number().int(), name: ocapiV1Translatable}); export const ocapiV1GeographicLocation = z.object({latitude: z.number(), longitude: z.number()}); export const ocapiV1BrowsingMasterDataSitesSiteAddress = z.object({line1: z.string().nullable().optional(), line2: z.string().nullable().optional(), city: z.string().nullable().optional()}); export const ocapiV1BrowsingMasterDataSitesSiteAddressV2 = z.object({line1: ocapiV1Translatable.optional(), line2: ocapiV1Translatable.optional(), line3: ocapiV1Translatable.optional(), line4: ocapiV1Translatable.optional()}); export const ocapiV1BrowsingMasterDataSitesSiteContactDetails = z.object({phoneNumbers: z.array(ocapiV1PhoneNumber), email: z.string().nullable().optional(), address: ocapiV1BrowsingMasterDataSitesSiteAddress.optional(), addressV2: ocapiV1BrowsingMasterDataSitesSiteAddressV2}); export const ocapiV1SalesMasterDataItemsDeliveryMethodsItemDeliveryMethod = z.enum(["CounterPickup", "ServiceAreaPickup", "ElectronicDelivery", "InSeatDelivery", "DiningLocationDelivery", "CustomLocationDelivery", "PostalDelivery"]); export const ocapiV1LoyaltyMasterDataSitesLoyaltySite = z.object({location: ocapiV1GeographicLocation.optional(), contactDetails: ocapiV1BrowsingMasterDataSitesSiteContactDetails, ianaTimeZoneName: z.string().min(1), id: z.string().min(1), name: ocapiV1Translatable, hasSellableItems: z.boolean(), allowedItemDeliveryMethods: z.array(ocapiV1SalesMasterDataItemsDeliveryMethodsItemDeliveryMethod)}); export const ocapiV1LoyaltyMasterDataSubscriptionsSubscription = z.object({id: z.number().int(), name: ocapiV1Translatable, clubId: z.number().int(), minimumTermInMonths: z.number().int(), minimumTermBeforeCanPurchaseFutureSubscriptionInMonths: z.number().int()}); export const ocapiV1LoyaltyMembersMemberRelatedData = z.object({balanceTypes: z.array(ocapiV1LoyaltyBalanceTypesBalanceType), club: ocapiV1LoyaltyClubsClub, clubLevel: ocapiV1LoyaltyClubsClubLevel.optional(), customPreferences: z.array(ocapiV1LoyaltyMasterDataCustomPreferencesCustomPreference), educationLevel: ocapiV1LoyaltyMasterDataEducationLevelsEducationLevel.optional(), genres: z.array(ocapiV1LoyaltyMasterDataGenresLoyaltyGenre), interests: z.array(ocapiV1LoyaltyMasterDataInterestsInterest), interestContactMethods: z.array(ocapiV1LoyaltyMasterDataInterestsInterestContactMethod), occupation: ocapiV1LoyaltyMasterDataOccupationsOccupation.optional(), sites: z.array(ocapiV1LoyaltyMasterDataSitesLoyaltySite), subscriptions: z.array(ocapiV1LoyaltyMasterDataSubscriptionsSubscription)}); export const ocapiV1LoyaltyMembersMemberDetails = z.object({member: ocapiV1LoyaltyMembersMember, relatedData: ocapiV1LoyaltyMembersMemberRelatedData}); export const validateResponse = async ( schema: { readonly '~standard': { readonly validate: (value: unknown) => ({ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }) | Promise<{ readonly value: Output; readonly issues?: undefined } | { readonly issues: ReadonlyArray<{ readonly message: string; readonly path?: ReadonlyArray | undefined }> }> } }, value: unknown ): Promise => { const result = await schema['~standard'].validate(value) if (result.issues !== undefined) { const detail = result.issues .map(({ message, path }) => path?.length ? `${path.map((segment) => String(typeof segment === 'object' ? segment.key : segment)).join('.')}: ${message}` : message ) .join('; ') throw new Error(`Response does not match the schema: ${detail}`, { cause: { issues: result.issues } }) } return result.value }; /** * Gets the details of the currently authenticated member * * GET /ocapi/v1/members/current */ export const getApiOcapiV1MembersCurrent = async (args: GetApiOcapiV1MembersCurrentArgs, options: GetApiOcapiV1MembersCurrentOptions) => { const {baseUrl, fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.loyaltySessionToken != null) headers.set("loyaltySessionToken", String(args.loyaltySessionToken)) if (args['Connect-Region-Code'] != null) headers.set("Connect-Region-Code", String(args['Connect-Region-Code'])) const url = `${baseUrl.replace(/\/+$/, '')}/ocapi/v1/members/current${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(ocapiV1LoyaltyMembersMemberDetails, await res.json()) };