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.
Files changed (163) hide show
  1. package/AGENTS.md +101 -0
  2. package/LICENSE +13 -0
  3. package/README.md +195 -0
  4. package/dist/core/index.d.ts +3 -0
  5. package/dist/core/index.d.ts.map +1 -0
  6. package/dist/core/index.js +2 -0
  7. package/dist/core/providers.d.ts +2 -0
  8. package/dist/core/providers.d.ts.map +1 -0
  9. package/dist/core/providers.js +10 -0
  10. package/dist/core/providers.js.map +1 -0
  11. package/dist/core/types.d.ts +2 -0
  12. package/dist/core/types.d.ts.map +1 -0
  13. package/dist/espn/client.d.ts +37 -0
  14. package/dist/espn/client.d.ts.map +1 -0
  15. package/dist/espn/client.js +145 -0
  16. package/dist/espn/client.js.map +1 -0
  17. package/dist/espn/constants.d.ts +34 -0
  18. package/dist/espn/constants.d.ts.map +1 -0
  19. package/dist/espn/constants.js +189 -0
  20. package/dist/espn/constants.js.map +1 -0
  21. package/dist/espn/errors.d.ts +19 -0
  22. package/dist/espn/errors.d.ts.map +1 -0
  23. package/dist/espn/errors.js +34 -0
  24. package/dist/espn/errors.js.map +1 -0
  25. package/dist/espn/index.d.ts +18 -0
  26. package/dist/espn/index.d.ts.map +1 -0
  27. package/dist/espn/index.js +19 -0
  28. package/dist/espn/index.js.map +1 -0
  29. package/dist/espn/league.d.ts +76 -0
  30. package/dist/espn/league.d.ts.map +1 -0
  31. package/dist/espn/league.js +285 -0
  32. package/dist/espn/league.js.map +1 -0
  33. package/dist/espn/models/activity.d.ts +14 -0
  34. package/dist/espn/models/activity.d.ts.map +1 -0
  35. package/dist/espn/models/activity.js +36 -0
  36. package/dist/espn/models/activity.js.map +1 -0
  37. package/dist/espn/models/box-player.d.ts +11 -0
  38. package/dist/espn/models/box-player.d.ts.map +1 -0
  39. package/dist/espn/models/box-player.js +37 -0
  40. package/dist/espn/models/box-player.js.map +1 -0
  41. package/dist/espn/models/box-score.d.ts +45 -0
  42. package/dist/espn/models/box-score.d.ts.map +1 -0
  43. package/dist/espn/models/box-score.js +111 -0
  44. package/dist/espn/models/box-score.js.map +1 -0
  45. package/dist/espn/models/matchup.d.ts +22 -0
  46. package/dist/espn/models/matchup.d.ts.map +1 -0
  47. package/dist/espn/models/matchup.js +51 -0
  48. package/dist/espn/models/matchup.js.map +1 -0
  49. package/dist/espn/models/pick.d.ts +13 -0
  50. package/dist/espn/models/pick.d.ts.map +1 -0
  51. package/dist/espn/models/pick.js +25 -0
  52. package/dist/espn/models/pick.js.map +1 -0
  53. package/dist/espn/models/player.d.ts +47 -0
  54. package/dist/espn/models/player.d.ts.map +1 -0
  55. package/dist/espn/models/player.js +120 -0
  56. package/dist/espn/models/player.js.map +1 -0
  57. package/dist/espn/models/settings.d.ts +29 -0
  58. package/dist/espn/models/settings.d.ts.map +1 -0
  59. package/dist/espn/models/settings.js +64 -0
  60. package/dist/espn/models/settings.js.map +1 -0
  61. package/dist/espn/models/team.d.ts +33 -0
  62. package/dist/espn/models/team.d.ts.map +1 -0
  63. package/dist/espn/models/team.js +81 -0
  64. package/dist/espn/models/team.js.map +1 -0
  65. package/dist/espn/models/transaction.d.ts +18 -0
  66. package/dist/espn/models/transaction.d.ts.map +1 -0
  67. package/dist/espn/models/transaction.js +32 -0
  68. package/dist/espn/models/transaction.js.map +1 -0
  69. package/dist/espn/types/raw.d.ts +26 -0
  70. package/dist/espn/types/raw.d.ts.map +1 -0
  71. package/dist/espn/utils.d.ts +5 -0
  72. package/dist/espn/utils.d.ts.map +1 -0
  73. package/dist/espn/utils.js +35 -0
  74. package/dist/espn/utils.js.map +1 -0
  75. package/dist/fantrax/index.d.ts +2 -0
  76. package/dist/fantrax/index.d.ts.map +1 -0
  77. package/dist/fantrax/index.js +6 -0
  78. package/dist/fantrax/index.js.map +1 -0
  79. package/dist/index.d.ts +3 -0
  80. package/dist/index.d.ts.map +1 -0
  81. package/dist/index.js +2 -0
  82. package/dist/runtime/fetch.d.ts +5 -0
  83. package/dist/runtime/fetch.d.ts.map +1 -0
  84. package/dist/runtime/fetch.js +8 -0
  85. package/dist/runtime/fetch.js.map +1 -0
  86. package/dist/runtime/index.d.ts +3 -0
  87. package/dist/runtime/index.d.ts.map +1 -0
  88. package/dist/runtime/index.js +2 -0
  89. package/dist/yahoo/client.d.ts +22 -0
  90. package/dist/yahoo/client.d.ts.map +1 -0
  91. package/dist/yahoo/client.js +89 -0
  92. package/dist/yahoo/client.js.map +1 -0
  93. package/dist/yahoo/constants.d.ts +41 -0
  94. package/dist/yahoo/constants.d.ts.map +1 -0
  95. package/dist/yahoo/constants.js +42 -0
  96. package/dist/yahoo/constants.js.map +1 -0
  97. package/dist/yahoo/errors.d.ts +24 -0
  98. package/dist/yahoo/errors.d.ts.map +1 -0
  99. package/dist/yahoo/errors.js +51 -0
  100. package/dist/yahoo/errors.js.map +1 -0
  101. package/dist/yahoo/index.d.ts +30 -0
  102. package/dist/yahoo/index.d.ts.map +1 -0
  103. package/dist/yahoo/index.js +23 -0
  104. package/dist/yahoo/index.js.map +1 -0
  105. package/dist/yahoo/keys.d.ts +29 -0
  106. package/dist/yahoo/keys.d.ts.map +1 -0
  107. package/dist/yahoo/keys.js +63 -0
  108. package/dist/yahoo/keys.js.map +1 -0
  109. package/dist/yahoo/models/game.d.ts +31 -0
  110. package/dist/yahoo/models/game.d.ts.map +1 -0
  111. package/dist/yahoo/models/game.js +68 -0
  112. package/dist/yahoo/models/game.js.map +1 -0
  113. package/dist/yahoo/models/league.d.ts +62 -0
  114. package/dist/yahoo/models/league.d.ts.map +1 -0
  115. package/dist/yahoo/models/league.js +129 -0
  116. package/dist/yahoo/models/league.js.map +1 -0
  117. package/dist/yahoo/models/matchup.d.ts +12 -0
  118. package/dist/yahoo/models/matchup.d.ts.map +1 -0
  119. package/dist/yahoo/models/matchup.js +46 -0
  120. package/dist/yahoo/models/matchup.js.map +1 -0
  121. package/dist/yahoo/models/player.d.ts +34 -0
  122. package/dist/yahoo/models/player.d.ts.map +1 -0
  123. package/dist/yahoo/models/player.js +44 -0
  124. package/dist/yahoo/models/player.js.map +1 -0
  125. package/dist/yahoo/models/roster.d.ts +16 -0
  126. package/dist/yahoo/models/roster.d.ts.map +1 -0
  127. package/dist/yahoo/models/roster.js +46 -0
  128. package/dist/yahoo/models/roster.js.map +1 -0
  129. package/dist/yahoo/models/settings.d.ts +21 -0
  130. package/dist/yahoo/models/settings.d.ts.map +1 -0
  131. package/dist/yahoo/models/settings.js +79 -0
  132. package/dist/yahoo/models/settings.js.map +1 -0
  133. package/dist/yahoo/models/team.d.ts +40 -0
  134. package/dist/yahoo/models/team.d.ts.map +1 -0
  135. package/dist/yahoo/models/team.js +46 -0
  136. package/dist/yahoo/models/team.js.map +1 -0
  137. package/dist/yahoo/models/transaction.d.ts +10 -0
  138. package/dist/yahoo/models/transaction.d.ts.map +1 -0
  139. package/dist/yahoo/models/transaction.js +20 -0
  140. package/dist/yahoo/models/transaction.js.map +1 -0
  141. package/dist/yahoo/models/user.d.ts +19 -0
  142. package/dist/yahoo/models/user.d.ts.map +1 -0
  143. package/dist/yahoo/models/user.js +36 -0
  144. package/dist/yahoo/models/user.js.map +1 -0
  145. package/dist/yahoo/parse.d.ts +26 -0
  146. package/dist/yahoo/parse.d.ts.map +1 -0
  147. package/dist/yahoo/parse.js +116 -0
  148. package/dist/yahoo/parse.js.map +1 -0
  149. package/dist/yahoo/types/raw.d.ts +10 -0
  150. package/dist/yahoo/types/raw.d.ts.map +1 -0
  151. package/dist/yahoo/write/roster.d.ts +7 -0
  152. package/dist/yahoo/write/roster.d.ts.map +1 -0
  153. package/dist/yahoo/write/roster.js +13 -0
  154. package/dist/yahoo/write/roster.js.map +1 -0
  155. package/dist/yahoo/write/transactions.d.ts +42 -0
  156. package/dist/yahoo/write/transactions.d.ts.map +1 -0
  157. package/dist/yahoo/write/transactions.js +51 -0
  158. package/dist/yahoo/write/transactions.js.map +1 -0
  159. package/dist/yahoo/xml.d.ts +42 -0
  160. package/dist/yahoo/xml.d.ts.map +1 -0
  161. package/dist/yahoo/xml.js +118 -0
  162. package/dist/yahoo/xml.js.map +1 -0
  163. package/package.json +79 -0
