Skip to content

chore(release): version packages (alpha)#175

Merged
vraspar merged 1 commit into
mainfrom
changeset-release/main
May 23, 2026
Merged

chore(release): version packages (alpha)#175
vraspar merged 1 commit into
mainfrom
changeset-release/main

Conversation

@x402r-release-bot
Copy link
Copy Markdown
Contributor

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.

⚠️⚠️⚠️⚠️⚠️⚠️

main is currently in pre mode so this branch has prereleases rather than normal releases. If you want to exit prereleases, run changeset pre exit on main.

⚠️⚠️⚠️⚠️⚠️⚠️

Releases

@x402r/cli@0.3.0-alpha.0

Minor Changes

  • #123 fc56fae Thanks @vraspar! - authCapture wire format glue and autoCapture builder.

    Breaking

    • @x402r/helpers forwardToArbiter skips settlements whose scheme is not 'authCapture' (was 'commerce').
    • @x402r/helpers and @x402r/cli widen @x402r/evm to >=0.2.0-alpha.0 <0.3.0.
    • @x402r/cli switches from registerCommerceEvmScheme to registerAuthCaptureEvmScheme.

    New

    • x402rDefaults(input) → AuthCaptureExtra from @x402r/helpers — only captureAuthorizer is required.
    • Wire-format types re-exported from @x402r/helpers: AuthCaptureExtra, AuthCapturePayload, Eip3009Payload, Permit2Payload, PaymentInfoStruct, plus payload type guards.

Patch Changes

  • #125 b7a930f Thanks @vraspar! - Add Permit2 payer-side helpers.

    New

    • @x402r/core/payment/permit2: signPermit2Authorization, createPermit2ApprovalTx, getPermit2AllowanceReadParams, and the PERMIT2_ADDRESS constant. Returns {collectorData, tokenCollector} suitable for payment.charge / payment.authorize.
    • @x402r/sdk re-exports the four Permit2 surfaces.
    • @x402r/cli adds --asset-transfer-method <eip3009|permit2> to filter accepts[] alongside --chain. Invalid value or empty match set errors with a Malformed402Error (exit code 2).

@x402r/core@0.3.0-alpha.0

