/** * Composable Request Builder * * A type-safe, chainable request builder for the Yahoo Fantasy API. * * @module */ import type { HttpClient, RequestOptions } from '../client/HttpClient.js'; import type { PlayerStatusFilter, RosterChangeRequest, SortFilter } from '../types/request/filters.js'; import type { GameKeyLike, LeagueKeyLike, PendingTradeKeyLike, PlayerKeyLike, SubResourceName, TeamKeyLike, TransactionKeyLike, WaiverClaimKeyLike } from '../types/request/graph.js'; import type { InferResponseType } from '../types/request/response-routes.js'; import type { AllResponseTypes } from '../types/request/responses.js'; import type { FilterKeyForStage, NavigationMethodNamesForStage, NextStage, OutValueForStage, ParamHelperMethodsForStage, RouteStage, StagesWithNext, WriteMethodNamesForStage } from '../types/request/schema.js'; import type { TransactionBuilder } from './transaction.js'; /** * Path segment type used internally to build request paths. * There are two possible types of segments: * - `/{resource}/{resource_key}[;out={sub_resource}[,{multi_sub_resource},...]][;{key}={value}]` * - `/{collection};{resource}_keys={key}[,{key2},...][;out={sub_resource}[,{multi_sub_resource},...]][;{key}={value}]` */ export type PathSegment = ({ type: 'resource'; key: string; } | { type: 'collection'; keys?: string | string[]; }) & { name: string; out?: SubResourceName[]; filters?: Record; }; interface RequestState { stage: RouteStage; segments: PathSegment[]; method: 'GET' | 'POST' | 'PUT' | 'DELETE'; body?: Record | string; options?: WriteRequestOptions; dispatchPath?: string; hasExecutedWriteRequest: boolean; } type FilterValue = string | string[] | number; type TerminalMethodNames = 'buildPath' | 'execute' | 'post' | 'put' | 'delete' | 'toString' | '__pathType' | '__outType'; type BaseFilterMethodNames = 'filters'; type SharedMethodNames = TerminalMethodNames | BaseFilterMethodNames; type WriteRequestOptions = Omit; type DateFilterInput = string | Date; type SplitCommaSeparated = TValue extends `${infer THead},${infer TTail}` ? THead | SplitCommaSeparated : TValue; type SelectedOutFromValue = TValue extends readonly (infer TItem)[] ? Extract : TValue extends string ? SplitCommaSeparated : never; type MergeSelectedOut = Extract, OutValueForStage>; type StageMethodNames = SharedMethodNames | NavigationMethodNamesForStage | ParamHelperMethodsForStage | WriteMethodNamesForStage; type StageView = never> = Pick, Extract, keyof RequestBuilder>>; /** * Composable Request Builder */ export declare class RequestBuilder = never> { readonly __pathType: TStage; readonly __outType: TSelectedOut; protected state: RequestState; protected httpClient: HttpClient; constructor(httpClient: HttpClient); private getCurrentStageConfig; private getNextRuntimeStage; private stageAllowsWriteMethod; private assertWriteMethodAllowed; private stageSerializesObjectBodyAsYahooXml; private assertOutValuesAllowed; private addSegment; private getCurrentSegment; private setOutValue; private normalizeOutValue; private setFilter; private setFilters; private normalizeDateValue; private serializeToYahooXml; private normalizeWriteBody; private assertTransactionsCollectionPath; private isTransactionResourcePath; private assertTransactionWritePath; private assertTeamRosterPath; private buildRosterChangePayload; private setPendingWriteRequest; private clearPendingWriteRequest; private asStage; game(key: GameKeyLike): StageView<'game'>; league(key: LeagueKeyLike): StageView<'league'>; team(key: TeamKeyLike): StageView<'team'>; player(key: PlayerKeyLike): StageView<'player'>; transaction(key: TransactionKeyLike | WaiverClaimKeyLike | PendingTradeKeyLike): StageView<'transaction'>; users(): StageView<'users'>; settings(): TStage extends StagesWithNext<'settings'> ? StageView> : never; standings(): TStage extends StagesWithNext<'standings'> ? StageView> : never; scoreboard(): TStage extends StagesWithNext<'scoreboard'> ? StageView> : never; roster(filters?: { week?: string | number; date?: DateFilterInput; }): TStage extends StagesWithNext<'roster'> ? StageView> : never; matchups(filters?: { weeks?: string; }): TStage extends StagesWithNext<'matchups'> ? StageView> : never; stats(filters?: { type?: string; week?: string | number; date?: DateFilterInput; }): TStage extends StagesWithNext<'stats'> ? StageView> : never; ownership(): TStage extends StagesWithNext<'ownership'> ? StageView> : never; percentOwned(): TStage extends StagesWithNext<'percentOwned'> ? StageView> : never; draftAnalysis(): TStage extends StagesWithNext<'draftAnalysis'> ? StageView> : never; statCategories(): TStage extends StagesWithNext<'statCategories'> ? StageView> : never; positionTypes(): TStage extends StagesWithNext<'positionTypes'> ? StageView> : never; gameWeeks(): TStage extends StagesWithNext<'gameWeeks'> ? StageView> : never; leagues(): TStage extends StagesWithNext<'leagues'> ? StageView> : never; teams(): TStage extends StagesWithNext<'teams'> ? StageView> : never; players(): TStage extends StagesWithNext<'players'> ? StageView> : never; transactions(): TStage extends StagesWithNext<'transactions'> ? StageView> : never; create(transaction: TransactionBuilder, options?: WriteRequestOptions): this; /** * Stages a PUT request to edit a transaction. * * When called on a transaction resource (via `.transaction(key)`): * `@example` * request.transaction('248.l.55438.pt.11').edit({ transaction: { action: 'accept' } }) * * When called on a transactions collection (via `.league(key).transactions()`): * `@example` * request.league('248.l.55438').transactions().edit('248.l.55438.w.c.2_6093', { transaction: { ... } }) */ edit(transactionKey: TransactionKeyLike | WaiverClaimKeyLike | PendingTradeKeyLike, payload: Record | string, options?: WriteRequestOptions): this; edit(transactionKey: TransactionKeyLike | WaiverClaimKeyLike | PendingTradeKeyLike, payload: Record | string, options?: WriteRequestOptions): this; edit(payload: Record | string, options?: WriteRequestOptions): this; cancel(transactionKey: TransactionKeyLike | WaiverClaimKeyLike | PendingTradeKeyLike, options?: WriteRequestOptions): this; cancel(options?: WriteRequestOptions): this; updateLineup(payload: RosterChangeRequest, options?: WriteRequestOptions): this; drafts(): TStage extends StagesWithNext<'drafts'> ? StageView> : never; games(): TStage extends StagesWithNext<'games'> ? StageView> : never; filters, FilterValue>>>(filters: TFilters): this; out | readonly OutValueForStage[]>(subResources: TValue): StageView>; position(pos: string): this; status(status: PlayerStatusFilter | string): this; type(value: string): this; types(values: string | string[]): this; teamKey(key: TeamKeyLike): this; sort(sort: SortFilter | string): this; count(n: number): this; start(n: number): this; search(q: string): this; week(w: number | string): this; date(d: DateFilterInput): this; gameKeys(keys: string | string[]): this; isAvailable(value?: boolean | 0 | 1 | '0' | '1'): this; gameTypes(types: string | string[]): this; gameCodes(codes: string | string[]): this; seasons(values: number | string | Array): this; leagueKeys(keys: string | string[]): this; teamKeys(keys: string | string[]): this; playerKeys(keys: string | string[]): this; useLogin(): this; buildPath(): string; execute extends never ? AllResponseTypes : InferResponseType>(): Promise; post extends never ? AllResponseTypes : InferResponseType>(data?: Record | string, options?: WriteRequestOptions): Promise; put extends never ? AllResponseTypes : InferResponseType>(data?: Record | string, options?: WriteRequestOptions): Promise; delete extends never ? AllResponseTypes : InferResponseType>(options?: WriteRequestOptions): Promise; toString(): string; protected formatValue(value: string | string[] | number): string; } export type RootRequestBuilder = StageView<'root'>; export declare function createRequest(httpClient: HttpClient): RootRequestBuilder; export {}; //# sourceMappingURL=request.d.ts.map