@vesper85/strategy-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 +22 -0
- package/README.md +448 -0
- package/dist/clients/hyperliquid-client.d.ts +68 -0
- package/dist/clients/polymarket-client.d.ts +157 -0
- package/dist/context/osiris-context.d.ts +14 -0
- package/dist/engine/event-runner.d.ts +129 -0
- package/dist/engine/strategy-runner.d.ts +65 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +2195 -0
- package/dist/signer/index.d.ts +54 -0
- package/dist/signer/osiris-signer.d.ts +29 -0
- package/dist/signer/privatekey-signer.d.ts +41 -0
- package/dist/signer/types.d.ts +62 -0
- package/dist/state/memory-state.d.ts +17 -0
- package/dist/state/redis-state.d.ts +20 -0
- package/dist/types/event-types.d.ts +102 -0
- package/dist/types/osiris.d.ts +414 -0
- package/dist/types/strategy.d.ts +35 -0
- package/dist/utils/logger.d.ts +15 -0
- package/package.json +76 -0
|
@@ -0,0 +1,414 @@
|
|
|
1
|
+
import type { OHLCV, TAParams } from "@vesper85/technical-indicators";
|
|
2
|
+
import type { GammaMarket, Event as GammaEvent, Tag, Team, Sport, Series, Comment as GammaComment, SearchResults, PaginatedResponse, MarketFilters, EventFilters, EventPaginationFilters, PaginationParams, SearchParams } from "polymarket-gamma";
|
|
3
|
+
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";
|
|
4
|
+
export interface OsirisState {
|
|
5
|
+
get(key: string): Promise<any>;
|
|
6
|
+
set(key: string, value: any): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Order side for Polymarket trades
|
|
10
|
+
*/
|
|
11
|
+
export type PolymarketOrderSide = 'BUY' | 'SELL';
|
|
12
|
+
/**
|
|
13
|
+
* Parameters for creating a limit order
|
|
14
|
+
*/
|
|
15
|
+
export interface PolymarketLimitOrderParams {
|
|
16
|
+
/** Token ID of the outcome token */
|
|
17
|
+
tokenId: string;
|
|
18
|
+
/** Price per share (0-1 range) */
|
|
19
|
+
price: number;
|
|
20
|
+
/** Order side */
|
|
21
|
+
side: PolymarketOrderSide;
|
|
22
|
+
/** Number of shares */
|
|
23
|
+
size: number;
|
|
24
|
+
/** Fee rate in basis points (optional, default 0) */
|
|
25
|
+
feeRateBps?: string;
|
|
26
|
+
/** Time in force (optional) */
|
|
27
|
+
expiration?: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Parameters for creating a market order
|
|
31
|
+
*/
|
|
32
|
+
export interface PolymarketMarketOrderParams {
|
|
33
|
+
/** Token ID of the outcome token */
|
|
34
|
+
tokenId: string;
|
|
35
|
+
/** Amount in USDC to spend (for BUY) or shares to sell (for SELL) */
|
|
36
|
+
amount: number;
|
|
37
|
+
/** Order side */
|
|
38
|
+
side: PolymarketOrderSide;
|
|
39
|
+
/** Slippage tolerance as a decimal (e.g., 0.05 for 5%) */
|
|
40
|
+
slippageTolerance?: number;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Response from order operations
|
|
44
|
+
*/
|
|
45
|
+
export interface PolymarketOrderResponse {
|
|
46
|
+
success: boolean;
|
|
47
|
+
/** Order ID if successful */
|
|
48
|
+
orderId?: string;
|
|
49
|
+
/** Transaction hash if applicable */
|
|
50
|
+
transactionHash?: string;
|
|
51
|
+
/** Error message if failed */
|
|
52
|
+
errorMsg?: string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Open order information
|
|
56
|
+
*/
|
|
57
|
+
export interface PolymarketOpenOrder {
|
|
58
|
+
id: string;
|
|
59
|
+
market: string;
|
|
60
|
+
asset_id: string;
|
|
61
|
+
side: string;
|
|
62
|
+
original_size: string;
|
|
63
|
+
size_matched: string;
|
|
64
|
+
price: string;
|
|
65
|
+
outcome: string;
|
|
66
|
+
owner: string;
|
|
67
|
+
timestamp: number;
|
|
68
|
+
expiration: number;
|
|
69
|
+
order_type: string;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Response from cancel operations
|
|
73
|
+
*/
|
|
74
|
+
export interface PolymarketCancelResponse {
|
|
75
|
+
/** Successfully canceled order IDs */
|
|
76
|
+
canceled: string[];
|
|
77
|
+
/** Orders that couldn't be canceled with reasons */
|
|
78
|
+
not_canceled: Record<string, string>;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Order book entry
|
|
82
|
+
*/
|
|
83
|
+
export interface PolymarketOrderBookEntry {
|
|
84
|
+
price: string;
|
|
85
|
+
size: string;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Order book structure
|
|
89
|
+
*/
|
|
90
|
+
export interface PolymarketOrderBook {
|
|
91
|
+
market: string;
|
|
92
|
+
asset_id: string;
|
|
93
|
+
bids: PolymarketOrderBookEntry[];
|
|
94
|
+
asks: PolymarketOrderBookEntry[];
|
|
95
|
+
hash: string;
|
|
96
|
+
timestamp: string;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Result from setting up approvals
|
|
100
|
+
*/
|
|
101
|
+
export interface PolymarketApprovalResult {
|
|
102
|
+
/** USDC approval transaction hash (if approval was needed) */
|
|
103
|
+
usdcApprovalTx?: string;
|
|
104
|
+
/** CTF approval transaction hash (if approval was needed) */
|
|
105
|
+
ctfApprovalTx?: string;
|
|
106
|
+
/** Whether USDC was already approved */
|
|
107
|
+
usdcWasAlreadyApproved: boolean;
|
|
108
|
+
/** Whether CTF was already approved */
|
|
109
|
+
ctfWasAlreadyApproved: boolean;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Options for Polymarket client
|
|
113
|
+
*
|
|
114
|
+
* When using OsirisSigner, orders are placed via MCP tools which require
|
|
115
|
+
* MCP-specific authentication tokens (separate from backend OAuth tokens).
|
|
116
|
+
*/
|
|
117
|
+
export interface PolymarketClientOptions {
|
|
118
|
+
/** Chain ID (default: 137 for Polygon mainnet) */
|
|
119
|
+
chainId?: number;
|
|
120
|
+
/** Auto-approve tokens before trades (default: false) */
|
|
121
|
+
autoApprove?: boolean;
|
|
122
|
+
/** CLOB API host (default: https://clob.polymarket.com) */
|
|
123
|
+
clobHost?: string;
|
|
124
|
+
/**
|
|
125
|
+
* MCP server URL for order placement via MCP tools
|
|
126
|
+
* Default: https://gateway.backend.osirislabs.xyz/@osiris/polymarket/mcp
|
|
127
|
+
*/
|
|
128
|
+
mcpUrl?: string;
|
|
129
|
+
/**
|
|
130
|
+
* MCP OAuth access token for authenticated MCP calls.
|
|
131
|
+
* IMPORTANT: This must be an MCP-specific token obtained through the Osiris Hub
|
|
132
|
+
* OAuth flow for MCP packages (via /hub/authorize endpoint with MCP scopes).
|
|
133
|
+
* This is NOT the same as the general backend access token.
|
|
134
|
+
* Required scopes: osiris:auth, osiris:auth:action
|
|
135
|
+
*/
|
|
136
|
+
mcpAccessToken?: string;
|
|
137
|
+
/**
|
|
138
|
+
* Flag to explicitly enable MCP mode for order placement.
|
|
139
|
+
* When true, orders are placed via MCP tools instead of direct CLOB client.
|
|
140
|
+
* Auto-detected based on signer type if not provided (enabled for OsirisSigner).
|
|
141
|
+
*/
|
|
142
|
+
useMcpForOrders?: boolean;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Technical Analysis API
|
|
146
|
+
* Provides methods for calculating technical indicators
|
|
147
|
+
*/
|
|
148
|
+
export interface TechnicalAnalysisAPI {
|
|
149
|
+
calculate(indicator: string, data: OHLCV[], params?: TAParams & {
|
|
150
|
+
component?: string;
|
|
151
|
+
}): number | number[];
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Polymarket-specific API
|
|
155
|
+
* Combines data, account, and execution methods for Polymarket markets
|
|
156
|
+
*/
|
|
157
|
+
export interface PolymarketAPI {
|
|
158
|
+
getPrice(ticker: string): Promise<number>;
|
|
159
|
+
getIndicator(ticker: string, indicator: string, params?: any): Promise<number>;
|
|
160
|
+
search(params: SearchParams): Promise<SearchResults>;
|
|
161
|
+
getMarket(idOrSlug: string): Promise<GammaMarket>;
|
|
162
|
+
getMarkets(filters?: MarketFilters & {
|
|
163
|
+
end_date_min?: string;
|
|
164
|
+
end_date_max?: string;
|
|
165
|
+
start_date_min?: string;
|
|
166
|
+
start_date_max?: string;
|
|
167
|
+
liquidity_num_min?: number;
|
|
168
|
+
liquidity_num_max?: number;
|
|
169
|
+
volume_num_min?: number;
|
|
170
|
+
volume_num_max?: number;
|
|
171
|
+
limit?: number;
|
|
172
|
+
offset?: number;
|
|
173
|
+
order?: string;
|
|
174
|
+
ascending?: boolean;
|
|
175
|
+
closed?: boolean;
|
|
176
|
+
}): Promise<GammaMarket[]>;
|
|
177
|
+
getMarketTags(marketId: string): Promise<Tag[]>;
|
|
178
|
+
getEvent(idOrSlug: string): Promise<GammaEvent>;
|
|
179
|
+
getEvents(filters?: EventFilters): Promise<GammaEvent[]>;
|
|
180
|
+
getEventTags(eventId: string): Promise<Tag[]>;
|
|
181
|
+
getEventsPaginated(filters?: EventPaginationFilters): Promise<PaginatedResponse<GammaEvent>>;
|
|
182
|
+
getTags(params?: PaginationParams): Promise<Tag[]>;
|
|
183
|
+
getTag(idOrSlug: string): Promise<Tag>;
|
|
184
|
+
getRelatedTags(idOrSlug: string): Promise<Tag[]>;
|
|
185
|
+
getRelatedTagsTags(idOrSlug: string): Promise<Tag[]>;
|
|
186
|
+
getTeams(params?: PaginationParams): Promise<Team[]>;
|
|
187
|
+
getSports(params?: PaginationParams): Promise<Sport[]>;
|
|
188
|
+
getSeries(params?: PaginationParams): Promise<Series[]>;
|
|
189
|
+
getSeriesById(seriesId: string): Promise<Series>;
|
|
190
|
+
getComments(params?: PaginationParams): Promise<GammaComment[]>;
|
|
191
|
+
getComment(commentId: string): Promise<GammaComment>;
|
|
192
|
+
getCommentsByUser(userAddress: string, params?: PaginationParams): Promise<GammaComment[]>;
|
|
193
|
+
getPositions(user: string, params?: any): Promise<any[]>;
|
|
194
|
+
getTrades(user: string, params?: any): Promise<any[]>;
|
|
195
|
+
getActivity(user: string, params?: any): Promise<any[]>;
|
|
196
|
+
getTopHolders(marketId: string): Promise<any[]>;
|
|
197
|
+
getPortfolioValue(user: string): Promise<number>;
|
|
198
|
+
getClosedPositions(user: string, params?: any): Promise<any[]>;
|
|
199
|
+
getTradedMarketsCount(user: string): Promise<number>;
|
|
200
|
+
getOpenInterest(marketId: string): Promise<number>;
|
|
201
|
+
getPosition(ticker: string): Promise<any | null>;
|
|
202
|
+
/**
|
|
203
|
+
* Initialize the CLOB trading client
|
|
204
|
+
* This generates API credentials and sets up the client for trading
|
|
205
|
+
* Must be called before placing orders
|
|
206
|
+
*/
|
|
207
|
+
initializeTradingClient(): Promise<void>;
|
|
208
|
+
/**
|
|
209
|
+
* Check if the trading client is initialized
|
|
210
|
+
*/
|
|
211
|
+
isTradingClientInitialized(): boolean;
|
|
212
|
+
/**
|
|
213
|
+
* Get current USDC allowance for the CTF Exchange contract
|
|
214
|
+
* @returns Current allowance in wei (as bigint)
|
|
215
|
+
*/
|
|
216
|
+
getUsdcAllowance(): Promise<bigint>;
|
|
217
|
+
/**
|
|
218
|
+
* Approve USDC spending for the CTF Exchange contract
|
|
219
|
+
* @param amount Amount to approve in wei (defaults to max uint256)
|
|
220
|
+
* @returns Transaction hash
|
|
221
|
+
*/
|
|
222
|
+
approveUsdc(amount?: bigint): Promise<string>;
|
|
223
|
+
/**
|
|
224
|
+
* Check if CTF (Conditional Tokens) are approved for the CTF Exchange
|
|
225
|
+
* @returns True if approved for all
|
|
226
|
+
*/
|
|
227
|
+
isCtfApprovedForAll(): Promise<boolean>;
|
|
228
|
+
/**
|
|
229
|
+
* Approve CTF (Conditional Tokens) for the CTF Exchange contract
|
|
230
|
+
* @returns Transaction hash
|
|
231
|
+
*/
|
|
232
|
+
approveCtf(): Promise<string>;
|
|
233
|
+
/**
|
|
234
|
+
* Set up all required approvals for trading
|
|
235
|
+
* @param options Approval options
|
|
236
|
+
* @returns Result containing transaction hashes
|
|
237
|
+
*/
|
|
238
|
+
setupApprovals(options?: {
|
|
239
|
+
usdcAmount?: bigint;
|
|
240
|
+
}): Promise<PolymarketApprovalResult>;
|
|
241
|
+
/**
|
|
242
|
+
* Create and post a limit order
|
|
243
|
+
* @param params Order parameters
|
|
244
|
+
* @returns Order response
|
|
245
|
+
*/
|
|
246
|
+
createLimitOrder(params: PolymarketLimitOrderParams): Promise<PolymarketOrderResponse>;
|
|
247
|
+
/**
|
|
248
|
+
* Create and post a market order (executes immediately at best price)
|
|
249
|
+
* @param params Order parameters
|
|
250
|
+
* @returns Order response
|
|
251
|
+
*/
|
|
252
|
+
createMarketOrder(params: PolymarketMarketOrderParams): Promise<PolymarketOrderResponse>;
|
|
253
|
+
/**
|
|
254
|
+
* Get all open orders for the user
|
|
255
|
+
* @returns Array of open orders
|
|
256
|
+
*/
|
|
257
|
+
getOpenOrders(): Promise<PolymarketOpenOrder[]>;
|
|
258
|
+
/**
|
|
259
|
+
* Cancel a specific order
|
|
260
|
+
* @param orderId Order ID to cancel
|
|
261
|
+
* @returns Cancel response
|
|
262
|
+
*/
|
|
263
|
+
cancelOrder(orderId: string): Promise<PolymarketCancelResponse>;
|
|
264
|
+
/**
|
|
265
|
+
* Cancel multiple orders
|
|
266
|
+
* @param orderIds Array of order IDs to cancel
|
|
267
|
+
* @returns Cancel response
|
|
268
|
+
*/
|
|
269
|
+
cancelOrders(orderIds: string[]): Promise<PolymarketCancelResponse>;
|
|
270
|
+
/**
|
|
271
|
+
* Cancel all open orders
|
|
272
|
+
* @returns Cancel response
|
|
273
|
+
*/
|
|
274
|
+
cancelAllOrders(): Promise<PolymarketCancelResponse>;
|
|
275
|
+
/**
|
|
276
|
+
* Get the order book for a specific token
|
|
277
|
+
* @param tokenId Token ID
|
|
278
|
+
* @returns Order book data
|
|
279
|
+
*/
|
|
280
|
+
getOrderBook(tokenId: string): Promise<PolymarketOrderBook>;
|
|
281
|
+
/**
|
|
282
|
+
* Place a limit buy order
|
|
283
|
+
* @param tokenId Token ID of the outcome
|
|
284
|
+
* @param price Price per share (0-1 range)
|
|
285
|
+
* @param size Number of shares to buy
|
|
286
|
+
* @returns Order response
|
|
287
|
+
*/
|
|
288
|
+
buyLimit(tokenId: string, price: number, size: number): Promise<PolymarketOrderResponse>;
|
|
289
|
+
/**
|
|
290
|
+
* Place a limit sell order
|
|
291
|
+
* @param tokenId Token ID of the outcome
|
|
292
|
+
* @param price Price per share (0-1 range)
|
|
293
|
+
* @param size Number of shares to sell
|
|
294
|
+
* @returns Order response
|
|
295
|
+
*/
|
|
296
|
+
sellLimit(tokenId: string, price: number, size: number): Promise<PolymarketOrderResponse>;
|
|
297
|
+
/**
|
|
298
|
+
* Place a market buy order (executes immediately at best price)
|
|
299
|
+
* @param tokenId Token ID of the outcome
|
|
300
|
+
* @param amount Amount in USDC to spend
|
|
301
|
+
* @param slippage Slippage tolerance as decimal (e.g., 0.05 for 5%). Default: 0.05
|
|
302
|
+
* @returns Order response
|
|
303
|
+
*/
|
|
304
|
+
buyMarket(tokenId: string, amount: number, slippage?: number): Promise<PolymarketOrderResponse>;
|
|
305
|
+
/**
|
|
306
|
+
* Place a market sell order (executes immediately at best price)
|
|
307
|
+
* @param tokenId Token ID of the outcome
|
|
308
|
+
* @param size Number of shares to sell
|
|
309
|
+
* @param slippage Slippage tolerance as decimal (e.g., 0.05 for 5%). Default: 0.05
|
|
310
|
+
* @returns Order response
|
|
311
|
+
*/
|
|
312
|
+
sellMarket(tokenId: string, size: number, slippage?: number): Promise<PolymarketOrderResponse>;
|
|
313
|
+
/**
|
|
314
|
+
* Buy shares of an outcome token (uses market order)
|
|
315
|
+
* @param tokenId Token ID of the outcome
|
|
316
|
+
* @param size Amount in USDC to spend
|
|
317
|
+
* @deprecated Use buyMarket() instead
|
|
318
|
+
*/
|
|
319
|
+
buy(tokenId: string, size: number): Promise<void>;
|
|
320
|
+
/**
|
|
321
|
+
* Sell shares of an outcome token (uses market order)
|
|
322
|
+
* @param tokenId Token ID of the outcome
|
|
323
|
+
* @param size Number of shares to sell
|
|
324
|
+
* @deprecated Use sellMarket() instead
|
|
325
|
+
*/
|
|
326
|
+
sell(tokenId: string, size: number): Promise<void>;
|
|
327
|
+
}
|
|
328
|
+
/**
|
|
329
|
+
* Hyperliquid-specific API
|
|
330
|
+
* Combines data, account, and execution methods for Hyperliquid markets
|
|
331
|
+
*/
|
|
332
|
+
export interface HyperliquidAPI {
|
|
333
|
+
getPrice(ticker: string): Promise<number>;
|
|
334
|
+
getIndicator(ticker: string, indicator: string, params?: any): Promise<number>;
|
|
335
|
+
getSpotMeta(): Promise<SpotMeta>;
|
|
336
|
+
getSpotClearinghouseState(user: string): Promise<SpotClearinghouseState>;
|
|
337
|
+
getSpotMetaAndAssetCtxs(): Promise<SpotMetaAndAssetCtxs>;
|
|
338
|
+
getTokenDetails(tokenId: string): Promise<any>;
|
|
339
|
+
getSpotDeployState(user: string): Promise<any>;
|
|
340
|
+
getMeta(): Promise<Meta>;
|
|
341
|
+
getMetaAndAssetCtxs(): Promise<MetaAndAssetCtxs>;
|
|
342
|
+
getClearinghouseState(user: string): Promise<ClearinghouseState>;
|
|
343
|
+
getUserFunding(user: string, startTime: number, endTime?: number): Promise<UserFunding>;
|
|
344
|
+
getUserNonFundingLedgerUpdates(user: string, startTime: number, endTime?: number): Promise<UserNonFundingLedgerUpdates>;
|
|
345
|
+
getFundingHistory(coin: string, startTime: number, endTime?: number): Promise<FundingHistory>;
|
|
346
|
+
getPredictedFundings(): Promise<PredictedFundings>;
|
|
347
|
+
getPerpsAtOpenInterestCap(): Promise<PerpsAtOpenInterestCap>;
|
|
348
|
+
getPerpDexLimits(dex: string): Promise<PerpDexLimits>;
|
|
349
|
+
getAssetIndex(assetName: string): Promise<number | undefined>;
|
|
350
|
+
getInternalName(exchangeName: string): Promise<string | undefined>;
|
|
351
|
+
getAllAssets(): Promise<{
|
|
352
|
+
perp: string[];
|
|
353
|
+
spot: string[];
|
|
354
|
+
}>;
|
|
355
|
+
getAllMids(): Promise<AllMids>;
|
|
356
|
+
getUserOpenOrders(user: string): Promise<UserOpenOrders>;
|
|
357
|
+
getFrontendOpenOrders(user: string): Promise<FrontendOpenOrders>;
|
|
358
|
+
getUserFills(user: string): Promise<UserFills>;
|
|
359
|
+
getUserFillsByTime(user: string, startTime: number, endTime: number): Promise<UserFills>;
|
|
360
|
+
getUserRateLimit(user: string): Promise<UserRateLimit>;
|
|
361
|
+
getOrderStatus(user: string, oid: number | string): Promise<OrderStatus>;
|
|
362
|
+
getL2Book(coin: string): Promise<L2Book>;
|
|
363
|
+
getCandleSnapshot(coin: string, interval: string, startTime: number, endTime: number): Promise<CandleSnapshot>;
|
|
364
|
+
getMaxBuilderFee(user: string, builder: string): Promise<number>;
|
|
365
|
+
getHistoricalOrders(user: string): Promise<HistoricalOrder[]>;
|
|
366
|
+
getUserTwapSliceFills(user: string): Promise<TwapSliceFill[]>;
|
|
367
|
+
getSubAccounts(user: string): Promise<SubAccount[]>;
|
|
368
|
+
getVaultDetails(vaultAddress: string, user?: string): Promise<VaultDetails>;
|
|
369
|
+
getUserVaultEquities(user: string): Promise<VaultEquity[]>;
|
|
370
|
+
getUserRole(user: string): Promise<UserRole>;
|
|
371
|
+
getDelegations(user: string): Promise<Delegation[]>;
|
|
372
|
+
getDelegatorSummary(user: string): Promise<DelegatorSummary>;
|
|
373
|
+
getDelegatorHistory(user: string): Promise<DelegatorHistoryEntry[]>;
|
|
374
|
+
getDelegatorRewards(user: string): Promise<DelegatorReward[]>;
|
|
375
|
+
validatorSummaries(): Promise<ValidatorSummary[]>;
|
|
376
|
+
vaultSummaries(): Promise<VaultSummary[]>;
|
|
377
|
+
userFees(user: string): Promise<UserFees>;
|
|
378
|
+
portfolio(user: string): Promise<PortfolioPeriods>;
|
|
379
|
+
preTransferCheck(user: string, source: string): Promise<PreTransferCheck>;
|
|
380
|
+
referral(user: string): Promise<Referral>;
|
|
381
|
+
extraAgents(user: string): Promise<ExtraAgent[]>;
|
|
382
|
+
isVip(user: string): Promise<boolean>;
|
|
383
|
+
legalCheck(user: string): Promise<LegalCheck>;
|
|
384
|
+
userTwapSliceFillsByTime(user: string, startTime: number, endTime?: number): Promise<TwapSliceFill[]>;
|
|
385
|
+
twapHistory(user: string): Promise<TwapHistory[]>;
|
|
386
|
+
userToMultiSigSigners(user: string): Promise<MultiSigSigners | null>;
|
|
387
|
+
getBuilderFeeApproval(user: string, builderAddress: string): Promise<BuilderFeeApproval>;
|
|
388
|
+
getUserOrderHistory(user: string, startTime: number, endTime?: number): Promise<UserOrderHistory>;
|
|
389
|
+
getPosition(ticker: string): Promise<ClearinghouseState['assetPositions'][0] | null>;
|
|
390
|
+
getPositions(): Promise<ClearinghouseState['assetPositions']>;
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Signer interface for transaction signing
|
|
394
|
+
*/
|
|
395
|
+
export interface SignerAPI {
|
|
396
|
+
signTransaction(transaction: string | any, chain: string, walletAddress: string): Promise<string>;
|
|
397
|
+
signTypedData(typedData: any, chain: string, walletAddress: string): Promise<string>;
|
|
398
|
+
signMessage(message: string | Uint8Array, chain: string, walletAddress: string): Promise<string>;
|
|
399
|
+
getAddress(): string | undefined;
|
|
400
|
+
getPrivateKey(): string | undefined;
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Osiris Context
|
|
404
|
+
* Provides market-specific APIs based on the strategy's configured market
|
|
405
|
+
*/
|
|
406
|
+
export interface OsirisContext {
|
|
407
|
+
polymarket?: PolymarketAPI;
|
|
408
|
+
hyperliquid?: HyperliquidAPI;
|
|
409
|
+
ta: TechnicalAnalysisAPI;
|
|
410
|
+
state: OsirisState;
|
|
411
|
+
signer: SignerAPI;
|
|
412
|
+
log: (message: string, meta?: any) => void;
|
|
413
|
+
}
|
|
414
|
+
//# sourceMappingURL=osiris.d.ts.map
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { OsirisContext } from "./osiris";
|
|
2
|
+
import type { EventSubscription, StrategyEvent } from "./event-types";
|
|
3
|
+
/**
|
|
4
|
+
* Strategy interface supporting both tick-based and event-based execution
|
|
5
|
+
*
|
|
6
|
+
* Tick-based strategies: Implement shouldTrigger() and onTrigger()
|
|
7
|
+
* Event-based strategies: Implement subscriptions[] and onEvent()
|
|
8
|
+
*
|
|
9
|
+
* These modes are mutually exclusive - a strategy should use one or the other.
|
|
10
|
+
*/
|
|
11
|
+
export interface CodeStrategy {
|
|
12
|
+
/**
|
|
13
|
+
* Called on each tick to determine if the strategy should execute
|
|
14
|
+
* @returns true if onTrigger should be called
|
|
15
|
+
*/
|
|
16
|
+
shouldTrigger?(osiris: OsirisContext): Promise<boolean>;
|
|
17
|
+
/**
|
|
18
|
+
* Called when shouldTrigger returns true
|
|
19
|
+
* Contains the main strategy logic for tick-based execution
|
|
20
|
+
*/
|
|
21
|
+
onTrigger?(osiris: OsirisContext): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* List of events this strategy wants to subscribe to
|
|
24
|
+
* The EventRunner will subscribe to these events on the WebSocket connection
|
|
25
|
+
*/
|
|
26
|
+
subscriptions?: EventSubscription[];
|
|
27
|
+
/**
|
|
28
|
+
* Called when a subscribed event is received
|
|
29
|
+
* Contains the main strategy logic for event-based execution
|
|
30
|
+
* @param event The event that triggered this call
|
|
31
|
+
* @param osiris The context with market APIs and utilities
|
|
32
|
+
*/
|
|
33
|
+
onEvent?(event: StrategyEvent, osiris: OsirisContext): Promise<void>;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=strategy.d.ts.map
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Simple logger interface for the SDK
|
|
3
|
+
* Users can provide their own logger implementation or use the console logger
|
|
4
|
+
*/
|
|
5
|
+
export interface Logger {
|
|
6
|
+
info(message: string, meta?: any): void;
|
|
7
|
+
error(message: string, error?: any): void;
|
|
8
|
+
warning(message: string, meta?: any): void;
|
|
9
|
+
debug(message: string, meta?: any): void;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Creates a simple console logger that matches the Logger interface
|
|
13
|
+
*/
|
|
14
|
+
export declare function createConsoleLogger(): Logger;
|
|
15
|
+
//# sourceMappingURL=logger.d.ts.map
|
package/package.json
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@vesper85/strategy-sdk",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "SDK for writing and running trading strategies with Polymarket and Hyperliquid integrations",
|
|
6
|
+
"keywords": [
|
|
7
|
+
"trading",
|
|
8
|
+
"strategy",
|
|
9
|
+
"polymarket",
|
|
10
|
+
"hyperliquid",
|
|
11
|
+
"trading-bot",
|
|
12
|
+
"osiris"
|
|
13
|
+
],
|
|
14
|
+
"main": "./dist/index.js",
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"exports": {
|
|
17
|
+
".": {
|
|
18
|
+
"import": "./dist/index.js",
|
|
19
|
+
"types": "./dist/index.d.ts"
|
|
20
|
+
},
|
|
21
|
+
"./package.json": "./package.json"
|
|
22
|
+
},
|
|
23
|
+
"files": [
|
|
24
|
+
"dist",
|
|
25
|
+
"README.md",
|
|
26
|
+
"LICENSE",
|
|
27
|
+
"!**/*.map"
|
|
28
|
+
],
|
|
29
|
+
"sideEffects": false,
|
|
30
|
+
"license": "MIT",
|
|
31
|
+
"scripts": {
|
|
32
|
+
"build": "tsup && npm run types",
|
|
33
|
+
"types": "tsc --emitDeclarationOnly --declaration --outDir dist",
|
|
34
|
+
"build:watch": "tsup --watch",
|
|
35
|
+
"dev": "tsup --watch",
|
|
36
|
+
"lint": "eslint \"src/**/*.ts*\"",
|
|
37
|
+
"lint:fix": "eslint \"src/**/*.ts*\" --fix",
|
|
38
|
+
"clean": "rm -rf .turbo && rm -rf node_modules && rm -rf dist",
|
|
39
|
+
"type-check": "tsc --noEmit",
|
|
40
|
+
"prepublishOnly": "npm run build",
|
|
41
|
+
"changeset": "changeset",
|
|
42
|
+
"version": "changeset version",
|
|
43
|
+
"release": "npm run build && changeset publish"
|
|
44
|
+
},
|
|
45
|
+
"dependencies": {
|
|
46
|
+
"@vesper85/technical-indicators": "^0.1.0",
|
|
47
|
+
"@polymarket/clob-client": "^4.6.0",
|
|
48
|
+
"axios": "^1.7.9",
|
|
49
|
+
"ethers": "^6.13.4",
|
|
50
|
+
"hyperliquid": "^1.7.7",
|
|
51
|
+
"polymarket-gamma": "^0.4.0",
|
|
52
|
+
"redis": "^4.7.0",
|
|
53
|
+
"superjson": "^2.2.6",
|
|
54
|
+
"viem": "^2.30.1"
|
|
55
|
+
},
|
|
56
|
+
"devDependencies": {
|
|
57
|
+
"@changesets/cli": "^2.29.8",
|
|
58
|
+
"@osiris-ai/eslint-config": "workspace:*",
|
|
59
|
+
"@osiris-ai/typescript-config": "workspace:*",
|
|
60
|
+
"@types/node": "^22.10.1",
|
|
61
|
+
"eslint": "^8.37.0",
|
|
62
|
+
"tsup": "^8.5.0",
|
|
63
|
+
"typescript": "^5.8.3"
|
|
64
|
+
},
|
|
65
|
+
"engines": {
|
|
66
|
+
"node": ">=18.0.0"
|
|
67
|
+
},
|
|
68
|
+
"repository": {
|
|
69
|
+
"type": "git",
|
|
70
|
+
"url": "https://github.com/FetcchX/legion-sdk.git"
|
|
71
|
+
},
|
|
72
|
+
"bugs": {
|
|
73
|
+
"url": "https://github.com/FetcchX/legion-sdk/issues"
|
|
74
|
+
},
|
|
75
|
+
"homepage": "https://github.com/FetcchX/legion-sdk#readme"
|
|
76
|
+
}
|