//
// Copyright (c) Microsoft Corporation. All rights reserved.
// 
//
// File generated by WinMDIDL version 8.00.0021
//

import "inspectable.idl";
import "AsyncInfo.idl";
import "EventToken.idl";
import "windowscontracts.idl";
import "Windows.Foundation.idl";

// Forward Declare
namespace Windows
{
    namespace Foundation
    {
        typedef struct DateTime DateTime;

        typedef struct TimeSpan TimeSpan;

        apicontract UniversalApiContract;
    }
}
namespace Windows
{
    namespace Security
    {
        namespace Authentication
        {
            namespace Identity
            {
                namespace Core
                {
                    typedef enum MicrosoftAccountMultiFactorAuthenticationType MicrosoftAccountMultiFactorAuthenticationType;

                    typedef enum MicrosoftAccountMultiFactorServiceResponse MicrosoftAccountMultiFactorServiceResponse;

                    typedef enum MicrosoftAccountMultiFactorSessionApprovalStatus MicrosoftAccountMultiFactorSessionApprovalStatus;

                    typedef enum MicrosoftAccountMultiFactorSessionAuthenticationStatus MicrosoftAccountMultiFactorSessionAuthenticationStatus;

                    interface IMicrosoftAccountMultiFactorAuthenticationManager;

                    interface IMicrosoftAccountMultiFactorAuthenticatorStatics;

                    interface IMicrosoftAccountMultiFactorGetSessionsResult;

                    interface IMicrosoftAccountMultiFactorOneTimeCodedInfo;

                    interface IMicrosoftAccountMultiFactorSessionInfo;

                    interface IMicrosoftAccountMultiFactorUnregisteredAccountsAndSessionInfo;

                    runtimeclass MicrosoftAccountMultiFactorAuthenticationManager;

                    runtimeclass MicrosoftAccountMultiFactorGetSessionsResult;

                    runtimeclass MicrosoftAccountMultiFactorOneTimeCodedInfo;

                    runtimeclass MicrosoftAccountMultiFactorSessionInfo;

                    runtimeclass MicrosoftAccountMultiFactorUnregisteredAccountsAndSessionInfo;
                }
            }
        }
    }
}

// Generic instantiations
namespace Windows
{
    namespace Security
    {
        namespace Authentication
        {
            namespace Identity
            {
                namespace Core
                {
                    declare
                    {
                        interface Windows.Foundation.Collections.IIterable<Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorSessionInfo*>;

                        interface Windows.Foundation.Collections.IIterator<Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorSessionInfo*>;

                        interface Windows.Foundation.Collections.IVectorView<Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorSessionInfo*>;

                        interface Windows.Foundation.IAsyncOperation<Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorGetSessionsResult*>;

                        interface Windows.Foundation.IAsyncOperation<Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorOneTimeCodedInfo*>;

                        interface Windows.Foundation.IAsyncOperation<Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorServiceResponse>;

                        interface Windows.Foundation.IAsyncOperation<Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorUnregisteredAccountsAndSessionInfo*>;
                    }
                }
            }
        }
    }
}

