From f456e6e792c9524488e6da92382a013ff521f208 Mon Sep 17 00:00:00 2001 From: Luan Cazarine Date: Fri, 24 Jan 2025 15:20:16 -0300 Subject: [PATCH 1/3] goto_meeting init --- .../actions/create-meeting/create-meeting.mjs | 80 ++++++++++ components/goto_meeting/goto_meeting.app.mjs | 150 +++++++++++++++++- components/goto_meeting/package.json | 2 +- .../sources/new-meeting/new-meeting.mjs | 139 ++++++++++++++++ 4 files changed, 368 insertions(+), 3 deletions(-) create mode 100644 components/goto_meeting/actions/create-meeting/create-meeting.mjs create mode 100644 components/goto_meeting/sources/new-meeting/new-meeting.mjs diff --git a/components/goto_meeting/actions/create-meeting/create-meeting.mjs b/components/goto_meeting/actions/create-meeting/create-meeting.mjs new file mode 100644 index 0000000000000..c132b6698a18f --- /dev/null +++ b/components/goto_meeting/actions/create-meeting/create-meeting.mjs @@ -0,0 +1,80 @@ +import goto_meeting from "../../goto_meeting.app.mjs"; +import { axios } from "@pipedream/platform"; + +export default { + key: "goto_meeting-create-meeting", + name: "Create Meeting", + description: "Creates a scheduled meeting in GoTo Meeting. [See the documentation](), ", + version: "0.0.{{ts}}", + type: "action", + props: { + goto_meeting: { + type: "app", + app: "goto_meeting", + }, + subject: { + propDefinition: [ + goto_meeting, + "subject", + ], + }, + startTime: { + propDefinition: [ + goto_meeting, + "startTime", + ], + }, + endTime: { + propDefinition: [ + goto_meeting, + "endTime", + ], + }, + passwordRequired: { + propDefinition: [ + goto_meeting, + "passwordRequired", + ], + }, + conferenceCallInfo: { + propDefinition: [ + goto_meeting, + "conferenceCallInfo", + ], + }, + meetingType: { + propDefinition: [ + goto_meeting, + "meetingType", + ], + }, + timezoneKey: { + propDefinition: [ + goto_meeting, + "timezoneKey", + ], + optional: true, + }, + coorganizerKeys: { + propDefinition: [ + goto_meeting, + "coorganizerKeys", + ], + optional: true, + }, + }, + async run({ $ }) { + const meeting = await this.goto_meeting.createScheduledMeeting({ + subject: this.subject, + startTime: this.startTime, + endTime: this.endTime, + passwordRequired: this.passwordRequired, + conferenceCallInfo: this.conferenceCallInfo, + meetingType: this.meetingType, + timezoneKey: this.timezoneKey, + coorganizerKeys: this.coorganizerKeys, + }); + $.export("$summary", `Meeting Created: ${meeting.subject}`); + return meeting; + }, +}; diff --git a/components/goto_meeting/goto_meeting.app.mjs b/components/goto_meeting/goto_meeting.app.mjs index aae71d3197a52..81565c0aa98b9 100644 --- a/components/goto_meeting/goto_meeting.app.mjs +++ b/components/goto_meeting/goto_meeting.app.mjs @@ -1,11 +1,157 @@ +import { axios } from "@pipedream/platform"; + export default { type: "app", app: "goto_meeting", - propDefinitions: {}, + version: "0.0.{{ts}}", + propDefinitions: { + subject: { + type: "string", + label: "Subject", + description: "The subject of the meeting", + }, + startTime: { + type: "string", + label: "Start Time", + description: "The start time of the meeting in ISO 8601 format", + }, + endTime: { + type: "string", + label: "End Time", + description: "The end time of the meeting in ISO 8601 format", + }, + passwordRequired: { + type: "boolean", + label: "Password Required", + description: "Whether a password is required to join the meeting", + }, + conferenceCallInfo: { + type: "string", + label: "Conference Call Info", + description: "Information for the conference call", + }, + meetingType: { + type: "string", + label: "Meeting Type", + description: "The type of the meeting", + options: [ + { + label: "Scheduled", + value: "scheduled", + }, + { + label: "Instant", + value: "instant", + }, + { + label: "Recurring", + value: "recurring", + }, + ], + }, + timezoneKey: { + type: "string", + label: "Timezone Key", + description: "The timezone key for the meeting time", + optional: true, + }, + coorganizerKeys: { + type: "string[]", + label: "Co-Organizer Keys", + description: "Keys of the co-organizers for the meeting", + optional: true, + async options() { + const coorganizers = await this.listCoOrganizers(); + return coorganizers.map((coorganizer) => ({ + label: coorganizer.name, + value: coorganizer.id, + })); + }, + }, + }, methods: { - // this.$auth contains connected account data + // Existing method authKeys() { console.log(Object.keys(this.$auth)); }, + _baseUrl() { + return "https://api.goto.com/meeting/v1"; + }, + async _makeRequest(opts = {}) { + const { + $ = this, + method = "GET", + path = "/", + headers = {}, + ...otherOpts + } = opts; + return axios($, { + ...otherOpts, + method, + url: this._baseUrl() + path, + headers: { + ...headers, + "Authorization": `Bearer ${this.$auth.access_token}`, + "Content-Type": "application/json", + }, + }); + }, + async createScheduledMeeting({ + subject, startTime, endTime, passwordRequired, conferenceCallInfo, meetingType, timezoneKey, coorganizerKeys, + }) { + const data = { + subject: this.subject, + startTime: this.startTime, + endTime: this.endTime, + passwordRequired: this.passwordRequired, + conferenceCallInfo: this.conferenceCallInfo, + meetingType: this.meetingType, + }; + if (this.timezoneKey) { + data.timezoneKey = this.timezoneKey; + } + if (this.coorganizerKeys && this.coorganizerKeys.length > 0) { + data.coorganizerKeys = this.coorganizerKeys; + } + const meeting = await this._makeRequest({ + method: "POST", + path: "/meetings", + data, + }); + this.emitMeetingCreated(meeting); + return meeting; + }, + async listCoOrganizers() { + return this._makeRequest({ + method: "GET", + path: "/users/coorganizers", + }); + }, + emitMeetingCreated(meeting) { + this.$emit(meeting, { + summary: `Meeting Created: ${meeting.subject}`, + id: meeting.id, + }); + }, + async paginate(fn, ...opts) { + const results = []; + let hasMore = true; + let page = 1; + + while (hasMore) { + const response = await fn({ + ...opts, + page, + }); + if (response && response.length > 0) { + results.push(...response); + page += 1; + } else { + hasMore = false; + } + } + + return results; + }, }, }; diff --git a/components/goto_meeting/package.json b/components/goto_meeting/package.json index a3ecea1b93384..833cf5eb82af4 100644 --- a/components/goto_meeting/package.json +++ b/components/goto_meeting/package.json @@ -12,4 +12,4 @@ "publishConfig": { "access": "public" } -} \ No newline at end of file +} diff --git a/components/goto_meeting/sources/new-meeting/new-meeting.mjs b/components/goto_meeting/sources/new-meeting/new-meeting.mjs new file mode 100644 index 0000000000000..bd94b0f1d9811 --- /dev/null +++ b/components/goto_meeting/sources/new-meeting/new-meeting.mjs @@ -0,0 +1,139 @@ +import goto_meeting from "../../goto_meeting.app.mjs"; +import { + axios, DEFAULT_POLLING_SOURCE_TIMER_INTERVAL, +} from "@pipedream/platform"; + +export default { + key: "goto_meeting-new-meeting", + name: "New Meeting Created", + description: "Emit a new event when a meeting is created in your GoToMeeting account. [See the documentation]()", + version: "0.0.{{ts}}", + type: "source", + dedupe: "unique", + props: { + goto_meeting: { + type: "app", + app: "goto_meeting", + }, + db: "$.service.db", + timer: { + type: "$.interface.timer", + default: { + intervalSeconds: DEFAULT_POLLING_SOURCE_TIMER_INTERVAL, + }, + }, + }, + hooks: { + async deploy() { + const MAX_EVENTS = 50; + let page = 1; + const fetchedMeetings = []; + + while (fetchedMeetings.length < MAX_EVENTS) { + const meetings = await this.goto_meeting._makeRequest({ + method: "GET", + path: "/meetings", + params: { + page, + perPage: 50, + orderBy: "created", + order: "desc", + }, + }); + + if (meetings.length === 0) { + break; + } + + fetchedMeetings.push(...meetings); + + if (meetings.length < 50) { + break; + } + + page += 1; + } + + const recentMeetings = fetchedMeetings.slice(0, MAX_EVENTS).reverse(); + + for (const meeting of recentMeetings) { + this.$emit(meeting, { + id: meeting.id || meeting.created, + summary: `Meeting Created: ${meeting.subject}`, + ts: meeting.created + ? Date.parse(meeting.created) + : Date.now(), + }); + } + + const lastMeeting = fetchedMeetings[0]; + const lastTimestamp = lastMeeting.created + ? Date.parse(lastMeeting.created) + : Date.now(); + await this.db.set("lastTimestamp", lastTimestamp); + }, + async activate() { + // Add activation logic if needed + }, + async deactivate() { + // Add deactivation logic if needed + }, + }, + async run() { + const lastTimestamp = (await this.db.get("lastTimestamp")) || 0; + let page = 1; + const newMeetings = []; + + while (true) { + const meetings = await this.goto_meeting._makeRequest({ + method: "GET", + path: "/meetings", + params: { + page, + perPage: 50, + orderBy: "created", + order: "desc", + }, + }); + + if (meetings.length === 0) { + break; + } + + for (const meeting of meetings) { + const meetingTimestamp = meeting.created + ? Date.parse(meeting.created) + : Date.now(); + if (meetingTimestamp > lastTimestamp) { + newMeetings.push(meeting); + } else { + break; + } + } + + if (meetings.length < 50) { + break; + } + + page += 1; + } + + if (newMeetings.length > 0) { + for (const meeting of newMeetings.reverse()) { + this.$emit(meeting, { + id: meeting.id || meeting.created, + summary: `Meeting Created: ${meeting.subject}`, + ts: meeting.created + ? Date.parse(meeting.created) + : Date.now(), + }); + } + + const latestMeeting = newMeetings[0]; + const latestTimestamp = latestMeeting.created + ? Date.parse(latestMeeting.created) + : Date.now(); + await this.db.set("lastTimestamp", latestTimestamp); + } + }, +}; From 75ff9a8f868ea2e24f552328e14525121a70a45b Mon Sep 17 00:00:00 2001 From: Luan Cazarine Date: Mon, 27 Jan 2025 16:46:45 -0300 Subject: [PATCH 2/3] [Components] goto_meeting #15169 Sources - New Meeting Actions - Create Meeting --- .../actions/create-meeting/create-meeting.mjs | 93 +++++------ components/goto_meeting/common/constants.mjs | 14 ++ components/goto_meeting/common/utils.mjs | 24 +++ components/goto_meeting/goto_meeting.app.mjs | 151 ++---------------- components/goto_meeting/package.json | 5 +- .../sources/new-meeting/new-meeting.mjs | 135 +++------------- 6 files changed, 117 insertions(+), 305 deletions(-) create mode 100644 components/goto_meeting/common/constants.mjs create mode 100644 components/goto_meeting/common/utils.mjs diff --git a/components/goto_meeting/actions/create-meeting/create-meeting.mjs b/components/goto_meeting/actions/create-meeting/create-meeting.mjs index c132b6698a18f..bc2800704135c 100644 --- a/components/goto_meeting/actions/create-meeting/create-meeting.mjs +++ b/components/goto_meeting/actions/create-meeting/create-meeting.mjs @@ -1,80 +1,67 @@ -import goto_meeting from "../../goto_meeting.app.mjs"; -import { axios } from "@pipedream/platform"; +import { MEETING_TYPE_OPTIONS } from "../../common/constants.mjs"; +import { parseObject } from "../../common/utils.mjs"; +import app from "../../goto_meeting.app.mjs"; export default { key: "goto_meeting-create-meeting", name: "Create Meeting", - description: "Creates a scheduled meeting in GoTo Meeting. [See the documentation](), ", - version: "0.0.{{ts}}", + description: "Creates a scheduled meeting in GoTo Meeting. [See the documentation](https://developer.goto.com/GoToMeetingV1#tag/Meetings/operation/createMeeting)", + version: "0.0.1", type: "action", props: { - goto_meeting: { - type: "app", - app: "goto_meeting", - }, + app, subject: { - propDefinition: [ - goto_meeting, - "subject", - ], + type: "string", + label: "Subject", + description: "The subject of the meeting", }, startTime: { - propDefinition: [ - goto_meeting, - "startTime", - ], + type: "string", + label: "Start Time", + description: "The start time of the meeting in ISO 8601 format", }, endTime: { - propDefinition: [ - goto_meeting, - "endTime", - ], + type: "string", + label: "End Time", + description: "The end time of the meeting in ISO 8601 format", }, passwordRequired: { - propDefinition: [ - goto_meeting, - "passwordRequired", - ], + type: "boolean", + label: "Password Required", + description: "Whether a password is required to join the meeting", }, conferenceCallInfo: { - propDefinition: [ - goto_meeting, - "conferenceCallInfo", - ], + type: "string", + label: "Conference Call Info", + description: "Information for the conference call", }, meetingType: { - propDefinition: [ - goto_meeting, - "meetingType", - ], - }, - timezoneKey: { - propDefinition: [ - goto_meeting, - "timezoneKey", - ], - optional: true, + type: "string", + label: "Meeting Type", + description: "The type of the meeting", + options: MEETING_TYPE_OPTIONS, }, coorganizerKeys: { - propDefinition: [ - goto_meeting, - "coorganizerKeys", - ], + type: "string[]", + label: "Co-Organizer Keys", + description: "Keys of the co-organizers for the meeting", optional: true, }, }, async run({ $ }) { - const meeting = await this.goto_meeting.createScheduledMeeting({ - subject: this.subject, - startTime: this.startTime, - endTime: this.endTime, - passwordRequired: this.passwordRequired, - conferenceCallInfo: this.conferenceCallInfo, - meetingType: this.meetingType, - timezoneKey: this.timezoneKey, - coorganizerKeys: this.coorganizerKeys, + const meeting = await this.app.createScheduledMeeting({ + $, + data: { + subject: this.subject, + startTime: this.startTime, + endTime: this.endTime, + passwordRequired: this.passwordRequired, + conferenceCallInfo: this.conferenceCallInfo, + meetingType: this.meetingType, + coorganizerKeys: parseObject(this.coorganizerKeys), + }, }); - $.export("$summary", `Meeting Created: ${meeting.subject}`); + $.export("$summary", `Meeting Created: ${meeting[0].meetingid}`); return meeting; }, }; diff --git a/components/goto_meeting/common/constants.mjs b/components/goto_meeting/common/constants.mjs new file mode 100644 index 0000000000000..0e4cae27b44f7 --- /dev/null +++ b/components/goto_meeting/common/constants.mjs @@ -0,0 +1,14 @@ +export const MEETING_TYPE_OPTIONS = [ + { + label: "Scheduled", + value: "scheduled", + }, + { + label: "Instant", + value: "instant", + }, + { + label: "Recurring", + value: "recurring", + }, +]; diff --git a/components/goto_meeting/common/utils.mjs b/components/goto_meeting/common/utils.mjs new file mode 100644 index 0000000000000..dcc9cc61f6f41 --- /dev/null +++ b/components/goto_meeting/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/goto_meeting/goto_meeting.app.mjs b/components/goto_meeting/goto_meeting.app.mjs index 81565c0aa98b9..a2c6f5c02b711 100644 --- a/components/goto_meeting/goto_meeting.app.mjs +++ b/components/goto_meeting/goto_meeting.app.mjs @@ -3,155 +3,36 @@ import { axios } from "@pipedream/platform"; export default { type: "app", app: "goto_meeting", - version: "0.0.{{ts}}", - propDefinitions: { - subject: { - type: "string", - label: "Subject", - description: "The subject of the meeting", - }, - startTime: { - type: "string", - label: "Start Time", - description: "The start time of the meeting in ISO 8601 format", - }, - endTime: { - type: "string", - label: "End Time", - description: "The end time of the meeting in ISO 8601 format", - }, - passwordRequired: { - type: "boolean", - label: "Password Required", - description: "Whether a password is required to join the meeting", - }, - conferenceCallInfo: { - type: "string", - label: "Conference Call Info", - description: "Information for the conference call", - }, - meetingType: { - type: "string", - label: "Meeting Type", - description: "The type of the meeting", - options: [ - { - label: "Scheduled", - value: "scheduled", - }, - { - label: "Instant", - value: "instant", - }, - { - label: "Recurring", - value: "recurring", - }, - ], - }, - timezoneKey: { - type: "string", - label: "Timezone Key", - description: "The timezone key for the meeting time", - optional: true, - }, - coorganizerKeys: { - type: "string[]", - label: "Co-Organizer Keys", - description: "Keys of the co-organizers for the meeting", - optional: true, - async options() { - const coorganizers = await this.listCoOrganizers(); - return coorganizers.map((coorganizer) => ({ - label: coorganizer.name, - value: coorganizer.id, - })); - }, - }, - }, methods: { - // Existing method - authKeys() { - console.log(Object.keys(this.$auth)); - }, _baseUrl() { return "https://api.goto.com/meeting/v1"; }, - async _makeRequest(opts = {}) { - const { - $ = this, - method = "GET", - path = "/", - headers = {}, - ...otherOpts - } = opts; + _headers() { + return { + "Authorization": `Bearer ${this.$auth.oauth_access_token}`, + }; + }, + _makeRequest({ + $ = this, path, ...opts + }) { return axios($, { - ...otherOpts, - method, url: this._baseUrl() + path, - headers: { - ...headers, - "Authorization": `Bearer ${this.$auth.access_token}`, - "Content-Type": "application/json", - }, + headers: this._headers(), + ...opts, }); }, - async createScheduledMeeting({ - subject, startTime, endTime, passwordRequired, conferenceCallInfo, meetingType, timezoneKey, coorganizerKeys, - }) { - const data = { - subject: this.subject, - startTime: this.startTime, - endTime: this.endTime, - passwordRequired: this.passwordRequired, - conferenceCallInfo: this.conferenceCallInfo, - meetingType: this.meetingType, - }; - if (this.timezoneKey) { - data.timezoneKey = this.timezoneKey; - } - if (this.coorganizerKeys && this.coorganizerKeys.length > 0) { - data.coorganizerKeys = this.coorganizerKeys; - } - const meeting = await this._makeRequest({ + createScheduledMeeting(opts = {}) { + return this._makeRequest({ method: "POST", path: "/meetings", - data, + ...opts, }); - this.emitMeetingCreated(meeting); - return meeting; }, - async listCoOrganizers() { + listUpcomingMeetings(opts = {}) { return this._makeRequest({ - method: "GET", - path: "/users/coorganizers", + path: "/upcomingMeetings", + ...opts, }); }, - emitMeetingCreated(meeting) { - this.$emit(meeting, { - summary: `Meeting Created: ${meeting.subject}`, - id: meeting.id, - }); - }, - async paginate(fn, ...opts) { - const results = []; - let hasMore = true; - let page = 1; - - while (hasMore) { - const response = await fn({ - ...opts, - page, - }); - if (response && response.length > 0) { - results.push(...response); - page += 1; - } else { - hasMore = false; - } - } - - return results; - }, }, }; diff --git a/components/goto_meeting/package.json b/components/goto_meeting/package.json index 833cf5eb82af4..7ea52ea7cb1b6 100644 --- a/components/goto_meeting/package.json +++ b/components/goto_meeting/package.json @@ -1,6 +1,6 @@ { "name": "@pipedream/goto_meeting", - "version": "0.0.1", + "version": "0.1.0", "description": "Pipedream GoTo Meeting Components", "main": "goto_meeting.app.mjs", "keywords": [ @@ -11,5 +11,8 @@ "author": "Pipedream (https://pipedream.com/)", "publishConfig": { "access": "public" + }, + "dependencies": { + "@pipedream/platform": "^3.0.3" } } diff --git a/components/goto_meeting/sources/new-meeting/new-meeting.mjs b/components/goto_meeting/sources/new-meeting/new-meeting.mjs index bd94b0f1d9811..6f9eec37c1e26 100644 --- a/components/goto_meeting/sources/new-meeting/new-meeting.mjs +++ b/components/goto_meeting/sources/new-meeting/new-meeting.mjs @@ -1,20 +1,15 @@ -import goto_meeting from "../../goto_meeting.app.mjs"; -import { - axios, DEFAULT_POLLING_SOURCE_TIMER_INTERVAL, -} from "@pipedream/platform"; +import { DEFAULT_POLLING_SOURCE_TIMER_INTERVAL } from "@pipedream/platform"; +import app from "../../goto_meeting.app.mjs"; export default { key: "goto_meeting-new-meeting", name: "New Meeting Created", - description: "Emit a new event when a meeting is created in your GoToMeeting account. [See the documentation]()", - version: "0.0.{{ts}}", + description: "Emit new event when a meeting is created in your GoToMeeting account.", + version: "0.0.1", type: "source", dedupe: "unique", props: { - goto_meeting: { - type: "app", - app: "goto_meeting", - }, + app, db: "$.service.db", timer: { type: "$.interface.timer", @@ -23,117 +18,25 @@ export default { }, }, }, - hooks: { - async deploy() { - const MAX_EVENTS = 50; - let page = 1; - const fetchedMeetings = []; - - while (fetchedMeetings.length < MAX_EVENTS) { - const meetings = await this.goto_meeting._makeRequest({ - method: "GET", - path: "/meetings", - params: { - page, - perPage: 50, - orderBy: "created", - order: "desc", - }, + methods: { + async emitEvent() { + const response = await this.app.listUpcomingMeetings(); + + for (const item of response) { + this.$emit(item, { + id: item.meetingId, + summary: `Meeting Created: ${item.meetingId}`, + ts: Date.now(), }); - - if (meetings.length === 0) { - break; - } - - fetchedMeetings.push(...meetings); - - if (meetings.length < 50) { - break; - } - - page += 1; } - - const recentMeetings = fetchedMeetings.slice(0, MAX_EVENTS).reverse(); - - for (const meeting of recentMeetings) { - this.$emit(meeting, { - id: meeting.id || meeting.created, - summary: `Meeting Created: ${meeting.subject}`, - ts: meeting.created - ? Date.parse(meeting.created) - : Date.now(), - }); - } - - const lastMeeting = fetchedMeetings[0]; - const lastTimestamp = lastMeeting.created - ? Date.parse(lastMeeting.created) - : Date.now(); - await this.db.set("lastTimestamp", lastTimestamp); - }, - async activate() { - // Add activation logic if needed }, - async deactivate() { - // Add deactivation logic if needed + }, + hooks: { + async deploy() { + await this.emitEvent(); }, }, async run() { - const lastTimestamp = (await this.db.get("lastTimestamp")) || 0; - let page = 1; - const newMeetings = []; - - while (true) { - const meetings = await this.goto_meeting._makeRequest({ - method: "GET", - path: "/meetings", - params: { - page, - perPage: 50, - orderBy: "created", - order: "desc", - }, - }); - - if (meetings.length === 0) { - break; - } - - for (const meeting of meetings) { - const meetingTimestamp = meeting.created - ? Date.parse(meeting.created) - : Date.now(); - if (meetingTimestamp > lastTimestamp) { - newMeetings.push(meeting); - } else { - break; - } - } - - if (meetings.length < 50) { - break; - } - - page += 1; - } - - if (newMeetings.length > 0) { - for (const meeting of newMeetings.reverse()) { - this.$emit(meeting, { - id: meeting.id || meeting.created, - summary: `Meeting Created: ${meeting.subject}`, - ts: meeting.created - ? Date.parse(meeting.created) - : Date.now(), - }); - } - - const latestMeeting = newMeetings[0]; - const latestTimestamp = latestMeeting.created - ? Date.parse(latestMeeting.created) - : Date.now(); - await this.db.set("lastTimestamp", latestTimestamp); - } + await this.emitEvent(); }, }; From 81fac432a370debd71bfbc8b19145fed2a31140d Mon Sep 17 00:00:00 2001 From: Luan Cazarine Date: Mon, 27 Jan 2025 16:48:01 -0300 Subject: [PATCH 3/3] pnpm update --- pnpm-lock.yaml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3183cb0fdb21a..713155d3aa882 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4580,7 +4580,11 @@ importers: specifier: ^1.5.1 version: 1.6.6 - components/goto_meeting: {} + components/goto_meeting: + dependencies: + '@pipedream/platform': + specifier: ^3.0.3 + version: 3.0.3 components/gotowebinar: dependencies: @@ -9279,8 +9283,7 @@ importers: specifier: 3.0.1 version: 3.0.1 - components/seen: - specifiers: {} + components/seen: {} components/segment: dependencies: