@webex/internal-plugin-encryption 3.0.0-beta.4 → 3.0.0-beta.400
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/README.md +1 -3
- package/dist/config.js +0 -9
- package/dist/config.js.map +1 -1
- package/dist/constants.js +14 -0
- package/dist/constants.js.map +1 -0
- package/dist/encryption.js +25 -74
- package/dist/encryption.js.map +1 -1
- package/dist/ensure-buffer.browser.js +0 -12
- package/dist/ensure-buffer.browser.js.map +1 -1
- package/dist/ensure-buffer.js +5 -12
- package/dist/ensure-buffer.js.map +1 -1
- package/dist/index.js +7 -33
- package/dist/index.js.map +1 -1
- package/dist/kms-batcher.js +7 -30
- package/dist/kms-batcher.js.map +1 -1
- package/dist/kms-certificate-validation.js +24 -90
- package/dist/kms-certificate-validation.js.map +1 -1
- package/dist/kms-dry-error-interceptor.js +1 -23
- package/dist/kms-dry-error-interceptor.js.map +1 -1
- package/dist/kms-errors.js +21 -51
- package/dist/kms-errors.js.map +1 -1
- package/dist/kms.js +88 -218
- package/dist/kms.js.map +1 -1
- package/package.json +15 -15
- package/src/config.js +3 -3
- package/src/constants.js +3 -0
- package/src/encryption.js +74 -57
- package/src/ensure-buffer.browser.js +0 -1
- package/src/ensure-buffer.js +5 -5
- package/src/index.js +120 -96
- package/src/kms-batcher.js +53 -45
- package/src/kms-certificate-validation.js +48 -50
- package/src/kms-dry-error-interceptor.js +8 -4
- package/src/kms-errors.js +47 -16
- package/src/kms.js +219 -212
- package/test/integration/spec/encryption.js +313 -231
- package/test/integration/spec/kms.js +532 -405
- package/test/integration/spec/payload-transfom.js +69 -69
- package/test/unit/spec/encryption.js +21 -18
- package/test/unit/spec/kms-certificate-validation.js +76 -34
- package/test/unit/spec/kms-errors.js +70 -0
- package/test/unit/spec/kms.js +103 -0
package/dist/kms-errors.js
CHANGED
|
@@ -1,54 +1,35 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _Reflect$construct = require("@babel/runtime-corejs2/core-js/reflect/construct");
|
|
4
|
-
|
|
5
4
|
var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
|
|
6
|
-
|
|
7
5
|
var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
|
|
8
|
-
|
|
9
6
|
_Object$defineProperty(exports, "__esModule", {
|
|
10
7
|
value: true
|
|
11
8
|
});
|
|
12
|
-
|
|
13
|
-
exports.KmsTimeoutError = exports.KmsError = exports.DryError = void 0;
|
|
14
|
-
|
|
9
|
+
exports.handleKmsKeyRevokedEncryptionFailure = exports.KmsTimeoutError = exports.KmsError = exports.DryError = void 0;
|
|
15
10
|
var _defineProperties = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/object/define-properties"));
|
|
16
|
-
|
|
17
11
|
var _apply = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/reflect/apply"));
|
|
18
|
-
|
|
19
12
|
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/classCallCheck"));
|
|
20
|
-
|
|
21
13
|
var _createClass2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/createClass"));
|
|
22
|
-
|
|
23
14
|
var _inherits2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/inherits"));
|
|
24
|
-
|
|
25
15
|
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/possibleConstructorReturn"));
|
|
26
|
-
|
|
27
16
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/getPrototypeOf"));
|
|
28
|
-
|
|
29
17
|
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs2/helpers/defineProperty"));
|
|
30
|
-
|
|
31
18
|
var _common = require("@webex/common");
|
|
32
|
-
|
|
33
19
|
var _webexCore = require("@webex/webex-core");
|
|
34
|
-
|
|
20
|
+
var _constants = require("./constants");
|
|
35
21
|
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2.default)(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2.default)(this).constructor; result = _Reflect$construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2.default)(this, result); }; }
|
|
36
|
-
|
|
37
22
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !_Reflect$construct) return false; if (_Reflect$construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(_Reflect$construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
38
|
-
|
|
39
23
|
/**
|
|
40
24
|
* Error class for KMS errors
|
|
41
25
|
*/
|
|
42
26
|
var KmsError = /*#__PURE__*/function (_Exception) {
|
|
43
27
|
(0, _inherits2.default)(KmsError, _Exception);
|
|
44
|
-
|
|
45
28
|
var _super = _createSuper(KmsError);
|
|
46
|
-
|
|
47
29
|
function KmsError() {
|
|
48
30
|
(0, _classCallCheck2.default)(this, KmsError);
|
|
49
31
|
return _super.apply(this, arguments);
|
|
50
32
|
}
|
|
51
|
-
|
|
52
33
|
(0, _createClass2.default)(KmsError, [{
|
|
53
34
|
key: "parse",
|
|
54
35
|
value:
|
|
@@ -77,19 +58,21 @@ var KmsError = /*#__PURE__*/function (_Exception) {
|
|
|
77
58
|
}
|
|
78
59
|
});
|
|
79
60
|
var message = typeof body === 'string' ? body : body.reason;
|
|
80
|
-
|
|
81
61
|
if (!message) {
|
|
82
62
|
message = this.constructor.defaultMessage;
|
|
83
63
|
}
|
|
84
|
-
|
|
85
64
|
if (body.status) {
|
|
86
65
|
message += "\nKMS_RESPONSE_STATUS: ".concat(body.status);
|
|
87
66
|
}
|
|
88
|
-
|
|
89
67
|
if (body.requestId) {
|
|
90
68
|
message += "\nKMS_REQUEST_ID: ".concat(body.requestId);
|
|
91
69
|
}
|
|
92
|
-
|
|
70
|
+
if (body.statusCode) {
|
|
71
|
+
message += "\nKMS_STATUS_CODE: ".concat(body.statusCode);
|
|
72
|
+
}
|
|
73
|
+
if (body.errorCode) {
|
|
74
|
+
message += "\nKMS_ErrorCode: ".concat(body.errorCode);
|
|
75
|
+
}
|
|
93
76
|
return message;
|
|
94
77
|
}
|
|
95
78
|
}]);
|
|
@@ -98,21 +81,15 @@ var KmsError = /*#__PURE__*/function (_Exception) {
|
|
|
98
81
|
/**
|
|
99
82
|
* Thrown when an expected KMSResponse is not received in a timely manner
|
|
100
83
|
*/
|
|
101
|
-
|
|
102
|
-
|
|
103
84
|
exports.KmsError = KmsError;
|
|
104
85
|
(0, _defineProperty2.default)(KmsError, "defaultMessage", 'An unknown error occurred while communicating with the kms. This implies we received an error response without a body.');
|
|
105
|
-
|
|
106
86
|
var KmsTimeoutError = /*#__PURE__*/function (_KmsError) {
|
|
107
87
|
(0, _inherits2.default)(KmsTimeoutError, _KmsError);
|
|
108
|
-
|
|
109
88
|
var _super2 = _createSuper(KmsTimeoutError);
|
|
110
|
-
|
|
111
89
|
function KmsTimeoutError() {
|
|
112
90
|
(0, _classCallCheck2.default)(this, KmsTimeoutError);
|
|
113
91
|
return _super2.apply(this, arguments);
|
|
114
92
|
}
|
|
115
|
-
|
|
116
93
|
(0, _createClass2.default)(KmsTimeoutError, [{
|
|
117
94
|
key: "parse",
|
|
118
95
|
value:
|
|
@@ -123,22 +100,18 @@ var KmsTimeoutError = /*#__PURE__*/function (_KmsError) {
|
|
|
123
100
|
*/
|
|
124
101
|
function parse() {
|
|
125
102
|
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
103
|
+
_ref$request = _ref.request,
|
|
104
|
+
request = _ref$request === void 0 ? {} : _ref$request,
|
|
105
|
+
timeout = _ref.timeout;
|
|
130
106
|
var message = "The KMS did not respond within ".concat(timeout ? "".concat(timeout, " milliseconds") : 'a timely fashion');
|
|
131
|
-
|
|
132
107
|
if (request) {
|
|
133
108
|
if (request.method && request.uri) {
|
|
134
109
|
message += "\nKMS_REQUEST: ".concat(request.method, " ").concat(request.uri);
|
|
135
110
|
}
|
|
136
|
-
|
|
137
111
|
if (request.requestId) {
|
|
138
112
|
message += "\nKMS_REQUEST_ID: ".concat(request.requestId);
|
|
139
113
|
}
|
|
140
114
|
}
|
|
141
|
-
|
|
142
115
|
return message;
|
|
143
116
|
}
|
|
144
117
|
}]);
|
|
@@ -147,20 +120,14 @@ var KmsTimeoutError = /*#__PURE__*/function (_KmsError) {
|
|
|
147
120
|
/**
|
|
148
121
|
* Emitted when a REST request includes an encrypter error
|
|
149
122
|
*/
|
|
150
|
-
|
|
151
|
-
|
|
152
123
|
exports.KmsTimeoutError = KmsTimeoutError;
|
|
153
|
-
|
|
154
124
|
var DryError = /*#__PURE__*/function (_WebexHttpError) {
|
|
155
125
|
(0, _inherits2.default)(DryError, _WebexHttpError);
|
|
156
|
-
|
|
157
126
|
var _super3 = _createSuper(DryError);
|
|
158
|
-
|
|
159
127
|
function DryError() {
|
|
160
128
|
(0, _classCallCheck2.default)(this, DryError);
|
|
161
129
|
return _super3.apply(this, arguments);
|
|
162
130
|
}
|
|
163
|
-
|
|
164
131
|
(0, _createClass2.default)(DryError, [{
|
|
165
132
|
key: "parse",
|
|
166
133
|
value:
|
|
@@ -172,11 +139,9 @@ var DryError = /*#__PURE__*/function (_WebexHttpError) {
|
|
|
172
139
|
(0, _apply.default)(_webexCore.WebexHttpError.prototype.parse, this, [reason._res]);
|
|
173
140
|
var body = reason._res.body.message;
|
|
174
141
|
var message = body.reason || body;
|
|
175
|
-
|
|
176
142
|
if (!message) {
|
|
177
143
|
message = this.constructor.defaultMessage;
|
|
178
144
|
}
|
|
179
|
-
|
|
180
145
|
if (this.options.url) {
|
|
181
146
|
message += "\n".concat(this.options.method, " ").concat(this.options.url);
|
|
182
147
|
} else if (this.options.uri) {
|
|
@@ -184,17 +149,13 @@ var DryError = /*#__PURE__*/function (_WebexHttpError) {
|
|
|
184
149
|
} else {
|
|
185
150
|
message += "\n".concat(this.options.method, " ").concat(this.options.service.toUpperCase(), "/").concat(this.options.resource);
|
|
186
151
|
}
|
|
187
|
-
|
|
188
152
|
message += "\nWEBEX_TRACKING_ID: ".concat(this.options.headers.trackingid);
|
|
189
|
-
|
|
190
153
|
if (body.status) {
|
|
191
154
|
message += "\nKMS_RESPONSE_STATUS: ".concat(body.status);
|
|
192
155
|
}
|
|
193
|
-
|
|
194
156
|
if (body.requestId) {
|
|
195
157
|
message += "\nKMS_REQUEST_ID: ".concat(body.requestId);
|
|
196
158
|
}
|
|
197
|
-
|
|
198
159
|
(0, _defineProperties.default)(this, {
|
|
199
160
|
reason: {
|
|
200
161
|
enumerable: false,
|
|
@@ -214,7 +175,16 @@ var DryError = /*#__PURE__*/function (_WebexHttpError) {
|
|
|
214
175
|
}]);
|
|
215
176
|
return DryError;
|
|
216
177
|
}(_webexCore.WebexHttpError);
|
|
217
|
-
|
|
178
|
+
/**
|
|
179
|
+
* Function triggers an event when specific encryption failures are received.
|
|
180
|
+
*/
|
|
181
|
+
// eslint-disable-next-line consistent-return
|
|
218
182
|
exports.DryError = DryError;
|
|
219
183
|
(0, _defineProperty2.default)(DryError, "defaultMessage", 'An unknown error was received from a service that proxies to the KMS');
|
|
184
|
+
var handleKmsKeyRevokedEncryptionFailure = function handleKmsKeyRevokedEncryptionFailure(item, webex) {
|
|
185
|
+
if (item.status === _constants.KMS_KEY_REVOKE_ERROR_STATUS && _constants.KMS_KEY_REVOKE_ERROR_CODES.includes(item.body.errorCode)) {
|
|
186
|
+
webex.internal.encryption.trigger(_constants.KMS_KEY_REVOKE_FAILURE);
|
|
187
|
+
}
|
|
188
|
+
};
|
|
189
|
+
exports.handleKmsKeyRevokedEncryptionFailure = handleKmsKeyRevokedEncryptionFailure;
|
|
220
190
|
//# sourceMappingURL=kms-errors.js.map
|
package/dist/kms-errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["KmsError","body","enumerable","value","reason","requestId","status","message","constructor","defaultMessage","Exception","KmsTimeoutError","request","timeout","method","uri","DryError","WebexHttpError","prototype","parse","_res","options","url","service","toUpperCase","resource","headers","trackingid"],"sources":["kms-errors.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Exception} from '@webex/common';\nimport {WebexHttpError} from '@webex/webex-core';\n\n/**\n * Error class for KMS errors\n */\nexport class KmsError extends Exception {\n static defaultMessage
|
|
1
|
+
{"version":3,"names":["KmsError","body","enumerable","value","reason","requestId","status","message","constructor","defaultMessage","statusCode","errorCode","Exception","KmsTimeoutError","request","timeout","method","uri","DryError","WebexHttpError","prototype","parse","_res","options","url","service","toUpperCase","resource","headers","trackingid","handleKmsKeyRevokedEncryptionFailure","item","webex","KMS_KEY_REVOKE_ERROR_STATUS","KMS_KEY_REVOKE_ERROR_CODES","includes","internal","encryption","trigger","KMS_KEY_REVOKE_FAILURE"],"sources":["kms-errors.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {Exception} from '@webex/common';\nimport {WebexHttpError} from '@webex/webex-core';\n\nimport {\n KMS_KEY_REVOKE_ERROR_CODES,\n KMS_KEY_REVOKE_FAILURE,\n KMS_KEY_REVOKE_ERROR_STATUS,\n} from './constants';\n\n/**\n * Error class for KMS errors\n */\nexport class KmsError extends Exception {\n static defaultMessage =\n 'An unknown error occurred while communicating with the kms. This implies we received an error response without a body.';\n\n /**\n * @param {HttpResponse} body\n * @returns {string}\n */\n parse(body) {\n body = body.body || body;\n\n Object.defineProperties(this, {\n body: {\n enumerable: false,\n value: body,\n },\n reason: {\n enumerable: false,\n value: body.reason,\n },\n requestId: {\n enumerable: false,\n value: body.requestId,\n },\n status: {\n enumerable: false,\n value: body.status,\n },\n });\n\n let message = typeof body === 'string' ? body : body.reason;\n\n if (!message) {\n message = this.constructor.defaultMessage;\n }\n if (body.status) {\n message += `\\nKMS_RESPONSE_STATUS: ${body.status}`;\n }\n if (body.requestId) {\n message += `\\nKMS_REQUEST_ID: ${body.requestId}`;\n }\n\n if (body.statusCode) {\n message += `\\nKMS_STATUS_CODE: ${body.statusCode}`;\n }\n\n if (body.errorCode) {\n message += `\\nKMS_ErrorCode: ${body.errorCode}`;\n }\n\n return message;\n }\n}\n\n/**\n * Thrown when an expected KMSResponse is not received in a timely manner\n */\nexport class KmsTimeoutError extends KmsError {\n /**\n * @param {KmsRequest} options.request\n * @param {KmsRequest} options.timeout\n * @returns {string}\n */\n parse({request = {}, timeout} = {}) {\n let message = `The KMS did not respond within ${\n timeout ? `${timeout} milliseconds` : 'a timely fashion'\n }`;\n\n if (request) {\n if (request.method && request.uri) {\n message += `\\nKMS_REQUEST: ${request.method} ${request.uri}`;\n }\n\n if (request.requestId) {\n message += `\\nKMS_REQUEST_ID: ${request.requestId}`;\n }\n }\n\n return message;\n }\n}\n\n/**\n * Emitted when a REST request includes an encrypter error\n */\nexport class DryError extends WebexHttpError {\n static defaultMessage = 'An unknown error was received from a service that proxies to the KMS';\n\n /**\n * @param {WebexHttpError} reason\n * @returns {string}\n */\n parse(reason) {\n Reflect.apply(WebexHttpError.prototype.parse, this, [reason._res]);\n const body = reason._res.body.message;\n\n let message = body.reason || body;\n\n if (!message) {\n message = this.constructor.defaultMessage;\n }\n if (this.options.url) {\n message += `\\n${this.options.method} ${this.options.url}`;\n } else if (this.options.uri) {\n message += `\\n${this.options.method} ${this.options.uri}`;\n } else {\n message += `\\n${this.options.method} ${this.options.service.toUpperCase()}/${\n this.options.resource\n }`;\n }\n message += `\\nWEBEX_TRACKING_ID: ${this.options.headers.trackingid}`;\n\n if (body.status) {\n message += `\\nKMS_RESPONSE_STATUS: ${body.status}`;\n }\n if (body.requestId) {\n message += `\\nKMS_REQUEST_ID: ${body.requestId}`;\n }\n\n Object.defineProperties(this, {\n reason: {\n enumerable: false,\n value: body.reason,\n },\n requestId: {\n enumerable: false,\n value: body.requestId,\n },\n status: {\n enumerable: false,\n value: body.status,\n },\n });\n\n return message;\n }\n}\n\n/**\n * Function triggers an event when specific encryption failures are received.\n */\n\n// eslint-disable-next-line consistent-return\nexport const handleKmsKeyRevokedEncryptionFailure = (item, webex) => {\n if (\n item.status === KMS_KEY_REVOKE_ERROR_STATUS &&\n KMS_KEY_REVOKE_ERROR_CODES.includes(item.body.errorCode)\n ) {\n webex.internal.encryption.trigger(KMS_KEY_REVOKE_FAILURE);\n }\n};\n"],"mappings":"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"}
|