import {z} from 'zod' export type AppModelsCoreTierCustomPayloadTierType = 'free' | 'entry' | 'premium' | 'ultra'; export type StripePeriod = 'month' | 'year' | 'day'; export type ModelType = 'gpt-4.1' | 'gpt-4.1-mini' | 'gpt-4.1-nano' | 'gpt-4-omnimodel-mini' | 'gpt-4-omnimodel' | 'gpt-4-omnimodel-128k' | 'gpt-4-turbo' | 'gpt-4-turbo-128k' | 'gpt-4' | 'gpt-4-32k' | 'gpt-3.5-turbo' | 'gpt-3.5-turbo-1106' | 'gpt-3.5-turbo-16k' | 'falcon' | 'mistral' | 'wizardlm' | 'gemma' | 'llama2' | 'llama3' | 'llama3_8b' | 'cohere' | 'claude_3_opus_9k' | 'claude_3_opus_32k' | 'claude_3_opus_128k' | 'claude_3_opus_200k' | 'claude_3_sonnet' | 'claude_3_dot_5_sonnet' | 'claude_3_haiku' | 'claude_3_dot_7_sonnet' | 'claude_4_opus' | 'claude_4_sonnet' | 'gemini-2.0-flash' | 'gemini-2.5-flash' | 'gemini-2.0-flash-lite' | 'gpt-5' | 'gpt-5-mini' | 'gpt-5-nano' | 'claude_4_dot_5_sonnet' | 'claude_4_dot_1_opus' | 'claude_4_dot_5_haiku' | 'gemini-2.5-pro' | 'gemini-2.5-flash-lite' | 'gpt-5.1' | 'gemini-3-pro' | 'gpt-5.2' | 'gpt-5.4' | 'gemini-3-flash' | 'claude_4_dot_6_opus' | 'claude_4_6_sonnet' | 'gpt-5.4-mini' | 'gpt-5.4-nano' | 'gpt-5.5' | 'gpt-5.6-sol' | 'gpt-5.6-terra' | 'gpt-5.6-luna' | 'claude_4_7_opus' | 'claude_4_8_opus' | 'claude_5_opus' | 'claude_5_sonnet'; export type CreateApiTiersCustomTierArgs = {use_previous_tier_id?: string | undefined, user_id: string, based_on_type: AppModelsCoreTierCustomPayloadTierType, price: number, period: StripePeriod, name?: string | undefined, allowed_model?: ModelType | undefined, credits_per_month?: number | undefined, number_of_knowledgebases?: number | undefined, characters_per_knowledgebase?: number | undefined, embed_unlimited_websites?: boolean | undefined, upload_multiple_files?: boolean | undefined, upload_videos?: boolean | undefined, upload_images?: boolean | undefined, save_conversations?: boolean | undefined, voice_to_text?: boolean | undefined, api_access?: boolean | undefined, edit_knowledgebases?: boolean | undefined, remove_watermark?: boolean | undefined, white_labelled_solution?: boolean | undefined, chatbot_customization?: boolean | undefined, external_app_integration?: boolean | undefined, dedicated_support_agent?: boolean | undefined, upload_websites_feature?: boolean | undefined, custom_url?: number | undefined, sources?: boolean | undefined, analytics_dashboard?: boolean | undefined, whatsapp_integration?: boolean | undefined, share_conversations?: boolean | undefined, api_setup_support?: boolean | undefined}; export type CreateApiTiersCustomTierOptions = {baseUrl: string, OAuth2PasswordBearer?: string | undefined, fetch?: typeof fetch | undefined}; export const createApiTiersCustomTierResponse = z.object({}); 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 }; /** * Create Custom Tier * * POST /tiers/custom_tier */ export const createApiTiersCustomTier = async (args: CreateApiTiersCustomTierArgs, options: CreateApiTiersCustomTierOptions) => { const {baseUrl, fetch: fetchFn = fetch, OAuth2PasswordBearer} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.use_previous_tier_id != null) query.append("use_previous_tier_id", String(args.use_previous_tier_id)) if (args.user_id != null) query.append("user_id", String(args.user_id)) if (args.based_on_type != null) query.append("based_on_type", String(args.based_on_type)) if (args.price != null) query.append("price", String(args.price)) if (args.period != null) query.append("period", String(args.period)) if (args.name != null) query.append("name", String(args.name)) if (args.allowed_model != null) query.append("allowed_model", String(args.allowed_model)) if (args.credits_per_month != null) query.append("credits_per_month", String(args.credits_per_month)) if (args.number_of_knowledgebases != null) query.append("number_of_knowledgebases", String(args.number_of_knowledgebases)) if (args.characters_per_knowledgebase != null) query.append("characters_per_knowledgebase", String(args.characters_per_knowledgebase)) if (args.embed_unlimited_websites != null) query.append("embed_unlimited_websites", String(args.embed_unlimited_websites)) if (args.upload_multiple_files != null) query.append("upload_multiple_files", String(args.upload_multiple_files)) if (args.upload_videos != null) query.append("upload_videos", String(args.upload_videos)) if (args.upload_images != null) query.append("upload_images", String(args.upload_images)) if (args.save_conversations != null) query.append("save_conversations", String(args.save_conversations)) if (args.voice_to_text != null) query.append("voice_to_text", String(args.voice_to_text)) if (args.api_access != null) query.append("api_access", String(args.api_access)) if (args.edit_knowledgebases != null) query.append("edit_knowledgebases", String(args.edit_knowledgebases)) if (args.remove_watermark != null) query.append("remove_watermark", String(args.remove_watermark)) if (args.white_labelled_solution != null) query.append("white_labelled_solution", String(args.white_labelled_solution)) if (args.chatbot_customization != null) query.append("chatbot_customization", String(args.chatbot_customization)) if (args.external_app_integration != null) query.append("external_app_integration", String(args.external_app_integration)) if (args.dedicated_support_agent != null) query.append("dedicated_support_agent", String(args.dedicated_support_agent)) if (args.upload_websites_feature != null) query.append("upload_websites_feature", String(args.upload_websites_feature)) if (args.custom_url != null) query.append("custom_url", String(args.custom_url)) if (args.sources != null) query.append("sources", String(args.sources)) if (args.analytics_dashboard != null) query.append("analytics_dashboard", String(args.analytics_dashboard)) if (args.whatsapp_integration != null) query.append("whatsapp_integration", String(args.whatsapp_integration)) if (args.share_conversations != null) query.append("share_conversations", String(args.share_conversations)) if (args.api_setup_support != null) query.append("api_setup_support", String(args.api_setup_support)) if (OAuth2PasswordBearer !== undefined) headers.set('authorization', `Bearer ${OAuth2PasswordBearer}`) const url = `${baseUrl.replace(/\/+$/, '')}/tiers/custom_tier${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(createApiTiersCustomTierResponse, await res.json()) };