auth0-deploy-cli 7.7.1 → 7.10.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 (134) hide show
  1. package/CHANGELOG.md +40 -1
  2. package/README.md +2 -2
  3. package/lib/args.d.ts +29 -0
  4. package/lib/commands/export.d.ts +2 -0
  5. package/lib/commands/import.d.ts +2 -0
  6. package/lib/commands/index.d.ts +9 -0
  7. package/lib/configFactory.d.ts +7 -0
  8. package/lib/context/defaults.d.ts +1 -0
  9. package/lib/context/directory/handlers/actions.d.ts +6 -0
  10. package/lib/context/directory/handlers/attackProtection.d.ts +10 -0
  11. package/lib/context/directory/handlers/branding.d.ts +6 -0
  12. package/lib/context/directory/handlers/branding.js +55 -21
  13. package/lib/context/directory/handlers/clientGrants.d.ts +6 -0
  14. package/lib/context/directory/handlers/clients.d.ts +6 -0
  15. package/lib/context/directory/handlers/connections.d.ts +6 -0
  16. package/lib/context/directory/handlers/databases.d.ts +6 -0
  17. package/lib/context/directory/handlers/emailProvider.d.ts +6 -0
  18. package/lib/context/directory/handlers/emailTemplates.d.ts +6 -0
  19. package/lib/context/directory/handlers/guardianFactorProviders.d.ts +6 -0
  20. package/lib/context/directory/handlers/guardianFactorTemplates.d.ts +6 -0
  21. package/lib/context/directory/handlers/guardianFactors.d.ts +6 -0
  22. package/lib/context/directory/handlers/guardianPhoneFactorMessageTypes.d.ts +6 -0
  23. package/lib/context/directory/handlers/guardianPhoneFactorSelectedProvider.d.ts +6 -0
  24. package/lib/context/directory/handlers/guardianPolicies.d.ts +6 -0
  25. package/lib/context/directory/handlers/hooks.d.ts +6 -0
  26. package/lib/context/directory/handlers/index.d.ts +12 -0
  27. package/lib/context/directory/handlers/index.js +2 -0
  28. package/lib/context/directory/handlers/logStreams.d.ts +7 -0
  29. package/lib/context/directory/handlers/logStreams.js +49 -0
  30. package/lib/context/directory/handlers/migrations.d.ts +6 -0
  31. package/lib/context/directory/handlers/organizations.d.ts +6 -0
  32. package/lib/context/directory/handlers/pages.d.ts +6 -0
  33. package/lib/context/directory/handlers/resourceServers.d.ts +6 -0
  34. package/lib/context/directory/handlers/roles.d.ts +6 -0
  35. package/lib/context/directory/handlers/rules.d.ts +6 -0
  36. package/lib/context/directory/handlers/rulesConfigs.d.ts +6 -0
  37. package/lib/context/directory/handlers/tenant.d.ts +10 -0
  38. package/lib/context/directory/handlers/triggers.d.ts +6 -0
  39. package/lib/context/directory/index.d.ts +17 -0
  40. package/lib/context/index.d.ts +4 -0
  41. package/lib/context/yaml/handlers/actions.d.ts +6 -0
  42. package/lib/context/yaml/handlers/attackProtection.d.ts +6 -0
  43. package/lib/context/yaml/handlers/branding.d.ts +13 -0
  44. package/lib/context/yaml/handlers/branding.js +23 -6
  45. package/lib/context/yaml/handlers/clientGrants.d.ts +6 -0
  46. package/lib/context/yaml/handlers/clients.d.ts +6 -0
  47. package/lib/context/yaml/handlers/connections.d.ts +6 -0
  48. package/lib/context/yaml/handlers/databases.d.ts +6 -0
  49. package/lib/context/yaml/handlers/emailProvider.d.ts +6 -0
  50. package/lib/context/yaml/handlers/emailTemplates.d.ts +6 -0
  51. package/lib/context/yaml/handlers/guardianFactorProviders.d.ts +6 -0
  52. package/lib/context/yaml/handlers/guardianFactorTemplates.d.ts +6 -0
  53. package/lib/context/yaml/handlers/guardianFactors.d.ts +6 -0
  54. package/lib/context/yaml/handlers/guardianPhoneFactorMessageTypes.d.ts +6 -0
  55. package/lib/context/yaml/handlers/guardianPhoneFactorSelectedProvider.d.ts +6 -0
  56. package/lib/context/yaml/handlers/guardianPolicies.d.ts +6 -0
  57. package/lib/context/yaml/handlers/hooks.d.ts +6 -0
  58. package/lib/context/yaml/handlers/index.d.ts +12 -0
  59. package/lib/context/yaml/handlers/index.js +2 -0
  60. package/lib/context/yaml/handlers/logStreams.d.ts +7 -0
  61. package/lib/context/yaml/handlers/logStreams.js +23 -0
  62. package/lib/context/yaml/handlers/migrations.d.ts +6 -0
  63. package/lib/context/yaml/handlers/organizations.d.ts +6 -0
  64. package/lib/context/yaml/handlers/pages.d.ts +6 -0
  65. package/lib/context/yaml/handlers/resourceServers.d.ts +6 -0
  66. package/lib/context/yaml/handlers/roles.d.ts +6 -0
  67. package/lib/context/yaml/handlers/rules.d.ts +6 -0
  68. package/lib/context/yaml/handlers/rulesConfigs.d.ts +6 -0
  69. package/lib/context/yaml/handlers/tenant.d.ts +6 -0
  70. package/lib/context/yaml/handlers/triggers.d.ts +6 -0
  71. package/lib/context/yaml/index.d.ts +13 -0
  72. package/lib/index.d.ts +89 -0
  73. package/lib/index.js +5 -2
  74. package/lib/logger.d.ts +2 -0
  75. package/lib/logger.js +7 -17
  76. package/lib/readonly.d.ts +2 -0
  77. package/lib/sessionDurationsToMinutes.d.ts +7 -0
  78. package/lib/tools/auth0/client.d.ts +2 -0
  79. package/lib/tools/auth0/handlers/actions.d.ts +95 -0
  80. package/lib/tools/auth0/handlers/actions.js +1 -1
  81. package/lib/tools/auth0/handlers/attackProtection.d.ts +28 -0
  82. package/lib/tools/auth0/handlers/branding.d.ts +27 -0
  83. package/lib/tools/auth0/handlers/clientGrants.d.ts +32 -0
  84. package/lib/tools/auth0/handlers/clients.d.ts +23 -0
  85. package/lib/tools/auth0/handlers/connections.d.ts +54 -0
  86. package/lib/tools/auth0/handlers/databases.d.ts +36 -0
  87. package/lib/tools/auth0/handlers/default.d.ts +54 -0
  88. package/lib/tools/auth0/handlers/default.js +23 -8
  89. package/lib/tools/auth0/handlers/emailProvider.d.ts +11 -0
  90. package/lib/tools/auth0/handlers/emailTemplates.d.ts +26 -0
  91. package/lib/tools/auth0/handlers/guardianFactorProviders.d.ts +25 -0
  92. package/lib/tools/auth0/handlers/guardianFactorTemplates.d.ts +21 -0
  93. package/lib/tools/auth0/handlers/guardianFactors.d.ts +21 -0
  94. package/lib/tools/auth0/handlers/guardianPhoneFactorMessageTypes.d.ts +21 -0
  95. package/lib/tools/auth0/handlers/guardianPhoneFactorSelectedProvider.d.ts +18 -0
  96. package/lib/tools/auth0/handlers/guardianPolicies.d.ts +23 -0
  97. package/lib/tools/auth0/handlers/hooks.d.ts +58 -0
  98. package/lib/tools/auth0/handlers/index.d.ts +134 -0
  99. package/lib/tools/auth0/handlers/index.js +2 -0
  100. package/lib/tools/auth0/handlers/logStreams.d.ts +40 -0
  101. package/lib/tools/auth0/handlers/logStreams.js +77 -0
  102. package/lib/tools/auth0/handlers/migrations.d.ts +15 -0
  103. package/lib/tools/auth0/handlers/migrations.js +1 -1
  104. package/lib/tools/auth0/handlers/organizations.d.ts +51 -0
  105. package/lib/tools/auth0/handlers/organizations.js +2 -2
  106. package/lib/tools/auth0/handlers/pages.d.ts +42 -0
  107. package/lib/tools/auth0/handlers/prompts.d.ts +11 -0
  108. package/lib/tools/auth0/handlers/resourceServers.d.ts +51 -0
  109. package/lib/tools/auth0/handlers/resourceServers.js +1 -1
  110. package/lib/tools/auth0/handlers/roles.d.ts +48 -0
  111. package/lib/tools/auth0/handlers/roles.js +2 -2
  112. package/lib/tools/auth0/handlers/rules.d.ts +55 -0
  113. package/lib/tools/auth0/handlers/rules.js +2 -2
  114. package/lib/tools/auth0/handlers/rulesConfigs.d.ts +25 -0
  115. package/lib/tools/auth0/handlers/tenant.d.ts +11 -0
  116. package/lib/tools/auth0/handlers/triggers.d.ts +35 -0
  117. package/lib/tools/auth0/handlers/triggers.js +1 -1
  118. package/lib/tools/auth0/index.d.ts +15 -0
  119. package/lib/tools/auth0/schema.d.ts +15 -0
  120. package/lib/tools/calculateChanges.d.ts +26 -0
  121. package/lib/tools/calculateChanges.js +3 -3
  122. package/lib/tools/constants.d.ts +72 -0
  123. package/lib/tools/constants.js +4 -1
  124. package/lib/tools/deploy.d.ts +3 -0
  125. package/lib/tools/deploy.js +2 -2
  126. package/lib/tools/index.d.ts +83 -0
  127. package/lib/tools/utils.d.ts +18 -0
  128. package/lib/tools/utils.js +36 -3
  129. package/lib/tools/validationError.d.ts +5 -0
  130. package/lib/types.d.ts +257 -0
  131. package/lib/utils.d.ts +67 -0
  132. package/package.json +10 -10
  133. package/tsconfig.json +2 -1
  134. package/lib/tools/logger.js +0 -21
