Skip to content

Feat/ini same chain intents#354

Open
Dargon789 wants to merge 5 commits intoDargon789:migrationfrom
0xsequence:feat/ini-same-chain-intents
Open

Feat/ini same chain intents#354
Dargon789 wants to merge 5 commits intoDargon789:migrationfrom
0xsequence:feat/ini-same-chain-intents

Conversation

@Dargon789
Copy link
Copy Markdown
Owner

@Dargon789 Dargon789 commented Mar 12, 2026

Summary by Sourcery

Configure the demo anypay app and SDK to support a configurable same-chain USDC pay intent on Arbitrum, centralizing mock and pay constants, tightening intent validation, and improving wallet/send UX.

New Features:

  • Introduce a shared configuration module for mock interactions and pay action parameters, including chain, token, recipient, and display metadata.
  • Allow the demo pay flow to target a configurable USDC token and chain using centralized constants.

Bug Fixes:

  • Prevent creating intents where the origin and destination use the same token on the same chain.
  • Ensure origin transactions are sent on the correct chain by switching the connected wallet chain if needed.

Enhancements:

  • Unify mock and pay configuration across demo components by importing from a single config file instead of hardcoded values.
  • Adjust intent preparation so that origin token amount matches destination amount when using the same token address, simplifying same-token flows.
  • Improve pay intent display text and amount formatting using token decimals and symbol from configuration, and update the pay action label accordingly.
  • Simplify fee handling in the send form by setting the initial fee to zero and pass the destination token symbol through send preparation.
  • Improve type-safety and robustness in the send form by explicitly typing window.ethereum access and renaming the ENS error variable.

@bolt-new-by-stackblitz
Copy link
Copy Markdown

Review PR in StackBlitz Codeflow Run & review this pull request in StackBlitz Codeflow.

@codesandbox
Copy link
Copy Markdown

codesandbox bot commented Mar 12, 2026

Review or Edit in CodeSandbox

Open the branch in Web EditorVS CodeInsiders

Open Preview

@vercel
Copy link
Copy Markdown

vercel bot commented Mar 12, 2026

@shunkakinoki is attempting to deploy a commit to the Foundry development Team on Vercel.

A member of the Team first needs to authorize it.

@sourcery-ai
Copy link
Copy Markdown

sourcery-ai bot commented Mar 12, 2026

Reviewer's Guide

Refactors demo anypay configuration into a shared config module, updates the pay flow to use configurable PAY* constants (now targeting Arbitrum USDC), adds same-chain/same-token validation and handling in the SDK, ensures the wallet client is on the correct chain before sending origin transactions, and extends the send widget to pass token metadata and fee updates through to prepareSend.

Sequence diagram for intent creation with same-chain/same-token validation

sequenceDiagram
  actor User
  participant SendForm
  participant AnyPayHook_useAnyPay as AnyPayHook_useAnyPay
  participant SequenceAPI as SequenceAPI

  User->>SendForm: Fill send form and submit
  SendForm->>AnyPayHook_useAnyPay: createIntentMutation.mutate(args)
  AnyPayHook_useAnyPay->>AnyPayHook_useAnyPay: Validate account.address exists
  AnyPayHook_useAnyPay->>AnyPayHook_useAnyPay: Compare args.originChainId and args.destinationChainId
  AnyPayHook_useAnyPay->>AnyPayHook_useAnyPay: Compare args.originTokenAddress and args.destinationTokenAddress
  alt Same chain and same token
    AnyPayHook_useAnyPay-->>SendForm: Throw Error("The same token cannot be used as both the source and destination token.")
    SendForm-->>User: Show validation error
  else Different chain or different token
    AnyPayHook_useAnyPay->>SequenceAPI: getIntentCallsPayloads(args)
    SequenceAPI-->>AnyPayHook_useAnyPay: intentCallsPayloads
    AnyPayHook_useAnyPay-->>SendForm: Success with intentCallsPayloads
    SendForm-->>User: Show quote and continue flow
  end
Loading

Sequence diagram for prepareSend and origin transaction chain switching