// Type definition
namespace Windows
{
    namespace Security
    {
        namespace Authentication
        {
            namespace Identity
            {
                namespace Core
                {
                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    enum MicrosoftAccountMultiFactorAuthenticationType
                    {
                        User   = 0,
                        Device = 1
                    };

                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    enum MicrosoftAccountMultiFactorServiceResponse
                    {
                        Success                 = 0,
                        Error                   = 1,
                        NoNetworkConnection     = 2,
                        ServiceUnavailable      = 3,
                        TotpSetupDenied         = 4,
                        NgcNotSetup             = 5,
                        SessionAlreadyDenied    = 6,
                        SessionAlreadyApproved  = 7,
                        SessionExpired          = 8,
                        NgcNonceExpired         = 9,
                        InvalidSessionId        = 10,
                        InvalidSessionType      = 11,
                        InvalidOperation        = 12,
                        InvalidStateTransition  = 13,
                        DeviceNotFound          = 14,
                        FlowDisabled            = 15,
                        SessionNotApproved      = 16,
                        OperationCanceledByUser = 17,
                        NgcDisabledByServer     = 18,
                        NgcKeyNotFoundOnServer  = 19,
                        UIRequired              = 20,
                        DeviceIdChanged         = 21
                    };

                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    enum MicrosoftAccountMultiFactorSessionApprovalStatus
                    {
                        Pending  = 0,
                        Approved = 1,
                        Denied   = 2
                    };

                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    enum MicrosoftAccountMultiFactorSessionAuthenticationStatus
                    {
                        Authenticated   = 0,
                        Unauthenticated = 1
                    };

                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    [exclusiveto(Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorAuthenticationManager)]
                    [uuid(0FD340A5-F574-4320-A08E-0A19A82322AA)]
                    interface IMicrosoftAccountMultiFactorAuthenticationManager : IInspectable
                    {
                        HRESULT GetOneTimePassCodeAsync([in] HSTRING userAccountId, [in] UINT32 codeLength, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorOneTimeCodedInfo*>** asyncOperation);
                        HRESULT AddDeviceAsync([in] HSTRING userAccountId, [in] HSTRING authenticationToken, [in] HSTRING wnsChannelId, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorServiceResponse>** asyncOperation);
                        HRESULT RemoveDeviceAsync([in] HSTRING userAccountId, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorServiceResponse>** asyncOperation);
                        HRESULT UpdateWnsChannelAsync([in] HSTRING userAccountId, [in] HSTRING channelUri, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorServiceResponse>** asyncOperation);
                        HRESULT GetSessionsAsync([in] Windows.Foundation.Collections.IIterable<HSTRING>* userAccountIdList, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorGetSessionsResult*>** asyncOperation);
                        HRESULT GetSessionsAndUnregisteredAccountsAsync([in] Windows.Foundation.Collections.IIterable<HSTRING>* userAccountIdList, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorUnregisteredAccountsAndSessionInfo*>** asyncOperation);
                        [overload("ApproveSessionAsync")] HRESULT ApproveSessionUsingAuthSessionInfoAsync([in] Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorSessionAuthenticationStatus sessionAuthentictionStatus, [in] Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorSessionInfo* authenticationSessionInfo, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorServiceResponse>** asyncOperation);
                        [overload("ApproveSessionAsync")] HRESULT ApproveSessionAsync([in] Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorSessionAuthenticationStatus sessionAuthentictionStatus, [in] HSTRING userAccountId, [in] HSTRING sessionId, [in] Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorAuthenticationType sessionAuthenticationType, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorServiceResponse>** asyncOperation);
                        [overload("DenySessionAsync")] HRESULT DenySessionUsingAuthSessionInfoAsync([in] Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorSessionInfo* authenticationSessionInfo, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorServiceResponse>** asyncOperation);
                        [overload("DenySessionAsync")] HRESULT DenySessionAsync([in] HSTRING userAccountId, [in] HSTRING sessionId, [in] Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorAuthenticationType sessionAuthenticationType, [out] [retval] Windows.Foundation.IAsyncOperation<Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorServiceResponse>** asyncOperation);
                    }

                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    [exclusiveto(Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorAuthenticationManager)]
                    [uuid(D964C2E6-F446-4C71-8B79-6EA4024AA9B8)]
                    interface IMicrosoftAccountMultiFactorAuthenticatorStatics : IInspectable
                    {
                        [propget] HRESULT Current([out] [retval] Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorAuthenticationManager** value);
                    }

                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    [exclusiveto(Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorGetSessionsResult)]
                    [uuid(4E23A9A0-E9FA-497A-95DE-6D5747BF974C)]
                    interface IMicrosoftAccountMultiFactorGetSessionsResult : IInspectable
                    {
                        [propget] HRESULT Sessions([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorSessionInfo*>** value);
                        [propget] HRESULT ServiceResponse([out] [retval] Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorServiceResponse* value);
                    }

                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    [exclusiveto(Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorOneTimeCodedInfo)]
                    [uuid(82BA264B-D87C-4668-A976-40CFAE547D08)]
                    interface IMicrosoftAccountMultiFactorOneTimeCodedInfo : IInspectable
                    {
                        [propget] HRESULT Code([out] [retval] HSTRING* value);
                        [propget] HRESULT TimeInterval([out] [retval] Windows.Foundation.TimeSpan* value);
                        [propget] HRESULT TimeToLive([out] [retval] Windows.Foundation.TimeSpan* value);
                        [propget] HRESULT ServiceResponse([out] [retval] Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorServiceResponse* value);
                    }

                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    [exclusiveto(Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorSessionInfo)]
                    [uuid(5F7EABB4-A278-4635-B765-B494EB260AF4)]
                    interface IMicrosoftAccountMultiFactorSessionInfo : IInspectable
                    {
                        [propget] HRESULT UserAccountId([out] [retval] HSTRING* value);
                        [propget] HRESULT SessionId([out] [retval] HSTRING* value);
                        [propget] HRESULT DisplaySessionId([out] [retval] HSTRING* value);
                        [propget] HRESULT ApprovalStatus([out] [retval] Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorSessionApprovalStatus* value);
                        [propget] HRESULT AuthenticationType([out] [retval] Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorAuthenticationType* value);
                        [propget] HRESULT RequestTime([out] [retval] Windows.Foundation.DateTime* value);
                        [propget] HRESULT ExpirationTime([out] [retval] Windows.Foundation.DateTime* value);
                    }

                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    [exclusiveto(Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorUnregisteredAccountsAndSessionInfo)]
                    [uuid(AA7EC5FB-DA3F-4088-A20D-5618AFADB2E5)]
                    interface IMicrosoftAccountMultiFactorUnregisteredAccountsAndSessionInfo : IInspectable
                    {
                        [propget] HRESULT Sessions([out] [retval] Windows.Foundation.Collections.IVectorView<Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorSessionInfo*>** value);
                        [propget] HRESULT UnregisteredAccounts([out] [retval] Windows.Foundation.Collections.IVectorView<HSTRING>** value);
                        [propget] HRESULT ServiceResponse([out] [retval] Windows.Security.Authentication.Identity.Core.MicrosoftAccountMultiFactorServiceResponse* value);
                    }

                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    [marshaling_behavior(agile)]
                    [static(Windows.Security.Authentication.Identity.Core.IMicrosoftAccountMultiFactorAuthenticatorStatics, Windows.Foundation.UniversalApiContract, 3.0)]
                    [threading(both)]
                    runtimeclass MicrosoftAccountMultiFactorAuthenticationManager
                    {
                        [default] interface Windows.Security.Authentication.Identity.Core.IMicrosoftAccountMultiFactorAuthenticationManager;
                    }

                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    [marshaling_behavior(agile)]
                    [threading(both)]
                    runtimeclass MicrosoftAccountMultiFactorGetSessionsResult
                    {
                        [default] interface Windows.Security.Authentication.Identity.Core.IMicrosoftAccountMultiFactorGetSessionsResult;
                    }

                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    [marshaling_behavior(agile)]
                    [threading(both)]
                    runtimeclass MicrosoftAccountMultiFactorOneTimeCodedInfo
                    {
                        [default] interface Windows.Security.Authentication.Identity.Core.IMicrosoftAccountMultiFactorOneTimeCodedInfo;
                    }

                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    [marshaling_behavior(agile)]
                    [threading(both)]
                    runtimeclass MicrosoftAccountMultiFactorSessionInfo
                    {
                        [default] interface Windows.Security.Authentication.Identity.Core.IMicrosoftAccountMultiFactorSessionInfo;
                    }

                    [contract(Windows.Foundation.UniversalApiContract, 3.0)]
                    [marshaling_behavior(agile)]
                    [threading(both)]
                    runtimeclass MicrosoftAccountMultiFactorUnregisteredAccountsAndSessionInfo
                    {
                        [default] interface Windows.Security.Authentication.Identity.Core.IMicrosoftAccountMultiFactorUnregisteredAccountsAndSessionInfo;
                    }
                }
            }
        }
    }
}
