| Name | shadowpay JSON |
| Version |
1.0.0
JSON |
| download |
| home_page | None |
| Summary | Python SDK for ShadowPay - Privacy-preserving payments on Solana |
| upload_time | 2025-11-01 04:34:06 |
| maintainer | None |
| docs_url | None |
| author | None |
| requires_python | >=3.8 |
| license | MIT |
| keywords |
solana
payments
zk-proofs
blockchain
crypto
|
| VCS |
 |
| bugtrack_url |
|
| requirements |
No requirements were recorded.
|
| Travis-CI |
No Travis.
|
| coveralls test coverage |
No coveralls.
|
# ShadowPay Python SDK
[](https://badge.fury.io/py/shadowpay)
[](https://www.python.org/downloads/)
[](https://opensource.org/licenses/MIT)
**Production-ready Python SDK for ShadowPay** - Privacy-preserving automated payments on Solana using Zero-Knowledge proofs.
Perfect for AI/ML developers, data scientists, and automation engineers who need seamless payment integration.
## โจ Features
- ๐ค **Automated Payments** - No user confirmation needed after authorization
- ๐ **Privacy-Preserving** - Zero-knowledge proofs protect sensitive data
- โก **Async Support** - High-throughput concurrent payments
- ๐ฏ **Simple API** - Working example in 10 lines of code
- ๐ก๏ธ **Safe Spending Limits** - Per-transaction and daily limits
- ๐ **Pythonic** - Type hints, context managers, decorators
- ๐งช **Testing Tools** - Mock clients for easy unit testing
## ๐ Quick Start
### Installation
```bash
pip install shadowpay
```
### 10-Line Example
```python
from shadowpay import AutomatedPaymentBot
# Create bot
bot = AutomatedPaymentBot(
settler_url='https://shadow.radr.fun/shadowpay',
user_wallet='YOUR_WALLET_ADDRESS',
service_key='My Service'
)
# Make payment (automated - no user confirmation!)
tx_hash = bot.make_payment(
amount_sol=0.001,
resource='/api/service'
)
print(f"Payment settled: {tx_hash}")
```
## ๐ Prerequisites
### 1. Start the Prover Service
The SDK requires a Node.js prover service for ZK proof generation:
```bash
cd prover-service
npm install
npm start
```
The prover service will run on `http://localhost:3001`.
**Docker:**
```bash
cd prover-service
docker build -t shadowpay-prover .
docker run -d -p 3001:3001 shadowpay-prover
```
### 2. User Authorization
Before your bot can make payments, users must authorize it:
```python
from shadowpay import ShadowPayClient
client = ShadowPayClient()
# User authorizes your service (requires user signature)
client.authorize_spending(
user_wallet='USER_WALLET',
service_name='My Service',
max_amount_per_tx=0.01, # Max 0.01 SOL per payment
max_daily_spend=1.0, # Max 1 SOL per day
valid_days=365, # Valid for 1 year
user_signature='USER_SIGNATURE'
)
```
## ๐ก Usage Examples
### Basic Payment Bot
```python
from shadowpay import AutomatedPaymentBot
bot = AutomatedPaymentBot(
settler_url='https://shadow.radr.fun/shadowpay',
user_wallet='USER_WALLET',
service_key='ChatGPT Bot',
prover_url='http://localhost:3001'
)
# Check authorization
auth = bot.check_authorization()
print(f"Daily limit: {auth.max_daily_spend_sol} SOL")
print(f"Remaining: {auth.remaining_today_sol} SOL")
# Make payment
tx_hash = bot.make_payment(
amount_sol=0.001,
resource='/api/chat',
metadata={'message_id': '12345'}
)
```
### Async Batch Payments
```python
import asyncio
from shadowpay import AsyncAutomatedPaymentBot
async def main():
async with AsyncAutomatedPaymentBot(
settler_url='https://shadow.radr.fun/shadowpay',
user_wallet='USER_WALLET',
service_key='Batch Processor'
) as bot:
# Make 100 concurrent payments
tasks = [
bot.make_payment_async(0.0001, f'/api/item_{i}')
for i in range(100)
]
results = await asyncio.gather(*tasks)
print(f"Processed {len(results)} payments")
asyncio.run(main())
```
### Decorator Pattern
```python
from shadowpay import requires_payment, set_global_bot
# Set up bot once
bot = AutomatedPaymentBot(...)
set_global_bot(bot)
# Automatic payment before function execution
@requires_payment(amount_sol=0.001)
def expensive_api_call(data):
# Payment already settled!
return process_data(data)
result = expensive_api_call({"query": "..."})
```
### Error Handling
```python
from shadowpay import (
AutomatedPaymentBot,
DailyLimitExceededError,
InvalidAuthorizationError
)
bot = AutomatedPaymentBot(...)
try:
tx = bot.make_payment(0.001, '/api/service')
except InvalidAuthorizationError:
print("Not authorized! User needs to authorize service.")
except DailyLimitExceededError as e:
print(f"Daily limit exceeded. Spent: {e.spent}, Limit: {e.limit}")
```
## ๐ Examples
See the `examples/` directory for complete working examples:
- **[chatgpt_bot.py](examples/chatgpt_bot.py)** - ChatGPT billing bot
- **[data_api_bot.py](examples/data_api_bot.py)** - Premium data API with rate limiting
- **[async_batch_payments.py](examples/async_batch_payments.py)** - High-throughput async payments
- **[decorator_example.py](examples/decorator_example.py)** - Using the @requires_payment decorator
Run examples:
```bash
python examples/chatgpt_bot.py
python examples/data_api_bot.py
```
## ๐งช Testing
### Mock Client
```python
from shadowpay.testing import MockShadowPayClient
# Create mock client
client = MockShadowPayClient()
client.set_balance('wallet', 1.0) # 1 SOL
client.authorize_service('wallet', 'TestBot', max_daily=10.0)
# Make mock payments
tx = client.make_payment('wallet', 'TestBot', 0.001, '/test')
assert tx.startswith('mock_tx_')
# Verify spending
spent = client.get_spent_today('wallet', 'TestBot')
assert spent == 1000000 # lamports
```
## ๐๏ธ Architecture
```
Python App
โ
ShadowPayClient / AutomatedPaymentBot
โ
ProverClient โ Node.js Prover Service (snarkjs)
โ
ShadowPay Settler API
โ
Solana Blockchain
```
## ๐ง Configuration
### Environment Variables
```bash
SHADOWPAY_SETTLER_URL=https://shadow.radr.fun/shadowpay
SHADOWPAY_NETWORK=solana-mainnet
SHADOWPAY_USER_WALLET=YOUR_WALLET
SHADOWPAY_SERVICE_KEY=YOUR_SERVICE
```
### Configuration File
Create `shadowpay.toml`:
```toml
[shadowpay]
settler_url = "https://shadow.radr.fun/shadowpay"
network = "solana-mainnet"
user_wallet = "YOUR_WALLET"
service_key = "YOUR_SERVICE"
[limits]
max_per_transaction = 0.01
max_daily_spend = 1.0
retry_attempts = 3
timeout_seconds = 30
```
## ๐ API Reference
### ShadowPayClient
Main client for API interactions:
```python
client = ShadowPayClient(
settler_url='https://shadow.radr.fun/shadowpay',
network='solana-mainnet',
api_key=None,
timeout=30
)
# API Key Management
client.generate_api_key()
client.get_api_key_by_wallet(wallet)
client.rotate_api_key(current_key)
# Escrow
client.get_escrow_balance(wallet)
client.deposit_to_escrow(wallet, amount_sol, signature)
# Authorization
client.authorize_spending(...)
client.revoke_authorization(...)
client.list_authorizations(wallet)
# Payments
client.settle_payment(proof, amount, resource, metadata)
```
### AutomatedPaymentBot
Bot for making automated payments:
```python
bot = AutomatedPaymentBot(
settler_url='...',
user_wallet='...',
service_key='...',
prover_url='http://localhost:3001'
)
# Check authorization
auth = bot.check_authorization()
# Make payment
tx_hash = bot.make_payment(amount_sol, resource, metadata)
# Get spending info
spent = bot.get_spending_today()
remaining = bot.get_remaining_limit()
```
### AsyncAutomatedPaymentBot
Async version for concurrent payments:
```python
async with AsyncAutomatedPaymentBot(...) as bot:
# Single payment
tx = await bot.make_payment_async(amount_sol, resource)
# Batch payments
tx_hashes = await bot.make_batch_payments([
{'amount_sol': 0.001, 'resource': '/api/1'},
{'amount_sol': 0.002, 'resource': '/api/2'},
])
```
## ๐ ๏ธ Development
### Setup
```bash
git clone https://github.com/Lukey372/ShadowPay.git
cd ShadowPay/python-sdk
pip install -e ".[dev]"
```
### Run Tests
```bash
pytest
pytest --cov=shadowpay --cov-report=html
```
### Code Quality
```bash
black shadowpay/
ruff check shadowpay/
mypy shadowpay/
```
## ๐ Security
- โ
Zero-knowledge proofs protect transaction privacy
- โ
Daily spending limits prevent abuse
- โ
Per-transaction limits for safety
- โ
User authorization required before any payment
- โ
Authorizations can be revoked anytime
## ๐ Performance
- **Sync client**: ~100ms overhead per payment (excluding proof generation)
- **Async client**: 50-100+ concurrent payments per second
- **Proof generation**: 1-30 seconds (depends on circuit complexity)
## ๐ค Contributing
Contributions welcome! Please read our [Contributing Guide](CONTRIBUTING.md).
## ๐ License
MIT License - see [LICENSE](LICENSE) file for details.
## ๐ Links
- **API Documentation**: https://editor.scalar.com/@radr/apis/shadowpay-api/latest
- **GitHub**: https://github.com/Lukey372/ShadowPay
- **Test Page**: https://shadow.radr.fun/shadowpay/test-automated-payment.html
## ๐ฌ Support
- GitHub Issues: https://github.com/Lukey372/ShadowPay/issues
- Email: contact@radr.fun
## ๐ฏ Use Cases
Perfect for:
- ๐ค AI API billing (ChatGPT, Anthropic, OpenAI proxies)
- ๐ Data science APIs (price feeds, analytics, ML models)
- ๐ Automation scripts and bots
- ๐ IoT device payments
- ๐ณ Subscription services
- ๐ค Trading bot marketplaces
## โก Quick Links
- [Examples](examples/) - Working code examples
- [API Reference](docs/api_reference.md) - Complete API documentation
- [Prover Service](prover-service/) - ZK proof generation service
- [Testing Guide](docs/testing.md) - How to test your integration
---
**Made with โค๏ธ by [RADR](https://radr.fun)**
**Let's make payments private and automated! ๐**
Raw data
{
"_id": null,
"home_page": null,
"name": "shadowpay",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "solana, payments, zk-proofs, blockchain, crypto",
"author": null,
"author_email": "RADR <contact@radr.fun>",
"download_url": "https://files.pythonhosted.org/packages/f7/e4/94de35e5f3ae38e865a532d42436711c1853c3b7d1b62b5d03192b2447b5/shadowpay-1.0.0.tar.gz",
"platform": null,
"description": "# ShadowPay Python SDK\n\n[](https://badge.fury.io/py/shadowpay)\n[](https://www.python.org/downloads/)\n[](https://opensource.org/licenses/MIT)\n\n**Production-ready Python SDK for ShadowPay** - Privacy-preserving automated payments on Solana using Zero-Knowledge proofs.\n\nPerfect for AI/ML developers, data scientists, and automation engineers who need seamless payment integration.\n\n## \u2728 Features\n\n- \ud83e\udd16 **Automated Payments** - No user confirmation needed after authorization\n- \ud83d\udd12 **Privacy-Preserving** - Zero-knowledge proofs protect sensitive data\n- \u26a1 **Async Support** - High-throughput concurrent payments\n- \ud83c\udfaf **Simple API** - Working example in 10 lines of code\n- \ud83d\udee1\ufe0f **Safe Spending Limits** - Per-transaction and daily limits\n- \ud83d\udc0d **Pythonic** - Type hints, context managers, decorators\n- \ud83e\uddea **Testing Tools** - Mock clients for easy unit testing\n\n## \ud83d\ude80 Quick Start\n\n### Installation\n\n```bash\npip install shadowpay\n```\n\n### 10-Line Example\n\n```python\nfrom shadowpay import AutomatedPaymentBot\n\n# Create bot\nbot = AutomatedPaymentBot(\n settler_url='https://shadow.radr.fun/shadowpay',\n user_wallet='YOUR_WALLET_ADDRESS',\n service_key='My Service'\n)\n\n# Make payment (automated - no user confirmation!)\ntx_hash = bot.make_payment(\n amount_sol=0.001,\n resource='/api/service'\n)\n\nprint(f\"Payment settled: {tx_hash}\")\n```\n\n## \ud83d\udccb Prerequisites\n\n### 1. Start the Prover Service\n\nThe SDK requires a Node.js prover service for ZK proof generation:\n\n```bash\ncd prover-service\nnpm install\nnpm start\n```\n\nThe prover service will run on `http://localhost:3001`.\n\n**Docker:**\n```bash\ncd prover-service\ndocker build -t shadowpay-prover .\ndocker run -d -p 3001:3001 shadowpay-prover\n```\n\n### 2. User Authorization\n\nBefore your bot can make payments, users must authorize it:\n\n```python\nfrom shadowpay import ShadowPayClient\n\nclient = ShadowPayClient()\n\n# User authorizes your service (requires user signature)\nclient.authorize_spending(\n user_wallet='USER_WALLET',\n service_name='My Service',\n max_amount_per_tx=0.01, # Max 0.01 SOL per payment\n max_daily_spend=1.0, # Max 1 SOL per day\n valid_days=365, # Valid for 1 year\n user_signature='USER_SIGNATURE'\n)\n```\n\n## \ud83d\udca1 Usage Examples\n\n### Basic Payment Bot\n\n```python\nfrom shadowpay import AutomatedPaymentBot\n\nbot = AutomatedPaymentBot(\n settler_url='https://shadow.radr.fun/shadowpay',\n user_wallet='USER_WALLET',\n service_key='ChatGPT Bot',\n prover_url='http://localhost:3001'\n)\n\n# Check authorization\nauth = bot.check_authorization()\nprint(f\"Daily limit: {auth.max_daily_spend_sol} SOL\")\nprint(f\"Remaining: {auth.remaining_today_sol} SOL\")\n\n# Make payment\ntx_hash = bot.make_payment(\n amount_sol=0.001,\n resource='/api/chat',\n metadata={'message_id': '12345'}\n)\n```\n\n### Async Batch Payments\n\n```python\nimport asyncio\nfrom shadowpay import AsyncAutomatedPaymentBot\n\nasync def main():\n async with AsyncAutomatedPaymentBot(\n settler_url='https://shadow.radr.fun/shadowpay',\n user_wallet='USER_WALLET',\n service_key='Batch Processor'\n ) as bot:\n # Make 100 concurrent payments\n tasks = [\n bot.make_payment_async(0.0001, f'/api/item_{i}')\n for i in range(100)\n ]\n \n results = await asyncio.gather(*tasks)\n print(f\"Processed {len(results)} payments\")\n\nasyncio.run(main())\n```\n\n### Decorator Pattern\n\n```python\nfrom shadowpay import requires_payment, set_global_bot\n\n# Set up bot once\nbot = AutomatedPaymentBot(...)\nset_global_bot(bot)\n\n# Automatic payment before function execution\n@requires_payment(amount_sol=0.001)\ndef expensive_api_call(data):\n # Payment already settled!\n return process_data(data)\n\nresult = expensive_api_call({\"query\": \"...\"})\n```\n\n### Error Handling\n\n```python\nfrom shadowpay import (\n AutomatedPaymentBot,\n DailyLimitExceededError,\n InvalidAuthorizationError\n)\n\nbot = AutomatedPaymentBot(...)\n\ntry:\n tx = bot.make_payment(0.001, '/api/service')\nexcept InvalidAuthorizationError:\n print(\"Not authorized! User needs to authorize service.\")\nexcept DailyLimitExceededError as e:\n print(f\"Daily limit exceeded. Spent: {e.spent}, Limit: {e.limit}\")\n```\n\n## \ud83d\udcda Examples\n\nSee the `examples/` directory for complete working examples:\n\n- **[chatgpt_bot.py](examples/chatgpt_bot.py)** - ChatGPT billing bot\n- **[data_api_bot.py](examples/data_api_bot.py)** - Premium data API with rate limiting\n- **[async_batch_payments.py](examples/async_batch_payments.py)** - High-throughput async payments\n- **[decorator_example.py](examples/decorator_example.py)** - Using the @requires_payment decorator\n\nRun examples:\n```bash\npython examples/chatgpt_bot.py\npython examples/data_api_bot.py\n```\n\n## \ud83e\uddea Testing\n\n### Mock Client\n\n```python\nfrom shadowpay.testing import MockShadowPayClient\n\n# Create mock client\nclient = MockShadowPayClient()\nclient.set_balance('wallet', 1.0) # 1 SOL\nclient.authorize_service('wallet', 'TestBot', max_daily=10.0)\n\n# Make mock payments\ntx = client.make_payment('wallet', 'TestBot', 0.001, '/test')\nassert tx.startswith('mock_tx_')\n\n# Verify spending\nspent = client.get_spent_today('wallet', 'TestBot')\nassert spent == 1000000 # lamports\n```\n\n## \ud83c\udfd7\ufe0f Architecture\n\n```\nPython App\n \u2193\nShadowPayClient / AutomatedPaymentBot\n \u2193\nProverClient \u2192 Node.js Prover Service (snarkjs)\n \u2193\nShadowPay Settler API\n \u2193\nSolana Blockchain\n```\n\n## \ud83d\udd27 Configuration\n\n### Environment Variables\n\n```bash\nSHADOWPAY_SETTLER_URL=https://shadow.radr.fun/shadowpay\nSHADOWPAY_NETWORK=solana-mainnet\nSHADOWPAY_USER_WALLET=YOUR_WALLET\nSHADOWPAY_SERVICE_KEY=YOUR_SERVICE\n```\n\n### Configuration File\n\nCreate `shadowpay.toml`:\n\n```toml\n[shadowpay]\nsettler_url = \"https://shadow.radr.fun/shadowpay\"\nnetwork = \"solana-mainnet\"\nuser_wallet = \"YOUR_WALLET\"\nservice_key = \"YOUR_SERVICE\"\n\n[limits]\nmax_per_transaction = 0.01\nmax_daily_spend = 1.0\nretry_attempts = 3\ntimeout_seconds = 30\n```\n\n## \ud83d\udcd6 API Reference\n\n### ShadowPayClient\n\nMain client for API interactions:\n\n```python\nclient = ShadowPayClient(\n settler_url='https://shadow.radr.fun/shadowpay',\n network='solana-mainnet',\n api_key=None,\n timeout=30\n)\n\n# API Key Management\nclient.generate_api_key()\nclient.get_api_key_by_wallet(wallet)\nclient.rotate_api_key(current_key)\n\n# Escrow\nclient.get_escrow_balance(wallet)\nclient.deposit_to_escrow(wallet, amount_sol, signature)\n\n# Authorization\nclient.authorize_spending(...)\nclient.revoke_authorization(...)\nclient.list_authorizations(wallet)\n\n# Payments\nclient.settle_payment(proof, amount, resource, metadata)\n```\n\n### AutomatedPaymentBot\n\nBot for making automated payments:\n\n```python\nbot = AutomatedPaymentBot(\n settler_url='...',\n user_wallet='...',\n service_key='...',\n prover_url='http://localhost:3001'\n)\n\n# Check authorization\nauth = bot.check_authorization()\n\n# Make payment\ntx_hash = bot.make_payment(amount_sol, resource, metadata)\n\n# Get spending info\nspent = bot.get_spending_today()\nremaining = bot.get_remaining_limit()\n```\n\n### AsyncAutomatedPaymentBot\n\nAsync version for concurrent payments:\n\n```python\nasync with AsyncAutomatedPaymentBot(...) as bot:\n # Single payment\n tx = await bot.make_payment_async(amount_sol, resource)\n \n # Batch payments\n tx_hashes = await bot.make_batch_payments([\n {'amount_sol': 0.001, 'resource': '/api/1'},\n {'amount_sol': 0.002, 'resource': '/api/2'},\n ])\n```\n\n## \ud83d\udee0\ufe0f Development\n\n### Setup\n\n```bash\ngit clone https://github.com/Lukey372/ShadowPay.git\ncd ShadowPay/python-sdk\npip install -e \".[dev]\"\n```\n\n### Run Tests\n\n```bash\npytest\npytest --cov=shadowpay --cov-report=html\n```\n\n### Code Quality\n\n```bash\nblack shadowpay/\nruff check shadowpay/\nmypy shadowpay/\n```\n\n## \ud83d\udd12 Security\n\n- \u2705 Zero-knowledge proofs protect transaction privacy\n- \u2705 Daily spending limits prevent abuse\n- \u2705 Per-transaction limits for safety\n- \u2705 User authorization required before any payment\n- \u2705 Authorizations can be revoked anytime\n\n## \ud83d\udcca Performance\n\n- **Sync client**: ~100ms overhead per payment (excluding proof generation)\n- **Async client**: 50-100+ concurrent payments per second\n- **Proof generation**: 1-30 seconds (depends on circuit complexity)\n\n## \ud83e\udd1d Contributing\n\nContributions welcome! Please read our [Contributing Guide](CONTRIBUTING.md).\n\n## \ud83d\udcc4 License\n\nMIT License - see [LICENSE](LICENSE) file for details.\n\n## \ud83d\udd17 Links\n\n- **API Documentation**: https://editor.scalar.com/@radr/apis/shadowpay-api/latest\n- **GitHub**: https://github.com/Lukey372/ShadowPay\n- **Test Page**: https://shadow.radr.fun/shadowpay/test-automated-payment.html\n\n## \ud83d\udcac Support\n\n- GitHub Issues: https://github.com/Lukey372/ShadowPay/issues\n- Email: contact@radr.fun\n\n## \ud83c\udfaf Use Cases\n\nPerfect for:\n- \ud83e\udd16 AI API billing (ChatGPT, Anthropic, OpenAI proxies)\n- \ud83d\udcca Data science APIs (price feeds, analytics, ML models)\n- \ud83d\udd04 Automation scripts and bots\n- \ud83c\udf10 IoT device payments\n- \ud83d\udcb3 Subscription services\n- \ud83e\udd1d Trading bot marketplaces\n\n## \u26a1 Quick Links\n\n- [Examples](examples/) - Working code examples\n- [API Reference](docs/api_reference.md) - Complete API documentation\n- [Prover Service](prover-service/) - ZK proof generation service\n- [Testing Guide](docs/testing.md) - How to test your integration\n\n---\n\n**Made with \u2764\ufe0f by [RADR](https://radr.fun)**\n\n**Let's make payments private and automated! \ud83d\ude80**\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Python SDK for ShadowPay - Privacy-preserving payments on Solana",
"version": "1.0.0",
"project_urls": {
"Bug Tracker": "https://github.com/Lukey372/ShadowPay/issues",
"Documentation": "https://shadow.radr.fun/shadowpay",
"Homepage": "https://github.com/Lukey372/ShadowPay",
"Repository": "https://github.com/Lukey372/ShadowPay"
},
"split_keywords": [
"solana",
" payments",
" zk-proofs",
" blockchain",
" crypto"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "23494003557f7df1a0b3a5228454cdd109d6d00a743c980d1c58577e43c25fea",
"md5": "f8e1465c59814a42a3a7676a3876a4c3",
"sha256": "9898ccd78cc27aa7a5fa7ff5d7d90db41a9dfd120c90fe01cd811caae30d4604"
},
"downloads": -1,
"filename": "shadowpay-1.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "f8e1465c59814a42a3a7676a3876a4c3",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 25291,
"upload_time": "2025-11-01T04:34:05",
"upload_time_iso_8601": "2025-11-01T04:34:05.388515Z",
"url": "https://files.pythonhosted.org/packages/23/49/4003557f7df1a0b3a5228454cdd109d6d00a743c980d1c58577e43c25fea/shadowpay-1.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f7e494de35e5f3ae38e865a532d42436711c1853c3b7d1b62b5d03192b2447b5",
"md5": "1f94928e3da6fcf15d4a261b2030f411",
"sha256": "d72d6db35fd030714405c2696c048bce29cbf616398d59d5854731b3eae4b562"
},
"downloads": -1,
"filename": "shadowpay-1.0.0.tar.gz",
"has_sig": false,
"md5_digest": "1f94928e3da6fcf15d4a261b2030f411",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 24138,
"upload_time": "2025-11-01T04:34:06",
"upload_time_iso_8601": "2025-11-01T04:34:06.814016Z",
"url": "https://files.pythonhosted.org/packages/f7/e4/94de35e5f3ae38e865a532d42436711c1853c3b7d1b62b5d03192b2447b5/shadowpay-1.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-11-01 04:34:06",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "Lukey372",
"github_project": "ShadowPay",
"github_not_found": true,
"lcname": "shadowpay"
}