@lumifyai/sdk 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +177 -0
- package/dist/client.d.ts +67 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +205 -0
- package/dist/client.js.map +1 -0
- package/dist/errors.d.ts +91 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +119 -0
- package/dist/errors.js.map +1 -0
- package/dist/generated/models.d.ts +316 -0
- package/dist/generated/models.d.ts.map +1 -0
- package/dist/generated/models.js +9 -0
- package/dist/generated/models.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/lumify.d.ts +32 -0
- package/dist/lumify.d.ts.map +1 -0
- package/dist/lumify.js +42 -0
- package/dist/lumify.js.map +1 -0
- package/dist/meta.d.ts +27 -0
- package/dist/meta.d.ts.map +1 -0
- package/dist/meta.js +46 -0
- package/dist/meta.js.map +1 -0
- package/dist/pagination.d.ts +41 -0
- package/dist/pagination.d.ts.map +1 -0
- package/dist/pagination.js +53 -0
- package/dist/pagination.js.map +1 -0
- package/dist/resources/agent.d.ts +39 -0
- package/dist/resources/agent.d.ts.map +1 -0
- package/dist/resources/agent.js +52 -0
- package/dist/resources/agent.js.map +1 -0
- package/dist/resources/events.d.ts +89 -0
- package/dist/resources/events.d.ts.map +1 -0
- package/dist/resources/events.js +92 -0
- package/dist/resources/events.js.map +1 -0
- package/dist/resources/players.d.ts +39 -0
- package/dist/resources/players.d.ts.map +1 -0
- package/dist/resources/players.js +51 -0
- package/dist/resources/players.js.map +1 -0
- package/dist/resources/sports.d.ts +25 -0
- package/dist/resources/sports.d.ts.map +1 -0
- package/dist/resources/sports.js +25 -0
- package/dist/resources/sports.js.map +1 -0
- package/dist/resources/teams.d.ts +29 -0
- package/dist/resources/teams.d.ts.map +1 -0
- package/dist/resources/teams.js +37 -0
- package/dist/resources/teams.js.map +1 -0
- package/dist/resources/webhooks.d.ts +35 -0
- package/dist/resources/webhooks.d.ts.map +1 -0
- package/dist/resources/webhooks.js +38 -0
- package/dist/resources/webhooks.js.map +1 -0
- package/dist/sse.d.ts +57 -0
- package/dist/sse.d.ts.map +1 -0
- package/dist/sse.js +165 -0
- package/dist/sse.js.map +1 -0
- package/dist/webhook-signature.d.ts +30 -0
- package/dist/webhook-signature.d.ts.map +1 -0
- package/dist/webhook-signature.js +82 -0
- package/dist/webhook-signature.js.map +1 -0
- package/package.json +56 -0
package/dist/meta.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// Parses the response headers documented in docs.html's "Response headers"
|
|
2
|
+
// table (X-RateLimit-*, X-Credits-*) into a typed object attached to every
|
|
3
|
+
// successful SDK response as `response.meta`.
|
|
4
|
+
function num(headers, name) {
|
|
5
|
+
const v = headers.get(name);
|
|
6
|
+
if (v == null)
|
|
7
|
+
return undefined;
|
|
8
|
+
const n = Number(v);
|
|
9
|
+
return Number.isNaN(n) ? undefined : n;
|
|
10
|
+
}
|
|
11
|
+
export function parseMeta(headers) {
|
|
12
|
+
return {
|
|
13
|
+
rateLimitLimit: num(headers, "x-ratelimit-limit"),
|
|
14
|
+
rateLimitRemaining: num(headers, "x-ratelimit-remaining"),
|
|
15
|
+
rateLimitReset: num(headers, "x-ratelimit-reset"),
|
|
16
|
+
creditsUsed: num(headers, "x-credits-used"),
|
|
17
|
+
creditsRemaining: num(headers, "x-credits-remaining"),
|
|
18
|
+
headers,
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Every resource method returns the parsed body directly (e.g. `SportsListResponse`)
|
|
23
|
+
* for ergonomics — not a `{data, meta}` wrapper — so response metadata (credits,
|
|
24
|
+
* rate-limit) is instead attached as a hidden, non-enumerable property keyed by
|
|
25
|
+
* this symbol. It's invisible to `JSON.stringify`/`for...in`/object spreads, so it
|
|
26
|
+
* never leaks into logs or persisted data; use {@link getMeta} to read it back.
|
|
27
|
+
*/
|
|
28
|
+
export const RESPONSE_META = Symbol.for("lumify.sdk.responseMeta");
|
|
29
|
+
/** Read the {@link ResponseMeta} attached to a value returned by an SDK call. */
|
|
30
|
+
export function getMeta(value) {
|
|
31
|
+
if (value && typeof value === "object") {
|
|
32
|
+
return value[RESPONSE_META];
|
|
33
|
+
}
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
export function attachMeta(value, meta) {
|
|
37
|
+
if (value && typeof value === "object") {
|
|
38
|
+
Object.defineProperty(value, RESPONSE_META, {
|
|
39
|
+
value: meta,
|
|
40
|
+
enumerable: false,
|
|
41
|
+
configurable: true,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
return value;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=meta.js.map
|
package/dist/meta.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta.js","sourceRoot":"","sources":["../src/meta.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,2EAA2E;AAC3E,8CAA8C;AAiB9C,SAAS,GAAG,CAAC,OAAgB,EAAE,IAAY;IACzC,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC5B,IAAI,CAAC,IAAI,IAAI;QAAE,OAAO,SAAS,CAAC;IAChC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACpB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,OAAgB;IACxC,OAAO;QACL,cAAc,EAAE,GAAG,CAAC,OAAO,EAAE,mBAAmB,CAAC;QACjD,kBAAkB,EAAE,GAAG,CAAC,OAAO,EAAE,uBAAuB,CAAC;QACzD,cAAc,EAAE,GAAG,CAAC,OAAO,EAAE,mBAAmB,CAAC;QACjD,WAAW,EAAE,GAAG,CAAC,OAAO,EAAE,gBAAgB,CAAC;QAC3C,gBAAgB,EAAE,GAAG,CAAC,OAAO,EAAE,qBAAqB,CAAC;QACrD,OAAO;KACR,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;AAEnE,iFAAiF;AACjF,MAAM,UAAU,OAAO,CAAC,KAAc;IACpC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,OAAQ,KAAkD,CAAC,aAAa,CAAC,CAAC;IAC5E,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,UAAU,CAAI,KAAQ,EAAE,IAAkB;IACxD,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,aAAa,EAAE;YAC1C,KAAK,EAAE,IAAI;YACX,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export interface CursorPage {
|
|
2
|
+
next_after_id?: number | null;
|
|
3
|
+
[key: string]: unknown;
|
|
4
|
+
}
|
|
5
|
+
export interface PaginateOptions {
|
|
6
|
+
/** Page size per request (API max 100, default 25). */
|
|
7
|
+
limit?: number;
|
|
8
|
+
/** Safety cap on total pages fetched, to bound a runaway loop. Default 1000. */
|
|
9
|
+
maxPages?: number;
|
|
10
|
+
}
|
|
11
|
+
export interface IterateOptions extends PaginateOptions {
|
|
12
|
+
/**
|
|
13
|
+
* Field on each page that holds the item array.
|
|
14
|
+
* Default `"data"` (teams/players). Events use `"events"`.
|
|
15
|
+
*/
|
|
16
|
+
itemsKey?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Async-generator over every page of a cursor-paginated list endpoint.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* for await (const page of paginate((afterId, limit) => client.events.list({ ...filters, afterId, limit }))) {
|
|
23
|
+
* for (const event of page.events ?? []) { ... }
|
|
24
|
+
* }
|
|
25
|
+
*/
|
|
26
|
+
export declare function paginate<TPage extends CursorPage>(fetchPage: (afterId: number | undefined, limit: number) => Promise<TPage>, options?: PaginateOptions): AsyncGenerator<TPage, void, void>;
|
|
27
|
+
/**
|
|
28
|
+
* Flatten a paginated list endpoint into a single async iterator over its items.
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* // teams/players — default itemsKey "data"
|
|
32
|
+
* for await (const team of iterateItems((afterId, limit) => client.teams.list({ afterId, limit }))) { ... }
|
|
33
|
+
*
|
|
34
|
+
* // events — items live under "events"
|
|
35
|
+
* for await (const event of iterateItems(
|
|
36
|
+
* (afterId, limit) => client.events.list({ afterId, limit }),
|
|
37
|
+
* { itemsKey: "events" }
|
|
38
|
+
* )) { ... }
|
|
39
|
+
*/
|
|
40
|
+
export declare function iterateItems<TItem, TPage extends CursorPage = CursorPage>(fetchPage: (afterId: number | undefined, limit: number) => Promise<TPage>, options?: IterateOptions): AsyncGenerator<TItem, void, void>;
|
|
41
|
+
//# sourceMappingURL=pagination.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../src/pagination.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,UAAU;IACzB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAe,SAAQ,eAAe;IACrD;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;GAOG;AACH,wBAAuB,QAAQ,CAAC,KAAK,SAAS,UAAU,EACtD,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,EACzE,OAAO,GAAE,eAAoB,GAC5B,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAWnC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAuB,YAAY,CAAC,KAAK,EAAE,KAAK,SAAS,UAAU,GAAG,UAAU,EAC9E,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,KAAK,CAAC,EACzE,OAAO,GAAE,cAAmB,GAC3B,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CASnC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// Cursor pagination helper — every /v1 list endpoint takes `after_id` + `limit`
|
|
2
|
+
// (max 100, default 25) and returns `next_after_id` (null when exhausted). Some
|
|
3
|
+
// responses also carry `has_more`; others (events) omit it, so callers must
|
|
4
|
+
// derive "done" from `next_after_id == null` rather than relying on `has_more`.
|
|
5
|
+
//
|
|
6
|
+
// List envelopes are not uniform: teams/players use `data`, events uses
|
|
7
|
+
// `events`, sports/seasons are non-cursor (`sports`/`seasons`). Pass `itemsKey`
|
|
8
|
+
// to {@link iterateItems} when the array field is not `data`.
|
|
9
|
+
/**
|
|
10
|
+
* Async-generator over every page of a cursor-paginated list endpoint.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* for await (const page of paginate((afterId, limit) => client.events.list({ ...filters, afterId, limit }))) {
|
|
14
|
+
* for (const event of page.events ?? []) { ... }
|
|
15
|
+
* }
|
|
16
|
+
*/
|
|
17
|
+
export async function* paginate(fetchPage, options = {}) {
|
|
18
|
+
const limit = options.limit ?? 25;
|
|
19
|
+
const maxPages = options.maxPages ?? 1000;
|
|
20
|
+
let afterId;
|
|
21
|
+
for (let page = 0; page < maxPages; page++) {
|
|
22
|
+
const result = await fetchPage(afterId, limit);
|
|
23
|
+
yield result;
|
|
24
|
+
if (result.next_after_id == null)
|
|
25
|
+
return;
|
|
26
|
+
afterId = result.next_after_id;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Flatten a paginated list endpoint into a single async iterator over its items.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* // teams/players — default itemsKey "data"
|
|
34
|
+
* for await (const team of iterateItems((afterId, limit) => client.teams.list({ afterId, limit }))) { ... }
|
|
35
|
+
*
|
|
36
|
+
* // events — items live under "events"
|
|
37
|
+
* for await (const event of iterateItems(
|
|
38
|
+
* (afterId, limit) => client.events.list({ afterId, limit }),
|
|
39
|
+
* { itemsKey: "events" }
|
|
40
|
+
* )) { ... }
|
|
41
|
+
*/
|
|
42
|
+
export async function* iterateItems(fetchPage, options = {}) {
|
|
43
|
+
const itemsKey = options.itemsKey ?? "data";
|
|
44
|
+
for await (const page of paginate(fetchPage, options)) {
|
|
45
|
+
const items = page[itemsKey];
|
|
46
|
+
if (!Array.isArray(items))
|
|
47
|
+
continue;
|
|
48
|
+
for (const item of items) {
|
|
49
|
+
yield item;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=pagination.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.js","sourceRoot":"","sources":["../src/pagination.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,gFAAgF;AAChF,4EAA4E;AAC5E,gFAAgF;AAChF,EAAE;AACF,wEAAwE;AACxE,gFAAgF;AAChF,8DAA8D;AAsB9D;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,QAAQ,CAC7B,SAAyE,EACzE,OAAO,GAAoB,EAAE;IAE7B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,EAAE,CAAC;IAClC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC;IAC1C,IAAI,OAA2B,CAAC;IAEhC,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,QAAQ,EAAE,IAAI,EAAE,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC/C,MAAM,MAAM,CAAC;QACb,IAAI,MAAM,CAAC,aAAa,IAAI,IAAI;YAAE,OAAO;QACzC,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;IACjC,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,YAAY,CACjC,SAAyE,EACzE,OAAO,GAAmB,EAAE;IAE5B,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC;IAC5C,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,EAAE,CAAC;QACtD,MAAM,KAAK,GAAI,IAAgC,CAAC,QAAQ,CAAC,CAAC;QAC1D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,SAAS;QACpC,KAAK,MAAM,IAAI,IAAI,KAAgB,EAAE,CAAC;YACpC,MAAM,IAAI,CAAC;QACb,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { LumifyClient } from "../client.js";
|
|
2
|
+
import type { AgentApiKey, AgentApiKeyListResponse, AgentApiKeyRevokeResponse, AgentCreditsResponse, CreditPackListResponse, CreditTopupResponse } from "../generated/models.js";
|
|
3
|
+
export interface CreateApiKeyParams {
|
|
4
|
+
/** Defaults to "Agent key" server-side if omitted. */
|
|
5
|
+
name?: string;
|
|
6
|
+
/** Sport slugs the key is scoped to, or `["all"]`. Defaults to the account's full access. */
|
|
7
|
+
scopes?: string[];
|
|
8
|
+
/** Key auto-expires after this many days if set. */
|
|
9
|
+
expiresInDays?: number;
|
|
10
|
+
}
|
|
11
|
+
/** Programmatic API-key lifecycle — mint/list/revoke keys without the dashboard. */
|
|
12
|
+
export declare class AgentKeysResource {
|
|
13
|
+
private readonly client;
|
|
14
|
+
constructor(client: LumifyClient);
|
|
15
|
+
/** POST /api/agent/keys — the full key is only returned once, on creation. */
|
|
16
|
+
create(params?: CreateApiKeyParams): Promise<AgentApiKey>;
|
|
17
|
+
/** GET /api/agent/keys */
|
|
18
|
+
list(): Promise<AgentApiKeyListResponse>;
|
|
19
|
+
/** DELETE /api/agent/keys/{id} */
|
|
20
|
+
revoke(keyId: number): Promise<AgentApiKeyRevokeResponse>;
|
|
21
|
+
}
|
|
22
|
+
/** Credit balance, usage, and top-ups — for agents managing their own spend. */
|
|
23
|
+
export declare class AgentCreditsResource {
|
|
24
|
+
private readonly client;
|
|
25
|
+
constructor(client: LumifyClient);
|
|
26
|
+
/** GET /api/agent/credits — current balance, usage, and billing period. */
|
|
27
|
+
get(): Promise<AgentCreditsResponse>;
|
|
28
|
+
/** GET /api/agent/credit-packs — purchasable one-off credit packs. */
|
|
29
|
+
listPacks(): Promise<CreditPackListResponse>;
|
|
30
|
+
/** POST /api/agent/credits/topup — charges the account's saved payment method for `packId` (see `listPacks()`). */
|
|
31
|
+
topup(packId: number): Promise<CreditTopupResponse>;
|
|
32
|
+
}
|
|
33
|
+
/** Agent onboarding surface: `client.agent.keys.*` and `client.agent.credits.*`. */
|
|
34
|
+
export declare class AgentResource {
|
|
35
|
+
readonly keys: AgentKeysResource;
|
|
36
|
+
readonly credits: AgentCreditsResource;
|
|
37
|
+
constructor(client: LumifyClient);
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../../src/resources/agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EACV,WAAW,EACX,uBAAuB,EACvB,yBAAyB,EACzB,oBAAoB,EACpB,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,kBAAkB;IACjC,sDAAsD;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6FAA6F;IAC7F,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,oDAAoD;IACpD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,oFAAoF;AACpF,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAnC,YAA6B,MAAM,EAAE,YAAY,EAAI;IAErD,8EAA8E;IAC9E,MAAM,CAAC,MAAM,GAAE,kBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,CAI5D;IAED,0BAA0B;IAC1B,IAAI,IAAI,OAAO,CAAC,uBAAuB,CAAC,CAEvC;IAED,kCAAkC;IAClC,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,yBAAyB,CAAC,CAExD;CACF;AAED,gFAAgF;AAChF,qBAAa,oBAAoB;IACnB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAnC,YAA6B,MAAM,EAAE,YAAY,EAAI;IAErD,2EAA2E;IAC3E,GAAG,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAEnC;IAED,sEAAsE;IACtE,SAAS,IAAI,OAAO,CAAC,sBAAsB,CAAC,CAE3C;IAED,mHAAmH;IACnH,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAIlD;CACF;AAED,oFAAoF;AACpF,qBAAa,aAAa;IACxB,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,oBAAoB,CAAC;IAEvC,YAAY,MAAM,EAAE,YAAY,EAG/B;CACF"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/** Programmatic API-key lifecycle — mint/list/revoke keys without the dashboard. */
|
|
2
|
+
export class AgentKeysResource {
|
|
3
|
+
client;
|
|
4
|
+
constructor(client) {
|
|
5
|
+
this.client = client;
|
|
6
|
+
}
|
|
7
|
+
/** POST /api/agent/keys — the full key is only returned once, on creation. */
|
|
8
|
+
create(params = {}) {
|
|
9
|
+
return this.client.post("/api/agent/keys", {
|
|
10
|
+
body: { name: params.name, scopes: params.scopes, expires_in_days: params.expiresInDays },
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
/** GET /api/agent/keys */
|
|
14
|
+
list() {
|
|
15
|
+
return this.client.get("/api/agent/keys");
|
|
16
|
+
}
|
|
17
|
+
/** DELETE /api/agent/keys/{id} */
|
|
18
|
+
revoke(keyId) {
|
|
19
|
+
return this.client.delete(`/api/agent/keys/${keyId}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/** Credit balance, usage, and top-ups — for agents managing their own spend. */
|
|
23
|
+
export class AgentCreditsResource {
|
|
24
|
+
client;
|
|
25
|
+
constructor(client) {
|
|
26
|
+
this.client = client;
|
|
27
|
+
}
|
|
28
|
+
/** GET /api/agent/credits — current balance, usage, and billing period. */
|
|
29
|
+
get() {
|
|
30
|
+
return this.client.get("/api/agent/credits");
|
|
31
|
+
}
|
|
32
|
+
/** GET /api/agent/credit-packs — purchasable one-off credit packs. */
|
|
33
|
+
listPacks() {
|
|
34
|
+
return this.client.get("/api/agent/credit-packs");
|
|
35
|
+
}
|
|
36
|
+
/** POST /api/agent/credits/topup — charges the account's saved payment method for `packId` (see `listPacks()`). */
|
|
37
|
+
topup(packId) {
|
|
38
|
+
return this.client.post("/api/agent/credits/topup", {
|
|
39
|
+
body: { pack_id: packId },
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/** Agent onboarding surface: `client.agent.keys.*` and `client.agent.credits.*`. */
|
|
44
|
+
export class AgentResource {
|
|
45
|
+
keys;
|
|
46
|
+
credits;
|
|
47
|
+
constructor(client) {
|
|
48
|
+
this.keys = new AgentKeysResource(client);
|
|
49
|
+
this.credits = new AgentCreditsResource(client);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/resources/agent.ts"],"names":[],"mappings":"AAmBA,oFAAoF;AACpF,MAAM,OAAO,iBAAiB;IACC,MAAM;IAAnC,YAA6B,MAAoB;sBAApB,MAAM;IAAiB,CAAC;IAErD,8EAA8E;IAC9E,MAAM,CAAC,MAAM,GAAuB,EAAE;QACpC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAc,iBAAiB,EAAE;YACtD,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,CAAC,aAAa,EAAE;SAC1F,CAAC,CAAC;IACL,CAAC;IAED,0BAA0B;IAC1B,IAAI;QACF,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAA0B,iBAAiB,CAAC,CAAC;IACrE,CAAC;IAED,kCAAkC;IAClC,MAAM,CAAC,KAAa;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,CAA4B,mBAAmB,KAAK,EAAE,CAAC,CAAC;IACnF,CAAC;CACF;AAED,gFAAgF;AAChF,MAAM,OAAO,oBAAoB;IACF,MAAM;IAAnC,YAA6B,MAAoB;sBAApB,MAAM;IAAiB,CAAC;IAErD,2EAA2E;IAC3E,GAAG;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAuB,oBAAoB,CAAC,CAAC;IACrE,CAAC;IAED,sEAAsE;IACtE,SAAS;QACP,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAyB,yBAAyB,CAAC,CAAC;IAC5E,CAAC;IAED,mHAAmH;IACnH,KAAK,CAAC,MAAc;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAsB,0BAA0B,EAAE;YACvE,IAAI,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE;SAC1B,CAAC,CAAC;IACL,CAAC;CACF;AAED,oFAAoF;AACpF,MAAM,OAAO,aAAa;IACf,IAAI,CAAoB;IACxB,OAAO,CAAuB;IAEvC,YAAY,MAAoB;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC1C,IAAI,CAAC,OAAO,GAAG,IAAI,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAClD,CAAC;CACF"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { LumifyClient } from "../client.js";
|
|
2
|
+
import type { EventDetail, EventListResponse, EventSummary, IntelligenceResponse, OddsHistoryResponse, OddsResponse, ScoreResponse, SplitsResponse } from "../generated/models.js";
|
|
3
|
+
import { type PaginateOptions } from "../pagination.js";
|
|
4
|
+
import { type ScoreStreamEvent, type StreamScoresOptions } from "../sse.js";
|
|
5
|
+
/**
|
|
6
|
+
* `EventDetail` plus the optional compound-include payloads that the OpenAPI
|
|
7
|
+
* schema doesn't declare (they're attached dynamically when
|
|
8
|
+
* `include_odds` / `include_intelligence` are set).
|
|
9
|
+
*/
|
|
10
|
+
export type EventDetailWithIncludes = EventDetail & {
|
|
11
|
+
odds?: OddsResponse;
|
|
12
|
+
intelligence?: IntelligenceResponse;
|
|
13
|
+
};
|
|
14
|
+
export interface ListEventsParams {
|
|
15
|
+
/** Sport slug: nfl, nba, mlb, nhl, tennis, soccer… */
|
|
16
|
+
sport?: string;
|
|
17
|
+
/** League slug: nfl, nba, atp, fifa_world_cup… */
|
|
18
|
+
league?: string;
|
|
19
|
+
/** Event status: scheduled | inprogress | final | … */
|
|
20
|
+
status?: string;
|
|
21
|
+
/** UTC date YYYY-MM-DD (single day). */
|
|
22
|
+
date?: string;
|
|
23
|
+
/** UTC start date YYYY-MM-DD (range start). */
|
|
24
|
+
from?: string;
|
|
25
|
+
/** UTC end date YYYY-MM-DD, inclusive (range end). */
|
|
26
|
+
to?: string;
|
|
27
|
+
seasonId?: number;
|
|
28
|
+
afterId?: number;
|
|
29
|
+
/** Max 100, default 25. */
|
|
30
|
+
limit?: number;
|
|
31
|
+
/** Inline each event's current score. */
|
|
32
|
+
includeScores?: boolean;
|
|
33
|
+
hasRecommend?: boolean;
|
|
34
|
+
sort?: string;
|
|
35
|
+
}
|
|
36
|
+
export interface GetEventParams {
|
|
37
|
+
/** Inline current odds (all bookmakers) under `odds`. Costs +1 credit. */
|
|
38
|
+
includeOdds?: boolean;
|
|
39
|
+
/** Inline bet intelligence under `intelligence`. Costs +1 credit. */
|
|
40
|
+
includeIntelligence?: boolean;
|
|
41
|
+
/** Bookmaker for market prices in `intelligence.bets[].market`: pinnacle | fanduel | draftkings. */
|
|
42
|
+
bookmaker?: string;
|
|
43
|
+
}
|
|
44
|
+
export interface BookmakerParams {
|
|
45
|
+
bookmaker?: string;
|
|
46
|
+
}
|
|
47
|
+
export interface OddsHistoryParams extends BookmakerParams {
|
|
48
|
+
limit?: number;
|
|
49
|
+
}
|
|
50
|
+
export declare class EventsResource {
|
|
51
|
+
private readonly client;
|
|
52
|
+
constructor(client: LumifyClient);
|
|
53
|
+
/** GET /v1/events — cursor-paginated (`after_id`/`limit`; `next_after_id` when more remain). */
|
|
54
|
+
list(params?: ListEventsParams): Promise<EventListResponse>;
|
|
55
|
+
/**
|
|
56
|
+
* Async-iterate every page of `list()` for the given filters, stopping when
|
|
57
|
+
* `next_after_id` is null. Use {@link EventsResource.iterate} to flatten to items.
|
|
58
|
+
*/
|
|
59
|
+
paginate(params?: Omit<ListEventsParams, "afterId">, options?: PaginateOptions): AsyncGenerator<EventListResponse, void, void>;
|
|
60
|
+
/** Async-iterate every event matching the filters, across all pages. */
|
|
61
|
+
iterate(params?: Omit<ListEventsParams, "afterId">, options?: PaginateOptions): AsyncGenerator<EventSummary, void, void>;
|
|
62
|
+
/** GET /v1/events/{id} — full event with participants, venue, and schedule metadata. */
|
|
63
|
+
get(eventId: number, params?: GetEventParams): Promise<EventDetailWithIncludes>;
|
|
64
|
+
/** GET /v1/events/{id}/score — live score snapshot. */
|
|
65
|
+
score(eventId: number): Promise<ScoreResponse>;
|
|
66
|
+
/**
|
|
67
|
+
* GET /v1/events/{id}/odds. `available: false` (not-yet-posted odds) is not
|
|
68
|
+
* charged — `X-Credits-Used: 0` on the response (read via `getMeta()`).
|
|
69
|
+
*/
|
|
70
|
+
odds(eventId: number, params?: BookmakerParams): Promise<OddsResponse>;
|
|
71
|
+
/** GET /v1/events/{id}/odds/history — line-movement history. */
|
|
72
|
+
oddsHistory(eventId: number, params?: OddsHistoryParams): Promise<OddsHistoryResponse>;
|
|
73
|
+
/** GET /v1/events/{id}/splits — public betting splits (tickets % vs. money %). */
|
|
74
|
+
splits(eventId: number): Promise<SplitsResponse>;
|
|
75
|
+
/** GET /v1/events/{id}/intelligence — AI bet intelligence (confidence, signals, narratives). */
|
|
76
|
+
intelligence(eventId: number, params?: BookmakerParams): Promise<IntelligenceResponse>;
|
|
77
|
+
/**
|
|
78
|
+
* GET /v1/events/{id}/stream (SSE) — async-iterate live score updates,
|
|
79
|
+
* emitted only on change, until the event finishes.
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* for await (const evt of client.events.stream(eventId)) {
|
|
83
|
+
* if (evt.event === "score") console.log(evt.data.status);
|
|
84
|
+
* if (evt.event === "done") break;
|
|
85
|
+
* }
|
|
86
|
+
*/
|
|
87
|
+
stream(eventId: number, options?: StreamScoresOptions): AsyncGenerator<ScoreStreamEvent, void, void>;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/resources/events.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { paginate, iterateItems } from "../pagination.js";
|
|
2
|
+
import { streamScores } from "../sse.js";
|
|
3
|
+
function toQuery(p) {
|
|
4
|
+
return {
|
|
5
|
+
sport: p.sport,
|
|
6
|
+
league: p.league,
|
|
7
|
+
status: p.status,
|
|
8
|
+
date: p.date,
|
|
9
|
+
from: p.from,
|
|
10
|
+
to: p.to,
|
|
11
|
+
season_id: p.seasonId,
|
|
12
|
+
after_id: p.afterId,
|
|
13
|
+
limit: p.limit,
|
|
14
|
+
include_scores: p.includeScores,
|
|
15
|
+
has_recommend: p.hasRecommend,
|
|
16
|
+
sort: p.sort,
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export class EventsResource {
|
|
20
|
+
client;
|
|
21
|
+
constructor(client) {
|
|
22
|
+
this.client = client;
|
|
23
|
+
}
|
|
24
|
+
/** GET /v1/events — cursor-paginated (`after_id`/`limit`; `next_after_id` when more remain). */
|
|
25
|
+
list(params = {}) {
|
|
26
|
+
return this.client.get("/v1/events", { query: toQuery(params) });
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Async-iterate every page of `list()` for the given filters, stopping when
|
|
30
|
+
* `next_after_id` is null. Use {@link EventsResource.iterate} to flatten to items.
|
|
31
|
+
*/
|
|
32
|
+
paginate(params = {}, options = {}) {
|
|
33
|
+
return paginate((afterId, limit) => this.list({ ...params, afterId, limit }), { limit: params.limit, ...options });
|
|
34
|
+
}
|
|
35
|
+
/** Async-iterate every event matching the filters, across all pages. */
|
|
36
|
+
iterate(params = {}, options = {}) {
|
|
37
|
+
return iterateItems((afterId, limit) => this.list({ ...params, afterId, limit }), { limit: params.limit, ...options, itemsKey: "events" });
|
|
38
|
+
}
|
|
39
|
+
/** GET /v1/events/{id} — full event with participants, venue, and schedule metadata. */
|
|
40
|
+
get(eventId, params = {}) {
|
|
41
|
+
return this.client.get(`/v1/events/${eventId}`, {
|
|
42
|
+
query: {
|
|
43
|
+
include_odds: params.includeOdds,
|
|
44
|
+
include_intelligence: params.includeIntelligence,
|
|
45
|
+
bookmaker: params.bookmaker,
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/** GET /v1/events/{id}/score — live score snapshot. */
|
|
50
|
+
score(eventId) {
|
|
51
|
+
return this.client.get(`/v1/events/${eventId}/score`);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* GET /v1/events/{id}/odds. `available: false` (not-yet-posted odds) is not
|
|
55
|
+
* charged — `X-Credits-Used: 0` on the response (read via `getMeta()`).
|
|
56
|
+
*/
|
|
57
|
+
odds(eventId, params = {}) {
|
|
58
|
+
return this.client.get(`/v1/events/${eventId}/odds`, {
|
|
59
|
+
query: { bookmaker: params.bookmaker },
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
/** GET /v1/events/{id}/odds/history — line-movement history. */
|
|
63
|
+
oddsHistory(eventId, params = {}) {
|
|
64
|
+
return this.client.get(`/v1/events/${eventId}/odds/history`, {
|
|
65
|
+
query: { bookmaker: params.bookmaker, limit: params.limit },
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
/** GET /v1/events/{id}/splits — public betting splits (tickets % vs. money %). */
|
|
69
|
+
splits(eventId) {
|
|
70
|
+
return this.client.get(`/v1/events/${eventId}/splits`);
|
|
71
|
+
}
|
|
72
|
+
/** GET /v1/events/{id}/intelligence — AI bet intelligence (confidence, signals, narratives). */
|
|
73
|
+
intelligence(eventId, params = {}) {
|
|
74
|
+
return this.client.get(`/v1/events/${eventId}/intelligence`, {
|
|
75
|
+
query: { bookmaker: params.bookmaker },
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* GET /v1/events/{id}/stream (SSE) — async-iterate live score updates,
|
|
80
|
+
* emitted only on change, until the event finishes.
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* for await (const evt of client.events.stream(eventId)) {
|
|
84
|
+
* if (evt.event === "score") console.log(evt.data.status);
|
|
85
|
+
* if (evt.event === "done") break;
|
|
86
|
+
* }
|
|
87
|
+
*/
|
|
88
|
+
stream(eventId, options = {}) {
|
|
89
|
+
return streamScores(this.client, eventId, options);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/resources/events.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { LumifyClient } from "../client.js";
|
|
2
|
+
import type { Player, PlayerEventsResponse, PlayersListResponse } from "../generated/models.js";
|
|
3
|
+
import { type PaginateOptions } from "../pagination.js";
|
|
4
|
+
export interface ListPlayersParams {
|
|
5
|
+
sport?: string;
|
|
6
|
+
/** Free-text search on player name. */
|
|
7
|
+
q?: string;
|
|
8
|
+
country?: string;
|
|
9
|
+
active?: boolean;
|
|
10
|
+
/** Only players with a ranking (e.g. tennis ATP/WTA). */
|
|
11
|
+
ranked?: boolean;
|
|
12
|
+
afterId?: number;
|
|
13
|
+
/** Max 100, default 25. */
|
|
14
|
+
limit?: number;
|
|
15
|
+
}
|
|
16
|
+
export interface PlayerEventsParams {
|
|
17
|
+
status?: string;
|
|
18
|
+
from?: string;
|
|
19
|
+
to?: string;
|
|
20
|
+
afterId?: number;
|
|
21
|
+
limit?: number;
|
|
22
|
+
}
|
|
23
|
+
export declare class PlayersResource {
|
|
24
|
+
private readonly client;
|
|
25
|
+
constructor(client: LumifyClient);
|
|
26
|
+
/** GET /v1/players — cursor-paginated. */
|
|
27
|
+
list(params?: ListPlayersParams): Promise<PlayersListResponse>;
|
|
28
|
+
/** Async-iterate every page of `list()` for the given filters. */
|
|
29
|
+
paginate(params?: Omit<ListPlayersParams, "afterId">, options?: PaginateOptions): AsyncGenerator<PlayersListResponse, void, void>;
|
|
30
|
+
/** Async-iterate every player matching the filters, across all pages. */
|
|
31
|
+
iterate(params?: Omit<ListPlayersParams, "afterId">, options?: PaginateOptions): AsyncGenerator<unknown, void, void>;
|
|
32
|
+
/** GET /v1/players/{id} */
|
|
33
|
+
get(playerId: number): Promise<Player>;
|
|
34
|
+
/** GET /v1/players/{id}/events — cursor-paginated schedule/results for a player. */
|
|
35
|
+
events(playerId: number, params?: PlayerEventsParams): Promise<PlayerEventsResponse>;
|
|
36
|
+
/** Async-iterate every page of `events()` for the given player/filters. */
|
|
37
|
+
paginateEvents(playerId: number, params?: Omit<PlayerEventsParams, "afterId">, options?: PaginateOptions): AsyncGenerator<PlayerEventsResponse, void, void>;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=players.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"players.d.ts","sourceRoot":"","sources":["../../src/resources/players.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAChG,OAAO,EAA0B,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEhF,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uCAAuC;IACvC,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,yDAAyD;IACzD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAcD,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAnC,YAA6B,MAAM,EAAE,YAAY,EAAI;IAErD,0CAA0C;IAC1C,IAAI,CAAC,MAAM,GAAE,iBAAsB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAEjE;IAED,kEAAkE;IAClE,QAAQ,CAAC,MAAM,GAAE,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAM,EAAE,OAAO,GAAE,eAAoB,mDAKtF;IAED,yEAAyE;IACzE,OAAO,CAAC,MAAM,GAAE,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAM,EAAE,OAAO,GAAE,eAAoB,uCAKrF;IAED,2BAA2B;IAC3B,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAErC;IAED,oFAAoF;IACpF,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,kBAAuB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAUvF;IAED,2EAA2E;IAC3E,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,GAAE,IAAI,CAAC,kBAAkB,EAAE,SAAS,CAAM,EAAE,OAAO,GAAE,eAAoB,oDAK/G;CACF"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { paginate, iterateItems } from "../pagination.js";
|
|
2
|
+
function toQuery(p) {
|
|
3
|
+
return {
|
|
4
|
+
sport: p.sport,
|
|
5
|
+
q: p.q,
|
|
6
|
+
country: p.country,
|
|
7
|
+
active: p.active,
|
|
8
|
+
ranked: p.ranked,
|
|
9
|
+
after_id: p.afterId,
|
|
10
|
+
limit: p.limit,
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
export class PlayersResource {
|
|
14
|
+
client;
|
|
15
|
+
constructor(client) {
|
|
16
|
+
this.client = client;
|
|
17
|
+
}
|
|
18
|
+
/** GET /v1/players — cursor-paginated. */
|
|
19
|
+
list(params = {}) {
|
|
20
|
+
return this.client.get("/v1/players", { query: toQuery(params) });
|
|
21
|
+
}
|
|
22
|
+
/** Async-iterate every page of `list()` for the given filters. */
|
|
23
|
+
paginate(params = {}, options = {}) {
|
|
24
|
+
return paginate((afterId, limit) => this.list({ ...params, afterId, limit }), { limit: params.limit, ...options });
|
|
25
|
+
}
|
|
26
|
+
/** Async-iterate every player matching the filters, across all pages. */
|
|
27
|
+
iterate(params = {}, options = {}) {
|
|
28
|
+
return iterateItems((afterId, limit) => this.list({ ...params, afterId, limit }), { limit: params.limit, ...options });
|
|
29
|
+
}
|
|
30
|
+
/** GET /v1/players/{id} */
|
|
31
|
+
get(playerId) {
|
|
32
|
+
return this.client.get(`/v1/players/${playerId}`);
|
|
33
|
+
}
|
|
34
|
+
/** GET /v1/players/{id}/events — cursor-paginated schedule/results for a player. */
|
|
35
|
+
events(playerId, params = {}) {
|
|
36
|
+
return this.client.get(`/v1/players/${playerId}/events`, {
|
|
37
|
+
query: {
|
|
38
|
+
status: params.status,
|
|
39
|
+
from: params.from,
|
|
40
|
+
to: params.to,
|
|
41
|
+
after_id: params.afterId,
|
|
42
|
+
limit: params.limit,
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/** Async-iterate every page of `events()` for the given player/filters. */
|
|
47
|
+
paginateEvents(playerId, params = {}, options = {}) {
|
|
48
|
+
return paginate((afterId, limit) => this.events(playerId, { ...params, afterId, limit }), { limit: params.limit, ...options });
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=players.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"players.js","sourceRoot":"","sources":["../../src/resources/players.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAwB,MAAM,kBAAkB,CAAC;AAuBhF,SAAS,OAAO,CAAC,CAAoB;IACnC,OAAO;QACL,KAAK,EAAE,CAAC,CAAC,KAAK;QACd,CAAC,EAAE,CAAC,CAAC,CAAC;QACN,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,MAAM,EAAE,CAAC,CAAC,MAAM;QAChB,QAAQ,EAAE,CAAC,CAAC,OAAO;QACnB,KAAK,EAAE,CAAC,CAAC,KAAK;KACf,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,eAAe;IACG,MAAM;IAAnC,YAA6B,MAAoB;sBAApB,MAAM;IAAiB,CAAC;IAErD,0CAA0C;IAC1C,IAAI,CAAC,MAAM,GAAsB,EAAE;QACjC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAsB,aAAa,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,kEAAkE;IAClE,QAAQ,CAAC,MAAM,GAAuC,EAAE,EAAE,OAAO,GAAoB,EAAE;QACrF,OAAO,QAAQ,CACb,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAC5D,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,OAAO,EAAE,CACpC,CAAC;IACJ,CAAC;IAED,yEAAyE;IACzE,OAAO,CAAC,MAAM,GAAuC,EAAE,EAAE,OAAO,GAAoB,EAAE;QACpF,OAAO,YAAY,CACjB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAC5D,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,OAAO,EAAE,CACpC,CAAC;IACJ,CAAC;IAED,2BAA2B;IAC3B,GAAG,CAAC,QAAgB;QAClB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAS,eAAe,QAAQ,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,oFAAoF;IACpF,MAAM,CAAC,QAAgB,EAAE,MAAM,GAAuB,EAAE;QACtD,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAuB,eAAe,QAAQ,SAAS,EAAE;YAC7E,KAAK,EAAE;gBACL,MAAM,EAAE,MAAM,CAAC,MAAM;gBACrB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,QAAQ,EAAE,MAAM,CAAC,OAAO;gBACxB,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB;SACF,CAAC,CAAC;IACL,CAAC;IAED,2EAA2E;IAC3E,cAAc,CAAC,QAAgB,EAAE,MAAM,GAAwC,EAAE,EAAE,OAAO,GAAoB,EAAE;QAC9G,OAAO,QAAQ,CACb,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EACxE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,GAAG,OAAO,EAAE,CACpC,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { LumifyClient } from "../client.js";
|
|
2
|
+
import type { SeasonsListResponse, SportsListResponse } from "../generated/models.js";
|
|
3
|
+
export interface ListSportsParams {
|
|
4
|
+
/** Only return currently-active sports. */
|
|
5
|
+
activeOnly?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare class SportsResource {
|
|
8
|
+
private readonly client;
|
|
9
|
+
constructor(client: LumifyClient);
|
|
10
|
+
/** GET /v1/sports — every sport Lumify covers (mlb, nfl, nba, nhl, tennis, soccer, ncaaf, ...). */
|
|
11
|
+
list(params?: ListSportsParams): Promise<SportsListResponse>;
|
|
12
|
+
}
|
|
13
|
+
export interface ListSeasonsParams {
|
|
14
|
+
/** Sport slug filter (e.g. "nfl"). */
|
|
15
|
+
sport?: string;
|
|
16
|
+
/** Only return each sport/league's current season. */
|
|
17
|
+
currentOnly?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare class SeasonsResource {
|
|
20
|
+
private readonly client;
|
|
21
|
+
constructor(client: LumifyClient);
|
|
22
|
+
/** GET /v1/seasons */
|
|
23
|
+
list(params?: ListSeasonsParams): Promise<SeasonsListResponse>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=sports.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sports.d.ts","sourceRoot":"","sources":["../../src/resources/sports.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEtF,MAAM,WAAW,gBAAgB;IAC/B,2CAA2C;IAC3C,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,qBAAa,cAAc;IACb,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAnC,YAA6B,MAAM,EAAE,YAAY,EAAI;IAErD,mGAAmG;IACnG,IAAI,CAAC,MAAM,GAAE,gBAAqB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAI/D;CACF;AAED,MAAM,WAAW,iBAAiB;IAChC,sCAAsC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAnC,YAA6B,MAAM,EAAE,YAAY,EAAI;IAErD,sBAAsB;IACtB,IAAI,CAAC,MAAM,GAAE,iBAAsB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAIjE;CACF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export class SportsResource {
|
|
2
|
+
client;
|
|
3
|
+
constructor(client) {
|
|
4
|
+
this.client = client;
|
|
5
|
+
}
|
|
6
|
+
/** GET /v1/sports — every sport Lumify covers (mlb, nfl, nba, nhl, tennis, soccer, ncaaf, ...). */
|
|
7
|
+
list(params = {}) {
|
|
8
|
+
return this.client.get("/v1/sports", {
|
|
9
|
+
query: { active_only: params.activeOnly },
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export class SeasonsResource {
|
|
14
|
+
client;
|
|
15
|
+
constructor(client) {
|
|
16
|
+
this.client = client;
|
|
17
|
+
}
|
|
18
|
+
/** GET /v1/seasons */
|
|
19
|
+
list(params = {}) {
|
|
20
|
+
return this.client.get("/v1/seasons", {
|
|
21
|
+
query: { sport: params.sport, current_only: params.currentOnly },
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=sports.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sports.js","sourceRoot":"","sources":["../../src/resources/sports.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,cAAc;IACI,MAAM;IAAnC,YAA6B,MAAoB;sBAApB,MAAM;IAAiB,CAAC;IAErD,mGAAmG;IACnG,IAAI,CAAC,MAAM,GAAqB,EAAE;QAChC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAqB,YAAY,EAAE;YACvD,KAAK,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,UAAU,EAAE;SAC1C,CAAC,CAAC;IACL,CAAC;CACF;AASD,MAAM,OAAO,eAAe;IACG,MAAM;IAAnC,YAA6B,MAAoB;sBAApB,MAAM;IAAiB,CAAC;IAErD,sBAAsB;IACtB,IAAI,CAAC,MAAM,GAAsB,EAAE;QACjC,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAsB,aAAa,EAAE;YACzD,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,CAAC,WAAW,EAAE;SACjE,CAAC,CAAC;IACL,CAAC;CACF"}
|