- InterchainTransaction: add chainName + status (pending|confirmed|dropped). - VerificationBlock: add primeBlockProof (now exposed by prime-node after the JSON tag fix) so clients can reconstruct the signed message and verify the validator signature.
Dragonchain Node.js SDK
Official Node.js and TypeScript SDK for interacting with Dragonchain blockchain nodes.
Features
- 🔒 HMAC-SHA256 Authentication - Secure request signing
- 📦 Full TypeScript Support - Complete type definitions included
- 🌐 Dual Package - Works with both ESM and CommonJS
- ✅ Comprehensive Testing - Thoroughly tested with Jest
- 🎯 Modern Best Practices - Built with latest Node.js standards
Installation
npm install @dragonchain-inc/prime-sdk
Or with yarn:
yarn add @dragonchain-inc/prime-sdk
Quick Start
import { DragonchainSDK } from '@dragonchain-inc/prime-sdk';
// Initialize the SDK
const sdk = new DragonchainSDK(
'your-public-id',
'your-auth-key-id',
'your-auth-key',
'https://your-dragonchain-endpoint.com'
);
// Check system health
await sdk.system.health();
// Get system status
const status = await sdk.system.status();
console.log(`Chain ID: ${status.id}, Level: ${status.level}`);
// Create a transaction
const txnResponse = await sdk.transaction.create({
txn_type: 'my-transaction-type',
payload: JSON.stringify({ message: 'Hello Dragonchain' }),
tag: 'example-tag',
});
console.log(`Created transaction: ${txnResponse.transaction_id}`);
Using Configuration Files
The SDK supports loading credentials from YAML configuration files:
default: my-chain-id
chains:
- name: my-chain
publicId: my-chain-id
authKeyId: my-auth-key-id
authKey: my-auth-key
endpoint: https://mychain.dragonchain.com
import { DragonchainSDK } from '@dragonchain-inc/prime-sdk';
import { loadConfig, getDefaultChain } from '@dragonchain-inc/prime-sdk';
// Load config from file
const config = loadConfig('~/.dragonchain/credentials.yaml');
const chain = getDefaultChain(config);
if (chain) {
const sdk = new DragonchainSDK(
chain.publicId,
chain.authKeyId,
chain.authKey,
chain.endpoint
);
}
API Reference
System
// Check system health
await sdk.system.health();
// Get system status
const status = await sdk.system.status();
Transactions
// Create a transaction
const response = await sdk.transaction.create({
txn_type: 'my-type',
payload: JSON.stringify({ data: 'example' }),
tag: 'optional-tag',
});
// Create multiple transactions
const bulkResponse = await sdk.transaction.createBulk({
transactions: [
{ txn_type: 'type1', payload: 'data1' },
{ txn_type: 'type2', payload: 'data2' },
],
});
// Get a transaction by ID
const txn = await sdk.transaction.get('transaction-id');
// List all transactions
const txns = await sdk.transaction.list();
Transaction Types
// Create a transaction type
await sdk.transactionType.create({
txn_type: 'my-new-type',
});
// Get a transaction type
const txnType = await sdk.transactionType.get('my-type');
// List all transaction types
const types = await sdk.transactionType.list();
// Delete a transaction type
await sdk.transactionType.delete('my-type');
Blocks
// Get a block by ID
const block = await sdk.block.get('block-id');
Interchain trace
transaction.getInterchain / block.getInterchain trace a prime block to the
public-chain anchors covering it. By default they return the first anchor per
chain (anchor proofs are chained, so the earliest per chain is the meaningful
one). Tune with options:
// Default: first anchor per chain (ETH, BTC, …)
const trace = await sdk.block.getInterchain('42');
// Up to 3 anchors per chain
await sdk.block.getInterchain('42', { perChain: 3 });
// All anchors, only the ETH-mainnet chain ("1"); "0" = BTC
await sdk.block.getInterchain('42', { perChain: 0, chains: ['1'] });
Proof Measure (public, unauthenticated)
proof-measure is a separate, public, unauthenticated Dragonchain service
(the measured-immutability / "securedBy" metric) at
https://proof-measure.dragonchain.com. It needs no credentials. Decimal fields
are returned as strings (full precision) and timestamps as unix-second numbers.
// Via the main SDK (targets the default public endpoint):
const sec = await sdk.proofMeasure.getSecurity('BTC', Math.floor(Date.now() / 1000) - 3600);
console.log(`BTC secured by ${sec.valueUsdFormatted} (${sec.raw.value} ${sec.raw.unit})`);
// Or standalone — no prime credentials needed:
import { ProofMeasureClient } from '@dragonchain-inc/prime-sdk';
const pm = new ProofMeasureClient(); // or new ProofMeasureClient({ baseURL: '...' })
const report = await pm.report({
transactionId: 'tx-123',
primeId: 'my-prime',
blockId: '42',
anchors: [
{ network: 'BTC', txHash: '0x...', timestamp: anchorUnix },
{ network: 'ETH', txHash: '0x...', timestamp: anchorUnix },
],
});
console.log(`Secured by ${report.totalValueUsdFormatted} across ${report.anchors.length} anchors`);
await pm.health();
TypeScript Support
This SDK is written in TypeScript and includes complete type definitions:
import {
DragonchainSDK,
TransactionCreateRequest,
TransactionCreateResponse,
SystemStatus,
} from '@dragonchain-inc/prime-sdk';
const sdk = new DragonchainSDK(
publicId,
authKeyId,
authKey,
baseURL
);
// Full type safety
const request: TransactionCreateRequest = {
txn_type: 'my-type',
payload: JSON.stringify({ foo: 'bar' }),
};
const response: TransactionCreateResponse = await sdk.transaction.create(request);
Authentication
The SDK uses HMAC-SHA256 authentication with the following components:
- Public ID - Your Dragonchain public identifier
- Auth Key ID - Your authentication key identifier
- Auth Key - Your secret authentication key
- Endpoint - The base URL of your Dragonchain node
Each request is signed with:
Authorizationheader:DC1-HMAC-SHA256 {authKeyId}:{signature}Dragonchainheader: Your public IDTimestampheader: Unix timestamp of the request
Development
# Install dependencies
npm install
# Run tests
npm test
# Run tests with coverage
npm run test:coverage
# Build the package
npm run build
# Lint the code
npm run lint
# Format the code
npm run format
Requirements
- Node.js >= 16.0.0
- TypeScript >= 5.0.0 (for TypeScript projects)
License
Apache-2.0
Support
For issues and questions, please visit:
- Repository: https://git.dragonchain.com/dragonchain/dragonchain-prime-node-sdk
- Documentation: https://dragonchain-core-docs.dragonchain.com
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.