npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@playrunner/webhooks

v0.1.1

Published

Inbound and outbound webhook integration for Playrunner.

Readme

@playrunner/webhooks

Inbound workflow triggers and outbound HTTP actions for Playrunner.

Features

  • Create a secret inbound endpoint for a saved Webhooks workflow node.
  • Start workflows from JSON, form-encoded, or text requests.
  • Keep inbound endpoints local, provide an existing public HTTPS base URL, or explicitly start a temporary Cloudflare quick tunnel.
  • Send outbound HTTPS requests with templates, headers, an optional shared bearer token, and up to three retries.

Install

npm install @playrunner/webhooks

The package contributes frontend, API, and Orchestrator surfaces. A Playrunner build must include it as a direct dependency of each app that consumes those surfaces.

Inbound webhooks

Add a Webhooks node, select Receive an inbound trigger, and save the workflow. Create the endpoint from the node configuration. Playrunner displays the local URL and endpoint path with copy controls.

An inbound JSON request can look like this:

curl --request POST \
  --header 'content-type: application/json' \
  --data '{"event":"incident.created","id":"evt_123"}' \
  'https://playrunner.example.com/api/webhooks/inbound/ENDPOINT_ID/SECRET'

A successful request returns HTTP 202:

{
  "executionId": "113aa590-3995-48f3-ab3f-4819df900ae7",
  "status": "started"
}

The workflow receives the sanitized request at workflow.trigger.webhook:

{
  "method": "POST",
  "headers": {
    "content-type": "application/json"
  },
  "query": {},
  "body": {
    "event": "incident.created",
    "id": "evt_123"
  },
  "receivedAt": "2026-07-26T00:00:00.000Z"
}

Only content-type, user-agent, and x-request-id headers are forwarded into the workflow. Requests are limited to 1 MiB and 60 requests per minute for each client IP and endpoint.

Rotating the endpoint secret invalidates the previous URL. Disabling the endpoint makes it return 404 without deleting its configuration.

Public exposure

Inbound endpoints remain private unless the user chooses a public exposure mode in Webhooks settings:

  • No public exposure keeps the local endpoint private.
  • Use configured public URL displays a URL based on an existing public HTTPS reverse proxy or ingress.
  • Managed Cloudflare Tunnel lets the user explicitly start and stop a temporary Cloudflare quick tunnel. Playrunner never starts it automatically.

Managed tunnel mode requires cloudflared on PATH. Its temporary URL can change whenever the tunnel or API restarts. The settings panel displays startup status and recent cloudflared output.

Outbound webhooks

Select Send an outbound request and configure:

  • A public HTTPS target URL.
  • POST, PUT, PATCH, DELETE, or GET.
  • A JSON object of string headers.
  • An optional body template.
  • Zero to three retries.

The target URL and body use Playrunner workflow templates. For example:

{
  "status": "{{workflow.run.status}}"
}

Configure the optional default bearer token in Webhooks settings. Playrunner adds it as the Authorization: Bearer ... header. User-supplied authorization, cookie, and host headers are ignored.

Outbound requests only allow public HTTPS targets, do not follow redirects, and capture at most 64 KiB of response text. The node output contains:

{
  "body": "{\"accepted\":true}",
  "status": 202
}

Package exports

import webhooksIntegration, {
  WebhooksConfigPanel,
  WebhooksSettingsModal,
} from '@playrunner/webhooks';
import webhooksApiContribution from '@playrunner/webhooks/api';
import webhooksOrchestratorContribution from '@playrunner/webhooks/orchestrator';