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

@flowpush/web-sdk

v0.1.2

Published

FlowPush browser SDK for Web Push notifications.

Readme

@flowpush/web-sdk

FlowPush browser SDK for Web Push notifications.

This package helps you:

  • Register a service worker for push notifications
  • Request notification permission
  • Subscribe/unsubscribe browser devices
  • Identify logged-in users and attach attributes

Install

pnpm add @flowpush/web-sdk

Requirements

  • HTTPS origin in production (required by Push API and Service Workers)
  • A FlowPush app with platform WEB
  • VAPID keys configured on that app
  • A public service worker file served by your app

Service Worker Setup

The SDK package builds a worker file at dist/sw.js.

Copy that file into your app public folder as sw.js (or serve it at a custom path):

cp node_modules/@flowpush/web-sdk/dist/sw.js public/sw.js

If you serve it from a different URL, pass serviceWorkerPath when creating the SDK client.

Quick Start

import { FlowPush } from "@flowpush/web-sdk"

const flowpush = new FlowPush({
  appKey: "your-app-key",
  apiUrl: "https://your-api-host/api/v1", // optional
  serviceWorkerPath: "/sw.js", // optional
  autoRegister: true, // optional, default true
})

await flowpush.requestPermission()
await flowpush.subscribe()

API

Constructor

new FlowPush(options)

Options:

  • appKey: string (required)
  • apiUrl: string (optional)
  • serviceWorkerPath: string (optional)
  • autoRegister: boolean (optional)

Defaults used by the current implementation:

  • apiUrl: https://flow-push-api.vercel.app/api/v1
  • serviceWorkerPath: /sw.js
  • autoRegister: true

registerServiceWorker()

await flowpush.registerServiceWorker()

Registers the service worker at serviceWorkerPath.

requestPermission()

const permission = await flowpush.requestPermission()

Requests browser notification permission and returns NotificationPermission.

subscribe(options?)

const result = await flowpush.subscribe({ deviceType: "web" })

Flow:

  1. Reads VAPID public key from GET /sdk/config
  2. Creates browser PushSubscription
  3. Syncs subscription to POST /sdk/devices
  4. Stores flowpush_device_id in localStorage

The SDK also stores a stable physical id in localStorage as flowpush_physical_id.

identify(params)

await flowpush.identify({
  userId: "user_123",
  attributes: {
    plan: "pro",
    locale: "en",
  },
})

Calls POST /sdk/identify and links the current device (or physical id) to a user.

unsubscribe()

await flowpush.unsubscribe()

Unsubscribes from browser push and calls DELETE /sdk/devices with the endpoint.

Backend Endpoints Expected

The SDK expects these API routes under apiUrl:

  • GET /sdk/config
  • POST /sdk/devices
  • POST /sdk/identify
  • DELETE /sdk/devices

Each request includes the x-app-key header.

Common Issues

  • "Notification permission not granted": call requestPermission first and ensure user accepted.
  • "Failed to fetch config": verify apiUrl and CORS settings.
  • "VAPID key not configured for this App": configure VAPID keys for the WEB app.
  • Service worker not found: confirm sw.js is publicly served and serviceWorkerPath matches.

TypeScript

This package ships type declarations in dist/index.d.ts and dist/index.d.mts.

License

MIT