Versioning and the public API
This package follows Semantic Versioning, and it tells you exactly which classes that promise covers.
Every class named below lives under the root namespace Pushery\Webhooks\ — so
Server\PendingWebhook is Pushery\Webhooks\Server\PendingWebhook. That root changed in
2.0.0; see Upgrading from 1.x.
The public API is
WebhookManagerand theWebhooksfacade, andWebhookEventTesting\WebhookFake, whichWebhooks::fake()switches on in your own tests, and theTesting\FakedWebhookit records- Sending:
Server\PendingWebhookandServer\Facades\WebhookSender, the backoff contract, the queuedCallWebhookJob, the transactionalServer\Outbox, and the delivery value objects the events carry - Receiving:
Client\WebhookProcessor,Client\WebhookConfig,Client\InboundMessageand itsClient\PayloadFormat,Client\Jobs\ProcessWebhookJob,Client\Http\RawBody, the profile / response contracts, and the strategy contracts a config can point at —Client\Dedupe\DedupeKeyResolver,Client\EventTypeResolverandClient\Tenancy\InboundTenantResolverwith theClient\Tenancy\InboundTenantit returns, andClient\Tenancy\InboundTenantScope, which runs the package's work on a tenant's calls in its context - Signing: the
Core\Signing\SignatureSchemecontract, every shipped scheme, andSecretSet/WebhookMessage/SignatureHeaders/VerificationResult Platform\Feed\EventFeedPage, the page of an endpoint's event feed thatWebhooks::feed()returnsCore\Http\GuardedFetch, which fetches an outside URL under the SSRF guard, and theCore\Http\FetchedResponseit hands back- The SSRF guard contract, the models, the enums and exceptions (named one by one, with their stored values), and all the events
- Host-implemented seams the shipped screens ask:
Platform\Transform\PayloadTransformer,Dashboard\DashboardScope,Dashboard\DashboardTimezoneResolver(the zone the dashboard renders timestamps in, when one fixed value is not enough), andPlatform\Support\ReadableEndpoints(which endpoints a reader may see beyond the ones they own, for a host that shares them),Platform\Support\ReplayableEndpointsandPlatform\Support\RegistrationLimit(whether a tenant may register one more endpoint by your own allowance) - What a published migration copy calls: the database guards
Database\DatabaseRequirementandDatabase\PostgresRequirement,Database\Dialect\Dialect,Database\OwnerKeyType,Support\TableLookup,Support\WebhookConnectionandSupport\MigrationLocks, and thewebhooks.database.connectionkey Support\EnvFlagandSupport\EnvLimit, which a published copy of the config calls to read a switch that protects something and a numeric limit held to its floor- The service providers — including their static
ignoreMigrations(), one per layer, which is how a host takes the migrations over — the Livewire component aliases, the published views and migrations, the config tree, and the publish tags
Everything else is @internal
The delivery pipeline, the response classifier, the config reader, the SSRF resolver internals, the dashboard's metric objects, the listeners — and may change in a minor release.
Those classes carry an @internal docblock tag, your IDE and static analyzer will say so, and
a test in the package's repository fails if a class outside the list above ever loses the tag.
Bind to the list; leave the rest to the engine.