auth0-deploy-cli 8.35.0 → 8.37.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.
@@ -14,9 +14,9 @@ jobs:
14
14
  runs-on: ubuntu-latest
15
15
 
16
16
  steps:
17
- - uses: actions/checkout@v6
17
+ - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
18
18
 
19
- - uses: actions/setup-node@v6
19
+ - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
20
20
  with:
21
21
  node-version: 22.14.0
22
22
  registry-url: https://registry.npmjs.org
package/CHANGELOG.md CHANGED
@@ -7,6 +7,27 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [8.37.0] - 2026-06-17
11
+
12
+ ### Added
13
+
14
+ - Add `invitation_landing_client_id` support to `my_organization_configuration` on the Client entity, with client ID-to-name resolution on export and name-to-ID resolution on import. [#1400]
15
+
16
+ ### Fixed
17
+
18
+ - Remove `enable_custom_domain_in_emails` from managed tenant flags to prevent import failures on tenants without a ready custom domain. [#1401]
19
+ - Remove incorrect `maximum: 10` constraint on Network ACL `priority` field in schema validation. [#1403]
20
+
21
+ ## [8.36.0] - 2026-06-05
22
+
23
+ ### Added
24
+
25
+ - Add optional flag to skip secret masking during export. [#1396]
26
+
27
+ ### Fixed
28
+
29
+ - Remove stale connection files from directory export when connections are deleted. [#1389]
30
+
10
31
  ## [8.35.0] - 2026-05-22
11
32
 
12
33
  ### Added
@@ -1797,9 +1818,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1797
1818
  [#1385]: https://github.com/auth0/auth0-deploy-cli/issues/1385
1798
1819
  [#1386]: https://github.com/auth0/auth0-deploy-cli/issues/1386
1799
1820
  [#1387]: https://github.com/auth0/auth0-deploy-cli/issues/1387
1821
+ [#1389]: https://github.com/auth0/auth0-deploy-cli/issues/1389
1800
1822
  [#1391]: https://github.com/auth0/auth0-deploy-cli/issues/1391
1801
1823
  [#1392]: https://github.com/auth0/auth0-deploy-cli/issues/1392
1802
- [Unreleased]: https://github.com/auth0/auth0-deploy-cli/compare/v8.35.0...HEAD
1824
+ [#1396]: https://github.com/auth0/auth0-deploy-cli/issues/1396
1825
+ [#1400]: https://github.com/auth0/auth0-deploy-cli/issues/1400
1826
+ [#1401]: https://github.com/auth0/auth0-deploy-cli/issues/1401
1827
+ [#1403]: https://github.com/auth0/auth0-deploy-cli/issues/1403
1828
+ [Unreleased]: https://github.com/auth0/auth0-deploy-cli/compare/v8.37.0...HEAD
1829
+ [8.37.0]: https://github.com/auth0/auth0-deploy-cli/compare/v8.36.0...v8.37.0
1830
+ [8.36.0]: https://github.com/auth0/auth0-deploy-cli/compare/v8.35.0...v8.36.0
1803
1831
  [8.35.0]: https://github.com/auth0/auth0-deploy-cli/compare/v8.34.0...v8.35.0
1804
1832
  [8.34.0]: https://github.com/auth0/auth0-deploy-cli/compare/v8.33.0...v8.34.0
1805
1833
  [8.33.0]: https://github.com/auth0/auth0-deploy-cli/compare/v8.32.0...v8.33.0
package/lib/args.d.ts CHANGED
@@ -21,6 +21,7 @@ type ExportSpecificParams = {
21
21
  output_folder: string;
22
22
  export_ids?: boolean;
23
23
  export_ordered?: boolean;
24
+ export_secrets?: boolean;
24
25
  };
25
26
  export type ExportParams = ExportSpecificParams & SharedParams;
26
27
  export type ImportParams = ImportSpecificParams & SharedParams;
package/lib/args.js CHANGED
@@ -103,6 +103,11 @@ function getParams() {
103
103
  describe: 'Order keys in exported JSON files for consistent diffs.',
104
104
  type: 'boolean',
105
105
  },
106
+ export_secrets: {
107
+ describe: 'Export actual secret values instead of placeholder markers.',
108
+ type: 'boolean',
109
+ default: false,
110
+ },
106
111
  })
107
112
  .example('$0 export -c config.json -f yaml -o path/to/export', 'Dump Auth0 config to folder in YAML format')
108
113
  .example('$0 export -c config.json -f directory -o path/to/export', 'Dump Auth0 config to folder in directory format')
@@ -11,7 +11,7 @@ const logger_1 = __importDefault(require("../logger"));
11
11
  const utils_1 = require("../utils");
12
12
  const index_1 = require("../context/index");
13
13
  async function exportCMD(params) {
14
- const { output_folder: outputFolder, base_path: basePath, config_file: configFile, config: configObj, export_ids: exportIds, export_ordered: exportOrdered, secret: clientSecret, env: shouldInheritEnv = false, experimental_ea: experimentalEA, } = params;
14
+ const { output_folder: outputFolder, base_path: basePath, config_file: configFile, config: configObj, export_ids: exportIds, export_ordered: exportOrdered, export_secrets: exportSecrets, secret: clientSecret, env: shouldInheritEnv = false, experimental_ea: experimentalEA, } = params;
15
15
  if (shouldInheritEnv) {
16
16
  nconf_1.default.env().use('memory');
17
17
  }
@@ -36,6 +36,10 @@ async function exportCMD(params) {
36
36
  if (exportOrdered) {
37
37
  overrides.AUTH0_EXPORT_ORDERED = exportOrdered;
38
38
  }
39
+ // Allow passed in export_secrets to override the configured one
40
+ if (exportSecrets) {
41
+ overrides.AUTH0_EXPORT_SECRETS = exportSecrets;
42
+ }
39
43
  // Overrides AUTH0_INCLUDE_EXPERIMENTAL_EA is experimental_ea passed in command line
40
44
  if (experimentalEA) {
41
45
  overrides.AUTH0_EXPERIMENTAL_EA = experimentalEA;
@@ -1,7 +1,8 @@
1
1
  import { AttackProtection } from '../tools/auth0/handlers/attackProtection';
2
- export declare function emailProviderDefaults(emailProvider: any): any;
2
+ import { Config } from '../types';
3
+ export declare function emailProviderDefaults(emailProvider: any, config?: Pick<Config, 'AUTH0_EXPORT_SECRETS'>): any;
3
4
  export declare function phoneProviderDefaults(phoneProvider: any): any;
4
5
  export declare function phoneTemplatesDefaults(phoneTemplate: any): any;
5
- export declare function connectionDefaults(connection: any): any;
6
- export declare function logStreamDefaults(logStreams: any): any;
7
- export declare function attackProtectionDefaults(attackProtection: AttackProtection): AttackProtection;
6
+ export declare function connectionDefaults(connection: any, config?: Pick<Config, 'AUTH0_EXPORT_SECRETS'>): any;
7
+ export declare function logStreamDefaults(logStreams: any, config?: Pick<Config, 'AUTH0_EXPORT_SECRETS'>): any;
8
+ export declare function attackProtectionDefaults(attackProtection: AttackProtection, config?: Pick<Config, 'AUTH0_EXPORT_SECRETS'>): AttackProtection;
@@ -7,9 +7,15 @@ exports.connectionDefaults = connectionDefaults;
7
7
  exports.logStreamDefaults = logStreamDefaults;
8
8
  exports.attackProtectionDefaults = attackProtectionDefaults;
9
9
  const utils_1 = require("../tools/utils");
10
+ // env vars arrive as strings, so check both forms
11
+ function isExportSecrets(config) {
12
+ return (config?.AUTH0_EXPORT_SECRETS === true || config?.AUTH0_EXPORT_SECRETS === 'true');
13
+ }
10
14
  // eslint-disable-next-line import/prefer-default-export
11
- function emailProviderDefaults(emailProvider) {
15
+ function emailProviderDefaults(emailProvider, config) {
12
16
  // eslint-disable-line
17
+ if (isExportSecrets(config))
18
+ return emailProvider;
13
19
  const updated = { ...emailProvider };
14
20
  const apiKeyProviders = ['mailgun', 'mandrill', 'sendgrid', 'sparkpost'];
15
21
  // Add placeholder for credentials as they cannot be exported
@@ -100,8 +106,8 @@ function phoneTemplatesDefaults(phoneTemplate) {
100
106
  });
101
107
  return updated;
102
108
  }
103
- function connectionDefaults(connection) {
104
- if (connection.options) {
109
+ function connectionDefaults(connection, config) {
110
+ if (!isExportSecrets(config) && connection.options) {
105
111
  // Mask secret for key: connection.options.client_secret
106
112
  (0, utils_1.maskSecretAtPath)({
107
113
  resourceTypeName: 'connections',
@@ -112,7 +118,9 @@ function connectionDefaults(connection) {
112
118
  }
113
119
  return connection;
114
120
  }
115
- function logStreamDefaults(logStreams) {
121
+ function logStreamDefaults(logStreams, config) {
122
+ if (isExportSecrets(config))
123
+ return logStreams;
116
124
  // masked sensitive fields
117
125
  const sensitiveKeys = [
118
126
  'httpAuthorization',
@@ -138,7 +146,9 @@ function logStreamDefaults(logStreams) {
138
146
  });
139
147
  return maskedLogStreams;
140
148
  }
141
- function attackProtectionDefaults(attackProtection) {
149
+ function attackProtectionDefaults(attackProtection, config) {
150
+ if (isExportSecrets(config))
151
+ return attackProtection;
142
152
  const { captcha } = attackProtection;
143
153
  if (captcha) {
144
154
  const providersWithSecrets = ['arkose', 'hcaptcha', 'friendly_captcha', 'recaptcha_v2'];
@@ -65,7 +65,7 @@ async function dump(context) {
65
65
  return;
66
66
  const files = attackProtectionFiles(context.filePath);
67
67
  fs_extra_1.default.ensureDirSync(files.directory);
68
- const maskedAttackProtection = (0, defaults_1.attackProtectionDefaults)(attackProtection);
68
+ const maskedAttackProtection = (0, defaults_1.attackProtectionDefaults)(attackProtection, context.config);
69
69
  if (maskedAttackProtection.botDetection) {
70
70
  (0, utils_1.dumpJSON)(files.botDetection, maskedAttackProtection.botDetection);
71
71
  }
@@ -90,6 +90,12 @@ async function dump(context) {
90
90
  client.my_organization_configuration.connection_profile_id =
91
91
  c?.name || myOrganizationConnectionProfileId;
92
92
  }
93
+ const invitationLandingClientId = client.my_organization_configuration.invitation_landing_client_id;
94
+ if (invitationLandingClientId) {
95
+ const c = clients?.find((cl) => cl.client_id === invitationLandingClientId);
96
+ client.my_organization_configuration.invitation_landing_client_id =
97
+ c?.name || invitationLandingClientId;
98
+ }
93
99
  }
94
100
  if (client.app_type === 'express_configuration') {
95
101
  // only keep relevant fields for express configuration
@@ -51,6 +51,14 @@ async function dump(context) {
51
51
  }
52
52
  const connectionsFolder = path_1.default.join(context.filePath, tools_1.constants.CONNECTIONS_DIRECTORY);
53
53
  fs_extra_1.default.ensureDirSync(connectionsFolder);
54
+ // Track files that should remain after dump (written + excluded).
55
+ // Seed from exclude names directly so excluded connections' files are preserved
56
+ // regardless of whether the connection still exists on the tenant.
57
+ const expectedFiles = new Set();
58
+ for (const name of excludedConnections) {
59
+ expectedFiles.add(`${(0, utils_1.sanitize)(name)}.json`);
60
+ expectedFiles.add(`${(0, utils_1.sanitize)(name)}.html`);
61
+ }
54
62
  // Convert enabled_clients from id to name
55
63
  connections.forEach((connection) => {
56
64
  let dumpedConnection = {
@@ -62,7 +70,7 @@ async function dump(context) {
62
70
  };
63
71
  const connectionName = (0, utils_1.sanitize)(dumpedConnection.name);
64
72
  // Mask secrets
65
- dumpedConnection = (0, defaults_1.connectionDefaults)(dumpedConnection);
73
+ dumpedConnection = (0, defaults_1.connectionDefaults)(dumpedConnection, context.config);
66
74
  if (dumpedConnection.strategy === 'email') {
67
75
  (0, utils_1.ensureProp)(dumpedConnection, 'options.email.body');
68
76
  const html = dumpedConnection.options.email.body;
@@ -81,7 +89,19 @@ async function dump(context) {
81
89
  }
82
90
  const connectionFile = path_1.default.join(connectionsFolder, `${connectionName}.json`);
83
91
  (0, utils_1.dumpJSON)(connectionFile, dumpedConnection);
92
+ expectedFiles.add(`${connectionName}.json`);
93
+ if (dumpedConnection.strategy === 'email')
94
+ expectedFiles.add(`${connectionName}.html`);
84
95
  });
96
+ // Remove files that belong to connections no longer present (and not excluded)
97
+ if (fs_extra_1.default.existsSync(connectionsFolder)) {
98
+ for (const existing of fs_extra_1.default.readdirSync(connectionsFolder)) {
99
+ const fullPath = path_1.default.join(connectionsFolder, existing);
100
+ if (fs_extra_1.default.statSync(fullPath).isFile() && !expectedFiles.has(existing)) {
101
+ fs_extra_1.default.removeSync(fullPath);
102
+ }
103
+ }
104
+ }
85
105
  }
86
106
  const connectionsHandler = {
87
107
  parse,
@@ -31,7 +31,7 @@ async function dump(context) {
31
31
  const excludedDefaults = context.assets.exclude?.defaults || [];
32
32
  if (!excludedDefaults.includes('emailProvider')) {
33
33
  // Add placeholder for credentials as they cannot be exported
34
- return (0, defaults_1.emailProviderDefaults)(context.assets.emailProvider);
34
+ return (0, defaults_1.emailProviderDefaults)(context.assets.emailProvider, context.config);
35
35
  }
36
36
  return context.assets.emailProvider;
37
37
  })();
@@ -31,7 +31,7 @@ async function dump(context) {
31
31
  const logStreamsDirectory = path_1.default.join(context.filePath, tools_1.constants.LOG_STREAMS_DIRECTORY);
32
32
  fs_extra_1.default.ensureDirSync(logStreamsDirectory);
33
33
  // masked sensitive fields
34
- const maskedLogStreams = (0, defaults_1.logStreamDefaults)(logStreams);
34
+ const maskedLogStreams = (0, defaults_1.logStreamDefaults)(logStreams, context.config);
35
35
  maskedLogStreams.forEach((logStream) => {
36
36
  const ruleFile = path_1.default.join(logStreamsDirectory, `${(0, utils_1.sanitize)(logStream.name)}.json`);
37
37
  (0, utils_1.dumpJSON)(ruleFile, logStream);
@@ -126,6 +126,18 @@ class DirectoryContext {
126
126
  else {
127
127
  this.assets = auth0.assets;
128
128
  }
129
+ // Re-attach exclude/include config lost when assets was overwritten above
130
+ this.assets.exclude = {
131
+ rules: this.config.AUTH0_EXCLUDED_RULES || [],
132
+ clients: this.config.AUTH0_EXCLUDED_CLIENTS || [],
133
+ databases: this.config.AUTH0_EXCLUDED_DATABASES || [],
134
+ connections: this.config.AUTH0_EXCLUDED_CONNECTIONS || [],
135
+ resourceServers: this.config.AUTH0_EXCLUDED_RESOURCE_SERVERS || [],
136
+ defaults: this.config.AUTH0_EXCLUDED_DEFAULTS || [],
137
+ };
138
+ this.assets.include = {
139
+ connections: this.config.AUTH0_INCLUDED_CONNECTIONS || [],
140
+ };
129
141
  // Clean known read only fields
130
142
  this.assets = (0, readonly_1.default)(this.assets, this.config);
131
143
  // Copy clients to be used by handlers which require converting client_id to the name
@@ -25,7 +25,7 @@ async function dump(context) {
25
25
  if (captcha) {
26
26
  attackProtectionConfig.captcha = captcha;
27
27
  }
28
- const maskedAttackProtection = (0, defaults_1.attackProtectionDefaults)(attackProtectionConfig);
28
+ const maskedAttackProtection = (0, defaults_1.attackProtectionDefaults)(attackProtectionConfig, context.config);
29
29
  return {
30
30
  attackProtection: maskedAttackProtection,
31
31
  };
@@ -70,6 +70,12 @@ async function dump(context) {
70
70
  client.my_organization_configuration.connection_profile_id =
71
71
  c?.name || myOrganizationConnectionProfileId;
72
72
  }
73
+ const invitationLandingClientId = client?.my_organization_configuration?.invitation_landing_client_id;
74
+ if (client.my_organization_configuration && invitationLandingClientId) {
75
+ const c = clients?.find((cl) => cl.client_id === invitationLandingClientId);
76
+ client.my_organization_configuration.invitation_landing_client_id =
77
+ c?.name || invitationLandingClientId;
78
+ }
73
79
  return client;
74
80
  });
75
81
  return {
@@ -53,7 +53,7 @@ async function dump(context) {
53
53
  }),
54
54
  };
55
55
  // Mask secrets
56
- dumpedConnection = (0, defaults_1.connectionDefaults)(dumpedConnection);
56
+ dumpedConnection = (0, defaults_1.connectionDefaults)(dumpedConnection, context.config);
57
57
  if (dumpedConnection.strategy === 'email') {
58
58
  (0, utils_1.ensureProp)(connection, 'options.email.body');
59
59
  const connectionsFolder = path_1.default.join(context.basePath, tools_1.constants.CONNECTIONS_DIRECTORY);
@@ -17,7 +17,7 @@ async function dump(context) {
17
17
  const excludedDefaults = context.assets.exclude?.defaults || [];
18
18
  if (emailProvider && !excludedDefaults.includes('emailProvider')) {
19
19
  // Add placeholder for credentials as they cannot be exported
20
- return (0, defaults_1.emailProviderDefaults)(emailProvider);
20
+ return (0, defaults_1.emailProviderDefaults)(emailProvider, context.config);
21
21
  }
22
22
  return emailProvider;
23
23
  })();
@@ -14,7 +14,7 @@ async function dump(context) {
14
14
  if (!logStreams)
15
15
  return { logStreams: null };
16
16
  // masked sensitive fields
17
- const maskedLogStreams = (0, defaults_1.logStreamDefaults)(logStreams);
17
+ const maskedLogStreams = (0, defaults_1.logStreamDefaults)(logStreams, context.config);
18
18
  return {
19
19
  logStreams: maskedLogStreams,
20
20
  };
@@ -226,6 +226,10 @@ export declare const schema: {
226
226
  enum: ("allow" | "allow_if_empty")[];
227
227
  description: string;
228
228
  };
229
+ invitation_landing_client_id: {
230
+ type: string;
231
+ description: string;
232
+ };
229
233
  };
230
234
  required: string[];
231
235
  };
@@ -59,6 +59,10 @@ const myOrganizationConfigurationSchema = {
59
59
  enum: Object.values(auth0_1.Management.ClientMyOrganizationDeletionBehaviorEnum),
60
60
  description: 'The deletion behavior for My Organization connections created by this client',
61
61
  },
62
+ invitation_landing_client_id: {
63
+ type: 'string',
64
+ description: 'The client ID of the invitation landing client for the My Organization configuration',
65
+ },
62
66
  },
63
67
  required: ['allowed_strategies', 'connection_deletion_behavior'],
64
68
  };
@@ -651,6 +655,14 @@ class ClientHandler extends default_1.default {
651
655
  client.my_organization_configuration.connection_profile_id = connectionProfile.id;
652
656
  }
653
657
  }
658
+ const invitationLandingClientName = client.my_organization_configuration.invitation_landing_client_id;
659
+ if (invitationLandingClientName) {
660
+ const invitationLandingClient = clientData?.find((c) => c.name === invitationLandingClientName);
661
+ if (invitationLandingClient?.client_id) {
662
+ client.my_organization_configuration.invitation_landing_client_id =
663
+ invitationLandingClient.client_id;
664
+ }
665
+ }
654
666
  return client;
655
667
  });
656
668
  }
@@ -19,7 +19,6 @@ export declare const schema: {
19
19
  priority: {
20
20
  type: string;
21
21
  minimum: number;
22
- maximum: number;
23
22
  };
24
23
  rule: {
25
24
  anyOf: {
@@ -85,7 +84,6 @@ export declare const schema: {
85
84
  };
86
85
  uniqueItems: boolean;
87
86
  minItems: number;
88
- maxItems: number;
89
87
  };
90
88
  geo_country_codes: {
91
89
  type: string;
@@ -94,7 +92,6 @@ export declare const schema: {
94
92
  };
95
93
  uniqueItems: boolean;
96
94
  minItems: number;
97
- maxItems: number;
98
95
  };
99
96
  geo_subdivision_codes: {
100
97
  type: string;
@@ -103,7 +100,6 @@ export declare const schema: {
103
100
  };
104
101
  uniqueItems: boolean;
105
102
  minItems: number;
106
- maxItems: number;
107
103
  };
108
104
  ipv4_cidrs: {
109
105
  type: string;
@@ -112,7 +108,6 @@ export declare const schema: {
112
108
  };
113
109
  uniqueItems: boolean;
114
110
  minItems: number;
115
- maxItems: number;
116
111
  };
117
112
  ipv6_cidrs: {
118
113
  type: string;
@@ -121,7 +116,6 @@ export declare const schema: {
121
116
  };
122
117
  uniqueItems: boolean;
123
118
  minItems: number;
124
- maxItems: number;
125
119
  };
126
120
  ja3_fingerprints: {
127
121
  type: string;
@@ -130,7 +124,6 @@ export declare const schema: {
130
124
  };
131
125
  uniqueItems: boolean;
132
126
  minItems: number;
133
- maxItems: number;
134
127
  };
135
128
  ja4_fingerprints: {
136
129
  type: string;
@@ -139,7 +132,6 @@ export declare const schema: {
139
132
  };
140
133
  uniqueItems: boolean;
141
134
  minItems: number;
142
- maxItems: number;
143
135
  };
144
136
  user_agents: {
145
137
  type: string;
@@ -148,7 +140,6 @@ export declare const schema: {
148
140
  };
149
141
  uniqueItems: boolean;
150
142
  minItems: number;
151
- maxItems: number;
152
143
  };
153
144
  hostnames: {
154
145
  type: string;
@@ -184,7 +175,6 @@ export declare const schema: {
184
175
  };
185
176
  uniqueItems: boolean;
186
177
  minItems: number;
187
- maxItems: number;
188
178
  };
189
179
  geo_country_codes: {
190
180
  type: string;
@@ -193,7 +183,6 @@ export declare const schema: {
193
183
  };
194
184
  uniqueItems: boolean;
195
185
  minItems: number;
196
- maxItems: number;
197
186
  };
198
187
  geo_subdivision_codes: {
199
188
  type: string;
@@ -202,7 +191,6 @@ export declare const schema: {
202
191
  };
203
192
  uniqueItems: boolean;
204
193
  minItems: number;
205
- maxItems: number;
206
194
  };
207
195
  ipv4_cidrs: {
208
196
  type: string;
@@ -211,7 +199,6 @@ export declare const schema: {
211
199
  };
212
200
  uniqueItems: boolean;
213
201
  minItems: number;
214
- maxItems: number;
215
202
  };
216
203
  ipv6_cidrs: {
217
204
  type: string;
@@ -220,7 +207,6 @@ export declare const schema: {
220
207
  };
221
208
  uniqueItems: boolean;
222
209
  minItems: number;
223
- maxItems: number;
224
210
  };
225
211
  ja3_fingerprints: {
226
212
  type: string;
@@ -229,7 +215,6 @@ export declare const schema: {
229
215
  };
230
216
  uniqueItems: boolean;
231
217
  minItems: number;
232
- maxItems: number;
233
218
  };
234
219
  ja4_fingerprints: {
235
220
  type: string;
@@ -238,7 +223,6 @@ export declare const schema: {
238
223
  };
239
224
  uniqueItems: boolean;
240
225
  minItems: number;
241
- maxItems: number;
242
226
  };
243
227
  user_agents: {
244
228
  type: string;
@@ -247,7 +231,6 @@ export declare const schema: {
247
231
  };
248
232
  uniqueItems: boolean;
249
233
  minItems: number;
250
- maxItems: number;
251
234
  };
252
235
  hostnames: {
253
236
  type: string;
@@ -68,7 +68,6 @@ const MatchSchema = {
68
68
  },
69
69
  uniqueItems: true,
70
70
  minItems: 1,
71
- maxItems: 10,
72
71
  },
73
72
  geo_country_codes: {
74
73
  type: 'array',
@@ -77,7 +76,6 @@ const MatchSchema = {
77
76
  },
78
77
  uniqueItems: true,
79
78
  minItems: 1,
80
- maxItems: 10,
81
79
  },
82
80
  geo_subdivision_codes: {
83
81
  type: 'array',
@@ -86,7 +84,6 @@ const MatchSchema = {
86
84
  },
87
85
  uniqueItems: true,
88
86
  minItems: 1,
89
- maxItems: 10,
90
87
  },
91
88
  ipv4_cidrs: {
92
89
  type: 'array',
@@ -95,7 +92,6 @@ const MatchSchema = {
95
92
  },
96
93
  uniqueItems: true,
97
94
  minItems: 1,
98
- maxItems: 10,
99
95
  },
100
96
  ipv6_cidrs: {
101
97
  type: 'array',
@@ -104,7 +100,6 @@ const MatchSchema = {
104
100
  },
105
101
  uniqueItems: true,
106
102
  minItems: 1,
107
- maxItems: 10,
108
103
  },
109
104
  ja3_fingerprints: {
110
105
  type: 'array',
@@ -113,7 +108,6 @@ const MatchSchema = {
113
108
  },
114
109
  uniqueItems: true,
115
110
  minItems: 1,
116
- maxItems: 10,
117
111
  },
118
112
  ja4_fingerprints: {
119
113
  type: 'array',
@@ -122,7 +116,6 @@ const MatchSchema = {
122
116
  },
123
117
  uniqueItems: true,
124
118
  minItems: 1,
125
- maxItems: 10,
126
119
  },
127
120
  user_agents: {
128
121
  type: 'array',
@@ -131,7 +124,6 @@ const MatchSchema = {
131
124
  },
132
125
  uniqueItems: true,
133
126
  minItems: 1,
134
- maxItems: 10,
135
127
  },
136
128
  hostnames: {
137
129
  type: 'array',
@@ -174,7 +166,6 @@ exports.schema = {
174
166
  priority: {
175
167
  type: 'number',
176
168
  minimum: 1,
177
- maximum: 10,
178
169
  },
179
170
  rule: {
180
171
  anyOf: [
@@ -127,7 +127,6 @@ exports.allowedTenantFlags = [
127
127
  'enable_apis_section',
128
128
  'enable_pipeline2',
129
129
  'enable_dynamic_client_registration',
130
- 'enable_custom_domain_in_emails',
131
130
  'allow_legacy_tokeninfo_endpoint',
132
131
  'enable_legacy_profile',
133
132
  'enable_idtoken_api2',
@@ -206,7 +205,7 @@ class TenantHandler extends default_1.default {
206
205
  }
207
206
  // Run after other updates so objected can be referenced such as default directory
208
207
  async processChanges(assets) {
209
- const { tenant } = assets;
208
+ let { tenant } = assets;
210
209
  // Do nothing if not set
211
210
  if (!tenant)
212
211
  return;
@@ -216,6 +215,15 @@ class TenantHandler extends default_1.default {
216
215
  return;
217
216
  }
218
217
  }
218
+ if (tenant.flags?.enable_custom_domain_in_emails !== undefined) {
219
+ logger_1.default.warn('The "enable_custom_domain_in_emails" tenant flag is deprecated and has been removed from management. ' +
220
+ 'It will not be applied during import. ' +
221
+ 'Use the "is_default" field on customDomains to configure the default domain instead.');
222
+ tenant = {
223
+ ...tenant,
224
+ flags: (0, lodash_1.omit)(tenant.flags, 'enable_custom_domain_in_emails'),
225
+ };
226
+ }
219
227
  const updatedTenant = {
220
228
  ...tenant,
221
229
  flags: tenant.flags
@@ -227,11 +235,6 @@ class TenantHandler extends default_1.default {
227
235
  delete updatedTenant.flags;
228
236
  }
229
237
  }
230
- if (tenant.flags?.enable_custom_domain_in_emails !== undefined) {
231
- logger_1.default.warn('The "enable_custom_domain_in_emails" tenant flag is deprecated. ' +
232
- 'Use the "is_default" field on customDomains to configure the default domain instead. ' +
233
- 'The flag will still be applied for now but will be removed in a future release.');
234
- }
235
238
  if (updatedTenant && Object.keys(updatedTenant).length > 0) {
236
239
  const sessionDurations = (0, sessionDurationsToMinutes_1.default)({
237
240
  session_lifetime: updatedTenant?.session_lifetime,
package/lib/types.d.ts CHANGED
@@ -72,6 +72,7 @@ export type Config = {
72
72
  AUTH0_KEYWORD_REPLACE_MAPPINGS?: KeywordMappings;
73
73
  AUTH0_EXPORT_IDENTIFIERS?: boolean;
74
74
  AUTH0_EXPORT_ORDERED?: boolean;
75
+ AUTH0_EXPORT_SECRETS?: boolean;
75
76
  AUTH0_CONNECTIONS_DIRECTORY?: string;
76
77
  AUTH0_DRY_RUN?: boolean | 'preview';
77
78
  AUTH0_DRY_RUN_INTERACTIVE?: boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "auth0-deploy-cli",
3
- "version": "8.35.0",
3
+ "version": "8.37.0",
4
4
  "description": "A command line tool for deploying updates to your Auth0 tenant",
5
5
  "main": "lib/index.js",
6
6
  "bin": {
@@ -35,8 +35,8 @@
35
35
  "dependencies": {
36
36
  "@clack/prompts": "1.3.0",
37
37
  "ajv": "^6.12.6",
38
+ "auth0": "^5.12.0",
38
39
  "chalk": "5.6.2",
39
- "auth0": "^5.9.0",
40
40
  "dot-prop": "^5.3.0",
41
41
  "fs-extra": "^10.1.0",
42
42
  "js-yaml": "^4.1.1",