{"version":3,"file":"mumbler-ngx-mumbler-api.mjs","sources":["../../../projects/ngx-mumbler-api/src/lib/services/common/logger.enum.ts","../../../projects/ngx-mumbler-api/src/lib/common/parameter.class.ts","../../../projects/ngx-mumbler-api/src/lib/services/common/logger.service.ts","../../../projects/ngx-mumbler-api/src/apps/apps-message.abstract.ts","../../../projects/ngx-mumbler-api/src/lib/services/crypto/static-conversion.class.ts","../../../projects/ngx-mumbler-api/src/lib/services/common/common.types.ts","../../../projects/ngx-mumbler-api/src/lib/services/mumble/payload/base.payload.ts","../../../projects/ngx-mumbler-api/src/lib/services/mumble/payload/mumbler-id.payload.ts","../../../projects/ngx-mumbler-api/src/lib/services/mumble/payload/transmit.payload.ts","../../../projects/ngx-mumbler-api/src/lib/services/delegation/socket/delegation.mumble.class.ts","../../../projects/ngx-mumbler-api/src/lib/services/crypto/totp.class.ts","../../../projects/ngx-mumbler-api/src/lib/services/config/crypto-config.service.ts","../../../projects/ngx-mumbler-api/src/lib/services/crypto/crypto.service.ts","../../../projects/ngx-mumbler-api/src/lib/services/common/request/base.request.ts","../../../projects/ngx-mumbler-api/src/lib/services/mumbler/requests/delegation.request.ts","../../../projects/ngx-mumbler-api/src/lib/services/delegation/socket/delegation-socket.class.ts","../../../projects/ngx-mumbler-api/src/lib/services/config/module-config.service.ts","../../../projects/ngx-mumbler-api/src/lib/services/config/mumbler-config.service.ts","../../../projects/ngx-mumbler-api/src/lib/services/common/response.helper.ts","../../../projects/ngx-mumbler-api/src/lib/services/delegation/delegation/delegate-to-info.class.ts","../../../projects/ngx-mumbler-api/src/lib/services/mumbler/model/bonding-parameter.model.ts","../../../projects/ngx-mumbler-api/src/lib/services/mumbler/model/bonding-request.model.ts","../../../projects/ngx-mumbler-api/src/lib/services/mumbler/requests/commence-bonding.request.ts","../../../projects/ngx-mumbler-api/src/lib/services/mumbler/requests/find-mumbler-name.request.ts","../../../projects/ngx-mumbler-api/src/lib/services/mumbler/requests/invite-mumbler.request.ts","../../../projects/ngx-mumbler-api/src/lib/services/mumbler/requests/onboarding.request.ts","../../../projects/ngx-mumbler-api/src/lib/services/mumbler/requests/push-bonding.request.ts","../../../projects/ngx-mumbler-api/src/lib/services/mumbler/requests/register-push-notification.request.ts","../../../projects/ngx-mumbler-api/src/lib/services/mumbler/response/push-delegation.request.ts","../../../projects/ngx-mumbler-api/src/lib/services/mumbler/mumbler.service.ts","../../../projects/ngx-mumbler-api/src/lib/services/common/window.service.ts","../../../projects/ngx-mumbler-api/src/lib/services/delegation/delegation.service.ts","../../../projects/ngx-mumbler-api/src/lib/services/mumble/mumble.service.ts","../../../projects/ngx-mumbler-api/src/lib/services/mumbler/model/find-mumbler-name.model.ts","../../../projects/ngx-mumbler-api/src/lib/services/common/response/base.response.ts","../../../projects/ngx-mumbler-api/src/lib/services/mumbler/response/delegation.response.ts","../../../projects/ngx-mumbler-api/src/lib/services/validation/request/direct-validation.request.ts","../../../projects/ngx-mumbler-api/src/lib/services/validation/request/email-validation.request.ts","../../../projects/ngx-mumbler-api/src/lib/services/validation/validation.service.ts","../../../projects/ngx-mumbler-api/src/lib/ngx-mumbler-api.module.ts","../../../projects/ngx-mumbler-api/src/public-api.ts","../../../projects/ngx-mumbler-api/src/mumbler-ngx-mumbler-api.ts"],"sourcesContent":["/***********************************************\n********* Copyright mumbler gmbh 2020 **********\n************* All rights reserved **************\n************************************************/\n\nexport enum LogLevel {\n\n\tALL = 0,\n\tDEBUG = 1,\n\tVERBOSE = 2,\n\tWARN = 3,\n\tERROR = 4,\n\tFATAL = 5,\n\tOFF = 6\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\nimport { InjectionToken } from '@angular/core';\nimport { LogLevel }       from '../services/common/logger.enum';\nimport { MumblerId }      from '../services/types/mumbler-id.type';\n\nexport class ExtendedMumblerParameter {\n\n\tprivate _debugMode: boolean = false;\n\tprivate _logLevel: LogLevel = LogLevel.OFF;\n\tprivate _serverUrl: string = 'https://data.mumbler.eu/';\n\tprivate _socketUrl: string = 'wss://data.mumbler.eu/';\n\n\tpublic get debugMode(): boolean {\n\n\t\treturn this._debugMode;\n\n\t}\n\n\tpublic set debugMode( value: boolean ) {\n\n\t\tthis._debugMode = value;\n\n\t}\n\n\tpublic get logLevel(): LogLevel {\n\n\t\treturn this._logLevel;\n\n\t}\n\n\tpublic set logLevel( value: LogLevel ) {\n\n\t\tthis._logLevel = value;\n\n\t}\n\n\tpublic get serverUrl(): string {\n\n\t\treturn this._serverUrl;\n\n\t}\n\n\tpublic set serverUrl( value: string ) {\n\n\t    if ( value.endsWith( '/' ) ) {\n\n\t\t\tthis._serverUrl = value;\n\n\t\t} else {\n\n\t        this._serverUrl = `${ value }/`;\n\n\t\t}\n\n\t}\n\n\tpublic get socketUrl(): string {\n\n\t\treturn this._socketUrl;\n\n\t}\n\n\tpublic set socketUrl( value: string ) {\n\n\t\tif ( value.endsWith( '/' ) ) {\n\n\t\t\tthis._socketUrl = value;\n\n\t\t} else {\n\n\t\t\tthis._socketUrl = `${ value }/`;\n\n\t\t}\n\n\t}\n\n}\n\nexport class CryptoCommunicationParameter {\n\n\tprivate _privateKey: Uint8Array = new Uint8Array();\n\tprivate _totpKey: Uint8Array = new Uint8Array();\n\n\tpublic get privateKey(): Uint8Array {\n\n\t\treturn this._privateKey;\n\n\t}\n\n\tpublic set privateKey( value: Uint8Array ) {\n\n\t\tthis._privateKey = value;\n\n\t}\n\n\tpublic get totpKey(): Uint8Array {\n\n\t\treturn this._totpKey;\n\n\t}\n\n\tpublic set totpKey( value: Uint8Array ) {\n\n\t\tthis._totpKey = value;\n\n\t}\n\n}\n\nexport class MumblerParameter {\n\n\tpublic constructor(\n\t\tprivate _application: string = null,\n\t\tprivate _mumblerId: MumblerId = null,\n\t\tprivate _mumblerName: string = null,\n\t\tprivate readonly _cryptoCommunicationParameter: CryptoCommunicationParameter = new CryptoCommunicationParameter(),\n\t\tprivate readonly _extendedCommunicationParameter: ExtendedMumblerParameter = new ExtendedMumblerParameter()\n\t){}\n\n\tpublic get application(): string {\n\n\t\treturn this._application;\n\n\t}\n\n\tpublic set application( value: string ) {\n\n\t\tthis._application = value;\n\n\t}\n\n\tpublic get mumblerId(): MumblerId {\n\n\t\treturn this._mumblerId;\n\n\t}\n\n\tpublic set mumblerId( value: MumblerId ) {\n\n\t\tthis._mumblerId = value;\n\n\t}\n\n\tpublic get mumblerName(): string {\n\n\t\treturn this._mumblerName;\n\n\t}\n\n\tpublic set mumblerName( value: string ) {\n\n\t\tthis._mumblerName = value;\n\n\t}\n\n\tpublic get cryptoCommunicationParameter(): CryptoCommunicationParameter {\n\n\t\treturn this._cryptoCommunicationParameter;\n\n\t}\n\n\tpublic get extendedDelegationParameter(): ExtendedMumblerParameter {\n\n\t\treturn this._extendedCommunicationParameter;\n\n\t}\n\n}\n\nexport const mumblerParameterFactory: ( parameter?: MumblerParameter )=> MumblerParameter = ( parameter?: MumblerParameter ) => {\n\n\t// Use provided\n\tif ( !! parameter ) {\n\n\t\treturn parameter;\n\n\t}\n\n\t// Use default\n\treturn new MumblerParameter( 'unknown-application' );\n\n};\n\nexport const mumblerParameterInjectionToken: InjectionToken<MumblerParameter> =\n\tnew InjectionToken<MumblerParameter>(\n\t    'ngx-mumbler-api module parameter configuration injection token',\n\t    { providedIn: 'root', factory: mumblerParameterFactory }\n\t);\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\nimport { Inject, Injectable }                               from '@angular/core';\nimport { MumblerParameter, mumblerParameterInjectionToken } from '../../common/parameter.class';\nimport { LogLevel }                                         from './logger.enum';\n\n@Injectable( {\n    providedIn: 'root'\n} )\nexport class LoggerService {\n\n    public constructor(\n        @Inject( mumblerParameterInjectionToken ) private readonly _communicationParameter: MumblerParameter\n    ) {}\n\n    public static ConvertToString( source: unknown ): string {\n\n        if ( typeof source === 'object' ) {\n\n            return JSON.stringify( source );\n\n        } else if ( typeof source === 'string' || typeof  source === 'number' || typeof  source === 'bigint' || typeof source === 'boolean' ) {\n\n            // eslint-disable-next-line @typescript-eslint/no-base-to-string\n            return `${ source }`;\n\n        } else {\n\n            return '<not convertable>';\n\n        }\n\n    }\n\n    public get logLevel(): LogLevel {\n\n        return this._communicationParameter.extendedDelegationParameter.logLevel;\n\n    }\n\n    public debug( message: string, source?: string ): void {\n\n        this.doLog( LogLevel.DEBUG, message, source );\n\n    }\n\n    public error( message: string, source?: string ): void {\n\n        this.doLog( LogLevel.ERROR, message, source );\n\n    }\n\n    public fatal( message: string, source?: string ): void {\n\n        this.doLog( LogLevel.FATAL, message, source );\n\n    }\n\n    public verbose( message: string, source?: string ): void {\n\n        this.doLog( LogLevel.VERBOSE, message, source );\n\n    }\n\n    public warn( message: string, source?: string ): void {\n\n        this.doLog( LogLevel.WARN, message, source );\n\n    }\n\n    private doLog( type: LogLevel = LogLevel.ALL, message: string = '', source: string = 'Unknown' ): void {\n\n        if ( type >= this._communicationParameter.extendedDelegationParameter.logLevel && type === LogLevel.ALL ) {\n\n            this.printLine( `[${ source }] ${ message }`, 'color: #000000' );\n\n        } else if ( type >= this._communicationParameter.extendedDelegationParameter.logLevel && type === LogLevel.DEBUG ) {\n\n            this.printLine( `[${ source }] ${ message }`, 'color: #00CC00' );\n\n        } else if ( type >= this._communicationParameter.extendedDelegationParameter.logLevel && type === LogLevel.VERBOSE ) {\n\n            this.printLine( `[${ source }] ${ message }`, 'color: #0080FF' );\n\n        } else if ( type >= this._communicationParameter.extendedDelegationParameter.logLevel && type === LogLevel.WARN ) {\n\n            this.printLine( `[${ source }] ${ message }`, 'color: #FF9933' );\n\n        } else if ( type >= this._communicationParameter.extendedDelegationParameter.logLevel && type === LogLevel.ERROR ) {\n\n            this.printLine( `[${ source }] ${ message }`, 'color: #FF3333' );\n\n        } else if ( type >= this._communicationParameter.extendedDelegationParameter.logLevel && type === LogLevel.FATAL ) {\n\n            this.printLine( `[${ source }] ${ message }`, 'color: #FF3399' );\n\n        }\n\n    }\n\n    // noinspection JSMethodCanBeStatic\n    private printLine( text: string = '', color: string = 'color: #000000' ): void {\n\n\t    console.log( `%c${ text }`, color );\n\n    }\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2020 **********\n************* All rights reserved **************\n************************************************/\n\nexport abstract class AppsMessage {\n\n    public content: string;\n\n    protected constructor( content: string ) {\n\n        this.content = content;\n\n    }\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\nimport { from, Observable, of, switchMap, throwError } from 'rxjs';\nimport { HexString }                                   from '../../common/conversion.class';\n\n// eslint-disable-next-line @typescript-eslint/no-extraneous-class\nexport class StaticConversion {\n\n    public static ConvertBase64ToBuffer( base64: string ): Uint8Array {\n\n        /*\n         * Based on the work of https://github.com/niklasvh/base64-arraybuffer\n         * licensed under MIT License\n         */\n\n        const len: number = base64.length;\n        let padding: number = 0;\n\n        if ( base64[ len - 1 ] === '=' && base64[ len - 2 ] === '=' ) {\n\n            padding = 2;\n\n        } else if ( base64[ len - 1 ] === '=' ) {\n\n            padding = 1;\n\n        }\n\n        const b64Chars: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n        const lookup: Uint8Array = new Uint8Array( 256 );\n\n        for ( let i: number = 0; i < b64Chars.length; i++ ) {\n\n            lookup[ b64Chars.charCodeAt( i ) ] = i;\n\n        }\n\n        const bufferLength: number = len * .75 - padding;\n        const bytes: Uint8Array = new Uint8Array( new ArrayBuffer( bufferLength ) );\n\n        let byteIndex: number = 0;\n\n        for ( let i: number = 0; i < len; i += 4 ) {\n\n            const b64Enc1: number = lookup[ base64.charCodeAt( i ) ];\n            const b64Enc2: number = lookup[ base64.charCodeAt( i + 1 ) ];\n            const b64Enc3: number = lookup[ base64.charCodeAt( i + 2 ) ];\n            const b64Enc4: number = lookup[ base64.charCodeAt( i + 3 ) ];\n\n            bytes[ byteIndex++ ] = b64Enc1 << 2 | b64Enc2 >> 4;\n            bytes[ byteIndex++ ] = ( b64Enc2 & 15 ) << 4 | b64Enc3 >> 2;\n            bytes[ byteIndex++ ] = ( b64Enc3 & 3 ) << 6 | b64Enc4 & 63;\n\n        }\n\n        return bytes;\n\n    }\n\n    public static ConvertBase64ToString( base64: string ): string {\n\n        try {\n\n            // \"atob\" could throw an Exception, e.g. on bad/corrupted input\n            return atob( base64 );\n\n        } catch ( e ) {\n\n            // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n            throw new Error( `Unable to convert base64 to string with error: \"${ e.toString() }\"` );\n\n        }\n\n    }\n\n    public static ConvertBufferToBase64( buffer: ArrayBuffer | Uint8Array ): string {\n\n        const viewer: Uint8Array = buffer instanceof ArrayBuffer ? new Uint8Array( buffer ) : buffer;\n\n        /*\n         * Based on the work of https://github.com/niklasvh/base64-arraybuffer\n         * licensed under MIT License\n         */\n\n        const b64Chars: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\n        let base64: string = '';\n\n        for ( let i: number = 0; i < viewer.length; i += 3 ) {\n\n            base64 += b64Chars[ viewer[ i ] >> 2 ];\n            base64 += b64Chars[ ( viewer[ i ] & 3 ) << 4 | viewer[ i + 1 ] >> 4 ];\n            base64 += b64Chars[ ( viewer[ i + 1 ] & 15 ) << 2 | viewer[ i + 2 ] >> 6 ];\n            base64 += b64Chars[ viewer[ i + 2 ] & 63 ];\n\n        }\n\n        if ( viewer.length % 3 === 2 ) {\n\n            base64 = base64.substring( 0, base64.length - 1 ) + '=';\n\n        } else if ( viewer.length % 3 === 1 ) {\n\n            base64 = base64.substring( 0, base64.length - 2 ) + '==';\n\n        }\n\n        return base64;\n\n    }\n\n    public static ConvertBufferToHexString( buffer: ArrayBuffer | Uint8Array ): string {\n\n        const viewer: Uint8Array = buffer instanceof ArrayBuffer ? new Uint8Array( buffer ) : buffer;\n\n        const hexArray: Array<string> = [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' ];\n\n        let s: string = '';\n\n        for ( let i: number = 0; i < viewer.length; i++ ) {\n\n            const code: number = viewer[ i ];\n\n            s += hexArray[ code >>> 4 ];\n            s += hexArray[ code & 0x0F ];\n\n        }\n\n        return s;\n\n    }\n\n    public static ConvertBufferToString( buffer: ArrayBuffer | Uint8Array ): string {\n\n        const viewer: Uint8Array = buffer instanceof ArrayBuffer ? new Uint8Array( buffer ) : buffer;\n        let value: string = '';\n\n        for ( let i: number = 0; i < viewer.byteLength; i++ ) {\n\n            value += String.fromCharCode( viewer[ i ] );\n\n        }\n\n        return value;\n\n    }\n\n    public static ConvertFileToBuffer( file: File ): Observable< Uint8Array > {\n\n        if ( !!! file ) {\n\n            return throwError( () => 'ConvertFileToBuffer: File parameter missing' );\n\n        }\n\n        return from(\n\n            file.arrayBuffer()\n\n        ).pipe(\n\n            switchMap( ( buffer: ArrayBuffer ) => of( new Uint8Array( buffer ) ) )\n\n        );\n\n    }\n\n    public static ConvertHexStringToBuffer( raw: HexString ): Uint8Array {\n\n        const buffer: Uint8Array = new Uint8Array( new ArrayBuffer( raw.length ) );\n\n        for ( let i: number = 0; i < raw.length; i++ ) {\n\n            buffer[ i ] = Math.abs( Number.parseInt( raw[ i ], 16 ) );\n\n        }\n\n        return buffer;\n\n    }\n\n    public static ConvertJsonToBuffer( json: {} ): Uint8Array {\n\n        try {\n\n            return StaticConversion.ConvertStringToBuffer( JSON.stringify( json ) );\n\n        } catch ( e ) {\n\n            // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n            throw new Error( `Unable to convert json to buffer: \"${ e.toString() }\"` );\n\n        }\n\n    }\n\n    public static ConvertStringToBase64( value: string ): string {\n\n        try {\n\n            // \"btoa\" could throw an Exception on UTF-16 (unicode) character input\n            return btoa( value );\n\n        } catch ( e ) {\n\n            // eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n            throw new Error( `Unable to convert string to base64: \"${ e.toString() }\"` );\n\n        }\n\n    }\n\n    public static ConvertStringToBuffer( raw: string ): Uint8Array {\n\n        const buffer: Uint8Array = new Uint8Array( new ArrayBuffer( raw.length ) );\n\n        for ( let i: number = 0; i < raw.length; i++ ) {\n\n            buffer[ i ] = raw.charCodeAt( i );\n\n        }\n\n        return buffer;\n\n    }\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\n\nexport type ValidationToken = string;\n","/***********************************************\n********* Copyright mumbler gmbh 2020 **********\n************* All rights reserved **************\n************************************************/\nexport abstract class BasePayload {\n\n\tpublic time: number;\n\tpublic version: number;\n\n\tprotected constructor( time: number = Date.now(), version: number = 1 ) {\n\n\t\tthis.time = time;\n\t\tthis.version = version;\n\n\t}\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2020 **********\n************* All rights reserved **************\n************************************************/\nimport { BasePayload } from './base.payload';\nimport { MumblerId }   from '../../types/mumbler-id.type';\n\nexport class MumblerIdPayload extends BasePayload {\n\n    public mumblerId: MumblerId;\n\n    public constructor( mumblerId: MumblerId ) {\n\n        super();\n        this.mumblerId = mumblerId;\n\n    }\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\nimport { SerializedEncryptedPayload } from '../../crypto/crypto.service';\nimport { MumblerId }                  from '../../types/mumbler-id.type';\n\nexport class TransmitPayload {\n\n    public delegateTo: MumblerId;\n    public files: Array< SerializedEncryptedPayload >;\n    public payload: SerializedEncryptedPayload;\n    public sent: number;\n\n    // v0.3.0 Added legacy encoding flag (everything below 0.2.5 still use it per default!)\n    public useLegacyEncoding: boolean = false;\n\n    public constructor( delegateTo: MumblerId, payload: SerializedEncryptedPayload = null, files: Array< SerializedEncryptedPayload > = [], sent: number = -1, useLegacyEncoding: boolean = false ) {\n\n        this.delegateTo = delegateTo;\n        this.files = files;\n        this.payload = payload;\n        this.sent = sent;\n        this.useLegacyEncoding = useLegacyEncoding;\n\n    }\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\nimport { MumblerIdPayload } from '../../mumble/payload/mumbler-id.payload';\nimport { TransmitPayload }  from '../../mumble/payload/transmit.payload';\nimport { DelegateToInfo }   from '../delegation/delegate-to-info.class';\n\n\nexport class Mumble {\n\n    public mumblerId: MumblerIdPayload;\n    public transmitPayload: TransmitPayload;\n\n    private _delegateToInfo: DelegateToInfo;\n\n    public constructor( mumblerId: string, delegateTo: string ) {\n\n        this.mumblerId = new MumblerIdPayload( mumblerId );\n        this.transmitPayload = new TransmitPayload( delegateTo );\n\n    }\n\n    public get delegateToInfo(): DelegateToInfo {\n\n        return this._delegateToInfo;\n\n    }\n\n    public set delegateToInfo( value: DelegateToInfo ) {\n\n        this._delegateToInfo = value;\n\n    }\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\nimport { from, map, Observable, of, switchMap, throwError } from 'rxjs';\n\nexport class TotpClass {\n\n    public constructor(\n        private readonly _totpKey: CryptoKey\n    ) {\n\n        // TODO: Validate CryptoKey\n\n    }\n\n    public getToken(): Observable<string> {\n\n        return this.computeTotpToken();\n\n    }\n\n    // noinspection JSMethodCanBeStatic\n    /**\n     * Converts buffer to hex string by array lookup.\n     * According to \"jsperf\" the fastest implementation (https://jsperf.com/hex-conversion)\n     *\n     * @param {Uint8Array} buffer\n     * @returns {string}\n     */\n    private buf2hex( buffer: Uint8Array ): string {\n\n        const hexArray: Array<string> = [ '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' ];\n\n        let s: string = '';\n\n        for ( let i: number = 0; i < buffer.length; i++ ) {\n\n            const code: number = buffer[ i ];\n\n            s += hexArray[ code >>> 4 ];\n            s += hexArray[ code & 0x0F ];\n\n        }\n\n        return s;\n\n    }\n\n    /**\n     * Computes the TOTP token based on the provided secret\n     * TOTP ^= Time-based One-Time-Password (https://en.wikipedia.org/wiki/Time-based_One-time_Password_algorithm)\n     *  - tStart ^= T_0\n     *  - tDelta ^= T_X\n     *\n     * @param tStart       The unix time from which to start counting steps (defaults to 1970)\n     * @param tDelta       The unix time intervals for which a single token is valid (defaults to 90 seconds)\n     *\n     * @returns {Observable<string>}\n     */\n    private computeTotpToken( tStart: number = 0, tDelta: number = 90 ): Observable<string> {\n\n        if ( tStart < 0 || tDelta < 0 ) {\n\n            return null;\n\n        }\n\n        // getTime => milliseconds (but need seconds)\n        const tEpoch: number = Math.floor( new Date().getTime() / 1000.0 ) - tStart;\n        // calculate tCounter\n        const tCounter: number = Math.floor( tEpoch / tDelta );\n        // left pad the time to 16 hex digits\n        const time: string = this.leftPad( `${ parseInt( `${ tCounter }`, 16 ) }`, 16, '0' );\n        // get a little utf-8 encoding help\n        const encoder: TextEncoder = new TextEncoder();\n\n        // compute the HOTP value with shared secret and current time (range)\n        return this.getHmacDigest( encoder.encode( time ) ).pipe(\n            switchMap( ( hmac: Uint8Array ) => of( this.buf2hex( hmac ) ) )\n        );\n\n    }\n\n    /**\n     * Create a hmac base on the SubtleCrypto interface\n     * https://caniuse.com/#feat=mdn-api_subtlecrypto\n     * TODO: Evaluate if a polyfill is required for very old browsers?\n     *\n     * @param {Uint8Array} message          The message to compute the hmac of\n     * @param {Uint8Array} key              (Optional) The key to use for the hmac. When not provided the member\n     *     visible key (\"_totpKey\") will be used\n     * @returns {Observable<Uint8Array>}\n     */\n    private getHmacDigest( message: Uint8Array, key: Uint8Array = null ): Observable<Uint8Array> {\n\n        if ( !!!window.crypto || !!!window.crypto.subtle ) {\n\n            return throwError( 'SubtleCrypto API not available' );\n\n        }\n\n        const crypto: SubtleCrypto = window.crypto.subtle;\n\n        const hmacKey: Observable<CryptoKey> =\n            !!this._totpKey ?\n            \tof( this._totpKey ) :\n            \tfrom( crypto.importKey( 'raw', key, { name: 'HMAC', hash: 'SHA-512' }, false, [ 'sign' ] ) );\n\n        return hmacKey.pipe(\n            switchMap( ( signageKey: CryptoKey ) => from(\n                crypto.sign( 'HMAC', signageKey, message )\n            ) ),\n\n            map( ( computedHmac: ArrayBuffer ) => new Uint8Array( computedHmac ) )\n        );\n\n    }\n\n    // noinspection JSMethodCanBeStatic\n    /**\n     * Prefixes (left-pad) the given string with \"pad\" characters as long as the required len is not reached.\n     *\n     * @param {string} str  The string to be padded\n     * @param {number} len  The required total length after padding\n     * @param {string} pad  The pad character to use\n     *\n     * @returns {string}    The padded string of length \"len\"\n     */\n    private leftPad( str: string, len: number, pad: string ): string {\n\n        // Any padding required on the left side?\n        if ( 1 + len >= str.length ) {\n\n            const padPrefix: string = pad.charAt( 0 );\n\n            // Prefix with \"n x pad\" ( n = 1 + len - str.length )\n            str = Array( 1 + len - str.length ).join( padPrefix ) + str;\n\n        }\n\n        return str;\n\n    }\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\n\nimport { Inject, Injectable }                               from '@angular/core';\nimport { MumblerParameter, mumblerParameterInjectionToken } from '../../common/parameter.class';\n\n@Injectable( {\n    providedIn: 'root'\n} )\nexport class CryptoConfigService {\n\n    // Asynchronous encryption specific\n    private _asynchronousAlgorithm: string = 'RSA-OAEP';\n    private _asynchronousLength: number = 4096;\n    private _asynchronousPublicExponent: Uint8Array = new Uint8Array( [ 1, 0, 1 ] );\n\n\n    // Derive specific\n    private _deriveAlgorithm: string = 'PBKDF2';\n    private _deriveIterations: number = 4294967296;    // 2 ^ 32\n\n    // Hash\n    private _hashAlgorithm: string = 'SHA-512';\n\n    // Synchronous encryption specific\n    private _synchronousAlgorithm: string = 'AES-CBC';\n    private _synchronousLength: number = 256;\n\n    // TOTP HMAC Algorithm name\n    private _totpAlgorithm: string = 'HMAC';\n\n    public constructor(\n        @Inject( mumblerParameterInjectionToken ) private readonly _communicationParameter: MumblerParameter\n    ) {}\n\n    public get asynchronousAlgorithm(): string {\n\n        return this._asynchronousAlgorithm;\n\n    }\n\n    public get asynchronousLength(): number {\n\n        return this._asynchronousLength;\n\n    }\n\n    public get asynchronousPublicExponent(): Uint8Array {\n\n        return this._asynchronousPublicExponent;\n\n    }\n\n    public get deriveAlgorithm(): string {\n\n        return this._deriveAlgorithm;\n\n    }\n\n    public get deriveIterations(): number {\n\n        return this._deriveIterations;\n\n    }\n\n    public get hashAlgorithm(): string {\n\n        return this._hashAlgorithm;\n\n    }\n\n    public get privateKey(): Uint8Array {\n\n        return this._communicationParameter.cryptoCommunicationParameter.privateKey;\n\n    }\n\n    public set privateKey( value: Uint8Array ) {\n\n        this._communicationParameter.cryptoCommunicationParameter.privateKey = value;\n\n    }\n\n    public get synchronousAlgorithm(): string {\n\n        return this._synchronousAlgorithm;\n\n    }\n\n    public get synchronousLength(): number {\n\n        return this._synchronousLength;\n\n    }\n\n\n    public get totpKey(): Uint8Array {\n\n        return this._communicationParameter.cryptoCommunicationParameter.totpKey;\n\n    }\n\n    public set totpKey( value: Uint8Array ) {\n\n        this._communicationParameter.cryptoCommunicationParameter.totpKey = value;\n\n    }\n\n    public get totpAlgorithm(): string {\n\n        return this._totpAlgorithm;\n\n    }\n\n}\n","/***********************************************\n ********* Copyright mumbler gmbh 2022 **********\n ************* All rights reserved **************\n ************************************************/\nimport { Injectable }                                                                  from '@angular/core';\nimport { catchError, forkJoin, from, map, Observable, of, switchMap, tap, throwError } from 'rxjs';\nimport { LoggerService }                                                               from '../common/logger.service';\nimport { CryptoConfigService }                                                         from '../config/crypto-config.service';\nimport { StaticConversion }                                                            from './static-conversion.class';\nimport { TotpClass }                                                                   from './totp.class';\n\nexport type CryptoKeyPairString = { publicKey: string, privateKey: string };\n\nenum CryptoKeyType {\n\n\tunknown,\n\tpkcs8,\n\ttotp\n\n}\n\nexport class EncryptedPayload {\n\n\tpublic data: Uint8Array;\n\tpublic iv: Uint8Array;\n\tpublic key: Uint8Array;\n\n\tpublic constructor ( data: Uint8Array, iv: Uint8Array, key: Uint8Array ) {\n\n\t\tthis.data = data;\n\t\tthis.iv = iv;\n\t\tthis.key = key;\n\n\t}\n\n\tpublic static IsValid ( payload: EncryptedPayload ): boolean {\n\n\t\treturn !! payload &&\n\t\t\t!! payload.iv && payload.iv.byteLength > 0 &&\n\t\t\t!! payload.key && payload.key.byteLength > 0 &&\n\t\t\t!! payload.data && payload.data.byteLength > 0\n\t\t\t;\n\n\t}\n\n}\n\nexport class SerializedEncryptedPayload {\n\n\tpublic data: string;\n\tpublic iv: string;\n\tpublic key: string;\n\n\tpublic constructor ( data: string, iv: string, key: string ) {\n\n\t\tthis.data = data;\n\t\tthis.iv = iv;\n\t\tthis.key = key;\n\n\t}\n\n\tpublic static ConvertToEncryptedPayload ( serialized: SerializedEncryptedPayload ): EncryptedPayload {\n\n\t\treturn new EncryptedPayload(\n\t\t\tStaticConversion.ConvertBase64ToBuffer( serialized.data ),\n\t\t\tStaticConversion.ConvertBase64ToBuffer( serialized.iv ),\n\t\t\tStaticConversion.ConvertBase64ToBuffer( serialized.key )\n\t\t);\n\n\t}\n\n\tpublic static ConvertToSerializedEncryptedPayload ( encryptedPayload: EncryptedPayload ): SerializedEncryptedPayload {\n\n\t\treturn new SerializedEncryptedPayload(\n\t\t\tStaticConversion.ConvertBufferToBase64( encryptedPayload.data ),\n\t\t\tStaticConversion.ConvertBufferToBase64( encryptedPayload.iv ),\n\t\t\tStaticConversion.ConvertBufferToBase64( encryptedPayload.key )\n\t\t);\n\n\t}\n\n}\n\n@Injectable( {\n\tprovidedIn: 'root'\n} )\nexport class CryptoService {\n\n\tprivate _privateKey: CryptoKey;\n\tprivate readonly _subtle: SubtleCrypto;\n\n\tpublic constructor (\n\t\tprivate readonly _loggerService: LoggerService,\n\t\tprivate readonly _cryptoConfigService: CryptoConfigService\n\t) {\n\n\t\tif ( !!! window.crypto || !!! window.crypto.subtle ) {\n\n\t\t\tthis._loggerService.fatal( `FATAL: Crypto interface not supported, aborting`, 'CryptoService' );\n\t\t\tthrow new Error( 'FATAL: Crypto interface not supported, aborting' );\n\n\t\t}\n\n\t\t// Shortcut\n\t\tthis._subtle = window.crypto.subtle;\n\n\t}\n\n\tpublic computeTotp (): Observable<string> {\n\n\t\treturn this.getCryptoKey( CryptoKeyType.totp ).pipe(\n\t\t\tswitchMap( ( totpKey: CryptoKey ) => new TotpClass( totpKey ).getToken() ),\n\n\t\t\ttap( () => this._loggerService.debug( `Successfully created totp`, 'CryptoService' ) )\n\t\t);\n\n\t}\n\n\tpublic decrypt ( data: ArrayBuffer | Uint8Array ): Observable<ArrayBuffer> {\n\n\t\treturn this.getCryptoKey( CryptoKeyType.pkcs8 ).pipe(\n\t\t\tswitchMap( ( privateKey: CryptoKey ) => from(\n\t\t\t\tthis._subtle.decrypt(\n\t\t\t\t\t{ name: this._cryptoConfigService.asynchronousAlgorithm },\n\t\t\t\t\tprivateKey,\n\t\t\t\t\tdata\n\t\t\t\t)\n\t\t\t) ),\n\n\t\t\ttap( () => this._loggerService.debug( `Successfully decrypted data buffer`, 'CryptoService' ) )\n\t\t);\n\n\t}\n\n\tpublic decryptBuffer ( encryptedPayload: EncryptedPayload ): Observable<Uint8Array> {\n\n\t\tconst importSynchronousKey: ( keyData: ArrayBuffer ) => Observable<CryptoKey> = ( keyData: ArrayBuffer ) => {\n\n\t\t\treturn from(\n\t\t\t\tthis._subtle.importKey(\n\t\t\t\t\t'raw',\n\t\t\t\t\tkeyData,\n\t\t\t\t\t{\n\t\t\t\t\t\tname: this._cryptoConfigService.synchronousAlgorithm,\n\t\t\t\t\t\tlength: this._cryptoConfigService.synchronousLength\n\t\t\t\t\t},\n\t\t\t\t\tfalse,\n\t\t\t\t\t[ 'decrypt' ]\n\t\t\t\t)\n\t\t\t);\n\n\t\t};\n\n\t\treturn this.decrypt( encryptedPayload.key ).pipe(\n\t\t\tswitchMap( ( keyData: ArrayBuffer ) => importSynchronousKey( keyData ) ),\n\n\t\t\tswitchMap( ( cryptoKey: CryptoKey ) => from(\n\t\t\t\tthis._subtle.decrypt(\n\t\t\t\t\t{ name: this._cryptoConfigService.synchronousAlgorithm, iv: encryptedPayload.iv },\n\t\t\t\t\tcryptoKey,\n\t\t\t\t\tencryptedPayload.data\n\t\t\t\t)\n\t\t\t) ),\n\n\t\t\tswitchMap( ( buffer: ArrayBuffer ) => of( new Uint8Array( buffer ) ) ),\n\n\t\t\ttap( () => this._loggerService.debug( `Successfully decrypted payload buffer`, 'CryptoService' ) )\n\t\t);\n\n\t}\n\n\tpublic encrypt ( recipientPublicKey: CryptoKey, payload: ArrayBuffer | Uint8Array ): Observable<Uint8Array> {\n\n\t\treturn from(\n\t\t\tthis._subtle.encrypt(\n\t\t\t\t{ name: this._cryptoConfigService.asynchronousAlgorithm },\n\t\t\t\trecipientPublicKey,\n\t\t\t\tpayload\n\t\t\t)\n\t\t).pipe(\n\t\t\tswitchMap( ( buffer: ArrayBuffer ) => of( new Uint8Array( buffer ) ) ),\n\n\t\t\ttap( () => this._loggerService.debug( `Successfully encrypted data buffer`, 'CryptoService' ) )\n\t\t);\n\n\t}\n\n\tpublic encryptPayload ( recipientPublicKey: CryptoKey, payload: Uint8Array ): Observable<EncryptedPayload> {\n\n\t\t// TODO: Implement payload splitting for payload > e.g. 512KB\n\n\t\tconst encryptSynchronous: ( iv: Uint8Array, key: CryptoKey ) => Observable<Uint8Array> = ( iv: Uint8Array, key: CryptoKey ) => {\n\n\t\t\treturn from(\n\t\t\t\tthis._subtle.encrypt(\n\t\t\t\t\t{\n\t\t\t\t\t\tname: this._cryptoConfigService.synchronousAlgorithm,\n\t\t\t\t\t\tiv: iv\n\t\t\t\t\t},\n\t\t\t\t\tkey,\n\t\t\t\t\tpayload\n\t\t\t\t)\n\t\t\t).pipe(\n\t\t\t\tswitchMap( ( buffer: ArrayBuffer ) => of( new Uint8Array( buffer ) ) )\n\t\t\t);\n\n\t\t};\n\n\t\tconst encryptAsync: ( synchronousKey: CryptoKey ) => Observable<Uint8Array> = ( synchronousKey: CryptoKey ) => {\n\n\t\t\treturn from(\n\t\t\t\tthis._subtle.exportKey(\n\t\t\t\t\t'raw',\n\t\t\t\t\tsynchronousKey\n\t\t\t\t)\n\t\t\t).pipe(\n\t\t\t\tswitchMap( ( keyData: ArrayBuffer ) => this.encrypt( recipientPublicKey, keyData ) )\n\t\t\t);\n\n\t\t};\n\n\t\treturn forkJoin( [\n\n\t\t\tfrom(\n\t\t\t\tthis._subtle.generateKey(\n\t\t\t\t\t{\n\t\t\t\t\t\tname: this._cryptoConfigService.synchronousAlgorithm,\n\t\t\t\t\t\tlength: this._cryptoConfigService.synchronousLength\n\t\t\t\t\t},\n\t\t\t\t\ttrue,\n\t\t\t\t\t[ 'encrypt', 'decrypt' ]\n\t\t\t\t)\n\t\t\t),\n\t\t\tof( this.randomBytes( 16 ) )\n\n\t\t] ).pipe(\n\t\t\tswitchMap( ( input: [ CryptoKey, Uint8Array ] ) => forkJoin( [\n\n\t\t\t\tencryptSynchronous( input[ 1 ], input[ 0 ] ),\n\t\t\t\tencryptAsync( input[ 0 ] ),\n\t\t\t\tof( input[ 1 ] )\n\n\t\t\t] ) ),\n\n\t\t\tswitchMap( ( input: [ Uint8Array, Uint8Array, Uint8Array ] ) => of( new EncryptedPayload( input[ 0 ], input[ 2 ], input[ 1 ] ) ) ),\n\n\t\t\ttap( () => this._loggerService.debug( `Successfully encrypted payload buffer`, 'CryptoService' ) )\n\t\t);\n\n\t}\n\n\tpublic exportKeys ( keys: CryptoKeyPair ): Observable<CryptoKeyPairString> {\n\n\t\treturn forkJoin(\n\t\t\t[\n\t\t\t\tfrom(\n\t\t\t\t\tthis._subtle.exportKey( 'pkcs8', keys.privateKey )\n\t\t\t\t),\n\t\t\t\tfrom(\n\t\t\t\t\tthis._subtle.exportKey( 'spki', keys.publicKey )\n\t\t\t\t)\n\t\t\t]\n\t\t).pipe(\n\t\t\tswitchMap( ( result: [ ArrayBuffer, ArrayBuffer ] ) => of( {\n\n\t\t\t\tprivateKey: StaticConversion.ConvertBufferToBase64( new Uint8Array( result[ 0 ] ) ),\n\t\t\t\tpublicKey: StaticConversion.ConvertBufferToBase64( new Uint8Array( result[ 1 ] ) )\n\n\t\t\t} ) )\n\t\t);\n\n\t}\n\n\tpublic generateKeys (): Observable<CryptoKeyPair> {\n\n\t\tconst algorithm: RsaHashedKeyGenParams = {\n\t\t\tname: this._cryptoConfigService.asynchronousAlgorithm,\n\t\t\thash: this._cryptoConfigService.hashAlgorithm,\n\t\t\tmodulusLength: this._cryptoConfigService.asynchronousLength,\n\t\t\tpublicExponent: this._cryptoConfigService.asynchronousPublicExponent\n\t\t};\n\n\t\treturn from(\n\t\t\tthis._subtle.generateKey(\n\t\t\t\talgorithm,\n\t\t\t\ttrue,\n\t\t\t\t[ 'encrypt', 'decrypt' ]\n\t\t\t)\n\t\t).pipe(\n\t\t\ttap( ( keys: CryptoKeyPair ) => this._loggerService.debug(\n\t\t\t\t`Successfully created new CryptoKeys \"${ keys.publicKey.type }\" and \"${ keys.privateKey.type }\"`,\n\t\t\t\t'CryptoService' )\n\t\t\t)\n\t\t);\n\n\t}\n\n\tpublic hashValue ( value: string, algorithm: 'SHA-256' | 'SHA-512' = 'SHA-512' ): Observable<string> {\n\n\t\treturn from(\n\t\t\tthis._subtle.digest( algorithm, StaticConversion.ConvertStringToBuffer( value ) )\n\t\t).pipe(\n\t\t\tmap( ( value: ArrayBuffer ) => StaticConversion.ConvertBufferToHexString( value ) )\n\t\t);\n\n\t}\n\n\tpublic importBondingTotpKey ( key: string | Uint8Array ): Observable<CryptoKey> {\n\n\t\treturn from(\n\t\t\tthis._subtle.importKey(\n\t\t\t\t'raw',\n\t\t\t\ttypeof key === 'string' ? StaticConversion.ConvertStringToBuffer( key ) : key,\n\t\t\t\t{ name: this._cryptoConfigService.totpAlgorithm, hash: this._cryptoConfigService.hashAlgorithm },\n\t\t\t\tfalse,\n\t\t\t\t[ 'sign' ]\n\t\t\t)\n\t\t).pipe(\n\t\t\ttap( () => this._loggerService.debug( `Successfully imported bonding totp key`, 'CryptoService' ) )\n\t\t);\n\n\t}\n\n\tpublic importPublicKey ( keyData: ArrayBuffer ): Observable<CryptoKey> {\n\n\t\treturn from(\n\t\t\tthis._subtle.importKey(\n\t\t\t\t'spki',\n\t\t\t\tkeyData,\n\t\t\t\t{\n\t\t\t\t\tname: this._cryptoConfigService.asynchronousAlgorithm,\n\t\t\t\t\thash: this._cryptoConfigService.hashAlgorithm\n\t\t\t\t},\n\t\t\t\tfalse,\n\t\t\t\t[ 'encrypt' ]\n\t\t\t)\n\t\t).pipe(\n\t\t\ttap( () => this._loggerService.debug( `Successfully imported public key`, 'CryptoService' ) )\n\t\t);\n\n\t}\n\n\tpublic randomBytes ( bytes: number ): Uint8Array {\n\n\t\tconst maxEntropy: number = 16;\n\n\t\tif ( bytes % maxEntropy !== 0 ) {\n\n\t\t\tif ( bytes < maxEntropy ) {\n\n\t\t\t\tconsole.warn( `Requested buffer length too small... adjusting to min size ${ maxEntropy }` );\n\t\t\t\tbytes = maxEntropy;\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( `Buffer length must be modulo ${ maxEntropy }... cutting of` );\n\t\t\t\tbytes -= bytes % maxEntropy;\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst length: number = bytes > maxEntropy ? Math.ceil( bytes / maxEntropy ) : 1;\n\t\tconst randomBuffer: Uint8Array = new Uint8Array( length * maxEntropy );\n\n\t\tfor ( let index: number = 0; index < length; index++ ) {\n\n\t\t\tconst randomBytes: Uint8Array = new Uint8Array( maxEntropy );\n\n\t\t\tcrypto.getRandomValues( randomBytes );\n\n\t\t\trandomBuffer.set( randomBytes, index * maxEntropy );\n\n\t\t}\n\n\t\treturn randomBuffer;\n\n\t}\n\n\tprivate getCryptoKey ( type: CryptoKeyType ): Observable<CryptoKey> {\n\n\t\tlet result: Observable<CryptoKey> = null;\n\n\t\tif ( CryptoKeyType.pkcs8 === type ) {\n\n\t\t\tresult = !! this._privateKey ?\n\t\t\t\tof( this._privateKey ) :\n\t\t\t\tthis.loadCryptoKey( this._cryptoConfigService.privateKey, type )\n\t\t\t;\n\n\t\t} else if ( CryptoKeyType.totp === type ) {\n\n\t\t\tresult = this.loadCryptoKey( this._cryptoConfigService.totpKey, type );\n\n\t\t} else {\n\n\t\t\treturn throwError( 'Unknown CryptoKeyType' );\n\n\t\t}\n\n\t\treturn result.pipe(\n\t\t\ttap( ( cryptoKey: CryptoKey ) => {\n\n\t\t\t\t// Only hold the private key... totp will change frequently\n\t\t\t\tif ( CryptoKeyType.pkcs8 === type ) {\n\n\t\t\t\t\tthis._privateKey = cryptoKey;\n\n\t\t\t\t}\n\n\t\t\t} )\n\t\t);\n\n\t}\n\n\tprivate loadCryptoKey ( keyData: Uint8Array, type: CryptoKeyType ): Observable<CryptoKey> {\n\n\t\tlet importKey: Observable<CryptoKey> = null;\n\n\t\tif ( type === CryptoKeyType.pkcs8 ) {\n\n\t\t\timportKey = from(\n\t\t\t\tthis._subtle.importKey(\n\t\t\t\t\t'pkcs8',\n\t\t\t\t\tkeyData,\n\t\t\t\t\t{\n\t\t\t\t\t\tname: this._cryptoConfigService.asynchronousAlgorithm,\n\t\t\t\t\t\thash: this._cryptoConfigService.hashAlgorithm\n\t\t\t\t\t},\n\t\t\t\t\tfalse,\n\t\t\t\t\t[ 'decrypt' ]\n\t\t\t\t)\n\t\t\t);\n\n\t\t} else if ( type === CryptoKeyType.totp ) {\n\n\t\t\tif ( !!! this._cryptoConfigService.totpKey || 0 === this._cryptoConfigService.totpKey.length ) {\n\n\t\t\t\t// Create on fresh => need for initial authentication\n\t\t\t\timportKey = from(\n\t\t\t\t\tthis._subtle.generateKey(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: this._cryptoConfigService.totpAlgorithm,\n\t\t\t\t\t\t\thash: this._cryptoConfigService.hashAlgorithm\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t[ 'sign' ]\n\t\t\t\t\t)\n\t\t\t\t);\n\n\t\t\t} else {\n\n\t\t\t\timportKey = this.decrypt( this._cryptoConfigService.totpKey ).pipe(\n\t\t\t\t\tswitchMap( ( totpKeyData: ArrayBuffer ) => from(\n\t\t\t\t\t\tthis._subtle.importKey(\n\t\t\t\t\t\t\t'raw',\n\t\t\t\t\t\t\ttotpKeyData,\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tname: this._cryptoConfigService.totpAlgorithm,\n\t\t\t\t\t\t\t\thash: this._cryptoConfigService.hashAlgorithm\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tfalse,\n\t\t\t\t\t\t\t[ 'sign' ]\n\t\t\t\t\t\t)\n\t\t\t\t\t) )\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\treturn throwError( 'Error during CryptoKey import: CryptoKeyType undefined.' );\n\n\t\t}\n\n\t\treturn importKey.pipe(\n\t\t\ttap( ( key: CryptoKey ) => this._loggerService.debug( `Successfully imported CryptoKey \"${ key.type }\"`, 'CryptoService' ) ),\n\n\t\t\tcatchError( ( err: Error ) => {\n\n\t\t\t\tthis._loggerService.error( `Unable to import CryptoKey \"${ type }\"`, 'CryptoService' );\n\t\t\t\treturn throwError( err );\n\n\t\t\t} )\n\t\t);\n\n\t}\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\nexport class BaseRequest {\n\n    public readonly time: number = Date.now();\n    public readonly version: number;\n\n    public constructor( version: number = 1 ) {\n\n        this.version = version;\n\n    }\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\nimport { BaseRequest }                from '../../common/request/base.request';\nimport { SerializedEncryptedPayload } from '../../crypto/crypto.service';\nimport { Mumble }                     from '../../delegation/socket/delegation.mumble.class';\nimport { MumblerId }                  from '../../types/mumbler-id.type';\n\nexport class DelegationRequest extends BaseRequest {\n\n    public authorization: string;\n    public delegateTo: MumblerId;\n    public files: Array< SerializedEncryptedPayload >;\n    public mumblerId: MumblerId;\n    public payload: SerializedEncryptedPayload;\n    public sent: number;\n\n    /**\n     * Serialize the mumble for delegation request\n     *\n     * FYI: \"authorisation\" is only required when delegation via WebSocket,\n     * otherwise the authorization is handled via request header\n     *\n     * @param {Mumble} mumble\n     * @param {string} authorization\n     */\n    public constructor( mumble: Mumble, authorization: string = null ) {\n\n        super();\n\n        if ( !! authorization ) {\n\n            this.authorization = authorization;\n\n        }\n        this.mumblerId = mumble.mumblerId.mumblerId;\n        this.delegateTo = mumble.transmitPayload.delegateTo;\n        this.sent = Date.now();\n        this.payload = mumble.transmitPayload.payload;\n        this.files = mumble.transmitPayload.files;\n\n    }\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\nimport { EMPTY, from, Observable, Subscriber, throwError } from 'rxjs';\nimport { LoggerService }                                   from '../../common/logger.service';\nimport { MumblerIdPayload }                                from '../../mumble/payload/mumbler-id.payload';\nimport { DelegationRequest }                               from '../../mumbler/requests/delegation.request';\nimport { HeartbeatResponse }                               from '../../mumbler/response/heartbeat.response';\nimport { WebSocketResponse }                               from '../../mumbler/response/web-socket.response';\nimport { Mumble }                                          from './delegation.mumble.class';\n\nexport class DelegationSocket extends Observable< Mumble > {\n\n\tprivate _heartbeatInterval: number;\n\tprivate _mumblerId: string;\n\tprivate _socket: WebSocket;\n\tprivate _timeDeltaBackend: number;\n\n\tpublic constructor( mumblerId: string, totp: string, socketUrl: string, heartbeat: number = 5000 ) {\n\n\t\tsuper( ( subscriber: Subscriber< Mumble > ) => {\n\n\t\t\tthis._mumblerId = mumblerId;\n\t\t\tthis._socket = new WebSocket( socketUrl, [ mumblerId, totp, `${ new Date().getTime() }` ] );\n\n\t\t\tthis._socket.onclose = ( event: CloseEvent ) => {\n\n\t\t\t\t// event.code === 1000 (\"Normal closure\") => no need for error throwing\n\t\t\t\tif ( event.code !== 1000 ) {\n\n\t\t\t\t\tsubscriber.error( event );\n\n\t\t\t\t}\n\n\t\t\t\t// in any case stop heartbeat\n\t\t\t\tif ( !! this._heartbeatInterval ) {\n\n\t\t\t\t\tclearInterval( this._heartbeatInterval );\n\t\t\t\t\tthis._heartbeatInterval = null;\n\n\t\t\t\t}\n\n\t\t\t\tsubscriber.complete();\n\n\t\t\t};\n\n\t\t\tthis._socket.onmessage = ( event: MessageEvent ) => {\n\n\t\t\t\ttry {\n\n\t\t\t\t\t// Try to de-serialize the mumble (which comes as a blob)\n\t\t\t\t\tconst raw: Blob = new Blob( [ event.data ] );\n\n\t\t\t\t\t// from( raw.text() ).subscribe( ( message: string ) => {\n\t\t\t\t\tfrom( new Response( raw ).text() ).subscribe( ( message: string ) => {\n\n\t\t\t\t\t\tconst response: WebSocketResponse|Mumble = JSON.parse( message ) as WebSocketResponse|Mumble;\n\n\t\t\t\t\t\tif ( !! response && 'success' in response && !! response.success && !! response.event ) {\n\n\t\t\t\t\t\t\tif ( response.event === 'delegation' ) {\n\n\t\t\t\t\t\t\t\t// actually nothing to do here => success is checked above\n\n\t\t\t\t\t\t\t} else if ( response.event === 'heartbeat' ) {\n\n\t\t\t\t\t\t\t\tthis._timeDeltaBackend = ( response as HeartbeatResponse ).heartbeat;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Now we can try to parse it into a mumble object (at least the public fields)\n\t\t\t\t\t\t\tsubscriber.next( response as Mumble );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} );\n\n\t\t\t\t\t// // Use FileReader due to the lack of Blob.text() support in iOS\n\t\t\t\t\t// const reader: FileReader = new FileReader();\n\t\t\t\t\t//\n\t\t\t\t\t// reader.onload = () => {\n\t\t\t\t\t//\n\t\t\t\t\t//     const message: string = reader.result as string;\n\t\t\t\t\t//\n\t\t\t\t\t//     of( message ).subscribe( ( message: string ) => {\n\t\t\t\t\t//\n\t\t\t\t\t//         const response: WebSocketResponse|Mumble = JSON.parse( message ) as WebSocketResponse|Mumble;\n\t\t\t\t\t//\n\t\t\t\t\t//         if ( !! response && 'success' in response && !! response.success && !! response.event ) {\n\t\t\t\t\t//\n\t\t\t\t\t//             if ( response.event === 'delegation' ) {\n\t\t\t\t\t//\n\t\t\t\t\t//                 // actually nothing to do here => success is checked above\n\t\t\t\t\t//\n\t\t\t\t\t//             } else if ( response.event === 'heartbeat' ) {\n\t\t\t\t\t//\n\t\t\t\t\t//                 this._timeDeltaBackend = ( response as HeartbeatResponse ).heartbeat;\n\t\t\t\t\t//\n\t\t\t\t\t//             }\n\t\t\t\t\t//\n\t\t\t\t\t//         } else {\n\t\t\t\t\t//\n\t\t\t\t\t//             // Now we can try to parse it into a mumble object (at least the public fields)\n\t\t\t\t\t//             subscriber.next( response as Mumble );\n\t\t\t\t\t//\n\t\t\t\t\t//         }\n\t\t\t\t\t//\n\t\t\t\t\t//     } );\n\t\t\t\t\t//\n\t\t\t\t\t// };\n\t\t\t\t\t//\n\t\t\t\t\t// reader.readAsText( raw );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tsubscriber.error( `Unable to de-serialize socket message: \"${ LoggerService.ConvertToString( e ) }\"` );\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t\tthis._socket.onerror = ( event: Event ) => {\n\n\t\t\t\tsubscriber.error( event );\n\n\t\t\t};\n\n\t\t\tthis._socket.onopen = () => {\n\n\t\t\t\tthis._heartbeatInterval = window?.setInterval(\n\t\t\t\t\t() => this.sendHeartbeat(),\n\t\t\t\t\tMath.max( 5000, heartbeat )\n\t\t\t\t);\n\n\t\t\t};\n\n\t\t} );\n\n\t}\n\n\tpublic get mumblerId(): string {\n\n\t\treturn this._mumblerId;\n\n\t}\n\n\t// noinspection JSUnusedGlobalSymbols\n\tpublic get timeDeltaBackend(): number {\n\n\t\treturn this._timeDeltaBackend;\n\n\t}\n\n\tpublic get state(): number {\n\n\t\treturn this._socket.readyState;\n\n\t}\n\n\tpublic closeChannel( code?: number, reason?: string ): void {\n\n\t\tthis._socket.close( code, reason );\n\n\t}\n\n\t// noinspection JSUnusedGlobalSymbols\n\tpublic sendMessage( authorization: string, mumble: Mumble ): Observable< never > {\n\n\t\tif ( !!mumble ) {\n\n\t\t\t// Enforce the sender\n\t\t\tmumble.mumblerId = new MumblerIdPayload( this._mumblerId );\n\n\t\t\ttry { // Try to delegate (\"send\") the mumble\n\n\t\t\t\tthis._socket.send( JSON.stringify( { event: 'delegation', data: new DelegationRequest( mumble, authorization ) } ) );\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\tconsole.warn( e );\n\n\t\t\t}\n\n\t\t\treturn EMPTY;\n\n\t\t}\n\n\t\treturn throwError( () => 'No payload to send found' );\n\n\t}\n\n\tprivate sendHeartbeat(): void {\n\n\t\t// Try to delegate (\"send\") the mumble\n\t\tthis._socket.send( JSON.stringify( { event: 'heartbeat', data: { heartbeat: Date.now() } } ) );\n\n\t}\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\n\nimport { Inject, Injectable }                               from '@angular/core';\nimport { MumblerParameter, mumblerParameterInjectionToken } from '../../common/parameter.class';\n\n@Injectable( {\n    providedIn: 'root'\n} )\nexport class MumblerModuleConfigService {\n\n    public constructor(\n\t    @Inject( mumblerParameterInjectionToken ) private readonly _mumblerModuleParameter: MumblerParameter\n    ) {}\n\n    public get application(): string {\n\n        return this._mumblerModuleParameter.application;\n\n    }\n\n    public get debugMode(): boolean {\n\n        return this._mumblerModuleParameter.extendedDelegationParameter.debugMode;\n\n    }\n\n    public get serverUrl(): string {\n\n        return this._mumblerModuleParameter.extendedDelegationParameter.serverUrl;\n\n    }\n\n    public get socketUrl(): string {\n\n        return this._mumblerModuleParameter.extendedDelegationParameter.socketUrl;\n\n    }\n\n    public get mumblerName(): string {\n\n        return this._mumblerModuleParameter.mumblerName;\n\n    }\n\n    public get mumblerId(): string {\n\n        return this._mumblerModuleParameter.mumblerId;\n\n    }\n\n    public get mumblerModuleParameter(): MumblerParameter {\n\n        return this._mumblerModuleParameter;\n\n    }\n\n    public fromJson( jsonString: string ): MumblerParameter|undefined {\n\n        if ( !!jsonString && typeof jsonString === 'string' && jsonString.length > 0 && '{' === jsonString.trim().substr( 0, 1 ) ) {\n\n            try {\n\n\t\t\t\treturn this.fromObject( JSON.parse( jsonString ) );\n\n            } catch ( e ) {\n\n                return undefined;\n\n            }\n\n        }\n\n        return undefined;\n\n    }\n\n\tpublic fromObject( obj: Record< string, unknown > ): MumblerParameter|undefined {\n\n\t\tconst fields: Array< string > = [ '_application', '_mumblerId', '_mumblerName', '_cryptoCommunicationParameter', '_extendedCommunicationParameter' ];\n\n\t\t// Basic field check. TODO: Need to evaluate the types as well?\n\t\tif ( !! obj && fields.map( ( f: string ) => obj.hasOwnProperty( f ) ).reduce( ( p: boolean, c: boolean) => p === c && !!c ) ) {\n\n\t\t\ttry {\n\n\t\t\t\tconst params: MumblerParameter = Object.assign( Object.create( MumblerParameter.prototype ), obj ) as MumblerParameter;\n\n\t\t\t\tthis._mumblerModuleParameter.application = params.application;\n\t\t\t\tthis._mumblerModuleParameter.mumblerId = params.mumblerId;\n\t\t\t\tthis._mumblerModuleParameter.mumblerName = params.mumblerName;\n\n\t\t\t\tthis._mumblerModuleParameter.cryptoCommunicationParameter.totpKey = this.parseUint8Serialized( params.cryptoCommunicationParameter[ '_totpKey' ] );\n\t\t\t\tthis._mumblerModuleParameter.cryptoCommunicationParameter.privateKey = this.parseUint8Serialized( params.cryptoCommunicationParameter[ '_privateKey' ] );\n\n\t\t\t\treturn this._mumblerModuleParameter;\n\n\t\t\t} catch ( e ) {\n\n\t\t\t\treturn undefined;\n\n\t\t\t}\n\t\t}\n\n\t\treturn undefined;\n\n\t}\n\n\tpublic reset(): void {\n\n\t\tthis._mumblerModuleParameter.application = undefined;\n\t\tthis._mumblerModuleParameter.mumblerId = undefined;\n\t\tthis._mumblerModuleParameter.mumblerName = undefined;\n\t\tthis._mumblerModuleParameter.cryptoCommunicationParameter.privateKey = new Uint8Array();\n\t\tthis._mumblerModuleParameter.cryptoCommunicationParameter.totpKey = new Uint8Array();\n\n\t}\n\n    public toJson(): string|undefined {\n\n        try {\n\n            return JSON.stringify( this._mumblerModuleParameter );\n\n        } catch ( e ) {\n\n            return undefined;\n\n        }\n\n    }\n\n    private parseUint8Serialized( privateKey: { [key: number]: number } ): Uint8Array {\n\n        const bytes: Array<number> = new Array<number>();\n\n        for ( const k in privateKey ) {\n\n            if ( privateKey.hasOwnProperty( k ) ) {\n\n                bytes.push( privateKey[ k ] );\n\n            }\n\n        }\n\n        return new Uint8Array( bytes );\n\n    }\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\nimport { Inject, Injectable }                               from '@angular/core';\nimport { MumblerParameter, mumblerParameterInjectionToken } from '../../common/parameter.class';\n\n@Injectable( {\n    providedIn: 'root'\n} )\nexport class MumblerConfigService {\n\n    public constructor(\n        @Inject( mumblerParameterInjectionToken ) private readonly _mumblerParameter: MumblerParameter\n    ) {}\n\n    public get application(): string {\n\n        return this._mumblerParameter.application;\n\n    }\n\n    public set application( value: string ) {\n\n        this._mumblerParameter.application = value;\n\n    }\n\n    public get mumblerId(): string {\n\n        return this._mumblerParameter.mumblerId;\n\n    }\n\n    public set mumblerId( value: string ) {\n\n\t    this._mumblerParameter.mumblerId = value;\n\n    }\n\n    public get mumblerName(): string {\n\n        return this._mumblerParameter.mumblerName;\n\n    }\n\n    public set mumblerName( value: string ) {\n\n        this._mumblerParameter.mumblerName = value;\n\n    }\n\n    public get mumblerApiUrl(): string {\n\n        return this._mumblerParameter.extendedDelegationParameter.serverUrl;\n\n    }\n\n    public get mumblerApiSocket(): string {\n\n        return this._mumblerParameter.extendedDelegationParameter.socketUrl;\n\n    }\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\nimport { HttpEvent, HttpEventType } from '@angular/common/http';\nimport { Subscriber }               from 'rxjs';\nimport { BaseResponse }             from './response/base.response';\n\nexport const handleResponse: < Res extends BaseResponse> ( event: HttpEvent< Res >, subscriber: Subscriber< Res > )=> void = < Res extends BaseResponse>( event: HttpEvent< Res >, subscriber: Subscriber< Res > ) => {\n\n\tif ( event.type === HttpEventType.Response && !! event?.body?.success ) {\n\n\t\tsubscriber.next( event.body );\n\n\t} else if ( event.type === HttpEventType.Response && !!! event?.body?.success ) {\n\n\t\tsubscriber.error( `Error occurred : \"${ event?.body?.details } (${ event?.body?.code })\"` );\n\n\t} else if ( event.type === HttpEventType.Response ) {\n\n\t\tsubscriber.error( `Unknown response body. Maybe wrong server url?` );\n\n\t}\n\n\t// TODO: May be interact with other HttpEvent types => e.g. progress or error handling in upload...\n\n};\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\nimport { MumblerId } from '../../types/mumbler-id.type';\n\nexport class DelegateToInfo {\n\n    public associated: Array< string >;\n    public mumblerId: MumblerId;\n    public name: string;\n    public public: ArrayBuffer;\n\n    public constructor( mumblerId: string, name: string, publicKey: ArrayBuffer, associated: string = undefined ) {\n\n\t    this.mumblerId = mumblerId;\n        this.name = name;\n        this.public = publicKey;\n\n        if ( !! associated && typeof associated === 'string' && associated.length > 0 ) {\n\n            this.associated = associated.split( ',' );\n\n        } else {\n\n            this.associated = [];\n\n        }\n\n    }\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2020 **********\n************* All rights reserved **************\n************************************************/\n\nexport class BondingParameterModel {\n\n\tpublic token: Uint8Array;\n\tpublic totp: Uint8Array;\n\n\tpublic constructor( token: Uint8Array, totp: Uint8Array ) {\n\n\t\tthis.token = token;\n\t\tthis.totp = totp;\n\n\t}\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\nimport { MumblerId } from '../../types/mumbler-id.type';\n\nexport class BondingRequestModel {\n\n    public bondingToken: string;\n    public bondingTotp: string;\n    public mumblerId: MumblerId;\n\n\n    public constructor( bondingToken: string, bondingTotp: string, mumblerId: MumblerId ) {\n\n        this.bondingToken = bondingToken;\n        this.bondingTotp = bondingTotp;\n        this.mumblerId = mumblerId;\n\n    }\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\nimport { BaseRequest } from '../../common/request/base.request';\nimport { MumblerId }   from '../../types/mumbler-id.type';\n\nexport class CommenceBondingRequest extends BaseRequest {\n\n    public bondingToken: string;\n    public bondingTotp: string;\n    public mumblerId: MumblerId;\n\n    public constructor( bondingToken: string, bondingTotp: string, mumblerId: string ) {\n\n        super();\n        this.bondingToken = bondingToken;\n        this.bondingTotp = bondingTotp;\n        this.mumblerId = mumblerId;\n\n    }\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\nimport { BaseRequest } from '../../common/request/base.request';\n\nexport class FindMumblerNameRequest extends BaseRequest {\n\n    public search: string;\n\n    public constructor( search: string ) {\n\n        super();\n        this.search = search;\n\n    }\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\nimport { BaseRequest } from '../../common/request/base.request';\n\nexport class InviteMumblerRequest extends BaseRequest {\n\n    public body: string;\n    public subject: string;\n\n    public constructor( subject: string, body: string ) {\n\n        super();\n        this.subject = subject;\n        this.body = body;\n\n    }\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\nimport { ValidationToken } from '../../common/common.types';\nimport { BaseRequest }     from '../../common/request/base.request';\n\nexport class OnboardingRequest extends BaseRequest {\n\n\tpublic licenseId: string;\n\tpublic name: string;\n\tpublic public: string;\n\tpublic validationToken: ValidationToken;\n\n\tpublic constructor( mumblerName: string, publicKey: string, validationToken: ValidationToken, licenseId: string = undefined ) {\n\n\t    super();\n\n\t\tthis.name = mumblerName;\n\t\tthis.public = publicKey;\n\t\tthis.validationToken = validationToken;\n\t\tthis.licenseId = licenseId;\n\n\t}\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\nimport { BaseRequest }         from '../../common/request/base.request';\nimport { BondingRequestModel } from '../model/bonding-request.model';\n\nexport class PushBondingRequest extends BaseRequest {\n\n    public alert: string;\n    public bonding: BondingRequestModel;\n\n    public constructor( alert: string, bonding: BondingRequestModel ) {\n\n        super();\n        this.alert = alert;\n        this.bonding = bonding;\n\n    }\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\nimport { BaseRequest } from '../../common/request/base.request';\n\nexport class RegisterPushNotificationRequest extends BaseRequest {\n\n    public appBundleId: string;\n    public token: string;\n\n    public constructor( appBundleId: string, token: string ) {\n\n        super();\n\n        this.appBundleId = appBundleId;\n        this.token = token;\n\n    }\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\nimport { BaseRequest } from '../../common/request/base.request';\n\nexport class PushDelegationRequest extends BaseRequest {\n\n    public alert: string;\n    public mumblerId: string;\n\n    public constructor( alert: string, mumblerId: string ) {\n\n        super();\n        this.alert = alert;\n        this.mumblerId = mumblerId;\n\n    }\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\nimport { HttpClient, HttpEvent, HttpHeaders }                                                       from '@angular/common/http';\nimport { Injectable }                                                                               from '@angular/core';\nimport { catchError, forkJoin, map, Observable, of, retry, Subscriber, switchMap, tap, throwError } from 'rxjs';\nimport { ValidationToken }                                                                          from '../common/common.types';\nimport { LoggerService }                                                                            from '../common/logger.service';\nimport { BaseRequest }                                                                              from '../common/request/base.request';\nimport { handleResponse }                                                                           from '../common/response.helper';\nimport { BaseResponse }                                                                             from '../common/response/base.response';\nimport { CryptoConfigService }                                                                      from '../config/crypto-config.service';\nimport { MumblerModuleConfigService }                                                               from '../config/module-config.service';\nimport { MumblerConfigService }                                                                     from '../config/mumbler-config.service';\nimport {\n\tCryptoKeyPairString,\n\tCryptoService,\n\tSerializedEncryptedPayload\n}                                                                                                   from '../crypto/crypto.service';\nimport { StaticConversion }                                                                         from '../crypto/static-conversion.class';\nimport { TotpClass }                                                                                from '../crypto/totp.class';\nimport { DelegateToInfo }                                                                           from '../delegation/delegation/delegate-to-info.class';\nimport { Mumble }                                                                                   from '../delegation/socket/delegation.mumble.class';\nimport { MumblerId }                                                                                from '../types/mumbler-id.type';\nimport { BondingParameterModel }                                                                    from './model/bonding-parameter.model';\nimport { BondingRequestModel }                                                                      from './model/bonding-request.model';\nimport { FindMumblerNameModel }                                                                     from './model/find-mumbler-name.model';\nimport { CommenceBondingRequest }                                                                   from './requests/commence-bonding.request';\nimport { DelegationRequest }                                                                        from './requests/delegation.request';\nimport { FindMumblerNameRequest }                                                                   from './requests/find-mumbler-name.request';\nimport { InviteMumblerRequest }                                                                     from './requests/invite-mumbler.request';\nimport { OnboardingRequest }                                                                        from './requests/onboarding.request';\nimport { PushBondingRequest }                                                                       from './requests/push-bonding.request';\nimport { RegisterPushNotificationRequest }                                                          from './requests/register-push-notification.request';\nimport { AssociatedMumblersResponse }                                                               from './response/associated-mumblers.response';\nimport { AvailableResponse }                                                                        from './response/available.response';\nimport { CommenceBondingResponse }                                                                  from './response/commence-bonding.response';\nimport { DelegateToInfoResponse }                                                                   from './response/delegate-to-info.response';\nimport { DelegationResponse }                                                                       from './response/delegation.response';\nimport { FindMumblerNameResponse }                                                                  from './response/find-mumbler-name.response';\nimport { InitBondingResponse }                                                                      from './response/init-bonding.response';\nimport { InviteMumblerResponse }                                                                    from './response/invite-mumbler.response';\nimport { OnboardingResponse }                                                                       from './response/onboarding.response';\nimport { PushDelegationRequest }                                                                    from './response/push-delegation.request';\n\n// eslint-disable-next-line @typescript-eslint/naming-convention\ntype HeaderFields = { Authorization: string, Application: string, RequestTime: string };\n\n@Injectable( {\n\tprovidedIn: 'root'\n} )\nexport class MumblerService {\n\n\tpublic constructor(\n\t\tprivate readonly _cryptoService: CryptoService,\n\t\tprivate readonly _cryptoConfigService: CryptoConfigService,\n\t\tprivate readonly _mumblerConfigService: MumblerConfigService,\n\t\tprivate readonly _mumblerModuleConfigService: MumblerModuleConfigService,\n\t\tprivate readonly _loggerService: LoggerService,\n\t\tprivate readonly _httpClient: HttpClient\n\t) {}\n\n\t// noinspection JSUnusedGlobalSymbols\n\tpublic associatedMumblerIds(): Observable< Array< MumblerId > > {\n\n\t\tthis._loggerService.debug( `Querying associated mumblers for \"${ this._mumblerConfigService.mumblerId }\"`, 'MumblerService' );\n\n\t\treturn this.get< AssociatedMumblersResponse >( this._mumblerConfigService.application, `mumbler/${ this._mumblerConfigService.mumblerId }/associatedMumblers` ).pipe(\n\n\t\t\ttap( () => this._loggerService.debug( `Successfully queried associated info`, 'MumblerService' ) ),\n\n\t\t\tmap( ( response: AssociatedMumblersResponse ) => {\n\n\t\t\t\tif ( !! response.success ) {\n\n\t\t\t\t\treturn response.group;\n\n\t\t\t\t}\n\n\t\t\t\treturn [];\n\n\t\t\t} ),\n\n\t\t\ttap( () => this._loggerService.debug( `Decrypted delegation info`, 'MumblerService' ) )\n\n\t\t);\n\n\t}\n\n\t// noinspection JSUnusedGlobalSymbols\n\tpublic commenceBonding( bondingToken: string, totpKey: Uint8Array ): Observable< MumblerId > {\n\n\t\tthis._loggerService.debug( `Commencing bonding process for \"${ this._mumblerConfigService.mumblerId }\"`, 'MumblerService' );\n\n\t\treturn this._cryptoService.importBondingTotpKey( totpKey ).pipe(\n\n\t\t\ttap( () => this._loggerService.debug( 'Bonding totp imported successfully', 'MumblerService' ) ),\n\n\t\t\tswitchMap( ( key: CryptoKey ) => new TotpClass( key ).getToken() ),\n\n\t\t\ttap( () => this._loggerService.debug( 'Bonding totp computation successfully', 'MumblerService' ) ),\n\n\t\t\tswitchMap( ( totpToken: string ) => this.post< CommenceBondingRequest, CommenceBondingResponse >(\n\t\t\t\tthis._mumblerConfigService.application,\n\t\t\t\t`bonding/delegation/challenge`,\n\t\t\t\tnew CommenceBondingRequest( bondingToken, totpToken, this._mumblerConfigService.mumblerId )\n\t\t\t) ),\n\n\t\t\ttap( ( response: CommenceBondingResponse ) => this._loggerService.debug( `Got bonding challenge response with success \"${ response.success }\"`, 'MumblerService' ) ),\n\n\t\t\tswitchMap( ( response: CommenceBondingResponse ) => this._cryptoService.decrypt( StaticConversion.ConvertBase64ToBuffer( response.mumblerId ) ) ),\n\n\t\t\ttap( () => this._loggerService.debug( 'Decrypted bonded mumblerId', 'MumblerService' ) ),\n\n\t\t\tswitchMap( ( mumblerId: ArrayBuffer ) => of( StaticConversion.ConvertBufferToString( mumblerId ) ) ),\n\n\t\t\ttap( ( mumblerId: string ) => this._loggerService.debug( `Now bonded to \"${ mumblerId }\"`, 'MumblerService' ) )\n\n\t\t);\n\n\t}\n\n\t// noinspection JSUnusedGlobalSymbols\n\tpublic deRegisterPushNotification(): Observable< boolean > {\n\n\t\treturn this.post< BaseRequest, BaseResponse >( this._mumblerConfigService.application, `mumbler/${ this._mumblerConfigService.mumblerId }/deRegisterPushNotification`, new BaseRequest() ).pipe(\n\n\t\t\ttap( ( response: BaseResponse ) => this._loggerService.debug( `De-registered push notification with success \"${ response.success }\"`, 'MumblerService' ) ),\n\n\t\t\tmap( ( response: BaseResponse ) => response.success )\n\n\t\t);\n\n\t}\n\n\tpublic delegateToInfo( delegateTo: MumblerId ): Observable< DelegateToInfo > {\n\n\t\tthis._loggerService.debug( `Querying delegation info for \"${ this._mumblerConfigService.mumblerId }\" => \"${ delegateTo }\"`, 'MumblerService' );\n\n\t\treturn this.get< DelegateToInfoResponse >(\n\t\t\tthis._mumblerConfigService.application,\n\t\t\t`mumbler/${ this._mumblerConfigService.mumblerId }/delegateInfo/${ delegateTo }`\n\t\t).pipe(\n\n\t\t    tap( () => this._loggerService.debug( `Successfully queried delegation info`, 'MumblerService' ) ),\n\n\t\t\tswitchMap( ( response: DelegateToInfoResponse ) => forkJoin( [\n\n\t\t\t\tthis._cryptoService.decryptBuffer( SerializedEncryptedPayload.ConvertToEncryptedPayload( response.name ) ),\n\t\t\t\tthis._cryptoService.decryptBuffer( SerializedEncryptedPayload.ConvertToEncryptedPayload( response.public ) ),\n\t\t\t\tthis._cryptoService.decryptBuffer( SerializedEncryptedPayload.ConvertToEncryptedPayload( response.associated ) )\n\n\t\t\t] ) ),\n\n\t\t\ttap( () => this._loggerService.debug( `Decrypted delegation info`, 'MumblerService' ) ),\n\n\t\t\tswitchMap( ( decrypted: [ Uint8Array, Uint8Array, Uint8Array ] ) => of( new DelegateToInfo(\n\t\t\t\tdelegateTo,\n\t\t\t\tStaticConversion.ConvertBufferToString( decrypted[ 0 ] ),\n\t\t\t\tdecrypted[ 1 ],\n\t\t\t\tStaticConversion.ConvertBufferToString( decrypted[ 2 ] )\n\t\t\t) ) )\n\n\t\t);\n\n\t}\n\n\t// noinspection JSUnusedGlobalSymbols\n\tpublic initBonding(): Observable< BondingParameterModel > {\n\n\t\tthis._loggerService.debug( `Initialized bonding process for \"${ this._mumblerConfigService.mumblerId }\"`, 'MumblerService' );\n\n\t    return this.get< InitBondingResponse >( this._mumblerConfigService.application, `bonding/delegation/new/${ this._mumblerConfigService.mumblerId }` ).pipe(\n\n\t        tap( ( response: InitBondingResponse ) => this._loggerService.debug( `Got init bonding response with success \"${ response.success }\"`, 'MumblerService' ) ),\n\n\t        switchMap( ( response: InitBondingResponse ) => forkJoin( [\n\n\t            this._cryptoService.decrypt( StaticConversion.ConvertBase64ToBuffer( response.token ) ),\n\t            this._cryptoService.decrypt( StaticConversion.ConvertBase64ToBuffer( response.totp ) )\n\n\t\t\t] ) ),\n\n\t\t\ttap( () => this._loggerService.debug( `Successfully decrypted bonding parameter`, 'MumblerService' ) ),\n\n\t\t\tswitchMap( ( bondingParameter: [ Uint8Array, Uint8Array ] ) => of( new BondingParameterModel( bondingParameter[ 0 ], bondingParameter[ 1 ] ) ) )\n\n\t\t);\n\n\t}\n\n\t// noinspection JSUnusedGlobalSymbols\n\tpublic inviteMumbler( recipient: string, subject: string, body: string ): Observable< boolean > {\n\n\t\tthis._loggerService.debug( `Sending invite to \"${ recipient }\" from mumbler \"${ this._mumblerConfigService.mumblerId }\"`, 'MumblerService' );\n\n\t\treturn this.post< InviteMumblerRequest, InviteMumblerResponse >(\n\t\t\tthis._mumblerConfigService.application,\n\t\t\t`mumbler/${ this._mumblerConfigService.mumblerId }/invite/${ recipient }`,\n\t\t\tnew InviteMumblerRequest( subject, body )\n\t\t).pipe(\n\n\t\t\tmap( ( response: InviteMumblerResponse ) => response?.success ),\n\n\t\t\ttap( ( result: boolean ) => this._loggerService.debug( `Sent invite to \"${ recipient }\" with result \"${ result }\"`, 'MumblerService' ) )\n\n\t\t);\n\n\t}\n\n\t// noinspection JSUnusedGlobalSymbols\n\tpublic mumblerNameAvailable( application: string, mumblerName: string ): Observable< boolean > {\n\n\t\tif ( !!! application || application.length < 5 ) {\n\n\t\t\treturn throwError( () => 'Either no \"application\" parameter supplied or parameter shorter than the required minimum of 5 characters' );\n\n\t\t}\n\n\t\tif ( !!! mumblerName || mumblerName.length < 5 ) {\n\n\t\t\treturn throwError( () => 'Either no \"mumblerName\" parameter supplied or parameter shorter than the required minimum of 5 characters' );\n\n\t\t}\n\n\t\treturn this.get< AvailableResponse >( application, `on-boarding/register/available/${ mumblerName }` ).pipe(\n\n\t\t\ttap( () => this._loggerService.debug( `Successfully queried available user information`, 'MumblerService' ) ),\n\n\t\t\tmap( ( response: AvailableResponse ) => response.available )\n\n\t\t);\n\n\t}\n\n\t// noinspection JSUnusedGlobalSymbols\n\tpublic onBoarding( application: string, mumblerName: string, validationToken: ValidationToken, licenseId: string = undefined ): Observable< boolean > {\n\n\t\tif ( !!! application || application.length < 5 ) {\n\n\t\t\treturn throwError( () => 'Either no \"application\" parameter supplied or parameter shorter than the required minimum of 5 characters' );\n\n\t\t}\n\n\t\tif ( !!! mumblerName || mumblerName.length < 5 ) {\n\n\t\t\treturn throwError( () => 'Either no \"mumblerName\" parameter supplied or parameter shorter than the required minimum of 5 characters' );\n\n\t\t}\n\n\t\tif (\n\t\t\t!! this._mumblerConfigService.mumblerId && this._mumblerConfigService.mumblerId.length > 0 &&\n            !! this._cryptoConfigService.totpKey && this._cryptoConfigService.totpKey.byteLength > 0\n\t\t) {\n\n\t\t\treturn throwError( () => 'Already on-boarded' );\n\n\t\t}\n\n\t\tthis._loggerService.debug( `Started on-boarding process`, 'MumblerService' );\n\n\t\t// Store the application\n\t\tthis._mumblerConfigService.application = application;\n\n\t\t// Commence on-boarding\n\t\treturn this._cryptoService.generateKeys().pipe(\n\n\t\t\ttap( () => this._loggerService.debug( `Created new set of crypto keys`, 'MumblerService' ) ),\n\n\t\t\tswitchMap( ( keyPair: CryptoKeyPair ) => this._cryptoService.exportKeys( keyPair ) ),\n\n\t\t\ttap( () => this._loggerService.debug( `Exported set of crypto keys`, 'MumblerService' ) ),\n\n\t\t\tswitchMap( ( keyPair: CryptoKeyPairString ) => {\n\n\t\t\t\t// Store the private key within crypto config service\n\t\t\t\tthis._cryptoConfigService.privateKey = StaticConversion.ConvertBase64ToBuffer( keyPair.privateKey );\n\n\t\t\t\treturn this.post< OnboardingRequest, OnboardingResponse >( this._mumblerConfigService.application, 'on-boarding/register/client', new OnboardingRequest(\n\t\t\t\t\tmumblerName,\n\t\t\t\t\tkeyPair.publicKey,\n\t\t\t\t\tvalidationToken,\n\t\t\t\t\tlicenseId\n\t\t\t\t) );\n\n\t\t\t} ),\n\n\t\t\ttap( () => this._loggerService.debug( `On-boarding response received`, 'MumblerService' ) ),\n\n\t\t\ttap( ( response: OnboardingResponse ) => {\n\n\t\t\t\t// Store the newly created mumblerId\n\t\t\t\tthis._mumblerConfigService.mumblerId = response.mumblerId;\n\n\t\t\t\t// Store the newly created mumblerName\n\t\t\t\tthis._mumblerConfigService.mumblerName = mumblerName;\n\n\t\t\t\t// Store the according transport authorization key\n\t\t\t\tthis._cryptoConfigService.totpKey = StaticConversion.ConvertBase64ToBuffer( response.totp );\n\n\t\t\t} ),\n\n\t\t\ttap( () => this._loggerService.debug( `On-boarding process completed`, 'MumblerService' ) ),\n\n\t\t\tmap( () => true ),\n\n\t\t\tcatchError( ( e: unknown ) => {\n\n\t\t\t\tthis._loggerService.error( `Unable to perform on boarding. Check network connection`, 'MumblerService' );\n\n\t\t\t\treturn throwError( () => e );\n\n\t\t\t} )\n\t\t);\n\n\t}\n\n\t// noinspection JSUnusedGlobalSymbols\n\tpublic pushBondingInformation( recipient: string, message: string, bonding: BondingParameterModel ): Observable< BaseResponse > {\n\n\t\treturn this.post< PushBondingRequest, BaseResponse >(\n\t\t\tthis._mumblerConfigService.application,\n\t\t\t`bonding/delegation/push/${ this._mumblerConfigService.mumblerId }`,\n\t\t\tnew PushBondingRequest(\n\t\t\t\tmessage,\n\t\t\t\tnew BondingRequestModel(\n\t\t\t\t\tStaticConversion.ConvertBufferToString( bonding.token ),\n\t\t\t\t\tStaticConversion.ConvertBufferToBase64( bonding.totp ),\n\t\t\t\t\trecipient\n\t\t\t\t)\n\t\t\t)\n\t\t).pipe(\n\n            \ttap( ( result: BaseResponse ) => this._loggerService.debug( `Push bonding information with success \"${ result.success }\"`, 'MumblerService' ) )\n\n\t\t);\n\n\t}\n\n\t// noinspection JSUnusedGlobalSymbols\n\tpublic pushDelegationInformation( recipient: string, message: string ): Observable< BaseResponse > {\n\n\t\treturn this.post< PushDelegationRequest, BaseResponse >(\n\t\t\tthis._mumblerConfigService.application,\n\t\t\t`delegation/push/${ this._mumblerConfigService.mumblerId }`,\n\t\t\tnew PushDelegationRequest( message, recipient )\n\t\t).pipe(\n\n\t\t\ttap( ( result: BaseResponse ) => this._loggerService.debug( `Push delegation information with success \"${ result.success }\"`, 'MumblerService' ) )\n\n\t\t);\n\n\t}\n\n\t// noinspection JSUnusedGlobalSymbols\n\tpublic registerPushNotification( appBundleId: string, token: string ): Observable< boolean > {\n\n\t\treturn this.post< RegisterPushNotificationRequest, BaseResponse >( this._mumblerConfigService.application, `mumbler/${ this._mumblerConfigService.mumblerId }/registerPushNotification`, new RegisterPushNotificationRequest( appBundleId, token ) ).pipe(\n\n\t\t\ttap( ( response: BaseResponse ) => this._loggerService.debug( `Registered push notification with success \"${ response.success }\"`, 'MumblerService' ) ),\n\n\t\t\tmap( ( response: BaseResponse ) => response.success )\n\n\t\t);\n\n\t}\n\n\t// noinspection JSUnusedGlobalSymbols\n\tpublic removeMumbler(): Observable< boolean > {\n\n\t\tif ( !! this._mumblerConfigService.mumblerId && this._mumblerConfigService.mumblerId.length > 0 ){\n\n\t\t\treturn this.post< BaseRequest, BaseResponse >( this._mumblerConfigService.application, `mumbler/${ this._mumblerConfigService.mumblerId }/removeMumbler`, new BaseRequest() ).pipe(\n\n\t\t\t\ttap( ( response: BaseResponse ) => {\n\n\t\t\t\t\tif ( !! response.success ) {\n\n\t\t\t\t\t\tthis._mumblerModuleConfigService.reset();\n\n\t\t\t\t\t}\n\n\t\t\t\t} ),\n\n\t\t\t\ttap( ( response: BaseResponse ) => this._loggerService.verbose( `Removed mumbler ${ this._mumblerConfigService.mumblerId } (\"${ this._mumblerConfigService.mumblerName }\") with success \"${ response.success }\"`, 'MumblerService' ) ),\n\n\t\t\t\tmap( ( response: BaseResponse ) => response.success )\n\n\t\t\t);\n\n\t\t}\n\n\t\treturn throwError( () => `No mumbler configuration found. OnBoarded yet?` );\n\n\t}\n\n\t// noinspection JSUnusedGlobalSymbols\n\tpublic searchMumblerName( name: string ): Observable< Array< FindMumblerNameModel > > {\n\n\t\treturn this.post< FindMumblerNameRequest, FindMumblerNameResponse >( this._mumblerConfigService.application, `mumbler/${ this._mumblerConfigService.mumblerId }/findMumblerName`, new FindMumblerNameRequest( name ) ).pipe(\n\n\t\t\ttap( ( response: FindMumblerNameResponse ) => this._loggerService.debug( `Searched for mumbler name with success \"${ response.success }\"`, 'MumblerService' ) ),\n\n\t\t\ttap( ( response: FindMumblerNameResponse ) => SerializedEncryptedPayload.ConvertToEncryptedPayload( response.findings ) ),\n\n\t\t\tswitchMap( ( response: FindMumblerNameResponse ) => this._cryptoService.decryptBuffer( SerializedEncryptedPayload.ConvertToEncryptedPayload( response.findings ) ) ),\n\n\t\t\tmap( ( decryptedBuffer: Uint8Array ) => StaticConversion.ConvertBufferToString( decryptedBuffer ) ),\n\n\t\t\tmap( ( decrypted: string ) => JSON.parse( decrypted ) as Array< FindMumblerNameModel > )\n\n\t\t);\n\n\t}\n\n\t// noinspection JSUnusedGlobalSymbols\n\tpublic sendMumbleViaPost( mumble: Mumble ): Observable< DelegationResponse > {\n\n\t\treturn this.post< DelegationRequest, DelegationResponse >( this._mumblerConfigService.application, 'delegation', new DelegationRequest( mumble ) );\n\n\t}\n\n\tprivate get< Res extends BaseResponse >( application: string, path: string ): Observable< Res > {\n\n\t\treturn new Observable< Res >( ( subscriber: Subscriber< Res > ) => {\n\n\t\t\tthis._loggerService.debug( `Started \"get\" operation against \"${ path }\"`, 'MumblerService' );\n\n\t\t\tforkJoin( [\n\t\t\t\tthis._cryptoService.computeTotp(),\n\t\t\t\tthis._cryptoService.hashValue( application, 'SHA-256' )\n\t\t\t] ).pipe(\n\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/naming-convention\n\t\t\t\tmap( ( results: [ string, string ] ) => ( { Authorization: results[ 0 ], Application: results[ 1 ], RequestTime: `${ new Date().getTime() }` } as HeaderFields ) ),\n\n\t\t\t\tswitchMap( ( headerFields: HeaderFields ) => this._httpClient.get< Res >(\n\n\t\t\t\t\t`${ this._mumblerConfigService.mumblerApiUrl }${ path }`,\n\t\t\t\t\t{\n\t\t\t\t\t\theaders: new HttpHeaders( headerFields ),\n\t\t\t\t\t\tresponseType: 'json',\n\t\t\t\t\t\treportProgress: true,\n\t\t\t\t\t\tobserve: 'events'\n\t\t\t\t\t}\n\n\t\t\t\t) ),\n\n\t\t\t\tretry( { delay: 500, count: 5, resetOnSuccess: false } )\n\n\t\t\t).subscribe( {\n\t\t\t\tnext: ( event: HttpEvent< Res > ) => {\n\n\t\t\t\t\tthis._loggerService.debug( `Received event type \"${ event.type }\" during GET operation`, 'MumblerService' );\n\n\t\t\t\t\thandleResponse( event, subscriber );\n\n\t\t\t\t},\n\t\t\t\terror: ( error: Error ) => subscriber.error( error ),\n\t\t\t\tcomplete: () => subscriber.complete()\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\tprivate post< Req extends BaseRequest, Res extends BaseResponse >( application: string, path: string, payload: Req ): Observable< Res > {\n\n\t    return new Observable< Res >( ( subscriber: Subscriber< Res > ) => {\n\n\t\t\tthis._loggerService.debug( `Started \"post\" operation against \"${ path }\"`, 'MumblerService' );\n\n\t\t\tforkJoin( [\n\t\t\t\tthis._cryptoService.computeTotp(),\n\t\t\t\tthis._cryptoService.hashValue( application, 'SHA-256' )\n\t\t\t] ).pipe(\n\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/naming-convention\n\t\t\t\tmap( ( results: [ string, string ] ) => ( { Authorization: results[ 0 ], Application: results[ 1 ], RequestTime: `${ new Date().getTime() }` } as HeaderFields ) ),\n\n\t\t\t\tswitchMap( ( headerFields: HeaderFields ) => this._httpClient.post< Res >(\n\n\t\t\t\t\t`${ this._mumblerConfigService.mumblerApiUrl }${ path }`,\n\t\t\t\t\tpayload,\n\t\t\t\t\t{\n\t\t\t\t\t\theaders: new HttpHeaders( headerFields ),\n\t\t\t\t\t\tresponseType: 'json',\n\t\t\t\t\t\treportProgress: true,\n\t\t\t\t\t\tobserve: 'events'\n\t\t\t\t\t}\n\t\t\t\t) ),\n\n\t\t\t\tretry( { delay: 500, count: 5, resetOnSuccess: false } )\n\n\t\t\t).subscribe( {\n\t\t\t\tnext: ( event: HttpEvent< Res > ) => {\n\n\t\t\t\t\tthis._loggerService.debug( `Received event type \"${ event.type }\" during POST operation`, 'MumblerService' );\n\n\t\t\t\t\thandleResponse( event, subscriber );\n\n\t\t\t\t},\n\t\t\t\terror: ( error: Error ) => subscriber.error( error ),\n\t\t\t\tcomplete: () => subscriber.complete()\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2020 **********\n************* All rights reserved **************\n************************************************/\nimport { Injectable } from '@angular/core';\n\nfunction windowRef(): Window {\n\n    return window;\n\n}\n\n@Injectable()\nexport class WindowService {\n\n    public get nativeWindow(): Window {\n\n        return windowRef();\n\n    }\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\nimport { Injectable, isDevMode }                                                               from '@angular/core';\nimport { catchError, EMPTY, forkJoin, map, Observable, of, retry, switchMap, tap, throwError } from 'rxjs';\nimport { LoggerService }                                                                       from '../common/logger.service';\nimport { WindowService }                                                                       from '../common/window.service';\nimport { MumblerModuleConfigService }                                                          from '../config/module-config.service';\nimport { MumblerConfigService }                                                                from '../config/mumbler-config.service';\nimport { CryptoService }                                                                       from '../crypto/crypto.service';\nimport { MumblerService }                                                                      from '../mumbler/mumbler.service';\nimport { DelegationResponse }                                                                  from '../mumbler/response/delegation.response';\nimport { DelegationSocket }                                                                    from './socket/delegation-socket.class';\nimport { Mumble }                                                                              from './socket/delegation.mumble.class';\n\n@Injectable( {\n\tprovidedIn: 'root'\n} )\nexport class DelegationService {\n\n\tprivate readonly _sockets: Array< DelegationSocket > = new Array< DelegationSocket >();\n\n\tpublic constructor(\n\t\tprivate readonly _cryptoService: CryptoService,\n\t\tprivate readonly _loggerService: LoggerService,\n\t    private readonly _moduleConfigService: MumblerModuleConfigService,\n\t\tprivate readonly _mumblerConfigService: MumblerConfigService,\n\t\tprivate readonly _mumblerService: MumblerService,\n\t\tprivate readonly _windowService: WindowService\n\t) {\n\n\t\tthis._windowService.nativeWindow.addEventListener( 'offline', ( /*event: Event*/ ) => {\n\n\t\t\tthis.closeAllSockets().subscribe( {\n\t\t\t\tnext: ( result: boolean ) => this._loggerService.verbose( `Offline mode detected. All sockets closed with result \"${ result }\"`, 'DelegationService' ),\n\t\t\t\terror: ( err: unknown ) => this._loggerService.warn( `Offline mode detected. An error occurred during socket closure: ${ JSON.stringify( err, Object.getOwnPropertyNames( err ) ) }`, 'DelegationService' ),\n\t\t\t\tcomplete: () => this._loggerService.debug( `Offline mode detected. Closing all sockets completed` )\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n\tpublic closeAllSockets(): Observable< boolean > {\n\n\t\tif ( this._sockets.length > 0 ) {\n\n\t\t\treturn forkJoin( this._sockets.map( ( socket: DelegationSocket ) => this.closeSocket( socket ) ) ).pipe(\n\t\t\t\tmap( ( closedSockets: Array<boolean> ) => closedSockets.reduce( ( previousValue: boolean, currentValue: boolean ) => previousValue === currentValue && !!! currentValue ) ),\n\n\t\t\t\ttap( ( result: boolean ) => {\n\n\t\t\t\t\t// All sockets should be closed (and therefore removed from the list)\n\t\t\t\t\tif ( !!! result || this._sockets.length > 0 ) {\n\n\t\t\t\t\t\tthis._loggerService.warn( 'Not all sockets could be closed cleanly. You might consider restarting your application. Probably an operating system issue.', 'DelegationService' );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._loggerService.debug( 'All sockets closed.', 'DelegationService' );\n\n\t\t\t\t} )\n\t\t\t);\n\n\t\t}\n\n\t\tthis._loggerService.debug( `No sockets to close available`, 'DelegationService' );\n\n\t\treturn of( true );\n\n\t}\n\n\tpublic closeSocket( socket: DelegationSocket ): Observable< boolean > {\n\n\t\tif ( !! socket ) {\n\n\t\t\tif ( isDevMode() ) {\n\n\t\t\t\tthis._loggerService.debug( `Closing socket for \"${ socket.mumblerId }\"` );\n\n\t\t\t}\n\n\t\t\tif ( socket.state !== WebSocket.CLOSED ) {\n\n\t\t\t\t// Close the socket\n\t\t\t\tsocket.closeChannel( 1000, 'Closed by client' );\n\n\t\t\t}\n\n\t\t\t// Remove the socket\n\t\t\tthis._sockets.splice( this._sockets.indexOf( socket ), 1 );\n\n\t\t\tif ( isDevMode() ) {\n\n\t\t\t\tthis._loggerService.debug( `Socket closed for \"${ !! socket ? socket.mumblerId : '<none>' }\"` );\n\n\t\t\t}\n\n\t\t\t// Signal all good (nothing abnormal)\n\t\t\treturn of( true );\n\n\t\t}\n\n\t\tif ( isDevMode() ) {\n\n\t\t\tthis._loggerService.debug( `Should close socket, but none found. All closed already.` );\n\n\t\t}\n\n\t\treturn of( false );\n\n\t}\n\n\tpublic openSocket( socketId: string = this._mumblerConfigService.mumblerId ): Observable< Mumble > {\n\n\t\tthis._loggerService.verbose( `Starting to open socket.`, 'DelegationService' );\n\n\t\t// First try to close the socket... maybe still open (at least perform some internal cleanup)\n\t\treturn this.closeAllSockets().pipe(\n\n\t\t\tswitchMap( () => this._cryptoService.computeTotp() ),\n\n\t\t\tswitchMap( ( totp: string ) => {\n\n\t\t\t\tconst channel: DelegationSocket = new DelegationSocket( socketId, totp, `${ this._moduleConfigService.socketUrl }` );\n\n\t\t\t\tthis._loggerService.verbose( `Successfully opened socket to mumbler server at \"${ this._moduleConfigService.socketUrl }\"`, 'DelegationService' );\n\n\t\t\t\tthis._sockets.push( channel );\n\n\t\t\t\treturn channel.pipe(\n\n\t\t\t\t\tcatchError( ( err: unknown ) => {\n\n\t\t\t\t\t\t// Received error => close the socket\n\t\t\t\t\t\treturn this.closeAllSockets().pipe(\n\t\t\t\t\t\t\tswitchMap( () => throwError( () => err ) )\n\t\t\t\t\t\t);\n\n\t\t\t\t\t} )\n\n\t\t\t\t);\n\n\t\t\t} ),\n\n\t\t\ttap( () => this._loggerService.debug( `Received mumble`, 'DelegationService' ) ),\n\n\t\t\tcatchError( ( err: unknown ) => {\n\n\t\t\t\tif ( err instanceof CloseEvent ) {\n\n\t\t\t\t\tthis._loggerService.warn( `Received close reason \"${ err.reason } (${ err.code })\" from socket`, 'DelegationService' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._loggerService.warn( `Received error from socket: \"${ JSON.stringify( err, Object.getOwnPropertyNames( err ) ) }\"`, 'DelegationService' );\n\n\t\t\t\t}\n\n\t\t\t\t// Finalize the pipeline\n\t\t\t\treturn EMPTY;\n\n\t\t\t} )\n\n\t\t);\n\n\t}\n\n\tpublic sendMumble( mumble: Mumble ): Observable< DelegationResponse > {\n\n\t\tif ( !! mumble.transmitPayload.payload ) {\n\n\t\t\t// const delegationSocket: DelegationSocket | undefined = this._sockets.find( ( findSocket: DelegationSocket ) => findSocket.mumblerId === this._mumblerConfigService.mumblerId );\n\t\t\t//\n\t\t\t// if ( !! delegationSocket ) {\n\t\t\t//\n\t\t\t//     return this._cryptoService.computeTotp().pipe(\n\t\t\t//\n\t\t\t//         switchMap( ( authorization: string ) => delegationSocket.sendMessage( authorization, mumble ) )\n\t\t\t//\n\t\t\t//     );\n\t\t\t//\n\t\t\t// }\n\t\t\t//\n\t\t\t// // Fallback (no socket available): Send via HTTP-POST\n\t\t\t// return this._mumblerService.sendMumbleViaPost( mumble );\n\n\t\t\t// Since v0.2.20: Always send mumble via post (since a response is required for the \"delayed\" feature)\n\t\t\treturn this._mumblerService.sendMumbleViaPost( mumble ).pipe(\n\t\t\t\t// Since v0.4.6: Retry 3 times with delay of 1 seconds in between.\n\t\t\t\t// => should \"prevent\" a totp collision\n\t\t\t\tretry( { delay: 1000, count: 3 } )\n\t\t\t);\n\n\t\t}\n\n\t\treturn throwError( () => 'Unable to init delegation, payload not encrypted' );\n\n\t}\n\n\tpublic statusSocket( mumblerId: string ): number {\n\n\t\tconst delegationSocket: DelegationSocket = this._sockets.find( ( socket: DelegationSocket ) => socket.mumblerId === mumblerId );\n\n\t\tif ( !! delegationSocket ) {\n\n\t\t\treturn delegationSocket.state;\n\n\t\t}\n\n\t\treturn -1;\n\n\t}\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\nimport { Injectable }                                                           from '@angular/core';\nimport { forkJoin, from, mergeMap, Observable, of, switchMap, tap, throwError } from 'rxjs';\nimport { AppsMessage }                                                          from '../../../apps/apps-message.abstract';\nimport { LoggerService }                                                        from '../common/logger.service';\nimport { MumblerConfigService }                                                 from '../config/mumbler-config.service';\nimport { CryptoService, EncryptedPayload, SerializedEncryptedPayload }          from '../crypto/crypto.service';\nimport { StaticConversion }                                                     from '../crypto/static-conversion.class';\nimport { DelegationService }                                                    from '../delegation/delegation.service';\nimport { DelegateToInfo }                                                       from '../delegation/delegation/delegate-to-info.class';\nimport { Mumble }                                                               from '../delegation/socket/delegation.mumble.class';\nimport { MumblerService }                                                       from '../mumbler/mumbler.service';\nimport { DelegationResponse }                                                   from '../mumbler/response/delegation.response';\nimport { MumblerId }                                                            from '../types/mumbler-id.type';\n\n@Injectable( {\n\tprovidedIn: 'root'\n} )\nexport class MumbleService {\n\n\tpublic constructor(\n\t\tprivate readonly _cryptoService: CryptoService,\n\t\tprivate readonly _delegationService: DelegationService,\n\t\tprivate readonly _mumblerService: MumblerService,\n\t\tprivate readonly _mumblerConfigService: MumblerConfigService,\n\t\tprivate readonly _loggerService: LoggerService\n\t) {}\n\n\t// noinspection JSUnusedGlobalSymbols\n\tpublic connectionState(): Observable< number > {\n\n\t\treturn of( this._delegationService.statusSocket( this._mumblerConfigService.mumblerId ) ).pipe(\n\n\t\t\ttap( ( result: number ) => this._loggerService.debug( `Status of socket is \"${ result }\"`, 'MessagesService' ) )\n\n\t\t);\n\n\t}\n\n\t// noinspection JSUnusedGlobalSymbols\n\tpublic createNewGroupMumble( delegateTo: string, message: AppsMessage, files: Array< Uint8Array > = null, useLegacyEncoding: boolean = false ): Observable< Array< Mumble > > {\n\n\t\tthis._loggerService.debug( `Creating new group mumble to \"${ delegateTo }\"`, 'MessagesService' );\n\n\t\treturn this.getDelegateToInfo( delegateTo ).pipe(\n\n\t\t\tswitchMap( ( delegate: DelegateToInfo ) => forkJoin( [ delegate.mumblerId, ...delegate.associated ].map( ( mumblerId: string ) => this.createNewMumble( mumblerId, message, files, useLegacyEncoding ) ) ) ),\n\n\t\t\ttap( ( mumbles: Array< Mumble > ) => this._loggerService.verbose( `Mumble group to \"${ mumbles?.length }\" is ready for delegation`, 'MessagesService' ) )\n\n\t\t);\n\n\t}\n\n\tpublic createNewMumble( delegateTo: string, message: AppsMessage, files: Array< Uint8Array > = null, useLegacyEncoding: boolean = false ): Observable< Mumble > {\n\n\t\tthis._loggerService.debug( `Creating new mumble to \"${ delegateTo }\"`, 'MessagesService' );\n\n\t\tconst mumble: Mumble = new Mumble( this._mumblerConfigService.mumblerId, delegateTo );\n\n\t\treturn this.getDelegateToInfo( delegateTo ).pipe(\n\n\t\t\ttap( ( delegateToInfo: DelegateToInfo ) => {\n\n\t\t\t\t// Seems more convenient to add the delegation info to the mumble\n\t\t\t\tmumble.delegateToInfo = delegateToInfo;\n\n\t\t\t} ),\n\n\t\t\ttap( () => this._loggerService.debug( `Successfully created mumble to \"${ delegateTo }\"`, 'MessagesService' ) ),\n\n\t\t\tswitchMap( () => this.prepareMessage( mumble, message, files, useLegacyEncoding ) ),\n\n\t\t\ttap( () => this._loggerService.debug( `Successfully mumbled payload content (+files) of mumble to \"${ delegateTo }\"`, 'MessagesService' ) ),\n\n\t\t\ttap( () => this._loggerService.verbose( `Mumble to \"${ delegateTo }\" is ready for delegation`, 'MessagesService' ) ),\n\n\t\t);\n\n\t}\n\n\t// noinspection JSUnusedGlobalSymbols\n\tpublic decryptMumbleContent( mumble: Mumble ): Observable< string > {\n\n\t\tif ( !!! mumble ) {\n\n\t\t\treturn throwError( () => 'No mumble message to decrypt' );\n\n\t\t}\n\n\t\tthis._loggerService.debug( `Starting to decrypt mumble content`, 'MessagesService' );\n\n\t\treturn of( mumble.transmitPayload.payload ).pipe(\n\n\t\t    switchMap( ( content: SerializedEncryptedPayload ) => this._cryptoService.decryptBuffer( SerializedEncryptedPayload.ConvertToEncryptedPayload( content ) ) ),\n\n\t\t\tswitchMap( ( payload: ArrayBuffer ) => {\n\n\t\t\t\t// v0.3.0\n\t\t\t\t// Check legacy encoding is required\n\t\t\t\tif ( !! mumble.transmitPayload.useLegacyEncoding ) {\n\n\t\t\t\t\treturn of( StaticConversion.ConvertBufferToString( payload ) );\n\n\t\t\t\t}\n\n\t\t\t\t// Early-versions did not use encodeUriComponent on payload\n\t\t\t\treturn of( decodeURIComponent( StaticConversion.ConvertBufferToString( payload ) ) );\n\n\t\t\t} )\n\n\t\t);\n\n\t}\n\n\t// noinspection JSUnusedGlobalSymbols\n\tpublic decryptMumbleFile( mumble: Mumble, index: number ): Observable< Blob > {\n\n\t\tif ( !!! mumble ) {\n\n\t\t\treturn throwError( () => 'No mumble message to decrypt' );\n\n\t\t}\n\n\t\tif ( index < 0 || index >= mumble.transmitPayload.files.length ) {\n\n\t\t\treturn throwError( () => `File[ ${ index } ] does not exist` );\n\n\t\t}\n\n\t\tthis._loggerService.debug( `Starting to decrypt mumble content`, 'MessagesService' );\n\n\t\treturn of( mumble.transmitPayload.files[ index ] ).pipe(\n\n\t\t\tswitchMap( ( file: SerializedEncryptedPayload ) => this._cryptoService.decryptBuffer( SerializedEncryptedPayload.ConvertToEncryptedPayload( file ) ) ),\n\n\t\t\tswitchMap( ( payload: ArrayBuffer ) => {\n\n\t\t\t\ttry {\n\n\t\t\t\t\tconst blob: Blob = new Blob( [ payload ] );\n\n\t\t\t\t\tthis._loggerService.debug( `Successfully create blob for file[ ${ index } ] object`, 'MessagesService' );\n\n\t\t\t\t\treturn of( blob );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tthis._loggerService.warn( `Unable to create blob from file[ ${ index } ]`, 'MessagesService' );\n\n\t\t\t\t}\n\n\t\t\t} )\n\n\t\t);\n\n\t}\n\n\tpublic getDelegateToInfo( delegateTo: MumblerId ): Observable< DelegateToInfo > {\n\n\t\tthis._loggerService.debug( `Starting to query delegateTo info`, 'MessagesService' );\n\n\t\treturn this._mumblerService.delegateToInfo( delegateTo ).pipe(\n\n\t\t\ttap( () => this._loggerService.debug( `Successfully queried delegateTo info`, 'MessagesService' ) )\n\n\t\t);\n\n\t}\n\n\t// noinspection JSUnusedGlobalSymbols\n\tpublic listen(): Observable< Mumble > {\n\n\t\treturn this._delegationService.openSocket().pipe(\n\n\t\t\ttap( () => this._loggerService.debug( `Received mumble message`, 'MessagesService' ) )\n\n\t\t);\n\n\t}\n\n\t// noinspection JSUnusedGlobalSymbols\n\tpublic sendGroupMumble( mumbles: Array< Mumble > ): Observable< DelegationResponse > {\n\n\t\treturn from( mumbles ).pipe(\n\n\t\t\tmergeMap( ( mumble: Mumble ) => this.sendMumble( mumble ), 2 )\n\n\t\t);\n\n\t}\n\n\t// noinspection JSUnusedGlobalSymbols\n\tpublic sendMumble( mumble: Mumble ): Observable< DelegationResponse > {\n\n\t    if (\n\t        !!! mumble ||\n            !!! mumble.transmitPayload ||\n            !!! mumble.transmitPayload.delegateTo ||\n            !!! mumble.transmitPayload.payload\n\t\t) {\n\n\t        return throwError( () => 'mumble not valid' );\n\n\t\t}\n\n\t    return this._delegationService.sendMumble( mumble );\n\n\t}\n\n\t// noinspection JSUnusedGlobalSymbols\n\tpublic stop(): Observable< boolean > {\n\n\t    return this._delegationService.closeAllSockets();\n\n\t}\n\n\tprivate prepareMessage( mumble: Mumble, message: AppsMessage, files: Array< Uint8Array > = null, useLegacyEncoding: boolean = false ): Observable< Mumble > {\n\n\t    return this._cryptoService.importPublicKey( mumble.delegateToInfo.public ).pipe(\n\n\t\t\tswitchMap( ( cryptoKey: CryptoKey ) => forkJoin( [\n\n\t\t\t\t// v0.3.0\n\t\t\t\t// Check if a legacy encoding is required\n\t\t\t\t!!useLegacyEncoding ?\n\t\t\t\t\tthis._cryptoService.encryptPayload( cryptoKey, StaticConversion.ConvertStringToBuffer( JSON.stringify( message ) ) ) :\n\t\t\t\t\tthis._cryptoService.encryptPayload( cryptoKey, StaticConversion.ConvertStringToBuffer( encodeURIComponent( JSON.stringify( message ) ) ) )\n\t\t\t\t,\n\n\t\t\t\t!! files && files.length > 0 ? of( files ).pipe(\n\n\t\t\t\t\tswitchMap( ( files: Array< Uint8Array > ) => forkJoin( files.map( ( file: Uint8Array ) => this._cryptoService.encryptPayload( cryptoKey, file ) ) ) )\n\n\t\t\t\t) : of( [] )\n\n\t\t\t] ) ),\n\n\t\t\tswitchMap( ( encryptedPayload: [ EncryptedPayload, Array< EncryptedPayload > ] ) => {\n\n\t\t\t\tmumble.transmitPayload.payload = SerializedEncryptedPayload.ConvertToSerializedEncryptedPayload( encryptedPayload[ 0 ] );\n\n\t\t\t\tif ( encryptedPayload[ 1 ].length > 0  ) {\n\n\t\t\t\t\tmumble.transmitPayload.files = encryptedPayload[ 1 ].map(\n\t\t\t\t\t\t( encryptedPayload: EncryptedPayload ) => SerializedEncryptedPayload.ConvertToSerializedEncryptedPayload( encryptedPayload )\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t\treturn of( mumble );\n\n\t\t\t} )\n\n\t\t);\n\n\t}\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\nexport class FindMumblerNameModel {\n\n\tpublic hasNotifications: boolean;\n\tpublic mumblerId: string;\n\tpublic name: string;\n\n\tpublic constructor( mumblerId: string, name: string, hasNotifications: boolean ) {\n\n\t\tthis.mumblerId = mumblerId;\n\t\tthis.name = name;\n\t\tthis.hasNotifications = hasNotifications;\n\n\t}\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\nexport class BaseResponse {\n\n    public code?: number;\n    public details?: string;\n    public success: boolean;\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\nimport { BaseResponse } from '../../common/response/base.response';\n\nexport class DelegationResponse extends BaseResponse {\n\n    public delayed: boolean;\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\nimport { BaseRequest } from '../../common/request/base.request';\n\nexport class DirectValidationRequest extends BaseRequest {\n\n\tpublic mumblerName: string;\n\n\tpublic constructor( mumblerName: string ) {\n\n\t\tsuper();\n\n\t\tthis.mumblerName = mumblerName;\n\n\t}\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\nimport { BaseRequest } from '../../common/request/base.request';\n\nexport class EmailValidationRequest extends BaseRequest {\n\n\tpublic body: string;\n\tpublic mumblerName: string;\n\tpublic subject: string;\n\n\tpublic constructor( mumblerName: string, subject: string, body: string ) {\n\n\t\tsuper();\n\n\t\tthis.mumblerName = mumblerName;\n\t\tthis.subject = subject;\n\t\tthis.body = body;\n\n\t}\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\nimport { HttpClient, HttpEvent, HttpHeaders }          from '@angular/common/http';\nimport { Injectable }                                  from '@angular/core';\nimport { map, Observable, Subscriber, switchMap, tap } from 'rxjs';\nimport { ValidationToken }                             from '../common/common.types';\nimport { LoggerService }                               from '../common/logger.service';\nimport { BaseRequest }                                 from '../common/request/base.request';\nimport { handleResponse }                              from '../common/response.helper';\nimport { BaseResponse }                                from '../common/response/base.response';\nimport { MumblerModuleConfigService }                  from '../config/module-config.service';\nimport { MumblerConfigService }                        from '../config/mumbler-config.service';\nimport { CryptoService }                               from '../crypto/crypto.service';\nimport { DirectValidationRequest }                     from './request/direct-validation.request';\nimport { EmailValidationRequest }                      from './request/email-validation.request';\nimport { DirectValidationResponse }                    from './response/direct-validation.response';\n\n@Injectable( {\n\tprovidedIn: 'root'\n} )\nexport class ValidationService {\n\n\tpublic constructor(\n\t\tprivate readonly _cryptoService: CryptoService,\n\t\tprivate readonly _mumblerConfigService: MumblerConfigService,\n\t\tprivate readonly _mumblerModuleConfigService: MumblerModuleConfigService,\n\t\tprivate readonly _loggerService: LoggerService,\n\t\tprivate readonly _httpClient: HttpClient\n\t) { }\n\n\t// noinspection JSUnusedGlobalSymbols\n\tpublic requestDirectValidation( application: string, mumblerName: string ): Observable< ValidationToken > {\n\n\t\tthis._loggerService.debug( `Starting to request validation token via direct method for application \"${ application }\" and mumbler name \"${ mumblerName }\"`, 'ValidationService' );\n\n\t\treturn this.post< DirectValidationRequest, DirectValidationResponse >(\n\t\t\tapplication,\n\t\t\t`validation/direct`,\n\t\t\tnew DirectValidationRequest( mumblerName )\n\t\t).pipe(\n\n\t\t\ttap( ( result: DirectValidationResponse ) => this._loggerService.debug( `Request direct validation token for application \"${ application }\" and mumbler name \"${ mumblerName }\" completed with result \"${ result?.success }\"`, 'ValidationService' ) ),\n\n\t\t\tmap( ( result: DirectValidationResponse ) => result?.token )\n\n\t\t);\n\n\t}\n\n\t// noinspection JSUnusedGlobalSymbols\n\tpublic requestEmailValidation( application: string, mumblerName: string, subject: string, body: string ): Observable< boolean > {\n\n\t\tthis._loggerService.debug( `Starting to request validation token via e-mail method for application \"${ application }\" and mumbler name \"${ mumblerName }\"`, 'ValidationService' );\n\n\t\treturn this.post< EmailValidationRequest, BaseResponse >(\n\t\t\tapplication,\n\t\t\t`validation/e-mail`,\n\t\t\tnew EmailValidationRequest( mumblerName, subject, body )\n\t\t).pipe(\n\n\t\t\tmap( ( response: BaseResponse ) => response?.success ),\n\n\t\t\ttap( ( result: boolean ) => this._loggerService.debug( `Request E-Mail validation token for application \"${ application }\" and mumbler name \"${ mumblerName }\" completed with result \"${ result }\"`, 'ValidationService' ) )\n\n\t\t);\n\n\t}\n\n\tprivate post< Req extends BaseRequest, Res extends BaseResponse >( application: string, path: string, payload: Req ): Observable< Res > {\n\n\t\treturn new Observable<Res>( ( subscriber: Subscriber<Res> ) => {\n\n\t\t\tthis._loggerService.debug( `Started \"post\" operation against \"${ path }\"`, 'ValidationService' );\n\n\t\t\tthis._cryptoService.hashValue( application, 'SHA-256' ).pipe(\n\n\t\t\t\tswitchMap( ( appHash: string ) => this._httpClient.post<Res>(\n\t\t\t\t\t`${ this._mumblerConfigService.mumblerApiUrl }${ path }`,\n\t\t\t\t\tpayload,\n\t\t\t\t\t{\n\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/naming-convention\n\t\t\t\t\t\theaders: new HttpHeaders( { Application: appHash } ),\n\t\t\t\t\t\tresponseType: 'json',\n\t\t\t\t\t\treportProgress: true,\n\t\t\t\t\t\tobserve: 'events'\n\t\t\t\t\t}\n\t\t\t\t) )\n\n\t\t\t).subscribe( {\n\t\t\t\tnext: ( event: HttpEvent<Res> ) => {\n\n\t\t\t\t\tthis._loggerService.debug( `Received event type \"${ event.type }\" during POST operation`, 'ValidationService' );\n\n\t\t\t\t\thandleResponse( event, subscriber );\n\n\t\t\t\t},\n\t\t\t\terror: ( error: Error ) => subscriber.error( error ),\n\t\t\t\tcomplete: () => subscriber.complete()\n\t\t\t} );\n\n\t\t} );\n\n\t}\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\n\nimport { CommonModule }               from '@angular/common';\nimport { HttpClientModule }           from '@angular/common/http';\nimport { NgModule }                   from '@angular/core';\nimport { LoggerService }              from './services/common/logger.service';\nimport { WindowService }              from './services/common/window.service';\nimport { CryptoConfigService }        from './services/config/crypto-config.service';\nimport { MumblerModuleConfigService } from './services/config/module-config.service';\nimport { MumblerConfigService }       from './services/config/mumbler-config.service';\nimport { CryptoService }              from './services/crypto/crypto.service';\nimport { MumbleService }              from './services/mumble/mumble.service';\nimport { MumblerService }             from './services/mumbler/mumbler.service';\nimport { ValidationService }          from './services/validation/validation.service';\n\n@NgModule( {\n\tdeclarations: [],\n\timports: [\n\t\tCommonModule,\n\t\tHttpClientModule\n\t],\n\tproviders: [\n\t\tLoggerService,\n\t\tMumblerModuleConfigService,\n\t\tMumblerConfigService,\n\t\tCryptoConfigService,\n\t\tCryptoService,\n\t\tMumbleService,\n\t\tMumblerService,\n\t\tValidationService,\n\t\tWindowService\n\t],\n\texports: [\n\t\tHttpClientModule\n\t]\n} )\nexport class MumblerModule {\n\n\tpublic constructor(\n\t\tprivate readonly _loggerService: LoggerService,\n\t\tprivate readonly _moduleConfigService: MumblerModuleConfigService\n\t) {\n\n\t\tthis._loggerService.debug( `Starting \"ngx-mumbler-api\" with parameter:`, 'MumblerModule' );\n\t\tthis._loggerService.debug( `\\tServer url: \"${ this._moduleConfigService.serverUrl }\"`, 'MumblerModule' );\n\t\tthis._loggerService.debug( `\\tSocket url: \"${ this._moduleConfigService.socketUrl }\"`, 'MumblerModule' );\n\t\tthis._loggerService.debug( `\\tDebug mode: \"${ this._moduleConfigService.debugMode ? 'ON' : 'OFF' }\"`, 'MumblerModule' );\n\t\tthis._loggerService.debug( `\\tLog level: \"${ this._loggerService.logLevel }\"`, 'MumblerModule' );\n\n\t}\n\n}\n","/***********************************************\n********* Copyright mumbler gmbh 2022 **********\n************* All rights reserved **************\n************************************************/\n\nexport * from './lib/services/common/logger.service';\nexport * from './apps/apps-message.abstract';\nexport * from './lib/services/crypto/static-conversion.class';\nexport * from './lib/common/parameter.class';\nexport * from './lib/services/common/logger.enum';\nexport * from './lib/services/common/common.types';\nexport * from './lib/services/delegation/socket/delegation.mumble.class';\nexport * from './lib/services/mumble/mumble.service';\nexport * from './lib/services/delegation/socket/delegation.mumble.class';\nexport * from './lib/services/delegation/delegation/delegate-to-info.class';\nexport * from './lib/services/mumbler/model/bonding-parameter.model';\nexport * from './lib/services/mumbler/model/find-mumbler-name.model';\nexport * from './lib/services/mumbler/response/delegation.response';\nexport * from './lib/services/mumbler/mumbler.service';\nexport * from './lib/services/validation/validation.service';\nexport * from './lib/services/types/mumbler-id.type';\nexport * from './lib/services/config/module-config.service';\nexport * from './lib/ngx-mumbler-api.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.LoggerService","i2.CryptoConfigService","i1.CryptoService","i3.MumblerConfigService","i4.MumblerModuleConfigService","i5.LoggerService","i2.LoggerService","i3.MumblerModuleConfigService","i4.MumblerConfigService","i5.MumblerService","i6.WindowService","i2.DelegationService","i3.MumblerService","i2.MumblerConfigService","i4.LoggerService","i5","i2.MumblerModuleConfigService"],"mappings":"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"}