{"version":3,"file":"signup.667d8fa0.js","sources":["../../../../node_modules/uuid/dist/esm-browser/rng.js","../../../../node_modules/uuid/dist/esm-browser/stringify.js","../../../../node_modules/uuid/dist/esm-browser/native.js","../../../../node_modules/uuid/dist/esm-browser/v4.js","../../../../node_modules/round-to/index.js","../../../../utils/funnels.ts","../../../../stores/signup.ts"],"sourcesContent":["// Unique ID creation requires a high quality random # generator. In the browser we therefore\n// require the crypto API and do not support built-in fallback to lower quality random number\n// generators (like Math.random()).\nlet getRandomValues;\nconst rnds8 = new Uint8Array(16);\nexport default function rng() {\n // lazy load so that environments that need to polyfill have a chance to do so\n if (!getRandomValues) {\n // getRandomValues needs to be invoked in a context where \"this\" is a Crypto implementation.\n getRandomValues = typeof crypto !== 'undefined' && crypto.getRandomValues && crypto.getRandomValues.bind(crypto);\n\n if (!getRandomValues) {\n throw new Error('crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported');\n }\n }\n\n return getRandomValues(rnds8);\n}","import validate from './validate.js';\n/**\n * Convert array of 16 byte values to UUID string format of the form:\n * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX\n */\n\nconst byteToHex = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\nexport function unsafeStringify(arr, offset = 0) {\n // Note: Be careful editing this code! It's been tuned for performance\n // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434\n return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();\n}\n\nfunction stringify(arr, offset = 0) {\n const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID. If this throws, it's likely due to one\n // of the following:\n // - One or more input array values don't map to a hex octet (leading to\n // \"undefined\" in the uuid)\n // - Invalid input values for the RFC `version` or `variant` fields\n\n if (!validate(uuid)) {\n throw TypeError('Stringified UUID is invalid');\n }\n\n return uuid;\n}\n\nexport default stringify;","const randomUUID = typeof crypto !== 'undefined' && crypto.randomUUID && crypto.randomUUID.bind(crypto);\nexport default {\n randomUUID\n};","import native from './native.js';\nimport rng from './rng.js';\nimport { unsafeStringify } from './stringify.js';\n\nfunction v4(options, buf, offset) {\n if (native.randomUUID && !buf && !options) {\n return native.randomUUID();\n }\n\n options = options || {};\n const rnds = options.random || (options.rng || rng)(); // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n\n rnds[6] = rnds[6] & 0x0f | 0x40;\n rnds[8] = rnds[8] & 0x3f | 0x80; // Copy bytes to buffer, if provided\n\n if (buf) {\n offset = offset || 0;\n\n for (let i = 0; i < 16; ++i) {\n buf[offset + i] = rnds[i];\n }\n\n return buf;\n }\n\n return unsafeStringify(rnds);\n}\n\nexport default v4;","function round(method, number, precision) {\n\tif (typeof number !== 'number') {\n\t\tthrow new TypeError('Expected value to be a number');\n\t}\n\n\tif (precision === Number.POSITIVE_INFINITY) {\n\t\treturn number;\n\t}\n\n\tif (!Number.isInteger(precision)) {\n\t\tthrow new TypeError('Expected precision to be an integer');\n\t}\n\n\tconst isRoundingAndNegative = method === 'round' && number < 0;\n\tif (isRoundingAndNegative) {\n\t\tnumber = Math.abs(number);\n\t}\n\n\tconst power = 10 ** precision;\n\n\tlet result = Math[method]((number * power).toPrecision(15)) / power;\n\n\tif (isRoundingAndNegative) {\n\t\tresult = -result;\n\t}\n\n\treturn result;\n}\n\nexport const roundTo = round.bind(undefined, 'round');\nexport const roundToUp = round.bind(undefined, 'ceil');\nexport const roundToDown = round.bind(undefined, 'floor');\n","import type { Plan, Term } from '~/types/products';\nimport { BBC_PROMO_CODE } from '~/stores/signup';\n\nexport function getFunnelBenefitLabel(label: string, duration: number) {\n return label.replace('[duration]', `${duration}`);\n}\n\nexport const getTermDescription = (option: Term, promo: any = '', plan: Plan) => {\n if (option.signupPrice && !plan.signupPrice) {\n return '';\n }\n if (promo === BBC_PROMO_CODE && option.id === 1) {\n return plan.promo?.bbc?.price ? '6 months half price' : '';\n }\n\n return option.benefit;\n};\n","import { v4 as uuidv4 } from 'uuid';\nimport { defineStore } from 'pinia';\nimport { roundTo } from 'round-to';\nimport { type LooseObject, type Nullable } from '@/types/generic';\nimport type { Plan, SetUp, Term } from '@/types/products';\nimport { useAuthStore } from '@/stores/auth';\nimport { handleError } from '~/utils/errors';\nimport { formatDate } from '~/utils/date';\nimport productList from '~/lib/products';\nimport { getFunnelBenefitLabel } from '~/utils/funnels';\n\nexport interface SignupAddress {\n id: number;\n full_address: string;\n fibre?: boolean;\n hyper?: boolean;\n lfc: string;\n plans: Record;\n}\n\nexport interface OrderCustomerAddress {\n address: string;\n address_id: number;\n billing_address: string;\n billing_address_id?: number;\n delivery_address: string;\n delivery_address_id?: number;\n order_token: string;\n metadata?: OrderCustomerMetadata;\n connection?: OrderCustomerConnection;\n}\n\nexport interface OrderCustomerConnection extends LooseObject {}\n\nexport interface OrderCustomerMetadata extends LooseObject {}\n\nexport interface SignupDetails extends LooseObject {\n address?: SignupAddress;\n plan?: Plan;\n // supportPlan?: SupportPlan;\n // modem?: Modem;\n term?: Term;\n includeRouter: boolean;\n fromLanding?: boolean;\n promo?: string;\n referrer?: string;\n referralCode?: string;\n}\n\nexport interface OrderTotals {\n oneOff: number;\n monthly: number;\n total: number;\n}\n\nexport interface SignupIsp {\n broadbandTransfer: boolean;\n broadbandNew: boolean;\n canContinue: boolean;\n transferFrom: string;\n nameOnAccount: string;\n accountNumber: string;\n connectionDate: Nullable;\n landlineTransfer: boolean;\n landlineTransferPhoneNumber: string;\n landlineNew: boolean;\n landlineNewLocalArea: string;\n landlineNewPhoneNumber: string;\n landlinePlan: string;\n}\n\nexport interface SignupPurchaseVars {\n uid: string;\n oneOffItems: string[];\n monthlyTotal: number;\n monthlyTotalTax: number;\n oneOffTotal: number;\n}\n\nexport interface State {\n steps: number;\n isLoading: boolean;\n currentStep: number;\n signupDetails: SignupDetails;\n signupIsp: SignupIsp;\n orderToken: string;\n offerHalfPrice: number;\n noTermDiscount: boolean;\n paymentError: Nullable;\n}\n\nconst getSignupDetailsDefaults = (): SignupDetails => ({\n plan: undefined,\n // supportPlan: undefined,\n // modem: undefined,\n term: productList().terms[0],\n includeRouter: true,\n fromLanding: undefined,\n referrer: undefined,\n});\n\nconst getSignupIspDefaults = (): SignupIsp => ({\n broadbandTransfer: true,\n broadbandNew: false,\n canContinue: false,\n transferFrom: '',\n nameOnAccount: '',\n accountNumber: '',\n connectionDate: null,\n // new fields\n landlineTransfer: false,\n landlineTransferPhoneNumber: '',\n landlineNew: false,\n landlineNewLocalArea: '',\n landlineNewPhoneNumber: '',\n landlinePlan: 'local',\n});\n\nconst DEFAULT_OFFER_HALF_PRICE = 5;\n\nexport const BBC_PROMO_CODE = 'bbc';\n\nexport const useMemberSignup = defineStore('signup', {\n persist: true,\n state: (): State => ({\n signupDetails: getSignupDetailsDefaults(),\n currentStep: 1,\n steps: 6,\n isLoading: false,\n signupIsp: getSignupIspDefaults(),\n orderToken: '',\n offerHalfPrice: DEFAULT_OFFER_HALF_PRICE,\n noTermDiscount: false,\n paymentError: null,\n }),\n getters: {\n signupNoTerm(state) {\n return state.signupDetails.term?.noTermPrice === true;\n },\n signupRequiresBond(state) {\n return state.signupDetails.term?.noTermPrice === true && state.signupDetails.includeRouter && !state.signupDetails.plan?.hyper;\n },\n signupIncludeRouter(state) {\n return state.signupDetails.includeRouter && !state.signupDetails.plan?.hyper;\n },\n signupIsHyper(state) {\n return state.signupDetails.plan?.hyper === true;\n },\n hasNextStep(state) {\n return state.currentStep < state.steps;\n },\n hasPrevStep(state) {\n return state.currentStep > 1;\n },\n offerHalfPriceLabel(state) {\n switch (state.offerHalfPrice) {\n case 2:\n return 'two';\n case 3:\n return 'three';\n case 4:\n return 'four';\n case 5:\n return 'five';\n case 6:\n return 'six';\n }\n },\n signupIspSetupValid(state) {\n return state.signupIsp.canContinue;\n },\n\n signupOrderSetup(): SetUp {\n const { setup } = productList();\n return setup; // this.hasBbcPromo ? setupPromoBbc : setup;\n },\n\n orderPriceIds(state) {\n const priceIds: string[] = [];\n\n if (state.signupDetails.plan) {\n // no term price ID\n if (this.signupNoTerm && state.signupDetails.plan.stripeNoTermPriceCode) {\n priceIds.push(state.signupDetails.plan.stripeNoTermPriceCode);\n } else if (this.hasBbcPromo && state.signupDetails.plan.promo?.bbc?.stripePriceCode) {\n priceIds.push(state.signupDetails.plan.promo.bbc.stripePriceCode);\n } else if (state.signupDetails.plan.stripePriceCode) {\n priceIds.push(state.signupDetails.plan.stripePriceCode);\n }\n }\n\n const { bond, delivery } = productList();\n if (this.signupRequiresBond) {\n priceIds.push(bond.stripePriceCode);\n }\n if (this.signupIncludeRouter) {\n priceIds.push(delivery.stripePriceCode);\n }\n\n priceIds.push(this.signupOrderSetup.stripePriceCode);\n\n return priceIds.length ? priceIds : undefined;\n },\n\n purchaseVars(state): SignupPurchaseVars {\n const vars: SignupPurchaseVars = {\n uid: uuidv4(),\n oneOffItems: [],\n monthlyTotal: 0.0,\n monthlyTotalTax: 0.0,\n oneOffTotal: 0.0,\n };\n\n if (state.signupDetails.plan) {\n const price = this.signupNoTerm ? state.signupDetails.plan.noTermPrice : state.signupDetails.plan.price;\n if (price) {\n vars.monthlyTotal += price / 100;\n }\n }\n\n const { bond, delivery } = productList();\n if (this.signupRequiresBond) {\n vars.oneOffItems.push(bond.name);\n vars.oneOffTotal += bond.price / 100;\n }\n\n if (this.signupIncludeRouter) {\n vars.oneOffItems.push(delivery.name);\n vars.oneOffTotal += delivery.price / 100;\n }\n\n vars.oneOffItems.push(this.signupOrderSetup.name);\n vars.oneOffTotal += this.signupOrderSetup.price / 100;\n\n vars.monthlyTotalTax = roundTo(vars.monthlyTotal * 0.15, 2); // GST\n vars.oneOffTotal = roundTo(vars.oneOffTotal, 2);\n\n return vars;\n },\n\n purchaseEventVars(state): LooseObject {\n let planName = state.signupDetails.plan?.name || '';\n if (this.signupNoTerm) {\n planName += ' - No Term';\n }\n\n return {\n value: this.purchaseVars.monthlyTotal,\n tax: this.purchaseVars.monthlyTotalTax,\n one_off_items: this.purchaseVars.oneOffItems.join(','),\n one_off_total: this.purchaseVars.oneOffTotal,\n currency: 'NZD',\n coupon: '',\n items: [\n {\n item_id: state.signupDetails.plan?.id,\n item_name: planName,\n coupon: '',\n price: this.purchaseVars.monthlyTotal,\n item_category: 'Plans',\n quantity: 1,\n },\n ],\n };\n },\n\n orderSignupTerm(state): string {\n let benefit = '';\n if (state.signupDetails.term) {\n if (state.noTermDiscount && state.signupDetails.term.discountBenefit) {\n benefit = state.signupDetails.term.discountBenefit;\n } else if (this.hasBbcPromo) {\n benefit = '6 months half price';\n } else if (state.signupDetails.term.benefit) {\n benefit = getFunnelBenefitLabel(state.signupDetails.term.benefit, state.offerHalfPrice);\n }\n }\n return benefit;\n },\n\n hasBbcPromo(state): boolean {\n return state.signupDetails.promo === BBC_PROMO_CODE && state.signupDetails.term?.id === 1;\n },\n\n hasBbcPromoPrice(state): boolean {\n return !!(this.hasBbcPromo && state.signupDetails.plan?.promo?.bbc?.price);\n },\n\n orderContract(state): string {\n let contract = '';\n if (state.signupDetails.term) {\n if (state.noTermDiscount && state.signupDetails.term.contractDiscount) {\n contract = state.signupDetails.term?.contractDiscount;\n } else {\n contract = state.signupDetails.term?.contract;\n }\n }\n return contract;\n },\n\n orderConnection(state): OrderCustomerConnection {\n const connection: OrderCustomerConnection = {\n broadband: {\n transfer: state.signupIsp.broadbandTransfer,\n from_isp: state.signupIsp.transferFrom,\n name_on_account: state.signupIsp.nameOnAccount,\n account_number: state.signupIsp.accountNumber,\n },\n landline: {},\n };\n\n if (state.signupIsp.landlineTransfer) {\n connection.landline.type = 'transfer';\n connection.landline.phone = state.signupIsp.landlineTransferPhoneNumber;\n connection.landline.plan = state.signupIsp.landlinePlan;\n } else if (state.signupIsp.landlineNew) {\n connection.landline.type = 'new';\n connection.landline.phone = state.signupIsp.landlineNewPhoneNumber;\n connection.landline.plan = state.signupIsp.landlinePlan;\n }\n\n return connection;\n },\n\n orderPlanName(state): string {\n if (state.signupDetails.plan?.affinityName) {\n return state.signupDetails.plan.affinityName;\n }\n if (state.signupDetails.plan?.name) {\n return state.signupDetails.plan.name;\n }\n\n return '-';\n },\n\n orderMetadata(state): OrderCustomerMetadata {\n return {\n desired_connection_date: state.signupIsp.connectionDate ? formatDate(state.signupIsp.connectionDate) : '-',\n signup_term: this.orderSignupTerm,\n support_plan: '-',\n include_router: this.signupIncludeRouter ? 'yes' : 'no',\n referral_code: state.signupDetails.referralCode || '',\n promo: this.hasBbcPromo ? state.signupDetails.promo || '' : '',\n };\n },\n\n orderAddress(state): OrderCustomerAddress | undefined {\n if (!state.signupDetails.address) {\n return undefined;\n }\n\n return {\n address: state.signupDetails.address.full_address,\n address_id: state.signupDetails.address.id,\n billing_address: state.signupDetails.address.full_address,\n billing_address_id: state.signupDetails.address.id,\n delivery_address: state.signupDetails.address.full_address,\n delivery_address_id: state.signupDetails.address.id,\n plan_key: state.signupDetails.plan?.planKey,\n plan: this.orderPlanName,\n order_token: this.orderToken,\n contract: this.orderContract,\n connection: this.orderConnection,\n metadata: this.orderMetadata,\n } as OrderCustomerAddress;\n },\n\n orderTotal(state) {\n const totals: OrderTotals = {\n oneOff: 0,\n monthly: 0,\n total: 0,\n };\n\n if (state.signupDetails.plan) {\n const price = this.signupNoTerm ? state.signupDetails.plan.noTermPrice : state.signupDetails.plan.price;\n if (price) {\n totals.monthly += price;\n totals.total += price;\n }\n }\n\n const { bond, delivery, discounts } = productList();\n\n if (this.signupRequiresBond) {\n totals.oneOff += bond.price;\n }\n\n if (this.signupIncludeRouter) {\n totals.oneOff += delivery.price;\n }\n\n totals.oneOff += this.signupOrderSetup.price;\n\n if (state.signupDetails.referralCode) {\n totals.oneOff += discounts.referralDiscount.price;\n if (totals.oneOff < 0) {\n totals.oneOff = 0;\n }\n }\n\n return totals;\n },\n },\n actions: {\n setStep(step: number) {\n this.currentStep = step;\n },\n nextStep() {\n if (this.currentStep < this.steps) {\n this.currentStep = this.currentStep + 1;\n }\n },\n prevStep() {\n if (this.currentStep > 1) {\n this.currentStep = this.currentStep - 1;\n }\n },\n saveDetails(details: LooseObject) {\n this.signupDetails = Object.assign({}, this.signupDetails, details);\n },\n reset() {\n this.signupDetails = getSignupDetailsDefaults();\n this.signupIsp = getSignupIspDefaults();\n this.currentStep = 1;\n this.orderToken = '';\n },\n\n setOfferHalfPrice(price: null | number = null) {\n this.offerHalfPrice = price || DEFAULT_OFFER_HALF_PRICE;\n },\n\n setNoTermDiscount(noTermDiscount: boolean = false) {\n this.noTermDiscount = noTermDiscount;\n },\n\n async confirmPayment() {\n try {\n this.paymentError = null;\n\n const accessToken = await this.$auth0.getAccessTokenSilently();\n\n const response = await this.$api.post(\n '/customer/payment/confirm',\n {\n address: this.orderAddress,\n price_ids: this.orderPriceIds,\n },\n {\n headers: { Authorization: `Bearer ${accessToken}` },\n }\n );\n if (response.status === 200 || response.status === 201) {\n return true;\n }\n } catch (err: any) {\n this.paymentError = err?.data?.message || 'Oops! There’s been a problem with your card. Please check the details and try again.';\n handleError(err);\n }\n return false;\n },\n\n validateStep(step: number): boolean {\n const auth = useAuthStore();\n const hasAddress = !!this.signupDetails.address;\n const hasPlan = !!this.signupDetails.plan;\n const hasTerm = !!this.signupDetails.term;\n\n switch (step) {\n case 2:\n return hasAddress;\n case 3:\n return hasAddress && hasPlan;\n case 4:\n return hasAddress && hasPlan;\n case 5:\n return hasAddress && hasPlan && auth.customerExists;\n case 6:\n return hasAddress && hasPlan && auth.customerExists && this.signupIspSetupValid;\n case 7:\n return hasAddress && hasPlan && hasTerm && auth.customerExists && this.signupIspSetupValid;\n }\n\n return step === 1;\n },\n\n generateOrderToken(keepExisting = true) {\n if (keepExisting && this.orderToken) {\n return;\n }\n this.orderToken = uuidv4();\n },\n },\n});\n"],"names":["getRandomValues","rnds8","rng","byteToHex","i","unsafeStringify","arr","offset","randomUUID","native","v4","options","buf","rnds","round","method","number","precision","isRoundingAndNegative","power","result","roundTo","getFunnelBenefitLabel","label","duration","getTermDescription","option","promo","plan","BBC_PROMO_CODE","_b","_a","getSignupDetailsDefaults","productList","getSignupIspDefaults","DEFAULT_OFFER_HALF_PRICE","useMemberSignup","defineStore","state","setup","priceIds","bond","delivery","vars","uuidv4","price","planName","benefit","_c","contract","connection","formatDate","totals","discounts","step","details","noTermDiscount","accessToken","response","err","handleError","auth","useAuthStore","hasAddress","hasPlan","hasTerm","keepExisting"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4]}