# Διαχείριση FlowStreams με το API του Flow

> Συνδεθείτε, καταχωρίστε, δημιουργήστε, εισαγάγετε, εξαγάγετε, θέστε σε παύση, επανεκκινήστε και αφαιρέστε FlowStreams με το API JSON στο /fapi/, διαβάστε στατιστικά και μεταβλητές και καλέστε μια ροή απ’ έξω με τη διεύθυνση notify ή τη δική της διαδρομή proxy.

Framework: flow
Product: Flow (flow@11.1)
Language: el
Content-SHA256: 4cc869f43c28295e3dee25d2b7d57d67ead34873c12fae07fdca59c649af6dfe
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

Ό,τι κάνει ο επεξεργαστής περνά από ένα μόνο endpoint JSON: `POST /fapi/` με σώμα `{ "schema": "<name>", "data": { ... } }` (οι διαδρομές API του Total.js, δείτε [διαδρομές API](/en/total5/api-routes/)). Η διεύθυνση `/fapi/` προέρχεται από τη γραμμή `$api : /fapi/` του αρχείου `config`. Κάθε κλήση εκτός από τη σύνδεση χρειάζεται το cookie συνεδρίας· χωρίς αυτό η απάντηση είναι `401: Unauthorized`.

Αυτές οι κλήσεις δοκιμάστηκαν επίσης σε τοπικό Flow 11.1 (Node.js 24 και `total5@0.0.19`) ενώ γραφόταν αυτή η σελίδα.

## Σύνδεση

Το `Auth|login` δέχεται `login` και `password` και απαντά `{"success":true}` με το cookie συνεδρίας. Ένα λάθος ζεύγος απαντά `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>"}}'
```

Οι επόμενες κλήσεις χρησιμοποιούν `-b cookie.txt`.

## Οι κλήσεις

| `schema` | `data` | Τι κάνει |
|---|---|---|
| `Streams` | κανένα | η λίστα των FlowStreams με `id`, `name`, `group`, `author`, `version`, `proxypath`, `size` και τα ζωντανά `stats` αυτών που τρέχουν |
| `Streams\|save` | `name`, και προαιρετικά `author`, `version`, `icon`, `color`, `group`, `url`, `reference`, `readme`, `memory`, `cloning`, `proxypath`, `proxytimeout` | **δημιουργεί** μια ροή όταν λείπει το `id` (ελέγχεται το δικαίωμα *create*), αλλιώς ενημερώνει τη ροή με αυτό το `id` και την επανεκκινεί |
| `Streams\|read` | `id` | οι ιδιότητες μιας ροής |
| `Streams\|raw` | `id` | ολόκληρο το αντικείμενο της ροής, με τον σχεδιασμό της |
| `Streams\|export` | `id` | η ροή ως κείμενο JSON στο `value`, χωρίς τα εσωτερικά πεδία (`unixsocket`, `env`, `import`, `worker`, `asfiles`) |
| `Streams\|import` | `data` (το κείμενο JSON) | δημιουργεί μια **νέα** ροή από μια εξαγωγή (έως 10 MB), με νέο `id`· ένα επαναλαμβανόμενο `proxypath` αντικαθίσταται με τυχαίο· απαντά `{"success":true,"value":"<id>"}` |
| `Streams\|pause` | `id`, `is` (`true` ή `false`) | θέτει σε παύση ή συνεχίζει μια ροή που τρέχει |
| `Streams\|restart` | `id` | επανεκκινεί τη ροή |
| `Streams\|remove` | `id` | αφαιρεί τη ροή και τον φάκελό της (ελέγχεται το δικαίωμα *remove*) |
| `Streams\|stats` | κανένα | τα σύνολα της εγκατάστασης: εκδόσεις Node.js, Total.js και Flow, μηνύματα, εκκρεμή, μνήμη και συνδέσεις |
| `Variables\|read` / `Variables\|save` | `id` (προαιρετικό), `data` | οι μεταβλητές μιας ροής ή οι **καθολικές** μεταβλητές όταν το `id` είναι κενό· η αποθήκευση τις στέλνει στις ροές που τρέχουν |
| `Console\|read` / `Console\|clear` | κανένα | η κονσόλα της εφαρμογής |
| `CDN\|clear` | κανένα | καθαρίζει την προσωρινή μνήμη των κατεβασμένων συνιστωσών διεπαφής |
| `Settings\|read` / `Settings\|save` | οι ρυθμίσεις (δείτε [ρυθμίσεις και αρχεία](/en/flow/settings-and-files/)) | μόνο για τον υπερδιαχειριστή |

## Δημιουργία μιας ροής και εκτέλεσή της

Δημιουργήστε την και μετά εισαγάγετε έναν σχεδιασμό που φτιάξατε στον επεξεργαστή (ένα εξαγόμενο αρχείο JSON) για να την ξεκινήσετε:

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

Μια ροή που εξάγεται από τον επεξεργαστή φέρει το `design` της (τα κουτιά και οι συνδέσεις τους), τα `components` της (τον κώδικα του καθενός) και τα `variables` της.

## Κανόνες του `proxypath`

Μια ροή μπορεί να δημοσιεύει διαδρομές HTTP κάτω από δική της διαδρομή. Το Flow προσθέτει τις καθέτους (το `demo` γίνεται `/demo/`), απορρίπτει τις διαδρομές που ανήκουν στο ίδιο το Flow (`/`, `/cdn/`, `/fapi/`, `/private/`, `/flows/`, `/designer/`, `/parts/`, `/forms/`, `/css/`, `/js/`, `/fonts/`, `/panels/`) με `Proxy endpoint contains reserved path` και απορρίπτει μια διαδρομή που χρησιμοποιεί ήδη άλλη ροή. Το `proxytimeout` είναι ο χρόνος σε δευτερόλεπτα αναμονής για την απάντηση της ροής (προεπιλογή `120`).

## Κλήσεις απ’ έξω

| Διαδρομή | Χρήση |
|---|---|
| `GET` ή `POST /notify/{id}/` | στέλνει μια ειδοποίηση στη ροή με αυτό το id (το σώμα του POST περιορίζεται σε 1 MB)· οι συνιστώσες της ροής αποφασίζουν τι θα κάνουν με αυτήν. Απαντά `{"success":true}` |
| `+SOCKET /{id}/` | το WebSocket του επεξεργαστή για αυτή τη ροή (χρειάζεται τη συνεδρία) |
| `GET /private/?token=<token>` | απαριθμεί τα αρχεία του φακέλου `private/` όταν το token ισούται με το `token` των ρυθμίσεων· δέκα λάθος tokens μπλοκάρουν μια διεύθυνση για 15 λεπτά |
| `+POST /update/` | ενημερώνει την εφαρμογή από ένα αρχείο `.bundle`· μόνο για τη συσκευασμένη έκδοση |

Κρατήστε το `token` μυστικό, στείλτε αυτές τις κλήσεις μέσω HTTPS και τοποθετήστε το Flow πίσω από αντίστροφο proxy όταν είναι προσβάσιμο από το Διαδίκτυο.