sequenceDiagram
  actor User
  participant SendForm
  participant AnyPaySDK as AnyPaySDK_prepareSend
  participant Intents as Intents_sendOriginTransaction
  participant WalletClient
  participant Blockchain

  User->>SendForm: Confirm send
  SendForm->>AnyPaySDK: prepareSend(options)
  AnyPaySDK->>AnyPaySDK: Read originTokenAddress, destinationTokenAddress, destinationTokenAmount, originTokenAmount
  alt Same origin and destination token
    AnyPaySDK->>AnyPaySDK: Set originTokenAmount = destinationTokenAmount
  else Different tokens
    AnyPaySDK->>AnyPaySDK: Keep originTokenAmount unchanged
  end
  AnyPaySDK->>Intents: sendOriginTransaction(wallet, client, originParams)
  Intents->>WalletClient: getChainId()
  WalletClient-->>Intents: currentChainId
  alt currentChainId != originParams.chain.id
    Intents->>WalletClient: switchChain(id = originParams.chain.id)
    WalletClient-->>Intents: Switched to origin chain
  else Already on correct chain
    Intents->>Intents: Skip chain switch
  end
  Intents->>WalletClient: sendTransaction(originParams)
  WalletClient->>Blockchain: Broadcast transaction
  Blockchain-->>WalletClient: txHash
  WalletClient-->>Intents: txHash
  Intents-->>AnyPaySDK: txHash
  AnyPaySDK-->>SendForm: txHash
  SendForm-->>User: Show transaction submitted
Loading

Updated class diagram for AnyPay SDK send flow and shared config

classDiagram
  class Config {
    <<module>>
    +Hex MOCK_TRANSFER_DATA
    +number MOCK_CHAIN_ID
    +string MOCK_CONTRACT_ADDRESS
    +string MOCK_TOKEN_ADDRESS
    +string MOCK_TOKEN_AMOUNT
    +number PAY_CHAIN_ID
    +string BASE_USDC_PAY_TOKEN_ADDRESS
    +string ARB_USDC_PAY_TOKEN_ADDRESS
    +string PAY_TOKEN_ADDRESS
    +string PAY_TOKEN_SYMBOL
    +number PAY_TOKEN_DECIMALS
    +string PAY_RECIPIENT_ADDRESS
    +bigint PAY_AMOUNT
    +string PAY_AMOUNT_FORMATTED
    +string PAY_DISPLAY_TEXT
  }

  class UseAnyPayHook {
    <<hook>>
    +createIntentMutation(args)
  }

  class GetIntentCallsPayloadsArgs {
    +number originChainId
    +number destinationChainId
    +string originTokenAddress
    +string destinationTokenAddress
  }

  class SendOptions {
    +number originChainId
    +string originTokenAddress
    +string originTokenAmount
    +number destinationChainId
    +string recipient
    +string destinationTokenAddress
    +string destinationTokenAmount
    +string destinationTokenSymbol
    +string sequenceApiKey
    +string fee
    +WalletClient client
    +any apiClient
    +any originRelayer
  }

  class AnyPaySDK {
    <<module>>
    +prepareSend(options) Promise~void~
  }

  class IntentsModule {
    <<module>>
    +sendOriginTransaction(wallet, client, originParams) Promise~string~
  }

  class WalletClient {
    +getChainId() Promise~number~
    +switchChain(params) Promise~void~
    +sendTransaction(tx) Promise~string~
  }

  class SendFormComponent {
    <<ReactComponent>>
    +onSubmit()
    -buildSendOptions() SendOptions
  }

  class IntentQuoteDisplayStepComponent {
    <<ReactComponent>>
    +renderPayIntentSummary(intentCallsPayloads, selectedToken)
  }

  class ChooseActionStepComponent {
    <<ReactComponent>>
    +renderPayButton()
  }

  UseAnyPayHook --> GetIntentCallsPayloadsArgs : uses
  AnyPaySDK --> SendOptions : uses
  IntentsModule --> WalletClient : uses
  SendFormComponent --> AnyPaySDK : calls_prepareSend
  SendFormComponent --> UseAnyPayHook : calls_createIntentMutation
  SendFormComponent --> Config : reads_PAY_constants
  IntentQuoteDisplayStepComponent --> Config : reads_PAY_and_MOCK_constants
  ChooseActionStepComponent --> Config : reads_PAY_CHAIN_ID_and_PAY_DISPLAY_TEXT
  UseAnyPayHook --> Config : uses_MOCK_and_PAY_defaults
  AnyPaySDK --> IntentsModule : calls_sendOriginTransaction
  UseAnyPayHook --> "1" WalletClient : indirectly via caller
Loading

File-Level Changes

Change Details Files
Centralize mock and pay configuration into a shared config module and wire it through the demo anypay UI.
  • Extract mock interaction and pay constants (chain IDs, token addresses, recipient, amounts, display text) into a new extras/demo-anypay/src/config.ts module.
  • Replace hardcoded mock and pay constants in home-index-route with imports from the new config module, including PAY_* values for chain and token setup.
  • Update IntentQuoteDisplayStep to use PAY_* config values for chain name, amount formatting, token symbol/decimals, and recipient display.
  • Update ChooseActionStep to use PAY_CHAIN_ID for the network icon and PAY_DISPLAY_TEXT for the pay action subtitle.
