7.1 KiB
7.1 KiB
MODA (moda.app) — Clerk signup + work-email promo + API reverse
AI-дизайн-агент (канвасы, сайты, бренд-киты). Free = 500 cr/мес, Pro $30 = 6000 cr/мес.
Промо CLAUDEFOUNDERS = 90 дней Pro бесплатно без карты, авто-отмена в конце триала.
Ключевые ограничения промо (проверено живыми 403)
- Требует work email — gmail/outlook отбивает
403 promo_requires_work_email. - Один клейм на email-домен: второй воркспейс с тем же доменом →
403 promo_domain_already_claimed. Для масс-фарма нужен пул РАЗНЫХ неблокируемых work-доменов с catch-all. - Clerk-блоклист temp-mail:
voidash.cyou,*.eu.cc(govno/musor/pomoi) →form_email_address_blockedпри signup.voidash.bondпроходит signup, но как домен промо-клейма одноразовый. - Redeem body key —
code, НЕpromo_code(иначе 422 validation_error).
Флоу авторега (работает, ~6 мин/акк)
- Voidash inbox:
POST https://api.voidash.com/api/v1/inboxes {"domain": "voidash.bond"}→ address + session_key. Сообщения:GET /messagesсAuthorization: Bearer *** key]→ полеotp_codeнапрямую (fallback regex\b\d{6}\\bпо preview_text/body). Домены:GET /domains. - Turnstile: невидимый sitekey
0x4AAAAAAAFV93qQdS0ycilX, action ОБЯЗАТЕЛЬНОsignup, solve через локальный sidecar :8877 (type: turnstile). Smart-sitekey0x4AAAAAAAWXJGBD7bONzLBd. - Clerk signup в page-контексте:
window.Clerk.client.signUp.create({emailAddress, password, captchaToken, unsafeMetadata:{referral_code}})→ statusmissing_requirementsэто НОРМА (ждёт email verify). PK:pk_live_Y2xlcmsubW9kYS5hcHAk. - Verify:
signUp.prepareEmailAddressVerification({strategy:'email_code'})(илиprepareVerification({strategy:'email_code'})) → код из voidash →signUp.attemptVerification({code, strategy:'email_code'})— strategy ОБЯЗАТЕЛЕН в том же вызове, без негоform_param_missing. Statuscomplete+createdSessionId→Clerk.setActive({session: id}). - MODA provision:
POST https://api.moda.app/api/v1/users/me/syncс Bearer JWT → создаёт user+org, возвращаетorganizations[].id. - Redeem:
POST /api/v1/organizations/{org}/billing/redeem-promo {"code": "CLAUDEFOUNDERS"}→ 200{credits_granted, pro_trial_days: 90, monthly_credits: 6000}.
Альтернативный путь на существующем gmail-акке (work email вторым)
Password-reset обходит session-reverification тупик: POST clerk.moda.app/v1/client/sign_ins strategy reset_password_email_code → код из IMAP → client.signIn.attemptFirstFactor({code, password, strategy}) одним вызовом (раздельные падают) → setActive → fresh-сессия. Затем user.createEmailAddress({email}) — payload {email}, НЕ {email_address} (минифицированный исходник: let{email:t}=e) → prepare/attempt verification → user.update({primaryEmailAddressId: idn}) + user.reload() → sync → redeem. Rate limit на reset-коды ~4 мин между попытками.
Clerk JS API — проверенные сигнатуры
- Логин:
client.signIn.create({identifier, password})→setActive({session: createdSessionId}). Функцииwindow.Clerk.signIn()НЕ существует. - JWT живёт ~60с — всегда
session.getToken({skipCache:true})непосредственно перед API-вызовом. session.prepareFirstFactorVerification({strategy:'email_code'})для reverification — ни один вариант action не даёт стабильного OK; не тратить время, использовать reset-password путь.- Сохранённые cookies браузера теряют Clerk-сессию (
GET /v1/client→sessions: []) — перелогин по паролю надёжнее реюза cookie-файлов.
API-карта (реверс из app-чанков + живые 200)
- Billing:
/api/v1/organizations/{org}/billing/{status,usage,credit-details,credit-bundles,redeem-promo,checkout}. Бандлы: $10=2000cr, $25=5000cr, $50=10000cr, $100=22000cr. Paid: до 10 seats,credits_per_seat: 6000— инвайты шарят квоту. - Referrals:
/organizations/{org}/referrals/{code,stats}(свой код на воркспейс),/api/v1/referrals/claim. - Генерация:
/api/v1/conversations/omni/{id}+/turns/{id}(агент),/api/v1/canvases,/api/v1/websites(+/duplicate),/remove-background,/brand-kits,/memory/*. Liveblocks-коллаб, Figma OAuth. - Генерации идут НЕ через REST, а через WebSocket (полный протокол из бандла):
wss://api.moda.app/ws/unified/{team_id}?token=<JWT>&session_id=<uuid>. Отправка задачи{"type":"agent.execute_task","canvasId":...,"task":"<промпт>","requestId":...}; отменаagent.cancel_job/agent.cancel_task; ресинкagent.catch_up {canvasId, fromSequence}; привязка тредаagent.set_thread {thread_id, conversation_id}; keepaliveping/pong, ре-авторизацияreauth/reauth_ack. Стрим ответа — enum 60+ типов:agent.thinking_chunk→agent.assistant_text_chunk→agent.tool_call/tool_response→agent.canvas_update→agent.token_usage→agent.session_completed. REST omni-эндпоинты — только чтение (detail, scene-baselines, checkpoint-activity, PATCH working-state). Полный REST-каталог = 130 уникальных путей (regex-экстракт["](/api/v\d/...)["]по app-чанкам). - Модели (AGENT_MODEL_CATALOG): primary — opus-5, sonnet-5.5, gpt-6.1-sol (free-tier ok); more — opus-4.8, sonnet-5, fable-5.1/fable-5 (requiresPaid), haiku-4.5, gpt-5.6-sol/terra/luna, kimi-k2.5/k2.6/k3 (1M ctx, Fireworks). UI-тиры lite/standard/pro/pro-fast; усилия none..max; fast-транспорт anthropic-fast/openai-priority. Image: nano-banana-lite.
Питфолы автоматизации
- Fresh browser на каждый аккаунт: общий browser с несколькими context'ами переносит Clerk-сессию → второй акк получает org ПЕРВОГО (sync_email совпадает, ref-код тот же). Признак: одинаковый org/ref у разных email в логе.
- Cloudflare: ждать пока title не содержит «moment»; инъекция только
cf_clearance,__cf_bm,_cfuvid. - Тулкит лежит в
tmp/moda-farm/(farm_reg.py, redeem_existing.py, api_probe.py); публичная копия — github ArthurMonteiro08586/moda-farm.