UNPKG

moleculer-iam

Version:

Centralized IAM module for moleculer. Including a certified OIDC provider and an Identity provider for user profile, credentials, and custom claims management. Custom claims could be defined/updated by declarative schema which contains claims validation a

97 lines (96 loc) 4.82 kB
import * as _ from "lodash"; import { Logger } from "../../lib/logger"; import { FindOptions, WhereAttributeHash } from "../../lib/rdbms"; import { OIDCAccountClaims, OIDCAccountCredentials } from "../../op"; import { IdentityMetadata } from "../metadata"; import { IdentityClaimsSchema } from "../claims"; import { ValidationError } from "../../lib/validator"; export declare type IDPAdapterProps = { logger?: Logger; }; export interface Transaction { commit(): Promise<void>; rollback(): Promise<void>; } export declare abstract class IDPAdapter { protected readonly props: IDPAdapterProps; protected readonly logger: Logger; abstract readonly displayName: string; constructor(props: IDPAdapterProps, options?: any); start(): Promise<void>; stop(): Promise<void>; abstract find(args: WhereAttributeHash): Promise<string | void>; abstract count(args: WhereAttributeHash): Promise<number>; abstract get(args: FindOptions): Promise<string[]>; validate(args: { id?: string; scope: string[]; claims: Partial<OIDCAccountClaims>; credentials?: Partial<OIDCAccountCredentials>; }): Promise<void>; create(args: { metadata: Partial<IdentityMetadata>; scope: string[]; claims: OIDCAccountClaims; credentials: Partial<OIDCAccountCredentials>; }, transaction?: Transaction, ignoreUndefinedClaims?: boolean): Promise<string>; abstract delete(id: string, transaction?: Transaction): Promise<boolean>; getClaims(id: string, scope: string[]): Promise<OIDCAccountClaims>; protected readonly getCachedActiveClaimsSchemata: ((scope: string[]) => Promise<{ activeClaimsVersions: { [key: string]: string; }; claimsSchemata: IdentityClaimsSchema[]; validateClaims: (value: any) => true | ValidationError[]; validClaimsKeys: string[]; uniqueClaimsSchemata: IdentityClaimsSchema[]; validateClaimsUniqueness: (id: string | void, object: { [key: string]: any; }) => Promise<true | ValidationError[]>; immutableClaimsSchemata: IdentityClaimsSchema[]; validateClaimsImmutability: (id: string, object: { [key: string]: any; }) => Promise<true | ValidationError[]>; }>) & _.MemoizedFunction; createOrUpdateClaimsWithValidation(id: string, claims: Partial<OIDCAccountClaims>, scope: string[], creating: boolean, transaction?: Transaction, ignoreUndefinedClaims?: boolean): Promise<void>; deleteClaims(id: string, scope: string[], transaction?: Transaction): Promise<void>; abstract onClaimsUpdated(id: string, updatedClaims: Partial<OIDCAccountClaims>, transaction?: Transaction): Promise<void>; abstract createOrUpdateVersionedClaims(id: string, claims: { key: string; value: any; schemaVersion: string; }[], transaction?: Transaction): Promise<void>; abstract getVersionedClaims(id: string, claims: { key: string; schemaVersion?: string; }[]): Promise<Partial<OIDCAccountClaims>>; abstract createClaimsSchema(schema: IdentityClaimsSchema, transaction?: Transaction): Promise<void>; abstract forceDeleteClaimsSchema(key: string, transaction?: Transaction): Promise<void>; onClaimsSchemaUpdated(): Promise<void>; abstract getClaimsSchema(args: { key: string; version?: string; active?: boolean; }): Promise<IdentityClaimsSchema | void>; abstract getClaimsSchemata(args: { scope: string[]; key?: string; version?: string; active?: boolean; }): Promise<IdentityClaimsSchema[]>; abstract setActiveClaimsSchema(args: { key: string; version: string; }, transaction?: Transaction): Promise<void>; abstract getMetadata(id: string): Promise<IdentityMetadata | void>; abstract createOrUpdateMetadata(id: string, metadata: Partial<IdentityMetadata>, transaction?: Transaction): Promise<void>; abstract assertCredentials(id: string, credentials: Partial<OIDCAccountCredentials>): Promise<boolean | null>; protected abstract createOrUpdateCredentials(id: string, credentials: Partial<OIDCAccountCredentials>, transaction?: Transaction): Promise<boolean>; private readonly testCredentials; createOrUpdateCredentialsWithValidation(id: string, credentials: Partial<OIDCAccountCredentials>, transaction?: Transaction): Promise<boolean>; validateCredentials(credentials: Partial<OIDCAccountCredentials>): Promise<void>; abstract transaction(): Promise<Transaction>; abstract acquireMigrationLock(key: string): Promise<void>; abstract touchMigrationLock(key: string, migratedIdentitiesNumber: number): Promise<void>; abstract releaseMigrationLock(key: string): Promise<void>; }