Private/Api/Initialize-PageSize.ps1

<#
    Copyright (c) 2025-2026 Robert Faddes
    SPDX-License-Identifier: MPL-2.0
#>

function Initialize-PageSize {
    <#
    .SYNOPSIS
        Retrieves the account's maximum page size and configures the module's page size settings.
 
    .DESCRIPTION
        This internal function queries the Datto RMM API to determine the account's maximum allowed
        page size for paginated requests. It then sets the module's page size based on a priority order:
         
        1. Existing session page size (if within account limits)
        2. Configured default page size (if within account limits)
        3. Previously set page size (if within account limits)
        4. Account maximum page size
         
        This function also serves as a connection test, as it requires a valid authentication token
        to successfully query the API.
 
    .EXAMPLE
        Initialize-RMMPageSize
         
        Queries the API and configures page size settings.
 
    .NOTES
        This is an internal function used by Connect-DattoRMM and potentially other functions
        that need to validate or refresh page size configuration.
         
        Sets the following script-scope variables:
        - $Script:MaxPageSize: Account's maximum allowed page size
        - $Script:PageSize: Currently active page size for API requests
        - $Script:SessionPageSize: Session's configured page size
         
        Requires an active authentication token in $Script:RMMAuth.
    #>


    [CmdletBinding()]
    param()

    Write-Debug "Testing connection to Datto RMM API & setting maxpage size."
    
    $PageSizeMethod = @{
        Path = "system/pagination"
        Method = 'Get'
    }

    $AccountMaxPageSize = (Invoke-ApiMethod @PageSizeMethod).max
    $Script:MaxPageSize = $AccountMaxPageSize

    # Check if there's a configured default page size
    If ($null -ne $Script:SessionPageSize -and $Script:SessionPageSize -le $AccountMaxPageSize) {

        $Script:PageSize = $Script:SessionPageSize
        Write-Verbose "Set page size to existing session value: $($Script:PageSize)."

    } elseif ($null -ne $Script:ConfigPageSize -and $Script:ConfigPageSize -le $AccountMaxPageSize) {

        $Script:PageSize = $Script:ConfigPageSize
        Write-Verbose "Set page size to configured default: $($Script:PageSize)."

    } elseif ($null -ne $Script:PageSize -and $Script:PageSize -le $AccountMaxPageSize) {

        # If PageSize was previously set in this session and is within limits, keep it
        Write-Verbose "Retaining previously set page size: $($Script:PageSize)."

    } else {

        $Script:PageSize = $AccountMaxPageSize
        Write-Verbose "Set page size to account maximum: $($Script:PageSize)."

    }

    $Script:SessionPageSize = $Script:PageSize
    Write-Verbose "Using page size: $($Script:PageSize)."
}

