4d156d2837b5c37d0d73ebdb24eb89b58815ae80
Predchozi verze posilala na /login jen jmeno, heslo a nazev zarizeni. Server na to odpovidal 400 Bad Request na cokoliv, i na spravne udaje, protoze cekal neco uplne jineho. EasyWeb ma auth v2: token se nevydava proti uctu, ale proti zarizeni, a to je par klicu ECDSA P-256. Jmeno a heslo se pouziji jedinkrat, pri registraci klice, a soucasti registrace je podpis, kterym zarizeni dokazuje, ze privatni klic k poslanemu verejnemu opravdu ma. Od te chvile se podepisuje kazde volani, ktere s tokeny hybe. Overeno proti bezicimu serveru: se spravnym telem uz /login nevraci 400, ale 401 s neplatnymi udaji. Ucty z jejich testovaciho settings.json na verejnych instancich neplati, takze dal se bez skutecnych udaju nedostanu. Prihlaseni: - src/mcp/easyweb/crypto.ts - klice, podpisy, otisky. Podpis musi byt P1363, tedy hole r||s, 64 bajtu. Node podepisuje ve vychozim nastaveni do DER a ten by protistrana neuznala - src/mcp/easyweb/device.ts - klic se vyrobi jednou a prezije restart, uklada se mezi udaje konektoru, ktere uz jsou zasifrovane. Novy priznak `managed` na poli sluzby znamena, ze ho vyplnuje portal a ve formulari se nezobrazuje - src/mcp/easyweb/session.ts - tri tokeny, retez s ustupy (platny pristupovy, obnova obnovovacim, obnova zarizenim, cele prihlaseni), jedno prihlaseni naraz na konektor, tokeny jen v pameti Ta posledni pravidla nejsou opatrnost navic: tokeny jsou jednorazove, druhe pouziti server odmita kodem 409 a umi zarizeni zablokovat. Transport: - server si sam vybira, jestli odpovi JSON telem nebo SSE streamem, a streamem odpovida i na obycejna volani. Klient nabizi obojí a cte stream po kouscich - u dlouhych uloh ho server sam nezavira - handshake plati na token, ne na volani - odmitnute sezeni prijde jako chyba -32008 uvnitr uspesne odpovedi - seznamy se skladaji pres vsechny stranky, bez toho je videt jen prvni - odpoved se rozbaluje rekurzivne (structuredContent, contents, content, JSON zapsany jako text) Dlouho bezici nastroje se spousti jako uloha a ceka se na ni dotazovanim. Limit kroku se pri tom posouva z patnacti sekund na deset minut. Nedodelane: trvaly kanal notifikaci (GET SSE), nahravani souboru po castech a hlidani zmen kontraktu podle verze serveru. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
csbot-prototype
Web a klientsky portal firmy zamerene na automatizace, voiceboty, integrace, dashboardy, tickety a incident management.
Jedna aplikace v jednom containeru: Express obsluhuje API i zbuildovanou
React aplikaci. Bezi v AppFactory za reverse proxy na /apps/<app-id>.
Rychly start
npm install
npm run build
npm start
Aplikace nasloucha na 0.0.0.0:3000.
Lokalni vyvoj s hot reloadem (API na 3000, web na 5173):
npm run dev
Povinne endpointy
| Cesta | Ucel |
|---|---|
/health |
Health check pro AppFactory, vraci 200 |
/docs |
Swagger UI |
/openapi.json |
OpenAPI definice |
Verejne pres proxy jako /apps/<app-id>/health a /apps/<app-id>/docs.
Demo prihlaseni
| Heslo | Role | |
|---|---|---|
admin@automia.cz |
demo1234 |
interni spravce |
klient@firma.cz |
demo1234 |
klient |
Environment variables
| Promenna | Povinna | Vychozi | Popis |
|---|---|---|---|
PORT |
ne | 3000 | Port containeru, urcuje AppFactory sablona |
ROOT_PATH |
ne | prazdne | Prefix proxy, napr. /apps/csbot-prototype |
JWT_SECRET |
ano v produkci | - | Podpis tokenu, bez nej aplikace nenastartuje |
JWT_EXPIRES_IN |
ne | 8h | Platnost tokenu |
PUBLIC_ORIGIN |
ne | prazdne | Verejna domena pro absolutni adresy webhooku |
CORS_ORIGIN |
ne | localhost | Povolene originy, jen pro lokalni vyvoj |
Secrets se nikdy nelogují ani neukladaji do kodu.
Skripty
| Prikaz | Co dela |
|---|---|
npm run build |
Zbuilduje server i web do dist/ |
npm start |
Spusti zbuildovanou aplikaci |
npm run dev |
Vyvoj s hot reloadem |
npm run typecheck |
Kontrola typu bez generovani vystupu |
Dokumentace
Podrobnosti jsou ve slozce documentation/. Pred upravou projektu staci precist ji, neni nutne prochazet cely kod.
Pravidla pro AI asistenty a nastroje jsou v AGENTS.md.
Languages
TypeScript
91.8%
JavaScript
6.4%
HTML
1.5%
CSS
0.3%