Skip to content

pull in latest upstream#2

Open
TtheBC01 wants to merge 689 commits into
1Shot-API:mainfrom
x402-foundation:main
Open

pull in latest upstream#2
TtheBC01 wants to merge 689 commits into
1Shot-API:mainfrom
x402-foundation:main

Conversation

@TtheBC01

Copy link
Copy Markdown

Description

Tests

Checklist

  • I have formatted and linted my code
  • All new and existing tests pass
  • My commits are signed (required for merge) -- you may need to rebase if you initially pushed unsigned commits
  • I added a changelog fragment for user-facing changes (docs-only changes can skip)

CarsonRoscoe and others added 5 commits March 19, 2026 11:42
* feat: add permit2 and gas sponsorship extensions to gitbooks

* feat: added permit2 python sdk changes to gitbooks

* fix: pr feedback
* chore(site): add Conway Automaton, AgentCash, Stellar, AgentMail, Vercel; fix Alchemy link

Made-with: Cursor

* chore(site): fix Alchemy link with UTM, add Zerion

Made-with: Cursor

* chore(site): point partner links to x402-specific pages from Slack thread

Made-with: Cursor

* chore(site): add logos for new ecosystem partners

Made-with: Cursor

* chore(site): add Cloudflare, featured section with 8 major partners

Made-with: Cursor

* fix(site): make featured cards uniform height

Made-with: Cursor

* chore(site): remove highlighted section label, rename featured->highlighted in code

Made-with: Cursor

* chore(site): rename highlighted->pinned throughout ecosystem

Made-with: Cursor

* chore(site): rename pinned->topSection/top_section throughout ecosystem

Made-with: Cursor

* fix(site): align top_section field name between JSON and TypeScript interface

Made-with: Cursor

* chore(site): add OpenZeppelin facilitator partner

Made-with: Cursor

* feat(site): add brand scroller, ecosystem search, and UI improvements

- Add animated brand scroller carousel on landing page with monocolor logos
- Add ecosystem search with dropdown and filtered card results
- Redesign facilitator modal to match site's light theme
- Remove logo border frames from ecosystem cards
- Add new ecosystem partners: Browserbase, Freepik, Hyperbrowser
- Equalize card heights across all ecosystem sections

* fix(site): fix search dropdown z-index and clear state issues

- Move search into its own z-20 stacking context so dropdown overlays cards
- Remove AnimatePresence wrapper from search results to prevent exit animation blocking the category view from remounting on clear

* fix(site): fix search dropdown z-index and invalid partner JSON

- Bump search wrapper to z-30 so dropdown overlays card elements
- Fix invalid JSON in crypto-sentiment-api (comment) and quantumshield-api (markdown fence)

* feat(site): merge stats and brand scroller into unified social proof section

- Combine stats and brand logos into one section with a divider
- Move "Adopted by" carousel into StatsSection component
- Remove standalone BrandScroller component from page
- Fix invalid JSON in crypto-sentiment-api and quantumshield-api metadata

---------

Co-authored-by: Ethan Oroshiba <ethan.oroshiba@gmail.com>
The comment on line 26-27 stated hooks were "not fully integrated"
and had a TODO to integrate them into Verify execution. All 7 hook
tests (BeforeVerify, AfterVerify, OnVerifyFailure, BeforeSettle,
AfterSettle, OnSettleFailure, MultipleHooks) already exercise hooks
through the full Verify/Settle execution paths, confirming hooks
are fully integrated.

Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
)

When Verify or Settle fails to find a matching facilitator for a
scheme/network pair, the error now lists all registered scheme/network
combinations. This helps users quickly identify misconfiguration
(e.g., wrong network name, missing registration) without having to
inspect the facilitator setup code.

