0.0.0-development • Published 6 months ago

@beland/crypto-middleware v0.0.0-development

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
6 months ago

Memetaverse Authentication Middleware

Coverage Status

A multi framework middleware to authenticate request signed with @memetaverse/SignedFetch

Index

Install

  npm install -s memetaverse-crypto-middleware

Use with Express

import { Request } from 'express'
import * as dcl from 'memetaverse-crypto-middleware'

app.get(
  '/user/required',
  dcl.express(),
  (req: Request & dcl.memetaverseSignatureData) => {
    const address: string = req.auth
    const metadata: Record<string, any> = req.authMetadata
  }
)

app.get(
  '/user/optional',
  dcl.express({ optional: true }),
  (req: Request & dcl.memetaverseSignatureData) => {
    const address: string | undefined = req.auth
    const metadata: Record<string, any> | undefined = req.authMetadata
  }
)

Use with Koa

import { Context } from 'koa'
import * as dcl from 'memetaverse-crypto-middleware'

app.get(
  '/user/required',
  dcl.koa(),
  (ctx: Context & dcl.memetaverseSignatureData) => {
    const address: string = ctx.auth
    const metadata: Record<string, any> = ctx.authMetadata
  }
)

app.get(
  '/user/optional',
  dcl.koa({ optional: true }),
  (ctx: Context & dcl.memetaverseSignatureData) => {
    const address: string | undefined = ctx.auth
    const metadata: Record<string, any> | undefined = ctx.authMetadata
  }
)

Use with Well Known Components

import type { IHttpServerComponent } from '@well-known-components/interfaces'
import * as dcl from 'memetaverse-crypto-middleware'

app.use('/user/required', dcl.wellKnownComponents())
app.get('/user/required', (ctx: dcl.memetaverseSignatureRequiredContext) => {
  const address: string = ctx.verification.auth
  const metadata: Record<string, any> = ctx.verification.authMetadata
})

app.use('/user/optional', dcl.wellKnownComponents({ optional: true })
app.get('/user/optional', (ctx: dcl.memetaverseSignatureContext<{}>) => {
  const address: string | undefined= ctx.verification?.auth
  const metadata: Record<string, any> | undefined = ctx.verification?.authMetadata
})

Use with PassportJS

import { Context } from 'koa'
import * as dcl from 'memetaverse-crypto-middleware'

passport.use(dcl.passport())

app.get(
  '/user/required',
  passport.authenticate('memetaverse'),
  (req: Request & dcl.memetaverseSignatureData) => {
    const address: string = req.auth
    const metadata: Record<string, any> = req.authMetadata
  }
)

app.get(
  '/user/required',
  passport.authenticate('memetaverse', { optional: true }),
  (req: Request & dcl.memetaverseSignatureData) => {
    const address: string | undefined = req.auth
    const metadata: Record<string, any> | undefined = req.authMetadata
  }
)

Options

nametypedescription
optionalbooleanif false request will fail if there is no signature or if is invalid (default: false)
expirationnumbertime in milliseconds where a signature is considered valid (default: 60_000)
catalyststringcatalyst url to validate contract wallet signatures (default: https://peer-lb.memetaverse.club/)
onError(err: Error & { statusCode: number }) => anyformats the response body when an error occurred (default: (err) => ({ ok: false, message: err.message }))

Develop

If you want to contribute make you will need to setup husky otherwise your commit may fail because is not following the format standard

  npm run husky-setup