import {z} from 'zod' export type GetApiV1StocksTickerBuybackProgramsArgs = {ticker: string}; export type GetApiV1StocksTickerBuybackProgramsOptions = {baseUrl?: string | undefined, ApiKey?: string | undefined, fetch?: typeof fetch | undefined}; export const buybackProgramDto = z.object({announcedDate: z.string().nullable().optional(), authorizedAmount: z.number().nullable().optional(), currency: z.string().nullable().optional(), expiresDate: z.string().nullable().optional(), remainingAmount: z.number().nullable().optional(), remainingAsOf: z.string().nullable().optional(), authorizedShares: z.number().nullable().optional(), remainingShares: z.number().nullable().optional(), remainingSharesAsOf: z.string().nullable().optional(), lastObservedFiledDate: z.string().optional(), latestForm: z.string().nullable().optional(), latestFilingUrl: z.string().nullable().optional()}); export const buybackPeriodDto = z.object({periodStart: z.string().optional(), periodEnd: z.string().optional(), dollarsRepurchased: z.number().optional(), unit: z.string().nullable().optional(), sharesRepurchased: z.number().nullable().optional(), impliedAveragePrice: z.number().nullable().optional(), reportedAveragePrice: z.number().nullable().optional(), splitBasisUnresolved: z.boolean().optional(), form: z.string().nullable().optional(), filedDate: z.string().optional(), dollarsDerived: z.boolean().optional(), sharesFromFiling: z.boolean().optional(), sharesFromQuarters: z.boolean().optional()}); export const buybackProgramsResponse = z.object({ticker: z.string().nullable().optional(), companyName: z.string().nullable().optional(), dollarsAreCombinedEquity: z.boolean().optional(), sharesOnCurrentSplitBasis: z.boolean().optional(), authorizedAmount: z.number().nullable().optional(), authorizedUnit: z.string().nullable().optional(), authorizedAsOf: z.string().nullable().optional(), remainingAuthorizedAmount: z.number().nullable().optional(), remainingAuthorizedUnit: z.string().nullable().optional(), remainingAuthorizedAsOf: z.string().nullable().optional(), programExpires: z.string().nullable().optional(), programs: z.array(buybackProgramDto).nullable().optional(), yearToDate: buybackPeriodDto.optional(), annualHistory: z.array(buybackPeriodDto).nullable().optional(), quarterlyHistory: z.array(buybackPeriodDto).nullable().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 }; /** * A company's share-repurchase picture: tracked buyback programs (authorized in money, shares or both), the latest authorization figures, and the repurchase history (cash spent, shares, average price) by fiscal year and recent quarters. Figures are XBRL facts plus verified extractions of the company's filings and press releases, including a Canadian normal course issuer bid's maximum number of shares; empty when nothing is on file. * * GET /v1/stocks/{ticker}/buyback-programs */ export const getApiV1StocksTickerBuybackPrograms = async (args: GetApiV1StocksTickerBuybackProgramsArgs, options?: GetApiV1StocksTickerBuybackProgramsOptions) => { const {baseUrl = "https://api.equibles.com", fetch: fetchFn = fetch, ApiKey} = options ?? {} const query = new URLSearchParams() const headers = new Headers() headers.set('accept', "application/json") if (ApiKey !== undefined) headers.set('authorization', `Bearer ${ApiKey}`) const url = `${baseUrl.replace(/\/+$/, '')}/v1/stocks/${encodeURIComponent(String(args.ticker))}/buyback-programs${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(buybackProgramsResponse, await res.json()) };