SecretManagement.Warden.Extension/private/ConvertTo-BWEncoding.ps1

<#
.SYNOPSIS
 Base64 encodes an object for Bitwarden CLI
 
.DESCRIPTION
 Base64 encodes an object for Bitwarden CLI
#>

function ConvertTo-BWEncoding {
    [CmdletBinding()]
    [Diagnostics.CodeAnalysis.SuppressMessageAttribute("PSUseOutputTypeCorrectly", "", Justification = "Output is a Base64 Encoded String.")]
    [OutputType([String])]
    param(
        [Parameter( Mandatory, Position = 0, ValueFromPipeline )]
        [object]
        $InputObject
    )

    process {
        if ( $InputObject -isnot [string] ) {
            try {
                $InputObject | ConvertFrom-Json > $null
                Write-Verbose 'Object is already a JSON string'
            } catch {
                Write-Verbose 'Converting object to JSON'
                $InputObject = ConvertTo-Json -InputObject $InputObject -Compress
            }
        }

        try {
            [convert]::FromBase64String( $InputObject ) > $null
            Write-Verbose 'Object is already Base64 encoded'
            return $InputObject
        } catch {
            Write-Verbose 'Converting JSON to Base64 encoding'
            return [convert]::ToBase64String( [System.Text.Encoding]::UTF8.GetBytes( $InputObject ) )
        }
    }
}