← All @molecule/* packages · App templates
@molecule/api-push-notifications-web-pushProvider bond · push-notifications · API (Node) · v1.0.1 · Apache-2.0
Push notification provider using web-push library with VAPID authentication
npm install @molecule/api-push-notifications-web-pushnpm · Source on GitHub · Implements @molecule/api-push-notifications
@molecule/api-push-notifications-web-push is a provider bond on the API (Node) side: it implements the push-notifications core interface (@molecule/api-push-notifications) with a concrete vendor or library behind it.
Your code calls the core; you wire this provider once at startup. Swapping vendors later is one line in that wiring, not a rewrite.
import { setProvider } from '@molecule/api-push-notifications'
import { provider } from '@molecule/api-push-notifications-web-push'
setProvider(provider) // VAPID config is read from env on first sendWorks with: @molecule/api-bond, @molecule/api-push-notifications, @molecule/api-secrets
Secrets: VAPID_PUBLIC_KEY, VAPID_PRIVATE_KEY, VAPID_EMAIL
Auto-generated, AI-first package reference for the molecule.dev ecosystem. It is written to be read by coding agents as much as by people, and is generated from this package's source — edit
src/index.tsJSDoc, not this file.
Web Push provider for molecule.dev push notifications.
Provides push notification delivery using the Web Push protocol (VAPID)
via the web-push library.
import { setProvider } from '@molecule/api-push-notifications'
import { provider } from '@molecule/api-push-notifications-web-push'
setProvider(provider) // VAPID config is read from env on first send
provider
npm install @molecule/api-push-notifications-web-push @molecule/api-bond @molecule/api-push-notifications @molecule/api-secrets web-push
npm install -D @types/web-push
createProvider()Creates a new WebPushProvider instance. VAPID credentials are configured lazily on first send.
function createProvider(): PushNotificationProvider
Returns: A PushNotificationProvider backed by the web-push library.
providerLazily-initialized push notification provider using the web-push library.
Created on first property access via a Proxy so no work is done at import time.
The set trap is REQUIRED, not defensive: methods reached through the proxy
run with this bound to the proxy, so an instance-state write like
this.configured = true would otherwise land on the dummy {} target while
every read passes through to the real instance — configure() could then
never take effect and every send would throw "not configured".
const provider: PushNotificationProvider
pushNotificationsWebPushSecretDefinitionsSecret definitions required by the Web Push notifications bond.
const pushNotificationsWebPushSecretDefinitions: SecretDefinition[]
Implements @molecule/api-push-notifications interface.
Setup function to register this provider with the core interface:
import { setProvider } from '@molecule/api-push-notifications'
import { provider } from '@molecule/api-push-notifications-web-push'
export function setupPushNotificationsWebPush(): void {
setProvider(provider)
}
Peer dependencies:
@molecule/api-bond ^1.0.1@molecule/api-push-notifications ^1.0.1@molecule/api-secrets ^1.0.1VAPID_PUBLIC_KEY (required) — Web Push VAPID public key
VAPID_PRIVATE_KEY (required) — Web Push VAPID private key
VAPID_EMAIL (required) — Web Push contact email
mailto:you@example.com@molecule/api-bond@molecule/api-push-notifications@molecule/api-secretsweb-pushConfiguration is lazy and env-driven: configure() — called automatically on
the first send() if you never call it — reads VAPID_EMAIL,
VAPID_PUBLIC_KEY, and VAPID_PRIVATE_KEY unless an explicit VapidConfig
is passed. With any of the three missing, wiring/boot does NOT fail:
configure() logs a warning ("Push notifications disabled: missing …") and
every subsequent send()/sendMany() THROWS "Push notifications not
configured" — so a missing env var surfaces at first send, not at startup.
VAPID_EMAIL accepts a bare address or the mailto:/https: form (a bare
address is normalized to mailto:… — don't prepend mailto: to a value that
already has it). getPublicKey() serves the key browsers need to subscribe
(configured key first, VAPID_PUBLIC_KEY fallback); generateVapidKeys()
mints a fresh pair — scaffolds auto-generate these secrets, so it's only
needed for manual provisioning or rotation. sendMany() uses
Promise.allSettled: one dead subscription never aborts the batch (check
each result's error).
Integration checklist — drive the real UI (live preview, no mocks), adapt each item to this app's actual screens/flows, and check every box off one by one. A box you can't check is an integration bug to fix — not a skip:
read_activity tool (filter type 'push'); never mock the flow or
modify production code to expose it.