@@ -0,0 +1,72 @@
1
+ declare const constants: {
2
+ CONCURRENT_CALLS: number;
3
+ RULES_DIRECTORY: string;
4
+ RULES_STAGES: string[];
5
+ DEFAULT_RULE_STAGE: string;
6
+ HOOKS_HIDDEN_SECRET_VALUE: string;
7
+ OBFUSCATED_SECRET_VALUE: string;
8
+ HOOKS_DIRECTORY: string;
9
+ ACTIONS_DIRECTORY: string;
10
+ TRIGGERS_DIRECTORY: string;
11
+ RULES_CONFIGS_DIRECTORY: string;
12
+ PAGES_DIRECTORY: string;
13
+ PAGE_LOGIN: string;
14
+ PAGE_GUARDIAN_MULTIFACTOR: string;
15
+ PAGE_PASSWORD_RESET: string;
16
+ PAGE_ERROR: string;
17
+ DATABASE_CONNECTIONS_DIRECTORY: string;
18
+ DATABASE_SCRIPTS_CHANGE_EMAIL: string;
19
+ DATABASE_SCRIPTS_GET_USER: string;
20
+ EMAIL_TEMPLATES_TYPES: string[];
21
+ ACTIONS_TRIGGERS: string[];
22
+ EMAIL_TEMPLATES_DIRECTORY: string;
23
+ EMAIL_VERIFY: string;
24
+ EMAIL_VERIFY_BY_CODE: string;
25
+ EMAIL_RESET: string;
26
+ EMAIL_WELCOME: string;
27
+ EMAIL_BLOCKED: string;
28
+ EMAIL_STOLEN_CREDENTIALS: string;
29
+ EMAIL_ENROLLMENT: string;
30
+ EMAIL_CHANGE_PASSWORD: string;
31
+ EMAIL_PASSWORD_RESET: string;
32
+ EMAIL_MFA_OOB_CODE: string;
33
+ EMAIL_USER_INVITATION: string;
34
+ GUARDIAN_DIRECTORY: string;
35
+ GUARDIAN_FACTORS_DIRECTORY: string;
36
+ GUARDIAN_PROVIDERS_DIRECTORY: string;
37
+ GUARDIAN_TEMPLATES_DIRECTORY: string;
38
+ UNIVERSAL_LOGIN_TEMPLATE: string;
39
+ RESOURCE_SERVERS_DIRECTORY: string;
40
+ RESOURCE_SERVERS_CLIENT_NAME: string;
41
+ RESOURCE_SERVERS_MANAGEMENT_API_NAME: string;
42
+ RESOURCE_SERVERS_ID_NAME: string;
43
+ CLIENTS_DIRECTORY: string;
44
+ CLIENTS_GRANTS_DIRECTORY: string;
45
+ BRANDING_DIRECTORY: string;
46
+ BRANDING_TEMPLATES_DIRECTORY: string;
47
+ BRANDING_TEMPLATES_YAML_DIRECTORY: string;
48
+ CLIENTS_CLIENT_NAME: string;
49
+ CLIENTS_CLIENT_ID_NAME: string;
50
+ CONNECTIONS_DIRECTORY: string;
51
+ CONNECTIONS_CLIENT_NAME: string;
52
+ CONNECTIONS_ID_NAME: string;
53
+ ROLES_DIRECTORY: string;
54
+ ATTACK_PROTECTION_DIRECTORY: string;
55
+ GUARDIAN_FACTORS: string[];
56
+ GUARDIAN_POLICIES: string[];
57
+ GUARDIAN_PHONE_PROVIDERS: string[];
58
+ GUARDIAN_PHONE_MESSAGE_TYPES: string[];
59
+ GUARDIAN_FACTOR_TEMPLATES: string[];
60
+ GUARDIAN_FACTOR_PROVIDERS: {
61
+ sms: string[];
62
+ 'push-notification': string[];
63
+ };
64
+ PAGE_NAMES: string[];
65
+ DATABASE_SCRIPTS: string[];
66
+ DATABASE_SCRIPTS_NO_IMPORT: string[];
67
+ DATABASE_SCRIPTS_IMPORT: string[];
68
+ EMAIL_TEMPLATES_NAMES: string[];
69
+ SUPPORTED_BRANDING_TEMPLATES: string[];
70
+ LOG_STREAMS_DIRECTORY: string;
71
+ };
72
+ export default constants;
@@ -19,12 +19,14 @@ const EMAIL_PASSWORD_RESET = 'password_reset';
19
19
  const EMAIL_MFA_OOB_CODE = 'mfa_oob_code';
