JSPM

  • Created
  • Published
  • Downloads 198
  • Score
    100M100P100Q145593F
  • License GPL-2.0-only

Actyx Pond

Package Exports

  • @actyx/pond
  • @actyx/pond/lib/index.js
  • @actyx/pond/lib/types
  • @actyx/pond/lib/types.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@actyx/pond) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

An open-source Typescript/Javascript framework for implementing distributed state-machines which are automatically kept in sync across a swarm of interconnected devices. The Actyx Pond requires Actyx to be running on each device.

The key features of Actyx Pond are:

  • Distributed event-sourcing for great information replication facilities and declarative information consumption
  • Partition tolerance with an eventually consistent programming model for arbitrary business logic
  • Eventual consistency by using a state machine time-travel algorithm to agree on global state

This package builds on the Actyx SDK.

Example usage

import { Pond, Tag, Fish, FishId } from '@actyx/pond'
(async () => {

    // Connect to the local Actyx process
    const pond = await Pond.default({
        appId: 'com.example.app',
        displayName: 'Example App',
        version: '1.0.0'
    })


    const chatTag = Tag<string>('ChatMessage');
    // A fish is a state machine
    const ChatFish: Fish<string[], string> = {
        fishId: FishId.of('chat', 'MyChatFish', 0),
        initialState: [],
        onEvent: (state, event) => {
            state.push(event);
            return state;
        },
        where: chatTag,
    };

    // Example event emission; this can actually
    // happen on any node running Actyx
    setInterval(() => {
        pond.emit(chatTag, 'a chat message')
    }, 2_000)

    // Observe time-travelling state machine
    pond.observe(ChatFish, (state) => {
        console.log(state)
    })

})()
  • ESLint for live source code linting