@contextwtf/sdk 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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/config.ts","../src/errors.ts","../src/http.ts","../src/signing/eip712.ts","../src/constants.ts","../src/order-builder/helpers.ts","../src/order-builder/builder.ts","../src/endpoints.ts","../src/modules/markets.ts","../src/modules/orders.ts","../src/modules/portfolio.ts","../src/modules/account.ts","../src/client.ts"],"sourcesContent":["import type { Address } from \"viem\";\n\n// ─── API ───\n\nexport const API_BASE = \"https://api-testnet.context.markets/v2\";\n\n// ─── Contract Addresses (Base Sepolia) ───\n\nexport const SETTLEMENT_ADDRESS: Address =\n \"0xABfB9e3Dc252D59e4e4A3c3537D96F3F207C9b2c\";\nexport const HOLDINGS_ADDRESS: Address =\n \"0x769341425095155C0A0620eBC308d4C05980B84a\";\nexport const USDC_ADDRESS: Address =\n \"0xBbee2756d3169CF7065e5E9C4A5EA9b1D1Fd415e\";\nexport const PERMIT2_ADDRESS: Address =\n \"0x000000000022D473030F116dDEE9F6B43aC78BA3\";\n\nexport const CHAIN_ID = 84532; // Base Sepolia\n\n// ─── EIP-712 Domain ───\n\nexport const EIP712_DOMAIN = {\n name: \"Settlement\" as const,\n version: \"1\" as const,\n chainId: CHAIN_ID,\n verifyingContract: SETTLEMENT_ADDRESS,\n} as const;\n\n// ─── EIP-712 Types ───\n\nexport const ORDER_TYPES = {\n Order: [\n { name: \"marketId\", type: \"bytes32\" },\n { name: \"trader\", type: \"address\" },\n { name: \"price\", type: \"uint256\" },\n { name: \"size\", type: \"uint256\" },\n { name: \"outcomeIndex\", type: \"uint8\" },\n { name: \"side\", type: \"uint8\" },\n { name: \"nonce\", type: \"bytes32\" },\n { name: \"expiry\", type: \"uint256\" },\n { name: \"maxFee\", type: \"uint256\" },\n { name: \"makerRoleConstraint\", type: \"uint8\" },\n { name: \"inventoryModeConstraint\", type: \"uint8\" },\n ],\n} as const;\n\nexport const MARKET_ORDER_INTENT_TYPES = {\n MarketOrderIntent: [\n { name: \"marketId\", type: \"bytes32\" },\n { name: \"trader\", type: \"address\" },\n { name: \"maxSize\", type: \"uint256\" },\n { name: \"maxPrice\", type: \"uint256\" },\n { name: \"outcomeIndex\", type: \"uint8\" },\n { name: \"side\", type: \"uint8\" },\n { name: \"nonce\", type: \"bytes32\" },\n { name: \"expiry\", type: \"uint256\" },\n { name: \"maxFee\", type: \"uint256\" },\n ],\n} as const;\n\nexport const CANCEL_TYPES = {\n CancelNonce: [\n { name: \"trader\", type: \"address\" },\n { name: \"nonce\", type: \"bytes32\" },\n ],\n} as const;\n\n// ─── EIP-712 Domains (gasless) ───\n\nexport const HOLDINGS_EIP712_DOMAIN = {\n name: \"Holdings\",\n version: \"1\",\n chainId: CHAIN_ID,\n verifyingContract: HOLDINGS_ADDRESS,\n} as const;\n\nexport const PERMIT2_EIP712_DOMAIN = {\n name: \"Permit2\" as const,\n chainId: CHAIN_ID,\n verifyingContract: PERMIT2_ADDRESS,\n} as const;\n\n// ─── EIP-712 Types (gasless) ───\n\nexport const OPERATOR_APPROVAL_TYPES = {\n OperatorApproval: [\n { name: \"user\", type: \"address\" },\n { name: \"operator\", type: \"address\" },\n { name: \"approved\", type: \"bool\" },\n { name: \"nonce\", type: \"uint256\" },\n { name: \"deadline\", type: \"uint256\" },\n ],\n} as const;\n\nexport const PERMIT_TRANSFER_FROM_TYPES = {\n TokenPermissions: [\n { name: \"token\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n ],\n PermitTransferFrom: [\n { name: \"permitted\", type: \"TokenPermissions\" },\n { name: \"spender\", type: \"address\" },\n { name: \"nonce\", type: \"uint256\" },\n { name: \"deadline\", type: \"uint256\" },\n ],\n} as const;\n\n// ─── ABIs (minimal, for wallet setup) ───\n\nexport const ERC20_ABI = [\n {\n name: \"approve\",\n type: \"function\",\n stateMutability: \"nonpayable\",\n inputs: [\n { name: \"spender\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n ],\n outputs: [{ name: \"\", type: \"bool\" }],\n },\n {\n name: \"allowance\",\n type: \"function\",\n stateMutability: \"view\",\n inputs: [\n { name: \"owner\", type: \"address\" },\n { name: \"spender\", type: \"address\" },\n ],\n outputs: [{ name: \"\", type: \"uint256\" }],\n },\n] as const;\n\nexport const HOLDINGS_ABI = [\n {\n name: \"balanceOf\",\n type: \"function\",\n stateMutability: \"view\",\n inputs: [\n { name: \"user\", type: \"address\" },\n { name: \"token\", type: \"address\" },\n ],\n outputs: [{ name: \"\", type: \"uint256\" }],\n },\n {\n name: \"setOperator\",\n type: \"function\",\n stateMutability: \"nonpayable\",\n inputs: [\n { name: \"operator\", type: \"address\" },\n { name: \"approved\", type: \"bool\" },\n ],\n outputs: [{ name: \"\", type: \"bool\" }],\n },\n {\n name: \"isOperatorFor\",\n type: \"function\",\n stateMutability: \"view\",\n inputs: [\n { name: \"owner\", type: \"address\" },\n { name: \"operator\", type: \"address\" },\n ],\n outputs: [{ name: \"\", type: \"bool\" }],\n },\n {\n name: \"deposit\",\n type: \"function\",\n stateMutability: \"nonpayable\",\n inputs: [\n { name: \"token\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n ],\n outputs: [],\n },\n {\n name: \"withdraw\",\n type: \"function\",\n stateMutability: \"nonpayable\",\n inputs: [\n { name: \"token\", type: \"address\" },\n { name: \"amount\", type: \"uint256\" },\n ],\n outputs: [],\n },\n] as const;\n\nexport const SETTLEMENT_ABI = [\n {\n name: \"mintCompleteSetsFromHoldings\",\n type: \"function\",\n stateMutability: \"nonpayable\",\n inputs: [\n { name: \"marketId\", type: \"bytes32\" },\n { name: \"amount\", type: \"uint256\" },\n ],\n outputs: [],\n },\n {\n name: \"burnCompleteSetsFromHoldings\",\n type: \"function\",\n stateMutability: \"nonpayable\",\n inputs: [\n { name: \"marketId\", type: \"bytes32\" },\n { name: \"amount\", type: \"uint256\" },\n { name: \"recipient\", type: \"address\" },\n { name: \"creditInternal\", type: \"bool\" },\n ],\n outputs: [],\n },\n] as const;\n\nexport const OPERATOR_NONCE_ABI = [\n {\n name: \"operatorNonce\",\n type: \"function\",\n stateMutability: \"view\",\n inputs: [{ name: \"user\", type: \"address\" }],\n outputs: [{ name: \"\", type: \"uint256\" }],\n },\n] as const;\n","export class ContextApiError extends Error {\n readonly status: number;\n readonly body: unknown;\n\n constructor(status: number, body: unknown) {\n const message =\n typeof body === \"object\" && body !== null && \"message\" in body\n ? String((body as { message: string }).message)\n : `API request failed with status ${status}`;\n super(message);\n this.name = \"ContextApiError\";\n this.status = status;\n this.body = body;\n }\n}\n\nexport class ContextSigningError extends Error {\n constructor(message: string, cause?: unknown) {\n super(message);\n this.name = \"ContextSigningError\";\n if (cause) this.cause = cause;\n }\n}\n\nexport class ContextConfigError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"ContextConfigError\";\n }\n}\n","import { API_BASE } from \"./config.js\";\nimport { ContextApiError } from \"./errors.js\";\n\ntype FetchFn = (input: string, init?: RequestInit) => Promise<Response>;\n\nexport interface HttpClientOptions {\n apiKey?: string;\n baseUrl?: string;\n fetch?: FetchFn;\n}\n\nexport interface HttpClient {\n get<T = unknown>(\n path: string,\n params?: Record<string, string | number | undefined>,\n ): Promise<T>;\n post<T = unknown>(path: string, body: unknown): Promise<T>;\n delete<T = unknown>(path: string, body?: unknown): Promise<T>;\n}\n\nexport function createHttpClient(options: HttpClientOptions = {}): HttpClient {\n const apiKey = options.apiKey;\n const baseUrl = options.baseUrl ?? API_BASE;\n const fetchFn: FetchFn =\n options.fetch ?? (globalThis as any).fetch.bind(globalThis);\n\n function headers(): Record<string, string> {\n const h: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n if (apiKey) {\n h[\"Authorization\"] = `Bearer ${apiKey}`;\n }\n return h;\n }\n\n async function request<T>(\n method: string,\n url: string,\n body?: unknown,\n ): Promise<T> {\n const init: RequestInit = { method, headers: headers() };\n if (body !== undefined) {\n init.body = JSON.stringify(body);\n }\n\n const res = await fetchFn(url, init);\n\n if (!res.ok) {\n const respBody = await res.json().catch(() => null);\n throw new ContextApiError(res.status, respBody);\n }\n\n return res.json() as Promise<T>;\n }\n\n return {\n async get<T = unknown>(\n path: string,\n params?: Record<string, string | number | undefined>,\n ): Promise<T> {\n let url = `${baseUrl}${path}`;\n if (params) {\n const searchParams: string[] = [];\n for (const [k, v] of Object.entries(params)) {\n if (v !== undefined) {\n searchParams.push(\n `${encodeURIComponent(k)}=${encodeURIComponent(String(v))}`,\n );\n }\n }\n if (searchParams.length > 0) {\n url += `?${searchParams.join(\"&\")}`;\n }\n }\n return request<T>(\"GET\", url);\n },\n\n async post<T = unknown>(path: string, body: unknown): Promise<T> {\n return request<T>(\"POST\", `${baseUrl}${path}`, body);\n },\n\n async delete<T = unknown>(path: string, body?: unknown): Promise<T> {\n return request<T>(\"DELETE\", `${baseUrl}${path}`, body);\n },\n };\n}\n","import {\n type Account,\n type Address,\n type Hex,\n type WalletClient,\n createWalletClient,\n http,\n keccak256,\n toBytes,\n} from \"viem\";\nimport { privateKeyToAccount } from \"viem/accounts\";\nimport { baseSepolia } from \"viem/chains\";\nimport {\n EIP712_DOMAIN,\n ORDER_TYPES,\n MARKET_ORDER_INTENT_TYPES,\n CANCEL_TYPES,\n} from \"../config.js\";\nimport { ContextSigningError } from \"../errors.js\";\nimport type { SignerInput } from \"../types.js\";\n\nexport interface OrderMessage {\n marketId: Hex;\n trader: Address;\n price: bigint;\n size: bigint;\n outcomeIndex: number;\n side: number;\n nonce: Hex;\n expiry: bigint;\n maxFee: bigint;\n makerRoleConstraint: number;\n inventoryModeConstraint: number;\n}\n\nexport function resolveSigner(input: SignerInput): {\n account: Account;\n walletClient: WalletClient;\n} {\n if (\"privateKey\" in input) {\n const account = privateKeyToAccount(input.privateKey);\n const walletClient = createWalletClient({\n account,\n chain: baseSepolia,\n transport: http(),\n });\n return { account, walletClient };\n }\n\n if (\"account\" in input) {\n const walletClient = createWalletClient({\n account: input.account,\n chain: baseSepolia,\n transport: http(),\n });\n return { account: input.account, walletClient };\n }\n\n if (\"walletClient\" in input) {\n const account = input.walletClient.account;\n if (!account) {\n throw new ContextSigningError(\n \"WalletClient must have an account configured\",\n );\n }\n return { account, walletClient: input.walletClient };\n }\n\n throw new ContextSigningError(\"Invalid signer input\");\n}\n\nexport function randomNonce(): Hex {\n return keccak256(toBytes(`${Date.now()}_${Math.random()}`));\n}\n\nexport async function signOrder(\n walletClient: WalletClient,\n account: Account,\n order: OrderMessage,\n): Promise<Hex> {\n try {\n return await walletClient.signTypedData({\n account,\n domain: EIP712_DOMAIN,\n types: ORDER_TYPES,\n primaryType: \"Order\",\n message: order,\n });\n } catch (err) {\n throw new ContextSigningError(\"Failed to sign order\", err);\n }\n}\n\nexport interface MarketOrderIntentMessage {\n marketId: Hex;\n trader: Address;\n maxPrice: bigint;\n maxSize: bigint;\n outcomeIndex: number;\n side: number;\n nonce: Hex;\n expiry: bigint;\n maxFee: bigint;\n}\n\nexport async function signMarketOrderIntent(\n walletClient: WalletClient,\n account: Account,\n intent: MarketOrderIntentMessage,\n): Promise<Hex> {\n try {\n return await walletClient.signTypedData({\n account,\n domain: EIP712_DOMAIN,\n types: MARKET_ORDER_INTENT_TYPES,\n primaryType: \"MarketOrderIntent\",\n message: intent,\n });\n } catch (err) {\n throw new ContextSigningError(\"Failed to sign market order intent\", err);\n }\n}\n\nexport async function signCancel(\n walletClient: WalletClient,\n account: Account,\n trader: Address,\n nonce: Hex,\n): Promise<Hex> {\n try {\n return await walletClient.signTypedData({\n account,\n domain: EIP712_DOMAIN,\n types: CANCEL_TYPES,\n primaryType: \"CancelNonce\",\n message: { trader, nonce },\n });\n } catch (err) {\n throw new ContextSigningError(\"Failed to sign cancel\", err);\n }\n}\n","/** Price: cents to on-chain (x 10,000) */\nexport const PRICE_MULTIPLIER = 10_000n;\n\n/** Size: shares to on-chain (x 1,000,000) */\nexport const SIZE_MULTIPLIER = 1_000_000n;\n\n/** Fee divisor: 1% of notional */\nexport const FEE_DIVISOR = 100n;\n\n/** Default order expiry in seconds (1 year) */\nexport const DEFAULT_EXPIRY_SECONDS = 31_536_000;\n","import {\n PRICE_MULTIPLIER,\n SIZE_MULTIPLIER,\n FEE_DIVISOR,\n} from \"../constants.js\";\n\n/**\n * Convert price in cents (1-99) to on-chain representation.\n * Example: 25 cents -> 250_000n\n */\nexport function encodePriceCents(priceCents: number): bigint {\n if (priceCents < 1 || priceCents > 99) {\n throw new RangeError(`priceCents must be 1-99, got ${priceCents}`);\n }\n return BigInt(Math.round(priceCents * Number(PRICE_MULTIPLIER)));\n}\n\n/**\n * Convert size in shares to on-chain representation.\n * Example: 10 shares -> 10_000_000n\n */\nexport function encodeSize(size: number): bigint {\n if (size < 0.01) {\n throw new RangeError(`size must be >= 0.01, got ${size}`);\n }\n return BigInt(Math.round(size * Number(SIZE_MULTIPLIER)));\n}\n\n/**\n * Calculate max fee: 1% of notional, minimum 1n.\n * notional = price x size (in on-chain units)\n */\nexport function calculateMaxFee(price: bigint, size: bigint): bigint {\n const fee = (price * size) / FEE_DIVISOR / SIZE_MULTIPLIER;\n return fee < 1n ? 1n : fee;\n}\n\n/** Decode on-chain price back to cents. */\nexport function decodePriceCents(raw: bigint): number {\n return Number(raw) / Number(PRICE_MULTIPLIER);\n}\n\n/** Decode on-chain size back to shares. */\nexport function decodeSize(raw: bigint): number {\n return Number(raw) / Number(SIZE_MULTIPLIER);\n}\n","import type { Account, Address, Hex, WalletClient } from \"viem\";\nimport { DEFAULT_EXPIRY_SECONDS } from \"../constants.js\";\nimport {\n randomNonce,\n signOrder,\n signMarketOrderIntent,\n signCancel,\n type OrderMessage,\n type MarketOrderIntentMessage,\n} from \"../signing/eip712.js\";\nimport { encodePriceCents, encodeSize, calculateMaxFee } from \"./helpers.js\";\nimport type { PlaceOrderRequest, PlaceMarketOrderRequest } from \"../types.js\";\n\nexport interface SignedOrder {\n type: \"limit\";\n marketId: Hex;\n trader: Address;\n price: string;\n size: string;\n outcomeIndex: number;\n side: number;\n nonce: Hex;\n expiry: string;\n maxFee: string;\n makerRoleConstraint: number;\n inventoryModeConstraint: number;\n signature: Hex;\n}\n\nexport interface SignedMarketOrder {\n type: \"market\";\n marketId: Hex;\n trader: Address;\n maxPrice: string;\n maxSize: string;\n outcomeIndex: number;\n side: number;\n nonce: Hex;\n expiry: string;\n maxFee: string;\n signature: Hex;\n}\n\nexport class OrderBuilder {\n constructor(\n private readonly walletClient: WalletClient,\n private readonly account: Account,\n ) {}\n\n get address(): Address {\n return this.account.address;\n }\n\n async buildAndSign(req: PlaceOrderRequest): Promise<SignedOrder> {\n const price = encodePriceCents(req.priceCents);\n const size = encodeSize(req.size);\n const maxFee = calculateMaxFee(price, size);\n const nonce = randomNonce();\n const expirySeconds = req.expirySeconds ?? DEFAULT_EXPIRY_SECONDS;\n const expiry = BigInt(Math.floor(Date.now() / 1000) + expirySeconds);\n\n const order: OrderMessage = {\n marketId: req.marketId as Hex,\n trader: this.address,\n price,\n size,\n outcomeIndex: req.outcome === \"yes\" ? 1 : 0,\n side: req.side === \"buy\" ? 0 : 1,\n nonce,\n expiry,\n maxFee,\n makerRoleConstraint: req.makerRoleConstraint ?? 0,\n inventoryModeConstraint: req.inventoryModeConstraint ?? 0,\n };\n\n const signature = await signOrder(this.walletClient, this.account, order);\n\n return {\n type: \"limit\",\n ...order,\n price: order.price.toString(),\n size: order.size.toString(),\n expiry: order.expiry.toString(),\n maxFee: order.maxFee.toString(),\n signature,\n };\n }\n\n async buildAndSignMarket(req: PlaceMarketOrderRequest): Promise<SignedMarketOrder> {\n const maxPrice = encodePriceCents(req.maxPriceCents);\n const maxSize = encodeSize(req.maxSize);\n const maxFee = calculateMaxFee(maxPrice, maxSize);\n const nonce = randomNonce();\n const expirySeconds = req.expirySeconds ?? DEFAULT_EXPIRY_SECONDS;\n const expiry = BigInt(Math.floor(Date.now() / 1000) + expirySeconds);\n\n const intent: MarketOrderIntentMessage = {\n marketId: req.marketId as Hex,\n trader: this.address,\n maxPrice,\n maxSize,\n outcomeIndex: req.outcome === \"yes\" ? 1 : 0,\n side: req.side === \"buy\" ? 0 : 1,\n nonce,\n expiry,\n maxFee,\n };\n\n const signature = await signMarketOrderIntent(\n this.walletClient,\n this.account,\n intent,\n );\n\n return {\n type: \"market\",\n ...intent,\n maxPrice: intent.maxPrice.toString(),\n maxSize: intent.maxSize.toString(),\n expiry: intent.expiry.toString(),\n maxFee: intent.maxFee.toString(),\n signature,\n };\n }\n\n async signCancel(nonce: Hex): Promise<Hex> {\n return signCancel(\n this.walletClient,\n this.account,\n this.address,\n nonce,\n );\n }\n}\n","export const ENDPOINTS = {\n markets: {\n list: \"/markets\",\n get: (id: string) => `/markets/${id}` as const,\n quotes: (id: string) => `/markets/${id}/quotes` as const,\n orderbook: (id: string) => `/markets/${id}/orderbook` as const,\n simulate: (id: string) => `/markets/${id}/simulate` as const,\n prices: (id: string) => `/markets/${id}/prices` as const,\n oracle: (id: string) => `/markets/${id}/oracle` as const,\n oracleQuotes: (id: string) => `/markets/${id}/oracle/quotes` as const,\n activity: (id: string) => `/markets/${id}/activity` as const,\n },\n orders: {\n create: \"/orders\",\n list: \"/orders\",\n recent: \"/orders/recent\",\n get: (id: string) => `/orders/${id}` as const,\n cancel: \"/orders/cancels\",\n cancelReplace: \"/orders/cancel-replace\",\n simulate: \"/orders/simulate\",\n bulk: \"/orders/bulk\",\n bulkCreate: \"/orders/bulk/create\",\n bulkCancel: \"/orders/bulk/cancel\",\n },\n portfolio: {\n get: (address: string) => `/portfolio/${address}` as const,\n claimable: (address: string) =>\n `/portfolio/${address}/claimable` as const,\n stats: (address: string) => `/portfolio/${address}/stats` as const,\n },\n balance: {\n get: (address: string) => `/balance/${address}` as const,\n tokenBalance: \"/balance\",\n settlement: \"/balance/settlement\",\n mintTestUsdc: \"/balance/mint-test-usdc\",\n },\n activity: {\n global: \"/activity\",\n },\n gasless: {\n operator: \"/gasless/operator\",\n depositWithPermit: \"/gasless/deposit-with-permit\",\n },\n} as const;\n","import type { HttpClient } from \"../http.js\";\nimport { ENDPOINTS } from \"../endpoints.js\";\nimport type {\n Market,\n MarketList,\n Quotes,\n Orderbook,\n FullOrderbook,\n SimulateTradeParams,\n SimulateResult,\n PriceHistory,\n OracleResponse,\n OracleQuotesResponse,\n OracleQuoteRequestResult,\n ActivityResponse,\n SearchMarketsParams,\n GetOrderbookParams,\n GetPriceHistoryParams,\n GetActivityParams,\n} from \"../types.js\";\n\nexport class Markets {\n constructor(private readonly http: HttpClient) {}\n\n async list(params?: SearchMarketsParams): Promise<MarketList> {\n return this.http.get<MarketList>(ENDPOINTS.markets.list, {\n search: params?.query,\n status: params?.status,\n sortBy: params?.sortBy,\n sort: params?.sort,\n limit: params?.limit,\n cursor: params?.cursor,\n visibility: params?.visibility,\n resolutionStatus: params?.resolutionStatus,\n creator: params?.creator,\n category: params?.category,\n createdAfter: params?.createdAfter,\n });\n }\n\n async get(id: string): Promise<Market> {\n const res = await this.http.get<{ market: Market }>(\n ENDPOINTS.markets.get(id),\n );\n return res.market;\n }\n\n async quotes(marketId: string): Promise<Quotes> {\n return this.http.get<Quotes>(ENDPOINTS.markets.quotes(marketId));\n }\n\n async orderbook(\n marketId: string,\n params?: GetOrderbookParams,\n ): Promise<Orderbook> {\n return this.http.get<Orderbook>(ENDPOINTS.markets.orderbook(marketId), {\n depth: params?.depth,\n outcomeIndex: params?.outcomeIndex,\n });\n }\n\n async fullOrderbook(\n marketId: string,\n params?: Omit<GetOrderbookParams, \"outcomeIndex\">,\n ): Promise<FullOrderbook> {\n const [no, yes] = await Promise.all([\n this.orderbook(marketId, { ...params, outcomeIndex: 0 }),\n this.orderbook(marketId, { ...params, outcomeIndex: 1 }),\n ]);\n return {\n marketId: yes.marketId,\n yes: { bids: yes.bids, asks: yes.asks },\n no: { bids: no.bids, asks: no.asks },\n timestamp: yes.timestamp,\n };\n }\n\n async simulate(\n marketId: string,\n params: SimulateTradeParams,\n ): Promise<SimulateResult> {\n return this.http.post<SimulateResult>(\n ENDPOINTS.markets.simulate(marketId),\n {\n side: params.side,\n amount: params.amount,\n amountType: params.amountType ?? \"usd\",\n ...(params.trader ? { trader: params.trader } : {}),\n },\n );\n }\n\n async priceHistory(\n marketId: string,\n params?: GetPriceHistoryParams,\n ): Promise<PriceHistory> {\n return this.http.get<PriceHistory>(ENDPOINTS.markets.prices(marketId), {\n timeframe: params?.timeframe ?? params?.interval,\n });\n }\n\n async oracle(marketId: string): Promise<OracleResponse> {\n return this.http.get<OracleResponse>(ENDPOINTS.markets.oracle(marketId));\n }\n\n async oracleQuotes(marketId: string): Promise<OracleQuotesResponse> {\n return this.http.get<OracleQuotesResponse>(\n ENDPOINTS.markets.oracleQuotes(marketId),\n );\n }\n\n async requestOracleQuote(\n marketId: string,\n ): Promise<OracleQuoteRequestResult> {\n return this.http.post<OracleQuoteRequestResult>(\n ENDPOINTS.markets.oracleQuotes(marketId),\n {},\n );\n }\n\n async activity(\n marketId: string,\n params?: GetActivityParams,\n ): Promise<ActivityResponse> {\n return this.http.get<ActivityResponse>(\n ENDPOINTS.markets.activity(marketId),\n {\n cursor: params?.cursor,\n limit: params?.limit,\n types: params?.types,\n startTime: params?.startTime,\n endTime: params?.endTime,\n },\n );\n }\n\n async globalActivity(params?: GetActivityParams): Promise<ActivityResponse> {\n return this.http.get<ActivityResponse>(ENDPOINTS.activity.global, {\n cursor: params?.cursor,\n limit: params?.limit,\n types: params?.types,\n startTime: params?.startTime,\n endTime: params?.endTime,\n });\n }\n}\n","import type { Address, Hex } from \"viem\";\nimport type { HttpClient } from \"../http.js\";\nimport { ENDPOINTS } from \"../endpoints.js\";\nimport type { OrderBuilder } from \"../order-builder/builder.js\";\nimport { ContextConfigError } from \"../errors.js\";\nimport type {\n PlaceOrderRequest,\n PlaceMarketOrderRequest,\n Order,\n OrderList,\n CreateOrderResult,\n CancelResult,\n CancelReplaceResult,\n BulkResult,\n GetOrdersParams,\n GetRecentOrdersParams,\n OrderSimulateParams,\n OrderSimulateResult,\n} from \"../types.js\";\n\nexport class Orders {\n constructor(\n private readonly http: HttpClient,\n private readonly builder: OrderBuilder | null,\n private readonly address: Address | null,\n ) {}\n\n private requireSigner(): OrderBuilder {\n if (!this.builder) {\n throw new ContextConfigError(\n \"A signer is required for write operations. Pass a signer to ContextClient.\",\n );\n }\n return this.builder;\n }\n\n private requireAddress(): Address {\n if (!this.address) {\n throw new ContextConfigError(\n \"A signer is required for this operation. Pass a signer to ContextClient.\",\n );\n }\n return this.address;\n }\n\n // ─── Read ───\n\n async list(params?: GetOrdersParams): Promise<OrderList> {\n return this.http.get<OrderList>(ENDPOINTS.orders.list, {\n trader: params?.trader,\n marketId: params?.marketId,\n status: params?.status,\n cursor: params?.cursor,\n limit: params?.limit,\n });\n }\n\n async listAll(\n params?: Omit<GetOrdersParams, \"cursor\">,\n ): Promise<Order[]> {\n const allOrders: Order[] = [];\n let cursor: string | undefined;\n\n do {\n const res = await this.http.get<OrderList>(ENDPOINTS.orders.list, {\n trader: params?.trader,\n marketId: params?.marketId,\n status: params?.status,\n cursor,\n });\n\n const orders = res.orders ?? [];\n allOrders.push(...orders);\n cursor = res.cursor ?? undefined;\n\n if (orders.length === 0) break;\n } while (cursor);\n\n return allOrders;\n }\n\n async mine(marketId?: string): Promise<OrderList> {\n return this.list({\n trader: this.requireAddress(),\n marketId,\n });\n }\n\n async allMine(marketId?: string): Promise<Order[]> {\n return this.listAll({\n trader: this.requireAddress(),\n marketId,\n });\n }\n\n async get(id: string): Promise<Order> {\n const res = await this.http.get<{ order: Order }>(\n ENDPOINTS.orders.get(id),\n );\n return res.order;\n }\n\n async recent(params?: GetRecentOrdersParams): Promise<OrderList> {\n return this.http.get<OrderList>(ENDPOINTS.orders.recent, {\n trader: params?.trader,\n marketId: params?.marketId,\n status: params?.status,\n limit: params?.limit,\n windowSeconds: params?.windowSeconds,\n });\n }\n\n async simulate(params: OrderSimulateParams): Promise<OrderSimulateResult> {\n return this.http.post<OrderSimulateResult>(\n ENDPOINTS.orders.simulate,\n params,\n );\n }\n\n // ─── Write ───\n\n async create(req: PlaceOrderRequest): Promise<CreateOrderResult> {\n const builder = this.requireSigner();\n const signed = await builder.buildAndSign(req);\n return this.http.post<CreateOrderResult>(ENDPOINTS.orders.create, signed);\n }\n\n async createMarket(req: PlaceMarketOrderRequest): Promise<CreateOrderResult> {\n const builder = this.requireSigner();\n const signed = await builder.buildAndSignMarket(req);\n return this.http.post<CreateOrderResult>(ENDPOINTS.orders.create, signed);\n }\n\n async cancel(nonce: Hex): Promise<CancelResult> {\n const builder = this.requireSigner();\n const signature = await builder.signCancel(nonce);\n return this.http.post<CancelResult>(ENDPOINTS.orders.cancel, {\n trader: builder.address,\n nonce,\n signature,\n });\n }\n\n async cancelReplace(\n cancelNonce: Hex,\n newOrder: PlaceOrderRequest,\n ): Promise<CancelReplaceResult> {\n const builder = this.requireSigner();\n const cancelSig = await builder.signCancel(cancelNonce);\n const signed = await builder.buildAndSign(newOrder);\n\n return this.http.post<CancelReplaceResult>(\n ENDPOINTS.orders.cancelReplace,\n {\n cancel: {\n trader: builder.address,\n nonce: cancelNonce,\n signature: cancelSig,\n },\n create: signed,\n },\n );\n }\n\n async bulkCreate(orders: PlaceOrderRequest[]): Promise<CreateOrderResult[]> {\n const builder = this.requireSigner();\n const signed = await Promise.all(\n orders.map((req) => builder.buildAndSign(req)),\n );\n const res = await this.http.post<{ results: CreateOrderResult[]; errors: unknown[] }>(\n ENDPOINTS.orders.bulkCreate,\n { orders: signed },\n );\n return res.results;\n }\n\n async bulkCancel(nonces: Hex[]): Promise<CancelResult[]> {\n const builder = this.requireSigner();\n const cancels = await Promise.all(\n nonces.map(async (nonce) => {\n const signature = await builder.signCancel(nonce);\n return { trader: builder.address, nonce, signature };\n }),\n );\n const res = await this.http.post<{ results: CancelResult[]; errors: unknown[] }>(\n ENDPOINTS.orders.bulkCancel,\n { cancels },\n );\n return res.results;\n }\n\n async bulk(\n creates: PlaceOrderRequest[],\n cancelNonces: Hex[],\n ): Promise<BulkResult> {\n const builder = this.requireSigner();\n\n const createOps = await Promise.all(\n creates.map(async (req) => ({\n type: \"create\" as const,\n order: await builder.buildAndSign(req),\n })),\n );\n\n const cancelOps = await Promise.all(\n cancelNonces.map(async (nonce) => ({\n type: \"cancel\" as const,\n cancel: {\n trader: builder.address,\n nonce,\n signature: await builder.signCancel(nonce),\n },\n })),\n );\n\n return this.http.post<BulkResult>(ENDPOINTS.orders.bulk, {\n operations: [...createOps, ...cancelOps],\n });\n }\n}\n","import type { Address } from \"viem\";\nimport type { HttpClient } from \"../http.js\";\nimport { ENDPOINTS } from \"../endpoints.js\";\nimport type {\n Portfolio,\n Balance,\n ClaimableResponse,\n PortfolioStats,\n TokenBalance,\n GetPortfolioParams,\n} from \"../types.js\";\n\nexport class PortfolioModule {\n constructor(\n private readonly http: HttpClient,\n private readonly defaultAddress: Address | null,\n ) {}\n\n private resolveAddress(address?: Address): Address {\n const resolved = address ?? this.defaultAddress;\n if (!resolved) {\n throw new Error(\n \"Address required. Either pass an address or configure a signer.\",\n );\n }\n return resolved;\n }\n\n async get(\n address?: Address,\n params?: GetPortfolioParams,\n ): Promise<Portfolio> {\n return this.http.get<Portfolio>(\n ENDPOINTS.portfolio.get(this.resolveAddress(address)),\n {\n kind: params?.kind,\n marketId: params?.marketId,\n cursor: params?.cursor,\n pageSize: params?.pageSize,\n },\n );\n }\n\n async claimable(address?: Address): Promise<ClaimableResponse> {\n return this.http.get<ClaimableResponse>(\n ENDPOINTS.portfolio.claimable(this.resolveAddress(address)),\n );\n }\n\n async stats(address?: Address): Promise<PortfolioStats> {\n return this.http.get<PortfolioStats>(\n ENDPOINTS.portfolio.stats(this.resolveAddress(address)),\n );\n }\n\n async balance(address?: Address): Promise<Balance> {\n return this.http.get<Balance>(\n ENDPOINTS.balance.get(this.resolveAddress(address)),\n );\n }\n\n async tokenBalance(\n address: Address,\n tokenAddress: Address,\n ): Promise<TokenBalance> {\n return this.http.get<TokenBalance>(ENDPOINTS.balance.tokenBalance, {\n address,\n tokenAddress,\n });\n }\n}\n","import {\n type Account,\n type Address,\n type Hex,\n type PublicClient,\n type WalletClient,\n createPublicClient,\n http as viemHttp,\n maxUint256,\n parseUnits,\n} from \"viem\";\nimport { baseSepolia } from \"viem/chains\";\nimport type { HttpClient } from \"../http.js\";\nimport { ENDPOINTS } from \"../endpoints.js\";\nimport {\n SETTLEMENT_ADDRESS,\n HOLDINGS_ADDRESS,\n USDC_ADDRESS,\n ERC20_ABI,\n HOLDINGS_ABI,\n SETTLEMENT_ABI,\n HOLDINGS_EIP712_DOMAIN,\n PERMIT2_EIP712_DOMAIN,\n OPERATOR_APPROVAL_TYPES,\n PERMIT_TRANSFER_FROM_TYPES,\n OPERATOR_NONCE_ABI,\n} from \"../config.js\";\nimport { ContextConfigError } from \"../errors.js\";\nimport type {\n WalletStatus,\n WalletSetupResult,\n GaslessOperatorRequest,\n GaslessOperatorResult,\n GaslessDepositRequest,\n GaslessDepositResult,\n} from \"../types.js\";\n\nexport class AccountModule {\n private readonly publicClient: PublicClient;\n\n constructor(\n private readonly http: HttpClient,\n private readonly walletClient: WalletClient | null,\n private readonly account: Account | null,\n rpcUrl?: string,\n ) {\n this.publicClient = createPublicClient({\n chain: baseSepolia,\n transport: viemHttp(rpcUrl),\n }) as PublicClient;\n }\n\n private get address(): Address {\n if (!this.account) {\n throw new ContextConfigError(\n \"A signer is required for account operations.\",\n );\n }\n return this.account.address;\n }\n\n private requireWallet(): WalletClient {\n if (!this.walletClient) {\n throw new ContextConfigError(\n \"A signer is required for account operations.\",\n );\n }\n return this.walletClient;\n }\n\n private requireAccount(): Account {\n if (!this.account) {\n throw new ContextConfigError(\n \"A signer is required for account operations.\",\n );\n }\n return this.account;\n }\n\n async status(): Promise<WalletStatus> {\n const addr = this.address;\n const [ethBalance, usdcAllowance, isOperatorApproved] =\n await Promise.all([\n this.publicClient.getBalance({ address: addr }),\n this.publicClient.readContract({\n address: USDC_ADDRESS,\n abi: ERC20_ABI,\n functionName: \"allowance\",\n args: [addr, HOLDINGS_ADDRESS],\n }),\n this.publicClient.readContract({\n address: HOLDINGS_ADDRESS,\n abi: HOLDINGS_ABI,\n functionName: \"isOperatorFor\",\n args: [addr, SETTLEMENT_ADDRESS],\n }),\n ]);\n\n return {\n address: addr,\n ethBalance,\n usdcAllowance,\n isOperatorApproved,\n needsApprovals: usdcAllowance === 0n || !isOperatorApproved,\n };\n }\n\n async setup(): Promise<WalletSetupResult> {\n const wallet = this.requireWallet();\n const account = this.requireAccount();\n const walletStatus = await this.status();\n let usdcApprovalTx: Hex | null = null;\n let operatorApprovalTx: Hex | null = null;\n\n if (walletStatus.usdcAllowance === 0n) {\n usdcApprovalTx = await wallet.writeContract({\n account,\n chain: baseSepolia,\n address: USDC_ADDRESS,\n abi: ERC20_ABI,\n functionName: \"approve\",\n args: [HOLDINGS_ADDRESS, maxUint256],\n });\n }\n\n if (!walletStatus.isOperatorApproved) {\n operatorApprovalTx = await wallet.writeContract({\n account,\n chain: baseSepolia,\n address: HOLDINGS_ADDRESS,\n abi: HOLDINGS_ABI,\n functionName: \"setOperator\",\n args: [SETTLEMENT_ADDRESS, true],\n });\n }\n\n return { usdcApprovalTx, operatorApprovalTx };\n }\n\n async mintTestUsdc(amount: number = 1000): Promise<unknown> {\n return this.http.post(ENDPOINTS.balance.mintTestUsdc, {\n address: this.address,\n amount: amount.toString(),\n });\n }\n\n async deposit(amount: number): Promise<Hex> {\n const wallet = this.requireWallet();\n const account = this.requireAccount();\n const amountRaw = parseUnits(amount.toString(), 6);\n\n const hash = await wallet.writeContract({\n account,\n chain: baseSepolia,\n address: HOLDINGS_ADDRESS,\n abi: HOLDINGS_ABI,\n functionName: \"deposit\",\n args: [USDC_ADDRESS, amountRaw],\n });\n\n await this.publicClient.waitForTransactionReceipt({ hash });\n return hash;\n }\n\n async withdraw(amount: number): Promise<Hex> {\n const wallet = this.requireWallet();\n const account = this.requireAccount();\n const amountRaw = parseUnits(amount.toString(), 6);\n\n const hash = await wallet.writeContract({\n account,\n chain: baseSepolia,\n address: HOLDINGS_ADDRESS,\n abi: HOLDINGS_ABI,\n functionName: \"withdraw\",\n args: [USDC_ADDRESS, amountRaw],\n });\n\n await this.publicClient.waitForTransactionReceipt({ hash });\n return hash;\n }\n\n async mintCompleteSets(marketId: string, amount: number): Promise<Hex> {\n const wallet = this.requireWallet();\n const account = this.requireAccount();\n const amountRaw = parseUnits(amount.toString(), 6);\n\n const hash = await wallet.writeContract({\n account,\n chain: baseSepolia,\n address: SETTLEMENT_ADDRESS,\n abi: SETTLEMENT_ABI,\n functionName: \"mintCompleteSetsFromHoldings\",\n args: [marketId as Hex, amountRaw],\n });\n\n await this.publicClient.waitForTransactionReceipt({ hash });\n return hash;\n }\n\n async burnCompleteSets(\n marketId: string,\n amount: number,\n creditInternal = true,\n ): Promise<Hex> {\n const wallet = this.requireWallet();\n const account = this.requireAccount();\n const amountRaw = parseUnits(amount.toString(), 6);\n\n const hash = await wallet.writeContract({\n account,\n chain: baseSepolia,\n address: SETTLEMENT_ADDRESS,\n abi: SETTLEMENT_ABI,\n functionName: \"burnCompleteSetsFromHoldings\",\n args: [marketId as Hex, amountRaw, this.address, creditInternal],\n });\n\n await this.publicClient.waitForTransactionReceipt({ hash });\n return hash;\n }\n\n // ─── Gasless (high-level: sign + relay) ───\n\n async gaslessSetup(): Promise<GaslessOperatorResult> {\n const wallet = this.requireWallet();\n const account = this.requireAccount();\n\n const nonce = (await this.publicClient.readContract({\n address: HOLDINGS_ADDRESS,\n abi: OPERATOR_NONCE_ABI,\n functionName: \"operatorNonce\",\n args: [this.address],\n })) as bigint;\n\n const deadline = BigInt(Math.floor(Date.now() / 1000) + 3600);\n\n const signature = await wallet.signTypedData({\n account,\n domain: HOLDINGS_EIP712_DOMAIN,\n types: OPERATOR_APPROVAL_TYPES,\n primaryType: \"OperatorApproval\",\n message: {\n user: this.address,\n operator: SETTLEMENT_ADDRESS,\n approved: true,\n nonce,\n deadline,\n },\n });\n\n return this.relayOperatorApproval({\n user: this.address,\n approved: true,\n nonce: nonce.toString(),\n deadline: deadline.toString(),\n signature,\n });\n }\n\n async gaslessDeposit(amount: number): Promise<GaslessDepositResult> {\n const wallet = this.requireWallet();\n const account = this.requireAccount();\n const amountRaw = parseUnits(amount.toString(), 6);\n\n const nonce = BigInt(Date.now());\n const deadline = BigInt(Math.floor(Date.now() / 1000) + 3600);\n\n const signature = await wallet.signTypedData({\n account,\n domain: PERMIT2_EIP712_DOMAIN,\n types: PERMIT_TRANSFER_FROM_TYPES,\n primaryType: \"PermitTransferFrom\",\n message: {\n permitted: {\n token: USDC_ADDRESS,\n amount: amountRaw,\n },\n spender: HOLDINGS_ADDRESS,\n nonce,\n deadline,\n },\n });\n\n return this.relayDeposit({\n user: this.address,\n amount: amountRaw.toString(),\n nonce: nonce.toString(),\n deadline: deadline.toString(),\n signature,\n });\n }\n\n // ─── Gasless Relay (low-level) ───\n\n async relayOperatorApproval(\n req: GaslessOperatorRequest,\n ): Promise<GaslessOperatorResult> {\n return this.http.post<GaslessOperatorResult>(\n ENDPOINTS.gasless.operator,\n req,\n );\n }\n\n async relayDeposit(\n req: GaslessDepositRequest,\n ): Promise<GaslessDepositResult> {\n return this.http.post<GaslessDepositResult>(\n ENDPOINTS.gasless.depositWithPermit,\n req,\n );\n }\n}\n","import type { Address } from \"viem\";\nimport { createHttpClient, type HttpClient } from \"./http.js\";\nimport { resolveSigner } from \"./signing/eip712.js\";\nimport { OrderBuilder } from \"./order-builder/builder.js\";\nimport { Markets } from \"./modules/markets.js\";\nimport { Orders } from \"./modules/orders.js\";\nimport { PortfolioModule } from \"./modules/portfolio.js\";\nimport { AccountModule } from \"./modules/account.js\";\nimport type { ContextClientOptions } from \"./types.js\";\n\n/**\n * Unified SDK client for Context prediction markets.\n *\n * Read-only usage (no signer):\n * const ctx = new ContextClient()\n * const markets = await ctx.markets.list()\n *\n * Trading usage (with signer):\n * const ctx = new ContextClient({ apiKey, signer: { privateKey } })\n * const order = await ctx.orders.create({ ... })\n */\nexport class ContextClient {\n readonly markets: Markets;\n readonly orders: Orders;\n readonly portfolio: PortfolioModule;\n readonly account: AccountModule;\n\n /** The trader's on-chain address, or null if no signer was provided. */\n readonly address: Address | null;\n\n constructor(options: ContextClientOptions = {}) {\n const http: HttpClient = createHttpClient({\n apiKey: options.apiKey,\n baseUrl: options.baseUrl,\n });\n\n let builder: OrderBuilder | null = null;\n let address: Address | null = null;\n let walletClient = null;\n let account = null;\n\n if (options.signer) {\n const resolved = resolveSigner(options.signer);\n walletClient = resolved.walletClient;\n account = resolved.account;\n address = resolved.account.address;\n builder = new OrderBuilder(walletClient, account);\n }\n\n this.address = address;\n this.markets = new Markets(http);\n this.orders = new Orders(http, builder, address);\n this.portfolio = new PortfolioModule(http, address);\n this.account = new AccountModule(http, walletClient, account, options.rpcUrl);\n }\n}\n"],"mappings":"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","names":["http","http","http","baseSepolia","http","baseSepolia","http"]}
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "@contextwtf/sdk",
3
+ "version": "0.2.0",
4
+ "description": "TypeScript SDK for Context prediction markets",
5
+ "type": "module",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "https://github.com/contextwtf/context-sdk.git"
9
+ },
10
+ "publishConfig": {
11
+ "access": "public"
12
+ },
13
+ "main": "./dist/index.cjs",
14
+ "module": "./dist/index.js",
15
+ "types": "./dist/index.d.ts",
16
+ "exports": {
17
+ ".": {
18
+ "import": {
19
+ "types": "./dist/index.d.ts",
20
+ "default": "./dist/index.js"
21
+ },
22
+ "require": {
23
+ "types": "./dist/index.d.cts",
24
+ "default": "./dist/index.cjs"
25
+ }
26
+ }
27
+ },
28
+ "files": [
29
+ "dist",
30
+ "README.md"
31
+ ],
32
+ "scripts": {
33
+ "build": "tsup",
34
+ "clean": "rm -rf dist",
35
+ "typecheck": "tsc --noEmit",
36
+ "test": "vitest run",
37
+ "test:watch": "vitest"
38
+ },
39
+ "dependencies": {
40
+ "viem": "^2.23.2"
41
+ },
42
+ "devDependencies": {
43
+ "tsup": "^8.0.0",
44
+ "typescript": "^5.5.0",
45
+ "vitest": "^3.0.0"
46
+ },
47
+ "engines": {
48
+ "node": ">=18"
49
+ }
50
+ }