1.1.3 • Published 5 months ago

ai-network-dag-client v1.1.3

Weekly downloads
-
License
MIT
Repository
-
Last release
5 months ago

AINetwork DAG Client

JavaScript client for interacting with the AINetwork MerkleDAG gRPC service.

Installation

npm install ai-network-dag-client

Features

  • Simple API for AINetwork MerkleDAG service
  • Promise-based methods
  • Event-based subscription handling
  • Built-in file handling utilities

Usage Examples

Basic Setup

const AINetworkDAGClient = require('ai-network-dag-client');
const grpc = require('@grpc/grpc-js');

// Connect to an insecure server (for development)
const client = new AINetworkDAGClient('localhost:50051');

// OR connect to a secure server
const secureClient = new AINetworkDAGClient(
  'secure-server:50052',
  grpc.credentials.createSsl()
);

Adding Content

// Add simple content
async function addContent() {
  try {
    const response = await client.add({
      message: 'Hello, AINetwork DAG!',
      data: Buffer.from('Some data'),
      children: [] // optional child CIDs
    });
    
    console.log('Added content with CID:', response.cid);
  } catch (error) {
    console.error('Error adding content:', error);
  }
}

// Add content from a file
async function addFile() {
  try {
    const response = await client.addFile(
      './data.json',
      'My JSON data'
    );
    
    console.log('Added file with CID:', response.cid);
  } catch (error) {
    console.error('Error adding file:', error);
  }
}

Getting Content

async function getContent(cid) {
  try {
    const content = await client.get(cid);
    
    console.log('Retrieved content:', {
      cid: content.cid,
      message: content.message,
      dataLength: content.data ? content.data.length : 0,
      children: content.children
    });
    
    // If the content contains text data
    if (content.data) {
      const textData = Buffer.from(content.data).toString('utf8');
      console.log('Content data as text:', textData);
    }
  } catch (error) {
    console.error('Error getting content:', error);
  }
}

Publishing to a Topic

async function publishToTopic() {
  try {
    const response = await client.publish(
      'my-topic',
      'Hello, subscribers!'
    );
    
    console.log('Publish successful:', response.success);
  } catch (error) {
    console.error('Error publishing:', error);
  }
}

Subscribing to a Topic

function subscribeToTopic() {
  // Your node public key
  const nodePk = 'your-node-public-key';
  
  // Subscribe to a topic
  const subscriptionId = client.subscribe('my-topic', nodePk);
  
  // Handle incoming publications
  client.on('publication', (data) => {
    console.log(`Received publication on ${data.topic}:`, data.instruction);
  });
  
  // Handle errors
  client.on('error', (data) => {
    console.error(`Subscription error (${data.subscriptionId}):`, data.error);
  });
  
  // Handle subscription end
  client.on('end', (data) => {
    console.log(`Subscription ended: ${data.subscriptionId}`);
  });
  
  // Later, when you want to unsubscribe
  setTimeout(() => {
    const success = client.unsubscribe(subscriptionId);
    console.log('Unsubscribed:', success);
  }, 60000); // Unsubscribe after 1 minute
}

Cleanup

// When you're done with the client
function cleanup() {
  client.close();
  console.log('Client closed');
}

API Reference

AINetworkDAGClient

The main client class for interacting with the AINetwork MerkleDAG service.

Constructor

new AINetworkDAGClient(serverAddress, credentials)
  • serverAddress: The gRPC server address (e.g., "localhost:50051")
  • credentials: Optional custom gRPC credentials. Defaults to insecure credentials.

Methods

  • add(content): Add content to the MerkleDAG.

    • content.message: Message or filename (string)
    • content.data: Binary data (Buffer or Uint8Array)
    • content.children: Array of child CIDs (string[])
    • Returns: Promise with {cid: string}
  • get(cid): Get content from the MerkleDAG by CID.

    • cid: Content identifier (string)
    • Returns: Promise with content object
  • publish(topic, instruction): Publish to a topic.

    • topic: Topic name (string)
    • instruction: Message to publish (string)
    • Returns: Promise with {success: boolean}
  • subscribe(topic, nodePk): Subscribe to a topic.

    • topic: Topic name (string)
    • nodePk: Node public key (string)
    • Returns: Subscription ID (string)
  • unsubscribe(subscriptionId): Unsubscribe from a topic.

    • subscriptionId: ID returned from subscribe() (string)
    • Returns: Success status (boolean)
  • addFile(filePath, message, children): Add content from a file.

    • filePath: Path to file (string)
    • message: Optional description (string)
    • children: Optional array of child CIDs (string[])
    • Returns: Promise with {cid: string}
  • close(): Close the client and all active subscriptions.

Events

  • 'publication': Emitted when a publication is received on a subscribed topic.

    • {subscriptionId, topic, instruction}
  • 'error': Emitted when a subscription error occurs.

    • {subscriptionId, error}
  • 'end': Emitted when a subscription ends.

    • {subscriptionId}

License

MIT

1.1.3

5 months ago

1.1.2

5 months ago

1.1.1

5 months ago

1.1.0

5 months ago

1.0.2

5 months ago

1.0.1

5 months ago

1.0.0

5 months ago