ARMANOS

Агентствам

Для агентств

Вы ведёте чужие аккаунты за чужие деньги. Эта страница о том, что решает, кто к чему прикасается: места, роли, папки, замок на профиле и журнал, который отвечает потом.
5
Ролей, от исполнителя до владельца
3 $ / мес
Одно дополнительное место в команде
3
Места в Business, владелец среди них
58
Названных видов событий в журнале

Агентство теряет аккаунты на людях, а не на отпечатках

Двенадцать клиентов, четыре человека и таблица с паролями. Так живёт большинство агентств, и живёт ровно до первого входа не с той машины. Таблица никого не остановит.

ARMANOS собирает агентство в одно рабочее пространство. Подписка принадлежит одной учётной записи. Остальные входят по приглашению, и любой их запрос считается по владельцу: норма профилей, места машин, библиотека прокси, группы, журнал. Этим занят один файл, а все прочие части спрашивают его.

Человек состоит в одном пространстве за раз: строка участия у него единственная. Значит подрядчик не сидит в двух агентствах сразу. Чтобы войти к вам, он сначала уходит от других, а уход это событие с последствиями, они описаны ниже.

  • Норма профилей

    Считается по владельцу и всем участникам вместе. В норму первыми входят профили владельца, потом участники по старшинству.

  • Места машин

    Один запас на всю команду. Считается при регистрации машины и снова на каждом ударе сердца.

  • Библиотека прокси

    Одна на пространство. Пароли выдаются по роли, а не всякому, кто сумел назвать номер записи.

  • Группы

    Один набор папок для всех. Ими же вы сужаете то, что видит участник.

  • Библиотека креативов

    До 500 материалов. Они принадлежат пространству и остаются, когда человек уходит.

  • Сценарии и расписания

    Общие на пространство, правит их управляющий и старше.

  • Журнал

    Дела всех участников в одном месте, читают администратор и владелец.

Место занимает человек, и одно уже занято владельцем

Места считаются по людям, а не по машинам. В Business их три: вы и двое коллег. В Professional одно, ваше, поэтому команда там начинается с докупленных мест. Дополнительное место стоит 3 доллара в месяц, в кассе их берут до пятидесяти.

У приглашённого уже должна быть учётная запись. Сервер откажет в приглашении на адрес, которого никто не регистрировал: владение почтой нигде не доказывается. Порядок такой: человек заводит запись, потом вы его приглашаете. Приглашение выписано на эту запись, живёт семь дней, и, пока им не воспользовались, его можно отозвать.

Места считаются трижды, и это нарочно. При выписке приглашения, чтобы отказ достался вам, а не коллеге. При приёме, под замком на строке вашей подписки, чтобы двое не заняли последнее место разом. И при каждом запуске профиля, чтобы кончившаяся оплата не кормила пятерых.

Когда тариф падает, ничего не удаляется. Живые места остаются у самых старших участников, остальные получают понятный отказ при запуске. Вернёте тариф, и человек работает дальше.

Business, 200 профилей
42 $ / мес
Два места сверх трёх включённых
+6 $ / мес
Итого в месяц
48 $
Тот же заказ на год
38 $ / мес, 456 $ за год

Браузер только просит. Цену пересчитывает сервер при оформлении: packages/shared/src/index.js, priceForPlan.

Окно «Members» в программе: счётчик мест показывает 1 of 3 seats на тарифе Business, рядом кнопка «Invite member», в списке пока один владелец.
Участники, в программе. Число мест приходит из подписки, а не рисуется на экране.

Пять ролей, и на каждую сервер отвечает по-своему

Роли такие: владелец, администратор, управляющий, исполнитель и участник. Это ступени: старшая проходит там, где требуется младшая. Исполнитель и участник стоят на одной ступени, два имени нужны, чтобы подписать, кто чем занят.

Сторож стоит на самом ходе и выясняет вашу роль в вашем пространстве раньше, чем ход отработает. Управляющий когда-то был просто словом в списке и ничем не отличался от исполнителя. Теперь отличается: общие рабочие вещи, группы, библиотека прокси, сценарии и расписания, принадлежат управляющему и старше. Деньги, люди и журнал принадлежат администратору и владельцу.

