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

@helyx/module-account-gate

v1.0.9

Published

Require configurable Discord interaction checks before new members gain access.

Readme

Access Control

Access Control asks a joining member to complete short Discord interaction checks before Helyx grants the configured access role. It is a local human-interaction check: it can deter basic automated accounts, but it does not detect devices, network risk, alternate accounts or ban evasion.

The default flow uses two different generated challenges and allows three attempts. Eight challenge types are implemented: Quick Sum, Button Sequence, Number Order, Symbol Match, Modal Recall, Server Question, Password Entry and Emoji Entry. Password Entry and Emoji Entry are static gates and are excluded from generated challenge allocation. A server selects one access type: generated Challenges, Password Entry or Emoji Entry.

Permissions and Discord configuration

Access Control requires View Channel, Send Messages, Embed Links, Read Message History and Manage Roles. Kick Members is required only when final failure is configured to kick. Password Entry also requires Manage Messages, Guild Messages and the privileged Message Content intent; its channel health check explicitly requires View Channel, Read Message History and Manage Messages. Emoji Entry may require Add Reactions and the Guild Message Reactions intent.

Helyx must be above the access role and every temporary role it removes. The module adds the access role before removing temporary roles so a partial Discord failure does not remove the member's only access route.

Discord channel permissions are the sole authority for which channels pending members can see. Access Control validates its configured gate, Password Entry, Emoji Entry and staff-review channels, but it does not maintain a second dashboard allowlist of every other visible server channel. Administrators should configure the temporary pre-gate role's Discord permissions directly. The managed Start panel may be absent during the initial activation-and-publish flow, but runtime joins fail closed until its saved message exists. Enabling Server Question likewise requires at least one enabled managed question.

The review-channel audience check rejects @everyone and every configured temporary pre-gate role. The current Discord inspection contract only reports roles explicitly requested by the module and Access Control has no configured staff-role allowlist, so it cannot prove that every other visible role is a staff role; administrators must keep that channel staff-only.

Failure and strict-mode behaviour

Staff review is the default final-failure action. When kick is deliberately selected, Helyx first makes a best-effort attempt to send a neutral direct message explaining that Access Control was not completed. It then rechecks the current decision and kicks as soon as possible; a closed direct-message channel does not prevent the kick. The target is within 30 seconds and there is no deliberate delay.

Authorised Access Control managers may activate temporary strict mode. It lasts 15 minutes by default, can be configured from 5 to 60 minutes, adds one generated challenge without exceeding four, and expires automatically. It does not reduce attempts or enable kicking, Password Entry or Emoji Entry.

Join deadlines and active-check expiry use durable one-shot tasks with exact join generations and session versions. Restarted or duplicate workers cannot enforce an old join or expire a newer check. A failed challenge applies the configured retry cooldown monotonically; passing or an authorised Approve or Retry decision clears it. Account age uses Discord's account-created and joined timestamps, and accepts the exact configured age boundary.

Returning members are restored only when a prior success is retained, restore is enabled, re-verification is disabled, and the current access role is still assignable. Otherwise they enter a fresh pending generation. Adaptive chains add a generated challenge for a prior-failure or young-account signal, while temporary strict mode may add one more, capped at four.

Password Entry and Emoji Entry are single-step access types rather than members of a generated challenge chain. Helyx sends answer-free private resume guidance that identifies the Discord server and gate channel. Closed direct messages never cause user-specific controls or answers to be posted publicly; the member can use the panel or /access-control start to resume the persisted check.

Stored data

The module stores server questions, safe attempt outcomes, member summaries, staff-review decisions, recoverable role transitions and strict-mode activations. Raw Password Entry messages are never retained. Active challenge answers use the shared expiring Helyx session service rather than a module-owned session table. A versioned Privacy Service provider supports bounded access and erasure.

Release state

Version 1.0.0 is private and in Testing. Live Discord validation has not yet been performed. Runtime enforcement rechecks module state, member state, kick permission and role hierarchy immediately before every kick.