auth0-deploy-cli 8.27.0 → 8.29.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.
@@ -10,7 +10,7 @@ jobs:
10
10
  working_directory: ~/repo
11
11
  steps:
12
12
  - checkout
13
- - run: npm ci
13
+ - run: npm i
14
14
  - run: AUTH0_HTTP_RECORDINGS="lockdown" npm run test:e2e:node-module
15
15
 
16
16
  e2e_test_as_cli:
@@ -19,7 +19,7 @@ jobs:
19
19
  working_directory: ~/repo
20
20
  steps:
21
21
  - checkout
22
- - run: npm ci
22
+ - run: npm i
23
23
  - run: npm run test:e2e:cli
24
24
 
25
25
  unit_test:
@@ -34,11 +34,11 @@ jobs:
34
34
  - checkout
35
35
  - restore_cache:
36
36
  keys:
37
- - v<< parameters.v >>-npm-deps-{{ checksum "package-lock.json" }}
37
+ - v<< parameters.v >>-npm-deps-{{ checksum "package.json" }}
38
38
  - v<< parameters.v >>-npm-deps-
39
- - run: npm ci
39
+ - run: npm i
40
40
  - save_cache:
41
- key: v<< parameters.v >>-npm-deps-{{ checksum "package-lock.json" }}
41
+ key: v<< parameters.v >>-npm-deps-{{ checksum "package.json" }}
42
42
  paths:
43
43
  - node_modules
44
44
  - run: npm run lint
@@ -90,7 +90,7 @@ jobs:
90
90
  working_directory: ~/repo
91
91
  steps:
92
92
  - checkout
93
- - run: npm ci
93
+ - run: npm i
94
94
  - run: npx tsc --noEmit
95
95
 
96
96
  does_lint_pass:
@@ -99,7 +99,7 @@ jobs:
99
99
  working_directory: ~/repo
100
100
  steps:
101
101
  - checkout
102
- - run: npm ci
102
+ - run: npm i
103
103
  - run: npm run lint
104
104
 
105
105
  workflows:
