# Using the SDK

In this Section, you will learn what are the functions provided by the SDK to integrate authentication, user management, and Movement transaction execution into your project.

## Functions Overview

1. ### signInWithGoogle: (network: MovementNetwork, apiKey: string, logEnabled?: boolean) => Promise\<SignInWithGoogleReturn>

{% code overflow="wrap" %}
```typescript
const signInWithGoogle: (network: MovementNetwork, apiKey: string, logEnabled?: boolean) => Promise<SignInWithGoogleReturn>
```
{% endcode %}

This function allows users to sign in with Google using OAuthProvider.

{% code overflow="wrap" %}
```jsdoc
* @param {MovementNetwork} network - The network on which the transaction will be executed.
* @param {string} apiKey - Your API key generated from the {@link https://dashboard.lync.world|LYNC dashboard}.
* @param {boolean} [logEnabled=true] - Enable/disable logging. The default is true.

* @returns {object} SignInWithGoogleReturn - Returns an object with the success status and the user data or error message.

* @typedef {enum} MovementNetwork - { Mainnet = 1; Testnet = 2; Devnet = 3; }
* @typedef {object} SignInWithGoogleReturn - { success: true; user: ParsedUserData } | { success: false; message: string };
* @typedef {object} ParsedUserData - { email: string; avatar: string; name: string; accountAddress: string; providerId: string; id: string; privateKey: string; network: "Mainnet" | "Testnet" | "Devnet"; }
```
{% endcode %}

### 2. signOutUser: (logEnabled?: boolean) => Promise\<SignOutUserReturn>

{% code overflow="wrap" %}
```typescript
const signOutUser: (logEnabled?: boolean) => Promise<SignOutUserReturn>
```
{% endcode %}

This function is used to sign out a user from the application. It uses Firebase's `signOut` function to sign out the user.

{% code overflow="wrap" %}
```jsdoc
* @param {boolean} [logEnabled=true] - Enable/disable logging. The default is true.

* @returns {object} SignOutUserReturn - Returns an object that contains a success status and (optionally) an error message.
 
* @typedef {object} SignOutUserReturn - { success: true } | { success: false; message: string };
```
{% endcode %}

### 3. getUserData: (email: string, network: MovementNetwork,  apiKey: string, logEnabled?: boolean) => Promise\<GetUserProfileReturn>

{% code overflow="wrap" %}
```typescript
const getUserData: (email: string, network: MovementNetwork, apiKey: string, logEnabled?: boolean) => Promise<GetUserProfileReturn>
```
{% endcode %}

This function is used to get the user data from the server using the getUserProfile function.

{% code overflow="wrap" %}
```jsdoc
* @param {string} email - The email address of the user.
* @param {MovementNetwork} network - The network on which the transaction will be executed.
* @param {string} apiKey - Your API key generated from the {@link https://dashboard.lync.world|LYNC dashboard}.
* @param {boolean} [logEnabled=true] - Enable/disable logging. The default is true.

* @returns {object} GetUserProfileReturn - Returns an object with the success status and the user data or error message.

* @typedef {enum} MovementNetwork - { Mainnet = 1; Testnet = 2; Devnet = 3; }
* @typedef {object} GetUserProfileReturn - { success: true; data: ParsedUserData } | { success: false; message: string };
* @typedef {object} ParsedUserData - { email: string; avatar: string; name: string; accountAddress: string; providerId: string; id: string; privateKey: string; network: "Mainnet" | "Testnet" | "Devnet"; }
```
{% endcode %}

### 4. movementTransaction: (args: MovementTransactionFuncArgs, apiKey: string, logEnabled?: boolean) => Promise\<MovementTransactionReturn>

{% code overflow="wrap" %}
```typescript
const movementTransaction: (args: MovementTransactionFuncArgs, apiKey: string, logEnabled?: boolean) => Promise<MovementTransactionReturn>
```
{% endcode %}

This function will initiate and execute a transaction on the specified Movement network and return an object containing a success status and transaction result or an error message.

{% code overflow="wrap" %}
```jsdoc
* @param {MovementTransactionFuncArgs} args - The arguments required to execute the generic transaction on the Movement blockchain.
  * @param {string} args.email - The email of the user.
  * @param {MovementNetwork} args.network - The network type enum (MovementNetwork).
  * @param {string} args.apiKey - Your API key generated from the {@link https://dashboard.lync.world|LYNC dashboard}.
  * @param {string} args.accountAddress - The wallet address of the currently signed-in user.
  * @param {string} args.contractAddress - The contract address.
  * @param {string} args.contractName - The contract name.
  * @param {string} args.functionName - The function name.
  * @param {Array} args.arguments - The arguments for the transaction.
    * @param {Object} args.arguments[].argument - The argument used by the function.
    * @param {TransactionArgumentTypes} args.arguments[].type - The type of the argument. Can be TransactionArgumentTypes.String, TransactionArgumentTypes.Number, TransactionArgumentTypes.Boolean, TransactionArgumentTypes.ByteArray, or TransactionArgumentTypes.Signature.
  * @param {boolean} [args.usePaymaster=false] - Enable/disable the use of paymaster. If enabled, the transaction will be sponsored. If the wallet doesn't exist, it will be created automatically before the transaction.

* @param {string} apiKey - Your API key generated from the {@link https://dashboard.lync.world|LYNC dashboard}.
* @param {boolean} [logEnabled=true] - Enable/disable logging. The default is true.


* @returns {object} MovementTransactionReturn - Returns an object with the success status and the transaction data or error message.

* @typedef {enum} MovementNetwork - { Mainnet = 1; Testnet = 2; Devnet = 3; }
* @typedef {object} MovementTransactionFuncArgs - { email: string; accountAddress: string; network: MovementNetwork; apiKey: string; contractAddress: string; contractName: string; functionName: string; arguments: Array<MovementTransactionArguments>; usePaymaster?: boolean; }
* @typedef {object} MovementTransactionArguments - { argument: string; type: TransactionArgumentTypes }
* @typedef {enum} TransactionArgumentTypes - { String = 1; Number = 2; ByteArray = 3; Signature = 4; Boolean = 5; }
* @typedef {object} MovementTransactionData - { transactionHash: string }
* @typedef {object} MovementTransactionReturn - { success: true; data: MovementTransactionData } | { success: false; data: string }
 
```
{% endcode %}

