/* * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT. */ import { ApexascendCore } from "../core.js"; import { encodeJSON, 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 * as components from "../models/components/index.js"; import { ApexascendError } from "../models/errors/apexascenderror.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"; /** * Create Order * * @remarks * Creates a new order for equity or fixed income securities. * * Equity quantities may be for fractional shares, whole shares, or notional dollar amounts. Fixed income orders may be specified in face value currency amounts, with prices expressed in conventional "percentage of par" values. * * Upon successful submission, if the request is a duplicate, returns the existing order in its current state in the system. If the request is not a duplicate, returns the summary of the newly submitted order. */ export function ordersCreateOrder( client: ApexascendCore, orderCreate: components.OrderCreate, accountId: string, options?: RequestOptions, ): APIPromise< Result< operations.OrderServiceCreateOrderResponse, | errors.Status | ApexascendError | ResponseValidationError | ConnectionError | RequestAbortedError | RequestTimeoutError | InvalidRequestError | UnexpectedClientError | SDKValidationError > > { return new APIPromise($do( client, orderCreate, accountId, options, )); } async function $do( client: ApexascendCore, orderCreate: components.OrderCreate, accountId: string, options?: RequestOptions, ): Promise< [ Result< operations.OrderServiceCreateOrderResponse, | errors.Status | ApexascendError | ResponseValidationError | ConnectionError | RequestAbortedError | RequestTimeoutError | InvalidRequestError | UnexpectedClientError | SDKValidationError >, APICall, ] > { const input: operations.OrderServiceCreateOrderRequest = { orderCreate: orderCreate, accountId: accountId, }; const parsed = safeParse( input, (value) => operations.OrderServiceCreateOrderRequest$outboundSchema.parse(value), "Input validation failed", ); if (!parsed.ok) { return [parsed, { status: "invalid" }]; } const payload = parsed.value; const body = encodeJSON("body", payload.OrderCreate, { explode: true }); const pathParams = { account_id: encodeSimple("account_id", payload.account_id, { explode: false, charEncoding: "percent", }), }; const path = pathToFunc("/trading/v1/accounts/{account_id}/orders")( pathParams, ); const headers = new Headers(compactMap({ "Content-Type": "application/json", Accept: "application/json", })); const securityInput = await extractSecurity(client._options.security); const requestSecurity = resolveGlobalSecurity(securityInput); const context = { options: client._options, baseURL: options?.serverURL ?? client._baseURL ?? "", operationID: "OrderService_CreateOrder", oAuth2Scopes: [], resolvedSecurity: requestSecurity, securitySource: client._options.security, 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 || ["4XX", "5XX"], }; 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, errorCodes: ["400", "401", "403", "409", "4XX", "500", "503", "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.OrderServiceCreateOrderResponse, | errors.Status | ApexascendError | ResponseValidationError | ConnectionError | RequestAbortedError | RequestTimeoutError | InvalidRequestError | UnexpectedClientError | SDKValidationError >( M.json(200, operations.OrderServiceCreateOrderResponse$inboundSchema, { key: "Order", }), M.jsonErr([400, 401, 403, 409], errors.Status$inboundSchema), M.jsonErr([500, 503], errors.Status$inboundSchema), M.fail("4XX"), M.fail("5XX"), M.json( "default", operations.OrderServiceCreateOrderResponse$inboundSchema, { key: "Status" }, ), )(response, req, { extraFields: responseFields }); if (!result.ok) { return [result, { status: "complete", request: req, response }]; } return [result, { status: "complete", request: req, response }]; }