# 메서드

## 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](/login/social-login-auth-provider.md) 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="/pages/jNG611rZkq69C8zZKglh" %}
[지원 블록체인](/wepin/supported-blockchains.md)
{% 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()
```


---

# 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/widget-integration/web-javascript-sdk/widget/methods.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.
