From 8697a34d3c5570c35489a5950bd32a9f8eb31493 Mon Sep 17 00:00:00 2001
From: Joe Dixon <hello@joedixon.co.uk>
Date: Fri, 22 Dec 2023 14:09:43 +0000
Subject: [PATCH] wip

---
 src/Contracts/ServerProvider.php                 |  4 ++--
 src/Jobs/PingInactiveConnections.php             |  4 ++--
 src/Jobs/PruneStaleConnections.php               |  2 +-
 .../Pusher/Channels/CacheChannel.php             |  2 +-
 src/{ => Protocols}/Pusher/Channels/Channel.php  |  8 ++++----
 .../Pusher/Channels/ChannelBroker.php            |  2 +-
 .../Pusher/Channels/ChannelConnection.php        |  2 +-
 .../Concerns/InteractsWithPresenceChannels.php   |  2 +-
 .../Concerns/InteractsWithPrivateChannels.php    |  4 ++--
 .../Pusher/Channels/PresenceCacheChannel.php     | 10 ++++++++++
 .../Pusher/Channels/PresenceChannel.php          | 10 ++++++++++
 .../Pusher/Channels/PrivateCacheChannel.php      | 10 ++++++++++
 src/Protocols/Pusher/Channels/PrivateChannel.php | 10 ++++++++++
 src/{ => Protocols}/Pusher/ClientEvent.php       |  2 +-
 .../Concerns/InteractsWithChannelInformation.php | 10 +++++-----
 .../Pusher/Concerns/SerializesChannels.php       |  4 ++--
 .../Contracts/ChannelConnectionManager.php       |  4 ++--
 .../Pusher/Contracts/ChannelManager.php          |  6 +++---
 src/{ => Protocols}/Pusher/Event.php             |  8 ++++----
 src/{ => Protocols}/Pusher/EventDispatcher.php   |  4 ++--
 .../Pusher/Exceptions/ConnectionUnauthorized.php |  2 +-
 .../Pusher/Exceptions/InvalidOrigin.php          |  4 ++--
 .../Pusher/Exceptions/PusherException.php        |  2 +-
 .../Http/Controllers/ChannelController.php       |  4 ++--
 .../Http/Controllers/ChannelUsersController.php  |  4 ++--
 .../Http/Controllers/ChannelsController.php      |  4 ++--
 .../Pusher/Http/Controllers/Controller.php       |  4 ++--
 .../Http/Controllers/EventsBatchController.php   |  6 +++---
 .../Pusher/Http/Controllers/EventsController.php |  6 +++---
 .../Pusher/Http/Controllers/PusherController.php |  4 ++--
 .../Controllers/UsersTerminateController.php     |  2 +-
 .../Managers/ArrayChannelConnectionManager.php   |  6 +++---
 .../Pusher/Managers/ArrayChannelManager.php      | 14 +++++++-------
 .../Managers/CacheChannelConnectionManager.php   |  6 +++---
 .../Pusher/Managers/CacheChannelManager.php      | 12 ++++++------
 src/{ => Protocols}/Pusher/Server.php            | 10 +++++-----
 src/Pusher/Channels/PresenceCacheChannel.php     | 10 ----------
 src/Pusher/Channels/PresenceChannel.php          | 10 ----------
 src/Pusher/Channels/PrivateCacheChannel.php      | 10 ----------
 src/Pusher/Channels/PrivateChannel.php           | 10 ----------
 src/Servers/ApiGateway/ApiGatewayProvider.php    | 10 +++++-----
 src/Servers/ApiGateway/Server.php                |  2 +-
 src/Servers/Reverb/Factory.php                   | 16 ++++++++--------
 src/Servers/Reverb/ReverbProvider.php            | 10 +++++-----
 src/ServiceProvider.php                          |  4 ++--
 .../Reverb/ChannelUsersControllerTest.php        |  2 +-
 tests/Feature/ServerTest.php                     |  4 ++--
 tests/Pest.php                                   |  4 ++--
 tests/ReverbTestCase.php                         |  2 +-
 tests/Unit/Channels/CacheChannelTest.php         |  6 +++---
 tests/Unit/Channels/ChannelBrokerTest.php        | 14 +++++++-------
 tests/Unit/Channels/ChannelTest.php              |  6 +++---
 tests/Unit/Channels/PresenceCacheChannelTest.php |  8 ++++----
 tests/Unit/Channels/PresenceChannelTest.php      |  8 ++++----
 tests/Unit/Channels/PrivateCacheChannelTest.php  |  6 +++---
 tests/Unit/Channels/PrivateChannelTest.php       |  6 +++---
 tests/Unit/ClientEventTest.php                   |  6 +++---
 tests/Unit/EventTest.php                         |  4 ++--
 tests/Unit/Jobs/PingInactiveConnectionsTest.php  |  4 ++--
 tests/Unit/Jobs/PruneStaleConnectionsTest.php    |  4 ++--
 tests/Unit/Managers/ChannelManagerTest.php       |  2 +-
 tests/Unit/Pusher/EventTest.php                  |  4 ++--
 62 files changed, 185 insertions(+), 185 deletions(-)
 rename src/{ => Protocols}/Pusher/Channels/CacheChannel.php (94%)
 rename src/{ => Protocols}/Pusher/Channels/Channel.php (92%)
 rename src/{ => Protocols}/Pusher/Channels/ChannelBroker.php (92%)
 rename src/{ => Protocols}/Pusher/Channels/ChannelConnection.php (95%)
 rename src/{ => Protocols}/Pusher/Channels/Concerns/InteractsWithPresenceChannels.php (97%)
 rename src/{ => Protocols}/Pusher/Channels/Concerns/InteractsWithPrivateChannels.php (88%)
 create mode 100644 src/Protocols/Pusher/Channels/PresenceCacheChannel.php
 create mode 100644 src/Protocols/Pusher/Channels/PresenceChannel.php
 create mode 100644 src/Protocols/Pusher/Channels/PrivateCacheChannel.php
 create mode 100644 src/Protocols/Pusher/Channels/PrivateChannel.php
 rename src/{ => Protocols}/Pusher/ClientEvent.php (94%)
 rename src/{ => Protocols}/Pusher/Concerns/InteractsWithChannelInformation.php (88%)
 rename src/{ => Protocols}/Pusher/Concerns/SerializesChannels.php (81%)
 rename src/{ => Protocols}/Pusher/Contracts/ChannelConnectionManager.php (89%)
 rename src/{ => Protocols}/Pusher/Contracts/ChannelManager.php (86%)
 rename src/{ => Protocols}/Pusher/Event.php (95%)
 rename src/{ => Protocols}/Pusher/EventDispatcher.php (92%)
 rename src/{ => Protocols}/Pusher/Exceptions/ConnectionUnauthorized.php (86%)
 rename src/{ => Protocols}/Pusher/Exceptions/InvalidOrigin.php (73%)
 rename src/{ => Protocols}/Pusher/Exceptions/PusherException.php (93%)
 rename src/{ => Protocols}/Pusher/Http/Controllers/ChannelController.php (81%)
 rename src/{ => Protocols}/Pusher/Http/Controllers/ChannelUsersController.php (88%)
 rename src/{ => Protocols}/Pusher/Http/Controllers/ChannelsController.php (89%)
 rename src/{ => Protocols}/Pusher/Http/Controllers/Controller.php (96%)
 rename src/{ => Protocols}/Pusher/Http/Controllers/EventsBatchController.php (93%)
 rename src/{ => Protocols}/Pusher/Http/Controllers/EventsController.php (91%)
 rename src/{ => Protocols}/Pusher/Http/Controllers/PusherController.php (93%)
 rename src/{ => Protocols}/Pusher/Http/Controllers/UsersTerminateController.php (93%)
 rename src/{ => Protocols}/Pusher/Managers/ArrayChannelConnectionManager.php (90%)
 rename src/{ => Protocols}/Pusher/Managers/ArrayChannelManager.php (86%)
 rename src/{ => Protocols}/Pusher/Managers/CacheChannelConnectionManager.php (94%)
 rename src/{ => Protocols}/Pusher/Managers/CacheChannelManager.php (88%)
 rename src/{ => Protocols}/Pusher/Server.php (91%)
 delete mode 100644 src/Pusher/Channels/PresenceCacheChannel.php
 delete mode 100644 src/Pusher/Channels/PresenceChannel.php
 delete mode 100644 src/Pusher/Channels/PrivateCacheChannel.php
 delete mode 100644 src/Pusher/Channels/PrivateChannel.php

