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

@vinikjkkj/wa-proto

v2.3000.1040547457-810620

Published

WhatsApp Web protobuf message bindings — pbjs/pbts compiled from daily-extracted SDL.

Readme

@vinikjkkj/wa-proto

WhatsApp Web protobuf definitions — daily-extracted SDL + compiled JS/TS bindings (via protobufjs).

npm i @vinikjkkj/wa-proto
import { waproto } from '@vinikjkkj/wa-proto'

const msg = waproto.Message.create({ conversation: 'hi' })
const bytes = waproto.Message.encode(msg).finish()
const parsed = waproto.Message.decode(bytes)

What's exported

  • WAProto.proto — single proto3 SDL file with every message + enum
  • dist/index.js — protobufjs static-module output (CommonJS, no parser at runtime)
  • dist/index.d.ts — TypeScript declarations matching the JS module

All messages live under package waproto; nested messages and enums are declared inside their parent. Field labels are optional (proto3 field presence) or repeated (with [packed=true] when the runtime flag was set).

Generate locally

npx wa-fetcher --out dump/                       # download raw bundles
npx wa-proto apply --bundles dump/raw/<version>/ # extract → WAProto.proto
npm run compile --workspace @vinikjkkj/wa-proto  # pbjs/pbts → dist/

How extraction works (no deps, no runtime)

  1. Scan every __d("WAWebProtobufsX.pb", ...) registration in the bundle texts
  2. Within each factory body, identify aliases for $InternalEnum and WAProtoConst
  3. Parse local-var bindings:
    • var X = s({KEY:0, ...}) — enum literal (where s is the InternalEnum alias)
    • var Y = {}; Y.name = "Foo"; Y.internalSpec = {...} — message definition
  4. Parse each field descriptor [tag, typeExpression, ref?] and decode the type byte (low 6 bits = primitive, bit 64 = REPEATED, bit 128 = PACKED, bit 256 = REQUIRED)
  5. Resolve refs across modules via the dep array + <alias>.<ExportKey> syntax
  6. Emit WAProto.proto proto3 SDL with nested messages/enums under their parent

Caveats

  • Some cross-module refs may be unresolved if the referenced .pb module isn't loaded in the bundle dump (lazy-loaded chunks). These surface as int32 (enum) / bytes (message) fallbacks — wire-compatible, but the named type is lost until the dump catches up.
  • Numbers use longprotobufjs returns Long instances for int64 / uint64 etc. Make sure to install long (already a dep here) and either .toNumber() (lossy for >2^53) or .toString().
  • Format matches @wppconnect/wa-proto for drop-in compatibility — same package waproto, same proto3 syntax, same pbjs/pbts toolchain.

Daily-extracted by wa-spec.