odds-api-io 1.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.
@@ -0,0 +1,426 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.OddsAPIClient = void 0;
4
+ const errors_js_1 = require("./errors.js");
5
+ const DEFAULT_BASE_URL = 'https://api2.odds-api.io/v3';
6
+ const DEFAULT_TIMEOUT = 10000;
7
+ /**
8
+ * Official Node.js client for Odds-API.io
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * import { OddsAPIClient } from 'odds-api-io';
13
+ *
14
+ * const client = new OddsAPIClient({ apiKey: 'your-api-key' });
15
+ * const sports = await client.getSports();
16
+ * ```
17
+ */
18
+ class OddsAPIClient {
19
+ constructor(config) {
20
+ this.apiKey = config.apiKey;
21
+ this.baseUrl = config.baseUrl || DEFAULT_BASE_URL;
22
+ this.timeout = config.timeout || DEFAULT_TIMEOUT;
23
+ }
24
+ /**
25
+ * Make a GET request to the API
26
+ */
27
+ async request(path, params = {}, requiresAuth = false) {
28
+ const url = new URL(`${this.baseUrl}/${path}`);
29
+ // Add query parameters
30
+ if (requiresAuth) {
31
+ params.apiKey = this.apiKey;
32
+ }
33
+ Object.entries(params).forEach(([key, value]) => {
34
+ if (value !== undefined && value !== null) {
35
+ url.searchParams.append(key, String(value));
36
+ }
37
+ });
38
+ const controller = new AbortController();
39
+ const timeoutId = setTimeout(() => controller.abort(), this.timeout);
40
+ try {
41
+ const response = await fetch(url.toString(), {
42
+ method: 'GET',
43
+ signal: controller.signal,
44
+ headers: {
45
+ 'User-Agent': 'odds-api-io-node-sdk/1.0.0',
46
+ },
47
+ });
48
+ clearTimeout(timeoutId);
49
+ if (!response.ok) {
50
+ await this.handleErrorResponse(response);
51
+ }
52
+ return (await response.json());
53
+ }
54
+ catch (error) {
55
+ clearTimeout(timeoutId);
56
+ if (error.name === 'AbortError') {
57
+ throw new errors_js_1.TimeoutError(`Request timeout after ${this.timeout}ms`);
58
+ }
59
+ if (error instanceof errors_js_1.OddsAPIError) {
60
+ throw error;
61
+ }
62
+ throw new errors_js_1.NetworkError(`Network request failed: ${error.message}`);
63
+ }
64
+ }
65
+ /**
66
+ * Make a PUT request to the API
67
+ */
68
+ async requestPut(path, params = {}, requiresAuth = false) {
69
+ const url = new URL(`${this.baseUrl}/${path}`);
70
+ // Add query parameters
71
+ if (requiresAuth) {
72
+ params.apiKey = this.apiKey;
73
+ }
74
+ Object.entries(params).forEach(([key, value]) => {
75
+ if (value !== undefined && value !== null) {
76
+ url.searchParams.append(key, String(value));
77
+ }
78
+ });
79
+ const controller = new AbortController();
80
+ const timeoutId = setTimeout(() => controller.abort(), this.timeout);
81
+ try {
82
+ const response = await fetch(url.toString(), {
83
+ method: 'PUT',
84
+ signal: controller.signal,
85
+ headers: {
86
+ 'User-Agent': 'odds-api-io-node-sdk/1.0.0',
87
+ },
88
+ });
89
+ clearTimeout(timeoutId);
90
+ if (!response.ok) {
91
+ await this.handleErrorResponse(response);
92
+ }
93
+ return (await response.json());
94
+ }
95
+ catch (error) {
96
+ clearTimeout(timeoutId);
97
+ if (error.name === 'AbortError') {
98
+ throw new errors_js_1.TimeoutError(`Request timeout after ${this.timeout}ms`);
99
+ }
100
+ if (error instanceof errors_js_1.OddsAPIError) {
101
+ throw error;
102
+ }
103
+ throw new errors_js_1.NetworkError(`Network request failed: ${error.message}`);
104
+ }
105
+ }
106
+ /**
107
+ * Handle error responses from the API
108
+ */
109
+ async handleErrorResponse(response) {
110
+ const status = response.status;
111
+ let errorMessage;
112
+ try {
113
+ const errorBody = await response.text();
114
+ errorMessage = errorBody || response.statusText;
115
+ }
116
+ catch {
117
+ errorMessage = response.statusText;
118
+ }
119
+ switch (status) {
120
+ case 401:
121
+ throw new errors_js_1.InvalidAPIKeyError('Invalid API key');
122
+ case 429:
123
+ throw new errors_js_1.RateLimitExceededError('Rate limit exceeded - please wait before retrying');
124
+ case 404:
125
+ throw new errors_js_1.NotFoundError('Resource not found');
126
+ default:
127
+ throw new errors_js_1.OddsAPIError(`API error ${status}: ${errorMessage}`);
128
+ }
129
+ }
130
+ // ============================================================================
131
+ // SPORTS & LEAGUES
132
+ // ============================================================================
133
+ /**
134
+ * Get all available sports
135
+ *
136
+ * @returns List of available sports
137
+ *
138
+ * @example
139
+ * ```typescript
140
+ * const sports = await client.getSports();
141
+ * console.log(`Found ${sports.length} sports`);
142
+ * ```
143
+ */
144
+ async getSports() {
145
+ return this.request('sports');
146
+ }
147
+ /**
148
+ * Get leagues for a specific sport
149
+ *
150
+ * @param sport - Sport identifier (e.g., 'basketball', 'football')
151
+ * @returns List of leagues
152
+ *
153
+ * @example
154
+ * ```typescript
155
+ * const leagues = await client.getLeagues('basketball');
156
+ * ```
157
+ */
158
+ async getLeagues(sport) {
159
+ return this.request('leagues', { sport }, true);
160
+ }
161
+ // ============================================================================
162
+ // EVENTS
163
+ // ============================================================================
164
+ /**
165
+ * Get events with optional filters
166
+ *
167
+ * @param params - Event filter parameters
168
+ * @returns List of events
169
+ *
170
+ * @example
171
+ * ```typescript
172
+ * const events = await client.getEvents({
173
+ * sport: 'basketball',
174
+ * league: 'usa-nba'
175
+ * });
176
+ * ```
177
+ */
178
+ async getEvents(params) {
179
+ return this.request('events', params, true);
180
+ }
181
+ /**
182
+ * Get a specific event by ID
183
+ *
184
+ * @param eventId - Event ID
185
+ * @returns Event details
186
+ *
187
+ * @example
188
+ * ```typescript
189
+ * const event = await client.getEventById('62924717');
190
+ * ```
191
+ */
192
+ async getEventById(eventId) {
193
+ return this.request(`events/${eventId}`, {}, true);
194
+ }
195
+ /**
196
+ * Get currently live events for a sport
197
+ *
198
+ * @param sport - Sport identifier
199
+ * @returns List of live events
200
+ *
201
+ * @example
202
+ * ```typescript
203
+ * const liveEvents = await client.getLiveEvents('basketball');
204
+ * ```
205
+ */
206
+ async getLiveEvents(sport) {
207
+ return this.request('events/live', { sport }, true);
208
+ }
209
+ /**
210
+ * Search for events by keyword
211
+ *
212
+ * @param query - Search query
213
+ * @returns List of matching events
214
+ *
215
+ * @example
216
+ * ```typescript
217
+ * const events = await client.searchEvents('Lakers');
218
+ * ```
219
+ */
220
+ async searchEvents(query) {
221
+ return this.request('events/search', { query }, true);
222
+ }
223
+ // ============================================================================
224
+ // ODDS
225
+ // ============================================================================
226
+ /**
227
+ * Get odds for a specific event
228
+ *
229
+ * @param params - Odds query parameters
230
+ * @returns Event odds data
231
+ *
232
+ * @example
233
+ * ```typescript
234
+ * const odds = await client.getEventOdds({
235
+ * eventId: '62924717',
236
+ * bookmakers: 'pinnacle,bet365'
237
+ * });
238
+ * ```
239
+ */
240
+ async getEventOdds(params) {
241
+ return this.request('odds', params, true);
242
+ }
243
+ /**
244
+ * Track odds movements for an event
245
+ *
246
+ * @param params - Odds movement parameters
247
+ * @returns Historical odds movements
248
+ *
249
+ * @example
250
+ * ```typescript
251
+ * const movements = await client.getOddsMovement({
252
+ * eventId: '62924717',
253
+ * bookmaker: 'pinnacle',
254
+ * market: 'moneyline'
255
+ * });
256
+ * ```
257
+ */
258
+ async getOddsMovement(params) {
259
+ return this.request('odds/movements', params, true);
260
+ }
261
+ /**
262
+ * Get odds for multiple events at once
263
+ *
264
+ * @param params - Multi-event odds parameters
265
+ * @returns Array of event odds
266
+ *
267
+ * @example
268
+ * ```typescript
269
+ * const odds = await client.getOddsForMultipleEvents({
270
+ * eventIds: '12345,67890',
271
+ * bookmakers: 'pinnacle,bet365'
272
+ * });
273
+ * ```
274
+ */
275
+ async getOddsForMultipleEvents(params) {
276
+ return this.request('odds/multi', params, true);
277
+ }
278
+ /**
279
+ * Get odds updated since a given timestamp
280
+ *
281
+ * @param params - Updated odds parameters
282
+ * @returns Array of updated event odds
283
+ *
284
+ * @example
285
+ * ```typescript
286
+ * const updatedOdds = await client.getUpdatedOddsSince({
287
+ * since: Date.now() - 3600000, // Last hour
288
+ * bookmaker: 'pinnacle',
289
+ * sport: 'basketball'
290
+ * });
291
+ * ```
292
+ */
293
+ async getUpdatedOddsSince(params) {
294
+ return this.request('odds/updated', params, true);
295
+ }
296
+ // ============================================================================
297
+ // PARTICIPANTS
298
+ // ============================================================================
299
+ /**
300
+ * Get participants (teams/players) for a sport
301
+ *
302
+ * @param params - Participant query parameters
303
+ * @returns List of participants
304
+ *
305
+ * @example
306
+ * ```typescript
307
+ * const participants = await client.getParticipants({
308
+ * sport: 'basketball',
309
+ * search: 'Warriors'
310
+ * });
311
+ * ```
312
+ */
313
+ async getParticipants(params) {
314
+ return this.request('participants', params, true);
315
+ }
316
+ /**
317
+ * Get a specific participant by ID
318
+ *
319
+ * @param participantId - Participant ID
320
+ * @returns Participant details
321
+ *
322
+ * @example
323
+ * ```typescript
324
+ * const participant = await client.getParticipantById(3428);
325
+ * ```
326
+ */
327
+ async getParticipantById(participantId) {
328
+ return this.request(`participants/${participantId}`, {}, true);
329
+ }
330
+ // ============================================================================
331
+ // BOOKMAKERS
332
+ // ============================================================================
333
+ /**
334
+ * Get all available bookmakers
335
+ *
336
+ * @returns List of bookmakers
337
+ *
338
+ * @example
339
+ * ```typescript
340
+ * const bookmakers = await client.getBookmakers();
341
+ * ```
342
+ */
343
+ async getBookmakers() {
344
+ return this.request('bookmakers');
345
+ }
346
+ /**
347
+ * Get your selected bookmakers
348
+ *
349
+ * @returns List of selected bookmakers
350
+ *
351
+ * @example
352
+ * ```typescript
353
+ * const selected = await client.getSelectedBookmakers();
354
+ * ```
355
+ */
356
+ async getSelectedBookmakers() {
357
+ return this.request('bookmakers/selected', {}, true);
358
+ }
359
+ /**
360
+ * Select specific bookmakers for your account
361
+ *
362
+ * @param bookmakers - Comma-separated bookmaker IDs
363
+ * @returns Success response
364
+ *
365
+ * @example
366
+ * ```typescript
367
+ * await client.selectBookmakers('pinnacle,bet365');
368
+ * ```
369
+ */
370
+ async selectBookmakers(bookmakers) {
371
+ return this.requestPut('bookmakers/selected/select', { bookmakers }, true);
372
+ }
373
+ /**
374
+ * Clear your selected bookmakers
375
+ *
376
+ * @returns Success response
377
+ *
378
+ * @example
379
+ * ```typescript
380
+ * await client.clearSelectedBookmakers();
381
+ * ```
382
+ */
383
+ async clearSelectedBookmakers() {
384
+ return this.requestPut('bookmakers/selected/clear', {}, true);
385
+ }
386
+ // ============================================================================
387
+ // BETTING ANALYSIS
388
+ // ============================================================================
389
+ /**
390
+ * Find arbitrage betting opportunities
391
+ *
392
+ * @param params - Arbitrage bet parameters
393
+ * @returns List of arbitrage opportunities
394
+ *
395
+ * @example
396
+ * ```typescript
397
+ * const arbs = await client.getArbitrageBets({
398
+ * bookmakers: 'pinnacle,bet365',
399
+ * limit: 10,
400
+ * includeEventDetails: true
401
+ * });
402
+ * ```
403
+ */
404
+ async getArbitrageBets(params) {
405
+ return this.request('arbitrage-bets', params, true);
406
+ }
407
+ /**
408
+ * Find value betting opportunities
409
+ *
410
+ * @param params - Value bet parameters
411
+ * @returns List of value bets
412
+ *
413
+ * @example
414
+ * ```typescript
415
+ * const valueBets = await client.getValueBets({
416
+ * bookmaker: 'pinnacle',
417
+ * includeEventDetails: true
418
+ * });
419
+ * ```
420
+ */
421
+ async getValueBets(params) {
422
+ return this.request('value-bets', params, true);
423
+ }
424
+ }
425
+ exports.OddsAPIClient = OddsAPIClient;
426
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ /**
3
+ * Custom error classes for Odds-API.io client
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.NetworkError = exports.TimeoutError = exports.NotFoundError = exports.RateLimitExceededError = exports.InvalidAPIKeyError = exports.OddsAPIError = void 0;
7
+ /**
8
+ * Base error class for all Odds-API.io errors
9
+ */
10
+ class OddsAPIError extends Error {
11
+ constructor(message) {
12
+ super(message);
13
+ this.name = 'OddsAPIError';
14
+ Object.setPrototypeOf(this, OddsAPIError.prototype);
15
+ }
16
+ }
17
+ exports.OddsAPIError = OddsAPIError;
18
+ /**
19
+ * Thrown when the API key is invalid or missing
20
+ */
21
+ class InvalidAPIKeyError extends OddsAPIError {
22
+ constructor(message = 'Invalid API key') {
23
+ super(message);
24
+ this.name = 'InvalidAPIKeyError';
25
+ Object.setPrototypeOf(this, InvalidAPIKeyError.prototype);
26
+ }
27
+ }
28
+ exports.InvalidAPIKeyError = InvalidAPIKeyError;
29
+ /**
30
+ * Thrown when rate limit is exceeded
31
+ */
32
+ class RateLimitExceededError extends OddsAPIError {
33
+ constructor(message = 'Rate limit exceeded - please wait before retrying') {
34
+ super(message);
35
+ this.name = 'RateLimitExceededError';
36
+ Object.setPrototypeOf(this, RateLimitExceededError.prototype);
37
+ }
38
+ }
39
+ exports.RateLimitExceededError = RateLimitExceededError;
40
+ /**
41
+ * Thrown when a resource is not found (404)
42
+ */
43
+ class NotFoundError extends OddsAPIError {
44
+ constructor(message = 'Resource not found') {
45
+ super(message);
46
+ this.name = 'NotFoundError';
47
+ Object.setPrototypeOf(this, NotFoundError.prototype);
48
+ }
49
+ }
50
+ exports.NotFoundError = NotFoundError;
51
+ /**
52
+ * Thrown when request times out
53
+ */
54
+ class TimeoutError extends OddsAPIError {
55
+ constructor(message = 'Request timeout') {
56
+ super(message);
57
+ this.name = 'TimeoutError';
58
+ Object.setPrototypeOf(this, TimeoutError.prototype);
59
+ }
60
+ }
61
+ exports.TimeoutError = TimeoutError;
62
+ /**
63
+ * Thrown when network request fails
64
+ */
65
+ class NetworkError extends OddsAPIError {
66
+ constructor(message) {
67
+ super(message);
68
+ this.name = 'NetworkError';
69
+ Object.setPrototypeOf(this, NetworkError.prototype);
70
+ }
71
+ }
72
+ exports.NetworkError = NetworkError;
73
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH;;GAEG;AACH,MAAa,YAAa,SAAQ,KAAK;IACrC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC;CACF;AAND,oCAMC;AAED;;GAEG;AACH,MAAa,kBAAmB,SAAQ,YAAY;IAClD,YAAY,UAAkB,iBAAiB;QAC7C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,kBAAkB,CAAC,SAAS,CAAC,CAAC;IAC5D,CAAC;CACF;AAND,gDAMC;AAED;;GAEG;AACH,MAAa,sBAAuB,SAAQ,YAAY;IACtD,YAAY,UAAkB,mDAAmD;QAC/E,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;QACrC,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAChE,CAAC;CACF;AAND,wDAMC;AAED;;GAEG;AACH,MAAa,aAAc,SAAQ,YAAY;IAC7C,YAAY,UAAkB,oBAAoB;QAChD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;QAC5B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IACvD,CAAC;CACF;AAND,sCAMC;AAED;;GAEG;AACH,MAAa,YAAa,SAAQ,YAAY;IAC5C,YAAY,UAAkB,iBAAiB;QAC7C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC;CACF;AAND,oCAMC;AAED;;GAEG;AACH,MAAa,YAAa,SAAQ,YAAY;IAC5C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IACtD,CAAC;CACF;AAND,oCAMC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ /**
3
+ * Odds-API.io Node.js SDK
4
+ *
5
+ * Official Node.js client for Odds-API.io - Real-time sports betting odds from 250+ bookmakers
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.NetworkError = exports.TimeoutError = exports.NotFoundError = exports.RateLimitExceededError = exports.InvalidAPIKeyError = exports.OddsAPIError = exports.OddsAPIClient = void 0;
11
+ var client_js_1 = require("./client.js");
12
+ Object.defineProperty(exports, "OddsAPIClient", { enumerable: true, get: function () { return client_js_1.OddsAPIClient; } });
13
+ var errors_js_1 = require("./errors.js");
14
+ Object.defineProperty(exports, "OddsAPIError", { enumerable: true, get: function () { return errors_js_1.OddsAPIError; } });
15
+ Object.defineProperty(exports, "InvalidAPIKeyError", { enumerable: true, get: function () { return errors_js_1.InvalidAPIKeyError; } });
16
+ Object.defineProperty(exports, "RateLimitExceededError", { enumerable: true, get: function () { return errors_js_1.RateLimitExceededError; } });
17
+ Object.defineProperty(exports, "NotFoundError", { enumerable: true, get: function () { return errors_js_1.NotFoundError; } });
18
+ Object.defineProperty(exports, "TimeoutError", { enumerable: true, get: function () { return errors_js_1.TimeoutError; } });
19
+ Object.defineProperty(exports, "NetworkError", { enumerable: true, get: function () { return errors_js_1.NetworkError; } });
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;AAEH,yCAA4C;AAAnC,0GAAA,aAAa,OAAA;AAEtB,yCAOqB;AANnB,yGAAA,YAAY,OAAA;AACZ,+GAAA,kBAAkB,OAAA;AAClB,mHAAA,sBAAsB,OAAA;AACtB,0GAAA,aAAa,OAAA;AACb,yGAAA,YAAY,OAAA;AACZ,yGAAA,YAAY,OAAA"}
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ /**
3
+ * TypeScript type definitions for Odds-API.io
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":";AAAA;;GAEG"}