auth0-deploy-cli 8.42.0 → 8.44.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/CHANGELOG.md +51 -1
  2. package/lib/context/defaults.d.ts +7 -0
  3. package/lib/context/defaults.js +74 -30
  4. package/lib/context/directory/handlers/actionModules.js +11 -12
  5. package/lib/context/directory/handlers/actions.js +11 -13
  6. package/lib/context/directory/handlers/attackProtection.js +1 -1
  7. package/lib/context/directory/handlers/branding.js +9 -1
  8. package/lib/context/directory/handlers/clients.js +9 -3
  9. package/lib/context/directory/handlers/connections.js +10 -4
  10. package/lib/context/directory/handlers/databases.js +4 -4
  11. package/lib/context/directory/handlers/emailTemplates.js +9 -0
  12. package/lib/context/directory/handlers/hooks.js +12 -1
  13. package/lib/context/directory/handlers/prompts.js +11 -3
  14. package/lib/context/directory/handlers/rules.js +12 -1
  15. package/lib/context/directory/index.js +7 -8
  16. package/lib/context/yaml/handlers/attackProtection.js +1 -1
  17. package/lib/context/yaml/handlers/branding.js +8 -1
  18. package/lib/context/yaml/handlers/clients.js +4 -1
  19. package/lib/context/yaml/handlers/connections.js +3 -1
  20. package/lib/context/yaml/handlers/flows.js +7 -0
  21. package/lib/context/yaml/handlers/forms.js +7 -0
  22. package/lib/context/yaml/handlers/prompts.js +7 -1
  23. package/lib/context/yaml/index.js +7 -8
  24. package/lib/readonly.js +5 -0
  25. package/lib/tools/auth0/handlers/attackProtection.js +3 -1
  26. package/lib/tools/auth0/handlers/clients.d.ts +21 -0
  27. package/lib/tools/auth0/handlers/clients.js +21 -0
  28. package/lib/tools/auth0/handlers/connectionProfiles.d.ts +27 -0
  29. package/lib/tools/auth0/handlers/connectionProfiles.js +30 -0
  30. package/lib/tools/auth0/handlers/connections.d.ts +11 -6
  31. package/lib/tools/auth0/handlers/connections.js +33 -7
  32. package/lib/tools/auth0/handlers/databases.js +12 -3
  33. package/lib/tools/auth0/handlers/default.d.ts +23 -0
  34. package/lib/tools/auth0/handlers/default.js +21 -10
  35. package/lib/tools/auth0/handlers/organizations.d.ts +29 -1
  36. package/lib/tools/auth0/handlers/organizations.js +165 -17
  37. package/lib/tools/auth0/handlers/phoneProvider.js +10 -2
  38. package/lib/tools/auth0/handlers/phoneTemplates.d.ts +4 -1
  39. package/lib/tools/auth0/handlers/phoneTemplates.js +67 -10
  40. package/lib/tools/auth0/handlers/roles.d.ts +4 -0
  41. package/lib/tools/auth0/handlers/roles.js +10 -0
  42. package/lib/tools/calculateDryRunChanges.js +12 -8
  43. package/lib/types.d.ts +1 -0
  44. package/lib/utils.js +5 -2
  45. package/package.json +2 -2
@@ -43,15 +43,14 @@ class YAMLContext {
43
43
  })();
44
44
  }