package/AGENTS.md ADDED
@@ -0,0 +1,101 @@
1
+ # Fantasy Basketball SDK — Agent Guide
2
+
3
+ Tree-shakeable, ESM-only TypeScript SDK for fantasy basketball APIs (ESPN, Yahoo, Fantrax, extensible). Infra-first phase: scaffold and build pipeline only until provider logic is explicitly requested.
4
+
5
+ ## Architecture
6
+
7
+ - **Subpath exports** — import one provider without pulling others: `fantasy-basketball-sdk/espn`, `/yahoo`, `/fantrax`
8
+ - **`src/core/`** — shared types and errors (no provider-specific code)
9
+ - **`src/runtime/`** — web-standard adapters (`fetch`, `URL`, `Headers`); no `node:*` imports
10
+ - **`src/<provider>/`** — one folder per fantasy platform
11
+
12
+ ```text
13
+ Consumers → package.json exports → provider → core → runtime
14
+ ```
15
+
16
+ ## Build, Test & Lint
17
+
18
+ ```bash
19
+ npm ci
20
+ npm run typecheck
21
+ npm run lint
22
+ npm run test
23
+ npm run build
24
+ npm run verify # publint + scripts/verify-dist.mjs (dist ESM smoke imports)
25
+ ```
26
+
27
+ Watch rebuild during development:
28
+
29
+ ```bash
30
+ npm run dev
31
+ ```
32
+
33
+ ## Code Conventions
34
+
35
+ - **ESM only** — `"type": "module"`; use `.js` extensions in relative imports (`./foo.js`)
36
+ - **Strict TypeScript** — `verbatimModuleSyntax`, no `any` without justification
37
+ - **Web-standard APIs only** in `src/` — `fetch`, `URL`, `Headers`; no `process.env`, no `node:*`, no `require()`
38
+ - **Tree-shaking** — add providers as subpath entries, not giant root barrels
39
+ - **Side effects** — keep `"sideEffects": false`; avoid top-level side effects in modules
40
+
41
+ ## File Structure
42
+
43
+ ```text
44
+ src/
45
+ index.ts # minimal root re-exports
46
+ core/ # shared types
47
+ runtime/ # FetchClient and adapters
48
+ espn/index.ts
49
+ yahoo/index.ts
50
+ fantrax/index.ts
51
+ ```
52
+
53
+ Build output mirrors `src/` under `dist/` via Vite `preserveModules` + `tsc --emitDeclarationOnly`.
54
+
55
+ ## Adding a New Provider
56
+
57
+ 1. Create `src/<provider>/index.ts` with a `PROVIDER` constant or stub exports
58
+ 2. Add Vite lib entry in `vite.config.ts`: `'<provider>/index': resolve(__dirname, 'src/<provider>/index.ts')`
59
+ 3. Add `exports["./<provider>"]` in `package.json` (`types` + `import` paths under `dist/`)
60
+ 4. Add a smoke test in `test/exports.test.ts`
61
+ 5. Run `npm run build && npm run verify`
62
+
63
+ ## Releases
64
+
65
+ Merges to `main` run the `verify` job, then a `release` job that uses [semantic-release](https://github.com/semantic-release/semantic-release) to publish to npm when the squash-merge commit is releasable.
66
+
67
+ - **Do not manually bump `package.json` version** for routine releases — git tags and GitHub Releases are the source of truth
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
+ - **`chore:` / `docs:` / `ci:` merges do not publish** — only `feat`, `fix`, `perf`, and breaking changes trigger a release
70
+ - **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
+ ## Runtime Import Examples
73
+
74
+ ```ts
75
+ // Node 18+, Bun
76
+ import { PROVIDER } from 'fantasy-basketball-sdk/espn';
77
+
78
+ // Deno
79
+ import { PROVIDER } from 'npm:fantasy-basketball-sdk/espn';
80
+
81
+ // Browser / Cloudflare Workers (bundle or bare ESM)
82
+ import { PROVIDER } from 'fantasy-basketball-sdk/espn';
83
+ ```
84
+
85
+ ## Boundaries
86
+
87
+ - Do not commit secrets, tokens, or real league credentials
88
+ - Do not implement ESPN/Yahoo/Fantrax API logic unless explicitly asked
89
+ - Do not add CJS output or `require()` compatibility
90
+ - Do not import Node built-ins in `src/`
91
+ - Do not expand root `src/index.ts` with provider implementations (breaks tree-shaking)
92
+
93
+ ## Common Mistakes
94
+
95
+ | Wrong | Correct |
96
+ | ------------------------------------------------------- | ----------------------------------------------- |
97
+ | `import from 'fantasy-basketball-sdk'` for one provider | `import from 'fantasy-basketball-sdk/espn'` |
98
+ | `import './foo'` without `.js` extension | `import './foo.js'` |
99
+ | `import fs from 'node:fs'` in library code | Use web APIs or accept injection via `runtime/` |
100
+ | Re-export all providers from root index | Keep root minimal; use subpaths |
101
+ | `process.env.YAHOO_TOKEN` in SDK | Pass config from consumer explicitly |
package/LICENSE ADDED
@@ -0,0 +1,13 @@
1
+ Copyright (c) 2026, Yakov Rakhamimov
2
+
3
+ Permission to use, copy, modify, and/or distribute this software for any
4
+ purpose with or without fee is hereby granted, provided that the above
5
+ copyright notice and this permission notice appear in all copies.
6
+
7
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
+ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
+ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
10
+ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
+ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
12
+ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
13
+ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,195 @@
1
+ <p align="center">
2
+ <h1 align="center">fantasy-basketball-sdk</h1>
3
+ <p align="center">
4
+ Tree-shakeable fantasy basketball API SDK for ESPN, Yahoo, Fantrax, and more
5
+ <br/>
6
+ by <a href="https://github.com/jacobra19">Yakov Rakhamimov</a>
7
+ </p>
8
+ </p>
9
+ <br/>
10
+
11
+ <p align="center">
12
+ <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
+ <a href="https://opensource.org/licenses/MIT" rel="nofollow"><img src="https://img.shields.io/github/license/jacobra19/fantasy-basketball-sdk" alt="License"></a>
14
+ <a href="https://www.npmjs.com/package/fantasy-basketball-sdk" rel="nofollow"><img src="https://img.shields.io/npm/dw/fantasy-basketball-sdk.svg" alt="npm"></a>
15
+ <a href="https://github.com/jacobra19/fantasy-basketball-sdk" rel="nofollow"><img src="https://img.shields.io/github/stars/jacobra19/fantasy-basketball-sdk" alt="stars"></a>
16
+ </p>
17
+
18
+ <div align="center">
19
+ <a href="#quick-start">Quick start</a>
20
+ <span>&nbsp;&nbsp;•&nbsp;&nbsp;</span>
21
+ <a href="./CONTRIBUTING.md">Contributing</a>
22
+ <span>&nbsp;&nbsp;•&nbsp;&nbsp;</span>
23
+ <a href="./AGENTS.md">Agents</a>
24
+ <span>&nbsp;&nbsp;•&nbsp;&nbsp;</span>
25
+ <a href="https://github.com/jacobra19/fantasy-basketball-sdk">GitHub</a>
26
+ <br />
27
+ </div>
28
+
29
+ <br/>
30
+
31
+ > **Early development** — ESPN and Yahoo NBA APIs are available. Fantrax is still a placeholder.
32
+
33
+ ## Features
34
+
35
+ - **ESM-only** with TypeScript types included (`dist/*.d.ts`)
36
+ - **Subpath imports** per provider — `fantasy-basketball-sdk/espn`, `/yahoo`, `/fantrax`
37
+ - Shared **`/core`** (types, shared constants) and **`/runtime`** (web-standard HTTP adapters)
38
+ - Runs in **Node.js 18+**, **Bun**, **Deno**, **browsers**, and **Cloudflare Workers** (uses `fetch`, no Node built-ins in library code)
39
+
40
+ ## Requirements
41
+
42
+ - **Node.js >= 18** (when using Node)
43
+ - An **ESM** consumer project (`"type": "module"` in `package.json`, or a bundler that resolves ESM)
44
+
45
+ ## Installation
46
+
47
+ ```bash
48
+ npm install fantasy-basketball-sdk
49
+ ```
50
+
51
+ Releases are published automatically to npm when releasable changes merge to `main`. See [CONTRIBUTING.md](./CONTRIBUTING.md#releases) for how versioning works.
52
+
53
+ For local development or testing before a release:
54
+
55
+ ```bash
56
+ npm install /path/to/fantasy-basketball-sdk
57
+ # or: npm install github:jacobra19/fantasy-basketball-sdk
58
+ ```
59
+
60
+ ## Quick start
61
+
62
+ Import only what you need. Prefer a **provider subpath** when you work with one platform so bundlers can tree-shake the rest.
63
+
64
+ ### ESPN (Node / Bun)
65
+
66
+ ```ts
67
+ import { League } from 'fantasy-basketball-sdk/espn';
68
+
69
+ // Public leagues: omit espnS2 and swid. Private leagues: pass ESPN session cookies.
70
+ const league = await League.create({
71
+ leagueId: 123456,
72
+ seasonId: 2025,
73
+ espnS2: '...',
74
+ swid: '{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}',
75
+ });
76
+
77
+ console.log(league.settings.name);
78
+
79
+ for (const team of league.standings()) {
80
+ console.log(team.teamName, team.wins, team.losses);
81
+ }
82
+
83
+ const matchups = await league.scoreboard();
84
+ const freeAgents = await league.freeAgents({ size: 25 });
85
+ const transactions = await league.transactions();
86
+ ```
87
+
88
+ `League.create` loads league data by default. Pass `fetchLeague: false` to construct without an initial fetch, then call `await league.fetchLeague()` when ready.
89
+
90
+ ### Yahoo (Node / Bun)
91
+
92
+ Yahoo requires an OAuth 2.0 access token with Fantasy Sports scope. Obtain tokens via the [Yahoo OAuth 2.0 guide](https://developer.yahoo.com/oauth2/guide/) in your app, then pass the token to the SDK:
93
+
94
+ ```ts
95
+ import { Game, League, YahooClient, addPlayer, setLineup } from 'fantasy-basketball-sdk/yahoo';
96
+
97
+ const accessToken = '...'; // from your OAuth flow
98
+
99
+ // Discover leagues for the logged-in user
100
+ const game = Game.forNba(new YahooClient({ accessToken }));
101
+ const leagueKeys = await game.leagueKeys({ seasons: ['2025'] });
102
+
103
+ // Load a league by key or by numeric id + season
104
+ const league = await League.create({
105
+ leagueKey: leagueKeys[0],
106
+ accessToken,
107
+ });
108
+
109
+ console.log(league.settings?.name);
110
+
111
+ const standings = await league.standings();
112
+ const matchups = await league.scoreboard();
113
+ const freeAgents = await league.players({ status: 'FA', count: 25 });
114
+
115
+ // Write: lineup edit (NBA uses date-based rosters)
116
+ const team = league.toTeam(`${league.leagueKey}.t.1`);
117
+ await setLineup(team, {
118
+ date: '2025-01-15',
119
+ moves: [{ playerKey: '466.p.1234', position: 'PG' }],
120
+ });
121
+
122
+ // Write: add a free agent
123
+ await addPlayer(league, {
124
+ teamKey: `${league.leagueKey}.t.1`,
125
+ playerKey: '466.p.5678',
126
+ });
127
+ ```
128
+
129
+ Pass `refreshAccessToken` to `YahooClient` or `League.create` for automatic retry when the token expires.
130
+
131
+ ### Deno
132
+
133
+ ```ts
134
+ import { League } from 'npm:fantasy-basketball-sdk/espn';
135
+
136
+ const league = await League.create({ leagueId: 123456, seasonId: 2025 });
137
+ console.log(league.standings().map((team) => team.teamName));
138
+ ```
139
+
140
+ ### Browser / Cloudflare Workers
141
+
142
+ Use your bundler’s usual ESM resolution (Vite, webpack, esbuild, etc.):
143
+
144
+ ```ts
145
+ import { League } from 'fantasy-basketball-sdk/espn';
146
+
147
+ const league = await League.create({ leagueId: 123456, seasonId: 2025 });
148
+ ```
149
+
150
+ ## Subpath exports
151
+
152
+ | Subpath | Purpose | Main symbols (today) |
153
+ | -------------------------------- | -------------------------- | ---------------------------------- |
154
+ | `fantasy-basketball-sdk` | Root entry | `Provider`, `PROVIDERS` |
155
+ | `fantasy-basketball-sdk/espn` | ESPN NBA read API | `League`, `Team`, `Player`, `Matchup` |
156
+ | `fantasy-basketball-sdk/yahoo` | Yahoo NBA API (read + write) | `League`, `Game`, `Team`, `Player`, `YahooClient` |
157
+ | `fantasy-basketball-sdk/fantrax` | Fantrax module | `PROVIDER` |
158
+ | `fantasy-basketball-sdk/core` | Shared types and constants | `Provider`, `PROVIDERS` |
159
+ | `fantasy-basketball-sdk/runtime` | HTTP adapter | `FetchClient`, `createFetchClient` |
160
+
161
+ ## Tree-shaking
162
+
163
+ - Import `fantasy-basketball-sdk/espn` (or `/yahoo`, `/fantrax`) instead of the root package when you only need one platform.
164
+ - The package sets `"sideEffects": false` so unused modules can be dropped by your bundler.
165
+
166
+ ## TypeScript
167
+
168
+ Types are published next to the JS output under `dist/`. You do not need `@types/fantasy-basketball-sdk`.
169
+
170
+ For best results, use a modern `moduleResolution` setting (`Node16`, `NodeNext`, or `Bundler`) and ESM in your project.
171
+
172
+ ## Development
173
+
174
+ Clone the repo and run:
175
+
176
+ ```bash
177
+ npm ci
178
+ npm run typecheck
179
+ npm run lint
180
+ npm run test
181
+ npm run build
182
+ npm run verify
183
+ ```
184
+
185
+ **Contributors:** see [CONTRIBUTING.md](./CONTRIBUTING.md) for the PR workflow, branch protection, and merge policy.
186
+
187
+ **Coding agents:** see [AGENTS.md](./AGENTS.md) for architecture, conventions, and how to add a new provider.
188
+
189
+ ## Roadmap
190
+
191
+ ESPN and Yahoo NBA APIs are implemented. Fantrax client is planned.
192
+
193
+ ## License
194
+
195
+ [ISC](./LICENSE)
@@ -0,0 +1,3 @@
1
+ export type { Provider } from './types.js';
2
+ export { PROVIDERS } from './providers.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { PROVIDERS } from "./providers.js";
2
+ export { PROVIDERS };
@@ -0,0 +1,2 @@
1
+ export declare const PROVIDERS: readonly ["espn", "yahoo", "fantrax"];
2
+ //# sourceMappingURL=providers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../src/core/providers.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,SAAS,uCAAsE,CAAC"}
@@ -0,0 +1,10 @@
1
+ //#region src/core/providers.ts
2
+ var PROVIDERS = [
3
+ "espn",
4
+ "yahoo",
5
+ "fantrax"
6
+ ];
7
+ //#endregion
8
+ export { PROVIDERS };
9
+
10
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","names":[],"sources":["../../src/core/providers.ts"],"sourcesContent":["import type { Provider } from './types.js';\n\nexport const PROVIDERS = ['espn', 'yahoo', 'fantrax'] as const satisfies readonly Provider[];\n"],"mappings":";AAEA,IAAa,YAAY;CAAC;CAAQ;CAAS;AAAS"}
@@ -0,0 +1,2 @@
1
+ export type Provider = 'espn' | 'yahoo' | 'fantrax';
2
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC"}
@@ -0,0 +1,37 @@
1
+ import type { EspnLeagueResponse, EspnProPlayer, EspnProScheduleResponse } from './types/raw.js';
2
+ export interface EspnClientOptions {
3
+ leagueId: number;
4
+ seasonId: number;
5
+ espnS2?: string;
6
+ swid?: string;
7
+ fetch?: typeof globalThis.fetch;
8
+ }
9
+ export interface RequestOptions {
10
+ params?: Record<string, string | number | string[] | number[] | undefined>;
11
+ headers?: Record<string, string>;
12
+ extend?: string;
13
+ }
14
+ export declare class EspnClient {
15
+ readonly leagueId: number;
16
+ readonly seasonId: number;
17
+ private readonly fetchFn;
18
+ private readonly cookieHeader;
19
+ private readonly endpoint;
20
+ private readonly newsEndpoint;
21
+ private leagueEndpoint;
22
+ constructor(options: EspnClientOptions);
23
+ private buildLeagueEndpoint;
24
+ private swapLeagueEndpoint;
25
+ private requestJson;
26
+ private checkLeagueStatus;
27
+ leagueGet(options?: RequestOptions): Promise<EspnLeagueResponse>;
28
+ get(options?: RequestOptions): Promise<unknown>;
29
+ newsGet(options?: RequestOptions): Promise<unknown>;
30
+ getLeague(): Promise<EspnLeagueResponse>;
31
+ getProSchedule(): Promise<EspnProScheduleResponse>;
32
+ getProPlayers(): Promise<EspnProPlayer[]>;
33
+ getLeagueDraft(): Promise<EspnLeagueResponse>;
34
+ getPlayerCard(playerIds: number[], maxScoringPeriod: number, additionalFilters?: string[]): Promise<EspnLeagueResponse>;
35
+ getPlayerNews(playerId: number): Promise<unknown>;
36
+ }
37
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/espn/client.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,aAAa,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAGjG,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;CACjC;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,qBAAa,UAAU;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAE1B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAClD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAqB;IAClD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,cAAc,CAAS;gBAEnB,OAAO,EAAE,iBAAiB;IAUtC,OAAO,CAAC,mBAAmB;IAQ3B,OAAO,CAAC,kBAAkB;YASZ,WAAW;YAUX,iBAAiB;IA0CzB,SAAS,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IA8BpE,GAAG,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IAsBnD,OAAO,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IAkBvD,SAAS,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAcxC,cAAc,IAAI,OAAO,CAAC,uBAAuB,CAAC;IAMlD,aAAa,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC;IAUzC,cAAc,IAAI,OAAO,CAAC,kBAAkB,CAAC;IAM7C,aAAa,CACjB,SAAS,EAAE,MAAM,EAAE,EACnB,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,CAAC,EAAE,MAAM,EAAE,GAC3B,OAAO,CAAC,kBAAkB,CAAC;IAsBxB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAGxD"}
@@ -0,0 +1,145 @@
1
+ import { FANTASY_BASE_ENDPOINT, NEWS_BASE_ENDPOINT, View } from "./constants.js";
2
+ import { EspnAccessDenied, EspnApiError, EspnInvalidLeague, assertEspnResponse } from "./errors.js";
3
+ import { buildCookieHeader, buildQueryString } from "./utils.js";
4
+ //#region src/espn/client.ts
5
+ var EspnClient = class {
6
+ leagueId;
7
+ seasonId;
8
+ fetchFn;
9
+ cookieHeader;
10
+ endpoint;
11
+ newsEndpoint;
12
+ leagueEndpoint;
13
+ constructor(options) {
14
+ this.leagueId = options.leagueId;
15
+ this.seasonId = options.seasonId;
16
+ this.fetchFn = options.fetch ?? globalThis.fetch;
17
+ this.cookieHeader = buildCookieHeader(options.espnS2, options.swid);
18
+ this.endpoint = `${FANTASY_BASE_ENDPOINT}fba/seasons/${options.seasonId}`;
19
+ this.newsEndpoint = `${NEWS_BASE_ENDPOINT}fba/news/players`;
20
+ this.leagueEndpoint = this.buildLeagueEndpoint(options.seasonId, options.leagueId);
21
+ }
22
+ buildLeagueEndpoint(seasonId, leagueId) {
23
+ const base = `${FANTASY_BASE_ENDPOINT}fba`;
24
+ if (seasonId < 2018) return `${base}/leagueHistory/${leagueId}?seasonId=${seasonId}`;
25
+ return `${base}/seasons/${seasonId}/segments/0/leagues/${leagueId}`;
26
+ }
27
+ swapLeagueEndpoint() {
28
+ const base = `${FANTASY_BASE_ENDPOINT}fba`;
29
+ if (this.leagueEndpoint.includes("/leagueHistory/")) this.leagueEndpoint = `${base}/seasons/${this.seasonId}/segments/0/leagues/${this.leagueId}`;
30
+ else this.leagueEndpoint = `${base}/leagueHistory/${this.leagueId}?seasonId=${this.seasonId}`;
31
+ }
32
+ async requestJson(url, init) {
33
+ const headers = new Headers(init?.headers);
34
+ if (this.cookieHeader) headers.set("Cookie", this.cookieHeader);
35
+ const response = await this.fetchFn(url, {
36
+ ...init,
37
+ headers
38
+ });
39
+ return {
40
+ response,
41
+ body: await response.json()
42
+ };
43
+ }
44
+ async checkLeagueStatus(status, extend, params, headers) {
45
+ if (status === 401) {
46
+ const originalEndpoint = this.leagueEndpoint;
47
+ this.swapLeagueEndpoint();
48
+ const query = buildQueryString(params ?? {});
49
+ const url = `${this.leagueEndpoint}${extend}${query}`;
50
+ const retryHeaders = new Headers(headers);
51
+ if (this.cookieHeader) retryHeaders.set("Cookie", this.cookieHeader);
52
+ const retryResponse = await this.fetchFn(url, { headers: retryHeaders });
53
+ if (retryResponse.ok) return retryResponse.json();
54
+ this.leagueEndpoint = originalEndpoint;
55
+ if (!this.cookieHeader) throw new EspnAccessDenied();
56
+ throw new EspnAccessDenied(`League ${this.leagueId} cannot be accessed with the provided credentials`);
57
+ }
58
+ if (status === 404) throw new EspnInvalidLeague(this.leagueId);
59
+ if (status !== 200) throw new EspnApiError(status);
60
+ return null;
61
+ }
62
+ async leagueGet(options = {}) {
63
+ const { params, headers, extend = "" } = options;
64
+ const query = buildQueryString(params ?? {});
65
+ const url = `${this.leagueEndpoint}${extend}${query}`;
66
+ const requestHeaders = new Headers(headers);
67
+ if (this.cookieHeader) requestHeaders.set("Cookie", this.cookieHeader);
68
+ const response = await this.fetchFn(url, { headers: requestHeaders });
69
+ const alternate = await this.checkLeagueStatus(response.status, extend, params, headers);
70
+ let data;
71
+ if (alternate !== null) data = alternate;
72
+ else if (!response.ok) throw new EspnApiError(response.status);
73
+ else data = await response.json();
74
+ if (Array.isArray(data)) data = data[0];
75
+ assertEspnResponse(data);
76
+ return data;
77
+ }
78
+ async get(options = {}) {
79
+ const { params, headers, extend = "" } = options;
80
+ const query = buildQueryString(params ?? {});
81
+ const url = `${this.endpoint}${extend}${query}`;
82
+ const requestHeaders = new Headers(headers);
83
+ if (this.cookieHeader) requestHeaders.set("Cookie", this.cookieHeader);
84
+ const response = await this.fetchFn(url, { headers: requestHeaders });
85
+ await this.checkLeagueStatus(response.status, extend, params, headers);
86
+ if (!response.ok) throw new EspnApiError(response.status);
87
+ const data = await response.json();
88
+ assertEspnResponse(data);
89
+ return data;
90
+ }
91
+ async newsGet(options = {}) {
92
+ const { params, headers, extend = "" } = options;
93
+ const query = buildQueryString(params ?? {});
94
+ const url = `${this.newsEndpoint}${extend}${query}`;
95
+ const requestHeaders = new Headers(headers);
96
+ if (this.cookieHeader) requestHeaders.set("Cookie", this.cookieHeader);
97
+ const response = await this.fetchFn(url, { headers: requestHeaders });
98
+ if (!response.ok) throw new EspnApiError(response.status);
99
+ return response.json();
100
+ }
101
+ async getLeague() {
102
+ return this.leagueGet({ params: { view: [
103
+ View.MTeam,
104
+ View.MRoster,
105
+ View.MMatchup,
106
+ View.MSettings,
107
+ View.MStandings
108
+ ] } });
109
+ }
110
+ async getProSchedule() {
111
+ return await this.get({ params: { view: View.ProTeamSchedules } });
112
+ }
113
+ async getProPlayers() {
114
+ return await this.get({
115
+ extend: "/players",
116
+ params: { view: View.Players },
117
+ headers: { "x-fantasy-filter": JSON.stringify({ filterActive: { value: true } }) }
118
+ });
119
+ }
120
+ async getLeagueDraft() {
121
+ return this.leagueGet({ params: { view: View.MDraftDetail } });
122
+ }
123
+ async getPlayerCard(playerIds, maxScoringPeriod, additionalFilters) {
124
+ const additionalValue = [`00${this.seasonId}`, `10${this.seasonId}`];
125
+ if (additionalFilters) additionalValue.push(...additionalFilters);
126
+ const filters = { players: {
127
+ filterIds: { value: playerIds },
128
+ filterStatsForTopScoringPeriodIds: {
129
+ value: maxScoringPeriod,
130
+ additionalValue
131
+ }
132
+ } };
133
+ return this.leagueGet({
134
+ params: { view: View.KonaPlayerCard },
135
+ headers: { "x-fantasy-filter": JSON.stringify(filters) }
136
+ });
137
+ }
138
+ async getPlayerNews(playerId) {
139
+ return this.newsGet({ params: { playerId } });
140
+ }
141
+ };
142
+ //#endregion
143
+ export { EspnClient };
144
+
145
+ //# sourceMappingURL=client.js.map
@@ -0,0 +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":";;;;AAwBA,IAAa,aAAb,MAAwB;CACtB;CACA;CAEA;CACA;CACA;CACA;CACA;CAEA,YAAY,SAA4B;EACtC,KAAK,WAAW,QAAQ;EACxB,KAAK,WAAW,QAAQ;EACxB,KAAK,UAAU,QAAQ,SAAS,WAAW;EAC3C,KAAK,eAAe,kBAAkB,QAAQ,QAAQ,QAAQ,IAAI;EAClE,KAAK,WAAW,GAAG,oCAA8C,QAAQ;EACzE,KAAK,eAAe,GAAG;EACvB,KAAK,iBAAiB,KAAK,oBAAoB,QAAQ,UAAU,QAAQ,QAAQ;CACnF;CAEA,oBAA4B,UAAkB,UAA0B;EACtE,MAAM,OAAO,GAAG;EAChB,IAAI,WAAW,MACb,OAAO,GAAG,KAAK,iBAAiB,SAAS,YAAY;EAEvD,OAAO,GAAG,KAAK,WAAW,SAAS,sBAAsB;CAC3D;CAEA,qBAAmC;EACjC,MAAM,OAAO,GAAG;EAChB,IAAI,KAAK,eAAe,SAAS,iBAAiB,GAChD,KAAK,iBAAiB,GAAG,KAAK,WAAW,KAAK,SAAS,sBAAsB,KAAK;OAElF,KAAK,iBAAiB,GAAG,KAAK,iBAAiB,KAAK,SAAS,YAAY,KAAK;CAElF;CAEA,MAAc,YAAY,KAAa,MAAsC;EAC3E,MAAM,UAAU,IAAI,QAAQ,MAAM,OAAO;EACzC,IAAI,KAAK,cACP,QAAQ,IAAI,UAAU,KAAK,YAAY;EAGzC,MAAM,WAAW,MAAM,KAAK,QAAQ,KAAK;GAAE,GAAG;GAAM;EAAQ,CAAC;EAC7D,OAAO;GAAE;GAAU,MAAM,MAAM,SAAS,KAAK;EAAE;CACjD;CAEA,MAAc,kBACZ,QACA,QACA,QACA,SACyB;EACzB,IAAI,WAAW,KAAK;GAClB,MAAM,mBAAmB,KAAK;GAC9B,KAAK,mBAAmB;GAExB,MAAM,QAAQ,iBAAiB,UAAU,CAAC,CAAC;GAC3C,MAAM,MAAM,GAAG,KAAK,iBAAiB,SAAS;GAC9C,MAAM,eAAe,IAAI,QAAQ,OAAO;GACxC,IAAI,KAAK,cACP,aAAa,IAAI,UAAU,KAAK,YAAY;GAG9C,MAAM,gBAAgB,MAAM,KAAK,QAAQ,KAAK,EAAE,SAAS,aAAa,CAAC;GACvE,IAAI,cAAc,IAChB,OAAO,cAAc,KAAK;GAG5B,KAAK,iBAAiB;GACtB,IAAI,CAAC,KAAK,cACR,MAAM,IAAI,iBAAiB;GAE7B,MAAM,IAAI,iBACR,UAAU,KAAK,SAAS,kDAC1B;EACF;EAEA,IAAI,WAAW,KACb,MAAM,IAAI,kBAAkB,KAAK,QAAQ;EAG3C,IAAI,WAAW,KACb,MAAM,IAAI,aAAa,MAAM;EAG/B,OAAO;CACT;CAEA,MAAM,UAAU,UAA0B,CAAC,GAAgC;EACzE,MAAM,EAAE,QAAQ,SAAS,SAAS,OAAO;EACzC,MAAM,QAAQ,iBAAiB,UAAU,CAAC,CAAC;EAC3C,MAAM,MAAM,GAAG,KAAK,iBAAiB,SAAS;EAE9C,MAAM,iBAAiB,IAAI,QAAQ,OAAO;EAC1C,IAAI,KAAK,cACP,eAAe,IAAI,UAAU,KAAK,YAAY;EAGhD,MAAM,WAAW,MAAM,KAAK,QAAQ,KAAK,EAAE,SAAS,eAAe,CAAC;EACpE,MAAM,YAAY,MAAM,KAAK,kBAAkB,SAAS,QAAQ,QAAQ,QAAQ,OAAO;EAEvF,IAAI;EACJ,IAAI,cAAc,MAChB,OAAO;OACF,IAAI,CAAC,SAAS,IACnB,MAAM,IAAI,aAAa,SAAS,MAAM;OAEtC,OAAO,MAAM,SAAS,KAAK;EAG7B,IAAI,MAAM,QAAQ,IAAI,GACpB,OAAO,KAAK;EAGd,mBAAmB,IAAI;EACvB,OAAO;CACT;CAEA,MAAM,IAAI,UAA0B,CAAC,GAAqB;EACxD,MAAM,EAAE,QAAQ,SAAS,SAAS,OAAO;EACzC,MAAM,QAAQ,iBAAiB,UAAU,CAAC,CAAC;EAC3C,MAAM,MAAM,GAAG,KAAK,WAAW,SAAS;EAExC,MAAM,iBAAiB,IAAI,QAAQ,OAAO;EAC1C,IAAI,KAAK,cACP,eAAe,IAAI,UAAU,KAAK,YAAY;EAGhD,MAAM,WAAW,MAAM,KAAK,QAAQ,KAAK,EAAE,SAAS,eAAe,CAAC;EACpE,MAAM,KAAK,kBAAkB,SAAS,QAAQ,QAAQ,QAAQ,OAAO;EAErE,IAAI,CAAC,SAAS,IACZ,MAAM,IAAI,aAAa,SAAS,MAAM;EAGxC,MAAM,OAAO,MAAM,SAAS,KAAK;EACjC,mBAAmB,IAAI;EACvB,OAAO;CACT;CAEA,MAAM,QAAQ,UAA0B,CAAC,GAAqB;EAC5D,MAAM,EAAE,QAAQ,SAAS,SAAS,OAAO;EACzC,MAAM,QAAQ,iBAAiB,UAAU,CAAC,CAAC;EAC3C,MAAM,MAAM,GAAG,KAAK,eAAe,SAAS;EAE5C,MAAM,iBAAiB,IAAI,QAAQ,OAAO;EAC1C,IAAI,KAAK,cACP,eAAe,IAAI,UAAU,KAAK,YAAY;EAGhD,MAAM,WAAW,MAAM,KAAK,QAAQ,KAAK,EAAE,SAAS,eAAe,CAAC;EACpE,IAAI,CAAC,SAAS,IACZ,MAAM,IAAI,aAAa,SAAS,MAAM;EAGxC,OAAO,SAAS,KAAK;CACvB;CAEA,MAAM,YAAyC;EAC7C,OAAO,KAAK,UAAU,EACpB,QAAQ,EACN,MAAM;GACJ,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;EACP,EACF,EACF,CAAC;CACH;CAEA,MAAM,iBAAmD;EACvD,OAAQ,MAAM,KAAK,IAAI,EACrB,QAAQ,EAAE,MAAM,KAAK,iBAAiB,EACxC,CAAC;CACH;CAEA,MAAM,gBAA0C;EAO9C,OAAO,MALY,KAAK,IAAI;GAC1B,QAAQ;GACR,QAAQ,EAAE,MAAM,KAAK,QAAQ;GAC7B,SAAS,EAAE,oBAAoB,KAAK,UAAU,EAJ9B,cAAc,EAAE,OAAO,KAAK,EAIE,CAAO,EAAE;EACzD,CAAC;CAEH;CAEA,MAAM,iBAA8C;EAClD,OAAO,KAAK,UAAU,EACpB,QAAQ,EAAE,MAAM,KAAK,aAAa,EACpC,CAAC;CACH;CAEA,MAAM,cACJ,WACA,kBACA,mBAC6B;EAC7B,MAAM,kBAAkB,CAAC,KAAK,KAAK,YAAY,KAAK,KAAK,UAAU;EACnE,IAAI,mBACF,gBAAgB,KAAK,GAAG,iBAAiB;EAG3C,MAAM,UAAU,EACd,SAAS;GACP,WAAW,EAAE,OAAO,UAAU;GAC9B,mCAAmC;IACjC,OAAO;IACP;GACF;EACF,EACF;EAEA,OAAO,KAAK,UAAU;GACpB,QAAQ,EAAE,MAAM,KAAK,eAAe;GACpC,SAAS,EAAE,oBAAoB,KAAK,UAAU,OAAO,EAAE;EACzD,CAAC;CACH;CAEA,MAAM,cAAc,UAAoC;EACtD,OAAO,KAAK,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC;CAC9C;AACF"}
@@ -0,0 +1,34 @@
1
+ export declare const FANTASY_BASE_ENDPOINT = "https://lm-api-reads.fantasy.espn.com/apis/v3/games/";
2
+ export declare const NEWS_BASE_ENDPOINT = "https://site.api.espn.com/apis/fantasy/v3/games/";
3
+ export declare const SPORT_PATH = "fba";
4
+ export declare const View: {
5
+ readonly Modular: "modular";
6
+ readonly MNav: "mNav";
7
+ readonly MSettings: "mSettings";
8
+ readonly MStatus: "mStatus";
9
+ readonly MTeam: "mTeam";
10
+ readonly MBoxscore: "mBoxscore";
11
+ readonly MMatchupScore: "mMatchupScore";
12
+ readonly MRoster: "mRoster";
13
+ readonly MScoreboard: "mScoreboard";
14
+ readonly MTopPerformers: "mTopPerformers";
15
+ readonly KonaGameState: "kona_game_state";
16
+ readonly MMatchup: "mMatchup";
17
+ readonly MStandings: "mStandings";
18
+ readonly MDraftDetail: "mDraftDetail";
19
+ readonly KonaPlayerInfo: "kona_player_info";
20
+ readonly KonaPlayerCard: "kona_playercard";
21
+ readonly KonaLeagueCommunication: "kona_league_communication";
22
+ readonly MTransactions2: "mTransactions2";
23
+ readonly ProTeamSchedules: "proTeamSchedules_wl";
24
+ readonly Players: "players_wl";
25
+ };
26
+ export type ViewValue = (typeof View)[keyof typeof View];
27
+ export declare const POSITION_MAP: Record<number | string, number | string>;
28
+ export declare const PRO_TEAM_MAP: Record<number, string>;
29
+ export declare const STATS_MAP: Record<string, string>;
30
+ export declare const STAT_ID_MAP: Record<string, string>;
31
+ export declare const ACTIVITY_MAP: Record<number | string, number | string>;
32
+ export declare const TRANSACTION_TYPES: Set<string>;
33
+ export declare const NINE_CAT_STATS: Set<string>;
34
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/espn/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,yDACsB,CAAC;AACzD,eAAO,MAAM,kBAAkB,qDAAqD,CAAC;AACrF,eAAO,MAAM,UAAU,QAAQ,CAAC;AAEhC,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;CAqBP,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,IAAI,CAAC,CAAC,MAAM,OAAO,IAAI,CAAC,CAAC;AAEzD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,GAAG,MAAM,CAgCjE,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAgC/C,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CA+C5C,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAM9C,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,EAAE,MAAM,GAAG,MAAM,CAWjE,CAAC;AAEF,eAAO,MAAM,iBAAiB,aAc5B,CAAC;AAEH,eAAO,MAAM,cAAc,aAUzB,CAAC"}