@gamegainsgg/sdk
v0.1.0
Published
Official TypeScript SDK for the GameGains perpetual-futures trading API.
Downloads
142
Readme
@gamegainsgg/sdk
Official TypeScript SDK for the GameGains perpetual-futures trading API. HMAC + EIP-712 signing are built in — you provide keys, the SDK signs every request.
npm install @gamegainsgg/sdkQuickstart
Public (unauthenticated) data
import { GameGains } from "@gamegainsgg/sdk";
const gg = new GameGains({ serverURL: "https://api.gamegains.gg" });
const info = await gg.markets.getExchangeInfo(); // chainId, settlementAddress, symbols
const price = await gg.marketData.getOraclePrice({ market: "AK47-REDLINE-FT" });
console.log(price.markPrice, price.isStale);Authenticated (auto-signed) requests
createSignedClient returns a client that HMAC-signs every request with your API secret — no per-call wiring:
import { createSignedClient } from "@gamegainsgg/sdk";
const gg = createSignedClient({
serverURL: "https://api.gamegains.gg",
apiKey: "gg_pk_...",
apiSecret: "gg_sk_...", // shown once at key creation
});
const acct = await gg.account.getAccount(); // signed automatically
console.log(acct.collateral.total);Signing helpers (EIP-712 + cancel intents)
Orders, API keys, and cancels are authorized by your wallet signature. The SDK ships the exact signers (byte-identical to the gateway) so a self-custody / linked wallet can sign locally:
import { signOrderIntent, signCancelIntent } from "@gamegainsgg/sdk";
// also available from the subpath: "@gamegainsgg/sdk/gg/eip712"
const info = await gg.markets.getExchangeInfo();
// Place an order
const sig = await signOrderIntent(privateKey, Number(info.chainId), info.settlementAddress, {
trader: address, symbol: "AK47-REDLINE-FT", side: "long", orderType: "limit",
price: 30.71, sizeUSD: 100, leverage: 2, nonce, expiry,
});
// ...pass sig as the order body's `signature` field to gg.orders.createOrder(...)
// Close a position: a reduce-only order on the OPPOSITE side, sized to the position
await signOrderIntent(privateKey, chainId, settlement, {
..., side: "short", orderType: "market", price: 0, sizeUSD: positionNotional, reduceOnly: true,
});
// Cancel a resting order (linked wallets must pre-sign)
const { signature, timestamp } = await signCancelIntent(privateKey, { orderId });signCancelIntent / signCancelAllIntent produce a personal_sign over the raw keccak of the cancel payload and return { signature, timestamp } — pass both in the DELETE request body. signCancelBatchIntent returns { signature } only (no timestamp — the sorted id set is the nonce). Custodial keys may omit the signature (the gateway signs); linked wallets must supply it.
Full API reference
See docs/ for every resource and model. The typed client also works with a ggApikey on new GameGains({...}) if you prefer to manage signing yourself.
License
MIT — see LICENSE.
