auth0-deploy-cli 7.8.0 → 7.11.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 (137) hide show
  1. package/CHANGELOG.md +40 -1
  2. package/README.md +2 -2
  3. package/lib/context/directory/handlers/actions.d.ts +2 -3
  4. package/lib/context/directory/handlers/actions.js +4 -4
  5. package/lib/context/directory/handlers/attackProtection.d.ts +6 -7
  6. package/lib/context/directory/handlers/attackProtection.js +3 -1
  7. package/lib/context/directory/handlers/branding.d.ts +2 -3
  8. package/lib/context/directory/handlers/branding.js +45 -21
  9. package/lib/context/directory/handlers/clientGrants.d.ts +2 -3
  10. package/lib/context/directory/handlers/clientGrants.js +3 -2
  11. package/lib/context/directory/handlers/clients.d.ts +2 -3
  12. package/lib/context/directory/handlers/clients.js +1 -1
  13. package/lib/context/directory/handlers/connections.d.ts +2 -3
  14. package/lib/context/directory/handlers/connections.js +3 -3
  15. package/lib/context/directory/handlers/databases.d.ts +2 -3
  16. package/lib/context/directory/handlers/databases.js +2 -2
  17. package/lib/context/directory/handlers/emailProvider.d.ts +2 -3
  18. package/lib/context/directory/handlers/emailProvider.js +12 -10
  19. package/lib/context/directory/handlers/emailTemplates.d.ts +2 -3
  20. package/lib/context/directory/handlers/emailTemplates.js +2 -2
  21. package/lib/context/directory/handlers/guardianFactorProviders.d.ts +2 -3
  22. package/lib/context/directory/handlers/guardianFactorProviders.js +1 -1
  23. package/lib/context/directory/handlers/guardianFactorTemplates.d.ts +2 -3
  24. package/lib/context/directory/handlers/guardianFactorTemplates.js +1 -1
  25. package/lib/context/directory/handlers/guardianFactors.d.ts +2 -3
  26. package/lib/context/directory/handlers/guardianFactors.js +1 -1
  27. package/lib/context/directory/handlers/guardianPhoneFactorMessageTypes.d.ts +2 -3
  28. package/lib/context/directory/handlers/guardianPhoneFactorMessageTypes.js +6 -6
  29. package/lib/context/directory/handlers/guardianPhoneFactorSelectedProvider.d.ts +2 -3
  30. package/lib/context/directory/handlers/guardianPhoneFactorSelectedProvider.js +6 -6
  31. package/lib/context/directory/handlers/guardianPolicies.d.ts +2 -3
  32. package/lib/context/directory/handlers/guardianPolicies.js +6 -6
  33. package/lib/context/directory/handlers/hooks.d.ts +2 -3
  34. package/lib/context/directory/handlers/hooks.js +3 -3
  35. package/lib/context/directory/handlers/index.d.ts +2 -2
  36. package/lib/context/directory/handlers/index.js +2 -0
  37. package/lib/context/directory/handlers/logStreams.d.ts +5 -0
  38. package/lib/context/directory/handlers/logStreams.js +49 -0
  39. package/lib/context/directory/handlers/migrations.d.ts +2 -3
  40. package/lib/context/directory/handlers/migrations.js +2 -2
  41. package/lib/context/directory/handlers/organizations.d.ts +2 -3
  42. package/lib/context/directory/handlers/organizations.js +1 -1
  43. package/lib/context/directory/handlers/pages.d.ts +2 -3
  44. package/lib/context/directory/handlers/pages.js +2 -2
  45. package/lib/context/directory/handlers/resourceServers.d.ts +2 -3
  46. package/lib/context/directory/handlers/resourceServers.js +1 -1
  47. package/lib/context/directory/handlers/roles.d.ts +2 -3
  48. package/lib/context/directory/handlers/roles.js +1 -1
  49. package/lib/context/directory/handlers/rules.d.ts +2 -3
  50. package/lib/context/directory/handlers/rules.js +2 -2
  51. package/lib/context/directory/handlers/rulesConfigs.d.ts +2 -3
  52. package/lib/context/directory/handlers/rulesConfigs.js +1 -1
  53. package/lib/context/directory/handlers/tenant.d.ts +7 -7
  54. package/lib/context/directory/handlers/tenant.js +11 -10
  55. package/lib/context/directory/handlers/triggers.d.ts +2 -3
  56. package/lib/context/directory/handlers/triggers.js +1 -1
  57. package/lib/context/yaml/handlers/actions.d.ts +2 -3
  58. package/lib/context/yaml/handlers/actions.js +6 -8
  59. package/lib/context/yaml/handlers/attackProtection.d.ts +6 -3
  60. package/lib/context/yaml/handlers/attackProtection.js +9 -1
  61. package/lib/context/yaml/handlers/branding.d.ts +9 -2
  62. package/lib/context/yaml/handlers/branding.js +33 -11
  63. package/lib/context/yaml/handlers/clientGrants.d.ts +2 -3
  64. package/lib/context/yaml/handlers/clientGrants.js +7 -6
  65. package/lib/context/yaml/handlers/clients.d.ts +2 -3
  66. package/lib/context/yaml/handlers/clients.js +6 -3
  67. package/lib/context/yaml/handlers/connections.d.ts +2 -3
  68. package/lib/context/yaml/handlers/connections.js +6 -9
  69. package/lib/context/yaml/handlers/databases.d.ts +3 -4
  70. package/lib/context/yaml/handlers/databases.js +7 -7
  71. package/lib/context/yaml/handlers/emailProvider.d.ts +2 -3
  72. package/lib/context/yaml/handlers/emailProvider.js +17 -10
  73. package/lib/context/yaml/handlers/emailTemplates.d.ts +2 -3
  74. package/lib/context/yaml/handlers/emailTemplates.js +16 -13
  75. package/lib/context/yaml/handlers/guardianFactorProviders.d.ts +2 -3
  76. package/lib/context/yaml/handlers/guardianFactorProviders.js +4 -2
  77. package/lib/context/yaml/handlers/guardianFactorTemplates.d.ts +2 -3
  78. package/lib/context/yaml/handlers/guardianFactorTemplates.js +4 -2
  79. package/lib/context/yaml/handlers/guardianFactors.d.ts +2 -3
  80. package/lib/context/yaml/handlers/guardianFactors.js +4 -2
  81. package/lib/context/yaml/handlers/guardianPhoneFactorMessageTypes.d.ts +2 -3
  82. package/lib/context/yaml/handlers/guardianPhoneFactorMessageTypes.js +4 -2
  83. package/lib/context/yaml/handlers/guardianPhoneFactorSelectedProvider.d.ts +2 -3
  84. package/lib/context/yaml/handlers/guardianPhoneFactorSelectedProvider.js +4 -2
  85. package/lib/context/yaml/handlers/guardianPolicies.d.ts +4 -3
  86. package/lib/context/yaml/handlers/guardianPolicies.js +4 -2
  87. package/lib/context/yaml/handlers/hooks.d.ts +2 -3
  88. package/lib/context/yaml/handlers/hooks.js +20 -19
  89. package/lib/context/yaml/handlers/index.d.ts +1 -1
  90. package/lib/context/yaml/handlers/index.js +2 -0
  91. package/lib/context/yaml/handlers/logStreams.d.ts +5 -0
  92. package/lib/context/yaml/handlers/logStreams.js +26 -0
  93. package/lib/context/yaml/handlers/migrations.d.ts +2 -3
  94. package/lib/context/yaml/handlers/migrations.js +5 -9
  95. package/lib/context/yaml/handlers/organizations.d.ts +2 -1
  96. package/lib/context/yaml/handlers/organizations.js +17 -15
  97. package/lib/context/yaml/handlers/pages.d.ts +2 -3
  98. package/lib/context/yaml/handlers/pages.js +20 -18
  99. package/lib/context/yaml/handlers/resourceServers.d.ts +2 -3
  100. package/lib/context/yaml/handlers/resourceServers.js +8 -13
  101. package/lib/context/yaml/handlers/roles.d.ts +2 -3
  102. package/lib/context/yaml/handlers/roles.js +13 -11
  103. package/lib/context/yaml/handlers/rules.d.ts +2 -3
  104. package/lib/context/yaml/handlers/rules.js +18 -17
  105. package/lib/context/yaml/handlers/rulesConfigs.d.ts +2 -3
  106. package/lib/context/yaml/handlers/rulesConfigs.js +9 -5
  107. package/lib/context/yaml/handlers/tenant.d.ts +2 -3
  108. package/lib/context/yaml/handlers/tenant.js +4 -3
  109. package/lib/context/yaml/handlers/triggers.d.ts +2 -3
  110. package/lib/context/yaml/handlers/triggers.js +2 -2
  111. package/lib/context/yaml/index.js +2 -1
  112. package/lib/index.d.ts +1 -0
  113. package/lib/tools/auth0/handlers/actions.js +3 -3
  114. package/lib/tools/auth0/handlers/branding.d.ts +2 -2
  115. package/lib/tools/auth0/handlers/clientGrants.js +1 -1
  116. package/lib/tools/auth0/handlers/connections.js +1 -1
  117. package/lib/tools/auth0/handlers/default.js +10 -2
  118. package/lib/tools/auth0/handlers/index.d.ts +5 -0
  119. package/lib/tools/auth0/handlers/index.js +2 -0
  120. package/lib/tools/auth0/handlers/logStreams.d.ts +40 -0
  121. package/lib/tools/auth0/handlers/logStreams.js +77 -0
  122. package/lib/tools/auth0/handlers/organizations.js +1 -1
  123. package/lib/tools/auth0/handlers/resourceServers.js +1 -1
  124. package/lib/tools/auth0/handlers/roles.js +1 -1
  125. package/lib/tools/auth0/handlers/rules.js +1 -1
  126. package/lib/tools/auth0/index.js +5 -2
  127. package/lib/tools/calculateChanges.d.ts +2 -2
  128. package/lib/tools/calculateChanges.js +2 -2
  129. package/lib/tools/constants.d.ts +1 -0
  130. package/lib/tools/constants.js +1 -0
  131. package/lib/tools/index.d.ts +1 -0
  132. package/lib/tools/utils.d.ts +9 -0
  133. package/lib/tools/utils.js +34 -2
  134. package/lib/types.d.ts +39 -29
  135. package/lib/utils.d.ts +34 -28
  136. package/lib/utils.js +1 -1
  137. package/package.json +11 -8
