Naturally Pacifist Marsupials
Have ideas to improve npm?Join in the discussion! »

@logux/server
TypeScript icon, indicating that this package has built-in type declarations

0.9.6 • Public • Published

Logux Server Cult Of Martians

Logux is a new way to connect client and server. Instead of sending HTTP requests (e.g., AJAX and GraphQL) it synchronizes log of operations between client, server, and other clients.

This repository contains Logux server with:

  • Framework to write own server.
  • Proxy between WebSocket and HTTP server on any other language.
Sponsored by Evil Martians

Logux Server as Proxy

const { Server } = require('@logux/server')
 
const server = new Server(
  Server.loadOptions(process, {
    controlSecret: 'secret',
    subprotocol: '1.0.0',
    supports: '0.6.2',
    backend: 'http://localhost:3000/logux',
    root: __dirname
  })
)
 
server.listen()

Logux Server as Framework

const { isFirstOlder } = require('@logux/core')
const { Server } = require('@logux/server')
 
const server = new Server(
  Server.loadOptions(process, {
    subprotocol: '1.0.0',
    supports: '1.x',
    root: __dirname
  })
)
 
server.auth(async ({ userId, token }) => {
  const user = await findUserByToken(token)
  return !!user && userId === user.id
})
 
server.channel('user/:id', {
  access (ctx, action, meta) {
    return ctx.params.id === ctx.userId
  },
  async load (ctx, action, meta) {
    const user = await db.loadUser(ctx.params.id)
    return { type: 'USER_NAME', name: user.name }
  }
})
 
server.type('CHANGE_NAME', {
  access (ctx, action, meta) {
    return action.user === ctx.userId
  },
  resend (ctx, action, meta) {
    return { channel: `user/${ ctx.userId }` }
  },
  async process (ctx, action, meta) {
    if (isFirstOlder(lastNameChange(action.user), meta)) {
      await db.changeUserName({ id: action.user, name: action.name })
    }
  }
})
 
server.listen()

Install

npm i @logux/server

DownloadsWeekly Downloads

121

Version

0.9.6

License

MIT

Unpacked Size

118 kB

Total Files

29

Homepage

logux.io/

Last publish

Collaborators

  • avatar