Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@mutable/meta

Package Overview
Dependencies
Maintainers
5
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@mutable/meta - npm Package Compare versions

Comparing version 1.3.0 to 1.5.0

56

index.js
'use strict'
let http = require('http')
let Promise = require('promise')
let { EventEmitter } = require('events')
const http = require('http')
const Promise = require('promise')
const { EventEmitter } = require('events')
class Meta extends EventEmitter {

@@ -9,5 +9,5 @@ constructor(){

this._service = new Map()
this._config
this._config
this._configIndex = 0
this._services
this._services
this._servicesIndex = 0

@@ -21,2 +21,19 @@ }

config () {
if (process.env.USE_SECRETS) {
this._config = {}
try {
if (process.env.CONFIG) this._config = JSON.parse(process.env.CONFIG)
} catch {}
Object.keys(process.env).forEach(key => {
if (key.includes("SECRET_")) {
try {
this._config[key.replace("SECRET_", "").toLowerCase()] = JSON.parse(process.env[key])
} catch {
this._config[key.replace("SECRET_", "").toLowerCase()] = process.env[key]
}
}
})
return Promise.resolve(this._config)
}
return this._config ? Promise.resolve(this._config) : this._watchConfig()

@@ -30,2 +47,3 @@ }

service (name) {
if (process.env.DNS) return Promise.resolve([name + (process.env.DNS_POSTFIX ? process.env.DNS_POSTFIX : "")])
if (this._service.has(name) && this._service.get(name).nodes && this._service.get(name).nodes.length > 0)

@@ -36,3 +54,3 @@ return Promise.resolve(this._service.get(name).nodes)

return Promise.reject(new Error("Service " + name + " has no healthy instances"))
return this._watchService(name)

@@ -45,3 +63,3 @@ }

}
_watchConfig() {

@@ -57,3 +75,3 @@ return this._call(`/v1/config?index=${this._configIndex}`,null,true)

if(index < this._configIndex && JSON.stringify(config) != JSON.stringify(this._config) )
this.emit('configChange',this._config)
this.emit('configChange',this._config)

@@ -77,3 +95,3 @@ return this._config

if(index < this._servicesIndex && JSON.stringify(services) != JSON.stringify(this._services))
this.emit('servicesChange',this._services)
this.emit('servicesChange',this._services)

@@ -99,3 +117,3 @@ return this._services

this.emit('serviceChange',name)
if (Array.isArray(res.body) && res.body.length == 0)

@@ -114,3 +132,3 @@ throw new Error("Service " + name + " has no health instances")

let _options = {
path,
path,
socketPath : process.env.META_SOCKET,

@@ -122,3 +140,3 @@ method:'GET'

opts.data = JSON.stringify(data)
}
}

@@ -132,12 +150,12 @@

_options.headers = _options.headers ? _options.headers : {}
if (options.json) _options.headers['Content-Type'] = 'application/json'
let req = http.request(_options, onRes)
req.on('error', reject)
if (options.data) req.write(options.data)
req.end()
function onRes(_res) {

@@ -158,3 +176,3 @@ if (options.encoding)

.on('data', data => res.body += data)
.on('end', ()=> {
.on('end', ()=> {
if(options.json)

@@ -165,3 +183,3 @@ try{

cb(options.full ? res : res.body)
cb(options.full ? res : res.body)
})

@@ -168,0 +186,0 @@ .resume()

{
"name": "@mutable/meta",
"version": "1.3.0",
"version": "1.5.0",
"description": "Meta client for node",

@@ -10,3 +10,3 @@ "main": "index.js",

"keywords": [
"lsq",
"mutable",
"meta"

@@ -13,0 +13,0 @@ ],

@@ -1,1 +0,141 @@

# meta-node
Mutable Meta client for node
===
Service Discovery and Config manager
===
This package is a wrapper to the background service `Mutable Meta`. Mutable Meta is responsible for service discovery and service configuration.
## API
```js
const Meta = require('@mutable/meta')
```
All methods are asynchronous, and take a node-style error-first callback as last argument.
If no callback is supplied, a promise is returned instead.
Service Discovery
---
### Meta.services() -> Array<String>
Returns all the currently known service names.
Example:
```js
Meta.services()
.then((_services) => {
// returns an object {}
})
```
### Meta.service(service: String) -> Service
Returns a particular service.
Example:
```js
Meta.service("email")
.then((service) => {
request.post(`http://${service}/api/v1/demo/email`,
{json:req.body},
(error, response, body) => {
if(error){
console.error('can not reach email service')
return res.send(500,{error:error,result:'can not reach email service'})
}
res.send({result:"email sent"})
})
})
```
or
```js
Meta.service("email", (config) => {
// returns a object
// {"hostname":"127.0.0.1", "port":3001, toString(): "127.0.0.1:3001" }
// in a string it prints concat host and port
request.post(`http://${service}/api/v1/demo/email`,
{json:req.body},
(error, response, body) => {
if(error){
console.error('can not reach email service')
return res.send(500,{error:error,result:'can not reach email service'})
}
res.send({result:"email sent"})
})
})
```
Config
---
### Meta.config() -> JSON
Fetches the JSON configuration for the current service.
Example:
```js
Meta.config()
.then((_config) => {
// returns an object {}
})
```
For non-mutable deployments set `USE_SECRETS=true` environment variable to set secrets in the config.
Use `CONFIG` environment variable to store configs when using secrets.
Use `SECRET_` prefix to set secrets as object in the config.
Example:
```
USE_SECRETS=true CONFIG={"key":"value"} SECRET_SENDGRID_KEY='your_key' SECRET_REDIS='{"db":00}' node app.js
```
Resulting in this config object:
```
{
"key": "value",
sendgrid_key: "your_key",
redis: {
"db": 00
}
}
```
`SECRET_` prefix gets removed when setting the key in the config object.
### DNS
For non-mutable deployments set `DNS` environment variable to true and use `DNS_POSTFIX` variable to modify the service url
Example:
```
DNS=true DNS_POSTFIX='.default.csv.cluster.local' node app.js
```
Result target: `http://your-web-service.default.scv.cluster.local/`
Resources
---
- [Service Discovery and Config](https://github.com/mutable)
- [Mutable.io Docs](https://github.com/mutable/docs)
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc