Skip to main content

tokengift CLI for tokengift-compatible RSA gift/decrypt workflow

Project description

tokengift

项目描述

这是一个名为 tokengift 的项目,可直接部署到 GitHub 仓库 mappedinfo/tokengift。项目提供 token 银行与 token 兑换能力,并支持通过访问链接附加字符串自动解析配置。

官方链接:

三版本说明

当前项目有三个版本,协同支持同一套配置解析与 RSA-OAEP(SHA-256) 加解密兼容规则:

  • npmtokengift:命令行工具(node scripts/tokengift.js 封装)。
  • PyPItokengift:提供同样参数与加密规则的 Python CLI。
  • GitHub Pages:网页版“兑换中心 + 发起邀请 + 领取礼物”(本仓库页面,按网址链接直接使用)。

3 个版本共享同一套配置解析与 RSA-OAEP(SHA-256) 加解密规则,因此命令行与页面互相兼容。

特性

  • 不依赖服务端数据库
  • 使用 React + TypeScript + Ant Design + AntV
  • 自动解析 URL 配置,提取:apiKey / baseUrl / 支持模型 / token 数量
  • 默认以 gpt-5.5-medium 作为结算基准
  • 本地持久化记录每组配置下的余额与兑换记录(localStorage)
  • 兑换后用图表和表格可视化余额变化

本地运行

npm install
npm run dev

构建

npm run build
npm run preview

GitHub Pages 部署

# 使用你自己的仓库名,示例:mappedinfo/tokengift
npm run build

前端工程已统一放在 web/ 目录下,默认构建产物为 web/dist,然后发布该目录到 GitHub Pages(可手动上传或使用 gh-pages/Workflow)。

自动发布(推荐)

本仓库已经新增了 GitHub Actions:

  • 文件:.github/workflows/deploy-gh-pages.yml
  • 触发:main 分支 push 或手动触发
  • 流程:npm ci -> npm run build -> 同步 web/dist 到 gh-pages
  • 默认会按仓库名 /tokengift/ 作为 base,如果你仓库名不同可改:
    • web/vite.config.tsGH_PAGES_BASE_PATH / VITE_BASE_PATH
    • workflow 里的 env: GH_PAGES_BASE_PATH: /你的仓库名/

URL 自动配置约定

页面启动时会自动读取如下来源:

  1. 查询参数 ?cfg=...?config=...
  2. 原始查询字符串(https://.../?<payload>
  3. hash 字符串(https://.../#<payload>

支持两种 payload

1) Base64/URL-safe Base64 编码 JSON

{
  "profileName": "team-a",
  "apiKey": "sk-xxxx",
  "baseUrl": "https://api.openai.com/v1",
  "models": [
    { "id": "gpt-5.5-medium", "rate": 1 },
    { "id": "gpt-4o", "rate": 1.15 }
  ],
  "tokenQuota": 50000,
  "initialBalances": {
    "gpt-5.5-medium": 30000,
    "gpt-4o": 10000
  }
}

例如拼接:

https://your-domain/#eyJwcm9maWxlTmFtZSI6InRlYW0tYSIsImFwaUtleSI6InNrLXh4Iiw... 

2) 简化短串

<apiKey>|<baseUrl>|<model1:rate,model2:rate>|<totalToken>|<model1:balance,model2:balance>

示例:

aaa|https://api.openai.com/v1|gpt-5.5-medium:1,gpt-4o:1.15|50000|gpt-5.5-medium:20000

也可以粘贴到页面中的「手动解析」输入框。

说明

  • 本项目不持久传输 API Key,解析行为发生在前端;但请注意 URL 上明文包含 API Key 会有安全风险,请仅用于测试与演示。

Issuer 发券模式(New API / One API)

如果希望把“指定额度后自动停止消耗”做成硬限制,不应把真实上游 API Key 直接交给 agent。推荐先在 New API / One API 中放入真实上游 Key,再由 tokengift 生成有限额、限模型、可过期的本地令牌并包装成礼物配置。

当前 issuer 第一版只在 npm CLI 中提供;Python CLI 继续保持 RSA 加解密兼容。完整实现说明见 Node Issuer 文档

快速创建 New API / 一展 API 有限额 key

# CLI 会自动读取本地 .env,也支持显式 export
export NEWAPI_BASE_URL="https://newapi.example.com"
export NEWAPI_USER_TOKEN="your-user-token"
export NEWAPI_USER_ID="1"

npm run tokengift -- issue \
  --provider newapi \
  --name agent-a \
  --quota 100000 \
  --models gpt-4o-mini,gpt-4o \
  --expires-at -1

一展 API 这类 New API 二次开发平台也可使用兼容变量名:

NEW_API_URL=https://vip.yi-zhan.top
NEW_API_TOKEN=your-user-token
NEW_API_USER_ID=293

默认输出可被页面解析的配置 JSON,包含有限额 apiKey、agent 使用的 baseUrl、允许模型、平台 token id 和额度信息。如果要直接加密给接收方,增加 --public keys/bob_public.pem;如果要生成领取链接,再增加 --link-base https://your-domain/

用量查询与撤销

export TOKENGIFT_API_KEY="sk-limited-xxx"

npm run tokengift -- usage --provider newapi

npm run tokengift -- revoke --provider newapi --token-id 123

usage 会优先请求标准 New API 的 /api/usage/token;如果平台是类似一展 API 的二次开发并使用 /v1/dashboard/billing/usage,会自动 fallback。

One API 兼容发券

export ONEAPI_BASE_URL="https://oneapi.example.com"
export ONEAPI_ACCESS_TOKEN="your-oneapi-access-token"

