# インターフェース

## authorize

unWallet ユーザーに対して、ID トークン（JWT）の発行をリクエストします。

### 引数

|                | 必須  | 型         | 説明                                                                                 |
| -------------- | --- | --------- | ---------------------------------------------------------------------------------- |
| `responseMode` | No  | `string`  | ID トークンのレスポンス方式。`"fragment"` もしくは `"form_post"` を指定してください。デフォルト値は `"fragment"` です。 |
| `redirectURL`  | Yes | `string`  | ユーザーが unWallet で ID トークンの発行を認可した後のコールバック先となる URL。                                  |
| `nonce`        | No  | `string`  | リプレイアタックを防ぐための任意の文字列。指定した値は ID トークンに含められます。                                        |
| `isVirtual`    | No  | `boolean` | リクエスト時にユーザーが unWallet にサインインしていない場合、サインイン方式をバーチャルサインインにするかどうか。デフォルト値は `true` です。   |
| `chainID`      | No  | `number`  | ユーザーに接続を促したいブロックチェーンのチェーン ID。                                                      |

{% hint style="info" %}
バーチャルサインインは unWallet へのサインイン方式の 1 つです。この方式では、コントラクトウォレットやそれに対応する秘密鍵のセットアップがスキップされるため、サインイン時に MFA が要求されません。
{% endhint %}

### 実行例

```js
unWallet.authorize({
  redirectURL: "https://example.com/callback",
  nonce: "0AbvXkwAv67DIRyQEMXZgC8SneZX56WX",
});
```

### 実行結果

#### `responseMode` が `"fragment"` の場合

`redirectURL` にリダイレクトされます。ID トークンは URL フラグメントとして付帯します。

#### `responseMode` が `"form_post"` の場合

`redirectURL` に POST リクエストが送信されます。ID トークンはフォームパラメータ（`id_token`）として付帯します。

## sign

unWallet ユーザーに対して、指定したメッセージに対する電子署名をリクエストします。

### 引数

|               | 必須  | 型        | 説明               |
| ------------- | --- | -------- | ---------------- |
| `message`     | Yes | `string` | 電子署名の対象となるメッセージ。 |
| `ticketToken` | Yes | `string` | 電子署名チケットトークン。    |