20
20
  const EMAIL_USER_INVITATION = 'user_invitation';
21
21
  const UNIVERSAL_LOGIN_TEMPLATE = 'universal_login';
22
+ const OBFUSCATED_SECRET_VALUE = '_VALUE_NOT_SHOWN_';
22
23
  const constants = {
23
24
  CONCURRENT_CALLS: 5,
24
25
  RULES_DIRECTORY: 'rules',
25
26
  RULES_STAGES,
26
27
  DEFAULT_RULE_STAGE: RULES_STAGES[0],
27
- HOOKS_HIDDEN_SECRET_VALUE: '_VALUE_NOT_SHOWN_',
28
+ HOOKS_HIDDEN_SECRET_VALUE: OBFUSCATED_SECRET_VALUE,
29
+ OBFUSCATED_SECRET_VALUE,
28
30
  HOOKS_DIRECTORY: 'hooks',
29
31
  ACTIONS_DIRECTORY: 'actions',
30
32
  TRIGGERS_DIRECTORY: 'triggers',
@@ -162,5 +164,6 @@ const constants = {
162
164
  `${EMAIL_USER_INVITATION}.html`,
163
165
  ],
164
166
  SUPPORTED_BRANDING_TEMPLATES: [UNIVERSAL_LOGIN_TEMPLATE],
167
+ LOG_STREAMS_DIRECTORY: 'log-streams',
165
168
  };
166
169
  exports.default = constants;
@@ -0,0 +1,3 @@
1
+ import { ConfigFunction } from '../configFactory';
2
+ import { Assets, Auth0APIClient } from '../types';
3
+ export default function deploy(assets: Assets, client: Auth0APIClient, config: ConfigFunction): Promise<{}>;
@@ -13,11 +13,11 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
13
13
  };
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
15
  const auth0_1 = __importDefault(require("./auth0"));
