Support the latest pkg:web, require Dart 3.3 (#103)

diff --git a/.github/workflows/test-package.yml b/.github/workflows/test-package.yml
index 1fb3260..84d263d 100644
--- a/.github/workflows/test-package.yml
+++ b/.github/workflows/test-package.yml
@@ -47,7 +47,7 @@
       matrix:
         # Add macos-latest and/or windows-latest if relevant for this package.
         os: [ubuntu-latest]
-        sdk: [3.2.0, dev]
+        sdk: [3.3, dev]
     steps:
       - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11
       - uses: dart-lang/setup-dart@fedb1266e91cf51be2fdb382869461a434b920a3
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f1deed7..b652f9c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,8 @@
 ## 4.1.5-wip
 
 - Drop unneeded dependency on `package:js`.
+- Update the minimum Dart SDK version to `3.3.0`.
+- Support the latest `package:web`.
 
 ## 4.1.4
 
diff --git a/example/server.dart b/example/server.dart
index 74439c9..b6ee750 100644
--- a/example/server.dart
+++ b/example/server.dart
@@ -7,7 +7,7 @@
 
 /// A basic server which sets up an SSE handler.
 ///
-/// When a client connnects it will send a simple message and print the
+/// When a client connects it will send a simple message and print the
 /// response.
 void main() async {
   var handler = SseHandler(Uri.parse('/sseHandler'));
diff --git a/lib/client/sse_client.dart b/lib/client/sse_client.dart
index f5be1e5..4d3df49 100644
--- a/lib/client/sse_client.dart
+++ b/lib/client/sse_client.dart
@@ -9,7 +9,7 @@
 import 'package:logging/logging.dart';
 import 'package:pool/pool.dart';
 import 'package:stream_channel/stream_channel.dart';
-import 'package:web/helpers.dart';
+import 'package:web/web.dart';
 
 import '../src/util/uuid.dart';
 
@@ -21,7 +21,7 @@
 /// Note Chrome's limit is 6000. So this gives us plenty of headroom.
 final _requestPool = Pool(1000);
 
-/// A client for bi-directional sse communcation.
+/// A client for bi-directional sse communication.
 ///
 /// The client can send any JSON-encodable messages to the server by adding
 /// them to the [sink] and listen to messages from the server on the [stream].
diff --git a/pubspec.yaml b/pubspec.yaml
index 6d150ad..4aae6e4 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -7,7 +7,7 @@
 repository: https://github.com/dart-lang/sse
 
 environment:
-  sdk: ^3.2.0
+  sdk: ^3.3.0
 
 dependencies:
   async: ^2.0.8
@@ -16,7 +16,7 @@
   pool: ^1.5.0
   shelf: ^1.1.0
   stream_channel: ^2.0.0
-  web: '>=0.3.0 <0.5.0'
+  web: ^0.5.0
 
 dev_dependencies:
   dart_flutter_team_lints: ^2.0.0
diff --git a/test/web/index.dart b/test/web/index.dart
index fadb147..c4d78cd 100644
--- a/test/web/index.dart
+++ b/test/web/index.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:sse/client/sse_client.dart';
-import 'package:web/helpers.dart';
+import 'package:web/web.dart';
 
 void main() {
   var channel = SseClient('/test');