Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions KeeperSdk/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion KeeperSdk/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
"prepublishOnly": "npm run build"
},
"dependencies": {
"@keeper-security/keeperapi": "17.1.4",
"@keeper-security/keeperapi": "17.2.4",
"ts-node": "^10.7.0",
"typescript": "^4.6.3"
},
Expand Down
66 changes: 66 additions & 0 deletions KeeperSdk/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ export {
ResultCodes,
AuthErrorCode,
SessionErrorCode,
ValidationErrorCode,
RoleErrorCode,
TeamErrorCode,
UserErrorCode,
KEEPER_PUBLIC_HOSTS,
Expand All @@ -40,6 +42,7 @@ export {
EMAIL_PATTERN,
EMAIL_LIST_SEPARATOR_PATTERN,
isValidEmail,
resolveSearchPattern,
} from './utils'
export type { ILogger, Nullable, Optional, DeepPartial, Immutable } from './utils'

Expand Down Expand Up @@ -205,6 +208,9 @@ export type {
EnterpriseTeamUserLink,
EnterpriseRoleUserLink,
EnterpriseRoleTeamLink,
EnterpriseRolePrivilegeLink,
EnterpriseRoleManagedNodeLink,
EnterpriseRoleEnforcementLink,
EnterpriseQueuedTeamRecord,
EnterpriseQueuedTeamUserLink,
EnterpriseUserAliasLink,
Expand All @@ -217,6 +223,66 @@ export type {
NodePathOptions,
} from './teams/enterpriseData'

export {
listRoles,
formatRolesTable,
renderRolesAsciiTable,
RoleColumn,
SUPPORTED_ROLE_COLUMNS,
DEFAULT_ROLE_COLUMNS,
ALL_COLUMNS_WILDCARD,
viewRole,
formatRoleView,
roleViewTable,
RoleManager,
addRoles,
formatAddRoleResult,
renderAddRoleAsciiTable,
AddRoleStatus,
AddRoleSkipReason,
updateRoles,
formatUpdateRoleResult,
renderUpdateRoleAsciiTable,
UpdateRoleStatus,
deleteRoles,
formatDeleteRoleResult,
renderDeleteRoleAsciiTable,
DeleteRoleStatus,
} from './roles'
export type {
ListRolesOptions,
ListRoleRow,
RoleColumnInput,
FormattedRolesTable,
FormatRolesTableOptions,
RoleView,
RoleTeamInfo,
RoleUserInfo,
RoleManagedNodeInfo,
RoleEnforcementInfo,
FormatRoleViewOptions,
FormattedRoleViewTable,
FormattedManagedNodePrivilegeTable,
RoleViewTableRow,
AddRoleInput,
AddRoleResult,
AddRoleItemResult,
AddRoleConfirm,
AddRoleConflictPrompt,
FormattedAddRoleTable,
UpdateRoleInput,
UpdateRoleResult,
UpdateRoleItemResult,
FormattedUpdateRoleTable,
DeleteRoleInput,
DeleteRoleResult,
DeleteRoleItemResult,
FormattedDeleteRoleTable,
RoleToggleInput,
RoleToggle,
EnforcementPair,
} from './roles'

export { viewTeam, formatTeamView, teamViewTable } from './teams/viewTeam'
export type {
TeamView,
Expand Down
144 changes: 144 additions & 0 deletions KeeperSdk/src/roles/RoleManager.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,144 @@
import type { Auth } from '@keeper-security/keeperapi'
import { KeeperSdkError, ResultCodes } from '../utils'
import { EnterpriseDataManager } from '../teams/enterpriseData'
import { formatRolesTable, listRoles, renderRolesAsciiTable } from './listRoles'
import type {
FormatRolesTableOptions,
FormattedRolesTable,
ListRoleRow,
ListRolesOptions,
} from './roleTypes'
import {
formatRoleView,
roleViewTable,
viewRole,
type FormatRoleViewOptions,
type FormattedRoleViewTable,
type RoleView,
} from './viewRole'
import {
addRoles,
formatAddRoleResult,
renderAddRoleAsciiTable,
type AddRoleInput,
type AddRoleResult,
type FormattedAddRoleTable,
} from './addRole'
import {
updateRoles,
formatUpdateRoleResult,
renderUpdateRoleAsciiTable,
type UpdateRoleInput,
type UpdateRoleResult,
type FormattedUpdateRoleTable,
} from './updateRole'
import {
deleteRoles,
formatDeleteRoleResult,
renderDeleteRoleAsciiTable,
type DeleteRoleInput,
type DeleteRoleResult,
type FormattedDeleteRoleTable,
} from './deleteRole'

export type AuthProvider = () => Auth

export class RoleManager {
private readonly authProvider: AuthProvider
private enterpriseData: EnterpriseDataManager | null = null

constructor(authProvider: AuthProvider) {
this.authProvider = authProvider
}

public async listRoles(options: ListRolesOptions = {}): Promise<ListRoleRow[]> {
return listRoles(this.requireAuth(), {
...options,
enterpriseData: options.enterpriseData ?? this.getEnterpriseData(),
})
}

public formatRolesTable(rows: ListRoleRow[], options: FormatRolesTableOptions = {}): FormattedRolesTable {
return formatRolesTable(rows, options)
}

public renderRolesAsciiTable(
table: FormattedRolesTable,
options: { minColWidth?: number } = {}
): string {
return renderRolesAsciiTable(table, options)
}

public async viewRole(identifier: string): Promise<RoleView> {
return viewRole(this.requireAuth(), identifier)
}

public formatRoleView(view: RoleView, options: FormatRoleViewOptions = {}): FormattedRoleViewTable {
return formatRoleView(view, options)
}

public roleViewTable(table: FormattedRoleViewTable): string {
return roleViewTable(table)
}

public async addRoles(input: AddRoleInput): Promise<AddRoleResult> {
const result = await addRoles(this.requireAuth(), input)
if (result.created > 0) this.invalidateEnterpriseData()
return result
}

public formatAddRoleResult(result: AddRoleResult): FormattedAddRoleTable {
return formatAddRoleResult(result)
}

public renderAddRoleAsciiTable(table: FormattedAddRoleTable): string {
return renderAddRoleAsciiTable(table)
}

public async updateRoles(input: UpdateRoleInput): Promise<UpdateRoleResult> {
const result = await updateRoles(this.requireAuth(), input)
if (result.updated > 0) this.invalidateEnterpriseData()
return result
}

public formatUpdateRoleResult(result: UpdateRoleResult): FormattedUpdateRoleTable {
return formatUpdateRoleResult(result)
}

public renderUpdateRoleAsciiTable(table: FormattedUpdateRoleTable): string {
return renderUpdateRoleAsciiTable(table)
}

public async deleteRoles(input: DeleteRoleInput): Promise<DeleteRoleResult> {
const result = await deleteRoles(this.requireAuth(), input)
if (result.deleted > 0) this.invalidateEnterpriseData()
return result
}

public formatDeleteRoleResult(result: DeleteRoleResult): FormattedDeleteRoleTable {
return formatDeleteRoleResult(result)
}

public renderDeleteRoleAsciiTable(table: FormattedDeleteRoleTable): string {
return renderDeleteRoleAsciiTable(table)
}

private getEnterpriseData(): EnterpriseDataManager {
if (!this.enterpriseData) {
this.enterpriseData = new EnterpriseDataManager(this.requireAuth())
}
return this.enterpriseData
}

private invalidateEnterpriseData(): void {
this.enterpriseData?.clearCache()
}

private requireAuth(): Auth {
const auth = this.authProvider()
if (!auth) {
throw new KeeperSdkError('You are not logged in. Please log in first.', ResultCodes.NOT_LOGGED_IN)
}
return auth
}
}
Loading
Loading