@twilio/mcs-client 0.5.3 → 0.6.0-rc.10
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/CHANGELOG.md +87 -0
- package/builds/browser.js +733 -370
- package/builds/browser.js.map +1 -1
- package/builds/lib.d.ts +55 -26
- package/builds/lib.js +708 -370
- package/builds/lib.js.map +1 -1
- package/builds/twilio-mcs-client.js +3371 -2210
- package/builds/twilio-mcs-client.min.js +3 -17
- package/dist/_virtual/rng-browser.js +34 -0
- package/dist/_virtual/rng-browser.js.map +1 -0
- package/dist/cancellable-promise.js +98 -0
- package/dist/cancellable-promise.js.map +1 -0
- package/dist/client.js +88 -23
- package/dist/client.js.map +1 -1
- package/dist/configuration.js.map +1 -1
- package/dist/index.js +5 -9
- package/dist/index.js.map +1 -1
- package/dist/logger.js +2 -4
- package/dist/logger.js.map +1 -1
- package/dist/media.js +15 -22
- package/dist/media.js.map +1 -1
- package/dist/node_modules/tslib/tslib.es6.js +1 -1
- package/dist/node_modules/tslib/tslib.es6.js.map +1 -1
- package/dist/node_modules/uuid/index.js +44 -0
- package/dist/node_modules/uuid/index.js.map +1 -0
- package/dist/node_modules/uuid/lib/bytesToUuid.js +60 -0
- package/dist/node_modules/uuid/lib/bytesToUuid.js.map +1 -0
- package/dist/node_modules/uuid/lib/rng-browser.js +65 -0
- package/dist/node_modules/uuid/lib/rng-browser.js.map +1 -0
- package/dist/node_modules/uuid/v1.js +146 -0
- package/dist/node_modules/uuid/v1.js.map +1 -0
- package/dist/node_modules/uuid/v4.js +66 -0
- package/dist/node_modules/uuid/v4.js.map +1 -0
- package/dist/packages/mcs-client/package.json.js +1 -1
- package/dist/services/network.js +54 -32
- package/dist/services/network.js.map +1 -1
- package/dist/services/transport.js +26 -11
- package/dist/services/transport.js.map +1 -1
- package/dist/services/transporterror.js.map +1 -1
- package/package.json +16 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.js","sources":["../../src/services/network.ts"],"sourcesContent":["import { Retrier } from \"@twilio/operation-retrier\";\nimport { Logger } from \"../logger\";\nimport { Configuration } from \"../configuration\";\nimport { Transport } from \"./transport\";\nimport { MediaCategory } from \"../media\";\n\nconst log = Logger.scope(\"Network\");\n\nclass Network {\n private readonly config: Configuration;\n private readonly transport: Transport;\n\n constructor(config: Configuration, transport: Transport) {\n this.config = config;\n this.transport = transport;\n }\n\n private backoffConfig() {\n return Object.assign(\n Configuration.backoffConfigDefault,\n this.config.backoffConfigOverride\n );\n }\n\n private retryWhenThrottled(): boolean {\n return (\n this.config.retryWhenThrottledOverride ??\n Configuration.retryWhenThrottledDefault ??\n false\n );\n }\n\n private
|
|
1
|
+
{"version":3,"file":"network.js","sources":["../../src/services/network.ts"],"sourcesContent":["import { Retrier } from \"@twilio/operation-retrier\";\nimport { Logger } from \"../logger\";\nimport { Configuration } from \"../configuration\";\nimport { Transport } from \"./transport\";\nimport { MediaCategory } from \"../media\";\nimport { CancellablePromise } from \"../cancellable-promise\";\n\nconst log = Logger.scope(\"Network\");\n\nclass Network {\n private readonly config: Configuration;\n private readonly transport: Transport;\n\n constructor(config: Configuration, transport: Transport) {\n this.config = config;\n this.transport = transport;\n }\n\n private backoffConfig() {\n return Object.assign(\n Configuration.backoffConfigDefault,\n this.config.backoffConfigOverride\n );\n }\n\n private retryWhenThrottled(): boolean {\n return (\n this.config.retryWhenThrottledOverride ??\n Configuration.retryWhenThrottledDefault ??\n false\n );\n }\n\n private executeWithRetry(\n request,\n retryWhenThrottled: boolean\n ): CancellablePromise<any> {\n return new CancellablePromise(async (resolve, reject, onCancel) => {\n const retrier = new Retrier(this.backoffConfig());\n\n const codesToRetryOn = [502, 503, 504];\n if (retryWhenThrottled) {\n codesToRetryOn.push(429);\n }\n\n onCancel(() => {\n retrier.cancel();\n retrier.removeAllListeners();\n });\n\n retrier.on(\"attempt\", async () => {\n try {\n const requestPromise = request();\n\n onCancel(() => {\n requestPromise.cancel();\n retrier.cancel();\n retrier.removeAllListeners();\n });\n\n const result = await requestPromise;\n retrier.succeeded(result);\n } catch (err) {\n if (codesToRetryOn.indexOf(err.status) > -1) {\n retrier.failed(err);\n } else if (err.message === \"Twilsock disconnected\") {\n // Ugly hack. We must make a proper exceptions for twilsock\n retrier.failed(err);\n } else {\n // Fatal error\n retrier.removeAllListeners();\n retrier.cancel();\n reject(err);\n }\n }\n });\n\n retrier.on(\"succeeded\", (result) => {\n resolve(result);\n });\n retrier.on(\"cancelled\", (err) => reject(err));\n retrier.on(\"failed\", (err) => reject(err));\n\n retrier.start();\n });\n }\n\n public get(url: string): CancellablePromise<any> {\n return new CancellablePromise(async (resolve, reject, onCancel) => {\n const headers = { \"X-Twilio-Token\": this.config.token };\n const request = this.executeWithRetry(\n () => this.transport.get(url, headers),\n this.retryWhenThrottled()\n );\n log.trace(\"sending GET request to \", url, \" headers \", headers);\n\n onCancel(() => request.cancel());\n\n try {\n const response = await request;\n log.trace(\"response\", response);\n resolve(response);\n } catch (err) {\n log.debug(`get() error ${err}`);\n reject(err);\n }\n });\n }\n\n public post(\n url: string,\n category: MediaCategory | null,\n media: string | Buffer | Blob | FormData | Record<string, unknown>,\n contentType?: string,\n filename?: string\n ): CancellablePromise<any> {\n const headers = {\n \"X-Twilio-Token\": this.config.token,\n };\n\n if (\n (typeof FormData === \"undefined\" || !(media instanceof FormData)) &&\n contentType\n ) {\n Object.assign(headers, {\n \"Content-Type\": contentType,\n });\n }\n\n const fullUrl = new URL(url);\n if (category) {\n fullUrl.searchParams.append(\"Category\", category);\n }\n if (filename) {\n fullUrl.searchParams.append(\"Filename\", filename);\n }\n\n return new CancellablePromise(async (resolve, reject, onCancel) => {\n const request = this.transport.post(fullUrl.href, headers, media);\n\n onCancel(() => request.cancel());\n\n log.trace(`sending POST request to ${url} with headers ${headers}`);\n let response;\n try {\n response = await request;\n } catch (err) {\n // If global[\"XMLHttpRequest\"] is undefined, it means that the code is\n // not being executed in the browser.\n if (\n global[\"XMLHttpRequest\"] === undefined &&\n media instanceof FormData\n ) {\n reject(\n new TypeError(\n \"Posting FormData supported only with browser engine's FormData\"\n )\n );\n return;\n }\n log.debug(`post() error ${err}`);\n reject(err);\n return;\n }\n log.trace(\"response\", response);\n resolve(response);\n });\n }\n}\n\nexport { Network };\n"],"names":["Logger","Configuration","CancellablePromise","Retrier"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,MAAM,GAAG,GAAGA,aAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAEpC,MAAM,OAAO,CAAA;IAIX,WAAY,CAAA,MAAqB,EAAE,SAAoB,EAAA;AACrD,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;KAC5B;IAEO,aAAa,GAAA;AACnB,QAAA,OAAO,MAAM,CAAC,MAAM,CAClBC,2BAAa,CAAC,oBAAoB,EAClC,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAClC,CAAC;KACH;IAEO,kBAAkB,GAAA;;AACxB,QAAA,QACE,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,IAAI,CAAC,MAAM,CAAC,0BAA0B,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GACtCA,2BAAa,CAAC,yBAAyB,MACvC,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,EAAA,GAAA,KAAK,EACL;KACH;IAEO,gBAAgB,CACtB,OAAO,EACP,kBAA2B,EAAA;QAE3B,OAAO,IAAIC,qCAAkB,CAAC,OAAO,OAAO,EAAE,MAAM,EAAE,QAAQ,KAAI;YAChE,MAAM,OAAO,GAAG,IAAIC,wBAAO,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC;YAElD,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACvC,YAAA,IAAI,kBAAkB,EAAE;AACtB,gBAAA,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1B,aAAA;YAED,QAAQ,CAAC,MAAK;gBACZ,OAAO,CAAC,MAAM,EAAE,CAAC;gBACjB,OAAO,CAAC,kBAAkB,EAAE,CAAC;AAC/B,aAAC,CAAC,CAAC;AAEH,YAAA,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,YAAW;gBAC/B,IAAI;AACF,oBAAA,MAAM,cAAc,GAAG,OAAO,EAAE,CAAC;oBAEjC,QAAQ,CAAC,MAAK;wBACZ,cAAc,CAAC,MAAM,EAAE,CAAC;wBACxB,OAAO,CAAC,MAAM,EAAE,CAAC;wBACjB,OAAO,CAAC,kBAAkB,EAAE,CAAC;AAC/B,qBAAC,CAAC,CAAC;AAEH,oBAAA,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC;AACpC,oBAAA,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAC3B,iBAAA;AAAC,gBAAA,OAAO,GAAG,EAAE;oBACZ,IAAI,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE;AAC3C,wBAAA,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,qBAAA;AAAM,yBAAA,IAAI,GAAG,CAAC,OAAO,KAAK,uBAAuB,EAAE;;AAElD,wBAAA,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,qBAAA;AAAM,yBAAA;;wBAEL,OAAO,CAAC,kBAAkB,EAAE,CAAC;wBAC7B,OAAO,CAAC,MAAM,EAAE,CAAC;wBACjB,MAAM,CAAC,GAAG,CAAC,CAAC;AACb,qBAAA;AACF,iBAAA;AACH,aAAC,CAAC,CAAC;YAEH,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,MAAM,KAAI;gBACjC,OAAO,CAAC,MAAM,CAAC,CAAC;AAClB,aAAC,CAAC,CAAC;AACH,YAAA,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9C,YAAA,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAE3C,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,SAAC,CAAC,CAAC;KACJ;AAEM,IAAA,GAAG,CAAC,GAAW,EAAA;QACpB,OAAO,IAAID,qCAAkB,CAAC,OAAO,OAAO,EAAE,MAAM,EAAE,QAAQ,KAAI;YAChE,MAAM,OAAO,GAAG,EAAE,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACxD,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CACnC,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,EACtC,IAAI,CAAC,kBAAkB,EAAE,CAC1B,CAAC;YACF,GAAG,CAAC,KAAK,CAAC,yBAAyB,EAAE,GAAG,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;YAEhE,QAAQ,CAAC,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YAEjC,IAAI;AACF,gBAAA,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC;AAC/B,gBAAA,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;gBAChC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACnB,aAAA;AAAC,YAAA,OAAO,GAAG,EAAE;AACZ,gBAAA,GAAG,CAAC,KAAK,CAAC,eAAe,GAAG,CAAA,CAAE,CAAC,CAAC;gBAChC,MAAM,CAAC,GAAG,CAAC,CAAC;AACb,aAAA;AACH,SAAC,CAAC,CAAC;KACJ;IAEM,IAAI,CACT,GAAW,EACX,QAA8B,EAC9B,KAAkE,EAClE,WAAoB,EACpB,QAAiB,EAAA;AAEjB,QAAA,MAAM,OAAO,GAAG;AACd,YAAA,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;SACpC,CAAC;AAEF,QAAA,IACE,CAAC,OAAO,QAAQ,KAAK,WAAW,IAAI,EAAE,KAAK,YAAY,QAAQ,CAAC;AAChE,YAAA,WAAW,EACX;AACA,YAAA,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;AACrB,gBAAA,cAAc,EAAE,WAAW;AAC5B,aAAA,CAAC,CAAC;AACJ,SAAA;AAED,QAAA,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;AAC7B,QAAA,IAAI,QAAQ,EAAE;YACZ,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AACnD,SAAA;AACD,QAAA,IAAI,QAAQ,EAAE;YACZ,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;AACnD,SAAA;QAED,OAAO,IAAIA,qCAAkB,CAAC,OAAO,OAAO,EAAE,MAAM,EAAE,QAAQ,KAAI;AAChE,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YAElE,QAAQ,CAAC,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;YAEjC,GAAG,CAAC,KAAK,CAAC,CAAA,wBAAA,EAA2B,GAAG,CAAiB,cAAA,EAAA,OAAO,CAAE,CAAA,CAAC,CAAC;AACpE,YAAA,IAAI,QAAQ,CAAC;YACb,IAAI;gBACF,QAAQ,GAAG,MAAM,OAAO,CAAC;AAC1B,aAAA;AAAC,YAAA,OAAO,GAAG,EAAE;;;AAGZ,gBAAA,IACE,MAAM,CAAC,gBAAgB,CAAC,KAAK,SAAS;oBACtC,KAAK,YAAY,QAAQ,EACzB;AACA,oBAAA,MAAM,CACJ,IAAI,SAAS,CACX,gEAAgE,CACjE,CACF,CAAC;oBACF,OAAO;AACR,iBAAA;AACD,gBAAA,GAAG,CAAC,KAAK,CAAC,gBAAgB,GAAG,CAAA,CAAE,CAAC,CAAC;gBACjC,MAAM,CAAC,GAAG,CAAC,CAAC;gBACZ,OAAO;AACR,aAAA;AACD,YAAA,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAChC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACpB,SAAC,CAAC,CAAC;KACJ;AACF;;;;"}
|
|
@@ -29,6 +29,7 @@ var global =
|
|
|
29
29
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
30
30
|
|
|
31
31
|
var transporterror = require('./transporterror.js');
|
|
32
|
+
var cancellablePromise = require('../cancellable-promise.js');
|
|
32
33
|
|
|
33
34
|
// eslint-disable-next-line
|
|
34
35
|
const XHR = global["XMLHttpRequest"] || {};
|
|
@@ -63,32 +64,46 @@ function extractBody(xhr) {
|
|
|
63
64
|
* Provides generic network interface
|
|
64
65
|
*/
|
|
65
66
|
class Transport {
|
|
66
|
-
static
|
|
67
|
-
return new
|
|
67
|
+
static request(method, url, headers, body) {
|
|
68
|
+
return new cancellablePromise.CancellablePromise((resolve, reject, onCancel) => {
|
|
68
69
|
const xhr = new XHR();
|
|
70
|
+
let isCancelled = false;
|
|
71
|
+
onCancel(() => {
|
|
72
|
+
xhr.abort();
|
|
73
|
+
isCancelled = true;
|
|
74
|
+
});
|
|
69
75
|
xhr.open(method, url, true);
|
|
70
76
|
xhr.onreadystatechange = function onreadystatechange() {
|
|
71
|
-
var _a;
|
|
72
|
-
if (xhr.readyState !== 4) {
|
|
77
|
+
var _a, _b;
|
|
78
|
+
if (xhr.readyState !== 4 || isCancelled) {
|
|
73
79
|
return;
|
|
74
80
|
}
|
|
75
|
-
const
|
|
81
|
+
const responseHeaders = parseResponseHeaders(xhr.getAllResponseHeaders());
|
|
76
82
|
const body = extractBody(xhr);
|
|
77
83
|
if (200 <= xhr.status && xhr.status < 300) {
|
|
78
|
-
resolve({ status: xhr.status, headers, body });
|
|
84
|
+
resolve({ status: xhr.status, headers: responseHeaders, body });
|
|
79
85
|
}
|
|
80
86
|
else {
|
|
81
87
|
const status = (_a = xhr.statusText) !== null && _a !== void 0 ? _a : "NONE";
|
|
82
88
|
let bodyRepresentation;
|
|
83
89
|
if (typeof body === "string") {
|
|
84
|
-
|
|
85
|
-
|
|
90
|
+
if (body && body.split("\n", 2).length === 1)
|
|
91
|
+
bodyRepresentation = body;
|
|
92
|
+
else {
|
|
93
|
+
// TODO: RTDSDK-3716: investigate why body is HTML string
|
|
94
|
+
const errorInfo = (_b = body
|
|
95
|
+
.replace(/<.*?>/g, "")
|
|
96
|
+
.split(/\r\n/g)
|
|
97
|
+
.filter((str) => str.length)[0]) === null || _b === void 0 ? void 0 : _b.split(" ");
|
|
98
|
+
bodyRepresentation =
|
|
99
|
+
(errorInfo === null || errorInfo === void 0 ? void 0 : errorInfo.length) > 2 ? errorInfo === null || errorInfo === void 0 ? void 0 : errorInfo.slice(1).join(" ") : "";
|
|
100
|
+
}
|
|
86
101
|
}
|
|
87
102
|
else {
|
|
88
103
|
bodyRepresentation = JSON.stringify(body);
|
|
89
104
|
}
|
|
90
105
|
const message = `${xhr.status}: [${status}] ${bodyRepresentation}`;
|
|
91
|
-
reject(new transporterror.TransportError(message, xhr.status, body, status,
|
|
106
|
+
reject(new transporterror.TransportError(message, xhr.status, body, status, responseHeaders));
|
|
92
107
|
}
|
|
93
108
|
};
|
|
94
109
|
for (const headerName in headers) {
|
|
@@ -104,13 +119,13 @@ class Transport {
|
|
|
104
119
|
/**
|
|
105
120
|
* Make a GET request by given URL
|
|
106
121
|
*/
|
|
107
|
-
|
|
122
|
+
get(url, headers) {
|
|
108
123
|
return Transport.request("GET", url, headers);
|
|
109
124
|
}
|
|
110
125
|
/**
|
|
111
126
|
* Make a POST request by given URL
|
|
112
127
|
*/
|
|
113
|
-
|
|
128
|
+
post(url, headers, body) {
|
|
114
129
|
return Transport.request("POST", url, headers, body);
|
|
115
130
|
}
|
|
116
131
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sources":["../../src/services/transport.ts"],"sourcesContent":["import { TransportError } from \"./transporterror\";\n\n// eslint-disable-next-line\nconst XHR = global[\"XMLHttpRequest\"] || require(\"xmlhttprequest\").XMLHttpRequest;\n\ntype Headers = { [id: string]: string };\n\nfunction parseResponseHeaders(headerString: string): Headers {\n if (!headerString) {\n return {};\n }\n\n return headerString\n .split(\"\\u000d\\u000a\")\n .map((el) => el.split(\"\\u003a\\u0020\"))\n .filter((el) => el.length === 2 && el[1].length > 0)\n .reduce((prev, curr) => {\n prev[curr[0]] = curr[1];\n return prev;\n }, {});\n}\n\nfunction extractBody(xhr) {\n const contentType = xhr.getResponseHeader(\"Content-Type\");\n if (\n !contentType ||\n contentType.indexOf(\"application/json\") !== 0 ||\n xhr.responseText.length === 0\n ) {\n return xhr.responseText;\n }\n\n try {\n return JSON.parse(xhr.responseText);\n } catch (e) {\n return xhr.responseText;\n }\n}\n\nfunction adaptHttpResponse(response: Response) {\n try {\n response.body = JSON.parse(response.body);\n } catch (e) {} // eslint-disable-line no-empty\n return response;\n}\n\ninterface Response {\n status: any;\n headers: Headers;\n body: any;\n}\n\n/**\n * Provides generic network interface\n */\nclass Transport {\n private static
|
|
1
|
+
{"version":3,"file":"transport.js","sources":["../../src/services/transport.ts"],"sourcesContent":["import { TransportError } from \"./transporterror\";\nimport { CancellablePromise } from \"../cancellable-promise\";\n\n// eslint-disable-next-line\nconst XHR = global[\"XMLHttpRequest\"] || require(\"xmlhttprequest\").XMLHttpRequest;\n\ntype Headers = { [id: string]: string };\n\nfunction parseResponseHeaders(headerString: string): Headers {\n if (!headerString) {\n return {};\n }\n\n return headerString\n .split(\"\\u000d\\u000a\")\n .map((el) => el.split(\"\\u003a\\u0020\"))\n .filter((el) => el.length === 2 && el[1].length > 0)\n .reduce((prev, curr) => {\n prev[curr[0]] = curr[1];\n return prev;\n }, {});\n}\n\nfunction extractBody(xhr) {\n const contentType = xhr.getResponseHeader(\"Content-Type\");\n if (\n !contentType ||\n contentType.indexOf(\"application/json\") !== 0 ||\n xhr.responseText.length === 0\n ) {\n return xhr.responseText;\n }\n\n try {\n return JSON.parse(xhr.responseText);\n } catch (e) {\n return xhr.responseText;\n }\n}\n\nfunction adaptHttpResponse(response: Response) {\n try {\n response.body = JSON.parse(response.body);\n } catch (e) {} // eslint-disable-line no-empty\n return response;\n}\n\ninterface Response {\n status: any;\n headers: Headers;\n body: any;\n}\n\n/**\n * Provides generic network interface\n */\nclass Transport {\n private static request(\n method: string,\n url: string,\n headers: Headers,\n body?\n ): CancellablePromise<Response> {\n return new CancellablePromise<Response>((resolve, reject, onCancel) => {\n const xhr = new XHR();\n let isCancelled = false;\n\n onCancel(() => {\n xhr.abort();\n isCancelled = true;\n });\n\n xhr.open(method, url, true);\n\n xhr.onreadystatechange = function onreadystatechange() {\n if (xhr.readyState !== 4 || isCancelled) {\n return;\n }\n\n const responseHeaders = parseResponseHeaders(\n xhr.getAllResponseHeaders()\n );\n const body = extractBody(xhr);\n\n if (200 <= xhr.status && xhr.status < 300) {\n resolve({ status: xhr.status, headers: responseHeaders, body });\n } else {\n const status = xhr.statusText ?? \"NONE\";\n let bodyRepresentation;\n if (typeof body === \"string\") {\n if (body && body.split(\"\\n\", 2).length === 1)\n bodyRepresentation = body;\n else {\n // TODO: RTDSDK-3716: investigate why body is HTML string\n const errorInfo = body\n .replace(/<.*?>/g, \"\")\n .split(/\\r\\n/g)\n .filter((str) => str.length)[0]\n ?.split(\" \");\n bodyRepresentation =\n errorInfo?.length > 2 ? errorInfo?.slice(1).join(\" \") : \"\";\n }\n } else {\n bodyRepresentation = JSON.stringify(body);\n }\n const message = `${xhr.status}: [${status}] ${bodyRepresentation}`;\n reject(\n new TransportError(\n message,\n xhr.status,\n body,\n status,\n responseHeaders\n )\n );\n }\n };\n\n for (const headerName in headers) {\n xhr.setRequestHeader(headerName, headers[headerName]);\n if (\n headerName === \"Content-Type\" &&\n headers[headerName] === \"application/json\"\n ) {\n body = JSON.stringify(body);\n }\n }\n\n xhr.send(body);\n });\n }\n\n /**\n * Make a GET request by given URL\n */\n public get(url: string, headers: Headers): CancellablePromise<Response> {\n return Transport.request(\"GET\", url, headers);\n }\n\n /**\n * Make a POST request by given URL\n */\n public post(\n url: string,\n headers: Headers,\n body?\n ): CancellablePromise<Response> {\n return Transport.request(\"POST\", url, headers, body);\n }\n}\n\nexport { Headers, Response, Transport };\n"],"names":["CancellablePromise","TransportError"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transporterror.js","sources":["../../src/services/transporterror.ts"],"sourcesContent":["class TransportError extends Error {\n public readonly code: number;\n public readonly body: any;\n public readonly status: string;\n public readonly headers: any;\n\n constructor(\n message: string,\n code: number,\n body: any,\n status: string,\n headers: any\n ) {\n super(message);\n this.code = code;\n this.body = body;\n this.status = status;\n this.headers = headers;\n }\n}\n\nexport { TransportError };\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,MAAM,cAAe,SAAQ,KAAK;IAMhC,
|
|
1
|
+
{"version":3,"file":"transporterror.js","sources":["../../src/services/transporterror.ts"],"sourcesContent":["class TransportError extends Error {\n public readonly code: number;\n public readonly body: any;\n public readonly status: string;\n public readonly headers: any;\n\n constructor(\n message: string,\n code: number,\n body: any,\n status: string,\n headers: any\n ) {\n super(message);\n this.code = code;\n this.body = body;\n this.status = status;\n this.headers = headers;\n }\n}\n\nexport { TransportError };\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,MAAM,cAAe,SAAQ,KAAK,CAAA;IAMhC,WACE,CAAA,OAAe,EACf,IAAY,EACZ,IAAS,EACT,MAAc,EACd,OAAY,EAAA;QAEZ,KAAK,CAAC,OAAO,CAAC,CAAC;AACf,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;AACjB,QAAA,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;KACxB;AACF;;;;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@twilio/mcs-client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0-rc.10",
|
|
4
4
|
"description": "Twilio Media Content Service client library",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Twilio",
|
|
@@ -21,8 +21,8 @@
|
|
|
21
21
|
"clean": "rm -rf ./coverage ./dist ./builds ./docs",
|
|
22
22
|
"lint": "npx eslint src/**/*.ts test/**/*.ts",
|
|
23
23
|
"lint:fix": "npx eslint src/**/*.ts test/**/*.ts --fix",
|
|
24
|
-
"test:unit": "env FORCE_COLOR=1 NODE_ENV=test npx jest test/unit",
|
|
25
|
-
"test:integration": "env FORCE_COLOR=1 NODE_ENV=test npx jest test/integration",
|
|
24
|
+
"test:unit": "env FORCE_COLOR=1 NODE_ENV=test npx jest test/unit --coverageDirectory='coverage/unit'",
|
|
25
|
+
"test:integration": "env FORCE_COLOR=1 NODE_ENV=test npx jest test/integration --coverageDirectory='coverage/integration'",
|
|
26
26
|
"build": "npx rollup -c",
|
|
27
27
|
"ssri": "yarn ssri:bundle && yarn ssri:min",
|
|
28
28
|
"ssri:bundle": "openssl dgst -sha256 -binary ./builds/twilio-mcs-client.js | openssl base64 -A | (printf \"sha256-\" && cat) | tee ./builds/twilio-mcs-client.sri",
|
|
@@ -33,20 +33,21 @@
|
|
|
33
33
|
"ci": "yarn clean && yarn lint && yarn build && yarn ssri"
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@babel/runtime": "^7.
|
|
37
|
-
"@twilio/declarative-type-validator": "^0.
|
|
38
|
-
"@twilio/operation-retrier": "^4.0.
|
|
36
|
+
"@babel/runtime": "^7.17.0",
|
|
37
|
+
"@twilio/declarative-type-validator": "^0.2.0-rc.4",
|
|
38
|
+
"@twilio/operation-retrier": "^4.0.8-rc.5",
|
|
39
39
|
"core-js": "^3.17.3",
|
|
40
|
-
"loglevel": "^1.
|
|
40
|
+
"loglevel": "^1.8.0",
|
|
41
41
|
"xmlhttprequest": "^1.8.0"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
|
-
"@babel/core": "^7.
|
|
45
|
-
"@babel/
|
|
46
|
-
"@babel/preset-
|
|
44
|
+
"@babel/core": "^7.17.0",
|
|
45
|
+
"@babel/plugin-transform-runtime": "^7.17.0",
|
|
46
|
+
"@babel/preset-env": "^7.16.11",
|
|
47
|
+
"@babel/preset-typescript": "^7.16.7",
|
|
47
48
|
"@rollup/plugin-commonjs": "^19.0.0",
|
|
48
49
|
"@rollup/plugin-json": "^4.1.0",
|
|
49
|
-
"@rollup/plugin-node-resolve": "^13.
|
|
50
|
+
"@rollup/plugin-node-resolve": "^13.2.1",
|
|
50
51
|
"@rollup/plugin-replace": "^3.0.0",
|
|
51
52
|
"@types/express": "^4.17.7",
|
|
52
53
|
"@types/jest": "^26.0.23",
|
|
@@ -69,12 +70,13 @@
|
|
|
69
70
|
"jsdoc-strip-async-await": "^0.1.0",
|
|
70
71
|
"ngrok": "^3.2.5",
|
|
71
72
|
"prettier": "^2.3.0",
|
|
72
|
-
"rollup": "^2.
|
|
73
|
-
"rollup-plugin-polyfill-node": "^0.
|
|
73
|
+
"rollup": "^2.70.2",
|
|
74
|
+
"rollup-plugin-polyfill-node": "^0.9.0",
|
|
74
75
|
"rollup-plugin-terser": "^7.0.2",
|
|
75
|
-
"rollup-plugin-ts": "^
|
|
76
|
+
"rollup-plugin-ts": "^2.0.7",
|
|
76
77
|
"ts-jest": "^27.0.2",
|
|
77
78
|
"ts-node": "^8.3.0",
|
|
79
|
+
"tslib": "^2.4.0",
|
|
78
80
|
"twilio": "^3.55.0",
|
|
79
81
|
"typescript": "^4.3.2"
|
|
80
82
|
},
|