decentraland-crypto-middleware
v1.3.0
Published
Decentraland Authentication Middleware
Downloads
903
Maintainers
Readme
Decentraland Authentication Middleware
A multi framework middleware to authenticate request signed with @decentraland/SignedFetch
Index
- Install
- Use with Express
- Use with Koa
- Use with Well Known Components
- Use with PassportJS
- Options
- Auth Chain Generator
- Develop
Install
npm install -s decentraland-crypto-middleware
Use with Express
import { Request } from 'express'
import * as dcl from 'decentraland-crypto-middleware'
app.get(
'/user/required',
dcl.express(),
(req: Request & dcl.DecentralandSignatureData) => {
const address: string = req.auth
const metadata: Record<string, any> = req.authMetadata
}
)
app.get(
'/user/optional',
dcl.express({ optional: true }),
(req: Request & dcl.DecentralandSignatureData) => {
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 'decentraland-crypto-middleware'
app.get(
'/user/required',
dcl.koa(),
(ctx: Context & dcl.DecentralandSignatureData) => {
const address: string = ctx.auth
const metadata: Record<string, any> = ctx.authMetadata
}
)
app.get(
'/user/optional',
dcl.koa({ optional: true }),
(ctx: Context & dcl.DecentralandSignatureData) => {
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 'decentraland-crypto-middleware'
app.use('/user/required', dcl.wellKnownComponents())
app.get('/user/required', (ctx: dcl.DecentralandSignatureRequiredContext) => {
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.DecentralandSignatureContext<{}>) => {
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 'decentraland-crypto-middleware'
passport.use(dcl.passport())
app.get(
'/user/required',
passport.authenticate('decentraland'),
(req: Request & dcl.DecentralandSignatureData) => {
const address: string = req.auth
const metadata: Record<string, any> = req.authMetadata
}
)
app.get(
'/user/required',
passport.authenticate('decentraland', { optional: true }),
(req: Request & dcl.DecentralandSignatureData) => {
const address: string | undefined = req.auth
const metadata: Record<string, any> | undefined = req.authMetadata
}
)
Options
| name
| type
| description
|
| ------------ | ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| optional
| boolean
| if false
request will fail if there is no signature or if is invalid (default: false
) |
| expiration
| number
| time in milliseconds where a signature is considered valid (default: 60_000
) |
| catalyst
| string
| catalyst url to validate contract wallet signatures (default: https://peer-lb.decentraland.org/
) |
| onError
| (err: Error & { statusCode: number }) => any
| formats the response body when an error occurred (default: (err) => ({ ok: false, message: err.message })
) |
Auth Chain Generator
If you want to simulate signed headers you can use the Auth Chain Generator
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