From d52316c821083ca2804ee64e49e28edcc61ef24f Mon Sep 17 00:00:00 2001 From: Taylor Otwell Date: Tue, 3 Jun 2025 15:48:23 -0500 Subject: [PATCH 1/7] v2.1.5 --- packages/laravel-echo/package.json | 2 +- packages/react/package.json | 2 +- packages/vue/package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/laravel-echo/package.json b/packages/laravel-echo/package.json index bfb1a53f..4b3a327f 100644 --- a/packages/laravel-echo/package.json +++ b/packages/laravel-echo/package.json @@ -1,6 +1,6 @@ { "name": "laravel-echo", - "version": "2.1.4", + "version": "2.1.5", "description": "Laravel Echo library for beautiful Pusher and Socket.IO integration", "keywords": [ "laravel", diff --git a/packages/react/package.json b/packages/react/package.json index a80be836..94eba43e 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@laravel/echo-react", - "version": "2.1.4", + "version": "2.1.5", "description": "React hooks for seamless integration with Laravel Echo.", "keywords": [ "laravel", diff --git a/packages/vue/package.json b/packages/vue/package.json index 6176f773..3d0e85b6 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "@laravel/echo-vue", - "version": "2.1.4", + "version": "2.1.5", "description": "Vue hooks for seamless integration with Laravel Echo.", "keywords": [ "laravel", From c350847b4448b1c75c1e7d490c0e019e3546b8cd Mon Sep 17 00:00:00 2001 From: joetannenbaum <2702148+joetannenbaum@users.noreply.github.com> Date: Tue, 3 Jun 2025 21:08:07 +0000 Subject: [PATCH 2/7] Update CHANGELOG --- CHANGELOG.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 434f3e35..7ae0155a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,15 @@ # Release Notes -## [Unreleased](https://github.com/laravel/echo/compare/v2.1.4...2.x) +## [Unreleased](https://github.com/laravel/echo/compare/v2.1.5...2.x) + +## [v2.1.5](https://github.com/laravel/echo/compare/v2.1.4...v2.1.5) - 2025-06-03 + +### What's Changed + +* Revert CSRF logic by [@joetannenbaum](https://github.com/joetannenbaum) in https://github.com/laravel/echo/pull/442 +* Added useEchoNotification hook by [@joetannenbaum](https://github.com/joetannenbaum) in https://github.com/laravel/echo/pull/443 + +**Full Changelog**: https://github.com/laravel/echo/compare/v2.1.4...v2.1.5 ## [v2.1.4](https://github.com/laravel/echo/compare/v2.1.3...v2.1.4) - 2025-05-15 From 33b7d12d7f5202ae7a580f4a87f3a8f2187b6c6d Mon Sep 17 00:00:00 2001 From: electron Date: Mon, 16 Jun 2025 16:27:58 +0300 Subject: [PATCH 3/7] Fix subscriptions not being restored on reconnect (#446) Starting from Socket IO 3.x connection state events are triggered only by socket manager Co-authored-by: electron93 <1076914+electron93@users.noreply.github.com> --- packages/laravel-echo/src/connector/socketio-connector.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/laravel-echo/src/connector/socketio-connector.ts b/packages/laravel-echo/src/connector/socketio-connector.ts index da127f83..7316c139 100644 --- a/packages/laravel-echo/src/connector/socketio-connector.ts +++ b/packages/laravel-echo/src/connector/socketio-connector.ts @@ -46,7 +46,7 @@ export class SocketIoConnector extends Connector< this.options as Partial, ); - this.socket.on("reconnect", () => { + this.socket.io.on("reconnect", () => { Object.values(this.channels).forEach((channel) => { channel.subscribe(); }); From 43232edf228bbb368c1d03416c0083b75964d00e Mon Sep 17 00:00:00 2001 From: Taylor Otwell Date: Tue, 17 Jun 2025 12:08:34 -0500 Subject: [PATCH 4/7] v2.1.6 --- packages/laravel-echo/package.json | 2 +- packages/react/package.json | 2 +- packages/vue/package.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/laravel-echo/package.json b/packages/laravel-echo/package.json index 4b3a327f..d926527e 100644 --- a/packages/laravel-echo/package.json +++ b/packages/laravel-echo/package.json @@ -1,6 +1,6 @@ { "name": "laravel-echo", - "version": "2.1.5", + "version": "2.1.6", "description": "Laravel Echo library for beautiful Pusher and Socket.IO integration", "keywords": [ "laravel", diff --git a/packages/react/package.json b/packages/react/package.json index 94eba43e..de2b4012 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@laravel/echo-react", - "version": "2.1.5", + "version": "2.1.6", "description": "React hooks for seamless integration with Laravel Echo.", "keywords": [ "laravel", diff --git a/packages/vue/package.json b/packages/vue/package.json index 3d0e85b6..7b85f93d 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "@laravel/echo-vue", - "version": "2.1.5", + "version": "2.1.6", "description": "Vue hooks for seamless integration with Laravel Echo.", "keywords": [ "laravel", From fb3253e9961cf256d8f4fbc567fd0392beb46bb5 Mon Sep 17 00:00:00 2001 From: taylorotwell <463230+taylorotwell@users.noreply.github.com> Date: Tue, 17 Jun 2025 17:09:46 +0000 Subject: [PATCH 5/7] Update CHANGELOG --- CHANGELOG.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ae0155a..9710144d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ # Release Notes -## [Unreleased](https://github.com/laravel/echo/compare/v2.1.5...2.x) +## [Unreleased](https://github.com/laravel/echo/compare/v2.1.6...2.x) + +## [v2.1.6](https://github.com/laravel/echo/compare/v2.1.5...v2.1.6) - 2025-06-17 + +* Fix subscriptions not being restored on reconnect by [@electron93](https://github.com/electron93) in https://github.com/laravel/echo/pull/446 ## [v2.1.5](https://github.com/laravel/echo/compare/v2.1.4...v2.1.5) - 2025-06-03 From 851f239c4f0299629f129a5d704f8122f3c58fff Mon Sep 17 00:00:00 2001 From: Hendrik Heil Date: Fri, 18 Jul 2025 13:15:46 +0200 Subject: [PATCH 6/7] feat(vue): allow checking if echo is configured --- packages/vue/src/config/index.ts | 2 ++ packages/vue/src/index.ts | 2 +- packages/vue/tests/config.test.ts | 18 +++++++++++++++++- 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/packages/vue/src/config/index.ts b/packages/vue/src/config/index.ts index 1d8286e2..beb4ec59 100644 --- a/packages/vue/src/config/index.ts +++ b/packages/vue/src/config/index.ts @@ -23,6 +23,8 @@ const getEchoInstance = (): Echo => { return echoInstance as Echo; }; +export const isEchoConfigured = () => echoConfig !== null; + /** * Configure the Echo instance with sensible defaults. * diff --git a/packages/vue/src/index.ts b/packages/vue/src/index.ts index ec443c79..1e80a59c 100644 --- a/packages/vue/src/index.ts +++ b/packages/vue/src/index.ts @@ -5,4 +5,4 @@ export { useEchoPresence, useEchoPublic, } from "./composables/useEcho"; -export { configureEcho, echo } from "./config/index"; +export { configureEcho, echo, isEchoConfigured } from "./config/index"; diff --git a/packages/vue/tests/config.test.ts b/packages/vue/tests/config.test.ts index 7a18b2c6..a7ce0392 100644 --- a/packages/vue/tests/config.test.ts +++ b/packages/vue/tests/config.test.ts @@ -1,5 +1,5 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import { configureEcho, echo } from "../src/config"; + describe("echo helper", async () => { beforeEach(() => { @@ -11,14 +11,30 @@ describe("echo helper", async () => { }); it("throws error when Echo is not configured", async () => { + const { echo } = await import("../src/config"); + expect(() => echo()).toThrow("Echo has not been configured"); }); it("creates Echo instance with proper configuration", async () => { + const { configureEcho, echo } = await import("../src/config"); + configureEcho({ broadcaster: "null", }); expect(echo()).toBeDefined(); }); + + it("checks if Echo is configured", async () => { + const { configureEcho, isEchoConfigured } = await import("../src/config"); + + expect(isEchoConfigured()).toBe(false); + + configureEcho({ + broadcaster: "null", + }); + + expect(isEchoConfigured()).toBe(true); + }); }); From aa720f3204c917003085e992d04136f6fba394e5 Mon Sep 17 00:00:00 2001 From: Joe Tannenbaum Date: Fri, 18 Jul 2025 13:39:46 -0400 Subject: [PATCH 7/7] isEchoConfigured -> echoIsConfigured + react --- packages/react/src/config/index.ts | 2 ++ packages/react/src/index.ts | 2 +- packages/react/tests/config.test.ts | 21 +++++++++++++++++++-- packages/vue/src/config/index.ts | 2 +- packages/vue/src/index.ts | 2 +- packages/vue/tests/config.test.ts | 8 ++++---- 6 files changed, 28 insertions(+), 9 deletions(-) diff --git a/packages/react/src/config/index.ts b/packages/react/src/config/index.ts index 6c3e66be..d2405287 100644 --- a/packages/react/src/config/index.ts +++ b/packages/react/src/config/index.ts @@ -82,3 +82,5 @@ export const configureEcho = ( export const echo = (): Echo => getEchoInstance(); + +export const echoIsConfigured = () => echoConfig !== null; diff --git a/packages/react/src/index.ts b/packages/react/src/index.ts index 8d900c11..f9f034b2 100644 --- a/packages/react/src/index.ts +++ b/packages/react/src/index.ts @@ -1,4 +1,4 @@ -export { configureEcho, echo } from "./config/index"; +export { configureEcho, echo, echoIsConfigured } from "./config/index"; export { useEcho, useEchoModel, diff --git a/packages/react/tests/config.test.ts b/packages/react/tests/config.test.ts index e32d85f4..e3c776ad 100644 --- a/packages/react/tests/config.test.ts +++ b/packages/react/tests/config.test.ts @@ -1,16 +1,19 @@ import { beforeEach, describe, expect, it, vi } from "vitest"; -import { configureEcho, echo } from "../src"; -describe("echo helper", async () => { +describe("echo helper", () => { beforeEach(() => { vi.resetModules(); }); it("throws error when Echo is not configured", async () => { + const { echo } = await import("../src/config"); + expect(() => echo()).toThrow("Echo has not been configured"); }); it("creates Echo instance with proper configuration", async () => { + const { configureEcho, echo } = await import("../src/config"); + configureEcho({ broadcaster: "null", }); @@ -18,4 +21,18 @@ describe("echo helper", async () => { expect(echo()).toBeDefined(); expect(echo().options.broadcaster).toBe("null"); }); + + it("checks if Echo is configured", async () => { + const { configureEcho, echoIsConfigured } = await import( + "../src/config" + ); + + expect(echoIsConfigured()).toBe(false); + + configureEcho({ + broadcaster: "null", + }); + + expect(echoIsConfigured()).toBe(true); + }); }); diff --git a/packages/vue/src/config/index.ts b/packages/vue/src/config/index.ts index beb4ec59..ac19eccd 100644 --- a/packages/vue/src/config/index.ts +++ b/packages/vue/src/config/index.ts @@ -23,7 +23,7 @@ const getEchoInstance = (): Echo => { return echoInstance as Echo; }; -export const isEchoConfigured = () => echoConfig !== null; +export const echoIsConfigured = () => echoConfig !== null; /** * Configure the Echo instance with sensible defaults. diff --git a/packages/vue/src/index.ts b/packages/vue/src/index.ts index 1e80a59c..22c9e2da 100644 --- a/packages/vue/src/index.ts +++ b/packages/vue/src/index.ts @@ -5,4 +5,4 @@ export { useEchoPresence, useEchoPublic, } from "./composables/useEcho"; -export { configureEcho, echo, isEchoConfigured } from "./config/index"; +export { configureEcho, echo, echoIsConfigured } from "./config/index"; diff --git a/packages/vue/tests/config.test.ts b/packages/vue/tests/config.test.ts index a7ce0392..ed1022c4 100644 --- a/packages/vue/tests/config.test.ts +++ b/packages/vue/tests/config.test.ts @@ -1,6 +1,5 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; - describe("echo helper", async () => { beforeEach(() => { vi.resetModules(); @@ -27,14 +26,15 @@ describe("echo helper", async () => { }); it("checks if Echo is configured", async () => { - const { configureEcho, isEchoConfigured } = await import("../src/config"); + const { configureEcho, echoIsConfigured: echoIsConfigured } = + await import("../src/config"); - expect(isEchoConfigured()).toBe(false); + expect(echoIsConfigured()).toBe(false); configureEcho({ broadcaster: "null", }); - expect(isEchoConfigured()).toBe(true); + expect(echoIsConfigured()).toBe(true); }); });