diff --git a/API.md b/API.md index 1d444b6..e1949ad 100644 --- a/API.md +++ b/API.md @@ -4,10 +4,14 @@ и получать события в реальном времени. Источник — код шлюза (`smart-updown-token/relayer/src/gateway.ts`, `settle.ts`). -**База:** `https://testfront.binom.pw` -Пути нормализуются: `/api/state` и `/state` — одно и то же. +**База:** `https://testfront.binom.pw/api` CORS открыт (`Access-Control-Allow-Origin: *`) — можно дёргать прямо из браузера. +> ⚠️ **`/api` в базе обязателен.** GET-ручки (`/state`, `/price`, `/balance`, `/faucet`) +> отвечают и без префикса — `…/state` и `…/api/state` одно и то же. Но **POST-ручки +> (`/wallet`, `/bet`) без `/api` не работают**: `POST …/wallet` → `405 Method Not Allowed`. +> Держите `/api` в базе, и всё будет единообразно. + **Стенд тестовый** (`SMART_MODE=test`): фантики фейковые, SOL из фаусета, контракт наш. --- @@ -15,14 +19,15 @@ CORS открыт (`Access-Control-Allow-Origin: *`) — можно дёргат ## Короткий рецепт: «поставить и получить события» ```js -const BASE = 'https://testfront.binom.pw'; +const BASE = 'https://testfront.binom.pw/api'; // /api обязателен, см. выше +const H = { 'Content-Type': 'application/json' }; // 1. Кошелёк + деньги (только test-mode) -const { address } = await (await fetch(`${BASE}/wallet`, { method: 'POST' })).json(); +const { address } = await (await fetch(`${BASE}/wallet`, { method: 'POST', headers: H, body: '{}' })).json(); await fetch(`${BASE}/faucet/${address}`); // наливает 5 SOL + 10 000 фантиков // 2. Подписка на события -const ws = new WebSocket(`${BASE.replace('https', 'wss')}/api/ws`); +const ws = new WebSocket('wss://testfront.binom.pw/api/ws'); // только wss: страница по HTTPS ws.onmessage = (e) => { const m = JSON.parse(e.data); if (m.type === 'price') console.log('курс ', m.price); // "101.02" @@ -33,8 +38,8 @@ ws.onmessage = (e) => { // 3. Ставка. ВНИМАНИЕ: поле называется amountUnits, НЕ amount! await fetch(`${BASE}/bet`, { method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ address, side: 'UP', amountUnits: 500000000 }), // 500 фантиков + headers: H, + body: JSON.stringify({ address, side: 'UP', amountUnits: '500000000' }), // 500 фантиков }); // Закрывать не нужно — шлюз закроет сам по таймеру (см. «Авто-закрытие»). ```