0.12.2 • Published 2 years ago

ataraxia-services v0.12.2

Weekly downloads
2
License
MIT
Repository
github
Last release
2 years ago

ataraxia-services

npm version Dependencies Typedoc

Services with RPC and events for an Ataraxia network.

  • Based around well-defined contracts, making what a service supports very clear
  • Register services, allowing them to be consumed anywhere in the network
  • Access services via identifiers or events
  • Listen for when services become available or unavailable either globally or specifically on a single service
  • Support for remote events via Atvik, letting nodes listen to events from another node
  • Create proxy objects for a more natural way to call methods and listen to events, with support for type conversions and TypeScript declarations

Usage

To use services on top of a network install ataraxia-services:

npm install ataraxia-services

Services can then be consumed and registered by creating a Services instance on top of the network:

import { Services, ServiceContract, stringType } from 'ataraxia-services';

const net = ... // setup network with at least one transport

const services = new Services(net);

services.onServiceAvailable(service => console.log(service.id, 'is now available'));
services.onServiceUnavailable(service => console.log(service.id, 'is no longer available'));

// Join the network
await net.join();

// Join the services layer on top of the network
await services.join();

// Use contracts to describe services
const EchoService = new ServiceContract()
  .defineMethod('echo', {
    returnType: stringType,
    parameters: [
      {
        name: 'message',
        type: stringType
      }
    ]
  });

// Easily register and expose services to other nodes
services.register('echo', EchoService.implement({
  echo(message) {
    return Promise.resolve(message);
  }
}));

// Consume a service registered anywhere, local or remote
const echoService = services.get('echo');
if(echoService.available) {
  // Call methods
  await echoService.call('echo', 'Hello world');
  
  // Or create a proxy for a cleaner API
  const proxied = echoService.as(EchoService);
  await proxied.echo('Hello world');
}
0.12.1

2 years ago

0.12.2

2 years ago

0.12.0

2 years ago

0.11.0

3 years ago

0.10.0

3 years ago

0.9.0

3 years ago

0.9.1

3 years ago

0.8.2

4 years ago

0.8.1

4 years ago

0.8.0

4 years ago

0.7.3

4 years ago

0.7.2

5 years ago

0.7.1

5 years ago

0.7.0

5 years ago

0.6.1

6 years ago

0.6.0

6 years ago

0.5.3

6 years ago

0.5.2

6 years ago

0.5.1

6 years ago

0.5.0

6 years ago

0.4.4

6 years ago

0.4.3

6 years ago

0.4.2

6 years ago

0.4.1

6 years ago

0.4.0

6 years ago

0.3.2

6 years ago

0.3.1

6 years ago

0.3.0

6 years ago