# 메서드

## getStatus

```javascript
await wepinSdk.getStatus()
```

WepinSDK의 Lifecycle 상태 값을 반환합니다.

### **Parameters**

* \<void>

### **Return value**

* `WepinLifeCycle` \<string>
  * `not_initialized`: `WepinSDK`이 초기화되지 않음
  * `initializing`: `WepinSDK`초기화 진행 중
  * `initialized`: `WepinSDK`초기화 완료
  * `before_login`: `WepinSDK`은 초기화되었으나 사용자는 로그인되지 않음
  * `login`: 사용자가 로그인 되었고 위핀에도  가입되어있음
  * `login_before_register` : 사용자가 로그인하였으나 위핀에 가입되지 않음

### **Example**

```javascript
const status = await wepinSdk.getStatus()
```

## openWidget

```javascript
await wepinSdk.openWidget()
```

위젯 윈도우를 보여 줍니다. 만약 사용자가 로그인 되어 있지 않다면, 위젯 윈도우는 열리지 않습니다. 따라서 `openWidget` 전에 반드시 사용자는 위핀에 로그인 되어 있어야 합니다. 위핀에 로그인 하기 위해서는 `loginWithUI` 또는 `@wepin/login-js`의  `oginWepin` 메서드를 사용합니다.&#x20;

### **Parameters**

* \<void>

### **Return Value**

* `<Promise>` \<void>

### **Example**

```javascript
await wepinSdk.openWidget()
```

## closeWidget

```javascript
wepinSdk.closeWidget()
```

위젯 윈도우를 닫습니다. 윈도우를 닫아도 로그아웃 되지 않습니다.&#x20;

### **Parameters**

* \<void>

### **Return Value**

* \<void>

### **Example**

```javascript
wepinSdk.closeWidget()
```

## loginWithUI

```javascript
await wepinSdk.loginWithUI({email}?)
```

로그인한 사용자의 정보를 반환합니다. 로그인한 사용자가 없을 경우, 위핀 위젯은 로그인 페이지를 표시할 것입니다. 위젯 없이 로그인을 수행하려면, `@wepin/login-js`에서 `loginWepin()` 메서드를 사용하세요.

### **Parameters**

* `email` \<string> **optional**

  위핀에 로그인할 사용자의 이메일 주소

### **Return Value**

* Promise \<IWepinUser>
  * `status` \<string> &#x20;

    성공 여부<'success'|'fail'>
  * `userInfo` \<object> **optional**
    * `userId` \<string>

      위핀의 사용자 ID
    * `email` \<string>

      위핀에 로그인된 사용자의 이메일 주소
    * `provider` \<string>

      &#x20;<'google'|'apple'|'naver'|'discord'|'email'|'external\_token'>
    * `use2FA` \<boolean>

      사용자 지갑에 2FA가 활성화 되어 있는지 여부
  * `userStatus`: \<object>&#x20;
    * `loginStatus` \<string>

      <'complete' | 'pinRequired' | 'registerRequired'>&#x20;

      사용자의 loginStatus 값이 'complete'가 아닌  경우, 위핀에 등록을 해야 합니다.
    * `pinRequired` \<boolean> **optional**

      사용자 PIN 번호 필요 여부
  * `walletId` \<string>

    위핀 사용자의 지갑 ID
  * `token` \<object> **optional**
    * `accessToken` \<string> \
      Wepin Access Token
    * `refreshToken` \<string>\
      Wepin Refresh Token

### **Example**

```javascript
//without email
const userInfo = await wepinSdk.loginWithUI()
//with email
const userInfo = await wepinSdk.loginWithUI({email})
```

* respnse

```json
{
    "status": "success",
      "userInfo": {
        "userId": "120349034824234234",
        "email": "abc@gmail.com",
        "provider": "google",
        "use2FA": true,
      },
}
```

## getLoginSession

```javascript
await wepinSdk.getLoginSession(provToken?)
```

Wepin에서 현재 Firebase 토큰의 정보를 가져옵니다. 이전 토큰이 제공된 경우, 저장된 토큰을 업데이트한 후 최신 인증 정보를 반환합니다.

### **Supported Version**

* 버전 <mark style="color:orange;">**`0.0.33`**</mark> 이상에서 지원

### **Parameters**

* `provToken` \<object> **optional** \
  이전에 발급된 토큰
  * `firebaseToken` \<IFirebaseWepin>\
    Firebase 로그인 정보
    * `provider` \<string>\
      Provider for Firebase Login
    * `idToken` \<string>\
      Wepin Firebase idToken
    * `refreshToken` \<string>\
      Wepin Firebase refreshToken
  * `wepinToken` \<IWepinToken>\
    사용자의 Wepin Token
    * `accessToken` \<string>\
      Wepin  Access Token
    * `refreshToken` \<string>\
      Wepin Refresh Token

### **Return Value**

* Promise \<object>
  * `firebaseToken` \<IFirebaseWepin>\
    Firebase 로그인 정보
    * `provider` \<string>\
      Provider for Firebase Login
    * `idToken` \<string>\
      Wepin Firebase idToken
    * `refreshToken` \<string>\
      Wepin Firebase refreshToken
  * `wepinToken` \<IWepinToken>\
    사용자의 Wepin Token
    * `accessToken` \<string>\
      Wepin  Access Token
    * `refreshToken` \<string>\
      Wepin Refresh Token

