node-meraki
Version:
Meraki wrapper for nodejs
355 lines (318 loc) • 12.5 kB
JavaScript
/**
* Create a Meraki REST API wrapper for the http servers (webhooks) ressource. See the
* [online documentation]{@link https://dashboard.meraki.com/api_docs#http-servers} for more information.
*
* @module meraki/rest/httpServers
* @param { string } [apiKey=''] The Meraki api key
* @param { string } [target='api'] The Meraki target
* @param { string } [basePath='/'] The Meraki base path for the ressource
* @param { string } [baseUrl='https://api.meraki.com'] The Meraki base url for the ressource
* @param { string } rateLimiter The rate limiter (bottleneck) configuration
* @return { Object } The initialized Meraki REST API wrapper for the http server (webhook) ressource
* @example
* const apiKey = 'secret meraki api key'
* const organizationId = 'meraki organization id'
* const version = 'v0'
* const target = 'n12'
* const basePath = `/${target}/${version}/network`
* const rateLimiter = {
* enabled: true
* }
* const httpServersEndpoints = require('./lib/rest/httpServers')({ apiKey, target, basePath, baseUrl, rateLimiter, logger })
*/
function createHTTPServersEndpoints({
apiKey = '',
target = 'api',
basePath = '/',
baseUrl = 'https://api.meraki.com',
rateLimiter,
logger
}) {
const axios = require('./axios')({
baseUrl,
rateLimiter,
logger
});
/**
* List the http servers for a network.
*
* @memberof module:meraki/rest/httpServers
* @param { string } [apiKey] Optional custom apiKey for this request (if not set will take the inital apiKey)
* @param { string } [target] Optional custom target for this request (if not set will take the inital target)
* @param { string } [scope] Optional custom scope for rate limiter
* @param { string } networkId The id of the network for which to list the http servers
* @return { Promise } A promise holding the http servers for this network
* @example <caption>Example response</caption>
* [
* {
* "id": "ABC123",
* "networkId": "N_123",
* "name": "My HTTP server",
* "url": "https://www.example.com/webhooks",
* "sharedSecret": "foobar"
* }
* ]
*/
function listHTTPServers({
apiKey: localApiKey,
target: localTarget,
scope,
networkId
}) {
if (!networkId) {
return Promise.reject(new Error('The parameter networkId is mandatory'));
}
return axios._get(localApiKey || apiKey, localTarget || target, scope, `${basePath}/${networkId}/httpServers`);
}
/**
* Get a http servers of a network.
*
* @memberof module:meraki/rest/httpServers
* @param { string } [apiKey] Optional custom apiKey for this request (if not set will take the inital apiKey)
* @param { string } [target] Optional custom target for this request (if not set will take the inital target)
* @param { string } [scope] Optional custom scope for rate limiter
* @param { string } networkId The id of the network
* @param { string } webhookId The id of the webhook (http server)
* @return { Promise } A promise holding the http server of this network
* @example <caption>Example response</caption>
* {
* "id": "ABC123",
* "networkId": "N_123",
* "name": "My HTTP server",
* "url": "https://www.example.com/webhooks",
* "sharedSecret": "foobar"
* }
*/
function getHTTPServer({
apiKey: localApiKey,
target: localTarget,
scope,
networkId,
webhookId
}) {
if (!networkId) {
return Promise.reject(new Error('The parameter networkId is mandatory'));
}
if (!webhookId) {
return Promise.reject(new Error('The parameter webhookId is mandatory'));
}
return axios._get(localApiKey || apiKey, localTarget || target, scope, `${basePath}/${networkId}/httpServers/${webhookId}`);
}
/**
* Update http server.
*
* @memberof module:meraki/rest/httpServers
* @param { string } [apiKey] Optional custom apiKey for this request (if not set will take the inital apiKey)
* @param { string } [target] Optional custom target for this request (if not set will take the inital target)
* @param { string } [scope] Optional custom scope for rate limiter
* @param { string } networkId The id of the network
* @param { string } webhookId The id of the webhook (http server)
* @param { object } webhook The webhook (http server) itself
* @param { string } webhook.name The name of the webhook
* @param { string } webhook.url The url / target of the webhook
* @param { string } webhook.sharedSecret The shared secret of this webhook
* @return { Promise } A promise holding the updated webhook (http server)
* @example <caption>Example request data</caption>
* {
* "name": "My HTTP server",
* "url": "https://www.example.com/webhooks",
* "sharedSecret": "foobar"
* }
* @example <caption>Example response</caption>
* {
* "id": "ABC123",
* "networkId": "N_123",
* "name": "My HTTP server",
* "url": "https://www.example.com/webhooks",
* "sharedSecret": "foobar"
* }
*/
function updateHTTPServer({
apiKey: localApiKey,
target: localTarget,
scope,
networkId,
webhookId,
webhook
}) {
if (!networkId) {
return Promise.reject(new Error('The parameter networkId is mandatory'));
}
if (!webhookId) {
return Promise.reject(new Error('The parameter webhookId is mandatory'));
}
if (!webhook) {
return Promise.reject(new Error('The parameter webhook is mandatory'));
}
if (!webhook.name) {
return Promise.reject(new Error('The parameter webhook must have a property name'));
}
if (!webhook.url) {
return Promise.reject(new Error('The parameter webhook must have a property url'));
}
if (!webhook.sharedSecret) {
return Promise.reject(new Error('The parameter webhook must have a property sharedSecret'));
}
return axios._put(localApiKey || apiKey, localTarget || target, scope, `${basePath}/${networkId}/httpServers/${webhookId}`, webhook);
}
/**
* Add a http server.
*
* @memberof module:meraki/rest/httpServers
* @param { string } [apiKey] Optional custom apiKey for this request (if not set will take the inital apiKey)
* @param { string } [target] Optional custom target for this request (if not set will take the inital target)
* @param { string } [scope] Optional custom scope for rate limiter
* @param { string } networkId The id of the network
* @param { object } webhook The webhook (http server) itself
* @param { string } webhook.name The name of the webhook
* @param { string } webhook.url The url / target of the webhook
* @param { string } webhook.sharedSecret The shared secret of this webhook
* @return { Promise } A promise holding the webhook (http server)
* @example <caption>Example request data</caption>
* {
* "name": "My HTTP server",
* "url": "https://www.example.com/webhooks",
* "sharedSecret": "foobar"
* }
* @example <caption>Example response</caption>
* {
* "id": "ABC123",
* "networkId": "N_123",
* "name": "My HTTP server",
* "url": "https://www.example.com/webhooks",
* "sharedSecret": "foobar"
* }
*/
function addHTTPServer({
apiKey: localApiKey,
target: localTarget,
scope,
networkId,
webhook
}) {
if (!networkId) {
return Promise.reject(new Error('The parameter networkId is mandatory'));
}
if (!webhook) {
return Promise.reject(new Error('The parameter webhook is mandatory'));
}
if (!webhook.name) {
return Promise.reject(new Error('The parameter webhook must have a property name'));
}
if (!webhook.url) {
return Promise.reject(new Error('The parameter webhook must have a property url'));
}
if (!webhook.sharedSecret) {
return Promise.reject(new Error('The parameter webhook must have a property sharedSecret'));
}
return axios._post(localApiKey || apiKey, localTarget || target, scope, `${basePath}/${networkId}/httpServers`, webhook);
}
/**
* Delete a http servers of a network.
*
* @memberof module:meraki/rest/httpServers
* @param { string } [apiKey] Optional custom apiKey for this request (if not set will take the inital apiKey)
* @param { string } [target] Optional custom target for this request (if not set will take the inital target)
* @param { string } [scope] Optional custom scope for rate limiter
* @param { string } networkId The id of the network
* @param { string } webhookId The id of the webhook (http server)
* @return { Promise } A promise holding nothing
* @example <caption>Example response</caption>
* (empty)
*/
function deleteHTTPServer({
apiKey: localApiKey,
target: localTarget,
scope,
networkId,
webhookId
}) {
if (!networkId) {
return Promise.reject(new Error('The parameter networkId is mandatory'));
}
if (!webhookId) {
return Promise.reject(new Error('The parameter webhookId is mandatory'));
}
return axios._delete(localApiKey || apiKey, localTarget || target, scope, `${basePath}/${networkId}/httpServers/${webhookId}`);
}
/**
* send a test webhook.
*
* @memberof module:meraki/rest/httpServers
* @param { string } [apiKey] Optional custom apiKey for this request (if not set will take the inital apiKey)
* @param { string } [target] Optional custom target for this request (if not set will take the inital target)
* @param { string } [scope] Optional custom scope for rate limiter
* @param { string } networkId The id of the network
* @param { string } url The url where the webhook should be sent to
* @return { Promise } A promise holding the webhook test
* @example <caption>Example request data</caption>
* {
* "url": "https://www.example.com/webhooks"
* }
* @example <caption>Example response</caption>
* {
* "id": "1234",
* "url": "https://www.example.com/path",
* "status": "enqueued"
* }
*/
function sendTestWebhook({
apiKey: localApiKey,
target: localTarget,
scope,
networkId,
url
}) {
if (!networkId) {
return Promise.reject(new Error('The parameter networkId is mandatory'));
} // I don't care if it is an empty string or 0
if (typeof url === 'undefined') {
return Promise.reject(new Error('The parameter url is mandatory'));
}
return axios._post(localApiKey || apiKey, localTarget || target, scope, `${basePath}/${networkId}/httpServers/webhookTests`, {
url: url
});
}
/**
* Return the status of a webhook test.
*
* @memberof module:meraki/rest/httpServers
* @param { string } [apiKey] Optional custom apiKey for this request (if not set will take the inital apiKey)
* @param { string } [target] Optional custom target for this request (if not set will take the inital target)
* @param { string } [scope] Optional custom scope for rate limiter
* @param { string } networkId The id of the network for which to list the http servers
* @param { string } webhookTestId The id of the test
* @return { Promise } A promise holding the status of this test
* @example <caption>Example response</caption>
* {
* "id": "1234",
* "url": "https://www.example.com/path",
* "status": "enqueued"
* }
*/
function getWebhookTestStatus({
apiKey: localApiKey,
target: localTarget,
scope,
networkId,
webhookTestId
}) {
if (!networkId) {
return Promise.reject(new Error('The parameter networkId is mandatory'));
}
if (!webhookTestId) {
return Promise.reject(new Error('The parameter webhookTestId is mandatory'));
}
return axios._get(localApiKey || apiKey, localTarget || target, scope, `${basePath}/${networkId}/httpServers/webhookTests/${webhookTestId}`);
}
return {
listHTTPServers,
getHTTPServer,
updateHTTPServer,
addHTTPServer,
deleteHTTPServer,
sendTestWebhook,
getWebhookTestStatus
};
}
module.exports = createHTTPServersEndpoints;