@varla/polymarket 2.2.6 → 2.4.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/CHANGELOG.md +21 -0
- package/dist/gamma-client.d.ts +12 -0
- package/dist/gamma-client.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +67 -16
- package/dist/rate-limits.d.ts +4 -0
- package/dist/rate-limits.d.ts.map +1 -1
- package/dist/resolver.d.ts +12 -0
- package/dist/resolver.d.ts.map +1 -1
- package/dist/utils/url.d.ts +11 -0
- package/dist/utils/url.d.ts.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# @varla/polymarket
|
|
2
2
|
|
|
3
|
+
## 2.4.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- fd7f6c8: Added configurable proactive rate limiting for GammaClient requests.
|
|
8
|
+
|
|
9
|
+
- add optional rateLimit settings to GammaClient to shape general and /markets request throughput
|
|
10
|
+
- introduce default Gamma API rate limit constants and apply sliding-window limiting before requests
|
|
11
|
+
|
|
12
|
+
- 99ae9fd: Add optional concurrency control for resolving Gamma market chunks.
|
|
13
|
+
|
|
14
|
+
- Added `maxConcurrentRequests` option to `resolveBinaryMarketsByConditionId` to limit concurrent Gamma requests.
|
|
15
|
+
|
|
16
|
+
## 2.3.0
|
|
17
|
+
|
|
18
|
+
### Minor Changes
|
|
19
|
+
|
|
20
|
+
- 70422c9: Added Polymarket event URL utilities and enriched resolved market data with event slug and URL fields.
|
|
21
|
+
|
|
22
|
+
- export polymarketEventUrl for constructing Polymarket event links,- include eventSlug and url on ResolvedBinaryMarket results using event slug when available
|
|
23
|
+
|
|
3
24
|
## 2.2.6
|
|
4
25
|
|
|
5
26
|
### Patch Changes
|
package/dist/gamma-client.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { SlidingWindowLimiter } from "./rate-limits.js";
|
|
1
2
|
import type { GammaBuilderLeaderboardEntry, GammaBuilderVolumePoint, GammaComment, GammaEvent, GammaMarket, GammaPublicProfile, GammaSearchResult, GammaSeries, GammaSport, GammaSportsMarketType, GammaTag, GammaTagRelationship, GammaTeam } from "./types.js";
|
|
2
3
|
export type GammaClientOpts = {
|
|
3
4
|
/** Optional override for Gamma base URL. */
|
|
@@ -11,6 +12,13 @@ export type GammaClientOpts = {
|
|
|
11
12
|
multiplier?: number;
|
|
12
13
|
jitterFactor?: number;
|
|
13
14
|
};
|
|
15
|
+
rateLimit?: {
|
|
16
|
+
enabled?: boolean;
|
|
17
|
+
windowMs?: number;
|
|
18
|
+
generalMaxPerWindow?: number;
|
|
19
|
+
marketsMaxPerWindow?: number;
|
|
20
|
+
now?: () => number;
|
|
21
|
+
};
|
|
14
22
|
log?: (level: "debug" | "info" | "warn" | "error", msg: string, fields?: Record<string, unknown>) => void;
|
|
15
23
|
};
|
|
16
24
|
export declare class GammaClient {
|
|
@@ -19,8 +27,12 @@ export declare class GammaClient {
|
|
|
19
27
|
readonly maxAttempts: number;
|
|
20
28
|
readonly fetchFn: typeof fetch;
|
|
21
29
|
readonly retry: Required<NonNullable<GammaClientOpts["retry"]>>;
|
|
30
|
+
readonly rateLimitEnabled: boolean;
|
|
31
|
+
readonly generalLimiter: SlidingWindowLimiter;
|
|
32
|
+
readonly marketsLimiter: SlidingWindowLimiter;
|
|
22
33
|
readonly log?: GammaClientOpts["log"];
|
|
23
34
|
constructor(opts?: GammaClientOpts);
|
|
35
|
+
private acquireRateLimitPermit;
|
|
24
36
|
private isRetryable;
|
|
25
37
|
private request;
|
|
26
38
|
listMarkets(params: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gamma-client.d.ts","sourceRoot":"","sources":["../src/gamma-client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,4BAA4B,EAC5B,uBAAuB,EACvB,YAAY,EACZ,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,iBAAiB,EACjB,WAAW,EACX,UAAU,EACV,qBAAqB,EACrB,QAAQ,EACR,oBAAoB,EACpB,SAAS,EACV,MAAM,YAAY,CAAC;AAmBpB,MAAM,MAAM,eAAe,GAAG;IAC5B,4CAA4C;IAC5C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;IACvB,KAAK,CAAC,EAAE;QACN,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,GAAG,CAAC,EAAE,CACJ,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,EAC1C,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC7B,IAAI,CAAC;CACX,CAAC;AAEF,qBAAa,WAAW;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,OAAO,KAAK,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;IAChE,QAAQ,CAAC,GAAG,CAAC,EAAE,eAAe,CAAC,KAAK,CAAC,CAAC;gBAE1B,IAAI,GAAE,eAAoB;
|
|
1
|
+
{"version":3,"file":"gamma-client.d.ts","sourceRoot":"","sources":["../src/gamma-client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -19,5 +19,6 @@ export * from "./rate-limits.js";
|
|
|
19
19
|
export { parseDecimalToBigint } from "./utils/decimal.js";
|
|
20
20
|
export { twapFromHistory } from "./utils/twap.js";
|
|
21
21
|
export { probToE8, collateralPriceFromMarkets } from "./utils/pricing.js";
|
|
22
|
+
export { polymarketEventUrl } from "./utils/url.js";
|
|
22
23
|
export * from "./bridge-client.js";
|
|
23
24
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,mBAAmB,CAAC;AAMlC,cAAc,gBAAgB,CAAC;AAM/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAM9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AAMjC,cAAc,sBAAsB,CAAC;AAMrC,cAAc,UAAU,CAAC;AAMzB,cAAc,kBAAkB,CAAC;AAMjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,mBAAmB,CAAC;AAMlC,cAAc,gBAAgB,CAAC;AAM/B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAM9B,cAAc,yBAAyB,CAAC;AACxC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AAMjC,cAAc,sBAAsB,CAAC;AAMrC,cAAc,UAAU,CAAC;AAMzB,cAAc,kBAAkB,CAAC;AAMjC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAMpD,cAAc,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -825,6 +825,8 @@ var KEEPER_CLOB_DELETE_ORDER_MAX_PER_10S = 15;
|
|
|
825
825
|
var KEEPER_CLOB_DELETE_ORDER_MAX_PER_10MIN = 150;
|
|
826
826
|
var KEEPER_CLOB_CANCEL_ALL_MAX_PER_10S = 3;
|
|
827
827
|
var KEEPER_CLOB_CANCEL_ALL_MAX_PER_10MIN = 30;
|
|
828
|
+
var KEEPER_GAMMA_GENERAL_MAX_PER_10S = 800;
|
|
829
|
+
var KEEPER_GAMMA_MARKETS_MAX_PER_10S = 120;
|
|
828
830
|
|
|
829
831
|
class SlidingWindowLimiter {
|
|
830
832
|
maxRequests;
|
|
@@ -1372,6 +1374,9 @@ class GammaClient {
|
|
|
1372
1374
|
maxAttempts;
|
|
1373
1375
|
fetchFn;
|
|
1374
1376
|
retry;
|
|
1377
|
+
rateLimitEnabled;
|
|
1378
|
+
generalLimiter;
|
|
1379
|
+
marketsLimiter;
|
|
1375
1380
|
log;
|
|
1376
1381
|
constructor(opts = {}) {
|
|
1377
1382
|
this.baseUrl = opts.baseUrl ?? POLYMARKET_ENDPOINTS.gammaBaseUrl;
|
|
@@ -1384,8 +1389,26 @@ class GammaClient {
|
|
|
1384
1389
|
multiplier: opts.retry?.multiplier ?? 2,
|
|
1385
1390
|
jitterFactor: opts.retry?.jitterFactor ?? 0.3
|
|
1386
1391
|
};
|
|
1392
|
+
const rateLimitWindowMs = Math.max(100, opts.rateLimit?.windowMs ?? 1e4);
|
|
1393
|
+
this.rateLimitEnabled = opts.rateLimit?.enabled ?? true;
|
|
1394
|
+
this.generalLimiter = new SlidingWindowLimiter(Math.max(1, Math.floor(opts.rateLimit?.generalMaxPerWindow ?? KEEPER_GAMMA_GENERAL_MAX_PER_10S)), rateLimitWindowMs, opts.rateLimit?.now ?? Date.now);
|
|
1395
|
+
this.marketsLimiter = new SlidingWindowLimiter(Math.max(1, Math.floor(opts.rateLimit?.marketsMaxPerWindow ?? KEEPER_GAMMA_MARKETS_MAX_PER_10S)), rateLimitWindowMs, opts.rateLimit?.now ?? Date.now);
|
|
1387
1396
|
this.log = opts.log;
|
|
1388
1397
|
}
|
|
1398
|
+
async acquireRateLimitPermit(url) {
|
|
1399
|
+
if (!this.rateLimitEnabled)
|
|
1400
|
+
return;
|
|
1401
|
+
await this.generalLimiter.acquire();
|
|
1402
|
+
let pathname = "";
|
|
1403
|
+
try {
|
|
1404
|
+
pathname = new URL(url).pathname;
|
|
1405
|
+
} catch {
|
|
1406
|
+
return;
|
|
1407
|
+
}
|
|
1408
|
+
if (pathname.startsWith("/markets")) {
|
|
1409
|
+
await this.marketsLimiter.acquire();
|
|
1410
|
+
}
|
|
1411
|
+
}
|
|
1389
1412
|
isRetryable(err) {
|
|
1390
1413
|
if (err instanceof SyntaxError)
|
|
1391
1414
|
return true;
|
|
@@ -1393,7 +1416,10 @@ class GammaClient {
|
|
|
1393
1416
|
return /timeout|ETIMEDOUT|ECONNRESET|fetch failed|network|socket|aborted|AbortError|429|500|502|503|504/i.test(msg);
|
|
1394
1417
|
}
|
|
1395
1418
|
async request(url) {
|
|
1396
|
-
return withRetry(async () =>
|
|
1419
|
+
return withRetry(async () => {
|
|
1420
|
+
await this.acquireRateLimitPermit(url);
|
|
1421
|
+
return fetchJson(url, { timeoutMs: this.timeoutMs, fetchFn: this.fetchFn });
|
|
1422
|
+
}, {
|
|
1397
1423
|
maxAttempts: this.maxAttempts,
|
|
1398
1424
|
baseBackoffMs: this.retry.baseBackoffMs,
|
|
1399
1425
|
maxBackoffMs: this.retry.maxBackoffMs,
|
|
@@ -1584,6 +1610,12 @@ function chunk(xs, size) {
|
|
|
1584
1610
|
out.push(xs.slice(i, i + size));
|
|
1585
1611
|
return out;
|
|
1586
1612
|
}
|
|
1613
|
+
// src/utils/url.ts
|
|
1614
|
+
var POLYMARKET_BASE = "https://polymarket.com/event";
|
|
1615
|
+
function polymarketEventUrl(slug) {
|
|
1616
|
+
return `${POLYMARKET_BASE}/${encodeURIComponent(slug)}`;
|
|
1617
|
+
}
|
|
1618
|
+
|
|
1587
1619
|
// src/resolver.ts
|
|
1588
1620
|
function parseJsonStringArray(field, value) {
|
|
1589
1621
|
const parsed = JSON.parse(value);
|
|
@@ -1606,10 +1638,13 @@ function resolveBinaryMarketFromGammaMarket(m) {
|
|
|
1606
1638
|
if (yesIdx === -1 || noIdx === -1) {
|
|
1607
1639
|
throw new Error(`Gamma market ${m.id} outcomes are not Yes/No: ${outcomes.join(",")}`);
|
|
1608
1640
|
}
|
|
1641
|
+
const eventSlug = m.events?.[0]?.slug;
|
|
1609
1642
|
return {
|
|
1610
1643
|
conditionId: m.conditionId,
|
|
1611
1644
|
gammaMarketId: m.id,
|
|
1612
1645
|
slug: m.slug,
|
|
1646
|
+
eventSlug,
|
|
1647
|
+
url: polymarketEventUrl(eventSlug ?? m.slug),
|
|
1613
1648
|
yesTokenId: tokenIds[yesIdx] ?? (() => {
|
|
1614
1649
|
throw new Error(`Missing YES tokenId for market ${m.id}`);
|
|
1615
1650
|
})(),
|
|
@@ -1623,24 +1658,37 @@ function resolveBinaryMarketFromGammaMarket(m) {
|
|
|
1623
1658
|
async function resolveBinaryMarketsByConditionId(conditionIds, opts = {}) {
|
|
1624
1659
|
const gamma = opts.gamma ?? new GammaClient;
|
|
1625
1660
|
const chunkSize = opts.chunkSize ?? 50;
|
|
1661
|
+
const maxConcurrentRequests = Math.max(1, Math.floor(opts.maxConcurrentRequests ?? 3));
|
|
1626
1662
|
const out = new Map;
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
continue;
|
|
1637
|
-
}
|
|
1638
|
-
for (const m of markets) {
|
|
1663
|
+
const groups = chunk(conditionIds, chunkSize);
|
|
1664
|
+
let nextGroupIdx = 0;
|
|
1665
|
+
const workers = Array.from({ length: Math.min(maxConcurrentRequests, groups.length) }, async () => {
|
|
1666
|
+
while (true) {
|
|
1667
|
+
const idx = nextGroupIdx++;
|
|
1668
|
+
const group = groups[idx];
|
|
1669
|
+
if (!group)
|
|
1670
|
+
return;
|
|
1671
|
+
let markets = [];
|
|
1639
1672
|
try {
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1673
|
+
markets = await gamma.getMarketsByConditionIds(group);
|
|
1674
|
+
} catch (err) {
|
|
1675
|
+
opts.log?.("warn", "Gamma getMarketsByConditionIds failed", {
|
|
1676
|
+
chunkSize: group.length,
|
|
1677
|
+
chunkIndex: idx,
|
|
1678
|
+
err: String(err)
|
|
1679
|
+
});
|
|
1680
|
+
continue;
|
|
1681
|
+
}
|
|
1682
|
+
for (const m of markets) {
|
|
1683
|
+
try {
|
|
1684
|
+
const r = resolveBinaryMarketFromGammaMarket(m);
|
|
1685
|
+
out.set(r.conditionId, r);
|
|
1686
|
+
} catch {}
|
|
1687
|
+
}
|
|
1643
1688
|
}
|
|
1689
|
+
});
|
|
1690
|
+
for (const worker of workers) {
|
|
1691
|
+
await worker;
|
|
1644
1692
|
}
|
|
1645
1693
|
return out;
|
|
1646
1694
|
}
|
|
@@ -3283,6 +3331,7 @@ export {
|
|
|
3283
3331
|
resetClobClient,
|
|
3284
3332
|
probToE8,
|
|
3285
3333
|
priceValid,
|
|
3334
|
+
polymarketEventUrl,
|
|
3286
3335
|
parseRetryAfter,
|
|
3287
3336
|
parseDecimalToBigint,
|
|
3288
3337
|
isValidPrice,
|
|
@@ -3340,6 +3389,8 @@ export {
|
|
|
3340
3389
|
POLYMARKET_GENERAL_LIMIT_PER_10S,
|
|
3341
3390
|
POLYMARKET_ENDPOINTS,
|
|
3342
3391
|
OrderValidationError,
|
|
3392
|
+
KEEPER_GAMMA_MARKETS_MAX_PER_10S,
|
|
3393
|
+
KEEPER_GAMMA_GENERAL_MAX_PER_10S,
|
|
3343
3394
|
KEEPER_CLOB_READ_RPS,
|
|
3344
3395
|
KEEPER_CLOB_READ_BURST,
|
|
3345
3396
|
KEEPER_CLOB_POST_ORDER_MAX_PER_10S,
|
package/dist/rate-limits.d.ts
CHANGED
|
@@ -69,6 +69,10 @@ export declare const KEEPER_CLOB_DELETE_ORDER_MAX_PER_10MIN = 150;
|
|
|
69
69
|
/** Internal budget: DELETE /cancel-all. */
|
|
70
70
|
export declare const KEEPER_CLOB_CANCEL_ALL_MAX_PER_10S = 3;
|
|
71
71
|
export declare const KEEPER_CLOB_CANCEL_ALL_MAX_PER_10MIN = 30;
|
|
72
|
+
/** Internal budget: Gamma API general requests per 10s. */
|
|
73
|
+
export declare const KEEPER_GAMMA_GENERAL_MAX_PER_10S = 800;
|
|
74
|
+
/** Internal budget: Gamma /markets requests per 10s. */
|
|
75
|
+
export declare const KEEPER_GAMMA_MARKETS_MAX_PER_10S = 120;
|
|
72
76
|
/**
|
|
73
77
|
* Lightweight sliding-window rate limiter.
|
|
74
78
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rate-limits.d.ts","sourceRoot":"","sources":["../src/rate-limits.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAMH,+CAA+C;AAC/C,eAAO,MAAM,gCAAgC,QAAS,CAAC;AAIvD,eAAO,MAAM,0BAA0B,OAAQ,CAAC;AAChD,eAAO,MAAM,uBAAuB,OAAQ,CAAC;AAC7C,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAC5C,eAAO,MAAM,wBAAwB,OAAQ,CAAC;AAC9C,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAC7C,eAAO,MAAM,2BAA2B,OAAQ,CAAC;AACjD,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAChD,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAChD,eAAO,MAAM,gCAAgC,OAAQ,CAAC;AACtD,eAAO,MAAM,wCAAwC,MAAM,CAAC;AAC5D,eAAO,MAAM,2CAA2C,KAAK,CAAC;AAI9D,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAC7C,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAClD,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAClD,eAAO,MAAM,gCAAgC,MAAM,CAAC;AAIpD,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAI/C,eAAO,MAAM,6BAA6B,OAAQ,CAAC;AACnD,eAAO,MAAM,mCAAmC,QAAS,CAAC;AAE1D,eAAO,MAAM,+BAA+B,OAAQ,CAAC;AACrD,eAAO,MAAM,qCAAqC,QAAS,CAAC;AAE5D,eAAO,MAAM,8BAA8B,OAAQ,CAAC;AACpD,eAAO,MAAM,oCAAoC,QAAS,CAAC;AAE3D,eAAO,MAAM,gCAAgC,OAAQ,CAAC;AACtD,eAAO,MAAM,sCAAsC,QAAS,CAAC;AAE7D,eAAO,MAAM,6BAA6B,MAAM,CAAC;AACjD,eAAO,MAAM,mCAAmC,OAAQ,CAAC;AAEzD,eAAO,MAAM,uCAAuC,OAAQ,CAAC;AAC7D,eAAO,MAAM,6CAA6C,OAAQ,CAAC;AAInE,eAAO,MAAM,8BAA8B,OAAQ,CAAC;AACpD,eAAO,MAAM,6BAA6B,MAAM,CAAC;AACjD,eAAO,MAAM,gCAAgC,MAAM,CAAC;AACpD,eAAO,MAAM,uCAAuC,MAAM,CAAC;AAI3D,eAAO,MAAM,2BAA2B,OAAQ,CAAC;AACjD,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAC9C,eAAO,MAAM,2BAA2B,MAAM,CAAC;AAC/C,eAAO,MAAM,kCAAkC,MAAM,CAAC;AACtD,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAChD,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAC5C,eAAO,MAAM,0BAA0B,MAAM,CAAC;AAI9C,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAChD,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAW1C,sEAAsE;AACtE,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,sBAAsB,KAAK,CAAC;AAEzC,2EAA2E;AAC3E,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAC5C,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAE9C,yEAAyE;AACzE,eAAO,MAAM,kCAAkC,KAAK,CAAC;AACrD,eAAO,MAAM,oCAAoC,MAAM,CAAC;AAExD,8EAA8E;AAC9E,eAAO,MAAM,oCAAoC,KAAK,CAAC;AACvD,eAAO,MAAM,sCAAsC,MAAM,CAAC;AAE1D,2CAA2C;AAC3C,eAAO,MAAM,kCAAkC,IAAI,CAAC;AACpD,eAAO,MAAM,oCAAoC,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"rate-limits.d.ts","sourceRoot":"","sources":["../src/rate-limits.ts"],"names":[],"mappings":"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"}
|
package/dist/resolver.d.ts
CHANGED
|
@@ -3,7 +3,17 @@ import type { GammaMarket } from "./types.js";
|
|
|
3
3
|
export type ResolvedBinaryMarket = {
|
|
4
4
|
conditionId: `0x${string}`;
|
|
5
5
|
gammaMarketId: string;
|
|
6
|
+
/** Market-level slug from Gamma API. */
|
|
6
7
|
slug: string;
|
|
8
|
+
/** Parent event slug (when the Gamma response includes nested events). */
|
|
9
|
+
eventSlug?: string;
|
|
10
|
+
/**
|
|
11
|
+
* Best-effort Polymarket UI link.
|
|
12
|
+
* Constructed as `https://polymarket.com/event/<eventSlug ?? slug>`.
|
|
13
|
+
* Uses the event slug when available (correct for Polymarket routing),
|
|
14
|
+
* falls back to the market slug otherwise.
|
|
15
|
+
*/
|
|
16
|
+
url: string;
|
|
7
17
|
yesTokenId: string;
|
|
8
18
|
noTokenId: string;
|
|
9
19
|
endDateIso?: string;
|
|
@@ -14,6 +24,8 @@ export type ConditionResolverOpts = {
|
|
|
14
24
|
gamma?: GammaClient;
|
|
15
25
|
/** How many conditionIds per Gamma request. */
|
|
16
26
|
chunkSize?: number;
|
|
27
|
+
/** Max number of in-flight Gamma chunk requests. */
|
|
28
|
+
maxConcurrentRequests?: number;
|
|
17
29
|
log?: (level: "debug" | "info" | "warn" | "error", msg: string, fields?: Record<string, unknown>) => void;
|
|
18
30
|
};
|
|
19
31
|
/**
|
package/dist/resolver.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAS,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAS,MAAM,mBAAmB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAG9C,MAAM,MAAM,oBAAoB,GAAG;IACjC,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,wCAAwC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,0EAA0E;IAC1E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAUF,wBAAgB,kCAAkC,CAAC,CAAC,EAAE,WAAW,GAAG,oBAAoB,CAsCvF;AAED,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,GAAG,CAAC,EAAE,CACJ,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,EAC1C,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC7B,IAAI,CAAC;CACX,CAAC;AAEF;;;;;GAKG;AACH,wBAAsB,iCAAiC,CACrD,YAAY,EAAE,KAAK,MAAM,EAAE,EAAE,EAC7B,IAAI,GAAE,qBAA0B,GAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,EAAE,EAAE,oBAAoB,CAAC,CAAC,CA6CnD"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Construct a full Polymarket event URL from a Gamma slug.
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```ts
|
|
6
|
+
* polymarketEventUrl("will-bitcoin-hit-1m-before-gta-vi")
|
|
7
|
+
* // => "https://polymarket.com/event/will-bitcoin-hit-1m-before-gta-vi"
|
|
8
|
+
* ```
|
|
9
|
+
*/
|
|
10
|
+
export declare function polymarketEventUrl(slug: string): string;
|
|
11
|
+
//# sourceMappingURL=url.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../../src/utils/url.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD"}
|