Before: no facilitator for scheme exact on network eip155:1
After:  no facilitator for scheme "exact" on network "eip155:1"; registered: exact@eip155:8453, exact@eip155:84532

Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
phdargen and others added 13 commits March 23, 2026 08:41
… schema (#1762)

* Fix extra: null incompatibility between Python facilitator and TypeScript Zod schema

* fix optional strings

* fixed outdated eth_account._utils.typed_transactions import
* feat: add dynamic routing to bazaar

* feat: fixed format/linter errors

* fix: access routeConfig.config.settlementFailedResponseBody after getRouteConfig return type change

getRouteConfig now returns { config: RouteConfig; pattern: string } instead of RouteConfig
directly. The buildSettlementFailureResponse call site was not updated, causing
settlementFailedResponseBody callbacks to be silently skipped after settlement failures.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix: updated param logic

* feat: added typescript, python and go bazaar server examples

* feat: updated e2e bazaar facilitators

* fix: add pathParams if not set

* fix: lint in python

* fix: typescript examples lock

* feat: pr feedback

* feat: pr feedback

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Generated-By: mintlify-agent

Mintlify-Source: dashboard-editor

Co-authored-by: mintlify[bot] <109931778+mintlify[bot]@users.noreply.github.com>
#1421)

* feat(go): add net/http standard library adapter for payment middleware

* feat(go): add PaymentMiddlewareFromHTTPServer, example server, and e2e tests
* feat(go/http): add Echo framework middleware adapter for x402 payment handling

* feat(go): add example server and e2e tests for echo
)

Add mUSD (0x118917a40FAF1CD7a13dB0Ef56C86De7973Ac503) as the default
stablecoin for Mezo Testnet (eip155:31611) across all three SDKs:
- TypeScript: scheme.ts stablecoins map
- Go: constants.go NetworkConfigs map
- Python: constants.py NETWORK_CONFIGS dict

mUSD uses Permit2 transfer method (no EIP-3009) with EIP-2612 support.
EIP-712 domain: name='Mezo USD', version='1', decimals=18.
* feat(evm): add Stable mainnet (chain ID 988) network support

* chore: add changelog fragments for Stable mainnet support

* feat(evm): add Stable mainnet to Go v1 legacy network config
* Add Fastify framework adapter for x402 payment middleware

* fix(fastify): preserve settlement response bytes and resource URLs

* chore(fastify): regenerate lockfiles for @x402/fastify workspace package

The pnpm-lock.yaml files in typescript/ and examples/typescript/ were missing
entries for the @x402/fastify package, causing CI to fail with
ERR_PNPM_OUTDATED_LOCKFILE on every workflow.

* feat(fastify): add e2e test server

Adds a Fastify server to the e2e test suite, following the same pattern as
Express and Hono. The test framework auto-discovers it via test.config.json.

Includes all standard endpoints: /protected (EVM), /protected-svm, /protected-aptos,
/protected-permit2, /protected-permit2-erc20, /protected-stellar, /health, /close.

* ci(fastify): add npm publishing workflow

Adds workflow_dispatch publishing workflow for @x402/fastify, matching the
pattern used by @x402/express and @x402/hono.
* feat: improved e2e suite

* feat: normalize e2e server paths

* feat: refactored path structure to /scheme/implementation/test format
* fix gin streaming

* fix e2e and echo/nethttp FacilitatorResponseError
phdargen and others added 20 commits May 29, 2026 22:10
* chore(go): release v2.14.0

* chore(go): release v2.14.0
…#2375)

executeSettle submits the settle(receiver, token) transaction via
writeContract with no explicit gas, so viem auto-estimates immediately
before broadcasting.

The on-chain settle is bimodal: it early-returns (~25.5k gas) when
totalClaimed == totalSettled, and performs an SSTORE plus an ERC-20
transfer (~57k gas) otherwise. The eth_estimateGas viem runs is an
independent RPC call that can resolve against a node whose state has
not yet caught up to the just-mined claim; it then estimates the
early-return path, the transaction is broadcast under-gassed, and it
reverts out of gas once the claim is visible. Observed intermittently
on Base mainnet (settle gasLimit == gasUsed, reverted).

settle's cost is bounded -- one SSTORE plus one transfer, no loop, so
it does not scale with voucher or channel count -- so a fixed limit is
correct. SETTLE_GAS_LIMIT (120_000n) leaves ~2x margin over the
transfer-path cost. deposit-permit2.ts already uses this explicit-gas
pattern.

Adds a unit test asserting executeSettle passes an explicit gas to
writeContract.

Refs #2374
* fix(python): run failure hooks after after-hook errors

