Appearance
TypeScript SDK
Official TypeScript SDK for the FAST platform. Zero dependencies. Works in Node.js 18+, Deno, Bun, and edge runtimes.
Install
bash
npm install @fundedfast/sdkQuick Start
typescript
import { FastClient } from '@fundedfast/sdk';
const fast = new FastClient({ apiKey: process.env.FAST_API_KEY! });
// Forward a bet
await fast.bets.ingest({
userId: 'player-42',
externalBetId: 'BET-001',
stakeAmount: 5.00,
odds: 2.10,
status: 'placed',
});
// Check progress
const progress = await fast.users.getProgress('player-42');Namespaces
Operator (integration)
| Namespace | Purpose |
|---|---|
fast.challenges | Purchase, list tiers, tier terms, leaderboard |
fast.bets | Validate, ingest, batch ingest |
fast.users | Progress, history, withdrawals, continue/refund choices, achievements, rewards, tournaments, loyalty |
fast.events | SSE token issuance and stream URL |
fast.reconciliation | Cross-reference bet data |
fast.widget | Widget module toggles and branding config |
fast.sandbox | Reset staging data |
Admin (backoffice)
| Namespace | Purpose |
|---|---|
fast.admin.challengeTiers | CRUD challenge tiers |
fast.admin.rulesets | CRUD rulesets |
fast.admin.bets | List, settle, bulk operations |
fast.admin.webhooks | Deliveries, retry, dead letters, rotate secret, post-bet hook dead letters |
fast.admin.settings | Integration mode, URLs, theme, currency, widget layout |
fast.admin.bonuses | Offers, active bonuses, stats |
fast.admin.missions | CRUD missions, stats |
fast.admin.tournaments | CRUD tournaments, cancel, settle, invite |
fast.admin.loyalty | Config, tiers, user management |
fast.admin.achievements | CRUD achievements, grant, GDPR export/erase |
fast.admin.rewards | Grant, revoke, history |
fast.admin.rewardRules | CRUD reward rules |
fast.admin.selfExclusion | Exclude/lift users |
fast.admin.adapters | Payload field mapping |
fast.admin.reconciliation | Reconciliation flags |
fast.admin.audit | Audit log queries, GDPR bulk export, retention policy |
fast.admin.analytics | Overview, challenges, revenue, users, funnel, engagement, benchmarks |
fast.admin.notifications | Notification preferences |
fast.admin.notificationChannels | Slack/Teams/Discord/custom channels |
fast.admin.users | User lookup, revoke funded account |
fast.admin.templates | Browse and clone challenge templates |
fast.admin.support | Support requests to the FAST team |
Configuration
typescript
const fast = new FastClient({
apiKey: 'key-...',
baseUrl: 'https://api.fundedfast.eu/v1', // default
timeout: 10_000, // default 10s
retry: { maxRetries: 3 }, // exponential backoff; POSTs reuse one X-Idempotency-Key across retries
debug: false, // console logging
// Observability hooks
onRequest: ({ method, url }) => logger.info(`${method} ${url}`),
onResponse: ({ status, durationMs }) => metrics.record(status, durationMs),
});Error Handling
typescript
import { FastApiError, FastTimeoutError, FastNetworkError } from '@fundedfast/sdk';
try {
await fast.bets.ingest(bet);
} catch (err) {
if (err instanceof FastApiError) {
// err.status, err.code, err.correlationId, err.isRetryable
} else if (err instanceof FastTimeoutError) {
// err.timeoutMs
} else if (err instanceof FastNetworkError) {
// err.cause
}
}Webhook Verification
typescript
import { verifyWebhookSignature, parseWebhookEvent } from '@fundedfast/sdk/webhooks';
const valid = await verifyWebhookSignature(rawBody, signature, secret);
const event = parseWebhookEvent(rawBody);rawBody must be the request body exactly as received (a string), not JSON.stringify of a parsed object; signature is the X-Webhook-Signature header.
Dual Build
Ships ESM and CommonJS. Both fully typed.
typescript
// ESM
import { FastClient } from '@fundedfast/sdk';
// CommonJS
const { FastClient } = require('@fundedfast/sdk');