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

    0.9.6-next-b9f06fc412ab1d1c4f98936ffec04f341b33c7df • 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

    import { fileURLToPath } from 'url'
    
    const server = new Server(
      Server.loadOptions(process, {
        controlSecret: 'secret',
        subprotocol: '1.0.0',
        supports: '0.6.2',
        backend: 'http://localhost:3000/logux',
        fileUrl: import.meta.url
      })
    )
    
    server.listen()

    Logux Server as Framework

    import { fileURLToPath } from 'url'
    import { isFirstOlder } from '@logux/core'
    import { dirname } from 'path'
    import { Server } from '@logux/server'
    
    const server = new Server(
      Server.loadOptions(process, {
        subprotocol: '1.0.0',
        supports: '1.x',
        fileUrl: import.meta.url
      })
    )
    
    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-next

    Homepage

    logux.io/

    DownloadsWeekly Downloads

    2

    Version

    0.9.6-next-b9f06fc412ab1d1c4f98936ffec04f341b33c7df

    License

    MIT

    Unpacked Size

    155 kB

    Total Files

    42

    Last publish

    Collaborators

    • metallium