agentscore-commerce 2.7.2__tar.gz → 2.8.0__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 (250) hide show
  1. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/PKG-INFO +1 -1
  2. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/checkout.py +20 -1
  3. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/checkout_compute_first.py +11 -1
  4. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/pyproject.toml +1 -1
  5. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_checkout_compute_first_ofac.py +53 -0
  6. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_checkout_wallet_ofac_default.py +51 -0
  7. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  8. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  9. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
  10. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/.github/dependabot.yml +0 -0
  11. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/.github/workflows/ci.yml +0 -0
  12. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/.github/workflows/publish.yml +0 -0
  13. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/.github/workflows/security.yml +0 -0
  14. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/.gitignore +0 -0
  15. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/CLAUDE.md +0 -0
  16. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/CODE_OF_CONDUCT.md +0 -0
  17. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/CONTRIBUTING.md +0 -0
  18. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/LICENSE +0 -0
  19. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/README.md +0 -0
  20. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/SECURITY.md +0 -0
  21. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/__init__.py +0 -0
  22. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/_headers.py +0 -0
  23. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/_mppx_receipt.py +0 -0
  24. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/_redis.py +0 -0
  25. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/_warnings.py +0 -0
  26. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/aip/__init__.py +0 -0
  27. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/aip/gate.py +0 -0
  28. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/aip/http_signature.py +0 -0
  29. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/aip/jwks.py +0 -0
  30. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/aip/request.py +0 -0
  31. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/aip/types.py +0 -0
  32. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/aip/verify.py +0 -0
  33. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/api/__init__.py +0 -0
  34. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/challenge/__init__.py +0 -0
  35. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/challenge/accepted_methods.py +0 -0
  36. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/challenge/agent_instructions.py +0 -0
  37. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/challenge/agent_memory.py +0 -0
  38. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/challenge/body.py +0 -0
  39. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/challenge/how_to_pay.py +0 -0
  40. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/challenge/identity.py +0 -0
  41. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/challenge/pricing.py +0 -0
  42. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/challenge/receipt.py +0 -0
  43. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/challenge/respond_402.py +0 -0
  44. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/challenge/validation_error.py +0 -0
  45. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/checkout_hooks.py +0 -0
  46. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/discovery/__init__.py +0 -0
  47. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/discovery/agentscore_content.py +0 -0
  48. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/discovery/bazaar.py +0 -0
  49. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/discovery/llms_txt.py +0 -0
  50. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/discovery/openapi.py +0 -0
  51. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/discovery/probe.py +0 -0
  52. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/discovery/redemption_md.py +0 -0
  53. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/discovery/robots_tag.py +0 -0
  54. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/discovery/skill_md.py +0 -0
  55. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/discovery/well_known.py +0 -0
  56. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/discovery/well_known_mpp.py +0 -0
  57. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/discovery/well_known_x402.py +0 -0
  58. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/errors.py +0 -0
  59. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/forwarded_proto.py +0 -0
  60. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/identity/__init__.py +0 -0
  61. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/identity/_denial.py +0 -0
  62. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/identity/_response.py +0 -0
  63. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/identity/a2a.py +0 -0
  64. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/identity/address.py +0 -0
  65. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/identity/aiohttp.py +0 -0
  66. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/identity/cache.py +0 -0
  67. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/identity/core.py +0 -0
  68. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/identity/default_denied.py +0 -0
  69. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/identity/django.py +0 -0
  70. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/identity/fastapi.py +0 -0
  71. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/identity/flask.py +0 -0
  72. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/identity/middleware.py +0 -0
  73. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/identity/policy.py +0 -0
  74. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/identity/py.typed +0 -0
  75. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/identity/sanic.py +0 -0
  76. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/identity/sessions.py +0 -0
  77. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/identity/signer.py +0 -0
  78. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/identity/tokens.py +0 -0
  79. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/identity/types.py +0 -0
  80. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/identity/ucp.py +0 -0
  81. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/identity/ucp_jwks.py +0 -0
  82. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/middleware/__init__.py +0 -0
  83. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/middleware/_core.py +0 -0
  84. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/middleware/aiohttp.py +0 -0
  85. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/middleware/asgi.py +0 -0
  86. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/middleware/django.py +0 -0
  87. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/middleware/fastapi.py +0 -0
  88. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/middleware/flask.py +0 -0
  89. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/middleware/sanic.py +0 -0
  90. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/payment/__init__.py +0 -0
  91. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/payment/amounts.py +0 -0
  92. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/payment/compose_rails.py +0 -0
  93. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/payment/constants.py +0 -0
  94. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/payment/default_rails.py +0 -0
  95. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/payment/directive.py +0 -0
  96. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/payment/dispatch.py +0 -0
  97. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/payment/headers.py +0 -0
  98. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/payment/idempotency.py +0 -0
  99. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/payment/lazy.py +0 -0
  100. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/payment/mppx_failures.py +0 -0
  101. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/payment/mppx_server.py +0 -0
  102. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/payment/network_kind.py +0 -0
  103. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/payment/networks.py +0 -0
  104. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/payment/payment_header.py +0 -0
  105. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/payment/rail_spec.py +0 -0
  106. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/payment/rails.py +0 -0
  107. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/payment/settlement_override.py +0 -0
  108. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/payment/signer.py +0 -0
  109. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/payment/solana.py +0 -0
  110. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/payment/usdc.py +0 -0
  111. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/payment/wwwauthenticate.py +0 -0
  112. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/payment/x402.py +0 -0
  113. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/payment/x402_server.py +0 -0
  114. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/payment/x402_settle.py +0 -0
  115. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/payment/x402_validation.py +0 -0
  116. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/payment/zero_settle.py +0 -0
  117. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/py.typed +0 -0
  118. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/quote_cache.py +0 -0
  119. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/stripe_multichain/__init__.py +0 -0
  120. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/stripe_multichain/mppx_stripe.py +0 -0
  121. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/stripe_multichain/pay_to_address.py +0 -0
  122. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/stripe_multichain/payment_intent.py +0 -0
  123. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/stripe_multichain/pi_cache.py +0 -0
  124. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/stripe_multichain/simulate_deposit.py +0 -0
  125. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/agentscore_commerce/stripe_multichain/simulate_dispatch.py +0 -0
  126. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/examples/README.md +0 -0
  127. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/examples/api_provider.py +0 -0
  128. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/examples/compliance_merchant.py +0 -0
  129. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/examples/compute_first_merchant.py +0 -0
  130. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/examples/identity_only.py +0 -0
  131. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/examples/multi_rail_merchant.py +0 -0
  132. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/examples/per_product_policy_merchant.py +0 -0
  133. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/examples/signed_ucp_merchant.py +0 -0
  134. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/examples/stripe_multichain_merchant.py +0 -0
  135. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/lefthook.yml +0 -0
  136. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/osv-scanner.toml +0 -0
  137. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/ruff.toml +0 -0
  138. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/scripts/regenerate_cross_lang_fixtures.py +0 -0
  139. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/__init__.py +0 -0
  140. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/conftest.py +0 -0
  141. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/fixtures/cross-lang/node-agentscore-gate-blocked.json +0 -0
  142. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/fixtures/cross-lang/node-agentscore-gate-full.json +0 -0
  143. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/fixtures/cross-lang/node-capability.json +0 -0
  144. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/fixtures/cross-lang/node-emoji-keys.json +0 -0
  145. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/fixtures/cross-lang/node-es256-rails.json +0 -0
  146. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/fixtures/cross-lang/node-extras-int.json +0 -0
  147. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/fixtures/cross-lang/node-int-boundary.json +0 -0
  148. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/fixtures/cross-lang/node-minimal.json +0 -0
  149. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/fixtures/cross-lang/node-multikey.json +0 -0
  150. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/fixtures/cross-lang/node-unicode.json +0 -0
  151. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/fixtures/cross-lang/py-agentscore-gate-blocked.json +0 -0
  152. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/fixtures/cross-lang/py-agentscore-gate-full.json +0 -0
  153. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/fixtures/cross-lang/py-capability.json +0 -0
  154. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/fixtures/cross-lang/py-emoji-keys.json +0 -0
  155. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/fixtures/cross-lang/py-es256-rails.json +0 -0
  156. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/fixtures/cross-lang/py-extras-int.json +0 -0
  157. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/fixtures/cross-lang/py-int-boundary.json +0 -0
  158. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/fixtures/cross-lang/py-minimal.json +0 -0
  159. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/fixtures/cross-lang/py-multikey.json +0 -0
  160. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/fixtures/cross-lang/py-unicode.json +0 -0
  161. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_a2a.py +0 -0
  162. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_a2a_jws_roundtrip.py +0 -0
  163. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_address.py +0 -0
  164. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_agent_memory_emitter.py +0 -0
  165. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_aiohttp.py +0 -0
  166. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_aip_adapters.py +0 -0
  167. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_aip_agent_memory.py +0 -0
  168. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_aip_checkout.py +0 -0
  169. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_aip_gate.py +0 -0
  170. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_aip_http_signature.py +0 -0
  171. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_aip_jwks.py +0 -0
  172. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_aip_presentation.py +0 -0
  173. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_aip_request.py +0 -0
  174. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_aip_types.py +0 -0
  175. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_aip_verify.py +0 -0
  176. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_amounts.py +0 -0
  177. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_api_reexport.py +0 -0
  178. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_cache.py +0 -0
  179. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_challenge.py +0 -0
  180. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_checkout.py +0 -0
  181. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_checkout_compute_first.py +0 -0
  182. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_checkout_compute_first_adapters.py +0 -0
  183. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_checkout_compute_first_settle.py +0 -0
  184. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_checkout_coverage_gaps.py +0 -0
  185. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_checkout_signer_match.py +0 -0
  186. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_classify_orchestration_error.py +0 -0
  187. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_compose_rails.py +0 -0
  188. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_core.py +0 -0
  189. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_coverage_fillers.py +0 -0
  190. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_credential_precheck.py +0 -0
  191. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_default_denied.py +0 -0
  192. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_default_rails.py +0 -0
  193. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_default_read_only_on_denied.py +0 -0
  194. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_denial.py +0 -0
  195. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_discovery.py +0 -0
  196. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_dispatch.py +0 -0
  197. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_django.py +0 -0
  198. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_extract_owner_scope.py +0 -0
  199. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_fastapi.py +0 -0
  200. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_flask.py +0 -0
  201. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_forwarded_proto.py +0 -0
  202. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_gate_quota_info.py +0 -0
  203. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_get_signer_verdict.py +0 -0
  204. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_idempotency_helper.py +0 -0
  205. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_integration.py +0 -0
  206. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_internal_helpers.py +0 -0
  207. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_lifted_helpers.py +0 -0
  208. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_load_ucp_signing_key_from_env.py +0 -0
  209. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_middleware.py +0 -0
  210. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_mppx_failures.py +0 -0
  211. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_mppx_receipt.py +0 -0
  212. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_network_kind.py +0 -0
  213. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_operator_handle.py +0 -0
  214. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_pay_to_address.py +0 -0
  215. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_payment_directive.py +0 -0
  216. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_payment_dispatch.py +0 -0
  217. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_payment_handlers.py +0 -0
  218. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_payment_header.py +0 -0
  219. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_payment_headers.py +0 -0
  220. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_payment_misc.py +0 -0
  221. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_payment_servers.py +0 -0
  222. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_payment_signer.py +0 -0
  223. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_policy.py +0 -0
  224. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_pricing.py +0 -0
  225. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_public_surface.py +0 -0
  226. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_quote_cache.py +0 -0
  227. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_quote_cache_redis.py +0 -0
  228. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_rail_spec.py +0 -0
  229. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_rate_limit.py +0 -0
  230. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_redis_internal.py +0 -0
  231. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_response.py +0 -0
  232. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_robots_tag.py +0 -0
  233. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_sanic.py +0 -0
  234. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_seamless_helpers.py +0 -0
  235. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_sessions.py +0 -0
  236. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_signer_match.py +0 -0
  237. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_signer_verdict_request_scoped.py +0 -0
  238. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_simulate_dispatch.py +0 -0
  239. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_skill_md.py +0 -0
  240. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_solana.py +0 -0
  241. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_solana_mpp_rail_spec_post_init.py +0 -0
  242. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_stripe_multichain.py +0 -0
  243. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_tokens.py +0 -0
  244. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_ucp.py +0 -0
  245. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_ucp_cross_lang.py +0 -0
  246. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_ucp_jwks.py +0 -0
  247. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_validation_error.py +0 -0
  248. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_x402_settle_extra.py +0 -0
  249. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/tests/test_zero_settle.py +0 -0
  250. {agentscore_commerce-2.7.2 → agentscore_commerce-2.8.0}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: agentscore-commerce
