Public/Get-DifyApp.ps1
function Get-DifyApp { [CmdletBinding()] param( [String] $Id = "", [String] $Name = "", [String] $Mode = "", [String[]] $Tags = @() ) $ValidModes = @("chat", "workflow", "agent-chat", "channel", "all") if ($Mode -and $Mode -notin $ValidModes) { throw "Invalid value for Mode. Must be one of: $($ValidModes -join ', ')" } $Query = @{ "page" = 1 "limit" = 100 } if ($Name) { $Query.name = $Name } if ($Mode) { $Query.mode = $Mode } if ($Tags) { $QueryTags = Get-DifyAppTag -Name $Tags $Query.tag_ids = ($QueryTags | ForEach-Object { $_.Id }) -join "," } $Members = Get-DifyMember $Endpoint = "$($env:PSDIFY_URL)/console/api/apps" $Method = "GET" $Apps = @() $HasMore = $true while ($HasMore) { try { $Response = Invoke-DifyRestMethod -Uri $Endpoint -Method $Method -Query $Query -Token $env:PSDIFY_CONSOLE_TOKEN } catch { throw "Failed to obtain apps: $_" } foreach ($App in $Response.data) { $AppTags = @() foreach ($Tag in $App.tags) { $AppTags += $Tag.name } $CreatedBy = $Members | Where-Object { $_.Id -eq $App.created_by } | Select-Object -ExpandProperty Email if (-not $CreatedBy) { $CreatedBy = $App.created_by } $UpdatedBy = $Members | Where-Object { $_.Id -eq $App.updated_by } | Select-Object -ExpandProperty Email if (-not $UpdatedBy) { $UpdatedBy = $App.updated_by } $AppObject = [PSCustomObject]@{ Id = $App.id Name = $App.name Description = $App.description Mode = $App.mode CreatedBy = $CreatedBy CreatedAt = Convert-UnixTimeToLocalDateTime($App.created_at) UpdatedBy = $UpdatedBy UpdatedAt = Convert-UnixTimeToLocalDateTime($App.updated_at) Tags = $AppTags } if ($Id -and $AppObject.Id -eq $Id) { return $AppObject } $Apps += $AppObject } $HasMore = $Response.has_more $Query.page++ } return $Apps } |