* chore(python): add changelog for failure hooks fix
…2045) (#2078)

Contributors currently have to read test source code to discover which env
vars the integration suites need. This PR closes that gap across the three
SDK CONTRIBUTING.md files and adds the missing .env.example referenced by
the Go guide.

- go/.env.example: new template covering EVM_*/SVM_* vars, mirrored from
  the env names read in go/test/integration/evm_test.go and svm_test.go.
  The Go CONTRIBUTING.md already walks through `cp .env.example .env` at
  line 217, but the template file didn't exist on disk -- this wires up
  the walkthrough.
- python/CONTRIBUTING.md: new "Integration Tests" subsection under
  Testing, pointing to the existing autoloader in tests/conftest.py and
  listing the EVM_*/SVM_* vars read by tests/integrations/test_evm.py,
  test_mcp_evm.py, and test_svm.py.
- typescript/CONTRIBUTING.md: Integration Tests section now enumerates
  the env vars consumed by @x402/evm, @x402/svm, Stellar, and Aptos
  suites, with a note pointing at each package's test/integrations/*.ts
  file as the authoritative list.

All three additive documentation changes are scoped per-SDK; no code or
test behavior changes.

Closes #2045.

Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
* add svm smart wallet e2e test

* add to testnet facilitator
Generated-By: mintlify-agent

Mintlify-Source: dashboard-editor

Co-authored-by: mintlify[bot] <109931778+mintlify[bot]@users.noreply.github.com>
* feat: add builder-code extension for ERC-8021 attribution in x402 payments

Adds a new builder-code extension that enables ERC-8021 Schema 2
attribution tracking for x402 payments. Three parties can attach
their builder code to settlement transactions:

- Agent (client): sets the "a" field via BuilderCodeClientExtension
- Service (server): declares in 402 response via declareBuilderCodeExtension()
- Facilitator: adds to "s" array at settlement via BuilderCodeFacilitatorExtension

At settlement, the facilitator encodes all builder codes as a Schema 2
CBOR suffix and appends it to the transferWithAuthorization calldata.
The EVM ignores trailing calldata bytes, so the transfer executes
normally while indexers (Coindexer, Beacon, Dune) can parse the suffix.

Changes:
- New extension package: @x402/extensions/builder-code
- EVM mechanism: executeTransferWithAuthorization accepts optional calldataSuffix
- settleEIP3009 reads builder code extension from FacilitatorContext
- scheme.ts passes context through to EIP-3009 settlement

* refactor: service as app (a), facilitator as wallet (w), remove client extension

- Service declares its builder code as "a" (app) — it's the application
  exposing the x402 endpoint
- Facilitator adds its code as "w" (wallet) — it's the entity that signs
  and broadcasts the settlement transaction
- Service can optionally include related on-chain services in "s" array
  (e.g., Morpho, Aerodrome)
- Remove BuilderCodeClientExtension — agent doesn't attach builder codes,
  the service's extension data passes through untouched
- CBOR encoder now handles "a", "w", and "s" fields

* feat: EIP-3009 builder-code support in facilitator + examples

* refactor

* add facilitator validation

* add ts examples

* add client extension

* cleanup refactor

* fix format

* add builder codes to permit2, upto, batch-settlement

* add unit tests

* remove paymentRequiredExtensions

* validate extension echo

---------

Co-authored-by: Peter Kim <peter.kim@coinbase.com>
Co-authored-by: Philippe d'Argent <p.dargent@cern.ch>
Co-authored-by: samsamtrum <samsamtrum@users.noreply.github.com>
* fix: mcp support for x402 v1

* fix: lock

* fix: format
* feat: reject eoas as assets

* fix: pr feedback
* fix settlementOverrides for next

* add changeset

* Strip SETTLEMENT_OVERRIDES_HEADER on all exit paths, not just success

* pr feedback
* improve client error surfacing

* pr feedback
* Update docs/getting-started/quickstart-for-buyers.mdx

Generated-By: mintlify-agent

Mintlify-Source: dashboard-editor

* Update docs/getting-started/quickstart-for-buyers.mdx

Generated-By: mintlify-agent

Mintlify-Source: dashboard-editor

---------

Co-authored-by: mintlify[bot] <109931778+mintlify[bot]@users.noreply.github.com>
* Update docs/extensions/builder-code.mdx

Generated-By: mintlify-agent

Mintlify-Source: dashboard-editor

* Update docs/docs.json

Generated-By: mintlify-agent

Mintlify-Source: dashboard-editor

* Update docs/extensions/overview.mdx

Generated-By: mintlify-agent

Mintlify-Source: dashboard-editor

* Update docs/extensions/overview.mdx

Generated-By: mintlify-agent

Mintlify-Source: dashboard-editor

* Update docs/sdk-features.md

Generated-By: mintlify-agent

Mintlify-Source: dashboard-editor

---------

Co-authored-by: mintlify[bot] <109931778+mintlify[bot]@users.noreply.github.com>
* fix extension echo

* fix tests

* add changeset

* fix tests

* fix tests
* add workflow checking verified commits

* fix fmt
@github-actions github-actions Bot removed the ecosystem label Jun 8, 2026
phdargen added 2 commits June 8, 2026 21:29
* prepare py releases

* fix pr resolution

* improve changelog

* improve changelog

* fix fmt

* change cron time

* fix verified commits action
* mirror TS core + evm changes for builder-code

* add builde code extension

* add examples

* fix signers

* fix upto client

* fix fmt

* add comment for v1 payload
@github-actions github-actions Bot removed the website label Jun 8, 2026
mintlify Bot and others added 6 commits June 8, 2026 22:53
* Update docs/sdk-features.md

Generated-By: mintlify-agent

Mintlify-Source: dashboard-editor

* Update docs/extensions/builder-code.mdx

Generated-By: mintlify-agent

Mintlify-Source: dashboard-editor

* Update docs/extensions/builder-code.mdx

Generated-By: mintlify-agent

Mintlify-Source: dashboard-editor

* Update docs/extensions/builder-code.mdx

Generated-By: mintlify-agent

Mintlify-Source: dashboard-editor

* Update docs/extensions/builder-code.mdx

Generated-By: mintlify-agent

Mintlify-Source: dashboard-editor

* Update docs/extensions/overview.mdx

Generated-By: mintlify-agent

Mintlify-Source: dashboard-editor

---------

Co-authored-by: mintlify[bot] <109931778+mintlify[bot]@users.noreply.github.com>
…ct scheme (#829)

Document the outcome-based payment model and Sponsor Acceptance Policy for
the exact scheme on Solana, aligned with the merged simulation-based smart
wallet verification:

- Reframe as outcome-based payment semantics with explicit terminology
  (client, merchant, sponsor, fee payer, smart wallet)
- Add normative Exact Payment Outcome Definition, including exactly-one
  matching transfer and overpayment tolerance (>= required amount)
- Add Sponsor Acceptance Policy (fee payer isolation, ALT visibility,
  compute budget caps, program allowlist, simulation rejection)
- Document the two-path reference implementation (static fast path +
  simulation-based smart wallet path), path selection, and post-settlement
  TOCTOU verification
- Add security invariants table (I1-I7)
- Update static path instruction cap from 6 to 7 (third Lighthouse slot)
* prepare go releases

* fix fmt

* fix uppercase keys

* ts releases

* fix legacy

* fix hedera

* add versions check

* improve changelog parsing

* fix

* fix attribution

* add tags

* remove unused files
Signed-off-by: Piotr Swierzy <piotr.swierzy@blockydevs.com>
Mezo mainnet launched with the canonical x402 contracts (Permit2 +
Exact/Upto proxies) deployed at the same CREATE2 addresses as Base and
Mezo testnet, so the SDKs can now offer mUSD as the chain's default
stablecoin. Adds the eip155:31612 entry to all three SDK registries
(TS DEFAULT_STABLECOINS, Go NetworkConfigs + ChainIDMezo, Python
NETWORK_CONFIGS), mirroring the existing eip155:31611 testnet entry
with only the token address and chain id differing.

Field values were confirmed on-chain via ERC-5267 eip712Domain():
name "Mezo USD", version "1", chainId 31612; decimals()=18; EIP-2612
nonces() present (mUSD lacks EIP-3009, so transfers go through Permit2
with gasless EIP-2612 approval). No faucetUrl: mainnet has no faucet
and the paywall faucet UI is testnet-gated.

The Go constant is named ChainIDMezo (not ChainIDMezoMainnet) to match
the unsuffixed-mainnet convention (ChainIDBase, ChainIDStable,
ChainIDRadius, ChainIDHPP). Mainnet entries precede their testnet
siblings in every registry, matching the other chain families.

gen/decimals.ts is the build:paywall output for the new 18-decimal
entry (DEFAULT_ASSETS.md step 3). The nine paywall template bundles
were deliberately NOT regenerated: a clean-HEAD rebuild already
changes all nine (pre-existing drift on main, likely from a dependency
bump after the last regen; check_paywall_template is now
workflow_dispatch-only so PRs no longer enforce it), and the client
bundles do not embed the decimals map, so they have no functional
dependency on this change. Including them would mix ~MB of unrelated
minifier churn into a 34-line chain addition.

Validation: full TS suite (45 turbo tasks), pytest (1651 passed), go
test -race, plus lint/format gates for all three languages, green on
base and on this change. Tracked by x4-hyn9fv.4; Python display-amount
6-decimal hardcoding found during review filed as x4-4a6mr8.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.