MCPcopy Index your code
hub / github.com/AndrewBarba/apns2

github.com/AndrewBarba/apns2 @12.2.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release 12.2.0 ↗ · + Follow
32 symbols 49 edges 9 files 0 documented · 0%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

apns2

npm version Twitter

Node client for connecting to Apple's Push Notification Service using the new HTTP/2 protocol with JSON web tokens.


Create Client

Create an APNS client using a signing key:

import { ApnsClient } from 'apns2'

const client = new ApnsClient({
  team: `TFLP87PW54`,
  keyId: `123ABC456`,
  signingKey: fs.readFileSync(`${__dirname}/path/to/auth.p8`),
  defaultTopic: `com.tablelist.Tablelist`,
  requestTimeout: 0, // optional, Default: 0 (without timeout)
  keepAlive: true, // optional, Default: 5000
})

Sending Notifications

Basic

Send a basic notification with message:

import { Notification } from 'apns2'

const bn = new Notification(deviceToken, { alert: 'Hello, World' })

try {
  await client.send(bn)
} catch (err) {
  console.error(err.reason)
}

Send a basic notification with message and options:

import { Notification } from 'apns2'

const bn = new Notification(deviceToken, {
  alert: 'Hello, World',
  badge: 4,
  data: {
    userId: user.getUserId
  }
})

try {
  await client.send(bn)
} catch (err) {
  console.error(err.reason)
}

Silent

Send a silent notification using content-available key:

import { SilentNotification } from 'apns2'

const sn = new SilentNotification(deviceToken)

try {
  await client.send(sn)
} catch (err) {
  console.error(err.reason)
}

Note: Apple recommends that no options other than the content-available flag be sent in order for a notification to truly be silent and wake up your app in the background. Therefore this class does not accept any additional options in the constructor.

Many

Send multiple notifications concurrently:

import { Notification } from 'apns2'

const notifications = [
  new Notification(deviceToken1, { alert: 'Hello, World' }),
  new Notification(deviceToken2, { alert: 'Hello, World' })
]

try {
  await client.sendMany(notifications)
} catch (err) {
  console.error(err.reason)
}

Advanced

For complete control over the push notification packet use the base Notification class:

import { Notification } from 'apns2'

const notification = new Notification(deviceToken, {
  aps: { ... }
})

try {
  await client.send(notification)
} catch(err) {
  console.error(err.reason)
}

Available options can be found at APNS Payload Options

Error Handling

All errors are defined in ./lib/errors.js and come directly from APNS Table 4

You can easily listen for these errors by attaching an error handler to the APNS client:

import { Errors } from 'apns2'

// Listen for a specific error
client.on(Errors.badDeviceToken, (err) => {
  // Handle accordingly...
  // Perhaps delete token from your database
  console.error(err.reason, err.statusCode, err.notification.deviceToken)
})

// Listen for any error
client.on(Errors.error, (err) => {
  console.error(err.reason, err.statusCode, err.notification.deviceToken)
})

Environments

By default the APNS client connects to the production push notification server. This is identical to passing in the options:

const client = new ApnsClient({
  host: 'api.push.apple.com'
  ...
})

To connect to the development push notification server, pass the options:

const client = new ApnsClient({
  host: 'api.sandbox.push.apple.com'
  ...
})

Requirements

apns2 requires Node.js v16 or later

Extension points exported contracts — how you extend this code

SigningToken (Interface)
(no doc)
src/apns.ts
ApnsResponseError (Interface)
(no doc)
src/errors.ts
NotificationOptions (Interface)
(no doc)
src/notifications/notification.ts
ApnsOptions (Interface)
(no doc)
src/apns.ts
ApnsPayload (Interface)
(no doc)
src/notifications/notification.ts
CriticalAlertSoundPayload (Interface)
(no doc)
src/notifications/notification.ts

Core symbols most depended-on inside this repo

send
called by 10
src/apns.ts
sendMany
called by 2
src/apns.ts
ping
called by 1
src/apns.ts
_handleServerResponse
called by 1
src/apns.ts
_getSigningToken
called by 1
src/apns.ts
undici_getPoolClients
called by 1
src/internals.ts
buildApnsOptions
called by 1
src/notifications/notification.ts
constructor
called by 0
src/apns.ts

Shape

Method 16
Class 8
Interface 6
Function 2

Languages

TypeScript100%

Modules by API surface

src/apns.ts12 symbols
src/notifications/notification.ts9 symbols
src/errors.ts6 symbols
src/notifications/silent-notification.ts3 symbols
src/internals.ts2 symbols

For agents

$ claude mcp add apns2 \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page