Правка профиля вообще не про роль. Переименовать профиль, сменить ему прокси или удалить его может только та запись, которая его завела. Коллега, которому профиль открыли, запускает его и работает внутри. Всем прочим сервер отвечает «не найдено», поэтому перебором номеров чужого не нащупать.

Ключи для программ личные, до двадцати на человека, у каждого свои права. Ключ никогда не сильнее хозяина: на запросе с ключом работает тот же сторож ролей, и ключ участника с правом logs:read журнал всё равно не прочитает.

Что можноУчастник, исполнительУправляющийАдминистраторВладелец
Открыть профиль, который ему далиДаДаДаДа
Заводить профили в общей нормеДаДаДаДа
Переименовать или удалить свой профильДаДаДаДа
Группы: завести, поправить, удалитьДаДаДа
Библиотека прокси: добавить, поправить, удалить, забрать с паролямиДаДаДа
Купить прокси в магазинеДаДаДа
Сценарии и расписанияДаДаДа
Прочитать пароль прокси из библиотекитолько вместе с открытым ему профилемДаДаДа
Приглашать, менять роли, открывать папкиДаДа
Тариф, места, доплата за профили, оплатаДаДа
Читать журнал пространстваДаДа
Отвязать чужую машинуДаДа
Нельзя исключить и понизитьДа

Участник видит только те папки, что вы ему открыли

Пока вы не сказали иначе, участник видит все профили, которые ему открыли. Задайте ему список групп, и вид сузится до них. Пустой список это осознанное снятие ограничения: сняв последнюю папку, вы не запираете человека молча.

Ограничение стоит в двух местах, потому что список это ещё не защита. Список профилей отбирает по разрешённым группам, а прямой запуск по номеру сверяет те же строки. Профиль без группы при заданном ограничении не показывается, иначе его обходили бы, просто не кладя профиль в папку.

Строки доступа записаны на ваше пространство, а не на человека. Ваше ограничение не поедет с подрядчиком к следующему клиенту и стирается в тот миг, когда он от вас уходит. Раздают доступ только владелец и администратор, а самого владельца ограничить нельзя.

  1. 1

    Заведите папку под клиента

    Окно «Группы», управляющий и старше. Назовите её так же, как клиент назван у вас в счетах.

  2. 2

    Положите в неё профили этого клиента

    У профиля одна группа. Профили вне папок ограниченному участнику не видны.

  3. 3

    Пригласите подрядчика исполнителем

    Сначала он заводит запись, потом вы приглашаете адрес, и он принимает в течение семи дней.

  4. 4

    Откройте ему одну эту папку

    Окно «Участники», папки. Одна выбранная группа значит один видимый клиент.

  5. 5

    Отдайте те профили, которые он и правда будет открывать

    Видимость и доступ это разные вещи. Папка сужает то, что видно, а запускать позволяет именно общий доступ.

Окно «Groups» в программе с папками Marketplaces, Social media, Ad accounts и Clients и строкой о том, что группы общие на всё рабочее пространство.
Группы, в программе. Они принадлежат пространству и служат единицей видимости.

Профиль открывается в одном месте

Двое, открывшие один аккаунт с двух машин, это ровно то поведение, за которое аккаунты блокируют. Продукт для агентства не должен создавать его сам, поэтому у профиля есть замок.

Запуск берёт замок на вашу машину на три минуты, и программа продлевает его каждые шестьдесят секунд, пока окно открыто. Вторая машина получает отказ 409, где названы держатель и время, а не молчание и не тихий пропуск.

Перехват делается осознанно и с условием. Он побеждает, только пока замок у той самой машины, которую вам показали, поэтому два одновременных перехвата не проходят оба. Прежний держатель узнаёт об этом за минуту: продление ему отказывают, программа закрывает окна и говорит, что случилось.

Закрытие профиля снимает замок только этой машины, поэтому ваше окно никогда не освободит чужое. Выключенная машина не снимает ничего, и профиль освобождается сам через три минуты.

