# Správa FlowStreamů přes API Flow

> Přihlaste se, vypisujte, vytvářejte, importujte, exportujte, pozastavujte, restartujte a odstraňujte FlowStreamy přes API JSON na /fapi/, čtěte statistiky a proměnné a volejte tok zvenčí přes jeho adresu notify nebo vlastní proxy cestu.

Framework: flow
Product: Flow (flow@11.1)
Language: cs
Content-SHA256: 9925c961ddd9af3d1db5c824e496d892cb5b42cd115b87ca075530d74caca737
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

Vše, co dělá editor, jde přes jediný endpoint JSON: `POST /fapi/` s tělem `{ "schema": "<name>", "data": { ... } }` (trasy API Total.js, viz [trasy API](/en/total5/api-routes/)). Adresa `/fapi/` pochází z řádku `$api : /fapi/` v souboru `config`. Každé volání kromě přihlášení potřebuje cookie relace; bez ní je odpověď `401: Unauthorized`.

Tato volání byla při psaní této stránky vyzkoušena i na lokálním Flow 11.1 (Node.js 24 a `total5@0.0.19`).

## Přihlášení

`Auth|login` přijímá `login` a `password` a odpovídá `{"success":true}` spolu s cookie relace. Špatná dvojice odpoví `Invalid credentials`.

```bash
curl -c cookie.txt -X POST http://localhost:8000/fapi/ \
  -H 'content-type: application/json' \
  -d '{"schema":"Auth|login","data":{"login":"<your login>","password":"<your password>"}}'
```

Další volání používají `-b cookie.txt`.

## Volání

| `schema` | `data` | Co dělá |
|---|---|---|
| `Streams` | žádné | seznam FlowStreamů s `id`, `name`, `group`, `author`, `version`, `proxypath`, `size` a živými `stats` běžících |
| `Streams\|save` | `name`, a volitelně `author`, `version`, `icon`, `color`, `group`, `url`, `reference`, `readme`, `memory`, `cloning`, `proxypath`, `proxytimeout` | **vytvoří** tok, když chybí `id` (kontroluje se oprávnění *create*), jinak aktualizuje tok s tímto `id` a restartuje jej |
| `Streams\|read` | `id` | vlastnosti jednoho toku |
| `Streams\|raw` | `id` | celý objekt toku s jeho návrhem |
| `Streams\|export` | `id` | tok jako text JSON v `value` bez interních polí (`unixsocket`, `env`, `import`, `worker`, `asfiles`) |
| `Streams\|import` | `data` (text JSON) | vytvoří **nový** tok z exportu (do 10 MB) s novým `id`; opakovaný `proxypath` se nahradí náhodným; odpoví `{"success":true,"value":"<id>"}` |
| `Streams\|pause` | `id`, `is` (`true` nebo `false`) | pozastaví nebo obnoví běžící tok |
| `Streams\|restart` | `id` | restartuje tok |
| `Streams\|remove` | `id` | odstraní tok a jeho složku (kontroluje se oprávnění *remove*) |
| `Streams\|stats` | žádné | součty instalace: verze Node.js, Total.js a Flow, zprávy, čekající, paměť a připojení |
| `Variables\|read` / `Variables\|save` | `id` (volitelné), `data` | proměnné jednoho toku, nebo **globální** proměnné, když je `id` prázdné; uložení je odešle běžícím tokům |
| `Console\|read` / `Console\|clear` | žádné | konzole aplikace |
| `CDN\|clear` | žádné | vymaže mezipaměť stažených komponent rozhraní |
| `Settings\|read` / `Settings\|save` | nastavení (viz [nastavení a soubory](/en/flow/settings-and-files/)) | pouze pro superadministrátora |

## Vytvoření toku a jeho spuštění

Vytvořte jej a poté importujte návrh vytvořený v editoru (exportovaný soubor JSON), aby se spustil:

```bash
curl -b cookie.txt -X POST http://localhost:8000/fapi/ \
  -H 'content-type: application/json' \
  -d '{"schema":"Streams|save","data":{"name":"Demo","author":"Me"}}'
```

Tok exportovaný z editoru nese svůj `design` (boxy a jejich spojení), své `components` (zdroj každé z nich) a své `variables`.

## Pravidla `proxypath`

Tok může publikovat trasy HTTP pod vlastní cestou. Flow doplní lomítka (`demo` se stane `/demo/`), odmítne cesty, které patří samotnému Flow (`/`, `/cdn/`, `/fapi/`, `/private/`, `/flows/`, `/designer/`, `/parts/`, `/forms/`, `/css/`, `/js/`, `/fonts/`, `/panels/`) s `Proxy endpoint contains reserved path` a odmítne cestu, kterou už používá jiný tok. `proxytimeout` je čas v sekundách, po který se čeká na odpověď toku (výchozí `120`).

## Volání zvenčí

| Trasa | Použití |
|---|---|
| `GET` nebo `POST /notify/{id}/` | pošle oznámení toku s tímto id (tělo POST je omezeno na 1 MB); komponenty toku rozhodnou, co s ním udělají. Odpoví `{"success":true}` |
| `+SOCKET /{id}/` | WebSocket editoru pro tento tok (vyžaduje relaci) |
| `GET /private/?token=<token>` | vypíše soubory složky `private/`, když token odpovídá `token` v nastavení; deset špatných tokenů zablokuje adresu na 15 minut |
| `+POST /update/` | aktualizuje aplikaci ze souboru `.bundle`; pouze pro zabalenou verzi |

Uchovejte `token` v tajnosti, tato volání posílejte přes HTTPS a Flow dejte za reverzní proxy, když je dostupný z internetu.
