auth0-deploy-cli 7.3.6 → 7.5.0

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 (113) hide show
  1. package/.circleci/config.yml +15 -0
  2. package/.github/CODEOWNERS +1 -0
  3. package/.husky/pre-commit +6 -0
  4. package/.husky/pre-push +4 -0
  5. package/.nyc_output/60b76a45-577b-4171-9982-a8e836ab7fd6.json +1 -0
  6. package/.nyc_output/processinfo/60b76a45-577b-4171-9982-a8e836ab7fd6.json +1 -0
  7. package/.nyc_output/processinfo/index.json +1 -1
  8. package/CHANGELOG.md +35 -2
  9. package/lib/args.js +89 -81
  10. package/lib/commands/export.js +51 -77
  11. package/lib/commands/import.js +45 -69
  12. package/lib/commands/index.js +11 -20
  13. package/lib/configFactory.js +19 -27
  14. package/lib/context/defaults.js +18 -41
  15. package/lib/context/directory/handlers/actions.js +77 -107
  16. package/lib/context/directory/handlers/attackProtection.js +59 -0
  17. package/lib/context/directory/handlers/clientGrants.js +45 -54
  18. package/lib/context/directory/handlers/clients.js +60 -79
  19. package/lib/context/directory/handlers/connections.js +65 -89
  20. package/lib/context/directory/handlers/databases.js +91 -123
  21. package/lib/context/directory/handlers/emailProvider.js +46 -57
  22. package/lib/context/directory/handlers/emailTemplates.js +67 -80
  23. package/lib/context/directory/handlers/guardianFactorProviders.js +41 -49
  24. package/lib/context/directory/handlers/guardianFactorTemplates.js +41 -49
  25. package/lib/context/directory/handlers/guardianFactors.js +41 -49
  26. package/lib/context/directory/handlers/guardianPhoneFactorMessageTypes.js +40 -50
  27. package/lib/context/directory/handlers/guardianPhoneFactorSelectedProvider.js +40 -50
  28. package/lib/context/directory/handlers/guardianPolicies.js +40 -50
  29. package/lib/context/directory/handlers/hooks.js +55 -70
  30. package/lib/context/directory/handlers/index.js +53 -123
  31. package/lib/context/directory/handlers/migrations.js +36 -41
  32. package/lib/context/directory/handlers/organizations.js +54 -69
  33. package/lib/context/directory/handlers/pages.js +72 -86
  34. package/lib/context/directory/handlers/resourceServers.js +41 -49
  35. package/lib/context/directory/handlers/roles.js +49 -62
  36. package/lib/context/directory/handlers/rules.js +52 -68
  37. package/lib/context/directory/handlers/rulesConfigs.js +33 -32
  38. package/lib/context/directory/handlers/tenant.js +52 -47
  39. package/lib/context/directory/handlers/triggers.js +39 -54
  40. package/lib/context/directory/index.js +113 -101
  41. package/lib/context/index.js +96 -105
  42. package/lib/context/yaml/handlers/actions.js +71 -88
  43. package/lib/context/yaml/handlers/attackProtection.js +29 -0
  44. package/lib/context/yaml/handlers/clientGrants.js +36 -29
  45. package/lib/context/yaml/handlers/clients.js +61 -76
  46. package/lib/context/yaml/handlers/connections.js +76 -103
  47. package/lib/context/yaml/handlers/databases.js +64 -79
  48. package/lib/context/yaml/handlers/emailProvider.js +33 -30
  49. package/lib/context/yaml/handlers/emailTemplates.js +45 -54
  50. package/lib/context/yaml/handlers/guardianFactorProviders.js +27 -18
  51. package/lib/context/yaml/handlers/guardianFactorTemplates.js +27 -18
  52. package/lib/context/yaml/handlers/guardianFactors.js +27 -18
  53. package/lib/context/yaml/handlers/guardianPhoneFactorMessageTypes.js +27 -20
  54. package/lib/context/yaml/handlers/guardianPhoneFactorSelectedProvider.js +27 -20
  55. package/lib/context/yaml/handlers/guardianPolicies.js +27 -20
  56. package/lib/context/yaml/handlers/hooks.js +57 -67
  57. package/lib/context/yaml/handlers/index.js +53 -123
  58. package/lib/context/yaml/handlers/migrations.js +23 -24
  59. package/lib/context/yaml/handlers/organizations.js +40 -38
  60. package/lib/context/yaml/handlers/pages.js +49 -58
  61. package/lib/context/yaml/handlers/resourceServers.js +27 -18
  62. package/lib/context/yaml/handlers/roles.js +34 -24
  63. package/lib/context/yaml/handlers/rules.js +48 -58
  64. package/lib/context/yaml/handlers/rulesConfigs.js +27 -18
  65. package/lib/context/yaml/handlers/tenant.js +44 -30
  66. package/lib/context/yaml/handlers/triggers.js +32 -23
  67. package/lib/context/yaml/index.js +127 -142
  68. package/lib/index.js +73 -79
  69. package/lib/logger.js +18 -22
  70. package/lib/readonly.js +74 -66
  71. package/lib/tools/ValidationError.js +8 -13
  72. package/lib/tools/auth0/client.js +143 -133
  73. package/lib/tools/auth0/handlers/actions.js +231 -241
  74. package/lib/tools/auth0/handlers/attackProtection.js +86 -0
  75. package/lib/tools/auth0/handlers/branding.js +47 -46
  76. package/lib/tools/auth0/handlers/clientGrants.js +118 -116
  77. package/lib/tools/auth0/handlers/clients.js +72 -90
  78. package/lib/tools/auth0/handlers/connections.js +150 -118
  79. package/lib/tools/auth0/handlers/databases.js +127 -124
  80. package/lib/tools/auth0/handlers/default.js +186 -189
  81. package/lib/tools/auth0/handlers/emailProvider.js +67 -78
  82. package/lib/tools/auth0/handlers/emailTemplates.js +116 -92
  83. package/lib/tools/auth0/handlers/guardianFactorProviders.js +66 -81
  84. package/lib/tools/auth0/handlers/guardianFactorTemplates.js +60 -71
  85. package/lib/tools/auth0/handlers/guardianFactors.js +56 -63
  86. package/lib/tools/auth0/handlers/guardianPhoneFactorMessageTypes.js +80 -79
  87. package/lib/tools/auth0/handlers/guardianPhoneFactorSelectedProvider.js +77 -76
  88. package/lib/tools/auth0/handlers/guardianPolicies.js +59 -62
  89. package/lib/tools/auth0/handlers/hooks.js +201 -227
  90. package/lib/tools/auth0/handlers/index.js +53 -111
  91. package/lib/tools/auth0/handlers/migrations.js +99 -79
  92. package/lib/tools/auth0/handlers/organizations.js +225 -247
  93. package/lib/tools/auth0/handlers/pages.js +116 -154
  94. package/lib/tools/auth0/handlers/prompts.js +47 -46
  95. package/lib/tools/auth0/handlers/resourceServers.js +88 -112
  96. package/lib/tools/auth0/handlers/roles.js +203 -220
  97. package/lib/tools/auth0/handlers/rules.js +168 -189
  98. package/lib/tools/auth0/handlers/rulesConfigs.js +54 -63
  99. package/lib/tools/auth0/handlers/tenant.js +88 -64
  100. package/lib/tools/auth0/handlers/triggers.js +126 -126
  101. package/lib/tools/auth0/index.js +92 -85
  102. package/lib/tools/auth0/schema.js +39 -31
  103. package/lib/tools/constants.js +111 -21
  104. package/lib/tools/deploy.js +35 -32
  105. package/lib/tools/index.js +19 -32
  106. package/lib/tools/logger.js +11 -12
  107. package/lib/tools/utils.js +258 -254
  108. package/lib/utils.js +167 -190
  109. package/package.json +6 -3
  110. package/tsconfig.json +96 -0
  111. package/typescript-migration-progress.sh +22 -0
  112. package/.nyc_output/8cf4dd0c-1f3a-4ac1-899c-8e453a64221e.json +0 -1
  113. package/.nyc_output/processinfo/8cf4dd0c-1f3a-4ac1-899c-8e453a64221e.json +0 -1
