/* * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. */ import { SDKCore } from "../core.js"; import { encodeJSON, encodeSimple } from "../lib/encodings.js"; import { matchStatusCode } from "../lib/http.js"; import * as M from "../lib/matchers.js"; import { compactMap } from "../lib/primitives.js"; import { safeParse } from "../lib/schemas.js"; import { RequestOptions } from "../lib/sdks.js"; import { extractSecurity, resolveGlobalSecurity } from "../lib/security.js"; import { pathToFunc } from "../lib/url.js"; import { ConnectionError, InvalidRequestError, RequestAbortedError, RequestTimeoutError, UnexpectedClientError, } from "../models/errors/httpclienterrors.js"; import * as errors from "../models/errors/index.js"; import { ResponseValidationError } from "../models/errors/responsevalidationerror.js"; import { SDKError } from "../models/errors/sdkerror.js"; import { SDKValidationError } from "../models/errors/sdkvalidationerror.js"; import * as operations from "../models/operations/index.js"; import { APICall, APIPromise } from "../types/async.js"; import { Result } from "../types/fp.js"; /** * Set up a WhatsApp app webhook (Beta) * * @remarks * Beta. Returns the app-level callback URL and verification token that must be saved in Meta before the first WhatsApp phone connector is created. The caller must be allowed to manage the agent. The stable verification token is returned only in this no-store response and is not a Meta access token. */ export function agentConnectorsSetupWhatsAppAppWebhook( client: SDKCore, request: operations.SetupWhatsAppAppWebhookRequest, options?: RequestOptions, ): APIPromise< Result< operations.SetupWhatsAppAppWebhookResponse, | errors.ErrorEnvelope | SDKError | ResponseValidationError | ConnectionError | RequestAbortedError | RequestTimeoutError | InvalidRequestError | UnexpectedClientError | SDKValidationError > > { return new APIPromise($do( client, request, options, )); } async function $do( client: SDKCore, request: operations.SetupWhatsAppAppWebhookRequest, options?: RequestOptions, ): Promise< [ Result< operations.SetupWhatsAppAppWebhookResponse, | errors.ErrorEnvelope | SDKError | ResponseValidationError | ConnectionError | RequestAbortedError | RequestTimeoutError | InvalidRequestError | UnexpectedClientError | SDKValidationError >, APICall, ] > { const parsed = safeParse( request, (value) => operations.SetupWhatsAppAppWebhookRequest$outboundSchema.parse(value), "Input validation failed", ); if (!parsed.ok) { return [parsed, { status: "invalid" }]; } const payload = parsed.value; const body = encodeJSON("body", payload.WhatsAppWebhookSetupRequest, { explode: true, }); const pathParams = { id: encodeSimple("id", payload.id, { explode: false, charEncoding: "percent", }), }; const path = pathToFunc("/api/v1/agents/{id}/connectors/whatsapp/setup")( pathParams, ); const headers = new Headers(compactMap({ "Content-Type": "application/json", Accept: "application/json", "X-On-Behalf-Of": encodeSimple( "X-On-Behalf-Of", payload["X-On-Behalf-Of"], { explode: false, charEncoding: "none" }, ), })); const secConfig = await extractSecurity(client._options.bearerAuth); const securityInput = secConfig == null ? {} : { bearerAuth: secConfig }; const requestSecurity = resolveGlobalSecurity(securityInput); const context = { options: client._options, baseURL: options?.serverURL ?? client._baseURL ?? "", operationID: "setupWhatsAppAppWebhook", oAuth2Scopes: null, resolvedSecurity: requestSecurity, securitySource: client._options.bearerAuth, retryConfig: options?.retries || client._options.retryConfig || { strategy: "backoff", backoff: { initialInterval: 500, maxInterval: 5000, exponent: 1.5, maxElapsedTime: 15000, }, retryConnectionErrors: true, } || { strategy: "none" }, retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], }; const requestRes = client._createRequest(context, { security: requestSecurity, method: "POST", baseURL: options?.serverURL, path: path, headers: headers, body: body, userAgent: client._options.userAgent, timeoutMs: options?.timeoutMs || client._options.timeoutMs || -1, }, options); if (!requestRes.ok) { return [requestRes, { status: "invalid" }]; } const req = requestRes.value; const doResult = await client._do(req, { context, isErrorStatusCode: (statusCode: number) => matchStatusCode({ status: statusCode } as Response, ["4XX", "5XX"]), retryConfig: context.retryConfig, retryCodes: context.retryCodes, }); if (!doResult.ok) { return [doResult, { status: "request-error", request: req }]; } const response = doResult.value; const responseFields = { HttpMeta: { Response: response, Request: req }, }; const [result] = await M.match< operations.SetupWhatsAppAppWebhookResponse, | errors.ErrorEnvelope | SDKError | ResponseValidationError | ConnectionError | RequestAbortedError | RequestTimeoutError | InvalidRequestError | UnexpectedClientError | SDKValidationError >( M.json(200, operations.SetupWhatsAppAppWebhookResponse$inboundSchema, { hdrs: true, key: "Result", }), M.jsonErr([400, 401, 403, 404], errors.ErrorEnvelope$inboundSchema), M.jsonErr(503, errors.ErrorEnvelope$inboundSchema), M.fail("4XX"), M.fail("5XX"), )(response, req, { extraFields: responseFields }); if (!result.ok) { return [result, { status: "complete", request: req, response }]; } return [result, { status: "complete", request: req, response }]; }