Ответ
409 Conflict
error
profile_busy
busy.name
Анна, MacBook Pro
busy.since
2026-09-10T09:14:02Z
busy.sameUser
false

Это то, что получает вторая машина: apps/server/src/profiles/profiles.service.ts, start().

Замок живёт на сервере

Когда программа без сети или сервер недоступен, запуск не запрещается. Отнять у человека работу из-за обрыва связи хуже, чем сама опасность. Две машины без сети могут открыть один профиль.

Журнал отвечает, кто это сделал, и переживает самого человека

Словарь событий это 58 названных видов в одном файле, общий для всех, кто пишет, и для всех, кто читает. Регистрация, входы и запирание после подбора пароля, заведение, запуск, остановка, правка и удаление профиля, жизнь прокси, регистрация и отвязка машин, приглашения, роли, выдача папок, смена тарифа, выпуск и отзыв ключей.

В каждую запись сразу вписан хозяин пространства. Одно это решение означает, что исключение участника не стирает его историю: раньше журнал читался по текущему списку людей, и вместе с человеком пропадали все его дела. В строках подставляются почта того, кто действовал, и имя профиля, поэтому вы читаете слова, а не коды.

Если действие пришло с ключом, в запись ложится номер ключа. Ключей у одного человека бывает несколько, и без номера утечка означала бы отзыв всех разом и сломанную автоматизацию.

Поверхностей три: все действия, открытие и закрытие браузера, входы и регистрации машин с адресом и страной. На странице до ста строк. Читают администратор и владелец, и ключ этого не поднимает.

Поверх тех же записей работает панель подозрительного, три правила. Вход из страны, которой у этого человека не было тридцать дней. Четыре и больше профилей на одном прокси. Пять запусков внутри одной минуты, причём наш собственный пакетный запуск исключён: он разносит старты на три-четырнадцать секунд.

  • Кто

    Почта участника, подставленная по его номеру при сборке страницы.

  • Что

    Одно из 58 названий, например profile.start, team.role, proxy.secret.read.

  • Какой профиль

    Имя профиля и его сценарий, вынутые из подробностей записи.

  • Откуда

    Адрес, страна и имя машины у входов и регистраций машин.

  • Чем сделано

    Номер ключа, если действие пришло от ключа, а не от человека за клавиатурой.

  • Чьё пространство

    Записано в саму строку, поэтому история переживает исключение участника.

Уход человека это одна сделка, которая забирает доступ

Машины это тоже места. Их считают при регистрации и на каждом ударе сердца, а отвязка машины в кабинете освобождает место сразу. Машина при этом помнит, что её отвязали, и не возвращает место себе сама на ближайшем ударе.

Отвязанная машина не запускает профиль и не продлевает замок. Запрет живёт на сервере, а не в программе, поэтому переписанная программа его не обойдёт. Свою машину отвязывает каждый, чужую только администратор и владелец.

Исключение и уход по своей воле идут одной дорогой, а журнал честно записывает, что именно было. Это одна сделка, и вот её порядок.

  1. 1

    Общие доступы снимаются в обе стороны

    И то, что открыли ему, и то, что он открыл из профилей, уходящих вместе с ним.

  2. 2

    Его замок отпускается

    Профиль, который он держал, не остаётся занятым после его ухода.

  3. 3

    Профили, заведённые после вступления, переходят вам

    Число перешедших профилей попадает в запись журнала.

  4. 4

    У уходящих профилей стирается ссылка на вашу библиотеку

    Профиль, с которым человек пришёл, сохраняет свой прокси и уходит с ним.

  5. 5

    Слепки, совпавшие с вашей библиотекой, стираются

    Сверяются адрес, порт и логин. Ваш рабочий прокси не уезжает внутри чужого профиля.

  6. 6

    Его машины удаляются

    Места под устройства возвращаются пространству.

  7. 7

    Непринятые приглашения на этот адрес гасятся

    Второй код, выписанный когда-то из-за недошедшего письма, не станет дорогой обратно.

  8. 8

    Строка участия исчезает

    Ваш тариф, норма и места перестают действовать для этого человека.

  9. 9

    Строки доступа к папкам исчезают

    Ваше ограничение не поедет с человеком к следующему клиенту.

