rokot-notification
Version:
Rokot - [Rocketmakers](http://www.rocketmakers.com/) TypeScript NodeJs Platform
72 lines (71 loc) • 3.43 kB
JavaScript
;
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;