1 | "use strict";
|
2 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3 | return new (P || (P = Promise))(function (resolve, reject) {
|
4 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
5 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
6 | function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
7 | step((generator = generator.apply(thisArg, _arguments || [])).next());
|
8 | });
|
9 | };
|
10 | Object.defineProperty(exports, "__esModule", { value: true });
|
11 |
|
12 |
|
13 |
|
14 |
|
15 | const createDebug = require("debug");
|
16 | const http_status_1 = require("http-status");
|
17 | const request = require("request");
|
18 | const debug = createDebug('coa-service:transporters');
|
19 |
|
20 | const pkg = require('../package.json');
|
21 |
|
22 |
|
23 |
|
24 |
|
25 | const RESPONSE_BODY_STAUS_SUCCESS = 0;
|
26 |
|
27 |
|
28 |
|
29 |
|
30 | class Transporter {
|
31 | }
|
32 | exports.Transporter = Transporter;
|
33 |
|
34 |
|
35 |
|
36 | class COAServiceError extends Error {
|
37 | constructor(code, status, message) {
|
38 | super(message);
|
39 | this.name = 'COAServiceError';
|
40 | this.code = code;
|
41 | this.status = status;
|
42 | }
|
43 | }
|
44 | exports.COAServiceError = COAServiceError;
|
45 |
|
46 |
|
47 |
|
48 | class DefaultTransporter {
|
49 | constructor(expectedStatusCodes) {
|
50 | this.expectedStatusCodes = expectedStatusCodes;
|
51 | }
|
52 | |
53 |
|
54 |
|
55 | static CONFIGURE(options) {
|
56 |
|
57 | options.headers = (options.headers !== undefined) ? options.headers : {};
|
58 |
|
59 |
|
60 | if (!options.headers['User-Agent']) {
|
61 | options.headers['User-Agent'] = DefaultTransporter.USER_AGENT;
|
62 | }
|
63 | else if (options.headers['User-Agent'].indexOf(DefaultTransporter.USER_AGENT) === -1) {
|
64 | options.headers['User-Agent'] = `${options.headers['User-Agent']} ${DefaultTransporter.USER_AGENT}`;
|
65 | }
|
66 | else {
|
67 |
|
68 | }
|
69 | return options;
|
70 | }
|
71 | |
72 |
|
73 |
|
74 | request(options) {
|
75 | return __awaiter(this, void 0, void 0, function* () {
|
76 | const requestOptions = DefaultTransporter.CONFIGURE(options);
|
77 | debug('requesting...', requestOptions);
|
78 | return new Promise((resolve, reject) => {
|
79 | request(requestOptions, (error, response, body) => {
|
80 | try {
|
81 | resolve(this.wrapCallback(error, response, body));
|
82 | }
|
83 | catch (callbackErr) {
|
84 | reject(callbackErr);
|
85 | }
|
86 | });
|
87 | });
|
88 | });
|
89 | }
|
90 | |
91 |
|
92 |
|
93 | wrapCallback(error, response, body) {
|
94 | let err = new COAServiceError(http_status_1.INTERNAL_SERVER_ERROR, '', 'An unexpected error occurred.');
|
95 | if (error instanceof Error) {
|
96 | throw new COAServiceError(http_status_1.INTERNAL_SERVER_ERROR, '', error.message);
|
97 | }
|
98 | debug('request processed', error, body);
|
99 |
|
100 |
|
101 | if (response.statusCode !== undefined) {
|
102 | if (this.expectedStatusCodes.indexOf(response.statusCode) < 0) {
|
103 | if (typeof body === 'string') {
|
104 |
|
105 | err = new COAServiceError(response.statusCode, '', body);
|
106 | }
|
107 | else {
|
108 |
|
109 |
|
110 |
|
111 | if (body.status !== undefined) {
|
112 | err = new COAServiceError(response.statusCode, body.status, body.message);
|
113 | }
|
114 | else {
|
115 |
|
116 | }
|
117 | }
|
118 | }
|
119 | else {
|
120 |
|
121 | if (body.status !== undefined && body.status !== RESPONSE_BODY_STAUS_SUCCESS) {
|
122 | err = new COAServiceError(response.statusCode, body.status, body.message);
|
123 | }
|
124 | else {
|
125 | if (response.statusCode === http_status_1.NO_CONTENT) {
|
126 |
|
127 | return;
|
128 | }
|
129 | else {
|
130 |
|
131 | return body;
|
132 | }
|
133 | }
|
134 | }
|
135 | }
|
136 | else {
|
137 |
|
138 | }
|
139 | throw err;
|
140 | }
|
141 | }
|
142 |
|
143 |
|
144 |
|
145 | DefaultTransporter.USER_AGENT = `coa-service/${pkg.version}`;
|
146 | exports.DefaultTransporter = DefaultTransporter;
|