45
45
  loadFile(f) {
46
- let toLoad = path_1.default.join(this.basePath, f);
47
- if (!(0, utils_1.isFile)(toLoad)) {
48
- // try load not relative to yaml file
49
- toLoad = f;
50
- logger_1.default.warn(`Support for absolute paths and paths outside the config root will be deprecated in a future version to improve the security of the tool. ` +
51
- `Please update your configuration to use paths relative to the config directory. ` +
52
- `Current absolute path used: ["${f}"]`);
46
+ const configRoot = path_1.default.resolve(this.basePath);
47
+ const toLoad = path_1.default.resolve(this.basePath, f.replace(/\\/g, '/'));
48
+ if (!toLoad.startsWith(configRoot + path_1.default.sep)) {
49
+ logger_1.default.warn(`Path "${f}" resolves to "${toLoad}" which is outside the config directory "${configRoot}". ` +
50
+ `This will be blocked as an error in the next major release. ` +
51
+ `Move the file inside your config directory.`);
53
52
  }
54
- return (0, tools_1.loadFileAndReplaceKeywords)(path_1.default.resolve(toLoad), {
53
+ return (0, tools_1.loadFileAndReplaceKeywords)(toLoad, {
55
54
  mappings: this.mappings,
56
55
  disableKeywordReplacement: this.disableKeywordReplacement,
57
56
  });
package/lib/readonly.js CHANGED
@@ -28,6 +28,11 @@ const readOnlyFields = {
28
28
  'config_route',
29
29
  'owners',
30
30
  ],
31
+ attackProtection: [
32
+ // Returned by GET but rejected by PATCH with "Additional properties not allowed"
33
+ 'bruteForceProtection.form_submission_mode',
34
+ 'bruteForceProtection.form_submission_behavior',
35
+ ],
31
36
  };
32
37
  function getExcludedFields(config) {
33
38
  const strippedFields = { ...readOnlyFields };
@@ -314,7 +314,9 @@ class AttackProtectionHandler extends default_1.default {
314
314
  updates.push(this.client.attackProtection.captcha.update(attackProtection.captcha));
315
315
  }
316
316
  if (attackProtection.bruteForceProtection) {
317
- updates.push(this.client.attackProtection.bruteForceProtection.update(attackProtection.bruteForceProtection));
317
+ // Strip fields returned by GET but rejected by PATCH
318
+ const { form_submission_mode, form_submission_behavior, ...bruteForcePayload } = attackProtection.bruteForceProtection;
319
+ updates.push(this.client.attackProtection.bruteForceProtection.update(bruteForcePayload));
318
320
  }
319
321
  if (attackProtection.suspiciousIpThrottling) {
320
322
  updates.push(this.client.attackProtection.suspiciousIpThrottling.update(attackProtection.suspiciousIpThrottling));
@@ -254,6 +254,27 @@ export declare const schema: {
254
254
  enum: ("allow" | "allow_if_empty")[];
255
255
  description: string;
256
256
  };
257
+ third_party_client_access: {
258
+ type: string;
259
+ description: string;
260
+ properties: {
261
+ default_value: {
262
+ type: string;
263
+ enum: "block"[];
264
+ description: string;
265
+ };
266
+ allowed_values: {
267
+ type: string;
268
+ items: {
269
+ type: string;
270
+ enum: ("allow" | "block")[];
271
+ };
272
+ uniqueItems: boolean;
273
+ description: string;
274
+ };
275
+ };
276
+ required: string[];
277
+ };
257
278
  invitation_landing_client_id: {
258
279
  type: string;
259
280
  description: string;
@@ -59,6 +59,27 @@ 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
+ third_party_client_access: {
63
+ type: 'object',
64
+ description: 'Controls whether third-party clients can access the organization via the My Organization API.',
65
+ properties: {
66
+ default_value: {
67
+ type: 'string',
68
+ enum: Object.values(auth0_1.Management.ClientMyOrganizationConfigurationThirdPartyClientAccessDefaultValueEnum),
69
+ description: 'The default third-party client access value.',
70
+ },
71
+ allowed_values: {
72
+ type: 'array',
73
+ items: {
74
+ type: 'string',
75
+ enum: Object.values(auth0_1.Management.ClientMyOrganizationConfigurationThirdPartyClientAccessAllowedValuesEnum),
76
+ },
77
+ uniqueItems: true,
78
+ description: 'The allowed third-party client access values.',
79
+ },
80
+ },
81
+ required: ['default_value', 'allowed_values'],
82
+ },
62
83
  invitation_landing_client_id: {
63
84
  type: 'string',
64
85
  description: 'The client ID of the invitation landing client for the My Organization configuration',
@@ -36,6 +36,33 @@ export declare const schema: {
36
36
  connection_config: {
37
37
  type: string[];
38
38
  };
39
+ cross_app_access_resource_app: {
40
+ type: string;
41
+ description: string;
42
+ properties: {
43
+ status: {
44
+ type: string;
45
+ properties: {
46
+ default_value: {
47
+ type: string;
48
+ enum: ("enabled" | "disabled")[];
49
+ description: string;
50
+ };
51
+ allowed_values: {
52
+ type: string;
53
+ items: {
54
+ type: string;
55
+ enum: ("enabled" | "disabled")[];
56
+ };
57
+ uniqueItems: boolean;
58
+ description: string;
59
+ };
60
+ };
61
+ required: string[];
62
+ };
63
+ };
64
+ required: string[];
65
+ };
39
66
  strategy_overrides: {
40
67
  type: string[];
41
68
  properties: {
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getConnectionProfile = exports.schema = void 0;
7
+ const auth0_1 = require("auth0");
7
8
  const default_1 = __importDefault(require("./default"));
8
9
  const client_1 = require("../client");
9
10
  const logger_1 = __importDefault(require("../../../logger"));
@@ -42,6 +43,35 @@ exports.schema = {
42
43
  connection_config: {
43
44
  type: ['object', 'null'],
44
45
  },
46
+ cross_app_access_resource_app: {
47
+ type: 'object',
48
+ description: 'Controls whether organization admins may enable Cross App Access (XAA) on their Identity Providers.',
49
+ properties: {
50
+ status: {
51
+ type: 'object',
52
+ properties: {
53
+ default_value: {
54
+ type: 'string',
55
+ enum: Object.values(auth0_1.Management.ConnectionProfileCrossAppAccessResourceAppStatusDefaultValueEnum),
56
+ description: 'The default Cross App Access resource app status.',
57
+ },
58
+ allowed_values: {
59
+ type: 'array',
60
+ items: {
61
+ type: 'string',
62
+ enum: Object.values(auth0_1.Management.ConnectionProfileCrossAppAccessResourceAppStatusValueEnum),
63
+ },
64
+ uniqueItems: true,
65
+ description: 'The allowed Cross App Access resource app status values.',
66
+ },
67
+ },
68
+ // allowed_values is optional per the SDK type (unlike the client's
69
+ // third_party_client_access, which requires both fields).
70
+ required: ['default_value'],
71
+ },
72
+ },
73
+ required: ['status'],
74
+ },
45
75
  strategy_overrides: {
46
76
  type: ['object', 'null'],
47
77
  properties: {
@@ -159,6 +159,15 @@ export declare const schema: {
159
159
  id: {
160
160
  type: string;
161
161
  };
162
+ name: {
163
+ type: string;
164
+ };
165
+ email: {
166
+ type: string;
167
+ };
168
+ direct_members_count: {
169
+ type: string;
170
+ };
162
171
  };
163
172
  required: string[];
164
173
  };
@@ -173,9 +182,7 @@ type DirectoryProvisioningConfig = Management.DirectoryProvisioning;
173
182
  export type Connection = Management.ConnectionForList & {
174
183
  enabled_clients?: string[];
175
184
  directory_provisioning_configuration?: Pick<DirectoryProvisioningConfig, 'mapping' | 'synchronize_automatically' | 'synchronize_groups'> & {
176
- synchronized_groups?: Array<{
177
- id: string;
178
- }>;
185
+ synchronized_groups?: Management.SynchronizedGroupPayload[];
179
186
  };
180
187
  };
181
188
  export declare const addExcludedConnectionPropertiesToChanges: ({ proposedChanges, existingConnections, config, }: {
@@ -251,9 +258,7 @@ export default class ConnectionsHandler extends DefaultAPIHandler {
251
258
  /**
252
259
  * Retrieves all synchronized groups for a connection using checkpoint pagination.
253
260
  */
254
- getConnectionSynchronizedGroups(connectionId: string): Promise<Array<{
255
- id: string;
256
- }> | null>;
261
+ getConnectionSynchronizedGroups(connectionId: string): Promise<Management.SynchronizedGroupPayload[] | null>;
257
262
  /**
258
263
  * Replaces the synchronized groups for a connection (PUT replace-all semantics).
259
264
  */
@@ -172,6 +172,9 @@ exports.schema = {
172
172
  type: 'object',
173
173
  properties: {
174
174
  id: { type: 'string' },
175
+ name: { type: 'string' },
176
+ email: { type: 'string' },
177
+ direct_members_count: { type: 'number' },
175
178
  },
176
179
  required: ['id'],
177
180
  },
@@ -377,12 +380,15 @@ class ConnectionsHandler extends default_1.default {
377
380
  }
378
381
  getFormattedOptions(connection, clients) {
379
382
  try {
383
+ const { idpinitiated } = connection.options;
380
384
  return {
381
385
  options: {
382
386
  ...connection.options,
383
387
  idpinitiated: {
384
- ...connection.options.idpinitiated,
385
- client_id: (0, utils_1.convertClientNameToId)(connection.options.idpinitiated.client_id, clients),
388
+ ...idpinitiated,
389
+ ...(idpinitiated.client_id && {
390
+ client_id: (0, utils_1.convertClientNameToId)(idpinitiated.client_id, clients),
391
+ }),
386
392
  },
387
393
  },
388
394
  };
@@ -483,12 +489,28 @@ class ConnectionsHandler extends default_1.default {
483
489
  try {
484
490
  const groups = [];
485
491
  let page = await this.client.connections.directoryProvisioning.listSynchronizedGroups(connectionId, {});
486
- for (const g of page.data ?? [])
487
- groups.push({ id: g.id });
492
+ for (const g of page.data ?? []) {
493
+ groups.push({
494
+ id: g.id,
495
+ ...(g.name !== undefined && { name: g.name }),
496
+ ...(g.email !== undefined && { email: g.email }),
497
+ ...(g.direct_members_count !== undefined && {
498
+ direct_members_count: g.direct_members_count,
499
+ }),
500
+ });
501
+ }
488
502
  while (page.hasNextPage?.()) {
489
503
  page = await page.getNextPage();
490
- for (const g of page.data ?? [])
491
- groups.push({ id: g.id });
504
+ for (const g of page.data ?? []) {
505
+ groups.push({
506
+ id: g.id,
507
+ ...(g.name !== undefined && { name: g.name }),
508
+ ...(g.email !== undefined && { email: g.email }),
509
+ ...(g.direct_members_count !== undefined && {
510
+ direct_members_count: g.direct_members_count,
511
+ }),
512
+ });
513
+ }
492
514
  }
493
515
  return groups;
494
516
  }
@@ -725,7 +747,11 @@ class ConnectionsHandler extends default_1.default {
725
747
  ...(enabledClients !== undefined && { enabled_clients: enabledClients }),
726
748
  };
727
749
  });
728
- const proposedChanges = await super.dryRunChanges({ ...assets, connections: formatted });
750
+ let proposedChanges = await super.dryRunChanges({ ...assets, connections: formatted });
751
+ const includedConnections = (assets.include && assets.include.connections) || [];
752
+ const excludedConnections = (assets.exclude && assets.exclude.connections) || [];
753
+ proposedChanges = (0, utils_1.filterExcluded)(proposedChanges, excludedConnections);
754
+ proposedChanges = (0, utils_1.filterIncluded)(proposedChanges, includedConnections);
729
755
  return (0, exports.addExcludedConnectionPropertiesToChanges)({
730
756
  proposedChanges,
731
757
  existingConnections,
@@ -462,12 +462,21 @@ class DatabaseHandler extends default_1.default {
462
462
  }
463
463
  return connection;
464
464
  });
465
+ // A connection can return both legacy password fields and `password_options` on read, but
466
+ // they're mutually exclusive on write. Strip the legacy fields to keep the export deployable.
467
+ const dbConnectionsNormalized = dbConnectionsWithActionNames.map((connection) => {
468
+ if (connection.options && 'password_options' in connection.options) {
469
+ const { passwordPolicy, password_complexity_options, password_history, password_no_personal_info, password_dictionary, ...options } = connection.options;
470
+ return { ...connection, options };
471
+ }
472
+ return connection;
473
+ });
465
474
  // If options option is empty for all connection, log the missing options scope.
466
- const isOptionExists = dbConnectionsWithActionNames.every((c) => c.options && Object.keys(c.options).length > 0);
475
+ const isOptionExists = dbConnectionsNormalized.every((c) => c.options && Object.keys(c.options).length > 0);
467
476
  if (!isOptionExists) {
468
477
  logger_1.default.warn(`Insufficient scope the read:connections_options scope is required to get ${this.type} options.`);
469
478
  }
470
- this.existing = dbConnectionsWithActionNames;
479
+ this.existing = dbConnectionsNormalized;
471
480
  return this.existing;
472
481
  }
473
482
  async calcChanges(assets) {
@@ -545,7 +554,7 @@ class DatabaseHandler extends default_1.default {
545
554
  assets: formatted,
546
555
  existing: existingDatabasesConnections,
547
556
  identifiers: this.identifiers,
548
- ignoreDryRunFields: this.ignoreDryRunFields,
557
+ ignoreDryRunFields: this.getEffectiveIgnoreDryRunFields(),
549
558
  });
550
559
  }
551
560
  // Run after clients are updated so we can convert all the enabled_clients names to id's
@@ -1,6 +1,20 @@
1
1
  import { Asset, Assets, Auth0APIClient, CalculatedChanges } from '../../../types';
2
2
  import { ConfigFunction } from '../../../configFactory';
3
3
  export declare function order(value: any): (t: any, n: any, descriptor: any) => any;
4
+ export interface RetryOptions {
5
+ maxRetries?: number;
6
+ initialDelay?: number;
7
+ maxDelay?: number;
8
+ onRetry?: (error: any, attempt: number, delay: number) => void;
9
+ }
10
+ /**
11
+ * Executes a function with exponential backoff retry logic for rate limit errors (429).
12
+ *
13
+ * @param fn - The function to execute with retry logic
14
+ * @param options - Configuration options for retry behavior
15
+ * @returns Promise that resolves with the function result or rejects after max retries
16
+ */
17
+ export declare function retryWithExponentialBackoff<T>(fn: () => Promise<T>, options?: RetryOptions): Promise<T>;
4
18
  type ApiMethodOverride = string | Function;
5
19
  export default class APIHandler {
6
20
  config: ConfigFunction;
@@ -50,6 +64,15 @@ export default class APIHandler {
50
64
  */
51
65
  getEffectiveIgnoreDryRunFields(): string[];
52
66
  getClientFN(fn: ApiMethodOverride): Function;
67
+ /**
68
+ * Builds the exponential-backoff retry configuration for this handler from the
69
+ * shared `AUTH0_MAX_RETRIES` / `AUTH0_RETRY_INITIAL_DELAY_MS` /
70
+ * `AUTH0_RETRY_MAX_DELAY_MS` config keys. Exposed so that handlers which issue
71
+ * writes outside the default `processChanges` flow (e.g. organizations, which
72
+ * writes nested connections/grants directly) can wrap those calls in the same
73
+ * 429 backoff behaviour as the base handler.
74
+ */
75
+ getRetryConfig(): RetryOptions;
53
76
  didDelete(item: Asset): void;
54
77
  didCreate(item: Asset): void;
55
78
  didUpdate(item: Asset): void;
@@ -4,6 +4,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.order = order;
7
+ exports.retryWithExponentialBackoff = retryWithExponentialBackoff;
7
8
  const auth0_1 = require("auth0");
8
9
  const validationError_1 = __importDefault(require("../../validationError"));
9
10
  const utils_1 = require("../../utils");
@@ -114,6 +115,25 @@ class APIHandler {
114
115
  }
115
116
  return fn;
116
117
  }
118
+ /**
119
+ * Builds the exponential-backoff retry configuration for this handler from the
120
+ * shared `AUTH0_MAX_RETRIES` / `AUTH0_RETRY_INITIAL_DELAY_MS` /
121
+ * `AUTH0_RETRY_MAX_DELAY_MS` config keys. Exposed so that handlers which issue
122
+ * writes outside the default `processChanges` flow (e.g. organizations, which
123
+ * writes nested connections/grants directly) can wrap those calls in the same
124
+ * 429 backoff behaviour as the base handler.
125
+ */
126
+ getRetryConfig() {
127
+ const retryConfig = {
128
+ maxRetries: this.config('AUTH0_MAX_RETRIES') || DEFAULT_MAX_RETRIES,
129
+ initialDelay: this.config('AUTH0_RETRY_INITIAL_DELAY_MS') || DEFAULT_INITIAL_DELAY_MS,
130
+ maxDelay: this.config('AUTH0_RETRY_MAX_DELAY_MS') || DEFAULT_MAX_DELAY_MS,
131
+ onRetry: (error, attempt, delay) => {
132
+ logger_1.default.warn(`Rate limit hit for [${this.type}]. Retrying attempt ${attempt}/${retryConfig.maxRetries} after ${Math.round(delay / 1000)}s...`);
133
+ },
134
+ };
135
+ return retryConfig;
136
+ }
117
137
  didDelete(item) {
118
138
  logger_1.default.info(`Deleted [${this.type}]: ${this.objString(item)}`);
119
139
  }
@@ -210,7 +230,6 @@ class APIHandler {
210
230
  return (0, calculateDryRunChanges_1.calculateDryRunChanges)({
211
231
  type: this.type,
212
232
  assets: typeAssets,
213
- // @ts-ignore TODO: investigate what happens when `existing` is null
214
233
  existing,
215
234
  identifiers: this.identifiers,
216
235
  ignoreDryRunFields: this.getEffectiveIgnoreDryRunFields(),
@@ -243,7 +262,6 @@ class APIHandler {
243
262
  return (0, calculateDryRunChanges_1.calculateDryRunChanges)({
244
263
  type: this.type,
245
264
  assets: typeAssets,
246
- // @ts-ignore TODO: investigate what happens when `existing` is null
247
265
  existing,
248
266
  identifiers: this.identifiers,
249
267
  ignoreDryRunFields: this.getEffectiveIgnoreDryRunFields(),
@@ -282,14 +300,7 @@ class APIHandler {
282
300
  const conflicts = changes.conflicts || [];
283
301
  logger_1.default.debug(`Start processChanges for ${this.type} [delete:${del.length}] [update:${update.length}], [create:${create.length}], [conflicts:${conflicts.length}]`);
284
302
  // Set retry configuration from config
285
- const retryConfig = {
286
- maxRetries: this.config('AUTH0_MAX_RETRIES') || DEFAULT_MAX_RETRIES,
287
- initialDelay: this.config('AUTH0_RETRY_INITIAL_DELAY_MS') || DEFAULT_INITIAL_DELAY_MS,
288
- maxDelay: this.config('AUTH0_RETRY_MAX_DELAY_MS') || DEFAULT_MAX_DELAY_MS,
289
- onRetry: (error, attempt, delay) => {
290
- logger_1.default.warn(`Rate limit hit for [${this.type}]. Retrying attempt ${attempt}/${retryConfig.maxRetries} after ${Math.round(delay / 1000)}s...`);
291
- },
292
- };
303
+ const retryConfig = this.getRetryConfig();
293
304
  // Process Deleted
294
305
  if (del.length > 0) {
295
306
  const allowDelete = this.config('AUTH0_ALLOW_DELETE') === 'true' || this.config('AUTH0_ALLOW_DELETE') === true;
@@ -1,6 +1,7 @@
1
1
  import { Management } from 'auth0';
2
2
  import DefaultHandler from './default';
3
3
  import { Asset, Assets, CalculatedChanges } from '../../../types';
4
+ import { Client } from './clients';
4
5
  export declare const schema: {
5
6
  type: string;
6
7
  items: {
@@ -108,6 +109,25 @@ export declare const schema: {
108
109
  type: string;
109
110
  enum: ("allow" | "block")[];
110
111
  };
112
+ is_app_entitlement_active: {
113
+ type: string;
114
+ };
115
+ clients: {
116
+ type: string;
117
+ items: {
118
+ type: string;
119
+ properties: {
120
+ client_id: {
121
+ type: string;
122
+ };
123
+ use_for_member_access: {
124
+ type: string;
125
+ };
126
+ };
127
+ required: string[];
128
+ };
129
+ default: never[];
130
+ };
111
131
  };
112
132
  required: string[];
113
133
  };
@@ -119,6 +139,7 @@ type FormattedClientGrants = {
119
139
  export default class OrganizationsHandler extends DefaultHandler {
120
140
  existing: Asset[];
121
141
  formattedClientGrants: FormattedClientGrants[];
142
+ allClients: Client[];
122
143
  constructor(config: DefaultHandler);
123
144
  deleteOrganization(org: any): Promise<void>;
124
145
  deleteOrganizations(data: Asset[]): Promise<void>;
@@ -126,8 +147,9 @@ export default class OrganizationsHandler extends DefaultHandler {
126
147
  createOrganizations(creates: CalculatedChanges['create']): Promise<void>;
127
148
  updateOrganization(org: any, organizations: any): Promise<{
128
149
  id: any;
129
- }>;
150
+ } | null>;
130
151
  getClientGrantIDByClientName(clientsName: string): string;
152
+ getClientIdByClientName(clientName: string): string;
131
153
  getFormattedClientGrants(): Promise<FormattedClientGrants[]>;
132
154
  updateOrganizations(updates: CalculatedChanges['update'], orgs: Asset[]): Promise<void>;
133
155
  getType(): Promise<Asset[]>;
@@ -141,5 +163,11 @@ export default class OrganizationsHandler extends DefaultHandler {
141
163
  createOrganizationDiscoveryDomain(organizationId: string, discoveryDomain: Management.CreateOrganizationDiscoveryDomainRequestContent): Promise<Management.CreateOrganizationDiscoveryDomainResponseContent>;
142
164
  updateOrganizationDiscoveryDomain(organizationId: string, discoveryDomainId: string, discoveryDomain: string, discoveryDomainUpdate: Management.UpdateOrganizationDiscoveryDomainRequestContent): Promise<Management.UpdateOrganizationDiscoveryDomainResponseContent>;
143
165
  deleteOrganizationDiscoveryDomain(organizationId: string, discoveryDomain: string, discoveryDomainId: string): Promise<void>;
166
+ getAllOrganizationClients(organizationId: string): Promise<Management.OrganizationClient[] | null>;
167
+ createOrganizationClients(organizationId: string, clients: Array<{
168
+ client_id: string;
169
+ use_for_member_access: boolean;
170
+ }>): Promise<void>;
171
+ deleteOrganizationClients(organizationId: string, clientIds: string[]): Promise<void>;
144
172
  }
145
173
  export {};