# JavaScript/TypeScript

Complete JavaScript and TypeScript examples for integrating with NextBlock's gRPC API and QUIC transaction submission.

## Overview

These examples demonstrate how to:

* Establish secure gRPC connections with authentication
* Submit raw transaction bytes over QUIC for lower transport overhead
* Submit single and batched transactions with proper tipping
* Stream real-time tip floor data for dynamic tip optimization
* Maintain persistent connections with keepalive mechanisms

## Prerequisites

Install the required dependencies:

```bash
npm install @grpc/grpc-js @grpc/proto-loader
npm install @solana/web3.js @solana/spl-token
npm install typescript @types/node  # For TypeScript support

# Generate JavaScript gRPC client from nextblock-proto
# See https://github.com/nextblock-ag/nextblock-proto for instructions
```

## Examples

### Core Examples

* [Connection](https://docs.nextblock.io/api/examples/javascript/connection) - Establish gRPC connections with authentication
* [QUIC Transaction Submission](https://docs.nextblock.io/api/examples/javascript/quic) - Send raw signed transaction bytes over QUIC
* [Submit Single Transaction](https://docs.nextblock.io/api/examples/javascript/submit-single-transactions) - Send individual transactions with tips
* [Submit Batched Transactions](https://docs.nextblock.io/api/examples/javascript/submit-batched-transactions) - Send atomic transaction bundles
* [Tip Floor Stream](https://docs.nextblock.io/api/examples/javascript/tip-floor-stream) - Stream real-time tip floor data
* [Keepalive](https://docs.nextblock.io/api/examples/javascript/keepalive) - Maintain persistent connections

## Quick Start

1. **Generate gRPC client** from [nextblock-proto](https://github.com/nextblock-ag/nextblock-proto)
2. **Install dependencies** using npm/yarn
3. **Set up environment** with API key and endpoint
4. **Start with connection example** to establish authenticated gRPC connection
5. **Use tip floor streaming** to optimize transaction tips dynamically
6. **Submit transactions** using single or batched submission methods

## Key Features

### TypeScript Support

All examples include full TypeScript type definitions for better development experience.

### Modern JavaScript

Uses modern ES6+ features including async/await, destructuring, and modules.

### Error Handling

Comprehensive error handling with retry logic and exponential backoff.

### Connection Management

Persistent connections with keepalive, health monitoring, and automatic recovery.

### Dynamic Tipping

Real-time tip optimization based on current network conditions from tip floor API.

## Best Practices

1. **Use TypeScript** - Leverage type safety for better code quality
2. **Enable TLS** - Always use secure connections in production
3. **Implement keepalive** - Maintain persistent connections for better performance
4. **Monitor tip floors** - Use streaming API for dynamic tip adjustment
5. **Handle errors gracefully** - Implement proper retry logic with exponential backoff
6. **Use environment variables** - Store sensitive configuration securely
7. **Choose appropriate endpoints** - Use the closest endpoint for better latency
8. **Bundle transactions** - Use batched submissions for atomic operations
