@strobelabs/perpcity-sdk 0.1.7 → 0.2.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/dist/index.d.ts CHANGED
@@ -6,14 +6,106 @@ import { GraphQLClient } from 'graphql-request';
6
6
  interface PerpCityDeployments {
7
7
  perpManager: Address;
8
8
  usdc: Address;
9
- goldskyPublic: string;
10
- goldskyPrivate: string;
11
9
  }
12
10
  interface PerpCityContextConfig {
13
11
  walletClient: WalletClient;
14
12
  goldskyBearerToken?: string;
13
+ goldskyEndpoint: string;
14
+ deployments: PerpCityDeployments;
15
15
  }
16
16
 
17
+ type OpenInterest = {
18
+ takerLongNotional: number;
19
+ takerShortNotional: number;
20
+ };
21
+ type TimeSeries<T extends number | OpenInterest> = {
22
+ timestamp: number;
23
+ value: T;
24
+ };
25
+ type Bounds = {
26
+ minMargin: number;
27
+ minTakerLeverage: number;
28
+ maxTakerLeverage: number;
29
+ };
30
+ type Fees = {
31
+ creatorFee: number;
32
+ insuranceFee: number;
33
+ lpFee: number;
34
+ liquidationFee: number;
35
+ };
36
+ type LiveDetails = {
37
+ pnl: number;
38
+ fundingPayment: number;
39
+ effectiveMargin: number;
40
+ isLiquidatable: boolean;
41
+ };
42
+ type ClosedPosition = {
43
+ perpId: Hex;
44
+ wasMaker: boolean;
45
+ wasLong: boolean;
46
+ pnlAtClose: number;
47
+ };
48
+ type ClosePositionParams = {
49
+ minAmt0Out: number;
50
+ minAmt1Out: number;
51
+ maxAmt1In: number;
52
+ };
53
+ type OpenTakerPositionParams = {
54
+ isLong: boolean;
55
+ margin: number;
56
+ leverage: number;
57
+ unspecifiedAmountLimit: number;
58
+ };
59
+ type OpenMakerPositionParams = {
60
+ margin: number;
61
+ priceLower: number;
62
+ priceUpper: number;
63
+ liquidity: bigint;
64
+ maxAmt0In: number;
65
+ maxAmt1In: number;
66
+ };
67
+ type CreatePerpParams = {
68
+ startingPrice: number;
69
+ beacon: Address;
70
+ };
71
+ type PerpData = {
72
+ id: Hex;
73
+ tickSpacing: number;
74
+ mark: number;
75
+ index: number;
76
+ beacon: Address;
77
+ lastIndexUpdate: number;
78
+ openInterest: OpenInterest;
79
+ markTimeSeries: TimeSeries<number>[];
80
+ indexTimeSeries: TimeSeries<number>[];
81
+ fundingRate: number;
82
+ bounds: Bounds;
83
+ fees: Fees;
84
+ openInterestTimeSeries: TimeSeries<OpenInterest>[];
85
+ fundingRateTimeSeries: TimeSeries<number>[];
86
+ totalOpenMakerPnl: number;
87
+ totalOpenTakerPnl: number;
88
+ };
89
+ type UserData = {
90
+ walletAddress: Hex;
91
+ usdcBalance: number;
92
+ openPositions: OpenPositionData[];
93
+ closedPositions: ClosedPosition[];
94
+ realizedPnl: number;
95
+ unrealizedPnl: number;
96
+ };
97
+ type OpenPositionData = {
98
+ perpId: Hex;
99
+ positionId: bigint;
100
+ isLong?: boolean;
101
+ isMaker?: boolean;
102
+ liveDetails: LiveDetails;
103
+ };
104
+ type CacheConfig = {
105
+ ttl: number;
106
+ maxSize: number;
107
+ };
108
+
17
109
  declare class PerpCityContext {
18
110
  readonly walletClient: viem.Client<viem.Transport, viem.Chain | undefined, viem.Account | undefined, viem.WalletRpcSchema, {
19
111
  call: (parameters: viem.CallParameters<viem.Chain | undefined>) => Promise<viem.CallReturnType>;
@@ -38,15 +130,15 @@ declare class PerpCityContext {
38
130
  blobGasUsed: bigint;
39
131
  difficulty: bigint;
40
132
  excessBlobGas: bigint;
41
- extraData: viem.Hex;
133
+ extraData: Hex;
42
134
  gasLimit: bigint;
43
135
  gasUsed: bigint;
44
- miner: viem.Address;
136
+ miner: Address;
45
137
  mixHash: viem.Hash;
46
138
  parentBeaconBlockRoot?: `0x${string}` | undefined;
47
139
  parentHash: viem.Hash;
48
- receiptsRoot: viem.Hex;
49
- sealFields: viem.Hex[];
140
+ receiptsRoot: Hex;
141
+ sealFields: Hex[];
50
142
  sha3Uncles: viem.Hash;
51
143
  size: bigint;
52
144
  stateRoot: viem.Hash;
@@ -59,18 +151,18 @@ declare class PerpCityContext {
59
151
  transactions: includeTransactions extends true ? ({
60
152
  type: "legacy";
61
153
  chainId?: number | undefined;
62
- r: viem.Hex;
63
- s: viem.Hex;
154
+ r: Hex;
155
+ s: Hex;
64
156
  v: bigint;
65
157
  yParity?: undefined | undefined;
66
158
  value: bigint;
67
- from: viem.Address;
159
+ from: Address;
68
160
  gas: bigint;
69
161
  hash: viem.Hash;
70
- input: viem.Hex;
162
+ input: Hex;
71
163
  nonce: number;
72
- to: viem.Address | null;
73
- typeHex: viem.Hex | null;
164
+ to: Address | null;
165
+ typeHex: Hex | null;
74
166
  accessList?: undefined | undefined;
75
167
  authorizationList?: undefined | undefined;
76
168
  blobVersionedHashes?: undefined | undefined;
@@ -84,18 +176,18 @@ declare class PerpCityContext {
84
176
  } | {
85
177
  type: "eip2930";
86
178
  chainId: number;
87
- r: viem.Hex;
88
- s: viem.Hex;
179
+ r: Hex;
180
+ s: Hex;
89
181
  v: bigint;
90
182
  yParity: number;
91
183
  value: bigint;
92
- from: viem.Address;
184
+ from: Address;
93
185
  gas: bigint;
94
186
  hash: viem.Hash;
95
- input: viem.Hex;
187
+ input: Hex;
96
188
  nonce: number;
97
- to: viem.Address | null;
98
- typeHex: viem.Hex | null;
189
+ to: Address | null;
190
+ typeHex: Hex | null;
99
191
  accessList: viem.AccessList;
100
192
  authorizationList?: undefined | undefined;
101
193
  blobVersionedHashes?: undefined | undefined;
@@ -109,18 +201,18 @@ declare class PerpCityContext {
109
201
  } | {
110
202
  type: "eip1559";
111
203
  chainId: number;
112
- r: viem.Hex;
113
- s: viem.Hex;
204
+ r: Hex;
205
+ s: Hex;
114
206
  v: bigint;
115
207
  yParity: number;
116
208
  value: bigint;
117
- from: viem.Address;
209
+ from: Address;
118
210
  gas: bigint;
119
211
  hash: viem.Hash;
120
- input: viem.Hex;
212
+ input: Hex;
121
213
  nonce: number;
122
- to: viem.Address | null;
123
- typeHex: viem.Hex | null;
214
+ to: Address | null;
215
+ typeHex: Hex | null;
124
216
  accessList: viem.AccessList;
125
217
  authorizationList?: undefined | undefined;
126
218
  blobVersionedHashes?: undefined | undefined;
@@ -134,21 +226,21 @@ declare class PerpCityContext {
134
226
  } | {
135
227
  type: "eip4844";
136
228
  chainId: number;
137
- r: viem.Hex;
138
- s: viem.Hex;
229
+ r: Hex;
230
+ s: Hex;
139
231
  v: bigint;
140
232
  yParity: number;
141
233
  value: bigint;
142
- from: viem.Address;
234
+ from: Address;
143
235
  gas: bigint;
144
236
  hash: viem.Hash;
145
- input: viem.Hex;
237
+ input: Hex;
146
238
  nonce: number;
147
- to: viem.Address | null;
148
- typeHex: viem.Hex | null;
239
+ to: Address | null;
240
+ typeHex: Hex | null;
149
241
  accessList: viem.AccessList;
150
242
  authorizationList?: undefined | undefined;
151
- blobVersionedHashes: readonly viem.Hex[];
243
+ blobVersionedHashes: readonly Hex[];
152
244
  gasPrice?: undefined | undefined;
153
245
  maxFeePerBlobGas: bigint;
154
246
  maxFeePerGas: bigint;
@@ -159,18 +251,18 @@ declare class PerpCityContext {
159
251
  } | {
160
252
  type: "eip7702";
161
253
  chainId: number;
162
- r: viem.Hex;
163
- s: viem.Hex;
254
+ r: Hex;
255
+ s: Hex;
164
256
  v: bigint;
165
257
  yParity: number;
166
258
  value: bigint;
167
- from: viem.Address;
259
+ from: Address;
168
260
  gas: bigint;
169
261
  hash: viem.Hash;
170
- input: viem.Hex;
262
+ input: Hex;
171
263
  nonce: number;
172
- to: viem.Address | null;
173
- typeHex: viem.Hex | null;
264
+ to: Address | null;
265
+ typeHex: Hex | null;
174
266
  accessList: viem.AccessList;
175
267
  authorizationList: viem.SignedAuthorizationList;
176
268
  blobVersionedHashes?: undefined | undefined;
@@ -209,18 +301,18 @@ declare class PerpCityContext {
209
301
  getTransaction: <blockTag extends viem.BlockTag = "latest">(args: viem.GetTransactionParameters<blockTag>) => Promise<{
210
302
  type: "legacy";
211
303
  chainId?: number | undefined;
212
- r: viem.Hex;
213
- s: viem.Hex;
304
+ r: Hex;
305
+ s: Hex;
214
306
  v: bigint;
215
307
  yParity?: undefined | undefined;
216
308
  value: bigint;
217
- from: viem.Address;
309
+ from: Address;
218
310
  gas: bigint;
219
311
  hash: viem.Hash;
220
- input: viem.Hex;
312
+ input: Hex;
221
313
  nonce: number;
222
- to: viem.Address | null;
223
- typeHex: viem.Hex | null;
314
+ to: Address | null;
315
+ typeHex: Hex | null;
224
316
  accessList?: undefined | undefined;
225
317
  authorizationList?: undefined | undefined;
226
318
  blobVersionedHashes?: undefined | undefined;
@@ -234,18 +326,18 @@ declare class PerpCityContext {
234
326
  } | {
235
327
  type: "eip2930";
236
328
  chainId: number;
237
- r: viem.Hex;
238
- s: viem.Hex;
329
+ r: Hex;
330
+ s: Hex;
239
331
  v: bigint;
240
332
  yParity: number;
241
333
  value: bigint;
242
- from: viem.Address;
334
+ from: Address;
243
335
  gas: bigint;
244
336
  hash: viem.Hash;
245
- input: viem.Hex;
337
+ input: Hex;
246
338
  nonce: number;
247
- to: viem.Address | null;
248
- typeHex: viem.Hex | null;
339
+ to: Address | null;
340
+ typeHex: Hex | null;
249
341
  accessList: viem.AccessList;
250
342
  authorizationList?: undefined | undefined;
251
343
  blobVersionedHashes?: undefined | undefined;
@@ -259,18 +351,18 @@ declare class PerpCityContext {
259
351
  } | {
260
352
  type: "eip1559";
261
353
  chainId: number;
262
- r: viem.Hex;
263
- s: viem.Hex;
354
+ r: Hex;
355
+ s: Hex;
264
356
  v: bigint;
265
357
  yParity: number;
266
358
  value: bigint;
267
- from: viem.Address;
359
+ from: Address;
268
360
  gas: bigint;
269
361
  hash: viem.Hash;
270
- input: viem.Hex;
362
+ input: Hex;
271
363
  nonce: number;
272
- to: viem.Address | null;
273
- typeHex: viem.Hex | null;
364
+ to: Address | null;
365
+ typeHex: Hex | null;
274
366
  accessList: viem.AccessList;
275
367
  authorizationList?: undefined | undefined;
276
368
  blobVersionedHashes?: undefined | undefined;
@@ -284,21 +376,21 @@ declare class PerpCityContext {
284
376
  } | {
285
377
  type: "eip4844";
286
378
  chainId: number;
287
- r: viem.Hex;
288
- s: viem.Hex;
379
+ r: Hex;
380
+ s: Hex;
289
381
  v: bigint;
290
382
  yParity: number;
291
383
  value: bigint;
292
- from: viem.Address;
384
+ from: Address;
293
385
  gas: bigint;
294
386
  hash: viem.Hash;
295
- input: viem.Hex;
387
+ input: Hex;
296
388
  nonce: number;
297
- to: viem.Address | null;
298
- typeHex: viem.Hex | null;
389
+ to: Address | null;
390
+ typeHex: Hex | null;
299
391
  accessList: viem.AccessList;
300
392
  authorizationList?: undefined | undefined;
301
- blobVersionedHashes: readonly viem.Hex[];
393
+ blobVersionedHashes: readonly Hex[];
302
394
  gasPrice?: undefined | undefined;
303
395
  maxFeePerBlobGas: bigint;
304
396
  maxFeePerGas: bigint;
@@ -309,18 +401,18 @@ declare class PerpCityContext {
309
401
  } | {
310
402
  type: "eip7702";
311
403
  chainId: number;
312
- r: viem.Hex;
313
- s: viem.Hex;
404
+ r: Hex;
405
+ s: Hex;
314
406
  v: bigint;
315
407
  yParity: number;
316
408
  value: bigint;
317
- from: viem.Address;
409
+ from: Address;
318
410
  gas: bigint;
319
411
  hash: viem.Hash;
320
- input: viem.Hex;
412
+ input: Hex;
321
413
  nonce: number;
322
- to: viem.Address | null;
323
- typeHex: viem.Hex | null;
414
+ to: Address | null;
415
+ typeHex: Hex | null;
324
416
  accessList: viem.AccessList;
325
417
  authorizationList: viem.SignedAuthorizationList;
326
418
  blobVersionedHashes?: undefined | undefined;
@@ -336,13 +428,13 @@ declare class PerpCityContext {
336
428
  getTransactionCount: (args: viem.GetTransactionCountParameters) => Promise<viem.GetTransactionCountReturnType>;
337
429
  getTransactionReceipt: (args: viem.GetTransactionReceiptParameters) => Promise<viem.TransactionReceipt>;
338
430
  multicall: <const contracts extends readonly unknown[], allowFailure extends boolean = true>(args: viem.MulticallParameters<contracts, allowFailure>) => Promise<viem.MulticallReturnType<contracts, allowFailure>>;
339
- prepareTransactionRequest: <const request extends viem.PrepareTransactionRequestRequest<viem.Chain | undefined, chainOverride>, chainOverride extends viem.Chain | undefined = undefined, accountOverride extends viem.Account | viem.Address | undefined = undefined>(args: viem.PrepareTransactionRequestParameters<viem.Chain | undefined, viem.Account | undefined, chainOverride, accountOverride, request>) => Promise<viem.UnionRequiredBy<Extract<viem.UnionOmit<viem.ExtractChainFormatterParameters<viem.DeriveChain<viem.Chain | undefined, chainOverride>, "transactionRequest", viem.TransactionRequest>, "from"> & (viem.DeriveChain<viem.Chain | undefined, chainOverride> extends infer T_1 ? T_1 extends viem.DeriveChain<viem.Chain | undefined, chainOverride> ? T_1 extends viem.Chain ? {
431
+ prepareTransactionRequest: <const request extends viem.PrepareTransactionRequestRequest<viem.Chain | undefined, chainOverride>, chainOverride extends viem.Chain | undefined = undefined, accountOverride extends viem.Account | Address | undefined = undefined>(args: viem.PrepareTransactionRequestParameters<viem.Chain | undefined, viem.Account | undefined, chainOverride, accountOverride, request>) => Promise<viem.UnionRequiredBy<Extract<viem.UnionOmit<viem.ExtractChainFormatterParameters<viem.DeriveChain<viem.Chain | undefined, chainOverride>, "transactionRequest", viem.TransactionRequest>, "from"> & (viem.DeriveChain<viem.Chain | undefined, chainOverride> extends infer T_1 ? T_1 extends viem.DeriveChain<viem.Chain | undefined, chainOverride> ? T_1 extends viem.Chain ? {
340
432
  chain: T_1;
341
433
  } : {
342
434
  chain?: undefined;
343
435
  } : never : never) & (viem.DeriveAccount<viem.Account | undefined, accountOverride> extends infer T_2 ? T_2 extends viem.DeriveAccount<viem.Account | undefined, accountOverride> ? T_2 extends viem.Account ? {
344
436
  account: T_2;
345
- from: viem.Address;
437
+ from: Address;
346
438
  } : {
347
439
  account?: undefined;
348
440
  from?: undefined;
@@ -3594,7 +3686,7 @@ declare class PerpCityContext {
3594
3686
  simulate: <const calls extends readonly unknown[]>(args: viem.SimulateBlocksParameters<calls>) => Promise<viem.SimulateBlocksReturnType<calls>>;
3595
3687
  simulateBlocks: <const calls extends readonly unknown[]>(args: viem.SimulateBlocksParameters<calls>) => Promise<viem.SimulateBlocksReturnType<calls>>;
3596
3688
  simulateCalls: <const calls extends readonly unknown[]>(args: viem.SimulateCallsParameters<calls>) => Promise<viem.SimulateCallsReturnType<calls>>;
3597
- simulateContract: <const abi extends viem.Abi | readonly unknown[], functionName extends viem.ContractFunctionName<abi, "nonpayable" | "payable">, const args_1 extends viem.ContractFunctionArgs<abi, "nonpayable" | "payable", functionName>, chainOverride extends viem.Chain | undefined, accountOverride extends viem.Account | viem.Address | undefined = undefined>(args: viem.SimulateContractParameters<abi, functionName, args_1, viem.Chain | undefined, chainOverride, accountOverride>) => Promise<viem.SimulateContractReturnType<abi, functionName, args_1, viem.Chain | undefined, viem.Account | undefined, chainOverride, accountOverride>>;
3689
+ simulateContract: <const abi extends viem.Abi | readonly unknown[], functionName extends viem.ContractFunctionName<abi, "nonpayable" | "payable">, const args_1 extends viem.ContractFunctionArgs<abi, "nonpayable" | "payable", functionName>, chainOverride extends viem.Chain | undefined, accountOverride extends viem.Account | Address | undefined = undefined>(args: viem.SimulateContractParameters<abi, functionName, args_1, viem.Chain | undefined, chainOverride, accountOverride>) => Promise<viem.SimulateContractReturnType<abi, functionName, args_1, viem.Chain | undefined, viem.Account | undefined, chainOverride, accountOverride>>;
3598
3690
  verifyHash: (args: viem.VerifyHashActionParameters) => Promise<viem.VerifyHashActionReturnType>;
3599
3691
  verifyMessage: (args: viem.VerifyMessageActionParameters) => Promise<viem.VerifyMessageActionReturnType>;
3600
3692
  verifySiweMessage: (args: viem__types_actions_siwe_verifySiweMessage.VerifySiweMessageParameters) => Promise<viem__types_actions_siwe_verifySiweMessage.VerifySiweMessageReturnType>;
@@ -3608,126 +3700,33 @@ declare class PerpCityContext {
3608
3700
  watchPendingTransactions: (args: viem.WatchPendingTransactionsParameters<viem.Transport>) => viem.WatchPendingTransactionsReturnType;
3609
3701
  } & viem.WalletActions<viem.Chain | undefined, viem.Account | undefined>>;
3610
3702
  readonly goldskyClient: GraphQLClient;
3703
+ private readonly _deployments;
3611
3704
  constructor(config: PerpCityContextConfig);
3612
- validateChainId(): number;
3613
3705
  deployments(): PerpCityDeployments;
3614
- }
3615
-
3616
- type ClosePositionParams = {
3617
- minAmt0Out: number;
3618
- minAmt1Out: number;
3619
- maxAmt1In: number;
3620
- };
3621
- type LiveDetails = {
3622
- pnl: number;
3623
- fundingPayment: number;
3624
- effectiveMargin: number;
3625
- isLiquidatable: boolean;
3626
- };
3627
- declare class OpenPosition {
3628
- readonly context: PerpCityContext;
3629
- readonly perpId: Hex;
3630
- readonly positionId: bigint;
3631
- constructor(context: PerpCityContext, perpId: Hex, positionId: bigint);
3632
- closePosition(params: ClosePositionParams): Promise<OpenPosition | null>;
3633
- liveDetails(): Promise<LiveDetails>;
3634
- }
3635
-
3636
- type OpenMakerPositionParams = {
3637
- margin: number;
3638
- priceLower: number;
3639
- priceUpper: number;
3640
- maxAmt0In: number;
3641
- maxAmt1In: number;
3642
- };
3643
- type OpenTakerPositionParams = {
3644
- isLong: boolean;
3645
- margin: number;
3646
- leverage: number;
3647
- unspecifiedAmountLimit: number;
3648
- };
3649
- type OpenInterest = {
3650
- takerLongNotional: number;
3651
- takerShortNotional: number;
3652
- };
3653
- type TimeSeries<T extends number | OpenInterest> = {
3654
- timestamp: number;
3655
- value: T;
3656
- };
3657
- type SimulateOpenPositionResults = {
3658
- success: boolean;
3659
- size: number;
3660
- notional: number;
3661
- creatorFeeAmt: number;
3662
- insuranceFeeAmt: number;
3663
- lpFeeAmt: number;
3664
- };
3665
- type Fees = {
3666
- creatorFee: number;
3667
- insuranceFee: number;
3668
- lpFee: number;
3669
- liquidationFee: number;
3670
- };
3671
- type Bounds = {
3672
- minMargin: number;
3673
- minTakerLeverage: number;
3674
- maxTakerLeverage: number;
3675
- };
3676
- declare class Perp {
3677
- readonly context: PerpCityContext;
3678
- readonly id: Hex;
3679
- constructor(context: PerpCityContext, id: Hex);
3680
- tickSpacing(): Promise<number>;
3681
- mark(): Promise<number>;
3682
- index(): Promise<number>;
3683
- beacon(): Promise<Address>;
3684
- lastIndexUpdate(): Promise<number>;
3685
- openInterest(): Promise<OpenInterest>;
3686
- markTimeSeries(): Promise<TimeSeries<number>[]>;
3687
- indexTimeSeries(): Promise<TimeSeries<number>[]>;
3688
- fundingRate(): Promise<number>;
3689
- bounds(): Promise<Bounds>;
3690
- maxTakerNotional(isLong: boolean): Promise<number>;
3691
- simulateTaker(params: OpenTakerPositionParams): Promise<SimulateOpenPositionResults>;
3692
- allMakerPositions(): Promise<OpenPosition[]>;
3693
- allTakerPositions(): Promise<OpenPosition[]>;
3694
- totalOpenMakerPnl(): Promise<number>;
3695
- totalOpenTakerPnl(): Promise<number>;
3696
- fees(): Promise<Fees>;
3697
- openInterestTimeSeries(): Promise<TimeSeries<OpenInterest>[]>;
3698
- fundingRateTimeSeries(): Promise<TimeSeries<number>[]>;
3699
- approveAndOpenMakerPosition(params: OpenMakerPositionParams): Promise<OpenPosition>;
3700
- approveAndOpenTakerPosition(params: OpenTakerPositionParams): Promise<OpenPosition>;
3701
- openMakerPosition(params: OpenMakerPositionParams): Promise<OpenPosition>;
3702
- openTakerPosition(params: OpenTakerPositionParams): Promise<OpenPosition>;
3703
- }
3704
-
3705
- type CreatePerpParams = {
3706
- startingPrice: number;
3707
- beacon: Address;
3708
- };
3709
- declare class PerpManager {
3710
- readonly context: PerpCityContext;
3711
- constructor(context: PerpCityContext);
3712
- getPerps(): Promise<Perp[]>;
3713
- createPerp(params: CreatePerpParams): Promise<Perp>;
3714
- }
3715
-
3716
- type ClosedPosition = {
3717
- perpId: Hex;
3718
- wasMaker: boolean;
3719
- wasLong: boolean;
3720
- pnlAtClose: number;
3721
- };
3722
- declare class User {
3723
- readonly context: PerpCityContext;
3724
- readonly walletAddress: Hex;
3725
- constructor(context: PerpCityContext);
3726
- usdcBalance(): Promise<number>;
3727
- openPositions(): Promise<OpenPosition[]>;
3728
- closedPositions(): Promise<ClosedPosition[]>;
3729
- realizedPnl(): Promise<number>;
3730
- unrealizedPnl(): Promise<number>;
3706
+ private fetchPerpData;
3707
+ private fetchPerpContractData;
3708
+ /**
3709
+ * Fetch comprehensive perp data with all related information in a single batched request
3710
+ */
3711
+ getPerpData(perpId: Hex): Promise<PerpData>;
3712
+ /**
3713
+ * Fetch data for multiple perps efficiently with true batching
3714
+ * This fetches all perps in just 2 Goldsky requests total (not 2N!)
3715
+ */
3716
+ getMultiplePerpData(perpIds: Hex[]): Promise<Map<Hex, PerpData>>;
3717
+ private fetchMultiplePerpContractData;
3718
+ private fetchUserData;
3719
+ private fetchUserOpenPositions;
3720
+ private fetchUserClosedPositions;
3721
+ private fetchPositionLiveDetailsFromContract;
3722
+ /**
3723
+ * Fetch comprehensive user data with all positions in a single batched request
3724
+ */
3725
+ getUserData(userAddress: Hex): Promise<UserData>;
3726
+ /**
3727
+ * Fetch open position data with live details
3728
+ */
3729
+ getOpenPositionData(perpId: Hex, positionId: bigint): Promise<OpenPositionData>;
3731
3730
  }
3732
3731
 
3733
3732
  declare function priceToSqrtPriceX96(price: number): bigint;
@@ -3747,9 +3746,59 @@ declare const Q96: bigint;
3747
3746
 
3748
3747
  declare function estimateLiquidity(context: PerpCityContext, tickLower: number, tickUpper: number, usdScaled: bigint): Promise<bigint>;
3749
3748
 
3750
- declare const DEPLOYMENTS: {
3751
- [chainId: number]: PerpCityDeployments;
3752
- };
3749
+ /**
3750
+ * Base class for all PerpCity SDK errors
3751
+ */
3752
+ declare class PerpCityError extends Error {
3753
+ readonly cause?: Error | undefined;
3754
+ constructor(message: string, cause?: Error | undefined);
3755
+ }
3756
+ /**
3757
+ * Error thrown when a contract call reverts
3758
+ */
3759
+ declare class ContractError extends PerpCityError {
3760
+ readonly errorName?: string | undefined;
3761
+ readonly args?: readonly unknown[] | undefined;
3762
+ constructor(message: string, errorName?: string | undefined, args?: readonly unknown[] | undefined, cause?: Error);
3763
+ }
3764
+ /**
3765
+ * Error thrown when a transaction is rejected by the user
3766
+ */
3767
+ declare class TransactionRejectedError extends PerpCityError {
3768
+ constructor(message?: string, cause?: Error);
3769
+ }
3770
+ /**
3771
+ * Error thrown when there are insufficient funds
3772
+ */
3773
+ declare class InsufficientFundsError extends PerpCityError {
3774
+ constructor(message?: string, cause?: Error);
3775
+ }
3776
+ /**
3777
+ * Error thrown when a GraphQL query fails
3778
+ */
3779
+ declare class GraphQLError extends PerpCityError {
3780
+ constructor(message: string, cause?: Error);
3781
+ }
3782
+ /**
3783
+ * Error thrown when an RPC call fails
3784
+ */
3785
+ declare class RPCError extends PerpCityError {
3786
+ constructor(message: string, cause?: Error);
3787
+ }
3788
+ /**
3789
+ * Error thrown when validation fails
3790
+ */
3791
+ declare class ValidationError extends PerpCityError {
3792
+ constructor(message: string, cause?: Error);
3793
+ }
3794
+ /**
3795
+ * Parse and format a contract error into a user-friendly message
3796
+ */
3797
+ declare function parseContractError(error: unknown): PerpCityError;
3798
+ /**
3799
+ * Wrap an async function with error handling
3800
+ */
3801
+ declare function withErrorHandling<T>(fn: () => Promise<T>, context: string): Promise<T>;
3753
3802
 
3754
3803
  declare const PERP_MANAGER_ABI: readonly [{
3755
3804
  readonly inputs: readonly [{
@@ -4963,4 +5012,57 @@ declare const BEACON_ABI: readonly [{
4963
5012
  readonly type: "function";
4964
5013
  }];
4965
5014
 
4966
- export { BEACON_ABI, BIGINT_1E6, type Bounds, type ClosePositionParams, type ClosedPosition, type CreatePerpParams, DEPLOYMENTS, type Fees, type LiveDetails, NUMBER_1E6, type OpenInterest, type OpenMakerPositionParams, OpenPosition, type OpenTakerPositionParams, PERP_MANAGER_ABI, Perp, PerpCityContext, type PerpCityContextConfig, type PerpCityDeployments, PerpManager, Q96, type SimulateOpenPositionResults, type TimeSeries, User, approveUsdc, estimateLiquidity, marginRatioToLeverage, priceToSqrtPriceX96, priceToTick, scale6Decimals, scaleFrom6Decimals, scaleFromX96, scaleToX96, sqrtPriceX96ToPrice };
5015
+ declare class OpenPosition {
5016
+ readonly context: PerpCityContext;
5017
+ readonly perpId: Hex;
5018
+ readonly positionId: bigint;
5019
+ readonly isLong?: boolean;
5020
+ readonly isMaker?: boolean;
5021
+ constructor(context: PerpCityContext, perpId: Hex, positionId: bigint, isLong?: boolean, isMaker?: boolean);
5022
+ closePosition(params: ClosePositionParams): Promise<OpenPosition | null>;
5023
+ liveDetails(): Promise<LiveDetails>;
5024
+ }
5025
+
5026
+ declare function getPerpMark(perpData: PerpData): number;
5027
+ declare function getPerpIndex(perpData: PerpData): number;
5028
+ declare function getPerpBeacon(perpData: PerpData): string;
5029
+ declare function getPerpLastIndexUpdate(perpData: PerpData): number;
5030
+ declare function getPerpOpenInterest(perpData: PerpData): OpenInterest;
5031
+ declare function getPerpMarkTimeSeries(perpData: PerpData): TimeSeries<number>[];
5032
+ declare function getPerpIndexTimeSeries(perpData: PerpData): TimeSeries<number>[];
5033
+ declare function getPerpFundingRate(perpData: PerpData): number;
5034
+ declare function getPerpBounds(perpData: PerpData): Bounds;
5035
+ declare function getPerpFees(perpData: PerpData): Fees;
5036
+ declare function getPerpOpenInterestTimeSeries(perpData: PerpData): TimeSeries<OpenInterest>[];
5037
+ declare function getPerpFundingRateTimeSeries(perpData: PerpData): TimeSeries<number>[];
5038
+ declare function getPerpTickSpacing(perpData: PerpData): number;
5039
+ declare function getAllMakerPositions(context: PerpCityContext, perpId: Hex): Promise<OpenPosition[]>;
5040
+ declare function getAllTakerPositions(context: PerpCityContext, perpId: Hex): Promise<OpenPosition[]>;
5041
+ declare function getTotalOpenMakerPnl(context: PerpCityContext, perpId: Hex): Promise<number>;
5042
+ declare function getTotalOpenTakerPnl(context: PerpCityContext, perpId: Hex): Promise<number>;
5043
+
5044
+ declare function getPerps(context: PerpCityContext): Promise<Hex[]>;
5045
+ declare function createPerp(context: PerpCityContext, params: CreatePerpParams): Promise<Hex>;
5046
+ declare function openTakerPosition(context: PerpCityContext, perpId: Hex, params: OpenTakerPositionParams): Promise<OpenPosition>;
5047
+ declare function openMakerPosition(context: PerpCityContext, perpId: Hex, params: OpenMakerPositionParams): Promise<OpenPosition>;
5048
+
5049
+ declare function getUserUsdcBalance(userData: UserData): number;
5050
+ declare function getUserOpenPositions(userData: UserData): OpenPositionData[];
5051
+ declare function getUserClosedPositions(userData: UserData): ClosedPosition[];
5052
+ declare function getUserRealizedPnl(userData: UserData): number;
5053
+ declare function getUserUnrealizedPnl(userData: UserData): number;
5054
+ declare function getUserWalletAddress(userData: UserData): Hex;
5055
+
5056
+ declare function getPositionPerpId(positionData: OpenPositionData): Hex;
5057
+ declare function getPositionId(positionData: OpenPositionData): bigint;
5058
+ declare function getPositionIsLong(positionData: OpenPositionData): boolean | undefined;
5059
+ declare function getPositionIsMaker(positionData: OpenPositionData): boolean | undefined;
5060
+ declare function getPositionLiveDetails(positionData: OpenPositionData): LiveDetails;
5061
+ declare function getPositionPnl(positionData: OpenPositionData): number;
5062
+ declare function getPositionFundingPayment(positionData: OpenPositionData): number;
5063
+ declare function getPositionEffectiveMargin(positionData: OpenPositionData): number;
5064
+ declare function getPositionIsLiquidatable(positionData: OpenPositionData): boolean;
5065
+ declare function closePosition(context: PerpCityContext, perpId: Hex, positionId: bigint, params: ClosePositionParams): Promise<OpenPositionData | null>;
5066
+ declare function getPositionLiveDetailsFromContract(context: PerpCityContext, perpId: Hex, positionId: bigint): Promise<LiveDetails>;
5067
+
5068
+ export { BEACON_ABI, BIGINT_1E6, type Bounds, type CacheConfig, type ClosePositionParams, type ClosedPosition, ContractError, type CreatePerpParams, type Fees, GraphQLError, InsufficientFundsError, type LiveDetails, NUMBER_1E6, type OpenInterest, type OpenMakerPositionParams, OpenPosition, type OpenPositionData, type OpenTakerPositionParams, PERP_MANAGER_ABI, PerpCityContext, type PerpCityContextConfig, type PerpCityDeployments, PerpCityError, type PerpData, Q96, RPCError, type TimeSeries, TransactionRejectedError, type UserData, ValidationError, approveUsdc, closePosition, createPerp, estimateLiquidity, getAllMakerPositions, getAllTakerPositions, getPerpBeacon, getPerpBounds, getPerpFees, getPerpFundingRate, getPerpFundingRateTimeSeries, getPerpIndex, getPerpIndexTimeSeries, getPerpLastIndexUpdate, getPerpMark, getPerpMarkTimeSeries, getPerpOpenInterest, getPerpOpenInterestTimeSeries, getPerpTickSpacing, getPerps, getPositionEffectiveMargin, getPositionFundingPayment, getPositionId, getPositionIsLiquidatable, getPositionIsLong, getPositionIsMaker, getPositionLiveDetails, getPositionLiveDetailsFromContract, getPositionPerpId, getPositionPnl, getTotalOpenMakerPnl, getTotalOpenTakerPnl, getUserClosedPositions, getUserOpenPositions, getUserRealizedPnl, getUserUnrealizedPnl, getUserUsdcBalance, getUserWalletAddress, marginRatioToLeverage, openMakerPosition, openTakerPosition, parseContractError, priceToSqrtPriceX96, priceToTick, scale6Decimals, scaleFrom6Decimals, scaleFromX96, scaleToX96, sqrtPriceX96ToPrice, withErrorHandling };