Профили, заведённые до вступления, остаются его

Граница проходит по моменту, когда человек принял приглашение. Заведённое раньше он оплачивал сам и забирает с собой, а связь с вашей библиотекой прокси у таких профилей обрубается первой.

Что агентство получает на каждом тарифе

Free это одно место, ваше, поэтому команды на нём нет. В Professional место тоже одно: это тариф для одного человека с несколькими машинами, и команда там начинается с докупленных мест. Business сделан ровно под работу, о которой эта страница: три места, пять машин, от 200 до 1000 профилей.

Enterprise кнопкой не продаётся. Касса отказывается выдумывать ему цену и отправляет к разговору: взять деньги за условия, о которых никто не договорился, хуже медленной продажи.

Норма общая, и спрашивается она не однажды при покупке, а при каждом запуске. Профили считаются по владельцу и участникам вместе, и первыми в норму входят профили владельца. Понизили ступень, и лишние профили замораживаются, а не исчезают: они видны в списке, их можно перенести или удалить, но открыть нельзя. Действующей подписке дают три дня сверх даты продления, а программа работает сутки без связи.

FreeProfessionalBusinessEnterprise
Профили2от 10 до 100от 200 до 10005000 и больше
Цена в месяц0 $от 6 до 25 $от 42 до 139 $по договору
Мест в команде, вместе с владельцем11320
Дополнительное место в месяцне продаётся3 $3 $по договору
Дополнительный профиль в месяцне продаётся2 $2 $по договору
Машины12520
Ключи для программДаДаДа

Чего это не делает

  • Роли, папки и замок решают, кто к чему прикасается внутри команды. О том, как площадка судит профиль, они не говорят ничего и обещанием про блокировки не являются.
  • У общего доступа нет уровней. Открыть профиль «только на просмотр» нельзя: человек, которому вы его дали, работает со всем, что внутри, включая куки и входы.
  • Куки за общим доступом не едут. Сессия лежит в папке профиля на той машине, где его открыли, а на сервере хранятся настройки, не куки. Чтобы перевезти живую сессию, нужна папка синхронизации, и профиль при этом должен быть закрыт.
  • Замок это правило сервера. Без сети или при недоступном сервере программа профиль всё равно откроет, поэтому две машины без связи могут открыть один аккаунт.
  • Ни единого входа по корпоративной учётной записи, ни домена компании нет. Каждый регистрируется сам, потом вы приглашаете адрес, а неиспользованное приглашение умирает через семь дней.
  • Один человек, одно пространство. Фрилансер, работающий на два агентства, не может состоять в обоих сразу: войдя к вам, он уходит от других.

Как проверить

В каждой строке названы файл, который это делает, и проверка, которая не даёт ему испортиться.

Места считаются при выписке приглашения, при приёме под замком строки и при каждом запуске профиля
apps/server/src/team/team.service.ts · apps/server/src/common/workspace/workspace.service.ts · apps/server/test/team-money-seats.js
Участник видит только открытые ему папки, и в списке, и при прямом запуске по номеру
apps/server/src/profiles/profiles.service.ts · apps/server/src/team/team.service.ts · apps/server/test/group-access.js
Две машины не держат один профиль: 409 с именем держателя, условный перехват, истечение через три минуты
apps/server/src/profiles/profiles.service.ts (LOCK_TTL_MS) · apps/server/test/profile-lock.js
Уход одной сделкой забирает доступы, замок, машины, непринятые приглашения и доступ к папкам
apps/server/src/team/team.service.ts (detach) · apps/server/test/team-money-seats.js
В журнале 58 названных видов, а строка несёт почту автора, хозяина пространства и номер ключа
apps/server/src/common/audit/audit.service.ts · apps/server/test/audit-filters.js
Пароль прокси из библиотеки выдаётся управляющему и старше или вместе с профилем, на котором он стоит
apps/server/src/proxies/proxies.service.ts · apps/server/test/proxy-secret.js

Соберите всё агентство на одной подписке

В Business три места и пять машин. Дополнительное место стоит три доллара в месяц, и касса считает их за вас.