UNPKG

4.52 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const HTTPMethod_1 = require("./HTTPMethod");
4const ServiceResponse_1 = require("./ServiceResponse");
5const http = require("http");
6const NO_DATA = `|${0x0}|`;
7class ServiceProvider {
8 constructor(app) {
9 this._app = app;
10 }
11 _getApp() {
12 return this._app;
13 }
14 getApp() {
15 return this._app;
16 }
17 _getDomain() {
18 return '127.0.0.1';
19 }
20 _getSecret() {
21 return this._app.getConfig().backend_authentication_secret;
22 }
23 urlSuffix() {
24 return '/';
25 }
26 _getProtocol() {
27 return 'http';
28 }
29 getVersion() {
30 return 'v1';
31 }
32 _createURL(url, queryParams) {
33 let queryString = '';
34 if (queryParams) {
35 for (let i in queryParams) {
36 if (queryString === '') {
37 queryString = '?' + i + '=' + queryParams[i];
38 }
39 else {
40 queryString += '&' + i + '=' + queryParams[i];
41 }
42 }
43 }
44 return `/api/${this._getBase()}/${this.getVersion()}/${url}${this.urlSuffix()}${queryString}`;
45 }
46 request(method, url, accessToken, data, headers, additionalOptions) {
47 return new Promise((resolve, reject) => {
48 let httpOpts = {
49 port: this._getPort(),
50 hostname: `${this._getDomain()}`,
51 method: method,
52 path: url,
53 headers: headers || {}
54 };
55 httpOpts.headers[this._app.getConfig().authentication_header] = accessToken;
56 httpOpts.headers[this._app.getConfig().backend_authentication_header] = this._getSecret();
57 if (!httpOpts.headers['Content-Type']) {
58 httpOpts.headers['Content-Type'] = 'application/json';
59 }
60 this._app.getLogger().trace(`ServiceProvider Request`);
61 this._app.getLogger().trace(`METHOD: ${httpOpts.method}`);
62 this._app.getLogger().trace(`HOSTNAME: ${httpOpts.hostname}`);
63 this._app.getLogger().trace(`PORT: ${httpOpts.port}`);
64 this._app.getLogger().trace(`PATH: ${httpOpts.path}`);
65 this._app.getLogger().trace(`HEADERS: ${JSON.stringify(httpOpts.headers)}`);
66 let responseData = Buffer.from('');
67 let request = http.request(httpOpts, (response) => {
68 this._app.getLogger().trace(`ServiceProvider Response Status: ${response.statusCode}`);
69 this._app.getLogger().trace(`ServiceProvider Response Headers: ${JSON.stringify(response.headers)}`);
70 response.on('data', (chunk) => {
71 this._app.getLogger().trace(`ServiceProvider Received Chunk: ${chunk}`);
72 responseData = Buffer.concat([
73 responseData,
74 chunk
75 ]);
76 });
77 response.on('end', () => {
78 this._app.getLogger().trace(`ServiceProvider request has completed.`);
79 resolve(new ServiceResponse_1.ServiceResponse(responseData, response));
80 });
81 response.on('error', (e) => {
82 this._app.getLogger().error(e.message);
83 reject(e);
84 });
85 });
86 if (data && data !== NO_DATA) {
87 data = JSON.stringify(data);
88 request.write(data);
89 }
90 this._sendRequest(request);
91 });
92 }
93 _sendRequest(request) {
94 request.end();
95 }
96 get(url, accessToken, data, headers, additionalOptions) {
97 return this.request(HTTPMethod_1.HTTPMethod.GET, this._createURL(url, data), accessToken, NO_DATA, headers, additionalOptions);
98 }
99 post(url, accessToken, data, headers, additionalOptions) {
100 return this.request(HTTPMethod_1.HTTPMethod.POST, this._createURL(url), accessToken, data, headers, additionalOptions);
101 }
102 put(url, accessToken, data, headers, additionalOptions) {
103 return this.request(HTTPMethod_1.HTTPMethod.PUT, this._createURL(url), accessToken, data, headers, additionalOptions);
104 }
105 delete(url, accessToken, data, headers, additionalOptions) {
106 return this.request(HTTPMethod_1.HTTPMethod.DELETE, this._createURL(url), accessToken, data, headers, additionalOptions);
107 }
108}
109exports.ServiceProvider = ServiceProvider;
110//# sourceMappingURL=ServiceProvider.js.map
\No newline at end of file