@twilio/mcs-client 0.5.3 → 0.6.0-rc.2
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 +17 -0
- package/builds/browser.js +517 -362
- package/builds/browser.js.map +1 -1
- package/builds/lib.d.ts +54 -26
- package/builds/lib.js +517 -362
- package/builds/lib.js.map +1 -1
- package/builds/twilio-mcs-client.js +10206 -9443
- package/builds/twilio-mcs-client.min.js +24 -38
- package/dist/cancellable-promise.js +88 -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/packages/mcs-client/package.json.js +1 -1
- package/dist/services/network.js +48 -31
- package/dist/services/network.js.map +1 -1
- package/dist/services/transport.js +11 -5
- package/dist/services/transport.js.map +1 -1
- package/dist/services/transporterror.js.map +1 -1
- package/package.json +13 -11
package/dist/services/network.js
CHANGED
|
@@ -31,6 +31,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
31
31
|
var operationRetrier = require('@twilio/operation-retrier');
|
|
32
32
|
var logger = require('../logger.js');
|
|
33
33
|
var configuration = require('../configuration.js');
|
|
34
|
+
var cancellablePromise = require('../cancellable-promise.js');
|
|
34
35
|
|
|
35
36
|
const log = logger.Logger.scope("Network");
|
|
36
37
|
class Network {
|
|
@@ -45,13 +46,18 @@ class Network {
|
|
|
45
46
|
var _a, _b;
|
|
46
47
|
return ((_b = (_a = this.config.retryWhenThrottledOverride) !== null && _a !== void 0 ? _a : configuration.Configuration.retryWhenThrottledDefault) !== null && _b !== void 0 ? _b : false);
|
|
47
48
|
}
|
|
48
|
-
|
|
49
|
-
return new
|
|
49
|
+
executeWithRetry(request, retryWhenThrottled) {
|
|
50
|
+
return new cancellablePromise.CancellablePromise(async (resolve, reject, onCancel) => {
|
|
51
|
+
const retrier = new operationRetrier.Retrier(this.backoffConfig());
|
|
52
|
+
onCancel(() => {
|
|
53
|
+
request.cancel();
|
|
54
|
+
retrier.removeAllListeners();
|
|
55
|
+
retrier.cancel();
|
|
56
|
+
});
|
|
50
57
|
const codesToRetryOn = [502, 503, 504];
|
|
51
58
|
if (retryWhenThrottled) {
|
|
52
59
|
codesToRetryOn.push(429);
|
|
53
60
|
}
|
|
54
|
-
const retrier = new operationRetrier.Retrier(this.backoffConfig());
|
|
55
61
|
retrier.on("attempt", async () => {
|
|
56
62
|
try {
|
|
57
63
|
const result = await request();
|
|
@@ -81,20 +87,24 @@ class Network {
|
|
|
81
87
|
retrier.start();
|
|
82
88
|
});
|
|
83
89
|
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
90
|
+
get(url) {
|
|
91
|
+
return new cancellablePromise.CancellablePromise(async (resolve, reject, onCancel) => {
|
|
92
|
+
const headers = { "X-Twilio-Token": this.config.token };
|
|
93
|
+
const request = this.executeWithRetry(() => this.transport.get(url, headers), this.retryWhenThrottled());
|
|
94
|
+
log.trace("sending GET request to ", url, " headers ", headers);
|
|
95
|
+
onCancel(() => request.cancel());
|
|
96
|
+
try {
|
|
97
|
+
const response = await request;
|
|
98
|
+
log.trace("response", response);
|
|
99
|
+
resolve(response);
|
|
100
|
+
}
|
|
101
|
+
catch (err) {
|
|
102
|
+
log.debug(`get() error ${err}`);
|
|
103
|
+
reject(err);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
96
106
|
}
|
|
97
|
-
|
|
107
|
+
post(url, category, media, contentType, filename) {
|
|
98
108
|
const headers = {
|
|
99
109
|
"X-Twilio-Token": this.config.token,
|
|
100
110
|
};
|
|
@@ -111,22 +121,29 @@ class Network {
|
|
|
111
121
|
if (filename) {
|
|
112
122
|
fullUrl.searchParams.append("Filename", filename);
|
|
113
123
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
// not being executed in the browser.
|
|
122
|
-
if (global["XMLHttpRequest"] === undefined && media instanceof FormData) {
|
|
123
|
-
throw new TypeError("Posting FormData supported only with browser engine's FormData");
|
|
124
|
+
return new cancellablePromise.CancellablePromise(async (resolve, reject, onCancel) => {
|
|
125
|
+
const request = this.transport.post(fullUrl.href, headers, media);
|
|
126
|
+
onCancel(() => request.cancel());
|
|
127
|
+
log.trace(`sending POST request to ${url} with headers ${headers}`);
|
|
128
|
+
let response;
|
|
129
|
+
try {
|
|
130
|
+
response = await request;
|
|
124
131
|
}
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
132
|
+
catch (err) {
|
|
133
|
+
// If global["XMLHttpRequest"] is undefined, it means that the code is
|
|
134
|
+
// not being executed in the browser.
|
|
135
|
+
if (global["XMLHttpRequest"] === undefined &&
|
|
136
|
+
media instanceof FormData) {
|
|
137
|
+
reject(new TypeError("Posting FormData supported only with browser engine's FormData"));
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
log.debug(`post() error ${err}`);
|
|
141
|
+
reject(err);
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
log.trace("response", response);
|
|
145
|
+
resolve(response);
|
|
146
|
+
});
|
|
130
147
|
}
|
|
131
148
|
}
|
|
132
149
|
|
|
@@ -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 onCancel(() => {\n request.cancel();\n retrier.removeAllListeners();\n retrier.cancel();\n });\n\n const codesToRetryOn = [502, 503, 504];\n if (retryWhenThrottled) {\n codesToRetryOn.push(429);\n }\n\n retrier.on(\"attempt\", async () => {\n try {\n const result = await request();\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":"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"}
|
|
@@ -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,13 +64,18 @@ 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
77
|
var _a;
|
|
72
|
-
if (xhr.readyState !== 4) {
|
|
78
|
+
if (xhr.readyState !== 4 || isCancelled) {
|
|
73
79
|
return;
|
|
74
80
|
}
|
|
75
81
|
const headers = parseResponseHeaders(xhr.getAllResponseHeaders());
|
|
@@ -104,13 +110,13 @@ class Transport {
|
|
|
104
110
|
/**
|
|
105
111
|
* Make a GET request by given URL
|
|
106
112
|
*/
|
|
107
|
-
|
|
113
|
+
get(url, headers) {
|
|
108
114
|
return Transport.request("GET", url, headers);
|
|
109
115
|
}
|
|
110
116
|
/**
|
|
111
117
|
* Make a POST request by given URL
|
|
112
118
|
*/
|
|
113
|
-
|
|
119
|
+
post(url, headers, body) {
|
|
114
120
|
return Transport.request("POST", url, headers, body);
|
|
115
121
|
}
|
|
116
122
|
}
|
|
@@ -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 headers = parseResponseHeaders(xhr.getAllResponseHeaders());\n const body = extractBody(xhr);\n\n if (200 <= xhr.status && xhr.status < 300) {\n resolve({ status: xhr.status, headers, body });\n } else {\n const status = xhr.statusText ?? \"NONE\";\n let bodyRepresentation;\n if (typeof body === \"string\") {\n bodyRepresentation =\n body && body.split(\"\\n\", 2).length === 1 ? body : \"\";\n } else {\n bodyRepresentation = JSON.stringify(body);\n }\n const message = `${xhr.status}: [${status}] ${bodyRepresentation}`;\n reject(\n new TransportError(message, xhr.status, body, status, headers)\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.2",
|
|
4
4
|
"description": "Twilio Media Content Service client library",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Twilio",
|
|
@@ -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.0",
|
|
38
|
+
"@twilio/operation-retrier": "^4.0.8-rc.0",
|
|
39
39
|
"core-js": "^3.17.3",
|
|
40
40
|
"loglevel": "^1.7.1",
|
|
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
|
},
|