Nostradamus Prophecy Machine

    TypeScript icon, indicating that this package has built-in type declarations

    1.2.2 • Public • Published


    License pipeline status coverage report

    The first version of C-Service: a distributed database service for CRDTs of the C-CRDTlib.

    The C-Service is meant to run on edge devices (terminal or PoP) and (will) support transactions and replication between services.

    It runs as a ServiceWorker in web browsers, using PouchDB to synchronize with a remote CouchDB server. It can also be launched as a standalone application, typically server-side, to be used by browsers that do not support Service Workers.

    The C-Service exposes a REST API which should not be accessed directly, as it may not be stable; use the c-client library instead.

    The main repository is in the Inria gitlab (this is where you can post tickets. There is an identical clone in GitHub (tickets here might be ignored).

    Getting started


    For the next steps, you will need the following software:

    In addition, you will need to enable CORS in CouchDB, using Fauxton or the dedicated NPM package from PouchDB:

    npx add-cors-to-couchdb [] \
        [-u myusername] [-p mypassword]
    (server defaults to localhost)

    Use the C-Service as a Service Worker

    A Service Worker implementation is bundled with the C-Service package, in dist/c-service-worker.js.

    To use it, just copy (or link) it to an appropriate location and register it as a ServiceWorker in your application. For more information, see our example applications.

    This Service Worker is configured to use our demo database, so feel free to re-build it to use your own: adjust the configuration in src/config.json and run

    npm install

    In a future release, the C-Client will be able to provide these settings at runtime.

    Start C-Service standalone

    Ensure CouchDB is running before starting C-Service. If it is running on another host, set the COUCHDB_URL accordingly. You will also need to provide CouchDB credentials:

    export COUCHDB_USER=my-user COUCHDB_PASSWORD=my-passwd

    It is also possible to configure WebSocket path used by the service (default is /):

    export WS_PATH=my-websocket-path

    Then run the service:

    npx @concordant/c-service

    This launches an Express server listening on TCP port 4000 and a WebSocket server on port 8999.

    Setup C-Service as a Systemd service

    First ensure CouchDB is setup as a systemd service named couchdb.service (or adapt the name in c-service.service file).

    Put the c-service folder in /opt/ or adapt the c-service.service file.

    Put the provided file c-service.service in /etc/systemd/system/.

    Create the file /etc/systemd/system/c-service.conf containing CouchDB user credentials:


    Then start the service:

    systemctl start c-service

    Test C-Service using curl

    The standalone C-Service exposes a REST API on /api, whose description can be found in file swagger.yml.

    Once your C-Service is running you can query its REST API with curl. You can view your changes in the CouchDB user pannel.

    Create the myapp database:

    curl --request POST                               \
         --header "Content-Type: application/json"    \
         --data '{"appName":"myapp"}'                 \

    Insert/update a PNCounter named myobject in myapp database:

    curl --request POST                               \
         --header "Content-Type: application/json"    \
         --data '{"appName":"myapp","id":"{\"name\":\"myobject\",\"type\":\"PNCounter\"}","document":"{\"type\":\"PNCounter\",\"metadata\":{\"increment\":[{\"name\":\"clientid\"},{\"first\":60,\"second\":{\"uid\":{\"name\":\"clientid\"},\"cnt\":-21474836}}],\"decrement\":[]},\"value\":60}"}'  \

    Get the PNCounter named myobject in myapp database:

    curl --request POST                               \
         --header "Content-Type: application/json"    \
         --data '{"appName":"myapp","id":"{\"name\":\"myobject\",\"type\":\"PNCounter\"}"}'                       \

    Get all objects of myapp database:

    curl --request POST                               \
         --header "Content-Type: application/json"    \
         --data '{"appName":"myapp"}'                 \

    Delete myapp database:

    curl --request POST                               \
         --header "Content-Type: application/json"    \
         --data '{"appName":"myapp"}'                 \


    npm i @concordant/c-service

    DownloadsWeekly Downloads






    Unpacked Size

    1.66 MB

    Total Files


    Last publish