pull in latest upstream - #2
Open
TtheBC01 wants to merge 890 commits into
Open
Conversation
* add dev tools docs * add discovery sect to ecosystem
* fix: add client ceiling protection to x402-axios that mirrors x402-fetch * fix: test
* fix: go verify result was being discarded * chore: add changelog fragment * fix: format/lint
…urceInfo (#2447) * feat(python): thread bazaar service metadata from RouteConfig to ResourceInfo The `resource.{serviceName,tags,iconUrl}` schema fields landed in #2200 but the Python server-side `RouteConfig` dataclass had no way to populate them — servers wanting rich Bazaar listings had to bypass the SDK or post-process the 402 response. This wires the missing plumbing: - Add `service_name`, `tags`, `icon_url` fields to `RouteConfig` - Accept `serviceName`/`iconUrl` (camelCase) and snake_case in `_parse_route_config` to match existing `mimeType` parsing convention - Pass the fields through to `ResourceInfo` in `x402_http_server_base.py` - Test asserts the fields flow from RouteConfig → resource on the 402 * review: snake_case sibling test + RouteConfig limits docstring Addresses @TateLyman's two non-blocking review suggestions: 1. Add an integration test for the snake_case input path (service_name / icon_url) so a future refactor cannot silently drop support for either casing while leaving the camelCase test green. 2. Expand the RouteConfig docstring to flag that it does not itself enforce Bazaar indexer caps — the stricter resource_info helper soft-drops non-conforming values later. Points server authors at the limits (service_name ≤ 32, ≤ 5 tags of ≤ 32 chars, absolute http(s) icon URLs ≤ 2048) at the SDK boundary. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> --------- Co-authored-by: Christopher Ferjo <270686917+hypeprinter007-stack@users.noreply.github.com> Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com>
* fix: aptos gas price vulnerability * fix: spec
* fix: correct microLamports field path in compute price cap check * chore: add changelog fragment * fix: changelog fragments
* fix: solana cache deduplication * feat: cleanup decode calls * fix: format * chore: add changelog fragments
* feat: validate bazaar config on server startup * fix: python format * chore: changelog fragments * feat: pr feedback * format/lint & handle empty method string in ValidateDiscoveryExtensionSpec * chore: ruff format python facilitator * fix: validation * fix: lint * fix: pr reviewer feedback * fix: format python
* fix: erc-6492 factory call was server driven * fix: builds * feat: pr review feedback * feat: enable 6492 deploys for x402.org * fix: format
* Update docs/extensions/bazaar.mdx Generated-By: mintlify-agent Mintlify-Source: dashboard-editor * Update docs/extensions/bazaar.mdx Generated-By: mintlify-agent Mintlify-Source: dashboard-editor --------- Co-authored-by: mintlify[bot] <109931778+mintlify[bot]@users.noreply.github.com>
Adds wallet-agnostic smart wallet verification to the SVM facilitator. Verifies payment outcomes by inspecting CPI inner instructions from transaction simulation, rather than parsing each wallet type's proprietary instruction format. Works for any smart wallet program (Squads, Swig, SPL Governance, Metaplex Core, etc.) that executes TransferChecked via CPI. Dual-path verification: - Path 1 (static): strict positional instruction validation for standard wallets. Fast, preserves existing behavior. Instruction cap raised 6 -> 7 so Phantom transactions carrying wallet-injected Lighthouse assertions pass statically (see #828, #2097). - Path 2 (simulation): outcome-based verification reached only when Path 1 fails for a recoverable layout reason. Semantic rejections (amount/mint/ recipient/memo mismatch, self-spend, failed simulation) return their real reason instead of being masked behind a smart_wallet_* code. Security model: - Fee payer isolation (fee payer never appears in instruction accounts), resolving Address Lookup Tables first so hidden accounts are caught. - Operator-configurable compute budget caps. - Program allowlist gating which programs reach simulation (Squads x2, Swig, SPL Governance, Metaplex Core, Lighthouse). - Exactly one matching TransferChecked in the CPI trace. - Post-settlement verification (TOCTOU defense): confirms the transfer executed on-chain via inner instructions, with a balance-delta fallback for both SPL Token and Token-2022. - Seller-required memo enforced in Path 2 at parity with Path 1. The internal _verify reports which path validated the payment so settle() knows when post-settlement verification is required without re-deriving it. The constructor requires all four smart-wallet signer methods (including fetchAddressLookupTables) so misconfiguration fails at construction, not at verify time. 15 dedicated smart-wallet tests plus path-classification, ALT-failure, and 7-instruction Phantom coverage. 190/190 passing. Rebased onto current main, preserving the message-hash settlement cache key. Made-with: Claude Code
PR #1527 merged without a changeset, so the simulation-based smart wallet verification feature would ship without a version bump or changelog entry. This adds the missing @x402/svm minor changeset. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* fix service metadata ts * same for py * same for go * clean up * fix e2e * add changelogs * map outputSchema to bazaar extension * fix format
* Add Concordium exact scheme for Concordium blockchain integration * Update Concordium schema design to match desired Coinbase x402 architecture * Update validation rules: - exact amount - signature SHOULD -> MUST - Make spec implementation agnostic - Update asset "" * Update Asset PaymentRequirements: - An empty string MAY represent the network's native asset * docs(spec): align Concordium exact sponsorship + clarifications * docs(spec): tighten Concordium exact scope + preflight * docs(spec): use CCD for native asset --------- Co-authored-by: Oleg <oleh.drozd@boostylabs.com>
* feat(evm): add auth-capture client scheme Client-side auth-capture for @x402/evm: detects auth-capture payment requirements and signs the payload (ERC-3009 default, Permit2 alternative) over the payer-agnostic PaymentInfo hash. Server and facilitator support follow separately. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * chore(evm): trim speculative comment in auth-capture constants Drops the speculative chain-coverage paragraph flagged in review; keeps the address provenance note. No functional change. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * chore(evm): move auth-capture attribution to package NOTICE Per review feedback, attribution belongs at the @x402/evm package root rather than the repo-level NOTICE. Wording covers only the client portion of the TS implementation, since that is all that upstreams in this PR. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* require TransferChecked discriminator * changeset
* feat(svm): add usage-based upto payment scheme * add examples * spec fixes: settle payload, receiverAuth and withdrawdelay * align with spec * revert back to payload.authorizedSigner; extend toFacilitatorSvmSigner; do full sim before broadcasting open * auto refund client when route handler fails * make verify and settle stateless and independent * add rent cleanup manager * working examples * add dynamicExtraFields * rent cleanup must not race in-flight settle * minor fixes * add settlement cache * pr review * fix(svm): satisfy CI formatting checks * align with payment flow * update spec + README * pr review * add e2e tests * align mcp * reject already open * open layout hardening * allow lighthouse+memo * add delete to settle cache and move upsertChannelStorage before broadcast * enforce maxChannelLifetimSecs at deposit --------- Co-authored-by: Ludo Galabru <ludo.galabru@solana.org>
* Update docs/schemes/upto.mdx Generated-By: mintlify-agent Mintlify-Source: dashboard-editor * Update docs/schemes/upto.mdx Generated-By: mintlify-agent Mintlify-Source: dashboard-editor * Update docs/schemes/upto.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>
* add payment flow * core plumbing for svm upto * align mcp * pr feedback 1-3 * pr feedback 4-6
Generated-By: mintlify-agent Mintlify-Source: dashboard-editor Co-authored-by: mintlify[bot] <109931778+mintlify[bot]@users.noreply.github.com>
* siwx: bind client challenges to the request origin * removed resources origin check
* Update docs/extensions/sign-in-with-x.mdx Generated-By: mintlify-agent Mintlify-Source: dashboard-editor * Update docs/extensions/sign-in-with-x.mdx Generated-By: mintlify-agent Mintlify-Source: dashboard-editor --------- Co-authored-by: mintlify[bot] <109931778+mintlify[bot]@users.noreply.github.com>
* add spendControls * add svm stablecoins * refactor svm assets * make non-default assets optin * pr review
* Update docs/getting-started/quickstart-for-buyers.mdx Generated-By: mintlify-agent Mintlify-Source: dashboard-editor * Update docs/advanced-concepts/lifecycle-hooks.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(evm): correct Monad USDC v1 EIP-712 domain name to "USDC" #3105 corrected the v2 default-asset tables but left the legacy v1 network tables in the Go and Python SDKs on "USD Coin". The v1 exact client reads these tables to build the EIP-3009 signing domain, so v1 payments on Monad still fail on-chain signature recovery. TypeScript needs no change; its v1 path resolves through the already-fixed shared table. * chore: changelog fragments for the v1 Monad USDC domain fix
) * feat(ts): add ComputeBudget instructions to svm upto transactions Without a SetComputeUnitLimit, the runtime derives 200k CU per non-builtin instruction (SIMD-0170), so every upto transaction reserved 400-403k CU while consuming 2-50k. Block and per-account cost accounting charge the reserved amount, and priority fees are charged on the requested limit. - Client open builder: prefix SetComputeUnitLimit (default 90k, ~2x observed consumption) + SetComputeUnitPrice (default 1 microlamport/CU), overridable or removable via BuildOpenArgs / UptoClientSvmConfig. The default prefix passes verifyOpenTransaction under the default caps. - Facilitator submitSettle (claim, cancel, cleanup close + reclaim batches): derive the limit from a pre-broadcast simulation (2x unitsConsumed + 25k headroom, clamped to the 1.4M per-tx max), falling back to 400k when simulation is unavailable so a sim outage is never riskier than the previous behavior. Attach a configurable SetComputeUnitPrice (UptoSvmFacilitatorConfig / UptoSvmRentCleanupManagerConfig, default 1). * refactor(ts): size svm upto settlement compute statically instead of via simulation Per review discussion: static limits keep the time-critical claim free of an extra RPC round-trip, a stale-blockhash window, and a fallback code path, while the current upto shape (single-recipient distribution, standard SPL Token mints) makes the worst case predictable. - submitSettle: SetComputeUnitLimit defaults to DEFAULT_SETTLE_COMPUTE_UNIT_LIMIT (100k; measured warm-ATA claim ~21.6k + ~25k for a recreated recipient ATA), overridable per call and via settleComputeUnitLimit on UptoSvmFacilitatorConfig and UptoSvmRentCleanupManagerConfig. - Reclaim batches size per channel: 25k + 5k x batch (measured ~320 CU/reclaim, mint-independent), clamped to the per-tx max. - Defaults assume standard SPL Token behavior; compute-heavy Token-2022 extension mints (e.g. transfer hooks) need explicit overrides — same assumption documented on the client open default.
The v1-to-v2 network mapping table listed `solana:devnet` and `solana:mainnet`. Neither is a valid CAIP-2 identifier: the solana namespace uses the first 32 characters of the base58 genesis hash, and normalizeNetwork() in typescript/packages/mechanisms/svm/src/constants.ts throws "Unsupported SVM network" for anything outside the supported set. Replace them with the values V1_TO_V2_NETWORK_MAP actually holds (constants.ts:53-54), which the Go and Python SDKs and the e2e config also use, and which every other docs page already documents.
…3183) UptoSvmFacilitatorConfig.rpc (and the rent cleanup manager's config) now accept a pre-built RPC client, preferred over constructing one from rpcUrl. Lets a facilitator route channel claim/cleanup sends through its own paced/instrumented transport instead of an unmanaged raw client.
* feat: add solana upto core work to go sdk * feat: added client implementation * feat: added server implementation * feat: added facilitator implementation * feat: added integration tests * feat: update .mds * feat: add client examples * feat: add server examples * feat: add facilitator example * feat: add e2e integration * feat: add changeset fragments * fix: add typescript bug fixes * feat: AI PR review Correctness: - ResolveTokenProgram no longer routes a registry lookup through MustPublicKeyFromBase58, and GetStablecoinTokenProgram honors its documented SPL Token default when a symbol is registered without a program. Same in TS, where the gap surfaced as undefined. - The TS upto client validates extra.tokenProgram through the shared parser the facilitator already uses, so a broken challenge fails naming the field rather than after a round trip. Go already did this. - A reclaim batch that fails to broadcast reports every channel in it through onError, not just the first. Both SDKs. - Cleanup returns on a canceled context instead of walking the remaining records over a dead connection during Stop. Clean-up: - Collapse VerifiedOpenChannel onto the channel keys it duplicated, drop the six fields nothing read, and project settlement inputs through a method instead of respelling the key set at each call site. - Rename SettlementSimChannel to settlementChannel: it builds the real claim too. - Unexport the facilitator plumbing types; nothing outside the package uses them. - Name the ComputeBudget instruction discriminators and the remaining channel account offsets, and correct the offsets' rationale. - Delete Channel.DerivePDA and ErrReceiverAuthorizerMissing, both unused. Tests: - Canceled cleanup pass, failed reclaim batch reporting, incomplete-registry token program fallback, a second payment-channels open smuggled after the canonical one, and the TS client rejecting an unsupported tokenProgram. - The integration rent-cleanup case now asserts the deferral it actually checks and is named for it. Co-authored-by: Cursor <cursoragent@cursor.com> * fix: retry temporarily missing SVM upto channels RPC providers can report an open transaction as confirmed before the same channel account is visible from the replica serving account reads. Retry only missing confirmed accounts with bounded backoff in Go and TypeScript while keeping existing invalid state terminal. Co-Authored-By: Claude <noreply@anthropic.com> Co-authored-by: Cursor <cursoragent@cursor.com> * fix: fail SVM upto deposit settle before broadcast on storage failure An open transaction broadcast without a durable channel index can never be found by rent cleanup, permanently stranding the facilitator's rent. Persist the pre-broadcast index and fail closed (dedup key released, nothing broadcast) when it cannot be written, in both the Go and TypeScript SDKs. Post-confirmation bookkeeping on the claim path remains fail-open. Co-Authored-By: Claude <noreply@anthropic.com> Co-authored-by: Cursor <cursoragent@cursor.com> * fix: budget SVM upto rent cleanup reclaims per signer, add resumable scan Reclaim transactions were budgeted from one MaxTxsPerRun pool shared across every rent-payer group, so adding managed signer keys split a fixed budget instead of adding throughput. Give each group its own budget. Also remember where a budget-limited scan stopped and resume there next pass, so a backlog bigger than the budget cannot permanently starve records ordered later in storage.List/list(). Co-Authored-By: Claude <noreply@anthropic.com> Co-authored-by: Cursor <cursoragent@cursor.com> * feat: add spec §6 onchain discovery for SVM upto rent cleanup Add DiscoverChannelsByRentPayer / discoverChannelsByRentPayer: a getProgramAccounts sweep by rent_payer, independently validated against account owner, discriminator, and rederived channel PDA rather than trusting the RPC provider's filter. This recovers Distributed channels missing from offchain storage. Add matching TypeScript unit tests (previously untested) and bring its owner check to parity with the Go implementation. Co-Authored-By: Claude <noreply@anthropic.com> Co-authored-by: Cursor <cursoragent@cursor.com> * test: add golden serialization gate for SVM upto reclaim batch size Build the exact instruction set submitReclaimGroup submits (N BuildReclaimInstruction calls sharing one rent-payer fee payer) and assert the serialized transaction stays under Solana's PACKET_DATA_SIZE, deriving the largest safe batch size from the measured per-reclaim byte cost. This gates raising MaxReclaimsPerTx in facilitator configs: 16 reclaims serialize to 776 bytes, well under the 1232 byte limit, with room up to ~28. Co-Authored-By: Claude <noreply@anthropic.com> Co-authored-by: Cursor <cursoragent@cursor.com> * fix: update svm test import after rebase onto upstream stablecoin registry USDC_DEVNET_ADDRESS/USDC_MAINNET_ADDRESS moved from constants.ts to defaultAssets.ts on upstream main. Vitest doesn't type-check, so the stale import silently resolved to undefined and getChannelDistributionHash hashed an undefined recipient instead of failing at compile time. Co-Authored-By: Claude <noreply@anthropic.com> Co-authored-by: Cursor <cursoragent@cursor.com> * chore: consolidate SVM upto changelog fragments Six Go changelog entries and five TypeScript changesets had accumulated across the branch's individual fix commits, all describing hardening to a scheme that has not shipped in either SDK yet. Drop them: Go keeps the two original entries (the upto scheme itself, and the stablecoin registry, which is not upto-specific). TypeScript's upto is still unreleased, so the existing svm-upto-scheme.md changeset already covers it and needs no addition. Co-Authored-By: Claude <noreply@anthropic.com> Co-authored-by: Cursor <cursoragent@cursor.com> * fix: wire findDefaultAsset into the SVM upto client scheme Client spend controls decide whether an asset is a recognized default by calling scheme.findDefaultAsset(). Every other client scheme (SVM exact, EVM exact/upto/batch-settlement) wires this in; the SVM upto client scheme never did, so spend controls rejected canonical devnet/mainnet USDC as a non-default asset unless callers explicitly configured allowedAssets. Co-Authored-By: Claude <noreply@anthropic.com> Co-authored-by: Cursor <cursoragent@cursor.com> * fix: move SVM upto ComputeBudget overrides onto shared ClientSvmConfig Removes UptoClientSvmConfig / UptoClientConfig (TS/Go), a scheme-specific intersection type introduced alongside the upto ComputeBudget work, in favor of extending the shared ClientSvmConfig / ClientConfig that every SVM client scheme already takes. exact's client now honors the same computeUnitLimit / computeUnitPriceMicroLamports overrides instead of always using the scheme's hardcoded defaults, matching upto's client. Both are still unreleased on this branch, so this is a pre-release API consolidation, not a breaking change. Also updates the svm-upto-compute-budget changeset to describe the consolidated config surface. Co-Authored-By: Claude <noreply@anthropic.com> Co-authored-by: Cursor <cursoragent@cursor.com> * fix: drop unused assertLimit min parameter to satisfy unparam lint Every call site passed 1 for min (unsigned config fields already make 0 the only unusable floor for the fields that need no check), so unparam correctly flagged it as dead. Renamed to assertPositive with the floor hardcoded. Co-Authored-By: Claude <noreply@anthropic.com> Co-authored-by: Cursor <cursoragent@cursor.com> * feat(svm): split upto rent discovery from cleanup and inject RPC clients Address review feedback on the upto rent cleanup manager in both SDKs, and bring Go to parity with the TypeScript RPC injection from #3183. The getProgramAccounts recovery sweep no longer rides the short cleanup interval: it is a public discover() on its own interval that writes the Distributed channels it finds into storage for cleanup to reclaim. stop() now waits for the in-flight pass instead of leaving a broadcast settle orphaned. maxTxsPerRun only bounds the storage scan; per-rent-payer reclaim moves to maxTxsPerSigner so a reclaim backlog cannot starve the scan. The scan sorts by channel id before applying its resume cursor, since storage.list promises no order. The client compute-unit overrides are gone: 0 meant "omit" on upto and "use zero" on exact, which is not a coherent shared config, and no caller needed them. An empty extra.memo is now unset rather than a required empty memo. Go gains RPC *rpc.Client on the facilitator Config and RentCleanupConfig, preferred over building one from the URL, so operators can route sends through their own instrumented transport. Co-Authored-By: Claude <noreply@anthropic.com> Co-authored-by: Cursor <cursoragent@cursor.com> * fix: harden SVM upto facilitator and rent cleanup after audit review Address must-fix and should-fix findings from a Go/TypeScript parity audit: clamp reclaim batch size to a serialization-proven ceiling, reject malformed tokenProgram/amount inputs instead of silently mishandling or throwing, drop dead code, DRY up a duplicated constant, and distinguish a settlement confirmation timeout from a definite onchain rejection so a retry cannot race a transaction that may still land. Co-Authored-By: Claude <noreply@anthropic.com> Co-authored-by: Cursor <cursoragent@cursor.com> * fix: gofmt struct literal alignment in upto SVM client scheme BuildOpenArgs field values were over-aligned (stale spacing from a previously longer field name), which check-format-go's `make fmt` + git-diff check flags as unformatted even though a bare `go fmt` run against gofmt's cached/previous output looked clean locally. Co-Authored-By: Claude <noreply@anthropic.com> Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com> Co-authored-by: Claude <noreply@anthropic.com>
* implement settlement_pending
* add upto support across sdks
* fixes
* fixes
* update supporting documentation
* cleanup
* fixes
* add batch_settlement support
* fixes
* fixes
* fix batch erc20 deposit and export python error
* fixes
* more fixes
* cleanup
* fix lint
* fixes
* fix failing lint
* more fixes
* update to optional so changes are backwards-compatible
* restore old error
* revert starknet changes
* fix: treat post-broadcast receipt-processing errors as settlement_pending
* feat: pr review
* fix: pr review
* refactor: move EVM receipt-wait timeout from scheme config to signer
Per review feedback, configuring confirmationTimeoutMs on every scheme
config was inconsistent with the other SDKs: Python bounds the wait on
FacilitatorWeb3Signer and Go bounds it via the settle ctx.
toFacilitatorEvmSigner now accepts { confirmationTimeoutMs } (default
180_000, matching viem's own) and wraps waitForTransactionReceipt so the
returned signer applies the bound to every receipt wait. An explicit
per-call timeout still wins.
This reverts the confirmationTimeoutMs threading from EvmFacilitatorConfig,
ExactEvmSchemeConfig, EIP3009FacilitatorConfig, Permit2FacilitatorConfig,
UptoPermit2FacilitatorConfig (and UptoEvmScheme's constructor),
BatchSettlementEvmSchemeConfig, ExactEvmSchemeV1Config, the ten private
handler signatures, shared/settleReceipt.ts, and the mirrored
Erc20ApprovalGasSponsoringSigner interface in @x402/extensions.
Every receipt wait in @x402/evm goes through a FacilitatorEvmSigner -- the
shared settle helper, v1's two waits, and the ERC-6492 deploy waits in
eip3009.ts and deposit.ts -- so all of them inherit the bound with no
per-call-site threading. The ERC-20-approval extension path waits on the
extension's own signer, which the config approach never reached.
Co-Authored-By: Claude <noreply@anthropic.com>
* refactor: trim receipt-timeout surface to what is used
Drop the speculative API added alongside the signer bound:
- unexport DEFAULT_CONFIRMATION_TIMEOUT_MS and FacilitatorEvmSignerOptions
and remove them from the barrel; nothing consumed either. The constant is
now module-private, matching _DEFAULT_TX_GAS_LIMIT in the Python signer,
and the options shape is inlined on the parameter.
- drop the per-call timeout override. No caller passes one, so
`args.timeout ?? bound` was an untaken branch; the signer owns the bound
outright.
- drop the settleReceipt test for a signer-configured bound expiring. It
asserted the same thing as the existing receipt-wait-failure test.
Also trim narration: the four-line README bullet, the three-paragraph
option docs, and the Python constant/docstring comments.
Co-Authored-By: Claude <noreply@anthropic.com>
* fix: register scheme server in settlement-pending mechanism-error test
Upstream main's GetPaymentFlow now requires a registered scheme server
to resolve a payment flow; add the missing WithSchemeServer option so
TestProcessSettlement_MechanismErrorPreservesReasonAndTransaction
matches its sibling tests after rebasing onto main.
Co-Authored-By: Claude <noreply@anthropic.com>
* feat: pr review
* fix: format/lint
* fix: drop stale terminal-settle-failure test reintroduced during main rebase
The rebase onto x402-foundation/main resurrected a test removed in an earlier
PR review pass (transaction-hash stripping moved out of core's resource
server). Re-delete it so core stays aligned with that decision.
Co-Authored-By: Claude <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
---------
Co-authored-by: Ethan Oroshiba <ethan.oroshiba@gmail.com>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Cursor <cursoragent@cursor.com>
* Update docs/sdk-features.md Generated-By: mintlify-agent Mintlify-Source: dashboard-editor * Update docs/schemes/upto.mdx Generated-By: mintlify-agent Mintlify-Source: dashboard-editor * Update docs/getting-started/quickstart-for-sellers.mdx Generated-By: mintlify-agent Mintlify-Source: dashboard-editor --------- Co-authored-by: mintlify[bot] <109931778+mintlify[bot]@users.noreply.github.com>
Generated-By: mintlify-agent Mintlify-Source: dashboard-editor Co-authored-by: mintlify[bot] <109931778+mintlify[bot]@users.noreply.github.com>
* add spend controls * align mcp * review feedback * add test * unify money coversion * add guard * rebase
Generated-By: mintlify-agent Mintlify-Source: dashboard-editor Co-authored-by: mintlify[bot] <109931778+mintlify[bot]@users.noreply.github.com>
* spend controls go * Address review: share EVM money conversion and document MCP spend-control options. Co-authored-by: Cursor <cursoragent@cursor.com> * Apply MCP spend-control Options in NewX402MCPClient as well as FromConfig. Co-authored-by: Cursor <cursoragent@cursor.com> * Remove unused ExactEvmScheme.ConvertToTokenAmount that collided with the package helper. Co-authored-by: Cursor <cursoragent@cursor.com> * clean up dead code * revert duplicated mcp wrapper options * unify money parser * add guard * rebase --------- Co-authored-by: Cursor <cursoragent@cursor.com>
* Update docs/sdk-features.md 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/sdk-features.md 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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Tests
Checklist