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.
- package/.github/workflows/npm-publish.yml +2 -2
- package/CHANGELOG.md +29 -1
- package/lib/args.d.ts +1 -0
- package/lib/args.js +5 -0
- package/lib/commands/export.js +5 -1
- package/lib/context/defaults.d.ts +5 -4
- package/lib/context/defaults.js +15 -5
- package/lib/context/directory/handlers/attackProtection.js +1 -1
- package/lib/context/directory/handlers/clients.js +6 -0
- package/lib/context/directory/handlers/connections.js +21 -1
- package/lib/context/directory/handlers/emailProvider.js +1 -1
- package/lib/context/directory/handlers/logStreams.js +1 -1
- package/lib/context/directory/index.js +12 -0
- package/lib/context/yaml/handlers/attackProtection.js +1 -1
- package/lib/context/yaml/handlers/clients.js +6 -0
- package/lib/context/yaml/handlers/connections.js +1 -1
- package/lib/context/yaml/handlers/emailProvider.js +1 -1
- package/lib/context/yaml/handlers/logStreams.js +1 -1
- package/lib/tools/auth0/handlers/clients.d.ts +4 -0
- package/lib/tools/auth0/handlers/clients.js +12 -0
- package/lib/tools/auth0/handlers/networkACLs.d.ts +0 -17
- package/lib/tools/auth0/handlers/networkACLs.js +0 -9
- package/lib/tools/auth0/handlers/tenant.js +10 -7
- package/lib/types.d.ts +1 -0
- package/package.json +2 -2
|
@@ -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
|
-
[
|
|
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')
|
package/lib/commands/export.js
CHANGED
|
@@ -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
|
-
|
|
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;
|
package/lib/context/defaults.js
CHANGED
|
@@ -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
|
};
|
|
@@ -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
|
-
|
|
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.
|
|
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",
|