16
- const logger_1 = __importDefault(require("./logger"));
16
+ const logger_1 = __importDefault(require("../logger"));
17
17
  function deploy(assets, client, config) {
18
18
  return __awaiter(this, void 0, void 0, function* () {
19
19
  // Setup log level
20
- logger_1.default.transports.console.level = process.env.AUTH0_DEBUG === 'true' ? 'debug' : 'info';
20
+ logger_1.default.level = process.env.AUTH0_DEBUG === 'true' ? 'debug' : 'info';
21
21
  logger_1.default.info('Getting access token for ' + config('AUTH0_CLIENT_ID') + '/' + config('AUTH0_DOMAIN'));
22
22
  const auth0 = new auth0_1.default(client, assets, config);
23
23
  // Validate Assets
@@ -0,0 +1,83 @@
1
+ import constants from './constants';
2
+ import deploy from './deploy';
3
+ import Auth0 from './auth0';
4
+ import { keywordReplace, loadFileAndReplaceKeywords } from './utils';
5
+ declare const _default: {
6
+ constants: {
7
+ CONCURRENT_CALLS: number;
8
+ RULES_DIRECTORY: string;
9
+ RULES_STAGES: string[];
10
+ DEFAULT_RULE_STAGE: string;
11
+ HOOKS_HIDDEN_SECRET_VALUE: string;
12
+ OBFUSCATED_SECRET_VALUE: string;
13
+ HOOKS_DIRECTORY: string;
14
+ ACTIONS_DIRECTORY: string;
15
+ TRIGGERS_DIRECTORY: string;
16
+ RULES_CONFIGS_DIRECTORY: string;
17
+ PAGES_DIRECTORY: string;
18
+ PAGE_LOGIN: string;
19
+ PAGE_GUARDIAN_MULTIFACTOR: string;
20
+ PAGE_PASSWORD_RESET: string;
21
+ PAGE_ERROR: string;
22
+ DATABASE_CONNECTIONS_DIRECTORY: string;
23
+ DATABASE_SCRIPTS_CHANGE_EMAIL: string;
24
+ DATABASE_SCRIPTS_GET_USER: string;
25
+ EMAIL_TEMPLATES_TYPES: string[];
26
+ ACTIONS_TRIGGERS: string[];
27
+ EMAIL_TEMPLATES_DIRECTORY: string;
28
+ EMAIL_VERIFY: string;
29
+ EMAIL_VERIFY_BY_CODE: string;
30
+ EMAIL_RESET: string;
31
+ EMAIL_WELCOME: string;
32
+ EMAIL_BLOCKED: string;
33
+ EMAIL_STOLEN_CREDENTIALS: string;
34
+ EMAIL_ENROLLMENT: string;
35
+ EMAIL_CHANGE_PASSWORD: string;
36
+ EMAIL_PASSWORD_RESET: string;
37
+ EMAIL_MFA_OOB_CODE: string;
38
+ EMAIL_USER_INVITATION: string;
39
+ GUARDIAN_DIRECTORY: string;
40
+ GUARDIAN_FACTORS_DIRECTORY: string;
41
+ GUARDIAN_PROVIDERS_DIRECTORY: string;
42
+ GUARDIAN_TEMPLATES_DIRECTORY: string;
43
+ UNIVERSAL_LOGIN_TEMPLATE: string;
44
+ RESOURCE_SERVERS_DIRECTORY: string;
45
+ RESOURCE_SERVERS_CLIENT_NAME: string;
46
+ RESOURCE_SERVERS_MANAGEMENT_API_NAME: string;
47
+ RESOURCE_SERVERS_ID_NAME: string;
48
+ CLIENTS_DIRECTORY: string;
49
+ CLIENTS_GRANTS_DIRECTORY: string;
50
+ BRANDING_DIRECTORY: string;
51
+ BRANDING_TEMPLATES_DIRECTORY: string;
52
+ BRANDING_TEMPLATES_YAML_DIRECTORY: string;
53
+ CLIENTS_CLIENT_NAME: string;
54
+ CLIENTS_CLIENT_ID_NAME: string;
55
+ CONNECTIONS_DIRECTORY: string;
56
+ CONNECTIONS_CLIENT_NAME: string;
57
+ CONNECTIONS_ID_NAME: string;
58
+ ROLES_DIRECTORY: string;
59
+ ATTACK_PROTECTION_DIRECTORY: string;
60
+ GUARDIAN_FACTORS: string[];
61
+ GUARDIAN_POLICIES: string[];
62
+ GUARDIAN_PHONE_PROVIDERS: string[];
63
+ GUARDIAN_PHONE_MESSAGE_TYPES: string[];
64
+ GUARDIAN_FACTOR_TEMPLATES: string[];
65
+ GUARDIAN_FACTOR_PROVIDERS: {
66
+ sms: string[];
67
+ 'push-notification': string[];
68
+ };
69
+ PAGE_NAMES: string[];
70
+ DATABASE_SCRIPTS: string[];
71
+ DATABASE_SCRIPTS_NO_IMPORT: string[];
72
+ DATABASE_SCRIPTS_IMPORT: string[];
73
+ EMAIL_TEMPLATES_NAMES: string[];
74
+ SUPPORTED_BRANDING_TEMPLATES: string[];
75
+ LOG_STREAMS_DIRECTORY: string;
76
+ };
77
+ deploy: typeof deploy;
78
+ keywordReplace: typeof keywordReplace;
79
+ loadFileAndReplaceKeywords: typeof loadFileAndReplaceKeywords;
80
+ Auth0: typeof Auth0;
81
+ };
82
+ export default _default;
83
+ export { constants, deploy, keywordReplace, loadFileAndReplaceKeywords, Auth0 };
@@ -0,0 +1,18 @@
1
+ import { Asset, Assets, CalculatedChanges, KeywordMappings } from '../types';
2
+ export declare function keywordArrayReplace(input: string, mappings: KeywordMappings): string;
3
+ export declare function keywordStringReplace(input: string, mappings: KeywordMappings): string;
4
+ export declare function keywordReplace(input: string, mappings: KeywordMappings): string;
5
+ export declare function convertClientNameToId(name: string, clients: Asset[]): string;
6
+ export declare function convertClientNamesToIds(names: string[], clients: Asset[]): string[];
7
+ export declare function loadFileAndReplaceKeywords(file: string, mappings: KeywordMappings): string;
8
+ export declare function flatten(list: any[]): any[];
9
+ export declare function convertJsonToString(obj: {
10
+ [key: string]: any;
11
+ }, spacing?: number): string;
12
+ export declare function stripFields(obj: Asset, fields: string[]): Asset;
13
+ export declare function getEnabledClients(assets: Assets, connection: Asset, existing: Asset[], clients: Asset[]): string[];
14
+ export declare function duplicateItems(arr: Asset[], key: string): Asset[];
15
+ export declare function filterExcluded(changes: CalculatedChanges, exclude: string[]): CalculatedChanges;
16
+ export declare function areArraysEquals(x: any[], y: any[]): boolean;
17
+ export declare const obfuscateSensitiveValues: (data: Asset | Asset[] | null, sensitiveFieldsToObfuscate: string[]) => Asset | Asset[] | null;
18
+ export declare const stripObfuscatedFieldsFromPayload: (data: Asset | Asset[] | null, obfuscatedFields: string[]) => Asset | Asset[] | null;
@@ -26,12 +26,13 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
26
26
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
27
  };
28
28
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.areArraysEquals = exports.filterExcluded = exports.duplicateItems = exports.getEnabledClients = exports.stripFields = exports.convertJsonToString = exports.flatten = exports.loadFileAndReplaceKeywords = exports.convertClientNamesToIds = exports.convertClientNameToId = exports.keywordReplace = exports.keywordStringReplace = exports.keywordArrayReplace = void 0;
29
+ exports.stripObfuscatedFieldsFromPayload = exports.obfuscateSensitiveValues = exports.areArraysEquals = exports.filterExcluded = exports.duplicateItems = exports.getEnabledClients = exports.stripFields = exports.convertJsonToString = exports.flatten = exports.loadFileAndReplaceKeywords = exports.convertClientNamesToIds = exports.convertClientNameToId = exports.keywordReplace = exports.keywordStringReplace = exports.keywordArrayReplace = void 0;
30
30
  const path_1 = __importDefault(require("path"));
31
31
  const fs_1 = __importStar(require("fs"));
32
32
  const dot_prop_1 = __importDefault(require("dot-prop"));
33
33
  const lodash_1 = __importDefault(require("lodash"));
34
- const logger_1 = __importDefault(require("./logger"));
34
+ const logger_1 = __importDefault(require("../logger"));
35
+ const constants_1 = __importDefault(require("./constants"));
35
36
  function keywordArrayReplace(input, mappings) {
36
37
  Object.keys(mappings).forEach(function (key) {
37
38
  // Matching against two sets of patterns because a developer may provide their array replacement keyword with or without wrapping quotes. It is not obvious to the developer which to do depending if they're operating in YAML or JSON.
@@ -55,8 +56,8 @@ exports.keywordStringReplace = keywordStringReplace;
55
56
  function keywordReplace(input, mappings) {
56
57
  // Replace keywords with mappings within input.
57
58
  if (mappings && Object.keys(mappings).length > 0) {
58
- input = keywordStringReplace(input, mappings);
59
59
  input = keywordArrayReplace(input, mappings);
60
+ input = keywordStringReplace(input, mappings);
60
61
  }
61
62
  return input;
62
63
  }
@@ -175,3 +176,35 @@ function areArraysEquals(x, y) {
175
176
  return lodash_1.default.isEqual(x && x.sort(), y && y.sort());
176
177
  }
177
178
  exports.areArraysEquals = areArraysEquals;
179
+ const obfuscateSensitiveValues = (data, sensitiveFieldsToObfuscate) => {
180
+ if (data === null)
181
+ return data;
182
+ if (Array.isArray(data)) {
183
+ return data.map((asset) => (0, exports.obfuscateSensitiveValues)(asset, sensitiveFieldsToObfuscate));
184
+ }
185
+ const newAsset = Object.assign({}, data);
186
+ sensitiveFieldsToObfuscate.forEach((sensitiveField) => {
187
+ if (dot_prop_1.default.get(newAsset, sensitiveField) !== undefined) {
188
+ dot_prop_1.default.set(newAsset, sensitiveField, constants_1.default.OBFUSCATED_SECRET_VALUE);
189
+ }
190
+ });
191
+ return newAsset;
192
+ };
193
+ exports.obfuscateSensitiveValues = obfuscateSensitiveValues;
194
+ // The reverse of `obfuscateSensitiveValues()`, preventing an obfuscated value from being passed to the API
195
+ const stripObfuscatedFieldsFromPayload = (data, obfuscatedFields) => {
196
+ if (data === null)
197
+ return data;
198
+ if (Array.isArray(data)) {
199
+ return data.map((asset) => (0, exports.stripObfuscatedFieldsFromPayload)(asset, obfuscatedFields));
200
+ }
201
+ const newAsset = Object.assign({}, data);
202
+ obfuscatedFields.forEach((sensitiveField) => {
203
+ const obfuscatedFieldValue = dot_prop_1.default.get(newAsset, sensitiveField);
204
+ if (obfuscatedFieldValue === constants_1.default.OBFUSCATED_SECRET_VALUE) {
205
+ dot_prop_1.default.delete(newAsset, sensitiveField);
206
+ }
207
+ });
208
+ return newAsset;
209
+ };
210
+ exports.stripObfuscatedFieldsFromPayload = stripObfuscatedFieldsFromPayload;
@@ -0,0 +1,5 @@
1
+ declare function ValidationError(message: string): void;
2
+ declare namespace ValidationError {
3
+ var prototype: any;
4
+ }
5
+ export default ValidationError;
package/lib/types.d.ts ADDED
@@ -0,0 +1,257 @@
1
+ declare type SharedPaginationParams = {
2
+ checkpoint?: boolean;
3
+ paginate?: boolean;
4
+ is_global?: boolean;
5
+ include_totals?: boolean;
6
+ id?: string;
7
+ strategy?: 'auth0';
8
+ };
9
+ export declare type CheckpointPaginationParams = SharedPaginationParams & {
10
+ from: string;
11
+ take: number;
12
+ };
13
+ export declare type PagePaginationParams = SharedPaginationParams & {
14
+ page: number;
15
+ per_page: number;
16
+ };
17
+ declare type APIClientBaseFunctions = {
18
+ getAll: (arg0: SharedPaginationParams) => Promise<Asset[]>;
19
+ create: (arg0: {
20
+ id: string;
21
+ }) => Promise<Asset>;
22
+ update: (arg0: {}, arg1: Asset) => Promise<Asset>;
23
+ delete: (arg0: Asset) => Promise<void>;
24
+ };
25
+ export declare type ApiResponse = {
26
+ start: number;
27
+ limit: number;
28
+ total: number;
29
+ next?: string;
30
+ } & {
31
+ [key in AssetTypes]: Asset[];
32
+ };
33
+ export declare type BaseAuth0APIClient = {
34
+ actions: APIClientBaseFunctions & {
35
+ deploy: ({ id: string }: {
36
+ id: any;
37
+ }) => Promise<void>;
38
+ getAllTriggers: () => Promise<{
39
+ triggers: Asset[];
40
+ }>;
41
+ getTriggerBindings: ({ trigger_id: string }: {
42
+ trigger_id: any;
43
+ }) => Promise<{
44
+ bindings: Asset[];
45
+ }>;
46
+ updateTriggerBindings: ({ trigger_id: string }: {
47
+ trigger_id: any;
48
+ }, { bindings: Object }: {
49
+ bindings: any;
50
+ }) => Promise<{
51
+ bindings: Asset[];
52
+ }>;
53
+ };
54
+ attackProtection: APIClientBaseFunctions & {
55
+ getBreachedPasswordDetectionConfig: () => Promise<Asset>;
56
+ getBruteForceConfig: () => Promise<Asset>;
57
+ getSuspiciousIpThrottlingConfig: () => Promise<Asset>;
58
+ updateBreachedPasswordDetectionConfig: ({}: {}, arg1: Asset) => Promise<void>;
59
+ updateSuspiciousIpThrottlingConfig: ({}: {}, arg1: Asset) => Promise<void>;
60
+ updateBruteForceConfig: ({}: {}, arg1: Asset) => Promise<void>;
61
+ };
62
+ branding: APIClientBaseFunctions & {
63
+ getSettings: () => Promise<Asset>;
64
+ getUniversalLoginTemplate: () => Promise<Asset>;
65
+ updateSettings: ({}: {}, Asset: any) => Promise<void>;
66
+ setUniversalLoginTemplate: ({}: {}, Asset: any) => Promise<void>;
67
+ };
68
+ clients: APIClientBaseFunctions;
69
+ clientGrants: APIClientBaseFunctions;
70
+ connections: APIClientBaseFunctions & {
71
+ get: (arg0: Asset) => Promise<Asset>;
72
+ getAll: (arg0: PagePaginationParams | CheckpointPaginationParams) => Promise<Asset[]>;
73
+ };
74
+ customDomains: APIClientBaseFunctions & {
75
+ getAll: () => Promise<Asset[]>;
76
+ };
77
+ emailProvider: APIClientBaseFunctions & {
78
+ delete: () => Promise<void>;
79
+ get: (arg0: Asset) => Promise<Asset>;
80
+ configure: (arg0: Object, arg1: Object) => Promise<Asset>;
81
+ };
82
+ emailTemplates: APIClientBaseFunctions & {
83
+ get: (arg0: Asset) => Promise<Asset>;
84
+ };
85
+ guardian: APIClientBaseFunctions & {
86
+ getFactorProvider: (arg0: Asset) => Promise<Asset>;
87
+ updateFactorProvider: (arg0: {}, arg1: Asset) => Promise<void>;
88
+ getFactors: () => Promise<Asset[]>;
89
+ updateFactor: (arg0: {}, arg1: Asset) => Promise<void>;
90
+ getPolicies: () => Promise<Asset[]>;
91
+ updatePolicies: (arg0: {}, arg1: Asset) => Promise<void>;
92
+ getFactorTemplates: (arg0: {
93
+ name: string;
94
+ }) => Promise<Asset[]>;
95
+ updateFactorTemplates: (arg0: {}, arg1: Asset) => Promise<void>;
96
+ updatePhoneFactorMessageTypes: (arg0: {}, arg1: Asset) => Promise<void>;
97
+ getPhoneFactorSelectedProvider: () => Promise<Asset[]>;
98
+ getPhoneFactorMessageTypes: () => Promise<Asset[]>;
99
+ updatePhoneFactorSelectedProvider: (arg0: {}, arg1: Asset) => Promise<void>;
100
+ };
101
+ hooks: APIClientBaseFunctions & {
102
+ get: ({ id: string }: {
103
+ id: any;
104
+ }) => Promise<Asset>;
105
+ removeSecrets: (arg0: {}, arg1: Asset) => Promise<void>;
106
+ updateSecrets: (arg0: {}, arg1: Asset) => Promise<void>;
107
+ getSecrets: ({ id: string }: {
108
+ id: any;
109
+ }) => Promise<Promise<Asset[]>>;
110
+ addSecrets: (arg0: {}, arg1: Asset) => Promise<void>;
111
+ };
112
+ logStreams: APIClientBaseFunctions;
113
+ migrations: APIClientBaseFunctions & {
114
+ getMigrations: () => Promise<{
115
+ flags: Asset[];
116
+ }>;
117
+ updateMigrations: (arg0: {
118
+ flags: Asset[];
119
+ }) => Promise<void>;
120
+ };
121
+ organizations: APIClientBaseFunctions & {
122
+ updateEnabledConnection: (arg0: {}, arg1: Asset) => Promise<void>;
123
+ addEnabledConnection: (arg0: {}, arg1: Asset) => Promise<void>;
124
+ removeEnabledConnection: (arg0: Asset) => Promise<void>;
125
+ connections: {
126
+ get: (arg0: Asset) => Promise<Asset>;
127
+ };
128
+ };
129
+ prompts: APIClientBaseFunctions & {
130
+ getSettings: () => Promise<Asset[]>;
131
+ updateSettings: (arg0: {}, arg1: Asset) => Promise<void>;
132
+ };
133
+ resourceServers: APIClientBaseFunctions;
134
+ roles: APIClientBaseFunctions & {
135
+ permissions: APIClientBaseFunctions & {
136
+ delete: (arg0: {
137
+ id: string;
138
+ }, arg1: {
139
+ permissions: Asset[];
140
+ }) => Promise<void>;
141
+ create: (arg0: {
142
+ id: string;
143
+ }, arg1: {
144
+ permissions: Asset[];
145
+ }) => Promise<Asset>;
146
+ };
147
+ };
148
+ rules: APIClientBaseFunctions;
149
+ rulesConfigs: APIClientBaseFunctions & {
150
+ getAll: () => Promise<Asset[]>;
151
+ };
152
+ tenant: APIClientBaseFunctions & {
153
+ getSettings: () => Promise<Asset>;
154
+ updateSettings: (arg0: Asset) => Promise<void>;
155
+ };
156
+ triggers: APIClientBaseFunctions & {
157
+ getTriggerBindings: () => Promise<Asset>;
158
+ };
159
+ updateRule: (arg0: {
160
+ id: string;
161
+ }, arg1: Asset) => Promise<Asset>;
162
+ };
163
+ export declare type Auth0APIClient = BaseAuth0APIClient & {
164
+ pool: {
165
+ addSingleTask: (arg0: {
166
+ data: Object;
167
+ generator: any;
168
+ }) => {
169
+ promise: () => Promise<ApiResponse>;
170
+ };
171
+ addEachTask: (arg0: {
172
+ data: Object;
173
+ generator: any;
174
+ }) => {
175
+ promise: () => Promise<Asset[][]>;
176
+ };
177
+ };
178
+ };
179
+ export declare type Config = {
180
+ AUTH0_DOMAIN: string;
181
+ AUTH0_CLIENT_ID: string;
182
+ AUTH0_CLIENT_SECRET: string;
183
+ AUTH0_INPUT_FILE: string;
184
+ AUTH0_ALLOW_DELETE: boolean;
185
+ AUTH0_EXCLUDED: AssetTypes[];
186
+ EXTENSION_SECRET: string;
187
+ AUTH0_ACCESS_TOKEN?: string;
188
+ AUTH0_BASE_PATH?: string;
189
+ AUTH0_AUDIENCE?: string;
190
+ AUTH0_API_MAX_RETRIES?: number;
191
+ AUTH0_KEYWORD_REPLACE_MAPPINGS?: KeywordMappings;
192
+ AUTH0_EXPORT_IDENTIFIERS?: boolean;
193
+ AUTH0_CONNECTIONS_DIRECTORY?: string;
194
+ EXCLUDED_PROPS?: {
195
+ [key: string]: string[];
196
+ };
197
+ INCLUDED_PROPS?: {
198
+ [key: string]: string[];
199
+ };
200
+ AUTH0_IGNORE_UNAVAILABLE_MIGRATIONS?: boolean;
201
+ AUTH0_EXCLUDED_RULES?: string[];
202
+ AUTH0_EXCLUDED_CLIENTS?: string[];
203
+ AUTH0_EXCLUDED_DATABASES?: string[];
204
+ AUTH0_EXCLUDED_CONNECTIONS?: string[];
205
+ AUTH0_EXCLUDED_RESOURCE_SERVERS?: string[];
206
+ AUTH0_EXCLUDED_DEFAULTS?: string[];
207
+ };
208
+ export declare type Asset = {
209
+ [key: string]: any;
210
+ };
211
+ export declare type Assets = {
212
+ actions: Asset[];
213
+ attackProtection: Asset;
214
+ branding: Asset;
215
+ clients: Asset[];
216
+ clientGrants: Asset[];
217
+ connections: Asset[];
218
+ databases: Asset[];
219
+ emailProvider: Asset;
220
+ emailTemplates: Asset[];
221
+ guardianFactorProviders: Asset[];
222
+ guardianFactors: Asset[];
223
+ guardianFactorTemplates: Asset[];
224
+ guardianPhoneFactorMessageTypes: {
225
+ message_types: Asset[];
226
+ };
227
+ guardianPhoneFactorSelectedProvider: Asset;
228
+ guardianPolicies: {
229
+ policies: Asset[];
230
+ };
231
+ hooks: Asset[];
232
+ logStreams: Asset[];
233
+ migrations: Asset[];
234
+ organizations: Asset[];
235
+ pages: Asset[];
236
+ resourceServers: Asset[];
237
+ roles: Asset[];
238
+ rules: Asset[];
239
+ rulesConfigs: Asset[];
240
+ tenant: Asset;
241
+ triggers: Asset[];
242
+ exclude?: {
243
+ [key: string]: string[];
244
+ };
245
+ clientsOrig: Asset[];
246
+ };
247
+ export declare type CalculatedChanges = {
248
+ del: Asset[];
249
+ update: Asset[];
250
+ conflicts: Asset[];
251
+ create: Asset[];
252
+ };
253
+ export declare type AssetTypes = 'rules' | 'rulesConfigs' | 'hooks' | 'pages' | 'databases' | 'clientGrants' | 'resourceServers' | 'clients' | 'connections' | 'tenant' | 'emailProvider' | 'emailTemplates' | 'guardianFactors' | 'guardianFactorProviders' | 'guardianFactorTemplates' | 'migrations' | 'guardianPhoneFactorMessageTypes' | 'guardianPhoneFactorSelectedProvider' | 'guardianPolicies' | 'roles' | 'actions' | 'organizations' | 'triggers' | 'attackProtection' | 'branding' | 'logStreams';
254
+ export declare type KeywordMappings = {
255
+ [key: string]: (string | number)[] | string | number;
256
+ };
257
+ export {};
package/lib/utils.d.ts ADDED
@@ -0,0 +1,67 @@
1
+ import { Auth0 } from './tools';
2
+ import { Asset, Assets, Config, KeywordMappings } from './types';
3
+ export declare function isDirectory(filePath: string): boolean;
4
+ export declare function isFile(filePath: string): boolean;
5
+ export declare function getFiles(folder: string, exts: string[]): string[];
6
+ export declare function loadJSON(file: string, mappings: KeywordMappings): any;
7
+ export declare function dumpJSON(file: string, mappings: {
8
+ [key: string]: any;
9
+ }): void;
10
+ export declare function existsMustBeDir(folder: string): boolean;
11
+ export declare function toConfigFn(data: Config): (arg0: keyof Config) => any;
12
+ export declare function stripIdentifiers(auth0: Auth0, assets: Assets): {
13
+ actions: Asset[];
14
+ attackProtection: Asset;
15
+ branding: Asset;
16
+ clients: Asset[];
17
+ clientGrants: Asset[];
18
+ connections: Asset[];
19
+ databases: Asset[];
20
+ emailProvider: Asset;
21
+ emailTemplates: Asset[];
22
+ guardianFactorProviders: Asset[];
23
+ guardianFactors: Asset[];
24
+ guardianFactorTemplates: Asset[];
25
+ guardianPhoneFactorMessageTypes: {
26
+ message_types: Asset[];
27
+ };
28
+ guardianPhoneFactorSelectedProvider: Asset;
29
+ guardianPolicies: {
30
+ policies: Asset[];
31
+ };
32
+ hooks: Asset[];
33
+ logStreams: Asset[];
34
+ migrations: Asset[];
35
+ organizations: Asset[];
36
+ pages: Asset[];
37
+ resourceServers: Asset[];
38
+ roles: Asset[];
39
+ rules: Asset[];
40
+ rulesConfigs: Asset[];
41
+ tenant: Asset;
42
+ triggers: Asset[];
43
+ exclude?: {
44
+ [key: string]: string[];
45
+ } | undefined;
46
+ clientsOrig: Asset[];
47
+ };
48
+ export declare function sanitize(str: string): string;
49
+ declare type ImportantFields = {
50
+ name: string | null;
51
+ client_id: string | null;
52
+ audience: string | null;
53
+ template: string | null;
54
+ identifier: string | null;
55
+ strategy: string | null;
56
+ script: string | null;
57
+ stage: string | null;
58
+ id: string | null;
59
+ };
60
+ export declare function formatResults(item: any): Partial<ImportantFields>;
61
+ export declare function recordsSorter(a: Partial<ImportantFields>, b: Partial<ImportantFields>): number;
62
+ export declare function clearTenantFlags(tenant: Asset): void;
63
+ export declare function ensureProp(obj: Asset, props: string): void;
64
+ export declare function clearClientArrays(client: Asset): Asset;
65
+ export declare function convertClientIdToName(clientId: string, knownClients?: Asset[]): string;
66
+ export declare function mapClientID2NameSorted(enabledClients: string[], knownClients: Asset[]): string[];
67
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "auth0-deploy-cli",
3
- "version": "7.7.1",
3
+ "version": "7.10.0",
4
4
  "description": "A command line tool for deploying updates to your Auth0 tenant",
5
5
  "main": "lib/index.js",
6
6
  "bin": {
@@ -40,35 +40,35 @@
40
40
  "global-agent": "^2.1.12",
41
41
  "js-yaml": "^4.1.0",
42
42
  "lodash": "^4.17.20",
43
- "mkdirp": "^0.5.1",
44
- "nconf": "^0.11.0",
43
+ "mkdirp": "^0.5.6",
44
+ "nconf": "^0.11.4",
45
45
  "promise-pool-executor": "^1.1.1",
46
46
  "sanitize-filename": "^1.6.1",
47
47
  "sinon": "^13.0.1",
48
48
  "sinon-chai": "^3.7.0",
49
- "winston": "^2.3.0",
49
+ "winston": "^3.6.0",
50
50
  "yargs": "^15.3.1"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@types/expect": "^24.3.0",
54
54
  "@types/mocha": "^9.1.0",
55
- "@typescript-eslint/parser": "^5.14.0",
56
- "chai": "^4.1.2",
55
+ "chai": "^4.3.6",
56
+ "@typescript-eslint/parser": "^5.18.0",
57
57
  "chai-as-promised": "^7.1.1",
58
58
  "cross-env": "^3.1.4",
59
59
  "eslint": "^7.28.0",
60
60
  "eslint-config-airbnb-base": "^14.2.1",
61
61
  "eslint-config-prettier": "^8.5.0",
62
- "eslint-plugin-import": "^2.20.2",
62
+ "eslint-plugin-import": "^2.25.4",
63
63
  "husky": "^7.0.4",
64
64
  "kacl": "^1.1.1",
65
- "mocha": "^9.1.3",
65
+ "mocha": "^9.2.2",
66
66
  "nyc": "^15.0.1",
67
- "prettier": "^2.6.1",
67
+ "prettier": "^2.6.2",
68
68
  "pretty-quick": "^3.1.3",
69
69
  "rimraf": "^3.0.2",
70
70
  "rmdir-sync": "^1.0.1",
71
71
  "ts-mocha": "^9.0.2",
72
- "typescript": "^4.6.2"
72
+ "typescript": "^4.6.3"
73
73
  }
74
74
  }
package/tsconfig.json CHANGED
@@ -10,7 +10,8 @@
10
10
  "forceConsistentCasingInFileNames": true,
11
11
  "strict": false,
12
12
  "strictNullChecks": true,
13
- "skipLibCheck": true
13
+ "skipLibCheck": true,
14
+ "declaration": true
14
15
  },
15
16
  "include": ["src/**/*"]
16
17
  }