@aexol/syncano-middleware-common

Collection of common middlewares for syncano sockets.

Usage no npm install needed!

<script type="module">
  import aexolSyncanoMiddlewareCommon from 'https://cdn.skypack.dev/@aexol/syncano-middleware-common';
</script>

README

Syncano Middleware Common

About

Collection of common utilities for sockets in syncano that can be used in conjunction with @aexol/syncano-middleware lib.

Installation

npm install @aexol/syncano-middleware-common

Usage

API Reference

Modules

@aexol/syncano-middleware-common

Common middlewares for syncano.

Functions

allowedMethods(fn, allowed)function

Checks if request is allowed based on request method.

loggedIn(fn, opts)Object

Checks if user is logged in, returning response with 403 and message if not.

parseGETFields(fn)function

Parses args in GET request as json if possible. If not, leaves them unchanged.

replaceBuffers(fn, opts)Object

Replace all buffers in socket args.

rootAccount(fn, opts)Object

Root account check middleware.

toBool(fn, fields)

Attempts to cast certain fields in request to bool. Can be useful to handling both GET and POST input on endpoint as GET endpoints will always have a string.

Fields that are either true or 'true' will evaluate to true. Everything else will be considered false.

toNumber(fn, fields)

Attempts to cast certain fields in request to number. Can be useful to handling both GET and POST input on endpoint as GET endpoints will always have a string.

@aexol/syncano-middleware-common

Common middlewares for syncano.

allowedMethods(fn, allowed) ⇒ function

Checks if request is allowed based on request method.

Kind: global function
Access: public

Param Type Description
fn function | Object Either next function in chain or object with key: value pairs of method and handler function for method type.
allowed Array List of allowed methods in case of fn being function. Optional.

Example

import serve, {response} from '@aexol/syncano-middleware'
import {allowedMethods} from '@aexol/syncano-middleware-common'

async function hello(ctx, syncano) {
    return response.success({message: `Hello, ${ctx.meta.user.username}`)
}

export default ctx => serve(ctx, allowedMethods(hello, ['GET']))

Example

import serve, {response} from '@aexol/syncano-middleware'
import {allowedMethods} from '@aexol/syncano-middleware-common'

async function hello(ctx, syncano) {
    return response.success({message: `Hello, ${ctx.meta.user.username}`)
}

export default ctx => serve(ctx, allowedMethods({
 GET: hello,
 POST: hello
}))

loggedIn(fn, opts) ⇒ Object

Checks if user is logged in, returning response with 403 and message if not.

Kind: global function
Access: public

Param Type Description
fn function Next function in request chain
opts Object Additional options. Optional
opts.message String Alternative message if user is not logged in.

Example

import serve, {response} from '@aexol/syncano-middleware'
import {loggedIn} from '@aexol/syncano-middleware-common'

async function hello(ctx, syncano) {
    return response.success({message: `Hello, ${ctx.meta.user.username}`)
}

export default ctx => serve(ctx, loggedIn(hello))

parseGETFields(fn) ⇒ function

Parses args in GET request as json if possible. If not, leaves them unchanged.

Kind: global function
Access: public

Param Type Description
fn function Next function in request chain

Example

import serve, {response} from '@aexol/syncano-middleware'
import {parseGETFields} from '@aexol/syncano-middleware-common'

async function hello(ctx, syncano) {
    return response.success({message: `Hello, ${ctx.meta.user.username}`)
}

export default ctx => serve(ctx, parseGETFields(hello))

replaceBuffers(fn, opts) ⇒ Object

Replace all buffers in socket args.

Kind: global function
Access: public

Param Type Description
fn function Handler function
opts Object Aditional opts. Optional
opts.replaceFn function If set, will be used to replace buffer contents instead of default behaviour.
opts.exclude Array List of args to skip from replacing.
opts.encoding String Input encoding of buffer in args.
opts.inputEncoding String Output encoding of buffer in args. Unless, replaceFn was set, this middleware replaces all buffers with it's string content in place. Modifies ctx.args.

Example

import serve, {response} from '@aexol/syncano-middleware'
import {replaceBuffers} from '@aexol/syncano-middleware-common'

async function hello(ctx, syncano) {
    return response.success({message: 'ok'})
}

export default ctx => serve(ctx, replaceBuffers(hello))

rootAccount(fn, opts) ⇒ Object

Root account check middleware.

Kind: global function
Access: public

Param Type Description
fn function Next function in chain.
opts Object Additional options. Optional.
opts.message String Custom error message if not root account.
opts.condFn function Check for root only if function evaluates to true.

Example

import serve, {response} from '@aexol/syncano-middleware'
import {rootAccount} from '@aexol/syncano-middleware-common'

async function hello(ctx, syncano) {
    return response.success({message: `Hello, ${ctx.meta.admin.email}`)
}

export default ctx => serve(ctx, rootAccount(hello))

toBool(fn, fields)

Attempts to cast certain fields in request to bool. Can be useful to handling both GET and POST input on endpoint as GET endpoints will always have a string.

Fields that are either true or 'true' will evaluate to true. Everything else will be considered false.

Kind: global function

Param Type Description
fn function Next function in chain
fields Array fields to cast to bool

toNumber(fn, fields)

Attempts to cast certain fields in request to number. Can be useful to handling both GET and POST input on endpoint as GET endpoints will always have a string.

Kind: global function

Param Type Description
fn function Next function in chain
fields Array fields to cast to number