paynode-sdk-python 2.5.0__tar.gz → 2.5.1__tar.gz

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 (27) hide show
  1. {paynode_sdk_python-2.5.0 → paynode_sdk_python-2.5.1}/PKG-INFO +1 -1
  2. {paynode_sdk_python-2.5.0 → paynode_sdk_python-2.5.1}/paynode_sdk/client.py +12 -4
  3. {paynode_sdk_python-2.5.0 → paynode_sdk_python-2.5.1}/paynode_sdk/constants.py +1 -1
  4. {paynode_sdk_python-2.5.0 → paynode_sdk_python-2.5.1}/paynode_sdk_python.egg-info/PKG-INFO +1 -1
  5. {paynode_sdk_python-2.5.0 → paynode_sdk_python-2.5.1}/pyproject.toml +1 -1
  6. {paynode_sdk_python-2.5.0 → paynode_sdk_python-2.5.1}/LICENSE +0 -0
  7. {paynode_sdk_python-2.5.0 → paynode_sdk_python-2.5.1}/README.md +0 -0
  8. {paynode_sdk_python-2.5.0 → paynode_sdk_python-2.5.1}/paynode_sdk/__init__.py +0 -0
  9. {paynode_sdk_python-2.5.0 → paynode_sdk_python-2.5.1}/paynode_sdk/errors.py +0 -0
  10. {paynode_sdk_python-2.5.0 → paynode_sdk_python-2.5.1}/paynode_sdk/idempotency.py +0 -0
  11. {paynode_sdk_python-2.5.0 → paynode_sdk_python-2.5.1}/paynode_sdk/merchant.py +0 -0
  12. {paynode_sdk_python-2.5.0 → paynode_sdk_python-2.5.1}/paynode_sdk/middleware.py +0 -0
  13. {paynode_sdk_python-2.5.0 → paynode_sdk_python-2.5.1}/paynode_sdk/utils/__init__.py +0 -0
  14. {paynode_sdk_python-2.5.0 → paynode_sdk_python-2.5.1}/paynode_sdk/utils/payload.py +0 -0
  15. {paynode_sdk_python-2.5.0 → paynode_sdk_python-2.5.1}/paynode_sdk/utils/signature.py +0 -0
  16. {paynode_sdk_python-2.5.0 → paynode_sdk_python-2.5.1}/paynode_sdk/verifier.py +0 -0
  17. {paynode_sdk_python-2.5.0 → paynode_sdk_python-2.5.1}/paynode_sdk/webhook.py +0 -0
  18. {paynode_sdk_python-2.5.0 → paynode_sdk_python-2.5.1}/paynode_sdk_python.egg-info/SOURCES.txt +0 -0
  19. {paynode_sdk_python-2.5.0 → paynode_sdk_python-2.5.1}/paynode_sdk_python.egg-info/dependency_links.txt +0 -0
  20. {paynode_sdk_python-2.5.0 → paynode_sdk_python-2.5.1}/paynode_sdk_python.egg-info/requires.txt +0 -0
  21. {paynode_sdk_python-2.5.0 → paynode_sdk_python-2.5.1}/paynode_sdk_python.egg-info/top_level.txt +0 -0
  22. {paynode_sdk_python-2.5.0 → paynode_sdk_python-2.5.1}/setup.cfg +0 -0
  23. {paynode_sdk_python-2.5.0 → paynode_sdk_python-2.5.1}/tests/test_client.py +0 -0
  24. {paynode_sdk_python-2.5.0 → paynode_sdk_python-2.5.1}/tests/test_concurrency.py +0 -0
  25. {paynode_sdk_python-2.5.0 → paynode_sdk_python-2.5.1}/tests/test_internals.py +0 -0
  26. {paynode_sdk_python-2.5.0 → paynode_sdk_python-2.5.1}/tests/test_v2_5_alignment.py +0 -0
  27. {paynode_sdk_python-2.5.0 → paynode_sdk_python-2.5.1}/tests/test_verifier_logic.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: paynode-sdk-python
3
- Version: 2.5.0
3
+ Version: 2.5.1
4
4
  Summary: PayNode Protocol Python SDK for AI Agents
5
5
  Author-email: PayNodeLabs <contact@paynode.dev>
6
6
  License: MIT
@@ -165,16 +165,24 @@ class PayNodeAgentClient:
165
165
  raise PayNodeException(ErrorCode.token_not_accepted, message=f"Token {requirement['asset']} is not in the whitelist for chain {chain_id}")
166
166
 
167
167
  logger.info(f"💡 [PayNode-PY] Payment request (v2): {requirement['amount']} atomic units of {requirement['asset']} to {requirement['payTo']}")
168
- logger.info(f"💡 [PayNode-PY] Selected payment method: {requirement.get('type', 'onchain')} on {requirement.get('network')}")
169
-
168
+ # --- Type Inference ---
169
+ ptype = requirement.get('type')
170
+ if not ptype:
171
+ extra = requirement.get('extra', {})
172
+ # x402 v2 'exact' scheme with extra metadata (name/version) is almost always EIP3009
173
+ if requirement.get('scheme') == 'exact' and extra.get('version'):
174
+ ptype = 'eip3009'
175
+ else:
176
+ ptype = 'onchain'
177
+
178
+ logger.info(f"💡 [PayNode-PY] Selected payment method: {ptype} on {requirement.get('network')}")
179
+
170
180
  # Dust limit check
171
181
  if int(requirement['amount']) < MIN_PAYMENT_AMOUNT:
172
182
  raise PayNodeException(ErrorCode.amount_too_low, message=f"Payment amount {requirement['amount']} is below the minimum dust limit of {MIN_PAYMENT_AMOUNT}")
173
183
 
174
184
  order_id = requirement.get('orderId') or requirements.get('orderId') or urlparse(url).path
175
-
176
185
  payload_data = {}
177
- ptype = requirement.get('type', 'onchain')
178
186
 
179
187
  if ptype == 'eip3009':
180
188
  valid_after = int(time.time()) - 60
@@ -6,7 +6,7 @@ BASE_USDC_ADDRESS_SANDBOX = "0x65c088EfBDB0E03185Dbe8e258Ad0cf4Ab7946b0"
6
6
  BASE_USDC_DECIMALS = 6
7
7
 
8
8
  PROTOCOL_VERSION = 2
9
- SDK_VERSION = "2.5.0"
9
+ SDK_VERSION = "2.5.1"
10
10
  PROTOCOL_TREASURY = "0x598bF63F5449876efafa7b36b77Deb2070621C0E"
11
11
  PROTOCOL_FEE_BPS = 100
12
12
  MIN_PAYMENT_AMOUNT = 1000
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: paynode-sdk-python
3
- Version: 2.5.0
3
+ Version: 2.5.1
4
4
  Summary: PayNode Protocol Python SDK for AI Agents
5
5
  Author-email: PayNodeLabs <contact@paynode.dev>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "paynode-sdk-python"
7
- version = "2.5.0"
7
+ version = "2.5.1"
8
8
  description = "PayNode Protocol Python SDK for AI Agents"
9
9
  readme = "README.md"
10
10
  authors = [{ name = "PayNodeLabs", email = "contact@paynode.dev" }]