@vesper85/strategy-sdk 0.1.16 → 0.1.17

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.
@@ -1,6 +1,6 @@
1
- import { GammaMarket, type Event as GammaEvent, type Tag, type Team, type Sport, type Series, type Comment as GammaComment, type SearchResults, type PaginatedResponse, type MarketFilters, type EventFilters, type EventPaginationFilters, type PaginationParams, type SearchParams } from 'polymarket-gamma';
1
+ import { GammaMarket, type Event as GammaEvent, type Tag, type Team, type Sport, type Series, type Comment as GammaComment, type SearchResults, type PaginatedResponse, type MarketFilters, type EventPaginationFilters, type PaginationParams, type SearchParams } from 'polymarket-gamma';
2
2
  import { ethers } from 'ethers';
3
- import type { PolymarketAPI, PolymarketClientOptions, PolymarketLimitOrderParams, PolymarketMarketOrderParams, PolymarketOrderResponse, PolymarketOpenOrder, PolymarketCancelResponse, PolymarketOrderBook, PolymarketApprovalResult, SignerAPI } from '../types/osiris';
3
+ import type { PolymarketAPI, PolymarketClientOptions, PolymarketLimitOrderParams, PolymarketMarketOrderParams, PolymarketOrderResponse, PolymarketOpenOrder, PolymarketCancelResponse, PolymarketOrderBook, PolymarketApprovalResult, SignerAPI, ExtendedEventFilters } from '../types/osiris';
4
4
  import type { Logger } from '../utils/logger';
5
5
  export declare class PolymarketClient implements PolymarketAPI {
6
6
  private logger;
@@ -111,7 +111,12 @@ export declare class PolymarketClient implements PolymarketAPI {
111
111
  }): Promise<GammaMarket[]>;
112
112
  getMarketTags(marketId: string): Promise<Tag[]>;
113
113
  getEvent(idOrSlug: string): Promise<GammaEvent>;
114
- getEvents(filters?: EventFilters): Promise<GammaEvent[]>;
114
+ /**
115
+ * Get events with extended filters
116
+ * Makes a direct API call to support all filter parameters from the Polymarket API
117
+ * @see https://docs.polymarket.com/api-reference/events/list-events
118
+ */
119
+ getEvents(filters?: ExtendedEventFilters): Promise<GammaEvent[]>;
115
120
  getEventTags(eventId: string): Promise<Tag[]>;
116
121
  getEventsPaginated(filters?: EventPaginationFilters): Promise<PaginatedResponse<GammaEvent>>;
117
122
  getTags(params?: PaginationParams): Promise<Tag[]>;
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export type { CodeStrategy, } from './types/strategy';
2
- export type { OsirisContext, OsirisState, PolymarketAPI, HyperliquidAPI, TechnicalAnalysisAPI, SignerAPI, PolymarketOrderSide, PolymarketLimitOrderParams, PolymarketMarketOrderParams, PolymarketOrderResponse, PolymarketOpenOrder, PolymarketCancelResponse, PolymarketOrderBook, PolymarketOrderBookEntry, PolymarketApprovalResult, PolymarketClientOptions, } from './types/osiris';
2
+ export type { OsirisContext, OsirisState, PolymarketAPI, HyperliquidAPI, TechnicalAnalysisAPI, SignerAPI, PolymarketOrderSide, PolymarketLimitOrderParams, PolymarketMarketOrderParams, PolymarketOrderResponse, PolymarketOpenOrder, PolymarketCancelResponse, PolymarketOrderBook, PolymarketOrderBookEntry, PolymarketApprovalResult, PolymarketClientOptions, ExtendedEventFilters, } from './types/osiris';
3
3
  export type { EventType, EventSourceType, EventSubscription, EventConditions, StrategyEvent, EventData, EventSourceSubscribeMessage, EventSourceUnsubscribeMessage, EventSourceMessage, MarketSubscription, WalletSubscription, OpportunitySubscription, CustomSubscription, ClobMarketSubscription, ClobUserSubscription, ActivitySubscription, CommentsSubscription, CryptoPricesSubscription, RfqSubscription, } from './types/event-types';
