> For the complete documentation index, see [llms.txt](https://devs.maxapy.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://devs.maxapy.io/maxapy-erc4626/vault/maxapyrouter.md).

# 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