# SIG # Begin signature block
# MIIF+wYJKoZIhvcNAQcCoIIF7DCCBegCAQExDzANBglghkgBZQMEAgEFADB5Bgor
# BgEEAYI3AgEEoGswaTA0BgorBgEEAYI3AgEeMCYCAwEAAAQQH8w7YFlLCE63JNLG
# KX7zUQIBAAIBAAIBAAIBAAIBADAxMA0GCWCGSAFlAwQCAQUABCDwTGykY07r7Z/w
# jiNykaZ8oMXeJnUR2OWjkF6SE3PspaCCA04wggNKMIICMqADAgECAhB464iXHfI6
# gksEkDDTyrNsMA0GCSqGSIb3DQEBCwUAMD0xFjAUBgNVBAoMDVJvYmVydCBGYWRk
# ZXMxIzAhBgNVBAMMGkRhdHRvUk1NLkNvcmUgQ29kZSBTaWduaW5nMB4XDTI2MDMz
# MTAwMTMzMFoXDTI4MDMzMTAwMjMzMFowPTEWMBQGA1UECgwNUm9iZXJ0IEZhZGRl
# czEjMCEGA1UEAwwaRGF0dG9STU0uQ29yZSBDb2RlIFNpZ25pbmcwggEiMA0GCSqG
# SIb3DQEBAQUAA4IBDwAwggEKAoIBAQChn1EpMYQgl1RgWzQj2+wp2mvdfb3UsaBS
# nxEVGoQ0gj96tJ2MHAF7zsITdUjwaflKS1vE6wAlOg5EI1V79tJCMxzM0bFpOdR1
# L5F2HE/ovIAKNkHxFUF5qWU8vVeAsOViFQ4yhHpzLen0WLF6vhmc9eH23dLQy5fy
# tELZQEc2WbQFa4HMAitP/P9kHAu6CUx5s4woLIOyyR06jkr3l9vk0sxcbCxx7+dF
# RrsSLyPYPH+bUAB8+a0hs+6qCeteBuUfLvGzpMhpzKAsY82WZ3Rd9X38i32dYj+y
# dYx+nx+UEMDLjDJrZgnVa8as4RojqVLcEns5yb/XTjLxDc58VatdAgMBAAGjRjBE
# MA4GA1UdDwEB/wQEAwIHgDATBgNVHSUEDDAKBggrBgEFBQcDAzAdBgNVHQ4EFgQU
# H+B0vf97dYXqdUX1YMcWhFsY6fcwDQYJKoZIhvcNAQELBQADggEBAJmD4EEGNmcD
# 1JtFoRGxuLJaTHxDwBsjqcRQRE1VPZNGaiwIm8oSQdHVjQg0oIyK7SEb02cs6n6Y
# NZbwf7B7WZJ4aKYbcoLug1k1x9SoqwBmfElECeJTKXf6dkRRNmrAodpGCixR4wMH
# KXqwqP5F+5j7bdnQPiIVXuMesxc4tktz362ysph1bqKjDQSCBpwi0glEIH7bv5Ms
# Ey9Gl3fe+vYC5W06d2LYVebEfm9+7766hsOgpdDVgdtnN+e6uwIJjG/6PTG6TMDP
# y+pr5K6LyUVYJYcWWUTZRBqqwBHiLGekPbxrjEVfxUY32Pq4QfLzUH5hhUCAk4HN
# XpF9pOzFLMUxggIDMIIB/wIBATBRMD0xFjAUBgNVBAoMDVJvYmVydCBGYWRkZXMx
# IzAhBgNVBAMMGkRhdHRvUk1NLkNvcmUgQ29kZSBTaWduaW5nAhB464iXHfI6gksE
# kDDTyrNsMA0GCWCGSAFlAwQCAQUAoIGEMBgGCisGAQQBgjcCAQwxCjAIoAKAAKEC
# gAAwGQYJKoZIhvcNAQkDMQwGCisGAQQBgjcCAQQwHAYKKwYBBAGCNwIBCzEOMAwG
# CisGAQQBgjcCARUwLwYJKoZIhvcNAQkEMSIEII693kFUm2Q/Yda4xDELV3FujyFD
# TMc1TZR8uE1xi0gGMA0GCSqGSIb3DQEBAQUABIIBAJo5+pM+L0/Tz7jzs7Rk9GX2
# L9h4Enr6RrouZhwC6Dq/tC4CFuXL3sDsSjdxHkiedZJA5cjngEsKrxycKtUBspym
# 3PoWZQb8OeUgJ7PzUfpDb/lw3kFUC65OKt2zQ7NXfFdiCgIDx5Bz533t/2eYr3hB
# j/j0Y4iByCErARJzc8hLvnYL6mln7mNPdN/INY3RoeoCK2YFKKj/vdy5rZvCYX1b
# hbcC1nxnISeY/3Au4EFPKMCmKvtyXG7w+aIG+dNTBnuwmf1bj02jX/7gLeAtiE0k
# sa/qiGhPBWEg1rWWd8v2WeI6AAlJ6m3gGZomiLlVlgHTJMlwM/FPd4txFk9WfZA=
# SIG # End signature block