4
4
  export { isMarketSubscription, isWalletSubscription, isOpportunitySubscription, isCustomSubscription, isClobMarketSubscription, isClobUserSubscription, isActivitySubscription, isCommentsSubscription, isCryptoPricesSubscription, isRfqSubscription, isPolymarketSubscription, isOsirisSubscription, } from './types/event-types';
5
5
  export { PolymarketClient, } from './clients/polymarket-client';
package/dist/index.js CHANGED
@@ -474,6 +474,12 @@ var PolymarketClient = class {
474
474
  );
475
475
  this.logger.info("Deriving API credentials...");
476
476
  const apiCreds = await tempClient.createOrDeriveApiKey();
477
+ if (!apiCreds || !apiCreds.key || !apiCreds.secret) {
478
+ throw new Error(
479
+ "Failed to obtain API credentials from Polymarket. Please ensure your wallet is registered at polymarket.com and has accepted the Terms of Service."
480
+ );
481
+ }
482
+ this.logger.debug("API credentials obtained successfully");
477
483
  const signatureType = 0;
478
484
  this.clobClient = new ClobClient(
479
485
  this.options.clobHost,
@@ -1270,7 +1276,7 @@ var PolymarketClient = class {
1270
1276
  return Number(data.price);
1271
1277
  } catch (error) {
1272
1278
  this.logger.error(`Error fetching price for ${clobTokenId}`, error);
1273
- return 0;
1279
+ throw error;
1274
1280
  }
1275
1281
  }
