Vlastni skripty firmy: prevod dat v JS, v logu vstup i vystup
Klikaci pravidla jsou u peti poli rychlejsi, ale u modelu objednavky je jich dvacet a v tom se necte. Vedle nich proto skript firmy: prevod z A do B napsany v JS, jeden na zakaznika. - Skripty se ukladaji do uloziste, ne na disk. Disk je uvnitr kontejneru a redeploy ho vymaze. - Krok Transformace dat - Vlastni skript. Vysledek jde dal jako krok.result. - V logu ticketu je u kroku vstup i vystup. Prave to byl duvod, proc skript nad pravidly vyhral. - Zkouska bez ulozeni: v portalu se vlepi skutecne telo a hned je videt, co z toho leze. - Skripty jsou v zalozce Akce, vedle definic akci. Obojí je popis toho, co aplikace ve firme umi, a spravuje to tentyz clovek. Skript je ciste prevod hodnot: dostane input, vrati objekt. Nema require, import, process, fetch ani console, bezi nejvys 2 s a vysledek se vejde do 256 kB. node:vm neni bezpecnostni hranice proti nekomu, kdo se chce dostat ven - je to izolace proti nehode a proti zacykleni. Pri zkousce se ukazalo, ze casovy limit nepokryval samotny beh: runInContext jen vyrobil funkci a zavolat ji zvenku znamenalo, ze while (true) uvnitr zablokovalo proces navzdy. Kod se ted vola uvnitr runInContext. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
99561c4682
commit
e4779caf82
@@ -2,6 +2,54 @@
|
||||
|
||||
Nejnovejsi nahore.
|
||||
|
||||
## 2026-08-20 - vlastni skripty firmy: prevod dat v JS
|
||||
|
||||
Klikaci pravidla jsou u peti poli rychlejsi, ale u modelu objednavky je jich
|
||||
dvacet a v tom se necte. Proto vedle nich **skript firmy**: prevod z A do B
|
||||
napsany v JavaScriptu, jeden na zakaznika.
|
||||
|
||||
### Pridano
|
||||
|
||||
- **Skripty firmy** (`src/data/tenantScripts.ts`). Uklada se do uloziste, ne na
|
||||
disk - disk je uvnitr kontejneru a redeploy ho vymaze.
|
||||
- **Krok Transformace dat - Vlastni skript.** Vybere se skript a zdrojova data,
|
||||
vysledek jde dal jako `{{krok.result}}`.
|
||||
- **V logu je vstup i vystup.** Prave to byl duvod, proc skript nad pravidly
|
||||
vyhral: kdyz vysledek nesedi, neni potreba hadat, co do prevodu vlezlo.
|
||||
- **Zkouska bez ulozeni.** V portalu se vlepi skutecne telo a hned je videt, co
|
||||
z toho leze. Bez toho by se chyba poznala az z padleho behu.
|
||||
- Skripty jsou v zalozce **Akce**, vedle definic akci. Obojí je popis toho, co
|
||||
aplikace ve firme umi, a spravuje to tentyz clovek pod pravem `action.manage`.
|
||||
|
||||
### Co skript smi a co ne
|
||||
|
||||
Skript je **ciste prevod hodnot**: dostane `input`, vrati objekt. Nema `require`,
|
||||
`import`, `process`, `fetch` ani `console`. Volani ven patri do kroku konektoru,
|
||||
ktery ma pristupove udaje, opakovani i zapis do logu.
|
||||
|
||||
| Pojistka | Proc |
|
||||
| --- | --- |
|
||||
| limit 2 s | zacykleny skript by jinak zablokoval workera vsem firmam |
|
||||
| vysledek do 256 kB | vetsi objekt uz stejne nikdo dal nezpracuje |
|
||||
| kod do 20 000 znaku | delsi uz neni prevod, ale aplikace |
|
||||
| zadny stav mezi behy | stav, ktery prezije beh, je zdroj nejhur hledanych chyb |
|
||||
|
||||
**Cim to neni.** `node:vm` neni bezpecnostni hranice proti nekomu, kdo se chce
|
||||
dostat ven. Je to izolace proti nehode a proti zacykleni. Skript pise spravce
|
||||
te same firmy, tedy nekdo, kdo jeji data stejne vidi. Kdyby mel skripty psat
|
||||
nekdo zvenku, patri to do samostatneho procesu s vlastnimi pravy.
|
||||
|
||||
### Opraveno pri tom
|
||||
|
||||
- **Casovy limit nepokryval samotny beh.** Prvni verze pouzila `runInContext`
|
||||
jen na vyrobu funkce a zavolala ji az potom zvenku - `while (true) {}` uvnitr
|
||||
ni zablokovalo proces navzdy. Zjisteno pri zkousce, ktera se zasekla. Kod se
|
||||
ted vola uvnitr `runInContext`, takze limit plati.
|
||||
- Chyba z limitu nese prototyp z kontextu skriptu, takze `instanceof Error` na
|
||||
ni neplati. Pozna se podle textu.
|
||||
- `console` v novem kontextu existuje samo od sebe a psalo by do logu serveru.
|
||||
Odebrano.
|
||||
|
||||
## 2026-08-20 - prace nad celym modelem, ne nad plochym seznamem poli
|
||||
|
||||
Odesilatel posle cely model - objednavka ze Shoptetu ma zanoreni, ceny
|
||||
|
||||
Reference in New Issue
Block a user