### **Example**

```javascript
//without parameter. get prevToken
const prevToken = await wepinSdk.getLoginSession()
//with parameter. refresh Firebase Token.
const loginToken = await wepinSdk.getLoginSession(prevToken)
```

* respnse

```json
{
  "firebaseToken": {
    "provider": "google",
    "idToken": "eyJhbGci...",
    "refreshToken": "AMf-vBwvHUYdt5..."
  },
  "wepinToken": {
    "accessToken": "eyJhbGciOiJS...",
    "refreshToken": "eyJhbGciOiJ..."
  }
}
```

## register

```javascript
await wepinSdk.register()
```

사용자를 위핀에 등록합니다. 가입 및 로그인 후,  위핀 위젯의 등록 페이지가 열리고 위핀 서비스에 등록(지갑 생성 및 계정 생성)을 진행합니다. 이 기능은 WepinSDK의 `WepinLifeCycle`이 login\_before\_register일 때만 사용할 수 있습니다. @wepin/login-js에서 loginWepin() 메서드를 호출한 후, userStatus의 loginStatus 값이 'complete'가 아니면 이 메서드를 호출해야 합니다.

### **Parameters**

* `<void>`

### **Return Value**

* Promise \<IWepinUser>
  * `status` \<string> &#x20;

    성공 여부<'success'|'fail'>
  * `userInfo` \<object> **optional**
    * `userId` \<string>

      위핀의 사용자 ID
    * `email` \<string>

      위핀에 로그인된 사용자의 이메일 주소
    * `provider` \<string>

      <'google'|'apple'|'naver'|'discord'|'email'|'external\_token'>
    * `use2FA` \<boolean>

      사용자 지갑에 2FA가 활성화 되어 있는지 여부
  * `userStatus`: \<object>&#x20;
    * `loginStatus` \<string>

      <'complete' | 'pinRequired' | 'registerRequired'>&#x20;

      사용자의 loginStatus 값이 'complete'가 아닌  경우, 위핀에 등록을 해야 합니다.
    * `pinRequired` \<boolean> **optional**

      사용자 PIN 번호 필요 여부
  * `walletId` \<string>

    위핀 사용자의 지갑 ID
  * `token` \<object> **optional**
    * `accessToken` \<string>\
      Wepin Access Token
    * `refreshToken` \<string>\
      Wepin Refresh Token

### **Example**

```javascript
const userInfo = await wepinSdk.register()
```

## registerUserEmail

```javascript
await wepinSdk.registerUserEmail(param)
```

registerUserEmail 함수는 OAuth 프로바이더로부터 이메일이 등록되지 않은 계정에 대해 위핀 이메일을 등록합니다.

### **Supported Version**

* 버전 <mark style="color:orange;">**`0.0.18`**</mark> 이상에서 지원

### **Parameters**

