import {z} from 'zod' export type TwilioIntegrationAccountBasicAuthType = 'basic'; export type TwilioIntegrationAccountAuthenticationRequest = {auth_type: TwilioIntegrationAccountBasicAuthType, password: string, username: string}; 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 TwilioIntegrationAccountSettingsRequest = {account_sid: string, censor_logs?: boolean | undefined}; export type TwilioIntegrationAccountCreateAttributes = {authentication: TwilioIntegrationAccountAuthenticationRequest, dataflows?: TwilioIntegrationDataflowsRequest | undefined, name: string, settings: TwilioIntegrationAccountSettingsRequest}; export type IntegrationAccountType = 'integration-account'; export type TwilioIntegrationAccountCreateData = {attributes: TwilioIntegrationAccountCreateAttributes, type: IntegrationAccountType}; export type TwilioIntegrationAccountCreateRequest = {data: TwilioIntegrationAccountCreateData}; export type CreateApiApiV2IntegrationInterfacesTwilioAccountsArgs = {body: TwilioIntegrationAccountCreateRequest}; export type CreateApiApiV2IntegrationInterfacesTwilioAccountsOptions = {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 }; /** * Create a Twilio integration account * * POST /api/v2/integration-interfaces/twilio/accounts * * Also accepts auth: AuthZ */ export const createApiApiV2IntegrationInterfacesTwilioAccounts = async (args: CreateApiApiV2IntegrationInterfacesTwilioAccountsArgs, options?: CreateApiApiV2IntegrationInterfacesTwilioAccountsOptions) => { 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${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "POST", 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()) };