sources/new-changes/new-changes.mjs
import espoCrm from "../../espocrm.app.mjs"; import constants from "../../common/constants.mjs"; import { ConfigurationError } from "@pipedream/platform"; export default { key: "espocrm-new-changes", name: "New Changes (Instant)", description: "Emit new event upon the creation, update, deletion, or changes of any field in an entity type. [See the documentation](https://docs.espocrm.com/administration/webhooks/)", version: "0.0.1", type: "source", dedupe: "unique", props: { espoCrm, db: "$.service.db", http: "$.interface.http", entityType: { type: "string", label: "Entity Type", description: "The entity type to watch. The list of available entity types can be obtained at Administration > Entity Manager.", }, eventType: { type: "string", label: "Event Type", description: "Watch for this event type from the specified entity", options: constants.EVENT_TYPES, optional: true, }, field: { type: "string", label: "Field", description: "Watch for changes to a specific field. The list of available fields can be obtained at Administration > Entity Manager > fields.", optional: true, }, }, hooks: { async activate() { if ((!this.eventType && !this.field) || (this.eventType && this.field)) { throw new ConfigurationError("One of `Event Type` or `Field` must be entered."); } const { id } = await this.espoCrm.createWebhook({ data: { url: this.http.endpoint, event: this.field ? `${this.entityType}.fieldUpdate.${this.field}` : `${this.entityType}.${this.eventType}`, }, }); this._setHookId(id); }, async deactivate() { const hookId = this._getHookId(); if (hookId) { await this.espoCrm.deleteWebhook({ hookId, }); } }, }, methods: { _getHookId() { return this.db.get("hookId"); }, _setHookId(hookId) { this.db.set("hookId", hookId); }, }, async run(event) { const { body } = event; const ts = Date.now(); this.$emit(body, { id: ts, summary: "New Event Received", ts, }); }, };