{% hint style="info" %}
電子署名チケットトークンは [POST /issueSignatureTicket](https://developers.ent.unwallet.world/01_http-endpoint/01_interface/01_blockchain#issuesignatureticket) を利用して発行してください。
{% endhint %}

### 実行例

```js
const result = await unWallet.sign({
  message: "message to be signed",
  ticketToken:
    "eyJhbGciOiJFUzI1NiIsImtpZCI6IjEiLCJ0eXAiOiJKV1QifQ.eyJhcGlDbGllbnRJRCI6IlFWQkpRMnhwWlc1ME9qRT0iLCJjbGllbnRJRCI6IkNYcWxKcEtZaVhMelZ1cTNtVTQ5VVk1VUZuMk4zVVJWdCIsImV4cCI6MTcyMTIwNzA2MCwiaWF0IjoxNzIxMjA2NzYwLCJpZCI6IjYxNWEwZGMzNjk2MTI5NjZhYTk5OGIxY2RiZTk4MDQyNDI5NmNhNTE4ODI3OTNmNmU4NWQyODEyMmVmZGY1ZjIiLCJzaWduYXR1cmVNZXNzYWdlIjoibWVzc2FnZSB0byBiZSBzaWduZWQiLCJzaWduYXR1cmVTaWduZXJBZGRyZXNzIjoiMHhkMTIyOUVlMkIwY0Y5NzhEQTc3MDdBRDVEMDI1MzAxMjBmMDRhOUYxIn0.lDSA60K4KlixyU2Vh937i1RIw0kH0QdC2Zyey5pDmuxShH0mzyH3DEuG_h_6U6xHf1pbCwtivDBaK-KQlZtiTA",
});
```

### 実行結果例

```json
{
  "digest": "0xc0f4c2c0633d048d72c13778562f37b49bfa2999fec3e286bce7248e51f9d337",
  "signature": "0x020d4c8b71c7aa69848f1ef28b8ecd0e13b19155931e1518445f4d5b1bf1292b0e95a5df9d27383ee62045a56806d8d48a0e53881513c16e3114e2088193b1c71b"
}
```

## signEIP712TypedData

unWallet ユーザーに対して、指定した [EIP-712](https://eips.ethereum.org/EIPS/eip-712) 構造化データに対する電子署名をリクエストします。

### 引数

|               | 必須  | 型        | 説明                                                                   |
| ------------- | --- | -------- | -------------------------------------------------------------------- |
| `typedData`   | Yes | `object` | 電子署名の対象となる [EIP-712](https://eips.ethereum.org/EIPS/eip-712) 構造化データ。 |
| `ticketToken` | Yes | `string` | 電子署名チケットトークン。                                                        |

{% hint style="info" %}
電子署名チケットトークンは [POST /issueSignatureTicket](https://developers.ent.unwallet.world/01_http-endpoint/01_interface/01_blockchain#issuesignatureticket) を利用して発行してください。
{% endhint %}

### 実行例

```js
const result = await unWallet.signEIP712TypedData({
  typedData: {
    types: {
      EIP712Domain: [
        { name: "name", type: "string" },
        { name: "version", type: "string" },
        { name: "chainId", type: "uint256" },
        { name: "verifyingContract", type: "address" },
      ],
      Person: [
        { name: "name", type: "string" },
        { name: "wallet", type: "address" },
      ],
      Mail: [
        { name: "from", type: "Person" },
        { name: "to", type: "Person" },
        { name: "contents", type: "string" },
      ],
    },
    primaryType: "Mail",
    domain: {
      name: "Ether Mail",
      version: "1",
      chainId: 1,
      verifyingContract: "0xCcCCccccCCCCcCCCCCCcCcCccCcCCCcCcccccccC",
    },
    message: {
      from: {
        name: "Cow",
        wallet: "0xCD2a3d9F938E13CD947Ec05AbC7FE734Df8DD826",
      },
      to: {
        name: "Bob",
        wallet: "0xbBbBBBBbbBBBbbbBbbBbbbbBBbBbbbbBbBbbBBbB",
      },
      contents: "Hello, Bob!",
    },
  },
  ticketToken:
    "eyJhbGciOiJFUzI1NiIsImtpZCI6IjEiLCJ0eXAiOiJKV1QifQ.eyJhcGlDbGllbnRJRCI6IlFWQkpRMnhwWlc1ME9qSXkiLCJjbGllbnRJRCI6IkNYcWxKcEtZaVhMelZ1cTNtVTQ5VVk1VUZuMk4zVVJWdCIsImV4cCI6MTc0NzgyMjE2MiwiaWF0IjoxNzQ3ODIxODYyLCJpZCI6ImI5YTFjOGJjOTlkMmVhNTcxNWIwN2U4NzE5YWEyNmQ2Y2M3YzM1N2JiNzNhYTcxNDc2NjJhODBjNzEyMzYzYzgiLCJzaWduYXR1cmVEaWdlc3QiOiIweGJlNjA5YWVlMzQzZmIzYzRiMjhlMWRmOWU2MzJmY2E2NGZjZmFlZGUyMGYwMmU4NjI0NGVmZGRmMzA5NTdiZDIiLCJzaWduYXR1cmVTaWduZXJBZGRyZXNzIjoiMHhkMTIyOUVlMkIwY0Y5NzhEQTc3MDdBRDVEMDI1MzAxMjBmMDRhOUYxIn0.VqCfO3Dh_BsBACqpr2bYOX47TIkJy3EXGy_l6SouW1sBc6XsZE1996gIJ9jwHIswye1F_YrovV4EU0iHrHk8_g",
});
```

### 実行結果例

```json
{
  "digest": "0xbe609aee343fb3c4b28e1df9e632fca64fcfaede20f02e86244efddf30957bd2",
  "signature": "0xebdb66458c40c2b052c8d4abb32ffb7b82ddaa43fa4fa90220d6137716e627130aea57283de1823f1f44d227510817aa44bff499b9edb298d7f1bee3b2e6ac011c"
}
```

## sendTransaction

unWallet ユーザーに対して、指定したトランザクションの送信をリクエストします。

### 引数

|               | 必須  | 型        | 説明                                                 |
| ------------- | --- | -------- | -------------------------------------------------- |
| `chainID`     | Yes | `number` | トランザクションの送信先となるブロックチェーンのチェーン ID。                   |
| `toAddress`   | Yes | `string` | トランザクションの対象となるブロックチェーンアドレス。                        |
| `value`       | No  | `string` | トランザクションによって送付されるネイティブトークンの量（`0x` から始まる 16 進数文字列）。 |
| `data`        | No  | `string` | トランザクションデータ（`0x` から始まる 16 進数文字列）。                  |
| `ticketToken` | Yes | `string` | トランザクションチケットトークン。                                  |

{% hint style="info" %}
トランザクションチケットトークンは [POST /issueTransactionTicket](https://developers.ent.unwallet.world/01_http-endpoint/01_interface/01_blockchain#issuetransactionticket) を利用して発行してください。
{% endhint %}

### 実行例

```js
const result = await unWallet.sendTransaction({
  chainID: 137,
  toAddress: "0xd1229Ee2B0cF978DA7707AD5D02530120f04a9F1",
  value: "0xde0b6b3a7640000",
  ticketToken:
    "eyJhbGciOiJFUzI1NiIsImtpZCI6IjEiLCJ0eXAiOiJKV1QifQ.eyJhcGlDbGllbnRJRCI6IlFWQkpRMnhwWlc1ME9qRT0iLCJjaGFpbklEIjoxMzcsImNsaWVudElEIjoiQ1hxbEpwS1lpWEx6VnVxM21VNDlVWTVVRm4yTjNVUlZ0IiwiZXhwIjoxNzIxMjA3MjE1LCJpYXQiOjE3MjEyMDY5MTUsImlkIjoiMmQ5NGU4MDZkYjU4Yzk1YjAwYzQyYTM3ZjM0NGY1NmNkYjliZWJjYTQyNmUxM2FlOGY1MzM3NDA1MTE4MzhlMCIsInBheW1lbnRUeXBlIjoidXNlciIsInRyYW5zYWN0aW9uRGF0YSI6IjB4IiwidHJhbnNhY3Rpb25Gcm9tQWRkcmVzcyI6IjB4ZDEyMjlFZTJCMGNGOTc4REE3NzA3QUQ1RDAyNTMwMTIwZjA0YTlGMSIsInRyYW5zYWN0aW9uVG9BZGRyZXNzIjoiMHhkMTIyOUVlMkIwY0Y5NzhEQTc3MDdBRDVEMDI1MzAxMjBmMDRhOUYxIiwidHJhbnNhY3Rpb25WYWx1ZSI6IjB4ZGUwYjZiM2E3NjQwMDAwIn0.3RXhgkmMaMJKXSlpco5tuBAVOvVsQ9PRygogvkgKXDDRt22gt9zvCWdJvC2puk7B5oaxrAGyG0gkxfFmkHr9fw",
});
```

### 実行結果例

```json
{
  "transactionID": "UXVldWVkVHJhbnNhY3Rpb246MQ=="
}
```
