Skip to main content

sessionkit

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

Зачем

«Сессия аккаунта» физически живёт сразу в нескольких местах: файловым деревом (s-authkit-client, envelope KEK/DEK), строкой в общей базе (s-accountpoolkit, документ хранится запечатанным целиком) и профилем браузера как кэшем узнавания устройства. Какое из них главное, до сих пор решала переменная окружения, прочитанная посторонним китом.

У этого две цены. Первая: одна команда пишет туда, где другая ничего не находит. Вторая, дороже: у сессии нет владельца — спросить «где она на самом деле» не у кого, и спор «почему навык не видит вход» решается догадками.

Этот кит — владелец. Он знает обе живые реализации, находит общую базу сам, выбирает носитель и говорит, кого выбрал и почему.

Как спрашивают

import sessionkit

address = sessionkit.SessionAddress(service="gemini", account="me@example.com")

state = sessionkit.load_state(address)          # None — входа ещё не было
sessionkit.save_state(address, state or {})     # записать тело сессии
sessionkit.mark(address, status="live")         # пометить, не трогая тело

choice = sessionkit.where()                     # КТО ответил и ПОЧЕМУ
print(choice.name, choice.reason)
for verdict in choice.verdicts:
    print(" ", verdict)                         # включая тех, кто отказался

Разбор полётов «почему выбрали не то» — sessionkit.explain(): опрашивает всех кандидатов, а не останавливается на первом согласившемся.

Что умеет выбранное хранилище сверх обязательного минимума (аренда на минт, набор аккаунтов, запись без слияния) — sessionkit.capabilities(). Способность спрашивают, а не предполагают: предположение оборачивается тишиной на месте защиты.

Адрес

Шесть координат, ровно те же, которыми адресует хранилище (corekit.dto.SessionRef):

координата вопрос умолчание
tenant чья сессия в общем хосте local
profile чей это набор входов (рабочий, личный) default
service к какому сервису обязательна
instance какой ИМЕННО вход сервиса (портал, национальный домен) пусто
account под каким аккаунтом default
stage боевая сессия или черновик записи трафика live

instance — не украшение: без него два разных портала Битрикса одного аккаунта получают одно имя, а хранилище считает уникальность по шести координатам — и запись уходит не туда, откуда читали.

Где что лежит

sessionkit.locate отвечает на вопрос «где» один раз на всех:

  • корень сессий — SESSIONS_HOME, иначе ~/.sessions;
  • общая база находится сама в <корень>/sessions.db; SESSIONS_DB_URL — переопределение (другой сервер, другой тенант), а не условие работы;
  • ключ шифрования имеет три состояния: файл (SESSIONS_DB_KEY_FILE или <корень>/.session-db.key), явное «хранить открыто» (SESSIONS_DB_PLAINTEXT=1) и «не задан» — последнее НЕ равно «открыто».

Порядок опроса: сначала база, потом дерево. Если общая база заведена, то она и есть сессия; читать в этот момент дерево значит завести второй носитель — обе копии выглядят рабочими, а ротацию получает только та, через которую сходили.

Аренда

sessionkit.session_lease(address) — окно записи на два слоя (лок внутри процесса + файл между процессами) со сроком и владельцем. Нужна там, где вход ВЫПУСКАЮТ: у сервисов вида Google одна сессия на аккаунт, и второй одновременный вход инвалидирует первый.

Что живёт МИМО двери

Честный список (подробности — в CHANGELOG.md): отпечаток выхода egress_fingerprint.json, персона устройства (corekit.persona), секреты, профиль браузера, а также координаты instance/stage, которые файловое дерево пока игнорирует. Дверь отдаёт тело сессии; всё перечисленное адресуется своими способами и ждёт своей очереди.

Разработка

uv sync --extra dev --extra live
uv run --extra dev --extra live pytest -q
uv run --extra dev ruff check sessionkit tests

Набор live ставит НАСТОЯЩИЕ хранилища: утверждение «обе реализации доступны через дверь» подделкой не доказывается — она подтверждает лишь то, что мы её так и написали. Без набора живые тесты пропускаются с внятной причиной.

Статус

  • Type: kit
  • Status: active
  • Priority: P0
  • Slug: sessionkit · Prefix: ses
atlas project get sessionkit

Физический layout:

  • Storage: _storage/sessionkit/
  • Junction: Products\sessionkit_storage/sessionkit

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

s_sessionkit-0.0.2.tar.gz (36.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

s_sessionkit-0.0.2-py3-none-any.whl (29.3 kB view details)

Uploaded Python 3

File details

Details for the file s_sessionkit-0.0.2.tar.gz.

File metadata

  • Download URL: s_sessionkit-0.0.2.tar.gz
  • Upload date:
  • Size: 36.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for s_sessionkit-0.0.2.tar.gz
Algorithm Hash digest
SHA256 17718d232925d7bac2df9a4746d0213582fee48072c8a699e842dfb077c3321a
MD5 7ec94c3bf260d10245a635af36381699
BLAKE2b-256 449fee56e9e2ff075331cbc079ea14a30e0f03e1efc13560ca6722f09eb72c1a

See more details on using hashes here.

File details

Details for the file s_sessionkit-0.0.2-py3-none-any.whl.

File metadata

  • Download URL: s_sessionkit-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 29.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for s_sessionkit-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 a1bd6fd73522b2f2b336ea9a9a676e60892b4163e6debee0e2f851c0fc94cfb4
MD5 009076c482b921ed54eb47d4b57e3123
BLAKE2b-256 25f03c965299823f7123c7897d8601012230ecd2f24fd95ae534ee1e4fac5dd3

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.0.2 This release

2 files

0.0.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page