@stryke-xyz/premarket-sdk 1.0.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.
Files changed (189) hide show
  1. package/dist/abi/AggregationRouterV6.abi.json +1186 -0
  2. package/dist/abi/NativeOrderFactory.abi.json +291 -0
  3. package/dist/abi/NativeOrderImpl.abi.json +381 -0
  4. package/dist/abi/limitOrderProtocol.json +63 -0
  5. package/dist/address.d.ts +13 -0
  6. package/dist/address.js +32 -0
  7. package/dist/api/filler.d.ts +109 -0
  8. package/dist/api/filler.js +289 -0
  9. package/dist/api/index.d.ts +3 -0
  10. package/dist/api/index.js +3 -0
  11. package/dist/api/order-helper.d.ts +59 -0
  12. package/dist/api/order-helper.js +112 -0
  13. package/dist/api/orderbook-api.d.ts +36 -0
  14. package/dist/api/orderbook-api.js +69 -0
  15. package/dist/bps.d.ts +35 -0
  16. package/dist/bps.js +52 -0
  17. package/dist/config/chains.d.ts +50 -0
  18. package/dist/config/chains.js +21 -0
  19. package/dist/config/index.d.ts +25 -0
  20. package/dist/config/index.js +103 -0
  21. package/dist/config/markets.d.ts +53 -0
  22. package/dist/config/markets.js +125 -0
  23. package/dist/constants.d.ts +4 -0
  24. package/dist/constants.js +30 -0
  25. package/dist/index.d.ts +19 -0
  26. package/dist/index.js +21 -0
  27. package/dist/limit-order/amounts.d.ts +14 -0
  28. package/dist/limit-order/amounts.js +19 -0
  29. package/dist/limit-order/eip712/domain.d.ts +10 -0
  30. package/dist/limit-order/eip712/domain.js +18 -0
  31. package/dist/limit-order/eip712/eip712.types.d.ts +23 -0
  32. package/dist/limit-order/eip712/eip712.types.js +1 -0
  33. package/dist/limit-order/eip712/index.d.ts +3 -0
  34. package/dist/limit-order/eip712/index.js +3 -0
  35. package/dist/limit-order/eip712/order-typed-data-builder.d.ts +6 -0
  36. package/dist/limit-order/eip712/order-typed-data-builder.js +25 -0
  37. package/dist/limit-order/extensions/extension-builder.d.ts +35 -0
  38. package/dist/limit-order/extensions/extension-builder.js +83 -0
  39. package/dist/limit-order/extensions/extension.d.ts +45 -0
  40. package/dist/limit-order/extensions/extension.js +108 -0
  41. package/dist/limit-order/extensions/extension.spec.d.ts +1 -0
  42. package/dist/limit-order/extensions/extension.spec.js +17 -0
  43. package/dist/limit-order/extensions/fee-taker/errors.d.ts +2 -0
  44. package/dist/limit-order/extensions/fee-taker/errors.js +2 -0
  45. package/dist/limit-order/extensions/fee-taker/fee-calculator.d.ts +40 -0
  46. package/dist/limit-order/extensions/fee-taker/fee-calculator.js +83 -0
  47. package/dist/limit-order/extensions/fee-taker/fee-calculator.spec.d.ts +1 -0
  48. package/dist/limit-order/extensions/fee-taker/fee-calculator.spec.js +14 -0
  49. package/dist/limit-order/extensions/fee-taker/fee-taker.extension.d.ts +130 -0
  50. package/dist/limit-order/extensions/fee-taker/fee-taker.extension.js +249 -0
  51. package/dist/limit-order/extensions/fee-taker/fee-taker.extension.spec.d.ts +1 -0
  52. package/dist/limit-order/extensions/fee-taker/fee-taker.extension.spec.js +72 -0
  53. package/dist/limit-order/extensions/fee-taker/fees.d.ts +19 -0
  54. package/dist/limit-order/extensions/fee-taker/fees.js +36 -0
  55. package/dist/limit-order/extensions/fee-taker/index.d.ts +7 -0
  56. package/dist/limit-order/extensions/fee-taker/index.js +7 -0
  57. package/dist/limit-order/extensions/fee-taker/integrator-fee.d.ts +13 -0
  58. package/dist/limit-order/extensions/fee-taker/integrator-fee.js +28 -0
  59. package/dist/limit-order/extensions/fee-taker/resolver-fee.d.ts +19 -0
  60. package/dist/limit-order/extensions/fee-taker/resolver-fee.js +28 -0
  61. package/dist/limit-order/extensions/fee-taker/types.d.ts +4 -0
  62. package/dist/limit-order/extensions/fee-taker/types.js +1 -0
  63. package/dist/limit-order/extensions/fee-taker/whitelist-half-address.d.ts +18 -0
  64. package/dist/limit-order/extensions/fee-taker/whitelist-half-address.js +26 -0
  65. package/dist/limit-order/extensions/index.d.ts +3 -0
  66. package/dist/limit-order/extensions/index.js +3 -0
  67. package/dist/limit-order/index.d.ts +10 -0
  68. package/dist/limit-order/index.js +10 -0
  69. package/dist/limit-order/interaction.d.ts +16 -0
  70. package/dist/limit-order/interaction.js +25 -0
  71. package/dist/limit-order/interaction.spec.d.ts +1 -0
  72. package/dist/limit-order/interaction.spec.js +8 -0
  73. package/dist/limit-order/limit-order-with-fee.d.ts +59 -0
  74. package/dist/limit-order/limit-order-with-fee.js +94 -0
  75. package/dist/limit-order/limit-order-with-fee.spec.d.ts +1 -0
  76. package/dist/limit-order/limit-order-with-fee.spec.js +31 -0
  77. package/dist/limit-order/limit-order.d.ts +63 -0
  78. package/dist/limit-order/limit-order.js +211 -0
  79. package/dist/limit-order/limit-order.spec.d.ts +1 -0
  80. package/dist/limit-order/limit-order.spec.js +103 -0
  81. package/dist/limit-order/maker-traits.d.ts +200 -0
  82. package/dist/limit-order/maker-traits.js +309 -0
  83. package/dist/limit-order/maker-traits.spec.d.ts +1 -0
  84. package/dist/limit-order/maker-traits.spec.js +102 -0
  85. package/dist/limit-order/source-track.d.ts +1 -0
  86. package/dist/limit-order/source-track.js +22 -0
  87. package/dist/limit-order/taker-traits.d.ts +141 -0
  88. package/dist/limit-order/taker-traits.js +207 -0
  89. package/dist/limit-order/types.d.ts +24 -0
  90. package/dist/limit-order/types.js +1 -0
  91. package/dist/limit-order/verification.d.ts +16 -0
  92. package/dist/limit-order/verification.js +108 -0
  93. package/dist/limit-order-contract/index.d.ts +4 -0
  94. package/dist/limit-order-contract/index.js +4 -0
  95. package/dist/limit-order-contract/limit-order-contract.d.ts +34 -0
  96. package/dist/limit-order-contract/limit-order-contract.js +79 -0
  97. package/dist/limit-order-contract/native-order-factory.d.ts +10 -0
  98. package/dist/limit-order-contract/native-order-factory.js +22 -0
  99. package/dist/limit-order-contract/native-order-impl.d.ts +10 -0
  100. package/dist/limit-order-contract/native-order-impl.js +24 -0
  101. package/dist/limit-order-contract/proxy-factory.d.ts +20 -0
  102. package/dist/limit-order-contract/proxy-factory.js +32 -0
  103. package/dist/limit-order-contract/proxy-factory.spec.d.ts +1 -0
  104. package/dist/limit-order-contract/proxy-factory.spec.js +16 -0
  105. package/dist/limit-order-contract/types.d.ts +6 -0
  106. package/dist/limit-order-contract/types.js +1 -0
  107. package/dist/ponder/client/index.d.ts +23 -0
  108. package/dist/ponder/client/index.js +44 -0
  109. package/dist/ponder/client/queries/markets.d.ts +30 -0
  110. package/dist/ponder/client/queries/markets.js +200 -0
  111. package/dist/ponder/client/queries/positions.d.ts +13 -0
  112. package/dist/ponder/client/queries/positions.js +406 -0
  113. package/dist/ponder/client/types/history.d.ts +94 -0
  114. package/dist/ponder/client/types/history.js +1 -0
  115. package/dist/ponder/client/types/index.d.ts +5 -0
  116. package/dist/ponder/client/types/index.js +5 -0
  117. package/dist/ponder/client/types/market.d.ts +45 -0
  118. package/dist/ponder/client/types/market.js +1 -0
  119. package/dist/ponder/client/types/position.d.ts +32 -0
  120. package/dist/ponder/client/types/position.js +1 -0
  121. package/dist/ponder/client/types/serializers.d.ts +57 -0
  122. package/dist/ponder/client/types/serializers.js +248 -0
  123. package/dist/ponder/client/types/user.d.ts +5 -0
  124. package/dist/ponder/client/types/user.js +1 -0
  125. package/dist/ponder/client/utils.d.ts +1 -0
  126. package/dist/ponder/client/utils.js +32 -0
  127. package/dist/ponder/generated/index.d.ts +18 -0
  128. package/dist/ponder/generated/index.js +20 -0
  129. package/dist/ponder/generated/runtime/batcher.d.ts +105 -0
  130. package/dist/ponder/generated/runtime/batcher.js +188 -0
  131. package/dist/ponder/generated/runtime/createClient.d.ts +17 -0
  132. package/dist/ponder/generated/runtime/createClient.js +24 -0
  133. package/dist/ponder/generated/runtime/error.d.ts +18 -0
  134. package/dist/ponder/generated/runtime/error.js +15 -0
  135. package/dist/ponder/generated/runtime/fetcher.d.ts +10 -0
  136. package/dist/ponder/generated/runtime/fetcher.js +67 -0
  137. package/dist/ponder/generated/runtime/generateGraphqlOperation.d.ts +30 -0
  138. package/dist/ponder/generated/runtime/generateGraphqlOperation.js +128 -0
  139. package/dist/ponder/generated/runtime/index.d.ts +11 -0
  140. package/dist/ponder/generated/runtime/index.js +10 -0
  141. package/dist/ponder/generated/runtime/linkTypeMap.d.ts +9 -0
  142. package/dist/ponder/generated/runtime/linkTypeMap.js +83 -0
  143. package/dist/ponder/generated/runtime/typeSelection.d.ts +28 -0
  144. package/dist/ponder/generated/runtime/typeSelection.js +3 -0
  145. package/dist/ponder/generated/runtime/types.d.ts +55 -0
  146. package/dist/ponder/generated/runtime/types.js +2 -0
  147. package/dist/ponder/generated/schema.d.ts +3026 -0
  148. package/dist/ponder/generated/schema.js +222 -0
  149. package/dist/ponder/generated/types.d.ts +2393 -0
  150. package/dist/ponder/generated/types.js +6915 -0
  151. package/dist/ponder/index.d.ts +2 -0
  152. package/dist/ponder/index.js +2 -0
  153. package/dist/ponder/types.d.ts +3 -0
  154. package/dist/ponder/types.js +1 -0
  155. package/dist/rfq-order/index.d.ts +1 -0
  156. package/dist/rfq-order/index.js +1 -0
  157. package/dist/rfq-order/rfq-order.d.ts +21 -0
  158. package/dist/rfq-order/rfq-order.js +22 -0
  159. package/dist/rfq-order/rfq-order.spec.d.ts +1 -0
  160. package/dist/rfq-order/rfq-order.spec.js +27 -0
  161. package/dist/shared/index.d.ts +2 -0
  162. package/dist/shared/index.js +2 -0
  163. package/dist/shared/types.d.ts +79 -0
  164. package/dist/shared/types.js +12 -0
  165. package/dist/shared/utils.d.ts +7 -0
  166. package/dist/shared/utils.js +19 -0
  167. package/dist/sync/clients/balance-client.d.ts +41 -0
  168. package/dist/sync/clients/balance-client.js +139 -0
  169. package/dist/sync/clients/base-client.d.ts +47 -0
  170. package/dist/sync/clients/base-client.js +154 -0
  171. package/dist/sync/clients/order-client.d.ts +18 -0
  172. package/dist/sync/clients/order-client.js +151 -0
  173. package/dist/sync/index.d.ts +5 -0
  174. package/dist/sync/index.js +3 -0
  175. package/dist/sync/redis-ws-client.d.ts +18 -0
  176. package/dist/sync/redis-ws-client.js +88 -0
  177. package/dist/sync/types.d.ts +20 -0
  178. package/dist/sync/types.js +1 -0
  179. package/dist/utils/mul-div.d.ts +5 -0
  180. package/dist/utils/mul-div.js +13 -0
  181. package/dist/utils/orderUtils.d.ts +19 -0
  182. package/dist/utils/orderUtils.js +51 -0
  183. package/dist/utils/rand-bigint.d.ts +1 -0
  184. package/dist/utils/rand-bigint.js +13 -0
  185. package/dist/utils/rand-bigint.spec.d.ts +1 -0
  186. package/dist/utils/rand-bigint.spec.js +11 -0
  187. package/dist/validations.d.ts +1 -0
  188. package/dist/validations.js +3 -0
  189. package/package.json +60 -0
