EntraCAWhatIf.psm1

# whatifcli - Conditional Access WhatIf PowerShell Module
# This module simulates the evaluation of Microsoft Entra Conditional Access policies
# against hypothetical sign-in scenarios

# Get the directory where this script is located
$PSScriptRoot = Split-Path -Parent $MyInvocation.MyCommand.Definition

# Dot source the public functions
. "$PSScriptRoot\Public\Invoke-CAWhatIf.ps1"
. "$PSScriptRoot\Public\Get-CAWhatIfReport.ps1"
. "$PSScriptRoot\Public\Test-TrustedLocation.ps1"
. "$PSScriptRoot\Public\Get-CAWhatIfDiagnostic.ps1"

# Dot source private functions by category
# Identity functions
. "$PSScriptRoot\Private\Identity\Resolve-UserIdentity.ps1"
. "$PSScriptRoot\Private\Identity\Resolve-ServicePrincipalIdentity.ps1"
. "$PSScriptRoot\Private\Identity\Resolve-GroupMembership.ps1"

# Condition evaluation functions
. "$PSScriptRoot\Private\Conditions\Resolve-CACondition.ps1"
. "$PSScriptRoot\Private\Conditions\Test-SpecialValue.ps1"
. "$PSScriptRoot\Private\Conditions\Test-NetworkInScope.ps1"
. "$PSScriptRoot\Private\Conditions\Test-DeviceFilter.ps1"
. "$PSScriptRoot\Private\Conditions\Test-AuthenticationStrength.ps1"
. "$PSScriptRoot\Private\Conditions\Test-ServicePrincipalInScope.ps1"
. "$PSScriptRoot\Private\Conditions\Test-UserActionInScope.ps1"
. "$PSScriptRoot\Private\Conditions\Test-AuthenticationContextInScope.ps1"

# Control evaluation functions
. "$PSScriptRoot\Private\Controls\Resolve-CAGrantControl.ps1"
. "$PSScriptRoot\Private\Controls\Resolve-CASessionControl.ps1"

# Caching and API optimization functions
. "$PSScriptRoot\Private\Cache\Get-CAPolicy.ps1"
. "$PSScriptRoot\Private\Cache\Get-NamedLocations.ps1"
. "$PSScriptRoot\Private\Cache\Invoke-GraphBatchRequest.ps1"
. "$PSScriptRoot\Private\Cache\Get-OptimizedGroupMembership.ps1"
. "$PSScriptRoot\Private\Cache\Get-CacheManager.ps1"

# Output and formatting functions
. "$PSScriptRoot\Private\Output\Format-MicrosoftCAWhatIfResponse.ps1"
. "$PSScriptRoot\Private\Output\Write-DiagnosticOutput.ps1"

# Export the public functions
Export-ModuleMember -Function 'Invoke-CAWhatIf', 'Get-CAWhatIfReport', 'Test-TrustedLocation', 'Get-CAWhatIfDiagnostic'

# Create an alias
New-Alias -Name 'cawhatif' -Value 'Invoke-CAWhatIf'
Export-ModuleMember -Alias 'cawhatif'