import stampit from 'stampit'; import _ from 'lodash'; import {Meta, Model} from './base'; import QuerySet from '../querySet'; const ScriptEndpointQuerySet = stampit().compose(QuerySet).methods({ /** * Runs ScriptEndpoint matching the given lookup properties. * @memberOf ScriptEndpointQuerySet * @instance * @param {Object} properties lookup properties used for path resolving * @param {Object} payload the payload to be sent * @returns {Promise} * @example {@lang javascript} * ScriptEndpoint.please().run({name: 'test', instanceName: 'test-one'}).then(function(trace) {}); */ run(properties = {}, payload = {}) { const {ScriptEndpointTrace} = this.getConfig(); this.properties = _.assign({}, this.properties, properties); this.method = 'POST'; this.endpoint = 'run'; this.payload = payload; this._serialize = false; return this.then((trace) => { return ScriptEndpointTrace.fromJSON(trace, { instanceName: this.properties.instanceName, webhookName: this.properties.name }); }); }, /** * Runs `public` ScriptEndpoint matching the given lookup properties. * @memberOf ScriptEndpointQuerySet * @instance * @param {Object} properties lookup properties used for path resolving * @param {Object} payload the payload to be sent * @returns {Promise} * @example {@lang javascript} * ScriptEndpoint.please().runPublic({public_link: '44cfc5552eacc', instanceName: 'test-one'}).then(function(trace) {}); */ runPublic(properties = {}, payload = {}) { const {ScriptEndpointTrace} = this.getConfig(); this.properties = _.assign({}, this.properties, properties); this.method = 'POST'; this.endpoint = 'public'; this.payload = payload; this._serialize = false; return this.then((trace) => { return ScriptEndpointTrace.fromJSON(trace, { instanceName: this.properties.instanceName, webhookName: this.properties.name }); }); }, /** * Resets ScriptEndpoint matching the given lookup properties. * @memberOf ScriptEndpointQuerySet * @instance * @param {Object} properties lookup properties used for path resolving * @returns {ScriptEndpointQuerySet} * @example {@lang javascript} * ScriptEndpoint.please().reset({name: 'test', instanceName: 'test-one'}).then(function(trace) {}); */ reset(properties = {}) { this.properties = _.assign({}, this.properties, properties); this.method = 'POST'; this.endpoint = 'reset'; return this; } }); const ScriptEndpointMeta = Meta({ name: 'scriptendpoint', pluralName: 'scriptendpoints', endpoints: { 'detail': { 'methods': ['delete', 'patch', 'put', 'get'], 'path': '/v1.1/instances/{instanceName}/endpoints/scripts/{name}/' }, 'list': { 'methods': ['post', 'get'], 'path': '/v1.1/instances/{instanceName}/endpoints/scripts/' }, 'run': { 'methods': ['post'], 'path': '/v1.1/instances/{instanceName}/endpoints/scripts/{name}/run/' }, 'reset': { 'methods': ['post'], 'path': '/v1.1/instances/{instanceName}/endpoints/scripts/{name}/reset_link/' }, 'public': { 'methods': ['post'], 'path': '/v1.1/instances/{instanceName}/endpoints/scripts/p/{public_link}/{name}/' } }, relatedModels: ['ScriptEndpointTrace'] }); const ScriptEndpointConstraints = { instanceName: { presence: true, length: { minimum: 5 } }, name: { presence: true, string: true, length: { minimum: 5 } }, description: { string: true }, public: { boolean: true }, script: { presence: true, numericality: true } }; /** * OO wrapper around instance webhooks {@link # endpoint}. * @constructor * @type {ScriptEndpoint} * @property {String} name * @property {String} instanceName * @property {String} public_link * @property {Boolean} public * @property {Number} codebox * @property {String} [description = null] * @property {String} [links = {}] */ const ScriptEndpoint = stampit() .compose(Model) .setMeta(ScriptEndpointMeta) .setQuerySet(ScriptEndpointQuerySet) .setConstraints(ScriptEndpointConstraints) .methods({ /** * Runs current ScriptEndpoint. * @memberOf ScriptEndpoint * @instance * @param {Object} [payload = {}] * @returns {Promise} * @example {@lang javascript} * ScriptEndpoint.please().get({instanceName: 'test-one', id: 1}).then(function(codebox) { codebox.run({some: 'variable'}).then(function(trace) {}); }); */ run(payload = {}, cache_key) { const {ScriptEndpointTrace} = this.getConfig(); const meta = this.getMeta(); const path = meta.resolveEndpointPath('run', this); if(!_.isEmpty(cache_key)) _.assign(payload, { query: {cache_key} }) return this.makeRequest('POST', path, {payload}) .then((body) => { return ScriptEndpointTrace.fromJSON(body, { instanceName: this.instanceName, webhookName: this.name }); }); }, /** * Runs current `public` ScriptEndpoint. * @memberOf ScriptEndpoint * @instance * @param {Object} [payload = {}] * @returns {Promise} * @example {@lang javascript} * ScriptEndpoint.please().get({instanceName: 'test-one', id: 1}).then(function(codebox) { codebox.runPublic({some: 'variable'}).then(function(trace) {}); }); */ runPublic(payload = {}, cache_key) { const {ScriptEndpointTrace} = this.getConfig(); const meta = this.getMeta(); const path = meta.resolveEndpointPath('public', this); if(!_.isEmpty(cache_key)) _.assign(payload, { query: {cache_key} }) return this.makeRequest('POST', path, {payload}, cache_key) .then((body) => { return ScriptEndpointTrace.fromJSON(body, { instanceName: this.instanceName, webhookName: this.name }); }); }, /** * Resets current ScriptEndpoint. * @memberOf ScriptEndpoint * @instance * @returns {Promise} * @example {@lang javascript} * ScriptEndpoint.please().get({instanceName: 'test-one', name: 'test'}).then(function(webhook) { webhook.reset().then(function() {}); }); */ reset() { const meta = this.getMeta(); const path = meta.resolveEndpointPath('reset', this); return this.makeRequest('POST', path).then((body) => this.serialize(body)); } }); export default ScriptEndpoint;