--- title: Конфигурация приложения description: Определите идентификацию вашего приложения, роль по умолчанию, переменные и метаданные маркетплейса с помощью defineApplication. icon: rocket --- В каждом приложении должен быть ровно один вызов `defineApplication`. Он объявляет: * **Идентификация** — универсальный идентификатор, отображаемое имя, описание. * **Разрешения** — от имени какой роли выполняются его логические функции и фронтенд-компоненты. * **Переменные** *(необязательно)* — пары ключ–значение, доступные вашему коду как переменные окружения. * **Хуки предустановки / постустановки** *(необязательно)* — см. [Логические функции](/l/ru/developers/extend/apps/logic/logic-functions). ```ts src/application-config.ts import { defineApplication } from 'twenty-sdk/define'; export default defineApplication({ universalIdentifier: '39783023-bcac-41e3-b0d2-ff1944d8465d', displayName: 'My Twenty App', description: 'My first Twenty app', applicationVariables: { DEFAULT_RECIPIENT_NAME: { universalIdentifier: '19e94e59-d4fe-4251-8981-b96d0a9f74de', description: 'Default recipient name for postcards', value: 'Jane Doe', isSecret: false, }, }, }); ``` Заметки: * Поля `universalIdentifier` — это детерминированные идентификаторы, которые принадлежат вам. Сгенерируйте их один раз и сохраняйте неизменными между синхронизациями. * `applicationVariables` становятся переменными окружения для ваших функций и фронтенд-компонентов. В логических функциях (на стороне сервера) они доступны как `process.env.VARIABLE_NAME`. Во фронтенд-компонентах используйте `getApplicationVariable('VARIABLE_NAME')` из `twenty-sdk/front-component`. Переменные, помеченные как `isSecret: true`, внедряются только в логические функции. Фронтенд-компоненты получают только несекретные переменные. * Роль по умолчанию автоматически определяется из файла роли, помеченного с помощью [`defineApplicationRole()`](/l/ru/developers/extend/apps/config/roles) — вам не нужно ссылаться на неё из `defineApplication()`. * Предустановочные и постустановочные функции обнаруживаются автоматически во время сборки манифеста — вам не нужно указывать их в `defineApplication()`. * Явная передача `defaultRoleUniversalIdentifier` по-прежнему поддерживается для обратной совместимости, но считается устаревшей и вместо неё рекомендуется использовать `defineApplicationRole()`. ## Роль функции по умолчанию Роль, объявленная с помощью [`defineApplicationRole()`](/l/ru/developers/extend/apps/config/roles), определяет, к чему могут получать доступ логические функции и фронтенд‑компоненты приложения: * Токен времени выполнения, подставляемый как `TWENTY_APP_ACCESS_TOKEN`, формируется из этой роли. * Типизированный клиент API ограничен правами, предоставленными этой роли. * Следуйте принципу наименьших привилегий: объявляйте только те разрешения, которые действительно нужны вашим функциям. Когда вы создаёте новое приложение с помощью шаблона, CLI создаёт стартовый файл роли по адресу `src/roles/default-role.ts`. Полную справочную информацию см. в разделе [Роли и разрешения](/l/ru/developers/extend/apps/config/roles). ## Метаданные маркетплейса Если вы планируете [опубликовать приложение](/l/ru/developers/extend/apps/operations/publishing), эти необязательные поля определяют, как оно отображается в маркетплейсе: | Поле | Описание | | ------------------ | ------------------------------------------------------------------------------------------------------------------- | | `author` | Имя автора или название компании | | `category` | Категория приложения для фильтрации в маркетплейсе | | `logoUrl` | Путь к логотипу вашего приложения (например, `public/logo.png`) | | `screenshots` | Массив путей к скриншотам (например, `public/screenshot-1.png`) | | `aboutDescription` | Расширенное описание в Markdown для вкладки "About". Если опущено, маркетплейс использует `README.md` пакета из npm | | `websiteUrl` | Ссылка на ваш сайт | | `termsUrl` | Ссылка на условия предоставления услуг | | `emailSupport` | Адрес электронной почты поддержки | | `issueReportUrl` | Ссылка на систему отслеживания проблем |