Changelog
phil/standard-webhooks-bundleAll notable changes to phil/standard-webhooks-bundle will be documented in this file.
Updates should follow the Keep a CHANGELOG principles.
0.1.1-alpha - 2026-11-11
Security
WebhookSenderreads the receiver's URL byphil/url, as a browser reads it, no longer byparse_url(), which read its scheme only, and sends it in its canonical form. A URL with a user name or a password, or whose host is an IP address — dotted, a single number such as2130706433, IPv6 — or a single name such asmetadata, or with port 0, is refused before any request, whatever the configuration, as aDeliveryFailedthat is not retryable.
Added
- The option
allow_localhost,falseby default, andWebhookSender's$allowLocalhost:true, in development and tests, lets a receiver be onlocalhostor under.localhost; it also needsallow_private_networks, since those names resolve to the loopback address. An IP address stays refused.
Changed
allow_private_networks: truelets the sender reach a host name that resolves to a private address; an IP address written in the URL is refused all the same. The refusal readsthe receiver's URL is not an https URL to a host name, or… an http or https URL to a host namewithallow_plain_http.- The package requires
phil/url0.1.3.
0.1.0-alpha - 2026-11-11
Added
SigningKeys, whosefromStrings()keeps the keys out of a stack trace.VerifiedWebhookResolver, which takes aClockInterfaceand the receiver as a closure, built only for aVerifiedWebhookargument: an unreadable verification key fails the webhook endpoint with a server error, and no key is parsed by a request without a webhook.WebhookSender, which takes aClockInterfaceand sends tohttpsURLs only, throughNoPrivateNetworkHttpClient, which refuses loopback, private, link-local and reserved addresses;allow_plain_httpandallow_private_networkslift either guard.DeliveryFailedsays whether it isretryable, withrefused().DbalProcessedWebhooks,ProcessedWebhookTableandProcessedWebhookSchemaListener; on MySQL and MariaDB the id column isasciiwith the binary collationascii_bin, so that two ids that differ by their case are two ids.PhilStandardWebhooksBundle, extension aliasphil_standard_webhooks, keyssigning_keys,verification_keys,tolerance,audience,connection,allow_plain_httpandallow_private_networks; it wires the container'sclockservice, without falling back to the system's time. The protocol itself — headers, keys, signatures, verification, receiving and the ports — isphil/standard-webhooks, underPhil\StandardWebhooks, which the bundle requires.GenerateKeyCommand.- The documentation in
doc/, one file per topic, indexed by the README. CONTRIBUTING.md,SECURITY.mdandCODE_OF_CONDUCT.md.