# MaxApyRouter

## Overview

The MaxApyRouter is a helper contract that provides safe and convenient ways to interact with MaxApy vaults. It supports standard ERC20 deposits, permit-style deposits, and native token operations.

## Constants

```solidity
IWrappedToken public immutable wrappedToken;    // Chain's wrapped native token
```

## Errors

```solidity
error FailedNativeTransfer();          // Native token transfer failed
error InsufficientShares();            // Not enough shares received
error InsufficientAssets();            // Not enough assets received
error ReceiveNotAllowed();             // Unauthorized receive call
error InvalidRecipient();              // Zero address recipient
```

## Functions

### Deposit Functions

### deposit

```solidity
function deposit(
    IMaxApyVault vault,
    uint256 amount,
    address recipient,
    uint256 minSharesOut
) external returns (uint256 sharesOut)
```

Deposits tokens into a vault using standard ERC20 transfers.

Parameters:

* `vault`: Target MaxApy vault
* `amount`: Amount of tokens to deposit
* `recipient`: Address to receive shares
* `minSharesOut`: Minimum shares to receive

Returns:

* Amount of shares minted

### depositWithPermit

```solidity
function depositWithPermit(
    IMaxApyVault vault,
    uint256 amount,
    address recipient,
    uint256 deadline,
    uint8 v,
    bytes32 r,
    bytes32 s,
    uint256 minSharesOut
) external returns (uint256 sharesOut)
```

Deposits tokens using EIP-2612 permit for approval-free deposits.

Parameters:

* `vault`: Target MaxApy vault
* `amount`: Amount of tokens to deposit
* `recipient`: Address to receive shares
* `deadline`: Permit deadline
* `v`: Signature component
* `r`: Signature component
* `s`: Signature component
* `minSharesOut`: Minimum shares to receive

Returns:

* Amount of shares minted

### depositNative

```solidity
function depositNative(
    IMaxApyVault vault,
    address recipient,
    uint256 minSharesOut
) external payable returns (uint256 sharesOut)
```

Deposits native token by wrapping it first.

Parameters:

* `vault`: Target MaxApy vault
* `recipient`: Address to receive shares
* `minSharesOut`: Minimum shares to receive

Returns:

* Amount of shares minted

### Withdrawal Functions

### redeem

```solidity
function redeem(
    IMaxApyVault vault,
    uint256 shares,
    address recipient,
    uint256 minAmountOut
) external returns (uint256 amountOut)
```

Redeems shares for underlying tokens.

Parameters:

* `vault`: Target MaxApy vault
* `shares`: Amount of shares to redeem
* `recipient`: Address to receive assets
* `minAmountOut`: Minimum assets to receive

Returns:

* Amount of assets received

### redeemNative

```solidity
function redeemNative(
    IMaxApyVault vault,
    uint256 shares,
    address recipient,
    uint256 minAmountOut
) external returns (uint256 amountOut)
```

Redeems shares for native tokens.

Parameters:

* `vault`: Target MaxApy vault
* `shares`: Amount of shares to redeem
* `recipient`: Address to receive native tokens
* `minAmountOut`: Minimum assets to receive

Returns:

* Amount of native tokens received

### Helper Functions

### \_approveMax

```solidity
function _approveMax(address _vault, address _token) internal
```

Approves maximum token spending limit if current allowance is zero.

Parameters:

* `_vault`: Vault address to approve
* `_token`: Token to approve spending for


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://devs.maxapy.io/maxapy-erc4626/vault/maxapyrouter.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
