# Methods

The following shows the methods provided by the Wepin widget JavaScript SDK.

## `openWidget`

```javascript
await wepin.openWidget()
```

The <mark style="color:blue;">`openWidget`</mark> method shows the Wepin widget. The screen displayed in the widget window varies depending on the user's login status. If a user is not logged in, the Wepin widget will show them the login page.

### **Returned value**

* `Promise` \<void>

## `closeWidget`

```javascript
wepin.closeWidget()
```

The <mark style="color:blue;">`closeWidget`</mark> method closes Wepin widget. Closing the window does not log users out.

## `getAccounts`

<pre class="language-javascript"><code class="lang-javascript"><strong>let accounts = await wepin.getAccounts(['Ethereum'])
</strong></code></pre>

or

<pre class="language-javascript"><code class="lang-javascript"><strong>let accounts = await wepin.getAccounts()
</strong></code></pre>

The <mark style="color:blue;">`getAccounts`</mark> method returns user accounts of the networks available in the app. It's a method available after the widget login. The parameters are as follows.

### **Parameters**

* **`networks`**: *Array of string*\
  It is the <mark style="color:blue;">`network`</mark> of the address you want to receive. If no <mark style="color:blue;">`network`</mark> is specified, all addresses available in the app are returned.\
  The names of blockchain networks that can be put into <mark style="color:blue;">`networks`</mark> can be found on the following page.&#x20;

