1.7.1 • Published 2 years ago

@arcblock/event-server v1.7.1

Weekly downloads
7
License
Apache-2.0
Repository
github
Last release
2 years ago

event-server

styled with prettier docs Gitter

Use this package to attach enhance the did-auth process with a websocket server, which accepts sockets connections from browsers and dispatch topic messages to those clients.

Table of Contents

Install

npm install @arcblock/event-server
// or
yarn add @arcblock/event-server

Usage

Init Authenticator and Handlers

const ForgeSDK = require('@arcblock/forge-sdk');
const { WalletAuthenticator, WalletHandlers } = require('@arcblock/did-auth');

// First setup authenticator and handler factory
const wallet = ForgeSDK.Wallet.fromRandom().toJSON();
const authenticator = new WalletAuthenticator({
  wallet,
  baseUrl: 'http://wangshijun.natapp1.cc',
  appInfo: {
    description: 'Starter projects to develop web application on forge',
    icon: '/images/logo@2x.png',
    name: 'Forge Web Starter',
  },
  chainInfo: {
    host: 'http://did-workshop.arcblock.co:8210/api',
    id: 'forge',
  },
});

const handlers = new WalletHandlers({
  authenticator,
  tokenStorage: new MongoStorage({ url: process.env.MONGO_URI }),
});

module.exports = {
  authenticator,
  handlers,
};

Configure Express Server

// Then attach handler to express server
const http = require('http');
const express = require('express');
const EventServer = require('@arcblock/event-server');
const app = express();

const server = http.createServer(app);
const eventServer = new EventServer(server, ['auth']);

handlers.on('scanned', data => eventServer.dispatch('auth', data));
handlers.on('succeed', data => eventServer.dispatch('auth', data));
handlers.on('failed', data => eventServer.dispatch('auth', data));

handlers.attach({
  action: 'login',
  claims: {
    profile: () => ({
      fields: ['fullName', 'email'],
      description: 'Please provide your name and email to continue',
    }),
  },
  onAuth: async ({ claims, userDid }) => {
    try {
      const profile = claims.find(x => x.type === 'profile');
      console.info('login.success', { userDid, profile });
    } catch (err) {
      console.error('login.error', err);
    }
  },
});

server.listen(() => {
  console.log('server started');
});

Then on the client

const EventClient = require('@arcblock/event-client');

const endpoint = 'ws://192.168.43.94:3030';

(async () => {
  const hub = new EventClient(endpoint);
  const subscription = await hub.subscribe('auth', '2c6e68c5');
  const subscription = await hub.subscribe('swap', 'abcd1234');
  subscription.on('data', data => console.log('token.update', data));
})();
1.7.1

2 years ago

1.7.0

2 years ago

1.6.3

3 years ago

1.6.2

3 years ago

1.6.1

3 years ago

1.6.0

3 years ago

1.5.8

3 years ago

1.5.7

3 years ago

1.5.6

3 years ago

1.5.5

3 years ago

1.5.4

3 years ago

1.5.3

3 years ago

1.5.2

3 years ago

1.5.1

3 years ago

1.5.0

3 years ago

1.4.8

3 years ago

1.4.7

3 years ago

1.4.6

3 years ago

1.4.5

3 years ago

1.4.4

3 years ago

1.4.3

3 years ago

1.4.2

4 years ago

1.4.1

4 years ago

1.4.0

4 years ago

1.0.39

4 years ago

1.0.20

4 years ago

1.0.23

4 years ago

1.0.18

4 years ago

1.0.13

4 years ago

1.0.11

4 years ago