UNPKG

jive-sdk

Version:

Node.js SDK for Jive Software to assist with the development of add-ons

447 lines (350 loc) 12.7 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Jive SDK Source: jive-sdk-api/lib/webhook/webhooks.js</title> <!--[if lt IE 9]> <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> <link type="text/css" rel="stylesheet" href="styles/sunlight.default.css"> <link type="text/css" rel="stylesheet" href="styles/site.spacelab.css"> </head> <body> <div class="container-fluid"> <div class="navbar navbar-fixed-top navbar-inverse"> <div class="navbar-inner"> <a class="brand" href="index.html">Jive SDK</a> <ul class="nav"> <li class="dropdown"> <a href="modules.list.html" class="dropdown-toggle" data-toggle="dropdown">Modules<b class="caret"></b></a> <ul class="dropdown-menu "> <li> <a href="module-abstractDefinitions.html">abstractDefinitions</a> </li> <li> <a href="module-abstractInstances.html">abstractInstances</a> </li> <li> <a href="module-addOnRoutes.html">addOnRoutes</a> </li> <li> <a href="module-api.html">api</a> </li> <li> <a href="module-community.html">community</a> </li> <li> <a href="module-constants.html">constants</a> </li> <li> <a href="module-devRoutes.html">devRoutes</a> </li> <li> <a href="module-events.html">events</a> </li> <li> <a href="module-extensions.html">extensions</a> </li> <li> <a href="module-extstreamsInstances.html">extstreamsInstances</a> </li> <li> <a href="module-jiveutil.html">jiveutil</a> </li> <li> <a href="module-oauthRoutes.html">oauthRoutes</a> </li> <li> <a href="module-request.html">request</a> </li> <li> <a href="module-security.html">security</a> </li> <li> <a href="module-service.html">service</a> </li> <li> <a href="module-tasks.html">tasks</a> </li> <li> <a href="module-tileInstances.html">tileInstances</a> </li> <li> <a href="module-tileRoutes.html">tileRoutes</a> </li> <li> <a href="module-tilesDefinitions.html">tilesDefinitions</a> </li> <li> <a href="module-webhooks.html">webhooks</a> </li> </ul> </li> <li class="dropdown"> <a href="classes.list.html" class="dropdown-toggle" data-toggle="dropdown">Classes<b class="caret"></b></a> <ul class="dropdown-menu "> <li> <a href="extstreamsDefinitions.html">extstreamsDefinitions</a> </li> <li> <a href="filePersistence.html">filePersistence</a> </li> <li> <a href="memoryPersistence.html">memoryPersistence</a> </li> <li> <a href="memoryScheduler.html">memoryScheduler</a> </li> <li> <a href="oauthHandler.html">oauthHandler</a> </li> </ul> </li> </ul> </div> </div> <div class="row-fluid"> <div class="span12"> <div id="main"> <h1 class="page-title">Source: jive-sdk-api/lib/webhook/webhooks.js</h1> <section> <article> <pre class="sunlight-highlight-javascript linenums">/* * Copyright 2013 Jive Software * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ var jive = require('../../api'); var q = require('q'); /** * API for interacting with Jive communities. * @module webhooks */ /** * Saves the given webhook into persistence. * @param webhook * @returns {Promise} Promise */ exports.save = function( webhook ) { return jive.context.persistence.save( "webhook", webhook['id'], webhook ); }; /** * Looks through persistence for a webhook object with the provided id. * If no object is found with that id, a null object is resolved to the returned promise. * @param webhookId * @returns {Promise} Promise */ exports.findByID = function( webhookId ) { return jive.context.persistence.findByID( 'webhook', webhookId ); }; /** * Looks through persistence for any webhook objects related to the provided tenantId. * &lt;br>&lt;br> * An error will be thrown if, tenantId is not found in the webhook persistence store. * &lt;br>&lt;br> * @param tenantId * @returns {Promise} Promise (webhook) */ exports.findByTenantID = function (tenantId) { var deferred = q.defer(); jive.context.persistence.find( 'webhook', { 'tenantId' : tenantId } ).then( function(found) { deferred.resolve(found); }, function(error) { deferred.reject(error); }); return deferred.promise; }; /** * Looks through persistence for a webhook object with the provided webhookURL. * &lt;br>&lt;br> * An error will be thrown if, webhookURL is not found in the webhook persistence store. * &lt;br>&lt;br> * @param webhookURL * @returns {Promise} Promise (webhook) */ exports.findByWebhookURL = function (webhookURL) { var deferred = q.defer(); jive.context.persistence.find( 'webhook', { 'entity' : { 'resources' : { 'self' : { 'ref' : webhookURL }}}}).then( function(found) { deferred.resolve(found); }, function(error) { deferred.reject(error); }); return deferred.promise; }; /** * Uses a webhook object to resolve reference to its parent community. This is a convenience method for webhook processing. * &lt;br>&lt;br> * An error will be thrown if, community tenantId is not found in the community persistence store. * &lt;br>&lt;br> * @param webhook object * @returns {Promise} Promise (community) */ exports.findWebhookCommunity = function (webhook) { var deferred = q.defer(); jive.community.findByTenantID(webhook['tenantId']).then( function(community) { deferred.resolve(community); }, function(error) { deferred.reject(error); } ); return deferred.promise; }; /** * Looks through persistence for all webhooks associated with the provided community object. * If no objects are found with that id, an empty array is resolved to the returned promise; otherwise an * array of objects is resolved. * &lt;br>&lt;br> * An error will be thrown if: * &lt;ul> * &lt;li>No community argument is passed&lt;/li> * &lt;li>Community argument is not an object&lt;/li> * &lt;li>Community object does not contain a tenantId&lt;/li> * &lt;/ul> * @param community * @returns {Promise} Promise */ exports.findByCommunity = function(community) { if ( !community ) { throw new Error("Community object is required."); } if ( typeof community !== 'object') { throw new Error("Community must be an object."); } if ( !community['tenantId'] ) { throw new Error("Community object must contain a tenantId."); } var deferred = q.defer(); var tenantId = community['tenantId']; jive.context.persistence.find( 'webhook', { 'tenantId' : tenantId } ).then( function(found) { deferred.resolve(found); }, function(error) { deferred.reject(error); }); return deferred.promise; }; /** * Register a webhook for the named jive community. Uses either the registered community access token for your * service, or the supplied access token. * @param {String} jiveCommunity Required. Name of the jive community. * @param {Array} events Required. Array of String. Elements may be system webhooks (user_account, user_membership, user_session, social_group) * or content events (document, discussion, blogpost, .. ) * @param {String} object Optional, if events are system webhooks. * @param {String} webhookCallbackURL Required. URL of the postback that Jive will contact when the conditions of the hook are met. * @param {String} accessToken Optional. If omitted, will registration will use community oauth * @param {String} refreshToken Optional. If omitted, will registration will use community oauth * @param {function} tokenPersistenceFunction Optional. Callback function that will be invoked with new oauth access and refresh * tokens ({'access_token' : '...', 'refresh_token' : '...' }). If not provided, the community will be updated with the new access tokens. * @returns {Promise} Promise */ exports.register = function( jiveCommunity, events, object, webhookCallbackURL, accessToken, refreshToken, tokenPersistenceFunction ) { var deferred = q.defer(); var self = this; jive.community.findByCommunity(jiveCommunity).then( function(community) { if ( community ) { var webhookRequest = { "events": events, "object": object, "callback": webhookCallbackURL }; if ( (!community['oauth'] || !community['oauth']['access_token']) &amp;&amp; !accessToken ) { deferred.reject(new Error("Failed to create community webhook. " + "No access token associated with community, and none provided explicitly.")); return; } var oauth; if ( accessToken ) { oauth = {}; oauth['access_token'] = accessToken; oauth['refresh_token'] = refreshToken; } jive.community.doRequest( community, { 'path' : '/api/core/v3/webhooks', 'oauth' : oauth, 'tokenPersistenceFunction' : tokenPersistenceFunction, 'method' : 'POST', 'postBody' : webhookRequest }).then( function(result) { // success // save the webhook var id = jive.util.guid(); var webhook = { 'id' : id, 'tenantId' : community['tenantId'], 'entity' : result['entity'] }; self.save( webhook ).then( function() { deferred.resolve( result ); }, function(error) { deferred.reject(error); }); }, function(error) { // failed webhook request deferred.reject( error ); } ); } else { deferred.reject( { "error" : "No such jive community " + jiveCommunity} ); } }); return deferred.promise; }; </pre> </article> </section> </div> <div class="clearfix"></div> <footer> <span class="copyright"> Jive Software, Inc </span> <br /> <span class="jsdoc-message"> Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.3.0-dev</a> on Wed Jan 22 2014 12:29:37 GMT-0800 (PST) using the <a href="https://github.com/terryweiss/docstrap">DocStrap template</a>. </span> </footer> </div> <br clear="both"> </div> </div> <script src="scripts/sunlight.js"></script> <script src="scripts/sunlight.javascript.js"></script> <script src="scripts/sunlight-plugin.doclinks.js"></script> <script src="scripts/sunlight-plugin.linenumbers.js"></script> <script src="scripts/sunlight-plugin.menu.js"></script> <script src="scripts/jquery.min.js"></script> <script src="scripts/jquery.scrollTo.js"></script> <script src="scripts/jquery.localScroll.js"></script> <script src="scripts/bootstrap-dropdown.js"></script> <script src="scripts/toc.js"></script> <script> Sunlight.highlightAll({lineNumbers:true, showMenu: true, enableDoclinks :true}); </script> <script> $( function () { $( "#toc" ).toc( { selectors : "h1,h2,h3,h4", showAndHide : false, scrollTo : 60 } ); $( "#toc>ul" ).addClass( "nav nav-pills nav-stacked" ); $( "#main span[id^='toc']" ).addClass( "toc-shim" ); } ); </script> </body> </html>