Minor Changes

  • #123 fc56fae Thanks @vraspar! - authCapture wire format glue and autoCapture builder.

    Breaking

    • @x402r/helpers forwardToArbiter skips settlements whose scheme is not 'authCapture' (was 'commerce').
    • @x402r/helpers and @x402r/cli widen @x402r/evm to >=0.2.0-alpha.0 <0.3.0.
    • @x402r/cli switches from registerCommerceEvmScheme to registerAuthCaptureEvmScheme.

    New

    • x402rDefaults(input) → AuthCaptureExtra from @x402r/helpers — only captureAuthorizer is required.
    • Wire-format types re-exported from @x402r/helpers: AuthCaptureExtra, AuthCapturePayload, Eip3009Payload, Permit2Payload, PaymentInfoStruct, plus payload type guards.
  • #122 cc02695 Thanks @vraspar! - Lift the SDK to the authCapture contract surface.

    Breaking — operator methods

    • release()capture() (SDK + on-chain).
    • refundInEscrow(paymentInfo, amount, data)voidPayment(paymentInfo, data?). void is full-only and drops the amount argument; use partial capture + void remainder for the old partial-refund flow.
    • refundPostEscrow()refund(). Allowance helpers renamed: approvePostEscrowRefundapproveRefundAllowance, getPostEscrowRefundAllowancegetRefundAllowance.
    • OperatorConfig.feeRecipientfeeReceiver. OperatorSlots fields renamed to authorizeHook, captureCondition, feeReceiver, etc.

    Breaking — plugin terminology

    • recorder / Recorderhook / Hook across ABIs, factories, types, exports, and addresses.
    • actions/recorder/actions/hook/. getRecorderPaymentInfogetHookPaymentInfo. getPayerPaymentsFromRecordergetPayerPaymentsFromHook. getReceiverPaymentsFromRecordergetReceiverPaymentsFromHook.
    • recorderCombinator*hookCombinator*. paymentIndexRecorderpaymentIndexRecorderHook. authorizationTimeRecorderauthorizationTimeRecorderHook.
    • X402rChainConfig.recordershooks. RecorderSingletonAddressesHookSingletonAddresses. getRecorderSingletonsgetHookSingletons. iRecorderAbiiHookAbi.

    Breaking — types, slots, events, errors

    • ConditionConfig (constructor plugin-config arg) → PluginConfig. Shape is now {authorize, charge, capture, void, refund} × {PreActionCondition, PostActionHook} per action plus feeReceiver and feeCalculator. Use named-field syntax.
    • Slot getters renamed: AUTHORIZE_CONDITIONAUTHORIZE_PRE_ACTION_CONDITION, AUTHORIZE_RECORDERAUTHORIZE_POST_ACTION_HOOK. FEE_RECIPIENTFEE_RECEIVER.
    • Events renamed to <Verb>Executed: AuthorizationCreatedAuthorizeExecuted, ReleaseExecutedCaptureExecuted, RefundInEscrowExecutedVoidExecuted, RefundPostEscrowExecutedRefundExecuted. VoidExecuted no longer carries amount. FeesDistributed.arbiterAmountoperatorAmount.
    • Errors: ConditionNotMetPreActionConditionNotMet.

    Breaking — chains and addresses

    • x402rChains reduced to Base mainnet (8453) and Base Sepolia (84532). Canonical addresses now point at the audited commerce-payments v1.0.0 deployment of AuthCaptureEscrow.
    • usdcTvlLimit removed from the canonical config and helpers re-export. Marketplace and delivery-protection presets now wire authorizePreActionCondition: zeroAddress.

    Breaking — query scoping

    • SDK query.* methods (getPayerPayments, getReceiverPayments, getPayment) auto-scope hook reads to the SDK's configured operatorAddress. Direct callers of @x402r/core/actions/hook/* must pass operatorAddress explicitly to opt in. getPayerPayment and getReceiverPayment narrow to Promise<PaymentInfo | null>.

    Partial in-escrow refund migration

    The old refundInEscrow(paymentInfo, amount) has no single-call replacement. Use partial capture + void remainder:

    const { capturableAmount } = await client.payment.getAmounts(paymentInfo);
    await client.payment.capture(
      paymentInfo,
      capturableAmount - refundToPayer,
      "0x",
    );
    await client.payment.voidPayment(paymentInfo);
  • #125 b7a930f Thanks @vraspar! - Add Permit2 payer-side helpers.

    New

    • @x402r/core/payment/permit2: signPermit2Authorization, createPermit2ApprovalTx, getPermit2AllowanceReadParams, and the PERMIT2_ADDRESS constant. Returns {collectorData, tokenCollector} suitable for payment.charge / payment.authorize.
    • @x402r/sdk re-exports the four Permit2 surfaces.
    • @x402r/cli adds --asset-transfer-method <eip3009|permit2> to filter accepts[] alongside --chain. Invalid value or empty match set errors with a Malformed402Error (exit code 2).
  • #126 598f461 Thanks @vraspar! - Add the PaymentInfo namespace and reconstructPaymentInfoWire to bridge the authCapture wire format to the bigint shape SDK actions accept.

    New

    • PaymentInfo is now both a type and a namespace const in @x402r/core (re-exported from @x402r/sdk). Use PaymentInfo.fromWire(wire) to convert a JSON-form PaymentInfoWire to the bigint PaymentInfo, and PaymentInfo.toWire(info) for the reverse.
    • PaymentInfoWire type 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 verified SettleResultContext.
    • @x402r/core no longer declares @x402r/evm as a peer dependency. Consumers using only @x402r/core (arbiters, standalone wallet code) no longer need @x402r/evm installed.

    Breaking

    • @x402r/helpers: toPaymentInfo removed. Use PaymentInfo.fromWire from @x402r/sdk or @x402r/core. Arbiters and standalone workers can now drop the @x402r/helpers dependency entirely.
    • @x402r/helpers: reconstructPaymentInfoStruct renamed to reconstructPaymentInfoWire. Return type renamed from PaymentInfoStruct to PaymentInfoWire.
    • @x402r/helpers: forwardToArbiter POST body field renamed from paymentInfoStruct to paymentInfoWire. Arbiters should consume req.body.paymentInfoWire and run it through PaymentInfo.fromWire.

@x402r/helpers@0.3.0-alpha.0

Minor Changes

  • #123 fc56fae Thanks @vraspar! - authCapture wire format glue and autoCapture builder.

    Breaking

    • @x402r/helpers forwardToArbiter skips settlements whose scheme is not 'authCapture' (was 'commerce').
    • @x402r/helpers and @x402r/cli widen @x402r/evm to >=0.2.0-alpha.0 <0.3.0.
    • @x402r/cli switches from registerCommerceEvmScheme to registerAuthCaptureEvmScheme.

    New

    • x402rDefaults(input) → AuthCaptureExtra from @x402r/helpers — only captureAuthorizer is required.
    • Wire-format types re-exported from @x402r/helpers: AuthCaptureExtra, AuthCapturePayload, Eip3009Payload, Permit2Payload, PaymentInfoStruct, plus payload type guards.
  • #122 cc02695 Thanks @vraspar! - Lift the SDK to the authCapture contract surface.

    Breaking — operator methods

    • release()capture() (SDK + on-chain).
    • refundInEscrow(paymentInfo, amount, data)voidPayment(paymentInfo, data?). void is full-only and drops the amount argument; use partial capture + void remainder for the old partial-refund flow.
    • refundPostEscrow()refund(). Allowance helpers renamed: approvePostEscrowRefundapproveRefundAllowance, getPostEscrowRefundAllowancegetRefundAllowance.
    • OperatorConfig.feeRecipientfeeReceiver. OperatorSlots fields renamed to authorizeHook, captureCondition, feeReceiver, etc.

    Breaking — plugin terminology

    • recorder / Recorderhook / Hook across ABIs, factories, types, exports, and addresses.
    • actions/recorder/actions/hook/. getRecorderPaymentInfogetHookPaymentInfo. getPayerPaymentsFromRecordergetPayerPaymentsFromHook. getReceiverPaymentsFromRecordergetReceiverPaymentsFromHook.
    • recorderCombinator*hookCombinator*. paymentIndexRecorderpaymentIndexRecorderHook. authorizationTimeRecorderauthorizationTimeRecorderHook.
    • X402rChainConfig.recordershooks. RecorderSingletonAddressesHookSingletonAddresses. getRecorderSingletonsgetHookSingletons. iRecorderAbiiHookAbi.

    Breaking — types, slots, events, errors

    • ConditionConfig (constructor plugin-config arg) → PluginConfig. Shape is now {authorize, charge, capture, void, refund} × {PreActionCondition, PostActionHook} per action plus feeReceiver and feeCalculator. Use named-field syntax.
    • Slot getters renamed: AUTHORIZE_CONDITIONAUTHORIZE_PRE_ACTION_CONDITION, AUTHORIZE_RECORDERAUTHORIZE_POST_ACTION_HOOK. FEE_RECIPIENTFEE_RECEIVER.
    • Events renamed to <Verb>Executed: AuthorizationCreatedAuthorizeExecuted, ReleaseExecutedCaptureExecuted, RefundInEscrowExecutedVoidExecuted, RefundPostEscrowExecutedRefundExecuted. VoidExecuted no longer carries amount. FeesDistributed.arbiterAmountoperatorAmount.
    • Errors: ConditionNotMetPreActionConditionNotMet.

    Breaking — chains and addresses

    • x402rChains reduced to Base mainnet (8453) and Base Sepolia (84532). Canonical addresses now point at the audited commerce-payments v1.0.0 deployment of AuthCaptureEscrow.
    • usdcTvlLimit removed from the canonical config and helpers re-export. Marketplace and delivery-protection presets now wire authorizePreActionCondition: zeroAddress.

    Breaking — query scoping

    • SDK query.* methods (getPayerPayments, getReceiverPayments, getPayment) auto-scope hook reads to the SDK's configured operatorAddress. Direct callers of @x402r/core/actions/hook/* must pass operatorAddress explicitly to opt in. getPayerPayment and getReceiverPayment narrow to Promise<PaymentInfo | null>.

    Partial in-escrow refund migration

    The old refundInEscrow(paymentInfo, amount) has no single-call replacement. Use partial capture + void remainder:

    const { capturableAmount } = await client.payment.getAmounts(paymentInfo);
    await client.payment.capture(
      paymentInfo,
      capturableAmount - refundToPayer,
      "0x",
    );
    await client.payment.voidPayment(paymentInfo);
  • #126 598f461 Thanks @vraspar! - Add the PaymentInfo namespace and reconstructPaymentInfoWire to bridge the authCapture wire format to the bigint shape SDK actions accept.

    New

    • PaymentInfo is now both a type and a namespace const in @x402r/core (re-exported from @x402r/sdk). Use PaymentInfo.fromWire(wire) to convert a JSON-form PaymentInfoWire to the bigint PaymentInfo, and PaymentInfo.toWire(info) for the reverse.
    • PaymentInfoWire type 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 verified SettleResultContext.
    • @x402r/core no longer declares @x402r/evm as a peer dependency. Consumers using only @x402r/core (arbiters, standalone wallet code) no longer need @x402r/evm installed.

    Breaking

    • @x402r/helpers: toPaymentInfo removed. Use PaymentInfo.fromWire from @x402r/sdk or @x402r/core. Arbiters and standalone workers can now drop the @x402r/helpers dependency entirely.
    • @x402r/helpers: reconstructPaymentInfoStruct renamed to reconstructPaymentInfoWire. Return type renamed from PaymentInfoStruct to PaymentInfoWire.
    • @x402r/helpers: forwardToArbiter POST body field renamed from paymentInfoStruct to paymentInfoWire. Arbiters should consume req.body.paymentInfoWire and run it through PaymentInfo.fromWire.