@@ -1,6 +1,5 @@
1
1
  import { YAMLHandler } from '.';
2
- declare type ParsedResourceServers = {
3
- resourceServers: unknown[];
4
- };
2
+ import { Asset, ParsedAsset } from '../../../types';
3
+ declare type ParsedResourceServers = ParsedAsset<'resourceServers', Asset[]>;
5
4
  declare const resourceServersHandler: YAMLHandler<ParsedResourceServers>;
6
5
  export default resourceServersHandler;
@@ -9,24 +9,19 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
9
9
  });
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- function parse(context) {
12
+ function dumpAndParse(context) {
13
13
  return __awaiter(this, void 0, void 0, function* () {
14
- // nothing to do, set default if empty
14
+ const { resourceServers } = context.assets;
15
+ if (!resourceServers) {
16
+ return { resourceServers: null };
17
+ }
15
18
  return {
16
- resourceServers: context.assets.resourceServers,
17
- };
18
- });
19
- }
20
- function dump(context) {
21
- return __awaiter(this, void 0, void 0, function* () {
22
- // nothing to do, set default if empty
23
- return {
24
- resourceServers: [...(context.assets.resourceServers || [])],
19
+ resourceServers,
25
20
  };
26
21
  });
27
22
  }
28
23
  const resourceServersHandler = {
29
- parse,
30
- dump,
24
+ parse: dumpAndParse,
25
+ dump: dumpAndParse,
31
26
  };
32
27
  exports.default = resourceServersHandler;
@@ -1,6 +1,5 @@
1
1
  import { YAMLHandler } from '.';
2
- declare type ParsedRoles = {
3
- roles: unknown[];
4
- };
2
+ import { Asset, ParsedAsset } from '../../../types';
3
+ declare type ParsedRoles = ParsedAsset<'roles', Asset[]>;
5
4
  declare const rolesHandler: YAMLHandler<ParsedRoles>;
6
5
  export default rolesHandler;
@@ -11,24 +11,26 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  function parse(context) {
13
13
  return __awaiter(this, void 0, void 0, function* () {
14
- // nothing to do, set default empty
14
+ const { roles } = context.assets;
15
+ if (!roles)
16
+ return { roles: null };
15
17
  return {
16
- roles: context.assets.roles,
18
+ roles,
17
19
  };
18
20
  });
19
21
  }
20
22
  function dump(context) {
21
23
  return __awaiter(this, void 0, void 0, function* () {
22
- // remove empty descriptions
24
+ const { roles } = context.assets;
25
+ if (!roles)
26
+ return { roles: null };
23
27
  return {
24
- roles: [
25
- ...(context.assets.roles || []).map((role) => {
26
- if (role.description === null) {
27
- delete role.description;
28
- }
29
- return role;
30
- }),
31
- ],
28
+ roles: roles.map((role) => {
29
+ if (role.description === null) {
30
+ delete role.description;
31
+ }
32
+ return role;
33
+ }),
32
34
  };
33
35
  });
34
36
  }
@@ -1,6 +1,5 @@
1
1
  import { YAMLHandler } from '.';
2
- declare type ParsedRules = {
3
- rules: unknown[];
4
- } | {};
2
+ import { Asset, ParsedAsset } from '../../../types';
3
+ declare type ParsedRules = ParsedAsset<'rules', Asset[]>;
5
4
  declare const rulesHandler: YAMLHandler<ParsedRules>;
6
5
  export default rulesHandler;
@@ -18,32 +18,33 @@ const utils_1 = require("../../../utils");
18
18
  const logger_1 = __importDefault(require("../../../logger"));
19
19
  function parse(context) {
20
20
  return __awaiter(this, void 0, void 0, function* () {
21
- // Load the script file for each rule
22
- if (!context.assets.rules)
23
- return {};
21
+ const { rules } = context.assets;
22
+ if (!rules)
23
+ return { rules: null };
24
24
  return {
25
25
  rules: [
26
- ...context.assets.rules.map((rule) => (Object.assign(Object.assign({}, rule), { script: context.loadFile(rule.script) }))),
26
+ ...rules.map((rule) => (Object.assign(Object.assign({}, rule), { script: context.loadFile(rule.script) }))),
27
27
  ],
28
28
  };
29
29
  });
30
30
  }
31
31
  function dump(context) {
32
32
  return __awaiter(this, void 0, void 0, function* () {
33
- let rules = [...(context.assets.rules || [])];
34
- if (rules.length > 0) {
35
- // Create Rules folder
36
- const rulesFolder = path_1.default.join(context.basePath, 'rules');
37
- fs_extra_1.default.ensureDirSync(rulesFolder);
38
- rules = rules.map((rule) => {
39
- // Dump rule to file
40
- const scriptName = (0, utils_1.sanitize)(`${rule.name}.js`);
41
- const scriptFile = path_1.default.join(rulesFolder, scriptName);
42
- logger_1.default.info(`Writing ${scriptFile}`);
43
- fs_extra_1.default.writeFileSync(scriptFile, rule.script);
44
- return Object.assign(Object.assign({}, rule), { script: `./rules/${scriptName}` });
45
- });
33
+ let { rules } = context.assets;
34
+ if (!rules) {
35
+ return { rules: null };
46
36
  }
37
+ // Create Rules folder
38
+ const rulesFolder = path_1.default.join(context.basePath, 'rules');
39
+ fs_extra_1.default.ensureDirSync(rulesFolder);
40
+ rules = rules.map((rule) => {
41
+ // Dump rule to file
42
+ const scriptName = (0, utils_1.sanitize)(`${rule.name}.js`);
43
+ const scriptFile = path_1.default.join(rulesFolder, scriptName);
44
+ logger_1.default.info(`Writing ${scriptFile}`);
45
+ fs_extra_1.default.writeFileSync(scriptFile, rule.script);
46
+ return Object.assign(Object.assign({}, rule), { script: `./rules/${scriptName}` });
47
+ });
47
48
  return { rules };
48
49
  });
49
50
  }
@@ -1,6 +1,5 @@
1
1
  import { YAMLHandler } from '.';
2
- declare type ParsedRulesConfigs = {
3
- rulesConfigs: unknown[];
4
- } | {};
2
+ import { Asset, ParsedAsset } from '../../../types';
3
+ declare type ParsedRulesConfigs = ParsedAsset<'rulesConfigs', Asset[]>;
5
4
  declare const rulesConfigsHandler: YAMLHandler<ParsedRulesConfigs>;
6
5
  export default rulesConfigsHandler;
@@ -11,17 +11,21 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  function parse(context) {
13
13
  return __awaiter(this, void 0, void 0, function* () {
14
- // nothing to do, set default if empty
14
+ const { rulesConfigs } = context.assets;
15
+ if (!rulesConfigs)
16
+ return { rulesConfigs: null };
15
17
  return {
16
- rulesConfigs: context.assets.rulesConfigs,
18
+ rulesConfigs,
17
19
  };
18
20
  });
19
21
  }
20
- function dump(_context) {
22
+ function dump(context) {
21
23
  return __awaiter(this, void 0, void 0, function* () {
22
- // do not export rulesConfigs as its values cannot be extracted
24
+ const { rulesConfigs } = context.assets;
25
+ if (!rulesConfigs)
26
+ return { rulesConfigs: null };
23
27
  return {
24
- rulesConfigs: [],
28
+ rulesConfigs: [], // even if they exist, do not export rulesConfigs as its values cannot be extracted
25
29
  };
26
30
  });
27
31
  }
@@ -1,6 +1,5 @@
1
1
  import { YAMLHandler } from '.';
2
- declare type ParsedTenant = {
3
- tenant: unknown[];
4
- } | {};
2
+ import { Asset, ParsedAsset } from '../../../types';
3
+ declare type ParsedTenant = ParsedAsset<'tenant', Asset>;
5
4
  declare const tenantHandler: YAMLHandler<ParsedTenant>;
6
5
  export default tenantHandler;
@@ -24,9 +24,8 @@ const utils_1 = require("../../../utils");
24
24
  const sessionDurationsToMinutes_1 = require("../../../sessionDurationsToMinutes");
25
25
  function parse(context) {
26
26
  return __awaiter(this, void 0, void 0, function* () {
27
- // Nothing to do
28
27
  if (!context.assets.tenant)
29
- return {};
28
+ return { tenant: null };
30
29
  /* eslint-disable camelcase */
31
30
  const _a = context.assets.tenant, { session_lifetime, idle_session_lifetime } = _a, tenant = __rest(_a, ["session_lifetime", "idle_session_lifetime"]);
32
31
  (0, utils_1.clearTenantFlags)(tenant);
@@ -38,7 +37,9 @@ function parse(context) {
38
37
  }
39
38
  function dump(context) {
40
39
  return __awaiter(this, void 0, void 0, function* () {
41
- const tenant = Object.assign({}, (context.assets.tenant || {}));
40
+ const tenant = context.assets.tenant;
41
+ if (!tenant)
42
+ return { tenant: null };
42
43
  (0, utils_1.clearTenantFlags)(tenant);
43
44
  return { tenant };
44
45
  });
@@ -1,6 +1,5 @@
1
1
  import { YAMLHandler } from '.';
2
- declare type ParsedTriggers = {
3
- triggers: unknown[];
4
- } | {};
2
+ import { Asset, ParsedAsset } from '../../../types';
3
+ declare type ParsedTriggers = ParsedAsset<'triggers', Asset[]>;
5
4
  declare const triggersHandler: YAMLHandler<ParsedTriggers>;
6
5
  export default triggersHandler;
@@ -13,7 +13,7 @@ function parse(context) {
13
13
  return __awaiter(this, void 0, void 0, function* () {
14
14
  // Load the script file for each action
15
15
  if (!context.assets.triggers)
16
- return {};
16
+ return { triggers: null };
17
17
  return {
18
18
  triggers: context.assets.triggers,
19
19
  };
@@ -24,7 +24,7 @@ function dump(context) {
24
24
  const { triggers } = context.assets;
25
25
  // Nothing to do
26
26
  if (!triggers)
27
- return {};
27
+ return { triggers: null };
28
28
  return {
29
29
  triggers: triggers,
30
30
  };
@@ -111,7 +111,8 @@ class YAMLContext {
111
111
  try {
112
112
  const data = yield handler.dump(this);
113
113
  if (data) {
114
- logger_1.default.info(`Exporting ${name}`);
114
+ if (data[name] !== null)
115
+ logger_1.default.info(`Exporting ${name}`);
115
116
  Object.entries(data).forEach(([k, v]) => {
116
117
  this.assets[k] = Array.isArray(v)
117
118
  ? v.map(utils_1.formatResults).sort(utils_1.recordsSorter)
package/lib/index.d.ts CHANGED
@@ -76,6 +76,7 @@ declare const _default: {
76
76
  DATABASE_SCRIPTS_IMPORT: string[];
77
77
  EMAIL_TEMPLATES_NAMES: string[];
78
78
  SUPPORTED_BRANDING_TEMPLATES: string[];
79
+ LOG_STREAMS_DIRECTORY: string;
79
80
  };
80
81
  deploy: typeof import("./tools").deploy;
81
82
  keywordReplace: typeof import("./tools").keywordReplace;
@@ -211,12 +211,12 @@ class ActionHandler extends default_1.default {
211
211
  return this.existing;
212
212
  }
213
213
  catch (err) {
214
- if (err.statusCode === 403 || err.statusCode === 404 || err.statusCode === 501) {
215
- return [];
214
+ if (err.statusCode === 404 || err.statusCode === 501) {
215
+ return null;
216
216
  }
217
217
  if (isActionsDisabled(err)) {
218
218
  logger_1.default.info('Skipping actions because it is not enabled.');
219
- return [];
219
+ return null;
220
220
  }
221
221
  throw err;
222
222
  }
@@ -1,5 +1,5 @@
1
1
  import DefaultHandler from './default';
2
- import { Asset } from '../../../types';
2
+ import { Asset, Assets } from '../../../types';
3
3
  export declare const schema: {
4
4
  type: string;
5
5
  properties: {
@@ -23,5 +23,5 @@ export default class BrandingHandler extends DefaultHandler {
23
23
  existing: Asset;
24
24
  constructor(options: DefaultHandler);
25
25
  getType(): Promise<Asset>;
26
- processChanges(assets: any): Promise<void>;
26
+ processChanges(assets: Assets): Promise<void>;
27
27
  }
@@ -93,7 +93,7 @@ class ClientGrantsHandler extends default_1.default {
93
93
  const excludedClientsByNames = (assets.exclude && assets.exclude.clients) || [];
94
94
  const excludedClients = (0, utils_1.convertClientNamesToIds)(excludedClientsByNames, clients);
95
95
  // Convert clients by name to the id
96
- const formatted = assets.clientGrants.map((clientGrant) => {
96
+ const formatted = clientGrants.map((clientGrant) => {
97
97
  const grant = Object.assign({}, clientGrant);
98
98
  const found = clients.find((c) => c.name === grant.client_id);
99
99
  if (found)
@@ -145,7 +145,7 @@ class ConnectionsHandler extends default_1.default {
145
145
  paginate: true,
146
146
  include_totals: true,
147
147
  });
148
- const formatted = assets.connections.map((connection) => (Object.assign(Object.assign(Object.assign({}, connection), this.getFormattedOptions(connection, clients)), { enabled_clients: (0, utils_1.getEnabledClients)(assets, connection, existingConnections, clients) })));
148
+ const formatted = connections.map((connection) => (Object.assign(Object.assign(Object.assign({}, connection), this.getFormattedOptions(connection, clients)), { enabled_clients: (0, utils_1.getEnabledClients)(assets, connection, existingConnections, clients) })));
149
149
  const proposedChanges = yield _super.calcChanges.call(this, Object.assign(Object.assign({}, assets), { connections: formatted }));
150
150
  const proposedChangesWithExcludedProperties = (0, exports.addExcludedConnectionPropertiesToChanges)({
151
151
  proposedChanges,
@@ -69,8 +69,15 @@ class APIHandler {
69
69
  load() {
70
70
  return __awaiter(this, void 0, void 0, function* () {
71
71
  // Load Asset from Tenant
72
- logger_1.default.info(`Retrieving ${this.type} data from Auth0`);
73
- const data = yield this.getType();
72
+ const data = yield (() => __awaiter(this, void 0, void 0, function* () {
73
+ const { data, hadSufficientScopes, requiredScopes } = yield (0, utils_1.detectInsufficientScopeError)(this.getType.bind(this));
74
+ if (!hadSufficientScopes) {
75
+ logger_1.default.warn(`Cannot retrieve ${this.type} due to missing scopes: ${requiredScopes}`);
76
+ return null;
77
+ }
78
+ logger_1.default.info(`Retrieving ${this.type} data from Auth0`);
79
+ return data;
80
+ }))();
74
81
  this.existing = (0, utils_1.obfuscateSensitiveValues)(data, this.sensitiveFieldsToObfuscate);
75
82
  return { [this.type]: this.existing };
76
83
  });
@@ -92,6 +99,7 @@ class APIHandler {
92
99
  return (0, calculateChanges_1.calculateChanges)({
93
100
  handler: this,
94
101
  assets: typeAssets,
102
+ allowDelete: !!this.config('AUTH0_ALLOW_DELETE'),
95
103
  //@ts-ignore TODO: investigate what happens when `existing` is null
96
104
  existing,
97
105
  identifiers: this.identifiers,
@@ -125,5 +125,10 @@ declare const _default: {
125
125
  excludeSchema?: any;
126
126
  schema: any;
127
127
  };
128
+ logStreams: {
129
+ default: typeof APIHandler;
130
+ excludeSchema?: any;
131
+ schema: any;
132
+ };
128
133
  };
129
134
  export default _default;
@@ -50,6 +50,7 @@ const actions = __importStar(require("./actions"));
50
50
  const triggers = __importStar(require("./triggers"));
51
51
  const organizations = __importStar(require("./organizations"));
52
52
  const attackProtection = __importStar(require("./attackProtection"));
53
+ const logStreams = __importStar(require("./logStreams"));
53
54
  const auth0ApiHandlers = {
54
55
  rules,
55
56
  rulesConfigs,
@@ -78,5 +79,6 @@ const auth0ApiHandlers = {
78
79
  triggers,
79
80
  organizations,
80
81
  attackProtection,
82
+ logStreams,
81
83
  };
82
84
  exports.default = auth0ApiHandlers; // TODO: apply stronger types to schema properties
@@ -0,0 +1,40 @@
1
+ import DefaultAPIHandler from './default';
2
+ import { Asset, Assets } from '../../../types';
3
+ export declare const schema: {
4
+ type: string;
5
+ items: {
6
+ type: string;
7
+ properties: {
8
+ id: {
9
+ type: string;
10
+ };
11
+ type: {
12
+ type: string;
13
+ };
14
+ name: {
15
+ type: string;
16
+ };
17
+ status: {
18
+ type: string;
19
+ enum: string[];
20
+ };
21
+ sink: {
22
+ type: string;
23
+ };
24
+ filters: {
25
+ type: string;
26
+ items: {
27
+ type: string;
28
+ };
29
+ };
30
+ };
31
+ required: string[];
32
+ };
33
+ };
34
+ export default class LogStreamsHandler extends DefaultAPIHandler {
35
+ existing: Asset[] | null;
36
+ constructor(config: DefaultAPIHandler);
37
+ objString(item: Asset): string;
38
+ getType(): Promise<Asset>;
39
+ processChanges(assets: Assets): Promise<void>;
40
+ }
@@ -0,0 +1,77 @@
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: 'array',
19
+ items: {
20
+ type: 'object',
21
+ properties: {
22
+ id: { type: 'string' },
23
+ type: { type: 'string' },
24
+ name: { type: 'string' },
25
+ status: { type: 'string', enum: ['active', 'paused', 'suspended'] },
26
+ sink: { type: 'object' },
27
+ filters: {
28
+ type: 'array',
29
+ items: {
30
+ type: 'object',
31
+ },
32
+ },
33
+ },
34
+ required: ['name'],
35
+ },
36
+ };
37
+ class LogStreamsHandler extends default_1.default {
38
+ constructor(config) {
39
+ super(Object.assign(Object.assign({}, config), { type: 'logStreams', stripUpdateFields: ['type'], stripCreateFields: ['status', 'sink.awsPartnerEventSource'], sensitiveFieldsToObfuscate: ['sink.httpAuthorization'] }));
40
+ }
41
+ objString(item) {
42
+ return super.objString(item.name);
43
+ }
44
+ getType() {
45
+ return __awaiter(this, void 0, void 0, function* () {
46
+ if (this.existing) {
47
+ return this.existing;
48
+ }
49
+ const logStreams = yield this.client.logStreams.getAll({ paginate: false });
50
+ const nonSuspendedLogStreams = logStreams.filter((logStream) => logStream.status !== 'suspended');
51
+ this.existing = nonSuspendedLogStreams;
52
+ return nonSuspendedLogStreams;
53
+ });
54
+ }
55
+ processChanges(assets) {
56
+ const _super = Object.create(null, {
57
+ processChanges: { get: () => super.processChanges }
58
+ });
59
+ return __awaiter(this, void 0, void 0, function* () {
60
+ const { logStreams } = assets;
61
+ // Do nothing if not set
62
+ if (!logStreams)
63
+ return;
64
+ // Figure out what needs to be updated vs created
65
+ const changes = yield this.calcChanges(assets).then((changes) => {
66
+ return Object.assign(Object.assign({}, changes), { update: changes.update.map((update) => {
67
+ if (update.type === 'eventbridge' || update.type === 'eventgrid') {
68
+ delete update.sink;
69
+ }
70
+ return update;
71
+ }) });
72
+ });
73
+ yield _super.processChanges.call(this, assets, changes);
74
+ });
75
+ }
76
+ }
77
+ exports.default = LogStreamsHandler;
@@ -237,7 +237,7 @@ class OrganizationsHandler extends default_1.default {
237
237
  assets: organizations,
238
238
  existing,
239
239
  identifiers: ['id', 'name'],
240
- allowDelete: false, //TODO: actually pass in correct allowDelete value
240
+ allowDelete: !!this.config('AUTH0_ALLOW_DELETE'),
241
241
  });
242
242
  logger_1.default.debug(`Start processChanges for organizations [delete:${changes.del.length}] [update:${changes.update.length}], [create:${changes.create.length}]`);
243
243
  const myChanges = [
@@ -83,7 +83,7 @@ class ResourceServersHandler extends default_1.default {
83
83
  assets: resourceServers,
84
84
  existing,
85
85
  identifiers: ['id', 'identifier'],
86
- allowDelete: false, //TODO: actually pass in correct allowDelete value
86
+ allowDelete: !!this.config('AUTH0_ALLOW_DELETE'),
87
87
  });
88
88
  });
89
89
  }
@@ -210,7 +210,7 @@ class RolesHandler extends default_1.default {
210
210
  assets: roles,
211
211
  existing,
212
212
  identifiers: ['id', 'name'],
213
- allowDelete: false, //TODO: actually pass in correct allowDelete value
213
+ allowDelete: !!this.config('AUTH0_ALLOW_DELETE'),
214
214
  });
215
215
  logger_1.default.debug(`Start processChanges for roles [delete:${changes.del.length}] [update:${changes.update.length}], [create:${changes.create.length}]`);
216
216
  const myChanges = [
@@ -89,7 +89,7 @@ class RulesHandler extends default_1.default {
89
89
  assets: rules,
90
90
  existing,
91
91
  identifiers: ['id', 'name'],
92
- allowDelete: false, //TODO: actually pass in correct allowDelete value
92
+ allowDelete: !!this.config('AUTH0_ALLOW_DELETE'),
93
93
  });
94
94
  // Figure out the rules that need to be re-ordered
95
95
  const futureRules = [...create, ...update];
@@ -62,8 +62,11 @@ class Auth0 {
62
62
  }
63
63
  validate() {
64
64
  return __awaiter(this, void 0, void 0, function* () {
65
- const ajv = new ajv_1.default({ useDefaults: true });
66
- const valid = ajv.validate(schema_1.default, this.assets);
65
+ const ajv = new ajv_1.default({ useDefaults: true, nullable: true });
66
+ const nonNullAssets = Object.keys(this.assets)
67
+ .filter((k) => this.assets[k] != null)
68
+ .reduce((a, k) => (Object.assign(Object.assign({}, a), { [k]: this.assets[k] })), {});
69
+ const valid = ajv.validate(schema_1.default, nonNullAssets);
67
70
  if (!valid) {
68
71
  throw new Error(`Schema validation failed loading ${JSON.stringify(ajv.errors, null, 4)}`);
69
72
  }
@@ -6,14 +6,14 @@ import { Asset, CalculatedChanges } from '../types';
6
6
  * @param {T} desiredAssetState
7
7
  * @param {T} currentAssetState
8
8
  * @param {string[]} [objectFields=[]]
9
- * @param {boolean} [allowDelete=false]
9
+ * @param {boolean} [allowDelete]
10
10
  * @returns T
11
11
  */
12
12
  export declare function processChangedObjectFields({ handler, desiredAssetState, currentAssetState, allowDelete, }: {
13
13
  handler: APIHandler;
14
14
  desiredAssetState: Asset;
15
15
  currentAssetState: Asset;
16
- allowDelete?: boolean;
16
+ allowDelete: boolean;
17
17
  }): {
18
18
  [x: string]: any;
19
19
  };
@@ -11,10 +11,10 @@ const logger_1 = __importDefault(require("../logger"));
11
11
  * @param {T} desiredAssetState
12
12
  * @param {T} currentAssetState
13
13
  * @param {string[]} [objectFields=[]]
14
- * @param {boolean} [allowDelete=false]
14
+ * @param {boolean} [allowDelete]
15
15
  * @returns T
16
16
  */
17
- function processChangedObjectFields({ handler, desiredAssetState, currentAssetState, allowDelete = false, }) {
17
+ function processChangedObjectFields({ handler, desiredAssetState, currentAssetState, allowDelete, }) {
18
18
  const desiredAssetStateWithChanges = Object.assign({}, desiredAssetState);
19
19
  // eslint-disable-next-line no-restricted-syntax
20
20
  for (const fieldName of handler.objectFields) {
@@ -67,5 +67,6 @@ declare const constants: {
67
67
  DATABASE_SCRIPTS_IMPORT: string[];
68
68
  EMAIL_TEMPLATES_NAMES: string[];
69
69
  SUPPORTED_BRANDING_TEMPLATES: string[];
70
+ LOG_STREAMS_DIRECTORY: string;
70
71
  };
71
72
  export default constants;
@@ -164,5 +164,6 @@ const constants = {
164
164
  `${EMAIL_USER_INVITATION}.html`,
165
165
  ],
166
166
  SUPPORTED_BRANDING_TEMPLATES: [UNIVERSAL_LOGIN_TEMPLATE],
167
+ LOG_STREAMS_DIRECTORY: 'log-streams',
167
168
  };
168
169
  exports.default = constants;
@@ -72,6 +72,7 @@ declare const _default: {
72
72
  DATABASE_SCRIPTS_IMPORT: string[];
73
73
  EMAIL_TEMPLATES_NAMES: string[];
74
74
  SUPPORTED_BRANDING_TEMPLATES: string[];
75
+ LOG_STREAMS_DIRECTORY: string;
75
76
  };
76
77
  deploy: typeof deploy;
77
78
  keywordReplace: typeof keywordReplace;
@@ -16,3 +16,12 @@ export declare function filterExcluded(changes: CalculatedChanges, exclude: stri
16
16
  export declare function areArraysEquals(x: any[], y: any[]): boolean;
17
17
  export declare const obfuscateSensitiveValues: (data: Asset | Asset[] | null, sensitiveFieldsToObfuscate: string[]) => Asset | Asset[] | null;
18
18
  export declare const stripObfuscatedFieldsFromPayload: (data: Asset | Asset[] | null, obfuscatedFields: string[]) => Asset | Asset[] | null;
19
+ export declare const detectInsufficientScopeError: <T>(fn: Function) => Promise<{
20
+ hadSufficientScopes: true;
21
+ data: T;
22
+ requiredScopes: [];
23
+ } | {
24
+ hadSufficientScopes: false;
25
+ requiredScopes: string[];
26
+ data: null;
27
+ }>;