--- добавлено: 2026-10-13 --- # Спецификация. Тестовая страница встраивания CRM Агент: `crm-embed-test` (создаёт админ). Код в Gitea `gitea.tes.gd`, хостинг на нашем сервере (Coolify). ## Цель Проверить задачу Олега в CRM «Передавати авторизацію CRM сайтам в iframe через postMessage» (`mv5mmtt7kdk16z`, проект Tvorymo shotam): страница, открытая в iframe из боковой панели CRM, узнаёт пользователя CRM. ## Адреса - Страница: `https://test-crm.tes.gd` (HTTPS обязателен). - CRM: `https://test.units.tvorymo.com`. - Supabase: `https://yjxbkcqsquwbsyoonfkn.supabase.co`. ## Протокол (со стороны страницы) 1. После загрузки: `window.parent.postMessage({ type: "crm:ready", version: 1 }, "*")`. 2. Принимать `crm:auth` `{ access_token, expires_at, user: { id, email, name } }` от любого origin (решение владельца для теста). Origin отправителя показывать на странице. 3. `access_token` отправить на сервер страницы; сервер проверяет его через `GET /auth/v1/user` (заголовки `apikey: `, `Authorization: Bearer `) и сверяет `exp`, `aud = "authenticated"`. 4. Имя и email брать из ответа Supabase, не из `user` в сообщении (имя из `user_metadata`; если пусто, показать «имя не задано в Supabase» и email). 5. Кнопка «Обновить токен»: отправляет `{ type: "crm:refresh" }`, CRM отвечает новым `crm:auth`; страница показывает, что токен сменился (время `expires_at`, без самого токена). 6. Выход (`crm:logout`) не проверяем. ## Требования - Заголовок `Content-Security-Policy: frame-ancestors *` (встраивание откуда угодно, для теста), без `X-Frame-Options`. - Токен не логировать ни в браузере, ни на сервере. Сессию держать в памяти. - Publishable-ключ Supabase агент получает от Ланы и записывает в свой CLAUDE.md (ключ публичный по дизайну). - Без открытого токена в ответе страницы: показываем только имя, email, id, origin, `expires_at`. ## Готово, когда - Страница в iframe CRM показывает имя и email пользователя из Supabase. - После «Обновить токен» приходит новый токен и страница это показывает. - Без iframe (открыта напрямую) страница пишет «жду авторизацию от CRM». Ссылку в боковую панель CRM добавляет владелец.