npm run tokengift -- issue \
  --provider oneapi \
  --name agent-a \
  --quota 100000 \
  --models gpt-4o-mini,gpt-4o \
  --subnet "192.168.1.0/24"

注意:这里的 quota 是 New API / One API 平台额度单位,通常会按平台的分组倍率、模型倍率、输入输出倍率折算,不等同于原始模型 token 数。额度耗尽后的硬停止由 New API / One API 执行,tokengift 只负责创建、包装、加密和分发有限额 key。

配套命令行工具(tokengift)

为了实现“赠予逻辑”中的密钥交换,项目增加了一个通用 CLI:tokengiftscripts/tokengift.js)。

用途:

  • 用对方公钥加密配置(礼物发起方)
  • 对方用自己的私钥解密配置(领取方)
  • 生成 RSA 公/私钥对

安装与运行

npm install
npm run tokengift -- --help

典型流程

  1. 生成公私钥(发送方或接收方):
npm run tokengift -- keygen --public keys/receiver_public.pem --private keys/receiver_private.pem
  1. 发送方用接收方公钥加密 JSON 配置:
npm run tokengift -- gift --public keys/receiver_public.pem --in token-config.json > encrypted.txt
  1. 接收方用自己的私钥解密:
npm run tokengift -- open --private keys/receiver_private.pem --in encrypted.txt

输出格式

  • 默认输出为 Base64URL(可直接贴到 cfg=... 参数中)
  • 为兼容更大体积内容,命令会按 RSA 分块加密,密文由多段 . 分隔组合

说明:该 CLI 使用 RSA + OAEP(SHA-256),属于经典的“公钥加密、私钥解密”模型,适合用于配置/小对象共享场景。更大对象可先压缩或签名再加密。

Python 版 tokengift(可发布到 PyPI)

在仓库根目录新增了 Python CLI,功能与 Node 版参数与行为对齐:

  • keygen:生成 public/private RSA PEM 密钥对(SPKI + PKCS8)
  • gift(alias encrypt):用公钥加密
  • open(alias decrypt):用私钥解密
  • issue / usage / revoke:同步支持 New API / 一展 API / One API 的有限额 key 发券、用量查询和撤销
  • 输出/输入使用 Base64URL,多段密文用 . 分隔

Python issuer 的完整说明见 Python Issuer 文档

打包与本地可执行

# 推荐使用 uv 管理本地环境
uv venv
uv pip install -e .[dev]
uv run tokengift --help
uv run python -m build
uv pip install .

发布到 PyPI

UV_PYTHON=3.11 ./scripts/release_py.sh

手动构建与上传(可选)

# 不使用脚本时,手动执行
UV_PYTHON=3.11 uv run --with build --with twine python -m build
UV_PYTHON=3.11 uv run --with build --with twine python -m twine upload dist/*

一键发布脚本

如果你仍想直接使用发布脚本,当前脚本会自动完成版本 bump + build + twine upload:

./scripts/release_py.sh
./scripts/release_py.sh patch
./scripts/release_py.sh minor
./scripts/release_py.sh major

说明:

  • 默认执行 patch 递增
  • 支持参数 patchminormajor
  • 自动读取 .env 中的:
    • TWINE_USERNAME=__token__
    • TWINE_PASSWORD=<你的 PyPI token>
  • 发布前会清理旧 dist/,再执行 python -m build
  • 发布后会把新版本写入 pyproject.toml

示例(与 Node 行为一致)

tokengift keygen --public keys/bob_public.pem --private keys/bob_private.pem

tokengift gift --public keys/bob_public.pem --in token-config.json > encrypted.txt

tokengift open --private keys/bob_private.pem --in encrypted.txt

Python issuer 示例

tokengift issue \
  --provider newapi \
  --name agent-a \
  --quota 100000 \
  --models gpt-4o-mini \
  --expires-at -1

export TOKENGIFT_API_KEY="sk-limited-xxx"
tokengift usage --provider newapi

tokengift revoke --provider newapi --token-id 123

小贴士:Node 版也使用同一套命令和分块 OAEP 规则,因此两端可互相加解密。

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

tokengift-0.1.8.tar.gz (13.0 kB view details)

Uploaded Source

Built Distribution

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

tokengift-0.1.8-py3-none-any.whl (13.6 kB view details)

Uploaded Python 3

File details

Details for the file tokengift-0.1.8.tar.gz.

File metadata

  • Download URL: tokengift-0.1.8.tar.gz
  • Upload date:
  • Size: 13.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for tokengift-0.1.8.tar.gz
Algorithm Hash digest
SHA256 e1e44d911032d97d86fef9782ed0d730562d116dbd8d22d9460beb0126f38a12
MD5 230392e4566bfe365ac28d5d5298ff53
BLAKE2b-256 8b096cd7ca4e869536678d85adea617dce2a33bddc0605f09a11368a03968ee4

See more details on using hashes here.

File details

Details for the file tokengift-0.1.8-py3-none-any.whl.

File metadata

  • Download URL: tokengift-0.1.8-py3-none-any.whl
  • Upload date:
  • Size: 13.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for tokengift-0.1.8-py3-none-any.whl
Algorithm Hash digest
SHA256 59f4738a0da48ae7b1f1a34944969da914e2e23059fc2fcf2381d20d60a2706c
MD5 5ead077bf5661619a8858d6b5d5a291b
BLAKE2b-256 f8a76057ad1a346bf92ec2f14474ad6faf5fea9cf1adc5a791192ddf5b02c3be

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