> For the complete documentation index, see [llms.txt](https://docs.endless.link/endless/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.endless.link/endless/devbuild/build/endless-sdks/typescript-sdk.md).

# TypeScript SDK

## Endless TypeScript SDK <a href="#endless-typescript-sdk" id="endless-typescript-sdk"></a>

### Overview <a href="#overview" id="overview"></a>

Endless provides a fully supported TypeScript SDK with the source code in the [endless-ts sdk Github](https://github.com/endless-labs/endless-ts-sdk) repository. The Endless TypeScript SDK provides a convenient way to interact with the Endless blockchain using TypeScript. It offers a set of utility functions, classes, and types to simplify the integration process and enhance developer productivity.

* **Developer experience** Strongly typed APIs and Interfaces, autocomplete, comprehensive documentation.
* **Stability** Test suite runs against Endless fullnode and indexer with a local network
* **Transaction Builder** Intuitive and simplified transaction builder flow
* **Serialization/deserialization support** Full nested serialization/deserialization support and Move sub-classes to easily serialize and deserialize Move types

#### Installation <a href="#installation" id="installation"></a>

```shell
 pnpm i @endlesslab/endless-ts-sdk
```

```shell
 npm i @endlesslab/endless-ts-sdk
```

```shell
 yarn add @endlesslab/endless-ts-sdk
```

### Quick Start <a href="#quick-start" id="quick-start"></a>

**Set up** Endless

```js
import { Account, AccountAddress, Endless, EndlessConfig, Network } from "@endlesslab/endless-ts-sdk";

const endless = new Endless(); // default to devnet

// with custom configuration
const endlessConfig = new EndlessConfig({ network: Network.TESTNET });
const endless = new Endless(endlessConfig);
```

**Generate new Account**

```js
const alice = Account.generate();
const bob = Account.generate();
```

**Faucet Alice**

```js
const fund_tx = await endless.fundAccount({ signer: alice });
await endless.waitForTransaction({ transactionHash: fund_tx.hash });
```

**Fetch balance from chain**

```js
const balance = await endless.viewEDSBalance(alice.accountAddress);
console.log("alice balance:", balance);
```

**Transfer EDS coin transaction**

```js
const transaction = await endless.transferEDS({
  sender: alice,
  recipient: bob.accountAddress,
  amount: 1000000,
});
const pendingTransaction = await endless.signAndSubmitTransaction({
  signer: alice,
  transaction,
});
```

**Build and submit transaction**

```js
const transaction = await endless.transaction.build.simple({
  sender: alice.accountAddress,
  data: {
    function: "0x1::endless_account::transfer",
    typeArguments: [],
    functionArguments: [bob.accountAddress, 100],
  },
});

// using sign and submit separately
const senderAuthenticator = endless.transaction.sign({
  signer: alice,
  transaction,
});
const pendingTransaction = await endless.transaction.submit.simple({
  transaction,
  senderAuthenticator,
});

// using signAndSubmit combined
const pendingTransaction = await endless.signAndSubmitTransaction({
  signer: alice,
  transaction,
});
```
