Library in typescript for sending multicast notifications using HTTP/2 multiplexing and the FCM HTTP v1 API.


Library in typescript for sending multicast notifications using HTTP/2 multiplexing and the FCM HTTP v1 API.
Features supported by fcm-http2:
- [X] HTTP/2 session & stream concurrency
- [X] Token batching support
- [X] Uninstall detection
- [X] Retry mechanism
* Node.js >= 18
* Deno >= 2.4
For NodeJS applications, installation is done as follows:
``bash`
npm install fcm-http2
For Deno applications, installation is as follows:
`js`
import { FCM } from 'https://esm.sh/fcm-http2';
Once the library has been installed you can start using it in this way.
Option for CommonJS with file:
`js
// FCM library recovery
const FCM = require('fcm-http2').FCM;
// Basic configuration for FCM
const fcmOptions = {
// Pass in your service account JSON private key file (https://console.firebase.google.com/u/0/project/_/settings/serviceaccounts/adminsdk)
serviceAccount: require('./service-account.json'),
// Max number of concurrent HTTP/2 sessions (connections)
maxConcurrentConnections: 10,
// Max number of concurrent streams (requests) per session
maxConcurrentStreamsAllowed: 100
};
// Init FCM with options
const fcmClient = new FCM(fcmOptions);
`
Option for ESM (JavaScript/TypeScript) with file:
`js
// FCM library recovery
import { FCM, FcmBaseOptions } from 'fcm-http2';
// Basic configuration for FCM
const fcmOptions: FcmBaseOptions = {
// Pass in your service account JSON private key file (https://console.firebase.google.com/u/0/project/_/settings/serviceaccounts/adminsdk)
serviceAccount: require('./service-account.json'),
// Max number of concurrent HTTP/2 sessions (connections)
maxConcurrentConnections: 10,
// Max number of concurrent streams (requests) per session
maxConcurrentStreamsAllowed: 100
};
// Init FCM with options
const fcmClient = new FCM(fcmOptions);
`
Option for CommonJS without file:
`js
// FCM library recovery
const FCM = require('fcm-http2').FCM;
// Basic configuration for FCM
const fcmOptions = {
// Pass in your service account JSON private key file (https://console.firebase.google.com/u/0/project/_/settings/serviceaccounts/adminsdk)
// NOTE: Recover the three parameters from the service-account.json file
serviceAccount: {
project_id: '
private_key: '
client_email: '
},
// Max number of concurrent HTTP/2 sessions (connections)
maxConcurrentConnections: 10,
// Max number of concurrent streams (requests) per session
maxConcurrentStreamsAllowed: 100
};
// Init FCM with options
const fcmClient = new FCM(fcmOptions);
`
Option for ESM (JavaScript/TypeScript) without file:
`js
// FCM library recovery
import { FCM, FcmBaseOptions } from 'fcm-http2';
// Basic configuration for FCM
const fcmOptions: FcmBaseOptions = {
// Pass in your service account JSON private key file (https://console.firebase.google.com/u/0/project/_/settings/serviceaccounts/adminsdk)
// NOTE: Recover the three parameters from the service-account.json file
serviceAccount: {
project_id: '
private_key: '
client_email: '
},
// Max number of concurrent HTTP/2 sessions (connections)
maxConcurrentConnections: 10,
// Max number of concurrent streams (requests) per session
maxConcurrentStreamsAllowed: 100
};
// Init FCM with options
const fcmClient = new FCM(fcmOptions);
`
Only option:
`js
// FCM library recovery
import { FCM, FcmBaseOptions } from 'https://esm.sh/fcm-http2';
// Basic configuration for FCM
const fcmOptions: FcmBaseOptions = {
// Pass in your service account JSON private key file (https://console.firebase.google.com/u/0/project/_/settings/serviceaccounts/adminsdk)
// NOTE: Recover the three parameters from the service-account.json file
serviceAccount: {
project_id: '
private_key: '
client_email: '
},
// Max number of concurrent HTTP/2 sessions (connections)
maxConcurrentConnections: 10,
// Max number of concurrent streams (requests) per session
maxConcurrentStreamsAllowed: 100
};
// Init FCM with options
const fcmClient = new FCM(fcmOptions);
`
`js
// NOTE: Use the fcmClient object that you created earlier
// Token to send the notification to
const tokens = ['TOKEN_1', 'TOKEN_N'];
// Composing the message to be sent
const message = {
notification: {
title: "Test",
body: "Multiple Send"
},
data: {
notification: "true"
}
};
// Multiple sending of notification using token array
fcmClient.sendMulticast(message, tokens).then((unregisteredTokens: Array
// Sending successful
console.log('Message sent successfully');
// Remove unregistered tokens from your database
if (unregisteredTokens.length > 0) {
console.log('Unregistered device token(s): ', unregisteredTokens.join(', '));
}
}).catch((error: object) => console.log(error));
``
For any doubts open an issue or contact this email fctaddia@duck.com