123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- #! /usr/bin/env node
- /* eslint consistent-return:0 */
- 'use strict';
- const webPush = require('../src/index.js');
- const printUsageDetails = () => {
- const actions = [
- {
- name: 'send-notification',
- options: [
- '--endpoint=<url>',
- '[--key=<browser key>]',
- '[--auth=<auth secret>]',
- '[--payload=<message>]',
- '[--ttl=<seconds>]',
- '[--encoding=<encoding type>]',
- '[--vapid-subject=<vapid subject>]',
- '[--vapid-pubkey=<public key url base64>]',
- '[--vapid-pvtkey=<private key url base64>]',
- '[--proxy=<http proxy uri, e.g: http://127.0.0.1:8889>]',
- '[--gcm-api-key=<api key>]'
- ]
- }, {
- name: 'generate-vapid-keys',
- options: [
- '[--json]'
- ]
- }
- ];
- let usage = '\nUsage: \n\n';
- actions.forEach(action => {
- usage += ' web-push ' + action.name;
- usage += ' ' + action.options.join(' ');
- usage += '\n\n';
- });
- console.log(usage);
- process.exit(1);
- };
- const generateVapidKeys = returnJson => {
- const vapidKeys = webPush.generateVAPIDKeys();
- let outputText;
- if (returnJson) {
- outputText = JSON.stringify(vapidKeys);
- } else {
- const outputLine = '\n=======================================\n';
- outputText = outputLine + '\n'
- + 'Public Key:\n' + vapidKeys.publicKey + '\n\n'
- + 'Private Key:\n' + vapidKeys.privateKey + '\n'
- + outputLine;
- }
- console.log(outputText);
- process.exit(0);
- };
- const sendNotification = args => {
- if (process.env.GCM_API_KEY) {
- webPush.setGCMAPIKey(process.env.GCM_API_KEY);
- }
- const subscription = {
- endpoint: args.endpoint,
- keys: {
- p256dh: args.key || null,
- auth: args.auth || null
- }
- };
- const payload = args.payload || null;
- const options = {};
- if (args.ttl) {
- options.TTL = args.ttl;
- }
- if (argv['vapid-subject'] || argv['vapid-pubkey'] || argv['vapid-pvtkey']) {
- options.vapidDetails = {
- subject: args['vapid-subject'] || null,
- publicKey: args['vapid-pubkey'] || null,
- privateKey: args['vapid-pvtkey'] || null
- };
- }
- if (args.proxy) {
- options.proxy = args.proxy;
- }
- if (args['gcm-api-key']) {
- options.gcmAPIKey = args['gcm-api-key'];
- }
- if (args.encoding) {
- options.contentEncoding = args.encoding;
- }
- webPush.sendNotification(subscription, payload, options)
- .then(() => {
- console.log('Push message sent.');
- }, err => {
- console.log('Error sending push message: ');
- console.log(err);
- })
- .then(() => {
- process.exit(0);
- });
- };
- const action = process.argv[2];
- const argv = require('minimist')(process.argv.slice(3));
- switch (action) {
- case 'send-notification':
- if (!argv.endpoint) {
- return printUsageDetails();
- }
- sendNotification(argv);
- break;
- case 'generate-vapid-keys':
- generateVapidKeys(argv.json || false);
- break;
- default:
- printUsageDetails();
- break;
- }
|