All notable changes to this project will be documented in this file.
- Web Push HTTP transport now forwards certificate-bundle / global-CA /
common-name TLS options into
esp_http_client, improving mixed Arduino + ESP-IDF compatibility for provider HTTPS endpoints. - Transport failure logs now include endpoint host, path, origin class,
esp_err_t, and HTTP status for field diagnostics. - Fixed ESP32 VAPID key-pair validation and runtime public-key derivation to use the library DRBG-backed mbedTLS path instead of relying on null RNG callbacks.
- CI now pins PIOArduino Core to
v6.1.19and installs the ESP32 platform viapio pkg install, restoring PlatformIO compatibility with the currentplatform-espressif32package.
- Breaking: renamed the public transport struct from
SubscriptiontoWebPushSubscriptioneverywhere with no compatibility alias. - Breaking: renamed
PushMessage.subtoPushMessage.subscriptionfor API consistency. - Breaking: removed app-level metadata fields
deviceId,disabledTags, anddeletedfrom the transport struct. validateSubscription()now validates only the required Web Push transport fields:endpoint,p256dh, andauth.WebPushConfiggained transport defaults foruseTlsCertBundle,useGlobalCaStore, andskipTlsCommonNameCheck.
WebPushVapidConfigwith standards-basedsubject, public key, and private key inputs.WebPushEnqueueResultfor async preflight / queue outcomes.WebPushJoinStatusplusrequestStop()/join(timeoutMs)for bounded worker shutdown.- RFC 8291 Appendix A key-derivation and encrypted-body test coverage.
- Payload-size guard with the RFC-safe default limit of 3993 bytes.
- Small per-origin JWT cache for VAPID header reuse.
- Reworked encryption and transport to use RFC 8188 / RFC 8291
aes128gcmonly. init()now validatesmailto:/https://VAPID subjects and verifies that the configured public key matches the private key.- Async
send()overloads now returnWebPushEnqueueResultand only invoke callbacks for queued work. deinit()now returnsWebPushJoinStatusand uses a bounded stop/join flow instead of waiting forever.- JWT payload assembly now uses dynamic
std::stringconstruction instead of a fixed stack buffer. - Structured and raw payload sends now enforce the payload-size guard before transport.
- README, example sketch, package metadata, and CI now describe the v2 API and drop stale
esp-workerreferences. - CI push triggers now include
feature/**branches so v2 work runs workflows before merge. library.jsonnow advertises both Arduino and ESP-IDF compatibility.- Package metadata now reports the breaking release as
2.0.0.
- JWT signing still requires a valid system clock (SNTP).
- Push sends use
Content-Encoding: aes128gcmwith VAPIDAuthorization. - Breaking changes in v2 include the new
init()signature, async enqueue return type, bounded shutdown API, and RFC 8291-only protocol behavior.