UNPKG

node-meraki

Version:
355 lines (318 loc) 12.5 kB
/** * 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;