UNPKG

rokot-notification

Version:

Rokot - [Rocketmakers](http://www.rocketmakers.com/) TypeScript NodeJs Platform

72 lines (71 loc) 3.43 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const node_gcm_1 = require("node-gcm"); const recipients_1 = require("../core/recipients"); const dispatchHandler_1 = require("../core/dispatchHandler"); function gcmInitializer(logger, options, recipientResolver = recipients_1.recipientTokenResolver) { return __awaiter(this, void 0, void 0, function* () { const transport = yield GcmNotificationTransport.create(logger, options, recipientResolver); return new GcmNotificationDispatchHandler(logger, transport); }); } exports.gcmInitializer = gcmInitializer; class GcmNotificationDispatchHandler extends dispatchHandler_1.NotificationDispatchHandler { constructor(logger, transport) { super("gcm", logger, transport); } } exports.GcmNotificationDispatchHandler = GcmNotificationDispatchHandler; class GcmNotificationTransport { constructor(logger, native, recipientResolver) { this.logger = logger; this.native = native; this.recipientResolver = recipientResolver; logger.trace("Created Gcm Notification Transport"); } static create(logger, options, recipientResolver) { return __awaiter(this, void 0, void 0, function* () { const provider = new node_gcm_1.Sender(options.apiKey); return new GcmNotificationTransport(logger, provider, recipientResolver); }); } resolveTokens(recipients) { return this.recipientResolver.find(recipients, "gcm"); } sendMessage(recipients, options) { return __awaiter(this, void 0, void 0, function* () { const tokens = yield this.resolveTokens(recipients); if (!tokens || !tokens.length) { return; } return this.send(tokens, new node_gcm_1.Message(options)); }); } send(tokens, message) { return __awaiter(this, void 0, void 0, function* () { return new Promise((res, rej) => { this.native.send(message, tokens, (err, resp) => { if (err) { this.logger.error(err, "GCM was unable to send message", message); return res({ transport: "gcm", error: err }); } this.logger.trace("GCM Send response: ", JSON.stringify(resp, null, 2)); const sent = resp.results ? resp.results.filter(r => !r.error).map(r => r.registration_id) : []; const failed = resp.results ? resp.results.filter(r => r.error).map(r => ({ token: r.registration_id, error: r.error })) : []; res({ transport: "gcm", sent, failed }); }); }); }); } shutdown() { } } exports.GcmNotificationTransport = GcmNotificationTransport;