@lidofinance/next-api-wrapper
TypeScript icon, indicating that this package has built-in type declarations

0.43.0 • Public • Published

@lidofinance/next-api-wrapper

Wrapper for next server api requests.

Installation

yarn add @lidofinance/next-api-wrapper.

Getting started

wrapRequest

import { wrapRequest, API } from '@lidofinance/next-api-wrapper'
import { NextApiRequest, NextApiResponse } from 'next'

const someRequest: API = async (req, res) => await fetch()

export default wrapRequest([SomeWrapper])(someRequest)

Examples

Default error handler

import { wrapRequest, defaultErrorHandler } from '@lidofinance/next-api-wrapper'
import { NextApiRequest, NextApiResponse } from 'next'

export type API = (req: NextApiRequest, res: NextApiResponse) => Promise<void>

const CUSTOM_API_ERROR_MESSAGE = 'Default message'
const someRequest: API = async (req, res) => await fetch()

export default wrapRequest([defaultErrorHandler()])(someRequest)
// or
export default wrapRequest([defaultErrorHandler({ errorMessage: CUSTOM_API_ERROR_MESSAGE, serverLogger: SomeLogger })])(
  someRequest,
)

Cache control

import { wrapRequest, cacheControl } from '@lidofinance/next-api-wrapper'
import { NextApiRequest, NextApiResponse } from 'next'

export type API = (req: NextApiRequest, res: NextApiResponse) => Promise<void>

const CUSTOM_CACHE_HEADERS = 'public, max-age=180'
const CUSTOM_ERROR_CACHE_HEADERS = 'no-store'
const someRequest: API = async (req, res) => await fetch()

// use default headers
export default wrapRequest([cacheControl()])(someRequest)
// or
export default wrapRequest([cacheControl({ headers: CUSTOM_CACHE_HEADERS, errorHeaders: CUSTOM_ERROR_CACHE_HEADERS })])(
  someRequest,
)

Mixing wrappers

import { wrapRequest, cacheControl, defaultErrorHandler } from '@lidofinance/next-api-wrapper'
import { NextApiRequest, NextApiResponse } from 'next'

export type API = (req: NextApiRequest, res: NextApiResponse) => Promise<void>

const CUSTOM_API_ERROR_MESSAGE = 'Default message'
const CUSTOM_CACHE_HEADERS = 'public, max-age=180'
const CUSTOM_ERROR_CACHE_HEADERS = 'no-store'
const someRequest: API = async (req, res) => await fetch()

// defaultErrorHandler must be last in the wrapper stack
export default wrapRequest([cacheControl(), defaultErrorHandler()])(someRequest)
// or
export default wrapRequest([
  cacheControl({ headers: CUSTOM_CACHE_HEADERS, errorHeaders: CUSTOM_ERROR_CACHE_HEADERS }),
  defaultErrorHandler({ errorMessage: CUSTOM_API_ERROR_MESSAGE }),
])(someRequest)

Creation of ready mixed wrappers

import { wrapRequest, cacheControl, defaultErrorHandler } from '@lidofinance/next-api-wrapper'
import { NextApiRequest, NextApiResponse } from 'next'

export type API = (req: NextApiRequest, res: NextApiResponse) => Promise<void>

const DEFAULT_API_ERROR_MESSAGE = 'Default message'
const CACHE_HEADERS = 'public, max-age=180'
// defaultErrorHandler must be last in the wrapper stack
export const defaultErrorAndCacheWrapper = wrapRequest([cacheControl(), defaultErrorHandler()])

const someRequest: API = async (req, res) => await fetch()

export default defaultErrorAndCacheWrapper(someRequest)

Response time metric

import { wrapRequest, responseTimeMetric } from '@lidofinance/next-api-wrapper'
import { NextApiRequest, NextApiResponse } from 'next'
import { Registry, Histogram } from 'prom-client'

export type API = (req: NextApiRequest, res: NextApiResponse) => Promise<void>

const apiTimings = new Histogram({
  name: 'frontend_template_api_response_internal',
  help: 'API response time',
  labelNames: ['hostname', 'route', 'entity', 'status'],
  buckets: [0.1, 0.2, 0.3, 0.6, 1, 1.5, 2, 5],
  registers: new Registry(),
});

const someRequest: API = async (req, res) => await fetch()

export default wrapRequest([
  responseTimeMetric(apiTimings, 'api/some-request'),
])(someRequest)

Readme

Keywords

none

Package Sidebar

Install

npm i @lidofinance/next-api-wrapper

Weekly Downloads

126

Version

0.43.0

License

MIT

Unpacked Size

30.6 kB

Total Files

11

Last publish

Collaborators

  • lidofinance-ui
  • lidofinance-group