/* * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. */ import { MoovCore } from "../core.js"; import { encodeFormQuery, encodeSimple } from "../lib/encodings.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 { MoovError } from "../models/errors/mooverror.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"; /** * Search for financial institutions by name or routing number. * * This endpoint returns metadata about each matched institution, including basic identifying details (such as name, routing number, and address) and information about which payment services they support (e.g., ACH, RTP, and Wire). * * This can be used to validate a financial institution before initiating payment activity, or to check which payment rails are available for a given routing number. * * To access this endpoint using an [access token](https://docs.moov.io/api/authentication/access-tokens/) * you'll need to specify the `/institutions.read` scope. */ export function institutionsSearchInstitutions( client: MoovCore, request: operations.SearchInstitutionsRequest, options?: RequestOptions, ): APIPromise< Result< operations.SearchInstitutionsResponse, | MoovError | ResponseValidationError | ConnectionError | RequestAbortedError | RequestTimeoutError | InvalidRequestError | UnexpectedClientError | SDKValidationError > > { return new APIPromise($do( client, request, options, )); } async function $do( client: MoovCore, request: operations.SearchInstitutionsRequest, options?: RequestOptions, ): Promise< [ Result< operations.SearchInstitutionsResponse, | MoovError | ResponseValidationError | ConnectionError | RequestAbortedError | RequestTimeoutError | InvalidRequestError | UnexpectedClientError | SDKValidationError >, APICall, ] > { const parsed = safeParse( request, (value) => operations.SearchInstitutionsRequest$outboundSchema.parse(value), "Input validation failed", ); if (!parsed.ok) { return [parsed, { status: "invalid" }]; } const payload = parsed.value; const body = null; const path = pathToFunc("/institutions")(); const query = encodeFormQuery({ "limit": payload.limit, "name": payload.name, "routingNumber": payload.routingNumber, }, { explode: false }); const headers = new Headers(compactMap({ Accept: "application/json", "X-Moov-Version": encodeSimple( "X-Moov-Version", client._options.xMoovVersion, { explode: false, charEncoding: "none" }, ), })); const securityInput = await extractSecurity(client._options.security); const requestSecurity = resolveGlobalSecurity(securityInput); const context = { options: client._options, baseURL: options?.serverURL ?? client._baseURL ?? "", operationID: "searchInstitutions", oAuth2Scopes: null, resolvedSecurity: requestSecurity, securitySource: client._options.security, retryConfig: options?.retries || client._options.retryConfig || { strategy: "none" }, retryCodes: options?.retryCodes || ["429", "500", "502", "503", "504"], }; const requestRes = client._createRequest(context, { security: requestSecurity, method: "GET", baseURL: options?.serverURL, path: path, headers: headers, query: query, 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, errorCodes: ["401", "403", "404", "429", "4XX", "500", "504", "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.SearchInstitutionsResponse, | MoovError | ResponseValidationError | ConnectionError | RequestAbortedError | RequestTimeoutError | InvalidRequestError | UnexpectedClientError | SDKValidationError >( M.json(200, operations.SearchInstitutionsResponse$inboundSchema, { hdrs: true, key: "Result", }), M.fail([401, 403, 404, 429]), M.fail([500, 504]), 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 }]; }