@@ -1,260 +1,250 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
5
17
  });
6
- exports.default = exports.schema = undefined;
7
-
8
- var _dec, _class;
9
-
10
- var _lodash = require("lodash");
11
-
12
- var _lodash2 = _interopRequireDefault(_lodash);
13
-
14
- var _default = require("./default");
15
-
16
- var _default2 = _interopRequireDefault(_default);
17
-
18
- var _logger = require("../../logger");
19
-
20
- var _logger2 = _interopRequireDefault(_logger);
21
-
22
- var _utils = require("../../utils");
23
-
24
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
25
-
26
- function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; }
27
-
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || function (mod) {
25
+ if (mod && mod.__esModule) return mod;
26
+ var result = {};
27
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
28
+ __setModuleDefault(result, mod);
29
+ return result;
30
+ };
31
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
32
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
33
+ return new (P || (P = Promise))(function (resolve, reject) {
34
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
35
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
36
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
37
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
38
+ });
39
+ };
40
+ var __importDefault = (this && this.__importDefault) || function (mod) {
41
+ return (mod && mod.__esModule) ? mod : { "default": mod };
42
+ };
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.schema = void 0;
45
+ const lodash_1 = __importDefault(require("lodash"));
46
+ const default_1 = __importStar(require("./default"));
47
+ const logger_1 = __importDefault(require("../../logger"));
48
+ const utils_1 = require("../../utils");
28
49
  const MAX_ACTION_DEPLOY_RETRY = 60;
