Skip to main content

TypeScript SDK Setup

Complete setup guide for using GLIN SDK in TypeScript/JavaScript projects.

Prerequisites​

  • Node.js 18 or later
  • npm, yarn, or pnpm package manager
  • Basic knowledge of TypeScript/JavaScript

Installation​

Install the SDK via your preferred package manager:

# npm
npm install @glin-ai/sdk

# yarn
yarn add @glin-ai/sdk

# pnpm
pnpm add @glin-ai/sdk

Framework-Specific Setup​

Next.js (App Router)​

npx create-next-app@latest my-glin-app
cd my-glin-app
npm install @glin-ai/sdk

Create an API route for backend operations:

app/api/glin/route.ts
import { GlinClient } from '@glin-ai/sdk';
import { NextResponse } from 'next/server';

export async function GET() {
const client = await GlinClient.connect('wss://testnet.glin.ai');
const chain = await client.getChain();

return NextResponse.json({ chain });
}

Use in client components:

app/components/Balance.tsx
'use client';

import { useEffect, useState } from 'react';
import { GlinClient } from '@glin-ai/sdk';

export default function Balance({ address }: { address: string }) {
const [balance, setBalance] = useState<string>('');

useEffect(() => {
async function fetchBalance() {
const client = await GlinClient.connect('wss://testnet.glin.ai');
const bal = await client.getBalance(address);
setBalance(bal.free.toString());
}
fetchBalance();
}, [address]);

return <div>Balance: {balance} GLIN</div>;
}

React (Vite)​

npm create vite@latest my-glin-app -- --template react-ts
cd my-glin-app
npm install @glin-ai/sdk

Update vite.config.ts:

vite.config.ts
import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';

export default defineConfig({
plugins: [react()],
optimizeDeps: {
include: ['@glin-ai/sdk']
}
});

Vue 3​

npm create vue@latest my-glin-app
cd my-glin-app
npm install @glin-ai/sdk

Use in components:

src/components/Balance.vue
<script setup lang="ts">
import { ref, onMounted } from 'vue';
import { GlinClient } from '@glin-ai/sdk';

const props = defineProps<{ address: string }>();
const balance = ref('');

onMounted(async () => {
const client = await GlinClient.connect('wss://testnet.glin.ai');
const bal = await client.getBalance(props.address);
balance.value = bal.free.toString();
});
</script>

<template>
<div>Balance: {{ balance }} GLIN</div>
</template>

Node.js / Express​

mkdir my-glin-backend
cd my-glin-backend
npm init -y
npm install express @glin-ai/sdk
npm install -D @types/express tsx
server.ts
import express from 'express';
import { GlinClient } from '@glin-ai/sdk';

const app = express();
const client = await GlinClient.connect('wss://testnet.glin.ai');

app.get('/balance/:address', async (req, res) => {
const balance = await client.getBalance(req.params.address);
res.json({ balance: balance.free.toString() });
});

app.listen(3000, () => {
console.log('Server running on port 3000');
});

Run with:

npx tsx server.ts

TypeScript Configuration​

tsconfig.json​

Recommended TypeScript configuration:

tsconfig.json
{
"compilerOptions": {
"target": "ES2020",
"module": "ESNext",
"moduleResolution": "bundler",
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"types": ["node"],
"esModuleInterop": true,
"skipLibCheck": true,
"strict": true,
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "react-jsx"
},
"include": ["src/**/*"],
"exclude": ["node_modules"]
}

Type Definitions​

The SDK includes full TypeScript types. Import types as needed:

import type {
GlinClient,
Balance,
TransactionResult,
ContractMetadata
} from '@glin-ai/sdk';

Basic Usage​

Connect to Network​

import { GlinClient } from '@glin-ai/sdk';

// Connect to testnet
const client = await GlinClient.connect('wss://testnet.glin.ai');

// Or mainnet (when available)
const client = await GlinClient.connect('wss://rpc.glin.ai');

// Local development
const client = await GlinClient.connect('ws://localhost:9944');

Create Accounts​

import { Keyring } from '@glin-ai/sdk';

const keyring = new Keyring({ type: 'sr25519' });

// Development accounts
const alice = keyring.addFromUri('//Alice');
const bob = keyring.addFromUri('//Bob');

// From mnemonic
const account = keyring.addFromMnemonic(
'word1 word2 word3 ... word12'
);

// From seed
const custom = keyring.addFromUri('//CustomSeed');

Query Balances​