package/CHANGELOG.md CHANGED
@@ -7,6 +7,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [8.29.0] - 2026-03-03
11
+
12
+ ### Added
13
+
14
+ - Add DPoP support for proof-of-possession mechanism in `resourceServers` (GA) [#1311]
15
+ - Add `supplemental signals` configuration for Akamai integration.(EA) [#1310]
16
+
17
+ ## [8.28.0] - 2026-02-20
18
+
19
+ ### Added
20
+
21
+ - Add support for managing `action-modules`.(EA) [#1302]
22
+ - Add support for managing `modules` in `actions`.(EA) [#1302]
23
+
10
24
  ## [8.27.0] - 2026-02-13
11
25
 
12
26
  ### Added
@@ -1652,7 +1666,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1652
1666
  [#1294]: https://github.com/auth0/auth0-deploy-cli/issues/1294
1653
1667
  [#1297]: https://github.com/auth0/auth0-deploy-cli/issues/1297
1654
1668
  [#1298]: https://github.com/auth0/auth0-deploy-cli/issues/1298
1655
- [Unreleased]: https://github.com/auth0/auth0-deploy-cli/compare/v8.27.0...HEAD
1669
+ [#1302]: https://github.com/auth0/auth0-deploy-cli/issues/1302
1670
+ [#1310]: https://github.com/auth0/auth0-deploy-cli/issues/1310
1671
+ [#1311]: https://github.com/auth0/auth0-deploy-cli/issues/1311
1672
+ [Unreleased]: https://github.com/auth0/auth0-deploy-cli/compare/v8.29.0...HEAD
1673
+ [8.29.0]: https://github.com/auth0/auth0-deploy-cli/compare/v8.28.0...v8.29.0
1674
+ [8.28.0]: https://github.com/auth0/auth0-deploy-cli/compare/v8.27.0...v8.28.0
1656
1675
  [8.27.0]: https://github.com/auth0/auth0-deploy-cli/compare/v8.26.0...v8.27.0
1657
1676
  [8.26.0]: https://github.com/auth0/auth0-deploy-cli/compare/v8.25.0...v8.26.0
1658
1677
  [8.25.0]: https://github.com/auth0/auth0-deploy-cli/compare/v8.24.0...v8.25.0
package/CONTRIBUTING.md CHANGED
@@ -27,7 +27,7 @@ Thank you for your interest in contributing! This guide will help you get starte
27
27
 
28
28
  ```bash
29
29
  # Install dependencies
30
- npm ci
30
+ npm i
31
31
  ```
32
32
 
33
33
  ## Development Workflow
@@ -0,0 +1,5 @@
1
+ import { DirectoryHandler } from '.';
2
+ import { Asset, ParsedAsset } from '../../../types';
3
+ type ParsedActionModules = ParsedAsset<'actionModules', Asset[]>;
4
+ declare const actionModulesHandler: DirectoryHandler<ParsedActionModules>;
5
+ export default actionModulesHandler;
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const path_1 = __importDefault(require("path"));
7
+ const fs_extra_1 = __importDefault(require("fs-extra"));
8
+ const tools_1 = require("../../../tools");
9
+ const utils_1 = require("../../../utils");
10
+ const logger_1 = __importDefault(require("../../../logger"));
11
+ function parse(context) {
12
+ const modulesFolder = path_1.default.join(context.filePath, tools_1.constants.ACTION_MODULES_DIRECTORY);
13
+ if (!(0, utils_1.existsMustBeDir)(modulesFolder))
14
+ return { actionModules: null };
15
+ const files = (0, utils_1.getFiles)(modulesFolder, ['.json']);
16
+ const actionModules = files.map((file) => {
17
+ const module = {
18
+ ...(0, utils_1.loadJSON)(file, {
19
+ mappings: context.mappings,
20
+ disableKeywordReplacement: context.disableKeywordReplacement,
21
+ }),
22
+ };
23
+ const moduleFolder = path_1.default.join(tools_1.constants.ACTION_MODULES_DIRECTORY, `${module.name}`);
24
+ if (module.code) {
25
+ // The `module.code` can be a file path. It needs to be loaded.
26
+ // It can be a relative path, so we need to handle both cases.
27
+ const unixPath = module.code.replace(/[\\/]+/g, '/').replace(/^([a-zA-Z]+:|\.\/)/, '');
28
+ if (fs_extra_1.default.existsSync(unixPath)) {
29
+ module.code = context.loadFile(unixPath, moduleFolder);
30
+ }
31
+ else {
32
+ module.code = context.loadFile(path_1.default.join(context.filePath, module.code), moduleFolder);
33
+ }
34
+ }
35
+ return module;
36
+ });
37
+ return { actionModules };
38
+ }
39
+ function mapSecrets(secrets) {
40
+ if (typeof secrets === 'string') {
41
+ return secrets;
42
+ }
43
+ if (secrets && secrets.length > 0) {
44
+ return secrets.map((secret) => ({ name: secret.name, value: secret.value }));
45
+ }
46
+ return [];
47
+ }
48
+ function mapModuleCode(filePath, module) {
49
+ const { code } = module;
50
+ if (!code) {
51
+ return '';
52
+ }
53
+ const moduleName = (0, utils_1.sanitize)(module.name);
54
+ const moduleFolder = path_1.default.join(filePath, tools_1.constants.ACTION_MODULES_DIRECTORY, `${moduleName}`);
55
+ fs_extra_1.default.ensureDirSync(moduleFolder);
56
+ const codeFile = path_1.default.join(moduleFolder, 'code.js');
57
+ logger_1.default.info(`Writing ${codeFile}`);
58
+ fs_extra_1.default.writeFileSync(codeFile, code);
59
+ return `./${tools_1.constants.ACTION_MODULES_DIRECTORY}/${moduleName}/code.js`;
60
+ }
61
+ function mapToActionModule(filePath, module, includeIdentifiers) {
62
+ return {
63
+ ...(includeIdentifiers && module.id ? { id: module.id } : {}),
64
+ name: module.name,
65
+ code: mapModuleCode(filePath, module),
66
+ dependencies: module.dependencies,
67
+ secrets: mapSecrets(module.secrets),
68
+ actions_using_module_total: module.actions_using_module_total,
69
+ all_changes_published: module.all_changes_published,
70
+ latest_version_number: module.latest_version_number,
71
+ };
72
+ }
73
+ async function dump(context) {
74
+ const { actionModules } = context.assets;
75
+ if (!actionModules)
76
+ return;
77
+ // Create action modules folder
78
+ const modulesFolder = path_1.default.join(context.filePath, tools_1.constants.ACTION_MODULES_DIRECTORY);
79
+ fs_extra_1.default.ensureDirSync(modulesFolder);
80
+ const includeIdentifiers = Boolean(context.config.AUTH0_EXPORT_IDENTIFIERS);
81
+ actionModules.forEach((module) => {
82
+ const name = (0, utils_1.sanitize)(module.name);
83
+ const moduleFile = path_1.default.join(modulesFolder, `${name}.json`);
84
+ (0, utils_1.dumpJSON)(moduleFile, mapToActionModule(context.filePath, module, includeIdentifiers));
85
+ });
86
+ }
87
+ const actionModulesHandler = {
88
+ parse,
89
+ dump,
90
+ };
91
+ exports.default = actionModulesHandler;
@@ -73,6 +73,10 @@ function mapToAction(filePath, action, includeIdentifiers) {
73
73
  supported_triggers: action.supported_triggers,
74
74
  deployed: action.deployed || action.all_changes_deployed,
75
75
  installed_integration_id: action.installed_integration_id,
76
+ modules: action.modules?.map((module) => ({
77
+ module_name: module.module_name,
78
+ module_version_number: module.module_version_number,
79
+ })),
76
80
  };
77
81
  }
78
82
  async function dump(context) {
@@ -20,6 +20,7 @@ const guardianPhoneFactorSelectedProvider_1 = __importDefault(require("./guardia
20
20
  const guardianPolicies_1 = __importDefault(require("./guardianPolicies"));
21
21
  const roles_1 = __importDefault(require("./roles"));
22
22
  const actions_1 = __importDefault(require("./actions"));
23
+ const actionModules_1 = __importDefault(require("./actionModules"));
23
24
  const organizations_1 = __importDefault(require("./organizations"));
24
25
  const triggers_1 = __importDefault(require("./triggers"));
25
26
  const attackProtection_1 = __importDefault(require("./attackProtection"));
@@ -41,6 +42,7 @@ const networkACLs_1 = __importDefault(require("./networkACLs"));
41
42
  const userAttributeProfiles_1 = __importDefault(require("./userAttributeProfiles"));
42
43
  const connectionProfiles_1 = __importDefault(require("./connectionProfiles"));
43
44
  const tokenExchangeProfiles_1 = __importDefault(require("./tokenExchangeProfiles"));
45
+ const supplementalSignals_1 = __importDefault(require("./supplementalSignals"));
44
46
  const selfServiceProfiles_1 = __importDefault(require("./selfServiceProfiles"));
45
47
  const directoryHandlers = {
46
48
  rules: rules_1.default,
@@ -63,6 +65,7 @@ const directoryHandlers = {
63
65
  guardianPolicies: guardianPolicies_1.default,
64
66
  roles: roles_1.default,
65
67
  actions: actions_1.default,
68
+ actionModules: actionModules_1.default,
66
69
  organizations: organizations_1.default,
67
70
  triggers: triggers_1.default,
68
71
  attackProtection: attackProtection_1.default,
@@ -82,5 +85,6 @@ const directoryHandlers = {
82
85
  userAttributeProfiles: userAttributeProfiles_1.default,
83
86
  connectionProfiles: connectionProfiles_1.default,
84
87
  tokenExchangeProfiles: tokenExchangeProfiles_1.default,
88
+ supplementalSignals: supplementalSignals_1.default,
85
89
  };
86
90
  exports.default = directoryHandlers;
@@ -0,0 +1,6 @@
1
+ import { DirectoryHandler } from '.';
2
+ import { ParsedAsset } from '../../../types';
3
+ import { SupplementalSignals } from '../../../tools/auth0/handlers/supplementalSignals';
4
+ type ParsedSupplementalSignals = ParsedAsset<'supplementalSignals', SupplementalSignals>;
5
+ declare const _default: DirectoryHandler<ParsedSupplementalSignals>;
6
+ export default _default;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const path_1 = __importDefault(require("path"));
7
+ const utils_1 = require("../../../utils");
8
+ function parse(context) {
9
+ const baseFolder = path_1.default.join(context.filePath);
10
+ if (!(0, utils_1.existsMustBeDir)(baseFolder))
11
+ return { supplementalSignals: null }; // Skip
12
+ const supplementalSignalsFile = path_1.default.join(baseFolder, 'supplemental-signals.json');
13
+ if (!(0, utils_1.isFile)(supplementalSignalsFile)) {
14
+ return { supplementalSignals: null };
15
+ }
16
+ const supplementalSignals = (0, utils_1.loadJSON)(supplementalSignalsFile, {
17
+ mappings: context.mappings,
18
+ disableKeywordReplacement: context.disableKeywordReplacement,
19
+ });
20
+ return {
21
+ supplementalSignals,
22
+ };
23
+ }
24
+ async function dump(context) {
25
+ const { supplementalSignals } = context.assets;
26
+ if (!supplementalSignals)
27
+ return; // Skip, nothing to dump
28
+ const supplementalSignalsFile = path_1.default.join(context.filePath, 'supplemental-signals.json');
29
+ (0, utils_1.dumpJSON)(supplementalSignalsFile, supplementalSignals);
30
+ }
31
+ exports.default = {
32
+ parse,
33
+ dump,
34
+ };
@@ -0,0 +1,6 @@
1
+ import { YAMLHandler } from '.';
2
+ import { ParsedAsset } from '../../../types';
3
+ import { ActionModule } from '../../../tools/auth0/handlers/actionModules';
4
+ type ParsedActionModules = ParsedAsset<'actionModules', Partial<ActionModule>[]>;
5
+ declare const ActionModulesHandler: YAMLHandler<ParsedActionModules>;
6
+ export default ActionModulesHandler;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const path_1 = __importDefault(require("path"));
7
+ const fs_extra_1 = __importDefault(require("fs-extra"));
8
+ const tools_1 = require("../../../tools");
9
+ const utils_1 = require("../../../utils");
10
+ const logger_1 = __importDefault(require("../../../logger"));
11
+ async function parse(context) {
12
+ const { actionModules } = context.assets;
13
+ if (!actionModules)
14
+ return { actionModules: null };
15
+ return {
16
+ actionModules: [
17
+ ...actionModules.map((module) => ({
18
+ ...module,
19
+ code: context.loadFile(module.code || ''),
20
+ })),
21
+ ],
22
+ };
23
+ }
24
+ function mapSecrets(secrets) {
25
+ if (typeof secrets === 'string') {
26
+ return secrets;
27
+ }
28
+ if (secrets && secrets.length > 0) {
29
+ return secrets.map((secret) => ({ name: secret.name, value: secret.value }));
30
+ }
31
+ return [];
32
+ }
33
+ function mapModuleCode(basePath, module) {
34
+ const { code } = module;
35
+ if (!code) {
36
+ return '';
37
+ }
38
+ const moduleName = (0, utils_1.sanitize)(module.name);
39
+ const modulesFolder = path_1.default.join(basePath, tools_1.constants.ACTION_MODULES_DIRECTORY, moduleName);
40
+ fs_extra_1.default.ensureDirSync(modulesFolder);
41
+ const codeFile = path_1.default.join(modulesFolder, 'code.js');
42
+ logger_1.default.info(`Writing ${codeFile}`);
43
+ fs_extra_1.default.writeFileSync(codeFile, code);
44
+ return `./${tools_1.constants.ACTION_MODULES_DIRECTORY}/${moduleName}/code.js`;
45
+ }
46
+ async function dump(context) {
47
+ const { actionModules } = context.assets;
48
+ if (!actionModules || actionModules.length === 0)
49
+ return { actionModules: null };
50
+ const includeIdentifiers = Boolean(context.config.AUTH0_EXPORT_IDENTIFIERS);
51
+ return {
52
+ actionModules: actionModules?.map((module) => ({
53
+ ...(includeIdentifiers && module.id ? { id: module.id } : {}),
54
+ name: module.name,
55
+ code: mapModuleCode(context.basePath, module),
56
+ dependencies: module.dependencies || [],
57
+ secrets: mapSecrets(module.secrets),
58
+ actions_using_module_total: module.actions_using_module_total,
59
+ all_changes_published: module.all_changes_published,
60
+ latest_version_number: module.latest_version_number,
61
+ })),
62
+ };
63
+ }
64
+ const ActionModulesHandler = {
65
+ parse,
66
+ dump,
67
+ };
68
+ exports.default = ActionModulesHandler;
@@ -77,6 +77,10 @@ async function dump(context) {
77
77
  status: action.status,
78
78
  secrets: mapSecrets(action.secrets),
79
79
  supported_triggers: action.supported_triggers,
80
+ modules: action.modules?.map((module) => ({
81
+ module_name: module.module_name,
82
+ module_version_number: module.module_version_number,
83
+ })),
80
84
  })),
81
85
  };
82
86
  }
@@ -21,6 +21,7 @@ const guardianPolicies_1 = __importDefault(require("./guardianPolicies"));
21
21
  const roles_1 = __importDefault(require("./roles"));
22
22
  const organizations_1 = __importDefault(require("./organizations"));
23
23
  const actions_1 = __importDefault(require("./actions"));
24
+ const actionModules_1 = __importDefault(require("./actionModules"));
24
25
  const triggers_1 = __importDefault(require("./triggers"));
25
26
  const attackProtection_1 = __importDefault(require("./attackProtection"));
26
27
  const riskAssessment_1 = __importDefault(require("./riskAssessment"));
@@ -41,6 +42,7 @@ const networkACLs_1 = __importDefault(require("./networkACLs"));
41
42
  const userAttributeProfiles_1 = __importDefault(require("./userAttributeProfiles"));
42
43
  const connectionProfiles_1 = __importDefault(require("./connectionProfiles"));
43
44
  const tokenExchangeProfiles_1 = __importDefault(require("./tokenExchangeProfiles"));
45
+ const supplementalSignals_1 = __importDefault(require("./supplementalSignals"));
44
46
  const selfServiceProfiles_1 = __importDefault(require("./selfServiceProfiles"));
45
47
  const yamlHandlers = {
46
48
  rules: rules_1.default,
@@ -63,6 +65,7 @@ const yamlHandlers = {
63
65
  guardianPhoneFactorSelectedProvider: guardianPhoneFactorSelectedProvider_1.default,
64
66
  guardianPolicies: guardianPolicies_1.default,
65
67
  actions: actions_1.default,
68
+ actionModules: actionModules_1.default,
66
69
  organizations: organizations_1.default,
67
70
  triggers: triggers_1.default,
68
71
  attackProtection: attackProtection_1.default,
@@ -82,5 +85,6 @@ const yamlHandlers = {
82
85
  userAttributeProfiles: userAttributeProfiles_1.default,
83
86
  connectionProfiles: connectionProfiles_1.default,
84
87
  tokenExchangeProfiles: tokenExchangeProfiles_1.default,
88
+ supplementalSignals: supplementalSignals_1.default,
85
89
  };
86
90
  exports.default = yamlHandlers;
@@ -0,0 +1,6 @@
1
+ import { YAMLHandler } from '.';
2
+ import { ParsedAsset } from '../../../types';
3
+ import { SupplementalSignals } from '../../../tools/auth0/handlers/supplementalSignals';
4
+ type ParsedSupplementalSignals = ParsedAsset<'supplementalSignals', SupplementalSignals>;
5
+ declare const supplementalSignalsHandler: YAMLHandler<ParsedSupplementalSignals>;
6
+ export default supplementalSignalsHandler;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ async function parseAndDump(context) {
4
+ const { supplementalSignals } = context.assets;
5
+ if (!supplementalSignals)
6
+ return { supplementalSignals: null };
7
+ return {
8
+ supplementalSignals,
9
+ };
10
+ }
11
+ const supplementalSignalsHandler = {
12
+ parse: parseAndDump,
13
+ dump: parseAndDump,
14
+ };
15
+ exports.default = supplementalSignalsHandler;
@@ -0,0 +1,64 @@
1
+ import DefaultAPIHandler from './default';
2
+ import { Asset, Assets } from '../../../types';
3
+ import { Management } from 'auth0';
4
+ export declare const schema: {
5
+ type: string;
6
+ items: {
7
+ type: string;
8
+ required: string[];
9
+ additionalProperties: boolean;
10
+ properties: {
11
+ name: {
12
+ type: string;
13
+ };
14
+ code: {
15
+ type: string;
16
+ };
17
+ dependencies: {
18
+ type: string;
19
+ items: {
20
+ type: string;
21
+ additionalProperties: boolean;
22
+ properties: {
23
+ name: {
24
+ type: string;
25
+ };
26
+ version: {
27
+ type: string;
28
+ };
29
+ };
30
+ };
31
+ };
32
+ secrets: {
33
+ type: string;
34
+ items: {
35
+ type: string;
36
+ properties: {
37
+ name: {
38
+ type: string;
39
+ };
40
+ value: {
41
+ type: string;
42
+ };
43
+ };
44
+ required: string[];
45
+ };
46
+ };
47
+ all_changes_published: {
48
+ type: string;
49
+ };
50
+ };
51
+ };
52
+ };
53
+ export type ActionModule = Management.ActionModuleListItem;
54
+ export default class ActionModulesHandler extends DefaultAPIHandler {
55
+ existing: ActionModule[] | null;
56
+ constructor(options: DefaultAPIHandler);
57
+ createModule(module: Management.CreateActionModuleRequestContent): Promise<Management.CreateActionModuleResponseContent>;
58
+ updateModule(moduleId: string, module: Management.UpdateActionModuleRequestContent): Promise<Management.UpdateActionModuleResponseContent>;
59
+ deleteModule(moduleId: string): Promise<void>;
60
+ objString(module: ActionModule): string;
61
+ publishActionModules(modules: ActionModule[]): Promise<void>;
62
+ getType(): Promise<Asset[] | null>;
63
+ processChanges(assets: Assets): Promise<void>;
64
+ }
@@ -0,0 +1,200 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __importDefault = (this && this.__importDefault) || function (mod) {
42
+ return (mod && mod.__esModule) ? mod : { "default": mod };
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.schema = void 0;
46
+ const default_1 = __importStar(require("./default"));
47
+ const logger_1 = __importDefault(require("../../../logger"));
48
+ const client_1 = require("../client");
49
+ exports.schema = {
50
+ type: 'array',
51
+ items: {
52
+ type: 'object',
53
+ required: ['name', 'code'],
54
+ additionalProperties: true,
55
+ properties: {
56
+ name: { type: 'string' },
57
+ code: { type: 'string' },
58
+ dependencies: {
59
+ type: 'array',
60
+ items: {
61
+ type: 'object',
62
+ additionalProperties: false,
63
+ properties: {
64
+ name: { type: 'string' },
65
+ version: { type: 'string' },
66
+ },
67
+ },
68
+ },
69
+ secrets: {
70
+ type: 'array',
71
+ items: {
72
+ type: 'object',
73
+ properties: {
74
+ name: { type: 'string' },
75
+ value: { type: 'string' },
76
+ },
77
+ required: ['name'],
78
+ },
79
+ },
80
+ all_changes_published: { type: 'boolean' },
81
+ },
82
+ },
83
+ };
84
+ class ActionModulesHandler extends default_1.default {
85
+ constructor(options) {
86
+ super({
87
+ ...options,
88
+ type: 'actionModules',
89
+ id: 'id',
90
+ identifiers: ['id', 'name'],
91
+ stripUpdateFields: [
92
+ 'name',
93
+ 'actions_using_module_total',
94
+ 'all_changes_published',
95
+ 'latest_version_number',
96
+ 'created_at',
97
+ 'updated_at',
98
+ ],
99
+ stripCreateFields: [
100
+ 'actions_using_module_total',
101
+ 'latest_version_number',
102
+ 'created_at',
103
+ 'updated_at',
104
+ ],
105
+ functions: {
106
+ create: (module) => this.createModule(module),
107
+ update: (id, module) => this.updateModule(id, module),
108
+ delete: (id) => this.deleteModule(id),
109
+ },
110
+ });
111
+ }
112
+ async createModule(module) {
113
+ if ('all_changes_published' in module) {
114
+ delete module.all_changes_published;
115
+ }
116
+ const createdModule = await this.client.actions.modules.create(module);
117
+ return createdModule;
118
+ }
119
+ async updateModule(moduleId, module) {
120
+ const updatableModule = {
121
+ code: module.code,
122
+ dependencies: module.dependencies,
123
+ secrets: module.secrets,
124
+ };
125
+ return this.client.actions.modules.update(moduleId, updatableModule);
126
+ }
127
+ async deleteModule(moduleId) {
128
+ return this.client.actions.modules.delete(moduleId);
129
+ }
130
+ objString(module) {
131
+ return super.objString({ id: module.id, name: module.name });
132
+ }
133
+ async publishActionModules(modules) {
134
+ await this.client.pool
135
+ .addEachTask({
136
+ data: modules || [],
137
+ generator: (module) => this.client.actions.modules.versions
138
+ .create(module.id)
139
+ .then(() => {
140
+ logger_1.default.info(`Published [${this.type}]: ${this.objString(module)}`);
141
+ })
142
+ .catch((err) => {
143
+ throw new Error(`Problem Publishing ${this.type} ${this.objString(module)}\n${err}`);
144
+ }),
145
+ })
146
+ .promise();
147
+ }
148
+ async getType() {
149
+ if (this.existing)
150
+ return this.existing;
151
+ try {
152
+ const modules = await (0, client_1.paginate)(this.client.actions.modules.list, {
153
+ paginate: true,
154
+ });
155
+ this.existing = modules;
156
+ return this.existing;
157
+ }
158
+ catch (err) {
159
+ if (err.statusCode === 404 || err.statusCode === 501) {
160
+ return null;
161
+ }
162
+ if (err.statusCode === 403 || err.errorCode === 'feature_not_enabled') {
163
+ logger_1.default.debug('Skipping action modules because it is not enabled.');
164
+ return null;
165
+ }
166
+ throw err;
167
+ }
168
+ }
169
+ // Before actions are processed
170
+ async processChanges(assets) {
171
+ const { actionModules } = assets;
172
+ // Do nothing if not set
173
+ if (!actionModules)
174
+ return;
175
+ const changes = await this.calcChanges(assets);
176
+ await super.processChanges(assets, changes);
177
+ // Refresh module list to get latest state with all_changes_published field
178
+ const postProcessedModules = await (async () => {
179
+ this.existing = null; // Clear the cache
180
+ return this.getType();
181
+ })();
182
+ // Publish modules that have unpublished changes
183
+ const modulesToPublish = [
184
+ ...changes.create
185
+ .filter((module) => module.all_changes_published === true)
186
+ .map((moduleWithoutId) => {
187
+ // Add IDs to just-created modules
188
+ const moduleId = postProcessedModules?.find((postProcessedModule) => postProcessedModule.name === moduleWithoutId.name)?.id;
189
+ const module = postProcessedModules?.find((postProcessedModule) => postProcessedModule.id === moduleId);
190
+ return module;
191
+ }),
192
+ ...changes.update.filter((module) => module.all_changes_published === true),
193
+ ].filter((module) => module !== undefined);
194
+ await this.publishActionModules(modulesToPublish);
195
+ }
196
+ }
197
+ exports.default = ActionModulesHandler;
198
+ __decorate([
199
+ (0, default_1.order)('50')
200
+ ], ActionModulesHandler.prototype, "processChanges", null);
@@ -1,6 +1,7 @@
1
1
  import { Management } from 'auth0';
2
2
  import DefaultAPIHandler from './default';
3
- import { Asset, Assets } from '../../../types';
3
+ import { Asset, Assets, CalculatedChanges } from '../../../types';
4
+ import { ActionModule } from './actionModules';
4
5
  export type Action = Management.Action & {
5
6
  deployed?: boolean;
6
7
  };
@@ -80,6 +81,21 @@ export declare const schema: {
80
81
  };
81
82
  };
82
83
  };
84
+ modules: {
85
+ type: string;
86
+ items: {
87
+ type: string;
88
+ required: string[];
89
+ properties: {
90
+ module_name: {
91
+ type: string;
92
+ };
93
+ module_version_number: {
94
+ type: string;
95
+ };
96
+ };
97
+ };
98
+ };
83
99
  deployed: {
84
100
  type: string;
85
101
  };
@@ -101,6 +117,8 @@ export default class ActionHandler extends DefaultAPIHandler {
101
117
  deployAction(action: any): Promise<void>;
102
118
  actionChanges(action: any, found: any): Promise<Asset>;
103
119
  getType(): Promise<Asset[] | null>;
120
+ calcChanges(assets: Assets): Promise<CalculatedChanges>;
121
+ enrichActionWithModuleIds(action: Action, modules: ActionModule[]): Promise<Action>;
104
122
  processChanges(assets: Assets): Promise<void>;
105
123
  }
106
124
  export {};
@@ -95,6 +95,17 @@ exports.schema = {
95
95
  },
96
96
  },
97
97
  },
98
+ modules: {
99
+ type: 'array',
100
+ items: {
101
+ type: 'object',
102
+ required: ['module_name', 'module_version_number'],
103
+ properties: {
104
+ module_name: { type: 'string' },
105
+ module_version_number: { type: 'number' },
106
+ },
107
+ },
108
+ },
98
109
  deployed: { type: 'boolean' },
99
110
  status: { type: 'string' },
100
111
  },
@@ -203,6 +214,9 @@ class ActionHandler extends default_1.default {
203
214
  if (!(0, utils_1.areArraysEquals)(action.supported_triggers, found.supported_triggers)) {
204
215
  actionChanges.supported_triggers = action.supported_triggers;
205
216
  }
217
+ if (!(0, utils_1.areArraysEquals)(action.modules, found.modules)) {
218
+ actionChanges.modules = action.modules;
219
+ }
206
220
  return actionChanges;
207
221
  }
208
222
  async getType() {
@@ -234,6 +248,80 @@ class ActionHandler extends default_1.default {
234
248
  throw err;
235
249
  }
236
250
  }
251
+ async calcChanges(assets) {
252
+ let { actions, actionModules } = assets;
253
+ // Do nothing if not set
254
+ if (!actions)
255
+ return {
256
+ del: [],
257
+ create: [],
258
+ update: [],
259
+ conflicts: [],
260
+ };
261
+ let modules = null;
262
+ if (actionModules && actionModules.length > 0) {
263
+ modules = actionModules;
264
+ }
265
+ else {
266
+ try {
267
+ modules = await (0, client_1.paginate)(this.client.actions.modules.list, {
268
+ paginate: true,
269
+ });
270
+ }
271
+ catch {
272
+ logger_1.default.debug('Skipping actions modules enrichment because action modules could not be retrieved.');
273
+ modules = null;
274
+ }
275
+ }
276
+ if (modules != null) {
277
+ // Use task queue to process actions in parallel
278
+ const processedActions = await this.client.pool
279
+ .addEachTask({
280
+ data: actions || [],
281
+ generator: (action) => this.enrichActionWithModuleIds(action, modules),
282
+ })
283
+ .promise();
284
+ actions = processedActions;
285
+ }
286
+ return super.calcChanges({ ...assets, actions });
287
+ }
288
+ async enrichActionWithModuleIds(action, modules) {
289
+ if (!action.modules || action.modules.length === 0) {
290
+ return action;
291
+ }
292
+ const updatedModules = await this.client.pool
293
+ .addEachTask({
294
+ data: action.modules,
295
+ generator: async (module) => {
296
+ const foundModule = modules.find((m) => m.name === module.module_name);
297
+ if (foundModule && foundModule.id) {
298
+ // paginate to get all versions of the module
299
+ const allModuleVersions = [];
300
+ let moduleVersions = await this.client.actions.modules.versions.list(foundModule.id);
301
+ // Process first page
302
+ allModuleVersions.push(...moduleVersions.data);
303
+ // Fetch remaining pages
304
+ while (moduleVersions.hasNextPage()) {
305
+ moduleVersions = await moduleVersions.getNextPage();
306
+ allModuleVersions.push(...moduleVersions.data);
307
+ }
308
+ return {
309
+ module_name: module.module_name,
310
+ module_id: foundModule.id,
311
+ module_version_number: module.module_version_number,
312
+ module_version_id: allModuleVersions?.find((v) => v.version_number === module.module_version_number)
313
+ ?.id || '',
314
+ };
315
+ }
316
+ return module;
317
+ },
318
+ })
319
+ .promise();
320
+ return {
321
+ ...action,
322
+ modules: updatedModules,
323
+ };
324
+ }
237
325
  async processChanges(assets) {
238
326
  const { actions } = assets;
239
327
  // Do nothing if not set
@@ -271,5 +359,5 @@ class ActionHandler extends default_1.default {
271
359
  }
272
360
  exports.default = ActionHandler;
273
361
  __decorate([
274
- (0, default_1.order)('50')
362
+ (0, default_1.order)('51')
275
363
  ], ActionHandler.prototype, "processChanges", null);
@@ -57,6 +57,7 @@ const phoneProviders = __importStar(require("./phoneProvider"));
57
57
  const phoneTemplates = __importStar(require("./phoneTemplates"));
58
58
  const prompts = __importStar(require("./prompts"));
59
59
  const actions = __importStar(require("./actions"));
60
+ const actionModules = __importStar(require("./actionModules"));
60
61
  const triggers = __importStar(require("./triggers"));
61
62
  const organizations = __importStar(require("./organizations"));
62
63
  const attackProtection = __importStar(require("./attackProtection"));
@@ -72,6 +73,7 @@ const networkACLs = __importStar(require("./networkACLs"));
72
73
  const userAttributeProfiles = __importStar(require("./userAttributeProfiles"));
73
74
  const connectionProfiles = __importStar(require("./connectionProfiles"));
74
75
  const tokenExchangeProfiles = __importStar(require("./tokenExchangeProfiles"));
76
+ const supplementalSignals = __importStar(require("./supplementalSignals"));
75
77
  const auth0ApiHandlers = {
76
78
  rules,
77
79
  rulesConfigs,
@@ -98,6 +100,7 @@ const auth0ApiHandlers = {
98
100
  //@ts-ignore because prompts have not been universally implemented yet
99
101
  prompts,
100
102
  actions,
103
+ actionModules,
101
104
  triggers,
102
105
  organizations,
103
106
  attackProtection,
@@ -113,5 +116,6 @@ const auth0ApiHandlers = {
113
116
  userAttributeProfiles,
114
117
  connectionProfiles,
115
118
  tokenExchangeProfiles,
119
+ supplementalSignals,
116
120
  };
117
121
  exports.default = auth0ApiHandlers; // TODO: apply stronger types to schema properties
@@ -49,6 +49,10 @@ export declare const schema: {
49
49
  required: {
50
50
  type: string;
51
51
  };
52
+ required_for: {
53
+ type: string;
54
+ enum: ("public_clients" | "confidential_clients" | "all_clients")[];
55
+ };
52
56
  };
53
57
  required: string[];
54
58
  };
@@ -41,6 +41,10 @@ exports.schema = {
41
41
  enum: Object.values(auth0_1.Management.ResourceServerProofOfPossessionMechanismEnum),
42
42
  },
43
43
  required: { type: 'boolean' },
44
+ required_for: {
45
+ type: 'string',
46
+ enum: Object.values(auth0_1.Management.ResourceServerProofOfPossessionRequiredForEnum),
47
+ },
44
48
  },
45
49
  required: ['mechanism', 'required'],
46
50
  },
@@ -0,0 +1,19 @@
1
+ import { Management } from 'auth0';
2
+ import DefaultHandler from './default';
3
+ import { Asset, Assets } from '../../../types';
4
+ export declare const schema: {
5
+ type: string;
6
+ properties: {
7
+ akamai_enabled: {
8
+ type: string;
9
+ description: string;
10
+ };
11
+ };
12
+ };
13
+ export type SupplementalSignals = Management.GetSupplementalSignalsResponseContent;
14
+ export default class SupplementalSignalsHandler extends DefaultHandler {
15
+ existing: SupplementalSignals | null;
16
+ constructor(options: DefaultHandler);
17
+ getType(): Promise<Asset | null>;
18
+ processChanges(assets: Assets): Promise<void>;
19
+ }
@@ -0,0 +1,102 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || (function () {
25
+ var ownKeys = function(o) {
26
+ ownKeys = Object.getOwnPropertyNames || function (o) {
27
+ var ar = [];
28
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
29
+ return ar;
30
+ };
31
+ return ownKeys(o);
32
+ };
33
+ return function (mod) {
34
+ if (mod && mod.__esModule) return mod;
35
+ var result = {};
36
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
37
+ __setModuleDefault(result, mod);
38
+ return result;
39
+ };
40
+ })();
41
+ var __importDefault = (this && this.__importDefault) || function (mod) {
42
+ return (mod && mod.__esModule) ? mod : { "default": mod };
43
+ };
44
+ Object.defineProperty(exports, "__esModule", { value: true });
45
+ exports.schema = void 0;
46
+ const auth0_1 = require("auth0");
47
+ const default_1 = __importStar(require("./default"));
48
+ const logger_1 = __importDefault(require("../../../logger"));
49
+ exports.schema = {
50
+ type: 'object',
51
+ properties: {
52
+ akamai_enabled: {
53
+ type: 'boolean',
54
+ description: 'Enable Akamai supplemental signals integration',
55
+ },
56
+ },
57
+ };
58
+ class SupplementalSignalsHandler extends default_1.default {
59
+ constructor(options) {
60
+ super({
61
+ ...options,
62
+ type: 'supplementalSignals',
63
+ });
64
+ }
65
+ async getType() {
66
+ try {
67
+ const supplementalSignals = await this.client.supplementalSignals.get();
68
+ this.existing = supplementalSignals;
69
+ return supplementalSignals;
70
+ }
71
+ catch (err) {
72
+ if (err instanceof auth0_1.ManagementError && err.statusCode === 403) {
73
+ logger_1.default.debug('Supplemental Signals unavailable: insufficient scope or missing attack_protection entitlement.');
74
+ return null;
75
+ }
76
+ throw err;
77
+ }
78
+ }
79
+ async processChanges(assets) {
80
+ const { supplementalSignals } = assets;
81
+ if (!supplementalSignals)
82
+ return;
83
+ if (Object.keys(supplementalSignals).length > 0) {
84
+ try {
85
+ await this.client.supplementalSignals.patch(supplementalSignals);
86
+ this.updated += 1;
87
+ this.didUpdate(supplementalSignals);
88
+ }
89
+ catch (err) {
90
+ if (err instanceof auth0_1.ManagementError && err.statusCode === 403) {
91
+ logger_1.default.debug('Supplemental Signals unavailable: insufficient scope or missing attack_protection entitlement.');
92
+ return;
93
+ }
94
+ throw err;
95
+ }
96
+ }
97
+ }
98
+ }
99
+ exports.default = SupplementalSignalsHandler;
100
+ __decorate([
101
+ (0, default_1.order)('100')
102
+ ], SupplementalSignalsHandler.prototype, "processChanges", null);
@@ -8,6 +8,7 @@ declare const constants: {
8
8
  OBFUSCATED_SECRET_VALUE: string;
9
9
  HOOKS_DIRECTORY: string;
10
10
  ACTIONS_DIRECTORY: string;
11
+ ACTION_MODULES_DIRECTORY: string;
11
12
  TRIGGERS_DIRECTORY: string;
12
13
  RULES_CONFIGS_DIRECTORY: string;
13
14
  PAGES_DIRECTORY: string;
@@ -88,5 +89,6 @@ declare const constants: {
88
89
  USER_ATTRIBUTE_PROFILES_DIRECTORY: string;
89
90
  CONNECTION_PROFILES_DIRECTORY: string;
90
91
  TOKEN_EXCHANGE_PROFILES_DIRECTORY: string;
92
+ SUPPLEMENTAL_SIGNALS_DIRECTORY: string;
91
93
  };
92
94
  export default constants;
@@ -31,6 +31,7 @@ const constants = {
31
31
  OBFUSCATED_SECRET_VALUE,
32
32
  HOOKS_DIRECTORY: 'hooks',
33
33
  ACTIONS_DIRECTORY: 'actions',
34
+ ACTION_MODULES_DIRECTORY: 'action-modules',
34
35
  TRIGGERS_DIRECTORY: 'triggers',
35
36
  RULES_CONFIGS_DIRECTORY: 'rules-configs',
36
37
  PAGES_DIRECTORY: 'pages',
@@ -216,5 +217,6 @@ const constants = {
216
217
  USER_ATTRIBUTE_PROFILES_DIRECTORY: 'user-attribute-profiles',
217
218
  CONNECTION_PROFILES_DIRECTORY: 'connection-profiles',
218
219
  TOKEN_EXCHANGE_PROFILES_DIRECTORY: 'token-exchange-profiles',
220
+ SUPPLEMENTAL_SIGNALS_DIRECTORY: 'supplemental-signals',
219
221
  };
220
222
  exports.default = constants;
package/lib/types.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { Management, ManagementClient } from 'auth0';
2
2
  import { PromisePoolExecutor } from 'promise-pool-executor';
3
3
  import { Action } from './tools/auth0/handlers/actions';
4
+ import { ActionModule } from './tools/auth0/handlers/actionModules';
4
5
  import { Prompts } from './tools/auth0/handlers/prompts';
5
6
  import { Tenant } from './tools/auth0/handlers/tenant';
6
7
  import { Page } from './tools/auth0/handlers/pages';
@@ -19,6 +20,7 @@ import { UserAttributeProfile } from './tools/auth0/handlers/userAttributeProfil
19
20
  import { AttackProtection } from './tools/auth0/handlers/attackProtection';
20
21
  import { TokenExchangeProfile } from './tools/auth0/handlers/tokenExchangeProfiles';
21
22
  import { RiskAssessment } from './tools/auth0/handlers/riskAssessment';
23
+ import { SupplementalSignals } from './tools/auth0/handlers/supplementalSignals';
22
24
  type SharedPaginationParams = {
23
25
  checkpoint?: boolean;
24
26
  paginate?: boolean;
@@ -91,6 +93,7 @@ export type Asset = {
91
93
  };
92
94
  export type Assets = Partial<{
93
95
  actions: Action[] | null;
96
+ actionModules: ActionModule[] | null;
94
97
  attackProtection: AttackProtection | null;
95
98
  riskAssessment: RiskAssessment | null;
96
99
  branding: (Asset & {
@@ -129,6 +132,7 @@ export type Assets = Partial<{
129
132
  rulesConfigs: Asset[] | null;
130
133
  tenant: Tenant | null;
131
134
  triggers: Asset[] | null;
135
+ supplementalSignals: SupplementalSignals | null;
132
136
  exclude?: {
133
137
  [key: string]: string[];
134
138
  };
@@ -153,7 +157,7 @@ export type CalculatedChanges = {
153
157
  conflicts: Asset[];
154
158
  create: Asset[];
155
159
  };
156
- export type AssetTypes = 'rules' | 'rulesConfigs' | 'hooks' | 'pages' | 'databases' | 'clientGrants' | 'resourceServers' | 'clients' | 'connections' | 'tenant' | 'emailProvider' | 'emailTemplates' | 'guardianFactors' | 'guardianFactorProviders' | 'guardianFactorTemplates' | 'guardianPhoneFactorMessageTypes' | 'guardianPhoneFactorSelectedProvider' | 'guardianPolicies' | 'roles' | 'actions' | 'organizations' | 'triggers' | 'attackProtection' | 'riskAssessment' | 'branding' | 'phoneProviders' | 'phoneTemplates' | 'logStreams' | 'prompts' | 'customDomains' | 'themes' | 'forms' | 'flows' | 'flowVaultConnections' | 'selfServiceProfiles' | 'networkACLs' | 'userAttributeProfiles' | 'connectionProfiles' | 'tokenExchangeProfiles';
160
+ export type AssetTypes = 'rules' | 'rulesConfigs' | 'hooks' | 'pages' | 'databases' | 'clientGrants' | 'resourceServers' | 'clients' | 'connections' | 'tenant' | 'emailProvider' | 'emailTemplates' | 'guardianFactors' | 'guardianFactorProviders' | 'guardianFactorTemplates' | 'guardianPhoneFactorMessageTypes' | 'guardianPhoneFactorSelectedProvider' | 'guardianPolicies' | 'roles' | 'actions' | 'actionModules' | 'organizations' | 'triggers' | 'attackProtection' | 'riskAssessment' | 'branding' | 'phoneProviders' | 'phoneTemplates' | 'logStreams' | 'prompts' | 'customDomains' | 'themes' | 'forms' | 'flows' | 'flowVaultConnections' | 'selfServiceProfiles' | 'networkACLs' | 'userAttributeProfiles' | 'connectionProfiles' | 'tokenExchangeProfiles' | 'supplementalSignals';
157
161
  export type KeywordMappings = {
158
162
  [key: string]: (string | number)[] | string | number;
159
163
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "auth0-deploy-cli",
3
- "version": "8.27.0",
3
+ "version": "8.29.0",
4
4
  "description": "A command line tool for deploying updates to your Auth0 tenant",
5
5
  "main": "lib/index.js",
6
6
  "bin": {
@@ -42,16 +42,16 @@
42
42
  "nconf": "^0.13.0",
43
43
  "promise-pool-executor": "^1.1.1",
44
44
  "sanitize-filename": "^1.6.3",
45
- "undici": "^7.21.0",
45
+ "undici": "^7.22.0",
46
46
  "winston": "^3.19.0",
47
47
  "yargs": "^15.4.1"
48
48
  },
49
49
  "devDependencies": {
50
+ "@eslint/js": "^9.39.2",
50
51
  "@types/fs-extra": "^9.0.13",
51
52
  "@types/lodash": "^4.17.23",
52
53
  "@types/mocha": "^10.0.10",
53
54
  "@types/nconf": "^0.10.7",
54
- "@eslint/js": "^9.39.2",
55
55
  "@typescript-eslint/eslint-plugin": "^8.55.0",
56
56
  "@typescript-eslint/parser": "^8.55.0",
57
57
  "chai": "^4.5.0",