import {z} from 'zod' export type GetApiPortfolioAccountIdSummaryArgs = {accountId: string}; export type GetApiPortfolioAccountIdSummaryOptions = {baseUrl?: string | undefined, fetch?: typeof fetch | undefined}; export const summary = z.object({amount: z.number().optional(), currency: z.string().optional(), isNull: z.boolean().optional(), timestamp: z.number().int().optional(), value: z.string().optional()}); export const getApiPortfolioAccountIdSummaryResponse = z.object({accountready: summary.optional(), accounttype: summary.optional(), accruedcash: summary.optional(), "accruedcash-c": summary.optional(), "accruedcash-f": summary.optional(), "accruedcash-s": summary.optional(), accrueddividend: summary.optional(), "accrueddividend-c": summary.optional(), "accrueddividend-f": summary.optional(), "accrueddividend-s": summary.optional(), availablefunds: summary.optional(), "availablefunds-c": summary.optional(), "availablefunds-f": summary.optional(), "availablefunds-s": summary.optional(), billable: summary.optional(), "billable-c": summary.optional(), "billable-f": summary.optional(), "billable-s": summary.optional(), buyingpower: summary.optional(), cushion: summary.optional(), daytradesremaining: summary.optional(), "daytradesremainingt+1": summary.optional(), "daytradesremainingt+2": summary.optional(), "daytradesremainingt+3": summary.optional(), "daytradesremainingt+4": summary.optional(), equitywithloanvalue: summary.optional(), "equitywithloanvalue-c": summary.optional(), "equitywithloanvalue-f": summary.optional(), "equitywithloanvalue-s": summary.optional(), excessliquidity: summary.optional(), "excessliquidity-c": summary.optional(), "excessliquidity-f": summary.optional(), "excessliquidity-s": summary.optional(), fullavailablefunds: summary.optional(), "fullavailablefunds-c": summary.optional(), "fullavailablefunds-f": summary.optional(), "fullavailablefunds-s": summary.optional(), fullexcessliquidity: summary.optional(), "fullexcessliquidity-c": summary.optional(), "fullexcessliquidity-f": summary.optional(), "fullexcessliquidity-s": summary.optional(), fullinitmarginreq: summary.optional(), "fullinitmarginreq-c": summary.optional(), "fullinitmarginreq-f": summary.optional(), "fullinitmarginreq-s": summary.optional(), fullmaintmarginreq: summary.optional(), "fullmaintmarginreq-c": summary.optional(), "fullmaintmarginreq-f": summary.optional(), "fullmaintmarginreq-s": summary.optional(), grosspositionvalue: summary.optional(), "grosspositionvalue-c": summary.optional(), "grosspositionvalue-f": summary.optional(), "grosspositionvalue-s": summary.optional(), guarantee: summary.optional(), "guarantee-c": summary.optional(), "guarantee-f": summary.optional(), "guarantee-s": summary.optional(), highestseverity: summary.optional(), "highestseverity-c": summary.optional(), "highestseverity-f": summary.optional(), "highestseverity-s": summary.optional(), indianstockhaircut: summary.optional(), "indianstockhaircut-c": summary.optional(), "indianstockhaircut-f": summary.optional(), "indianstockhaircut-s": summary.optional(), initmarginreq: summary.optional(), "initmarginreq-c": summary.optional(), "initmarginreq-f": summary.optional(), "initmarginreq-s": summary.optional(), leverage: summary.optional(), "leverage-c": summary.optional(), "leverage-f": summary.optional(), "leverage-s": summary.optional(), lookaheadavailablefunds: summary.optional(), "lookaheadavailablefunds-c": summary.optional(), "lookaheadavailablefunds-f": summary.optional(), "lookaheadavailablefunds-s": summary.optional(), lookaheadexcessliquidity: summary.optional(), "lookaheadexcessliquidity-c": summary.optional(), "lookaheadexcessliquidity-f": summary.optional(), "lookaheadexcessliquidity-s": summary.optional(), lookaheadinitmarginreq: summary.optional(), "lookaheadinitmarginreq-c": summary.optional(), "lookaheadinitmarginreq-f": summary.optional(), "lookaheadinitmarginreq-s": summary.optional(), lookaheadmaintmarginreq: summary.optional(), "lookaheadmaintmarginreq-c": summary.optional(), "lookaheadmaintmarginreq-f": summary.optional(), "lookaheadmaintmarginreq-s": summary.optional(), lookaheadnextchange: summary.optional(), maintmarginreq: summary.optional(), "maintmarginreq-c": summary.optional(), "maintmarginreq-f": summary.optional(), "maintmarginreq-s": summary.optional(), netliquidation: summary.optional(), "netliquidation-c": summary.optional(), "netliquidation-f": summary.optional(), "netliquidation-s": summary.optional(), netliquidationuncertainty: summary.optional(), nlvandmargininreview: summary.optional(), pasharesvalue: summary.optional(), "pasharesvalue-c": summary.optional(), "pasharesvalue-f": summary.optional(), "pasharesvalue-s": summary.optional(), postexpirationexcess: summary.optional(), "postexpirationexcess-c": summary.optional(), "postexpirationexcess-f": summary.optional(), "postexpirationexcess-s": summary.optional(), postexpirationmargin: summary.optional(), "postexpirationmargin-c": summary.optional(), "postexpirationmargin-f": summary.optional(), "postexpirationmargin-s": summary.optional(), previousdayequitywithloanvalue: summary.optional(), "previousdayequitywithloanvalue-c": summary.optional(), "previousdayequitywithloanvalue-f": summary.optional(), "previousdayequitywithloanvalue-s": summary.optional(), "segmenttitle-c": summary.optional(), "segmenttitle-f": summary.optional(), "segmenttitle-s": summary.optional(), totalcashvalue: summary.optional(), "totalcashvalue-c": summary.optional(), "totalcashvalue-f": summary.optional(), "totalcashvalue-s": summary.optional(), totaldebitcardpendingcharges: summary.optional(), "totaldebitcardpendingcharges-c": summary.optional(), "totaldebitcardpendingcharges-f": summary.optional(), "totaldebitcardpendingcharges-s": summary.optional(), "tradingtype-f": summary.optional(), "tradingtype-s": summary.optional()}); 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 }; /** * Account Summary * * GET /portfolio/{accountId}/summary */ export const getApiPortfolioAccountIdSummary = async (args: GetApiPortfolioAccountIdSummaryArgs, options?: GetApiPortfolioAccountIdSummaryOptions) => { const {baseUrl = "http://localhost:5000/v1/api", fetch: fetchFn = fetch} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") const url = `${baseUrl.replace(/\/+$/, '')}/portfolio/${encodeURIComponent(String(args.accountId))}/summary${query.size > 0 ? `?${query}` : ''}` const res = await fetchFn(url, {method: "GET", headers}) if (!res.ok) throw new Error(`Request failed with status ${res.status}`, {cause: {status: res.status, body: await res.text()}}) return validateResponse(getApiPortfolioAccountIdSummaryResponse, await res.json()) };