# Gestionarea FlowStreams cu API-ul Flow

> Autentifică-te, listează, creează, importă, exportă, pune pe pauză, repornește și elimină FlowStreams cu API-ul JSON de la /fapi/, citește statisticile și variabilele și apelează un flux din exterior prin adresa lui notify sau prin propria cale proxy.

Framework: flow
Product: Flow (flow@11.1)
Language: ro
Content-SHA256: 95aa5d5922aa2f1561830d9345553ec960e03c75bc6c70b714a130bdc6404f4a
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

Tot ce face editorul trece printr-un singur endpoint JSON: `POST /fapi/` cu corpul `{ "schema": "<name>", "data": { ... } }` (rutele API Total.js, vezi [rutele API](/en/total5/api-routes/)). Adresa `/fapi/` vine din linia `$api : /fapi/` a fișierului `config`. Fiecare apel în afară de autentificare are nevoie de cookie-ul de sesiune; fără el răspunsul este `401: Unauthorized`.

Aceste apeluri au fost încercate și pe un Flow 11.1 local (Node.js 24 și `total5@0.0.19`) în timp ce se scria această pagină.

## Autentificare

`Auth|login` primește `login` și `password` și răspunde `{"success":true}` cu cookie-ul de sesiune. O pereche greșită răspunde `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>"}}'
```

Apelurile următoare folosesc `-b cookie.txt`.

## Apelurile

| `schema` | `data` | Ce face |
|---|---|---|
| `Streams` | niciunul | lista FlowStreams cu `id`, `name`, `group`, `author`, `version`, `proxypath`, `size` și `stats` în timp real ale celor care rulează |
| `Streams\|save` | `name`, și opțional `author`, `version`, `icon`, `color`, `group`, `url`, `reference`, `readme`, `memory`, `cloning`, `proxypath`, `proxytimeout` | **creează** un flux când lipsește `id` (se verifică permisiunea *create*); altfel actualizează fluxul cu acel `id` și îl repornește |
| `Streams\|read` | `id` | proprietățile unui flux |
| `Streams\|raw` | `id` | întregul obiect al fluxului, cu designul său |
| `Streams\|export` | `id` | fluxul ca text JSON în `value`, fără câmpurile interne (`unixsocket`, `env`, `import`, `worker`, `asfiles`) |
| `Streams\|import` | `data` (textul JSON) | creează un flux **nou** dintr-un export (până la 10 MB), cu un `id` nou; un `proxypath` repetat este înlocuit cu unul aleatoriu; răspunde `{"success":true,"value":"<id>"}` |
| `Streams\|pause` | `id`, `is` (`true` sau `false`) | pune pe pauză sau reia un flux care rulează |
| `Streams\|restart` | `id` | repornește fluxul |
| `Streams\|remove` | `id` | elimină fluxul și folderul lui (se verifică permisiunea *remove*) |
| `Streams\|stats` | niciunul | totalurile instalației: versiunile Node.js, Total.js și Flow, mesaje, în așteptare, memorie și conexiuni |
| `Variables\|read` / `Variables\|save` | `id` (opțional), `data` | variabilele unui flux sau variabilele **globale** când `id` este gol; salvarea le trimite fluxurilor care rulează |
| `Console\|read` / `Console\|clear` | niciunul | consola aplicației |
| `CDN\|clear` | niciunul | golește cache-ul componentelor de interfață descărcate |
| `Settings\|read` / `Settings\|save` | setările (vezi [setări și fișiere](/en/flow/settings-and-files/)) | doar pentru super-administrator |

## Crearea unui flux și rularea lui

Creează-l, apoi importă un design construit în editor (un fișier JSON exportat) pentru a-l porni:

```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"}}'
```

Un flux exportat din editor poartă `design` (casetele și conexiunile lor), `components` (sursa fiecăreia) și `variables`.

## Regulile `proxypath`

Un flux poate publica rute HTTP sub o cale proprie. Flow adaugă barele oblice (`demo` devine `/demo/`), respinge căile care aparțin lui Flow însuși (`/`, `/cdn/`, `/fapi/`, `/private/`, `/flows/`, `/designer/`, `/parts/`, `/forms/`, `/css/`, `/js/`, `/fonts/`, `/panels/`) cu `Proxy endpoint contains reserved path` și respinge o cale pe care o folosește deja alt flux. `proxytimeout` este timpul în secunde de așteptare a răspunsului fluxului (implicit `120`).

## Apeluri din exterior

| Ruta | Utilizare |
|---|---|
| `GET` sau `POST /notify/{id}/` | trimite o notificare fluxului cu acel id (corpul POST este limitat la 1 MB); componentele fluxului decid ce fac cu ea. Răspunde `{"success":true}` |
| `+SOCKET /{id}/` | WebSocket-ul editorului pentru acel flux (are nevoie de sesiune) |
| `GET /private/?token=<token>` | listează fișierele din folderul `private/` când token-ul este egal cu `token` din setări; zece token-uri greșite blochează o adresă timp de 15 minute |
| `+POST /update/` | actualizează aplicația dintr-un fișier `.bundle`; doar pentru versiunea împachetată |

Păstrează `token` secret, trimite aceste apeluri prin HTTPS și pune Flow în spatele unui proxy invers când este accesibil de pe Internet.
