import {z} from 'zod' export type GetApiGroupQuoteIntentsGroupQuoteIntentIdQuoteArgs = {group_quote_intent_id: string}; export type GetApiGroupQuoteIntentsGroupQuoteIntentIdQuoteOptions = {baseUrl?: string | undefined, bearerAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const costSharingType = z.enum(["member_count", "member_selection", "member_selection_percentage_based", "percentage", "policyholder_only", "family_type", "fixed_amount", "full_coverage", "pooled_member_count"]); export const memberCountCostSharingConfigurationResponse = z.object({adults: z.number().int(), children: z.number().int()}); export const memberSelectionCostSharingConfigurationResponse = z.object({partner: z.boolean(), children: z.boolean()}); export const memberSelectionPercentageBasedCostSharingConfigurationResponse = z.object({partner: z.boolean(), children: z.boolean(), percentage: z.number().int()}); export const percentageCostSharingConfigurationResponse = z.object({percentage: z.number().int()}); export const familyCostSharingType = z.enum(["single", "couple", "single_with_children", "family"]); export const familyTypeCostSharingConfigurationResponse = z.object({type: familyCostSharingType}); export const fixedAmountCostSharingConfigurationResponse = z.object({monthly_amount: z.number()}); export const pooledMemberCountCostSharingConfigurationResponse = z.object({dependents: z.number().int()}); export const costSharingConfigurationResponse = z.object({type: costSharingType, member_count: memberCountCostSharingConfigurationResponse.optional(), member_selection: memberSelectionCostSharingConfigurationResponse.optional(), member_selection_percentage_based: memberSelectionPercentageBasedCostSharingConfigurationResponse.optional(), percentage: percentageCostSharingConfigurationResponse.optional(), family_type: familyTypeCostSharingConfigurationResponse.optional(), fixed_amount: fixedAmountCostSharingConfigurationResponse.optional(), pooled_member_count: pooledMemberCountCostSharingConfigurationResponse.optional()}); export const groupQuoteBreakdownEntryType = z.enum(["premium", "insurance_premium_tax"]); export const groupQuoteBreakdownEntryResponse = z.object({type: groupQuoteBreakdownEntryType, currency: z.string(), amount: z.number()}); export const groupQuoteDocumentResponse = z.object({url: z.string(), expires_at: z.string()}); export const premiumBasisType = z.enum(["employees", "estimate"]); export const premiumBasisStatus = z.enum(["current", "changed", "unknown"]); export const premiumBasisResponse = z.object({type: premiumBasisType, employee_count: z.number().int().nullable(), average_employee_age: z.number().int().nullable(), average_annual_salary: z.number().nullable(), status: premiumBasisStatus}); export const groupQuoteLevelResponse = z.object({group_id: z.string(), plan_id: z.string(), employee_count: z.number().int(), currency: z.string(), monthly_premium: z.number(), annual_premium: z.number(), cost_sharing: costSharingConfigurationResponse, quote_pdfs: z.array(groupQuoteDocumentResponse), premium_basis: premiumBasisResponse.optional()}); export const groupQuoteResponse = z.object({employee_count: z.number().int(), cost_sharing: costSharingConfigurationResponse.optional(), total_monthly_premium: z.number(), total_annual_premium: z.number(), currency: z.string(), breakdown: z.array(groupQuoteBreakdownEntryResponse), pdf_url: z.string().nullable().optional(), pdf_expires_at: z.string().nullable().optional(), quote_pdfs: z.array(groupQuoteDocumentResponse), levels: z.array(groupQuoteLevelResponse), generated_at: z.string(), expires_at: z.string(), object: z.string().optional()}); 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 }; /** * Retrieve the quote for a group quote intent * * GET /group_quote_intents/{group_quote_intent_id}/quote */ export const getApiGroupQuoteIntentsGroupQuoteIntentIdQuote = async (args: GetApiGroupQuoteIntentsGroupQuoteIntentIdQuoteArgs, options?: GetApiGroupQuoteIntentsGroupQuoteIntentIdQuoteOptions) => { const {baseUrl = "https://test.api.kota.io", fetch: fetchFn = fetch, bearerAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (bearerAuth !== undefined) headers.set('authorization', `Bearer ${bearerAuth}`) const url = `${baseUrl.replace(/\/+$/, '')}/group_quote_intents/${encodeURIComponent(String(args.group_quote_intent_id))}/quote${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(groupQuoteResponse, await res.json()) };