frodo-lib
Version:
A library to manage ForgeRock Identity Cloud tenants, ForgeOps deployments, and classic deployments.
1,183 lines (1,161 loc) • 284 kB
TypeScript
import { AxiosRequestConfig, AxiosResponse, AxiosInstance } from 'axios';
import { Reader } from 'properties-reader';
interface NoIdObjectSkeletonInterface {
_rev?: string;
[k: string]: string | number | boolean | string[] | IdObjectSkeletonInterface | object | undefined;
}
interface IdObjectSkeletonInterface extends NoIdObjectSkeletonInterface {
_id?: string;
}
interface AmConfigEntityInterface extends IdObjectSkeletonInterface {
_type?: EntityType;
}
type Readable<Type> = Type;
type Writable<Type> = {
inherited: boolean;
value?: Type;
};
type PagedResult<Type> = {
result: Type[];
resultCount: number;
pagedResultsCookie: string;
totalPagedResultsPolicy: 'EXACT' | 'NONE';
totalPagedResults: number;
remainingPagedResults: number;
};
type EntityType = IdObjectSkeletonInterface & {
name: string;
collection: boolean;
};
interface FeatureInterface extends IdObjectSkeletonInterface {
installedVersion: string;
availableVersions: string[];
}
type CallbackType = 'NameCallback' | 'PasswordCallback' | 'TextInputCallback';
type CallbackKeyValuePair = {
name: string;
value: any;
};
type Callback = {
type: CallbackType;
output: CallbackKeyValuePair[];
input: CallbackKeyValuePair[];
};
type CallbackHandler = (callback: Callback) => Callback;
type Jose = {
createJwkRsa(): Promise<JwkRsa>;
getJwkRsaPublic(jwkJson: JwkRsa): Promise<JwkRsaPublic>;
createJwks(...keys: JwkInterface[]): JwksInterface;
createSignedJwtToken(payload: string | object, jwkJson: JwkRsa): Promise<any>;
verifySignedJwtToken(jwt: string, jwkJson: JwkRsaPublic): Promise<any>;
};
interface JwkInterface {
kty: string;
use?: string;
key_ops?: string[];
alg: string;
kid?: string;
x5u?: string;
x5c?: string;
x5t?: string;
'x5t#S256'?: string;
}
type JwkRsa = JwkInterface & {
d: string;
dp: string;
dq: string;
e: string;
n: string;
p: string;
q: string;
qi: string;
};
type JwkRsaPublic = JwkInterface & {
e: string;
n: string;
};
interface JwksInterface {
keys: JwkInterface[];
}
type AccessTokenResponseType = {
access_token: string;
id_token?: string;
scope: string;
token_type: string;
expires_in: number;
};
type TokenInfoResponseType = {
sub: string;
cts: string;
auditTrackingId: string;
subname: string;
iss: string;
tokenName: string;
token_type: string;
authGrantId: string;
access_token: string;
aud: string;
nbf: number;
grant_type: string;
scope: string[];
auth_time: number;
sessionToken?: string;
realm: string;
exp: number;
iat: number;
expires_in: number;
jti: string;
[k: string]: string | number | string[];
};
type AccessTokenMetaType = AccessTokenResponseType & {
expires: number;
from_cache?: boolean;
};
type OAuth2Oidc = {
authorize(amBaseUrl: string, data: string, config: AxiosRequestConfig): Promise<AxiosResponse<any, any>>;
accessToken(amBaseUrl: string, data: any, config: AxiosRequestConfig): Promise<AccessTokenMetaType>;
accessTokenRfc7523AuthZGrant(clientId: string, jwt: string, scope: string[], config?: AxiosRequestConfig): Promise<AccessTokenMetaType>;
getTokenInfo(amBaseUrl: string, config: AxiosRequestConfig): Promise<TokenInfoResponseType>;
clientCredentialsGrant(amBaseUrl: string, clientId: string, clientSecret: string, scope: string): Promise<AccessTokenMetaType>;
};
type Authenticate = {
/**
* Get tokens and store them in State
* @param {boolean} forceLoginAsUser true to force login as user even if a service account is available (default: false)
* @param {boolean} autoRefresh true to automatically refresh tokens before they expire (default: true)
* @param {string[]} types Array of supported deployment types. The function will throw an error if an unsupported type is detected (default: ['classic', 'cloud', 'forgeops'])
* @param {CallbackHandler} callbackHandler function allowing the library to collect responses from the user through callbacks
* @returns {Promise<Tokens>} object containing the tokens
*/
getTokens(forceLoginAsUser?: boolean, autoRefresh?: boolean, types?: string[], callbackHandler?: CallbackHandler): Promise<Tokens>;
/**
* Get access token for service account
* @param {string} saId optional service account id
* @param {JwkRsa} saJwk optional service account JWK
* @returns {string | null} Access token or null
* @deprecated since v2.0.0 use {@link Authenticate.getTokens | getTokens} instead
* ```javascript
* getTokens(): Promise<boolean>
* ```
* @group Deprecated
*/
getAccessTokenForServiceAccount(saId?: string, saJwk?: JwkRsa): Promise<string | null>;
};
type UserSessionMetaType = {
tokenId: string;
successUrl: string;
realm: string;
expires: number;
from_cache?: boolean;
};
type Tokens = {
bearerToken?: AccessTokenMetaType;
userSessionToken?: UserSessionMetaType;
subject?: string;
host?: string;
realm?: string;
};
type ProgressIndicatorType = 'determinate' | 'indeterminate';
type ProgressIndicatorStatusType = 'none' | 'success' | 'warn' | 'fail';
type State = {
/**
* Get a clone of the full state as an object
* @returns a clone of the state
*/
getState(): StateInterface;
/**
* Set the AM host base URL
* @param host Access Management base URL, e.g.: https://cdk.iam.example.com/am. To use a connection profile, just specify a unique substring.
*/
setHost(host: string): void;
/**
* Get the AM host base URL
* @returns the AM host base URL
*/
getHost(): string;
/**
* Set the IDM host base URL
* @param host Identity Management base URL, e.g.: https://cdk.iam.example.com/openidm. To use a connection profile, just specify a unique substring.
*/
setIdmHost(host: string): void;
/**
* Get the IDM host base URL
* @returns the IDM host base URL
*/
getIdmHost(): string;
setUsername(username: string): void;
getUsername(): string;
setPassword(password: string): void;
getPassword(): string;
setRealm(realm: string): void;
getRealm(): string;
setUseRealmPrefixOnManagedObjects(useRealmPrefixOnManagedObjects: boolean): void;
getUseRealmPrefixOnManagedObjects(): boolean;
setDeploymentType(type: string): void;
getDeploymentType(): string;
setAdminClientId(type: string): void;
getAdminClientId(): string;
setAdminClientRedirectUri(type: string): void;
getAdminClientRedirectUri(): string;
setAllowInsecureConnection(allowInsecureConnection: boolean): void;
getAllowInsecureConnection(): boolean;
setCookieName(name: string): void;
getCookieName(): string;
setUserSessionTokenMeta(value: UserSessionMetaType): void;
getCookieValue(): string;
getUserSessionTokenMeta(): UserSessionMetaType;
setFeatures(features: FeatureInterface[]): void;
getFeatures(): FeatureInterface[];
setAuthenticationHeaderOverrides(overrides: Record<string, string>): void;
getAuthenticationHeaderOverrides(): Record<string, string>;
setAuthenticationService(service: string): void;
getAuthenticationService(): string;
setServiceAccountId(uuid: string): void;
getServiceAccountId(): string;
setServiceAccountJwk(jwk: JwkRsa): void;
getServiceAccountJwk(): JwkRsa;
setServiceAccountScope(scope: string): void;
getServiceAccountScope(): string;
setUseBearerTokenForAmApis(useBearerTokenForAmApis: boolean): void;
getUseBearerTokenForAmApis(): boolean;
setBearerTokenMeta(token: AccessTokenMetaType): void;
getBearerToken(): string;
getBearerTokenMeta(): AccessTokenMetaType;
setLogApiKey(key: string): void;
getLogApiKey(): string;
setLogApiSecret(secret: string): void;
getLogApiSecret(): string;
setAmVersion(version: string): void;
getAmVersion(): string;
setFrodoVersion(version: string): void;
getFrodoVersion(): string;
setConnectionProfilesPath(path: string): void;
getConnectionProfilesPath(): string;
setUseTokenCache(useTokenCache: boolean): void;
getUseTokenCache(): boolean;
setTokenCachePath(path: string): void;
getTokenCachePath(): string;
setMasterKeyPath(path: string): void;
getMasterKeyPath(): string;
setOutputFile(file: string): void;
getOutputFile(): string;
setDirectory(directory: string): void;
getDirectory(): string;
setAutoRefreshTimer(timer: NodeJS.Timeout): void;
getAutoRefreshTimer(): NodeJS.Timeout;
setCurlirizeHandler(handler: (message: string) => void): void;
getCurlirizeHandler(): (message: string) => void;
setCurlirize(curlirize: boolean): void;
getCurlirize(): boolean;
setCreateProgressHandler(handler: (type: ProgressIndicatorType, total?: number, message?: string) => string): void;
getCreateProgressHandler(): (type: ProgressIndicatorType, total?: number, message?: string) => string;
setUpdateProgressHandler(handler: (id: string, message: string) => void): void;
getUpdateProgressHandler(): (id: string, message: string) => void;
setStopProgressHandler(handler: (id: string, message: string, status?: ProgressIndicatorStatusType) => void): void;
getStopProgressHandler(): (id: string, message: string, status?: ProgressIndicatorStatusType) => void;
setPrintHandler(handler: (message: string | object, type?: string, newline?: boolean) => void): void;
getPrintHandler(): (message: string | object, type?: string, newline?: boolean) => void;
setErrorHandler(handler: (error: Error, message?: string) => void): void;
getErrorHandler(): (error: Error, message?: string) => void;
setVerboseHandler(handler: (message: string | object) => void): void;
getVerboseHandler(): (message: string | object) => void;
setVerbose(verbose: boolean): void;
getVerbose(): boolean;
setDebugHandler(handler: (message: string | object) => void): void;
getDebugHandler(): (message: string | object) => void;
setDebug(debug: boolean): void;
getDebug(): boolean;
/**
* Reset the state to default values
*/
reset(): void;
/**
* @deprecated since v0.17.0 use `setHost(host: string)` instead
*/
setTenant(tenant: string): void;
/**
* @deprecated since v0.17.0 use `getHost` instead
*/
getTenant(): string;
};
interface StateInterface {
host?: string;
idmHost?: string;
username?: string;
password?: string;
realm?: string;
useRealmPrefixOnManagedObjects?: boolean;
deploymentType?: string;
adminClientId?: string;
adminClientRedirectUri?: string;
allowInsecureConnection?: boolean;
authenticationHeaderOverrides?: Record<string, string>;
authenticationService?: string;
cookieName?: string;
userSessionToken?: UserSessionMetaType;
features?: FeatureInterface[];
serviceAccountId?: string;
serviceAccountJwk?: JwkRsa;
serviceAccountScope?: string;
useBearerTokenForAmApis?: boolean;
bearerToken?: AccessTokenMetaType;
logApiKey?: string;
logApiSecret?: string;
amVersion?: string;
frodoVersion?: string;
connectionProfilesPath?: string;
useTokenCache?: boolean;
tokenCachePath?: string;
masterKeyPath?: string;
outputFile?: string;
directory?: string;
autoRefreshTimer?: NodeJS.Timeout;
printHandler?: (message: string | object, type?: string, newline?: boolean) => void;
errorHandler?: (error: Error, message: string) => void;
verboseHandler?: (message: string | object) => void;
verbose?: boolean;
debugHandler?: (message: string | object) => void;
debug?: boolean;
curlirizeHandler?: (message: string) => void;
curlirize?: boolean;
createProgressHandler?: (type: ProgressIndicatorType, total?: number, message?: string) => string;
updateProgressHandler?: (id: string, message: string) => void;
stopProgressHandler?: (id: string, message: string, status?: string) => void;
}
type OAuth2ClientSkeleton = AmConfigEntityInterface & {
overrideOAuth2ClientConfig?: {
[k: string]: string | number | boolean | string[] | object | undefined;
};
advancedOAuth2ClientConfig?: {
descriptions: {
inherited: boolean;
value: string[];
};
grantTypes?: Readable<string[]> | Writable<string[]>;
isConsentImplied?: Readable<boolean> | Writable<boolean>;
tokenEndpointAuthMethod?: Readable<string> | Writable<string>;
responseTypes?: Readable<string[]> | Writable<string[]>;
[k: string]: string | number | boolean | string[] | object | undefined;
};
signEncOAuth2ClientConfig?: {
jwkSet?: Readable<string> | Writable<string>;
publicKeyLocation?: Readable<string> | Writable<string>;
[k: string]: string | number | boolean | string[] | object | undefined;
};
coreOpenIDClientConfig?: {
[k: string]: string | number | boolean | string[] | object | undefined;
};
coreOAuth2ClientConfig?: {
userpassword?: string;
clientName?: Readable<string[]> | Writable<string[]>;
clientType?: Readable<string> | Writable<string>;
accessTokenLifetime?: Readable<number> | Writable<number>;
scopes?: Readable<string[]> | Writable<string[]>;
defaultScopes?: {
value: string[];
[k: string]: string | number | boolean | string[] | object | undefined;
};
[k: string]: string | number | boolean | string[] | object | undefined;
};
coreUmaClientConfig?: {
[k: string]: string | number | boolean | string[] | object | undefined;
};
};
type OAuth2TrustedJwtIssuerSkeleton = IdObjectSkeletonInterface & {
allowedSubjects?: Readable<string[]> | Writable<string[]>;
jwksCacheTimeout?: Readable<number> | Writable<number>;
jwkSet?: Readable<string> | Writable<string>;
consentedScopesClaim?: Readable<string> | Writable<string>;
issuer: Readable<string> | Writable<string>;
jwkStoreCacheMissCacheTime?: Readable<number> | Writable<number>;
resourceOwnerIdentityClaim?: Readable<string> | Writable<string>;
jwksUri?: Readable<string> | Writable<string>;
_type: {
_id: 'TrustedJwtIssuer';
name: 'OAuth2 Trusted JWT Issuer';
collection: true;
};
};
type Admin = {
generateRfc7523AuthZGrantArtefacts(clientId: string, iss: string, jwk?: JwkRsa, sub?: string, scope?: string[], options?: {
save: boolean;
}): Promise<{
jwk: JwkRsa;
jwks: JwksInterface;
client: OAuth2ClientSkeleton;
issuer: OAuth2TrustedJwtIssuerSkeleton;
}>;
executeRfc7523AuthZGrantFlow(clientId: string, iss: string, jwk: JwkRsa, sub: string, scope?: string[]): Promise<AccessTokenResponseType>;
generateRfc7523ClientAuthNArtefacts(clientId: string, aud?: string, jwk?: JwkRsa, options?: {
save: boolean;
}): Promise<{
jwk: JwkRsa;
jwks: JwksInterface;
jwt: any;
client: OAuth2ClientSkeleton;
}>;
trainAA(apiKey: string, apiSecret: string, customUsernames?: string[], customUserAgents?: string[], customIPs?: string[], loginsPerUser?: number, service?: string): Promise<void>;
/**
* @deprecated Deprecated since v2.0.0. This function may be removed in future versions. Similar functionality has been added to the frodo-cli code base.
* @group Deprecated
*/
listOAuth2CustomClients(): Promise<string[]>;
/**
* @deprecated Deprecated since v2.0.0. This function may be removed in future versions. Similar functionality has been added to the frodo-cli code base.
* @group Deprecated
*/
listOAuth2AdminClients(): Promise<string[]>;
/**
* @deprecated Deprecated since v2.0.0. This function may be removed in future versions. Similar functionality has been added to the frodo-cli code base.
* @group Deprecated
*/
listNonOAuth2AdminStaticUserMappings(showProtected: boolean): Promise<string[]>;
/**
* @deprecated Deprecated since v2.0.0. This function may be removed in future versions. Similar functionality has been added to the frodo-cli code base.
* @group Deprecated
*/
addAutoIdStaticUserMapping(): Promise<void>;
/**
* @deprecated Deprecated since v2.0.0. This function may be removed in future versions. Similar functionality has been added to the frodo-cli code base.
* @group Deprecated
*/
grantOAuth2ClientAdminPrivileges(clientId: string): Promise<void>;
/**
* @deprecated Deprecated since v2.0.0. This function may be removed in future versions. Similar functionality has been added to the frodo-cli code base.
* @group Deprecated
*/
revokeOAuth2ClientAdminPrivileges(clientId: string): Promise<void>;
/**
* @deprecated Deprecated since v2.0.0. This function may be removed in future versions. Similar functionality has been added to the frodo-cli code base.
* @group Deprecated
*/
createOAuth2ClientWithAdminPrivileges(clientId: string, clientSecret: string): Promise<void>;
/**
* @deprecated Deprecated since v2.0.0. This function may be removed in future versions. Similar functionality has been added to the frodo-cli code base.
* @group Deprecated
*/
createLongLivedToken(clientId: string, clientSecret: string, scope: string, secret: string | boolean, lifetime: number): Promise<any>;
/**
* @deprecated Deprecated since v2.0.0. This function may be removed in future versions. Similar functionality has been added to the frodo-cli code base.
* @group Deprecated
*/
removeStaticUserMapping(subject: string): Promise<void>;
/**
* @deprecated Deprecated since v2.0.0. This function may be removed in future versions. Similar functionality has been added to the frodo-cli code base.
* @group Deprecated
*/
hideGenericExtensionAttributes(includeCustomized: boolean, dryRun: boolean): Promise<void>;
/**
* @deprecated Deprecated since v2.0.0. This function may be removed in future versions. Similar functionality has been added to the frodo-cli code base.
* @group Deprecated
*/
showGenericExtensionAttributes(includeCustomized: boolean, dryRun: boolean): Promise<void>;
/**
* @deprecated Deprecated since v2.0.0. This function may be removed in future versions. Similar functionality has been added to the frodo-cli code base.
* @group Deprecated
*/
repairOrgModel(excludeCustomized: boolean, extendPermissions: boolean, dryRun: boolean): Promise<void>;
};
type GatewayAgentType = 'IdentityGatewayAgent';
type JavaAgentType = 'J2EEAgent';
type WebAgentType = 'WebAgent';
type AgentType = GatewayAgentType | JavaAgentType | WebAgentType | EntityType;
type AgentSkeleton = AmConfigEntityInterface;
interface ExportMetaData {
origin: string;
originAmVersion: string;
exportedBy: string;
exportDate: string;
exportTool: string;
exportToolVersion: string;
}
type Agent = {
/**
* Create an empty agent export template
* @returns {AgentExportInterface} an empty agent export template
*/
createAgentExportTemplate(): AgentExportInterface;
/**
* Read all agents.
* @returns {Promise<AgentSkeleton[]>} a promise that resolves to an array of agent objects
*/
readAgents(): Promise<AgentSkeleton[]>;
/**
* Read agent
* @param {string} agentId agent id/name
* @returns {Promise<AgentSkeleton>} a promise that resolves to an agent object
*/
readAgent(agentId: string): Promise<AgentSkeleton>;
/**
* Read agent by type and id
* @param {string} agentType agent type (IdentityGatewayAgent, J2EEAgent, WebAgent)
* @param {string} agentId agent id/name
* @returns {Promise<AgentSkeleton>} a promise that resolves to an agent object
*/
readAgentByTypeAndId(agentType: AgentType, agentId: string): Promise<AgentSkeleton>;
/**
* Read identity gateway agents
* @returns {Promise<AgentSkeleton[]>} a promise that resolves to an array of IdentityGatewayAgent objects
*/
readIdentityGatewayAgents(): Promise<AgentSkeleton[]>;
/**
* Read identity gateway agent
* @param {string} gatewayId gateway id
* @returns {Promise<AgentSkeleton>} a promise that resolves to an object containing an IdentityGatewayAgent object
*/
readIdentityGatewayAgent(gatewayId: string): Promise<AgentSkeleton>;
/**
* Create identity gateway agent
* @param {string} gatewayId gateway id
* @param {AgentSkeleton} gatewayData IdentityGatewayAgent object
* @returns {Promise<AgentSkeleton>} a promise that resolves to an object containing an IdentityGatewayAgent object
*/
createIdentityGatewayAgent(gatewayId: string, gatewayData: AgentSkeleton): Promise<AgentSkeleton>;
/**
* Update or create identity gateway agent
* @param {string} gatewayId gateway id
* @param {AgentSkeleton} gatewayData IdentityGatewayAgent object
* @returns {Promise<AgentSkeleton>} a promise that resolves to an object containing an IdentityGatewayAgent object
*/
updateIdentityGatewayAgent(gatewayId: string, gatewayData: AgentSkeleton): Promise<AgentSkeleton>;
/**
* Read java agents
* @returns {Promise<AgentSkeleton[]>} a promise that resolves to an array of J2EEAgent objects
*/
readJavaAgents(): Promise<AgentSkeleton[]>;
/**
* Read java agent
* @param {string} agentId java agent id
* @returns {Promise<AgentSkeleton>} a promise that resolves to an object containing an J2EEAgent object
*/
readJavaAgent(agentId: string): Promise<AgentSkeleton>;
/**
* Put java agent
* @param {string} agentId java agent id
* @param {AgentSkeleton} agentData java agent object
* @returns {Promise<AgentSkeleton>} a promise that resolves to an object containing an java agent object
*/
createJavaAgent(agentId: string, agentData: AgentSkeleton): Promise<AgentSkeleton>;
/**
* Put java agent
* @param {string} agentId java agent id
* @param {AgentSkeleton} agentData java agent object
* @returns {Promise<AgentSkeleton>} a promise that resolves to an object containing an java agent object
*/
updateJavaAgent(agentId: string, agentData: AgentSkeleton): Promise<AgentSkeleton>;
/**
* Read web agents
* @returns {Promise<AgentSkeleton[]>} a promise that resolves to an array of WebAgent objects
*/
readWebAgents(): Promise<AgentSkeleton[]>;
/**
* Read web agent
* @param {string} agentId web agent id
* @returns {Promise<AgentSkeleton>} a promise that resolves to an object containing an WebAgent object
*/
readWebAgent(agentId: string): Promise<AgentSkeleton>;
/**
* Create web agent
* @param {string} agentId web agent id
* @param {AgentSkeleton} agentData WebAgent object
* @returns {Promise<AgentSkeleton>} a promise that resolves to an object containing an WebAgent object
*/
createWebAgent(agentId: string, agentData: AgentSkeleton): Promise<AgentSkeleton>;
/**
* Update or create web agent
* @param {string} agentId web agent id
* @param {AgentSkeleton} agentData WebAgent object
* @returns {Promise<AgentSkeleton>} a promise that resolves to an object containing an WebAgent object
*/
updateWebAgent(agentId: string, agentData: AgentSkeleton): Promise<AgentSkeleton>;
/**
* Export all agents. The response can be saved to file as is.
* @returns {Promise<AgentExportInterface>} Promise resolving to an AgentExportInterface object.
*/
exportAgents(): Promise<AgentExportInterface>;
/**
* Export all identity gateway agents. The response can be saved to file as is.
* @returns {Promise<AgentExportInterface>} Promise resolving to an AgentExportInterface object.
*/
exportIdentityGatewayAgents(): Promise<AgentExportInterface>;
/**
* Export all java agents. The response can be saved to file as is.
* @returns {Promise<AgentExportInterface>} Promise resolving to an AgentExportInterface object.
*/
exportJavaAgents(): Promise<AgentExportInterface>;
/**
* Export all web agents. The response can be saved to file as is.
* @returns {Promise<AgentExportInterface>} Promise resolving to an AgentExportInterface object.
*/
exportWebAgents(): Promise<AgentExportInterface>;
/**
* Export agent. The response can be saved to file as is.
* @param agentId agent id/name
* @returns {Promise<AgentExportInterface>} Promise resolving to an AgentExportInterface object.
*/
exportAgent(agentId: string): Promise<AgentExportInterface>;
/**
* Export identity gateway agent. The response can be saved to file as is.
* @param agentId agent id/name
* @returns {Promise<AgentExportInterface>} Promise resolving to an AgentExportInterface object.
*/
exportIdentityGatewayAgent(agentId: string): Promise<AgentExportInterface>;
/**
* Export java agent. The response can be saved to file as is.
* @param agentId agent id/name
* @returns {Promise<AgentExportInterface>} Promise resolving to an AgentExportInterface object.
*/
exportJavaAgent(agentId: string): Promise<AgentExportInterface>;
/**
* Export web agent. The response can be saved to file as is.
* @param agentId agent id/name
* @returns {Promise<AgentExportInterface>} Promise resolving to an AgentExportInterface object.
*/
exportWebAgent(agentId: string): Promise<AgentExportInterface>;
/**
* Import agents. The import data is usually read from an agent export file.
* @param {AgentExportInterface} importData agent import data.
* @returns {Promise<AgentSkeleton[]>} The agents that were imported.
*/
importAgents(importData: AgentExportInterface): Promise<AgentSkeleton[]>;
/**
* Import identity gateway agents. The import data is usually read from an agent export file.
* @param {AgentExportInterface} importData agent import data.
*/
importIdentityGatewayAgents(importData: AgentExportInterface): Promise<void>;
/**
* Import java agents. The import data is usually read from an agent export file.
* @param {AgentExportInterface} importData agent import data.
*/
importJavaAgents(importData: AgentExportInterface): Promise<void>;
/**
* Import web agents. The import data is usually read from an agent export file.
* @param {AgentExportInterface} importData agent import data.
*/
importWebAgents(importData: AgentExportInterface): Promise<void>;
/**
* Import agent. The import data is usually read from an agent export file.
* @param {string} agentId agent id/name
* @param {AgentExportInterface} importData agent import data.
* @returns {Promise<AgentSkeleton>} Promise resolving to an agent object.
*/
importAgent(agentId: string, importData: AgentExportInterface): Promise<AgentSkeleton>;
/**
* Import identity gateway agent. The import data is usually read from an agent export file.
* @param {string} agentId agent id/name
* @param {AgentExportInterface} importData agent import data.
* @returns {Promise<AgentSkeleton>} Promise resolving to an agent object.
*/
importIdentityGatewayAgent(agentId: string, importData: AgentExportInterface): Promise<AgentSkeleton>;
/**
* Import java agent. The import data is usually read from an agent export file.
* @param {string} agentId agent id/name
* @param {AgentExportInterface} importData agent import data.
* @returns {Promise<AgentSkeleton>} Promise resolving to an agent object.
*/
importJavaAgent(agentId: string, importData: AgentExportInterface): Promise<AgentSkeleton>;
/**
* Import java agent. The import data is usually read from an agent export file.
* @param {string} agentId agent id/name
* @param {AgentExportInterface} importData agent import data.
* @returns {Promise<AgentSkeleton>} Promise resolving to an agent object.
*/
importWebAgent(agentId: string, importData: AgentExportInterface): Promise<AgentSkeleton>;
/**
* Delete all agents
*/
deleteAgents(): Promise<void>;
/**
* Delete agent
* @param agentId agent id/name
*/
deleteAgent(agentId: string): Promise<void>;
/**
* Delete all identity gateway agents
*/
deleteIdentityGatewayAgents(): Promise<void>;
/**
* Delete identity gateway agent
* @param agentId agent id/name
*/
deleteIdentityGatewayAgent(agentId: string): Promise<void>;
/**
* Delete all java agents
*/
deleteJavaAgents(): Promise<void>;
/**
* Delete java agent
* @param agentId agent id/name
*/
deleteJavaAgent(agentId: string): Promise<void>;
/**
* Delete all web agents
*/
deleteWebAgents(): Promise<void>;
/**
* Delete web agent
* @param agentId agent id/name
*/
deleteWebAgent(agentId: string): Promise<void>;
/**
* Get all agents.
* @returns {Promise<AgentSkeleton[]>} a promise that resolves to an array of agent objects
* @deprecated since v2.0.0 use {@link Agent.readAgents | readAgents} instead
* ```javascript
* readAgents(): Promise<AgentSkeleton[]>
* ```
* @group Deprecated
*/
getAgents(): Promise<AgentSkeleton[]>;
/**
* Get agent
* @param {string} agentId agent id/name
* @returns {Promise<AgentSkeleton>} a promise that resolves to an agent object
* @deprecated since v2.0.0 use {@link Agent.readAgent | readAgent} instead
* ```javascript
* readAgent(agentId: string): Promise<AgentSkeleton>
* ```
* @group Deprecated
*/
getAgent(agentId: string): Promise<AgentSkeleton>;
/**
* Get agent by type and id
* @param {string} agentType agent type (IdentityGatewayAgent, J2EEAgent, WebAgent)
* @param {string} agentId agent id/name
* @returns {Promise<AgentSkeleton>} a promise that resolves to an agent object
* @deprecated since v2.0.0 use {@link Agent.readAgentByTypeAndId | readAgentByTypeAndId} instead
* ```javascript
* readAgentByTypeAndId(agentType: AgentType, agentId: string): Promise<AgentSkeleton>
* ```
* @group Deprecated
*/
getAgentByTypeAndId(agentType: AgentType, agentId: string): Promise<AgentSkeleton>;
/**
* Get identity gateway agents
* @returns {Promise<AgentSkeleton[]>} a promise that resolves to an array of IdentityGatewayAgent objects
* @deprecated since v2.0.0 use {@link Agent.readIdentityGatewayAgents | readIdentityGatewayAgents} instead
* ```javascript
* readIdentityGatewayAgents(): Promise<AgentSkeleton[]>
* ```
* @group Deprecated
*/
getIdentityGatewayAgents(): Promise<AgentSkeleton[]>;
/**
* Get identity gateway agent
* @param {string} gatewayId gateway id
* @returns {Promise<AgentSkeleton>} a promise that resolves to an object containing an IdentityGatewayAgent object
* @deprecated since v2.0.0 use {@link Agent.readIdentityGatewayAgent | readIdentityGatewayAgent} instead
* ```javascript
* readIdentityGatewayAgent(gatewayId: string): Promise<AgentSkeleton>
* ```
* @group Deprecated
*/
getIdentityGatewayAgent(gatewayId: string): Promise<AgentSkeleton>;
/**
* Update or create identity gateway agent
* @param {string} gatewayId gateway id
* @param {AgentSkeleton} gatewayData IdentityGatewayAgent object
* @returns {Promise<AgentSkeleton>} a promise that resolves to an object containing an IdentityGatewayAgent object
* @deprecated since v2.0.0 use {@link Agent.updateIdentityGatewayAgent | updateIdentityGatewayAgent} or {@link Agent.createIdentityGatewayAgent | createIdentityGatewayAgent} instead
* ```javascript
* updateIdentityGatewayAgent(gatewayId: string, gatewayData: AgentSkeleton): Promise<AgentSkeleton>
* createIdentityGatewayAgent(gatewayId: string, gatewayData: AgentSkeleton): Promise<AgentSkeleton>
* ```
* @group Deprecated
*/
putIdentityGatewayAgent(gatewayId: string, gatewayData: AgentSkeleton): Promise<AgentSkeleton>;
/**
* Get java agents
* @returns {romise<AgentSkeleton[]>} a promise that resolves to an array of J2EEAgent objects
* @deprecated since v2.0.0 use {@link Agent.readJavaAgents | readJavaAgents} instead
* ```javascript
* readJavaAgents(): Promise<AgentSkeleton[]>
* ```
* @group Deprecated
*/
getJavaAgents(): Promise<AgentSkeleton[]>;
/**
* Get java agent
* @param {string} agentId java agent id
* @returns {Promise<AgentSkeleton>} a promise that resolves to an object containing an J2EEAgent object
* @deprecated since v2.0.0 use {@link Agent.readJavaAgent | readJavaAgent} instead
* ```javascript
* readJavaAgent(agentId: string): Promise<AgentSkeleton>
* ```
* @group Deprecated
*/
getJavaAgent(agentId: string): Promise<AgentSkeleton>;
/**
* Update or create java agent
* @param {string} agentId java agent id
* @param {AgentSkeleton} agentData java agent object
* @returns {Promise<AgentSkeleton>} a promise that resolves to an object containing an java agent object
* @deprecated since v2.0.0 use {@link Agent.updateJavaAgent | updateJavaAgent} or {@link Agent.createJavaAgent | createJavaAgent} instead
* ```javascript
* updateJavaAgent(agentId: string, agentData: AgentSkeleton): Promise<AgentSkeleton>
* createJavaAgent(agentId: string, agentData: AgentSkeleton): Promise<AgentSkeleton>
* ```
* @group Deprecated
*/
putJavaAgent(agentId: string, agentData: AgentSkeleton): Promise<AgentSkeleton>;
/**
* Get web agents
* @returns {Promise<AgentSkeleton[]>} a promise that resolves to an array of WebAgent objects
* @deprecated since v2.0.0 use {@link Agent.readWebAgents | readWebAgents} instead
* ```javascript
* readWebAgents(): Promise<AgentSkeleton[]>
* ```
* @group Deprecated
*/
getWebAgents(): Promise<AgentSkeleton[]>;
/**
* Get web agent
* @param {string} agentId web agent id
* @returns {Promise<AgentSkeleton>} a promise that resolves to an object containing an WebAgent object
* @deprecated since v2.0.0 use {@link Agent.readWebAgent | readWebAgent} instead
* ```javascript
* readWebAgent(agentId: string): Promise<AgentSkeleton>
* ```
* @group Deprecated
*/
getWebAgent(agentId: string): Promise<AgentSkeleton>;
/**
* Update or create web agent
* @param {string} agentId web agent id
* @param {AgentSkeleton} agentData WebAgent object
* @returns {Promise<AgentSkeleton>} a promise that resolves to an object containing an WebAgent object
* @deprecated since v2.0.0 use {@link Agent.updateWebAgent | updateWebAgent} or {@link Agent.createWebAgent | createWebAgent} instead
* ```javascript
* updateWebAgent(agentId: string, agentData: AgentSkeleton): Promise<AgentSkeleton>
* createWebAgent(agentId: string, agentData: AgentSkeleton): Promise<AgentSkeleton>
* ```
* @group Deprecated
*/
putWebAgent(agentId: string, agentData: AgentSkeleton): Promise<AgentSkeleton>;
};
interface AgentExportInterface {
meta?: ExportMetaData;
agent: Record<string, AgentSkeleton>;
}
type ResourceConfig = {
apiVersion?: string;
};
type ApiFactory = {
/**
* Generates an AM Axios API instance
* @param {ResourceConfig} resource Takes an object takes a resource object. example:
* @param {AxiosRequestConfig} requestOverride Takes an object of AXIOS parameters that can be used to either
* add on extra information or override default properties https://github.com/axios/axios#request-config
*
* @returns {AxiosInstance} Returns a reaady to use Axios instance
*/
generateAmApi(resource: ResourceConfig, requestOverride?: AxiosRequestConfig): AxiosInstance;
/**
* Generates an OAuth2 Axios API instance
* @param {ResourceConfig} resource Takes a resource object. example:
* @param {AxiosRequestConfig} requestOverride Takes an object of AXIOS parameters that can be used to either
* add on extra information or override default properties https://github.com/axios/axios#request-config
*
* @returns {AxiosInstance} Returns a reaady to use Axios instance
*/
generateOauth2Api(resource: ResourceConfig, requestOverride?: AxiosRequestConfig, authenticate?: boolean): AxiosInstance;
/**
* Generates an IDM Axios API instance
* @param {AxiosRequestConfig} requestOverride Takes an object of AXIOS parameters that can be used to either add
* on extra information or override default properties https://github.com/axios/axios#request-config
*
* @returns {AxiosInstance} Returns a reaady to use Axios instance
*/
generateIdmApi(requestOverride?: AxiosRequestConfig): AxiosInstance;
/**
* Generates a LogKeys API Axios instance
* @param {AxiosRequestConfig} requestOverride Takes an object of AXIOS parameters that can be used to either add
* on extra information or override default properties https://github.com/axios/axios#request-config
*
* @returns {AxiosInstance} Returns a reaady to use Axios instance
*/
generateLogKeysApi(requestOverride?: AxiosRequestConfig): AxiosInstance;
/**
* Generates a Log API Axios instance
* @param {AxiosRequestConfig} requestOverride Takes an object of AXIOS parameters that can be used to either add
* on extra information or override default properties https://github.com/axios/axios#request-config
*
* @returns {AxiosInstance} Returns a reaady to use Axios instance
*/
generateLogApi(requestOverride?: AxiosRequestConfig): AxiosInstance;
/**
* Generates an Axios instance for the Identity Cloud Environment API
* @param {ResourceConfig} resource Resource config object.
* @param {AxiosRequestConfig} requestOverride Takes an object of AXIOS parameters that can be used to either add
* on extra information or override default properties https://github.com/axios/axios#request-config
*
* @returns {AxiosInstance} Returns a reaady to use Axios instance
*/
generateEnvApi(resource: ResourceConfig, requestOverride?: AxiosRequestConfig): AxiosInstance;
/**
* Generates an Axios instance for the Identity Cloud Governance API
* @param {ResourceConfig} resource Resource config object.
* @param {AxiosRequestConfig} requestOverride Takes an object of AXIOS parameters that can be used to either add
* on extra information or override default properties https://github.com/axios/axios#request-config
*
* @returns {AxiosInstance} Returns a reaady to use Axios instance
*/
generateGovernanceApi(resource: ResourceConfig, requestOverride?: AxiosRequestConfig): AxiosInstance;
/**
* Generates a release (Github or Npm) Axios API instance
* @param {string} baseUrl Base URL for the request
* @param {AxiosRequestConfig} requestOverride Takes an object of AXIOS parameters that can be used to either add
* on extra information or override default properties https://github.com/axios/axios#request-config
*
* @returns {AxiosInstance} Returns a reaady to use Axios instance
*/
generateReleaseApi(baseUrl: string, requestOverride?: AxiosRequestConfig): AxiosInstance;
};
type CircleOfTrustSkeleton = AmConfigEntityInterface & {
status?: string;
trustedProviders?: string[];
};
type Saml2ProiderLocation = 'hosted' | 'remote';
type Saml2ProviderStub = IdObjectSkeletonInterface & {
entityId: string;
location: Saml2ProiderLocation;
roles: string[];
};
type Saml2ProviderSkeleton = IdObjectSkeletonInterface & {
entityId: string;
entityLocation: Saml2ProiderLocation;
serviceProvider: unknown;
identityProvider: {
assertionProcessing?: {
attributeMapper?: {
attributeMapperScript?: string;
};
};
advanced?: {
idpAdapter?: {
idpAdapterScript?: string;
};
};
};
attributeQueryProvider: unknown;
xacmlPolicyEnforcementPoint: unknown;
};
type ScriptLanguage = 'GROOVY' | 'JAVASCRIPT';
type ScriptContext = 'OAUTH2_ACCESS_TOKEN_MODIFICATION' | 'AUTHENTICATION_CLIENT_SIDE' | 'AUTHENTICATION_TREE_DECISION_NODE' | 'AUTHENTICATION_SERVER_SIDE' | 'SOCIAL_IDP_PROFILE_TRANSFORMATION' | 'OAUTH2_VALIDATE_SCOPE' | 'CONFIG_PROVIDER_NODE' | 'OAUTH2_AUTHORIZE_ENDPOINT_DATA_PROVIDER' | 'OAUTH2_EVALUATE_SCOPE' | 'POLICY_CONDITION' | 'OIDC_CLAIMS' | 'SAML2_IDP_ADAPTER' | 'SAML2_IDP_ATTRIBUTE_MAPPER' | 'OAUTH2_MAY_ACT' | 'LIBRARY';
type ScriptSkeleton = IdObjectSkeletonInterface & {
name: string;
description: string;
default: boolean;
script: string | string[];
language: ScriptLanguage;
context: ScriptContext;
createdBy: string;
creationDate: number;
lastModifiedBy: string;
lastModifiedDate: number;
};
type Mapping = {
/**
* Create an empty mapping export template
* @returns {MappingExportInterface} an empty mapping export template
*/
createMappingExportTemplate(): MappingExportInterface;
/**
* Read mappings from sync.json (legacy)
* @returns {Promise<MappingSkeleton[]>} a promise that resolves to an array of mapping objects
*/
readSyncMappings(): Promise<MappingSkeleton[]>;
/**
* Read mappings
* @param {string} connectorId limit mappings to connector
* @param {string} moType limit mappings to managed object type
* @returns {Promise<MappingSkeleton[]>} a promise that resolves to an array of mapping objects
*/
readMappings(connectorId?: string, moType?: string): Promise<MappingSkeleton[]>;
/**
* Read mapping
* @param {string} mappingId id of the mapping (new: 'mapping/\<name>', legacy: 'sync/\<name>')
* @returns {Promise<MappingSkeleton>} a promise that resolves an mapping object
*/
readMapping(mappingId: string): Promise<MappingSkeleton>;
/**
* Create mapping
* @param {string} mappingId id of the mapping (new: 'mapping/\<name>', legacy: 'sync/\<name>')
* @param {MappingSkeleton} mappingData mapping object
* @returns {Promise<MappingSkeleton>} a promise that resolves to an mapping object
*/
createMapping(mappingId: string, mappingData: MappingSkeleton): Promise<MappingSkeleton>;
/**
* Update or create mapping
* @param {string} mappingId id of the mapping (new: 'mapping/\<name>', legacy: 'sync/\<name>')
* @param {MappingSkeleton} mappingData mapping object
* @returns {Promise<MappingSkeleton>} a promise that resolves to an mapping object
*/
updateMapping(mappingId: string, mappingData: MappingSkeleton): Promise<MappingSkeleton>;
/**
* Update or create mappings in sync.json (legacy)
* @param {MappingSkeleton} mappingData mapping object
* @returns {Promise<MappingSkeleton>} a promise that resolves to an mapping object
*/
updateSyncMappings(mappings: MappingSkeleton[]): Promise<MappingSkeleton[]>;
/**
* Delete all mappings
* @param {string} connectorId limit mappings to connector
* @param {string} moType limit mappings to managed object type
* @returns {Promise<MappingSkeleton[]>} a promise that resolves to an array of mapping objects
*/
deleteMappings(connectorId?: string, moType?: string): Promise<MappingSkeleton[]>;
/**
* Delete mapping
* @param {string} mappingId id of the mapping (new: 'mapping/\<name>', legacy: 'sync/\<name>')
* @returns {Promise<MappingSkeleton>} a promise that resolves an mapping object
*/
deleteMapping(mappingId: string): Promise<MappingSkeleton>;
/**
* Export mapping
* @param {string} mappingId id of the mapping (new: 'mapping/\<name>', legacy: 'sync/\<name>')
* @param {MappingExportOptions} options export options
* @returns {Promise<MappingExportInterface>} a promise that resolves to a MappingExportInterface object
*/
exportMapping(mappingId: string, options?: MappingExportOptions): Promise<MappingExportInterface>;
/**
* Export all mappings
* @param {MappingExportOptions} options export options
* @returns {Promise<MappingExportInterface>} a promise that resolves to a MappingExportInterface object
*/
exportMappings(options?: MappingExportOptions): Promise<MappingExportInterface>;
/**
* Import mapping
* @param {string} mappingId id of the mapping (new: 'mapping/\<name>', legacy: 'sync/\<name>')
* @param {MappingExportInterface} importData import data
* @param {MappingImportOptions} options import options
* @returns {Promise<MappingSkeleton>} a promise resolving to a MappingSkeleton object
*/
importMapping(mappingId: string, importData: MappingExportInterface, options?: MappingImportOptions): Promise<MappingSkeleton>;
/**
* Import first mapping
* @param {MappingExportInterface} importData import data
* @param {MappingImportOptions} options import options
* @returns {Promise<MappingSkeleton>} a promise resolving to a MappingSkeleton object
*/
importFirstMapping(importData: MappingExportInterface, options?: MappingImportOptions): Promise<MappingSkeleton>;
/**
* Import all mappings
* @param {MappingExportInterface} importData import data
* @param {MappingImportOptions} options import options
* @returns {Promise<MappingSkeleton[]>} a promise resolving to an array of MappingSkeleton objects
*/
importMappings(importData: MappingExportInterface, options?: MappingImportOptions): Promise<MappingSkeleton[]>;
/**
* Helper that returns a boolean indicating whether the mapping is a legacy mapping or not given the id
* @param {string} mappingId the mapping id
* @returns {boolean} true if the mapping is a legacy mapping, false otherwise
* @throws {FrodoError} if the id is invalid
*/
isLegacyMapping(mappingId: string): boolean;
};
type MappingPolicy = {
action: 'CREATE' | 'DELETE' | 'EXCEPTION' | 'IGNORE' | 'UPDATE';
situation: 'ABSENT' | 'ALL_GONE' | 'AMBIGUOUS' | 'CONFIRMED' | 'FOUND' | 'FOUND_ALREADY_LINKED' | 'LINK_ONLY' | 'MISSING' | 'SOURCE_IGNORED' | 'SOURCE_MISSING' | 'TARGET_IGNORED' | 'UNASSIGNED' | 'UNQUALIFIED';
};
type MappingProperty = {
source?: string;
target: string;
transform?: {
globals: any;
source: string;
type: string;
};
};
type MappingSkeleton = IdObjectSkeletonInterface & {
name: string;
displayName?: string;
linkQualifiers?: string[];
consentRequired?: boolean;
policies?: MappingPolicy[];
properties?: MappingProperty[];
source?: string;
target?: string;
syncAfter?: string[];
};
type SyncSkeleton = IdObjectSkeletonInterface & {
mappings: MappingSkeleton[];
};
interface MappingExportInterface {
meta?: ExportMetaData;
mapping: Record<string, MappingSkeleton>;
sync: SyncSkeleton;
}
/**
* Mapping export options
*/
interface MappingExportOptions {
/**
* Use string arrays to store multi-line text in scripts.
*/
useStringArrays: boolean;
/**
* Include any dependencies.
*/
deps: boolean;
/**
* limit mappings to connector
*/
connectorId?: string;
/**
* limit mappings to managed object type
*/
moType?: string;
}
/**
* Mapping import options
*/
interface MappingImportOptions {
/**
* Include any dependencies.
*/
deps: boolean;
}
type Connector = {
/**
* Connector type key used to build the IDM id: '<type>/<id>'
*/
CONNECTOR_TYPE: string;
/**
* Create an empty connector export template
* @returns {ConnectorExportInterface} an empty connector export template
*/
createConnectorExportTemplate(): ConnectorExportInterface;
/**
* Get all connectors
* @returns {Promise<ConnectorSkeleton[]>} a promise that resolves to an array of connector objects
*/
readConnectors(): Promise<ConnectorSkeleton[]>;
/**
* Get connector
* @param {string} connectorId id/name of the connector without the type prefix
* @returns {Promise<ConnectorSkeleton>} a promise that resolves an connector object
*/
readConnector(connectorId: string): Promise<ConnectorSkeleton>;
/**
* Create connector
* @param {string} connectorId id/name of the connector without the type prefix
* @param {ConnectorSkeleton} connectorData connector object
* @returns {Promise<ConnectorSkeleton>} a promise that resolves to an connector object
*/
createConnector(connectorId: string, connectorData: ConnectorSkeleton): Promise<ConnectorSkeleton>;
/**
* Update or create connector
* @param {string} connectorId id/name of the connector without the type prefix
* @param {ConnectorSkeleton} connectorData connector object
* @returns {Promise<ConnectorSkeleton>} a promise that resolves to an connector object
*/
updateConnector(connectorId: string, connectorData: ConnectorSkeleton): Promise<ConnectorSkeleton>;
/**
* Delete all connectors
* @returns {Promise<ConnectorSkeleton[]>} a promise that resolves to an array of connector objects
*/
deleteConnectors(): Promise<ConnectorSkeleton[]>;
/**
* Delete connector
*