@magnet.me/consultant 1.6.0 → 1.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/eslint.config.mjs +32 -0
- package/out/agent.js +1 -7
- package/out/agent.js.map +1 -1
- package/out/config.js +5 -33
- package/out/config.js.map +1 -1
- package/out/consultant-error.js +1 -5
- package/out/consultant-error.js.map +1 -1
- package/out/health.js +1 -9
- package/out/health.js.map +1 -1
- package/out/identifier.js +1 -5
- package/out/identifier.js.map +1 -1
- package/out/index.d.ts +2 -2
- package/out/index.js +7 -11
- package/out/index.js.map +1 -1
- package/out/key-parser.js +4 -10
- package/out/key-parser.js.map +1 -1
- package/out/properties.js +1 -2
- package/out/properties.js.map +1 -1
- package/out/service.js +2 -17
- package/out/service.js.map +1 -1
- package/package.json +9 -10
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import js from '@eslint/js';
|
|
2
|
+
import globals from 'globals';
|
|
3
|
+
|
|
4
|
+
export default [
|
|
5
|
+
js.configs.recommended,
|
|
6
|
+
{
|
|
7
|
+
files: ['src/**/*.js'],
|
|
8
|
+
languageOptions: {
|
|
9
|
+
ecmaVersion: 2017,
|
|
10
|
+
sourceType: 'module',
|
|
11
|
+
globals: globals.node
|
|
12
|
+
},
|
|
13
|
+
rules: {
|
|
14
|
+
indent: [
|
|
15
|
+
'error',
|
|
16
|
+
'tab'
|
|
17
|
+
],
|
|
18
|
+
'linebreak-style': [
|
|
19
|
+
'error',
|
|
20
|
+
'unix'
|
|
21
|
+
],
|
|
22
|
+
quotes: [
|
|
23
|
+
'error',
|
|
24
|
+
'single'
|
|
25
|
+
],
|
|
26
|
+
semi: [
|
|
27
|
+
'error',
|
|
28
|
+
'always'
|
|
29
|
+
]
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
];
|
package/out/agent.js
CHANGED
|
@@ -4,18 +4,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = fetchAgent;
|
|
7
|
-
|
|
8
7
|
var _nodeFetch = _interopRequireDefault(require("node-fetch"));
|
|
9
|
-
|
|
10
8
|
var _properties = _interopRequireDefault(require("./properties"));
|
|
11
|
-
|
|
12
9
|
var _consultantError = _interopRequireDefault(require("./consultant-error"));
|
|
13
|
-
|
|
14
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
-
|
|
10
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
11
|
async function fetchAgent(consulHost) {
|
|
17
12
|
const uri = `${consulHost}/v1/agent/self`;
|
|
18
|
-
|
|
19
13
|
try {
|
|
20
14
|
const res = await (0, _nodeFetch.default)(uri, {
|
|
21
15
|
timeout: 5000,
|
package/out/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"agent.js","names":["_nodeFetch","_interopRequireDefault","require","_properties","_consultantError","e","__esModule","default","fetchAgent","consulHost","uri","res","fetch","timeout","headers","properties","userAgent","json","ConsultantError"],"sources":["../src/agent.js"],"sourcesContent":["import fetch from 'node-fetch';\nimport properties from './properties';\nimport ConsultantError from './consultant-error';\n\nexport default async function fetchAgent(consulHost) {\n\tconst uri = `${consulHost}/v1/agent/self`;\n\ttry {\n\t\tconst res = await fetch(uri, {\n\t\t\ttimeout : 5000,\n\t\t\theaders : {\n\t\t\t\t'accept' : 'application/json',\n\t\t\t\t'content-type' : 'application/json',\n\t\t\t\t'user-agent' : properties.userAgent\n\t\t\t}\n\t\t});\n\t\treturn await res.json();\n\t}\n\tcatch (e) {\n\t\tthrow new ConsultantError(`Could not retrieve agent from consul: ${e}`);\n\t}\n}\n"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,WAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,gBAAA,GAAAH,sBAAA,CAAAC,OAAA;AAAiD,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAElC,eAAeG,UAAUA,CAACC,UAAU,EAAE;EACpD,MAAMC,GAAG,GAAG,GAAGD,UAAU,gBAAgB;EACzC,IAAI;IACH,MAAME,GAAG,GAAG,MAAM,IAAAC,kBAAK,EAACF,GAAG,EAAE;MAC5BG,OAAO,EAAG,IAAI;MACdC,OAAO,EAAG;QACT,QAAQ,EAAG,kBAAkB;QAC7B,cAAc,EAAG,kBAAkB;QACnC,YAAY,EAAGC,mBAAU,CAACC;MAC3B;IACD,CAAC,CAAC;IACF,OAAO,MAAML,GAAG,CAACM,IAAI,CAAC,CAAC;EACxB,CAAC,CACD,OAAOZ,CAAC,EAAE;IACT,MAAM,IAAIa,wBAAe,CAAC,yCAAyCb,CAAC,EAAE,CAAC;EACxE;AACD","ignoreList":[]}
|
package/out/config.js
CHANGED
|
@@ -4,19 +4,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = initializeConfiguration;
|
|
7
|
-
|
|
8
7
|
var _nodeFetch = _interopRequireDefault(require("node-fetch"));
|
|
9
|
-
|
|
10
8
|
var _properties = _interopRequireDefault(require("./properties"));
|
|
11
|
-
|
|
12
9
|
var _identifier = _interopRequireDefault(require("./identifier"));
|
|
13
|
-
|
|
14
10
|
var _keyParser = require("./key-parser");
|
|
15
|
-
|
|
16
11
|
var _atob = _interopRequireDefault(require("atob"));
|
|
17
|
-
|
|
18
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
19
|
-
|
|
12
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
20
13
|
const configUpdater = (consulHost, prefix, service, callback) => {
|
|
21
14
|
let consulIndex;
|
|
22
15
|
let timeoutId;
|
|
@@ -24,15 +17,12 @@ const configUpdater = (consulHost, prefix, service, callback) => {
|
|
|
24
17
|
const self = {
|
|
25
18
|
async poll() {
|
|
26
19
|
let timeout = 500;
|
|
27
|
-
|
|
28
20
|
try {
|
|
29
21
|
const prefixUri = prefix ? `${prefix}/` : '';
|
|
30
22
|
let uri = `${consulHost}/v1/kv/${prefixUri}${service.name}/?recurse=true`;
|
|
31
|
-
|
|
32
23
|
if (consulIndex) {
|
|
33
24
|
uri += `&index=${consulIndex}`;
|
|
34
25
|
}
|
|
35
|
-
|
|
36
26
|
const response = await (0, _nodeFetch.default)(uri, {
|
|
37
27
|
headers: {
|
|
38
28
|
'accept': 'application/json',
|
|
@@ -41,31 +31,24 @@ const configUpdater = (consulHost, prefix, service, callback) => {
|
|
|
41
31
|
}
|
|
42
32
|
});
|
|
43
33
|
consulIndex = response.headers['x-consul-index'];
|
|
44
|
-
|
|
45
34
|
if (response.status === 404) {
|
|
46
35
|
timeout = 5000;
|
|
47
|
-
const prefixText = prefix ? ` with prefix '${prefix}'` : '';
|
|
48
|
-
|
|
36
|
+
const prefixText = prefix ? ` with prefix '${prefix}'` : '';
|
|
49
37
|
console.warn(`'${service.name}'${prefixText} cannot be found in Consul`);
|
|
50
38
|
return;
|
|
51
39
|
}
|
|
52
|
-
|
|
53
40
|
if (response.status !== 200) {
|
|
54
|
-
timeout = 60000;
|
|
55
|
-
|
|
41
|
+
timeout = 60000;
|
|
56
42
|
console.warn(`Error retrieving data from Consul: ${response.status}: ${await response.text()}`);
|
|
57
43
|
return;
|
|
58
44
|
}
|
|
59
|
-
|
|
60
45
|
const json = await response.json();
|
|
61
46
|
const properties = parseBody(json, prefix, service);
|
|
62
|
-
|
|
63
47
|
if (callback) {
|
|
64
48
|
callback(properties);
|
|
65
49
|
}
|
|
66
50
|
} catch (e) {
|
|
67
|
-
timeout = 5000;
|
|
68
|
-
|
|
51
|
+
timeout = 5000;
|
|
69
52
|
console.warn(`Error retrieving data from Consul: ${e}`);
|
|
70
53
|
} finally {
|
|
71
54
|
if (!shutdown) {
|
|
@@ -73,18 +56,16 @@ const configUpdater = (consulHost, prefix, service, callback) => {
|
|
|
73
56
|
}
|
|
74
57
|
}
|
|
75
58
|
},
|
|
76
|
-
|
|
77
59
|
stop() {
|
|
78
60
|
shutdown = true;
|
|
79
|
-
|
|
80
61
|
if (timeoutId) {
|
|
81
62
|
clearTimeout(timeoutId);
|
|
82
63
|
}
|
|
83
64
|
}
|
|
84
|
-
|
|
85
65
|
};
|
|
86
66
|
return self;
|
|
87
67
|
};
|
|
68
|
+
|
|
88
69
|
/**
|
|
89
70
|
* Parses the fetched config from Consul and converts it to a proper object.
|
|
90
71
|
* @param body {Array} - The response body
|
|
@@ -92,8 +73,6 @@ const configUpdater = (consulHost, prefix, service, callback) => {
|
|
|
92
73
|
* @param service {Object} - The service identifier to match key specifiers against
|
|
93
74
|
* @return {Object} A properties object containing all valid properties as specified in the body
|
|
94
75
|
*/
|
|
95
|
-
|
|
96
|
-
|
|
97
76
|
function parseBody(body, prefix, service) {
|
|
98
77
|
return body.map(kvPair => {
|
|
99
78
|
return {
|
|
@@ -106,18 +85,15 @@ function parseBody(body, prefix, service) {
|
|
|
106
85
|
};
|
|
107
86
|
}).reduce((properties, kvPair) => Object.assign(properties, kvPair), {});
|
|
108
87
|
}
|
|
109
|
-
|
|
110
88
|
const updateConfig = (properties, newConfig, callbacks) => {
|
|
111
89
|
const updates = Object.keys(newConfig).filter(key => properties[key] !== newConfig[key]);
|
|
112
90
|
Object.assign(properties, newConfig);
|
|
113
91
|
const deletes = Object.keys(properties).filter(key => !newConfig[key]);
|
|
114
92
|
deletes.forEach(key => delete properties[key]);
|
|
115
|
-
|
|
116
93
|
if (updates.length > 0 || deletes.length > 0) {
|
|
117
94
|
callbacks.forEach(callback => callback(Object.assign({}, properties)));
|
|
118
95
|
}
|
|
119
96
|
};
|
|
120
|
-
|
|
121
97
|
async function initializeConfiguration({
|
|
122
98
|
consulHost,
|
|
123
99
|
service,
|
|
@@ -135,19 +111,15 @@ async function initializeConfiguration({
|
|
|
135
111
|
getProperties() {
|
|
136
112
|
return Object.assign({}, liveProperties);
|
|
137
113
|
},
|
|
138
|
-
|
|
139
114
|
register(callback) {
|
|
140
115
|
callbacks.add(callback);
|
|
141
116
|
},
|
|
142
|
-
|
|
143
117
|
deregister(callback) {
|
|
144
118
|
callbacks.delete(callback);
|
|
145
119
|
},
|
|
146
|
-
|
|
147
120
|
stop() {
|
|
148
121
|
updater.stop();
|
|
149
122
|
}
|
|
150
|
-
|
|
151
123
|
};
|
|
152
124
|
}
|
|
153
125
|
//# sourceMappingURL=config.js.map
|
package/out/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"config.js","names":["_nodeFetch","_interopRequireDefault","require","_properties","_identifier","_keyParser","_atob","e","__esModule","default","configUpdater","consulHost","prefix","service","callback","consulIndex","timeoutId","shutdown","self","poll","timeout","prefixUri","uri","name","response","fetch","headers","props","userAgent","status","prefixText","console","warn","text","json","properties","parseBody","setTimeout","stop","clearTimeout","body","map","kvPair","key","parseKey","Key","value","Value","filter","keyApplies","atob","reduce","Object","assign","updateConfig","newConfig","callbacks","updates","keys","deletes","forEach","length","initializeConfiguration","Set","process","env","CONSUL_HOST","defaultHost","identifier","fetchIdentifier","liveProperties","updater","newProperties","getProperties","register","add","deregister","delete"],"sources":["../src/config.js"],"sourcesContent":["import fetch from 'node-fetch';\nimport props from './properties';\nimport fetchIdentifier from './identifier';\nimport {parseKey, keyApplies} from './key-parser';\nimport atob from 'atob';\n\nconst configUpdater = (consulHost, prefix, service, callback) => {\n\tlet consulIndex;\n\tlet timeoutId;\n\tlet shutdown = false;\n\tconst self = {\n\t\tasync poll() {\n\t\t\tlet timeout = 500;\n\t\t\ttry {\n\t\t\t\tconst prefixUri = prefix ? `${prefix}/` : '';\n\t\t\t\tlet uri = `${consulHost}/v1/kv/${prefixUri}${service.name}/?recurse=true`;\n\t\t\t\tif (consulIndex) {\n\t\t\t\t\turi += `&index=${consulIndex}`;\n\t\t\t\t}\n\t\t\t\tconst response = await fetch(uri, {\n\t\t\t\t\theaders : {\n\t\t\t\t\t\t'accept' : 'application/json',\n\t\t\t\t\t\t'content-type' : 'application/json',\n\t\t\t\t\t\t'user-agent' : props.userAgent\n\t\t\t\t\t},\n\t\t\t\t});\n\n\t\t\t\tconsulIndex = response.headers['x-consul-index'];\n\t\t\t\tif (response.status === 404) {\n\t\t\t\t\ttimeout = 5000;\n\t\t\t\t\tconst prefixText = prefix ? ` with prefix '${prefix}'` : '';\n\t\t\t\t\tconsole.warn(`'${service.name}'${prefixText} cannot be found in Consul`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (response.status !== 200) {\n\t\t\t\t\ttimeout = 60000;\n\t\t\t\t\tconsole.warn(`Error retrieving data from Consul: ${response.status}: ${await response.text()}`);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst json = await response.json();\n\t\t\t\tconst properties = parseBody(json, prefix, service);\n\t\t\t\tif (callback) {\n\t\t\t\t\tcallback(properties);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch (e) {\n\t\t\t\ttimeout = 5000;\n\t\t\t\tconsole.warn(`Error retrieving data from Consul: ${e}`);\n\t\t\t}\n\t\t\tfinally {\n\t\t\t\tif (!shutdown) {\n\t\t\t\t\ttimeoutId = setTimeout(self.poll, timeout);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tstop() {\n\t\t\tshutdown = true;\n\t\t\tif (timeoutId) {\n\t\t\t\tclearTimeout(timeoutId);\n\t\t\t}\n\t\t}\n\t};\n\n\treturn self;\n};\n\n/**\n * Parses the fetched config from Consul and converts it to a proper object.\n * @param body {Array} - The response body\n * @param prefix {string} - The prefix to extract from the key path\n * @param service {Object} - The service identifier to match key specifiers against\n * @return {Object} A properties object containing all valid properties as specified in the body\n */\nfunction parseBody(body, prefix, service) {\n\treturn body.map(kvPair => {\n\t\treturn {key : parseKey(kvPair.Key, prefix), value : kvPair.Value};\n\t})\n\t\t.filter(kvPair => kvPair.key.key && keyApplies(kvPair.key, service))\n\t\t.map(kvPair => {\n\t\t\treturn {[kvPair.key.key] : atob(kvPair.value)};\n\t\t})\n\t\t.reduce((properties, kvPair) => Object.assign(properties, kvPair), {});\n}\n\nconst updateConfig = (properties, newConfig, callbacks) => {\n\tconst updates = Object.keys(newConfig).filter(key => properties[key] !== newConfig[key]);\n\n\tObject.assign(properties, newConfig);\n\n\tconst deletes = Object.keys(properties).filter(key => !newConfig[key]);\n\tdeletes.forEach(key => delete properties[key]);\n\n\tif (updates.length > 0 || deletes.length > 0) {\n\t\tcallbacks.forEach(callback => callback(Object.assign({}, properties)));\n\t}\n};\n\nexport default async function initializeConfiguration({consulHost, service, prefix}) {\n\tconst callbacks = new Set();\n\n\tconsulHost = consulHost || process.env.CONSUL_HOST || props.defaultHost;\n\n\tconst identifier = await fetchIdentifier(service, consulHost);\n\n\tlet liveProperties = {};\n\n\tconst updater = configUpdater(consulHost, prefix, identifier, (newProperties) => {\n\t\tupdateConfig(liveProperties, newProperties, callbacks);\n\t});\n\n\tawait updater.poll();\n\n\treturn {\n\t\tgetProperties() {\n\t\t\treturn Object.assign({}, liveProperties);\n\t\t},\n\t\tregister(callback) {\n\t\t\tcallbacks.add(callback);\n\t\t},\n\t\tderegister(callback) {\n\t\t\tcallbacks.delete(callback);\n\t\t},\n\t\tstop() {\n\t\t\tupdater.stop();\n\t\t}\n\t};\n}\n"],"mappings":"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","ignoreList":[]}
|
package/out/consultant-error.js
CHANGED
|
@@ -4,16 +4,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
class ConsultantError extends Error {
|
|
9
8
|
constructor(message) {
|
|
10
9
|
super(message);
|
|
11
10
|
this.message = message;
|
|
12
11
|
this.name = 'ConsultantError';
|
|
13
12
|
}
|
|
14
|
-
|
|
15
13
|
}
|
|
16
|
-
|
|
17
|
-
var _default = ConsultantError;
|
|
18
|
-
exports.default = _default;
|
|
14
|
+
var _default = exports.default = ConsultantError;
|
|
19
15
|
//# sourceMappingURL=consultant-error.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"consultant-error.js","names":["ConsultantError","Error","constructor","message","name","_default","exports","default"],"sources":["../src/consultant-error.js"],"sourcesContent":["class ConsultantError extends Error {\n\tconstructor(message) {\n\t\tsuper(message);\n\t\tthis.message = message;\n\t\tthis.name = 'ConsultantError';\n\t}\n}\n\nexport default ConsultantError;\n"],"mappings":";;;;;;AAAA,MAAMA,eAAe,SAASC,KAAK,CAAC;EACnCC,WAAWA,CAACC,OAAO,EAAE;IACpB,KAAK,CAACA,OAAO,CAAC;IACd,IAAI,CAACA,OAAO,GAAGA,OAAO;IACtB,IAAI,CAACC,IAAI,GAAG,iBAAiB;EAC9B;AACD;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEcP,eAAe","ignoreList":[]}
|
package/out/health.js
CHANGED
|
@@ -4,15 +4,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = health;
|
|
7
|
-
|
|
8
7
|
var _nodeFetch = _interopRequireDefault(require("node-fetch"));
|
|
9
|
-
|
|
10
8
|
var _properties = _interopRequireDefault(require("./properties"));
|
|
11
|
-
|
|
12
9
|
var _consultantError = _interopRequireDefault(require("./consultant-error"));
|
|
13
|
-
|
|
14
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
-
|
|
10
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
16
11
|
async function health({
|
|
17
12
|
service,
|
|
18
13
|
consulHost
|
|
@@ -20,7 +15,6 @@ async function health({
|
|
|
20
15
|
consulHost = consulHost || process.env.CONSUL_HOST || _properties.default.defaultHost;
|
|
21
16
|
const uri = `${consulHost}/v1/health/service/${service}?near=_agent&passing=true`;
|
|
22
17
|
let result;
|
|
23
|
-
|
|
24
18
|
try {
|
|
25
19
|
result = await (0, _nodeFetch.default)(uri, {
|
|
26
20
|
method: 'GET',
|
|
@@ -31,11 +25,9 @@ async function health({
|
|
|
31
25
|
} catch (e) {
|
|
32
26
|
throw new _consultantError.default(`Could not get health for ${service}: ${e}`);
|
|
33
27
|
}
|
|
34
|
-
|
|
35
28
|
if (result.ok) {
|
|
36
29
|
return result.json();
|
|
37
30
|
}
|
|
38
|
-
|
|
39
31
|
const body = result.text();
|
|
40
32
|
throw new _consultantError.default(`Could not get health for ${service}: ${body} (status ${result.status})`);
|
|
41
33
|
}
|
package/out/health.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"health.js","names":["_nodeFetch","_interopRequireDefault","require","_properties","_consultantError","e","__esModule","default","health","service","consulHost","process","env","CONSUL_HOST","props","defaultHost","uri","result","fetch","method","headers","properties","userAgent","ConsultantError","ok","json","body","text","status"],"sources":["../src/health.js"],"sourcesContent":["import fetch from 'node-fetch';\nimport props from './properties';\nimport properties from './properties';\nimport ConsultantError from './consultant-error';\n\nexport default async function health({ service, consulHost }) {\n\tconsulHost = consulHost || process.env.CONSUL_HOST || props.defaultHost;\n\tconst uri = `${consulHost}/v1/health/service/${service}?near=_agent&passing=true`;\n\n\tlet result;\n\ttry {\n\t\tresult = await fetch(uri, {\n\t\t\tmethod : 'GET',\n\t\t\theaders : {\n\t\t\t\t'user-agent' : properties.userAgent\n\t\t\t}\n\t\t});\n\t}\n\tcatch (e) {\n\t\tthrow new ConsultantError(`Could not get health for ${service}: ${e}`);\n\t}\n\n\tif (result.ok) {\n\t\treturn result.json();\n\t}\n\tconst body = result.text();\n\tthrow new ConsultantError(`Could not get health for ${service}: ${body} (status ${result.status})`);\n}"],"mappings":";;;;;;AAAA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,WAAA,GAAAF,sBAAA,CAAAC,OAAA;AAEA,IAAAE,gBAAA,GAAAH,sBAAA,CAAAC,OAAA;AAAiD,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAElC,eAAeG,MAAMA,CAAC;EAAEC,OAAO;EAAEC;AAAW,CAAC,EAAE;EAC7DA,UAAU,GAAGA,UAAU,IAAIC,OAAO,CAACC,GAAG,CAACC,WAAW,IAAIC,mBAAK,CAACC,WAAW;EACvE,MAAMC,GAAG,GAAG,GAAGN,UAAU,sBAAsBD,OAAO,2BAA2B;EAEjF,IAAIQ,MAAM;EACV,IAAI;IACHA,MAAM,GAAG,MAAM,IAAAC,kBAAK,EAACF,GAAG,EAAE;MACzBG,MAAM,EAAG,KAAK;MACdC,OAAO,EAAG;QACT,YAAY,EAAGC,mBAAU,CAACC;MAC3B;IACD,CAAC,CAAC;EACH,CAAC,CACD,OAAOjB,CAAC,EAAE;IACT,MAAM,IAAIkB,wBAAe,CAAC,4BAA4Bd,OAAO,KAAKJ,CAAC,EAAE,CAAC;EACvE;EAEA,IAAIY,MAAM,CAACO,EAAE,EAAE;IACd,OAAOP,MAAM,CAACQ,IAAI,CAAC,CAAC;EACrB;EACA,MAAMC,IAAI,GAAGT,MAAM,CAACU,IAAI,CAAC,CAAC;EAC1B,MAAM,IAAIJ,wBAAe,CAAC,4BAA4Bd,OAAO,KAAKiB,IAAI,YAAYT,MAAM,CAACW,MAAM,GAAG,CAAC;AACpG","ignoreList":[]}
|
package/out/identifier.js
CHANGED
|
@@ -4,13 +4,9 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = loadIdentifier;
|
|
7
|
-
|
|
8
7
|
var _agent = _interopRequireDefault(require("./agent"));
|
|
9
|
-
|
|
10
8
|
var _crypto = require("crypto");
|
|
11
|
-
|
|
12
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
-
|
|
9
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
14
10
|
async function loadIdentifier(identifier, consulHost) {
|
|
15
11
|
const agent = await (0, _agent.default)(consulHost);
|
|
16
12
|
return {
|
package/out/identifier.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"identifier.js","names":["_agent","_interopRequireDefault","require","_crypto","e","__esModule","default","loadIdentifier","identifier","consulHost","agent","fetchAgent","name","process","env","SERVICE_NAME","dataCenter","SERVICE_DC","Config","Datacenter","host","SERVICE_HOST","NodeName","instance","SERVICE_INSTANCE","randomUUID"],"sources":["../src/identifier.js"],"sourcesContent":["import fetchAgent from './agent';\nimport { randomUUID } from 'crypto';\n\nexport default async function loadIdentifier(identifier, consulHost) {\n\tconst agent = await fetchAgent(consulHost);\n\n\treturn {\n\t\tname : identifier.name || process.env.SERVICE_NAME,\n\t\tdataCenter : identifier.dataCenter || process.env.SERVICE_DC || agent.Config.Datacenter,\n\t\thost : identifier.host || process.env.SERVICE_HOST || agent.Config.NodeName,\n\t\tinstance : identifier.instance || process.env.SERVICE_INSTANCE || randomUUID(),\n\t};\n}\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAD,OAAA;AAAoC,SAAAD,uBAAAG,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAErB,eAAeG,cAAcA,CAACC,UAAU,EAAEC,UAAU,EAAE;EACpE,MAAMC,KAAK,GAAG,MAAM,IAAAC,cAAU,EAACF,UAAU,CAAC;EAE1C,OAAO;IACNG,IAAI,EAAGJ,UAAU,CAACI,IAAI,IAAIC,OAAO,CAACC,GAAG,CAACC,YAAY;IAClDC,UAAU,EAAGR,UAAU,CAACQ,UAAU,IAAIH,OAAO,CAACC,GAAG,CAACG,UAAU,IAAIP,KAAK,CAACQ,MAAM,CAACC,UAAU;IACvFC,IAAI,EAAGZ,UAAU,CAACY,IAAI,IAAIP,OAAO,CAACC,GAAG,CAACO,YAAY,IAAIX,KAAK,CAACQ,MAAM,CAACI,QAAQ;IAC3EC,QAAQ,EAAGf,UAAU,CAACe,QAAQ,IAAIV,OAAO,CAACC,GAAG,CAACU,gBAAgB,IAAI,IAAAC,kBAAU,EAAC;EAC9E,CAAC;AACF","ignoreList":[]}
|
package/out/index.d.ts
CHANGED
|
@@ -30,8 +30,8 @@ declare module "@magnet.me/consultant" {
|
|
|
30
30
|
|
|
31
31
|
interface Config {
|
|
32
32
|
getProperties(): Properties;
|
|
33
|
-
register(callback: (Properties) => void): void;
|
|
34
|
-
deregister(callback: (Properties) => void): void;
|
|
33
|
+
register(callback: (properties: Properties) => void): void;
|
|
34
|
+
deregister(callback: (properties: Properties) => void): void;
|
|
35
35
|
stop(): void;
|
|
36
36
|
}
|
|
37
37
|
|
package/out/index.js
CHANGED
|
@@ -3,12 +3,6 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
Object.defineProperty(exports, "service", {
|
|
7
|
-
enumerable: true,
|
|
8
|
-
get: function () {
|
|
9
|
-
return _service.default;
|
|
10
|
-
}
|
|
11
|
-
});
|
|
12
6
|
Object.defineProperty(exports, "config", {
|
|
13
7
|
enumerable: true,
|
|
14
8
|
get: function () {
|
|
@@ -21,12 +15,14 @@ Object.defineProperty(exports, "health", {
|
|
|
21
15
|
return _health.default;
|
|
22
16
|
}
|
|
23
17
|
});
|
|
24
|
-
|
|
18
|
+
Object.defineProperty(exports, "service", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
get: function () {
|
|
21
|
+
return _service.default;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
25
24
|
var _service = _interopRequireDefault(require("./service"));
|
|
26
|
-
|
|
27
25
|
var _config = _interopRequireDefault(require("./config"));
|
|
28
|
-
|
|
29
26
|
var _health = _interopRequireDefault(require("./health"));
|
|
30
|
-
|
|
31
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
27
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
32
28
|
//# sourceMappingURL=index.js.map
|
package/out/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"index.js","names":["_service","_interopRequireDefault","require","_config","_health","e","__esModule","default"],"sources":["../src/index.js"],"sourcesContent":["import service from './service';\nimport config from './config';\nimport health from './health';\n\nexport {\n\t/**\n\t * Registers a service with Consul\n\t * @function\n\t * @param {Object} configuration\n\t * @param {Object} configuration.service - The service specific configuration\n\t * @param {string} configuration.service.name - The name of the service (Used in both the registration and config retrieving)\n\t * @param {Number} configuration.service.port - The port on which this service runs\n\t * @param {string} [configuration.service.dataCenter] - The data center the service resides in\n\t * @param {string} [configuration.service.host] - The host where Consul can find the service\n\t * @param {string} [configuration.service.instance] - The instance identifier of the service\n\t * @param {string} [configuration.healthCheckPath] - An optional http path where the health check can be found\n\t * @param {Number} [configuration.healthCheckInterval] - The interval (in seconds) at which the health check is polled. If 0 no health check is done\n\t * @param {string} [configuration.consulHost] - Where Consultant can find a Consul agent\n\t * @return {Promise} An Promise containing the identifier as well as a deregister function\n\t * @return {Object} identifier - The specified service identifier\n\t * @return {function} deregister - Function to deregister the service with its health check from Consul\n\t */\n\tservice,\n\t/**\n\t * Set up the key/value retrieval and polling\n\t * @function\n\t * @param {Object} configuration\n\t * @param {Object} configuration.service The service identifier used to validate properties against\n\t * @param {string} configuration.service.name - The name of the service (Used in both the registration and config retrieving)\n\t * @param {string} [configuration.service.dataCenter] - The data center the service resides in\n\t * @param {string} [configuration.service.host] - The host where Consul can find the service\n\t * @param {string} [configuration.service.instance] - The instance identifier of the service\n\t * @param {string} [configuration.prefix] - The prefix path that should be before the service name in the key/value store\n\t * @param {Number} [configuration.interval] - The interval (in milliseconds) at which to poll the store. If set to 0, no polling will be done\n\t * @return {Promise} A promise containing the configuration Object\n\t * @return {function} getProperties - Getter to retrieve a copy of the current properties\n\t * @return {function} register - Register a callback that receives the latest properties object any time a change is detected\n\t * @return {function} deregister - Remove a registered callback\n\t * @return {function} stop - Stop the store polling\n\t */\n\tconfig,\n\t/**\n\t * Get the health information for a service\n\t * @function\n\t * @param {Object} configuration\n\t * @param {string} configuration.service The service name to search\n\t * @param {string} configuration.consulHost Where Consultant can find a Consul agent\n\t */\n\thealth\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA,IAAAA,QAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,OAAA,GAAAF,sBAAA,CAAAC,OAAA;AACA,IAAAE,OAAA,GAAAH,sBAAA,CAAAC,OAAA;AAA8B,SAAAD,uBAAAI,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA","ignoreList":[]}
|
package/out/key-parser.js
CHANGED
|
@@ -3,25 +3,21 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.parseKey = parseKey;
|
|
7
6
|
exports.keyApplies = keyApplies;
|
|
7
|
+
exports.parseKey = parseKey;
|
|
8
8
|
const validSpecifiers = {
|
|
9
9
|
dc: 'dataCenter',
|
|
10
10
|
host: 'host',
|
|
11
11
|
instance: 'instance'
|
|
12
12
|
};
|
|
13
|
-
|
|
14
13
|
function parseKey(key, prefix) {
|
|
15
14
|
let tail = key;
|
|
16
|
-
|
|
17
15
|
if (prefix) {
|
|
18
16
|
if (!key.startsWith(prefix + '/')) {
|
|
19
17
|
return undefined;
|
|
20
18
|
}
|
|
21
|
-
|
|
22
19
|
tail = key.substring(prefix.length + 1);
|
|
23
20
|
}
|
|
24
|
-
|
|
25
21
|
if (tail.includes('/[')) {
|
|
26
22
|
const specifierStart = tail.indexOf('/[');
|
|
27
23
|
const serviceName = tail.substring(0, specifierStart);
|
|
@@ -47,15 +43,15 @@ function parseKey(key, prefix) {
|
|
|
47
43
|
};
|
|
48
44
|
}
|
|
49
45
|
}
|
|
46
|
+
|
|
50
47
|
/**
|
|
51
48
|
* Splits up the specifier string into an array of specifier objects
|
|
52
49
|
* @param {string} specifiersPart - A string of the following expected format: [spec1=val1,spec2=val2,...]
|
|
53
50
|
* @return {Array} An array of specifiers in the following format [{dataCenter:'development'},{host:'localhost'},...]
|
|
54
51
|
*/
|
|
55
|
-
|
|
56
|
-
|
|
57
52
|
function extractSpecifiers(specifiersPart) {
|
|
58
|
-
return specifiersPart.split(',').map(specifier => specifier.split('='))
|
|
53
|
+
return specifiersPart.split(',').map(specifier => specifier.split('='))
|
|
54
|
+
// validSpecifiers is a hard-coded object so this check is safe
|
|
59
55
|
// eslint-disable-next-line no-prototype-builtins
|
|
60
56
|
.filter(kvArray => validSpecifiers.hasOwnProperty(kvArray[0])).map(kvArray => {
|
|
61
57
|
const key = validSpecifiers[kvArray[0]];
|
|
@@ -64,11 +60,9 @@ function extractSpecifiers(specifiersPart) {
|
|
|
64
60
|
};
|
|
65
61
|
});
|
|
66
62
|
}
|
|
67
|
-
|
|
68
63
|
function keyApplies(key, service) {
|
|
69
64
|
return isUnsetOrEqual(key.name, service.name) && isUnsetOrEqual(key.dataCenter, service.dataCenter) && isUnsetOrEqual(key.host, service.host) && isUnsetOrEqual(key.instance, service.instance);
|
|
70
65
|
}
|
|
71
|
-
|
|
72
66
|
function isUnsetOrEqual(keyField, serviceField) {
|
|
73
67
|
return !keyField || keyField === serviceField;
|
|
74
68
|
}
|
package/out/key-parser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"key-parser.js","names":["validSpecifiers","dc","host","instance","parseKey","key","prefix","tail","startsWith","undefined","substring","length","includes","specifierStart","indexOf","serviceName","specifierEnd","specifiersPart","specifiers","extractSpecifiers","Object","assign","name","split","map","specifier","filter","kvArray","hasOwnProperty","keyApplies","service","isUnsetOrEqual","dataCenter","keyField","serviceField"],"sources":["../src/key-parser.js"],"sourcesContent":["const validSpecifiers = {dc : 'dataCenter', host : 'host', instance : 'instance'};\n\nfunction parseKey(key, prefix) {\n\tlet tail = key;\n\tif (prefix) {\n\t\tif (!key.startsWith(prefix + '/')) {\n\t\t\treturn undefined;\n\t\t}\n\t\ttail = key.substring(prefix.length + 1);\n\t}\n\n\tif (tail.includes('/[')) {\n\t\tconst specifierStart = tail.indexOf('/[');\n\t\tconst serviceName = tail.substring(0, specifierStart);\n\t\tconst specifierEnd = tail.indexOf(']');\n\t\tconst specifiersPart = tail.substring(specifierStart + 2, specifierEnd);\n\n\t\tconst specifiers = extractSpecifiers(specifiersPart);\n\n\t\ttail = tail.substring(specifierEnd + 1);\n\n\t\treturn Object.assign({name : serviceName, key : tail}, ...specifiers);\n\t}\n\telse if (tail.includes('/')) {\n\t\tconst serviceName = tail.substring(0, tail.indexOf('/'));\n\t\ttail = tail.substring(tail.indexOf('/') + 1);\n\t\treturn {key : tail, name : serviceName};\n\t}\n\telse {\n\t\treturn {key : '', name : tail};\n\t}\n}\n\n/**\n * Splits up the specifier string into an array of specifier objects\n * @param {string} specifiersPart - A string of the following expected format: [spec1=val1,spec2=val2,...]\n * @return {Array} An array of specifiers in the following format [{dataCenter:'development'},{host:'localhost'},...]\n */\nfunction extractSpecifiers(specifiersPart) {\n\treturn specifiersPart.split(',')\n\t\t.map(specifier => specifier.split('='))\n\t\t// validSpecifiers is a hard-coded object so this check is safe\n\t\t// eslint-disable-next-line no-prototype-builtins\n\t\t.filter(kvArray => validSpecifiers.hasOwnProperty(kvArray[0]))\n\t\t.map(kvArray => {\n\t\t\tconst key = validSpecifiers[kvArray[0]];\n\t\t\treturn {[key] : kvArray[1]};\n\t\t});\n}\n\nfunction keyApplies(key, service) {\n\treturn isUnsetOrEqual(key.name, service.name)\n\t\t&& isUnsetOrEqual(key.dataCenter, service.dataCenter)\n\t\t&& isUnsetOrEqual(key.host, service.host)\n\t\t&& isUnsetOrEqual(key.instance, service.instance);\n}\n\nfunction isUnsetOrEqual(keyField, serviceField) {\n\treturn !keyField || keyField === serviceField;\n}\n\nexport {parseKey, keyApplies};"],"mappings":"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","ignoreList":[]}
|
package/out/properties.js
CHANGED
|
@@ -4,9 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
var _default = {
|
|
7
|
+
var _default = exports.default = {
|
|
8
8
|
userAgent: 'consultant-js',
|
|
9
9
|
defaultHost: 'http://localhost:8500'
|
|
10
10
|
};
|
|
11
|
-
exports.default = _default;
|
|
12
11
|
//# sourceMappingURL=properties.js.map
|
package/out/properties.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"properties.js","names":["userAgent","defaultHost"],"sources":["../src/properties.js"],"sourcesContent":["export default {\n\tuserAgent: 'consultant-js',\n\tdefaultHost: 'http://localhost:8500'\n};\n"],"mappings":";;;;;;iCAAe;EACdA,SAAS,EAAE,eAAe;EAC1BC,WAAW,EAAE;AACd,CAAC","ignoreList":[]}
|
package/out/service.js
CHANGED
|
@@ -4,17 +4,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = register;
|
|
7
|
-
|
|
8
7
|
var _nodeFetch = _interopRequireDefault(require("node-fetch"));
|
|
9
|
-
|
|
10
8
|
var _consultantError = _interopRequireDefault(require("./consultant-error"));
|
|
11
|
-
|
|
12
9
|
var _properties = _interopRequireDefault(require("./properties"));
|
|
13
|
-
|
|
14
10
|
var _identifier = _interopRequireDefault(require("./identifier"));
|
|
15
|
-
|
|
16
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
-
|
|
11
|
+
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
18
12
|
const deregister = async (host, instance) => {
|
|
19
13
|
const uri = `${host}/v1/agent/service/deregister/${instance.instance}`;
|
|
20
14
|
const opts = {
|
|
@@ -23,14 +17,12 @@ const deregister = async (host, instance) => {
|
|
|
23
17
|
'user-agent': _properties.default.userAgent
|
|
24
18
|
}
|
|
25
19
|
};
|
|
26
|
-
|
|
27
20
|
try {
|
|
28
21
|
await (0, _nodeFetch.default)(uri, opts);
|
|
29
22
|
} catch (e) {
|
|
30
23
|
throw new _consultantError.default(`Could not deregister from Consul: ${e}`);
|
|
31
24
|
}
|
|
32
25
|
};
|
|
33
|
-
|
|
34
26
|
async function register({
|
|
35
27
|
service,
|
|
36
28
|
healthCheckPath,
|
|
@@ -39,15 +31,12 @@ async function register({
|
|
|
39
31
|
}) {
|
|
40
32
|
consulHost = consulHost || process.env.CONSUL_HOST || _properties.default.defaultHost;
|
|
41
33
|
const portNumber = Number(service.port);
|
|
42
|
-
|
|
43
34
|
if (!(portNumber > 0 && portNumber < 65536)) {
|
|
44
35
|
throw new _consultantError.default(`service.port=${service.port} is not a proper port`);
|
|
45
36
|
}
|
|
46
|
-
|
|
47
37
|
if (!service.name) {
|
|
48
38
|
throw new _consultantError.default('service.name was not defined');
|
|
49
39
|
}
|
|
50
|
-
|
|
51
40
|
const identifier = await (0, _identifier.default)(service, consulHost);
|
|
52
41
|
const body = {
|
|
53
42
|
Id: identifier.instance,
|
|
@@ -55,16 +44,14 @@ async function register({
|
|
|
55
44
|
Address: identifier.host,
|
|
56
45
|
Port: service.port
|
|
57
46
|
};
|
|
58
|
-
|
|
59
47
|
if (healthCheckPath && healthCheckInterval > 0) {
|
|
60
48
|
Object.assign(body, {
|
|
61
49
|
Check: {
|
|
62
50
|
HTTP: `http://${identifier.host}:${service.port}${healthCheckPath}`,
|
|
63
|
-
Interval: healthCheckInterval
|
|
51
|
+
Interval: `${healthCheckInterval}s`
|
|
64
52
|
}
|
|
65
53
|
});
|
|
66
54
|
}
|
|
67
|
-
|
|
68
55
|
const url = `${consulHost}/v1/agent/service/register`;
|
|
69
56
|
const opts = {
|
|
70
57
|
method: 'PUT',
|
|
@@ -75,13 +62,11 @@ async function register({
|
|
|
75
62
|
},
|
|
76
63
|
body: JSON.stringify(body)
|
|
77
64
|
};
|
|
78
|
-
|
|
79
65
|
try {
|
|
80
66
|
await (0, _nodeFetch.default)(url, opts);
|
|
81
67
|
} catch (e) {
|
|
82
68
|
throw new _consultantError.default('Could not register service with Consul', e);
|
|
83
69
|
}
|
|
84
|
-
|
|
85
70
|
return {
|
|
86
71
|
identifier,
|
|
87
72
|
deregister: () => deregister(consulHost, identifier)
|
package/out/service.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"service.js","names":["_nodeFetch","_interopRequireDefault","require","_consultantError","_properties","_identifier","e","__esModule","default","deregister","host","instance","uri","opts","method","headers","properties","userAgent","fetch","ConsultantError","register","service","healthCheckPath","healthCheckInterval","consulHost","process","env","CONSUL_HOST","defaultHost","portNumber","Number","port","name","identifier","fetchIdentifier","body","Id","Name","Address","Port","Object","assign","Check","HTTP","Interval","url","JSON","stringify"],"sources":["../src/service.js"],"sourcesContent":["import fetch from 'node-fetch';\nimport ConsultantError from './consultant-error';\nimport properties from './properties';\nimport fetchIdentifier from './identifier';\n\nconst deregister = async (host, instance) => {\n\tconst uri = `${host}/v1/agent/service/deregister/${instance.instance}`;\n\tconst opts = {\n\t\tmethod : 'PUT',\n\t\theaders : {\n\t\t\t'user-agent' : properties.userAgent\n\t\t}\n\t};\n\n\ttry {\n\t\tawait fetch(uri, opts);\n\t}\n\tcatch (e) {\n\t\tthrow new ConsultantError(`Could not deregister from Consul: ${e}`);\n\t}\n};\n\nexport default async function register({service, healthCheckPath, healthCheckInterval = 10, consulHost}) {\n\tconsulHost = consulHost || process.env.CONSUL_HOST || properties.defaultHost;\n\n\tconst portNumber = Number(service.port);\n\tif (!(portNumber > 0 && portNumber < 65536)) {\n\t\tthrow new ConsultantError(`service.port=${service.port} is not a proper port`);\n\t}\n\n\tif (!service.name) {\n\t\tthrow new ConsultantError('service.name was not defined');\n\t}\n\n\tconst identifier = await fetchIdentifier(service, consulHost);\n\n\tconst body = {\n\t\tId : identifier.instance,\n\t\tName : identifier.name,\n\t\tAddress : identifier.host,\n\t\tPort : service.port,\n\t};\n\n\tif (healthCheckPath && healthCheckInterval > 0) {\n\t\tObject.assign(body, {\n\t\t\tCheck : {\n\t\t\t\tHTTP : `http://${identifier.host}:${service.port}${healthCheckPath}`,\n\t\t\t\tInterval : `${healthCheckInterval}s`\n\t\t\t}\n\t\t});\n\t}\n\n\tconst url = `${consulHost}/v1/agent/service/register`;\n\tconst opts = {\n\t\tmethod : 'PUT',\n\t\theaders : {\n\t\t\t'accept' : 'application/json',\n\t\t\t'content-type' : 'application/json',\n\t\t\t'user-agent' : properties.userAgent\n\t\t},\n\t\tbody : JSON.stringify(body)\n\t};\n\n\ttry {\n\t\tawait fetch(url, opts);\n\t}\n\tcatch (e) {\n\t\tthrow new ConsultantError('Could not register service with Consul', e);\n\t}\n\n\treturn {\n\t\tidentifier,\n\t\tderegister : () => deregister(consulHost, identifier)\n\t};\n}\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@magnet.me/consultant",
|
|
3
|
-
"version": "1.6.
|
|
3
|
+
"version": "1.6.2",
|
|
4
4
|
"description": "A library to register services to Consul and listen for property changes.",
|
|
5
5
|
"main": "out/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -16,11 +16,13 @@
|
|
|
16
16
|
"node-fetch": "^2.6.7"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
19
|
-
"@babel/cli": "^7.
|
|
20
|
-
"@babel/core": "^7.
|
|
21
|
-
"@babel/preset-env": "^7.
|
|
22
|
-
"
|
|
23
|
-
"
|
|
19
|
+
"@babel/cli": "^7.28.6",
|
|
20
|
+
"@babel/core": "^7.29.0",
|
|
21
|
+
"@babel/preset-env": "^7.29.5",
|
|
22
|
+
"@babel/traverse": "^7.29.0",
|
|
23
|
+
"@eslint/js": "^10.0.1",
|
|
24
|
+
"eslint": "^10.3.0",
|
|
25
|
+
"globals": "^17.6.0"
|
|
24
26
|
},
|
|
25
27
|
"directories": {
|
|
26
28
|
"example": "example"
|
|
@@ -33,8 +35,5 @@
|
|
|
33
35
|
"url": "https://github.com/Magnetme/consultant-js/issues"
|
|
34
36
|
},
|
|
35
37
|
"homepage": "https://github.com/Magnetme/consultant-js#readme",
|
|
36
|
-
"types": "./out/index.d.ts"
|
|
37
|
-
"resolutions": {
|
|
38
|
-
"@babel/traverse": "7.23.2"
|
|
39
|
-
}
|
|
38
|
+
"types": "./out/index.d.ts"
|
|
40
39
|
}
|