extras/demo-anypay/src/config.ts
extras/demo-anypay/src/routes/home/home-index-route.tsx
extras/demo-anypay/src/components/IntentQuoteDisplayStep.tsx
extras/demo-anypay/src/components/ChooseActionStep.tsx
Adjust demo pay behavior to target Arbitrum USDC and align intent construction with the new config.
  • Switch PAY_CHAIN_ID to chains.arbitrum.id and define both base and arbitrum USDC addresses, selecting ARB_USDC_PAY_TOKEN_ADDRESS as PAY_TOKEN_ADDRESS.
  • Use PAY_CHAIN_ID and PAY_TOKEN_ADDRESS consistently when building destination calls and origin intent requests in home-index-route.
  • Use PAY_AMOUNT and PAY_TOKEN_DECIMALS instead of hardcoded AMOUNT/USDC decimals for display and payload values.
extras/demo-anypay/src/config.ts
extras/demo-anypay/src/routes/home/home-index-route.tsx
extras/demo-anypay/src/components/IntentQuoteDisplayStep.tsx
Add same-chain/same-token validation and handling in the anypay SDK to support same-chain intents safely.
  • In useAnyPay.createIntentMutation, reject intents where originChainId equals destinationChainId and originTokenAddress equals destinationTokenAddress, preventing identical source/destination token usage.
  • In prepareSend, include destinationTokenSymbol in the SendOptions and pass it through to getIntentCallsPayloads.
  • Adjust originTokenAmount passed to getIntentCallsPayloads to use destinationTokenAmount when originTokenAddress equals destinationTokenAddress, otherwise keep the original originTokenAmount.
packages/wallet/anypay-sdk/src/anypay.ts
Update widget SendForm to support the extended prepareSend API and simplify fee handling.
  • Rename ENS error variable to ensError to avoid shadowing and improve clarity.
  • Use (window as any).ethereum when creating the wallet client transport for better type compatibility.
  • Pass destinationTokenSymbol into prepareSend based on selectedDestToken.symbol.
  • Set the fee parameter passed to prepareSend to '0' instead of a hardcoded per-token fee calculation.
packages/wallet/anypay-sdk/src/widget/components/SendForm.tsx
Ensure the wallet client is connected to the correct origin chain before sending the origin transaction.
  • In sendOriginTransaction, fetch the current chainId from the WalletClient and, if it differs from originParams.chain.id, call client.switchChain before sending the transaction.
  • Send the origin transaction as before once the client is on the correct chain.
packages/wallet/anypay-sdk/src/intents.ts

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@snyk-io
Copy link
Copy Markdown

snyk-io bot commented Mar 12, 2026

Snyk checks have passed. No issues have been found so far.

Status Scanner Critical High Medium Low Total (0)
🔚 Open Source Security 0 0 0 0 0 issues

💻 Catch issues earlier using the plugins for VS Code, JetBrains IDEs, Visual Studio, and Eclipse.

@gemini-code-assist
Copy link
Copy Markdown

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly refactors the demo application by centralizing configuration constants, making the codebase more organized and easier to manage. It also enhances the robustness of the anypay-sdk by adding a critical validation to prevent invalid intent creations involving identical source and destination tokens on the same chain. Furthermore, it improves the user experience by automatically handling chain switching for origin transactions and refining intent preparation with more comprehensive token details.

Highlights

  • Centralized Configuration: Extracted mock data and payment-related constants into a new config.ts file for improved maintainability and clarity in the demo application.
  • Intent Validation: Introduced a validation check in the anypay-sdk to prevent the creation of intents where the origin and destination tokens are identical on the same blockchain.
  • Chain Switching Logic: Added functionality to automatically switch the wallet's chain to the required origin chain before sending an origin transaction.
  • Enhanced Intent Preparation: Modified the prepareSend function to include the destinationTokenSymbol and adjusted the originTokenAmount calculation for same-chain, same-token scenarios.
