import {z} from 'zod' export type TwilioIntegrationAccountBasicAuthType = 'basic'; export type TwilioIntegrationAccountAuthenticationUpdate = {auth_type: TwilioIntegrationAccountBasicAuthType, password?: string | undefined, username?: string | undefined}; export type TwilioAlertsLogsIntegrationDataflowRequest = {enabled?: boolean | undefined}; export type TwilioCallSummariesLogsIntegrationDataflowRequest = {enabled?: boolean | undefined}; export type TwilioCloudCostMetricsIntegrationDataflowRequest = {enabled?: boolean | undefined}; export type TwilioEventsLogsIntegrationDataflowRequest = {enabled?: boolean | undefined}; export type TwilioMessagesLogsIntegrationDataflowRequest = {enabled?: boolean | undefined}; export type TwilioIntegrationDataflowsRequest = {'twilio-alerts-logs'?: TwilioAlertsLogsIntegrationDataflowRequest | undefined, 'twilio-call-summaries-logs'?: TwilioCallSummariesLogsIntegrationDataflowRequest | undefined, 'twilio-cloud-cost-metrics'?: TwilioCloudCostMetricsIntegrationDataflowRequest | undefined, 'twilio-events-logs'?: TwilioEventsLogsIntegrationDataflowRequest | undefined, 'twilio-messages-logs'?: TwilioMessagesLogsIntegrationDataflowRequest | undefined}; export type TwilioIntegrationAccountSettingsUpdate = {account_sid?: string | undefined, censor_logs?: boolean | undefined}; export type TwilioIntegrationAccountUpdateAttributes = {authentication?: TwilioIntegrationAccountAuthenticationUpdate | undefined, dataflows?: TwilioIntegrationDataflowsRequest | undefined, name?: string | undefined, settings?: TwilioIntegrationAccountSettingsUpdate | undefined}; export type IntegrationAccountType = 'integration-account'; export type TwilioIntegrationAccountUpdateData = {attributes: TwilioIntegrationAccountUpdateAttributes, id: string, type: IntegrationAccountType}; export type TwilioIntegrationAccountUpdateRequest = {data: TwilioIntegrationAccountUpdateData}; export type PatchApiApiV2IntegrationInterfacesTwilioAccountsAccountIdArgs = {account_id: string, body: TwilioIntegrationAccountUpdateRequest}; export type PatchApiApiV2IntegrationInterfacesTwilioAccountsAccountIdOptions = {baseUrl?: string | undefined, apiKeyAuth?: string | undefined, appKeyAuth?: string | undefined, fetch?: typeof fetch | undefined}; export const twilioIntegrationAccountBasicAuthType = z.literal("basic"); export const twilioIntegrationAccountAuthenticationResponse = z.object({auth_type: twilioIntegrationAccountBasicAuthType, username: z.string()}); export const integrationAccountDataflowHealth = z.enum(["DATAFLOW_HEALTH_OK", "DATAFLOW_HEALTH_BROKEN", "DATAFLOW_HEALTH_UNKNOWN"]); export const integrationAccountDataflowStatus = z.object({health: integrationAccountDataflowHealth.optional(), message: z.string().optional(), updated_at: z.string().optional()}); export const twilioAlertsLogsIntegrationDataflowResponse = z.object({enabled: z.boolean().optional(), status: integrationAccountDataflowStatus.optional()}); export const twilioCallSummariesLogsIntegrationDataflowResponse = z.object({enabled: z.boolean().optional(), status: integrationAccountDataflowStatus.optional()}); export const twilioCloudCostMetricsIntegrationDataflowResponse = z.object({enabled: z.boolean().optional(), status: integrationAccountDataflowStatus.optional()}); export const twilioEventsLogsIntegrationDataflowResponse = z.object({enabled: z.boolean().optional(), status: integrationAccountDataflowStatus.optional()}); export const twilioMessagesLogsIntegrationDataflowResponse = z.object({enabled: z.boolean().optional(), status: integrationAccountDataflowStatus.optional()}); export const twilioIntegrationDataflowsResponse = z.object({"twilio-alerts-logs": twilioAlertsLogsIntegrationDataflowResponse.optional(), "twilio-call-summaries-logs": twilioCallSummariesLogsIntegrationDataflowResponse.optional(), "twilio-cloud-cost-metrics": twilioCloudCostMetricsIntegrationDataflowResponse.optional(), "twilio-events-logs": twilioEventsLogsIntegrationDataflowResponse.optional(), "twilio-messages-logs": twilioMessagesLogsIntegrationDataflowResponse.optional()}); export const twilioIntegrationAccountSettingsResponse = z.object({account_sid: z.string(), censor_logs: z.boolean().optional()}); export const twilioIntegrationAccountResponseAttributes = z.object({authentication: twilioIntegrationAccountAuthenticationResponse.optional(), dataflows: twilioIntegrationDataflowsResponse.optional(), name: z.string(), settings: twilioIntegrationAccountSettingsResponse}); export const integrationAccountType = z.literal("integration-account"); export const twilioIntegrationAccountResponseData = z.object({attributes: twilioIntegrationAccountResponseAttributes, id: z.string(), type: integrationAccountType}); export const twilioIntegrationAccountResponse = z.object({data: twilioIntegrationAccountResponseData}); 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 }; /** * Update a Twilio integration account * * PATCH /api/v2/integration-interfaces/twilio/accounts/{account_id} * * Also accepts auth: AuthZ */ export const patchApiApiV2IntegrationInterfacesTwilioAccountsAccountId = async (args: PatchApiApiV2IntegrationInterfacesTwilioAccountsAccountIdArgs, options?: PatchApiApiV2IntegrationInterfacesTwilioAccountsAccountIdOptions) => { const {baseUrl = "https://api.datadoghq.com", fetch: fetchFn = fetch, apiKeyAuth, appKeyAuth} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('content-type', "application/json") headers.set('accept', "application/json") if (apiKeyAuth !== undefined) headers.set("DD-API-KEY", apiKeyAuth) if (appKeyAuth !== undefined) headers.set("DD-APPLICATION-KEY", appKeyAuth) const url = `${baseUrl.replace(/\/+$/, '')}/api/v2/integration-interfaces/twilio/accounts/${encodeURIComponent(String(args.account_id))}${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "PATCH", headers, body: JSON.stringify(args.body)}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(twilioIntegrationAccountResponse, await res.json()) };