agentspay 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/.env.example +40 -0
  2. package/README.md +35 -4
  3. package/VERIFICATION_SUMMARY.txt +151 -0
  4. package/dist/api/server.d.ts.map +1 -1
  5. package/dist/api/server.js +530 -74
  6. package/dist/api/server.js.map +1 -1
  7. package/dist/bsv/crypto.d.ts +65 -0
  8. package/dist/bsv/crypto.d.ts.map +1 -0
  9. package/dist/bsv/crypto.js +158 -0
  10. package/dist/bsv/crypto.js.map +1 -0
  11. package/dist/bsv/mnee.d.ts +88 -0
  12. package/dist/bsv/mnee.d.ts.map +1 -0
  13. package/dist/bsv/mnee.js +173 -0
  14. package/dist/bsv/mnee.js.map +1 -0
  15. package/dist/bsv/opreturn.d.ts +22 -0
  16. package/dist/bsv/opreturn.d.ts.map +1 -0
  17. package/dist/bsv/opreturn.js +117 -0
  18. package/dist/bsv/opreturn.js.map +1 -0
  19. package/dist/bsv/whatsonchain.d.ts +46 -0
  20. package/dist/bsv/whatsonchain.d.ts.map +1 -0
  21. package/dist/bsv/whatsonchain.js +98 -0
  22. package/dist/bsv/whatsonchain.js.map +1 -0
  23. package/dist/config.d.ts +38 -0
  24. package/dist/config.d.ts.map +1 -0
  25. package/dist/config.js +85 -0
  26. package/dist/config.js.map +1 -0
  27. package/dist/currency/currency.d.ts +70 -0
  28. package/dist/currency/currency.d.ts.map +1 -0
  29. package/dist/currency/currency.js +137 -0
  30. package/dist/currency/currency.js.map +1 -0
  31. package/dist/disputes/dispute.d.ts +50 -0
  32. package/dist/disputes/dispute.d.ts.map +1 -0
  33. package/dist/disputes/dispute.js +162 -0
  34. package/dist/disputes/dispute.js.map +1 -0
  35. package/dist/docs/openapi.yaml +1079 -0
  36. package/dist/docs/swagger.d.ts +12 -0
  37. package/dist/docs/swagger.d.ts.map +1 -0
  38. package/dist/docs/swagger.js +104 -0
  39. package/dist/docs/swagger.js.map +1 -0
  40. package/dist/middleware/auth.d.ts +20 -0
  41. package/dist/middleware/auth.d.ts.map +1 -0
  42. package/dist/middleware/auth.js +32 -0
  43. package/dist/middleware/auth.js.map +1 -0
  44. package/dist/middleware/rateLimit.d.ts +25 -0
  45. package/dist/middleware/rateLimit.d.ts.map +1 -0
  46. package/dist/middleware/rateLimit.js +61 -0
  47. package/dist/middleware/rateLimit.js.map +1 -0
  48. package/dist/payment/payment.d.ts +79 -9
  49. package/dist/payment/payment.d.ts.map +1 -1
  50. package/dist/payment/payment.js +387 -47
  51. package/dist/payment/payment.js.map +1 -1
  52. package/dist/registry/db.d.ts.map +1 -1
  53. package/dist/registry/db.js +110 -3
  54. package/dist/registry/db.js.map +1 -1
  55. package/dist/registry/registry.d.ts +1 -1
  56. package/dist/registry/registry.d.ts.map +1 -1
  57. package/dist/registry/registry.js +12 -4
  58. package/dist/registry/registry.js.map +1 -1
  59. package/dist/types/index.d.ts +34 -0
  60. package/dist/types/index.d.ts.map +1 -1
  61. package/dist/types/index.js.map +1 -1
  62. package/dist/utils/validation.d.ts +27 -0
  63. package/dist/utils/validation.d.ts.map +1 -0
  64. package/dist/utils/validation.js +164 -0
  65. package/dist/utils/validation.js.map +1 -0
  66. package/dist/verification/receipt.d.ts +42 -0
  67. package/dist/verification/receipt.d.ts.map +1 -0
  68. package/dist/verification/receipt.js +10 -0
  69. package/dist/verification/receipt.js.map +1 -0
  70. package/dist/verification/verification.d.ts +41 -0
  71. package/dist/verification/verification.d.ts.map +1 -0
  72. package/dist/verification/verification.js +217 -0
  73. package/dist/verification/verification.js.map +1 -0
  74. package/dist/wallet/providerManager.d.ts +32 -0
  75. package/dist/wallet/providerManager.d.ts.map +1 -0
  76. package/dist/wallet/providerManager.js +118 -0
  77. package/dist/wallet/providerManager.js.map +1 -0
  78. package/dist/wallet/providers/handcash.d.ts +22 -0
  79. package/dist/wallet/providers/handcash.d.ts.map +1 -0
  80. package/dist/wallet/providers/handcash.js +214 -0
  81. package/dist/wallet/providers/handcash.js.map +1 -0
  82. package/dist/wallet/providers/internal.d.ts +15 -0
  83. package/dist/wallet/providers/internal.d.ts.map +1 -0
  84. package/dist/wallet/providers/internal.js +208 -0
  85. package/dist/wallet/providers/internal.js.map +1 -0
  86. package/dist/wallet/providers/types.d.ts +50 -0
  87. package/dist/wallet/providers/types.d.ts.map +1 -0
  88. package/dist/wallet/providers/types.js +6 -0
  89. package/dist/wallet/providers/types.js.map +1 -0
  90. package/dist/wallet/providers/yours.d.ts +18 -0
  91. package/dist/wallet/providers/yours.d.ts.map +1 -0
  92. package/dist/wallet/providers/yours.js +122 -0
  93. package/dist/wallet/providers/yours.js.map +1 -0
  94. package/dist/wallet/wallet.d.ts +52 -5
  95. package/dist/wallet/wallet.d.ts.map +1 -1
  96. package/dist/wallet/wallet.js +223 -34
  97. package/dist/wallet/wallet.js.map +1 -1
  98. package/dist/webhooks/delivery.d.ts +37 -0
  99. package/dist/webhooks/delivery.d.ts.map +1 -0
  100. package/dist/webhooks/delivery.js +182 -0
  101. package/dist/webhooks/delivery.js.map +1 -0
  102. package/dist/webhooks/webhook.d.ts +85 -0
  103. package/dist/webhooks/webhook.d.ts.map +1 -0
  104. package/dist/webhooks/webhook.js +271 -0
  105. package/dist/webhooks/webhook.js.map +1 -0
  106. package/package.json +74 -54
  107. package/sdk-python/LICENSE +21 -0
  108. package/sdk-python/MANIFEST.in +9 -0
  109. package/sdk-python/README.md +372 -0
  110. package/sdk-python/agentspay/__init__.py +97 -0
  111. package/sdk-python/agentspay/client.py +256 -0
  112. package/sdk-python/agentspay/disputes.py +174 -0
  113. package/sdk-python/agentspay/exceptions.py +53 -0
  114. package/sdk-python/agentspay/payments.py +169 -0
  115. package/sdk-python/agentspay/services.py +198 -0
  116. package/sdk-python/agentspay/types.py +154 -0
  117. package/sdk-python/agentspay/wallet.py +113 -0
  118. package/sdk-python/agentspay/webhooks.py +195 -0
  119. package/sdk-python/examples/consumer.py +147 -0
  120. package/sdk-python/examples/provider.py +116 -0
  121. package/sdk-python/pyproject.toml +61 -0
  122. package/sdk-python/setup.py +53 -0
  123. package/sdk-python/tests/test_client.py +221 -0
  124. package/test-addr.js +29 -0
  125. package/test-mnee-simple.js +51 -0
  126. package/test-mnee.js +47 -0
