fantasy-basketball-sdk 0.0.0 → 1.1.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 +2 -1
- package/README.md +1 -0
- package/dist/espn/client.js +184 -144
- package/dist/espn/client.js.map +1 -1
- package/dist/espn/constants.js +176 -180
- package/dist/espn/constants.js.map +1 -1
- package/dist/espn/errors.js +34 -32
- package/dist/espn/errors.js.map +1 -1
- package/dist/espn/league.js +354 -284
- package/dist/espn/league.js.map +1 -1
- package/dist/espn/models/activity.js +42 -35
- package/dist/espn/models/activity.js.map +1 -1
- package/dist/espn/models/box-player.js +42 -36
- package/dist/espn/models/box-player.js.map +1 -1
- package/dist/espn/models/box-score.js +105 -108
- package/dist/espn/models/box-score.js.map +1 -1
- package/dist/espn/models/matchup.js +43 -50
- package/dist/espn/models/matchup.js.map +1 -1
- package/dist/espn/models/pick.js +20 -24
- package/dist/espn/models/pick.js.map +1 -1
- package/dist/espn/models/player.js +133 -119
- package/dist/espn/models/player.js.map +1 -1
- package/dist/espn/models/settings.js +62 -63
- package/dist/espn/models/settings.js.map +1 -1
- package/dist/espn/models/team.js +89 -80
- package/dist/espn/models/team.js.map +1 -1
- package/dist/espn/models/transaction.js +27 -31
- package/dist/espn/models/transaction.js.map +1 -1
- package/dist/espn/types/raw.js +2 -0
- package/dist/espn/types/raw.js.map +1 -0
- package/dist/espn/utils.js +48 -30
- package/dist/espn/utils.js.map +1 -1
- package/dist/mcp/config.d.ts +15 -0
- package/dist/mcp/config.d.ts.map +1 -0
- package/dist/mcp/config.js +41 -0
- package/dist/mcp/config.js.map +1 -0
- package/dist/mcp/create-server.d.ts +4 -0
- package/dist/mcp/create-server.d.ts.map +1 -0
- package/dist/mcp/create-server.js +19 -0
- package/dist/mcp/create-server.js.map +1 -0
- package/dist/mcp/index.d.ts +2 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +2 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/results.d.ts +5 -0
- package/dist/mcp/results.d.ts.map +1 -0
- package/dist/mcp/results.js +23 -0
- package/dist/mcp/results.js.map +1 -0
- package/dist/mcp/serialize.d.ts +24 -0
- package/dist/mcp/serialize.d.ts.map +1 -0
- package/dist/mcp/serialize.js +125 -0
- package/dist/mcp/serialize.js.map +1 -0
- package/dist/mcp/server.d.ts +3 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +4 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/espn.d.ts +3 -0
- package/dist/mcp/tools/espn.d.ts.map +1 -0
- package/dist/mcp/tools/espn.js +182 -0
- package/dist/mcp/tools/espn.js.map +1 -0
- package/dist/mcp/tools/yahoo.d.ts +3 -0
- package/dist/mcp/tools/yahoo.d.ts.map +1 -0
- package/dist/mcp/tools/yahoo.js +165 -0
- package/dist/mcp/tools/yahoo.js.map +1 -0
- package/dist/yahoo/client.js +94 -88
- package/dist/yahoo/client.js.map +1 -1
- package/dist/yahoo/constants.js +27 -31
- package/dist/yahoo/constants.js.map +1 -1
- package/dist/yahoo/errors.js +50 -49
- package/dist/yahoo/errors.js.map +1 -1
- package/dist/yahoo/keys.js +80 -62
- package/dist/yahoo/keys.js.map +1 -1
- package/dist/yahoo/models/league.js +175 -128
- package/dist/yahoo/models/league.js.map +1 -1
- package/dist/yahoo/models/matchup.js +54 -43
- package/dist/yahoo/models/matchup.js.map +1 -1
- package/dist/yahoo/models/player.js +47 -41
- package/dist/yahoo/models/player.js.map +1 -1
- package/dist/yahoo/models/roster.js +46 -44
- package/dist/yahoo/models/roster.js.map +1 -1
- package/dist/yahoo/models/settings.js +92 -75
- package/dist/yahoo/models/settings.js.map +1 -1
- package/dist/yahoo/models/team.js +54 -45
- package/dist/yahoo/models/team.js.map +1 -1
- package/dist/yahoo/models/transaction.js +17 -19
- package/dist/yahoo/models/transaction.js.map +1 -1
- package/dist/yahoo/parse.js +150 -92
- package/dist/yahoo/parse.js.map +1 -1
- package/dist/yahoo/types/raw.js +2 -0
- package/dist/yahoo/types/raw.js.map +1 -0
- package/dist/yahoo/xml.js +49 -33
- package/dist/yahoo/xml.js.map +1 -1
- package/package.json +14 -7
package/AGENTS.md
CHANGED
|
@@ -66,7 +66,8 @@ Merges to `main` run the `verify` job, then a `release` job that uses [semantic-
|
|
|
66
66
|
|
|
67
67
|
- **Do not manually bump `package.json` version** for routine releases — git tags and GitHub Releases are the source of truth
|
|
68
68
|
- **PR titles must follow [Conventional Commits](https://www.conventionalcommits.org/)** (`feat:`, `fix:`, etc.) because PRs are squash-merged and the title becomes the commit on `main`
|
|
69
|
-
-
|
|
69
|
+
- **Version bumps** (defined in `.releaserc.json`): `fix:`/`perf:` → patch, `feat:` → minor, `feat!:`/`BREAKING CHANGE:` → major; `chore:`/`docs:`/`ci:`/etc. → no publish
|
|
70
|
+
- **First release** is always `1.0.0` regardless of the triggering commit type
|
|
70
71
|
- **One-time npm setup:** register `fantasy-basketball-sdk` on npm and configure [trusted publishing](https://docs.npmjs.com/trusted-publishers) for GitHub Actions (`jacobra19/fantasy-basketball-sdk`, workflow `.github/workflows/ci.yml`, branch `main`). Fallback: add an `NPM_TOKEN` repo secret.
|
|
71
72
|
|
|
72
73
|
## Runtime Import Examples
|
package/README.md
CHANGED
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
</p>
|
|
9
9
|
<br/>
|
|
10
10
|
|
|
11
|
+
|
|
11
12
|
<p align="center">
|
|
12
13
|
<a href="https://github.com/jacobra19/fantasy-basketball-sdk/actions?query=branch%3Amain"><img src="https://github.com/jacobra19/fantasy-basketball-sdk/actions/workflows/ci.yml/badge.svg?event=push&branch=main" alt="CI status" /></a>
|
|
13
14
|
<a href="https://opensource.org/licenses/MIT" rel="nofollow"><img src="https://img.shields.io/github/license/jacobra19/fantasy-basketball-sdk" alt="License"></a>
|
package/dist/espn/client.js
CHANGED
|
@@ -1,145 +1,185 @@
|
|
|
1
|
-
import { FANTASY_BASE_ENDPOINT, NEWS_BASE_ENDPOINT, View } from
|
|
2
|
-
import { EspnAccessDenied, EspnApiError, EspnInvalidLeague, assertEspnResponse } from
|
|
3
|
-
import { buildCookieHeader, buildQueryString } from
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
};
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
1
|
+
import { FANTASY_BASE_ENDPOINT, NEWS_BASE_ENDPOINT, SPORT_PATH, View } from './constants.js';
|
|
2
|
+
import { EspnAccessDenied, EspnApiError, EspnInvalidLeague, assertEspnResponse, } from './errors.js';
|
|
3
|
+
import { buildCookieHeader, buildQueryString } from './utils.js';
|
|
4
|
+
export class EspnClient {
|
|
5
|
+
leagueId;
|
|
6
|
+
seasonId;
|
|
7
|
+
fetchFn;
|
|
8
|
+
cookieHeader;
|
|
9
|
+
endpoint;
|
|
10
|
+
newsEndpoint;
|
|
11
|
+
leagueEndpoint;
|
|
12
|
+
constructor(options) {
|
|
13
|
+
this.leagueId = options.leagueId;
|
|
14
|
+
this.seasonId = options.seasonId;
|
|
15
|
+
this.fetchFn = options.fetch ?? globalThis.fetch;
|
|
16
|
+
this.cookieHeader = buildCookieHeader(options.espnS2, options.swid);
|
|
17
|
+
this.endpoint = `${FANTASY_BASE_ENDPOINT}${SPORT_PATH}/seasons/${options.seasonId}`;
|
|
18
|
+
this.newsEndpoint = `${NEWS_BASE_ENDPOINT}${SPORT_PATH}/news/players`;
|
|
19
|
+
this.leagueEndpoint = this.buildLeagueEndpoint(options.seasonId, options.leagueId);
|
|
20
|
+
}
|
|
21
|
+
buildLeagueEndpoint(seasonId, leagueId) {
|
|
22
|
+
const base = `${FANTASY_BASE_ENDPOINT}${SPORT_PATH}`;
|
|
23
|
+
if (seasonId < 2018) {
|
|
24
|
+
return `${base}/leagueHistory/${leagueId}?seasonId=${seasonId}`;
|
|
25
|
+
}
|
|
26
|
+
return `${base}/seasons/${seasonId}/segments/0/leagues/${leagueId}`;
|
|
27
|
+
}
|
|
28
|
+
swapLeagueEndpoint() {
|
|
29
|
+
const base = `${FANTASY_BASE_ENDPOINT}${SPORT_PATH}`;
|
|
30
|
+
if (this.leagueEndpoint.includes('/leagueHistory/')) {
|
|
31
|
+
this.leagueEndpoint = `${base}/seasons/${this.seasonId}/segments/0/leagues/${this.leagueId}`;
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
this.leagueEndpoint = `${base}/leagueHistory/${this.leagueId}?seasonId=${this.seasonId}`;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
async requestJson(url, init) {
|
|
38
|
+
const headers = new Headers(init?.headers);
|
|
39
|
+
if (this.cookieHeader) {
|
|
40
|
+
headers.set('Cookie', this.cookieHeader);
|
|
41
|
+
}
|
|
42
|
+
const response = await this.fetchFn(url, { ...init, headers });
|
|
43
|
+
return { response, body: await response.json() };
|
|
44
|
+
}
|
|
45
|
+
async checkLeagueStatus(status, extend, params, headers) {
|
|
46
|
+
if (status === 401) {
|
|
47
|
+
const originalEndpoint = this.leagueEndpoint;
|
|
48
|
+
this.swapLeagueEndpoint();
|
|
49
|
+
const query = buildQueryString(params ?? {});
|
|
50
|
+
const url = `${this.leagueEndpoint}${extend}${query}`;
|
|
51
|
+
const retryHeaders = new Headers(headers);
|
|
52
|
+
if (this.cookieHeader) {
|
|
53
|
+
retryHeaders.set('Cookie', this.cookieHeader);
|
|
54
|
+
}
|
|
55
|
+
const retryResponse = await this.fetchFn(url, { headers: retryHeaders });
|
|
56
|
+
if (retryResponse.ok) {
|
|
57
|
+
return retryResponse.json();
|
|
58
|
+
}
|
|
59
|
+
this.leagueEndpoint = originalEndpoint;
|
|
60
|
+
if (!this.cookieHeader) {
|
|
61
|
+
throw new EspnAccessDenied();
|
|
62
|
+
}
|
|
63
|
+
throw new EspnAccessDenied(`League ${this.leagueId} cannot be accessed with the provided credentials`);
|
|
64
|
+
}
|
|
65
|
+
if (status === 404) {
|
|
66
|
+
throw new EspnInvalidLeague(this.leagueId);
|
|
67
|
+
}
|
|
68
|
+
if (status !== 200) {
|
|
69
|
+
throw new EspnApiError(status);
|
|
70
|
+
}
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
async leagueGet(options = {}) {
|
|
74
|
+
const { params, headers, extend = '' } = options;
|
|
75
|
+
const query = buildQueryString(params ?? {});
|
|
76
|
+
const url = `${this.leagueEndpoint}${extend}${query}`;
|
|
77
|
+
const requestHeaders = new Headers(headers);
|
|
78
|
+
if (this.cookieHeader) {
|
|
79
|
+
requestHeaders.set('Cookie', this.cookieHeader);
|
|
80
|
+
}
|
|
81
|
+
const response = await this.fetchFn(url, { headers: requestHeaders });
|
|
82
|
+
const alternate = await this.checkLeagueStatus(response.status, extend, params, headers);
|
|
83
|
+
let data;
|
|
84
|
+
if (alternate !== null) {
|
|
85
|
+
data = alternate;
|
|
86
|
+
}
|
|
87
|
+
else if (!response.ok) {
|
|
88
|
+
throw new EspnApiError(response.status);
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
data = await response.json();
|
|
92
|
+
}
|
|
93
|
+
if (Array.isArray(data)) {
|
|
94
|
+
data = data[0];
|
|
95
|
+
}
|
|
96
|
+
assertEspnResponse(data);
|
|
97
|
+
return data;
|
|
98
|
+
}
|
|
99
|
+
async get(options = {}) {
|
|
100
|
+
const { params, headers, extend = '' } = options;
|
|
101
|
+
const query = buildQueryString(params ?? {});
|
|
102
|
+
const url = `${this.endpoint}${extend}${query}`;
|
|
103
|
+
const requestHeaders = new Headers(headers);
|
|
104
|
+
if (this.cookieHeader) {
|
|
105
|
+
requestHeaders.set('Cookie', this.cookieHeader);
|
|
106
|
+
}
|
|
107
|
+
const response = await this.fetchFn(url, { headers: requestHeaders });
|
|
108
|
+
await this.checkLeagueStatus(response.status, extend, params, headers);
|
|
109
|
+
if (!response.ok) {
|
|
110
|
+
throw new EspnApiError(response.status);
|
|
111
|
+
}
|
|
112
|
+
const data = await response.json();
|
|
113
|
+
assertEspnResponse(data);
|
|
114
|
+
return data;
|
|
115
|
+
}
|
|
116
|
+
async newsGet(options = {}) {
|
|
117
|
+
const { params, headers, extend = '' } = options;
|
|
118
|
+
const query = buildQueryString(params ?? {});
|
|
119
|
+
const url = `${this.newsEndpoint}${extend}${query}`;
|
|
120
|
+
const requestHeaders = new Headers(headers);
|
|
121
|
+
if (this.cookieHeader) {
|
|
122
|
+
requestHeaders.set('Cookie', this.cookieHeader);
|
|
123
|
+
}
|
|
124
|
+
const response = await this.fetchFn(url, { headers: requestHeaders });
|
|
125
|
+
if (!response.ok) {
|
|
126
|
+
throw new EspnApiError(response.status);
|
|
127
|
+
}
|
|
128
|
+
return response.json();
|
|
129
|
+
}
|
|
130
|
+
async getLeague() {
|
|
131
|
+
return this.leagueGet({
|
|
132
|
+
params: {
|
|
133
|
+
view: [
|
|
134
|
+
View.MTeam,
|
|
135
|
+
View.MRoster,
|
|
136
|
+
View.MMatchup,
|
|
137
|
+
View.MSettings,
|
|
138
|
+
View.MStandings,
|
|
139
|
+
],
|
|
140
|
+
},
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
async getProSchedule() {
|
|
144
|
+
return (await this.get({
|
|
145
|
+
params: { view: View.ProTeamSchedules },
|
|
146
|
+
}));
|
|
147
|
+
}
|
|
148
|
+
async getProPlayers() {
|
|
149
|
+
const filters = { filterActive: { value: true } };
|
|
150
|
+
const data = await this.get({
|
|
151
|
+
extend: '/players',
|
|
152
|
+
params: { view: View.Players },
|
|
153
|
+
headers: { 'x-fantasy-filter': JSON.stringify(filters) },
|
|
154
|
+
});
|
|
155
|
+
return data;
|
|
156
|
+
}
|
|
157
|
+
async getLeagueDraft() {
|
|
158
|
+
return this.leagueGet({
|
|
159
|
+
params: { view: View.MDraftDetail },
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
async getPlayerCard(playerIds, maxScoringPeriod, additionalFilters) {
|
|
163
|
+
const additionalValue = [`00${this.seasonId}`, `10${this.seasonId}`];
|
|
164
|
+
if (additionalFilters) {
|
|
165
|
+
additionalValue.push(...additionalFilters);
|
|
166
|
+
}
|
|
167
|
+
const filters = {
|
|
168
|
+
players: {
|
|
169
|
+
filterIds: { value: playerIds },
|
|
170
|
+
filterStatsForTopScoringPeriodIds: {
|
|
171
|
+
value: maxScoringPeriod,
|
|
172
|
+
additionalValue,
|
|
173
|
+
},
|
|
174
|
+
},
|
|
175
|
+
};
|
|
176
|
+
return this.leagueGet({
|
|
177
|
+
params: { view: View.KonaPlayerCard },
|
|
178
|
+
headers: { 'x-fantasy-filter': JSON.stringify(filters) },
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
async getPlayerNews(playerId) {
|
|
182
|
+
return this.newsGet({ params: { playerId } });
|
|
183
|
+
}
|
|
184
|
+
}
|
|
145
185
|
//# sourceMappingURL=client.js.map
|
package/dist/espn/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","names":[],"sources":["../../src/espn/client.ts"],"sourcesContent":["import { FANTASY_BASE_ENDPOINT, NEWS_BASE_ENDPOINT, SPORT_PATH, View } from './constants.js';\nimport {\n EspnAccessDenied,\n EspnApiError,\n EspnInvalidLeague,\n assertEspnResponse,\n} from './errors.js';\nimport type { EspnLeagueResponse, EspnProPlayer, EspnProScheduleResponse } from './types/raw.js';\nimport { buildCookieHeader, buildQueryString } from './utils.js';\n\nexport interface EspnClientOptions {\n leagueId: number;\n seasonId: number;\n espnS2?: string;\n swid?: string;\n fetch?: typeof globalThis.fetch;\n}\n\nexport interface RequestOptions {\n params?: Record<string, string | number | string[] | number[] | undefined>;\n headers?: Record<string, string>;\n extend?: string;\n}\n\nexport class EspnClient {\n readonly leagueId: number;\n readonly seasonId: number;\n\n private readonly fetchFn: typeof globalThis.fetch;\n private readonly cookieHeader: string | undefined;\n private readonly endpoint: string;\n private readonly newsEndpoint: string;\n private leagueEndpoint: string;\n\n constructor(options: EspnClientOptions) {\n this.leagueId = options.leagueId;\n this.seasonId = options.seasonId;\n this.fetchFn = options.fetch ?? globalThis.fetch;\n this.cookieHeader = buildCookieHeader(options.espnS2, options.swid);\n this.endpoint = `${FANTASY_BASE_ENDPOINT}${SPORT_PATH}/seasons/${options.seasonId}`;\n this.newsEndpoint = `${NEWS_BASE_ENDPOINT}${SPORT_PATH}/news/players`;\n this.leagueEndpoint = this.buildLeagueEndpoint(options.seasonId, options.leagueId);\n }\n\n private buildLeagueEndpoint(seasonId: number, leagueId: number): string {\n const base = `${FANTASY_BASE_ENDPOINT}${SPORT_PATH}`;\n if (seasonId < 2018) {\n return `${base}/leagueHistory/${leagueId}?seasonId=${seasonId}`;\n }\n return `${base}/seasons/${seasonId}/segments/0/leagues/${leagueId}`;\n }\n\n private swapLeagueEndpoint(): void {\n const base = `${FANTASY_BASE_ENDPOINT}${SPORT_PATH}`;\n if (this.leagueEndpoint.includes('/leagueHistory/')) {\n this.leagueEndpoint = `${base}/seasons/${this.seasonId}/segments/0/leagues/${this.leagueId}`;\n } else {\n this.leagueEndpoint = `${base}/leagueHistory/${this.leagueId}?seasonId=${this.seasonId}`;\n }\n }\n\n private async requestJson(url: string, init?: RequestInit): Promise<unknown> {\n const headers = new Headers(init?.headers);\n if (this.cookieHeader) {\n headers.set('Cookie', this.cookieHeader);\n }\n\n const response = await this.fetchFn(url, { ...init, headers });\n return { response, body: await response.json() };\n }\n\n private async checkLeagueStatus(\n status: number,\n extend: string,\n params?: RequestOptions['params'],\n headers?: Record<string, string>,\n ): Promise<unknown | null> {\n if (status === 401) {\n const originalEndpoint = this.leagueEndpoint;\n this.swapLeagueEndpoint();\n\n const query = buildQueryString(params ?? {});\n const url = `${this.leagueEndpoint}${extend}${query}`;\n const retryHeaders = new Headers(headers);\n if (this.cookieHeader) {\n retryHeaders.set('Cookie', this.cookieHeader);\n }\n\n const retryResponse = await this.fetchFn(url, { headers: retryHeaders });\n if (retryResponse.ok) {\n return retryResponse.json();\n }\n\n this.leagueEndpoint = originalEndpoint;\n if (!this.cookieHeader) {\n throw new EspnAccessDenied();\n }\n throw new EspnAccessDenied(\n `League ${this.leagueId} cannot be accessed with the provided credentials`,\n );\n }\n\n if (status === 404) {\n throw new EspnInvalidLeague(this.leagueId);\n }\n\n if (status !== 200) {\n throw new EspnApiError(status);\n }\n\n return null;\n }\n\n async leagueGet(options: RequestOptions = {}): Promise<EspnLeagueResponse> {\n const { params, headers, extend = '' } = options;\n const query = buildQueryString(params ?? {});\n const url = `${this.leagueEndpoint}${extend}${query}`;\n\n const requestHeaders = new Headers(headers);\n if (this.cookieHeader) {\n requestHeaders.set('Cookie', this.cookieHeader);\n }\n\n const response = await this.fetchFn(url, { headers: requestHeaders });\n const alternate = await this.checkLeagueStatus(response.status, extend, params, headers);\n\n let data: unknown;\n if (alternate !== null) {\n data = alternate;\n } else if (!response.ok) {\n throw new EspnApiError(response.status);\n } else {\n data = await response.json();\n }\n\n if (Array.isArray(data)) {\n data = data[0];\n }\n\n assertEspnResponse(data);\n return data as EspnLeagueResponse;\n }\n\n async get(options: RequestOptions = {}): Promise<unknown> {\n const { params, headers, extend = '' } = options;\n const query = buildQueryString(params ?? {});\n const url = `${this.endpoint}${extend}${query}`;\n\n const requestHeaders = new Headers(headers);\n if (this.cookieHeader) {\n requestHeaders.set('Cookie', this.cookieHeader);\n }\n\n const response = await this.fetchFn(url, { headers: requestHeaders });\n await this.checkLeagueStatus(response.status, extend, params, headers);\n\n if (!response.ok) {\n throw new EspnApiError(response.status);\n }\n\n const data = await response.json();\n assertEspnResponse(data);\n return data;\n }\n\n async newsGet(options: RequestOptions = {}): Promise<unknown> {\n const { params, headers, extend = '' } = options;\n const query = buildQueryString(params ?? {});\n const url = `${this.newsEndpoint}${extend}${query}`;\n\n const requestHeaders = new Headers(headers);\n if (this.cookieHeader) {\n requestHeaders.set('Cookie', this.cookieHeader);\n }\n\n const response = await this.fetchFn(url, { headers: requestHeaders });\n if (!response.ok) {\n throw new EspnApiError(response.status);\n }\n\n return response.json();\n }\n\n async getLeague(): Promise<EspnLeagueResponse> {\n return this.leagueGet({\n params: {\n view: [\n View.MTeam,\n View.MRoster,\n View.MMatchup,\n View.MSettings,\n View.MStandings,\n ],\n },\n });\n }\n\n async getProSchedule(): Promise<EspnProScheduleResponse> {\n return (await this.get({\n params: { view: View.ProTeamSchedules },\n })) as EspnProScheduleResponse;\n }\n\n async getProPlayers(): Promise<EspnProPlayer[]> {\n const filters = { filterActive: { value: true } };\n const data = await this.get({\n extend: '/players',\n params: { view: View.Players },\n headers: { 'x-fantasy-filter': JSON.stringify(filters) },\n });\n return data as EspnProPlayer[];\n }\n\n async getLeagueDraft(): Promise<EspnLeagueResponse> {\n return this.leagueGet({\n params: { view: View.MDraftDetail },\n });\n }\n\n async getPlayerCard(\n playerIds: number[],\n maxScoringPeriod: number,\n additionalFilters?: string[],\n ): Promise<EspnLeagueResponse> {\n const additionalValue = [`00${this.seasonId}`, `10${this.seasonId}`];\n if (additionalFilters) {\n additionalValue.push(...additionalFilters);\n }\n\n const filters = {\n players: {\n filterIds: { value: playerIds },\n filterStatsForTopScoringPeriodIds: {\n value: maxScoringPeriod,\n additionalValue,\n },\n },\n };\n\n return this.leagueGet({\n params: { view: View.KonaPlayerCard },\n headers: { 'x-fantasy-filter': JSON.stringify(filters) },\n });\n }\n\n async getPlayerNews(playerId: number): Promise<unknown> {\n return this.newsGet({ params: { playerId } });\n }\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/espn/client.ts"],"names":[],"mappings":"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"}
|