29
- const schema = exports.schema = {
30
- type: 'array',
31
- items: {
32
- type: 'object',
33
- required: ['name', 'supported_triggers', 'code'],
34
- additionalProperties: false,
35
- properties: {
36
- code: {
37
- type: 'string',
38
- default: ''
39
- },
40
- runtime: {
41
- type: 'string'
42
- },
43
- dependencies: {
44
- type: 'array',
45
- items: {
46
- type: 'object',
47
- additionalProperties: false,
48
- properties: {
49
- name: {
50
- type: 'string'
51
- },
52
- version: {
53
- type: 'string'
54
- },
55
- registry_url: {
56
- type: 'string'
57
- }
58
- }
59
- }
60
- },
61
- secrets: {
62
- type: 'array',
63
- items: {
64
- type: 'object',
65
- properties: {
66
- name: {
67
- type: 'string'
50
+ // With this schema, we can only validate property types but not valid properties on per type basis
51
+ exports.schema = {
52
+ type: 'array',
53
+ items: {
54
+ type: 'object',
55
+ required: ['name', 'supported_triggers', 'code'],
56
+ additionalProperties: false,
57
+ properties: {
58
+ code: { type: 'string', default: '' },
59
+ runtime: { type: 'string' },
60
+ dependencies: {
61
+ type: 'array',
62
+ items: {
63
+ type: 'object',
64
+ additionalProperties: false,
65
+ properties: {
66
+ name: { type: 'string' },
67
+ version: { type: 'string' },
68
+ registry_url: { type: 'string' }
69
+ }
70
+ }
68
71
  },
69
- value: {
70
- type: 'string'
71
- },
72
- updated_at: {
73
- type: 'string',
74
- format: 'date-time'
75
- }
76
- }
77
- }
78
- },
79
- name: {
80
- type: 'string',
81
- default: ''
82
- },
83
- supported_triggers: {
84
- type: 'array',
85
- items: {
86
- type: 'object',
87
- properties: {
88
- id: {
89
- type: 'string',
90
- default: ''
72
+ secrets: {
73
+ type: 'array',
74
+ items: {
75
+ type: 'object',
76
+ properties: {
77
+ name: { type: 'string' },
78
+ value: { type: 'string' },
79
+ updated_at: { type: 'string', format: 'date-time' }
80
+ }
81
+ }
91
82
  },
92
- version: {
93
- type: 'string'
83
+ name: { type: 'string', default: '' },
84
+ supported_triggers: {
85
+ type: 'array',
86
+ items: {
87
+ type: 'object',
88
+ properties: {
89
+ id: { type: 'string', default: '' },
90
+ version: { type: 'string' },
91
+ url: { type: 'string' }
92
+ }
93
+ }
94
94
  },
95
- url: {
96
- type: 'string'
97
- }
98
- }
95
+ deployed: { type: 'boolean' },
96
+ status: { type: 'string' }
99
97
  }
100
- },
101
- deployed: {
102
- type: 'boolean'
103
- },
104
- status: {
105
- type: 'string'
106
- }
107
98
  }
108
- }
109
99
  };
110
-
111
100
  function sleep(ms) {
112
- return new Promise(resolve => setTimeout(resolve, ms));
101
+ return new Promise((resolve) => setTimeout(resolve, ms));
113
102
  }
114
-
115
103
  function isActionsDisabled(err) {
116
- const errorBody = _lodash2.default.get(err, 'originalError.response.body') || {};
117
- return err.statusCode === 403 && errorBody.errorCode === 'feature_not_enabled';
104
+ const errorBody = lodash_1.default.get(err, 'originalError.response.body') || {};
105
+ return (err.statusCode === 403 && errorBody.errorCode === 'feature_not_enabled');
118
106
  }
119
-
120
- let ActionHandler = (_dec = (0, _default.order)('60'), (_class = class ActionHandler extends _default2.default {
121
- constructor(options) {
122
- super({ ...options,
123
- type: 'actions',
124
- functions: {
125
- create: action => this.createAction(action),
126
- delete: action => this.deleteAction(action)
127
- },
128
- stripUpdateFields: ['deployed', 'status']
129
- });
130
- }
131
-
132
- async createAction(action) {
133
- const addAction = { ...action
134
- };
135
- delete addAction.deployed;
136
- delete addAction.status;
137
- const createdAction = await this.client.actions.create(addAction);
138
- action.id = createdAction.id;
139
- return createdAction;
140
- }
141
-
142
- async deleteAction(action) {
143
- if (!this.client.actions || typeof this.client.actions.delete !== 'function') {
144
- return [];
107
+ class ActionHandler extends default_1.default {
108
+ constructor(options) {
109
+ super(Object.assign(Object.assign({}, options), { type: 'actions', functions: {
110
+ create: (action) => this.createAction(action),
111
+ delete: (action) => this.deleteAction(action)
112
+ }, stripUpdateFields: [
113
+ 'deployed',
114
+ 'status'
115
+ ] }));
145
116
  }
146
-
147
- return this.client.actions.delete({
148
- id: action.id,
149
- force: true
150
- });
151
- }
152
-
153
- objString(action) {
154
- return super.objString({
155
- id: action.id,
156
- name: action.name
157
- });
158
- }
159
-
160
- async deployActions(actions) {
161
- await this.client.pool.addEachTask({
162
- data: actions || [],
163
- generator: action => this.deployAction(action).then(() => {
164
- _logger2.default.info(`Deployed [${this.type}]: ${this.objString(action)}`);
165
- }).catch(err => {
166
- throw new Error(`Problem Deploying ${this.type} ${this.objString(action)}\n${err}`);
167
- })
168
- }).promise();
169
- }
170
-
171
- async deployAction(action) {
172
- try {
173
- await this.client.actions.deploy({
174
- id: action.id
175
- });
176
- } catch (err) {
177
- if (err.message && err.message.includes('must be in the \'built\' state')) {
178
- if (!action.retry_count) {
179
- _logger2.default.info(`[${this.type}]: Waiting for build to complete ${this.objString(action)}`);
180
-
181
- action.retry_count = 1;
182
- }
183
-
184
- if (action.retry_count > MAX_ACTION_DEPLOY_RETRY) {
185
- throw err;
186
- }
187
-
188
- await sleep(1000);
189
- action.retry_count += 1;
190
- await this.deployAction(action);
191
- }
117
+ createAction(action) {
118
+ return __awaiter(this, void 0, void 0, function* () {
119
+ // Strip the deployed flag
120
+ const addAction = Object.assign({}, action);
121
+ delete addAction.deployed;
122
+ delete addAction.status;
123
+ const createdAction = yield this.client.actions.create(addAction);
124
+ // Add the action id so we can deploy it later
125
+ action.id = createdAction.id;
126
+ return createdAction;
127
+ });
192
128
  }
193
- }
194
-
195
- async actionChanges(action, found) {
196
- const actionChanges = {};
197
-
198
- if (!action.deployed) {
199
- if (action.code !== found.code) {
200
- actionChanges.code = action.code;
201
- }
202
-
203
- if (action.runtime !== found.runtime) {
204
- actionChanges.runtime = action.runtime;
205
- }
206
-
207
- if (!(0, _utils.areArraysEquals)(action.dependencies, found.dependencies)) {
208
- actionChanges.dependencies = action.dependencies;
209
- }
129
+ deleteAction(action) {
130
+ return __awaiter(this, void 0, void 0, function* () {
131
+ if (!this.client.actions || typeof this.client.actions.delete !== 'function') {
132
+ return [];
133
+ }
134
+ return this.client.actions.delete({ id: action.id, force: true });
135
+ });
210
136
  }
211
-
212
- if (!(0, _utils.areArraysEquals)(action.supported_triggers, found.supported_triggers)) {
213
- actionChanges.supported_triggers = action.supported_triggers;
137
+ objString(action) {
138
+ return super.objString({ id: action.id, name: action.name });
214
139
  }
215
-
216
- return actionChanges;
217
- }
218
-
219
- async getType() {
220
- if (this.existing) return this.existing;
221
-
222
- if (!this.client.actions || typeof this.client.actions.getAll !== 'function') {
223
- return [];
140
+ deployActions(actions) {
141
+ return __awaiter(this, void 0, void 0, function* () {
142
+ yield this.client.pool
143
+ .addEachTask({
144
+ data: actions || [],
145
+ generator: (action) => this.deployAction(action)
146
+ .then(() => {
147
+ logger_1.default.info(`Deployed [${this.type}]: ${this.objString(action)}`);
148
+ })
149
+ .catch((err) => {
150
+ throw new Error(`Problem Deploying ${this.type} ${this.objString(action)}\n${err}`);
151
+ })
152
+ })
153
+ .promise();
154
+ });
224
155
  }
225
-
226
- try {
227
- this.existing = await this.client.actions.getAll({
228
- paginate: true
229
- });
230
- return this.existing;
231
- } catch (err) {
232
- if (err.statusCode === 403 || err.statusCode === 404 || err.statusCode === 501) {
233
- return [];
234
- }
235
-
236
- if (isActionsDisabled(err)) {
237
- _logger2.default.info('Skipping actions because it is not enabled.');
238
-
239
- return [];
240
- }
241
-
242
- throw err;
156
+ deployAction(action) {
157
+ return __awaiter(this, void 0, void 0, function* () {
158
+ try {
159
+ yield this.client.actions.deploy({ id: action.id });
160
+ }
161
+ catch (err) {
162
+ // Retry if pending build.
163
+ if (err.message && err.message.includes('must be in the \'built\' state')) {
164
+ if (!action.retry_count) {
165
+ logger_1.default.info(`[${this.type}]: Waiting for build to complete ${this.objString(action)}`);
166
+ action.retry_count = 1;
167
+ }
168
+ if (action.retry_count > MAX_ACTION_DEPLOY_RETRY) {
169
+ throw err;
170
+ }
171
+ yield sleep(1000);
172
+ action.retry_count += 1;
173
+ yield this.deployAction(action);
174
+ }
175
+ else {
176
+ throw err;
177
+ }
178
+ }
179
+ });
243
180
  }
244
- }
245
-
246
- async processChanges(assets) {
247
- const {
248
- actions
249
- } = assets;
250
- if (!actions) return;
251
- const changes = await this.calcChanges(assets);
252
- await super.processChanges(assets, changes);
253
- const deployActions = [];
254
- deployActions.push(...changes.create.filter(action => action.deployed));
255
- deployActions.push(...changes.update.filter(action => action.deployed));
256
- await this.deployActions(deployActions);
257
- }
258
-
259
- }, (_applyDecoratedDescriptor(_class.prototype, "processChanges", [_dec], Object.getOwnPropertyDescriptor(_class.prototype, "processChanges"), _class.prototype)), _class));
260
- exports.default = ActionHandler;
181
+ actionChanges(action, found) {
182
+ return __awaiter(this, void 0, void 0, function* () {
183
+ const actionChanges = {};
184
+ // if action is deployed, should compare against curren_version - calcDeployedVersionChanges method
185
+ if (!action.deployed) {
186
+ // name or secrets modifications are not supported yet
187
+ if (action.code !== found.code) {
188
+ actionChanges.code = action.code;
189
+ }
190
+ if (action.runtime !== found.runtime) {
191
+ actionChanges.runtime = action.runtime;
192
+ }
193
+ if (!(0, utils_1.areArraysEquals)(action.dependencies, found.dependencies)) {
194
+ actionChanges.dependencies = action.dependencies;
195
+ }
196
+ }
197
+ if (!(0, utils_1.areArraysEquals)(action.supported_triggers, found.supported_triggers)) {
198
+ actionChanges.supported_triggers = action.supported_triggers;
199
+ }
200
+ return actionChanges;
201
+ });
202
+ }
203
+ getType() {
204
+ return __awaiter(this, void 0, void 0, function* () {
205
+ if (this.existing)
206
+ return this.existing;
207
+ if (!this.client.actions || typeof this.client.actions.getAll !== 'function') {
208
+ return [];
209
+ }
210
+ // Actions API does not support include_totals param like the other paginate API's.
211
+ // So we set it to false otherwise it will fail with "Additional properties not allowed: include_totals"
212
+ try {
213
+ this.existing = yield this.client.actions.getAll({ paginate: true });
214
+ return this.existing;
215
+ }
216
+ catch (err) {
217
+ if (err.statusCode === 403 || err.statusCode === 404 || err.statusCode === 501) {
218
+ return [];
219
+ }
220
+ if (isActionsDisabled(err)) {
221
+ logger_1.default.info('Skipping actions because it is not enabled.');
222
+ return [];
223
+ }
224
+ throw err;
225
+ }
226
+ });
227
+ }
228
+ processChanges(assets) {
229
+ const _super = Object.create(null, {
230
+ processChanges: { get: () => super.processChanges }
231
+ });
232
+ return __awaiter(this, void 0, void 0, function* () {
233
+ const { actions } = assets;
234
+ // Do nothing if not set
235
+ if (!actions)
236
+ return;
237
+ const changes = yield this.calcChanges(assets);
238
+ yield _super.processChanges.call(this, assets, changes);
239
+ // Deploy actions
240
+ const deployActions = [];
241
+ deployActions.push(...changes.create.filter((action) => action.deployed));
242
+ deployActions.push(...changes.update.filter((action) => action.deployed));
243
+ yield this.deployActions(deployActions);
244
+ });
245
+ }
246
+ }
247
+ __decorate([
248
+ (0, default_1.order)('60')
249
+ ], ActionHandler.prototype, "processChanges", null);
250
+ exports.default = ActionHandler;
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.schema = void 0;
16
+ const default_1 = __importDefault(require("./default"));
17
+ exports.schema = {
18
+ type: 'object',
19
+ properties: {
20
+ breachedPasswordDetection: {
21
+ type: 'object'
22
+ },
23
+ bruteForceProtection: {
24
+ type: 'object'
25
+ },
26
+ suspiciousIpThrottling: {
27
+ type: 'object'
28
+ }
29
+ },
30
+ additionalProperties: false
31
+ };
32
+ class AttackProtectionHandler extends default_1.default {
33
+ constructor(config) {
34
+ super(Object.assign(Object.assign({}, config), { type: 'attackProtection' }));
35
+ }
36
+ objString(item) {
37
+ return super.objString({
38
+ 'breached-password-protection': {
39
+ enabled: item.breachedPasswordDetection.enabled
40
+ },
41
+ 'brute-force-protection': {
42
+ enabled: item.bruteForceProtection.enabled
43
+ },
44
+ 'suspicious-ip-throttling': {
45
+ enabled: item.suspiciousIpThrottling.enabled
46
+ }
47
+ });
48
+ }
49
+ getType() {
50
+ return __awaiter(this, void 0, void 0, function* () {
51
+ if (this.existing) {
52
+ return this.existing;
53
+ }
54
+ const [breachedPasswordDetection, bruteForceProtection, suspiciousIpThrottling] = yield Promise.all([
55
+ this.client.attackProtection.getBreachedPasswordDetectionConfig(),
56
+ this.client.attackProtection.getBruteForceConfig(),
57
+ this.client.attackProtection.getSuspiciousIpThrottlingConfig()
58
+ ]);
59
+ this.existing = {
60
+ breachedPasswordDetection,
61
+ bruteForceProtection,
62
+ suspiciousIpThrottling
63
+ };
64
+ return this.existing;
65
+ });
66
+ }
67
+ processChanges(assets) {
68
+ return __awaiter(this, void 0, void 0, function* () {
69
+ const { attackProtection } = assets;
70
+ if (!attackProtection || !Object.keys(attackProtection).length) {
71
+ return;
72
+ }
73
+ Promise.all([
74
+ this.client.attackProtection
75
+ .updateBreachedPasswordDetectionConfig({}, attackProtection.breachedPasswordDetection),
76
+ this.client.attackProtection
77
+ .updateSuspiciousIpThrottlingConfig({}, attackProtection.suspiciousIpThrottling),
78
+ this.client.attackProtection
79
+ .updateBruteForceConfig({}, attackProtection.bruteForceProtection)
80
+ ]);
81
+ this.updated += 1;
82
+ this.didUpdate(attackProtection);
83
+ });
84
+ }
85
+ }
86
+ exports.default = AttackProtectionHandler;