Changelog
  • extras/demo-anypay/src/components/ChooseActionStep.tsx
    • Imported PAY_CHAIN_ID and PAY_DISPLAY_TEXT from the new config file.
    • Replaced hardcoded chain ID and display text with the new configurable values.
  • extras/demo-anypay/src/components/IntentQuoteDisplayStep.tsx
    • Replaced multiple hardcoded mock data constants with imports from the new config file.
    • Updated the intent display to dynamically use payment details from the new config.
  • extras/demo-anypay/src/config.ts
    • Added a new file to centralize all mock data and payment-related constants for the demo application.
  • extras/demo-anypay/src/routes/home/home-index-route.tsx
    • Removed direct import of viem/chains and replaced several hardcoded constants with imports from the new config file.
    • Updated useState initializations and destinationCall parameters to use the new configurable values.
    • Modified ERC20 transfer encoding to utilize payment details from the new config.
  • packages/wallet/anypay-sdk/src/anypay.ts
    • Added a validation check to prevent intents with the same origin and destination token on the same chain.
    • Included destinationTokenSymbol in the SendOptions type and prepareSend function arguments.
    • Adjusted the originTokenAmount calculation in prepareSend for scenarios where origin and destination tokens are identical.
  • packages/wallet/anypay-sdk/src/intents.ts
    • Implemented logic to check the current chain ID and switch to the required origin chain before sending a transaction.
  • packages/wallet/anypay-sdk/src/widget/components/SendForm.tsx
    • Imported useMemo for optimization.
    • Renamed the error variable from useEnsAddress to ensError to prevent naming conflicts.
    • Updated the createWalletClient transport to explicitly cast window.ethereum to any.
    • Added destinationTokenSymbol to the prepareSend options.
    • Set the transaction fee to '0'.
Activity
  • No specific activity has been recorded for this pull request yet.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've found 3 issues, and left some high level feedback:

  • In useAnyPay's createIntentMutation, the new guard only blocks when originChainId === destinationChainId and tokens match, but the error message claims the same token cannot be used as both source and destination in general; either relax the condition or update the message to reflect the same-chain-only restriction.
  • In sendOriginTransaction you call client.switchChain, but WalletClient typically exposes chain switching via the switchChain action helper rather than as a method; consider using the action (switchChain(client, { id })) or a typed client that actually supports this method to avoid runtime/type issues.
  • You added destinationTokenSymbol to SendOptions and pass it into prepareSend, but it isn’t used in the shown logic; if it’s not consumed downstream, remove it to keep the send API minimal, or wire it through where it’s intended to be used.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- In `useAnyPay`'s `createIntentMutation`, the new guard only blocks when `originChainId === destinationChainId` and tokens match, but the error message claims the same token cannot be used as both source and destination in general; either relax the condition or update the message to reflect the same-chain-only restriction.
- In `sendOriginTransaction` you call `client.switchChain`, but `WalletClient` typically exposes chain switching via the `switchChain` action helper rather than as a method; consider using the action (`switchChain(client, { id })`) or a typed client that actually supports this method to avoid runtime/type issues.
- You added `destinationTokenSymbol` to `SendOptions` and pass it into `prepareSend`, but it isn’t used in the shown logic; if it’s not consumed downstream, remove it to keep the send API minimal, or wire it through where it’s intended to be used.

## Individual Comments

