1 | "use strict";
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const HTTPMethod_1 = require("./HTTPMethod");
|
4 | const ServiceResponse_1 = require("./ServiceResponse");
|
5 | const http = require("http");
|
6 | const NO_DATA = `|${0x0}|`;
|
7 | class 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 | }
|
109 | exports.ServiceProvider = ServiceProvider;
|
110 |
|
\ | No newline at end of file |