diff --git a/src/Contracts/ServerProvider.php b/src/Contracts/ServerProvider.php
index 3ac8a33f..312b6378 100644
--- a/src/Contracts/ServerProvider.php
+++ b/src/Contracts/ServerProvider.php
@@ -2,8 +2,8 @@
 
 namespace Laravel\Reverb\Contracts;
 
-use Laravel\Reverb\Pusher\Contracts\ChannelConnectionManager;
-use Laravel\Reverb\Pusher\Contracts\ChannelManager;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelConnectionManager;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelManager;
 
 abstract class ServerProvider
 {
diff --git a/src/Jobs/PingInactiveConnections.php b/src/Jobs/PingInactiveConnections.php
index 22d44bc8..308d0a6a 100644
--- a/src/Jobs/PingInactiveConnections.php
+++ b/src/Jobs/PingInactiveConnections.php
@@ -4,9 +4,9 @@
 
 use Illuminate\Foundation\Bus\Dispatchable;
 use Laravel\Reverb\Contracts\ApplicationProvider;
-use Laravel\Reverb\Pusher\Contracts\ChannelManager;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelManager;
 use Laravel\Reverb\Loggers\Log;
-use Laravel\Reverb\Pusher\Event as PusherEvent;
+use Laravel\Reverb\Protocols\Pusher\Event as PusherEvent;
 
 class PingInactiveConnections
 {
diff --git a/src/Jobs/PruneStaleConnections.php b/src/Jobs/PruneStaleConnections.php
index 50ec7b12..e76c9b39 100644
--- a/src/Jobs/PruneStaleConnections.php
+++ b/src/Jobs/PruneStaleConnections.php
@@ -4,7 +4,7 @@
 
 use Illuminate\Foundation\Bus\Dispatchable;
 use Laravel\Reverb\Contracts\ApplicationProvider;
-use Laravel\Reverb\Pusher\Contracts\ChannelManager;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelManager;
 use Laravel\Reverb\Loggers\Log;
 
 class PruneStaleConnections
diff --git a/src/Pusher/Channels/CacheChannel.php b/src/Protocols/Pusher/Channels/CacheChannel.php
similarity index 94%
rename from src/Pusher/Channels/CacheChannel.php
rename to src/Protocols/Pusher/Channels/CacheChannel.php
index 0381213c..5ed00526 100644
--- a/src/Pusher/Channels/CacheChannel.php
+++ b/src/Protocols/Pusher/Channels/CacheChannel.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Laravel\Reverb\Pusher\Channels;
+namespace Laravel\Reverb\Protocols\Pusher\Channels;
 
 use Laravel\Reverb\Contracts\Connection;
 
diff --git a/src/Pusher/Channels/Channel.php b/src/Protocols/Pusher/Channels/Channel.php
similarity index 92%
rename from src/Pusher/Channels/Channel.php
rename to src/Protocols/Pusher/Channels/Channel.php
index 21626e40..672e25bd 100644
--- a/src/Pusher/Channels/Channel.php
+++ b/src/Protocols/Pusher/Channels/Channel.php
@@ -1,10 +1,10 @@
 <?php
 
-namespace Laravel\Reverb\Pusher\Channels;
+namespace Laravel\Reverb\Protocols\Pusher\Channels;
 
-use Laravel\Reverb\Pusher\Concerns\SerializesChannels;
-use Laravel\Reverb\Pusher\Contracts\ChannelConnectionManager;
-use Laravel\Reverb\Pusher\Contracts\ChannelManager;
+use Laravel\Reverb\Protocols\Pusher\Concerns\SerializesChannels;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelConnectionManager;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelManager;
 use Laravel\Reverb\Contracts\Connection;
 
 class Channel
diff --git a/src/Pusher/Channels/ChannelBroker.php b/src/Protocols/Pusher/Channels/ChannelBroker.php
similarity index 92%
rename from src/Pusher/Channels/ChannelBroker.php
rename to src/Protocols/Pusher/Channels/ChannelBroker.php
index 275bdbf7..7a6e327b 100644
--- a/src/Pusher/Channels/ChannelBroker.php
+++ b/src/Protocols/Pusher/Channels/ChannelBroker.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Laravel\Reverb\Pusher\Channels;
+namespace Laravel\Reverb\Protocols\Pusher\Channels;
 
 use Illuminate\Support\Str;
 
diff --git a/src/Pusher/Channels/ChannelConnection.php b/src/Protocols/Pusher/Channels/ChannelConnection.php
similarity index 95%
rename from src/Pusher/Channels/ChannelConnection.php
rename to src/Protocols/Pusher/Channels/ChannelConnection.php
index 63f59af1..db7cd17e 100644
--- a/src/Pusher/Channels/ChannelConnection.php
+++ b/src/Protocols/Pusher/Channels/ChannelConnection.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Laravel\Reverb\Pusher\Channels;
+namespace Laravel\Reverb\Protocols\Pusher\Channels;
 
 use Illuminate\Support\Arr;
 use Laravel\Reverb\Contracts\Connection;
diff --git a/src/Pusher/Channels/Concerns/InteractsWithPresenceChannels.php b/src/Protocols/Pusher/Channels/Concerns/InteractsWithPresenceChannels.php
similarity index 97%
rename from src/Pusher/Channels/Concerns/InteractsWithPresenceChannels.php
rename to src/Protocols/Pusher/Channels/Concerns/InteractsWithPresenceChannels.php
index be9574bb..03fd4b5e 100644
--- a/src/Pusher/Channels/Concerns/InteractsWithPresenceChannels.php
+++ b/src/Protocols/Pusher/Channels/Concerns/InteractsWithPresenceChannels.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Laravel\Reverb\Pusher\Channels\Concerns;
+namespace Laravel\Reverb\Protocols\Pusher\Channels\Concerns;
 
 use Laravel\Reverb\Contracts\Connection;
 
diff --git a/src/Pusher/Channels/Concerns/InteractsWithPrivateChannels.php b/src/Protocols/Pusher/Channels/Concerns/InteractsWithPrivateChannels.php
similarity index 88%
rename from src/Pusher/Channels/Concerns/InteractsWithPrivateChannels.php
rename to src/Protocols/Pusher/Channels/Concerns/InteractsWithPrivateChannels.php
index d4e63b96..a18d2546 100644
--- a/src/Pusher/Channels/Concerns/InteractsWithPrivateChannels.php
+++ b/src/Protocols/Pusher/Channels/Concerns/InteractsWithPrivateChannels.php
@@ -1,10 +1,10 @@
 <?php
 
-namespace Laravel\Reverb\Pusher\Channels\Concerns;
+namespace Laravel\Reverb\Protocols\Pusher\Channels\Concerns;
 
 use Illuminate\Support\Str;
 use Laravel\Reverb\Contracts\Connection;
-use Laravel\Reverb\Pusher\Exceptions\ConnectionUnauthorized;
+use Laravel\Reverb\Protocols\Pusher\Exceptions\ConnectionUnauthorized;
 
 trait InteractsWithPrivateChannels
 {
diff --git a/src/Protocols/Pusher/Channels/PresenceCacheChannel.php b/src/Protocols/Pusher/Channels/PresenceCacheChannel.php
new file mode 100644
index 00000000..064e046d
--- /dev/null
+++ b/src/Protocols/Pusher/Channels/PresenceCacheChannel.php
@@ -0,0 +1,10 @@
+<?php
+
+namespace Laravel\Reverb\Protocols\Pusher\Channels;
+
+use Laravel\Reverb\Protocols\Pusher\Channels\Concerns\InteractsWithPresenceChannels;
+
+class PresenceCacheChannel extends CacheChannel
+{
+    use InteractsWithPresenceChannels;
+}
diff --git a/src/Protocols/Pusher/Channels/PresenceChannel.php b/src/Protocols/Pusher/Channels/PresenceChannel.php
new file mode 100644
index 00000000..720d7d0a
--- /dev/null
+++ b/src/Protocols/Pusher/Channels/PresenceChannel.php
@@ -0,0 +1,10 @@
+<?php
+
+namespace Laravel\Reverb\Protocols\Pusher\Channels;
+
+use Laravel\Reverb\Protocols\Pusher\Channels\Concerns\InteractsWithPresenceChannels;
+
+class PresenceChannel extends PrivateChannel
+{
+    use InteractsWithPresenceChannels;
+}
diff --git a/src/Protocols/Pusher/Channels/PrivateCacheChannel.php b/src/Protocols/Pusher/Channels/PrivateCacheChannel.php
new file mode 100644
index 00000000..e82cd431
--- /dev/null
+++ b/src/Protocols/Pusher/Channels/PrivateCacheChannel.php
@@ -0,0 +1,10 @@
+<?php
+
+namespace Laravel\Reverb\Protocols\Pusher\Channels;
+
+use Laravel\Reverb\Protocols\Pusher\Channels\Concerns\InteractsWithPrivateChannels;
+
+class PrivateCacheChannel extends CacheChannel
+{
+    use InteractsWithPrivateChannels;
+}
diff --git a/src/Protocols/Pusher/Channels/PrivateChannel.php b/src/Protocols/Pusher/Channels/PrivateChannel.php
new file mode 100644
index 00000000..c0dd2cf6
--- /dev/null
+++ b/src/Protocols/Pusher/Channels/PrivateChannel.php
@@ -0,0 +1,10 @@
+<?php
+
+namespace Laravel\Reverb\Protocols\Pusher\Channels;
+
+use Laravel\Reverb\Protocols\Pusher\Channels\Concerns\InteractsWithPrivateChannels;
+
+class PrivateChannel extends Channel
+{
+    use InteractsWithPrivateChannels;
+}
diff --git a/src/Pusher/ClientEvent.php b/src/Protocols/Pusher/ClientEvent.php
similarity index 94%
rename from src/Pusher/ClientEvent.php
rename to src/Protocols/Pusher/ClientEvent.php
index c66a39a9..7ced20c7 100644
--- a/src/Pusher/ClientEvent.php
+++ b/src/Protocols/Pusher/ClientEvent.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Laravel\Reverb\Pusher;
+namespace Laravel\Reverb\Protocols\Pusher;
 
 use Illuminate\Support\Str;
 use Laravel\Reverb\Contracts\Connection;
diff --git a/src/Pusher/Concerns/InteractsWithChannelInformation.php b/src/Protocols/Pusher/Concerns/InteractsWithChannelInformation.php
similarity index 88%
rename from src/Pusher/Concerns/InteractsWithChannelInformation.php
rename to src/Protocols/Pusher/Concerns/InteractsWithChannelInformation.php
index 5a9b8996..0b2e20b5 100644
--- a/src/Pusher/Concerns/InteractsWithChannelInformation.php
+++ b/src/Protocols/Pusher/Concerns/InteractsWithChannelInformation.php
@@ -1,11 +1,11 @@
 <?php
 
-namespace Laravel\Reverb\Pusher\Concerns;
+namespace Laravel\Reverb\Protocols\Pusher\Concerns;
 
-use Laravel\Reverb\Pusher\Channels\CacheChannel;
-use Laravel\Reverb\Pusher\Channels\Channel;
-use Laravel\Reverb\Pusher\Channels\Concerns\InteractsWithPresenceChannels;
-use Laravel\Reverb\Pusher\Contracts\ChannelManager;
+use Laravel\Reverb\Protocols\Pusher\Channels\CacheChannel;
+use Laravel\Reverb\Protocols\Pusher\Channels\Channel;
+use Laravel\Reverb\Protocols\Pusher\Channels\Concerns\InteractsWithPresenceChannels;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelManager;
 
 trait InteractsWithChannelInformation
 {
diff --git a/src/Pusher/Concerns/SerializesChannels.php b/src/Protocols/Pusher/Concerns/SerializesChannels.php
similarity index 81%
rename from src/Pusher/Concerns/SerializesChannels.php
rename to src/Protocols/Pusher/Concerns/SerializesChannels.php
index 68dad462..667bd709 100644
--- a/src/Pusher/Concerns/SerializesChannels.php
+++ b/src/Protocols/Pusher/Concerns/SerializesChannels.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Laravel\Reverb\Pusher\Concerns;
+namespace Laravel\Reverb\Protocols\Pusher\Concerns;
 
-use Laravel\Reverb\Pusher\Contracts\ChannelConnectionManager;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelConnectionManager;
 
 trait SerializesChannels
 {
diff --git a/src/Pusher/Contracts/ChannelConnectionManager.php b/src/Protocols/Pusher/Contracts/ChannelConnectionManager.php
similarity index 89%
rename from src/Pusher/Contracts/ChannelConnectionManager.php
rename to src/Protocols/Pusher/Contracts/ChannelConnectionManager.php
index 2e025c80..0b877e62 100644
--- a/src/Pusher/Contracts/ChannelConnectionManager.php
+++ b/src/Protocols/Pusher/Contracts/ChannelConnectionManager.php
@@ -1,9 +1,9 @@
 <?php
 
-namespace Laravel\Reverb\Pusher\Contracts;
+namespace Laravel\Reverb\Protocols\Pusher\Contracts;
 
 use Laravel\Reverb\Contracts\Connection;
-use Laravel\Reverb\Pusher\Channels\ChannelConnection;
+use Laravel\Reverb\Protocols\Pusher\Channels\ChannelConnection;
 
 interface ChannelConnectionManager
 {
diff --git a/src/Pusher/Contracts/ChannelManager.php b/src/Protocols/Pusher/Contracts/ChannelManager.php
similarity index 86%
rename from src/Pusher/Contracts/ChannelManager.php
rename to src/Protocols/Pusher/Contracts/ChannelManager.php
index 5b362bed..5ca206a7 100644
--- a/src/Pusher/Contracts/ChannelManager.php
+++ b/src/Protocols/Pusher/Contracts/ChannelManager.php
@@ -1,10 +1,10 @@
 <?php
 
-namespace Laravel\Reverb\Pusher\Contracts;
+namespace Laravel\Reverb\Protocols\Pusher\Contracts;
 
 use Laravel\Reverb\Application;
 use Laravel\Reverb\Contracts\Connection;
-use Laravel\Reverb\Pusher\Channels\Channel;
+use Laravel\Reverb\Protocols\Pusher\Channels\Channel;
 
 interface ChannelManager
 {
@@ -21,7 +21,7 @@ public function for(Application $application): ChannelManager;
     /**
      * Get all the channels.
      *
-     * @return array<string, \Laravel\Reverb\Pusher\Channels\Channel>
+     * @return array<string, \Laravel\Reverb\Protocols\Pusher\Channels\Channel>
      */
     public function all(): array;
 
diff --git a/src/Pusher/Event.php b/src/Protocols/Pusher/Event.php
similarity index 95%
rename from src/Pusher/Event.php
rename to src/Protocols/Pusher/Event.php
index e011cb09..91053113 100644
--- a/src/Pusher/Event.php
+++ b/src/Protocols/Pusher/Event.php
@@ -1,12 +1,12 @@
 <?php
 
-namespace Laravel\Reverb\Pusher;
+namespace Laravel\Reverb\Protocols\Pusher;
 
 use Exception;
 use Illuminate\Support\Str;
-use Laravel\Reverb\Pusher\Channels\CacheChannel;
-use Laravel\Reverb\Pusher\Channels\Channel;
-use Laravel\Reverb\Pusher\Contracts\ChannelManager;
+use Laravel\Reverb\Protocols\Pusher\Channels\CacheChannel;
+use Laravel\Reverb\Protocols\Pusher\Channels\Channel;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelManager;
 use Laravel\Reverb\Contracts\Connection;
 
 class Event
diff --git a/src/Pusher/EventDispatcher.php b/src/Protocols/Pusher/EventDispatcher.php
similarity index 92%
rename from src/Pusher/EventDispatcher.php
rename to src/Protocols/Pusher/EventDispatcher.php
index d227fce1..6f50ed5b 100644
--- a/src/Pusher/EventDispatcher.php
+++ b/src/Protocols/Pusher/EventDispatcher.php
@@ -1,10 +1,10 @@
 <?php
 
-namespace Laravel\Reverb\Pusher;
+namespace Laravel\Reverb\Protocols\Pusher;
 
 use Illuminate\Support\Arr;
 use Laravel\Reverb\Application;
-use Laravel\Reverb\Pusher\Contracts\ChannelManager;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelManager;
 use Laravel\Reverb\Contracts\Connection;
 use Laravel\Reverb\ServerManager;
 
diff --git a/src/Pusher/Exceptions/ConnectionUnauthorized.php b/src/Protocols/Pusher/Exceptions/ConnectionUnauthorized.php
similarity index 86%
rename from src/Pusher/Exceptions/ConnectionUnauthorized.php
rename to src/Protocols/Pusher/Exceptions/ConnectionUnauthorized.php
index 59ce9274..cbc46fe7 100644
--- a/src/Pusher/Exceptions/ConnectionUnauthorized.php
+++ b/src/Protocols/Pusher/Exceptions/ConnectionUnauthorized.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Laravel\Reverb\Pusher\Exceptions;
+namespace Laravel\Reverb\Protocols\Pusher\Exceptions;
 
 class ConnectionUnauthorized extends PusherException
 {
diff --git a/src/Pusher/Exceptions/InvalidOrigin.php b/src/Protocols/Pusher/Exceptions/InvalidOrigin.php
similarity index 73%
rename from src/Pusher/Exceptions/InvalidOrigin.php
rename to src/Protocols/Pusher/Exceptions/InvalidOrigin.php
index a5e61c6c..3d771250 100644
--- a/src/Pusher/Exceptions/InvalidOrigin.php
+++ b/src/Protocols/Pusher/Exceptions/InvalidOrigin.php
@@ -1,8 +1,8 @@
 <?php
 
-namespace Laravel\Reverb\Pusher\Exceptions;
+namespace Laravel\Reverb\Protocols\Pusher\Exceptions;
 
-use Laravel\Reverb\Pusher\Exceptions\PusherException;
+use Laravel\Reverb\Protocols\Pusher\Exceptions\PusherException;
 
 class InvalidOrigin extends PusherException
 {
diff --git a/src/Pusher/Exceptions/PusherException.php b/src/Protocols/Pusher/Exceptions/PusherException.php
similarity index 93%
rename from src/Pusher/Exceptions/PusherException.php
rename to src/Protocols/Pusher/Exceptions/PusherException.php
index 4158a82d..cd051ae5 100644
--- a/src/Pusher/Exceptions/PusherException.php
+++ b/src/Protocols/Pusher/Exceptions/PusherException.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Laravel\Reverb\Pusher\Exceptions;
+namespace Laravel\Reverb\Protocols\Pusher\Exceptions;
 
 use Exception;
 
diff --git a/src/Pusher/Http/Controllers/ChannelController.php b/src/Protocols/Pusher/Http/Controllers/ChannelController.php
similarity index 81%
rename from src/Pusher/Http/Controllers/ChannelController.php
rename to src/Protocols/Pusher/Http/Controllers/ChannelController.php
index c69be696..49896562 100644
--- a/src/Pusher/Http/Controllers/ChannelController.php
+++ b/src/Protocols/Pusher/Http/Controllers/ChannelController.php
@@ -1,9 +1,9 @@
 <?php
 
-namespace Laravel\Reverb\Pusher\Http\Controllers;
+namespace Laravel\Reverb\Protocols\Pusher\Http\Controllers;
 
 use Laravel\Reverb\Servers\Reverb\Http\Connection;
-use Laravel\Reverb\Pusher\Concerns\InteractsWithChannelInformation;
+use Laravel\Reverb\Protocols\Pusher\Concerns\InteractsWithChannelInformation;
 use Psr\Http\Message\RequestInterface;
 use Symfony\Component\HttpFoundation\JsonResponse;
 use Symfony\Component\HttpFoundation\Response;
diff --git a/src/Pusher/Http/Controllers/ChannelUsersController.php b/src/Protocols/Pusher/Http/Controllers/ChannelUsersController.php
similarity index 88%
rename from src/Pusher/Http/Controllers/ChannelUsersController.php
rename to src/Protocols/Pusher/Http/Controllers/ChannelUsersController.php
index d8810f77..edc3890a 100644
--- a/src/Pusher/Http/Controllers/ChannelUsersController.php
+++ b/src/Protocols/Pusher/Http/Controllers/ChannelUsersController.php
@@ -1,9 +1,9 @@
 <?php
 
-namespace Laravel\Reverb\Pusher\Http\Controllers;
+namespace Laravel\Reverb\Protocols\Pusher\Http\Controllers;
 
 use Laravel\Reverb\Servers\Reverb\Http\Connection;
-use Laravel\Reverb\Pusher\Concerns\InteractsWithChannelInformation;
+use Laravel\Reverb\Protocols\Pusher\Concerns\InteractsWithChannelInformation;
 use Psr\Http\Message\RequestInterface;
 use Symfony\Component\HttpFoundation\JsonResponse;
 use Symfony\Component\HttpFoundation\Response;
diff --git a/src/Pusher/Http/Controllers/ChannelsController.php b/src/Protocols/Pusher/Http/Controllers/ChannelsController.php
similarity index 89%
rename from src/Pusher/Http/Controllers/ChannelsController.php
rename to src/Protocols/Pusher/Http/Controllers/ChannelsController.php
index 71841439..e47aa910 100644
--- a/src/Pusher/Http/Controllers/ChannelsController.php
+++ b/src/Protocols/Pusher/Http/Controllers/ChannelsController.php
@@ -1,10 +1,10 @@
 <?php
 
-namespace Laravel\Reverb\Pusher\Http\Controllers;
+namespace Laravel\Reverb\Protocols\Pusher\Http\Controllers;
 
 use Illuminate\Support\Str;
 use Laravel\Reverb\Servers\Reverb\Http\Connection;
-use Laravel\Reverb\Pusher\Concerns\InteractsWithChannelInformation;
+use Laravel\Reverb\Protocols\Pusher\Concerns\InteractsWithChannelInformation;
 use Psr\Http\Message\RequestInterface;
 use Symfony\Component\HttpFoundation\JsonResponse;
 use Symfony\Component\HttpFoundation\Response;
diff --git a/src/Pusher/Http/Controllers/Controller.php b/src/Protocols/Pusher/Http/Controllers/Controller.php
similarity index 96%
rename from src/Pusher/Http/Controllers/Controller.php
rename to src/Protocols/Pusher/Http/Controllers/Controller.php
index d1c2dbd8..d4aa14b7 100644
--- a/src/Pusher/Http/Controllers/Controller.php
+++ b/src/Protocols/Pusher/Http/Controllers/Controller.php
@@ -1,12 +1,12 @@
 <?php
 
-namespace Laravel\Reverb\Pusher\Http\Controllers;
+namespace Laravel\Reverb\Protocols\Pusher\Http\Controllers;
 
 use Illuminate\Support\Arr;
 use Laravel\Reverb\Application;
 use Laravel\Reverb\Servers\Reverb\Concerns\ClosesConnections;
 use Laravel\Reverb\Contracts\ApplicationProvider;
-use Laravel\Reverb\Pusher\Contracts\ChannelManager;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelManager;
 use Laravel\Reverb\Exceptions\InvalidApplication;
 use Laravel\Reverb\Servers\Reverb\Http\Connection;
 use Psr\Http\Message\RequestInterface;
diff --git a/src/Pusher/Http/Controllers/EventsBatchController.php b/src/Protocols/Pusher/Http/Controllers/EventsBatchController.php
similarity index 93%
rename from src/Pusher/Http/Controllers/EventsBatchController.php
rename to src/Protocols/Pusher/Http/Controllers/EventsBatchController.php
index 3122d65e..564b632e 100644
--- a/src/Pusher/Http/Controllers/EventsBatchController.php
+++ b/src/Protocols/Pusher/Http/Controllers/EventsBatchController.php
@@ -1,12 +1,12 @@
 <?php
 
-namespace Laravel\Reverb\Pusher\Http\Controllers;
+namespace Laravel\Reverb\Protocols\Pusher\Http\Controllers;
 
 use Illuminate\Contracts\Validation\Validator;
 use Illuminate\Support\Facades\Validator as ValidatorFacade;
-use Laravel\Reverb\Pusher\EventDispatcher;
+use Laravel\Reverb\Protocols\Pusher\EventDispatcher;
 use Laravel\Reverb\Servers\Reverb\Http\Connection;
-use Laravel\Reverb\Pusher\Concerns\InteractsWithChannelInformation;
+use Laravel\Reverb\Protocols\Pusher\Concerns\InteractsWithChannelInformation;
 use Psr\Http\Message\RequestInterface;
 use Symfony\Component\HttpFoundation\JsonResponse;
 use Symfony\Component\HttpFoundation\Response;
diff --git a/src/Pusher/Http/Controllers/EventsController.php b/src/Protocols/Pusher/Http/Controllers/EventsController.php
similarity index 91%
rename from src/Pusher/Http/Controllers/EventsController.php
rename to src/Protocols/Pusher/Http/Controllers/EventsController.php
index dd25608f..7832cf44 100644
--- a/src/Pusher/Http/Controllers/EventsController.php
+++ b/src/Protocols/Pusher/Http/Controllers/EventsController.php
@@ -1,13 +1,13 @@
 <?php
 
-namespace Laravel\Reverb\Pusher\Http\Controllers;
+namespace Laravel\Reverb\Protocols\Pusher\Http\Controllers;
 
 use Illuminate\Contracts\Validation\Validator;
 use Illuminate\Support\Arr;
 use Illuminate\Support\Facades\Validator as ValidatorFacade;
-use Laravel\Reverb\Pusher\EventDispatcher;
+use Laravel\Reverb\Protocols\Pusher\EventDispatcher;
 use Laravel\Reverb\Servers\Reverb\Http\Connection;
-use Laravel\Reverb\Pusher\Concerns\InteractsWithChannelInformation;
+use Laravel\Reverb\Protocols\Pusher\Concerns\InteractsWithChannelInformation;
 use Psr\Http\Message\RequestInterface;
 use Symfony\Component\HttpFoundation\JsonResponse;
 use Symfony\Component\HttpFoundation\Response;
diff --git a/src/Pusher/Http/Controllers/PusherController.php b/src/Protocols/Pusher/Http/Controllers/PusherController.php
similarity index 93%
rename from src/Pusher/Http/Controllers/PusherController.php
rename to src/Protocols/Pusher/Http/Controllers/PusherController.php
index 94c9310a..e2670c4d 100644
--- a/src/Pusher/Http/Controllers/PusherController.php
+++ b/src/Protocols/Pusher/Http/Controllers/PusherController.php
@@ -1,10 +1,10 @@
 <?php
 
-namespace Laravel\Reverb\Pusher\Http\Controllers;
+namespace Laravel\Reverb\Protocols\Pusher\Http\Controllers;
 
 use Laravel\Reverb\Contracts\ApplicationProvider;
 use Laravel\Reverb\Exceptions\InvalidApplication;
-use Laravel\Reverb\Pusher\Server as PusherServer;
+use Laravel\Reverb\Protocols\Pusher\Server as PusherServer;
 use Laravel\Reverb\Connection as ReverbConnection;
 use Laravel\Reverb\Servers\Reverb\Connection;
 use Psr\Http\Message\RequestInterface;
diff --git a/src/Pusher/Http/Controllers/UsersTerminateController.php b/src/Protocols/Pusher/Http/Controllers/UsersTerminateController.php
similarity index 93%
rename from src/Pusher/Http/Controllers/UsersTerminateController.php
rename to src/Protocols/Pusher/Http/Controllers/UsersTerminateController.php
index 554cc839..3dd2ec96 100644
--- a/src/Pusher/Http/Controllers/UsersTerminateController.php
+++ b/src/Protocols/Pusher/Http/Controllers/UsersTerminateController.php
@@ -1,6 +1,6 @@
 <?php
 
-namespace Laravel\Reverb\Pusher\Http\Controllers;
+namespace Laravel\Reverb\Protocols\Pusher\Http\Controllers;
 
 use Laravel\Reverb\Servers\Reverb\Http\Connection;
 use Psr\Http\Message\RequestInterface;
diff --git a/src/Pusher/Managers/ArrayChannelConnectionManager.php b/src/Protocols/Pusher/Managers/ArrayChannelConnectionManager.php
similarity index 90%
rename from src/Pusher/Managers/ArrayChannelConnectionManager.php
rename to src/Protocols/Pusher/Managers/ArrayChannelConnectionManager.php
index 4f3b1547..3e6b4d76 100644
--- a/src/Pusher/Managers/ArrayChannelConnectionManager.php
+++ b/src/Protocols/Pusher/Managers/ArrayChannelConnectionManager.php
@@ -1,10 +1,10 @@
 <?php
 
-namespace Laravel\Reverb\Pusher\Managers;
+namespace Laravel\Reverb\Protocols\Pusher\Managers;
 
-use Laravel\Reverb\Pusher\Contracts\ChannelConnectionManager;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelConnectionManager;
 use Laravel\Reverb\Contracts\Connection;
-use Laravel\Reverb\Pusher\Channels\ChannelConnection;
+use Laravel\Reverb\Protocols\Pusher\Channels\ChannelConnection;
 
 class ArrayChannelConnectionManager implements ChannelConnectionManager
 {
diff --git a/src/Pusher/Managers/ArrayChannelManager.php b/src/Protocols/Pusher/Managers/ArrayChannelManager.php
similarity index 86%
rename from src/Pusher/Managers/ArrayChannelManager.php
rename to src/Protocols/Pusher/Managers/ArrayChannelManager.php
index 7236db34..7154b9d3 100644
--- a/src/Pusher/Managers/ArrayChannelManager.php
+++ b/src/Protocols/Pusher/Managers/ArrayChannelManager.php
@@ -1,14 +1,14 @@
 <?php
 
-namespace Laravel\Reverb\Pusher\Managers;
+namespace Laravel\Reverb\Protocols\Pusher\Managers;
 
 use Illuminate\Support\Arr;
 use Laravel\Reverb\Application;
-use Laravel\Reverb\Pusher\Channels\Channel;
-use Laravel\Reverb\Pusher\Channels\ChannelBroker;
+use Laravel\Reverb\Protocols\Pusher\Channels\Channel;
+use Laravel\Reverb\Protocols\Pusher\Channels\ChannelBroker;
 use Laravel\Reverb\Concerns\InteractsWithApplications;
 use Laravel\Reverb\Contracts\ApplicationProvider;
-use Laravel\Reverb\Pusher\Contracts\ChannelManager as ChannelManagerInterface;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelManager as ChannelManagerInterface;
 use Laravel\Reverb\Contracts\Connection;
 
 class ArrayChannelManager implements ChannelManagerInterface
@@ -18,7 +18,7 @@ class ArrayChannelManager implements ChannelManagerInterface
     /**
      * Application store.
      *
-     * @var array<string, array<string, array<string, \Laravel\Reverb\Pusher\Channels\Channel>>>
+     * @var array<string, array<string, array<string, \Laravel\Reverb\Protocols\Pusher\Channels\Channel>>>
      */
     protected $applications = [];
 
@@ -40,7 +40,7 @@ public function app(): ?Application
     /**
      * Get all the channels.
      *
-     * @return array<string, \Laravel\Reverb\Pusher\Channels\Channel>
+     * @return array<string, \Laravel\Reverb\Protocols\Pusher\Channels\Channel>
      */
     public function all(): array
     {
@@ -114,7 +114,7 @@ public function channel(string $channel): Channel
     /**
      * Get the channels.
      *
-     * @return \Laravel\Reverb\Pusher\Channels\Channel|array<string, \Laravel\Reverb\Pusher\Channels\Channel>
+     * @return \Laravel\Reverb\Protocols\Pusher\Channels\Channel|array<string, \Laravel\Reverb\Protocols\Pusher\Channels\Channel>
      */
     public function channels(?string $channel = null): Channel|array|null
     {
diff --git a/src/Pusher/Managers/CacheChannelConnectionManager.php b/src/Protocols/Pusher/Managers/CacheChannelConnectionManager.php
similarity index 94%
rename from src/Pusher/Managers/CacheChannelConnectionManager.php
rename to src/Protocols/Pusher/Managers/CacheChannelConnectionManager.php
index 3eca3f2a..9f34a187 100644
--- a/src/Pusher/Managers/CacheChannelConnectionManager.php
+++ b/src/Protocols/Pusher/Managers/CacheChannelConnectionManager.php
@@ -1,12 +1,12 @@
 <?php
 
-namespace Laravel\Reverb\Pusher\Managers;
+namespace Laravel\Reverb\Protocols\Pusher\Managers;
 
 use Illuminate\Contracts\Cache\Repository;
-use Laravel\Reverb\Pusher\Contracts\ChannelConnectionManager;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelConnectionManager;
 use Laravel\Reverb\Contracts\Connection;
 use Laravel\Reverb\Contracts\ConnectionManager;
-use Laravel\Reverb\Pusher\Channels\ChannelConnection;
+use Laravel\Reverb\Protocols\Pusher\Channels\ChannelConnection;
 
 class CacheChannelConnectionManager implements ChannelConnectionManager
 {
diff --git a/src/Pusher/Managers/CacheChannelManager.php b/src/Protocols/Pusher/Managers/CacheChannelManager.php
similarity index 88%
rename from src/Pusher/Managers/CacheChannelManager.php
rename to src/Protocols/Pusher/Managers/CacheChannelManager.php
index cf2891d1..ff72094a 100644
--- a/src/Pusher/Managers/CacheChannelManager.php
+++ b/src/Protocols/Pusher/Managers/CacheChannelManager.php
@@ -1,14 +1,14 @@
 <?php
 
-namespace Laravel\Reverb\Pusher\Managers;
+namespace Laravel\Reverb\Protocols\Pusher\Managers;
 
 use Illuminate\Contracts\Cache\Repository;
 use Illuminate\Support\Arr;
 use Laravel\Reverb\Application;
-use Laravel\Reverb\Pusher\Channels\Channel;
-use Laravel\Reverb\Pusher\Channels\ChannelBroker;
+use Laravel\Reverb\Protocols\Pusher\Channels\Channel;
+use Laravel\Reverb\Protocols\Pusher\Channels\ChannelBroker;
 use Laravel\Reverb\Concerns\InteractsWithApplications;
-use Laravel\Reverb\Pusher\Contracts\ChannelManager as ChannelManagerInterface;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelManager as ChannelManagerInterface;
 use Laravel\Reverb\Contracts\Connection;
 
 class CacheChannelManager implements ChannelManagerInterface
@@ -41,7 +41,7 @@ public function app(): ?Application
     /**
      * Get all the channels.
      *
-     * @return array<string, \Laravel\Reverb\Pusher\Channels\Channel>
+     * @return array<string, \Laravel\Reverb\Protocols\Pusher\Channels\Channel>
      */
     public function all(): array
     {
@@ -120,7 +120,7 @@ public function channel(string $channel): Channel
     /**
      * Get the channels.
      *
-     * @return \Laravel\Reverb\Pusher\Channels\Channel|array<string, \Laravel\Reverb\Pusher\Channels\Channel>
+     * @return \Laravel\Reverb\Protocols\Pusher\Channels\Channel|array<string, \Laravel\Reverb\Protocols\Pusher\Channels\Channel>
      */
     public function channels(?string $channel = null): Channel|array|null
     {
diff --git a/src/Pusher/Server.php b/src/Protocols/Pusher/Server.php
similarity index 91%
rename from src/Pusher/Server.php
rename to src/Protocols/Pusher/Server.php
index 3ea4b342..40be7907 100644
--- a/src/Pusher/Server.php
+++ b/src/Protocols/Pusher/Server.php
@@ -1,15 +1,15 @@
 <?php
 
-namespace Laravel\Reverb\Pusher;
+namespace Laravel\Reverb\Protocols\Pusher;
 
 use Exception;
 use Illuminate\Support\Str;
 use Laravel\Reverb\Contracts\Connection;
 use Laravel\Reverb\Loggers\Log;
-use Laravel\Reverb\Pusher\Contracts\ChannelManager;
-use Laravel\Reverb\Pusher\Event as PusherEvent;
-use Laravel\Reverb\Pusher\Exceptions\InvalidOrigin;
-use Laravel\Reverb\Pusher\Exceptions\PusherException;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelManager;
+use Laravel\Reverb\Protocols\Pusher\Event as PusherEvent;
+use Laravel\Reverb\Protocols\Pusher\Exceptions\InvalidOrigin;
+use Laravel\Reverb\Protocols\Pusher\Exceptions\PusherException;
 
 class Server
 {
diff --git a/src/Pusher/Channels/PresenceCacheChannel.php b/src/Pusher/Channels/PresenceCacheChannel.php
deleted file mode 100644
index 65a67380..00000000
--- a/src/Pusher/Channels/PresenceCacheChannel.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
-namespace Laravel\Reverb\Pusher\Channels;
-
-use Laravel\Reverb\Pusher\Channels\Concerns\InteractsWithPresenceChannels;
-
-class PresenceCacheChannel extends CacheChannel
-{
-    use InteractsWithPresenceChannels;
-}
diff --git a/src/Pusher/Channels/PresenceChannel.php b/src/Pusher/Channels/PresenceChannel.php
deleted file mode 100644
index 3fae26b3..00000000
--- a/src/Pusher/Channels/PresenceChannel.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
-namespace Laravel\Reverb\Pusher\Channels;
-
-use Laravel\Reverb\Pusher\Channels\Concerns\InteractsWithPresenceChannels;
-
-class PresenceChannel extends PrivateChannel
-{
-    use InteractsWithPresenceChannels;
-}
diff --git a/src/Pusher/Channels/PrivateCacheChannel.php b/src/Pusher/Channels/PrivateCacheChannel.php
deleted file mode 100644
index 3dd9aeb5..00000000
--- a/src/Pusher/Channels/PrivateCacheChannel.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
-namespace Laravel\Reverb\Pusher\Channels;
-
-use Laravel\Reverb\Pusher\Channels\Concerns\InteractsWithPrivateChannels;
-
-class PrivateCacheChannel extends CacheChannel
-{
-    use InteractsWithPrivateChannels;
-}
diff --git a/src/Pusher/Channels/PrivateChannel.php b/src/Pusher/Channels/PrivateChannel.php
deleted file mode 100644
index 3c4d4025..00000000
--- a/src/Pusher/Channels/PrivateChannel.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
-namespace Laravel\Reverb\Pusher\Channels;
-
-use Laravel\Reverb\Pusher\Channels\Concerns\InteractsWithPrivateChannels;
-
-class PrivateChannel extends Channel
-{
-    use InteractsWithPrivateChannels;
-}
diff --git a/src/Servers/ApiGateway/ApiGatewayProvider.php b/src/Servers/ApiGateway/ApiGatewayProvider.php
index 2d545d89..0c4852b2 100644
--- a/src/Servers/ApiGateway/ApiGatewayProvider.php
+++ b/src/Servers/ApiGateway/ApiGatewayProvider.php
@@ -8,15 +8,15 @@
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Route;
 use Laravel\Reverb\Contracts\ApplicationProvider;
-use Laravel\Reverb\Pusher\Contracts\ChannelConnectionManager;
-use Laravel\Reverb\Pusher\Contracts\ChannelManager;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelConnectionManager;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelManager;
 use Laravel\Reverb\Contracts\ConnectionManager;
 use Laravel\Reverb\Contracts\ServerProvider;
-use Laravel\Reverb\Pusher\EventDispatcher;
+use Laravel\Reverb\Protocols\Pusher\EventDispatcher;
 use Laravel\Reverb\Jobs\PingInactiveConnections;
 use Laravel\Reverb\Jobs\PruneStaleConnections;
-use Laravel\Reverb\Pusher\Managers\CacheChannelConnectionManager;
-use Laravel\Reverb\Pusher\Managers\CacheChannelManager;
+use Laravel\Reverb\Protocols\Pusher\Managers\CacheChannelConnectionManager;
+use Laravel\Reverb\Protocols\Pusher\Managers\CacheChannelManager;
 use Laravel\Reverb\CacheConnectionManager;
 
 class ApiGatewayProvider extends ServerProvider
diff --git a/src/Servers/ApiGateway/Server.php b/src/Servers/ApiGateway/Server.php
index 014dd8ed..769f14fa 100644
--- a/src/Servers/ApiGateway/Server.php
+++ b/src/Servers/ApiGateway/Server.php
@@ -7,7 +7,7 @@
 use Laravel\Reverb\Contracts\ApplicationProvider;
 use Laravel\Reverb\Contracts\ConnectionManager;
 use Laravel\Reverb\Exceptions\InvalidApplication;
-use Laravel\Reverb\Pusher\Server as PusherServer;
+use Laravel\Reverb\Protocols\Pusher\Server as PusherServer;
 use Laravel\Reverb\Servers\ApiGateway\Jobs\SendToConnection;
 
 class Server
diff --git a/src/Servers/Reverb/Factory.php b/src/Servers/Reverb/Factory.php
index 16d6d9df..38fab045 100644
--- a/src/Servers/Reverb/Factory.php
+++ b/src/Servers/Reverb/Factory.php
@@ -6,20 +6,20 @@
 use Laravel\Reverb\Servers\Reverb\Http\Route;
 use Laravel\Reverb\Servers\Reverb\Http\Router;
 use Laravel\Reverb\Servers\Reverb\Http\Server as HttpServer;
-use Laravel\Reverb\Pusher\Http\Controllers\ChannelController;
-use Laravel\Reverb\Pusher\Http\Controllers\ChannelsController;
-use Laravel\Reverb\Pusher\Http\Controllers\ChannelUsersController;
-use Laravel\Reverb\Pusher\Http\Controllers\EventsBatchController;
-use Laravel\Reverb\Pusher\Http\Controllers\EventsController;
-use Laravel\Reverb\Pusher\Http\Controllers\UsersTerminateController;
-use Laravel\Reverb\Pusher\Server as PusherServer;
+use Laravel\Reverb\Protocols\Pusher\Http\Controllers\ChannelController;
+use Laravel\Reverb\Protocols\Pusher\Http\Controllers\ChannelsController;
+use Laravel\Reverb\Protocols\Pusher\Http\Controllers\ChannelUsersController;
+use Laravel\Reverb\Protocols\Pusher\Http\Controllers\EventsBatchController;
+use Laravel\Reverb\Protocols\Pusher\Http\Controllers\EventsController;
+use Laravel\Reverb\Protocols\Pusher\Http\Controllers\UsersTerminateController;
+use Laravel\Reverb\Protocols\Pusher\Server as PusherServer;
 use React\EventLoop\Loop;
 use React\EventLoop\LoopInterface;
 use React\Socket\SocketServer;
 use Symfony\Component\Routing\Matcher\UrlMatcher;
 use Symfony\Component\Routing\RequestContext;
 use Symfony\Component\Routing\RouteCollection;
-use Laravel\Reverb\Pusher\Http\Controllers\PusherController;
+use Laravel\Reverb\Protocols\Pusher\Http\Controllers\PusherController;
 
 class Factory
 {
diff --git a/src/Servers/Reverb/ReverbProvider.php b/src/Servers/Reverb/ReverbProvider.php
index 8241a5db..06898cc7 100644
--- a/src/Servers/Reverb/ReverbProvider.php
+++ b/src/Servers/Reverb/ReverbProvider.php
@@ -7,12 +7,12 @@
 use Illuminate\Console\Application as Artisan;
 use Illuminate\Contracts\Foundation\Application;
 use Laravel\Reverb\Concerns\InteractsWithAsyncRedis;
-use Laravel\Reverb\Pusher\Contracts\ChannelConnectionManager;
-use Laravel\Reverb\Pusher\Contracts\ChannelManager;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelConnectionManager;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelManager;
 use Laravel\Reverb\Contracts\ServerProvider;
-use Laravel\Reverb\Pusher\EventDispatcher;
-use Laravel\Reverb\Pusher\Managers\ArrayChannelConnectionManager;
-use Laravel\Reverb\Pusher\Managers\ArrayChannelManager;
+use Laravel\Reverb\Protocols\Pusher\EventDispatcher;
+use Laravel\Reverb\Protocols\Pusher\Managers\ArrayChannelConnectionManager;
+use Laravel\Reverb\Protocols\Pusher\Managers\ArrayChannelManager;
 use Laravel\Reverb\Servers\Reverb\Console\Commands\StartServer;
 use React\EventLoop\LoopInterface;
 
diff --git a/src/ServiceProvider.php b/src/ServiceProvider.php
index 1b05ba6a..49db55b7 100644
--- a/src/ServiceProvider.php
+++ b/src/ServiceProvider.php
@@ -3,8 +3,8 @@
 namespace Laravel\Reverb;
 
 use Illuminate\Support\ServiceProvider as BaseServiceProvider;
-use Laravel\Reverb\Pusher\Contracts\ChannelConnectionManager;
-use Laravel\Reverb\Pusher\Contracts\ChannelManager;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelConnectionManager;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelManager;
 use Laravel\Reverb\Contracts\Logger;
 use Laravel\Reverb\Loggers\NullLogger;
 
diff --git a/tests/Feature/Reverb/ChannelUsersControllerTest.php b/tests/Feature/Reverb/ChannelUsersControllerTest.php
index e89202cb..f549ba60 100644
--- a/tests/Feature/Reverb/ChannelUsersControllerTest.php
+++ b/tests/Feature/Reverb/ChannelUsersControllerTest.php
@@ -1,7 +1,7 @@
 <?php
 
 use Laravel\Reverb\Contracts\ApplicationProvider;
-use Laravel\Reverb\Pusher\Contracts\ChannelManager;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelManager;
 use Laravel\Reverb\Tests\FakeConnection;
 use Laravel\Reverb\Tests\ReverbTestCase;
 use React\Http\Message\ResponseException;
diff --git a/tests/Feature/ServerTest.php b/tests/Feature/ServerTest.php
index eadba7f7..7ccab35d 100644
--- a/tests/Feature/ServerTest.php
+++ b/tests/Feature/ServerTest.php
@@ -1,7 +1,7 @@
 <?php
 
-use Laravel\Reverb\Pusher\Contracts\ChannelManager;
-use Laravel\Reverb\Pusher\Server;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelManager;
+use Laravel\Reverb\Protocols\Pusher\Server;
 use Laravel\Reverb\Tests\FakeConnection;
 use Laravel\Reverb\Tests\TestCase;
 
diff --git a/tests/Pest.php b/tests/Pest.php
index 1aa3d466..00e79ab7 100644
--- a/tests/Pest.php
+++ b/tests/Pest.php
@@ -3,9 +3,9 @@
 use Illuminate\Support\Collection;
 use Laravel\Reverb\Application;
 use Laravel\Reverb\Contracts\ApplicationProvider;
-use Laravel\Reverb\Pusher\Contracts\ChannelManager;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelManager;
 use Laravel\Reverb\Managers\Connections;
-use Laravel\Reverb\Pusher\Channels\ChannelConnection;
+use Laravel\Reverb\Protocols\Pusher\Channels\ChannelConnection;
 use Laravel\Reverb\Tests\FakeConnection;
 use Laravel\Reverb\Tests\SerializableConnection;
 use Laravel\Reverb\Tests\TestCase;
diff --git a/tests/ReverbTestCase.php b/tests/ReverbTestCase.php
index 34b463c3..f7aef1db 100644
--- a/tests/ReverbTestCase.php
+++ b/tests/ReverbTestCase.php
@@ -4,7 +4,7 @@
 
 use Illuminate\Support\Str;
 use Laravel\Reverb\Concerns\InteractsWithAsyncRedis;
-use Laravel\Reverb\Pusher\EventDispatcher;
+use Laravel\Reverb\Protocols\Pusher\EventDispatcher;
 use Laravel\Reverb\ServerManager;
 use Laravel\Reverb\Servers\Reverb\Factory;
 use Ratchet\Client\WebSocket;
diff --git a/tests/Unit/Channels/CacheChannelTest.php b/tests/Unit/Channels/CacheChannelTest.php
index 1f0d7876..f1460617 100644
--- a/tests/Unit/Channels/CacheChannelTest.php
+++ b/tests/Unit/Channels/CacheChannelTest.php
@@ -1,8 +1,8 @@
 <?php
 
-use Laravel\Reverb\Pusher\Channels\CacheChannel;
-use Laravel\Reverb\Pusher\Channels\ChannelBroker;
-use Laravel\Reverb\Pusher\Contracts\ChannelConnectionManager;
+use Laravel\Reverb\Protocols\Pusher\Channels\CacheChannel;
+use Laravel\Reverb\Protocols\Pusher\Channels\ChannelBroker;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelConnectionManager;
 use Laravel\Reverb\Tests\FakeConnection;
 
 beforeEach(function () {
diff --git a/tests/Unit/Channels/ChannelBrokerTest.php b/tests/Unit/Channels/ChannelBrokerTest.php
index 4d4abe77..0db22b3f 100644
--- a/tests/Unit/Channels/ChannelBrokerTest.php
+++ b/tests/Unit/Channels/ChannelBrokerTest.php
@@ -1,12 +1,12 @@
 <?php
 
-use Laravel\Reverb\Pusher\Channels\CacheChannel;
-use Laravel\Reverb\Pusher\Channels\Channel;
-use Laravel\Reverb\Pusher\Channels\ChannelBroker;
-use Laravel\Reverb\Pusher\Channels\PresenceCacheChannel;
-use Laravel\Reverb\Pusher\Channels\PresenceChannel;
-use Laravel\Reverb\Pusher\Channels\PrivateCacheChannel;
-use Laravel\Reverb\Pusher\Channels\PrivateChannel;
+use Laravel\Reverb\Protocols\Pusher\Channels\CacheChannel;
+use Laravel\Reverb\Protocols\Pusher\Channels\Channel;
+use Laravel\Reverb\Protocols\Pusher\Channels\ChannelBroker;
+use Laravel\Reverb\Protocols\Pusher\Channels\PresenceCacheChannel;
+use Laravel\Reverb\Protocols\Pusher\Channels\PresenceChannel;
+use Laravel\Reverb\Protocols\Pusher\Channels\PrivateCacheChannel;
+use Laravel\Reverb\Protocols\Pusher\Channels\PrivateChannel;
 
 it('can return a channel instance', function () {
     expect(ChannelBroker::create('foo'))
diff --git a/tests/Unit/Channels/ChannelTest.php b/tests/Unit/Channels/ChannelTest.php
index 17856ebd..e49f7713 100644
--- a/tests/Unit/Channels/ChannelTest.php
+++ b/tests/Unit/Channels/ChannelTest.php
@@ -1,8 +1,8 @@
 <?php
 
-use Laravel\Reverb\Pusher\Channels\Channel;
-use Laravel\Reverb\Pusher\Contracts\ChannelConnectionManager;
-use Laravel\Reverb\Pusher\Contracts\ChannelManager;
+use Laravel\Reverb\Protocols\Pusher\Channels\Channel;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelConnectionManager;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelManager;
 use Laravel\Reverb\Tests\FakeConnection;
 
 beforeEach(function () {
diff --git a/tests/Unit/Channels/PresenceCacheChannelTest.php b/tests/Unit/Channels/PresenceCacheChannelTest.php
index e68ea090..dc73b460 100644
--- a/tests/Unit/Channels/PresenceCacheChannelTest.php
+++ b/tests/Unit/Channels/PresenceCacheChannelTest.php
@@ -1,9 +1,9 @@
 <?php
 
-use Laravel\Reverb\Pusher\Channels\PresenceCacheChannel;
-use Laravel\Reverb\Pusher\Contracts\ChannelConnectionManager;
-use Laravel\Reverb\Pusher\Exceptions\ConnectionUnauthorized;
-use Laravel\Reverb\Pusher\Channels\ChannelConnection;
+use Laravel\Reverb\Protocols\Pusher\Channels\PresenceCacheChannel;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelConnectionManager;
+use Laravel\Reverb\Protocols\Pusher\Exceptions\ConnectionUnauthorized;
+use Laravel\Reverb\Protocols\Pusher\Channels\ChannelConnection;
 use Laravel\Reverb\Tests\FakeConnection;
 
 beforeEach(function () {
diff --git a/tests/Unit/Channels/PresenceChannelTest.php b/tests/Unit/Channels/PresenceChannelTest.php
index 9d388b4c..e07e079b 100644
--- a/tests/Unit/Channels/PresenceChannelTest.php
+++ b/tests/Unit/Channels/PresenceChannelTest.php
@@ -1,9 +1,9 @@
 <?php
 
-use Laravel\Reverb\Pusher\Channels\PresenceChannel;
-use Laravel\Reverb\Pusher\Contracts\ChannelConnectionManager;
-use Laravel\Reverb\Pusher\Exceptions\ConnectionUnauthorized;
-use Laravel\Reverb\Pusher\Channels\ChannelConnection;
+use Laravel\Reverb\Protocols\Pusher\Channels\PresenceChannel;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelConnectionManager;
+use Laravel\Reverb\Protocols\Pusher\Exceptions\ConnectionUnauthorized;
+use Laravel\Reverb\Protocols\Pusher\Channels\ChannelConnection;
 use Laravel\Reverb\Tests\FakeConnection;
 
 beforeEach(function () {
diff --git a/tests/Unit/Channels/PrivateCacheChannelTest.php b/tests/Unit/Channels/PrivateCacheChannelTest.php
index a60f3abe..6d99d6f1 100644
--- a/tests/Unit/Channels/PrivateCacheChannelTest.php
+++ b/tests/Unit/Channels/PrivateCacheChannelTest.php
@@ -1,8 +1,8 @@
 <?php
 
-use Laravel\Reverb\Pusher\Channels\PrivateCacheChannel;
-use Laravel\Reverb\Pusher\Contracts\ChannelConnectionManager;
-use Laravel\Reverb\Pusher\Exceptions\ConnectionUnauthorized;
+use Laravel\Reverb\Protocols\Pusher\Channels\PrivateCacheChannel;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelConnectionManager;
+use Laravel\Reverb\Protocols\Pusher\Exceptions\ConnectionUnauthorized;
 use Laravel\Reverb\Tests\FakeConnection;
 
 beforeEach(function () {
diff --git a/tests/Unit/Channels/PrivateChannelTest.php b/tests/Unit/Channels/PrivateChannelTest.php
index eb5db21f..0299eaf6 100644
--- a/tests/Unit/Channels/PrivateChannelTest.php
+++ b/tests/Unit/Channels/PrivateChannelTest.php
@@ -1,8 +1,8 @@
 <?php
 
-use Laravel\Reverb\Pusher\Channels\PrivateChannel;
-use Laravel\Reverb\Pusher\Contracts\ChannelConnectionManager;
-use Laravel\Reverb\Pusher\Exceptions\ConnectionUnauthorized;
+use Laravel\Reverb\Protocols\Pusher\Channels\PrivateChannel;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelConnectionManager;
+use Laravel\Reverb\Protocols\Pusher\Exceptions\ConnectionUnauthorized;
 use Laravel\Reverb\Tests\FakeConnection;
 
 beforeEach(function () {
diff --git a/tests/Unit/ClientEventTest.php b/tests/Unit/ClientEventTest.php
index b25d7111..a82fa641 100644
--- a/tests/Unit/ClientEventTest.php
+++ b/tests/Unit/ClientEventTest.php
@@ -1,8 +1,8 @@
 <?php
 
-use Laravel\Reverb\Pusher\ClientEvent;
-use Laravel\Reverb\Pusher\Contracts\ChannelConnectionManager;
-use Laravel\Reverb\Pusher\Channels\ChannelConnection;
+use Laravel\Reverb\Protocols\Pusher\ClientEvent;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelConnectionManager;
+use Laravel\Reverb\Protocols\Pusher\Channels\ChannelConnection;
 use Laravel\Reverb\Tests\FakeConnection;
 
 beforeEach(function () {
diff --git a/tests/Unit/EventTest.php b/tests/Unit/EventTest.php
index 4b0b02e9..e00e86d3 100644
--- a/tests/Unit/EventTest.php
+++ b/tests/Unit/EventTest.php
@@ -2,8 +2,8 @@
 
 use Clue\React\Redis\Client;
 use Laravel\Reverb\Contracts\ApplicationProvider;
-use Laravel\Reverb\Pusher\Contracts\ChannelConnectionManager;
-use Laravel\Reverb\Pusher\EventDispatcher;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelConnectionManager;
+use Laravel\Reverb\Protocols\Pusher\EventDispatcher;
 use Laravel\Reverb\ServerManager;
 
 it('can publish an event when enabled', function () {
diff --git a/tests/Unit/Jobs/PingInactiveConnectionsTest.php b/tests/Unit/Jobs/PingInactiveConnectionsTest.php
index 36e14da7..597188d0 100644
--- a/tests/Unit/Jobs/PingInactiveConnectionsTest.php
+++ b/tests/Unit/Jobs/PingInactiveConnectionsTest.php
@@ -1,7 +1,7 @@
 <?php
 
-use Laravel\Reverb\Pusher\Channels\ChannelBroker;
-use Laravel\Reverb\Pusher\Contracts\ChannelManager;
+use Laravel\Reverb\Protocols\Pusher\Channels\ChannelBroker;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelManager;
 use Laravel\Reverb\Jobs\PingInactiveConnections;
 
 beforeEach(function () {
diff --git a/tests/Unit/Jobs/PruneStaleConnectionsTest.php b/tests/Unit/Jobs/PruneStaleConnectionsTest.php
index 1e806aed..2468c0c9 100644
--- a/tests/Unit/Jobs/PruneStaleConnectionsTest.php
+++ b/tests/Unit/Jobs/PruneStaleConnectionsTest.php
@@ -1,7 +1,7 @@
 <?php
 
-use Laravel\Reverb\Pusher\Channels\ChannelBroker;
-use Laravel\Reverb\Pusher\Contracts\ChannelManager;
+use Laravel\Reverb\Protocols\Pusher\Channels\ChannelBroker;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelManager;
 use Laravel\Reverb\Jobs\PruneStaleConnections;
 
 beforeEach(function () {
diff --git a/tests/Unit/Managers/ChannelManagerTest.php b/tests/Unit/Managers/ChannelManagerTest.php
index 5ec2aaff..787f99a9 100644
--- a/tests/Unit/Managers/ChannelManagerTest.php
+++ b/tests/Unit/Managers/ChannelManagerTest.php
@@ -1,6 +1,6 @@
 <?php
 
-use Laravel\Reverb\Pusher\Contracts\ChannelManager;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelManager;
 use Laravel\Reverb\Tests\FakeConnection;
 
 beforeEach(function () {
diff --git a/tests/Unit/Pusher/EventTest.php b/tests/Unit/Pusher/EventTest.php
index 878b5da2..9864277c 100644
--- a/tests/Unit/Pusher/EventTest.php
+++ b/tests/Unit/Pusher/EventTest.php
@@ -1,7 +1,7 @@
 <?php
 
-use Laravel\Reverb\Pusher\Contracts\ChannelManager;
-use Laravel\Reverb\Pusher\Event as PusherEvent;
+use Laravel\Reverb\Protocols\Pusher\Contracts\ChannelManager;
+use Laravel\Reverb\Protocols\Pusher\Event as PusherEvent;
 use Laravel\Reverb\Tests\FakeConnection;
 
 beforeEach(function () {