Prava a bezpecnost: spravce firmy uz nemuze nastavit priznak spravce platformy ani clenstvi v cizi firme; pozvanky, konektory a automatizace kontroluji sve pravo; cizi firma v query je 404; zivy stream posila udalosti jen firmam, kterych se tykaji; akce nad ticketem maji kontrolu prava za firmu ticketu a strop viditelnosti; tokeny se nelogujou; limit pokusu na prihlaseni, kontakt a pozvanky; bezpecnostni hlavicky; zachyceni chyb v async handlerech; timing-safe porovnani tokenu. Vykon: audit neskenuje celou kolekci pri kazdem zapisu a konecne maze firemni zaznamy; ticket se uklada jednou misto trikrat; zapisy do Postgresu jsou serializovane podle ID; prava se pocitaji jednou na request; widgety nacitaji tickety jednou; strankovani seznamu; worker je pool misto kol; na webu udalost ze streamu neodmontuje stranku, dotazy maji spolecny debounce a cache, ciselniky drzi typovany sklad. Runtime: opakuji se jen chyby oznacene retryable; smycka nenarazi na strop 50 kroku (novy strop 1000 akci); podminka nad datem funguje; vystup MCP nastroje neprepisuje spoustec; sandbox skriptu firmy nejde opustit; MCP session id se drzi mezi volanimi; incident z kroku patri firme; jedno rozhodnuti o rezimu uloziste; snapshot neprepise soubor po chybe cteni. Refaktory: sdilene typy API v src/shared (web nic nekopiruje, osm rozjetych tvaru sjednoceno); spolecny modul net/guard pro volani ven; formularova vrstva ui/form; rozdeleni Connectors a FlowCanvas; jeden helper pro firmu z query, validaci a CRUD udalosti; pomucky ctx.util pro skripty konektoru; i18n verejneho webu vcetne anglictiny. Nova funkce: zalozeni firmy z registru ARES v Nastaveni (IC nebo nazev, dotazeni IC, DIC, sidla a pravni formy, vyber soucasnych statutarnich zastupcu a prokury, ucty spravce firmy s nahradnim e-mailem IC-poradi@placeholder.cz). Dokumentace: zaznam v 99-zmeny.md a aktualizace 15 dalsich dokumentu. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
28 lines
990 B
Docker
28 lines
990 B
Docker
FROM node:20-slim AS build
|
|
WORKDIR /app
|
|
COPY package*.json ./
|
|
# `npm ci` instaluje presne to, co je v lockfile. `npm install` by ho mohl
|
|
# prepsat a build by pak jel na jinych verzich nez vyvoj.
|
|
RUN npm ci
|
|
COPY . .
|
|
# Zbuilduje server (tsc -> dist) i web (vite -> dist/public)
|
|
RUN npm run build
|
|
|
|
FROM node:20-slim
|
|
WORKDIR /app
|
|
ENV NODE_ENV=production
|
|
ENV PORT=3000
|
|
EXPOSE 3000
|
|
COPY package*.json ./
|
|
RUN npm ci --omit=dev
|
|
COPY --from=build /app/dist ./dist
|
|
# Skripty konektoru jsou obycejny JavaScript, nekompiluji se. Musi se ale
|
|
# dostat do image, jinak by konektory nemely zadnou vykonnou cast.
|
|
COPY --from=build /app/scripts ./scripts
|
|
# Migrace jsou .sql, ktere tsc do dist nekopiruje. Bez nich by se schema
|
|
# nevytvorilo, aplikace by spadla na migracich a jela dal v pameti - tedy presne
|
|
# to, co ma databaze resit. Cesta musi odpovidat dist/db/migrations, protoze
|
|
# odtud si je hleda src/db/migrate.ts.
|
|
COPY --from=build /app/src/db/migrations ./dist/db/migrations
|
|
CMD ["npm", "start"]
|