* `provider` \<LoginProviders> \
  Provider for Firebase login. The value must be one of the supported login provider names in lowercase, such as 'google', 'naver', 'discord', 'apple', 'facebook', or 'line'. Please refer to [Wepin Social Login Auth Provider documentation](https://docs.wepin.io/login/social-login-auth-provider) to check the supported login providers.
* `idToken` \<string> \
  id token value to be used for login
* `accessToken` \<string> \
  access token value to be used for login

### **Return Value**

* `Promise` \<IWepinUser>
  * `status` \<string> &#x20;

    성공 여부<'success'|'fail'>
  * `userInfo` \<object> **optional**
    * `userId` \<string>

      위핀의 사용자 ID
    * `email` \<string>

      위핀에 로그인된 사용자의 이메일 주소
    * `provider` \<string>

      <'google'|'apple'|'naver'|'discord'|'email'|'external\_token'>
    * `use2FA` \<boolean>

      사용자 지갑에 2FA가 활성화 되어 있는지 여부
  * `userStatus`: \<object>&#x20;
    * `loginStatus` \<string>

      <'complete' | 'pinRequired' | 'registerRequired'>&#x20;

      사용자의 loginStatus 값이 'complete'가 아닌  경우, 위핀에 등록을 해야 합니다.
    * `pinRequired` \<boolean> **optional**

      사용자 PIN 번호 필요 여부
  * `walletId` \<string>

    위핀 사용자의 지갑 ID
  * `token` \<object> **optional**
    * `accessToken` \<string>\
      Wepin Access Token
    * `refreshToken` \<string>\
      Wepin Refresh Token

### **Example**

```javascript
await wepinSdk.registerUserEmail({
    provider: 'google',
    idToken: 'google-idToken',
})
```

## logout

```javascript
await wepinSdk.logout()
```

위핀 사용자를 로그아웃 합니다.&#x20;

### **Parameters**

* \<void>

### **Return Value**

* `Promise` \<void>

### **Example**

```javascript
await wepinSdk.logout()
```

## getAccounts

```javascript
await wepinSdk.getAccounts()
or
await wepinSdk.getAccounts(options?)
```

앱에서 사용 가능한 사용자의  계정정보(네트워크와 주소)를 반환합니다.&#x20;

이 기능은 위핀에 로그인한 후에만 사용할 수 있습니다.&#x20;

`options` 파라미터가 없는 경우에는 사용자의 모든 계정 정보가 반환됩니다.&#x20;

### **Parameters**

* `options` \<object> **optional**
  * `networks` \<string\[]> **optional**

    반환 받고자 하는 계정의네트워크 입니다. \
    `networks` 에 넣을 수 있는 블록체인 네트워크는  아래의 **지원 블록체인 페이지**에서 확인가능합니다.
  * `withEoa` \<boolean> **optional**

    AA 계정이 있는 경우, EOA 계정도 포함해서 반환 받을지 여부

{% content-ref url="../../../wepin/supported-blockchains" %}
[supported-blockchains](https://docs.wepin.io/wepin/supported-blockchains)
{% endcontent-ref %}

### **Return Value**

사용자가 로그인 되어 있는 경우,  네트워크의 계정 정보  `Account[]` 가 반환됩니다.&#x20;

* `Promise` \<Account\[]>
  * address \<string>

    사용자 계정의 주소
  * network \<string>

    사용자 계정의 network 종류
  * contract \<string> **optional**&#x20;

    토큰의 계약 주소
  * isAA \<boolean> **optional**&#x20;

    AA 계정인지 여부

### **Example**

```javascript
const result = await wepinSdk.getAccounts({
  networks: ['Ethereum'], 
  withEoa: true
})
```

* response

```javascript
[
  {
    "address": "0x0000001111112222223333334444445555556666",
    "network": "Ethereum",
  },
  {
    "address": "0x0000001111112222223333334444445555556666",
    "network": "Ethereum",
    "contract": "0x777777888888999999000000111111222222333333",
  },
  {
    "address": "0x4444445555556666000000111111222222333333",
    "network": "Ethereum",
    "isAA": true,
  },
]

```

## getBalance

```javascript
await wepinSdk.getBalance(accounts)
or
await wepinSdk.getBalance()
```

계정의 잔액(수량) 정보를 반환합니다. 이 기능은 위핀에 로그인한 후에만 사용할 수 있습니다.&#x20;

`accounts` 파라미터가 없는 경우에는 사용자의 모든 계정의 잔액이 반환 됩니다.

### **Parameters**

* `accounts` \<Account\[]> **optional**
  * `network` \<string>

    잔액을 조회할 사용자 계정의 네트워크 종류
  * `address` \<string>

    잔액을 조회할 사용자 계정의 주소
  * `isAA` \<boolean> **optional**&#x20;

    AA 계정인지 여부

### **Return Value**

* `Promise` \<AccountBalanceInfo\[]>
  * `network` \<string>

    사용자 계정의 네트워크 종류
  * `address` \<string>

    사용자 계정의 주소
  * `symbol` \<string>&#x20;

    네트워크 심볼
  * `balance` \<string>&#x20;

    보유하고 있는 네트워크 코인의 갯수
  * `tokens` \<TokenBalanceInfo\[]>&#x20;
    * `symbol` \<string>&#x20;

      토큰 심볼
    * `balance` \<string>&#x20;

      보유하고 있는 토큰의 갯수
    * `contract` \<string>&#x20;

      토큰 계약주소

### **Example**

```javascript
const result = await wepinSdk.getBalance([{
  address: '0x0000001111112222223333334444445555556666',
  network: 'Ethereum',
}])
```

* response

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

## send

```javascript
await wepinSdk.send({account, txData?})
```

위젯을 이용하여 send기능을 수행하고 send 트랜젝션의 ID정보를 반환합니다. 위핀에 로그인한 후에만 사용할 수 있습니다.

### **Parameters**

* `account` \<Account>&#x20;

  전송할 사용자의  계정 정보

  * `network` \<string>&#x20;

    전송할 네트워크 종류
  * `address` \<string>&#x20;

    전송할 계정의 주소
  * contract \<String> **optional**&#x20;

    토큰의 계약 주소
* `txData` \<object> **optional**
  * `to` \<string>&#x20;

    전송 받을 주소
  * `amount` \<string> &#x20;

    전송할 수량

### **Return Value**

* `Promise` \<object>

  * `txId` \<string>

  &#x20;      send 트랜잭션의 txID

### **Example**

```javascript
const result = await wepinSdk.send({
    account: {
        address: '0x0000001111112222223333334444445555556666',
        network: 'Ethereum',
    },
    txData: {
        to: '0x9999991111112222223333334444445555556666',
        amount: '0.1',
    }
})
```

* response

```json
{
    "txId": "0x76bafd4b700ed959999d08ab76f95d7b6ab2249c0446921c62a6336a70b84f32"
}
```

## finalize

```javascript
wepinSdk.finalize()
```

WepinSDK 사용을 종료합니다. `WepinLifeCycle`이 `not_initialized` 로 변경됩니다.&#x20;

### **Return Value**

* `void`

### **Example**

```javascript
wepinSdk.finalize()
```
