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

payload-auditor

v2.0.2

Published

Simple, fast and customizable plugin for payload cms

Readme

NPM Version NPM Downloads NPM License NPM Last Update bundlephobia Zero Dependencies

📦 Payload Auditor

Payload Auditor is a powerful plugin for Payload CMS that provides centralized event tracking, auditing, and security enhancements. This tool is designed for developers and teams looking to monitor critical actions, analyze user behaviors, and enhance backend security within their Payload projects.

📊 Only ~2 kB (minified + gzipped) and has no external dependencies.

⚙️ Installation & Usage

Install with your preferred package manager:

npm install payload-auditor

# or

pnpm add payload-auditor

# or

yarn add payload-auditor

Then, register the plugin in your Payload config:

import { auditorPlugin } from 'payload-auditor'

export default buildConfig({
  plugins: [
    auditorPlugin({
      // your plugin config here
    }),
  ],
})

🔧 Plugin Options

The plugin is designed in a way that allows you to customize it deeply. Of course, the project is fully documented and you can use its documentation well during development.

Customize the plugin with the following configuration(for example):

auditorPlugin({
  automation: {
    logCleanup: {
       cronTime: '* * * * *', // every minute
       queueName: 'john-doe-queue',
    },
  },
  collection: {
    trackCollections: [
      {
        slug: "media",
        hooks: {
          afterChange: {
            update: {
              enabled: true,
            },
          },
        },
      },
    ],
  },
});

Things you can customize:

  • 🔒 You can control the accessibility of logs. Due to the increased security of the plugin, other operations are not available.

  • 🛠️ You can manage how logs are injected into the database.

  • 🏷️ You can customize all the plugin's built-in collection values.

  • 📊 You can specify which collections you want to track.

How to customize logging for each collection:

For logging, we have integrated the entire plugin with Payload CMS hooks for each collection that you allow tracking, so you can track the entire application. payload-auditor does logging not based on the hooks themselves, but on the operations inside each hook. Reading the collection hooks documentation can give you a much better understanding of how the plugin works.

🔍 In summary, for each collection, you can make the following changes:

  • 🏷️ Set the collection slug you want. This is the basis for tracking, which makes the plugin find your collection.
  • ⚙️ Enable the required hooks. As mentioned, this plugin supports all Payload CMS hooks.
  • 🔄 Enable custom operations in each hook. Maybe you need a hook but don't want to use all the operations inside that hook for logging. For example, inside the afterOperation hook, only the create operation creates a log.
  • ⏸️ You can temporarily stop tracking this collection.

🧠 When Should You Use It?

  • You need to track critical collection changes (e.g., user logins, updates)

  • You want additional backend security for your Payload project

  • You work in a multi-user admin environment with role-specific needs

  • You're building a SaaS or enterprise-grade Payload-based product

📚 Docutments

Using the plugin is straightforward. Simply specify the slug of the collection or global you want to track, then configure the hooks and operations you need to monitor.

For quick access to the documentation, simply hover over the main API. You can then use the provided link to navigate directly to the relevant documentation.

automation

Configures the automation features of the plugin.

Currently, the plugin supports automatic log cleanup using Payload CMS's Jobs system.

collections & globals

These are the core sections of the plugin, managing operation tracking. They share a nearly identical API.

Each has a track property that accepts the following configuration:

| Property | Description | | ------------------------------------ | ------------------------------------------------------------------------------------------ | | hooks | Defines which hooks to track. | | hooks["hookName"] | The hook name to track. Can be true or a configuration object. | | hooks["hookName"]["operationName"] | The operation to track within the specified hook. Can be true or a configuration object. | | slug | The slug of the collection or global. This value is type-safe. |

Important Notes:

  • At both the hook level (hooks["hookName"]) and the operation level (hooks["hookName"]["operationName"]), the following properties are always available:

| Property | Description | | -------------- | ------------------------------------------------------------------------ | | customLogger | A custom function to customize the log output. | | debug | Enables debugging for the hook or operation. Can be true or an object. |

  • When debug: true is enabled for a hook or operation, logs are not saved to the database by default. To override this behavior, set debug.skipDatabaseSave: false. The logs will still be displayed in the console.

  • If the hook you're tracking does not have operations (e.g., afterRead or afterForgotPassword), the plugin will treat the second-level key as the operation name. For example, forgot-password or read.

  • When using customLogger, ensure you include the necessary internal collection fields (or custom fields) in your output. The operation and hook values are always overridden by the plugin and are required. The function must return an object.

  • An enabled property is available at both the hook and operation levels. This allows you to enable or disable tracking for specific hooks or operations.

  • Setting a hook or operation to false will disable it entirely.

buffer

Configures how logs are flushed to the database. You can control flushing based on either time or log count.

| Property | Description | | --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | flushStrategy | Defines the flushing strategy. Options:size: Flush when the number of logs reaches the specified limit.time: Flush after a specified time interval.realTime: Flush immediately when logs are created. | | size | A numeric value. When the log count reaches this number, logs are flushed. Works with the size strategy. | | time | A numeric value in milliseconds. Logs are flushed at this interval. Works with the time strategy. |

configureRootCollection

A function that allows you to customize the internal collection.

The function receives the default collection configuration as an argument and expects you to return your modified configuration.


📄 License

MIT License