auth0-deploy-cli 8.28.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,13 @@ 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
+
10
17
  ## [8.28.0] - 2026-02-20
11
18
 
12
19
  ### Added
@@ -1660,7 +1667,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1660
1667
  [#1297]: https://github.com/auth0/auth0-deploy-cli/issues/1297
1661
1668
  [#1298]: https://github.com/auth0/auth0-deploy-cli/issues/1298
1662
1669
  [#1302]: https://github.com/auth0/auth0-deploy-cli/issues/1302
1663
- [Unreleased]: https://github.com/auth0/auth0-deploy-cli/compare/v8.28.0...HEAD
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
1664
1674
  [8.28.0]: https://github.com/auth0/auth0-deploy-cli/compare/v8.27.0...v8.28.0
1665
1675
  [8.27.0]: https://github.com/auth0/auth0-deploy-cli/compare/v8.26.0...v8.27.0
1666
1676
  [8.26.0]: https://github.com/auth0/auth0-deploy-cli/compare/v8.25.0...v8.26.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
@@ -42,6 +42,7 @@ const networkACLs_1 = __importDefault(require("./networkACLs"));
42
42
  const userAttributeProfiles_1 = __importDefault(require("./userAttributeProfiles"));
43
43
  const connectionProfiles_1 = __importDefault(require("./connectionProfiles"));
44
44
  const tokenExchangeProfiles_1 = __importDefault(require("./tokenExchangeProfiles"));
45
+ const supplementalSignals_1 = __importDefault(require("./supplementalSignals"));
45
46
  const selfServiceProfiles_1 = __importDefault(require("./selfServiceProfiles"));
46
47
  const directoryHandlers = {
47
48
  rules: rules_1.default,
@@ -84,5 +85,6 @@ const directoryHandlers = {
84
85
  userAttributeProfiles: userAttributeProfiles_1.default,
85
86
  connectionProfiles: connectionProfiles_1.default,
86
87
  tokenExchangeProfiles: tokenExchangeProfiles_1.default,
88
+ supplementalSignals: supplementalSignals_1.default,
87
89
  };
88
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
+ };
@@ -42,6 +42,7 @@ const networkACLs_1 = __importDefault(require("./networkACLs"));
42
42
  const userAttributeProfiles_1 = __importDefault(require("./userAttributeProfiles"));
43
43
  const connectionProfiles_1 = __importDefault(require("./connectionProfiles"));
44
44
  const tokenExchangeProfiles_1 = __importDefault(require("./tokenExchangeProfiles"));
45
+ const supplementalSignals_1 = __importDefault(require("./supplementalSignals"));
45
46
  const selfServiceProfiles_1 = __importDefault(require("./selfServiceProfiles"));
46
47
  const yamlHandlers = {
47
48
  rules: rules_1.default,
@@ -84,5 +85,6 @@ const yamlHandlers = {
84
85
  userAttributeProfiles: userAttributeProfiles_1.default,
85
86
  connectionProfiles: connectionProfiles_1.default,
86
87
  tokenExchangeProfiles: tokenExchangeProfiles_1.default,
88
+ supplementalSignals: supplementalSignals_1.default,
87
89
  };
88
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;
@@ -73,6 +73,7 @@ const networkACLs = __importStar(require("./networkACLs"));
73
73
  const userAttributeProfiles = __importStar(require("./userAttributeProfiles"));
74
74
  const connectionProfiles = __importStar(require("./connectionProfiles"));
75
75
  const tokenExchangeProfiles = __importStar(require("./tokenExchangeProfiles"));
76
+ const supplementalSignals = __importStar(require("./supplementalSignals"));
76
77
  const auth0ApiHandlers = {
77
78
  rules,
78
79
  rulesConfigs,
@@ -115,5 +116,6 @@ const auth0ApiHandlers = {
115
116
  userAttributeProfiles,
116
117
  connectionProfiles,
117
118
  tokenExchangeProfiles,
119
+ supplementalSignals,
118
120
  };
119
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);
@@ -89,5 +89,6 @@ declare const constants: {
89
89
  USER_ATTRIBUTE_PROFILES_DIRECTORY: string;
90
90
  CONNECTION_PROFILES_DIRECTORY: string;
91
91
  TOKEN_EXCHANGE_PROFILES_DIRECTORY: string;
92
+ SUPPLEMENTAL_SIGNALS_DIRECTORY: string;
92
93
  };
93
94
  export default constants;
@@ -217,5 +217,6 @@ const constants = {
217
217
  USER_ATTRIBUTE_PROFILES_DIRECTORY: 'user-attribute-profiles',
218
218
  CONNECTION_PROFILES_DIRECTORY: 'connection-profiles',
219
219
  TOKEN_EXCHANGE_PROFILES_DIRECTORY: 'token-exchange-profiles',
220
+ SUPPLEMENTAL_SIGNALS_DIRECTORY: 'supplemental-signals',
220
221
  };
221
222
  exports.default = constants;
package/lib/types.d.ts CHANGED
@@ -20,6 +20,7 @@ import { UserAttributeProfile } from './tools/auth0/handlers/userAttributeProfil
20
20
  import { AttackProtection } from './tools/auth0/handlers/attackProtection';
21
21
  import { TokenExchangeProfile } from './tools/auth0/handlers/tokenExchangeProfiles';
22
22
  import { RiskAssessment } from './tools/auth0/handlers/riskAssessment';
23
+ import { SupplementalSignals } from './tools/auth0/handlers/supplementalSignals';
23
24
  type SharedPaginationParams = {
24
25
  checkpoint?: boolean;
25
26
  paginate?: boolean;
@@ -131,6 +132,7 @@ export type Assets = Partial<{
131
132
  rulesConfigs: Asset[] | null;
132
133
  tenant: Tenant | null;
133
134
  triggers: Asset[] | null;
135
+ supplementalSignals: SupplementalSignals | null;
134
136
  exclude?: {
135
137
  [key: string]: string[];
136
138
  };
@@ -155,7 +157,7 @@ export type CalculatedChanges = {
155
157
  conflicts: Asset[];
156
158
  create: Asset[];
157
159
  };
158
- 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';
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';
159
161
  export type KeywordMappings = {
160
162
  [key: string]: (string | number)[] | string | number;
161
163
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "auth0-deploy-cli",
3
- "version": "8.28.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": {