# Provider API

### 介绍

通过访问`ton provider`会得到一个`tonconnect对象` ：

```typescript
const tonConnect = window.naboxTon.tonconnect();

interface TonConnectBridge {
    deviceInfo: DeviceInfo;
    walletInfo?: WalletInfo;
    protocolVersion: number;
    connect(protocolVersion: number, message: ConnectRequest): Promise<ConnectEvent>;
    restoreConnection(): Promise<ConnectEvent>;
    send(message: AppRequest): Promise<WalletResponse>;
    listen(callback: (event: WalletEvent) => void): () => void;
};
```

### deviceInfo(设备信息)

```javascript
{
    platform: 'browser', // 当前环境
    appName: 'Nabox Wallet', // 钱包
    appVersion: '1.2.19', // 当前版本号
    maxProtocolVersion: 2, // 支持的协议类型，当前为2
    features: [ // 当前钱包支持的特性
      'SendTransaction',
      {
        name: 'SendTransaction',
        maxMessages: 4,
      },
    ],
}
```

### walletInfo(钱包信息)

```javascript
{
    name: 'Nabox Wallet', // 钱包名
    app_name: 'naboxTon', // 钱包标识
    image: '', // 钱包logo
    about_url: '', // 钱包介绍
    platforms: ['chrome'] // 当前支持的平台
}
```

### protocolVersion <a href="#protocolversion" id="protocolversion"></a>

当前支持的协议版本

### connect(连接钱包)

<pre class="language-javascript"><code class="lang-javascript">const protocolVersion = 2;
const connectItems = { name: 'ton_addr' }; // 连接钱包，获取当前地址
const connectItems1 = { name: 'ton_proof', payload: 'hello' }; // 签名消息

const messgae = {
    manifestUrl: 'https://example.com/manifest.json';
    items: [connectItems, connectItems1]
};
// 只获取用户的地址、公钥等信息：
const result = await naboxTon.tonconnect.connect(protocolVersion, {
    manifestUrl: 'https://example.com/manifest.json',
    items: [connectItems]
})

if (result.event === 'connect') {
    console.log(result.payload.items[0].address)
} else {
    console.log(result.payload.message)
}
<strong>// 获取用户地址、公钥等信息，同时对钱包进行签名验证：
</strong>const result1 = await window.okxTonWallet.tonconnect.connect(protocolVersion, {
    manifestUrl: 'https://example.com/manifest.json',
    items: [
        connectItems,
        connectItems1
    ]
})

if(result.event === 'connect') {
    console.log(result1.payload.items[0].address)
    console.log(result1.payload.items[1].proof)
} else {
    console.log(result1.payload.message)
}
</code></pre>

### restoreConnection(恢复连接，常用于之前连接过进行第二次连接) <a href="#restoreconnection" id="restoreconnection"></a>

```javascript
const result = await window.okxTonWallet.tonconnect.restoreConnection();

if(result.event === 'connect') {
    console.log(result.payload.items[0].address)
} else {
    console.log(result.payload.message)
}
```

### send(sendTransaction/disconnect)

```javascript
const message = {
    method: ''; // 方法名
    params: []; // 方法参数
    id: '1'; // 递增标识
};

// sendTransaction 消息 成功
const { boc, id } = window.naboxTon.send({
    method: 'sendTransaction',
    params: [<transaction-payload>],
    id: '1'
});
// sendTransaction 消息 失败
const { error, id } = window.naboxTon.send({
    method: 'sendTransaction',
    params: [<transaction-payload>],
    id: '1'
});

// disconnect 消息 成功
const { result, id } = window.naboxTon.send({
    method: 'disconnect',
    params: [],
    id: '1'
});
// disconnect 消息 失败
const { error, id } = window.naboxTon.send({
    method: 'disconnect',
    params: [],
    id: '1'
});
```

### listen

```typescript
interface WalletEvent {
    event: WalletEventName;
    id: number; 
    payload: <event-payload>; // 参数
}

type WalletEventName = 'connect' | 'connect_error' | 'disconnect';

// 返回一个函数，用于取消监听
```
