modules/Definitions/Slack.Connector.psm1

Set-StrictMode -Version Latest

function Register-SlackConnectorDefinitions {
    Register-IntegrationWizardDefinition @{
        Id           = 'slack-connector'
        Platform     = 'Slack'
        Product      = 'ISC'
        CoreSwitch   = 'Connector'
        CliName      = 'slack'
        Title        = 'Slack SaaS connector & app token discovery'
        FolderName   = 'Slack'
        AccessLevels = @('ReadOnly', 'ReadWrite')
        AdminRoles   = @('Slack Workspace Owner (custom app / service account)')
        OutputsHelp  = 'Paste workspace OAuth tokens or private app credentials into Agentic Fabric Connection Settings.'
        Inputs       = @(
            @{ Name = 'WorkspaceName'; Source = 'Supply'; Prompt = 'Slack workspace name'; Purpose = 'Human-readable workspace label'; Required = $false }
            @{ Name = 'BotUserOAuthToken'; Source = 'Supply'; Prompt = 'Bot User OAuth Token (xoxb-)'; Purpose = 'Bot token for aggregation'; Required = $false; Secret = $true }
            @{ Name = 'UserOAuthToken'; Source = 'Supply'; Prompt = 'User OAuth Token (xoxp-)'; Purpose = 'User token if required by datasets'; Required = $false; Secret = $true }
            @{ Name = 'OutputDirectory'; Source = 'Supply'; Prompt = 'Output directory'; Purpose = 'Connection settings file path'; Required = $false }
        )
        CheckInputs  = @(
            @{ Name = 'BotUserOAuthToken'; Source = 'Supply'; Prompt = 'Bot User OAuth Token'; Purpose = 'Token to verify'; Required = $true; Secret = $true }
            @{ Name = 'UserOAuthToken'; Source = 'Supply'; Prompt = 'User OAuth Token (optional)'; Purpose = 'Secondary token'; Required = $false; Secret = $true }
            @{ Name = 'OutputDirectory'; Source = 'Supply'; Prompt = 'Output directory'; Purpose = 'Wizard output directory'; Required = $false }
        )
        Steps        = {
            param($ctx)
            @(
                @{
                    Id    = 'slack-app'
                    Title = 'Install Slack app for Agentic Fabric aggregation'
                    Kind  = 'Ensure'
                    Probe = { param($c) 'Create' }
                    Run   = {
                        param($c)
                        Write-Step 'Slack workspace app'
                        Write-Info 'Create or reuse a Slack app with ISC-documented scopes; install to the workspace.'
                        Write-Info 'Copy Bot (xoxb-) and User (xoxp-) tokens from OAuth & Permissions.'
                    }
                    BuildScript = {
                        param($c)
                        @"
Write-Host 'Slack SaaS connector: install app and record xoxb/xoxp tokens for workspace $($c['WorkspaceName'])'
"@

                    }
                }
            )
        }
        OnRunComplete = {
            param($ctx)
            Write-Host ''
            Write-Host 'Slack SaaS connector handoff' -ForegroundColor Cyan
            Write-Host " Workspace: $(if ($ctx['WorkspaceName']) { $ctx['WorkspaceName'] } else { '(label)' })"
            Write-Host ' Bot token: [vault]'
            Write-Host ' User token: [vault if used]'
            Write-Host ''
        }
    }
}

Export-ModuleMember -Function Register-SlackConnectorDefinitions