jive-sdk
Version:
Node.js SDK for Jive Software to assist with the development of add-ons
447 lines (350 loc) • 12.7 kB
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.
* <br><br>
* An error will be thrown if, tenantId is not found in the webhook persistence store.
* <br><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.
* <br><br>
* An error will be thrown if, webhookURL is not found in the webhook persistence store.
* <br><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.
* <br><br>
* An error will be thrown if, community tenantId is not found in the community persistence store.
* <br><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.
* <br><br>
* An error will be thrown if:
* <ul>
* <li>No community argument is passed</li>
* <li>Community argument is not an object</li>
* <li>Community object does not contain a tenantId</li>
* </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']) && !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>