import {z} from 'zod' export type GetApiApiPublicV1InboundIntegrationSearchArgs = {DisplayName?: string | undefined, Type?: string | undefined, TeamId?: string | undefined}; export type GetApiApiPublicV1InboundIntegrationSearchOptions = {baseUrl: string, ApiKey?: string | undefined, fetch?: typeof fetch | undefined}; export const allQuietApiIntegrationsModelsSnoozeSettingsTimeFilter = z.object({selectedDays: z.array(z.string()).nullable().optional(), from: z.string().nullable().optional(), until: z.string().nullable().optional(), snoozeWindowInMinutes: z.number().int().gte(0).lte(1440).nullable().optional(), snoozeUntilAbsolute: z.string().nullable().optional(), snoozeUntilWeekdayAbsolute: z.string().nullable().optional()}); export const allQuietApiIntegrationsModelsSnoozeSettings = z.object({snoozeWindowInMinutes: z.number().int().gte(0).lte(1440).nullable().optional(), filters: z.array(allQuietApiIntegrationsModelsSnoozeSettingsTimeFilter).nullable().optional()}); export const allQuietApiIntegrationsModelsWebhookAuthenticationBearer = z.object({token: z.string().nullable().optional()}); export const allQuietApiIntegrationsModelsWebhookAuthentication = z.object({privateIpFilter: z.string().nullable().optional(), type: z.string().min(1), bearer: allQuietApiIntegrationsModelsWebhookAuthenticationBearer.optional()}); export const allQuietApiIntegrationsHttpMonitoringIntegrationSettingsHttpMonitoring = z.object({url: z.string().min(1), method: z.string().min(1), overrideAcceptedStatusCodes: z.array(z.number().int()).nullable().optional(), timeoutInMilliseconds: z.number().int(), intervalInSeconds: z.number().int(), maxRetries: z.number().int().gte(0).lte(5).optional(), authenticationType: z.string().nullable().optional(), basicAuthenticationUserName: z.string().nullable().optional(), basicAuthenticationPassword: z.string().nullable().optional(), bearerAuthenticationToken: z.string().nullable().optional(), headers: z.record(z.string(), z.string()).nullable().optional(), body: z.string().nullable().optional(), isPaused: z.boolean().optional(), contentTest: z.string().max(1024).nullable().optional(), contentTestMode: z.string().nullable().optional(), sslCertificateMaxAgeInDaysDegraded: z.number().int().nullable().optional(), sslCertificateMaxAgeInDaysDown: z.number().int().nullable().optional(), severityDegraded: z.string().nullable().optional(), severityDown: z.string().nullable().optional(), logResponseBody: z.boolean().optional(), ignoreNonHttpErrors: z.boolean().optional(), disableFollowRedirect: z.boolean().optional()}); export const allQuietApiIntegrationsHeartbeatMonitorIntegrationSettingsHeartbeatMonitor = z.object({intervalInSec: z.number().int().gte(0).lte(31536000), gracePeriodInSec: z.number().int().gte(0).lte(31536000), severity: z.string().min(1)}); export const allQuietApiIntegrationsCronJobMonitorIntegrationSettingsCronJobMonitor = z.object({gracePeriodInSec: z.number().int().gte(0).lte(31536000), severity: z.string().min(1), cronExpression: z.string().min(1), timeZoneId: z.string().min(1)}); export const allQuietApiIntegrationsPingMonitorIntegrationSettingsPingMonitor = z.object({host: z.string().min(1), timeoutInMilliseconds: z.number().int(), intervalInSeconds: z.number().int(), maxRetries: z.number().int().gte(0).lte(5).optional(), isPaused: z.boolean().optional(), severityDegraded: z.string().nullable().optional(), severityDown: z.string().nullable().optional()}); export const allQuietApiIntegrationsModelsIntegrationSettingsEmail = z.object({emailAddress: z.string().nullable().optional(), aliases: z.array(z.string()).nullable().optional()}); export const allQuietApiIntegrationsModelsTwilioInboundNumberSettings = z.object({apiBaseDomain: z.string().nullable().optional(), accountSid: z.string().nullable().optional(), authToken: z.string().nullable().optional(), phoneNumber: z.string().min(1), phoneNumberSid: z.string().nullable().optional()}); export const allQuietApiCallRoutingModelsInboundNumberAudioFile = z.object({objectKey: z.string().nullable().optional(), fileName: z.string().nullable().optional(), contentType: z.string().nullable().optional(), fileSizeBytes: z.number().int().nullable().optional(), durationSeconds: z.number().int().nullable().optional(), uploadedAt: z.string().nullable().optional(), uploadedByUserId: z.string().nullable().optional()}); export const allQuietApiCallRoutingModelsInboundNumberPrompt = z.object({type: z.string().nullable().optional(), text: z.string().nullable().optional(), locale: z.string().nullable().optional(), voice: z.string().nullable().optional(), audioFile: allQuietApiCallRoutingModelsInboundNumberAudioFile.optional()}); export const allQuietApiCallRoutingModelsInboundNumberRouteConfig = z.object({teamId: z.string().nullable().optional(), incidentSeverity: z.string().nullable().optional(), directVoicemail: z.boolean().optional(), sendToVoicemailIfNoResponse: z.boolean().optional(), voicemailMessage: allQuietApiCallRoutingModelsInboundNumberPrompt.optional(), closingMessage: allQuietApiCallRoutingModelsInboundNumberPrompt.optional(), autoResolveOnAnswer: z.boolean().optional(), skipAlreadyDialedNumbers: z.boolean().optional(), maxUsersToTry: z.number().int().optional(), dialTimeoutPerUserInSeconds: z.number().int().optional(), acceptCallPrompt: allQuietApiCallRoutingModelsInboundNumberPrompt.optional(), targetConfirmGatherTimeoutSeconds: z.number().int().optional(), targetConfirmMaxAttempts: z.number().int().optional()}); export const allQuietApiCallRoutingModelsInboundNumberMenuOption = z.object({key: z.string().nullable().optional(), route: allQuietApiCallRoutingModelsInboundNumberRouteConfig.optional()}); export const allQuietApiCallRoutingModelsInboundNumberMenuConfig = z.object({options: z.array(allQuietApiCallRoutingModelsInboundNumberMenuOption).nullable().optional(), menuMaxAttempts: z.number().int().optional(), menuGatherTimeoutSeconds: z.number().int().optional()}); export const allQuietApiCallRoutingModelsInboundNumberCallFlowConfig = z.object({welcomeMessage: allQuietApiCallRoutingModelsInboundNumberPrompt.optional(), callDisplayMode: z.string().nullable().optional(), attachVoicemailTranscript: z.boolean().optional(), callerAllowlist: z.array(z.string()).nullable().optional(), callerBlocklist: z.array(z.string()).nullable().optional(), route: allQuietApiCallRoutingModelsInboundNumberRouteConfig.optional(), menu: allQuietApiCallRoutingModelsInboundNumberMenuConfig.optional()}); export const allQuietApiCallRoutingModelsCallRoutingConfigurationStatus = z.object({lastUpdated: z.string().nullable().optional(), validationStatus: z.string().nullable().optional(), resolvedPhoneNumber: z.string().nullable().optional()}); export const allQuietApiIntegrationsModelsIntegrationSettingsTwilio = z.object({accessSettings: allQuietApiIntegrationsModelsTwilioInboundNumberSettings.optional(), callFlowConfig: allQuietApiCallRoutingModelsInboundNumberCallFlowConfig.optional(), providerWebhookId: z.string().nullable().optional(), configurationStatus: allQuietApiCallRoutingModelsCallRoutingConfigurationStatus.optional()}); export const allQuietApiIntegrationsModelsBirdInboundNumberSettings = z.object({apiBaseDomain: z.string().nullable().optional(), accessKey: z.string().nullable().optional(), webhookSigningKey: z.string().nullable().optional(), workspaceId: z.string().nullable().optional(), channelId: z.string().nullable().optional(), phoneNumber: z.string().nullable().optional()}); export const allQuietApiIntegrationsModelsIntegrationSettingsBird = z.object({accessSettings: allQuietApiIntegrationsModelsBirdInboundNumberSettings.optional(), callFlowConfig: allQuietApiCallRoutingModelsInboundNumberCallFlowConfig.optional(), providerWebhookId: z.string().nullable().optional(), configurationStatus: allQuietApiCallRoutingModelsCallRoutingConfigurationStatus.optional()}); export const allQuietApiPublicInboundIntegrationsInboundIntegrationResourceIntegrationSettingsResponse = z.object({httpMonitoring: allQuietApiIntegrationsHttpMonitoringIntegrationSettingsHttpMonitoring.optional(), heartbeatMonitor: allQuietApiIntegrationsHeartbeatMonitorIntegrationSettingsHeartbeatMonitor.optional(), cronJobMonitor: allQuietApiIntegrationsCronJobMonitorIntegrationSettingsCronJobMonitor.optional(), pingMonitor: allQuietApiIntegrationsPingMonitorIntegrationSettingsPingMonitor.optional(), email: allQuietApiIntegrationsModelsIntegrationSettingsEmail.optional(), twilio: allQuietApiIntegrationsModelsIntegrationSettingsTwilio.optional(), bird: allQuietApiIntegrationsModelsIntegrationSettingsBird.optional()}); export const allQuietApiPublicInboundIntegrationsInboundIntegrationResourceResponse = z.object({id: z.string().optional(), isProvisioned: z.boolean().optional(), displayName: z.string().nullable().optional(), type: z.string().nullable().optional(), teamId: z.string().optional(), labels: z.array(z.string()).nullable().optional(), isMuted: z.boolean().optional(), isInMaintenance: z.boolean().optional(), webhookUrl: z.string().nullable().optional(), snoozeSettings: allQuietApiIntegrationsModelsSnoozeSettings.optional(), noiseLimitInSeconds: z.number().int().nullable().optional(), webhookAuthentication: allQuietApiIntegrationsModelsWebhookAuthentication.optional(), integrationSettings: allQuietApiPublicInboundIntegrationsInboundIntegrationResourceIntegrationSettingsResponse.optional(), isRedacted: z.boolean().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 }; /** * Search for a single inbound integration * * GET /api/public/v1/inbound-integration/search */ export const getApiApiPublicV1InboundIntegrationSearch = async (args: GetApiApiPublicV1InboundIntegrationSearchArgs, options: GetApiApiPublicV1InboundIntegrationSearchOptions) => { const {baseUrl, fetch: fetchFn = fetch, ApiKey} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (args.DisplayName != null) query.append("DisplayName", String(args.DisplayName)) if (args.Type != null) query.append("Type", String(args.Type)) if (args.TeamId != null) query.append("TeamId", String(args.TeamId)) if (ApiKey !== undefined) headers.set("Authorization", ApiKey) const url = `${baseUrl.replace(/\/+$/, '')}/api/public/v1/inbound-integration/search${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(allQuietApiPublicInboundIntegrationsInboundIntegrationResourceResponse, await res.json()) };