3
- Version: 2.7.2
3
+ Version: 2.8.0
4
4
  Summary: Agentic commerce SDK for Python: identity middleware (FastAPI, Flask, Django, AIOHTTP, Sanic, ASGI) + payment helpers + 402 builders + discovery + Stripe multichain. The full merchant-side toolkit for AgentScore-powered agentic commerce.
5
5
  Project-URL: Homepage, https://www.agentscore.com
6
6
  Project-URL: Repository, https://github.com/agentscore/python-commerce
@@ -2413,7 +2413,26 @@ class Checkout:
2413
2413
  )
2414
2414
 
2415
2415
  decision = result.get("decision") if isinstance(result, dict) else None
2416
- if decision == "deny":
2416
+
2417
+ # Fail closed on anything that is not an explicit allow. This branched on
2418
+ # `decision == "deny"`, so every other value was permitted by structure:
2419
+ # None from an unreadable response, and any decision the API adds later.
2420
+ # This path is strict-liability wallet OFAC screening and already denies
2421
+ # on an API outage above, so treating an unreadable answer as a pass
2422
+ # contradicted its own posture.
2423
+ if decision is None:
2424
+ reason = DenialReason(
2425
+ code="api_error",
2426
+ message="assess returned no decision",
2427
+ )
2428
+ return CheckoutResult(
2429
+ status=denial_reason_status(reason),
2430
+ body=denial_reason_to_body(reason),
2431
+ headers={},
2432
+ reference_id=ctx.reference_id,
2433
+ settled=False,
2434
+ )
2435
+ if decision != "allow":
2417
2436
  decision_reasons = result.get("decision_reasons") or [] if isinstance(result, dict) else []
