import {z} from 'zod' export type GetApiV1ProjectsProjectIdWhatsappSendersSenderIdArgs = {projectId: string, senderId: string}; export type GetApiV1ProjectsProjectIdWhatsappSendersSenderIdOptions = {baseUrl?: string | undefined, BasicAuth?: {username: string, password: string} | undefined, BearerAuth?: string | undefined, OAuth2Production?: string | undefined, fetch?: typeof fetch | undefined}; export const whatsappSenderStatesEnum = z.enum(["ACTIVE", "IN_PROGRESS", "INACTIVE", "PENDING_VERIFICATION", "SUSPENDED", "ERROR"]); export const whatsappSenderStatusesEnum = z.enum(["DRAFT", "ERROR", "IN_PROGRESS", "MULTIPLE_WABA_ERROR", "REJECTED"]); export const whatsappSenderWhatsAppVerticalEnum = z.enum(["ALCOHOL", "AUTOMOTIVE", "BEAUTY_SPA_SALON", "CLOTHING_AND_APPAREL", "EDUCATION", "ENTERTAINMENT", "EVENT_PLANNING_AND_SERVICE", "FINANCE_AND_BANKING", "FOOD_AND_GROCERY", "HOTEL_AND_LODGING", "MEDICAL_AND_HEALTH", "NON_PROFIT", "NOT_SET", "ONLINE_GAMBLING", "OTC_DRUGS", "OTHER", "PHYSICAL_GAMBLING", "PROFESSIONAL_SERVICES", "PUBLIC_SERVICE", "RESTAURANT", "SHOPPING_AND_RETAIL", "TRAVEL_AND_TRANSPORTATION", "UNRECOGNIZED"]); export const whatsappSenderErrorCodeEnum = z.enum(["CANNOT_ASSIGN_CREDIT_LINE", "CANNOT_ASSIGN_SYSTEM_USER", "CANNOT_CREATE_NEW_WHATSAPP_SENDER", "CANNOT_CREATE_WABA_FOR_BUSINESS", "CANNOT_GET_DETAILS_FOR_CLOUD_API", "CANNOT_GET_WABA_DETAILS", "CANNOT_REGISTER_NEW_WHATSAPP_SENDER", "CANNOT_REGISTER_TO_CLOUD_API", "CANNOT_SUBSCRIBE_TO_CLOUD_API", "CANNOT_SUBSCRIBE_TO_WEBHOOK", "DUPLICATES_ON_SENDER_PHONE_NUMBER", "FAILED_TO_FETCH_APPROVED_MESSAGE_TEMPLATES", "MULTIPLE_WABA_FOR_PROJECT_ID", "NO_CERTIFICATE_AVAILABLE", "NO_NOVA_ACCOUNT_ID", "NO_PRICING_PLAN", "NO_PROJECT_ID", "NO_VERIFIED_PHONE_NUMBER", "NOT_VERIFIED_REQUESTED_PHONE_NUMBER", "NOT_VERIFY_BUSINESS_VIA_WHATSAPP", "NOVA_ACCOUNT_ID_CONFLICT", "PROJECT_ID_CONFLICT", "REQUESTED_PHONE_NUMBER_OR_COUNTRY_CODE_CONFLICT", "SENDER_HAS_BEEN_DELETED", "WABA_CONNECTED_TO_ANOTHER_PROJECT", "UNKNOWN_ERROR", "UNRECOGNIZED"]); export const whatsappSenderChangesDto = z.object({status: whatsappSenderStatusesEnum, details: z.union([z.object({displayName: z.string(), description: z.string().optional(), vertical: whatsappSenderWhatsAppVerticalEnum, email: z.string().optional(), address: z.string().optional(), websiteOne: z.string().optional(), websiteTwo: z.string().optional(), about: z.string().optional(), photoUrl: z.string().optional(), username: z.string().optional()}), z.object({displayName: z.string().optional(), description: z.string().optional(), vertical: whatsappSenderWhatsAppVerticalEnum.optional(), email: z.string().optional(), address: z.string().optional(), websiteOne: z.string().optional(), websiteTwo: z.string().optional(), about: z.string().optional(), photoUrl: z.string().optional(), username: z.string().optional()})]).optional(), errorReason: z.string().optional(), errorCode: whatsappSenderErrorCodeEnum.optional()}); export const whatsappSenderDetailsDto = z.object({displayName: z.string(), description: z.string().optional(), vertical: whatsappSenderWhatsAppVerticalEnum, email: z.string().optional(), address: z.string().optional(), websiteOne: z.string().optional(), websiteTwo: z.string().optional(), about: z.string().optional(), photoUrl: z.string().optional(), username: z.string().optional()}); export const whatsappWhatsAppSenderFieldUpdateStatusEnum = z.enum(["APPROVED", "DEFERRED", "DELETED", "EXPIRED", "PENDING", "REJECTED", "RESERVED", "UNRECOGNIZED", "UNSPECIFIED"]); export const whatsappSenderMetadataFieldDto = z.object({value: z.string().optional(), status: whatsappWhatsAppSenderFieldUpdateStatusEnum, rejectionReason: z.string().optional()}); export const whatsappSenderMetadataDto = z.object({displayName: whatsappSenderMetadataFieldDto.optional(), username: whatsappSenderMetadataFieldDto.optional()}); export const whatsappSenderBotRegionEnum = z.enum(["BR", "EU", "US", "UNRECOGNIZED"]); export const whatsappSenderMetaLocalStoragesEnum = z.enum(["AE", "AU", "BH", "BR", "CA", "CH", "DE", "GB", "ID", "IN", "JP", "KR", "SG", "US", "ZA", "UNRECOGNIZED", "UNSPECIFIED"]); export const whatsappConversationApiAppRegionsEnum = z.enum(["BR", "EU", "US", "UNRECOGNIZED"]); export const whatsappConversationAppChannelIntegrationStatusEnum = z.enum(["ACTIVE", "FAILING", "PENDING", "UNRECOGNIZED"]); export const whatsappConversationApiAppDto = z.object({id: z.string(), projectId: z.string(), region: whatsappConversationApiAppRegionsEnum, channelStatus: whatsappConversationAppChannelIntegrationStatusEnum.optional()}); export const whatsappQualityRatingEnum = z.enum(["GREEN", "RED", "YELLOW", "UNKNOWN", "UNRECOGNIZED"]); export const whatsappDailyLimitEnum = z.enum(["NOT_SET", "TIER_100K", "TIER_10K", "TIER_1K", "TIER_250", "TIER_2K", "TIER_50", "TIER_UNLIMITED", "UNRECOGNIZED"]); export const whatsappSenderNumberProviderTypeEnum = z.enum(["CUSTOMER", "SINCH", "UNRECOGNIZED"]); export const whatsappBusinessManagersEnum = z.enum(["SINCH_AMERICA", "SINCH_BR", "SINCH_MX", "SINCH_SEP", "SINCH_UK", "UNRECOGNIZED"]); export const whatsappWabaBanStatesEnum = z.enum(["DISABLE", "REINSTATE", "SCHEDULE_FOR_DISABLE", "UNRECOGNIZED"]); export const whatsappConversationAppRegionsEnum = z.enum(["br", "eu", "us"]); export const whatsappSenderDto = z.object({id: z.string(), state: whatsappSenderStatesEnum.optional(), changes: whatsappSenderChangesDto.optional(), details: whatsappSenderDetailsDto.optional(), metadata: whatsappSenderMetadataDto.optional(), region: whatsappSenderBotRegionEnum, metaLocalStorage: whatsappSenderMetaLocalStoragesEnum, conversationApiApp: z.string().optional(), conversationApiAppDetails: whatsappConversationApiAppDto.optional(), maxTps: z.number().optional(), qualityRating: whatsappQualityRatingEnum.optional(), dailyLimit: whatsappDailyLimitEnum.optional(), bearerToken: z.string().optional(), cloudApi: z.boolean(), created: z.string().optional(), modified: z.string().optional(), countryCode: z.string().optional(), phoneNumber: z.string().optional(), numberProvider: whatsappSenderNumberProviderTypeEnum.optional(), businessManager: whatsappBusinessManagersEnum, wabaBanState: whatsappWabaBanStatesEnum.optional(), wabaBanDate: z.string().optional(), compatibleRegions: z.array(whatsappConversationAppRegionsEnum)}); 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 }; /** * Get sender for project * * GET /v1/projects/{projectId}/whatsapp/senders/{senderId} */ export const getApiV1ProjectsProjectIdWhatsappSendersSenderId = async (args: GetApiV1ProjectsProjectIdWhatsappSendersSenderIdArgs, options?: GetApiV1ProjectsProjectIdWhatsappSendersSenderIdOptions) => { const {baseUrl = "https://provisioning.api.sinch.com", fetch: fetchFn = fetch, BasicAuth, BearerAuth, OAuth2Production} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (BasicAuth !== undefined) headers.set('authorization', `Basic ${btoa(`${BasicAuth.username}:${BasicAuth.password}`)}`) if (BearerAuth !== undefined) headers.set('authorization', `Bearer ${BearerAuth}`) if (OAuth2Production !== undefined) headers.set('authorization', `Bearer ${OAuth2Production}`) const url = `${baseUrl.replace(/\/+$/, '')}/v1/projects/${encodeURIComponent(String(args.projectId))}/whatsapp/senders/${encodeURIComponent(String(args.senderId))}${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(whatsappSenderDto, await res.json()) };