@resonate/api-factory-generator

2.1.4 • Public • Published

API factory generator

Project first published as @zerowastemap/api-factory-generator. Forked it to allow more specific configuration for resonate.

  • Uses fetch
  • Uses ajv for schema validation
  • Sane defaults
  • Sends token if provided
  • Each route can have specific options

Installation

$ npm i --save @resonate/api-factory-generator

Usage

const generator = require('@resonate/api-factory-generator')

// set default options for each requests
const options = {
  mode: 'cors',
  domain: 'resonate.localhost',
  scheme: 'https://',
  prefix: '/api',
  version: 1,
  token: 'some bearer token'
}

// configure your routes
// you can nest routes
const routes = {
  auth: {
    login: {
      path: '/auth/login',
      options: {
        method: 'POST'
      },
      schema: {
        type: 'object',
        required: ['email'],
        properties: {
          email: {
            type: 'string'
          }
        }
      }
    }
  },
  upload: {
    path: '/locate',
    options: {
      method: 'POST',
      auth: true, // will enable credentials
      multipart: true
    }
  }
  locate: {
    path: '/locate',
    schema: {
      type: 'object',
      required: ['longitude', 'latitude'],
      properties: {
        longitude: Longitude,
        latitude: Latitude
      }
    }
  }
}

const api = generator(routes, options) 

// api.auth.login('salut@zerowastemap.app') works too if we have a schema
api.auth.login({ email: 'salut@zerowastemap.app' }).then(response => {
  ...
})

Testing

Browser tests won't pass your machine because it test against api which is not released yet

See also

JavaScript Factory Functions vs Constructor Functions vs Classes

LICENSE

MIT

Author(s)

/@resonate/api-factory-generator/

    Package Sidebar

    Install

    npm i @resonate/api-factory-generator

    Weekly Downloads

    2

    Version

    2.1.4

    License

    MIT

    Unpacked Size

    9.27 kB

    Total Files

    7

    Last publish

    Collaborators

    • resonatecoop