puntersedge 0.1.0 → 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.
- package/LICENSE +21 -0
- package/README.md +283 -37
- package/dist/cjs/client.js +487 -0
- package/dist/cjs/client.js.map +1 -0
- package/dist/cjs/credits.js +82 -0
- package/dist/cjs/credits.js.map +1 -0
- package/dist/cjs/errors.js +130 -0
- package/dist/cjs/errors.js.map +1 -0
- package/dist/cjs/http.js +218 -0
- package/dist/cjs/http.js.map +1 -0
- package/dist/cjs/index.js +58 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +3 -0
- package/dist/cjs/types.generated.js +13 -0
- package/dist/cjs/types.generated.js.map +1 -0
- package/dist/cjs/webhook.js +95 -0
- package/dist/cjs/webhook.js.map +1 -0
- package/dist/esm/client.d.ts +480 -0
- package/dist/esm/client.d.ts.map +1 -0
- package/dist/esm/client.js +483 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/credits.d.ts +78 -0
- package/dist/esm/credits.d.ts.map +1 -0
- package/dist/esm/credits.js +78 -0
- package/dist/esm/credits.js.map +1 -0
- package/dist/esm/errors.d.ts +132 -0
- package/dist/esm/errors.d.ts.map +1 -0
- package/dist/esm/errors.js +117 -0
- package/dist/esm/errors.js.map +1 -0
- package/dist/esm/http.d.ts +52 -0
- package/dist/esm/http.d.ts.map +1 -0
- package/dist/esm/http.js +214 -0
- package/dist/esm/http.js.map +1 -0
- package/dist/esm/index.d.ts +22 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +23 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/types.generated.d.ts +1453 -0
- package/dist/esm/types.generated.d.ts.map +1 -0
- package/dist/esm/types.generated.js +12 -0
- package/dist/esm/types.generated.js.map +1 -0
- package/dist/esm/webhook.d.ts +56 -0
- package/dist/esm/webhook.d.ts.map +1 -0
- package/dist/esm/webhook.js +92 -0
- package/dist/esm/webhook.js.map +1 -0
- package/package.json +52 -19
- package/src/client.ts +799 -0
- package/src/credits.ts +131 -0
- package/src/errors.ts +166 -0
- package/src/http.ts +268 -0
- package/src/index.ts +68 -206
- package/src/types.generated.ts +1514 -0
- package/src/webhook.ts +113 -0
- package/dist/index.d.ts +0 -117
- package/dist/index.js +0 -99
|
@@ -0,0 +1,480 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The PuntersEdge client.
|
|
3
|
+
*
|
|
4
|
+
* Endpoints are grouped the way the API groups them, because the split is real and getting it
|
|
5
|
+
* wrong is the single most common first mistake against this API: **racing is not a sport key.**
|
|
6
|
+
* There is no `sport_key` of `"horse-racing"`. Thoroughbred, greyhound and harness live under
|
|
7
|
+
* `pe.racing.*`; AFL, NRL, NBA and the rest live under `pe.sports.*`.
|
|
8
|
+
*
|
|
9
|
+
* pe.racing.* thoroughbred, greyhound and harness — AU and NZ
|
|
10
|
+
* pe.sports.* Australian sports odds by sport key
|
|
11
|
+
* pe.arb.* cross-book price comparison and arbitrage scanning
|
|
12
|
+
* pe.account.* usage, key metadata, rotation, billing portal
|
|
13
|
+
* pe.webhooks.* push delivery instead of polling
|
|
14
|
+
* pe.health.* per-connector freshness and public uptime
|
|
15
|
+
* pe.demo.* the sandbox: real prices, truncated, no key, no credits
|
|
16
|
+
*
|
|
17
|
+
* Option names are camelCase and map to the API's snake_case query parameters. Two parameters
|
|
18
|
+
* are camelCase on the wire too (`oddsFormat`, `maxAgeMinutes`); those pass through untouched.
|
|
19
|
+
*/
|
|
20
|
+
import { type Query, type RequestOptions, type Result } from "./http.js";
|
|
21
|
+
import type { Credits } from "./credits.js";
|
|
22
|
+
import type { AcceptancesOut, ArchiveCoverageOut, BackfillStatusOut, BackfillSubmitOut, BestOddsEventOut, BestPricesOut, ClosingLinesOut, ConnectorHealthOut, GreyhoundFormOut, GreyhoundStatsOut, HorseFormOut, LinesArbOut, MoverOut, NextRaceOut, PremiershipOut, PriceHistoryOut, PricePathsOut, RaceEventOut, RaceResultOut, RacingBestOddsOut, RacingChangesOut, ResultsCoverageOut, SportOddsEventOut, SportOut, SportsArbOut, TrackConditionsOut, UsageOut, VenueOut, WebhookDeliveryResponse, WebhookResponse } from "./types.generated.js";
|
|
23
|
+
export declare const VERSION = "1.0.0";
|
|
24
|
+
/** Default base URL. The API is also reachable at `https://puntersedge.online/api`. */
|
|
25
|
+
export declare const DEFAULT_BASE_URL = "https://api.puntersedge.online";
|
|
26
|
+
/** Per-call transport controls, accepted by every method. */
|
|
27
|
+
export interface CallOptions {
|
|
28
|
+
signal?: AbortSignal;
|
|
29
|
+
timeoutMs?: number;
|
|
30
|
+
headers?: Record<string, string>;
|
|
31
|
+
}
|
|
32
|
+
/** Filters shared by the live racing endpoints. */
|
|
33
|
+
export interface RacingFilterOptions extends CallOptions {
|
|
34
|
+
/** `horse`, `greyhound`, `harness` — one, or several. Omit for all three. */
|
|
35
|
+
categories?: string | string[];
|
|
36
|
+
/** ISO country codes, e.g. `"AU"` or `["AU", "NZ"]`. Omit for every country. */
|
|
37
|
+
country?: string | string[];
|
|
38
|
+
/**
|
|
39
|
+
* Include races whose country has not been resolved yet. Off by default. Late-card races can
|
|
40
|
+
* sit country-unresolved for a while, so a `country` filter can hide races you wanted.
|
|
41
|
+
*/
|
|
42
|
+
includeUnresolved?: boolean;
|
|
43
|
+
}
|
|
44
|
+
/** Bookmaker restriction. An unrecognised key is a free 422 naming the valid keys. */
|
|
45
|
+
export interface BookmakerFilter {
|
|
46
|
+
bookmakers?: string | string[];
|
|
47
|
+
}
|
|
48
|
+
export interface PageOptions {
|
|
49
|
+
limit?: number;
|
|
50
|
+
offset?: number;
|
|
51
|
+
}
|
|
52
|
+
export interface NextToGoOptions extends RacingFilterOptions, BookmakerFilter {
|
|
53
|
+
/** Up to 200. Pass 200 to pull every currently quoted race in one call instead of paging. */
|
|
54
|
+
numRaces?: number;
|
|
55
|
+
/** Venue names, e.g. `"Randwick"` or `["Randwick", "Flemington"]`. Case-insensitive. */
|
|
56
|
+
venue?: string | string[];
|
|
57
|
+
}
|
|
58
|
+
export interface RaceEventsOptions extends RacingFilterOptions {
|
|
59
|
+
hoursAhead?: number;
|
|
60
|
+
}
|
|
61
|
+
export interface RacingBestOddsOptions extends RacingFilterOptions, BookmakerFilter {
|
|
62
|
+
/** Up to 150. Pass 150 to compare every race on the day's card in one call. */
|
|
63
|
+
numRaces?: number;
|
|
64
|
+
}
|
|
65
|
+
export interface MoversOptions extends RacingFilterOptions, PageOptions {
|
|
66
|
+
/** `"firming"`, `"drifting"`, or omit for both. Anything else is a 422. */
|
|
67
|
+
direction?: "firming" | "drifting";
|
|
68
|
+
/** Minimum consensus move, in percent. */
|
|
69
|
+
minMovePct?: number;
|
|
70
|
+
/** Only report a move confirmed by at least this many books. */
|
|
71
|
+
minBooks?: number;
|
|
72
|
+
maxMinsToJump?: number;
|
|
73
|
+
}
|
|
74
|
+
export interface RaceResultsOptions extends CallOptions, PageOptions {
|
|
75
|
+
/** How far back to look, in hours. Max 7 days. */
|
|
76
|
+
hoursBack?: number;
|
|
77
|
+
/** `YYYY-MM-DD` — that meeting date (AET) instead of a rolling window. */
|
|
78
|
+
date?: string;
|
|
79
|
+
categories?: string | string[];
|
|
80
|
+
/** Case-insensitive venue match, e.g. `"Rosehill"`. */
|
|
81
|
+
venue?: string;
|
|
82
|
+
country?: string | string[];
|
|
83
|
+
status?: "final" | "interim" | "abandoned";
|
|
84
|
+
}
|
|
85
|
+
export interface PriceHistoryOptions extends CallOptions, BookmakerFilter {
|
|
86
|
+
/** Race id. If omitted, give `venue` + `raceNumber` + `date`. */
|
|
87
|
+
raceId?: string;
|
|
88
|
+
venue?: string;
|
|
89
|
+
raceNumber?: number;
|
|
90
|
+
/** Race date, `YYYY-MM-DD` (UTC). */
|
|
91
|
+
date?: string;
|
|
92
|
+
/** False returns open/close/high/low only, without the individual ticks. */
|
|
93
|
+
includePoints?: boolean;
|
|
94
|
+
/** Cap on returned points; the response flags truncation. */
|
|
95
|
+
maxPoints?: number;
|
|
96
|
+
}
|
|
97
|
+
/** Filters shared by the two permanent-archive endpoints. */
|
|
98
|
+
export interface ArchiveOptions extends CallOptions, PageOptions, BookmakerFilter {
|
|
99
|
+
/** ISO date/time on the race start. Defaults to the archive floor. */
|
|
100
|
+
from?: string;
|
|
101
|
+
/** ISO date/time. Defaults to now. */
|
|
102
|
+
to?: string;
|
|
103
|
+
/** Single-day alias for `from`+`to`. Mutually exclusive with them. */
|
|
104
|
+
date?: string;
|
|
105
|
+
/** Venue name, case-insensitive, exact match. */
|
|
106
|
+
venue?: string;
|
|
107
|
+
category?: "horse" | "harness" | "greyhound";
|
|
108
|
+
/** Two-letter country code. */
|
|
109
|
+
country?: string;
|
|
110
|
+
raceId?: string;
|
|
111
|
+
/** Include rows flagged `venue_split_suspect` or `name_fragment_suspect`. Off by default. */
|
|
112
|
+
includeFlagged?: boolean;
|
|
113
|
+
}
|
|
114
|
+
export interface ClosingLinesOptions extends ArchiveOptions {
|
|
115
|
+
/** Only rows whose last observation was within 300s of the jump. True by default. */
|
|
116
|
+
closingOnly?: boolean;
|
|
117
|
+
/** Only rows from races that have a result. */
|
|
118
|
+
resultedOnly?: boolean;
|
|
119
|
+
}
|
|
120
|
+
export interface RacingChangesOptions extends RacingFilterOptions {
|
|
121
|
+
/**
|
|
122
|
+
* ISO 8601 UTC timestamp — required. On the first call use a recent one; afterwards pass the
|
|
123
|
+
* cursor the previous response handed back, so you never poll the same window twice.
|
|
124
|
+
*/
|
|
125
|
+
since: string;
|
|
126
|
+
}
|
|
127
|
+
export interface AcceptancesOptions extends CallOptions {
|
|
128
|
+
/** Meeting day, Australia/Sydney, `YYYY-MM-DD`. Up to 3 days back and 3 days forward. */
|
|
129
|
+
date?: string;
|
|
130
|
+
/** One meeting, case-insensitive. Omit for every meeting on the day. */
|
|
131
|
+
venue?: string;
|
|
132
|
+
}
|
|
133
|
+
export interface TrackConditionsOptions extends CallOptions {
|
|
134
|
+
/** Meeting day, Australia/Sydney, `YYYY-MM-DD`. Up to 7 days back. */
|
|
135
|
+
date?: string;
|
|
136
|
+
venue?: string;
|
|
137
|
+
}
|
|
138
|
+
export interface PremiershipOptions extends CallOptions {
|
|
139
|
+
/** Find one person by (partial) name across every state and scope. */
|
|
140
|
+
name?: string;
|
|
141
|
+
/** `AUS` (national) or a state. Defaults to AUS unless `name` widens the search. */
|
|
142
|
+
state?: string;
|
|
143
|
+
scope?: "all" | "metro" | "provincial" | "country" | "picnic";
|
|
144
|
+
/** `current` or `previous` RA season (1 Aug – 31 Jul). */
|
|
145
|
+
season?: "current" | "previous";
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Thoroughbred and greyhound form, and the paced bulk backfill queue.
|
|
149
|
+
*
|
|
150
|
+
* Form is collected from Racing Australia and Topaz on a deliberate pace — the upstream rate-
|
|
151
|
+
* limits hard, and a burst gets the whole estate flagged. `backfill` is the supported way to ask
|
|
152
|
+
* for many horses: you submit a batch, the queue collects them at a sustainable rate, and you
|
|
153
|
+
* collect the results when they land. Looping `form()` over 400 horses is the unsupported way.
|
|
154
|
+
*/
|
|
155
|
+
declare class HorsesAPI {
|
|
156
|
+
private readonly pe;
|
|
157
|
+
constructor(pe: PuntersEdge);
|
|
158
|
+
/** Form, career record and profile for one horse. 3 credits. */
|
|
159
|
+
form(horse: string, options?: CallOptions): Promise<HorseFormOut>;
|
|
160
|
+
/** Queue a batch of horses for paced form collection. 3 credits. */
|
|
161
|
+
submitBackfill(body: {
|
|
162
|
+
horses: string[];
|
|
163
|
+
[key: string]: unknown;
|
|
164
|
+
}, options?: CallOptions): Promise<BackfillSubmitOut>;
|
|
165
|
+
/** Progress of a backfill job. 3 credits. */
|
|
166
|
+
backfillStatus(jobId: string, options?: CallOptions): Promise<BackfillStatusOut>;
|
|
167
|
+
/** Collect the form of the horses this job has delivered so far. 3 credits. */
|
|
168
|
+
backfillResults(jobId: string, options?: CallOptions & PageOptions): Promise<unknown>;
|
|
169
|
+
/** Cancel the horses a job has not collected yet. Free. */
|
|
170
|
+
cancelBackfill(jobId: string, options?: CallOptions): Promise<unknown>;
|
|
171
|
+
}
|
|
172
|
+
declare class GreyhoundsAPI {
|
|
173
|
+
private readonly pe;
|
|
174
|
+
constructor(pe: PuntersEdge);
|
|
175
|
+
/**
|
|
176
|
+
* Form history for one dog. 3 credits.
|
|
177
|
+
* `dog` is a name or a Topaz dogId; names match case- and punctuation-insensitively.
|
|
178
|
+
*/
|
|
179
|
+
form(dog: string, options?: CallOptions & {
|
|
180
|
+
limit?: number;
|
|
181
|
+
}): Promise<GreyhoundFormOut>;
|
|
182
|
+
/**
|
|
183
|
+
* Record by track, distance, box or grade. 3 credits.
|
|
184
|
+
* `by` crosses dimensions: `["track", "distance"]` groups by both.
|
|
185
|
+
*/
|
|
186
|
+
stats(dog: string, options?: CallOptions & {
|
|
187
|
+
by?: string | string[];
|
|
188
|
+
}): Promise<GreyhoundStatsOut>;
|
|
189
|
+
}
|
|
190
|
+
/** Thoroughbred, greyhound and harness racing across Australia and New Zealand. */
|
|
191
|
+
declare class RacingAPI {
|
|
192
|
+
readonly horses: HorsesAPI;
|
|
193
|
+
readonly greyhounds: GreyhoundsAPI;
|
|
194
|
+
private readonly pe;
|
|
195
|
+
constructor(pe: PuntersEdge);
|
|
196
|
+
/**
|
|
197
|
+
* Races about to jump, with runners and live per-bookmaker prices. 2 credits.
|
|
198
|
+
* The usual starting point. Each quote carries its own `age_seconds` and `stale` flag —
|
|
199
|
+
* read them, because a stalled scraper keeps serving its last value.
|
|
200
|
+
*/
|
|
201
|
+
nextToGo(options?: NextToGoOptions): Promise<NextRaceOut[]>;
|
|
202
|
+
/** Scheduled races in a forward window, without prices. 1 credit. */
|
|
203
|
+
events(options?: RaceEventsOptions): Promise<RaceEventOut[]>;
|
|
204
|
+
/** Best win, place and tote price per runner across books, with the book offering it. 3 credits. */
|
|
205
|
+
bestOdds(options?: RacingBestOddsOptions): Promise<RacingBestOddsOut[]>;
|
|
206
|
+
/** Consensus steamers and drifters in the live window. 3 credits. */
|
|
207
|
+
movers(options?: MoversOptions): Promise<MoverOut[]>;
|
|
208
|
+
/** Settled results: placings, settled prices, dividends and scratchings. 2 credits. */
|
|
209
|
+
results(options?: RaceResultsOptions): Promise<RaceResultOut[]>;
|
|
210
|
+
/** What the results field coverage actually is, measured rather than promised. 1 credit. */
|
|
211
|
+
resultsCoverage(options?: CallOptions & {
|
|
212
|
+
days?: number;
|
|
213
|
+
}): Promise<ResultsCoverageOut>;
|
|
214
|
+
/** Per-bookmaker price ticks for one race. 5 credits. */
|
|
215
|
+
priceHistory(options: PriceHistoryOptions): Promise<PriceHistoryOut>;
|
|
216
|
+
/**
|
|
217
|
+
* Races and prices that changed since a timestamp. 2 credits.
|
|
218
|
+
*
|
|
219
|
+
* This is the endpoint to build a live board on. Polling `nextToGo` in a loop re-downloads
|
|
220
|
+
* every race every time and bills you 2 credits for the privilege; `changes` returns only
|
|
221
|
+
* what moved, and hands back the cursor for the next call.
|
|
222
|
+
*/
|
|
223
|
+
changes(options: RacingChangesOptions): Promise<RacingChangesOut>;
|
|
224
|
+
/** The permanent closing-line and result archive. 5 credits. Standard plan and above. */
|
|
225
|
+
closingLines(options?: ClosingLinesOptions): Promise<ClosingLinesOut>;
|
|
226
|
+
/** What the closing-line archive actually holds — its floor date, row count and coverage. 1 credit. */
|
|
227
|
+
closingLinesCoverage(options?: CallOptions): Promise<ArchiveCoverageOut>;
|
|
228
|
+
/** Bulk export of the permanent price-movement archive. 5 credits. Standard plan and above. */
|
|
229
|
+
pricePaths(options?: ArchiveOptions): Promise<PricePathsOut>;
|
|
230
|
+
/** Canonical venue directory: `venue_id`, display name and physical site. 1 credit. */
|
|
231
|
+
venues(options?: CallOptions): Promise<VenueOut[]>;
|
|
232
|
+
/**
|
|
233
|
+
* Full-day AU thoroughbred acceptance card. 2 credits.
|
|
234
|
+
*
|
|
235
|
+
* Read `completeness` and each race's `runner_set_status` before treating a count as the
|
|
236
|
+
* field size — the response is explicit about when a figure is a floor rather than exact.
|
|
237
|
+
*/
|
|
238
|
+
acceptances(options?: AcceptancesOptions): Promise<AcceptancesOut>;
|
|
239
|
+
/** Track condition, weather and rail: current state and the day's change log. 1 credit. */
|
|
240
|
+
trackConditions(options?: TrackConditionsOptions): Promise<TrackConditionsOut>;
|
|
241
|
+
/** Jockey premiership leaderboards, or one jockey by name. 2 credits. */
|
|
242
|
+
jockeyStats(options?: PremiershipOptions): Promise<PremiershipOut>;
|
|
243
|
+
/** Trainer premiership leaderboards, or one trainer by name. 2 credits. */
|
|
244
|
+
trainerStats(options?: PremiershipOptions): Promise<PremiershipOut>;
|
|
245
|
+
/**
|
|
246
|
+
* The closing-line archive as a CSV string, streamed by the server in a stable column order.
|
|
247
|
+
* Same filters, same 5 credits — this is `closingLines` with `format=csv`.
|
|
248
|
+
*/
|
|
249
|
+
closingLinesCsv(options?: ClosingLinesOptions): Promise<string>;
|
|
250
|
+
/** The price-path archive as a CSV string. Same filters, same 5 credits. */
|
|
251
|
+
pricePathsCsv(options?: ArchiveOptions): Promise<string>;
|
|
252
|
+
}
|
|
253
|
+
export interface SportOddsOptions extends CallOptions, BookmakerFilter {
|
|
254
|
+
/** `h2h`, `spreads`, `totals`. **Billed one credit per market requested.** */
|
|
255
|
+
markets?: string | string[];
|
|
256
|
+
/** One competition, case-insensitive exact match (e.g. `"NRLW"`). */
|
|
257
|
+
competition?: string;
|
|
258
|
+
/**
|
|
259
|
+
* When filtering by `competition`, also return events whose competition is null. Not every
|
|
260
|
+
* book labels every fixture, so a strict filter can drop real matches.
|
|
261
|
+
*/
|
|
262
|
+
includeUnknownCompetition?: boolean;
|
|
263
|
+
oddsFormat?: "decimal" | "american";
|
|
264
|
+
/** Exclude bookmaker markets older than this many minutes. Default 360. */
|
|
265
|
+
maxAgeMinutes?: number;
|
|
266
|
+
}
|
|
267
|
+
/** Australian sports odds. Racing is NOT here — see `pe.racing`. */
|
|
268
|
+
declare class SportsAPI {
|
|
269
|
+
private readonly pe;
|
|
270
|
+
constructor(pe: PuntersEdge);
|
|
271
|
+
/** The sport catalogue: every queryable `sport_key` with its display name. 1 credit. */
|
|
272
|
+
list(options?: CallOptions): Promise<SportOut[]>;
|
|
273
|
+
/**
|
|
274
|
+
* Odds for one sport. **1 credit per market requested** — asking for
|
|
275
|
+
* `["h2h", "spreads", "totals"]` costs 3, not 1.
|
|
276
|
+
*/
|
|
277
|
+
odds(sportKey: string, options?: SportOddsOptions): Promise<SportOddsEventOut[]>;
|
|
278
|
+
/** Best available price per outcome across bookmakers, for one sport. 3 credits. */
|
|
279
|
+
bestOdds(sportKey: string, options?: CallOptions): Promise<BestOddsEventOut[]>;
|
|
280
|
+
/** Historical odds snapshots. 5 credits. */
|
|
281
|
+
oddsHistory(sportKey: string, options?: CallOptions & BookmakerFilter & {
|
|
282
|
+
from?: string;
|
|
283
|
+
to?: string;
|
|
284
|
+
market?: string;
|
|
285
|
+
offset?: number;
|
|
286
|
+
}): Promise<unknown>;
|
|
287
|
+
/** Price movement feed for one sport. 5 credits. */
|
|
288
|
+
oddsMovements(sportKey: string, options?: CallOptions & BookmakerFilter & {
|
|
289
|
+
since?: string;
|
|
290
|
+
market?: string;
|
|
291
|
+
minDelta?: number;
|
|
292
|
+
}): Promise<unknown>;
|
|
293
|
+
}
|
|
294
|
+
export interface ArbOptions extends CallOptions {
|
|
295
|
+
/** Filter by sport, e.g. `"afl"`. */
|
|
296
|
+
sportKey?: string;
|
|
297
|
+
/** Exclude bookmaker markets older than this many minutes. */
|
|
298
|
+
maxAgeMinutes?: number;
|
|
299
|
+
/** Minimum guaranteed profit, in percent. 0 also shows the best comparison when it is not an arb. */
|
|
300
|
+
minProfitPct?: number;
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Cross-book comparison and arbitrage scanning.
|
|
304
|
+
*
|
|
305
|
+
* A word of warning that costs nothing to read: a two-outcome market that only one book is
|
|
306
|
+
* quoting will look like a large arb and is not one. Check how many books are behind each leg
|
|
307
|
+
* before acting on a number from here.
|
|
308
|
+
*/
|
|
309
|
+
declare class ArbAPI {
|
|
310
|
+
private readonly pe;
|
|
311
|
+
constructor(pe: PuntersEdge);
|
|
312
|
+
/** Head-to-head arb scanner. 3 credits. */
|
|
313
|
+
sports(options?: ArbOptions): Promise<SportsArbOut[]>;
|
|
314
|
+
/** Spreads and totals line arb. 3 credits. */
|
|
315
|
+
lines(options?: ArbOptions): Promise<LinesArbOut[]>;
|
|
316
|
+
/** Best price per selection with every book's quote alongside. 2 credits. */
|
|
317
|
+
bestPrices(options?: CallOptions & {
|
|
318
|
+
sportKey?: string;
|
|
319
|
+
maxAgeMinutes?: number;
|
|
320
|
+
}): Promise<BestPricesOut[]>;
|
|
321
|
+
}
|
|
322
|
+
/** Usage, key metadata and billing. Every method here is free — it costs no credits to ask. */
|
|
323
|
+
declare class AccountAPI {
|
|
324
|
+
private readonly pe;
|
|
325
|
+
constructor(pe: PuntersEdge);
|
|
326
|
+
/**
|
|
327
|
+
* Plan, allowance, credits used and reset date. Free.
|
|
328
|
+
*
|
|
329
|
+
* You rarely need this: every billed response already carries the balance in its headers,
|
|
330
|
+
* which the client exposes as `pe.credits`.
|
|
331
|
+
*/
|
|
332
|
+
usage(options?: CallOptions): Promise<UsageOut>;
|
|
333
|
+
/** Usage broken down by endpoint. Free. */
|
|
334
|
+
usageAnalytics(options?: CallOptions & {
|
|
335
|
+
days?: number;
|
|
336
|
+
period?: "rolling" | "billing";
|
|
337
|
+
}): Promise<unknown>;
|
|
338
|
+
/** Plan, limits and status for the key in use. Free. */
|
|
339
|
+
keyInfo(options?: CallOptions): Promise<unknown>;
|
|
340
|
+
/** A Stripe self-service billing portal link. Free. */
|
|
341
|
+
billingPortal(options?: CallOptions): Promise<unknown>;
|
|
342
|
+
/**
|
|
343
|
+
* Rotate the key. Free.
|
|
344
|
+
*
|
|
345
|
+
* The old key keeps working through a grace window so a deploy can roll. Pass
|
|
346
|
+
* `{ immediate: true }` only when rotating because the key leaked — that revokes it now and
|
|
347
|
+
* will break anything still holding it.
|
|
348
|
+
*/
|
|
349
|
+
rotateKey(options?: CallOptions & {
|
|
350
|
+
immediate?: boolean;
|
|
351
|
+
}): Promise<unknown>;
|
|
352
|
+
/** Restrict this key to a set of source IPs. Free. Pass `[]` to clear the whitelist. */
|
|
353
|
+
setIpWhitelist(ips: string[], options?: CallOptions): Promise<unknown>;
|
|
354
|
+
}
|
|
355
|
+
export interface WebhookCreateInput {
|
|
356
|
+
/** Your HTTPS endpoint. */
|
|
357
|
+
url: string;
|
|
358
|
+
/** Event names to subscribe to, e.g. `["race.odds_open"]`. */
|
|
359
|
+
events: string[];
|
|
360
|
+
[key: string]: unknown;
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Push delivery instead of polling. Creating a webhook needs the Standard plan or above.
|
|
364
|
+
*
|
|
365
|
+
* Every delivery is signed: `X-Webhook-Signature` is an HMAC-SHA256 over the **raw request
|
|
366
|
+
* body**, keyed with the secret returned when you create the subscription. Verify it against
|
|
367
|
+
* the bytes you received, before parsing — re-serialising the JSON first changes the bytes and
|
|
368
|
+
* the signature will never match.
|
|
369
|
+
*/
|
|
370
|
+
declare class WebhooksAPI {
|
|
371
|
+
private readonly pe;
|
|
372
|
+
constructor(pe: PuntersEdge);
|
|
373
|
+
/** Create a subscription. The response carries the signing secret — it is shown once. */
|
|
374
|
+
create(input: WebhookCreateInput, options?: CallOptions): Promise<WebhookResponse>;
|
|
375
|
+
list(options?: CallOptions): Promise<WebhookResponse[]>;
|
|
376
|
+
delete(webhookId: string, options?: CallOptions): Promise<unknown>;
|
|
377
|
+
/** Recent delivery attempts, with response codes — the first place to look when nothing arrives. */
|
|
378
|
+
deliveries(webhookId: string, options?: CallOptions): Promise<WebhookDeliveryResponse[]>;
|
|
379
|
+
/** Fire a test delivery at the endpoint, so you can verify your signature check end to end. */
|
|
380
|
+
test(webhookId: string, options?: CallOptions): Promise<unknown>;
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Is the data current?
|
|
384
|
+
*
|
|
385
|
+
* `connectors()` is the one to watch. A stalled scraper does not return an error — it keeps
|
|
386
|
+
* serving its last value, which is exactly what a live price looks like. `last_ok` per
|
|
387
|
+
* connector is how you tell the difference.
|
|
388
|
+
*/
|
|
389
|
+
declare class HealthAPI {
|
|
390
|
+
private readonly pe;
|
|
391
|
+
constructor(pe: PuntersEdge);
|
|
392
|
+
/** Per-connector freshness: `last_ok`, status, records written. Requires a key. */
|
|
393
|
+
connectors(options?: CallOptions): Promise<ConnectorHealthOut[]>;
|
|
394
|
+
/** Per-connector freshness with tunable staleness thresholds and optional per-sport coverage. 1 credit. */
|
|
395
|
+
connectorDetail(options?: CallOptions & {
|
|
396
|
+
staleAfterS?: number;
|
|
397
|
+
coverageStaleAfterS?: number;
|
|
398
|
+
includeSports?: boolean;
|
|
399
|
+
}): Promise<Record<string, unknown>>;
|
|
400
|
+
/** Public uptime stats. No key, no credits. */
|
|
401
|
+
uptime(options?: CallOptions): Promise<Record<string, unknown>>;
|
|
402
|
+
}
|
|
403
|
+
/**
|
|
404
|
+
* The sandbox: real prices, truncated to 3 races, 5 runners and 3 bookmakers. No key, no
|
|
405
|
+
* credits. Use it to learn the response shape before you spend anything, and to keep an
|
|
406
|
+
* example in your README runnable by someone who has not signed up yet.
|
|
407
|
+
*/
|
|
408
|
+
declare class DemoAPI {
|
|
409
|
+
private readonly pe;
|
|
410
|
+
constructor(pe: PuntersEdge);
|
|
411
|
+
nextToGo(options?: CallOptions): Promise<Record<string, unknown>>;
|
|
412
|
+
/** Sample best-odds with arb detection. `sport` is optional; a live sport is picked if omitted. */
|
|
413
|
+
bestOdds(options?: CallOptions & {
|
|
414
|
+
sport?: string;
|
|
415
|
+
}): Promise<Record<string, unknown>>;
|
|
416
|
+
}
|
|
417
|
+
export interface PuntersEdgeOptions {
|
|
418
|
+
/** Your key. Get a free one at https://puntersedge.online/api. Optional: the sandbox needs none. */
|
|
419
|
+
apiKey?: string;
|
|
420
|
+
/** Override for a proxy or a self-hosted deployment. */
|
|
421
|
+
baseUrl?: string;
|
|
422
|
+
/** Per-request timeout in milliseconds. Default 30000. */
|
|
423
|
+
timeoutMs?: number;
|
|
424
|
+
/** Fired after every response that carried credit headers, including errors. */
|
|
425
|
+
onCredits?: (credits: Credits) => void;
|
|
426
|
+
/** Supply your own `fetch` — for tests, or a runtime where it is not global. */
|
|
427
|
+
fetch?: typeof globalThis.fetch;
|
|
428
|
+
/** Appended to the SDK's own User-Agent, so your traffic is identifiable in support. */
|
|
429
|
+
userAgent?: string;
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* ```ts
|
|
433
|
+
* import { PuntersEdge } from "puntersedge";
|
|
434
|
+
*
|
|
435
|
+
* const pe = new PuntersEdge({ apiKey: process.env.PUNTERSEDGE_API_KEY });
|
|
436
|
+
*
|
|
437
|
+
* for (const race of await pe.racing.nextToGo({ numRaces: 5, categories: "horse" })) {
|
|
438
|
+
* console.log(race.venue, race.race_number, race.start_time);
|
|
439
|
+
* }
|
|
440
|
+
*
|
|
441
|
+
* console.log(pe.credits?.remaining, "credits left");
|
|
442
|
+
* ```
|
|
443
|
+
*/
|
|
444
|
+
export declare class PuntersEdge {
|
|
445
|
+
#private;
|
|
446
|
+
readonly racing: RacingAPI;
|
|
447
|
+
readonly sports: SportsAPI;
|
|
448
|
+
readonly arb: ArbAPI;
|
|
449
|
+
readonly account: AccountAPI;
|
|
450
|
+
readonly webhooks: WebhooksAPI;
|
|
451
|
+
readonly health: HealthAPI;
|
|
452
|
+
readonly demo: DemoAPI;
|
|
453
|
+
/**
|
|
454
|
+
* Credit accounting from the most recent billed response — balance, cost, and the upgrade
|
|
455
|
+
* recommendation once you cross the warning threshold. Undefined until the first billed call.
|
|
456
|
+
*/
|
|
457
|
+
credits?: Credits;
|
|
458
|
+
constructor(options?: PuntersEdgeOptions | string);
|
|
459
|
+
/**
|
|
460
|
+
* The full response for one call: data, credits and headers together.
|
|
461
|
+
*
|
|
462
|
+
* ```ts
|
|
463
|
+
* const { data, credits } = await pe.withCredits((p) => p.racing.nextToGo());
|
|
464
|
+
* ```
|
|
465
|
+
*/
|
|
466
|
+
withCredits<T>(call: (pe: this) => Promise<T>): Promise<{
|
|
467
|
+
data: T;
|
|
468
|
+
credits?: Credits;
|
|
469
|
+
}>;
|
|
470
|
+
/** Escape hatch: any endpoint, including ones added after this SDK was published. */
|
|
471
|
+
raw<T>(method: "GET" | "POST" | "DELETE", path: string, params?: Query, body?: unknown, options?: RequestOptions): Promise<Result<T>>;
|
|
472
|
+
/** @internal */
|
|
473
|
+
get<T>(path: string, options?: object, extraHeaders?: Record<string, string>): Promise<T>;
|
|
474
|
+
/** @internal */
|
|
475
|
+
post<T>(path: string, body?: unknown, options?: CallOptions): Promise<T>;
|
|
476
|
+
/** @internal */
|
|
477
|
+
delete<T>(path: string, options?: CallOptions): Promise<T>;
|
|
478
|
+
}
|
|
479
|
+
export {};
|
|
480
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/client.ts"],"names":[],"mappings":"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"}
|