@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.
Files changed (42) hide show
  1. package/README.md +1 -3
  2. package/dist/config.js +0 -9
  3. package/dist/config.js.map +1 -1
  4. package/dist/constants.js +14 -0
  5. package/dist/constants.js.map +1 -0
  6. package/dist/encryption.js +25 -74
  7. package/dist/encryption.js.map +1 -1
  8. package/dist/ensure-buffer.browser.js +0 -12
  9. package/dist/ensure-buffer.browser.js.map +1 -1
  10. package/dist/ensure-buffer.js +5 -12
  11. package/dist/ensure-buffer.js.map +1 -1
  12. package/dist/index.js +7 -33
  13. package/dist/index.js.map +1 -1
  14. package/dist/kms-batcher.js +7 -30
  15. package/dist/kms-batcher.js.map +1 -1
  16. package/dist/kms-certificate-validation.js +24 -90
  17. package/dist/kms-certificate-validation.js.map +1 -1
  18. package/dist/kms-dry-error-interceptor.js +1 -23
  19. package/dist/kms-dry-error-interceptor.js.map +1 -1
  20. package/dist/kms-errors.js +21 -51
  21. package/dist/kms-errors.js.map +1 -1
  22. package/dist/kms.js +88 -218
  23. package/dist/kms.js.map +1 -1
  24. package/package.json +15 -15
  25. package/src/config.js +3 -3
  26. package/src/constants.js +3 -0
  27. package/src/encryption.js +74 -57
  28. package/src/ensure-buffer.browser.js +0 -1
  29. package/src/ensure-buffer.js +5 -5
  30. package/src/index.js +120 -96
  31. package/src/kms-batcher.js +53 -45
  32. package/src/kms-certificate-validation.js +48 -50
  33. package/src/kms-dry-error-interceptor.js +8 -4
  34. package/src/kms-errors.js +47 -16
  35. package/src/kms.js +219 -212
  36. package/test/integration/spec/encryption.js +313 -231
  37. package/test/integration/spec/kms.js +532 -405
  38. package/test/integration/spec/payload-transfom.js +69 -69
  39. package/test/unit/spec/encryption.js +21 -18
  40. package/test/unit/spec/kms-certificate-validation.js +76 -34
  41. package/test/unit/spec/kms-errors.js +70 -0
  42. package/test/unit/spec/kms.js +103 -0
package/dist/index.js CHANGED
@@ -1,81 +1,62 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
-
7
5
  _Object$defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
-
11
8
  _Object$defineProperty(exports, "DryError", {
12
9
  enumerable: true,
13
10
  get: function get() {
14
11
  return _kmsErrors.DryError;
15
12
  }
16
13
  });
17
-
18
14
  _Object$defineProperty(exports, "KMS", {
19
15
  enumerable: true,
20
16
  get: function get() {
21
17
  return _kms.default;
22
18
  }
23
19
  });
24
-
25
20
  _Object$defineProperty(exports, "KmsError", {
26
21
  enumerable: true,
27
22
  get: function get() {
28
23
  return _kmsErrors.KmsError;
29
24
  }
30
25
  });
31
-
32
26
  _Object$defineProperty(exports, "default", {
33
27
  enumerable: true,
34
28
  get: function get() {
35
29
  return _encryption.default;
36
30
  }
37
31
  });
38
-
39
32
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
40
-
41
33
  var _isString2 = _interopRequireDefault(require("lodash/isString"));
42
-
43
34
  var _isObject2 = _interopRequireDefault(require("lodash/isObject"));
44
-
45
35
  var _has2 = _interopRequireDefault(require("lodash/has"));
46
-
36
+ require("@webex/internal-plugin-device");
37
+ require("@webex/internal-plugin-mercury");
47
38
  var _webexCore = require("@webex/webex-core");
48
-
49
39
  var _encryption = _interopRequireDefault(require("./encryption"));
50
-
51
40
  var _config = _interopRequireDefault(require("./config"));
52
-
53
41
  var _kmsErrors = require("./kms-errors");
54
-
55
- require("@webex/internal-plugin-device");
56
-
57
- require("@webex/internal-plugin-mercury");
58
-
59
42
  var _kmsDryErrorInterceptor = _interopRequireDefault(require("./kms-dry-error-interceptor"));
