chore(release): version packages (alpha)#175
Merged
Merged
Conversation
ae5426d to
67cda2e
Compare
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
2 tasks
vraspar
approved these changes
May 23, 2026
vraspar
added a commit
that referenced
this pull request
May 23, 2026
#176) ## Summary Set `linked` to `[]` in `.changeset/config.json`. Each `@x402r/*` package versions independently. ## Why `@x402r/sdk` and `@x402r/helpers` don't import from each other. Their dep graphs share `@x402r/core` only: - `@x402r/sdk` → `@x402r/core`, `@x402r/erc8004`, `viem` - `@x402r/helpers` → `@x402r/core`, `@x402r/evm` The previous linked group `[[core, sdk, helpers]]` enforced lockstep version bumps for no technical reason. It was added on Mar 9 (commit `a60bd32`) with the stated reason "version bumps stay in sync across packages" — a UX preference, not a correctness constraint. Industry standard for TS monorepo SDKs is unlinked. Verified against wagmi, viem, vercel/ai, TanStack/query — all four use `linked: []`. ## Effect After this lands: - `@x402r/core` can ship a patch fix without bumping sdk/helpers. - `@x402r/sdk` can ship a feature without bumping core/helpers. - `@x402r/helpers` can ship a fix without bumping sdk. Compatibility between packages is conveyed via `"@x402r/core": "workspace:^"` in sdk and helpers, resolved at publish time — same pattern peers use. ## No effect on pending Version PR #175 Every existing changeset under `.changeset/sdk-authcapture-*.md` explicitly names its affected packages in front-matter, so the linked grouping doesn't change the bump plan for the current alpha cycle. After #175 merges and `0.3.0-alpha.0` ships, future releases benefit from the unlinked configuration. ## Test plan - [x] Pre-commit hook (biome + build + typecheck) passed locally. - [ ] After merge, the next `changeset version` run recomputes bumps with `linked: []`. Existing pending changesets explicitly name each affected package, so behavior should be unchanged for the alpha cycle. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.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.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and publish to npm yourself or setup this action to publish automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
mainis currently in pre mode so this branch has prereleases rather than normal releases. If you want to exit prereleases, runchangeset pre exitonmain.Releases
@x402r/cli@0.3.0-alpha.0
Minor Changes
#123
fc56faeThanks @vraspar! - authCapture wire format glue and autoCapture builder.Breaking
@x402r/helpersforwardToArbiterskips settlements whose scheme is not'authCapture'(was'commerce').@x402r/helpersand@x402r/cliwiden@x402r/evmto>=0.2.0-alpha.0 <0.3.0.@x402r/cliswitches fromregisterCommerceEvmSchemetoregisterAuthCaptureEvmScheme.New
x402rDefaults(input) → AuthCaptureExtrafrom@x402r/helpers— onlycaptureAuthorizeris required.@x402r/helpers:AuthCaptureExtra,AuthCapturePayload,Eip3009Payload,Permit2Payload,PaymentInfoStruct, plus payload type guards.Patch Changes
#125
b7a930fThanks @vraspar! - Add Permit2 payer-side helpers.New
@x402r/core/payment/permit2:signPermit2Authorization,createPermit2ApprovalTx,getPermit2AllowanceReadParams, and thePERMIT2_ADDRESSconstant. Returns{collectorData, tokenCollector}suitable forpayment.charge/payment.authorize.@x402r/sdkre-exports the four Permit2 surfaces.@x402r/cliadds--asset-transfer-method <eip3009|permit2>to filteraccepts[]alongside--chain. Invalid value or empty match set errors with aMalformed402Error(exit code 2).@x402r/core@0.3.0-alpha.0
Minor Changes
#123
fc56faeThanks @vraspar! - authCapture wire format glue and autoCapture builder.Breaking
@x402r/helpersforwardToArbiterskips settlements whose scheme is not'authCapture'(was'commerce').@x402r/helpersand@x402r/cliwiden@x402r/evmto>=0.2.0-alpha.0 <0.3.0.@x402r/cliswitches fromregisterCommerceEvmSchemetoregisterAuthCaptureEvmScheme.New
x402rDefaults(input) → AuthCaptureExtrafrom@x402r/helpers— onlycaptureAuthorizeris required.@x402r/helpers:AuthCaptureExtra,AuthCapturePayload,Eip3009Payload,Permit2Payload,PaymentInfoStruct, plus payload type guards.#122
cc02695Thanks @vraspar! - Lift the SDK to the authCapture contract surface.Breaking — operator methods
release()→capture()(SDK + on-chain).refundInEscrow(paymentInfo, amount, data)→voidPayment(paymentInfo, data?).voidis full-only and drops theamountargument; use partial capture + void remainder for the old partial-refund flow.refundPostEscrow()→refund(). Allowance helpers renamed:approvePostEscrowRefund→approveRefundAllowance,getPostEscrowRefundAllowance→getRefundAllowance.OperatorConfig.feeRecipient→feeReceiver.OperatorSlotsfields renamed toauthorizeHook,captureCondition,feeReceiver, etc.Breaking — plugin terminology
recorder/Recorder→hook/Hookacross ABIs, factories, types, exports, and addresses.actions/recorder/→actions/hook/.getRecorderPaymentInfo→getHookPaymentInfo.getPayerPaymentsFromRecorder→getPayerPaymentsFromHook.getReceiverPaymentsFromRecorder→getReceiverPaymentsFromHook.recorderCombinator*→hookCombinator*.paymentIndexRecorder→paymentIndexRecorderHook.authorizationTimeRecorder→authorizationTimeRecorderHook.X402rChainConfig.recorders→hooks.RecorderSingletonAddresses→HookSingletonAddresses.getRecorderSingletons→getHookSingletons.iRecorderAbi→iHookAbi.Breaking — types, slots, events, errors
ConditionConfig(constructor plugin-config arg) →PluginConfig. Shape is now{authorize, charge, capture, void, refund} × {PreActionCondition, PostActionHook}per action plusfeeReceiverandfeeCalculator. Use named-field syntax.AUTHORIZE_CONDITION→AUTHORIZE_PRE_ACTION_CONDITION,AUTHORIZE_RECORDER→AUTHORIZE_POST_ACTION_HOOK.FEE_RECIPIENT→FEE_RECEIVER.<Verb>Executed:AuthorizationCreated→AuthorizeExecuted,ReleaseExecuted→CaptureExecuted,RefundInEscrowExecuted→VoidExecuted,RefundPostEscrowExecuted→RefundExecuted.VoidExecutedno longer carriesamount.FeesDistributed.arbiterAmount→operatorAmount.ConditionNotMet→PreActionConditionNotMet.Breaking — chains and addresses
x402rChainsreduced to Base mainnet (8453) and Base Sepolia (84532). Canonical addresses now point at the auditedcommerce-paymentsv1.0.0 deployment ofAuthCaptureEscrow.usdcTvlLimitremoved from the canonical config and helpers re-export. Marketplace and delivery-protection presets now wireauthorizePreActionCondition: zeroAddress.Breaking — query scoping
query.*methods (getPayerPayments,getReceiverPayments,getPayment) auto-scope hook reads to the SDK's configuredoperatorAddress. Direct callers of@x402r/core/actions/hook/*must passoperatorAddressexplicitly to opt in.getPayerPaymentandgetReceiverPaymentnarrow toPromise<PaymentInfo | null>.Partial in-escrow refund migration
The old
refundInEscrow(paymentInfo, amount)has no single-call replacement. Use partial capture + void remainder:#125
b7a930fThanks @vraspar! - Add Permit2 payer-side helpers.New
@x402r/core/payment/permit2:signPermit2Authorization,createPermit2ApprovalTx,getPermit2AllowanceReadParams, and thePERMIT2_ADDRESSconstant. Returns{collectorData, tokenCollector}suitable forpayment.charge/payment.authorize.@x402r/sdkre-exports the four Permit2 surfaces.@x402r/cliadds--asset-transfer-method <eip3009|permit2>to filteraccepts[]alongside--chain. Invalid value or empty match set errors with aMalformed402Error(exit code 2).#126
598f461Thanks @vraspar! - Add thePaymentInfonamespace andreconstructPaymentInfoWireto bridge the authCapture wire format to the bigint shape SDK actions accept.New
PaymentInfois now both a type and a namespace const in@x402r/core(re-exported from@x402r/sdk). UsePaymentInfo.fromWire(wire)to convert a JSON-formPaymentInfoWireto the bigintPaymentInfo, andPaymentInfo.toWire(info)for the reverse.PaymentInfoWiretype in@x402r/core— derived from the contract ABI, stays in sync at compile time when the ABI changes.reconstructPaymentInfoWire(context)in@x402r/helpers— builds the wire JSON form from a verifiedSettleResultContext.@x402r/coreno longer declares@x402r/evmas a peer dependency. Consumers using only@x402r/core(arbiters, standalone wallet code) no longer need@x402r/evminstalled.Breaking
@x402r/helpers:toPaymentInforemoved. UsePaymentInfo.fromWirefrom@x402r/sdkor@x402r/core. Arbiters and standalone workers can now drop the@x402r/helpersdependency entirely.@x402r/helpers:reconstructPaymentInfoStructrenamed toreconstructPaymentInfoWire. Return type renamed fromPaymentInfoStructtoPaymentInfoWire.@x402r/helpers:forwardToArbiterPOST body field renamed frompaymentInfoStructtopaymentInfoWire. Arbiters should consumereq.body.paymentInfoWireand run it throughPaymentInfo.fromWire.@x402r/helpers@0.3.0-alpha.0
Minor Changes
#123
fc56faeThanks @vraspar! - authCapture wire format glue and autoCapture builder.Breaking
@x402r/helpersforwardToArbiterskips settlements whose scheme is not'authCapture'(was'commerce').@x402r/helpersand@x402r/cliwiden@x402r/evmto>=0.2.0-alpha.0 <0.3.0.@x402r/cliswitches fromregisterCommerceEvmSchemetoregisterAuthCaptureEvmScheme.New
x402rDefaults(input) → AuthCaptureExtrafrom@x402r/helpers— onlycaptureAuthorizeris required.@x402r/helpers:AuthCaptureExtra,AuthCapturePayload,Eip3009Payload,Permit2Payload,PaymentInfoStruct, plus payload type guards.#122
cc02695Thanks @vraspar! - Lift the SDK to the authCapture contract surface.Breaking — operator methods
release()→capture()(SDK + on-chain).refundInEscrow(paymentInfo, amount, data)→voidPayment(paymentInfo, data?).voidis full-only and drops theamountargument; use partial capture + void remainder for the old partial-refund flow.refundPostEscrow()→refund(). Allowance helpers renamed:approvePostEscrowRefund→approveRefundAllowance,getPostEscrowRefundAllowance→getRefundAllowance.OperatorConfig.feeRecipient→feeReceiver.OperatorSlotsfields renamed toauthorizeHook,captureCondition,feeReceiver, etc.Breaking — plugin terminology
recorder/Recorder→hook/Hookacross ABIs, factories, types, exports, and addresses.actions/recorder/→actions/hook/.getRecorderPaymentInfo→getHookPaymentInfo.getPayerPaymentsFromRecorder→getPayerPaymentsFromHook.getReceiverPaymentsFromRecorder→getReceiverPaymentsFromHook.recorderCombinator*→hookCombinator*.paymentIndexRecorder→paymentIndexRecorderHook.authorizationTimeRecorder→authorizationTimeRecorderHook.X402rChainConfig.recorders→hooks.RecorderSingletonAddresses→HookSingletonAddresses.getRecorderSingletons→getHookSingletons.iRecorderAbi→iHookAbi.Breaking — types, slots, events, errors
ConditionConfig(constructor plugin-config arg) →PluginConfig. Shape is now{authorize, charge, capture, void, refund} × {PreActionCondition, PostActionHook}per action plusfeeReceiverandfeeCalculator. Use named-field syntax.AUTHORIZE_CONDITION→AUTHORIZE_PRE_ACTION_CONDITION,AUTHORIZE_RECORDER→AUTHORIZE_POST_ACTION_HOOK.FEE_RECIPIENT→FEE_RECEIVER.<Verb>Executed:AuthorizationCreated→AuthorizeExecuted,ReleaseExecuted→CaptureExecuted,RefundInEscrowExecuted→VoidExecuted,RefundPostEscrowExecuted→RefundExecuted.VoidExecutedno longer carriesamount.FeesDistributed.arbiterAmount→operatorAmount.ConditionNotMet→PreActionConditionNotMet.Breaking — chains and addresses
x402rChainsreduced to Base mainnet (8453) and Base Sepolia (84532). Canonical addresses now point at the auditedcommerce-paymentsv1.0.0 deployment ofAuthCaptureEscrow.usdcTvlLimitremoved from the canonical config and helpers re-export. Marketplace and delivery-protection presets now wireauthorizePreActionCondition: zeroAddress.Breaking — query scoping
query.*methods (getPayerPayments,getReceiverPayments,getPayment) auto-scope hook reads to the SDK's configuredoperatorAddress. Direct callers of@x402r/core/actions/hook/*must passoperatorAddressexplicitly to opt in.getPayerPaymentandgetReceiverPaymentnarrow toPromise<PaymentInfo | null>.Partial in-escrow refund migration
The old
refundInEscrow(paymentInfo, amount)has no single-call replacement. Use partial capture + void remainder:#126
598f461Thanks @vraspar! - Add thePaymentInfonamespace andreconstructPaymentInfoWireto bridge the authCapture wire format to the bigint shape SDK actions accept.New
PaymentInfois now both a type and a namespace const in@x402r/core(re-exported from@x402r/sdk). UsePaymentInfo.fromWire(wire)to convert a JSON-formPaymentInfoWireto the bigintPaymentInfo, andPaymentInfo.toWire(info)for the reverse.PaymentInfoWiretype in@x402r/core— derived from the contract ABI, stays in sync at compile time when the ABI changes.reconstructPaymentInfoWire(context)in@x402r/helpers— builds the wire JSON form from a verifiedSettleResultContext.@x402r/coreno longer declares@x402r/evmas a peer dependency. Consumers using only@x402r/core(arbiters, standalone wallet code) no longer need@x402r/evminstalled.Breaking
@x402r/helpers:toPaymentInforemoved. UsePaymentInfo.fromWirefrom@x402r/sdkor@x402r/core. Arbiters and standalone workers can now drop the@x402r/helpersdependency entirely.@x402r/helpers:reconstructPaymentInfoStructrenamed toreconstructPaymentInfoWire. Return type renamed fromPaymentInfoStructtoPaymentInfoWire.@x402r/helpers:forwardToArbiterPOST body field renamed frompaymentInfoStructtopaymentInfoWire. Arbiters should consumereq.body.paymentInfoWireand run it throughPaymentInfo.fromWire.Patch Changes
fc56fae,cc02695,b7a930f,598f461]:@x402r/sdk@0.3.0-alpha.0
Minor Changes
#122
cc02695Thanks @vraspar! - Lift the SDK to the authCapture contract surface.Breaking — operator methods
release()→capture()(SDK + on-chain).refundInEscrow(paymentInfo, amount, data)→voidPayment(paymentInfo, data?).voidis full-only and drops theamountargument; use partial capture + void remainder for the old partial-refund flow.refundPostEscrow()→refund(). Allowance helpers renamed:approvePostEscrowRefund→approveRefundAllowance,getPostEscrowRefundAllowance→getRefundAllowance.OperatorConfig.feeRecipient→feeReceiver.OperatorSlotsfields renamed toauthorizeHook,captureCondition,feeReceiver, etc.Breaking — plugin terminology
recorder/Recorder→hook/Hookacross ABIs, factories, types, exports, and addresses.actions/recorder/→actions/hook/.getRecorderPaymentInfo→getHookPaymentInfo.getPayerPaymentsFromRecorder→getPayerPaymentsFromHook.getReceiverPaymentsFromRecorder→getReceiverPaymentsFromHook.recorderCombinator*→hookCombinator*.paymentIndexRecorder→paymentIndexRecorderHook.authorizationTimeRecorder→authorizationTimeRecorderHook.X402rChainConfig.recorders→hooks.RecorderSingletonAddresses→HookSingletonAddresses.getRecorderSingletons→getHookSingletons.iRecorderAbi→iHookAbi.Breaking — types, slots, events, errors
ConditionConfig(constructor plugin-config arg) →PluginConfig. Shape is now{authorize, charge, capture, void, refund} × {PreActionCondition, PostActionHook}per action plusfeeReceiverandfeeCalculator. Use named-field syntax.AUTHORIZE_CONDITION→AUTHORIZE_PRE_ACTION_CONDITION,AUTHORIZE_RECORDER→AUTHORIZE_POST_ACTION_HOOK.FEE_RECIPIENT→FEE_RECEIVER.<Verb>Executed:AuthorizationCreated→AuthorizeExecuted,ReleaseExecuted→CaptureExecuted,RefundInEscrowExecuted→VoidExecuted,RefundPostEscrowExecuted→RefundExecuted.VoidExecutedno longer carriesamount.FeesDistributed.arbiterAmount→operatorAmount.ConditionNotMet→PreActionConditionNotMet.Breaking — chains and addresses
x402rChainsreduced to Base mainnet (8453) and Base Sepolia (84532). Canonical addresses now point at the auditedcommerce-paymentsv1.0.0 deployment ofAuthCaptureEscrow.usdcTvlLimitremoved from the canonical config and helpers re-export. Marketplace and delivery-protection presets now wireauthorizePreActionCondition: zeroAddress.Breaking — query scoping
query.*methods (getPayerPayments,getReceiverPayments,getPayment) auto-scope hook reads to the SDK's configuredoperatorAddress. Direct callers of@x402r/core/actions/hook/*must passoperatorAddressexplicitly to opt in.getPayerPaymentandgetReceiverPaymentnarrow toPromise<PaymentInfo | null>.Partial in-escrow refund migration
The old
refundInEscrow(paymentInfo, amount)has no single-call replacement. Use partial capture + void remainder:#125
b7a930fThanks @vraspar! - Add Permit2 payer-side helpers.New
@x402r/core/payment/permit2:signPermit2Authorization,createPermit2ApprovalTx,getPermit2AllowanceReadParams, and thePERMIT2_ADDRESSconstant. Returns{collectorData, tokenCollector}suitable forpayment.charge/payment.authorize.@x402r/sdkre-exports the four Permit2 surfaces.@x402r/cliadds--asset-transfer-method <eip3009|permit2>to filteraccepts[]alongside--chain. Invalid value or empty match set errors with aMalformed402Error(exit code 2).Patch Changes
fc56fae,cc02695,b7a930f,598f461]: