From ff6243fc24335ba6becee2999d3f468f0596d7d1 Mon Sep 17 00:00:00 2001 From: Asllan Maciel Date: Thu, 17 Sep 2026 13:07:53 -0300 Subject: [PATCH] docs: document supported content encodings --- README.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e61d4b6..0af0f48 100644 --- a/README.md +++ b/README.md @@ -90,7 +90,7 @@ $notifications = [ 'endpoint' => 'https://example.com/other/endpoint/of/another/vendor/abcdef...', 'publicKey' => '(stringOf88Chars)', 'authToken' => '(stringOf24Chars)', - 'contentEncoding' => 'aesgcm', // one of PushManager.supportedContentEncodings + 'contentEncoding' => 'aesgcm', // encoding supported by both the browser and this library ]), 'payload' => '{"message":"test"}', ] @@ -130,6 +130,21 @@ $report = $webPush->sendOneNotification( ); ``` +#### Content encoding negotiation + +Browsers can expose supported content encodings through `PushManager.supportedContentEncodings`. The library exposes its supported encodings through the public `ContentEncoding` enum, so applications can negotiate without duplicating a hard-coded list: + +```php +use Minishlink\WebPush\ContentEncoding; + +$librarySupportedContentEncodings = array_map( + static fn (ContentEncoding $encoding): string => $encoding->value, + ContentEncoding::cases(), +); +``` + +Use this list to validate or negotiate the browser-provided encodings before creating the `Subscription`, then pass the selected value as `contentEncoding`. If there is no overlap, treat the subscription as unsupported instead of guessing an encoding. + ### Authentication (VAPID) Browsers need to verify your identity. A standard called VAPID can authenticate you for all browsers based on [RFC8292](https://www.rfc-editor.org/rfc/rfc8292).