UNPKG

chump

Version:

Pushover.net client for Node.js

255 lines (217 loc) 4.83 kB
'use strict'; let _ = require('lodash'); const PUSHOVER_HOST = 'https://api.pushover.net'; const PUSHOVER_VERSION = '1'; /** * Main client class */ class Client { /** * Constructor for client * * @param {string} apiToken Api token */ constructor(apiToken) { this.options = { host: PUSHOVER_HOST, version: PUSHOVER_VERSION }; this.app = { limit: null, remaining: null, reset: null } this.apiToken = apiToken; } /** * Get api token * * @return {string} Get api token */ get apiToken() { return this.options.apiToken; } /** * Set api token * * @param {string} value Api token */ set apiToken(value) { validateApiToken(value); this.options.apiToken = value; } /** * Send message * * @param {Message} message Message * * @return {Promise} Promise for chaining */ sendMessage(message) { let SendMessage = require('./Command/SendMessage'); return this.invokeCommand(new SendMessage(message)); } /** * Verify user * * @param {User} user User * * @return {Promise} Promise for chaining */ verifyUser(user) { let VerifyUser = require('./Command/VerifyUser'); return this.invokeCommand(new VerifyUser(user)); } /** * Get receipt * * @param {string} receipt Receipt * * @return {Promise} Promise for chaining */ getReceipt(receipt) { let GetReceipt = require('./Command/GetReceipt'); return this.invokeCommand(new GetReceipt(receipt)); } /** * Cancel emergency * * @param {receipt} receipt Receipt * * @return {boolean} Cancellation status */ cancelEmergency(receipt) { let CancelEmergency = require('./Command/CancelEmergency'); return this.invokeCommand(new CancelEmergency(receipt)); } /** * Get group details * * @param {Group} group Group * * @return {Promise} Promise for chaining */ getGroupDetails(group) { let GetGroupDetails = require('./Command/GetGroupDetails'); return this.invokeCommand(new GetGroupDetails(group)); } /** * Add user to group * * @param {User} user User * @param {Group} group Group * * @return {Promise} Promise for chaining */ addUserToGroup(user, group) { let AddUserToGroup = require('./Command/AddUserToGroup'); return this.invokeCommand(new AddUserToGroup(user, group)); } /** * Remove user from group * * @param {User} user User * @param {Group} group Group * * @return {Promise} Promise for chaining */ removeUserFromGroup(user, group) { let RemoveUserFromGroup = require('./Command/RemoveUserFromGroup'); return this.invokeCommand(new RemoveUserFromGroup(user, group)); } /** * Enable group user * * @param {User} user User * @param {Group} group Group * * @return {Promise} Promise for chaining */ enableGroupUser(user, group) { let EnableGroupUser = require('./Command/EnableGroupUser'); return this.invokeCommand(new EnableGroupUser(user, group)); } /** * Disable group user * * @param {User} user User * @param {Group} group Group * * @return {Promise} Promise for chaining */ disableGroupUser(user, group) { let DisableGroupUser = require('./Command/DisableGroupUser'); return this.invokeCommand(new DisableGroupUser(user, group)); } /** * Rename group * * @param {Group} group Group * @param {string} name Name * * @return {Promise} Promise for chaining */ renameGroup(group, name) { let RenameGroup = require('./Command/RenameGroup'); return this.invokeCommand(new RenameGroup(group, name)); } /** * Get transport * * Lazy loads transport * * @return {object} Transport */ getTransport() { if (_.isUndefined(this.transport)) { let Transport = require('./Transport'); this.transport = new Transport(this); } return this.transport; } /** * Invoke command * * @param {mixed} command Command * * @return {Promise} Promise for chaining */ invokeCommand(command) { return command.invoke(this); } /** * Get app limit * * @return {integer} Limit */ get appLimit() { return this.app.limit; } /** * Get app remaining * * @return {integer} Remaining */ get appRemaining() { return this.app.remaining; } /** * Get app reset * * @return {integer} Timestamp */ get appReset() { return this.app.reset; } } /** * Validate api token * * @param {string} value Api token */ function validateApiToken(value) { if (!value.match(/^[a-z0-9]{30}$/i)) { throw new Error('API token must be 30 characters long and alphanumeric'); } } module.exports = Client;