60
-
61
43
  var _kms = _interopRequireDefault(require("./kms"));
62
-
63
44
  /*!
64
45
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
65
46
  */
47
+
66
48
  // Note: There's a bug where if bind gets replayed because of a timeout in which
67
49
  // the original request eventually completed, there'll be an error indicating
68
50
  // the key can't be bound (because it already has been). This could be mitigated
69
51
  // by using Promise.race to resolve replays (as more requests get enqueue for a
70
52
  // specific action, accept whichever one completes first).
71
- var interceptors;
72
53
 
54
+ var interceptors;
73
55
  if (process.env.NODE_ENV === 'test') {
74
56
  interceptors = {
75
57
  KmsDryErrorInterceptor: _kmsDryErrorInterceptor.default.create
76
58
  };
77
59
  }
78
-
79
60
  (0, _webexCore.registerInternalPlugin)('encryption', _encryption.default, {
80
61
  payloadTransformer: {
81
62
  predicates: [{
@@ -87,27 +68,23 @@ if (process.env.NODE_ENV === 'test') {
87
68
  if (!(0, _has2.default)(options, 'body.kmsMessage')) {
88
69
  return _promise.default.resolve(false);
89
70
  }
90
-
91
71
  if (!(0, _isObject2.default)(options.body.kmsMessage)) {
92
72
  return _promise.default.resolve(false);
93
- } // If this is a template for a kms message, assume another transform
73
+ }
74
+
75
+ // If this is a template for a kms message, assume another transform
94
76
  // will fill it in later. This is a bit of a leaky abstraction, but the
95
77
  // alternative is building a complex rules engine for controlling
96
78
  // ordering of transforms
97
-
98
-
99
79
  if (options.body.kmsMessage.keyUris && options.body.kmsMessage.keyUris.length === 0) {
100
80
  return _promise.default.resolve(false);
101
81
  }
102
-
103
82
  if (options.body.kmsMessage.resourceUri && (options.body.kmsMessage.resourceUri.includes('<KRO>') || options.body.kmsMessage.resourceUri.includes('<KEYURL>'))) {
104
83
  return _promise.default.resolve(false);
105
84
  }
106
-
107
85
  if (options.body.kmsMessage.uri && (options.body.kmsMessage.uri.includes('<KRO>') || options.body.kmsMessage.uri.includes('<KEYURL>'))) {
108
86
  return _promise.default.resolve(false);
109
87
  }
110
-
111
88
  return _promise.default.resolve(true);
112
89
  },
113
90
  extract: function extract(options) {
@@ -138,15 +115,12 @@ if (process.env.NODE_ENV === 'test') {
138
115
  if (!object) {
139
116
  return _promise.default.resolve();
140
117
  }
141
-
142
118
  if (!object.kmsMessage) {
143
119
  return _promise.default.resolve();
144
120
  }
145
-
146
121
  if ((0, _isString2.default)(object.kmsMessage)) {
147
122
  return _promise.default.resolve();
148
123
  }
149
-
150
124
  return ctx.webex.internal.encryption.kms.prepareRequest(object.kmsMessage).then(function (req) {
151
125
  object.kmsMessage = req.wrapped;
152
126
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"names":["interceptors","process","env","NODE_ENV","KmsDryErrorInterceptor","create","registerInternalPlugin","Encryption","payloadTransformer","predicates","name","direction","test","ctx","options","resolve","body","kmsMessage","keyUris","length","resourceUri","includes","uri","extract","response","reason","Boolean","errorCode","transforms","fn","object","webex","internal","encryption","kms","prepareRequest","then","req","wrapped","decryptKmsMessage","promises","errors","map","error","description","desc","push","message","all","reject","DryError","config"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n// Note: There's a bug where if bind gets replayed because of a timeout in which\n// the original request eventually completed, there'll be an error indicating\n// the key can't be bound (because it already has been). This could be mitigated\n// by using Promise.race to resolve replays (as more requests get enqueue for a\n// specific action, accept whichever one completes first).\n\nimport {registerInternalPlugin} from '@webex/webex-core';\nimport {has, isObject, isString} from 'lodash';\n\nimport Encryption from './encryption';\nimport config from './config';\nimport {DryError} from './kms-errors';\nimport '@webex/internal-plugin-device';\nimport '@webex/internal-plugin-mercury';\nimport KmsDryErrorInterceptor from './kms-dry-error-interceptor';\n\nlet interceptors;\n\nif (process.env.NODE_ENV === 'test') {\n interceptors = {\n KmsDryErrorInterceptor: KmsDryErrorInterceptor.create\n };\n}\n\nregisterInternalPlugin('encryption', Encryption, {\n payloadTransformer: {\n predicates: [{\n name: 'encryptKmsMessage',\n direction: 'outbound',\n // I don't see any practical way to reduce complexity here.\n // eslint-disable-next-line complexity\n test(ctx, options) {\n if (!has(options, 'body.kmsMessage')) {\n return Promise.resolve(false);\n }\n\n if (!isObject(options.body.kmsMessage)) {\n return Promise.resolve(false);\n }\n\n // If this is a template for a kms message, assume another transform\n // will fill it in later. This is a bit of a leaky abstraction, but the\n // alternative is building a complex rules engine for controlling\n // ordering of transforms\n if (options.body.kmsMessage.keyUris && options.body.kmsMessage.keyUris.length === 0) {\n return Promise.resolve(false);\n }\n if (options.body.kmsMessage.resourceUri && (options.body.kmsMessage.resourceUri.includes('<KRO>') || options.body.kmsMessage.resourceUri.includes('<KEYURL>'))) {\n return Promise.resolve(false);\n }\n if (options.body.kmsMessage.uri && (options.body.kmsMessage.uri.includes('<KRO>') || options.body.kmsMessage.uri.includes('<KEYURL>'))) {\n return Promise.resolve(false);\n }\n\n return Promise.resolve(true);\n },\n extract(options) {\n return Promise.resolve(options.body);\n }\n }, {\n name: 'decryptKmsMessage',\n direction: 'inbound',\n test(ctx, response) {\n return Promise.resolve(has(response, 'body.kmsMessage') && isString(response.body.kmsMessage));\n },\n extract(response) {\n return Promise.resolve(response.body);\n }\n }, {\n name: 'decryptErrorResponse',\n direction: 'inbound',\n test(ctx, reason) {\n return Promise.resolve(Boolean(reason.body && reason.body.errorCode === 1900000));\n },\n extract(reason) {\n return Promise.resolve(reason);\n }\n }],\n transforms: [{\n name: 'encryptKmsMessage',\n fn(ctx, object) {\n if (!object) {\n return Promise.resolve();\n }\n\n if (!object.kmsMessage) {\n return Promise.resolve();\n }\n\n if (isString(object.kmsMessage)) {\n return Promise.resolve();\n }\n\n return ctx.webex.internal.encryption.kms.prepareRequest(object.kmsMessage)\n .then((req) => {\n object.kmsMessage = req.wrapped;\n });\n }\n }, {\n name: 'decryptKmsMessage',\n fn(ctx, object) {\n return ctx.webex.internal.encryption.kms.decryptKmsMessage(object.kmsMessage)\n .then((kmsMessage) => {\n object.kmsMessage = kmsMessage;\n });\n }\n }, {\n name: 'decryptErrorResponse',\n fn(ctx, reason) {\n const promises = reason.body.errors.map((error) => ctx.webex.internal.encryption.kms.decryptKmsMessage(error.description)\n .then((desc) => {\n error.description = desc;\n }));\n\n promises.push(ctx.webex.internal.encryption.kms.decryptKmsMessage(reason.body.message)\n .then((kmsMessage) => {\n reason.body.message = kmsMessage;\n }));\n\n return Promise.all(promises)\n .then(() => Promise.reject(new DryError(reason)));\n }\n }]\n },\n interceptors,\n config\n});\n\nexport {default} from './encryption';\nexport {default as KMS} from './kms';\nexport {KmsError, DryError} from './kms-errors';\n"],"mappings":"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"}
1
+ {"version":3,"names":["interceptors","process","env","NODE_ENV","KmsDryErrorInterceptor","create","registerInternalPlugin","Encryption","payloadTransformer","predicates","name","direction","test","ctx","options","resolve","body","kmsMessage","keyUris","length","resourceUri","includes","uri","extract","response","reason","Boolean","errorCode","transforms","fn","object","webex","internal","encryption","kms","prepareRequest","then","req","wrapped","decryptKmsMessage","promises","errors","map","error","description","desc","push","message","all","reject","DryError","config"],"sources":["index.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\n// Note: There's a bug where if bind gets replayed because of a timeout in which\n// the original request eventually completed, there'll be an error indicating\n// the key can't be bound (because it already has been). This could be mitigated\n// by using Promise.race to resolve replays (as more requests get enqueue for a\n// specific action, accept whichever one completes first).\n\nimport '@webex/internal-plugin-device';\n\nimport '@webex/internal-plugin-mercury';\n\nimport {registerInternalPlugin} from '@webex/webex-core';\nimport {has, isObject, isString} from 'lodash';\n\nimport Encryption from './encryption';\nimport config from './config';\nimport {DryError} from './kms-errors';\n\nimport KmsDryErrorInterceptor from './kms-dry-error-interceptor';\n\nlet interceptors;\n\nif (process.env.NODE_ENV === 'test') {\n interceptors = {\n KmsDryErrorInterceptor: KmsDryErrorInterceptor.create,\n };\n}\n\nregisterInternalPlugin('encryption', Encryption, {\n payloadTransformer: {\n predicates: [\n {\n name: 'encryptKmsMessage',\n direction: 'outbound',\n // I don't see any practical way to reduce complexity here.\n // eslint-disable-next-line complexity\n test(ctx, options) {\n if (!has(options, 'body.kmsMessage')) {\n return Promise.resolve(false);\n }\n\n if (!isObject(options.body.kmsMessage)) {\n return Promise.resolve(false);\n }\n\n // If this is a template for a kms message, assume another transform\n // will fill it in later. This is a bit of a leaky abstraction, but the\n // alternative is building a complex rules engine for controlling\n // ordering of transforms\n if (options.body.kmsMessage.keyUris && options.body.kmsMessage.keyUris.length === 0) {\n return Promise.resolve(false);\n }\n if (\n options.body.kmsMessage.resourceUri &&\n (options.body.kmsMessage.resourceUri.includes('<KRO>') ||\n options.body.kmsMessage.resourceUri.includes('<KEYURL>'))\n ) {\n return Promise.resolve(false);\n }\n if (\n options.body.kmsMessage.uri &&\n (options.body.kmsMessage.uri.includes('<KRO>') ||\n options.body.kmsMessage.uri.includes('<KEYURL>'))\n ) {\n return Promise.resolve(false);\n }\n\n return Promise.resolve(true);\n },\n extract(options) {\n return Promise.resolve(options.body);\n },\n },\n {\n name: 'decryptKmsMessage',\n direction: 'inbound',\n test(ctx, response) {\n return Promise.resolve(\n has(response, 'body.kmsMessage') && isString(response.body.kmsMessage)\n );\n },\n extract(response) {\n return Promise.resolve(response.body);\n },\n },\n {\n name: 'decryptErrorResponse',\n direction: 'inbound',\n test(ctx, reason) {\n return Promise.resolve(Boolean(reason.body && reason.body.errorCode === 1900000));\n },\n extract(reason) {\n return Promise.resolve(reason);\n },\n },\n ],\n transforms: [\n {\n name: 'encryptKmsMessage',\n fn(ctx, object) {\n if (!object) {\n return Promise.resolve();\n }\n\n if (!object.kmsMessage) {\n return Promise.resolve();\n }\n\n if (isString(object.kmsMessage)) {\n return Promise.resolve();\n }\n\n return ctx.webex.internal.encryption.kms.prepareRequest(object.kmsMessage).then((req) => {\n object.kmsMessage = req.wrapped;\n });\n },\n },\n {\n name: 'decryptKmsMessage',\n fn(ctx, object) {\n return ctx.webex.internal.encryption.kms\n .decryptKmsMessage(object.kmsMessage)\n .then((kmsMessage) => {\n object.kmsMessage = kmsMessage;\n });\n },\n },\n {\n name: 'decryptErrorResponse',\n fn(ctx, reason) {\n const promises = reason.body.errors.map((error) =>\n ctx.webex.internal.encryption.kms.decryptKmsMessage(error.description).then((desc) => {\n error.description = desc;\n })\n );\n\n promises.push(\n ctx.webex.internal.encryption.kms\n .decryptKmsMessage(reason.body.message)\n .then((kmsMessage) => {\n reason.body.message = kmsMessage;\n })\n );\n\n return Promise.all(promises).then(() => Promise.reject(new DryError(reason)));\n },\n },\n ],\n },\n interceptors,\n config,\n});\n\nexport {default} from './encryption';\nexport {default as KMS} from './kms';\nexport {KmsError, DryError} from './kms-errors';\n"],"mappings":"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"}
@@ -1,38 +1,28 @@
1
1
  "use strict";
2
2
 
3
3
  var _Object$defineProperty = require("@babel/runtime-corejs2/core-js/object/define-property");
4
-
5
4
  var _interopRequireDefault = require("@babel/runtime-corejs2/helpers/interopRequireDefault");
6
-
7
5
  _Object$defineProperty(exports, "__esModule", {
8
6
  value: true
9
7
  });
10
-
11
8
  exports.default = exports.TIMEOUT_SYMBOL = void 0;
12
-
13
9
  var _symbol = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/symbol"));
14
-
15
10
  var _promise = _interopRequireDefault(require("@babel/runtime-corejs2/core-js/promise"));
16
-
17
11
  var _commonTimers = require("@webex/common-timers");
18
-
19
12
  var _webexCore = require("@webex/webex-core");
20
-
21
13
  var _kmsErrors = require("./kms-errors");
22
-
23
14
  /*!
24
15
  * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.
25
16
  */
17
+
26
18
  var TIMEOUT_SYMBOL = (0, _symbol.default)('TIMEOUT_SYMBOL');
19
+
27
20
  /**
28
21
  * @class
29
22
  */
30
-
31
23
  exports.TIMEOUT_SYMBOL = TIMEOUT_SYMBOL;
32
-
33
24
  var KmsBatcher = _webexCore.Batcher.extend({
34
25
  namespace: 'Encryption',
35
-
36
26
  /**
37
27
  * Accepts a kmsMessage event and passes its contents to acceptItem
38
28
  * @param {Object} event
@@ -40,7 +30,6 @@ var KmsBatcher = _webexCore.Batcher.extend({
40
30
  */
41
31
  processKmsMessageEvent: function processKmsMessageEvent(event) {
42
32
  var _this = this;
43
-
44
33
  this.logger.info('kms-batcher: received kms message');
45
34
  return _promise.default.all(event.encryption.kmsMessages.map(function (kmsMessage) {
46
35
  return new _promise.default(function (resolve) {
@@ -48,12 +37,10 @@ var KmsBatcher = _webexCore.Batcher.extend({
48
37
  if (process.env.NODE_ENV !== 'production') {
49
38
  _this.logger.info('kms-batcher:', kmsMessage.body);
50
39
  }
51
-
52
40
  resolve(_this.acceptItem(kmsMessage));
53
41
  });
54
42
  }));
55
43
  },
56
-
57
44
  /**
58
45
  * Attaches a timeout to the given KMS message
59
46
  * @param {Object} item
@@ -61,25 +48,23 @@ var KmsBatcher = _webexCore.Batcher.extend({
61
48
  */
62
49
  prepareItem: function prepareItem(item) {
63
50
  var _this2 = this;
64
-
65
51
  return this.getDeferredForRequest(item).then(function (defer) {
66
52
  var timeout = item[TIMEOUT_SYMBOL];
67
- /* istanbul ignore if */
68
53
 
54
+ /* istanbul ignore if */
69
55
  if (!timeout) {
70
56
  throw new Error('timeout is required');
71
57
  }
72
-
73
58
  var timer = (0, _commonTimers.safeSetTimeout)(function () {
74
59
  _this2.logger.warn("kms: request timed out; request id: ".concat(item.requestId, "; timeout: ").concat(timeout));
75
-
76
60
  _this2.handleItemFailure(item, new _kmsErrors.KmsTimeoutError({
77
61
  timeout: timeout,
78
62
  request: item
79
63
  }));
80
- }, timeout); // Reminder: reassign `promise` is not a viable means of inserting into
81
- // the Promise chain
64
+ }, timeout);
82
65
 
66
+ // Reminder: reassign `promise` is not a viable means of inserting into
67
+ // the Promise chain
83
68
  defer.promise.then(function () {
84
69
  return clearTimeout(timer);
85
70
  });
@@ -89,7 +74,6 @@ var KmsBatcher = _webexCore.Batcher.extend({
89
74
  return item;
90
75
  });
91
76
  },
92
-
93
77
  /**
94
78
  * Attaches the final bits of cluster info to the payload
95
79
  * @param {Array} queue
@@ -105,7 +89,6 @@ var KmsBatcher = _webexCore.Batcher.extend({
105
89
  };
106
90
  });
107
91
  },
108
-
109
92
  /**
110
93
  * @param {Object} payload
111
94
  * @returns {Promise<HttpResponseObject>}
@@ -119,7 +102,6 @@ var KmsBatcher = _webexCore.Batcher.extend({
119
102
  body: payload
120
103
  });
121
104
  },
122
-
123
105
  /**
124
106
  * Does nothing; the http response doesn't carry our response data
125
107
  * @returns {Promise}
@@ -127,7 +109,6 @@ var KmsBatcher = _webexCore.Batcher.extend({
127
109
  handleHttpSuccess: function handleHttpSuccess() {
128
110
  return _promise.default.resolve();
129
111
  },
130
-
131
112
  /**
132
113
  * @param {Object} item
133
114
  * @returns {Promise<boolean>}
@@ -135,7 +116,6 @@ var KmsBatcher = _webexCore.Batcher.extend({
135
116
  didItemFail: function didItemFail(item) {
136
117
  return _promise.default.resolve(item.status >= 400);
137
118
  },
138
-
139
119
  /**
140
120
  * @param {Object} item
141
121
  * @returns {Promise}
@@ -145,18 +125,17 @@ var KmsBatcher = _webexCore.Batcher.extend({
145
125
  defer.resolve(item.body);
146
126
  });
147
127
  },
148
-
149
128
  /**
150
129
  * @param {Object} item
151
130
  * @param {KmsError} [reason]
152
131
  * @returns {Promise}
153
132
  */
154
133
  handleItemFailure: function handleItemFailure(item, reason) {
134
+ (0, _kmsErrors.handleKmsKeyRevokedEncryptionFailure)(item, this.webex);
155
135
  return this.getDeferredForResponse(item).then(function (defer) {
156
136
  defer.reject(reason || new _kmsErrors.KmsError(item.body));
157
137
  });
158
138
  },
159
-
160
139
  /**
161
140
  * @param {Object} item
162
141
  * @returns {Promise}
@@ -164,7 +143,6 @@ var KmsBatcher = _webexCore.Batcher.extend({
164
143
  fingerprintRequest: function fingerprintRequest(item) {
165
144
  return _promise.default.resolve(item.requestId);
166
145
  },
167
-
168
146
  /**
169
147
  * @param {Object} item
170
148
  * @returns {Promise}
@@ -173,7 +151,6 @@ var KmsBatcher = _webexCore.Batcher.extend({
173
151
  return _promise.default.resolve(item.requestId);
174
152
  }
175
153
  });
176
-
177
154
  var _default = KmsBatcher;
178
155
  exports.default = _default;
179
156
  //# sourceMappingURL=kms-batcher.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["TIMEOUT_SYMBOL","KmsBatcher","Batcher","extend","namespace","processKmsMessageEvent","event","logger","info","all","encryption","kmsMessages","map","kmsMessage","resolve","process","env","NODE_ENV","body","acceptItem","prepareItem","item","getDeferredForRequest","then","defer","timeout","Error","timer","safeSetTimeout","warn","requestId","handleItemFailure","KmsTimeoutError","request","promise","clearTimeout","catch","prepareRequest","queue","webex","internal","kms","_getKMSCluster","cluster","destination","req","wrapped","submitHttpRequest","payload","length","method","service","resource","handleHttpSuccess","didItemFail","status","handleItemSuccess","getDeferredForResponse","reason","reject","KmsError","fingerprintRequest","fingerprintResponse"],"sources":["kms-batcher.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {safeSetTimeout} from '@webex/common-timers';\nimport {Batcher} from '@webex/webex-core';\n\nimport {KmsError, KmsTimeoutError} from './kms-errors';\n\nexport const TIMEOUT_SYMBOL = Symbol('TIMEOUT_SYMBOL');\n\n/**\n * @class\n */\nconst KmsBatcher = Batcher.extend({\n namespace: 'Encryption',\n\n /**\n * Accepts a kmsMessage event and passes its contents to acceptItem\n * @param {Object} event\n * @returns {Promise}\n */\n processKmsMessageEvent(event) {\n this.logger.info('kms-batcher: received kms message');\n\n return Promise.all(event.encryption.kmsMessages.map((kmsMessage) => new Promise((resolve) => {\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production') {\n this.logger.info('kms-batcher:', kmsMessage.body);\n }\n\n resolve(this.acceptItem(kmsMessage));\n })));\n },\n\n /**\n * Attaches a timeout to the given KMS message\n * @param {Object} item\n * @returns {Promise<Object>}\n */\n prepareItem(item) {\n return this.getDeferredForRequest(item)\n .then((defer) => {\n const timeout = item[TIMEOUT_SYMBOL];\n\n /* istanbul ignore if */\n if (!timeout) {\n throw new Error('timeout is required');\n }\n\n const timer = safeSetTimeout(() => {\n this.logger.warn(`kms: request timed out; request id: ${item.requestId}; timeout: ${timeout}`);\n this.handleItemFailure(item, new KmsTimeoutError({\n timeout,\n request: item\n }));\n }, timeout);\n\n // Reminder: reassign `promise` is not a viable means of inserting into\n // the Promise chain\n defer.promise.then(() => clearTimeout(timer));\n defer.promise.catch(() => clearTimeout(timer));\n\n return item;\n });\n },\n\n /**\n * Attaches the final bits of cluster info to the payload\n * @param {Array} queue\n * @returns {Promise<Array>}\n */\n prepareRequest(queue) {\n return this.webex.internal.encryption.kms._getKMSCluster()\n .then((cluster) => ({\n destination: cluster,\n kmsMessages: queue.map((req) => req.wrapped)\n }));\n },\n\n /**\n * @param {Object} payload\n * @returns {Promise<HttpResponseObject>}\n */\n submitHttpRequest(payload) {\n this.logger.info('kms: batched-request-length', payload.kmsMessages.length);\n\n return this.webex.request({\n method: 'POST',\n service: 'encryption',\n resource: '/kms/messages',\n body: payload\n });\n },\n\n /**\n * Does nothing; the http response doesn't carry our response data\n * @returns {Promise}\n */\n handleHttpSuccess() {\n return Promise.resolve();\n },\n\n /**\n * @param {Object} item\n * @returns {Promise<boolean>}\n */\n didItemFail(item) {\n return Promise.resolve(item.status >= 400);\n },\n\n /**\n * @param {Object} item\n * @returns {Promise}\n */\n handleItemSuccess(item) {\n return this.getDeferredForResponse(item)\n .then((defer) => {\n defer.resolve(item.body);\n });\n },\n\n /**\n * @param {Object} item\n * @param {KmsError} [reason]\n * @returns {Promise}\n */\n handleItemFailure(item, reason) {\n return this.getDeferredForResponse(item)\n .then((defer) => {\n defer.reject(reason || new KmsError(item.body));\n });\n },\n\n /**\n * @param {Object} item\n * @returns {Promise}\n */\n fingerprintRequest(item) {\n return Promise.resolve(item.requestId);\n },\n\n /**\n * @param {Object} item\n * @returns {Promise}\n */\n fingerprintResponse(item) {\n return Promise.resolve(item.requestId);\n }\n});\n\nexport default KmsBatcher;\n"],"mappings":"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"}
1
+ {"version":3,"names":["TIMEOUT_SYMBOL","KmsBatcher","Batcher","extend","namespace","processKmsMessageEvent","event","logger","info","all","encryption","kmsMessages","map","kmsMessage","resolve","process","env","NODE_ENV","body","acceptItem","prepareItem","item","getDeferredForRequest","then","defer","timeout","Error","timer","safeSetTimeout","warn","requestId","handleItemFailure","KmsTimeoutError","request","promise","clearTimeout","catch","prepareRequest","queue","webex","internal","kms","_getKMSCluster","cluster","destination","req","wrapped","submitHttpRequest","payload","length","method","service","resource","handleHttpSuccess","didItemFail","status","handleItemSuccess","getDeferredForResponse","reason","handleKmsKeyRevokedEncryptionFailure","reject","KmsError","fingerprintRequest","fingerprintResponse"],"sources":["kms-batcher.js"],"sourcesContent":["/*!\n * Copyright (c) 2015-2020 Cisco Systems, Inc. See LICENSE file.\n */\n\nimport {safeSetTimeout} from '@webex/common-timers';\nimport {Batcher} from '@webex/webex-core';\n\nimport {KmsError, KmsTimeoutError, handleKmsKeyRevokedEncryptionFailure} from './kms-errors';\n\nexport const TIMEOUT_SYMBOL = Symbol('TIMEOUT_SYMBOL');\n\n/**\n * @class\n */\nconst KmsBatcher = Batcher.extend({\n namespace: 'Encryption',\n\n /**\n * Accepts a kmsMessage event and passes its contents to acceptItem\n * @param {Object} event\n * @returns {Promise}\n */\n processKmsMessageEvent(event) {\n this.logger.info('kms-batcher: received kms message');\n\n return Promise.all(\n event.encryption.kmsMessages.map(\n (kmsMessage) =>\n new Promise((resolve) => {\n /* istanbul ignore else */\n if (process.env.NODE_ENV !== 'production') {\n this.logger.info('kms-batcher:', kmsMessage.body);\n }\n\n resolve(this.acceptItem(kmsMessage));\n })\n )\n );\n },\n\n /**\n * Attaches a timeout to the given KMS message\n * @param {Object} item\n * @returns {Promise<Object>}\n */\n prepareItem(item) {\n return this.getDeferredForRequest(item).then((defer) => {\n const timeout = item[TIMEOUT_SYMBOL];\n\n /* istanbul ignore if */\n if (!timeout) {\n throw new Error('timeout is required');\n }\n\n const timer = safeSetTimeout(() => {\n this.logger.warn(\n `kms: request timed out; request id: ${item.requestId}; timeout: ${timeout}`\n );\n this.handleItemFailure(\n item,\n new KmsTimeoutError({\n timeout,\n request: item,\n })\n );\n }, timeout);\n\n // Reminder: reassign `promise` is not a viable means of inserting into\n // the Promise chain\n defer.promise.then(() => clearTimeout(timer));\n defer.promise.catch(() => clearTimeout(timer));\n\n return item;\n });\n },\n\n /**\n * Attaches the final bits of cluster info to the payload\n * @param {Array} queue\n * @returns {Promise<Array>}\n */\n prepareRequest(queue) {\n return this.webex.internal.encryption.kms._getKMSCluster().then((cluster) => ({\n destination: cluster,\n kmsMessages: queue.map((req) => req.wrapped),\n }));\n },\n\n /**\n * @param {Object} payload\n * @returns {Promise<HttpResponseObject>}\n */\n submitHttpRequest(payload) {\n this.logger.info('kms: batched-request-length', payload.kmsMessages.length);\n\n return this.webex.request({\n method: 'POST',\n service: 'encryption',\n resource: '/kms/messages',\n body: payload,\n });\n },\n\n /**\n * Does nothing; the http response doesn't carry our response data\n * @returns {Promise}\n */\n handleHttpSuccess() {\n return Promise.resolve();\n },\n\n /**\n * @param {Object} item\n * @returns {Promise<boolean>}\n */\n didItemFail(item) {\n return Promise.resolve(item.status >= 400);\n },\n\n /**\n * @param {Object} item\n * @returns {Promise}\n */\n handleItemSuccess(item) {\n return this.getDeferredForResponse(item).then((defer) => {\n defer.resolve(item.body);\n });\n },\n\n /**\n * @param {Object} item\n * @param {KmsError} [reason]\n * @returns {Promise}\n */\n handleItemFailure(item, reason) {\n handleKmsKeyRevokedEncryptionFailure(item, this.webex);\n\n return this.getDeferredForResponse(item).then((defer) => {\n defer.reject(reason || new KmsError(item.body));\n });\n },\n\n /**\n * @param {Object} item\n * @returns {Promise}\n */\n fingerprintRequest(item) {\n return Promise.resolve(item.requestId);\n },\n\n /**\n * @param {Object} item\n * @returns {Promise}\n */\n fingerprintResponse(item) {\n return Promise.resolve(item.requestId);\n },\n});\n\nexport default KmsBatcher;\n"],"mappings":"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"}