/**
* Example usage of V2RequestBuilder module
* This file demonstrates the various ways to use the v2 API request builder
*/
import { V2RequestBuilder, buildV2Url, parseApiResponse, isErrorResponse } from './v2-request-builder.js';
// Example 1: Basic usage with class instance
console.log('=== Example 1: Basic Class Usage ===\n');
const builder = new V2RequestBuilder(1); // Ethereum Mainnet
const url1 = builder.buildUrl({
module: 'account',
action: 'balance',
params: {
address: '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb',
tag: 'latest'
},
apiKey: 'YourApiKeyToken'
});
console.log('Account balance URL:');
console.log(url1);
console.log();
// Example 2: Switching chain IDs
console.log('=== Example 2: Switching Chain IDs ===\n');
console.log('Current chain ID:', builder.getChainId());
builder.setChainId(137); // Switch to Polygon
console.log('New chain ID:', builder.getChainId());
const url2 = builder.buildUrl({
module: 'account',
action: 'tokentx',
params: {
address: '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb',
page: 1,
offset: 10
},
apiKey: 'YourApiKeyToken'
});
console.log('Polygon token transfers URL:');
console.log(url2);
console.log();
// Example 3: One-off request to different chain
console.log('=== Example 3: One-off Different Chain ===\n');
const url3 = builder.buildUrlForChain(42161, { // Arbitrum
module: 'block',
action: 'getblocknobytime',
params: {
timestamp: 1578638524,
closest: 'before'
},
apiKey: 'YourApiKeyToken'
});
console.log('Arbitrum block lookup URL:');
console.log(url3);
console.log('Current instance chain ID (unchanged):', builder.getChainId());
console.log();
// Example 4: Standalone function
console.log('=== Example 4: Standalone Function ===\n');
const url4 = buildV2Url(
10, // Optimism
'contract',
'getabi',
{ address: '0x1234567890123456789012345678901234567890' },
'YourApiKeyToken'
);
console.log('Optimism contract ABI URL:');
console.log(url4);
console.log();
// Example 5: Parsing API responses
console.log('=== Example 5: Parsing API Responses ===\n');
const successResponse = {
status: '1',
message: 'OK',
result: '1000000000000000000' // 1 ETH in wei
};
const parsed = parseApiResponse<string>(successResponse);
console.log('Parsed success response:');
console.log('Status:', parsed.status);
console.log('Message:', parsed.message);
console.log('Result:', parsed.result);
console.log('Is error?', isErrorResponse(parsed));
console.log();
const errorResponse = {
status: '0',
message: 'NOTOK',
result: 'Invalid address format'
};
const parsedError = parseApiResponse<string>(errorResponse);
console.log('Parsed error response:');
console.log('Status:', parsedError.status);
console.log('Message:', parsedError.message);
console.log('Result:', parsedError.result);
console.log('Is error?', isErrorResponse(parsedError));
console.log();
// Example 6: Special characters and encoding
console.log('=== Example 6: URL Encoding ===\n');
const url5 = buildV2Url(
1,
'logs',
'getLogs',
{
address: '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb',
topic0: '0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef',
fromBlock: 12345,
toBlock: 67890
},
'YourApiKeyToken'
);
console.log('Logs query URL:');
console.log(url5);
console.log();
// Example 7: Error handling
console.log('=== Example 7: Error Handling ===\n');
try {
const invalidBuilder = new V2RequestBuilder(0);
} catch (error) {
console.log('Caught error for invalid chain ID:');
console.log((error as Error).message);
}
try {
const invalidResponse = { status: '2', message: 'test' };
parseApiResponse(invalidResponse);
} catch (error) {
console.log('Caught error for invalid API response:');
console.log((error as Error).message);
}
console.log('\n=== All Examples Complete ===');