@@ -0,0 +1,79 @@
1
+ import { Interface, Signature } from 'ethers';
2
+ import assert from 'assert';
3
+ import LOP_V4_ABI from '../abi/AggregationRouterV6.abi.json' with { type: 'json' };
4
+ import { ZX } from '../constants.js';
5
+ const lopContract = new Interface(LOP_V4_ABI);
6
+ /**
7
+ * @see https://github.com/1inch/limit-order-protocol/blob/3169ea46932ef44114a215a60d1d91ef022b416d/contracts/OrderMixin.sol#L27
8
+ */
9
+ export class LimitOrderContract {
10
+ /**
11
+ * Fill order WITHOUT an extension and taker interaction
12
+ *
13
+ * @see getFillOrderArgsCalldata
14
+ * @see getFillContractOrderCalldata
15
+ */
16
+ static getFillOrderCalldata(order, signature, takerTraits, amount) {
17
+ const { r, yParityAndS: vs } = Signature.from(signature);
18
+ const { args, trait } = takerTraits.encode();
19
+ assert(args === ZX, 'takerTraits contains args data, use LimitOrderContract.getFillOrderArgsCalldata method');
20
+ return lopContract.encodeFunctionData('fillOrder', [
21
+ order,
22
+ r,
23
+ vs,
24
+ amount,
25
+ trait
26
+ ]);
27
+ }
28
+ /**
29
+ * Fill contract order (order maker is smart-contract) WITHOUT an extension and taker interaction
30
+ *
31
+ * @see getFillContractOrderArgsCalldata
32
+ * @see getFillOrderCalldata
33
+ */
34
+ static getFillContractOrderCalldata(order, signature, takerTraits, amount) {
35
+ const { args, trait } = takerTraits.encode();
36
+ assert(args === ZX, 'takerTraits contains args data, use LimitOrderContract.getFillContractOrderArgsCalldata method');
37
+ return lopContract.encodeFunctionData('fillContractOrder', [
38
+ order,
39
+ signature,
40
+ amount,
41
+ trait,
42
+ args
43
+ ]);
44
+ }
45
+ /**
46
+ * Fill order WITH an extension or taker interaction
47
+ *
48
+ * @see getFillOrderCalldata
49
+ * @see getFillContractOrderArgsCalldata
50
+ */
51
+ static getFillOrderArgsCalldata(order, signature, takerTraits, amount) {
52
+ const { r, yParityAndS: vs } = Signature.from(signature);
53
+ const { args, trait } = takerTraits.encode();
54
+ return lopContract.encodeFunctionData('fillOrderArgs', [
55
+ order,
56
+ r,
57
+ vs,
58
+ amount,
59
+ trait,
60
+ args
61
+ ]);
62
+ }
63
+ /**
64
+ * Fill contract order (order maker is smart-contract) WITH an extension or taker interaction
65
+ *
66
+ * @see getFillOrderArgsCalldata
67
+ * @see getFillContractOrderCalldata
68
+ */
69
+ static getFillContractOrderArgsCalldata(order, signature, takerTraits, amount) {
70
+ const { args, trait } = takerTraits.encode();
71
+ return lopContract.encodeFunctionData('fillContractOrderArgs', [
72
+ order,
73
+ signature,
74
+ amount,
75
+ trait,
76
+ args
77
+ ]);
78
+ }
79
+ }
@@ -0,0 +1,10 @@
1
+ import { CallInfo } from './types.js';
2
+ import { LimitOrderV4Struct } from '../limit-order/index.js';
3
+ import { Address } from '../address.js';
4
+ export declare class NativeOrdersFactory {
5
+ readonly address: Address;
6
+ private readonly iface;
7
+ constructor(address: Address);
8
+ static default(chainId: number): NativeOrdersFactory;
9
+ create(maker: Address, order: LimitOrderV4Struct): CallInfo;
10
+ }
@@ -0,0 +1,22 @@
1
+ import { Interface } from 'ethers';
2
+ import ABI from '../abi/NativeOrderFactory.abi.json' with { type: 'json' };
3
+ import { Address } from '../address.js';
4
+ import { getNativeOrderFactoryContract } from '../constants.js';
5
+ export class NativeOrdersFactory {
6
+ constructor(address) {
7
+ this.address = address;
8
+ this.iface = new Interface(ABI);
9
+ }
10
+ static default(chainId) {
11
+ return new NativeOrdersFactory(new Address(getNativeOrderFactoryContract(chainId)));
12
+ }
13
+ create(maker, order) {
14
+ return {
15
+ to: this.address,
16
+ value: BigInt(order.makingAmount),
17
+ data: this.iface.encodeFunctionData('create', [
18
+ { ...order, maker: maker.toString() }
19
+ ])
20
+ };
21
+ }
22
+ }
@@ -0,0 +1,10 @@
1
+ import { CallInfo } from './types.js';
2
+ import { LimitOrderV4Struct } from '../limit-order/index.js';
3
+ import { Address } from '../address.js';
4
+ export declare class NativeOrdersImpl {
5
+ readonly address: Address;
6
+ private readonly iface;
7
+ constructor(address: Address);
8
+ cancel(maker: Address, order: LimitOrderV4Struct): CallInfo;
9
+ cancelExpiredOrderByResolver(maker: Address, order: LimitOrderV4Struct, rewardLimit: bigint): CallInfo;
10
+ }
@@ -0,0 +1,24 @@
1
+ import { Interface } from 'ethers';
2
+ import ABI from '../abi/NativeOrderImpl.abi.json' with { type: 'json' };
3
+ export class NativeOrdersImpl {
4
+ constructor(address) {
5
+ this.address = address;
6
+ this.iface = new Interface(ABI);
7
+ }
8
+ cancel(maker, order) {
9
+ return {
10
+ to: this.address,
11
+ value: 0n,
12
+ data: this.iface.encodeFunctionData('cancelOrder', [
13
+ { ...order, maker: maker.toString() }
14
+ ])
15
+ };
16
+ }
17
+ cancelExpiredOrderByResolver(maker, order, rewardLimit) {
18
+ return {
19
+ to: this.address,
20
+ value: 0n,
21
+ data: this.iface.encodeFunctionData('cancelExpiredOrderByResolver', [{ ...order, maker: maker.toString() }, rewardLimit])
22
+ };
23
+ }
24
+ }
@@ -0,0 +1,20 @@
1
+ import { Address } from '../address.js';
2
+ export declare class ProxyFactory {
3
+ readonly factory: Address;
4
+ readonly implementation: Address;
5
+ constructor(factory: Address, implementation: Address);
6
+ static default(chainId: number): ProxyFactory;
7
+ /**
8
+ * See https://github.com/1inch/cross-chain-swap/blob/03d99b9604d8f7a5a396720fbe1059f7d94db762/contracts/libraries/ProxyHashLib.sol#L14
9
+ */
10
+ private static calcProxyBytecodeHash;
11
+ /**
12
+ * Calculates deterministic address of proxy contract
13
+ *
14
+ * @see https://github.com/OpenZeppelin/openzeppelin-contracts/blob/69c8def5f222ff96f2b5beff05dfba996368aa79/contracts/proxy/Clones.sol#L60
15
+ *
16
+ * @param salt must be valid hex string
17
+ * @returns address of proxy contract
18
+ */
19
+ getProxyAddress(salt: string): Address;
20
+ }
@@ -0,0 +1,32 @@
1
+ import { isHexBytes, trim0x } from '@1inch/byte-utils';
2
+ import { getCreate2Address, keccak256 } from 'ethers';
3
+ import assert from 'assert';
4
+ import { Address } from '../address.js';
5
+ import { getNativeOrderFactoryContract, getNativeOrderImplContract } from '../constants.js';
6
+ export class ProxyFactory {
7
+ constructor(factory, implementation) {
8
+ this.factory = factory;
9
+ this.implementation = implementation;
10
+ }
11
+ static default(chainId) {
12
+ return new ProxyFactory(new Address(getNativeOrderFactoryContract(chainId)), new Address(getNativeOrderImplContract(chainId)));
13
+ }
14
+ /**
15
+ * See https://github.com/1inch/cross-chain-swap/blob/03d99b9604d8f7a5a396720fbe1059f7d94db762/contracts/libraries/ProxyHashLib.sol#L14
16
+ */
17
+ static calcProxyBytecodeHash(impl) {
18
+ return keccak256(`0x3d602d80600a3d3981f3363d3d373d3d3d363d73${trim0x(impl.toString())}5af43d82803e903d91602b57fd5bf3`);
19
+ }
20
+ /**
21
+ * Calculates deterministic address of proxy contract
22
+ *
23
+ * @see https://github.com/OpenZeppelin/openzeppelin-contracts/blob/69c8def5f222ff96f2b5beff05dfba996368aa79/contracts/proxy/Clones.sol#L60
24
+ *
25
+ * @param salt must be valid hex string
26
+ * @returns address of proxy contract
27
+ */
28
+ getProxyAddress(salt) {
29
+ assert(isHexBytes(salt), 'invalid salt');
30
+ return new Address(getCreate2Address(this.factory.toString(), salt, ProxyFactory.calcProxyBytecodeHash(this.implementation)));
31
+ }
32
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,16 @@
1
+ import { Address } from './../address.js';
2
+ import { ProxyFactory } from './proxy-factory.js';
3
+ describe('ProxyFactory', () => {
4
+ it('should correct calc proxy address for Ethereum', () => {
5
+ const facade = new ProxyFactory(new Address('0x4bc5a9d205adf1091d596bc2e1aa0d6b9dc3b12c'), new Address('0xfbc2d33fc6c7fadb155974b847dc04f39010caa9'));
6
+ const salt = '0x3fccfe0035a1010d48c1573e1fc78290082e778619ddb01429af83b5f3faf29c';
7
+ const address = facade.getProxyAddress(salt);
8
+ expect(address).toEqual(new Address('0x762bef5aa97185121b080f6cacb58901fe1e7751'));
9
+ });
10
+ it('should correct calc proxy address 2', () => {
11
+ const facade = new ProxyFactory(new Address('0x584aEaB186D81dbB52a8a14820c573480c3d4773'), new Address('0xddc60c7babfc55d8030f51910b157e179f7a41fc'));
12
+ const salt = '0x7d1798e1fe1eef8c94c50886f476477781a4d56f4126ae8a3a88f5546649d153';
13
+ const address = facade.getProxyAddress(salt);
14
+ expect(address).toEqual(new Address('0xf81af95bb417a82923e5fa001b1e052034026e64'));
15
+ });
16
+ });
@@ -0,0 +1,6 @@
1
+ import { Address } from '../address.js';
2
+ export type CallInfo = {
3
+ data: string;
4
+ to: Address;
5
+ value: bigint;
6
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,23 @@
1
+ import type { PonderClientConfig } from "../types.js";
2
+ import { type MarketData, type MarketPositions } from "./queries/markets.js";
3
+ export * from "./types/index.js";
4
+ export type { MarketData, MarketPositions } from "./queries/markets.js";
5
+ export declare class PonderClient {
6
+ private client;
7
+ constructor(config: PonderClientConfig);
8
+ getMarkets(): Promise<import("./index.js").OptionMarket[]>;
9
+ getMarket(marketId: string): Promise<import("./index.js").OptionMarket | null>;
10
+ getMarketData(marketId: string): Promise<MarketData | null>;
11
+ getMarketPositions(marketId: string): Promise<MarketPositions>;
12
+ getUserCollateralPositions(userAddress: string, marketId: string): Promise<import("./index.js").CollateralPosition[]>;
13
+ getUserOptionPositions(userAddress: string, marketId: string): Promise<import("./index.js").OptionPosition[]>;
14
+ getUserHistories(userAddress: string, marketId: string): Promise<import("./index.js").UserHistories>;
15
+ getAllUserOptionPositions(userAddress: string): Promise<import("./index.js").OptionPosition[]>;
16
+ getAllUserCollateralPositions(userAddress: string): Promise<import("./index.js").CollateralPosition[]>;
17
+ getHourlyVolumes(marketId: string, startTimestamp: bigint, endTimestamp: bigint): Promise<import("./index.js").HourlyVolume[]>;
18
+ get24hVolume(marketId: string, optionId: string): Promise<{
19
+ totalVolume: bigint;
20
+ tradeVolume: bigint;
21
+ tradeCount: number;
22
+ }>;
23
+ }
@@ -0,0 +1,44 @@
1
+ import { createClient } from "../generated/index.js";
2
+ import { getMarkets, getMarket, getMarketData, getMarketPositions, getHourlyVolumes, get24hVolume, } from "./queries/markets.js";
3
+ import { getUserCollateralPositions, getUserOptionPositions, getUserHistories, getAllUserOptionPositions, getAllUserCollateralPositions, } from "./queries/positions.js";
4
+ export * from "./types/index.js";
5
+ export class PonderClient {
6
+ constructor(config) {
7
+ this.client = createClient({
8
+ url: config.graphqlUrl,
9
+ });
10
+ }
11
+ async getMarkets() {
12
+ return getMarkets(this.client);
13
+ }
14
+ async getMarket(marketId) {
15
+ return getMarket(this.client, marketId);
16
+ }
17
+ async getMarketData(marketId) {
18
+ return getMarketData(this.client, marketId);
19
+ }
20
+ async getMarketPositions(marketId) {
21
+ return getMarketPositions(this.client, marketId);
22
+ }
23
+ async getUserCollateralPositions(userAddress, marketId) {
24
+ return getUserCollateralPositions(this.client, userAddress, marketId);
25
+ }
26
+ async getUserOptionPositions(userAddress, marketId) {
27
+ return getUserOptionPositions(this.client, userAddress, marketId);
28
+ }
29
+ async getUserHistories(userAddress, marketId) {
30
+ return getUserHistories(this.client, userAddress, marketId);
31
+ }
32
+ async getAllUserOptionPositions(userAddress) {
33
+ return getAllUserOptionPositions(this.client, userAddress);
34
+ }
35
+ async getAllUserCollateralPositions(userAddress) {
36
+ return getAllUserCollateralPositions(this.client, userAddress);
37
+ }
38
+ async getHourlyVolumes(marketId, startTimestamp, endTimestamp) {
39
+ return getHourlyVolumes(this.client, marketId, startTimestamp, endTimestamp);
40
+ }
41
+ async get24hVolume(marketId, optionId) {
42
+ return get24hVolume(this.client, marketId, optionId);
43
+ }
44
+ }
@@ -0,0 +1,30 @@
1
+ import type { Client } from "../../generated/index.js";
2
+ import type { OptionMarket, CollateralPosition, OptionPosition, HourlyVolume } from "../types/index.js";
3
+ export interface MarketData {
4
+ market: OptionMarket;
5
+ collateralPositions: CollateralPosition[];
6
+ optionPositions: OptionPosition[];
7
+ }
8
+ export declare function getMarketData(client: Client, marketId: string): Promise<MarketData | null>;
9
+ export declare function getMarkets(client: Client): Promise<OptionMarket[]>;
10
+ export declare function getMarket(client: Client, marketId: string): Promise<OptionMarket | null>;
11
+ export interface MarketPositions {
12
+ collateralPositions: CollateralPosition[];
13
+ optionPositions: OptionPosition[];
14
+ }
15
+ export declare function getMarketPositions(client: Client, marketId: string): Promise<MarketPositions>;
16
+ /**
17
+ * Get hourly volume data for a market within a time range
18
+ * @param marketId - The market ID
19
+ * @param startTimestamp - Start of the time range (unix timestamp)
20
+ * @param endTimestamp - End of the time range (unix timestamp)
21
+ */
22
+ export declare function getHourlyVolumes(client: Client, marketId: string, startTimestamp: bigint, endTimestamp: bigint): Promise<HourlyVolume[]>;
23
+ /**
24
+ * Get 24h volume for a specific band (optionId)
25
+ */
26
+ export declare function get24hVolume(client: Client, marketId: string, optionId: string): Promise<{
27
+ totalVolume: bigint;
28
+ tradeVolume: bigint;
29
+ tradeCount: number;
30
+ }>;
@@ -0,0 +1,200 @@
1
+ import { convertBigIntFields } from "../utils.js";
2
+ import { serializeOptionMarket, serializeCollateralPosition, serializeOptionPosition, serializeHourlyVolume, } from "../types/serializers.js";
3
+ export async function getMarketData(client, marketId) {
4
+ const result = await client.query({
5
+ optionMarket: {
6
+ __args: { id: marketId },
7
+ id: true,
8
+ callToken: true,
9
+ putToken: true,
10
+ expiry: true,
11
+ maxTTL: true,
12
+ strategy: {
13
+ id: true,
14
+ finalFDV: true,
15
+ deadline: true,
16
+ bandPrecision: true,
17
+ collateralPerBandPrecision: true,
18
+ premiumRate: true,
19
+ depositFeeRate: true,
20
+ purchaseFeeRate: true,
21
+ settlementFeeRate: true,
22
+ collateralToken: true,
23
+ },
24
+ collateralToken: true,
25
+ totalCollateral: true,
26
+ totalCollateralAmount: true,
27
+ protocolFees: true,
28
+ collateralPositions: {
29
+ __args: { where: { optionMarketId: marketId }, limit: 1000 },
30
+ items: {
31
+ id: true,
32
+ totalCollateral: true,
33
+ optionsMinted: true,
34
+ optionsExercised: true,
35
+ settled: true,
36
+ fee: true,
37
+ },
38
+ },
39
+ optionPositions: {
40
+ __args: { where: { optionMarketId: marketId }, limit: 1000 },
41
+ items: {
42
+ id: true,
43
+ address: true,
44
+ premium: true,
45
+ fee: true,
46
+ profit: true,
47
+ amount: true,
48
+ averagePrice: true,
49
+ },
50
+ },
51
+ },
52
+ });
53
+ if (!result.optionMarket)
54
+ return null;
55
+ const converted = convertBigIntFields({
56
+ market: result.optionMarket,
57
+ collateralPositions: result.optionMarket.collateralPositions?.items || [],
58
+ optionPositions: result.optionMarket.optionPositions?.items || [],
59
+ });
60
+ const marketData = converted;
61
+ return {
62
+ market: serializeOptionMarket(marketData.market),
63
+ collateralPositions: marketData.collateralPositions.map(serializeCollateralPosition),
64
+ optionPositions: marketData.optionPositions.map(serializeOptionPosition),
65
+ };
66
+ }
67
+ export async function getMarkets(client) {
68
+ const result = await client.query({
69
+ optionMarkets: {
70
+ __args: {},
71
+ items: {
72
+ id: true,
73
+ callToken: true,
74
+ putToken: true,
75
+ expiry: true,
76
+ maxTTL: true,
77
+ strategy: {
78
+ id: true,
79
+ finalFDV: true,
80
+ deadline: true,
81
+ bandPrecision: true,
82
+ collateralPerBandPrecision: true,
83
+ premiumRate: true,
84
+ depositFeeRate: true,
85
+ purchaseFeeRate: true,
86
+ settlementFeeRate: true,
87
+ collateralToken: true,
88
+ },
89
+ collateralToken: true,
90
+ totalCollateral: true,
91
+ totalCollateralAmount: true,
92
+ protocolFees: true,
93
+ },
94
+ },
95
+ });
96
+ const converted = convertBigIntFields(result.optionMarkets.items || []);
97
+ if (!Array.isArray(converted)) {
98
+ throw new Error("Expected array of markets");
99
+ }
100
+ return converted.map((item) => serializeOptionMarket(item));
101
+ }
102
+ export async function getMarket(client, marketId) {
103
+ const result = await client.query({
104
+ optionMarket: {
105
+ __args: { id: marketId },
106
+ id: true,
107
+ callToken: true,
108
+ putToken: true,
109
+ expiry: true,
110
+ maxTTL: true,
111
+ strategy: {
112
+ id: true,
113
+ finalFDV: true,
114
+ deadline: true,
115
+ bandPrecision: true,
116
+ collateralPerBandPrecision: true,
117
+ premiumRate: true,
118
+ depositFeeRate: true,
119
+ purchaseFeeRate: true,
120
+ settlementFeeRate: true,
121
+ collateralToken: true,
122
+ },
123
+ collateralToken: true,
124
+ totalCollateral: true,
125
+ totalCollateralAmount: true,
126
+ protocolFees: true,
127
+ },
128
+ });
129
+ if (!result.optionMarket)
130
+ return null;
131
+ const converted = convertBigIntFields(result.optionMarket);
132
+ return serializeOptionMarket(converted);
133
+ }
134
+ export async function getMarketPositions(client, marketId) {
135
+ const marketData = await getMarketData(client, marketId);
136
+ if (!marketData) {
137
+ return { collateralPositions: [], optionPositions: [] };
138
+ }
139
+ return {
140
+ collateralPositions: marketData.collateralPositions,
141
+ optionPositions: marketData.optionPositions,
142
+ };
143
+ }
144
+ /**
145
+ * Get hourly volume data for a market within a time range
146
+ * @param marketId - The market ID
147
+ * @param startTimestamp - Start of the time range (unix timestamp)
148
+ * @param endTimestamp - End of the time range (unix timestamp)
149
+ */
150
+ export async function getHourlyVolumes(client, marketId, startTimestamp, endTimestamp) {
151
+ const result = await client.query({
152
+ hourlyVolumes: {
153
+ __args: {
154
+ where: {
155
+ marketId: BigInt(marketId),
156
+ hourTimestamp_gte: startTimestamp,
157
+ hourTimestamp_lte: endTimestamp,
158
+ },
159
+ limit: 1000,
160
+ },
161
+ items: {
162
+ id: true,
163
+ marketId: true,
164
+ optionId: true,
165
+ hourTimestamp: true,
166
+ depositVolume: true,
167
+ tradeVolume: true,
168
+ unwindVolume: true,
169
+ withdrawVolume: true,
170
+ exerciseVolume: true,
171
+ totalVolume: true,
172
+ tradeCount: true,
173
+ },
174
+ },
175
+ });
176
+ const converted = convertBigIntFields(result.hourlyVolumes?.items || []);
177
+ if (!Array.isArray(converted)) {
178
+ throw new Error("Expected array of hourly volumes");
179
+ }
180
+ return converted.map((item) => serializeHourlyVolume(item));
181
+ }
182
+ /**
183
+ * Get 24h volume for a specific band (optionId)
184
+ */
185
+ export async function get24hVolume(client, marketId, optionId) {
186
+ const now = BigInt(Math.floor(Date.now() / 1000));
187
+ const twentyFourHoursAgo = now - 86400n;
188
+ const volumes = await getHourlyVolumes(client, marketId, twentyFourHoursAgo, now);
189
+ // Filter by optionId and sum
190
+ const bandVolumes = volumes.filter((v) => v.optionId === optionId);
191
+ let totalVolume = 0n;
192
+ let tradeVolume = 0n;
193
+ let tradeCount = 0;
194
+ for (const v of bandVolumes) {
195
+ totalVolume += v.totalVolume;
196
+ tradeVolume += v.tradeVolume;
197
+ tradeCount += v.tradeCount;
198
+ }
199
+ return { totalVolume, tradeVolume, tradeCount };
200
+ }
@@ -0,0 +1,13 @@
1
+ import type { Client } from "../../generated/index.js";
2
+ import type { CollateralPosition, OptionPosition, UserHistories } from "../types/index.js";
3
+ export declare function getUserCollateralPositions(client: Client, userAddress: string, marketId: string): Promise<CollateralPosition[]>;
4
+ export declare function getUserOptionPositions(client: Client, userAddress: string, marketId: string): Promise<OptionPosition[]>;
5
+ /**
6
+ * Get all user option positions across all markets
7
+ */
8
+ export declare function getAllUserOptionPositions(client: Client, userAddress: string): Promise<OptionPosition[]>;
9
+ /**
10
+ * Get all user collateral positions across all markets
11
+ */
12
+ export declare function getAllUserCollateralPositions(client: Client, userAddress: string): Promise<CollateralPosition[]>;
13
+ export declare function getUserHistories(client: Client, userAddress: string, marketId: string): Promise<UserHistories>;