1276
1282
  async getAskPrice(clobTokenId) {
@@ -1365,8 +1371,84 @@ var PolymarketClient = class {
1365
1371
  async getEvent(idOrSlug) {
1366
1372
  return this.gammaClient.getEvent(idOrSlug);
1367
1373
  }
1374
+ /**
1375
+ * Get events with extended filters
1376
+ * Makes a direct API call to support all filter parameters from the Polymarket API
1377
+ * @see https://docs.polymarket.com/api-reference/events/list-events
1378
+ */
1368
1379
  async getEvents(filters) {
1369
- return this.gammaClient.getEvents(filters);
1380
+ if (!filters) {
1381
+ return this.gammaClient.getEvents();
1382
+ }
1383
+ const extendedKeys = [
1384
+ "exclude_tag_id",
1385
+ "tag_id",
1386
+ "tag_slug",
1387
+ "related_tags",
1388
+ "include_chat",
1389
+ "include_template",
1390
+ "recurrence",
1391
+ "liquidity_min",
1392
+ "liquidity_max",
1393
+ "volume_min",
1394
+ "volume_max",
1395
+ "start_date_min",
1396
+ "start_date_max",
1397
+ "end_date_min",
1398
+ "end_date_max",
1399
+ "cyom"
1400
+ ];
1401
+ const hasExtendedFilters = extendedKeys.some((key) => filters[key] !== void 0);
1402
+ if (!hasExtendedFilters) {
1403
+ return this.gammaClient.getEvents(filters);
1404
+ }
1405
+ const baseUrl = "https://gamma-api.polymarket.com/events";
1406
+ const params = new URLSearchParams();
1407
+ const appendParam = (key, value) => {
1408
+ if (value === void 0) return;
1409
+ if (Array.isArray(value)) {
1410
+ value.forEach((v) => params.append(key, v.toString()));
1411
+ } else {
1412
+ params.append(key, value.toString());
1413
+ }
1414
+ };
1415
+ if (filters.limit !== void 0) params.append("limit", filters.limit.toString());
1416
+ if (filters.offset !== void 0) params.append("offset", filters.offset.toString());
1417
+ if (filters.order !== void 0) params.append("order", filters.order);
1418
+ if (filters.ascending !== void 0) params.append("ascending", filters.ascending.toString());
1419
+ appendParam("id", filters.id);
1420
+ appendParam("tag_id", filters.tag_id);
1421
+ appendParam("exclude_tag_id", filters.exclude_tag_id);
1422
+ if (filters.slug !== void 0) params.append("slug", filters.slug);
1423
+ if (filters.tag_slug !== void 0) params.append("tag_slug", filters.tag_slug);
1424
+ if (filters.related_tags !== void 0) params.append("related_tags", filters.related_tags.toString());
1425
+ if (filters.active !== void 0) params.append("active", filters.active.toString());
1426
+ if (filters.archived !== void 0) params.append("archived", filters.archived.toString());
1427
+ if (filters.featured !== void 0) params.append("featured", filters.featured.toString());
1428
+ if (filters.cyom !== void 0) params.append("cyom", filters.cyom.toString());
1429
+ if (filters.include_chat !== void 0) params.append("include_chat", filters.include_chat.toString());
1430
+ if (filters.include_template !== void 0) params.append("include_template", filters.include_template.toString());
1431
+ if (filters.recurrence !== void 0) params.append("recurrence", filters.recurrence);
1432
+ if (filters.closed !== void 0) params.append("closed", filters.closed.toString());
1433
+ if (filters.liquidity_min !== void 0) params.append("liquidity_min", filters.liquidity_min.toString());
1434
+ if (filters.liquidity_max !== void 0) params.append("liquidity_max", filters.liquidity_max.toString());
1435
+ if (filters.volume_min !== void 0) params.append("volume_min", filters.volume_min.toString());
1436
+ if (filters.volume_max !== void 0) params.append("volume_max", filters.volume_max.toString());
1437
+ if (filters.start_date_min !== void 0) params.append("start_date_min", filters.start_date_min);
1438
+ if (filters.start_date_max !== void 0) params.append("start_date_max", filters.start_date_max);
1439
+ if (filters.end_date_min !== void 0) params.append("end_date_min", filters.end_date_min);
1440
+ if (filters.end_date_max !== void 0) params.append("end_date_max", filters.end_date_max);
1441
+ const url = `${baseUrl}?${params.toString()}`;
1442
+ try {
1443
+ const response = await fetch(url);
1444
+ if (!response.ok) {
1445
+ throw new Error(`Failed to fetch events: ${response.statusText}`);
1446
+ }
1447
+ return await response.json();
1448
+ } catch (error) {
1449
+ this.logger.error("Error fetching events with extended filters", error);
1450
+ throw error;
1451
+ }
1370
1452
  }
1371
1453
  async getEventTags(eventId) {
1372
1454
  return this.gammaClient.getEventTags(eventId);
@@ -1,11 +1,69 @@
1
1
  import type { OHLCV, TAParams } from '@vesper85/technical-indicators';
2
2
  import type { BigNumber } from 'ethers';
3
- import type { Event as GammaEvent, Tag, Team, Sport, Series, Comment as GammaComment, SearchResults, PaginatedResponse, MarketFilters, EventFilters, EventPaginationFilters, PaginationParams, SearchParams, GammaMarket } from 'polymarket-gamma';
3
+ import type { Event as GammaEvent, Tag, Team, Sport, Series, Comment as GammaComment, SearchResults, PaginatedResponse, MarketFilters, EventPaginationFilters, PaginationParams, SearchParams, GammaMarket } from 'polymarket-gamma';
4
4
  import type { ClearinghouseState, SpotMeta, SpotClearinghouseState, SpotMetaAndAssetCtxs, Meta, MetaAndAssetCtxs, UserFunding, UserNonFundingLedgerUpdates, FundingHistory, PredictedFundings, PerpsAtOpenInterestCap, PerpDexLimits, AllMids, UserOpenOrders, FrontendOpenOrders, UserFills, UserRateLimit, OrderStatus, L2Book, CandleSnapshot, HistoricalOrder, TwapSliceFill, SubAccount, VaultDetails, VaultEquity, UserRole, Delegation, DelegatorSummary, DelegatorHistoryEntry, DelegatorReward, ValidatorSummary, VaultSummary, UserFees, PortfolioPeriods, PreTransferCheck, Referral, ExtraAgent, LegalCheck, TwapHistory, MultiSigSigners, BuilderFeeApproval, UserOrderHistory } from 'hyperliquid';
5
5
  export interface OsirisState {
6
6
  get(key: string): Promise<any>;
7
7
  set(key: string, value: any): Promise<void>;
8
8
  }
9
+ /**
10
+ * Extended filters for Polymarket events API
11
+ * Includes all query parameters from https://docs.polymarket.com/api-reference/events/list-events
12
+ */
13
+ export interface ExtendedEventFilters {
14
+ /** Maximum number of results to return */
15
+ limit?: number;
16
+ /** Number of results to skip */
17
+ offset?: number;
18
+ /** Comma-separated list of fields to order by */
19
+ order?: string;
20
+ /** Sort in ascending order */
21
+ ascending?: boolean;
22
+ /** Filter by event ID(s) - can be single ID or array */
23
+ id?: string | string[];
24
+ /** Filter by tag ID(s) - can be single ID or array of IDs */
25
+ tag_id?: number | number[];
26
+ /** Exclude events with tag ID(s) - can be single ID or array of IDs */
27
+ exclude_tag_id?: number | number[];
28
+ /** Filter by event slug */
29
+ slug?: string;
30
+ /** Filter by tag slug */
31
+ tag_slug?: string;
32
+ /** Include related tags */
33
+ related_tags?: boolean;
34
+ /** Filter by active status */
35
+ active?: boolean;
36
+ /** Filter by archived status */
37
+ archived?: boolean;
38
+ /** Filter by featured status */
39
+ featured?: boolean;
40
+ /** Filter by CYOM (Create Your Own Market) status */
41
+ cyom?: boolean;
42
+ /** Include chat data */
43
+ include_chat?: boolean;
44
+ /** Include template data */
45
+ include_template?: boolean;
46
+ /** Filter by recurrence */
47
+ recurrence?: string;
48
+ /** Filter by closed status */
49
+ closed?: boolean;
50
+ /** Minimum liquidity filter */
51
+ liquidity_min?: number;
52
+ /** Maximum liquidity filter */
53
+ liquidity_max?: number;
54
+ /** Minimum volume filter */
55
+ volume_min?: number;
56
+ /** Maximum volume filter */
57
+ volume_max?: number;
58
+ /** Minimum start date (ISO 8601 format) */
59
+ start_date_min?: string;
60
+ /** Maximum start date (ISO 8601 format) */
61
+ start_date_max?: string;
62
+ /** Minimum end date (ISO 8601 format) */
63
+ end_date_min?: string;
64
+ /** Maximum end date (ISO 8601 format) */
65
+ end_date_max?: string;
66
+ }
9
67
  /**
10
68
  * Order side for Polymarket trades
11
69
  */
@@ -174,7 +232,12 @@ export interface PolymarketAPI {
174
232
  }): Promise<GammaMarket[]>;
175
233
  getMarketTags(marketId: string): Promise<Tag[]>;
176
234
  getEvent(idOrSlug: string): Promise<GammaEvent>;
177
- getEvents(filters?: EventFilters): Promise<GammaEvent[]>;
235
+ /**
236
+ * Get events with optional filters
237
+ * @param filters - Extended event filters including exclude_tag_id, liquidity_min, volume_min, date filters, etc.
238
+ * @see https://docs.polymarket.com/api-reference/events/list-events
239
+ */
240
+ getEvents(filters?: ExtendedEventFilters): Promise<GammaEvent[]>;
178
241
  getEventTags(eventId: string): Promise<Tag[]>;
179
242
  getEventsPaginated(filters?: EventPaginationFilters): Promise<PaginatedResponse<GammaEvent>>;
180
243
  getTags(params?: PaginationParams): Promise<Tag[]>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vesper85/strategy-sdk",
3
- "version": "0.1.16",
3
+ "version": "0.1.17",
4
4
  "type": "module",
5
5
  "description": "SDK for writing and running trading strategies with Polymarket and Hyperliquid integrations",
6
6
  "keywords": [