### Comment 1
<location path="packages/wallet/anypay-sdk/src/anypay.ts" line_range="332-336" />
<code_context>
   // TODO: Add type for args
   const createIntentMutation = useMutation<GetIntentCallsPayloadsReturn, Error, GetIntentCallsPayloadsArgs>({
     mutationFn: async (args: GetIntentCallsPayloadsArgs) => {
+      if (
+        args.originChainId === args.destinationChainId &&
+        isAddressEqual(Address.from(args.originTokenAddress), Address.from(args.destinationTokenAddress))
+      ) {
+        throw new Error('The same token cannot be used as both the source and destination token.')
+      }
       if (!account.address) {
</code_context>
<issue_to_address>
**issue:** Align the validation condition with the error message and consider whether same-chain/same-token flows should be allowed.

The guard currently rejects only the case where both chain ID and token address match. Please clarify the intent:
- If the rule is “no same token anywhere”, the chain ID check is too restrictive.
- If the rule is “no exact same chain+token no-op”, the error message should mention the chain or “no-op” nature.

Also note `Address.from(...)` will throw on malformed input. If invalid addresses are possible here, either validate them first or compare raw strings before normalizing. Consider extracting this predicate into a shared helper so other call sites can reuse the same logic and stay consistent.
</issue_to_address>

### Comment 2
<location path="packages/wallet/anypay-sdk/src/widget/components/SendForm.tsx" line_range="187" />
<code_context>
         account,
         chain: getChainConfig(selectedToken.chainId),
-        transport: custom(window.ethereum),
+        transport: custom((window as any).ethereum),
       })

</code_context>
<issue_to_address>
**suggestion:** Add a defensive check around `(window as any).ethereum` before constructing the wallet client.

The TS cast removes the type error but still assumes `ethereum` always exists at runtime. In contexts without an injected provider (or before it’s ready), `custom((window as any).ethereum)` will throw. Consider guarding and surfacing a clear error/fallback:

```ts
const provider = (window as any).ethereum
if (!provider) {
  // handle missing provider (e.g., user-facing error or fallback)
}

transport: custom(provider),
```

Suggested implementation:

```typescript
      const provider = (window as any)?.ethereum
      if (!provider) {
        // TODO: handle missing provider (e.g. show a user-facing error, disable the form, or fallback)
        throw new Error('Ethereum provider is not available in this context.')
      }

      const client = createWalletClient({
        account,
        chain: getChainConfig(selectedToken.chainId),
        transport: custom(provider),
      })

```

You may want to replace the `throw new Error(...)` with UI-specific handling consistent with the rest of `SendForm.tsx` (for example: setting an error state, showing a toast/snackbar, or disabling submission when no provider is present).
</issue_to_address>

### Comment 3
<location path="packages/wallet/anypay-sdk/src/intents.ts" line_range="154-156" />
<code_context>
   client: WalletClient,
   originParams: SendOriginCallTxArgs,
 ): Promise<`0x${string}`> {
+  const chainId = await client.getChainId()
+  if (chainId !== originParams.chain.id) {
+    await client.switchChain({ id: originParams.chain.id })
+  }
+
</code_context>
<issue_to_address>
**suggestion:** Consider handling `switchChain` failures explicitly for clearer user feedback.

If `switchChain` is rejected by the user or unsupported by the wallet, this will currently surface as a generic viem error. Consider wrapping the call in a try/catch and rethrowing clearer errors (e.g., "User rejected network switch" vs "Wallet does not support network switching") so callers can distinguish switch failures from transaction failures.

Suggested implementation:

```typescript
  const chainId = await client.getChainId()
  if (chainId !== originParams.chain.id) {
    try {
      await client.switchChain({ id: originParams.chain.id })
    } catch (error) {
      // viem-specific error handling for clearer UX
      if (error instanceof UserRejectedRequestError) {
        throw new Error('User rejected network switch')
      }

      if (error instanceof SwitchChainError) {
        throw new Error('Wallet does not support network switching')
      }

      // Fallback: rethrow the original error so callers can still inspect it
      throw error
    }
  }

  const hash = await client.sendTransaction({

```

You’ll also need to ensure the viem error types are imported at the top of `packages/wallet/anypay-sdk/src/intents.ts`, e.g.:

- Add `UserRejectedRequestError` and `SwitchChainError` to your existing `viem` imports, or create a new import:
  `import { SwitchChainError, UserRejectedRequestError } from 'viem'`

If the project uses a custom error abstraction, you may want to throw those custom error classes instead of `new Error(...)` to keep error handling consistent with the rest of the codebase.
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request refactors the demo app to use a centralized configuration for constants and adds several enhancements, including intent validation and automatic chain switching. My review focuses on improving maintainability by dynamically generating display values instead of hardcoding them in the configuration, and enhancing TypeScript type safety when interacting with browser-specific objects like window.ethereum. These suggestions aim to make the code more robust and easier to maintain.

@vercel
Copy link
Copy Markdown

vercel bot commented Mar 12, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
sequence.js Canceled Canceled Mar 12, 2026 7:03am
wagmi-project Canceled Canceled Mar 12, 2026 7:03am

@vercel vercel bot temporarily deployed to Preview – wagmi-project March 12, 2026 07:01 Inactive
@vercel vercel bot temporarily deployed to Preview – sequence.js March 12, 2026 07:03 Inactive
@Dargon789
Copy link
Copy Markdown
Owner Author

@Mergifyio update

@Dargon789
Copy link
Copy Markdown
Owner Author

@Mergifyio refresh

@mergify
Copy link
Copy Markdown

mergify bot commented Mar 12, 2026

update

☑️ Nothing to do, the required conditions are not met

Details
  • -conflict [📌 update requirement]
  • #commits-behind > 0 [📌 update requirement]
  • -closed [📌 update requirement]
  • queue-position = -1 [📌 update requirement]

@mergify
Copy link
Copy Markdown

mergify bot commented Mar 12, 2026

refresh

✅ Pull request refreshed

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.

2 participants