Modules/businessdev.ALbuild.Marketplace/Public/Wait-BcMarketplaceValidation.ps1
|
function Wait-BcMarketplaceValidation { <# .SYNOPSIS Waits for a Marketplace submission to finish validation. .DESCRIPTION Polls the submission until it reaches a publishable state (Published/ReadyToPublish), fails, or the timeout elapses. The auth token is refreshed when -AuthContextFactory is supplied (useful for long validations). .PARAMETER AuthContext Auth context (Partner Center scope). .PARAMETER ProductId The product id. .PARAMETER SubmissionId The submission id to monitor. .PARAMETER TimeoutMinutes Maximum minutes to wait. Default 40. .PARAMETER IntervalSeconds Polling interval. Default 30. .OUTPUTS PSCustomObject with State, Substate, Completed, TimedOut. #> [CmdletBinding()] [OutputType([PSCustomObject])] param( [Parameter(Mandatory)] [PSCustomObject] $AuthContext, [Parameter(Mandatory)] [string] $ProductId, [Parameter(Mandatory)] [string] $SubmissionId, [int] $TimeoutMinutes = 40, [int] $IntervalSeconds = 30 ) $cleanProductId = $ProductId -replace '^product/', '' $headers = @{ Authorization = "Bearer $($AuthContext.AccessToken)" } $statusUrl = "https://api.partner.microsoft.com/v1.0/ingestion/products/$cleanProductId/submissions/$SubmissionId" $deadline = (Get-Date).AddMinutes($TimeoutMinutes) while ((Get-Date) -lt $deadline) { Start-Sleep -Seconds $IntervalSeconds try { $status = Invoke-RestMethod -Uri $statusUrl -Method Get -Headers $headers -ErrorAction Stop } catch { Write-ALbuildLog -Level Warning "Error polling submission status: $($_.Exception.Message)" continue } Write-ALbuildLog "Submission state: $($status.state)/$($status.substate)" if ($status.state -eq 'Published' -and $status.substate -eq 'ReadyToPublish') { Write-ALbuildLog -Level Success 'Validation completed successfully.' return [PSCustomObject]@{ State = $status.state; Substate = $status.substate; Completed = $true; TimedOut = $false } } if ($status.state -eq 'Failed') { throw "Marketplace validation failed (state $($status.state)/$($status.substate))." } } Write-ALbuildLog -Level Warning "Validation did not complete within $TimeoutMinutes minutes; check Partner Center." return [PSCustomObject]@{ State = 'Unknown'; Substate = 'Unknown'; Completed = $false; TimedOut = $true } } |