feat: [POC] send webhooks when nodes are purged (i.e. Next on-demand revalidation support) #287
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is a proof-of-concept for sending webhooks in response to purge actions tracked by WPGraphQL Smart Cache.
Why?
This can help facilitate remote sources reacting to changes in the CMS. Some common applications:
Why not use another webhook plugin?
WPGraphQL Smart Cache already handles a lot of the logic required to determine whether a node is public or private, etc and centralizes a lot of mechanisms. By piggy-packing on the existing functionality we can provide a lot of value with minimal code.
How it works:
do_action( 'graphql_purge', $key, $event, $host );graphql_purgeevent is called, a$webhook_configsarray is iterated over to determine which endpoint(s) to send webhook(s) toGET:
{ "url": "http://localhost:3000/api/revalidate/?key=dGVybToxMQ=&event=term_saved&hostname=uri-debugging.local/graphql&path=/tag/tag-1/", "method": "GET", "headers": [], "body": null, "blocking": false }POST
{ "url": "http://localhost:3000/api/revalidate/", "method": "POST", "headers": { "Content-Type": "application/json" }, "body": "{\"key\":\"dGVybToxMQ==\",\"event\":\"term_saved\",\"hostname\":\"uri-debugging.local\\/graphql\",\"path\":\"\\/tag\\/tag-1\\/\"}", "blocking": false }