Patch Changes

@x402r/sdk@0.3.0-alpha.0

Minor Changes

  • #122 cc02695 Thanks @vraspar! - Lift the SDK to the authCapture contract surface.

    Breaking — operator methods

    • release()capture() (SDK + on-chain).
    • refundInEscrow(paymentInfo, amount, data)voidPayment(paymentInfo, data?). void is full-only and drops the amount argument; use partial capture + void remainder for the old partial-refund flow.
    • refundPostEscrow()refund(). Allowance helpers renamed: approvePostEscrowRefundapproveRefundAllowance, getPostEscrowRefundAllowancegetRefundAllowance.
    • OperatorConfig.feeRecipientfeeReceiver. OperatorSlots fields renamed to authorizeHook, captureCondition, feeReceiver, etc.

    Breaking — plugin terminology

    • recorder / Recorderhook / Hook across ABIs, factories, types, exports, and addresses.
    • actions/recorder/actions/hook/. getRecorderPaymentInfogetHookPaymentInfo. getPayerPaymentsFromRecordergetPayerPaymentsFromHook. getReceiverPaymentsFromRecordergetReceiverPaymentsFromHook.
    • recorderCombinator*hookCombinator*. paymentIndexRecorderpaymentIndexRecorderHook. authorizationTimeRecorderauthorizationTimeRecorderHook.
    • X402rChainConfig.recordershooks. RecorderSingletonAddressesHookSingletonAddresses. getRecorderSingletonsgetHookSingletons. iRecorderAbiiHookAbi.

    Breaking — types, slots, events, errors

    • ConditionConfig (constructor plugin-config arg) → PluginConfig. Shape is now {authorize, charge, capture, void, refund} × {PreActionCondition, PostActionHook} per action plus feeReceiver and feeCalculator. Use named-field syntax.
    • Slot getters renamed: AUTHORIZE_CONDITIONAUTHORIZE_PRE_ACTION_CONDITION, AUTHORIZE_RECORDERAUTHORIZE_POST_ACTION_HOOK. FEE_RECIPIENTFEE_RECEIVER.
    • Events renamed to <Verb>Executed: AuthorizationCreatedAuthorizeExecuted, ReleaseExecutedCaptureExecuted, RefundInEscrowExecutedVoidExecuted, RefundPostEscrowExecutedRefundExecuted. VoidExecuted no longer carries amount. FeesDistributed.arbiterAmountoperatorAmount.
    • Errors: ConditionNotMetPreActionConditionNotMet.

    Breaking — chains and addresses

    • x402rChains reduced to Base mainnet (8453) and Base Sepolia (84532). Canonical addresses now point at the audited commerce-payments v1.0.0 deployment of AuthCaptureEscrow.
    • usdcTvlLimit removed from the canonical config and helpers re-export. Marketplace and delivery-protection presets now wire authorizePreActionCondition: zeroAddress.

    Breaking — query scoping

    • SDK query.* methods (getPayerPayments, getReceiverPayments, getPayment) auto-scope hook reads to the SDK's configured operatorAddress. Direct callers of @x402r/core/actions/hook/* must pass operatorAddress explicitly to opt in. getPayerPayment and getReceiverPayment narrow to Promise<PaymentInfo | null>.

    Partial in-escrow refund migration

    The old refundInEscrow(paymentInfo, amount) has no single-call replacement. Use partial capture + void remainder:

    const { capturableAmount } = await client.payment.getAmounts(paymentInfo);
    await client.payment.capture(
      paymentInfo,
      capturableAmount - refundToPayer,
      "0x",
    );
    await client.payment.voidPayment(paymentInfo);
  • #125 b7a930f Thanks @vraspar! - Add Permit2 payer-side helpers.

    New

    • @x402r/core/payment/permit2: signPermit2Authorization, createPermit2ApprovalTx, getPermit2AllowanceReadParams, and the PERMIT2_ADDRESS constant. Returns {collectorData, tokenCollector} suitable for payment.charge / payment.authorize.
    • @x402r/sdk re-exports the four Permit2 surfaces.
    • @x402r/cli adds --asset-transfer-method <eip3009|permit2> to filter accepts[] alongside --chain. Invalid value or empty match set errors with a Malformed402Error (exit code 2).

Patch Changes

@x402r-release-bot x402r-release-bot Bot force-pushed the changeset-release/main branch from ae5426d to 67cda2e Compare May 23, 2026 02:21
@codecov
Copy link
Copy Markdown

codecov Bot commented May 23, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@vraspar vraspar merged commit e2d472b into main May 23, 2026
9 checks passed
@vraspar vraspar deleted the changeset-release/main branch May 23, 2026 03:14
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant