fantasy-basketball-sdk 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +101 -0
- package/LICENSE +13 -0
- package/README.md +195 -0
- package/dist/core/index.d.ts +3 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +2 -0
- package/dist/core/providers.d.ts +2 -0
- package/dist/core/providers.d.ts.map +1 -0
- package/dist/core/providers.js +10 -0
- package/dist/core/providers.js.map +1 -0
- package/dist/core/types.d.ts +2 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/espn/client.d.ts +37 -0
- package/dist/espn/client.d.ts.map +1 -0
- package/dist/espn/client.js +145 -0
- package/dist/espn/client.js.map +1 -0
- package/dist/espn/constants.d.ts +34 -0
- package/dist/espn/constants.d.ts.map +1 -0
- package/dist/espn/constants.js +189 -0
- package/dist/espn/constants.js.map +1 -0
- package/dist/espn/errors.d.ts +19 -0
- package/dist/espn/errors.d.ts.map +1 -0
- package/dist/espn/errors.js +34 -0
- package/dist/espn/errors.js.map +1 -0
- package/dist/espn/index.d.ts +18 -0
- package/dist/espn/index.d.ts.map +1 -0
- package/dist/espn/index.js +19 -0
- package/dist/espn/index.js.map +1 -0
- package/dist/espn/league.d.ts +76 -0
- package/dist/espn/league.d.ts.map +1 -0
- package/dist/espn/league.js +285 -0
- package/dist/espn/league.js.map +1 -0
- package/dist/espn/models/activity.d.ts +14 -0
- package/dist/espn/models/activity.d.ts.map +1 -0
- package/dist/espn/models/activity.js +36 -0
- package/dist/espn/models/activity.js.map +1 -0
- package/dist/espn/models/box-player.d.ts +11 -0
- package/dist/espn/models/box-player.d.ts.map +1 -0
- package/dist/espn/models/box-player.js +37 -0
- package/dist/espn/models/box-player.js.map +1 -0
- package/dist/espn/models/box-score.d.ts +45 -0
- package/dist/espn/models/box-score.d.ts.map +1 -0
- package/dist/espn/models/box-score.js +111 -0
- package/dist/espn/models/box-score.js.map +1 -0
- package/dist/espn/models/matchup.d.ts +22 -0
- package/dist/espn/models/matchup.d.ts.map +1 -0
- package/dist/espn/models/matchup.js +51 -0
- package/dist/espn/models/matchup.js.map +1 -0
- package/dist/espn/models/pick.d.ts +13 -0
- package/dist/espn/models/pick.d.ts.map +1 -0
- package/dist/espn/models/pick.js +25 -0
- package/dist/espn/models/pick.js.map +1 -0
- package/dist/espn/models/player.d.ts +47 -0
- package/dist/espn/models/player.d.ts.map +1 -0
- package/dist/espn/models/player.js +120 -0
- package/dist/espn/models/player.js.map +1 -0
- package/dist/espn/models/settings.d.ts +29 -0
- package/dist/espn/models/settings.d.ts.map +1 -0
- package/dist/espn/models/settings.js +64 -0
- package/dist/espn/models/settings.js.map +1 -0
- package/dist/espn/models/team.d.ts +33 -0
- package/dist/espn/models/team.d.ts.map +1 -0
- package/dist/espn/models/team.js +81 -0
- package/dist/espn/models/team.js.map +1 -0
- package/dist/espn/models/transaction.d.ts +18 -0
- package/dist/espn/models/transaction.d.ts.map +1 -0
- package/dist/espn/models/transaction.js +32 -0
- package/dist/espn/models/transaction.js.map +1 -0
- package/dist/espn/types/raw.d.ts +26 -0
- package/dist/espn/types/raw.d.ts.map +1 -0
- package/dist/espn/utils.d.ts +5 -0
- package/dist/espn/utils.d.ts.map +1 -0
- package/dist/espn/utils.js +35 -0
- package/dist/espn/utils.js.map +1 -0
- package/dist/fantrax/index.d.ts +2 -0
- package/dist/fantrax/index.d.ts.map +1 -0
- package/dist/fantrax/index.js +6 -0
- package/dist/fantrax/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/runtime/fetch.d.ts +5 -0
- package/dist/runtime/fetch.d.ts.map +1 -0
- package/dist/runtime/fetch.js +8 -0
- package/dist/runtime/fetch.js.map +1 -0
- package/dist/runtime/index.d.ts +3 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +2 -0
- package/dist/yahoo/client.d.ts +22 -0
- package/dist/yahoo/client.d.ts.map +1 -0
- package/dist/yahoo/client.js +89 -0
- package/dist/yahoo/client.js.map +1 -0
- package/dist/yahoo/constants.d.ts +41 -0
- package/dist/yahoo/constants.d.ts.map +1 -0
- package/dist/yahoo/constants.js +42 -0
- package/dist/yahoo/constants.js.map +1 -0
- package/dist/yahoo/errors.d.ts +24 -0
- package/dist/yahoo/errors.d.ts.map +1 -0
- package/dist/yahoo/errors.js +51 -0
- package/dist/yahoo/errors.js.map +1 -0
- package/dist/yahoo/index.d.ts +30 -0
- package/dist/yahoo/index.d.ts.map +1 -0
- package/dist/yahoo/index.js +23 -0
- package/dist/yahoo/index.js.map +1 -0
- package/dist/yahoo/keys.d.ts +29 -0
- package/dist/yahoo/keys.d.ts.map +1 -0
- package/dist/yahoo/keys.js +63 -0
- package/dist/yahoo/keys.js.map +1 -0
- package/dist/yahoo/models/game.d.ts +31 -0
- package/dist/yahoo/models/game.d.ts.map +1 -0
- package/dist/yahoo/models/game.js +68 -0
- package/dist/yahoo/models/game.js.map +1 -0
- package/dist/yahoo/models/league.d.ts +62 -0
- package/dist/yahoo/models/league.d.ts.map +1 -0
- package/dist/yahoo/models/league.js +129 -0
- package/dist/yahoo/models/league.js.map +1 -0
- package/dist/yahoo/models/matchup.d.ts +12 -0
- package/dist/yahoo/models/matchup.d.ts.map +1 -0
- package/dist/yahoo/models/matchup.js +46 -0
- package/dist/yahoo/models/matchup.js.map +1 -0
- package/dist/yahoo/models/player.d.ts +34 -0
- package/dist/yahoo/models/player.d.ts.map +1 -0
- package/dist/yahoo/models/player.js +44 -0
- package/dist/yahoo/models/player.js.map +1 -0
- package/dist/yahoo/models/roster.d.ts +16 -0
- package/dist/yahoo/models/roster.d.ts.map +1 -0
- package/dist/yahoo/models/roster.js +46 -0
- package/dist/yahoo/models/roster.js.map +1 -0
- package/dist/yahoo/models/settings.d.ts +21 -0
- package/dist/yahoo/models/settings.d.ts.map +1 -0
- package/dist/yahoo/models/settings.js +79 -0
- package/dist/yahoo/models/settings.js.map +1 -0
- package/dist/yahoo/models/team.d.ts +40 -0
- package/dist/yahoo/models/team.d.ts.map +1 -0
- package/dist/yahoo/models/team.js +46 -0
- package/dist/yahoo/models/team.js.map +1 -0
- package/dist/yahoo/models/transaction.d.ts +10 -0
- package/dist/yahoo/models/transaction.d.ts.map +1 -0
- package/dist/yahoo/models/transaction.js +20 -0
- package/dist/yahoo/models/transaction.js.map +1 -0
- package/dist/yahoo/models/user.d.ts +19 -0
- package/dist/yahoo/models/user.d.ts.map +1 -0
- package/dist/yahoo/models/user.js +36 -0
- package/dist/yahoo/models/user.js.map +1 -0
- package/dist/yahoo/parse.d.ts +26 -0
- package/dist/yahoo/parse.d.ts.map +1 -0
- package/dist/yahoo/parse.js +116 -0
- package/dist/yahoo/parse.js.map +1 -0
- package/dist/yahoo/types/raw.d.ts +10 -0
- package/dist/yahoo/types/raw.d.ts.map +1 -0
- package/dist/yahoo/write/roster.d.ts +7 -0
- package/dist/yahoo/write/roster.d.ts.map +1 -0
- package/dist/yahoo/write/roster.js +13 -0
- package/dist/yahoo/write/roster.js.map +1 -0
- package/dist/yahoo/write/transactions.d.ts +42 -0
- package/dist/yahoo/write/transactions.d.ts.map +1 -0
- package/dist/yahoo/write/transactions.js +51 -0
- package/dist/yahoo/write/transactions.js.map +1 -0
- package/dist/yahoo/xml.d.ts +42 -0
- package/dist/yahoo/xml.d.ts.map +1 -0
- package/dist/yahoo/xml.js +118 -0
- package/dist/yahoo/xml.js.map +1 -0
- package/package.json +79 -0
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import "./constants.js";
|
|
2
|
+
import { findFirstString, getFantasyContent } from "./parse.js";
|
|
3
|
+
//#region src/yahoo/keys.ts
|
|
4
|
+
function buildLeagueKey(gameId, leagueId) {
|
|
5
|
+
return `${gameId}.l.${leagueId}`;
|
|
6
|
+
}
|
|
7
|
+
function buildTeamKey(leagueKey, teamId) {
|
|
8
|
+
return `${leagueKey}.t.${teamId}`;
|
|
9
|
+
}
|
|
10
|
+
function buildPlayerKey(gameId, playerId) {
|
|
11
|
+
return `${gameId}.p.${playerId}`;
|
|
12
|
+
}
|
|
13
|
+
function parseLeagueKey(leagueKey) {
|
|
14
|
+
const match = /^(.+)\.l\.(.+)$/.exec(leagueKey);
|
|
15
|
+
if (!match) throw new Error(`Invalid league key format: ${leagueKey}`);
|
|
16
|
+
return {
|
|
17
|
+
gameId: match[1],
|
|
18
|
+
leagueId: match[2]
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
function parseTeamKey(teamKey) {
|
|
22
|
+
const dotIndex = teamKey.lastIndexOf(".t.");
|
|
23
|
+
if (dotIndex <= 0) throw new Error(`Invalid team key format: ${teamKey}`);
|
|
24
|
+
return {
|
|
25
|
+
leagueKey: teamKey.slice(0, dotIndex),
|
|
26
|
+
teamId: teamKey.slice(dotIndex + 3)
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function gameIdFromLeagueKey(leagueKey) {
|
|
30
|
+
return parseLeagueKey(leagueKey).gameId;
|
|
31
|
+
}
|
|
32
|
+
async function resolveLeagueKey(options) {
|
|
33
|
+
if (options.gameId !== void 0) return buildLeagueKey(options.gameId, options.leagueId);
|
|
34
|
+
const season = String(options.season);
|
|
35
|
+
const content = getFantasyContent(await options.client.get(`games;game_codes=nba;seasons=${season}`));
|
|
36
|
+
const gameId = findFirstString(content, "game_id") ?? findFirstString(content, "game_key");
|
|
37
|
+
if (!gameId) throw new Error(`Could not resolve NBA game_id for season ${season}`);
|
|
38
|
+
return buildLeagueKey(gameId, options.leagueId);
|
|
39
|
+
}
|
|
40
|
+
function buildPlayerKeysFromIds(leagueKey, playerIds) {
|
|
41
|
+
const gameId = gameIdFromLeagueKey(leagueKey);
|
|
42
|
+
return playerIds.map((id) => buildPlayerKey(gameId, id));
|
|
43
|
+
}
|
|
44
|
+
function joinKeys(keys) {
|
|
45
|
+
return keys.join(",");
|
|
46
|
+
}
|
|
47
|
+
function buildStatsUriParams(type, options) {
|
|
48
|
+
if (type === "season") return options.season !== void 0 ? `type=season;season=${options.season}` : "type=season";
|
|
49
|
+
if (type === "average_season") return options.season !== void 0 ? `type=average_season;season=${options.season}` : "type=average_season";
|
|
50
|
+
if (type === "week") return options.week !== void 0 ? `type=week;week=${options.week}` : "type=week";
|
|
51
|
+
if (type === "date") return options.date !== void 0 ? `type=date;date=${options.date}` : "type=date";
|
|
52
|
+
if (type === "lastweek" || type === "lastmonth") return `type=${type}`;
|
|
53
|
+
return `type=${type}`;
|
|
54
|
+
}
|
|
55
|
+
function buildPlayerFilterParams(filters) {
|
|
56
|
+
const parts = [];
|
|
57
|
+
for (const [key, value] of Object.entries(filters)) if (value !== void 0 && value !== "") parts.push(`${key}=${value}`);
|
|
58
|
+
return parts.join(";");
|
|
59
|
+
}
|
|
60
|
+
//#endregion
|
|
61
|
+
export { buildLeagueKey, buildPlayerFilterParams, buildPlayerKey, buildPlayerKeysFromIds, buildStatsUriParams, buildTeamKey, gameIdFromLeagueKey, joinKeys, parseLeagueKey, parseTeamKey, resolveLeagueKey };
|
|
62
|
+
|
|
63
|
+
//# sourceMappingURL=keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.js","names":[],"sources":["../../src/yahoo/keys.ts"],"sourcesContent":["import { GAME_CODE } from './constants.js';\nimport type { YahooClient } from './client.js';\nimport { findFirstString, getFantasyContent } from './parse.js';\n\nexport function buildLeagueKey(gameId: string | number, leagueId: string | number): string {\n return `${gameId}.l.${leagueId}`;\n}\n\nexport function buildTeamKey(leagueKey: string, teamId: string | number): string {\n return `${leagueKey}.t.${teamId}`;\n}\n\nexport function buildPlayerKey(gameId: string | number, playerId: string | number): string {\n return `${gameId}.p.${playerId}`;\n}\n\nexport function parseLeagueKey(leagueKey: string): {\n gameId: string;\n leagueId: string;\n} {\n const match = /^(.+)\\.l\\.(.+)$/.exec(leagueKey);\n if (!match) {\n throw new Error(`Invalid league key format: ${leagueKey}`);\n }\n return { gameId: match[1]!, leagueId: match[2]! };\n}\n\nexport function parseTeamKey(teamKey: string): {\n leagueKey: string;\n teamId: string;\n} {\n const dotIndex = teamKey.lastIndexOf('.t.');\n if (dotIndex <= 0) {\n throw new Error(`Invalid team key format: ${teamKey}`);\n }\n return {\n leagueKey: teamKey.slice(0, dotIndex),\n teamId: teamKey.slice(dotIndex + 3),\n };\n}\n\nexport function gameIdFromLeagueKey(leagueKey: string): string {\n return parseLeagueKey(leagueKey).gameId;\n}\n\nexport interface ResolveLeagueKeyOptions {\n leagueId: string | number;\n season: string | number;\n gameId?: string | number;\n client: YahooClient;\n}\n\nexport async function resolveLeagueKey(options: ResolveLeagueKeyOptions): Promise<string> {\n if (options.gameId !== undefined) {\n return buildLeagueKey(options.gameId, options.leagueId);\n }\n\n const season = String(options.season);\n const doc = await options.client.get(`games;game_codes=${GAME_CODE};seasons=${season}`);\n const content = getFantasyContent(doc);\n const gameId = findFirstString(content, 'game_id') ?? findFirstString(content, 'game_key');\n\n if (!gameId) {\n throw new Error(`Could not resolve NBA game_id for season ${season}`);\n }\n\n return buildLeagueKey(gameId, options.leagueId);\n}\n\nexport function buildPlayerKeysFromIds(\n leagueKey: string,\n playerIds: Array<string | number>,\n): string[] {\n const gameId = gameIdFromLeagueKey(leagueKey);\n return playerIds.map((id) => buildPlayerKey(gameId, id));\n}\n\nexport function joinKeys(keys: string[]): string {\n return keys.join(',');\n}\n\nexport function buildStatsUriParams(\n type: string,\n options: { date?: string; week?: number; season?: number },\n): string {\n if (type === 'season') {\n return options.season !== undefined ? `type=season;season=${options.season}` : 'type=season';\n }\n if (type === 'average_season') {\n return options.season !== undefined\n ? `type=average_season;season=${options.season}`\n : 'type=average_season';\n }\n if (type === 'week') {\n return options.week !== undefined ? `type=week;week=${options.week}` : 'type=week';\n }\n if (type === 'date') {\n return options.date !== undefined ? `type=date;date=${options.date}` : 'type=date';\n }\n if (type === 'lastweek' || type === 'lastmonth') {\n return `type=${type}`;\n }\n return `type=${type}`;\n}\n\nexport function buildPlayerFilterParams(filters: Record<string, string | number | undefined>): string {\n const parts: string[] = [];\n for (const [key, value] of Object.entries(filters)) {\n if (value !== undefined && value !== '') {\n parts.push(`${key}=${value}`);\n }\n }\n return parts.join(';');\n}\n"],"mappings":";;;AAIA,SAAgB,eAAe,QAAyB,UAAmC;CACzF,OAAO,GAAG,OAAO,KAAK;AACxB;AAEA,SAAgB,aAAa,WAAmB,QAAiC;CAC/E,OAAO,GAAG,UAAU,KAAK;AAC3B;AAEA,SAAgB,eAAe,QAAyB,UAAmC;CACzF,OAAO,GAAG,OAAO,KAAK;AACxB;AAEA,SAAgB,eAAe,WAG7B;CACA,MAAM,QAAQ,kBAAkB,KAAK,SAAS;CAC9C,IAAI,CAAC,OACH,MAAM,IAAI,MAAM,8BAA8B,WAAW;CAE3D,OAAO;EAAE,QAAQ,MAAM;EAAK,UAAU,MAAM;CAAI;AAClD;AAEA,SAAgB,aAAa,SAG3B;CACA,MAAM,WAAW,QAAQ,YAAY,KAAK;CAC1C,IAAI,YAAY,GACd,MAAM,IAAI,MAAM,4BAA4B,SAAS;CAEvD,OAAO;EACL,WAAW,QAAQ,MAAM,GAAG,QAAQ;EACpC,QAAQ,QAAQ,MAAM,WAAW,CAAC;CACpC;AACF;AAEA,SAAgB,oBAAoB,WAA2B;CAC7D,OAAO,eAAe,SAAS,EAAE;AACnC;AASA,eAAsB,iBAAiB,SAAmD;CACxF,IAAI,QAAQ,WAAW,KAAA,GACrB,OAAO,eAAe,QAAQ,QAAQ,QAAQ,QAAQ;CAGxD,MAAM,SAAS,OAAO,QAAQ,MAAM;CAEpC,MAAM,UAAU,kBAAkB,MADhB,QAAQ,OAAO,IAAI,gCAAyC,QAAQ,CACjD;CACrC,MAAM,SAAS,gBAAgB,SAAS,SAAS,KAAK,gBAAgB,SAAS,UAAU;CAEzF,IAAI,CAAC,QACH,MAAM,IAAI,MAAM,4CAA4C,QAAQ;CAGtE,OAAO,eAAe,QAAQ,QAAQ,QAAQ;AAChD;AAEA,SAAgB,uBACd,WACA,WACU;CACV,MAAM,SAAS,oBAAoB,SAAS;CAC5C,OAAO,UAAU,KAAK,OAAO,eAAe,QAAQ,EAAE,CAAC;AACzD;AAEA,SAAgB,SAAS,MAAwB;CAC/C,OAAO,KAAK,KAAK,GAAG;AACtB;AAEA,SAAgB,oBACd,MACA,SACQ;CACR,IAAI,SAAS,UACX,OAAO,QAAQ,WAAW,KAAA,IAAY,sBAAsB,QAAQ,WAAW;CAEjF,IAAI,SAAS,kBACX,OAAO,QAAQ,WAAW,KAAA,IACtB,8BAA8B,QAAQ,WACtC;CAEN,IAAI,SAAS,QACX,OAAO,QAAQ,SAAS,KAAA,IAAY,kBAAkB,QAAQ,SAAS;CAEzE,IAAI,SAAS,QACX,OAAO,QAAQ,SAAS,KAAA,IAAY,kBAAkB,QAAQ,SAAS;CAEzE,IAAI,SAAS,cAAc,SAAS,aAClC,OAAO,QAAQ;CAEjB,OAAO,QAAQ;AACjB;AAEA,SAAgB,wBAAwB,SAA8D;CACpG,MAAM,QAAkB,CAAC;CACzB,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,OAAO,GAC/C,IAAI,UAAU,KAAA,KAAa,UAAU,IACnC,MAAM,KAAK,GAAG,IAAI,GAAG,OAAO;CAGhC,OAAO,MAAM,KAAK,GAAG;AACvB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { YahooClient } from '../client.js';
|
|
2
|
+
import type { JsonObject } from '../types/raw.js';
|
|
3
|
+
import { League } from './league.js';
|
|
4
|
+
export interface GameOptions {
|
|
5
|
+
client: YahooClient;
|
|
6
|
+
gameKey?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface LeagueKeysFilters {
|
|
9
|
+
isAvailable?: boolean;
|
|
10
|
+
gameTypes?: string[];
|
|
11
|
+
gameCodes?: string[];
|
|
12
|
+
seasons?: string[];
|
|
13
|
+
}
|
|
14
|
+
export declare class Game {
|
|
15
|
+
readonly client: YahooClient;
|
|
16
|
+
readonly gameKey: string;
|
|
17
|
+
constructor(options: GameOptions);
|
|
18
|
+
static forNba(client: YahooClient, season?: string | number): Game;
|
|
19
|
+
metadata(): Promise<JsonObject>;
|
|
20
|
+
gameId(): Promise<string>;
|
|
21
|
+
leagues(leagueKeys: string[]): Promise<JsonObject>;
|
|
22
|
+
players(playerKeys: string[]): Promise<JsonObject>;
|
|
23
|
+
dates(): Promise<JsonObject>;
|
|
24
|
+
gameWeeks(): Promise<JsonObject>;
|
|
25
|
+
statCategories(): Promise<JsonObject>;
|
|
26
|
+
positionTypes(): Promise<JsonObject>;
|
|
27
|
+
rosterPositions(): Promise<JsonObject>;
|
|
28
|
+
leagueKeys(filters?: LeagueKeysFilters): Promise<string[]>;
|
|
29
|
+
toLeague(leagueKey: string): League;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=game.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"game.d.ts","sourceRoot":"","sources":["../../../src/yahoo/models/game.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAIhD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,qBAAa,IAAI;IACf,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;gBAEb,OAAO,EAAE,WAAW;IAKhC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAK5D,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC;IAK/B,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;IASzB,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;IAOlD,OAAO,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;IAOlD,KAAK,IAAI,OAAO,CAAC,UAAU,CAAC;IAK5B,SAAS,IAAI,OAAO,CAAC,UAAU,CAAC;IAKhC,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC;IAKrC,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;IAKpC,eAAe,IAAI,OAAO,CAAC,UAAU,CAAC;IAKtC,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAYpE,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;CAGpC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import "../constants.js";
|
|
2
|
+
import { collectLeagueKeys, getFantasyContent } from "../parse.js";
|
|
3
|
+
import { joinKeys } from "../keys.js";
|
|
4
|
+
import { parseGameId, parseGameMetadata } from "./settings.js";
|
|
5
|
+
import { League } from "./league.js";
|
|
6
|
+
//#region src/yahoo/models/game.ts
|
|
7
|
+
var Game = class Game {
|
|
8
|
+
client;
|
|
9
|
+
gameKey;
|
|
10
|
+
constructor(options) {
|
|
11
|
+
this.client = options.client;
|
|
12
|
+
this.gameKey = options.gameKey ?? "nba";
|
|
13
|
+
}
|
|
14
|
+
static forNba(client, season) {
|
|
15
|
+
return new Game({
|
|
16
|
+
client,
|
|
17
|
+
gameKey: season !== void 0 ? String(season) : "nba"
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
async metadata() {
|
|
21
|
+
return parseGameMetadata(await this.client.get(`game/${this.gameKey}`));
|
|
22
|
+
}
|
|
23
|
+
async gameId() {
|
|
24
|
+
const id = parseGameId(await this.client.get(`game/${this.gameKey}`));
|
|
25
|
+
if (!id) throw new Error(`Could not resolve game_id for ${this.gameKey}`);
|
|
26
|
+
return id;
|
|
27
|
+
}
|
|
28
|
+
async leagues(leagueKeys) {
|
|
29
|
+
return getFantasyContent(await this.client.get(`game/${this.gameKey}/leagues;league_keys=${joinKeys(leagueKeys)}`));
|
|
30
|
+
}
|
|
31
|
+
async players(playerKeys) {
|
|
32
|
+
return getFantasyContent(await this.client.get(`game/${this.gameKey}/players;player_keys=${joinKeys(playerKeys)}`));
|
|
33
|
+
}
|
|
34
|
+
async dates() {
|
|
35
|
+
return getFantasyContent(await this.client.get(`game/${this.gameKey}/dates`));
|
|
36
|
+
}
|
|
37
|
+
async gameWeeks() {
|
|
38
|
+
return getFantasyContent(await this.client.get(`game/${this.gameKey}/game_weeks`));
|
|
39
|
+
}
|
|
40
|
+
async statCategories() {
|
|
41
|
+
return getFantasyContent(await this.client.get(`game/${this.gameKey}/stat_categories`));
|
|
42
|
+
}
|
|
43
|
+
async positionTypes() {
|
|
44
|
+
return getFantasyContent(await this.client.get(`game/${this.gameKey}/position_types`));
|
|
45
|
+
}
|
|
46
|
+
async rosterPositions() {
|
|
47
|
+
return getFantasyContent(await this.client.get(`game/${this.gameKey}/roster_positions`));
|
|
48
|
+
}
|
|
49
|
+
async leagueKeys(filters = {}) {
|
|
50
|
+
const params = new URLSearchParams();
|
|
51
|
+
params.set("use_login", "1");
|
|
52
|
+
params.set("is_available", filters.isAvailable ? "1" : "0");
|
|
53
|
+
params.set("game_types", filters.gameTypes?.join(",") ?? "");
|
|
54
|
+
params.set("game_codes", filters.gameCodes?.join(",") ?? "nba");
|
|
55
|
+
params.set("seasons", filters.seasons?.join(",") ?? "");
|
|
56
|
+
return collectLeagueKeys(await this.client.get(`users/games/leagues?${params.toString()}`));
|
|
57
|
+
}
|
|
58
|
+
toLeague(leagueKey) {
|
|
59
|
+
return new League({
|
|
60
|
+
client: this.client,
|
|
61
|
+
leagueKey
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
//#endregion
|
|
66
|
+
export { Game };
|
|
67
|
+
|
|
68
|
+
//# sourceMappingURL=game.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"game.js","names":[],"sources":["../../../src/yahoo/models/game.ts"],"sourcesContent":["import { GAME_CODE } from '../constants.js';\nimport type { YahooClient } from '../client.js';\nimport { joinKeys } from '../keys.js';\nimport { collectLeagueKeys, getFantasyContent } from '../parse.js';\nimport { parseGameId, parseGameMetadata } from './settings.js';\nimport type { JsonObject } from '../types/raw.js';\nimport { League } from './league.js';\n\nexport interface GameOptions {\n client: YahooClient;\n gameKey?: string;\n}\n\nexport interface LeagueKeysFilters {\n isAvailable?: boolean;\n gameTypes?: string[];\n gameCodes?: string[];\n seasons?: string[];\n}\n\nexport class Game {\n readonly client: YahooClient;\n readonly gameKey: string;\n\n constructor(options: GameOptions) {\n this.client = options.client;\n this.gameKey = options.gameKey ?? GAME_CODE;\n }\n\n static forNba(client: YahooClient, season?: string | number): Game {\n const gameKey = season !== undefined ? String(season) : GAME_CODE;\n return new Game({ client, gameKey });\n }\n\n async metadata(): Promise<JsonObject> {\n const doc = await this.client.get(`game/${this.gameKey}`);\n return parseGameMetadata(doc);\n }\n\n async gameId(): Promise<string> {\n const doc = await this.client.get(`game/${this.gameKey}`);\n const id = parseGameId(doc);\n if (!id) {\n throw new Error(`Could not resolve game_id for ${this.gameKey}`);\n }\n return id;\n }\n\n async leagues(leagueKeys: string[]): Promise<JsonObject> {\n const doc = await this.client.get(\n `game/${this.gameKey}/leagues;league_keys=${joinKeys(leagueKeys)}`,\n );\n return getFantasyContent(doc);\n }\n\n async players(playerKeys: string[]): Promise<JsonObject> {\n const doc = await this.client.get(\n `game/${this.gameKey}/players;player_keys=${joinKeys(playerKeys)}`,\n );\n return getFantasyContent(doc);\n }\n\n async dates(): Promise<JsonObject> {\n const doc = await this.client.get(`game/${this.gameKey}/dates`);\n return getFantasyContent(doc);\n }\n\n async gameWeeks(): Promise<JsonObject> {\n const doc = await this.client.get(`game/${this.gameKey}/game_weeks`);\n return getFantasyContent(doc);\n }\n\n async statCategories(): Promise<JsonObject> {\n const doc = await this.client.get(`game/${this.gameKey}/stat_categories`);\n return getFantasyContent(doc);\n }\n\n async positionTypes(): Promise<JsonObject> {\n const doc = await this.client.get(`game/${this.gameKey}/position_types`);\n return getFantasyContent(doc);\n }\n\n async rosterPositions(): Promise<JsonObject> {\n const doc = await this.client.get(`game/${this.gameKey}/roster_positions`);\n return getFantasyContent(doc);\n }\n\n async leagueKeys(filters: LeagueKeysFilters = {}): Promise<string[]> {\n const params = new URLSearchParams();\n params.set('use_login', '1');\n params.set('is_available', filters.isAvailable ? '1' : '0');\n params.set('game_types', filters.gameTypes?.join(',') ?? '');\n params.set('game_codes', filters.gameCodes?.join(',') ?? GAME_CODE);\n params.set('seasons', filters.seasons?.join(',') ?? '');\n\n const doc = await this.client.get(`users/games/leagues?${params.toString()}`);\n return collectLeagueKeys(doc);\n }\n\n toLeague(leagueKey: string): League {\n return new League({ client: this.client, leagueKey });\n }\n}\n"],"mappings":";;;;;;AAoBA,IAAa,OAAb,MAAa,KAAK;CAChB;CACA;CAEA,YAAY,SAAsB;EAChC,KAAK,SAAS,QAAQ;EACtB,KAAK,UAAU,QAAQ,WAAA;CACzB;CAEA,OAAO,OAAO,QAAqB,QAAgC;EAEjE,OAAO,IAAI,KAAK;GAAE;GAAQ,SADV,WAAW,KAAA,IAAY,OAAO,MAAM,IAAA;EAClB,CAAC;CACrC;CAEA,MAAM,WAAgC;EAEpC,OAAO,kBAAkB,MADP,KAAK,OAAO,IAAI,QAAQ,KAAK,SAAS,CAC5B;CAC9B;CAEA,MAAM,SAA0B;EAE9B,MAAM,KAAK,YAAY,MADL,KAAK,OAAO,IAAI,QAAQ,KAAK,SAAS,CAC9B;EAC1B,IAAI,CAAC,IACH,MAAM,IAAI,MAAM,iCAAiC,KAAK,SAAS;EAEjE,OAAO;CACT;CAEA,MAAM,QAAQ,YAA2C;EAIvD,OAAO,kBAAkB,MAHP,KAAK,OAAO,IAC5B,QAAQ,KAAK,QAAQ,uBAAuB,SAAS,UAAU,GACjE,CAC4B;CAC9B;CAEA,MAAM,QAAQ,YAA2C;EAIvD,OAAO,kBAAkB,MAHP,KAAK,OAAO,IAC5B,QAAQ,KAAK,QAAQ,uBAAuB,SAAS,UAAU,GACjE,CAC4B;CAC9B;CAEA,MAAM,QAA6B;EAEjC,OAAO,kBAAkB,MADP,KAAK,OAAO,IAAI,QAAQ,KAAK,QAAQ,OAAO,CAClC;CAC9B;CAEA,MAAM,YAAiC;EAErC,OAAO,kBAAkB,MADP,KAAK,OAAO,IAAI,QAAQ,KAAK,QAAQ,YAAY,CACvC;CAC9B;CAEA,MAAM,iBAAsC;EAE1C,OAAO,kBAAkB,MADP,KAAK,OAAO,IAAI,QAAQ,KAAK,QAAQ,iBAAiB,CAC5C;CAC9B;CAEA,MAAM,gBAAqC;EAEzC,OAAO,kBAAkB,MADP,KAAK,OAAO,IAAI,QAAQ,KAAK,QAAQ,gBAAgB,CAC3C;CAC9B;CAEA,MAAM,kBAAuC;EAE3C,OAAO,kBAAkB,MADP,KAAK,OAAO,IAAI,QAAQ,KAAK,QAAQ,kBAAkB,CAC7C;CAC9B;CAEA,MAAM,WAAW,UAA6B,CAAC,GAAsB;EACnE,MAAM,SAAS,IAAI,gBAAgB;EACnC,OAAO,IAAI,aAAa,GAAG;EAC3B,OAAO,IAAI,gBAAgB,QAAQ,cAAc,MAAM,GAAG;EAC1D,OAAO,IAAI,cAAc,QAAQ,WAAW,KAAK,GAAG,KAAK,EAAE;EAC3D,OAAO,IAAI,cAAc,QAAQ,WAAW,KAAK,GAAG,KAAA,KAAc;EAClE,OAAO,IAAI,WAAW,QAAQ,SAAS,KAAK,GAAG,KAAK,EAAE;EAGtD,OAAO,kBAAkB,MADP,KAAK,OAAO,IAAI,uBAAuB,OAAO,SAAS,GAAG,CAChD;CAC9B;CAEA,SAAS,WAA2B;EAClC,OAAO,IAAI,OAAO;GAAE,QAAQ,KAAK;GAAQ;EAAU,CAAC;CACtD;AACF"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { YahooClient as YahooClientType } from '../client.js';
|
|
2
|
+
import type { PlayerStatus } from '../constants.js';
|
|
3
|
+
import { Player } from './player.js';
|
|
4
|
+
import { type Settings } from './settings.js';
|
|
5
|
+
import { Team } from './team.js';
|
|
6
|
+
import { Transaction } from './transaction.js';
|
|
7
|
+
import type { JsonObject } from '../types/raw.js';
|
|
8
|
+
import type { Matchup } from './matchup.js';
|
|
9
|
+
export interface LeagueOptions {
|
|
10
|
+
client: YahooClientType;
|
|
11
|
+
leagueKey: string;
|
|
12
|
+
}
|
|
13
|
+
export interface LeagueCreateOptions {
|
|
14
|
+
leagueKey?: string;
|
|
15
|
+
leagueId?: string | number;
|
|
16
|
+
season?: string | number;
|
|
17
|
+
accessToken: string;
|
|
18
|
+
fetch?: typeof globalThis.fetch;
|
|
19
|
+
refreshAccessToken?: () => Promise<string>;
|
|
20
|
+
fetchLeague?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export interface LeaguePlayersFilters {
|
|
23
|
+
start?: number;
|
|
24
|
+
count?: number;
|
|
25
|
+
status?: PlayerStatus | string;
|
|
26
|
+
position?: string;
|
|
27
|
+
search?: string;
|
|
28
|
+
sort?: string;
|
|
29
|
+
sortType?: string;
|
|
30
|
+
sortSeason?: string | number;
|
|
31
|
+
sortDate?: string;
|
|
32
|
+
sortWeek?: number;
|
|
33
|
+
}
|
|
34
|
+
export interface LeagueTransactionsFilters {
|
|
35
|
+
type?: string;
|
|
36
|
+
types?: string[];
|
|
37
|
+
teamKey?: string;
|
|
38
|
+
count?: number;
|
|
39
|
+
}
|
|
40
|
+
export declare class League {
|
|
41
|
+
readonly client: YahooClientType;
|
|
42
|
+
readonly leagueKey: string;
|
|
43
|
+
settings?: Settings;
|
|
44
|
+
teams: JsonObject[];
|
|
45
|
+
constructor(options: LeagueOptions);
|
|
46
|
+
static create(options: LeagueCreateOptions): Promise<League>;
|
|
47
|
+
fetchLeague(): Promise<void>;
|
|
48
|
+
metadata(): Promise<JsonObject>;
|
|
49
|
+
fetchSettings(): Promise<Settings>;
|
|
50
|
+
standings(): Promise<JsonObject[]>;
|
|
51
|
+
scoreboard(week?: number): Promise<Matchup[]>;
|
|
52
|
+
teamsList(): Promise<JsonObject[]>;
|
|
53
|
+
players(filters?: LeaguePlayersFilters): Promise<JsonObject[]>;
|
|
54
|
+
draftResults(): Promise<JsonObject>;
|
|
55
|
+
transactions(filters?: LeagueTransactionsFilters): Promise<JsonObject[]>;
|
|
56
|
+
playerStats(playerIds: Array<string | number>, reqType?: string, date?: string): Promise<JsonObject>;
|
|
57
|
+
toTeam(teamKey: string): Team;
|
|
58
|
+
toPlayer(playerKey: string): Player;
|
|
59
|
+
toTransaction(transactionKey: string): Transaction;
|
|
60
|
+
postTransactionXml(xml: string): Promise<Response>;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=league.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"league.d.ts","sourceRoot":"","sources":["../../../src/yahoo/models/league.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { YahooClient } from "../client.js";
|
|
2
|
+
import { collectIndexedResources, flattenLeagueNode, flattenResource, getFantasyContent } from "../parse.js";
|
|
3
|
+
import { resolveLeagueKey } from "../keys.js";
|
|
4
|
+
import { parseSettingsFromResponse } from "./settings.js";
|
|
5
|
+
import { Player, fetchLeaguePlayerStats } from "./player.js";
|
|
6
|
+
import { parseMatchupsFromScoreboard } from "./matchup.js";
|
|
7
|
+
import { Team } from "./team.js";
|
|
8
|
+
import { Transaction } from "./transaction.js";
|
|
9
|
+
//#region src/yahoo/models/league.ts
|
|
10
|
+
var League = class League {
|
|
11
|
+
client;
|
|
12
|
+
leagueKey;
|
|
13
|
+
settings;
|
|
14
|
+
teams = [];
|
|
15
|
+
constructor(options) {
|
|
16
|
+
this.client = options.client;
|
|
17
|
+
this.leagueKey = options.leagueKey;
|
|
18
|
+
}
|
|
19
|
+
static async create(options) {
|
|
20
|
+
const client = new YahooClient({
|
|
21
|
+
accessToken: options.accessToken,
|
|
22
|
+
fetch: options.fetch,
|
|
23
|
+
refreshAccessToken: options.refreshAccessToken
|
|
24
|
+
});
|
|
25
|
+
let leagueKey = options.leagueKey;
|
|
26
|
+
if (!leagueKey) {
|
|
27
|
+
if (options.leagueId === void 0 || options.season === void 0) throw new Error("Provide leagueKey or both leagueId and season");
|
|
28
|
+
leagueKey = await resolveLeagueKey({
|
|
29
|
+
leagueId: options.leagueId,
|
|
30
|
+
season: options.season,
|
|
31
|
+
client
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
const league = new League({
|
|
35
|
+
client,
|
|
36
|
+
leagueKey
|
|
37
|
+
});
|
|
38
|
+
if (options.fetchLeague !== false) await league.fetchLeague();
|
|
39
|
+
return league;
|
|
40
|
+
}
|
|
41
|
+
async fetchLeague() {
|
|
42
|
+
this.settings = await this.fetchSettings();
|
|
43
|
+
this.teams = await this.teamsList();
|
|
44
|
+
}
|
|
45
|
+
async metadata() {
|
|
46
|
+
return flattenLeagueNode(getFantasyContent(await this.client.get(`league/${this.leagueKey}`)).league);
|
|
47
|
+
}
|
|
48
|
+
async fetchSettings() {
|
|
49
|
+
return parseSettingsFromResponse(await this.client.get(`league/${this.leagueKey}/settings`));
|
|
50
|
+
}
|
|
51
|
+
async standings() {
|
|
52
|
+
const league = flattenLeagueNode(getFantasyContent(await this.client.get(`league/${this.leagueKey}/standings`)).league);
|
|
53
|
+
let teamsNode = league.teams;
|
|
54
|
+
if (!teamsNode || typeof teamsNode !== "object" || Array.isArray(teamsNode)) teamsNode = flattenResource(league.standings ?? {}).teams;
|
|
55
|
+
if (!teamsNode || typeof teamsNode !== "object" || Array.isArray(teamsNode)) return [];
|
|
56
|
+
return collectIndexedResources(teamsNode, "team");
|
|
57
|
+
}
|
|
58
|
+
async scoreboard(week) {
|
|
59
|
+
const suffix = week !== void 0 ? `;week=${week}` : "";
|
|
60
|
+
return parseMatchupsFromScoreboard(await this.client.get(`league/${this.leagueKey}/scoreboard${suffix}`));
|
|
61
|
+
}
|
|
62
|
+
async teamsList() {
|
|
63
|
+
const teamsNode = flattenLeagueNode(getFantasyContent(await this.client.get(`league/${this.leagueKey}/teams`)).league).teams;
|
|
64
|
+
if (!teamsNode || typeof teamsNode !== "object" || Array.isArray(teamsNode)) return [];
|
|
65
|
+
return collectIndexedResources(teamsNode, "team");
|
|
66
|
+
}
|
|
67
|
+
async players(filters = {}) {
|
|
68
|
+
const parts = [];
|
|
69
|
+
if (filters.start !== void 0) parts.push(`start=${filters.start}`);
|
|
70
|
+
if (filters.count !== void 0) parts.push(`count=${filters.count}`);
|
|
71
|
+
else parts.push("count=25");
|
|
72
|
+
if (filters.status !== void 0) parts.push(`status=${filters.status}`);
|
|
73
|
+
if (filters.position !== void 0) parts.push(`position=${filters.position}`);
|
|
74
|
+
if (filters.search !== void 0) parts.push(`search=${encodeURIComponent(filters.search)}`);
|
|
75
|
+
if (filters.sort !== void 0) parts.push(`sort=${filters.sort}`);
|
|
76
|
+
if (filters.sortType !== void 0) parts.push(`sort_type=${filters.sortType}`);
|
|
77
|
+
if (filters.sortSeason !== void 0) parts.push(`sort_season=${filters.sortSeason}`);
|
|
78
|
+
if (filters.sortDate !== void 0) parts.push(`sort_date=${filters.sortDate}`);
|
|
79
|
+
if (filters.sortWeek !== void 0) parts.push(`sort_week=${filters.sortWeek}`);
|
|
80
|
+
const filterStr = parts.length > 0 ? `;${parts.join(";")}` : "";
|
|
81
|
+
const playersNode = flattenLeagueNode(getFantasyContent(await this.client.get(`league/${this.leagueKey}/players${filterStr}`)).league).players;
|
|
82
|
+
if (!playersNode || typeof playersNode !== "object" || Array.isArray(playersNode)) return [];
|
|
83
|
+
return collectIndexedResources(playersNode, "player");
|
|
84
|
+
}
|
|
85
|
+
async draftResults() {
|
|
86
|
+
return getFantasyContent(await this.client.get(`league/${this.leagueKey}/draftresults`));
|
|
87
|
+
}
|
|
88
|
+
async transactions(filters = {}) {
|
|
89
|
+
const parts = [];
|
|
90
|
+
if (filters.type !== void 0) parts.push(`type=${filters.type}`);
|
|
91
|
+
if (filters.types?.length) parts.push(`types=${filters.types.join(",")}`);
|
|
92
|
+
if (filters.teamKey !== void 0) parts.push(`team_key=${filters.teamKey}`);
|
|
93
|
+
if (filters.count !== void 0) parts.push(`count=${filters.count}`);
|
|
94
|
+
const filterStr = parts.length > 0 ? `;${parts.join(";")}` : "";
|
|
95
|
+
const txNode = flattenLeagueNode(getFantasyContent(await this.client.get(`league/${this.leagueKey}/transactions${filterStr}`)).league).transactions;
|
|
96
|
+
if (!txNode || typeof txNode !== "object" || Array.isArray(txNode)) return [];
|
|
97
|
+
return collectIndexedResources(txNode, "transaction");
|
|
98
|
+
}
|
|
99
|
+
async playerStats(playerIds, reqType = "date", date) {
|
|
100
|
+
return fetchLeaguePlayerStats(this.client, this.leagueKey, {
|
|
101
|
+
playerIds,
|
|
102
|
+
reqType,
|
|
103
|
+
date
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
toTeam(teamKey) {
|
|
107
|
+
return new Team({
|
|
108
|
+
client: this.client,
|
|
109
|
+
teamKey
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
toPlayer(playerKey) {
|
|
113
|
+
return new Player({
|
|
114
|
+
client: this.client,
|
|
115
|
+
playerKey,
|
|
116
|
+
leagueKey: this.leagueKey
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
toTransaction(transactionKey) {
|
|
120
|
+
return new Transaction(this.client, transactionKey);
|
|
121
|
+
}
|
|
122
|
+
async postTransactionXml(xml) {
|
|
123
|
+
return this.client.post(`league/${this.leagueKey}/transactions`, xml);
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
//#endregion
|
|
127
|
+
export { League };
|
|
128
|
+
|
|
129
|
+
//# sourceMappingURL=league.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"league.js","names":[],"sources":["../../../src/yahoo/models/league.ts"],"sourcesContent":["import { YahooClient } from '../client.js';\nimport type { YahooClient as YahooClientType } from '../client.js';\nimport type { PlayerStatus } from '../constants.js';\nimport { resolveLeagueKey } from '../keys.js';\nimport {\n collectIndexedResources,\n flattenLeagueNode,\n flattenResource,\n getFantasyContent,\n} from '../parse.js';\nimport { fetchLeaguePlayerStats, Player } from './player.js';\nimport { parseMatchupsFromScoreboard } from './matchup.js';\nimport { parseSettingsFromResponse, type Settings } from './settings.js';\nimport { Team } from './team.js';\nimport { Transaction } from './transaction.js';\nimport type { JsonObject } from '../types/raw.js';\nimport type { Matchup } from './matchup.js';\n\nexport interface LeagueOptions {\n client: YahooClientType;\n leagueKey: string;\n}\n\nexport interface LeagueCreateOptions {\n leagueKey?: string;\n leagueId?: string | number;\n season?: string | number;\n accessToken: string;\n fetch?: typeof globalThis.fetch;\n refreshAccessToken?: () => Promise<string>;\n fetchLeague?: boolean;\n}\n\nexport interface LeaguePlayersFilters {\n start?: number;\n count?: number;\n status?: PlayerStatus | string;\n position?: string;\n search?: string;\n sort?: string;\n sortType?: string;\n sortSeason?: string | number;\n sortDate?: string;\n sortWeek?: number;\n}\n\nexport interface LeagueTransactionsFilters {\n type?: string;\n types?: string[];\n teamKey?: string;\n count?: number;\n}\n\nexport class League {\n readonly client: YahooClientType;\n readonly leagueKey: string;\n settings?: Settings;\n teams: JsonObject[] = [];\n\n constructor(options: LeagueOptions) {\n this.client = options.client;\n this.leagueKey = options.leagueKey;\n }\n\n static async create(options: LeagueCreateOptions): Promise<League> {\n const client = new YahooClient({\n accessToken: options.accessToken,\n fetch: options.fetch,\n refreshAccessToken: options.refreshAccessToken,\n });\n\n let leagueKey = options.leagueKey;\n if (!leagueKey) {\n if (options.leagueId === undefined || options.season === undefined) {\n throw new Error('Provide leagueKey or both leagueId and season');\n }\n leagueKey = await resolveLeagueKey({\n leagueId: options.leagueId,\n season: options.season,\n client,\n });\n }\n\n const league = new League({ client, leagueKey });\n if (options.fetchLeague !== false) {\n await league.fetchLeague();\n }\n return league;\n }\n\n async fetchLeague(): Promise<void> {\n this.settings = await this.fetchSettings();\n this.teams = await this.teamsList();\n }\n\n async metadata(): Promise<JsonObject> {\n const doc = await this.client.get(`league/${this.leagueKey}`);\n const content = getFantasyContent(doc);\n return flattenLeagueNode(content.league);\n }\n\n async fetchSettings(): Promise<Settings> {\n const doc = await this.client.get(`league/${this.leagueKey}/settings`);\n return parseSettingsFromResponse(doc);\n }\n\n async standings(): Promise<JsonObject[]> {\n const doc = await this.client.get(`league/${this.leagueKey}/standings`);\n const content = getFantasyContent(doc);\n const league = flattenLeagueNode(content.league);\n\n let teamsNode = league.teams;\n if (!teamsNode || typeof teamsNode !== 'object' || Array.isArray(teamsNode)) {\n const standingsFlat = flattenResource(league.standings ?? {});\n teamsNode = standingsFlat.teams;\n }\n\n if (!teamsNode || typeof teamsNode !== 'object' || Array.isArray(teamsNode)) {\n return [];\n }\n return collectIndexedResources(teamsNode, 'team');\n }\n\n async scoreboard(week?: number): Promise<Matchup[]> {\n const suffix = week !== undefined ? `;week=${week}` : '';\n const doc = await this.client.get(`league/${this.leagueKey}/scoreboard${suffix}`);\n return parseMatchupsFromScoreboard(doc);\n }\n\n async teamsList(): Promise<JsonObject[]> {\n const doc = await this.client.get(`league/${this.leagueKey}/teams`);\n const content = getFantasyContent(doc);\n const league = flattenLeagueNode(content.league);\n const teamsNode = league.teams;\n if (!teamsNode || typeof teamsNode !== 'object' || Array.isArray(teamsNode)) {\n return [];\n }\n return collectIndexedResources(teamsNode, 'team');\n }\n\n async players(filters: LeaguePlayersFilters = {}): Promise<JsonObject[]> {\n const parts: string[] = [];\n if (filters.start !== undefined) {\n parts.push(`start=${filters.start}`);\n }\n if (filters.count !== undefined) {\n parts.push(`count=${filters.count}`);\n } else {\n parts.push('count=25');\n }\n if (filters.status !== undefined) {\n parts.push(`status=${filters.status}`);\n }\n if (filters.position !== undefined) {\n parts.push(`position=${filters.position}`);\n }\n if (filters.search !== undefined) {\n parts.push(`search=${encodeURIComponent(filters.search)}`);\n }\n if (filters.sort !== undefined) {\n parts.push(`sort=${filters.sort}`);\n }\n if (filters.sortType !== undefined) {\n parts.push(`sort_type=${filters.sortType}`);\n }\n if (filters.sortSeason !== undefined) {\n parts.push(`sort_season=${filters.sortSeason}`);\n }\n if (filters.sortDate !== undefined) {\n parts.push(`sort_date=${filters.sortDate}`);\n }\n if (filters.sortWeek !== undefined) {\n parts.push(`sort_week=${filters.sortWeek}`);\n }\n\n const filterStr = parts.length > 0 ? `;${parts.join(';')}` : '';\n const doc = await this.client.get(`league/${this.leagueKey}/players${filterStr}`);\n const content = getFantasyContent(doc);\n const league = flattenLeagueNode(content.league);\n const playersNode = league.players;\n if (!playersNode || typeof playersNode !== 'object' || Array.isArray(playersNode)) {\n return [];\n }\n return collectIndexedResources(playersNode, 'player');\n }\n\n async draftResults(): Promise<JsonObject> {\n const doc = await this.client.get(`league/${this.leagueKey}/draftresults`);\n return getFantasyContent(doc);\n }\n\n async transactions(filters: LeagueTransactionsFilters = {}): Promise<JsonObject[]> {\n const parts: string[] = [];\n if (filters.type !== undefined) {\n parts.push(`type=${filters.type}`);\n }\n if (filters.types?.length) {\n parts.push(`types=${filters.types.join(',')}`);\n }\n if (filters.teamKey !== undefined) {\n parts.push(`team_key=${filters.teamKey}`);\n }\n if (filters.count !== undefined) {\n parts.push(`count=${filters.count}`);\n }\n\n const filterStr = parts.length > 0 ? `;${parts.join(';')}` : '';\n const doc = await this.client.get(`league/${this.leagueKey}/transactions${filterStr}`);\n const content = getFantasyContent(doc);\n const league = flattenLeagueNode(content.league);\n const txNode = league.transactions;\n if (!txNode || typeof txNode !== 'object' || Array.isArray(txNode)) {\n return [];\n }\n return collectIndexedResources(txNode, 'transaction');\n }\n\n async playerStats(\n playerIds: Array<string | number>,\n reqType = 'date',\n date?: string,\n ): Promise<JsonObject> {\n return fetchLeaguePlayerStats(this.client, this.leagueKey, {\n playerIds,\n reqType,\n date,\n });\n }\n\n toTeam(teamKey: string): Team {\n return new Team({ client: this.client, teamKey });\n }\n\n toPlayer(playerKey: string): Player {\n return new Player({ client: this.client, playerKey, leagueKey: this.leagueKey });\n }\n\n toTransaction(transactionKey: string): Transaction {\n return new Transaction(this.client, transactionKey);\n }\n\n async postTransactionXml(xml: string): Promise<Response> {\n return this.client.post(`league/${this.leagueKey}/transactions`, xml);\n }\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { JsonObject } from '../types/raw.js';
|
|
2
|
+
export declare class Matchup {
|
|
3
|
+
readonly raw: JsonObject;
|
|
4
|
+
constructor(raw: JsonObject);
|
|
5
|
+
get week(): number | undefined;
|
|
6
|
+
get status(): string | undefined;
|
|
7
|
+
get winnerTeamKey(): string | undefined;
|
|
8
|
+
get teams(): JsonObject[];
|
|
9
|
+
}
|
|
10
|
+
export declare function parseMatchupsFromScoreboard(doc: JsonObject): Matchup[];
|
|
11
|
+
export declare function parseMatchupsFromTeam(doc: JsonObject): Matchup[];
|
|
12
|
+
//# sourceMappingURL=matchup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matchup.d.ts","sourceRoot":"","sources":["../../../src/yahoo/models/matchup.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGlD,qBAAa,OAAO;IAClB,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;gBAEb,GAAG,EAAE,UAAU;IAI3B,IAAI,IAAI,IAAI,MAAM,GAAG,SAAS,CAU7B;IAED,IAAI,MAAM,IAAI,MAAM,GAAG,SAAS,CAG/B;IAED,IAAI,aAAa,IAAI,MAAM,GAAG,SAAS,CAGtC;IAED,IAAI,KAAK,IAAI,UAAU,EAAE,CAMxB;CACF;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,EAAE,CAiBtE;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,UAAU,GAAG,OAAO,EAAE,CAahE"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { collectIndexedResources, flattenLeagueNode, flattenResource, getFantasyContent } from "../parse.js";
|
|
2
|
+
//#region src/yahoo/models/matchup.ts
|
|
3
|
+
var Matchup = class {
|
|
4
|
+
raw;
|
|
5
|
+
constructor(raw) {
|
|
6
|
+
this.raw = raw;
|
|
7
|
+
}
|
|
8
|
+
get week() {
|
|
9
|
+
const value = this.raw.week;
|
|
10
|
+
if (typeof value === "number") return value;
|
|
11
|
+
if (typeof value === "string") {
|
|
12
|
+
const parsed = Number.parseInt(value, 10);
|
|
13
|
+
return Number.isNaN(parsed) ? void 0 : parsed;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
get status() {
|
|
17
|
+
const value = this.raw.status;
|
|
18
|
+
return typeof value === "string" ? value : void 0;
|
|
19
|
+
}
|
|
20
|
+
get winnerTeamKey() {
|
|
21
|
+
const value = this.raw.winner_team_key;
|
|
22
|
+
return typeof value === "string" ? value : void 0;
|
|
23
|
+
}
|
|
24
|
+
get teams() {
|
|
25
|
+
const teams = this.raw.teams;
|
|
26
|
+
if (!teams || typeof teams !== "object" || Array.isArray(teams)) return [];
|
|
27
|
+
return collectIndexedResources(teams, "team");
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
function parseMatchupsFromScoreboard(doc) {
|
|
31
|
+
const league = flattenLeagueNode(getFantasyContent(doc).league);
|
|
32
|
+
let matchupsNode = league.matchups;
|
|
33
|
+
if (!matchupsNode || typeof matchupsNode !== "object" || Array.isArray(matchupsNode)) matchupsNode = flattenResource(league.scoreboard ?? {}).matchups;
|
|
34
|
+
if (!matchupsNode || typeof matchupsNode !== "object" || Array.isArray(matchupsNode)) return [];
|
|
35
|
+
return collectIndexedResources(matchupsNode, "matchup").map((raw) => new Matchup(raw));
|
|
36
|
+
}
|
|
37
|
+
function parseMatchupsFromTeam(doc) {
|
|
38
|
+
const teamNode = getFantasyContent(doc).team;
|
|
39
|
+
const matchupsNode = flattenResource(teamNode ?? {}).matchups;
|
|
40
|
+
if (!matchupsNode || typeof matchupsNode !== "object" || Array.isArray(matchupsNode)) return [];
|
|
41
|
+
return collectIndexedResources(matchupsNode, "matchup").map((raw) => new Matchup(raw));
|
|
42
|
+
}
|
|
43
|
+
//#endregion
|
|
44
|
+
export { Matchup, parseMatchupsFromScoreboard, parseMatchupsFromTeam };
|
|
45
|
+
|
|
46
|
+
//# sourceMappingURL=matchup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matchup.js","names":[],"sources":["../../../src/yahoo/models/matchup.ts"],"sourcesContent":["import type { JsonObject } from '../types/raw.js';\nimport { collectIndexedResources, flattenLeagueNode, flattenResource, getFantasyContent } from '../parse.js';\n\nexport class Matchup {\n readonly raw: JsonObject;\n\n constructor(raw: JsonObject) {\n this.raw = raw;\n }\n\n get week(): number | undefined {\n const value = this.raw.week;\n if (typeof value === 'number') {\n return value;\n }\n if (typeof value === 'string') {\n const parsed = Number.parseInt(value, 10);\n return Number.isNaN(parsed) ? undefined : parsed;\n }\n return undefined;\n }\n\n get status(): string | undefined {\n const value = this.raw.status;\n return typeof value === 'string' ? value : undefined;\n }\n\n get winnerTeamKey(): string | undefined {\n const value = this.raw.winner_team_key;\n return typeof value === 'string' ? value : undefined;\n }\n\n get teams(): JsonObject[] {\n const teams = this.raw.teams;\n if (!teams || typeof teams !== 'object' || Array.isArray(teams)) {\n return [];\n }\n return collectIndexedResources(teams, 'team');\n }\n}\n\nexport function parseMatchupsFromScoreboard(doc: JsonObject): Matchup[] {\n const content = getFantasyContent(doc);\n const league = flattenLeagueNode(content.league);\n\n let matchupsNode = league.matchups;\n if (!matchupsNode || typeof matchupsNode !== 'object' || Array.isArray(matchupsNode)) {\n const scoreboardFlat = flattenResource(league.scoreboard ?? {});\n matchupsNode = scoreboardFlat.matchups;\n }\n\n if (!matchupsNode || typeof matchupsNode !== 'object' || Array.isArray(matchupsNode)) {\n return [];\n }\n\n return collectIndexedResources(matchupsNode, 'matchup').map(\n (raw) => new Matchup(raw),\n );\n}\n\nexport function parseMatchupsFromTeam(doc: JsonObject): Matchup[] {\n const content = getFantasyContent(doc);\n const teamNode = content.team;\n const team = flattenResource(teamNode ?? {});\n\n const matchupsNode = team.matchups;\n if (!matchupsNode || typeof matchupsNode !== 'object' || Array.isArray(matchupsNode)) {\n return [];\n }\n\n return collectIndexedResources(matchupsNode, 'matchup').map(\n (raw) => new Matchup(raw),\n );\n}\n"],"mappings":";;AAGA,IAAa,UAAb,MAAqB;CACnB;CAEA,YAAY,KAAiB;EAC3B,KAAK,MAAM;CACb;CAEA,IAAI,OAA2B;EAC7B,MAAM,QAAQ,KAAK,IAAI;EACvB,IAAI,OAAO,UAAU,UACnB,OAAO;EAET,IAAI,OAAO,UAAU,UAAU;GAC7B,MAAM,SAAS,OAAO,SAAS,OAAO,EAAE;GACxC,OAAO,OAAO,MAAM,MAAM,IAAI,KAAA,IAAY;EAC5C;CAEF;CAEA,IAAI,SAA6B;EAC/B,MAAM,QAAQ,KAAK,IAAI;EACvB,OAAO,OAAO,UAAU,WAAW,QAAQ,KAAA;CAC7C;CAEA,IAAI,gBAAoC;EACtC,MAAM,QAAQ,KAAK,IAAI;EACvB,OAAO,OAAO,UAAU,WAAW,QAAQ,KAAA;CAC7C;CAEA,IAAI,QAAsB;EACxB,MAAM,QAAQ,KAAK,IAAI;EACvB,IAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAC5D,OAAO,CAAC;EAEV,OAAO,wBAAwB,OAAO,MAAM;CAC9C;AACF;AAEA,SAAgB,4BAA4B,KAA4B;CAEtE,MAAM,SAAS,kBADC,kBAAkB,GACD,EAAQ,MAAM;CAE/C,IAAI,eAAe,OAAO;CAC1B,IAAI,CAAC,gBAAgB,OAAO,iBAAiB,YAAY,MAAM,QAAQ,YAAY,GAEjF,eADuB,gBAAgB,OAAO,cAAc,CAAC,CAC9C,EAAe;CAGhC,IAAI,CAAC,gBAAgB,OAAO,iBAAiB,YAAY,MAAM,QAAQ,YAAY,GACjF,OAAO,CAAC;CAGV,OAAO,wBAAwB,cAAc,SAAS,EAAE,KACrD,QAAQ,IAAI,QAAQ,GAAG,CAC1B;AACF;AAEA,SAAgB,sBAAsB,KAA4B;CAEhE,MAAM,WADU,kBAAkB,GACjB,EAAQ;CAGzB,MAAM,eAFO,gBAAgB,YAAY,CAAC,CAErB,EAAK;CAC1B,IAAI,CAAC,gBAAgB,OAAO,iBAAiB,YAAY,MAAM,QAAQ,YAAY,GACjF,OAAO,CAAC;CAGV,OAAO,wBAAwB,cAAc,SAAS,EAAE,KACrD,QAAQ,IAAI,QAAQ,GAAG,CAC1B;AACF"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { YahooClient } from '../client.js';
|
|
2
|
+
import type { JsonObject } from '../types/raw.js';
|
|
3
|
+
export interface PlayerOptions {
|
|
4
|
+
client: YahooClient;
|
|
5
|
+
playerKey: string;
|
|
6
|
+
leagueKey?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface PlayerStatsOptions {
|
|
9
|
+
type?: string;
|
|
10
|
+
date?: string;
|
|
11
|
+
week?: number;
|
|
12
|
+
season?: number;
|
|
13
|
+
}
|
|
14
|
+
export declare class Player {
|
|
15
|
+
readonly client: YahooClient;
|
|
16
|
+
readonly playerKey: string;
|
|
17
|
+
readonly leagueKey?: string;
|
|
18
|
+
constructor(options: PlayerOptions);
|
|
19
|
+
metadata(): Promise<JsonObject>;
|
|
20
|
+
stats(options?: PlayerStatsOptions): Promise<JsonObject>;
|
|
21
|
+
ownership(leagueKey?: string): Promise<JsonObject>;
|
|
22
|
+
percentOwned(): Promise<JsonObject>;
|
|
23
|
+
draftAnalysis(): Promise<JsonObject>;
|
|
24
|
+
}
|
|
25
|
+
export interface LeaguePlayerStatsOptions {
|
|
26
|
+
playerIds: Array<string | number>;
|
|
27
|
+
reqType?: string;
|
|
28
|
+
date?: string;
|
|
29
|
+
week?: number;
|
|
30
|
+
season?: number;
|
|
31
|
+
}
|
|
32
|
+
export declare function fetchLeaguePlayerStats(client: YahooClient, leagueKey: string, options: LeaguePlayerStatsOptions): Promise<JsonObject>;
|
|
33
|
+
export declare function playerKeyFromLeague(leagueKey: string, playerId: string | number): string;
|
|
34
|
+
//# sourceMappingURL=player.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"player.d.ts","sourceRoot":"","sources":["../../../src/yahoo/models/player.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAOhD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGlD,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,WAAW,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,MAAM;IACjB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;gBAEhB,OAAO,EAAE,aAAa;IAM5B,QAAQ,IAAI,OAAO,CAAC,UAAU,CAAC;IAK/B,KAAK,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,UAAU,CAAC;IAO5D,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAWlD,YAAY,IAAI,OAAO,CAAC,UAAU,CAAC;IAKnC,aAAa,IAAI,OAAO,CAAC,UAAU,CAAC;CAI3C;AAED,MAAM,WAAW,wBAAwB;IACvC,SAAS,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,WAAW,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,UAAU,CAAC,CAQrB;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAGxF"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { getFantasyContent } from "../parse.js";
|
|
2
|
+
import { buildPlayerKeysFromIds, buildStatsUriParams, gameIdFromLeagueKey, joinKeys } from "../keys.js";
|
|
3
|
+
//#region src/yahoo/models/player.ts
|
|
4
|
+
var Player = class {
|
|
5
|
+
client;
|
|
6
|
+
playerKey;
|
|
7
|
+
leagueKey;
|
|
8
|
+
constructor(options) {
|
|
9
|
+
this.client = options.client;
|
|
10
|
+
this.playerKey = options.playerKey;
|
|
11
|
+
this.leagueKey = options.leagueKey;
|
|
12
|
+
}
|
|
13
|
+
async metadata() {
|
|
14
|
+
return getFantasyContent(await this.client.get(`player/${this.playerKey}`));
|
|
15
|
+
}
|
|
16
|
+
async stats(options = {}) {
|
|
17
|
+
const params = buildStatsUriParams(options.type ?? "season", options);
|
|
18
|
+
return getFantasyContent(await this.client.get(`player/${this.playerKey}/stats;${params}`));
|
|
19
|
+
}
|
|
20
|
+
async ownership(leagueKey) {
|
|
21
|
+
const key = leagueKey ?? this.leagueKey;
|
|
22
|
+
if (!key) throw new Error("leagueKey is required for ownership lookup");
|
|
23
|
+
return getFantasyContent(await this.client.get(`league/${key}/players;player_keys=${this.playerKey}/ownership`));
|
|
24
|
+
}
|
|
25
|
+
async percentOwned() {
|
|
26
|
+
return getFantasyContent(await this.client.get(`player/${this.playerKey}/percent_owned`));
|
|
27
|
+
}
|
|
28
|
+
async draftAnalysis() {
|
|
29
|
+
return getFantasyContent(await this.client.get(`player/${this.playerKey}/draft_analysis`));
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
async function fetchLeaguePlayerStats(client, leagueKey, options) {
|
|
33
|
+
const reqType = options.reqType ?? "date";
|
|
34
|
+
const playerKeys = buildPlayerKeysFromIds(leagueKey, options.playerIds);
|
|
35
|
+
const statsParams = buildStatsUriParams(reqType, options);
|
|
36
|
+
return getFantasyContent(await client.get(`league/${leagueKey}/players;player_keys=${joinKeys(playerKeys)}/stats;${statsParams}`));
|
|
37
|
+
}
|
|
38
|
+
function playerKeyFromLeague(leagueKey, playerId) {
|
|
39
|
+
return `${gameIdFromLeagueKey(leagueKey)}.p.${playerId}`;
|
|
40
|
+
}
|
|
41
|
+
//#endregion
|
|
42
|
+
export { Player, fetchLeaguePlayerStats, playerKeyFromLeague };
|
|
43
|
+
|
|
44
|
+
//# sourceMappingURL=player.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"player.js","names":[],"sources":["../../../src/yahoo/models/player.ts"],"sourcesContent":["import type { YahooClient } from '../client.js';\nimport {\n buildPlayerKeysFromIds,\n buildStatsUriParams,\n gameIdFromLeagueKey,\n joinKeys,\n} from '../keys.js';\nimport type { JsonObject } from '../types/raw.js';\nimport { getFantasyContent } from '../parse.js';\n\nexport interface PlayerOptions {\n client: YahooClient;\n playerKey: string;\n leagueKey?: string;\n}\n\nexport interface PlayerStatsOptions {\n type?: string;\n date?: string;\n week?: number;\n season?: number;\n}\n\nexport class Player {\n readonly client: YahooClient;\n readonly playerKey: string;\n readonly leagueKey?: string;\n\n constructor(options: PlayerOptions) {\n this.client = options.client;\n this.playerKey = options.playerKey;\n this.leagueKey = options.leagueKey;\n }\n\n async metadata(): Promise<JsonObject> {\n const doc = await this.client.get(`player/${this.playerKey}`);\n return getFantasyContent(doc);\n }\n\n async stats(options: PlayerStatsOptions = {}): Promise<JsonObject> {\n const type = options.type ?? 'season';\n const params = buildStatsUriParams(type, options);\n const doc = await this.client.get(`player/${this.playerKey}/stats;${params}`);\n return getFantasyContent(doc);\n }\n\n async ownership(leagueKey?: string): Promise<JsonObject> {\n const key = leagueKey ?? this.leagueKey;\n if (!key) {\n throw new Error('leagueKey is required for ownership lookup');\n }\n const doc = await this.client.get(\n `league/${key}/players;player_keys=${this.playerKey}/ownership`,\n );\n return getFantasyContent(doc);\n }\n\n async percentOwned(): Promise<JsonObject> {\n const doc = await this.client.get(`player/${this.playerKey}/percent_owned`);\n return getFantasyContent(doc);\n }\n\n async draftAnalysis(): Promise<JsonObject> {\n const doc = await this.client.get(`player/${this.playerKey}/draft_analysis`);\n return getFantasyContent(doc);\n }\n}\n\nexport interface LeaguePlayerStatsOptions {\n playerIds: Array<string | number>;\n reqType?: string;\n date?: string;\n week?: number;\n season?: number;\n}\n\nexport async function fetchLeaguePlayerStats(\n client: YahooClient,\n leagueKey: string,\n options: LeaguePlayerStatsOptions,\n): Promise<JsonObject> {\n const reqType = options.reqType ?? 'date';\n const playerKeys = buildPlayerKeysFromIds(leagueKey, options.playerIds);\n const statsParams = buildStatsUriParams(reqType, options);\n const doc = await client.get(\n `league/${leagueKey}/players;player_keys=${joinKeys(playerKeys)}/stats;${statsParams}`,\n );\n return getFantasyContent(doc);\n}\n\nexport function playerKeyFromLeague(leagueKey: string, playerId: string | number): string {\n const gameId = gameIdFromLeagueKey(leagueKey);\n return `${gameId}.p.${playerId}`;\n}\n"],"mappings":";;;AAuBA,IAAa,SAAb,MAAoB;CAClB;CACA;CACA;CAEA,YAAY,SAAwB;EAClC,KAAK,SAAS,QAAQ;EACtB,KAAK,YAAY,QAAQ;EACzB,KAAK,YAAY,QAAQ;CAC3B;CAEA,MAAM,WAAgC;EAEpC,OAAO,kBAAkB,MADP,KAAK,OAAO,IAAI,UAAU,KAAK,WAAW,CAChC;CAC9B;CAEA,MAAM,MAAM,UAA8B,CAAC,GAAwB;EAEjE,MAAM,SAAS,oBADF,QAAQ,QAAQ,UACY,OAAO;EAEhD,OAAO,kBAAkB,MADP,KAAK,OAAO,IAAI,UAAU,KAAK,UAAU,SAAS,QAAQ,CAChD;CAC9B;CAEA,MAAM,UAAU,WAAyC;EACvD,MAAM,MAAM,aAAa,KAAK;EAC9B,IAAI,CAAC,KACH,MAAM,IAAI,MAAM,4CAA4C;EAK9D,OAAO,kBAAkB,MAHP,KAAK,OAAO,IAC5B,UAAU,IAAI,uBAAuB,KAAK,UAAU,WACtD,CAC4B;CAC9B;CAEA,MAAM,eAAoC;EAExC,OAAO,kBAAkB,MADP,KAAK,OAAO,IAAI,UAAU,KAAK,UAAU,eAAe,CAC9C;CAC9B;CAEA,MAAM,gBAAqC;EAEzC,OAAO,kBAAkB,MADP,KAAK,OAAO,IAAI,UAAU,KAAK,UAAU,gBAAgB,CAC/C;CAC9B;AACF;AAUA,eAAsB,uBACpB,QACA,WACA,SACqB;CACrB,MAAM,UAAU,QAAQ,WAAW;CACnC,MAAM,aAAa,uBAAuB,WAAW,QAAQ,SAAS;CACtE,MAAM,cAAc,oBAAoB,SAAS,OAAO;CAIxD,OAAO,kBAAkB,MAHP,OAAO,IACvB,UAAU,UAAU,uBAAuB,SAAS,UAAU,EAAE,SAAS,aAC3E,CAC4B;AAC9B;AAEA,SAAgB,oBAAoB,WAAmB,UAAmC;CAExF,OAAO,GADQ,oBAAoB,SACzB,EAAO,KAAK;AACxB"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { JsonObject } from '../types/raw.js';
|
|
2
|
+
export interface RosterPlayer {
|
|
3
|
+
playerKey: string;
|
|
4
|
+
selectedPosition?: string;
|
|
5
|
+
raw: JsonObject;
|
|
6
|
+
}
|
|
7
|
+
export declare class Roster {
|
|
8
|
+
readonly raw: JsonObject;
|
|
9
|
+
readonly players: RosterPlayer[];
|
|
10
|
+
constructor(raw: JsonObject, players: RosterPlayer[]);
|
|
11
|
+
get coverageType(): string | undefined;
|
|
12
|
+
get date(): string | undefined;
|
|
13
|
+
get week(): number | undefined;
|
|
14
|
+
}
|
|
15
|
+
export declare function parseRosterFromResponse(doc: JsonObject): Roster;
|
|
16
|
+
//# sourceMappingURL=roster.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"roster.d.ts","sourceRoot":"","sources":["../../../src/yahoo/models/roster.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGlD,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,GAAG,EAAE,UAAU,CAAC;CACjB;AAED,qBAAa,MAAM;IACjB,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,YAAY,EAAE,CAAC;gBAErB,GAAG,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE;IAKpD,IAAI,YAAY,IAAI,MAAM,GAAG,SAAS,CAGrC;IAED,IAAI,IAAI,IAAI,MAAM,GAAG,SAAS,CAG7B;IAED,IAAI,IAAI,IAAI,MAAM,GAAG,SAAS,CAU7B;CACF;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,UAAU,GAAG,MAAM,CAqB/D"}
|