Skip to main content

Python SDK for orchestrating sing-box VPN nodes

Project description

PrismaCore

Monorepo: REST API для одной sing-box-ноды (server/) и Python SDK для управления несколькими нодами (client/).

License: MIT · English: README.en.md


Состав

Часть Что делает
server/ FastAPI: CRUD пользователей, инбаундов, аутбаундов, роутов; генерация share-ссылок; запись конфига sing-box
client/ SDK: несколько нод, выбор по региону/latency, сборка подписок
deploy/ Установка server на Linux (systemd)

SDK не отдаёт HTTP-подписку клиентам — вы сами оборачиваете core.subscriptions.build() во FastAPI/Flask/nginx.


Требования

  • Python 3.10+
  • sing-box (для server)
  • Redis — опционально (кэш на server и в SDK)

Установка

SDK (PyPI):

pip install prismacore

SDK (из исходников / dev):

git clone https://github.com/YOUR_USER/PrismaCore.git
cd PrismaCore
pip install -e .

Server:

pip install -r server/requirements.txt
# или production: sudo bash deploy/install_server.sh

Импорт SDK: from client import PrismaCore. Публикация новых версий на PyPI — docs/publishing.md.


Быстрый старт

import asyncio
from client import PrismaCore

async def main():
    async with PrismaCore.single_node(
        url="http://127.0.0.1:8000",
        token="<api-token>",
        public_host="203.0.113.10",  # публичный IP/домен для share-ссылок на server
    ) as core:
        await core.node().users.create_simple("alice", inbound_tags=["vless-in"])
        sub = await core.subscriptions.build("alice")
        print(sub[:80])

asyncio.run(main())

Токен API создаётся один раз: POST /api/v1/auth/token (см. docs/server.md).


Документация

Документ Содержание
docs/sdk.md SDK: конфиг, CRUD, регионы, подписки, кэш, ошибки, модели
docs/server.md Server API: эндпoинты, auth, env, sing-box, share-ссылки
docs/deploy.md Production-установка: install_server.sh, systemd, .env
docs/publishing.md PyPI: сборка, первая загрузка, новые версии

Архитектура

PrismaCore (SDK)
├── vpn_servers: VpnServerManager     # реестр нод
├── regions: RegionService            # fastest_node / best_nodes
├── subscriptions: SubscriptionAggregator
└── cache: CacheManager               # Redis, опционально

Node (на каждую ноду)
├── users / inbounds / outbounds / routes / system
└── HttpClient → server /api/v1/*

Типичный поток подписки:

  1. SDK выбирает ноды по регионам (fastest_only=True — одна на регион)
  2. На каждой ноде: GET /api/v1/sublink/{user_name}/all
  3. Server собирает vless:// / hysteria2:// из БД + HOST
  4. SDK добавляет meta-строки Happ, кодирует в base64

Структура репозитория

client/
├── prismacore.py
├── config.py, models.py, api_funcs.py, cache.py, exceptions.py
├── nodes/          node.py, vpn.py
├── resources/      users, inbounds, outbounds, routes, system
├── regions/        prober.py, registry.py
└── subscriptions/  aggregator.py

server/
├── app.py, routes.py, config.py
├── database.py, models.py, schemas.py
└── core/           singbox.py, cache.py

deploy/
├── install_server.sh
├── prismacore.service
└── .env.example

Частые ошибки

  • HOST=localhost на server — share-ссылки будут с localhost, клиенты не подключатся. Задайте публичный IP/домен.
  • Забыли invalidate после CRUD — подписчики получат закэшированную подписку без новых ссылок.
  • Несколько нод, core.node() без имениConfigError. Указывайте core.node("de-1").
  • Токен в заголовке — server ждёт ?token=... в query, не Bearer.

English

See README.en.md and docs/en/.

Project details


Download files

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

Source Distribution

prismacore-0.1.0.tar.gz (17.7 kB view details)

Uploaded Source

Built Distribution

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

prismacore-0.1.0-py3-none-any.whl (22.3 kB view details)

Uploaded Python 3

File details

Details for the file prismacore-0.1.0.tar.gz.

File metadata

  • Download URL: prismacore-0.1.0.tar.gz
  • Upload date:
  • Size: 17.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for prismacore-0.1.0.tar.gz
Algorithm Hash digest
SHA256 0c0bfa1441aab227db27f7c61e73ff63ba12faf9b366ffb2f4e537fd08b89acc
MD5 aff89aae0c4b69c5c35bbad0293a1e35
BLAKE2b-256 e048a5bd4a370bd592b124f5d9a1761e11629d5a79e86c0735aba2b7690d2277

See more details on using hashes here.

File details

Details for the file prismacore-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: prismacore-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 22.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for prismacore-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4721f62050ea11a50e4f6c15743f328733cea167a1a1eb22083921c670984b9a
MD5 3564b1ede549938add0e7a989858c20f
BLAKE2b-256 ef43b90c7d9299288056ddf440bf18d10c57b0cdb43e3cd2353e17be32b4bcdf

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page