From da8d269297af0f309351533701da361576162eed Mon Sep 17 00:00:00 2001 From: Luan Cazarine Date: Thu, 10 Oct 2024 15:42:52 -0300 Subject: [PATCH] New Components - helpspot (#14153) * helpspot init * [Components] helpspot #14147 Sources - New Request - New Request Updated Actions - Update Request - Create Request * pnpm update * some adjusts * Update components/helpspot/sources/new-request/new-request.mjs Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --------- Co-authored-by: Leo Vu Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- .../helpspot/actions/common/request-base.mjs | 131 ++++++++++ .../actions/create-request/create-request.mjs | 45 ++++ .../actions/update-request/update-request.mjs | 53 +++++ components/helpspot/common/constants.mjs | 82 +++++++ components/helpspot/common/utils.mjs | 24 ++ components/helpspot/helpspot.app.mjs | 223 +++++++++++++++++- components/helpspot/package.json | 8 +- components/helpspot/sources/common/base.mjs | 55 +++++ .../sources/new-request/new-request.mjs | 37 +++ .../sources/new-request/test-event.mjs | 53 +++++ .../sources/request-update/request-update.mjs | 49 ++++ .../sources/request-update/test-event.mjs | 172 ++++++++++++++ pnpm-lock.yaml | 5 +- 13 files changed, 929 insertions(+), 8 deletions(-) create mode 100644 components/helpspot/actions/common/request-base.mjs create mode 100644 components/helpspot/actions/create-request/create-request.mjs create mode 100644 components/helpspot/actions/update-request/update-request.mjs create mode 100644 components/helpspot/common/constants.mjs create mode 100644 components/helpspot/common/utils.mjs create mode 100644 components/helpspot/sources/common/base.mjs create mode 100644 components/helpspot/sources/new-request/new-request.mjs create mode 100644 components/helpspot/sources/new-request/test-event.mjs create mode 100644 components/helpspot/sources/request-update/request-update.mjs create mode 100644 components/helpspot/sources/request-update/test-event.mjs diff --git a/components/helpspot/actions/common/request-base.mjs b/components/helpspot/actions/common/request-base.mjs new file mode 100644 index 0000000000000..39d9f75a96ca0 --- /dev/null +++ b/components/helpspot/actions/common/request-base.mjs @@ -0,0 +1,131 @@ +import { + NOTE_IS_HTML, + NOTE_TYPE_OPTIONS, + OPENED_VIA_OPTIONS, +} from "../../common/constants.mjs"; +import helpspot from "../../helpspot.app.mjs"; + +export default { + props: { + helpspot, + tNote: { + type: "string", + label: "Note", + description: "The note of the request", + }, + xCategory: { + propDefinition: [ + helpspot, + "xCategory", + ], + }, + fNoteType: { + type: "string", + label: "Note Type", + description: "The type of the note", + options: NOTE_TYPE_OPTIONS, + optional: true, + }, + fNoteIsHTML: { + type: "string", + label: "Note Is HTML?", + description: "whether the note is HTML or text", + optional: true, + options: NOTE_IS_HTML, + }, + sTitle: { + type: "string", + label: "Subject", + description: "The title used as email subject", + optional: true, + }, + xStatus: { + propDefinition: [ + helpspot, + "xStatus", + ], + optional: true, + }, + sUserId: { + type: "string", + label: "User Id", + description: "The Id of the customer", + optional: true, + }, + sFirstName: { + type: "string", + label: "First Name", + description: "The first name of the request creator", + optional: true, + }, + sLastName: { + type: "string", + label: "Last Name", + description: "The last name of the request creator", + optional: true, + }, + sEmail: { + type: "string", + label: "Email", + description: "The email of the request creator", + optional: true, + }, + sPhone: { + type: "string", + label: "Phone", + description: "The phone number of the request creator", + optional: true, + }, + fUrgent: { + type: "boolean", + label: "Urgent", + description: "Whether the request is urgent or not", + optional: true, + }, + fOpenedVia: { + type: "integer", + label: "Opened Via", + description: "Request opened via", + options: OPENED_VIA_OPTIONS, + optional: true, + }, + emailFrom: { + propDefinition: [ + helpspot, + "emailFrom", + ], + optional: true, + }, + emailCC: { + type: "string[]", + label: "Email CC", + description: "A list of emails to CC on the request", + optional: true, + }, + emailBCC: { + type: "string[]", + label: "Email BCC", + description: "A list of emails to BCC on the request", + optional: true, + }, + emailStaff: { + propDefinition: [ + helpspot, + "emailStaff", + ], + optional: true, + }, + }, + async run({ $ }) { + await this.getValidation(); + + const fn = this.getFunction(); + const response = await fn({ + $, + data: this.getData(), + }); + + $.export("$summary", this.getSummary(response)); + return response; + }, +}; diff --git a/components/helpspot/actions/create-request/create-request.mjs b/components/helpspot/actions/create-request/create-request.mjs new file mode 100644 index 0000000000000..550591c2f86e2 --- /dev/null +++ b/components/helpspot/actions/create-request/create-request.mjs @@ -0,0 +1,45 @@ +import { parseObject } from "../../common/utils.mjs"; +import common from "../common/request-base.mjs"; + +export default { + ...common, + key: "helpspot-create-request", + name: "Create Request", + description: "Creates a new user request. [See the documentation](https://support.helpspot.com/index.php?pg=kb.page&id=164#private.request.create)", + version: "0.0.1", + type: "action", + methods: { + getValidation() { + if (!this.sFirstName && !this.sLastName && !this.sUserId && !this.sEmail && !this.sPhone) { + throw new Error("You must provide at least one of the following: First Name, Last Name, User ID, Email, or Phone."); + } + }, + getFunction() { + return this.helpspot.createRequest; + }, + getData() { + return { + tNote: this.tNote, + xCategory: this.xCategory, + fNoteType: this.fNoteType && parseInt(this.fNoteType), + fNoteIsHTML: this.fNoteIsHTML && parseInt(this.fNoteIsHTML), + sTitle: this.sTitle, + xStatus: this.xStatus, + sUserId: this.sUserId, + sFirstName: this.sFirstName, + sLastName: this.sLastName, + sEmail: this.sEmail, + sPhone: this.sPhone, + fUrgent: +this.fUrgent, + fOpenedVia: this.fOpenedVia, + email_from: this.emailFrom, + email_cc: parseObject(this.emailCC)?.join(), + email_bcc: parseObject(this.emailBCC)?.join(), + email_staff: parseObject(this.emailStaff)?.join(), + }; + }, + getSummary(response) { + return `Successfully created request with Id: ${response.xRequest}`; + }, + }, +}; diff --git a/components/helpspot/actions/update-request/update-request.mjs b/components/helpspot/actions/update-request/update-request.mjs new file mode 100644 index 0000000000000..0f8202da5c03e --- /dev/null +++ b/components/helpspot/actions/update-request/update-request.mjs @@ -0,0 +1,53 @@ +import { parseObject } from "../../common/utils.mjs"; +import common from "../common/request-base.mjs"; + +export default { + ...common, + key: "helpspot-update-request", + name: "Update Request", + description: "Updates an existing user request. [See the documentation](https://support.helpspot.com/index.php?pg=kb.page&id=164#private.request.update)", + version: "0.0.1", + type: "action", + props: { + ...common.props, + xRequest: { + propDefinition: [ + common.props.helpspot, + "xRequest", + ], + }, + }, + methods: { + getValidation() { + return true; + }, + getFunction() { + return this.helpspot.updateRequest; + }, + getData() { + return { + xRequest: this.xRequest, + tNote: this.tNote, + xCategory: this.xCategory, + fNoteType: this.fNoteType && parseInt(this.fNoteType), + fNoteIsHTML: this.fNoteIsHTML && parseInt(this.fNoteIsHTML), + sTitle: this.sTitle, + xStatus: this.xStatus, + sUserId: this.sUserId, + sFirstName: this.sFirstName, + sLastName: this.sLastName, + sEmail: this.sEmail, + sPhone: this.sPhone, + fUrgent: +this.fUrgent, + fOpenedVia: this.fOpenedVia, + email_from: this.emailFrom, + email_cc: parseObject(this.emailCC)?.join(), + email_bcc: parseObject(this.emailBCC)?.join(), + email_staff: parseObject(this.emailStaff)?.join(), + }; + }, + getSummary() { + return `Successfully updated request with ID ${this.xRequest}`; + }, + }, +}; diff --git a/components/helpspot/common/constants.mjs b/components/helpspot/common/constants.mjs new file mode 100644 index 0000000000000..4c3264b552835 --- /dev/null +++ b/components/helpspot/common/constants.mjs @@ -0,0 +1,82 @@ +export const LIMIT = 100; + +export const NOTE_TYPE_OPTIONS = [ + { + label: "Private", + value: "0", + }, + { + label: "Public", + value: "1", + }, + { + label: "External", + value: "2", + }, +]; + +export const NOTE_IS_HTML = [ + { + label: "Text", + value: "0", + }, + { + label: "HTML", + value: "1", + }, +]; + +export const OPENED_VIA_OPTIONS = [ + { + label: "Email", + value: 1, + }, + { + label: "Phone", + value: 2, + }, + { + label: "Walk In", + value: 3, + }, + { + label: "Mail", + value: 4, + }, + { + label: "Other", + value: 5, + }, + { + label: "Web Service", + value: 6, + }, + { + label: "Web Form", + value: 7, + }, + { + label: "Forum", + value: 8, + }, + { + label: "Instant Messenger", + value: 9, + }, + { + label: "Fax", + value: 10, + }, + { + label: "Voicemail", + value: 11, + }, + { + label: "Staff Initiated", + value: 12, + }, + { + label: "Tab Widget", + value: 13, + }, +]; diff --git a/components/helpspot/common/utils.mjs b/components/helpspot/common/utils.mjs new file mode 100644 index 0000000000000..dcc9cc61f6f41 --- /dev/null +++ b/components/helpspot/common/utils.mjs @@ -0,0 +1,24 @@ +export const parseObject = (obj) => { + if (!obj) return undefined; + + if (Array.isArray(obj)) { + return obj.map((item) => { + if (typeof item === "string") { + try { + return JSON.parse(item); + } catch (e) { + return item; + } + } + return item; + }); + } + if (typeof obj === "string") { + try { + return JSON.parse(obj); + } catch (e) { + return obj; + } + } + return obj; +}; diff --git a/components/helpspot/helpspot.app.mjs b/components/helpspot/helpspot.app.mjs index 982fb6ada862d..5c05332f988d2 100644 --- a/components/helpspot/helpspot.app.mjs +++ b/components/helpspot/helpspot.app.mjs @@ -1,11 +1,224 @@ +import { axios } from "@pipedream/platform"; +import { LIMIT } from "./common/constants.mjs"; + export default { type: "app", app: "helpspot", - propDefinitions: {}, + propDefinitions: { + xCategory: { + type: "string", + label: "Category", + description: "The category id of the request.", + async options({ page }) { + const { category } = await this.listCategories({ + params: { + page, + }, + }); + + return Object.entries(category).map(([ + , { + xCategory: value, sCategory: label, + }, + ]) => ({ + label, + value, + })); + }, + }, + emailFrom: { + type: "string", + label: "Send Email From", + description: "The ID of the mailbox to send emails from", + async options({ page }) { + const { mailbox } = await this.listMailboxes({ + params: { + page, + }, + }); + + return mailbox.map(({ + xMailbox: value, sReplyName, sReplyEmail, + }) => ({ + label: `${sReplyName} - ${sReplyEmail}`, + value, + })); + }, + }, + emailStaff: { + type: "string[]", + label: "Email Staff", + description: "List of staff to email", + async options({ page }) { + const { person } = await this.listActiveStaff({ + params: { + page, + }, + }); + + return person.map(({ + xPerson: value, sFname, sLname, sEmail, + }) => ({ + label: `${sFname} ${sLname} - ${sEmail}`, + value, + })); + }, + }, + xStatus: { + type: "string", + label: "Status", + description: "Select a status of the request", + async options({ page }) { + const { status } = await this.listStatuses({ + params: { + page, + }, + }); + + return status.map(({ + xStatus: value, sStatus: label, + }) => ({ + label, + value, + })); + }, + }, + xRequest: { + type: "string", + label: "Request Id", + description: "The Id of the request", + async options({ page }) { + const { request } = await this.listRequests({ + params: { + page, + }, + }); + + return request.map(({ + xRequest: value, sTitle: label, + }) => ({ + label, + value, + })); + }, + }, + }, methods: { - // this.$auth contains connected account data - authKeys() { - console.log(Object.keys(this.$auth)); + _baseUrl() { + return `https://${this.$auth.subdomain}.helpspot.com/api/index.php`; + }, + _headers() { + return { + "Authorization": `Bearer ${this.$auth.api_token}`, + "content-type": "multipart/form-data", + }; + }, + _makeRequest({ + $ = this, methodParam, params, ...opts + }) { + return axios($, { + url: this._baseUrl(), + headers: this._headers(), + params: { + ...params, + method: methodParam, + output: "json", + }, + ...opts, + }); + }, + createRequest(opts = {}) { + return this._makeRequest({ + method: "POST", + methodParam: "private.request.create", + ...opts, + }); + }, + getRequest(opts = {}) { + return this._makeRequest({ + methodParam: "private.request.get", + ...opts, + }); + }, + listCategories(opts = {}) { + return this._makeRequest({ + methodParam: "private.request.getCategories", + ...opts, + }); + }, + listMailboxes(opts = {}) { + return this._makeRequest({ + methodParam: "private.request.getMailboxes", + ...opts, + }); + }, + listActiveStaff(opts = {}) { + return this._makeRequest({ + methodParam: "private.util.getActiveStaff", + ...opts, + }); + }, + listStatuses(opts = {}) { + return this._makeRequest({ + methodParam: "private.request.getStatusTypes", + ...opts, + }); + }, + listRequests(opts = {}) { + return this._makeRequest({ + methodParam: "private.request.search", + ...opts, + }); + }, + listChanges(opts = {}) { + return this._makeRequest({ + methodParam: "private.request.getChanged", + ...opts, + }); + }, + multiGet(opts = {}) { + return this._makeRequest({ + methodParam: "private.request.multiGet", + ...opts, + }); + }, + updateRequest(opts = {}) { + return this._makeRequest({ + method: "POST", + methodParam: "private.request.update", + ...opts, + }); + }, + async *paginate({ + fn, params = {}, maxResults = null, field, ...opts + }) { + let hasMore = false; + let count = 0; + let page = 0; + + do { + params.length = LIMIT; + params.start = LIMIT * page++; + const response = await fn({ + params, + ...opts, + }); + + for (const d of response[field]) { + yield await this.getRequest({ + params: { + xRequest: d.xRequest || d, + }, + }); + + if (maxResults && ++count === maxResults) { + return count; + } + } + + hasMore = response[field].length; + + } while (hasMore); }, }, -}; \ No newline at end of file +}; diff --git a/components/helpspot/package.json b/components/helpspot/package.json index 95d10790828f2..0a8d7a9ce0e6c 100644 --- a/components/helpspot/package.json +++ b/components/helpspot/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/helpspot", - "version": "0.0.1", + "version": "0.1.0", "description": "Pipedream HelpSpot Components", "main": "helpspot.app.mjs", "keywords": [ @@ -11,5 +11,9 @@ "author": "Pipedream (https://pipedream.com/)", "publishConfig": { "access": "public" + }, + "dependencies": { + "@pipedream/platform": "^3.0.3" } -} \ No newline at end of file +} + diff --git a/components/helpspot/sources/common/base.mjs b/components/helpspot/sources/common/base.mjs new file mode 100644 index 0000000000000..de53604c54645 --- /dev/null +++ b/components/helpspot/sources/common/base.mjs @@ -0,0 +1,55 @@ +import { DEFAULT_POLLING_SOURCE_TIMER_INTERVAL } from "@pipedream/platform"; +import helpspot from "../../helpspot.app.mjs"; + +export default { + props: { + helpspot, + db: "$.service.db", + timer: { + type: "$.interface.timer", + default: { + intervalSeconds: DEFAULT_POLLING_SOURCE_TIMER_INTERVAL, + }, + }, + }, + methods: { + _getLastDate() { + return this.db.get("lastDate") || 1; + }, + _setLastDate(lastDate) { + this.db.set("lastDate", lastDate); + }, + _getMaxDate({ request_history: { item } }) { + const history = Object.entries(item).map(([ + , item, + ]) => item.dtGMTChange); + return Date.parse(history[history.length - 1]) / 1000; + }, + async emitEvent(maxResults = false) { + const lastDate = this._getLastDate(); + let responseArray = await this.getItems(maxResults, lastDate); + + if (responseArray.length) { + this._setLastDate(responseArray[0].lastDate); + } + + for (const item of responseArray.reverse()) { + const ts = item.lastDate; + + this.$emit(item, { + id: `${item.xRequest}-${ts}`, + summary: this.getSummary(item), + ts: ts, + }); + } + }, + }, + hooks: { + async deploy() { + await this.emitEvent(25); + }, + }, + async run() { + await this.emitEvent(); + }, +}; diff --git a/components/helpspot/sources/new-request/new-request.mjs b/components/helpspot/sources/new-request/new-request.mjs new file mode 100644 index 0000000000000..14d6f68cb6714 --- /dev/null +++ b/components/helpspot/sources/new-request/new-request.mjs @@ -0,0 +1,37 @@ +import common from "../common/base.mjs"; +import sampleEmit from "./test-event.mjs"; + +export default { + ...common, + key: "helpspot-new-request", + name: "New Request Created", + description: "Emit new event when a new request is created.", + version: "0.0.1", + type: "source", + dedupe: "unique", + methods: { + ...common.methods, + getSummary({ xRequest }) { + return `New Request: ${xRequest}`; + }, + async getItems(maxResults, lastDate) { + const responseArray = []; + + const response = this.helpspot.paginate({ + fn: this.helpspot.listRequests, + field: "request", + params: { + afterDate: lastDate, + }, + maxResults, + }); + + for await (const item of response) { + item.lastDate = Date.parse(item.dtGMTOpened) / 1000; + responseArray.push(item); + } + return responseArray; + }, + }, + sampleEmit, +}; diff --git a/components/helpspot/sources/new-request/test-event.mjs b/components/helpspot/sources/new-request/test-event.mjs new file mode 100644 index 0000000000000..c41ce457b8f47 --- /dev/null +++ b/components/helpspot/sources/new-request/test-event.mjs @@ -0,0 +1,53 @@ +export default { + "xRequest": 12416, + "fOpenedVia": "Phone", + "xOpenedViaId": 0, + "xPortal": 0, + "xMailboxToSendFrom": 0, + "xPersonOpenedBy": "Username", + "xPersonAssignedTo": "Username", + "fOpen": 1, + "xStatus": "Active", + "fUrgent": 0, + "xCategory": "Other", + "dtGMTOpened": "Oct 3, 2024", + "dtGMTClosed": "", + "iLastReplyBy": "Username", + "fTrash": 0, + "dtGMTTrashed": "", + "sRequestPassword": "eiCkgBIZEBkslivbqLsk", + "sTitle": "Title test", + "sUserId": "", + "sFirstName": "First Name", + "sLastName": "", + "sEmail": "", + "sPhone": "", + "fullname": "Full Name", + "request_history": { + "item": { + "34": { + "xRequestHistory": 34, + "xRequest": 12416, + "xPerson": "Username", + "dtGMTChange": "Oct 3 2024, 12:02 PM", + "fPublic": 1, + "fInitial": 1, + "fNoteIsHTML": 1, + "fMergedFromRequest": 0, + "tNote": "

Note test

", + "tEmailHeaders": "", + "fPinned": 0, + "cc": "", + "bcc": "", + "to": "", + "staff_notified": [ + "" + ], + "external": 0, + "person_type": "staff", + "files": [] + } + } + }, + "lastDate": 17279136000 +} \ No newline at end of file diff --git a/components/helpspot/sources/request-update/request-update.mjs b/components/helpspot/sources/request-update/request-update.mjs new file mode 100644 index 0000000000000..d616290cf0c66 --- /dev/null +++ b/components/helpspot/sources/request-update/request-update.mjs @@ -0,0 +1,49 @@ +import common from "../common/base.mjs"; +import sampleEmit from "./test-event.mjs"; + +export default { + ...common, + key: "helpspot-request-update", + name: "New Request Updated", + description: "Emit new event when a request is updated.", + version: "0.0.1", + type: "source", + dedupe: "unique", + methods: { + ...common.methods, + getSummary({ xRequest }) { + return `New request updated: ${xRequest}`; + }, + async getItems(maxResults, lastDate) { + const { xRequest } = await this.helpspot.listChanges({ + params: { + dtGMTChange: lastDate, + }, + }); + + if (!xRequest.length) return []; + + let { request: items } = await this.helpspot.multiGet({ + params: { + xRequest, + }, + }); + + items.reverse(); + + if (maxResults && items.length > maxResults) { + items.length = maxResults; + } + + const responseArray = []; + + for (const item of items) { + item.lastDate = this._getMaxDate(item); + responseArray.push(item); + } + + return responseArray; + }, + }, + sampleEmit, +}; diff --git a/components/helpspot/sources/request-update/test-event.mjs b/components/helpspot/sources/request-update/test-event.mjs new file mode 100644 index 0000000000000..d366e94fdef11 --- /dev/null +++ b/components/helpspot/sources/request-update/test-event.mjs @@ -0,0 +1,172 @@ +export default { + "xRequest": 12410, + "fOpenedVia": "Web Service", + "xOpenedViaId": 0, + "xPortal": 0, + "xMailboxToSendFrom": 1, + "xPersonOpenedBy": "Username", + "xPersonAssignedTo": "", + "fOpen": 1, + "xStatus": "Escalated", + "fUrgent": 1, + "xCategory": "Server", + "dtGMTOpened": "Oct 3, 2024", + "dtGMTClosed": "", + "iLastReplyBy": "Username", + "fTrash": 0, + "dtGMTTrashed": "", + "sRequestPassword": "QrdtUSeDqXzYpfnBULov", + "sTitle": "Re: subject test", + "sUserId": "", + "sFirstName": "First Name", + "sLastName": "Last name", + "sEmail": "user@email.com", + "sPhone": "11111111111", + "fullname": "Full Name", + "request_history": { + "item": { + "24": { + "xRequestHistory": 24, + "xRequest": 12410, + "xPerson": "Username", + "dtGMTChange": "Oct 3 2024, 10:01 AM", + "fPublic": 0, + "fInitial": 1, + "fNoteIsHTML": 1, + "fMergedFromRequest": 0, + "tLog": "", + "tNote": "

note test

", + "tEmailHeaders": "", + "fPinned": 0, + "external": 0, + "person_type": "staff", + "files": [] + }, + "25": { + "xRequestHistory": 25, + "xRequest": 12410, + "xPerson": "Username", + "dtGMTChange": "Oct 3 2024, 10:08 AM", + "fPublic": 0, + "fInitial": 0, + "fNoteIsHTML": 1, + "fMergedFromRequest": 0, + "tLog": "", + "tNote": "

note 06

", + "tEmailHeaders": "", + "fPinned": 0, + "external": 0, + "person_type": "staff", + "files": [] + }, + "26": { + "xRequestHistory": 26, + "xRequest": 12410, + "xPerson": "Username", + "dtGMTChange": "Oct 3 2024, 10:08 AM", + "fPublic": 0, + "fInitial": 0, + "fNoteIsHTML": 0, + "fMergedFromRequest": 0, + "tLog": "Request Changed:", + "tNote": "note test", + "tEmailHeaders": "", + "fPinned": 0, + "external": 0, + "person_type": "staff", + "files": [] + }, + "27": { + "xRequestHistory": 27, + "xRequest": 12410, + "xPerson": "Username", + "dtGMTChange": "Oct 3 2024, 10:10 AM", + "fPublic": 0, + "fInitial": 0, + "fNoteIsHTML": 0, + "fMergedFromRequest": 0, + "tLog": "", + "tNote": "note test", + "tEmailHeaders": "", + "fPinned": 0, + "external": 0, + "person_type": "staff", + "files": [] + }, + "28": { + "xRequestHistory": 28, + "xRequest": 12410, + "xPerson": "Username", + "dtGMTChange": "Oct 3 2024, 10:10 AM", + "fPublic": 0, + "fInitial": 0, + "fNoteIsHTML": 0, + "fMergedFromRequest": 0, + "tLog": "Request Changed:", + "tNote": "", + "tEmailHeaders": "", + "fPinned": 0, + "external": 0, + "person_type": "staff", + "files": [] + }, + "40": { + "xRequestHistory": 40, + "xRequest": 12410, + "xPerson": "Username", + "dtGMTChange": "Oct 3 2024, 04:43 PM", + "fPublic": 0, + "fInitial": 0, + "fNoteIsHTML": 0, + "fMergedFromRequest": 0, + "tLog": "Request Changed:", + "tNote": "", + "tEmailHeaders": "", + "fPinned": 0, + "external": 0, + "person_type": "staff", + "files": [] + }, + "48": { + "xRequestHistory": 48, + "xRequest": 12410, + "xPerson": "Username", + "dtGMTChange": "Oct 3 2024, 04:45 PM", + "fPublic": 1, + "fInitial": 0, + "fNoteIsHTML": 1, + "fMergedFromRequest": 0, + "tNote": "

note test

", + "tEmailHeaders": "", + "fPinned": 0, + "cc": "test@email.com", + "bcc": "test@bcc.com", + "to": "", + "staff_notified": [ + "" + ], + "external": 0, + "person_type": "staff", + "files": [] + }, + "49": { + "xRequestHistory": 49, + "xRequest": 12410, + "xPerson": "Username", + "dtGMTChange": "Oct 3 2024, 04:45 PM", + "fPublic": 0, + "fInitial": 0, + "fNoteIsHTML": 0, + "fMergedFromRequest": 0, + "tLog": "Request Changed:", + "tNote": "", + "tEmailHeaders": "", + "fPinned": 0, + "external": 0, + "person_type": "staff", + "files": [] + } + } + }, + "lastDate": 1727973900 +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 07c50e349749f..2c02b29057180 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4454,7 +4454,10 @@ importers: '@pipedream/platform': 1.6.0 components/helpspot: - specifiers: {} + specifiers: + '@pipedream/platform': ^3.0.3 + dependencies: + '@pipedream/platform': 3.0.3 components/helpwise: specifiers: {}