2418
2437
  reason = DenialReason(
2419
2438
  code="wallet_not_trusted",
@@ -495,7 +495,17 @@ class ComputeFirstCheckout:
495
495
 
496
496
  if denial_reason is None:
497
497
  decision = result.get("decision") if isinstance(result, dict) else None
498
- if decision == "deny":
498
+ # Fail closed on anything that is not an explicit allow. This branched
499
+ # on `decision == "deny"`, so every other value was permitted by
500
+ # structure: None from an unreadable response, and any decision the
501
+ # API adds later. The except above already denies on an outage, so
502
+ # letting an unreadable answer through contradicted that posture.
503
+ if decision is None:
504
+ denial_reason = DenialReason(
505
+ code="api_error",
506
+ message="assess returned no decision",
507
+ )
508
+ elif decision != "allow":
499
509
  decision_reasons = list(result.get("decision_reasons") or []) if isinstance(result, dict) else []
500
510
  denial_reason = DenialReason(
501
511
  code="wallet_not_trusted",
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "agentscore-commerce"
7
- version = "2.7.2"
7
+ version = "2.8.0"
8
8
  description = "Agentic commerce SDK for Python: identity middleware (FastAPI, Flask, Django, AIOHTTP, Sanic, ASGI) + payment helpers + 402 builders + discovery + Stripe multichain. The full merchant-side toolkit for AgentScore-powered agentic commerce."
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -135,6 +135,59 @@ async def test_sdn_signer_denies_before_x402_settle(
135
135
  fake_server.verify_payment.assert_not_called()
136
136
 
137
137
 
138
+ @pytest.mark.asyncio
139
+ async def test_missing_decision_fails_closed(monkeypatch: pytest.MonkeyPatch) -> None:
140
+ """A response carrying no decision must DENY rather than settle.
141
+
142
+ This branched on `decision == "deny"`, so anything else was permitted by
143
+ structure, including None from an unreadable response. The except above
144
+ already denies on an outage, so letting an unreadable answer through
145
+ contradicted that posture, and here it would have settled a payment.
146
+ """
147
+ monkeypatch.setenv("AGENTSCORE_API_KEY", "ask_test_key")
148
+ fake_server = _make_fake_x402_server()
149
+ checkout = ComputeFirstCheckout(
150
+ name="search",
151
+ url="https://api.example.com/search",
152
+ unit_price_cents=1,
153
+ rails=_make_rails(),
154
+ x402_server=fake_server,
155
+ run_work=_run_one,
156
+ )
157
+ await checkout.handle(_req(body={"q": "x"}))
158
+ with patch(
159
+ "agentscore_commerce.api.AgentScore.aassess",
160
+ new=AsyncMock(return_value={"decision_reasons": []}),
161
+ ):
162
+ result = await checkout.handle(_req(headers={"x-payment": _x402_header()}, body={"q": "x"}))
163
+ assert result[1]["error"]["code"] == "api_error"
164
+ fake_server.verify_payment.assert_not_called()
165
+
166
+
167
+ @pytest.mark.asyncio
168
+ async def test_unrecognised_decision_fails_closed(monkeypatch: pytest.MonkeyPatch) -> None:
169
+ """A decision value we do not know is not an approval either."""
170
+ monkeypatch.setenv("AGENTSCORE_API_KEY", "ask_test_key")
171
+ fake_server = _make_fake_x402_server()
172
+ checkout = ComputeFirstCheckout(
173
+ name="search",
174
+ url="https://api.example.com/search",
175
+ unit_price_cents=1,
176
+ rails=_make_rails(),
177
+ x402_server=fake_server,
178
+ run_work=_run_one,
179
+ )
180
+ await checkout.handle(_req(body={"q": "x"}))
181
+ with patch(
182
+ "agentscore_commerce.api.AgentScore.aassess",
183
+ new=AsyncMock(return_value={"decision": "review", "decision_reasons": []}),
184
+ ):
185
+ result = await checkout.handle(_req(headers={"x-payment": _x402_header()}, body={"q": "x"}))
186
+ assert result[0] == 403
187
+ assert result[1]["error"]["code"] == "wallet_not_trusted"
188
+ fake_server.verify_payment.assert_not_called()
189
+
190
+
138
191
  @pytest.mark.asyncio
139
192
  async def test_clean_signer_continues_to_settle(monkeypatch: pytest.MonkeyPatch) -> None:
140
193
  monkeypatch.setenv("AGENTSCORE_API_KEY", "ask_test_key")
@@ -124,6 +124,57 @@ async def test_clean_signer_with_no_gate_allows_settle_to_proceed(
124
124
  assert result.status != 403 or "wallet_not_trusted" not in str(result.body)
125
125
 
126
126
 
127
+ @pytest.mark.asyncio
128
+ @respx.mock
129
+ async def test_missing_decision_fails_closed(monkeypatch: pytest.MonkeyPatch) -> None:
130
+ """A response carrying no decision must DENY, not fall through as an allow.
131
+
132
+ This branched on `decision == "deny"`, so every other value was permitted by
133
+ structure: None from an unreadable response, and any decision the API adds
134
+ later. This path is strict-liability wallet OFAC screening and already denies
135
+ on an API outage, so treating an unreadable answer as a pass contradicted its
136
+ own posture.
137
+ """
138
+ monkeypatch.setenv("AGENTSCORE_API_KEY", "ask_test_key")
139
+ respx.post(ASSESS_URL).mock(return_value=httpx.Response(200, json={"decision_reasons": []}))
140
+ checkout = _checkout(gate=None)
141
+ request = _req(headers={"x-payment": _x402_payment_header(SDN_WALLET)})
142
+ result = await checkout.handle(request)
143
+ assert result.settled is False
144
+ assert "api_error" in str(result.body)
145
+
146
+
147
+ @pytest.mark.asyncio
148
+ @respx.mock
149
+ async def test_null_decision_fails_closed(monkeypatch: pytest.MonkeyPatch) -> None:
150
+ """An explicit null decision is the same unreadable case as a missing one."""
151
+ monkeypatch.setenv("AGENTSCORE_API_KEY", "ask_test_key")
152
+ respx.post(ASSESS_URL).mock(return_value=httpx.Response(200, json={"decision": None, "decision_reasons": []}))
153
+ checkout = _checkout(gate=None)
154
+ request = _req(headers={"x-payment": _x402_payment_header(SDN_WALLET)})
155
+ result = await checkout.handle(request)
156
+ assert result.settled is False
157
+ assert "api_error" in str(result.body)
158
+
159
+
160
+ @pytest.mark.asyncio
161
+ @respx.mock
162
+ async def test_unrecognised_decision_fails_closed(monkeypatch: pytest.MonkeyPatch) -> None:
163
+ """A decision value we do not know is not an approval either.
164
+
165
+ Guards the forward case: adding a decision on the API side must not silently
166
+ open this gate on an already-released SDK.
167
+ """
168
+ monkeypatch.setenv("AGENTSCORE_API_KEY", "ask_test_key")
169
+ _mock_assess("review", reasons=[])
170
+ checkout = _checkout(gate=None)
171
+ request = _req(headers={"x-payment": _x402_payment_header(SDN_WALLET)})
172
+ result = await checkout.handle(request)
173
+ assert result.status == 403
174
+ assert result.settled is False
175
+ assert "wallet_not_trusted" in str(result.body)
176
+
177
+
127
178
  @pytest.mark.asyncio
128
179
  async def test_no_api_key_logs_warn_once_and_skips(
129
180
  monkeypatch: pytest.MonkeyPatch, caplog: pytest.LogCaptureFixture