-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathreference.js
More file actions
94 lines (75 loc) · 2.84 KB
/
reference.js
File metadata and controls
94 lines (75 loc) · 2.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
'use strict';
// S4S Discovery Data Server Reference web service
// File: reference.js
const version = '20180802';
// Required modules
const restifyClients = require('restify-clients');
const EventEmitter = require('events').EventEmitter;
const util = require('./utility');
// Configuration (Kluge: config is read by all modules)
const config = require('./config');
const providers = config.providers;
const participants = config.participants;
// Setup for 'ready' event
module.exports = new EventEmitter();
// Send module 'ready' event to parent -- setTimeout() provides a "yield" so that wait is setup before emit
setTimeout(function () {
module.exports.emit('ready');
});
//---------------------------------------------------------------------------------
// The 'reference' call (GET /reference/:provider/:referencePath)
module.exports.reference = function (req, res, next) {
if (req == undefined) {
// Return documentation
return {pre: {desc: 'reference service', version: version},
desc: 'Get the :referencePath data bundle from provider :provider',
params: [{name: 'provider', desc: 'the URL-encoded provider name'},
{name: 'referencePath', desc: 'the URL-encoded path to the data bundle'}],
return: 'The data for this reference.'};
} else {
getReferenceData(req.params.provider, req.params.referencePath, function (referenceData) {
// Return data to requestor
util.sendJson(req, res, referenceData);
});
return next();
}
};
//---------------------------------------------------------------------------------
// SUPPORT FUNCTIONS
// Get the :referencePath data bundle from provider :provider
function getReferenceData (providerName, referencePath, callback) {
let provider = null;
debugger;
try {
provider = config.providers[providerName];
} catch (e) {};
if (!provider) {
// Invalid provider -- return empty obj
callback({});
} else {
let providerClient = restifyClients.createJsonClient({
url: provider.base,
version : '*',
retry: {
minTimeout: config.minRetryTimeout,
retries: config.retries
},
connectTimeout: config.providerConnectTimeout,
requestTimeout: config.providerRequestTimeout
});
// Make the request to the provider
providerClient.get(provider.refPath.format(referencePath), function (err, req, res, obj) {
// const nodeUtil = require('util');
// const fs = require('fs');
// for (let item of [{name:'req',val:req}, {name:'res',val:res}, {name:'obj',val:obj}]) {
// fs.writeFile('/tmp/restify-{0}-dump.txt'.format(item.name), nodeUtil.inspect(item.val, {showHidden:true, depth:null}), function(err) {
// if (err) {
// return console.log(err);
// }
// });
// };
// Return the response
callback( err ? {error:err} : obj );
});
}
}