Packages
phoenix_kit
1.7.138
1.7.208
1.7.207
1.7.206
1.7.205
1.7.204
1.7.203
1.7.202
1.7.201
1.7.200
1.7.199
1.7.198
1.7.197
1.7.196
1.7.194
1.7.193
1.7.192
1.7.191
1.7.190
1.7.189
1.7.187
1.7.186
1.7.185
1.7.184
1.7.183
1.7.182
1.7.181
1.7.180
1.7.179
1.7.178
1.7.177
1.7.176
1.7.175
1.7.174
1.7.173
1.7.172
1.7.171
1.7.170
1.7.169
1.7.168
1.7.167
1.7.166
1.7.165
1.7.164
1.7.162
1.7.161
1.7.160
1.7.159
1.7.157
1.7.156
1.7.155
1.7.154
1.7.153
1.7.152
1.7.151
1.7.150
1.7.149
1.7.146
1.7.145
1.7.144
1.7.143
1.7.138
1.7.133
1.7.132
1.7.131
1.7.130
1.7.128
1.7.126
1.7.125
1.7.121
1.7.120
1.7.119
1.7.118
1.7.117
1.7.116
1.7.115
1.7.114
1.7.113
1.7.112
1.7.111
1.7.110
1.7.109
1.7.108
1.7.107
1.7.106
1.7.105
1.7.104
1.7.103
1.7.102
1.7.101
1.7.100
1.7.99
1.7.98
1.7.97
1.7.96
1.7.95
1.7.94
1.7.93
1.7.92
1.7.91
1.7.90
1.7.89
1.7.88
1.7.87
1.7.86
1.7.85
1.7.84
1.7.83
1.7.82
1.7.81
1.7.80
1.7.79
1.7.78
1.7.77
1.7.76
1.7.75
1.7.74
1.7.71
1.7.70
1.7.69
1.7.66
1.7.65
1.7.64
1.7.63
1.7.62
1.7.61
1.7.59
1.7.58
1.7.57
1.7.56
1.7.55
1.7.54
1.7.53
1.7.52
1.7.51
1.7.49
1.7.44
1.7.43
1.7.42
1.7.41
1.7.39
1.7.38
1.7.37
1.7.36
1.7.34
1.7.33
1.7.31
1.7.30
1.7.29
1.7.28
1.7.27
1.7.26
1.7.25
1.7.24
1.7.23
1.7.22
1.7.21
1.7.20
1.7.19
1.7.18
1.7.17
1.7.16
1.7.15
1.7.14
1.7.13
1.7.12
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.20
1.6.19
1.6.18
1.6.17
1.6.16
1.6.15
1.6.14
1.6.13
1.6.12
1.6.11
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.5.2
1.5.1
1.5.0
1.4.9
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.10
1.2.9
1.2.8
1.2.7
1.2.5
1.2.4
1.2.2
1.2.1
1.2.0
1.1.0
1.0.0
A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more
Current section
Files
Jump to
Current section
Files
lib/phoenix_kit/integrations/events.ex
defmodule PhoenixKit.Integrations.Events do
@moduledoc """
PubSub helpers for broadcasting integration changes in real-time.
Allows multiple admins viewing the Integrations settings page to see
changes immediately without page refresh. Also notifies other LiveViews
that depend on integration status (e.g., document creator, AI endpoints).
## Topic
All events are broadcast on the `"phoenix_kit:integrations"` topic.
## Events
- `{:integration_setup_saved, provider_key, data}` — setup credentials saved (client_id/secret, API key, etc.)
- `{:integration_connected, provider_key, data}` — OAuth flow completed, integration is now connected
- `{:integration_disconnected, provider_key}` — integration was disconnected
- `{:integration_validated, provider_key, :ok | {:error, reason}}` — health check completed
## Usage
# Subscribe in a LiveView mount
if connected?(socket), do: PhoenixKit.Integrations.Events.subscribe()
# Handle events
def handle_info({:integration_connected, provider_key, _data}, socket) do
{:noreply, reload_data(socket)}
end
"""
alias PhoenixKit.PubSub.Manager
@topic "phoenix_kit:integrations"
@doc "Subscribe to all integration change events."
@spec subscribe() :: :ok | {:error, term()}
def subscribe do
Manager.subscribe(@topic)
end
@doc "Broadcast that an integration's setup credentials were saved."
@spec broadcast_setup_saved(String.t(), map()) :: :ok
def broadcast_setup_saved(provider_key, data) do
broadcast({:integration_setup_saved, provider_key, data})
end
@doc "Broadcast that an OAuth integration was connected (tokens obtained)."
@spec broadcast_connected(String.t(), map()) :: :ok
def broadcast_connected(provider_key, data) do
broadcast({:integration_connected, provider_key, data})
end
@doc "Broadcast that an integration was disconnected (tokens removed)."
@spec broadcast_disconnected(String.t()) :: :ok
def broadcast_disconnected(provider_key) do
broadcast({:integration_disconnected, provider_key})
end
@doc "Broadcast that an integration's health check completed."
@spec broadcast_validated(String.t(), :ok | {:error, term()}) :: :ok
def broadcast_validated(provider_key, status) do
broadcast({:integration_validated, provider_key, status})
end
@doc "Broadcast that a new named connection was added for a provider."
@spec broadcast_connection_added(String.t(), String.t()) :: :ok
def broadcast_connection_added(provider_key, name) do
broadcast({:integration_connection_added, provider_key, name})
end
@doc "Broadcast that a named connection was removed from a provider."
@spec broadcast_connection_removed(String.t(), String.t()) :: :ok
def broadcast_connection_removed(provider_key, name) do
broadcast({:integration_connection_removed, provider_key, name})
end
@doc "Broadcast that a named connection was renamed."
@spec broadcast_connection_renamed(String.t(), String.t(), String.t()) :: :ok
def broadcast_connection_renamed(provider_key, old_name, new_name) do
broadcast({:integration_connection_renamed, provider_key, old_name, new_name})
end
defp broadcast(message) do
Manager.broadcast(@topic, message)
rescue
_ -> :ok
end
end