/* * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. */ import { Gr4vyCore } from "../core.js"; import { 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 { Gr4vyError } from "../models/errors/gr4vyerror.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 { 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"; /** * Void transaction * * @remarks * Voids a previously authorized transaction. If the transaction was not yet successfully authorized, or was already captured, the void will not be processed. This operation releases the hold on the buyer's funds. Captured transactions can be refunded instead. */ export function transactionsVoid( client: Gr4vyCore, transactionId: string, prefer?: Array | null | undefined, merchantAccountId?: string | null | undefined, idempotencyKey?: string | null | undefined, options?: RequestOptions, ): APIPromise< Result< operations.VoidTransactionResponse200VoidTransaction, | errors.Error400 | errors.Error401 | errors.Error403 | errors.Error404 | errors.Error405 | errors.Error409 | errors.HTTPValidationError | errors.Error425 | errors.Error429 | errors.Error500 | errors.Error502 | errors.Error504 | Gr4vyError | ResponseValidationError | ConnectionError | RequestAbortedError | RequestTimeoutError | InvalidRequestError | UnexpectedClientError | SDKValidationError > > { return new APIPromise($do( client, transactionId, prefer, merchantAccountId, idempotencyKey, options, )); } async function $do( client: Gr4vyCore, transactionId: string, prefer?: Array | null | undefined, merchantAccountId?: string | null | undefined, idempotencyKey?: string | null | undefined, options?: RequestOptions, ): Promise< [ Result< operations.VoidTransactionResponse200VoidTransaction, | errors.Error400 | errors.Error401 | errors.Error403 | errors.Error404 | errors.Error405 | errors.Error409 | errors.HTTPValidationError | errors.Error425 | errors.Error429 | errors.Error500 | errors.Error502 | errors.Error504 | Gr4vyError | ResponseValidationError | ConnectionError | RequestAbortedError | RequestTimeoutError | InvalidRequestError | UnexpectedClientError | SDKValidationError >, APICall, ] > { const input: operations.VoidTransactionRequest = { transactionId: transactionId, prefer: prefer, merchantAccountId: merchantAccountId, idempotencyKey: idempotencyKey, }; const parsed = safeParse( input, (value) => operations.VoidTransactionRequest$outboundSchema.parse(value), "Input validation failed", ); if (!parsed.ok) { return [parsed, { status: "invalid" }]; } const payload = parsed.value; const body = null; const pathParams = { transaction_id: encodeSimple("transaction_id", payload.transaction_id, { explode: false, charEncoding: "percent", }), }; const path = pathToFunc("/transactions/{transaction_id}/void")(pathParams); const headers = new Headers(compactMap({ Accept: "application/json", "idempotency-key": encodeSimple( "idempotency-key", payload["idempotency-key"], { explode: false, charEncoding: "none" }, ), "x-gr4vy-merchant-account-id": encodeSimple( "x-gr4vy-merchant-account-id", payload.merchantAccountId ?? client._options.merchantAccountId, { explode: false, charEncoding: "none" }, ), "prefer": encodeSimple("prefer", payload.prefer, { 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: "void_transaction", oAuth2Scopes: null, resolvedSecurity: requestSecurity, securitySource: client._options.bearerAuth, retryConfig: options?.retries || client._options.retryConfig || { 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.VoidTransactionResponse200VoidTransaction, | errors.Error400 | errors.Error401 | errors.Error403 | errors.Error404 | errors.Error405 | errors.Error409 | errors.HTTPValidationError | errors.Error425 | errors.Error429 | errors.Error500 | errors.Error502 | errors.Error504 | Gr4vyError | ResponseValidationError | ConnectionError | RequestAbortedError | RequestTimeoutError | InvalidRequestError | UnexpectedClientError | SDKValidationError >( M.json( 200, operations.VoidTransactionResponse200VoidTransaction$inboundSchema, ), M.jsonErr(400, errors.Error400$inboundSchema), M.jsonErr(401, errors.Error401$inboundSchema), M.jsonErr(403, errors.Error403$inboundSchema), M.jsonErr(404, errors.Error404$inboundSchema), M.jsonErr(405, errors.Error405$inboundSchema), M.jsonErr(409, errors.Error409$inboundSchema), M.jsonErr(422, errors.HTTPValidationError$inboundSchema), M.jsonErr(425, errors.Error425$inboundSchema), M.jsonErr(429, errors.Error429$inboundSchema), M.jsonErr(500, errors.Error500$inboundSchema), M.jsonErr(502, errors.Error502$inboundSchema), M.jsonErr(504, errors.Error504$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 }]; }