const balance = await client.getBalance(alice.address);
console.log('Free:', balance.free.toString());
console.log('Reserved:', balance.reserved.toString());
console.log('Frozen:', balance.frozen.toString());

Send Transactions​

const transfer = client.api.tx.balances.transfer(
bob.address,
100n * 10n**18n // 100 GLIN
);

const hash = await transfer.signAndSend(alice);
console.log('Transaction hash:', hash.toHex());

// Wait for finalization
await client.waitForFinalization(hash);
console.log('Transaction finalized!');

Environment Variables​

Create a .env.local file:

.env.local
# Network
NEXT_PUBLIC_GLIN_RPC=wss://testnet.glin.ai

# Development accounts (NEVER use in production!)
GLIN_PRIVATE_KEY=0x...

# API keys
GLIN_API_KEY=your_api_key_here

Use in your app:

const client = await GlinClient.connect(
process.env.NEXT_PUBLIC_GLIN_RPC || 'wss://testnet.glin.ai'
);

Error Handling​

import { GlinClient } from '@glin-ai/sdk';

try {
const client = await GlinClient.connect('wss://testnet.glin.ai');
const balance = await client.getBalance(address);
} catch (error) {
if (error instanceof Error) {
console.error('Error:', error.message);

// Handle specific errors
if (error.message.includes('connection')) {
console.error('Network connection failed');
} else if (error.message.includes('account')) {
console.error('Invalid account address');
}
}
}

Browser Wallet Integration​

Install wallet extension types:

npm install @polkadot/extension-dapp

Detect and connect to wallet:

import { web3Accounts, web3Enable } from '@polkadot/extension-dapp';

async function connectWallet() {
// Request access to wallet
const extensions = await web3Enable('Your App Name');

if (extensions.length === 0) {
throw new Error('No wallet extension found');
}

// Get accounts
const accounts = await web3Accounts();
console.log('Available accounts:', accounts);

return accounts[0]; // Use first account
}

Full wallet integration guide: Browser Extensions →

Performance Optimization​

Tree Shaking​

The SDK supports tree shaking. Import only what you need:

// Good - only imports used functions
import { GlinClient } from '@glin-ai/sdk';

// Avoid - imports everything
import * as GlinSDK from '@glin-ai/sdk';

Code Splitting​

For large apps, use dynamic imports:

// Lazy load SDK
const { GlinClient } = await import('@glin-ai/sdk');

const client = await GlinClient.connect('wss://testnet.glin.ai');

Connection Pooling​

Reuse client connections:

// utils/glin.ts
let client: GlinClient | null = null;

export async function getClient() {
if (!client) {
client = await GlinClient.connect('wss://testnet.glin.ai');
}
return client;
}

// Usage
import { getClient } from './utils/glin';

const client = await getClient();

Development Tools​

VS Code Extensions​

Recommended extensions:

  • ESLint - Code linting
  • Prettier - Code formatting
  • TypeScript - Built-in TS support
  • Error Lens - Inline error display

Debug Configuration​

.vscode/launch.json
{
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Debug GLIN App",
"program": "${workspaceFolder}/src/index.ts",
"preLaunchTask": "npm: build",
"outFiles": ["${workspaceFolder}/dist/**/*.js"]
}
]
}

Testing​

Unit Tests (Vitest)​

npm install -D vitest
tests/glin.test.ts
import { describe, it, expect } from 'vitest';
import { GlinClient } from '@glin-ai/sdk';

describe('GLIN SDK', () => {
it('should connect to network', async () => {
const client = await GlinClient.connect('wss://testnet.glin.ai');
expect(client).toBeDefined();

const chain = await client.getChain();
expect(chain).toContain('GLIN');
});

it('should query balance', async () => {
const client = await GlinClient.connect('wss://testnet.glin.ai');
const balance = await client.getBalance('5GrwvaEF...');
expect(balance.free).toBeGreaterThanOrEqual(0);
});
});

Troubleshooting​

"Module not found" Error​

Make sure the SDK is installed:

npm install @glin-ai/sdk
rm -rf node_modules package-lock.json
npm install

WebSocket Connection Failed​

  1. Check network endpoint is correct
  2. Verify firewall allows WebSocket connections
  3. Try different RPC endpoint

Type Errors​

Update TypeScript and SDK to latest versions:

npm install -D typescript@latest
npm install @glin-ai/sdk@latest

Next Steps​


Need help? Join our Discord or check examples.