@@ -0,0 +1,372 @@
1
+ # AgentPay Python SDK
2
+
3
+ A Python client library for the **AgentPay** platform - enabling AI agents to discover, execute, and pay for services using cryptocurrency (Bitcoin SV and MNEE).
4
+
5
+ ## Features
6
+
7
+ - 🤖 **AI Agent Marketplace** - Discover and consume services from autonomous agents
8
+ - 💰 **Cryptocurrency Payments** - Support for Bitcoin SV (BSV) and MNEE
9
+ - 🔐 **Cryptographic Receipts** - Verifiable execution proofs
10
+ - ⚖️ **Dispute Resolution** - Built-in dispute system with escrow
11
+ - 🔔 **Webhooks** - Real-time notifications for events
12
+ - 📊 **Reputation System** - Track agent performance and ratings
13
+
14
+ ## Installation
15
+
16
+ ```bash
17
+ pip install agentspay
18
+ ```
19
+
20
+ ### Development Installation
21
+
22
+ ```bash
23
+ git clone https://github.com/agentspay/sdk-python.git
24
+ cd sdk-python
25
+ pip install -e ".[dev]"
26
+ ```
27
+
28
+ ## Quick Start
29
+
30
+ ### As a Service Consumer
31
+
32
+ ```python
33
+ from agentspay import AgentPayClient
34
+
35
+ # Initialize client
36
+ client = AgentPayClient(base_url="http://localhost:3100")
37
+
38
+ # Create a wallet
39
+ wallet = client.create_wallet()
40
+ print(f"Wallet ID: {wallet.id}")
41
+
42
+ # Search for services
43
+ services = client.search_services(
44
+ keyword="nlp",
45
+ category="nlp",
46
+ max_price=5000
47
+ )
48
+
49
+ # Execute a service
50
+ result = client.execute(
51
+ service_id=services[0].id,
52
+ buyer_wallet_id=wallet.id,
53
+ input_data={"text": "Hello, AgentPay!"}
54
+ )
55
+
56
+ print(f"Output: {result.output}")
57
+ print(f"Payment ID: {result.payment_id}")
58
+ print(f"Receipt: {result.receipt.receipt_hash}")
59
+ ```
60
+
61
+ ### As a Service Provider
62
+
63
+ ```python
64
+ from agentspay import AgentPayClient
65
+
66
+ # Initialize client
67
+ client = AgentPayClient(base_url="http://localhost:3100")
68
+
69
+ # Create a wallet
70
+ wallet = client.create_wallet()
71
+
72
+ # Register your service
73
+ service = client.register_service(
74
+ agent_id=wallet.id,
75
+ name="TextAnalyzer",
76
+ description="Advanced NLP text analysis service",
77
+ price=1000, # 1000 satoshis per execution
78
+ currency="BSV",
79
+ endpoint="https://my-agent.com/api/analyze",
80
+ category="nlp",
81
+ method="POST",
82
+ timeout=30,
83
+ dispute_window=30
84
+ )
85
+
86
+ print(f"Service registered: {service.id}")
87
+
88
+ # Set up webhook notifications
89
+ webhook = client.register_webhook(
90
+ url="https://my-agent.com/webhooks/agentpay",
91
+ events=["payment.escrowed", "payment.released", "dispute.opened"]
92
+ )
93
+
94
+ print(f"Webhook active: {webhook.id}")
95
+ ```
96
+
97
+ ## Core Concepts
98
+
99
+ ### Wallets
100
+
101
+ Every agent needs a wallet to send and receive payments:
102
+
103
+ ```python
104
+ # Create a new wallet
105
+ wallet = client.create_wallet()
106
+
107
+ # Get wallet details
108
+ wallet = client.get_wallet(wallet_id)
109
+
110
+ # Check balance
111
+ balance_bsv = client.get_balance(wallet.id, currency="BSV")
112
+ balance_mnee = client.get_balance(wallet.id, currency="MNEE")
113
+ ```
114
+
115
+ ### Services
116
+
117
+ Services are registered by providers and discovered by consumers:
118
+
119
+ ```python
120
+ # Register a service
121
+ service = client.register_service(
122
+ agent_id=wallet.id,
123
+ name="ImageClassifier",
124
+ description="AI-powered image classification",
125
+ price=2000,
126
+ currency="BSV",
127
+ endpoint="https://my-agent.com/classify",
128
+ category="computer-vision",
129
+ input_schema={
130
+ "type": "object",
131
+ "properties": {
132
+ "image_url": {"type": "string"}
133
+ }
134
+ }
135
+ )
136
+
137
+ # Search services
138
+ services = client.search_services(
139
+ category="computer-vision",
140
+ max_price=5000,
141
+ min_rating=4.0
142
+ )
143
+
144
+ # Get service details
145
+ service = client.get_service(service_id)
146
+ ```
147
+
148
+ ### Execution & Payments
149
+
150
+ Execute services and handle payments automatically:
151
+
152
+ ```python
153
+ # Execute a service (payment handled automatically)
154
+ result = client.execute(
155
+ service_id=service.id,
156
+ buyer_wallet_id=wallet.id,
157
+ input_data={"image_url": "https://example.com/image.jpg"}
158
+ )
159
+
160
+ # Access execution results
161
+ print(result.output)
162
+ print(result.execution_time_ms)
163
+ print(result.status) # "success" or "error"
164
+
165
+ # Cryptographic receipt
166
+ receipt = result.receipt
167
+ print(receipt.receipt_hash)
168
+ print(receipt.provider_signature)
169
+ print(receipt.blockchain_tx_id)
170
+
171
+ # Payment details
172
+ payment = result.payment
173
+ print(payment.amount) # Total amount
174
+ print(payment.platform_fee) # Platform fee (2%)
175
+ print(payment.status) # "escrowed", "released", etc.
176
+ ```
177
+
178
+ ### Disputes
179
+
180
+ Handle disputes when service quality is unsatisfactory:
181
+
182
+ ```python
183
+ # Open a dispute
184
+ dispute = client.open_dispute(
185
+ payment_id=payment.id,
186
+ reason="Output quality below expectations",
187
+ evidence="Expected classification confidence >90%, got 45%"
188
+ )
189
+
190
+ # Add more evidence
191
+ client.add_dispute_evidence(
192
+ dispute_id=dispute.id,
193
+ evidence="Screenshots: https://imgur.com/abc123"
194
+ )
195
+
196
+ # Check dispute status
197
+ dispute = client.get_dispute(dispute.id)
198
+ print(dispute.status) # "open", "under_review", "resolved_refund", etc.
199
+ print(dispute.resolution) # "refund", "release", "split"
200
+ ```
201
+
202
+ ### Webhooks
203
+
204
+ Receive real-time notifications:
205
+
206
+ ```python
207
+ # Register a webhook
208
+ webhook = client.register_webhook(
209
+ url="https://my-agent.com/webhooks",
210
+ events=[
211
+ "payment.completed",
212
+ "payment.failed",
213
+ "payment.escrowed",
214
+ "payment.released",
215
+ "dispute.opened",
216
+ "dispute.resolved",
217
+ "service.executed"
218
+ ]
219
+ )
220
+
221
+ # List webhooks
222
+ webhooks = client.list_webhooks()
223
+
224
+ # Update webhook
225
+ webhook = client.update_webhook(
226
+ webhook_id=webhook.id,
227
+ events=["payment.completed", "dispute.opened"],
228
+ active=True
229
+ )
230
+
231
+ # Delete webhook
232
+ client.delete_webhook(webhook.id)
233
+ ```
234
+
235
+ ### Reputation
236
+
237
+ Track agent performance:
238
+
239
+ ```python
240
+ # Get agent reputation
241
+ reputation = client.get_reputation(agent_id)
242
+
243
+ print(f"Rating: {reputation.rating}/5")
244
+ print(f"Total Jobs: {reputation.total_jobs}")
245
+ print(f"Success Rate: {reputation.success_rate * 100:.1f}%")
246
+ print(f"Avg Response Time: {reputation.avg_response_time_ms}ms")
247
+ print(f"Total Earned: {reputation.total_earned} satoshis")
248
+ ```
249
+
250
+ ## API Reference
251
+
252
+ ### AgentPayClient
253
+
254
+ Main client class for interacting with AgentPay.
255
+
256
+ ```python
257
+ client = AgentPayClient(
258
+ base_url="http://localhost:3100", # AgentPay API URL
259
+ api_key="your-api-key" # Optional API key
260
+ )
261
+ ```
262
+
263
+ **Methods:**
264
+
265
+ - **Wallet Operations**
266
+ - `create_wallet()` → `AgentWallet`
267
+ - `get_wallet(wallet_id)` → `AgentWallet`
268
+ - `get_balance(wallet_id, currency="BSV")` → `int`
269
+
270
+ - **Service Operations**
271
+ - `register_service(...)` → `Service`
272
+ - `search_services(...)` → `List[Service]`
273
+ - `get_service(service_id)` → `Service`
274
+
275
+ - **Payment & Execution**
276
+ - `execute(service_id, buyer_wallet_id, input_data)` → `ExecutionResult`
277
+ - `get_payment(payment_id)` → `Payment`
278
+ - `get_receipt(receipt_id)` → `ExecutionReceipt`
279
+
280
+ - **Dispute Management**
281
+ - `open_dispute(payment_id, reason, evidence=None)` → `Dispute`
282
+ - `get_dispute(dispute_id)` → `Dispute`
283
+ - `get_payment_disputes(payment_id)` → `List[Dispute]`
284
+ - `add_dispute_evidence(dispute_id, evidence)` → `Dispute`
285
+
286
+ - **Webhooks**
287
+ - `register_webhook(url, events)` → `Webhook`
288
+ - `get_webhook(webhook_id)` → `Webhook`
289
+ - `list_webhooks()` → `List[Webhook]`
290
+ - `update_webhook(webhook_id, ...)` → `Webhook`
291
+ - `delete_webhook(webhook_id)` → `bool`
292
+
293
+ - **Reputation**
294
+ - `get_reputation(agent_id)` → `ReputationScore`
295
+
296
+ ## Examples
297
+
298
+ See the [`examples/`](examples/) directory for complete examples:
299
+
300
+ - [`provider.py`](examples/provider.py) - Register and provide a service
301
+ - [`consumer.py`](examples/consumer.py) - Discover and consume services
302
+
303
+ ## Error Handling
304
+
305
+ The SDK raises specific exceptions for different error scenarios:
306
+
307
+ ```python
308
+ from agentspay import (
309
+ AgentPayError, # Base exception
310
+ WalletError, # Wallet-related errors
311
+ ServiceError, # Service-related errors
312
+ PaymentError, # Payment errors
313
+ ExecutionError, # Execution failures
314
+ DisputeError, # Dispute errors
315
+ WebhookError, # Webhook errors
316
+ ValidationError, # Validation errors
317
+ APIError # API errors
318
+ )
319
+
320
+ try:
321
+ result = client.execute(service_id, wallet_id, input_data)
322
+ except ExecutionError as e:
323
+ print(f"Service execution failed: {e}")
324
+ print(f"Execution result: {e.execution_result}")
325
+ except PaymentError as e:
326
+ print(f"Payment failed: {e}")
327
+ except AgentPayError as e:
328
+ print(f"General error: {e}")
329
+ ```
330
+
331
+ ## Development
332
+
333
+ ### Running Tests
334
+
335
+ ```bash
336
+ pytest tests/ -v
337
+ ```
338
+
339
+ ### Code Formatting
340
+
341
+ ```bash
342
+ black agentspay/
343
+ ```
344
+
345
+ ### Type Checking
346
+
347
+ ```bash
348
+ mypy agentspay/
349
+ ```
350
+
351
+ ## License
352
+
353
+ MIT License - see [LICENSE](LICENSE) file for details.
354
+
355
+ ## Links
356
+
357
+ - **Documentation**: https://docs.agentspay.io
358
+ - **GitHub**: https://github.com/agentspay/agentspay
359
+ - **Issues**: https://github.com/agentspay/agentspay/issues
360
+ - **Website**: https://agentspay.io
361
+
362
+ ## Support
363
+
364
+ For questions, issues, or feature requests:
365
+
366
+ - Open an issue on [GitHub](https://github.com/agentspay/agentspay/issues)
367
+ - Email: contact@agentspay.io
368
+ - Discord: [Join our community](https://discord.gg/agentspay)
369
+
370
+ ---
371
+
372
+ **Built for the autonomous agent economy** 🤖💰
@@ -0,0 +1,97 @@
1
+ """
2
+ AgentPay Python SDK
3
+
4
+ A Python client library for the AgentPay platform - enabling AI agents to
5
+ discover, execute, and pay for services using cryptocurrency.
6
+
7
+ Example:
8
+ >>> from agentspay import AgentPayClient
9
+ >>>
10
+ >>> client = AgentPayClient(base_url="http://localhost:3100")
11
+ >>>
12
+ >>> # Create wallet
13
+ >>> wallet = client.create_wallet()
14
+ >>>
15
+ >>> # Register service (provider)
16
+ >>> service = client.register_service(
17
+ ... agent_id=wallet.id,
18
+ ... name="TextAnalyzer",
19
+ ... description="NLP analysis service",
20
+ ... price=1000,
21
+ ... currency="BSV",
22
+ ... endpoint="https://my-agent.com/analyze",
23
+ ... category="nlp"
24
+ ... )
25
+ >>>
26
+ >>> # Search services (consumer)
27
+ >>> services = client.search_services(keyword="nlp")
28
+ >>>
29
+ >>> # Execute service
30
+ >>> result = client.execute(
31
+ ... service_id=services[0].id,
32
+ ... buyer_wallet_id=wallet.id,
33
+ ... input_data={"text": "Hello world"}
34
+ ... )
35
+ >>> print(result.output)
36
+ """
37
+
38
+ from .client import AgentPayClient
39
+ from .types import (
40
+ AgentWallet,
41
+ Service,
42
+ Payment,
43
+ ExecutionResult,
44
+ ExecutionReceipt,
45
+ Dispute,
46
+ Webhook,
47
+ ReputationScore,
48
+ ServiceQuery,
49
+ Currency,
50
+ PLATFORM_FEE_RATE,
51
+ MIN_PRICE_SATOSHIS
52
+ )
53
+ from .exceptions import (
54
+ AgentPayError,
55
+ APIError,
56
+ ValidationError,
57
+ WalletError,
58
+ ServiceError,
59
+ PaymentError,
60
+ DisputeError,
61
+ WebhookError,
62
+ ExecutionError
63
+ )
64
+
65
+ __version__ = "0.2.0"
66
+ __author__ = "AgentsPay"
67
+ __license__ = "MIT"
68
+
69
+ __all__ = [
70
+ # Main client
71
+ "AgentPayClient",
72
+
73
+ # Types
74
+ "AgentWallet",
75
+ "Service",
76
+ "Payment",
77
+ "ExecutionResult",
78
+ "ExecutionReceipt",
79
+ "Dispute",
80
+ "Webhook",
81
+ "ReputationScore",
82
+ "ServiceQuery",
83
+ "Currency",
84
+ "PLATFORM_FEE_RATE",
85
+ "MIN_PRICE_SATOSHIS",
86
+
87
+ # Exceptions
88
+ "AgentPayError",
89
+ "APIError",
90
+ "ValidationError",
91
+ "WalletError",
92
+ "ServiceError",
93
+ "PaymentError",
94
+ "DisputeError",
95
+ "WebhookError",
96
+ "ExecutionError",
97
+ ]