i18n - docs translations (#17199)
Created by Github action Co-authored-by: github-actions <github-actions@twenty.com>
This commit is contained in:
committed by
GitHub
parent
5bcbe43596
commit
b7fbe1c49e
+4
-4
@@ -4,14 +4,14 @@ title: Osvědčené postupy
|
||||
|
||||
Tento dokument popisuje osvědčené postupy, které byste měli dodržovat při práci na backendu.
|
||||
|
||||
## Follow a modular approach
|
||||
## Dodržujte modulární přístup
|
||||
|
||||
Backend sleduje modulární přístup, což je základní princip při práci s NestJS. Ujistěte se, že rozdělujete svůj kód na znovupoužitelné moduly, abyste udrželi čistý a organizovaný kód.
|
||||
Každý modul by měl zahrnovat určitou funkci nebo funkcionalitu a mít jasně definovaný rozsah. This modular approach enables clear separation of concerns and removes unnecessary complexities.
|
||||
Každý modul by měl zahrnovat určitou funkci nebo funkcionalitu a mít jasně definovaný rozsah. Tento modulární přístup umožňuje jasné oddělení odpovědností a odstraňuje zbytečné složitosti.
|
||||
|
||||
## Expose services to use in modules
|
||||
## Zpřístupněte služby pro použití v modulech.
|
||||
|
||||
Always create services that have a clear and single responsibility, which enhances code readability and maintainability. Pojmenovávejte služby výstižně a konzistentně.
|
||||
Vždy vytvářejte služby s jasně vymezenou jedinou odpovědností, což zvyšuje čitelnost a udržovatelnost kódu. Pojmenovávejte služby výstižně a konzistentně.
|
||||
|
||||
Měli byste také zpřístupnit služby, které chcete používat v jiných modulech. Zpřístupnění služeb ostatním modulům je možné díky výkonnému systému injektování závislostí v NestJS a podporuje volné vazby mezi komponentami.
|
||||
|
||||
|
||||
+7
-7
@@ -21,7 +21,7 @@ server
|
||||
└───utils
|
||||
```
|
||||
|
||||
## Ability
|
||||
## Oprávnění
|
||||
|
||||
Definuje oprávnění a zahrnuje zpracovníky pro každou entitu.
|
||||
|
||||
@@ -29,7 +29,7 @@ Definuje oprávnění a zahrnuje zpracovníky pro každou entitu.
|
||||
|
||||
Definuje vlastní dekorátory v NestJS pro přídavnou funkčnost.
|
||||
|
||||
See [custom decorators](https://docs.nestjs.com/custom-decorators) for more details.
|
||||
Více podrobností naleznete ve [vlastních dekorátorech](https://docs.nestjs.com/custom-decorators).
|
||||
|
||||
## Filtry
|
||||
|
||||
@@ -37,9 +37,9 @@ Zahrnuje filtry výjimek k zpracování výjimek, které mohou nastat v koncový
|
||||
|
||||
## Guards
|
||||
|
||||
See [guards](https://docs.nestjs.com/guards) for more details.
|
||||
Více podrobností naleznete ve [strážích](https://docs.nestjs.com/guards).
|
||||
|
||||
## Health
|
||||
## Zdraví
|
||||
|
||||
Zahrnuje veřejně dostupné REST API (healthz), které vrací JSON k potvrzení, zda databáze funguje, jak se očekává.
|
||||
|
||||
@@ -49,7 +49,7 @@ Definuje vlastní objekty a poskytuje GraphQL API (graphql/metadata).
|
||||
|
||||
## Pracovní prostor
|
||||
|
||||
Generates and serves custom GraphQL schema based on the metadata.
|
||||
Generuje a poskytuje vlastní schéma GraphQL na základě metadat.
|
||||
|
||||
### Struktura adresáře pracovního prostoru
|
||||
|
||||
@@ -87,7 +87,7 @@ Kořen adresáře pracovního prostoru zahrnuje `workspace.factory.ts`, soubor o
|
||||
|
||||
Tato strategie neslouží pouze k organizaci, ale pomáhá i v optimalizaci, jako je ukládání vytvořených typových definic do mezipaměti pro zvýšení výkonu a škálovatelnosti.
|
||||
|
||||
### Workspace Schema builder
|
||||
### Builder schématu pracovního prostoru
|
||||
|
||||
Generuje schéma GraphQL a zahrnuje:
|
||||
|
||||
@@ -114,7 +114,7 @@ Obsahuje službu, která spojuje FieldMetadataType s odpovídajícími GraphQL s
|
||||
|
||||
Zahrnuje třídu `TypeDefinitionsStorage`, která obsahuje opakovaně použitelné definice typů, zabraňující duplikaci typů GraphQL.
|
||||
|
||||
### Workspace Resolver Builder
|
||||
### Builder resolveru pracovního prostoru
|
||||
|
||||
Vytváří funkce pro řešení dotazů a mutací v GraphQL schématu.
|
||||
|
||||
|
||||
+4
-4
@@ -5,7 +5,7 @@ title: Příkazy backendu
|
||||
## Užitečné příkazy
|
||||
|
||||
Tyto příkazy by měly být vykonávány z adresáře packages/twenty-server.
|
||||
From any other folder you can run `npx nx {command} twenty-server` (or `npx nx run twenty-server:{command}`).
|
||||
Z jakéhokoli jiného adresáře můžete spustit `npx nx {command} twenty-server` (nebo `npx nx run twenty-server:{command}`).
|
||||
|
||||
### První nastavení
|
||||
|
||||
@@ -36,7 +36,7 @@ Poznámka: můžete spustit `npx nx run twenty-server:test:integration:with-db-r
|
||||
|
||||
### Obnovení databáze
|
||||
|
||||
If you want to reset and seed the database, you can run the following command:
|
||||
Pokud chcete resetovat a naplnit databázi daty, můžete spustit následující příkaz:
|
||||
|
||||
```bash
|
||||
npx nx run twenty-server:database:reset
|
||||
@@ -59,9 +59,9 @@ npx nx run twenty-server:command workspace:sync-metadata -f
|
||||
```
|
||||
|
||||
<Warning>
|
||||
This will drop the database and re-run the migrations and seed.
|
||||
Tímto se databáze smaže a znovu se spustí migrace a seedování.
|
||||
|
||||
Make sure to back up any data you want to keep before running this command.
|
||||
Před spuštěním tohoto příkazu si nezapomeňte zálohovat všechna data, která chcete zachovat.
|
||||
</Warning>
|
||||
|
||||
## Technologický stack
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: Bugs, Requests & Pull Requests
|
||||
info: Report issues, request features, and contribute code
|
||||
title: Hlášení chyb, požadavky a pull requesty
|
||||
info: Nahlašujte problémy, žádejte o nové funkce a přispívejte kódem
|
||||
---
|
||||
|
||||
## Nahlášení chyb
|
||||
@@ -13,66 +13,66 @@ O pomoc můžete také požádat na [Discordu](https://discord.gg/cx5n4Jzs57).
|
||||
|
||||
Pokud si nejste jisti, zda se jedná o chybu, a máte pocit, že je to spíše žádost o funkci, pak byste pravděpodobně měli [otevřít diskuzi](https://github.com/twentyhq/twenty/discussions/new).
|
||||
|
||||
## Submit a Pull Request
|
||||
## Odešlete pull request
|
||||
|
||||
Contributing code to Twenty starts with a pull request (PR).
|
||||
Přispívání kódem do Twenty začíná pull requestem (PR).
|
||||
|
||||
### Než začnete
|
||||
|
||||
1. Check [existing issues](https://github.com/twentyhq/twenty/issues) for related work
|
||||
2. For new features, open an issue first to discuss
|
||||
3. Review our [Code of Conduct](https://github.com/twentyhq/twenty/blob/main/CODE_OF_CONDUCT.md)
|
||||
1. Zkontrolujte [existující issues](https://github.com/twentyhq/twenty/issues) ohledně související práce
|
||||
2. Pro nové funkce nejprve otevřete issue k diskusi
|
||||
3. Prostudujte si náš [Kodex chování](https://github.com/twentyhq/twenty/blob/main/CODE_OF_CONDUCT.md)
|
||||
|
||||
### Fork and Clone
|
||||
### Fork a klonování
|
||||
|
||||
1. Fork the repository on GitHub
|
||||
2. Clone your fork:
|
||||
1. Vytvořte fork repozitáře na GitHubu
|
||||
2. Naklonujte svůj fork:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/YOUR_USERNAME/twenty.git
|
||||
cd twenty
|
||||
```
|
||||
|
||||
3. Add upstream remote:
|
||||
3. Přidejte vzdálený upstream:
|
||||
|
||||
```bash
|
||||
git remote add upstream https://github.com/twentyhq/twenty.git
|
||||
```
|
||||
|
||||
### Create a Branch
|
||||
### Vytvoření větve
|
||||
|
||||
```bash
|
||||
git checkout -b feature/your-feature-name
|
||||
```
|
||||
|
||||
Use descriptive branch names:
|
||||
Používejte výstižné názvy větví:
|
||||
|
||||
* `feature/add-export-button`
|
||||
* `fix/login-redirect-issue`
|
||||
* `docs/update-api-guide`
|
||||
|
||||
### Make Your Changes
|
||||
### Proveďte změny
|
||||
|
||||
1. Write clean, well-documented code
|
||||
2. Follow existing code style
|
||||
3. Add tests for new functionality
|
||||
4. Update documentation if needed
|
||||
1. Pište čistý, dobře zdokumentovaný kód
|
||||
2. Dodržujte stávající styl kódu
|
||||
3. Přidejte testy pro novou funkcionalitu
|
||||
4. Podle potřeby aktualizujte dokumentaci
|
||||
|
||||
### Submit Your PR
|
||||
### Odešlete svůj PR
|
||||
|
||||
1. Push your branch:
|
||||
1. Odešlete svou větev:
|
||||
|
||||
```bash
|
||||
git push origin feature/your-feature-name
|
||||
```
|
||||
|
||||
2. Open a PR on GitHub
|
||||
3. Fill in the PR template
|
||||
4. Link related issues
|
||||
2. Otevřete PR na GitHubu
|
||||
3. Vyplňte šablonu PR
|
||||
4. Propojte související issues
|
||||
|
||||
### PR Checklist
|
||||
### Kontrolní seznam PR
|
||||
|
||||
* [ ] Code follows project style guidelines
|
||||
* [ ] Tests pass locally
|
||||
* [ ] Documentation is updated
|
||||
* [ ] PR description explains the changes
|
||||
* [ ] Kód odpovídá projektovým zásadám stylu
|
||||
* [ ] Testy procházejí lokálně
|
||||
* [ ] Dokumentace je aktualizována
|
||||
* [ ] Popis PR vysvětluje změny
|
||||
|
||||
+6
-6
@@ -77,8 +77,8 @@ If you feel like you need to add a `useEffect` in your root component, you shoul
|
||||
Stejný postup můžete aplikovat na logiku získávání dat pomocí Apollo hooks.
|
||||
|
||||
```tsx
|
||||
// ❌ Bad, will cause re-renders even if data is not changing,
|
||||
// because useEffect needs to be re-evaluated
|
||||
// ❌ Špatně, způsobí překreslení i když se data nemění,
|
||||
// protože useEffect je třeba přehodnotit
|
||||
export const PageComponent = () => {
|
||||
const [data, setData] = useRecoilState(dataState);
|
||||
const [someDependency] = useRecoilState(someDependencyState);
|
||||
@@ -96,12 +96,12 @@ export const App = () => (
|
||||
<RecoilRoot>
|
||||
<PageComponent />
|
||||
</RecoilRoot>
|
||||
);
|
||||
);},{
|
||||
```
|
||||
|
||||
```tsx
|
||||
// ✅ Good, will not cause re-renders if data is not changing,
|
||||
// because useEffect is re-evaluated in another sibling component
|
||||
// ✅ Dobře, nezpůsobí překreslení, pokud se data nemění,
|
||||
// protože useEffect je přehodnoceno v další sourozené komponentě
|
||||
export const PageComponent = () => {
|
||||
const [data, setData] = useRecoilState(dataState);
|
||||
|
||||
@@ -240,7 +240,7 @@ Nejčastější příklad je komponenta ikon:
|
||||
```tsx
|
||||
const SomeParentComponent = () => <MyComponent Icon={MyIcon} />;
|
||||
|
||||
// In MyComponent
|
||||
// V komponentě MyComponent
|
||||
const MyComponent = ({ MyIcon }: { MyIcon: IconComponent }) => {
|
||||
const theme = useTheme();
|
||||
|
||||
|
||||
+5
-5
@@ -29,7 +29,7 @@ Zahrnuje komponenty nejvyšší úrovně definované aplikačními trasami. Impo
|
||||
## Moduly
|
||||
|
||||
Každý modul představuje funkci nebo skupinu funkcí s jejich specifickými komponenty, stavy a provozní logikou.
|
||||
Všechny by měly dodržovat strukturu níže. You can nest modules within modules (referred to as submodules) and the same rules will apply.
|
||||
Všechny by měly dodržovat strukturu níže. Moduly můžete vnořovat do sebe (tzv. podmoduly) a platí pro ně stejná pravidla.
|
||||
|
||||
```
|
||||
module1
|
||||
@@ -64,7 +64,7 @@ Více podrobností naleznete v [GraphQL](https://graphql.org/learn/).
|
||||
|
||||
* Fragmenty
|
||||
|
||||
Fragment je znovupoužitelný kus dotazu, který můžete použít na různých místech. By using fragments, it's easier to avoid duplicating code.
|
||||
Fragment je znovupoužitelný kus dotazu, který můžete použít na různých místech. Pomocí fragmentů je snazší vyhnout se duplikaci kódu.
|
||||
|
||||
Více podrobností naleznete v [GraphQL Fragments](https://graphql.org/learn/queries/#fragments).
|
||||
|
||||
@@ -76,7 +76,7 @@ Více podrobností naleznete v [GraphQL Queries](https://graphql.org/learn/queri
|
||||
|
||||
Více podrobností naleznete v [GraphQL Mutations](https://graphql.org/learn/queries/#mutations).
|
||||
|
||||
### Hooks
|
||||
### Hooky
|
||||
|
||||
Více podrobností naleznete v [Hooks](https://react.dev/learn/reusing-logic-with-custom-hooks).
|
||||
|
||||
@@ -88,9 +88,9 @@ Obsahuje logiku správy stavů. To řeší [RecoilJS](https://recoiljs.org).
|
||||
|
||||
Vestavěná správa stavů v Reactu stále spravuje stav uvnitř komponenty.
|
||||
|
||||
### Utils
|
||||
### Pomocné funkce
|
||||
|
||||
Měly by obsahovat pouze znovupoužitelné čisté funkce. Otherwise, create custom hooks in the `hooks` folder.
|
||||
Měly by obsahovat pouze znovupoužitelné čisté funkce. V opačném případě vytvořte vlastní hooky ve složce `hooks`.
|
||||
|
||||
## UI
|
||||
|
||||
|
||||
+1
-1
@@ -25,7 +25,7 @@ npx nx run twenty-front:graphql:generate
|
||||
### Linter
|
||||
|
||||
```bash
|
||||
npx nx run twenty-front:lint # pass --fix to fix lint errors
|
||||
npx nx run twenty-front:lint # přidejte --fix pro opravu chyb ve formátování
|
||||
```
|
||||
|
||||
## Překlady
|
||||
|
||||
+2
-2
@@ -3,6 +3,6 @@ title: Storybook
|
||||
description: Prozkoumejte knihovnu komponent UI na Twenty
|
||||
---
|
||||
|
||||
View our complete component library and documentation in Storybook.
|
||||
Prohlédněte si naši kompletní knihovnu komponent a dokumentaci ve Storybooku.
|
||||
|
||||
[Open Storybook →](https://storybook.twenty.com)
|
||||
[Otevřít Storybook →](https://storybook.twenty.com)
|
||||
|
||||
+21
-21
@@ -36,9 +36,9 @@ export function MyComponent() {
|
||||
|
||||
### Vlastnosti
|
||||
|
||||
Create the type of the props and call it `(ComponentName)Props` if there's no need to export it.
|
||||
Vytvořte typ rekvizit a pojmenujte jej `(ComponentName)Props`, pokud není potřeba jej exportovat.
|
||||
|
||||
Use props destructuring.
|
||||
Použijte destrukturalizaci rekvizit.
|
||||
|
||||
```tsx
|
||||
// ❌ Bad, no type
|
||||
@@ -67,11 +67,11 @@ const EmailField: React.FC<{
|
||||
```
|
||||
|
||||
```tsx
|
||||
/* ✅ - Good, a separate type (OwnProps) is explicitly defined for the
|
||||
* component's props
|
||||
* - This method doesn't automatically include the children prop. If
|
||||
* you want to include it, you have to specify it in OwnProps.
|
||||
*/
|
||||
/* ✅ - Dobré, explicitně definován samostatný typ (OwnProps) pro
|
||||
* rekvizity komponenty
|
||||
* - Tato metoda automaticky nezahrnuje rekvizitu children. Pokud
|
||||
* ji chcete zahrnout, musíte ji specifikovat v OwnProps.
|
||||
*/
|
||||
type EmailFieldProps = {
|
||||
value: string;
|
||||
};
|
||||
@@ -81,9 +81,9 @@ const EmailField = ({ value }: EmailFieldProps) => (
|
||||
);
|
||||
```
|
||||
|
||||
#### No Single Variable Prop Spreading in JSX Elements
|
||||
#### Nepoužívejte rozbalení jediného objektu rekvizit v prvcích JSX
|
||||
|
||||
Avoid using single variable prop spreading in JSX elements, like `{...props}`. Tato praxe často vede k tomu, že kód je méně čitelný a obtížnější udržovat, protože není jasné, které rekvizity komponenta přijímá.
|
||||
Vyhněte se používání rozbalení jediného objektu rekvizit v prvcích JSX, například `{...props}`. Tato praxe často vede k tomu, že kód je méně čitelný a obtížnější udržovat, protože není jasné, které rekvizity komponenta přijímá.
|
||||
|
||||
```tsx
|
||||
/* ❌ - Bad, spreads a single variable prop into the underlying component
|
||||
@@ -94,9 +94,9 @@ const MyComponent = (props: OwnProps) => {
|
||||
```
|
||||
|
||||
```tsx
|
||||
/* ✅ - Good, Explicitly lists all props
|
||||
* - Enhances readability and maintainability
|
||||
*/
|
||||
/* ✅ - Dobré, explicitně uvádí všechny rekvizity
|
||||
* - Zvyšuje čitelnost a udržovatelnost
|
||||
*/
|
||||
const MyComponent = ({ prop1, prop2, prop3 }: MyComponentProps) => {
|
||||
return <OtherComponent {...{ prop1, prop2, prop3 }} />;
|
||||
};
|
||||
@@ -105,8 +105,8 @@ const MyComponent = ({ prop1, prop2, prop3 }: MyComponentProps) => {
|
||||
Odůvodnění:
|
||||
|
||||
* Na první pohled je jasné, které prop kód předává, čímž je snazší pochopit a udržovat.
|
||||
* It helps to prevent tight coupling between components via their props.
|
||||
* Linting tools make it easier to identify misspelled or unused props when you list props explicitly.
|
||||
* Pomáhá to předcházet těsnému provázání mezi komponentami prostřednictvím jejich rekvizit.
|
||||
* Lintovací nástroje usnadňují identifikaci překlepů nebo nepoužívaných rekvizit, když rekvizity uvádíte explicitně.
|
||||
|
||||
## JavaScript
|
||||
|
||||
@@ -123,10 +123,10 @@ const value = process.env.MY_VALUE ?? 'default';
|
||||
### Používejte volitelné zřetězení `?.`
|
||||
|
||||
```tsx
|
||||
// ❌ Bad
|
||||
// ❌ Špatné
|
||||
onClick && onClick();
|
||||
|
||||
// ✅ Good
|
||||
// ✅ Dobré
|
||||
onClick?.();
|
||||
```
|
||||
|
||||
@@ -234,7 +234,7 @@ Vyhýbejte se používání hodnot `px` nebo `rem` přímo ve stylizovaných kom
|
||||
|
||||
#### Barvy
|
||||
|
||||
Refrain from introducing new colors; instead, use the existing palette from the theme. Pokud by došlo k tomu, že paleta neodpovídá, prosím nechte komentář, aby to tým mohl napravit.
|
||||
Zdržte se zavádění nových barev; místo toho použijte existující paletu z tématu. Pokud by došlo k tomu, že paleta neodpovídá, prosím nechte komentář, aby to tým mohl napravit.
|
||||
|
||||
```tsx
|
||||
// ❌ Špatné, přímo specifikuje hodnoty stylu bez využití tématu
|
||||
@@ -275,11 +275,11 @@ import { Meta, StoryObj } from '@storybook/react';
|
||||
|
||||
### Proč Zákaz Importů Typů
|
||||
|
||||
* **Consistency**: By avoiding type imports and using a single approach for both type and value imports, the codebase remains consistent in its module import style.
|
||||
* **Konzistence**: Vyhýbáním se importům typů a použitím jednotného přístupu pro importy typů i hodnot zůstává kódová základna konzistentní ve svém stylu importů modulů.
|
||||
|
||||
* **Readability**: No-type imports improve code readability by making it clear when you're importing values or types. Tím se snižuje dvojznačnost a usnadňuje pochopení účelu importovaných symbolů.
|
||||
* **Čitelnost**: Importy bez type zlepšují čitelnost kódu tím, že je jasné, zda importujete hodnoty nebo typy. Tím se snižuje dvojznačnost a usnadňuje pochopení účelu importovaných symbolů.
|
||||
|
||||
* **Maintainability**: It enhances codebase maintainability because developers can identify and locate type-only imports when reviewing or modifying code.
|
||||
* **Udržovatelnost**: Zvyšuje udržovatelnost kódové základny, protože vývojáři mohou při revizi nebo úpravách kódu identifikovat a najít importy pouze typů.
|
||||
|
||||
### Pravidlo ESLint
|
||||
|
||||
@@ -287,4 +287,4 @@ Pravidlo ESLint, `@typescript-eslint/consistent-type-imports`, prosazuje standar
|
||||
|
||||
Upozorňujeme, že toto pravidlo konkrétně řeší vzácné okrajové případy, kdy dochází k neúmyslným typovým importům. TypeScript sám odrazuje tuto praxi, jak je uvedeno v [poznámkách k verzi TypeScript 3.8](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html). Ve většině případů byste neměli potřebovat používat pouze typové importy.
|
||||
|
||||
To ensure your code complies with this rule, make sure to run ESLint as part of your development workflow.
|
||||
Aby váš kód splňoval toto pravidlo, spusťte ESLint jako součást svého vývojového pracovního postupu.
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: Práce s Figma
|
||||
info: Learn how you can collaborate with Twenty's Figma
|
||||
info: Zjistěte, jak můžete spolupracovat s Figmou Twenty
|
||||
---
|
||||
|
||||
Figma je nástroj pro návrh uživatelského rozhraní, který pomáhá překlenout komunikační bariéru mezi návrháři a vývojáři.
|
||||
@@ -18,7 +18,7 @@ Tento průvodce vysvětluje, jak můžete spolupracovat s Figma.
|
||||
|
||||
## Struktura Figma
|
||||
|
||||
On the left sidebar, you can access the different pages of Twenty's Figma. Takto jsou organizovány:
|
||||
Na levém postranním panelu můžete přistupovat k různým stránkám Figmy společnosti Twenty. Takto jsou organizovány:
|
||||
|
||||
* **Stránka komponentů:** Toto je první stránka. Návrhář ji používá k vytváření a organizování znovupoužitelných návrhových prvků použitých v celém návrhovém souboru. Například tlačítka, ikony, symboly nebo jakékoli jiné znovupoužitelné komponenty. Slouží k zajištění konzistence v celém návrhu.
|
||||
* **Hlavní stránka:** Druhá stránka je hlavní stránka, která zobrazuje kompletní uživatelské rozhraní projektu. Můžete stisknout **"Přehrát"**, abyste použili kompletní prototyp aplikace.
|
||||
|
||||
@@ -114,7 +114,7 @@ Všechny příkazy v následujících krocích byste měli provádět z kořene
|
||||
**Možnost 2:** Pokud máte nainstalován docker:
|
||||
|
||||
```bash
|
||||
make postgres-on-docker
|
||||
make -C packages/twenty-docker postgres-on-docker
|
||||
```
|
||||
</Tab>
|
||||
|
||||
@@ -172,7 +172,7 @@ Všechny příkazy v následujících krocích byste měli provádět z kořene
|
||||
**Možnost 2:** Pokud máte nainstalován docker:
|
||||
|
||||
```bash
|
||||
make postgres-on-docker
|
||||
make -C packages/twenty-docker postgres-on-docker
|
||||
```
|
||||
</Tab>
|
||||
|
||||
@@ -193,7 +193,7 @@ Všechny příkazy v následujících krocích byste měli provádět z kořene
|
||||
Použijte tuto možnost pouze pokud si jste jisti extra kroky včetně zapnutí [Docker Desktop WSL2](https://docs.docker.com/desktop/wsl).
|
||||
|
||||
```bash
|
||||
make postgres-on-docker
|
||||
make -C packages/twenty-docker postgres-on-docker
|
||||
```
|
||||
</Tab>
|
||||
</Tabs>
|
||||
@@ -212,7 +212,7 @@ Twenty vyžaduje ke svému provozu Redis cache pro zajištění nejlepšího vý
|
||||
**Možnost 2:** Pokud máte nainstalován docker:
|
||||
|
||||
```bash
|
||||
make redis-on-docker
|
||||
make -C packages/twenty-docker redis-on-docker
|
||||
```
|
||||
</Tab>
|
||||
|
||||
@@ -229,7 +229,7 @@ Twenty vyžaduje ke svému provozu Redis cache pro zajištění nejlepšího vý
|
||||
**Možnost 2:** Pokud máte nainstalován docker:
|
||||
|
||||
```bash
|
||||
make redis-on-docker
|
||||
make -C packages/twenty-docker redis-on-docker
|
||||
```
|
||||
</Tab>
|
||||
|
||||
@@ -240,7 +240,7 @@ Twenty vyžaduje ke svému provozu Redis cache pro zajištění nejlepšího vý
|
||||
**Možnost 2:** Pokud máte nainstalován docker:
|
||||
|
||||
```bash
|
||||
make redis-on-docker
|
||||
make -C packages/twenty-docker redis-on-docker
|
||||
```
|
||||
</Tab>
|
||||
</Tabs>
|
||||
@@ -259,7 +259,7 @@ cp ./packages/twenty-server/.env.example ./packages/twenty-server/.env
|
||||
```
|
||||
|
||||
<Info>
|
||||
**Multi-Workspace Mode:** By default, Twenty runs in single-workspace mode where only one workspace can be created. To enable multi-workspace support (useful for testing subdomain-based features), set `IS_MULTIWORKSPACE_ENABLED=true` in your server `.env` file. See [Multi-Workspace Mode](/l/cs/developers/self-host/capabilities/setup#multi-workspace-mode) for details.
|
||||
**Režim více pracovních prostorů:** Ve výchozím nastavení běží Twenty v režimu jednoho pracovního prostoru, ve kterém lze vytvořit pouze jeden pracovní prostor. Chcete-li povolit podporu více pracovních prostorů (užitečné pro testování funkcí založených na subdoménách), nastavte v serverovém souboru `.env` hodnotu `IS_MULTIWORKSPACE_ENABLED=true`. Podrobnosti viz [Režim více pracovních prostorů](/l/cs/developers/self-host/capabilities/setup#multi-workspace-mode).
|
||||
</Info>
|
||||
|
||||
## Krok 6: Instalace závislostí
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: Contribute
|
||||
description: Contribute to Twenty's open-source development.
|
||||
title: Přispět
|
||||
description: Přispějte k open-source vývoji Twenty.
|
||||
---
|
||||
|
||||
<Frame>
|
||||
@@ -9,24 +9,24 @@ description: Contribute to Twenty's open-source development.
|
||||
|
||||
## Přehled
|
||||
|
||||
Twenty is open-source and welcomes contributions from the community. Whether you're fixing bugs, adding features, or improving documentation, your contributions help make Twenty better for everyone.
|
||||
Twenty je open-source a vítá příspěvky od komunity. Ať už opravujete chyby, přidáváte funkce nebo zlepšujete dokumentaci, vaše příspěvky pomáhají zlepšovat Twenty pro všechny.
|
||||
|
||||
## Ways to Contribute
|
||||
## Způsoby, jak přispět
|
||||
|
||||
* **Report bugs**: Help identify and document issues
|
||||
* **Submit features**: Propose and implement new functionality
|
||||
* **Improve documentation**: Make our docs clearer and more helpful
|
||||
* **Frontend development**: Work on the React-based UI
|
||||
* **Backend development**: Contribute to the NestJS server
|
||||
* **Nahlašujte chyby**: Pomozte identifikovat a dokumentovat problémy
|
||||
* **Přidávejte funkce**: Navrhujte a implementujte novou funkcionalitu
|
||||
* **Zlepšujte dokumentaci**: Udělejte naši dokumentaci přehlednější a užitečnější
|
||||
* **Vývoj frontendu**: Pracujte na uživatelském rozhraní postaveném na Reactu
|
||||
* **Vývoj backendu**: Podílejte se na serveru NestJS
|
||||
|
||||
## Getting Started
|
||||
## Začínáme
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Bug Reports & Requests" icon="bug" href="/l/cs/developers/contribute/capabilities/bug-and-requests">
|
||||
Report issues or request features
|
||||
<Card title="Hlášení chyb a požadavky" icon="bug" href="/l/cs/developers/contribute/capabilities/bug-and-requests">
|
||||
Nahlaste problémy nebo požádejte o nové funkce
|
||||
</Card>
|
||||
|
||||
<Card title="Vývoj frontendu" icon="browser" href="/l/cs/developers/contribute/capabilities/frontend-development">
|
||||
Contribute to the UI
|
||||
Přispějte k vývoji uživatelského rozhraní
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: API
|
||||
description: Query and modify your CRM data programmatically using REST or GraphQL.
|
||||
description: Programově dotazujte a upravujte svá CRM data pomocí REST nebo GraphQL.
|
||||
---
|
||||
|
||||
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
|
||||
@@ -9,7 +9,7 @@ Twenty bylo vytvořeno s ohledem na vývojáře, nabízíme výkonné API, kter
|
||||
|
||||
## Přístup orientovaný na vývojáře
|
||||
|
||||
Twenty generates APIs specifically for your data model:
|
||||
Twenty generuje API specificky pro váš datový model:
|
||||
|
||||
* **Nejsou vyžadována dlouhá ID**: Používejte v koncových bodech přímo názvy objektů a polí.
|
||||
* **Standardní a vlastní objekty jsou rovnocenně zpracovány**: Vaše vlastní objekty mají stejnou podporu API jako vestavěné.
|
||||
@@ -17,52 +17,52 @@ Twenty generates APIs specifically for your data model:
|
||||
* **Vlastní dokumentace**: Generována specificky pro datový model vašeho pracovního prostoru.
|
||||
|
||||
<Note>
|
||||
Your personalized API documentation is available under **Settings → API & Webhooks** after creating an API key. Since Twenty generates APIs that match your custom data model, the documentation is unique to your workspace.
|
||||
Vaše personalizovaná dokumentace k API je dostupná v **Nastavení → API & Webhooks** po vytvoření API klíče. Protože Twenty generuje API odpovídající vašemu vlastnímu datovému modelu, dokumentace je jedinečná pro váš pracovní prostor.
|
||||
</Note>
|
||||
|
||||
## The Two API Types
|
||||
## Dva typy API
|
||||
|
||||
### Core API
|
||||
|
||||
Přístupné na `/rest/` nebo `/graphql/`
|
||||
|
||||
Work with your actual **records** (the data):
|
||||
Pracujte se svými skutečnými **záznamy** (daty):
|
||||
|
||||
* Create, read, update, delete People, Companies, Opportunities, etc.
|
||||
* Query and filter data
|
||||
* Vytvářejte, čtěte, aktualizujte a mazejte Lidi, Společnosti, Příležitosti atd.
|
||||
* Dotazujte a filtrujte data
|
||||
* Spravování vztahů mezi záznamy.
|
||||
|
||||
### Metadata API
|
||||
|
||||
Přístupné na `/rest/metadata/` nebo `/metadata/`
|
||||
|
||||
Manage your **workspace and data model**:
|
||||
Spravujte svůj **pracovní prostor a datový model**:
|
||||
|
||||
* Vytvářet, upravovat nebo mazat objekty a pole.
|
||||
* Konfigurace nastavení pracovního prostoru.
|
||||
* Define relationships between objects
|
||||
* Definujte vztahy mezi objekty
|
||||
|
||||
## REST vs GraphQL
|
||||
|
||||
Both Core and Metadata APIs are available in REST and GraphQL formats:
|
||||
Jak Core, tak Metadata API jsou k dispozici ve formátech REST a GraphQL:
|
||||
|
||||
| Formát | Available Operations |
|
||||
| ----------- | ---------------------------------------------------------- |
|
||||
| **REST** | CRUD, batch operations, upserts |
|
||||
| **GraphQL** | Same + **batch upserts**, relationship queries in one call |
|
||||
| Formát | Dostupné operace |
|
||||
| ----------- | ---------------------------------------------------------------------- |
|
||||
| **REST** | CRUD, hromadné operace, operace upsert |
|
||||
| **GraphQL** | Stejné + **hromadné operace upsert**, dotazy na vztahy v jednom volání |
|
||||
|
||||
Choose based on your needs — both formats access the same data.
|
||||
Zvolte podle svých potřeb — oba formáty přistupují ke stejným datům.
|
||||
|
||||
## Koncové body API
|
||||
|
||||
| Environment | Base URL |
|
||||
| --------------- | ------------------------- |
|
||||
| **Cloud** | `https://api.twenty.com/` |
|
||||
| **Self-Hosted** | `https://{your-domain}/` |
|
||||
| Prostředí | Základní URL |
|
||||
| ------------------- | ------------------------- |
|
||||
| **Cloud** | `https://api.twenty.com/` |
|
||||
| **Vlastní hosting** | `https://{your-domain}/` |
|
||||
|
||||
## Ověření
|
||||
|
||||
Every API request requires an API key in the header:
|
||||
Každý požadavek na API vyžaduje klíč API v hlavičce:
|
||||
|
||||
```
|
||||
Authorization: Bearer YOUR_API_KEY
|
||||
@@ -70,78 +70,78 @@ Authorization: Bearer YOUR_API_KEY
|
||||
|
||||
### Vytvořit API klíč
|
||||
|
||||
1. Go to **Settings → APIs & Webhooks**
|
||||
2. Click **+ Create key**
|
||||
1. Přejděte na **Nastavení → APIs & Webhooks**
|
||||
2. Klikněte na **+ Vytvořit klíč**
|
||||
3. Nakonfigurujte:
|
||||
* **Name**: Descriptive name for the key
|
||||
* **Expiration Date**: When the key expires
|
||||
* **Název**: Popisný název pro klíč
|
||||
* **Datum vypršení platnosti**: Kdy klíč vyprší
|
||||
4. Klikněte na **Uložit**
|
||||
5. **Copy immediately** — the key is only shown once
|
||||
5. **Zkopírujte ihned** — klíč se zobrazí pouze jednou
|
||||
|
||||
<VimeoEmbed videoId="928786722" title="Creating API key" />
|
||||
<VimeoEmbed videoId="928786722" title="Vytvoření klíče API" />
|
||||
|
||||
<Warning>
|
||||
Your API key grants access to sensitive data. Don't share it with untrusted services. If compromised, disable it immediately and generate a new one.
|
||||
Váš klíč API poskytuje přístup k citlivým datům. Nesdílejte ho s nedůvěryhodnými službami. Pokud je kompromitován, okamžitě ho deaktivujte a vygenerujte nový.
|
||||
</Warning>
|
||||
|
||||
### Assign a Role to an API Key
|
||||
### Přiřaďte roli klíči API
|
||||
|
||||
For better security, assign a specific role to limit access:
|
||||
Pro vyšší bezpečnost přiřaďte konkrétní roli, abyste omezili přístup:
|
||||
|
||||
1. Přejděte na **Nastavení → Role**
|
||||
2. Click on the role to assign
|
||||
2. Klikněte na roli, kterou chcete přiřadit
|
||||
3. Otevřete záložku **Přiřazení**
|
||||
4. Under **API Keys**, click **+ Assign to API key**
|
||||
5. Select the API key
|
||||
4. V části **API Keys** klikněte na **+ Přiřadit ke klíči API**
|
||||
5. Vyberte klíč API
|
||||
|
||||
The key will inherit that role's permissions. See [Permissions](/l/cs/user-guide/permissions-access/capabilities/permissions) for details.
|
||||
Klíč zdědí oprávnění této role. Podrobnosti viz [Oprávnění](/l/cs/user-guide/permissions-access/capabilities/permissions).
|
||||
|
||||
### Spravovat API klíče
|
||||
|
||||
**Regenerate**: Settings → APIs & Webhooks → Click key → **Regenerate**
|
||||
**Znovu vygenerovat**: Nastavení → APIs & Webhooks → Klikněte na klíč → **Znovu vygenerovat**
|
||||
|
||||
**Delete**: Settings → APIs & Webhooks → Click key → **Delete**
|
||||
**Smazat**: Nastavení → APIs & Webhooks → Klikněte na klíč → **Smazat**
|
||||
|
||||
## API Playground
|
||||
|
||||
Test your APIs directly in the browser with our built-in playground — available for both **REST** and **GraphQL**.
|
||||
Testujte svá API přímo v prohlížeči pomocí našeho vestavěného playgroundu — k dispozici pro **REST** i **GraphQL**.
|
||||
|
||||
### Access the Playground
|
||||
### Přístup do Playgroundu
|
||||
|
||||
1. Go to **Settings → APIs & Webhooks**
|
||||
2. Create an API key (required)
|
||||
3. Click on **REST API** or **GraphQL API** to open the playground
|
||||
1. Přejděte na **Nastavení → APIs & Webhooks**
|
||||
2. Vytvořte klíč API (povinné)
|
||||
3. Klikněte na **REST API** nebo **GraphQL API** pro otevření playgroundu
|
||||
|
||||
### What You Get
|
||||
### Co získáte
|
||||
|
||||
* **Interactive documentation**: Generated for your specific data model
|
||||
* **Live testing**: Execute real API calls against your workspace
|
||||
* **Schema explorer**: Browse available objects, fields, and relationships
|
||||
* **Request builder**: Construct queries with autocomplete
|
||||
* **Interaktivní dokumentace**: Generována pro váš specifický datový model
|
||||
* **Živé testování**: Spouštějte reálná volání API vůči vašemu pracovnímu prostoru
|
||||
* **Průzkumník schématu**: Procházejte dostupné objekty, pole a vztahy
|
||||
* **Tvůrce požadavků**: Sestavujte dotazy s automatickým doplňováním
|
||||
|
||||
The playground reflects your custom objects and fields, so documentation is always accurate for your workspace.
|
||||
Playground odráží vaše vlastní objekty a pole, takže dokumentace je pro váš pracovní prostor vždy přesná.
|
||||
|
||||
## Hromadné operace
|
||||
|
||||
Both REST and GraphQL support batch operations:
|
||||
REST i GraphQL podporují hromadné operace:
|
||||
|
||||
* **Velikost dávky**: Až 60 záznamů na požadavek.
|
||||
* **Operations**: Create, update, delete multiple records
|
||||
* **Operace**: Vytváření, aktualizace a mazání více záznamů
|
||||
|
||||
**GraphQL-only features:**
|
||||
**Funkce pouze pro GraphQL:**
|
||||
|
||||
* **Batch Upsert**: Create or update in one call
|
||||
* Use plural object names (e.g., `CreateCompanies` instead of `CreateCompany`)
|
||||
* **Hromadný upsert**: Vytvoření nebo aktualizace v jednom volání
|
||||
* Používejte množná čísla názvů objektů (např. `CreateCompanies` místo `CreateCompany`)
|
||||
|
||||
## Rate Limits
|
||||
## Limity rychlosti
|
||||
|
||||
API requests are throttled to ensure platform stability:
|
||||
Požadavky na API jsou omezovány, aby byla zajištěna stabilita platformy:
|
||||
|
||||
| Limit | Hodnota |
|
||||
| -------------- | -------------------- |
|
||||
| **Requests** | 100 calls per minute |
|
||||
| **Batch size** | 60 records per call |
|
||||
| Limit | Hodnota |
|
||||
| ------------------ | -------------------- |
|
||||
| **Požadavky** | 100 volání za minutu |
|
||||
| **Velikost dávky** | 60 záznamů na volání |
|
||||
|
||||
<Tip>
|
||||
Use batch operations to maximize throughput — process up to 60 records in a single API call instead of making individual requests.
|
||||
Pro maximalizaci propustnosti používejte hromadné operace — zpracujte až 60 záznamů v jediném volání API místo odesílání jednotlivých požadavků.
|
||||
</Tip>
|
||||
|
||||
@@ -1,34 +1,34 @@
|
||||
---
|
||||
title: Twenty Apps
|
||||
description: Build and manage Twenty customizations as code.
|
||||
title: Aplikace Twenty
|
||||
description: Vytvářejte a spravujte přizpůsobení Twenty jako kód.
|
||||
---
|
||||
|
||||
<Warning>
|
||||
Apps are currently in alpha testing. The feature is functional but still evolving.
|
||||
Aplikace jsou aktuálně v alfa testování. Tato funkce je funkční, ale stále se vyvíjí.
|
||||
</Warning>
|
||||
|
||||
## What Are Apps?
|
||||
## Co jsou aplikace?
|
||||
|
||||
Apps let you build and manage Twenty customizations **as code**. Instead of configuring everything through the UI, you define your data model and serverless functions in code — making it faster to build, maintain, and roll out to multiple workspaces.
|
||||
Aplikace vám umožňují vytvářet a spravovat přizpůsobení Twenty **jako kód**. Místo konfigurace všeho přes uživatelské rozhraní definujete v kódu svůj datový model a serverless funkce — což zrychluje vývoj, údržbu i nasazování do více pracovních prostorů.
|
||||
|
||||
**What you can do today:**
|
||||
**Co můžete dělat už dnes:**
|
||||
|
||||
* Define custom objects and fields as code (managed data model)
|
||||
* Build serverless functions with custom triggers
|
||||
* Deploy the same app across multiple workspaces
|
||||
* Definujte vlastní objekty a pole jako kód (spravovaný datový model)
|
||||
* Vytvářejte serverless funkce s vlastními spouštěči
|
||||
* Nasazujte stejnou aplikaci do více pracovních prostorů
|
||||
|
||||
**Coming soon:**
|
||||
**Již brzy:**
|
||||
|
||||
* Custom UI layouts and components
|
||||
* Vlastní rozvržení a komponenty uživatelského rozhraní
|
||||
|
||||
## Předpoklady
|
||||
|
||||
* Node.js 24+ and Yarn 4
|
||||
* A Twenty workspace and an API key (create one at https://app.twenty.com/settings/api-webhooks)
|
||||
* Node.js 24+ a Yarn 4
|
||||
* Pracovní prostor Twenty a klíč API (vytvořte si jej na https://app.twenty.com/settings/api-webhooks)
|
||||
|
||||
## Getting Started
|
||||
## Začínáme
|
||||
|
||||
Create a new app using the official scaffolder, then authenticate and start developing:
|
||||
Vytvořte novou aplikaci pomocí oficiálního scaffolderu, poté se ověřte a začněte vyvíjet:
|
||||
|
||||
```bash filename="Terminal"
|
||||
# Scaffold a new app
|
||||
@@ -64,18 +64,18 @@ yarn uninstall
|
||||
yarn help
|
||||
```
|
||||
|
||||
See also: the CLI reference pages for [create-twenty-app](https://www.npmjs.com/package/create-twenty-app) and [twenty-sdk CLI](https://www.npmjs.com/package/twenty-sdk).
|
||||
Viz také: referenční stránky CLI pro [create-twenty-app](https://www.npmjs.com/package/create-twenty-app) a [twenty-sdk CLI](https://www.npmjs.com/package/twenty-sdk).
|
||||
|
||||
## Project structure (scaffolded)
|
||||
## Struktura projektu (vytvořená scaffolderem)
|
||||
|
||||
When you run `npx create-twenty-app@latest my-twenty-app`, the scaffolder:
|
||||
Když spustíte `npx create-twenty-app@latest my-twenty-app`, scaffolder:
|
||||
|
||||
* Copies a minimal base application into `my-twenty-app/`
|
||||
* Adds a local `twenty-sdk` dependency and Yarn 4 configuration
|
||||
* Creates config files and scripts wired to the `twenty` CLI
|
||||
* Generates a default application config and a default function role
|
||||
* Zkopíruje minimální základní aplikaci do `my-twenty-app/`
|
||||
* Přidá lokální závislost `twenty-sdk` a konfiguraci pro Yarn 4
|
||||
* Vytvoří konfigurační soubory a skripty napojené na `twenty` CLI
|
||||
* Vygeneruje výchozí konfiguraci aplikace a výchozí roli funkcí
|
||||
|
||||
A freshly scaffolded app looks like this:
|
||||
Čerstvě vytvořená aplikace vypadá takto:
|
||||
|
||||
```text filename="my-twenty-app/"
|
||||
my-twenty-app/
|
||||
@@ -99,21 +99,21 @@ my-twenty-app/
|
||||
utils/ # Optional - handler implementations & utilities
|
||||
```
|
||||
|
||||
### Convention-over-configuration
|
||||
### Konvence před konfigurací
|
||||
|
||||
Applications use a **convention-over-configuration** approach where entities are detected by their file suffix. This allows flexible organization within the `src/app/` folder:
|
||||
Aplikace používají přístup **konvence před konfigurací**, kde jsou entity detekovány podle přípony souboru. To umožňuje flexibilní organizaci ve složce `src/app/`:
|
||||
|
||||
| File suffix | Entity type |
|
||||
| --------------- | ------------------------------- |
|
||||
| `*.object.ts` | Custom object definitions |
|
||||
| `*.function.ts` | Serverless function definitions |
|
||||
| `*.role.ts` | Role definitions |
|
||||
| Přípona souboru | Typ entity |
|
||||
| --------------- | -------------------------- |
|
||||
| `*.object.ts` | Definice vlastních objektů |
|
||||
| `*.function.ts` | Definice serverless funkcí |
|
||||
| `*.role.ts` | Definice rolí |
|
||||
|
||||
### Supported folder organizations
|
||||
### Podporované uspořádání složek
|
||||
|
||||
You can organize your entities in any of these patterns:
|
||||
Entity můžete uspořádat podle některého z těchto vzorů:
|
||||
|
||||
**Traditional (by type):**
|
||||
**Tradiční (podle typu):**
|
||||
|
||||
```text
|
||||
src/app/
|
||||
@@ -126,7 +126,7 @@ src/app/
|
||||
└── admin.role.ts
|
||||
```
|
||||
|
||||
**Feature-based:**
|
||||
**Podle funkcí:**
|
||||
|
||||
```text
|
||||
src/app/
|
||||
@@ -137,7 +137,7 @@ src/app/
|
||||
└── postCardAdmin.role.ts
|
||||
```
|
||||
|
||||
**Flat:**
|
||||
**Plochá:**
|
||||
|
||||
```text
|
||||
src/app/
|
||||
@@ -147,34 +147,34 @@ src/app/
|
||||
└── admin.role.ts
|
||||
```
|
||||
|
||||
At a high level:
|
||||
V kostce:
|
||||
|
||||
* **package.json**: Declares the app name, version, engines (Node 24+, Yarn 4), and adds `twenty-sdk` plus scripts like `dev`, `sync`, `generate`, `create-entity`, `logs`, `uninstall`, and `auth` that delegate to the local `twenty` CLI.
|
||||
* **.gitignore**: Ignores common artifacts such as `node_modules`, `.yarn`, `generated/` (typed client), `dist/`, `build/`, coverage folders, log files, and `.env*` files.
|
||||
* **yarn.lock**, **.yarnrc.yml**, **.yarn/**: Lock and configure the Yarn 4 toolchain used by the project.
|
||||
* **.nvmrc**: Pins the Node.js version expected by the project.
|
||||
* **eslint.config.mjs** and **tsconfig.json**: Provide linting and TypeScript configuration for your app's TypeScript sources.
|
||||
* **README.md**: A short README in the app root with basic instructions.
|
||||
* **src/app/**: The main place where you define your application-as-code:
|
||||
* `application.config.ts`: Global configuration for your app (metadata and runtime wiring). See "Application config" below.
|
||||
* `*.role.ts`: Role definitions used by your serverless functions. See "Default function role" below.
|
||||
* `*.object.ts`: Custom object definitions.
|
||||
* `*.function.ts`: Serverless function definitions.
|
||||
* **src/utils/**: Optional folder for handler implementations and utilities.
|
||||
* **package.json**: Deklaruje název aplikace, verzi, engines (Node 24+, Yarn 4) a přidává `twenty-sdk` plus skripty jako `dev`, `sync`, `generate`, `create-entity`, `logs`, `uninstall` a `auth`, které delegují na lokální `twenty` CLI.
|
||||
* **.gitignore**: Ignoruje běžné artefakty jako `node_modules`, `.yarn`, `generated/` (typovaný klient), `dist/`, `build/`, složky s coverage, logy a soubory `.env*`.
|
||||
* **yarn.lock**, **.yarnrc.yml**, **.yarn/**: Zamykají a konfigurují nástrojový řetězec Yarn 4 používaný projektem.
|
||||
* **.nvmrc**: Fixuje verzi Node.js požadovanou projektem.
|
||||
* **eslint.config.mjs** a **tsconfig.json**: Poskytují lintování a konfiguraci TypeScriptu pro zdrojové soubory vaší aplikace v TypeScriptu.
|
||||
* **README.md**: Krátké README v kořeni aplikace se základními pokyny.
|
||||
* **src/app/**: Hlavní místo, kde definujete svou aplikaci jako kód:
|
||||
* `application.config.ts`: Globální konfigurace vaší aplikace (metadata a napojení za běhu). Viz „Konfigurace aplikace“ níže.
|
||||
* `*.role.ts`: Definice rolí používané vašimi serverless funkcemi. Viz „Výchozí role funkce“ níže.
|
||||
* `*.object.ts`: Definice vlastních objektů.
|
||||
* `*.function.ts`: Definice serverless funkcí.
|
||||
* **src/utils/**: Volitelná složka pro implementace obslužných funkcí a pomocné nástroje.
|
||||
|
||||
Later commands will add more files and folders:
|
||||
Pozdější příkazy přidají další soubory a složky:
|
||||
|
||||
* `yarn generate` will create a `generated/` folder (typed Twenty client + workspace types).
|
||||
* `yarn create-entity` will add entity definition files under `src/app/` for your custom objects, functions, or roles.
|
||||
* `yarn generate` vytvoří složku `generated/` (typovaný klient Twenty + typy pracovního prostoru).
|
||||
* `yarn create-entity` přidá soubory s definicemi entit do `src/app/` pro vaše vlastní objekty, funkce nebo role.
|
||||
|
||||
## Ověření
|
||||
|
||||
The first time you run `yarn auth`, you'll be prompted for:
|
||||
Při prvním spuštění `yarn auth` budete vyzváni k zadání:
|
||||
|
||||
* API URL (defaults to http://localhost:3000 or your current workspace profile)
|
||||
* API key
|
||||
* URL API (výchozí je http://localhost:3000 nebo váš aktuální profil pracovního prostoru)
|
||||
* Klíč API
|
||||
|
||||
Your credentials are stored per-user in `~/.twenty/config.json`. You can maintain multiple profiles and switch using `--workspace <name>`.
|
||||
Vaše přihlašovací údaje se ukládají pro jednotlivé uživatele do `~/.twenty/config.json`. Můžete spravovat více profilů a přepínat pomocí `--workspace <name>`.
|
||||
|
||||
Příklady:
|
||||
|
||||
@@ -186,26 +186,26 @@ yarn auth
|
||||
yarn auth --workspace my-custom-workspace
|
||||
```
|
||||
|
||||
## Use the SDK resources (types & config)
|
||||
## Používejte zdroje SDK (typy a konfiguraci)
|
||||
|
||||
The twenty-sdk provides typed building blocks and helper functions you use inside your app. Below are the key pieces you'll touch most often.
|
||||
twenty-sdk poskytuje typované stavební bloky a pomocné funkce, které používáte ve své aplikaci. Níže jsou klíčové části, se kterými budete nejčastěji pracovat.
|
||||
|
||||
### Helper functions
|
||||
### Pomocné funkce
|
||||
|
||||
The SDK provides four helper functions with built-in validation for defining your app entities:
|
||||
SDK poskytuje čtyři pomocné funkce s vestavěnou validací pro definování entit vaší aplikace:
|
||||
|
||||
| Function | Účel |
|
||||
| ------------------ | -------------------------------------------- |
|
||||
| `defineApp()` | Configure application metadata |
|
||||
| `defineObject()` | Define custom objects with fields |
|
||||
| `defineFunction()` | Define serverless functions with handlers |
|
||||
| `defineRole()` | Configure role permissions and object access |
|
||||
| Funkce | Účel |
|
||||
| ------------------ | ------------------------------------------------ |
|
||||
| `defineApp()` | Konfigurace metadat aplikace |
|
||||
| `defineObject()` | Definice vlastních objektů s poli |
|
||||
| `defineFunction()` | Definice serverless funkcí s obslužnými funkcemi |
|
||||
| `defineRole()` | Konfigurace oprávnění rolí a přístupu k objektům |
|
||||
|
||||
These functions validate your configuration at runtime and provide better IDE autocompletion and type safety.
|
||||
Tyto funkce validují vaši konfiguraci za běhu a poskytují lepší automatické doplňování v IDE a lepší typovou bezpečnost.
|
||||
|
||||
### Defining objects
|
||||
### Definování objektů
|
||||
|
||||
Custom objects describe both schema and behavior for records in your workspace. Use `defineObject()` to define objects with built-in validation:
|
||||
Vlastní objekty popisují jak schéma, tak chování záznamů ve vašem pracovním prostoru. K definování objektů s vestavěnou validací použijte `defineObject()`:
|
||||
|
||||
```typescript
|
||||
// src/app/postCard.object.ts
|
||||
@@ -276,20 +276,20 @@ export default defineObject({
|
||||
});
|
||||
```
|
||||
|
||||
Key points:
|
||||
Hlavní body:
|
||||
|
||||
* Use `defineObject()` for built-in validation and better IDE support.
|
||||
* The `universalIdentifier` must be unique and stable across deployments.
|
||||
* Each field requires a `name`, `type`, `label`, and its own stable `universalIdentifier`.
|
||||
* The `fields` array is optional — you can define objects without custom fields.
|
||||
* You can scaffold new objects using `yarn create-entity`, which guides you through naming, fields, and relationships.
|
||||
* Použijte `defineObject()` pro vestavěnou validaci a lepší podporu v IDE.
|
||||
* Hodnota `universalIdentifier` musí být jedinečná a stabilní napříč nasazeními.
|
||||
* Každé pole vyžaduje `name`, `type`, `label` a svůj vlastní stabilní `universalIdentifier`.
|
||||
* Pole `fields` je volitelné — objekty můžete definovat i bez vlastních polí.
|
||||
* Nové objekty můžete vygenerovat pomocí `yarn create-entity`, který vás provede pojmenováním, poli a vztahy.
|
||||
|
||||
<Note>
|
||||
**Base fields are created automatically.** When you define a custom object, Twenty automatically adds standard fields such as `name`, `createdAt`, `updatedAt`, `createdBy`, `position`, and `deletedAt`. You don't need to define these in your `fields` array — only add your custom fields.
|
||||
**Základní pole jsou vytvořena automaticky.** Když definujete vlastní objekt, Twenty automaticky přidá standardní pole jako `name`, `createdAt`, `updatedAt`, `createdBy`, `position` a `deletedAt`. Nemusíte je definovat v poli `fields` — přidejte pouze svá vlastní pole.
|
||||
</Note>
|
||||
|
||||
<Accordion title="Alternative: Decorator-based syntax">
|
||||
You can also define objects using TypeScript decorators. This approach uses class-based syntax with `@Object`, `@Field`, and `@Relation` decorators:
|
||||
<Accordion title="Alternativa: Syntaxe založená na dekorátorech">
|
||||
Objekty můžete definovat také pomocí dekorátorů TypeScriptu. Tento přístup používá třídovou syntaxi s dekorátory `@Object`, `@Field` a `@Relation`:
|
||||
|
||||
```typescript
|
||||
import {
|
||||
@@ -336,18 +336,18 @@ Key points:
|
||||
}
|
||||
```
|
||||
|
||||
Note: The decorator approach requires `experimentalDecorators` in your TypeScript config.
|
||||
Poznámka: Přístup s dekorátory vyžaduje `experimentalDecorators` v konfiguraci TypeScriptu.
|
||||
</Accordion>
|
||||
|
||||
### Application config (application.config.ts)
|
||||
### Konfigurace aplikace (application.config.ts)
|
||||
|
||||
Every app has a single `application.config.ts` file that describes:
|
||||
Každá aplikace má jeden soubor `application.config.ts`, který popisuje:
|
||||
|
||||
* **Who the app is**: identifiers, display name, and description.
|
||||
* **How its functions run**: which role they use for permissions.
|
||||
* **(Optional) variables**: key–value pairs exposed to your functions as environment variables.
|
||||
* **Identitu aplikace**: identifikátory, zobrazovaný název a popis.
|
||||
* **Jak běží její funkce**: kterou roli používají pro oprávnění.
|
||||
* **(Volitelné) proměnné**: dvojice klíč–hodnota zpřístupněné vašim funkcím jako proměnné prostředí.
|
||||
|
||||
Use `defineApp()` to define your application configuration:
|
||||
K definování konfigurace aplikace použijte `defineApp()`:
|
||||
|
||||
```typescript
|
||||
// src/app/application.config.ts
|
||||
@@ -371,23 +371,23 @@ export default defineApp({
|
||||
});
|
||||
```
|
||||
|
||||
Notes:
|
||||
Poznámky:
|
||||
|
||||
* `universalIdentifier` fields are deterministic IDs you own; generate them once and keep them stable across syncs.
|
||||
* `applicationVariables` become environment variables for your functions (for example, `DEFAULT_RECIPIENT_NAME` is available as `process.env.DEFAULT_RECIPIENT_NAME`).
|
||||
* `functionRoleUniversalIdentifier` must match the role you define in your `*.role.ts` file (see below).
|
||||
* Pole `universalIdentifier` jsou deterministická ID, která vlastníte; vygenerujte je jednou a udržujte je stabilní napříč synchronizacemi.
|
||||
* `applicationVariables` se stanou proměnnými prostředí pro vaše funkce (například `DEFAULT_RECIPIENT_NAME` je dostupné jako `process.env.DEFAULT_RECIPIENT_NAME`).
|
||||
* `functionRoleUniversalIdentifier` se musí shodovat s rolí, kterou definujete ve svém souboru `*.role.ts` (viz níže).
|
||||
|
||||
#### Roles and permissions
|
||||
#### Role a oprávnění
|
||||
|
||||
Applications can define roles that encapsulate permissions on your workspace's objects and actions. The field `functionRoleUniversalIdentifier` in `application.config.ts` designates the default role used by your app's serverless functions.
|
||||
Aplikace mohou definovat role, které zapouzdřují oprávnění k objektům a akcím ve vašem pracovním prostoru. Pole `functionRoleUniversalIdentifier` v `application.config.ts` určuje výchozí roli používanou serverless funkcemi vaší aplikace.
|
||||
|
||||
* The runtime API key injected as `TWENTY_API_KEY` is derived from this default function role.
|
||||
* The typed client will be restricted to the permissions granted to that role.
|
||||
* Follow least‑privilege: create a dedicated role with only the permissions your functions need, then reference its universal identifier.
|
||||
* Běhový klíč API vložený jako `TWENTY_API_KEY` je odvozen z této výchozí role funkcí.
|
||||
* Typovaný klient bude omezen oprávněními udělenými této roli.
|
||||
* Dodržujte princip nejmenších oprávnění: vytvořte vyhrazenou roli pouze s oprávněními, která vaše funkce potřebují, a poté odkazujte na její univerzální identifikátor.
|
||||
|
||||
##### Default function role (\*.role.ts)
|
||||
##### Výchozí role funkce (\*.role.ts)
|
||||
|
||||
When you scaffold a new app, the CLI also creates a default role file. Use `defineRole()` to define roles with built-in validation:
|
||||
Když vygenerujete novou aplikaci, CLI také vytvoří výchozí soubor role. K definování rolí s vestavěnou validací použijte `defineRole()`:
|
||||
|
||||
```typescript
|
||||
// src/app/default-function.role.ts
|
||||
@@ -429,37 +429,37 @@ export default defineRole({
|
||||
});
|
||||
```
|
||||
|
||||
The `universalIdentifier` of this role is then referenced in `application.config.ts` as `functionRoleUniversalIdentifier`. In other words:
|
||||
Na `universalIdentifier` této role se poté odkazuje v `application.config.ts` jako na `functionRoleUniversalIdentifier`. Jinými slovy:
|
||||
|
||||
* **\*.role.ts** defines what the default function role can do.
|
||||
* **application.config.ts** points to that role so your functions inherit its permissions.
|
||||
* **\*.role.ts** definuje, co může výchozí role funkce dělat.
|
||||
* **application.config.ts** ukazuje na tuto roli, aby vaše funkce zdědily její oprávnění.
|
||||
|
||||
Notes:
|
||||
Poznámky:
|
||||
|
||||
* Start from the scaffolded role, then progressively restrict it following least‑privilege.
|
||||
* Replace the `objectPermissions` and `fieldPermissions` with the objects/fields your functions need.
|
||||
* `permissionFlags` control access to platform-level capabilities. Keep them minimal; add only what you need.
|
||||
* See a working example in the Hello World app: [`packages/twenty-apps/hello-world/src/roles/function-role.ts`](https://github.com/twentyhq/twenty/blob/main/packages/twenty-apps/hello-world/src/roles/function-role.ts).
|
||||
* Začněte rolí vytvořenou scaffolderem a postupně ji omezujte podle principu nejmenších oprávnění.
|
||||
* Nahraďte `objectPermissions` a `fieldPermissions` objekty/poli, která vaše funkce potřebují.
|
||||
* `permissionFlags` řídí přístup k schopnostem na úrovni platformy. Držte je na minimu; přidávejte pouze to, co potřebujete.
|
||||
* Podívejte se na funkční příklad v aplikaci Hello World: [`packages/twenty-apps/hello-world/src/roles/function-role.ts`](https://github.com/twentyhq/twenty/blob/main/packages/twenty-apps/hello-world/src/roles/function-role.ts).
|
||||
|
||||
### Serverless function config and entrypoint
|
||||
### Konfigurace serverless funkcí a vstupní bod
|
||||
|
||||
Each function file uses `defineFunction()` to export a configuration with a handler and optional triggers. Use the `*.function.ts` file suffix for automatic detection.
|
||||
Každý soubor funkce používá `defineFunction()` k exportu konfigurace s obslužnou funkcí (handlerem) a volitelnými spouštěči. Pro automatickou detekci použijte příponu souboru `*.function.ts`.
|
||||
|
||||
```typescript
|
||||
// src/app/createPostCard.function.ts
|
||||
import { defineFunction } from 'twenty-sdk';
|
||||
import type { DatabaseEventPayload, ObjectRecordCreateEvent, CronPayload } from 'twenty-sdk';
|
||||
import type { DatabaseEventPayload, ObjectRecordCreateEvent, CronPayload, RoutePayload } from 'twenty-sdk';
|
||||
import Twenty, { type Person } from '../../generated';
|
||||
|
||||
const handler = async (
|
||||
params:
|
||||
| { name?: string }
|
||||
| RoutePayload
|
||||
| DatabaseEventPayload<ObjectRecordCreateEvent<Person>>
|
||||
| CronPayload,
|
||||
) => {
|
||||
const client = new Twenty(); // generated typed client
|
||||
const name = 'name' in params
|
||||
? params.name ?? process.env.DEFAULT_RECIPIENT_NAME ?? 'Hello world'
|
||||
const name = 'name' in params.queryStringParameters
|
||||
? params.queryStringParameters.name ?? process.env.DEFAULT_RECIPIENT_NAME ?? 'Hello world'
|
||||
: 'Hello world';
|
||||
|
||||
const result = await client.mutation({
|
||||
@@ -502,30 +502,122 @@ export default defineFunction({
|
||||
});
|
||||
```
|
||||
|
||||
Common trigger types:
|
||||
Běžné typy spouštěčů:
|
||||
|
||||
* **route**: Exposes your function on an HTTP path and method **under the `/s/` endpoint**:
|
||||
* **route**: Zpřístupní vaši funkci na HTTP cestě a metodě **pod koncovým bodem `/s/`**:
|
||||
|
||||
> e.g. `path: '/post-card/create',` -> call on `<APP_URL>/s/post-card/create`
|
||||
> např. `path: '/post-card/create',` -> volání na `<APP_URL>/s/post-card/create`
|
||||
|
||||
* **cron**: Runs your function on a schedule using a CRON expression.
|
||||
* **databaseEvent**: Runs on workspace object lifecycle events
|
||||
* **cron**: Spouští vaši funkci podle plánu pomocí výrazu CRON.
|
||||
* **databaseEvent**: Spouští se při událostech životního cyklu objektů v pracovním prostoru
|
||||
|
||||
> e.g. `person.created`
|
||||
> např. `person.created`
|
||||
|
||||
Notes:
|
||||
Poznámky:
|
||||
|
||||
* The `triggers` array is optional. Functions without triggers can be used as utility functions called by other functions.
|
||||
* You can mix multiple trigger types in a single function.
|
||||
* Pole `triggers` je volitelné. Funkce bez spouštěčů lze použít jako pomocné funkce volané jinými funkcemi.
|
||||
* V jedné funkci můžete kombinovat více typů spouštěčů.
|
||||
|
||||
You can create new functions in two ways:
|
||||
### Route trigger payload
|
||||
|
||||
* **Scaffolded**: Run `yarn create-entity` and choose the option to add a new function. This generates a starter file with a handler and config.
|
||||
* **Manual**: Create a new `*.function.ts` file and use `defineFunction()`, following the same pattern.
|
||||
<Warning>
|
||||
**Breaking change (v1.16, January 2026):** The route trigger payload format has changed. Prior to v1.16, query parameters, path parameters, and body were sent directly as the payload. Starting with v1.16, they are nested inside a structured `RoutePayload` object.
|
||||
|
||||
### Generated typed client
|
||||
**Before v1.16:**
|
||||
|
||||
Run yarn generate to create a local typed client in generated/ based on your workspace schema. Use it in your functions:
|
||||
```typescript
|
||||
const handler = async (params) => {
|
||||
const { param1, param2 } = params; // Direct access
|
||||
};
|
||||
```
|
||||
|
||||
**After v1.16:**
|
||||
|
||||
```typescript
|
||||
const handler = async (event: RoutePayload) => {
|
||||
const { param1, param2 } = event.body; // Access via .body
|
||||
const { queryParam } = event.queryStringParameters;
|
||||
const { id } = event.pathParameters;
|
||||
};
|
||||
```
|
||||
|
||||
**To migrate existing functions:** Update your handler to destructure from `event.body`, `event.queryStringParameters`, or `event.pathParameters` instead of directly from the params object.
|
||||
</Warning>
|
||||
|
||||
When a route trigger invokes your function, it receives a `RoutePayload` object that follows the AWS HTTP API v2 format. Import the type from `twenty-sdk`:
|
||||
|
||||
```typescript
|
||||
import { defineFunction, type RoutePayload } from 'twenty-sdk';
|
||||
|
||||
const handler = async (event: RoutePayload) => {
|
||||
// Access request data
|
||||
const { headers, queryStringParameters, pathParameters, body } = event;
|
||||
|
||||
// HTTP method and path are available in requestContext
|
||||
const { method, path } = event.requestContext.http;
|
||||
|
||||
return { message: 'Success' };
|
||||
};
|
||||
```
|
||||
|
||||
The `RoutePayload` type has the following structure:
|
||||
|
||||
| Property | Typ | Popis |
|
||||
| ---------------------------- | ------------------------------------- | --------------------------------------------------------------------------------------- |
|
||||
| `headers` | `Record<string, string \| undefined>` | HTTP headers (only those listed in `forwardedRequestHeaders`) |
|
||||
| `queryStringParameters` | `Record<string, string \| undefined>` | Query string parameters (multiple values joined with commas) |
|
||||
| `pathParameters` | `Record<string, string \| undefined>` | Path parameters extracted from the route pattern (e.g., `/users/:id` → `{ id: '123' }`) |
|
||||
| `text zprávy` | `object \| null` | Parsed request body (JSON) |
|
||||
| `isBase64Encoded` | `booleovská hodnota` | Whether the body is base64 encoded |
|
||||
| `requestContext.http.method` | `string` | HTTP method (GET, POST, PUT, PATCH, DELETE) |
|
||||
| `requestContext.http.path` | `string` | Raw request path |
|
||||
|
||||
### Forwarding HTTP headers
|
||||
|
||||
By default, HTTP headers from incoming requests are **not** passed to your serverless function for security reasons. To access specific headers, explicitly list them in the `forwardedRequestHeaders` array:
|
||||
|
||||
```typescript
|
||||
export default defineFunction({
|
||||
universalIdentifier: 'e56d363b-0bdc-4d8a-a393-6f0d1c75bdcf',
|
||||
name: 'webhook-handler',
|
||||
handler,
|
||||
triggers: [
|
||||
{
|
||||
universalIdentifier: 'c9f84c8d-b26d-40d1-95dd-4f834ae5a2c6',
|
||||
type: 'route',
|
||||
path: '/webhook',
|
||||
httpMethod: 'POST',
|
||||
isAuthRequired: false,
|
||||
forwardedRequestHeaders: ['x-webhook-signature', 'content-type'],
|
||||
},
|
||||
],
|
||||
});
|
||||
```
|
||||
|
||||
In your handler, you can then access these headers:
|
||||
|
||||
```typescript
|
||||
const handler = async (event: RoutePayload) => {
|
||||
const signature = event.headers['x-webhook-signature'];
|
||||
const contentType = event.headers['content-type'];
|
||||
|
||||
// Validate webhook signature...
|
||||
return { received: true };
|
||||
};
|
||||
```
|
||||
|
||||
<Note>
|
||||
Header names are normalized to lowercase. Access them using lowercase keys (for example, `event.headers['content-type']`).
|
||||
</Note>
|
||||
|
||||
Nové funkce můžete vytvářet dvěma způsoby:
|
||||
|
||||
* **Vygenerované**: Spusťte `yarn create-entity` a zvolte možnost přidat novou funkci. Tím se vygeneruje startovací soubor s obslužnou funkcí a konfigurací.
|
||||
* **Ruční**: Vytvořte nový soubor `*.function.ts` a použijte `defineFunction()` podle stejného vzoru.
|
||||
|
||||
### Generovaný typovaný klient
|
||||
|
||||
Spusťte yarn generate a vytvořte lokální typovaný klient v generated/ na základě schématu vašeho pracovního prostoru. Použijte jej ve svých funkcích:
|
||||
|
||||
```typescript
|
||||
import Twenty from './generated';
|
||||
@@ -534,34 +626,34 @@ const client = new Twenty();
|
||||
const { me } = await client.query({ me: { id: true, displayName: true } });
|
||||
```
|
||||
|
||||
The client is re-generated by `yarn generate`. Re-run after changing your objects and `yarn sync` or when onboarding to a new workspace.
|
||||
Klient je znovu generován příkazem `yarn generate`. Spusťte jej znovu po změně objektů a po `yarn sync`, případně při připojení k novému pracovnímu prostoru.
|
||||
|
||||
#### Runtime credentials in serverless functions
|
||||
#### Běhové přihlašovací údaje v serverless funkcích
|
||||
|
||||
When your function runs on Twenty, the platform injects credentials as environment variables before your code executes:
|
||||
Když vaše funkce běží na Twenty, platforma před spuštěním kódu vloží přihlašovací údaje jako proměnné prostředí:
|
||||
|
||||
* `TWENTY_API_URL`: Base URL of the Twenty API your app targets.
|
||||
* `TWENTY_API_KEY`: Short‑lived key scoped to your application's default function role.
|
||||
* `TWENTY_API_URL`: Základní URL Twenty API, na které vaše aplikace cílí.
|
||||
* `TWENTY_API_KEY`: Krátkodobý klíč s rozsahem omezeným na výchozí roli funkce vaší aplikace.
|
||||
|
||||
Poznámky:
|
||||
|
||||
* You do not need to pass URL or API key to the generated client. It reads `TWENTY_API_URL` and `TWENTY_API_KEY` from process.env at runtime.
|
||||
* The API key's permissions are determined by the role referenced in your `application.config.ts` via `functionRoleUniversalIdentifier`. This is the default role used by serverless functions of your application.
|
||||
* Applications can define roles to follow least‑privilege. Grant only the permissions your functions need, then point `functionRoleUniversalIdentifier` to that role's universal identifier.
|
||||
* Není nutné předávat URL ani klíč API vygenerovanému klientovi. Za běhu čte `TWENTY_API_URL` a `TWENTY_API_KEY` z process.env.
|
||||
* Oprávnění API klíče jsou určena rolí odkazovanou v `application.config.ts` prostřednictvím `functionRoleUniversalIdentifier`. Toto je výchozí role používaná serverless funkcemi vaší aplikace.
|
||||
* Aplikace mohou definovat role podle principu nejmenších oprávnění. Udělte pouze oprávnění, která vaše funkce potřebují, a poté nastavte `functionRoleUniversalIdentifier` na univerzální identifikátor této role.
|
||||
|
||||
### Hello World example
|
||||
### Příklad Hello World
|
||||
|
||||
Explore a minimal, end-to-end example that demonstrates objects, functions, and multiple triggers [here](https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/hello-world):
|
||||
Prozkoumejte minimalistický end-to-end příklad, který demonstruje objekty, funkce a více spouštěčů [zde](https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/hello-world):
|
||||
|
||||
## Manual setup (without the scaffolder)
|
||||
## Ruční nastavení (bez scaffolderu)
|
||||
|
||||
While we recommend using `create-twenty-app` for the best getting-started experience, you can also set up a project manually. Do not install the CLI globally. Instead, add `twenty-sdk` as a local dependency and wire scripts in your package.json:
|
||||
Ačkoli pro nejlepší začátky doporučujeme použít `create-twenty-app`, projekt můžete nastavit i ručně. Neinstalujte CLI globálně. Místo toho přidejte `twenty-sdk` jako lokální závislost a propojte skripty v souboru package.json:
|
||||
|
||||
```bash filename="Terminal"
|
||||
yarn add -D twenty-sdk
|
||||
```
|
||||
|
||||
Then add scripts like these:
|
||||
Poté přidejte skripty jako tyto:
|
||||
|
||||
```json filename="package.json"
|
||||
{
|
||||
@@ -578,13 +670,13 @@ Then add scripts like these:
|
||||
}
|
||||
```
|
||||
|
||||
Now you can run the same commands via Yarn, e.g. `yarn dev`, `yarn sync`, etc.
|
||||
Nyní můžete spouštět stejné příkazy přes Yarn, např. `yarn dev`, `yarn sync` atd.
|
||||
|
||||
## Řešení potíží
|
||||
|
||||
* Authentication errors: run `yarn auth` and ensure your API key has the required permissions.
|
||||
* Cannot connect to server: verify the API URL and that the Twenty server is reachable.
|
||||
* Types or client missing/outdated: run `yarn generate` and then `yarn dev`.
|
||||
* Dev mode not syncing: ensure `yarn dev` is running and that changes are not ignored by your environment.
|
||||
* Chyby ověření: spusťte `yarn auth` a ujistěte se, že váš klíč API má požadovaná oprávnění.
|
||||
* Nelze se připojit k serveru: ověřte URL API a že je server Twenty dosažitelný.
|
||||
* Typy nebo klient chybí/jsou zastaralé: spusťte `yarn generate` a poté `yarn dev`.
|
||||
* Režim vývoje nesynchronizuje: ujistěte se, že běží `yarn dev` a že vaše prostředí změny neignoruje.
|
||||
|
||||
Discord Help Channel: https://discord.com/channels/1130383047699738754/1130386664812982322
|
||||
Kanál podpory na Discordu: https://discord.com/channels/1130383047699738754/1130386664812982322
|
||||
|
||||
@@ -1,44 +1,44 @@
|
||||
---
|
||||
title: Webhooky
|
||||
description: Receive real-time notifications when events occur in your CRM.
|
||||
description: Dostávejte oznámení v reálném čase, když ve vašem CRM dojde k událostem.
|
||||
---
|
||||
|
||||
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
|
||||
|
||||
Webhooks push data to your systems in real-time when events occur in Twenty — no polling required. Use them to keep external systems in sync, trigger automations, or send alerts.
|
||||
Webhooky posílají data do vašich systémů v reálném čase, když v Twenty dojde k událostem — bez potřeby průběžného dotazování. Použijte je k udržování externích systémů v synchronizaci, spouštění automatizací nebo zasílání upozornění.
|
||||
|
||||
## Vytvořit Webhook
|
||||
|
||||
1. Přejděte na **Nastavení → API & Webhooks → Webhooks**
|
||||
2. Klikněte na **+ Vytvořit webhook**
|
||||
3. Enter your webhook URL (must be publicly accessible)
|
||||
3. Zadejte adresu URL svého webhooku (musí být veřejně přístupná)
|
||||
4. Klikněte na **Uložit**
|
||||
|
||||
The webhook activates immediately and starts sending notifications.
|
||||
Webhook se aktivuje okamžitě a začne odesílat oznámení.
|
||||
|
||||
<VimeoEmbed videoId="928786708" title="Creating a webhook" />
|
||||
<VimeoEmbed videoId="928786708" title="Vytvoření webhooku" />
|
||||
|
||||
### Spravovat Webhooky
|
||||
|
||||
**Edit**: Click the webhook → Update URL → **Save**
|
||||
**Upravit**: Klikněte na webhook → Aktualizovat adresu URL → **Uložit**
|
||||
|
||||
**Delete**: Click the webhook → **Delete** → Confirm
|
||||
**Odstranit**: Klikněte na webhook → **Odstranit** → Potvrdit
|
||||
|
||||
## Události
|
||||
|
||||
Twenty sends webhooks for these event types:
|
||||
Twenty odesílá webhooky pro tyto typy událostí:
|
||||
|
||||
| Událost | Příklad |
|
||||
| ------------------ | ---------------------------------------------------------- |
|
||||
| **Record Created** | `person.created`, `company.created`, `note.created` |
|
||||
| **Record Updated** | `person.updated`, `company.updated`, `opportunity.updated` |
|
||||
| **Record Deleted** | `person.deleted`, `company.deleted` |
|
||||
| Událost | Příklad |
|
||||
| -------------------------- | ---------------------------------------------------------- |
|
||||
| **Záznam je vytvořen** | `person.created`, `company.created`, `note.created` |
|
||||
| **Záznam je aktualizován** | `person.updated`, `company.updated`, `opportunity.updated` |
|
||||
| **Záznam je odstraněn** | `person.deleted`, `company.deleted` |
|
||||
|
||||
All event types are sent to your webhook URL. Event filtering may be added in future releases.
|
||||
Všechny typy událostí jsou odesílány na adresu URL vašeho webhooku. Filtrování událostí může být přidáno v budoucích verzích.
|
||||
|
||||
## Payload Format
|
||||
## Formát payloadu
|
||||
|
||||
Each webhook sends an HTTP POST with a JSON body:
|
||||
Každý webhook odesílá HTTP POST s tělem ve formátu JSON:
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -55,35 +55,35 @@ Each webhook sends an HTTP POST with a JSON body:
|
||||
}
|
||||
```
|
||||
|
||||
| Pole | Popis |
|
||||
| ---------------- | ------------------------------------------------ |
|
||||
| `událost` | What happened (e.g., `person.created`) |
|
||||
| `data` | The full record that was created/updated/deleted |
|
||||
| `časové razítko` | When the event occurred (UTC) |
|
||||
| Pole | Popis |
|
||||
| ---------------- | ------------------------------------------------------ |
|
||||
| `událost` | Co se stalo (např. `person.created`) |
|
||||
| `data` | Celý záznam, který byl vytvořen/aktualizován/odstraněn |
|
||||
| `časové razítko` | Kdy k události došlo (UTC) |
|
||||
|
||||
<Note>
|
||||
Respond with a **2xx HTTP status** (200-299) to acknowledge receipt. Non-2xx responses are logged as delivery failures.
|
||||
Odpovězte se **stavem HTTP 2xx** (200–299) pro potvrzení přijetí. Odpovědi mimo 2xx se zaznamenávají jako selhání doručení.
|
||||
</Note>
|
||||
|
||||
## Ověření Webhooku
|
||||
|
||||
Twenty signs each webhook request for security. Validate signatures to ensure requests are authentic.
|
||||
Twenty kvůli bezpečnosti podepisuje každý požadavek webhooku. Ověřujte podpisy, abyste zajistili, že požadavky jsou autentické.
|
||||
|
||||
### Headers
|
||||
### Záhlaví
|
||||
|
||||
| Hlavička | Popis |
|
||||
| ---------------------------- | --------------------- |
|
||||
| `X-Twenty-Webhook-Signature` | HMAC SHA256 signature |
|
||||
| `X-Twenty-Webhook-Timestamp` | Request timestamp |
|
||||
| Hlavička | Popis |
|
||||
| ---------------------------- | ------------------------ |
|
||||
| `X-Twenty-Webhook-Signature` | Podpis HMAC SHA256 |
|
||||
| `X-Twenty-Webhook-Timestamp` | Časové razítko požadavku |
|
||||
|
||||
### Validation Steps
|
||||
### Kroky ověření
|
||||
|
||||
1. Get the timestamp from `X-Twenty-Webhook-Timestamp`
|
||||
2. Create the string: `{timestamp}:{JSON payload}`
|
||||
3. Compute HMAC SHA256 using your webhook secret
|
||||
4. Compare with `X-Twenty-Webhook-Signature`
|
||||
1. Získejte časové razítko z `X-Twenty-Webhook-Timestamp`
|
||||
2. Vytvořte řetězec: `{timestamp}:{JSON payload}`
|
||||
3. Vypočítejte HMAC SHA256 pomocí vašeho tajného klíče webhooku
|
||||
4. Porovnejte s `X-Twenty-Webhook-Signature`
|
||||
|
||||
### Example (Node.js)
|
||||
### Příklad (Node.js)
|
||||
|
||||
```javascript
|
||||
const crypto = require("crypto");
|
||||
@@ -101,12 +101,12 @@ const expectedSignature = crypto
|
||||
const isValid = expectedSignature === req.headers["x-twenty-webhook-signature"];
|
||||
```
|
||||
|
||||
## Webhooks vs Workflows
|
||||
## Webhooky vs. pracovní postupy
|
||||
|
||||
| Metoda | Směr | Use Case |
|
||||
| ---------------------------- | ---- | ---------------------------------------------------------- |
|
||||
| **Webhooks** | OUT | Automatically notify external systems of any record change |
|
||||
| **Workflow + HTTP Request** | OUT | Send data out with custom logic (filters, transformations) |
|
||||
| **Workflow Webhook Trigger** | IN | Receive data into Twenty from external systems |
|
||||
| Metoda | Směr | Případ použití |
|
||||
| ----------------------------------------- | ---- | --------------------------------------------------------------- |
|
||||
| **Webhooky** | OUT | Automaticky informujte externí systémy o jakékoli změně záznamu |
|
||||
| **Pracovní postup + požadavek HTTP** | OUT | Odesílejte data ven s vlastní logikou (filtry, transformace) |
|
||||
| **Spouštěč webhooku v pracovním postupu** | IN | Přijímejte data do Twenty z externích systémů |
|
||||
|
||||
For receiving external data, see [Set Up a Webhook Trigger](/l/cs/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger).
|
||||
Pro příjem externích dat viz [Nastavení spouštěče webhooku](/l/cs/user-guide/workflows/how-tos/connect-to-other-tools/set-up-a-webhook-trigger).
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: Extend
|
||||
description: Extend Twenty's functionality with APIs, webhooks, and custom apps.
|
||||
title: Rozšiřte
|
||||
description: Rozšiřte funkčnost Twenty pomocí rozhraní API, webhooků a vlastních aplikací.
|
||||
---
|
||||
|
||||
<Frame>
|
||||
@@ -9,26 +9,26 @@ description: Extend Twenty's functionality with APIs, webhooks, and custom apps.
|
||||
|
||||
## Přehled
|
||||
|
||||
Twenty is designed to be extensible. Use our APIs, webhooks, and app framework to integrate with your existing tools and build custom functionality.
|
||||
Twenty je navrženo tak, aby bylo rozšiřitelné. Použijte naše rozhraní API, webhooky a aplikační framework k integraci se svými stávajícími nástroji a k vytváření vlastní funkčnosti.
|
||||
|
||||
## What You Can Do
|
||||
## Co můžete dělat
|
||||
|
||||
* **APIs**: Query and modify your CRM data programmatically using REST or GraphQL
|
||||
* **Webhooks**: Receive real-time notifications when events occur in Twenty
|
||||
* **Apps**: Build custom applications that extend Twenty's capabilities - Coming soon!
|
||||
* **API**: Programově dotazujte a upravujte svá CRM data pomocí REST nebo GraphQL
|
||||
* **Webhooky**: Dostávejte oznámení v reálném čase, když v Twenty dojde k událostem
|
||||
* **Aplikace**: Vytvářejte vlastní aplikace, které rozšiřují možnosti Twenty - Již brzy!
|
||||
|
||||
## Getting Started
|
||||
## Začínáme
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="API" icon="kód" href="/l/cs/developers/extend/capabilities/apis">
|
||||
Connect to Twenty programmatically
|
||||
Programově se připojte k Twenty
|
||||
</Card>
|
||||
|
||||
<Card title="Webhooky" icon="bell" href="/l/cs/developers/extend/capabilities/webhooks">
|
||||
Get notified of events in real-time
|
||||
Dostávejte oznámení o událostech v reálném čase
|
||||
</Card>
|
||||
|
||||
<Card title="Apps" icon="puzzle-piece" href="/l/cs/developers/extend/capabilities/apps">
|
||||
Build customizations as code (Alpha)
|
||||
<Card title="Aplikace" icon="puzzle-piece" href="/l/cs/developers/extend/capabilities/apps">
|
||||
Vytvářejte přizpůsobení jako kód (Alpha)
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
@@ -1,23 +1,23 @@
|
||||
---
|
||||
title: Getting Started
|
||||
description: Welcome to Twenty Developer Documentation, your resources for extending, self-hosting, and contributing to Twenty.
|
||||
title: Začínáme
|
||||
description: Vítejte v dokumentaci pro vývojáře Twenty, která je vaším zdrojem informací pro rozšiřování, vlastní hostování a přispívání do Twenty.
|
||||
---
|
||||
|
||||
import { CardTitle } from "/snippets/card-title.mdx"
|
||||
|
||||
<CardGroup cols={3}>
|
||||
<Card href="/l/cs/developers/extend/extend" img="/images/user-guide/integrations/plug.png">
|
||||
<CardTitle>Extend</CardTitle>
|
||||
Build integrations with APIs, webhooks, and custom apps.
|
||||
<CardTitle>Rozšiřte</CardTitle>
|
||||
Vytvářejte integrace pomocí API, webhooků a vlastních aplikací.
|
||||
</Card>
|
||||
|
||||
<Card href="/l/cs/developers/self-host/self-host" img="/images/user-guide/what-is-twenty/20.png">
|
||||
<CardTitle>Self-Host</CardTitle>
|
||||
Deploy and manage Twenty on your own infrastructure.
|
||||
<CardTitle>Hostujte sami</CardTitle>
|
||||
Nasaďte a spravujte Twenty na vlastní infrastruktuře.
|
||||
</Card>
|
||||
|
||||
<Card href="/l/cs/developers/contribute/contribute" img="/images/user-guide/github/github-header.png">
|
||||
<CardTitle>Contribute</CardTitle>
|
||||
Join our open-source community and contribute to Twenty.
|
||||
<CardTitle>Přispějte</CardTitle>
|
||||
Připojte se k naší open-source komunitě a přispívejte do Twenty.
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
---
|
||||
title: 1-Click w/ Docker Compose
|
||||
title: Docker Compose jedním kliknutím
|
||||
---
|
||||
|
||||
<Warning>
|
||||
Docker containers are for production hosting or self-hosting, for the contribution please check the [Local Setup](/l/cs/developers/contribute/capabilities/local-setup).
|
||||
Docker kontejnery jsou určeny pro produkční hosting nebo samohostování; pro přispívání si prosím přečtěte [Lokální nastavení](/l/cs/developers/contribute/capabilities/local-setup).
|
||||
</Warning>
|
||||
|
||||
## Přehled
|
||||
@@ -50,7 +50,7 @@ Postupujte podle těchto kroků pro ruční nastavení.
|
||||
curl -o .env https://raw.githubusercontent.com/twentyhq/twenty/refs/heads/main/packages/twenty-docker/.env.example
|
||||
```
|
||||
|
||||
2. **Generate Secret Tokens**
|
||||
2. **Vygenerujte tajné tokeny**
|
||||
|
||||
Spusťte následující příkaz k generování jedinečného náhodného řetězce:
|
||||
|
||||
@@ -96,7 +96,7 @@ docker compose up -d
|
||||
|
||||
Pokud hostujete twentyCRM na svém vlastním počítači, otevřete svůj prohlížeč a přejděte na stránku [http://localhost:3000](http://localhost:3000).
|
||||
|
||||
If you host it on a server, check that the server is running and that everything is ok with
|
||||
Pokud to hostujete na serveru, zkontrolujte, že server běží a že je vše v pořádku s
|
||||
|
||||
```bash
|
||||
curl http://localhost:3000
|
||||
@@ -183,7 +183,7 @@ Důrazně doporučujeme nastavit Twenty za reverzní proxy se SSL ukončením pr
|
||||
|
||||
* **Konfigurace reverzního proxy:**
|
||||
|
||||
Ujistěte se, že váš reverzní proxy přesměruje požadavky na správný interní port (výchozí `3000`). Configure SSL termination and any necessary headers.
|
||||
Ujistěte se, že váš reverzní proxy přesměruje požadavky na správný interní port (výchozí `3000`). Nakonfigurujte terminaci SSL a všechny potřebné hlavičky.
|
||||
|
||||
* **Nastavení firewallu:**
|
||||
|
||||
@@ -203,50 +203,50 @@ Důrazně doporučujeme nastavit Twenty za reverzní proxy se SSL ukončením pr
|
||||
|
||||
Pokud nasazujete do bezstavového prostředí (např. některé cloudové služby), nakonfigurujte externí úložiště pro uchování dat.
|
||||
|
||||
## Backup and Restore
|
||||
## Zálohování a obnovení
|
||||
|
||||
Regular backups protect your CRM data from loss.
|
||||
Pravidelné zálohy chrání vaše data v CRM před ztrátou.
|
||||
|
||||
### Create a Database Backup
|
||||
### Vytvořte zálohu databáze
|
||||
|
||||
```bash
|
||||
docker exec twenty-postgres pg_dump -U postgres twenty > backup_$(date +%Y%m%d).sql
|
||||
```
|
||||
|
||||
### Automate Daily Backups
|
||||
### Automatizujte denní zálohy
|
||||
|
||||
Add to your crontab (`crontab -e`):
|
||||
Přidejte do svého crontabu (`crontab -e`):
|
||||
|
||||
```bash
|
||||
0 2 * * * docker exec twenty-postgres pg_dump -U postgres twenty > /backups/twenty_$(date +\%Y\%m\%d).sql
|
||||
```
|
||||
|
||||
### Restore from Backup
|
||||
### Obnovte ze zálohy
|
||||
|
||||
1. Stop the application:
|
||||
1. Zastavte aplikaci:
|
||||
|
||||
```bash
|
||||
docker compose stop twenty-server twenty-front
|
||||
```
|
||||
|
||||
2. Restore the database:
|
||||
2. Obnovte databázi:
|
||||
|
||||
```bash
|
||||
docker exec -i twenty-postgres psql -U postgres twenty < backup_20240115.sql
|
||||
```
|
||||
|
||||
3. Restart services:
|
||||
3. Restartujte služby:
|
||||
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
### Backup Best Practices
|
||||
### Osvědčené postupy pro zálohování
|
||||
|
||||
* **Test restores regularly** — verify backups actually work
|
||||
* **Store backups off-site** — use cloud storage (S3, GCS, etc.)
|
||||
* **Encrypt sensitive data** — protect backups with encryption
|
||||
* **Retain multiple copies** — keep daily, weekly, and monthly backups
|
||||
* **Pravidelně testujte obnovy** — ověřte, že zálohy skutečně fungují
|
||||
* **Ukládejte zálohy mimo lokalitu** — použijte cloudové úložiště (S3, GCS, atd.)
|
||||
* **Šifrujte citlivá data** — chraňte zálohy šifrováním
|
||||
* **Uchovávejte více kopií** — mějte denní, týdenní a měsíční zálohy
|
||||
|
||||
## Řešení potíží
|
||||
|
||||
|
||||
@@ -18,9 +18,9 @@ Twenty nabízí **dvě konfigurační režimy** pro různé potřeby nasazení:
|
||||
IS_CONFIG_VARIABLES_IN_DB_ENABLED=true # výchozí
|
||||
```
|
||||
|
||||
**Most configuration happens through the UI** after installation:
|
||||
**Většina konfigurace probíhá prostřednictvím uživatelského rozhraní** po instalaci:
|
||||
|
||||
1. Access your Twenty instance (usually `http://localhost:3000`)
|
||||
1. Přistupte ke své instanci Twenty (obvykle `http://localhost:3000`)
|
||||
2. Jděte na **Nastavení / Admin panel / Konfigurační proměnné**
|
||||
3. Nakonfigurujte integrace, e-mail, úložiště a další
|
||||
4. Změny se projeví okamžitě (u nasazení s více kontejnery do 15 sekund)
|
||||
@@ -58,63 +58,63 @@ IS_CONFIG_VARIABLES_IN_DB_ENABLED=false
|
||||
1. Nastavte `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false` ve vašem souboru `.env`
|
||||
2. Přidejte všechny konfigurační proměnné do souboru `.env`
|
||||
3. Restartujte kontejnery, aby se změny projevily
|
||||
4. Admin panel will show current values but cannot modify them
|
||||
4. Administrační panel zobrazí aktuální hodnoty, ale nemůže je upravovat
|
||||
|
||||
## Multi-Workspace Mode
|
||||
## Režim více pracovních prostorů
|
||||
|
||||
By default, Twenty runs in **single-workspace mode** — ideal for most self-hosted deployments where you need one CRM instance for your organization.
|
||||
Ve výchozím nastavení běží Twenty v **režimu jednoho pracovního prostoru** — ideální pro většinu samostatně hostovaných nasazení, kde potřebujete jednu instanci CRM pro svou organizaci.
|
||||
|
||||
### Single-Workspace Mode (Default)
|
||||
### Režim jednoho pracovního prostoru (výchozí)
|
||||
|
||||
```bash
|
||||
IS_MULTIWORKSPACE_ENABLED=false # default
|
||||
```
|
||||
|
||||
* One workspace per Twenty instance
|
||||
* First user automatically becomes admin with full privileges (`canImpersonate` and `canAccessFullAdminPanel`)
|
||||
* New signups are disabled after the first workspace is created
|
||||
* Simple URL structure: `https://your-domain.com`
|
||||
* Jeden pracovní prostor na instanci Twenty
|
||||
* První uživatel se automaticky stává administrátorem s plnými oprávněními (`canImpersonate` a `canAccessFullAdminPanel`)
|
||||
* Po vytvoření prvního pracovního prostoru jsou nové registrace zakázány.
|
||||
* Jednoduchá struktura URL: `https://your-domain.com`
|
||||
|
||||
### Enabling Multi-Workspace Mode
|
||||
### Povolení režimu více pracovních prostorů
|
||||
|
||||
```bash
|
||||
IS_MULTIWORKSPACE_ENABLED=true
|
||||
DEFAULT_SUBDOMAIN=app # default value
|
||||
```
|
||||
|
||||
Enable multi-workspace mode for SaaS-like deployments where multiple independent teams need their own workspaces on the same Twenty instance.
|
||||
Povolte režim více pracovních prostorů pro nasazení typu SaaS, kde více nezávislých týmů potřebuje své vlastní pracovní prostory na téže instanci Twenty.
|
||||
|
||||
**Key differences from single-workspace mode:**
|
||||
**Klíčové rozdíly oproti režimu jednoho pracovního prostoru:**
|
||||
|
||||
* Multiple workspaces can be created on the same instance
|
||||
* Each workspace gets its own subdomain (e.g., `sales.your-domain.com`, `marketing.your-domain.com`)
|
||||
* Users sign up and log in at `{DEFAULT_SUBDOMAIN}.your-domain.com` (e.g., `app.your-domain.com`)
|
||||
* No automatic admin privileges — first user in each workspace is a regular user
|
||||
* Workspace-specific settings like subdomain and custom domain become available in workspace settings
|
||||
* Na téže instanci lze vytvářet více pracovních prostorů
|
||||
* Každý pracovní prostor získá vlastní subdoménu (např. `sales.your-domain.com`, `marketing.your-domain.com`)
|
||||
* Uživatelé se registrují a přihlašují na `{DEFAULT_SUBDOMAIN}.your-domain.com` (např. `app.your-domain.com`)
|
||||
* Žádná automatická administrátorská oprávnění — první uživatel v každém pracovním prostoru je běžný uživatel
|
||||
* Nastavení specifická pro pracovní prostor, jako je subdoména a vlastní doména, se zpřístupní v nastavení pracovního prostoru
|
||||
|
||||
<Warning>
|
||||
**Environment-only setting:** `IS_MULTIWORKSPACE_ENABLED` can only be configured via `.env` file and requires a restart. It cannot be changed through the admin panel.
|
||||
**Nastavení pouze na úrovni prostředí:** `IS_MULTIWORKSPACE_ENABLED` lze konfigurovat pouze prostřednictvím souboru `.env` a vyžaduje restart. Nelze jej změnit prostřednictvím administračního panelu.
|
||||
</Warning>
|
||||
|
||||
### DNS Configuration for Multi-Workspace
|
||||
### Konfigurace DNS pro více pracovních prostorů
|
||||
|
||||
When using multi-workspace mode, configure your DNS with a wildcard record to allow dynamic subdomain creation:
|
||||
Při použití režimu více pracovních prostorů nakonfigurujte své DNS pomocí zástupného (wildcard) záznamu, aby bylo možné dynamicky vytvářet subdomény:
|
||||
|
||||
```
|
||||
*.your-domain.com -> your-server-ip
|
||||
```
|
||||
|
||||
This enables automatic subdomain routing for new workspaces without manual DNS configuration.
|
||||
Tím se umožní automatické směrování subdomén pro nové pracovní prostory bez ruční konfigurace DNS.
|
||||
|
||||
### Restricting Workspace Creation
|
||||
### Omezení vytváření pracovních prostorů
|
||||
|
||||
In multi-workspace mode, you may want to limit who can create new workspaces:
|
||||
V režimu více pracovních prostorů možná budete chtít omezit, kdo může vytvářet nové pracovní prostory:
|
||||
|
||||
```bash
|
||||
IS_WORKSPACE_CREATION_LIMITED_TO_SERVER_ADMINS=true
|
||||
```
|
||||
|
||||
When enabled, only users with `canAccessFullAdminPanel` can create additional workspaces. Users can still create their first workspace during initial signup.
|
||||
Pokud je povoleno, pouze uživatelé s `canAccessFullAdminPanel` mohou vytvářet další pracovní prostory. Uživatelé si stále mohou při úvodní registraci vytvořit svůj první pracovní prostor.
|
||||
|
||||
## Integrace Gmail & Google Kalendář
|
||||
|
||||
@@ -133,8 +133,8 @@ When enabled, only users with `canAccessFullAdminPanel` can create additional wo
|
||||
1. Přejděte na [Pověření](https://console.cloud.google.com/apis/credentials)
|
||||
2. Vytvořte OAuth 2.0 Client ID
|
||||
3. Přidejte tyto URI přesměrování:
|
||||
* `https://{your-domain}/auth/google/redirect` (for SSO)
|
||||
* `https://{your-domain}/auth/google-apis/get-access-token` (for integrations)
|
||||
* `https://{your-domain}/auth/google/redirect` (pro SSO)
|
||||
* `https://{your-domain}/auth/google-apis/get-access-token` (pro integrace)
|
||||
|
||||
### Konfigurace v Twenty
|
||||
|
||||
@@ -194,7 +194,7 @@ Poznámka: "Mail.ReadWrite" a "Mail.Send" jsou povinné pouze v případě, že
|
||||
|
||||
Musíte přidat následující URI přesměrování do vašeho projektu:
|
||||
|
||||
* `https://{your-domain}/auth/microsoft/redirect` if you want to use Microsoft SSO
|
||||
* `https://{your-domain}/auth/microsoft/redirect`, pokud chcete použít Microsoft SSO
|
||||
* `https://{your-domain}/auth/microsoft-apis/get-access-token`
|
||||
|
||||
### Konfigurace v Twenty
|
||||
@@ -291,3 +291,47 @@ yarn command:prod cron:workflow:automated-cron-trigger
|
||||
<Warning>
|
||||
**Režim pouze s prostředím:** Pokud nastavíte `IS_CONFIG_VARIABLES_IN_DB_ENABLED=false`, přidejte tyto proměnné do souboru `.env`
|
||||
</Warning>
|
||||
|
||||
## Serverless Functions
|
||||
|
||||
Twenty supports serverless functions for workflows and custom logic. The execution environment is configured via the `SERVERLESS_TYPE` environment variable.
|
||||
|
||||
<Warning>
|
||||
**Security Notice:** The local serverless driver (`SERVERLESS_TYPE=LOCAL`) runs code directly on the host in a Node.js process with no sandboxing. It should only be used for trusted code in development. For production deployments handling untrusted code, we highly recommend using `SERVERLESS_TYPE=LAMBDA` or `SERVERLESS_TYPE=DISABLED`.
|
||||
</Warning>
|
||||
|
||||
### Available Drivers
|
||||
|
||||
| Driver | Environment Variable | Případ použití | Security Level |
|
||||
| -------- | -------------------------- | ------------------------------------- | ------------------------------- |
|
||||
| Disabled | `SERVERLESS_TYPE=DISABLED` | Disable serverless functions entirely | N/A |
|
||||
| Local | `SERVERLESS_TYPE=LOCAL` | Development and trusted environments | Low (no sandboxing) |
|
||||
| Lambda | `SERVERLESS_TYPE=LAMBDA` | Production with untrusted code | High (hardware-level isolation) |
|
||||
|
||||
### Recommended Configuration
|
||||
|
||||
**For development:**
|
||||
|
||||
```bash
|
||||
SERVERLESS_TYPE=LOCAL # default
|
||||
```
|
||||
|
||||
**For production (AWS):**
|
||||
|
||||
```bash
|
||||
SERVERLESS_TYPE=LAMBDA
|
||||
SERVERLESS_LAMBDA_REGION=us-east-1
|
||||
SERVERLESS_LAMBDA_ROLE=arn:aws:iam::123456789:role/your-lambda-role
|
||||
SERVERLESS_LAMBDA_ACCESS_KEY_ID=your-access-key
|
||||
SERVERLESS_LAMBDA_SECRET_ACCESS_KEY=your-secret-key
|
||||
```
|
||||
|
||||
**To disable serverless functions:**
|
||||
|
||||
```bash
|
||||
SERVERLESS_TYPE=DISABLED
|
||||
```
|
||||
|
||||
<Note>
|
||||
When using `SERVERLESS_TYPE=DISABLED`, any attempt to execute a serverless function will return an error. This is useful if you want to run Twenty without serverless function capabilities.
|
||||
</Note>
|
||||
|
||||
@@ -4,12 +4,12 @@ title: Řešení potíží
|
||||
|
||||
## Řešení potíží
|
||||
|
||||
If you encounter any problem while setting up environment for development, upgrading your instance or self-hosting,
|
||||
here are some solutions for common problems.
|
||||
Pokud narazíte na jakýkoli problém při nastavování prostředí pro vývoj, při aktualizaci své instance nebo při samostatném hostování,
|
||||
zde jsou některá řešení běžných problémů.
|
||||
|
||||
### Vlastní hosting
|
||||
|
||||
#### First install results in `password authentication failed for user "postgres"`
|
||||
#### První instalace skončí chybou `password authentication failed for user "postgres"`
|
||||
|
||||
🚨 **DŮLEŽITÉ: Toto řešení je POUZE pro nové instalace** 🚨
|
||||
Pokud máte existující instanci Twenty s produkčními daty, **NEPROVÁDĚJTE** tyto kroky, protože trvale smažou vaši databázi!
|
||||
@@ -28,9 +28,9 @@ docker compose down --volumes
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
#### CR line breaks found [Windows]
|
||||
#### Nalezeny konce řádků CR [Windows]
|
||||
|
||||
This is due to the line break characters of Windows and the git configuration. Zkuste spustit:
|
||||
Je to způsobeno znaky konce řádku ve Windows a konfigurací gitu. Zkuste spustit:
|
||||
|
||||
```
|
||||
git config --global core.autocrlf false
|
||||
@@ -44,7 +44,7 @@ Během instalace Twenty musíte nastavit svou postgres databázi s správnými s
|
||||
Pokud se vám podaří spustit toto nastavování, měli byste mít ve své databázi schémata `default` a `metadata`.
|
||||
Pokud ne, ujistěte se, že na vašem počítači neběží více než jedna instance postgres.
|
||||
|
||||
#### Cannot find module 'twenty-emails' or its corresponding type declarations.
|
||||
#### Nelze najít modul 'twenty-emails' ani jeho odpovídající deklarace typů.
|
||||
|
||||
Před spuštěním inicializace databáze musíte sestavit balíček `twenty-emails` s `npx nx run twenty-emails:build`
|
||||
|
||||
@@ -54,7 +54,7 @@ Ujistěte se, že v kořenovém adresáři spouštíte `yarn` a poté spusťte `
|
||||
|
||||
#### Lint při ukládání nefunguje
|
||||
|
||||
Toto by mělo fungovat přímo s nainstalovaným rozšířením eslint. If this doesn't work try adding this to your vscode setting (on the dev container scope):
|
||||
Toto by mělo fungovat přímo s nainstalovaným rozšířením eslint. Pokud to nefunguje, zkuste přidat toto do svého nastavení vscode (v rozsahu dev containeru):
|
||||
|
||||
```
|
||||
"editor.codeActionsOnSave": {
|
||||
@@ -68,11 +68,11 @@ Toto by mělo fungovat přímo s nainstalovaným rozšířením eslint. If this
|
||||
|
||||
In `packages/twenty-front/.env` uncomment `VITE_DISABLE_TYPESCRIPT_CHECKER=true` and `VITE_DISABLE_ESLINT_CHECKER=true` to disable background checks thus reducing amount of needed RAM.
|
||||
|
||||
**If it does not work:**
|
||||
Run only the services you need, instead of `npx nx start`. Například pokud pracujete na serveru, spusťte pouze `npx nx worker twenty-server`
|
||||
**Pokud to nefunguje:**
|
||||
Spusťte pouze služby, které potřebujete, místo `npx nx start`. Například pokud pracujete na serveru, spusťte pouze `npx nx worker twenty-server`
|
||||
|
||||
**If it does not work:**
|
||||
If you tried to run only `npx nx run twenty-server:start` on WSL and it's failing with the below memory error:
|
||||
**Pokud to nefunguje:**
|
||||
Pokud jste se pokusili spustit pouze `npx nx run twenty-server:start` na WSL a selhává to s následující chybou paměti:
|
||||
|
||||
`FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory`
|
||||
|
||||
@@ -83,11 +83,11 @@ Pro obejití proveďte níže uvedený příkaz v terminálu nebo jej přidejte
|
||||
Příznak --max-old-space-size=8192 nastavuje horní limit 8 GB pro hromadu v Node.js; využití se škáluje s požadavkem aplikace.
|
||||
Odkaz: https://stackoverflow.com/questions/56982005/where-do-i-set-node-options-max-old-space-size-2048
|
||||
|
||||
**If it does not work:**
|
||||
Investigate which processes are taking you most of your machine RAM. V Twenty jsme si všimli, že některá rozšíření VScode zabírala hodně paměti RAM, takže jsme je dočasně deaktivovali.
|
||||
**Pokud to nefunguje:**
|
||||
Analyzujte, které procesy vám zabírají většinu paměti na stroji. V Twenty jsme si všimli, že některá rozšíření VScode zabírala hodně paměti RAM, takže jsme je dočasně deaktivovali.
|
||||
|
||||
**If it does not work:**
|
||||
Restart your machine helps to clean up ghost processes.
|
||||
**Pokud to nefunguje:**
|
||||
Restartování počítače pomůže vyčistit zombie procesy.
|
||||
|
||||
#### Při běhu `npx nx start` se v protokolech objevují podivné [0] a [1]
|
||||
|
||||
@@ -142,7 +142,7 @@ To je očekávané, protože uživatel je neautorizovaný, když je odhlášen,
|
||||
|
||||
#### Front-end se nedaří spustit a vrací chybu TS5042: Možnost 'project' nelze kombinovat se zdrojovými soubory na příkazovém řádku
|
||||
|
||||
Comment out checker plugin in `packages/twenty-ui/vite-config.ts` like in example below
|
||||
Zakomentujte plugin checker v `packages/twenty-ui/vite-config.ts` jako v příkladu níže
|
||||
|
||||
```
|
||||
plugins: [
|
||||
@@ -170,7 +170,7 @@ plugins: [
|
||||
|
||||
Spusťte `UPDATE core."user" SET "canAccessFullAdminPanel" = TRUE WHERE email = 'you@yourdomain.com';` v databázovém kontejneru pro získání přístupu k administračnímu panelu.
|
||||
|
||||
### 1-click Docker compose
|
||||
### Docker Compose jedním kliknutím
|
||||
|
||||
#### Nelze se přihlásit
|
||||
|
||||
@@ -206,9 +206,9 @@ Pokud provozujete Twenty za reverzní proxy a máte problémy s připojením:
|
||||
|
||||
Po provedení změn restartujte jak reverzní proxy, tak kontejnery Twenty.
|
||||
|
||||
#### Error when uploading an image - permission denied
|
||||
#### Chyba při nahrávání obrázku - přístup odepřen
|
||||
|
||||
Switching the data folder ownership on the host from root to another user and group resolves this problem.
|
||||
Změna vlastnictví datové složky na hostiteli z uživatele root na jiného uživatele a skupinu tento problém vyřeší.
|
||||
|
||||
## Získání pomoci
|
||||
|
||||
@@ -216,7 +216,7 @@ Pokud se setkáte s problémy, které tento průvodce nepokrývá:
|
||||
|
||||
* Zkontrolujte protokoly:
|
||||
|
||||
View container logs for error messages:
|
||||
Zobrazte protokoly kontejneru kvůli chybovým zprávám:
|
||||
|
||||
```bash
|
||||
docker compose logs
|
||||
|
||||
@@ -4,9 +4,9 @@ title: Průvodce upgradem
|
||||
|
||||
## Obecné pokyny
|
||||
|
||||
**Always make sure to back up your database before starting the upgrade process** by running `docker exec -it {db_container_name_or_id} pg_dumpall -U {postgres_user} > databases_backup.sql`.
|
||||
**Před zahájením procesu upgradu se vždy ujistěte, že jste zálohovali svou databázi** spuštěním `docker exec -it {db_container_name_or_id} pg_dumpall -U {postgres_user} > databases_backup.sql`.
|
||||
|
||||
To restore backup, run `cat databases_backup.sql | docker exec -i {db_container_name_or_id} psql -U {postgres_user}`.
|
||||
Pro obnovení zálohy spusťte `cat databases_backup.sql | docker exec -i {db_container_name_or_id} psql -U {postgres_user}`.
|
||||
|
||||
Pokud jste použili Docker Compose, postupujte takto:
|
||||
|
||||
@@ -32,7 +32,7 @@ Ahoj Twenty v1.0! 🎉
|
||||
|
||||
Všechny interakce s metadatovým API byly optimalizovány pro lepší výkon, zejména pro manipulaci s metadaty objektů a operace vytváření pracovních prostorů.
|
||||
|
||||
We've refactored our caching strategy to prioritize cache hits over database queries when possible, significantly improving the performance of metadata API operations.
|
||||
Refaktorovali jsme naši strategii mezipaměti tak, aby upřednostňovala, pokud je to možné, zásahy do mezipaměti před databázovými dotazy, což výrazně zlepšilo výkon operací rozhraní API metadat.
|
||||
|
||||
Pokud po upgradu narazíte na problémy s výkonem, může být nutné vyprázdnit cache, aby bylo zajištěno její sladění s nejnovějšími změnami. Spusťte tento příkaz v kontejneru twenty-server:
|
||||
|
||||
@@ -316,8 +316,8 @@ Příkaz `yarn command:prod upgrade-0.31` se postará o datovou migraci všech p
|
||||
|
||||
Upgradujte svou instanci Twenty pro použití v0.30.0 image
|
||||
|
||||
**Breaking change**:
|
||||
To enhance performances, Twenty now requires redis cache to be configured. Aktualizovali jsme náš [docker-compose.yml](https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/docker-compose.yml), aby to odrážel.
|
||||
**Změna, která způsobí nekompatibilitu**:
|
||||
Pro zvýšení výkonu nyní vyžaduje Twenty konfiguraci cache Redis. Aktualizovali jsme náš [docker-compose.yml](https://raw.githubusercontent.com/twentyhq/twenty/main/packages/twenty-docker/docker-compose.yml), aby to odrážel.
|
||||
Ujistěte se, že jste aktualizovali svou konfiguraci a své proměnné prostředí odpovídajícím způsobem:
|
||||
|
||||
```
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: Self-Host
|
||||
description: Deploy and manage Twenty on your own infrastructure.
|
||||
title: Vlastní hosting
|
||||
description: Nasaďte a spravujte Twenty na vlastní infrastruktuře.
|
||||
---
|
||||
|
||||
<Frame>
|
||||
@@ -9,22 +9,22 @@ description: Deploy and manage Twenty on your own infrastructure.
|
||||
|
||||
## Přehled
|
||||
|
||||
Twenty can be self-hosted on your own infrastructure, giving you full control over your data and deployment.
|
||||
Twenty můžete samostatně hostovat na vlastní infrastruktuře, což vám dává plnou kontrolu nad daty a nasazením.
|
||||
|
||||
## Why Self-Host?
|
||||
## Proč samohostovat?
|
||||
|
||||
* **Data ownership**: Keep all CRM data on your own servers
|
||||
* **Compliance**: Meet regulatory requirements for data residency
|
||||
* **Customization**: Full access to modify and extend the platform
|
||||
* **Vlastnictví dat**: Uchovávejte veškerá data CRM na vlastních serverech
|
||||
* **Soulad**: Splňte regulační požadavky na umístění dat
|
||||
* **Přizpůsobení**: Plný přístup k úpravám a rozšiřování platformy
|
||||
|
||||
## Getting Started
|
||||
## Začínáme
|
||||
|
||||
<CardGroup cols={2}>
|
||||
<Card title="Docker Compose" icon="docker" href="/l/cs/developers/self-host/capabilities/docker-compose">
|
||||
Quick setup with Docker
|
||||
Rychlé nastavení s Dockerem
|
||||
</Card>
|
||||
|
||||
<Card title="Cloud Providers" icon="cloud" href="/l/cs/developers/self-host/capabilities/cloud-providers">
|
||||
Deploy on AWS, GCP, or Azure
|
||||
<Card title="Poskytovatelé cloudu" icon="cloud" href="/l/cs/developers/self-host/capabilities/cloud-providers">
|
||||
Nasaďte na AWS, GCP nebo Azure
|
||||
</Card>
|
||||
</CardGroup>
|
||||
|
||||
Reference in New Issue
Block a user