0.0.3 ā€¢ Published 6 years ago

micro-discovery v0.0.3

Weekly downloads
1
License
MIT
Repository
github
Last release
6 years ago

šŸ›° Lightweight service discovery

NPM Version node Build Status js-standard-style

šŸš§ Work in progress

The place where old-school Service Registry meets crypto.

Installation

Install from NPM:

$ npm i micro-discovery -S

For yarn fans:

$ yarn add micro-discovery

Examples

The following examples are designed as simple Micro handlers. If you aren't familar with Micro - you definitely must try this goodness.

This basic service registry includes node config, secret keys, and an access control list.

const registry = require('micro-discovery/registry')

module.exports = registry({
  // Services list
  services: [
    {
      name: 'weather',
      secret: 'weather-secret-token',
      endpoint: 'https://weather.now.sh',
      acl: ['ghost'],
      config: {
        weather_apikey: 'ywZOe238yXc4URp'
      }
    },
    {
      name: 'media',
      secret: 'media-secret-token',
      endpoint: 'https://media.now.sh',
      acl: ['ghost', 'weather']
    },
    {
      name: 'ghost',
      secret: 'ghost-secret-token',
      config: {
        db_connection_string: 'redis://212.2.32.2:1234',
        stripe_apikey: 'sk_test_dfe7v6gfJvad23rfggfdE345'
      }
    }
  ],
  // Shared config
  config: {
    statsd_port: 8125,
    statsd_host: 'statsd.example.com',
    statsd_prefix: '88b9e226-aaea-49cf-ab8034b05552.777'
  }
})

Basic weather microservice

const discovery = require('micro-discovery')

const { authorize, config, locate } = discovery('https://your-registry.now.sh', 'weather-secret-token')

module.exports = async (req, res) => {
  // Authorize service call. 
  // Fully synchronous, you even don't need to interact with a registry.
  authorize(req)

  // Retrieve service configuration
  const configuration = await config()
  console.log('Config', configuration)

  // Service info will contains service endpoint, and temporary token.
  const serviceInfo = await locate('media')
  console.log('media-service info', serviceInfo)
  // fetch(serviceInfo.endpoint, {
  //  headers: { Authorization: `Bearer ${serviceInfo.token}`}
  // })

  return { 
    weather: 'ā˜€ļø' 
  }
}