{% content-ref url="/pages/jNG611rZkq69C8zZKglh" %}
[Broken mention](broken://pages/jNG611rZkq69C8zZKglh)
{% endcontent-ref %}

### **Returned Value**

* `Promise` \<Array>
  * If a user is logged in, it returns a <mark style="color:blue;">`Promise`</mark> object resolved with array of <mark style="color:blue;">`account`</mark> of networks.
    * Type of <mark style="color:blue;">`account`</mark> is assigned at [`@wepin/types`](https://github.com/WepinWallet/wepin-js-sdk-types) as <mark style="color:blue;">`IAccount`</mark>
    * `account` *String*
      * `address` *String*
      * `network` *String*
      * `contract` *String* *optional*&#x20;
        * token contract address. ([`@wepin/types`](https://github.com/WepinWallet/wepin-js-sdk-types)(0.0.12 버전 이상)   `IAccount`에  정의되어 있습니다. )
  * If <mark style="color:blue;">`networks`</mark> aren't passed, it returns a <mark style="color:blue;">`Promise`</mark> object resolved with array of <mark style="color:blue;">`account`</mark> of all networks.
  * Example

    ```json
    [
        {
            "address": "0x0000001111112222223333334444445555556666",
            "network": "Ethereum"
        },
        {
            "address": "0x0000001111112222223333334444445555556666",
            "network": "Ethereum",
            "contract": "0x777777888888999999000000111111222222333333",
        },
    ]
    ```
* `Promise` \<void>
  * If user is not logged in, it returns <mark style="color:blue;">`Promise`</mark>.

## `getStatus` (Supported from version `0.3.1` and above.)

```javascript
var status = wepin.getStatus()
```

The <mark style="color:blue;">`getStatus()`</mark> method returns lifecycle of <mark style="color:blue;">`wepin`</mark>.

### **Returned Value**

* \<WepinLifeCycle>
  * The <mark style="color:blue;">`WepinLifeCycle`</mark> is defined at  [`@wepin/types`](https://github.com/WepinWallet/wepin-js-sdk-types) as (Supports version 0.0.7 and above.)
    * `not_initialized`: if `wepin` is not initialized
    * `initializing`: if `wepin` is initializing
    * `initialized`: if `wepin` is initialized
    * `before_login`: if `wepin` is initialized but the user is not logged in
    * `login`: if the user is logged in

## `login` (Supported from version `0.3.1` and above.)

```javascript
var userInfo = await wepin.login()
```

The <mark style="color:blue;">`login()`</mark> method returns information of the logged-in user. If a user is not logged in, Wepin widget will show login page.

### **Returned Value**

`Promise` \<IWepinUser>

* Type of <mark style="color:blue;">`IWepinUser`</mark> is defined in [`@wepin/types`](https://github.com/WepinWallet/wepin-js-sdk-types) (Supported from version `0.0.7` and above.)
  * `status` *String <'success'|'fail'>*
  * `userInfo` *Object (optional)*
    * `userId` *String*
    * `email` *String*
    * `provider` *String <'google'|'apple'>*
  * Example

    ```json
    {
        "status": "success",
        "userInfo": {
            "userID": "123455",
            "email": "abc@test.com",
            "provider": "google"
        }
    }
    ```

## `logout` (Supported from version `0.3.1` and above.)

```javascript
await wepin.logout()
```

The <mark style="color:blue;">`logout()`</mark> method performs a `wepin` logout .

### **Returned Value**

* `Promise` \<void>

## `finalize` (Supported from version `0.3.1` and above.)

```javascript
wepin.finalize() 
```

The <mark style="color:blue;">`finalize()`</mark> method finalizes the Wepin SDK. The state of `wepin` changes to <mark style="color:blue;">`not_initialized`</mark>.

### **Returned Value**

* `void`

## `loginWithExternalToken` (Supported from version `0.5.1` and above.)

```javascript
await wepin.loginWithExternalToken(token, sign, withUI?)
```

It logs in to the Wepin with external token(e.g., <mark style="color:blue;">`idToken`</mark>). The <mark style="color:blue;">`loginWithExternalToken()`</mark> method returns information of the logged-in user.

If the user is not registered on Wepin, and the `withUI` value is set to true, the registration page will be displayed in the widget. However, if the `withUI` value is set to false or not defined, a `require/wepin-register` exception will be triggered.

### **Parameters**

* `token` *\<string>*
  * External token value to be used for login (e.g., idToken).
* `sign` *\<string>*
  * Signature value for the token provided as the first parameter. ([Signature Generation Methods](https://github.com/WepinWallet/wepin-widget-js-sdk/blob/main/doc/SignatureGenerationMethods.md))
  * The key for signing can be obtained from [Wepin Workspace](https://workspace.wepin.io/). In the Development Tools menu, click **Get your authentication key** on the Login tab to retrieve the authentication key.
* `withUI` *\<boolean> optional*
  * Indicates whether to display the Wepin widget screen if registration is required.

### **Returned Value**

* `Promise` \<IWepinUser>
  * Type of <mark style="color:blue;">`IWepinUser`</mark> is defined in [`@wepin/types`](https://github.com/WepinWallet/wepin-js-sdk-types) (Supports version `0.0.7` and above.)
    * `status` *<'success'|'fail'>*
    * `userInfo` *\<object> optional*
      * `userId` *\<string>*
      * `email` *\<string>*
      * `provider` *<'external\_token'>*
  * Example

    ```
    {
    	status: 'success',
    	userInfo: {
    		userID: '123455',
    		email: 'abc@test.com',
    		provider: 'external_token'
            }
    }
    ```

[#exceptions](#exceptions "mention")

* `require/wepin-register` : If this error occurs, you have to perform the <mark style="color:blue;">`wepin.register(pin)`</mark> method.

## `signUpWithEmailAndPassword` (Supported from version `0.5.1` and above.)

<pre class="language-javascript"><code class="lang-javascript"><strong>await wepin.signUpWithEmailAndPassword(email, password)
</strong></code></pre>

It signs up on the Wepin with your email and password.

### **Parameters**

* `email` *\<string>* - User email
* `password` *\<string>* - User password

### **Returned Value**

* `Promise` *\<boolean>*
  * Returns true if the signup is successful.
* Example

  ```
  {
  	status: 'success',
  	userInfo: {
  		userID: '123455',
  		email: 'abc@test.com',
  		provider: 'external_token'
          }
  }
  ```

[#exceptions](#exceptions "mention")

## `loginWithEmailAndPassword` (Supported from version `0.5.1` and above.)

```javascript
await wepin.loginWithEmailAndPassword(email, password)
```

It logs in to the Wepin with your email and password.

### **Parameters**

* `email` *\<string>* - User email
* `password` *\<string>* - User password

### **Returned Value**

* `Promise` \<IWepinUser>
  * Type of <mark style="color:blue;">`IWepinUser`</mark> is defined in [`@wepin/types`](https://github.com/WepinWallet/wepin-js-sdk-types) (Supported from version `0.0.8` and above.)
    * `status` *<'success'|'fail'>*
    * `userInfo` *\<object>* *optional*
      * `userId` *\<string>*
      * `email` *\<string>*
      * `provider` *<'email'>*
  * Example

    ```
    {
    	status: 'success',
    	userInfo: {
    		userID: '123455',
    		email: 'test@test.com',
    		provider: 'email'
            }
    }
    ```

[#exceptions](#exceptions "mention")

* `require/wepin-register` : If this error occurs, you have to perform the <mark style="color:blue;">`wepin.register(pin)`</mark> method.

## `register` (Supported from version `0.5.1` and above.)

```javascript
await wepin.register(pin)
```

It registers in the Wepin with a wallet pin.

After the signup and login are completed, the Wepin service registration (wallet and account creation) will proceed.

### **Parameters**

* `pin` *\<string>* - Wallet PIN

### **Returned Value**

* `Promise` *\<boolean>*
  * Returns true if the registration is successful.
  * After successful registration, the <mark style="color:blue;">`wepin.login(email, password)`</mark> method has to be performed again.

[#exceptions](#exceptions "mention")

## `getBalance` (Supported from version `0.5.1` and above.)

```javascript
await wepin.getBalance(account)
```

It returns the account balance information. It can be only usable after logging in through the widget.

### **Parameters**

* `account` <`IAccount`> - User email
  * Type of <mark style="color:blue;">`IAccount`</mark> is defined in [`@wepin/types`](https://github.com/WepinWallet/wepin-js-sdk-types)

### **Returned Value**

* `Promise` <`IAccountBalance`>
  * Type of <mark style="color:blue;">`IAccountBalance`</mark> and <mark style="color:blue;">`ITokenBalance`</mark> is defined in [`@wepin/types`](https://github.com/WepinWallet/wepin-js-sdk-types) (Supported from version `0.0.8` and above.)
    * `symbol` *\<string>* - symbol of the account
    * `balance` *\<string>* - balance of the account
    * `tokens` *\<Array<`ITokenBalance`>>* - token balance information for the account
      * `name` *\<string>* - token name
      * `contract` *\<string>* - token contract address
      * `symbol` *\<string>* - token symbol
      * `balance` *\<string>* - token balance
  * Example

    ```
    {
    	symbol: 'ETH',
            balance: '1.1',
    	tokens:[
    		{
    			name: 'test',
    			contract: '0x123...213',
    			symbol: 'TEST',
    			balance: '10'
    		},
    	]
    }
    ```

[#exceptions](#exceptions "mention")

## `send` (Supported from version `0.5.3` and above.)

```javascript
await wepin.send(account, options?)
```

The "send" is performed using the widget, and returns the ID information of the "send" transaction. It can only be used after logging into Wepin.

### **Parameters**

* `account` <`IAccount`> - User email
  * Type of <mark style="color:blue;">`IAccount`</mark> is defined in [`@wepin/types`](https://github.com/WepinWallet/wepin-js-sdk-types)
* `options` <`ISendOptions`> - The information required for the "send".
  * The `ISendOptions` is defined at [`@wepin/types`](https://github.com/WepinWallet/wepin-js-sdk-types).
    * `toAddress` <`string`> - The address to send tokens
    * `amount` <`string`> - The amount of tokens to send (in network units)

Example

```javascript
// without options
const result = Wepin.send({
  address: '0x0000001111112222223333334444445555556666',
  network: 'Ethereum',
})

// with options
const result = Wepin.send(
  {
    address: '0x0000001111112222223333334444445555556666',
    network: 'Ethereum',
  },
  { amount: '0.1', toAddress: '0x777777888888999999000000111111222222333333' }
)
```

### **Return Value**

* `Promise` <`string`>
  * &#x20;txID (Transaction ID) of the "send" transaction
  * Example

    ```javascript
    '0x0000001111112222223333334444445555556666.............aaaaaabbbbbbccccccddddddeeeeeeffffff'
    ```

[#exceptions](#exceptions "mention")

## Exceptions

The error message types of the admin method are as follows.

<table><thead><tr><th width="290">Error Message</th><th>Description</th></tr></thead><tbody><tr><td>invalid/email-format</td><td>invalid email format</td></tr><tr><td>invalid/password-format</td><td>invalid password format (A minimum of 8 characters including letters, numbers and special characters. )</td></tr><tr><td>invalid/pin-format</td><td>invalid PIN format (6-8 digit number) (*Do not use the same number more than four times when registering)</td></tr><tr><td>invalid/firebase-token</td><td>invalid firebase token</td></tr><tr><td>invalid/wepin-api-key</td><td>invalid wepin api key</td></tr><tr><td>invalid/account</td><td>invalid account</td></tr><tr><td>invalid/email-domain</td><td>invalid email domain</td></tr><tr><td>invalid/to-address</td><td>invalid to address</td></tr><tr><td>auth/existed-email</td><td>existed email</td></tr><tr><td>auth/too-many-requests</td><td>too many firebase requests</td></tr><tr><td>auth/wrong-password</td><td>wrong password</td></tr><tr><td>auth/expired-token</td><td>expired login session</td></tr><tr><td>auth/unknown/${string}</td><td>unknown auth error</td></tr><tr><td>fail/send-email</td><td>failed to send validation email</td></tr><tr><td>fail/reset-password</td><td>failed to set password</td></tr><tr><td>fail/email-verified</td><td>failed to verify email</td></tr><tr><td>fail/wepin-login</td><td>failed to login to wepin</td></tr><tr><td>fail/wepin-register</td><td>failed to register with wepin</td></tr><tr><td>fail/get-balance</td><td>failed to get balance</td></tr><tr><td>fail/check-email</td><td>failed to check email</td></tr><tr><td>fail/requireFee</td><td>insufficient fee</td></tr><tr><td>fail/requireNetworkFee</td><td>insufficient network fee(only token transaction request)</td></tr><tr><td>require/email-verified</td><td>email verification required</td></tr><tr><td>require/signup</td><td>wepin sign-up required</td></tr><tr><td>require/wepin-register</td><td>wepin registration required</td></tr><tr><td>require/login</td><td>wepin login required</td></tr><tr><td>unknown/${string}</td><td>unknown error</td></tr></tbody></table>


---

# 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://docs.wepin.io/en/deprecated/web-javascript-sdk/sdk/method.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.
